diff --git a/.gradle/2.14/taskArtifacts/cache.properties b/.gradle/2.14/taskArtifacts/cache.properties new file mode 100644 index 0000000..0398dc7 --- /dev/null +++ b/.gradle/2.14/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Mon Oct 08 08:30:49 EDT 2018 diff --git a/.gradle/2.14/taskArtifacts/cache.properties.lock b/.gradle/2.14/taskArtifacts/cache.properties.lock new file mode 100644 index 0000000..3edf44b Binary files /dev/null and b/.gradle/2.14/taskArtifacts/cache.properties.lock differ diff --git a/.gradle/2.14/taskArtifacts/fileHashes.bin b/.gradle/2.14/taskArtifacts/fileHashes.bin new file mode 100644 index 0000000..e859260 Binary files /dev/null and b/.gradle/2.14/taskArtifacts/fileHashes.bin differ diff --git a/.gradle/2.14/taskArtifacts/fileSnapshots.bin b/.gradle/2.14/taskArtifacts/fileSnapshots.bin new file mode 100644 index 0000000..b970dfb Binary files /dev/null and b/.gradle/2.14/taskArtifacts/fileSnapshots.bin differ diff --git a/.gradle/2.14/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin b/.gradle/2.14/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin new file mode 100644 index 0000000..6d82344 Binary files /dev/null and b/.gradle/2.14/taskArtifacts/fileSnapshotsToTreeSnapshotsIndex.bin differ diff --git a/.gradle/2.14/taskArtifacts/taskArtifacts.bin b/.gradle/2.14/taskArtifacts/taskArtifacts.bin new file mode 100644 index 0000000..4a5fc96 Binary files /dev/null and b/.gradle/2.14/taskArtifacts/taskArtifacts.bin differ diff --git a/.gradle/2.14/taskArtifacts/treeSnapshotUsage.bin b/.gradle/2.14/taskArtifacts/treeSnapshotUsage.bin new file mode 100644 index 0000000..92a7e9f Binary files /dev/null and b/.gradle/2.14/taskArtifacts/treeSnapshotUsage.bin differ diff --git a/.gradle/2.14/taskArtifacts/treeSnapshots.bin b/.gradle/2.14/taskArtifacts/treeSnapshots.bin new file mode 100644 index 0000000..597b33d Binary files /dev/null and b/.gradle/2.14/taskArtifacts/treeSnapshots.bin differ diff --git a/.gradle/gradle.log b/.gradle/gradle.log new file mode 100644 index 0000000..8b223cd --- /dev/null +++ b/.gradle/gradle.log @@ -0,0 +1,7 @@ +This mapping 'snapshot_20171003' was designed for MC 1.12! Use at your own peril.This mapping 'snapshot_20171003' was designed for MC 1.12! Use at your own peril. + +Found AccessTransformer: crafttweaker_at.cfg_CraftTweaker2-MC1120-Main-1.12-4.1.10.492_at.cfg + +CONFIGURE SUCCESSFUL + +Total time: 2.697 secs diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decomp.jar b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decomp.jar new file mode 100644 index 0000000..abb0aae Binary files /dev/null and b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decomp.jar differ diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decomp.jar.md5 b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decomp.jar.md5 new file mode 100644 index 0000000..446e30d --- /dev/null +++ b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decomp.jar.md5 @@ -0,0 +1,2 @@ +191774182043ce68b8eb2d7f86368d92 +a8495346869f26c8f117a212317ffe99 \ No newline at end of file diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decompFixed.jar b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decompFixed.jar new file mode 100644 index 0000000..9bc1096 Binary files /dev/null and b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decompFixed.jar differ diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decompFixed.jar.md5 b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decompFixed.jar.md5 new file mode 100644 index 0000000..fcacd0d --- /dev/null +++ b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-decompFixed.jar.md5 @@ -0,0 +1,94 @@ +f94706e31fd07794bc0b5630823f178c +191774182043ce68b8eb2d7f86368d92 +a796fa5fb1324b09ca6944b6b2b692c5 +63eb197e4c53015be072bdac83f243c5 +45226328d685dde37cdd8bc518a65dd1 +eb23c60413bbd01385f2e5cf70721e7c +cbb4e44e2a52920894674c262a95feeb +d9da587545ce1d79d214e9c9638032ee +90ef08c8812630045b694c4abe196589 +85cb312957ceaa1cde9ed68e449af7ac +77f39d8ca3a32ca5fd6c0a04ac1a887d +19e4219fd6549c85901df3a34cb72088 +548b2415e92120943a4ea4dc137f1599 +b7f4e1624cce68fec0395dbdd92fe95b +e26b149d4207540215779346ac222137 +e68492c30084e22f59392dec16049f2f +72a30197f2f918d0276f755e8709a03b +d1bd04b4fd9ba188f767b7b1f5eceed6 +44296879890f8441ae03ef975dfbea10 +414f9262da0406896bcca3b5d986ea5d +ef1a68ff834d55186eaa199f8e215d48 +c0f50e8c762de4993bfd237ca7401d0a +983cee8b456b140259b4e9574d83b7e2 +438fab1762f41ba6e3977d54f8b8f74e +0bf547aafb4d8597978a66b08a757ad4 +cbe04d1da486f4d5f05eaf90fdd5088e +032aa7274ba149b67d8c411b380e291d +afefbae495463b038b82590f10f348a4 +82964f569c3db5adc9e5b8022e813c9e +2f25424703ddd35f4e8a877bf6146963 +b7f1934eefa8d08a0825bfbe41c5bd96 +69eec415c6d5d59eb74fc63cb2424fd3 +71c1a831ae78ead03b977b400f0c2ae8 +278dd48379f05b8966689e8db258b2e5 +6fc47351dfb5347df2dd3b75b485a1eb +adfbf0ebc7428f61056fbee7b441b006 +7a5f5dcff92146489b58ad41f5d1532e +368cdaa27f8adb1ab11f21b7e2d710d2 +5cd4dc19336e10b7831c9e8fca9145e6 +b3a7dd598f4de3ed0dc5b4168758adb0 +f0e9887965af93f50fb0c8aff576dd0d +722a1764b62a3f21a617d9747e110eb4 +139f9b546a7bf10470edf0b17a0f51e2 +909ebd0471a57549b8ee5648c339babd +4394fdf0c874a8af704b55cbbee265af +b23514a8330082545565b807c7a0abf7 +05ba550776059818ef90bf90b1d94a7e +027f22beb45ec4470916dfc2bc986c2e +661981434569ee7fa71981cba6641b36 +0b74ca3d921b58b6c50624bc97875328 +72865036902990192094b007a1bcaeab +18c43f3893a48c7360c91b74f5d12407 +aed38ac00ee8af5c3302d5d9312c6a4a +d414040855ee41d9bf4377134b38314b +f02f74ea291336d579a515e3e1dc0375 +5a435bc56b1db3f8d4657ae3359ca1d5 +f2ddaf7b9bea007e9605d486542f6acb +993fb202cf624c98709c8d1244e85864 +d1ac0549ddce30e88d4795b2f7000fab +1241f6d5ce52f46066545fa628146247 +60cc6297913b45e878d5199e20bc662b +0dd56e09882704fe4727553393f8feb8 +5042c1ae32963c05d60c984975d1fcd7 +162e1540af1ea744efedf9fa4725ea17 +cbb2da6e2094ef4d3972c94a27319245 +cf7310c683ae92d39722855b054ea769 +4dbab1b957f9b0a2a3ce2d55fe89578a +5940f713b98e14dbef673c9c358a89e7 +70779a09a14771f3a8b1d6ed93a1ecb9 +46265ab20f98c4511ee4f120688ac9c5 +85031b22015be949bc9e1d9c10ad4c21 +e77fcf76c6a2515fe183e836bb055e56 +bf713d51b90ea2532b840d89598f2a05 +c26dfffa77b55c87f618509641d33993 +1394e60d7420c8b7ebabdba772ccce6a +a8a6abfa2aa4b17541ecfc40c6551753 +830818505477a0e848efc3160b67f322 +37d56f858d356d288ccd04fd2f26f22a +9ebb14743820e84b204a8c5f4a451268 +65948958fc81134e784ef807bc1325ef +f4d5b95717304c7296fc6350d6a54388 +c38370d0f4f715ddb59a6f8cb7652ca7 +2e442a1f4f55253b5a8cc7c114f910d0 +5d95125525b41d1318e46da1a8ae2137 +769f310c24a01d2f1abaaeb8d71e652d +949ed220639e95a26a70e5de8c9012a7 +6b1204a554d40f8776391cadcabb360b +9bf822a790f91165c4f4e8fd51e22897 +b35566032ae6400050b13e0fc523e25d +1f95e4f29ffdb6f5e2e125668f73e1d8 +5b4ff64526b696a2c00e81cac25b0c19 +7ad3c97771e468f733c2202d535033df +93428df0ff035ea8a019ced9237eeb9e +191774182043ce68b8eb2d7f86368d92 \ No newline at end of file diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-patched.jar b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-patched.jar new file mode 100644 index 0000000..7cbba14 Binary files /dev/null and b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-patched.jar differ diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-patched.jar.md5 b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-patched.jar.md5 new file mode 100644 index 0000000..3a03ad7 --- /dev/null +++ b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-patched.jar.md5 @@ -0,0 +1,10 @@ +699bde7984acbbf837629edd3711bdb9 +cfcd208495d565ef66e7dff9f98764da +c4ca4238a0b923820dcc509a6f75849b +68934a3e9455fa72420237eb05902327 +b326b5062b2f0e69046810717534cb09 +039ece1d0bb6276532c5f2d7d4740be5 +c6d6710bb7d7de91eb5e3184fa2aa132 +null +86873701b3976614b336bbab4aa13f38 +f94706e31fd07794bc0b5630823f178c \ No newline at end of file diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar new file mode 100644 index 0000000..6247d86 Binary files /dev/null and b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar differ diff --git a/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar.md5 b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar.md5 new file mode 100644 index 0000000..19625ce --- /dev/null +++ b/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar.md5 @@ -0,0 +1,11 @@ +a8495346869f26c8f117a212317ffe99 +null +null +d56517a0988257d7b00e3b161e7f0592 +370d7db5ceccf9ef79837122405d21a0 +82b4a65744a9f8982f0783602ed865b5 +0a9b91c4e39bccea34a56de5c66e93a5 +b326b5062b2f0e69046810717534cb09 +b326b5062b2f0e69046810717534cb09 +127049b25b59bb7ed4bde0203242fb55 +05ba18076e5d26573866194cfa4f5434 \ No newline at end of file diff --git a/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-sources.jar b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-sources.jar new file mode 100644 index 0000000..8ba4916 Binary files /dev/null and b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-sources.jar differ diff --git a/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-sources.jar.md5 b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-sources.jar.md5 new file mode 100644 index 0000000..dc4b482 --- /dev/null +++ b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-sources.jar.md5 @@ -0,0 +1,5 @@ +dbd19fdad7b8d533a819537a12ccc216 +01a4e3f4d498fb888768cc78b4d0ba5a +fbb577fed474372e93127d592e968729 +a22e0364cb8aabe8c4dfe3a5071f60d2 +699bde7984acbbf837629edd3711bdb9 \ No newline at end of file diff --git a/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery).jar b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery).jar new file mode 100644 index 0000000..6f30968 Binary files /dev/null and b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery).jar differ diff --git a/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery).jar.md5 b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery).jar.md5 new file mode 100644 index 0000000..c01f68c --- /dev/null +++ b/.gradle/minecraft/forgeSrc-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery).jar.md5 @@ -0,0 +1,4 @@ +d8bdb4b60f737909b1fcfa0f892a5285 +dbd19fdad7b8d533a819537a12ccc216 +null +58cfbd859c210791e4c19082122ae037 \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ba1ec5c --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..929940d --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,117 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0164d4e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + ApexVCS + + + + + \ No newline at end of file diff --git a/.idea/modules/PrimalSorcery_api.iml b/.idea/modules/PrimalSorcery_api.iml new file mode 100644 index 0000000..3996821 --- /dev/null +++ b/.idea/modules/PrimalSorcery_api.iml @@ -0,0 +1,13 @@ + + + + + + + FORGE + MCP + + + + + \ No newline at end of file diff --git a/.idea/modules/PrimalSorcery_main.iml b/.idea/modules/PrimalSorcery_main.iml new file mode 100644 index 0000000..3996821 --- /dev/null +++ b/.idea/modules/PrimalSorcery_main.iml @@ -0,0 +1,13 @@ + + + + + + + FORGE + MCP + + + + + \ No newline at end of file diff --git a/.idea/modules/PrimalSorcery_test.iml b/.idea/modules/PrimalSorcery_test.iml new file mode 100644 index 0000000..3996821 --- /dev/null +++ b/.idea/modules/PrimalSorcery_test.iml @@ -0,0 +1,13 @@ + + + + + + + FORGE + MCP + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..e037670 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,1172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1539001684176 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 389839a..37a506a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# PrimalSorcery +# Primal-Submod +Sample Primal Child Mod \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..f7c37b8 --- /dev/null +++ b/build.gradle @@ -0,0 +1,87 @@ +buildscript { + repositories { + jcenter() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' + } +} +repositories { + maven { + name = "primal" + url "https://maven.nmd.so" + } + + maven { + name = "jei" + url "http://dvs1.progwml6.com/files/maven" + } + + maven { + name "CraftTweaker" + url "http://maven.blamejared.com/" + } +} + +apply plugin: 'net.minecraftforge.gradle.forge' +apply plugin: 'java' +compileJava { + sourceCompatibility = targetCompatibility = JavaVersion.VERSION_1_8 +} +group = "${mod_group}" +version = "${mod_version}" +archivesBaseName = "${mod_name}" + +idea { module { inheritOutputDirs = true } } +minecraft { + version = "${mc_version}" + "-" + "${forge_version}" + runDir = "run" + mappings = "${mcp_mappings}" + + // JEI + useDepAts = true + + // Replace + replace "@VERSION@", project.mod_version +} + +dependencies { + // PrimalCore + deobfCompile "nmd.primal.core:PrimalCore:${mc_version}-${primal_version}:dev" + + // JEI + //runtime "mezz.jei:jei_${mc_version}:${jei_version}" + deobfCompile "mezz.jei:jei_${mc_version}:${jei_version}:api" + + // CraftTweaker + //compile "CraftTweaker2:CraftTweaker2-MC1120-Main:${craftweaker_version}" + //compile "CraftTweaker2:CraftTweaker2-API:${craftweaker_version}" +} + +processResources { + // this will ensure that this task is redone when the versions change. + inputs.property "version", "${mod_version}" + inputs.property "mcversion", "${mc_version}" + // replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + // replace version and mcversion + expand 'version':"${mod_version}", 'mcversion':"${mc_version}" + } + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } +} + + + +// end // \ No newline at end of file diff --git a/build/depAts/crafttweaker_at.cfg_CraftTweaker2-MC1120-Main-1.12-4.1.10.492_at.cfg b/build/depAts/crafttweaker_at.cfg_CraftTweaker2-MC1120-Main-1.12-4.1.10.492_at.cfg new file mode 100644 index 0000000..0c70d50 --- /dev/null +++ b/build/depAts/crafttweaker_at.cfg_CraftTweaker2-MC1120-Main-1.12-4.1.10.492_at.cfg @@ -0,0 +1,12 @@ +public net.minecraft.nbt.NBTTagList field_74747_a #tagList +public net.minecraft.server.MinecraftServer field_71308_o #anvilFile +public net.minecraft.inventory.InventoryCrafting field_70465_c #eventHandler +public net.minecraft.inventory.SlotCrafting field_75238_b #player +public net.minecraft.util.text.translation.LanguageMap field_74817_a #instance +public net.minecraft.util.text.translation.I18n field_74839_a #localizedName +public net.minecraft.util.text.translation.LanguageMap field_74816_c #languageList +public-f net.minecraft.client.entity.EntityPlayerSP field_192036_cb #recipeBook +public net.minecraft.block.Block field_149782_v #blockHardness +public net.minecraft.creativetab.CreativeTabs field_78034_o # tabLabel +public net.minecraft.item.crafting.Ingredient field_193371_b #matchingStacks +public net.minecraft.world.biome.Biome field_76791_y # biomeName \ No newline at end of file diff --git a/build/taskLogs/decompileMc.log b/build/taskLogs/decompileMc.log new file mode 100644 index 0000000..328552d --- /dev/null +++ b/build/taskLogs/decompileMc.log @@ -0,0 +1,69925 @@ +INFO: Adding File to context from classpath: /Users/mminaie/.gradle/wrapper/dists/gradle-2.14-all/t7wfomcrmv8dmyii9c9waem8/gradle-2.14/lib/gradle-launcher-2.14.jar +INFO: Adding Archive: /Users/mminaie/.gradle/wrapper/dists/gradle-2.14-all/t7wfomcrmv8dmyii9c9waem8/gradle-2.14/lib/gradle-launcher-2.14.jar +INFO: Loading Class: org/gradle/tooling/internal/provider/PayloadSerializer$2.class +INFO: Loading Class: org/gradle/tooling/internal/provider/PayloadSerializer.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderConnection$ProgressListenerConfiguration.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClasspathInferer.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderRegistry$2.class +INFO: Loading Class: org/gradle/tooling/internal/provider/PayloadClassLoaderFactory.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultPayloadClassLoaderRegistry.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultPayloadClassLoaderRegistry$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/JarCache$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderFactory$MixInClassLoader.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderConnection.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DaemonSidePayloadClassLoaderFactory.class +INFO: Loading Class: org/gradle/tooling/internal/provider/SerializedPayload.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderFactory$MixInClassLoader$TransformingAdapter.class +INFO: Loading Class: org/gradle/tooling/internal/provider/PayloadClassLoaderRegistry.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderFactory$MixInClassLoader$AnnotationDetector$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderStartParameterConverter.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderFactory.class +INFO: Loading Class: org/gradle/tooling/internal/provider/LoggingBridgingBuildActionExecuter.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DeserializeMap.class +INFO: Loading Class: org/gradle/tooling/internal/provider/PayloadSerializer$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderConnection$BuildProgressListenerInvokingBuildEventConsumer.class +INFO: Loading Class: org/gradle/tooling/internal/provider/LauncherServices$ToolingBuildSessionScopeServices.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderFactory$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/connection/ProviderConnectionParameters.class +INFO: Loading Class: org/gradle/tooling/internal/provider/connection/ProviderOperationParameters.class +INFO: Loading Class: org/gradle/tooling/internal/provider/connection/BuildLogLevelMixIn.class +INFO: Loading Class: org/gradle/tooling/internal/provider/connection/ProviderBuildResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ConnectionScopeServices.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultPayloadClassLoaderRegistry$ClassLoaderSpecVisitor.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultPayloadClassLoaderRegistry$ClassLoaderToDetailsTransformer.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderConnection$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/JarCache$FileInfo.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultPayloadClassLoaderRegistry$DetailsToClassLoaderTransformer.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClassLoaderDetails.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ModelClassLoaderFactory.class +INFO: Loading Class: org/gradle/tooling/internal/provider/jdk6/Jdk6ClassLookup.class +INFO: Loading Class: org/gradle/tooling/internal/provider/TestExecutionRequestAction.class +INFO: Loading Class: org/gradle/tooling/internal/provider/BuildModelAction.class +INFO: Loading Class: org/gradle/tooling/internal/provider/LauncherServices.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientProvidedBuildAction.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderFactory$MixInClassLoader$AnnotationDetector.class +INFO: Loading Class: org/gradle/tooling/internal/provider/BuildClientSubscriptions.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderRegistry$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/JarCache.class +INFO: Loading Class: org/gradle/tooling/internal/provider/test/ProviderInternalJvmTestRequest.class +INFO: Loading Class: org/gradle/tooling/internal/provider/test/ProviderInternalTestExecutionRequest.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ShutdownCoordinator.class +INFO: Loading Class: org/gradle/tooling/internal/provider/LauncherServices$ToolingGlobalScopeServices.class +INFO: Loading Class: org/gradle/tooling/internal/provider/SubscribableBuildAction.class +INFO: Loading Class: org/gradle/tooling/internal/provider/LoggingBridgingBuildActionExecuter$OutputEventListenerAdapter.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderConnection$ProgressListenerConfiguration$SynchronizedConsumer.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ProviderConnection$Parameters.class +INFO: Loading Class: org/gradle/tooling/internal/provider/BuildActionResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DaemonSidePayloadClassLoaderFactory$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/TestExecutionRequestAction$2.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderRegistry.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTaskFinishedProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTaskSkippedResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/AbstractOperationResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultOperationStartedProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTaskFailureResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTaskSuccessResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/AbstractTaskResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTestDescriptor.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTestSkippedResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTestStartedProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/AbstractResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTestFailureResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTestFinishedProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/AbstractTestResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/AbstractProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultSuccessResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultFailureResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultOperationFinishedProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultFailure.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTaskStartedProgressEvent.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTestSuccessResult.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultOperationDescriptor.class +INFO: Loading Class: org/gradle/tooling/internal/provider/events/DefaultTaskDescriptor.class +INFO: Loading Class: org/gradle/tooling/internal/provider/TestExecutionRequestAction$1.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DaemonBuildActionExecuter.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultConnectionMetaData.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ExecuteBuildActionRunner.class +INFO: Loading Class: org/gradle/tooling/internal/provider/SerializeMap.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultConnection.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClientSidePayloadClassLoaderRegistry$LocalClassLoader.class +INFO: Loading Class: org/gradle/tooling/internal/provider/ClassLoaderCache.class +INFO: Loading Class: org/gradle/tooling/internal/provider/InternalCancellationTokenAdapter.class +INFO: Loading Class: org/gradle/tooling/internal/provider/DefaultPayloadClassLoaderRegistry$2.class +INFO: Loading Class: org/gradle/launcher/cli/converter/LayoutToPropertiesConverter$1.class +INFO: Loading Class: org/gradle/launcher/cli/converter/LayoutToPropertiesConverter.class +INFO: Loading Class: org/gradle/launcher/cli/converter/PropertiesToDaemonParametersConverter.class +INFO: Loading Class: org/gradle/launcher/cli/converter/PropertiesToStartParameterConverter.class +INFO: Loading Class: org/gradle/launcher/cli/converter/DaemonCommandLineConverter.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$ParseAndBuildAction.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$WithLogging.class +INFO: Loading Class: org/gradle/launcher/cli/ExecuteBuildAction.class +INFO: Loading Class: org/gradle/launcher/cli/ExceptionReportingAction.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$BuiltInActions.class +INFO: Loading Class: org/gradle/launcher/cli/StopDaemonAction.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$CommandLineParseFailureAction.class +INFO: Loading Class: org/gradle/launcher/cli/JavaRuntimeValidationAction.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineAction.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory.class +INFO: Loading Class: org/gradle/launcher/cli/GuiActionsFactory.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$ShowVersionAction.class +INFO: Loading Class: org/gradle/launcher/cli/Parameters.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$ShowUsageAction.class +INFO: Loading Class: org/gradle/launcher/cli/ParametersConverter.class +INFO: Loading Class: org/gradle/launcher/cli/GuiActionsFactory$ShowGuiAction.class +INFO: Loading Class: org/gradle/launcher/cli/BuildActionsFactory.class +INFO: Loading Class: org/gradle/launcher/cli/RunBuildAction.class +INFO: Loading Class: org/gradle/launcher/cli/CommandLineActionFactory$1.class +INFO: Loading Class: org/gradle/launcher/Main.class +INFO: Loading Class: org/gradle/launcher/GradleMain.class +INFO: Loading Class: org/gradle/launcher/bootstrap/ProcessCompleter.class +INFO: Loading Class: org/gradle/launcher/bootstrap/EntryPoint.class +INFO: Loading Class: org/gradle/launcher/bootstrap/ExecutionCompleter.class +INFO: Loading Class: org/gradle/launcher/bootstrap/ExecutionListener.class +INFO: Loading Class: org/gradle/launcher/bootstrap/ProcessBootstrap.class +INFO: Loading Class: org/gradle/launcher/bootstrap/EntryPoint$1.class +INFO: Loading Class: org/gradle/launcher/bootstrap/EntryPoint$RecordingExecutionListener.class +INFO: Loading Class: org/gradle/launcher/exec/DefaultBuildActionParameters.class +INFO: Loading Class: org/gradle/launcher/exec/BuildExecuter.class +INFO: Loading Class: org/gradle/launcher/exec/ContinuousBuildActionExecuter$1$1.class +INFO: Loading Class: org/gradle/launcher/exec/ContinuousBuildActionExecuter$1.class +INFO: Loading Class: org/gradle/launcher/exec/ChainingBuildActionRunner.class +INFO: Loading Class: org/gradle/launcher/exec/InProcessBuildActionExecuter$DefaultBuildController.class +INFO: Loading Class: org/gradle/launcher/exec/BuildActionExecuter.class +INFO: Loading Class: org/gradle/launcher/exec/CompositeBuildActionExecuter.class +INFO: Loading Class: org/gradle/launcher/exec/BuildActionParameters.class +INFO: Loading Class: org/gradle/launcher/exec/InProcessBuildActionExecuter.class +INFO: Loading Class: org/gradle/launcher/exec/InProcessBuildActionExecuter$DefaultBuildController$State.class +INFO: Loading Class: org/gradle/launcher/exec/DaemonUsageSuggestingBuildActionExecuter.class +INFO: Loading Class: org/gradle/launcher/exec/DefaultCompositeBuildActionParameters.class +INFO: Loading Class: org/gradle/launcher/exec/ContinuousBuildActionExecuter$2.class +INFO: Loading Class: org/gradle/launcher/exec/DefaultCompositeBuildController.class +INFO: Loading Class: org/gradle/launcher/exec/ChainingCompositeBuildActionRunner.class +INFO: Loading Class: org/gradle/launcher/exec/ContinuousBuildActionExecuter.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/DefaultDaemonServerConfiguration.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/BuildProcess.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/DaemonJvmOptions.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/DaemonUsage.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/ForegroundDaemonConfiguration.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/DaemonParameters.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/GradleProperties.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/DaemonServerConfiguration.class +INFO: Loading Class: org/gradle/launcher/daemon/configuration/DaemonJvmOptions$1.class +INFO: Loading Class: org/gradle/launcher/daemon/DaemonExecHandleBuilder.class +INFO: Loading Class: org/gradle/launcher/daemon/server/AllDaemonExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonExpirationResult.class +INFO: Loading Class: org/gradle/launcher/daemon/server/LruDaemonExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$DisconnectQueue.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonStateCoordinator.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/HealthLogger.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/MemoryInfo.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/DaemonStatus.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/HintGCAfterBuild.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectorMonitoringStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionCheck$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionStats.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/SlidingWindow.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionCheck.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionMonitor$2.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionMonitor.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionEvent.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionMonitor$JVMStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/DefaultSlidingWindow.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/gc/GarbageCollectionMonitor$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/DefaultDaemonHealthServices.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/DaemonHealthTracker.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/DaemonHealthServices.class +INFO: Loading Class: org/gradle/launcher/daemon/server/health/DaemonStats.class +INFO: Loading Class: org/gradle/launcher/daemon/server/Daemon$4.class +INFO: Loading Class: org/gradle/launcher/daemon/server/Daemon$DaemonExpirationPeriodicCheck.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonRegistryUnavailableExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/Daemon$3.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultIncomingConnectionHandler$ConnectionWorker.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonServices.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonTcpServerConnector$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/BadlyFormedRequestException.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$CommandQueue$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonServerConnector.class +INFO: Loading Class: org/gradle/launcher/daemon/server/LowTenuredSpaceDaemonExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonRegistryUnavailableExpirationStrategy$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonStateCoordinator$2.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultIncomingConnectionHandler.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DomainRegistryUpdater.class +INFO: Loading Class: org/gradle/launcher/daemon/server/AnyDaemonExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$CommandQueue.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonStateCoordinator$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$StdinQueue.class +INFO: Loading Class: org/gradle/launcher/daemon/server/Daemon$2.class +INFO: Loading Class: org/gradle/launcher/daemon/server/Daemon$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/Daemon.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$ReceiveQueue.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DefaultDaemonConnection$CancelQueue.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/HandleCancel.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/LogToClient.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ForwardClientInput$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ExecuteBuild$DaemonConnectionBackedEventConsumer.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ForwardClientInput$2.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/StartBuildOrRespondWithBusy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ForwardClientInput.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/LogToClient$AsynchronousLogDispatcher.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/EstablishBuildEnvironment.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/WatchForDisconnection.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/HandleCancel$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/LogToClient$AsynchronousLogDispatcher$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/LogToClient$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/StartBuildOrRespondWithBusy$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ResetDeprecationLogger.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/RequestStopIfSingleUsedDaemon.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/NoOpDaemonCommandAction.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/WatchForDisconnection$1.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ExecuteBuild.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/DaemonCommandExecuter.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/BuildCommandOnly.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/DefaultDaemonCommandExecuter.class +INFO: Loading Class: org/gradle/launcher/daemon/server/exec/ReturnResult.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonStateCoordinator$State.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/DaemonConnection.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/DaemonStateControl.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/HandleStop.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/DaemonCommandAction.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/DaemonCommandExecution.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/StdinHandler.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/DaemonStoppedException.class +INFO: Loading Class: org/gradle/launcher/daemon/server/api/DaemonUnavailableException.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonTcpServerConnector.class +INFO: Loading Class: org/gradle/launcher/daemon/server/DaemonIdleTimeoutExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/server/IncomingConnectionHandler.class +INFO: Loading Class: org/gradle/launcher/daemon/server/SynchronizedDispatchConnection.class +INFO: Loading Class: org/gradle/launcher/daemon/server/LowMemoryDaemonExpirationStrategy.class +INFO: Loading Class: org/gradle/launcher/daemon/diagnostics/DaemonStartupInfo.class +INFO: Loading Class: org/gradle/launcher/daemon/diagnostics/DaemonDiagnostics.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/DaemonOutputConsumer.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/ForegroundDaemonAction.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/DaemonOutputConsumer$1.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/DaemonMain$1.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/DaemonStartupCommunication.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/GradleDaemon.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/DaemonMain.class +INFO: Loading Class: org/gradle/launcher/daemon/bootstrap/DaemonGreeter.class +INFO: Loading Class: org/gradle/launcher/daemon/context/DaemonConnectDetails.class +INFO: Loading Class: org/gradle/launcher/daemon/context/DaemonContextBuilder.class +INFO: Loading Class: org/gradle/launcher/daemon/context/DaemonCompatibilitySpec.class +INFO: Loading Class: org/gradle/launcher/daemon/context/DefaultDaemonContext.class +INFO: Loading Class: org/gradle/launcher/daemon/context/DaemonContext.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonRegistry$EmptyRegistryException.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonInfo.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/PersistentDaemonRegistry$3.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonRegistryServices.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonDir.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonRegistryServices$1.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/PersistentDaemonRegistry$4.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonRegistry.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/PersistentDaemonRegistry$2.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/PersistentDaemonRegistry.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/PersistentDaemonRegistry$1.class +INFO: Loading Class: org/gradle/launcher/daemon/registry/DaemonRegistryContent.class +INFO: Loading Class: org/gradle/launcher/daemon/logging/DaemonMessages.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonConnectionException.class +INFO: Loading Class: org/gradle/launcher/daemon/client/InputForwarder$1.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientInterruptedException.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientGlobalServices.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientConnection.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DefaultDaemonConnector$CleanupOnStaleAddress.class +INFO: Loading Class: org/gradle/launcher/daemon/client/StopDispatcher.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientServicesSupport.class +INFO: Loading Class: org/gradle/launcher/daemon/client/StaleDaemonAddressException.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonCancelForwarder$1.class +INFO: Loading Class: org/gradle/launcher/daemon/client/SingleUseDaemonClient.class +INFO: Loading Class: org/gradle/launcher/daemon/client/StubDaemonHealthServices.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonDisappearedException.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonConnector.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientConnection$StaleAddressDetector.class +INFO: Loading Class: org/gradle/launcher/daemon/client/JvmVersionValidator.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientInputForwarder.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientFactory.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DefaultDaemonConnector.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClient.class +INFO: Loading Class: org/gradle/launcher/daemon/client/SingleUseDaemonClientServices.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientInputForwarder$ForwardTextStreamToConnection.class +INFO: Loading Class: org/gradle/launcher/daemon/client/NoUsableDaemonFoundException.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonStartListener.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonClientServices.class +INFO: Loading Class: org/gradle/launcher/daemon/client/InputForwarder.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonStopClient$1.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonInitialConnectException.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonStopClient.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonStarter.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DaemonCancelForwarder.class +INFO: Loading Class: org/gradle/launcher/daemon/client/DefaultDaemonStarter.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Failure.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$1.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/BuildAndStop.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$LogLevelChangeEventSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$ProgressStartEventSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$StyledTextOutputEventSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/OutputMessage.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$BuildEventSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$FailureSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Finished.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Command.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/BuildStarted.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/ForwardInput.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Cancel.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$ProgressCompleteEventSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/CloseInput.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Success.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$OutputMessageSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$ProgressEventSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/BuildEvent.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/InputMessage.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Message.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Build.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/StopWhenIdle.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$ForwardInputSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonUnavailable.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$CloseInputSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$SpanSerializer.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Stop.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/Result.class +INFO: Loading Class: org/gradle/launcher/daemon/protocol/DaemonMessageSerializer$LogEventSerializer.class +INFO: Adding File to context from classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/resources.jar +INFO: Adding Archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/resources.jar +INFO: Adding File to context from classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar +INFO: Adding Archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar +INFO: Loading Class: apple/applescript/AppleScriptEngine.class +INFO: Loading Class: apple/applescript/AppleScriptEngineFactory$1.class +INFO: Loading Class: apple/applescript/AppleScriptEngineFactory.class +INFO: Loading Class: apple/laf/AquaLookAndFeel.class +INFO: Loading Class: apple/laf/JRSUIConstants$ArrowsOnly.class +INFO: Loading Class: apple/laf/JRSUIConstants$BooleanValue.class +INFO: Loading Class: apple/laf/JRSUIConstants$Direction.class +INFO: Loading Class: apple/laf/JRSUIConstants$NoIndicator.class +INFO: Loading Class: apple/laf/JRSUIConstants$ScrollBarHit.class +INFO: Loading Class: apple/laf/JRSUIConstants$SegmentLeadingSeparator.class +INFO: Loading Class: apple/laf/JRSUIConstants$Variant.class +INFO: Loading Class: apple/laf/JRSUIConstants$WindowClipCorners.class +INFO: Loading Class: apple/laf/JRSUIConstants$WindowTitleBarSeparator.class +INFO: Loading Class: apple/laf/JRSUIConstants$WindowType.class +INFO: Loading Class: apple/laf/JRSUIFocus.class +INFO: Loading Class: apple/laf/JRSUIState$AnimationFrameState.class +INFO: Loading Class: apple/laf/JRSUIState$TitleBarHeightState.class +INFO: Loading Class: apple/laf/JRSUIUtils$HitDetection.class +INFO: Loading Class: apple/laf/JRSUIUtils$Images.class +INFO: Loading Class: apple/laf/JRSUIUtils$InternalFrame.class +INFO: Loading Class: apple/laf/JRSUIUtils$ScrollBar.class +INFO: Loading Class: apple/laf/JRSUIUtils$Tree.class +INFO: Loading Class: apple/launcher/JavaAppLauncher$1.class +INFO: Loading Class: apple/launcher/JavaAppLauncher.class +INFO: Loading Class: apple/security/AppleProvider$1.class +INFO: Loading Class: apple/security/AppleProvider.class +INFO: Loading Class: apple/security/KeychainStore$1.class +INFO: Loading Class: apple/security/KeychainStore$CertKeychainItemPair.class +INFO: Loading Class: apple/security/KeychainStore$KeyEntry.class +INFO: Loading Class: apple/security/KeychainStore$TrustedCertEntry.class +INFO: Loading Class: apple/security/KeychainStore.class +INFO: Loading Class: com/apple/concurrent/Dispatch$Priority.class +INFO: Loading Class: com/apple/concurrent/Dispatch.class +INFO: Loading Class: com/apple/concurrent/LibDispatchConcurrentQueue.class +INFO: Loading Class: com/apple/concurrent/LibDispatchMainQueue$ASync.class +INFO: Loading Class: com/apple/concurrent/LibDispatchMainQueue$Sync.class +INFO: Loading Class: com/apple/concurrent/LibDispatchMainQueue.class +INFO: Loading Class: com/apple/concurrent/LibDispatchNative$1.class +INFO: Loading Class: com/apple/concurrent/LibDispatchNative.class +INFO: Loading Class: com/apple/concurrent/LibDispatchQueue.class +INFO: Loading Class: com/apple/concurrent/LibDispatchRetainedResource.class +INFO: Loading Class: com/apple/concurrent/LibDispatchSerialQueue$1.class +INFO: Loading Class: com/apple/concurrent/LibDispatchSerialQueue.class +INFO: Loading Class: com/apple/eawt/AppEvent$AboutEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$AppForegroundEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$AppHiddenEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$AppReOpenedEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$FilesEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$FullScreenEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$OpenFilesEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$OpenURIEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$PreferencesEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$PrintFilesEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$QuitEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$ScreenSleepEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$SystemSleepEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent$UserSessionEvent.class +INFO: Loading Class: com/apple/eawt/AppEvent.class +INFO: Loading Class: com/apple/eawt/AppForegroundListener.class +INFO: Loading Class: com/apple/eawt/AppHiddenListener.class +INFO: Loading Class: com/apple/eawt/Application$1.class +INFO: Loading Class: com/apple/eawt/Application.class +INFO: Loading Class: com/apple/eawt/ApplicationAdapter.class +INFO: Loading Class: com/apple/eawt/ApplicationBeanInfo.class +INFO: Loading Class: com/apple/eawt/ApplicationEvent.class +INFO: Loading Class: com/apple/eawt/ApplicationListener.class +INFO: Loading Class: com/apple/eawt/FullScreenAdapter.class +INFO: Loading Class: com/apple/eawt/FullScreenHandler$1.class +INFO: Loading Class: com/apple/eawt/FullScreenHandler.class +INFO: Loading Class: com/apple/eawt/FullScreenListener.class +INFO: Loading Class: com/apple/eawt/FullScreenUtilities.class +INFO: Loading Class: com/apple/eawt/OpenURIHandler.class +INFO: Loading Class: com/apple/eawt/QuitResponse.class +INFO: Loading Class: com/apple/eawt/ScreenSleepListener.class +INFO: Loading Class: com/apple/eawt/SystemSleepListener.class +INFO: Loading Class: com/apple/eawt/UserSessionListener.class +INFO: Loading Class: com/apple/eawt/_AppDockIconHandler.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$1.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AppEventDispatcher$1.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AppEventMultiplexor$1.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$1.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$2.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$3.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$4.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$5.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$6.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$7.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler$EventDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppMiscHandlers.class +INFO: Loading Class: com/apple/eawt/event/GestureAdapter.class +INFO: Loading Class: com/apple/eawt/event/GestureEvent.class +INFO: Loading Class: com/apple/eawt/event/GestureHandler$1.class +INFO: Loading Class: com/apple/eawt/event/GestureHandler$PerComponentNotifier.class +INFO: Loading Class: com/apple/eawt/event/GestureHandler.class +INFO: Loading Class: com/apple/eawt/event/GestureListener.class +INFO: Loading Class: com/apple/eawt/event/GesturePhaseEvent.class +INFO: Loading Class: com/apple/eawt/event/GesturePhaseListener.class +INFO: Loading Class: com/apple/eawt/event/GestureUtilities.class +INFO: Loading Class: com/apple/eawt/event/MagnificationEvent.class +INFO: Loading Class: com/apple/eawt/event/MagnificationListener.class +INFO: Loading Class: com/apple/eawt/event/RotationEvent.class +INFO: Loading Class: com/apple/eawt/event/RotationListener.class +INFO: Loading Class: com/apple/eawt/event/SwipeEvent.class +INFO: Loading Class: com/apple/eawt/event/SwipeListener.class +INFO: Loading Class: com/apple/eio/FileManager$1.class +INFO: Loading Class: com/apple/eio/FileManager.class +INFO: Loading Class: com/apple/laf/AquaBorder$Default.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$SizeConstants.class +INFO: Loading Class: com/apple/laf/AquaButtonCheckBoxUI$1.class +INFO: Loading Class: com/apple/laf/AquaButtonCheckBoxUI$CheckBoxButtonBorder.class +INFO: Loading Class: com/apple/laf/AquaButtonCheckBoxUI.class +INFO: Loading Class: com/apple/laf/AquaButtonLabeledUI$LabeledButtonBorder.class +INFO: Loading Class: com/apple/laf/AquaButtonLabeledUI$RecyclableSizingIcon.class +INFO: Loading Class: com/apple/laf/AquaButtonLabeledUI.class +INFO: Loading Class: com/apple/laf/AquaButtonRadioUI$1.class +INFO: Loading Class: com/apple/laf/AquaButtonRadioUI$RadioButtonBorder.class +INFO: Loading Class: com/apple/laf/AquaButtonRadioUI.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$1$1.class +INFO: Loading Class: com/apple/laf/AquaEditorPaneUI.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$1.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$2.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$3.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$4.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$5.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$6.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$AcceptAllFileFilter.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$ApproveSelectionAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$CancelSelectionAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$CustomDirOrAnyPanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$CustomFilePanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DateRenderer.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DefaultButtonAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DirOrAnyPanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DirectoryComboBoxAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DirectoryComboBoxModel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DnDHandler$1.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DnDHandler.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$DoubleClickListener.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$FCSubpanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$FileListMouseListener.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$FileRenderer.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$FilterComboBoxAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$FilterComboBoxModel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$JSortingTableHeader$AquaTableCellRenderer.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$JSortingTableHeader.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$JTableExtension.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$MacFCTableCellRenderer.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$MacListSelectionModel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$NewFolderAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$OpenDirOrAnyPanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$OpenFilePanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$OpenSelectionAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$SaveFilePanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$SaveTextDocumentListener.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$SaveTextFocusListener.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$ScrollPaneCornerPanel.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$SelectionListener.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI$UpdateAction.class +INFO: Loading Class: com/apple/laf/AquaFileChooserUI.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel$DoChangeContents.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel$LoadFilesThread.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel$QuickSort.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel$QuickSortDates.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel$QuickSortNames.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel$SortableFile.class +INFO: Loading Class: com/apple/laf/AquaFileSystemModel.class +INFO: Loading Class: com/apple/laf/AquaFileView$1.class +INFO: Loading Class: com/apple/laf/AquaFileView$2.class +INFO: Loading Class: com/apple/laf/AquaFileView$3.class +INFO: Loading Class: com/apple/laf/AquaFileView$FileInfo.class +INFO: Loading Class: com/apple/laf/AquaFileView.class +INFO: Loading Class: com/apple/laf/AquaFocus$Drawable.class +INFO: Loading Class: com/apple/laf/AquaFocus$FocusedIcon$1.class +INFO: Loading Class: com/apple/laf/AquaFocus$FocusedIcon$2.class +INFO: Loading Class: com/apple/laf/AquaFocus$FocusedIcon.class +INFO: Loading Class: com/apple/laf/AquaFocus.class +INFO: Loading Class: com/apple/laf/AquaGroupBorder$TabbedPane.class +INFO: Loading Class: com/apple/laf/AquaGroupBorder$Titled.class +INFO: Loading Class: com/apple/laf/AquaGroupBorder$Titleless.class +INFO: Loading Class: com/apple/laf/AquaGroupBorder.class +INFO: Loading Class: com/apple/laf/AquaIcon$1.class +INFO: Loading Class: com/apple/laf/AquaIcon$DynamicallySizingJRSUIIcon.class +INFO: Loading Class: com/apple/laf/AquaIcon$FileIcon.class +INFO: Loading Class: com/apple/laf/AquaIcon$JRSUIControlSpec.class +INFO: Loading Class: com/apple/laf/AquaIcon$JRSUIIcon.class +INFO: Loading Class: com/apple/laf/AquaIcon$ScalingJRSUIIcon.class +INFO: Loading Class: com/apple/laf/AquaIcon.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$1.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$2.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$3.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$4.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$5.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$6.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$7.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$NineSliceMetrics.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$RecyclableSlicedImageControl.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$SlicedImageControl.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorder$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorder$2.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorder$3.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorder.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$1$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$2$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$2.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$3$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$3.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$4$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics$4.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameBorderMetrics.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameDockIconUI$DockLabel.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameDockIconUI$ScaledImageLabel.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameDockIconUI.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameManager.class +INFO: Loading Class: com/apple/laf/AquaInternalFramePaneUI$AquaDockingDesktopManager.class +INFO: Loading Class: com/apple/laf/AquaInternalFramePaneUI$Dock.class +INFO: Loading Class: com/apple/laf/AquaInternalFramePaneUI$DockLayoutManager.class +INFO: Loading Class: com/apple/laf/AquaInternalFramePaneUI.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$2.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$3.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$4$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$4$2.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$4$3.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$4$4.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$4.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$5$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$5.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$6$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$6.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$AquaBorderListener.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$AquaInternalFrameButtonIcon.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$CompoundUIBorder.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$InternalFrameShadow$1.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$InternalFrameShadow.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$PropertyListener.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI$ResizeBox.class +INFO: Loading Class: com/apple/laf/AquaInternalFrameUI.class +INFO: Loading Class: com/apple/laf/AquaKeyBindings$DeleteWordAction.class +INFO: Loading Class: com/apple/laf/AquaListUI$ComponentPainter.class +INFO: Loading Class: com/apple/laf/AquaMenuItemUI$1.class +INFO: Loading Class: com/apple/laf/AquaNativeResources$1.class +INFO: Loading Class: com/apple/laf/AquaNativeResources$2.class +INFO: Loading Class: com/apple/laf/AquaNativeResources$CColorPaintUIResource.class +INFO: Loading Class: com/apple/laf/AquaNativeResources.class +INFO: Loading Class: com/apple/laf/AquaOptionPaneUI$AquaButtonAreaLayout.class +INFO: Loading Class: com/apple/laf/AquaOptionPaneUI.class +INFO: Loading Class: com/apple/laf/AquaPainter$AquaPixelsKey.class +INFO: Loading Class: com/apple/laf/AquaPainter$RecyclableJRSUISlicedImageControl.class +INFO: Loading Class: com/apple/laf/AquaProgressBarUI$1$1.class +INFO: Loading Class: com/apple/laf/AquaProgressBarUI$1.class +INFO: Loading Class: com/apple/laf/AquaProgressBarUI$Animator.class +INFO: Loading Class: com/apple/laf/AquaProgressBarUI.class +INFO: Loading Class: com/apple/laf/AquaRootPaneUI$DefaultButtonPainter.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI$HitUtil.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$1$1.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$1.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$2$1.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$2.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$3.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$4.class +INFO: Loading Class: com/apple/laf/AquaSliderUI$TrackListener.class +INFO: Loading Class: com/apple/laf/AquaSliderUI.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$1.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$2.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$ArrowButtonHandler.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$PropertyChangeHandler.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$SpinPainter.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$SpinnerLayout.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI$TransparentButton.class +INFO: Loading Class: com/apple/laf/AquaSpinnerUI.class +INFO: Loading Class: com/apple/laf/AquaSplitPaneDividerUI$1.class +INFO: Loading Class: com/apple/laf/AquaSplitPaneDividerUI$DividerLayout.class +INFO: Loading Class: com/apple/laf/AquaSplitPaneDividerUI$HorizontalSplitDividerGradientPainter.class +INFO: Loading Class: com/apple/laf/AquaSplitPaneDividerUI.class +INFO: Loading Class: com/apple/laf/AquaSplitPaneUI.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneContrastUI.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$1.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$Actions.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$CroppedEdge.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$FocusHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$Handler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$LazyActionMap.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$MouseHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$PropertyChangeHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$ScrollableTabButton.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$ScrollableTabPanel.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$ScrollableTabSupport.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$ScrollableTabViewport.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$TabContainer.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$TabSelectionHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$TabbedPaneLayout.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI$TabbedPaneScrollLayout.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneCopyFromBasicUI.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneTabState.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$1.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$2.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$AlterRects.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$AquaTruncatingTabbedPaneLayout.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$FocusHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$MouseHandler$1.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$MouseHandler$2.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$MouseHandler$3.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$MouseHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI$TabbedPanePropertyChangeHandler.class +INFO: Loading Class: com/apple/laf/AquaTabbedPaneUI.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderUI$1$1.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderUI$1$2.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderUI$1.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderUI$AquaTableCellRenderer.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderUI.class +INFO: Loading Class: com/apple/laf/AquaTableUI$1.class +INFO: Loading Class: com/apple/laf/AquaTableUI$FocusHandler.class +INFO: Loading Class: com/apple/laf/AquaTableUI$MouseInputHandler.class +INFO: Loading Class: com/apple/laf/AquaTableUI.class +INFO: Loading Class: com/apple/laf/AquaTextFieldFormattedUI.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$1.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$10.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$11.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$12.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$2.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$3.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$4.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$5.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$6.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$7.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$8.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$9.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$SearchFieldBorder$1.class +INFO: Loading Class: com/apple/laf/AquaTextPaneUI.class +INFO: Loading Class: com/apple/laf/AquaTextPasswordFieldUI$AquaPasswordView.class +INFO: Loading Class: com/apple/laf/AquaTextPasswordFieldUI$CapsLockSymbolPainter.class +INFO: Loading Class: com/apple/laf/AquaTextPasswordFieldUI.class +INFO: Loading Class: com/apple/laf/AquaToolTipUI.class +INFO: Loading Class: com/apple/laf/AquaTreeUI$FocusHandler.class +INFO: Loading Class: com/apple/laf/AquaTreeUI$KeyboardExpandCollapseAction.class +INFO: Loading Class: com/apple/laf/AquaTreeUI$LineListener.class +INFO: Loading Class: com/apple/laf/AquaTreeUI$MacPropertyChangeHandler.class +INFO: Loading Class: com/apple/laf/AquaTreeUI$TreeArrowMouseInputHandler.class +INFO: Loading Class: com/apple/laf/AquaTreeUI.class +INFO: Loading Class: com/apple/laf/AquaUtils$1.class +INFO: Loading Class: com/apple/laf/AquaUtils$3.class +INFO: Loading Class: com/apple/laf/AquaUtils$4.class +INFO: Loading Class: com/apple/laf/AquaUtils$6$1.class +INFO: Loading Class: com/apple/laf/AquaUtils$IconImageFilter.class +INFO: Loading Class: com/apple/laf/AquaUtils$LazyKeyedSingleton.class +INFO: Loading Class: com/apple/laf/AquaUtils$Painter.class +INFO: Loading Class: com/apple/laf/AquaUtils$RecyclableObject.class +INFO: Loading Class: com/apple/laf/AquaUtils$Selectable.class +INFO: Loading Class: com/apple/laf/AquaUtils$ShadowBorder.class +INFO: Loading Class: com/apple/laf/AquaUtils$SlicedShadowBorder.class +INFO: Loading Class: com/apple/laf/ScreenMenu$1.class +INFO: Loading Class: com/apple/laf/ScreenMenu$2.class +INFO: Loading Class: com/apple/laf/ScreenMenu$3.class +INFO: Loading Class: com/apple/laf/ScreenMenu$4.class +INFO: Loading Class: com/apple/laf/ScreenMenu.class +INFO: Loading Class: com/apple/laf/ScreenMenuBar$1.class +INFO: Loading Class: com/apple/laf/ScreenMenuItem.class +INFO: Loading Class: com/apple/laf/ScreenMenuItemCheckbox.class +INFO: Loading Class: com/apple/laf/ScreenMenuItemUI.class +INFO: Loading Class: com/apple/laf/ScreenMenuPropertyListener.class +INFO: Loading Class: com/apple/laf/ScreenPopupFactory$2.class +INFO: Loading Class: com/apple/laf/resources/aqua_de.class +INFO: Loading Class: com/apple/laf/resources/aqua_es.class +INFO: Loading Class: com/apple/laf/resources/aqua_fr.class +INFO: Loading Class: com/apple/laf/resources/aqua_it.class +INFO: Loading Class: com/apple/laf/resources/aqua_ja.class +INFO: Loading Class: com/apple/laf/resources/aqua_ko.class +INFO: Loading Class: com/apple/laf/resources/aqua_pt_BR.class +INFO: Loading Class: com/apple/laf/resources/aqua_sv.class +INFO: Loading Class: com/apple/laf/resources/aqua_zh_CN.class +INFO: Loading Class: com/apple/laf/resources/aqua_zh_TW.class +INFO: Loading Class: com/oracle/net/Sdp$1.class +INFO: Loading Class: com/oracle/net/Sdp$SdpSocket.class +INFO: Loading Class: com/oracle/net/Sdp.class +INFO: Loading Class: com/oracle/nio/BufferSecrets.class +INFO: Loading Class: com/oracle/nio/BufferSecretsPermission.class +INFO: Loading Class: com/oracle/util/Checksums.class +INFO: Loading Class: com/oracle/webservices/internal/api/EnvelopeStyle$Style.class +INFO: Loading Class: com/oracle/webservices/internal/api/EnvelopeStyle.class +INFO: Loading Class: com/oracle/webservices/internal/api/EnvelopeStyleFeature.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/Databinding$Builder.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/Databinding.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/DatabindingFactory.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/DatabindingMode.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/DatabindingModeFeature$Builder.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/DatabindingModeFeature.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/ExternalMetadataFeature$Builder.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/ExternalMetadataFeature.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/JavaCallInfo.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/WSDLGenerator.class +INFO: Loading Class: com/oracle/webservices/internal/api/databinding/WSDLResolver.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BaseDistributedPropertySet$DistributedMapView.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BaseDistributedPropertySet.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$1.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$2.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$3.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$Accessor.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$FieldAccessor.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$MapView.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$MethodAccessor.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$PropertyMap.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet$PropertyMapEntry.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/BasePropertySet.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/ContentType$Builder.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/ContentType.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/DistributedPropertySet.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/MessageContext.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/MessageContextFactory$1.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/MessageContextFactory$2.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/MessageContextFactory$3.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/MessageContextFactory$Creator.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/MessageContextFactory.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/PropertySet$Property.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/PropertySet.class +INFO: Loading Class: com/oracle/webservices/internal/api/message/ReadOnlyPropertyException.class +INFO: Loading Class: com/oracle/webservices/internal/impl/encoding/StreamDecoderImpl.class +INFO: Loading Class: com/oracle/webservices/internal/impl/internalspi/encoding/StreamDecoder.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/ExistingAnnotationsType.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/JavaMethod$JavaParams.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/JavaMethod.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/JavaParam.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/JavaWsdlMappingType$JavaMethods.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/JavaWsdlMappingType$XmlSchemaMapping.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/JavaWsdlMappingType.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/ObjectFactory.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/SoapBindingParameterStyle.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/SoapBindingStyle.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/SoapBindingUse.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/Util.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/WebParamMode.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlAction.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlAddressing.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlBindingType.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlFaultAction.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlHandlerChain.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlMTOM.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlOneway.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlRequestWrapper.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlResponseWrapper.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlSOAPBinding.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlServiceMode.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebEndpoint.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebFault.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebMethod.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebParam.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebResult.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebService.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebServiceClient.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebServiceProvider.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/XmlWebServiceRef.class +INFO: Loading Class: com/oracle/xmlns/internal/webservices/jaxws_databinding/package-info.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_de.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_en.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_es.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_fr.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_it.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_ja.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_ko.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_pt_BR.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_sv.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_zh_CN.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_zh_HK.class +INFO: Loading Class: com/sun/accessibility/internal/resources/accessibility_zh_TW.class +INFO: Loading Class: com/sun/activation/registries/LineTokenizer.class +INFO: Loading Class: com/sun/activation/registries/LogSupport.class +INFO: Loading Class: com/sun/activation/registries/MailcapFile.class +INFO: Loading Class: com/sun/activation/registries/MailcapParseException.class +INFO: Loading Class: com/sun/activation/registries/MailcapTokenizer.class +INFO: Loading Class: com/sun/activation/registries/MimeTypeEntry.class +INFO: Loading Class: com/sun/activation/registries/MimeTypeFile.class +INFO: Loading Class: com/sun/awt/AWTUtilities$1.class +INFO: Loading Class: com/sun/awt/AWTUtilities$Translucency.class +INFO: Loading Class: com/sun/awt/AWTUtilities.class +INFO: Loading Class: com/sun/awt/SecurityWarning.class +INFO: Loading Class: com/sun/beans/TypeResolver.class +INFO: Loading Class: com/sun/beans/WeakCache.class +INFO: Loading Class: com/sun/beans/WildcardTypeImpl.class +INFO: Loading Class: com/sun/beans/decoder/AccessorElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ArrayElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/BooleanElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ByteElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/CharElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ClassElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/DocumentHandler$1.class +INFO: Loading Class: com/sun/beans/decoder/DocumentHandler.class +INFO: Loading Class: com/sun/beans/decoder/DoubleElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/FalseElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/FieldElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/FloatElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/IntElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/JavaElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/LongElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/MethodElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/NewElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/NullElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ObjectElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/PropertyElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ShortElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/StringElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/TrueElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/ValueObject.class +INFO: Loading Class: com/sun/beans/decoder/ValueObjectImpl.class +INFO: Loading Class: com/sun/beans/decoder/VarElementHandler.class +INFO: Loading Class: com/sun/beans/decoder/VoidElementHandler.class +INFO: Loading Class: com/sun/beans/editors/BooleanEditor.class +INFO: Loading Class: com/sun/beans/editors/ByteEditor.class +INFO: Loading Class: com/sun/beans/editors/ColorEditor.class +INFO: Loading Class: com/sun/beans/editors/DoubleEditor.class +INFO: Loading Class: com/sun/beans/editors/EnumEditor.class +INFO: Loading Class: com/sun/beans/editors/FloatEditor.class +INFO: Loading Class: com/sun/beans/editors/FontEditor.class +INFO: Loading Class: com/sun/beans/editors/IntegerEditor.class +INFO: Loading Class: com/sun/beans/editors/LongEditor.class +INFO: Loading Class: com/sun/beans/editors/NumberEditor.class +INFO: Loading Class: com/sun/beans/editors/ShortEditor.class +INFO: Loading Class: com/sun/beans/editors/StringEditor.class +INFO: Loading Class: com/sun/beans/finder/AbstractFinder.class +INFO: Loading Class: com/sun/beans/finder/BeanInfoFinder.class +INFO: Loading Class: com/sun/beans/finder/ClassFinder.class +INFO: Loading Class: com/sun/beans/finder/ConstructorFinder$1.class +INFO: Loading Class: com/sun/beans/finder/ConstructorFinder.class +INFO: Loading Class: com/sun/beans/finder/FieldFinder.class +INFO: Loading Class: com/sun/beans/finder/InstanceFinder.class +INFO: Loading Class: com/sun/beans/finder/MethodFinder$1.class +INFO: Loading Class: com/sun/beans/finder/MethodFinder.class +INFO: Loading Class: com/sun/beans/finder/PersistenceDelegateFinder.class +INFO: Loading Class: com/sun/beans/finder/PrimitiveTypeMap.class +INFO: Loading Class: com/sun/beans/finder/PrimitiveWrapperMap.class +INFO: Loading Class: com/sun/beans/finder/PropertyEditorFinder.class +INFO: Loading Class: com/sun/beans/finder/Signature.class +INFO: Loading Class: com/sun/beans/finder/SignatureException.class +INFO: Loading Class: com/sun/beans/infos/ComponentBeanInfo.class +INFO: Loading Class: com/sun/beans/util/Cache$1.class +INFO: Loading Class: com/sun/beans/util/Cache$CacheEntry.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind$1.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind$2.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind$3.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind$Soft.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind$Strong.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind$Weak.class +INFO: Loading Class: com/sun/beans/util/Cache$Kind.class +INFO: Loading Class: com/sun/beans/util/Cache$Ref.class +INFO: Loading Class: com/sun/beans/util/Cache.class +INFO: Loading Class: com/sun/corba/se/impl/activation/CommandHandler.class +INFO: Loading Class: com/sun/corba/se/impl/activation/GetServerID.class +INFO: Loading Class: com/sun/corba/se/impl/activation/Help.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ListActiveServers.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ListAliases.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ListORBs.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ListServers.class +INFO: Loading Class: com/sun/corba/se/impl/activation/LocateServer.class +INFO: Loading Class: com/sun/corba/se/impl/activation/LocateServerForORB.class +INFO: Loading Class: com/sun/corba/se/impl/activation/NameServiceStartThread.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ORBD.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ProcessMonitorThread.class +INFO: Loading Class: com/sun/corba/se/impl/activation/Quit.class +INFO: Loading Class: com/sun/corba/se/impl/activation/RegisterServer.class +INFO: Loading Class: com/sun/corba/se/impl/activation/RepositoryImpl$DBServerDef.class +INFO: Loading Class: com/sun/corba/se/impl/activation/RepositoryImpl$RepositoryDB.class +INFO: Loading Class: com/sun/corba/se/impl/activation/RepositoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ServerCallback.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ServerMain.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ServerManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ServerTableEntry.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ServerTool.class +INFO: Loading Class: com/sun/corba/se/impl/activation/ShutdownServer.class +INFO: Loading Class: com/sun/corba/se/impl/activation/StartServer.class +INFO: Loading Class: com/sun/corba/se/impl/activation/UnRegisterServer.class +INFO: Loading Class: com/sun/corba/se/impl/copyobject/CopierManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/copyobject/FallbackObjectCopierImpl.class +INFO: Loading Class: com/sun/corba/se/impl/copyobject/JavaStreamObjectCopierImpl.class +INFO: Loading Class: com/sun/corba/se/impl/copyobject/ORBStreamObjectCopierImpl.class +INFO: Loading Class: com/sun/corba/se/impl/copyobject/ReferenceObjectCopierImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AnyImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AnyImpl$AnyInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AnyImpl$AnyOutputStream$1.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AnyImpl$AnyOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AnyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AnyImplHelper.class +INFO: Loading Class: com/sun/corba/se/impl/corba/AsynchInvoke.class +INFO: Loading Class: com/sun/corba/se/impl/corba/CORBAObjectImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/ContextImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/ContextListImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/EnvironmentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/ExceptionListImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/NVListImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/NamedValueImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/PrincipalImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/RequestImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/ServerRequestImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/TCUtility.class +INFO: Loading Class: com/sun/corba/se/impl/corba/TypeCodeFactory.class +INFO: Loading Class: com/sun/corba/se/impl/corba/TypeCodeImpl.class +INFO: Loading Class: com/sun/corba/se/impl/corba/TypeCodeImplHelper.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyBasicImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyCollectionImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyComplexImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyConstructedImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynAnyUtil.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynArrayImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynEnumImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynFixedImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynSequenceImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynStructImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynUnionImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynValueBoxImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynValueCommonImpl.class +INFO: Loading Class: com/sun/corba/se/impl/dynamicany/DynValueImpl.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerFactory.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerRead.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerReadGrow.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerReadStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerWrite.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerWriteCollect$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerWriteCollect$BufferManagerWriteCollectIterator.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerWriteCollect.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerWriteGrow.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferManagerWriteStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/BufferQueue.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/ByteBufferWithInfo.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputObject.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream$InputStreamFactory.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStreamBase.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream_1_0$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream_1_0$StreamMemento.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream_1_1$FragmentableStreamMemento.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDRInputStream_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputObject.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStream$OutputStreamFactory.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStreamBase.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStream_1_0$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStream_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStream_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CDROutputStream_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CachedCodeBase.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetCache$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetCache.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetComponentInfo$CodeSetComponent.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetComponentInfo$CodeSetContext.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetComponentInfo.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$BTCConverter.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$CTBConverter.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$CodeSetConversionHolder.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$JavaBTCConverter.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$JavaCTBConverter.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$UTF16BTCConverter.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion$UTF16CTBConverter.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/CodeSetConversion.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/EncapsInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/EncapsOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream$MarshalObjectInputStream$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream$MarshalObjectInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream$_ByteArrayInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream$MarshalObjectOutputStream$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream$MarshalObjectOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream$_ByteArrayOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/MarkAndResetHandler.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/MarshalInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/MarshalOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/OSFCodeSetRegistry$1.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/OSFCodeSetRegistry$Entry.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/OSFCodeSetRegistry.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/RestorableInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/TypeCodeInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/TypeCodeOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/TypeCodeReader.class +INFO: Loading Class: com/sun/corba/se/impl/encoding/WrapperInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/CDREncapsCodec.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/ClientRequestInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/CodecFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/IORInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/InterceptorInvoker.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/InterceptorList.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/ORBInitInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PICurrent$1.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PICurrent.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PIHandlerImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PIHandlerImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PIHandlerImpl$RequestInfoStack.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PIHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/PINoOpHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/RequestInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl$AddReplyServiceContextCommand.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/ServerRequestInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/SlotTable.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/SlotTableStack$SlotTablePool.class +INFO: Loading Class: com/sun/corba/se/impl/interceptors/SlotTableStack.class +INFO: Loading Class: com/sun/corba/se/impl/io/FVDCodeBaseImpl.class +INFO: Loading Class: com/sun/corba/se/impl/io/IIOPInputStream$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/IIOPInputStream$2.class +INFO: Loading Class: com/sun/corba/se/impl/io/IIOPInputStream$ActiveRecursionManager.class +INFO: Loading Class: com/sun/corba/se/impl/io/IIOPInputStream.class +INFO: Loading Class: com/sun/corba/se/impl/io/IIOPOutputStream$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/IIOPOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$DefaultState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$HookGetFields.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$InReadObjectDefaultsSentState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$InReadObjectNoMoreOptionalDataState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$InReadObjectOptionalDataState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$InReadObjectPastDefaultsRemoteDidNotUseWOState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$InReadObjectRemoteDidNotUseWriteObjectState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$NoReadObjectDefaultsSentState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook$ReadObjectState.class +INFO: Loading Class: com/sun/corba/se/impl/io/InputStreamHook.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$2.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$3.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$4.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$CompareClassByName.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$CompareMemberByName.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$CompareObjStrFieldsByName.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$MethodSignature.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$ObjectStreamClassEntry.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass$PersistentFieldsValue.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClass.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClassCorbaExt$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamClassCorbaExt.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamField$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/ObjectStreamField.class +INFO: Loading Class: com/sun/corba/se/impl/io/OptionalDataException.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$DefaultState.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$HookPutFields.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$InWriteObjectState.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$WriteObjectState.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$WroteCustomDataState.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook$WroteDefaultDataState.class +INFO: Loading Class: com/sun/corba/se/impl/io/OutputStreamHook.class +INFO: Loading Class: com/sun/corba/se/impl/io/TypeMismatchException.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueHandlerImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueHandlerImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueHandlerImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueUtility$1.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueUtility$IdentityKeyValueStack$KeyValuePair.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueUtility$IdentityKeyValueStack.class +INFO: Loading Class: com/sun/corba/se/impl/io/ValueUtility.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ByteBuffer.class +INFO: Loading Class: com/sun/corba/se/impl/ior/EncapsulationUtility.class +INFO: Loading Class: com/sun/corba/se/impl/ior/FreezableList.class +INFO: Loading Class: com/sun/corba/se/impl/ior/GenericIdentifiable.class +INFO: Loading Class: com/sun/corba/se/impl/ior/GenericTaggedComponent.class +INFO: Loading Class: com/sun/corba/se/impl/ior/GenericTaggedProfile.class +INFO: Loading Class: com/sun/corba/se/impl/ior/Handler.class +INFO: Loading Class: com/sun/corba/se/impl/ior/IORImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/IORTemplateImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/IORTemplateListImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/IdentifiableFactoryFinderBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/JIDLObjectKeyTemplate.class +INFO: Loading Class: com/sun/corba/se/impl/ior/NewObjectKeyTemplateBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectAdapterIdArray.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectAdapterIdBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectAdapterIdNumber.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectIdImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectKeyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectKeyTemplateBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectReferenceFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectReferenceProducerBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/ObjectReferenceTemplateImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/OldJIDLObjectKeyTemplate.class +INFO: Loading Class: com/sun/corba/se/impl/ior/OldObjectKeyTemplateBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/OldPOAObjectKeyTemplate.class +INFO: Loading Class: com/sun/corba/se/impl/ior/POAObjectKeyTemplate.class +INFO: Loading Class: com/sun/corba/se/impl/ior/StubIORImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/TaggedComponentFactoryFinderImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/TaggedProfileFactoryFinderImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/TaggedProfileTemplateFactoryFinderImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/WireObjectKeyTemplate.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/AlternateIIOPAddressComponentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/CodeSetsComponentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/IIOPAddressBase.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/IIOPAddressClosureImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/IIOPAddressImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl$LocalCodeBaseSingletonHolder.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/IIOPProfileTemplateImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/JavaCodebaseComponentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/JavaSerializationComponent.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/MaxStreamFormatVersionComponentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/ORBTypeComponentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/ior/iiop/RequestPartitioningComponentImpl.class +INFO: Loading Class: com/sun/corba/se/impl/javax/rmi/CORBA/KeepAlive.class +INFO: Loading Class: com/sun/corba/se/impl/javax/rmi/CORBA/StubDelegateImpl.class +INFO: Loading Class: com/sun/corba/se/impl/javax/rmi/CORBA/Util$1.class +INFO: Loading Class: com/sun/corba/se/impl/javax/rmi/CORBA/Util.class +INFO: Loading Class: com/sun/corba/se/impl/javax/rmi/PortableRemoteObject.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/DefaultSocketFactory.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/EndPointInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/LegacyServerSocketManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/SocketFactoryAcceptorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/SocketFactoryConnectionImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/SocketFactoryContactInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/SocketFactoryContactInfoListImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/SocketFactoryContactInfoListIteratorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/legacy/connection/USLPort.class +INFO: Loading Class: com/sun/corba/se/impl/logging/ActivationSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/ActivationSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/IORSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/IORSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/InterceptorsSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/InterceptorsSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/NamingSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/NamingSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/OMGSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/OMGSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/ORBUtilSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/ORBUtilSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/POASystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/POASystemException.class +INFO: Loading Class: com/sun/corba/se/impl/logging/UtilSystemException$1.class +INFO: Loading Class: com/sun/corba/se/impl/logging/UtilSystemException.class +INFO: Loading Class: com/sun/corba/se/impl/monitoring/MonitoredAttributeInfoFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/monitoring/MonitoredAttributeInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/monitoring/MonitoredObjectFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/monitoring/MonitoredObjectImpl.class +INFO: Loading Class: com/sun/corba/se/impl/monitoring/MonitoringManagerFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/monitoring/MonitoringManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/BindingIteratorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/InterOperableNamingImpl.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/InternalBindingKey.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/InternalBindingValue.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/NamingContextDataStore.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/NamingContextImpl.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/NamingUtils.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/TransientBindingIterator.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/TransientNameServer.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/TransientNameService.class +INFO: Loading Class: com/sun/corba/se/impl/naming/cosnaming/TransientNamingContext.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/CorbalocURL.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/CorbanameURL.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/IIOPEndpointInfo.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/INSURL.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/INSURLBase.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/INSURLHandler.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/NamingConstants.class +INFO: Loading Class: com/sun/corba/se/impl/naming/namingutil/Utility.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/CounterDB.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/InternalBindingKey.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/InternalBindingValue.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/NameServer.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/NameService.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/NamingContextImpl.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/PersistentBindingIterator.class +INFO: Loading Class: com/sun/corba/se/impl/naming/pcosnaming/ServantManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/NullServantImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$1.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$2.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$3.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$4.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$5.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$6.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$7.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry$CounterGuard.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/AOMEntry.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/ActiveObjectMap$Key.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/ActiveObjectMap.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/BadServerIdHandler.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/DelegateImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/IdAssignmentPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/IdUniquenessPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/ImplicitActivationPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/LifespanPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/MultipleObjectMap.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POACurrent.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAFactory$1.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAFactory.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAImpl$DestroyThread.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAManagerImpl$POAManagerDeactivator.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediator.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorBase_R.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorFactory.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_NR_UDS.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_NR_USM.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_AOM.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_UDS.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_USM$Etherealizer.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/POAPolicyMediatorImpl_R_USM.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/Policies.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/RequestProcessingPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/ServantRetentionPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/SingleObjectMap.class +INFO: Loading Class: com/sun/corba/se/impl/oa/poa/ThreadPolicyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/toa/Element.class +INFO: Loading Class: com/sun/corba/se/impl/oa/toa/TOA.class +INFO: Loading Class: com/sun/corba/se/impl/oa/toa/TOAFactory.class +INFO: Loading Class: com/sun/corba/se/impl/oa/toa/TOAImpl.class +INFO: Loading Class: com/sun/corba/se/impl/oa/toa/TransientObjectManager.class +INFO: Loading Class: com/sun/corba/se/impl/orb/AppletDataCollector.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase$1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase$2.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase$3.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase$4.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase$5.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase$6.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorBase.class +INFO: Loading Class: com/sun/corba/se/impl/orb/DataCollectorFactory.class +INFO: Loading Class: com/sun/corba/se/impl/orb/NormalDataCollector.class +INFO: Loading Class: com/sun/corba/se/impl/orb/NormalParserAction.class +INFO: Loading Class: com/sun/corba/se/impl/orb/NormalParserData.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBConfiguratorImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBConfiguratorImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBConfiguratorImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBConfiguratorImpl$ConfigParser.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBConfiguratorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBDataParserImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBImpl$4.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBImpl$ConfigParser.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBSingleton.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ORBVersionImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserAction.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserActionBase.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserActionFactory.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserDataBase.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$10.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$11.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$12.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$13$1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$13.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$14$1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$14.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$15.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$2.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$3.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$4.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$5.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$6.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$7.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$8.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$9.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestAcceptor1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestAcceptor2.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestBadServerIdHandler.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestContactInfoListFactory.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestIIOPPrimaryToContactInfo.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestIORToSocketInfo.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestLegacyORBSocketFactory.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestORBInitializer1.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestORBInitializer2.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable$TestORBSocketFactory.class +INFO: Loading Class: com/sun/corba/se/impl/orb/ParserTable.class +INFO: Loading Class: com/sun/corba/se/impl/orb/PrefixParserAction.class +INFO: Loading Class: com/sun/corba/se/impl/orb/PrefixParserData.class +INFO: Loading Class: com/sun/corba/se/impl/orb/PropertyCallback.class +INFO: Loading Class: com/sun/corba/se/impl/orb/PropertyOnlyDataCollector.class +INFO: Loading Class: com/sun/corba/se/impl/orb/SynchVariable.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/CacheTable$Entry.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/CacheTable.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/CorbaResourceUtil.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/DenseIntMapImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/GetPropertyAction.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/HexOutputStream.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/LegacyHookGetFields.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/LegacyHookPutFields.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/LogKeywords.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ORBConstants.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ORBUtility$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ORBUtility$2.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ORBUtility$3.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ORBUtility.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3$2.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3$3.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3$CompareClassByName.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3$CompareMemberByName.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3$MethodSignature.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$2.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$3.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$CompareClassByName.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$CompareMemberByName.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$MethodSignature.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1$ObjectStreamClassEntry.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectStreamField.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectUtility.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectWriter$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectWriter$IndentingObjectWriter.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectWriter$SimpleObjectWriter.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/ObjectWriter.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/RepIdDelegator.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/RepositoryIdFactory.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/RepositoryIdInterface.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/RepositoryIdStrings.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/RepositoryIdUtility.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/StackImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/closure/Constant.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/closure/Future.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/concurrent/CondVar.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/concurrent/DebugMutex.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/concurrent/Mutex.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/concurrent/ReentrantMutex.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/concurrent/Sync.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/concurrent/SyncUtil.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/fsm/GuardedAction$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/fsm/GuardedAction.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/fsm/NameBase.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/fsm/StateEngineImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/fsm/StateEngineImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/fsm/StateEngineImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/graph/Graph.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/graph/GraphImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/graph/GraphImpl$NodeVisitor.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/graph/GraphImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/graph/Node.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/graph/NodeData.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$4.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$5.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$6.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl$WorkerThread.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/ThreadPoolManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/TimeoutException.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/orbutil/threadpool/WorkQueueImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicAccessPermission.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$10.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$11.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$12.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$13.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$14.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$4.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$5.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$6.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$7.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$8.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$9.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$ReaderWriter.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl$ReaderWriterBase.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicMethodMarshallerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/DynamicStubImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ExceptionHandler.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ExceptionHandlerImpl$ExceptionRW.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ExceptionHandlerImpl$ExceptionRWBase.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ExceptionHandlerImpl$ExceptionRWIDLImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ExceptionHandlerImpl$ExceptionRWRMIImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ExceptionHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl$IDLMethodInfo.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLType.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLTypeException.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil$1.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl$CustomCompositeInvocationHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/PresentationManagerImpl$ClassDataImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/PresentationManagerImpl$NodeImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/PresentationManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/ReflectiveTie.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubConnectImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryBase.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryBase.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryDynamicBase.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryStaticImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryProxyImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubFactoryStaticImpl.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubInvocationHandlerImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/presentation/rmi/StubInvocationHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/AddressingDispositionException.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/BootstrapServerRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/CorbaClientDelegateImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/CorbaInvocationInfo.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/CorbaMessageMediatorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/CorbaServerRequestDispatcherImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/FullServantCacheLocalCRDImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/GetInterface.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/INSServerRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/InfoOnlyServantCacheLocalCRDImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/IsA.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/JIDLLocalCRDImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase$1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/LocalClientRequestDispatcherBase.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/MinimalServantCacheLocalCRDImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/NonExistent.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/NotExistent.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/NotLocalLocalCRDImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/POALocalCRDImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/RequestCanceledException.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/RequestDispatcherRegistryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/ServantCacheLocalCRDBase.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/SpecialMethod.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/AddressingDispositionHelper.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/CancelRequestMessage_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/FragmentMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/FragmentMessage_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/FragmentMessage_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/IORAddressingInfo.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/IORAddressingInfoHelper.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/KeyAddr.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyMessage_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyOrReplyMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/Message.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/MessageBase.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/MessageHandler.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/Message_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/Message_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/Message_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/ProfileAddr.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/ReferenceAddr.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/ReplyMessage_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage_1_0.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage_1_1.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/RequestMessage_1_2.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/TargetAddress.class +INFO: Loading Class: com/sun/corba/se/impl/protocol/giopmsgheaders/TargetAddressHelper.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/BootstrapResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/CompositeResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/FileResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/INSURLOperationImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/INSURLOperationImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/LocalResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/ORBDefaultInitRefResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/ORBInitRefResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/resolver/SplitLocalResolverImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/ByteBufferPoolImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaConnectionCacheBase.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaContactInfoBase.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaContactInfoListImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaContactInfoListIteratorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaInboundConnectionCacheImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl$2.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl$3.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaOutboundConnectionCacheImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaResponseWaitingRoomImpl$OutCallDesc.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaResponseWaitingRoomImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/CorbaTransportManagerImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/DefaultIORToSocketInfoImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/transport/DefaultIORToSocketInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/DefaultSocketFactoryImpl$1.class +INFO: Loading Class: com/sun/corba/se/impl/transport/DefaultSocketFactoryImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/EventHandlerBase.class +INFO: Loading Class: com/sun/corba/se/impl/transport/ListenerThreadImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/ReadTCPTimeoutsImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/ReaderThreadImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/SelectorImpl$SelectionKeyAndOp.class +INFO: Loading Class: com/sun/corba/se/impl/transport/SelectorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/SharedCDRContactInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/SocketOrChannelAcceptorImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/SocketOrChannelConnectionImpl.class +INFO: Loading Class: com/sun/corba/se/impl/transport/SocketOrChannelContactInfoImpl.class +INFO: Loading Class: com/sun/corba/se/impl/util/IdentityHashtable.class +INFO: Loading Class: com/sun/corba/se/impl/util/IdentityHashtableEntry.class +INFO: Loading Class: com/sun/corba/se/impl/util/IdentityHashtableEnumerator.class +INFO: Loading Class: com/sun/corba/se/impl/util/JDKBridge.class +INFO: Loading Class: com/sun/corba/se/impl/util/JDKClassLoader$1.class +INFO: Loading Class: com/sun/corba/se/impl/util/JDKClassLoader$JDKClassLoaderCache$CacheKey.class +INFO: Loading Class: com/sun/corba/se/impl/util/JDKClassLoader$JDKClassLoaderCache.class +INFO: Loading Class: com/sun/corba/se/impl/util/JDKClassLoader.class +INFO: Loading Class: com/sun/corba/se/impl/util/ORBProperties.class +INFO: Loading Class: com/sun/corba/se/impl/util/PackagePrefixChecker.class +INFO: Loading Class: com/sun/corba/se/impl/util/RepositoryId.class +INFO: Loading Class: com/sun/corba/se/impl/util/RepositoryIdCache.class +INFO: Loading Class: com/sun/corba/se/impl/util/RepositoryIdPool.class +INFO: Loading Class: com/sun/corba/se/impl/util/SUNVMCID.class +INFO: Loading Class: com/sun/corba/se/impl/util/StubEntry.class +INFO: Loading Class: com/sun/corba/se/impl/util/Utility.class +INFO: Loading Class: com/sun/corba/se/impl/util/Version.class +INFO: Loading Class: com/sun/corba/se/internal/CosNaming/BootstrapServer.class +INFO: Loading Class: com/sun/corba/se/internal/Interceptors/PIORB.class +INFO: Loading Class: com/sun/corba/se/internal/POA/POAORB.class +INFO: Loading Class: com/sun/corba/se/internal/corba/ORBSingleton.class +INFO: Loading Class: com/sun/corba/se/internal/iiop/ORB.class +INFO: Loading Class: com/sun/corba/se/org/omg/CORBA/ORB.class +INFO: Loading Class: com/sun/corba/se/pept/broker/Broker.class +INFO: Loading Class: com/sun/corba/se/pept/encoding/InputObject.class +INFO: Loading Class: com/sun/corba/se/pept/encoding/OutputObject.class +INFO: Loading Class: com/sun/corba/se/pept/protocol/ClientDelegate.class +INFO: Loading Class: com/sun/corba/se/pept/protocol/ClientInvocationInfo.class +INFO: Loading Class: com/sun/corba/se/pept/protocol/ClientRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/pept/protocol/MessageMediator.class +INFO: Loading Class: com/sun/corba/se/pept/protocol/ProtocolHandler.class +INFO: Loading Class: com/sun/corba/se/pept/protocol/ServerRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/pept/transport/Acceptor.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ByteBufferPool.class +INFO: Loading Class: com/sun/corba/se/pept/transport/Connection.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ConnectionCache.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ContactInfo.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ContactInfoList.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ContactInfoListIterator.class +INFO: Loading Class: com/sun/corba/se/pept/transport/EventHandler.class +INFO: Loading Class: com/sun/corba/se/pept/transport/InboundConnectionCache.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ListenerThread.class +INFO: Loading Class: com/sun/corba/se/pept/transport/OutboundConnectionCache.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ReaderThread.class +INFO: Loading Class: com/sun/corba/se/pept/transport/ResponseWaitingRoom.class +INFO: Loading Class: com/sun/corba/se/pept/transport/Selector.class +INFO: Loading Class: com/sun/corba/se/pept/transport/TransportManager.class +INFO: Loading Class: com/sun/corba/se/spi/activation/Activator.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ActivatorHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ActivatorHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ActivatorOperations.class +INFO: Loading Class: com/sun/corba/se/spi/activation/BadServerDefinition.class +INFO: Loading Class: com/sun/corba/se/spi/activation/BadServerDefinitionHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/BadServerDefinitionHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/EndPointInfo.class +INFO: Loading Class: com/sun/corba/se/spi/activation/EndPointInfoHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/EndPointInfoHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/EndpointInfoListHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/EndpointInfoListHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/IIOP_CLEAR_TEXT.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameService.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameServiceHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameServiceHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameServiceOperations.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameServicePackage/NameAlreadyBound.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameServicePackage/NameAlreadyBoundHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InitialNameServicePackage/NameAlreadyBoundHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InvalidORBid.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InvalidORBidHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/InvalidORBidHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/Locator.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorOperations.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorPackage/ServerLocation.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorPackage/ServerLocationHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorPackage/ServerLocationHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorPackage/ServerLocationPerORB.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorPackage/ServerLocationPerORBHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/LocatorPackage/ServerLocationPerORBHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/NoSuchEndPoint.class +INFO: Loading Class: com/sun/corba/se/spi/activation/NoSuchEndPointHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/NoSuchEndPointHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBAlreadyRegistered.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBAlreadyRegisteredHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBAlreadyRegisteredHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBPortInfo.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBPortInfoHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBPortInfoHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBPortInfoListHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBPortInfoListHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBidHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBidListHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ORBidListHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/POANameHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/POANameHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/Repository.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryOperations.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryPackage/ServerDef.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryPackage/ServerDefHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryPackage/ServerDefHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryPackage/StringSeqHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/RepositoryPackage/StringSeqHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/Server.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyActive.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyActiveHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyActiveHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyInstalled.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyInstalledHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyInstalledHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyRegistered.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyRegisteredHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyRegisteredHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyUninstalled.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyUninstalledHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerAlreadyUninstalledHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerHeldDown.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerHeldDownHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerHeldDownHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerIdHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerIdsHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerIdsHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerManager.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerManagerHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerManagerHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerManagerOperations.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerNotActive.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerNotActiveHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerNotActiveHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerNotRegistered.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerNotRegisteredHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerNotRegisteredHolder.class +INFO: Loading Class: com/sun/corba/se/spi/activation/ServerOperations.class +INFO: Loading Class: com/sun/corba/se/spi/activation/TCPPortHelper.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_ActivatorImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_ActivatorStub.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_InitialNameServiceImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_InitialNameServiceStub.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_LocatorImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_LocatorStub.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_RepositoryImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_RepositoryStub.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_ServerImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_ServerManagerImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_ServerManagerStub.class +INFO: Loading Class: com/sun/corba/se/spi/activation/_ServerStub.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/CopierManager.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/CopyobjectDefaults$1.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/CopyobjectDefaults$2.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/CopyobjectDefaults$3.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/CopyobjectDefaults$4.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/CopyobjectDefaults.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/ObjectCopier.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/ObjectCopierFactory.class +INFO: Loading Class: com/sun/corba/se/spi/copyobject/ReflectiveCopyException.class +INFO: Loading Class: com/sun/corba/se/spi/encoding/CorbaInputObject.class +INFO: Loading Class: com/sun/corba/se/spi/encoding/CorbaOutputObject.class +INFO: Loading Class: com/sun/corba/se/spi/extension/CopyObjectPolicy.class +INFO: Loading Class: com/sun/corba/se/spi/extension/RequestPartitioningPolicy.class +INFO: Loading Class: com/sun/corba/se/spi/extension/ServantCachingPolicy.class +INFO: Loading Class: com/sun/corba/se/spi/extension/ZeroPortPolicy.class +INFO: Loading Class: com/sun/corba/se/spi/ior/EncapsulationFactoryBase.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IOR.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IORFactories$1.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IORFactories$2.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IORFactories.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IORFactory.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IORTemplate.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IORTemplateList.class +INFO: Loading Class: com/sun/corba/se/spi/ior/Identifiable.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IdentifiableBase.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IdentifiableContainerBase$1.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IdentifiableContainerBase.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IdentifiableFactory.class +INFO: Loading Class: com/sun/corba/se/spi/ior/IdentifiableFactoryFinder.class +INFO: Loading Class: com/sun/corba/se/spi/ior/MakeImmutable.class +INFO: Loading Class: com/sun/corba/se/spi/ior/ObjectAdapterId.class +INFO: Loading Class: com/sun/corba/se/spi/ior/ObjectId.class +INFO: Loading Class: com/sun/corba/se/spi/ior/ObjectKey.class +INFO: Loading Class: com/sun/corba/se/spi/ior/ObjectKeyFactory.class +INFO: Loading Class: com/sun/corba/se/spi/ior/ObjectKeyTemplate.class +INFO: Loading Class: com/sun/corba/se/spi/ior/TaggedComponent.class +INFO: Loading Class: com/sun/corba/se/spi/ior/TaggedComponentBase.class +INFO: Loading Class: com/sun/corba/se/spi/ior/TaggedComponentFactoryFinder.class +INFO: Loading Class: com/sun/corba/se/spi/ior/TaggedProfile.class +INFO: Loading Class: com/sun/corba/se/spi/ior/TaggedProfileTemplate.class +INFO: Loading Class: com/sun/corba/se/spi/ior/TaggedProfileTemplateBase.class +INFO: Loading Class: com/sun/corba/se/spi/ior/WriteContents.class +INFO: Loading Class: com/sun/corba/se/spi/ior/Writeable.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/AlternateIIOPAddressComponent.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/CodeSetsComponent.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/GIOPVersion.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPAddress.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$1.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$2.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$3.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$4.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$5.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$6.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$7.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$8.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories$9.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPFactories.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPProfile.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/IIOPProfileTemplate.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/JavaCodebaseComponent.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/MaxStreamFormatVersionComponent.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/ORBTypeComponent.class +INFO: Loading Class: com/sun/corba/se/spi/ior/iiop/RequestPartitioningComponent.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/connection/Connection.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/connection/GetEndPointInfoAgainException.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/connection/LegacyServerSocketEndPointInfo.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/connection/LegacyServerSocketManager.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/connection/ORBSocketFactory.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/interceptor/IORInfoExt.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/interceptor/ORBInitInfoExt.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/interceptor/RequestInfoExt.class +INFO: Loading Class: com/sun/corba/se/spi/legacy/interceptor/UnknownType.class +INFO: Loading Class: com/sun/corba/se/spi/logging/CORBALogDomains.class +INFO: Loading Class: com/sun/corba/se/spi/logging/LogWrapperBase.class +INFO: Loading Class: com/sun/corba/se/spi/logging/LogWrapperFactory.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/LongMonitoredAttributeBase.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoredAttribute.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoredAttributeBase.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoredAttributeInfo.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoredAttributeInfoFactory.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoredObject.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoredObjectFactory.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoringConstants.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoringFactories.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoringManager.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/StatisticMonitoredAttribute.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/StatisticsAccumulator.class +INFO: Loading Class: com/sun/corba/se/spi/monitoring/StringMonitoredAttributeBase.class +INFO: Loading Class: com/sun/corba/se/spi/oa/NullServant.class +INFO: Loading Class: com/sun/corba/se/spi/oa/OADefault.class +INFO: Loading Class: com/sun/corba/se/spi/oa/OADestroyed.class +INFO: Loading Class: com/sun/corba/se/spi/oa/OAInvocationInfo.class +INFO: Loading Class: com/sun/corba/se/spi/oa/ObjectAdapter.class +INFO: Loading Class: com/sun/corba/se/spi/oa/ObjectAdapterBase.class +INFO: Loading Class: com/sun/corba/se/spi/oa/ObjectAdapterFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orb/DataCollector.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORB$1.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORB$2.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORB$Holder.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORB.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORBConfigurator.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORBData.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORBVersion.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ORBVersionFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orb/Operation.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$1.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$BooleanAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$ClassAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$ComposeAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$ConvertIntegerToShort.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$IdentityAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$IndexAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$IntegerAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$IntegerRangeAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$ListAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$MapAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$MapSequenceAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$MaskErrorAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$OperationBase.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$SequenceAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$SetFlagAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$StringAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$SuffixAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$URLAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory$ValueAction.class +INFO: Loading Class: com/sun/corba/se/spi/orb/OperationFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserData.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserDataFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplBase$1.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplBase.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplTableBase$FieldMap$1$1.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplTableBase$FieldMap$1.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplTableBase$FieldMap.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplTableBase$MapEntry.class +INFO: Loading Class: com/sun/corba/se/spi/orb/ParserImplTableBase.class +INFO: Loading Class: com/sun/corba/se/spi/orb/PropertyParser.class +INFO: Loading Class: com/sun/corba/se/spi/orb/StringPair.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/closure/Closure.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/closure/ClosureFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/Action.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/ActionBase.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/FSM.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/FSMImpl.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/FSMTest$1.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/FSMTest.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/Guard$Complement.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/Guard$Result.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/Guard.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/GuardBase.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/Input.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/InputImpl.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/MyFSM.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/NegateGuard.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/State.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/StateEngine.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/StateEngineFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/StateImpl.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/TestAction1.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/TestAction2.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/TestAction3.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/fsm/TestInput.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandler.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/proxy/DelegateInvocationHandlerImpl$1.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/proxy/DelegateInvocationHandlerImpl.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/proxy/InvocationHandlerFactory.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/proxy/LinkedInvocationHandler.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/NoSuchThreadPoolException.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/NoSuchWorkQueueException.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/ThreadPool.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolChooser.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/ThreadPoolManager.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/Work.class +INFO: Loading Class: com/sun/corba/se/spi/orbutil/threadpool/WorkQueue.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/DynamicMethodMarshaller.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/DynamicStub.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/IDLNameTranslator.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/PresentationDefaults.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/PresentationManager$ClassData.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/PresentationManager$StubFactory.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/PresentationManager$StubFactoryFactory.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/PresentationManager.class +INFO: Loading Class: com/sun/corba/se/spi/presentation/rmi/StubAdapter.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/ClientDelegateFactory.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/CorbaClientDelegate.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/CorbaMessageMediator.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/CorbaProtocolHandler.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/CorbaServerRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/ForwardException.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/InitialServerRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/LocalClientRequestDispatcher.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/LocalClientRequestDispatcherFactory.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/PIHandler.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherDefault$1.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherDefault$2.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherDefault$3.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherDefault$4.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherDefault$5.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherDefault.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RequestDispatcherRegistry.class +INFO: Loading Class: com/sun/corba/se/spi/protocol/RetryType.class +INFO: Loading Class: com/sun/corba/se/spi/resolver/LocalResolver.class +INFO: Loading Class: com/sun/corba/se/spi/resolver/Resolver.class +INFO: Loading Class: com/sun/corba/se/spi/resolver/ResolverDefault.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/CodeSetServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/MaxStreamFormatVersionServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/ORBVersionServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/SendingContextServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/ServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/ServiceContextData.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/ServiceContextRegistry.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/ServiceContexts.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/UEInfoServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/servicecontext/UnknownServiceContext.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaAcceptor.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaConnection.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaConnectionCache.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaContactInfo.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaContactInfoList.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaContactInfoListFactory.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaContactInfoListIterator.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaResponseWaitingRoom.class +INFO: Loading Class: com/sun/corba/se/spi/transport/CorbaTransportManager.class +INFO: Loading Class: com/sun/corba/se/spi/transport/IIOPPrimaryToContactInfo.class +INFO: Loading Class: com/sun/corba/se/spi/transport/IORToSocketInfo.class +INFO: Loading Class: com/sun/corba/se/spi/transport/IORTransformer.class +INFO: Loading Class: com/sun/corba/se/spi/transport/ORBSocketFactory.class +INFO: Loading Class: com/sun/corba/se/spi/transport/ReadTimeouts.class +INFO: Loading Class: com/sun/corba/se/spi/transport/ReadTimeoutsFactory.class +INFO: Loading Class: com/sun/corba/se/spi/transport/SocketInfo.class +INFO: Loading Class: com/sun/corba/se/spi/transport/SocketOrChannelAcceptor.class +INFO: Loading Class: com/sun/corba/se/spi/transport/TransportDefault$1.class +INFO: Loading Class: com/sun/corba/se/spi/transport/TransportDefault$2.class +INFO: Loading Class: com/sun/corba/se/spi/transport/TransportDefault$3.class +INFO: Loading Class: com/sun/corba/se/spi/transport/TransportDefault.class +INFO: Loading Class: com/sun/demo/jvmti/hprof/Tracker.class +INFO: Loading Class: com/sun/image/codec/jpeg/ImageFormatException.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGCodec.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGDecodeParam.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGEncodeParam.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGHuffmanTable.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGImageDecoder.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGImageEncoder.class +INFO: Loading Class: com/sun/image/codec/jpeg/JPEGQTable.class +INFO: Loading Class: com/sun/image/codec/jpeg/TruncatedFileException.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPCompressionTypes.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPConstants.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader$1.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader$2.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader$3.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader$4.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader$5.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader$EmbeddedProgressAdapter.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReader.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageReaderSpi.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageWriter$1.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageWriter$2.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageWriter$IIOWriteProgressAdapter.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageWriter.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPImageWriterSpi.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/bmp/BMPMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/common/BitFile.class +INFO: Loading Class: com/sun/imageio/plugins/common/BogusColorSpace.class +INFO: Loading Class: com/sun/imageio/plugins/common/I18N.class +INFO: Loading Class: com/sun/imageio/plugins/common/I18NImpl.class +INFO: Loading Class: com/sun/imageio/plugins/common/ImageUtil.class +INFO: Loading Class: com/sun/imageio/plugins/common/InputStreamAdapter.class +INFO: Loading Class: com/sun/imageio/plugins/common/LZWCompressor.class +INFO: Loading Class: com/sun/imageio/plugins/common/LZWStringTable.class +INFO: Loading Class: com/sun/imageio/plugins/common/PaletteBuilder$ColorNode.class +INFO: Loading Class: com/sun/imageio/plugins/common/PaletteBuilder.class +INFO: Loading Class: com/sun/imageio/plugins/common/ReaderUtil.class +INFO: Loading Class: com/sun/imageio/plugins/common/StandardMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/common/StandardMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/common/SubImageInputStream.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageReader.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageReaderSpi.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageWriteParam.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageWriter.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFImageWriterSpi.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFStreamMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFStreamMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFStreamMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFWritableImageMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/gif/GIFWritableStreamMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/AdobeMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/COMMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/DHTMarkerSegment$Htable.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/DHTMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/DQTMarkerSegment$Qtable.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/DQTMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/DRIMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/ImageTypeIterator.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/ImageTypeProducer.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$1.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$ICCMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$IllegalThumbException.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFExtensionMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumb.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbJPEG$ThumbnailReadListener.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbJPEG.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbPalette.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbRGB.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment$JFIFThumbUncompressed.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JFIFMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEG$JCS.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEG.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGBuffer.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReader$1.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReader$2.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReader$CallBackLock$State.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReader$CallBackLock.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReader$JPEGReaderDisposerRecord.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReader.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReaderResources.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageReaderSpi.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriter$1.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriter$CallBackLock$State.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriter$CallBackLock.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriter$JPEGWriterDisposerRecord.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriter.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriterResources.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGImageWriterSpi.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/JPEGStreamMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/MarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/SOFMarkerSegment$ComponentSpec.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/SOFMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/SOSMarkerSegment$ScanComponentSpec.class +INFO: Loading Class: com/sun/imageio/plugins/jpeg/SOSMarkerSegment.class +INFO: Loading Class: com/sun/imageio/plugins/png/CRC.class +INFO: Loading Class: com/sun/imageio/plugins/png/ChunkStream.class +INFO: Loading Class: com/sun/imageio/plugins/png/IDATOutputStream.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGImageDataEnumeration.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGImageReader.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGImageReaderSpi.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGImageWriteParam.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGImageWriter.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGImageWriterSpi.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGMetadataFormat.class +INFO: Loading Class: com/sun/imageio/plugins/png/PNGMetadataFormatResources.class +INFO: Loading Class: com/sun/imageio/plugins/png/RowFilter.class +INFO: Loading Class: com/sun/imageio/plugins/wbmp/WBMPImageReader.class +INFO: Loading Class: com/sun/imageio/plugins/wbmp/WBMPImageReaderSpi.class +INFO: Loading Class: com/sun/imageio/plugins/wbmp/WBMPImageWriter.class +INFO: Loading Class: com/sun/imageio/plugins/wbmp/WBMPImageWriterSpi.class +INFO: Loading Class: com/sun/imageio/plugins/wbmp/WBMPMetadata.class +INFO: Loading Class: com/sun/imageio/plugins/wbmp/WBMPMetadataFormat.class +INFO: Loading Class: com/sun/imageio/spi/FileImageInputStreamSpi.class +INFO: Loading Class: com/sun/imageio/spi/FileImageOutputStreamSpi.class +INFO: Loading Class: com/sun/imageio/spi/InputStreamImageInputStreamSpi.class +INFO: Loading Class: com/sun/imageio/spi/OutputStreamImageOutputStreamSpi.class +INFO: Loading Class: com/sun/imageio/spi/RAFImageInputStreamSpi.class +INFO: Loading Class: com/sun/imageio/spi/RAFImageOutputStreamSpi.class +INFO: Loading Class: com/sun/imageio/stream/CloseableDisposerRecord.class +INFO: Loading Class: com/sun/imageio/stream/StreamCloser$1.class +INFO: Loading Class: com/sun/imageio/stream/StreamCloser$2.class +INFO: Loading Class: com/sun/imageio/stream/StreamCloser$CloseAction.class +INFO: Loading Class: com/sun/imageio/stream/StreamCloser.class +INFO: Loading Class: com/sun/imageio/stream/StreamFinalizer.class +INFO: Loading Class: com/sun/istack/internal/Builder.class +INFO: Loading Class: com/sun/istack/internal/ByteArrayDataSource.class +INFO: Loading Class: com/sun/istack/internal/FinalArrayList.class +INFO: Loading Class: com/sun/istack/internal/FragmentContentHandler.class +INFO: Loading Class: com/sun/istack/internal/Interned.class +INFO: Loading Class: com/sun/istack/internal/NotNull.class +INFO: Loading Class: com/sun/istack/internal/Nullable.class +INFO: Loading Class: com/sun/istack/internal/Pool$Impl.class +INFO: Loading Class: com/sun/istack/internal/Pool.class +INFO: Loading Class: com/sun/istack/internal/SAXException2.class +INFO: Loading Class: com/sun/istack/internal/SAXParseException2.class +INFO: Loading Class: com/sun/istack/internal/XMLStreamException2.class +INFO: Loading Class: com/sun/istack/internal/XMLStreamReaderToContentHandler$1.class +INFO: Loading Class: com/sun/istack/internal/XMLStreamReaderToContentHandler.class +INFO: Loading Class: com/sun/istack/internal/localization/Localizable.class +INFO: Loading Class: com/sun/istack/internal/localization/LocalizableMessage.class +INFO: Loading Class: com/sun/istack/internal/localization/LocalizableMessageFactory.class +INFO: Loading Class: com/sun/istack/internal/localization/Localizer.class +INFO: Loading Class: com/sun/istack/internal/localization/NullLocalizable.class +INFO: Loading Class: com/sun/istack/internal/logging/Logger.class +INFO: Loading Class: com/sun/java/browser/dom/DOMAccessException.class +INFO: Loading Class: com/sun/java/browser/dom/DOMAccessor.class +INFO: Loading Class: com/sun/java/browser/dom/DOMAction.class +INFO: Loading Class: com/sun/java/browser/dom/DOMService.class +INFO: Loading Class: com/sun/java/browser/dom/DOMServiceProvider.class +INFO: Loading Class: com/sun/java/browser/dom/DOMUnsupportedException.class +INFO: Loading Class: com/sun/java/browser/net/ProxyInfo.class +INFO: Loading Class: com/sun/java/browser/net/ProxyService.class +INFO: Loading Class: com/sun/java/browser/net/ProxyServiceProvider.class +INFO: Loading Class: com/sun/java/swing/Painter.class +INFO: Loading Class: com/sun/java/swing/SwingUtilities3$EventQueueDelegateFromMap.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKColorChooserPanel$1.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKColorChooserPanel$ColorAction.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKColorChooserPanel$ColorTriangle.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKColorChooserPanel$OpaqueLabel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKColorChooserPanel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKColorType.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$ArrowType.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$ExpanderStyle.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$IconSize.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$Orientation.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$PositionType.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$ShadowType.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$StateType.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants$TextDirection.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKConstants.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKEngine$CustomRegion.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKEngine$Settings.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKEngine$WidgetType.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKEngine.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$2.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$3.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$DirectoryCellRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$DirectoryComboBoxAction.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$DirectoryComboBoxModel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$DoubleClickListener.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$FileCellRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$FilterComboBoxModel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$FilterComboBoxRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKApproveSelectionAction.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKDirectoryListModel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKDirectoryModel$1.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKDirectoryModel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKFCPropertyChangeListener.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKFileListModel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$GTKFileView.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$NewFolderAction.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$RenameFileAction.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI$SelectionListener.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKFileChooserUI.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKGraphicsUtils.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKIconFactory$SynthExpanderIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKIconFactory$ToolBarHandleIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKIconFactory.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1FontLazyValue.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$4.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$5.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$GnomeLayoutStyle.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL$1.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKLookAndFeel.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKPainter$ListTableFocusBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKPainter$TitledBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKPainter.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKRegion.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKStyle$GTKLazyValue.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKStyle$GTKStockIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKStyle$GTKStockIconInfo.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKStyle.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKStyleFactory$ComplexKey.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/GTKStyleFactory.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$1.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$ArithmeticExpressionEvaluator.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$ColorizeImageFilter.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$PeekableStringTokenizer.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$Privileged.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$RoundRectClipShape$RoundishRectIterator.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$RoundRectClipShape.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity$TitlePaneLayout.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/Metacity.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/PangoFonts.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/XColors$XColor.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/XColors.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_de.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_es.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_fr.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_it.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_ja.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_ko.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_pt_BR.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_sv.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_zh_CN.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_zh_HK.class +INFO: Loading Class: com/sun/java/swing/plaf/gtk/resources/gtk_zh_TW.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$BevelBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$ButtonBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$FocusBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$FrameBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$InternalFrameBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$MenuBarBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$MotifPopupMenuBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders$ToggleButtonBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifBorders.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifButtonListener.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifButtonUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI$ChangeHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI$MouseInputHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifCheckBoxMenuItemUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifCheckBoxUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$ComboBoxLayoutManager.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$MotifComboBoxArrowIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$MotifComboPopup$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$MotifComboPopup$InvocationKeyHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$MotifComboPopup.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI$MotifPropertyChangeListener.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifComboBoxUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$DesktopIconActionListener.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$DesktopIconMouseListener.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$IconButton$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$IconButton$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$IconButton.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$IconLabel$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$IconLabel$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI$IconLabel.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopIconUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopPaneUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopPaneUI$DragPane.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopPaneUI$MotifDesktopManager.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifDesktopPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifEditorPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$10.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$3.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$4.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$5.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$6.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$7.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$8.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$9.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$DirectoryCellRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$FileCellRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$FilterComboBoxModel.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$FilterComboBoxRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$MotifDirectoryListModel.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI$MotifFileListModel.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifFileChooserUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifGraphicsUtils.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory$CheckBoxIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory$MenuArrowIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory$MenuItemArrowIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory$MenuItemCheckIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory$RadioButtonIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifIconFactory.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$FrameButton.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$MaximizeButton.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$MinimizeButton.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$SystemButton.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$Title$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$Title$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane$Title.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameTitlePane.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameUI$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameUI$3.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifInternalFrameUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLabelUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$10.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$11.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$12.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$2.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$3.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$4.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$5.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$6.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$7.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$8.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel$9.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifLookAndFeel.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuItemUI$ChangeHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuItemUI$MouseInputHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuItemUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuMouseListener.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuMouseMotionListener.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuUI$MotifChangeHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuUI$MouseInputHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifMenuUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifOptionPaneUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifOptionPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifPasswordFieldUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifPopupMenuSeparatorUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifPopupMenuUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifPopupMenuUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifProgressBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI$ChangeHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI$MouseInputHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifRadioButtonMenuItemUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifRadioButtonUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifScrollBarButton.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifScrollBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifScrollPaneUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifScrollPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifSeparatorUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifSliderUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifSplitPaneDivider$1.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifSplitPaneDivider$MotifMouseHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifSplitPaneDivider.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifSplitPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTabbedPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTextAreaUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTextFieldUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTextPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTextUI$MotifCaret.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTextUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifToggleButtonUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTreeCellRenderer$TreeLeafIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTreeCellRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTreeUI$MotifCollapsedIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTreeUI$MotifExpandedIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/MotifTreeUI.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_de.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_es.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_fr.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_it.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_ja.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_ko.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_pt_BR.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_sv.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_zh_CN.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_zh_HK.class +INFO: Loading Class: com/sun/java/swing/plaf/motif/resources/motif_zh_TW.class +INFO: Loading Class: com/sun/java/swing/plaf/nimbus/AbstractRegionPainter.class +INFO: Loading Class: com/sun/java/swing/plaf/nimbus/NimbusLookAndFeel.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/AnimationController$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/AnimationController$AnimationState.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/AnimationController.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/DesktopProperty$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/DesktopProperty$WeakPCL.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/DesktopProperty.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/TMSchema$Control.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/TMSchema$Part.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/TMSchema$Prop.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/TMSchema$State.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/TMSchema$TypeEnum.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/TMSchema.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsBorders$ComplementDashedBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsBorders$DashedBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsBorders$InternalFrameLineBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsBorders$ProgressBarBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsBorders$ToolBarBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsBorders.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsButtonListener.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsButtonUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsButtonUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsCheckBoxUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsClassicLookAndFeel.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$3.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboBoxEditor.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboBoxRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboPopup$InvocationKeyHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$WindowsComboPopup.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI$XPComboBoxButton.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsComboBoxUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsDesktopIconUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsDesktopManager.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsDesktopPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsEditorPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$10.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$11.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$12.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$13.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$2.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$3.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$4.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$5$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$5.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$6.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$7.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$8.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$9.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$DirectoryComboBoxAction.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$DirectoryComboBoxModel.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$DirectoryComboBoxRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$FileRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$FilterComboBoxModel.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$FilterComboBoxRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$IndentIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$SingleClickListener.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$WindowsFileChooserUIAccessor.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$WindowsFileView.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI$WindowsNewFolderAction.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsFileChooserUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsGraphicsUtils.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$CheckBoxIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$CheckBoxMenuItemIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$ResizeIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsIconFactory.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane$2.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane$ScalableIconUIResource.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane$WindowsPropertyChangeHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane$WindowsTitlePaneLayout.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameTitlePane.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameUI$XPBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsInternalFrameUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLabelUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$2.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$AudioAction.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$FocusColorProperty.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$FontDesktopProperty.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$RGBGrayFilter.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$TriggerDesktopProperty.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsFontProperty.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsFontSizeProperty.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$WindowsLayoutStyle.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPBorderValue.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPDLUValue.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsLookAndFeel.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuBarUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuBarUI$TakeFocus.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuItemUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuUI$WindowsMouseInputHandler.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsMenuUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsOptionPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsPasswordFieldUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsPopupMenuSeparatorUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsPopupMenuUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsPopupWindow.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsProgressBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsRadioButtonUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsRootPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsScrollBarUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsScrollBarUI$Grid.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsScrollBarUI$WindowsArrowButton.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsScrollBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsScrollPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSeparatorUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSliderUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSliderUI$WindowsTrackListener.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSliderUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSpinnerUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSplitPaneDivider.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsSplitPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTableHeaderUI$1.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTableHeaderUI$IconBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTableHeaderUI$XPDefaultRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextAreaUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextFieldUI$WindowsFieldCaret$SafeScroller.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextFieldUI$WindowsFieldCaret.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextFieldUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextPaneUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextUI$WindowsCaret.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextUI$WindowsHighlightPainter.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTextUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsToggleButtonUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsToolBarSeparatorUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsToolBarUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTreeUI$CollapsedIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTreeUI$WindowsTreeCellRenderer.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/WindowsTreeUI.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$GlyphButton.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$Skin.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$SkinPainter.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$XPEmptyBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$XPFillBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$XPImageBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle$XPStatefulFillBorder.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/XPStyle.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_de.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_es.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_fr.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_it.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_ja.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_ko.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_pt_BR.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_sv.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_zh_CN.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_zh_HK.class +INFO: Loading Class: com/sun/java/swing/plaf/windows/resources/windows_zh_TW.class +INFO: Loading Class: com/sun/java/util/jar/pack/AdaptiveCoding.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute$FormatException.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute$Holder.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute$Layout$Element.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute$Layout.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute$ValueStream.class +INFO: Loading Class: com/sun/java/util/jar/pack/Attribute.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$Band.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$ByteBand$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$ByteBand.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$ByteCounter.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$CPRefBand.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$IntBand.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$MultiBand.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure$ValueBand.class +INFO: Loading Class: com/sun/java/util/jar/pack/BandStructure.class +INFO: Loading Class: com/sun/java/util/jar/pack/ClassReader$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/ClassReader$ClassFormatException.class +INFO: Loading Class: com/sun/java/util/jar/pack/ClassReader$UnresolvedEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ClassReader.class +INFO: Loading Class: com/sun/java/util/jar/pack/ClassWriter.class +INFO: Loading Class: com/sun/java/util/jar/pack/Code.class +INFO: Loading Class: com/sun/java/util/jar/pack/Coding.class +INFO: Loading Class: com/sun/java/util/jar/pack/CodingChooser$Choice.class +INFO: Loading Class: com/sun/java/util/jar/pack/CodingChooser$Sizer.class +INFO: Loading Class: com/sun/java/util/jar/pack/CodingChooser.class +INFO: Loading Class: com/sun/java/util/jar/pack/CodingMethod.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$BootstrapMethodEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$ClassEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$DescriptorEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$Entry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$Index.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$IndexGroup.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$InvokeDynamicEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$LiteralEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$MemberEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$MethodHandleEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$MethodTypeEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$NumberEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$SignatureEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$StringEntry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool$Utf8Entry.class +INFO: Loading Class: com/sun/java/util/jar/pack/ConstantPool.class +INFO: Loading Class: com/sun/java/util/jar/pack/Constants.class +INFO: Loading Class: com/sun/java/util/jar/pack/Driver.class +INFO: Loading Class: com/sun/java/util/jar/pack/DriverResource.class +INFO: Loading Class: com/sun/java/util/jar/pack/DriverResource_ja.class +INFO: Loading Class: com/sun/java/util/jar/pack/DriverResource_zh_CN.class +INFO: Loading Class: com/sun/java/util/jar/pack/FixedList.class +INFO: Loading Class: com/sun/java/util/jar/pack/Fixups$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/Fixups$Fixup.class +INFO: Loading Class: com/sun/java/util/jar/pack/Fixups$Itr.class +INFO: Loading Class: com/sun/java/util/jar/pack/Fixups.class +INFO: Loading Class: com/sun/java/util/jar/pack/Histogram$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/Histogram$BitMetric.class +INFO: Loading Class: com/sun/java/util/jar/pack/Histogram.class +INFO: Loading Class: com/sun/java/util/jar/pack/Instruction$FormatException.class +INFO: Loading Class: com/sun/java/util/jar/pack/Instruction$LookupSwitch.class +INFO: Loading Class: com/sun/java/util/jar/pack/Instruction$Switch.class +INFO: Loading Class: com/sun/java/util/jar/pack/Instruction$TableSwitch.class +INFO: Loading Class: com/sun/java/util/jar/pack/Instruction.class +INFO: Loading Class: com/sun/java/util/jar/pack/NativeUnpack$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/NativeUnpack.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$Class$Field.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$Class$Member.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$Class$Method.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$Class.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$File.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$InnerClass.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package$Version.class +INFO: Loading Class: com/sun/java/util/jar/pack/Package.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageReader$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageReader$2.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageReader$LimitedBuffer$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageReader$LimitedBuffer.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageReader.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageWriter$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageWriter$2.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageWriter$3.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackageWriter.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackerImpl$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackerImpl$DoPack$InFile.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackerImpl$DoPack.class +INFO: Loading Class: com/sun/java/util/jar/pack/PackerImpl.class +INFO: Loading Class: com/sun/java/util/jar/pack/PopulationCoding.class +INFO: Loading Class: com/sun/java/util/jar/pack/PropMap$Beans.class +INFO: Loading Class: com/sun/java/util/jar/pack/PropMap.class +INFO: Loading Class: com/sun/java/util/jar/pack/TLGlobals.class +INFO: Loading Class: com/sun/java/util/jar/pack/UnpackerImpl$1.class +INFO: Loading Class: com/sun/java/util/jar/pack/UnpackerImpl$DoUnpack.class +INFO: Loading Class: com/sun/java/util/jar/pack/UnpackerImpl.class +INFO: Loading Class: com/sun/java/util/jar/pack/Utils$NonCloser.class +INFO: Loading Class: com/sun/java/util/jar/pack/Utils$Pack200Logger.class +INFO: Loading Class: com/sun/java/util/jar/pack/Utils.class +INFO: Loading Class: com/sun/java_cup/internal/runtime/Scanner.class +INFO: Loading Class: com/sun/java_cup/internal/runtime/Symbol.class +INFO: Loading Class: com/sun/java_cup/internal/runtime/lr_parser.class +INFO: Loading Class: com/sun/java_cup/internal/runtime/virtual_parse_stack.class +INFO: Loading Class: com/sun/jmx/defaults/JmxProperties.class +INFO: Loading Class: com/sun/jmx/defaults/ServiceName.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$1.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$2.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$3.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ListenerWrapper.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ResourceContext$1.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor$ResourceContext.class +INFO: Loading Class: com/sun/jmx/interceptor/DefaultMBeanServerInterceptor.class +INFO: Loading Class: com/sun/jmx/interceptor/MBeanServerInterceptor.class +INFO: Loading Class: com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport$LoaderEntry.class +INFO: Loading Class: com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.class +INFO: Loading Class: com/sun/jmx/mbeanserver/ConvertingMethod.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$ArrayMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CollectionMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilder.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderCheckGetters.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor$AnnotationHelper.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor$Constr.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaConstructor.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaFrom.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaProxy.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeBuilderViaSetters.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$CompositeMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$EnumMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$IdentityMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$MXBeanRefMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$Mappings.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$NonNullMXBeanMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory$TabularMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DefaultMXBeanMappingFactory.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DescriptorCache.class +INFO: Loading Class: com/sun/jmx/mbeanserver/DynamicMBean2.class +INFO: Loading Class: com/sun/jmx/mbeanserver/GetPropertyAction.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Introspector$BeansHelper.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Introspector$SimpleIntrospector.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Introspector.class +INFO: Loading Class: com/sun/jmx/mbeanserver/JmxMBeanServer$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/JmxMBeanServer$2.class +INFO: Loading Class: com/sun/jmx/mbeanserver/JmxMBeanServer$3.class +INFO: Loading Class: com/sun/jmx/mbeanserver/JmxMBeanServer.class +INFO: Loading Class: com/sun/jmx/mbeanserver/JmxMBeanServerBuilder.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanAnalyzer$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanAnalyzer$AttrMethods.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanAnalyzer$MBeanVisitor.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanAnalyzer$MethodOrder.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanAnalyzer.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanInstantiator$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanInstantiator.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanIntrospector$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanIntrospector$MBeanInfoMaker.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanIntrospector$MBeanInfoMap.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanIntrospector$PerInterfaceMap.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanIntrospector.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanServerDelegateImpl.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MBeanSupport.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanIntrospector.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanLookup.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanMapping.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanMappingFactory.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy$GetHandler.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy$Handler.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy$InvokeHandler.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy$SetHandler.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy$Visitor.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanProxy.class +INFO: Loading Class: com/sun/jmx/mbeanserver/MXBeanSupport.class +INFO: Loading Class: com/sun/jmx/mbeanserver/ModifiableClassLoaderRepository.class +INFO: Loading Class: com/sun/jmx/mbeanserver/NamedObject.class +INFO: Loading Class: com/sun/jmx/mbeanserver/ObjectInputStreamWithLoader.class +INFO: Loading Class: com/sun/jmx/mbeanserver/PerInterface$1.class +INFO: Loading Class: com/sun/jmx/mbeanserver/PerInterface$InitMaps.class +INFO: Loading Class: com/sun/jmx/mbeanserver/PerInterface$MethodAndSig.class +INFO: Loading Class: com/sun/jmx/mbeanserver/PerInterface.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Repository$ObjectNamePattern.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Repository$RegistrationContext.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Repository.class +INFO: Loading Class: com/sun/jmx/mbeanserver/SecureClassLoaderRepository.class +INFO: Loading Class: com/sun/jmx/mbeanserver/StandardMBeanIntrospector.class +INFO: Loading Class: com/sun/jmx/mbeanserver/StandardMBeanSupport.class +INFO: Loading Class: com/sun/jmx/mbeanserver/SunJmxMBeanServer.class +INFO: Loading Class: com/sun/jmx/mbeanserver/Util.class +INFO: Loading Class: com/sun/jmx/mbeanserver/WeakIdentityHashMap$IdentityWeakReference.class +INFO: Loading Class: com/sun/jmx/mbeanserver/WeakIdentityHashMap.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$2.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$3.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$4.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$5.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$BroadcasterQuery.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$BufferListener.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$NamedNotification.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer$ShareBuffer.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayNotificationBuffer.class +INFO: Loading Class: com/sun/jmx/remote/internal/ArrayQueue.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientCommunicatorAdmin$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientCommunicatorAdmin$Checker.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientCommunicatorAdmin.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientListenerInfo.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientNotifForwarder$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientNotifForwarder$LinearExecutor$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientNotifForwarder$LinearExecutor.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientNotifForwarder$NotifFetcher$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientNotifForwarder$NotifFetcher.class +INFO: Loading Class: com/sun/jmx/remote/internal/ClientNotifForwarder.class +INFO: Loading Class: com/sun/jmx/remote/internal/IIOPHelper$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/IIOPHelper.class +INFO: Loading Class: com/sun/jmx/remote/internal/IIOPProxy.class +INFO: Loading Class: com/sun/jmx/remote/internal/NotificationBuffer.class +INFO: Loading Class: com/sun/jmx/remote/internal/NotificationBufferFilter.class +INFO: Loading Class: com/sun/jmx/remote/internal/ProxyRef.class +INFO: Loading Class: com/sun/jmx/remote/internal/RMIExporter.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerCommunicatorAdmin$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerCommunicatorAdmin$Timeout.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerCommunicatorAdmin.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerNotifForwarder$1.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerNotifForwarder$2.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerNotifForwarder$IdAndFilter.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerNotifForwarder$NotifForwarderBufferFilter.class +INFO: Loading Class: com/sun/jmx/remote/internal/ServerNotifForwarder.class +INFO: Loading Class: com/sun/jmx/remote/internal/Unmarshal.class +INFO: Loading Class: com/sun/jmx/remote/protocol/iiop/ClientProvider.class +INFO: Loading Class: com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl$1.class +INFO: Loading Class: com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.class +INFO: Loading Class: com/sun/jmx/remote/protocol/iiop/ProxyInputStream.class +INFO: Loading Class: com/sun/jmx/remote/protocol/iiop/ServerProvider.class +INFO: Loading Class: com/sun/jmx/remote/protocol/rmi/ClientProvider.class +INFO: Loading Class: com/sun/jmx/remote/protocol/rmi/ServerProvider.class +INFO: Loading Class: com/sun/jmx/remote/security/FileLoginModule.class +INFO: Loading Class: com/sun/jmx/remote/security/JMXPluggableAuthenticator$1.class +INFO: Loading Class: com/sun/jmx/remote/security/JMXPluggableAuthenticator$2.class +INFO: Loading Class: com/sun/jmx/remote/security/JMXPluggableAuthenticator$FileLoginConfig.class +INFO: Loading Class: com/sun/jmx/remote/security/JMXPluggableAuthenticator$JMXCallbackHandler.class +INFO: Loading Class: com/sun/jmx/remote/security/JMXPluggableAuthenticator.class +INFO: Loading Class: com/sun/jmx/remote/security/JMXSubjectDomainCombiner.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerAccessController.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerFileAccessController$1.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerFileAccessController$2.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerFileAccessController$Access.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerFileAccessController$AccessType.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerFileAccessController$Parser.class +INFO: Loading Class: com/sun/jmx/remote/security/MBeanServerFileAccessController.class +INFO: Loading Class: com/sun/jmx/remote/security/NotificationAccessController.class +INFO: Loading Class: com/sun/jmx/remote/security/SubjectDelegator$1.class +INFO: Loading Class: com/sun/jmx/remote/security/SubjectDelegator.class +INFO: Loading Class: com/sun/jmx/remote/util/ClassLoaderWithRepository.class +INFO: Loading Class: com/sun/jmx/remote/util/ClassLogger.class +INFO: Loading Class: com/sun/jmx/remote/util/EnvHelp$1.class +INFO: Loading Class: com/sun/jmx/remote/util/EnvHelp$SinkOutputStream.class +INFO: Loading Class: com/sun/jmx/remote/util/EnvHelp.class +INFO: Loading Class: com/sun/jmx/remote/util/OrderClassLoaders.class +INFO: Loading Class: com/sun/jmx/snmp/BerDecoder.class +INFO: Loading Class: com/sun/jmx/snmp/BerEncoder.class +INFO: Loading Class: com/sun/jmx/snmp/BerException.class +INFO: Loading Class: com/sun/jmx/snmp/EnumRowStatus.class +INFO: Loading Class: com/sun/jmx/snmp/Enumerated.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/ASCII_CharStream.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/AclEntryImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/AclImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/GroupImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/Host.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMAccess.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMAclBlock.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMAclItem.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMCommunities.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMCommunity.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMEnterprise.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMHost.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMHostInform.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMHostName.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMHostTrap.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMInformBlock.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMInformCommunity.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMInformInterestedHost.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMInformItem.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMIpAddress.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMIpMask.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMIpV6Address.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMManagers.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMNetMask.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMNetMaskV6.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMSecurityDefs.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMTrapBlock.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMTrapCommunity.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMTrapInterestedHost.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMTrapItem.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JDMTrapNum.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/JJTParserState.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/NetMaskImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/Node.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/OwnerImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/ParseError.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/ParseException.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/Parser$JJCalls.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/Parser.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/ParserConstants.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/ParserTokenManager.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/ParserTreeConstants.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/PermissionImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/PrincipalImpl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/SimpleNode.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/SnmpAcl.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/Token.class +INFO: Loading Class: com/sun/jmx/snmp/IPAcl/TokenMgrError.class +INFO: Loading Class: com/sun/jmx/snmp/InetAddressAcl.class +INFO: Loading Class: com/sun/jmx/snmp/ServiceName.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpAckPdu.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpBadSecurityLevelException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpCounter.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpCounter64.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpDataTypeEnums.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpDefinitions.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpEngine.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpEngineFactory.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpEngineId.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpEngineParameters.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpGauge.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpInt.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpIpAddress.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpMessage.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpMsg.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpNull.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOid.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOidDatabase.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOidDatabaseSupport.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOidRecord.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOidTable.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOidTableSupport.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpOpaque.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpParameters.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpParams.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPdu.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduBulk.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduBulkType.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduFactory.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduFactoryBER.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduPacket.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduRequest.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduRequestType.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPduTrap.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPeer.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpPermission.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpScopedPduBulk.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpScopedPduPacket.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpScopedPduRequest.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpSecurityException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpSecurityParameters.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpStatusException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpString.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpStringFixed.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpTimeticks.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpTooBigException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnknownAccContrModelException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnknownModelException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnknownModelLcdException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnknownMsgProcModelException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnknownSecModelException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnknownSubSystemException.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUnsignedInt.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpUsmKeyHandler.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpV3Message.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpValue.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpVarBind.class +INFO: Loading Class: com/sun/jmx/snmp/SnmpVarBindList.class +INFO: Loading Class: com/sun/jmx/snmp/ThreadContext.class +INFO: Loading Class: com/sun/jmx/snmp/Timestamp.class +INFO: Loading Class: com/sun/jmx/snmp/UserAcl.class +INFO: Loading Class: com/sun/jmx/snmp/agent/AcmChecker.class +INFO: Loading Class: com/sun/jmx/snmp/agent/LongList.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpEntryOid.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpErrorHandlerAgent.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpGenericMetaServer.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpGenericObjectServer.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpIndex.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMib.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibAgent.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibAgentMBean.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibEntry.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibGroup.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibHandler.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibNode.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibOid$NonSyncVector.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibOid.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibRequest.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibRequestImpl.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibSubRequest.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpMibTable.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpRequestTree$Enum.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpRequestTree$Handler.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpRequestTree$SnmpMibSubRequestImpl.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpRequestTree.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpStandardMetaServer.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpStandardObjectServer.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpTableCallbackHandler.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpTableEntryFactory.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpTableEntryNotification.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpTableSupport.class +INFO: Loading Class: com/sun/jmx/snmp/agent/SnmpUserDataFactory.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/ClientHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/CommunicationException.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/CommunicatorServer.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/CommunicatorServerMBean.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SendQ.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpAdaptorServer.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpAdaptorServerMBean.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpInformHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpInformRequest.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpMibTree$1.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpMibTree$TreeNode.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpMibTree.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpQManager.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpRequestCounter.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpRequestHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpResponseHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSendServer.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSession.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSocket.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSubBulkRequestHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSubNextRequestHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSubRequestHandler$NonSyncVector.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpSubRequestHandler.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/SnmpTimerServer.class +INFO: Loading Class: com/sun/jmx/snmp/daemon/WaitQ.class +INFO: Loading Class: com/sun/jmx/snmp/defaults/DefaultPaths.class +INFO: Loading Class: com/sun/jmx/snmp/defaults/SnmpProperties.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpAccessControlModel.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpAccessControlSubSystem.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpDecryptedPdu.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpEngineImpl.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpIncomingRequest.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpIncomingResponse.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpLcd$SubSysLcdManager.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpLcd.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpModel.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpModelLcd.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpMsgProcessingModel.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpMsgProcessingSubSystem.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpOutgoingRequest.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpSecurityCache.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpSecurityModel.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpSecuritySubSystem.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpSubSystem.class +INFO: Loading Class: com/sun/jmx/snmp/internal/SnmpTools.class +INFO: Loading Class: com/sun/jmx/snmp/mpm/SnmpMsgTranslator.class +INFO: Loading Class: com/sun/jmx/snmp/tasks/Task.class +INFO: Loading Class: com/sun/jmx/snmp/tasks/TaskServer.class +INFO: Loading Class: com/sun/jmx/snmp/tasks/ThreadService$ExecutorThread.class +INFO: Loading Class: com/sun/jmx/snmp/tasks/ThreadService.class +INFO: Loading Class: com/sun/jndi/cosnaming/CNBindingEnumeration.class +INFO: Loading Class: com/sun/jndi/cosnaming/CNCtx.class +INFO: Loading Class: com/sun/jndi/cosnaming/CNCtxFactory.class +INFO: Loading Class: com/sun/jndi/cosnaming/CNNameParser$CNCompoundName.class +INFO: Loading Class: com/sun/jndi/cosnaming/CNNameParser.class +INFO: Loading Class: com/sun/jndi/cosnaming/CorbanameUrl.class +INFO: Loading Class: com/sun/jndi/cosnaming/ExceptionMapper$1.class +INFO: Loading Class: com/sun/jndi/cosnaming/ExceptionMapper$2.class +INFO: Loading Class: com/sun/jndi/cosnaming/ExceptionMapper.class +INFO: Loading Class: com/sun/jndi/cosnaming/IiopUrl$Address.class +INFO: Loading Class: com/sun/jndi/cosnaming/IiopUrl.class +INFO: Loading Class: com/sun/jndi/cosnaming/OrbReuseTracker.class +INFO: Loading Class: com/sun/jndi/cosnaming/RemoteToCorba.class +INFO: Loading Class: com/sun/jndi/dns/BaseNameClassPairEnumeration.class +INFO: Loading Class: com/sun/jndi/dns/BindingEnumeration.class +INFO: Loading Class: com/sun/jndi/dns/CT.class +INFO: Loading Class: com/sun/jndi/dns/DnsClient.class +INFO: Loading Class: com/sun/jndi/dns/DnsContext.class +INFO: Loading Class: com/sun/jndi/dns/DnsContextFactory.class +INFO: Loading Class: com/sun/jndi/dns/DnsName$1.class +INFO: Loading Class: com/sun/jndi/dns/DnsName.class +INFO: Loading Class: com/sun/jndi/dns/DnsNameParser.class +INFO: Loading Class: com/sun/jndi/dns/DnsUrl.class +INFO: Loading Class: com/sun/jndi/dns/Header.class +INFO: Loading Class: com/sun/jndi/dns/NameClassPairEnumeration.class +INFO: Loading Class: com/sun/jndi/dns/NameNode.class +INFO: Loading Class: com/sun/jndi/dns/Packet.class +INFO: Loading Class: com/sun/jndi/dns/Resolver.class +INFO: Loading Class: com/sun/jndi/dns/ResourceRecord.class +INFO: Loading Class: com/sun/jndi/dns/ResourceRecords.class +INFO: Loading Class: com/sun/jndi/dns/Tcp.class +INFO: Loading Class: com/sun/jndi/dns/ZoneNode.class +INFO: Loading Class: com/sun/jndi/ldap/AbstractLdapNamingEnumeration.class +INFO: Loading Class: com/sun/jndi/ldap/BasicControl.class +INFO: Loading Class: com/sun/jndi/ldap/Ber$DecodeException.class +INFO: Loading Class: com/sun/jndi/ldap/Ber$EncodeException.class +INFO: Loading Class: com/sun/jndi/ldap/Ber.class +INFO: Loading Class: com/sun/jndi/ldap/BerDecoder.class +INFO: Loading Class: com/sun/jndi/ldap/BerEncoder.class +INFO: Loading Class: com/sun/jndi/ldap/BindingWithControls.class +INFO: Loading Class: com/sun/jndi/ldap/ClientId.class +INFO: Loading Class: com/sun/jndi/ldap/Connection.class +INFO: Loading Class: com/sun/jndi/ldap/DefaultResponseControlFactory.class +INFO: Loading Class: com/sun/jndi/ldap/DigestClientId.class +INFO: Loading Class: com/sun/jndi/ldap/EntryChangeResponseControl.class +INFO: Loading Class: com/sun/jndi/ldap/EventQueue$QueueElement.class +INFO: Loading Class: com/sun/jndi/ldap/EventQueue.class +INFO: Loading Class: com/sun/jndi/ldap/EventSupport.class +INFO: Loading Class: com/sun/jndi/ldap/Filter.class +INFO: Loading Class: com/sun/jndi/ldap/LdapAttribute.class +INFO: Loading Class: com/sun/jndi/ldap/LdapBindingEnumeration$1.class +INFO: Loading Class: com/sun/jndi/ldap/LdapBindingEnumeration.class +INFO: Loading Class: com/sun/jndi/ldap/LdapClient.class +INFO: Loading Class: com/sun/jndi/ldap/LdapClientFactory.class +INFO: Loading Class: com/sun/jndi/ldap/LdapCtx$SearchArgs.class +INFO: Loading Class: com/sun/jndi/ldap/LdapCtx.class +INFO: Loading Class: com/sun/jndi/ldap/LdapCtxFactory.class +INFO: Loading Class: com/sun/jndi/ldap/LdapEntry.class +INFO: Loading Class: com/sun/jndi/ldap/LdapName$1.class +INFO: Loading Class: com/sun/jndi/ldap/LdapName$DnParser.class +INFO: Loading Class: com/sun/jndi/ldap/LdapName$Rdn.class +INFO: Loading Class: com/sun/jndi/ldap/LdapName$TypeAndValue.class +INFO: Loading Class: com/sun/jndi/ldap/LdapName.class +INFO: Loading Class: com/sun/jndi/ldap/LdapNameParser.class +INFO: Loading Class: com/sun/jndi/ldap/LdapNamingEnumeration.class +INFO: Loading Class: com/sun/jndi/ldap/LdapPoolManager$1.class +INFO: Loading Class: com/sun/jndi/ldap/LdapPoolManager$2.class +INFO: Loading Class: com/sun/jndi/ldap/LdapPoolManager$3.class +INFO: Loading Class: com/sun/jndi/ldap/LdapPoolManager.class +INFO: Loading Class: com/sun/jndi/ldap/LdapReferralContext.class +INFO: Loading Class: com/sun/jndi/ldap/LdapReferralException.class +INFO: Loading Class: com/sun/jndi/ldap/LdapRequest.class +INFO: Loading Class: com/sun/jndi/ldap/LdapResult.class +INFO: Loading Class: com/sun/jndi/ldap/LdapSchemaCtx$SchemaInfo.class +INFO: Loading Class: com/sun/jndi/ldap/LdapSchemaCtx.class +INFO: Loading Class: com/sun/jndi/ldap/LdapSchemaParser.class +INFO: Loading Class: com/sun/jndi/ldap/LdapSearchEnumeration$1.class +INFO: Loading Class: com/sun/jndi/ldap/LdapSearchEnumeration.class +INFO: Loading Class: com/sun/jndi/ldap/LdapURL.class +INFO: Loading Class: com/sun/jndi/ldap/ManageReferralControl.class +INFO: Loading Class: com/sun/jndi/ldap/NameClassPairWithControls.class +INFO: Loading Class: com/sun/jndi/ldap/NamingEventNotifier.class +INFO: Loading Class: com/sun/jndi/ldap/NotifierArgs.class +INFO: Loading Class: com/sun/jndi/ldap/Obj$LoaderInputStream.class +INFO: Loading Class: com/sun/jndi/ldap/Obj.class +INFO: Loading Class: com/sun/jndi/ldap/PersistentSearchControl.class +INFO: Loading Class: com/sun/jndi/ldap/ReferralEnumeration.class +INFO: Loading Class: com/sun/jndi/ldap/SearchResultWithControls.class +INFO: Loading Class: com/sun/jndi/ldap/ServiceLocator$SrvRecord.class +INFO: Loading Class: com/sun/jndi/ldap/ServiceLocator.class +INFO: Loading Class: com/sun/jndi/ldap/SimpleClientId.class +INFO: Loading Class: com/sun/jndi/ldap/UnsolicitedResponseImpl.class +INFO: Loading Class: com/sun/jndi/ldap/VersionHelper.class +INFO: Loading Class: com/sun/jndi/ldap/VersionHelper12$1.class +INFO: Loading Class: com/sun/jndi/ldap/VersionHelper12$2.class +INFO: Loading Class: com/sun/jndi/ldap/VersionHelper12$3.class +INFO: Loading Class: com/sun/jndi/ldap/VersionHelper12.class +INFO: Loading Class: com/sun/jndi/ldap/ext/StartTlsResponseImpl.class +INFO: Loading Class: com/sun/jndi/ldap/pool/ConnectionDesc.class +INFO: Loading Class: com/sun/jndi/ldap/pool/Connections.class +INFO: Loading Class: com/sun/jndi/ldap/pool/ConnectionsRef.class +INFO: Loading Class: com/sun/jndi/ldap/pool/ConnectionsWeakRef.class +INFO: Loading Class: com/sun/jndi/ldap/pool/Pool.class +INFO: Loading Class: com/sun/jndi/ldap/pool/PoolCallback.class +INFO: Loading Class: com/sun/jndi/ldap/pool/PoolCleaner.class +INFO: Loading Class: com/sun/jndi/ldap/pool/PooledConnection.class +INFO: Loading Class: com/sun/jndi/ldap/pool/PooledConnectionFactory.class +INFO: Loading Class: com/sun/jndi/ldap/sasl/DefaultCallbackHandler.class +INFO: Loading Class: com/sun/jndi/ldap/sasl/LdapSasl.class +INFO: Loading Class: com/sun/jndi/ldap/sasl/SaslInputStream.class +INFO: Loading Class: com/sun/jndi/ldap/sasl/SaslOutputStream.class +INFO: Loading Class: com/sun/jndi/rmi/registry/AtomicNameParser.class +INFO: Loading Class: com/sun/jndi/rmi/registry/BindingEnumeration.class +INFO: Loading Class: com/sun/jndi/rmi/registry/NameClassPairEnumeration.class +INFO: Loading Class: com/sun/jndi/rmi/registry/ReferenceWrapper.class +INFO: Loading Class: com/sun/jndi/rmi/registry/ReferenceWrapper_Stub.class +INFO: Loading Class: com/sun/jndi/rmi/registry/RegistryContext.class +INFO: Loading Class: com/sun/jndi/rmi/registry/RegistryContextFactory.class +INFO: Loading Class: com/sun/jndi/rmi/registry/RemoteReference.class +INFO: Loading Class: com/sun/jndi/toolkit/corba/CorbaUtils.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/AtomicContext$1.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/AtomicContext$2.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/AtomicContext.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/AtomicDirContext.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/ComponentContext$1.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/ComponentContext$2.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/ComponentContext.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/ComponentDirContext.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/Continuation.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/HeadTail.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/PartialCompositeContext.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/PartialCompositeDirContext.class +INFO: Loading Class: com/sun/jndi/toolkit/ctx/StringHeadTail.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/AttrFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/ContainmentFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/ContextEnumerator.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/DirSearch.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierMemDirCtx$BaseFlatNames.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierMemDirCtx$FlatBindings.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierMemDirCtx$FlatNames.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierMemDirCtx$HierContextEnumerator.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierMemDirCtx.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierarchicalName$1.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierarchicalName.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/HierarchicalNameParser.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/LazySearchEnumerationImpl.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/SearchFilter$AtomicFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/SearchFilter$CompoundFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/SearchFilter$NotFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/SearchFilter$StringFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/dir/SearchFilter.class +INFO: Loading Class: com/sun/jndi/toolkit/url/GenericURLContext.class +INFO: Loading Class: com/sun/jndi/toolkit/url/GenericURLDirContext.class +INFO: Loading Class: com/sun/jndi/toolkit/url/Uri.class +INFO: Loading Class: com/sun/jndi/toolkit/url/UrlUtil.class +INFO: Loading Class: com/sun/jndi/url/corbaname/corbanameURLContextFactory.class +INFO: Loading Class: com/sun/jndi/url/dns/dnsURLContext.class +INFO: Loading Class: com/sun/jndi/url/dns/dnsURLContextFactory.class +INFO: Loading Class: com/sun/jndi/url/iiop/iiopURLContext.class +INFO: Loading Class: com/sun/jndi/url/iiop/iiopURLContextFactory.class +INFO: Loading Class: com/sun/jndi/url/iiopname/iiopnameURLContextFactory.class +INFO: Loading Class: com/sun/jndi/url/ldap/ldapURLContext.class +INFO: Loading Class: com/sun/jndi/url/ldap/ldapURLContextFactory.class +INFO: Loading Class: com/sun/jndi/url/ldaps/ldapsURLContextFactory.class +INFO: Loading Class: com/sun/jndi/url/rmi/rmiURLContext.class +INFO: Loading Class: com/sun/jndi/url/rmi/rmiURLContextFactory.class +INFO: Loading Class: com/sun/management/DiagnosticCommandMBean.class +INFO: Loading Class: com/sun/management/GarbageCollectionNotificationInfo.class +INFO: Loading Class: com/sun/management/GarbageCollectorMXBean.class +INFO: Loading Class: com/sun/management/GcInfo.class +INFO: Loading Class: com/sun/management/HotSpotDiagnosticMXBean.class +INFO: Loading Class: com/sun/management/MissionControl$1.class +INFO: Loading Class: com/sun/management/MissionControl$2.class +INFO: Loading Class: com/sun/management/MissionControl$FlightRecorderHelper.class +INFO: Loading Class: com/sun/management/MissionControl.class +INFO: Loading Class: com/sun/management/MissionControlMXBean.class +INFO: Loading Class: com/sun/management/OperatingSystemMXBean.class +INFO: Loading Class: com/sun/management/ThreadMXBean.class +INFO: Loading Class: com/sun/management/UnixOperatingSystemMXBean.class +INFO: Loading Class: com/sun/management/VMOption$Origin.class +INFO: Loading Class: com/sun/management/VMOption.class +INFO: Loading Class: com/sun/management/jmx/Introspector.class +INFO: Loading Class: com/sun/management/jmx/JMProperties.class +INFO: Loading Class: com/sun/management/jmx/MBeanServerImpl.class +INFO: Loading Class: com/sun/management/jmx/ServiceName.class +INFO: Loading Class: com/sun/management/jmx/Trace.class +INFO: Loading Class: com/sun/management/jmx/TraceFilter.class +INFO: Loading Class: com/sun/management/jmx/TraceListener.class +INFO: Loading Class: com/sun/management/jmx/TraceNotification.class +INFO: Loading Class: com/sun/management/package-info.class +INFO: Loading Class: com/sun/media/sound/AbstractDataLine.class +INFO: Loading Class: com/sun/media/sound/AbstractLine.class +INFO: Loading Class: com/sun/media/sound/AbstractMidiDevice$AbstractReceiver.class +INFO: Loading Class: com/sun/media/sound/AbstractMidiDevice$BasicTransmitter.class +INFO: Loading Class: com/sun/media/sound/AbstractMidiDevice$TransmitterList.class +INFO: Loading Class: com/sun/media/sound/AbstractMidiDevice.class +INFO: Loading Class: com/sun/media/sound/AbstractMidiDeviceProvider$Info.class +INFO: Loading Class: com/sun/media/sound/AbstractMidiDeviceProvider.class +INFO: Loading Class: com/sun/media/sound/AbstractMixer.class +INFO: Loading Class: com/sun/media/sound/AiffFileFormat.class +INFO: Loading Class: com/sun/media/sound/AiffFileReader.class +INFO: Loading Class: com/sun/media/sound/AiffFileWriter.class +INFO: Loading Class: com/sun/media/sound/AlawCodec$AlawCodecStream.class +INFO: Loading Class: com/sun/media/sound/AlawCodec.class +INFO: Loading Class: com/sun/media/sound/AuFileFormat.class +INFO: Loading Class: com/sun/media/sound/AuFileReader.class +INFO: Loading Class: com/sun/media/sound/AuFileWriter.class +INFO: Loading Class: com/sun/media/sound/AudioFileSoundbankReader.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$1.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion16SB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion16SL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion16UB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion16UL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion24SB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion24SL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion24UB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion24UL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32B.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32L.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32SB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32SL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32UB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32UL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32xSB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32xSL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32xUB.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion32xUL.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion64B.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion64L.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion8S.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatConversion8U.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter$AudioFloatLSBFilter.class +INFO: Loading Class: com/sun/media/sound/AudioFloatConverter.class +INFO: Loading Class: com/sun/media/sound/AudioFloatFormatConverter$AudioFloatFormatConverterInputStream.class +INFO: Loading Class: com/sun/media/sound/AudioFloatFormatConverter$AudioFloatInputStreamChannelMixer.class +INFO: Loading Class: com/sun/media/sound/AudioFloatFormatConverter$AudioFloatInputStreamResampler.class +INFO: Loading Class: com/sun/media/sound/AudioFloatFormatConverter.class +INFO: Loading Class: com/sun/media/sound/AudioFloatInputStream$BytaArrayAudioFloatInputStream.class +INFO: Loading Class: com/sun/media/sound/AudioFloatInputStream$DirectAudioFloatInputStream.class +INFO: Loading Class: com/sun/media/sound/AudioFloatInputStream.class +INFO: Loading Class: com/sun/media/sound/AudioSynthesizer.class +INFO: Loading Class: com/sun/media/sound/AudioSynthesizerPropertyInfo.class +INFO: Loading Class: com/sun/media/sound/AutoClosingClip.class +INFO: Loading Class: com/sun/media/sound/AutoConnectSequencer.class +INFO: Loading Class: com/sun/media/sound/DLSInfo.class +INFO: Loading Class: com/sun/media/sound/DLSInstrument.class +INFO: Loading Class: com/sun/media/sound/DLSModulator.class +INFO: Loading Class: com/sun/media/sound/DLSRegion.class +INFO: Loading Class: com/sun/media/sound/DLSSample.class +INFO: Loading Class: com/sun/media/sound/DLSSampleLoop.class +INFO: Loading Class: com/sun/media/sound/DLSSampleOptions.class +INFO: Loading Class: com/sun/media/sound/DLSSoundbank$DLSID.class +INFO: Loading Class: com/sun/media/sound/DLSSoundbank.class +INFO: Loading Class: com/sun/media/sound/DLSSoundbankReader.class +INFO: Loading Class: com/sun/media/sound/DataPusher.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$1.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectBAOS.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectClip.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectDL$Balance.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectDL$Gain.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectDL$Mute.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectDL$Pan.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectDL.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectDLI.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectSDL.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice$DirectTDL.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDevice.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDeviceProvider$DirectAudioDeviceInfo.class +INFO: Loading Class: com/sun/media/sound/DirectAudioDeviceProvider.class +INFO: Loading Class: com/sun/media/sound/EmergencySoundbank.class +INFO: Loading Class: com/sun/media/sound/EventDispatcher$ClipInfo.class +INFO: Loading Class: com/sun/media/sound/EventDispatcher$EventInfo.class +INFO: Loading Class: com/sun/media/sound/EventDispatcher$LineMonitor.class +INFO: Loading Class: com/sun/media/sound/EventDispatcher.class +INFO: Loading Class: com/sun/media/sound/FFT.class +INFO: Loading Class: com/sun/media/sound/FastShortMessage.class +INFO: Loading Class: com/sun/media/sound/FastSysexMessage.class +INFO: Loading Class: com/sun/media/sound/InvalidDataException.class +INFO: Loading Class: com/sun/media/sound/InvalidFormatException.class +INFO: Loading Class: com/sun/media/sound/JARSoundbankReader.class +INFO: Loading Class: com/sun/media/sound/JDK13Services.class +INFO: Loading Class: com/sun/media/sound/JSSecurityManager$1.class +INFO: Loading Class: com/sun/media/sound/JSSecurityManager$2.class +INFO: Loading Class: com/sun/media/sound/JSSecurityManager$3.class +INFO: Loading Class: com/sun/media/sound/JSSecurityManager.class +INFO: Loading Class: com/sun/media/sound/JavaSoundAudioClip$DirectBAOS.class +INFO: Loading Class: com/sun/media/sound/JavaSoundAudioClip.class +INFO: Loading Class: com/sun/media/sound/MidiDeviceReceiverEnvelope.class +INFO: Loading Class: com/sun/media/sound/MidiDeviceTransmitterEnvelope.class +INFO: Loading Class: com/sun/media/sound/MidiInDevice$1.class +INFO: Loading Class: com/sun/media/sound/MidiInDevice$MidiInTransmitter.class +INFO: Loading Class: com/sun/media/sound/MidiInDevice.class +INFO: Loading Class: com/sun/media/sound/MidiInDeviceProvider$1.class +INFO: Loading Class: com/sun/media/sound/MidiInDeviceProvider$MidiInDeviceInfo.class +INFO: Loading Class: com/sun/media/sound/MidiInDeviceProvider.class +INFO: Loading Class: com/sun/media/sound/MidiOutDevice$MidiOutReceiver.class +INFO: Loading Class: com/sun/media/sound/MidiOutDevice.class +INFO: Loading Class: com/sun/media/sound/MidiOutDeviceProvider$1.class +INFO: Loading Class: com/sun/media/sound/MidiOutDeviceProvider$MidiOutDeviceInfo.class +INFO: Loading Class: com/sun/media/sound/MidiOutDeviceProvider.class +INFO: Loading Class: com/sun/media/sound/MidiUtils$TempoCache.class +INFO: Loading Class: com/sun/media/sound/MidiUtils.class +INFO: Loading Class: com/sun/media/sound/ModelAbstractChannelMixer.class +INFO: Loading Class: com/sun/media/sound/ModelAbstractOscillator.class +INFO: Loading Class: com/sun/media/sound/ModelByteBuffer$RandomFileInputStream.class +INFO: Loading Class: com/sun/media/sound/ModelByteBuffer.class +INFO: Loading Class: com/sun/media/sound/ModelByteBufferWavetable$Buffer8PlusInputStream.class +INFO: Loading Class: com/sun/media/sound/ModelByteBufferWavetable.class +INFO: Loading Class: com/sun/media/sound/ModelChannelMixer.class +INFO: Loading Class: com/sun/media/sound/ModelConnectionBlock.class +INFO: Loading Class: com/sun/media/sound/ModelDestination.class +INFO: Loading Class: com/sun/media/sound/ModelDirectedPlayer.class +INFO: Loading Class: com/sun/media/sound/ModelDirector.class +INFO: Loading Class: com/sun/media/sound/ModelIdentifier.class +INFO: Loading Class: com/sun/media/sound/ModelInstrument.class +INFO: Loading Class: com/sun/media/sound/ModelInstrumentComparator.class +INFO: Loading Class: com/sun/media/sound/ModelMappedInstrument.class +INFO: Loading Class: com/sun/media/sound/ModelOscillator.class +INFO: Loading Class: com/sun/media/sound/ModelOscillatorStream.class +INFO: Loading Class: com/sun/media/sound/ModelPatch.class +INFO: Loading Class: com/sun/media/sound/ModelPerformer.class +INFO: Loading Class: com/sun/media/sound/ModelSource.class +INFO: Loading Class: com/sun/media/sound/ModelStandardDirector.class +INFO: Loading Class: com/sun/media/sound/ModelStandardIndexedDirector.class +INFO: Loading Class: com/sun/media/sound/ModelStandardTransform.class +INFO: Loading Class: com/sun/media/sound/ModelTransform.class +INFO: Loading Class: com/sun/media/sound/ModelWavetable.class +INFO: Loading Class: com/sun/media/sound/PCMtoPCMCodec$PCMtoPCMCodecStream.class +INFO: Loading Class: com/sun/media/sound/PCMtoPCMCodec.class +INFO: Loading Class: com/sun/media/sound/Platform.class +INFO: Loading Class: com/sun/media/sound/PortMixer$1.class +INFO: Loading Class: com/sun/media/sound/PortMixer$BoolCtrl$BCT.class +INFO: Loading Class: com/sun/media/sound/PortMixer$BoolCtrl.class +INFO: Loading Class: com/sun/media/sound/PortMixer$CompCtrl$CCT.class +INFO: Loading Class: com/sun/media/sound/PortMixer$CompCtrl.class +INFO: Loading Class: com/sun/media/sound/PortMixer$FloatCtrl$FCT.class +INFO: Loading Class: com/sun/media/sound/PortMixer$FloatCtrl.class +INFO: Loading Class: com/sun/media/sound/PortMixer$PortInfo.class +INFO: Loading Class: com/sun/media/sound/PortMixer$PortMixerPort.class +INFO: Loading Class: com/sun/media/sound/PortMixer.class +INFO: Loading Class: com/sun/media/sound/PortMixerProvider$PortMixerInfo.class +INFO: Loading Class: com/sun/media/sound/PortMixerProvider.class +INFO: Loading Class: com/sun/media/sound/Printer.class +INFO: Loading Class: com/sun/media/sound/RIFFInvalidDataException.class +INFO: Loading Class: com/sun/media/sound/RIFFInvalidFormatException.class +INFO: Loading Class: com/sun/media/sound/RIFFReader.class +INFO: Loading Class: com/sun/media/sound/RIFFWriter$RandomAccessByteWriter.class +INFO: Loading Class: com/sun/media/sound/RIFFWriter$RandomAccessFileWriter.class +INFO: Loading Class: com/sun/media/sound/RIFFWriter$RandomAccessWriter.class +INFO: Loading Class: com/sun/media/sound/RIFFWriter.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$1.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$ControllerListElement.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$DataPump.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$PlayThread.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$RealTimeSequencerInfo.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$RecordingTrack.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$SequencerReceiver.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer$SequencerTransmitter.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencer.class +INFO: Loading Class: com/sun/media/sound/RealTimeSequencerProvider.class +INFO: Loading Class: com/sun/media/sound/ReferenceCountingDevice.class +INFO: Loading Class: com/sun/media/sound/SF2GlobalRegion.class +INFO: Loading Class: com/sun/media/sound/SF2Instrument$1.class +INFO: Loading Class: com/sun/media/sound/SF2Instrument.class +INFO: Loading Class: com/sun/media/sound/SF2InstrumentRegion.class +INFO: Loading Class: com/sun/media/sound/SF2Layer.class +INFO: Loading Class: com/sun/media/sound/SF2LayerRegion.class +INFO: Loading Class: com/sun/media/sound/SF2Modulator.class +INFO: Loading Class: com/sun/media/sound/SF2Region.class +INFO: Loading Class: com/sun/media/sound/SF2Sample.class +INFO: Loading Class: com/sun/media/sound/SF2Soundbank.class +INFO: Loading Class: com/sun/media/sound/SF2SoundbankReader.class +INFO: Loading Class: com/sun/media/sound/SMFParser.class +INFO: Loading Class: com/sun/media/sound/SimpleInstrument$1.class +INFO: Loading Class: com/sun/media/sound/SimpleInstrument$SimpleInstrumentPart.class +INFO: Loading Class: com/sun/media/sound/SimpleInstrument.class +INFO: Loading Class: com/sun/media/sound/SimpleSoundbank.class +INFO: Loading Class: com/sun/media/sound/SoftAbstractResampler$ModelAbstractResamplerStream.class +INFO: Loading Class: com/sun/media/sound/SoftAbstractResampler.class +INFO: Loading Class: com/sun/media/sound/SoftAudioBuffer.class +INFO: Loading Class: com/sun/media/sound/SoftAudioProcessor.class +INFO: Loading Class: com/sun/media/sound/SoftAudioPusher.class +INFO: Loading Class: com/sun/media/sound/SoftChannel$1.class +INFO: Loading Class: com/sun/media/sound/SoftChannel$2.class +INFO: Loading Class: com/sun/media/sound/SoftChannel$3.class +INFO: Loading Class: com/sun/media/sound/SoftChannel$4.class +INFO: Loading Class: com/sun/media/sound/SoftChannel$5.class +INFO: Loading Class: com/sun/media/sound/SoftChannel$MidiControlObject.class +INFO: Loading Class: com/sun/media/sound/SoftChannel.class +INFO: Loading Class: com/sun/media/sound/SoftChannelProxy.class +INFO: Loading Class: com/sun/media/sound/SoftChorus$LFODelay.class +INFO: Loading Class: com/sun/media/sound/SoftChorus$VariableDelay.class +INFO: Loading Class: com/sun/media/sound/SoftChorus.class +INFO: Loading Class: com/sun/media/sound/SoftControl.class +INFO: Loading Class: com/sun/media/sound/SoftCubicResampler.class +INFO: Loading Class: com/sun/media/sound/SoftEnvelopeGenerator.class +INFO: Loading Class: com/sun/media/sound/SoftFilter.class +INFO: Loading Class: com/sun/media/sound/SoftInstrument.class +INFO: Loading Class: com/sun/media/sound/SoftJitterCorrector$JitterStream$1.class +INFO: Loading Class: com/sun/media/sound/SoftJitterCorrector$JitterStream.class +INFO: Loading Class: com/sun/media/sound/SoftJitterCorrector.class +INFO: Loading Class: com/sun/media/sound/SoftLanczosResampler.class +INFO: Loading Class: com/sun/media/sound/SoftLimiter.class +INFO: Loading Class: com/sun/media/sound/SoftLinearResampler.class +INFO: Loading Class: com/sun/media/sound/SoftLinearResampler2.class +INFO: Loading Class: com/sun/media/sound/SoftLowFrequencyOscillator.class +INFO: Loading Class: com/sun/media/sound/SoftMainMixer$1.class +INFO: Loading Class: com/sun/media/sound/SoftMainMixer$2.class +INFO: Loading Class: com/sun/media/sound/SoftMainMixer$SoftChannelMixerContainer.class +INFO: Loading Class: com/sun/media/sound/SoftMainMixer.class +INFO: Loading Class: com/sun/media/sound/SoftMidiAudioFileReader.class +INFO: Loading Class: com/sun/media/sound/SoftMixingClip$1.class +INFO: Loading Class: com/sun/media/sound/SoftMixingClip.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$1.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$ApplyReverb.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$AudioFloatInputStreamResampler.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$Balance.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$ChorusSend.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$Gain.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$Mute.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$Pan.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine$ReverbSend.class +INFO: Loading Class: com/sun/media/sound/SoftMixingDataLine.class +INFO: Loading Class: com/sun/media/sound/SoftMixingMainMixer$1.class +INFO: Loading Class: com/sun/media/sound/SoftMixingMainMixer.class +INFO: Loading Class: com/sun/media/sound/SoftMixingMixer$Info.class +INFO: Loading Class: com/sun/media/sound/SoftMixingMixer.class +INFO: Loading Class: com/sun/media/sound/SoftMixingMixerProvider.class +INFO: Loading Class: com/sun/media/sound/SoftMixingSourceDataLine$1.class +INFO: Loading Class: com/sun/media/sound/SoftMixingSourceDataLine$NonBlockingFloatInputStream.class +INFO: Loading Class: com/sun/media/sound/SoftMixingSourceDataLine.class +INFO: Loading Class: com/sun/media/sound/SoftPerformer$1.class +INFO: Loading Class: com/sun/media/sound/SoftPerformer$2.class +INFO: Loading Class: com/sun/media/sound/SoftPerformer$KeySortComparator.class +INFO: Loading Class: com/sun/media/sound/SoftPerformer.class +INFO: Loading Class: com/sun/media/sound/SoftPointResampler.class +INFO: Loading Class: com/sun/media/sound/SoftProcess.class +INFO: Loading Class: com/sun/media/sound/SoftProvider.class +INFO: Loading Class: com/sun/media/sound/SoftReceiver.class +INFO: Loading Class: com/sun/media/sound/SoftResampler.class +INFO: Loading Class: com/sun/media/sound/SoftResamplerStreamer.class +INFO: Loading Class: com/sun/media/sound/SoftReverb$AllPass.class +INFO: Loading Class: com/sun/media/sound/SoftReverb$Comb.class +INFO: Loading Class: com/sun/media/sound/SoftReverb$Delay.class +INFO: Loading Class: com/sun/media/sound/SoftReverb.class +INFO: Loading Class: com/sun/media/sound/SoftShortMessage.class +INFO: Loading Class: com/sun/media/sound/SoftSincResampler.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$1.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$2.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$3.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$4.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$Info.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$WeakAudioStream$1.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer$WeakAudioStream.class +INFO: Loading Class: com/sun/media/sound/SoftSynthesizer.class +INFO: Loading Class: com/sun/media/sound/SoftTuning.class +INFO: Loading Class: com/sun/media/sound/SoftVoice$1.class +INFO: Loading Class: com/sun/media/sound/SoftVoice$2.class +INFO: Loading Class: com/sun/media/sound/SoftVoice$3.class +INFO: Loading Class: com/sun/media/sound/SoftVoice$4.class +INFO: Loading Class: com/sun/media/sound/SoftVoice.class +INFO: Loading Class: com/sun/media/sound/StandardMidiFileReader.class +INFO: Loading Class: com/sun/media/sound/StandardMidiFileWriter.class +INFO: Loading Class: com/sun/media/sound/SunCodec.class +INFO: Loading Class: com/sun/media/sound/SunFileReader.class +INFO: Loading Class: com/sun/media/sound/SunFileWriter$NoCloseInputStream.class +INFO: Loading Class: com/sun/media/sound/SunFileWriter.class +INFO: Loading Class: com/sun/media/sound/Toolkit.class +INFO: Loading Class: com/sun/media/sound/UlawCodec$UlawCodecStream.class +INFO: Loading Class: com/sun/media/sound/UlawCodec.class +INFO: Loading Class: com/sun/media/sound/WaveExtensibleFileReader$GUID.class +INFO: Loading Class: com/sun/media/sound/WaveExtensibleFileReader.class +INFO: Loading Class: com/sun/media/sound/WaveFileFormat.class +INFO: Loading Class: com/sun/media/sound/WaveFileReader.class +INFO: Loading Class: com/sun/media/sound/WaveFileWriter.class +INFO: Loading Class: com/sun/media/sound/WaveFloatFileReader.class +INFO: Loading Class: com/sun/media/sound/WaveFloatFileWriter$NoCloseOutputStream.class +INFO: Loading Class: com/sun/media/sound/WaveFloatFileWriter.class +INFO: Loading Class: com/sun/naming/internal/FactoryEnumeration.class +INFO: Loading Class: com/sun/naming/internal/NamedWeakReference.class +INFO: Loading Class: com/sun/naming/internal/ResourceManager$AppletParameter.class +INFO: Loading Class: com/sun/naming/internal/ResourceManager.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$1.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$2.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$3.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$4.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$5.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$6.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$InputStreamEnumeration$1.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12$InputStreamEnumeration.class +INFO: Loading Class: com/sun/naming/internal/VersionHelper12.class +INFO: Loading Class: com/sun/net/httpserver/Authenticator$Failure.class +INFO: Loading Class: com/sun/net/httpserver/Authenticator$Result.class +INFO: Loading Class: com/sun/net/httpserver/Authenticator$Retry.class +INFO: Loading Class: com/sun/net/httpserver/Authenticator$Success.class +INFO: Loading Class: com/sun/net/httpserver/Authenticator.class +INFO: Loading Class: com/sun/net/httpserver/BasicAuthenticator.class +INFO: Loading Class: com/sun/net/httpserver/Filter$Chain.class +INFO: Loading Class: com/sun/net/httpserver/Filter.class +INFO: Loading Class: com/sun/net/httpserver/Headers.class +INFO: Loading Class: com/sun/net/httpserver/HttpContext.class +INFO: Loading Class: com/sun/net/httpserver/HttpExchange.class +INFO: Loading Class: com/sun/net/httpserver/HttpHandler.class +INFO: Loading Class: com/sun/net/httpserver/HttpPrincipal.class +INFO: Loading Class: com/sun/net/httpserver/HttpServer.class +INFO: Loading Class: com/sun/net/httpserver/HttpsConfigurator.class +INFO: Loading Class: com/sun/net/httpserver/HttpsExchange.class +INFO: Loading Class: com/sun/net/httpserver/HttpsParameters.class +INFO: Loading Class: com/sun/net/httpserver/HttpsServer.class +INFO: Loading Class: com/sun/net/httpserver/package-info.class +INFO: Loading Class: com/sun/net/httpserver/spi/HttpServerProvider$1.class +INFO: Loading Class: com/sun/net/httpserver/spi/HttpServerProvider.class +INFO: Loading Class: com/sun/net/httpserver/spi/package-info.class +INFO: Loading Class: com/sun/net/ssl/HostnameVerifier.class +INFO: Loading Class: com/sun/net/ssl/HttpsURLConnection$1.class +INFO: Loading Class: com/sun/net/ssl/HttpsURLConnection.class +INFO: Loading Class: com/sun/net/ssl/KeyManager.class +INFO: Loading Class: com/sun/net/ssl/KeyManagerFactory$1.class +INFO: Loading Class: com/sun/net/ssl/KeyManagerFactory.class +INFO: Loading Class: com/sun/net/ssl/KeyManagerFactorySpi.class +INFO: Loading Class: com/sun/net/ssl/KeyManagerFactorySpiWrapper.class +INFO: Loading Class: com/sun/net/ssl/SSLContext.class +INFO: Loading Class: com/sun/net/ssl/SSLContextSpi.class +INFO: Loading Class: com/sun/net/ssl/SSLContextSpiWrapper.class +INFO: Loading Class: com/sun/net/ssl/SSLPermission.class +INFO: Loading Class: com/sun/net/ssl/SSLSecurity.class +INFO: Loading Class: com/sun/net/ssl/TrustManager.class +INFO: Loading Class: com/sun/net/ssl/TrustManagerFactory$1.class +INFO: Loading Class: com/sun/net/ssl/TrustManagerFactory.class +INFO: Loading Class: com/sun/net/ssl/TrustManagerFactorySpi.class +INFO: Loading Class: com/sun/net/ssl/TrustManagerFactorySpiWrapper.class +INFO: Loading Class: com/sun/net/ssl/X509KeyManager.class +INFO: Loading Class: com/sun/net/ssl/X509KeyManagerComSunWrapper.class +INFO: Loading Class: com/sun/net/ssl/X509KeyManagerJavaxWrapper.class +INFO: Loading Class: com/sun/net/ssl/X509TrustManager.class +INFO: Loading Class: com/sun/net/ssl/X509TrustManagerComSunWrapper.class +INFO: Loading Class: com/sun/net/ssl/X509TrustManagerJavaxWrapper.class +INFO: Loading Class: com/sun/net/ssl/internal/www/protocol/https/DelegateHttpsURLConnection.class +INFO: Loading Class: com/sun/net/ssl/internal/www/protocol/https/Handler.class +INFO: Loading Class: com/sun/net/ssl/internal/www/protocol/https/HttpsURLConnectionOldImpl.class +INFO: Loading Class: com/sun/net/ssl/internal/www/protocol/https/VerifierWrapper.class +INFO: Loading Class: com/sun/nio/file/ExtendedCopyOption.class +INFO: Loading Class: com/sun/nio/file/ExtendedOpenOption.class +INFO: Loading Class: com/sun/nio/file/ExtendedWatchEventModifier.class +INFO: Loading Class: com/sun/nio/file/SensitivityWatchEventModifier.class +INFO: Loading Class: com/sun/nio/sctp/AbstractNotificationHandler.class +INFO: Loading Class: com/sun/nio/sctp/Association.class +INFO: Loading Class: com/sun/nio/sctp/AssociationChangeNotification$AssocChangeEvent.class +INFO: Loading Class: com/sun/nio/sctp/AssociationChangeNotification.class +INFO: Loading Class: com/sun/nio/sctp/HandlerResult.class +INFO: Loading Class: com/sun/nio/sctp/IllegalReceiveException.class +INFO: Loading Class: com/sun/nio/sctp/IllegalUnbindException.class +INFO: Loading Class: com/sun/nio/sctp/InvalidStreamException.class +INFO: Loading Class: com/sun/nio/sctp/MessageInfo.class +INFO: Loading Class: com/sun/nio/sctp/Notification.class +INFO: Loading Class: com/sun/nio/sctp/NotificationHandler.class +INFO: Loading Class: com/sun/nio/sctp/PeerAddressChangeNotification$AddressChangeEvent.class +INFO: Loading Class: com/sun/nio/sctp/PeerAddressChangeNotification.class +INFO: Loading Class: com/sun/nio/sctp/SctpChannel.class +INFO: Loading Class: com/sun/nio/sctp/SctpMultiChannel.class +INFO: Loading Class: com/sun/nio/sctp/SctpServerChannel.class +INFO: Loading Class: com/sun/nio/sctp/SctpSocketOption.class +INFO: Loading Class: com/sun/nio/sctp/SctpStandardSocketOptions$InitMaxStreams.class +INFO: Loading Class: com/sun/nio/sctp/SctpStandardSocketOptions.class +INFO: Loading Class: com/sun/nio/sctp/SendFailedNotification.class +INFO: Loading Class: com/sun/nio/sctp/ShutdownNotification.class +INFO: Loading Class: com/sun/nio/sctp/package-info.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/Constants.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/ExceptionConstants.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/Repository.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/AccessFlags.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Attribute.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/AttributeReader.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ClassFormatException.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ClassParser.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Code.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/CodeException.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Constant.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantCP.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantClass.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantDouble.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantFloat.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantInteger.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantLong.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantObject.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantPool.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantString.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ConstantValue.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Deprecated.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/ExceptionTable.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Field.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/InnerClass.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/InnerClasses.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/JavaClass.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/LineNumber.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/LineNumberTable.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/LocalVariable.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/LocalVariableTypeTable.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Method.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Node.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/PMGClass.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Signature$MyByteArrayInputStream.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Signature.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/SourceFile.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/StackMap.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/StackMapEntry.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/StackMapType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Synthetic.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Unknown.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Utility$JavaReader.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Utility$JavaWriter.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Utility.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/classfile/Visitor.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/AALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/AASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ACONST_NULL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ANEWARRAY.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ARETURN.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ATHROW.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/AllocationInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ArrayInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ArrayType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BIPUSH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BREAKPOINT.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BasicType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BranchHandle.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/BranchInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/CALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/CASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/CHECKCAST.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/CPInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ClassGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ClassGenException.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ClassObserver.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/CompoundInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ConstantPoolGen$Index.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ConversionInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/D2F.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/D2I.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/D2L.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DADD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DCMPG.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DCMPL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DCONST.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DDIV.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DLOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DMUL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DNEG.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DREM.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DRETURN.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DSTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DSUB.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DUP.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DUP2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DUP2_X1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DUP2_X2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DUP_X1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/DUP_X2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/EmptyVisitor.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ExceptionThrower.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/F2D.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/F2I.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/F2L.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FADD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FCMPG.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FCMPL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FCONST.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FDIV.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FLOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FMUL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FNEG.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FREM.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FRETURN.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FSTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FSUB.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FieldGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FieldInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FieldObserver.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/FieldOrMethod.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/GETFIELD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/GETSTATIC.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/GOTO.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/GOTO_W.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/GotoInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/I2B.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/I2C.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/I2D.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/I2F.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/I2L.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/I2S.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IADD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IAND.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ICONST.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IDIV.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFEQ.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFGE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFGT.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFLE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFLT.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFNE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFNONNULL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IFNULL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IINC.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ILOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IMPDEP1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IMPDEP2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IMUL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/INEG.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/INSTANCEOF.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IOR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IREM.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IRETURN.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ISHL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ISHR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ISTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ISUB.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IUSHR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IXOR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IfInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/IndexedInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/Instruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionComparator$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionComparator.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionConstants$Clinit.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionConstants.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionFactory$MethodObject.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionFactory.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionHandle.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionList$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionList.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionListObserver.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InstructionTargeter.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/InvokeInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/JSR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/JSR_W.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/JsrInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/L2D.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/L2F.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/L2I.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LADD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LAND.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LCMP.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LCONST.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LDC.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LDC2_W.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LDC_W.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LDIV.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LLOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LMUL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LNEG.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LOR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LREM.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LRETURN.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LSHL.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LSHR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LSTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LSUB.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LUSHR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LXOR.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LineNumberGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LoadClass.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LoadInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LocalVariableGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MONITORENTER.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MONITOREXIT.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MethodGen$BranchStack.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MethodGen$BranchTarget.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MethodGen.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/MethodObserver.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/NEW.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/NEWARRAY.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/NOP.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/NamedAndTyped.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ObjectType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/POP.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/POP2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/PUSH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/PUTFIELD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/PUTSTATIC.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/PopInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/PushInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/RET.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/RETURN.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ReferenceType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ReturnInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/ReturnaddressType.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/SALOAD.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/SASTORE.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/SIPUSH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/SWAP.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/SWITCH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/Select.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/StackConsumer.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/StackInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/StackProducer.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/StoreInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/TABLESWITCH.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/TargetLostException.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/Type$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/Type$2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/Type.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/TypedInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/generic/Visitor.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/AttributeHTML.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/BCELFactory.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/BCELifier.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ByteSequence$ByteArrayStream.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ByteSequence.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/Class2HTML.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassLoader.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassLoaderRepository.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$ClassFile.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$Dir$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$Dir.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$PathEntry.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$Zip$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath$Zip.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassPath.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassQueue.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassSet.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassStack.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ClassVector.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/CodeHTML.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/ConstantHTML.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/InstructionFinder$CodeConstraint.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/InstructionFinder.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/JavaWrapper.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/MethodHTML.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/Repository.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$1.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$10.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$2.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$3.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$4.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$5.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$6.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$7.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$8.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport$9.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SecuritySupport.class +INFO: Loading Class: com/sun/org/apache/bcel/internal/util/SyntheticRepository.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/CharacterArrayCharacterIterator.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/CharacterIterator.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/RE.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/RECompiler$RERange.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/RECompiler.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/REDebugCompiler.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/REProgram.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/RESyntaxException.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/RETest.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/RETestCase.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/REUtil.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/ReaderCharacterIterator.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/StreamCharacterIterator.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/StringCharacterIterator.class +INFO: Loading Class: com/sun/org/apache/regexp/internal/recompile.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/Version.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/XalanConstants.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/extensions/ExpressionContext.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltCommon.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltDatetime.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltDynamic.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltMath.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltSets.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/ExsltStrings.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/Extensions.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/lib/NodeInfo.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLMessages.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_en.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/templates/Constants.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/ConfigurationError.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/FactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/FeatureManager$Feature.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/FeatureManager$State.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/FeatureManager.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/FeaturePropertyBase$State.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/FeaturePropertyBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/ObjectFactory.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$10.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$2.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$3.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$4.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$5.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$6.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$7.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$8.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport$9.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/SecuritySupport.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/XMLSecurityManager$Limit.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/XMLSecurityManager$NameMap.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/XMLSecurityManager$State.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager$Property.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xslt/Process.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/CollatorFactory.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/DOM.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/DOMCache.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/DOMEnhancedForDTM.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/NodeIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/ProcessorVersion.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/StripFilter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/Translet.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/TransletException.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt$Option.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt$OptionMatcher.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOptsException.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/IllegalArgumentException.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/MissingOptArgException.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AlternativePattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AncestorPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyImports.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ArgumentList.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Attribute.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValue.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValueTemplate.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/BinOpExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CUP$XPathParser$actions.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CastCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CastExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CeilingCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Choose.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Closure.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Comment.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CompilerException.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ConcatCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ContainsCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CopyOf.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/CurrentCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/DecimalFormatting.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/DocumentCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ElementAvailableCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/EqualityExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Expression.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Fallback.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FloorCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ForEach.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FormatNumberCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall$JavaType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/GenerateIdCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/IdKeyPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/IdPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/If.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/IllegalCharException.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Import.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Include.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Instruction.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/IntExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Key.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/KeyCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/KeyPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LangCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LastCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LocalNameCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LocationPathPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/LogicalExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Message.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NameBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NameCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceAlias.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceUriCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NodeTest.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NotCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Number.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/NumberCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Otherwise.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Output.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Param.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Pattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstructionPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/QName.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/RealExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/RelationalExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/RelativeLocationPath.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/RelativePathPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/RoundCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/SimpleAttributeValue.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/SourceLoader.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/StartsWithCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Step.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/StringCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Template.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Text.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/TopLevelElement.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/TransletOutput.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/UnaryOpExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/UnionPathExpr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/UnparsedEntityUriCall.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/UnresolvedRef.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/UnsupportedElement.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/UseAttributeSets.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/ValueOf.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRefBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/When.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace$WhitespaceRule.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/XPathLexer.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/sym.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/AttributeSetMethodGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/BooleanType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/CompareGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/FilterGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/IntType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/InternalError.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MarkerInstruction.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MatchGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator$Chunk.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator$LocalVariableRegistry.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/MultiHashtable.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NamedMethodGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeCounterGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSetType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordFactGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/NumberType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkEnd.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkStart.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ReferenceType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/RtMethodGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/SlotAllocator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringStack.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/compiler/util/VoidType.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/AbsoluteIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter$DefaultAnyNodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/ArrayNodeListIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/BitArray.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/CachedNodeListIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/ClonedNodeListIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/CollatorFactoryBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListFilter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/DOMBuilder.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/DOMWSFilter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache$CachedDocument.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/EmptyFilter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/ExtendedSAX.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/Filter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/FilterIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/FilteredStepIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex$KeyIndexIterator$KeyIndexHeapNode.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex$KeyIndexIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/LoadDocument.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MatchingIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM$AxisIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM$NodeValueIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultiValuedNodeHeapIterator$HeapNode.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultiValuedNodeHeapIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter$DefaultMultipleNodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/NodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/NodeIteratorBase.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/NthIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl$NamespaceAttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl$NamespaceChildrenIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl$NamespaceWildcardIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl$NodeValueIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl$TypedNamespaceIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl$SimpleIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl$SingletonIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter$DefaultSingleNodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SingletonIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SortSettings.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/SortingIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/StepIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/StripWhitespaceFilter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator$LookAheadIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/Attributes.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary$2.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary$3.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/Constants.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/InternalRuntimeError.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/MessageHandler.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/Node.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/Operators.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/Parameter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/StringValueHandler.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/output/OutputBuffer.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/output/StringOutputBuffer.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/DOM2SAX.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/DOM2TO.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/OutputSettings.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter$SAXLocation.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXEventWriter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXStreamWriter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/StAXEvent2SAX$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/StAXEvent2SAX.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl$TransletClassLoader.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl$1.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl$PIParamWrapper.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerHandlerImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl$MessageHandler.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/Util.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.class +INFO: Loading Class: com/sun/org/apache/xalan/internal/xsltc/util/IntegerArray.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/AttrImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/AttrNSImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/AttributeMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/CDATASectionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/CharacterDataImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/CharacterDataImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ChildNode.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/CommentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMErrorImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMImplementationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMImplementationListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMImplementationSourceImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMInputImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMLocatorImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMNormalizer$XMLAttributesProxy.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMNormalizer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMOutputImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMStringListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DOMXSImplementationSourceImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeepNodeListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredAttrImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredAttrNSImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredCDATASectionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredCommentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredDOMImplementationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl$IntVector.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl$RefCount.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredDocumentTypeImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredElementDefinitionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredElementImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredEntityImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredNode.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredNotationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredProcessingInstructionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DeferredTextImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DocumentFragmentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DocumentImpl$EnclosingAttr.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DocumentImpl$LEntry.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DocumentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/DocumentTypeImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ElementDefinitionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ElementImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ElementNSImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/EntityImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/LCount.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/NodeImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/NodeIteratorImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/NodeListCache.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/NotationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/PSVIAttrNSImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/PSVIDOMImplementationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/PSVIDocumentImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ParentNode$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ParentNode$UserDataRecord.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ParentNode.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/ProcessingInstructionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/RangeExceptionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/RangeImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/TextImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/TreeWalkerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/events/EventImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/dom/events/MutationEventImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/Constants$ArrayEnumeration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/Constants.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/ExternalSubsetResolver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/PropertyManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/RevalidationHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/Version.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XML11DTDScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl$NS11ContentDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XML11NamespaceBinder.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl$Driver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl$Element.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl$ElementStack.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl$ElementStack2.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl$FragmentContentDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl$ContentDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl$DTDDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl$PrologDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl$TrailingMiscDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl$XMLDeclDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityDescription.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityManager$CharacterBuffer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityManager$CharacterBufferPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityManager$RewindableInputStream.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityScanner$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLErrorReporter$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLErrorReporter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl$NSContentDriver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLNamespaceBinder.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLScanner$NameType.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLScanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLStreamFilterImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/BalancedDTDGrammar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar$ChildrenList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammarBucket.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDProcessor.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XML11NSDTDValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLAttributeDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec$Provider.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDDescription.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDLoader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDProcessor.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidatorFilter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLElementDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLEntityDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLNSDTDValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLNotationDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/XMLSimpleType.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/CMAny.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/CMBinOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/CMLeaf.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/CMNode.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/CMStateSet.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/CMUniOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/ContentModelValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/DFAContentModel.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/MixedContentModel.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dtd/models/SimpleContentModel.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/DVFactoryException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/DatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeFacetException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeValueException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/ValidatedInfo.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/ValidationContext.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/XSFacets.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/XSSimpleType.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/DTDDVFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/ENTITYDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/IDDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/IDREFDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/ListDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/NMTOKENDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/NOTATIONDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/StringDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11DTDDVFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDREFDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11NMTOKENDatatypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/util/Base64.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/util/ByteListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/util/HexBin.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV$DateTimeData.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/AnyAtomicDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/AnySimpleDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/AnyURIDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV$XBase64.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/BaseDVFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/BaseSchemaDVFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/BooleanDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DateDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DateTimeDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DayDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DayTimeDurationDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV$XDecimal.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV$XDouble.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/DurationDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/EntityDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/ExtendedSchemaDVFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV$XFloat.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/FullDVFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV$XHex.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/IDDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/IDREFDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/IntegerDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV$ListData.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDayDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/PrecisionDecimalDV$XPrecisionDecimal.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/PrecisionDecimalDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV$XQName.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDVFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDateTimeException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/StringDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/TimeDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/TypeValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/UnionDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$2.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$3.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$4.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$AbstractObjectList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$ValidationContextImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$XSFacetImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl$XSMVFacetImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDelegate.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/YearDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDurationDV.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/io/ASCIIReader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/io/MalformedByteSequenceException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/io/UCSReader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_de.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_es.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_fr.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_it.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ja.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ko.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_sv.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/validation/EntityState.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/validation/ValidationManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/validation/ValidationState.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$Axis.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$LocationPath.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$NodeTest.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$Scanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$Step.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath$Tokens.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPath.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/XPathException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/BMPattern.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/CaseInsensitiveMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Match.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$CharOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$ChildOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$ConditionOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$ModifierOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$RangeOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$StringOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op$UnionOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Op.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/ParseException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RangeToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser$ReferencePosition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression$CharArrayTarget.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression$CharacterIteratorTarget.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression$ClosureContext.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression$Context.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression$ExpressionTarget.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression$StringTarget.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$CharToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$ClosureToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$ConcatToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$ConditionToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$FixedStringContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$ModifierToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$ParenToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$StringToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token$UnionToken.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar$BuiltinAttrDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar$BuiltinSchemaGrammar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar$Schema4Annotations.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar$XSAnyType.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaNamespaceSupport.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SchemaSymbols.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler$OneSubGroup.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader$LocationArray.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$KeyRefValueStore.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$KeyValueStore.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$LocalIDKey.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$ShortVector.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$UniqueValueStore.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$ValueStoreBase.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$ValueStoreCache.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$XPathMatcherStack.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator$XSIErrorReporter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSAnnotationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSAttributeDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSAttributeGroupDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSAttributeUseImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSConstraints$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSConstraints.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSDDescription.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSDeclarationPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSElementDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSGrammarBucket.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSGroupDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSImplementationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSLoaderImpl$XSGrammarMerger.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSLoaderImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSModelGroupImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl$XSNamespaceItemListIterator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSNotationDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSParticleDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/XSWildcardDecl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/Field$Matcher.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/Field$XPath.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/Field.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/FieldActivator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/IdentityConstraint.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/KeyRef.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/Selector$Matcher.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/Selector$XPath.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/Selector.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/UniqueOrKey.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/ValueStore.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/identity/XPathMatcher.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/CMBuilder.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSCMBinOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSCMLeaf.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSCMRepeatingLeaf.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSCMUniOp.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSCMValidator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM$Occurence.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/models/XSEmptyCM.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/AttrImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultDocument.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultElement.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultNode.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultText.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultXMLDocumentHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/ElementImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/NamedNodeMapImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/NodeImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMImplementation.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser$BooleanStack.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/opti/TextImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/Container.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/LargeContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/OneAttr.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/SchemaContentHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/SmallContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/StAXSchemaParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAnnotationInfo.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractIDConstraintTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser$ParticleArray.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser$FacetInfo.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeGroupTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser$ComplexTypeRecoverableError.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDElementTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDGroupTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler$SAX2XNIUtil.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler$XSAnnotationGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler$XSDKey.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDKeyrefTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDNotationTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDSimpleTypeTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDUniqueOrKeyTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDWildcardTraverser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDocumentInfo.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/LSInputListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/ObjectListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/ShortListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/SimpleLocator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/StringListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XInt.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XIntPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSInputSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMap4Types.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl$1$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl$XSNamedMapEntry.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl$XSObjectListIterator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPConstants.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent$2.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent$3.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent$DraconianErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent$SAX2XNI.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent$XNI2SAX.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl$JAXPSAXParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/SchemaValidatorConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/TeeXMLDocumentFilterImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/UnparsedEntityHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/DatatypeFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/DurationDayTimeImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl$DurationStream.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/DurationYearMonthImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl$Parser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/DOMDocumentHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultAugmentor.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultBuilder.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper$DOMNamespaceContext.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/DraconianErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/EmptyXMLSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ErrorHandlerAdaptor.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ReadOnlyGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/SimpleXMLSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool$Entry.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool$SoftGrammarReference.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/Util.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl$ResolutionForwarder.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl$XMLSchemaTypeInfoProvider.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHelper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/WeakReferenceXMLSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/WrappedSAXException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory$XMLGrammarPoolImplExtension.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory$XMLGrammarPoolWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/jaxp/validation/XSGrammarPoolContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser$Abort.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser$2.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser$AttributesProxy.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser$LocatorProxy.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/AbstractXMLDocumentParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/BasicParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/CachingParserPool$ShadowedGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/CachingParserPool$SynchronizedGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/CachingParserPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/DOMParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/DOMParserImpl$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/DOMParserImpl$AbortHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/DTDParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/IntegratedParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/SAXParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/StandardParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XML11Configurable.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XML11Configuration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XMLGrammarCachingConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XMLParser.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/parsers/XPointerParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/AttributesProxy.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/AugmentationsImpl$AugmentationsItemsContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/AugmentationsImpl$LargeContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/AugmentationsImpl$SmallContainer$SmallContainerKeyEnumeration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/AugmentationsImpl$SmallContainer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/AugmentationsImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DOMEntityResolverWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper$DOMErrorTypeMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DOMInputSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DOMUtil$ThrowableMethods.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DOMUtil.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DefaultErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/DraconianErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/EncodingMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/EntityResolver2Wrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/EntityResolverWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/ErrorHandlerProxy.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/FeatureState.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/HTTPInputSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/IntStack.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/JAXPNamespaceContextWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/LocatorProxy.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/LocatorWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/MessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/NamespaceContextWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/NamespaceSupport$IteratorPrefixes.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/NamespaceSupport$Prefixes.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/NamespaceSupport.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/PrimeNumberSequenceGenerator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/PropertyState.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SAX2XNI.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SAXInputSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SAXLocatorWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SecurityManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/ShadowedSymbolTable.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/StAXInputSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/StAXLocationWrapper.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/Status.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SymbolHash$Entry.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SymbolHash.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SymbolTable$Entry.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SymbolTable.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/SynchronizedSymbolTable.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/TeeXMLDocumentFilterImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/URI$MalformedURIException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/URI.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XML11Char.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLAttributesImpl$Attribute.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLAttributesIteratorImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLChar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLEntityDescriptionImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLErrorCode.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl$Entry.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLInputSourceAdaptor.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLResourceIdentifierImpl.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLStringBuffer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/util/XMLSymbols.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/ConfigurationError.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/ObjectFactory.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$2.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$3.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$4.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$5.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$6.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$7.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$8.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport$9.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/SecuritySupport.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer$NameMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityManager$Limit.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityManager$NameMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityManager$State.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager$Property.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager$State.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/MultipleScopeNamespaceSupport.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$2.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$3.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$4.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$5.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$6.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$7.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport$8.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XInclude11TextReader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler$Notation.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler$UnparsedEntity.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XIncludeNamespaceSupport.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XPointerElementHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XPointerFramework.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xinclude/XPointerSchema.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/Augmentations.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/NamespaceContext.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/QName.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLAttributes.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLDTDContentModelHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLDTDHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLDocumentFragmentHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLDocumentHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLLocator.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLResourceIdentifier.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XMLString.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/XNIException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/Grammar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/XMLDTDDescription.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarDescription.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarLoader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/XMLSchemaDescription.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/grammars/XSGrammar.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLComponent.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLConfigurationException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelFilter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDTDFilter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDTDSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentFilter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentScanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLEntityResolver.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLParseException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xni/parser/XMLPullParserConfiguration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer$Scanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer$Tokens.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/ShortHandPointer.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerHandler$1.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerHandler$Scanner.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerHandler$Tokens.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerPart.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xpointer/XPointerProcessor.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/AttributePSVI.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/ElementPSVI.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/ItemPSVI.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/LSInputList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/PSVIProvider.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/ShortList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/StringList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSAnnotation.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSAttributeGroupDefinition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSAttributeUse.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSComplexTypeDefinition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSConstants.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSException.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSFacet.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSIDCDefinition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSImplementation.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSLoader.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSModel.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSModelGroup.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSModelGroupDefinition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSMultiValueFacet.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSNamedMap.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSNamespaceItem.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSNamespaceItemList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSNotationDeclaration.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSObject.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSObjectList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSParticle.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSSimpleTypeDefinition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSTerm.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSTypeDefinition.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/XSWildcard.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/ByteList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/ObjectList.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/XSDateTime.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/XSDecimal.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/XSDouble.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/XSFloat.class +INFO: Loading Class: com/sun/org/apache/xerces/internal/xs/datatypes/XSQName.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/Axis.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTM.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMAxisIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMAxisTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMDOMException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMManager$ConfigurationError.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMManager.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/DTMWSFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray$ChunksVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/CoroutineManager.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/CustomStringPool.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIteratorBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$AncestorIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$AttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$ChildrenIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$DescendantIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$FollowingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$FollowingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$InternalAxisIteratorBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$NamespaceAttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$NamespaceChildrenIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$NamespaceIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$NthDescendantIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$ParentIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$PrecedingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$PrecedingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$RootIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$SingletonIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedAncestorIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedAttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedChildrenIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedDescendantIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedFollowingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedFollowingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedNamespaceIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedPrecedingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedPrecedingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedRootIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators$TypedSingletonIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$AllFromNodeTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$AllFromRootTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$AncestorOrSelfTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$AncestorTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$AttributeTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$ChildTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$DescendantFromRootTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$DescendantOrSelfFromRootTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$DescendantOrSelfTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$DescendantTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$FollowingSiblingTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$FollowingTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$IndexedDTMAxisTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$NamespaceDeclsTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$NamespaceTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$ParentTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$PrecedingAndAncestorTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$PrecedingSiblingTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$PrecedingTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$RootTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers$SelfTraverser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMDocumentImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap$DTMException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNodeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNodeListBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy$DTMNodeProxyImplementation.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMSafeStringPool.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMStringPool.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/DTMTreeWalker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/EmptyIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable$HashEntry.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/ExtendedType.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter$StopException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/NodeLocator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM$CharacterNodeHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$AncestorIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$AttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$ChildrenIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$DescendantIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$FollowingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$FollowingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$ParentIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$PrecedingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$PrecedingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedAncestorIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedAttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedChildrenIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedDescendantIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedFollowingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedFollowingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedPrecedingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedPrecedingSiblingIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedRootIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2$TypedSingletonIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.class +INFO: Loading Class: com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2RTFDTM.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_de.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_en.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_es.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_it.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_sv.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_HK.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xml/internal/res/XMLMessages.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/Catalog.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/CatalogEntry.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/CatalogException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/CatalogManager.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/Resolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/helpers/BootstrapResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/helpers/Debug.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/helpers/FileURL.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/helpers/Namespaces.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/helpers/PublicId.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/CatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogParser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/ExtendedXMLCatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/OASISXMLCatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogParser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/SAXParserHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/TR9401CatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/TextCatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/readers/XCatalogReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/Init$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/Init$2.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/Init.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/Algorithm.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/ClassLoaderUtils$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/ClassLoaderUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/JCEMapper$Algorithm.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac$IntegrityHmacMD5.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac$IntegrityHmacRIPEMD160.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac$IntegrityHmacSHA1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac$IntegrityHmacSHA256.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac$IntegrityHmacSHA384.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac$IntegrityHmacSHA512.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA$SignatureRSAMD5.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA$SignatureRSARIPEMD160.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA$SignatureRSASHA1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA$SignatureRSASHA256.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA$SignatureRSASHA384.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA$SignatureRSASHA512.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA$SHA256.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA$SignatureECDSASHA1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA$SignatureECDSASHA256.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA$SignatureECDSASHA384.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA$SignatureECDSASHA512.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/CanonicalizationException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/CanonicalizerSpi.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/InvalidCanonicalizerException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/helper/C14nHelper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11$XmlAttrStack$XmlsStackElement.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11$XmlAttrStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315$XmlAttrStack$XmlsStackElement.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315$XmlAttrStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclOmitComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315OmitComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerPhysical.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbEntry.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/SymbMap.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/c14n/implementations/UtfHelpper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/AbstractSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/AgreementMethod.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/CipherData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/CipherReference.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/CipherValue.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/DocumentSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/EncryptedData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/EncryptedKey.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/EncryptedType.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/EncryptionMethod.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/EncryptionProperties.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/EncryptionProperty.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/Reference.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/ReferenceList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/Serializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/Transforms.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$AgreementMethodImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$CipherDataImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$CipherReferenceImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$CipherValueImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$EncryptedDataImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$EncryptedKeyImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$EncryptedTypeImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$EncryptionMethodImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$EncryptionPropertiesImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$EncryptionPropertyImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$ReferenceListImpl$DataReference.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$ReferenceListImpl$KeyReference.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$ReferenceListImpl$ReferenceImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$ReferenceListImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory$TransformsImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher$Factory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipher.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipherInput.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLCipherParameters.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/encryption/XMLEncryptionException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/exceptions/AlgorithmAlreadyRegisteredException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/exceptions/Base64DecodingException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/exceptions/XMLSecurityException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/exceptions/XMLSecurityRuntimeException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/ContentHandlerAlreadyRegisteredException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/KeyInfo.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/KeyUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/KeyInfoContent.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/KeyInfoReference.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/KeyName.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/KeyValue.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/MgmtData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/PGPData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/SPKIData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/X509Data.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/keyvalues/KeyValueContent.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509DataContent.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Digest.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/InvalidKeyResolverException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver$ResolverIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolverSpi.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/DEREncodedKeyValueResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/DSAKeyValueResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/EncryptedKeyResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/KeyInfoReferenceResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/PrivateKeyResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RetrievalMethodResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SecretKeyResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SingleKeyResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509DigestResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509IssuerSerialResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver$StorageResolverIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/StorageResolverSpi.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/CertsInFilesystemDirectoryResolver$FilesystemIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/CertsInFilesystemDirectoryResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver$KeyStoreIterator$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver$KeyStoreIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver$InternalIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/InvalidDigestValueException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/InvalidSignatureValueException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/Manifest.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/MissingResourceFailureException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/NodeFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/ObjectContainer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/Reference$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/Reference$2$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/Reference$2.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/Reference.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/ReferenceNotInitializedException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/SignatureProperties.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/SignatureProperty.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/SignedInfo.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/XMLSignature.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/XMLSignatureException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/XMLSignatureInputDebugger.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/reference/ReferenceData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/reference/ReferenceNodeSetData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/reference/ReferenceOctetStreamData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/reference/ReferenceSubTreeData$DelayedNodeIterator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/signature/reference/ReferenceSubTreeData.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/ClassLoaderUtils$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/ClassLoaderUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/InvalidTransformException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/Transform.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/TransformParam.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/TransformSpi.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/TransformationException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/Transforms.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/FuncHere.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformBase64Decode.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14N11_WithComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusive.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NExclusiveWithComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformC14NWithComments.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature$EnvelopedNodeFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath$XPathNodeFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath2Filter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPointer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXSLT.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/implementations/XPath2NodeFilter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/params/InclusiveNamespaces.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/params/XPath2FilterContainer04.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/params/XPathContainer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/transforms/params/XPathFilterCHGPContainer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/Base64.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/Constants.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/DOMNamespaceContext.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ElementChecker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl$EmptyChecker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl$FullChecker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl$InternedNsChecker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ElementCheckerImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/ElementProxy.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/EncryptionConstants.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/EncryptionElementProxy.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/HelperNodeList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/I18n.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/IdResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/IgnoreAllErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/JDKXPathAPI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/JDKXPathFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/JavaUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/RFC2253Parser.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/Signature11ElementProxy.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/UnsyncBufferedOutputStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/XMLUtils$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/XMLUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/XPathAPI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/XPathFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/XalanXPathAPI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/XalanXPathFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverContext.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolverSpi.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverAnonymous.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.class +INFO: Loading Class: com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/DOMSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/ElementState.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/EncodingInfo$CharToByteConverterMethods.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/EncodingInfo$CharsetMethods.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/EncodingInfo.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/Encodings.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/HTMLSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/HTMLdtd.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/IndentPrinter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/LineSeparator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/Method.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/OutputFormat$DTD.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/OutputFormat$Defaults.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/OutputFormat.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/Printer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$2.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$3.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$4.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$5.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$6.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$7.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport$8.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SecuritySupport.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/Serializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SerializerFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/TextSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/XML11Serializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serialize/XMLSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/AttributesImplSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/CharInfo$CharKey.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/CharInfo.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/DOMSerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ElemContext.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ElemDesc.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/EmptySerializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/EncodingInfo$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/EncodingInfo$EncodingImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/EncodingInfo$InEncoding.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/EncodingInfo.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/Encodings$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/Encodings$EncodingInfos.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/Encodings.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ExtendedContentHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ExtendedLexicalHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/Method.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/NamespaceMappings$MappingRecord.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/NamespaceMappings.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory$1.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/OutputPropertyUtils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/SerializationHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/Serializer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/SerializerBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/SerializerConstants.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/SerializerFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/SerializerTrace.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/SerializerTraceWriter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToHTMLStream$Trie$Node.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToHTMLStream$Trie.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToHTMLStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToSAXHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToStream$BoolStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToStream$WritertoStringBuffer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToTextSAXHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToTextStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToUnknownStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/ToXMLStream.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/TransformStateSetter.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/TreeWalker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/Version.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/WriterChain.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/WriterToASCI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/AttList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/BoolStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/Messages.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/MsgKey.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ca.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_cs.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_de.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_en.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_es.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_fr.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_it.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ja.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ko.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_sv.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/StringToIntTable.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/SystemIDResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/URI$MalformedURIException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/URI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/Utils.class +INFO: Loading Class: com/sun/org/apache/xml/internal/serializer/utils/WrappedRuntimeException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/AttList.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/BoolStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/CharKey.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/Constants.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/DOM2Helper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/DOMBuilder.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/DOMHelper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/DOMOrder.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/DefaultErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ElemDesc.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/FastStringBuffer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/Hashtree2Node.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/IntStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/IntVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ListingErrorHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/LocaleUtility.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/MutableAttrListImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/NSInfo.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/NameSpace.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/NodeConsumer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/NodeVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ObjectPool.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ObjectStack.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ObjectVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/PrefixResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/PrefixResolverDefault.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/QName.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/RawCharacterHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/SAXSourceLocator.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/SerializableLocatorImpl.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StopParseException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StringBufferPool.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StringComparable.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StringToIntTable.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StringToStringTable.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StringToStringTableVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StringVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/StylesheetPIHandler.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/SuballocatedByteVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/SuballocatedIntVector.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/SystemIDResolver.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper$ThreadController$SafeThread.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper$ThreadController.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/TreeWalker.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/Trie$Node.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/Trie.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/URI$MalformedURIException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/URI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/UnImplNode.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/WrappedRuntimeException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/WrongParserException.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XML11Char.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLChar.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLCharacterRecognizer.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLReaderManager.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLString.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLStringDefault.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLStringFactory.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/XMLStringFactoryDefault.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/CharArrayWrapper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/IntArrayWrapper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/LongArrayWrapper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/StringArrayWrapper.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResourceBundle.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResourceBundleBase.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_de.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_en.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_es.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_fr.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_it.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_A.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HA.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HI.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_I.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_ko.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_sv.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xml/internal/utils/res/XResources_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/Arg.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/CachedXPathAPI.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/Expression.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/ExpressionNode.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/ExpressionOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/ExtensionsProvider.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/FoundIndex.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/NodeSet.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/NodeSetDTM.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/SourceTree.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/SourceTreeManager.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/VariableStack.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/WhitespaceStrippingElementMatcher.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPath.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathAPI.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathContext$XPathExpressionContext.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathContext.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathException.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathFactory.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathProcessorException.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathVisitable.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/XPathVisitor.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/AttributeIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/AxesWalker.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/BasicTestIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/ChildIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/ChildTestIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/ContextNodeList.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/DescendantIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/FilterExprIterator$filterExprOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/FilterExprIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple$filterExprOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/FilterExprWalker$filterExprOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/FilterExprWalker.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/IteratorPool.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/LocPathIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/NodeSequence$IteratorCache.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/NodeSequence.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/OneStepIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/PathComponent.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest$PredOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/RTFIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/ReverseAxesWalker.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/SelfIteratorNoPredicate.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/SubContextList.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/UnionChildIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/UnionPathIterator$iterOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/UnionPathIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/WalkerFactory.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/WalkingIterator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/axes/WalkingIteratorSorted.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/Compiler.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/FuncLoader.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/FunctionTable.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/Keywords.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/Lexer.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/OpCodes.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/OpMap.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/OpMapVector.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/PsuedoNames.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/XPathDumper.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/compiler/XPathParser.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathEvaluatorImpl$DummyPrefixResolver.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathEvaluatorImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathExpressionImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathNSResolverImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathNamespaceImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathResultImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/domapi/XPathStylesheetDOM3Exception.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncBoolean.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncCeiling.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncConcat.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncContains.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncCount.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncCurrent.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncDoclocation.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncExtElementAvailable.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncExtFunction$ArgExtOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncExtFunction.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncExtFunctionAvailable.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncFalse.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncFloor.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncGenerateId.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncId.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncLang.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncLast.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncLocalPart.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncNamespace.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncNormalizeSpace.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncNot.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncNumber.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncPosition.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncQname.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncRound.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncStartsWith.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncString.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncStringLength.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncSubstring.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncSubstringAfter.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncSubstringBefore.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncSum.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncTranslate.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncTrue.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FuncUnparsedEntityURI.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/Function.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/Function2Args$Arg1Owner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/Function2Args.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/Function3Args$Arg2Owner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/Function3Args.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FunctionDef1Arg.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs$ArgMultiOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/FunctionOneArg.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/functions/WrongNumberArgsException.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/jaxp/JAXPPrefixResolver.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/jaxp/JAXPVariableStack.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/jaxp/XPathImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/Comparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/DTMXRTreeFrag.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/EqualComparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/GreaterThanComparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/GreaterThanOrEqualComparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/LessThanComparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/LessThanOrEqualComparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/NotEqualComparator.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XBoolean.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XBooleanStatic.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XMLStringFactoryImpl.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XNodeSet.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XNodeSetForDOM.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XNull.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XNumber.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XObject.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XObjectFactory.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XRTreeFrag.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XString.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XStringForChars.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/objects/XStringForFSB.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/And.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Bool.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Div.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Equals.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Gt.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Gte.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Lt.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Lte.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Minus.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Mod.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Mult.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Neg.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/NotEquals.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Number.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Operation$LeftExprOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Operation.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Or.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Plus.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Quo.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/String.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/UnaryOperation.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/Variable.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/operations/VariableSafeAbsRef.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/ContextMatchStepPattern.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/FunctionPattern$FunctionOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/FunctionPattern.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/NodeTest.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/NodeTestFilter.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/StepPattern$PredOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/StepPattern.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/UnionPattern$UnionPathPartOwner.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/patterns/UnionPattern.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_en.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_pt_BR.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.class +INFO: Loading Class: com/sun/org/apache/xpath/internal/res/XPATHMessages.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/AMX.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/AMXGlassfish$BootAMXCallback.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/AMXGlassfish$WaitForDomainRootListenerCallback.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/AMXGlassfish.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/AMXUtil.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/BootAMXMBean.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/MBeanListener$Callback.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/MBeanListener$CallbackImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/amx/MBeanListener.class +INFO: Loading Class: com/sun/org/glassfish/external/arc/Stability.class +INFO: Loading Class: com/sun/org/glassfish/external/arc/Taxonomy.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/PluginPoint.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/StatsProvider.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/StatsProviderInfo.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/StatsProviderManager.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/StatsProviderManagerDelegate.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/annotations/Probe.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/annotations/ProbeListener.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/annotations/ProbeParam.class +INFO: Loading Class: com/sun/org/glassfish/external/probe/provider/annotations/ProbeProvider.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/AverageRangeStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/BoundaryStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/BoundedRangeStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/CountStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/RangeStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/Statistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/Stats.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/StringStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/TimeStatistic.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/annotations/Reset.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/AverageRangeStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/BoundaryStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/BoundedRangeStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/CountStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/RangeStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/StatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/StatsImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/StringStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/external/statistics/impl/TimeStatisticImpl.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/AMXClient.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/AMXMBeanInterface.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/AMXMetadata.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/Description.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/DescriptorFields.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/DescriptorKey.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/GmbalException.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/GmbalMBean.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/GmbalMBeanNOPImpl.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/Impact.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/IncludeSubclass.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/InheritedAttribute.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/InheritedAttributes.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedAttribute.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedData.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedObject.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedObjectManager$RegistrationDebugLevel.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedObjectManager.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedObjectManagerFactory$1.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedObjectManagerFactory.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedObjectManagerNOPImpl.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ManagedOperation.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/NameValue.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/ParameterNames.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/util/GenericConstructor$1.class +INFO: Loading Class: com/sun/org/glassfish/gmbal/util/GenericConstructor.class +INFO: Loading Class: com/sun/org/omg/CORBA/AttrDescriptionSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/AttributeDescription.class +INFO: Loading Class: com/sun/org/omg/CORBA/AttributeDescriptionHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/AttributeMode.class +INFO: Loading Class: com/sun/org/omg/CORBA/AttributeModeHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ContextIdSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ContextIdentifierHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/DefinitionKindHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ExcDescriptionSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ExceptionDescription.class +INFO: Loading Class: com/sun/org/omg/CORBA/ExceptionDescriptionHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/IDLTypeHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/IdentifierHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/Initializer.class +INFO: Loading Class: com/sun/org/omg/CORBA/InitializerHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/InitializerSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/OpDescriptionSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/OperationDescription.class +INFO: Loading Class: com/sun/org/omg/CORBA/OperationDescriptionHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/OperationMode.class +INFO: Loading Class: com/sun/org/omg/CORBA/OperationModeHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ParDescriptionSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ParameterDescription.class +INFO: Loading Class: com/sun/org/omg/CORBA/ParameterDescriptionHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ParameterMode.class +INFO: Loading Class: com/sun/org/omg/CORBA/ParameterModeHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/Repository.class +INFO: Loading Class: com/sun/org/omg/CORBA/RepositoryHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/RepositoryIdHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/RepositoryIdSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/StructMemberHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/StructMemberSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ValueDefPackage/FullValueDescription.class +INFO: Loading Class: com/sun/org/omg/CORBA/ValueDefPackage/FullValueDescriptionHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ValueMemberHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/ValueMemberSeqHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/VersionSpecHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/VisibilityHelper.class +INFO: Loading Class: com/sun/org/omg/CORBA/_IDLTypeStub.class +INFO: Loading Class: com/sun/org/omg/CORBA/portable/ValueHelper.class +INFO: Loading Class: com/sun/org/omg/SendingContext/CodeBase.class +INFO: Loading Class: com/sun/org/omg/SendingContext/CodeBaseHelper.class +INFO: Loading Class: com/sun/org/omg/SendingContext/CodeBaseOperations.class +INFO: Loading Class: com/sun/org/omg/SendingContext/CodeBasePackage/URLHelper.class +INFO: Loading Class: com/sun/org/omg/SendingContext/CodeBasePackage/URLSeqHelper.class +INFO: Loading Class: com/sun/org/omg/SendingContext/CodeBasePackage/ValueDescSeqHelper.class +INFO: Loading Class: com/sun/org/omg/SendingContext/_CodeBaseImplBase.class +INFO: Loading Class: com/sun/org/omg/SendingContext/_CodeBaseStub.class +INFO: Loading Class: com/sun/rmi/rmid/ExecOptionPermission$ExecOptionPermissionCollection.class +INFO: Loading Class: com/sun/rmi/rmid/ExecOptionPermission.class +INFO: Loading Class: com/sun/rmi/rmid/ExecPermission$ExecPermissionCollection.class +INFO: Loading Class: com/sun/rmi/rmid/ExecPermission.class +INFO: Loading Class: com/sun/rowset/CachedRowSetImpl.class +INFO: Loading Class: com/sun/rowset/FilteredRowSetImpl.class +INFO: Loading Class: com/sun/rowset/JdbcRowSetImpl.class +INFO: Loading Class: com/sun/rowset/JdbcRowSetResourceBundle.class +INFO: Loading Class: com/sun/rowset/JoinRowSetImpl.class +INFO: Loading Class: com/sun/rowset/RowSetFactoryImpl.class +INFO: Loading Class: com/sun/rowset/WebRowSetImpl.class +INFO: Loading Class: com/sun/rowset/internal/BaseRow.class +INFO: Loading Class: com/sun/rowset/internal/CachedRowSetReader.class +INFO: Loading Class: com/sun/rowset/internal/CachedRowSetWriter.class +INFO: Loading Class: com/sun/rowset/internal/InsertRow.class +INFO: Loading Class: com/sun/rowset/internal/Row.class +INFO: Loading Class: com/sun/rowset/internal/SyncResolverImpl.class +INFO: Loading Class: com/sun/rowset/internal/WebRowSetXmlReader.class +INFO: Loading Class: com/sun/rowset/internal/WebRowSetXmlWriter.class +INFO: Loading Class: com/sun/rowset/internal/XmlErrorHandler.class +INFO: Loading Class: com/sun/rowset/internal/XmlReaderContentHandler.class +INFO: Loading Class: com/sun/rowset/internal/XmlResolver.class +INFO: Loading Class: com/sun/rowset/providers/RIOptimisticProvider.class +INFO: Loading Class: com/sun/rowset/providers/RIXMLProvider.class +INFO: Loading Class: com/sun/security/auth/LdapPrincipal.class +INFO: Loading Class: com/sun/security/auth/NTDomainPrincipal.class +INFO: Loading Class: com/sun/security/auth/NTNumericCredential.class +INFO: Loading Class: com/sun/security/auth/NTSid.class +INFO: Loading Class: com/sun/security/auth/NTSidDomainPrincipal.class +INFO: Loading Class: com/sun/security/auth/NTSidGroupPrincipal.class +INFO: Loading Class: com/sun/security/auth/NTSidPrimaryGroupPrincipal.class +INFO: Loading Class: com/sun/security/auth/NTSidUserPrincipal.class +INFO: Loading Class: com/sun/security/auth/NTUserPrincipal.class +INFO: Loading Class: com/sun/security/auth/PolicyFile.class +INFO: Loading Class: com/sun/security/auth/PrincipalComparator.class +INFO: Loading Class: com/sun/security/auth/SolarisNumericGroupPrincipal$1.class +INFO: Loading Class: com/sun/security/auth/SolarisNumericGroupPrincipal.class +INFO: Loading Class: com/sun/security/auth/SolarisNumericUserPrincipal$1.class +INFO: Loading Class: com/sun/security/auth/SolarisNumericUserPrincipal.class +INFO: Loading Class: com/sun/security/auth/SolarisPrincipal$1.class +INFO: Loading Class: com/sun/security/auth/SolarisPrincipal.class +INFO: Loading Class: com/sun/security/auth/UnixNumericGroupPrincipal.class +INFO: Loading Class: com/sun/security/auth/UnixNumericUserPrincipal.class +INFO: Loading Class: com/sun/security/auth/UnixPrincipal.class +INFO: Loading Class: com/sun/security/auth/UserPrincipal.class +INFO: Loading Class: com/sun/security/auth/X500Principal$1.class +INFO: Loading Class: com/sun/security/auth/X500Principal.class +INFO: Loading Class: com/sun/security/auth/callback/DialogCallbackHandler$1.class +INFO: Loading Class: com/sun/security/auth/callback/DialogCallbackHandler$2.class +INFO: Loading Class: com/sun/security/auth/callback/DialogCallbackHandler$Action.class +INFO: Loading Class: com/sun/security/auth/callback/DialogCallbackHandler$ConfirmationInfo.class +INFO: Loading Class: com/sun/security/auth/callback/DialogCallbackHandler.class +INFO: Loading Class: com/sun/security/auth/callback/TextCallbackHandler$1OptionInfo.class +INFO: Loading Class: com/sun/security/auth/callback/TextCallbackHandler.class +INFO: Loading Class: com/sun/security/auth/callback/package-info.class +INFO: Loading Class: com/sun/security/auth/login/ConfigFile.class +INFO: Loading Class: com/sun/security/auth/login/package-info.class +INFO: Loading Class: com/sun/security/auth/module/Crypt.class +INFO: Loading Class: com/sun/security/auth/module/JndiLoginModule$1.class +INFO: Loading Class: com/sun/security/auth/module/JndiLoginModule.class +INFO: Loading Class: com/sun/security/auth/module/KeyStoreLoginModule$1.class +INFO: Loading Class: com/sun/security/auth/module/KeyStoreLoginModule.class +INFO: Loading Class: com/sun/security/auth/module/Krb5LoginModule$1.class +INFO: Loading Class: com/sun/security/auth/module/Krb5LoginModule.class +INFO: Loading Class: com/sun/security/auth/module/LdapLoginModule$1.class +INFO: Loading Class: com/sun/security/auth/module/LdapLoginModule.class +INFO: Loading Class: com/sun/security/auth/module/UnixLoginModule.class +INFO: Loading Class: com/sun/security/auth/module/UnixSystem.class +INFO: Loading Class: com/sun/security/auth/module/package-info.class +INFO: Loading Class: com/sun/security/auth/package-info.class +INFO: Loading Class: com/sun/security/cert/internal/x509/X509V1CertImpl.class +INFO: Loading Class: com/sun/security/jgss/AuthorizationDataEntry.class +INFO: Loading Class: com/sun/security/jgss/ExtendedGSSContext.class +INFO: Loading Class: com/sun/security/jgss/ExtendedGSSCredential.class +INFO: Loading Class: com/sun/security/jgss/GSSUtil.class +INFO: Loading Class: com/sun/security/jgss/InquireSecContextPermission.class +INFO: Loading Class: com/sun/security/jgss/InquireType.class +INFO: Loading Class: com/sun/security/jgss/package-info.class +INFO: Loading Class: com/sun/security/ntlm/Client.class +INFO: Loading Class: com/sun/security/ntlm/NTLM$Reader.class +INFO: Loading Class: com/sun/security/ntlm/NTLM$Writer.class +INFO: Loading Class: com/sun/security/ntlm/NTLM.class +INFO: Loading Class: com/sun/security/ntlm/NTLMException.class +INFO: Loading Class: com/sun/security/ntlm/Server.class +INFO: Loading Class: com/sun/security/ntlm/Version.class +INFO: Loading Class: com/sun/security/sasl/ClientFactoryImpl.class +INFO: Loading Class: com/sun/security/sasl/CramMD5Base.class +INFO: Loading Class: com/sun/security/sasl/CramMD5Client.class +INFO: Loading Class: com/sun/security/sasl/CramMD5Server.class +INFO: Loading Class: com/sun/security/sasl/ExternalClient.class +INFO: Loading Class: com/sun/security/sasl/PlainClient.class +INFO: Loading Class: com/sun/security/sasl/Provider$1.class +INFO: Loading Class: com/sun/security/sasl/Provider.class +INFO: Loading Class: com/sun/security/sasl/ServerFactoryImpl.class +INFO: Loading Class: com/sun/security/sasl/digest/DigestMD5Base$DigestIntegrity.class +INFO: Loading Class: com/sun/security/sasl/digest/DigestMD5Base$DigestPrivacy.class +INFO: Loading Class: com/sun/security/sasl/digest/DigestMD5Base.class +INFO: Loading Class: com/sun/security/sasl/digest/DigestMD5Client.class +INFO: Loading Class: com/sun/security/sasl/digest/DigestMD5Server.class +INFO: Loading Class: com/sun/security/sasl/digest/FactoryImpl.class +INFO: Loading Class: com/sun/security/sasl/digest/SecurityCtx.class +INFO: Loading Class: com/sun/security/sasl/gsskerb/FactoryImpl.class +INFO: Loading Class: com/sun/security/sasl/gsskerb/GssKrb5Base.class +INFO: Loading Class: com/sun/security/sasl/gsskerb/GssKrb5Client.class +INFO: Loading Class: com/sun/security/sasl/gsskerb/GssKrb5Server.class +INFO: Loading Class: com/sun/security/sasl/ntlm/FactoryImpl.class +INFO: Loading Class: com/sun/security/sasl/ntlm/NTLMClient.class +INFO: Loading Class: com/sun/security/sasl/ntlm/NTLMServer$1.class +INFO: Loading Class: com/sun/security/sasl/ntlm/NTLMServer.class +INFO: Loading Class: com/sun/security/sasl/util/AbstractSaslImpl.class +INFO: Loading Class: com/sun/security/sasl/util/PolicyUtils.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_de.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_es.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_fr.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_it.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_ja.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_ko.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_pt_BR.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_sv.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_zh_CN.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_zh_HK.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic_zh_TW.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_de.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_es.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_fr.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_it.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_ja.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_ko.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_pt_BR.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_sv.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_zh_CN.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_zh_HK.class +INFO: Loading Class: com/sun/swing/internal/plaf/metal/resources/metal_zh_TW.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_de.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_es.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_fr.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_it.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_ja.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_ko.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_pt_BR.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_sv.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_zh_CN.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_zh_HK.class +INFO: Loading Class: com/sun/swing/internal/plaf/synth/resources/synth_zh_TW.class +INFO: Loading Class: com/sun/tracing/Probe.class +INFO: Loading Class: com/sun/tracing/ProbeName.class +INFO: Loading Class: com/sun/tracing/Provider.class +INFO: Loading Class: com/sun/tracing/ProviderFactory$1.class +INFO: Loading Class: com/sun/tracing/ProviderFactory.class +INFO: Loading Class: com/sun/tracing/ProviderName.class +INFO: Loading Class: com/sun/tracing/dtrace/ArgsAttributes.class +INFO: Loading Class: com/sun/tracing/dtrace/Attributes.class +INFO: Loading Class: com/sun/tracing/dtrace/DependencyClass.class +INFO: Loading Class: com/sun/tracing/dtrace/FunctionAttributes.class +INFO: Loading Class: com/sun/tracing/dtrace/FunctionName.class +INFO: Loading Class: com/sun/tracing/dtrace/ModuleAttributes.class +INFO: Loading Class: com/sun/tracing/dtrace/ModuleName.class +INFO: Loading Class: com/sun/tracing/dtrace/NameAttributes.class +INFO: Loading Class: com/sun/tracing/dtrace/ProviderAttributes.class +INFO: Loading Class: com/sun/tracing/dtrace/StabilityLevel.class +INFO: Loading Class: com/sun/xml/internal/bind/AccessorFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/AccessorFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/AnyTypeAdapter.class +INFO: Loading Class: com/sun/xml/internal/bind/CycleRecoverable$Context.class +INFO: Loading Class: com/sun/xml/internal/bind/CycleRecoverable.class +INFO: Loading Class: com/sun/xml/internal/bind/DatatypeConverterImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/DatatypeConverterImpl$CalendarFormatter.class +INFO: Loading Class: com/sun/xml/internal/bind/DatatypeConverterImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/IDResolver.class +INFO: Loading Class: com/sun/xml/internal/bind/InternalAccessorFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/Locatable.class +INFO: Loading Class: com/sun/xml/internal/bind/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/Util.class +INFO: Loading Class: com/sun/xml/internal/bind/ValidationEventLocatorEx.class +INFO: Loading Class: com/sun/xml/internal/bind/WhiteSpaceProcessor.class +INFO: Loading Class: com/sun/xml/internal/bind/XmlAccessorFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/annotation/OverrideAnnotationOf.class +INFO: Loading Class: com/sun/xml/internal/bind/annotation/XmlIsSet.class +INFO: Loading Class: com/sun/xml/internal/bind/annotation/XmlLocation.class +INFO: Loading Class: com/sun/xml/internal/bind/api/AccessorException.class +INFO: Loading Class: com/sun/xml/internal/bind/api/Bridge.class +INFO: Loading Class: com/sun/xml/internal/bind/api/BridgeContext.class +INFO: Loading Class: com/sun/xml/internal/bind/api/ClassResolver.class +INFO: Loading Class: com/sun/xml/internal/bind/api/CompositeStructure.class +INFO: Loading Class: com/sun/xml/internal/bind/api/ErrorListener.class +INFO: Loading Class: com/sun/xml/internal/bind/api/JAXBRIContext.class +INFO: Loading Class: com/sun/xml/internal/bind/api/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/api/RawAccessor.class +INFO: Loading Class: com/sun/xml/internal/bind/api/TypeReference.class +INFO: Loading Class: com/sun/xml/internal/bind/api/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/bind/api/Utils.class +INFO: Loading Class: com/sun/xml/internal/bind/api/impl/NameConverter$1.class +INFO: Loading Class: com/sun/xml/internal/bind/api/impl/NameConverter$2.class +INFO: Loading Class: com/sun/xml/internal/bind/api/impl/NameConverter$Standard.class +INFO: Loading Class: com/sun/xml/internal/bind/api/impl/NameConverter.class +INFO: Loading Class: com/sun/xml/internal/bind/api/impl/NameUtil.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/CharacterEscapeHandler.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/DataWriter.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/DumbEscapeHandler.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/MinimumEscapeHandler.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/NamespacePrefixMapper.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/NioEscapeHandler.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/SAX2DOMEx.class +INFO: Loading Class: com/sun/xml/internal/bind/marshaller/XMLWriter.class +INFO: Loading Class: com/sun/xml/internal/bind/unmarshaller/DOMScanner.class +INFO: Loading Class: com/sun/xml/internal/bind/unmarshaller/InfosetScanner.class +INFO: Loading Class: com/sun/xml/internal/bind/unmarshaller/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/unmarshaller/Patcher.class +INFO: Loading Class: com/sun/xml/internal/bind/util/AttributesImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/util/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/util/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/util/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/util/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/util/ValidationEventLocatorExImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/util/Which.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/ClassFactory$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/ClassFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/ContextFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/TODO.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/WellKnownNamespace.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/bytecode/ClassTailor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/bytecode/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/bytecode/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/bytecode/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/bytecode/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/AbstractInlineAnnotationReaderImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/AnnotationReader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/AnnotationSource.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/ClassLocatable.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/FieldLocatable.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/Init.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/Locatable.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/LocatableAnnotation.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/MethodLocatable.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/Quick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/RuntimeAnnotationReader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/RuntimeInlineAnnotationReader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlAttributeQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlElementDeclQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlElementQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlElementRefQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlElementRefsQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlEnumQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlRootElementQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlSchemaQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlSchemaTypeQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlTransientQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlTypeQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/annotation/XmlValueQuick.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/Adapter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ArrayInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/AttributePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/BuiltinLeafInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ClassInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/Element.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ElementInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ElementPropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/EnumConstant.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/EnumLeafInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ErrorHandler.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ID.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/LeafInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/MapPropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/MaybeElement.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/NonElement.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/NonElementRef.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/PropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/PropertyKind.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/Ref.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ReferencePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/RegistryInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/TypeInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/TypeInfoSet.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/TypeRef.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/ValuePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/WildcardMode.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/WildcardTypeInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/core/package-info.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/AnyTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ArrayInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/AttributePropertyInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/AttributePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/BuiltinLeafInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$ConflictException.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$DuplicateException.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$PropertyGroup.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$PropertySorter$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$PropertySorter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$SecondaryAnnotation.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/DummyPropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ERPropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ElementInfoImpl$PropertyImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ElementInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ElementPropertyInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ElementPropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/EnumConstantImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/EnumLeafInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/EnumLeafInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/FieldPropertySeed.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/GetterSetterPropertySeed.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/LeafInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/MapPropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ModelBuilder$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ModelBuilderI.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/PropertySeed.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ReferencePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RegistryInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeAnyTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeArrayInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeAttributePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$10$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$10.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$11.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$12.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$13.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$14.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$15.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$16.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$17.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$18.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$19.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$20.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$21.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$22.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$23.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$24.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$25.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$26.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$27.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$4.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$5.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$6.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$7.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$8.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$9.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$PcdataImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$StringImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$StringImplImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$UUIDImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeClassInfoImpl$RuntimePropertySeed.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeClassInfoImpl$TransducerImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeClassInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeElementInfoImpl$RuntimePropertyImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeElementInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeElementPropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeEnumConstantImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeEnumLeafInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeMapPropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeModelBuilder$IDTransducerImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeModelBuilder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeReferencePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeTypeInfoSetImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeTypeRefImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/RuntimeValuePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/SingleTypePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/TypeInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/TypeRefImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/Util.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/Utils.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/impl/ValuePropertyInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/GenericArrayTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/Navigator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ParameterizedTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$4.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$5.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$6.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$BinderArg.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/TypeVisitor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/nav/WildcardTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeArrayInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeAttributePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeBuiltinLeafInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeClassInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeElement.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementPropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeEnumLeafInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeLeafInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeMapPropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElement.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElementRef.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeReferencePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeRef.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/RuntimeValuePropertyInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/runtime/package-info.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/model/util/ArrayInfoUtil.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/AnyTypeBeanInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl$ArrayLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ArrayBeanInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/AssociationMap$Entry.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/AssociationMap.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/AttributeAccessor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/BinderImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/BridgeAdapter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/BridgeContextImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/BridgeImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ClassBeanInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/CompositeStructureBeanInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ContentHandlerAdaptor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Coordinator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/DomPostInitAction.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl$IntercepterLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/FilterTransducer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/IllegalAnnotationException.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/IllegalAnnotationsException$Builder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/IllegalAnnotationsException.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/InlineBinaryTransducer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/InternalBridge.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$4.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$5.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$6.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$JAXBContextBuilder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/JaxBeanInfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/LeafBeanInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/LifecycleMethods.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Location.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/MarshallerImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/MarshallerImpl$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/MarshallerImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/MimeTypedTransducer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Name.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/NameBuilder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/NameList.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/NamespaceContext2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/RuntimeUtil$ToStringAdapter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/RuntimeUtil.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/SchemaTypeTransducer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/StAXPostInitAction.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/SwaRefAdapter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/SwaRefAdapterMarker.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Transducer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/Utils.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/ValueListBeanInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/XMLSerializer$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/XMLSerializer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/C14nXmlOutput$DynamicAttribute.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/C14nXmlOutput$StaticAttribute.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/C14nXmlOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/DOMOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/Encoded.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/FastInfosetStreamWriterOutput$AppData.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/FastInfosetStreamWriterOutput$TablesPerJAXBContext.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/FastInfosetStreamWriterOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/ForkXmlOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/IndentingUTF8XmlOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/MTOMXmlOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/NamespaceContextImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/NamespaceContextImpl$Element.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/NamespaceContextImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/Pcdata.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/SAXOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/StAXExStreamWriterOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/UTF8XmlOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/XMLEventWriterOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/XmlOutput.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/output/XmlOutputAbstractImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty$ItemsLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty$ReceiverImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayElementLeafProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayElementNodeProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayElementProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayReferenceNodeProperty$MixedTextLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ArrayReferenceNodeProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/AttributeProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ListElementProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/Property.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/PropertyImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleElementLeafProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleElementNodeProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty$ReceiverImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleReferenceNodeProperty$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/SingleReferenceNodeProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/StructureLoaderBuilder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/TagAndType.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/UnmarshallerChain.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/Utils.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/property/ValueProperty.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$FieldReflection.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$GetterOnlyReflection.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$GetterSetterReflection.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$ReadOnlyFieldReflection.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor$SetterOnlyReflection.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/AdaptedAccessor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/AdaptedLister$ListIteratorImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/AdaptedLister.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/DefaultTransducedAccessor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/ListIterator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/ListTransducedAccessorImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$ArrayLister$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$ArrayLister.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$CollectionLister$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$CollectionLister.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$IDREFS$Pack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$IDREFS.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$IDREFSIterator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister$Pack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Lister.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/NullSafeAccessor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerBoolean$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerBoolean$BooleanArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerBoolean.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerByte$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerByte$ByteArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerByte.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerCharacter$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerCharacter$CharacterArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerCharacter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerDouble$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerDouble$DoubleArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerDouble.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerFloat$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerFloat$FloatArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerFloat.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerInteger$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerInteger$IntegerArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerInteger.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerLong$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerLong$LongArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerLong.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerShort$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerShort$ShortArrayPack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/PrimitiveArrayListerShort.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor$CompositeContextDependentTransducedAccessorImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor$CompositeTransducedAccessorImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor$IDREFTransducedAccessorImpl$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor$IDREFTransducedAccessorImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/Utils.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/AccessorInjector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/Bean.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/Const.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Boolean.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Byte.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Character.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Double.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Float.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Integer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Long.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Ref.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/FieldAccessor_Short.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Boolean.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Byte.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Character.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Double.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Float.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Integer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Long.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Ref.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/MethodAccessor_Short.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedAccessorFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedTransducedAccessorFactory.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/Ref.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Boolean.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Byte.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Double.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Float.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Integer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Long.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_field_Short.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Boolean.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Byte.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Double.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Float.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Integer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Long.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/reflect/opt/TransducedAccessor_method_Short.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/AttributesEx.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/AttributesExImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Base64Data$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Base64Data.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/ChildLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultIDResolver$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultIDResolver.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/DefaultValueLoaderDecorator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Discarder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader$State.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/DomLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/FastInfosetConnector$CharSequenceImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/FastInfosetConnector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/IntArrayData.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/IntData.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Intercepter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/InterningXmlVisitor$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/InterningXmlVisitor$AttributesImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/InterningXmlVisitor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/LeafPropertyXsiLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/LocatorEx$Snapshot.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/LocatorEx.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/LocatorExWrapper.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/MTOMDecorator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Patcher.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/ProxyLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Receiver.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector$TagNameImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SecureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SecureLoader$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SecureLoader$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/SecureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXConnector$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXConnector$TagNameImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXConnector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXEventConnector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXExConnector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/TagName.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/TextLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallerImpl.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext$DefaultRootLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext$ExpectedTypeRootLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext$Factory.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext$State.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValidatingUnmarshaller.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValuePropertyLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/WildcardLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/XmlVisitor$TextPredictor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/XmlVisitor.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader$Array.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader$Single.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiNilLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/runtime/unmarshaller/XsiTypeLoader.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/FoolProofResolver.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Form$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Form$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Form$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Form.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/GroupKind.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Messages.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/MultiMap.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Tree$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Tree$Group.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Tree$Optional.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Tree$Repeated.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Tree$Term.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Tree.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/Util.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$2.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$3.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$4.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$5.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$6.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$7.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$ElementDeclaration.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace$ElementWithType.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator$Namespace.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/XmlSchemaGenerator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/episode/Bindings.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/episode/Klass.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/episode/Package.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/episode/SchemaBindings.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/episode/package-info.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Annotated.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Annotation.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Any.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Appinfo.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/AttrDecls.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/AttributeType.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ComplexContent.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ComplexExtension.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ComplexRestriction.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ComplexType.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ComplexTypeHost.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ComplexTypeModel.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ContentModelContainer.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Documentation.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Element.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ExplicitGroup.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/ExtensionType.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/FixedOrDefault.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Import.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/List.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/LocalAttribute.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/LocalElement.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/NestedParticle.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/NoFixedFacet.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Occurs.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Particle.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Redefinable.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Schema.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SchemaTop.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleContent.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleDerivation.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleExtension.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleRestriction.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleRestrictionModel.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleType.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/SimpleTypeHost.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/TopLevelAttribute.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/TopLevelElement.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/TypeDefParticle.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/TypeHost.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Union.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/Wildcard.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/schemagen/xmlschema/package-info.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/ByteArrayOutputStreamEx.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/CollisionCheckStack.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/DataSourceSource.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/EditDistance.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/FatalAdapter.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/FlattenIterator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/QNameMap$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/QNameMap$Entry.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/QNameMap$EntryIterator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/QNameMap$EntrySet.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/QNameMap$HashIterator.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/QNameMap.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/StackRecorder.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/TypeCast.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/XmlFactory$1.class +INFO: Loading Class: com/sun/xml/internal/bind/v2/util/XmlFactory.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/AbstractResourceBundle.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/CommonResourceBundle.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/Decoder$EncodingAlgorithmInputStream.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/Decoder.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/DecoderStateTables.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/Encoder$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/Encoder$EncodingBufferOutputStream.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/Encoder.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/EncodingConstants.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/Notation.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/OctetBufferListener.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/QualifiedName.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/UnparsedEntity.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BASE64EncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BooleanEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BooleanEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BuiltInEncodingAlgorithm$WordListener.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BuiltInEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BuiltInEncodingAlgorithmFactory.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/BuiltInEncodingAlgorithmState.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/DoubleEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/DoubleEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/FloatEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/FloatEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/HexadecimalEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/IEEE754FloatingPointEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/IntEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/IntEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/IntegerEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/LongEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/LongEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/ShortEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/ShortEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/UUIDEncodingAlgorithm$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/algorithm/UUIDEncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/alphabet/BuiltInRestrictedAlphabets.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/dom/DOMDocumentParser.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/dom/DOMDocumentSerializer.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/org/apache/xerces/util/XMLChar.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/AttributesHolder.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/Features.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/Properties.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SAXDocumentParser$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SAXDocumentParser$DeclHandlerImpl.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SAXDocumentParser$LexicalHandlerImpl.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SAXDocumentParser.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SAXDocumentSerializer.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SAXDocumentSerializerWithPrefixMapping.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/sax/SystemIdResolver.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/EventLocation.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/StAXDocumentParser$NamespaceContextImpl.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/StAXDocumentParser.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/StAXDocumentSerializer.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/StAXManager.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/AttributeBase.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/CharactersEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/CommentEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/DTDEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/EmptyIterator.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/EndDocumentEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/EndElementEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/EntityDeclarationImpl.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/EntityReferenceEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/EventBase.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/NamespaceBase.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/ProcessingInstructionEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/ReadIterator.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/StAXEventAllocatorBase.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/StAXEventReader.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/StAXEventWriter.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/StAXFilteredEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/StartDocumentEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/StartElementEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/Util.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/events/XMLConstants.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/factory/StAXEventFactory.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/factory/StAXInputFactory.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/factory/StAXOutputFactory.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/util/StAXFilteredParser.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/stax/util/StAXParserWrapper.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/FI_DOM_Or_XML_DOM_SAX_SAXEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/FI_SAX_Or_XML_SAX_DOM_SAX_SAXEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/FI_SAX_Or_XML_SAX_SAXEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/FI_SAX_XML.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/FI_StAX_SAX_Or_XML_SAX_SAXEvent.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/PrintTable.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/SAX2StAXWriter.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/SAXEventSerializer$AttributeValueHolder.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/SAXEventSerializer.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/StAX2SAXReader.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/TransformInputOutput$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/TransformInputOutput.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/VocabularyGenerator.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/XML_DOM_FI.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/XML_DOM_SAX_FI.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/XML_SAX_FI.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/tools/XML_SAX_StAX_FI.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/CharArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/CharArrayArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/CharArrayIntMap$Entry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/CharArrayIntMap.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/CharArrayString.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/ContiguousCharArrayArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/DuplicateAttributeVerifier$Entry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/DuplicateAttributeVerifier.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/FixedEntryStringIntMap.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/KeyIntMap$BaseEntry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/KeyIntMap.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/LocalNameQualifiedNamesMap$Entry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/LocalNameQualifiedNamesMap.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/NamespaceContextImplementation.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/PrefixArray$1.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/PrefixArray$2.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/PrefixArray$NamespaceEntry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/PrefixArray$PrefixEntry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/PrefixArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/QualifiedNameArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/StringArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/StringIntMap$Entry.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/StringIntMap.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/ValueArray.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/util/ValueArrayResourceException.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/vocab/ParserVocabulary.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/vocab/SerializerVocabulary.class +INFO: Loading Class: com/sun/xml/internal/fastinfoset/vocab/Vocabulary.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/SOAPExceptionImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/client/p2p/HttpSOAPConnection.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/client/p2p/HttpSOAPConnectionFactory.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/Header.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/MessagingException.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/MultipartDataSource.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/AsciiOutputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/BMMimeMultipart.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/ContentDisposition.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/ContentType.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/HeaderTokenizer$Token.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/HeaderTokenizer.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/InternetHeaders$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/InternetHeaders.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeBodyPart$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeBodyPart.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeMultipart.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimePartDataSource.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimePullMultipart.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeUtility$1NullInputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeUtility.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/ParameterList.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/ParseException.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/SharedInputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/UniqueValue.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/internet/hdr.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/ASCIIUtility.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/BASE64DecoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/BASE64EncoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/BEncoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/LineInputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/OutputUtil.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/QDecoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/QEncoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/QPDecoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/QPEncoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/UUDecoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/packaging/mime/util/UUEncoderStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/Envelope.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/FastInfosetDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/GifDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ImageDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/JpegDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/MessageFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/MessageImpl$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/MessageImpl$MimeMatchingIterator.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/MessageImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/MultipartDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SAAJMetaFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPDocument.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPDocumentFragment.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPDocumentImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPIOException.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPPartImpl$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPPartImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/SOAPVersionMismatchException.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/StringDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/XmlDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/dynamic/SOAPFactoryDynamicImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/dynamic/SOAPMessageFactoryDynamicImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/BodyElementImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/BodyImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/CDATAImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/CommentImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/DetailEntryImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/DetailImpl$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/DetailImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementFactory.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl$2.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl$3.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl$4.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl$5.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl$AttributeManager.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/ElementImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/EnvelopeImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/FaultElementImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/FaultImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/HeaderElementImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/HeaderImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/TextImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/impl/TreeException.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Body1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Body1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$CodeSubcode1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Detail1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Envelope1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Envelope1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Fault1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Fault1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$FaultElement1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Header1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Header1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$NotUnderstood1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$SOAP1_1Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$SOAP1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$SupportedEnvelope1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl$Upgrade1_2Name.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/name/NameImpl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/Body1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/BodyElement1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/Detail1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/DetailEntry1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/Envelope1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/Fault1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/FaultElement1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/Header1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/HeaderElement1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/Message1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/SOAPFactory1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/SOAPMessageFactory1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_1/SOAPPart1_1Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Body1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/BodyElement1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Detail1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/DetailEntry1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Envelope1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Fault1_2Impl$1.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Fault1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/FaultElement1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Header1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/HeaderElement1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/Message1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/SOAPFactory1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/SOAPMessageFactory1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/soap/ver1_2/SOAPPart1_2Impl.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/Base64.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/ByteInputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/ByteOutputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/CharReader.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/CharWriter.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/FastInfosetReflection.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/FinalArrayList.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/JAXMStreamSource.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/JaxmURI$MalformedURIException.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/JaxmURI.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/LogDomainConstants.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/MimeHeadersUtil.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/NamespaceContextIterator.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/ParseUtil.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/ParserPool.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/RejectDoctypeSaxFilter.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/SAAJUtil.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/TeeInputStream.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/XMLDeclarationParser.class +INFO: Loading Class: com/sun/xml/internal/messaging/saaj/util/transform/EfficientStreamingTransformer.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/EncodingAlgorithm.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/EncodingAlgorithmException.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/EncodingAlgorithmIndexes.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/ExternalVocabulary.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/FastInfosetException.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/FastInfosetParser.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/FastInfosetResult.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/FastInfosetSerializer.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/FastInfosetSource.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/RestrictedAlphabet.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/Vocabulary.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/VocabularyApplicationData.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/EncodingAlgorithmAttributes.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/EncodingAlgorithmContentHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/ExtendedContentHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/FastInfosetReader.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/FastInfosetWriter.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/PrimitiveTypeContentHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/RestrictedAlphabetContentHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/helpers/EncodingAlgorithmAttributesImpl.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/sax/helpers/FastInfosetDefaultHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/stax/FastInfosetStreamReader.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/fastinfoset/stax/LowLevelFastInfosetStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/ASCIIUtility.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/BASE64DecoderStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/Chunk.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/ChunkInputStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/CleanUpExecutorFactory.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/Data.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/DataFile.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/DataHead$ReadMultiStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/DataHead$ReadOnceStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/DataHead.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/DecodingException.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/FactoryFinder.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/FileData.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/FinalArrayList.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/Hdr.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/Header.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/InternetHeaders.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/LineInputStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEConfig.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$Content.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$EVENT_TYPE.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$EndMessage.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$EndPart.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$Headers.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$StartMessage.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent$StartPart.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEEvent.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEMessage$1.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEMessage.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEParser$1.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEParser$LineInputStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEParser$MIMEEventIterator.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEParser$STATE.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEParser.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEParsingException.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MIMEPart.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MemoryData.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/MimeUtility.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/PropUtil.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/QPDecoderStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/TempFiles.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/UUDecoderStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/WeakDataFile$1.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/mimepull/WeakDataFile.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64Data$1.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64Data$Base64DataSource.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64Data$Base64StreamingDataHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64Data$FilterDataHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64Data.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64Encoder.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/Base64EncoderStream.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/ByteArrayOutputStreamEx.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/NamespaceContextEx$Binding.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/NamespaceContextEx.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/StreamingDataHandler.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/XMLStreamReaderEx.class +INFO: Loading Class: com/sun/xml/internal/org/jvnet/staxex/XMLStreamWriterEx.class +INFO: Loading Class: com/sun/xml/internal/stream/Entity$ExternalEntity.class +INFO: Loading Class: com/sun/xml/internal/stream/Entity$InternalEntity.class +INFO: Loading Class: com/sun/xml/internal/stream/Entity$ScannedEntity.class +INFO: Loading Class: com/sun/xml/internal/stream/Entity.class +INFO: Loading Class: com/sun/xml/internal/stream/EventFilterSupport.class +INFO: Loading Class: com/sun/xml/internal/stream/StaxEntityResolverWrapper.class +INFO: Loading Class: com/sun/xml/internal/stream/StaxErrorReporter$1.class +INFO: Loading Class: com/sun/xml/internal/stream/StaxErrorReporter.class +INFO: Loading Class: com/sun/xml/internal/stream/StaxXMLInputSource.class +INFO: Loading Class: com/sun/xml/internal/stream/XMLBufferListener.class +INFO: Loading Class: com/sun/xml/internal/stream/XMLEntityReader.class +INFO: Loading Class: com/sun/xml/internal/stream/XMLEntityStorage.class +INFO: Loading Class: com/sun/xml/internal/stream/XMLEventReaderImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/XMLInputFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/XMLOutputFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/AbstractCreator.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/AbstractCreatorProcessor.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/AbstractProcessor.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/AttributesHolder.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/FragmentedArray.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/MutableXMLStreamBuffer.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/XMLStreamBuffer$1.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/XMLStreamBuffer.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/XMLStreamBufferException.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/XMLStreamBufferMark.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/XMLStreamBufferResult.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/XMLStreamBufferSource.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/sax/DefaultWithLexicalHandler.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/sax/Features.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/sax/Properties.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/sax/SAXBufferCreator.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/sax/SAXBufferProcessor.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/NamespaceContexHelper$NamespaceBindingImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/NamespaceContexHelper.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamBufferCreator.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferCreator.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$1.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$CharSequenceImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$DummyLocation.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$ElementStackEntry.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$InternalNamespaceContext$1.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$InternalNamespaceContext$2.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$InternalNamespaceContext$BindingImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor$InternalNamespaceContext.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamReaderBufferProcessor.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamWriterBufferCreator.class +INFO: Loading Class: com/sun/xml/internal/stream/buffer/stax/StreamWriterBufferProcessor.class +INFO: Loading Class: com/sun/xml/internal/stream/dtd/DTDGrammarUtil.class +INFO: Loading Class: com/sun/xml/internal/stream/dtd/nonvalidating/DTDGrammar.class +INFO: Loading Class: com/sun/xml/internal/stream/dtd/nonvalidating/XMLAttributeDecl.class +INFO: Loading Class: com/sun/xml/internal/stream/dtd/nonvalidating/XMLElementDecl.class +INFO: Loading Class: com/sun/xml/internal/stream/dtd/nonvalidating/XMLNotationDecl.class +INFO: Loading Class: com/sun/xml/internal/stream/dtd/nonvalidating/XMLSimpleType.class +INFO: Loading Class: com/sun/xml/internal/stream/events/AttributeImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/events/CharacterEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/CommentEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/DTDEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/DummyEvent$DummyLocation.class +INFO: Loading Class: com/sun/xml/internal/stream/events/DummyEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/EndDocumentEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/EndElementEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/EntityDeclarationImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/events/EntityReferenceEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/LocationImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/events/NamedEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/NamespaceImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/events/NotationDeclarationImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/events/ProcessingInstructionEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/StartDocumentEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/StartElementEvent.class +INFO: Loading Class: com/sun/xml/internal/stream/events/XMLEventAllocatorImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/events/XMLEventFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/util/BufferAllocator.class +INFO: Loading Class: com/sun/xml/internal/stream/util/ReadOnlyIterator.class +INFO: Loading Class: com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/UTF8OutputStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/WriterUtility.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLEventWriterImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLOutputSource.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLStreamWriterImpl$Attribute.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLStreamWriterImpl$ElementStack.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLStreamWriterImpl$ElementState.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLStreamWriterImpl$NamespaceContextImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.class +INFO: Loading Class: com/sun/xml/internal/stream/writers/XMLWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/Attribute.class +INFO: Loading Class: com/sun/xml/internal/txw2/Cdata.class +INFO: Loading Class: com/sun/xml/internal/txw2/Comment.class +INFO: Loading Class: com/sun/xml/internal/txw2/ContainerElement.class +INFO: Loading Class: com/sun/xml/internal/txw2/Content.class +INFO: Loading Class: com/sun/xml/internal/txw2/ContentVisitor.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter$1$1.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter$1$2.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter$1$3.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter$1$4.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter$1$5.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter$1.class +INFO: Loading Class: com/sun/xml/internal/txw2/DatatypeWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/Document$1.class +INFO: Loading Class: com/sun/xml/internal/txw2/Document.class +INFO: Loading Class: com/sun/xml/internal/txw2/EndDocument.class +INFO: Loading Class: com/sun/xml/internal/txw2/EndTag.class +INFO: Loading Class: com/sun/xml/internal/txw2/IllegalAnnotationException.class +INFO: Loading Class: com/sun/xml/internal/txw2/IllegalSignatureException.class +INFO: Loading Class: com/sun/xml/internal/txw2/NamespaceDecl.class +INFO: Loading Class: com/sun/xml/internal/txw2/NamespaceResolver.class +INFO: Loading Class: com/sun/xml/internal/txw2/NamespaceSupport$Context.class +INFO: Loading Class: com/sun/xml/internal/txw2/NamespaceSupport.class +INFO: Loading Class: com/sun/xml/internal/txw2/Pcdata.class +INFO: Loading Class: com/sun/xml/internal/txw2/StartDocument.class +INFO: Loading Class: com/sun/xml/internal/txw2/StartTag.class +INFO: Loading Class: com/sun/xml/internal/txw2/TXW.class +INFO: Loading Class: com/sun/xml/internal/txw2/Text.class +INFO: Loading Class: com/sun/xml/internal/txw2/TxwException.class +INFO: Loading Class: com/sun/xml/internal/txw2/TypedXmlWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/annotation/XmlAttribute.class +INFO: Loading Class: com/sun/xml/internal/txw2/annotation/XmlCDATA.class +INFO: Loading Class: com/sun/xml/internal/txw2/annotation/XmlElement.class +INFO: Loading Class: com/sun/xml/internal/txw2/annotation/XmlNamespace.class +INFO: Loading Class: com/sun/xml/internal/txw2/annotation/XmlValue.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/CharacterEscapeHandler.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/DataWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/DelegatingXMLStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/Dom2SaxAdapter.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/DomSerializer.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/DumbEscapeHandler.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/DumpSerializer.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/IndentingXMLFilter.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/IndentingXMLStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/ResultFactory.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/SaxSerializer.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/StaxSerializer.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/StreamSerializer$1.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/StreamSerializer.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/TXWResult.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/TXWSerializer.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/XMLWriter.class +INFO: Loading Class: com/sun/xml/internal/txw2/output/XmlSerializer.class +INFO: Loading Class: com/sun/xml/internal/ws/Closeable.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/EPRSDDocumentFilter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/EPRSDDocumentFilter.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/EndpointReferenceUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/ProblemAction.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/ProblemHeaderQName.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/W3CAddressingConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/W3CAddressingMetadataConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/W3CWsaClientTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/W3CWsaServerTube$1.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/W3CWsaServerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WSEPRExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaActionUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaClientTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaPropertyBag.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaServerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaTubeHelper.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/WsaTubeHelperImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/model/ActionNotSupportedException.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/model/InvalidAddressingHeaderException.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/model/MissingAddressingHeaderException.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/policy/AddressingFeatureConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/policy/AddressingPolicyMapConfigurator$AddressingAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/policy/AddressingPolicyMapConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/policy/AddressingPolicyValidator.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/policy/AddressingPrefixMapper.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/v200408/MemberSubmissionAddressingConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/v200408/MemberSubmissionWsaClientTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/v200408/MemberSubmissionWsaServerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/v200408/ProblemAction.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/v200408/ProblemHeaderQName.class +INFO: Loading Class: com/sun/xml/internal/ws/addressing/v200408/WsaTubeHelperImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/BindingID$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/BindingID$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/BindingID$Impl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/BindingID$SOAPHTTPImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/BindingID.class +INFO: Loading Class: com/sun/xml/internal/ws/api/BindingIDFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/Cancelable.class +INFO: Loading Class: com/sun/xml/internal/ws/api/Component.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ComponentEx.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ComponentFeature$Target.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ComponentFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ComponentRegistry.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ComponentsFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/DistributedPropertySet.class +INFO: Loading Class: com/sun/xml/internal/ws/api/EndpointAddress$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/EndpointAddress.class +INFO: Loading Class: com/sun/xml/internal/ws/api/FeatureConstructor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/FeatureListValidator.class +INFO: Loading Class: com/sun/xml/internal/ws/api/FeatureListValidatorAnnotation.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ImpliesWebServiceFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/PropertySet$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/PropertySet$PropertyMap.class +INFO: Loading Class: com/sun/xml/internal/ws/api/PropertySet.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ResourceLoader.class +INFO: Loading Class: com/sun/xml/internal/ws/api/SOAPVersion$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/SOAPVersion.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ServiceSharedFeatureMarker.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WSBinding.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WSDLLocator.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WSFeatureList.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WSService$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WSService$InitParams.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WSService.class +INFO: Loading Class: com/sun/xml/internal/ws/api/WebServiceFeatureFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/AddressingPropertySet.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/AddressingVersion$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/AddressingVersion$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/AddressingVersion$EPR.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/AddressingVersion.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/EPRHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/NonAnonymousResponseProcessor$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/NonAnonymousResponseProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/OneWayFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/OutboundReferenceParameterHeader$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/OutboundReferenceParameterHeader$1Filter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/OutboundReferenceParameterHeader$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/OutboundReferenceParameterHeader$Attribute.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/OutboundReferenceParameterHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$3.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$4.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$EPRExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$Metadata.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference$SAXBufferProcessorImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/WSEndpointReference.class +INFO: Loading Class: com/sun/xml/internal/ws/api/addressing/package-info.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/ClientPipelineHook.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/SelectOptimalEncodingFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/ServiceInterceptor$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/ServiceInterceptor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/ServiceInterceptorFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/ServiceInterceptorFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/ThrowableInPacketCompletionFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/client/WSPortInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/EndpointCreationAttributes.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/ManagedEndpointFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/Reconfigurable.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagedClientAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagedServiceAssertion$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagedServiceAssertion$ImplementationRecord.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagedServiceAssertion$NestedParameters.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagedServiceAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagementAssertion$Setting.class +INFO: Loading Class: com/sun/xml/internal/ws/api/config/management/policy/ManagementAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/ClientCallBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/Databinding.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/DatabindingConfig.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/DatabindingFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/EndpointCallBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/JavaCallInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/MappingInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/MetadataReader.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/SoapBodyStyle.class +INFO: Loading Class: com/sun/xml/internal/ws/api/databinding/WSDLGenInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/api/fastinfoset/FastInfosetFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ha/HaInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/api/ha/StickyFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/handler/MessageHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/api/handler/MessageHandlerContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/AddressingUtils.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Attachment.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/AttachmentEx$MimeHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/AttachmentEx.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/AttachmentSet.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/ExceptionHasMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/FilterMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Header.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/HeaderList$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/HeaderList$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/HeaderList.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Headers$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Headers.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Message.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/MessageContextFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/MessageHeaders.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/MessageMetadata.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/MessageWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/MessageWritable.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Messages.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Packet$1$1$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Packet$1$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Packet$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Packet$State.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Packet$Status.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/Packet.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/StreamingSOAP.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/SuppressAutomaticWSARequestHeadersFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/saaj/SAAJFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/saaj/SAAJMessageHeaders$HeaderReadIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/saaj/SAAJMessageHeaders.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/saaj/SaajStaxWriter$1$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/saaj/SaajStaxWriter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/saaj/SaajStaxWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/stream/InputStreamMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/stream/StreamBasedMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/api/message/stream/XMLStreamReaderMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/CheckedException.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/ExceptionType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/JavaMethod.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/MEP.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/Parameter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/ParameterBinding$Kind.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/ParameterBinding.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/SEIModel.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/WSDLOperationMapping.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/soap/SOAPBinding.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLBoundFault.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLBoundOperation$ANONYMOUS.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLBoundOperation.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLBoundPortType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLDescriptorKind.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLExtensible.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLFault.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLFeaturedObject.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLInput.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLModel$WSDLParser.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLModel.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLObject.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLOperation.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLOutput.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLPart.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLPartDescriptor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLPort.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLPortType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/WSDLService.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLBoundFault.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLBoundOperation.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLBoundPortType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLFault.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLInput.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLModel.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLOperation.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLOutput.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLPart.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLPort.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLPortType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/model/wsdl/editable/EditableWSDLService.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/ClientPipeAssemblerContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/ClientTubeAssemblerContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Codec.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Codecs.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/ContentType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Engine$DaemonThreadFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Engine.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber$CompletionCallback.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber$InterceptorHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber$Listener.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber$OnExitRunnableException.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber$PlaceholderTube.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Fiber.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/FiberContextSwitchInterceptor$Work.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/FiberContextSwitchInterceptor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/FiberContextSwitchInterceptorFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/NextAction.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Pipe.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/PipeCloner.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/PipeClonerImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/PipelineAssembler.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/PipelineAssemblerFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/SOAPBindingCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/ServerPipeAssemblerContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/ServerTubeAssemblerContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/StreamSOAPCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Stubs.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/SyncStartForAsyncFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/ThrowableContainerPropertySet.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TransportPipeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TransportTubeFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TransportTubeFactory$DefaultTransportTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TransportTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/Tube.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TubeCloner.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TubelineAssembler.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TubelineAssemblerFactory$TubelineAssemblerAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/TubelineAssemblerFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/helper/AbstractFilterPipeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/helper/AbstractFilterTubeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/helper/AbstractPipeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/helper/AbstractTubeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/helper/PipeAdapter$1TubeAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/pipe/helper/PipeAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/AlternativeSelector.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/ModelGenerator$SourceModelCreator.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/ModelGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/ModelTranslator.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/ModelUnmarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/PolicyResolver$ClientContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/PolicyResolver$ServerContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/PolicyResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/PolicyResolverFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/SourceModel.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/ValidationProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/subject/BindingSubject$WsdlMessageType.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/subject/BindingSubject$WsdlNameScope.class +INFO: Loading Class: com/sun/xml/internal/ws/api/policy/subject/BindingSubject.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AbstractInstanceResolver$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AbstractInstanceResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AbstractServerAsyncTransport$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AbstractServerAsyncTransport$CodecPool.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AbstractServerAsyncTransport.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Adapter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Adapter$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Adapter$3.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Adapter$Toolkit.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Adapter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AsyncProvider.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/AsyncProviderCallback.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/BoundEndpoint.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Container$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Container$NoneContainer.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Container.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ContainerResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/DocumentAddressResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/EndpointAwareCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/EndpointComponent.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/EndpointData.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/EndpointReferenceExtensionContributor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/HttpEndpoint.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/InstanceResolver$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/InstanceResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/InstanceResolverAnnotation.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Invoker.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/LazyMOMProvider$DefaultScopeChangeListener.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/LazyMOMProvider$Scope.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/LazyMOMProvider$ScopeChangeListener.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/LazyMOMProvider$WSEndpointScopeChangeListener.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/LazyMOMProvider.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/MethodUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/Module.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/PortAddressResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ProviderInvokerTubeFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ProviderInvokerTubeFactory$DefaultProviderInvokerTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ProviderInvokerTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ResourceInjector.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocument$Schema.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocument$WSDL.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocument.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocumentFilter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocumentSource$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocumentSource$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/SDDocumentSource.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ServerPipelineHook.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ServiceDefinition.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ThreadLocalContainerResolver$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ThreadLocalContainerResolver$2$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ThreadLocalContainerResolver$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/ThreadLocalContainerResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/TransportBackChannel.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/WSEndpoint$CompletionCallback.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/WSEndpoint$PipeHead.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/WSEndpoint.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/WSWebServiceContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/WebModule.class +INFO: Loading Class: com/sun/xml/internal/ws/api/server/WebServiceContextDelegate.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$2.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$Default$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$Default.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$NoLock.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$RecycleAware.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$Woodstox.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory$Zephyr.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory$Default.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory$HasEncodingWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory$NoLock.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory$RecycleAware.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory$Zephyr.class +INFO: Loading Class: com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/MetaDataResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/MetadataResolverFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/PolicyWSDLParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/ServiceDescriptor.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/WSDLParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/WSDLParserExtensionContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/XMLEntityResolver$Parser.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/parser/XMLEntityResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/writer/WSDLGenExtnContext.class +INFO: Loading Class: com/sun/xml/internal/ws/api/wsdl/writer/WSDLGeneratorExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/DefaultClientTubelineAssemblyContext.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/DefaultServerTubelineAssemblyContext.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigLoader$1.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigLoader$2.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigLoader$3.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigLoader$MetroConfigUrlLoader.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigLoader$TubeFactoryListResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigLoader.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigName.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroConfigNameImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroTubelineAssembler$MessageDumpingInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroTubelineAssembler$Side.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/MetroTubelineAssembler.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/TubeCreator.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/TubelineAssemblyContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/TubelineAssemblyController.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/ClientTubelineAssemblyContext.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/ServerTubelineAssemblyContext.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/TubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/TubelineAssemblyContext.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/TubelineAssemblyContextUpdater.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/TubelineAssemblyDecorator$CompositeTubelineAssemblyDecorator.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/dev/TubelineAssemblyDecorator.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/AddressingTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/BasicTransportTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/HandlerTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/MonitoringTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/MustUnderstandTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/TerminalTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/assembler/jaxws/ValidationTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/BindingImpl$MessageKey.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/BindingImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/FeatureListUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/HTTPBindingImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/SOAPBindingImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/WebServiceFeatureList$MergedFeatures.class +INFO: Loading Class: com/sun/xml/internal/ws/binding/WebServiceFeatureList.class +INFO: Loading Class: com/sun/xml/internal/ws/client/AsyncInvoker.class +INFO: Loading Class: com/sun/xml/internal/ws/client/AsyncResponseImpl$1CallbackFuture.class +INFO: Loading Class: com/sun/xml/internal/ws/client/AsyncResponseImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/client/BindingProviderProperties.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ClientContainer$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ClientContainer.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ClientSchemaValidationTube.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ClientTransportException.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ContentNegotiation.class +INFO: Loading Class: com/sun/xml/internal/ws/client/HandlerConfiguration.class +INFO: Loading Class: com/sun/xml/internal/ws/client/HandlerConfigurator$AnnotationConfigurator$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/HandlerConfigurator$AnnotationConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/client/HandlerConfigurator$HandlerResolverImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/client/HandlerConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/client/MonitorRootClient.class +INFO: Loading Class: com/sun/xml/internal/ws/client/PortInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/client/RequestContext.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ResponseContext.class +INFO: Loading Class: com/sun/xml/internal/ws/client/ResponseContextReceiver.class +INFO: Loading Class: com/sun/xml/internal/ws/client/SCAnnotations$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/SCAnnotations.class +INFO: Loading Class: com/sun/xml/internal/ws/client/SEIPortInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/client/SenderException.class +INFO: Loading Class: com/sun/xml/internal/ws/client/Stub$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/Stub.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$2.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$3.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$4.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$5.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$DaemonThreadFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate$DelegatingLoader.class +INFO: Loading Class: com/sun/xml/internal/ws/client/WSServiceDelegate.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/DataSourceDispatch$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/DataSourceDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/DispatchImpl$DispatchAsyncInvoker$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/DispatchImpl$DispatchAsyncInvoker.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/DispatchImpl$Invoker.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/DispatchImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/JAXBDispatch$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/JAXBDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/MessageDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/PacketDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/RESTSourceDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/SOAPMessageDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/SOAPSourceDispatch$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/dispatch/SOAPSourceDispatch.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/AsyncMethodHandler$SEIAsyncInvoker$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/AsyncMethodHandler$SEIAsyncInvoker.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/AsyncMethodHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder$Bare.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder$DocLit.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder$Empty.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder$JAXB.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder$RpcLit.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder$Wrapped.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/BodyBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/CallbackMethodHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MessageFiller$AttachmentFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MessageFiller$ByteArrayFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MessageFiller$DataHandlerFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MessageFiller$Header.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MessageFiller$JAXBFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MessageFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MethodHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/MethodUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/PollingMethodHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$AttachmentBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$Body.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$ByteArrayBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$Composite.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$DataHandlerBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$DocLit$PartBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$DocLit.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$Header.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$ImageBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$InputStreamBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$JAXBBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$None.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$NullSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$RpcLit.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$SourceBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$StringBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder$WrappedPartBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ResponseBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/SEIMethodHandler$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/SEIMethodHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/SEIStub.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/StubAsyncHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/StubHandler$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/StubHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/SyncMethodHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueGetter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueGetter$2.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueGetterFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueGetterFactory$2.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueGetterFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetter$AsyncBeanValueSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetter$Param.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetter$ReturnValue.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetter$SingleValue.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetterFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetterFactory$2.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetterFactory$3.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetterFactory$AsyncBeanValueSetterFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/client/sei/ValueSetterFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/commons/xmlutil/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/ws/commons/xmlutil/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/ws/commons/xmlutil/Converter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/commons/xmlutil/Converter.class +INFO: Loading Class: com/sun/xml/internal/ws/config/management/policy/ManagementAssertionCreator.class +INFO: Loading Class: com/sun/xml/internal/ws/config/management/policy/ManagementPolicyValidator.class +INFO: Loading Class: com/sun/xml/internal/ws/config/management/policy/ManagementPrefixMapper.class +INFO: Loading Class: com/sun/xml/internal/ws/config/metro/dev/FeatureReader.class +INFO: Loading Class: com/sun/xml/internal/ws/config/metro/util/ParserUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/db/DatabindingFactoryImpl$ConfigBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/db/DatabindingFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/db/DatabindingImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/db/DatabindingProviderImpl$JaxwsWsdlGen.class +INFO: Loading Class: com/sun/xml/internal/ws/db/DatabindingProviderImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/db/glassfish/BridgeWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/db/glassfish/JAXBRIContextFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/db/glassfish/JAXBRIContextWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/db/glassfish/MarshallerBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/db/glassfish/RawAccessorWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/db/glassfish/WrapperBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/BindingTypeFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/EPRRecipe.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/HttpConfigFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/JAXBContextFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/JAXBContextFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/JAXWSProperties.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionAddressing$Validation.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionAddressing.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionAddressingFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference$1.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference$Address.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference$AttributedQName.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference$Elements.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference$ServiceNameType.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/SchemaValidation.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/SchemaValidationFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/Serialization.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/SerializationFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/ServerSideException.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/StreamingAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/StreamingAttachmentFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/StreamingDataHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/UsesJAXBContext.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/UsesJAXBContextFeature$1.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/UsesJAXBContextFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/ValidationErrorHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/developer/WSBindingProvider.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/LoggingDumpTube$Position.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/LoggingDumpTube.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumper$MessageType.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumper$ProcessingState.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumper.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumping.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumpingFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumpingTube.class +INFO: Loading Class: com/sun/xml/internal/ws/dump/MessageDumpingTubeFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/ContentType.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/ContentTypeImpl$Builder.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/ContentTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/DataHandlerDataSource.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/DataSourceStreamingDataHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/HasEncoding.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/HeaderTokenizer$Token.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/HeaderTokenizer.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/ImageDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MIMEPartStreamingDataHandler$MyIOException.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MIMEPartStreamingDataHandler$StreamingDataSource.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MIMEPartStreamingDataHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MimeCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MimeMultipartParser$PartAttachment$1$1.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MimeMultipartParser$PartAttachment$1.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MimeMultipartParser$PartAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MimeMultipartParser.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MtomCodec$ByteArrayBuffer.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MtomCodec$MtomStreamWriterImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MtomCodec$MtomStreamWriterImpl$MtomNamespaceContextEx.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MtomCodec$MtomStreamWriterImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MtomCodec$MtomXMLStreamReaderEx.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/MtomCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/ParameterList.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/RootOnlyCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/SOAPBindingCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/StreamSOAP11Codec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/StreamSOAP12Codec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/StreamSOAPCodec$1.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/StreamSOAPCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/StringDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/SwACodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/TagInfoset.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/XMLHTTPBindingCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/XmlDataContentHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetMIMETypes.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetStreamReaderFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetStreamReaderRecyclable.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetStreamSOAP11Codec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetStreamSOAP12Codec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetStreamSOAPCodec$1.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/fastinfoset/FastInfosetStreamSOAPCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/EncodingConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/EncodingPolicyValidator.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/EncodingPrefixMapper.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/FastInfosetFeatureConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/MtomFeatureConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/MtomPolicyMapConfigurator$MtomAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/MtomPolicyMapConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/policy/SelectOptimalEncodingFeatureConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/DeserializationException.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/SOAP12Constants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/SOAPConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/SerializationException.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/SerializerConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/streaming/SOAP12NamespaceConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/soap/streaming/SOAPNamespaceConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLCodec.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage$FaultMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage$MessageDataSource.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage$UnknownContent.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage$XMLMultiPart.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage$XmlContent.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage$XmlDataSource.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/encoding/xml/XMLPropertyBag.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/CodeType.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/DetailType.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/ExceptionBean$1.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/ExceptionBean$StackFrame.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/ExceptionBean.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/ReasonType.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/SOAP11Fault.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/SOAP12Fault.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/SOAPFaultBuilder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/SOAPFaultBuilder$2.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/SOAPFaultBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/ServerSOAPFaultException.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/SubcodeType.class +INFO: Loading Class: com/sun/xml/internal/ws/fault/TextType.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/ClientLogicalHandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/ClientMessageHandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/ClientSOAPHandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerChainsModel$HandlerChainType.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerChainsModel$HandlerType.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerChainsModel.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerException.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerProcessor$Direction.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerProcessor$RequestOrResponse.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerTube$HandlerTubeExchange.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/HandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl$DOMLogicalMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl$EmptyLogicalMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl$ImmutableLM.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl$JAXBLogicalMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl$SourceLogicalMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/LogicalMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/MessageContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/MessageHandlerContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/MessageUpdatableContext.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/PortInfoImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/SOAPHandlerProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/SOAPMessageContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/ServerLogicalHandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/ServerMessageHandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/ServerSOAPHandlerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/handler/XMLHandlerProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/message/AbstractHeaderImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/AbstractMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/AttachmentSetImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/AttachmentUnmarshallerImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/ByteArrayAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/message/DOMHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/DOMMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/DataHandlerAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/message/EmptyMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/FaultDetailHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/FaultMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/JAXBAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/message/MimeAttachmentSet.class +INFO: Loading Class: com/sun/xml/internal/ws/message/PayloadElementSniffer.class +INFO: Loading Class: com/sun/xml/internal/ws/message/ProblemActionHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/RelatesToHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/RootElementSniffer.class +INFO: Loading Class: com/sun/xml/internal/ws/message/StringHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/Util.class +INFO: Loading Class: com/sun/xml/internal/ws/message/XMLReaderImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/AttachmentMarshallerImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/JAXBBridgeSource$1.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/JAXBBridgeSource.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/JAXBDispatchMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/JAXBHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/JAXBMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/jaxb/MarshallerBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/message/saaj/SAAJHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/saaj/SAAJMessage$SAAJAttachment$1$1.class +INFO: Loading Class: com/sun/xml/internal/ws/message/saaj/SAAJMessage$SAAJAttachment$1.class +INFO: Loading Class: com/sun/xml/internal/ws/message/saaj/SAAJMessage$SAAJAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/message/saaj/SAAJMessage$SAAJAttachmentSet.class +INFO: Loading Class: com/sun/xml/internal/ws/message/saaj/SAAJMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/source/PayloadSourceMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/source/ProtocolSourceMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/source/SourceUtils.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/OutboundStreamHeader$Attribute.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/OutboundStreamHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/PayloadStreamReaderMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamAttachment.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamHeader$Attribute.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamHeader.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamHeader11.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamHeader12.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamMessage$1.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamMessage$2.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamMessage$StreamHeaderDecoder.class +INFO: Loading Class: com/sun/xml/internal/ws/message/stream/StreamMessage.class +INFO: Loading Class: com/sun/xml/internal/ws/model/AbstractSEIModelImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/AbstractSEIModelImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/AbstractWrapperBeanGenerator$BeanMemberFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/model/AbstractWrapperBeanGenerator$XmlElementHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/model/AbstractWrapperBeanGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/model/CheckedExceptionImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader$2.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader$3.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader$4.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader$Merger.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader$Util.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ExternalMetadataReader.class +INFO: Loading Class: com/sun/xml/internal/ws/model/FieldSignature.class +INFO: Loading Class: com/sun/xml/internal/ws/model/Injector$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/Injector.class +INFO: Loading Class: com/sun/xml/internal/ws/model/JavaMethodImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ParameterImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ReflectAnnotationReader$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ReflectAnnotationReader$2.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ReflectAnnotationReader$3.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ReflectAnnotationReader$4.class +INFO: Loading Class: com/sun/xml/internal/ws/model/ReflectAnnotationReader.class +INFO: Loading Class: com/sun/xml/internal/ws/model/RuntimeModeler$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/RuntimeModeler.class +INFO: Loading Class: com/sun/xml/internal/ws/model/RuntimeModelerException.class +INFO: Loading Class: com/sun/xml/internal/ws/model/SOAPSEIModel.class +INFO: Loading Class: com/sun/xml/internal/ws/model/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/Utils.class +INFO: Loading Class: com/sun/xml/internal/ws/model/WrapperBeanGenerator$1.class +INFO: Loading Class: com/sun/xml/internal/ws/model/WrapperBeanGenerator$Field.class +INFO: Loading Class: com/sun/xml/internal/ws/model/WrapperBeanGenerator$FieldFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/model/WrapperBeanGenerator$RuntimeWrapperBeanGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/model/WrapperBeanGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/model/WrapperParameter.class +INFO: Loading Class: com/sun/xml/internal/ws/model/soap/SOAPBindingImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/AbstractExtensibleImpl$UnknownWSDLExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/AbstractExtensibleImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/AbstractFeaturedObjectImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/AbstractObjectImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLBoundFaultImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLBoundOperationImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLBoundPortTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLDirectProperties.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLFaultImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLInputImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLMessageImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLModelImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLOperationImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLOutputImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLPartDescriptorImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLPartImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLPortImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLPortProperties.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLPortTypeImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLProperties.class +INFO: Loading Class: com/sun/xml/internal/ws/model/wsdl/WSDLServiceImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/AnnotationVisitor.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/AnnotationWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Attribute.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/ByteVector.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/ClassAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/ClassReader.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/ClassVisitor.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/ClassWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Edge.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/FieldVisitor.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/FieldWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Frame.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Handler.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Item.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Label.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/MethodAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/MethodVisitor.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/MethodWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Opcodes.class +INFO: Loading Class: com/sun/xml/internal/ws/org/objectweb/asm/Type.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/AssertionSet$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/AssertionSet.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/AssertionValidationProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/ComplexAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$2.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$3.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$4.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$5.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$6.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness$7.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector$AlternativeFitness.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/EffectivePolicyModifier.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/NestedPolicy.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/Policy.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyException.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyIntersector$CompatibilityMode.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyIntersector.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$2.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$3.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$4.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$5.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$6.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$ScopeMap$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$ScopeMap.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap$ScopeType.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMap.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMapExtender.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMapKey.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMapKeyHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMapMutator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMapUtil$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMapUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyMerger.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicyScope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/PolicySubject.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/SimpleAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/BuilderHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/BuilderHandlerEndpointScope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/BuilderHandlerMessageScope$Scope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/BuilderHandlerMessageScope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/BuilderHandlerOperationScope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/BuilderHandlerServiceScope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/DefaultPolicyResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyMapBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLGeneratorExtension$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLGeneratorExtension$ScopeType.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLGeneratorExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLParserExtension$HandlerType.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLParserExtension$PolicyRecordHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/PolicyWSDLParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/SafePolicyReader$PolicyRecord.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/SafePolicyReader.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/WSDLBoundFaultContainer.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/spi/PolicyFeatureConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/jaxws/spi/PolicyMapConfigurator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/LocalizationMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/MethodUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyLogger.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Collections.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Commons.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Comparison$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Comparison.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$ConfigFile.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$IO.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Reflection.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Rfc2396.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$ServiceProvider.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils$Text.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/PolicyUtils.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/RuntimePolicyUtilsException.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/ServiceConfigurationError.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/ServiceFinder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/ServiceFinder$LazyIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/privateutil/ServiceFinder.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/AssertionData.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/CompactModelGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/DefaultPolicyAssertionCreator$DefaultPolicyAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/DefaultPolicyAssertionCreator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/ModelNode$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/ModelNode$Type.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/ModelNode.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/NormalizedModelGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelGenerator$PolicySourceModelCreator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelMarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator$ContentDecomposition.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator$RawAlternative.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator$RawAssertion.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator$RawPolicy.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelUnmarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicyReferenceData.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModel.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModelContext.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelMarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelUnmarshaller$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelUnmarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/attach/ExternalAttachmentsUnmarshaller$1.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/attach/ExternalAttachmentsUnmarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/NamespaceVersion.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/XmlToken.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/spi/AbstractQNameValidator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/spi/AssertionCreationException.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/spi/PolicyAssertionCreator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/spi/PolicyAssertionValidator$Fitness.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/spi/PolicyAssertionValidator.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/spi/PrefixMapper.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/subject/PolicyMapKeyConverter.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/subject/WsdlBindingSubject$WsdlMessageType.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/subject/WsdlBindingSubject$WsdlNameScope.class +INFO: Loading Class: com/sun/xml/internal/ws/policy/subject/WsdlBindingSubject.class +INFO: Loading Class: com/sun/xml/internal/ws/protocol/soap/ClientMUTube.class +INFO: Loading Class: com/sun/xml/internal/ws/protocol/soap/MUTube.class +INFO: Loading Class: com/sun/xml/internal/ws/protocol/soap/MessageCreationException.class +INFO: Loading Class: com/sun/xml/internal/ws/protocol/soap/ServerMUTube.class +INFO: Loading Class: com/sun/xml/internal/ws/protocol/soap/VersionMismatchException.class +INFO: Loading Class: com/sun/xml/internal/ws/protocol/xml/XMLMessageException.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/AddressingMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/BindingApiMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/ClientMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/DispatchMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/EncodingMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/HandlerMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/HttpserverMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/ManagementMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/ModelerMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/PolicyMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/ProviderApiMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/SenderMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/ServerMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/SoapMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/StreamingMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/TubelineassemblyMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/UtilMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/WsdlmodelMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/WsservletMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/resources/XmlmessageMessages.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/MetroConfig.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/ObjectFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/TubeFactoryConfig.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/TubeFactoryList.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/TubelineDefinition.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/TubelineFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/TubelineFeatureReader.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/TubelineMapping.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/Tubelines.class +INFO: Loading Class: com/sun/xml/internal/ws/runtime/config/package-info.class +INFO: Loading Class: com/sun/xml/internal/ws/server/AbstractMultiInstanceResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/server/AbstractWebServiceContext.class +INFO: Loading Class: com/sun/xml/internal/ws/server/DefaultResourceInjector.class +INFO: Loading Class: com/sun/xml/internal/ws/server/DraconianValidationErrorHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/server/DummyWebServiceFeature.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointAwareTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointFactory$EntityResolverImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointMessageContextImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointMessageContextImpl$EntrySet$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointMessageContextImpl$EntrySet.class +INFO: Loading Class: com/sun/xml/internal/ws/server/EndpointMessageContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/InvokerTube$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/InvokerTube$2.class +INFO: Loading Class: com/sun/xml/internal/ws/server/InvokerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/MonitorBase.class +INFO: Loading Class: com/sun/xml/internal/ws/server/MonitorRootService.class +INFO: Loading Class: com/sun/xml/internal/ws/server/RewritingMOM.class +INFO: Loading Class: com/sun/xml/internal/ws/server/SDDocumentImpl$DocumentLocationResolverImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/SDDocumentImpl$SchemaImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/SDDocumentImpl$WSDLImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/SDDocumentImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/ServerPropertyConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/server/ServerRtException.class +INFO: Loading Class: com/sun/xml/internal/ws/server/ServerSchemaValidationTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/ServiceDefinitionImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/SingletonResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/server/UnsupportedMediaException.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSDLGenResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$2.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$3.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$ComponentWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$EndpointComponentSet$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$EndpointComponentSet.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl$EndpointComponentWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/WSEndpointMOMProxy.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube$AsyncProviderCallbackImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube$AsyncWebServiceContext.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube$FiberResumer.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube$NoSuspendResumer.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube$Resumer.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/AsyncProviderInvokerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/MessageProviderArgumentBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/ProviderArgumentsBuilder$PacketProviderArgumentsBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/ProviderArgumentsBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/ProviderEndpointModel.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/ProviderInvokerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/SOAPProviderArgumentBuilder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/SOAPProviderArgumentBuilder$MessageSource.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/SOAPProviderArgumentBuilder$PayloadSource.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/SOAPProviderArgumentBuilder$SOAPMessageParameter.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/SOAPProviderArgumentBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/SyncProviderInvokerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/XMLProviderArgumentBuilder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/XMLProviderArgumentBuilder$DataSourceParameter.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/XMLProviderArgumentBuilder$PayloadSource.class +INFO: Loading Class: com/sun/xml/internal/ws/server/provider/XMLProviderArgumentBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$AttachmentBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$Body.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$ByteArrayBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$Composite.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$DataHandlerBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$DocLit$PartBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$DocLit.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$Header.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$ImageBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$InputStreamBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$JAXBBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$None.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$NullSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$RpcLit.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$SourceBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$StringBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder$WrappedPartBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointArgumentsBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder$Bare.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder$DocLit.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder$Empty.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder$JAXB.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder$RpcLit.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder$Wrapped.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointResponseMessageBuilder.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointValueSetter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointValueSetter$HolderParam.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointValueSetter$Param.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/EndpointValueSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/Invoker.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/InvokerSource.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/InvokerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/MessageFiller$AttachmentFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/MessageFiller$ByteArrayFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/MessageFiller$DataHandlerFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/MessageFiller$Header.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/MessageFiller$JAXBFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/MessageFiller.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/SEIInvokerTube.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/TieHandler$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/TieHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/ValueGetter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/ValueGetter$2.class +INFO: Loading Class: com/sun/xml/internal/ws/server/sei/ValueGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/ProviderImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/ProviderImpl$2.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/ProviderImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/BindingContext.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/BindingContextFactory$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/BindingContextFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/BindingHelper.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/BindingInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/DatabindingException.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/DatabindingProvider.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/FieldGetter$PrivilegedGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/FieldGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/FieldSetter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/FieldSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/JAXBWrapperAccessor$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/JAXBWrapperAccessor$2.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/JAXBWrapperAccessor.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/MethodGetter$PrivilegedGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/MethodGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/MethodSetter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/MethodSetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/OldBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/PropertyAccessor.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/PropertyGetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/PropertyGetterBase.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/PropertySetter.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/PropertySetterBase.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge$2.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge$ArrayHandler$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge$ArrayHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge$BaseCollectionHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge$CollectionHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/RepeatedElementBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/TypeInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/Utils$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/Utils.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/WrapperAccessor$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/WrapperAccessor.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/WrapperBridge$1.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/WrapperBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/WrapperComposite.class +INFO: Loading Class: com/sun/xml/internal/ws/spi/db/XMLBridge.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/Attributes.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/DOMStreamReader$Scope.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/DOMStreamReader.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/MtomStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/PrefixFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/PrefixFactoryImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/SourceReaderFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/TidyXMLStreamReader.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLReaderException.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLStreamReaderException.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLStreamReaderUtil$AttributesImpl$AttributeInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLStreamReaderUtil$AttributesImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLStreamReaderUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLStreamWriterException.class +INFO: Loading Class: com/sun/xml/internal/ws/streaming/XMLStreamWriterUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/DeferredTransportPipe.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/Headers$1.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/Headers$InsensitiveComparator.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/Headers.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/DeploymentDescriptorParser$AdapterFactory.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/DeploymentDescriptorParser.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$1.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$2.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$3.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$AsyncTransport.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$CompletionCallback.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$DummyList.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$Http10OutputStream.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$HttpToolkit.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter$Oneway.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapterList$1.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapterList$PortInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpAdapterList.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/HttpMetadataPublisher.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/ResourceLoader.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/WSHTTPConnection.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpClientTransport$1.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpClientTransport$HttpClientVerifier.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpClientTransport$LocalhostHttpClientVerifier.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpClientTransport$WSChunkedOuputStream.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpClientTransport.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpResponseProperties.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/client/HttpTransportPipe.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/EndpointImpl$InvokerImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/EndpointImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/HttpEndpoint.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/PortableConnectionImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/PortableHttpHandler$HttpHandlerRunnable.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/PortableHttpHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerAdapter.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerAdapterList.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerConnectionImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerConnectionImpl$LWHSInputStream.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerConnectionImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerContainer$1.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerContainer.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerMgr$ServerState.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/ServerMgr.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/WSHttpHandler$HttpHandlerRunnable.class +INFO: Loading Class: com/sun/xml/internal/ws/transport/http/server/WSHttpHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ASCIIUtility.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ByteArrayBuffer.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ByteArrayDataSource.class +INFO: Loading Class: com/sun/xml/internal/ws/util/CompletedFuture.class +INFO: Loading Class: com/sun/xml/internal/ws/util/Constants.class +INFO: Loading Class: com/sun/xml/internal/ws/util/DOMUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/util/FastInfosetReflection.class +INFO: Loading Class: com/sun/xml/internal/ws/util/FastInfosetUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/util/HandlerAnnotationInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/util/HandlerAnnotationProcessor.class +INFO: Loading Class: com/sun/xml/internal/ws/util/InjectionPlan$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/InjectionPlan$Compositor.class +INFO: Loading Class: com/sun/xml/internal/ws/util/InjectionPlan$FieldInjectionPlan$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/InjectionPlan$FieldInjectionPlan.class +INFO: Loading Class: com/sun/xml/internal/ws/util/InjectionPlan$MethodInjectionPlan.class +INFO: Loading Class: com/sun/xml/internal/ws/util/InjectionPlan.class +INFO: Loading Class: com/sun/xml/internal/ws/util/JAXWSUtils.class +INFO: Loading Class: com/sun/xml/internal/ws/util/MetadataUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/util/NamespaceSupport$Context.class +INFO: Loading Class: com/sun/xml/internal/ws/util/NamespaceSupport.class +INFO: Loading Class: com/sun/xml/internal/ws/util/NoCloseInputStream.class +INFO: Loading Class: com/sun/xml/internal/ws/util/NoCloseOutputStream.class +INFO: Loading Class: com/sun/xml/internal/ws/util/Pool$Marshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/util/Pool$TubePool.class +INFO: Loading Class: com/sun/xml/internal/ws/util/Pool$Unmarshaller.class +INFO: Loading Class: com/sun/xml/internal/ws/util/Pool.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap$Entry.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap$EntryIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap$EntrySet.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap$HashIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap$ValueIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/QNameMap.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ReadAllStream$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ReadAllStream$FileStream.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ReadAllStream$MemoryStream$Chunk.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ReadAllStream$MemoryStream.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ReadAllStream.class +INFO: Loading Class: com/sun/xml/internal/ws/util/RuntimeVersion.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceConfigurationError.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder$ComponentExWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder$CompositeIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder$LazyIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder$ServiceName.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder$ServiceNameIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/ServiceFinder.class +INFO: Loading Class: com/sun/xml/internal/ws/util/StreamUtils.class +INFO: Loading Class: com/sun/xml/internal/ws/util/StringUtils.class +INFO: Loading Class: com/sun/xml/internal/ws/util/UtilException.class +INFO: Loading Class: com/sun/xml/internal/ws/util/Version.class +INFO: Loading Class: com/sun/xml/internal/ws/util/VersionUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/util/exception/JAXWSExceptionBase.class +INFO: Loading Class: com/sun/xml/internal/ws/util/exception/LocatableWebServiceException.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/AbstractSchemaValidationTube$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/AbstractSchemaValidationTube$2.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/AbstractSchemaValidationTube$MetadataResolverImpl$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/AbstractSchemaValidationTube$MetadataResolverImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/AbstractSchemaValidationTube$ValidationDocumentAddressResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/AbstractSchemaValidationTube.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/DumpTube$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/DumpTube.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/StandalonePipeAssembler.class +INFO: Loading Class: com/sun/xml/internal/ws/util/pipe/StandaloneTubeAssembler.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/CDATA.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/ContentHandlerToXMLStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/DummyLocation.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/NamedNodeMapIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/NamespaceContextExAdaper.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/NodeListIterator.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/StAXResult.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/StAXSource$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/StAXSource.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLReaderComposite$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLReaderComposite$2.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLReaderComposite$ElemInfo.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLReaderComposite$State.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLReaderComposite.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLStreamReaderFilter.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLStreamReaderToXMLStreamWriter.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XMLStreamWriterFilter.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XmlUtil$1.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XmlUtil$2.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XmlUtil$3.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XmlUtil$4.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XmlUtil$5.class +INFO: Loading Class: com/sun/xml/internal/ws/util/xml/XmlUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/ActionBasedOperationFinder.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/ActionBasedOperationSignature.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/DispatchException.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/OperationDispatcher.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/PayloadQNameBasedOperationFinder.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/SDDocumentResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/SOAPActionBasedOperationFinder.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/WSDLOperationFinder$WSDLOperationMappingImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/WSDLOperationFinder.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/DelegatingParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/EntityResolverWrapper.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/ErrorHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/FoolProofParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/InaccessibleWSDLException$Builder.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/InaccessibleWSDLException.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/MIMEConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/MemberSubmissionAddressingWSDLParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/MexEntityResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/ParserUtil.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/RuntimeWSDLParser$1.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/RuntimeWSDLParser$BindingMode.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/RuntimeWSDLParser.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/SOAPConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/W3CAddressingMetadataWSDLParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/W3CAddressingWSDLParserExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/WSDLConstants.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/WSDLParserExtensionContextImpl.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/parser/WSDLParserExtensionFacade.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/DocumentLocationResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/TXWContentHandler.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/UsingAddressing.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/W3CAddressingMetadataWSDLGeneratorExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/W3CAddressingWSDLGeneratorExtension.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLGenerator$1.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLGenerator$CommentFilter.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLGenerator$JAXWSOutputSchemaResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLGenerator.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLGeneratorExtensionFacade.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLPatcher.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/WSDLResolver.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Binding.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/BindingOperationType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Definitions.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Documented.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Fault.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/FaultType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Import.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Message.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/OpenAtts.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Operation.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/ParamType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Part.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Port.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/PortType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Service.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/StartWithExtensionsType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/Types.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/http/Address.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/http/Binding.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/http/Operation.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/http/package-info.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/package-info.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/Body.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/BodyType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/Header.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/HeaderFault.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/SOAPAddress.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/SOAPBinding.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/SOAPFault.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/SOAPOperation.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap/package-info.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/Body.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/BodyType.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/Header.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/HeaderFault.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/SOAPAddress.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/SOAPBinding.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/SOAPFault.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/SOAPOperation.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/soap12/package-info.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/xsd/Import.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/xsd/Schema.class +INFO: Loading Class: com/sun/xml/internal/ws/wsdl/writer/document/xsd/package-info.class +INFO: Loading Class: java/applet/Applet$AccessibleApplet.class +INFO: Loading Class: java/applet/AppletContext.class +INFO: Loading Class: java/applet/AppletStub.class +INFO: Loading Class: java/applet/AudioClip.class +INFO: Loading Class: java/awt/AWTError.class +INFO: Loading Class: java/awt/AWTException.class +INFO: Loading Class: java/awt/AWTPermission.class +INFO: Loading Class: java/awt/AttributeValue.class +INFO: Loading Class: java/awt/BufferCapabilities$FlipContents.class +INFO: Loading Class: java/awt/BufferCapabilities.class +INFO: Loading Class: java/awt/Button$AccessibleAWTButton.class +INFO: Loading Class: java/awt/Button.class +INFO: Loading Class: java/awt/Canvas$AccessibleAWTCanvas.class +INFO: Loading Class: java/awt/CardLayout$Card.class +INFO: Loading Class: java/awt/Checkbox$AccessibleAWTCheckbox.class +INFO: Loading Class: java/awt/Checkbox.class +INFO: Loading Class: java/awt/CheckboxGroup.class +INFO: Loading Class: java/awt/CheckboxMenuItem$1.class +INFO: Loading Class: java/awt/CheckboxMenuItem$AccessibleAWTCheckboxMenuItem.class +INFO: Loading Class: java/awt/CheckboxMenuItem.class +INFO: Loading Class: java/awt/Choice$AccessibleAWTChoice.class +INFO: Loading Class: java/awt/Choice.class +INFO: Loading Class: java/awt/ColorPaintContext.class +INFO: Loading Class: java/awt/Component$2.class +INFO: Loading Class: java/awt/Component$4.class +INFO: Loading Class: java/awt/Component$5.class +INFO: Loading Class: java/awt/Component$AccessibleAWTComponent$AccessibleAWTComponentHandler.class +INFO: Loading Class: java/awt/Component$AccessibleAWTComponent$AccessibleAWTFocusHandler.class +INFO: Loading Class: java/awt/Component$AccessibleAWTComponent.class +INFO: Loading Class: java/awt/Component$BaselineResizeBehavior.class +INFO: Loading Class: java/awt/Component$BltBufferStrategy.class +INFO: Loading Class: java/awt/Component$BltSubRegionBufferStrategy.class +INFO: Loading Class: java/awt/Component$FlipBufferStrategy.class +INFO: Loading Class: java/awt/Component$FlipSubRegionBufferStrategy.class +INFO: Loading Class: java/awt/Component$ProxyCapabilities.class +INFO: Loading Class: java/awt/Component$SingleBufferStrategy.class +INFO: Loading Class: java/awt/CompositeContext.class +INFO: Loading Class: java/awt/Container$2.class +INFO: Loading Class: java/awt/Container$3$1.class +INFO: Loading Class: java/awt/Container$3.class +INFO: Loading Class: java/awt/Container$AccessibleAWTContainer$AccessibleContainerHandler.class +INFO: Loading Class: java/awt/Container$AccessibleAWTContainer.class +INFO: Loading Class: java/awt/Container$DropTargetEventTargetFilter.class +INFO: Loading Class: java/awt/Container$WakingRunnable.class +INFO: Loading Class: java/awt/Cursor$2.class +INFO: Loading Class: java/awt/Cursor$3.class +INFO: Loading Class: java/awt/Cursor$CursorDisposer.class +INFO: Loading Class: java/awt/DefaultKeyboardFocusManager$2.class +INFO: Loading Class: java/awt/Desktop$Action.class +INFO: Loading Class: java/awt/Desktop.class +INFO: Loading Class: java/awt/Dialog$2.class +INFO: Loading Class: java/awt/Dialog$4.class +INFO: Loading Class: java/awt/Dialog$AccessibleAWTDialog.class +INFO: Loading Class: java/awt/DisplayMode.class +INFO: Loading Class: java/awt/EventQueue$1AWTInvocationLock.class +INFO: Loading Class: java/awt/EventQueue$3$1.class +INFO: Loading Class: java/awt/FileDialog$1.class +INFO: Loading Class: java/awt/FileDialog.class +INFO: Loading Class: java/awt/FocusManager.class +INFO: Loading Class: java/awt/Font$1.class +INFO: Loading Class: java/awt/Font$2.class +INFO: Loading Class: java/awt/Font$3.class +INFO: Loading Class: java/awt/FontFormatException.class +INFO: Loading Class: java/awt/Frame$AccessibleAWTFrame.class +INFO: Loading Class: java/awt/GradientPaint.class +INFO: Loading Class: java/awt/GradientPaintContext.class +INFO: Loading Class: java/awt/GraphicsCallback$PaintAllCallback.class +INFO: Loading Class: java/awt/GraphicsCallback$PaintHeavyweightComponentsCallback.class +INFO: Loading Class: java/awt/GraphicsCallback$PeerPaintCallback.class +INFO: Loading Class: java/awt/GraphicsCallback$PeerPrintCallback.class +INFO: Loading Class: java/awt/GraphicsCallback$PrintAllCallback.class +INFO: Loading Class: java/awt/GraphicsCallback$PrintCallback.class +INFO: Loading Class: java/awt/GraphicsCallback$PrintHeavyweightComponentsCallback.class +INFO: Loading Class: java/awt/GraphicsConfigTemplate.class +INFO: Loading Class: java/awt/GraphicsConfiguration$DefaultBufferCapabilities.class +INFO: Loading Class: java/awt/GraphicsDevice$1.class +INFO: Loading Class: java/awt/GraphicsDevice$WindowTranslucency.class +INFO: Loading Class: java/awt/GridBagConstraints.class +INFO: Loading Class: java/awt/GridBagLayout$1.class +INFO: Loading Class: java/awt/GridBagLayout.class +INFO: Loading Class: java/awt/GridBagLayoutInfo.class +INFO: Loading Class: java/awt/GridLayout.class +INFO: Loading Class: java/awt/HeadlessException.class +INFO: Loading Class: java/awt/IllegalComponentStateException.class +INFO: Loading Class: java/awt/JobAttributes$DefaultSelectionType.class +INFO: Loading Class: java/awt/JobAttributes$DestinationType.class +INFO: Loading Class: java/awt/JobAttributes$DialogType.class +INFO: Loading Class: java/awt/JobAttributes$MultipleDocumentHandlingType.class +INFO: Loading Class: java/awt/JobAttributes$SidesType.class +INFO: Loading Class: java/awt/JobAttributes.class +INFO: Loading Class: java/awt/KeyboardFocusManager$4.class +INFO: Loading Class: java/awt/KeyboardFocusManager$5.class +INFO: Loading Class: java/awt/Label$AccessibleAWTLabel.class +INFO: Loading Class: java/awt/LightweightDispatcher$3.class +INFO: Loading Class: java/awt/LinearGradientPaint.class +INFO: Loading Class: java/awt/LinearGradientPaintContext.class +INFO: Loading Class: java/awt/List$AccessibleAWTList$AccessibleAWTListChild.class +INFO: Loading Class: java/awt/List$AccessibleAWTList.class +INFO: Loading Class: java/awt/List.class +INFO: Loading Class: java/awt/Menu$1.class +INFO: Loading Class: java/awt/Menu$AccessibleAWTMenu.class +INFO: Loading Class: java/awt/Menu.class +INFO: Loading Class: java/awt/MenuBar$1.class +INFO: Loading Class: java/awt/MenuBar$AccessibleAWTMenuBar.class +INFO: Loading Class: java/awt/MenuComponent$1.class +INFO: Loading Class: java/awt/MenuComponent$AccessibleAWTMenuComponent.class +INFO: Loading Class: java/awt/MenuItem$1.class +INFO: Loading Class: java/awt/MenuItem$AccessibleAWTMenuItem.class +INFO: Loading Class: java/awt/MenuItem.class +INFO: Loading Class: java/awt/MenuShortcut.class +INFO: Loading Class: java/awt/ModalEventFilter$DocumentModalEventFilter.class +INFO: Loading Class: java/awt/ModalEventFilter$ToolkitModalEventFilter.class +INFO: Loading Class: java/awt/MouseInfo.class +INFO: Loading Class: java/awt/MultipleGradientPaint$ColorSpaceType.class +INFO: Loading Class: java/awt/MultipleGradientPaint$CycleMethod.class +INFO: Loading Class: java/awt/MultipleGradientPaint.class +INFO: Loading Class: java/awt/MultipleGradientPaintContext.class +INFO: Loading Class: java/awt/PageAttributes$ColorType.class +INFO: Loading Class: java/awt/PageAttributes$MediaType.class +INFO: Loading Class: java/awt/PageAttributes$OrientationRequestedType.class +INFO: Loading Class: java/awt/PageAttributes$OriginType.class +INFO: Loading Class: java/awt/PageAttributes$PrintQualityType.class +INFO: Loading Class: java/awt/PageAttributes.class +INFO: Loading Class: java/awt/PaintContext.class +INFO: Loading Class: java/awt/Panel$AccessibleAWTPanel.class +INFO: Loading Class: java/awt/PeerFixer.class +INFO: Loading Class: java/awt/PointerInfo.class +INFO: Loading Class: java/awt/Polygon$PolygonPathIterator.class +INFO: Loading Class: java/awt/Polygon.class +INFO: Loading Class: java/awt/PopupMenu$1.class +INFO: Loading Class: java/awt/PopupMenu$AccessibleAWTPopupMenu.class +INFO: Loading Class: java/awt/PopupMenu.class +INFO: Loading Class: java/awt/PrintJob.class +INFO: Loading Class: java/awt/RadialGradientPaint.class +INFO: Loading Class: java/awt/RadialGradientPaintContext.class +INFO: Loading Class: java/awt/Robot$1.class +INFO: Loading Class: java/awt/Robot$RobotDisposer.class +INFO: Loading Class: java/awt/Robot.class +INFO: Loading Class: java/awt/ScrollPane$AccessibleAWTScrollPane.class +INFO: Loading Class: java/awt/ScrollPane$PeerFixer.class +INFO: Loading Class: java/awt/ScrollPane.class +INFO: Loading Class: java/awt/ScrollPaneAdjustable$1.class +INFO: Loading Class: java/awt/ScrollPaneAdjustable.class +INFO: Loading Class: java/awt/Scrollbar$AccessibleAWTScrollBar.class +INFO: Loading Class: java/awt/Scrollbar.class +INFO: Loading Class: java/awt/SequencedEvent$1.class +INFO: Loading Class: java/awt/SequencedEvent$2.class +INFO: Loading Class: java/awt/SplashScreen$1.class +INFO: Loading Class: java/awt/SystemTray$1.class +INFO: Loading Class: java/awt/SystemTray.class +INFO: Loading Class: java/awt/TextArea$AccessibleAWTTextArea.class +INFO: Loading Class: java/awt/TextArea.class +INFO: Loading Class: java/awt/TextComponent$AccessibleAWTTextComponent.class +INFO: Loading Class: java/awt/TextComponent.class +INFO: Loading Class: java/awt/TextField$AccessibleAWTTextField.class +INFO: Loading Class: java/awt/TextField.class +INFO: Loading Class: java/awt/TexturePaint.class +INFO: Loading Class: java/awt/TexturePaintContext$Any.class +INFO: Loading Class: java/awt/TexturePaintContext$Byte.class +INFO: Loading Class: java/awt/TexturePaintContext$ByteFilter.class +INFO: Loading Class: java/awt/TexturePaintContext$Int.class +INFO: Loading Class: java/awt/TexturePaintContext.class +INFO: Loading Class: java/awt/Toolkit$DesktopPropertyChangeSupport$1.class +INFO: Loading Class: java/awt/TrayIcon$1.class +INFO: Loading Class: java/awt/TrayIcon$MessageType.class +INFO: Loading Class: java/awt/WaitDispatchSupport$3.class +INFO: Loading Class: java/awt/WaitDispatchSupport$4.class +INFO: Loading Class: java/awt/Window$AccessibleAWTWindow.class +INFO: Loading Class: java/awt/color/CMMException.class +INFO: Loading Class: java/awt/color/ICC_Profile$2.class +INFO: Loading Class: java/awt/color/ICC_Profile$3.class +INFO: Loading Class: java/awt/color/ICC_Profile$4.class +INFO: Loading Class: java/awt/color/ICC_ProfileGray.class +INFO: Loading Class: java/awt/color/ProfileDataException.class +INFO: Loading Class: java/awt/datatransfer/Clipboard$1.class +INFO: Loading Class: java/awt/datatransfer/Clipboard$2.class +INFO: Loading Class: java/awt/datatransfer/DataFlavor$TextFlavorComparator.class +INFO: Loading Class: java/awt/datatransfer/FlavorEvent.class +INFO: Loading Class: java/awt/datatransfer/FlavorListener.class +INFO: Loading Class: java/awt/datatransfer/StringSelection.class +INFO: Loading Class: java/awt/datatransfer/SystemFlavorMap$SoftCache.class +INFO: Loading Class: java/awt/datatransfer/UnsupportedFlavorException.class +INFO: Loading Class: java/awt/dnd/Autoscroll.class +INFO: Loading Class: java/awt/dnd/DnDConstants.class +INFO: Loading Class: java/awt/dnd/DnDEventMulticaster.class +INFO: Loading Class: java/awt/dnd/DragGestureEvent.class +INFO: Loading Class: java/awt/dnd/DragGestureListener.class +INFO: Loading Class: java/awt/dnd/DragGestureRecognizer.class +INFO: Loading Class: java/awt/dnd/DragSource.class +INFO: Loading Class: java/awt/dnd/DragSourceAdapter.class +INFO: Loading Class: java/awt/dnd/DragSourceContext$1.class +INFO: Loading Class: java/awt/dnd/DragSourceContext.class +INFO: Loading Class: java/awt/dnd/DragSourceDragEvent.class +INFO: Loading Class: java/awt/dnd/DragSourceDropEvent.class +INFO: Loading Class: java/awt/dnd/DragSourceEvent.class +INFO: Loading Class: java/awt/dnd/DragSourceListener.class +INFO: Loading Class: java/awt/dnd/DragSourceMotionListener.class +INFO: Loading Class: java/awt/dnd/DropTarget$DropTargetAutoScroller.class +INFO: Loading Class: java/awt/dnd/DropTargetAdapter.class +INFO: Loading Class: java/awt/dnd/DropTargetContext$TransferableProxy.class +INFO: Loading Class: java/awt/dnd/DropTargetDragEvent.class +INFO: Loading Class: java/awt/dnd/DropTargetDropEvent.class +INFO: Loading Class: java/awt/dnd/DropTargetEvent.class +INFO: Loading Class: java/awt/dnd/InvalidDnDOperationException.class +INFO: Loading Class: java/awt/dnd/MouseDragGestureRecognizer.class +INFO: Loading Class: java/awt/dnd/SerializationTester$1.class +INFO: Loading Class: java/awt/dnd/SerializationTester.class +INFO: Loading Class: java/awt/dnd/peer/DropTargetContextPeer.class +INFO: Loading Class: java/awt/event/ContainerAdapter.class +INFO: Loading Class: java/awt/event/HierarchyBoundsAdapter.class +INFO: Loading Class: java/awt/event/InvocationEvent$1.class +INFO: Loading Class: java/awt/event/ItemEvent.class +INFO: Loading Class: java/awt/event/TextEvent.class +INFO: Loading Class: java/awt/font/CharArrayIterator.class +INFO: Loading Class: java/awt/font/GlyphJustificationInfo.class +INFO: Loading Class: java/awt/font/GlyphMetrics.class +INFO: Loading Class: java/awt/font/GraphicAttribute.class +INFO: Loading Class: java/awt/font/ImageGraphicAttribute.class +INFO: Loading Class: java/awt/font/LayoutPath.class +INFO: Loading Class: java/awt/font/LineBreakMeasurer.class +INFO: Loading Class: java/awt/font/MultipleMaster.class +INFO: Loading Class: java/awt/font/NumericShaper$1.class +INFO: Loading Class: java/awt/font/NumericShaper$Range$1.class +INFO: Loading Class: java/awt/font/NumericShaper$Range.class +INFO: Loading Class: java/awt/font/NumericShaper.class +INFO: Loading Class: java/awt/font/OpenType.class +INFO: Loading Class: java/awt/font/ShapeGraphicAttribute.class +INFO: Loading Class: java/awt/font/StyledParagraph.class +INFO: Loading Class: java/awt/font/TextHitInfo.class +INFO: Loading Class: java/awt/font/TextJustifier.class +INFO: Loading Class: java/awt/font/TextLayout$CaretPolicy.class +INFO: Loading Class: java/awt/font/TextLayout.class +INFO: Loading Class: java/awt/font/TextLine$1.class +INFO: Loading Class: java/awt/font/TextLine$2.class +INFO: Loading Class: java/awt/font/TextLine$3.class +INFO: Loading Class: java/awt/font/TextLine$4.class +INFO: Loading Class: java/awt/font/TextLine$Function.class +INFO: Loading Class: java/awt/font/TextLine$TextLineMetrics.class +INFO: Loading Class: java/awt/font/TextLine.class +INFO: Loading Class: java/awt/font/TextMeasurer.class +INFO: Loading Class: java/awt/font/TransformAttribute.class +INFO: Loading Class: java/awt/geom/Arc2D$Double.class +INFO: Loading Class: java/awt/geom/Arc2D$Float.class +INFO: Loading Class: java/awt/geom/Arc2D.class +INFO: Loading Class: java/awt/geom/ArcIterator.class +INFO: Loading Class: java/awt/geom/Area.class +INFO: Loading Class: java/awt/geom/AreaIterator.class +INFO: Loading Class: java/awt/geom/CubicCurve2D$Double.class +INFO: Loading Class: java/awt/geom/CubicCurve2D$Float.class +INFO: Loading Class: java/awt/geom/CubicCurve2D.class +INFO: Loading Class: java/awt/geom/CubicIterator.class +INFO: Loading Class: java/awt/geom/Ellipse2D$Double.class +INFO: Loading Class: java/awt/geom/Ellipse2D$Float.class +INFO: Loading Class: java/awt/geom/Ellipse2D.class +INFO: Loading Class: java/awt/geom/EllipseIterator.class +INFO: Loading Class: java/awt/geom/FlatteningPathIterator.class +INFO: Loading Class: java/awt/geom/IllegalPathStateException.class +INFO: Loading Class: java/awt/geom/Line2D$Double.class +INFO: Loading Class: java/awt/geom/Line2D$Float.class +INFO: Loading Class: java/awt/geom/Line2D.class +INFO: Loading Class: java/awt/geom/LineIterator.class +INFO: Loading Class: java/awt/geom/NoninvertibleTransformException.class +INFO: Loading Class: java/awt/geom/Path2D$Double$CopyIterator.class +INFO: Loading Class: java/awt/geom/Path2D$Double$TxIterator.class +INFO: Loading Class: java/awt/geom/Path2D$Double.class +INFO: Loading Class: java/awt/geom/Path2D$Float$CopyIterator.class +INFO: Loading Class: java/awt/geom/Path2D$Float$TxIterator.class +INFO: Loading Class: java/awt/geom/Path2D$Iterator.class +INFO: Loading Class: java/awt/geom/PathIterator.class +INFO: Loading Class: java/awt/geom/QuadCurve2D$Double.class +INFO: Loading Class: java/awt/geom/QuadCurve2D$Float.class +INFO: Loading Class: java/awt/geom/QuadCurve2D.class +INFO: Loading Class: java/awt/geom/QuadIterator.class +INFO: Loading Class: java/awt/geom/RectIterator.class +INFO: Loading Class: java/awt/geom/RoundRectIterator.class +INFO: Loading Class: java/awt/geom/RoundRectangle2D$Double.class +INFO: Loading Class: java/awt/geom/RoundRectangle2D$Float.class +INFO: Loading Class: java/awt/geom/RoundRectangle2D.class +INFO: Loading Class: java/awt/im/InputMethodHighlight.class +INFO: Loading Class: java/awt/im/InputSubset.class +INFO: Loading Class: java/awt/image/AffineTransformOp.class +INFO: Loading Class: java/awt/image/AreaAveragingScaleFilter.class +INFO: Loading Class: java/awt/image/BandCombineOp.class +INFO: Loading Class: java/awt/image/BandedSampleModel.class +INFO: Loading Class: java/awt/image/BufferedImageFilter.class +INFO: Loading Class: java/awt/image/BufferedImageOp.class +INFO: Loading Class: java/awt/image/ByteLookupTable.class +INFO: Loading Class: java/awt/image/ColorConvertOp.class +INFO: Loading Class: java/awt/image/ComponentColorModel.class +INFO: Loading Class: java/awt/image/ConvolveOp.class +INFO: Loading Class: java/awt/image/CropImageFilter.class +INFO: Loading Class: java/awt/image/DataBufferDouble.class +INFO: Loading Class: java/awt/image/DataBufferFloat.class +INFO: Loading Class: java/awt/image/DataBufferShort.class +INFO: Loading Class: java/awt/image/DataBufferUShort.class +INFO: Loading Class: java/awt/image/ImagingOpException.class +INFO: Loading Class: java/awt/image/Kernel.class +INFO: Loading Class: java/awt/image/LookupOp.class +INFO: Loading Class: java/awt/image/LookupTable.class +INFO: Loading Class: java/awt/image/MemoryImageSource.class +INFO: Loading Class: java/awt/image/MultiPixelPackedSampleModel.class +INFO: Loading Class: java/awt/image/PixelGrabber.class +INFO: Loading Class: java/awt/image/RasterFormatException.class +INFO: Loading Class: java/awt/image/RasterOp.class +INFO: Loading Class: java/awt/image/ReplicateScaleFilter.class +INFO: Loading Class: java/awt/image/RescaleOp.class +INFO: Loading Class: java/awt/image/ShortLookupTable.class +INFO: Loading Class: java/awt/image/TileObserver.class +INFO: Loading Class: java/awt/image/renderable/ContextualRenderedImageFactory.class +INFO: Loading Class: java/awt/image/renderable/ParameterBlock.class +INFO: Loading Class: java/awt/image/renderable/RenderContext.class +INFO: Loading Class: java/awt/image/renderable/RenderableImage.class +INFO: Loading Class: java/awt/image/renderable/RenderableImageOp.class +INFO: Loading Class: java/awt/image/renderable/RenderableImageProducer.class +INFO: Loading Class: java/awt/image/renderable/RenderedImageFactory.class +INFO: Loading Class: java/awt/peer/ButtonPeer.class +INFO: Loading Class: java/awt/peer/CheckboxMenuItemPeer.class +INFO: Loading Class: java/awt/peer/CheckboxPeer.class +INFO: Loading Class: java/awt/peer/ChoicePeer.class +INFO: Loading Class: java/awt/peer/DesktopPeer.class +INFO: Loading Class: java/awt/peer/FileDialogPeer.class +INFO: Loading Class: java/awt/peer/FontPeer.class +INFO: Loading Class: java/awt/peer/ListPeer.class +INFO: Loading Class: java/awt/peer/MenuBarPeer.class +INFO: Loading Class: java/awt/peer/MenuComponentPeer.class +INFO: Loading Class: java/awt/peer/MenuItemPeer.class +INFO: Loading Class: java/awt/peer/MenuPeer.class +INFO: Loading Class: java/awt/peer/MouseInfoPeer.class +INFO: Loading Class: java/awt/peer/PopupMenuPeer.class +INFO: Loading Class: java/awt/peer/RobotPeer.class +INFO: Loading Class: java/awt/peer/ScrollPanePeer.class +INFO: Loading Class: java/awt/peer/ScrollbarPeer.class +INFO: Loading Class: java/awt/peer/SystemTrayPeer.class +INFO: Loading Class: java/awt/peer/TextAreaPeer.class +INFO: Loading Class: java/awt/peer/TextComponentPeer.class +INFO: Loading Class: java/awt/peer/TextFieldPeer.class +INFO: Loading Class: java/awt/peer/TrayIconPeer.class +INFO: Loading Class: java/awt/print/Book$BookPage.class +INFO: Loading Class: java/awt/print/Book.class +INFO: Loading Class: java/awt/print/PageFormat.class +INFO: Loading Class: java/awt/print/Pageable.class +INFO: Loading Class: java/awt/print/Paper.class +INFO: Loading Class: java/awt/print/Printable.class +INFO: Loading Class: java/awt/print/PrinterAbortException.class +INFO: Loading Class: java/awt/print/PrinterException.class +INFO: Loading Class: java/awt/print/PrinterIOException.class +INFO: Loading Class: java/awt/print/PrinterJob$1.class +INFO: Loading Class: java/awt/print/PrinterJob.class +INFO: Loading Class: java/beans/AppletInitializer.class +INFO: Loading Class: java/beans/BeanDescriptor.class +INFO: Loading Class: java/beans/BeanInfo.class +INFO: Loading Class: java/beans/Beans.class +INFO: Loading Class: java/beans/BeansAppletContext.class +INFO: Loading Class: java/beans/BeansAppletStub.class +INFO: Loading Class: java/beans/ConstructorProperties.class +INFO: Loading Class: java/beans/Customizer.class +INFO: Loading Class: java/beans/DefaultPersistenceDelegate.class +INFO: Loading Class: java/beans/DesignMode.class +INFO: Loading Class: java/beans/Encoder.class +INFO: Loading Class: java/beans/EventHandler$1.class +INFO: Loading Class: java/beans/EventHandler$2.class +INFO: Loading Class: java/beans/EventHandler.class +INFO: Loading Class: java/beans/EventSetDescriptor.class +INFO: Loading Class: java/beans/ExceptionListener.class +INFO: Loading Class: java/beans/Expression.class +INFO: Loading Class: java/beans/FeatureDescriptor.class +INFO: Loading Class: java/beans/GenericBeanInfo.class +INFO: Loading Class: java/beans/IndexedPropertyChangeEvent.class +INFO: Loading Class: java/beans/IndexedPropertyDescriptor.class +INFO: Loading Class: java/beans/IntrospectionException.class +INFO: Loading Class: java/beans/Introspector.class +INFO: Loading Class: java/beans/MetaData$1.class +INFO: Loading Class: java/beans/MetaData$ArrayPersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$EnumPersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$NullPersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$PrimitivePersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$ProxyPersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$StaticFieldsPersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_AWTKeyStroke_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_BorderLayout_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_CardLayout_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_Choice_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_Component_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_Container_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_Font_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_GridBagLayout_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_Insets_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_List_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_MenuBar_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_MenuShortcut_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_Menu_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_SystemColor_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_awt_font_TextAttribute_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_beans_beancontext_BeanContextSupport_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_lang_Class_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_lang_String_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_lang_reflect_Field_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_lang_reflect_Method_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_sql_Timestamp_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_AbstractCollection_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_AbstractList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_AbstractMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collection_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedCollection_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedRandomAccessList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedSortedMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$CheckedSortedSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$EmptyList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$EmptyMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$EmptySet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SingletonList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SingletonMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SingletonSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedCollection_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedRandomAccessList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedSortedMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$SynchronizedSortedSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableCollection_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableRandomAccessList_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableSortedMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections$UnmodifiableSortedSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Collections.class +INFO: Loading Class: java/beans/MetaData$java_util_Date_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_EnumMap_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_EnumSet_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Hashtable_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_List_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$java_util_Map_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_Box_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_DefaultComboBoxModel_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_DefaultListModel_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_JFrame_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_JMenu_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_JTabbedPane_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_ToolTipManager_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_border_MatteBorder_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$javax_swing_tree_DefaultMutableTreeNode_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData$sun_swing_PrintColorUIResource_PersistenceDelegate.class +INFO: Loading Class: java/beans/MetaData.class +INFO: Loading Class: java/beans/MethodDescriptor.class +INFO: Loading Class: java/beans/MethodRef.class +INFO: Loading Class: java/beans/NameGenerator.class +INFO: Loading Class: java/beans/ObjectInputStreamWithLoader.class +INFO: Loading Class: java/beans/ParameterDescriptor.class +INFO: Loading Class: java/beans/PersistenceDelegate.class +INFO: Loading Class: java/beans/PropertyChangeSupport$1.class +INFO: Loading Class: java/beans/PropertyDescriptor.class +INFO: Loading Class: java/beans/PropertyEditor.class +INFO: Loading Class: java/beans/PropertyEditorManager.class +INFO: Loading Class: java/beans/PropertyEditorSupport.class +INFO: Loading Class: java/beans/PropertyVetoException.class +INFO: Loading Class: java/beans/SimpleBeanInfo.class +INFO: Loading Class: java/beans/Statement$1.class +INFO: Loading Class: java/beans/Statement$2.class +INFO: Loading Class: java/beans/Statement.class +INFO: Loading Class: java/beans/ThreadGroupContext$1.class +INFO: Loading Class: java/beans/ThreadGroupContext.class +INFO: Loading Class: java/beans/Transient.class +INFO: Loading Class: java/beans/VetoableChangeListener.class +INFO: Loading Class: java/beans/VetoableChangeListenerProxy.class +INFO: Loading Class: java/beans/VetoableChangeSupport$1.class +INFO: Loading Class: java/beans/VetoableChangeSupport$VetoableChangeListenerMap.class +INFO: Loading Class: java/beans/VetoableChangeSupport.class +INFO: Loading Class: java/beans/Visibility.class +INFO: Loading Class: java/beans/WeakIdentityMap$Entry.class +INFO: Loading Class: java/beans/WeakIdentityMap.class +INFO: Loading Class: java/beans/XMLDecoder$1.class +INFO: Loading Class: java/beans/XMLDecoder.class +INFO: Loading Class: java/beans/XMLEncoder$1.class +INFO: Loading Class: java/beans/XMLEncoder$ValueData.class +INFO: Loading Class: java/beans/XMLEncoder.class +INFO: Loading Class: java/beans/beancontext/BeanContext.class +INFO: Loading Class: java/beans/beancontext/BeanContextChild.class +INFO: Loading Class: java/beans/beancontext/BeanContextChildComponentProxy.class +INFO: Loading Class: java/beans/beancontext/BeanContextChildSupport.class +INFO: Loading Class: java/beans/beancontext/BeanContextContainerProxy.class +INFO: Loading Class: java/beans/beancontext/BeanContextEvent.class +INFO: Loading Class: java/beans/beancontext/BeanContextMembershipEvent.class +INFO: Loading Class: java/beans/beancontext/BeanContextMembershipListener.class +INFO: Loading Class: java/beans/beancontext/BeanContextProxy.class +INFO: Loading Class: java/beans/beancontext/BeanContextServiceAvailableEvent.class +INFO: Loading Class: java/beans/beancontext/BeanContextServiceProvider.class +INFO: Loading Class: java/beans/beancontext/BeanContextServiceProviderBeanInfo.class +INFO: Loading Class: java/beans/beancontext/BeanContextServiceRevokedEvent.class +INFO: Loading Class: java/beans/beancontext/BeanContextServiceRevokedListener.class +INFO: Loading Class: java/beans/beancontext/BeanContextServices.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesListener.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesSupport$BCSSChild$BCSSCServiceClassRef.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesSupport$BCSSChild$BCSSCServiceRef.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesSupport$BCSSChild.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesSupport$BCSSProxyServiceProvider.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesSupport$BCSSServiceProvider.class +INFO: Loading Class: java/beans/beancontext/BeanContextServicesSupport.class +INFO: Loading Class: java/beans/beancontext/BeanContextSupport$1.class +INFO: Loading Class: java/beans/beancontext/BeanContextSupport$2.class +INFO: Loading Class: java/beans/beancontext/BeanContextSupport$BCSChild.class +INFO: Loading Class: java/beans/beancontext/BeanContextSupport$BCSIterator.class +INFO: Loading Class: java/beans/beancontext/BeanContextSupport.class +INFO: Loading Class: java/io/BufferedReader$1.class +INFO: Loading Class: java/io/CharArrayReader.class +INFO: Loading Class: java/io/CharArrayWriter.class +INFO: Loading Class: java/io/CharConversionException.class +INFO: Loading Class: java/io/Console$1.class +INFO: Loading Class: java/io/Console$2.class +INFO: Loading Class: java/io/Console$3.class +INFO: Loading Class: java/io/Console$LineReader.class +INFO: Loading Class: java/io/Console.class +INFO: Loading Class: java/io/DeleteOnExitHook$1.class +INFO: Loading Class: java/io/DeleteOnExitHook.class +INFO: Loading Class: java/io/File$TempDirectory.class +INFO: Loading Class: java/io/FileFilter.class +INFO: Loading Class: java/io/FilterWriter.class +INFO: Loading Class: java/io/IOError.class +INFO: Loading Class: java/io/InterruptedIOException.class +INFO: Loading Class: java/io/InvalidClassException.class +INFO: Loading Class: java/io/InvalidObjectException.class +INFO: Loading Class: java/io/LineNumberInputStream.class +INFO: Loading Class: java/io/LineNumberReader.class +INFO: Loading Class: java/io/NotActiveException.class +INFO: Loading Class: java/io/NotSerializableException.class +INFO: Loading Class: java/io/ObjectInputStream$1.class +INFO: Loading Class: java/io/ObjectInputStream$BlockDataInputStream.class +INFO: Loading Class: java/io/ObjectInputStream$Caches.class +INFO: Loading Class: java/io/ObjectInputStream$GetField.class +INFO: Loading Class: java/io/ObjectInputStream$GetFieldImpl.class +INFO: Loading Class: java/io/ObjectInputStream$HandleTable$HandleList.class +INFO: Loading Class: java/io/ObjectInputStream$HandleTable.class +INFO: Loading Class: java/io/ObjectInputStream$PeekInputStream.class +INFO: Loading Class: java/io/ObjectInputStream$ValidationList$1.class +INFO: Loading Class: java/io/ObjectInputStream$ValidationList$Callback.class +INFO: Loading Class: java/io/ObjectInputStream$ValidationList.class +INFO: Loading Class: java/io/ObjectInputValidation.class +INFO: Loading Class: java/io/ObjectOutputStream$1.class +INFO: Loading Class: java/io/ObjectOutputStream$Caches.class +INFO: Loading Class: java/io/ObjectOutputStream$DebugTraceInfoStack.class +INFO: Loading Class: java/io/ObjectOutputStream$PutField.class +INFO: Loading Class: java/io/ObjectOutputStream$PutFieldImpl.class +INFO: Loading Class: java/io/ObjectStreamClass$1.class +INFO: Loading Class: java/io/ObjectStreamClass$3.class +INFO: Loading Class: java/io/ObjectStreamClass$4.class +INFO: Loading Class: java/io/ObjectStreamClass$5.class +INFO: Loading Class: java/io/ObjectStreamClass$ClassDataSlot.class +INFO: Loading Class: java/io/ObjectStreamClass$EntryFuture$1.class +INFO: Loading Class: java/io/ObjectStreamClass$ExceptionInfo.class +INFO: Loading Class: java/io/ObjectStreamClass$MemberSignature.class +INFO: Loading Class: java/io/ObjectStreamException.class +INFO: Loading Class: java/io/OptionalDataException.class +INFO: Loading Class: java/io/PipedInputStream.class +INFO: Loading Class: java/io/PipedOutputStream.class +INFO: Loading Class: java/io/PipedReader.class +INFO: Loading Class: java/io/PipedWriter.class +INFO: Loading Class: java/io/PushbackInputStream.class +INFO: Loading Class: java/io/PushbackReader.class +INFO: Loading Class: java/io/RandomAccessFile$1.class +INFO: Loading Class: java/io/SequenceInputStream.class +INFO: Loading Class: java/io/SerialCallbackContext.class +INFO: Loading Class: java/io/SerializablePermission.class +INFO: Loading Class: java/io/StreamCorruptedException.class +INFO: Loading Class: java/io/StreamTokenizer.class +INFO: Loading Class: java/io/StringBufferInputStream.class +INFO: Loading Class: java/io/SyncFailedException.class +INFO: Loading Class: java/io/UTFDataFormatException.class +INFO: Loading Class: java/io/UncheckedIOException.class +INFO: Loading Class: java/io/WriteAbortedException.class +INFO: Loading Class: java/lang/AbstractMethodError.class +INFO: Loading Class: java/lang/AssertionError.class +INFO: Loading Class: java/lang/AssertionStatusDirectives.class +INFO: Loading Class: java/lang/Byte$ByteCache.class +INFO: Loading Class: java/lang/CharSequence$1CharIterator.class +INFO: Loading Class: java/lang/CharSequence$1CodePointIterator.class +INFO: Loading Class: java/lang/Character$Subset.class +INFO: Loading Class: java/lang/Character$UnicodeBlock.class +INFO: Loading Class: java/lang/Character$UnicodeScript.class +INFO: Loading Class: java/lang/CharacterData00.class +INFO: Loading Class: java/lang/CharacterData01.class +INFO: Loading Class: java/lang/CharacterData02.class +INFO: Loading Class: java/lang/CharacterData0E.class +INFO: Loading Class: java/lang/CharacterDataPrivateUse.class +INFO: Loading Class: java/lang/CharacterDataUndefined.class +INFO: Loading Class: java/lang/CharacterName$1.class +INFO: Loading Class: java/lang/CharacterName.class +INFO: Loading Class: java/lang/Class$2.class +INFO: Loading Class: java/lang/Class$EnclosingMethodInfo.class +INFO: Loading Class: java/lang/Class$MethodArray.class +INFO: Loading Class: java/lang/ClassCircularityError.class +INFO: Loading Class: java/lang/ClassFormatError.class +INFO: Loading Class: java/lang/ClassLoader$1.class +INFO: Loading Class: java/lang/ClassValue$Entry.class +INFO: Loading Class: java/lang/ClassValue$Identity.class +INFO: Loading Class: java/lang/ClassValue$Version.class +INFO: Loading Class: java/lang/ClassValue.class +INFO: Loading Class: java/lang/ConditionalSpecialCasing$Entry.class +INFO: Loading Class: java/lang/ConditionalSpecialCasing.class +INFO: Loading Class: java/lang/Deprecated.class +INFO: Loading Class: java/lang/EnumConstantNotPresentException.class +INFO: Loading Class: java/lang/FunctionalInterface.class +INFO: Loading Class: java/lang/IllegalThreadStateException.class +INFO: Loading Class: java/lang/InheritableThreadLocal.class +INFO: Loading Class: java/lang/InstantiationError.class +INFO: Loading Class: java/lang/Math$RandomNumberGeneratorHolder.class +INFO: Loading Class: java/lang/NegativeArraySizeException.class +INFO: Loading Class: java/lang/NoSuchFieldError.class +INFO: Loading Class: java/lang/Override.class +INFO: Loading Class: java/lang/Package$1.class +INFO: Loading Class: java/lang/Package$1PackageInfoProxy.class +INFO: Loading Class: java/lang/ProcessBuilder$1.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect$1.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect$2.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect$3.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect$4.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect$5.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect$Type.class +INFO: Loading Class: java/lang/ProcessBuilder$Redirect.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringEntry.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringEntrySet$1.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringEntrySet$2.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringEntrySet.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringKeySet$1.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringKeySet.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringValues$1.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringValues.class +INFO: Loading Class: java/lang/SafeVarargs.class +INFO: Loading Class: java/lang/SecurityManager$1.class +INFO: Loading Class: java/lang/SecurityManager$2.class +INFO: Loading Class: java/lang/Shutdown$1.class +INFO: Loading Class: java/lang/StrictMath$RandomNumberGeneratorHolder.class +INFO: Loading Class: java/lang/String$1.class +INFO: Loading Class: java/lang/StringCoding$1.class +INFO: Loading Class: java/lang/SuppressWarnings.class +INFO: Loading Class: java/lang/System$1.class +INFO: Loading Class: java/lang/Thread$1.class +INFO: Loading Class: java/lang/Thread$Caches.class +INFO: Loading Class: java/lang/Thread$State.class +INFO: Loading Class: java/lang/Thread$WeakClassKey.class +INFO: Loading Class: java/lang/ThreadLocal$1.class +INFO: Loading Class: java/lang/ThreadLocal$SuppliedThreadLocal.class +INFO: Loading Class: java/lang/Throwable$1.class +INFO: Loading Class: java/lang/Throwable$SentinelHolder.class +INFO: Loading Class: java/lang/TypeNotPresentException.class +INFO: Loading Class: java/lang/UNIXProcess$DeferredCloseInputStream.class +INFO: Loading Class: java/lang/UNIXProcess$DeferredCloseProcessPipeInputStream.class +INFO: Loading Class: java/lang/UNIXProcess$Platform.class +INFO: Loading Class: java/lang/UnknownError.class +INFO: Loading Class: java/lang/UnsupportedClassVersionError.class +INFO: Loading Class: java/lang/VerifyError.class +INFO: Loading Class: java/lang/annotation/AnnotationFormatError.class +INFO: Loading Class: java/lang/annotation/AnnotationTypeMismatchException.class +INFO: Loading Class: java/lang/annotation/Documented.class +INFO: Loading Class: java/lang/annotation/ElementType.class +INFO: Loading Class: java/lang/annotation/IncompleteAnnotationException.class +INFO: Loading Class: java/lang/annotation/Inherited.class +INFO: Loading Class: java/lang/annotation/Native.class +INFO: Loading Class: java/lang/annotation/Repeatable.class +INFO: Loading Class: java/lang/annotation/Retention.class +INFO: Loading Class: java/lang/annotation/RetentionPolicy.class +INFO: Loading Class: java/lang/annotation/Target.class +INFO: Loading Class: java/lang/instrument/ClassDefinition.class +INFO: Loading Class: java/lang/instrument/ClassFileTransformer.class +INFO: Loading Class: java/lang/instrument/IllegalClassFormatException.class +INFO: Loading Class: java/lang/instrument/Instrumentation.class +INFO: Loading Class: java/lang/instrument/UnmodifiableClassException.class +INFO: Loading Class: java/lang/invoke/AbstractValidatingLambdaMetafactory.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle$1.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle$Factory$1.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle$Factory.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle$SpeciesData$1.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle$SpeciesData.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle$Species_L.class +INFO: Loading Class: java/lang/invoke/BoundMethodHandle.class +INFO: Loading Class: java/lang/invoke/DelegatingMethodHandle.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$1.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$Accessor.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$Constructor.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$EnsureInitialized.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$Lazy.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$Special.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle$StaticAccessor.class +INFO: Loading Class: java/lang/invoke/DontInline.class +INFO: Loading Class: java/lang/invoke/ForceInline.class +INFO: Loading Class: java/lang/invoke/InfoFromMemberName$1.class +INFO: Loading Class: java/lang/invoke/InfoFromMemberName.class +INFO: Loading Class: java/lang/invoke/InjectedProfile.class +INFO: Loading Class: java/lang/invoke/InnerClassLambdaMetafactory$1.class +INFO: Loading Class: java/lang/invoke/InnerClassLambdaMetafactory$2.class +INFO: Loading Class: java/lang/invoke/InnerClassLambdaMetafactory$ForwardingMethodGenerator.class +INFO: Loading Class: java/lang/invoke/InnerClassLambdaMetafactory.class +INFO: Loading Class: java/lang/invoke/InvokeDynamic.class +INFO: Loading Class: java/lang/invoke/InvokerBytecodeGenerator$1.class +INFO: Loading Class: java/lang/invoke/InvokerBytecodeGenerator$2.class +INFO: Loading Class: java/lang/invoke/InvokerBytecodeGenerator$CpPatch.class +INFO: Loading Class: java/lang/invoke/InvokerBytecodeGenerator.class +INFO: Loading Class: java/lang/invoke/Invokers$Lazy.class +INFO: Loading Class: java/lang/invoke/LambdaConversionException.class +INFO: Loading Class: java/lang/invoke/LambdaForm$1.class +INFO: Loading Class: java/lang/invoke/LambdaForm$BasicType.class +INFO: Loading Class: java/lang/invoke/LambdaForm$Compiled.class +INFO: Loading Class: java/lang/invoke/LambdaForm$Hidden.class +INFO: Loading Class: java/lang/invoke/LambdaForm$Name.class +INFO: Loading Class: java/lang/invoke/LambdaFormBuffer.class +INFO: Loading Class: java/lang/invoke/LambdaFormEditor$Transform$Kind.class +INFO: Loading Class: java/lang/invoke/LambdaFormEditor$Transform.class +INFO: Loading Class: java/lang/invoke/LambdaFormEditor.class +INFO: Loading Class: java/lang/invoke/LambdaMetafactory.class +INFO: Loading Class: java/lang/invoke/MethodHandle$PolymorphicSignature.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$1.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$2.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$3.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$4.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$ArrayAccessor$1.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$ArrayAccessor.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$AsVarargsCollector.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$BindCaller$1.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$BindCaller$2.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$BindCaller$T.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$BindCaller.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$CountingWrapper.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$Intrinsic.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$Lazy.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl$WrappedMember.class +INFO: Loading Class: java/lang/invoke/MethodHandleInfo.class +INFO: Loading Class: java/lang/invoke/MethodHandleNatives$Constants.class +INFO: Loading Class: java/lang/invoke/MethodHandleProxies$1.class +INFO: Loading Class: java/lang/invoke/MethodHandleProxies$2.class +INFO: Loading Class: java/lang/invoke/MethodHandleProxies.class +INFO: Loading Class: java/lang/invoke/MethodHandles$1.class +INFO: Loading Class: java/lang/invoke/MethodHandles$Lookup.class +INFO: Loading Class: java/lang/invoke/MethodHandles.class +INFO: Loading Class: java/lang/invoke/ProxyClassesDumper$1.class +INFO: Loading Class: java/lang/invoke/ProxyClassesDumper.class +INFO: Loading Class: java/lang/invoke/SerializedLambda$1.class +INFO: Loading Class: java/lang/invoke/SerializedLambda.class +INFO: Loading Class: java/lang/invoke/SimpleMethodHandle.class +INFO: Loading Class: java/lang/invoke/Stable.class +INFO: Loading Class: java/lang/invoke/SwitchPoint.class +INFO: Loading Class: java/lang/invoke/TypeConvertingMethodAdapter.class +INFO: Loading Class: java/lang/invoke/WrongMethodTypeException.class +INFO: Loading Class: java/lang/management/BufferPoolMXBean.class +INFO: Loading Class: java/lang/management/ClassLoadingMXBean.class +INFO: Loading Class: java/lang/management/CompilationMXBean.class +INFO: Loading Class: java/lang/management/GarbageCollectorMXBean.class +INFO: Loading Class: java/lang/management/LockInfo.class +INFO: Loading Class: java/lang/management/ManagementFactory$1.class +INFO: Loading Class: java/lang/management/ManagementFactory$2.class +INFO: Loading Class: java/lang/management/ManagementFactory$3.class +INFO: Loading Class: java/lang/management/ManagementFactory.class +INFO: Loading Class: java/lang/management/ManagementPermission.class +INFO: Loading Class: java/lang/management/MemoryMXBean.class +INFO: Loading Class: java/lang/management/MemoryManagerMXBean.class +INFO: Loading Class: java/lang/management/MemoryNotificationInfo.class +INFO: Loading Class: java/lang/management/MemoryPoolMXBean.class +INFO: Loading Class: java/lang/management/MemoryType.class +INFO: Loading Class: java/lang/management/MemoryUsage.class +INFO: Loading Class: java/lang/management/MonitorInfo.class +INFO: Loading Class: java/lang/management/OperatingSystemMXBean.class +INFO: Loading Class: java/lang/management/PlatformComponent$1.class +INFO: Loading Class: java/lang/management/PlatformComponent$10.class +INFO: Loading Class: java/lang/management/PlatformComponent$11.class +INFO: Loading Class: java/lang/management/PlatformComponent$12.class +INFO: Loading Class: java/lang/management/PlatformComponent$13.class +INFO: Loading Class: java/lang/management/PlatformComponent$14.class +INFO: Loading Class: java/lang/management/PlatformComponent$15.class +INFO: Loading Class: java/lang/management/PlatformComponent$2.class +INFO: Loading Class: java/lang/management/PlatformComponent$3.class +INFO: Loading Class: java/lang/management/PlatformComponent$4.class +INFO: Loading Class: java/lang/management/PlatformComponent$5.class +INFO: Loading Class: java/lang/management/PlatformComponent$6.class +INFO: Loading Class: java/lang/management/PlatformComponent$7.class +INFO: Loading Class: java/lang/management/PlatformComponent$8.class +INFO: Loading Class: java/lang/management/PlatformComponent$9.class +INFO: Loading Class: java/lang/management/PlatformComponent$MXBeanFetcher.class +INFO: Loading Class: java/lang/management/PlatformComponent.class +INFO: Loading Class: java/lang/management/PlatformLoggingMXBean.class +INFO: Loading Class: java/lang/management/PlatformManagedObject.class +INFO: Loading Class: java/lang/management/RuntimeMXBean.class +INFO: Loading Class: java/lang/management/ThreadInfo$1.class +INFO: Loading Class: java/lang/management/ThreadInfo.class +INFO: Loading Class: java/lang/management/ThreadMXBean.class +INFO: Loading Class: java/lang/ref/Finalizer$1.class +INFO: Loading Class: java/lang/ref/Finalizer$2.class +INFO: Loading Class: java/lang/ref/Finalizer$3.class +INFO: Loading Class: java/lang/ref/Reference$1.class +INFO: Loading Class: java/lang/ref/ReferenceQueue$1.class +INFO: Loading Class: java/lang/reflect/AnnotatedArrayType.class +INFO: Loading Class: java/lang/reflect/AnnotatedParameterizedType.class +INFO: Loading Class: java/lang/reflect/AnnotatedType.class +INFO: Loading Class: java/lang/reflect/AnnotatedTypeVariable.class +INFO: Loading Class: java/lang/reflect/AnnotatedWildcardType.class +INFO: Loading Class: java/lang/reflect/GenericArrayType.class +INFO: Loading Class: java/lang/reflect/GenericSignatureFormatError.class +INFO: Loading Class: java/lang/reflect/MalformedParameterizedTypeException.class +INFO: Loading Class: java/lang/reflect/MalformedParametersException.class +INFO: Loading Class: java/lang/reflect/ParameterizedType.class +INFO: Loading Class: java/lang/reflect/Proxy$1.class +INFO: Loading Class: java/lang/reflect/Proxy$Key1.class +INFO: Loading Class: java/lang/reflect/Proxy$Key2.class +INFO: Loading Class: java/lang/reflect/Proxy$KeyX.class +INFO: Loading Class: java/lang/reflect/TypeVariable.class +INFO: Loading Class: java/lang/reflect/UndeclaredThrowableException.class +INFO: Loading Class: java/lang/reflect/WeakCache$CacheKey.class +INFO: Loading Class: java/lang/reflect/WeakCache$CacheValue.class +INFO: Loading Class: java/lang/reflect/WeakCache$Factory.class +INFO: Loading Class: java/lang/reflect/WeakCache$LookupValue.class +INFO: Loading Class: java/lang/reflect/WeakCache$Value.class +INFO: Loading Class: java/lang/reflect/WildcardType.class +INFO: Loading Class: java/math/BigDecimal$1.class +INFO: Loading Class: java/math/BigDecimal$LongOverflow.class +INFO: Loading Class: java/math/BigDecimal$StringBuilderHelper.class +INFO: Loading Class: java/math/BigDecimal$UnsafeHolder.class +INFO: Loading Class: java/math/BigDecimal.class +INFO: Loading Class: java/math/BigInteger$UnsafeHolder.class +INFO: Loading Class: java/math/BigInteger.class +INFO: Loading Class: java/math/BitSieve.class +INFO: Loading Class: java/math/MathContext.class +INFO: Loading Class: java/math/MutableBigInteger.class +INFO: Loading Class: java/math/RoundingMode.class +INFO: Loading Class: java/math/SignedMutableBigInteger.class +INFO: Loading Class: java/net/AbstractPlainDatagramSocketImpl$1.class +INFO: Loading Class: java/net/AbstractPlainDatagramSocketImpl.class +INFO: Loading Class: java/net/Authenticator$RequestorType.class +INFO: Loading Class: java/net/BindException.class +INFO: Loading Class: java/net/CacheRequest.class +INFO: Loading Class: java/net/CacheResponse.class +INFO: Loading Class: java/net/ContentHandler.class +INFO: Loading Class: java/net/ContentHandlerFactory.class +INFO: Loading Class: java/net/CookieHandler.class +INFO: Loading Class: java/net/CookieManager$CookiePathComparator.class +INFO: Loading Class: java/net/CookieManager.class +INFO: Loading Class: java/net/CookiePolicy$1.class +INFO: Loading Class: java/net/CookiePolicy$2.class +INFO: Loading Class: java/net/CookiePolicy$3.class +INFO: Loading Class: java/net/CookiePolicy.class +INFO: Loading Class: java/net/CookieStore.class +INFO: Loading Class: java/net/DatagramPacket$1.class +INFO: Loading Class: java/net/DatagramPacket.class +INFO: Loading Class: java/net/DatagramSocket$1.class +INFO: Loading Class: java/net/DatagramSocket.class +INFO: Loading Class: java/net/DatagramSocketImpl.class +INFO: Loading Class: java/net/DatagramSocketImplFactory.class +INFO: Loading Class: java/net/DefaultDatagramSocketImplFactory.class +INFO: Loading Class: java/net/FactoryURLClassLoader.class +INFO: Loading Class: java/net/FileNameMap.class +INFO: Loading Class: java/net/HostPortrange.class +INFO: Loading Class: java/net/HttpConnectSocketImpl$1.class +INFO: Loading Class: java/net/HttpConnectSocketImpl$2.class +INFO: Loading Class: java/net/HttpConnectSocketImpl.class +INFO: Loading Class: java/net/HttpCookie$1.class +INFO: Loading Class: java/net/HttpCookie$10.class +INFO: Loading Class: java/net/HttpCookie$11.class +INFO: Loading Class: java/net/HttpCookie$12.class +INFO: Loading Class: java/net/HttpCookie$2.class +INFO: Loading Class: java/net/HttpCookie$3.class +INFO: Loading Class: java/net/HttpCookie$4.class +INFO: Loading Class: java/net/HttpCookie$5.class +INFO: Loading Class: java/net/HttpCookie$6.class +INFO: Loading Class: java/net/HttpCookie$7.class +INFO: Loading Class: java/net/HttpCookie$8.class +INFO: Loading Class: java/net/HttpCookie$9.class +INFO: Loading Class: java/net/HttpCookie$CookieAttributeAssignor.class +INFO: Loading Class: java/net/HttpCookie.class +INFO: Loading Class: java/net/HttpRetryException.class +INFO: Loading Class: java/net/IDN$1.class +INFO: Loading Class: java/net/IDN.class +INFO: Loading Class: java/net/InMemoryCookieStore.class +INFO: Loading Class: java/net/Inet4AddressImpl.class +INFO: Loading Class: java/net/Inet6Address$1.class +INFO: Loading Class: java/net/InetAddress$3.class +INFO: Loading Class: java/net/InetAddress$CacheEntry.class +INFO: Loading Class: java/net/InetAddressContainer.class +INFO: Loading Class: java/net/InetSocketAddress$1.class +INFO: Loading Class: java/net/MulticastSocket.class +INFO: Loading Class: java/net/NetPermission.class +INFO: Loading Class: java/net/NetworkInterface$1checkedAddresses.class +INFO: Loading Class: java/net/NetworkInterface$1subIFs.class +INFO: Loading Class: java/net/NoRouteToHostException.class +INFO: Loading Class: java/net/PasswordAuthentication.class +INFO: Loading Class: java/net/PlainDatagramSocketImpl.class +INFO: Loading Class: java/net/PortUnreachableException.class +INFO: Loading Class: java/net/ProtocolException.class +INFO: Loading Class: java/net/ProtocolFamily.class +INFO: Loading Class: java/net/ResponseCache.class +INFO: Loading Class: java/net/SdpSocketImpl.class +INFO: Loading Class: java/net/SecureCacheResponse.class +INFO: Loading Class: java/net/ServerSocket$1.class +INFO: Loading Class: java/net/Socket$1.class +INFO: Loading Class: java/net/Socket$2.class +INFO: Loading Class: java/net/Socket$3.class +INFO: Loading Class: java/net/SocketImplFactory.class +INFO: Loading Class: java/net/SocketInputStream.class +INFO: Loading Class: java/net/SocketOption.class +INFO: Loading Class: java/net/SocketOutputStream.class +INFO: Loading Class: java/net/SocketPermission$1.class +INFO: Loading Class: java/net/SocketPermission$EphemeralRange.class +INFO: Loading Class: java/net/SocketPermission.class +INFO: Loading Class: java/net/SocketPermissionCollection.class +INFO: Loading Class: java/net/SocketSecrets.class +INFO: Loading Class: java/net/SocketTimeoutException.class +INFO: Loading Class: java/net/SocksSocketImpl$1.class +INFO: Loading Class: java/net/SocksSocketImpl$2.class +INFO: Loading Class: java/net/SocksSocketImpl$4.class +INFO: Loading Class: java/net/SocksSocketImpl$5.class +INFO: Loading Class: java/net/SocksSocketImpl$6.class +INFO: Loading Class: java/net/SocksSocketImpl$7.class +INFO: Loading Class: java/net/StandardProtocolFamily.class +INFO: Loading Class: java/net/StandardSocketOptions$StdSocketOption.class +INFO: Loading Class: java/net/StandardSocketOptions.class +INFO: Loading Class: java/net/URISyntaxException.class +INFO: Loading Class: java/net/URLClassLoader$4.class +INFO: Loading Class: java/net/URLClassLoader$5.class +INFO: Loading Class: java/net/URLClassLoader$6.class +INFO: Loading Class: java/net/URLConnection$1.class +INFO: Loading Class: java/net/URLDecoder.class +INFO: Loading Class: java/net/URLEncoder.class +INFO: Loading Class: java/net/URLPermission$Authority.class +INFO: Loading Class: java/net/URLPermission.class +INFO: Loading Class: java/net/UnknownContentHandler.class +INFO: Loading Class: java/net/UnknownHostException.class +INFO: Loading Class: java/net/UnknownServiceException.class +INFO: Loading Class: java/net/UrlDeserializedState.class +INFO: Loading Class: java/nio/Bits$1$1.class +INFO: Loading Class: java/nio/BufferOverflowException.class +INFO: Loading Class: java/nio/BufferUnderflowException.class +INFO: Loading Class: java/nio/ByteBufferAsCharBufferB.class +INFO: Loading Class: java/nio/ByteBufferAsCharBufferL.class +INFO: Loading Class: java/nio/ByteBufferAsCharBufferRB.class +INFO: Loading Class: java/nio/ByteBufferAsCharBufferRL.class +INFO: Loading Class: java/nio/ByteBufferAsDoubleBufferB.class +INFO: Loading Class: java/nio/ByteBufferAsDoubleBufferL.class +INFO: Loading Class: java/nio/ByteBufferAsDoubleBufferRB.class +INFO: Loading Class: java/nio/ByteBufferAsDoubleBufferRL.class +INFO: Loading Class: java/nio/ByteBufferAsFloatBufferB.class +INFO: Loading Class: java/nio/ByteBufferAsFloatBufferL.class +INFO: Loading Class: java/nio/ByteBufferAsFloatBufferRB.class +INFO: Loading Class: java/nio/ByteBufferAsFloatBufferRL.class +INFO: Loading Class: java/nio/ByteBufferAsIntBufferL.class +INFO: Loading Class: java/nio/ByteBufferAsIntBufferRB.class +INFO: Loading Class: java/nio/ByteBufferAsIntBufferRL.class +INFO: Loading Class: java/nio/ByteBufferAsLongBufferB.class +INFO: Loading Class: java/nio/ByteBufferAsLongBufferL.class +INFO: Loading Class: java/nio/ByteBufferAsLongBufferRB.class +INFO: Loading Class: java/nio/ByteBufferAsLongBufferRL.class +INFO: Loading Class: java/nio/ByteBufferAsShortBufferL.class +INFO: Loading Class: java/nio/ByteBufferAsShortBufferRB.class +INFO: Loading Class: java/nio/ByteBufferAsShortBufferRL.class +INFO: Loading Class: java/nio/CharBufferSpliterator.class +INFO: Loading Class: java/nio/DirectByteBuffer$1.class +INFO: Loading Class: java/nio/DirectByteBufferR.class +INFO: Loading Class: java/nio/DirectCharBufferRS.class +INFO: Loading Class: java/nio/DirectCharBufferRU.class +INFO: Loading Class: java/nio/DirectCharBufferS.class +INFO: Loading Class: java/nio/DirectCharBufferU.class +INFO: Loading Class: java/nio/DirectDoubleBufferRS.class +INFO: Loading Class: java/nio/DirectDoubleBufferRU.class +INFO: Loading Class: java/nio/DirectDoubleBufferS.class +INFO: Loading Class: java/nio/DirectDoubleBufferU.class +INFO: Loading Class: java/nio/DirectFloatBufferRS.class +INFO: Loading Class: java/nio/DirectFloatBufferRU.class +INFO: Loading Class: java/nio/DirectFloatBufferS.class +INFO: Loading Class: java/nio/DirectFloatBufferU.class +INFO: Loading Class: java/nio/DirectIntBufferRS.class +INFO: Loading Class: java/nio/DirectIntBufferRU.class +INFO: Loading Class: java/nio/DirectIntBufferS.class +INFO: Loading Class: java/nio/DirectIntBufferU.class +INFO: Loading Class: java/nio/DirectLongBufferRS.class +INFO: Loading Class: java/nio/DirectLongBufferRU.class +INFO: Loading Class: java/nio/DirectLongBufferS.class +INFO: Loading Class: java/nio/DirectShortBufferRS.class +INFO: Loading Class: java/nio/DirectShortBufferRU.class +INFO: Loading Class: java/nio/DirectShortBufferS.class +INFO: Loading Class: java/nio/DirectShortBufferU.class +INFO: Loading Class: java/nio/DoubleBuffer.class +INFO: Loading Class: java/nio/FloatBuffer.class +INFO: Loading Class: java/nio/HeapByteBufferR.class +INFO: Loading Class: java/nio/HeapCharBufferR.class +INFO: Loading Class: java/nio/HeapDoubleBuffer.class +INFO: Loading Class: java/nio/HeapDoubleBufferR.class +INFO: Loading Class: java/nio/HeapFloatBuffer.class +INFO: Loading Class: java/nio/HeapFloatBufferR.class +INFO: Loading Class: java/nio/HeapIntBuffer.class +INFO: Loading Class: java/nio/HeapIntBufferR.class +INFO: Loading Class: java/nio/HeapLongBuffer.class +INFO: Loading Class: java/nio/HeapLongBufferR.class +INFO: Loading Class: java/nio/HeapShortBuffer.class +INFO: Loading Class: java/nio/HeapShortBufferR.class +INFO: Loading Class: java/nio/InvalidMarkException.class +INFO: Loading Class: java/nio/ReadOnlyBufferException.class +INFO: Loading Class: java/nio/StringCharBuffer.class +INFO: Loading Class: java/nio/channels/AcceptPendingException.class +INFO: Loading Class: java/nio/channels/AlreadyBoundException.class +INFO: Loading Class: java/nio/channels/AlreadyConnectedException.class +INFO: Loading Class: java/nio/channels/AsynchronousByteChannel.class +INFO: Loading Class: java/nio/channels/AsynchronousChannel.class +INFO: Loading Class: java/nio/channels/AsynchronousChannelGroup.class +INFO: Loading Class: java/nio/channels/AsynchronousCloseException.class +INFO: Loading Class: java/nio/channels/AsynchronousFileChannel.class +INFO: Loading Class: java/nio/channels/AsynchronousServerSocketChannel.class +INFO: Loading Class: java/nio/channels/AsynchronousSocketChannel.class +INFO: Loading Class: java/nio/channels/CancelledKeyException.class +INFO: Loading Class: java/nio/channels/Channels$1.class +INFO: Loading Class: java/nio/channels/Channels$2.class +INFO: Loading Class: java/nio/channels/Channels$3.class +INFO: Loading Class: java/nio/channels/Channels$ReadableByteChannelImpl.class +INFO: Loading Class: java/nio/channels/Channels$WritableByteChannelImpl.class +INFO: Loading Class: java/nio/channels/Channels.class +INFO: Loading Class: java/nio/channels/ClosedByInterruptException.class +INFO: Loading Class: java/nio/channels/ClosedChannelException.class +INFO: Loading Class: java/nio/channels/ClosedSelectorException.class +INFO: Loading Class: java/nio/channels/CompletionHandler.class +INFO: Loading Class: java/nio/channels/ConnectionPendingException.class +INFO: Loading Class: java/nio/channels/DatagramChannel.class +INFO: Loading Class: java/nio/channels/FileChannel$MapMode.class +INFO: Loading Class: java/nio/channels/FileLock.class +INFO: Loading Class: java/nio/channels/FileLockInterruptionException.class +INFO: Loading Class: java/nio/channels/IllegalBlockingModeException.class +INFO: Loading Class: java/nio/channels/IllegalChannelGroupException.class +INFO: Loading Class: java/nio/channels/IllegalSelectorException.class +INFO: Loading Class: java/nio/channels/InterruptedByTimeoutException.class +INFO: Loading Class: java/nio/channels/MembershipKey.class +INFO: Loading Class: java/nio/channels/MulticastChannel.class +INFO: Loading Class: java/nio/channels/NetworkChannel.class +INFO: Loading Class: java/nio/channels/NoConnectionPendingException.class +INFO: Loading Class: java/nio/channels/NonReadableChannelException.class +INFO: Loading Class: java/nio/channels/NonWritableChannelException.class +INFO: Loading Class: java/nio/channels/NotYetBoundException.class +INFO: Loading Class: java/nio/channels/NotYetConnectedException.class +INFO: Loading Class: java/nio/channels/OverlappingFileLockException.class +INFO: Loading Class: java/nio/channels/Pipe$SinkChannel.class +INFO: Loading Class: java/nio/channels/Pipe$SourceChannel.class +INFO: Loading Class: java/nio/channels/Pipe.class +INFO: Loading Class: java/nio/channels/ReadPendingException.class +INFO: Loading Class: java/nio/channels/SelectableChannel.class +INFO: Loading Class: java/nio/channels/SelectionKey.class +INFO: Loading Class: java/nio/channels/Selector.class +INFO: Loading Class: java/nio/channels/ServerSocketChannel.class +INFO: Loading Class: java/nio/channels/ShutdownChannelGroupException.class +INFO: Loading Class: java/nio/channels/SocketChannel.class +INFO: Loading Class: java/nio/channels/UnresolvedAddressException.class +INFO: Loading Class: java/nio/channels/UnsupportedAddressTypeException.class +INFO: Loading Class: java/nio/channels/WritePendingException.class +INFO: Loading Class: java/nio/channels/spi/AbstractSelectableChannel.class +INFO: Loading Class: java/nio/channels/spi/AbstractSelectionKey.class +INFO: Loading Class: java/nio/channels/spi/AbstractSelector$1.class +INFO: Loading Class: java/nio/channels/spi/AbstractSelector.class +INFO: Loading Class: java/nio/channels/spi/AsynchronousChannelProvider$ProviderHolder$1.class +INFO: Loading Class: java/nio/channels/spi/AsynchronousChannelProvider$ProviderHolder.class +INFO: Loading Class: java/nio/channels/spi/AsynchronousChannelProvider.class +INFO: Loading Class: java/nio/channels/spi/SelectorProvider$1.class +INFO: Loading Class: java/nio/channels/spi/SelectorProvider.class +INFO: Loading Class: java/nio/charset/CharacterCodingException.class +INFO: Loading Class: java/nio/charset/Charset$1.class +INFO: Loading Class: java/nio/charset/Charset$2.class +INFO: Loading Class: java/nio/charset/Charset$3.class +INFO: Loading Class: java/nio/charset/Charset$ExtendedProviderHolder$1.class +INFO: Loading Class: java/nio/charset/Charset$ExtendedProviderHolder.class +INFO: Loading Class: java/nio/charset/CoderMalfunctionError.class +INFO: Loading Class: java/nio/charset/IllegalCharsetNameException.class +INFO: Loading Class: java/nio/charset/MalformedInputException.class +INFO: Loading Class: java/nio/charset/UnmappableCharacterException.class +INFO: Loading Class: java/nio/charset/UnsupportedCharsetException.class +INFO: Loading Class: java/nio/file/AccessDeniedException.class +INFO: Loading Class: java/nio/file/AccessMode.class +INFO: Loading Class: java/nio/file/AtomicMoveNotSupportedException.class +INFO: Loading Class: java/nio/file/ClosedDirectoryStreamException.class +INFO: Loading Class: java/nio/file/ClosedFileSystemException.class +INFO: Loading Class: java/nio/file/ClosedWatchServiceException.class +INFO: Loading Class: java/nio/file/CopyMoveHelper$CopyOptions.class +INFO: Loading Class: java/nio/file/CopyMoveHelper.class +INFO: Loading Class: java/nio/file/CopyOption.class +INFO: Loading Class: java/nio/file/DirectoryIteratorException.class +INFO: Loading Class: java/nio/file/DirectoryNotEmptyException.class +INFO: Loading Class: java/nio/file/DirectoryStream$Filter.class +INFO: Loading Class: java/nio/file/DirectoryStream.class +INFO: Loading Class: java/nio/file/FileAlreadyExistsException.class +INFO: Loading Class: java/nio/file/FileStore.class +INFO: Loading Class: java/nio/file/FileSystem.class +INFO: Loading Class: java/nio/file/FileSystemAlreadyExistsException.class +INFO: Loading Class: java/nio/file/FileSystemException.class +INFO: Loading Class: java/nio/file/FileSystemLoopException.class +INFO: Loading Class: java/nio/file/FileSystemNotFoundException.class +INFO: Loading Class: java/nio/file/FileSystems$DefaultFileSystemHolder$1.class +INFO: Loading Class: java/nio/file/FileSystems$DefaultFileSystemHolder.class +INFO: Loading Class: java/nio/file/FileSystems.class +INFO: Loading Class: java/nio/file/FileTreeIterator.class +INFO: Loading Class: java/nio/file/FileTreeWalker$1.class +INFO: Loading Class: java/nio/file/FileTreeWalker$DirectoryNode.class +INFO: Loading Class: java/nio/file/FileTreeWalker$Event.class +INFO: Loading Class: java/nio/file/FileTreeWalker$EventType.class +INFO: Loading Class: java/nio/file/FileTreeWalker.class +INFO: Loading Class: java/nio/file/FileVisitOption.class +INFO: Loading Class: java/nio/file/FileVisitResult.class +INFO: Loading Class: java/nio/file/FileVisitor.class +INFO: Loading Class: java/nio/file/Files$1.class +INFO: Loading Class: java/nio/file/Files$2.class +INFO: Loading Class: java/nio/file/Files$3.class +INFO: Loading Class: java/nio/file/Files$AcceptAllFilter.class +INFO: Loading Class: java/nio/file/Files$FileTypeDetectors$1.class +INFO: Loading Class: java/nio/file/Files$FileTypeDetectors$2.class +INFO: Loading Class: java/nio/file/Files$FileTypeDetectors.class +INFO: Loading Class: java/nio/file/Files.class +INFO: Loading Class: java/nio/file/InvalidPathException.class +INFO: Loading Class: java/nio/file/LinkOption.class +INFO: Loading Class: java/nio/file/LinkPermission.class +INFO: Loading Class: java/nio/file/NoSuchFileException.class +INFO: Loading Class: java/nio/file/NotDirectoryException.class +INFO: Loading Class: java/nio/file/NotLinkException.class +INFO: Loading Class: java/nio/file/OpenOption.class +INFO: Loading Class: java/nio/file/PathMatcher.class +INFO: Loading Class: java/nio/file/Paths.class +INFO: Loading Class: java/nio/file/ProviderMismatchException.class +INFO: Loading Class: java/nio/file/ProviderNotFoundException.class +INFO: Loading Class: java/nio/file/ReadOnlyFileSystemException.class +INFO: Loading Class: java/nio/file/SecureDirectoryStream.class +INFO: Loading Class: java/nio/file/SimpleFileVisitor.class +INFO: Loading Class: java/nio/file/StandardCopyOption.class +INFO: Loading Class: java/nio/file/StandardOpenOption.class +INFO: Loading Class: java/nio/file/StandardWatchEventKinds$StdWatchEventKind.class +INFO: Loading Class: java/nio/file/StandardWatchEventKinds.class +INFO: Loading Class: java/nio/file/TempFileHelper$PosixPermissions.class +INFO: Loading Class: java/nio/file/TempFileHelper.class +INFO: Loading Class: java/nio/file/WatchEvent$Kind.class +INFO: Loading Class: java/nio/file/WatchEvent$Modifier.class +INFO: Loading Class: java/nio/file/WatchEvent.class +INFO: Loading Class: java/nio/file/WatchKey.class +INFO: Loading Class: java/nio/file/WatchService.class +INFO: Loading Class: java/nio/file/attribute/AclEntry$1.class +INFO: Loading Class: java/nio/file/attribute/AclEntry$Builder.class +INFO: Loading Class: java/nio/file/attribute/AclEntry.class +INFO: Loading Class: java/nio/file/attribute/AclEntryFlag.class +INFO: Loading Class: java/nio/file/attribute/AclEntryPermission.class +INFO: Loading Class: java/nio/file/attribute/AclEntryType.class +INFO: Loading Class: java/nio/file/attribute/AclFileAttributeView.class +INFO: Loading Class: java/nio/file/attribute/AttributeView.class +INFO: Loading Class: java/nio/file/attribute/BasicFileAttributeView.class +INFO: Loading Class: java/nio/file/attribute/BasicFileAttributes.class +INFO: Loading Class: java/nio/file/attribute/DosFileAttributeView.class +INFO: Loading Class: java/nio/file/attribute/DosFileAttributes.class +INFO: Loading Class: java/nio/file/attribute/FileAttributeView.class +INFO: Loading Class: java/nio/file/attribute/FileOwnerAttributeView.class +INFO: Loading Class: java/nio/file/attribute/FileStoreAttributeView.class +INFO: Loading Class: java/nio/file/attribute/FileTime$1.class +INFO: Loading Class: java/nio/file/attribute/FileTime.class +INFO: Loading Class: java/nio/file/attribute/GroupPrincipal.class +INFO: Loading Class: java/nio/file/attribute/PosixFileAttributeView.class +INFO: Loading Class: java/nio/file/attribute/PosixFileAttributes.class +INFO: Loading Class: java/nio/file/attribute/PosixFilePermission.class +INFO: Loading Class: java/nio/file/attribute/PosixFilePermissions$1.class +INFO: Loading Class: java/nio/file/attribute/PosixFilePermissions.class +INFO: Loading Class: java/nio/file/attribute/UserDefinedFileAttributeView.class +INFO: Loading Class: java/nio/file/attribute/UserPrincipal.class +INFO: Loading Class: java/nio/file/attribute/UserPrincipalLookupService.class +INFO: Loading Class: java/nio/file/attribute/UserPrincipalNotFoundException.class +INFO: Loading Class: java/nio/file/spi/FileSystemProvider$1.class +INFO: Loading Class: java/nio/file/spi/FileSystemProvider.class +INFO: Loading Class: java/nio/file/spi/FileTypeDetector.class +INFO: Loading Class: java/rmi/AccessException.class +INFO: Loading Class: java/rmi/AlreadyBoundException.class +INFO: Loading Class: java/rmi/ConnectException.class +INFO: Loading Class: java/rmi/ConnectIOException.class +INFO: Loading Class: java/rmi/MarshalException.class +INFO: Loading Class: java/rmi/MarshalledObject$MarshalledObjectInputStream.class +INFO: Loading Class: java/rmi/MarshalledObject$MarshalledObjectOutputStream.class +INFO: Loading Class: java/rmi/Naming$ParsedNamingURL.class +INFO: Loading Class: java/rmi/Naming.class +INFO: Loading Class: java/rmi/NoSuchObjectException.class +INFO: Loading Class: java/rmi/NotBoundException.class +INFO: Loading Class: java/rmi/RMISecurityException.class +INFO: Loading Class: java/rmi/RMISecurityManager.class +INFO: Loading Class: java/rmi/RemoteException.class +INFO: Loading Class: java/rmi/ServerError.class +INFO: Loading Class: java/rmi/ServerException.class +INFO: Loading Class: java/rmi/ServerRuntimeException.class +INFO: Loading Class: java/rmi/StubNotFoundException.class +INFO: Loading Class: java/rmi/UnexpectedException.class +INFO: Loading Class: java/rmi/UnknownHostException.class +INFO: Loading Class: java/rmi/UnmarshalException.class +INFO: Loading Class: java/rmi/activation/Activatable.class +INFO: Loading Class: java/rmi/activation/ActivateFailedException.class +INFO: Loading Class: java/rmi/activation/ActivationDesc.class +INFO: Loading Class: java/rmi/activation/ActivationException.class +INFO: Loading Class: java/rmi/activation/ActivationGroup.class +INFO: Loading Class: java/rmi/activation/ActivationGroupDesc$CommandEnvironment.class +INFO: Loading Class: java/rmi/activation/ActivationGroupDesc.class +INFO: Loading Class: java/rmi/activation/ActivationGroupID.class +INFO: Loading Class: java/rmi/activation/ActivationGroup_Stub.class +INFO: Loading Class: java/rmi/activation/ActivationID.class +INFO: Loading Class: java/rmi/activation/ActivationInstantiator.class +INFO: Loading Class: java/rmi/activation/ActivationMonitor.class +INFO: Loading Class: java/rmi/activation/ActivationSystem.class +INFO: Loading Class: java/rmi/activation/Activator.class +INFO: Loading Class: java/rmi/activation/UnknownGroupException.class +INFO: Loading Class: java/rmi/activation/UnknownObjectException.class +INFO: Loading Class: java/rmi/dgc/DGC.class +INFO: Loading Class: java/rmi/dgc/Lease.class +INFO: Loading Class: java/rmi/dgc/VMID.class +INFO: Loading Class: java/rmi/registry/LocateRegistry.class +INFO: Loading Class: java/rmi/registry/Registry.class +INFO: Loading Class: java/rmi/registry/RegistryHandler.class +INFO: Loading Class: java/rmi/server/ExportException.class +INFO: Loading Class: java/rmi/server/LoaderHandler.class +INFO: Loading Class: java/rmi/server/LogStream.class +INFO: Loading Class: java/rmi/server/ObjID.class +INFO: Loading Class: java/rmi/server/Operation.class +INFO: Loading Class: java/rmi/server/RMIClassLoader$1.class +INFO: Loading Class: java/rmi/server/RMIClassLoader$2.class +INFO: Loading Class: java/rmi/server/RMIClassLoader.class +INFO: Loading Class: java/rmi/server/RMIClassLoaderSpi.class +INFO: Loading Class: java/rmi/server/RMIClientSocketFactory.class +INFO: Loading Class: java/rmi/server/RMIFailureHandler.class +INFO: Loading Class: java/rmi/server/RMIServerSocketFactory.class +INFO: Loading Class: java/rmi/server/RMISocketFactory.class +INFO: Loading Class: java/rmi/server/RemoteCall.class +INFO: Loading Class: java/rmi/server/RemoteObject.class +INFO: Loading Class: java/rmi/server/RemoteObjectInvocationHandler$1.class +INFO: Loading Class: java/rmi/server/RemoteObjectInvocationHandler$MethodToHash_Maps$1.class +INFO: Loading Class: java/rmi/server/RemoteObjectInvocationHandler$MethodToHash_Maps.class +INFO: Loading Class: java/rmi/server/RemoteObjectInvocationHandler.class +INFO: Loading Class: java/rmi/server/RemoteRef.class +INFO: Loading Class: java/rmi/server/RemoteServer.class +INFO: Loading Class: java/rmi/server/RemoteStub.class +INFO: Loading Class: java/rmi/server/ServerCloneException.class +INFO: Loading Class: java/rmi/server/ServerNotActiveException.class +INFO: Loading Class: java/rmi/server/ServerRef.class +INFO: Loading Class: java/rmi/server/Skeleton.class +INFO: Loading Class: java/rmi/server/SkeletonMismatchException.class +INFO: Loading Class: java/rmi/server/SkeletonNotFoundException.class +INFO: Loading Class: java/rmi/server/SocketSecurityException.class +INFO: Loading Class: java/rmi/server/UID.class +INFO: Loading Class: java/rmi/server/UnicastRemoteObject.class +INFO: Loading Class: java/rmi/server/Unreferenced.class +INFO: Loading Class: java/security/AccessControlContext$1.class +INFO: Loading Class: java/security/AccessControlException.class +INFO: Loading Class: java/security/AccessController$1.class +INFO: Loading Class: java/security/AlgorithmConstraints.class +INFO: Loading Class: java/security/AlgorithmParameterGenerator.class +INFO: Loading Class: java/security/AlgorithmParameterGeneratorSpi.class +INFO: Loading Class: java/security/AlgorithmParameters.class +INFO: Loading Class: java/security/AlgorithmParametersSpi.class +INFO: Loading Class: java/security/AllPermissionCollection$1.class +INFO: Loading Class: java/security/AuthProvider.class +INFO: Loading Class: java/security/Certificate.class +INFO: Loading Class: java/security/CryptoPrimitive.class +INFO: Loading Class: java/security/DigestException.class +INFO: Loading Class: java/security/DigestInputStream.class +INFO: Loading Class: java/security/DigestOutputStream.class +INFO: Loading Class: java/security/DomainCombiner.class +INFO: Loading Class: java/security/DomainLoadStoreParameter.class +INFO: Loading Class: java/security/GeneralSecurityException.class +INFO: Loading Class: java/security/GuardedObject.class +INFO: Loading Class: java/security/Identity.class +INFO: Loading Class: java/security/IdentityScope$1.class +INFO: Loading Class: java/security/IdentityScope.class +INFO: Loading Class: java/security/InvalidAlgorithmParameterException.class +INFO: Loading Class: java/security/InvalidKeyException.class +INFO: Loading Class: java/security/InvalidParameterException.class +INFO: Loading Class: java/security/Key.class +INFO: Loading Class: java/security/KeyException.class +INFO: Loading Class: java/security/KeyFactory.class +INFO: Loading Class: java/security/KeyFactorySpi.class +INFO: Loading Class: java/security/KeyManagementException.class +INFO: Loading Class: java/security/KeyPair.class +INFO: Loading Class: java/security/KeyPairGenerator$Delegate.class +INFO: Loading Class: java/security/KeyPairGenerator.class +INFO: Loading Class: java/security/KeyPairGeneratorSpi.class +INFO: Loading Class: java/security/KeyRep$Type.class +INFO: Loading Class: java/security/KeyRep.class +INFO: Loading Class: java/security/KeyStore$1.class +INFO: Loading Class: java/security/KeyStore$Builder$1.class +INFO: Loading Class: java/security/KeyStore$Builder$2$1.class +INFO: Loading Class: java/security/KeyStore$Builder$2.class +INFO: Loading Class: java/security/KeyStore$Builder$FileBuilder$1.class +INFO: Loading Class: java/security/KeyStore$Builder$FileBuilder.class +INFO: Loading Class: java/security/KeyStore$Builder.class +INFO: Loading Class: java/security/KeyStore$CallbackHandlerProtection.class +INFO: Loading Class: java/security/KeyStore$Entry$Attribute.class +INFO: Loading Class: java/security/KeyStore$Entry.class +INFO: Loading Class: java/security/KeyStore$LoadStoreParameter.class +INFO: Loading Class: java/security/KeyStore$PasswordProtection.class +INFO: Loading Class: java/security/KeyStore$PrivateKeyEntry.class +INFO: Loading Class: java/security/KeyStore$ProtectionParameter.class +INFO: Loading Class: java/security/KeyStore$SecretKeyEntry.class +INFO: Loading Class: java/security/KeyStore$SimpleLoadStoreParameter.class +INFO: Loading Class: java/security/KeyStore$TrustedCertificateEntry.class +INFO: Loading Class: java/security/KeyStore.class +INFO: Loading Class: java/security/KeyStoreException.class +INFO: Loading Class: java/security/KeyStoreSpi.class +INFO: Loading Class: java/security/MessageDigest$Delegate.class +INFO: Loading Class: java/security/MessageDigest.class +INFO: Loading Class: java/security/MessageDigestSpi.class +INFO: Loading Class: java/security/NoSuchAlgorithmException.class +INFO: Loading Class: java/security/NoSuchProviderException.class +INFO: Loading Class: java/security/PKCS12Attribute.class +INFO: Loading Class: java/security/PermissionsEnumerator.class +INFO: Loading Class: java/security/PermissionsHash.class +INFO: Loading Class: java/security/Policy$1.class +INFO: Loading Class: java/security/Policy$2.class +INFO: Loading Class: java/security/Policy$3.class +INFO: Loading Class: java/security/Policy$Parameters.class +INFO: Loading Class: java/security/Policy$PolicyDelegate.class +INFO: Loading Class: java/security/Policy$PolicyInfo.class +INFO: Loading Class: java/security/Policy$UnsupportedEmptyCollection.class +INFO: Loading Class: java/security/Policy.class +INFO: Loading Class: java/security/PolicySpi.class +INFO: Loading Class: java/security/PrivateKey.class +INFO: Loading Class: java/security/ProtectionDomain$2$1.class +INFO: Loading Class: java/security/ProtectionDomain$2.class +INFO: Loading Class: java/security/ProtectionDomain$JavaSecurityAccessImpl.class +INFO: Loading Class: java/security/Provider$1.class +INFO: Loading Class: java/security/Provider$EngineDescription.class +INFO: Loading Class: java/security/Provider$Service.class +INFO: Loading Class: java/security/Provider$ServiceKey.class +INFO: Loading Class: java/security/Provider$UString.class +INFO: Loading Class: java/security/Provider.class +INFO: Loading Class: java/security/ProviderException.class +INFO: Loading Class: java/security/PublicKey.class +INFO: Loading Class: java/security/SecureRandom$1.class +INFO: Loading Class: java/security/SecureRandom$StrongPatternHolder.class +INFO: Loading Class: java/security/SecureRandom.class +INFO: Loading Class: java/security/SecureRandomSpi.class +INFO: Loading Class: java/security/Security$1.class +INFO: Loading Class: java/security/Security$2.class +INFO: Loading Class: java/security/Security$ProviderProperty.class +INFO: Loading Class: java/security/Security.class +INFO: Loading Class: java/security/SecurityPermission.class +INFO: Loading Class: java/security/Signature$CipherAdapter.class +INFO: Loading Class: java/security/Signature$Delegate.class +INFO: Loading Class: java/security/Signature.class +INFO: Loading Class: java/security/SignatureException.class +INFO: Loading Class: java/security/SignatureSpi.class +INFO: Loading Class: java/security/SignedObject.class +INFO: Loading Class: java/security/Signer$1.class +INFO: Loading Class: java/security/Signer.class +INFO: Loading Class: java/security/Timestamp.class +INFO: Loading Class: java/security/URIParameter.class +INFO: Loading Class: java/security/UnrecoverableEntryException.class +INFO: Loading Class: java/security/UnrecoverableKeyException.class +INFO: Loading Class: java/security/UnresolvedPermissionCollection.class +INFO: Loading Class: java/security/acl/Acl.class +INFO: Loading Class: java/security/acl/AclEntry.class +INFO: Loading Class: java/security/acl/AclNotFoundException.class +INFO: Loading Class: java/security/acl/Group.class +INFO: Loading Class: java/security/acl/LastOwnerException.class +INFO: Loading Class: java/security/acl/NotOwnerException.class +INFO: Loading Class: java/security/acl/Owner.class +INFO: Loading Class: java/security/acl/Permission.class +INFO: Loading Class: java/security/cert/CRL.class +INFO: Loading Class: java/security/cert/CRLException.class +INFO: Loading Class: java/security/cert/CRLReason.class +INFO: Loading Class: java/security/cert/CRLSelector.class +INFO: Loading Class: java/security/cert/CertPath$CertPathRep.class +INFO: Loading Class: java/security/cert/CertPath.class +INFO: Loading Class: java/security/cert/CertPathBuilder$1.class +INFO: Loading Class: java/security/cert/CertPathBuilder.class +INFO: Loading Class: java/security/cert/CertPathBuilderException.class +INFO: Loading Class: java/security/cert/CertPathBuilderResult.class +INFO: Loading Class: java/security/cert/CertPathBuilderSpi.class +INFO: Loading Class: java/security/cert/CertPathChecker.class +INFO: Loading Class: java/security/cert/CertPathHelperImpl.class +INFO: Loading Class: java/security/cert/CertPathParameters.class +INFO: Loading Class: java/security/cert/CertPathValidator$1.class +INFO: Loading Class: java/security/cert/CertPathValidator.class +INFO: Loading Class: java/security/cert/CertPathValidatorException$BasicReason.class +INFO: Loading Class: java/security/cert/CertPathValidatorException$Reason.class +INFO: Loading Class: java/security/cert/CertPathValidatorException.class +INFO: Loading Class: java/security/cert/CertPathValidatorResult.class +INFO: Loading Class: java/security/cert/CertPathValidatorSpi.class +INFO: Loading Class: java/security/cert/CertSelector.class +INFO: Loading Class: java/security/cert/CertStore$1.class +INFO: Loading Class: java/security/cert/CertStore.class +INFO: Loading Class: java/security/cert/CertStoreException.class +INFO: Loading Class: java/security/cert/CertStoreParameters.class +INFO: Loading Class: java/security/cert/CertStoreSpi.class +INFO: Loading Class: java/security/cert/Certificate$CertificateRep.class +INFO: Loading Class: java/security/cert/CertificateEncodingException.class +INFO: Loading Class: java/security/cert/CertificateException.class +INFO: Loading Class: java/security/cert/CertificateExpiredException.class +INFO: Loading Class: java/security/cert/CertificateFactory.class +INFO: Loading Class: java/security/cert/CertificateFactorySpi.class +INFO: Loading Class: java/security/cert/CertificateNotYetValidException.class +INFO: Loading Class: java/security/cert/CertificateParsingException.class +INFO: Loading Class: java/security/cert/CertificateRevokedException.class +INFO: Loading Class: java/security/cert/CollectionCertStoreParameters.class +INFO: Loading Class: java/security/cert/Extension.class +INFO: Loading Class: java/security/cert/LDAPCertStoreParameters.class +INFO: Loading Class: java/security/cert/PKIXBuilderParameters.class +INFO: Loading Class: java/security/cert/PKIXCertPathBuilderResult.class +INFO: Loading Class: java/security/cert/PKIXCertPathChecker.class +INFO: Loading Class: java/security/cert/PKIXCertPathValidatorResult.class +INFO: Loading Class: java/security/cert/PKIXParameters.class +INFO: Loading Class: java/security/cert/PKIXReason.class +INFO: Loading Class: java/security/cert/PKIXRevocationChecker$Option.class +INFO: Loading Class: java/security/cert/PKIXRevocationChecker.class +INFO: Loading Class: java/security/cert/PolicyNode.class +INFO: Loading Class: java/security/cert/PolicyQualifierInfo.class +INFO: Loading Class: java/security/cert/TrustAnchor.class +INFO: Loading Class: java/security/cert/X509CRL.class +INFO: Loading Class: java/security/cert/X509CRLEntry.class +INFO: Loading Class: java/security/cert/X509CRLSelector.class +INFO: Loading Class: java/security/cert/X509CertSelector.class +INFO: Loading Class: java/security/cert/X509Certificate.class +INFO: Loading Class: java/security/cert/X509Extension.class +INFO: Loading Class: java/security/interfaces/DSAKey.class +INFO: Loading Class: java/security/interfaces/DSAKeyPairGenerator.class +INFO: Loading Class: java/security/interfaces/DSAParams.class +INFO: Loading Class: java/security/interfaces/DSAPrivateKey.class +INFO: Loading Class: java/security/interfaces/DSAPublicKey.class +INFO: Loading Class: java/security/interfaces/ECKey.class +INFO: Loading Class: java/security/interfaces/ECPrivateKey.class +INFO: Loading Class: java/security/interfaces/ECPublicKey.class +INFO: Loading Class: java/security/interfaces/RSAKey.class +INFO: Loading Class: java/security/interfaces/RSAMultiPrimePrivateCrtKey.class +INFO: Loading Class: java/security/interfaces/RSAPrivateCrtKey.class +INFO: Loading Class: java/security/interfaces/RSAPrivateKey.class +INFO: Loading Class: java/security/interfaces/RSAPublicKey.class +INFO: Loading Class: java/security/spec/AlgorithmParameterSpec.class +INFO: Loading Class: java/security/spec/DSAGenParameterSpec.class +INFO: Loading Class: java/security/spec/DSAParameterSpec.class +INFO: Loading Class: java/security/spec/DSAPrivateKeySpec.class +INFO: Loading Class: java/security/spec/DSAPublicKeySpec.class +INFO: Loading Class: java/security/spec/ECField.class +INFO: Loading Class: java/security/spec/ECFieldF2m.class +INFO: Loading Class: java/security/spec/ECFieldFp.class +INFO: Loading Class: java/security/spec/ECGenParameterSpec.class +INFO: Loading Class: java/security/spec/ECParameterSpec.class +INFO: Loading Class: java/security/spec/ECPoint.class +INFO: Loading Class: java/security/spec/ECPrivateKeySpec.class +INFO: Loading Class: java/security/spec/ECPublicKeySpec.class +INFO: Loading Class: java/security/spec/EllipticCurve.class +INFO: Loading Class: java/security/spec/EncodedKeySpec.class +INFO: Loading Class: java/security/spec/InvalidKeySpecException.class +INFO: Loading Class: java/security/spec/InvalidParameterSpecException.class +INFO: Loading Class: java/security/spec/KeySpec.class +INFO: Loading Class: java/security/spec/MGF1ParameterSpec.class +INFO: Loading Class: java/security/spec/PKCS8EncodedKeySpec.class +INFO: Loading Class: java/security/spec/PSSParameterSpec.class +INFO: Loading Class: java/security/spec/RSAKeyGenParameterSpec.class +INFO: Loading Class: java/security/spec/RSAMultiPrimePrivateCrtKeySpec.class +INFO: Loading Class: java/security/spec/RSAOtherPrimeInfo.class +INFO: Loading Class: java/security/spec/RSAPrivateCrtKeySpec.class +INFO: Loading Class: java/security/spec/RSAPrivateKeySpec.class +INFO: Loading Class: java/security/spec/RSAPublicKeySpec.class +INFO: Loading Class: java/security/spec/X509EncodedKeySpec.class +INFO: Loading Class: java/sql/Array.class +INFO: Loading Class: java/sql/BatchUpdateException.class +INFO: Loading Class: java/sql/Blob.class +INFO: Loading Class: java/sql/CallableStatement.class +INFO: Loading Class: java/sql/ClientInfoStatus.class +INFO: Loading Class: java/sql/Clob.class +INFO: Loading Class: java/sql/Connection.class +INFO: Loading Class: java/sql/DataTruncation.class +INFO: Loading Class: java/sql/DatabaseMetaData.class +INFO: Loading Class: java/sql/Date.class +INFO: Loading Class: java/sql/Driver.class +INFO: Loading Class: java/sql/DriverAction.class +INFO: Loading Class: java/sql/DriverInfo.class +INFO: Loading Class: java/sql/DriverManager$1.class +INFO: Loading Class: java/sql/DriverManager$2.class +INFO: Loading Class: java/sql/DriverManager.class +INFO: Loading Class: java/sql/DriverPropertyInfo.class +INFO: Loading Class: java/sql/JDBCType.class +INFO: Loading Class: java/sql/NClob.class +INFO: Loading Class: java/sql/ParameterMetaData.class +INFO: Loading Class: java/sql/PreparedStatement.class +INFO: Loading Class: java/sql/PseudoColumnUsage.class +INFO: Loading Class: java/sql/Ref.class +INFO: Loading Class: java/sql/ResultSet.class +INFO: Loading Class: java/sql/ResultSetMetaData.class +INFO: Loading Class: java/sql/RowId.class +INFO: Loading Class: java/sql/RowIdLifetime.class +INFO: Loading Class: java/sql/SQLClientInfoException.class +INFO: Loading Class: java/sql/SQLData.class +INFO: Loading Class: java/sql/SQLDataException.class +INFO: Loading Class: java/sql/SQLException$1.class +INFO: Loading Class: java/sql/SQLException.class +INFO: Loading Class: java/sql/SQLFeatureNotSupportedException.class +INFO: Loading Class: java/sql/SQLInput.class +INFO: Loading Class: java/sql/SQLIntegrityConstraintViolationException.class +INFO: Loading Class: java/sql/SQLInvalidAuthorizationSpecException.class +INFO: Loading Class: java/sql/SQLNonTransientConnectionException.class +INFO: Loading Class: java/sql/SQLNonTransientException.class +INFO: Loading Class: java/sql/SQLOutput.class +INFO: Loading Class: java/sql/SQLPermission.class +INFO: Loading Class: java/sql/SQLRecoverableException.class +INFO: Loading Class: java/sql/SQLSyntaxErrorException.class +INFO: Loading Class: java/sql/SQLTimeoutException.class +INFO: Loading Class: java/sql/SQLTransactionRollbackException.class +INFO: Loading Class: java/sql/SQLTransientConnectionException.class +INFO: Loading Class: java/sql/SQLTransientException.class +INFO: Loading Class: java/sql/SQLType.class +INFO: Loading Class: java/sql/SQLWarning.class +INFO: Loading Class: java/sql/SQLXML.class +INFO: Loading Class: java/sql/Savepoint.class +INFO: Loading Class: java/sql/Statement.class +INFO: Loading Class: java/sql/Struct.class +INFO: Loading Class: java/sql/Time.class +INFO: Loading Class: java/sql/Timestamp.class +INFO: Loading Class: java/sql/Types.class +INFO: Loading Class: java/sql/Wrapper.class +INFO: Loading Class: java/text/Annotation.class +INFO: Loading Class: java/text/AttributeEntry.class +INFO: Loading Class: java/text/AttributedString$AttributeMap.class +INFO: Loading Class: java/text/Bidi.class +INFO: Loading Class: java/text/BreakIterator$BreakIteratorCache.class +INFO: Loading Class: java/text/BreakIterator.class +INFO: Loading Class: java/text/CalendarBuilder.class +INFO: Loading Class: java/text/CharacterIteratorFieldDelegate.class +INFO: Loading Class: java/text/ChoiceFormat.class +INFO: Loading Class: java/text/CollationElementIterator.class +INFO: Loading Class: java/text/CollationKey.class +INFO: Loading Class: java/text/Collator.class +INFO: Loading Class: java/text/DateFormat$Field.class +INFO: Loading Class: java/text/DateFormat.class +INFO: Loading Class: java/text/DateFormatSymbols.class +INFO: Loading Class: java/text/DecimalFormat$1.class +INFO: Loading Class: java/text/DecimalFormat$DigitArrays.class +INFO: Loading Class: java/text/DecimalFormat$FastPathData.class +INFO: Loading Class: java/text/DecimalFormat.class +INFO: Loading Class: java/text/DecimalFormatSymbols.class +INFO: Loading Class: java/text/DigitList$1.class +INFO: Loading Class: java/text/DigitList.class +INFO: Loading Class: java/text/DontCareFieldPosition$1.class +INFO: Loading Class: java/text/DontCareFieldPosition.class +INFO: Loading Class: java/text/EntryPair.class +INFO: Loading Class: java/text/FieldPosition$1.class +INFO: Loading Class: java/text/FieldPosition$Delegate.class +INFO: Loading Class: java/text/Format$FieldDelegate.class +INFO: Loading Class: java/text/MergeCollation.class +INFO: Loading Class: java/text/Normalizer$Form.class +INFO: Loading Class: java/text/Normalizer.class +INFO: Loading Class: java/text/NumberFormat$Field.class +INFO: Loading Class: java/text/NumberFormat.class +INFO: Loading Class: java/text/ParseException.class +INFO: Loading Class: java/text/ParsePosition.class +INFO: Loading Class: java/text/PatternEntry$Parser.class +INFO: Loading Class: java/text/PatternEntry.class +INFO: Loading Class: java/text/RBCollationTables$1.class +INFO: Loading Class: java/text/RBCollationTables$BuildAPI.class +INFO: Loading Class: java/text/RBCollationTables.class +INFO: Loading Class: java/text/RBTableBuilder.class +INFO: Loading Class: java/text/RuleBasedCollationKey.class +INFO: Loading Class: java/text/RuleBasedCollator.class +INFO: Loading Class: java/text/SimpleDateFormat.class +INFO: Loading Class: java/text/StringCharacterIterator.class +INFO: Loading Class: java/time/Clock$FixedClock.class +INFO: Loading Class: java/time/Clock$OffsetClock.class +INFO: Loading Class: java/time/Clock$SystemClock.class +INFO: Loading Class: java/time/Clock$TickClock.class +INFO: Loading Class: java/time/Clock.class +INFO: Loading Class: java/time/DateTimeException.class +INFO: Loading Class: java/time/DayOfWeek.class +INFO: Loading Class: java/time/Duration$1.class +INFO: Loading Class: java/time/Duration$DurationUnits.class +INFO: Loading Class: java/time/Duration.class +INFO: Loading Class: java/time/Instant$1.class +INFO: Loading Class: java/time/Instant.class +INFO: Loading Class: java/time/LocalDate$1.class +INFO: Loading Class: java/time/LocalDate.class +INFO: Loading Class: java/time/LocalDateTime$1.class +INFO: Loading Class: java/time/LocalDateTime.class +INFO: Loading Class: java/time/LocalTime$1.class +INFO: Loading Class: java/time/LocalTime.class +INFO: Loading Class: java/time/Month$1.class +INFO: Loading Class: java/time/Month.class +INFO: Loading Class: java/time/MonthDay$1.class +INFO: Loading Class: java/time/MonthDay.class +INFO: Loading Class: java/time/OffsetDateTime$1.class +INFO: Loading Class: java/time/OffsetDateTime.class +INFO: Loading Class: java/time/OffsetTime$1.class +INFO: Loading Class: java/time/OffsetTime.class +INFO: Loading Class: java/time/Period.class +INFO: Loading Class: java/time/Ser.class +INFO: Loading Class: java/time/Year$1.class +INFO: Loading Class: java/time/Year.class +INFO: Loading Class: java/time/YearMonth$1.class +INFO: Loading Class: java/time/YearMonth.class +INFO: Loading Class: java/time/ZoneId$1.class +INFO: Loading Class: java/time/ZoneId.class +INFO: Loading Class: java/time/ZoneOffset.class +INFO: Loading Class: java/time/ZoneRegion.class +INFO: Loading Class: java/time/ZonedDateTime$1.class +INFO: Loading Class: java/time/ZonedDateTime.class +INFO: Loading Class: java/time/chrono/AbstractChronology.class +INFO: Loading Class: java/time/chrono/ChronoLocalDate.class +INFO: Loading Class: java/time/chrono/ChronoLocalDateImpl$1.class +INFO: Loading Class: java/time/chrono/ChronoLocalDateImpl.class +INFO: Loading Class: java/time/chrono/ChronoLocalDateTime.class +INFO: Loading Class: java/time/chrono/ChronoLocalDateTimeImpl$1.class +INFO: Loading Class: java/time/chrono/ChronoLocalDateTimeImpl.class +INFO: Loading Class: java/time/chrono/ChronoPeriod.class +INFO: Loading Class: java/time/chrono/ChronoPeriodImpl.class +INFO: Loading Class: java/time/chrono/ChronoZonedDateTime$1.class +INFO: Loading Class: java/time/chrono/ChronoZonedDateTime.class +INFO: Loading Class: java/time/chrono/ChronoZonedDateTimeImpl$1.class +INFO: Loading Class: java/time/chrono/ChronoZonedDateTimeImpl.class +INFO: Loading Class: java/time/chrono/Chronology$1.class +INFO: Loading Class: java/time/chrono/Chronology.class +INFO: Loading Class: java/time/chrono/Era.class +INFO: Loading Class: java/time/chrono/HijrahChronology$1.class +INFO: Loading Class: java/time/chrono/HijrahChronology.class +INFO: Loading Class: java/time/chrono/HijrahDate$1.class +INFO: Loading Class: java/time/chrono/HijrahDate.class +INFO: Loading Class: java/time/chrono/HijrahEra.class +INFO: Loading Class: java/time/chrono/IsoChronology.class +INFO: Loading Class: java/time/chrono/IsoEra.class +INFO: Loading Class: java/time/chrono/JapaneseChronology$1.class +INFO: Loading Class: java/time/chrono/JapaneseChronology.class +INFO: Loading Class: java/time/chrono/JapaneseDate$1.class +INFO: Loading Class: java/time/chrono/JapaneseDate.class +INFO: Loading Class: java/time/chrono/JapaneseEra.class +INFO: Loading Class: java/time/chrono/MinguoChronology$1.class +INFO: Loading Class: java/time/chrono/MinguoChronology.class +INFO: Loading Class: java/time/chrono/MinguoDate$1.class +INFO: Loading Class: java/time/chrono/MinguoDate.class +INFO: Loading Class: java/time/chrono/MinguoEra.class +INFO: Loading Class: java/time/chrono/Ser.class +INFO: Loading Class: java/time/chrono/ThaiBuddhistChronology$1.class +INFO: Loading Class: java/time/chrono/ThaiBuddhistChronology.class +INFO: Loading Class: java/time/chrono/ThaiBuddhistDate$1.class +INFO: Loading Class: java/time/chrono/ThaiBuddhistDate.class +INFO: Loading Class: java/time/chrono/ThaiBuddhistEra.class +INFO: Loading Class: java/time/format/DateTimeFormatter$ClassicFormat.class +INFO: Loading Class: java/time/format/DateTimeFormatter.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$1.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$2.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$3.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$ChronoPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$CompositePrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$DateTimePrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$DefaultValueParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$FractionPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$InstantPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$LocalizedOffsetIdPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$LocalizedPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$NumberPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$OffsetIdPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$PadPrinterParserDecorator.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$PrefixTree$CI.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$PrefixTree$LENIENT.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$PrefixTree.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$ReducedPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$SettingsParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$StringLiteralPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$TextPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$WeekBasedFieldPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$ZoneIdPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder$ZoneTextPrinterParser.class +INFO: Loading Class: java/time/format/DateTimeFormatterBuilder.class +INFO: Loading Class: java/time/format/DateTimeParseContext.class +INFO: Loading Class: java/time/format/DateTimeParseException.class +INFO: Loading Class: java/time/format/DateTimePrintContext$1.class +INFO: Loading Class: java/time/format/DateTimePrintContext.class +INFO: Loading Class: java/time/format/DateTimeTextProvider$1.class +INFO: Loading Class: java/time/format/DateTimeTextProvider$2.class +INFO: Loading Class: java/time/format/DateTimeTextProvider$LocaleStore.class +INFO: Loading Class: java/time/format/DateTimeTextProvider.class +INFO: Loading Class: java/time/format/DecimalStyle.class +INFO: Loading Class: java/time/format/FormatStyle.class +INFO: Loading Class: java/time/format/Parsed.class +INFO: Loading Class: java/time/format/ResolverStyle.class +INFO: Loading Class: java/time/format/SignStyle.class +INFO: Loading Class: java/time/format/TextStyle.class +INFO: Loading Class: java/time/format/ZoneName.class +INFO: Loading Class: java/time/temporal/ChronoField.class +INFO: Loading Class: java/time/temporal/ChronoUnit.class +INFO: Loading Class: java/time/temporal/IsoFields$1.class +INFO: Loading Class: java/time/temporal/IsoFields$Field$1.class +INFO: Loading Class: java/time/temporal/IsoFields$Field$2.class +INFO: Loading Class: java/time/temporal/IsoFields$Field$3.class +INFO: Loading Class: java/time/temporal/IsoFields$Field$4.class +INFO: Loading Class: java/time/temporal/IsoFields$Field.class +INFO: Loading Class: java/time/temporal/IsoFields$Unit.class +INFO: Loading Class: java/time/temporal/IsoFields.class +INFO: Loading Class: java/time/temporal/JulianFields$Field.class +INFO: Loading Class: java/time/temporal/JulianFields.class +INFO: Loading Class: java/time/temporal/Temporal.class +INFO: Loading Class: java/time/temporal/TemporalAccessor.class +INFO: Loading Class: java/time/temporal/TemporalAdjuster.class +INFO: Loading Class: java/time/temporal/TemporalAdjusters.class +INFO: Loading Class: java/time/temporal/TemporalAmount.class +INFO: Loading Class: java/time/temporal/TemporalField.class +INFO: Loading Class: java/time/temporal/TemporalQueries.class +INFO: Loading Class: java/time/temporal/TemporalQuery.class +INFO: Loading Class: java/time/temporal/TemporalUnit.class +INFO: Loading Class: java/time/temporal/UnsupportedTemporalTypeException.class +INFO: Loading Class: java/time/temporal/ValueRange.class +INFO: Loading Class: java/time/temporal/WeekFields$ComputedDayOfField.class +INFO: Loading Class: java/time/temporal/WeekFields.class +INFO: Loading Class: java/time/zone/Ser.class +INFO: Loading Class: java/time/zone/TzdbZoneRulesProvider.class +INFO: Loading Class: java/time/zone/ZoneOffsetTransition.class +INFO: Loading Class: java/time/zone/ZoneOffsetTransitionRule$1.class +INFO: Loading Class: java/time/zone/ZoneOffsetTransitionRule$TimeDefinition.class +INFO: Loading Class: java/time/zone/ZoneOffsetTransitionRule.class +INFO: Loading Class: java/time/zone/ZoneRules.class +INFO: Loading Class: java/time/zone/ZoneRulesException.class +INFO: Loading Class: java/time/zone/ZoneRulesProvider$1.class +INFO: Loading Class: java/time/zone/ZoneRulesProvider.class +INFO: Loading Class: java/util/AbstractList$1.class +INFO: Loading Class: java/util/AbstractList$ListItr.class +INFO: Loading Class: java/util/AbstractMap$1$1.class +INFO: Loading Class: java/util/AbstractMap$1.class +INFO: Loading Class: java/util/AbstractMap$2$1.class +INFO: Loading Class: java/util/AbstractMap$2.class +INFO: Loading Class: java/util/AbstractMap$SimpleEntry.class +INFO: Loading Class: java/util/AbstractMap$SimpleImmutableEntry.class +INFO: Loading Class: java/util/ArrayDeque$1.class +INFO: Loading Class: java/util/ArrayDeque$DeqIterator.class +INFO: Loading Class: java/util/ArrayDeque$DeqSpliterator.class +INFO: Loading Class: java/util/ArrayDeque$DescendingIterator.class +INFO: Loading Class: java/util/ArrayList$1.class +INFO: Loading Class: java/util/ArrayList$ArrayListSpliterator.class +INFO: Loading Class: java/util/ArrayPrefixHelpers$CumulateTask.class +INFO: Loading Class: java/util/ArrayPrefixHelpers$DoubleCumulateTask.class +INFO: Loading Class: java/util/ArrayPrefixHelpers$IntCumulateTask.class +INFO: Loading Class: java/util/ArrayPrefixHelpers$LongCumulateTask.class +INFO: Loading Class: java/util/ArrayPrefixHelpers.class +INFO: Loading Class: java/util/Arrays$NaturalOrder.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$EmptyCompleter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJByte$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJByte$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJByte.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJChar$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJChar$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJChar.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJDouble$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJDouble$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJDouble.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJFloat$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJFloat$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJFloat.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJInt$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJInt$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJInt.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJLong$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJLong$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJLong.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJObject$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJObject$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJObject.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJShort$Merger.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJShort$Sorter.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$FJShort.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers$Relay.class +INFO: Loading Class: java/util/ArraysParallelSortHelpers.class +INFO: Loading Class: java/util/Base64$1.class +INFO: Loading Class: java/util/Base64$DecInputStream.class +INFO: Loading Class: java/util/Base64$Decoder.class +INFO: Loading Class: java/util/Base64$EncOutputStream.class +INFO: Loading Class: java/util/Base64$Encoder.class +INFO: Loading Class: java/util/Base64.class +INFO: Loading Class: java/util/BitSet$1BitSetIterator.class +INFO: Loading Class: java/util/Calendar$1.class +INFO: Loading Class: java/util/Calendar$AvailableCalendarTypes.class +INFO: Loading Class: java/util/Calendar$Builder.class +INFO: Loading Class: java/util/Calendar$CalendarAccessControlContext.class +INFO: Loading Class: java/util/Calendar.class +INFO: Loading Class: java/util/Collections$1.class +INFO: Loading Class: java/util/Collections$2.class +INFO: Loading Class: java/util/Collections$3.class +INFO: Loading Class: java/util/Collections$AsLIFOQueue.class +INFO: Loading Class: java/util/Collections$CheckedCollection$1.class +INFO: Loading Class: java/util/Collections$CheckedCollection.class +INFO: Loading Class: java/util/Collections$CheckedList$1.class +INFO: Loading Class: java/util/Collections$CheckedList.class +INFO: Loading Class: java/util/Collections$CheckedMap$CheckedEntrySet$1.class +INFO: Loading Class: java/util/Collections$CheckedMap$CheckedEntrySet$CheckedEntry.class +INFO: Loading Class: java/util/Collections$CheckedMap$CheckedEntrySet.class +INFO: Loading Class: java/util/Collections$CheckedMap.class +INFO: Loading Class: java/util/Collections$CheckedNavigableMap.class +INFO: Loading Class: java/util/Collections$CheckedNavigableSet.class +INFO: Loading Class: java/util/Collections$CheckedQueue.class +INFO: Loading Class: java/util/Collections$CheckedRandomAccessList.class +INFO: Loading Class: java/util/Collections$CheckedSet.class +INFO: Loading Class: java/util/Collections$CheckedSortedMap.class +INFO: Loading Class: java/util/Collections$CheckedSortedSet.class +INFO: Loading Class: java/util/Collections$CopiesList.class +INFO: Loading Class: java/util/Collections$EmptyIterator.class +INFO: Loading Class: java/util/Collections$EmptyListIterator.class +INFO: Loading Class: java/util/Collections$ReverseComparator.class +INFO: Loading Class: java/util/Collections$ReverseComparator2.class +INFO: Loading Class: java/util/Collections$SingletonList.class +INFO: Loading Class: java/util/Collections$SingletonMap.class +INFO: Loading Class: java/util/Collections$SingletonSet.class +INFO: Loading Class: java/util/Collections$SynchronizedList.class +INFO: Loading Class: java/util/Collections$SynchronizedNavigableMap.class +INFO: Loading Class: java/util/Collections$SynchronizedNavigableSet.class +INFO: Loading Class: java/util/Collections$SynchronizedRandomAccessList.class +INFO: Loading Class: java/util/Collections$SynchronizedSortedMap.class +INFO: Loading Class: java/util/Collections$SynchronizedSortedSet.class +INFO: Loading Class: java/util/Collections$UnmodifiableList$1.class +INFO: Loading Class: java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1.class +INFO: Loading Class: java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry.class +INFO: Loading Class: java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntrySetSpliterator.class +INFO: Loading Class: java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet.class +INFO: Loading Class: java/util/Collections$UnmodifiableNavigableMap$EmptyNavigableMap.class +INFO: Loading Class: java/util/Collections$UnmodifiableNavigableMap.class +INFO: Loading Class: java/util/Collections$UnmodifiableNavigableSet$EmptyNavigableSet.class +INFO: Loading Class: java/util/Collections$UnmodifiableNavigableSet.class +INFO: Loading Class: java/util/Collections$UnmodifiableSortedMap.class +INFO: Loading Class: java/util/Comparators$NaturalOrderComparator.class +INFO: Loading Class: java/util/Comparators$NullComparator.class +INFO: Loading Class: java/util/Comparators.class +INFO: Loading Class: java/util/ConcurrentModificationException.class +INFO: Loading Class: java/util/Currency$1.class +INFO: Loading Class: java/util/Currency$CurrencyNameGetter.class +INFO: Loading Class: java/util/Currency.class +INFO: Loading Class: java/util/DoubleSummaryStatistics.class +INFO: Loading Class: java/util/DualPivotQuicksort.class +INFO: Loading Class: java/util/DuplicateFormatFlagsException.class +INFO: Loading Class: java/util/EmptyStackException.class +INFO: Loading Class: java/util/EnumMap$1.class +INFO: Loading Class: java/util/EnumMap$EntryIterator$Entry.class +INFO: Loading Class: java/util/EnumMap$EntryIterator.class +INFO: Loading Class: java/util/EnumMap$EntrySet.class +INFO: Loading Class: java/util/EnumMap$EnumMapIterator.class +INFO: Loading Class: java/util/EnumMap$KeyIterator.class +INFO: Loading Class: java/util/EnumMap$KeySet.class +INFO: Loading Class: java/util/EnumMap$ValueIterator.class +INFO: Loading Class: java/util/EnumMap$Values.class +INFO: Loading Class: java/util/EnumMap.class +INFO: Loading Class: java/util/EnumSet$SerializationProxy.class +INFO: Loading Class: java/util/EnumSet.class +INFO: Loading Class: java/util/FormatFlagsConversionMismatchException.class +INFO: Loading Class: java/util/Formattable.class +INFO: Loading Class: java/util/FormattableFlags.class +INFO: Loading Class: java/util/Formatter$BigDecimalLayoutForm.class +INFO: Loading Class: java/util/Formatter$Conversion.class +INFO: Loading Class: java/util/Formatter$DateTime.class +INFO: Loading Class: java/util/Formatter$FixedString.class +INFO: Loading Class: java/util/Formatter$Flags.class +INFO: Loading Class: java/util/Formatter$FormatSpecifier$BigDecimalLayout.class +INFO: Loading Class: java/util/Formatter$FormatSpecifier.class +INFO: Loading Class: java/util/Formatter$FormatString.class +INFO: Loading Class: java/util/Formatter.class +INFO: Loading Class: java/util/FormatterClosedException.class +INFO: Loading Class: java/util/GregorianCalendar.class +INFO: Loading Class: java/util/HashMap$EntrySpliterator.class +INFO: Loading Class: java/util/HashMap$HashMapSpliterator.class +INFO: Loading Class: java/util/HashMap$KeySpliterator.class +INFO: Loading Class: java/util/HashMap$ValueSpliterator.class +INFO: Loading Class: java/util/Hashtable$1.class +INFO: Loading Class: java/util/Hashtable$KeySet.class +INFO: Loading Class: java/util/IdentityHashMap$1.class +INFO: Loading Class: java/util/IdentityHashMap$EntryIterator$Entry.class +INFO: Loading Class: java/util/IdentityHashMap$EntryIterator.class +INFO: Loading Class: java/util/IdentityHashMap$EntrySet.class +INFO: Loading Class: java/util/IdentityHashMap$EntrySpliterator.class +INFO: Loading Class: java/util/IdentityHashMap$IdentityHashMapSpliterator.class +INFO: Loading Class: java/util/IdentityHashMap$KeySpliterator.class +INFO: Loading Class: java/util/IdentityHashMap$ValueIterator.class +INFO: Loading Class: java/util/IdentityHashMap$ValueSpliterator.class +INFO: Loading Class: java/util/IdentityHashMap$Values.class +INFO: Loading Class: java/util/IllegalFormatCodePointException.class +INFO: Loading Class: java/util/IllegalFormatConversionException.class +INFO: Loading Class: java/util/IllegalFormatException.class +INFO: Loading Class: java/util/IllegalFormatFlagsException.class +INFO: Loading Class: java/util/IllegalFormatPrecisionException.class +INFO: Loading Class: java/util/IllegalFormatWidthException.class +INFO: Loading Class: java/util/IllformedLocaleException.class +INFO: Loading Class: java/util/InputMismatchException.class +INFO: Loading Class: java/util/IntSummaryStatistics.class +INFO: Loading Class: java/util/InvalidPropertiesFormatException.class +INFO: Loading Class: java/util/JapaneseImperialCalendar.class +INFO: Loading Class: java/util/JumboEnumSet$EnumSetIterator.class +INFO: Loading Class: java/util/JumboEnumSet.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedValueIterator.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedValues.class +INFO: Loading Class: java/util/LinkedList$1.class +INFO: Loading Class: java/util/LinkedList$DescendingIterator.class +INFO: Loading Class: java/util/LinkedList$LLSpliterator.class +INFO: Loading Class: java/util/Locale$Builder.class +INFO: Loading Class: java/util/Locale$FilteringMode.class +INFO: Loading Class: java/util/Locale$LanguageRange.class +INFO: Loading Class: java/util/Locale$LocaleNameGetter.class +INFO: Loading Class: java/util/LocaleISOData.class +INFO: Loading Class: java/util/LongSummaryStatistics.class +INFO: Loading Class: java/util/MissingFormatArgumentException.class +INFO: Loading Class: java/util/MissingFormatWidthException.class +INFO: Loading Class: java/util/NoSuchElementException.class +INFO: Loading Class: java/util/Observable.class +INFO: Loading Class: java/util/Observer.class +INFO: Loading Class: java/util/Optional.class +INFO: Loading Class: java/util/OptionalDouble.class +INFO: Loading Class: java/util/OptionalInt.class +INFO: Loading Class: java/util/OptionalLong.class +INFO: Loading Class: java/util/PrimitiveIterator$OfDouble.class +INFO: Loading Class: java/util/PrimitiveIterator$OfInt.class +INFO: Loading Class: java/util/PrimitiveIterator$OfLong.class +INFO: Loading Class: java/util/PrimitiveIterator.class +INFO: Loading Class: java/util/PriorityQueue$1.class +INFO: Loading Class: java/util/PriorityQueue$Itr.class +INFO: Loading Class: java/util/PriorityQueue$PriorityQueueSpliterator.class +INFO: Loading Class: java/util/Properties$XmlSupport$1.class +INFO: Loading Class: java/util/Properties$XmlSupport.class +INFO: Loading Class: java/util/PropertyPermission.class +INFO: Loading Class: java/util/PropertyPermissionCollection.class +INFO: Loading Class: java/util/Random$RandomDoublesSpliterator.class +INFO: Loading Class: java/util/Random$RandomIntsSpliterator.class +INFO: Loading Class: java/util/Random$RandomLongsSpliterator.class +INFO: Loading Class: java/util/RandomAccessSubList.class +INFO: Loading Class: java/util/RegularEnumSet$EnumSetIterator.class +INFO: Loading Class: java/util/RegularEnumSet.class +INFO: Loading Class: java/util/ResourceBundle$NoFallbackControl.class +INFO: Loading Class: java/util/Scanner$1.class +INFO: Loading Class: java/util/Scanner.class +INFO: Loading Class: java/util/ServiceConfigurationError.class +INFO: Loading Class: java/util/ServiceLoader$LazyIterator$1.class +INFO: Loading Class: java/util/ServiceLoader$LazyIterator$2.class +INFO: Loading Class: java/util/SimpleTimeZone.class +INFO: Loading Class: java/util/SortedSet$1.class +INFO: Loading Class: java/util/Spliterator$OfDouble.class +INFO: Loading Class: java/util/Spliterator$OfInt.class +INFO: Loading Class: java/util/Spliterator$OfLong.class +INFO: Loading Class: java/util/Spliterator$OfPrimitive.class +INFO: Loading Class: java/util/Spliterator.class +INFO: Loading Class: java/util/Spliterators$1Adapter.class +INFO: Loading Class: java/util/Spliterators$2Adapter.class +INFO: Loading Class: java/util/Spliterators$3Adapter.class +INFO: Loading Class: java/util/Spliterators$4Adapter.class +INFO: Loading Class: java/util/Spliterators$AbstractDoubleSpliterator$HoldingDoubleConsumer.class +INFO: Loading Class: java/util/Spliterators$AbstractDoubleSpliterator.class +INFO: Loading Class: java/util/Spliterators$AbstractIntSpliterator$HoldingIntConsumer.class +INFO: Loading Class: java/util/Spliterators$AbstractIntSpliterator.class +INFO: Loading Class: java/util/Spliterators$AbstractLongSpliterator$HoldingLongConsumer.class +INFO: Loading Class: java/util/Spliterators$AbstractLongSpliterator.class +INFO: Loading Class: java/util/Spliterators$AbstractSpliterator$HoldingConsumer.class +INFO: Loading Class: java/util/Spliterators$AbstractSpliterator.class +INFO: Loading Class: java/util/Spliterators$ArraySpliterator.class +INFO: Loading Class: java/util/Spliterators$DoubleArraySpliterator.class +INFO: Loading Class: java/util/Spliterators$DoubleIteratorSpliterator.class +INFO: Loading Class: java/util/Spliterators$EmptySpliterator$OfDouble.class +INFO: Loading Class: java/util/Spliterators$EmptySpliterator$OfInt.class +INFO: Loading Class: java/util/Spliterators$EmptySpliterator$OfLong.class +INFO: Loading Class: java/util/Spliterators$EmptySpliterator$OfRef.class +INFO: Loading Class: java/util/Spliterators$EmptySpliterator.class +INFO: Loading Class: java/util/Spliterators$IntArraySpliterator.class +INFO: Loading Class: java/util/Spliterators$IntIteratorSpliterator.class +INFO: Loading Class: java/util/Spliterators$IteratorSpliterator.class +INFO: Loading Class: java/util/Spliterators$LongArraySpliterator.class +INFO: Loading Class: java/util/Spliterators$LongIteratorSpliterator.class +INFO: Loading Class: java/util/Spliterators.class +INFO: Loading Class: java/util/SplittableRandom$RandomDoublesSpliterator.class +INFO: Loading Class: java/util/SplittableRandom$RandomIntsSpliterator.class +INFO: Loading Class: java/util/SplittableRandom$RandomLongsSpliterator.class +INFO: Loading Class: java/util/SplittableRandom.class +INFO: Loading Class: java/util/StringJoiner.class +INFO: Loading Class: java/util/SubList$1.class +INFO: Loading Class: java/util/SubList.class +INFO: Loading Class: java/util/TaskQueue.class +INFO: Loading Class: java/util/Timer$1.class +INFO: Loading Class: java/util/Timer.class +INFO: Loading Class: java/util/TimerTask.class +INFO: Loading Class: java/util/TimerThread.class +INFO: Loading Class: java/util/TooManyListenersException.class +INFO: Loading Class: java/util/TreeMap$AscendingSubMap$AscendingEntrySetView.class +INFO: Loading Class: java/util/TreeMap$AscendingSubMap.class +INFO: Loading Class: java/util/TreeMap$DescendingKeyIterator.class +INFO: Loading Class: java/util/TreeMap$DescendingKeySpliterator.class +INFO: Loading Class: java/util/TreeMap$DescendingSubMap$DescendingEntrySetView.class +INFO: Loading Class: java/util/TreeMap$DescendingSubMap.class +INFO: Loading Class: java/util/TreeMap$EntryIterator.class +INFO: Loading Class: java/util/TreeMap$EntrySet.class +INFO: Loading Class: java/util/TreeMap$EntrySpliterator.class +INFO: Loading Class: java/util/TreeMap$KeySpliterator.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap$DescendingSubMapEntryIterator.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap$DescendingSubMapKeyIterator.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap$EntrySetView.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap$SubMapEntryIterator.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap$SubMapIterator.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap$SubMapKeyIterator.class +INFO: Loading Class: java/util/TreeMap$NavigableSubMap.class +INFO: Loading Class: java/util/TreeMap$SubMap.class +INFO: Loading Class: java/util/TreeMap$TreeMapSpliterator.class +INFO: Loading Class: java/util/TreeMap$ValueIterator.class +INFO: Loading Class: java/util/TreeMap$ValueSpliterator.class +INFO: Loading Class: java/util/TreeMap$Values.class +INFO: Loading Class: java/util/Tripwire.class +INFO: Loading Class: java/util/UUID$Holder.class +INFO: Loading Class: java/util/UUID.class +INFO: Loading Class: java/util/UnknownFormatConversionException.class +INFO: Loading Class: java/util/UnknownFormatFlagsException.class +INFO: Loading Class: java/util/Vector$VectorSpliterator.class +INFO: Loading Class: java/util/WeakHashMap$1.class +INFO: Loading Class: java/util/WeakHashMap$EntryIterator.class +INFO: Loading Class: java/util/WeakHashMap$EntrySet.class +INFO: Loading Class: java/util/WeakHashMap$EntrySpliterator.class +INFO: Loading Class: java/util/WeakHashMap$KeySpliterator.class +INFO: Loading Class: java/util/WeakHashMap$ValueIterator.class +INFO: Loading Class: java/util/WeakHashMap$ValueSpliterator.class +INFO: Loading Class: java/util/WeakHashMap$Values.class +INFO: Loading Class: java/util/WeakHashMap$WeakHashMapSpliterator.class +INFO: Loading Class: java/util/concurrent/ArrayBlockingQueue$Itr.class +INFO: Loading Class: java/util/concurrent/ArrayBlockingQueue$Itrs$Node.class +INFO: Loading Class: java/util/concurrent/ArrayBlockingQueue$Itrs.class +INFO: Loading Class: java/util/concurrent/ArrayBlockingQueue.class +INFO: Loading Class: java/util/concurrent/BlockingDeque.class +INFO: Loading Class: java/util/concurrent/BrokenBarrierException.class +INFO: Loading Class: java/util/concurrent/Callable.class +INFO: Loading Class: java/util/concurrent/CancellationException.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$AltResult.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$AsyncRun.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$AsyncSupply.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$AsynchronousCompletionTask.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$BiAccept.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$BiApply.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$BiCompletion.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$BiRelay.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$BiRun.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$CoCompletion.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$Completion.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$OrAccept.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$OrApply.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$OrRelay.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$OrRun.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$Signaller.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$ThreadPerTaskExecutor.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniAccept.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniApply.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniCompletion.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniCompose.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniExceptionally.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniHandle.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniRelay.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniRun.class +INFO: Loading Class: java/util/concurrent/CompletableFuture$UniWhenComplete.class +INFO: Loading Class: java/util/concurrent/CompletableFuture.class +INFO: Loading Class: java/util/concurrent/CompletionException.class +INFO: Loading Class: java/util/concurrent/CompletionService.class +INFO: Loading Class: java/util/concurrent/CompletionStage.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$BulkTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$EntryIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$EntrySpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachEntryTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachKeyTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachMappingTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachTransformedEntryTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachTransformedKeyTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachTransformedMappingTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachTransformedValueTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForEachValueTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$KeySpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapEntry.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToDoubleTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToIntTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceEntriesToLongTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceKeysTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToDoubleTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToIntTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceKeysToLongTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToDoubleTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToIntTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceMappingsToLongTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceValuesTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToDoubleTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToIntTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$MapReduceValuesToLongTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ReduceEntriesTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ReduceKeysTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ReduceValuesTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ReservationNode.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$SearchEntriesTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$SearchKeysTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$SearchMappingsTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$SearchValuesTask.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$TableStack.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$TreeBin.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$TreeNode.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ValueIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ValueSpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque$1.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque$AbstractItr.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque$CLDSpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque$DescendingItr.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque$Itr.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque$Node.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedDeque.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedQueue$CLQSpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedQueue$Itr.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedQueue$Node.class +INFO: Loading Class: java/util/concurrent/ConcurrentLinkedQueue.class +INFO: Loading Class: java/util/concurrent/ConcurrentNavigableMap.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$CSLMSpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$EntryIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$EntrySet.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$EntrySpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$HeadIndex.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$Index.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$Iter.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$KeyIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$KeySet.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$KeySpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$Node.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$SubMap$SubMapEntryIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$SubMap$SubMapIter.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$SubMap$SubMapKeyIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$SubMap$SubMapValueIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$SubMap.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$ValueIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$ValueSpliterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap$Values.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListMap.class +INFO: Loading Class: java/util/concurrent/ConcurrentSkipListSet.class +INFO: Loading Class: java/util/concurrent/CopyOnWriteArrayList$1.class +INFO: Loading Class: java/util/concurrent/CopyOnWriteArrayList$COWIterator.class +INFO: Loading Class: java/util/concurrent/CopyOnWriteArrayList$COWSubList.class +INFO: Loading Class: java/util/concurrent/CopyOnWriteArrayList$COWSubListIterator.class +INFO: Loading Class: java/util/concurrent/CopyOnWriteArraySet.class +INFO: Loading Class: java/util/concurrent/CountDownLatch$Sync.class +INFO: Loading Class: java/util/concurrent/CountDownLatch.class +INFO: Loading Class: java/util/concurrent/CountedCompleter.class +INFO: Loading Class: java/util/concurrent/CyclicBarrier$1.class +INFO: Loading Class: java/util/concurrent/CyclicBarrier$Generation.class +INFO: Loading Class: java/util/concurrent/CyclicBarrier.class +INFO: Loading Class: java/util/concurrent/DelayQueue$Itr.class +INFO: Loading Class: java/util/concurrent/Exchanger$Node.class +INFO: Loading Class: java/util/concurrent/Exchanger$Participant.class +INFO: Loading Class: java/util/concurrent/Exchanger.class +INFO: Loading Class: java/util/concurrent/ExecutionException.class +INFO: Loading Class: java/util/concurrent/ExecutorCompletionService$QueueingFuture.class +INFO: Loading Class: java/util/concurrent/ExecutorCompletionService.class +INFO: Loading Class: java/util/concurrent/Executors$1.class +INFO: Loading Class: java/util/concurrent/Executors$2.class +INFO: Loading Class: java/util/concurrent/Executors$DefaultThreadFactory.class +INFO: Loading Class: java/util/concurrent/Executors$DelegatedExecutorService.class +INFO: Loading Class: java/util/concurrent/Executors$DelegatedScheduledExecutorService.class +INFO: Loading Class: java/util/concurrent/Executors$FinalizableDelegatedExecutorService.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedCallable$1.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedCallable.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedCallableUsingCurrentClassLoader$1.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedCallableUsingCurrentClassLoader.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedThreadFactory$1$1.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedThreadFactory$1.class +INFO: Loading Class: java/util/concurrent/Executors$PrivilegedThreadFactory.class +INFO: Loading Class: java/util/concurrent/Executors$RunnableAdapter.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$1.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$EmptyTask.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$InnocuousForkJoinWorkerThreadFactory$1.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$InnocuousForkJoinWorkerThreadFactory.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$ManagedBlocker.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool$WorkQueue.class +INFO: Loading Class: java/util/concurrent/ForkJoinPool.class +INFO: Loading Class: java/util/concurrent/ForkJoinTask$AdaptedCallable.class +INFO: Loading Class: java/util/concurrent/ForkJoinTask$AdaptedRunnable.class +INFO: Loading Class: java/util/concurrent/ForkJoinTask$AdaptedRunnableAction.class +INFO: Loading Class: java/util/concurrent/ForkJoinTask$ExceptionNode.class +INFO: Loading Class: java/util/concurrent/ForkJoinTask$RunnableExecuteAction.class +INFO: Loading Class: java/util/concurrent/ForkJoinTask.class +INFO: Loading Class: java/util/concurrent/ForkJoinWorkerThread$InnocuousForkJoinWorkerThread.class +INFO: Loading Class: java/util/concurrent/ForkJoinWorkerThread.class +INFO: Loading Class: java/util/concurrent/Future.class +INFO: Loading Class: java/util/concurrent/FutureTask$WaitNode.class +INFO: Loading Class: java/util/concurrent/FutureTask.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque$1.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque$AbstractItr.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque$DescendingItr.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque$Itr.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque$LBDSpliterator.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque$Node.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingDeque.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingQueue$Itr.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingQueue$LBQSpliterator.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingQueue$Node.class +INFO: Loading Class: java/util/concurrent/LinkedBlockingQueue.class +INFO: Loading Class: java/util/concurrent/LinkedTransferQueue$Itr.class +INFO: Loading Class: java/util/concurrent/LinkedTransferQueue$LTQSpliterator.class +INFO: Loading Class: java/util/concurrent/LinkedTransferQueue$Node.class +INFO: Loading Class: java/util/concurrent/LinkedTransferQueue.class +INFO: Loading Class: java/util/concurrent/Phaser$QNode.class +INFO: Loading Class: java/util/concurrent/Phaser.class +INFO: Loading Class: java/util/concurrent/PriorityBlockingQueue$Itr.class +INFO: Loading Class: java/util/concurrent/PriorityBlockingQueue$PBQSpliterator.class +INFO: Loading Class: java/util/concurrent/PriorityBlockingQueue.class +INFO: Loading Class: java/util/concurrent/RecursiveAction.class +INFO: Loading Class: java/util/concurrent/RecursiveTask.class +INFO: Loading Class: java/util/concurrent/RejectedExecutionException.class +INFO: Loading Class: java/util/concurrent/RunnableFuture.class +INFO: Loading Class: java/util/concurrent/RunnableScheduledFuture.class +INFO: Loading Class: java/util/concurrent/ScheduledExecutorService.class +INFO: Loading Class: java/util/concurrent/ScheduledFuture.class +INFO: Loading Class: java/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue$Itr.class +INFO: Loading Class: java/util/concurrent/ScheduledThreadPoolExecutor$DelayedWorkQueue.class +INFO: Loading Class: java/util/concurrent/ScheduledThreadPoolExecutor$ScheduledFutureTask.class +INFO: Loading Class: java/util/concurrent/ScheduledThreadPoolExecutor.class +INFO: Loading Class: java/util/concurrent/Semaphore$FairSync.class +INFO: Loading Class: java/util/concurrent/Semaphore$NonfairSync.class +INFO: Loading Class: java/util/concurrent/Semaphore$Sync.class +INFO: Loading Class: java/util/concurrent/Semaphore.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$FifoWaitQueue.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$LifoWaitQueue.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$TransferQueue$QNode.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$TransferQueue.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$WaitQueue.class +INFO: Loading Class: java/util/concurrent/ThreadLocalRandom$RandomDoublesSpliterator.class +INFO: Loading Class: java/util/concurrent/ThreadLocalRandom$RandomIntsSpliterator.class +INFO: Loading Class: java/util/concurrent/ThreadLocalRandom$RandomLongsSpliterator.class +INFO: Loading Class: java/util/concurrent/ThreadLocalRandom.class +INFO: Loading Class: java/util/concurrent/ThreadPoolExecutor$CallerRunsPolicy.class +INFO: Loading Class: java/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy.class +INFO: Loading Class: java/util/concurrent/ThreadPoolExecutor$DiscardPolicy.class +INFO: Loading Class: java/util/concurrent/TimeoutException.class +INFO: Loading Class: java/util/concurrent/TransferQueue.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicIntegerArray.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl$1.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicIntegerFieldUpdater.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLongArray.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater$1.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLongFieldUpdater$LockedUpdater$1.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLongFieldUpdater$LockedUpdater.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLongFieldUpdater.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicMarkableReference$Pair.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicMarkableReference.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicReference.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicReferenceArray.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicStampedReference$Pair.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicStampedReference.class +INFO: Loading Class: java/util/concurrent/atomic/DoubleAccumulator$SerializationProxy.class +INFO: Loading Class: java/util/concurrent/atomic/DoubleAccumulator.class +INFO: Loading Class: java/util/concurrent/atomic/DoubleAdder$SerializationProxy.class +INFO: Loading Class: java/util/concurrent/atomic/DoubleAdder.class +INFO: Loading Class: java/util/concurrent/atomic/LongAccumulator$SerializationProxy.class +INFO: Loading Class: java/util/concurrent/atomic/LongAccumulator.class +INFO: Loading Class: java/util/concurrent/atomic/LongAdder$SerializationProxy.class +INFO: Loading Class: java/util/concurrent/atomic/LongAdder.class +INFO: Loading Class: java/util/concurrent/atomic/Striped64$Cell.class +INFO: Loading Class: java/util/concurrent/atomic/Striped64.class +INFO: Loading Class: java/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject.class +INFO: Loading Class: java/util/concurrent/locks/AbstractQueuedLongSynchronizer$Node.class +INFO: Loading Class: java/util/concurrent/locks/AbstractQueuedLongSynchronizer.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantLock$FairSync.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$FairSync.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$Sync$HoldCounter.class +INFO: Loading Class: java/util/concurrent/locks/StampedLock$ReadLockView.class +INFO: Loading Class: java/util/concurrent/locks/StampedLock$ReadWriteLockView.class +INFO: Loading Class: java/util/concurrent/locks/StampedLock$WNode.class +INFO: Loading Class: java/util/concurrent/locks/StampedLock$WriteLockView.class +INFO: Loading Class: java/util/concurrent/locks/StampedLock.class +INFO: Loading Class: java/util/function/BiConsumer.class +INFO: Loading Class: java/util/function/BiPredicate.class +INFO: Loading Class: java/util/function/BinaryOperator.class +INFO: Loading Class: java/util/function/BooleanSupplier.class +INFO: Loading Class: java/util/function/Consumer.class +INFO: Loading Class: java/util/function/DoubleBinaryOperator.class +INFO: Loading Class: java/util/function/DoubleConsumer.class +INFO: Loading Class: java/util/function/DoubleFunction.class +INFO: Loading Class: java/util/function/DoublePredicate.class +INFO: Loading Class: java/util/function/DoubleSupplier.class +INFO: Loading Class: java/util/function/DoubleToIntFunction.class +INFO: Loading Class: java/util/function/DoubleToLongFunction.class +INFO: Loading Class: java/util/function/DoubleUnaryOperator.class +INFO: Loading Class: java/util/function/Function.class +INFO: Loading Class: java/util/function/IntBinaryOperator.class +INFO: Loading Class: java/util/function/IntConsumer.class +INFO: Loading Class: java/util/function/IntFunction.class +INFO: Loading Class: java/util/function/IntPredicate.class +INFO: Loading Class: java/util/function/IntSupplier.class +INFO: Loading Class: java/util/function/IntToDoubleFunction.class +INFO: Loading Class: java/util/function/IntToLongFunction.class +INFO: Loading Class: java/util/function/IntUnaryOperator.class +INFO: Loading Class: java/util/function/LongBinaryOperator.class +INFO: Loading Class: java/util/function/LongConsumer.class +INFO: Loading Class: java/util/function/LongFunction.class +INFO: Loading Class: java/util/function/LongPredicate.class +INFO: Loading Class: java/util/function/LongSupplier.class +INFO: Loading Class: java/util/function/LongToDoubleFunction.class +INFO: Loading Class: java/util/function/LongToIntFunction.class +INFO: Loading Class: java/util/function/LongUnaryOperator.class +INFO: Loading Class: java/util/function/ObjDoubleConsumer.class +INFO: Loading Class: java/util/function/ObjIntConsumer.class +INFO: Loading Class: java/util/function/ObjLongConsumer.class +INFO: Loading Class: java/util/function/Predicate.class +INFO: Loading Class: java/util/function/Supplier.class +INFO: Loading Class: java/util/function/ToDoubleBiFunction.class +INFO: Loading Class: java/util/function/ToDoubleFunction.class +INFO: Loading Class: java/util/function/ToIntBiFunction.class +INFO: Loading Class: java/util/function/ToIntFunction.class +INFO: Loading Class: java/util/function/ToLongBiFunction.class +INFO: Loading Class: java/util/function/ToLongFunction.class +INFO: Loading Class: java/util/function/UnaryOperator.class +INFO: Loading Class: java/util/jar/JarException.class +INFO: Loading Class: java/util/jar/JarFile$1.class +INFO: Loading Class: java/util/jar/JarFile$2.class +INFO: Loading Class: java/util/jar/JarFile$3.class +INFO: Loading Class: java/util/jar/JarInputStream.class +INFO: Loading Class: java/util/jar/JarOutputStream.class +INFO: Loading Class: java/util/jar/JarVerifier$1.class +INFO: Loading Class: java/util/jar/JarVerifier$2.class +INFO: Loading Class: java/util/jar/JarVerifier$4.class +INFO: Loading Class: java/util/jar/JarVerifier$VerifierCodeSource.class +INFO: Loading Class: java/util/jar/JarVerifier$VerifierStream.class +INFO: Loading Class: java/util/jar/Pack200$Packer.class +INFO: Loading Class: java/util/jar/Pack200$Unpacker.class +INFO: Loading Class: java/util/jar/Pack200.class +INFO: Loading Class: java/util/logging/ConsoleHandler.class +INFO: Loading Class: java/util/logging/ErrorManager.class +INFO: Loading Class: java/util/logging/FileHandler$1.class +INFO: Loading Class: java/util/logging/FileHandler$InitializationErrorManager.class +INFO: Loading Class: java/util/logging/FileHandler$MeteredStream.class +INFO: Loading Class: java/util/logging/FileHandler.class +INFO: Loading Class: java/util/logging/Filter.class +INFO: Loading Class: java/util/logging/Formatter.class +INFO: Loading Class: java/util/logging/Level$1.class +INFO: Loading Class: java/util/logging/LogManager$4.class +INFO: Loading Class: java/util/logging/LogManager$6.class +INFO: Loading Class: java/util/logging/LogManager$7.class +INFO: Loading Class: java/util/logging/LogManager$Beans.class +INFO: Loading Class: java/util/logging/LogRecord.class +INFO: Loading Class: java/util/logging/Logger$LoggerBundle.class +INFO: Loading Class: java/util/logging/Logger$SystemLoggerHelper$1.class +INFO: Loading Class: java/util/logging/Logger$SystemLoggerHelper.class +INFO: Loading Class: java/util/logging/Logging.class +INFO: Loading Class: java/util/logging/LoggingMXBean.class +INFO: Loading Class: java/util/logging/MemoryHandler.class +INFO: Loading Class: java/util/logging/SimpleFormatter.class +INFO: Loading Class: java/util/logging/SocketHandler.class +INFO: Loading Class: java/util/logging/StreamHandler.class +INFO: Loading Class: java/util/logging/XMLFormatter.class +INFO: Loading Class: java/util/prefs/AbstractPreferences$1.class +INFO: Loading Class: java/util/prefs/AbstractPreferences$EventDispatchThread.class +INFO: Loading Class: java/util/prefs/AbstractPreferences$NodeAddedEvent.class +INFO: Loading Class: java/util/prefs/AbstractPreferences$NodeRemovedEvent.class +INFO: Loading Class: java/util/prefs/AbstractPreferences.class +INFO: Loading Class: java/util/prefs/BackingStoreException.class +INFO: Loading Class: java/util/prefs/Base64.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$1.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$10.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$11.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$12.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$2.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$3.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$4$1.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$4.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$5.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$6.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$7.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$8.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$9.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$Change.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$NodeCreate.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$Put.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences$Remove.class +INFO: Loading Class: java/util/prefs/FileSystemPreferences.class +INFO: Loading Class: java/util/prefs/FileSystemPreferencesFactory.class +INFO: Loading Class: java/util/prefs/InvalidPreferencesFormatException.class +INFO: Loading Class: java/util/prefs/MacOSXPreferences.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFactory.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFile$1.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFile$2.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFile$3.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFile$FlushTask.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFile$SyncTask.class +INFO: Loading Class: java/util/prefs/MacOSXPreferencesFile.class +INFO: Loading Class: java/util/prefs/NodeChangeEvent.class +INFO: Loading Class: java/util/prefs/NodeChangeListener.class +INFO: Loading Class: java/util/prefs/PreferenceChangeEvent.class +INFO: Loading Class: java/util/prefs/PreferenceChangeListener.class +INFO: Loading Class: java/util/prefs/Preferences$1.class +INFO: Loading Class: java/util/prefs/Preferences$2.class +INFO: Loading Class: java/util/prefs/Preferences.class +INFO: Loading Class: java/util/prefs/PreferencesFactory.class +INFO: Loading Class: java/util/prefs/XmlSupport$1.class +INFO: Loading Class: java/util/prefs/XmlSupport$EH.class +INFO: Loading Class: java/util/prefs/XmlSupport$Resolver.class +INFO: Loading Class: java/util/prefs/XmlSupport.class +INFO: Loading Class: java/util/regex/ASCII.class +INFO: Loading Class: java/util/regex/MatchResult.class +INFO: Loading Class: java/util/regex/Matcher.class +INFO: Loading Class: java/util/regex/Pattern$1.class +INFO: Loading Class: java/util/regex/Pattern$1MatcherIterator.class +INFO: Loading Class: java/util/regex/Pattern$2.class +INFO: Loading Class: java/util/regex/Pattern$3.class +INFO: Loading Class: java/util/regex/Pattern$4.class +INFO: Loading Class: java/util/regex/Pattern$5.class +INFO: Loading Class: java/util/regex/Pattern$6.class +INFO: Loading Class: java/util/regex/Pattern$7.class +INFO: Loading Class: java/util/regex/Pattern$All.class +INFO: Loading Class: java/util/regex/Pattern$BackRef.class +INFO: Loading Class: java/util/regex/Pattern$Begin.class +INFO: Loading Class: java/util/regex/Pattern$Behind.class +INFO: Loading Class: java/util/regex/Pattern$BehindS.class +INFO: Loading Class: java/util/regex/Pattern$BitClass.class +INFO: Loading Class: java/util/regex/Pattern$Block.class +INFO: Loading Class: java/util/regex/Pattern$BmpCharProperty.class +INFO: Loading Class: java/util/regex/Pattern$BnM.class +INFO: Loading Class: java/util/regex/Pattern$BnMS.class +INFO: Loading Class: java/util/regex/Pattern$Bound.class +INFO: Loading Class: java/util/regex/Pattern$Branch.class +INFO: Loading Class: java/util/regex/Pattern$BranchConn.class +INFO: Loading Class: java/util/regex/Pattern$CIBackRef.class +INFO: Loading Class: java/util/regex/Pattern$Caret.class +INFO: Loading Class: java/util/regex/Pattern$Category.class +INFO: Loading Class: java/util/regex/Pattern$CharProperty$1.class +INFO: Loading Class: java/util/regex/Pattern$CharProperty.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$1.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$10.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$11.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$12.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$13.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$14.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$15.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$16.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$17.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$18.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$19.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$2.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$20.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$21.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$22.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$23.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$3.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$4.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$5.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$6.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$7.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$8.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$9.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$CharPropertyFactory.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames$CloneableProperty.class +INFO: Loading Class: java/util/regex/Pattern$CharPropertyNames.class +INFO: Loading Class: java/util/regex/Pattern$Conditional.class +INFO: Loading Class: java/util/regex/Pattern$Ctype.class +INFO: Loading Class: java/util/regex/Pattern$Curly.class +INFO: Loading Class: java/util/regex/Pattern$Dollar.class +INFO: Loading Class: java/util/regex/Pattern$Dot.class +INFO: Loading Class: java/util/regex/Pattern$End.class +INFO: Loading Class: java/util/regex/Pattern$First.class +INFO: Loading Class: java/util/regex/Pattern$GroupCurly.class +INFO: Loading Class: java/util/regex/Pattern$GroupHead.class +INFO: Loading Class: java/util/regex/Pattern$GroupRef.class +INFO: Loading Class: java/util/regex/Pattern$GroupTail.class +INFO: Loading Class: java/util/regex/Pattern$HorizWS.class +INFO: Loading Class: java/util/regex/Pattern$LastMatch.class +INFO: Loading Class: java/util/regex/Pattern$LastNode.class +INFO: Loading Class: java/util/regex/Pattern$LazyLoop.class +INFO: Loading Class: java/util/regex/Pattern$LineEnding.class +INFO: Loading Class: java/util/regex/Pattern$Loop.class +INFO: Loading Class: java/util/regex/Pattern$Neg.class +INFO: Loading Class: java/util/regex/Pattern$Node.class +INFO: Loading Class: java/util/regex/Pattern$NotBehind.class +INFO: Loading Class: java/util/regex/Pattern$NotBehindS.class +INFO: Loading Class: java/util/regex/Pattern$Pos.class +INFO: Loading Class: java/util/regex/Pattern$Prolog.class +INFO: Loading Class: java/util/regex/Pattern$Ques.class +INFO: Loading Class: java/util/regex/Pattern$Script.class +INFO: Loading Class: java/util/regex/Pattern$Single.class +INFO: Loading Class: java/util/regex/Pattern$SingleI.class +INFO: Loading Class: java/util/regex/Pattern$SingleS.class +INFO: Loading Class: java/util/regex/Pattern$SingleU.class +INFO: Loading Class: java/util/regex/Pattern$Slice.class +INFO: Loading Class: java/util/regex/Pattern$SliceI.class +INFO: Loading Class: java/util/regex/Pattern$SliceIS.class +INFO: Loading Class: java/util/regex/Pattern$SliceNode.class +INFO: Loading Class: java/util/regex/Pattern$SliceS.class +INFO: Loading Class: java/util/regex/Pattern$SliceU.class +INFO: Loading Class: java/util/regex/Pattern$SliceUS.class +INFO: Loading Class: java/util/regex/Pattern$Start.class +INFO: Loading Class: java/util/regex/Pattern$StartS.class +INFO: Loading Class: java/util/regex/Pattern$TreeInfo.class +INFO: Loading Class: java/util/regex/Pattern$UnixCaret.class +INFO: Loading Class: java/util/regex/Pattern$UnixDollar.class +INFO: Loading Class: java/util/regex/Pattern$UnixDot.class +INFO: Loading Class: java/util/regex/Pattern$Utype.class +INFO: Loading Class: java/util/regex/Pattern$VertWS.class +INFO: Loading Class: java/util/regex/Pattern.class +INFO: Loading Class: java/util/regex/PatternSyntaxException.class +INFO: Loading Class: java/util/regex/UnicodeProp$1.class +INFO: Loading Class: java/util/regex/UnicodeProp$10.class +INFO: Loading Class: java/util/regex/UnicodeProp$11.class +INFO: Loading Class: java/util/regex/UnicodeProp$12.class +INFO: Loading Class: java/util/regex/UnicodeProp$13.class +INFO: Loading Class: java/util/regex/UnicodeProp$14.class +INFO: Loading Class: java/util/regex/UnicodeProp$15.class +INFO: Loading Class: java/util/regex/UnicodeProp$16.class +INFO: Loading Class: java/util/regex/UnicodeProp$17.class +INFO: Loading Class: java/util/regex/UnicodeProp$18.class +INFO: Loading Class: java/util/regex/UnicodeProp$19.class +INFO: Loading Class: java/util/regex/UnicodeProp$2.class +INFO: Loading Class: java/util/regex/UnicodeProp$3.class +INFO: Loading Class: java/util/regex/UnicodeProp$4.class +INFO: Loading Class: java/util/regex/UnicodeProp$5.class +INFO: Loading Class: java/util/regex/UnicodeProp$6.class +INFO: Loading Class: java/util/regex/UnicodeProp$7.class +INFO: Loading Class: java/util/regex/UnicodeProp$8.class +INFO: Loading Class: java/util/regex/UnicodeProp$9.class +INFO: Loading Class: java/util/regex/UnicodeProp.class +INFO: Loading Class: java/util/spi/CalendarNameProvider.class +INFO: Loading Class: java/util/stream/AbstractPipeline.class +INFO: Loading Class: java/util/stream/AbstractShortCircuitTask.class +INFO: Loading Class: java/util/stream/AbstractSpinedBuffer.class +INFO: Loading Class: java/util/stream/AbstractTask.class +INFO: Loading Class: java/util/stream/BaseStream.class +INFO: Loading Class: java/util/stream/Collector$Characteristics.class +INFO: Loading Class: java/util/stream/Collector.class +INFO: Loading Class: java/util/stream/Collectors$1OptionalBox.class +INFO: Loading Class: java/util/stream/Collectors$CollectorImpl.class +INFO: Loading Class: java/util/stream/Collectors$Partition$1.class +INFO: Loading Class: java/util/stream/Collectors$Partition.class +INFO: Loading Class: java/util/stream/Collectors.class +INFO: Loading Class: java/util/stream/DistinctOps$1$1.class +INFO: Loading Class: java/util/stream/DistinctOps$1$2.class +INFO: Loading Class: java/util/stream/DistinctOps$1.class +INFO: Loading Class: java/util/stream/DistinctOps.class +INFO: Loading Class: java/util/stream/DoublePipeline$1$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$2$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$2.class +INFO: Loading Class: java/util/stream/DoublePipeline$3$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$3.class +INFO: Loading Class: java/util/stream/DoublePipeline$4$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$4.class +INFO: Loading Class: java/util/stream/DoublePipeline$5$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$5.class +INFO: Loading Class: java/util/stream/DoublePipeline$6.class +INFO: Loading Class: java/util/stream/DoublePipeline$7$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$7.class +INFO: Loading Class: java/util/stream/DoublePipeline$8$1.class +INFO: Loading Class: java/util/stream/DoublePipeline$8.class +INFO: Loading Class: java/util/stream/DoublePipeline$Head.class +INFO: Loading Class: java/util/stream/DoublePipeline$StatefulOp.class +INFO: Loading Class: java/util/stream/DoublePipeline$StatelessOp.class +INFO: Loading Class: java/util/stream/DoublePipeline.class +INFO: Loading Class: java/util/stream/DoubleStream$1.class +INFO: Loading Class: java/util/stream/DoubleStream$Builder.class +INFO: Loading Class: java/util/stream/DoubleStream.class +INFO: Loading Class: java/util/stream/FindOps$FindOp.class +INFO: Loading Class: java/util/stream/FindOps$FindSink$OfDouble.class +INFO: Loading Class: java/util/stream/FindOps$FindSink$OfInt.class +INFO: Loading Class: java/util/stream/FindOps$FindSink$OfLong.class +INFO: Loading Class: java/util/stream/FindOps$FindSink$OfRef.class +INFO: Loading Class: java/util/stream/FindOps$FindSink.class +INFO: Loading Class: java/util/stream/FindOps$FindTask.class +INFO: Loading Class: java/util/stream/FindOps.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachOp$OfDouble.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachOp$OfInt.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachOp$OfLong.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachOp$OfRef.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachOp.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachOrderedTask.class +INFO: Loading Class: java/util/stream/ForEachOps$ForEachTask.class +INFO: Loading Class: java/util/stream/ForEachOps.class +INFO: Loading Class: java/util/stream/IntPipeline$1$1.class +INFO: Loading Class: java/util/stream/IntPipeline$1.class +INFO: Loading Class: java/util/stream/IntPipeline$10$1.class +INFO: Loading Class: java/util/stream/IntPipeline$10.class +INFO: Loading Class: java/util/stream/IntPipeline$2$1.class +INFO: Loading Class: java/util/stream/IntPipeline$2.class +INFO: Loading Class: java/util/stream/IntPipeline$3$1.class +INFO: Loading Class: java/util/stream/IntPipeline$3.class +INFO: Loading Class: java/util/stream/IntPipeline$4$1.class +INFO: Loading Class: java/util/stream/IntPipeline$4.class +INFO: Loading Class: java/util/stream/IntPipeline$5$1.class +INFO: Loading Class: java/util/stream/IntPipeline$5.class +INFO: Loading Class: java/util/stream/IntPipeline$6$1.class +INFO: Loading Class: java/util/stream/IntPipeline$6.class +INFO: Loading Class: java/util/stream/IntPipeline$7$1.class +INFO: Loading Class: java/util/stream/IntPipeline$7.class +INFO: Loading Class: java/util/stream/IntPipeline$8.class +INFO: Loading Class: java/util/stream/IntPipeline$9$1.class +INFO: Loading Class: java/util/stream/IntPipeline$9.class +INFO: Loading Class: java/util/stream/IntPipeline$Head.class +INFO: Loading Class: java/util/stream/IntPipeline$StatefulOp.class +INFO: Loading Class: java/util/stream/IntPipeline$StatelessOp.class +INFO: Loading Class: java/util/stream/IntPipeline.class +INFO: Loading Class: java/util/stream/IntStream$1.class +INFO: Loading Class: java/util/stream/IntStream$Builder.class +INFO: Loading Class: java/util/stream/IntStream.class +INFO: Loading Class: java/util/stream/LongPipeline$1$1.class +INFO: Loading Class: java/util/stream/LongPipeline$1.class +INFO: Loading Class: java/util/stream/LongPipeline$2$1.class +INFO: Loading Class: java/util/stream/LongPipeline$2.class +INFO: Loading Class: java/util/stream/LongPipeline$3$1.class +INFO: Loading Class: java/util/stream/LongPipeline$3.class +INFO: Loading Class: java/util/stream/LongPipeline$4$1.class +INFO: Loading Class: java/util/stream/LongPipeline$4.class +INFO: Loading Class: java/util/stream/LongPipeline$5$1.class +INFO: Loading Class: java/util/stream/LongPipeline$5.class +INFO: Loading Class: java/util/stream/LongPipeline$6$1.class +INFO: Loading Class: java/util/stream/LongPipeline$6.class +INFO: Loading Class: java/util/stream/LongPipeline$7.class +INFO: Loading Class: java/util/stream/LongPipeline$8$1.class +INFO: Loading Class: java/util/stream/LongPipeline$8.class +INFO: Loading Class: java/util/stream/LongPipeline$9$1.class +INFO: Loading Class: java/util/stream/LongPipeline$9.class +INFO: Loading Class: java/util/stream/LongPipeline$Head.class +INFO: Loading Class: java/util/stream/LongPipeline$StatefulOp.class +INFO: Loading Class: java/util/stream/LongPipeline$StatelessOp.class +INFO: Loading Class: java/util/stream/LongPipeline.class +INFO: Loading Class: java/util/stream/LongStream$1.class +INFO: Loading Class: java/util/stream/LongStream$Builder.class +INFO: Loading Class: java/util/stream/LongStream.class +INFO: Loading Class: java/util/stream/MatchOps$1MatchSink.class +INFO: Loading Class: java/util/stream/MatchOps$2MatchSink.class +INFO: Loading Class: java/util/stream/MatchOps$3MatchSink.class +INFO: Loading Class: java/util/stream/MatchOps$4MatchSink.class +INFO: Loading Class: java/util/stream/MatchOps$BooleanTerminalSink.class +INFO: Loading Class: java/util/stream/MatchOps$MatchKind.class +INFO: Loading Class: java/util/stream/MatchOps$MatchOp.class +INFO: Loading Class: java/util/stream/MatchOps$MatchTask.class +INFO: Loading Class: java/util/stream/MatchOps.class +INFO: Loading Class: java/util/stream/Node$Builder$OfDouble.class +INFO: Loading Class: java/util/stream/Node$Builder$OfInt.class +INFO: Loading Class: java/util/stream/Node$Builder$OfLong.class +INFO: Loading Class: java/util/stream/Node$Builder.class +INFO: Loading Class: java/util/stream/Node$OfDouble.class +INFO: Loading Class: java/util/stream/Node$OfInt.class +INFO: Loading Class: java/util/stream/Node$OfLong.class +INFO: Loading Class: java/util/stream/Node$OfPrimitive.class +INFO: Loading Class: java/util/stream/Node.class +INFO: Loading Class: java/util/stream/Nodes$1.class +INFO: Loading Class: java/util/stream/Nodes$AbstractConcNode.class +INFO: Loading Class: java/util/stream/Nodes$ArrayNode.class +INFO: Loading Class: java/util/stream/Nodes$CollectionNode.class +INFO: Loading Class: java/util/stream/Nodes$CollectorTask$OfDouble.class +INFO: Loading Class: java/util/stream/Nodes$CollectorTask$OfInt.class +INFO: Loading Class: java/util/stream/Nodes$CollectorTask$OfLong.class +INFO: Loading Class: java/util/stream/Nodes$CollectorTask$OfRef.class +INFO: Loading Class: java/util/stream/Nodes$CollectorTask.class +INFO: Loading Class: java/util/stream/Nodes$ConcNode$OfDouble.class +INFO: Loading Class: java/util/stream/Nodes$ConcNode$OfInt.class +INFO: Loading Class: java/util/stream/Nodes$ConcNode$OfLong.class +INFO: Loading Class: java/util/stream/Nodes$ConcNode$OfPrimitive.class +INFO: Loading Class: java/util/stream/Nodes$ConcNode.class +INFO: Loading Class: java/util/stream/Nodes$DoubleArrayNode.class +INFO: Loading Class: java/util/stream/Nodes$DoubleFixedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$DoubleSpinedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$EmptyNode$OfDouble.class +INFO: Loading Class: java/util/stream/Nodes$EmptyNode$OfInt.class +INFO: Loading Class: java/util/stream/Nodes$EmptyNode$OfLong.class +INFO: Loading Class: java/util/stream/Nodes$EmptyNode$OfRef.class +INFO: Loading Class: java/util/stream/Nodes$EmptyNode.class +INFO: Loading Class: java/util/stream/Nodes$FixedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$IntArrayNode.class +INFO: Loading Class: java/util/stream/Nodes$IntFixedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$IntSpinedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$InternalNodeSpliterator$OfDouble.class +INFO: Loading Class: java/util/stream/Nodes$InternalNodeSpliterator$OfInt.class +INFO: Loading Class: java/util/stream/Nodes$InternalNodeSpliterator$OfLong.class +INFO: Loading Class: java/util/stream/Nodes$InternalNodeSpliterator$OfPrimitive.class +INFO: Loading Class: java/util/stream/Nodes$InternalNodeSpliterator$OfRef.class +INFO: Loading Class: java/util/stream/Nodes$InternalNodeSpliterator.class +INFO: Loading Class: java/util/stream/Nodes$LongArrayNode.class +INFO: Loading Class: java/util/stream/Nodes$LongFixedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$LongSpinedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$SizedCollectorTask$OfDouble.class +INFO: Loading Class: java/util/stream/Nodes$SizedCollectorTask$OfInt.class +INFO: Loading Class: java/util/stream/Nodes$SizedCollectorTask$OfLong.class +INFO: Loading Class: java/util/stream/Nodes$SizedCollectorTask$OfRef.class +INFO: Loading Class: java/util/stream/Nodes$SizedCollectorTask.class +INFO: Loading Class: java/util/stream/Nodes$SpinedNodeBuilder.class +INFO: Loading Class: java/util/stream/Nodes$ToArrayTask$OfDouble.class +INFO: Loading Class: java/util/stream/Nodes$ToArrayTask$OfInt.class +INFO: Loading Class: java/util/stream/Nodes$ToArrayTask$OfLong.class +INFO: Loading Class: java/util/stream/Nodes$ToArrayTask$OfPrimitive.class +INFO: Loading Class: java/util/stream/Nodes$ToArrayTask$OfRef.class +INFO: Loading Class: java/util/stream/Nodes$ToArrayTask.class +INFO: Loading Class: java/util/stream/Nodes.class +INFO: Loading Class: java/util/stream/PipelineHelper.class +INFO: Loading Class: java/util/stream/ReduceOps$1.class +INFO: Loading Class: java/util/stream/ReduceOps$10.class +INFO: Loading Class: java/util/stream/ReduceOps$10ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$11.class +INFO: Loading Class: java/util/stream/ReduceOps$11ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$12.class +INFO: Loading Class: java/util/stream/ReduceOps$12ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$13.class +INFO: Loading Class: java/util/stream/ReduceOps$13ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$1ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$2.class +INFO: Loading Class: java/util/stream/ReduceOps$2ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$3.class +INFO: Loading Class: java/util/stream/ReduceOps$3ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$4.class +INFO: Loading Class: java/util/stream/ReduceOps$4ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$5.class +INFO: Loading Class: java/util/stream/ReduceOps$5ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$6.class +INFO: Loading Class: java/util/stream/ReduceOps$6ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$7.class +INFO: Loading Class: java/util/stream/ReduceOps$7ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$8.class +INFO: Loading Class: java/util/stream/ReduceOps$8ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$9.class +INFO: Loading Class: java/util/stream/ReduceOps$9ReducingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$AccumulatingSink.class +INFO: Loading Class: java/util/stream/ReduceOps$Box.class +INFO: Loading Class: java/util/stream/ReduceOps$ReduceOp.class +INFO: Loading Class: java/util/stream/ReduceOps$ReduceTask.class +INFO: Loading Class: java/util/stream/ReduceOps.class +INFO: Loading Class: java/util/stream/ReferencePipeline$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$10$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$10.class +INFO: Loading Class: java/util/stream/ReferencePipeline$11$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$11.class +INFO: Loading Class: java/util/stream/ReferencePipeline$2$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$2.class +INFO: Loading Class: java/util/stream/ReferencePipeline$3$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$3.class +INFO: Loading Class: java/util/stream/ReferencePipeline$4$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$4.class +INFO: Loading Class: java/util/stream/ReferencePipeline$5$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$5.class +INFO: Loading Class: java/util/stream/ReferencePipeline$6$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$6.class +INFO: Loading Class: java/util/stream/ReferencePipeline$7$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$7.class +INFO: Loading Class: java/util/stream/ReferencePipeline$8$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$8.class +INFO: Loading Class: java/util/stream/ReferencePipeline$9$1.class +INFO: Loading Class: java/util/stream/ReferencePipeline$9.class +INFO: Loading Class: java/util/stream/ReferencePipeline$Head.class +INFO: Loading Class: java/util/stream/ReferencePipeline$StatefulOp.class +INFO: Loading Class: java/util/stream/ReferencePipeline$StatelessOp.class +INFO: Loading Class: java/util/stream/ReferencePipeline.class +INFO: Loading Class: java/util/stream/Sink$ChainedDouble.class +INFO: Loading Class: java/util/stream/Sink$ChainedInt.class +INFO: Loading Class: java/util/stream/Sink$ChainedLong.class +INFO: Loading Class: java/util/stream/Sink$ChainedReference.class +INFO: Loading Class: java/util/stream/Sink$OfDouble.class +INFO: Loading Class: java/util/stream/Sink$OfInt.class +INFO: Loading Class: java/util/stream/Sink$OfLong.class +INFO: Loading Class: java/util/stream/Sink.class +INFO: Loading Class: java/util/stream/SliceOps$1$1.class +INFO: Loading Class: java/util/stream/SliceOps$1.class +INFO: Loading Class: java/util/stream/SliceOps$2$1.class +INFO: Loading Class: java/util/stream/SliceOps$2.class +INFO: Loading Class: java/util/stream/SliceOps$3$1.class +INFO: Loading Class: java/util/stream/SliceOps$3.class +INFO: Loading Class: java/util/stream/SliceOps$4$1.class +INFO: Loading Class: java/util/stream/SliceOps$4.class +INFO: Loading Class: java/util/stream/SliceOps$5.class +INFO: Loading Class: java/util/stream/SliceOps$SliceTask.class +INFO: Loading Class: java/util/stream/SliceOps.class +INFO: Loading Class: java/util/stream/SortedOps$AbstractDoubleSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$AbstractIntSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$AbstractLongSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$AbstractRefSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$DoubleSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$IntSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$LongSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$OfDouble.class +INFO: Loading Class: java/util/stream/SortedOps$OfInt.class +INFO: Loading Class: java/util/stream/SortedOps$OfLong.class +INFO: Loading Class: java/util/stream/SortedOps$OfRef.class +INFO: Loading Class: java/util/stream/SortedOps$RefSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$SizedDoubleSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$SizedIntSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$SizedLongSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps$SizedRefSortingSink.class +INFO: Loading Class: java/util/stream/SortedOps.class +INFO: Loading Class: java/util/stream/SpinedBuffer$1Splitr.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfDouble$1Splitr.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfDouble.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfInt$1Splitr.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfInt.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfLong$1Splitr.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfLong.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfPrimitive$BaseSpliterator.class +INFO: Loading Class: java/util/stream/SpinedBuffer$OfPrimitive.class +INFO: Loading Class: java/util/stream/SpinedBuffer.class +INFO: Loading Class: java/util/stream/Stream$1.class +INFO: Loading Class: java/util/stream/Stream$Builder.class +INFO: Loading Class: java/util/stream/Stream.class +INFO: Loading Class: java/util/stream/StreamOpFlag$MaskBuilder.class +INFO: Loading Class: java/util/stream/StreamOpFlag$Type.class +INFO: Loading Class: java/util/stream/StreamOpFlag.class +INFO: Loading Class: java/util/stream/StreamShape.class +INFO: Loading Class: java/util/stream/StreamSpliterators$1.class +INFO: Loading Class: java/util/stream/StreamSpliterators$AbstractWrappingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$ArrayBuffer$OfDouble.class +INFO: Loading Class: java/util/stream/StreamSpliterators$ArrayBuffer$OfInt.class +INFO: Loading Class: java/util/stream/StreamSpliterators$ArrayBuffer$OfLong.class +INFO: Loading Class: java/util/stream/StreamSpliterators$ArrayBuffer$OfPrimitive.class +INFO: Loading Class: java/util/stream/StreamSpliterators$ArrayBuffer$OfRef.class +INFO: Loading Class: java/util/stream/StreamSpliterators$ArrayBuffer.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DelegatingSpliterator$OfDouble.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DelegatingSpliterator$OfInt.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DelegatingSpliterator$OfLong.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DelegatingSpliterator$OfPrimitive.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DelegatingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DistinctSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$DoubleWrappingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator$OfDouble.class +INFO: Loading Class: java/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator$OfInt.class +INFO: Loading Class: java/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator$OfLong.class +INFO: Loading Class: java/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator$OfRef.class +INFO: Loading Class: java/util/stream/StreamSpliterators$InfiniteSupplyingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$IntWrappingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$LongWrappingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$SliceSpliterator$OfDouble.class +INFO: Loading Class: java/util/stream/StreamSpliterators$SliceSpliterator$OfInt.class +INFO: Loading Class: java/util/stream/StreamSpliterators$SliceSpliterator$OfLong.class +INFO: Loading Class: java/util/stream/StreamSpliterators$SliceSpliterator$OfPrimitive.class +INFO: Loading Class: java/util/stream/StreamSpliterators$SliceSpliterator$OfRef.class +INFO: Loading Class: java/util/stream/StreamSpliterators$SliceSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator$OfDouble.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator$OfInt.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator$OfLong.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator$OfPrimitive.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator$OfRef.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator$PermitStatus.class +INFO: Loading Class: java/util/stream/StreamSpliterators$UnorderedSliceSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators$WrappingSpliterator.class +INFO: Loading Class: java/util/stream/StreamSpliterators.class +INFO: Loading Class: java/util/stream/StreamSupport.class +INFO: Loading Class: java/util/stream/Streams$1.class +INFO: Loading Class: java/util/stream/Streams$2.class +INFO: Loading Class: java/util/stream/Streams$AbstractStreamBuilderImpl.class +INFO: Loading Class: java/util/stream/Streams$ConcatSpliterator$OfDouble.class +INFO: Loading Class: java/util/stream/Streams$ConcatSpliterator$OfInt.class +INFO: Loading Class: java/util/stream/Streams$ConcatSpliterator$OfLong.class +INFO: Loading Class: java/util/stream/Streams$ConcatSpliterator$OfPrimitive.class +INFO: Loading Class: java/util/stream/Streams$ConcatSpliterator$OfRef.class +INFO: Loading Class: java/util/stream/Streams$ConcatSpliterator.class +INFO: Loading Class: java/util/stream/Streams$DoubleStreamBuilderImpl.class +INFO: Loading Class: java/util/stream/Streams$IntStreamBuilderImpl.class +INFO: Loading Class: java/util/stream/Streams$LongStreamBuilderImpl.class +INFO: Loading Class: java/util/stream/Streams$RangeIntSpliterator.class +INFO: Loading Class: java/util/stream/Streams$RangeLongSpliterator.class +INFO: Loading Class: java/util/stream/Streams$StreamBuilderImpl.class +INFO: Loading Class: java/util/stream/Streams.class +INFO: Loading Class: java/util/stream/TerminalOp.class +INFO: Loading Class: java/util/stream/TerminalSink.class +INFO: Loading Class: java/util/stream/Tripwire.class +INFO: Loading Class: java/util/zip/Adler32.class +INFO: Loading Class: java/util/zip/CheckedInputStream.class +INFO: Loading Class: java/util/zip/CheckedOutputStream.class +INFO: Loading Class: java/util/zip/DataFormatException.class +INFO: Loading Class: java/util/zip/Deflater.class +INFO: Loading Class: java/util/zip/DeflaterInputStream.class +INFO: Loading Class: java/util/zip/DeflaterOutputStream.class +INFO: Loading Class: java/util/zip/GZIPInputStream$1.class +INFO: Loading Class: java/util/zip/GZIPInputStream.class +INFO: Loading Class: java/util/zip/GZIPOutputStream.class +INFO: Loading Class: java/util/zip/InflaterOutputStream.class +INFO: Loading Class: java/util/zip/ZipConstants64.class +INFO: Loading Class: java/util/zip/ZipError.class +INFO: Loading Class: java/util/zip/ZipInputStream.class +INFO: Loading Class: java/util/zip/ZipOutputStream$XEntry.class +INFO: Loading Class: java/util/zip/ZipOutputStream.class +INFO: Loading Class: javax/accessibility/AccessibleAction.class +INFO: Loading Class: javax/accessibility/AccessibleAttributeSequence.class +INFO: Loading Class: javax/accessibility/AccessibleBundle.class +INFO: Loading Class: javax/accessibility/AccessibleComponent.class +INFO: Loading Class: javax/accessibility/AccessibleContext$1.class +INFO: Loading Class: javax/accessibility/AccessibleEditableText.class +INFO: Loading Class: javax/accessibility/AccessibleExtendedComponent.class +INFO: Loading Class: javax/accessibility/AccessibleExtendedTable.class +INFO: Loading Class: javax/accessibility/AccessibleExtendedText.class +INFO: Loading Class: javax/accessibility/AccessibleHyperlink.class +INFO: Loading Class: javax/accessibility/AccessibleHypertext.class +INFO: Loading Class: javax/accessibility/AccessibleIcon.class +INFO: Loading Class: javax/accessibility/AccessibleKeyBinding.class +INFO: Loading Class: javax/accessibility/AccessibleRelation.class +INFO: Loading Class: javax/accessibility/AccessibleRelationSet.class +INFO: Loading Class: javax/accessibility/AccessibleResourceBundle.class +INFO: Loading Class: javax/accessibility/AccessibleRole.class +INFO: Loading Class: javax/accessibility/AccessibleSelection.class +INFO: Loading Class: javax/accessibility/AccessibleState.class +INFO: Loading Class: javax/accessibility/AccessibleStateSet.class +INFO: Loading Class: javax/accessibility/AccessibleStreamable.class +INFO: Loading Class: javax/accessibility/AccessibleTable.class +INFO: Loading Class: javax/accessibility/AccessibleTableModelChange.class +INFO: Loading Class: javax/accessibility/AccessibleText.class +INFO: Loading Class: javax/accessibility/AccessibleTextSequence.class +INFO: Loading Class: javax/accessibility/AccessibleValue.class +INFO: Loading Class: javax/activation/ActivationDataFlavor.class +INFO: Loading Class: javax/activation/CommandInfo.class +INFO: Loading Class: javax/activation/CommandMap.class +INFO: Loading Class: javax/activation/CommandObject.class +INFO: Loading Class: javax/activation/DataContentHandler.class +INFO: Loading Class: javax/activation/DataContentHandlerFactory.class +INFO: Loading Class: javax/activation/DataHandler$1.class +INFO: Loading Class: javax/activation/DataHandler.class +INFO: Loading Class: javax/activation/DataHandlerDataSource.class +INFO: Loading Class: javax/activation/DataSource.class +INFO: Loading Class: javax/activation/DataSourceDataContentHandler.class +INFO: Loading Class: javax/activation/FileDataSource.class +INFO: Loading Class: javax/activation/FileTypeMap.class +INFO: Loading Class: javax/activation/MailcapCommandMap.class +INFO: Loading Class: javax/activation/MimeType.class +INFO: Loading Class: javax/activation/MimeTypeParameterList.class +INFO: Loading Class: javax/activation/MimeTypeParseException.class +INFO: Loading Class: javax/activation/MimetypesFileTypeMap.class +INFO: Loading Class: javax/activation/ObjectDataContentHandler.class +INFO: Loading Class: javax/activation/SecuritySupport$1.class +INFO: Loading Class: javax/activation/SecuritySupport$2.class +INFO: Loading Class: javax/activation/SecuritySupport$3.class +INFO: Loading Class: javax/activation/SecuritySupport$4.class +INFO: Loading Class: javax/activation/SecuritySupport$5.class +INFO: Loading Class: javax/activation/SecuritySupport.class +INFO: Loading Class: javax/activation/URLDataSource.class +INFO: Loading Class: javax/activation/UnsupportedDataTypeException.class +INFO: Loading Class: javax/activity/ActivityCompletedException.class +INFO: Loading Class: javax/activity/ActivityRequiredException.class +INFO: Loading Class: javax/activity/InvalidActivityException.class +INFO: Loading Class: javax/annotation/Generated.class +INFO: Loading Class: javax/annotation/PostConstruct.class +INFO: Loading Class: javax/annotation/PreDestroy.class +INFO: Loading Class: javax/annotation/Resource$AuthenticationType.class +INFO: Loading Class: javax/annotation/Resource.class +INFO: Loading Class: javax/annotation/Resources.class +INFO: Loading Class: javax/annotation/processing/AbstractProcessor.class +INFO: Loading Class: javax/annotation/processing/Completion.class +INFO: Loading Class: javax/annotation/processing/Completions$SimpleCompletion.class +INFO: Loading Class: javax/annotation/processing/Completions.class +INFO: Loading Class: javax/annotation/processing/Filer.class +INFO: Loading Class: javax/annotation/processing/FilerException.class +INFO: Loading Class: javax/annotation/processing/Messager.class +INFO: Loading Class: javax/annotation/processing/ProcessingEnvironment.class +INFO: Loading Class: javax/annotation/processing/Processor.class +INFO: Loading Class: javax/annotation/processing/RoundEnvironment.class +INFO: Loading Class: javax/annotation/processing/SupportedAnnotationTypes.class +INFO: Loading Class: javax/annotation/processing/SupportedOptions.class +INFO: Loading Class: javax/annotation/processing/SupportedSourceVersion.class +INFO: Loading Class: javax/imageio/IIOException.class +INFO: Loading Class: javax/imageio/IIOImage.class +INFO: Loading Class: javax/imageio/IIOParam.class +INFO: Loading Class: javax/imageio/IIOParamController.class +INFO: Loading Class: javax/imageio/ImageIO$1.class +INFO: Loading Class: javax/imageio/ImageIO$CacheInfo.class +INFO: Loading Class: javax/imageio/ImageIO$CanDecodeInputFilter.class +INFO: Loading Class: javax/imageio/ImageIO$CanEncodeImageAndFormatFilter.class +INFO: Loading Class: javax/imageio/ImageIO$ContainsFilter.class +INFO: Loading Class: javax/imageio/ImageIO$ImageReaderIterator.class +INFO: Loading Class: javax/imageio/ImageIO$ImageTranscoderIterator.class +INFO: Loading Class: javax/imageio/ImageIO$ImageWriterIterator.class +INFO: Loading Class: javax/imageio/ImageIO$SpiInfo$1.class +INFO: Loading Class: javax/imageio/ImageIO$SpiInfo$2.class +INFO: Loading Class: javax/imageio/ImageIO$SpiInfo$3.class +INFO: Loading Class: javax/imageio/ImageIO$SpiInfo.class +INFO: Loading Class: javax/imageio/ImageIO$TranscoderFilter.class +INFO: Loading Class: javax/imageio/ImageIO.class +INFO: Loading Class: javax/imageio/ImageReadParam.class +INFO: Loading Class: javax/imageio/ImageReader$1.class +INFO: Loading Class: javax/imageio/ImageReader.class +INFO: Loading Class: javax/imageio/ImageTranscoder.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier$1.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier$Banded.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier$Grayscale.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier$Indexed.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier$Interleaved.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier$Packed.class +INFO: Loading Class: javax/imageio/ImageTypeSpecifier.class +INFO: Loading Class: javax/imageio/ImageWriteParam.class +INFO: Loading Class: javax/imageio/ImageWriter$1.class +INFO: Loading Class: javax/imageio/ImageWriter.class +INFO: Loading Class: javax/imageio/event/IIOReadProgressListener.class +INFO: Loading Class: javax/imageio/event/IIOReadUpdateListener.class +INFO: Loading Class: javax/imageio/event/IIOReadWarningListener.class +INFO: Loading Class: javax/imageio/event/IIOWriteProgressListener.class +INFO: Loading Class: javax/imageio/event/IIOWriteWarningListener.class +INFO: Loading Class: javax/imageio/metadata/IIOAttr.class +INFO: Loading Class: javax/imageio/metadata/IIODOMException.class +INFO: Loading Class: javax/imageio/metadata/IIOInvalidTreeException.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadata$1.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadata$2.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadata.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataController.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataFormat.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataFormatImpl$1.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataFormatImpl$Attribute.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataFormatImpl$Element.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataFormatImpl$ObjectValue.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataFormatImpl.class +INFO: Loading Class: javax/imageio/metadata/IIOMetadataNode.class +INFO: Loading Class: javax/imageio/metadata/IIONamedNodeMap.class +INFO: Loading Class: javax/imageio/metadata/IIONodeList.class +INFO: Loading Class: javax/imageio/plugins/bmp/BMPImageWriteParam.class +INFO: Loading Class: javax/imageio/plugins/jpeg/JPEGHuffmanTable.class +INFO: Loading Class: javax/imageio/plugins/jpeg/JPEGImageReadParam.class +INFO: Loading Class: javax/imageio/plugins/jpeg/JPEGImageWriteParam.class +INFO: Loading Class: javax/imageio/plugins/jpeg/JPEGQTable.class +INFO: Loading Class: javax/imageio/spi/DigraphNode.class +INFO: Loading Class: javax/imageio/spi/FilterIterator.class +INFO: Loading Class: javax/imageio/spi/IIORegistry$1.class +INFO: Loading Class: javax/imageio/spi/IIORegistry.class +INFO: Loading Class: javax/imageio/spi/IIOServiceProvider.class +INFO: Loading Class: javax/imageio/spi/ImageInputStreamSpi.class +INFO: Loading Class: javax/imageio/spi/ImageOutputStreamSpi.class +INFO: Loading Class: javax/imageio/spi/ImageReaderSpi.class +INFO: Loading Class: javax/imageio/spi/ImageReaderWriterSpi.class +INFO: Loading Class: javax/imageio/spi/ImageTranscoderSpi.class +INFO: Loading Class: javax/imageio/spi/ImageWriterSpi.class +INFO: Loading Class: javax/imageio/spi/PartialOrderIterator.class +INFO: Loading Class: javax/imageio/spi/PartiallyOrderedSet.class +INFO: Loading Class: javax/imageio/spi/RegisterableService.class +INFO: Loading Class: javax/imageio/spi/ServiceRegistry$Filter.class +INFO: Loading Class: javax/imageio/spi/ServiceRegistry.class +INFO: Loading Class: javax/imageio/spi/SubRegistry.class +INFO: Loading Class: javax/imageio/stream/FileCacheImageInputStream$StreamDisposerRecord.class +INFO: Loading Class: javax/imageio/stream/FileCacheImageInputStream.class +INFO: Loading Class: javax/imageio/stream/FileCacheImageOutputStream.class +INFO: Loading Class: javax/imageio/stream/FileImageInputStream.class +INFO: Loading Class: javax/imageio/stream/FileImageOutputStream.class +INFO: Loading Class: javax/imageio/stream/IIOByteBuffer.class +INFO: Loading Class: javax/imageio/stream/ImageInputStream.class +INFO: Loading Class: javax/imageio/stream/ImageInputStreamImpl.class +INFO: Loading Class: javax/imageio/stream/ImageOutputStream.class +INFO: Loading Class: javax/imageio/stream/ImageOutputStreamImpl.class +INFO: Loading Class: javax/imageio/stream/MemoryCache.class +INFO: Loading Class: javax/imageio/stream/MemoryCacheImageInputStream$StreamDisposerRecord.class +INFO: Loading Class: javax/imageio/stream/MemoryCacheImageInputStream.class +INFO: Loading Class: javax/imageio/stream/MemoryCacheImageOutputStream.class +INFO: Loading Class: javax/jws/HandlerChain.class +INFO: Loading Class: javax/jws/Oneway.class +INFO: Loading Class: javax/jws/WebMethod.class +INFO: Loading Class: javax/jws/WebParam$Mode.class +INFO: Loading Class: javax/jws/WebParam.class +INFO: Loading Class: javax/jws/WebResult.class +INFO: Loading Class: javax/jws/WebService.class +INFO: Loading Class: javax/jws/soap/InitParam.class +INFO: Loading Class: javax/jws/soap/SOAPBinding$ParameterStyle.class +INFO: Loading Class: javax/jws/soap/SOAPBinding$Style.class +INFO: Loading Class: javax/jws/soap/SOAPBinding$Use.class +INFO: Loading Class: javax/jws/soap/SOAPBinding.class +INFO: Loading Class: javax/jws/soap/SOAPMessageHandler.class +INFO: Loading Class: javax/jws/soap/SOAPMessageHandlers.class +INFO: Loading Class: javax/lang/model/AnnotatedConstruct.class +INFO: Loading Class: javax/lang/model/SourceVersion.class +INFO: Loading Class: javax/lang/model/UnknownEntityException.class +INFO: Loading Class: javax/lang/model/element/AnnotationMirror.class +INFO: Loading Class: javax/lang/model/element/AnnotationValue.class +INFO: Loading Class: javax/lang/model/element/AnnotationValueVisitor.class +INFO: Loading Class: javax/lang/model/element/Element.class +INFO: Loading Class: javax/lang/model/element/ElementKind.class +INFO: Loading Class: javax/lang/model/element/ElementVisitor.class +INFO: Loading Class: javax/lang/model/element/ExecutableElement.class +INFO: Loading Class: javax/lang/model/element/Modifier.class +INFO: Loading Class: javax/lang/model/element/Name.class +INFO: Loading Class: javax/lang/model/element/NestingKind.class +INFO: Loading Class: javax/lang/model/element/PackageElement.class +INFO: Loading Class: javax/lang/model/element/Parameterizable.class +INFO: Loading Class: javax/lang/model/element/QualifiedNameable.class +INFO: Loading Class: javax/lang/model/element/TypeElement.class +INFO: Loading Class: javax/lang/model/element/TypeParameterElement.class +INFO: Loading Class: javax/lang/model/element/UnknownAnnotationValueException.class +INFO: Loading Class: javax/lang/model/element/UnknownElementException.class +INFO: Loading Class: javax/lang/model/element/VariableElement.class +INFO: Loading Class: javax/lang/model/type/ArrayType.class +INFO: Loading Class: javax/lang/model/type/DeclaredType.class +INFO: Loading Class: javax/lang/model/type/ErrorType.class +INFO: Loading Class: javax/lang/model/type/ExecutableType.class +INFO: Loading Class: javax/lang/model/type/IntersectionType.class +INFO: Loading Class: javax/lang/model/type/MirroredTypeException.class +INFO: Loading Class: javax/lang/model/type/MirroredTypesException.class +INFO: Loading Class: javax/lang/model/type/NoType.class +INFO: Loading Class: javax/lang/model/type/NullType.class +INFO: Loading Class: javax/lang/model/type/PrimitiveType.class +INFO: Loading Class: javax/lang/model/type/ReferenceType.class +INFO: Loading Class: javax/lang/model/type/TypeKind$1.class +INFO: Loading Class: javax/lang/model/type/TypeKind.class +INFO: Loading Class: javax/lang/model/type/TypeMirror.class +INFO: Loading Class: javax/lang/model/type/TypeVariable.class +INFO: Loading Class: javax/lang/model/type/TypeVisitor.class +INFO: Loading Class: javax/lang/model/type/UnionType.class +INFO: Loading Class: javax/lang/model/type/UnknownTypeException.class +INFO: Loading Class: javax/lang/model/type/WildcardType.class +INFO: Loading Class: javax/lang/model/util/AbstractAnnotationValueVisitor6.class +INFO: Loading Class: javax/lang/model/util/AbstractAnnotationValueVisitor7.class +INFO: Loading Class: javax/lang/model/util/AbstractAnnotationValueVisitor8.class +INFO: Loading Class: javax/lang/model/util/AbstractElementVisitor6.class +INFO: Loading Class: javax/lang/model/util/AbstractElementVisitor7.class +INFO: Loading Class: javax/lang/model/util/AbstractElementVisitor8.class +INFO: Loading Class: javax/lang/model/util/AbstractTypeVisitor6.class +INFO: Loading Class: javax/lang/model/util/AbstractTypeVisitor7.class +INFO: Loading Class: javax/lang/model/util/AbstractTypeVisitor8.class +INFO: Loading Class: javax/lang/model/util/ElementFilter.class +INFO: Loading Class: javax/lang/model/util/ElementKindVisitor6$1.class +INFO: Loading Class: javax/lang/model/util/ElementKindVisitor6.class +INFO: Loading Class: javax/lang/model/util/ElementKindVisitor7.class +INFO: Loading Class: javax/lang/model/util/ElementKindVisitor8.class +INFO: Loading Class: javax/lang/model/util/ElementScanner6.class +INFO: Loading Class: javax/lang/model/util/ElementScanner7.class +INFO: Loading Class: javax/lang/model/util/ElementScanner8.class +INFO: Loading Class: javax/lang/model/util/Elements.class +INFO: Loading Class: javax/lang/model/util/SimpleAnnotationValueVisitor6.class +INFO: Loading Class: javax/lang/model/util/SimpleAnnotationValueVisitor7.class +INFO: Loading Class: javax/lang/model/util/SimpleAnnotationValueVisitor8.class +INFO: Loading Class: javax/lang/model/util/SimpleElementVisitor6.class +INFO: Loading Class: javax/lang/model/util/SimpleElementVisitor7.class +INFO: Loading Class: javax/lang/model/util/SimpleElementVisitor8.class +INFO: Loading Class: javax/lang/model/util/SimpleTypeVisitor6.class +INFO: Loading Class: javax/lang/model/util/SimpleTypeVisitor7.class +INFO: Loading Class: javax/lang/model/util/SimpleTypeVisitor8.class +INFO: Loading Class: javax/lang/model/util/TypeKindVisitor6$1.class +INFO: Loading Class: javax/lang/model/util/TypeKindVisitor6.class +INFO: Loading Class: javax/lang/model/util/TypeKindVisitor7.class +INFO: Loading Class: javax/lang/model/util/TypeKindVisitor8.class +INFO: Loading Class: javax/lang/model/util/Types.class +INFO: Loading Class: javax/management/AndQueryExp.class +INFO: Loading Class: javax/management/Attribute.class +INFO: Loading Class: javax/management/AttributeChangeNotification.class +INFO: Loading Class: javax/management/AttributeChangeNotificationFilter.class +INFO: Loading Class: javax/management/AttributeList.class +INFO: Loading Class: javax/management/AttributeNotFoundException.class +INFO: Loading Class: javax/management/AttributeValueExp.class +INFO: Loading Class: javax/management/BadAttributeValueExpException.class +INFO: Loading Class: javax/management/BadBinaryOpValueExpException.class +INFO: Loading Class: javax/management/BadStringOperationException.class +INFO: Loading Class: javax/management/BetweenQueryExp.class +INFO: Loading Class: javax/management/BinaryOpValueExp.class +INFO: Loading Class: javax/management/BinaryRelQueryExp.class +INFO: Loading Class: javax/management/BooleanValueExp.class +INFO: Loading Class: javax/management/ClassAttributeValueExp.class +INFO: Loading Class: javax/management/DefaultLoaderRepository.class +INFO: Loading Class: javax/management/Descriptor.class +INFO: Loading Class: javax/management/DescriptorAccess.class +INFO: Loading Class: javax/management/DescriptorKey.class +INFO: Loading Class: javax/management/DescriptorRead.class +INFO: Loading Class: javax/management/DynamicMBean.class +INFO: Loading Class: javax/management/ImmutableDescriptor.class +INFO: Loading Class: javax/management/InQueryExp.class +INFO: Loading Class: javax/management/InstanceAlreadyExistsException.class +INFO: Loading Class: javax/management/InstanceNotFoundException.class +INFO: Loading Class: javax/management/InstanceOfQueryExp.class +INFO: Loading Class: javax/management/IntrospectionException.class +INFO: Loading Class: javax/management/InvalidApplicationException.class +INFO: Loading Class: javax/management/InvalidAttributeValueException.class +INFO: Loading Class: javax/management/JMException.class +INFO: Loading Class: javax/management/JMRuntimeException.class +INFO: Loading Class: javax/management/JMX.class +INFO: Loading Class: javax/management/ListenerNotFoundException.class +INFO: Loading Class: javax/management/MBeanAttributeInfo.class +INFO: Loading Class: javax/management/MBeanConstructorInfo.class +INFO: Loading Class: javax/management/MBeanException.class +INFO: Loading Class: javax/management/MBeanFeatureInfo.class +INFO: Loading Class: javax/management/MBeanInfo$ArrayGettersSafeAction.class +INFO: Loading Class: javax/management/MBeanInfo.class +INFO: Loading Class: javax/management/MBeanNotificationInfo.class +INFO: Loading Class: javax/management/MBeanOperationInfo.class +INFO: Loading Class: javax/management/MBeanParameterInfo.class +INFO: Loading Class: javax/management/MBeanPermission.class +INFO: Loading Class: javax/management/MBeanRegistration.class +INFO: Loading Class: javax/management/MBeanRegistrationException.class +INFO: Loading Class: javax/management/MBeanServer.class +INFO: Loading Class: javax/management/MBeanServerBuilder.class +INFO: Loading Class: javax/management/MBeanServerConnection.class +INFO: Loading Class: javax/management/MBeanServerDelegate.class +INFO: Loading Class: javax/management/MBeanServerDelegateMBean.class +INFO: Loading Class: javax/management/MBeanServerFactory.class +INFO: Loading Class: javax/management/MBeanServerInvocationHandler.class +INFO: Loading Class: javax/management/MBeanServerNotification.class +INFO: Loading Class: javax/management/MBeanServerPermission.class +INFO: Loading Class: javax/management/MBeanServerPermissionCollection.class +INFO: Loading Class: javax/management/MBeanTrustPermission.class +INFO: Loading Class: javax/management/MXBean.class +INFO: Loading Class: javax/management/MalformedObjectNameException.class +INFO: Loading Class: javax/management/MatchQueryExp.class +INFO: Loading Class: javax/management/NotCompliantMBeanException.class +INFO: Loading Class: javax/management/NotQueryExp.class +INFO: Loading Class: javax/management/Notification.class +INFO: Loading Class: javax/management/NotificationBroadcaster.class +INFO: Loading Class: javax/management/NotificationBroadcasterSupport$1.class +INFO: Loading Class: javax/management/NotificationBroadcasterSupport$ListenerInfo.class +INFO: Loading Class: javax/management/NotificationBroadcasterSupport$SendNotifJob.class +INFO: Loading Class: javax/management/NotificationBroadcasterSupport$WildcardListenerInfo.class +INFO: Loading Class: javax/management/NotificationBroadcasterSupport.class +INFO: Loading Class: javax/management/NotificationEmitter.class +INFO: Loading Class: javax/management/NotificationFilter.class +INFO: Loading Class: javax/management/NotificationFilterSupport.class +INFO: Loading Class: javax/management/NotificationListener.class +INFO: Loading Class: javax/management/NumericValueExp.class +INFO: Loading Class: javax/management/ObjectInstance.class +INFO: Loading Class: javax/management/ObjectName$PatternProperty.class +INFO: Loading Class: javax/management/ObjectName$Property.class +INFO: Loading Class: javax/management/ObjectName.class +INFO: Loading Class: javax/management/OperationsException.class +INFO: Loading Class: javax/management/OrQueryExp.class +INFO: Loading Class: javax/management/PersistentMBean.class +INFO: Loading Class: javax/management/QualifiedAttributeValueExp.class +INFO: Loading Class: javax/management/Query.class +INFO: Loading Class: javax/management/QueryEval.class +INFO: Loading Class: javax/management/QueryExp.class +INFO: Loading Class: javax/management/ReflectionException.class +INFO: Loading Class: javax/management/RuntimeErrorException.class +INFO: Loading Class: javax/management/RuntimeMBeanException.class +INFO: Loading Class: javax/management/RuntimeOperationsException.class +INFO: Loading Class: javax/management/ServiceNotFoundException.class +INFO: Loading Class: javax/management/StandardEmitterMBean.class +INFO: Loading Class: javax/management/StandardMBean$MBeanInfoSafeAction.class +INFO: Loading Class: javax/management/StandardMBean.class +INFO: Loading Class: javax/management/StringValueExp.class +INFO: Loading Class: javax/management/ValueExp.class +INFO: Loading Class: javax/management/loading/ClassLoaderRepository.class +INFO: Loading Class: javax/management/loading/DefaultLoaderRepository.class +INFO: Loading Class: javax/management/loading/MLet$1.class +INFO: Loading Class: javax/management/loading/MLet.class +INFO: Loading Class: javax/management/loading/MLetContent.class +INFO: Loading Class: javax/management/loading/MLetMBean.class +INFO: Loading Class: javax/management/loading/MLetObjectInputStream.class +INFO: Loading Class: javax/management/loading/MLetParser.class +INFO: Loading Class: javax/management/loading/PrivateClassLoader.class +INFO: Loading Class: javax/management/loading/PrivateMLet.class +INFO: Loading Class: javax/management/modelmbean/DescriptorSupport.class +INFO: Loading Class: javax/management/modelmbean/InvalidTargetObjectTypeException.class +INFO: Loading Class: javax/management/modelmbean/ModelMBean.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanAttributeInfo.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanConstructorInfo.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanInfo.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanInfoSupport.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanNotificationBroadcaster.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanNotificationInfo.class +INFO: Loading Class: javax/management/modelmbean/ModelMBeanOperationInfo.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean$1.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean$2.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean$3.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean$4.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean$5.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean$6.class +INFO: Loading Class: javax/management/modelmbean/RequiredModelMBean.class +INFO: Loading Class: javax/management/modelmbean/XMLParseException.class +INFO: Loading Class: javax/management/monitor/CounterMonitor$1.class +INFO: Loading Class: javax/management/monitor/CounterMonitor$CounterMonitorObservedObject.class +INFO: Loading Class: javax/management/monitor/CounterMonitor.class +INFO: Loading Class: javax/management/monitor/CounterMonitorMBean.class +INFO: Loading Class: javax/management/monitor/GaugeMonitor$1.class +INFO: Loading Class: javax/management/monitor/GaugeMonitor$GaugeMonitorObservedObject.class +INFO: Loading Class: javax/management/monitor/GaugeMonitor.class +INFO: Loading Class: javax/management/monitor/GaugeMonitorMBean.class +INFO: Loading Class: javax/management/monitor/Monitor$1.class +INFO: Loading Class: javax/management/monitor/Monitor$DaemonThreadFactory.class +INFO: Loading Class: javax/management/monitor/Monitor$MonitorTask$1.class +INFO: Loading Class: javax/management/monitor/Monitor$MonitorTask.class +INFO: Loading Class: javax/management/monitor/Monitor$NumericalType.class +INFO: Loading Class: javax/management/monitor/Monitor$ObservedObject.class +INFO: Loading Class: javax/management/monitor/Monitor$SchedulerTask.class +INFO: Loading Class: javax/management/monitor/Monitor.class +INFO: Loading Class: javax/management/monitor/MonitorMBean.class +INFO: Loading Class: javax/management/monitor/MonitorNotification.class +INFO: Loading Class: javax/management/monitor/MonitorSettingException.class +INFO: Loading Class: javax/management/monitor/StringMonitor$StringMonitorObservedObject.class +INFO: Loading Class: javax/management/monitor/StringMonitor.class +INFO: Loading Class: javax/management/monitor/StringMonitorMBean.class +INFO: Loading Class: javax/management/openmbean/ArrayType.class +INFO: Loading Class: javax/management/openmbean/CompositeData.class +INFO: Loading Class: javax/management/openmbean/CompositeDataInvocationHandler.class +INFO: Loading Class: javax/management/openmbean/CompositeDataSupport.class +INFO: Loading Class: javax/management/openmbean/CompositeDataView.class +INFO: Loading Class: javax/management/openmbean/CompositeType.class +INFO: Loading Class: javax/management/openmbean/InvalidKeyException.class +INFO: Loading Class: javax/management/openmbean/InvalidOpenTypeException.class +INFO: Loading Class: javax/management/openmbean/KeyAlreadyExistsException.class +INFO: Loading Class: javax/management/openmbean/OpenDataException.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanAttributeInfo.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanAttributeInfoSupport.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanConstructorInfo.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanConstructorInfoSupport.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanInfo.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanInfoSupport.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanOperationInfo.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanOperationInfoSupport.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanParameterInfo.class +INFO: Loading Class: javax/management/openmbean/OpenMBeanParameterInfoSupport.class +INFO: Loading Class: javax/management/openmbean/OpenType$1.class +INFO: Loading Class: javax/management/openmbean/OpenType.class +INFO: Loading Class: javax/management/openmbean/SimpleType.class +INFO: Loading Class: javax/management/openmbean/TabularData.class +INFO: Loading Class: javax/management/openmbean/TabularDataSupport.class +INFO: Loading Class: javax/management/openmbean/TabularType.class +INFO: Loading Class: javax/management/relation/InvalidRelationIdException.class +INFO: Loading Class: javax/management/relation/InvalidRelationServiceException.class +INFO: Loading Class: javax/management/relation/InvalidRelationTypeException.class +INFO: Loading Class: javax/management/relation/InvalidRoleInfoException.class +INFO: Loading Class: javax/management/relation/InvalidRoleValueException.class +INFO: Loading Class: javax/management/relation/MBeanServerNotificationFilter.class +INFO: Loading Class: javax/management/relation/Relation.class +INFO: Loading Class: javax/management/relation/RelationException.class +INFO: Loading Class: javax/management/relation/RelationNotFoundException.class +INFO: Loading Class: javax/management/relation/RelationNotification.class +INFO: Loading Class: javax/management/relation/RelationService.class +INFO: Loading Class: javax/management/relation/RelationServiceMBean.class +INFO: Loading Class: javax/management/relation/RelationServiceNotRegisteredException.class +INFO: Loading Class: javax/management/relation/RelationSupport.class +INFO: Loading Class: javax/management/relation/RelationSupportMBean.class +INFO: Loading Class: javax/management/relation/RelationType.class +INFO: Loading Class: javax/management/relation/RelationTypeNotFoundException.class +INFO: Loading Class: javax/management/relation/RelationTypeSupport.class +INFO: Loading Class: javax/management/relation/Role.class +INFO: Loading Class: javax/management/relation/RoleInfo.class +INFO: Loading Class: javax/management/relation/RoleInfoNotFoundException.class +INFO: Loading Class: javax/management/relation/RoleList.class +INFO: Loading Class: javax/management/relation/RoleNotFoundException.class +INFO: Loading Class: javax/management/relation/RoleResult.class +INFO: Loading Class: javax/management/relation/RoleStatus.class +INFO: Loading Class: javax/management/relation/RoleUnresolved.class +INFO: Loading Class: javax/management/relation/RoleUnresolvedList.class +INFO: Loading Class: javax/management/remote/JMXAddressable.class +INFO: Loading Class: javax/management/remote/JMXAuthenticator.class +INFO: Loading Class: javax/management/remote/JMXConnectionNotification.class +INFO: Loading Class: javax/management/remote/JMXConnector.class +INFO: Loading Class: javax/management/remote/JMXConnectorFactory$1.class +INFO: Loading Class: javax/management/remote/JMXConnectorFactory$2$1.class +INFO: Loading Class: javax/management/remote/JMXConnectorFactory$2.class +INFO: Loading Class: javax/management/remote/JMXConnectorFactory.class +INFO: Loading Class: javax/management/remote/JMXConnectorProvider.class +INFO: Loading Class: javax/management/remote/JMXConnectorServer.class +INFO: Loading Class: javax/management/remote/JMXConnectorServerFactory.class +INFO: Loading Class: javax/management/remote/JMXConnectorServerMBean.class +INFO: Loading Class: javax/management/remote/JMXConnectorServerProvider.class +INFO: Loading Class: javax/management/remote/JMXPrincipal.class +INFO: Loading Class: javax/management/remote/JMXProviderException.class +INFO: Loading Class: javax/management/remote/JMXServerErrorException.class +INFO: Loading Class: javax/management/remote/JMXServiceURL.class +INFO: Loading Class: javax/management/remote/MBeanServerForwarder.class +INFO: Loading Class: javax/management/remote/NotificationResult.class +INFO: Loading Class: javax/management/remote/SubjectDelegationPermission.class +INFO: Loading Class: javax/management/remote/TargetedNotification.class +INFO: Loading Class: javax/management/remote/rmi/NoCallStackClassLoader.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnection.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$1.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$2.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$3.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$4.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$5.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$6.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$7.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$CombinedClassLoader$ClassLoaderWrapper.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$CombinedClassLoader.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$PrivilegedOperation.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$RMIServerCommunicatorAdmin.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl$SetCcl.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectionImpl_Stub.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$1.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$2.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$3.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$4.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$5.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$ObjectInputStreamWithLoader.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$RMIClientCommunicatorAdmin.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$RMINotifClient.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector$RemoteMBeanServerConnection.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnector.class +INFO: Loading Class: javax/management/remote/rmi/RMIConnectorServer.class +INFO: Loading Class: javax/management/remote/rmi/RMIIIOPServerImpl$1.class +INFO: Loading Class: javax/management/remote/rmi/RMIIIOPServerImpl.class +INFO: Loading Class: javax/management/remote/rmi/RMIJRMPServerImpl$1.class +INFO: Loading Class: javax/management/remote/rmi/RMIJRMPServerImpl$ExportedWrapper.class +INFO: Loading Class: javax/management/remote/rmi/RMIJRMPServerImpl.class +INFO: Loading Class: javax/management/remote/rmi/RMIServer.class +INFO: Loading Class: javax/management/remote/rmi/RMIServerImpl.class +INFO: Loading Class: javax/management/remote/rmi/RMIServerImpl_Stub.class +INFO: Loading Class: javax/management/remote/rmi/_RMIConnectionImpl_Tie.class +INFO: Loading Class: javax/management/remote/rmi/_RMIConnection_Stub.class +INFO: Loading Class: javax/management/remote/rmi/_RMIServerImpl_Tie.class +INFO: Loading Class: javax/management/remote/rmi/_RMIServer_Stub.class +INFO: Loading Class: javax/management/timer/Timer.class +INFO: Loading Class: javax/management/timer/TimerAlarmClock.class +INFO: Loading Class: javax/management/timer/TimerAlarmClockNotification.class +INFO: Loading Class: javax/management/timer/TimerMBean.class +INFO: Loading Class: javax/management/timer/TimerNotification.class +INFO: Loading Class: javax/naming/AuthenticationException.class +INFO: Loading Class: javax/naming/AuthenticationNotSupportedException.class +INFO: Loading Class: javax/naming/BinaryRefAddr.class +INFO: Loading Class: javax/naming/Binding.class +INFO: Loading Class: javax/naming/CannotProceedException.class +INFO: Loading Class: javax/naming/CommunicationException.class +INFO: Loading Class: javax/naming/CompositeName.class +INFO: Loading Class: javax/naming/CompoundName.class +INFO: Loading Class: javax/naming/ConfigurationException.class +INFO: Loading Class: javax/naming/Context.class +INFO: Loading Class: javax/naming/ContextNotEmptyException.class +INFO: Loading Class: javax/naming/InitialContext.class +INFO: Loading Class: javax/naming/InsufficientResourcesException.class +INFO: Loading Class: javax/naming/InterruptedNamingException.class +INFO: Loading Class: javax/naming/InvalidNameException.class +INFO: Loading Class: javax/naming/LimitExceededException.class +INFO: Loading Class: javax/naming/LinkException.class +INFO: Loading Class: javax/naming/LinkLoopException.class +INFO: Loading Class: javax/naming/LinkRef.class +INFO: Loading Class: javax/naming/MalformedLinkException.class +INFO: Loading Class: javax/naming/Name.class +INFO: Loading Class: javax/naming/NameAlreadyBoundException.class +INFO: Loading Class: javax/naming/NameClassPair.class +INFO: Loading Class: javax/naming/NameImpl.class +INFO: Loading Class: javax/naming/NameImplEnumerator.class +INFO: Loading Class: javax/naming/NameNotFoundException.class +INFO: Loading Class: javax/naming/NameParser.class +INFO: Loading Class: javax/naming/NamingEnumeration.class +INFO: Loading Class: javax/naming/NamingException.class +INFO: Loading Class: javax/naming/NamingSecurityException.class +INFO: Loading Class: javax/naming/NoInitialContextException.class +INFO: Loading Class: javax/naming/NoPermissionException.class +INFO: Loading Class: javax/naming/NotContextException.class +INFO: Loading Class: javax/naming/OperationNotSupportedException.class +INFO: Loading Class: javax/naming/PartialResultException.class +INFO: Loading Class: javax/naming/RefAddr.class +INFO: Loading Class: javax/naming/Reference.class +INFO: Loading Class: javax/naming/Referenceable.class +INFO: Loading Class: javax/naming/ReferralException.class +INFO: Loading Class: javax/naming/ServiceUnavailableException.class +INFO: Loading Class: javax/naming/SizeLimitExceededException.class +INFO: Loading Class: javax/naming/StringRefAddr.class +INFO: Loading Class: javax/naming/TimeLimitExceededException.class +INFO: Loading Class: javax/naming/directory/Attribute.class +INFO: Loading Class: javax/naming/directory/AttributeInUseException.class +INFO: Loading Class: javax/naming/directory/AttributeModificationException.class +INFO: Loading Class: javax/naming/directory/Attributes.class +INFO: Loading Class: javax/naming/directory/BasicAttribute$ValuesEnumImpl.class +INFO: Loading Class: javax/naming/directory/BasicAttribute.class +INFO: Loading Class: javax/naming/directory/BasicAttributes$AttrEnumImpl.class +INFO: Loading Class: javax/naming/directory/BasicAttributes$IDEnumImpl.class +INFO: Loading Class: javax/naming/directory/BasicAttributes.class +INFO: Loading Class: javax/naming/directory/DirContext.class +INFO: Loading Class: javax/naming/directory/InitialDirContext.class +INFO: Loading Class: javax/naming/directory/InvalidAttributeIdentifierException.class +INFO: Loading Class: javax/naming/directory/InvalidAttributeValueException.class +INFO: Loading Class: javax/naming/directory/InvalidAttributesException.class +INFO: Loading Class: javax/naming/directory/InvalidSearchControlsException.class +INFO: Loading Class: javax/naming/directory/InvalidSearchFilterException.class +INFO: Loading Class: javax/naming/directory/ModificationItem.class +INFO: Loading Class: javax/naming/directory/NoSuchAttributeException.class +INFO: Loading Class: javax/naming/directory/SchemaViolationException.class +INFO: Loading Class: javax/naming/directory/SearchControls.class +INFO: Loading Class: javax/naming/directory/SearchResult.class +INFO: Loading Class: javax/naming/event/EventContext.class +INFO: Loading Class: javax/naming/event/EventDirContext.class +INFO: Loading Class: javax/naming/event/NamespaceChangeListener.class +INFO: Loading Class: javax/naming/event/NamingEvent.class +INFO: Loading Class: javax/naming/event/NamingExceptionEvent.class +INFO: Loading Class: javax/naming/event/NamingListener.class +INFO: Loading Class: javax/naming/event/ObjectChangeListener.class +INFO: Loading Class: javax/naming/ldap/BasicControl.class +INFO: Loading Class: javax/naming/ldap/Control.class +INFO: Loading Class: javax/naming/ldap/ControlFactory.class +INFO: Loading Class: javax/naming/ldap/ExtendedRequest.class +INFO: Loading Class: javax/naming/ldap/ExtendedResponse.class +INFO: Loading Class: javax/naming/ldap/HasControls.class +INFO: Loading Class: javax/naming/ldap/InitialLdapContext.class +INFO: Loading Class: javax/naming/ldap/LdapContext.class +INFO: Loading Class: javax/naming/ldap/LdapName$1.class +INFO: Loading Class: javax/naming/ldap/LdapName.class +INFO: Loading Class: javax/naming/ldap/LdapReferralException.class +INFO: Loading Class: javax/naming/ldap/ManageReferralControl.class +INFO: Loading Class: javax/naming/ldap/PagedResultsControl.class +INFO: Loading Class: javax/naming/ldap/PagedResultsResponseControl.class +INFO: Loading Class: javax/naming/ldap/Rdn$1.class +INFO: Loading Class: javax/naming/ldap/Rdn$RdnEntry.class +INFO: Loading Class: javax/naming/ldap/Rdn.class +INFO: Loading Class: javax/naming/ldap/Rfc2253Parser.class +INFO: Loading Class: javax/naming/ldap/SortControl.class +INFO: Loading Class: javax/naming/ldap/SortKey.class +INFO: Loading Class: javax/naming/ldap/SortResponseControl.class +INFO: Loading Class: javax/naming/ldap/StartTlsRequest$1.class +INFO: Loading Class: javax/naming/ldap/StartTlsRequest$2.class +INFO: Loading Class: javax/naming/ldap/StartTlsRequest.class +INFO: Loading Class: javax/naming/ldap/StartTlsResponse.class +INFO: Loading Class: javax/naming/ldap/UnsolicitedNotification.class +INFO: Loading Class: javax/naming/ldap/UnsolicitedNotificationEvent.class +INFO: Loading Class: javax/naming/ldap/UnsolicitedNotificationListener.class +INFO: Loading Class: javax/naming/spi/ContinuationContext.class +INFO: Loading Class: javax/naming/spi/ContinuationDirContext.class +INFO: Loading Class: javax/naming/spi/DirContextNamePair.class +INFO: Loading Class: javax/naming/spi/DirContextStringPair.class +INFO: Loading Class: javax/naming/spi/DirObjectFactory.class +INFO: Loading Class: javax/naming/spi/DirStateFactory$Result.class +INFO: Loading Class: javax/naming/spi/DirStateFactory.class +INFO: Loading Class: javax/naming/spi/DirectoryManager.class +INFO: Loading Class: javax/naming/spi/InitialContextFactory.class +INFO: Loading Class: javax/naming/spi/InitialContextFactoryBuilder.class +INFO: Loading Class: javax/naming/spi/NamingManager.class +INFO: Loading Class: javax/naming/spi/ObjectFactory.class +INFO: Loading Class: javax/naming/spi/ObjectFactoryBuilder.class +INFO: Loading Class: javax/naming/spi/ResolveResult.class +INFO: Loading Class: javax/naming/spi/Resolver.class +INFO: Loading Class: javax/naming/spi/StateFactory.class +INFO: Loading Class: javax/net/DefaultServerSocketFactory.class +INFO: Loading Class: javax/net/DefaultSocketFactory.class +INFO: Loading Class: javax/net/ServerSocketFactory.class +INFO: Loading Class: javax/net/SocketFactory.class +INFO: Loading Class: javax/net/ssl/CertPathTrustManagerParameters.class +INFO: Loading Class: javax/net/ssl/DefaultSSLServerSocketFactory.class +INFO: Loading Class: javax/net/ssl/DefaultSSLSocketFactory.class +INFO: Loading Class: javax/net/ssl/ExtendedSSLSession.class +INFO: Loading Class: javax/net/ssl/HandshakeCompletedEvent.class +INFO: Loading Class: javax/net/ssl/HandshakeCompletedListener.class +INFO: Loading Class: javax/net/ssl/HostnameVerifier.class +INFO: Loading Class: javax/net/ssl/HttpsURLConnection$1.class +INFO: Loading Class: javax/net/ssl/HttpsURLConnection$DefaultHostnameVerifier.class +INFO: Loading Class: javax/net/ssl/HttpsURLConnection.class +INFO: Loading Class: javax/net/ssl/KeyManager.class +INFO: Loading Class: javax/net/ssl/KeyManagerFactory$1.class +INFO: Loading Class: javax/net/ssl/KeyManagerFactory.class +INFO: Loading Class: javax/net/ssl/KeyManagerFactorySpi.class +INFO: Loading Class: javax/net/ssl/KeyStoreBuilderParameters.class +INFO: Loading Class: javax/net/ssl/ManagerFactoryParameters.class +INFO: Loading Class: javax/net/ssl/SNIHostName$SNIHostNameMatcher.class +INFO: Loading Class: javax/net/ssl/SNIHostName.class +INFO: Loading Class: javax/net/ssl/SNIMatcher.class +INFO: Loading Class: javax/net/ssl/SNIServerName.class +INFO: Loading Class: javax/net/ssl/SSLContext.class +INFO: Loading Class: javax/net/ssl/SSLContextSpi.class +INFO: Loading Class: javax/net/ssl/SSLEngine.class +INFO: Loading Class: javax/net/ssl/SSLEngineResult$HandshakeStatus.class +INFO: Loading Class: javax/net/ssl/SSLEngineResult$Status.class +INFO: Loading Class: javax/net/ssl/SSLEngineResult.class +INFO: Loading Class: javax/net/ssl/SSLException.class +INFO: Loading Class: javax/net/ssl/SSLHandshakeException.class +INFO: Loading Class: javax/net/ssl/SSLKeyException.class +INFO: Loading Class: javax/net/ssl/SSLParameters.class +INFO: Loading Class: javax/net/ssl/SSLPeerUnverifiedException.class +INFO: Loading Class: javax/net/ssl/SSLPermission.class +INFO: Loading Class: javax/net/ssl/SSLProtocolException.class +INFO: Loading Class: javax/net/ssl/SSLServerSocket.class +INFO: Loading Class: javax/net/ssl/SSLServerSocketFactory.class +INFO: Loading Class: javax/net/ssl/SSLSession.class +INFO: Loading Class: javax/net/ssl/SSLSessionBindingEvent.class +INFO: Loading Class: javax/net/ssl/SSLSessionBindingListener.class +INFO: Loading Class: javax/net/ssl/SSLSessionContext.class +INFO: Loading Class: javax/net/ssl/SSLSocket.class +INFO: Loading Class: javax/net/ssl/SSLSocketFactory$1.class +INFO: Loading Class: javax/net/ssl/SSLSocketFactory.class +INFO: Loading Class: javax/net/ssl/StandardConstants.class +INFO: Loading Class: javax/net/ssl/TrustManager.class +INFO: Loading Class: javax/net/ssl/TrustManagerFactory$1.class +INFO: Loading Class: javax/net/ssl/TrustManagerFactory.class +INFO: Loading Class: javax/net/ssl/TrustManagerFactorySpi.class +INFO: Loading Class: javax/net/ssl/X509ExtendedKeyManager.class +INFO: Loading Class: javax/net/ssl/X509ExtendedTrustManager.class +INFO: Loading Class: javax/net/ssl/X509KeyManager.class +INFO: Loading Class: javax/net/ssl/X509TrustManager.class +INFO: Loading Class: javax/print/AttributeException.class +INFO: Loading Class: javax/print/CancelablePrintJob.class +INFO: Loading Class: javax/print/Doc.class +INFO: Loading Class: javax/print/DocFlavor$BYTE_ARRAY.class +INFO: Loading Class: javax/print/DocFlavor$CHAR_ARRAY.class +INFO: Loading Class: javax/print/DocFlavor$INPUT_STREAM.class +INFO: Loading Class: javax/print/DocFlavor$READER.class +INFO: Loading Class: javax/print/DocFlavor$SERVICE_FORMATTED.class +INFO: Loading Class: javax/print/DocFlavor$STRING.class +INFO: Loading Class: javax/print/DocFlavor$URL.class +INFO: Loading Class: javax/print/DocFlavor.class +INFO: Loading Class: javax/print/DocPrintJob.class +INFO: Loading Class: javax/print/FlavorException.class +INFO: Loading Class: javax/print/MimeType$1.class +INFO: Loading Class: javax/print/MimeType$LexicalAnalyzer.class +INFO: Loading Class: javax/print/MimeType$ParameterMap.class +INFO: Loading Class: javax/print/MimeType$ParameterMapEntry.class +INFO: Loading Class: javax/print/MimeType$ParameterMapEntrySet.class +INFO: Loading Class: javax/print/MimeType$ParameterMapEntrySetIterator.class +INFO: Loading Class: javax/print/MimeType.class +INFO: Loading Class: javax/print/MultiDoc.class +INFO: Loading Class: javax/print/MultiDocPrintJob.class +INFO: Loading Class: javax/print/MultiDocPrintService.class +INFO: Loading Class: javax/print/PrintException.class +INFO: Loading Class: javax/print/PrintService.class +INFO: Loading Class: javax/print/PrintServiceLookup$1.class +INFO: Loading Class: javax/print/PrintServiceLookup$Services.class +INFO: Loading Class: javax/print/PrintServiceLookup.class +INFO: Loading Class: javax/print/ServiceUI.class +INFO: Loading Class: javax/print/ServiceUIFactory.class +INFO: Loading Class: javax/print/SimpleDoc.class +INFO: Loading Class: javax/print/StreamPrintService.class +INFO: Loading Class: javax/print/StreamPrintServiceFactory$1.class +INFO: Loading Class: javax/print/StreamPrintServiceFactory$Services.class +INFO: Loading Class: javax/print/StreamPrintServiceFactory.class +INFO: Loading Class: javax/print/URIException.class +INFO: Loading Class: javax/print/attribute/Attribute.class +INFO: Loading Class: javax/print/attribute/AttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$SynchronizedAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$SynchronizedDocAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$SynchronizedPrintJobAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$SynchronizedPrintRequestAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$SynchronizedPrintServiceAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$UnmodifiableAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$UnmodifiableDocAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$UnmodifiablePrintJobAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$UnmodifiablePrintRequestAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities$UnmodifiablePrintServiceAttributeSet.class +INFO: Loading Class: javax/print/attribute/AttributeSetUtilities.class +INFO: Loading Class: javax/print/attribute/DateTimeSyntax.class +INFO: Loading Class: javax/print/attribute/DocAttribute.class +INFO: Loading Class: javax/print/attribute/DocAttributeSet.class +INFO: Loading Class: javax/print/attribute/EnumSyntax.class +INFO: Loading Class: javax/print/attribute/HashAttributeSet.class +INFO: Loading Class: javax/print/attribute/HashDocAttributeSet.class +INFO: Loading Class: javax/print/attribute/HashPrintJobAttributeSet.class +INFO: Loading Class: javax/print/attribute/HashPrintRequestAttributeSet.class +INFO: Loading Class: javax/print/attribute/HashPrintServiceAttributeSet.class +INFO: Loading Class: javax/print/attribute/IntegerSyntax.class +INFO: Loading Class: javax/print/attribute/PrintJobAttribute.class +INFO: Loading Class: javax/print/attribute/PrintJobAttributeSet.class +INFO: Loading Class: javax/print/attribute/PrintRequestAttribute.class +INFO: Loading Class: javax/print/attribute/PrintRequestAttributeSet.class +INFO: Loading Class: javax/print/attribute/PrintServiceAttribute.class +INFO: Loading Class: javax/print/attribute/PrintServiceAttributeSet.class +INFO: Loading Class: javax/print/attribute/ResolutionSyntax.class +INFO: Loading Class: javax/print/attribute/SetOfIntegerSyntax.class +INFO: Loading Class: javax/print/attribute/Size2DSyntax.class +INFO: Loading Class: javax/print/attribute/SupportedValuesAttribute.class +INFO: Loading Class: javax/print/attribute/TextSyntax.class +INFO: Loading Class: javax/print/attribute/URISyntax.class +INFO: Loading Class: javax/print/attribute/UnmodifiableSetException.class +INFO: Loading Class: javax/print/attribute/standard/Chromaticity.class +INFO: Loading Class: javax/print/attribute/standard/ColorSupported.class +INFO: Loading Class: javax/print/attribute/standard/Compression.class +INFO: Loading Class: javax/print/attribute/standard/Copies.class +INFO: Loading Class: javax/print/attribute/standard/CopiesSupported.class +INFO: Loading Class: javax/print/attribute/standard/DateTimeAtCompleted.class +INFO: Loading Class: javax/print/attribute/standard/DateTimeAtCreation.class +INFO: Loading Class: javax/print/attribute/standard/DateTimeAtProcessing.class +INFO: Loading Class: javax/print/attribute/standard/Destination.class +INFO: Loading Class: javax/print/attribute/standard/DialogTypeSelection.class +INFO: Loading Class: javax/print/attribute/standard/DocumentName.class +INFO: Loading Class: javax/print/attribute/standard/Fidelity.class +INFO: Loading Class: javax/print/attribute/standard/Finishings.class +INFO: Loading Class: javax/print/attribute/standard/JobHoldUntil.class +INFO: Loading Class: javax/print/attribute/standard/JobImpressions.class +INFO: Loading Class: javax/print/attribute/standard/JobImpressionsCompleted.class +INFO: Loading Class: javax/print/attribute/standard/JobImpressionsSupported.class +INFO: Loading Class: javax/print/attribute/standard/JobKOctets.class +INFO: Loading Class: javax/print/attribute/standard/JobKOctetsProcessed.class +INFO: Loading Class: javax/print/attribute/standard/JobKOctetsSupported.class +INFO: Loading Class: javax/print/attribute/standard/JobMediaSheets.class +INFO: Loading Class: javax/print/attribute/standard/JobMediaSheetsCompleted.class +INFO: Loading Class: javax/print/attribute/standard/JobMediaSheetsSupported.class +INFO: Loading Class: javax/print/attribute/standard/JobMessageFromOperator.class +INFO: Loading Class: javax/print/attribute/standard/JobName.class +INFO: Loading Class: javax/print/attribute/standard/JobOriginatingUserName.class +INFO: Loading Class: javax/print/attribute/standard/JobPriority.class +INFO: Loading Class: javax/print/attribute/standard/JobPrioritySupported.class +INFO: Loading Class: javax/print/attribute/standard/JobSheets.class +INFO: Loading Class: javax/print/attribute/standard/JobState.class +INFO: Loading Class: javax/print/attribute/standard/JobStateReason.class +INFO: Loading Class: javax/print/attribute/standard/JobStateReasons.class +INFO: Loading Class: javax/print/attribute/standard/Media.class +INFO: Loading Class: javax/print/attribute/standard/MediaName.class +INFO: Loading Class: javax/print/attribute/standard/MediaPrintableArea.class +INFO: Loading Class: javax/print/attribute/standard/MediaSize$Engineering.class +INFO: Loading Class: javax/print/attribute/standard/MediaSize$ISO.class +INFO: Loading Class: javax/print/attribute/standard/MediaSize$JIS.class +INFO: Loading Class: javax/print/attribute/standard/MediaSize$NA.class +INFO: Loading Class: javax/print/attribute/standard/MediaSize$Other.class +INFO: Loading Class: javax/print/attribute/standard/MediaSize.class +INFO: Loading Class: javax/print/attribute/standard/MediaSizeName.class +INFO: Loading Class: javax/print/attribute/standard/MediaTray.class +INFO: Loading Class: javax/print/attribute/standard/MultipleDocumentHandling.class +INFO: Loading Class: javax/print/attribute/standard/NumberOfDocuments.class +INFO: Loading Class: javax/print/attribute/standard/NumberOfInterveningJobs.class +INFO: Loading Class: javax/print/attribute/standard/NumberUp.class +INFO: Loading Class: javax/print/attribute/standard/NumberUpSupported.class +INFO: Loading Class: javax/print/attribute/standard/OrientationRequested.class +INFO: Loading Class: javax/print/attribute/standard/OutputDeviceAssigned.class +INFO: Loading Class: javax/print/attribute/standard/PDLOverrideSupported.class +INFO: Loading Class: javax/print/attribute/standard/PageRanges.class +INFO: Loading Class: javax/print/attribute/standard/PagesPerMinute.class +INFO: Loading Class: javax/print/attribute/standard/PagesPerMinuteColor.class +INFO: Loading Class: javax/print/attribute/standard/PresentationDirection.class +INFO: Loading Class: javax/print/attribute/standard/PrintQuality.class +INFO: Loading Class: javax/print/attribute/standard/PrinterInfo.class +INFO: Loading Class: javax/print/attribute/standard/PrinterIsAcceptingJobs.class +INFO: Loading Class: javax/print/attribute/standard/PrinterLocation.class +INFO: Loading Class: javax/print/attribute/standard/PrinterMakeAndModel.class +INFO: Loading Class: javax/print/attribute/standard/PrinterMessageFromOperator.class +INFO: Loading Class: javax/print/attribute/standard/PrinterMoreInfo.class +INFO: Loading Class: javax/print/attribute/standard/PrinterMoreInfoManufacturer.class +INFO: Loading Class: javax/print/attribute/standard/PrinterName.class +INFO: Loading Class: javax/print/attribute/standard/PrinterResolution.class +INFO: Loading Class: javax/print/attribute/standard/PrinterState.class +INFO: Loading Class: javax/print/attribute/standard/PrinterStateReason.class +INFO: Loading Class: javax/print/attribute/standard/PrinterStateReasons$PrinterStateReasonSet.class +INFO: Loading Class: javax/print/attribute/standard/PrinterStateReasons$PrinterStateReasonSetIterator.class +INFO: Loading Class: javax/print/attribute/standard/PrinterStateReasons.class +INFO: Loading Class: javax/print/attribute/standard/PrinterURI.class +INFO: Loading Class: javax/print/attribute/standard/QueuedJobCount.class +INFO: Loading Class: javax/print/attribute/standard/ReferenceUriSchemesSupported.class +INFO: Loading Class: javax/print/attribute/standard/RequestingUserName.class +INFO: Loading Class: javax/print/attribute/standard/Severity.class +INFO: Loading Class: javax/print/attribute/standard/SheetCollate.class +INFO: Loading Class: javax/print/attribute/standard/Sides.class +INFO: Loading Class: javax/print/event/PrintEvent.class +INFO: Loading Class: javax/print/event/PrintJobAdapter.class +INFO: Loading Class: javax/print/event/PrintJobAttributeEvent.class +INFO: Loading Class: javax/print/event/PrintJobAttributeListener.class +INFO: Loading Class: javax/print/event/PrintJobEvent.class +INFO: Loading Class: javax/print/event/PrintJobListener.class +INFO: Loading Class: javax/print/event/PrintServiceAttributeEvent.class +INFO: Loading Class: javax/print/event/PrintServiceAttributeListener.class +INFO: Loading Class: javax/rmi/CORBA/ClassDesc.class +INFO: Loading Class: javax/rmi/CORBA/GetORBPropertiesFileAction$1.class +INFO: Loading Class: javax/rmi/CORBA/GetORBPropertiesFileAction.class +INFO: Loading Class: javax/rmi/CORBA/PortableRemoteObjectDelegate.class +INFO: Loading Class: javax/rmi/CORBA/Stub.class +INFO: Loading Class: javax/rmi/CORBA/StubDelegate.class +INFO: Loading Class: javax/rmi/CORBA/Tie.class +INFO: Loading Class: javax/rmi/CORBA/Util$1.class +INFO: Loading Class: javax/rmi/CORBA/Util.class +INFO: Loading Class: javax/rmi/CORBA/UtilDelegate.class +INFO: Loading Class: javax/rmi/CORBA/ValueHandler.class +INFO: Loading Class: javax/rmi/CORBA/ValueHandlerMultiFormat.class +INFO: Loading Class: javax/rmi/GetORBPropertiesFileAction$1.class +INFO: Loading Class: javax/rmi/GetORBPropertiesFileAction.class +INFO: Loading Class: javax/rmi/PortableRemoteObject.class +INFO: Loading Class: javax/rmi/ssl/SslRMIClientSocketFactory.class +INFO: Loading Class: javax/rmi/ssl/SslRMIServerSocketFactory$1.class +INFO: Loading Class: javax/rmi/ssl/SslRMIServerSocketFactory.class +INFO: Loading Class: javax/script/AbstractScriptEngine.class +INFO: Loading Class: javax/script/Bindings.class +INFO: Loading Class: javax/script/Compilable.class +INFO: Loading Class: javax/script/CompiledScript.class +INFO: Loading Class: javax/script/Invocable.class +INFO: Loading Class: javax/script/ScriptContext.class +INFO: Loading Class: javax/script/ScriptEngine.class +INFO: Loading Class: javax/script/ScriptEngineFactory.class +INFO: Loading Class: javax/script/ScriptEngineManager$1.class +INFO: Loading Class: javax/script/ScriptEngineManager.class +INFO: Loading Class: javax/script/ScriptException.class +INFO: Loading Class: javax/script/SimpleBindings.class +INFO: Loading Class: javax/script/SimpleScriptContext.class +INFO: Loading Class: javax/security/auth/AuthPermission.class +INFO: Loading Class: javax/security/auth/DestroyFailedException.class +INFO: Loading Class: javax/security/auth/Destroyable.class +INFO: Loading Class: javax/security/auth/Policy$1.class +INFO: Loading Class: javax/security/auth/Policy$2.class +INFO: Loading Class: javax/security/auth/Policy$3.class +INFO: Loading Class: javax/security/auth/Policy$4.class +INFO: Loading Class: javax/security/auth/Policy.class +INFO: Loading Class: javax/security/auth/PrivateCredentialPermission$CredOwner.class +INFO: Loading Class: javax/security/auth/PrivateCredentialPermission.class +INFO: Loading Class: javax/security/auth/RefreshFailedException.class +INFO: Loading Class: javax/security/auth/Refreshable.class +INFO: Loading Class: javax/security/auth/Subject$1.class +INFO: Loading Class: javax/security/auth/Subject$2.class +INFO: Loading Class: javax/security/auth/Subject$AuthPermissionHolder.class +INFO: Loading Class: javax/security/auth/Subject$ClassSet$1.class +INFO: Loading Class: javax/security/auth/Subject$ClassSet.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet$1.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet$2.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet$3.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet$4.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet$5.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet$6.class +INFO: Loading Class: javax/security/auth/Subject$SecureSet.class +INFO: Loading Class: javax/security/auth/Subject.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner$1.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner$2.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner$3.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner$4.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner$5.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner$WeakKeyValueMap.class +INFO: Loading Class: javax/security/auth/SubjectDomainCombiner.class +INFO: Loading Class: javax/security/auth/callback/Callback.class +INFO: Loading Class: javax/security/auth/callback/CallbackHandler.class +INFO: Loading Class: javax/security/auth/callback/ChoiceCallback.class +INFO: Loading Class: javax/security/auth/callback/ConfirmationCallback.class +INFO: Loading Class: javax/security/auth/callback/LanguageCallback.class +INFO: Loading Class: javax/security/auth/callback/NameCallback.class +INFO: Loading Class: javax/security/auth/callback/PasswordCallback.class +INFO: Loading Class: javax/security/auth/callback/TextInputCallback.class +INFO: Loading Class: javax/security/auth/callback/TextOutputCallback.class +INFO: Loading Class: javax/security/auth/callback/UnsupportedCallbackException.class +INFO: Loading Class: javax/security/auth/kerberos/DelegationPermission.class +INFO: Loading Class: javax/security/auth/kerberos/JavaxSecurityAuthKerberosAccessImpl.class +INFO: Loading Class: javax/security/auth/kerberos/KerberosKey.class +INFO: Loading Class: javax/security/auth/kerberos/KerberosPrincipal.class +INFO: Loading Class: javax/security/auth/kerberos/KerberosTicket.class +INFO: Loading Class: javax/security/auth/kerberos/KeyImpl.class +INFO: Loading Class: javax/security/auth/kerberos/KeyTab.class +INFO: Loading Class: javax/security/auth/kerberos/KrbDelegationPermissionCollection.class +INFO: Loading Class: javax/security/auth/kerberos/KrbServicePermissionCollection.class +INFO: Loading Class: javax/security/auth/kerberos/ServicePermission.class +INFO: Loading Class: javax/security/auth/login/AccountException.class +INFO: Loading Class: javax/security/auth/login/AccountExpiredException.class +INFO: Loading Class: javax/security/auth/login/AccountLockedException.class +INFO: Loading Class: javax/security/auth/login/AccountNotFoundException.class +INFO: Loading Class: javax/security/auth/login/AppConfigurationEntry$LoginModuleControlFlag.class +INFO: Loading Class: javax/security/auth/login/AppConfigurationEntry.class +INFO: Loading Class: javax/security/auth/login/Configuration$1.class +INFO: Loading Class: javax/security/auth/login/Configuration$2.class +INFO: Loading Class: javax/security/auth/login/Configuration$3.class +INFO: Loading Class: javax/security/auth/login/Configuration$ConfigDelegate.class +INFO: Loading Class: javax/security/auth/login/Configuration$Parameters.class +INFO: Loading Class: javax/security/auth/login/Configuration.class +INFO: Loading Class: javax/security/auth/login/ConfigurationSpi.class +INFO: Loading Class: javax/security/auth/login/CredentialException.class +INFO: Loading Class: javax/security/auth/login/CredentialExpiredException.class +INFO: Loading Class: javax/security/auth/login/CredentialNotFoundException.class +INFO: Loading Class: javax/security/auth/login/FailedLoginException.class +INFO: Loading Class: javax/security/auth/login/LoginContext$1.class +INFO: Loading Class: javax/security/auth/login/LoginContext$2.class +INFO: Loading Class: javax/security/auth/login/LoginContext$3.class +INFO: Loading Class: javax/security/auth/login/LoginContext$4.class +INFO: Loading Class: javax/security/auth/login/LoginContext$ModuleInfo.class +INFO: Loading Class: javax/security/auth/login/LoginContext$SecureCallbackHandler$1.class +INFO: Loading Class: javax/security/auth/login/LoginContext$SecureCallbackHandler.class +INFO: Loading Class: javax/security/auth/login/LoginContext.class +INFO: Loading Class: javax/security/auth/login/LoginException.class +INFO: Loading Class: javax/security/auth/spi/LoginModule.class +INFO: Loading Class: javax/security/auth/x500/X500Principal.class +INFO: Loading Class: javax/security/auth/x500/X500PrivateCredential.class +INFO: Loading Class: javax/security/cert/Certificate.class +INFO: Loading Class: javax/security/cert/CertificateEncodingException.class +INFO: Loading Class: javax/security/cert/CertificateException.class +INFO: Loading Class: javax/security/cert/CertificateExpiredException.class +INFO: Loading Class: javax/security/cert/CertificateNotYetValidException.class +INFO: Loading Class: javax/security/cert/CertificateParsingException.class +INFO: Loading Class: javax/security/cert/X509Certificate$1.class +INFO: Loading Class: javax/security/cert/X509Certificate.class +INFO: Loading Class: javax/security/sasl/AuthenticationException.class +INFO: Loading Class: javax/security/sasl/AuthorizeCallback.class +INFO: Loading Class: javax/security/sasl/RealmCallback.class +INFO: Loading Class: javax/security/sasl/RealmChoiceCallback.class +INFO: Loading Class: javax/security/sasl/Sasl$1.class +INFO: Loading Class: javax/security/sasl/Sasl$2.class +INFO: Loading Class: javax/security/sasl/Sasl.class +INFO: Loading Class: javax/security/sasl/SaslClient.class +INFO: Loading Class: javax/security/sasl/SaslClientFactory.class +INFO: Loading Class: javax/security/sasl/SaslException.class +INFO: Loading Class: javax/security/sasl/SaslServer.class +INFO: Loading Class: javax/security/sasl/SaslServerFactory.class +INFO: Loading Class: javax/smartcardio/ATR.class +INFO: Loading Class: javax/smartcardio/Card.class +INFO: Loading Class: javax/smartcardio/CardChannel.class +INFO: Loading Class: javax/smartcardio/CardException.class +INFO: Loading Class: javax/smartcardio/CardNotPresentException.class +INFO: Loading Class: javax/smartcardio/CardPermission.class +INFO: Loading Class: javax/smartcardio/CardTerminal.class +INFO: Loading Class: javax/smartcardio/CardTerminals$State.class +INFO: Loading Class: javax/smartcardio/CardTerminals.class +INFO: Loading Class: javax/smartcardio/CommandAPDU.class +INFO: Loading Class: javax/smartcardio/ResponseAPDU.class +INFO: Loading Class: javax/smartcardio/TerminalFactory$NoneCardTerminals.class +INFO: Loading Class: javax/smartcardio/TerminalFactory$NoneFactorySpi.class +INFO: Loading Class: javax/smartcardio/TerminalFactory$NoneProvider.class +INFO: Loading Class: javax/smartcardio/TerminalFactory.class +INFO: Loading Class: javax/smartcardio/TerminalFactorySpi.class +INFO: Loading Class: javax/sound/midi/ControllerEventListener.class +INFO: Loading Class: javax/sound/midi/Instrument.class +INFO: Loading Class: javax/sound/midi/InvalidMidiDataException.class +INFO: Loading Class: javax/sound/midi/MetaEventListener.class +INFO: Loading Class: javax/sound/midi/MetaMessage.class +INFO: Loading Class: javax/sound/midi/MidiChannel.class +INFO: Loading Class: javax/sound/midi/MidiDevice$Info.class +INFO: Loading Class: javax/sound/midi/MidiDevice.class +INFO: Loading Class: javax/sound/midi/MidiDeviceReceiver.class +INFO: Loading Class: javax/sound/midi/MidiDeviceTransmitter.class +INFO: Loading Class: javax/sound/midi/MidiEvent.class +INFO: Loading Class: javax/sound/midi/MidiFileFormat.class +INFO: Loading Class: javax/sound/midi/MidiMessage.class +INFO: Loading Class: javax/sound/midi/MidiSystem.class +INFO: Loading Class: javax/sound/midi/MidiUnavailableException.class +INFO: Loading Class: javax/sound/midi/Patch.class +INFO: Loading Class: javax/sound/midi/Receiver.class +INFO: Loading Class: javax/sound/midi/Sequence.class +INFO: Loading Class: javax/sound/midi/Sequencer$SyncMode.class +INFO: Loading Class: javax/sound/midi/Sequencer.class +INFO: Loading Class: javax/sound/midi/ShortMessage.class +INFO: Loading Class: javax/sound/midi/Soundbank.class +INFO: Loading Class: javax/sound/midi/SoundbankResource.class +INFO: Loading Class: javax/sound/midi/Synthesizer.class +INFO: Loading Class: javax/sound/midi/SysexMessage.class +INFO: Loading Class: javax/sound/midi/Track$1.class +INFO: Loading Class: javax/sound/midi/Track$ImmutableEndOfTrack.class +INFO: Loading Class: javax/sound/midi/Track.class +INFO: Loading Class: javax/sound/midi/Transmitter.class +INFO: Loading Class: javax/sound/midi/VoiceStatus.class +INFO: Loading Class: javax/sound/midi/spi/MidiDeviceProvider.class +INFO: Loading Class: javax/sound/midi/spi/MidiFileReader.class +INFO: Loading Class: javax/sound/midi/spi/MidiFileWriter.class +INFO: Loading Class: javax/sound/midi/spi/SoundbankReader.class +INFO: Loading Class: javax/sound/sampled/AudioFileFormat$Type.class +INFO: Loading Class: javax/sound/sampled/AudioFileFormat.class +INFO: Loading Class: javax/sound/sampled/AudioFormat$Encoding.class +INFO: Loading Class: javax/sound/sampled/AudioFormat.class +INFO: Loading Class: javax/sound/sampled/AudioInputStream$TargetDataLineInputStream.class +INFO: Loading Class: javax/sound/sampled/AudioInputStream.class +INFO: Loading Class: javax/sound/sampled/AudioPermission.class +INFO: Loading Class: javax/sound/sampled/AudioSystem.class +INFO: Loading Class: javax/sound/sampled/BooleanControl$Type.class +INFO: Loading Class: javax/sound/sampled/BooleanControl.class +INFO: Loading Class: javax/sound/sampled/Clip.class +INFO: Loading Class: javax/sound/sampled/CompoundControl$Type.class +INFO: Loading Class: javax/sound/sampled/CompoundControl.class +INFO: Loading Class: javax/sound/sampled/Control$Type.class +INFO: Loading Class: javax/sound/sampled/Control.class +INFO: Loading Class: javax/sound/sampled/DataLine$Info.class +INFO: Loading Class: javax/sound/sampled/DataLine.class +INFO: Loading Class: javax/sound/sampled/EnumControl$Type.class +INFO: Loading Class: javax/sound/sampled/EnumControl.class +INFO: Loading Class: javax/sound/sampled/FloatControl$Type.class +INFO: Loading Class: javax/sound/sampled/FloatControl.class +INFO: Loading Class: javax/sound/sampled/Line$Info.class +INFO: Loading Class: javax/sound/sampled/Line.class +INFO: Loading Class: javax/sound/sampled/LineEvent$Type.class +INFO: Loading Class: javax/sound/sampled/LineEvent.class +INFO: Loading Class: javax/sound/sampled/LineListener.class +INFO: Loading Class: javax/sound/sampled/LineUnavailableException.class +INFO: Loading Class: javax/sound/sampled/Mixer$Info.class +INFO: Loading Class: javax/sound/sampled/Mixer.class +INFO: Loading Class: javax/sound/sampled/Port$Info.class +INFO: Loading Class: javax/sound/sampled/Port.class +INFO: Loading Class: javax/sound/sampled/ReverbType.class +INFO: Loading Class: javax/sound/sampled/SourceDataLine.class +INFO: Loading Class: javax/sound/sampled/TargetDataLine.class +INFO: Loading Class: javax/sound/sampled/UnsupportedAudioFileException.class +INFO: Loading Class: javax/sound/sampled/spi/AudioFileReader.class +INFO: Loading Class: javax/sound/sampled/spi/AudioFileWriter.class +INFO: Loading Class: javax/sound/sampled/spi/FormatConversionProvider.class +INFO: Loading Class: javax/sound/sampled/spi/MixerProvider.class +INFO: Loading Class: javax/sql/CommonDataSource.class +INFO: Loading Class: javax/sql/ConnectionEvent.class +INFO: Loading Class: javax/sql/ConnectionEventListener.class +INFO: Loading Class: javax/sql/ConnectionPoolDataSource.class +INFO: Loading Class: javax/sql/DataSource.class +INFO: Loading Class: javax/sql/PooledConnection.class +INFO: Loading Class: javax/sql/RowSet.class +INFO: Loading Class: javax/sql/RowSetEvent.class +INFO: Loading Class: javax/sql/RowSetInternal.class +INFO: Loading Class: javax/sql/RowSetListener.class +INFO: Loading Class: javax/sql/RowSetMetaData.class +INFO: Loading Class: javax/sql/RowSetReader.class +INFO: Loading Class: javax/sql/RowSetWriter.class +INFO: Loading Class: javax/sql/StatementEvent.class +INFO: Loading Class: javax/sql/StatementEventListener.class +INFO: Loading Class: javax/sql/XAConnection.class +INFO: Loading Class: javax/sql/XADataSource.class +INFO: Loading Class: javax/sql/rowset/BaseRowSet.class +INFO: Loading Class: javax/sql/rowset/CachedRowSet.class +INFO: Loading Class: javax/sql/rowset/FilteredRowSet.class +INFO: Loading Class: javax/sql/rowset/JdbcRowSet.class +INFO: Loading Class: javax/sql/rowset/JoinRowSet.class +INFO: Loading Class: javax/sql/rowset/Joinable.class +INFO: Loading Class: javax/sql/rowset/Predicate.class +INFO: Loading Class: javax/sql/rowset/RowSetFactory.class +INFO: Loading Class: javax/sql/rowset/RowSetMetaDataImpl$1.class +INFO: Loading Class: javax/sql/rowset/RowSetMetaDataImpl$ColInfo.class +INFO: Loading Class: javax/sql/rowset/RowSetMetaDataImpl.class +INFO: Loading Class: javax/sql/rowset/RowSetProvider$1.class +INFO: Loading Class: javax/sql/rowset/RowSetProvider$2.class +INFO: Loading Class: javax/sql/rowset/RowSetProvider.class +INFO: Loading Class: javax/sql/rowset/RowSetWarning.class +INFO: Loading Class: javax/sql/rowset/WebRowSet.class +INFO: Loading Class: javax/sql/rowset/serial/SQLInputImpl.class +INFO: Loading Class: javax/sql/rowset/serial/SQLOutputImpl.class +INFO: Loading Class: javax/sql/rowset/serial/SerialArray.class +INFO: Loading Class: javax/sql/rowset/serial/SerialBlob.class +INFO: Loading Class: javax/sql/rowset/serial/SerialClob.class +INFO: Loading Class: javax/sql/rowset/serial/SerialDatalink.class +INFO: Loading Class: javax/sql/rowset/serial/SerialException.class +INFO: Loading Class: javax/sql/rowset/serial/SerialJavaObject.class +INFO: Loading Class: javax/sql/rowset/serial/SerialRef.class +INFO: Loading Class: javax/sql/rowset/serial/SerialStruct.class +INFO: Loading Class: javax/sql/rowset/spi/ProviderImpl.class +INFO: Loading Class: javax/sql/rowset/spi/SyncFactory$1.class +INFO: Loading Class: javax/sql/rowset/spi/SyncFactory$2.class +INFO: Loading Class: javax/sql/rowset/spi/SyncFactory$SyncFactoryHolder.class +INFO: Loading Class: javax/sql/rowset/spi/SyncFactory.class +INFO: Loading Class: javax/sql/rowset/spi/SyncFactoryException.class +INFO: Loading Class: javax/sql/rowset/spi/SyncProvider.class +INFO: Loading Class: javax/sql/rowset/spi/SyncProviderException.class +INFO: Loading Class: javax/sql/rowset/spi/SyncResolver.class +INFO: Loading Class: javax/sql/rowset/spi/TransactionalWriter.class +INFO: Loading Class: javax/sql/rowset/spi/XmlReader.class +INFO: Loading Class: javax/sql/rowset/spi/XmlWriter.class +INFO: Loading Class: javax/swing/AbstractButton$AccessibleAbstractButton$ButtonKeyBinding.class +INFO: Loading Class: javax/swing/AbstractButton$AccessibleAbstractButton.class +INFO: Loading Class: javax/swing/AbstractButton$ButtonActionPropertyChangeListener.class +INFO: Loading Class: javax/swing/AbstractButton$ButtonChangeListener.class +INFO: Loading Class: javax/swing/AbstractCellEditor.class +INFO: Loading Class: javax/swing/AbstractSpinnerModel.class +INFO: Loading Class: javax/swing/ActionPropertyChangeListener$OwnedWeakReference.class +INFO: Loading Class: javax/swing/ActionPropertyChangeListener.class +INFO: Loading Class: javax/swing/Box$AccessibleBox.class +INFO: Loading Class: javax/swing/Box$Filler$AccessibleBoxFiller.class +INFO: Loading Class: javax/swing/BufferStrategyPaintManager$1.class +INFO: Loading Class: javax/swing/BufferStrategyPaintManager$2.class +INFO: Loading Class: javax/swing/BufferStrategyPaintManager$3.class +INFO: Loading Class: javax/swing/BufferStrategyPaintManager$BufferInfo.class +INFO: Loading Class: javax/swing/BufferStrategyPaintManager.class +INFO: Loading Class: javax/swing/CellEditor.class +INFO: Loading Class: javax/swing/CellRendererPane$AccessibleCellRendererPane.class +INFO: Loading Class: javax/swing/ColorChooserDialog$1.class +INFO: Loading Class: javax/swing/ColorChooserDialog$2.class +INFO: Loading Class: javax/swing/ColorChooserDialog$3.class +INFO: Loading Class: javax/swing/ColorChooserDialog$4.class +INFO: Loading Class: javax/swing/ColorChooserDialog$Closer.class +INFO: Loading Class: javax/swing/ColorChooserDialog$DisposeOnClose.class +INFO: Loading Class: javax/swing/ColorChooserDialog.class +INFO: Loading Class: javax/swing/ColorTracker.class +INFO: Loading Class: javax/swing/CompareTabOrderComparator.class +INFO: Loading Class: javax/swing/DebugGraphics.class +INFO: Loading Class: javax/swing/DebugGraphicsFilter.class +INFO: Loading Class: javax/swing/DebugGraphicsInfo.class +INFO: Loading Class: javax/swing/DebugGraphicsObserver.class +INFO: Loading Class: javax/swing/DefaultCellEditor$1.class +INFO: Loading Class: javax/swing/DefaultCellEditor$2.class +INFO: Loading Class: javax/swing/DefaultCellEditor$3.class +INFO: Loading Class: javax/swing/DefaultCellEditor$EditorDelegate.class +INFO: Loading Class: javax/swing/DefaultCellEditor.class +INFO: Loading Class: javax/swing/DefaultDesktopManager$1.class +INFO: Loading Class: javax/swing/DefaultDesktopManager.class +INFO: Loading Class: javax/swing/DefaultFocusManager.class +INFO: Loading Class: javax/swing/DefaultListModel.class +INFO: Loading Class: javax/swing/DefaultRowSorter$1.class +INFO: Loading Class: javax/swing/DefaultRowSorter$FilterEntry.class +INFO: Loading Class: javax/swing/DefaultRowSorter$ModelWrapper.class +INFO: Loading Class: javax/swing/DefaultRowSorter$Row.class +INFO: Loading Class: javax/swing/DefaultRowSorter.class +INFO: Loading Class: javax/swing/DelegatingDefaultFocusManager.class +INFO: Loading Class: javax/swing/DesktopManager.class +INFO: Loading Class: javax/swing/GraphicsWrapper.class +INFO: Loading Class: javax/swing/GroupLayout$1.class +INFO: Loading Class: javax/swing/GroupLayout$Alignment.class +INFO: Loading Class: javax/swing/GroupLayout$AutoPreferredGapMatch.class +INFO: Loading Class: javax/swing/GroupLayout$AutoPreferredGapSpring.class +INFO: Loading Class: javax/swing/GroupLayout$BaselineGroup.class +INFO: Loading Class: javax/swing/GroupLayout$ComponentInfo.class +INFO: Loading Class: javax/swing/GroupLayout$ComponentSpring.class +INFO: Loading Class: javax/swing/GroupLayout$ContainerAutoPreferredGapSpring.class +INFO: Loading Class: javax/swing/GroupLayout$GapSpring.class +INFO: Loading Class: javax/swing/GroupLayout$Group.class +INFO: Loading Class: javax/swing/GroupLayout$LinkInfo.class +INFO: Loading Class: javax/swing/GroupLayout$ParallelGroup.class +INFO: Loading Class: javax/swing/GroupLayout$PreferredGapSpring.class +INFO: Loading Class: javax/swing/GroupLayout$SequentialGroup.class +INFO: Loading Class: javax/swing/GroupLayout$Spring.class +INFO: Loading Class: javax/swing/GroupLayout$SpringDelta.class +INFO: Loading Class: javax/swing/GroupLayout.class +INFO: Loading Class: javax/swing/ImageIcon$AccessibleImageIcon.class +INFO: Loading Class: javax/swing/InputVerifier.class +INFO: Loading Class: javax/swing/JApplet$AccessibleJApplet.class +INFO: Loading Class: javax/swing/JApplet.class +INFO: Loading Class: javax/swing/JButton$AccessibleJButton.class +INFO: Loading Class: javax/swing/JCheckBox$AccessibleJCheckBox.class +INFO: Loading Class: javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem.class +INFO: Loading Class: javax/swing/JColorChooser$AccessibleJColorChooser.class +INFO: Loading Class: javax/swing/JColorChooser.class +INFO: Loading Class: javax/swing/JComboBox$AccessibleJComboBox$AccessibleEditor.class +INFO: Loading Class: javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxListSelectionListener.class +INFO: Loading Class: javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPopupMenuListener.class +INFO: Loading Class: javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPropertyChangeListener.class +INFO: Loading Class: javax/swing/JComboBox$AccessibleJComboBox$EditorAccessibleContext.class +INFO: Loading Class: javax/swing/JComboBox$AccessibleJComboBox.class +INFO: Loading Class: javax/swing/JComboBox$ComboBoxActionPropertyChangeListener.class +INFO: Loading Class: javax/swing/JComboBox$DefaultKeySelectionManager.class +INFO: Loading Class: javax/swing/JComponent$AccessibleJComponent$AccessibleContainerHandler.class +INFO: Loading Class: javax/swing/JComponent$AccessibleJComponent$AccessibleFocusHandler.class +INFO: Loading Class: javax/swing/JComponent$AccessibleJComponent.class +INFO: Loading Class: javax/swing/JComponent$ActionStandin.class +INFO: Loading Class: javax/swing/JComponent$IntVector.class +INFO: Loading Class: javax/swing/JComponent$KeyboardState.class +INFO: Loading Class: javax/swing/JComponent$ReadObjectCallback.class +INFO: Loading Class: javax/swing/JDesktopPane$1.class +INFO: Loading Class: javax/swing/JDesktopPane$AccessibleJDesktopPane.class +INFO: Loading Class: javax/swing/JDesktopPane$ComponentPosition.class +INFO: Loading Class: javax/swing/JDesktopPane.class +INFO: Loading Class: javax/swing/JDialog$AccessibleJDialog.class +INFO: Loading Class: javax/swing/JEditorPane$1.class +INFO: Loading Class: javax/swing/JEditorPane$2.class +INFO: Loading Class: javax/swing/JEditorPane$3.class +INFO: Loading Class: javax/swing/JEditorPane$AccessibleJEditorPane.class +INFO: Loading Class: javax/swing/JEditorPane$AccessibleJEditorPaneHTML.class +INFO: Loading Class: javax/swing/JEditorPane$HeaderParser.class +INFO: Loading Class: javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport$1.class +INFO: Loading Class: javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink.class +INFO: Loading Class: javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport$LinkVector.class +INFO: Loading Class: javax/swing/JEditorPane$JEditorPaneAccessibleHypertextSupport.class +INFO: Loading Class: javax/swing/JEditorPane$PageLoader$1.class +INFO: Loading Class: javax/swing/JEditorPane$PageLoader$2.class +INFO: Loading Class: javax/swing/JEditorPane$PageLoader$3.class +INFO: Loading Class: javax/swing/JEditorPane$PageLoader.class +INFO: Loading Class: javax/swing/JEditorPane$PlainEditorKit$PlainParagraph$LogicalView.class +INFO: Loading Class: javax/swing/JEditorPane$PlainEditorKit$PlainParagraph.class +INFO: Loading Class: javax/swing/JEditorPane$PlainEditorKit.class +INFO: Loading Class: javax/swing/JFileChooser$1.class +INFO: Loading Class: javax/swing/JFileChooser$2.class +INFO: Loading Class: javax/swing/JFileChooser$AccessibleJFileChooser.class +INFO: Loading Class: javax/swing/JFileChooser$WeakPCL.class +INFO: Loading Class: javax/swing/JFileChooser.class +INFO: Loading Class: javax/swing/JFormattedTextField$1.class +INFO: Loading Class: javax/swing/JFormattedTextField$AbstractFormatter.class +INFO: Loading Class: javax/swing/JFormattedTextField$AbstractFormatterFactory.class +INFO: Loading Class: javax/swing/JFormattedTextField$CancelAction.class +INFO: Loading Class: javax/swing/JFormattedTextField$CommitAction.class +INFO: Loading Class: javax/swing/JFormattedTextField$DocumentHandler.class +INFO: Loading Class: javax/swing/JFormattedTextField$FocusLostHandler.class +INFO: Loading Class: javax/swing/JFormattedTextField.class +INFO: Loading Class: javax/swing/JFrame$AccessibleJFrame.class +INFO: Loading Class: javax/swing/JInternalFrame$1.class +INFO: Loading Class: javax/swing/JInternalFrame$AccessibleJInternalFrame.class +INFO: Loading Class: javax/swing/JInternalFrame$FocusPropertyChangeListener.class +INFO: Loading Class: javax/swing/JInternalFrame$JDesktopIcon$AccessibleJDesktopIcon.class +INFO: Loading Class: javax/swing/JInternalFrame$JDesktopIcon.class +INFO: Loading Class: javax/swing/JLabel$AccessibleJLabel$LabelKeyBinding.class +INFO: Loading Class: javax/swing/JLabel$AccessibleJLabel.class +INFO: Loading Class: javax/swing/JLayer$1.class +INFO: Loading Class: javax/swing/JLayer$DefaultLayerGlassPane.class +INFO: Loading Class: javax/swing/JLayer$LayerEventController$1.class +INFO: Loading Class: javax/swing/JLayer$LayerEventController$2.class +INFO: Loading Class: javax/swing/JLayer$LayerEventController.class +INFO: Loading Class: javax/swing/JLayeredPane$AccessibleJLayeredPane.class +INFO: Loading Class: javax/swing/JList$1.class +INFO: Loading Class: javax/swing/JList$2.class +INFO: Loading Class: javax/swing/JList$3.class +INFO: Loading Class: javax/swing/JList$4.class +INFO: Loading Class: javax/swing/JList$5.class +INFO: Loading Class: javax/swing/JList$6.class +INFO: Loading Class: javax/swing/JList$AccessibleJList$AccessibleJListChild.class +INFO: Loading Class: javax/swing/JList$AccessibleJList.class +INFO: Loading Class: javax/swing/JList$DropLocation.class +INFO: Loading Class: javax/swing/JList$ListSelectionHandler.class +INFO: Loading Class: javax/swing/JMenu$1.class +INFO: Loading Class: javax/swing/JMenu$AccessibleJMenu.class +INFO: Loading Class: javax/swing/JMenuBar$AccessibleJMenuBar.class +INFO: Loading Class: javax/swing/JMenuItem$1.class +INFO: Loading Class: javax/swing/JMenuItem$AccessibleJMenuItem.class +INFO: Loading Class: javax/swing/JOptionPane$1.class +INFO: Loading Class: javax/swing/JOptionPane$2.class +INFO: Loading Class: javax/swing/JOptionPane$3.class +INFO: Loading Class: javax/swing/JOptionPane$4.class +INFO: Loading Class: javax/swing/JOptionPane$5.class +INFO: Loading Class: javax/swing/JOptionPane$AccessibleJOptionPane.class +INFO: Loading Class: javax/swing/JOptionPane$ModalPrivilegedAction.class +INFO: Loading Class: javax/swing/JOptionPane.class +INFO: Loading Class: javax/swing/JPanel$AccessibleJPanel.class +INFO: Loading Class: javax/swing/JPasswordField$AccessibleJPasswordField.class +INFO: Loading Class: javax/swing/JPopupMenu$1.class +INFO: Loading Class: javax/swing/JPopupMenu$AccessibleJPopupMenu.class +INFO: Loading Class: javax/swing/JProgressBar$1.class +INFO: Loading Class: javax/swing/JProgressBar$AccessibleJProgressBar.class +INFO: Loading Class: javax/swing/JProgressBar$ModelListener.class +INFO: Loading Class: javax/swing/JProgressBar.class +INFO: Loading Class: javax/swing/JRadioButton$AccessibleJRadioButton.class +INFO: Loading Class: javax/swing/JRadioButtonMenuItem$AccessibleJRadioButtonMenuItem.class +INFO: Loading Class: javax/swing/JRootPane$AccessibleJRootPane.class +INFO: Loading Class: javax/swing/JRootPane$DefaultAction.class +INFO: Loading Class: javax/swing/JScrollBar$1.class +INFO: Loading Class: javax/swing/JScrollBar$AccessibleJScrollBar.class +INFO: Loading Class: javax/swing/JScrollPane$AccessibleJScrollPane.class +INFO: Loading Class: javax/swing/JSeparator$AccessibleJSeparator.class +INFO: Loading Class: javax/swing/JSlider$1.class +INFO: Loading Class: javax/swing/JSlider$1SmartHashtable$LabelUIResource.class +INFO: Loading Class: javax/swing/JSlider$1SmartHashtable.class +INFO: Loading Class: javax/swing/JSlider$AccessibleJSlider.class +INFO: Loading Class: javax/swing/JSlider$ModelListener.class +INFO: Loading Class: javax/swing/JSlider.class +INFO: Loading Class: javax/swing/JSpinner$1.class +INFO: Loading Class: javax/swing/JSpinner$AccessibleJSpinner.class +INFO: Loading Class: javax/swing/JSpinner$DateEditor.class +INFO: Loading Class: javax/swing/JSpinner$DateEditorFormatter.class +INFO: Loading Class: javax/swing/JSpinner$DefaultEditor.class +INFO: Loading Class: javax/swing/JSpinner$DisabledAction.class +INFO: Loading Class: javax/swing/JSpinner$ListEditor$ListFormatter$Filter.class +INFO: Loading Class: javax/swing/JSpinner$ListEditor$ListFormatter.class +INFO: Loading Class: javax/swing/JSpinner$ListEditor.class +INFO: Loading Class: javax/swing/JSpinner$ModelListener.class +INFO: Loading Class: javax/swing/JSpinner$NumberEditor.class +INFO: Loading Class: javax/swing/JSpinner$NumberEditorFormatter.class +INFO: Loading Class: javax/swing/JSpinner.class +INFO: Loading Class: javax/swing/JSplitPane$AccessibleJSplitPane.class +INFO: Loading Class: javax/swing/JTabbedPane$AccessibleJTabbedPane.class +INFO: Loading Class: javax/swing/JTabbedPane$ModelListener.class +INFO: Loading Class: javax/swing/JTabbedPane$Page.class +INFO: Loading Class: javax/swing/JTabbedPane.class +INFO: Loading Class: javax/swing/JTable$1.class +INFO: Loading Class: javax/swing/JTable$2.class +INFO: Loading Class: javax/swing/JTable$3.class +INFO: Loading Class: javax/swing/JTable$4.class +INFO: Loading Class: javax/swing/JTable$5.class +INFO: Loading Class: javax/swing/JTable$6.class +INFO: Loading Class: javax/swing/JTable$7.class +INFO: Loading Class: javax/swing/JTable$AccessibleJTable$AccessibleJTableCell.class +INFO: Loading Class: javax/swing/JTable$AccessibleJTable$AccessibleJTableHeaderCell.class +INFO: Loading Class: javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange.class +INFO: Loading Class: javax/swing/JTable$AccessibleJTable$AccessibleTableHeader.class +INFO: Loading Class: javax/swing/JTable$AccessibleJTable.class +INFO: Loading Class: javax/swing/JTable$BooleanEditor.class +INFO: Loading Class: javax/swing/JTable$BooleanRenderer.class +INFO: Loading Class: javax/swing/JTable$CellEditorRemover.class +INFO: Loading Class: javax/swing/JTable$DateRenderer.class +INFO: Loading Class: javax/swing/JTable$DoubleRenderer.class +INFO: Loading Class: javax/swing/JTable$DropLocation.class +INFO: Loading Class: javax/swing/JTable$GenericEditor.class +INFO: Loading Class: javax/swing/JTable$IconRenderer.class +INFO: Loading Class: javax/swing/JTable$ModelChange.class +INFO: Loading Class: javax/swing/JTable$NumberEditor.class +INFO: Loading Class: javax/swing/JTable$NumberRenderer.class +INFO: Loading Class: javax/swing/JTable$PrintMode.class +INFO: Loading Class: javax/swing/JTable$Resizable2.class +INFO: Loading Class: javax/swing/JTable$Resizable3.class +INFO: Loading Class: javax/swing/JTable$SortManager.class +INFO: Loading Class: javax/swing/JTable$ThreadSafePrintable$1.class +INFO: Loading Class: javax/swing/JTable$ThreadSafePrintable.class +INFO: Loading Class: javax/swing/JTable.class +INFO: Loading Class: javax/swing/JTextArea$AccessibleJTextArea.class +INFO: Loading Class: javax/swing/JTextField$AccessibleJTextField.class +INFO: Loading Class: javax/swing/JTextField$TextFieldActionPropertyChangeListener.class +INFO: Loading Class: javax/swing/JTextPane.class +INFO: Loading Class: javax/swing/JToggleButton$AccessibleJToggleButton.class +INFO: Loading Class: javax/swing/JToolBar$1.class +INFO: Loading Class: javax/swing/JToolBar$AccessibleJToolBar.class +INFO: Loading Class: javax/swing/JToolTip$AccessibleJToolTip.class +INFO: Loading Class: javax/swing/JToolTip.class +INFO: Loading Class: javax/swing/JTree$1.class +INFO: Loading Class: javax/swing/JTree$AccessibleJTree$AccessibleJTreeNode.class +INFO: Loading Class: javax/swing/JTree$AccessibleJTree.class +INFO: Loading Class: javax/swing/JTree$DropLocation.class +INFO: Loading Class: javax/swing/JTree$DynamicUtilTreeNode.class +INFO: Loading Class: javax/swing/JTree$EmptySelectionModel.class +INFO: Loading Class: javax/swing/JTree$TreeModelHandler.class +INFO: Loading Class: javax/swing/JTree$TreeSelectionRedirector.class +INFO: Loading Class: javax/swing/JTree$TreeTimer.class +INFO: Loading Class: javax/swing/JTree.class +INFO: Loading Class: javax/swing/JViewport$1.class +INFO: Loading Class: javax/swing/JViewport$AccessibleJViewport.class +INFO: Loading Class: javax/swing/JWindow$AccessibleJWindow.class +INFO: Loading Class: javax/swing/LayoutStyle$ComponentPlacement.class +INFO: Loading Class: javax/swing/LayoutStyle.class +INFO: Loading Class: javax/swing/LegacyGlueFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/LegacyLayoutFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/MultiUIDefaults$1.class +INFO: Loading Class: javax/swing/MultiUIDefaults$MultiUIDefaultsEnumerator$Type.class +INFO: Loading Class: javax/swing/MultiUIDefaults$MultiUIDefaultsEnumerator.class +INFO: Loading Class: javax/swing/OverlayLayout.class +INFO: Loading Class: javax/swing/Painter.class +INFO: Loading Class: javax/swing/Popup$DefaultFrame.class +INFO: Loading Class: javax/swing/Popup$HeavyWeightWindow.class +INFO: Loading Class: javax/swing/Popup.class +INFO: Loading Class: javax/swing/PopupFactory$1.class +INFO: Loading Class: javax/swing/PopupFactory$ContainerPopup.class +INFO: Loading Class: javax/swing/PopupFactory$HeadlessPopup.class +INFO: Loading Class: javax/swing/PopupFactory$HeavyWeightPopup$1.class +INFO: Loading Class: javax/swing/PopupFactory$HeavyWeightPopup.class +INFO: Loading Class: javax/swing/PopupFactory$LightWeightPopup.class +INFO: Loading Class: javax/swing/PopupFactory$MediumWeightPopup$MediumWeightComponent.class +INFO: Loading Class: javax/swing/PopupFactory$MediumWeightPopup.class +INFO: Loading Class: javax/swing/ProgressMonitor$AccessibleProgressMonitor.class +INFO: Loading Class: javax/swing/ProgressMonitor$ProgressOptionPane$1.class +INFO: Loading Class: javax/swing/ProgressMonitor$ProgressOptionPane$2.class +INFO: Loading Class: javax/swing/ProgressMonitor$ProgressOptionPane.class +INFO: Loading Class: javax/swing/ProgressMonitor.class +INFO: Loading Class: javax/swing/ProgressMonitorInputStream.class +INFO: Loading Class: javax/swing/Renderer.class +INFO: Loading Class: javax/swing/RepaintManager$1.class +INFO: Loading Class: javax/swing/RepaintManager$2$1.class +INFO: Loading Class: javax/swing/RepaintManager$4.class +INFO: Loading Class: javax/swing/RepaintManager$DisplayChangedRunnable.class +INFO: Loading Class: javax/swing/RepaintManager$DoubleBufferInfo.class +INFO: Loading Class: javax/swing/RowFilter$1.class +INFO: Loading Class: javax/swing/RowFilter$AndFilter.class +INFO: Loading Class: javax/swing/RowFilter$ComparisonType.class +INFO: Loading Class: javax/swing/RowFilter$DateFilter.class +INFO: Loading Class: javax/swing/RowFilter$Entry.class +INFO: Loading Class: javax/swing/RowFilter$GeneralFilter.class +INFO: Loading Class: javax/swing/RowFilter$NotFilter.class +INFO: Loading Class: javax/swing/RowFilter$NumberFilter.class +INFO: Loading Class: javax/swing/RowFilter$OrFilter.class +INFO: Loading Class: javax/swing/RowFilter$RegexFilter.class +INFO: Loading Class: javax/swing/RowFilter.class +INFO: Loading Class: javax/swing/RowSorter$SortKey.class +INFO: Loading Class: javax/swing/RowSorter.class +INFO: Loading Class: javax/swing/SizeSequence.class +INFO: Loading Class: javax/swing/SortOrder.class +INFO: Loading Class: javax/swing/SortingFocusTraversalPolicy$1.class +INFO: Loading Class: javax/swing/SpinnerDateModel.class +INFO: Loading Class: javax/swing/SpinnerListModel.class +INFO: Loading Class: javax/swing/SpinnerModel.class +INFO: Loading Class: javax/swing/SpinnerNumberModel.class +INFO: Loading Class: javax/swing/Spring$1.class +INFO: Loading Class: javax/swing/Spring$AbstractSpring.class +INFO: Loading Class: javax/swing/Spring$CompoundSpring.class +INFO: Loading Class: javax/swing/Spring$HeightSpring.class +INFO: Loading Class: javax/swing/Spring$MaxSpring.class +INFO: Loading Class: javax/swing/Spring$NegativeSpring.class +INFO: Loading Class: javax/swing/Spring$ScaleSpring.class +INFO: Loading Class: javax/swing/Spring$SpringMap.class +INFO: Loading Class: javax/swing/Spring$StaticSpring.class +INFO: Loading Class: javax/swing/Spring$SumSpring.class +INFO: Loading Class: javax/swing/Spring$WidthSpring.class +INFO: Loading Class: javax/swing/Spring.class +INFO: Loading Class: javax/swing/SpringLayout$1.class +INFO: Loading Class: javax/swing/SpringLayout$Constraints$1.class +INFO: Loading Class: javax/swing/SpringLayout$Constraints$2.class +INFO: Loading Class: javax/swing/SpringLayout$Constraints.class +INFO: Loading Class: javax/swing/SpringLayout$SpringProxy.class +INFO: Loading Class: javax/swing/SpringLayout.class +INFO: Loading Class: javax/swing/SwingWorker$1.class +INFO: Loading Class: javax/swing/SwingWorker$2.class +INFO: Loading Class: javax/swing/SwingWorker$3.class +INFO: Loading Class: javax/swing/SwingWorker$4.class +INFO: Loading Class: javax/swing/SwingWorker$5.class +INFO: Loading Class: javax/swing/SwingWorker$6.class +INFO: Loading Class: javax/swing/SwingWorker$7$1.class +INFO: Loading Class: javax/swing/SwingWorker$7.class +INFO: Loading Class: javax/swing/SwingWorker$DoSubmitAccumulativeRunnable.class +INFO: Loading Class: javax/swing/SwingWorker$StateValue.class +INFO: Loading Class: javax/swing/SwingWorker$SwingWorkerPropertyChangeSupport$1.class +INFO: Loading Class: javax/swing/SwingWorker$SwingWorkerPropertyChangeSupport.class +INFO: Loading Class: javax/swing/SwingWorker.class +INFO: Loading Class: javax/swing/TablePrintable.class +INFO: Loading Class: javax/swing/Timer$1.class +INFO: Loading Class: javax/swing/ToolTipManager$1.class +INFO: Loading Class: javax/swing/TransferHandler$1.class +INFO: Loading Class: javax/swing/TransferHandler$DragHandler.class +INFO: Loading Class: javax/swing/TransferHandler$DropLocation.class +INFO: Loading Class: javax/swing/TransferHandler$PropertyTransferable.class +INFO: Loading Class: javax/swing/TransferHandler$SwingDragGestureRecognizer.class +INFO: Loading Class: javax/swing/UIDefaults$1.class +INFO: Loading Class: javax/swing/UIDefaults$ProxyLazyValue$1.class +INFO: Loading Class: javax/swing/UIDefaults$ProxyLazyValue.class +INFO: Loading Class: javax/swing/UnsupportedLookAndFeelException.class +INFO: Loading Class: javax/swing/border/SoftBevelBorder.class +INFO: Loading Class: javax/swing/border/StrokeBorder.class +INFO: Loading Class: javax/swing/border/TitledBorder.class +INFO: Loading Class: javax/swing/colorchooser/AbstractColorChooserPanel$1.class +INFO: Loading Class: javax/swing/colorchooser/AbstractColorChooserPanel.class +INFO: Loading Class: javax/swing/colorchooser/CenterLayout.class +INFO: Loading Class: javax/swing/colorchooser/ColorChooserComponentFactory.class +INFO: Loading Class: javax/swing/colorchooser/ColorChooserPanel.class +INFO: Loading Class: javax/swing/colorchooser/ColorModel.class +INFO: Loading Class: javax/swing/colorchooser/ColorModelCMYK.class +INFO: Loading Class: javax/swing/colorchooser/ColorModelHSL.class +INFO: Loading Class: javax/swing/colorchooser/ColorModelHSV.class +INFO: Loading Class: javax/swing/colorchooser/ColorPanel.class +INFO: Loading Class: javax/swing/colorchooser/ColorSelectionModel.class +INFO: Loading Class: javax/swing/colorchooser/DefaultColorSelectionModel.class +INFO: Loading Class: javax/swing/colorchooser/DefaultPreviewPanel.class +INFO: Loading Class: javax/swing/colorchooser/DefaultSwatchChooserPanel$1.class +INFO: Loading Class: javax/swing/colorchooser/DefaultSwatchChooserPanel$MainSwatchKeyListener.class +INFO: Loading Class: javax/swing/colorchooser/DefaultSwatchChooserPanel$MainSwatchListener.class +INFO: Loading Class: javax/swing/colorchooser/DefaultSwatchChooserPanel$RecentSwatchKeyListener.class +INFO: Loading Class: javax/swing/colorchooser/DefaultSwatchChooserPanel$RecentSwatchListener.class +INFO: Loading Class: javax/swing/colorchooser/DefaultSwatchChooserPanel.class +INFO: Loading Class: javax/swing/colorchooser/DiagramComponent.class +INFO: Loading Class: javax/swing/colorchooser/MainSwatchPanel.class +INFO: Loading Class: javax/swing/colorchooser/RecentSwatchPanel.class +INFO: Loading Class: javax/swing/colorchooser/SlidingSpinner.class +INFO: Loading Class: javax/swing/colorchooser/SmartGridLayout.class +INFO: Loading Class: javax/swing/colorchooser/SwatchPanel$1.class +INFO: Loading Class: javax/swing/colorchooser/SwatchPanel$2.class +INFO: Loading Class: javax/swing/colorchooser/SwatchPanel.class +INFO: Loading Class: javax/swing/colorchooser/ValueFormatter$1.class +INFO: Loading Class: javax/swing/colorchooser/ValueFormatter.class +INFO: Loading Class: javax/swing/event/CellEditorListener.class +INFO: Loading Class: javax/swing/event/HyperlinkEvent$EventType.class +INFO: Loading Class: javax/swing/event/HyperlinkEvent.class +INFO: Loading Class: javax/swing/event/HyperlinkListener.class +INFO: Loading Class: javax/swing/event/InternalFrameAdapter.class +INFO: Loading Class: javax/swing/event/InternalFrameEvent.class +INFO: Loading Class: javax/swing/event/InternalFrameListener.class +INFO: Loading Class: javax/swing/event/ListDataEvent.class +INFO: Loading Class: javax/swing/event/ListSelectionEvent.class +INFO: Loading Class: javax/swing/event/MenuDragMouseEvent.class +INFO: Loading Class: javax/swing/event/MenuKeyEvent.class +INFO: Loading Class: javax/swing/event/PopupMenuEvent.class +INFO: Loading Class: javax/swing/event/RowSorterEvent$Type.class +INFO: Loading Class: javax/swing/event/RowSorterEvent.class +INFO: Loading Class: javax/swing/event/RowSorterListener.class +INFO: Loading Class: javax/swing/event/SwingPropertyChangeSupport$1.class +INFO: Loading Class: javax/swing/event/SwingPropertyChangeSupport.class +INFO: Loading Class: javax/swing/event/TableColumnModelEvent.class +INFO: Loading Class: javax/swing/event/TableColumnModelListener.class +INFO: Loading Class: javax/swing/event/TableModelEvent.class +INFO: Loading Class: javax/swing/event/TableModelListener.class +INFO: Loading Class: javax/swing/event/TreeExpansionEvent.class +INFO: Loading Class: javax/swing/event/TreeExpansionListener.class +INFO: Loading Class: javax/swing/event/TreeModelEvent.class +INFO: Loading Class: javax/swing/event/TreeModelListener.class +INFO: Loading Class: javax/swing/event/TreeSelectionEvent.class +INFO: Loading Class: javax/swing/event/TreeSelectionListener.class +INFO: Loading Class: javax/swing/event/TreeWillExpandListener.class +INFO: Loading Class: javax/swing/filechooser/FileFilter.class +INFO: Loading Class: javax/swing/filechooser/FileNameExtensionFilter.class +INFO: Loading Class: javax/swing/filechooser/FileSystemView$1.class +INFO: Loading Class: javax/swing/filechooser/FileSystemView$FileSystemRoot.class +INFO: Loading Class: javax/swing/filechooser/FileSystemView.class +INFO: Loading Class: javax/swing/filechooser/FileView.class +INFO: Loading Class: javax/swing/filechooser/GenericFileSystemView.class +INFO: Loading Class: javax/swing/filechooser/UnixFileSystemView.class +INFO: Loading Class: javax/swing/filechooser/WindowsFileSystemView$1.class +INFO: Loading Class: javax/swing/filechooser/WindowsFileSystemView$2.class +INFO: Loading Class: javax/swing/filechooser/WindowsFileSystemView.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$BevelBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$CompoundBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$EtchedBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$MatteBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$TitledBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/ColorChooserUI.class +INFO: Loading Class: javax/swing/plaf/DesktopIconUI.class +INFO: Loading Class: javax/swing/plaf/DesktopPaneUI.class +INFO: Loading Class: javax/swing/plaf/FileChooserUI.class +INFO: Loading Class: javax/swing/plaf/InternalFrameUI.class +INFO: Loading Class: javax/swing/plaf/LayerUI.class +INFO: Loading Class: javax/swing/plaf/OptionPaneUI.class +INFO: Loading Class: javax/swing/plaf/ProgressBarUI.class +INFO: Loading Class: javax/swing/plaf/SliderUI.class +INFO: Loading Class: javax/swing/plaf/SpinnerUI.class +INFO: Loading Class: javax/swing/plaf/SplitPaneUI.class +INFO: Loading Class: javax/swing/plaf/TabbedPaneUI.class +INFO: Loading Class: javax/swing/plaf/TableHeaderUI.class +INFO: Loading Class: javax/swing/plaf/TableUI.class +INFO: Loading Class: javax/swing/plaf/ToolTipUI.class +INFO: Loading Class: javax/swing/plaf/TreeUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicArrowButton.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$FieldBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$MenuBarBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$SplitPaneBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$ToggleButtonBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders.class +INFO: Loading Class: javax/swing/plaf/basic/BasicButtonListener$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicCheckBoxMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicCheckBoxUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicColorChooserUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicColorChooserUI$ColorTransferHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicColorChooserUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicColorChooserUI$PropertyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicColorChooserUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxRenderer.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$ItemHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$KeyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$ListDataHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$AutoScrollActionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$InvocationKeyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$InvocationMouseHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$InvocationMouseMotionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$ItemHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$ListDataHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$ListMouseHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$ListMouseMotionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$ListSelectionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopIconUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopIconUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$BasicDesktopManager.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$CloseAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$MaximizeAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$MinimizeAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$NavigateAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI$OpenAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDesktopPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDirectoryModel$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDirectoryModel$DoChangeContents.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDirectoryModel$LoadFilesThread$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDirectoryModel$LoadFilesThread.class +INFO: Loading Class: javax/swing/plaf/basic/BasicDirectoryModel.class +INFO: Loading Class: javax/swing/plaf/basic/BasicEditorPaneUI$StyleSheetUIResource.class +INFO: Loading Class: javax/swing/plaf/basic/BasicEditorPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$AcceptAllFileFilter.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$ApproveSelectionAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$BasicFileView.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$CancelSelectionAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$ChangeToParentDirectoryAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$DoubleClickListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$FileTransferHandler$FileTransferable.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$FileTransferHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$GlobFilter.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$GoHomeAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$NewFolderAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$SelectionListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI$UpdateAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFileChooserUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicFormattedTextFieldUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicHTML$BasicDocument.class +INFO: Loading Class: javax/swing/plaf/basic/BasicHTML$BasicEditorKit.class +INFO: Loading Class: javax/swing/plaf/basic/BasicHTML$BasicHTMLViewFactory.class +INFO: Loading Class: javax/swing/plaf/basic/BasicHTML$Renderer.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$CheckBoxIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$CheckBoxMenuItemIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$EmptyFrameIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$MenuArrowIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$RadioButtonIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$RadioButtonMenuItemIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$CloseAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$IconifyAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$MaximizeAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$MoveAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$NoFocusButton.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$RestoreAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$ShowSystemMenuAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$SizeAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$SystemMenuBar.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane$TitlePaneLayout.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameTitlePane.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$BasicInternalFrameListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$BorderListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$ComponentHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$GlassPaneDispatcher.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$InternalFrameLayout.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI$InternalFramePropertyChangeListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicInternalFrameUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLabelUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$ListDataHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$ListSelectionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLookAndFeel$3.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLookAndFeel$AudioAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuBarUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuBarUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuItemUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuItemUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$2.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$ButtonActionListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$ButtonAreaLayout.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$ButtonFactory$ConstrainedButton.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$ButtonFactory.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$MultiplexingTextField.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicOptionPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPasswordFieldUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber$2.class +INFO: Loading Class: javax/swing/plaf/basic/BasicProgressBarUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicProgressBarUI$Animator.class +INFO: Loading Class: javax/swing/plaf/basic/BasicProgressBarUI$ChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicProgressBarUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicProgressBarUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonUI$ButtonGroupInfo.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonUI$SelectNextBtn.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonUI$SelectPreviousBtn.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRadioButtonUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRootPaneUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$ModelListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI$TrackListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollBarUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$VSBChangeListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$ViewportChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$ActionScroller.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$ChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$ComponentHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$ScrollListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$SharedActionScroller.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI$TrackListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSliderUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSpinnerUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSpinnerUI$ArrowButtonHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSpinnerUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSpinnerUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$2.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$DragController.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider$VerticalDragController.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneDivider.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardDownRightHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardEndHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardHomeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardResizeToggleHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$KeyboardUpLeftHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI$PropertyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSplitPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$CroppedEdge.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$MouseHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$ScrollableTabButton.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$ScrollableTabPanel.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$ScrollableTabSupport.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$ScrollableTabViewport.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$TabContainer.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$TabSelectionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTabbedPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableHeaderUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableHeaderUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableHeaderUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$KeyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI$TableTransferHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTableUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextAreaUI$PlainParagraph$LogicalView.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextAreaUI$PlainParagraph.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextFieldUI$I18nFieldView.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$BasicCaret.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$BasicHighlighter.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToggleButtonUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$1$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$1ToolBarDialog$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$1ToolBarDialog.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$2.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$DockingListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$DragWindow.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$FrameListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$PropertyListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$ToolBarContListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$ToolBarFocusListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolTipUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolTipUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolTipUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$Actions$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$Actions.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$CellEditorHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$ComponentHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$KeyHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$MouseHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$SelectionModelPropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeCancelEditingAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeExpansionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeHomeAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeIncrementAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeModelHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreePageAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeSelectionHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeToggleAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI$TreeTraverseAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTreeUI.class +INFO: Loading Class: javax/swing/plaf/basic/CenterLayout.class +INFO: Loading Class: javax/swing/plaf/basic/DragRecognitionSupport.class +INFO: Loading Class: javax/swing/plaf/metal/BumpBuffer.class +INFO: Loading Class: javax/swing/plaf/metal/DefaultMetalTheme$WindowsFontDelegate.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$ButtonBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$DialogBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$ErrorDialogBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$Flush3DBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$FrameBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$InternalFrameBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$MenuBarBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$MenuItemBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$OptionDialogBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$PaletteBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$PopupMenuBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$QuestionDialogBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$TableHeaderBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$TextFieldBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$ToolBarBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders$WarningDialogBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBorders.class +INFO: Loading Class: javax/swing/plaf/metal/MetalBumps.class +INFO: Loading Class: javax/swing/plaf/metal/MetalButtonUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalCheckBoxIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalCheckBoxUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxButton$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxButton.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxEditor$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxEditor$UIResource.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxEditor.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxUI$MetalComboPopup.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalComboBoxUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalDesktopIconUI$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalDesktopIconUI$TitleListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalDesktopIconUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$2.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$3.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$4.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$5.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$AlignedLabel.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$ButtonAreaLayout.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxAction.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxModel.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$DirectoryComboBoxRenderer.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$FileRenderer.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$FilterComboBoxModel.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$FilterComboBoxRenderer.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$IndentIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$MetalFileChooserUIAccessor.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI$SingleClickListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFileChooserUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalFontDesktopProperty.class +INFO: Loading Class: javax/swing/plaf/metal/MetalHighContrastTheme.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FileChooserDetailViewIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FileChooserHomeFolderIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FileChooserListViewIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FileChooserNewFolderIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FileChooserUpFolderIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FileIcon16.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$FolderIcon16.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$ImageCacher$ImageGcPair.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$ImageCacher.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$InternalFrameAltMaximizeIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$InternalFrameCloseIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$InternalFrameDefaultMenuIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$InternalFrameMaximizeIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$InternalFrameMinimizeIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$OceanHorizontalSliderThumbIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$OceanVerticalSliderThumbIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$PaletteCloseIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$TreeComputerIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$TreeControlIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$TreeFloppyDriveIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$TreeHardDriveIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$TreeLeafIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon.class +INFO: Loading Class: javax/swing/plaf/metal/MetalIconFactory.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameTitlePane$MetalPropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameTitlePane$MetalTitlePaneLayout.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameTitlePane.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameUI$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameUI$BorderListener1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameUI$MetalPropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/metal/MetalInternalFrameUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLabelUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLookAndFeel$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLookAndFeel$AATextListener$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLookAndFeel$AATextListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLookAndFeel$MetalLayoutStyle.class +INFO: Loading Class: javax/swing/plaf/metal/MetalMenuBarUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalPopupMenuSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalProgressBarUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalRadioButtonUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalRootPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalRootPaneUI$MetalRootLayout.class +INFO: Loading Class: javax/swing/plaf/metal/MetalRootPaneUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/metal/MetalRootPaneUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalScrollBarUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalScrollButton.class +INFO: Loading Class: javax/swing/plaf/metal/MetalScrollPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalScrollPaneUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSliderUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSplitPaneDivider$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSplitPaneDivider$2.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSplitPaneDivider$MetalDividerLayout.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSplitPaneDivider.class +INFO: Loading Class: javax/swing/plaf/metal/MetalSplitPaneUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTabbedPaneUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTextFieldUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$1.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$CloseAction.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$IconifyAction.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$MaximizeAction.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$RestoreAction.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$SystemMenuBar.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$TitlePaneLayout.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane$WindowHandler.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTitlePane.class +INFO: Loading Class: javax/swing/plaf/metal/MetalToggleButtonUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalToolBarUI$MetalContainerListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalToolBarUI$MetalRolloverListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalToolBarUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalToolTipUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTreeUI$LineListener.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTreeUI.class +INFO: Loading Class: javax/swing/plaf/metal/MetalUtils$GradientPainter.class +INFO: Loading Class: javax/swing/plaf/metal/MetalUtils$OceanDisabledButtonImageFilter.class +INFO: Loading Class: javax/swing/plaf/metal/MetalUtils$OceanToolBarImageFilter.class +INFO: Loading Class: javax/swing/plaf/metal/MetalUtils.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$1.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$2.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$3.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$4.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$5.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$6.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$COIcon.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme$IFIcon.class +INFO: Loading Class: javax/swing/plaf/metal/OceanTheme.class +INFO: Loading Class: javax/swing/plaf/multi/MultiButtonUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiColorChooserUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiComboBoxUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiDesktopIconUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiDesktopPaneUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiFileChooserUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiInternalFrameUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiLabelUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiListUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiLookAndFeel.class +INFO: Loading Class: javax/swing/plaf/multi/MultiMenuBarUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiOptionPaneUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiPanelUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiPopupMenuUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiProgressBarUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiRootPaneUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiScrollBarUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiScrollPaneUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiSliderUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiSpinnerUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiSplitPaneUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiTabbedPaneUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiTableHeaderUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiTableUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiTextUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiToolBarUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiToolTipUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiTreeUI.class +INFO: Loading Class: javax/swing/plaf/multi/MultiUIDefaults.class +INFO: Loading Class: javax/swing/plaf/multi/MultiViewportUI.class +INFO: Loading Class: javax/swing/plaf/nimbus/AbstractRegionPainter$PaintContext$CacheMode.class +INFO: Loading Class: javax/swing/plaf/nimbus/AbstractRegionPainter$PaintContext.class +INFO: Loading Class: javax/swing/plaf/nimbus/AbstractRegionPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ArrowButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/CheckBoxMenuItemPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/CheckBoxPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ComboBoxArrowButtonEditableState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ComboBoxArrowButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ComboBoxEditableState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ComboBoxPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ComboBoxTextFieldPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/DerivedColor$UIResource.class +INFO: Loading Class: javax/swing/plaf/nimbus/DerivedColor.class +INFO: Loading Class: javax/swing/plaf/nimbus/DesktopIconPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/DesktopPanePainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/DropShadowEffect.class +INFO: Loading Class: javax/swing/plaf/nimbus/EditorPanePainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/Effect$ArrayCache.class +INFO: Loading Class: javax/swing/plaf/nimbus/Effect$EffectType.class +INFO: Loading Class: javax/swing/plaf/nimbus/Effect.class +INFO: Loading Class: javax/swing/plaf/nimbus/EffectUtils.class +INFO: Loading Class: javax/swing/plaf/nimbus/FileChooserPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/FormattedTextFieldPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ImageCache$PixelCountSoftReference.class +INFO: Loading Class: javax/swing/plaf/nimbus/ImageCache.class +INFO: Loading Class: javax/swing/plaf/nimbus/ImageScalingHelper$PaintType.class +INFO: Loading Class: javax/swing/plaf/nimbus/ImageScalingHelper.class +INFO: Loading Class: javax/swing/plaf/nimbus/InnerGlowEffect.class +INFO: Loading Class: javax/swing/plaf/nimbus/InnerShadowEffect.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFramePainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneCloseButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneCloseButtonWindowNotFocusedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneIconifyButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneIconifyButtonWindowNotFocusedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneMaximizeButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneMaximizeButtonWindowMaximizedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneMaximizeButtonWindowNotFocusedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneMenuButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneMenuButtonWindowNotFocusedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameTitlePaneWindowFocusedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/InternalFrameWindowFocusedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/LoweredBorder.class +INFO: Loading Class: javax/swing/plaf/nimbus/MenuBarMenuPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/MenuBarPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/MenuItemPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/MenuPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$1.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$ColorTree$Node.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$ColorTree.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$DefaultsListener.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$DerivedFont.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$LazyPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$LazyStyle$Part.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$LazyStyle.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults$PainterBorder.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusDefaults.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusIcon.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusLookAndFeel$1.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusLookAndFeel$2.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusLookAndFeel$DefaultsListener.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusLookAndFeel$LinkProperty.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusLookAndFeel$NimbusProperty.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusLookAndFeel.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusStyle$1.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusStyle$CacheKey.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusStyle$RuntimeState.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusStyle$Values.class +INFO: Loading Class: javax/swing/plaf/nimbus/NimbusStyle.class +INFO: Loading Class: javax/swing/plaf/nimbus/OptionPaneMessageAreaOptionPaneLabelPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/OptionPanePainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/OuterGlowEffect.class +INFO: Loading Class: javax/swing/plaf/nimbus/PasswordFieldPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/PopupMenuPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/PopupMenuSeparatorPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ProgressBarFinishedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ProgressBarIndeterminateState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ProgressBarPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/RadioButtonMenuItemPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/RadioButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ScrollBarButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ScrollBarThumbPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ScrollBarTrackPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ScrollPanePainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SeparatorPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ShadowEffect.class +INFO: Loading Class: javax/swing/plaf/nimbus/SliderArrowShapeState.class +INFO: Loading Class: javax/swing/plaf/nimbus/SliderThumbArrowShapeState.class +INFO: Loading Class: javax/swing/plaf/nimbus/SliderThumbPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SliderTrackArrowShapeState.class +INFO: Loading Class: javax/swing/plaf/nimbus/SliderTrackPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SpinnerNextButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SpinnerPanelSpinnerFormattedTextFieldPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SpinnerPreviousButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SplitPaneDividerPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/SplitPaneDividerVerticalState.class +INFO: Loading Class: javax/swing/plaf/nimbus/SplitPaneVerticalState.class +INFO: Loading Class: javax/swing/plaf/nimbus/State$1.class +INFO: Loading Class: javax/swing/plaf/nimbus/State$StandardState.class +INFO: Loading Class: javax/swing/plaf/nimbus/State.class +INFO: Loading Class: javax/swing/plaf/nimbus/SynthPainterImpl.class +INFO: Loading Class: javax/swing/plaf/nimbus/TabbedPaneTabAreaPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TabbedPaneTabPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TableEditorPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TableHeaderPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TableHeaderRendererPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TableHeaderRendererSortedState.class +INFO: Loading Class: javax/swing/plaf/nimbus/TableScrollPaneCorner.class +INFO: Loading Class: javax/swing/plaf/nimbus/TextAreaNotInScrollPaneState.class +INFO: Loading Class: javax/swing/plaf/nimbus/TextAreaPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TextFieldPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TextPanePainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToggleButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarEastState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarNorthState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarSeparatorPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarSouthState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarToggleButtonPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolBarWestState.class +INFO: Loading Class: javax/swing/plaf/nimbus/ToolTipPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TreeCellEditorPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TreeCellPainter.class +INFO: Loading Class: javax/swing/plaf/nimbus/TreePainter.class +INFO: Loading Class: javax/swing/plaf/synth/ColorType.class +INFO: Loading Class: javax/swing/plaf/synth/DefaultSynthStyleFactory.class +INFO: Loading Class: javax/swing/plaf/synth/ImagePainter.class +INFO: Loading Class: javax/swing/plaf/synth/ParsedSynthStyle$1.class +INFO: Loading Class: javax/swing/plaf/synth/ParsedSynthStyle$AggregatePainter.class +INFO: Loading Class: javax/swing/plaf/synth/ParsedSynthStyle$DelegatingPainter.class +INFO: Loading Class: javax/swing/plaf/synth/ParsedSynthStyle$PainterInfo.class +INFO: Loading Class: javax/swing/plaf/synth/ParsedSynthStyle$StateInfo.class +INFO: Loading Class: javax/swing/plaf/synth/ParsedSynthStyle.class +INFO: Loading Class: javax/swing/plaf/synth/Region.class +INFO: Loading Class: javax/swing/plaf/synth/SynthArrowButton$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthArrowButton$SynthArrowButtonUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthArrowButton.class +INFO: Loading Class: javax/swing/plaf/synth/SynthBorder.class +INFO: Loading Class: javax/swing/plaf/synth/SynthButtonUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthCheckBoxMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthCheckBoxUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthColorChooserUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboBoxUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboBoxUI$ButtonHandler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboBoxUI$EditorFocusHandler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxEditor.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxRenderer.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboBoxUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthComboPopup.class +INFO: Loading Class: javax/swing/plaf/synth/SynthContext.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDefaultLookup.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopIconUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopIconUI$Handler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopIconUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopPaneUI$SynthDesktopManager.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopPaneUI$TaskBar$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopPaneUI$TaskBar$2.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopPaneUI$TaskBar.class +INFO: Loading Class: javax/swing/plaf/synth/SynthDesktopPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthEditorPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthFormattedTextFieldUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthGraphicsUtils$SynthIconWrapper.class +INFO: Loading Class: javax/swing/plaf/synth/SynthGraphicsUtils.class +INFO: Loading Class: javax/swing/plaf/synth/SynthInternalFrameTitlePane$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthInternalFrameTitlePane$JPopupMenuUIResource.class +INFO: Loading Class: javax/swing/plaf/synth/SynthInternalFrameTitlePane$SynthTitlePaneLayout.class +INFO: Loading Class: javax/swing/plaf/synth/SynthInternalFrameTitlePane.class +INFO: Loading Class: javax/swing/plaf/synth/SynthInternalFrameUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthInternalFrameUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthLabelUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthListUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthListUI$SynthListCellRenderer.class +INFO: Loading Class: javax/swing/plaf/synth/SynthListUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthLookAndFeel$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthLookAndFeel$AATextListener$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthLookAndFeel$AATextListener.class +INFO: Loading Class: javax/swing/plaf/synth/SynthLookAndFeel$Handler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthLookAndFeel.class +INFO: Loading Class: javax/swing/plaf/synth/SynthMenuBarUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthMenuItemLayoutHelper.class +INFO: Loading Class: javax/swing/plaf/synth/SynthMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthMenuLayout.class +INFO: Loading Class: javax/swing/plaf/synth/SynthMenuUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthOptionPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthPainter$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthPainter.class +INFO: Loading Class: javax/swing/plaf/synth/SynthPanelUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthParser$LazyImageIcon.class +INFO: Loading Class: javax/swing/plaf/synth/SynthParser.class +INFO: Loading Class: javax/swing/plaf/synth/SynthPasswordFieldUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthPopupMenuUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthProgressBarUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthRadioButtonMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthRadioButtonUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthRootPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollBarUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollBarUI$2.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollBarUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollPaneUI$ViewportBorder.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollPaneUI$ViewportViewFocusHandler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthScrollPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSliderUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSliderUI$SynthTrackListener.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSliderUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSpinnerUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSpinnerUI$EditorFocusHandler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSpinnerUI$SpinnerLayout.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSpinnerUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSplitPaneDivider.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSplitPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthSplitPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthStyle.class +INFO: Loading Class: javax/swing/plaf/synth/SynthStyleFactory.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTabbedPaneUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTabbedPaneUI$2.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTabbedPaneUI$SynthScrollableTabButton.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTabbedPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableHeaderUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableHeaderUI$HeaderRenderer.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableHeaderUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableUI$SynthBooleanTableCellRenderer.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableUI$SynthTableCellRenderer.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTableUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextAreaUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextAreaUI$Handler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextAreaUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextFieldUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextFieldUI$Handler.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextFieldUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTextPaneUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthToggleButtonUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthToolBarUI$SynthToolBarLayoutManager.class +INFO: Loading Class: javax/swing/plaf/synth/SynthToolBarUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthToolTipUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTreeUI$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTreeUI$ExpandedIconWrapper.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTreeUI$SynthTreeCellEditor$1.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTreeUI$SynthTreeCellEditor.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTreeUI$SynthTreeCellRenderer.class +INFO: Loading Class: javax/swing/plaf/synth/SynthTreeUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthViewportUI.class +INFO: Loading Class: javax/swing/table/AbstractTableModel.class +INFO: Loading Class: javax/swing/table/DefaultTableCellRenderer$UIResource.class +INFO: Loading Class: javax/swing/table/DefaultTableCellRenderer.class +INFO: Loading Class: javax/swing/table/DefaultTableColumnModel.class +INFO: Loading Class: javax/swing/table/DefaultTableModel.class +INFO: Loading Class: javax/swing/table/JTableHeader$AccessibleJTableHeader$AccessibleJTableHeaderEntry.class +INFO: Loading Class: javax/swing/table/JTableHeader$AccessibleJTableHeader.class +INFO: Loading Class: javax/swing/table/JTableHeader.class +INFO: Loading Class: javax/swing/table/TableCellEditor.class +INFO: Loading Class: javax/swing/table/TableCellRenderer.class +INFO: Loading Class: javax/swing/table/TableColumn$1.class +INFO: Loading Class: javax/swing/table/TableColumn.class +INFO: Loading Class: javax/swing/table/TableColumnModel.class +INFO: Loading Class: javax/swing/table/TableModel.class +INFO: Loading Class: javax/swing/table/TableRowSorter$1.class +INFO: Loading Class: javax/swing/table/TableRowSorter$ComparableComparator.class +INFO: Loading Class: javax/swing/table/TableRowSorter$TableRowSorterModelWrapper.class +INFO: Loading Class: javax/swing/table/TableRowSorter.class +INFO: Loading Class: javax/swing/table/TableStringConverter.class +INFO: Loading Class: javax/swing/text/AbstractDocument$2.class +INFO: Loading Class: javax/swing/text/AbstractDocument$DefaultFilterBypass.class +INFO: Loading Class: javax/swing/text/AbstractDocument$UndoRedoDocumentEvent.class +INFO: Loading Class: javax/swing/text/AbstractWriter.class +INFO: Loading Class: javax/swing/text/AsyncBoxView$ChildLocator.class +INFO: Loading Class: javax/swing/text/AsyncBoxView$ChildState.class +INFO: Loading Class: javax/swing/text/AsyncBoxView$FlushTask.class +INFO: Loading Class: javax/swing/text/AsyncBoxView.class +INFO: Loading Class: javax/swing/text/BadLocationException.class +INFO: Loading Class: javax/swing/text/BoxView.class +INFO: Loading Class: javax/swing/text/ChangedCharSetException.class +INFO: Loading Class: javax/swing/text/ComponentView$1.class +INFO: Loading Class: javax/swing/text/ComponentView$Invalidator.class +INFO: Loading Class: javax/swing/text/ComponentView.class +INFO: Loading Class: javax/swing/text/CompositeView.class +INFO: Loading Class: javax/swing/text/DateFormatter.class +INFO: Loading Class: javax/swing/text/DefaultCaret$DefaultFilterBypass.class +INFO: Loading Class: javax/swing/text/DefaultCaret$SafeScroller.class +INFO: Loading Class: javax/swing/text/DefaultFormatter$1.class +INFO: Loading Class: javax/swing/text/DefaultFormatter$DefaultDocumentFilter.class +INFO: Loading Class: javax/swing/text/DefaultFormatter$DefaultNavigationFilter.class +INFO: Loading Class: javax/swing/text/DefaultFormatter$ReplaceHolder.class +INFO: Loading Class: javax/swing/text/DefaultFormatter.class +INFO: Loading Class: javax/swing/text/DefaultFormatterFactory.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$AbstractChangeHandler$DocReference.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$AbstractChangeHandler.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$AttributeUndoableEdit.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$ChangeUpdateRunnable.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$ElementBuffer$ElemChanges.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$ElementBuffer.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$ElementSpec.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$SectionElement.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$StyleChangeHandler.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$StyleChangeUndoableEdit.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument$StyleContextChangeHandler.class +INFO: Loading Class: javax/swing/text/DefaultStyledDocument.class +INFO: Loading Class: javax/swing/text/DefaultTextUI.class +INFO: Loading Class: javax/swing/text/DocumentFilter$FilterBypass.class +INFO: Loading Class: javax/swing/text/DocumentFilter.class +INFO: Loading Class: javax/swing/text/ElementIterator$1.class +INFO: Loading Class: javax/swing/text/ElementIterator$StackItem.class +INFO: Loading Class: javax/swing/text/ElementIterator.class +INFO: Loading Class: javax/swing/text/FlowView$FlowStrategy.class +INFO: Loading Class: javax/swing/text/FlowView$LogicalView.class +INFO: Loading Class: javax/swing/text/FlowView.class +INFO: Loading Class: javax/swing/text/GapContent$RemoveUndo.class +INFO: Loading Class: javax/swing/text/GapContent$UndoPosRef.class +INFO: Loading Class: javax/swing/text/GlyphPainter1.class +INFO: Loading Class: javax/swing/text/GlyphPainter2.class +INFO: Loading Class: javax/swing/text/GlyphView$GlyphPainter.class +INFO: Loading Class: javax/swing/text/GlyphView$JustificationInfo.class +INFO: Loading Class: javax/swing/text/GlyphView.class +INFO: Loading Class: javax/swing/text/IconView.class +INFO: Loading Class: javax/swing/text/InternationalFormatter$ExtendedReplaceHolder.class +INFO: Loading Class: javax/swing/text/InternationalFormatter$IncrementAction.class +INFO: Loading Class: javax/swing/text/InternationalFormatter.class +INFO: Loading Class: javax/swing/text/JTextComponent$2.class +INFO: Loading Class: javax/swing/text/JTextComponent$3$1.class +INFO: Loading Class: javax/swing/text/JTextComponent$3$2.class +INFO: Loading Class: javax/swing/text/JTextComponent$3.class +INFO: Loading Class: javax/swing/text/JTextComponent$4$1.class +INFO: Loading Class: javax/swing/text/JTextComponent$4.class +INFO: Loading Class: javax/swing/text/JTextComponent$5.class +INFO: Loading Class: javax/swing/text/JTextComponent$AccessibleJTextComponent$1.class +INFO: Loading Class: javax/swing/text/JTextComponent$AccessibleJTextComponent$2.class +INFO: Loading Class: javax/swing/text/JTextComponent$AccessibleJTextComponent$3.class +INFO: Loading Class: javax/swing/text/JTextComponent$AccessibleJTextComponent$4.class +INFO: Loading Class: javax/swing/text/JTextComponent$AccessibleJTextComponent$IndexedSegment.class +INFO: Loading Class: javax/swing/text/JTextComponent$AccessibleJTextComponent.class +INFO: Loading Class: javax/swing/text/JTextComponent$ComposedTextCaret.class +INFO: Loading Class: javax/swing/text/JTextComponent$DefaultTransferHandler.class +INFO: Loading Class: javax/swing/text/JTextComponent$DoSetCaretPosition.class +INFO: Loading Class: javax/swing/text/JTextComponent$DropLocation.class +INFO: Loading Class: javax/swing/text/JTextComponent$InputMethodRequestsHandler.class +INFO: Loading Class: javax/swing/text/JTextComponent$KeyBinding.class +INFO: Loading Class: javax/swing/text/LabelView.class +INFO: Loading Class: javax/swing/text/LayoutQueue$LayoutThread.class +INFO: Loading Class: javax/swing/text/LayoutQueue.class +INFO: Loading Class: javax/swing/text/MaskFormatter$1.class +INFO: Loading Class: javax/swing/text/MaskFormatter$AlphaNumericCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$CharCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$DigitMaskCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$HexCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$LiteralCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$LowerCaseCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$MaskCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter$UpperCaseCharacter.class +INFO: Loading Class: javax/swing/text/MaskFormatter.class +INFO: Loading Class: javax/swing/text/NavigationFilter$FilterBypass.class +INFO: Loading Class: javax/swing/text/NavigationFilter.class +INFO: Loading Class: javax/swing/text/NumberFormatter.class +INFO: Loading Class: javax/swing/text/ParagraphView$Row.class +INFO: Loading Class: javax/swing/text/ParagraphView.class +INFO: Loading Class: javax/swing/text/PasswordView.class +INFO: Loading Class: javax/swing/text/SegmentCache$1.class +INFO: Loading Class: javax/swing/text/StateInvariantError.class +INFO: Loading Class: javax/swing/text/StringContent$InsertUndo.class +INFO: Loading Class: javax/swing/text/StringContent$PosRec.class +INFO: Loading Class: javax/swing/text/StringContent$RemoveUndo.class +INFO: Loading Class: javax/swing/text/StringContent$StickyPosition.class +INFO: Loading Class: javax/swing/text/StringContent$UndoPosRef.class +INFO: Loading Class: javax/swing/text/StringContent.class +INFO: Loading Class: javax/swing/text/StyleConstants$1.class +INFO: Loading Class: javax/swing/text/StyleContext$KeyBuilder.class +INFO: Loading Class: javax/swing/text/StyledDocument.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$1.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$AlignmentAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$AttributeTracker.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$BoldAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$FontFamilyAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$FontSizeAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$ForegroundAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$ItalicAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$StyledInsertBreakAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$StyledTextAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$StyledViewFactory.class +INFO: Loading Class: javax/swing/text/StyledEditorKit$UnderlineAction.class +INFO: Loading Class: javax/swing/text/StyledEditorKit.class +INFO: Loading Class: javax/swing/text/TabSet.class +INFO: Loading Class: javax/swing/text/TabStop.class +INFO: Loading Class: javax/swing/text/TabableView.class +INFO: Loading Class: javax/swing/text/TableView$GridCell.class +INFO: Loading Class: javax/swing/text/TableView$TableCell.class +INFO: Loading Class: javax/swing/text/TableView$TableRow.class +INFO: Loading Class: javax/swing/text/TableView.class +INFO: Loading Class: javax/swing/text/TextLayoutStrategy$AttributedSegment.class +INFO: Loading Class: javax/swing/text/TextLayoutStrategy.class +INFO: Loading Class: javax/swing/text/WhitespaceBasedBreakIterator.class +INFO: Loading Class: javax/swing/text/WrappedPlainView$WrappedLine.class +INFO: Loading Class: javax/swing/text/WrappedPlainView.class +INFO: Loading Class: javax/swing/text/ZoneView$Zone.class +INFO: Loading Class: javax/swing/text/ZoneView.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$1.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$DocumentHandler.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$ElementInfo.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$HTMLAccessibleContext.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$IconElementInfo$IconAccessibleContext.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$IconElementInfo.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$RootHTMLAccessibleContext.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TableElementInfo$TableAccessibleContext$AccessibleHeadersTable.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TableElementInfo$TableAccessibleContext.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TableElementInfo$TableCellElementInfo.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TableElementInfo$TableRowElementInfo.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TableElementInfo.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TextElementInfo$TextAccessibleContext$IndexedSegment.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TextElementInfo$TextAccessibleContext.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML$TextElementInfo.class +INFO: Loading Class: javax/swing/text/html/AccessibleHTML.class +INFO: Loading Class: javax/swing/text/html/BRView.class +INFO: Loading Class: javax/swing/text/html/BlockView.class +INFO: Loading Class: javax/swing/text/html/CSS$Attribute.class +INFO: Loading Class: javax/swing/text/html/CSS$BackgroundImage.class +INFO: Loading Class: javax/swing/text/html/CSS$BackgroundPosition.class +INFO: Loading Class: javax/swing/text/html/CSS$BorderStyle.class +INFO: Loading Class: javax/swing/text/html/CSS$BorderWidthValue.class +INFO: Loading Class: javax/swing/text/html/CSS$ColorValue.class +INFO: Loading Class: javax/swing/text/html/CSS$CssValue.class +INFO: Loading Class: javax/swing/text/html/CSS$CssValueMapper.class +INFO: Loading Class: javax/swing/text/html/CSS$FontFamily.class +INFO: Loading Class: javax/swing/text/html/CSS$FontSize.class +INFO: Loading Class: javax/swing/text/html/CSS$FontWeight.class +INFO: Loading Class: javax/swing/text/html/CSS$LayoutIterator.class +INFO: Loading Class: javax/swing/text/html/CSS$LengthUnit.class +INFO: Loading Class: javax/swing/text/html/CSS$LengthValue.class +INFO: Loading Class: javax/swing/text/html/CSS$ShorthandBackgroundParser.class +INFO: Loading Class: javax/swing/text/html/CSS$ShorthandBorderParser.class +INFO: Loading Class: javax/swing/text/html/CSS$ShorthandFontParser.class +INFO: Loading Class: javax/swing/text/html/CSS$ShorthandMarginParser.class +INFO: Loading Class: javax/swing/text/html/CSS$StringValue.class +INFO: Loading Class: javax/swing/text/html/CSS$Value.class +INFO: Loading Class: javax/swing/text/html/CSS.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$BorderPainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$DottedDashedPainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$DoublePainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$GrooveRidgePainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$InsetOutsetPainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$NullPainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$ShadowLightPainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$SolidPainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder$StrokePainter.class +INFO: Loading Class: javax/swing/text/html/CSSBorder.class +INFO: Loading Class: javax/swing/text/html/CSSParser$CSSParserCallback.class +INFO: Loading Class: javax/swing/text/html/CSSParser.class +INFO: Loading Class: javax/swing/text/html/CommentView$CommentBorder.class +INFO: Loading Class: javax/swing/text/html/CommentView.class +INFO: Loading Class: javax/swing/text/html/EditableView.class +INFO: Loading Class: javax/swing/text/html/FormSubmitEvent$MethodType.class +INFO: Loading Class: javax/swing/text/html/FormSubmitEvent.class +INFO: Loading Class: javax/swing/text/html/FormView$1.class +INFO: Loading Class: javax/swing/text/html/FormView$BrowseFileAction.class +INFO: Loading Class: javax/swing/text/html/FormView$MouseEventListener.class +INFO: Loading Class: javax/swing/text/html/FormView.class +INFO: Loading Class: javax/swing/text/html/FrameSetView.class +INFO: Loading Class: javax/swing/text/html/FrameView$FrameEditorPane.class +INFO: Loading Class: javax/swing/text/html/FrameView.class +INFO: Loading Class: javax/swing/text/html/HRuleView.class +INFO: Loading Class: javax/swing/text/html/HTML$Attribute.class +INFO: Loading Class: javax/swing/text/html/HTML$Tag.class +INFO: Loading Class: javax/swing/text/html/HTML$UnknownTag.class +INFO: Loading Class: javax/swing/text/html/HTML.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$1.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$BlockElement.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$FixedLengthDocument.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$AnchorAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$AreaAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$BaseAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$BlockAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$CharacterAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$ConvertAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$FormAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$FormTagAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$HeadAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$HiddenAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$IsindexAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$LinkAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$MapAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$MetaAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$ObjectAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$ParagraphAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$PreAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$SpecialAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$StyleAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$TagAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader$TitleAction.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$HTMLReader.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$Iterator.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$LeafIterator.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$RunElement.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument$TaggedAttributeSet.class +INFO: Loading Class: javax/swing/text/html/HTMLDocument.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$1.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$ActivateLinkAction.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$BeginAction.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$HTMLFactory$1.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$HTMLFactory$BodyBlockView.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$HTMLFactory.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$HTMLTextAction.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$InsertHRAction.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$InsertHTMLTextAction.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$LinkController.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$NavigateLinkAction$FocusHighlightPainter.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$NavigateLinkAction.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$Parser.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit$ParserCallback.class +INFO: Loading Class: javax/swing/text/html/HTMLEditorKit.class +INFO: Loading Class: javax/swing/text/html/HTMLFrameHyperlinkEvent.class +INFO: Loading Class: javax/swing/text/html/HTMLWriter.class +INFO: Loading Class: javax/swing/text/html/HiddenTagView$1.class +INFO: Loading Class: javax/swing/text/html/HiddenTagView$2.class +INFO: Loading Class: javax/swing/text/html/HiddenTagView$EndTagBorder.class +INFO: Loading Class: javax/swing/text/html/HiddenTagView$StartTagBorder.class +INFO: Loading Class: javax/swing/text/html/HiddenTagView.class +INFO: Loading Class: javax/swing/text/html/ImageView$1.class +INFO: Loading Class: javax/swing/text/html/ImageView$ImageHandler.class +INFO: Loading Class: javax/swing/text/html/ImageView$ImageLabelView.class +INFO: Loading Class: javax/swing/text/html/ImageView.class +INFO: Loading Class: javax/swing/text/html/InlineView.class +INFO: Loading Class: javax/swing/text/html/IsindexView.class +INFO: Loading Class: javax/swing/text/html/LineView.class +INFO: Loading Class: javax/swing/text/html/ListView.class +INFO: Loading Class: javax/swing/text/html/Map$CircleRegionContainment.class +INFO: Loading Class: javax/swing/text/html/Map$DefaultRegionContainment.class +INFO: Loading Class: javax/swing/text/html/Map$PolygonRegionContainment.class +INFO: Loading Class: javax/swing/text/html/Map$RectangleRegionContainment.class +INFO: Loading Class: javax/swing/text/html/Map$RegionContainment.class +INFO: Loading Class: javax/swing/text/html/Map.class +INFO: Loading Class: javax/swing/text/html/MinimalHTMLWriter.class +INFO: Loading Class: javax/swing/text/html/MuxingAttributeSet$MuxingAttributeNameEnumeration.class +INFO: Loading Class: javax/swing/text/html/MuxingAttributeSet.class +INFO: Loading Class: javax/swing/text/html/NoFramesView.class +INFO: Loading Class: javax/swing/text/html/ObjectView.class +INFO: Loading Class: javax/swing/text/html/Option.class +INFO: Loading Class: javax/swing/text/html/OptionComboBoxModel.class +INFO: Loading Class: javax/swing/text/html/OptionListModel.class +INFO: Loading Class: javax/swing/text/html/ParagraphView.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$1.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$BackgroundImagePainter.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$BoxPainter$HorizontalMargin.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$BoxPainter.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$CssParser.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$LargeConversionSet.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$ListPainter.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$ResolvedStyle.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$SearchBuffer.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$SelectorMapping.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$SmallConversionSet.class +INFO: Loading Class: javax/swing/text/html/StyleSheet$ViewAttributeSet.class +INFO: Loading Class: javax/swing/text/html/StyleSheet.class +INFO: Loading Class: javax/swing/text/html/TableView$CellView.class +INFO: Loading Class: javax/swing/text/html/TableView$ColumnIterator.class +INFO: Loading Class: javax/swing/text/html/TableView$RowIterator.class +INFO: Loading Class: javax/swing/text/html/TableView$RowView.class +INFO: Loading Class: javax/swing/text/html/TableView.class +INFO: Loading Class: javax/swing/text/html/TextAreaDocument.class +INFO: Loading Class: javax/swing/text/html/parser/AttributeList.class +INFO: Loading Class: javax/swing/text/html/parser/ContentModel.class +INFO: Loading Class: javax/swing/text/html/parser/ContentModelState.class +INFO: Loading Class: javax/swing/text/html/parser/DTD.class +INFO: Loading Class: javax/swing/text/html/parser/DTDConstants.class +INFO: Loading Class: javax/swing/text/html/parser/DocumentParser.class +INFO: Loading Class: javax/swing/text/html/parser/Element.class +INFO: Loading Class: javax/swing/text/html/parser/Entity.class +INFO: Loading Class: javax/swing/text/html/parser/NPrintWriter.class +INFO: Loading Class: javax/swing/text/html/parser/Parser.class +INFO: Loading Class: javax/swing/text/html/parser/ParserDelegator$1.class +INFO: Loading Class: javax/swing/text/html/parser/ParserDelegator.class +INFO: Loading Class: javax/swing/text/html/parser/TagElement.class +INFO: Loading Class: javax/swing/text/html/parser/TagStack.class +INFO: Loading Class: javax/swing/text/rtf/AbstractFilter.class +INFO: Loading Class: javax/swing/text/rtf/Constants.class +INFO: Loading Class: javax/swing/text/rtf/MockAttributeSet.class +INFO: Loading Class: javax/swing/text/rtf/RTFAttribute.class +INFO: Loading Class: javax/swing/text/rtf/RTFAttributes$AssertiveAttribute.class +INFO: Loading Class: javax/swing/text/rtf/RTFAttributes$BooleanAttribute.class +INFO: Loading Class: javax/swing/text/rtf/RTFAttributes$GenericAttribute.class +INFO: Loading Class: javax/swing/text/rtf/RTFAttributes$NumericAttribute.class +INFO: Loading Class: javax/swing/text/rtf/RTFAttributes.class +INFO: Loading Class: javax/swing/text/rtf/RTFEditorKit.class +INFO: Loading Class: javax/swing/text/rtf/RTFGenerator$CharacterKeywordPair.class +INFO: Loading Class: javax/swing/text/rtf/RTFGenerator.class +INFO: Loading Class: javax/swing/text/rtf/RTFParser.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$1.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$AttributeTrackingDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$ColortblDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$Destination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$DiscardingDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$DocumentDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$FonttblDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$InfoDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$StylesheetDestination$StyleDefiningDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$StylesheetDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader$TextHandlingDestination.class +INFO: Loading Class: javax/swing/text/rtf/RTFReader.class +INFO: Loading Class: javax/swing/tree/AbstractLayoutCache$NodeDimensions.class +INFO: Loading Class: javax/swing/tree/AbstractLayoutCache.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode$BreadthFirstEnumeration$Queue$QNode.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode$BreadthFirstEnumeration$Queue.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode$BreadthFirstEnumeration.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode$PathBetweenNodesEnumeration.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode$PostorderEnumeration.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration.class +INFO: Loading Class: javax/swing/tree/DefaultMutableTreeNode.class +INFO: Loading Class: javax/swing/tree/DefaultTreeCellEditor$1.class +INFO: Loading Class: javax/swing/tree/DefaultTreeCellEditor$DefaultTextField.class +INFO: Loading Class: javax/swing/tree/DefaultTreeCellEditor$EditorContainer.class +INFO: Loading Class: javax/swing/tree/DefaultTreeCellEditor.class +INFO: Loading Class: javax/swing/tree/DefaultTreeCellRenderer.class +INFO: Loading Class: javax/swing/tree/DefaultTreeModel.class +INFO: Loading Class: javax/swing/tree/DefaultTreeSelectionModel.class +INFO: Loading Class: javax/swing/tree/ExpandVetoException.class +INFO: Loading Class: javax/swing/tree/FixedHeightLayoutCache$1.class +INFO: Loading Class: javax/swing/tree/FixedHeightLayoutCache$FHTreeStateNode.class +INFO: Loading Class: javax/swing/tree/FixedHeightLayoutCache$SearchInfo.class +INFO: Loading Class: javax/swing/tree/FixedHeightLayoutCache$VisibleFHTreeStateNodeEnumeration.class +INFO: Loading Class: javax/swing/tree/FixedHeightLayoutCache.class +INFO: Loading Class: javax/swing/tree/MutableTreeNode.class +INFO: Loading Class: javax/swing/tree/PathPlaceHolder.class +INFO: Loading Class: javax/swing/tree/RowMapper.class +INFO: Loading Class: javax/swing/tree/TreeCellEditor.class +INFO: Loading Class: javax/swing/tree/TreeCellRenderer.class +INFO: Loading Class: javax/swing/tree/TreeModel.class +INFO: Loading Class: javax/swing/tree/TreePath.class +INFO: Loading Class: javax/swing/tree/TreeSelectionModel.class +INFO: Loading Class: javax/swing/tree/VariableHeightLayoutCache$TreeStateNode.class +INFO: Loading Class: javax/swing/tree/VariableHeightLayoutCache$VisibleTreeStateNodeEnumeration.class +INFO: Loading Class: javax/swing/tree/VariableHeightLayoutCache.class +INFO: Loading Class: javax/swing/undo/CannotRedoException.class +INFO: Loading Class: javax/swing/undo/CannotUndoException.class +INFO: Loading Class: javax/swing/undo/StateEdit.class +INFO: Loading Class: javax/swing/undo/StateEditable.class +INFO: Loading Class: javax/swing/undo/UndoManager.class +INFO: Loading Class: javax/swing/undo/UndoableEditSupport.class +INFO: Loading Class: javax/tools/Diagnostic$Kind.class +INFO: Loading Class: javax/tools/Diagnostic.class +INFO: Loading Class: javax/tools/DiagnosticCollector.class +INFO: Loading Class: javax/tools/DiagnosticListener.class +INFO: Loading Class: javax/tools/DocumentationTool$1.class +INFO: Loading Class: javax/tools/DocumentationTool$DocumentationTask.class +INFO: Loading Class: javax/tools/DocumentationTool$Location.class +INFO: Loading Class: javax/tools/DocumentationTool.class +INFO: Loading Class: javax/tools/FileObject.class +INFO: Loading Class: javax/tools/ForwardingFileObject.class +INFO: Loading Class: javax/tools/ForwardingJavaFileManager.class +INFO: Loading Class: javax/tools/ForwardingJavaFileObject.class +INFO: Loading Class: javax/tools/JavaCompiler$CompilationTask.class +INFO: Loading Class: javax/tools/JavaCompiler.class +INFO: Loading Class: javax/tools/JavaFileManager$Location.class +INFO: Loading Class: javax/tools/JavaFileManager.class +INFO: Loading Class: javax/tools/JavaFileObject$Kind.class +INFO: Loading Class: javax/tools/JavaFileObject.class +INFO: Loading Class: javax/tools/OptionChecker.class +INFO: Loading Class: javax/tools/SimpleJavaFileObject.class +INFO: Loading Class: javax/tools/StandardJavaFileManager.class +INFO: Loading Class: javax/tools/StandardLocation$1.class +INFO: Loading Class: javax/tools/StandardLocation$2.class +INFO: Loading Class: javax/tools/StandardLocation.class +INFO: Loading Class: javax/tools/Tool.class +INFO: Loading Class: javax/tools/ToolProvider.class +INFO: Loading Class: javax/transaction/InvalidTransactionException.class +INFO: Loading Class: javax/transaction/TransactionRequiredException.class +INFO: Loading Class: javax/transaction/TransactionRolledbackException.class +INFO: Loading Class: javax/transaction/xa/XAException.class +INFO: Loading Class: javax/transaction/xa/XAResource.class +INFO: Loading Class: javax/transaction/xa/Xid.class +INFO: Loading Class: javax/xml/XMLConstants.class +INFO: Loading Class: javax/xml/bind/Binder.class +INFO: Loading Class: javax/xml/bind/ContextFinder$1.class +INFO: Loading Class: javax/xml/bind/ContextFinder$2.class +INFO: Loading Class: javax/xml/bind/ContextFinder$3.class +INFO: Loading Class: javax/xml/bind/ContextFinder.class +INFO: Loading Class: javax/xml/bind/DataBindingException.class +INFO: Loading Class: javax/xml/bind/DatatypeConverter.class +INFO: Loading Class: javax/xml/bind/DatatypeConverterImpl$CalendarFormatter.class +INFO: Loading Class: javax/xml/bind/DatatypeConverterImpl.class +INFO: Loading Class: javax/xml/bind/DatatypeConverterInterface.class +INFO: Loading Class: javax/xml/bind/Element.class +INFO: Loading Class: javax/xml/bind/GetPropertyAction.class +INFO: Loading Class: javax/xml/bind/JAXB$Cache.class +INFO: Loading Class: javax/xml/bind/JAXB.class +INFO: Loading Class: javax/xml/bind/JAXBContext$1.class +INFO: Loading Class: javax/xml/bind/JAXBContext.class +INFO: Loading Class: javax/xml/bind/JAXBElement$GlobalScope.class +INFO: Loading Class: javax/xml/bind/JAXBElement.class +INFO: Loading Class: javax/xml/bind/JAXBException.class +INFO: Loading Class: javax/xml/bind/JAXBIntrospector.class +INFO: Loading Class: javax/xml/bind/JAXBPermission.class +INFO: Loading Class: javax/xml/bind/MarshalException.class +INFO: Loading Class: javax/xml/bind/Marshaller$Listener.class +INFO: Loading Class: javax/xml/bind/Marshaller.class +INFO: Loading Class: javax/xml/bind/Messages.class +INFO: Loading Class: javax/xml/bind/NotIdentifiableEvent.class +INFO: Loading Class: javax/xml/bind/ParseConversionEvent.class +INFO: Loading Class: javax/xml/bind/PrintConversionEvent.class +INFO: Loading Class: javax/xml/bind/PropertyException.class +INFO: Loading Class: javax/xml/bind/SchemaOutputResolver.class +INFO: Loading Class: javax/xml/bind/TypeConstraintException.class +INFO: Loading Class: javax/xml/bind/UnmarshalException.class +INFO: Loading Class: javax/xml/bind/Unmarshaller$Listener.class +INFO: Loading Class: javax/xml/bind/Unmarshaller.class +INFO: Loading Class: javax/xml/bind/UnmarshallerHandler.class +INFO: Loading Class: javax/xml/bind/ValidationEvent.class +INFO: Loading Class: javax/xml/bind/ValidationEventHandler.class +INFO: Loading Class: javax/xml/bind/ValidationEventLocator.class +INFO: Loading Class: javax/xml/bind/ValidationException.class +INFO: Loading Class: javax/xml/bind/Validator.class +INFO: Loading Class: javax/xml/bind/WhiteSpaceProcessor.class +INFO: Loading Class: javax/xml/bind/annotation/DomHandler.class +INFO: Loading Class: javax/xml/bind/annotation/W3CDomHandler.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAccessOrder.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAccessType.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAccessorOrder.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAccessorType.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAnyAttribute.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAnyElement.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAttachmentRef.class +INFO: Loading Class: javax/xml/bind/annotation/XmlAttribute.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElement$DEFAULT.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElement.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElementDecl$GLOBAL.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElementDecl.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElementRef$DEFAULT.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElementRef.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElementRefs.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElementWrapper.class +INFO: Loading Class: javax/xml/bind/annotation/XmlElements.class +INFO: Loading Class: javax/xml/bind/annotation/XmlEnum.class +INFO: Loading Class: javax/xml/bind/annotation/XmlEnumValue.class +INFO: Loading Class: javax/xml/bind/annotation/XmlID.class +INFO: Loading Class: javax/xml/bind/annotation/XmlIDREF.class +INFO: Loading Class: javax/xml/bind/annotation/XmlInlineBinaryData.class +INFO: Loading Class: javax/xml/bind/annotation/XmlList.class +INFO: Loading Class: javax/xml/bind/annotation/XmlMimeType.class +INFO: Loading Class: javax/xml/bind/annotation/XmlMixed.class +INFO: Loading Class: javax/xml/bind/annotation/XmlNs.class +INFO: Loading Class: javax/xml/bind/annotation/XmlNsForm.class +INFO: Loading Class: javax/xml/bind/annotation/XmlRegistry.class +INFO: Loading Class: javax/xml/bind/annotation/XmlRootElement.class +INFO: Loading Class: javax/xml/bind/annotation/XmlSchema.class +INFO: Loading Class: javax/xml/bind/annotation/XmlSchemaType$DEFAULT.class +INFO: Loading Class: javax/xml/bind/annotation/XmlSchemaType.class +INFO: Loading Class: javax/xml/bind/annotation/XmlSchemaTypes.class +INFO: Loading Class: javax/xml/bind/annotation/XmlSeeAlso.class +INFO: Loading Class: javax/xml/bind/annotation/XmlTransient.class +INFO: Loading Class: javax/xml/bind/annotation/XmlType$DEFAULT.class +INFO: Loading Class: javax/xml/bind/annotation/XmlType.class +INFO: Loading Class: javax/xml/bind/annotation/XmlValue.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/CollapsedStringAdapter.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/HexBinaryAdapter.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/NormalizedStringAdapter.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/XmlAdapter.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter$DEFAULT.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter.class +INFO: Loading Class: javax/xml/bind/annotation/adapters/XmlJavaTypeAdapters.class +INFO: Loading Class: javax/xml/bind/attachment/AttachmentMarshaller.class +INFO: Loading Class: javax/xml/bind/attachment/AttachmentUnmarshaller.class +INFO: Loading Class: javax/xml/bind/helpers/AbstractMarshallerImpl.class +INFO: Loading Class: javax/xml/bind/helpers/AbstractUnmarshallerImpl.class +INFO: Loading Class: javax/xml/bind/helpers/DefaultValidationEventHandler.class +INFO: Loading Class: javax/xml/bind/helpers/Messages.class +INFO: Loading Class: javax/xml/bind/helpers/NotIdentifiableEventImpl.class +INFO: Loading Class: javax/xml/bind/helpers/ParseConversionEventImpl.class +INFO: Loading Class: javax/xml/bind/helpers/PrintConversionEventImpl.class +INFO: Loading Class: javax/xml/bind/helpers/ValidationEventImpl.class +INFO: Loading Class: javax/xml/bind/helpers/ValidationEventLocatorImpl.class +INFO: Loading Class: javax/xml/bind/util/JAXBResult.class +INFO: Loading Class: javax/xml/bind/util/JAXBSource$1.class +INFO: Loading Class: javax/xml/bind/util/JAXBSource.class +INFO: Loading Class: javax/xml/bind/util/Messages.class +INFO: Loading Class: javax/xml/bind/util/ValidationEventCollector.class +INFO: Loading Class: javax/xml/crypto/AlgorithmMethod.class +INFO: Loading Class: javax/xml/crypto/Data.class +INFO: Loading Class: javax/xml/crypto/KeySelector$Purpose.class +INFO: Loading Class: javax/xml/crypto/KeySelector$SingletonKeySelector$1.class +INFO: Loading Class: javax/xml/crypto/KeySelector$SingletonKeySelector.class +INFO: Loading Class: javax/xml/crypto/KeySelector.class +INFO: Loading Class: javax/xml/crypto/KeySelectorException.class +INFO: Loading Class: javax/xml/crypto/KeySelectorResult.class +INFO: Loading Class: javax/xml/crypto/MarshalException.class +INFO: Loading Class: javax/xml/crypto/NoSuchMechanismException.class +INFO: Loading Class: javax/xml/crypto/NodeSetData.class +INFO: Loading Class: javax/xml/crypto/OctetStreamData.class +INFO: Loading Class: javax/xml/crypto/URIDereferencer.class +INFO: Loading Class: javax/xml/crypto/URIReference.class +INFO: Loading Class: javax/xml/crypto/URIReferenceException.class +INFO: Loading Class: javax/xml/crypto/XMLCryptoContext.class +INFO: Loading Class: javax/xml/crypto/XMLStructure.class +INFO: Loading Class: javax/xml/crypto/dom/DOMCryptoContext.class +INFO: Loading Class: javax/xml/crypto/dom/DOMStructure.class +INFO: Loading Class: javax/xml/crypto/dom/DOMURIReference.class +INFO: Loading Class: javax/xml/crypto/dsig/CanonicalizationMethod.class +INFO: Loading Class: javax/xml/crypto/dsig/DigestMethod.class +INFO: Loading Class: javax/xml/crypto/dsig/Manifest.class +INFO: Loading Class: javax/xml/crypto/dsig/Reference.class +INFO: Loading Class: javax/xml/crypto/dsig/SignatureMethod.class +INFO: Loading Class: javax/xml/crypto/dsig/SignatureProperties.class +INFO: Loading Class: javax/xml/crypto/dsig/SignatureProperty.class +INFO: Loading Class: javax/xml/crypto/dsig/SignedInfo.class +INFO: Loading Class: javax/xml/crypto/dsig/Transform.class +INFO: Loading Class: javax/xml/crypto/dsig/TransformException.class +INFO: Loading Class: javax/xml/crypto/dsig/TransformService$MechanismMapEntry.class +INFO: Loading Class: javax/xml/crypto/dsig/TransformService.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLObject.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLSignContext.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLSignature$SignatureValue.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLSignature.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLSignatureException.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLSignatureFactory.class +INFO: Loading Class: javax/xml/crypto/dsig/XMLValidateContext.class +INFO: Loading Class: javax/xml/crypto/dsig/dom/DOMSignContext.class +INFO: Loading Class: javax/xml/crypto/dsig/dom/DOMValidateContext.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/KeyInfo.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/KeyInfoFactory.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/KeyName.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/KeyValue.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/PGPData.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/RetrievalMethod.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/X509Data.class +INFO: Loading Class: javax/xml/crypto/dsig/keyinfo/X509IssuerSerial.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/C14NMethodParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/DigestMethodParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/ExcC14NParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/HMACParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/SignatureMethodParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/TransformParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/XPathFilter2ParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/XPathFilterParameterSpec.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/XPathType$Filter.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/XPathType.class +INFO: Loading Class: javax/xml/crypto/dsig/spec/XSLTTransformParameterSpec.class +INFO: Loading Class: javax/xml/datatype/DatatypeConfigurationException.class +INFO: Loading Class: javax/xml/datatype/DatatypeConstants$1.class +INFO: Loading Class: javax/xml/datatype/DatatypeConstants$Field.class +INFO: Loading Class: javax/xml/datatype/DatatypeConstants.class +INFO: Loading Class: javax/xml/datatype/DatatypeFactory.class +INFO: Loading Class: javax/xml/datatype/Duration.class +INFO: Loading Class: javax/xml/datatype/FactoryFinder$1.class +INFO: Loading Class: javax/xml/datatype/FactoryFinder.class +INFO: Loading Class: javax/xml/datatype/SecuritySupport$1.class +INFO: Loading Class: javax/xml/datatype/SecuritySupport$2.class +INFO: Loading Class: javax/xml/datatype/SecuritySupport$3.class +INFO: Loading Class: javax/xml/datatype/SecuritySupport$4.class +INFO: Loading Class: javax/xml/datatype/SecuritySupport$5.class +INFO: Loading Class: javax/xml/datatype/SecuritySupport.class +INFO: Loading Class: javax/xml/datatype/XMLGregorianCalendar.class +INFO: Loading Class: javax/xml/namespace/NamespaceContext.class +INFO: Loading Class: javax/xml/namespace/QName$1.class +INFO: Loading Class: javax/xml/namespace/QName.class +INFO: Loading Class: javax/xml/parsers/DocumentBuilder.class +INFO: Loading Class: javax/xml/parsers/DocumentBuilderFactory.class +INFO: Loading Class: javax/xml/parsers/FactoryConfigurationError.class +INFO: Loading Class: javax/xml/parsers/FactoryFinder$1.class +INFO: Loading Class: javax/xml/parsers/FactoryFinder.class +INFO: Loading Class: javax/xml/parsers/ParserConfigurationException.class +INFO: Loading Class: javax/xml/parsers/SAXParser.class +INFO: Loading Class: javax/xml/parsers/SAXParserFactory.class +INFO: Loading Class: javax/xml/parsers/SecuritySupport$1.class +INFO: Loading Class: javax/xml/parsers/SecuritySupport$2.class +INFO: Loading Class: javax/xml/parsers/SecuritySupport$3.class +INFO: Loading Class: javax/xml/parsers/SecuritySupport$4.class +INFO: Loading Class: javax/xml/parsers/SecuritySupport$5.class +INFO: Loading Class: javax/xml/parsers/SecuritySupport.class +INFO: Loading Class: javax/xml/soap/AttachmentPart.class +INFO: Loading Class: javax/xml/soap/Detail.class +INFO: Loading Class: javax/xml/soap/DetailEntry.class +INFO: Loading Class: javax/xml/soap/FactoryFinder.class +INFO: Loading Class: javax/xml/soap/MessageFactory.class +INFO: Loading Class: javax/xml/soap/MimeHeader.class +INFO: Loading Class: javax/xml/soap/MimeHeaders$MatchingIterator.class +INFO: Loading Class: javax/xml/soap/MimeHeaders.class +INFO: Loading Class: javax/xml/soap/Name.class +INFO: Loading Class: javax/xml/soap/Node.class +INFO: Loading Class: javax/xml/soap/SAAJMetaFactory.class +INFO: Loading Class: javax/xml/soap/SAAJResult.class +INFO: Loading Class: javax/xml/soap/SOAPBody.class +INFO: Loading Class: javax/xml/soap/SOAPBodyElement.class +INFO: Loading Class: javax/xml/soap/SOAPConnection.class +INFO: Loading Class: javax/xml/soap/SOAPConnectionFactory.class +INFO: Loading Class: javax/xml/soap/SOAPConstants.class +INFO: Loading Class: javax/xml/soap/SOAPElement.class +INFO: Loading Class: javax/xml/soap/SOAPElementFactory.class +INFO: Loading Class: javax/xml/soap/SOAPEnvelope.class +INFO: Loading Class: javax/xml/soap/SOAPException.class +INFO: Loading Class: javax/xml/soap/SOAPFactory.class +INFO: Loading Class: javax/xml/soap/SOAPFault.class +INFO: Loading Class: javax/xml/soap/SOAPFaultElement.class +INFO: Loading Class: javax/xml/soap/SOAPHeader.class +INFO: Loading Class: javax/xml/soap/SOAPHeaderElement.class +INFO: Loading Class: javax/xml/soap/SOAPMessage.class +INFO: Loading Class: javax/xml/soap/SOAPPart.class +INFO: Loading Class: javax/xml/soap/Text.class +INFO: Loading Class: javax/xml/stream/EventFilter.class +INFO: Loading Class: javax/xml/stream/FactoryConfigurationError.class +INFO: Loading Class: javax/xml/stream/FactoryFinder$1.class +INFO: Loading Class: javax/xml/stream/FactoryFinder.class +INFO: Loading Class: javax/xml/stream/Location.class +INFO: Loading Class: javax/xml/stream/SecuritySupport$1.class +INFO: Loading Class: javax/xml/stream/SecuritySupport$2.class +INFO: Loading Class: javax/xml/stream/SecuritySupport$3.class +INFO: Loading Class: javax/xml/stream/SecuritySupport$4.class +INFO: Loading Class: javax/xml/stream/SecuritySupport$5.class +INFO: Loading Class: javax/xml/stream/SecuritySupport.class +INFO: Loading Class: javax/xml/stream/StreamFilter.class +INFO: Loading Class: javax/xml/stream/XMLEventFactory.class +INFO: Loading Class: javax/xml/stream/XMLEventReader.class +INFO: Loading Class: javax/xml/stream/XMLEventWriter.class +INFO: Loading Class: javax/xml/stream/XMLInputFactory.class +INFO: Loading Class: javax/xml/stream/XMLOutputFactory.class +INFO: Loading Class: javax/xml/stream/XMLReporter.class +INFO: Loading Class: javax/xml/stream/XMLResolver.class +INFO: Loading Class: javax/xml/stream/XMLStreamConstants.class +INFO: Loading Class: javax/xml/stream/XMLStreamException.class +INFO: Loading Class: javax/xml/stream/XMLStreamReader.class +INFO: Loading Class: javax/xml/stream/XMLStreamWriter.class +INFO: Loading Class: javax/xml/stream/events/Attribute.class +INFO: Loading Class: javax/xml/stream/events/Characters.class +INFO: Loading Class: javax/xml/stream/events/Comment.class +INFO: Loading Class: javax/xml/stream/events/DTD.class +INFO: Loading Class: javax/xml/stream/events/EndDocument.class +INFO: Loading Class: javax/xml/stream/events/EndElement.class +INFO: Loading Class: javax/xml/stream/events/EntityDeclaration.class +INFO: Loading Class: javax/xml/stream/events/EntityReference.class +INFO: Loading Class: javax/xml/stream/events/Namespace.class +INFO: Loading Class: javax/xml/stream/events/NotationDeclaration.class +INFO: Loading Class: javax/xml/stream/events/ProcessingInstruction.class +INFO: Loading Class: javax/xml/stream/events/StartDocument.class +INFO: Loading Class: javax/xml/stream/events/StartElement.class +INFO: Loading Class: javax/xml/stream/events/XMLEvent.class +INFO: Loading Class: javax/xml/stream/util/EventReaderDelegate.class +INFO: Loading Class: javax/xml/stream/util/StreamReaderDelegate.class +INFO: Loading Class: javax/xml/stream/util/XMLEventAllocator.class +INFO: Loading Class: javax/xml/stream/util/XMLEventConsumer.class +INFO: Loading Class: javax/xml/transform/ErrorListener.class +INFO: Loading Class: javax/xml/transform/FactoryFinder$1.class +INFO: Loading Class: javax/xml/transform/FactoryFinder.class +INFO: Loading Class: javax/xml/transform/OutputKeys.class +INFO: Loading Class: javax/xml/transform/Result.class +INFO: Loading Class: javax/xml/transform/SecuritySupport$1.class +INFO: Loading Class: javax/xml/transform/SecuritySupport$2.class +INFO: Loading Class: javax/xml/transform/SecuritySupport$3.class +INFO: Loading Class: javax/xml/transform/SecuritySupport$4.class +INFO: Loading Class: javax/xml/transform/SecuritySupport$5.class +INFO: Loading Class: javax/xml/transform/SecuritySupport.class +INFO: Loading Class: javax/xml/transform/Source.class +INFO: Loading Class: javax/xml/transform/SourceLocator.class +INFO: Loading Class: javax/xml/transform/Templates.class +INFO: Loading Class: javax/xml/transform/Transformer.class +INFO: Loading Class: javax/xml/transform/TransformerConfigurationException.class +INFO: Loading Class: javax/xml/transform/TransformerException.class +INFO: Loading Class: javax/xml/transform/TransformerFactory.class +INFO: Loading Class: javax/xml/transform/TransformerFactoryConfigurationError.class +INFO: Loading Class: javax/xml/transform/URIResolver.class +INFO: Loading Class: javax/xml/transform/dom/DOMLocator.class +INFO: Loading Class: javax/xml/transform/dom/DOMResult.class +INFO: Loading Class: javax/xml/transform/dom/DOMSource.class +INFO: Loading Class: javax/xml/transform/sax/SAXResult.class +INFO: Loading Class: javax/xml/transform/sax/SAXSource.class +INFO: Loading Class: javax/xml/transform/sax/SAXTransformerFactory.class +INFO: Loading Class: javax/xml/transform/sax/TemplatesHandler.class +INFO: Loading Class: javax/xml/transform/sax/TransformerHandler.class +INFO: Loading Class: javax/xml/transform/stax/StAXResult.class +INFO: Loading Class: javax/xml/transform/stax/StAXSource.class +INFO: Loading Class: javax/xml/transform/stream/StreamResult.class +INFO: Loading Class: javax/xml/transform/stream/StreamSource.class +INFO: Loading Class: javax/xml/validation/Schema.class +INFO: Loading Class: javax/xml/validation/SchemaFactory.class +INFO: Loading Class: javax/xml/validation/SchemaFactoryConfigurationError.class +INFO: Loading Class: javax/xml/validation/SchemaFactoryFinder$1.class +INFO: Loading Class: javax/xml/validation/SchemaFactoryFinder$2.class +INFO: Loading Class: javax/xml/validation/SchemaFactoryFinder.class +INFO: Loading Class: javax/xml/validation/SchemaFactoryLoader.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$1.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$2.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$3.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$4.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$5.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$6.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$7.class +INFO: Loading Class: javax/xml/validation/SecuritySupport$8.class +INFO: Loading Class: javax/xml/validation/SecuritySupport.class +INFO: Loading Class: javax/xml/validation/TypeInfoProvider.class +INFO: Loading Class: javax/xml/validation/Validator.class +INFO: Loading Class: javax/xml/validation/ValidatorHandler.class +INFO: Loading Class: javax/xml/ws/Action.class +INFO: Loading Class: javax/xml/ws/AsyncHandler.class +INFO: Loading Class: javax/xml/ws/Binding.class +INFO: Loading Class: javax/xml/ws/BindingProvider.class +INFO: Loading Class: javax/xml/ws/BindingType.class +INFO: Loading Class: javax/xml/ws/Dispatch.class +INFO: Loading Class: javax/xml/ws/Endpoint.class +INFO: Loading Class: javax/xml/ws/EndpointContext.class +INFO: Loading Class: javax/xml/ws/EndpointReference.class +INFO: Loading Class: javax/xml/ws/FaultAction.class +INFO: Loading Class: javax/xml/ws/Holder.class +INFO: Loading Class: javax/xml/ws/LogicalMessage.class +INFO: Loading Class: javax/xml/ws/ProtocolException.class +INFO: Loading Class: javax/xml/ws/Provider.class +INFO: Loading Class: javax/xml/ws/RequestWrapper.class +INFO: Loading Class: javax/xml/ws/RespectBinding.class +INFO: Loading Class: javax/xml/ws/RespectBindingFeature.class +INFO: Loading Class: javax/xml/ws/Response.class +INFO: Loading Class: javax/xml/ws/ResponseWrapper.class +INFO: Loading Class: javax/xml/ws/Service$Mode.class +INFO: Loading Class: javax/xml/ws/Service.class +INFO: Loading Class: javax/xml/ws/ServiceMode.class +INFO: Loading Class: javax/xml/ws/WebEndpoint.class +INFO: Loading Class: javax/xml/ws/WebFault.class +INFO: Loading Class: javax/xml/ws/WebServiceClient.class +INFO: Loading Class: javax/xml/ws/WebServiceContext.class +INFO: Loading Class: javax/xml/ws/WebServiceException.class +INFO: Loading Class: javax/xml/ws/WebServiceFeature.class +INFO: Loading Class: javax/xml/ws/WebServicePermission.class +INFO: Loading Class: javax/xml/ws/WebServiceProvider.class +INFO: Loading Class: javax/xml/ws/WebServiceRef.class +INFO: Loading Class: javax/xml/ws/WebServiceRefs.class +INFO: Loading Class: javax/xml/ws/handler/Handler.class +INFO: Loading Class: javax/xml/ws/handler/HandlerResolver.class +INFO: Loading Class: javax/xml/ws/handler/LogicalHandler.class +INFO: Loading Class: javax/xml/ws/handler/LogicalMessageContext.class +INFO: Loading Class: javax/xml/ws/handler/MessageContext$Scope.class +INFO: Loading Class: javax/xml/ws/handler/MessageContext.class +INFO: Loading Class: javax/xml/ws/handler/PortInfo.class +INFO: Loading Class: javax/xml/ws/handler/soap/SOAPHandler.class +INFO: Loading Class: javax/xml/ws/handler/soap/SOAPMessageContext.class +INFO: Loading Class: javax/xml/ws/http/HTTPBinding.class +INFO: Loading Class: javax/xml/ws/http/HTTPException.class +INFO: Loading Class: javax/xml/ws/soap/Addressing.class +INFO: Loading Class: javax/xml/ws/soap/AddressingFeature$Responses.class +INFO: Loading Class: javax/xml/ws/soap/AddressingFeature.class +INFO: Loading Class: javax/xml/ws/soap/MTOM.class +INFO: Loading Class: javax/xml/ws/soap/MTOMFeature.class +INFO: Loading Class: javax/xml/ws/soap/SOAPBinding.class +INFO: Loading Class: javax/xml/ws/soap/SOAPFaultException.class +INFO: Loading Class: javax/xml/ws/spi/FactoryFinder.class +INFO: Loading Class: javax/xml/ws/spi/Invoker.class +INFO: Loading Class: javax/xml/ws/spi/Provider.class +INFO: Loading Class: javax/xml/ws/spi/ServiceDelegate.class +INFO: Loading Class: javax/xml/ws/spi/WebServiceFeatureAnnotation.class +INFO: Loading Class: javax/xml/ws/spi/http/HttpContext.class +INFO: Loading Class: javax/xml/ws/spi/http/HttpExchange.class +INFO: Loading Class: javax/xml/ws/spi/http/HttpHandler.class +INFO: Loading Class: javax/xml/ws/wsaddressing/W3CEndpointReference$Address.class +INFO: Loading Class: javax/xml/ws/wsaddressing/W3CEndpointReference$Elements.class +INFO: Loading Class: javax/xml/ws/wsaddressing/W3CEndpointReference.class +INFO: Loading Class: javax/xml/ws/wsaddressing/W3CEndpointReferenceBuilder.class +INFO: Loading Class: javax/xml/ws/wsaddressing/package-info.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$1.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$2.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$3.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$4.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$5.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$6.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$7.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport$8.class +INFO: Loading Class: javax/xml/xpath/SecuritySupport.class +INFO: Loading Class: javax/xml/xpath/XPath.class +INFO: Loading Class: javax/xml/xpath/XPathConstants.class +INFO: Loading Class: javax/xml/xpath/XPathException.class +INFO: Loading Class: javax/xml/xpath/XPathExpression.class +INFO: Loading Class: javax/xml/xpath/XPathExpressionException.class +INFO: Loading Class: javax/xml/xpath/XPathFactory.class +INFO: Loading Class: javax/xml/xpath/XPathFactoryConfigurationException.class +INFO: Loading Class: javax/xml/xpath/XPathFactoryFinder$1.class +INFO: Loading Class: javax/xml/xpath/XPathFactoryFinder$2.class +INFO: Loading Class: javax/xml/xpath/XPathFactoryFinder.class +INFO: Loading Class: javax/xml/xpath/XPathFunction.class +INFO: Loading Class: javax/xml/xpath/XPathFunctionException.class +INFO: Loading Class: javax/xml/xpath/XPathFunctionResolver.class +INFO: Loading Class: javax/xml/xpath/XPathVariableResolver.class +INFO: Loading Class: jdk/Exported.class +INFO: Loading Class: jdk/internal/cmm/SystemResourcePressureImpl.class +INFO: Loading Class: jdk/internal/instrumentation/ClassInstrumentation$1.class +INFO: Loading Class: jdk/internal/instrumentation/ClassInstrumentation$2.class +INFO: Loading Class: jdk/internal/instrumentation/ClassInstrumentation$3.class +INFO: Loading Class: jdk/internal/instrumentation/ClassInstrumentation.class +INFO: Loading Class: jdk/internal/instrumentation/Inliner.class +INFO: Loading Class: jdk/internal/instrumentation/InstrumentationMethod.class +INFO: Loading Class: jdk/internal/instrumentation/InstrumentationTarget.class +INFO: Loading Class: jdk/internal/instrumentation/Logger.class +INFO: Loading Class: jdk/internal/instrumentation/MaxLocalsTracker$MaxLocalsMethodVisitor.class +INFO: Loading Class: jdk/internal/instrumentation/MaxLocalsTracker.class +INFO: Loading Class: jdk/internal/instrumentation/MethodCallInliner$CatchBlock.class +INFO: Loading Class: jdk/internal/instrumentation/MethodCallInliner.class +INFO: Loading Class: jdk/internal/instrumentation/MethodInliningAdapter.class +INFO: Loading Class: jdk/internal/instrumentation/MethodMergeAdapter$1.class +INFO: Loading Class: jdk/internal/instrumentation/MethodMergeAdapter.class +INFO: Loading Class: jdk/internal/instrumentation/Tracer$1.class +INFO: Loading Class: jdk/internal/instrumentation/Tracer$InstrumentationData.class +INFO: Loading Class: jdk/internal/instrumentation/Tracer.class +INFO: Loading Class: jdk/internal/instrumentation/TypeMapping.class +INFO: Loading Class: jdk/internal/instrumentation/TypeMappings.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/AnnotationVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/AnnotationWriter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Attribute.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/ByteVector.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/ClassReader.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/ClassVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/ClassWriter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Context.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Edge.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/FieldVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/FieldWriter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Frame.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Handle.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Handler.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Item.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Label.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/MethodVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/MethodWriter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Opcodes.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/Type.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/TypePath.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/TypeReference.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/AdviceAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/AnalyzerAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/CodeSizeEvaluator.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/GeneratorAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/InstructionAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/JSRInlinerAdapter$Instantiation.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/JSRInlinerAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/LocalVariablesSorter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/Method.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/Remapper.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/RemappingAnnotationAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/RemappingClassAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/RemappingFieldAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/RemappingMethodAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/RemappingSignatureAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/SerialVersionUIDAdder$Item.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/SerialVersionUIDAdder.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/SimpleRemapper.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/StaticInitMerger.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/TableSwitchGenerator.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/TryCatchBlockSorter$1.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/commons/TryCatchBlockSorter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/signature/SignatureReader.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/signature/SignatureVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/signature/SignatureWriter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/AbstractInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/AnnotationNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/ClassNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/FieldInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/FieldNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/FrameNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/IincInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/InnerClassNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/InsnList$InsnListIterator.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/InsnList.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/InsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/IntInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/InvokeDynamicInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/JumpInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/LabelNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/LdcInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/LineNumberNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/LocalVariableAnnotationNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/LocalVariableNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/LookupSwitchInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/MethodInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/MethodNode$1.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/MethodNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/MultiANewArrayInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/ParameterNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/TableSwitchInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/TryCatchBlockNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/TypeAnnotationNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/TypeInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/VarInsnNode.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/Analyzer.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/AnalyzerException.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/BasicInterpreter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/BasicValue.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/BasicVerifier.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/Frame.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/Interpreter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/SimpleVerifier.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/SmallSet.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/SourceInterpreter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/SourceValue.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/Subroutine.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/tree/analysis/Value.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/ASMifiable.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/ASMifier.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/CheckAnnotationAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/CheckClassAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/CheckFieldAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/CheckMethodAdapter$1.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/CheckMethodAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/CheckSignatureAdapter.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/Printer.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/Textifiable.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/Textifier.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/TraceAnnotationVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/TraceClassVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/TraceFieldVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/TraceMethodVisitor.class +INFO: Loading Class: jdk/internal/org/objectweb/asm/util/TraceSignatureVisitor.class +INFO: Loading Class: jdk/internal/org/xml/sax/Attributes.class +INFO: Loading Class: jdk/internal/org/xml/sax/ContentHandler.class +INFO: Loading Class: jdk/internal/org/xml/sax/DTDHandler.class +INFO: Loading Class: jdk/internal/org/xml/sax/EntityResolver.class +INFO: Loading Class: jdk/internal/org/xml/sax/ErrorHandler.class +INFO: Loading Class: jdk/internal/org/xml/sax/InputSource.class +INFO: Loading Class: jdk/internal/org/xml/sax/Locator.class +INFO: Loading Class: jdk/internal/org/xml/sax/SAXException.class +INFO: Loading Class: jdk/internal/org/xml/sax/SAXNotRecognizedException.class +INFO: Loading Class: jdk/internal/org/xml/sax/SAXNotSupportedException.class +INFO: Loading Class: jdk/internal/org/xml/sax/SAXParseException.class +INFO: Loading Class: jdk/internal/org/xml/sax/XMLReader.class +INFO: Loading Class: jdk/internal/org/xml/sax/helpers/DefaultHandler.class +INFO: Loading Class: jdk/internal/util/xml/BasicXmlPropertiesProvider.class +INFO: Loading Class: jdk/internal/util/xml/PropertiesDefaultHandler.class +INFO: Loading Class: jdk/internal/util/xml/SAXParser.class +INFO: Loading Class: jdk/internal/util/xml/XMLStreamException.class +INFO: Loading Class: jdk/internal/util/xml/XMLStreamWriter.class +INFO: Loading Class: jdk/internal/util/xml/impl/Attrs.class +INFO: Loading Class: jdk/internal/util/xml/impl/Input.class +INFO: Loading Class: jdk/internal/util/xml/impl/Pair.class +INFO: Loading Class: jdk/internal/util/xml/impl/Parser.class +INFO: Loading Class: jdk/internal/util/xml/impl/ParserSAX.class +INFO: Loading Class: jdk/internal/util/xml/impl/ReaderUTF16.class +INFO: Loading Class: jdk/internal/util/xml/impl/ReaderUTF8.class +INFO: Loading Class: jdk/internal/util/xml/impl/SAXParserImpl.class +INFO: Loading Class: jdk/internal/util/xml/impl/XMLStreamWriterImpl$Element.class +INFO: Loading Class: jdk/internal/util/xml/impl/XMLStreamWriterImpl.class +INFO: Loading Class: jdk/internal/util/xml/impl/XMLWriter.class +INFO: Loading Class: jdk/management/cmm/SystemResourcePressureMXBean.class +INFO: Loading Class: jdk/management/cmm/package-info.class +INFO: Loading Class: jdk/management/resource/BoundedMeter.class +INFO: Loading Class: jdk/management/resource/NotifyingMeter.class +INFO: Loading Class: jdk/management/resource/ResourceAccuracy.class +INFO: Loading Class: jdk/management/resource/ResourceApprover.class +INFO: Loading Class: jdk/management/resource/ResourceContext.class +INFO: Loading Class: jdk/management/resource/ResourceContextFactory.class +INFO: Loading Class: jdk/management/resource/ResourceId.class +INFO: Loading Class: jdk/management/resource/ResourceMeter.class +INFO: Loading Class: jdk/management/resource/ResourceRequest.class +INFO: Loading Class: jdk/management/resource/ResourceRequestDeniedException.class +INFO: Loading Class: jdk/management/resource/ResourceType.class +INFO: Loading Class: jdk/management/resource/SimpleMeter.class +INFO: Loading Class: jdk/management/resource/ThrottledMeter.class +INFO: Loading Class: jdk/management/resource/internal/ApproverGroup.class +INFO: Loading Class: jdk/management/resource/internal/CompletionHandlerWrapper.class +INFO: Loading Class: jdk/management/resource/internal/FutureWrapper.class +INFO: Loading Class: jdk/management/resource/internal/HeapMetrics.class +INFO: Loading Class: jdk/management/resource/internal/ResourceIdImpl.class +INFO: Loading Class: jdk/management/resource/internal/ResourceNatives$1.class +INFO: Loading Class: jdk/management/resource/internal/ResourceNatives.class +INFO: Loading Class: jdk/management/resource/internal/SimpleResourceContext.class +INFO: Loading Class: jdk/management/resource/internal/ThreadMetrics$ThreadSampler.class +INFO: Loading Class: jdk/management/resource/internal/ThreadMetrics.class +INFO: Loading Class: jdk/management/resource/internal/TotalResourceContext$TotalMeter.class +INFO: Loading Class: jdk/management/resource/internal/TotalResourceContext.class +INFO: Loading Class: jdk/management/resource/internal/UnassignedContext.class +INFO: Loading Class: jdk/management/resource/internal/WeakKeyConcurrentHashMap$WeakKey.class +INFO: Loading Class: jdk/management/resource/internal/WeakKeyConcurrentHashMap.class +INFO: Loading Class: jdk/management/resource/internal/WrapInstrumentation.class +INFO: Loading Class: jdk/management/resource/internal/inst/AbstractInterruptibleChannelRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/AbstractPlainDatagramSocketImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/AbstractPlainSocketImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/AsynchronousServerSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/AsynchronousSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/BaseSSLSocketImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/DatagramChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/DatagramDispatcherRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/DatagramSocketRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/FileChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/FileInputStreamRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/FileOutputStreamRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/InitInstrumentation$TestLogger.class +INFO: Loading Class: jdk/management/resource/internal/inst/InitInstrumentation.class +INFO: Loading Class: jdk/management/resource/internal/inst/NetRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/RandomAccessFileRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SSLServerSocketImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SSLSocketImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/ServerSocketChannelImplRMHooks$NativeDispatcher.class +INFO: Loading Class: jdk/management/resource/internal/inst/ServerSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/ServerSocketRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SimpleAsynchronousFileChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketDispatcherRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketInputStreamRMHooks$AbstractPlainSocketImpl.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketInputStreamRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketOutputStreamRMHooks$AbstractPlainSocketImpl.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketOutputStreamRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketRMHooks$SocketImpl.class +INFO: Loading Class: jdk/management/resource/internal/inst/SocketRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/StaticInstrumentation$InstrumentationLogger.class +INFO: Loading Class: jdk/management/resource/internal/inst/StaticInstrumentation.class +INFO: Loading Class: jdk/management/resource/internal/inst/ThreadRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/UnixAsynchronousServerSocketChannelImplRMHooks$NativeDispatcher.class +INFO: Loading Class: jdk/management/resource/internal/inst/UnixAsynchronousServerSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/UnixAsynchronousSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/WindowsAsynchronousFileChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/WindowsAsynchronousServerSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/WindowsAsynchronousSocketChannelImplRMHooks.class +INFO: Loading Class: jdk/management/resource/internal/inst/WrapInstrumentationRMHooks.class +INFO: Loading Class: jdk/management/resource/package-info.class +INFO: Loading Class: jdk/net/ExtendedSocketOptions$ExtSocketOption.class +INFO: Loading Class: jdk/net/ExtendedSocketOptions.class +INFO: Loading Class: jdk/net/NetworkPermission.class +INFO: Loading Class: jdk/net/SocketFlow$Status.class +INFO: Loading Class: jdk/net/SocketFlow.class +INFO: Loading Class: jdk/net/Sockets$1.class +INFO: Loading Class: jdk/net/Sockets.class +INFO: Loading Class: jdk/net/package-info.class +INFO: Loading Class: org/ietf/jgss/ChannelBinding.class +INFO: Loading Class: org/ietf/jgss/GSSContext.class +INFO: Loading Class: org/ietf/jgss/GSSCredential.class +INFO: Loading Class: org/ietf/jgss/GSSException.class +INFO: Loading Class: org/ietf/jgss/GSSManager.class +INFO: Loading Class: org/ietf/jgss/GSSName.class +INFO: Loading Class: org/ietf/jgss/MessageProp.class +INFO: Loading Class: org/ietf/jgss/Oid.class +INFO: Loading Class: org/jcp/xml/dsig/internal/DigesterOutputStream.class +INFO: Loading Class: org/jcp/xml/dsig/internal/MacOutputStream.class +INFO: Loading Class: org/jcp/xml/dsig/internal/SignerOutputStream.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/AbstractDOMSignatureMethod$Type.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/AbstractDOMSignatureMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/ApacheData.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/ApacheTransform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMBase64Transform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMDigestMethod$SHA1.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMDigestMethod$SHA256.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMDigestMethod$SHA384.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMDigestMethod$SHA512.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMDigestMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod$SHA1.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod$SHA256.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod$SHA384.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod$SHA512.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyInfo.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory$UnmarshalContext.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyName.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue$DSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue$EC$1.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue$EC$2.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue$EC.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue$RSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue$Unknown.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMKeyValue.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMManifest.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMPGPData.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMReference$1.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMReference$2.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMReference.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA1withDSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA1withECDSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA1withRSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA256withDSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA256withECDSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA256withRSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA384withECDSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA384withRSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA512withECDSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod$SHA512withRSA.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSignedInfo.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMStructure.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSubTreeData$DelayedNodeIterator.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMSubTreeData.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMTransform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMUtils$NodeSet$1.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMUtils$NodeSet.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMUtils.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMX509Data.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXMLObject.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXMLSignature$DOMSignatureValue.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXMLSignature.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory$UnmarshalContext.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXPathTransform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/Utils.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/XMLDSigRI$1.class +INFO: Loading Class: org/jcp/xml/dsig/internal/dom/XMLDSigRI.class +INFO: Loading Class: org/omg/CORBA/ACTIVITY_COMPLETED.class +INFO: Loading Class: org/omg/CORBA/ACTIVITY_REQUIRED.class +INFO: Loading Class: org/omg/CORBA/ARG_IN.class +INFO: Loading Class: org/omg/CORBA/ARG_INOUT.class +INFO: Loading Class: org/omg/CORBA/ARG_OUT.class +INFO: Loading Class: org/omg/CORBA/Any.class +INFO: Loading Class: org/omg/CORBA/AnyHolder.class +INFO: Loading Class: org/omg/CORBA/AnySeqHelper.class +INFO: Loading Class: org/omg/CORBA/AnySeqHolder.class +INFO: Loading Class: org/omg/CORBA/BAD_CONTEXT.class +INFO: Loading Class: org/omg/CORBA/BAD_INV_ORDER.class +INFO: Loading Class: org/omg/CORBA/BAD_OPERATION.class +INFO: Loading Class: org/omg/CORBA/BAD_PARAM.class +INFO: Loading Class: org/omg/CORBA/BAD_POLICY.class +INFO: Loading Class: org/omg/CORBA/BAD_POLICY_TYPE.class +INFO: Loading Class: org/omg/CORBA/BAD_POLICY_VALUE.class +INFO: Loading Class: org/omg/CORBA/BAD_QOS.class +INFO: Loading Class: org/omg/CORBA/BAD_TYPECODE.class +INFO: Loading Class: org/omg/CORBA/BooleanHolder.class +INFO: Loading Class: org/omg/CORBA/BooleanSeqHelper.class +INFO: Loading Class: org/omg/CORBA/BooleanSeqHolder.class +INFO: Loading Class: org/omg/CORBA/Bounds.class +INFO: Loading Class: org/omg/CORBA/ByteHolder.class +INFO: Loading Class: org/omg/CORBA/CODESET_INCOMPATIBLE.class +INFO: Loading Class: org/omg/CORBA/COMM_FAILURE.class +INFO: Loading Class: org/omg/CORBA/CTX_RESTRICT_SCOPE.class +INFO: Loading Class: org/omg/CORBA/CharHolder.class +INFO: Loading Class: org/omg/CORBA/CharSeqHelper.class +INFO: Loading Class: org/omg/CORBA/CharSeqHolder.class +INFO: Loading Class: org/omg/CORBA/CompletionStatus.class +INFO: Loading Class: org/omg/CORBA/CompletionStatusHelper.class +INFO: Loading Class: org/omg/CORBA/Context.class +INFO: Loading Class: org/omg/CORBA/ContextList.class +INFO: Loading Class: org/omg/CORBA/Current.class +INFO: Loading Class: org/omg/CORBA/CurrentHelper.class +INFO: Loading Class: org/omg/CORBA/CurrentHolder.class +INFO: Loading Class: org/omg/CORBA/CurrentOperations.class +INFO: Loading Class: org/omg/CORBA/CustomMarshal.class +INFO: Loading Class: org/omg/CORBA/DATA_CONVERSION.class +INFO: Loading Class: org/omg/CORBA/DataInputStream.class +INFO: Loading Class: org/omg/CORBA/DataOutputStream.class +INFO: Loading Class: org/omg/CORBA/DefinitionKind.class +INFO: Loading Class: org/omg/CORBA/DefinitionKindHelper.class +INFO: Loading Class: org/omg/CORBA/DomainManager.class +INFO: Loading Class: org/omg/CORBA/DomainManagerOperations.class +INFO: Loading Class: org/omg/CORBA/DoubleHolder.class +INFO: Loading Class: org/omg/CORBA/DoubleSeqHelper.class +INFO: Loading Class: org/omg/CORBA/DoubleSeqHolder.class +INFO: Loading Class: org/omg/CORBA/DynAny.class +INFO: Loading Class: org/omg/CORBA/DynAnyPackage/Invalid.class +INFO: Loading Class: org/omg/CORBA/DynAnyPackage/InvalidSeq.class +INFO: Loading Class: org/omg/CORBA/DynAnyPackage/InvalidValue.class +INFO: Loading Class: org/omg/CORBA/DynAnyPackage/TypeMismatch.class +INFO: Loading Class: org/omg/CORBA/DynArray.class +INFO: Loading Class: org/omg/CORBA/DynEnum.class +INFO: Loading Class: org/omg/CORBA/DynFixed.class +INFO: Loading Class: org/omg/CORBA/DynSequence.class +INFO: Loading Class: org/omg/CORBA/DynStruct.class +INFO: Loading Class: org/omg/CORBA/DynUnion.class +INFO: Loading Class: org/omg/CORBA/DynValue.class +INFO: Loading Class: org/omg/CORBA/DynamicImplementation.class +INFO: Loading Class: org/omg/CORBA/Environment.class +INFO: Loading Class: org/omg/CORBA/ExceptionList.class +INFO: Loading Class: org/omg/CORBA/FREE_MEM.class +INFO: Loading Class: org/omg/CORBA/FieldNameHelper.class +INFO: Loading Class: org/omg/CORBA/FixedHolder.class +INFO: Loading Class: org/omg/CORBA/FloatHolder.class +INFO: Loading Class: org/omg/CORBA/FloatSeqHelper.class +INFO: Loading Class: org/omg/CORBA/FloatSeqHolder.class +INFO: Loading Class: org/omg/CORBA/IDLType.class +INFO: Loading Class: org/omg/CORBA/IDLTypeHelper.class +INFO: Loading Class: org/omg/CORBA/IDLTypeOperations.class +INFO: Loading Class: org/omg/CORBA/IMP_LIMIT.class +INFO: Loading Class: org/omg/CORBA/INITIALIZE.class +INFO: Loading Class: org/omg/CORBA/INTERNAL.class +INFO: Loading Class: org/omg/CORBA/INTF_REPOS.class +INFO: Loading Class: org/omg/CORBA/INVALID_ACTIVITY.class +INFO: Loading Class: org/omg/CORBA/INVALID_TRANSACTION.class +INFO: Loading Class: org/omg/CORBA/INV_FLAG.class +INFO: Loading Class: org/omg/CORBA/INV_IDENT.class +INFO: Loading Class: org/omg/CORBA/INV_OBJREF.class +INFO: Loading Class: org/omg/CORBA/INV_POLICY.class +INFO: Loading Class: org/omg/CORBA/IRObject.class +INFO: Loading Class: org/omg/CORBA/IRObjectOperations.class +INFO: Loading Class: org/omg/CORBA/IdentifierHelper.class +INFO: Loading Class: org/omg/CORBA/IntHolder.class +INFO: Loading Class: org/omg/CORBA/LocalObject.class +INFO: Loading Class: org/omg/CORBA/LongHolder.class +INFO: Loading Class: org/omg/CORBA/LongLongSeqHelper.class +INFO: Loading Class: org/omg/CORBA/LongLongSeqHolder.class +INFO: Loading Class: org/omg/CORBA/LongSeqHelper.class +INFO: Loading Class: org/omg/CORBA/LongSeqHolder.class +INFO: Loading Class: org/omg/CORBA/MARSHAL.class +INFO: Loading Class: org/omg/CORBA/NO_IMPLEMENT.class +INFO: Loading Class: org/omg/CORBA/NO_MEMORY.class +INFO: Loading Class: org/omg/CORBA/NO_PERMISSION.class +INFO: Loading Class: org/omg/CORBA/NO_RESOURCES.class +INFO: Loading Class: org/omg/CORBA/NO_RESPONSE.class +INFO: Loading Class: org/omg/CORBA/NVList.class +INFO: Loading Class: org/omg/CORBA/NameValuePair.class +INFO: Loading Class: org/omg/CORBA/NameValuePairHelper.class +INFO: Loading Class: org/omg/CORBA/NamedValue.class +INFO: Loading Class: org/omg/CORBA/OBJECT_NOT_EXIST.class +INFO: Loading Class: org/omg/CORBA/OBJ_ADAPTER.class +INFO: Loading Class: org/omg/CORBA/OMGVMCID.class +INFO: Loading Class: org/omg/CORBA/ORB$1.class +INFO: Loading Class: org/omg/CORBA/ORB$2.class +INFO: Loading Class: org/omg/CORBA/ORB.class +INFO: Loading Class: org/omg/CORBA/ORBPackage/InconsistentTypeCode.class +INFO: Loading Class: org/omg/CORBA/ORBPackage/InvalidName.class +INFO: Loading Class: org/omg/CORBA/Object.class +INFO: Loading Class: org/omg/CORBA/ObjectHelper.class +INFO: Loading Class: org/omg/CORBA/ObjectHolder.class +INFO: Loading Class: org/omg/CORBA/OctetSeqHelper.class +INFO: Loading Class: org/omg/CORBA/OctetSeqHolder.class +INFO: Loading Class: org/omg/CORBA/PERSIST_STORE.class +INFO: Loading Class: org/omg/CORBA/PRIVATE_MEMBER.class +INFO: Loading Class: org/omg/CORBA/PUBLIC_MEMBER.class +INFO: Loading Class: org/omg/CORBA/ParameterMode.class +INFO: Loading Class: org/omg/CORBA/ParameterModeHelper.class +INFO: Loading Class: org/omg/CORBA/ParameterModeHolder.class +INFO: Loading Class: org/omg/CORBA/Policy.class +INFO: Loading Class: org/omg/CORBA/PolicyError.class +INFO: Loading Class: org/omg/CORBA/PolicyErrorCodeHelper.class +INFO: Loading Class: org/omg/CORBA/PolicyErrorHelper.class +INFO: Loading Class: org/omg/CORBA/PolicyErrorHolder.class +INFO: Loading Class: org/omg/CORBA/PolicyHelper.class +INFO: Loading Class: org/omg/CORBA/PolicyHolder.class +INFO: Loading Class: org/omg/CORBA/PolicyListHelper.class +INFO: Loading Class: org/omg/CORBA/PolicyListHolder.class +INFO: Loading Class: org/omg/CORBA/PolicyOperations.class +INFO: Loading Class: org/omg/CORBA/PolicyTypeHelper.class +INFO: Loading Class: org/omg/CORBA/Principal.class +INFO: Loading Class: org/omg/CORBA/PrincipalHolder.class +INFO: Loading Class: org/omg/CORBA/REBIND.class +INFO: Loading Class: org/omg/CORBA/RepositoryIdHelper.class +INFO: Loading Class: org/omg/CORBA/Request.class +INFO: Loading Class: org/omg/CORBA/ServerRequest.class +INFO: Loading Class: org/omg/CORBA/ServiceDetail.class +INFO: Loading Class: org/omg/CORBA/ServiceDetailHelper.class +INFO: Loading Class: org/omg/CORBA/ServiceInformation.class +INFO: Loading Class: org/omg/CORBA/ServiceInformationHelper.class +INFO: Loading Class: org/omg/CORBA/ServiceInformationHolder.class +INFO: Loading Class: org/omg/CORBA/SetOverrideType.class +INFO: Loading Class: org/omg/CORBA/SetOverrideTypeHelper.class +INFO: Loading Class: org/omg/CORBA/ShortHolder.class +INFO: Loading Class: org/omg/CORBA/ShortSeqHelper.class +INFO: Loading Class: org/omg/CORBA/ShortSeqHolder.class +INFO: Loading Class: org/omg/CORBA/StringHolder.class +INFO: Loading Class: org/omg/CORBA/StringSeqHelper.class +INFO: Loading Class: org/omg/CORBA/StringSeqHolder.class +INFO: Loading Class: org/omg/CORBA/StringValueHelper.class +INFO: Loading Class: org/omg/CORBA/StructMember.class +INFO: Loading Class: org/omg/CORBA/StructMemberHelper.class +INFO: Loading Class: org/omg/CORBA/SystemException.class +INFO: Loading Class: org/omg/CORBA/TCKind.class +INFO: Loading Class: org/omg/CORBA/TIMEOUT.class +INFO: Loading Class: org/omg/CORBA/TRANSACTION_MODE.class +INFO: Loading Class: org/omg/CORBA/TRANSACTION_REQUIRED.class +INFO: Loading Class: org/omg/CORBA/TRANSACTION_ROLLEDBACK.class +INFO: Loading Class: org/omg/CORBA/TRANSACTION_UNAVAILABLE.class +INFO: Loading Class: org/omg/CORBA/TRANSIENT.class +INFO: Loading Class: org/omg/CORBA/TypeCode.class +INFO: Loading Class: org/omg/CORBA/TypeCodeHolder.class +INFO: Loading Class: org/omg/CORBA/TypeCodePackage/BadKind.class +INFO: Loading Class: org/omg/CORBA/TypeCodePackage/Bounds.class +INFO: Loading Class: org/omg/CORBA/ULongLongSeqHelper.class +INFO: Loading Class: org/omg/CORBA/ULongLongSeqHolder.class +INFO: Loading Class: org/omg/CORBA/ULongSeqHelper.class +INFO: Loading Class: org/omg/CORBA/ULongSeqHolder.class +INFO: Loading Class: org/omg/CORBA/UNKNOWN.class +INFO: Loading Class: org/omg/CORBA/UNSUPPORTED_POLICY.class +INFO: Loading Class: org/omg/CORBA/UNSUPPORTED_POLICY_VALUE.class +INFO: Loading Class: org/omg/CORBA/UShortSeqHelper.class +INFO: Loading Class: org/omg/CORBA/UShortSeqHolder.class +INFO: Loading Class: org/omg/CORBA/UnionMember.class +INFO: Loading Class: org/omg/CORBA/UnionMemberHelper.class +INFO: Loading Class: org/omg/CORBA/UnknownUserException.class +INFO: Loading Class: org/omg/CORBA/UnknownUserExceptionHelper.class +INFO: Loading Class: org/omg/CORBA/UnknownUserExceptionHolder.class +INFO: Loading Class: org/omg/CORBA/UserException.class +INFO: Loading Class: org/omg/CORBA/VM_ABSTRACT.class +INFO: Loading Class: org/omg/CORBA/VM_CUSTOM.class +INFO: Loading Class: org/omg/CORBA/VM_NONE.class +INFO: Loading Class: org/omg/CORBA/VM_TRUNCATABLE.class +INFO: Loading Class: org/omg/CORBA/ValueBaseHelper.class +INFO: Loading Class: org/omg/CORBA/ValueBaseHolder.class +INFO: Loading Class: org/omg/CORBA/ValueMember.class +INFO: Loading Class: org/omg/CORBA/ValueMemberHelper.class +INFO: Loading Class: org/omg/CORBA/VersionSpecHelper.class +INFO: Loading Class: org/omg/CORBA/VisibilityHelper.class +INFO: Loading Class: org/omg/CORBA/WCharSeqHelper.class +INFO: Loading Class: org/omg/CORBA/WCharSeqHolder.class +INFO: Loading Class: org/omg/CORBA/WStringSeqHelper.class +INFO: Loading Class: org/omg/CORBA/WStringSeqHolder.class +INFO: Loading Class: org/omg/CORBA/WStringValueHelper.class +INFO: Loading Class: org/omg/CORBA/WrongTransaction.class +INFO: Loading Class: org/omg/CORBA/WrongTransactionHelper.class +INFO: Loading Class: org/omg/CORBA/WrongTransactionHolder.class +INFO: Loading Class: org/omg/CORBA/_IDLTypeStub.class +INFO: Loading Class: org/omg/CORBA/_PolicyStub.class +INFO: Loading Class: org/omg/CORBA/portable/ApplicationException.class +INFO: Loading Class: org/omg/CORBA/portable/BoxedValueHelper.class +INFO: Loading Class: org/omg/CORBA/portable/CustomValue.class +INFO: Loading Class: org/omg/CORBA/portable/Delegate.class +INFO: Loading Class: org/omg/CORBA/portable/IDLEntity.class +INFO: Loading Class: org/omg/CORBA/portable/IndirectionException.class +INFO: Loading Class: org/omg/CORBA/portable/InputStream.class +INFO: Loading Class: org/omg/CORBA/portable/InvokeHandler.class +INFO: Loading Class: org/omg/CORBA/portable/ObjectImpl.class +INFO: Loading Class: org/omg/CORBA/portable/OutputStream.class +INFO: Loading Class: org/omg/CORBA/portable/RemarshalException.class +INFO: Loading Class: org/omg/CORBA/portable/ResponseHandler.class +INFO: Loading Class: org/omg/CORBA/portable/ServantObject.class +INFO: Loading Class: org/omg/CORBA/portable/Streamable.class +INFO: Loading Class: org/omg/CORBA/portable/StreamableValue.class +INFO: Loading Class: org/omg/CORBA/portable/UnknownException.class +INFO: Loading Class: org/omg/CORBA/portable/ValueBase.class +INFO: Loading Class: org/omg/CORBA/portable/ValueFactory.class +INFO: Loading Class: org/omg/CORBA/portable/ValueInputStream.class +INFO: Loading Class: org/omg/CORBA/portable/ValueOutputStream.class +INFO: Loading Class: org/omg/CORBA_2_3/ORB.class +INFO: Loading Class: org/omg/CORBA_2_3/portable/Delegate.class +INFO: Loading Class: org/omg/CORBA_2_3/portable/InputStream$1.class +INFO: Loading Class: org/omg/CORBA_2_3/portable/InputStream.class +INFO: Loading Class: org/omg/CORBA_2_3/portable/ObjectImpl.class +INFO: Loading Class: org/omg/CORBA_2_3/portable/OutputStream$1.class +INFO: Loading Class: org/omg/CORBA_2_3/portable/OutputStream.class +INFO: Loading Class: org/omg/CosNaming/Binding.class +INFO: Loading Class: org/omg/CosNaming/BindingHelper.class +INFO: Loading Class: org/omg/CosNaming/BindingHolder.class +INFO: Loading Class: org/omg/CosNaming/BindingIterator.class +INFO: Loading Class: org/omg/CosNaming/BindingIteratorHelper.class +INFO: Loading Class: org/omg/CosNaming/BindingIteratorHolder.class +INFO: Loading Class: org/omg/CosNaming/BindingIteratorOperations.class +INFO: Loading Class: org/omg/CosNaming/BindingIteratorPOA.class +INFO: Loading Class: org/omg/CosNaming/BindingListHelper.class +INFO: Loading Class: org/omg/CosNaming/BindingListHolder.class +INFO: Loading Class: org/omg/CosNaming/BindingType.class +INFO: Loading Class: org/omg/CosNaming/BindingTypeHelper.class +INFO: Loading Class: org/omg/CosNaming/BindingTypeHolder.class +INFO: Loading Class: org/omg/CosNaming/IstringHelper.class +INFO: Loading Class: org/omg/CosNaming/NameComponent.class +INFO: Loading Class: org/omg/CosNaming/NameComponentHelper.class +INFO: Loading Class: org/omg/CosNaming/NameComponentHolder.class +INFO: Loading Class: org/omg/CosNaming/NameHelper.class +INFO: Loading Class: org/omg/CosNaming/NameHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContext.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExt.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtOperations.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPOA.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPackage/AddressHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPackage/InvalidAddress.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPackage/InvalidAddressHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPackage/StringNameHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextExtPackage/URLStringHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextOperations.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPOA.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/AlreadyBound.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/AlreadyBoundHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/CannotProceed.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/CannotProceedHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/CannotProceedHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/InvalidName.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/InvalidNameHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/InvalidNameHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotEmpty.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotEmptyHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotEmptyHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotFound.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotFoundHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotFoundHolder.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotFoundReason.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotFoundReasonHelper.class +INFO: Loading Class: org/omg/CosNaming/NamingContextPackage/NotFoundReasonHolder.class +INFO: Loading Class: org/omg/CosNaming/_BindingIteratorImplBase.class +INFO: Loading Class: org/omg/CosNaming/_BindingIteratorStub.class +INFO: Loading Class: org/omg/CosNaming/_NamingContextExtStub.class +INFO: Loading Class: org/omg/CosNaming/_NamingContextImplBase.class +INFO: Loading Class: org/omg/CosNaming/_NamingContextStub.class +INFO: Loading Class: org/omg/Dynamic/Parameter.class +INFO: Loading Class: org/omg/DynamicAny/AnySeqHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynAny.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyFactory.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyFactoryHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyFactoryOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCode.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyPackage/InvalidValue.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyPackage/InvalidValueHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyPackage/TypeMismatch.class +INFO: Loading Class: org/omg/DynamicAny/DynAnyPackage/TypeMismatchHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynAnySeqHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynArray.class +INFO: Loading Class: org/omg/DynamicAny/DynArrayHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynArrayOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynEnum.class +INFO: Loading Class: org/omg/DynamicAny/DynEnumHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynEnumOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynFixed.class +INFO: Loading Class: org/omg/DynamicAny/DynFixedHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynFixedOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynSequence.class +INFO: Loading Class: org/omg/DynamicAny/DynSequenceHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynSequenceOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynStruct.class +INFO: Loading Class: org/omg/DynamicAny/DynStructHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynStructOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynUnion.class +INFO: Loading Class: org/omg/DynamicAny/DynUnionHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynUnionOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynValue.class +INFO: Loading Class: org/omg/DynamicAny/DynValueBox.class +INFO: Loading Class: org/omg/DynamicAny/DynValueBoxOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynValueCommon.class +INFO: Loading Class: org/omg/DynamicAny/DynValueCommonOperations.class +INFO: Loading Class: org/omg/DynamicAny/DynValueHelper.class +INFO: Loading Class: org/omg/DynamicAny/DynValueOperations.class +INFO: Loading Class: org/omg/DynamicAny/FieldNameHelper.class +INFO: Loading Class: org/omg/DynamicAny/NameDynAnyPair.class +INFO: Loading Class: org/omg/DynamicAny/NameDynAnyPairHelper.class +INFO: Loading Class: org/omg/DynamicAny/NameDynAnyPairSeqHelper.class +INFO: Loading Class: org/omg/DynamicAny/NameValuePair.class +INFO: Loading Class: org/omg/DynamicAny/NameValuePairHelper.class +INFO: Loading Class: org/omg/DynamicAny/NameValuePairSeqHelper.class +INFO: Loading Class: org/omg/DynamicAny/_DynAnyFactoryStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynAnyStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynArrayStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynEnumStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynFixedStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynSequenceStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynStructStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynUnionStub.class +INFO: Loading Class: org/omg/DynamicAny/_DynValueStub.class +INFO: Loading Class: org/omg/IOP/CodeSets.class +INFO: Loading Class: org/omg/IOP/Codec.class +INFO: Loading Class: org/omg/IOP/CodecFactory.class +INFO: Loading Class: org/omg/IOP/CodecFactoryHelper.class +INFO: Loading Class: org/omg/IOP/CodecFactoryOperations.class +INFO: Loading Class: org/omg/IOP/CodecFactoryPackage/UnknownEncoding.class +INFO: Loading Class: org/omg/IOP/CodecFactoryPackage/UnknownEncodingHelper.class +INFO: Loading Class: org/omg/IOP/CodecOperations.class +INFO: Loading Class: org/omg/IOP/CodecPackage/FormatMismatch.class +INFO: Loading Class: org/omg/IOP/CodecPackage/FormatMismatchHelper.class +INFO: Loading Class: org/omg/IOP/CodecPackage/InvalidTypeForEncoding.class +INFO: Loading Class: org/omg/IOP/CodecPackage/InvalidTypeForEncodingHelper.class +INFO: Loading Class: org/omg/IOP/CodecPackage/TypeMismatch.class +INFO: Loading Class: org/omg/IOP/CodecPackage/TypeMismatchHelper.class +INFO: Loading Class: org/omg/IOP/ComponentIdHelper.class +INFO: Loading Class: org/omg/IOP/ENCODING_CDR_ENCAPS.class +INFO: Loading Class: org/omg/IOP/Encoding.class +INFO: Loading Class: org/omg/IOP/ExceptionDetailMessage.class +INFO: Loading Class: org/omg/IOP/IOR.class +INFO: Loading Class: org/omg/IOP/IORHelper.class +INFO: Loading Class: org/omg/IOP/IORHolder.class +INFO: Loading Class: org/omg/IOP/MultipleComponentProfileHelper.class +INFO: Loading Class: org/omg/IOP/MultipleComponentProfileHolder.class +INFO: Loading Class: org/omg/IOP/ProfileIdHelper.class +INFO: Loading Class: org/omg/IOP/RMICustomMaxStreamFormat.class +INFO: Loading Class: org/omg/IOP/ServiceContext.class +INFO: Loading Class: org/omg/IOP/ServiceContextHelper.class +INFO: Loading Class: org/omg/IOP/ServiceContextHolder.class +INFO: Loading Class: org/omg/IOP/ServiceContextListHelper.class +INFO: Loading Class: org/omg/IOP/ServiceContextListHolder.class +INFO: Loading Class: org/omg/IOP/ServiceIdHelper.class +INFO: Loading Class: org/omg/IOP/TAG_ALTERNATE_IIOP_ADDRESS.class +INFO: Loading Class: org/omg/IOP/TAG_CODE_SETS.class +INFO: Loading Class: org/omg/IOP/TAG_INTERNET_IOP.class +INFO: Loading Class: org/omg/IOP/TAG_JAVA_CODEBASE.class +INFO: Loading Class: org/omg/IOP/TAG_MULTIPLE_COMPONENTS.class +INFO: Loading Class: org/omg/IOP/TAG_ORB_TYPE.class +INFO: Loading Class: org/omg/IOP/TAG_POLICIES.class +INFO: Loading Class: org/omg/IOP/TAG_RMI_CUSTOM_MAX_STREAM_FORMAT.class +INFO: Loading Class: org/omg/IOP/TaggedComponent.class +INFO: Loading Class: org/omg/IOP/TaggedComponentHelper.class +INFO: Loading Class: org/omg/IOP/TaggedComponentHolder.class +INFO: Loading Class: org/omg/IOP/TaggedProfile.class +INFO: Loading Class: org/omg/IOP/TaggedProfileHelper.class +INFO: Loading Class: org/omg/IOP/TaggedProfileHolder.class +INFO: Loading Class: org/omg/IOP/TransactionService.class +INFO: Loading Class: org/omg/Messaging/SYNC_WITH_TRANSPORT.class +INFO: Loading Class: org/omg/Messaging/SyncScopeHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ACTIVE.class +INFO: Loading Class: org/omg/PortableInterceptor/AdapterManagerIdHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/AdapterNameHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/AdapterStateHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ClientRequestInfo.class +INFO: Loading Class: org/omg/PortableInterceptor/ClientRequestInfoOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/ClientRequestInterceptor.class +INFO: Loading Class: org/omg/PortableInterceptor/ClientRequestInterceptorOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/Current.class +INFO: Loading Class: org/omg/PortableInterceptor/CurrentHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/CurrentOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/DISCARDING.class +INFO: Loading Class: org/omg/PortableInterceptor/ForwardRequest.class +INFO: Loading Class: org/omg/PortableInterceptor/ForwardRequestHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/HOLDING.class +INFO: Loading Class: org/omg/PortableInterceptor/INACTIVE.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInfo.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInfoOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInterceptor.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInterceptorOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInterceptor_3_0.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInterceptor_3_0Helper.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInterceptor_3_0Holder.class +INFO: Loading Class: org/omg/PortableInterceptor/IORInterceptor_3_0Operations.class +INFO: Loading Class: org/omg/PortableInterceptor/Interceptor.class +INFO: Loading Class: org/omg/PortableInterceptor/InterceptorOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/InvalidSlot.class +INFO: Loading Class: org/omg/PortableInterceptor/InvalidSlotHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/LOCATION_FORWARD.class +INFO: Loading Class: org/omg/PortableInterceptor/NON_EXISTENT.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBIdHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfo.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfoOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateName.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidName.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitInfoPackage/ObjectIdHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitializer.class +INFO: Loading Class: org/omg/PortableInterceptor/ORBInitializerOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectIdHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceFactory.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceFactoryHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceFactoryHolder.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceTemplate.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceTemplateHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceTemplateHolder.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ObjectReferenceTemplateSeqHolder.class +INFO: Loading Class: org/omg/PortableInterceptor/PolicyFactory.class +INFO: Loading Class: org/omg/PortableInterceptor/PolicyFactoryOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/RequestInfo.class +INFO: Loading Class: org/omg/PortableInterceptor/RequestInfoOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/SUCCESSFUL.class +INFO: Loading Class: org/omg/PortableInterceptor/SYSTEM_EXCEPTION.class +INFO: Loading Class: org/omg/PortableInterceptor/ServerIdHelper.class +INFO: Loading Class: org/omg/PortableInterceptor/ServerRequestInfo.class +INFO: Loading Class: org/omg/PortableInterceptor/ServerRequestInfoOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/ServerRequestInterceptor.class +INFO: Loading Class: org/omg/PortableInterceptor/ServerRequestInterceptorOperations.class +INFO: Loading Class: org/omg/PortableInterceptor/TRANSPORT_RETRY.class +INFO: Loading Class: org/omg/PortableInterceptor/USER_EXCEPTION.class +INFO: Loading Class: org/omg/PortableServer/AdapterActivator.class +INFO: Loading Class: org/omg/PortableServer/AdapterActivatorOperations.class +INFO: Loading Class: org/omg/PortableServer/Current.class +INFO: Loading Class: org/omg/PortableServer/CurrentHelper.class +INFO: Loading Class: org/omg/PortableServer/CurrentOperations.class +INFO: Loading Class: org/omg/PortableServer/CurrentPackage/NoContext.class +INFO: Loading Class: org/omg/PortableServer/CurrentPackage/NoContextHelper.class +INFO: Loading Class: org/omg/PortableServer/DynamicImplementation.class +INFO: Loading Class: org/omg/PortableServer/ForwardRequest.class +INFO: Loading Class: org/omg/PortableServer/ForwardRequestHelper.class +INFO: Loading Class: org/omg/PortableServer/ID_ASSIGNMENT_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/ID_UNIQUENESS_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/IMPLICIT_ACTIVATION_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/IdAssignmentPolicy.class +INFO: Loading Class: org/omg/PortableServer/IdAssignmentPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/IdAssignmentPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/IdUniquenessPolicy.class +INFO: Loading Class: org/omg/PortableServer/IdUniquenessPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/IdUniquenessPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/ImplicitActivationPolicy.class +INFO: Loading Class: org/omg/PortableServer/ImplicitActivationPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/ImplicitActivationPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/LIFESPAN_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/LifespanPolicy.class +INFO: Loading Class: org/omg/PortableServer/LifespanPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/LifespanPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/POA.class +INFO: Loading Class: org/omg/PortableServer/POAHelper.class +INFO: Loading Class: org/omg/PortableServer/POAManager.class +INFO: Loading Class: org/omg/PortableServer/POAManagerOperations.class +INFO: Loading Class: org/omg/PortableServer/POAManagerPackage/AdapterInactive.class +INFO: Loading Class: org/omg/PortableServer/POAManagerPackage/AdapterInactiveHelper.class +INFO: Loading Class: org/omg/PortableServer/POAManagerPackage/State.class +INFO: Loading Class: org/omg/PortableServer/POAOperations.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/AdapterAlreadyExists.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/AdapterNonExistent.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/AdapterNonExistentHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/InvalidPolicy.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/InvalidPolicyHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/NoServant.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/NoServantHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ObjectAlreadyActive.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ObjectNotActive.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ObjectNotActiveHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ServantAlreadyActive.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ServantAlreadyActiveHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ServantNotActive.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/ServantNotActiveHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/WrongAdapter.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/WrongAdapterHelper.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/WrongPolicy.class +INFO: Loading Class: org/omg/PortableServer/POAPackage/WrongPolicyHelper.class +INFO: Loading Class: org/omg/PortableServer/REQUEST_PROCESSING_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/RequestProcessingPolicy.class +INFO: Loading Class: org/omg/PortableServer/RequestProcessingPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/RequestProcessingPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/SERVANT_RETENTION_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/Servant.class +INFO: Loading Class: org/omg/PortableServer/ServantActivator.class +INFO: Loading Class: org/omg/PortableServer/ServantActivatorHelper.class +INFO: Loading Class: org/omg/PortableServer/ServantActivatorOperations.class +INFO: Loading Class: org/omg/PortableServer/ServantActivatorPOA.class +INFO: Loading Class: org/omg/PortableServer/ServantLocator.class +INFO: Loading Class: org/omg/PortableServer/ServantLocatorHelper.class +INFO: Loading Class: org/omg/PortableServer/ServantLocatorOperations.class +INFO: Loading Class: org/omg/PortableServer/ServantLocatorPOA.class +INFO: Loading Class: org/omg/PortableServer/ServantLocatorPackage/CookieHolder.class +INFO: Loading Class: org/omg/PortableServer/ServantManager.class +INFO: Loading Class: org/omg/PortableServer/ServantManagerOperations.class +INFO: Loading Class: org/omg/PortableServer/ServantRetentionPolicy.class +INFO: Loading Class: org/omg/PortableServer/ServantRetentionPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/ServantRetentionPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/THREAD_POLICY_ID.class +INFO: Loading Class: org/omg/PortableServer/ThreadPolicy.class +INFO: Loading Class: org/omg/PortableServer/ThreadPolicyOperations.class +INFO: Loading Class: org/omg/PortableServer/ThreadPolicyValue.class +INFO: Loading Class: org/omg/PortableServer/_ServantActivatorStub.class +INFO: Loading Class: org/omg/PortableServer/_ServantLocatorStub.class +INFO: Loading Class: org/omg/PortableServer/portable/Delegate.class +INFO: Loading Class: org/omg/SendingContext/RunTime.class +INFO: Loading Class: org/omg/SendingContext/RunTimeOperations.class +INFO: Loading Class: org/omg/stub/java/rmi/_Remote_Stub.class +INFO: Loading Class: org/omg/stub/javax/management/remote/rmi/_RMIConnectionImpl_Tie.class +INFO: Loading Class: org/omg/stub/javax/management/remote/rmi/_RMIConnection_Stub.class +INFO: Loading Class: org/omg/stub/javax/management/remote/rmi/_RMIServerImpl_Tie.class +INFO: Loading Class: org/omg/stub/javax/management/remote/rmi/_RMIServer_Stub.class +INFO: Loading Class: org/w3c/dom/Attr.class +INFO: Loading Class: org/w3c/dom/CDATASection.class +INFO: Loading Class: org/w3c/dom/CharacterData.class +INFO: Loading Class: org/w3c/dom/Comment.class +INFO: Loading Class: org/w3c/dom/DOMConfiguration.class +INFO: Loading Class: org/w3c/dom/DOMError.class +INFO: Loading Class: org/w3c/dom/DOMErrorHandler.class +INFO: Loading Class: org/w3c/dom/DOMException.class +INFO: Loading Class: org/w3c/dom/DOMImplementation.class +INFO: Loading Class: org/w3c/dom/DOMImplementationList.class +INFO: Loading Class: org/w3c/dom/DOMImplementationSource.class +INFO: Loading Class: org/w3c/dom/DOMLocator.class +INFO: Loading Class: org/w3c/dom/DOMStringList.class +INFO: Loading Class: org/w3c/dom/Document.class +INFO: Loading Class: org/w3c/dom/DocumentFragment.class +INFO: Loading Class: org/w3c/dom/DocumentType.class +INFO: Loading Class: org/w3c/dom/Element.class +INFO: Loading Class: org/w3c/dom/Entity.class +INFO: Loading Class: org/w3c/dom/EntityReference.class +INFO: Loading Class: org/w3c/dom/NameList.class +INFO: Loading Class: org/w3c/dom/NamedNodeMap.class +INFO: Loading Class: org/w3c/dom/Node.class +INFO: Loading Class: org/w3c/dom/NodeList.class +INFO: Loading Class: org/w3c/dom/Notation.class +INFO: Loading Class: org/w3c/dom/ProcessingInstruction.class +INFO: Loading Class: org/w3c/dom/Text.class +INFO: Loading Class: org/w3c/dom/TypeInfo.class +INFO: Loading Class: org/w3c/dom/UserDataHandler.class +INFO: Loading Class: org/w3c/dom/bootstrap/DOMImplementationRegistry$1.class +INFO: Loading Class: org/w3c/dom/bootstrap/DOMImplementationRegistry$2.class +INFO: Loading Class: org/w3c/dom/bootstrap/DOMImplementationRegistry$3.class +INFO: Loading Class: org/w3c/dom/bootstrap/DOMImplementationRegistry$4.class +INFO: Loading Class: org/w3c/dom/bootstrap/DOMImplementationRegistry.class +INFO: Loading Class: org/w3c/dom/css/CSS2Properties.class +INFO: Loading Class: org/w3c/dom/css/CSSCharsetRule.class +INFO: Loading Class: org/w3c/dom/css/CSSFontFaceRule.class +INFO: Loading Class: org/w3c/dom/css/CSSImportRule.class +INFO: Loading Class: org/w3c/dom/css/CSSMediaRule.class +INFO: Loading Class: org/w3c/dom/css/CSSPageRule.class +INFO: Loading Class: org/w3c/dom/css/CSSPrimitiveValue.class +INFO: Loading Class: org/w3c/dom/css/CSSRule.class +INFO: Loading Class: org/w3c/dom/css/CSSRuleList.class +INFO: Loading Class: org/w3c/dom/css/CSSStyleDeclaration.class +INFO: Loading Class: org/w3c/dom/css/CSSStyleRule.class +INFO: Loading Class: org/w3c/dom/css/CSSStyleSheet.class +INFO: Loading Class: org/w3c/dom/css/CSSUnknownRule.class +INFO: Loading Class: org/w3c/dom/css/CSSValue.class +INFO: Loading Class: org/w3c/dom/css/CSSValueList.class +INFO: Loading Class: org/w3c/dom/css/Counter.class +INFO: Loading Class: org/w3c/dom/css/DOMImplementationCSS.class +INFO: Loading Class: org/w3c/dom/css/DocumentCSS.class +INFO: Loading Class: org/w3c/dom/css/ElementCSSInlineStyle.class +INFO: Loading Class: org/w3c/dom/css/RGBColor.class +INFO: Loading Class: org/w3c/dom/css/Rect.class +INFO: Loading Class: org/w3c/dom/css/ViewCSS.class +INFO: Loading Class: org/w3c/dom/events/DocumentEvent.class +INFO: Loading Class: org/w3c/dom/events/Event.class +INFO: Loading Class: org/w3c/dom/events/EventException.class +INFO: Loading Class: org/w3c/dom/events/EventListener.class +INFO: Loading Class: org/w3c/dom/events/EventTarget.class +INFO: Loading Class: org/w3c/dom/events/MouseEvent.class +INFO: Loading Class: org/w3c/dom/events/MutationEvent.class +INFO: Loading Class: org/w3c/dom/events/UIEvent.class +INFO: Loading Class: org/w3c/dom/html/HTMLAnchorElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLAppletElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLAreaElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLBRElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLBaseElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLBaseFontElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLBodyElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLButtonElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLCollection.class +INFO: Loading Class: org/w3c/dom/html/HTMLDListElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLDOMImplementation.class +INFO: Loading Class: org/w3c/dom/html/HTMLDirectoryElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLDivElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLDocument.class +INFO: Loading Class: org/w3c/dom/html/HTMLElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLFieldSetElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLFontElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLFormElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLFrameElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLFrameSetElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLHRElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLHeadElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLHeadingElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLHtmlElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLIFrameElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLImageElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLInputElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLIsIndexElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLLIElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLLabelElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLLegendElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLLinkElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLMapElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLMenuElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLMetaElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLModElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLOListElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLObjectElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLOptGroupElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLOptionElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLParagraphElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLParamElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLPreElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLQuoteElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLScriptElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLSelectElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLStyleElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTableCaptionElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTableCellElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTableColElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTableElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTableRowElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTableSectionElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTextAreaElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLTitleElement.class +INFO: Loading Class: org/w3c/dom/html/HTMLUListElement.class +INFO: Loading Class: org/w3c/dom/ls/DOMImplementationLS.class +INFO: Loading Class: org/w3c/dom/ls/LSException.class +INFO: Loading Class: org/w3c/dom/ls/LSInput.class +INFO: Loading Class: org/w3c/dom/ls/LSLoadEvent.class +INFO: Loading Class: org/w3c/dom/ls/LSOutput.class +INFO: Loading Class: org/w3c/dom/ls/LSParser.class +INFO: Loading Class: org/w3c/dom/ls/LSParserFilter.class +INFO: Loading Class: org/w3c/dom/ls/LSProgressEvent.class +INFO: Loading Class: org/w3c/dom/ls/LSResourceResolver.class +INFO: Loading Class: org/w3c/dom/ls/LSSerializer.class +INFO: Loading Class: org/w3c/dom/ls/LSSerializerFilter.class +INFO: Loading Class: org/w3c/dom/ranges/DocumentRange.class +INFO: Loading Class: org/w3c/dom/ranges/Range.class +INFO: Loading Class: org/w3c/dom/ranges/RangeException.class +INFO: Loading Class: org/w3c/dom/stylesheets/DocumentStyle.class +INFO: Loading Class: org/w3c/dom/stylesheets/LinkStyle.class +INFO: Loading Class: org/w3c/dom/stylesheets/MediaList.class +INFO: Loading Class: org/w3c/dom/stylesheets/StyleSheet.class +INFO: Loading Class: org/w3c/dom/stylesheets/StyleSheetList.class +INFO: Loading Class: org/w3c/dom/traversal/DocumentTraversal.class +INFO: Loading Class: org/w3c/dom/traversal/NodeFilter.class +INFO: Loading Class: org/w3c/dom/traversal/NodeIterator.class +INFO: Loading Class: org/w3c/dom/traversal/TreeWalker.class +INFO: Loading Class: org/w3c/dom/views/AbstractView.class +INFO: Loading Class: org/w3c/dom/views/DocumentView.class +INFO: Loading Class: org/w3c/dom/xpath/XPathEvaluator.class +INFO: Loading Class: org/w3c/dom/xpath/XPathException.class +INFO: Loading Class: org/w3c/dom/xpath/XPathExpression.class +INFO: Loading Class: org/w3c/dom/xpath/XPathNSResolver.class +INFO: Loading Class: org/w3c/dom/xpath/XPathNamespace.class +INFO: Loading Class: org/w3c/dom/xpath/XPathResult.class +INFO: Loading Class: org/xml/sax/AttributeList.class +INFO: Loading Class: org/xml/sax/Attributes.class +INFO: Loading Class: org/xml/sax/ContentHandler.class +INFO: Loading Class: org/xml/sax/DTDHandler.class +INFO: Loading Class: org/xml/sax/DocumentHandler.class +INFO: Loading Class: org/xml/sax/EntityResolver.class +INFO: Loading Class: org/xml/sax/ErrorHandler.class +INFO: Loading Class: org/xml/sax/HandlerBase.class +INFO: Loading Class: org/xml/sax/InputSource.class +INFO: Loading Class: org/xml/sax/Locator.class +INFO: Loading Class: org/xml/sax/Parser.class +INFO: Loading Class: org/xml/sax/SAXException.class +INFO: Loading Class: org/xml/sax/SAXNotRecognizedException.class +INFO: Loading Class: org/xml/sax/SAXNotSupportedException.class +INFO: Loading Class: org/xml/sax/SAXParseException.class +INFO: Loading Class: org/xml/sax/XMLFilter.class +INFO: Loading Class: org/xml/sax/XMLReader.class +INFO: Loading Class: org/xml/sax/ext/Attributes2.class +INFO: Loading Class: org/xml/sax/ext/Attributes2Impl.class +INFO: Loading Class: org/xml/sax/ext/DeclHandler.class +INFO: Loading Class: org/xml/sax/ext/DefaultHandler2.class +INFO: Loading Class: org/xml/sax/ext/EntityResolver2.class +INFO: Loading Class: org/xml/sax/ext/LexicalHandler.class +INFO: Loading Class: org/xml/sax/ext/Locator2.class +INFO: Loading Class: org/xml/sax/ext/Locator2Impl.class +INFO: Loading Class: org/xml/sax/helpers/AttributeListImpl.class +INFO: Loading Class: org/xml/sax/helpers/AttributesImpl.class +INFO: Loading Class: org/xml/sax/helpers/DefaultHandler.class +INFO: Loading Class: org/xml/sax/helpers/LocatorImpl.class +INFO: Loading Class: org/xml/sax/helpers/NamespaceSupport$Context.class +INFO: Loading Class: org/xml/sax/helpers/NamespaceSupport.class +INFO: Loading Class: org/xml/sax/helpers/NewInstance.class +INFO: Loading Class: org/xml/sax/helpers/ParserAdapter$AttributeListAdapter.class +INFO: Loading Class: org/xml/sax/helpers/ParserAdapter.class +INFO: Loading Class: org/xml/sax/helpers/ParserFactory.class +INFO: Loading Class: org/xml/sax/helpers/SecuritySupport$1.class +INFO: Loading Class: org/xml/sax/helpers/SecuritySupport$2.class +INFO: Loading Class: org/xml/sax/helpers/SecuritySupport$3.class +INFO: Loading Class: org/xml/sax/helpers/SecuritySupport$4.class +INFO: Loading Class: org/xml/sax/helpers/SecuritySupport$5.class +INFO: Loading Class: org/xml/sax/helpers/SecuritySupport.class +INFO: Loading Class: org/xml/sax/helpers/XMLFilterImpl.class +INFO: Loading Class: org/xml/sax/helpers/XMLReaderAdapter$AttributesAdapter.class +INFO: Loading Class: org/xml/sax/helpers/XMLReaderAdapter.class +INFO: Loading Class: org/xml/sax/helpers/XMLReaderFactory.class +INFO: Loading Class: sun/applet/AppContextCreator.class +INFO: Loading Class: sun/applet/AppletAudioClip.class +INFO: Loading Class: sun/applet/AppletClassLoader$1.class +INFO: Loading Class: sun/applet/AppletClassLoader$2.class +INFO: Loading Class: sun/applet/AppletClassLoader$3.class +INFO: Loading Class: sun/applet/AppletClassLoader.class +INFO: Loading Class: sun/applet/AppletEvent.class +INFO: Loading Class: sun/applet/AppletEventMulticaster.class +INFO: Loading Class: sun/applet/AppletIOException.class +INFO: Loading Class: sun/applet/AppletIllegalArgumentException.class +INFO: Loading Class: sun/applet/AppletImageRef.class +INFO: Loading Class: sun/applet/AppletListener.class +INFO: Loading Class: sun/applet/AppletMessageHandler.class +INFO: Loading Class: sun/applet/AppletObjectInputStream.class +INFO: Loading Class: sun/applet/AppletPanel$1.class +INFO: Loading Class: sun/applet/AppletPanel$2.class +INFO: Loading Class: sun/applet/AppletPanel$3.class +INFO: Loading Class: sun/applet/AppletPanel$4.class +INFO: Loading Class: sun/applet/AppletPanel$5.class +INFO: Loading Class: sun/applet/AppletPanel$6.class +INFO: Loading Class: sun/applet/AppletPanel$7.class +INFO: Loading Class: sun/applet/AppletPanel$8.class +INFO: Loading Class: sun/applet/AppletPanel$9.class +INFO: Loading Class: sun/applet/AppletPanel.class +INFO: Loading Class: sun/applet/AppletProps$1.class +INFO: Loading Class: sun/applet/AppletProps$2.class +INFO: Loading Class: sun/applet/AppletProps.class +INFO: Loading Class: sun/applet/AppletPropsErrorDialog.class +INFO: Loading Class: sun/applet/AppletResourceLoader.class +INFO: Loading Class: sun/applet/AppletSecurity$1.class +INFO: Loading Class: sun/applet/AppletSecurity$2.class +INFO: Loading Class: sun/applet/AppletSecurity.class +INFO: Loading Class: sun/applet/AppletSecurityException.class +INFO: Loading Class: sun/applet/AppletThreadGroup.class +INFO: Loading Class: sun/applet/AppletViewer$1.class +INFO: Loading Class: sun/applet/AppletViewer$1AppletEventListener.class +INFO: Loading Class: sun/applet/AppletViewer$2.class +INFO: Loading Class: sun/applet/AppletViewer$3.class +INFO: Loading Class: sun/applet/AppletViewer$4.class +INFO: Loading Class: sun/applet/AppletViewer$UserActionListener.class +INFO: Loading Class: sun/applet/AppletViewer.class +INFO: Loading Class: sun/applet/AppletViewerFactory.class +INFO: Loading Class: sun/applet/AppletViewerPanel.class +INFO: Loading Class: sun/applet/Main$ParseException.class +INFO: Loading Class: sun/applet/Main.class +INFO: Loading Class: sun/applet/StdAppletViewerFactory.class +INFO: Loading Class: sun/applet/TextFrame$1.class +INFO: Loading Class: sun/applet/TextFrame$1ActionEventListener.class +INFO: Loading Class: sun/applet/TextFrame.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_de.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_es.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_fr.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_it.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_ja.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_ko.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_pt_BR.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_sv.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_zh_CN.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_zh_HK.class +INFO: Loading Class: sun/applet/resources/MsgAppletViewer_zh_TW.class +INFO: Loading Class: sun/audio/AudioData.class +INFO: Loading Class: sun/audio/AudioDataStream.class +INFO: Loading Class: sun/audio/AudioDevice$Info.class +INFO: Loading Class: sun/audio/AudioDevice.class +INFO: Loading Class: sun/audio/AudioPlayer$1.class +INFO: Loading Class: sun/audio/AudioPlayer.class +INFO: Loading Class: sun/audio/AudioSecurityAction.class +INFO: Loading Class: sun/audio/AudioSecurityExceptionAction.class +INFO: Loading Class: sun/audio/AudioStream.class +INFO: Loading Class: sun/audio/AudioStreamSequence.class +INFO: Loading Class: sun/audio/AudioTranslatorStream.class +INFO: Loading Class: sun/audio/ContinuousAudioDataStream.class +INFO: Loading Class: sun/audio/InvalidAudioFormatException.class +INFO: Loading Class: sun/audio/NativeAudioStream.class +INFO: Loading Class: sun/awt/AWTAccessor$AccessibleContextAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$CheckboxMenuItemAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$FileDialogAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$InvocationEventAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$MenuAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$MenuBarAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$MenuComponentAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$MenuItemAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$PopupMenuAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$ScrollPaneAdjustableAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$SequencedEventAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$SystemColorAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$SystemTrayAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$TrayIconAccessor.class +INFO: Loading Class: sun/awt/AWTAutoShutdown$1.class +INFO: Loading Class: sun/awt/AWTCharset$Decoder.class +INFO: Loading Class: sun/awt/AWTCharset$Encoder.class +INFO: Loading Class: sun/awt/AWTCharset.class +INFO: Loading Class: sun/awt/AWTIcon32_java_icon16_png.class +INFO: Loading Class: sun/awt/AWTIcon32_java_icon24_png.class +INFO: Loading Class: sun/awt/AWTIcon32_java_icon32_png.class +INFO: Loading Class: sun/awt/AWTIcon32_java_icon48_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_bw16_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_bw24_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_bw32_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_bw48_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_interim16_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_interim24_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_interim32_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_interim48_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_yellow16_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_yellow24_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_yellow32_png.class +INFO: Loading Class: sun/awt/AWTIcon32_security_icon_yellow48_png.class +INFO: Loading Class: sun/awt/AWTIcon64_java_icon16_png.class +INFO: Loading Class: sun/awt/AWTIcon64_java_icon24_png.class +INFO: Loading Class: sun/awt/AWTIcon64_java_icon32_png.class +INFO: Loading Class: sun/awt/AWTIcon64_java_icon48_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_bw16_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_bw24_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_bw32_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_bw48_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_interim16_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_interim24_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_interim32_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_interim48_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_yellow16_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_yellow24_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_yellow32_png.class +INFO: Loading Class: sun/awt/AWTIcon64_security_icon_yellow48_png.class +INFO: Loading Class: sun/awt/AWTPermissionFactory.class +INFO: Loading Class: sun/awt/AWTSecurityManager.class +INFO: Loading Class: sun/awt/AppContext$4$1.class +INFO: Loading Class: sun/awt/AppContext$4.class +INFO: Loading Class: sun/awt/AppContext$5.class +INFO: Loading Class: sun/awt/AppContext$6$1.class +INFO: Loading Class: sun/awt/AppContext$CreateThreadAction.class +INFO: Loading Class: sun/awt/AppContext$GetAppContextLock.class +INFO: Loading Class: sun/awt/AppContext$PostShutdownEventRunnable.class +INFO: Loading Class: sun/awt/CharsetString.class +INFO: Loading Class: sun/awt/CustomCursor.class +INFO: Loading Class: sun/awt/DebugSettings$1.class +INFO: Loading Class: sun/awt/DebugSettings$2.class +INFO: Loading Class: sun/awt/DebugSettings.class +INFO: Loading Class: sun/awt/DefaultMouseInfoPeer.class +INFO: Loading Class: sun/awt/DesktopBrowse.class +INFO: Loading Class: sun/awt/EmbeddedFrame$1.class +INFO: Loading Class: sun/awt/EmbeddedFrame$NullEmbeddedFramePeer.class +INFO: Loading Class: sun/awt/EventListenerAggregate.class +INFO: Loading Class: sun/awt/EventQueueDelegate$Delegate.class +INFO: Loading Class: sun/awt/ExtendedKeyCodes.class +INFO: Loading Class: sun/awt/FcFontManager.class +INFO: Loading Class: sun/awt/FontConfiguration$1.class +INFO: Loading Class: sun/awt/FontConfiguration$2.class +INFO: Loading Class: sun/awt/FontConfiguration$3.class +INFO: Loading Class: sun/awt/FontConfiguration$PropertiesHandler$FontProperties.class +INFO: Loading Class: sun/awt/FontConfiguration$PropertiesHandler.class +INFO: Loading Class: sun/awt/FwDispatcher.class +INFO: Loading Class: sun/awt/GlobalCursorManager$NativeUpdater.class +INFO: Loading Class: sun/awt/GlobalCursorManager.class +INFO: Loading Class: sun/awt/Graphics2Delegate.class +INFO: Loading Class: sun/awt/HToolkit$1.class +INFO: Loading Class: sun/awt/HToolkit.class +INFO: Loading Class: sun/awt/HeadlessToolkit$1.class +INFO: Loading Class: sun/awt/IconInfo.class +INFO: Loading Class: sun/awt/NativeLibLoader$1.class +INFO: Loading Class: sun/awt/NativeLibLoader.class +INFO: Loading Class: sun/awt/PlatformFont$PlatformFontCache.class +INFO: Loading Class: sun/awt/PlatformFont.class +INFO: Loading Class: sun/awt/ScrollPaneWheelScroller.class +INFO: Loading Class: sun/awt/SubRegionShowable.class +INFO: Loading Class: sun/awt/SunGraphicsCallback$PaintHeavyweightComponentsCallback.class +INFO: Loading Class: sun/awt/SunGraphicsCallback$PrintHeavyweightComponentsCallback.class +INFO: Loading Class: sun/awt/SunToolkit$1AWTInvocationLock.class +INFO: Loading Class: sun/awt/SunToolkit$2.class +INFO: Loading Class: sun/awt/SunToolkit$3.class +INFO: Loading Class: sun/awt/SunToolkit$IllegalThreadException.class +INFO: Loading Class: sun/awt/SunToolkit$InfiniteLoop.class +INFO: Loading Class: sun/awt/SunToolkit$OperationTimedOut.class +INFO: Loading Class: sun/awt/Symbol$Encoder.class +INFO: Loading Class: sun/awt/Symbol.class +INFO: Loading Class: sun/awt/TracedEventQueue.class +INFO: Loading Class: sun/awt/UNIXToolkit.class +INFO: Loading Class: sun/awt/UngrabEvent.class +INFO: Loading Class: sun/awt/WindowIDProvider.class +INFO: Loading Class: sun/awt/X11ComponentPeer.class +INFO: Loading Class: sun/awt/X11CustomCursor$1CCount.class +INFO: Loading Class: sun/awt/X11CustomCursor.class +INFO: Loading Class: sun/awt/X11FontManager.class +INFO: Loading Class: sun/awt/X11GraphicsConfig$X11GCDisposerRecord.class +INFO: Loading Class: sun/awt/X11GraphicsConfig$XDBECapabilities.class +INFO: Loading Class: sun/awt/X11GraphicsConfig.class +INFO: Loading Class: sun/awt/X11GraphicsDevice.class +INFO: Loading Class: sun/awt/X11GraphicsEnvironment$1.class +INFO: Loading Class: sun/awt/X11GraphicsEnvironment$2.class +INFO: Loading Class: sun/awt/X11GraphicsEnvironment.class +INFO: Loading Class: sun/awt/X11InputMethod$IntBuffer.class +INFO: Loading Class: sun/awt/X11InputMethod.class +INFO: Loading Class: sun/awt/X11InputMethodDescriptor.class +INFO: Loading Class: sun/awt/XSettings$Update.class +INFO: Loading Class: sun/awt/XSettings.class +INFO: Loading Class: sun/awt/datatransfer/ClassLoaderObjectInputStream.class +INFO: Loading Class: sun/awt/datatransfer/ClassLoaderObjectOutputStream$1.class +INFO: Loading Class: sun/awt/datatransfer/ClassLoaderObjectOutputStream$2.class +INFO: Loading Class: sun/awt/datatransfer/ClassLoaderObjectOutputStream.class +INFO: Loading Class: sun/awt/datatransfer/ClipboardTransferable$DataFactory.class +INFO: Loading Class: sun/awt/datatransfer/ClipboardTransferable.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$2.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$3.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$4.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$5.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$DataFlavorComparator.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$ReencodingInputStream.class +INFO: Loading Class: sun/awt/datatransfer/SunClipboard$1.class +INFO: Loading Class: sun/awt/datatransfer/SunClipboard$1SunFlavorChangeNotifier.class +INFO: Loading Class: sun/awt/dnd/SunDragSourceContextPeer$1.class +INFO: Loading Class: sun/awt/dnd/SunDragSourceContextPeer$EventDispatcher.class +INFO: Loading Class: sun/awt/dnd/SunDropTargetContextPeer$EventDispatcher.class +INFO: Loading Class: sun/awt/dnd/SunDropTargetContextPeer.class +INFO: Loading Class: sun/awt/geom/AreaOp$1.class +INFO: Loading Class: sun/awt/geom/AreaOp$AddOp.class +INFO: Loading Class: sun/awt/geom/AreaOp$CAGOp.class +INFO: Loading Class: sun/awt/geom/AreaOp$EOWindOp.class +INFO: Loading Class: sun/awt/geom/AreaOp$IntOp.class +INFO: Loading Class: sun/awt/geom/AreaOp$NZWindOp.class +INFO: Loading Class: sun/awt/geom/AreaOp$SubOp.class +INFO: Loading Class: sun/awt/geom/AreaOp$XorOp.class +INFO: Loading Class: sun/awt/geom/AreaOp.class +INFO: Loading Class: sun/awt/geom/ChainEnd.class +INFO: Loading Class: sun/awt/geom/Crossings$EvenOdd.class +INFO: Loading Class: sun/awt/geom/Crossings$NonZero.class +INFO: Loading Class: sun/awt/geom/Crossings.class +INFO: Loading Class: sun/awt/geom/Curve.class +INFO: Loading Class: sun/awt/geom/CurveLink.class +INFO: Loading Class: sun/awt/geom/Edge.class +INFO: Loading Class: sun/awt/geom/Order0.class +INFO: Loading Class: sun/awt/geom/Order1.class +INFO: Loading Class: sun/awt/geom/Order2.class +INFO: Loading Class: sun/awt/geom/Order3.class +INFO: Loading Class: sun/awt/geom/PathConsumer2D.class +INFO: Loading Class: sun/awt/im/AWTInputMethodPopupMenu.class +INFO: Loading Class: sun/awt/im/CompositionArea$FrameWindowAdapter.class +INFO: Loading Class: sun/awt/im/CompositionArea.class +INFO: Loading Class: sun/awt/im/ExecutableInputMethodManager$1.class +INFO: Loading Class: sun/awt/im/ExecutableInputMethodManager$1AWTInvocationLock.class +INFO: Loading Class: sun/awt/im/ExecutableInputMethodManager$2.class +INFO: Loading Class: sun/awt/im/ExecutableInputMethodManager$4.class +INFO: Loading Class: sun/awt/im/InputContext$1.class +INFO: Loading Class: sun/awt/im/InputContext$2.class +INFO: Loading Class: sun/awt/im/InputMethodJFrame.class +INFO: Loading Class: sun/awt/im/InputMethodPopupMenu.class +INFO: Loading Class: sun/awt/im/JInputMethodPopupMenu.class +INFO: Loading Class: sun/awt/im/SimpleInputMethodWindow.class +INFO: Loading Class: sun/awt/image/AbstractMultiResolutionImage.class +INFO: Loading Class: sun/awt/image/BadDepthException.class +INFO: Loading Class: sun/awt/image/BufImgVolatileSurfaceManager.class +INFO: Loading Class: sun/awt/image/BufferedImageDevice.class +INFO: Loading Class: sun/awt/image/ByteArrayImageSource.class +INFO: Loading Class: sun/awt/image/ByteBandedRaster.class +INFO: Loading Class: sun/awt/image/DataBufferNative.class +INFO: Loading Class: sun/awt/image/FileImageSource.class +INFO: Loading Class: sun/awt/image/ImageAccessException.class +INFO: Loading Class: sun/awt/image/ImageCache$ImageSoftReference.class +INFO: Loading Class: sun/awt/image/ImageCache$PixelsKey.class +INFO: Loading Class: sun/awt/image/ImageCache.class +INFO: Loading Class: sun/awt/image/ImageDecoder$1.class +INFO: Loading Class: sun/awt/image/ImageFormatException.class +INFO: Loading Class: sun/awt/image/ImagingLib$1.class +INFO: Loading Class: sun/awt/image/ImagingLib.class +INFO: Loading Class: sun/awt/image/JPEGImageDecoder$1.class +INFO: Loading Class: sun/awt/image/JPEGImageDecoder.class +INFO: Loading Class: sun/awt/image/MultiResolutionCachedImage$1.class +INFO: Loading Class: sun/awt/image/MultiResolutionCachedImage$ImageCacheKey.class +INFO: Loading Class: sun/awt/image/MultiResolutionCachedImage.class +INFO: Loading Class: sun/awt/image/MultiResolutionImage.class +INFO: Loading Class: sun/awt/image/MultiResolutionToolkitImage$ObserverCache.class +INFO: Loading Class: sun/awt/image/MultiResolutionToolkitImage.class +INFO: Loading Class: sun/awt/image/PNGImageDecoder$Chromaticities.class +INFO: Loading Class: sun/awt/image/PNGImageDecoder$PNGException.class +INFO: Loading Class: sun/awt/image/PixelConverter$1.class +INFO: Loading Class: sun/awt/image/ShortBandedRaster.class +INFO: Loading Class: sun/awt/image/ShortComponentRaster.class +INFO: Loading Class: sun/awt/image/ShortInterleavedRaster.class +INFO: Loading Class: sun/awt/image/SurfaceManager$ImageCapabilitiesGc.class +INFO: Loading Class: sun/awt/image/VSyncedBSManager$1.class +INFO: Loading Class: sun/awt/image/VSyncedBSManager$NoLimitVSyncBSMgr.class +INFO: Loading Class: sun/awt/image/VSyncedBSManager$SingleVSyncedBSMgr.class +INFO: Loading Class: sun/awt/image/VSyncedBSManager.class +INFO: Loading Class: sun/awt/image/VolatileSurfaceManager$AcceleratedImageCapabilities.class +INFO: Loading Class: sun/awt/image/WritableRasterNative.class +INFO: Loading Class: sun/awt/image/XbmImageDecoder.class +INFO: Loading Class: sun/awt/image/codec/JPEGImageDecoderImpl$1.class +INFO: Loading Class: sun/awt/image/codec/JPEGImageDecoderImpl.class +INFO: Loading Class: sun/awt/image/codec/JPEGImageEncoderImpl$1.class +INFO: Loading Class: sun/awt/image/codec/JPEGImageEncoderImpl.class +INFO: Loading Class: sun/awt/image/codec/JPEGParam.class +INFO: Loading Class: sun/awt/motif/MFontConfiguration.class +INFO: Loading Class: sun/awt/motif/X11CNS11643$Decoder.class +INFO: Loading Class: sun/awt/motif/X11CNS11643$Encoder.class +INFO: Loading Class: sun/awt/motif/X11CNS11643.class +INFO: Loading Class: sun/awt/motif/X11CNS11643P1.class +INFO: Loading Class: sun/awt/motif/X11CNS11643P2.class +INFO: Loading Class: sun/awt/motif/X11CNS11643P3.class +INFO: Loading Class: sun/awt/motif/X11Dingbats$Encoder.class +INFO: Loading Class: sun/awt/motif/X11Dingbats.class +INFO: Loading Class: sun/awt/motif/X11GB18030_0$Encoder.class +INFO: Loading Class: sun/awt/motif/X11GB18030_0.class +INFO: Loading Class: sun/awt/motif/X11GB18030_1$Encoder.class +INFO: Loading Class: sun/awt/motif/X11GB18030_1.class +INFO: Loading Class: sun/awt/motif/X11JIS0201$Encoder.class +INFO: Loading Class: sun/awt/motif/X11JIS0201.class +INFO: Loading Class: sun/awt/motif/X11JIS0208.class +INFO: Loading Class: sun/awt/motif/X11JIS0212.class +INFO: Loading Class: sun/awt/motif/X11Johab$Encoder.class +INFO: Loading Class: sun/awt/motif/X11Johab.class +INFO: Loading Class: sun/awt/motif/X11SunUnicode_0$Encoder.class +INFO: Loading Class: sun/awt/motif/X11SunUnicode_0.class +INFO: Loading Class: sun/awt/resources/awt_de.class +INFO: Loading Class: sun/awt/resources/awt_es.class +INFO: Loading Class: sun/awt/resources/awt_fr.class +INFO: Loading Class: sun/awt/resources/awt_it.class +INFO: Loading Class: sun/awt/resources/awt_ja.class +INFO: Loading Class: sun/awt/resources/awt_ko.class +INFO: Loading Class: sun/awt/resources/awt_pt_BR.class +INFO: Loading Class: sun/awt/resources/awt_sv.class +INFO: Loading Class: sun/awt/resources/awt_zh_CN.class +INFO: Loading Class: sun/awt/resources/awt_zh_HK.class +INFO: Loading Class: sun/awt/resources/awt_zh_TW.class +INFO: Loading Class: sun/awt/shell/DefaultShellFolder.class +INFO: Loading Class: sun/awt/shell/ShellFolder$1.class +INFO: Loading Class: sun/awt/shell/ShellFolder$2.class +INFO: Loading Class: sun/awt/shell/ShellFolder$3.class +INFO: Loading Class: sun/awt/shell/ShellFolder$4.class +INFO: Loading Class: sun/awt/shell/ShellFolder$Invoker.class +INFO: Loading Class: sun/awt/shell/ShellFolder.class +INFO: Loading Class: sun/awt/shell/ShellFolderColumnInfo.class +INFO: Loading Class: sun/awt/shell/ShellFolderManager$1.class +INFO: Loading Class: sun/awt/shell/ShellFolderManager$DirectInvoker.class +INFO: Loading Class: sun/awt/shell/ShellFolderManager.class +INFO: Loading Class: sun/awt/util/IdentityLinkedList$1.class +INFO: Loading Class: sun/awt/util/IdentityLinkedList$DescendingIterator.class +INFO: Loading Class: sun/awt/windows/ThemeReader.class +INFO: Loading Class: sun/corba/Bridge$1.class +INFO: Loading Class: sun/corba/Bridge$2.class +INFO: Loading Class: sun/corba/Bridge.class +INFO: Loading Class: sun/corba/BridgePermission.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$1.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$2.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$3.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$4.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$5.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$6.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$7.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$8.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory$9.class +INFO: Loading Class: sun/corba/EncapsInputStreamFactory.class +INFO: Loading Class: sun/corba/JavaCorbaAccess.class +INFO: Loading Class: sun/corba/OutputStreamFactory$1.class +INFO: Loading Class: sun/corba/OutputStreamFactory$2.class +INFO: Loading Class: sun/corba/OutputStreamFactory$3.class +INFO: Loading Class: sun/corba/OutputStreamFactory$4.class +INFO: Loading Class: sun/corba/OutputStreamFactory$5.class +INFO: Loading Class: sun/corba/OutputStreamFactory$6.class +INFO: Loading Class: sun/corba/OutputStreamFactory$7.class +INFO: Loading Class: sun/corba/OutputStreamFactory$8.class +INFO: Loading Class: sun/corba/OutputStreamFactory.class +INFO: Loading Class: sun/corba/SharedSecrets.class +INFO: Loading Class: sun/dc/DuctusRenderingEngine$FillAdapter.class +INFO: Loading Class: sun/dc/path/FastPathProducer.class +INFO: Loading Class: sun/dc/path/PathConsumer.class +INFO: Loading Class: sun/dc/path/PathError.class +INFO: Loading Class: sun/dc/path/PathException.class +INFO: Loading Class: sun/dc/pr/PRError.class +INFO: Loading Class: sun/dc/pr/PRException.class +INFO: Loading Class: sun/dc/pr/PathDasher$1.class +INFO: Loading Class: sun/dc/pr/PathDasher.class +INFO: Loading Class: sun/dc/pr/PathFiller$1.class +INFO: Loading Class: sun/dc/pr/PathFiller.class +INFO: Loading Class: sun/dc/pr/PathStroker$1.class +INFO: Loading Class: sun/dc/pr/PathStroker.class +INFO: Loading Class: sun/dc/pr/Rasterizer$ConsumerDisposer.class +INFO: Loading Class: sun/dc/pr/Rasterizer.class +INFO: Loading Class: sun/font/AttributeMap.class +INFO: Loading Class: sun/font/AttributeValues$1.class +INFO: Loading Class: sun/font/BidiUtils.class +INFO: Loading Class: sun/font/CCharToGlyphMapper$Cache$SparseBitShiftingTwoLayerArray.class +INFO: Loading Class: sun/font/CFontManager$1.class +INFO: Loading Class: sun/font/CFontManager$2$1.class +INFO: Loading Class: sun/font/CFontManager$2.class +INFO: Loading Class: sun/font/CFontManager$3.class +INFO: Loading Class: sun/font/CMap$CMapFormat0.class +INFO: Loading Class: sun/font/CMap$CMapFormat10.class +INFO: Loading Class: sun/font/CMap$CMapFormat12.class +INFO: Loading Class: sun/font/CMap$CMapFormat2.class +INFO: Loading Class: sun/font/CMap$CMapFormat4.class +INFO: Loading Class: sun/font/CMap$CMapFormat6.class +INFO: Loading Class: sun/font/CMap$CMapFormat8.class +INFO: Loading Class: sun/font/CMap$NullCMapClass.class +INFO: Loading Class: sun/font/CMap.class +INFO: Loading Class: sun/font/CStrike$GlyphAdvanceCache$SparseBitShiftingTwoLayerArray.class +INFO: Loading Class: sun/font/CStrike$GlyphInfoCache$SparseBitShiftingTwoLayerArray.class +INFO: Loading Class: sun/font/CompositeGlyphMapper.class +INFO: Loading Class: sun/font/CompositeStrike.class +INFO: Loading Class: sun/font/CreatedFontTracker$TempFileDeletionHook.class +INFO: Loading Class: sun/font/CreatedFontTracker.class +INFO: Loading Class: sun/font/Decoration$1.class +INFO: Loading Class: sun/font/Decoration$DecorationImpl.class +INFO: Loading Class: sun/font/Decoration$Label.class +INFO: Loading Class: sun/font/Decoration.class +INFO: Loading Class: sun/font/DelegateStrike.class +INFO: Loading Class: sun/font/DelegatingShape.class +INFO: Loading Class: sun/font/ExtendedTextLabel.class +INFO: Loading Class: sun/font/ExtendedTextSourceLabel.class +INFO: Loading Class: sun/font/FcFontConfiguration.class +INFO: Loading Class: sun/font/FileFont$1.class +INFO: Loading Class: sun/font/FileFont$CreatedFontFileDisposerRecord$1.class +INFO: Loading Class: sun/font/FileFont$CreatedFontFileDisposerRecord.class +INFO: Loading Class: sun/font/FileFontStrike.class +INFO: Loading Class: sun/font/FontConfigManager$FcCompFont.class +INFO: Loading Class: sun/font/FontConfigManager$FontConfigFont.class +INFO: Loading Class: sun/font/FontConfigManager$FontConfigInfo.class +INFO: Loading Class: sun/font/FontConfigManager.class +INFO: Loading Class: sun/font/FontResolver.class +INFO: Loading Class: sun/font/FontRunIterator.class +INFO: Loading Class: sun/font/FontScaler.class +INFO: Loading Class: sun/font/FontScalerException.class +INFO: Loading Class: sun/font/FreetypeFontScaler.class +INFO: Loading Class: sun/font/GlyphDisposedListener.class +INFO: Loading Class: sun/font/GlyphLayout$EngineRecord.class +INFO: Loading Class: sun/font/GlyphLayout$GVData.class +INFO: Loading Class: sun/font/GlyphLayout$LayoutEngine.class +INFO: Loading Class: sun/font/GlyphLayout$LayoutEngineFactory.class +INFO: Loading Class: sun/font/GlyphLayout$LayoutEngineKey.class +INFO: Loading Class: sun/font/GlyphLayout$SDCache$SDKey.class +INFO: Loading Class: sun/font/GlyphLayout$SDCache.class +INFO: Loading Class: sun/font/GlyphLayout.class +INFO: Loading Class: sun/font/GraphicComponent.class +INFO: Loading Class: sun/font/LayoutPathImpl$1.class +INFO: Loading Class: sun/font/LayoutPathImpl$EmptyPath.class +INFO: Loading Class: sun/font/LayoutPathImpl$EndType.class +INFO: Loading Class: sun/font/LayoutPathImpl$SegmentPath$LineInfo.class +INFO: Loading Class: sun/font/LayoutPathImpl$SegmentPath$Mapper.class +INFO: Loading Class: sun/font/LayoutPathImpl$SegmentPath$Segment.class +INFO: Loading Class: sun/font/LayoutPathImpl$SegmentPath.class +INFO: Loading Class: sun/font/LayoutPathImpl$SegmentPathBuilder.class +INFO: Loading Class: sun/font/LayoutPathImpl.class +INFO: Loading Class: sun/font/NativeFont.class +INFO: Loading Class: sun/font/NativeGlyphMapper.class +INFO: Loading Class: sun/font/NativeStrike.class +INFO: Loading Class: sun/font/NativeStrikeDisposer.class +INFO: Loading Class: sun/font/NullFontScaler.class +INFO: Loading Class: sun/font/Script.class +INFO: Loading Class: sun/font/ScriptRun.class +INFO: Loading Class: sun/font/ScriptRunData.class +INFO: Loading Class: sun/font/StandardGlyphVector$ADL.class +INFO: Loading Class: sun/font/StandardGlyphVector$GlyphTransformInfo.class +INFO: Loading Class: sun/font/StandardTextSource.class +INFO: Loading Class: sun/font/StrikeCache$2.class +INFO: Loading Class: sun/font/StrikeCache$WeakDisposerRef.class +INFO: Loading Class: sun/font/SunFontManager$10.class +INFO: Loading Class: sun/font/SunFontManager$12.class +INFO: Loading Class: sun/font/SunFontManager$13.class +INFO: Loading Class: sun/font/SunFontManager$4.class +INFO: Loading Class: sun/font/SunFontManager$5.class +INFO: Loading Class: sun/font/SunFontManager$6.class +INFO: Loading Class: sun/font/SunFontManager$7.class +INFO: Loading Class: sun/font/SunFontManager$8$1.class +INFO: Loading Class: sun/font/SunFontManager$8.class +INFO: Loading Class: sun/font/SunFontManager$9.class +INFO: Loading Class: sun/font/SunFontManager$FamilyDescription.class +INFO: Loading Class: sun/font/SunFontManager$TTorT1Filter.class +INFO: Loading Class: sun/font/SunLayoutEngine.class +INFO: Loading Class: sun/font/T2KFontScaler$1.class +INFO: Loading Class: sun/font/T2KFontScaler$2.class +INFO: Loading Class: sun/font/T2KFontScaler.class +INFO: Loading Class: sun/font/TextLabel.class +INFO: Loading Class: sun/font/TextLabelFactory.class +INFO: Loading Class: sun/font/TextLineComponent.class +INFO: Loading Class: sun/font/TextRecord.class +INFO: Loading Class: sun/font/TextSource.class +INFO: Loading Class: sun/font/TextSourceLabel.class +INFO: Loading Class: sun/font/TrueTypeGlyphMapper.class +INFO: Loading Class: sun/font/Type1Font$1.class +INFO: Loading Class: sun/font/Type1Font$2.class +INFO: Loading Class: sun/font/Type1Font$T1DisposerRecord$1.class +INFO: Loading Class: sun/font/Type1Font$T1DisposerRecord.class +INFO: Loading Class: sun/font/Type1GlyphMapper.class +INFO: Loading Class: sun/font/Underline$IMGrayUnderline.class +INFO: Loading Class: sun/font/Underline$StandardUnderline.class +INFO: Loading Class: sun/font/Underline.class +INFO: Loading Class: sun/font/X11TextRenderer$Tracer.class +INFO: Loading Class: sun/font/X11TextRenderer.class +INFO: Loading Class: sun/font/XMap.class +INFO: Loading Class: sun/font/XRGlyphCache$1.class +INFO: Loading Class: sun/font/XRGlyphCache.class +INFO: Loading Class: sun/font/XRGlyphCacheEntry.class +INFO: Loading Class: sun/font/XRTextRenderer.class +INFO: Loading Class: sun/instrument/InstrumentationImpl$1.class +INFO: Loading Class: sun/instrument/InstrumentationImpl.class +INFO: Loading Class: sun/instrument/TransformerManager$TransformerInfo.class +INFO: Loading Class: sun/instrument/TransformerManager.class +INFO: Loading Class: sun/invoke/WrapperInstance.class +INFO: Loading Class: sun/invoke/empty/Empty.class +INFO: Loading Class: sun/invoke/util/BytecodeDescriptor.class +INFO: Loading Class: sun/invoke/util/BytecodeName.class +INFO: Loading Class: sun/invoke/util/ValueConversions$1.class +INFO: Loading Class: sun/invoke/util/ValueConversions$WrapperCache.class +INFO: Loading Class: sun/invoke/util/ValueConversions.class +INFO: Loading Class: sun/invoke/util/VerifyAccess$1.class +INFO: Loading Class: sun/invoke/util/VerifyAccess.class +INFO: Loading Class: sun/invoke/util/VerifyType.class +INFO: Loading Class: sun/invoke/util/Wrapper$Format.class +INFO: Loading Class: sun/invoke/util/Wrapper.class +INFO: Loading Class: sun/java2d/BackBufferCapsProvider.class +INFO: Loading Class: sun/java2d/CRenderer$Tracer.class +INFO: Loading Class: sun/java2d/CRenderer.class +INFO: Loading Class: sun/java2d/CompositeCRenderer.class +INFO: Loading Class: sun/java2d/DataBufferNIOInt.class +INFO: Loading Class: sun/java2d/HeadlessGraphicsEnvironment.class +INFO: Loading Class: sun/java2d/IntegerNIORaster.class +INFO: Loading Class: sun/java2d/OSXOffScreenSurfaceData.class +INFO: Loading Class: sun/java2d/OSXSurfaceData$CGContextDrawable.class +INFO: Loading Class: sun/java2d/OSXSurfaceData.class +INFO: Loading Class: sun/java2d/Spans$Span.class +INFO: Loading Class: sun/java2d/Spans$SpanIntersection.class +INFO: Loading Class: sun/java2d/Spans.class +INFO: Loading Class: sun/java2d/SunCompositeContext.class +INFO: Loading Class: sun/java2d/SurfaceDataProxy$CountdownTracker.class +INFO: Loading Class: sun/java2d/UnixSurfaceManagerFactory.class +INFO: Loading Class: sun/java2d/cmm/CMMServiceProvider.class +INFO: Loading Class: sun/java2d/cmm/CMSManager$1.class +INFO: Loading Class: sun/java2d/cmm/CMSManager$CMMTracer.class +INFO: Loading Class: sun/java2d/cmm/ColorTransform.class +INFO: Loading Class: sun/java2d/cmm/PCMM.class +INFO: Loading Class: sun/java2d/cmm/Profile.class +INFO: Loading Class: sun/java2d/cmm/ProfileDataVerifier.class +INFO: Loading Class: sun/java2d/cmm/kcms/CMM$1.class +INFO: Loading Class: sun/java2d/cmm/kcms/CMM$KcmsProfile.class +INFO: Loading Class: sun/java2d/cmm/kcms/CMM.class +INFO: Loading Class: sun/java2d/cmm/kcms/CMMImageLayout$ImageLayoutException.class +INFO: Loading Class: sun/java2d/cmm/kcms/CMMImageLayout.class +INFO: Loading Class: sun/java2d/cmm/kcms/ICC_Transform.class +INFO: Loading Class: sun/java2d/cmm/kcms/KcmsServiceProvider.class +INFO: Loading Class: sun/java2d/cmm/kcms/pelArrayInfo.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMS$1.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMS.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSImageLayout$1.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSImageLayout$BandOrder.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSImageLayout$ImageLayoutException.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSImageLayout.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSProfile$TagCache.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSProfile$TagData.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSProfile.class +INFO: Loading Class: sun/java2d/cmm/lcms/LCMSTransform.class +INFO: Loading Class: sun/java2d/cmm/lcms/LcmsServiceProvider.class +INFO: Loading Class: sun/java2d/jules/IdleTileCache.class +INFO: Loading Class: sun/java2d/jules/JulesAATileGenerator.class +INFO: Loading Class: sun/java2d/jules/JulesPathBuf$1.class +INFO: Loading Class: sun/java2d/jules/JulesPathBuf.class +INFO: Loading Class: sun/java2d/jules/JulesRenderingEngine.class +INFO: Loading Class: sun/java2d/jules/JulesShapePipe.class +INFO: Loading Class: sun/java2d/jules/JulesTile.class +INFO: Loading Class: sun/java2d/jules/TileTrapContainer.class +INFO: Loading Class: sun/java2d/jules/TileWorker.class +INFO: Loading Class: sun/java2d/jules/TrapezoidList.class +INFO: Loading Class: sun/java2d/loops/Blit$AnyBlit.class +INFO: Loading Class: sun/java2d/loops/Blit$GeneralMaskBlit.class +INFO: Loading Class: sun/java2d/loops/Blit$GeneralXorBlit.class +INFO: Loading Class: sun/java2d/loops/Blit$TraceBlit.class +INFO: Loading Class: sun/java2d/loops/BlitBg$General.class +INFO: Loading Class: sun/java2d/loops/BlitBg$TraceBlitBg.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphList$General.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphList$TraceDrawGlyphList.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphListAA$General.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphListAA$TraceDrawGlyphListAA.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphListLCD$TraceDrawGlyphListLCD.class +INFO: Loading Class: sun/java2d/loops/DrawLine$TraceDrawLine.class +INFO: Loading Class: sun/java2d/loops/DrawParallelogram$TraceDrawParallelogram.class +INFO: Loading Class: sun/java2d/loops/DrawPath$TraceDrawPath.class +INFO: Loading Class: sun/java2d/loops/DrawPolygons$TraceDrawPolygons.class +INFO: Loading Class: sun/java2d/loops/DrawRect$TraceDrawRect.class +INFO: Loading Class: sun/java2d/loops/FillParallelogram$TraceFillParallelogram.class +INFO: Loading Class: sun/java2d/loops/FillPath$TraceFillPath.class +INFO: Loading Class: sun/java2d/loops/FillRect$General.class +INFO: Loading Class: sun/java2d/loops/FillRect$TraceFillRect.class +INFO: Loading Class: sun/java2d/loops/FillSpans$TraceFillSpans.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitive$1.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitive$GeneralBinaryOp.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitive$GeneralUnaryOp.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitive$TraceReporter$1.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitive$TraceReporter.class +INFO: Loading Class: sun/java2d/loops/MaskBlit$General.class +INFO: Loading Class: sun/java2d/loops/MaskBlit$TraceMaskBlit.class +INFO: Loading Class: sun/java2d/loops/MaskFill$General.class +INFO: Loading Class: sun/java2d/loops/MaskFill$TraceMaskFill.class +INFO: Loading Class: sun/java2d/loops/OpaqueCopyAnyToArgb.class +INFO: Loading Class: sun/java2d/loops/OpaqueCopyArgbToAny.class +INFO: Loading Class: sun/java2d/loops/PixelWriter.class +INFO: Loading Class: sun/java2d/loops/PixelWriterDrawHandler.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$1.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$ActiveEdgeList.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$DrawProcessHandler.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$Edge.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$EndSubPathHandler.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$FillData.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$FillProcessHandler.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$Point.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$ProcessHandler.class +INFO: Loading Class: sun/java2d/loops/ProcessPath.class +INFO: Loading Class: sun/java2d/loops/ScaledBlit$TraceScaledBlit.class +INFO: Loading Class: sun/java2d/loops/SetDrawLineANY.class +INFO: Loading Class: sun/java2d/loops/SetDrawPathANY.class +INFO: Loading Class: sun/java2d/loops/SetDrawPolygonsANY.class +INFO: Loading Class: sun/java2d/loops/SetDrawRectANY.class +INFO: Loading Class: sun/java2d/loops/SetFillPathANY.class +INFO: Loading Class: sun/java2d/loops/SetFillRectANY.class +INFO: Loading Class: sun/java2d/loops/SetFillSpansANY.class +INFO: Loading Class: sun/java2d/loops/SolidPixelWriter.class +INFO: Loading Class: sun/java2d/loops/TransformBlit$TraceTransformBlit.class +INFO: Loading Class: sun/java2d/loops/TransformHelper$TraceTransformHelper.class +INFO: Loading Class: sun/java2d/loops/XorCopyArgbToAny.class +INFO: Loading Class: sun/java2d/loops/XorDrawGlyphListAAANY.class +INFO: Loading Class: sun/java2d/loops/XorDrawGlyphListANY.class +INFO: Loading Class: sun/java2d/loops/XorDrawLineANY.class +INFO: Loading Class: sun/java2d/loops/XorDrawPathANY.class +INFO: Loading Class: sun/java2d/loops/XorDrawPolygonsANY.class +INFO: Loading Class: sun/java2d/loops/XorDrawRectANY.class +INFO: Loading Class: sun/java2d/loops/XorFillPathANY.class +INFO: Loading Class: sun/java2d/loops/XorFillRectANY.class +INFO: Loading Class: sun/java2d/loops/XorFillSpansANY.class +INFO: Loading Class: sun/java2d/loops/XorPixelWriter$ByteData.class +INFO: Loading Class: sun/java2d/loops/XorPixelWriter$DoubleData.class +INFO: Loading Class: sun/java2d/loops/XorPixelWriter$FloatData.class +INFO: Loading Class: sun/java2d/loops/XorPixelWriter$IntData.class +INFO: Loading Class: sun/java2d/loops/XorPixelWriter$ShortData.class +INFO: Loading Class: sun/java2d/loops/XorPixelWriter.class +INFO: Loading Class: sun/java2d/opengl/CGLGraphicsConfig$CGLBufferCaps.class +INFO: Loading Class: sun/java2d/opengl/CGLSurfaceData$CGLVSyncOffScreenSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/CGLSurfaceData$CGLWindowSurfaceData$1.class +INFO: Loading Class: sun/java2d/opengl/CGLSurfaceData$CGLWindowSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/GLXGraphicsConfig$1.class +INFO: Loading Class: sun/java2d/opengl/GLXGraphicsConfig$GLXBufferCaps.class +INFO: Loading Class: sun/java2d/opengl/GLXGraphicsConfig$GLXGetConfigInfo.class +INFO: Loading Class: sun/java2d/opengl/GLXGraphicsConfig$GLXImageCaps.class +INFO: Loading Class: sun/java2d/opengl/GLXGraphicsConfig.class +INFO: Loading Class: sun/java2d/opengl/GLXSurfaceData$GLXOffScreenSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/GLXSurfaceData$GLXVSyncOffScreenSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/GLXSurfaceData$GLXWindowSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/GLXSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/GLXVolatileSurfaceManager.class +INFO: Loading Class: sun/java2d/opengl/OGLBufImgOps.class +INFO: Loading Class: sun/java2d/opengl/OGLGeneralTransformedBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints$1.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints$Gradient.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints$LinearGradient.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints$MultiGradient.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints$RadialGradient.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints$Texture.class +INFO: Loading Class: sun/java2d/opengl/OGLPaints.class +INFO: Loading Class: sun/java2d/opengl/OGLRenderer$Tracer$1.class +INFO: Loading Class: sun/java2d/opengl/OGLRenderer$Tracer.class +INFO: Loading Class: sun/java2d/opengl/OGLTextRenderer$Tracer.class +INFO: Loading Class: sun/java2d/opengl/OGLUtilities.class +INFO: Loading Class: sun/java2d/pipe/AATileGenerator.class +INFO: Loading Class: sun/java2d/pipe/AlphaPaintPipe$TileContext.class +INFO: Loading Class: sun/java2d/pipe/BufferedBufImgOps.class +INFO: Loading Class: sun/java2d/pipe/BufferedMaskFill$1.class +INFO: Loading Class: sun/java2d/pipe/BufferedOpCodes.class +INFO: Loading Class: sun/java2d/pipe/BufferedRenderPipe$1.class +INFO: Loading Class: sun/java2d/pipe/BufferedTextPipe$1.class +INFO: Loading Class: sun/java2d/pipe/GeneralCompositePipe$TileContext.class +INFO: Loading Class: sun/java2d/pipe/RegionClipSpanIterator.class +INFO: Loading Class: sun/java2d/pipe/RegionSpanIterator.class +INFO: Loading Class: sun/java2d/pipe/RenderingEngine$Tracer.class +INFO: Loading Class: sun/java2d/pipe/ShapeSpanIterator.class +INFO: Loading Class: sun/java2d/pipe/SpanClipRenderer$SCRcontext.class +INFO: Loading Class: sun/java2d/pipe/SpanIterator.class +INFO: Loading Class: sun/java2d/pipe/SpanShapeRenderer$Simple.class +INFO: Loading Class: sun/java2d/pipe/hw/AccelDeviceEventListener.class +INFO: Loading Class: sun/java2d/pipe/hw/AccelDeviceEventNotifier.class +INFO: Loading Class: sun/java2d/pipe/hw/AccelTypedVolatileImage.class +INFO: Loading Class: sun/java2d/pipe/hw/ExtendedBufferCapabilities$VSyncType.class +INFO: Loading Class: sun/java2d/pipe/hw/ExtendedBufferCapabilities.class +INFO: Loading Class: sun/java2d/pisces/Curve$1.class +INFO: Loading Class: sun/java2d/pisces/Curve.class +INFO: Loading Class: sun/java2d/pisces/Dasher$LengthIterator$Side.class +INFO: Loading Class: sun/java2d/pisces/Dasher$LengthIterator.class +INFO: Loading Class: sun/java2d/pisces/Dasher.class +INFO: Loading Class: sun/java2d/pisces/Helpers.class +INFO: Loading Class: sun/java2d/pisces/PiscesCache.class +INFO: Loading Class: sun/java2d/pisces/PiscesRenderingEngine$1.class +INFO: Loading Class: sun/java2d/pisces/PiscesRenderingEngine$2.class +INFO: Loading Class: sun/java2d/pisces/PiscesRenderingEngine$NormMode.class +INFO: Loading Class: sun/java2d/pisces/PiscesRenderingEngine$NormalizingPathIterator.class +INFO: Loading Class: sun/java2d/pisces/PiscesRenderingEngine.class +INFO: Loading Class: sun/java2d/pisces/PiscesTileGenerator.class +INFO: Loading Class: sun/java2d/pisces/Renderer$1.class +INFO: Loading Class: sun/java2d/pisces/Renderer$ScanlineIterator.class +INFO: Loading Class: sun/java2d/pisces/Renderer.class +INFO: Loading Class: sun/java2d/pisces/Stroker$PolyStack.class +INFO: Loading Class: sun/java2d/pisces/Stroker.class +INFO: Loading Class: sun/java2d/pisces/TransformingPathConsumer2D$DeltaScaleFilter.class +INFO: Loading Class: sun/java2d/pisces/TransformingPathConsumer2D$DeltaTransformFilter.class +INFO: Loading Class: sun/java2d/pisces/TransformingPathConsumer2D$ScaleFilter.class +INFO: Loading Class: sun/java2d/pisces/TransformingPathConsumer2D$TransformFilter.class +INFO: Loading Class: sun/java2d/pisces/TransformingPathConsumer2D$TranslateFilter.class +INFO: Loading Class: sun/java2d/pisces/TransformingPathConsumer2D.class +INFO: Loading Class: sun/java2d/x11/X11PMBlitBgLoops.class +INFO: Loading Class: sun/java2d/x11/X11PMBlitLoops$DelegateBlitLoop.class +INFO: Loading Class: sun/java2d/x11/X11PMBlitLoops.class +INFO: Loading Class: sun/java2d/x11/X11Renderer$X11TracingRenderer.class +INFO: Loading Class: sun/java2d/x11/X11Renderer.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceData$LazyPipe.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceData$X11PixmapSurfaceData.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceData$X11WindowSurfaceData.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceData.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceDataProxy$Bitmask.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceDataProxy$Opaque.class +INFO: Loading Class: sun/java2d/x11/X11SurfaceDataProxy.class +INFO: Loading Class: sun/java2d/x11/X11VolatileSurfaceManager.class +INFO: Loading Class: sun/java2d/x11/XSurfaceData.class +INFO: Loading Class: sun/java2d/xr/DirtyRegion.class +INFO: Loading Class: sun/java2d/xr/GrowableByteArray.class +INFO: Loading Class: sun/java2d/xr/GrowableEltArray.class +INFO: Loading Class: sun/java2d/xr/GrowableIntArray.class +INFO: Loading Class: sun/java2d/xr/GrowablePointArray.class +INFO: Loading Class: sun/java2d/xr/GrowableRectArray.class +INFO: Loading Class: sun/java2d/xr/MaskTile.class +INFO: Loading Class: sun/java2d/xr/MaskTileManager.class +INFO: Loading Class: sun/java2d/xr/MutableInteger.class +INFO: Loading Class: sun/java2d/xr/XIDGenerator.class +INFO: Loading Class: sun/java2d/xr/XRBackend.class +INFO: Loading Class: sun/java2d/xr/XRBackendNative.class +INFO: Loading Class: sun/java2d/xr/XRColor.class +INFO: Loading Class: sun/java2d/xr/XRCompositeManager$1.class +INFO: Loading Class: sun/java2d/xr/XRCompositeManager.class +INFO: Loading Class: sun/java2d/xr/XRDrawImage.class +INFO: Loading Class: sun/java2d/xr/XRDrawLine.class +INFO: Loading Class: sun/java2d/xr/XRGraphicsConfig.class +INFO: Loading Class: sun/java2d/xr/XRMaskBlit.class +INFO: Loading Class: sun/java2d/xr/XRMaskFill.class +INFO: Loading Class: sun/java2d/xr/XRMaskImage.class +INFO: Loading Class: sun/java2d/xr/XRPMBlit.class +INFO: Loading Class: sun/java2d/xr/XRPMBlitLoops.class +INFO: Loading Class: sun/java2d/xr/XRPMScaledBlit.class +INFO: Loading Class: sun/java2d/xr/XRPMTransformedBlit.class +INFO: Loading Class: sun/java2d/xr/XRPaints$1.class +INFO: Loading Class: sun/java2d/xr/XRPaints$XRGradient.class +INFO: Loading Class: sun/java2d/xr/XRPaints$XRLinearGradient.class +INFO: Loading Class: sun/java2d/xr/XRPaints$XRRadialGradient.class +INFO: Loading Class: sun/java2d/xr/XRPaints$XRTexture.class +INFO: Loading Class: sun/java2d/xr/XRPaints.class +INFO: Loading Class: sun/java2d/xr/XRRenderer$XRDrawHandler.class +INFO: Loading Class: sun/java2d/xr/XRRenderer.class +INFO: Loading Class: sun/java2d/xr/XRSolidSrcPict.class +INFO: Loading Class: sun/java2d/xr/XRSurfaceData$LazyPipe.class +INFO: Loading Class: sun/java2d/xr/XRSurfaceData$XRInternalSurfaceData.class +INFO: Loading Class: sun/java2d/xr/XRSurfaceData$XRPixmapSurfaceData.class +INFO: Loading Class: sun/java2d/xr/XRSurfaceData$XRWindowSurfaceData.class +INFO: Loading Class: sun/java2d/xr/XRSurfaceData.class +INFO: Loading Class: sun/java2d/xr/XRSurfaceDataProxy.class +INFO: Loading Class: sun/java2d/xr/XRUtils.class +INFO: Loading Class: sun/java2d/xr/XRVolatileSurfaceManager.class +INFO: Loading Class: sun/java2d/xr/XcbRequestCounter.class +INFO: Loading Class: sun/java2d/xr/XrSwToPMBlit.class +INFO: Loading Class: sun/java2d/xr/XrSwToPMScaledBlit.class +INFO: Loading Class: sun/java2d/xr/XrSwToPMTransformedBlit.class +INFO: Loading Class: sun/launcher/LauncherHelper$ResourceBundleHolder.class +INFO: Loading Class: sun/launcher/LauncherHelper$SizePrefix.class +INFO: Loading Class: sun/launcher/LauncherHelper$StdArg.class +INFO: Loading Class: sun/launcher/resources/launcher.class +INFO: Loading Class: sun/launcher/resources/launcher_de.class +INFO: Loading Class: sun/launcher/resources/launcher_es.class +INFO: Loading Class: sun/launcher/resources/launcher_fr.class +INFO: Loading Class: sun/launcher/resources/launcher_it.class +INFO: Loading Class: sun/launcher/resources/launcher_ja.class +INFO: Loading Class: sun/launcher/resources/launcher_ko.class +INFO: Loading Class: sun/launcher/resources/launcher_pt_BR.class +INFO: Loading Class: sun/launcher/resources/launcher_sv.class +INFO: Loading Class: sun/launcher/resources/launcher_zh_CN.class +INFO: Loading Class: sun/launcher/resources/launcher_zh_HK.class +INFO: Loading Class: sun/launcher/resources/launcher_zh_TW.class +INFO: Loading Class: sun/lwawt/LWButtonPeer$JButtonDelegate.class +INFO: Loading Class: sun/lwawt/LWButtonPeer.class +INFO: Loading Class: sun/lwawt/LWCheckboxPeer$1.class +INFO: Loading Class: sun/lwawt/LWCheckboxPeer$CheckboxDelegate$1.class +INFO: Loading Class: sun/lwawt/LWCheckboxPeer$CheckboxDelegate$2.class +INFO: Loading Class: sun/lwawt/LWCheckboxPeer$CheckboxDelegate.class +INFO: Loading Class: sun/lwawt/LWCheckboxPeer.class +INFO: Loading Class: sun/lwawt/LWChoicePeer$JComboBoxDelegate.class +INFO: Loading Class: sun/lwawt/LWChoicePeer.class +INFO: Loading Class: sun/lwawt/LWLightweightFramePeer.class +INFO: Loading Class: sun/lwawt/LWListPeer$ScrollableJList$1.class +INFO: Loading Class: sun/lwawt/LWListPeer$ScrollableJList$JListDelegate.class +INFO: Loading Class: sun/lwawt/LWListPeer$ScrollableJList.class +INFO: Loading Class: sun/lwawt/LWListPeer.class +INFO: Loading Class: sun/lwawt/LWMouseInfoPeer.class +INFO: Loading Class: sun/lwawt/LWPanelPeer.class +INFO: Loading Class: sun/lwawt/LWScrollBarPeer.class +INFO: Loading Class: sun/lwawt/LWScrollPanePeer$1.class +INFO: Loading Class: sun/lwawt/LWScrollPanePeer.class +INFO: Loading Class: sun/lwawt/LWTextAreaPeer$ScrollableJTextArea$JTextAreaDelegate.class +INFO: Loading Class: sun/lwawt/LWTextAreaPeer$ScrollableJTextArea.class +INFO: Loading Class: sun/lwawt/LWTextAreaPeer.class +INFO: Loading Class: sun/lwawt/LWTextComponentPeer.class +INFO: Loading Class: sun/lwawt/LWTextFieldPeer$JPasswordFieldDelegate.class +INFO: Loading Class: sun/lwawt/LWTextFieldPeer.class +INFO: Loading Class: sun/lwawt/LWWindowPeer$1.class +INFO: Loading Class: sun/lwawt/SecurityWarningWindow.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$1.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$10.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$11.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$12.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$13.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$14.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$15.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$16.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$17.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$18.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$19.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$2.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$20.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$21.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$22.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$23.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$24.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$25.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$26.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$27.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$28.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$29.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$3.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$30.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$31.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$32.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$33.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$34.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$4.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$5.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$6.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$7.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$8.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility$9.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibility.class +INFO: Loading Class: sun/lwawt/macosx/CAccessible$1.class +INFO: Loading Class: sun/lwawt/macosx/CAccessible$AXProgressChangeNotifier.class +INFO: Loading Class: sun/lwawt/macosx/CAccessible$AXTextChangeNotifier.class +INFO: Loading Class: sun/lwawt/macosx/CAccessible.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$1.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$10.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$11.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$12.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$13.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$14.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$2.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$3.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$4.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$5.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$6.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$7.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$8.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText$9.class +INFO: Loading Class: sun/lwawt/macosx/CAccessibleText.class +INFO: Loading Class: sun/lwawt/macosx/CCheckboxMenuItem$1.class +INFO: Loading Class: sun/lwawt/macosx/CCheckboxMenuItem.class +INFO: Loading Class: sun/lwawt/macosx/CDesktopPeer.class +INFO: Loading Class: sun/lwawt/macosx/CDragSourceContextPeer$1.class +INFO: Loading Class: sun/lwawt/macosx/CDragSourceContextPeer$2.class +INFO: Loading Class: sun/lwawt/macosx/CDragSourceContextPeer.class +INFO: Loading Class: sun/lwawt/macosx/CDropTargetContextPeer$1.class +INFO: Loading Class: sun/lwawt/macosx/CDropTargetContextPeer.class +INFO: Loading Class: sun/lwawt/macosx/CEmbeddedFrame.class +INFO: Loading Class: sun/lwawt/macosx/CFileDialog$1.class +INFO: Loading Class: sun/lwawt/macosx/CFileDialog$Task.class +INFO: Loading Class: sun/lwawt/macosx/CFileDialog.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$1.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$2.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$3.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$4.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$5.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$6.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod$7.class +INFO: Loading Class: sun/lwawt/macosx/CMenu.class +INFO: Loading Class: sun/lwawt/macosx/CMenuBar.class +INFO: Loading Class: sun/lwawt/macosx/CMenuComponent.class +INFO: Loading Class: sun/lwawt/macosx/CMenuItem$1.class +INFO: Loading Class: sun/lwawt/macosx/CMenuItem.class +INFO: Loading Class: sun/lwawt/macosx/CMouseDragGestureRecognizer.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformEmbeddedFrame.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformLWComponent.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformLWView.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformLWWindow.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$13.class +INFO: Loading Class: sun/lwawt/macosx/CPopupMenu.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterDevice.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterDialogPeer$1.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterDialogPeer.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterGraphics.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterGraphicsConfig.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$1.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$2.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$3.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$4.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$5.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$6.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob$7.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJob.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterJobDialog.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterPageDialog.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterSurfaceData.class +INFO: Loading Class: sun/lwawt/macosx/CRobot.class +INFO: Loading Class: sun/lwawt/macosx/CSystemTray.class +INFO: Loading Class: sun/lwawt/macosx/CTextPipe$Tracer.class +INFO: Loading Class: sun/lwawt/macosx/CTextPipe.class +INFO: Loading Class: sun/lwawt/macosx/CTrayIcon$1.class +INFO: Loading Class: sun/lwawt/macosx/CTrayIcon$2.class +INFO: Loading Class: sun/lwawt/macosx/CTrayIcon$3.class +INFO: Loading Class: sun/lwawt/macosx/CTrayIcon$DialogEventHandler.class +INFO: Loading Class: sun/lwawt/macosx/CTrayIcon.class +INFO: Loading Class: sun/lwawt/macosx/CViewEmbeddedFrame$1.class +INFO: Loading Class: sun/lwawt/macosx/CViewEmbeddedFrame.class +INFO: Loading Class: sun/lwawt/macosx/CViewPlatformEmbeddedFrame.class +INFO: Loading Class: sun/lwawt/macosx/CWarningWindow$1$1.class +INFO: Loading Class: sun/lwawt/macosx/CWarningWindow$1.class +INFO: Loading Class: sun/lwawt/macosx/CWarningWindow$2.class +INFO: Loading Class: sun/lwawt/macosx/CWarningWindow$3.class +INFO: Loading Class: sun/lwawt/macosx/CWarningWindow$Lock.class +INFO: Loading Class: sun/lwawt/macosx/CWarningWindow.class +INFO: Loading Class: sun/lwawt/macosx/CWrapper$NSView.class +INFO: Loading Class: sun/lwawt/macosx/CWrapper.class +INFO: Loading Class: sun/lwawt/macosx/CocoaConstants.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit$3.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit$CallableWrapper.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit$OSXPlatformFont.class +INFO: Loading Class: sun/lwawt/macosx/NSEvent.class +INFO: Loading Class: sun/lwawt/macosx/NSPrintInfo.class +INFO: Loading Class: sun/management/Agent.class +INFO: Loading Class: sun/management/AgentConfigurationError.class +INFO: Loading Class: sun/management/BaseOperatingSystemImpl.class +INFO: Loading Class: sun/management/ClassLoadingImpl.class +INFO: Loading Class: sun/management/CompilationImpl.class +INFO: Loading Class: sun/management/CompilerThreadStat.class +INFO: Loading Class: sun/management/ConnectorAddressLink.class +INFO: Loading Class: sun/management/DiagnosticCommandArgumentInfo.class +INFO: Loading Class: sun/management/DiagnosticCommandImpl$1.class +INFO: Loading Class: sun/management/DiagnosticCommandImpl$OperationInfoComparator.class +INFO: Loading Class: sun/management/DiagnosticCommandImpl$Wrapper.class +INFO: Loading Class: sun/management/DiagnosticCommandImpl.class +INFO: Loading Class: sun/management/DiagnosticCommandInfo.class +INFO: Loading Class: sun/management/ExtendedPlatformComponent.class +INFO: Loading Class: sun/management/FileSystem.class +INFO: Loading Class: sun/management/FileSystemImpl$1.class +INFO: Loading Class: sun/management/FileSystemImpl.class +INFO: Loading Class: sun/management/Flag$1.class +INFO: Loading Class: sun/management/Flag.class +INFO: Loading Class: sun/management/GarbageCollectionNotifInfoCompositeData$1.class +INFO: Loading Class: sun/management/GarbageCollectionNotifInfoCompositeData.class +INFO: Loading Class: sun/management/GarbageCollectorImpl.class +INFO: Loading Class: sun/management/GcInfoBuilder.class +INFO: Loading Class: sun/management/GcInfoCompositeData$1.class +INFO: Loading Class: sun/management/GcInfoCompositeData$2.class +INFO: Loading Class: sun/management/GcInfoCompositeData.class +INFO: Loading Class: sun/management/HotSpotDiagnostic.class +INFO: Loading Class: sun/management/HotspotClassLoading.class +INFO: Loading Class: sun/management/HotspotClassLoadingMBean.class +INFO: Loading Class: sun/management/HotspotCompilation$CompilerThreadInfo.class +INFO: Loading Class: sun/management/HotspotCompilation.class +INFO: Loading Class: sun/management/HotspotCompilationMBean.class +INFO: Loading Class: sun/management/HotspotInternal.class +INFO: Loading Class: sun/management/HotspotInternalMBean.class +INFO: Loading Class: sun/management/HotspotMemory.class +INFO: Loading Class: sun/management/HotspotMemoryMBean.class +INFO: Loading Class: sun/management/HotspotRuntime.class +INFO: Loading Class: sun/management/HotspotRuntimeMBean.class +INFO: Loading Class: sun/management/HotspotThread.class +INFO: Loading Class: sun/management/HotspotThreadMBean.class +INFO: Loading Class: sun/management/LazyCompositeData.class +INFO: Loading Class: sun/management/LockInfoCompositeData.class +INFO: Loading Class: sun/management/ManagementFactory.class +INFO: Loading Class: sun/management/ManagementFactoryHelper$1.class +INFO: Loading Class: sun/management/ManagementFactoryHelper$2.class +INFO: Loading Class: sun/management/ManagementFactoryHelper$3.class +INFO: Loading Class: sun/management/ManagementFactoryHelper$4.class +INFO: Loading Class: sun/management/ManagementFactoryHelper$LoggingMXBean.class +INFO: Loading Class: sun/management/ManagementFactoryHelper$PlatformLoggingImpl.class +INFO: Loading Class: sun/management/ManagementFactoryHelper.class +INFO: Loading Class: sun/management/MappedMXBeanType$ArrayMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType$BasicMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType$CompositeDataMXBeanType$1.class +INFO: Loading Class: sun/management/MappedMXBeanType$CompositeDataMXBeanType$2.class +INFO: Loading Class: sun/management/MappedMXBeanType$CompositeDataMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType$EnumMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType$GenericArrayMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType$InProgress.class +INFO: Loading Class: sun/management/MappedMXBeanType$ListMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType$MapMXBeanType.class +INFO: Loading Class: sun/management/MappedMXBeanType.class +INFO: Loading Class: sun/management/MemoryImpl.class +INFO: Loading Class: sun/management/MemoryManagerImpl.class +INFO: Loading Class: sun/management/MemoryNotifInfoCompositeData.class +INFO: Loading Class: sun/management/MemoryPoolImpl$CollectionSensor.class +INFO: Loading Class: sun/management/MemoryPoolImpl$PoolSensor.class +INFO: Loading Class: sun/management/MemoryPoolImpl.class +INFO: Loading Class: sun/management/MemoryUsageCompositeData.class +INFO: Loading Class: sun/management/MethodInfo.class +INFO: Loading Class: sun/management/MonitorInfoCompositeData.class +INFO: Loading Class: sun/management/NotificationEmitterSupport$ListenerInfo.class +INFO: Loading Class: sun/management/NotificationEmitterSupport.class +INFO: Loading Class: sun/management/OperatingSystemImpl.class +INFO: Loading Class: sun/management/RuntimeImpl.class +INFO: Loading Class: sun/management/Sensor.class +INFO: Loading Class: sun/management/StackTraceElementCompositeData.class +INFO: Loading Class: sun/management/ThreadImpl.class +INFO: Loading Class: sun/management/ThreadInfoCompositeData.class +INFO: Loading Class: sun/management/Util.class +INFO: Loading Class: sun/management/VMManagement.class +INFO: Loading Class: sun/management/VMManagementImpl$1.class +INFO: Loading Class: sun/management/VMManagementImpl.class +INFO: Loading Class: sun/management/VMOptionCompositeData.class +INFO: Loading Class: sun/management/counter/AbstractCounter$Flags.class +INFO: Loading Class: sun/management/counter/AbstractCounter.class +INFO: Loading Class: sun/management/counter/ByteArrayCounter.class +INFO: Loading Class: sun/management/counter/Counter.class +INFO: Loading Class: sun/management/counter/LongArrayCounter.class +INFO: Loading Class: sun/management/counter/LongCounter.class +INFO: Loading Class: sun/management/counter/StringCounter.class +INFO: Loading Class: sun/management/counter/Units.class +INFO: Loading Class: sun/management/counter/Variability.class +INFO: Loading Class: sun/management/counter/perf/ByteArrayCounterSnapshot.class +INFO: Loading Class: sun/management/counter/perf/InstrumentationException.class +INFO: Loading Class: sun/management/counter/perf/LongArrayCounterSnapshot.class +INFO: Loading Class: sun/management/counter/perf/LongCounterSnapshot.class +INFO: Loading Class: sun/management/counter/perf/PerfByteArrayCounter.class +INFO: Loading Class: sun/management/counter/perf/PerfDataEntry$EntryFieldOffset.class +INFO: Loading Class: sun/management/counter/perf/PerfDataEntry.class +INFO: Loading Class: sun/management/counter/perf/PerfDataType.class +INFO: Loading Class: sun/management/counter/perf/PerfInstrumentation.class +INFO: Loading Class: sun/management/counter/perf/PerfLongArrayCounter.class +INFO: Loading Class: sun/management/counter/perf/PerfLongCounter.class +INFO: Loading Class: sun/management/counter/perf/PerfStringCounter.class +INFO: Loading Class: sun/management/counter/perf/Prologue$PrologueFieldOffset.class +INFO: Loading Class: sun/management/counter/perf/Prologue.class +INFO: Loading Class: sun/management/counter/perf/StringCounterSnapshot.class +INFO: Loading Class: sun/management/jdp/JdpBroadcaster.class +INFO: Loading Class: sun/management/jdp/JdpController$1.class +INFO: Loading Class: sun/management/jdp/JdpController$JDPControllerRunner.class +INFO: Loading Class: sun/management/jdp/JdpController.class +INFO: Loading Class: sun/management/jdp/JdpException.class +INFO: Loading Class: sun/management/jdp/JdpGenericPacket.class +INFO: Loading Class: sun/management/jdp/JdpJmxPacket.class +INFO: Loading Class: sun/management/jdp/JdpPacket.class +INFO: Loading Class: sun/management/jdp/JdpPacketReader.class +INFO: Loading Class: sun/management/jdp/JdpPacketWriter.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$1.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$AccessFileCheckerAuthenticator.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$DefaultValues.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$HostAwareSocketFactory.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$HostAwareSslSocketFactory.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$JMXConnectorServerData.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$PermanentExporter.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$PropertyNames.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap$SslServerSocket.class +INFO: Loading Class: sun/management/jmxremote/ConnectorBootstrap.class +INFO: Loading Class: sun/management/jmxremote/LocalRMIServerSocketFactory$1.class +INFO: Loading Class: sun/management/jmxremote/LocalRMIServerSocketFactory.class +INFO: Loading Class: sun/management/jmxremote/SingleEntryRegistry.class +INFO: Loading Class: sun/management/resources/agent.class +INFO: Loading Class: sun/management/resources/agent_de.class +INFO: Loading Class: sun/management/resources/agent_es.class +INFO: Loading Class: sun/management/resources/agent_fr.class +INFO: Loading Class: sun/management/resources/agent_it.class +INFO: Loading Class: sun/management/resources/agent_ja.class +INFO: Loading Class: sun/management/resources/agent_ko.class +INFO: Loading Class: sun/management/resources/agent_pt_BR.class +INFO: Loading Class: sun/management/resources/agent_sv.class +INFO: Loading Class: sun/management/resources/agent_zh_CN.class +INFO: Loading Class: sun/management/resources/agent_zh_HK.class +INFO: Loading Class: sun/management/resources/agent_zh_TW.class +INFO: Loading Class: sun/management/snmp/AdaptorBootstrap$DefaultValues.class +INFO: Loading Class: sun/management/snmp/AdaptorBootstrap$PropertyNames.class +INFO: Loading Class: sun/management/snmp/AdaptorBootstrap.class +INFO: Loading Class: sun/management/snmp/jvminstr/JVM_MANAGEMENT_MIB_IMPL$1.class +INFO: Loading Class: sun/management/snmp/jvminstr/JVM_MANAGEMENT_MIB_IMPL$NotificationHandler.class +INFO: Loading Class: sun/management/snmp/jvminstr/JVM_MANAGEMENT_MIB_IMPL.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmClassLoadingImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmCompilationImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemGCEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemGCTableMetaImpl$GCTableFilter.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemGCTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemManagerEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemManagerTableMetaImpl$JvmMemManagerTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemManagerTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemMgrPoolRelEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemMgrPoolRelTableMetaImpl$JvmMemMgrPoolRelTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemMgrPoolRelTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemPoolEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemPoolTableMetaImpl$JvmMemPoolTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemPoolTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemoryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmMemoryMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmOSImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTBootClassPathEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTBootClassPathTableMetaImpl$JvmRTBootClassPathTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTBootClassPathTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTClassPathEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTClassPathTableMetaImpl$JvmRTClassPathTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTClassPathTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTInputArgsEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTInputArgsTableMetaImpl$JvmRTInputArgsTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTInputArgsTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTLibraryPathEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTLibraryPathTableMetaImpl$JvmRTLibraryPathTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRTLibraryPathTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRuntimeImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmRuntimeMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl$1.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl$ThreadStateMap$Byte0.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl$ThreadStateMap$Byte1.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl$ThreadStateMap.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceEntryImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceTableMetaImpl$JvmThreadInstanceTableCache.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadInstanceTableMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadingImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/JvmThreadingMetaImpl.class +INFO: Loading Class: sun/management/snmp/jvminstr/NotificationTarget.class +INFO: Loading Class: sun/management/snmp/jvminstr/NotificationTargetImpl.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmClassesVerboseLevel.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmJITCompilerTimeMonitoring.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemManagerState.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemPoolCollectThreshdSupport.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemPoolState.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemPoolThreshdSupport.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemPoolType.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemoryGCCall.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmMemoryGCVerboseLevel.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmRTBootClassPathSupport.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmThreadContentionMonitoring.class +INFO: Loading Class: sun/management/snmp/jvmmib/EnumJvmThreadCpuTimeMonitoring.class +INFO: Loading Class: sun/management/snmp/jvmmib/JVM_MANAGEMENT_MIB.class +INFO: Loading Class: sun/management/snmp/jvmmib/JVM_MANAGEMENT_MIBOidTable.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmClassLoadingMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmClassLoadingMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmCompilationMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmCompilationMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemGCEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemGCEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemGCTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemManagerEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemManagerEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemManagerTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemMgrPoolRelEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemMgrPoolRelEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemMgrPoolRelTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemPoolEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemPoolEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemPoolTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemoryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmMemoryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmOSMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmOSMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTBootClassPathEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTBootClassPathEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTBootClassPathTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTClassPathEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTClassPathEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTClassPathTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTInputArgsEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTInputArgsEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTInputArgsTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTLibraryPathEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTLibraryPathEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRTLibraryPathTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRuntimeMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmRuntimeMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmThreadInstanceEntryMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmThreadInstanceEntryMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmThreadInstanceTableMeta.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmThreadingMBean.class +INFO: Loading Class: sun/management/snmp/jvmmib/JvmThreadingMeta.class +INFO: Loading Class: sun/management/snmp/util/JvmContextFactory.class +INFO: Loading Class: sun/management/snmp/util/MibLogger.class +INFO: Loading Class: sun/management/snmp/util/SnmpCachedData$1.class +INFO: Loading Class: sun/management/snmp/util/SnmpCachedData.class +INFO: Loading Class: sun/management/snmp/util/SnmpListTableCache.class +INFO: Loading Class: sun/management/snmp/util/SnmpLoadedClassData.class +INFO: Loading Class: sun/management/snmp/util/SnmpNamedListTableCache.class +INFO: Loading Class: sun/management/snmp/util/SnmpTableCache.class +INFO: Loading Class: sun/management/snmp/util/SnmpTableHandler.class +INFO: Loading Class: sun/misc/BASE64Decoder.class +INFO: Loading Class: sun/misc/BASE64Encoder.class +INFO: Loading Class: sun/misc/CEFormatException.class +INFO: Loading Class: sun/misc/CEStreamExhausted.class +INFO: Loading Class: sun/misc/CRC16.class +INFO: Loading Class: sun/misc/Cache.class +INFO: Loading Class: sun/misc/CacheEntry.class +INFO: Loading Class: sun/misc/CacheEnumerator.class +INFO: Loading Class: sun/misc/CharacterDecoder.class +INFO: Loading Class: sun/misc/CharacterEncoder.class +INFO: Loading Class: sun/misc/ClassFileTransformer.class +INFO: Loading Class: sun/misc/ClassLoaderUtil.class +INFO: Loading Class: sun/misc/Cleaner$1.class +INFO: Loading Class: sun/misc/ConditionLock.class +INFO: Loading Class: sun/misc/Contended.class +INFO: Loading Class: sun/misc/DoubleConsts.class +INFO: Loading Class: sun/misc/ExtensionDependency$1.class +INFO: Loading Class: sun/misc/ExtensionDependency$2.class +INFO: Loading Class: sun/misc/ExtensionDependency$3.class +INFO: Loading Class: sun/misc/ExtensionDependency$4.class +INFO: Loading Class: sun/misc/ExtensionInfo.class +INFO: Loading Class: sun/misc/ExtensionInstallationException.class +INFO: Loading Class: sun/misc/ExtensionInstallationProvider.class +INFO: Loading Class: sun/misc/FDBigInteger.class +INFO: Loading Class: sun/misc/FIFOQueueEnumerator.class +INFO: Loading Class: sun/misc/FloatConsts.class +INFO: Loading Class: sun/misc/FloatingDecimal$ASCIIToBinaryBuffer.class +INFO: Loading Class: sun/misc/FloatingDecimal$HexFloatPattern.class +INFO: Loading Class: sun/misc/FormattedFloatingDecimal$1.class +INFO: Loading Class: sun/misc/FormattedFloatingDecimal$2.class +INFO: Loading Class: sun/misc/FormattedFloatingDecimal$Form.class +INFO: Loading Class: sun/misc/FormattedFloatingDecimal.class +INFO: Loading Class: sun/misc/FpUtils.class +INFO: Loading Class: sun/misc/GC$1.class +INFO: Loading Class: sun/misc/GC$Daemon$1.class +INFO: Loading Class: sun/misc/GC$Daemon.class +INFO: Loading Class: sun/misc/GC$LatencyLock.class +INFO: Loading Class: sun/misc/GC$LatencyRequest.class +INFO: Loading Class: sun/misc/GC.class +INFO: Loading Class: sun/misc/GThreadHelper.class +INFO: Loading Class: sun/misc/HexDumpEncoder.class +INFO: Loading Class: sun/misc/InnocuousThread.class +INFO: Loading Class: sun/misc/InvalidJarIndexException.class +INFO: Loading Class: sun/misc/JarFilter.class +INFO: Loading Class: sun/misc/JavaIOAccess.class +INFO: Loading Class: sun/misc/JavaLangRefAccess.class +INFO: Loading Class: sun/misc/JavaNetHttpCookieAccess.class +INFO: Loading Class: sun/misc/JavaNioAccess$BufferPool.class +INFO: Loading Class: sun/misc/JavaObjectInputStreamAccess.class +INFO: Loading Class: sun/misc/JavaSecurityProtectionDomainAccess$ProtectionDomainCache.class +INFO: Loading Class: sun/misc/LIFOQueueEnumerator.class +INFO: Loading Class: sun/misc/LRUCache.class +INFO: Loading Class: sun/misc/Launcher$1.class +INFO: Loading Class: sun/misc/Lock.class +INFO: Loading Class: sun/misc/MessageUtils.class +INFO: Loading Class: sun/misc/ObjectStreamClassValidator.class +INFO: Loading Class: sun/misc/PathPermissions$1.class +INFO: Loading Class: sun/misc/PathPermissions.class +INFO: Loading Class: sun/misc/Perf$1.class +INFO: Loading Class: sun/misc/PerfCounter$WindowsClientCounters.class +INFO: Loading Class: sun/misc/PerformanceLogger$1.class +INFO: Loading Class: sun/misc/ProxyGenerator$1.class +INFO: Loading Class: sun/misc/ProxyGenerator$ConstantPool$Entry.class +INFO: Loading Class: sun/misc/ProxyGenerator$ConstantPool$IndirectEntry.class +INFO: Loading Class: sun/misc/ProxyGenerator$ConstantPool$ValueEntry.class +INFO: Loading Class: sun/misc/ProxyGenerator$ConstantPool.class +INFO: Loading Class: sun/misc/ProxyGenerator$ExceptionTableEntry.class +INFO: Loading Class: sun/misc/ProxyGenerator$FieldInfo.class +INFO: Loading Class: sun/misc/ProxyGenerator$MethodInfo.class +INFO: Loading Class: sun/misc/ProxyGenerator$PrimitiveTypeInfo.class +INFO: Loading Class: sun/misc/ProxyGenerator$ProxyMethod.class +INFO: Loading Class: sun/misc/ProxyGenerator.class +INFO: Loading Class: sun/misc/Queue.class +INFO: Loading Class: sun/misc/QueueElement.class +INFO: Loading Class: sun/misc/REException.class +INFO: Loading Class: sun/misc/Ref.class +INFO: Loading Class: sun/misc/Regexp.class +INFO: Loading Class: sun/misc/RegexpNode.class +INFO: Loading Class: sun/misc/RegexpPool.class +INFO: Loading Class: sun/misc/RegexpTarget.class +INFO: Loading Class: sun/misc/Request.class +INFO: Loading Class: sun/misc/RequestProcessor.class +INFO: Loading Class: sun/misc/Service$1.class +INFO: Loading Class: sun/misc/Service$LazyIterator.class +INFO: Loading Class: sun/misc/Service.class +INFO: Loading Class: sun/misc/ServiceConfigurationError.class +INFO: Loading Class: sun/misc/Signal$1.class +INFO: Loading Class: sun/misc/SoftCache$1.class +INFO: Loading Class: sun/misc/SoftCache$Entry.class +INFO: Loading Class: sun/misc/SoftCache$EntrySet$1.class +INFO: Loading Class: sun/misc/SoftCache$EntrySet.class +INFO: Loading Class: sun/misc/ThreadGroupUtils.class +INFO: Loading Class: sun/misc/Timeable.class +INFO: Loading Class: sun/misc/Timer.class +INFO: Loading Class: sun/misc/TimerThread.class +INFO: Loading Class: sun/misc/TimerTickThread.class +INFO: Loading Class: sun/misc/UCDecoder.class +INFO: Loading Class: sun/misc/UCEncoder.class +INFO: Loading Class: sun/misc/URLClassPath$FileLoader$1.class +INFO: Loading Class: sun/misc/URLClassPath$JarLoader$3.class +INFO: Loading Class: sun/misc/URLClassPath$Loader$1.class +INFO: Loading Class: sun/misc/UUDecoder.class +INFO: Loading Class: sun/misc/UUEncoder.class +INFO: Loading Class: sun/misc/VMNotification.class +INFO: Loading Class: sun/misc/VMSupport.class +INFO: Loading Class: sun/misc/resources/Messages.class +INFO: Loading Class: sun/misc/resources/Messages_de.class +INFO: Loading Class: sun/misc/resources/Messages_es.class +INFO: Loading Class: sun/misc/resources/Messages_fr.class +INFO: Loading Class: sun/misc/resources/Messages_it.class +INFO: Loading Class: sun/misc/resources/Messages_ja.class +INFO: Loading Class: sun/misc/resources/Messages_ko.class +INFO: Loading Class: sun/misc/resources/Messages_pt_BR.class +INFO: Loading Class: sun/misc/resources/Messages_sv.class +INFO: Loading Class: sun/misc/resources/Messages_zh_CN.class +INFO: Loading Class: sun/misc/resources/Messages_zh_HK.class +INFO: Loading Class: sun/misc/resources/Messages_zh_TW.class +INFO: Loading Class: sun/net/ApplicationProxy.class +INFO: Loading Class: sun/net/ConnectionResetException.class +INFO: Loading Class: sun/net/ExtendedOptionsImpl.class +INFO: Loading Class: sun/net/InetAddressCachePolicy$1.class +INFO: Loading Class: sun/net/InetAddressCachePolicy$2.class +INFO: Loading Class: sun/net/InetAddressCachePolicy.class +INFO: Loading Class: sun/net/NetworkClient$1.class +INFO: Loading Class: sun/net/NetworkClient$2.class +INFO: Loading Class: sun/net/NetworkClient$3.class +INFO: Loading Class: sun/net/NetworkClient.class +INFO: Loading Class: sun/net/NetworkServer.class +INFO: Loading Class: sun/net/PortConfig$1.class +INFO: Loading Class: sun/net/PortConfig.class +INFO: Loading Class: sun/net/ProgressEvent.class +INFO: Loading Class: sun/net/ProgressListener.class +INFO: Loading Class: sun/net/ProgressSource$State.class +INFO: Loading Class: sun/net/ProgressSource.class +INFO: Loading Class: sun/net/RegisteredDomain.class +INFO: Loading Class: sun/net/ResourceManager.class +INFO: Loading Class: sun/net/SocksProxy.class +INFO: Loading Class: sun/net/TelnetInputStream.class +INFO: Loading Class: sun/net/TelnetOutputStream.class +INFO: Loading Class: sun/net/TelnetProtocolException.class +INFO: Loading Class: sun/net/TransferProtocolClient.class +INFO: Loading Class: sun/net/URLCanonicalizer.class +INFO: Loading Class: sun/net/dns/OptionsImpl.class +INFO: Loading Class: sun/net/dns/ResolverConfiguration$Options.class +INFO: Loading Class: sun/net/dns/ResolverConfiguration.class +INFO: Loading Class: sun/net/dns/ResolverConfigurationImpl$1.class +INFO: Loading Class: sun/net/dns/ResolverConfigurationImpl$2.class +INFO: Loading Class: sun/net/dns/ResolverConfigurationImpl$3.class +INFO: Loading Class: sun/net/dns/ResolverConfigurationImpl$4.class +INFO: Loading Class: sun/net/dns/ResolverConfigurationImpl.class +INFO: Loading Class: sun/net/ftp/FtpClient$TransferType.class +INFO: Loading Class: sun/net/ftp/FtpClient.class +INFO: Loading Class: sun/net/ftp/FtpClientProvider$1.class +INFO: Loading Class: sun/net/ftp/FtpClientProvider.class +INFO: Loading Class: sun/net/ftp/FtpDirEntry$Permission.class +INFO: Loading Class: sun/net/ftp/FtpDirEntry$Type.class +INFO: Loading Class: sun/net/ftp/FtpDirEntry.class +INFO: Loading Class: sun/net/ftp/FtpDirParser.class +INFO: Loading Class: sun/net/ftp/FtpLoginException.class +INFO: Loading Class: sun/net/ftp/FtpProtocolException.class +INFO: Loading Class: sun/net/ftp/FtpReplyCode.class +INFO: Loading Class: sun/net/ftp/impl/DefaultFtpClientProvider.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$1.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$2.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$3.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$4.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$DefaultParser.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$FtpFileIterator.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient$MLSxParser.class +INFO: Loading Class: sun/net/ftp/impl/FtpClient.class +INFO: Loading Class: sun/net/httpserver/AuthFilter.class +INFO: Loading Class: sun/net/httpserver/ChunkedInputStream.class +INFO: Loading Class: sun/net/httpserver/ChunkedOutputStream.class +INFO: Loading Class: sun/net/httpserver/Code.class +INFO: Loading Class: sun/net/httpserver/ContextList.class +INFO: Loading Class: sun/net/httpserver/DefaultHttpServerProvider.class +INFO: Loading Class: sun/net/httpserver/Event.class +INFO: Loading Class: sun/net/httpserver/ExchangeImpl$1.class +INFO: Loading Class: sun/net/httpserver/ExchangeImpl.class +INFO: Loading Class: sun/net/httpserver/FixedLengthInputStream.class +INFO: Loading Class: sun/net/httpserver/FixedLengthOutputStream.class +INFO: Loading Class: sun/net/httpserver/HttpConnection$State.class +INFO: Loading Class: sun/net/httpserver/HttpConnection.class +INFO: Loading Class: sun/net/httpserver/HttpContextImpl.class +INFO: Loading Class: sun/net/httpserver/HttpError.class +INFO: Loading Class: sun/net/httpserver/HttpExchangeImpl.class +INFO: Loading Class: sun/net/httpserver/HttpServerImpl.class +INFO: Loading Class: sun/net/httpserver/HttpsExchangeImpl.class +INFO: Loading Class: sun/net/httpserver/HttpsServerImpl.class +INFO: Loading Class: sun/net/httpserver/LeftOverInputStream.class +INFO: Loading Class: sun/net/httpserver/PlaceholderOutputStream.class +INFO: Loading Class: sun/net/httpserver/Request$ReadStream.class +INFO: Loading Class: sun/net/httpserver/Request$WriteStream.class +INFO: Loading Class: sun/net/httpserver/Request.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$1.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$BufType.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$EngineWrapper.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$InputStream.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$OutputStream.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$Parameters.class +INFO: Loading Class: sun/net/httpserver/SSLStreams$WrapperResult.class +INFO: Loading Class: sun/net/httpserver/SSLStreams.class +INFO: Loading Class: sun/net/httpserver/ServerConfig$1.class +INFO: Loading Class: sun/net/httpserver/ServerConfig$2.class +INFO: Loading Class: sun/net/httpserver/ServerConfig.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$1.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$2.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$DefaultExecutor.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$Dispatcher.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$Exchange$LinkHandler.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$Exchange.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$ServerTimerTask.class +INFO: Loading Class: sun/net/httpserver/ServerImpl$ServerTimerTask1.class +INFO: Loading Class: sun/net/httpserver/ServerImpl.class +INFO: Loading Class: sun/net/httpserver/StreamClosedException.class +INFO: Loading Class: sun/net/httpserver/TimeSource.class +INFO: Loading Class: sun/net/httpserver/UndefLengthOutputStream.class +INFO: Loading Class: sun/net/httpserver/UnmodifiableHeaders.class +INFO: Loading Class: sun/net/httpserver/WriteFinishedEvent.class +INFO: Loading Class: sun/net/idn/Punycode.class +INFO: Loading Class: sun/net/idn/StringPrep$1.class +INFO: Loading Class: sun/net/idn/StringPrep$StringPrepTrieImpl.class +INFO: Loading Class: sun/net/idn/StringPrep$Values.class +INFO: Loading Class: sun/net/idn/StringPrep.class +INFO: Loading Class: sun/net/idn/StringPrepDataReader.class +INFO: Loading Class: sun/net/idn/UCharacterDirection.class +INFO: Loading Class: sun/net/idn/UCharacterEnums$ECharacterCategory.class +INFO: Loading Class: sun/net/idn/UCharacterEnums$ECharacterDirection.class +INFO: Loading Class: sun/net/idn/UCharacterEnums.class +INFO: Loading Class: sun/net/sdp/SdpProvider$Action.class +INFO: Loading Class: sun/net/sdp/SdpProvider$AddressPortRangeRule.class +INFO: Loading Class: sun/net/sdp/SdpProvider$PortRangeRule.class +INFO: Loading Class: sun/net/sdp/SdpProvider$Rule.class +INFO: Loading Class: sun/net/sdp/SdpSupport$1.class +INFO: Loading Class: sun/net/sdp/SdpSupport.class +INFO: Loading Class: sun/net/smtp/SmtpClient.class +INFO: Loading Class: sun/net/smtp/SmtpPrintStream.class +INFO: Loading Class: sun/net/smtp/SmtpProtocolException.class +INFO: Loading Class: sun/net/spi/DefaultProxySelector$2.class +INFO: Loading Class: sun/net/spi/nameservice/NameServiceDescriptor.class +INFO: Loading Class: sun/net/www/ApplicationLaunchException.class +INFO: Loading Class: sun/net/www/HeaderParser$ParserIterator.class +INFO: Loading Class: sun/net/www/HeaderParser.class +INFO: Loading Class: sun/net/www/MessageHeader$HeaderIterator.class +INFO: Loading Class: sun/net/www/MeteredStream.class +INFO: Loading Class: sun/net/www/MimeEntry.class +INFO: Loading Class: sun/net/www/MimeLauncher.class +INFO: Loading Class: sun/net/www/MimeTable$1.class +INFO: Loading Class: sun/net/www/MimeTable$DefaultInstanceHolder$1.class +INFO: Loading Class: sun/net/www/MimeTable$DefaultInstanceHolder.class +INFO: Loading Class: sun/net/www/MimeTable.class +INFO: Loading Class: sun/net/www/content/audio/aiff.class +INFO: Loading Class: sun/net/www/content/audio/basic.class +INFO: Loading Class: sun/net/www/content/audio/wav.class +INFO: Loading Class: sun/net/www/content/audio/x_aiff.class +INFO: Loading Class: sun/net/www/content/audio/x_wav.class +INFO: Loading Class: sun/net/www/content/image/gif.class +INFO: Loading Class: sun/net/www/content/image/jpeg.class +INFO: Loading Class: sun/net/www/content/image/png.class +INFO: Loading Class: sun/net/www/content/image/x_xbitmap.class +INFO: Loading Class: sun/net/www/content/image/x_xpixmap.class +INFO: Loading Class: sun/net/www/content/text/Generic.class +INFO: Loading Class: sun/net/www/content/text/PlainTextInputStream.class +INFO: Loading Class: sun/net/www/content/text/plain.class +INFO: Loading Class: sun/net/www/http/ChunkedInputStream.class +INFO: Loading Class: sun/net/www/http/ChunkedOutputStream.class +INFO: Loading Class: sun/net/www/http/ClientVector.class +INFO: Loading Class: sun/net/www/http/HttpCapture$1.class +INFO: Loading Class: sun/net/www/http/HttpCapture.class +INFO: Loading Class: sun/net/www/http/HttpCaptureInputStream.class +INFO: Loading Class: sun/net/www/http/HttpCaptureOutputStream.class +INFO: Loading Class: sun/net/www/http/HttpClient$1.class +INFO: Loading Class: sun/net/www/http/HttpClient.class +INFO: Loading Class: sun/net/www/http/Hurryable.class +INFO: Loading Class: sun/net/www/http/KeepAliveCache$1.class +INFO: Loading Class: sun/net/www/http/KeepAliveCache.class +INFO: Loading Class: sun/net/www/http/KeepAliveCleanerEntry.class +INFO: Loading Class: sun/net/www/http/KeepAliveEntry.class +INFO: Loading Class: sun/net/www/http/KeepAliveKey.class +INFO: Loading Class: sun/net/www/http/KeepAliveStream$1.class +INFO: Loading Class: sun/net/www/http/KeepAliveStream.class +INFO: Loading Class: sun/net/www/http/KeepAliveStreamCleaner$1.class +INFO: Loading Class: sun/net/www/http/KeepAliveStreamCleaner$2.class +INFO: Loading Class: sun/net/www/http/KeepAliveStreamCleaner.class +INFO: Loading Class: sun/net/www/http/PosterOutputStream.class +INFO: Loading Class: sun/net/www/protocol/ftp/FtpURLConnection$1.class +INFO: Loading Class: sun/net/www/protocol/ftp/FtpURLConnection$FtpInputStream.class +INFO: Loading Class: sun/net/www/protocol/ftp/FtpURLConnection$FtpOutputStream.class +INFO: Loading Class: sun/net/www/protocol/ftp/FtpURLConnection.class +INFO: Loading Class: sun/net/www/protocol/ftp/Handler.class +INFO: Loading Class: sun/net/www/protocol/http/AuthCache.class +INFO: Loading Class: sun/net/www/protocol/http/AuthCacheImpl.class +INFO: Loading Class: sun/net/www/protocol/http/AuthCacheValue$Type.class +INFO: Loading Class: sun/net/www/protocol/http/AuthCacheValue.class +INFO: Loading Class: sun/net/www/protocol/http/AuthScheme.class +INFO: Loading Class: sun/net/www/protocol/http/AuthenticationHeader$SchemeMapValue.class +INFO: Loading Class: sun/net/www/protocol/http/AuthenticationHeader.class +INFO: Loading Class: sun/net/www/protocol/http/AuthenticationInfo.class +INFO: Loading Class: sun/net/www/protocol/http/BasicAuthentication.class +INFO: Loading Class: sun/net/www/protocol/http/DigestAuthentication$1.class +INFO: Loading Class: sun/net/www/protocol/http/DigestAuthentication$Parameters.class +INFO: Loading Class: sun/net/www/protocol/http/DigestAuthentication.class +INFO: Loading Class: sun/net/www/protocol/http/EmptyInputStream.class +INFO: Loading Class: sun/net/www/protocol/http/Handler.class +INFO: Loading Class: sun/net/www/protocol/http/HttpAuthenticator.class +INFO: Loading Class: sun/net/www/protocol/http/HttpCallerInfo.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$1.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$10.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$11.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$12.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$13.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$2.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$3.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$4.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$5.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$6.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$7.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$8.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$9.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$ErrorStream.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$HttpInputStream.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$StreamingOutputStream.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection$TunnelState.class +INFO: Loading Class: sun/net/www/protocol/http/HttpURLConnection.class +INFO: Loading Class: sun/net/www/protocol/http/NTLMAuthenticationProxy.class +INFO: Loading Class: sun/net/www/protocol/http/NegotiateAuthentication.class +INFO: Loading Class: sun/net/www/protocol/http/Negotiator.class +INFO: Loading Class: sun/net/www/protocol/http/logging/HttpLogFormatter.class +INFO: Loading Class: sun/net/www/protocol/http/ntlm/NTLMAuthentication$1.class +INFO: Loading Class: sun/net/www/protocol/http/ntlm/NTLMAuthentication.class +INFO: Loading Class: sun/net/www/protocol/http/ntlm/NTLMAuthenticationCallback$DefaultNTLMAuthenticationCallback.class +INFO: Loading Class: sun/net/www/protocol/http/ntlm/NTLMAuthenticationCallback.class +INFO: Loading Class: sun/net/www/protocol/http/spnego/NegotiateCallbackHandler.class +INFO: Loading Class: sun/net/www/protocol/http/spnego/NegotiatorImpl$1.class +INFO: Loading Class: sun/net/www/protocol/http/spnego/NegotiatorImpl.class +INFO: Loading Class: sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.class +INFO: Loading Class: sun/net/www/protocol/https/DefaultHostnameVerifier.class +INFO: Loading Class: sun/net/www/protocol/https/DelegateHttpsURLConnection.class +INFO: Loading Class: sun/net/www/protocol/https/Handler.class +INFO: Loading Class: sun/net/www/protocol/https/HttpsClient.class +INFO: Loading Class: sun/net/www/protocol/https/HttpsURLConnectionImpl.class +INFO: Loading Class: sun/net/www/protocol/jar/URLJarFile$1.class +INFO: Loading Class: sun/net/www/protocol/jar/URLJarFileCallBack.class +INFO: Loading Class: sun/net/www/protocol/mailto/Handler.class +INFO: Loading Class: sun/net/www/protocol/mailto/MailToURLConnection.class +INFO: Loading Class: sun/net/www/protocol/netdoc/Handler.class +INFO: Loading Class: sun/nio/ch/AbstractPollArrayWrapper.class +INFO: Loading Class: sun/nio/ch/AbstractPollSelectorImpl.class +INFO: Loading Class: sun/nio/ch/AllocatedNativeObject.class +INFO: Loading Class: sun/nio/ch/AsynchronousChannelGroupImpl$1.class +INFO: Loading Class: sun/nio/ch/AsynchronousChannelGroupImpl$2.class +INFO: Loading Class: sun/nio/ch/AsynchronousChannelGroupImpl$3.class +INFO: Loading Class: sun/nio/ch/AsynchronousChannelGroupImpl$4$1.class +INFO: Loading Class: sun/nio/ch/AsynchronousChannelGroupImpl$4.class +INFO: Loading Class: sun/nio/ch/AsynchronousChannelGroupImpl.class +INFO: Loading Class: sun/nio/ch/AsynchronousFileChannelImpl.class +INFO: Loading Class: sun/nio/ch/AsynchronousServerSocketChannelImpl$DefaultOptionsHolder.class +INFO: Loading Class: sun/nio/ch/AsynchronousServerSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/AsynchronousSocketChannelImpl$DefaultOptionsHolder.class +INFO: Loading Class: sun/nio/ch/AsynchronousSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/BsdAsynchronousChannelProvider.class +INFO: Loading Class: sun/nio/ch/Cancellable.class +INFO: Loading Class: sun/nio/ch/ChannelInputStream.class +INFO: Loading Class: sun/nio/ch/CompletedFuture.class +INFO: Loading Class: sun/nio/ch/DatagramChannelImpl$DefaultOptionsHolder.class +INFO: Loading Class: sun/nio/ch/DatagramChannelImpl.class +INFO: Loading Class: sun/nio/ch/DatagramDispatcher.class +INFO: Loading Class: sun/nio/ch/DatagramSocketAdaptor$1.class +INFO: Loading Class: sun/nio/ch/DatagramSocketAdaptor.class +INFO: Loading Class: sun/nio/ch/DefaultAsynchronousChannelProvider.class +INFO: Loading Class: sun/nio/ch/DefaultSelectorProvider.class +INFO: Loading Class: sun/nio/ch/ExtendedSocketOption$1.class +INFO: Loading Class: sun/nio/ch/ExtendedSocketOption.class +INFO: Loading Class: sun/nio/ch/FileChannelImpl$1.class +INFO: Loading Class: sun/nio/ch/FileChannelImpl$SimpleFileLockTable.class +INFO: Loading Class: sun/nio/ch/FileChannelImpl$Unmapper.class +INFO: Loading Class: sun/nio/ch/FileKey.class +INFO: Loading Class: sun/nio/ch/FileLockImpl.class +INFO: Loading Class: sun/nio/ch/FileLockTable.class +INFO: Loading Class: sun/nio/ch/Groupable.class +INFO: Loading Class: sun/nio/ch/IOVecWrapper$Deallocator.class +INFO: Loading Class: sun/nio/ch/IOVecWrapper.class +INFO: Loading Class: sun/nio/ch/InheritedChannel$InheritedDatagramChannelImpl.class +INFO: Loading Class: sun/nio/ch/InheritedChannel$InheritedServerSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/InheritedChannel$InheritedSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/InheritedChannel.class +INFO: Loading Class: sun/nio/ch/Invoker$1.class +INFO: Loading Class: sun/nio/ch/Invoker$2.class +INFO: Loading Class: sun/nio/ch/Invoker$3.class +INFO: Loading Class: sun/nio/ch/Invoker$GroupAndInvokeCount.class +INFO: Loading Class: sun/nio/ch/Invoker.class +INFO: Loading Class: sun/nio/ch/KQueue.class +INFO: Loading Class: sun/nio/ch/KQueueArrayWrapper$Update.class +INFO: Loading Class: sun/nio/ch/KQueueArrayWrapper.class +INFO: Loading Class: sun/nio/ch/KQueuePort$1.class +INFO: Loading Class: sun/nio/ch/KQueuePort$Event.class +INFO: Loading Class: sun/nio/ch/KQueuePort$EventHandlerTask.class +INFO: Loading Class: sun/nio/ch/KQueuePort.class +INFO: Loading Class: sun/nio/ch/KQueueSelectorImpl$MapEntry.class +INFO: Loading Class: sun/nio/ch/KQueueSelectorImpl.class +INFO: Loading Class: sun/nio/ch/KQueueSelectorProvider.class +INFO: Loading Class: sun/nio/ch/MembershipKeyImpl$1.class +INFO: Loading Class: sun/nio/ch/MembershipKeyImpl$Type4.class +INFO: Loading Class: sun/nio/ch/MembershipKeyImpl$Type6.class +INFO: Loading Class: sun/nio/ch/MembershipKeyImpl.class +INFO: Loading Class: sun/nio/ch/MembershipRegistry.class +INFO: Loading Class: sun/nio/ch/NativeObject.class +INFO: Loading Class: sun/nio/ch/Net$1.class +INFO: Loading Class: sun/nio/ch/Net$2.class +INFO: Loading Class: sun/nio/ch/Net$3.class +INFO: Loading Class: sun/nio/ch/Net$4.class +INFO: Loading Class: sun/nio/ch/Net.class +INFO: Loading Class: sun/nio/ch/OptionKey.class +INFO: Loading Class: sun/nio/ch/PendingFuture.class +INFO: Loading Class: sun/nio/ch/PipeImpl.class +INFO: Loading Class: sun/nio/ch/PollArrayWrapper.class +INFO: Loading Class: sun/nio/ch/PollSelectorImpl.class +INFO: Loading Class: sun/nio/ch/PollSelectorProvider.class +INFO: Loading Class: sun/nio/ch/Port$1.class +INFO: Loading Class: sun/nio/ch/Port$PollableChannel.class +INFO: Loading Class: sun/nio/ch/Port.class +INFO: Loading Class: sun/nio/ch/Reflect$1.class +INFO: Loading Class: sun/nio/ch/Reflect$ReflectionError.class +INFO: Loading Class: sun/nio/ch/Reflect.class +INFO: Loading Class: sun/nio/ch/Secrets.class +INFO: Loading Class: sun/nio/ch/SelChImpl.class +INFO: Loading Class: sun/nio/ch/SelectionKeyImpl.class +INFO: Loading Class: sun/nio/ch/SelectorImpl.class +INFO: Loading Class: sun/nio/ch/SelectorProviderImpl.class +INFO: Loading Class: sun/nio/ch/ServerSocketAdaptor.class +INFO: Loading Class: sun/nio/ch/ServerSocketChannelImpl$DefaultOptionsHolder.class +INFO: Loading Class: sun/nio/ch/ServerSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/SharedFileLockTable$FileLockReference.class +INFO: Loading Class: sun/nio/ch/SharedFileLockTable.class +INFO: Loading Class: sun/nio/ch/SimpleAsynchronousFileChannelImpl$1.class +INFO: Loading Class: sun/nio/ch/SimpleAsynchronousFileChannelImpl$2.class +INFO: Loading Class: sun/nio/ch/SimpleAsynchronousFileChannelImpl$3.class +INFO: Loading Class: sun/nio/ch/SimpleAsynchronousFileChannelImpl$DefaultExecutorHolder.class +INFO: Loading Class: sun/nio/ch/SimpleAsynchronousFileChannelImpl.class +INFO: Loading Class: sun/nio/ch/SinkChannelImpl.class +INFO: Loading Class: sun/nio/ch/SocketAdaptor$1.class +INFO: Loading Class: sun/nio/ch/SocketAdaptor$2.class +INFO: Loading Class: sun/nio/ch/SocketAdaptor$SocketInputStream.class +INFO: Loading Class: sun/nio/ch/SocketAdaptor.class +INFO: Loading Class: sun/nio/ch/SocketChannelImpl$DefaultOptionsHolder.class +INFO: Loading Class: sun/nio/ch/SocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/SocketDispatcher.class +INFO: Loading Class: sun/nio/ch/SocketOptionRegistry$LazyInitialization.class +INFO: Loading Class: sun/nio/ch/SocketOptionRegistry$RegistryKey.class +INFO: Loading Class: sun/nio/ch/SocketOptionRegistry.class +INFO: Loading Class: sun/nio/ch/SourceChannelImpl.class +INFO: Loading Class: sun/nio/ch/ThreadPool$DefaultThreadPoolHolder.class +INFO: Loading Class: sun/nio/ch/ThreadPool.class +INFO: Loading Class: sun/nio/ch/UnixAsynchronousServerSocketChannelImpl$1.class +INFO: Loading Class: sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/UnixAsynchronousSocketChannelImpl$1.class +INFO: Loading Class: sun/nio/ch/UnixAsynchronousSocketChannelImpl$2.class +INFO: Loading Class: sun/nio/ch/UnixAsynchronousSocketChannelImpl$OpType.class +INFO: Loading Class: sun/nio/ch/UnixAsynchronousSocketChannelImpl.class +INFO: Loading Class: sun/nio/ch/Util$2.class +INFO: Loading Class: sun/nio/ch/Util$3.class +INFO: Loading Class: sun/nio/ch/Util$4.class +INFO: Loading Class: sun/nio/ch/Util$5.class +INFO: Loading Class: sun/nio/ch/sctp/AssociationChange.class +INFO: Loading Class: sun/nio/ch/sctp/AssociationImpl.class +INFO: Loading Class: sun/nio/ch/sctp/MessageInfoImpl.class +INFO: Loading Class: sun/nio/ch/sctp/PeerAddrChange.class +INFO: Loading Class: sun/nio/ch/sctp/ResultContainer.class +INFO: Loading Class: sun/nio/ch/sctp/SctpChannelImpl.class +INFO: Loading Class: sun/nio/ch/sctp/SctpMultiChannelImpl.class +INFO: Loading Class: sun/nio/ch/sctp/SctpNet.class +INFO: Loading Class: sun/nio/ch/sctp/SctpNotification.class +INFO: Loading Class: sun/nio/ch/sctp/SctpServerChannelImpl.class +INFO: Loading Class: sun/nio/ch/sctp/SctpStdSocketOption.class +INFO: Loading Class: sun/nio/ch/sctp/SendFailed.class +INFO: Loading Class: sun/nio/ch/sctp/Shutdown.class +INFO: Loading Class: sun/nio/cs/AbstractCharsetProvider$1.class +INFO: Loading Class: sun/nio/cs/AbstractCharsetProvider.class +INFO: Loading Class: sun/nio/cs/CESU_8$1.class +INFO: Loading Class: sun/nio/cs/CESU_8$Decoder.class +INFO: Loading Class: sun/nio/cs/CESU_8$Encoder.class +INFO: Loading Class: sun/nio/cs/CESU_8.class +INFO: Loading Class: sun/nio/cs/CharsetMapping$1.class +INFO: Loading Class: sun/nio/cs/CharsetMapping$2.class +INFO: Loading Class: sun/nio/cs/CharsetMapping$3.class +INFO: Loading Class: sun/nio/cs/CharsetMapping$4.class +INFO: Loading Class: sun/nio/cs/CharsetMapping$Entry.class +INFO: Loading Class: sun/nio/cs/CharsetMapping.class +INFO: Loading Class: sun/nio/cs/FastCharsetProvider$1.class +INFO: Loading Class: sun/nio/cs/IBM437.class +INFO: Loading Class: sun/nio/cs/IBM737.class +INFO: Loading Class: sun/nio/cs/IBM775.class +INFO: Loading Class: sun/nio/cs/IBM850.class +INFO: Loading Class: sun/nio/cs/IBM852.class +INFO: Loading Class: sun/nio/cs/IBM855.class +INFO: Loading Class: sun/nio/cs/IBM857.class +INFO: Loading Class: sun/nio/cs/IBM858.class +INFO: Loading Class: sun/nio/cs/IBM862.class +INFO: Loading Class: sun/nio/cs/IBM866.class +INFO: Loading Class: sun/nio/cs/IBM874.class +INFO: Loading Class: sun/nio/cs/ISO_8859_1$1.class +INFO: Loading Class: sun/nio/cs/ISO_8859_1$Encoder.class +INFO: Loading Class: sun/nio/cs/ISO_8859_13.class +INFO: Loading Class: sun/nio/cs/ISO_8859_15.class +INFO: Loading Class: sun/nio/cs/ISO_8859_2.class +INFO: Loading Class: sun/nio/cs/ISO_8859_4.class +INFO: Loading Class: sun/nio/cs/ISO_8859_5.class +INFO: Loading Class: sun/nio/cs/ISO_8859_7.class +INFO: Loading Class: sun/nio/cs/ISO_8859_9.class +INFO: Loading Class: sun/nio/cs/KOI8_R.class +INFO: Loading Class: sun/nio/cs/KOI8_U.class +INFO: Loading Class: sun/nio/cs/MS1250.class +INFO: Loading Class: sun/nio/cs/MS1251.class +INFO: Loading Class: sun/nio/cs/MS1252.class +INFO: Loading Class: sun/nio/cs/MS1253.class +INFO: Loading Class: sun/nio/cs/MS1254.class +INFO: Loading Class: sun/nio/cs/MS1257.class +INFO: Loading Class: sun/nio/cs/SingleByte$Decoder.class +INFO: Loading Class: sun/nio/cs/SingleByte$Encoder.class +INFO: Loading Class: sun/nio/cs/SingleByte.class +INFO: Loading Class: sun/nio/cs/StandardCharsets$1.class +INFO: Loading Class: sun/nio/cs/Surrogate$Generator.class +INFO: Loading Class: sun/nio/cs/Surrogate$Parser.class +INFO: Loading Class: sun/nio/cs/Surrogate.class +INFO: Loading Class: sun/nio/cs/ThreadLocalCoders$1.class +INFO: Loading Class: sun/nio/cs/ThreadLocalCoders$2.class +INFO: Loading Class: sun/nio/cs/ThreadLocalCoders$Cache.class +INFO: Loading Class: sun/nio/cs/ThreadLocalCoders.class +INFO: Loading Class: sun/nio/cs/US_ASCII$1.class +INFO: Loading Class: sun/nio/cs/US_ASCII$Decoder.class +INFO: Loading Class: sun/nio/cs/US_ASCII$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_16$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_16BE$Decoder.class +INFO: Loading Class: sun/nio/cs/UTF_16BE$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_16LE$Decoder.class +INFO: Loading Class: sun/nio/cs/UTF_16LE$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_16LE_BOM$Decoder.class +INFO: Loading Class: sun/nio/cs/UTF_16LE_BOM$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_16LE_BOM.class +INFO: Loading Class: sun/nio/cs/UTF_32.class +INFO: Loading Class: sun/nio/cs/UTF_32BE.class +INFO: Loading Class: sun/nio/cs/UTF_32BE_BOM.class +INFO: Loading Class: sun/nio/cs/UTF_32Coder$Decoder.class +INFO: Loading Class: sun/nio/cs/UTF_32Coder$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_32Coder.class +INFO: Loading Class: sun/nio/cs/UTF_32LE.class +INFO: Loading Class: sun/nio/cs/UTF_32LE_BOM.class +INFO: Loading Class: sun/nio/cs/UTF_8$1.class +INFO: Loading Class: sun/nio/cs/UnicodeEncoder.class +INFO: Loading Class: sun/nio/fs/AbstractAclFileAttributeView.class +INFO: Loading Class: sun/nio/fs/AbstractBasicFileAttributeView$AttributesBuilder.class +INFO: Loading Class: sun/nio/fs/AbstractBasicFileAttributeView.class +INFO: Loading Class: sun/nio/fs/AbstractFileSystemProvider.class +INFO: Loading Class: sun/nio/fs/AbstractFileTypeDetector.class +INFO: Loading Class: sun/nio/fs/AbstractPath$1.class +INFO: Loading Class: sun/nio/fs/AbstractPath.class +INFO: Loading Class: sun/nio/fs/AbstractPoller$1.class +INFO: Loading Class: sun/nio/fs/AbstractPoller$2.class +INFO: Loading Class: sun/nio/fs/AbstractPoller$Request.class +INFO: Loading Class: sun/nio/fs/AbstractPoller$RequestType.class +INFO: Loading Class: sun/nio/fs/AbstractPoller.class +INFO: Loading Class: sun/nio/fs/AbstractUserDefinedFileAttributeView.class +INFO: Loading Class: sun/nio/fs/AbstractWatchKey$Event.class +INFO: Loading Class: sun/nio/fs/AbstractWatchKey$State.class +INFO: Loading Class: sun/nio/fs/AbstractWatchKey.class +INFO: Loading Class: sun/nio/fs/AbstractWatchService$1.class +INFO: Loading Class: sun/nio/fs/AbstractWatchService.class +INFO: Loading Class: sun/nio/fs/BasicFileAttributesHolder.class +INFO: Loading Class: sun/nio/fs/BsdFileStore.class +INFO: Loading Class: sun/nio/fs/BsdFileSystem$SupportedFileFileAttributeViewsHolder.class +INFO: Loading Class: sun/nio/fs/BsdFileSystem.class +INFO: Loading Class: sun/nio/fs/BsdFileSystemProvider.class +INFO: Loading Class: sun/nio/fs/BsdNativeDispatcher.class +INFO: Loading Class: sun/nio/fs/Cancellable.class +INFO: Loading Class: sun/nio/fs/DefaultFileSystemProvider.class +INFO: Loading Class: sun/nio/fs/DefaultFileTypeDetector.class +INFO: Loading Class: sun/nio/fs/DynamicFileAttributeView.class +INFO: Loading Class: sun/nio/fs/FileOwnerAttributeViewImpl.class +INFO: Loading Class: sun/nio/fs/Globs.class +INFO: Loading Class: sun/nio/fs/MacOSXFileSystem.class +INFO: Loading Class: sun/nio/fs/MacOSXFileSystemProvider.class +INFO: Loading Class: sun/nio/fs/MacOSXNativeDispatcher.class +INFO: Loading Class: sun/nio/fs/MimeTypesFileTypeDetector$1.class +INFO: Loading Class: sun/nio/fs/MimeTypesFileTypeDetector.class +INFO: Loading Class: sun/nio/fs/NativeBuffer$Deallocator.class +INFO: Loading Class: sun/nio/fs/NativeBuffer.class +INFO: Loading Class: sun/nio/fs/NativeBuffers.class +INFO: Loading Class: sun/nio/fs/PollingWatchService$1.class +INFO: Loading Class: sun/nio/fs/PollingWatchService$2.class +INFO: Loading Class: sun/nio/fs/PollingWatchService$3.class +INFO: Loading Class: sun/nio/fs/PollingWatchService$CacheEntry.class +INFO: Loading Class: sun/nio/fs/PollingWatchService$PollingWatchKey$1.class +INFO: Loading Class: sun/nio/fs/PollingWatchService$PollingWatchKey.class +INFO: Loading Class: sun/nio/fs/PollingWatchService.class +INFO: Loading Class: sun/nio/fs/Reflect$1.class +INFO: Loading Class: sun/nio/fs/Reflect.class +INFO: Loading Class: sun/nio/fs/UnixChannelFactory$1.class +INFO: Loading Class: sun/nio/fs/UnixChannelFactory$Flags.class +INFO: Loading Class: sun/nio/fs/UnixChannelFactory.class +INFO: Loading Class: sun/nio/fs/UnixConstants.class +INFO: Loading Class: sun/nio/fs/UnixCopyFile$1.class +INFO: Loading Class: sun/nio/fs/UnixCopyFile$2.class +INFO: Loading Class: sun/nio/fs/UnixCopyFile$Flags.class +INFO: Loading Class: sun/nio/fs/UnixCopyFile.class +INFO: Loading Class: sun/nio/fs/UnixDirectoryStream$UnixDirectoryIterator.class +INFO: Loading Class: sun/nio/fs/UnixDirectoryStream.class +INFO: Loading Class: sun/nio/fs/UnixException.class +INFO: Loading Class: sun/nio/fs/UnixFileAttributeViews$Basic.class +INFO: Loading Class: sun/nio/fs/UnixFileAttributeViews$Posix.class +INFO: Loading Class: sun/nio/fs/UnixFileAttributeViews$Unix.class +INFO: Loading Class: sun/nio/fs/UnixFileAttributeViews.class +INFO: Loading Class: sun/nio/fs/UnixFileAttributes$UnixAsBasicFileAttributes.class +INFO: Loading Class: sun/nio/fs/UnixFileAttributes.class +INFO: Loading Class: sun/nio/fs/UnixFileKey.class +INFO: Loading Class: sun/nio/fs/UnixFileModeAttribute$1.class +INFO: Loading Class: sun/nio/fs/UnixFileModeAttribute.class +INFO: Loading Class: sun/nio/fs/UnixFileStore$1.class +INFO: Loading Class: sun/nio/fs/UnixFileStore$FeatureStatus.class +INFO: Loading Class: sun/nio/fs/UnixFileStore.class +INFO: Loading Class: sun/nio/fs/UnixFileStoreAttributes.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem$1.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem$2.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem$3.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem$FileStoreIterator.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem$LookupService$1.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem$LookupService.class +INFO: Loading Class: sun/nio/fs/UnixFileSystem.class +INFO: Loading Class: sun/nio/fs/UnixFileSystemProvider$1.class +INFO: Loading Class: sun/nio/fs/UnixFileSystemProvider$2.class +INFO: Loading Class: sun/nio/fs/UnixFileSystemProvider$3.class +INFO: Loading Class: sun/nio/fs/UnixFileSystemProvider.class +INFO: Loading Class: sun/nio/fs/UnixMountEntry.class +INFO: Loading Class: sun/nio/fs/UnixNativeDispatcher$1.class +INFO: Loading Class: sun/nio/fs/UnixNativeDispatcher.class +INFO: Loading Class: sun/nio/fs/UnixPath.class +INFO: Loading Class: sun/nio/fs/UnixSecureDirectoryStream$BasicFileAttributeViewImpl.class +INFO: Loading Class: sun/nio/fs/UnixSecureDirectoryStream$PosixFileAttributeViewImpl.class +INFO: Loading Class: sun/nio/fs/UnixSecureDirectoryStream.class +INFO: Loading Class: sun/nio/fs/UnixUriUtils.class +INFO: Loading Class: sun/nio/fs/UnixUserPrincipals$1.class +INFO: Loading Class: sun/nio/fs/UnixUserPrincipals$Group.class +INFO: Loading Class: sun/nio/fs/UnixUserPrincipals$User.class +INFO: Loading Class: sun/nio/fs/UnixUserPrincipals.class +INFO: Loading Class: sun/nio/fs/Util.class +INFO: Loading Class: sun/print/AttributeClass.class +INFO: Loading Class: sun/print/AttributeUpdater.class +INFO: Loading Class: sun/print/BackgroundLookupListener.class +INFO: Loading Class: sun/print/BackgroundServiceLookup.class +INFO: Loading Class: sun/print/CUPSPrinter$1.class +INFO: Loading Class: sun/print/CUPSPrinter$2.class +INFO: Loading Class: sun/print/CUPSPrinter$3.class +INFO: Loading Class: sun/print/CUPSPrinter.class +INFO: Loading Class: sun/print/CustomMediaSizeName.class +INFO: Loading Class: sun/print/CustomMediaTray.class +INFO: Loading Class: sun/print/DialogOwner.class +INFO: Loading Class: sun/print/DocumentPropertiesUI.class +INFO: Loading Class: sun/print/IPPPrintService$1.class +INFO: Loading Class: sun/print/IPPPrintService$ExtFinishing.class +INFO: Loading Class: sun/print/IPPPrintService.class +INFO: Loading Class: sun/print/ImagePrinter.class +INFO: Loading Class: sun/print/OpenBook.class +INFO: Loading Class: sun/print/PSPathGraphics.class +INFO: Loading Class: sun/print/PSPrinterJob$1.class +INFO: Loading Class: sun/print/PSPrinterJob$2.class +INFO: Loading Class: sun/print/PSPrinterJob$3.class +INFO: Loading Class: sun/print/PSPrinterJob$4.class +INFO: Loading Class: sun/print/PSPrinterJob$EPSPrinter.class +INFO: Loading Class: sun/print/PSPrinterJob$GState.class +INFO: Loading Class: sun/print/PSPrinterJob$PluginPrinter.class +INFO: Loading Class: sun/print/PSPrinterJob$PrinterOpener.class +INFO: Loading Class: sun/print/PSPrinterJob$PrinterSpooler.class +INFO: Loading Class: sun/print/PSPrinterJob.class +INFO: Loading Class: sun/print/PSStreamPrintJob.class +INFO: Loading Class: sun/print/PSStreamPrintService.class +INFO: Loading Class: sun/print/PSStreamPrinterFactory.class +INFO: Loading Class: sun/print/PageableDoc.class +INFO: Loading Class: sun/print/PathGraphics.class +INFO: Loading Class: sun/print/PeekGraphics$ImageWaiter.class +INFO: Loading Class: sun/print/PeekGraphics.class +INFO: Loading Class: sun/print/PeekMetrics.class +INFO: Loading Class: sun/print/PrintJob2D$MessageQ.class +INFO: Loading Class: sun/print/PrintJob2D.class +INFO: Loading Class: sun/print/PrintJobAttributeException.class +INFO: Loading Class: sun/print/PrintJobFlavorException.class +INFO: Loading Class: sun/print/PrinterGraphicsDevice.class +INFO: Loading Class: sun/print/PrinterJobWrapper.class +INFO: Loading Class: sun/print/ProxyGraphics.class +INFO: Loading Class: sun/print/ProxyGraphics2D.class +INFO: Loading Class: sun/print/ProxyPrintGraphics.class +INFO: Loading Class: sun/print/RasterPrinterJob$1.class +INFO: Loading Class: sun/print/RasterPrinterJob$2.class +INFO: Loading Class: sun/print/RasterPrinterJob$3.class +INFO: Loading Class: sun/print/RasterPrinterJob$4.class +INFO: Loading Class: sun/print/RasterPrinterJob$GraphicsState.class +INFO: Loading Class: sun/print/RasterPrinterJob.class +INFO: Loading Class: sun/print/ServiceDialog$1.class +INFO: Loading Class: sun/print/ServiceDialog$2.class +INFO: Loading Class: sun/print/ServiceDialog$3.class +INFO: Loading Class: sun/print/ServiceDialog$4.class +INFO: Loading Class: sun/print/ServiceDialog$5.class +INFO: Loading Class: sun/print/ServiceDialog$AppearancePanel.class +INFO: Loading Class: sun/print/ServiceDialog$ChromaticityPanel.class +INFO: Loading Class: sun/print/ServiceDialog$CopiesPanel.class +INFO: Loading Class: sun/print/ServiceDialog$GeneralPanel.class +INFO: Loading Class: sun/print/ServiceDialog$IconRadioButton$1.class +INFO: Loading Class: sun/print/ServiceDialog$IconRadioButton.class +INFO: Loading Class: sun/print/ServiceDialog$JobAttributesPanel.class +INFO: Loading Class: sun/print/ServiceDialog$MarginsPanel.class +INFO: Loading Class: sun/print/ServiceDialog$MediaPanel.class +INFO: Loading Class: sun/print/ServiceDialog$OrientationPanel.class +INFO: Loading Class: sun/print/ServiceDialog$PageSetupPanel.class +INFO: Loading Class: sun/print/ServiceDialog$PrintRangePanel.class +INFO: Loading Class: sun/print/ServiceDialog$PrintServicePanel.class +INFO: Loading Class: sun/print/ServiceDialog$QualityPanel.class +INFO: Loading Class: sun/print/ServiceDialog$SidesPanel.class +INFO: Loading Class: sun/print/ServiceDialog$ValidatingFileChooser.class +INFO: Loading Class: sun/print/ServiceDialog.class +INFO: Loading Class: sun/print/ServiceNotifier.class +INFO: Loading Class: sun/print/SunAlternateMedia.class +INFO: Loading Class: sun/print/SunMinMaxPage.class +INFO: Loading Class: sun/print/SunPageSelection.class +INFO: Loading Class: sun/print/SunPrinterJobService.class +INFO: Loading Class: sun/print/UnixPrintJob$1.class +INFO: Loading Class: sun/print/UnixPrintJob$PrinterOpener.class +INFO: Loading Class: sun/print/UnixPrintJob$PrinterSpooler.class +INFO: Loading Class: sun/print/UnixPrintJob.class +INFO: Loading Class: sun/print/UnixPrintService.class +INFO: Loading Class: sun/print/UnixPrintServiceLookup$1.class +INFO: Loading Class: sun/print/UnixPrintServiceLookup$PrinterChangeListener.class +INFO: Loading Class: sun/print/UnixPrintServiceLookup.class +INFO: Loading Class: sun/print/resources/serviceui.class +INFO: Loading Class: sun/print/resources/serviceui_de.class +INFO: Loading Class: sun/print/resources/serviceui_es.class +INFO: Loading Class: sun/print/resources/serviceui_fr.class +INFO: Loading Class: sun/print/resources/serviceui_it.class +INFO: Loading Class: sun/print/resources/serviceui_ja.class +INFO: Loading Class: sun/print/resources/serviceui_ko.class +INFO: Loading Class: sun/print/resources/serviceui_pt_BR.class +INFO: Loading Class: sun/print/resources/serviceui_sv.class +INFO: Loading Class: sun/print/resources/serviceui_zh_CN.class +INFO: Loading Class: sun/print/resources/serviceui_zh_HK.class +INFO: Loading Class: sun/print/resources/serviceui_zh_TW.class +INFO: Loading Class: sun/reflect/FieldInfo.class +INFO: Loading Class: sun/reflect/InstantiationExceptionConstructorAccessorImpl.class +INFO: Loading Class: sun/reflect/SignatureIterator.class +INFO: Loading Class: sun/reflect/UnsafeByteFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeCharacterFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeDoubleFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeFloatFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeIntegerFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeLongFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedByteFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedCharacterFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedDoubleFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedFloatFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedIntegerFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedLongFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedObjectFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedShortFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticByteFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticCharacterFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticDoubleFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticFloatFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticShortFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeShortFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticByteFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticCharacterFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticDoubleFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticFloatFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticIntegerFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticLongFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticObjectFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeStaticShortFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/annotation/AnnotatedTypeFactory$AnnotatedArrayTypeImpl.class +INFO: Loading Class: sun/reflect/annotation/AnnotatedTypeFactory$AnnotatedParameterizedTypeImpl.class +INFO: Loading Class: sun/reflect/annotation/AnnotatedTypeFactory$AnnotatedTypeBaseImpl.class +INFO: Loading Class: sun/reflect/annotation/AnnotatedTypeFactory$AnnotatedTypeVariableImpl.class +INFO: Loading Class: sun/reflect/annotation/AnnotatedTypeFactory$AnnotatedWildcardTypeImpl.class +INFO: Loading Class: sun/reflect/annotation/AnnotatedTypeFactory.class +INFO: Loading Class: sun/reflect/annotation/AnnotationInvocationHandler$1.class +INFO: Loading Class: sun/reflect/annotation/AnnotationInvocationHandler$UnsafeAccessor.class +INFO: Loading Class: sun/reflect/annotation/AnnotationInvocationHandler.class +INFO: Loading Class: sun/reflect/annotation/AnnotationParser$1.class +INFO: Loading Class: sun/reflect/annotation/AnnotationParser.class +INFO: Loading Class: sun/reflect/annotation/AnnotationSupport.class +INFO: Loading Class: sun/reflect/annotation/AnnotationType$1.class +INFO: Loading Class: sun/reflect/annotation/AnnotationTypeMismatchExceptionProxy.class +INFO: Loading Class: sun/reflect/annotation/EnumConstantNotPresentExceptionProxy.class +INFO: Loading Class: sun/reflect/annotation/ExceptionProxy.class +INFO: Loading Class: sun/reflect/annotation/TypeAnnotation$LocationInfo$Location.class +INFO: Loading Class: sun/reflect/annotation/TypeAnnotation$LocationInfo.class +INFO: Loading Class: sun/reflect/annotation/TypeAnnotation$TypeAnnotationTarget.class +INFO: Loading Class: sun/reflect/annotation/TypeAnnotation$TypeAnnotationTargetInfo.class +INFO: Loading Class: sun/reflect/annotation/TypeAnnotation.class +INFO: Loading Class: sun/reflect/annotation/TypeAnnotationParser.class +INFO: Loading Class: sun/reflect/annotation/TypeNotPresentExceptionProxy.class +INFO: Loading Class: sun/reflect/generics/factory/CoreReflectionFactory.class +INFO: Loading Class: sun/reflect/generics/factory/GenericsFactory.class +INFO: Loading Class: sun/reflect/generics/parser/SignatureParser.class +INFO: Loading Class: sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.class +INFO: Loading Class: sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator.class +INFO: Loading Class: sun/reflect/generics/reflectiveObjects/NotImplementedException.class +INFO: Loading Class: sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.class +INFO: Loading Class: sun/reflect/generics/reflectiveObjects/TypeVariableImpl.class +INFO: Loading Class: sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.class +INFO: Loading Class: sun/reflect/generics/repository/ConstructorRepository.class +INFO: Loading Class: sun/reflect/generics/repository/FieldRepository.class +INFO: Loading Class: sun/reflect/generics/repository/MethodRepository.class +INFO: Loading Class: sun/reflect/generics/scope/AbstractScope.class +INFO: Loading Class: sun/reflect/generics/scope/ClassScope.class +INFO: Loading Class: sun/reflect/generics/scope/ConstructorScope.class +INFO: Loading Class: sun/reflect/generics/scope/DummyScope.class +INFO: Loading Class: sun/reflect/generics/scope/MethodScope.class +INFO: Loading Class: sun/reflect/generics/scope/Scope.class +INFO: Loading Class: sun/reflect/generics/tree/ArrayTypeSignature.class +INFO: Loading Class: sun/reflect/generics/tree/BaseType.class +INFO: Loading Class: sun/reflect/generics/tree/BooleanSignature.class +INFO: Loading Class: sun/reflect/generics/tree/BottomSignature.class +INFO: Loading Class: sun/reflect/generics/tree/ByteSignature.class +INFO: Loading Class: sun/reflect/generics/tree/CharSignature.class +INFO: Loading Class: sun/reflect/generics/tree/ClassSignature.class +INFO: Loading Class: sun/reflect/generics/tree/ClassTypeSignature.class +INFO: Loading Class: sun/reflect/generics/tree/DoubleSignature.class +INFO: Loading Class: sun/reflect/generics/tree/FieldTypeSignature.class +INFO: Loading Class: sun/reflect/generics/tree/FloatSignature.class +INFO: Loading Class: sun/reflect/generics/tree/FormalTypeParameter.class +INFO: Loading Class: sun/reflect/generics/tree/IntSignature.class +INFO: Loading Class: sun/reflect/generics/tree/LongSignature.class +INFO: Loading Class: sun/reflect/generics/tree/MethodTypeSignature.class +INFO: Loading Class: sun/reflect/generics/tree/ReturnType.class +INFO: Loading Class: sun/reflect/generics/tree/ShortSignature.class +INFO: Loading Class: sun/reflect/generics/tree/Signature.class +INFO: Loading Class: sun/reflect/generics/tree/SimpleClassTypeSignature.class +INFO: Loading Class: sun/reflect/generics/tree/Tree.class +INFO: Loading Class: sun/reflect/generics/tree/TypeArgument.class +INFO: Loading Class: sun/reflect/generics/tree/TypeSignature.class +INFO: Loading Class: sun/reflect/generics/tree/TypeTree.class +INFO: Loading Class: sun/reflect/generics/tree/TypeVariableSignature.class +INFO: Loading Class: sun/reflect/generics/tree/VoidDescriptor.class +INFO: Loading Class: sun/reflect/generics/tree/Wildcard.class +INFO: Loading Class: sun/reflect/generics/visitor/Reifier.class +INFO: Loading Class: sun/reflect/generics/visitor/TypeTreeVisitor.class +INFO: Loading Class: sun/reflect/generics/visitor/Visitor.class +INFO: Loading Class: sun/reflect/misc/ConstructorUtil.class +INFO: Loading Class: sun/reflect/misc/FieldUtil.class +INFO: Loading Class: sun/reflect/misc/MethodUtil$Signature.class +INFO: Loading Class: sun/reflect/misc/Trampoline.class +INFO: Loading Class: sun/rmi/log/LogHandler.class +INFO: Loading Class: sun/rmi/log/LogInputStream.class +INFO: Loading Class: sun/rmi/log/LogOutputStream.class +INFO: Loading Class: sun/rmi/log/ReliableLog$1.class +INFO: Loading Class: sun/rmi/log/ReliableLog$LogFile.class +INFO: Loading Class: sun/rmi/log/ReliableLog.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl$1.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl$2.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl$3.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl$4.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl$5.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl$6.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl_Skel.class +INFO: Loading Class: sun/rmi/registry/RegistryImpl_Stub.class +INFO: Loading Class: sun/rmi/runtime/Log$1.class +INFO: Loading Class: sun/rmi/runtime/Log$InternalStreamHandler.class +INFO: Loading Class: sun/rmi/runtime/Log$LogFactory.class +INFO: Loading Class: sun/rmi/runtime/Log$LogStreamLog.class +INFO: Loading Class: sun/rmi/runtime/Log$LogStreamLogFactory.class +INFO: Loading Class: sun/rmi/runtime/Log$LoggerLog$1.class +INFO: Loading Class: sun/rmi/runtime/Log$LoggerLog$2.class +INFO: Loading Class: sun/rmi/runtime/Log$LoggerLog.class +INFO: Loading Class: sun/rmi/runtime/Log$LoggerLogFactory.class +INFO: Loading Class: sun/rmi/runtime/Log$LoggerPrintStream.class +INFO: Loading Class: sun/rmi/runtime/Log.class +INFO: Loading Class: sun/rmi/runtime/NewThreadAction$1.class +INFO: Loading Class: sun/rmi/runtime/NewThreadAction$2.class +INFO: Loading Class: sun/rmi/runtime/NewThreadAction.class +INFO: Loading Class: sun/rmi/runtime/RuntimeUtil$1.class +INFO: Loading Class: sun/rmi/runtime/RuntimeUtil$GetInstanceAction.class +INFO: Loading Class: sun/rmi/runtime/RuntimeUtil.class +INFO: Loading Class: sun/rmi/server/ActivatableRef.class +INFO: Loading Class: sun/rmi/server/ActivatableServerRef.class +INFO: Loading Class: sun/rmi/server/Activation$1.class +INFO: Loading Class: sun/rmi/server/Activation$2.class +INFO: Loading Class: sun/rmi/server/Activation$3.class +INFO: Loading Class: sun/rmi/server/Activation$4.class +INFO: Loading Class: sun/rmi/server/Activation$ActLogHandler.class +INFO: Loading Class: sun/rmi/server/Activation$ActivationMonitorImpl.class +INFO: Loading Class: sun/rmi/server/Activation$ActivationServerSocketFactory.class +INFO: Loading Class: sun/rmi/server/Activation$ActivationSystemImpl.class +INFO: Loading Class: sun/rmi/server/Activation$ActivationSystemImpl_Stub.class +INFO: Loading Class: sun/rmi/server/Activation$ActivatorImpl.class +INFO: Loading Class: sun/rmi/server/Activation$DefaultExecPolicy$1.class +INFO: Loading Class: sun/rmi/server/Activation$DefaultExecPolicy$2.class +INFO: Loading Class: sun/rmi/server/Activation$DefaultExecPolicy.class +INFO: Loading Class: sun/rmi/server/Activation$DelayedAcceptServerSocket$1.class +INFO: Loading Class: sun/rmi/server/Activation$DelayedAcceptServerSocket$2.class +INFO: Loading Class: sun/rmi/server/Activation$DelayedAcceptServerSocket.class +INFO: Loading Class: sun/rmi/server/Activation$GroupEntry$Watchdog.class +INFO: Loading Class: sun/rmi/server/Activation$GroupEntry.class +INFO: Loading Class: sun/rmi/server/Activation$LogGroupIncarnation.class +INFO: Loading Class: sun/rmi/server/Activation$LogRecord.class +INFO: Loading Class: sun/rmi/server/Activation$LogRegisterGroup.class +INFO: Loading Class: sun/rmi/server/Activation$LogRegisterObject.class +INFO: Loading Class: sun/rmi/server/Activation$LogUnregisterGroup.class +INFO: Loading Class: sun/rmi/server/Activation$LogUnregisterObject.class +INFO: Loading Class: sun/rmi/server/Activation$LogUpdateDesc.class +INFO: Loading Class: sun/rmi/server/Activation$LogUpdateGroupDesc.class +INFO: Loading Class: sun/rmi/server/Activation$ObjectEntry.class +INFO: Loading Class: sun/rmi/server/Activation$Shutdown.class +INFO: Loading Class: sun/rmi/server/Activation$ShutdownHook.class +INFO: Loading Class: sun/rmi/server/Activation$SystemRegistryImpl.class +INFO: Loading Class: sun/rmi/server/Activation.class +INFO: Loading Class: sun/rmi/server/ActivationGroupImpl$1.class +INFO: Loading Class: sun/rmi/server/ActivationGroupImpl$ActiveEntry.class +INFO: Loading Class: sun/rmi/server/ActivationGroupImpl$ServerSocketFactoryImpl.class +INFO: Loading Class: sun/rmi/server/ActivationGroupImpl.class +INFO: Loading Class: sun/rmi/server/ActivationGroupInit.class +INFO: Loading Class: sun/rmi/server/DeserializationChecker.class +INFO: Loading Class: sun/rmi/server/Dispatcher.class +INFO: Loading Class: sun/rmi/server/InactiveGroupException.class +INFO: Loading Class: sun/rmi/server/LoaderHandler$1.class +INFO: Loading Class: sun/rmi/server/LoaderHandler$2.class +INFO: Loading Class: sun/rmi/server/LoaderHandler$Loader.class +INFO: Loading Class: sun/rmi/server/LoaderHandler$LoaderEntry.class +INFO: Loading Class: sun/rmi/server/LoaderHandler$LoaderKey.class +INFO: Loading Class: sun/rmi/server/LoaderHandler.class +INFO: Loading Class: sun/rmi/server/MarshalInputStream$StreamChecker.class +INFO: Loading Class: sun/rmi/server/MarshalInputStream.class +INFO: Loading Class: sun/rmi/server/MarshalOutputStream$1.class +INFO: Loading Class: sun/rmi/server/MarshalOutputStream.class +INFO: Loading Class: sun/rmi/server/PipeWriter.class +INFO: Loading Class: sun/rmi/server/UnicastRef.class +INFO: Loading Class: sun/rmi/server/UnicastRef2.class +INFO: Loading Class: sun/rmi/server/UnicastServerRef$HashToMethod_Maps$1.class +INFO: Loading Class: sun/rmi/server/UnicastServerRef$HashToMethod_Maps.class +INFO: Loading Class: sun/rmi/server/UnicastServerRef$MyChecker.class +INFO: Loading Class: sun/rmi/server/UnicastServerRef.class +INFO: Loading Class: sun/rmi/server/UnicastServerRef2.class +INFO: Loading Class: sun/rmi/server/Util$1.class +INFO: Loading Class: sun/rmi/server/Util.class +INFO: Loading Class: sun/rmi/server/WeakClassHashMap$ValueCell.class +INFO: Loading Class: sun/rmi/server/WeakClassHashMap.class +INFO: Loading Class: sun/rmi/transport/Channel.class +INFO: Loading Class: sun/rmi/transport/Connection.class +INFO: Loading Class: sun/rmi/transport/ConnectionInputStream.class +INFO: Loading Class: sun/rmi/transport/ConnectionOutputStream.class +INFO: Loading Class: sun/rmi/transport/DGCAckHandler$1.class +INFO: Loading Class: sun/rmi/transport/DGCAckHandler.class +INFO: Loading Class: sun/rmi/transport/DGCClient$1.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry$1.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry$CleanRequest.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry$RefEntry$PhantomLiveRef.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry$RefEntry.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry$RenewCleanThread$1.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry$RenewCleanThread.class +INFO: Loading Class: sun/rmi/transport/DGCClient$EndpointEntry.class +INFO: Loading Class: sun/rmi/transport/DGCClient.class +INFO: Loading Class: sun/rmi/transport/DGCImpl$1.class +INFO: Loading Class: sun/rmi/transport/DGCImpl$2$1.class +INFO: Loading Class: sun/rmi/transport/DGCImpl$2.class +INFO: Loading Class: sun/rmi/transport/DGCImpl$LeaseInfo.class +INFO: Loading Class: sun/rmi/transport/DGCImpl.class +INFO: Loading Class: sun/rmi/transport/DGCImpl_Skel.class +INFO: Loading Class: sun/rmi/transport/DGCImpl_Stub.class +INFO: Loading Class: sun/rmi/transport/Endpoint.class +INFO: Loading Class: sun/rmi/transport/LiveRef.class +INFO: Loading Class: sun/rmi/transport/ObjectEndpoint.class +INFO: Loading Class: sun/rmi/transport/ObjectTable$1.class +INFO: Loading Class: sun/rmi/transport/ObjectTable$Reaper.class +INFO: Loading Class: sun/rmi/transport/ObjectTable.class +INFO: Loading Class: sun/rmi/transport/SequenceEntry.class +INFO: Loading Class: sun/rmi/transport/StreamRemoteCall.class +INFO: Loading Class: sun/rmi/transport/Target$1.class +INFO: Loading Class: sun/rmi/transport/Target$2.class +INFO: Loading Class: sun/rmi/transport/Target.class +INFO: Loading Class: sun/rmi/transport/Transport$1.class +INFO: Loading Class: sun/rmi/transport/Transport.class +INFO: Loading Class: sun/rmi/transport/TransportConstants.class +INFO: Loading Class: sun/rmi/transport/WeakRef.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIClientException.class +INFO: Loading Class: sun/rmi/transport/proxy/CGICommandHandler.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIForwardCommand.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIGethostnameCommand.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIHandler$1.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIHandler.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIPingCommand.class +INFO: Loading Class: sun/rmi/transport/proxy/CGIServerException.class +INFO: Loading Class: sun/rmi/transport/proxy/CGITryHostnameCommand.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpAwareServerSocket.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpInputStream.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpOutputStream.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpReceiveSocket.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpSendInputStream.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpSendOutputStream.class +INFO: Loading Class: sun/rmi/transport/proxy/HttpSendSocket.class +INFO: Loading Class: sun/rmi/transport/proxy/RMIDirectSocketFactory.class +INFO: Loading Class: sun/rmi/transport/proxy/RMIHttpToCGISocketFactory.class +INFO: Loading Class: sun/rmi/transport/proxy/RMIHttpToPortSocketFactory.class +INFO: Loading Class: sun/rmi/transport/proxy/RMIMasterSocketFactory$AsyncConnector.class +INFO: Loading Class: sun/rmi/transport/proxy/RMIMasterSocketFactory.class +INFO: Loading Class: sun/rmi/transport/proxy/RMISocketInfo.class +INFO: Loading Class: sun/rmi/transport/proxy/WrappedSocket$1.class +INFO: Loading Class: sun/rmi/transport/proxy/WrappedSocket.class +INFO: Loading Class: sun/rmi/transport/tcp/ConnectionAcceptor.class +INFO: Loading Class: sun/rmi/transport/tcp/ConnectionMultiplexer.class +INFO: Loading Class: sun/rmi/transport/tcp/MultiplexConnectionInfo.class +INFO: Loading Class: sun/rmi/transport/tcp/MultiplexInputStream.class +INFO: Loading Class: sun/rmi/transport/tcp/MultiplexOutputStream.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPChannel$1.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPChannel.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPConnection.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPEndpoint$FQDN.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPEndpoint.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPTransport$1.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPTransport$AcceptLoop.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPTransport$ConnectionHandler.class +INFO: Loading Class: sun/rmi/transport/tcp/TCPTransport.class +INFO: Loading Class: sun/security/acl/AclEntryImpl.class +INFO: Loading Class: sun/security/acl/AclEnumerator.class +INFO: Loading Class: sun/security/acl/AclImpl.class +INFO: Loading Class: sun/security/acl/AllPermissionsImpl.class +INFO: Loading Class: sun/security/acl/GroupImpl.class +INFO: Loading Class: sun/security/acl/OwnerImpl.class +INFO: Loading Class: sun/security/acl/PermissionImpl.class +INFO: Loading Class: sun/security/acl/PrincipalImpl.class +INFO: Loading Class: sun/security/acl/WorldGroupImpl.class +INFO: Loading Class: sun/security/action/GetBooleanSecurityPropertyAction.class +INFO: Loading Class: sun/security/action/GetIntegerAction.class +INFO: Loading Class: sun/security/action/GetLongAction.class +INFO: Loading Class: sun/security/action/OpenFileInputStreamAction.class +INFO: Loading Class: sun/security/action/PutAllAction.class +INFO: Loading Class: sun/security/jca/GetInstance$1.class +INFO: Loading Class: sun/security/jca/GetInstance$Instance.class +INFO: Loading Class: sun/security/jca/GetInstance.class +INFO: Loading Class: sun/security/jca/JCAUtil$CachedSecureRandomHolder.class +INFO: Loading Class: sun/security/jca/JCAUtil.class +INFO: Loading Class: sun/security/jca/ProviderConfig$1.class +INFO: Loading Class: sun/security/jca/ProviderConfig$2.class +INFO: Loading Class: sun/security/jca/ProviderConfig$3.class +INFO: Loading Class: sun/security/jca/ProviderConfig.class +INFO: Loading Class: sun/security/jca/ProviderList$1.class +INFO: Loading Class: sun/security/jca/ProviderList$2.class +INFO: Loading Class: sun/security/jca/ProviderList$3.class +INFO: Loading Class: sun/security/jca/ProviderList$ServiceList$1.class +INFO: Loading Class: sun/security/jca/ProviderList$ServiceList.class +INFO: Loading Class: sun/security/jca/ProviderList.class +INFO: Loading Class: sun/security/jca/Providers.class +INFO: Loading Class: sun/security/jca/ServiceId.class +INFO: Loading Class: sun/security/jgss/GSSCaller.class +INFO: Loading Class: sun/security/jgss/GSSContextImpl.class +INFO: Loading Class: sun/security/jgss/GSSCredentialImpl$SearchKey.class +INFO: Loading Class: sun/security/jgss/GSSCredentialImpl.class +INFO: Loading Class: sun/security/jgss/GSSExceptionImpl.class +INFO: Loading Class: sun/security/jgss/GSSHeader.class +INFO: Loading Class: sun/security/jgss/GSSManagerImpl$1.class +INFO: Loading Class: sun/security/jgss/GSSManagerImpl.class +INFO: Loading Class: sun/security/jgss/GSSNameImpl.class +INFO: Loading Class: sun/security/jgss/GSSToken.class +INFO: Loading Class: sun/security/jgss/GSSUtil$1.class +INFO: Loading Class: sun/security/jgss/GSSUtil.class +INFO: Loading Class: sun/security/jgss/HttpCaller.class +INFO: Loading Class: sun/security/jgss/LoginConfigImpl$1.class +INFO: Loading Class: sun/security/jgss/LoginConfigImpl.class +INFO: Loading Class: sun/security/jgss/ProviderList$PreferencesEntry.class +INFO: Loading Class: sun/security/jgss/ProviderList.class +INFO: Loading Class: sun/security/jgss/SunProvider$1.class +INFO: Loading Class: sun/security/jgss/SunProvider.class +INFO: Loading Class: sun/security/jgss/TokenTracker$Entry.class +INFO: Loading Class: sun/security/jgss/TokenTracker.class +INFO: Loading Class: sun/security/jgss/krb5/AcceptSecContextToken.class +INFO: Loading Class: sun/security/jgss/krb5/CipherHelper$WrapTokenInputStream.class +INFO: Loading Class: sun/security/jgss/krb5/CipherHelper.class +INFO: Loading Class: sun/security/jgss/krb5/InitSecContextToken.class +INFO: Loading Class: sun/security/jgss/krb5/InitialToken$OverloadedChecksum.class +INFO: Loading Class: sun/security/jgss/krb5/InitialToken.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5AcceptCredential$1.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5AcceptCredential.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Context$1.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Context$2.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Context$3.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Context$4.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Context$KerberosSessionKey.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Context.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5CredElement.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5InitCredential$1.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5InitCredential.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5MechFactory.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5NameElement.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5ProxyCredential.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Token.class +INFO: Loading Class: sun/security/jgss/krb5/Krb5Util.class +INFO: Loading Class: sun/security/jgss/krb5/MessageToken$MessageTokenHeader.class +INFO: Loading Class: sun/security/jgss/krb5/MessageToken.class +INFO: Loading Class: sun/security/jgss/krb5/MessageToken_v2$MessageTokenHeader.class +INFO: Loading Class: sun/security/jgss/krb5/MessageToken_v2.class +INFO: Loading Class: sun/security/jgss/krb5/MicToken.class +INFO: Loading Class: sun/security/jgss/krb5/MicToken_v2.class +INFO: Loading Class: sun/security/jgss/krb5/ServiceCreds.class +INFO: Loading Class: sun/security/jgss/krb5/SubjectComber.class +INFO: Loading Class: sun/security/jgss/krb5/WrapToken.class +INFO: Loading Class: sun/security/jgss/krb5/WrapToken_v2.class +INFO: Loading Class: sun/security/jgss/spi/GSSContextSpi.class +INFO: Loading Class: sun/security/jgss/spi/GSSCredentialSpi.class +INFO: Loading Class: sun/security/jgss/spi/GSSNameSpi.class +INFO: Loading Class: sun/security/jgss/spi/MechanismFactory.class +INFO: Loading Class: sun/security/jgss/spnego/NegTokenInit.class +INFO: Loading Class: sun/security/jgss/spnego/NegTokenTarg.class +INFO: Loading Class: sun/security/jgss/spnego/SpNegoContext.class +INFO: Loading Class: sun/security/jgss/spnego/SpNegoCredElement.class +INFO: Loading Class: sun/security/jgss/spnego/SpNegoMechFactory.class +INFO: Loading Class: sun/security/jgss/spnego/SpNegoToken$NegoResult.class +INFO: Loading Class: sun/security/jgss/spnego/SpNegoToken.class +INFO: Loading Class: sun/security/jgss/wrapper/GSSCredElement.class +INFO: Loading Class: sun/security/jgss/wrapper/GSSLibStub.class +INFO: Loading Class: sun/security/jgss/wrapper/GSSNameElement.class +INFO: Loading Class: sun/security/jgss/wrapper/Krb5Util.class +INFO: Loading Class: sun/security/jgss/wrapper/NativeGSSContext.class +INFO: Loading Class: sun/security/jgss/wrapper/NativeGSSFactory.class +INFO: Loading Class: sun/security/jgss/wrapper/SunNativeProvider$1.class +INFO: Loading Class: sun/security/jgss/wrapper/SunNativeProvider.class +INFO: Loading Class: sun/security/krb5/Asn1Exception.class +INFO: Loading Class: sun/security/krb5/Checksum.class +INFO: Loading Class: sun/security/krb5/Config$1.class +INFO: Loading Class: sun/security/krb5/Config$2.class +INFO: Loading Class: sun/security/krb5/Config$3.class +INFO: Loading Class: sun/security/krb5/Config$FileExistsAction.class +INFO: Loading Class: sun/security/krb5/Config.class +INFO: Loading Class: sun/security/krb5/Confounder.class +INFO: Loading Class: sun/security/krb5/Credentials$1.class +INFO: Loading Class: sun/security/krb5/Credentials.class +INFO: Loading Class: sun/security/krb5/EncryptedData.class +INFO: Loading Class: sun/security/krb5/EncryptionKey.class +INFO: Loading Class: sun/security/krb5/JavaxSecurityAuthKerberosAccess.class +INFO: Loading Class: sun/security/krb5/KdcComm$1.class +INFO: Loading Class: sun/security/krb5/KdcComm$BpType.class +INFO: Loading Class: sun/security/krb5/KdcComm$KdcAccessibility.class +INFO: Loading Class: sun/security/krb5/KdcComm$KdcCommunication.class +INFO: Loading Class: sun/security/krb5/KdcComm.class +INFO: Loading Class: sun/security/krb5/KerberosSecrets.class +INFO: Loading Class: sun/security/krb5/KrbApRep.class +INFO: Loading Class: sun/security/krb5/KrbApReq.class +INFO: Loading Class: sun/security/krb5/KrbAppMessage.class +INFO: Loading Class: sun/security/krb5/KrbAsRep.class +INFO: Loading Class: sun/security/krb5/KrbAsReq.class +INFO: Loading Class: sun/security/krb5/KrbAsReqBuilder$State.class +INFO: Loading Class: sun/security/krb5/KrbAsReqBuilder.class +INFO: Loading Class: sun/security/krb5/KrbCred.class +INFO: Loading Class: sun/security/krb5/KrbCryptoException.class +INFO: Loading Class: sun/security/krb5/KrbException.class +INFO: Loading Class: sun/security/krb5/KrbKdcRep.class +INFO: Loading Class: sun/security/krb5/KrbPriv.class +INFO: Loading Class: sun/security/krb5/KrbSafe.class +INFO: Loading Class: sun/security/krb5/KrbServiceLocator$SrvRecord.class +INFO: Loading Class: sun/security/krb5/KrbServiceLocator.class +INFO: Loading Class: sun/security/krb5/KrbTgsRep.class +INFO: Loading Class: sun/security/krb5/KrbTgsReq.class +INFO: Loading Class: sun/security/krb5/PrincipalName.class +INFO: Loading Class: sun/security/krb5/Realm.class +INFO: Loading Class: sun/security/krb5/RealmException.class +INFO: Loading Class: sun/security/krb5/SCDynamicStoreConfig$1.class +INFO: Loading Class: sun/security/krb5/SCDynamicStoreConfig.class +INFO: Loading Class: sun/security/krb5/internal/APOptions.class +INFO: Loading Class: sun/security/krb5/internal/APRep.class +INFO: Loading Class: sun/security/krb5/internal/APReq.class +INFO: Loading Class: sun/security/krb5/internal/ASRep.class +INFO: Loading Class: sun/security/krb5/internal/ASReq.class +INFO: Loading Class: sun/security/krb5/internal/AuthContext.class +INFO: Loading Class: sun/security/krb5/internal/Authenticator.class +INFO: Loading Class: sun/security/krb5/internal/AuthorizationData.class +INFO: Loading Class: sun/security/krb5/internal/AuthorizationDataEntry.class +INFO: Loading Class: sun/security/krb5/internal/CredentialsUtil.class +INFO: Loading Class: sun/security/krb5/internal/ETypeInfo.class +INFO: Loading Class: sun/security/krb5/internal/ETypeInfo2.class +INFO: Loading Class: sun/security/krb5/internal/EncAPRepPart.class +INFO: Loading Class: sun/security/krb5/internal/EncASRepPart.class +INFO: Loading Class: sun/security/krb5/internal/EncKDCRepPart.class +INFO: Loading Class: sun/security/krb5/internal/EncKrbCredPart.class +INFO: Loading Class: sun/security/krb5/internal/EncKrbPrivPart.class +INFO: Loading Class: sun/security/krb5/internal/EncTGSRepPart.class +INFO: Loading Class: sun/security/krb5/internal/EncTicketPart.class +INFO: Loading Class: sun/security/krb5/internal/HostAddress.class +INFO: Loading Class: sun/security/krb5/internal/HostAddresses.class +INFO: Loading Class: sun/security/krb5/internal/KDCOptions.class +INFO: Loading Class: sun/security/krb5/internal/KDCRep.class +INFO: Loading Class: sun/security/krb5/internal/KDCReq.class +INFO: Loading Class: sun/security/krb5/internal/KDCReqBody.class +INFO: Loading Class: sun/security/krb5/internal/KRBCred.class +INFO: Loading Class: sun/security/krb5/internal/KRBError.class +INFO: Loading Class: sun/security/krb5/internal/KRBPriv.class +INFO: Loading Class: sun/security/krb5/internal/KRBSafe.class +INFO: Loading Class: sun/security/krb5/internal/KRBSafeBody.class +INFO: Loading Class: sun/security/krb5/internal/KdcErrException.class +INFO: Loading Class: sun/security/krb5/internal/KerberosTime.class +INFO: Loading Class: sun/security/krb5/internal/Krb5.class +INFO: Loading Class: sun/security/krb5/internal/KrbApErrException.class +INFO: Loading Class: sun/security/krb5/internal/KrbCredInfo.class +INFO: Loading Class: sun/security/krb5/internal/KrbErrException.class +INFO: Loading Class: sun/security/krb5/internal/LastReq.class +INFO: Loading Class: sun/security/krb5/internal/LastReqEntry.class +INFO: Loading Class: sun/security/krb5/internal/LocalSeqNumber.class +INFO: Loading Class: sun/security/krb5/internal/LoginOptions.class +INFO: Loading Class: sun/security/krb5/internal/MethodData.class +INFO: Loading Class: sun/security/krb5/internal/NetClient.class +INFO: Loading Class: sun/security/krb5/internal/PAData$SaltAndParams.class +INFO: Loading Class: sun/security/krb5/internal/PAData.class +INFO: Loading Class: sun/security/krb5/internal/PAEncTSEnc.class +INFO: Loading Class: sun/security/krb5/internal/PAForUserEnc.class +INFO: Loading Class: sun/security/krb5/internal/ReplayCache$1.class +INFO: Loading Class: sun/security/krb5/internal/ReplayCache.class +INFO: Loading Class: sun/security/krb5/internal/SeqNumber.class +INFO: Loading Class: sun/security/krb5/internal/TCPClient.class +INFO: Loading Class: sun/security/krb5/internal/TGSRep.class +INFO: Loading Class: sun/security/krb5/internal/TGSReq.class +INFO: Loading Class: sun/security/krb5/internal/Ticket.class +INFO: Loading Class: sun/security/krb5/internal/TicketFlags.class +INFO: Loading Class: sun/security/krb5/internal/TransitedEncoding.class +INFO: Loading Class: sun/security/krb5/internal/UDPClient.class +INFO: Loading Class: sun/security/krb5/internal/ccache/CCacheInputStream.class +INFO: Loading Class: sun/security/krb5/internal/ccache/CCacheOutputStream.class +INFO: Loading Class: sun/security/krb5/internal/ccache/Credentials.class +INFO: Loading Class: sun/security/krb5/internal/ccache/CredentialsCache.class +INFO: Loading Class: sun/security/krb5/internal/ccache/FileCCacheConstants.class +INFO: Loading Class: sun/security/krb5/internal/ccache/FileCredentialsCache$1.class +INFO: Loading Class: sun/security/krb5/internal/ccache/FileCredentialsCache$2.class +INFO: Loading Class: sun/security/krb5/internal/ccache/FileCredentialsCache.class +INFO: Loading Class: sun/security/krb5/internal/ccache/MemoryCredentialsCache.class +INFO: Loading Class: sun/security/krb5/internal/ccache/Tag.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Aes128.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Aes128CtsHmacSha1EType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Aes256.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Aes256CtsHmacSha1EType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/ArcFourHmac.class +INFO: Loading Class: sun/security/krb5/internal/crypto/ArcFourHmacEType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/CksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Crc32CksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Des.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Des3.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Des3CbcHmacSha1KdEType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/DesCbcCrcEType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/DesCbcEType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/DesCbcMd5EType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/DesMacCksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/DesMacKCksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/EType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/HmacMd5ArcFourCksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/HmacSha1Aes128CksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/HmacSha1Aes256CksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/HmacSha1Des3KdCksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/KeyUsage.class +INFO: Loading Class: sun/security/krb5/internal/crypto/Nonce.class +INFO: Loading Class: sun/security/krb5/internal/crypto/NullEType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/RsaMd5CksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/RsaMd5DesCksumType.class +INFO: Loading Class: sun/security/krb5/internal/crypto/crc32.class +INFO: Loading Class: sun/security/krb5/internal/crypto/dk/AesDkCrypto.class +INFO: Loading Class: sun/security/krb5/internal/crypto/dk/ArcFourCrypto.class +INFO: Loading Class: sun/security/krb5/internal/crypto/dk/Des3DkCrypto.class +INFO: Loading Class: sun/security/krb5/internal/crypto/dk/DkCrypto.class +INFO: Loading Class: sun/security/krb5/internal/ktab/KeyTab$1.class +INFO: Loading Class: sun/security/krb5/internal/ktab/KeyTab.class +INFO: Loading Class: sun/security/krb5/internal/ktab/KeyTabConstants.class +INFO: Loading Class: sun/security/krb5/internal/ktab/KeyTabEntry.class +INFO: Loading Class: sun/security/krb5/internal/ktab/KeyTabInputStream.class +INFO: Loading Class: sun/security/krb5/internal/ktab/KeyTabOutputStream.class +INFO: Loading Class: sun/security/krb5/internal/rcache/AuthList.class +INFO: Loading Class: sun/security/krb5/internal/rcache/AuthTime.class +INFO: Loading Class: sun/security/krb5/internal/rcache/AuthTimeWithHash.class +INFO: Loading Class: sun/security/krb5/internal/rcache/DflCache$1.class +INFO: Loading Class: sun/security/krb5/internal/rcache/DflCache$Storage.class +INFO: Loading Class: sun/security/krb5/internal/rcache/DflCache.class +INFO: Loading Class: sun/security/krb5/internal/rcache/MemoryCache.class +INFO: Loading Class: sun/security/krb5/internal/util/KerberosFlags.class +INFO: Loading Class: sun/security/krb5/internal/util/KerberosString.class +INFO: Loading Class: sun/security/krb5/internal/util/KrbDataInputStream.class +INFO: Loading Class: sun/security/krb5/internal/util/KrbDataOutputStream.class +INFO: Loading Class: sun/security/pkcs/ContentInfo.class +INFO: Loading Class: sun/security/pkcs/ESSCertId.class +INFO: Loading Class: sun/security/pkcs/EncryptedPrivateKeyInfo.class +INFO: Loading Class: sun/security/pkcs/PKCS7$SecureRandomHolder.class +INFO: Loading Class: sun/security/pkcs/PKCS7.class +INFO: Loading Class: sun/security/pkcs/PKCS8Key.class +INFO: Loading Class: sun/security/pkcs/PKCS9Attribute.class +INFO: Loading Class: sun/security/pkcs/PKCS9Attributes.class +INFO: Loading Class: sun/security/pkcs/ParsingException.class +INFO: Loading Class: sun/security/pkcs/SignerInfo.class +INFO: Loading Class: sun/security/pkcs/SigningCertificateInfo.class +INFO: Loading Class: sun/security/pkcs10/PKCS10.class +INFO: Loading Class: sun/security/pkcs10/PKCS10Attribute.class +INFO: Loading Class: sun/security/pkcs10/PKCS10Attributes.class +INFO: Loading Class: sun/security/pkcs12/MacData.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore$1.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore$CertEntry.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore$Entry.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore$KeyEntry.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore$PrivateKeyEntry.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore$SecretKeyEntry.class +INFO: Loading Class: sun/security/pkcs12/PKCS12KeyStore.class +INFO: Loading Class: sun/security/provider/AuthPolicyFile$1.class +INFO: Loading Class: sun/security/provider/AuthPolicyFile$2.class +INFO: Loading Class: sun/security/provider/AuthPolicyFile$3.class +INFO: Loading Class: sun/security/provider/AuthPolicyFile$PolicyEntry.class +INFO: Loading Class: sun/security/provider/AuthPolicyFile.class +INFO: Loading Class: sun/security/provider/ByteArrayAccess.class +INFO: Loading Class: sun/security/provider/ConfigFile$Spi$1.class +INFO: Loading Class: sun/security/provider/ConfigFile$Spi$2.class +INFO: Loading Class: sun/security/provider/ConfigFile$Spi.class +INFO: Loading Class: sun/security/provider/ConfigFile.class +INFO: Loading Class: sun/security/provider/DSA$RawDSA$NullDigest20.class +INFO: Loading Class: sun/security/provider/DSA$RawDSA.class +INFO: Loading Class: sun/security/provider/DSA$SHA1withDSA.class +INFO: Loading Class: sun/security/provider/DSA$SHA224withDSA.class +INFO: Loading Class: sun/security/provider/DSA$SHA256withDSA.class +INFO: Loading Class: sun/security/provider/DSA.class +INFO: Loading Class: sun/security/provider/DSAKeyFactory.class +INFO: Loading Class: sun/security/provider/DSAKeyPairGenerator.class +INFO: Loading Class: sun/security/provider/DSAParameterGenerator.class +INFO: Loading Class: sun/security/provider/DSAParameters.class +INFO: Loading Class: sun/security/provider/DSAPrivateKey.class +INFO: Loading Class: sun/security/provider/DSAPublicKey.class +INFO: Loading Class: sun/security/provider/DSAPublicKeyImpl.class +INFO: Loading Class: sun/security/provider/DigestBase.class +INFO: Loading Class: sun/security/provider/DomainKeyStore$1.class +INFO: Loading Class: sun/security/provider/DomainKeyStore$DKS.class +INFO: Loading Class: sun/security/provider/DomainKeyStore$KeyStoreBuilderComponents.class +INFO: Loading Class: sun/security/provider/DomainKeyStore.class +INFO: Loading Class: sun/security/provider/JavaKeyStore$1.class +INFO: Loading Class: sun/security/provider/JavaKeyStore$CaseExactJKS.class +INFO: Loading Class: sun/security/provider/JavaKeyStore$DualFormatJKS.class +INFO: Loading Class: sun/security/provider/JavaKeyStore$JKS.class +INFO: Loading Class: sun/security/provider/JavaKeyStore$KeyEntry.class +INFO: Loading Class: sun/security/provider/JavaKeyStore$TrustedCertEntry.class +INFO: Loading Class: sun/security/provider/JavaKeyStore.class +INFO: Loading Class: sun/security/provider/KeyProtector.class +INFO: Loading Class: sun/security/provider/KeyStoreDelegator$1.class +INFO: Loading Class: sun/security/provider/KeyStoreDelegator.class +INFO: Loading Class: sun/security/provider/MD2.class +INFO: Loading Class: sun/security/provider/MD4$1.class +INFO: Loading Class: sun/security/provider/MD4$2.class +INFO: Loading Class: sun/security/provider/MD4.class +INFO: Loading Class: sun/security/provider/MD5.class +INFO: Loading Class: sun/security/provider/NativePRNG$1.class +INFO: Loading Class: sun/security/provider/NativePRNG$2.class +INFO: Loading Class: sun/security/provider/NativePRNG$Blocking.class +INFO: Loading Class: sun/security/provider/NativePRNG$NonBlocking.class +INFO: Loading Class: sun/security/provider/NativePRNG$RandomIO$1.class +INFO: Loading Class: sun/security/provider/NativePRNG$RandomIO.class +INFO: Loading Class: sun/security/provider/NativePRNG$Variant.class +INFO: Loading Class: sun/security/provider/NativePRNG.class +INFO: Loading Class: sun/security/provider/NativeSeedGenerator.class +INFO: Loading Class: sun/security/provider/ParameterCache.class +INFO: Loading Class: sun/security/provider/PolicyFile$1.class +INFO: Loading Class: sun/security/provider/PolicyFile$2.class +INFO: Loading Class: sun/security/provider/PolicyFile$3.class +INFO: Loading Class: sun/security/provider/PolicyFile$4.class +INFO: Loading Class: sun/security/provider/PolicyFile$5.class +INFO: Loading Class: sun/security/provider/PolicyFile$6.class +INFO: Loading Class: sun/security/provider/PolicyFile$7.class +INFO: Loading Class: sun/security/provider/PolicyFile$PolicyEntry.class +INFO: Loading Class: sun/security/provider/PolicyFile$PolicyInfo.class +INFO: Loading Class: sun/security/provider/PolicyFile$SelfPermission.class +INFO: Loading Class: sun/security/provider/PolicyFile.class +INFO: Loading Class: sun/security/provider/PolicyParser$DomainEntry.class +INFO: Loading Class: sun/security/provider/PolicyParser$GrantEntry.class +INFO: Loading Class: sun/security/provider/PolicyParser$KeyStoreEntry.class +INFO: Loading Class: sun/security/provider/PolicyParser$ParsingException.class +INFO: Loading Class: sun/security/provider/PolicyParser$PermissionEntry.class +INFO: Loading Class: sun/security/provider/PolicyParser$PrincipalEntry.class +INFO: Loading Class: sun/security/provider/PolicyParser.class +INFO: Loading Class: sun/security/provider/PolicyPermissions.class +INFO: Loading Class: sun/security/provider/PolicySpiFile.class +INFO: Loading Class: sun/security/provider/SHA.class +INFO: Loading Class: sun/security/provider/SHA2$SHA224.class +INFO: Loading Class: sun/security/provider/SHA2$SHA256.class +INFO: Loading Class: sun/security/provider/SHA2.class +INFO: Loading Class: sun/security/provider/SHA5$SHA384.class +INFO: Loading Class: sun/security/provider/SHA5$SHA512.class +INFO: Loading Class: sun/security/provider/SHA5.class +INFO: Loading Class: sun/security/provider/SecureRandom$1.class +INFO: Loading Class: sun/security/provider/SecureRandom$SeederHolder.class +INFO: Loading Class: sun/security/provider/SecureRandom.class +INFO: Loading Class: sun/security/provider/SeedGenerator$1.class +INFO: Loading Class: sun/security/provider/SeedGenerator$ThreadedSeedGenerator$1.class +INFO: Loading Class: sun/security/provider/SeedGenerator$ThreadedSeedGenerator$BogusThread.class +INFO: Loading Class: sun/security/provider/SeedGenerator$ThreadedSeedGenerator.class +INFO: Loading Class: sun/security/provider/SeedGenerator$URLSeedGenerator$1.class +INFO: Loading Class: sun/security/provider/SeedGenerator$URLSeedGenerator.class +INFO: Loading Class: sun/security/provider/SeedGenerator.class +INFO: Loading Class: sun/security/provider/SubjectCodeSource$1.class +INFO: Loading Class: sun/security/provider/SubjectCodeSource$2.class +INFO: Loading Class: sun/security/provider/SubjectCodeSource$3.class +INFO: Loading Class: sun/security/provider/SubjectCodeSource.class +INFO: Loading Class: sun/security/provider/SunEntries$1.class +INFO: Loading Class: sun/security/provider/SunEntries.class +INFO: Loading Class: sun/security/provider/VerificationProvider.class +INFO: Loading Class: sun/security/provider/X509Factory.class +INFO: Loading Class: sun/security/provider/certpath/AdaptableX509CertSelector.class +INFO: Loading Class: sun/security/provider/certpath/AdjacencyList.class +INFO: Loading Class: sun/security/provider/certpath/AlgorithmChecker.class +INFO: Loading Class: sun/security/provider/certpath/BasicChecker.class +INFO: Loading Class: sun/security/provider/certpath/BuildStep.class +INFO: Loading Class: sun/security/provider/certpath/Builder.class +INFO: Loading Class: sun/security/provider/certpath/CertId.class +INFO: Loading Class: sun/security/provider/certpath/CertPathHelper.class +INFO: Loading Class: sun/security/provider/certpath/CertStoreHelper$1.class +INFO: Loading Class: sun/security/provider/certpath/CertStoreHelper.class +INFO: Loading Class: sun/security/provider/certpath/CollectionCertStore.class +INFO: Loading Class: sun/security/provider/certpath/ConstraintsChecker.class +INFO: Loading Class: sun/security/provider/certpath/DistributionPointFetcher.class +INFO: Loading Class: sun/security/provider/certpath/ForwardBuilder$PKIXCertComparator.class +INFO: Loading Class: sun/security/provider/certpath/ForwardBuilder.class +INFO: Loading Class: sun/security/provider/certpath/ForwardState.class +INFO: Loading Class: sun/security/provider/certpath/IndexedCollectionCertStore.class +INFO: Loading Class: sun/security/provider/certpath/KeyChecker.class +INFO: Loading Class: sun/security/provider/certpath/OCSP$RevocationStatus$CertStatus.class +INFO: Loading Class: sun/security/provider/certpath/OCSP$RevocationStatus.class +INFO: Loading Class: sun/security/provider/certpath/OCSP.class +INFO: Loading Class: sun/security/provider/certpath/OCSPRequest.class +INFO: Loading Class: sun/security/provider/certpath/OCSPResponse$1.class +INFO: Loading Class: sun/security/provider/certpath/OCSPResponse$ResponseStatus.class +INFO: Loading Class: sun/security/provider/certpath/OCSPResponse$SingleResponse.class +INFO: Loading Class: sun/security/provider/certpath/OCSPResponse.class +INFO: Loading Class: sun/security/provider/certpath/PKIX$1.class +INFO: Loading Class: sun/security/provider/certpath/PKIX$BuilderParams.class +INFO: Loading Class: sun/security/provider/certpath/PKIX$CertStoreComparator.class +INFO: Loading Class: sun/security/provider/certpath/PKIX$CertStoreTypeException.class +INFO: Loading Class: sun/security/provider/certpath/PKIX$ValidatorParams.class +INFO: Loading Class: sun/security/provider/certpath/PKIX.class +INFO: Loading Class: sun/security/provider/certpath/PKIXCertPathValidator.class +INFO: Loading Class: sun/security/provider/certpath/PKIXMasterCertPathValidator.class +INFO: Loading Class: sun/security/provider/certpath/PolicyChecker.class +INFO: Loading Class: sun/security/provider/certpath/PolicyNodeImpl.class +INFO: Loading Class: sun/security/provider/certpath/RevocationChecker$1.class +INFO: Loading Class: sun/security/provider/certpath/RevocationChecker$2.class +INFO: Loading Class: sun/security/provider/certpath/RevocationChecker$Mode.class +INFO: Loading Class: sun/security/provider/certpath/RevocationChecker$RejectKeySelector.class +INFO: Loading Class: sun/security/provider/certpath/RevocationChecker$RevocationProperties.class +INFO: Loading Class: sun/security/provider/certpath/RevocationChecker.class +INFO: Loading Class: sun/security/provider/certpath/State.class +INFO: Loading Class: sun/security/provider/certpath/SunCertPathBuilder.class +INFO: Loading Class: sun/security/provider/certpath/SunCertPathBuilderException.class +INFO: Loading Class: sun/security/provider/certpath/SunCertPathBuilderResult.class +INFO: Loading Class: sun/security/provider/certpath/URICertStore$UCS.class +INFO: Loading Class: sun/security/provider/certpath/URICertStore$URICertStoreParameters.class +INFO: Loading Class: sun/security/provider/certpath/URICertStore.class +INFO: Loading Class: sun/security/provider/certpath/UntrustedChecker.class +INFO: Loading Class: sun/security/provider/certpath/Vertex.class +INFO: Loading Class: sun/security/provider/certpath/X509CertPath.class +INFO: Loading Class: sun/security/provider/certpath/X509CertificatePair.class +INFO: Loading Class: sun/security/provider/certpath/ldap/LDAPCertStore$LDAPCRLSelector.class +INFO: Loading Class: sun/security/provider/certpath/ldap/LDAPCertStore$LDAPCertSelector.class +INFO: Loading Class: sun/security/provider/certpath/ldap/LDAPCertStore$LDAPRequest.class +INFO: Loading Class: sun/security/provider/certpath/ldap/LDAPCertStore$SunLDAPCertStoreParameters.class +INFO: Loading Class: sun/security/provider/certpath/ldap/LDAPCertStore.class +INFO: Loading Class: sun/security/provider/certpath/ldap/LDAPCertStoreHelper.class +INFO: Loading Class: sun/security/provider/certpath/ssl/SSLServerCertStore$1.class +INFO: Loading Class: sun/security/provider/certpath/ssl/SSLServerCertStore$CS.class +INFO: Loading Class: sun/security/provider/certpath/ssl/SSLServerCertStore$GetChainTrustManager.class +INFO: Loading Class: sun/security/provider/certpath/ssl/SSLServerCertStore.class +INFO: Loading Class: sun/security/provider/certpath/ssl/SSLServerCertStoreHelper.class +INFO: Loading Class: sun/security/rsa/RSACore$BlindingParameters.class +INFO: Loading Class: sun/security/rsa/RSACore$BlindingRandomPair.class +INFO: Loading Class: sun/security/rsa/RSACore.class +INFO: Loading Class: sun/security/rsa/RSAKeyFactory.class +INFO: Loading Class: sun/security/rsa/RSAKeyPairGenerator.class +INFO: Loading Class: sun/security/rsa/RSAPadding.class +INFO: Loading Class: sun/security/rsa/RSAPrivateCrtKeyImpl.class +INFO: Loading Class: sun/security/rsa/RSAPrivateKeyImpl.class +INFO: Loading Class: sun/security/rsa/RSAPublicKeyImpl.class +INFO: Loading Class: sun/security/rsa/RSASignature$MD2withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature$MD5withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature$SHA1withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature$SHA224withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature$SHA256withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature$SHA384withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature$SHA512withRSA.class +INFO: Loading Class: sun/security/rsa/RSASignature.class +INFO: Loading Class: sun/security/rsa/SunRsaSignEntries.class +INFO: Loading Class: sun/security/smartcardio/CardImpl$State.class +INFO: Loading Class: sun/security/smartcardio/CardImpl.class +INFO: Loading Class: sun/security/smartcardio/ChannelImpl.class +INFO: Loading Class: sun/security/smartcardio/PCSC.class +INFO: Loading Class: sun/security/smartcardio/PCSCException.class +INFO: Loading Class: sun/security/smartcardio/PCSCTerminals$1.class +INFO: Loading Class: sun/security/smartcardio/PCSCTerminals$ReaderState.class +INFO: Loading Class: sun/security/smartcardio/PCSCTerminals.class +INFO: Loading Class: sun/security/smartcardio/PlatformPCSC$1.class +INFO: Loading Class: sun/security/smartcardio/PlatformPCSC.class +INFO: Loading Class: sun/security/smartcardio/SunPCSC$1.class +INFO: Loading Class: sun/security/smartcardio/SunPCSC$Factory.class +INFO: Loading Class: sun/security/smartcardio/SunPCSC.class +INFO: Loading Class: sun/security/smartcardio/TerminalImpl.class +INFO: Loading Class: sun/security/timestamp/HttpTimestamper.class +INFO: Loading Class: sun/security/timestamp/TSRequest.class +INFO: Loading Class: sun/security/timestamp/TSResponse$TimestampException.class +INFO: Loading Class: sun/security/timestamp/TSResponse.class +INFO: Loading Class: sun/security/timestamp/TimestampToken.class +INFO: Loading Class: sun/security/timestamp/Timestamper.class +INFO: Loading Class: sun/security/tools/KeyStoreUtil.class +INFO: Loading Class: sun/security/tools/PathList.class +INFO: Loading Class: sun/security/tools/keytool/CertAndKeyGen.class +INFO: Loading Class: sun/security/tools/keytool/Main$1$1.class +INFO: Loading Class: sun/security/tools/keytool/Main$1.class +INFO: Loading Class: sun/security/tools/keytool/Main$Command.class +INFO: Loading Class: sun/security/tools/keytool/Main$Option.class +INFO: Loading Class: sun/security/tools/keytool/Main.class +INFO: Loading Class: sun/security/tools/keytool/Pair.class +INFO: Loading Class: sun/security/tools/keytool/Resources.class +INFO: Loading Class: sun/security/tools/keytool/Resources_de.class +INFO: Loading Class: sun/security/tools/keytool/Resources_es.class +INFO: Loading Class: sun/security/tools/keytool/Resources_fr.class +INFO: Loading Class: sun/security/tools/keytool/Resources_it.class +INFO: Loading Class: sun/security/tools/keytool/Resources_ja.class +INFO: Loading Class: sun/security/tools/keytool/Resources_ko.class +INFO: Loading Class: sun/security/tools/keytool/Resources_pt_BR.class +INFO: Loading Class: sun/security/tools/keytool/Resources_sv.class +INFO: Loading Class: sun/security/tools/keytool/Resources_zh_CN.class +INFO: Loading Class: sun/security/tools/keytool/Resources_zh_HK.class +INFO: Loading Class: sun/security/tools/keytool/Resources_zh_TW.class +INFO: Loading Class: sun/security/tools/policytool/AWTPerm.class +INFO: Loading Class: sun/security/tools/policytool/AddEntryDoneButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/AddPermButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/AddPrinButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/AllPerm.class +INFO: Loading Class: sun/security/tools/policytool/AudioPerm.class +INFO: Loading Class: sun/security/tools/policytool/AuthPerm.class +INFO: Loading Class: sun/security/tools/policytool/CancelButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/ChangeKeyStoreOKButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/ChildWindowListener.class +INFO: Loading Class: sun/security/tools/policytool/ConfirmRemovePolicyEntryOKButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/DelegationPerm.class +INFO: Loading Class: sun/security/tools/policytool/EditPermButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/EditPrinButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/ErrorOKButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/FileMenuListener.class +INFO: Loading Class: sun/security/tools/policytool/FilePerm.class +INFO: Loading Class: sun/security/tools/policytool/InqSecContextPerm.class +INFO: Loading Class: sun/security/tools/policytool/KrbPrin.class +INFO: Loading Class: sun/security/tools/policytool/LogPerm.class +INFO: Loading Class: sun/security/tools/policytool/MBeanPerm.class +INFO: Loading Class: sun/security/tools/policytool/MBeanSvrPerm.class +INFO: Loading Class: sun/security/tools/policytool/MBeanTrustPerm.class +INFO: Loading Class: sun/security/tools/policytool/MainWindowListener.class +INFO: Loading Class: sun/security/tools/policytool/MgmtPerm.class +INFO: Loading Class: sun/security/tools/policytool/NetPerm.class +INFO: Loading Class: sun/security/tools/policytool/NewPolicyPermOKButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/NewPolicyPrinOKButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/NoDisplayException.class +INFO: Loading Class: sun/security/tools/policytool/Perm.class +INFO: Loading Class: sun/security/tools/policytool/PermissionActionsMenuListener.class +INFO: Loading Class: sun/security/tools/policytool/PermissionMenuListener.class +INFO: Loading Class: sun/security/tools/policytool/PermissionNameMenuListener.class +INFO: Loading Class: sun/security/tools/policytool/PolicyEntry.class +INFO: Loading Class: sun/security/tools/policytool/PolicyListListener.class +INFO: Loading Class: sun/security/tools/policytool/PolicyTool$1.class +INFO: Loading Class: sun/security/tools/policytool/PolicyTool.class +INFO: Loading Class: sun/security/tools/policytool/Prin.class +INFO: Loading Class: sun/security/tools/policytool/PrincipalTypeMenuListener.class +INFO: Loading Class: sun/security/tools/policytool/PrivCredPerm.class +INFO: Loading Class: sun/security/tools/policytool/PropPerm.class +INFO: Loading Class: sun/security/tools/policytool/ReflectPerm.class +INFO: Loading Class: sun/security/tools/policytool/RemovePermButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/RemovePrinButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/Resources.class +INFO: Loading Class: sun/security/tools/policytool/Resources_de.class +INFO: Loading Class: sun/security/tools/policytool/Resources_es.class +INFO: Loading Class: sun/security/tools/policytool/Resources_fr.class +INFO: Loading Class: sun/security/tools/policytool/Resources_it.class +INFO: Loading Class: sun/security/tools/policytool/Resources_ja.class +INFO: Loading Class: sun/security/tools/policytool/Resources_ko.class +INFO: Loading Class: sun/security/tools/policytool/Resources_pt_BR.class +INFO: Loading Class: sun/security/tools/policytool/Resources_sv.class +INFO: Loading Class: sun/security/tools/policytool/Resources_zh_CN.class +INFO: Loading Class: sun/security/tools/policytool/Resources_zh_HK.class +INFO: Loading Class: sun/security/tools/policytool/Resources_zh_TW.class +INFO: Loading Class: sun/security/tools/policytool/RuntimePerm.class +INFO: Loading Class: sun/security/tools/policytool/SQLPerm.class +INFO: Loading Class: sun/security/tools/policytool/SSLPerm.class +INFO: Loading Class: sun/security/tools/policytool/SecurityPerm.class +INFO: Loading Class: sun/security/tools/policytool/SerialPerm.class +INFO: Loading Class: sun/security/tools/policytool/ServicePerm.class +INFO: Loading Class: sun/security/tools/policytool/SocketPerm.class +INFO: Loading Class: sun/security/tools/policytool/StatusOKButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/SubjDelegPerm.class +INFO: Loading Class: sun/security/tools/policytool/TaggedList.class +INFO: Loading Class: sun/security/tools/policytool/ToolDialog$1.class +INFO: Loading Class: sun/security/tools/policytool/ToolDialog$2.class +INFO: Loading Class: sun/security/tools/policytool/ToolDialog.class +INFO: Loading Class: sun/security/tools/policytool/ToolWindow$1.class +INFO: Loading Class: sun/security/tools/policytool/ToolWindow$2.class +INFO: Loading Class: sun/security/tools/policytool/ToolWindow.class +INFO: Loading Class: sun/security/tools/policytool/ToolWindowListener.class +INFO: Loading Class: sun/security/tools/policytool/URLPerm.class +INFO: Loading Class: sun/security/tools/policytool/UserSaveCancelButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/UserSaveNoButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/UserSaveYesButtonListener.class +INFO: Loading Class: sun/security/tools/policytool/X500Prin.class +INFO: Loading Class: sun/security/util/AbstractAlgorithmConstraints$1.class +INFO: Loading Class: sun/security/util/AbstractAlgorithmConstraints.class +INFO: Loading Class: sun/security/util/AlgorithmDecomposer.class +INFO: Loading Class: sun/security/util/AuthResources.class +INFO: Loading Class: sun/security/util/AuthResources_de.class +INFO: Loading Class: sun/security/util/AuthResources_es.class +INFO: Loading Class: sun/security/util/AuthResources_fr.class +INFO: Loading Class: sun/security/util/AuthResources_it.class +INFO: Loading Class: sun/security/util/AuthResources_ja.class +INFO: Loading Class: sun/security/util/AuthResources_ko.class +INFO: Loading Class: sun/security/util/AuthResources_pt_BR.class +INFO: Loading Class: sun/security/util/AuthResources_sv.class +INFO: Loading Class: sun/security/util/AuthResources_zh_CN.class +INFO: Loading Class: sun/security/util/AuthResources_zh_HK.class +INFO: Loading Class: sun/security/util/AuthResources_zh_TW.class +INFO: Loading Class: sun/security/util/BitArray.class +INFO: Loading Class: sun/security/util/ByteArrayLexOrder.class +INFO: Loading Class: sun/security/util/ByteArrayTagOrder.class +INFO: Loading Class: sun/security/util/Cache$CacheVisitor.class +INFO: Loading Class: sun/security/util/Cache$EqualByteArray.class +INFO: Loading Class: sun/security/util/Cache.class +INFO: Loading Class: sun/security/util/DerEncoder.class +INFO: Loading Class: sun/security/util/DerIndefLenConverter.class +INFO: Loading Class: sun/security/util/DerInputBuffer.class +INFO: Loading Class: sun/security/util/DerInputStream.class +INFO: Loading Class: sun/security/util/DerOutputStream.class +INFO: Loading Class: sun/security/util/DerValue.class +INFO: Loading Class: sun/security/util/DisabledAlgorithmConstraints$1.class +INFO: Loading Class: sun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint$Operator.class +INFO: Loading Class: sun/security/util/DisabledAlgorithmConstraints$KeySizeConstraint.class +INFO: Loading Class: sun/security/util/DisabledAlgorithmConstraints$KeySizeConstraints.class +INFO: Loading Class: sun/security/util/DisabledAlgorithmConstraints.class +INFO: Loading Class: sun/security/util/ECKeySizeParameterSpec.class +INFO: Loading Class: sun/security/util/ECUtil.class +INFO: Loading Class: sun/security/util/HostnameChecker.class +INFO: Loading Class: sun/security/util/KeyUtil.class +INFO: Loading Class: sun/security/util/LegacyAlgorithmConstraints.class +INFO: Loading Class: sun/security/util/Length.class +INFO: Loading Class: sun/security/util/ManifestDigester$Entry.class +INFO: Loading Class: sun/security/util/ManifestDigester$Position.class +INFO: Loading Class: sun/security/util/ManifestDigester.class +INFO: Loading Class: sun/security/util/ManifestEntryVerifier$SunProviderHolder.class +INFO: Loading Class: sun/security/util/MemoryCache$CacheEntry.class +INFO: Loading Class: sun/security/util/MemoryCache$HardCacheEntry.class +INFO: Loading Class: sun/security/util/MemoryCache$SoftCacheEntry.class +INFO: Loading Class: sun/security/util/MemoryCache.class +INFO: Loading Class: sun/security/util/NullCache.class +INFO: Loading Class: sun/security/util/ObjectIdentifier$HugeOidNotSupportedByOldJDK.class +INFO: Loading Class: sun/security/util/ObjectIdentifier.class +INFO: Loading Class: sun/security/util/Password.class +INFO: Loading Class: sun/security/util/Pem.class +INFO: Loading Class: sun/security/util/PendingException.class +INFO: Loading Class: sun/security/util/PermissionFactory.class +INFO: Loading Class: sun/security/util/PolicyUtil.class +INFO: Loading Class: sun/security/util/PropertyExpander$ExpandException.class +INFO: Loading Class: sun/security/util/PropertyExpander.class +INFO: Loading Class: sun/security/util/Resources.class +INFO: Loading Class: sun/security/util/ResourcesMgr$1.class +INFO: Loading Class: sun/security/util/ResourcesMgr$2.class +INFO: Loading Class: sun/security/util/ResourcesMgr.class +INFO: Loading Class: sun/security/util/Resources_de.class +INFO: Loading Class: sun/security/util/Resources_es.class +INFO: Loading Class: sun/security/util/Resources_fr.class +INFO: Loading Class: sun/security/util/Resources_it.class +INFO: Loading Class: sun/security/util/Resources_ja.class +INFO: Loading Class: sun/security/util/Resources_ko.class +INFO: Loading Class: sun/security/util/Resources_pt_BR.class +INFO: Loading Class: sun/security/util/Resources_sv.class +INFO: Loading Class: sun/security/util/Resources_zh_CN.class +INFO: Loading Class: sun/security/util/Resources_zh_HK.class +INFO: Loading Class: sun/security/util/Resources_zh_TW.class +INFO: Loading Class: sun/security/util/SecurityConstants$AWT.class +INFO: Loading Class: sun/security/util/SecurityConstants.class +INFO: Loading Class: sun/security/util/SignatureFileVerifier.class +INFO: Loading Class: sun/security/util/UntrustedCertificates$1.class +INFO: Loading Class: sun/security/util/UntrustedCertificates.class +INFO: Loading Class: sun/security/validator/EndEntityChecker.class +INFO: Loading Class: sun/security/validator/KeyStores.class +INFO: Loading Class: sun/security/validator/PKIXValidator.class +INFO: Loading Class: sun/security/validator/SimpleValidator.class +INFO: Loading Class: sun/security/validator/Validator.class +INFO: Loading Class: sun/security/validator/ValidatorException.class +INFO: Loading Class: sun/security/x509/AVA.class +INFO: Loading Class: sun/security/x509/AVAComparator.class +INFO: Loading Class: sun/security/x509/AVAKeyword.class +INFO: Loading Class: sun/security/x509/AccessDescription.class +INFO: Loading Class: sun/security/x509/AlgIdDSA.class +INFO: Loading Class: sun/security/x509/AlgorithmId.class +INFO: Loading Class: sun/security/x509/AttributeNameEnumeration.class +INFO: Loading Class: sun/security/x509/AuthorityInfoAccessExtension.class +INFO: Loading Class: sun/security/x509/AuthorityKeyIdentifierExtension.class +INFO: Loading Class: sun/security/x509/BasicConstraintsExtension.class +INFO: Loading Class: sun/security/x509/CRLDistributionPointsExtension.class +INFO: Loading Class: sun/security/x509/CRLExtensions.class +INFO: Loading Class: sun/security/x509/CRLNumberExtension.class +INFO: Loading Class: sun/security/x509/CRLReasonCodeExtension.class +INFO: Loading Class: sun/security/x509/CertAttrSet.class +INFO: Loading Class: sun/security/x509/CertException.class +INFO: Loading Class: sun/security/x509/CertParseError.class +INFO: Loading Class: sun/security/x509/CertificateAlgorithmId.class +INFO: Loading Class: sun/security/x509/CertificateExtensions.class +INFO: Loading Class: sun/security/x509/CertificateIssuerExtension.class +INFO: Loading Class: sun/security/x509/CertificateIssuerName.class +INFO: Loading Class: sun/security/x509/CertificatePoliciesExtension.class +INFO: Loading Class: sun/security/x509/CertificatePolicyId.class +INFO: Loading Class: sun/security/x509/CertificatePolicyMap.class +INFO: Loading Class: sun/security/x509/CertificatePolicySet.class +INFO: Loading Class: sun/security/x509/CertificateSerialNumber.class +INFO: Loading Class: sun/security/x509/CertificateSubjectName.class +INFO: Loading Class: sun/security/x509/CertificateValidity.class +INFO: Loading Class: sun/security/x509/CertificateVersion.class +INFO: Loading Class: sun/security/x509/CertificateX509Key.class +INFO: Loading Class: sun/security/x509/DNSName.class +INFO: Loading Class: sun/security/x509/DeltaCRLIndicatorExtension.class +INFO: Loading Class: sun/security/x509/DistributionPoint.class +INFO: Loading Class: sun/security/x509/DistributionPointName.class +INFO: Loading Class: sun/security/x509/EDIPartyName.class +INFO: Loading Class: sun/security/x509/ExtendedKeyUsageExtension.class +INFO: Loading Class: sun/security/x509/Extension.class +INFO: Loading Class: sun/security/x509/FreshestCRLExtension.class +INFO: Loading Class: sun/security/x509/GeneralName.class +INFO: Loading Class: sun/security/x509/GeneralNameInterface.class +INFO: Loading Class: sun/security/x509/GeneralNames.class +INFO: Loading Class: sun/security/x509/GeneralSubtree.class +INFO: Loading Class: sun/security/x509/GeneralSubtrees.class +INFO: Loading Class: sun/security/x509/IPAddressName.class +INFO: Loading Class: sun/security/x509/InhibitAnyPolicyExtension.class +INFO: Loading Class: sun/security/x509/InvalidityDateExtension.class +INFO: Loading Class: sun/security/x509/IssuerAlternativeNameExtension.class +INFO: Loading Class: sun/security/x509/IssuingDistributionPointExtension.class +INFO: Loading Class: sun/security/x509/KeyIdentifier.class +INFO: Loading Class: sun/security/x509/KeyUsageExtension.class +INFO: Loading Class: sun/security/x509/NameConstraintsExtension.class +INFO: Loading Class: sun/security/x509/NetscapeCertTypeExtension$MapEntry.class +INFO: Loading Class: sun/security/x509/NetscapeCertTypeExtension.class +INFO: Loading Class: sun/security/x509/OCSPNoCheckExtension.class +INFO: Loading Class: sun/security/x509/OIDMap$OIDInfo.class +INFO: Loading Class: sun/security/x509/OIDMap.class +INFO: Loading Class: sun/security/x509/OIDName.class +INFO: Loading Class: sun/security/x509/OtherName.class +INFO: Loading Class: sun/security/x509/PKIXExtensions.class +INFO: Loading Class: sun/security/x509/PolicyConstraintsExtension.class +INFO: Loading Class: sun/security/x509/PolicyInformation.class +INFO: Loading Class: sun/security/x509/PolicyMappingsExtension.class +INFO: Loading Class: sun/security/x509/PrivateKeyUsageExtension.class +INFO: Loading Class: sun/security/x509/RDN.class +INFO: Loading Class: sun/security/x509/RFC822Name.class +INFO: Loading Class: sun/security/x509/ReasonFlags.class +INFO: Loading Class: sun/security/x509/SerialNumber.class +INFO: Loading Class: sun/security/x509/SubjectAlternativeNameExtension.class +INFO: Loading Class: sun/security/x509/SubjectInfoAccessExtension.class +INFO: Loading Class: sun/security/x509/SubjectKeyIdentifierExtension.class +INFO: Loading Class: sun/security/x509/URIName.class +INFO: Loading Class: sun/security/x509/UniqueIdentity.class +INFO: Loading Class: sun/security/x509/UnparseableExtension.class +INFO: Loading Class: sun/security/x509/X400Address.class +INFO: Loading Class: sun/security/x509/X500Name$1.class +INFO: Loading Class: sun/security/x509/X500Name.class +INFO: Loading Class: sun/security/x509/X509AttributeName.class +INFO: Loading Class: sun/security/x509/X509CRLEntryImpl.class +INFO: Loading Class: sun/security/x509/X509CRLImpl$X509IssuerSerial.class +INFO: Loading Class: sun/security/x509/X509CRLImpl.class +INFO: Loading Class: sun/security/x509/X509CertImpl.class +INFO: Loading Class: sun/security/x509/X509CertInfo.class +INFO: Loading Class: sun/security/x509/X509Key.class +INFO: Loading Class: sun/swing/AccumulativeRunnable.class +INFO: Loading Class: sun/swing/BakedArrayList.class +INFO: Loading Class: sun/swing/CachedPainter.class +INFO: Loading Class: sun/swing/DefaultLayoutStyle.class +INFO: Loading Class: sun/swing/FilePane$1.class +INFO: Loading Class: sun/swing/FilePane$1FilePaneAction.class +INFO: Loading Class: sun/swing/FilePane$2.class +INFO: Loading Class: sun/swing/FilePane$3.class +INFO: Loading Class: sun/swing/FilePane$4.class +INFO: Loading Class: sun/swing/FilePane$5.class +INFO: Loading Class: sun/swing/FilePane$6.class +INFO: Loading Class: sun/swing/FilePane$7.class +INFO: Loading Class: sun/swing/FilePane$8.class +INFO: Loading Class: sun/swing/FilePane$9.class +INFO: Loading Class: sun/swing/FilePane$AlignableTableHeaderRenderer.class +INFO: Loading Class: sun/swing/FilePane$DelayedSelectionUpdater.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableCellEditor.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableCellRenderer.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableModel$1.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableModel.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableRowSorter$1.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableRowSorter$SorterModelWrapper.class +INFO: Loading Class: sun/swing/FilePane$DetailsTableRowSorter.class +INFO: Loading Class: sun/swing/FilePane$DirectoriesFirstComparatorWrapper.class +INFO: Loading Class: sun/swing/FilePane$EditActionListener.class +INFO: Loading Class: sun/swing/FilePane$FileChooserUIAccessor.class +INFO: Loading Class: sun/swing/FilePane$FileRenderer.class +INFO: Loading Class: sun/swing/FilePane$Handler.class +INFO: Loading Class: sun/swing/FilePane$SortableListModel.class +INFO: Loading Class: sun/swing/FilePane$ViewTypeAction.class +INFO: Loading Class: sun/swing/FilePane.class +INFO: Loading Class: sun/swing/ImageCache$Entry.class +INFO: Loading Class: sun/swing/ImageCache.class +INFO: Loading Class: sun/swing/ImageIconUIResource.class +INFO: Loading Class: sun/swing/JLightweightFrame$1.class +INFO: Loading Class: sun/swing/JLightweightFrame$2.class +INFO: Loading Class: sun/swing/JLightweightFrame$3$1.class +INFO: Loading Class: sun/swing/JLightweightFrame$3.class +INFO: Loading Class: sun/swing/JLightweightFrame$4.class +INFO: Loading Class: sun/swing/LightweightContent.class +INFO: Loading Class: sun/swing/MenuItemCheckIconFactory.class +INFO: Loading Class: sun/swing/MenuItemLayoutHelper$ColumnAlignment.class +INFO: Loading Class: sun/swing/MenuItemLayoutHelper$LayoutResult.class +INFO: Loading Class: sun/swing/MenuItemLayoutHelper$RectSize.class +INFO: Loading Class: sun/swing/PrintColorUIResource.class +INFO: Loading Class: sun/swing/PrintingStatus$1.class +INFO: Loading Class: sun/swing/PrintingStatus$2.class +INFO: Loading Class: sun/swing/PrintingStatus$3.class +INFO: Loading Class: sun/swing/PrintingStatus$4.class +INFO: Loading Class: sun/swing/PrintingStatus$NotificationPrintable$1.class +INFO: Loading Class: sun/swing/PrintingStatus$NotificationPrintable.class +INFO: Loading Class: sun/swing/PrintingStatus.class +INFO: Loading Class: sun/swing/SwingAccessor$JLightweightFrameAccessor.class +INFO: Loading Class: sun/swing/SwingAccessor$RepaintManagerAccessor.class +INFO: Loading Class: sun/swing/SwingUtilities2$1.class +INFO: Loading Class: sun/swing/SwingUtilities2$2$1.class +INFO: Loading Class: sun/swing/SwingUtilities2$RepaintListener.class +INFO: Loading Class: sun/swing/SwingUtilities2$Section.class +INFO: Loading Class: sun/swing/WindowsPlacesBar.class +INFO: Loading Class: sun/swing/icon/SortArrowIcon.class +INFO: Loading Class: sun/swing/plaf/GTKKeybindings.class +INFO: Loading Class: sun/swing/plaf/WindowsKeybindings.class +INFO: Loading Class: sun/swing/plaf/synth/DefaultSynthStyle$StateInfo.class +INFO: Loading Class: sun/swing/plaf/synth/DefaultSynthStyle.class +INFO: Loading Class: sun/swing/plaf/synth/Paint9Painter$PaintType.class +INFO: Loading Class: sun/swing/plaf/synth/Paint9Painter.class +INFO: Loading Class: sun/swing/plaf/synth/StyleAssociation.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI$1.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI$DelayedSelectionUpdater.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI$FileNameCompletionAction.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI$GlobFilter.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI$SynthFCPropertyChangeListener.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI$UIBorder.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUI.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$1.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$2.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$3.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$4.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$AlignedLabel.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$ButtonAreaLayout.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$DirectoryComboBoxAction.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$DirectoryComboBoxModel.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$DirectoryComboBoxRenderer.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$FilterComboBoxModel.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$FilterComboBoxRenderer.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$IndentIcon.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl$SynthFileChooserUIAccessor.class +INFO: Loading Class: sun/swing/plaf/synth/SynthFileChooserUIImpl.class +INFO: Loading Class: sun/swing/plaf/synth/SynthIcon.class +INFO: Loading Class: sun/swing/plaf/windows/ClassicSortArrowIcon.class +INFO: Loading Class: sun/swing/table/DefaultTableCellHeaderRenderer$1.class +INFO: Loading Class: sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon.class +INFO: Loading Class: sun/swing/table/DefaultTableCellHeaderRenderer.class +INFO: Loading Class: sun/swing/text/CompoundPrintable.class +INFO: Loading Class: sun/swing/text/CountingPrintable.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$1.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$10.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$2.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$3.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$4.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$5.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$6.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$7.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$8.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$9.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable$IntegerSegment.class +INFO: Loading Class: sun/swing/text/TextComponentPrintable.class +INFO: Loading Class: sun/swing/text/html/FrameEditorPaneTag.class +INFO: Loading Class: sun/text/CharArrayCodePointIterator.class +INFO: Loading Class: sun/text/CharSequenceCodePointIterator.class +INFO: Loading Class: sun/text/CharacterIteratorCodePointIterator.class +INFO: Loading Class: sun/text/CodePointIterator.class +INFO: Loading Class: sun/text/CollatorUtilities.class +INFO: Loading Class: sun/text/CompactByteArray.class +INFO: Loading Class: sun/text/ComposedCharIter.class +INFO: Loading Class: sun/text/IntHashtable.class +INFO: Loading Class: sun/text/Normalizer.class +INFO: Loading Class: sun/text/SupplementaryCharacterData.class +INFO: Loading Class: sun/text/UCompactIntArray.class +INFO: Loading Class: sun/text/bidi/BidiBase$1.class +INFO: Loading Class: sun/text/bidi/BidiBase$ImpTabPair.class +INFO: Loading Class: sun/text/bidi/BidiBase$InsertPoints.class +INFO: Loading Class: sun/text/bidi/BidiBase$LevState.class +INFO: Loading Class: sun/text/bidi/BidiBase$NumericShapings.class +INFO: Loading Class: sun/text/bidi/BidiBase$Point.class +INFO: Loading Class: sun/text/bidi/BidiBase$TextAttributeConstants$1.class +INFO: Loading Class: sun/text/bidi/BidiBase$TextAttributeConstants.class +INFO: Loading Class: sun/text/bidi/BidiBase.class +INFO: Loading Class: sun/text/bidi/BidiLine.class +INFO: Loading Class: sun/text/bidi/BidiRun.class +INFO: Loading Class: sun/text/normalizer/CharTrie$FriendAgent.class +INFO: Loading Class: sun/text/normalizer/CharTrie.class +INFO: Loading Class: sun/text/normalizer/CharacterIteratorWrapper.class +INFO: Loading Class: sun/text/normalizer/ICUBinary$Authenticate.class +INFO: Loading Class: sun/text/normalizer/ICUBinary.class +INFO: Loading Class: sun/text/normalizer/ICUData$1.class +INFO: Loading Class: sun/text/normalizer/ICUData.class +INFO: Loading Class: sun/text/normalizer/IntTrie.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$1.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$IsNextBoundary.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$IsNextNFDSafe.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$IsNextTrueStarter.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$IsPrevBoundary.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$IsPrevNFDSafe.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$IsPrevTrueStarter.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$Mode.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$NFCMode.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$NFDMode.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$NFKCMode.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$NFKDMode.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase$QuickCheckResult.class +INFO: Loading Class: sun/text/normalizer/NormalizerBase.class +INFO: Loading Class: sun/text/normalizer/NormalizerDataReader.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$1.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$AuxTrieImpl.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$ComposePartArgs.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$DecomposeArgs.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$FCDTrieImpl.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$NextCCArgs.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$NextCombiningArgs.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$NormTrieImpl.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$PrevArgs.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl$RecomposeArgs.class +INFO: Loading Class: sun/text/normalizer/NormalizerImpl.class +INFO: Loading Class: sun/text/normalizer/RangeValueIterator$Element.class +INFO: Loading Class: sun/text/normalizer/RangeValueIterator.class +INFO: Loading Class: sun/text/normalizer/Replaceable.class +INFO: Loading Class: sun/text/normalizer/ReplaceableString.class +INFO: Loading Class: sun/text/normalizer/ReplaceableUCharacterIterator.class +INFO: Loading Class: sun/text/normalizer/RuleCharacterIterator.class +INFO: Loading Class: sun/text/normalizer/SymbolTable.class +INFO: Loading Class: sun/text/normalizer/Trie$1.class +INFO: Loading Class: sun/text/normalizer/Trie$DataManipulate.class +INFO: Loading Class: sun/text/normalizer/Trie$DefaultGetFoldingOffset.class +INFO: Loading Class: sun/text/normalizer/Trie.class +INFO: Loading Class: sun/text/normalizer/TrieIterator.class +INFO: Loading Class: sun/text/normalizer/UBiDiProps$1.class +INFO: Loading Class: sun/text/normalizer/UBiDiProps$IsAcceptable.class +INFO: Loading Class: sun/text/normalizer/UBiDiProps.class +INFO: Loading Class: sun/text/normalizer/UCharacter$NumericType.class +INFO: Loading Class: sun/text/normalizer/UCharacter.class +INFO: Loading Class: sun/text/normalizer/UCharacterIterator.class +INFO: Loading Class: sun/text/normalizer/UCharacterProperty.class +INFO: Loading Class: sun/text/normalizer/UCharacterPropertyReader.class +INFO: Loading Class: sun/text/normalizer/UTF16.class +INFO: Loading Class: sun/text/normalizer/UnicodeMatcher.class +INFO: Loading Class: sun/text/normalizer/UnicodeSet$Filter.class +INFO: Loading Class: sun/text/normalizer/UnicodeSet$VersionFilter.class +INFO: Loading Class: sun/text/normalizer/UnicodeSet.class +INFO: Loading Class: sun/text/normalizer/UnicodeSetIterator.class +INFO: Loading Class: sun/text/normalizer/Utility.class +INFO: Loading Class: sun/text/normalizer/VersionInfo.class +INFO: Loading Class: sun/text/resources/BreakIteratorInfo.class +INFO: Loading Class: sun/text/resources/CollationData.class +INFO: Loading Class: sun/text/resources/FormatData.class +INFO: Loading Class: sun/text/resources/JavaTimeSupplementary.class +INFO: Loading Class: sun/text/resources/en/FormatData_en.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_AU.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_CA.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_GB.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_IE.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_IN.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_MT.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_NZ.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_PH.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_SG.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_US.class +INFO: Loading Class: sun/text/resources/en/FormatData_en_ZA.class +INFO: Loading Class: sun/text/resources/en/JavaTimeSupplementary_en.class +INFO: Loading Class: sun/text/resources/en/JavaTimeSupplementary_en_GB.class +INFO: Loading Class: sun/text/resources/en/JavaTimeSupplementary_en_SG.class +INFO: Loading Class: sun/tools/jar/CommandLine.class +INFO: Loading Class: sun/tools/jar/JarException.class +INFO: Loading Class: sun/tools/jar/Main$1.class +INFO: Loading Class: sun/tools/jar/Main$CRC32OutputStream.class +INFO: Loading Class: sun/tools/jar/Main.class +INFO: Loading Class: sun/tools/jar/Manifest.class +INFO: Loading Class: sun/tools/jar/SignatureFile.class +INFO: Loading Class: sun/tools/jar/resources/jar.class +INFO: Loading Class: sun/tools/jar/resources/jar_de.class +INFO: Loading Class: sun/tools/jar/resources/jar_es.class +INFO: Loading Class: sun/tools/jar/resources/jar_fr.class +INFO: Loading Class: sun/tools/jar/resources/jar_it.class +INFO: Loading Class: sun/tools/jar/resources/jar_ja.class +INFO: Loading Class: sun/tools/jar/resources/jar_ko.class +INFO: Loading Class: sun/tools/jar/resources/jar_pt_BR.class +INFO: Loading Class: sun/tools/jar/resources/jar_sv.class +INFO: Loading Class: sun/tools/jar/resources/jar_zh_CN.class +INFO: Loading Class: sun/tools/jar/resources/jar_zh_HK.class +INFO: Loading Class: sun/tools/jar/resources/jar_zh_TW.class +INFO: Loading Class: sun/tracing/MultiplexProbe.class +INFO: Loading Class: sun/tracing/MultiplexProvider.class +INFO: Loading Class: sun/tracing/MultiplexProviderFactory.class +INFO: Loading Class: sun/tracing/NullProbe.class +INFO: Loading Class: sun/tracing/NullProvider.class +INFO: Loading Class: sun/tracing/NullProviderFactory.class +INFO: Loading Class: sun/tracing/PrintStreamProbe.class +INFO: Loading Class: sun/tracing/PrintStreamProvider.class +INFO: Loading Class: sun/tracing/PrintStreamProviderFactory.class +INFO: Loading Class: sun/tracing/ProbeSkeleton.class +INFO: Loading Class: sun/tracing/ProviderSkeleton$1.class +INFO: Loading Class: sun/tracing/ProviderSkeleton$2.class +INFO: Loading Class: sun/tracing/ProviderSkeleton.class +INFO: Loading Class: sun/tracing/dtrace/Activation.class +INFO: Loading Class: sun/tracing/dtrace/DTraceProbe.class +INFO: Loading Class: sun/tracing/dtrace/DTraceProvider.class +INFO: Loading Class: sun/tracing/dtrace/DTraceProviderFactory.class +INFO: Loading Class: sun/tracing/dtrace/JVM$1.class +INFO: Loading Class: sun/tracing/dtrace/JVM.class +INFO: Loading Class: sun/tracing/dtrace/SystemResource.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient$1.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient$2.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient$3.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient$4.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient$UsageTrackerRunnable$1.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient$UsageTrackerRunnable.class +INFO: Loading Class: sun/usagetracker/UsageTrackerClient.class +INFO: Loading Class: sun/util/BuddhistCalendar.class +INFO: Loading Class: sun/util/PreHashedMap$1$1.class +INFO: Loading Class: sun/util/PreHashedMap$1.class +INFO: Loading Class: sun/util/PreHashedMap$2$1$1.class +INFO: Loading Class: sun/util/PreHashedMap$2$1.class +INFO: Loading Class: sun/util/PreHashedMap$2.class +INFO: Loading Class: sun/util/calendar/CalendarSystem$1.class +INFO: Loading Class: sun/util/calendar/Era.class +INFO: Loading Class: sun/util/calendar/ImmutableGregorianDate.class +INFO: Loading Class: sun/util/calendar/JulianCalendar$Date.class +INFO: Loading Class: sun/util/calendar/JulianCalendar.class +INFO: Loading Class: sun/util/calendar/LocalGregorianCalendar$Date.class +INFO: Loading Class: sun/util/calendar/LocalGregorianCalendar.class +INFO: Loading Class: sun/util/cldr/CLDRLocaleProviderAdapter$1.class +INFO: Loading Class: sun/util/cldr/CLDRLocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/BaseLocale$1.class +INFO: Loading Class: sun/util/locale/Extension.class +INFO: Loading Class: sun/util/locale/InternalLocaleBuilder$1.class +INFO: Loading Class: sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar.class +INFO: Loading Class: sun/util/locale/InternalLocaleBuilder$CaseInsensitiveString.class +INFO: Loading Class: sun/util/locale/InternalLocaleBuilder.class +INFO: Loading Class: sun/util/locale/LanguageTag.class +INFO: Loading Class: sun/util/locale/LocaleEquivalentMaps.class +INFO: Loading Class: sun/util/locale/LocaleExtensions.class +INFO: Loading Class: sun/util/locale/LocaleMatcher.class +INFO: Loading Class: sun/util/locale/LocaleSyntaxException.class +INFO: Loading Class: sun/util/locale/ParseStatus.class +INFO: Loading Class: sun/util/locale/StringTokenIterator.class +INFO: Loading Class: sun/util/locale/UnicodeLocaleExtension.class +INFO: Loading Class: sun/util/locale/provider/AuxLocaleProviderAdapter$1.class +INFO: Loading Class: sun/util/locale/provider/AvailableLanguageTags.class +INFO: Loading Class: sun/util/locale/provider/BreakDictionary$1.class +INFO: Loading Class: sun/util/locale/provider/BreakDictionary.class +INFO: Loading Class: sun/util/locale/provider/BreakIteratorProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/CalendarDataProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/CalendarDataUtility$CalendarFieldValueNameGetter.class +INFO: Loading Class: sun/util/locale/provider/CalendarDataUtility$CalendarFieldValueNamesMapGetter.class +INFO: Loading Class: sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter.class +INFO: Loading Class: sun/util/locale/provider/CalendarDataUtility.class +INFO: Loading Class: sun/util/locale/provider/CalendarNameProviderImpl$LengthBasedComparator.class +INFO: Loading Class: sun/util/locale/provider/CalendarNameProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/CalendarProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/CollationRules.class +INFO: Loading Class: sun/util/locale/provider/CollatorProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/CurrencyNameProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/DateFormatProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/DateFormatSymbolsProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/DecimalFormatSymbolsProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/DictionaryBasedBreakIterator.class +INFO: Loading Class: sun/util/locale/provider/FallbackLocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$1.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$10.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$2.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$3.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$4.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$5.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$6.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$7.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$8.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl$9.class +INFO: Loading Class: sun/util/locale/provider/HostLocaleProviderAdapterImpl.class +INFO: Loading Class: sun/util/locale/provider/JRELocaleConstants.class +INFO: Loading Class: sun/util/locale/provider/JRELocaleProviderAdapter$AvailableJRELocales.class +INFO: Loading Class: sun/util/locale/provider/LocaleNameProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/LocaleServiceProviderPool$AllAvailableLocales.class +INFO: Loading Class: sun/util/locale/provider/NumberFormatProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/RuleBasedBreakIterator$1.class +INFO: Loading Class: sun/util/locale/provider/RuleBasedBreakIterator$SafeCharIterator.class +INFO: Loading Class: sun/util/locale/provider/RuleBasedBreakIterator.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$BreakIteratorProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$CalendarDataProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$CalendarNameProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$CollatorProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$CurrencyNameProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$DateFormatProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$DateFormatSymbolsProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$DecimalFormatSymbolsProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$Delegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$LocaleNameProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$NumberFormatProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$TimeZoneNameProviderDelegate.class +INFO: Loading Class: sun/util/locale/provider/TimeZoneNameUtility.class +INFO: Loading Class: sun/util/logging/resources/logging_de.class +INFO: Loading Class: sun/util/logging/resources/logging_es.class +INFO: Loading Class: sun/util/logging/resources/logging_fr.class +INFO: Loading Class: sun/util/logging/resources/logging_it.class +INFO: Loading Class: sun/util/logging/resources/logging_ja.class +INFO: Loading Class: sun/util/logging/resources/logging_ko.class +INFO: Loading Class: sun/util/logging/resources/logging_pt_BR.class +INFO: Loading Class: sun/util/logging/resources/logging_sv.class +INFO: Loading Class: sun/util/logging/resources/logging_zh_CN.class +INFO: Loading Class: sun/util/logging/resources/logging_zh_HK.class +INFO: Loading Class: sun/util/logging/resources/logging_zh_TW.class +INFO: Loading Class: sun/util/resources/CalendarData.class +INFO: Loading Class: sun/util/resources/CurrencyNames.class +INFO: Loading Class: sun/util/resources/LocaleData$2.class +INFO: Loading Class: sun/util/resources/LocaleData$SupplementaryResourceBundleControl.class +INFO: Loading Class: sun/util/resources/LocaleNames.class +INFO: Loading Class: sun/util/resources/LocaleNamesBundle.class +INFO: Loading Class: sun/util/resources/ParallelListResourceBundle$1.class +INFO: Loading Class: sun/util/resources/ParallelListResourceBundle$KeySet$1.class +INFO: Loading Class: sun/util/resources/ParallelListResourceBundle$KeySet.class +INFO: Loading Class: sun/util/resources/ParallelListResourceBundle.class +INFO: Loading Class: sun/util/resources/en/CalendarData_en.class +INFO: Loading Class: sun/util/resources/en/CalendarData_en_GB.class +INFO: Loading Class: sun/util/resources/en/CalendarData_en_IE.class +INFO: Loading Class: sun/util/resources/en/CalendarData_en_MT.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_AU.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_CA.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_GB.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_IE.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_IN.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_MT.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_NZ.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_PH.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_SG.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_US.class +INFO: Loading Class: sun/util/resources/en/CurrencyNames_en_ZA.class +INFO: Loading Class: sun/util/resources/en/LocaleNames_en.class +INFO: Loading Class: sun/util/resources/en/LocaleNames_en_MT.class +INFO: Loading Class: sun/util/resources/en/LocaleNames_en_PH.class +INFO: Loading Class: sun/util/resources/en/LocaleNames_en_SG.class +INFO: Loading Class: sun/util/resources/en/TimeZoneNames_en_CA.class +INFO: Loading Class: sun/util/resources/en/TimeZoneNames_en_GB.class +INFO: Loading Class: sun/util/resources/en/TimeZoneNames_en_IE.class +INFO: Loading Class: sun/util/spi/CalendarProvider.class +INFO: Loading Class: sun/util/spi/XmlPropertiesProvider.class +INFO: Loading Class: sun/util/xml/PlatformXmlPropertiesProvider$1.class +INFO: Loading Class: sun/util/xml/PlatformXmlPropertiesProvider$EH.class +INFO: Loading Class: sun/util/xml/PlatformXmlPropertiesProvider$Resolver.class +INFO: Loading Class: sun/util/xml/PlatformXmlPropertiesProvider.class +INFO: Loading Class: sun/util/resources/en/TimeZoneNames_en.class +INFO: Loading Class: sun/util/resources/TimeZoneNamesBundle.class +INFO: Loading Class: sun/util/resources/TimeZoneNames.class +INFO: Loading Class: sun/util/resources/OpenListResourceBundle.class +INFO: Loading Class: sun/util/resources/LocaleData$LocaleDataResourceBundleControl.class +INFO: Loading Class: sun/util/resources/LocaleData$1.class +INFO: Loading Class: sun/util/resources/LocaleData.class +INFO: Loading Class: sun/util/logging/resources/logging.class +INFO: Loading Class: sun/util/logging/PlatformLogger$LoggerProxy.class +INFO: Loading Class: sun/util/logging/PlatformLogger$Level.class +INFO: Loading Class: sun/util/logging/PlatformLogger$JavaLoggerProxy.class +INFO: Loading Class: sun/util/logging/PlatformLogger$DefaultLoggerProxy.class +INFO: Loading Class: sun/util/logging/PlatformLogger$1.class +INFO: Loading Class: sun/util/logging/PlatformLogger.class +INFO: Loading Class: sun/util/logging/LoggingSupport$2.class +INFO: Loading Class: sun/util/logging/LoggingSupport$1.class +INFO: Loading Class: sun/util/logging/LoggingSupport.class +INFO: Loading Class: sun/util/logging/LoggingProxy.class +INFO: Loading Class: sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter.class +INFO: Loading Class: sun/util/locale/provider/TimeZoneNameProviderImpl.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter$1.class +INFO: Loading Class: sun/util/locale/provider/SPILocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/provider/ResourceBundleBasedAdapter.class +INFO: Loading Class: sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter.class +INFO: Loading Class: sun/util/locale/provider/LocaleServiceProviderPool.class +INFO: Loading Class: sun/util/locale/provider/LocaleResources$ResourceReference.class +INFO: Loading Class: sun/util/locale/provider/LocaleResources.class +INFO: Loading Class: sun/util/locale/provider/LocaleProviderAdapter$Type.class +INFO: Loading Class: sun/util/locale/provider/LocaleProviderAdapter$1.class +INFO: Loading Class: sun/util/locale/provider/LocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/provider/LocaleDataMetaInfo.class +INFO: Loading Class: sun/util/locale/provider/JRELocaleProviderAdapter$1.class +INFO: Loading Class: sun/util/locale/provider/JRELocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider.class +INFO: Loading Class: sun/util/locale/provider/AuxLocaleProviderAdapter.class +INFO: Loading Class: sun/util/locale/LocaleUtils.class +INFO: Loading Class: sun/util/locale/LocaleObjectCache$CacheEntry.class +INFO: Loading Class: sun/util/locale/LocaleObjectCache.class +INFO: Loading Class: sun/util/locale/BaseLocale$Key.class +INFO: Loading Class: sun/util/locale/BaseLocale$Cache.class +INFO: Loading Class: sun/util/locale/BaseLocale.class +INFO: Loading Class: sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule.class +INFO: Loading Class: sun/util/calendar/ZoneInfoFile$Checksum.class +INFO: Loading Class: sun/util/calendar/ZoneInfoFile$1.class +INFO: Loading Class: sun/util/calendar/ZoneInfoFile.class +INFO: Loading Class: sun/util/calendar/ZoneInfo.class +INFO: Loading Class: sun/util/calendar/Gregorian$Date.class +INFO: Loading Class: sun/util/calendar/Gregorian.class +INFO: Loading Class: sun/util/calendar/CalendarUtils.class +INFO: Loading Class: sun/util/calendar/CalendarSystem.class +INFO: Loading Class: sun/util/calendar/CalendarDate.class +INFO: Loading Class: sun/util/calendar/BaseCalendar$Date.class +INFO: Loading Class: sun/util/calendar/BaseCalendar.class +INFO: Loading Class: sun/util/calendar/AbstractCalendar.class +INFO: Loading Class: sun/util/ResourceBundleEnumeration.class +INFO: Loading Class: sun/util/PreHashedMap.class +INFO: Loading Class: sun/util/CoreResourceBundleControl.class +INFO: Loading Class: sun/swing/UIClientPropertyKey.class +INFO: Loading Class: sun/swing/UIAction.class +INFO: Loading Class: sun/swing/SwingUtilities2$LSBCacheEntry.class +INFO: Loading Class: sun/swing/SwingUtilities2$AATextInfo.class +INFO: Loading Class: sun/swing/SwingUtilities2$2.class +INFO: Loading Class: sun/swing/SwingUtilities2.class +INFO: Loading Class: sun/swing/SwingLazyValue$1.class +INFO: Loading Class: sun/swing/SwingLazyValue.class +INFO: Loading Class: sun/swing/SwingAccessor$JTextComponentAccessor.class +INFO: Loading Class: sun/swing/SwingAccessor.class +INFO: Loading Class: sun/swing/StringUIClientPropertyKey.class +INFO: Loading Class: sun/swing/MenuItemLayoutHelper.class +INFO: Loading Class: sun/swing/JLightweightFrame.class +INFO: Loading Class: sun/swing/DefaultLookup.class +INFO: Loading Class: sun/security/util/ManifestEntryVerifier.class +INFO: Loading Class: sun/security/util/Debug.class +INFO: Loading Class: sun/security/action/GetPropertyAction.class +INFO: Loading Class: sun/security/action/GetBooleanAction.class +INFO: Loading Class: sun/reflect/misc/ReflectUtil.class +INFO: Loading Class: sun/reflect/misc/MethodUtil$1.class +INFO: Loading Class: sun/reflect/misc/MethodUtil.class +INFO: Loading Class: sun/reflect/generics/repository/GenericDeclRepository.class +INFO: Loading Class: sun/reflect/generics/repository/ClassRepository.class +INFO: Loading Class: sun/reflect/generics/repository/AbstractRepository.class +INFO: Loading Class: sun/reflect/annotation/AnnotationType.class +INFO: Loading Class: sun/reflect/UnsafeStaticFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeObjectFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UnsafeFieldAccessorFactory.class +INFO: Loading Class: sun/reflect/UnsafeBooleanFieldAccessorImpl.class +INFO: Loading Class: sun/reflect/UTF8.class +INFO: Loading Class: sun/reflect/SerializationConstructorAccessorImpl.class +INFO: Loading Class: sun/reflect/ReflectionFactory$GetReflectionFactoryAction.class +INFO: Loading Class: sun/reflect/ReflectionFactory$1.class +INFO: Loading Class: sun/reflect/ReflectionFactory.class +INFO: Loading Class: sun/reflect/Reflection.class +INFO: Loading Class: sun/reflect/NativeMethodAccessorImpl.class +INFO: Loading Class: sun/reflect/NativeConstructorAccessorImpl.class +INFO: Loading Class: sun/reflect/MethodAccessorImpl.class +INFO: Loading Class: sun/reflect/MethodAccessorGenerator$1.class +INFO: Loading Class: sun/reflect/MethodAccessorGenerator.class +INFO: Loading Class: sun/reflect/MethodAccessor.class +INFO: Loading Class: sun/reflect/MagicAccessorImpl.class +INFO: Loading Class: sun/reflect/LangReflectAccess.class +INFO: Loading Class: sun/reflect/Label$PatchInfo.class +INFO: Loading Class: sun/reflect/Label.class +INFO: Loading Class: sun/reflect/FieldAccessorImpl.class +INFO: Loading Class: sun/reflect/FieldAccessor.class +INFO: Loading Class: sun/reflect/DelegatingMethodAccessorImpl.class +INFO: Loading Class: sun/reflect/DelegatingConstructorAccessorImpl.class +INFO: Loading Class: sun/reflect/DelegatingClassLoader.class +INFO: Loading Class: sun/reflect/ConstructorAccessorImpl.class +INFO: Loading Class: sun/reflect/ConstructorAccessor.class +INFO: Loading Class: sun/reflect/ConstantPool.class +INFO: Loading Class: sun/reflect/ClassFileConstants.class +INFO: Loading Class: sun/reflect/ClassFileAssembler.class +INFO: Loading Class: sun/reflect/ClassDefiner$1.class +INFO: Loading Class: sun/reflect/ClassDefiner.class +INFO: Loading Class: sun/reflect/CallerSensitive.class +INFO: Loading Class: sun/reflect/ByteVectorImpl.class +INFO: Loading Class: sun/reflect/ByteVectorFactory.class +INFO: Loading Class: sun/reflect/ByteVector.class +INFO: Loading Class: sun/reflect/BootstrapConstructorAccessorImpl.class +INFO: Loading Class: sun/reflect/AccessorGenerator.class +INFO: Loading Class: sun/print/PrinterGraphicsConfig.class +INFO: Loading Class: sun/nio/cs/UnicodeDecoder.class +INFO: Loading Class: sun/nio/cs/Unicode.class +INFO: Loading Class: sun/nio/cs/UTF_8$Encoder.class +INFO: Loading Class: sun/nio/cs/UTF_8$Decoder.class +INFO: Loading Class: sun/nio/cs/UTF_8.class +INFO: Loading Class: sun/nio/cs/UTF_16LE.class +INFO: Loading Class: sun/nio/cs/UTF_16BE.class +INFO: Loading Class: sun/nio/cs/UTF_16$Decoder.class +INFO: Loading Class: sun/nio/cs/UTF_16.class +INFO: Loading Class: sun/nio/cs/US_ASCII.class +INFO: Loading Class: sun/nio/cs/StreamEncoder.class +INFO: Loading Class: sun/nio/cs/StreamDecoder.class +INFO: Loading Class: sun/nio/cs/StandardCharsets$Classes.class +INFO: Loading Class: sun/nio/cs/StandardCharsets$Cache.class +INFO: Loading Class: sun/nio/cs/StandardCharsets$Aliases.class +INFO: Loading Class: sun/nio/cs/StandardCharsets.class +INFO: Loading Class: sun/nio/cs/ISO_8859_1$Decoder.class +INFO: Loading Class: sun/nio/cs/ISO_8859_1.class +INFO: Loading Class: sun/nio/cs/HistoricallyNamedCharset.class +INFO: Loading Class: sun/nio/cs/FastCharsetProvider.class +INFO: Loading Class: sun/nio/cs/ArrayEncoder.class +INFO: Loading Class: sun/nio/cs/ArrayDecoder.class +INFO: Loading Class: sun/nio/ch/Util$BufferCache.class +INFO: Loading Class: sun/nio/ch/Util$1.class +INFO: Loading Class: sun/nio/ch/Util.class +INFO: Loading Class: sun/nio/ch/NativeThreadSet.class +INFO: Loading Class: sun/nio/ch/NativeThread.class +INFO: Loading Class: sun/nio/ch/NativeDispatcher.class +INFO: Loading Class: sun/nio/ch/Interruptible.class +INFO: Loading Class: sun/nio/ch/IOUtil$1.class +INFO: Loading Class: sun/nio/ch/IOUtil.class +INFO: Loading Class: sun/nio/ch/IOStatus.class +INFO: Loading Class: sun/nio/ch/FileDispatcherImpl.class +INFO: Loading Class: sun/nio/ch/FileDispatcher.class +INFO: Loading Class: sun/nio/ch/FileChannelImpl.class +INFO: Loading Class: sun/nio/ch/DirectBuffer.class +INFO: Loading Class: sun/nio/ByteBuffered.class +INFO: Loading Class: sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry.class +INFO: Loading Class: sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController.class +INFO: Loading Class: sun/net/www/protocol/jar/URLJarFile.class +INFO: Loading Class: sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream.class +INFO: Loading Class: sun/net/www/protocol/jar/JarURLConnection.class +INFO: Loading Class: sun/net/www/protocol/jar/JarFileFactory.class +INFO: Loading Class: sun/net/www/protocol/jar/Handler.class +INFO: Loading Class: sun/net/www/protocol/file/Handler.class +INFO: Loading Class: sun/net/www/protocol/file/FileURLConnection.class +INFO: Loading Class: sun/net/www/URLConnection.class +INFO: Loading Class: sun/net/www/ParseUtil.class +INFO: Loading Class: sun/net/www/MessageHeader.class +INFO: Loading Class: sun/net/util/URLUtil.class +INFO: Loading Class: sun/net/util/IPAddressUtil.class +INFO: Loading Class: sun/net/spi/nameservice/NameService.class +INFO: Loading Class: sun/net/spi/DefaultProxySelector$NonProxyInfo.class +INFO: Loading Class: sun/net/spi/DefaultProxySelector$3.class +INFO: Loading Class: sun/net/spi/DefaultProxySelector$1.class +INFO: Loading Class: sun/net/spi/DefaultProxySelector.class +INFO: Loading Class: sun/net/sdp/SdpProvider.class +INFO: Loading Class: sun/net/ProgressMonitor.class +INFO: Loading Class: sun/net/ProgressMeteringPolicy.class +INFO: Loading Class: sun/net/NetProperties$1.class +INFO: Loading Class: sun/net/NetProperties.class +INFO: Loading Class: sun/net/NetHooks$Provider.class +INFO: Loading Class: sun/net/NetHooks.class +INFO: Loading Class: sun/net/DefaultProgressMeteringPolicy.class +INFO: Loading Class: sun/misc/Version.class +INFO: Loading Class: sun/misc/VM.class +INFO: Loading Class: sun/misc/Unsafe.class +INFO: Loading Class: sun/misc/URLClassPath$Loader.class +INFO: Loading Class: sun/misc/URLClassPath$JarLoader$2.class +INFO: Loading Class: sun/misc/URLClassPath$JarLoader$1.class +INFO: Loading Class: sun/misc/URLClassPath$JarLoader.class +INFO: Loading Class: sun/misc/URLClassPath$FileLoader.class +INFO: Loading Class: sun/misc/URLClassPath$3.class +INFO: Loading Class: sun/misc/URLClassPath$2.class +INFO: Loading Class: sun/misc/URLClassPath$1.class +INFO: Loading Class: sun/misc/URLClassPath.class +INFO: Loading Class: sun/misc/SoftCache$ValueCell.class +INFO: Loading Class: sun/misc/SoftCache.class +INFO: Loading Class: sun/misc/SignalHandler.class +INFO: Loading Class: sun/misc/Signal.class +INFO: Loading Class: sun/misc/SharedSecrets.class +INFO: Loading Class: sun/misc/Resource.class +INFO: Loading Class: sun/misc/PostVMInitHook.class +INFO: Loading Class: sun/misc/PerformanceLogger$TimeData.class +INFO: Loading Class: sun/misc/PerformanceLogger.class +INFO: Loading Class: sun/misc/PerfCounter$CoreCounters.class +INFO: Loading Class: sun/misc/PerfCounter.class +INFO: Loading Class: sun/misc/Perf$GetPerfAction.class +INFO: Loading Class: sun/misc/Perf.class +INFO: Loading Class: sun/misc/OSEnvironment.class +INFO: Loading Class: sun/misc/NativeSignalHandler.class +INFO: Loading Class: sun/misc/MetaIndex.class +INFO: Loading Class: sun/misc/Launcher$Factory.class +INFO: Loading Class: sun/misc/Launcher$ExtClassLoader$1.class +INFO: Loading Class: sun/misc/Launcher$ExtClassLoader.class +INFO: Loading Class: sun/misc/Launcher$BootClassPathHolder$1.class +INFO: Loading Class: sun/misc/Launcher$BootClassPathHolder.class +INFO: Loading Class: sun/misc/Launcher$AppClassLoader$1.class +INFO: Loading Class: sun/misc/Launcher$AppClassLoader.class +INFO: Loading Class: sun/misc/Launcher.class +INFO: Loading Class: sun/misc/JavaUtilZipFileAccess.class +INFO: Loading Class: sun/misc/JavaUtilJarAccess.class +INFO: Loading Class: sun/misc/JavaSecurityProtectionDomainAccess.class +INFO: Loading Class: sun/misc/JavaSecurityAccess.class +INFO: Loading Class: sun/misc/JavaNioAccess.class +INFO: Loading Class: sun/misc/JavaNetAccess.class +INFO: Loading Class: sun/misc/JavaLangAccess.class +INFO: Loading Class: sun/misc/JavaIOFileDescriptorAccess.class +INFO: Loading Class: sun/misc/JavaAWTAccess.class +INFO: Loading Class: sun/misc/JarIndex.class +INFO: Loading Class: sun/misc/IOUtils.class +INFO: Loading Class: sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer.class +INFO: Loading Class: sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer.class +INFO: Loading Class: sun/misc/FloatingDecimal$BinaryToASCIIConverter.class +INFO: Loading Class: sun/misc/FloatingDecimal$BinaryToASCIIBuffer.class +INFO: Loading Class: sun/misc/FloatingDecimal$ASCIIToBinaryConverter.class +INFO: Loading Class: sun/misc/FloatingDecimal$1.class +INFO: Loading Class: sun/misc/FloatingDecimal.class +INFO: Loading Class: sun/misc/FileURLMapper.class +INFO: Loading Class: sun/misc/ExtensionDependency.class +INFO: Loading Class: sun/misc/CompoundEnumeration.class +INFO: Loading Class: sun/misc/Cleaner.class +INFO: Loading Class: sun/misc/ASCIICaseInsensitiveComparator.class +INFO: Loading Class: sun/lwawt/macosx/NamedCursor.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit$AppleSpecificColor.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit$2.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit$1.class +INFO: Loading Class: sun/lwawt/macosx/LWCToolkit.class +INFO: Loading Class: sun/lwawt/macosx/CWrapper$NSWindow.class +INFO: Loading Class: sun/lwawt/macosx/CToolkitThreadBlockedHandler.class +INFO: Loading Class: sun/lwawt/macosx/CThreading.class +INFO: Loading Class: sun/lwawt/macosx/CPrinterDialog.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$9.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$8.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$7.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$6.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$5.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$4.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$3.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$2.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$12.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$11.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$10.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow$1.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformWindow.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformView.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformResponder.class +INFO: Loading Class: sun/lwawt/macosx/CPlatformComponent.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethodDescriptor.class +INFO: Loading Class: sun/lwawt/macosx/CInputMethod.class +INFO: Loading Class: sun/lwawt/macosx/CImage$Creator.class +INFO: Loading Class: sun/lwawt/macosx/CImage.class +INFO: Loading Class: sun/lwawt/macosx/CFRetainedResource.class +INFO: Loading Class: sun/lwawt/macosx/CDropTarget.class +INFO: Loading Class: sun/lwawt/macosx/CDataTransferer.class +INFO: Loading Class: sun/lwawt/macosx/CCustomCursor.class +INFO: Loading Class: sun/lwawt/macosx/CCursorManager.class +INFO: Loading Class: sun/lwawt/macosx/CClipboard.class +INFO: Loading Class: sun/lwawt/PlatformWindow.class +INFO: Loading Class: sun/lwawt/PlatformEventNotifier.class +INFO: Loading Class: sun/lwawt/PlatformComponent.class +INFO: Loading Class: sun/lwawt/LWWindowPeer$PeerType.class +INFO: Loading Class: sun/lwawt/LWWindowPeer.class +INFO: Loading Class: sun/lwawt/LWToolkit.class +INFO: Loading Class: sun/lwawt/LWRepaintArea.class +INFO: Loading Class: sun/lwawt/LWLabelPeer.class +INFO: Loading Class: sun/lwawt/LWKeyboardFocusManagerPeer.class +INFO: Loading Class: sun/lwawt/LWGraphicsConfig.class +INFO: Loading Class: sun/lwawt/LWCursorManager$1.class +INFO: Loading Class: sun/lwawt/LWCursorManager.class +INFO: Loading Class: sun/lwawt/LWContainerPeer.class +INFO: Loading Class: sun/lwawt/LWComponentPeer$DelegateContainer.class +INFO: Loading Class: sun/lwawt/LWComponentPeer$3.class +INFO: Loading Class: sun/lwawt/LWComponentPeer$2.class +INFO: Loading Class: sun/lwawt/LWComponentPeer$1.class +INFO: Loading Class: sun/lwawt/LWComponentPeer.class +INFO: Loading Class: sun/lwawt/LWCanvasPeer.class +INFO: Loading Class: sun/launcher/LauncherHelper$FXHelper.class +INFO: Loading Class: sun/launcher/LauncherHelper.class +INFO: Loading Class: sun/java2d/pipe/hw/ContextCapabilities.class +INFO: Loading Class: sun/java2d/pipe/hw/BufferedContextProvider.class +INFO: Loading Class: sun/java2d/pipe/hw/AccelSurface.class +INFO: Loading Class: sun/java2d/pipe/hw/AccelGraphicsConfig.class +INFO: Loading Class: sun/java2d/pipe/ValidatePipe.class +INFO: Loading Class: sun/java2d/pipe/TextRenderer.class +INFO: Loading Class: sun/java2d/pipe/TextPipe.class +INFO: Loading Class: sun/java2d/pipe/SpanShapeRenderer$Composite.class +INFO: Loading Class: sun/java2d/pipe/SpanShapeRenderer.class +INFO: Loading Class: sun/java2d/pipe/SpanClipRenderer.class +INFO: Loading Class: sun/java2d/pipe/SolidTextRenderer.class +INFO: Loading Class: sun/java2d/pipe/ShapeDrawPipe.class +INFO: Loading Class: sun/java2d/pipe/RenderingEngine$1.class +INFO: Loading Class: sun/java2d/pipe/RenderingEngine.class +INFO: Loading Class: sun/java2d/pipe/RenderQueue.class +INFO: Loading Class: sun/java2d/pipe/RenderBuffer.class +INFO: Loading Class: sun/java2d/pipe/RegionIterator.class +INFO: Loading Class: sun/java2d/pipe/Region$ImmutableRegion.class +INFO: Loading Class: sun/java2d/pipe/Region.class +INFO: Loading Class: sun/java2d/pipe/PixelToShapeConverter.class +INFO: Loading Class: sun/java2d/pipe/PixelToParallelogramConverter.class +INFO: Loading Class: sun/java2d/pipe/PixelFillPipe.class +INFO: Loading Class: sun/java2d/pipe/PixelDrawPipe.class +INFO: Loading Class: sun/java2d/pipe/ParallelogramPipe.class +INFO: Loading Class: sun/java2d/pipe/OutlineTextRenderer.class +INFO: Loading Class: sun/java2d/pipe/NullPipe.class +INFO: Loading Class: sun/java2d/pipe/LoopPipe.class +INFO: Loading Class: sun/java2d/pipe/LoopBasedPipe.class +INFO: Loading Class: sun/java2d/pipe/LCDTextRenderer.class +INFO: Loading Class: sun/java2d/pipe/GlyphListPipe.class +INFO: Loading Class: sun/java2d/pipe/GlyphListLoopPipe.class +INFO: Loading Class: sun/java2d/pipe/GeneralCompositePipe.class +INFO: Loading Class: sun/java2d/pipe/DrawImagePipe.class +INFO: Loading Class: sun/java2d/pipe/DrawImage.class +INFO: Loading Class: sun/java2d/pipe/CompositePipe.class +INFO: Loading Class: sun/java2d/pipe/BufferedTextPipe.class +INFO: Loading Class: sun/java2d/pipe/BufferedRenderPipe$BufferedDrawHandler.class +INFO: Loading Class: sun/java2d/pipe/BufferedRenderPipe$AAParallelogramPipe.class +INFO: Loading Class: sun/java2d/pipe/BufferedRenderPipe.class +INFO: Loading Class: sun/java2d/pipe/BufferedPaints.class +INFO: Loading Class: sun/java2d/pipe/BufferedMaskFill.class +INFO: Loading Class: sun/java2d/pipe/BufferedMaskBlit.class +INFO: Loading Class: sun/java2d/pipe/BufferedContext.class +INFO: Loading Class: sun/java2d/pipe/AlphaPaintPipe.class +INFO: Loading Class: sun/java2d/pipe/AlphaColorPipe.class +INFO: Loading Class: sun/java2d/pipe/AATextRenderer.class +INFO: Loading Class: sun/java2d/pipe/AAShapePipe.class +INFO: Loading Class: sun/java2d/opengl/OGLTextureToSurfaceTransform.class +INFO: Loading Class: sun/java2d/opengl/OGLTextureToSurfaceScale.class +INFO: Loading Class: sun/java2d/opengl/OGLTextureToSurfaceBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLTextRenderer.class +INFO: Loading Class: sun/java2d/opengl/OGLSwToTextureBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLSwToSurfaceTransform.class +INFO: Loading Class: sun/java2d/opengl/OGLSwToSurfaceScale.class +INFO: Loading Class: sun/java2d/opengl/OGLSwToSurfaceBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceToSwBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceToSurfaceTransform.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceToSurfaceScale.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceToSurfaceBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceDataProxy.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceData$1.class +INFO: Loading Class: sun/java2d/opengl/OGLSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/OGLRenderer.class +INFO: Loading Class: sun/java2d/opengl/OGLRenderQueue$QueueFlusher.class +INFO: Loading Class: sun/java2d/opengl/OGLRenderQueue.class +INFO: Loading Class: sun/java2d/opengl/OGLRTTSurfaceToSurfaceTransform.class +INFO: Loading Class: sun/java2d/opengl/OGLRTTSurfaceToSurfaceScale.class +INFO: Loading Class: sun/java2d/opengl/OGLRTTSurfaceToSurfaceBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLMaskFill.class +INFO: Loading Class: sun/java2d/opengl/OGLMaskBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLGraphicsConfig.class +INFO: Loading Class: sun/java2d/opengl/OGLGeneralBlit.class +INFO: Loading Class: sun/java2d/opengl/OGLDrawImage.class +INFO: Loading Class: sun/java2d/opengl/OGLContext$OGLContextCaps.class +INFO: Loading Class: sun/java2d/opengl/OGLContext.class +INFO: Loading Class: sun/java2d/opengl/OGLBlitLoops.class +INFO: Loading Class: sun/java2d/opengl/OGLAnyCompositeBlit.class +INFO: Loading Class: sun/java2d/opengl/CGLVolatileSurfaceManager.class +INFO: Loading Class: sun/java2d/opengl/CGLSurfaceData$CGLOffScreenSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/CGLSurfaceData$CGLLayerSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/CGLSurfaceData.class +INFO: Loading Class: sun/java2d/opengl/CGLLayer.class +INFO: Loading Class: sun/java2d/opengl/CGLGraphicsConfig$CGLImageCaps.class +INFO: Loading Class: sun/java2d/opengl/CGLGraphicsConfig$CGLGCDisposerRecord.class +INFO: Loading Class: sun/java2d/opengl/CGLGraphicsConfig$1.class +INFO: Loading Class: sun/java2d/opengl/CGLGraphicsConfig.class +INFO: Loading Class: sun/java2d/loops/XORComposite.class +INFO: Loading Class: sun/java2d/loops/TransformHelper.class +INFO: Loading Class: sun/java2d/loops/TransformBlit.class +INFO: Loading Class: sun/java2d/loops/SurfaceType.class +INFO: Loading Class: sun/java2d/loops/ScaledBlit.class +INFO: Loading Class: sun/java2d/loops/RenderLoops.class +INFO: Loading Class: sun/java2d/loops/RenderCache$Entry.class +INFO: Loading Class: sun/java2d/loops/RenderCache.class +INFO: Loading Class: sun/java2d/loops/ProcessPath$DrawHandler.class +INFO: Loading Class: sun/java2d/loops/MaskFill.class +INFO: Loading Class: sun/java2d/loops/MaskBlit.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitiveProxy.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitiveMgr$2.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitiveMgr$1.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitiveMgr.class +INFO: Loading Class: sun/java2d/loops/GraphicsPrimitive.class +INFO: Loading Class: sun/java2d/loops/GeneralRenderer.class +INFO: Loading Class: sun/java2d/loops/FontInfo.class +INFO: Loading Class: sun/java2d/loops/FillSpans.class +INFO: Loading Class: sun/java2d/loops/FillRect.class +INFO: Loading Class: sun/java2d/loops/FillPath.class +INFO: Loading Class: sun/java2d/loops/FillParallelogram.class +INFO: Loading Class: sun/java2d/loops/DrawRect.class +INFO: Loading Class: sun/java2d/loops/DrawPolygons.class +INFO: Loading Class: sun/java2d/loops/DrawPath.class +INFO: Loading Class: sun/java2d/loops/DrawParallelogram.class +INFO: Loading Class: sun/java2d/loops/DrawLine.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphListLCD.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphListAA.class +INFO: Loading Class: sun/java2d/loops/DrawGlyphList.class +INFO: Loading Class: sun/java2d/loops/CustomComponent.class +INFO: Loading Class: sun/java2d/loops/CompositeType.class +INFO: Loading Class: sun/java2d/loops/BlitBg.class +INFO: Loading Class: sun/java2d/loops/Blit.class +INFO: Loading Class: sun/java2d/cmm/ProfileDeferralMgr.class +INFO: Loading Class: sun/java2d/cmm/ProfileDeferralInfo.class +INFO: Loading Class: sun/java2d/cmm/ProfileActivator.class +INFO: Loading Class: sun/java2d/cmm/CMSManager.class +INFO: Loading Class: sun/java2d/SurfaceManagerFactory.class +INFO: Loading Class: sun/java2d/SurfaceDataProxy$1.class +INFO: Loading Class: sun/java2d/SurfaceDataProxy.class +INFO: Loading Class: sun/java2d/SurfaceData$PixelToShapeLoopConverter.class +INFO: Loading Class: sun/java2d/SurfaceData$PixelToPgramLoopConverter.class +INFO: Loading Class: sun/java2d/SurfaceData.class +INFO: Loading Class: sun/java2d/Surface.class +INFO: Loading Class: sun/java2d/SunGraphicsEnvironment$1.class +INFO: Loading Class: sun/java2d/SunGraphicsEnvironment.class +INFO: Loading Class: sun/java2d/SunGraphics2D.class +INFO: Loading Class: sun/java2d/StateTracker$2.class +INFO: Loading Class: sun/java2d/StateTracker$1.class +INFO: Loading Class: sun/java2d/StateTracker.class +INFO: Loading Class: sun/java2d/StateTrackableDelegate$2.class +INFO: Loading Class: sun/java2d/StateTrackableDelegate$1.class +INFO: Loading Class: sun/java2d/StateTrackableDelegate.class +INFO: Loading Class: sun/java2d/StateTrackable$State.class +INFO: Loading Class: sun/java2d/StateTrackable.class +INFO: Loading Class: sun/java2d/NullSurfaceData.class +INFO: Loading Class: sun/java2d/MacosxSurfaceManagerFactory.class +INFO: Loading Class: sun/java2d/InvalidPipeException.class +INFO: Loading Class: sun/java2d/FontSupport.class +INFO: Loading Class: sun/java2d/DisposerTarget.class +INFO: Loading Class: sun/java2d/DisposerRecord.class +INFO: Loading Class: sun/java2d/Disposer$PollDisposable.class +INFO: Loading Class: sun/java2d/Disposer$1.class +INFO: Loading Class: sun/java2d/Disposer.class +INFO: Loading Class: sun/java2d/DestSurfaceProvider.class +INFO: Loading Class: sun/java2d/DefaultDisposerRecord.class +INFO: Loading Class: sun/font/Type1Font.class +INFO: Loading Class: sun/font/TrueTypeFont$TTDisposerRecord.class +INFO: Loading Class: sun/font/TrueTypeFont$DirectoryEntry.class +INFO: Loading Class: sun/font/TrueTypeFont$1.class +INFO: Loading Class: sun/font/TrueTypeFont.class +INFO: Loading Class: sun/font/SunFontManager$TTFilter.class +INFO: Loading Class: sun/font/SunFontManager$T1Filter.class +INFO: Loading Class: sun/font/SunFontManager$FontRegistrationInfo.class +INFO: Loading Class: sun/font/SunFontManager$3.class +INFO: Loading Class: sun/font/SunFontManager$2.class +INFO: Loading Class: sun/font/SunFontManager$11.class +INFO: Loading Class: sun/font/SunFontManager$1.class +INFO: Loading Class: sun/font/SunFontManager.class +INFO: Loading Class: sun/font/StrikeMetrics.class +INFO: Loading Class: sun/font/StrikeCache$SoftDisposerRef.class +INFO: Loading Class: sun/font/StrikeCache$DisposableStrike.class +INFO: Loading Class: sun/font/StrikeCache$1.class +INFO: Loading Class: sun/font/StrikeCache.class +INFO: Loading Class: sun/font/StandardGlyphVector$GlyphStrike.class +INFO: Loading Class: sun/font/StandardGlyphVector.class +INFO: Loading Class: sun/font/PhysicalStrike.class +INFO: Loading Class: sun/font/PhysicalFont.class +INFO: Loading Class: sun/font/GlyphList.class +INFO: Loading Class: sun/font/FontUtilities$1.class +INFO: Loading Class: sun/font/FontUtilities.class +INFO: Loading Class: sun/font/FontStrikeDisposer.class +INFO: Loading Class: sun/font/FontStrikeDesc.class +INFO: Loading Class: sun/font/FontStrike.class +INFO: Loading Class: sun/font/FontManagerNativeLibrary$1.class +INFO: Loading Class: sun/font/FontManagerNativeLibrary.class +INFO: Loading Class: sun/font/FontManagerForSGE.class +INFO: Loading Class: sun/font/FontManagerFactory$1.class +INFO: Loading Class: sun/font/FontManagerFactory.class +INFO: Loading Class: sun/font/FontManager.class +INFO: Loading Class: sun/font/FontLineMetrics.class +INFO: Loading Class: sun/font/FontFamily.class +INFO: Loading Class: sun/font/FontDesignMetrics$MetricsKey.class +INFO: Loading Class: sun/font/FontDesignMetrics$KeyReference.class +INFO: Loading Class: sun/font/FontDesignMetrics.class +INFO: Loading Class: sun/font/FontAccess.class +INFO: Loading Class: sun/font/Font2DHandle.class +INFO: Loading Class: sun/font/Font2D.class +INFO: Loading Class: sun/font/FileFont.class +INFO: Loading Class: sun/font/EAttribute.class +INFO: Loading Class: sun/font/CoreMetrics.class +INFO: Loading Class: sun/font/CompositeFontDescriptor.class +INFO: Loading Class: sun/font/CompositeFont.class +INFO: Loading Class: sun/font/CharToGlyphMapper.class +INFO: Loading Class: sun/font/CStrikeDisposer.class +INFO: Loading Class: sun/font/CStrike$GlyphInfoCache.class +INFO: Loading Class: sun/font/CStrike$GlyphAdvanceCache.class +INFO: Loading Class: sun/font/CStrike.class +INFO: Loading Class: sun/font/CFontManager.class +INFO: Loading Class: sun/font/CFontConfiguration.class +INFO: Loading Class: sun/font/CFont.class +INFO: Loading Class: sun/font/CCharToGlyphMapper$Cache.class +INFO: Loading Class: sun/font/CCharToGlyphMapper.class +INFO: Loading Class: sun/font/AttributeValues.class +INFO: Loading Class: sun/dc/DuctusRenderingEngine.class +INFO: Loading Class: sun/awt/util/IdentityLinkedList$ListItr.class +INFO: Loading Class: sun/awt/util/IdentityLinkedList$Entry.class +INFO: Loading Class: sun/awt/util/IdentityLinkedList.class +INFO: Loading Class: sun/awt/util/IdentityArrayList.class +INFO: Loading Class: sun/awt/resources/awtosx.class +INFO: Loading Class: sun/awt/resources/awt.class +INFO: Loading Class: sun/awt/image/VolatileSurfaceManager.class +INFO: Loading Class: sun/awt/image/URLImageSource.class +INFO: Loading Class: sun/awt/image/ToolkitImage.class +INFO: Loading Class: sun/awt/image/SurfaceManager$ProxiedGraphicsConfig.class +INFO: Loading Class: sun/awt/image/SurfaceManager$ImageAccessor.class +INFO: Loading Class: sun/awt/image/SurfaceManager$FlushableCacheData.class +INFO: Loading Class: sun/awt/image/SurfaceManager.class +INFO: Loading Class: sun/awt/image/SunWritableRaster$DataStealer.class +INFO: Loading Class: sun/awt/image/SunWritableRaster.class +INFO: Loading Class: sun/awt/image/SunVolatileImage.class +INFO: Loading Class: sun/awt/image/PixelConverter$Xrgb.class +INFO: Loading Class: sun/awt/image/PixelConverter$Xbgr.class +INFO: Loading Class: sun/awt/image/PixelConverter$UshortGray.class +INFO: Loading Class: sun/awt/image/PixelConverter$Ushort565Rgb.class +INFO: Loading Class: sun/awt/image/PixelConverter$Ushort555Rgbx.class +INFO: Loading Class: sun/awt/image/PixelConverter$Ushort555Rgb.class +INFO: Loading Class: sun/awt/image/PixelConverter$Ushort4444Argb.class +INFO: Loading Class: sun/awt/image/PixelConverter$Rgbx.class +INFO: Loading Class: sun/awt/image/PixelConverter$RgbaPre.class +INFO: Loading Class: sun/awt/image/PixelConverter$Rgba.class +INFO: Loading Class: sun/awt/image/PixelConverter$ByteGray.class +INFO: Loading Class: sun/awt/image/PixelConverter$Bgrx.class +INFO: Loading Class: sun/awt/image/PixelConverter$ArgbPre.class +INFO: Loading Class: sun/awt/image/PixelConverter$ArgbBm.class +INFO: Loading Class: sun/awt/image/PixelConverter$Argb.class +INFO: Loading Class: sun/awt/image/PixelConverter.class +INFO: Loading Class: sun/awt/image/PNGImageDecoder.class +INFO: Loading Class: sun/awt/image/PNGFilterInputStream.class +INFO: Loading Class: sun/awt/image/OffScreenImageSource.class +INFO: Loading Class: sun/awt/image/OffScreenImage.class +INFO: Loading Class: sun/awt/image/NativeLibLoader$1.class +INFO: Loading Class: sun/awt/image/NativeLibLoader.class +INFO: Loading Class: sun/awt/image/IntegerInterleavedRaster.class +INFO: Loading Class: sun/awt/image/IntegerComponentRaster.class +INFO: Loading Class: sun/awt/image/InputStreamImageSource.class +INFO: Loading Class: sun/awt/image/ImageWatched$WeakLink.class +INFO: Loading Class: sun/awt/image/ImageWatched$Link.class +INFO: Loading Class: sun/awt/image/ImageWatched.class +INFO: Loading Class: sun/awt/image/ImageRepresentation.class +INFO: Loading Class: sun/awt/image/ImageFetcher$1.class +INFO: Loading Class: sun/awt/image/ImageFetcher.class +INFO: Loading Class: sun/awt/image/ImageFetchable.class +INFO: Loading Class: sun/awt/image/ImageDecoder.class +INFO: Loading Class: sun/awt/image/ImageConsumerQueue.class +INFO: Loading Class: sun/awt/image/GifImageDecoder.class +INFO: Loading Class: sun/awt/image/GifFrame.class +INFO: Loading Class: sun/awt/image/FetcherInfo.class +INFO: Loading Class: sun/awt/image/BytePackedRaster.class +INFO: Loading Class: sun/awt/image/ByteInterleavedRaster.class +INFO: Loading Class: sun/awt/image/ByteComponentRaster.class +INFO: Loading Class: sun/awt/image/BufferedImageGraphicsConfig.class +INFO: Loading Class: sun/awt/image/BufImgSurfaceManager.class +INFO: Loading Class: sun/awt/image/BufImgSurfaceData$ICMColorData.class +INFO: Loading Class: sun/awt/image/BufImgSurfaceData.class +INFO: Loading Class: sun/awt/im/InputMethodWindow.class +INFO: Loading Class: sun/awt/im/InputMethodManager.class +INFO: Loading Class: sun/awt/im/InputMethodLocator.class +INFO: Loading Class: sun/awt/im/InputMethodContext.class +INFO: Loading Class: sun/awt/im/InputMethodAdapter.class +INFO: Loading Class: sun/awt/im/InputContext.class +INFO: Loading Class: sun/awt/im/ExecutableInputMethodManager$3.class +INFO: Loading Class: sun/awt/im/ExecutableInputMethodManager.class +INFO: Loading Class: sun/awt/im/CompositionAreaHandler.class +INFO: Loading Class: sun/awt/event/IgnorePaintEvent.class +INFO: Loading Class: sun/awt/dnd/SunDropTargetEvent.class +INFO: Loading Class: sun/awt/dnd/SunDragSourceContextPeer.class +INFO: Loading Class: sun/awt/datatransfer/TransferableProxy.class +INFO: Loading Class: sun/awt/datatransfer/ToolkitThreadBlockedHandler.class +INFO: Loading Class: sun/awt/datatransfer/SunClipboard.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$StandardEncodingsHolder.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$RMI.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$IndexedComparator.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$IndexOrderComparator.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$CharsetComparator.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer$1.class +INFO: Loading Class: sun/awt/datatransfer/DataTransferer.class +INFO: Loading Class: sun/awt/WindowClosingSupport.class +INFO: Loading Class: sun/awt/WindowClosingListener.class +INFO: Loading Class: sun/awt/TimedWindowEvent.class +INFO: Loading Class: sun/awt/SunToolkit$ModalityListenerList.class +INFO: Loading Class: sun/awt/SunToolkit$1.class +INFO: Loading Class: sun/awt/SunToolkit.class +INFO: Loading Class: sun/awt/SunHints$Value.class +INFO: Loading Class: sun/awt/SunHints$LCDContrastKey.class +INFO: Loading Class: sun/awt/SunHints$Key.class +INFO: Loading Class: sun/awt/SunHints.class +INFO: Loading Class: sun/awt/SunGraphicsCallback.class +INFO: Loading Class: sun/awt/SunDisplayChanger.class +INFO: Loading Class: sun/awt/RequestFocusController.class +INFO: Loading Class: sun/awt/RepaintArea.class +INFO: Loading Class: sun/awt/PostEventQueue.class +INFO: Loading Class: sun/awt/PeerEvent.class +INFO: Loading Class: sun/awt/PaintEventDispatcher.class +INFO: Loading Class: sun/awt/OSInfo$WindowsVersion.class +INFO: Loading Class: sun/awt/OSInfo$OSType.class +INFO: Loading Class: sun/awt/OSInfo$1.class +INFO: Loading Class: sun/awt/OSInfo.class +INFO: Loading Class: sun/awt/NullComponentPeer.class +INFO: Loading Class: sun/awt/Mutex.class +INFO: Loading Class: sun/awt/MostRecentKeyValue.class +INFO: Loading Class: sun/awt/ModalityListener.class +INFO: Loading Class: sun/awt/ModalityEvent.class +INFO: Loading Class: sun/awt/ModalExclude.class +INFO: Loading Class: sun/awt/LightweightFrame.class +INFO: Loading Class: sun/awt/KeyboardFocusManagerPeerProvider.class +INFO: Loading Class: sun/awt/KeyboardFocusManagerPeerImpl.class +INFO: Loading Class: sun/awt/InputMethodSupport.class +INFO: Loading Class: sun/awt/HeadlessToolkit.class +INFO: Loading Class: sun/awt/FullScreenCapable.class +INFO: Loading Class: sun/awt/FontDescriptor.class +INFO: Loading Class: sun/awt/FontConfiguration.class +INFO: Loading Class: sun/awt/EventQueueItem.class +INFO: Loading Class: sun/awt/EventQueueDelegate.class +INFO: Loading Class: sun/awt/EmbeddedFrame.class +INFO: Loading Class: sun/awt/DisplayChangedListener.class +INFO: Loading Class: sun/awt/ConstrainableGraphics.class +INFO: Loading Class: sun/awt/ComponentFactory.class +INFO: Loading Class: sun/awt/CausedFocusEvent$Cause.class +INFO: Loading Class: sun/awt/CausedFocusEvent.class +INFO: Loading Class: sun/awt/CGraphicsEnvironment$2.class +INFO: Loading Class: sun/awt/CGraphicsEnvironment$1.class +INFO: Loading Class: sun/awt/CGraphicsEnvironment.class +INFO: Loading Class: sun/awt/CGraphicsDevice.class +INFO: Loading Class: sun/awt/CGraphicsConfig.class +INFO: Loading Class: sun/awt/AppContext$State.class +INFO: Loading Class: sun/awt/AppContext$6.class +INFO: Loading Class: sun/awt/AppContext$3.class +INFO: Loading Class: sun/awt/AppContext$2.class +INFO: Loading Class: sun/awt/AppContext$1.class +INFO: Loading Class: sun/awt/AppContext.class +INFO: Loading Class: sun/awt/AWTAutoShutdown.class +INFO: Loading Class: sun/awt/AWTAccessor$WindowAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$ToolkitAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$KeyboardFocusManagerAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$KeyEventAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$InputEventAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$FrameAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$EventQueueAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$CursorAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$ContainerAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$ComponentAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$ClientPropertyKeyAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor$AWTEventAccessor.class +INFO: Loading Class: sun/awt/AWTAccessor.class +INFO: Loading Class: javax/swing/undo/UndoableEdit.class +INFO: Loading Class: javax/swing/undo/CompoundEdit.class +INFO: Loading Class: javax/swing/undo/AbstractUndoableEdit.class +INFO: Loading Class: javax/swing/tree/TreeNode.class +INFO: Loading Class: javax/swing/text/ViewFactory.class +INFO: Loading Class: javax/swing/text/View.class +INFO: Loading Class: javax/swing/text/Utilities.class +INFO: Loading Class: javax/swing/text/TextAction.class +INFO: Loading Class: javax/swing/text/TabExpander.class +INFO: Loading Class: javax/swing/text/StyleContext$SmallAttributeSet.class +INFO: Loading Class: javax/swing/text/StyleContext$NamedStyle.class +INFO: Loading Class: javax/swing/text/StyleContext$KeyEnumeration.class +INFO: Loading Class: javax/swing/text/StyleContext$FontKey.class +INFO: Loading Class: javax/swing/text/StyleContext.class +INFO: Loading Class: javax/swing/text/StyleConstants$ParagraphConstants.class +INFO: Loading Class: javax/swing/text/StyleConstants$FontConstants.class +INFO: Loading Class: javax/swing/text/StyleConstants$ColorConstants.class +INFO: Loading Class: javax/swing/text/StyleConstants$CharacterConstants.class +INFO: Loading Class: javax/swing/text/StyleConstants.class +INFO: Loading Class: javax/swing/text/Style.class +INFO: Loading Class: javax/swing/text/SimpleAttributeSet$EmptyAttributeSet.class +INFO: Loading Class: javax/swing/text/SimpleAttributeSet.class +INFO: Loading Class: javax/swing/text/SegmentCache$CachedSegment.class +INFO: Loading Class: javax/swing/text/SegmentCache.class +INFO: Loading Class: javax/swing/text/Segment.class +INFO: Loading Class: javax/swing/text/Position$Bias.class +INFO: Loading Class: javax/swing/text/Position.class +INFO: Loading Class: javax/swing/text/PlainView.class +INFO: Loading Class: javax/swing/text/PlainDocument.class +INFO: Loading Class: javax/swing/text/MutableAttributeSet.class +INFO: Loading Class: javax/swing/text/LayeredHighlighter$LayerPainter.class +INFO: Loading Class: javax/swing/text/LayeredHighlighter.class +INFO: Loading Class: javax/swing/text/Keymap.class +INFO: Loading Class: javax/swing/text/JTextComponent$MutableCaretEvent.class +INFO: Loading Class: javax/swing/text/JTextComponent$KeymapWrapper.class +INFO: Loading Class: javax/swing/text/JTextComponent$KeymapActionMap.class +INFO: Loading Class: javax/swing/text/JTextComponent$DefaultKeymap.class +INFO: Loading Class: javax/swing/text/JTextComponent$1.class +INFO: Loading Class: javax/swing/text/JTextComponent.class +INFO: Loading Class: javax/swing/text/Highlighter$HighlightPainter.class +INFO: Loading Class: javax/swing/text/Highlighter$Highlight.class +INFO: Loading Class: javax/swing/text/Highlighter.class +INFO: Loading Class: javax/swing/text/GapVector.class +INFO: Loading Class: javax/swing/text/GapContent$StickyPosition.class +INFO: Loading Class: javax/swing/text/GapContent$MarkVector.class +INFO: Loading Class: javax/swing/text/GapContent$MarkData.class +INFO: Loading Class: javax/swing/text/GapContent$InsertUndo.class +INFO: Loading Class: javax/swing/text/GapContent.class +INFO: Loading Class: javax/swing/text/FieldView.class +INFO: Loading Class: javax/swing/text/Element.class +INFO: Loading Class: javax/swing/text/EditorKit.class +INFO: Loading Class: javax/swing/text/Document.class +INFO: Loading Class: javax/swing/text/DefaultHighlighter$SafeDamager.class +INFO: Loading Class: javax/swing/text/DefaultHighlighter$LayeredHighlightInfo.class +INFO: Loading Class: javax/swing/text/DefaultHighlighter$HighlightInfo.class +INFO: Loading Class: javax/swing/text/DefaultHighlighter$DefaultHighlightPainter.class +INFO: Loading Class: javax/swing/text/DefaultHighlighter.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$WritableAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$VerticalPageAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$UnselectAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$SelectWordAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$SelectParagraphAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$SelectLineAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$SelectAllAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$ReadOnlyAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$PreviousWordAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$PasteAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$PageAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$NextWordAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$NextVisualPositionAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$InsertTabAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$InsertContentAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$InsertBreakAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$EndWordAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$EndParagraphAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$EndLineAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$EndAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$DumpModelAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$DeleteWordAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$DeletePrevCharAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$DeleteNextCharAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$CutAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$CopyAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$BeginWordAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$BeginParagraphAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$BeginLineAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$BeginAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit$BeepAction.class +INFO: Loading Class: javax/swing/text/DefaultEditorKit.class +INFO: Loading Class: javax/swing/text/DefaultCaret$Handler.class +INFO: Loading Class: javax/swing/text/DefaultCaret$1.class +INFO: Loading Class: javax/swing/text/DefaultCaret.class +INFO: Loading Class: javax/swing/text/Caret.class +INFO: Loading Class: javax/swing/text/AttributeSet$ParagraphAttribute.class +INFO: Loading Class: javax/swing/text/AttributeSet$FontAttribute.class +INFO: Loading Class: javax/swing/text/AttributeSet$ColorAttribute.class +INFO: Loading Class: javax/swing/text/AttributeSet$CharacterAttribute.class +INFO: Loading Class: javax/swing/text/AttributeSet.class +INFO: Loading Class: javax/swing/text/AbstractDocument$LeafElement.class +INFO: Loading Class: javax/swing/text/AbstractDocument$ElementEdit.class +INFO: Loading Class: javax/swing/text/AbstractDocument$DefaultDocumentEvent.class +INFO: Loading Class: javax/swing/text/AbstractDocument$Content.class +INFO: Loading Class: javax/swing/text/AbstractDocument$BranchElement.class +INFO: Loading Class: javax/swing/text/AbstractDocument$BidiRootElement.class +INFO: Loading Class: javax/swing/text/AbstractDocument$BidiElement.class +INFO: Loading Class: javax/swing/text/AbstractDocument$AttributeContext.class +INFO: Loading Class: javax/swing/text/AbstractDocument$AbstractElement.class +INFO: Loading Class: javax/swing/text/AbstractDocument$1.class +INFO: Loading Class: javax/swing/text/AbstractDocument.class +INFO: Loading Class: javax/swing/plaf/synth/SynthUI.class +INFO: Loading Class: javax/swing/plaf/synth/SynthConstants.class +INFO: Loading Class: javax/swing/plaf/metal/MetalTheme.class +INFO: Loading Class: javax/swing/plaf/metal/MetalLookAndFeel.class +INFO: Loading Class: javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1.class +INFO: Loading Class: javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate.class +INFO: Loading Class: javax/swing/plaf/metal/DefaultMetalTheme.class +INFO: Loading Class: javax/swing/plaf/basic/LazyActionMap.class +INFO: Loading Class: javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag.class +INFO: Loading Class: javax/swing/plaf/basic/DefaultMenuLayout.class +INFO: Loading Class: javax/swing/plaf/basic/ComboPopup.class +INFO: Loading Class: javax/swing/plaf/basic/BasicViewportUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTransferable.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicToolBarSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$UpdateHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$TextTransferHandler$TextTransferable.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$TextTransferHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$TextActionWrapper.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$RootView.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$FocusAction.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$DragListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI$BasicCursor.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextFieldUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicTextAreaUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicSeparatorUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$MouseWheelHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicScrollPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap.class +INFO: Loading Class: javax/swing/plaf/basic/BasicRootPaneUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPopupMenuUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicPanelUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuUI$ChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuItemUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuItemUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuBarUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicMenuBarUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLookAndFeel$2.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLookAndFeel$1.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLookAndFeel.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$PropertyChangeHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$MouseInputHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$ListTransferHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicListUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicLabelUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory$MenuItemArrowIcon.class +INFO: Loading Class: javax/swing/plaf/basic/BasicIconFactory.class +INFO: Loading Class: javax/swing/plaf/basic/BasicHTML.class +INFO: Loading Class: javax/swing/plaf/basic/BasicGraphicsUtils.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboPopup.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$Handler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$FocusHandler.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxEditor$UIResource.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField.class +INFO: Loading Class: javax/swing/plaf/basic/BasicComboBoxEditor.class +INFO: Loading Class: javax/swing/plaf/basic/BasicButtonUI.class +INFO: Loading Class: javax/swing/plaf/basic/BasicButtonListener.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$RadioButtonBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$MarginBorder.class +INFO: Loading Class: javax/swing/plaf/basic/BasicBorders$ButtonBorder.class +INFO: Loading Class: javax/swing/plaf/ViewportUI.class +INFO: Loading Class: javax/swing/plaf/UIResource.class +INFO: Loading Class: javax/swing/plaf/ToolBarUI.class +INFO: Loading Class: javax/swing/plaf/TextUI.class +INFO: Loading Class: javax/swing/plaf/SeparatorUI.class +INFO: Loading Class: javax/swing/plaf/ScrollPaneUI.class +INFO: Loading Class: javax/swing/plaf/ScrollBarUI.class +INFO: Loading Class: javax/swing/plaf/RootPaneUI.class +INFO: Loading Class: javax/swing/plaf/PopupMenuUI.class +INFO: Loading Class: javax/swing/plaf/PanelUI.class +INFO: Loading Class: javax/swing/plaf/MenuItemUI.class +INFO: Loading Class: javax/swing/plaf/MenuBarUI.class +INFO: Loading Class: javax/swing/plaf/ListUI.class +INFO: Loading Class: javax/swing/plaf/LabelUI.class +INFO: Loading Class: javax/swing/plaf/InsetsUIResource.class +INFO: Loading Class: javax/swing/plaf/InputMapUIResource.class +INFO: Loading Class: javax/swing/plaf/IconUIResource.class +INFO: Loading Class: javax/swing/plaf/FontUIResource.class +INFO: Loading Class: javax/swing/plaf/DimensionUIResource.class +INFO: Loading Class: javax/swing/plaf/ComponentUI.class +INFO: Loading Class: javax/swing/plaf/ComponentInputMapUIResource.class +INFO: Loading Class: javax/swing/plaf/ComboBoxUI.class +INFO: Loading Class: javax/swing/plaf/ColorUIResource.class +INFO: Loading Class: javax/swing/plaf/ButtonUI.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$LineBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource$EmptyBorderUIResource.class +INFO: Loading Class: javax/swing/plaf/BorderUIResource.class +INFO: Loading Class: javax/swing/plaf/ActionMapUIResource.class +INFO: Loading Class: javax/swing/event/UndoableEditListener.class +INFO: Loading Class: javax/swing/event/UndoableEditEvent.class +INFO: Loading Class: javax/swing/event/PopupMenuListener.class +INFO: Loading Class: javax/swing/event/MouseInputListener.class +INFO: Loading Class: javax/swing/event/MouseInputAdapter.class +INFO: Loading Class: javax/swing/event/MenuListener.class +INFO: Loading Class: javax/swing/event/MenuKeyListener.class +INFO: Loading Class: javax/swing/event/MenuEvent.class +INFO: Loading Class: javax/swing/event/MenuDragMouseListener.class +INFO: Loading Class: javax/swing/event/ListSelectionListener.class +INFO: Loading Class: javax/swing/event/ListDataListener.class +INFO: Loading Class: javax/swing/event/EventListenerList.class +INFO: Loading Class: javax/swing/event/DocumentListener.class +INFO: Loading Class: javax/swing/event/DocumentEvent$EventType.class +INFO: Loading Class: javax/swing/event/DocumentEvent$ElementChange.class +INFO: Loading Class: javax/swing/event/DocumentEvent.class +INFO: Loading Class: javax/swing/event/ChangeListener.class +INFO: Loading Class: javax/swing/event/ChangeEvent.class +INFO: Loading Class: javax/swing/event/CaretListener.class +INFO: Loading Class: javax/swing/event/CaretEvent.class +INFO: Loading Class: javax/swing/event/AncestorListener.class +INFO: Loading Class: javax/swing/event/AncestorEvent.class +INFO: Loading Class: javax/swing/border/MatteBorder.class +INFO: Loading Class: javax/swing/border/LineBorder.class +INFO: Loading Class: javax/swing/border/EtchedBorder.class +INFO: Loading Class: javax/swing/border/EmptyBorder.class +INFO: Loading Class: javax/swing/border/CompoundBorder.class +INFO: Loading Class: javax/swing/border/Border.class +INFO: Loading Class: javax/swing/border/BevelBorder.class +INFO: Loading Class: javax/swing/border/AbstractBorder.class +INFO: Loading Class: javax/swing/WindowConstants.class +INFO: Loading Class: javax/swing/ViewportLayout.class +INFO: Loading Class: javax/swing/UIManager$LookAndFeelInfo.class +INFO: Loading Class: javax/swing/UIManager$LAFState.class +INFO: Loading Class: javax/swing/UIManager$2.class +INFO: Loading Class: javax/swing/UIManager$1.class +INFO: Loading Class: javax/swing/UIManager.class +INFO: Loading Class: javax/swing/UIDefaults$TextAndMnemonicHashMap.class +INFO: Loading Class: javax/swing/UIDefaults$LazyValue.class +INFO: Loading Class: javax/swing/UIDefaults$LazyInputMap.class +INFO: Loading Class: javax/swing/UIDefaults$ActiveValue.class +INFO: Loading Class: javax/swing/UIDefaults.class +INFO: Loading Class: javax/swing/TransferHandler$TransferSupport.class +INFO: Loading Class: javax/swing/TransferHandler$TransferAction$2.class +INFO: Loading Class: javax/swing/TransferHandler$TransferAction$1.class +INFO: Loading Class: javax/swing/TransferHandler$TransferAction.class +INFO: Loading Class: javax/swing/TransferHandler$SwingDropTarget.class +INFO: Loading Class: javax/swing/TransferHandler$HasGetTransferHandler.class +INFO: Loading Class: javax/swing/TransferHandler$DropHandler.class +INFO: Loading Class: javax/swing/TransferHandler.class +INFO: Loading Class: javax/swing/ToolTipManager$stillInsideTimerAction.class +INFO: Loading Class: javax/swing/ToolTipManager$outsideTimerAction.class +INFO: Loading Class: javax/swing/ToolTipManager$insideTimerAction.class +INFO: Loading Class: javax/swing/ToolTipManager$MoveBeforeEnterListener.class +INFO: Loading Class: javax/swing/ToolTipManager$AccessibilityKeyListener.class +INFO: Loading Class: javax/swing/ToolTipManager.class +INFO: Loading Class: javax/swing/TimerQueue$DelayedTimer.class +INFO: Loading Class: javax/swing/TimerQueue$1.class +INFO: Loading Class: javax/swing/TimerQueue.class +INFO: Loading Class: javax/swing/Timer$DoPostEvent.class +INFO: Loading Class: javax/swing/Timer.class +INFO: Loading Class: javax/swing/SwingUtilities$SharedOwnerFrame.class +INFO: Loading Class: javax/swing/SwingUtilities.class +INFO: Loading Class: javax/swing/SwingPaintEventDispatcher.class +INFO: Loading Class: javax/swing/SwingHeavyWeight.class +INFO: Loading Class: javax/swing/SwingDefaultFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/SwingContainerOrderFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/SwingConstants.class +INFO: Loading Class: javax/swing/SortingFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/SizeRequirements.class +INFO: Loading Class: javax/swing/SingleSelectionModel.class +INFO: Loading Class: javax/swing/Scrollable.class +INFO: Loading Class: javax/swing/ScrollPaneLayout$UIResource.class +INFO: Loading Class: javax/swing/ScrollPaneLayout.class +INFO: Loading Class: javax/swing/ScrollPaneConstants.class +INFO: Loading Class: javax/swing/RootPaneContainer.class +INFO: Loading Class: javax/swing/RepaintManager$ProcessingRunnable.class +INFO: Loading Class: javax/swing/RepaintManager$PaintManager.class +INFO: Loading Class: javax/swing/RepaintManager$DisplayChangedHandler.class +INFO: Loading Class: javax/swing/RepaintManager$3.class +INFO: Loading Class: javax/swing/RepaintManager$2.class +INFO: Loading Class: javax/swing/RepaintManager.class +INFO: Loading Class: javax/swing/PopupFactory.class +INFO: Loading Class: javax/swing/MutableComboBoxModel.class +INFO: Loading Class: javax/swing/MultiUIDefaults.class +INFO: Loading Class: javax/swing/MenuSelectionManager.class +INFO: Loading Class: javax/swing/MenuElement.class +INFO: Loading Class: javax/swing/LookAndFeel.class +INFO: Loading Class: javax/swing/ListSelectionModel.class +INFO: Loading Class: javax/swing/ListModel.class +INFO: Loading Class: javax/swing/ListCellRenderer.class +INFO: Loading Class: javax/swing/LayoutFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/LayoutComparator.class +INFO: Loading Class: javax/swing/KeyboardManager$ComponentKeyStrokePair.class +INFO: Loading Class: javax/swing/KeyboardManager.class +INFO: Loading Class: javax/swing/KeyStroke.class +INFO: Loading Class: javax/swing/JWindow.class +INFO: Loading Class: javax/swing/JViewport$ViewListener.class +INFO: Loading Class: javax/swing/JViewport.class +INFO: Loading Class: javax/swing/JToolBar$Separator.class +INFO: Loading Class: javax/swing/JToolBar$DefaultToolBarLayout.class +INFO: Loading Class: javax/swing/JToolBar.class +INFO: Loading Class: javax/swing/JToggleButton$ToggleButtonModel.class +INFO: Loading Class: javax/swing/JToggleButton.class +INFO: Loading Class: javax/swing/JTextField$ScrollRepainter.class +INFO: Loading Class: javax/swing/JTextField$NotifyAction.class +INFO: Loading Class: javax/swing/JTextField.class +INFO: Loading Class: javax/swing/JTextArea.class +INFO: Loading Class: javax/swing/JSplitPane.class +INFO: Loading Class: javax/swing/JSeparator.class +INFO: Loading Class: javax/swing/JScrollPane$ScrollBar.class +INFO: Loading Class: javax/swing/JScrollPane.class +INFO: Loading Class: javax/swing/JScrollBar$ModelListener.class +INFO: Loading Class: javax/swing/JScrollBar.class +INFO: Loading Class: javax/swing/JRootPane$RootLayout.class +INFO: Loading Class: javax/swing/JRootPane$1.class +INFO: Loading Class: javax/swing/JRootPane.class +INFO: Loading Class: javax/swing/JRadioButtonMenuItem.class +INFO: Loading Class: javax/swing/JRadioButton.class +INFO: Loading Class: javax/swing/JPopupMenu$Separator.class +INFO: Loading Class: javax/swing/JPopupMenu.class +INFO: Loading Class: javax/swing/JPasswordField.class +INFO: Loading Class: javax/swing/JPanel.class +INFO: Loading Class: javax/swing/JMenuItem$MenuItemFocusListener.class +INFO: Loading Class: javax/swing/JMenuItem.class +INFO: Loading Class: javax/swing/JMenuBar.class +INFO: Loading Class: javax/swing/JMenu$WinListener.class +INFO: Loading Class: javax/swing/JMenu$MenuChangeListener.class +INFO: Loading Class: javax/swing/JMenu.class +INFO: Loading Class: javax/swing/JList.class +INFO: Loading Class: javax/swing/JLayeredPane.class +INFO: Loading Class: javax/swing/JLayer.class +INFO: Loading Class: javax/swing/JLabel.class +INFO: Loading Class: javax/swing/JInternalFrame.class +INFO: Loading Class: javax/swing/JFrame.class +INFO: Loading Class: javax/swing/JEditorPane.class +INFO: Loading Class: javax/swing/JDialog.class +INFO: Loading Class: javax/swing/JComponent$1.class +INFO: Loading Class: javax/swing/JComponent.class +INFO: Loading Class: javax/swing/JComboBox$KeySelectionManager.class +INFO: Loading Class: javax/swing/JComboBox$1.class +INFO: Loading Class: javax/swing/JComboBox.class +INFO: Loading Class: javax/swing/JCheckBoxMenuItem.class +INFO: Loading Class: javax/swing/JCheckBox.class +INFO: Loading Class: javax/swing/JButton.class +INFO: Loading Class: javax/swing/InternalFrameFocusTraversalPolicy.class +INFO: Loading Class: javax/swing/InputMap.class +INFO: Loading Class: javax/swing/ImageIcon$3.class +INFO: Loading Class: javax/swing/ImageIcon$2$1.class +INFO: Loading Class: javax/swing/ImageIcon$2.class +INFO: Loading Class: javax/swing/ImageIcon$1.class +INFO: Loading Class: javax/swing/ImageIcon.class +INFO: Loading Class: javax/swing/Icon.class +INFO: Loading Class: javax/swing/GrayFilter.class +INFO: Loading Class: javax/swing/FocusManager.class +INFO: Loading Class: javax/swing/DropMode.class +INFO: Loading Class: javax/swing/DefaultSingleSelectionModel.class +INFO: Loading Class: javax/swing/DefaultListSelectionModel.class +INFO: Loading Class: javax/swing/DefaultListCellRenderer$UIResource.class +INFO: Loading Class: javax/swing/DefaultListCellRenderer.class +INFO: Loading Class: javax/swing/DefaultComboBoxModel.class +INFO: Loading Class: javax/swing/DefaultButtonModel.class +INFO: Loading Class: javax/swing/DefaultBoundedRangeModel.class +INFO: Loading Class: javax/swing/ComponentInputMap.class +INFO: Loading Class: javax/swing/ComboBoxModel.class +INFO: Loading Class: javax/swing/ComboBoxEditor.class +INFO: Loading Class: javax/swing/ClientPropertyKey$1.class +INFO: Loading Class: javax/swing/ClientPropertyKey.class +INFO: Loading Class: javax/swing/CellRendererPane.class +INFO: Loading Class: javax/swing/ButtonModel.class +INFO: Loading Class: javax/swing/ButtonGroup.class +INFO: Loading Class: javax/swing/BoxLayout.class +INFO: Loading Class: javax/swing/Box$Filler.class +INFO: Loading Class: javax/swing/Box.class +INFO: Loading Class: javax/swing/BoundedRangeModel.class +INFO: Loading Class: javax/swing/BorderFactory.class +INFO: Loading Class: javax/swing/Autoscroller.class +INFO: Loading Class: javax/swing/ArrayTable.class +INFO: Loading Class: javax/swing/AncestorNotifier.class +INFO: Loading Class: javax/swing/ActionMap.class +INFO: Loading Class: javax/swing/Action.class +INFO: Loading Class: javax/swing/AbstractListModel.class +INFO: Loading Class: javax/swing/AbstractButton$Handler.class +INFO: Loading Class: javax/swing/AbstractButton.class +INFO: Loading Class: javax/swing/AbstractAction.class +INFO: Loading Class: javax/accessibility/AccessibleContext.class +INFO: Loading Class: javax/accessibility/Accessible.class +INFO: Loading Class: java/util/zip/ZipUtils.class +INFO: Loading Class: java/util/zip/ZipFile$ZipFileInputStream.class +INFO: Loading Class: java/util/zip/ZipFile$ZipFileInflaterInputStream.class +INFO: Loading Class: java/util/zip/ZipFile$ZipEntryIterator.class +INFO: Loading Class: java/util/zip/ZipFile$1.class +INFO: Loading Class: java/util/zip/ZipFile.class +INFO: Loading Class: java/util/zip/ZipException.class +INFO: Loading Class: java/util/zip/ZipEntry.class +INFO: Loading Class: java/util/zip/ZipConstants.class +INFO: Loading Class: java/util/zip/ZipCoder.class +INFO: Loading Class: java/util/zip/ZStreamRef.class +INFO: Loading Class: java/util/zip/InflaterInputStream.class +INFO: Loading Class: java/util/zip/Inflater.class +INFO: Loading Class: java/util/zip/Checksum.class +INFO: Loading Class: java/util/zip/CRC32.class +INFO: Loading Class: java/util/spi/TimeZoneNameProvider.class +INFO: Loading Class: java/util/spi/ResourceBundleControlProvider.class +INFO: Loading Class: java/util/spi/LocaleServiceProvider.class +INFO: Loading Class: java/util/spi/LocaleNameProvider.class +INFO: Loading Class: java/util/spi/CurrencyNameProvider.class +INFO: Loading Class: java/util/spi/CalendarDataProvider.class +INFO: Loading Class: java/util/logging/LoggingProxyImpl.class +INFO: Loading Class: java/util/logging/LoggingPermission.class +INFO: Loading Class: java/util/logging/Logger$1.class +INFO: Loading Class: java/util/logging/Logger.class +INFO: Loading Class: java/util/logging/LogManager$SystemLoggerContext.class +INFO: Loading Class: java/util/logging/LogManager$RootLogger.class +INFO: Loading Class: java/util/logging/LogManager$LoggerWeakRef.class +INFO: Loading Class: java/util/logging/LogManager$LoggerContext$1.class +INFO: Loading Class: java/util/logging/LogManager$LoggerContext.class +INFO: Loading Class: java/util/logging/LogManager$LogNode.class +INFO: Loading Class: java/util/logging/LogManager$Cleaner.class +INFO: Loading Class: java/util/logging/LogManager$5.class +INFO: Loading Class: java/util/logging/LogManager$3.class +INFO: Loading Class: java/util/logging/LogManager$2.class +INFO: Loading Class: java/util/logging/LogManager$1.class +INFO: Loading Class: java/util/logging/LogManager.class +INFO: Loading Class: java/util/logging/Level$KnownLevel.class +INFO: Loading Class: java/util/logging/Level.class +INFO: Loading Class: java/util/logging/Handler.class +INFO: Loading Class: java/util/jar/Manifest$FastInputStream.class +INFO: Loading Class: java/util/jar/Manifest.class +INFO: Loading Class: java/util/jar/JavaUtilJarAccessImpl.class +INFO: Loading Class: java/util/jar/JarVerifier$3.class +INFO: Loading Class: java/util/jar/JarVerifier.class +INFO: Loading Class: java/util/jar/JarFile$JarFileEntry.class +INFO: Loading Class: java/util/jar/JarFile$JarEntryIterator.class +INFO: Loading Class: java/util/jar/JarFile.class +INFO: Loading Class: java/util/jar/JarEntry.class +INFO: Loading Class: java/util/jar/Attributes$Name.class +INFO: Loading Class: java/util/jar/Attributes.class +INFO: Loading Class: java/util/function/BiFunction.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$Sync.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantReadWriteLock.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantLock$Sync.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantLock$NonfairSync.class +INFO: Loading Class: java/util/concurrent/locks/ReentrantLock.class +INFO: Loading Class: java/util/concurrent/locks/ReadWriteLock.class +INFO: Loading Class: java/util/concurrent/locks/LockSupport.class +INFO: Loading Class: java/util/concurrent/locks/Lock.class +INFO: Loading Class: java/util/concurrent/locks/Condition.class +INFO: Loading Class: java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.class +INFO: Loading Class: java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.class +INFO: Loading Class: java/util/concurrent/locks/AbstractQueuedSynchronizer.class +INFO: Loading Class: java/util/concurrent/locks/AbstractOwnableSynchronizer.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicReferenceFieldUpdater.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicLong.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicInteger.class +INFO: Loading Class: java/util/concurrent/atomic/AtomicBoolean.class +INFO: Loading Class: java/util/concurrent/TimeUnit$7.class +INFO: Loading Class: java/util/concurrent/TimeUnit$6.class +INFO: Loading Class: java/util/concurrent/TimeUnit$5.class +INFO: Loading Class: java/util/concurrent/TimeUnit$4.class +INFO: Loading Class: java/util/concurrent/TimeUnit$3.class +INFO: Loading Class: java/util/concurrent/TimeUnit$2.class +INFO: Loading Class: java/util/concurrent/TimeUnit$1.class +INFO: Loading Class: java/util/concurrent/TimeUnit.class +INFO: Loading Class: java/util/concurrent/ThreadPoolExecutor$Worker.class +INFO: Loading Class: java/util/concurrent/ThreadPoolExecutor$AbortPolicy.class +INFO: Loading Class: java/util/concurrent/ThreadPoolExecutor.class +INFO: Loading Class: java/util/concurrent/ThreadFactory.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$Transferer.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$TransferStack$SNode.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue$TransferStack.class +INFO: Loading Class: java/util/concurrent/SynchronousQueue.class +INFO: Loading Class: java/util/concurrent/RejectedExecutionHandler.class +INFO: Loading Class: java/util/concurrent/Executors.class +INFO: Loading Class: java/util/concurrent/ExecutorService.class +INFO: Loading Class: java/util/concurrent/Executor.class +INFO: Loading Class: java/util/concurrent/Delayed.class +INFO: Loading Class: java/util/concurrent/DelayQueue.class +INFO: Loading Class: java/util/concurrent/CopyOnWriteArrayList.class +INFO: Loading Class: java/util/concurrent/ConcurrentMap.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ValuesView.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$Traverser.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$Segment.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$Node.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$KeySetView.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$KeyIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$ForwardingNode.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$EntrySetView.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$CounterCell.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$CollectionView.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap$BaseIterator.class +INFO: Loading Class: java/util/concurrent/ConcurrentHashMap.class +INFO: Loading Class: java/util/concurrent/BlockingQueue.class +INFO: Loading Class: java/util/concurrent/AbstractExecutorService.class +INFO: Loading Class: java/util/WeakHashMap$KeySet.class +INFO: Loading Class: java/util/WeakHashMap$KeyIterator.class +INFO: Loading Class: java/util/WeakHashMap$HashIterator.class +INFO: Loading Class: java/util/WeakHashMap$Entry.class +INFO: Loading Class: java/util/WeakHashMap.class +INFO: Loading Class: java/util/Vector$ListItr.class +INFO: Loading Class: java/util/Vector$Itr.class +INFO: Loading Class: java/util/Vector$1.class +INFO: Loading Class: java/util/Vector.class +INFO: Loading Class: java/util/TreeSet.class +INFO: Loading Class: java/util/TreeMap$PrivateEntryIterator.class +INFO: Loading Class: java/util/TreeMap$KeySet.class +INFO: Loading Class: java/util/TreeMap$KeyIterator.class +INFO: Loading Class: java/util/TreeMap$Entry.class +INFO: Loading Class: java/util/TreeMap.class +INFO: Loading Class: java/util/TimeZone$1.class +INFO: Loading Class: java/util/TimeZone.class +INFO: Loading Class: java/util/TimSort.class +INFO: Loading Class: java/util/StringTokenizer.class +INFO: Loading Class: java/util/Stack.class +INFO: Loading Class: java/util/SortedSet.class +INFO: Loading Class: java/util/SortedMap.class +INFO: Loading Class: java/util/Set.class +INFO: Loading Class: java/util/ServiceLoader$LazyIterator.class +INFO: Loading Class: java/util/ServiceLoader$1.class +INFO: Loading Class: java/util/ServiceLoader.class +INFO: Loading Class: java/util/ResourceBundle$SingleFormatControl.class +INFO: Loading Class: java/util/ResourceBundle$RBClassLoader$1.class +INFO: Loading Class: java/util/ResourceBundle$RBClassLoader.class +INFO: Loading Class: java/util/ResourceBundle$LoaderReference.class +INFO: Loading Class: java/util/ResourceBundle$Control$CandidateListCache.class +INFO: Loading Class: java/util/ResourceBundle$Control$1.class +INFO: Loading Class: java/util/ResourceBundle$Control.class +INFO: Loading Class: java/util/ResourceBundle$CacheKeyReference.class +INFO: Loading Class: java/util/ResourceBundle$CacheKey.class +INFO: Loading Class: java/util/ResourceBundle$BundleReference.class +INFO: Loading Class: java/util/ResourceBundle$1.class +INFO: Loading Class: java/util/ResourceBundle.class +INFO: Loading Class: java/util/RandomAccess.class +INFO: Loading Class: java/util/Random.class +INFO: Loading Class: java/util/Queue.class +INFO: Loading Class: java/util/PropertyResourceBundle.class +INFO: Loading Class: java/util/Properties$LineReader.class +INFO: Loading Class: java/util/Properties.class +INFO: Loading Class: java/util/PriorityQueue.class +INFO: Loading Class: java/util/Objects.class +INFO: Loading Class: java/util/NavigableSet.class +INFO: Loading Class: java/util/NavigableMap.class +INFO: Loading Class: java/util/MissingResourceException.class +INFO: Loading Class: java/util/Map$Entry.class +INFO: Loading Class: java/util/Map.class +INFO: Loading Class: java/util/Locale$LocaleKey.class +INFO: Loading Class: java/util/Locale$Category.class +INFO: Loading Class: java/util/Locale$Cache.class +INFO: Loading Class: java/util/Locale$1.class +INFO: Loading Class: java/util/Locale.class +INFO: Loading Class: java/util/ListResourceBundle.class +INFO: Loading Class: java/util/ListIterator.class +INFO: Loading Class: java/util/List.class +INFO: Loading Class: java/util/LinkedList$Node.class +INFO: Loading Class: java/util/LinkedList$ListItr.class +INFO: Loading Class: java/util/LinkedList.class +INFO: Loading Class: java/util/LinkedHashSet.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedKeySet.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedKeyIterator.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedHashIterator.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedEntrySet.class +INFO: Loading Class: java/util/LinkedHashMap$LinkedEntryIterator.class +INFO: Loading Class: java/util/LinkedHashMap$Entry.class +INFO: Loading Class: java/util/LinkedHashMap.class +INFO: Loading Class: java/util/Iterator.class +INFO: Loading Class: java/util/IdentityHashMap$KeySet.class +INFO: Loading Class: java/util/IdentityHashMap$KeyIterator.class +INFO: Loading Class: java/util/IdentityHashMap$IdentityHashMapIterator.class +INFO: Loading Class: java/util/IdentityHashMap.class +INFO: Loading Class: java/util/Hashtable$ValueCollection.class +INFO: Loading Class: java/util/Hashtable$Enumerator.class +INFO: Loading Class: java/util/Hashtable$EntrySet.class +INFO: Loading Class: java/util/Hashtable$Entry.class +INFO: Loading Class: java/util/Hashtable.class +INFO: Loading Class: java/util/HashSet.class +INFO: Loading Class: java/util/HashMap$Values.class +INFO: Loading Class: java/util/HashMap$ValueIterator.class +INFO: Loading Class: java/util/HashMap$TreeNode.class +INFO: Loading Class: java/util/HashMap$Node.class +INFO: Loading Class: java/util/HashMap$KeySet.class +INFO: Loading Class: java/util/HashMap$KeyIterator.class +INFO: Loading Class: java/util/HashMap$HashIterator.class +INFO: Loading Class: java/util/HashMap$EntrySet.class +INFO: Loading Class: java/util/HashMap$EntryIterator.class +INFO: Loading Class: java/util/HashMap.class +INFO: Loading Class: java/util/EventObject.class +INFO: Loading Class: java/util/EventListenerProxy.class +INFO: Loading Class: java/util/EventListener.class +INFO: Loading Class: java/util/Enumeration.class +INFO: Loading Class: java/util/Dictionary.class +INFO: Loading Class: java/util/Deque.class +INFO: Loading Class: java/util/Date.class +INFO: Loading Class: java/util/Comparator.class +INFO: Loading Class: java/util/ComparableTimSort.class +INFO: Loading Class: java/util/Collections$UnmodifiableSortedSet.class +INFO: Loading Class: java/util/Collections$UnmodifiableSet.class +INFO: Loading Class: java/util/Collections$UnmodifiableRandomAccessList.class +INFO: Loading Class: java/util/Collections$UnmodifiableMap.class +INFO: Loading Class: java/util/Collections$UnmodifiableList.class +INFO: Loading Class: java/util/Collections$UnmodifiableCollection$1.class +INFO: Loading Class: java/util/Collections$UnmodifiableCollection.class +INFO: Loading Class: java/util/Collections$SynchronizedSet.class +INFO: Loading Class: java/util/Collections$SynchronizedMap.class +INFO: Loading Class: java/util/Collections$SynchronizedCollection.class +INFO: Loading Class: java/util/Collections$SetFromMap.class +INFO: Loading Class: java/util/Collections$EmptySet.class +INFO: Loading Class: java/util/Collections$EmptyMap.class +INFO: Loading Class: java/util/Collections$EmptyList.class +INFO: Loading Class: java/util/Collections$EmptyEnumeration.class +INFO: Loading Class: java/util/Collections.class +INFO: Loading Class: java/util/Collection.class +INFO: Loading Class: java/util/BitSet.class +INFO: Loading Class: java/util/Arrays$LegacyMergeSort.class +INFO: Loading Class: java/util/Arrays$ArrayList.class +INFO: Loading Class: java/util/Arrays.class +INFO: Loading Class: java/util/ArrayList$SubList$1.class +INFO: Loading Class: java/util/ArrayList$SubList.class +INFO: Loading Class: java/util/ArrayList$ListItr.class +INFO: Loading Class: java/util/ArrayList$Itr.class +INFO: Loading Class: java/util/ArrayList.class +INFO: Loading Class: java/util/ArrayDeque.class +INFO: Loading Class: java/util/AbstractSet.class +INFO: Loading Class: java/util/AbstractSequentialList.class +INFO: Loading Class: java/util/AbstractQueue.class +INFO: Loading Class: java/util/AbstractMap.class +INFO: Loading Class: java/util/AbstractList$Itr.class +INFO: Loading Class: java/util/AbstractList.class +INFO: Loading Class: java/util/AbstractCollection.class +INFO: Loading Class: java/text/spi/NumberFormatProvider.class +INFO: Loading Class: java/text/spi/DecimalFormatSymbolsProvider.class +INFO: Loading Class: java/text/spi/DateFormatSymbolsProvider.class +INFO: Loading Class: java/text/spi/DateFormatProvider.class +INFO: Loading Class: java/text/spi/CollatorProvider.class +INFO: Loading Class: java/text/spi/BreakIteratorProvider.class +INFO: Loading Class: java/text/MessageFormat$Field.class +INFO: Loading Class: java/text/MessageFormat.class +INFO: Loading Class: java/text/Format$Field.class +INFO: Loading Class: java/text/Format.class +INFO: Loading Class: java/text/FieldPosition.class +INFO: Loading Class: java/text/CharacterIterator.class +INFO: Loading Class: java/text/AttributedString$AttributedStringIterator.class +INFO: Loading Class: java/text/AttributedString.class +INFO: Loading Class: java/text/AttributedCharacterIterator$Attribute.class +INFO: Loading Class: java/text/AttributedCharacterIterator.class +INFO: Loading Class: java/security/cert/Certificate.class +INFO: Loading Class: java/security/UnresolvedPermission.class +INFO: Loading Class: java/security/SecureClassLoader.class +INFO: Loading Class: java/security/ProtectionDomain$Key.class +INFO: Loading Class: java/security/ProtectionDomain$1.class +INFO: Loading Class: java/security/ProtectionDomain.class +INFO: Loading Class: java/security/PrivilegedExceptionAction.class +INFO: Loading Class: java/security/PrivilegedActionException.class +INFO: Loading Class: java/security/PrivilegedAction.class +INFO: Loading Class: java/security/Principal.class +INFO: Loading Class: java/security/Permissions.class +INFO: Loading Class: java/security/PermissionCollection.class +INFO: Loading Class: java/security/Permission.class +INFO: Loading Class: java/security/Guard.class +INFO: Loading Class: java/security/CodeSource.class +INFO: Loading Class: java/security/CodeSigner.class +INFO: Loading Class: java/security/BasicPermissionCollection.class +INFO: Loading Class: java/security/BasicPermission.class +INFO: Loading Class: java/security/AllPermissionCollection.class +INFO: Loading Class: java/security/AllPermission.class +INFO: Loading Class: java/security/AccessController.class +INFO: Loading Class: java/security/AccessControlContext.class +INFO: Loading Class: java/rmi/Remote.class +INFO: Loading Class: java/rmi/MarshalledObject.class +INFO: Loading Class: java/nio/file/attribute/FileAttribute.class +INFO: Loading Class: java/nio/file/Watchable.class +INFO: Loading Class: java/nio/file/Path.class +INFO: Loading Class: java/nio/charset/spi/CharsetProvider.class +INFO: Loading Class: java/nio/charset/StandardCharsets.class +INFO: Loading Class: java/nio/charset/CodingErrorAction.class +INFO: Loading Class: java/nio/charset/CoderResult$Cache.class +INFO: Loading Class: java/nio/charset/CoderResult$2.class +INFO: Loading Class: java/nio/charset/CoderResult$1.class +INFO: Loading Class: java/nio/charset/CoderResult.class +INFO: Loading Class: java/nio/charset/CharsetEncoder.class +INFO: Loading Class: java/nio/charset/CharsetDecoder.class +INFO: Loading Class: java/nio/charset/Charset.class +INFO: Loading Class: java/nio/channels/spi/AbstractInterruptibleChannel$1.class +INFO: Loading Class: java/nio/channels/spi/AbstractInterruptibleChannel.class +INFO: Loading Class: java/nio/channels/WritableByteChannel.class +INFO: Loading Class: java/nio/channels/SeekableByteChannel.class +INFO: Loading Class: java/nio/channels/ScatteringByteChannel.class +INFO: Loading Class: java/nio/channels/ReadableByteChannel.class +INFO: Loading Class: java/nio/channels/InterruptibleChannel.class +INFO: Loading Class: java/nio/channels/GatheringByteChannel.class +INFO: Loading Class: java/nio/channels/FileChannel.class +INFO: Loading Class: java/nio/channels/Channel.class +INFO: Loading Class: java/nio/channels/ByteChannel.class +INFO: Loading Class: java/nio/ShortBuffer.class +INFO: Loading Class: java/nio/MappedByteBuffer.class +INFO: Loading Class: java/nio/LongBuffer.class +INFO: Loading Class: java/nio/IntBuffer.class +INFO: Loading Class: java/nio/HeapCharBuffer.class +INFO: Loading Class: java/nio/HeapByteBuffer.class +INFO: Loading Class: java/nio/DirectLongBufferU.class +INFO: Loading Class: java/nio/DirectByteBuffer$Deallocator.class +INFO: Loading Class: java/nio/DirectByteBuffer.class +INFO: Loading Class: java/nio/CharBuffer.class +INFO: Loading Class: java/nio/ByteOrder.class +INFO: Loading Class: java/nio/ByteBufferAsShortBufferB.class +INFO: Loading Class: java/nio/ByteBufferAsIntBufferB.class +INFO: Loading Class: java/nio/ByteBuffer.class +INFO: Loading Class: java/nio/Buffer.class +INFO: Loading Class: java/nio/Bits$1.class +INFO: Loading Class: java/nio/Bits.class +INFO: Loading Class: java/net/URLStreamHandlerFactory.class +INFO: Loading Class: java/net/URLStreamHandler.class +INFO: Loading Class: java/net/URLConnection.class +INFO: Loading Class: java/net/URLClassLoader$7.class +INFO: Loading Class: java/net/URLClassLoader$3$1.class +INFO: Loading Class: java/net/URLClassLoader$3.class +INFO: Loading Class: java/net/URLClassLoader$2.class +INFO: Loading Class: java/net/URLClassLoader$1.class +INFO: Loading Class: java/net/URLClassLoader.class +INFO: Loading Class: java/net/URL.class +INFO: Loading Class: java/net/URI$Parser.class +INFO: Loading Class: java/net/URI.class +INFO: Loading Class: java/net/SocksSocketImpl$3.class +INFO: Loading Class: java/net/SocksSocketImpl.class +INFO: Loading Class: java/net/SocksConsts.class +INFO: Loading Class: java/net/SocketOptions.class +INFO: Loading Class: java/net/SocketImpl.class +INFO: Loading Class: java/net/SocketException.class +INFO: Loading Class: java/net/SocketAddress.class +INFO: Loading Class: java/net/Socket.class +INFO: Loading Class: java/net/ServerSocket.class +INFO: Loading Class: java/net/ProxySelector.class +INFO: Loading Class: java/net/Proxy$Type.class +INFO: Loading Class: java/net/Proxy.class +INFO: Loading Class: java/net/PlainSocketImpl.class +INFO: Loading Class: java/net/Parts.class +INFO: Loading Class: java/net/NetworkInterface$2.class +INFO: Loading Class: java/net/NetworkInterface$1.class +INFO: Loading Class: java/net/NetworkInterface.class +INFO: Loading Class: java/net/MalformedURLException.class +INFO: Loading Class: java/net/JarURLConnection.class +INFO: Loading Class: java/net/InterfaceAddress.class +INFO: Loading Class: java/net/InetSocketAddress$InetSocketAddressHolder.class +INFO: Loading Class: java/net/InetSocketAddress.class +INFO: Loading Class: java/net/InetAddressImplFactory.class +INFO: Loading Class: java/net/InetAddressImpl.class +INFO: Loading Class: java/net/InetAddress$InetAddressHolder.class +INFO: Loading Class: java/net/InetAddress$Cache$Type.class +INFO: Loading Class: java/net/InetAddress$Cache.class +INFO: Loading Class: java/net/InetAddress$2.class +INFO: Loading Class: java/net/InetAddress$1.class +INFO: Loading Class: java/net/InetAddress.class +INFO: Loading Class: java/net/Inet6AddressImpl.class +INFO: Loading Class: java/net/Inet6Address$Inet6AddressHolder.class +INFO: Loading Class: java/net/Inet6Address.class +INFO: Loading Class: java/net/Inet4Address.class +INFO: Loading Class: java/net/HttpURLConnection.class +INFO: Loading Class: java/net/DefaultInterface.class +INFO: Loading Class: java/net/ConnectException.class +INFO: Loading Class: java/net/Authenticator.class +INFO: Loading Class: java/net/AbstractPlainSocketImpl$1.class +INFO: Loading Class: java/net/AbstractPlainSocketImpl.class +INFO: Loading Class: java/lang/reflect/WeakCache.class +INFO: Loading Class: java/lang/reflect/Type.class +INFO: Loading Class: java/lang/reflect/ReflectPermission.class +INFO: Loading Class: java/lang/reflect/ReflectAccess.class +INFO: Loading Class: java/lang/reflect/Proxy$ProxyClassFactory.class +INFO: Loading Class: java/lang/reflect/Proxy$KeyFactory.class +INFO: Loading Class: java/lang/reflect/Proxy.class +INFO: Loading Class: java/lang/reflect/Parameter.class +INFO: Loading Class: java/lang/reflect/Modifier.class +INFO: Loading Class: java/lang/reflect/Method.class +INFO: Loading Class: java/lang/reflect/Member.class +INFO: Loading Class: java/lang/reflect/InvocationTargetException.class +INFO: Loading Class: java/lang/reflect/InvocationHandler.class +INFO: Loading Class: java/lang/reflect/GenericDeclaration.class +INFO: Loading Class: java/lang/reflect/Field.class +INFO: Loading Class: java/lang/reflect/Executable.class +INFO: Loading Class: java/lang/reflect/Constructor.class +INFO: Loading Class: java/lang/reflect/Array.class +INFO: Loading Class: java/lang/reflect/AnnotatedElement.class +INFO: Loading Class: java/lang/reflect/AccessibleObject.class +INFO: Loading Class: java/lang/ref/WeakReference.class +INFO: Loading Class: java/lang/ref/SoftReference.class +INFO: Loading Class: java/lang/ref/ReferenceQueue$Null.class +INFO: Loading Class: java/lang/ref/ReferenceQueue$Lock.class +INFO: Loading Class: java/lang/ref/ReferenceQueue.class +INFO: Loading Class: java/lang/ref/Reference$ReferenceHandler.class +INFO: Loading Class: java/lang/ref/Reference$Lock.class +INFO: Loading Class: java/lang/ref/Reference.class +INFO: Loading Class: java/lang/ref/PhantomReference.class +INFO: Loading Class: java/lang/ref/Finalizer$FinalizerThread.class +INFO: Loading Class: java/lang/ref/Finalizer.class +INFO: Loading Class: java/lang/ref/FinalReference.class +INFO: Loading Class: java/lang/invoke/VolatileCallSite.class +INFO: Loading Class: java/lang/invoke/MutableCallSite.class +INFO: Loading Class: java/lang/invoke/MethodTypeForm.class +INFO: Loading Class: java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry.class +INFO: Loading Class: java/lang/invoke/MethodType$ConcurrentWeakInternSet.class +INFO: Loading Class: java/lang/invoke/MethodType.class +INFO: Loading Class: java/lang/invoke/MethodHandleStatics$1.class +INFO: Loading Class: java/lang/invoke/MethodHandleStatics.class +INFO: Loading Class: java/lang/invoke/MethodHandleNatives.class +INFO: Loading Class: java/lang/invoke/MethodHandleImpl.class +INFO: Loading Class: java/lang/invoke/MethodHandle.class +INFO: Loading Class: java/lang/invoke/MemberName$Factory.class +INFO: Loading Class: java/lang/invoke/MemberName.class +INFO: Loading Class: java/lang/invoke/LambdaForm$NamedFunction.class +INFO: Loading Class: java/lang/invoke/LambdaForm.class +INFO: Loading Class: java/lang/invoke/Invokers.class +INFO: Loading Class: java/lang/invoke/DirectMethodHandle.class +INFO: Loading Class: java/lang/invoke/ConstantCallSite.class +INFO: Loading Class: java/lang/invoke/CallSite.class +INFO: Loading Class: java/lang/annotation/Annotation.class +INFO: Loading Class: java/lang/Void.class +INFO: Loading Class: java/lang/VirtualMachineError.class +INFO: Loading Class: java/lang/UnsupportedOperationException.class +INFO: Loading Class: java/lang/UnsatisfiedLinkError.class +INFO: Loading Class: java/lang/UNIXProcess$ProcessPipeOutputStream.class +INFO: Loading Class: java/lang/UNIXProcess$ProcessPipeInputStream.class +INFO: Loading Class: java/lang/UNIXProcess$LaunchMechanism.class +INFO: Loading Class: java/lang/UNIXProcess$1.class +INFO: Loading Class: java/lang/UNIXProcess.class +INFO: Loading Class: java/lang/Throwable$WrappedPrintWriter.class +INFO: Loading Class: java/lang/Throwable$WrappedPrintStream.class +INFO: Loading Class: java/lang/Throwable$PrintStreamOrWriter.class +INFO: Loading Class: java/lang/Throwable.class +INFO: Loading Class: java/lang/ThreadLocal$ThreadLocalMap$Entry.class +INFO: Loading Class: java/lang/ThreadLocal$ThreadLocalMap.class +INFO: Loading Class: java/lang/ThreadLocal.class +INFO: Loading Class: java/lang/ThreadGroup.class +INFO: Loading Class: java/lang/ThreadDeath.class +INFO: Loading Class: java/lang/Thread$UncaughtExceptionHandler.class +INFO: Loading Class: java/lang/Thread.class +INFO: Loading Class: java/lang/Terminator$1.class +INFO: Loading Class: java/lang/Terminator.class +INFO: Loading Class: java/lang/SystemClassLoaderAction.class +INFO: Loading Class: java/lang/System$2.class +INFO: Loading Class: java/lang/System.class +INFO: Loading Class: java/lang/StringIndexOutOfBoundsException.class +INFO: Loading Class: java/lang/StringCoding$StringEncoder.class +INFO: Loading Class: java/lang/StringCoding$StringDecoder.class +INFO: Loading Class: java/lang/StringCoding.class +INFO: Loading Class: java/lang/StringBuilder.class +INFO: Loading Class: java/lang/StringBuffer.class +INFO: Loading Class: java/lang/String$CaseInsensitiveComparator.class +INFO: Loading Class: java/lang/String.class +INFO: Loading Class: java/lang/StrictMath.class +INFO: Loading Class: java/lang/StackTraceElement.class +INFO: Loading Class: java/lang/StackOverflowError.class +INFO: Loading Class: java/lang/Shutdown$Lock.class +INFO: Loading Class: java/lang/Shutdown.class +INFO: Loading Class: java/lang/Short$ShortCache.class +INFO: Loading Class: java/lang/Short.class +INFO: Loading Class: java/lang/SecurityManager.class +INFO: Loading Class: java/lang/SecurityException.class +INFO: Loading Class: java/lang/RuntimePermission.class +INFO: Loading Class: java/lang/RuntimeException.class +INFO: Loading Class: java/lang/Runtime.class +INFO: Loading Class: java/lang/Runnable.class +INFO: Loading Class: java/lang/ReflectiveOperationException.class +INFO: Loading Class: java/lang/Readable.class +INFO: Loading Class: java/lang/ProcessImpl.class +INFO: Loading Class: java/lang/ProcessEnvironment$Variable.class +INFO: Loading Class: java/lang/ProcessEnvironment$Value.class +INFO: Loading Class: java/lang/ProcessEnvironment$StringEnvironment.class +INFO: Loading Class: java/lang/ProcessEnvironment$ExternalData.class +INFO: Loading Class: java/lang/ProcessEnvironment.class +INFO: Loading Class: java/lang/ProcessBuilder$NullOutputStream.class +INFO: Loading Class: java/lang/ProcessBuilder$NullInputStream.class +INFO: Loading Class: java/lang/ProcessBuilder.class +INFO: Loading Class: java/lang/Process.class +INFO: Loading Class: java/lang/Package.class +INFO: Loading Class: java/lang/OutOfMemoryError.class +INFO: Loading Class: java/lang/Object.class +INFO: Loading Class: java/lang/NumberFormatException.class +INFO: Loading Class: java/lang/Number.class +INFO: Loading Class: java/lang/NullPointerException.class +INFO: Loading Class: java/lang/NoSuchMethodException.class +INFO: Loading Class: java/lang/NoSuchMethodError.class +INFO: Loading Class: java/lang/NoSuchFieldException.class +INFO: Loading Class: java/lang/NoClassDefFoundError.class +INFO: Loading Class: java/lang/Math.class +INFO: Loading Class: java/lang/Long$LongCache.class +INFO: Loading Class: java/lang/Long.class +INFO: Loading Class: java/lang/LinkageError.class +INFO: Loading Class: java/lang/Iterable.class +INFO: Loading Class: java/lang/InterruptedException.class +INFO: Loading Class: java/lang/InternalError.class +INFO: Loading Class: java/lang/Integer$IntegerCache.class +INFO: Loading Class: java/lang/Integer.class +INFO: Loading Class: java/lang/InstantiationException.class +INFO: Loading Class: java/lang/IndexOutOfBoundsException.class +INFO: Loading Class: java/lang/IncompatibleClassChangeError.class +INFO: Loading Class: java/lang/IllegalStateException.class +INFO: Loading Class: java/lang/IllegalMonitorStateException.class +INFO: Loading Class: java/lang/IllegalArgumentException.class +INFO: Loading Class: java/lang/IllegalAccessException.class +INFO: Loading Class: java/lang/IllegalAccessError.class +INFO: Loading Class: java/lang/Float.class +INFO: Loading Class: java/lang/ExceptionInInitializerError.class +INFO: Loading Class: java/lang/Exception.class +INFO: Loading Class: java/lang/Error.class +INFO: Loading Class: java/lang/Enum.class +INFO: Loading Class: java/lang/Double.class +INFO: Loading Class: java/lang/Compiler$1.class +INFO: Loading Class: java/lang/Compiler.class +INFO: Loading Class: java/lang/Comparable.class +INFO: Loading Class: java/lang/Cloneable.class +INFO: Loading Class: java/lang/CloneNotSupportedException.class +INFO: Loading Class: java/lang/ClassValue$ClassValueMap.class +INFO: Loading Class: java/lang/ClassNotFoundException.class +INFO: Loading Class: java/lang/ClassLoaderHelper.class +INFO: Loading Class: java/lang/ClassLoader$ParallelLoaders.class +INFO: Loading Class: java/lang/ClassLoader$NativeLibrary.class +INFO: Loading Class: java/lang/ClassLoader$3.class +INFO: Loading Class: java/lang/ClassLoader$2.class +INFO: Loading Class: java/lang/ClassLoader.class +INFO: Loading Class: java/lang/ClassCastException.class +INFO: Loading Class: java/lang/Class$ReflectionData.class +INFO: Loading Class: java/lang/Class$Atomic.class +INFO: Loading Class: java/lang/Class$AnnotationData.class +INFO: Loading Class: java/lang/Class$4.class +INFO: Loading Class: java/lang/Class$3.class +INFO: Loading Class: java/lang/Class$1.class +INFO: Loading Class: java/lang/Class.class +INFO: Loading Class: java/lang/CharacterDataLatin1.class +INFO: Loading Class: java/lang/CharacterData.class +INFO: Loading Class: java/lang/Character$CharacterCache.class +INFO: Loading Class: java/lang/Character.class +INFO: Loading Class: java/lang/CharSequence.class +INFO: Loading Class: java/lang/Byte.class +INFO: Loading Class: java/lang/BootstrapMethodError.class +INFO: Loading Class: java/lang/Boolean.class +INFO: Loading Class: java/lang/AutoCloseable.class +INFO: Loading Class: java/lang/ArrayStoreException.class +INFO: Loading Class: java/lang/ArrayIndexOutOfBoundsException.class +INFO: Loading Class: java/lang/ArithmeticException.class +INFO: Loading Class: java/lang/ApplicationShutdownHooks$1.class +INFO: Loading Class: java/lang/ApplicationShutdownHooks.class +INFO: Loading Class: java/lang/Appendable.class +INFO: Loading Class: java/lang/AbstractStringBuilder.class +INFO: Loading Class: java/io/Writer.class +INFO: Loading Class: java/io/UnsupportedEncodingException.class +INFO: Loading Class: java/io/UnixFileSystem.class +INFO: Loading Class: java/io/StringWriter.class +INFO: Loading Class: java/io/StringReader.class +INFO: Loading Class: java/io/Serializable.class +INFO: Loading Class: java/io/Reader.class +INFO: Loading Class: java/io/RandomAccessFile.class +INFO: Loading Class: java/io/PrintWriter.class +INFO: Loading Class: java/io/PrintStream.class +INFO: Loading Class: java/io/OutputStreamWriter.class +INFO: Loading Class: java/io/OutputStream.class +INFO: Loading Class: java/io/ObjectStreamField.class +INFO: Loading Class: java/io/ObjectStreamConstants.class +INFO: Loading Class: java/io/ObjectStreamClass$WeakClassKey.class +INFO: Loading Class: java/io/ObjectStreamClass$FieldReflectorKey.class +INFO: Loading Class: java/io/ObjectStreamClass$FieldReflector.class +INFO: Loading Class: java/io/ObjectStreamClass$EntryFuture.class +INFO: Loading Class: java/io/ObjectStreamClass$Caches.class +INFO: Loading Class: java/io/ObjectStreamClass$2.class +INFO: Loading Class: java/io/ObjectStreamClass.class +INFO: Loading Class: java/io/ObjectOutputStream$ReplaceTable.class +INFO: Loading Class: java/io/ObjectOutputStream$HandleTable.class +INFO: Loading Class: java/io/ObjectOutputStream$BlockDataOutputStream.class +INFO: Loading Class: java/io/ObjectOutputStream.class +INFO: Loading Class: java/io/ObjectOutput.class +INFO: Loading Class: java/io/ObjectInputStream.class +INFO: Loading Class: java/io/ObjectInput.class +INFO: Loading Class: java/io/InputStreamReader.class +INFO: Loading Class: java/io/InputStream.class +INFO: Loading Class: java/io/IOException.class +INFO: Loading Class: java/io/Flushable.class +INFO: Loading Class: java/io/FilterReader.class +INFO: Loading Class: java/io/FilterOutputStream.class +INFO: Loading Class: java/io/FilterInputStream.class +INFO: Loading Class: java/io/FilenameFilter.class +INFO: Loading Class: java/io/FileWriter.class +INFO: Loading Class: java/io/FileSystem.class +INFO: Loading Class: java/io/FileReader.class +INFO: Loading Class: java/io/FilePermissionCollection.class +INFO: Loading Class: java/io/FilePermission$1.class +INFO: Loading Class: java/io/FilePermission.class +INFO: Loading Class: java/io/FileOutputStream$1.class +INFO: Loading Class: java/io/FileOutputStream.class +INFO: Loading Class: java/io/FileNotFoundException.class +INFO: Loading Class: java/io/FileInputStream$1.class +INFO: Loading Class: java/io/FileInputStream.class +INFO: Loading Class: java/io/FileDescriptor$1.class +INFO: Loading Class: java/io/FileDescriptor.class +INFO: Loading Class: java/io/File$PathStatus.class +INFO: Loading Class: java/io/File.class +INFO: Loading Class: java/io/Externalizable.class +INFO: Loading Class: java/io/ExpiringCache$Entry.class +INFO: Loading Class: java/io/ExpiringCache$1.class +INFO: Loading Class: java/io/ExpiringCache.class +INFO: Loading Class: java/io/EOFException.class +INFO: Loading Class: java/io/DefaultFileSystem.class +INFO: Loading Class: java/io/DataOutputStream.class +INFO: Loading Class: java/io/DataOutput.class +INFO: Loading Class: java/io/DataInputStream.class +INFO: Loading Class: java/io/DataInput.class +INFO: Loading Class: java/io/Closeable.class +INFO: Loading Class: java/io/ByteArrayOutputStream.class +INFO: Loading Class: java/io/ByteArrayInputStream.class +INFO: Loading Class: java/io/BufferedWriter.class +INFO: Loading Class: java/io/BufferedReader.class +INFO: Loading Class: java/io/BufferedOutputStream.class +INFO: Loading Class: java/io/BufferedInputStream.class +INFO: Loading Class: java/io/Bits.class +INFO: Loading Class: java/beans/PropertyChangeSupport$PropertyChangeListenerMap.class +INFO: Loading Class: java/beans/PropertyChangeSupport.class +INFO: Loading Class: java/beans/PropertyChangeListenerProxy.class +INFO: Loading Class: java/beans/PropertyChangeListener.class +INFO: Loading Class: java/beans/PropertyChangeEvent.class +INFO: Loading Class: java/beans/ChangeListenerMap.class +INFO: Loading Class: java/awt/print/PrinterGraphics.class +INFO: Loading Class: java/awt/peer/WindowPeer.class +INFO: Loading Class: java/awt/peer/PanelPeer.class +INFO: Loading Class: java/awt/peer/LightweightPeer.class +INFO: Loading Class: java/awt/peer/LabelPeer.class +INFO: Loading Class: java/awt/peer/KeyboardFocusManagerPeer.class +INFO: Loading Class: java/awt/peer/FramePeer.class +INFO: Loading Class: java/awt/peer/DialogPeer.class +INFO: Loading Class: java/awt/peer/ContainerPeer.class +INFO: Loading Class: java/awt/peer/ComponentPeer.class +INFO: Loading Class: java/awt/peer/CanvasPeer.class +INFO: Loading Class: java/awt/image/WritableRenderedImage.class +INFO: Loading Class: java/awt/image/WritableRaster.class +INFO: Loading Class: java/awt/image/VolatileImage.class +INFO: Loading Class: java/awt/image/SinglePixelPackedSampleModel.class +INFO: Loading Class: java/awt/image/SampleModel.class +INFO: Loading Class: java/awt/image/RenderedImage.class +INFO: Loading Class: java/awt/image/Raster.class +INFO: Loading Class: java/awt/image/RGBImageFilter.class +INFO: Loading Class: java/awt/image/PixelInterleavedSampleModel.class +INFO: Loading Class: java/awt/image/PackedColorModel.class +INFO: Loading Class: java/awt/image/IndexColorModel.class +INFO: Loading Class: java/awt/image/ImageProducer.class +INFO: Loading Class: java/awt/image/ImageObserver.class +INFO: Loading Class: java/awt/image/ImageFilter.class +INFO: Loading Class: java/awt/image/ImageConsumer.class +INFO: Loading Class: java/awt/image/FilteredImageSource.class +INFO: Loading Class: java/awt/image/DirectColorModel.class +INFO: Loading Class: java/awt/image/DataBufferInt.class +INFO: Loading Class: java/awt/image/DataBufferByte.class +INFO: Loading Class: java/awt/image/DataBuffer$1.class +INFO: Loading Class: java/awt/image/DataBuffer.class +INFO: Loading Class: java/awt/image/ComponentSampleModel.class +INFO: Loading Class: java/awt/image/ColorModel$1.class +INFO: Loading Class: java/awt/image/ColorModel.class +INFO: Loading Class: java/awt/image/BufferedImage$1.class +INFO: Loading Class: java/awt/image/BufferedImage.class +INFO: Loading Class: java/awt/image/BufferStrategy.class +INFO: Loading Class: java/awt/im/spi/InputMethodDescriptor.class +INFO: Loading Class: java/awt/im/spi/InputMethodContext.class +INFO: Loading Class: java/awt/im/spi/InputMethod.class +INFO: Loading Class: java/awt/im/InputMethodRequests.class +INFO: Loading Class: java/awt/im/InputContext.class +INFO: Loading Class: java/awt/geom/RectangularShape.class +INFO: Loading Class: java/awt/geom/Rectangle2D$Float.class +INFO: Loading Class: java/awt/geom/Rectangle2D$Double.class +INFO: Loading Class: java/awt/geom/Rectangle2D.class +INFO: Loading Class: java/awt/geom/Point2D$Float.class +INFO: Loading Class: java/awt/geom/Point2D$Double.class +INFO: Loading Class: java/awt/geom/Point2D.class +INFO: Loading Class: java/awt/geom/Path2D$Float.class +INFO: Loading Class: java/awt/geom/Path2D.class +INFO: Loading Class: java/awt/geom/GeneralPath.class +INFO: Loading Class: java/awt/geom/Dimension2D.class +INFO: Loading Class: java/awt/geom/AffineTransform.class +INFO: Loading Class: java/awt/font/TextAttribute.class +INFO: Loading Class: java/awt/font/LineMetrics.class +INFO: Loading Class: java/awt/font/GlyphVector.class +INFO: Loading Class: java/awt/font/FontRenderContext.class +INFO: Loading Class: java/awt/event/WindowStateListener.class +INFO: Loading Class: java/awt/event/WindowListener.class +INFO: Loading Class: java/awt/event/WindowFocusListener.class +INFO: Loading Class: java/awt/event/WindowEvent.class +INFO: Loading Class: java/awt/event/WindowAdapter.class +INFO: Loading Class: java/awt/event/TextListener.class +INFO: Loading Class: java/awt/event/PaintEvent.class +INFO: Loading Class: java/awt/event/NativeLibLoader$1.class +INFO: Loading Class: java/awt/event/NativeLibLoader.class +INFO: Loading Class: java/awt/event/MouseWheelListener.class +INFO: Loading Class: java/awt/event/MouseWheelEvent.class +INFO: Loading Class: java/awt/event/MouseMotionListener.class +INFO: Loading Class: java/awt/event/MouseMotionAdapter.class +INFO: Loading Class: java/awt/event/MouseListener.class +INFO: Loading Class: java/awt/event/MouseEvent.class +INFO: Loading Class: java/awt/event/MouseAdapter.class +INFO: Loading Class: java/awt/event/KeyListener.class +INFO: Loading Class: java/awt/event/KeyEvent$1.class +INFO: Loading Class: java/awt/event/KeyEvent.class +INFO: Loading Class: java/awt/event/KeyAdapter.class +INFO: Loading Class: java/awt/event/ItemListener.class +INFO: Loading Class: java/awt/event/InvocationEvent.class +INFO: Loading Class: java/awt/event/InputMethodListener.class +INFO: Loading Class: java/awt/event/InputMethodEvent.class +INFO: Loading Class: java/awt/event/InputEvent$1.class +INFO: Loading Class: java/awt/event/InputEvent.class +INFO: Loading Class: java/awt/event/HierarchyListener.class +INFO: Loading Class: java/awt/event/HierarchyEvent.class +INFO: Loading Class: java/awt/event/HierarchyBoundsListener.class +INFO: Loading Class: java/awt/event/FocusListener.class +INFO: Loading Class: java/awt/event/FocusEvent.class +INFO: Loading Class: java/awt/event/FocusAdapter.class +INFO: Loading Class: java/awt/event/ContainerListener.class +INFO: Loading Class: java/awt/event/ContainerEvent.class +INFO: Loading Class: java/awt/event/ComponentListener.class +INFO: Loading Class: java/awt/event/ComponentEvent.class +INFO: Loading Class: java/awt/event/ComponentAdapter.class +INFO: Loading Class: java/awt/event/AdjustmentListener.class +INFO: Loading Class: java/awt/event/AdjustmentEvent.class +INFO: Loading Class: java/awt/event/ActionListener.class +INFO: Loading Class: java/awt/event/ActionEvent.class +INFO: Loading Class: java/awt/event/AWTEventListenerProxy.class +INFO: Loading Class: java/awt/event/AWTEventListener.class +INFO: Loading Class: java/awt/dnd/peer/DropTargetPeer.class +INFO: Loading Class: java/awt/dnd/peer/DragSourceContextPeer.class +INFO: Loading Class: java/awt/dnd/DropTargetListener.class +INFO: Loading Class: java/awt/dnd/DropTargetContext.class +INFO: Loading Class: java/awt/dnd/DropTarget.class +INFO: Loading Class: java/awt/datatransfer/Transferable.class +INFO: Loading Class: java/awt/datatransfer/SystemFlavorMap$2.class +INFO: Loading Class: java/awt/datatransfer/SystemFlavorMap$1.class +INFO: Loading Class: java/awt/datatransfer/SystemFlavorMap.class +INFO: Loading Class: java/awt/datatransfer/MimeTypeParseException.class +INFO: Loading Class: java/awt/datatransfer/MimeTypeParameterList.class +INFO: Loading Class: java/awt/datatransfer/MimeType.class +INFO: Loading Class: java/awt/datatransfer/FlavorTable.class +INFO: Loading Class: java/awt/datatransfer/FlavorMap.class +INFO: Loading Class: java/awt/datatransfer/DataFlavor.class +INFO: Loading Class: java/awt/datatransfer/ClipboardOwner.class +INFO: Loading Class: java/awt/datatransfer/Clipboard.class +INFO: Loading Class: java/awt/color/ICC_ProfileRGB.class +INFO: Loading Class: java/awt/color/ICC_Profile$1.class +INFO: Loading Class: java/awt/color/ICC_Profile.class +INFO: Loading Class: java/awt/color/ICC_ColorSpace.class +INFO: Loading Class: java/awt/color/ColorSpace.class +INFO: Loading Class: java/awt/Window$WindowDisposerRecord.class +INFO: Loading Class: java/awt/Window$Type.class +INFO: Loading Class: java/awt/Window$1DisposeAction.class +INFO: Loading Class: java/awt/Window$1.class +INFO: Loading Class: java/awt/Window.class +INFO: Loading Class: java/awt/WaitDispatchSupport$5.class +INFO: Loading Class: java/awt/WaitDispatchSupport$2.class +INFO: Loading Class: java/awt/WaitDispatchSupport$1.class +INFO: Loading Class: java/awt/WaitDispatchSupport.class +INFO: Loading Class: java/awt/VKCollection.class +INFO: Loading Class: java/awt/TrayIcon.class +INFO: Loading Class: java/awt/Transparency.class +INFO: Loading Class: java/awt/Toolkit$ToolkitEventMulticaster.class +INFO: Loading Class: java/awt/Toolkit$SelectiveAWTEventListener.class +INFO: Loading Class: java/awt/Toolkit$DesktopPropertyChangeSupport.class +INFO: Loading Class: java/awt/Toolkit$5.class +INFO: Loading Class: java/awt/Toolkit$4.class +INFO: Loading Class: java/awt/Toolkit$3.class +INFO: Loading Class: java/awt/Toolkit$2.class +INFO: Loading Class: java/awt/Toolkit$1.class +INFO: Loading Class: java/awt/Toolkit.class +INFO: Loading Class: java/awt/SystemColor.class +INFO: Loading Class: java/awt/Stroke.class +INFO: Loading Class: java/awt/SplashScreen.class +INFO: Loading Class: java/awt/Shape.class +INFO: Loading Class: java/awt/SequencedEvent.class +INFO: Loading Class: java/awt/SentEvent.class +INFO: Loading Class: java/awt/SecondaryLoop.class +INFO: Loading Class: java/awt/RenderingHints$Key.class +INFO: Loading Class: java/awt/RenderingHints.class +INFO: Loading Class: java/awt/Rectangle.class +INFO: Loading Class: java/awt/Queue.class +INFO: Loading Class: java/awt/PrintGraphics.class +INFO: Loading Class: java/awt/Point.class +INFO: Loading Class: java/awt/Panel.class +INFO: Loading Class: java/awt/Paint.class +INFO: Loading Class: java/awt/ModalEventFilter$ApplicationModalEventFilter.class +INFO: Loading Class: java/awt/ModalEventFilter$1.class +INFO: Loading Class: java/awt/ModalEventFilter.class +INFO: Loading Class: java/awt/MenuContainer.class +INFO: Loading Class: java/awt/MenuComponent.class +INFO: Loading Class: java/awt/MenuBar.class +INFO: Loading Class: java/awt/MediaTracker.class +INFO: Loading Class: java/awt/MediaEntry.class +INFO: Loading Class: java/awt/LightweightDispatcher$2.class +INFO: Loading Class: java/awt/LightweightDispatcher$1.class +INFO: Loading Class: java/awt/LightweightDispatcher.class +INFO: Loading Class: java/awt/LayoutManager2.class +INFO: Loading Class: java/awt/LayoutManager.class +INFO: Loading Class: java/awt/Label.class +INFO: Loading Class: java/awt/KeyboardFocusManager$LightweightFocusRequest.class +INFO: Loading Class: java/awt/KeyboardFocusManager$HeavyweightFocusRequest.class +INFO: Loading Class: java/awt/KeyboardFocusManager$3.class +INFO: Loading Class: java/awt/KeyboardFocusManager$2.class +INFO: Loading Class: java/awt/KeyboardFocusManager$1.class +INFO: Loading Class: java/awt/KeyboardFocusManager.class +INFO: Loading Class: java/awt/KeyEventPostProcessor.class +INFO: Loading Class: java/awt/KeyEventDispatcher.class +INFO: Loading Class: java/awt/ItemSelectable.class +INFO: Loading Class: java/awt/Insets.class +INFO: Loading Class: java/awt/ImageMediaEntry.class +INFO: Loading Class: java/awt/ImageCapabilities.class +INFO: Loading Class: java/awt/Image$1.class +INFO: Loading Class: java/awt/Image.class +INFO: Loading Class: java/awt/GraphicsEnvironment.class +INFO: Loading Class: java/awt/GraphicsDevice.class +INFO: Loading Class: java/awt/GraphicsConfiguration.class +INFO: Loading Class: java/awt/GraphicsCallback$PaintCallback.class +INFO: Loading Class: java/awt/GraphicsCallback.class +INFO: Loading Class: java/awt/Graphics2D.class +INFO: Loading Class: java/awt/Graphics.class +INFO: Loading Class: java/awt/Frame$1.class +INFO: Loading Class: java/awt/Frame.class +INFO: Loading Class: java/awt/FontMetrics.class +INFO: Loading Class: java/awt/Font$FontAccessImpl.class +INFO: Loading Class: java/awt/Font.class +INFO: Loading Class: java/awt/FocusTraversalPolicy.class +INFO: Loading Class: java/awt/FlowLayout.class +INFO: Loading Class: java/awt/EventQueue$5.class +INFO: Loading Class: java/awt/EventQueue$4.class +INFO: Loading Class: java/awt/EventQueue$3.class +INFO: Loading Class: java/awt/EventQueue$2.class +INFO: Loading Class: java/awt/EventQueue$1.class +INFO: Loading Class: java/awt/EventQueue.class +INFO: Loading Class: java/awt/EventFilter$FilterAction.class +INFO: Loading Class: java/awt/EventFilter.class +INFO: Loading Class: java/awt/EventDispatchThread$HierarchyEventFilter.class +INFO: Loading Class: java/awt/EventDispatchThread$1.class +INFO: Loading Class: java/awt/EventDispatchThread.class +INFO: Loading Class: java/awt/Event.class +INFO: Loading Class: java/awt/Dimension.class +INFO: Loading Class: java/awt/Dialog$ModalityType.class +INFO: Loading Class: java/awt/Dialog$ModalExclusionType.class +INFO: Loading Class: java/awt/Dialog$3.class +INFO: Loading Class: java/awt/Dialog$1.class +INFO: Loading Class: java/awt/Dialog.class +INFO: Loading Class: java/awt/DefaultKeyboardFocusManager$TypeAheadMarker.class +INFO: Loading Class: java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.class +INFO: Loading Class: java/awt/DefaultKeyboardFocusManager$1.class +INFO: Loading Class: java/awt/DefaultKeyboardFocusManager.class +INFO: Loading Class: java/awt/DefaultFocusTraversalPolicy.class +INFO: Loading Class: java/awt/Cursor$1.class +INFO: Loading Class: java/awt/Cursor.class +INFO: Loading Class: java/awt/ContainerOrderFocusTraversalPolicy.class +INFO: Loading Class: java/awt/Container$MouseEventTargetFilter.class +INFO: Loading Class: java/awt/Container$EventTargetFilter.class +INFO: Loading Class: java/awt/Container$1.class +INFO: Loading Class: java/awt/Container.class +INFO: Loading Class: java/awt/Conditional.class +INFO: Loading Class: java/awt/Composite.class +INFO: Loading Class: java/awt/ComponentOrientation.class +INFO: Loading Class: java/awt/Component$DummyRequestFocusController.class +INFO: Loading Class: java/awt/Component$AWTTreeLock.class +INFO: Loading Class: java/awt/Component$3.class +INFO: Loading Class: java/awt/Component$1.class +INFO: Loading Class: java/awt/Component.class +INFO: Loading Class: java/awt/Color.class +INFO: Loading Class: java/awt/CardLayout.class +INFO: Loading Class: java/awt/Canvas.class +INFO: Loading Class: java/awt/BorderLayout.class +INFO: Loading Class: java/awt/BasicStroke.class +INFO: Loading Class: java/awt/AlphaComposite.class +INFO: Loading Class: java/awt/Adjustable.class +INFO: Loading Class: java/awt/ActiveEvent.class +INFO: Loading Class: java/awt/AWTKeyStroke$1.class +INFO: Loading Class: java/awt/AWTKeyStroke.class +INFO: Loading Class: java/awt/AWTEventMulticaster.class +INFO: Loading Class: java/awt/AWTEvent$2.class +INFO: Loading Class: java/awt/AWTEvent$1.class +INFO: Loading Class: java/awt/AWTEvent.class +INFO: Loading Class: java/applet/Applet.class +INFO: Loading Class: com/sun/swing/internal/plaf/basic/resources/basic.class +INFO: Loading Class: com/sun/java/swing/SwingUtilities3.class +INFO: Loading Class: com/apple/laf/resources/aqua.class +INFO: Loading Class: com/apple/laf/ScreenPopupFactory$1.class +INFO: Loading Class: com/apple/laf/ScreenPopupFactory.class +INFO: Loading Class: com/apple/laf/ScreenMenuPropertyHandler.class +INFO: Loading Class: com/apple/laf/ScreenMenuBarProvider.class +INFO: Loading Class: com/apple/laf/ScreenMenuBar.class +INFO: Loading Class: com/apple/laf/ClientPropertyApplicator$Property.class +INFO: Loading Class: com/apple/laf/ClientPropertyApplicator.class +INFO: Loading Class: com/apple/laf/AquaUtils$RecyclableSingletonFromDefaultConstructor.class +INFO: Loading Class: com/apple/laf/AquaUtils$RecyclableSingleton.class +INFO: Loading Class: com/apple/laf/AquaUtils$JComponentPainter.class +INFO: Loading Class: com/apple/laf/AquaUtils$6.class +INFO: Loading Class: com/apple/laf/AquaUtils$5.class +INFO: Loading Class: com/apple/laf/AquaUtils$2.class +INFO: Loading Class: com/apple/laf/AquaUtils.class +INFO: Loading Class: com/apple/laf/AquaUtilControlSize$Sizeable.class +INFO: Loading Class: com/apple/laf/AquaUtilControlSize$SizeVariant.class +INFO: Loading Class: com/apple/laf/AquaUtilControlSize$SizeDescriptor.class +INFO: Loading Class: com/apple/laf/AquaUtilControlSize$PropertySizeListener.class +INFO: Loading Class: com/apple/laf/AquaUtilControlSize.class +INFO: Loading Class: com/apple/laf/AquaToolBarUI$ToolBarBorder.class +INFO: Loading Class: com/apple/laf/AquaToolBarUI.class +INFO: Loading Class: com/apple/laf/AquaToolBarSeparatorUI.class +INFO: Loading Class: com/apple/laf/AquaTextFieldUI.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$SearchFieldPropertyListener.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch$SearchFieldBorder.class +INFO: Loading Class: com/apple/laf/AquaTextFieldSearch.class +INFO: Loading Class: com/apple/laf/AquaTextFieldBorder.class +INFO: Loading Class: com/apple/laf/AquaTextAreaUI.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderBorder$1.class +INFO: Loading Class: com/apple/laf/AquaTableHeaderBorder.class +INFO: Loading Class: com/apple/laf/AquaScrollRegionBorder.class +INFO: Loading Class: com/apple/laf/AquaScrollPaneUI$XYMouseWheelHandler.class +INFO: Loading Class: com/apple/laf/AquaScrollPaneUI.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI$TrackListener.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI$ScrollListener.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI$PropertyChangeHandler.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI$ModelListener.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI$1.class +INFO: Loading Class: com/apple/laf/AquaScrollBarUI.class +INFO: Loading Class: com/apple/laf/AquaRootPaneUI.class +INFO: Loading Class: com/apple/laf/AquaPopupMenuUI.class +INFO: Loading Class: com/apple/laf/AquaPopupMenuSeparatorUI.class +INFO: Loading Class: com/apple/laf/AquaPanelUI.class +INFO: Loading Class: com/apple/laf/AquaPainter$AquaSingleImagePainter.class +INFO: Loading Class: com/apple/laf/AquaPainter$AquaNineSlicingImagePainter.class +INFO: Loading Class: com/apple/laf/AquaPainter$1.class +INFO: Loading Class: com/apple/laf/AquaPainter.class +INFO: Loading Class: com/apple/laf/AquaMnemonicHandler$AltProcessor.class +INFO: Loading Class: com/apple/laf/AquaMnemonicHandler.class +INFO: Loading Class: com/apple/laf/AquaMenuUI$MenuDragMouseHandler.class +INFO: Loading Class: com/apple/laf/AquaMenuUI$AquaMouseInputHandler.class +INFO: Loading Class: com/apple/laf/AquaMenuUI.class +INFO: Loading Class: com/apple/laf/AquaMenuPainter$RecyclableBorder.class +INFO: Loading Class: com/apple/laf/AquaMenuPainter$Client.class +INFO: Loading Class: com/apple/laf/AquaMenuPainter.class +INFO: Loading Class: com/apple/laf/AquaMenuItemUI$IndeterminateListener.class +INFO: Loading Class: com/apple/laf/AquaMenuItemUI.class +INFO: Loading Class: com/apple/laf/AquaMenuBorder.class +INFO: Loading Class: com/apple/laf/AquaMenuBarUI.class +INFO: Loading Class: com/apple/laf/AquaMenuBarBorder.class +INFO: Loading Class: com/apple/laf/AquaLookAndFeel$3.class +INFO: Loading Class: com/apple/laf/AquaLookAndFeel$2.class +INFO: Loading Class: com/apple/laf/AquaLookAndFeel$1.class +INFO: Loading Class: com/apple/laf/AquaLookAndFeel.class +INFO: Loading Class: com/apple/laf/AquaListUI$MouseInputHandler.class +INFO: Loading Class: com/apple/laf/AquaListUI$FocusHandler.class +INFO: Loading Class: com/apple/laf/AquaListUI$AquaPropertyChangeHandler.class +INFO: Loading Class: com/apple/laf/AquaListUI$AquaHomeEndAction.class +INFO: Loading Class: com/apple/laf/AquaListUI.class +INFO: Loading Class: com/apple/laf/AquaLabelUI.class +INFO: Loading Class: com/apple/laf/AquaKeyBindings$SimpleBinding.class +INFO: Loading Class: com/apple/laf/AquaKeyBindings$LateBoundInputMap.class +INFO: Loading Class: com/apple/laf/AquaKeyBindings$BindingsProvider.class +INFO: Loading Class: com/apple/laf/AquaKeyBindings$AquaMultilineAction.class +INFO: Loading Class: com/apple/laf/AquaKeyBindings.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$SystemColorProxy.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$NamedImageSingleton.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$InvertableImageIcon.class +INFO: Loading Class: com/apple/laf/AquaImageFactory$IconUIResourceSingleton.class +INFO: Loading Class: com/apple/laf/AquaImageFactory.class +INFO: Loading Class: com/apple/laf/AquaIcon$SystemIconUIResourceSingleton.class +INFO: Loading Class: com/apple/laf/AquaIcon$SystemIconSingleton.class +INFO: Loading Class: com/apple/laf/AquaIcon$SystemIcon.class +INFO: Loading Class: com/apple/laf/AquaIcon$InvertableIcon.class +INFO: Loading Class: com/apple/laf/AquaIcon$CachingScalingIcon.class +INFO: Loading Class: com/apple/laf/AquaHighlighter$AquaHighlightPainter.class +INFO: Loading Class: com/apple/laf/AquaHighlighter$1.class +INFO: Loading Class: com/apple/laf/AquaHighlighter.class +INFO: Loading Class: com/apple/laf/AquaFonts$DerivedUIResourceFont.class +INFO: Loading Class: com/apple/laf/AquaFonts$7.class +INFO: Loading Class: com/apple/laf/AquaFonts$6.class +INFO: Loading Class: com/apple/laf/AquaFonts$5.class +INFO: Loading Class: com/apple/laf/AquaFonts$4.class +INFO: Loading Class: com/apple/laf/AquaFonts$3.class +INFO: Loading Class: com/apple/laf/AquaFonts$2.class +INFO: Loading Class: com/apple/laf/AquaFonts$1.class +INFO: Loading Class: com/apple/laf/AquaFonts.class +INFO: Loading Class: com/apple/laf/AquaFocusHandler$1.class +INFO: Loading Class: com/apple/laf/AquaFocusHandler.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$ComboBoxAction.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$AquaCustomComboTextField$1.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$AquaCustomComboTextField.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$AquaComboBoxLayoutManager.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$AquaComboBoxEditor.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$9.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$8.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$7.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$6.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$5.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$4.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$3.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$2.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$7.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$6.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$5.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$4.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$3.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$2.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12$1.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$12.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$11.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$10.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI$1.class +INFO: Loading Class: com/apple/laf/AquaComboBoxUI.class +INFO: Loading Class: com/apple/laf/AquaComboBoxRendererInternal.class +INFO: Loading Class: com/apple/laf/AquaComboBoxRenderer.class +INFO: Loading Class: com/apple/laf/AquaComboBoxPopup$1.class +INFO: Loading Class: com/apple/laf/AquaComboBoxPopup.class +INFO: Loading Class: com/apple/laf/AquaComboBoxButton$1.class +INFO: Loading Class: com/apple/laf/AquaComboBoxButton.class +INFO: Loading Class: com/apple/laf/AquaCaret.class +INFO: Loading Class: com/apple/laf/AquaButtonUI$AquaHierarchyButtonListener.class +INFO: Loading Class: com/apple/laf/AquaButtonUI$AquaButtonListener.class +INFO: Loading Class: com/apple/laf/AquaButtonUI.class +INFO: Loading Class: com/apple/laf/AquaButtonToggleUI.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$TypeSpecifier.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$SegmentedNamedBorder.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$SegmentedBorderDefinedTypeSpecifier.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$BorderDefinedTypeSpecifier$1.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$BorderDefinedTypeSpecifier.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$8.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$7.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$6.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$5.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$4.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$3.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$2.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes$1.class +INFO: Loading Class: com/apple/laf/AquaButtonExtendedTypes.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$Toolbar.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$Toggle.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$Named.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$Dynamic$1.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$Dynamic.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder$1.class +INFO: Loading Class: com/apple/laf/AquaButtonBorder.class +INFO: Loading Class: com/apple/laf/AquaBorder.class +INFO: Loading Class: com/apple/eawt/_OpenAppHandler.class +INFO: Loading Class: com/apple/eawt/_AppMenuBarHandler.class +INFO: Loading Class: com/apple/eawt/_AppEventLegacyHandler.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_UserSessionDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_SystemSleepDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_ScreenSleepDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_QuitDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_QueuingAppEventDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_PrintFileDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_PreferencesDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_OpenURIDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_OpenFileDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_OpenAppDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_NativeEvent.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_HiddenAppDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_BooleanAppEventMultiplexor.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AppReOpenedDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AppForegroundDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AppEventMultiplexor.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AppEventDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler$_AboutDispatcher.class +INFO: Loading Class: com/apple/eawt/_AppEventHandler.class +INFO: Loading Class: com/apple/eawt/QuitStrategy.class +INFO: Loading Class: com/apple/eawt/QuitHandler.class +INFO: Loading Class: com/apple/eawt/PrintFilesHandler.class +INFO: Loading Class: com/apple/eawt/PreferencesHandler.class +INFO: Loading Class: com/apple/eawt/OpenFilesHandler.class +INFO: Loading Class: com/apple/eawt/AppReOpenedListener.class +INFO: Loading Class: com/apple/eawt/AppEventListener.class +INFO: Loading Class: com/apple/eawt/AboutHandler.class +INFO: Loading Class: apple/laf/JRSUIUtils$TabbedPane.class +INFO: Loading Class: apple/laf/JRSUIUtils$NineSliceMetricsProvider.class +INFO: Loading Class: apple/laf/JRSUIUtils.class +INFO: Loading Class: apple/laf/JRSUIStateFactory.class +INFO: Loading Class: apple/laf/JRSUIState$ValueState.class +INFO: Loading Class: apple/laf/JRSUIState$ScrollBarState.class +INFO: Loading Class: apple/laf/JRSUIState.class +INFO: Loading Class: apple/laf/JRSUIControl$ThreadLocalByteBuffer.class +INFO: Loading Class: apple/laf/JRSUIControl$BufferState.class +INFO: Loading Class: apple/laf/JRSUIControl.class +INFO: Loading Class: apple/laf/JRSUIConstants$Widget.class +INFO: Loading Class: apple/laf/JRSUIConstants$State.class +INFO: Loading Class: apple/laf/JRSUIConstants$Size.class +INFO: Loading Class: apple/laf/JRSUIConstants$ShowArrows.class +INFO: Loading Class: apple/laf/JRSUIConstants$SegmentTrailingSeparator.class +INFO: Loading Class: apple/laf/JRSUIConstants$SegmentPosition.class +INFO: Loading Class: apple/laf/JRSUIConstants$ScrollBarPart.class +INFO: Loading Class: apple/laf/JRSUIConstants$PropertyEncoding.class +INFO: Loading Class: apple/laf/JRSUIConstants$Property.class +INFO: Loading Class: apple/laf/JRSUIConstants$Orientation.class +INFO: Loading Class: apple/laf/JRSUIConstants$NothingToScroll.class +INFO: Loading Class: apple/laf/JRSUIConstants$Key.class +INFO: Loading Class: apple/laf/JRSUIConstants$IndicatorOnly.class +INFO: Loading Class: apple/laf/JRSUIConstants$Hit.class +INFO: Loading Class: apple/laf/JRSUIConstants$FrameOnly.class +INFO: Loading Class: apple/laf/JRSUIConstants$Focused.class +INFO: Loading Class: apple/laf/JRSUIConstants$DoubleValue.class +INFO: Loading Class: apple/laf/JRSUIConstants$Animating.class +INFO: Loading Class: apple/laf/JRSUIConstants$AlignmentVertical.class +INFO: Loading Class: apple/laf/JRSUIConstants$AlignmentHorizontal.class +INFO: Loading Class: apple/laf/JRSUIConstants.class +INFO: Adding File to context from classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jsse.jar +INFO: Adding Archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jsse.jar +INFO: Loading Class: com/sun/net/ssl/internal/ssl/Provider.class +INFO: Loading Class: com/sun/net/ssl/internal/ssl/X509ExtendedTrustManager.class +INFO: Loading Class: sun/security/provider/Sun.class +INFO: Loading Class: sun/security/rsa/SunRsaSign.class +INFO: Loading Class: sun/security/ssl/AbstractKeyManagerWrapper.class +INFO: Loading Class: sun/security/ssl/AbstractTrustManagerWrapper.class +INFO: Loading Class: sun/security/ssl/Alerts.class +INFO: Loading Class: sun/security/ssl/AppInputStream.class +INFO: Loading Class: sun/security/ssl/AppOutputStream.class +INFO: Loading Class: sun/security/ssl/Authenticator.class +INFO: Loading Class: sun/security/ssl/BaseSSLSocketImpl.class +INFO: Loading Class: sun/security/ssl/ByteBufferInputStream.class +INFO: Loading Class: sun/security/ssl/CipherBox$1.class +INFO: Loading Class: sun/security/ssl/CipherBox.class +INFO: Loading Class: sun/security/ssl/CipherSuite$BulkCipher.class +INFO: Loading Class: sun/security/ssl/CipherSuite$CipherType.class +INFO: Loading Class: sun/security/ssl/CipherSuite$KeyExchange.class +INFO: Loading Class: sun/security/ssl/CipherSuite$MacAlg.class +INFO: Loading Class: sun/security/ssl/CipherSuite$PRF.class +INFO: Loading Class: sun/security/ssl/CipherSuite.class +INFO: Loading Class: sun/security/ssl/CipherSuiteList$1.class +INFO: Loading Class: sun/security/ssl/CipherSuiteList.class +INFO: Loading Class: sun/security/ssl/ClientHandshaker$1.class +INFO: Loading Class: sun/security/ssl/ClientHandshaker$2.class +INFO: Loading Class: sun/security/ssl/ClientHandshaker.class +INFO: Loading Class: sun/security/ssl/CloneableDigest.class +INFO: Loading Class: sun/security/ssl/Debug.class +INFO: Loading Class: sun/security/ssl/DHClientKeyExchange.class +INFO: Loading Class: sun/security/ssl/DHCrypt$ParametersHolder$1.class +INFO: Loading Class: sun/security/ssl/DHCrypt$ParametersHolder.class +INFO: Loading Class: sun/security/ssl/DHCrypt.class +INFO: Loading Class: sun/security/ssl/DummyX509KeyManager.class +INFO: Loading Class: sun/security/ssl/DummyX509TrustManager.class +INFO: Loading Class: sun/security/ssl/ECDHClientKeyExchange.class +INFO: Loading Class: sun/security/ssl/ECDHCrypt.class +INFO: Loading Class: sun/security/ssl/EngineArgs.class +INFO: Loading Class: sun/security/ssl/EngineInputRecord.class +INFO: Loading Class: sun/security/ssl/EngineOutputRecord.class +INFO: Loading Class: sun/security/ssl/EngineWriter.class +INFO: Loading Class: sun/security/ssl/EphemeralKeyManager$1.class +INFO: Loading Class: sun/security/ssl/EphemeralKeyManager$EphemeralKeyPair.class +INFO: Loading Class: sun/security/ssl/EphemeralKeyManager.class +INFO: Loading Class: sun/security/ssl/ExtensionType.class +INFO: Loading Class: sun/security/ssl/HandshakeHash.class +INFO: Loading Class: sun/security/ssl/HandshakeInStream.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$CertificateMsg.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$CertificateRequest.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$CertificateVerify$1.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$CertificateVerify.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$ClientHello.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$DH_ServerKeyExchange.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$DistinguishedName.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$ECDH_ServerKeyExchange.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$Finished.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$HelloRequest.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$RSA_ServerKeyExchange.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$ServerHello.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$ServerHelloDone.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage$ServerKeyExchange.class +INFO: Loading Class: sun/security/ssl/HandshakeMessage.class +INFO: Loading Class: sun/security/ssl/HandshakeOutStream.class +INFO: Loading Class: sun/security/ssl/Handshaker$1.class +INFO: Loading Class: sun/security/ssl/Handshaker$DelegatedTask.class +INFO: Loading Class: sun/security/ssl/Handshaker.class +INFO: Loading Class: sun/security/ssl/HelloExtension.class +INFO: Loading Class: sun/security/ssl/HelloExtensions.class +INFO: Loading Class: sun/security/ssl/InputRecord.class +INFO: Loading Class: sun/security/ssl/JsseJce$1.class +INFO: Loading Class: sun/security/ssl/JsseJce$SunCertificates$1.class +INFO: Loading Class: sun/security/ssl/JsseJce$SunCertificates.class +INFO: Loading Class: sun/security/ssl/JsseJce.class +INFO: Loading Class: sun/security/ssl/KerberosClientKeyExchange$1.class +INFO: Loading Class: sun/security/ssl/KerberosClientKeyExchange.class +INFO: Loading Class: sun/security/ssl/KeyManagerFactoryImpl$SunX509.class +INFO: Loading Class: sun/security/ssl/KeyManagerFactoryImpl$X509.class +INFO: Loading Class: sun/security/ssl/KeyManagerFactoryImpl.class +INFO: Loading Class: sun/security/ssl/krb5/KerberosClientKeyExchangeImpl$1.class +INFO: Loading Class: sun/security/ssl/krb5/KerberosClientKeyExchangeImpl$2.class +INFO: Loading Class: sun/security/ssl/krb5/KerberosClientKeyExchangeImpl$3.class +INFO: Loading Class: sun/security/ssl/krb5/KerberosClientKeyExchangeImpl.class +INFO: Loading Class: sun/security/ssl/krb5/KerberosPreMasterSecret.class +INFO: Loading Class: sun/security/ssl/krb5/Krb5ProxyImpl.class +INFO: Loading Class: sun/security/ssl/Krb5Helper$1.class +INFO: Loading Class: sun/security/ssl/Krb5Helper.class +INFO: Loading Class: sun/security/ssl/Krb5Proxy.class +INFO: Loading Class: sun/security/ssl/MAC.class +INFO: Loading Class: sun/security/ssl/OutputRecord.class +INFO: Loading Class: sun/security/ssl/ProtocolList.class +INFO: Loading Class: sun/security/ssl/ProtocolVersion.class +INFO: Loading Class: sun/security/ssl/RandomCookie.class +INFO: Loading Class: sun/security/ssl/Record.class +INFO: Loading Class: sun/security/ssl/RenegotiationInfoExtension.class +INFO: Loading Class: sun/security/ssl/RSAClientKeyExchange.class +INFO: Loading Class: sun/security/ssl/RSASignature.class +INFO: Loading Class: sun/security/ssl/SecureKey.class +INFO: Loading Class: sun/security/ssl/ServerHandshaker$1.class +INFO: Loading Class: sun/security/ssl/ServerHandshaker$2.class +INFO: Loading Class: sun/security/ssl/ServerHandshaker$3.class +INFO: Loading Class: sun/security/ssl/ServerHandshaker.class +INFO: Loading Class: sun/security/ssl/ServerNameExtension$UnknownServerName.class +INFO: Loading Class: sun/security/ssl/ServerNameExtension.class +INFO: Loading Class: sun/security/ssl/SessionId.class +INFO: Loading Class: sun/security/ssl/SignatureAlgorithmsExtension.class +INFO: Loading Class: sun/security/ssl/SignatureAndHashAlgorithm$HashAlgorithm.class +INFO: Loading Class: sun/security/ssl/SignatureAndHashAlgorithm$SignatureAlgorithm.class +INFO: Loading Class: sun/security/ssl/SignatureAndHashAlgorithm.class +INFO: Loading Class: sun/security/ssl/SSLAlgorithmConstraints$SupportedSignatureAlgorithmConstraints.class +INFO: Loading Class: sun/security/ssl/SSLAlgorithmConstraints.class +INFO: Loading Class: sun/security/ssl/SSLAlgorithmDecomposer$1.class +INFO: Loading Class: sun/security/ssl/SSLAlgorithmDecomposer.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$1.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$AbstractSSLContext.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$CustomizedSSLContext.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$DefaultSSLContext$1.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$DefaultSSLContext$2.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$DefaultSSLContext.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$TLS10Context.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$TLS11Context.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$TLS12Context.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl$TLSContext.class +INFO: Loading Class: sun/security/ssl/SSLContextImpl.class +INFO: Loading Class: sun/security/ssl/SSLEngineImpl.class +INFO: Loading Class: sun/security/ssl/SSLServerSocketFactoryImpl.class +INFO: Loading Class: sun/security/ssl/SSLServerSocketImpl.class +INFO: Loading Class: sun/security/ssl/SSLSessionContextImpl$1.class +INFO: Loading Class: sun/security/ssl/SSLSessionContextImpl$SessionCacheVisitor.class +INFO: Loading Class: sun/security/ssl/SSLSessionContextImpl.class +INFO: Loading Class: sun/security/ssl/SSLSessionImpl.class +INFO: Loading Class: sun/security/ssl/SSLSocketFactoryImpl.class +INFO: Loading Class: sun/security/ssl/SSLSocketImpl$NotifyHandshakeThread$1.class +INFO: Loading Class: sun/security/ssl/SSLSocketImpl$NotifyHandshakeThread.class +INFO: Loading Class: sun/security/ssl/SSLSocketImpl.class +INFO: Loading Class: sun/security/ssl/SunJSSE$1.class +INFO: Loading Class: sun/security/ssl/SunJSSE.class +INFO: Loading Class: sun/security/ssl/SunX509KeyManagerImpl$X509Credentials.class +INFO: Loading Class: sun/security/ssl/SunX509KeyManagerImpl.class +INFO: Loading Class: sun/security/ssl/SupportedEllipticCurvesExtension.class +INFO: Loading Class: sun/security/ssl/SupportedEllipticPointFormatsExtension.class +INFO: Loading Class: sun/security/ssl/TrustManagerFactoryImpl$1.class +INFO: Loading Class: sun/security/ssl/TrustManagerFactoryImpl$2.class +INFO: Loading Class: sun/security/ssl/TrustManagerFactoryImpl$PKIXFactory.class +INFO: Loading Class: sun/security/ssl/TrustManagerFactoryImpl$SimpleFactory.class +INFO: Loading Class: sun/security/ssl/TrustManagerFactoryImpl.class +INFO: Loading Class: sun/security/ssl/UnknownExtension.class +INFO: Loading Class: sun/security/ssl/Utilities.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl$1.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl$CheckResult.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl$CheckType.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl$EntryStatus.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl$KeyType.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl$SizedMap.class +INFO: Loading Class: sun/security/ssl/X509KeyManagerImpl.class +INFO: Loading Class: sun/security/ssl/X509TrustManagerImpl.class +INFO: Adding File to context from classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jce.jar +INFO: Adding Archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jce.jar +INFO: Loading Class: sun/security/internal/spec/TlsMasterSecretParameterSpec.class +INFO: Loading Class: sun/security/internal/spec/TlsKeyMaterialParameterSpec.class +INFO: Loading Class: sun/security/internal/spec/TlsKeyMaterialSpec.class +INFO: Loading Class: sun/security/internal/spec/TlsPrfParameterSpec.class +INFO: Loading Class: sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec$1.class +INFO: Loading Class: sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec.class +INFO: Loading Class: sun/security/internal/interfaces/TlsMasterSecret.class +INFO: Loading Class: javax/crypto/KeyAgreement.class +INFO: Loading Class: javax/crypto/SecretKeyFactory.class +INFO: Loading Class: javax/crypto/ExemptionMechanismSpi.class +INFO: Loading Class: javax/crypto/CipherOutputStream.class +INFO: Loading Class: javax/crypto/JarVerifier$1.class +INFO: Loading Class: javax/crypto/KeyAgreementSpi.class +INFO: Loading Class: javax/crypto/CryptoAllPermission.class +INFO: Loading Class: javax/crypto/JarVerifier.class +INFO: Loading Class: javax/crypto/spec/PSource.class +INFO: Loading Class: javax/crypto/spec/RC5ParameterSpec.class +INFO: Loading Class: javax/crypto/spec/RC2ParameterSpec.class +INFO: Loading Class: javax/crypto/spec/PBEKeySpec.class +INFO: Loading Class: javax/crypto/spec/GCMParameterSpec.class +INFO: Loading Class: javax/crypto/spec/SecretKeySpec.class +INFO: Loading Class: javax/crypto/spec/DESKeySpec.class +INFO: Loading Class: javax/crypto/spec/DHPrivateKeySpec.class +INFO: Loading Class: javax/crypto/spec/PSource$PSpecified.class +INFO: Loading Class: javax/crypto/spec/PBEParameterSpec.class +INFO: Loading Class: javax/crypto/spec/DHGenParameterSpec.class +INFO: Loading Class: javax/crypto/spec/OAEPParameterSpec.class +INFO: Loading Class: javax/crypto/spec/IvParameterSpec.class +INFO: Loading Class: javax/crypto/spec/DESedeKeySpec.class +INFO: Loading Class: javax/crypto/spec/DHParameterSpec.class +INFO: Loading Class: javax/crypto/spec/DHPublicKeySpec.class +INFO: Loading Class: javax/crypto/KeyGeneratorSpi.class +INFO: Loading Class: javax/crypto/SecretKeyFactorySpi.class +INFO: Loading Class: javax/crypto/CryptoPolicyParser$GrantEntry.class +INFO: Loading Class: javax/crypto/SealedObject.class +INFO: Loading Class: javax/crypto/ExemptionMechanism.class +INFO: Loading Class: javax/crypto/CryptoPermissionCollection.class +INFO: Loading Class: javax/crypto/JceSecurityManager.class +INFO: Loading Class: javax/crypto/JarVerifier$JarHolder.class +INFO: Loading Class: javax/crypto/BadPaddingException.class +INFO: Loading Class: javax/crypto/JceSecurity.class +INFO: Loading Class: javax/crypto/NullCipher.class +INFO: Loading Class: javax/crypto/ExemptionMechanismException.class +INFO: Loading Class: javax/crypto/JceSecurityManager$1.class +INFO: Loading Class: javax/crypto/CryptoPermission.class +INFO: Loading Class: javax/crypto/JarVerifier$2.class +INFO: Loading Class: javax/crypto/IllegalBlockSizeException.class +INFO: Loading Class: javax/crypto/Cipher.class +INFO: Loading Class: javax/crypto/NoSuchPaddingException.class +INFO: Loading Class: javax/crypto/KeyGenerator.class +INFO: Loading Class: javax/crypto/interfaces/DHPublicKey.class +INFO: Loading Class: javax/crypto/interfaces/DHPrivateKey.class +INFO: Loading Class: javax/crypto/interfaces/DHKey.class +INFO: Loading Class: javax/crypto/interfaces/PBEKey.class +INFO: Loading Class: javax/crypto/JceSecurity$2.class +INFO: Loading Class: javax/crypto/EncryptedPrivateKeyInfo.class +INFO: Loading Class: javax/crypto/CryptoPolicyParser$CryptoPermissionEntry.class +INFO: Loading Class: javax/crypto/extObjectInputStream.class +INFO: Loading Class: javax/crypto/ShortBufferException.class +INFO: Loading Class: javax/crypto/CipherInputStream.class +INFO: Loading Class: javax/crypto/CryptoAllPermissionCollection.class +INFO: Loading Class: javax/crypto/Mac.class +INFO: Loading Class: javax/crypto/CryptoPolicyParser.class +INFO: Loading Class: javax/crypto/CryptoPermissions.class +INFO: Loading Class: javax/crypto/CipherSpi.class +INFO: Loading Class: javax/crypto/SecretKey.class +INFO: Loading Class: javax/crypto/AEADBadTagException.class +INFO: Loading Class: javax/crypto/PermissionsEnumerator.class +INFO: Loading Class: javax/crypto/Cipher$Transform.class +INFO: Loading Class: javax/crypto/JceSecurity$1.class +INFO: Loading Class: javax/crypto/NullCipherSpi.class +INFO: Loading Class: javax/crypto/CryptoPolicyParser$ParsingException.class +INFO: Loading Class: javax/crypto/MacSpi.class +INFO: Adding File to context from classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/charsets.jar +INFO: Adding Archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/charsets.jar +INFO: Loading Class: sun/nio/cs/ext/Big5.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS$1.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS_2001$1.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS_2001$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS_2001$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/Big5_HKSCS_2001.class +INFO: Loading Class: sun/nio/cs/ext/Big5_Solaris.class +INFO: Loading Class: sun/nio/cs/ext/COMPOUND_TEXT.class +INFO: Loading Class: sun/nio/cs/ext/COMPOUND_TEXT_Decoder.class +INFO: Loading Class: sun/nio/cs/ext/COMPOUND_TEXT_Encoder.class +INFO: Loading Class: sun/nio/cs/ext/CompoundTextSupport$ControlSequence.class +INFO: Loading Class: sun/nio/cs/ext/CompoundTextSupport.class +INFO: Loading Class: sun/nio/cs/ext/DelegatableDecoder.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Decoder_DBCSONLY.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Decoder_EBCDIC.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Decoder_EUC_SIM.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Encoder_DBCSONLY.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Encoder_EBCDIC.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte$Encoder_EUC_SIM.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByte.class +INFO: Loading Class: sun/nio/cs/ext/DoubleByteEncoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_CN.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_LINUX$1.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_LINUX$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_LINUX$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_LINUX.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_Open$1.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_Open$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_Open$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_JP_Open.class +INFO: Loading Class: sun/nio/cs/ext/EUC_KR.class +INFO: Loading Class: sun/nio/cs/ext/EUC_TW$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_TW$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/EUC_TW.class +INFO: Loading Class: sun/nio/cs/ext/EUC_TWMapping.class +INFO: Loading Class: sun/nio/cs/ext/ExtendedCharsets.class +INFO: Loading Class: sun/nio/cs/ext/GB18030$1.class +INFO: Loading Class: sun/nio/cs/ext/GB18030$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/GB18030$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/GB18030.class +INFO: Loading Class: sun/nio/cs/ext/GBK.class +INFO: Loading Class: sun/nio/cs/ext/HKSCS$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/HKSCS$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/HKSCS.class +INFO: Loading Class: sun/nio/cs/ext/HKSCS2001Mapping.class +INFO: Loading Class: sun/nio/cs/ext/HKSCS_XPMapping.class +INFO: Loading Class: sun/nio/cs/ext/HKSCSMapping.class +INFO: Loading Class: sun/nio/cs/ext/IBM037.class +INFO: Loading Class: sun/nio/cs/ext/IBM1006.class +INFO: Loading Class: sun/nio/cs/ext/IBM1025.class +INFO: Loading Class: sun/nio/cs/ext/IBM1026.class +INFO: Loading Class: sun/nio/cs/ext/IBM1046.class +INFO: Loading Class: sun/nio/cs/ext/IBM1047.class +INFO: Loading Class: sun/nio/cs/ext/IBM1097.class +INFO: Loading Class: sun/nio/cs/ext/IBM1098.class +INFO: Loading Class: sun/nio/cs/ext/IBM1112.class +INFO: Loading Class: sun/nio/cs/ext/IBM1122.class +INFO: Loading Class: sun/nio/cs/ext/IBM1123.class +INFO: Loading Class: sun/nio/cs/ext/IBM1124.class +INFO: Loading Class: sun/nio/cs/ext/IBM1140.class +INFO: Loading Class: sun/nio/cs/ext/IBM1141.class +INFO: Loading Class: sun/nio/cs/ext/IBM1142.class +INFO: Loading Class: sun/nio/cs/ext/IBM1143.class +INFO: Loading Class: sun/nio/cs/ext/IBM1144.class +INFO: Loading Class: sun/nio/cs/ext/IBM1145.class +INFO: Loading Class: sun/nio/cs/ext/IBM1146.class +INFO: Loading Class: sun/nio/cs/ext/IBM1147.class +INFO: Loading Class: sun/nio/cs/ext/IBM1148.class +INFO: Loading Class: sun/nio/cs/ext/IBM1149.class +INFO: Loading Class: sun/nio/cs/ext/IBM1166.class +INFO: Loading Class: sun/nio/cs/ext/IBM1364.class +INFO: Loading Class: sun/nio/cs/ext/IBM1381.class +INFO: Loading Class: sun/nio/cs/ext/IBM1383.class +INFO: Loading Class: sun/nio/cs/ext/IBM273.class +INFO: Loading Class: sun/nio/cs/ext/IBM277.class +INFO: Loading Class: sun/nio/cs/ext/IBM278.class +INFO: Loading Class: sun/nio/cs/ext/IBM280.class +INFO: Loading Class: sun/nio/cs/ext/IBM284.class +INFO: Loading Class: sun/nio/cs/ext/IBM285.class +INFO: Loading Class: sun/nio/cs/ext/IBM290.class +INFO: Loading Class: sun/nio/cs/ext/IBM297.class +INFO: Loading Class: sun/nio/cs/ext/IBM300.class +INFO: Loading Class: sun/nio/cs/ext/IBM33722$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/IBM33722$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/IBM33722.class +INFO: Loading Class: sun/nio/cs/ext/IBM420.class +INFO: Loading Class: sun/nio/cs/ext/IBM424.class +INFO: Loading Class: sun/nio/cs/ext/IBM500.class +INFO: Loading Class: sun/nio/cs/ext/IBM833.class +INFO: Loading Class: sun/nio/cs/ext/IBM834$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/IBM834.class +INFO: Loading Class: sun/nio/cs/ext/IBM838.class +INFO: Loading Class: sun/nio/cs/ext/IBM856.class +INFO: Loading Class: sun/nio/cs/ext/IBM860.class +INFO: Loading Class: sun/nio/cs/ext/IBM861.class +INFO: Loading Class: sun/nio/cs/ext/IBM863.class +INFO: Loading Class: sun/nio/cs/ext/IBM864.class +INFO: Loading Class: sun/nio/cs/ext/IBM865.class +INFO: Loading Class: sun/nio/cs/ext/IBM868.class +INFO: Loading Class: sun/nio/cs/ext/IBM869.class +INFO: Loading Class: sun/nio/cs/ext/IBM870.class +INFO: Loading Class: sun/nio/cs/ext/IBM871.class +INFO: Loading Class: sun/nio/cs/ext/IBM875.class +INFO: Loading Class: sun/nio/cs/ext/IBM918.class +INFO: Loading Class: sun/nio/cs/ext/IBM921.class +INFO: Loading Class: sun/nio/cs/ext/IBM922.class +INFO: Loading Class: sun/nio/cs/ext/IBM930.class +INFO: Loading Class: sun/nio/cs/ext/IBM933.class +INFO: Loading Class: sun/nio/cs/ext/IBM935.class +INFO: Loading Class: sun/nio/cs/ext/IBM937.class +INFO: Loading Class: sun/nio/cs/ext/IBM939.class +INFO: Loading Class: sun/nio/cs/ext/IBM942.class +INFO: Loading Class: sun/nio/cs/ext/IBM942C.class +INFO: Loading Class: sun/nio/cs/ext/IBM943.class +INFO: Loading Class: sun/nio/cs/ext/IBM943C.class +INFO: Loading Class: sun/nio/cs/ext/IBM948.class +INFO: Loading Class: sun/nio/cs/ext/IBM949.class +INFO: Loading Class: sun/nio/cs/ext/IBM949C.class +INFO: Loading Class: sun/nio/cs/ext/IBM950.class +INFO: Loading Class: sun/nio/cs/ext/IBM964$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/IBM964$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/IBM964.class +INFO: Loading Class: sun/nio/cs/ext/IBM970.class +INFO: Loading Class: sun/nio/cs/ext/ISCII91$1.class +INFO: Loading Class: sun/nio/cs/ext/ISCII91$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/ISCII91$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/ISCII91.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_CN$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_CN.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_CN_CNS$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_CN_CNS.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_CN_GB$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_CN_GB.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_JP$1.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_JP$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_JP$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_JP.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_JP_2$CoderHolder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_JP_2.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_KR$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_KR$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/ISO2022_KR.class +INFO: Loading Class: sun/nio/cs/ext/ISO_8859_11.class +INFO: Loading Class: sun/nio/cs/ext/ISO_8859_3.class +INFO: Loading Class: sun/nio/cs/ext/ISO_8859_6.class +INFO: Loading Class: sun/nio/cs/ext/ISO_8859_8.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0201.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0208.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0208_MS5022X.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0208_MS932.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0208_Solaris.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0212.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0212_MS5022X.class +INFO: Loading Class: sun/nio/cs/ext/JIS_X_0212_Solaris.class +INFO: Loading Class: sun/nio/cs/ext/JISAutoDetect$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/JISAutoDetect.class +INFO: Loading Class: sun/nio/cs/ext/Johab.class +INFO: Loading Class: sun/nio/cs/ext/MacArabic.class +INFO: Loading Class: sun/nio/cs/ext/MacCentralEurope.class +INFO: Loading Class: sun/nio/cs/ext/MacCroatian.class +INFO: Loading Class: sun/nio/cs/ext/MacCyrillic.class +INFO: Loading Class: sun/nio/cs/ext/MacDingbat.class +INFO: Loading Class: sun/nio/cs/ext/MacGreek.class +INFO: Loading Class: sun/nio/cs/ext/MacHebrew.class +INFO: Loading Class: sun/nio/cs/ext/MacIceland.class +INFO: Loading Class: sun/nio/cs/ext/MacRoman.class +INFO: Loading Class: sun/nio/cs/ext/MacRomania.class +INFO: Loading Class: sun/nio/cs/ext/MacSymbol.class +INFO: Loading Class: sun/nio/cs/ext/MacThai.class +INFO: Loading Class: sun/nio/cs/ext/MacTurkish.class +INFO: Loading Class: sun/nio/cs/ext/MacUkraine.class +INFO: Loading Class: sun/nio/cs/ext/MS1255.class +INFO: Loading Class: sun/nio/cs/ext/MS1256.class +INFO: Loading Class: sun/nio/cs/ext/MS1258.class +INFO: Loading Class: sun/nio/cs/ext/MS50220.class +INFO: Loading Class: sun/nio/cs/ext/MS50221.class +INFO: Loading Class: sun/nio/cs/ext/MS874.class +INFO: Loading Class: sun/nio/cs/ext/MS932.class +INFO: Loading Class: sun/nio/cs/ext/MS932_0213$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/MS932_0213$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/MS932_0213.class +INFO: Loading Class: sun/nio/cs/ext/MS936.class +INFO: Loading Class: sun/nio/cs/ext/MS949.class +INFO: Loading Class: sun/nio/cs/ext/MS950.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS$1.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS_XP$1.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS_XP$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS_XP$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/MS950_HKSCS_XP.class +INFO: Loading Class: sun/nio/cs/ext/MSISO2022JP$CoderHolder.class +INFO: Loading Class: sun/nio/cs/ext/MSISO2022JP.class +INFO: Loading Class: sun/nio/cs/ext/PCK.class +INFO: Loading Class: sun/nio/cs/ext/SimpleEUCEncoder.class +INFO: Loading Class: sun/nio/cs/ext/SJIS.class +INFO: Loading Class: sun/nio/cs/ext/SJIS_0213$1.class +INFO: Loading Class: sun/nio/cs/ext/SJIS_0213$Decoder.class +INFO: Loading Class: sun/nio/cs/ext/SJIS_0213$Encoder.class +INFO: Loading Class: sun/nio/cs/ext/SJIS_0213.class +INFO: Loading Class: sun/nio/cs/ext/TIS_620.class +INFO: Loading Class: sun/awt/HKSCS.class +INFO: Loading Class: sun/awt/motif/X11GBK.class +INFO: Loading Class: sun/awt/motif/X11GB2312$Decoder.class +INFO: Loading Class: sun/awt/motif/X11GB2312.class +INFO: Loading Class: sun/awt/motif/X11KSC5601$Decoder.class +INFO: Loading Class: sun/awt/motif/X11KSC5601$Encoder.class +INFO: Loading Class: sun/awt/motif/X11GB2312$Encoder.class +INFO: Loading Class: sun/awt/motif/X11GBK$Encoder.class +INFO: Loading Class: sun/awt/motif/X11KSC5601.class +INFO: Adding File to context from classpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfr.jar +INFO: Adding Archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/jfr.jar +INFO: Loading Class: com/oracle/jrockit/jfr/client/EventSettingsBuilder.class +INFO: Loading Class: com/oracle/jrockit/jfr/client/FlightRecorderClient.class +INFO: Loading Class: com/oracle/jrockit/jfr/client/FlightRecordingClient$FlightRecordingClientStream.class +INFO: Loading Class: com/oracle/jrockit/jfr/client/FlightRecordingClient.class +INFO: Loading Class: com/oracle/jrockit/jfr/ContentType.class +INFO: Loading Class: com/oracle/jrockit/jfr/DataType.class +INFO: Loading Class: com/oracle/jrockit/jfr/DelegatingDynamicRequestableEvent.class +INFO: Loading Class: com/oracle/jrockit/jfr/DurationEvent.class +INFO: Loading Class: com/oracle/jrockit/jfr/DynamicEventToken.class +INFO: Loading Class: com/oracle/jrockit/jfr/DynamicValue.class +INFO: Loading Class: com/oracle/jrockit/jfr/EventDefinition.class +INFO: Loading Class: com/oracle/jrockit/jfr/EventInfo.class +INFO: Loading Class: com/oracle/jrockit/jfr/EventToken.class +INFO: Loading Class: com/oracle/jrockit/jfr/FlightRecorder.class +INFO: Loading Class: com/oracle/jrockit/jfr/InstantEvent.class +INFO: Loading Class: com/oracle/jrockit/jfr/InvalidEventDefinitionException.class +INFO: Loading Class: com/oracle/jrockit/jfr/InvalidValueException.class +INFO: Loading Class: com/oracle/jrockit/jfr/management/FlightRecorderMBean.class +INFO: Loading Class: com/oracle/jrockit/jfr/management/FlightRecordingMBean.class +INFO: Loading Class: com/oracle/jrockit/jfr/management/NoSuchRecordingException.class +INFO: Loading Class: com/oracle/jrockit/jfr/NoSuchEventException.class +INFO: Loading Class: com/oracle/jrockit/jfr/Producer.class +INFO: Loading Class: com/oracle/jrockit/jfr/RequestableEvent.class +INFO: Loading Class: com/oracle/jrockit/jfr/RequestDelegate.class +INFO: Loading Class: com/oracle/jrockit/jfr/TimedEvent.class +INFO: Loading Class: com/oracle/jrockit/jfr/Transition.class +INFO: Loading Class: com/oracle/jrockit/jfr/UseConstantPool.class +INFO: Loading Class: com/oracle/jrockit/jfr/ValueDefinition.class +INFO: Loading Class: jdk/jfr/events/ErrorThrownEvent.class +INFO: Loading Class: jdk/jfr/events/ExceptionThrownEvent.class +INFO: Loading Class: jdk/jfr/events/FileReadEvent.class +INFO: Loading Class: jdk/jfr/events/FileWriteEvent.class +INFO: Loading Class: jdk/jfr/events/SocketReadEvent.class +INFO: Loading Class: jdk/jfr/events/SocketWriteEvent.class +INFO: Loading Class: jdk/jfr/events/ThrowablesEvent.class +INFO: Loading Class: oracle/jrockit/jfr/ActiveRecordingEvent.class +INFO: Loading Class: oracle/jrockit/jfr/ActiveSettingEvent.class +INFO: Loading Class: oracle/jrockit/jfr/ChunksChannel.class +INFO: Loading Class: oracle/jrockit/jfr/DCmd$1.class +INFO: Loading Class: oracle/jrockit/jfr/DCmd$RecordingIdentifier.class +INFO: Loading Class: oracle/jrockit/jfr/DCmd$Unit.class +INFO: Loading Class: oracle/jrockit/jfr/DCmd.class +INFO: Loading Class: oracle/jrockit/jfr/DCmdCheck$1.class +INFO: Loading Class: oracle/jrockit/jfr/DCmdCheck.class +INFO: Loading Class: oracle/jrockit/jfr/DCmdDump.class +INFO: Loading Class: oracle/jrockit/jfr/DCmdException.class +INFO: Loading Class: oracle/jrockit/jfr/DCmdStart.class +INFO: Loading Class: oracle/jrockit/jfr/DCmdStop.class +INFO: Loading Class: oracle/jrockit/jfr/events/Bits.class +INFO: Loading Class: oracle/jrockit/jfr/events/ContentTypeImpl.class +INFO: Loading Class: oracle/jrockit/jfr/events/DataStructureDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/events/DynamicValueDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventControl.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandler.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerCreator$1.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerCreator$2.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerCreator$EventInfoClassLoader.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerCreator.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerImpl$1$1.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerImpl$1.class +INFO: Loading Class: oracle/jrockit/jfr/events/EventHandlerImpl.class +INFO: Loading Class: oracle/jrockit/jfr/events/JavaEventDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/events/JavaProducerDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/events/RequestableEventEnvironment.class +INFO: Loading Class: oracle/jrockit/jfr/events/ValueDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/FileChannelImplInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/FileInputStreamInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/FileOutputStreamInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/FlightRecorder.class +INFO: Loading Class: oracle/jrockit/jfr/FlightRecording.class +INFO: Loading Class: oracle/jrockit/jfr/jdkevents/ThrowableTracer.class +INFO: Loading Class: oracle/jrockit/jfr/jdkevents/throwabletransform/ConstructorTracerWriter.class +INFO: Loading Class: oracle/jrockit/jfr/jdkevents/throwabletransform/ConstructorWriter.class +INFO: Loading Class: oracle/jrockit/jfr/JFR$1.class +INFO: Loading Class: oracle/jrockit/jfr/JFR$2.class +INFO: Loading Class: oracle/jrockit/jfr/JFR$3.class +INFO: Loading Class: oracle/jrockit/jfr/JFR$4.class +INFO: Loading Class: oracle/jrockit/jfr/JFR.class +INFO: Loading Class: oracle/jrockit/jfr/JFRImpl$1.class +INFO: Loading Class: oracle/jrockit/jfr/JFRImpl.class +INFO: Loading Class: oracle/jrockit/jfr/JFRStats.class +INFO: Loading Class: oracle/jrockit/jfr/Logger$1.class +INFO: Loading Class: oracle/jrockit/jfr/Logger.class +INFO: Loading Class: oracle/jrockit/jfr/MetaProducer.class +INFO: Loading Class: oracle/jrockit/jfr/MsgLevel.class +INFO: Loading Class: oracle/jrockit/jfr/NativeEventControl.class +INFO: Loading Class: oracle/jrockit/jfr/NativeJFRStats.class +INFO: Loading Class: oracle/jrockit/jfr/NativeOptions.class +INFO: Loading Class: oracle/jrockit/jfr/NativeProducerDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/NoSuchProducerException.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/EventDefaultType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/EventDescriptorType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/EventSettingType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/JFRMBeanType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/JFRStatsType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/LazyImmutableJFRMBeanType$ImmutableCompositeData.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/LazyImmutableJFRMBeanType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/Member.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/PresetFileType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/ProducerDescriptorType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/RecordingOptionsType.class +INFO: Loading Class: oracle/jrockit/jfr/openmbean/RecordingType.class +INFO: Loading Class: oracle/jrockit/jfr/Options.class +INFO: Loading Class: oracle/jrockit/jfr/parser/AbstractStructProxy$1.class +INFO: Loading Class: oracle/jrockit/jfr/parser/AbstractStructProxy.class +INFO: Loading Class: oracle/jrockit/jfr/parser/BufferLostEvent.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ChunkParser$1.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ChunkParser$2.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ChunkParser$3.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ChunkParser.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ContentTypeDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ContentTypeResolver.class +INFO: Loading Class: oracle/jrockit/jfr/parser/EventData.class +INFO: Loading Class: oracle/jrockit/jfr/parser/EventProxy.class +INFO: Loading Class: oracle/jrockit/jfr/parser/FLREvent.class +INFO: Loading Class: oracle/jrockit/jfr/parser/FLREventInfo.class +INFO: Loading Class: oracle/jrockit/jfr/parser/FLRInput.class +INFO: Loading Class: oracle/jrockit/jfr/parser/FLRProducer.class +INFO: Loading Class: oracle/jrockit/jfr/parser/FLRStruct.class +INFO: Loading Class: oracle/jrockit/jfr/parser/FLRValueInfo.class +INFO: Loading Class: oracle/jrockit/jfr/parser/MappedFLRInput.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ParseException.class +INFO: Loading Class: oracle/jrockit/jfr/parser/Parser$1.class +INFO: Loading Class: oracle/jrockit/jfr/parser/Parser.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ProducerData.class +INFO: Loading Class: oracle/jrockit/jfr/parser/RandomAccessFileFLRInput.class +INFO: Loading Class: oracle/jrockit/jfr/parser/SubStruct.class +INFO: Loading Class: oracle/jrockit/jfr/parser/ValueData.class +INFO: Loading Class: oracle/jrockit/jfr/Process.class +INFO: Loading Class: oracle/jrockit/jfr/ProducerDescriptor.class +INFO: Loading Class: oracle/jrockit/jfr/RandomAccessFileInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/Recording$1.class +INFO: Loading Class: oracle/jrockit/jfr/Recording$2.class +INFO: Loading Class: oracle/jrockit/jfr/Recording$3.class +INFO: Loading Class: oracle/jrockit/jfr/Recording.class +INFO: Loading Class: oracle/jrockit/jfr/RecordingOptions.class +INFO: Loading Class: oracle/jrockit/jfr/RecordingOptionsImpl.class +INFO: Loading Class: oracle/jrockit/jfr/RecordingStream.class +INFO: Loading Class: oracle/jrockit/jfr/Repository$1.class +INFO: Loading Class: oracle/jrockit/jfr/Repository$2.class +INFO: Loading Class: oracle/jrockit/jfr/Repository$3.class +INFO: Loading Class: oracle/jrockit/jfr/Repository$4.class +INFO: Loading Class: oracle/jrockit/jfr/Repository.class +INFO: Loading Class: oracle/jrockit/jfr/RepositoryChunk$1.class +INFO: Loading Class: oracle/jrockit/jfr/RepositoryChunk$2.class +INFO: Loading Class: oracle/jrockit/jfr/RepositoryChunk$3.class +INFO: Loading Class: oracle/jrockit/jfr/RepositoryChunk$4.class +INFO: Loading Class: oracle/jrockit/jfr/RepositoryChunk$5.class +INFO: Loading Class: oracle/jrockit/jfr/RepositoryChunk.class +INFO: Loading Class: oracle/jrockit/jfr/settings/EventDefault.class +INFO: Loading Class: oracle/jrockit/jfr/settings/EventDefaultSet.class +INFO: Loading Class: oracle/jrockit/jfr/settings/EventSetting.class +INFO: Loading Class: oracle/jrockit/jfr/settings/EventSettings.class +INFO: Loading Class: oracle/jrockit/jfr/settings/JFCParser$1.class +INFO: Loading Class: oracle/jrockit/jfr/settings/JFCParser$ConfigurationHandler.class +INFO: Loading Class: oracle/jrockit/jfr/settings/JFCParser$RethrowErrorHandler.class +INFO: Loading Class: oracle/jrockit/jfr/settings/JFCParser.class +INFO: Loading Class: oracle/jrockit/jfr/settings/PresetFile$1.class +INFO: Loading Class: oracle/jrockit/jfr/settings/PresetFile$PresetFileFilter.class +INFO: Loading Class: oracle/jrockit/jfr/settings/PresetFile$PresetProxy.class +INFO: Loading Class: oracle/jrockit/jfr/settings/PresetFile.class +INFO: Loading Class: oracle/jrockit/jfr/settings/StringParse.class +INFO: Loading Class: oracle/jrockit/jfr/Settings$Aggregator.class +INFO: Loading Class: oracle/jrockit/jfr/Settings.class +INFO: Loading Class: oracle/jrockit/jfr/SocketChannelImplInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/SocketInputStreamInstrumentor$AbstractPlainSocketImpl.class +INFO: Loading Class: oracle/jrockit/jfr/SocketInputStreamInstrumentor$InetAddress.class +INFO: Loading Class: oracle/jrockit/jfr/SocketInputStreamInstrumentor$InetAddressHolder.class +INFO: Loading Class: oracle/jrockit/jfr/SocketInputStreamInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/SocketOutputStreamInstrumentor$AbstractPlainSocketImpl.class +INFO: Loading Class: oracle/jrockit/jfr/SocketOutputStreamInstrumentor$InetAddress.class +INFO: Loading Class: oracle/jrockit/jfr/SocketOutputStreamInstrumentor$InetAddressHolder.class +INFO: Loading Class: oracle/jrockit/jfr/SocketOutputStreamInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/StringConstantPool$1.class +INFO: Loading Class: oracle/jrockit/jfr/StringConstantPool.class +INFO: Loading Class: oracle/jrockit/jfr/ThrowableInstrumentor.class +INFO: Loading Class: oracle/jrockit/jfr/Timing.class +INFO: Loading Class: oracle/jrockit/jfr/tools/ConCatRepository$1.class +INFO: Loading Class: oracle/jrockit/jfr/tools/ConCatRepository.class +INFO: Loading Class: oracle/jrockit/jfr/VMJFR$1.class +INFO: Loading Class: oracle/jrockit/jfr/VMJFR$2.class +INFO: Loading Class: oracle/jrockit/jfr/VMJFR$JILogAdapter.class +INFO: Loading Class: oracle/jrockit/jfr/VMJFR$ThreadBuffer.class +INFO: Loading Class: oracle/jrockit/jfr/VMJFR.class +INFO: Adding Archive: /Users/mminaie/development/minecraft/PrimalSorcery/.gradle/minecraft/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerHeldItem.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerBipedArmor.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerSaddle.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerSlimeGel.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerSheepWool.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerStrayClothing.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerWolfCollar.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerWitherAura.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPlayer.class +INFO: Loading Class: net/minecraft/client/shader/ShaderDefault.class +INFO: Loading Class: net/minecraft/client/util/JsonBlendingMode.class +INFO: Loading Class: net/minecraft/client/shader/ShaderGroup.class +INFO: Loading Class: net/minecraft/client/shader/ShaderManager.class +INFO: Loading Class: net/minecraft/client/shader/Shader.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecart$Type.class +INFO: Loading Class: net/minecraft/client/shader/ShaderLinkHelper.class +INFO: Loading Class: net/minecraft/client/shader/ShaderLoader.class +INFO: Loading Class: net/minecraft/client/shader/ShaderUniform.class +INFO: Loading Class: net/minecraft/client/renderer/texture/AbstractTexture.class +INFO: Loading Class: net/minecraft/client/renderer/ThreadDownloadImageData.class +INFO: Loading Class: net/minecraft/client/renderer/texture/DynamicTexture.class +INFO: Loading Class: net/minecraft/client/renderer/texture/LayeredColorMaskTexture.class +INFO: Loading Class: net/minecraft/client/renderer/texture/ITextureMapPopulator.class +INFO: Loading Class: net/minecraft/client/renderer/texture/PngSizeInfo.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityChest$1.class +INFO: Loading Class: net/minecraft/client/renderer/texture/LayeredTexture.class +INFO: Loading Class: net/minecraft/client/renderer/texture/Stitcher.class +INFO: Loading Class: net/minecraft/client/renderer/texture/SimpleTexture.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureMap.class +INFO: Loading Class: net/minecraft/client/renderer/StitcherException.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureManager.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureAtlasSprite.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureUtil.class +INFO: Loading Class: net/minecraft/client/renderer/texture/ITextureObject.class +INFO: Loading Class: net/minecraft/client/renderer/texture/ITickableTextureObject.class +INFO: Loading Class: net/minecraft/client/renderer/texture/ITickable.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/VertexBuffer.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/DefaultVertexFormats.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/VertexFormat.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/VertexFormatElement.class +INFO: Loading Class: net/minecraft/client/resources/ResourceIndex.class +INFO: Loading Class: net/minecraft/client/resources/AbstractResourcePack.class +INFO: Loading Class: net/minecraft/client/resources/DefaultResourcePack.class +INFO: Loading Class: net/minecraft/client/resources/DefaultPlayerSkin.class +INFO: Loading Class: net/minecraft/client/resources/FallbackResourceManager.class +INFO: Loading Class: net/minecraft/client/resources/ResourceIndexFolder.class +INFO: Loading Class: net/minecraft/client/resources/FolderResourcePack.class +INFO: Loading Class: net/minecraft/client/resources/FileResourcePack.class +INFO: Loading Class: net/minecraft/client/resources/GrassColorReloadListener.class +INFO: Loading Class: net/minecraft/client/resources/FoliageColorReloadListener.class +INFO: Loading Class: net/minecraft/client/resources/IResource.class +INFO: Loading Class: net/minecraft/client/resources/IReloadableResourceManager.class +INFO: Loading Class: net/minecraft/client/resources/IResourceManagerReloadListener.class +INFO: Loading Class: net/minecraft/client/resources/IResourceManager.class +INFO: Loading Class: net/minecraft/client/resources/LegacyV2Adapter.class +INFO: Loading Class: net/minecraft/client/resources/IResourcePack.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackRepository.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackFileNotFoundException.class +INFO: Loading Class: net/minecraft/client/resources/SimpleResource.class +INFO: Loading Class: net/minecraft/client/resources/SimpleReloadableResourceManager.class +INFO: Loading Class: net/minecraft/client/gui/GuiCommandBlock$1.class +INFO: Loading Class: net/minecraft/client/resources/I18n.class +INFO: Loading Class: net/minecraft/client/gui/GuiCommandBlock$2.class +INFO: Loading Class: net/minecraft/client/resources/SkinManager.class +INFO: Loading Class: net/minecraft/client/resources/Language.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFlame$Factory.class +INFO: Loading Class: net/minecraft/client/resources/Locale.class +INFO: Loading Class: net/minecraft/client/resources/LanguageManager.class +INFO: Loading Class: net/minecraft/client/resources/data/BaseMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/util/text/TextFormatting.class +INFO: Loading Class: net/minecraft/client/resources/data/IMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/crash/CrashReport.class +INFO: Loading Class: net/minecraft/client/resources/data/IMetadataSection.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory.class +INFO: Loading Class: net/minecraft/client/resources/data/AnimationFrame.class +INFO: Loading Class: net/minecraft/crash/ICrashReportDetail.class +INFO: Loading Class: net/minecraft/client/resources/data/MetadataSerializer.class +INFO: Loading Class: net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/util/ReportedException.class +INFO: Loading Class: net/minecraft/client/resources/data/AnimationMetadataSection.class +INFO: Loading Class: net/minecraft/util/ChatAllowedCharacters.class +INFO: Loading Class: net/minecraft/client/resources/data/FontMetadataSection.class +INFO: Loading Class: net/minecraft/util/Util.class +INFO: Loading Class: net/minecraft/advancements/Advancement.class +INFO: Loading Class: net/minecraft/advancements/AdvancementList.class +INFO: Loading Class: net/minecraft/client/multiplayer/ServerData$ServerResourceMode.class +INFO: Loading Class: net/minecraft/client/resources/data/FontMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/advancements/AdvancementProgress.class +INFO: Loading Class: net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/advancements/AdvancementRewards.class +INFO: Loading Class: net/minecraft/client/resources/data/LanguageMetadataSection.class +INFO: Loading Class: net/minecraft/advancements/CriteriaTriggers.class +INFO: Loading Class: net/minecraft/client/resources/data/PackMetadataSection.class +INFO: Loading Class: net/minecraft/advancements/Criterion.class +INFO: Loading Class: net/minecraft/advancements/CriterionProgress.class +INFO: Loading Class: net/minecraft/advancements/ICriterionTrigger.class +INFO: Loading Class: net/minecraft/client/resources/data/PackMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/advancements/ICriterionInstance.class +INFO: Loading Class: net/minecraft/client/resources/data/TextureMetadataSection.class +INFO: Loading Class: net/minecraft/advancements/DisplayInfo.class +INFO: Loading Class: net/minecraft/advancements/FrameType.class +INFO: Loading Class: net/minecraft/advancements/AdvancementTreeNode.class +INFO: Loading Class: net/minecraft/client/resources/data/TextureMetadataSectionSerializer.class +INFO: Loading Class: net/minecraft/advancements/critereon/AbstractCriterionInstance.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelRotation.class +INFO: Loading Class: net/minecraft/advancements/critereon/BredAnimalsTrigger.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/IBakedModel.class +INFO: Loading Class: net/minecraft/advancements/critereon/BrewedPotionTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/ChangeDimensionTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/ConstructBeaconTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/ConsumeItemTrigger.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BuiltInModel.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelManager.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBakery.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/MultipartBakedModel.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelResourceLocation.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/WeightedBakedModel.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/SimpleBakedModel.class +INFO: Loading Class: net/minecraft/client/audio/MovingSound.class +INFO: Loading Class: net/minecraft/client/audio/PositionedSound.class +INFO: Loading Class: net/minecraft/client/audio/GuardianSound.class +INFO: Loading Class: net/minecraft/inventory/ContainerHorseInventory$1.class +INFO: Loading Class: net/minecraft/client/audio/ElytraSound.class +INFO: Loading Class: net/minecraft/world/GameRules$Value.class +INFO: Loading Class: net/minecraft/client/audio/MovingSoundMinecartRiding.class +INFO: Loading Class: net/minecraft/client/audio/MovingSoundMinecart.class +INFO: Loading Class: net/minecraft/client/audio/Sound.class +INFO: Loading Class: net/minecraft/client/audio/PositionedSoundRecord.class +INFO: Loading Class: net/minecraft/client/audio/SoundListSerializer.class +INFO: Loading Class: net/minecraft/world/GameRules$ValueType.class +INFO: Loading Class: net/minecraft/client/audio/SoundList.class +INFO: Loading Class: net/minecraft/client/audio/ITickableSound.class +INFO: Loading Class: net/minecraft/client/audio/ISound.class +INFO: Loading Class: net/minecraft/client/util/SearchTree.class +INFO: Loading Class: net/minecraft/client/util/ISearchTree.class +INFO: Loading Class: net/minecraft/client/util/SearchTreeManager.class +INFO: Loading Class: net/minecraft/client/util/SuffixArray.class +INFO: Loading Class: net/minecraft/inventory/ContainerHorseInventory$2.class +INFO: Loading Class: net/minecraft/entity/passive/AbstractHorse$1.class +INFO: Loading Class: net/minecraft/client/renderer/BufferBuilder$2.class +INFO: Loading Class: net/minecraft/client/renderer/BufferBuilder$1.class +INFO: Loading Class: net/minecraft/server/integrated/IntegratedServer.class +INFO: Loading Class: net/minecraft/server/integrated/IntegratedPlayerList.class +INFO: Loading Class: net/minecraft/client/network/LanServerInfo.class +INFO: Loading Class: net/minecraft/server/integrated/IntegratedServerCommandManager.class +INFO: Loading Class: net/minecraft/client/multiplayer/ThreadLanServerPing.class +INFO: Loading Class: net/minecraft/client/network/LanServerDetector.class +INFO: Loading Class: net/minecraft/client/audio/MusicTicker.class +INFO: Loading Class: net/minecraft/client/audio/ISoundEventListener.class +INFO: Loading Class: net/minecraft/client/audio/SoundManager.class +INFO: Loading Class: net/minecraft/client/audio/SoundRegistry.class +INFO: Loading Class: net/minecraft/client/audio/SoundHandler.class +INFO: Loading Class: net/minecraft/client/audio/ISoundEventAccessor.class +INFO: Loading Class: net/minecraft/client/audio/SoundEventAccessor.class +INFO: Loading Class: net/minecraft/client/tutorial/CompletedTutorialStep.class +INFO: Loading Class: net/minecraft/client/renderer/BufferBuilder$State.class +INFO: Loading Class: net/minecraft/client/tutorial/FindTreeStep.class +INFO: Loading Class: net/minecraft/client/tutorial/CraftPlanksStep.class +INFO: Loading Class: net/minecraft/client/tutorial/OpenInventoryStep.class +INFO: Loading Class: net/minecraft/client/tutorial/MovementStep.class +INFO: Loading Class: net/minecraft/client/tutorial/Tutorial.class +INFO: Loading Class: net/minecraft/client/tutorial/PunchTreeStep.class +INFO: Loading Class: net/minecraft/client/tutorial/ITutorialStep.class +INFO: Loading Class: net/minecraft/client/tutorial/TutorialSteps.class +INFO: Loading Class: net/minecraft/client/renderer/Vector3d.class +INFO: Loading Class: net/minecraft/client/renderer/Matrix4f.class +INFO: Loading Class: net/minecraft/client/renderer/OpenGlHelper.class +INFO: Loading Class: net/minecraft/client/util/RecipeBookClient.class +INFO: Loading Class: net/minecraft/advancements/critereon/TickTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/TickTrigger$Listeners.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecart$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleRain$Factory.class +INFO: Loading Class: net/minecraft/advancements/critereon/LevitationTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/LevitationTrigger$Listeners.class +INFO: Loading Class: net/minecraft/item/Item$ToolMaterial.class +INFO: Loading Class: net/minecraft/realms/RealmsClickableScrolledSelectionList.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEnderman$AIFindPlayer.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock.class +INFO: Loading Class: net/minecraft/block/BlockSand$EnumType.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEnderman$AITakeBlock.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderZombie$1.class +INFO: Loading Class: net/minecraft/entity/item/EntityPainting$EnumArt.class +INFO: Loading Class: net/minecraft/client/network/LanServerDetector$LanServerList.class +INFO: Loading Class: net/minecraft/realms/RealmsConnect$1.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$4.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$2.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiChat$ChatTabCompleter.class +INFO: Loading Class: net/minecraft/world/storage/MapDecoration$Type.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayerDigging$Action.class +INFO: Loading Class: net/minecraft/util/Mirror$1.class +INFO: Loading Class: net/minecraft/client/network/LanServerDetector$ThreadLanServerFind.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$PooledMutableBlockPos.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$MutableBlockPos.class +INFO: Loading Class: net/minecraft/block/BlockTorch$2.class +INFO: Loading Class: net/minecraft/block/BlockTorch$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$9.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateScore$Action.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerLoginServer$LoginState.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove.class +INFO: Loading Class: net/minecraft/item/Item$14.class +INFO: Loading Class: net/minecraft/item/Item$15.class +INFO: Loading Class: net/minecraft/item/Item$16.class +INFO: Loading Class: net/minecraft/item/Item$17.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayerMP$1.class +INFO: Loading Class: net/minecraft/item/Item$1.class +INFO: Loading Class: net/minecraft/item/Item$10.class +INFO: Loading Class: net/minecraft/item/Item$11.class +INFO: Loading Class: net/minecraft/item/Item$12.class +INFO: Loading Class: net/minecraft/item/Item$13.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEnderman$1.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerLoginServer$1.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerLoginServer$2.class +INFO: Loading Class: net/minecraft/world/biome/BiomeTaiga$Type.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStructure$2.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStructure$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStructure$3.class +INFO: Loading Class: net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleCrit$MagicFactory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleCrit$Factory.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer.class +INFO: Loading Class: net/minecraft/client/resources/SkinManager$SkinAvailableCallback.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/VisGraph$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$1.class +INFO: Loading Class: net/minecraft/block/BlockTrapDoor$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiKeyBindingList$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry.class +INFO: Loading Class: net/minecraft/client/gui/GuiKeyBindingList$KeyEntry.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$EmeraldForItems.class +INFO: Loading Class: net/minecraft/block/BlockTrapDoor$DoorHalf.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$ITradeList.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager$PriceInfo.class +INFO: Loading Class: net/minecraft/client/gui/GuiIngame$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntitySheep$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntitySheep$2.class +INFO: Loading Class: net/minecraft/init/Bootstrap$7$1.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackListEntry$1.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockPattern$CacheLoader.class +INFO: Loading Class: net/minecraft/block/BlockFarmland$1.class +INFO: Loading Class: net/minecraft/client/resources/SkinManager$1.class +INFO: Loading Class: net/minecraft/client/resources/SkinManager$2.class +INFO: Loading Class: net/minecraft/client/resources/SkinManager$3.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSplash$Factory.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockPattern$PatternHelper.class +INFO: Loading Class: net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners.class +INFO: Loading Class: net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnterBlockTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners.class +INFO: Loading Class: net/minecraft/stats/StatBase$3.class +INFO: Loading Class: net/minecraft/stats/StatBase$2.class +INFO: Loading Class: net/minecraft/stats/StatBase$4.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneWire$EnumAttachPosition.class +INFO: Loading Class: net/minecraft/stats/StatBase$1.class +INFO: Loading Class: net/minecraft/tileentity/CommandBlockBaseLogic$1.class +INFO: Loading Class: net/minecraft/tileentity/CommandBlockBaseLogic$2.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityProperties$Snapshot.class +INFO: Loading Class: net/minecraft/block/BlockLadder$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$5.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$6.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$7.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$1.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$2.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$3.class +INFO: Loading Class: net/minecraft/network/NetworkSystem$4.class +INFO: Loading Class: net/minecraft/server/MinecraftServer.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ICondition$2$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVex$AIMoveControl.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVex$AIMoveRandom.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVex$AIChargeAttack.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer.class +INFO: Loading Class: net/minecraft/server/management/PlayerList$1.class +INFO: Loading Class: net/minecraft/block/BlockStoneBrick$EnumType.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneWire$1.class +INFO: Loading Class: net/minecraft/realms/RealmsEditBox.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketRecipeBook$State.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAINearestAttackableTarget$1.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAINearestAttackableTarget$2.class +INFO: Loading Class: net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject.class +INFO: Loading Class: net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject.class +INFO: Loading Class: net/minecraft/inventory/ContainerBrewingStand$Potion.class +INFO: Loading Class: net/minecraft/inventory/ContainerBrewingStand$Ingredient.class +INFO: Loading Class: net/minecraft/entity/item/EntityBoat$1.class +INFO: Loading Class: net/minecraft/inventory/ContainerBrewingStand$Fuel.class +INFO: Loading Class: net/minecraft/client/particle/ParticleManager$2.class +INFO: Loading Class: net/minecraft/client/particle/ParticleWaterWake$Factory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleManager$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleManager$4.class +INFO: Loading Class: net/minecraft/client/particle/ParticleManager$3.class +INFO: Loading Class: net/minecraft/util/ResourceLocation$Serializer.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button.class +INFO: Loading Class: net/minecraft/entity/item/EntityBoat$Status.class +INFO: Loading Class: net/minecraft/entity/item/EntityBoat$Type.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners.class +INFO: Loading Class: net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance.class +INFO: Loading Class: net/minecraft/network/ServerStatusResponse$Version.class +INFO: Loading Class: net/minecraft/network/ServerStatusResponse$Serializer.class +INFO: Loading Class: net/minecraft/network/ServerStatusResponse$Players.class +INFO: Loading Class: net/minecraft/world/Teleporter$PortalPosition.class +INFO: Loading Class: net/minecraft/client/gui/BossInfoClient$1.class +INFO: Loading Class: net/minecraft/util/ClassInheritanceMultiMap$1.class +INFO: Loading Class: net/minecraft/client/gui/spectator/SpectatorMenu$1.class +INFO: Loading Class: net/minecraft/client/audio/ISound$AttenuationType.class +INFO: Loading Class: net/minecraft/util/EnumTypeAdapterFactory$1.class +INFO: Loading Class: net/minecraft/block/Block$EnumOffsetType.class +INFO: Loading Class: net/minecraft/entity/monster/EntityElderGuardian$1.class +INFO: Loading Class: net/minecraft/item/ItemHoe$1.class +INFO: Loading Class: net/minecraft/entity/ai/EntityMoveHelper$Action.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor.class +INFO: Loading Class: net/minecraft/block/BlockFlower$EnumFlowerType$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor.class +INFO: Loading Class: net/minecraft/world/storage/loot/RandomValueRange$Serializer.class +INFO: Loading Class: net/minecraft/util/Rotation$1.class +INFO: Loading Class: net/minecraft/realms/Realms.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketEntityAction$Action.class +INFO: Loading Class: net/minecraft/client/renderer/OpenGlHelper$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones.class +INFO: Loading Class: net/minecraft/client/renderer/OpenGlHelper$FboMode.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door.class +INFO: Loading Class: net/minecraft/client/renderer/BlockRendererDispatcher$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBreaking$SnowballFactory.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerPlayClient$2.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBreaking$Factory.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerPlayClient$3.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBreaking$SlimeFactory.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStronghold$Start.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerPlayClient$1.class +INFO: Loading Class: net/minecraft/client/util/ITooltipFlag$TooltipFlags.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$1$1.class +INFO: Loading Class: net/minecraft/block/BlockChest$Type.class +INFO: Loading Class: net/minecraft/block/Block$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpit$Factory.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$RabbitTypeData.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$AIEvilAttack.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$AIPanic.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit$AIRaidFarm.class +INFO: Loading Class: net/minecraft/network/PacketThreadUtil$1.class +INFO: Loading Class: net/minecraft/init/Bootstrap$8$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$3.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBubble$Factory.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Library.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs.class +INFO: Loading Class: net/minecraft/scoreboard/Team$EnumVisible.class +INFO: Loading Class: net/minecraft/scoreboard/Team$CollisionRule.class +INFO: Loading Class: net/minecraft/util/text/TextComponentBase$1.class +INFO: Loading Class: net/minecraft/util/text/TextComponentBase$2.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSkeleton$1.class +INFO: Loading Class: net/minecraft/util/WeightedRandom$Item.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$BooleanState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$BlendState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$AlphaState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$Profile$1.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$Profile$2.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$Profile$3.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEvoker$1.class +INFO: Loading Class: net/minecraft/block/state/BlockWorldState$1.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$TexGenState.class +INFO: Loading Class: net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketUseEntity$Action.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$TexGenCoord.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$TexGen.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$StencilState.class +INFO: Loading Class: net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$TextureState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$LogicOp.class +INFO: Loading Class: net/minecraft/block/BlockJukebox$TileEntityJukebox.class +INFO: Loading Class: net/minecraft/client/audio/SoundManager$2$1.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$FogState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$FogMode.class +INFO: Loading Class: net/minecraft/client/main/GameConfiguration$FolderInformation.class +INFO: Loading Class: net/minecraft/realms/RealmsServerAddress.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$DestFactor.class +INFO: Loading Class: net/minecraft/client/main/GameConfiguration$DisplayInformation.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$StencilFunc.class +INFO: Loading Class: net/minecraft/client/main/GameConfiguration$ServerInformation.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$SourceFactor.class +INFO: Loading Class: net/minecraft/client/main/GameConfiguration$GameInformation.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$Profile.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$PolygonOffsetState.class +INFO: Loading Class: net/minecraft/client/main/GameConfiguration$UserInformation.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$ColorMask.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$ColorLogicState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$Color.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$ClearState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$DepthState.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$CullState.class +INFO: Loading Class: net/minecraft/realms/Tezzelator.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$CullFace.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager$ColorMaterialState.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentProtection$Type.class +INFO: Loading Class: net/minecraft/client/gui/GuiFlatPresets$ListSlot.class +INFO: Loading Class: net/minecraft/client/gui/GuiFlatPresets$LayerItem.class +INFO: Loading Class: net/minecraft/client/audio/SoundHandler$1.class +INFO: Loading Class: net/minecraft/client/audio/SoundHandler$2.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1.class +INFO: Loading Class: net/minecraft/client/audio/SoundHandler$3.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2.class +INFO: Loading Class: net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners.class +INFO: Loading Class: net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/Minecraft$9.class +INFO: Loading Class: net/minecraft/client/Minecraft$8.class +INFO: Loading Class: net/minecraft/entity/item/EntityArmorStand$2.class +INFO: Loading Class: net/minecraft/block/BlockPortal$1.class +INFO: Loading Class: net/minecraft/client/Minecraft$7.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer.class +INFO: Loading Class: net/minecraft/entity/item/EntityArmorStand$1.class +INFO: Loading Class: net/minecraft/client/Minecraft$6.class +INFO: Loading Class: net/minecraft/client/Minecraft$5.class +INFO: Loading Class: net/minecraft/client/Minecraft$4.class +INFO: Loading Class: net/minecraft/client/Minecraft$3.class +INFO: Loading Class: net/minecraft/util/math/Cartesian$Product$ProductIterator.class +INFO: Loading Class: net/minecraft/block/BlockPortal$Size.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException.class +INFO: Loading Class: net/minecraft/init/Bootstrap$9.class +INFO: Loading Class: net/minecraft/init/Bootstrap$7.class +INFO: Loading Class: net/minecraft/init/Bootstrap$8.class +INFO: Loading Class: net/minecraft/init/Bootstrap$5.class +INFO: Loading Class: net/minecraft/init/Bootstrap$6.class +INFO: Loading Class: net/minecraft/init/Bootstrap$3.class +INFO: Loading Class: net/minecraft/init/Bootstrap$4.class +INFO: Loading Class: net/minecraft/init/Bootstrap$18.class +INFO: Loading Class: net/minecraft/init/Bootstrap$2.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFirework$Starter.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFirework$Spark.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFirework$Overlay.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFirework$Factory.class +INFO: Loading Class: net/minecraft/client/gui/advancements/AdvancementTabType$1.class +INFO: Loading Class: net/minecraft/block/BlockWorkbench$InterfaceCraftingTable.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces$Room.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs.class +INFO: Loading Class: net/minecraft/block/BlockBanner$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer.class +INFO: Loading Class: net/minecraft/block/BlockBanner$BlockBannerHanging.class +INFO: Loading Class: net/minecraft/block/BlockBanner$BlockBannerStanding.class +INFO: Loading Class: net/minecraft/block/BlockStone$EnumType.class +INFO: Loading Class: net/minecraft/util/math/BlockPos$2$1.class +INFO: Loading Class: net/minecraft/client/renderer/texture/Stitcher$Holder.class +INFO: Loading Class: net/minecraft/client/renderer/texture/Stitcher$Slot.class +INFO: Loading Class: net/minecraft/item/ItemMinecart$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer.class +INFO: Loading Class: net/minecraft/util/text/Style$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetCount$Serializer.class +INFO: Loading Class: net/minecraft/block/BlockStoneSlab$EnumType.class +INFO: Loading Class: net/minecraft/item/ItemFishingRod$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemModelGenerator$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer.class +INFO: Loading Class: net/minecraft/util/text/Style$Serializer.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootEntry$Serializer.class +INFO: Loading Class: net/minecraft/advancements/critereon/PositionTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/PositionTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/particle/ParticlePortal$Factory.class +INFO: Loading Class: net/minecraft/nbt/NBTTagCompound$1.class +INFO: Loading Class: net/minecraft/nbt/NBTTagCompound$2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayer$2.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayer$1.class +INFO: Loading Class: net/minecraft/client/network/ServerPinger$1.class +INFO: Loading Class: net/minecraft/client/network/ServerPinger$2.class +INFO: Loading Class: net/minecraft/client/particle/ParticleHeart$Factory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start.class +INFO: Loading Class: net/minecraft/block/BlockButton$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight.class +INFO: Loading Class: net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners.class +INFO: Loading Class: net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderWorker$1.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayer$EnumChatVisibility.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderWorker$2.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayer$SleepResult.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces$End.class +INFO: Loading Class: net/minecraft/realms/RealmsScreen.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockStateMatcher$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder.class +INFO: Loading Class: net/minecraft/advancements/ICriterionTrigger$Listener.class +INFO: Loading Class: net/minecraft/client/util/SearchTree$MergingIterator.class +INFO: Loading Class: net/minecraft/client/gui/GuiListExtended$IGuiListEntry.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderIllusionIllager$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntityHorse$GroupData.class +INFO: Loading Class: net/minecraft/profiler/Snooper$1.class +INFO: Loading Class: net/minecraft/block/BlockFurnace$1.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartCommandBlock$1.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartCommandBlock$2.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerArmorBase$1.class +INFO: Loading Class: net/minecraft/world/biome/BiomeMesa$Decorator.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityFishHook$State.class +INFO: Loading Class: net/minecraft/advancements/PlayerAdvancements$1.class +INFO: Loading Class: net/minecraft/client/audio/SoundManager$1$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySilverfish$AIHideInStone.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemCameraTransforms$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiLanguage$List.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorSettings$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker$AISummonSpell.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker$AICastingSpell.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker$AIWololoSpell.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker$AIAttackSpell.class +INFO: Loading Class: net/minecraft/command/FunctionObject$Entry.class +INFO: Loading Class: net/minecraft/command/FunctionObject$FunctionEntry.class +INFO: Loading Class: net/minecraft/command/FunctionObject$CacheableFunction.class +INFO: Loading Class: net/minecraft/command/FunctionObject$CommandEntry.class +INFO: Loading Class: net/minecraft/client/model/ModelBiped$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorSettings$Serializer.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorSettings$Factory.class +INFO: Loading Class: net/minecraft/item/ItemCompass$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockPart$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSmokeLarge$Factory.class +INFO: Loading Class: net/minecraft/block/BlockCocoa$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDrip$LavaFactory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDrip$WaterFactory.class +INFO: Loading Class: net/minecraft/block/BlockTripWireHook$1.class +INFO: Loading Class: net/minecraft/entity/Entity$2.class +INFO: Loading Class: net/minecraft/entity/Entity$1.class +INFO: Loading Class: net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger.class +INFO: Loading Class: net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners.class +INFO: Loading Class: net/minecraft/inventory/ContainerEnchantment$3.class +INFO: Loading Class: net/minecraft/inventory/ContainerEnchantment$2.class +INFO: Loading Class: net/minecraft/inventory/ContainerEnchantment$1.class +INFO: Loading Class: net/minecraft/client/gui/MapItemRenderer$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiListWorldSelectionEntry$2.class +INFO: Loading Class: net/minecraft/client/gui/GuiListWorldSelectionEntry$1.class +INFO: Loading Class: net/minecraft/util/Util$EnumOS.class +INFO: Loading Class: net/minecraft/entity/Entity$6.class +INFO: Loading Class: net/minecraft/entity/Entity$5.class +INFO: Loading Class: net/minecraft/block/material/Material$1.class +INFO: Loading Class: net/minecraft/entity/Entity$4.class +INFO: Loading Class: net/minecraft/entity/Entity$3.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSuspendedTown$Factory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory.class +INFO: Loading Class: net/minecraft/client/Minecraft$2.class +INFO: Loading Class: net/minecraft/client/Minecraft$15.class +INFO: Loading Class: net/minecraft/client/Minecraft$16.class +INFO: Loading Class: net/minecraft/client/Minecraft$13.class +INFO: Loading Class: net/minecraft/client/Minecraft$14.class +INFO: Loading Class: net/minecraft/client/Minecraft$11.class +INFO: Loading Class: net/minecraft/client/Minecraft$12.class +INFO: Loading Class: net/minecraft/world/WorldServerMulti$1.class +INFO: Loading Class: net/minecraft/client/Minecraft$1.class +INFO: Loading Class: net/minecraft/client/Minecraft$10.class +INFO: Loading Class: net/minecraft/client/gui/MapItemRenderer$Instance.class +INFO: Loading Class: net/minecraft/client/gui/ServerListEntryNormal$1.class +INFO: Loading Class: net/minecraft/world/WorldProviderHell$1.class +INFO: Loading Class: net/minecraft/entity/monster/AbstractIllager$IllagerArmPose.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderVindicator$1.class +INFO: Loading Class: net/minecraft/block/BlockRailPowered$1.class +INFO: Loading Class: net/minecraft/block/BlockRailPowered$2.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneTorch$Toggle.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemModelGenerator$Span.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$9.class +INFO: Loading Class: net/minecraft/realms/RealmsSharedConstants.class +INFO: Loading Class: net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern.class +INFO: Loading Class: net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern.class +INFO: Loading Class: net/minecraft/entity/player/InventoryPlayer$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFootStep$Factory.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType$2.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType$3.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType$1.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityCommandBlock$Mode.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType$6.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType$4.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType$5.class +INFO: Loading Class: net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/DamagePredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/DamageSourcePredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/DistancePredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/EffectsChangedTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnchantedItemTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnchantmentPredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnterBlockTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/EntityPredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/ImpossibleTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/InventoryChangeTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/ItemDurabilityTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/ItemPredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/KilledTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/LevitationTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/LocationPredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/PositionTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/MinMaxBounds.class +INFO: Loading Class: net/minecraft/advancements/critereon/MobEffectsPredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/NBTPredicate.class +INFO: Loading Class: net/minecraft/advancements/critereon/NetherTravelTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/PlacedBlockTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2.class +INFO: Loading Class: net/minecraft/advancements/critereon/RecipeUnlockedTrigger.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/SummonedEntityTrigger.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenNetherBridge$Start.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVindicator$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/TameAnimalTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/TickTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/VillagerTradeTrigger.class +INFO: Loading Class: net/minecraft/advancements/critereon/UsedEnderEyeTrigger.class +INFO: Loading Class: net/minecraft/profiler/Profiler$Result.class +INFO: Loading Class: net/minecraft/advancements/critereon/UsedTotemTrigger.class +INFO: Loading Class: net/minecraft/command/ICommandListener.class +INFO: Loading Class: net/minecraft/command/CommandBase.class +INFO: Loading Class: net/minecraft/command/CommandHandler.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload.class +INFO: Loading Class: net/minecraft/command/ICommand.class +INFO: Loading Class: net/minecraft/command/ICommandManager.class +INFO: Loading Class: net/minecraft/command/FunctionObject.class +INFO: Loading Class: net/minecraft/command/ICommandSender.class +INFO: Loading Class: net/minecraft/command/CommandSenderWrapper.class +INFO: Loading Class: net/minecraft/command/CommandResultStats.class +INFO: Loading Class: net/minecraft/command/EntitySelector.class +INFO: Loading Class: net/minecraft/command/AdvancementCommand.class +INFO: Loading Class: net/minecraft/command/server/CommandBanIp.class +INFO: Loading Class: net/minecraft/command/server/CommandListBans.class +INFO: Loading Class: net/minecraft/command/server/CommandBanPlayer.class +INFO: Loading Class: net/minecraft/command/CommandBlockData.class +INFO: Loading Class: net/minecraft/command/CommandClearInventory.class +INFO: Loading Class: net/minecraft/command/CommandClone.class +INFO: Loading Class: net/minecraft/command/server/CommandDeOp.class +INFO: Loading Class: net/minecraft/command/CommandDebug.class +INFO: Loading Class: net/minecraft/world/storage/loot/properties/EntityProperty$Serializer.class +INFO: Loading Class: net/minecraft/command/CommandDefaultGameMode.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIAvoidEntity$1.class +INFO: Loading Class: net/minecraft/command/CommandEffect.class +INFO: Loading Class: net/minecraft/command/server/CommandEmote.class +INFO: Loading Class: net/minecraft/command/CommandEnchant.class +INFO: Loading Class: net/minecraft/command/CommandEntityData.class +INFO: Loading Class: net/minecraft/command/CommandExecuteAt.class +INFO: Loading Class: net/minecraft/command/CommandXP.class +INFO: Loading Class: net/minecraft/command/CommandFill.class +INFO: Loading Class: net/minecraft/command/CommandFunction.class +INFO: Loading Class: net/minecraft/command/CommandDifficulty.class +INFO: Loading Class: net/minecraft/command/CommandGameMode.class +INFO: Loading Class: net/minecraft/command/CommandGameRule.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetAttributes$Serializer.class +INFO: Loading Class: net/minecraft/command/CommandGive.class +INFO: Loading Class: net/minecraft/command/CommandHelp.class +INFO: Loading Class: net/minecraft/command/CommandServerKick.class +INFO: Loading Class: net/minecraft/command/CommandKill.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack.class +INFO: Loading Class: net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners.class +INFO: Loading Class: net/minecraft/command/server/CommandListPlayers.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetAttributes$Modifier.class +INFO: Loading Class: net/minecraft/advancements/critereon/UsedTotemTrigger$Instance.class +INFO: Loading Class: net/minecraft/command/CommandLocate.class +INFO: Loading Class: net/minecraft/command/server/CommandMessage.class +INFO: Loading Class: net/minecraft/command/server/CommandOp.class +INFO: Loading Class: net/minecraft/command/server/CommandPardonIp.class +INFO: Loading Class: net/minecraft/command/server/CommandPardonPlayer.class +INFO: Loading Class: net/minecraft/command/CommandParticle.class +INFO: Loading Class: net/minecraft/command/CommandPlaySound.class +INFO: Loading Class: net/minecraft/command/server/CommandPublishLocalServer.class +INFO: Loading Class: net/minecraft/command/RecipeCommand.class +INFO: Loading Class: net/minecraft/command/CommandReload.class +INFO: Loading Class: net/minecraft/command/CommandReplaceItem.class +INFO: Loading Class: net/minecraft/command/server/CommandSaveAll.class +INFO: Loading Class: net/minecraft/command/server/CommandSaveOff.class +INFO: Loading Class: net/minecraft/command/server/CommandSaveOn.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketClientStatus$State.class +INFO: Loading Class: net/minecraft/command/server/CommandBroadcast.class +INFO: Loading Class: net/minecraft/command/server/CommandScoreboard.class +INFO: Loading Class: net/minecraft/command/ServerCommandManager.class +INFO: Loading Class: net/minecraft/command/server/CommandSetBlock.class +INFO: Loading Class: net/minecraft/command/CommandSetPlayerTimeout.class +INFO: Loading Class: net/minecraft/command/CommandSetSpawnpoint.class +INFO: Loading Class: net/minecraft/command/server/CommandSetDefaultSpawnpoint.class +INFO: Loading Class: net/minecraft/command/CommandShowSeed.class +INFO: Loading Class: net/minecraft/block/state/BlockStateBase$1.class +INFO: Loading Class: net/minecraft/command/CommandSpreadPlayers.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$7.class +INFO: Loading Class: net/minecraft/command/CommandStats.class +INFO: Loading Class: net/minecraft/command/server/CommandStop.class +INFO: Loading Class: net/minecraft/command/CommandStopSound.class +INFO: Loading Class: net/minecraft/command/server/CommandSummon.class +INFO: Loading Class: net/minecraft/command/server/CommandTeleport.class +INFO: Loading Class: net/minecraft/util/math/Cartesian$1.class +INFO: Loading Class: net/minecraft/command/server/CommandMessageRaw.class +INFO: Loading Class: net/minecraft/command/server/CommandTestForBlock.class +INFO: Loading Class: net/minecraft/command/CommandCompare.class +INFO: Loading Class: net/minecraft/command/server/CommandTestFor.class +INFO: Loading Class: net/minecraft/command/CommandTime.class +INFO: Loading Class: net/minecraft/command/CommandTitle.class +INFO: Loading Class: net/minecraft/command/CommandToggleDownfall.class +INFO: Loading Class: net/minecraft/command/CommandTP.class +INFO: Loading Class: net/minecraft/command/CommandTrigger.class +INFO: Loading Class: net/minecraft/command/CommandWeather.class +INFO: Loading Class: net/minecraft/command/server/CommandWhitelist.class +INFO: Loading Class: net/minecraft/command/CommandWorldBorder.class +INFO: Loading Class: net/minecraft/command/CommandException.class +INFO: Loading Class: net/minecraft/command/EntityNotFoundException.class +INFO: Loading Class: net/minecraft/command/InvalidBlockStateException.class +INFO: Loading Class: net/minecraft/command/NumberInvalidException.class +INFO: Loading Class: net/minecraft/command/SyntaxErrorException.class +INFO: Loading Class: net/minecraft/util/Session$Type.class +INFO: Loading Class: net/minecraft/command/PlayerNotFoundException.class +INFO: Loading Class: net/minecraft/command/CommandNotFoundException.class +INFO: Loading Class: net/minecraft/command/WrongUsageException.class +INFO: Loading Class: net/minecraft/util/math/BlockPos.class +INFO: Loading Class: net/minecraft/dispenser/IBlockSource.class +INFO: Loading Class: net/minecraft/block/BlockSourceImpl.class +INFO: Loading Class: net/minecraft/util/math/Cartesian.class +INFO: Loading Class: net/minecraft/dispenser/BehaviorDefaultDispenseItem.class +INFO: Loading Class: net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.class +INFO: Loading Class: net/minecraft/util/registry/RegistryDefaulted.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketRecipeInfo$Purpose.class +INFO: Loading Class: net/minecraft/util/EnumFacing.class +INFO: Loading Class: net/minecraft/dispenser/IBehaviorDispenseItem.class +INFO: Loading Class: net/minecraft/util/IObjectIntIterable.class +INFO: Loading Class: net/minecraft/util/ObjectIntIdentityMap.class +INFO: Loading Class: net/minecraft/dispenser/ILocatableSource.class +INFO: Loading Class: net/minecraft/util/math/Cartesian$GetList.class +INFO: Loading Class: net/minecraft/dispenser/ILocation.class +INFO: Loading Class: net/minecraft/util/MapPopulator.class +INFO: Loading Class: net/minecraft/util/registry/RegistryNamespaced.class +INFO: Loading Class: net/minecraft/util/NonNullList.class +INFO: Loading Class: net/minecraft/util/EnumParticleTypes.class +INFO: Loading Class: net/minecraft/dispenser/IPosition.class +INFO: Loading Class: net/minecraft/dispenser/PositionImpl.class +INFO: Loading Class: net/minecraft/util/registry/IRegistry.class +INFO: Loading Class: net/minecraft/util/math/Rotations.class +INFO: Loading Class: net/minecraft/util/registry/RegistrySimple.class +INFO: Loading Class: net/minecraft/util/math/Vec3i.class +INFO: Loading Class: net/minecraft/util/text/translation/I18n.class +INFO: Loading Class: net/minecraft/client/particle/ParticleCloud$Factory.class +INFO: Loading Class: net/minecraft/util/text/translation/LanguageMap.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketTitle$Type.class +INFO: Loading Class: net/minecraft/nbt/NBTTagByteArray.class +INFO: Loading Class: net/minecraft/nbt/NBTTagByte.class +INFO: Loading Class: net/minecraft/nbt/NBTTagCompound.class +INFO: Loading Class: net/minecraft/nbt/NBTTagDouble.class +INFO: Loading Class: net/minecraft/nbt/NBTTagEnd.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderArmorStand$1.class +INFO: Loading Class: net/minecraft/nbt/NBTTagFloat.class +INFO: Loading Class: net/minecraft/nbt/NBTTagIntArray.class +INFO: Loading Class: net/minecraft/nbt/NBTTagInt.class +INFO: Loading Class: net/minecraft/nbt/NBTTagList.class +INFO: Loading Class: net/minecraft/util/math/Cartesian$Product.class +INFO: Loading Class: net/minecraft/nbt/NBTTagLongArray.class +INFO: Loading Class: net/minecraft/nbt/NBTTagLong.class +INFO: Loading Class: net/minecraft/nbt/NBTSizeTracker.class +INFO: Loading Class: net/minecraft/nbt/CompressedStreamTools.class +INFO: Loading Class: net/minecraft/nbt/NBTUtil.class +INFO: Loading Class: net/minecraft/nbt/NBTPrimitive.class +INFO: Loading Class: net/minecraft/nbt/NBTTagShort.class +INFO: Loading Class: net/minecraft/nbt/NBTTagString.class +INFO: Loading Class: net/minecraft/nbt/NBTBase.class +INFO: Loading Class: net/minecraft/nbt/NBTException.class +INFO: Loading Class: net/minecraft/nbt/JsonToNBT.class +INFO: Loading Class: net/minecraft/network/NettyEncryptionTranslator.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityCommandBlock$1.class +INFO: Loading Class: net/minecraft/network/NettyEncryptingDecoder.class +INFO: Loading Class: net/minecraft/network/NettyEncryptingEncoder.class +INFO: Loading Class: net/minecraft/network/NettyCompressionDecoder.class +INFO: Loading Class: net/minecraft/network/NettyCompressionEncoder.class +INFO: Loading Class: net/minecraft/network/NetworkManager.class +INFO: Loading Class: net/minecraft/entity/EntityLivingBase$1.class +INFO: Loading Class: net/minecraft/network/EnumConnectionState.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$9.class +INFO: Loading Class: net/minecraft/network/PacketBuffer.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$8.class +INFO: Loading Class: net/minecraft/network/NettyPacketDecoder.class +INFO: Loading Class: net/minecraft/network/NettyPacketEncoder.class +INFO: Loading Class: net/minecraft/network/INetHandler.class +INFO: Loading Class: net/minecraft/network/NettyVarint21FrameDecoder.class +INFO: Loading Class: net/minecraft/network/NettyVarint21FrameEncoder.class +INFO: Loading Class: net/minecraft/util/text/TextComponentBase.class +INFO: Loading Class: net/minecraft/util/text/ChatType.class +INFO: Loading Class: net/minecraft/util/text/event/ClickEvent.class +INFO: Loading Class: net/minecraft/util/text/ITextComponent.class +INFO: Loading Class: net/minecraft/util/text/TextComponentUtils.class +INFO: Loading Class: net/minecraft/util/text/event/HoverEvent.class +INFO: Loading Class: net/minecraft/util/text/TextComponentKeybind.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo.class +INFO: Loading Class: net/minecraft/util/text/TextComponentScore.class +INFO: Loading Class: net/minecraft/world/storage/MapData$MapInfo.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace.class +INFO: Loading Class: net/minecraft/util/text/TextComponentSelector.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations.class +INFO: Loading Class: net/minecraft/util/text/Style.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelRenderer$Orientation.class +INFO: Loading Class: net/minecraft/util/text/TextComponentString.class +INFO: Loading Class: net/minecraft/util/text/TextComponentTranslation.class +INFO: Loading Class: net/minecraft/util/text/TextComponentTranslationFormatException.class +INFO: Loading Class: net/minecraft/network/Packet.class +INFO: Loading Class: net/minecraft/network/EnumPacketDirection.class +INFO: Loading Class: net/minecraft/network/PacketThreadUtil.class +INFO: Loading Class: net/minecraft/network/play/INetHandlerPlayClient.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnObject.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnExperienceOrb.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnGlobalEntity.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnMob.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnPainting.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnPlayer.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketAnimation.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketStatistics.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketBlockBreakAnim.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateTileEntity.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketBlockAction.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketBlockChange.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateBossInfo.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketServerDifficulty.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketTabComplete.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketChat.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketMultiBlockChange.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketConfirmTransaction.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCloseWindow.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketOpenWindow.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketWindowItems.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketWindowProperty.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSetSlot.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCooldown.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCustomPayload.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCustomSound.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketDisconnect.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityStatus.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketExplosion.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUnloadChunk.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketChangeGameState.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketKeepAlive.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketChunkData.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEffect.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketParticles.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketJoinGame.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketMaps.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntity.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketMoveVehicle.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSignEditorOpen.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlaceGhostRecipe.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerAbilities.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCombatEvent.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerListItem.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerPosLook.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUseBed.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketRecipeBook.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketDestroyEntities.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketRemoveEntityEffect.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketResourcePackSend.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketRespawn.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityHeadLook.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSelectAdvancementsTab.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketWorldBorder.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCamera.class +INFO: Loading Class: net/minecraft/inventory/ContainerPlayer$2.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketHeldItemChange.class +INFO: Loading Class: net/minecraft/inventory/ContainerPlayer$1.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketDisplayObjective.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityMetadata.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityAttach.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityVelocity.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityEquipment.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder.class +INFO: Loading Class: net/minecraft/client/renderer/WorldVertexBufferUploader$1.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSetExperience.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateHealth.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketScoreboardObjective.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSetPassengers.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketTeams.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateScore.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSpawnPosition.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketTimeUpdate.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketTitle.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketSoundEffect.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCollectItem.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityTeleport.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketAdvancementInfo.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityProperties.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketEntityEffect.class +INFO: Loading Class: net/minecraft/network/play/INetHandlerPlayServer.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketConfirmTeleport.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketTabComplete.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketChatMessage.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketClientStatus.class +INFO: Loading Class: net/minecraft/client/gui/GuiLockIconButton$Icon.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketClientSettings.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketConfirmTransaction.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketEnchantItem.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketClickWindow.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPigZombie$1.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketCloseWindow.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketCustomPayload.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketUseEntity.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketKeepAlive.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayer.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketVehicleMove.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketSteerBoat.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlaceRecipe.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayerAbilities.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayerDigging.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketEntityAction.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketInput.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketRecipeInfo.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketResourcePackStatus.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketSeenAdvancements.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketHeldItemChange.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketCreativeInventoryAction.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketUpdateSign.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketAnimation.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketSpectate.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayerTryUseItem.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/StateMap$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer.class +INFO: Loading Class: net/minecraft/network/handshake/client/C00Handshake.class +INFO: Loading Class: net/minecraft/network/handshake/INetHandlerHandshakeServer.class +INFO: Loading Class: net/minecraft/network/login/INetHandlerLoginClient.class +INFO: Loading Class: net/minecraft/network/login/server/SPacketLoginSuccess.class +INFO: Loading Class: net/minecraft/network/login/server/SPacketEncryptionRequest.class +INFO: Loading Class: net/minecraft/util/CooldownTracker$1.class +INFO: Loading Class: net/minecraft/network/login/server/SPacketEnableCompression.class +INFO: Loading Class: net/minecraft/network/login/server/SPacketDisconnect.class +INFO: Loading Class: net/minecraft/network/login/INetHandlerLoginServer.class +INFO: Loading Class: net/minecraft/network/login/client/CPacketLoginStart.class +INFO: Loading Class: net/minecraft/network/login/client/CPacketEncryptionResponse.class +INFO: Loading Class: net/minecraft/network/status/INetHandlerStatusClient.class +INFO: Loading Class: net/minecraft/network/status/server/SPacketPong.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/StateMap$Builder.class +INFO: Loading Class: net/minecraft/network/status/server/SPacketServerInfo.class +INFO: Loading Class: net/minecraft/network/ServerStatusResponse.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer.class +INFO: Loading Class: net/minecraft/network/status/INetHandlerStatusServer.class +INFO: Loading Class: net/minecraft/network/status/client/CPacketPing.class +INFO: Loading Class: net/minecraft/network/status/client/CPacketServerQuery.class +INFO: Loading Class: net/minecraft/network/datasync/DataParameter.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializer.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers.class +INFO: Loading Class: net/minecraft/network/datasync/EntityDataManager.class +INFO: Loading Class: net/minecraft/util/ServerRecipeBookHelper.class +INFO: Loading Class: net/minecraft/util/ResourceLocation.class +INFO: Loading Class: net/minecraft/dispenser/BehaviorProjectileDispense.class +INFO: Loading Class: net/minecraft/init/Bootstrap.class +INFO: Loading Class: net/minecraft/client/util/JsonException.class +INFO: Loading Class: net/minecraft/item/Item$18.class +INFO: Loading Class: net/minecraft/item/Item$19.class +INFO: Loading Class: net/minecraft/server/DebugLoggingPrintStream.class +INFO: Loading Class: net/minecraft/item/Item$2.class +INFO: Loading Class: net/minecraft/item/Item$20.class +INFO: Loading Class: net/minecraft/util/LoggingPrintStream.class +INFO: Loading Class: net/minecraft/item/Item$21.class +INFO: Loading Class: net/minecraft/advancements/PlayerAdvancements.class +INFO: Loading Class: net/minecraft/item/Item$3.class +INFO: Loading Class: net/minecraft/item/Item$4.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates.class +INFO: Loading Class: net/minecraft/network/ThreadQuickExitException.class +INFO: Loading Class: net/minecraft/item/Item$5.class +INFO: Loading Class: net/minecraft/advancements/AdvancementManager.class +INFO: Loading Class: net/minecraft/item/Item$6.class +INFO: Loading Class: net/minecraft/advancements/FunctionManager.class +INFO: Loading Class: net/minecraft/item/Item$7.class +INFO: Loading Class: net/minecraft/scoreboard/ServerScoreboard.class +INFO: Loading Class: net/minecraft/util/ITickable.class +INFO: Loading Class: net/minecraft/util/text/event/ClickEvent$Action.class +INFO: Loading Class: net/minecraft/util/CooldownTracker$Cooldown.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/SignStrictJSON$1.class +INFO: Loading Class: net/minecraft/block/BlockSandStone$EnumType.class +INFO: Loading Class: net/minecraft/client/renderer/DestroyBlockProgress.class +INFO: Loading Class: net/minecraft/world/WorldServerDemo.class +INFO: Loading Class: net/minecraft/server/management/DemoPlayerInteractionManager.class +INFO: Loading Class: net/minecraft/world/WorldServerMulti.class +INFO: Loading Class: net/minecraft/item/Item$8.class +INFO: Loading Class: net/minecraft/entity/EntityTracker.class +INFO: Loading Class: net/minecraft/item/Item$9.class +INFO: Loading Class: net/minecraft/world/BossInfoServer.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder.class +INFO: Loading Class: net/minecraft/world/gen/ChunkProviderServer.class +INFO: Loading Class: net/minecraft/world/WorldServer.class +INFO: Loading Class: net/minecraft/world/ServerWorldEventHandler.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayerMP.class +INFO: Loading Class: net/minecraft/server/management/PlayerInteractionManager.class +INFO: Loading Class: net/minecraft/entity/EntityTrackerEntry.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMapEntry.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMap.class +INFO: Loading Class: net/minecraft/network/LegacyPingHandler.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerHandshakeMemory.class +INFO: Loading Class: net/minecraft/network/NetworkSystem.class +INFO: Loading Class: net/minecraft/client/model/ModelParrot$State.class +INFO: Loading Class: net/minecraft/network/NetHandlerPlayServer.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerHandshakeTCP.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerLoginServer.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelRenderer$1.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerStatusServer.class +INFO: Loading Class: net/minecraft/item/ItemClock$1.class +INFO: Loading Class: net/minecraft/world/chunk/storage/AnvilChunkLoader$1.class +INFO: Loading Class: net/minecraft/server/management/UserListEntryBan.class +INFO: Loading Class: net/minecraft/server/management/PlayerProfileCache.class +INFO: Loading Class: net/minecraft/server/management/UserListIPBans.class +INFO: Loading Class: net/minecraft/server/management/UserListIPBansEntry.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter.class +INFO: Loading Class: net/minecraft/server/management/PlayerList.class +INFO: Loading Class: net/minecraft/server/management/UserListOps.class +INFO: Loading Class: net/minecraft/server/management/UserListOpsEntry.class +INFO: Loading Class: net/minecraft/server/management/UserListEntry.class +INFO: Loading Class: net/minecraft/server/management/UserList.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1.class +INFO: Loading Class: net/minecraft/server/management/UserListBans.class +INFO: Loading Class: net/minecraft/block/BlockTripWire$1.class +INFO: Loading Class: net/minecraft/server/management/UserListBansEntry.class +INFO: Loading Class: net/minecraft/server/management/UserListWhitelist.class +INFO: Loading Class: net/minecraft/server/management/UserListWhitelistEntry.class +INFO: Loading Class: net/minecraft/network/rcon/RConConsoleSource.class +INFO: Loading Class: net/minecraft/util/HttpUtil$1.class +INFO: Loading Class: net/minecraft/util/SoundEvent.class +INFO: Loading Class: net/minecraft/init/SoundEvents.class +INFO: Loading Class: net/minecraft/util/SoundCategory.class +INFO: Loading Class: net/minecraft/stats/StatBasic.class +INFO: Loading Class: net/minecraft/stats/StatCrafting.class +INFO: Loading Class: net/minecraft/stats/RecipeBook.class +INFO: Loading Class: net/minecraft/stats/RecipeBookServer.class +INFO: Loading Class: net/minecraft/stats/StatisticsManagerServer.class +INFO: Loading Class: net/minecraft/stats/StatBase.class +INFO: Loading Class: net/minecraft/stats/IStatType.class +INFO: Loading Class: net/minecraft/util/TupleIntJsonSerializable.class +INFO: Loading Class: net/minecraft/util/IJsonSerializable.class +INFO: Loading Class: net/minecraft/stats/StatList.class +INFO: Loading Class: net/minecraft/stats/StatisticsManager.class +INFO: Loading Class: net/minecraft/realms/DisconnectedRealmsScreen.class +INFO: Loading Class: net/minecraft/util/BitArray.class +INFO: Loading Class: net/minecraft/util/ClassInheritanceMultiMap.class +INFO: Loading Class: net/minecraft/util/IntIdentityHashBiMap.class +INFO: Loading Class: net/minecraft/util/CryptManager.class +INFO: Loading Class: net/minecraft/util/FrameTimer.class +INFO: Loading Class: net/minecraft/util/JsonUtils.class +INFO: Loading Class: net/minecraft/util/HttpUtil.class +INFO: Loading Class: net/minecraft/util/LowerStringMap.class +INFO: Loading Class: net/minecraft/util/IntegerCache.class +INFO: Loading Class: net/minecraft/util/IntHashMap.class +INFO: Loading Class: net/minecraft/util/LazyLoadBase.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$1.class +INFO: Loading Class: net/minecraft/block/BlockStainedGlassPane$1.class +INFO: Loading Class: net/minecraft/util/EnumTypeAdapterFactory.class +INFO: Loading Class: net/minecraft/util/math/MathHelper.class +INFO: Loading Class: net/minecraft/profiler/Profiler.class +INFO: Loading Class: net/minecraft/util/IProgressUpdate.class +INFO: Loading Class: net/minecraft/util/MouseFilter.class +INFO: Loading Class: net/minecraft/util/IStringSerializable.class +INFO: Loading Class: net/minecraft/util/StringUtils.class +INFO: Loading Class: net/minecraft/util/Tuple.class +INFO: Loading Class: net/minecraft/util/WeightedRandom.class +INFO: Loading Class: net/minecraft/world/biome/BiomeEndDecorator$1.class +INFO: Loading Class: net/minecraft/util/datafix/IFixableData.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike.class +INFO: Loading Class: net/minecraft/util/datafix/IFixType.class +INFO: Loading Class: net/minecraft/util/datafix/FixTypes.class +INFO: Loading Class: net/minecraft/util/datafix/IDataFixer.class +INFO: Loading Class: net/minecraft/util/datafix/DataFixer.class +INFO: Loading Class: net/minecraft/util/datafix/DataFixesManager.class +INFO: Loading Class: net/minecraft/advancements/critereon/ImpossibleTrigger$Instance.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayer$Rotation.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayer$Position.class +INFO: Loading Class: net/minecraft/util/datafix/IDataWalker.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketPlayer$PositionRotation.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/AddBedTileEntity.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/BedItemColor.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/TileEntityId.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/LootCondition$Serializer.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/SpawnerEntityTypes.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/SignStrictJSON.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ArmorStandSilent.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ElderGuardianSplit.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/EntityArmorAndHeld.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/EntityHealth.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/HorseSaddle.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/HorseSplit.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/EntityId.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/MinecartEntityTypes.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/PaintingDirection.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/RedundantChanceTags.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/RidingToPassengers.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$AIDefenseAttack.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/SkeletonSplit.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$BodyHelper.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/StringToUUID.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$AIPeek.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ZombieSplit.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$AIAttackNearest.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ZombieProfToType.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/BannerItemColor.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/CookedFishIDTypo.class +INFO: Loading Class: net/minecraft/entity/monster/IMob$2.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$AIAttack.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/LootFunction$Serializer.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ItemIntIDToString.class +INFO: Loading Class: net/minecraft/entity/monster/IMob$1.class +INFO: Loading Class: net/minecraft/block/BlockSapling$1.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/PotionItems.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/SpawnEggNames.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/TotemItemRename.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/PotionWater.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/BookPagesStrictJSON.class +INFO: Loading Class: net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader.class +INFO: Loading Class: net/minecraft/realms/RealmsVertexFormatElement.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/ForceVBOOn.class +INFO: Loading Class: net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.class +INFO: Loading Class: net/minecraft/util/datafix/walkers/ItemStackData.class +INFO: Loading Class: net/minecraft/util/datafix/walkers/BlockEntityTag.class +INFO: Loading Class: net/minecraft/util/datafix/walkers/EntityTag.class +INFO: Loading Class: net/minecraft/util/datafix/walkers/ItemStackDataLists.class +INFO: Loading Class: net/minecraft/util/datafix/walkers/Filtered.class +INFO: Loading Class: net/minecraft/world/biome/BiomeMesa$1.class +INFO: Loading Class: net/minecraft/util/IThreadListener.class +INFO: Loading Class: net/minecraft/world/BossInfo.class +INFO: Loading Class: net/minecraft/inventory/InventoryLargeChest.class +INFO: Loading Class: net/minecraft/inventory/IInventory.class +INFO: Loading Class: net/minecraft/inventory/ItemStackHelper.class +INFO: Loading Class: net/minecraft/inventory/IInventoryChangedListener.class +INFO: Loading Class: net/minecraft/inventory/InventoryHelper.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSuspend$Factory.class +INFO: Loading Class: net/minecraft/world/EnumDifficulty.class +INFO: Loading Class: net/minecraft/block/BlockFence$1.class +INFO: Loading Class: net/minecraft/world/DifficultyInstance.class +INFO: Loading Class: net/minecraft/util/EnumHand.class +INFO: Loading Class: net/minecraft/world/IInteractionObject.class +INFO: Loading Class: net/minecraft/util/EnumActionResult.class +INFO: Loading Class: net/minecraft/util/ActionResult.class +INFO: Loading Class: net/minecraft/world/LockCode.class +INFO: Loading Class: net/minecraft/world/ILockableContainer.class +INFO: Loading Class: net/minecraft/world/IWorldNameable.class +INFO: Loading Class: net/minecraft/util/EnumFacing$Plane.class +INFO: Loading Class: net/minecraft/world/storage/loot/ILootContainer.class +INFO: Loading Class: net/minecraft/util/EnumFacing$AxisDirection.class +INFO: Loading Class: net/minecraft/inventory/InventoryBasic.class +INFO: Loading Class: net/minecraft/util/EnumFacing$Axis.class +INFO: Loading Class: net/minecraft/profiler/Snooper.class +INFO: Loading Class: net/minecraft/profiler/ISnooperInfo.class +INFO: Loading Class: net/minecraft/inventory/ISidedInventory.class +INFO: Loading Class: net/minecraft/util/CombatEntry.class +INFO: Loading Class: net/minecraft/util/CombatRules.class +INFO: Loading Class: net/minecraft/util/CombatTracker.class +INFO: Loading Class: net/minecraft/util/DamageSource.class +INFO: Loading Class: net/minecraft/util/EntityDamageSource.class +INFO: Loading Class: net/minecraft/util/EntityDamageSourceIndirect.class +INFO: Loading Class: net/minecraft/potion/PotionAbsorption.class +INFO: Loading Class: net/minecraft/potion/PotionAttackDamage.class +INFO: Loading Class: net/minecraft/potion/PotionHealthBoost.class +INFO: Loading Class: net/minecraft/potion/PotionHealth.class +INFO: Loading Class: net/minecraft/potion/Potion.class +INFO: Loading Class: net/minecraft/util/EnumFacing$1.class +INFO: Loading Class: net/minecraft/potion/PotionEffect.class +INFO: Loading Class: net/minecraft/init/MobEffects.class +INFO: Loading Class: net/minecraft/entity/EntityAgeable.class +INFO: Loading Class: net/minecraft/entity/EntityAreaEffectCloud.class +INFO: Loading Class: net/minecraft/entity/passive/IAnimals.class +INFO: Loading Class: net/minecraft/entity/Entity.class +INFO: Loading Class: net/minecraft/entity/EntityList.class +INFO: Loading Class: net/minecraft/util/EntitySelectors.class +INFO: Loading Class: net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners.class +INFO: Loading Class: net/minecraft/inventory/EntityEquipmentSlot.class +INFO: Loading Class: net/minecraft/entity/item/EntityXPOrb.class +INFO: Loading Class: net/minecraft/entity/EntityFlying.class +INFO: Loading Class: net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance.class +INFO: Loading Class: net/minecraft/util/EnumHandSide.class +INFO: Loading Class: net/minecraft/entity/EntityLivingBase.class +INFO: Loading Class: net/minecraft/entity/EntityLiving.class +INFO: Loading Class: net/minecraft/client/resources/SkinManager$3$1.class +INFO: Loading Class: net/minecraft/entity/EnumCreatureType.class +INFO: Loading Class: net/minecraft/entity/IEntityLivingData.class +INFO: Loading Class: net/minecraft/entity/EntitySpawnPlacementRegistry.class +INFO: Loading Class: net/minecraft/entity/EnumCreatureAttribute.class +INFO: Loading Class: net/minecraft/entity/MoverType.class +INFO: Loading Class: net/minecraft/entity/IEntityOwnable.class +INFO: Loading Class: net/minecraft/entity/EntityCreature.class +INFO: Loading Class: net/minecraft/entity/IJumpingMount.class +INFO: Loading Class: net/minecraft/entity/passive/EntityTameable.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/IAttribute.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/IAttributeInstance.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/AttributeModifier.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/BaseAttribute.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/AbstractAttributeMap.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/AttributeMap.class +INFO: Loading Class: net/minecraft/entity/ai/attributes/RangedAttribute.class +INFO: Loading Class: net/minecraft/entity/EntityBodyHelper.class +INFO: Loading Class: net/minecraft/entity/ai/EntityFlyHelper.class +INFO: Loading Class: net/minecraft/entity/ai/EntityJumpHelper.class +INFO: Loading Class: net/minecraft/entity/ai/EntityLookHelper.class +INFO: Loading Class: net/minecraft/entity/ai/EntityMoveHelper.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIAvoidEntity.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIBeg.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIBreakDoor.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIMate.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIDoorInteract.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDragonBreath$Factory.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIEatGrass.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFleeSun.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAISwimming.class +INFO: Loading Class: net/minecraft/advancements/Advancement$Builder.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFollow.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFollowOwnerFlying.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFollowOwner.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFollowParent.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIBase.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAITasks.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIHarvestFarmland.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIWatchClosest2.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAILeapAtTarget.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAILlamaFollowCaravan.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIWatchClosest.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAILookAtTradePlayer.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIVillagerMate.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIAttackMelee.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIMoveIndoors.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIMoveThroughVillage.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIMoveToBlock.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIMoveTowardsTarget.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIOcelotAttack.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIOcelotSit.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAILookAtVillager.class +INFO: Loading Class: net/minecraft/command/EntitySelector$9.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIOpenDoor.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIPanic.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIPlay.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAILookIdle.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIWander.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIAttackRanged.class +INFO: Loading Class: net/minecraft/command/EntitySelector$5.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIAttackRangedBow.class +INFO: Loading Class: net/minecraft/command/EntitySelector$6.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIRestrictOpenDoor.class +INFO: Loading Class: net/minecraft/command/EntitySelector$7.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIRestrictSun.class +INFO: Loading Class: net/minecraft/command/EntitySelector$8.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAISit.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAICreeperSwell.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFollowGolem.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAITempt.class +INFO: Loading Class: net/minecraft/client/renderer/ItemRenderer$1.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAITradePlayer.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIVillagerInteract.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIWanderAvoidWater.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIZombieAttack.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIDefendVillage.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIHurtByTarget.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFindEntityNearest.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.class +INFO: Loading Class: net/minecraft/entity/EntityTracker$1.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAINearestAttackableTarget.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAITargetNonTamed.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIOwnerHurtTarget.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAITarget.class +INFO: Loading Class: net/minecraft/pathfinding/PathNavigateFlying.class +INFO: Loading Class: net/minecraft/pathfinding/PathNavigateGround.class +INFO: Loading Class: net/minecraft/pathfinding/PathNavigate.class +INFO: Loading Class: net/minecraft/pathfinding/PathWorldListener.class +INFO: Loading Class: net/minecraft/pathfinding/PathNavigateClimber.class +INFO: Loading Class: net/minecraft/pathfinding/PathNavigateSwimmer.class +INFO: Loading Class: net/minecraft/entity/ai/EntitySenses.class +INFO: Loading Class: net/minecraft/entity/ai/RandomPositionGenerator.class +INFO: Loading Class: net/minecraft/village/VillageDoorInfo.class +INFO: Loading Class: net/minecraft/village/Village.class +INFO: Loading Class: net/minecraft/village/VillageSiege.class +INFO: Loading Class: net/minecraft/village/VillageCollection.class +INFO: Loading Class: net/minecraft/entity/passive/EntityAmbientCreature.class +INFO: Loading Class: net/minecraft/entity/passive/EntityBat.class +INFO: Loading Class: net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle.class +INFO: Loading Class: net/minecraft/entity/passive/EntityAnimal.class +INFO: Loading Class: net/minecraft/entity/passive/EntityChicken.class +INFO: Loading Class: net/minecraft/entity/passive/EntityCow.class +INFO: Loading Class: net/minecraft/client/gui/GuiOverlayDebug$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntityFlying.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGolem.class +INFO: Loading Class: net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox.class +INFO: Loading Class: net/minecraft/realms/RealmsAnvilLevelStorageSource.class +INFO: Loading Class: net/minecraft/init/Bootstrap$BehaviorDispenseOptional.class +INFO: Loading Class: net/minecraft/init/Bootstrap$BehaviorDispenseBoat.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionOr$1.class +INFO: Loading Class: net/minecraft/init/Bootstrap$17.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery$4.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery$5.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$8.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$7.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery$1.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$9.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery$2.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery$3.class +INFO: Loading Class: net/minecraft/item/ItemFishFood$FishType.class +INFO: Loading Class: net/minecraft/init/Bootstrap$12.class +INFO: Loading Class: net/minecraft/init/Bootstrap$11.class +INFO: Loading Class: net/minecraft/init/Bootstrap$10.class +INFO: Loading Class: net/minecraft/init/Bootstrap$1.class +INFO: Loading Class: net/minecraft/init/Bootstrap$16.class +INFO: Loading Class: net/minecraft/init/Bootstrap$15.class +INFO: Loading Class: net/minecraft/init/Bootstrap$14.class +INFO: Loading Class: net/minecraft/init/Bootstrap$13.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootPool$Serializer.class +INFO: Loading Class: net/minecraft/block/BlockBeacon$1$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery$Rotation.class +INFO: Loading Class: net/minecraft/world/end/DragonSpawnManager$5.class +INFO: Loading Class: net/minecraft/world/end/DragonSpawnManager$4.class +INFO: Loading Class: net/minecraft/world/end/DragonSpawnManager$3.class +INFO: Loading Class: net/minecraft/world/end/DragonSpawnManager$2.class +INFO: Loading Class: net/minecraft/entity/monster/EntityBlaze$AIFireballAttack.class +INFO: Loading Class: net/minecraft/world/end/DragonSpawnManager$1.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry.class +INFO: Loading Class: net/minecraft/network/ServerStatusResponse$Players$Serializer.class +INFO: Loading Class: net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate.class +INFO: Loading Class: net/minecraft/item/ItemBow$2.class +INFO: Loading Class: net/minecraft/item/ItemBow$1.class +INFO: Loading Class: net/minecraft/block/BlockNewLeaf$1.class +INFO: Loading Class: net/minecraft/block/BlockPrismarine$EnumType.class +INFO: Loading Class: net/minecraft/realms/RealmsScrolledSelectionList.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketResourcePackStatus$Action.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1.class +INFO: Loading Class: net/minecraft/entity/EntityLiving$SpawnPlacementType.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom.class +INFO: Loading Class: net/minecraft/block/BlockBeacon$1.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot.class +INFO: Loading Class: net/minecraft/client/gui/GuiCustomizeSkin$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityIllusionIllager$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityZombie$GroupData.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootContext$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetMetadata$Serializer.class +INFO: Loading Class: net/minecraft/client/multiplayer/ClientAdvancementManager$IListener.class +INFO: Loading Class: net/minecraft/entity/EntityLiving$1.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMap$2.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMap$3.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMap$4.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMap$5.class +INFO: Loading Class: net/minecraft/server/management/PlayerChunkMap$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell.class +INFO: Loading Class: net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootContext$Builder.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootContext$EntityTarget.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$1.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateBossInfo$1.class +INFO: Loading Class: net/minecraft/scoreboard/Score$1.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Field1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$House1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1.class +INFO: Loading Class: net/minecraft/client/resources/LegacyV2Adapter$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Hall.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Torch.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Field2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$House2.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Church.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Village.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$House3.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Path.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Start.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureMap$3.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage.class +INFO: Loading Class: net/minecraft/client/particle/ParticleExplosionHuge$Factory.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureMap$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Well.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureMap$2.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces$Road.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom.class +INFO: Loading Class: net/minecraft/entity/monster/EntityZombie$1.class +INFO: Loading Class: net/minecraft/client/util/RecipeItemHelper$RecipePicker.class +INFO: Loading Class: net/minecraft/item/ItemShield$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper.class +INFO: Loading Class: net/minecraft/util/text/ITextComponent$Serializer.class +INFO: Loading Class: net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntityLlama$1.class +INFO: Loading Class: net/minecraft/block/BlockHopper$1.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$12.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$11.class +INFO: Loading Class: net/minecraft/client/gui/GuiOptionsRowList$Row.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$10.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$1.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$3.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$2.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$14.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$13.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$4.class +INFO: Loading Class: net/minecraft/entity/passive/EntityLlama$AIDefendTarget.class +INFO: Loading Class: net/minecraft/entity/passive/EntityLlama$GroupData.class +INFO: Loading Class: net/minecraft/entity/passive/EntityLlama$AIHurtByTarget.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityShulkerBox$1.class +INFO: Loading Class: net/minecraft/client/util/SuffixArray$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/audio/MusicTicker$MusicType.class +INFO: Loading Class: net/minecraft/client/gui/GuiCreateFlatWorld$Details.class +INFO: Loading Class: net/minecraft/world/biome/BiomeCache$Block.class +INFO: Loading Class: net/minecraft/client/gui/toasts/IToast$Visibility.class +INFO: Loading Class: net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData.class +INFO: Loading Class: net/minecraft/world/chunk/Chunk$1.class +INFO: Loading Class: net/minecraft/client/renderer/EnumFaceDirection$1.class +INFO: Loading Class: net/minecraft/world/chunk/Chunk$EnumCreateEntityType.class +INFO: Loading Class: net/minecraft/client/renderer/EnumFaceDirection$VertexInformation.class +INFO: Loading Class: net/minecraft/client/renderer/EnumFaceDirection$Constants.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerEdge$1.class +INFO: Loading Class: net/minecraft/dispenser/IBehaviorDispenseItem$1.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$8.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$6.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$7.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$4.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$5.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$GuiResponder.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$2.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$3.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem$10.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$GuiListEntry.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$GuiEntry.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry.class +INFO: Loading Class: net/minecraft/entity/EntityList$EntityEggInfo.class +INFO: Loading Class: net/minecraft/server/management/UserList$Serializer.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySlime$AISlimeFloat.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySlime$AISlimeAttack.class +INFO: Loading Class: net/minecraft/advancements/AdvancementList$Listener.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySlime$AISlimeHop.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom.class +INFO: Loading Class: net/minecraft/server/management/UserList$1.class +INFO: Loading Class: net/minecraft/block/BlockRail$1.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$10.class +INFO: Loading Class: net/minecraft/world/chunk/storage/AnvilSaveConverter$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/Variant$Deserializer.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$1.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$6.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$5.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$4.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$3.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$2.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$12.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$11.class +INFO: Loading Class: net/minecraft/potion/PotionHelper$1.class +INFO: Loading Class: net/minecraft/item/crafting/ShieldRecipes$Decoration.class +INFO: Loading Class: net/minecraft/world/BossInfo$Overlay.class +INFO: Loading Class: net/minecraft/world/BossInfo$Color.class +INFO: Loading Class: net/minecraft/block/BlockFlower$EnumFlowerColor.class +INFO: Loading Class: net/minecraft/client/particle/ParticleMobAppearance$Factory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleEndRod$Factory.class +INFO: Loading Class: net/minecraft/block/BlockDoor$EnumHingePosition.class +INFO: Loading Class: net/minecraft/block/BlockDoor$EnumDoorHalf.class +INFO: Loading Class: net/minecraft/potion/PotionHelper$MixPredicate.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1.class +INFO: Loading Class: net/minecraft/client/util/JsonException$Entry.class +INFO: Loading Class: net/minecraft/realms/RealmsSimpleScrolledSelectionList.class +INFO: Loading Class: net/minecraft/client/gui/GuiMerchant$MerchantButton.class +INFO: Loading Class: net/minecraft/client/renderer/ThreadDownloadImageData$1.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityBeacon$BeamSegment.class +INFO: Loading Class: net/minecraft/block/BlockWall$EnumType.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenEndCity$Start.class +INFO: Loading Class: net/minecraft/client/util/JsonException$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityIronGolem$1.class +INFO: Loading Class: net/minecraft/client/audio/Sound$Type.class +INFO: Loading Class: net/minecraft/command/CommandClone$StaticCloneData.class +INFO: Loading Class: net/minecraft/block/BlockFlower$1.class +INFO: Loading Class: net/minecraft/block/BlockPistonExtension$1.class +INFO: Loading Class: net/minecraft/enchantment/Enchantment$Rarity.class +INFO: Loading Class: net/minecraft/client/settings/GameSettings$1.class +INFO: Loading Class: net/minecraft/client/settings/GameSettings$2.class +INFO: Loading Class: net/minecraft/client/settings/GameSettings$Options.class +INFO: Loading Class: net/minecraft/block/BlockFlower$EnumFlowerType.class +INFO: Loading Class: net/minecraft/block/BlockDoor$1.class +INFO: Loading Class: net/minecraft/realms/RealmsSliderButton.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDigging$Factory.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityMobSpawner$2.class +INFO: Loading Class: net/minecraft/block/BlockPistonExtension$EnumPistonType.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityMobSpawner$1.class +INFO: Loading Class: net/minecraft/item/ItemMultiTexture$Mapper.class +INFO: Loading Class: net/minecraft/block/BlockRailBase$EnumRailDirection.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenAddServer$1.class +INFO: Loading Class: net/minecraft/block/BlockRailBase$Rail.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate.class +INFO: Loading Class: net/minecraft/entity/monster/AbstractSkeleton$1.class +INFO: Loading Class: net/minecraft/network/play/client/CPacketSeenAdvancements$Action.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootTable$Serializer.class +INFO: Loading Class: net/minecraft/item/ItemElytra$1.class +INFO: Loading Class: net/minecraft/block/BlockPressurePlate$1.class +INFO: Loading Class: net/minecraft/world/biome/BiomeHills$Type.class +INFO: Loading Class: net/minecraft/item/ItemGlassBottle$1.class +INFO: Loading Class: net/minecraft/crash/CrashReport$1.class +INFO: Loading Class: net/minecraft/crash/CrashReport$3.class +INFO: Loading Class: net/minecraft/crash/CrashReport$2.class +INFO: Loading Class: net/minecraft/crash/CrashReport$5.class +INFO: Loading Class: net/minecraft/crash/CrashReport$4.class +INFO: Loading Class: net/minecraft/crash/CrashReport$7.class +INFO: Loading Class: net/minecraft/crash/CrashReport$6.class +INFO: Loading Class: net/minecraft/client/renderer/BannerTextures$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemOverride$Deserializer.class +INFO: Loading Class: net/minecraft/server/management/PlayerProfileCache$ProfileEntry.class +INFO: Loading Class: net/minecraft/server/management/PlayerProfileCache$Serializer.class +INFO: Loading Class: net/minecraft/client/particle/ParticleExplosionLarge$Factory.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCombatEvent$1.class +INFO: Loading Class: net/minecraft/client/renderer/vertex/VertexFormat$1.class +INFO: Loading Class: net/minecraft/server/management/PlayerProfileCache$1.class +INFO: Loading Class: net/minecraft/server/management/PlayerProfileCache$2.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/CompiledChunk$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument.class +INFO: Loading Class: net/minecraft/block/BlockStructure$1.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenMinable$1.class +INFO: Loading Class: net/minecraft/realms/RealmsVertexFormat.class +INFO: Loading Class: net/minecraft/item/ItemMultiTexture$1.class +INFO: Loading Class: net/minecraft/block/BlockRailBase$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetDamage$Serializer.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketCombatEvent$Event.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$3.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$4.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$12.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$2.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$10.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$11.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$1.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$5.class +INFO: Loading Class: net/minecraft/realms/RealmsMth.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors$6.class +INFO: Loading Class: net/minecraft/advancements/AdvancementManager$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder.class +INFO: Loading Class: net/minecraft/network/datasync/EntityDataManager$DataEntry.class +INFO: Loading Class: net/minecraft/client/particle/ParticleRedstone$Factory.class +INFO: Loading Class: net/minecraft/network/NetworkManager$1.class +INFO: Loading Class: net/minecraft/network/NetworkManager$2.class +INFO: Loading Class: net/minecraft/network/NetworkManager$3.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenVillage$Start.class +INFO: Loading Class: net/minecraft/command/CommandResultStats$1.class +INFO: Loading Class: net/minecraft/block/BlockRailDetector$2.class +INFO: Loading Class: net/minecraft/block/BlockRailDetector$1.class +INFO: Loading Class: net/minecraft/block/BlockOldLeaf$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockPart$Deserializer.class +INFO: Loading Class: net/minecraft/world/World$5.class +INFO: Loading Class: net/minecraft/world/World$3.class +INFO: Loading Class: net/minecraft/world/World$4.class +INFO: Loading Class: net/minecraft/world/World$1.class +INFO: Loading Class: net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener.class +INFO: Loading Class: net/minecraft/world/World$2.class +INFO: Loading Class: net/minecraft/command/CommandResultStats$Type.class +INFO: Loading Class: net/minecraft/network/NetworkManager$4.class +INFO: Loading Class: net/minecraft/network/NetworkManager$5.class +INFO: Loading Class: net/minecraft/network/NetworkManager$6.class +INFO: Loading Class: net/minecraft/client/model/ModelBiped$ArmPose.class +INFO: Loading Class: net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners.class +INFO: Loading Class: net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/util/SearchTreeManager$Key.class +INFO: Loading Class: net/minecraft/client/multiplayer/GuiConnecting$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGhast$GhastMoveHelper.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGhast$AILookAround.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGhast$AIRandomFly.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGhast$AIFireballAttack.class +INFO: Loading Class: net/minecraft/block/BlockQuartz$1.class +INFO: Loading Class: net/minecraft/world/biome/Biome$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/VariantList$Deserializer.class +INFO: Loading Class: net/minecraft/block/BlockOldLog$1.class +INFO: Loading Class: net/minecraft/block/BlockQuartz$EnumType.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer.class +INFO: Loading Class: net/minecraft/block/BlockOldLog$2.class +INFO: Loading Class: net/minecraft/world/biome/Biome$SpawnListEntry.class +INFO: Loading Class: net/minecraft/world/biome/Biome$BiomeProperties.class +INFO: Loading Class: net/minecraft/world/biome/Biome$TempCategory.class +INFO: Loading Class: net/minecraft/client/gui/toasts/SystemToast$Type.class +INFO: Loading Class: net/minecraft/advancements/AdvancementProgress$Serializer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1.class +INFO: Loading Class: net/minecraft/block/BlockVine$1.class +INFO: Loading Class: net/minecraft/block/BlockStairs$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer.class +INFO: Loading Class: net/minecraft/block/BlockStairs$EnumHalf.class +INFO: Loading Class: net/minecraft/block/BlockShulkerBox$1.class +INFO: Loading Class: net/minecraft/block/BlockStairs$EnumShape.class +INFO: Loading Class: net/minecraft/command/CommandSpreadPlayers$Position.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$Stats.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$StatsMobsList.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$StatsItem.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$StatsGeneral.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$StatsBlock.class +INFO: Loading Class: net/minecraft/entity/passive/EntitySquid$AIMoveRandom.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBlockDust$Factory.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template$2.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template$3.class +INFO: Loading Class: net/minecraft/block/BlockPistonBase$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template$BlockInfo.class +INFO: Loading Class: net/minecraft/client/particle/ParticleLava$Factory.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template$BasicPalette.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureComponent$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template$EntityInfo.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureComponent$BlockSelector.class +INFO: Loading Class: net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureBoundingBox$1.class +INFO: Loading Class: net/minecraft/realms/RealmsBufferBuilder.class +INFO: Loading Class: net/minecraft/scoreboard/IScoreCriteria$EnumRenderType.class +INFO: Loading Class: net/minecraft/client/renderer/BannerTextures$Cache.class +INFO: Loading Class: net/minecraft/block/BlockPressurePlate$Sensitivity.class +INFO: Loading Class: net/minecraft/client/renderer/BannerTextures$CacheEntry.class +INFO: Loading Class: net/minecraft/network/ServerStatusResponse$Version$Serializer.class +INFO: Loading Class: net/minecraft/realms/RealmsDefaultVertexFormat.class +INFO: Loading Class: net/minecraft/advancements/critereon/NetherTravelTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners.class +INFO: Loading Class: net/minecraft/block/BlockLever$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/gui/GuiSlider$FormatHelper.class +INFO: Loading Class: net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance.class +INFO: Loading Class: net/minecraft/block/BlockGrassPath$1.class +INFO: Loading Class: net/minecraft/block/BlockLever$EnumOrientation.class +INFO: Loading Class: net/minecraft/entity/passive/EntityWolf$1.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBakery$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBakery$3.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBakery$2.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory$2.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory$1.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory$3.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory$6.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory$7.class +INFO: Loading Class: net/minecraft/entity/passive/EntityMooshroom.class +INFO: Loading Class: net/minecraft/entity/passive/EntityParrot.class +INFO: Loading Class: net/minecraft/entity/passive/EntityOcelot.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear.class +INFO: Loading Class: net/minecraft/entity/passive/EntityPig.class +INFO: Loading Class: net/minecraft/entity/passive/EntitySheep.class +INFO: Loading Class: net/minecraft/entity/passive/EntityRabbit.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySnowman.class +INFO: Loading Class: net/minecraft/entity/passive/EntityShoulderRiding.class +INFO: Loading Class: net/minecraft/entity/monster/EntityIronGolem.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityPiston$1.class +INFO: Loading Class: net/minecraft/entity/passive/EntitySquid.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityPiston$2.class +INFO: Loading Class: net/minecraft/entity/passive/EntityWolf.class +INFO: Loading Class: net/minecraft/entity/passive/EntityWaterMob.class +INFO: Loading Class: net/minecraft/entity/passive/EntityWolf$AIAvoidEntity.class +INFO: Loading Class: net/minecraft/entity/passive/AbstractHorse.class +INFO: Loading Class: net/minecraft/entity/passive/AbstractChestHorse.class +INFO: Loading Class: net/minecraft/entity/passive/EntityHorse.class +INFO: Loading Class: net/minecraft/entity/passive/EntityDonkey.class +INFO: Loading Class: net/minecraft/entity/passive/EntityLlama.class +INFO: Loading Class: net/minecraft/entity/passive/HorseArmorType.class +INFO: Loading Class: net/minecraft/entity/passive/EntitySkeletonHorse.class +INFO: Loading Class: net/minecraft/entity/passive/EntityMule.class +INFO: Loading Class: net/minecraft/entity/passive/EntityZombieHorse.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper$DamageIterator.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAISkeletonRiders.class +INFO: Loading Class: net/minecraft/block/BlockSlab$EnumBlockHalf.class +INFO: Loading Class: net/minecraft/entity/MultiPartEntityPart.class +INFO: Loading Class: net/minecraft/crash/CrashReportCategory$Entry.class +INFO: Loading Class: net/minecraft/entity/IEntityMultiPart.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerListItem$1.class +INFO: Loading Class: net/minecraft/entity/boss/EntityDragon.class +INFO: Loading Class: net/minecraft/entity/item/EntityEnderCrystal.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseBase.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper$IModifier.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseDying.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper$HurtIterator.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.class +INFO: Loading Class: net/minecraft/inventory/ContainerBeacon$BeaconSlot.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper$ModifierDamage.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseHover.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper$ModifierLiving.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/IPhase.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseLanding.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseList.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.class +INFO: Loading Class: net/minecraft/entity/boss/dragon/phase/PhaseManager.class +INFO: Loading Class: net/minecraft/entity/boss/EntityWither.class +INFO: Loading Class: net/minecraft/entity/item/EntityArmorStand.class +INFO: Loading Class: net/minecraft/entity/EntityHanging.class +INFO: Loading Class: net/minecraft/entity/EntityLeashKnot.class +INFO: Loading Class: net/minecraft/entity/item/EntityItemFrame.class +INFO: Loading Class: net/minecraft/entity/item/EntityPainting.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityFishHook.class +INFO: Loading Class: net/minecraft/entity/effect/EntityLightningBolt.class +INFO: Loading Class: net/minecraft/entity/effect/EntityWeatherEffect.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$7.class +INFO: Loading Class: net/minecraft/entity/item/EntityFallingBlock.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$8.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$5.class +INFO: Loading Class: net/minecraft/entity/item/EntityTNTPrimed.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$6.class +INFO: Loading Class: net/minecraft/entity/item/EntityItem.class +INFO: Loading Class: net/minecraft/entity/monster/AbstractIllager.class +INFO: Loading Class: net/minecraft/network/datasync/DataSerializers$9.class +INFO: Loading Class: net/minecraft/entity/monster/EntityBlaze.class +INFO: Loading Class: net/minecraft/entity/monster/AbstractSkeleton.class +INFO: Loading Class: net/minecraft/entity/monster/EntityCreeper.class +INFO: Loading Class: net/minecraft/entity/monster/EntityCaveSpider.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEnderman.class +INFO: Loading Class: net/minecraft/entity/monster/EntityElderGuardian.class +INFO: Loading Class: net/minecraft/entity/monster/IMob.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEndermite.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGhast.class +INFO: Loading Class: net/minecraft/entity/monster/EntityEvoker.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGiantZombie.class +INFO: Loading Class: net/minecraft/entity/monster/EntityHusk.class +INFO: Loading Class: net/minecraft/entity/monster/EntityGuardian.class +INFO: Loading Class: net/minecraft/entity/monster/EntityMagmaCube.class +INFO: Loading Class: net/minecraft/entity/monster/EntityIllusionIllager.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPigZombie.class +INFO: Loading Class: net/minecraft/entity/monster/EntityMob.class +INFO: Loading Class: net/minecraft/entity/SharedMonsterAttributes.class +INFO: Loading Class: net/minecraft/entity/IRangedAttackMob.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySilverfish.class +INFO: Loading Class: net/minecraft/entity/monster/EntityShulker.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySlime.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySkeleton.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpider.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpellcasterIllager.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVex.class +INFO: Loading Class: net/minecraft/entity/monster/EntityStray.class +INFO: Loading Class: net/minecraft/entity/monster/EntityWitch.class +INFO: Loading Class: net/minecraft/entity/monster/EntityVindicator.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$8.class +INFO: Loading Class: net/minecraft/entity/monster/EntityZombie.class +INFO: Loading Class: net/minecraft/entity/monster/EntityWitherSkeleton.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerListItem$Action.class +INFO: Loading Class: net/minecraft/entity/monster/EntityZombieVillager.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$4.class +INFO: Loading Class: net/minecraft/entity/INpc.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$5.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData.class +INFO: Loading Class: net/minecraft/entity/NpcMerchant.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$6.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$7.class +INFO: Loading Class: net/minecraft/entity/passive/EntityVillager.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$1.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$2.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes$3.class +INFO: Loading Class: net/minecraft/entity/player/InventoryPlayer.class +INFO: Loading Class: net/minecraft/entity/player/PlayerCapabilities.class +INFO: Loading Class: net/minecraft/entity/player/EnumPlayerModelParts.class +INFO: Loading Class: net/minecraft/entity/player/EntityPlayer.class +INFO: Loading Class: net/minecraft/client/util/RecipeItemHelper.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityDragonFireball.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityArrow.class +INFO: Loading Class: net/minecraft/entity/item/EntityEnderEye.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityEvokerFangs.class +INFO: Loading Class: net/minecraft/entity/item/EntityFireworkRocket.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityFireball.class +INFO: Loading Class: net/minecraft/block/BlockPurpurSlab$Double.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityLlamaSpit.class +INFO: Loading Class: net/minecraft/block/BlockPurpurSlab$Half.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityLargeFireball.class +INFO: Loading Class: net/minecraft/block/BlockPurpurSlab$Variant.class +INFO: Loading Class: net/minecraft/entity/projectile/ProjectileHelper.class +INFO: Loading Class: net/minecraft/entity/IProjectile.class +INFO: Loading Class: net/minecraft/entity/projectile/EntitySmallFireball.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityShulkerBullet.class +INFO: Loading Class: net/minecraft/entity/projectile/EntitySpectralArrow.class +INFO: Loading Class: net/minecraft/entity/projectile/EntitySnowball.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityEgg.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityThrowable.class +INFO: Loading Class: net/minecraft/entity/item/EntityExpBottle.class +INFO: Loading Class: net/minecraft/entity/item/EntityEnderPearl.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityPotion.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityWitherSkull.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityTippedArrow.class +INFO: Loading Class: net/minecraft/entity/item/EntityBoat.class +INFO: Loading Class: net/minecraft/advancements/FunctionManager$1.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartChest.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecart.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartContainer.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartCommandBlock.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartHopper.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartFurnace.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartMobSpawner.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartEmpty.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartTNT.class +INFO: Loading Class: net/minecraft/util/FoodStats.class +INFO: Loading Class: net/minecraft/inventory/Container.class +INFO: Loading Class: net/minecraft/inventory/ContainerBeacon.class +INFO: Loading Class: net/minecraft/inventory/ContainerRepair.class +INFO: Loading Class: net/minecraft/inventory/ContainerChest.class +INFO: Loading Class: net/minecraft/inventory/ContainerBrewingStand.class +INFO: Loading Class: net/minecraft/inventory/IContainerListener.class +INFO: Loading Class: net/minecraft/inventory/ClickType.class +INFO: Loading Class: net/minecraft/inventory/ContainerWorkbench.class +INFO: Loading Class: net/minecraft/inventory/InventoryCrafting.class +INFO: Loading Class: net/minecraft/block/BlockStoneSlabNew$EnumType.class +INFO: Loading Class: net/minecraft/realms/RealmsBridge.class +INFO: Loading Class: net/minecraft/inventory/ContainerDispenser.class +INFO: Loading Class: net/minecraft/inventory/SlotFurnaceFuel.class +INFO: Loading Class: net/minecraft/inventory/ContainerEnchantment.class +INFO: Loading Class: net/minecraft/inventory/SlotFurnaceOutput.class +INFO: Loading Class: net/minecraft/inventory/ContainerFurnace.class +INFO: Loading Class: net/minecraft/inventory/ContainerHorseChest.class +INFO: Loading Class: net/minecraft/inventory/ContainerHopper.class +INFO: Loading Class: net/minecraft/inventory/ContainerPlayer.class +INFO: Loading Class: net/minecraft/inventory/ContainerHorseInventory.class +INFO: Loading Class: net/minecraft/inventory/ContainerMerchant.class +INFO: Loading Class: net/minecraft/inventory/InventoryMerchant.class +INFO: Loading Class: net/minecraft/block/BlockPane$1.class +INFO: Loading Class: net/minecraft/inventory/InventoryEnderChest.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityArrow$PickupStatus.class +INFO: Loading Class: net/minecraft/inventory/SlotMerchantResult.class +INFO: Loading Class: net/minecraft/inventory/SlotCrafting.class +INFO: Loading Class: net/minecraft/inventory/InventoryCraftResult.class +INFO: Loading Class: net/minecraft/command/EntitySelector$4.class +INFO: Loading Class: net/minecraft/inventory/SlotShulkerBox.class +INFO: Loading Class: net/minecraft/inventory/ContainerShulkerBox.class +INFO: Loading Class: net/minecraft/command/EntitySelector$2.class +INFO: Loading Class: net/minecraft/command/EntitySelector$3.class +INFO: Loading Class: net/minecraft/inventory/Slot.class +INFO: Loading Class: net/minecraft/command/EntitySelector$13.class +INFO: Loading Class: net/minecraft/network/EnumConnectionState$1.class +INFO: Loading Class: net/minecraft/item/ItemAnvilBlock.class +INFO: Loading Class: net/minecraft/command/EntitySelector$14.class +INFO: Loading Class: net/minecraft/network/EnumConnectionState$2.class +INFO: Loading Class: net/minecraft/util/text/event/HoverEvent$Action.class +INFO: Loading Class: net/minecraft/item/ItemAir.class +INFO: Loading Class: net/minecraft/item/ItemArmorStand.class +INFO: Loading Class: net/minecraft/item/ItemArmor.class +INFO: Loading Class: net/minecraft/item/ItemAxe.class +INFO: Loading Class: net/minecraft/item/ItemArrow.class +INFO: Loading Class: net/minecraft/item/ItemBanner.class +INFO: Loading Class: net/minecraft/item/ItemBlock.class +INFO: Loading Class: net/minecraft/item/ItemBed.class +INFO: Loading Class: net/minecraft/item/ItemBoat.class +INFO: Loading Class: net/minecraft/item/ItemBlockSpecial.class +INFO: Loading Class: net/minecraft/item/ItemGlassBottle.class +INFO: Loading Class: net/minecraft/item/ItemBook.class +INFO: Loading Class: net/minecraft/item/ItemSoup.class +INFO: Loading Class: net/minecraft/item/ItemBow.class +INFO: Loading Class: net/minecraft/item/ItemCarrotOnAStick.class +INFO: Loading Class: net/minecraft/item/ItemBucket.class +INFO: Loading Class: net/minecraft/item/ItemClock.class +INFO: Loading Class: net/minecraft/item/ItemChorusFruit.class +INFO: Loading Class: net/minecraft/item/ItemCompass.class +INFO: Loading Class: net/minecraft/item/ItemCoal.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs.class +INFO: Loading Class: net/minecraft/item/ItemMapBase.class +INFO: Loading Class: net/minecraft/item/ItemDoor.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootTableManager$1.class +INFO: Loading Class: net/minecraft/item/ItemTool.class +INFO: Loading Class: net/minecraft/item/ItemDye.class +INFO: Loading Class: net/minecraft/item/EnumDyeColor.class +INFO: Loading Class: net/minecraft/item/ItemEgg.class +INFO: Loading Class: net/minecraft/item/ItemCloth.class +INFO: Loading Class: net/minecraft/command/EntitySelector$11.class +INFO: Loading Class: net/minecraft/advancements/FunctionManager$QueuedCommand.class +INFO: Loading Class: net/minecraft/item/ItemEmptyMap.class +INFO: Loading Class: net/minecraft/command/EntitySelector$12.class +INFO: Loading Class: net/minecraft/item/ItemElytra.class +INFO: Loading Class: net/minecraft/command/EntitySelector$1.class +INFO: Loading Class: net/minecraft/item/ItemEndCrystal.class +INFO: Loading Class: net/minecraft/command/EntitySelector$10.class +INFO: Loading Class: net/minecraft/item/ItemEnchantedBook.class +INFO: Loading Class: net/minecraft/item/ItemEnderEye.class +INFO: Loading Class: net/minecraft/item/ItemExpBottle.class +INFO: Loading Class: net/minecraft/item/ItemEnderPearl.class +INFO: Loading Class: net/minecraft/item/ItemFireworkCharge.class +INFO: Loading Class: net/minecraft/item/ItemFireball.class +INFO: Loading Class: net/minecraft/item/ItemFishFood.class +INFO: Loading Class: net/minecraft/item/ItemFirework.class +INFO: Loading Class: net/minecraft/item/ItemFlintAndSteel.class +INFO: Loading Class: net/minecraft/item/ItemFishingRod.class +INFO: Loading Class: net/minecraft/item/ItemAppleGold.class +INFO: Loading Class: net/minecraft/item/ItemFood.class +INFO: Loading Class: net/minecraft/item/ItemHoe.class +INFO: Loading Class: net/minecraft/item/ItemHangingEntity.class +INFO: Loading Class: net/minecraft/util/CooldownTracker.class +INFO: Loading Class: net/minecraft/item/Item.class +INFO: Loading Class: net/minecraft/item/IItemPropertyGetter.class +INFO: Loading Class: net/minecraft/item/ItemStack.class +INFO: Loading Class: net/minecraft/item/ItemKnowledgeBook.class +INFO: Loading Class: net/minecraft/init/Items.class +INFO: Loading Class: net/minecraft/item/ItemLeaves.class +INFO: Loading Class: net/minecraft/item/ItemLead.class +INFO: Loading Class: net/minecraft/item/ItemMap.class +INFO: Loading Class: net/minecraft/item/ItemLingeringPotion.class +INFO: Loading Class: net/minecraft/item/ItemMinecart.class +INFO: Loading Class: net/minecraft/item/ItemBucketMilk.class +INFO: Loading Class: net/minecraft/item/ItemMultiTexture.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/Smelt$Serializer.class +INFO: Loading Class: net/minecraft/item/ItemPickaxe.class +INFO: Loading Class: net/minecraft/item/ItemNameTag.class +INFO: Loading Class: net/minecraft/item/ItemPotion.class +INFO: Loading Class: net/minecraft/item/ItemPiston.class +INFO: Loading Class: net/minecraft/item/ItemRecord.class +INFO: Loading Class: net/minecraft/item/EnumRarity.class +INFO: Loading Class: net/minecraft/item/ItemSaddle.class +INFO: Loading Class: net/minecraft/item/ItemRedstone.class +INFO: Loading Class: net/minecraft/item/ItemSeeds.class +INFO: Loading Class: net/minecraft/item/ItemSeedFood.class +INFO: Loading Class: net/minecraft/item/ItemShears.class +INFO: Loading Class: net/minecraft/util/CooldownTrackerServer.class +INFO: Loading Class: net/minecraft/item/ItemSpade.class +INFO: Loading Class: net/minecraft/item/ItemShield.class +INFO: Loading Class: net/minecraft/item/ItemSign.class +INFO: Loading Class: net/minecraft/item/ItemShulkerBox.class +INFO: Loading Class: net/minecraft/item/ItemSkull.class +INFO: Loading Class: net/minecraft/item/ItemSimpleFoiled.class +INFO: Loading Class: net/minecraft/item/ItemSnow.class +INFO: Loading Class: net/minecraft/item/ItemSlab.class +INFO: Loading Class: net/minecraft/block/BlockRotatedPillar$1.class +INFO: Loading Class: net/minecraft/item/ItemMonsterPlacer.class +INFO: Loading Class: net/minecraft/item/ItemSnowball.class +INFO: Loading Class: net/minecraft/item/ItemSplashPotion.class +INFO: Loading Class: net/minecraft/item/ItemSpectralArrow.class +INFO: Loading Class: net/minecraft/network/EnumConnectionState$3.class +INFO: Loading Class: net/minecraft/item/ItemColored.class +INFO: Loading Class: net/minecraft/network/EnumConnectionState$4.class +INFO: Loading Class: net/minecraft/item/ItemSword.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenOptionsSounds$Button.class +INFO: Loading Class: net/minecraft/item/ItemTippedArrow.class +INFO: Loading Class: net/minecraft/item/EnumAction.class +INFO: Loading Class: net/minecraft/client/util/ITooltipFlag.class +INFO: Loading Class: net/minecraft/item/ItemWritableBook.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootTableManager$Loader.class +INFO: Loading Class: net/minecraft/item/ItemLilyPad.class +INFO: Loading Class: net/minecraft/client/shader/ShaderLoader$ShaderType.class +INFO: Loading Class: net/minecraft/potion/PotionType.class +INFO: Loading Class: net/minecraft/item/ItemWrittenBook.class +INFO: Loading Class: net/minecraft/potion/PotionUtils.class +INFO: Loading Class: net/minecraft/potion/PotionHelper.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackRepository$3.class +INFO: Loading Class: net/minecraft/init/PotionTypes.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackRepository$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSnowShovel$Factory.class +INFO: Loading Class: net/minecraft/item/crafting/RecipesBanners.class +INFO: Loading Class: net/minecraft/client/resources/data/MetadataSerializer$Registration.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackRepository$2.class +INFO: Loading Class: net/minecraft/item/crafting/RecipesArmorDyes.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$1.class +INFO: Loading Class: net/minecraft/item/crafting/RecipeFireworks.class +INFO: Loading Class: net/minecraft/item/crafting/RecipeBookCloning.class +INFO: Loading Class: net/minecraft/item/crafting/Ingredient.class +INFO: Loading Class: net/minecraft/util/IntHashMap$Entry.class +INFO: Loading Class: net/minecraft/item/crafting/FurnaceRecipes.class +INFO: Loading Class: net/minecraft/item/crafting/RecipesMapExtending.class +INFO: Loading Class: net/minecraft/item/crafting/RecipesMapCloning.class +INFO: Loading Class: net/minecraft/item/crafting/CraftingManager.class +INFO: Loading Class: net/minecraft/item/crafting/IRecipe.class +INFO: Loading Class: net/minecraft/item/crafting/ShapedRecipes.class +INFO: Loading Class: net/minecraft/item/crafting/RecipeRepairItem.class +INFO: Loading Class: net/minecraft/item/crafting/ShieldRecipes.class +INFO: Loading Class: net/minecraft/item/crafting/ShapelessRecipes.class +INFO: Loading Class: net/minecraft/item/crafting/ShulkerBoxRecipes.class +INFO: Loading Class: net/minecraft/item/crafting/RecipeTippedArrow.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentArrowFire.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentArrowDamage.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentArrowKnockback.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentArrowInfinite.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentDamage.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentBindingCurse.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentDigging.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentDurability.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType.class +INFO: Loading Class: net/minecraft/enchantment/Enchantment.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentData.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentHelper.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentFireAspect.class +INFO: Loading Class: net/minecraft/init/Enchantments.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentFrostWalker.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentFishingSpeed.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentLootBonus.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentKnockback.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentOxygen.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentMending.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentSweepingEdge.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentProtection.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentUntouching.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentThorns.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentVanishingCurse.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentWaterWorker.class +INFO: Loading Class: net/minecraft/enchantment/EnchantmentWaterWalker.class +INFO: Loading Class: net/minecraft/village/MerchantRecipe.class +INFO: Loading Class: net/minecraft/entity/IMerchant.class +INFO: Loading Class: net/minecraft/village/MerchantRecipeList.class +INFO: Loading Class: net/minecraft/tileentity/MobSpawnerBaseLogic.class +INFO: Loading Class: net/minecraft/tileentity/CommandBlockBaseLogic.class +INFO: Loading Class: net/minecraft/util/BlockRenderLayer.class +INFO: Loading Class: net/minecraft/block/BlockEventData.class +INFO: Loading Class: net/minecraft/util/math/ChunkPos.class +INFO: Loading Class: net/minecraft/world/ColorizerFoliage.class +INFO: Loading Class: net/minecraft/world/Explosion.class +INFO: Loading Class: net/minecraft/world/GameType.class +INFO: Loading Class: net/minecraft/world/GameRules.class +INFO: Loading Class: net/minecraft/world/World.class +INFO: Loading Class: net/minecraft/world/ColorizerGrass.class +INFO: Loading Class: net/minecraft/world/IWorldEventListener.class +INFO: Loading Class: net/minecraft/world/MinecraftException.class +INFO: Loading Class: net/minecraft/world/IBlockAccess.class +INFO: Loading Class: net/minecraft/world/WorldSettings.class +INFO: Loading Class: net/minecraft/world/WorldType.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor.class +INFO: Loading Class: net/minecraft/world/WorldEntitySpawner.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor.class +INFO: Loading Class: net/minecraft/world/EnumSkyBlock.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid.class +INFO: Loading Class: net/minecraft/world/ChunkCache.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityArrow$1.class +INFO: Loading Class: net/minecraft/world/Teleporter.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData.class +INFO: Loading Class: net/minecraft/world/NextTickListEntry.class +INFO: Loading Class: net/minecraft/util/WeightedSpawnerEntity.class +INFO: Loading Class: net/minecraft/world/biome/Biome.class +INFO: Loading Class: net/minecraft/world/biome/BiomeBeach.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureManager$1.class +INFO: Loading Class: net/minecraft/world/biome/BiomeColorHelper.class +INFO: Loading Class: net/minecraft/world/biome/BiomeCache.class +INFO: Loading Class: net/minecraft/world/biome/BiomeProvider.class +INFO: Loading Class: net/minecraft/world/biome/BiomeDecorator.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut.class +INFO: Loading Class: net/minecraft/init/Biomes.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature.class +INFO: Loading Class: net/minecraft/world/biome/BiomeHills.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid.class +INFO: Loading Class: net/minecraft/world/biome/BiomeDesert.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo.class +INFO: Loading Class: net/minecraft/world/biome/BiomeForest.class +INFO: Loading Class: net/minecraft/world/biome/BiomeProviderSingle.class +INFO: Loading Class: net/minecraft/world/biome/BiomeHellDecorator.class +INFO: Loading Class: net/minecraft/world/biome/BiomeHell.class +INFO: Loading Class: net/minecraft/world/biome/BiomeJungle.class +INFO: Loading Class: net/minecraft/world/biome/BiomeSnow.class +INFO: Loading Class: net/minecraft/world/biome/BiomeMushroomIsland.class +INFO: Loading Class: net/minecraft/world/biome/BiomeMesa.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerLoginClient$1.class +INFO: Loading Class: net/minecraft/world/biome/BiomeSavannaMutated.class +INFO: Loading Class: net/minecraft/block/BlockDirt$DirtType.class +INFO: Loading Class: net/minecraft/client/particle/Barrier$Factory.class +INFO: Loading Class: net/minecraft/world/biome/BiomeForestMutated.class +INFO: Loading Class: net/minecraft/server/MinecraftServer$4.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackRepository$Entry.class +INFO: Loading Class: net/minecraft/world/biome/BiomeOcean.class +INFO: Loading Class: net/minecraft/world/biome/BiomeRiver.class +INFO: Loading Class: net/minecraft/world/biome/BiomePlains.class +INFO: Loading Class: net/minecraft/world/biome/BiomeStoneBeach.class +INFO: Loading Class: net/minecraft/world/biome/BiomeSavanna.class +INFO: Loading Class: net/minecraft/advancements/AdvancementRewards$1.class +INFO: Loading Class: net/minecraft/world/biome/BiomeTaiga.class +INFO: Loading Class: net/minecraft/world/biome/BiomeSwamp.class +INFO: Loading Class: net/minecraft/world/biome/BiomeEndDecorator.class +INFO: Loading Class: net/minecraft/world/biome/BiomeEnd.class +INFO: Loading Class: net/minecraft/world/biome/BiomeVoidDecorator.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid.class +INFO: Loading Class: net/minecraft/server/MinecraftServer$1.class +INFO: Loading Class: net/minecraft/world/biome/BiomeVoid.class +INFO: Loading Class: net/minecraft/block/BlockAir.class +INFO: Loading Class: net/minecraft/server/MinecraftServer$3.class +INFO: Loading Class: net/minecraft/block/BlockBanner.class +INFO: Loading Class: net/minecraft/block/BlockAnvil.class +INFO: Loading Class: net/minecraft/block/BlockContainer.class +INFO: Loading Class: net/minecraft/block/BlockBarrier.class +INFO: Loading Class: net/minecraft/block/BlockRailBase.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$ArmoredMob.class +INFO: Loading Class: net/minecraft/block/BlockBasePressurePlate.class +INFO: Loading Class: net/minecraft/block/BlockBed.class +INFO: Loading Class: net/minecraft/block/BlockBeacon.class +INFO: Loading Class: net/minecraft/block/Block.class +INFO: Loading Class: net/minecraft/block/BlockBeetroot.class +INFO: Loading Class: net/minecraft/network/NetHandlerPlayServer$1.class +INFO: Loading Class: net/minecraft/block/BlockBone.class +INFO: Loading Class: net/minecraft/network/NetHandlerPlayServer$2.class +INFO: Loading Class: net/minecraft/init/Blocks.class +INFO: Loading Class: net/minecraft/block/IGrowable.class +INFO: Loading Class: net/minecraft/block/BlockBrewingStand.class +INFO: Loading Class: net/minecraft/block/BlockBookshelf.class +INFO: Loading Class: net/minecraft/block/BlockButton.class +INFO: Loading Class: net/minecraft/block/BlockBush.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear$1.class +INFO: Loading Class: net/minecraft/block/BlockCake.class +INFO: Loading Class: net/minecraft/block/BlockCactus.class +INFO: Loading Class: net/minecraft/block/BlockCauldron.class +INFO: Loading Class: net/minecraft/block/BlockCarrot.class +INFO: Loading Class: net/minecraft/block/BlockChorusFlower.class +INFO: Loading Class: net/minecraft/block/BlockChest.class +INFO: Loading Class: net/minecraft/block/BlockClay.class +INFO: Loading Class: net/minecraft/block/BlockChorusPlant.class +INFO: Loading Class: net/minecraft/block/BlockColored.class +INFO: Loading Class: net/minecraft/block/BlockCocoa.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneComparator.class +INFO: Loading Class: net/minecraft/block/BlockCommandBlock.class +INFO: Loading Class: net/minecraft/block/BlockWorkbench.class +INFO: Loading Class: net/minecraft/block/BlockConcretePowder.class +INFO: Loading Class: net/minecraft/block/BlockDaylightDetector.class +INFO: Loading Class: net/minecraft/block/BlockCrops.class +INFO: Loading Class: net/minecraft/block/BlockRailDetector.class +INFO: Loading Class: net/minecraft/block/BlockDeadBush.class +INFO: Loading Class: net/minecraft/advancements/AdvancementRewards$Deserializer.class +INFO: Loading Class: net/minecraft/block/BlockDirectional.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneDiode.class +INFO: Loading Class: net/minecraft/block/BlockDispenser.class +INFO: Loading Class: net/minecraft/block/BlockDirt.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLivingBase$1.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$6.class +INFO: Loading Class: net/minecraft/block/BlockDoor.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$5.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$4.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartMobSpawner$1.class +INFO: Loading Class: net/minecraft/block/BlockDragonEgg.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityStructure$1.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$3.class +INFO: Loading Class: net/minecraft/entity/item/EntityMinecartMobSpawner$2.class +INFO: Loading Class: net/minecraft/block/BlockDoublePlant.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityStructure$2.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$2.class +INFO: Loading Class: net/minecraft/block/BlockDynamicLiquid.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$1.class +INFO: Loading Class: net/minecraft/block/BlockDropper.class +INFO: Loading Class: net/minecraft/block/BlockEndGateway.class +INFO: Loading Class: net/minecraft/block/BlockEnchantmentTable.class +INFO: Loading Class: net/minecraft/block/BlockEndPortalFrame.class +INFO: Loading Class: net/minecraft/block/BlockEndPortal.class +INFO: Loading Class: net/minecraft/block/BlockEnderChest.class +INFO: Loading Class: net/minecraft/block/BlockEndRod.class +INFO: Loading Class: net/minecraft/block/BlockFalling.class +INFO: Loading Class: net/minecraft/block/ITileEntityProvider.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$8.class +INFO: Loading Class: net/minecraft/block/BlockFence.class +INFO: Loading Class: net/minecraft/util/EntitySelectors$7.class +INFO: Loading Class: net/minecraft/block/BlockFarmland.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpell$InstantFactory.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget.class +INFO: Loading Class: net/minecraft/block/BlockFire.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpell$AmbientMobFactory.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack.class +INFO: Loading Class: net/minecraft/block/BlockFenceGate.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear$AIPanic.class +INFO: Loading Class: net/minecraft/block/BlockFlowerPot.class +INFO: Loading Class: net/minecraft/client/resources/SimpleReloadableResourceManager$1.class +INFO: Loading Class: net/minecraft/block/BlockFlower.class +INFO: Loading Class: net/minecraft/block/BlockDoubleStoneSlabNew.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpell$WitchFactory.class +INFO: Loading Class: net/minecraft/block/BlockFrostedIce.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpell$Factory.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer.class +INFO: Loading Class: net/minecraft/block/BlockDoubleWoodSlab.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpell$MobFactory.class +INFO: Loading Class: net/minecraft/entity/monster/EntityPolarBear$GroupData.class +INFO: Loading Class: net/minecraft/block/BlockDoubleStoneSlab.class +INFO: Loading Class: net/minecraft/block/BlockGlass.class +INFO: Loading Class: net/minecraft/block/BlockFurnace.class +INFO: Loading Class: net/minecraft/block/BlockGlazedTerracotta.class +INFO: Loading Class: net/minecraft/block/BlockGrass.class +INFO: Loading Class: net/minecraft/block/BlockGlowstone.class +INFO: Loading Class: net/minecraft/block/BlockGravel.class +INFO: Loading Class: net/minecraft/block/BlockGrassPath.class +INFO: Loading Class: net/minecraft/block/BlockSlab.class +INFO: Loading Class: net/minecraft/block/BlockHalfStoneSlabNew.class +INFO: Loading Class: net/minecraft/block/BlockBreakable.class +INFO: Loading Class: net/minecraft/block/BlockHalfStoneSlab.class +INFO: Loading Class: net/minecraft/block/BlockHardenedClay.class +INFO: Loading Class: net/minecraft/world/WorldServer$1.class +INFO: Loading Class: net/minecraft/block/BlockHalfWoodSlab.class +INFO: Loading Class: net/minecraft/block/BlockHopper.class +INFO: Loading Class: net/minecraft/block/BlockHay.class +INFO: Loading Class: net/minecraft/block/BlockHugeMushroom.class +INFO: Loading Class: net/minecraft/block/BlockHorizontal.class +INFO: Loading Class: net/minecraft/block/BlockJukebox.class +INFO: Loading Class: net/minecraft/block/BlockIce.class +INFO: Loading Class: net/minecraft/block/BlockLeaves.class +INFO: Loading Class: net/minecraft/block/BlockLadder.class +INFO: Loading Class: net/minecraft/block/BlockLever.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityStructure$Mode.class +INFO: Loading Class: net/minecraft/block/BlockLog.class +INFO: Loading Class: net/minecraft/entity/projectile/EntityPotion$1.class +INFO: Loading Class: net/minecraft/block/BlockLiquid.class +INFO: Loading Class: net/minecraft/block/BlockMelon.class +INFO: Loading Class: net/minecraft/block/BlockMagma.class +INFO: Loading Class: net/minecraft/block/BlockMobSpawner.class +INFO: Loading Class: net/minecraft/util/Mirror.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish.class +INFO: Loading Class: net/minecraft/block/BlockMycelium.class +INFO: Loading Class: net/minecraft/block/BlockMushroom.class +INFO: Loading Class: net/minecraft/block/BlockNetherWart.class +INFO: Loading Class: net/minecraft/block/BlockNetherBrick.class +INFO: Loading Class: net/minecraft/network/NetHandlerPlayServer$3.class +INFO: Loading Class: net/minecraft/block/BlockNewLeaf.class +INFO: Loading Class: net/minecraft/network/NetHandlerPlayServer$4.class +INFO: Loading Class: net/minecraft/block/BlockNetherrack.class +INFO: Loading Class: net/minecraft/block/BlockStoneSlabNew.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerPlayClient$1$1.class +INFO: Loading Class: net/minecraft/block/BlockNewLog.class +INFO: Loading Class: net/minecraft/block/BlockNote.class +INFO: Loading Class: net/minecraft/block/BlockEmptyDrops.class +INFO: Loading Class: net/minecraft/block/BlockObsidian.class +INFO: Loading Class: net/minecraft/block/BlockObserver.class +INFO: Loading Class: net/minecraft/block/BlockOldLog.class +INFO: Loading Class: net/minecraft/block/BlockOldLeaf.class +INFO: Loading Class: net/minecraft/block/BlockPackedIce.class +INFO: Loading Class: net/minecraft/block/BlockOre.class +INFO: Loading Class: net/minecraft/block/BlockPortal.class +INFO: Loading Class: net/minecraft/block/BlockPlanks.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep.class +INFO: Loading Class: net/minecraft/block/BlockCompressedPowered.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlock$Deserializer.class +INFO: Loading Class: net/minecraft/block/BlockPotato.class +INFO: Loading Class: net/minecraft/block/BlockRedSandstone$EnumType.class +INFO: Loading Class: net/minecraft/block/BlockPressurePlate.class +INFO: Loading Class: net/minecraft/block/BlockRailPowered.class +INFO: Loading Class: net/minecraft/block/BlockPumpkin.class +INFO: Loading Class: net/minecraft/block/BlockPrismarine.class +INFO: Loading Class: net/minecraft/block/BlockPurpurSlab.class +INFO: Loading Class: net/minecraft/village/Village$VillageAggressor.class +INFO: Loading Class: net/minecraft/block/BlockRail.class +INFO: Loading Class: net/minecraft/block/BlockQuartz.class +INFO: Loading Class: net/minecraft/block/BlockRedSandstone.class +INFO: Loading Class: net/minecraft/block/BlockRedFlower.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneWire.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneOre.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneTorch.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneLight.class +INFO: Loading Class: net/minecraft/util/EnumBlockRenderType.class +INFO: Loading Class: net/minecraft/block/BlockReed.class +INFO: Loading Class: net/minecraft/block/BlockRotatedPillar.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneRepeater.class +INFO: Loading Class: net/minecraft/block/BlockSand.class +INFO: Loading Class: net/minecraft/util/Rotation.class +INFO: Loading Class: net/minecraft/block/BlockSapling.class +INFO: Loading Class: net/minecraft/block/BlockSandStone.class +INFO: Loading Class: net/minecraft/block/BlockShulkerBox.class +INFO: Loading Class: net/minecraft/block/BlockSeaLantern.class +INFO: Loading Class: net/minecraft/block/BlockSkull.class +INFO: Loading Class: net/minecraft/block/BlockSign.class +INFO: Loading Class: net/minecraft/block/BlockSnowBlock.class +INFO: Loading Class: net/minecraft/block/BlockSlime.class +INFO: Loading Class: net/minecraft/block/BlockSoulSand.class +INFO: Loading Class: net/minecraft/block/BlockSnow.class +INFO: Loading Class: net/minecraft/block/BlockSponge.class +INFO: Loading Class: net/minecraft/block/SoundType.class +INFO: Loading Class: net/minecraft/world/WorldServer$ServerBlockEventList.class +INFO: Loading Class: net/minecraft/block/BlockStainedGlass.class +INFO: Loading Class: net/minecraft/block/BlockStainedHardenedClay.class +INFO: Loading Class: net/minecraft/client/gui/toasts/TutorialToast$Icons.class +INFO: Loading Class: net/minecraft/block/BlockStainedGlassPane.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$1.class +INFO: Loading Class: net/minecraft/block/BlockStandingSign.class +INFO: Loading Class: net/minecraft/block/BlockPlanks$EnumType.class +INFO: Loading Class: net/minecraft/block/BlockStairs.class +INFO: Loading Class: net/minecraft/block/BlockStem.class +INFO: Loading Class: net/minecraft/block/BlockStaticLiquid.class +INFO: Loading Class: net/minecraft/block/BlockStoneBrick.class +INFO: Loading Class: net/minecraft/block/BlockStone.class +INFO: Loading Class: net/minecraft/block/BlockStoneSlab.class +INFO: Loading Class: net/minecraft/block/BlockButtonStone.class +INFO: Loading Class: net/minecraft/block/BlockStructureVoid.class +INFO: Loading Class: net/minecraft/block/BlockStructure.class +INFO: Loading Class: net/minecraft/block/BlockPane.class +INFO: Loading Class: net/minecraft/block/BlockTallGrass.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlock$LoopException.class +INFO: Loading Class: net/minecraft/block/BlockTorch.class +INFO: Loading Class: net/minecraft/block/BlockTNT.class +INFO: Loading Class: net/minecraft/block/BlockTripWire.class +INFO: Loading Class: net/minecraft/block/BlockTrapDoor.class +INFO: Loading Class: net/minecraft/block/BlockVine.class +INFO: Loading Class: net/minecraft/block/BlockTripWireHook.class +INFO: Loading Class: net/minecraft/block/BlockWallSign.class +INFO: Loading Class: net/minecraft/block/BlockWall.class +INFO: Loading Class: net/minecraft/block/BlockLilyPad.class +INFO: Loading Class: net/minecraft/block/BlockWeb.class +INFO: Loading Class: net/minecraft/block/BlockButtonWood.class +INFO: Loading Class: net/minecraft/client/network/ServerPinger$2$1.class +INFO: Loading Class: net/minecraft/block/BlockPressurePlateWeighted.class +INFO: Loading Class: net/minecraft/block/BlockCarpet.class +INFO: Loading Class: net/minecraft/block/BlockWoodSlab.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityBanner.class +INFO: Loading Class: net/minecraft/block/BlockYellowFlower.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityBeacon.class +INFO: Loading Class: net/minecraft/tileentity/BannerPattern.class +INFO: Loading Class: net/minecraft/tileentity/TileEntity.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityBed.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityChest.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityBrewingStand.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityComparator.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityCommandBlock.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityDispenser.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityDaylightDetector.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityEnchantmentTable.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityDropper.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityFlowerPot.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityEnderChest.class +INFO: Loading Class: net/minecraft/block/BlockSilverfish$EnumType.class +INFO: Loading Class: net/minecraft/tileentity/IHopper.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityFurnace.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityLockable.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityHopper.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityNote.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityMobSpawner.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityLockableLoot.class +INFO: Loading Class: net/minecraft/tileentity/TileEntitySign.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityShulkerBox.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityStructure.class +INFO: Loading Class: net/minecraft/tileentity/TileEntitySkull.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityEndPortal.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityEndGateway.class +INFO: Loading Class: net/minecraft/block/BlockPistonExtension.class +INFO: Loading Class: net/minecraft/block/BlockPistonBase.class +INFO: Loading Class: net/minecraft/tileentity/TileEntityPiston.class +INFO: Loading Class: net/minecraft/block/BlockPistonMoving.class +INFO: Loading Class: net/minecraft/block/state/BlockPistonStructureHelper.class +INFO: Loading Class: net/minecraft/block/state/IBlockBehaviors.class +INFO: Loading Class: net/minecraft/block/state/BlockStateBase.class +INFO: Loading Class: net/minecraft/block/state/IBlockProperties.class +INFO: Loading Class: net/minecraft/block/state/BlockFaceShape.class +INFO: Loading Class: net/minecraft/block/state/BlockStateContainer.class +INFO: Loading Class: net/minecraft/block/state/IBlockState.class +INFO: Loading Class: net/minecraft/block/state/BlockWorldState.class +INFO: Loading Class: net/minecraft/block/state/pattern/FactoryBlockPattern.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockPattern.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockMatcher.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockMaterialMatcher.class +INFO: Loading Class: net/minecraft/block/state/pattern/BlockStateMatcher.class +INFO: Loading Class: net/minecraft/block/properties/PropertyBool.class +INFO: Loading Class: net/minecraft/block/properties/PropertyHelper.class +INFO: Loading Class: net/minecraft/block/properties/PropertyEnum.class +INFO: Loading Class: net/minecraft/block/properties/PropertyDirection.class +INFO: Loading Class: net/minecraft/block/properties/IProperty.class +INFO: Loading Class: net/minecraft/block/properties/PropertyInteger.class +INFO: Loading Class: net/minecraft/world/border/IBorderListener.class +INFO: Loading Class: net/minecraft/world/border/WorldBorder.class +INFO: Loading Class: net/minecraft/world/border/EnumBorderStatus.class +INFO: Loading Class: net/minecraft/world/chunk/BlockStateContainer.class +INFO: Loading Class: net/minecraft/world/chunk/IChunkProvider.class +INFO: Loading Class: net/minecraft/world/gen/IChunkGenerator.class +INFO: Loading Class: net/minecraft/world/chunk/EmptyChunk.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer.class +INFO: Loading Class: net/minecraft/world/chunk/NibbleArray.class +INFO: Loading Class: net/minecraft/world/chunk/BlockStatePaletteHashMap.class +INFO: Loading Class: net/minecraft/world/chunk/BlockStatePaletteRegistry.class +INFO: Loading Class: net/minecraft/world/chunk/storage/ExtendedBlockStorage.class +INFO: Loading Class: net/minecraft/world/chunk/Chunk.class +INFO: Loading Class: net/minecraft/world/chunk/storage/NibbleArrayReader.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ICondition$1.class +INFO: Loading Class: net/minecraft/world/chunk/BlockStatePaletteLinear.class +INFO: Loading Class: net/minecraft/world/chunk/IBlockStatePalette.class +INFO: Loading Class: net/minecraft/world/chunk/IBlockStatePaletteResizer.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpider$GroupData.class +INFO: Loading Class: net/minecraft/world/chunk/storage/AnvilChunkLoader.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpider$AISpiderAttack.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpider$AISpiderTarget.class +INFO: Loading Class: net/minecraft/world/chunk/storage/IChunkLoader.class +INFO: Loading Class: net/minecraft/world/chunk/storage/ChunkLoader.class +INFO: Loading Class: net/minecraft/world/chunk/storage/RegionFileCache.class +INFO: Loading Class: net/minecraft/world/chunk/storage/RegionFile.class +INFO: Loading Class: net/minecraft/world/WorldProvider.class +INFO: Loading Class: net/minecraft/world/WorldProviderHell.class +INFO: Loading Class: net/minecraft/block/BlockAnvil$Anvil.class +INFO: Loading Class: net/minecraft/world/DimensionType.class +INFO: Loading Class: net/minecraft/world/end/DragonSpawnManager.class +INFO: Loading Class: net/minecraft/world/WorldProviderSurface.class +INFO: Loading Class: net/minecraft/command/CommandBase$1.class +INFO: Loading Class: net/minecraft/world/WorldProviderEnd.class +INFO: Loading Class: net/minecraft/command/CommandBase$2.class +INFO: Loading Class: net/minecraft/world/end/DragonFightManager.class +INFO: Loading Class: net/minecraft/world/chunk/ChunkPrimer.class +INFO: Loading Class: net/minecraft/world/gen/MapGenRavine.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorDebug.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorSettings.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorFlat.class +INFO: Loading Class: net/minecraft/world/gen/MapGenBase.class +INFO: Loading Class: net/minecraft/world/gen/MapGenCaves.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorHell.class +INFO: Loading Class: net/minecraft/world/gen/MapGenCavesHell.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorEnd.class +INFO: Loading Class: net/minecraft/world/gen/ChunkGeneratorOverworld.class +INFO: Loading Class: net/minecraft/client/gui/GuiCustomizeWorldScreen$1.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenBigTree.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenAbstractTree.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenBlockBlob.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenBirchTree.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenBush.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGeneratorBonusChest.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenClay.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenCactus.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenDesertWells.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenDeadBush.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenEndGateway.class +INFO: Loading Class: net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenDoublePlant.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenEndPodium.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenEndIsland.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ICondition$2.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenFlowers.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenerator.class +INFO: Loading Class: net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenShrub.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenFossils.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenGlowStone2.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenFire.class +INFO: Loading Class: net/minecraft/command/CommandBase$CoordinateArg.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlock$1.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats$StatsItem$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance.class +INFO: Loading Class: net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/network/NetworkPlayerInfo$1.class +INFO: Loading Class: net/minecraft/tileentity/TileEntity$3.class +INFO: Loading Class: net/minecraft/tileentity/TileEntity$1.class +INFO: Loading Class: net/minecraft/tileentity/TileEntity$2.class +INFO: Loading Class: net/minecraft/util/math/RayTraceResult$Type.class +INFO: Loading Class: net/minecraft/client/network/NetworkPlayerInfo$2.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFallingDust$Factory.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenBook$NextPageButton.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenMineshaft$Type.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenBigMushroom.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenHellLava.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenIceSpike.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenIcePath.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenGlowStone1.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenLakes.class +INFO: Loading Class: net/minecraft/client/renderer/RenderGlobal$1.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$8.class +INFO: Loading Class: net/minecraft/block/BlockNewLog$2.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenMegaPineTree.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$7.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenMegaJungle.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenMelon.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenHugeTrees.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenMinable.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenDungeons.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenPumpkin.class +INFO: Loading Class: net/minecraft/client/renderer/RenderGlobal$2.class +INFO: Loading Class: net/minecraft/creativetab/CreativeTabs$9.class +INFO: Loading Class: net/minecraft/block/BlockNewLog$1.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenTaiga1.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenCanopyTree.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenReed.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenSavannaTree.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenSand.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenLiquids.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenSpikes.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenSwamp.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenTaiga2.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenTrees.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenTallGrass.class +INFO: Loading Class: net/minecraft/item/ItemArmor$1.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenWaterlily.class +INFO: Loading Class: net/minecraft/world/gen/feature/WorldGenVines.class +INFO: Loading Class: net/minecraft/world/gen/FlatLayerInfo.class +INFO: Loading Class: net/minecraft/world/gen/FlatGeneratorInfo.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureBoundingBox.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenEndCity.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftPieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenMineshaft.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenNetherBridge.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureMineshaftStart.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonument.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureNetherBridgePieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenScatteredFeature.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureOceanMonumentPieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStronghold.class +INFO: Loading Class: net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStructure.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStrongholdPieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStructureData.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenStructureIO.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureStart.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureComponent.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureComponentTemplate.class +INFO: Loading Class: net/minecraft/block/BlockLog$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureVillagePieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenVillage.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansionPieces.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansion.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/BlockRotationProcessor.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/PlacementSettings.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/TemplateManager.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/Template.class +INFO: Loading Class: net/minecraft/world/gen/structure/template/ITemplateProcessor.class +INFO: Loading Class: net/minecraft/item/ItemArmor$ArmorMaterial.class +INFO: Loading Class: net/minecraft/world/gen/NoiseGeneratorOctaves.class +INFO: Loading Class: net/minecraft/world/gen/NoiseGeneratorImproved.class +INFO: Loading Class: net/minecraft/world/gen/NoiseGeneratorPerlin.class +INFO: Loading Class: net/minecraft/world/gen/NoiseGeneratorSimplex.class +INFO: Loading Class: net/minecraft/world/gen/NoiseGenerator.class +INFO: Loading Class: net/minecraft/block/material/MaterialTransparent.class +INFO: Loading Class: net/minecraft/block/material/MaterialLogic.class +INFO: Loading Class: net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation.class +INFO: Loading Class: net/minecraft/block/material/Material.class +INFO: Loading Class: net/minecraft/block/material/MaterialLiquid.class +INFO: Loading Class: net/minecraft/block/material/MapColor.class +INFO: Loading Class: net/minecraft/block/material/EnumPushReaction.class +INFO: Loading Class: net/minecraft/block/material/MaterialPortal.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerDeepOcean.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerAddIsland.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerEdge.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$10.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerAddSnow.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$1.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerBiome.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerBiomeEdge.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerFuzzyZoom.class +INFO: Loading Class: net/minecraft/world/gen/layer/IntCache.class +INFO: Loading Class: net/minecraft/block/BlockLog$EnumAxis.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayer.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerIsland.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerHills.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerRareBiome.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerRiverInit.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerRiverMix.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerRiver.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerSmooth.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerShore.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$12.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$11.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderGiantZombie$1.class +INFO: Loading Class: net/minecraft/inventory/ContainerRepair$2.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$3.class +INFO: Loading Class: net/minecraft/inventory/ContainerRepair$3.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$2.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$5.class +INFO: Loading Class: net/minecraft/inventory/ContainerRepair$1.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$4.class +INFO: Loading Class: net/minecraft/enchantment/EnumEnchantmentType$6.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerZoom.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerVoronoiZoom.class +INFO: Loading Class: net/minecraft/pathfinding/PathNodeType.class +INFO: Loading Class: net/minecraft/pathfinding/PathHeap.class +INFO: Loading Class: net/minecraft/pathfinding/PathPoint.class +INFO: Loading Class: net/minecraft/pathfinding/FlyingNodeProcessor.class +INFO: Loading Class: net/minecraft/pathfinding/Path.class +INFO: Loading Class: net/minecraft/pathfinding/NodeProcessor.class +INFO: Loading Class: net/minecraft/pathfinding/SwimNodeProcessor.class +INFO: Loading Class: net/minecraft/pathfinding/PathFinder.class +INFO: Loading Class: net/minecraft/pathfinding/WalkNodeProcessor.class +INFO: Loading Class: net/minecraft/block/BlockBed$EnumPartType.class +INFO: Loading Class: net/minecraft/world/storage/WorldSavedData.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFindEntityNearest$1.class +INFO: Loading Class: net/minecraft/world/storage/WorldSavedDataCallableSave.class +INFO: Loading Class: net/minecraft/world/storage/MapData.class +INFO: Loading Class: net/minecraft/world/storage/MapDecoration.class +INFO: Loading Class: net/minecraft/world/chunk/storage/AnvilSaveConverter.class +INFO: Loading Class: net/minecraft/world/chunk/storage/AnvilSaveHandler.class +INFO: Loading Class: net/minecraft/world/storage/DerivedWorldInfo.class +INFO: Loading Class: net/minecraft/world/storage/SaveFormatOld.class +INFO: Loading Class: net/minecraft/world/storage/SaveHandler.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$7.class +INFO: Loading Class: net/minecraft/world/storage/ISaveHandler.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$8.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo.class +INFO: Loading Class: net/minecraft/world/storage/ISaveFormat.class +INFO: Loading Class: net/minecraft/client/AnvilConverterException.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$3.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$4.class +INFO: Loading Class: net/minecraft/world/storage/WorldSummary.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$5.class +INFO: Loading Class: net/minecraft/world/storage/IPlayerFileData.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$6.class +INFO: Loading Class: net/minecraft/world/storage/SaveHandlerMP.class +INFO: Loading Class: net/minecraft/world/storage/MapStorage.class +INFO: Loading Class: net/minecraft/world/storage/SaveDataMemoryStorage.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootEntryEmpty.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootTableList.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootPool.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootEntryItem.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootTable.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootEntry.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootEntryTable.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootContext.class +INFO: Loading Class: net/minecraft/world/storage/loot/RandomValueRange.class +INFO: Loading Class: net/minecraft/world/storage/loot/LootTableManager.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/EnchantWithLevels.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/EnchantRandomly.class +INFO: Loading Class: net/minecraft/client/gui/GuiSnooper$List.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/LootFunction.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$1.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$10.class +INFO: Loading Class: net/minecraft/world/storage/WorldInfo$2.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/LootingEnchantBonus.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/LootFunctionManager.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetCount.class +INFO: Loading Class: net/minecraft/realms/RealmsConnect.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetAttributes.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetMetadata.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetDamage.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/Smelt.class +INFO: Loading Class: net/minecraft/realms/RealmsButton.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetNBT.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/LootCondition.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/EntityHasScore.class +INFO: Loading Class: net/minecraft/entity/EntityHanging$2.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/EntityHasProperty.class +INFO: Loading Class: net/minecraft/entity/EntityHanging$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/LootConditionManager.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/RandomChance.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/KilledByPlayer.class +INFO: Loading Class: net/minecraft/server/integrated/IntegratedServer$3.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting.class +INFO: Loading Class: net/minecraft/server/integrated/IntegratedServer$2.class +INFO: Loading Class: net/minecraft/world/storage/loot/properties/EntityProperty.class +INFO: Loading Class: net/minecraft/server/integrated/IntegratedServer$1.class +INFO: Loading Class: net/minecraft/world/storage/loot/properties/EntityPropertyManager.class +INFO: Loading Class: net/minecraft/world/storage/loot/properties/EntityOnFire.class +INFO: Loading Class: net/minecraft/world/storage/ThreadedFileIOBase.class +INFO: Loading Class: net/minecraft/world/storage/IThreadedFileIO.class +INFO: Loading Class: net/minecraft/block/BlockPumpkin$1.class +INFO: Loading Class: net/minecraft/util/math/RayTraceResult.class +INFO: Loading Class: net/minecraft/util/math/AxisAlignedBB.class +INFO: Loading Class: net/minecraft/util/math/Vec3d.class +INFO: Loading Class: net/minecraft/util/math/Vec2f.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreObjective.class +INFO: Loading Class: net/minecraft/scoreboard/Score.class +INFO: Loading Class: net/minecraft/scoreboard/ScorePlayerTeam.class +INFO: Loading Class: net/minecraft/scoreboard/Scoreboard.class +INFO: Loading Class: net/minecraft/scoreboard/Team.class +INFO: Loading Class: net/minecraft/client/ClientBrandRetriever.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreboardSaveData.class +INFO: Loading Class: net/minecraft/world/biome/BiomeForest$Type.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreCriteria.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreCriteriaColored.class +INFO: Loading Class: net/minecraft/scoreboard/IScoreCriteria.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreCriteriaHealth.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreCriteriaStat.class +INFO: Loading Class: net/minecraft/scoreboard/ScoreCriteriaReadOnly.class +INFO: Loading Class: net/minecraft/client/settings/CreativeSettings.class +INFO: Loading Class: net/minecraft/client/renderer/ActiveRenderInfo.class +INFO: Loading Class: net/minecraft/client/settings/KeyBinding.class +INFO: Loading Class: net/minecraft/client/gui/ChatLine.class +INFO: Loading Class: net/minecraft/command/AdvancementCommand$1.class +INFO: Loading Class: net/minecraft/client/renderer/RenderHelper.class +INFO: Loading Class: net/minecraft/client/Minecraft.class +INFO: Loading Class: net/minecraft/client/renderer/GLAllocation.class +INFO: Loading Class: net/minecraft/client/settings/GameSettings.class +INFO: Loading Class: net/minecraft/util/MouseHelper.class +INFO: Loading Class: net/minecraft/util/ScreenShotHelper.class +INFO: Loading Class: net/minecraft/client/LoadingScreenRenderer.class +INFO: Loading Class: net/minecraft/util/Timer.class +INFO: Loading Class: net/minecraft/util/MinecraftError.class +INFO: Loading Class: net/minecraft/entity/ai/EntityAIFollow$1.class +INFO: Loading Class: net/minecraft/client/renderer/color/IBlockColor.class +INFO: Loading Class: net/minecraft/util/Session.class +INFO: Loading Class: net/minecraft/client/renderer/color/BlockColors.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors.class +INFO: Loading Class: net/minecraft/client/renderer/color/IItemColor.class +INFO: Loading Class: net/minecraft/client/gui/FontRenderer.class +INFO: Loading Class: net/minecraft/client/gui/Gui.class +INFO: Loading Class: net/minecraft/client/gui/GuiIngame.class +INFO: Loading Class: net/minecraft/client/gui/ScaledResolution.class +INFO: Loading Class: net/minecraft/client/gui/MapItemRenderer.class +INFO: Loading Class: net/minecraft/client/gui/chat/NarratorChatListener.class +INFO: Loading Class: net/minecraft/client/gui/chat/IChatListener.class +INFO: Loading Class: net/minecraft/client/gui/chat/NormalChatListener.class +INFO: Loading Class: net/minecraft/advancements/critereon/TameAnimalTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/gui/chat/OverlayChatListener.class +INFO: Loading Class: net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/gui/GuiBossOverlay.class +INFO: Loading Class: net/minecraft/client/gui/GuiButton.class +INFO: Loading Class: net/minecraft/client/gui/GuiUtilRenderComponents.class +INFO: Loading Class: net/minecraft/client/gui/GuiNewChat.class +INFO: Loading Class: net/minecraft/client/gui/GuiTextField.class +INFO: Loading Class: net/minecraft/client/gui/GuiOverlayDebug.class +INFO: Loading Class: net/minecraft/client/gui/GuiButtonImage.class +INFO: Loading Class: net/minecraft/nbt/NBTSizeTracker$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiSlider.class +INFO: Loading Class: net/minecraft/client/renderer/texture/TextureAtlasSprite$1.class +INFO: Loading Class: net/minecraft/client/gui/GuiButtonLanguage.class +INFO: Loading Class: net/minecraft/command/AdvancementCommand$Mode.class +INFO: Loading Class: net/minecraft/client/gui/GuiLabel.class +INFO: Loading Class: net/minecraft/client/gui/GuiListButton.class +INFO: Loading Class: net/minecraft/client/gui/BossInfoClient.class +INFO: Loading Class: net/minecraft/command/AdvancementCommand$ActionType.class +INFO: Loading Class: net/minecraft/client/gui/GuiListExtended.class +INFO: Loading Class: net/minecraft/client/gui/GuiLockIconButton.class +INFO: Loading Class: net/minecraft/client/gui/GuiOptionsRowList.class +INFO: Loading Class: net/minecraft/client/gui/GuiOptionButton.class +INFO: Loading Class: net/minecraft/client/gui/GuiPlayerTabOverlay.class +INFO: Loading Class: net/minecraft/client/gui/GuiPageButtonList.class +INFO: Loading Class: net/minecraft/client/gui/GuiOptionSlider.class +INFO: Loading Class: net/minecraft/client/gui/GuiSlot.class +INFO: Loading Class: net/minecraft/realms/RealmsLevelSummary.class +INFO: Loading Class: net/minecraft/client/gui/GuiSubtitleOverlay.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSweepAttack$Factory.class +INFO: Loading Class: net/minecraft/client/gui/GuiButtonToggle.class +INFO: Loading Class: net/minecraft/client/gui/GuiSpectator.class +INFO: Loading Class: net/minecraft/client/multiplayer/ChunkProviderClient$1.class +INFO: Loading Class: net/minecraft/client/gui/toasts/AdvancementToast.class +INFO: Loading Class: net/minecraft/client/gui/toasts/RecipeToast.class +INFO: Loading Class: net/minecraft/client/gui/toasts/IToast.class +INFO: Loading Class: net/minecraft/client/gui/toasts/SystemToast.class +INFO: Loading Class: net/minecraft/client/gui/toasts/TutorialToast.class +INFO: Loading Class: net/minecraft/client/gui/toasts/GuiToast.class +INFO: Loading Class: net/minecraft/world/gen/structure/MapGenScatteredFeature$Start.class +INFO: Loading Class: net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.class +INFO: Loading Class: net/minecraft/client/gui/GuiButtonRealmsProxy.class +INFO: Loading Class: net/minecraft/client/gui/GuiSlotRealmsProxy.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenRealmsProxy.class +INFO: Loading Class: net/minecraft/advancements/critereon/KilledTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.class +INFO: Loading Class: net/minecraft/client/gui/GuiChat.class +INFO: Loading Class: net/minecraft/client/gui/ScreenChatOptions.class +INFO: Loading Class: net/minecraft/client/gui/GuiYesNoCallback.class +INFO: Loading Class: net/minecraft/advancements/critereon/KilledTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/gui/GuiConfirmOpenLink.class +INFO: Loading Class: net/minecraft/client/multiplayer/GuiConnecting.class +INFO: Loading Class: net/minecraft/client/gui/GuiYesNo.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenCustomizePresets.class +INFO: Loading Class: net/minecraft/client/gui/GuiCreateFlatWorld.class +INFO: Loading Class: net/minecraft/client/gui/GuiGameOver.class +INFO: Loading Class: net/minecraft/client/gui/GuiCustomizeWorldScreen.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenServerList.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenDemo.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenAddServer.class +INFO: Loading Class: net/minecraft/client/gui/GuiDisconnected.class +INFO: Loading Class: net/minecraft/client/gui/GuiErrorScreen.class +INFO: Loading Class: net/minecraft/client/gui/GuiLanguage.class +INFO: Loading Class: net/minecraft/client/gui/GuiSleepMP.class +INFO: Loading Class: net/minecraft/client/gui/GuiOptions.class +INFO: Loading Class: net/minecraft/client/gui/GuiIngameMenu.class +INFO: Loading Class: net/minecraft/client/gui/GuiMemoryErrorScreen.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenWorking.class +INFO: Loading Class: net/minecraft/client/main/Main.class +INFO: Loading Class: net/minecraft/client/gui/GuiFlatPresets.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreen.class +INFO: Loading Class: net/minecraft/client/gui/GuiDownloadTerrain.class +INFO: Loading Class: net/minecraft/client/gui/GuiCustomizeSkin.class +INFO: Loading Class: net/minecraft/client/gui/GuiShareToLan.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenOptionsSounds.class +INFO: Loading Class: net/minecraft/client/gui/GuiSnooper.class +INFO: Loading Class: net/minecraft/util/TabCompleter.class +INFO: Loading Class: net/minecraft/util/ITabCompleter.class +INFO: Loading Class: net/minecraft/client/gui/GuiVideoSettings.class +INFO: Loading Class: net/minecraft/client/gui/GuiMainMenu.class +INFO: Loading Class: net/minecraft/client/gui/achievement/GuiStats.class +INFO: Loading Class: net/minecraft/world/storage/loot/functions/SetNBT$Serializer.class +INFO: Loading Class: net/minecraft/client/gui/GuiWinGame.class +INFO: Loading Class: net/minecraft/client/gui/IProgressMeter.class +INFO: Loading Class: net/minecraft/client/gui/advancements/AdvancementTabType.class +INFO: Loading Class: net/minecraft/client/gui/advancements/GuiAdvancementTab.class +INFO: Loading Class: net/minecraft/client/gui/advancements/GuiAdvancement.class +INFO: Loading Class: net/minecraft/client/gui/advancements/GuiScreenAdvancements.class +INFO: Loading Class: net/minecraft/client/gui/advancements/AdvancementState.class +INFO: Loading Class: net/minecraft/client/gui/GuiKeyBindingList.class +INFO: Loading Class: net/minecraft/block/BlockTallGrass$EnumType.class +INFO: Loading Class: net/minecraft/client/gui/GuiControls.class +INFO: Loading Class: net/minecraft/client/gui/GuiRepair.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiContainer.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenBook.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiBeacon.class +INFO: Loading Class: net/minecraft/client/gui/GuiCommandBlock.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiBrewingStand.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiCrafting.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiChest.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiContainerCreative.class +INFO: Loading Class: net/minecraft/client/gui/inventory/CreativeCrafting.class +INFO: Loading Class: net/minecraft/client/renderer/InventoryEffectRenderer.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiDispenser.class +INFO: Loading Class: net/minecraft/client/gui/GuiEnchantment.class +INFO: Loading Class: net/minecraft/util/EnchantmentNameParts.class +INFO: Loading Class: net/minecraft/client/gui/GuiHopper.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiFurnace.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiInventory.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiScreenHorseInventory.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.class +INFO: Loading Class: net/minecraft/client/gui/GuiMerchant.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiShulkerBox.class +INFO: Loading Class: net/minecraft/entity/passive/EntityParrot$1.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiEditStructure.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiEditSign.class +INFO: Loading Class: net/minecraft/client/gui/ServerListEntryLanScan.class +INFO: Loading Class: net/minecraft/client/gui/GuiMultiplayer.class +INFO: Loading Class: net/minecraft/client/gui/ServerListEntryNormal.class +INFO: Loading Class: net/minecraft/client/gui/ServerListEntryLanDetected.class +INFO: Loading Class: net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject.class +INFO: Loading Class: net/minecraft/client/gui/ServerSelectionList.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GhostRecipe.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GuiRecipeBook.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GuiRecipeOverlay.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/RecipeBookPage.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/RecipeList.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/GuiButtonRecipe.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/IRecipeShownListener.class +INFO: Loading Class: net/minecraft/client/gui/recipebook/IRecipeUpdateListener.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenResourcePacks.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackListEntryDefault.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackListEntry.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackListEntryFound.class +INFO: Loading Class: net/minecraft/world/gen/layer/GenLayerEdge$Mode.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSmokeNormal$1.class +INFO: Loading Class: net/minecraft/tileentity/TileEntitySign$1.class +INFO: Loading Class: net/minecraft/client/resources/ResourcePackListEntryServer.class +INFO: Loading Class: net/minecraft/tileentity/TileEntitySign$2.class +INFO: Loading Class: net/minecraft/client/gui/GuiResourcePackList.class +INFO: Loading Class: net/minecraft/client/gui/GuiResourcePackAvailable.class +INFO: Loading Class: net/minecraft/client/gui/GuiResourcePackSelected.class +INFO: Loading Class: net/minecraft/client/gui/GuiWorldEdit.class +INFO: Loading Class: net/minecraft/client/gui/GuiCreateWorld.class +INFO: Loading Class: net/minecraft/client/gui/GuiListWorldSelectionEntry.class +INFO: Loading Class: net/minecraft/client/gui/GuiWorldSelection.class +INFO: Loading Class: net/minecraft/client/gui/GuiListWorldSelection.class +INFO: Loading Class: net/minecraft/client/gui/spectator/BaseSpectatorGroup.class +INFO: Loading Class: net/minecraft/client/gui/spectator/PlayerMenuObject.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSmokeNormal$Factory.class +INFO: Loading Class: net/minecraft/client/gui/spectator/ISpectatorMenuView.class +INFO: Loading Class: net/minecraft/inventory/EntityEquipmentSlot$Type.class +INFO: Loading Class: net/minecraft/client/gui/spectator/SpectatorMenu.class +INFO: Loading Class: net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.class +INFO: Loading Class: net/minecraft/client/gui/spectator/ISpectatorMenuObject.class +INFO: Loading Class: net/minecraft/client/gui/spectator/categories/TeleportToPlayer.class +INFO: Loading Class: net/minecraft/client/gui/spectator/categories/SpectatorDetails.class +INFO: Loading Class: net/minecraft/client/gui/spectator/categories/TeleportToTeam.class +INFO: Loading Class: net/minecraft/server/network/NetHandlerHandshakeTCP$1.class +INFO: Loading Class: net/minecraft/client/main/GameConfiguration.class +INFO: Loading Class: net/minecraft/block/BlockEndRod$1.class +INFO: Loading Class: net/minecraft/client/model/ModelArmorStand.class +INFO: Loading Class: net/minecraft/client/model/ModelArmorStandArmor.class +INFO: Loading Class: net/minecraft/client/model/ModelBat.class +INFO: Loading Class: net/minecraft/client/model/ModelBanner.class +INFO: Loading Class: net/minecraft/client/model/ModelBlaze.class +INFO: Loading Class: net/minecraft/client/model/ModelBed.class +INFO: Loading Class: net/minecraft/client/model/ModelBook.class +INFO: Loading Class: net/minecraft/client/model/ModelBoat.class +INFO: Loading Class: net/minecraft/item/crafting/Ingredient$1.class +INFO: Loading Class: net/minecraft/client/model/ModelChicken.class +INFO: Loading Class: net/minecraft/client/model/ModelChest.class +INFO: Loading Class: net/minecraft/client/model/ModelCreeper.class +INFO: Loading Class: net/minecraft/client/model/ModelCow.class +INFO: Loading Class: net/minecraft/client/model/ModelEnderman.class +INFO: Loading Class: net/minecraft/client/model/ModelElytra.class +INFO: Loading Class: net/minecraft/client/model/ModelEvokerFangs.class +INFO: Loading Class: net/minecraft/client/model/ModelEnderMite.class +INFO: Loading Class: net/minecraft/client/model/ModelGuardian.class +INFO: Loading Class: net/minecraft/client/model/ModelGhast.class +INFO: Loading Class: net/minecraft/client/model/ModelHumanoidHead.class +INFO: Loading Class: net/minecraft/client/model/ModelHorse.class +INFO: Loading Class: net/minecraft/client/model/ModelIllager.class +INFO: Loading Class: net/minecraft/client/model/ModelBiped.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketWorldBorder$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/WoodlandMansion$Start.class +INFO: Loading Class: net/minecraft/client/model/ModelLargeChest.class +INFO: Loading Class: net/minecraft/client/model/ModelLeashKnot.class +INFO: Loading Class: net/minecraft/client/model/ModelMagmaCube.class +INFO: Loading Class: net/minecraft/client/model/ModelLlamaSpit.class +INFO: Loading Class: net/minecraft/client/model/ModelLlama.class +INFO: Loading Class: net/minecraft/client/model/ModelBase.class +INFO: Loading Class: net/minecraft/client/model/ModelMinecart.class +INFO: Loading Class: net/minecraft/client/model/ModelParrot.class +INFO: Loading Class: net/minecraft/client/model/ModelOcelot.class +INFO: Loading Class: net/minecraft/client/model/ModelPlayer.class +INFO: Loading Class: net/minecraft/client/model/ModelPig.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiEditStructure$1.class +INFO: Loading Class: net/minecraft/client/model/TexturedQuad.class +INFO: Loading Class: net/minecraft/client/model/ModelPolarBear.class +INFO: Loading Class: net/minecraft/client/model/ModelRabbit.class +INFO: Loading Class: net/minecraft/client/model/ModelQuadruped.class +INFO: Loading Class: net/minecraft/client/model/ModelSheep2.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderShulker$1.class +INFO: Loading Class: net/minecraft/client/model/ModelSheep1.class +INFO: Loading Class: net/minecraft/client/model/ModelShulkerBullet.class +INFO: Loading Class: net/minecraft/client/model/ModelShield.class +INFO: Loading Class: net/minecraft/client/model/ModelSign.class +INFO: Loading Class: net/minecraft/client/model/ModelShulker.class +INFO: Loading Class: net/minecraft/client/model/ModelSkeletonHead.class +INFO: Loading Class: net/minecraft/client/model/ModelSilverfish.class +INFO: Loading Class: net/minecraft/client/model/ModelSkeleton.class +INFO: Loading Class: net/minecraft/client/model/ModelSnowMan.class +INFO: Loading Class: net/minecraft/client/model/ModelSlime.class +INFO: Loading Class: net/minecraft/client/model/ModelSpider.class +INFO: Loading Class: net/minecraft/client/renderer/EntityRenderer$1.class +INFO: Loading Class: net/minecraft/client/model/IMultipassModel.class +INFO: Loading Class: net/minecraft/client/model/ModelSquid.class +INFO: Loading Class: net/minecraft/client/model/ModelVex.class +INFO: Loading Class: net/minecraft/client/model/PositionTextureVertex.class +INFO: Loading Class: net/minecraft/client/renderer/EntityRenderer$4.class +INFO: Loading Class: net/minecraft/client/model/ModelVillager.class +INFO: Loading Class: net/minecraft/client/renderer/EntityRenderer$3.class +INFO: Loading Class: net/minecraft/client/model/ModelIronGolem.class +INFO: Loading Class: net/minecraft/client/renderer/EntityRenderer$2.class +INFO: Loading Class: net/minecraft/client/model/ModelWitch.class +INFO: Loading Class: net/minecraft/client/model/ModelZombieVillager.class +INFO: Loading Class: net/minecraft/client/model/ModelWolf.class +INFO: Loading Class: net/minecraft/client/model/ModelWither.class +INFO: Loading Class: net/minecraft/client/model/ModelDragonHead.class +INFO: Loading Class: net/minecraft/client/model/ModelZombie.class +INFO: Loading Class: net/minecraft/client/model/ModelEnderCrystal.class +INFO: Loading Class: net/minecraft/client/model/ModelDragon.class +INFO: Loading Class: net/minecraft/client/model/ModelBox.class +INFO: Loading Class: net/minecraft/client/model/ModelRenderer.class +INFO: Loading Class: net/minecraft/client/model/TextureOffset.class +INFO: Loading Class: net/minecraft/client/multiplayer/ClientAdvancementManager.class +INFO: Loading Class: net/minecraft/block/BlockHugeMushroom$1.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerLoginClient.class +INFO: Loading Class: net/minecraft/client/multiplayer/ChunkProviderClient.class +INFO: Loading Class: net/minecraft/client/network/NetHandlerPlayClient.class +INFO: Loading Class: net/minecraft/client/multiplayer/WorldClient.class +INFO: Loading Class: net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator.class +INFO: Loading Class: net/minecraft/client/multiplayer/PlayerControllerMP.class +INFO: Loading Class: net/minecraft/client/multiplayer/ServerAddress.class +INFO: Loading Class: net/minecraft/client/network/NetworkPlayerInfo.class +INFO: Loading Class: net/minecraft/client/multiplayer/ServerList.class +INFO: Loading Class: net/minecraft/client/multiplayer/ServerData.class +INFO: Loading Class: net/minecraft/client/network/ServerPinger.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSweepAttack.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBreaking.class +INFO: Loading Class: net/minecraft/client/particle/Barrier.class +INFO: Loading Class: net/minecraft/client/particle/ParticleCrit.class +INFO: Loading Class: net/minecraft/network/play/server/SPacketWorldBorder$Action.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBubble.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDrip.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDragonBreath.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$3.class +INFO: Loading Class: net/minecraft/client/particle/ParticleEndRod.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$4.class +INFO: Loading Class: net/minecraft/client/particle/ParticleEnchantmentTable.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFallingDust.class +INFO: Loading Class: net/minecraft/block/state/BlockStateContainer$1.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$2.class +INFO: Loading Class: net/minecraft/client/particle/ParticleExplosion.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFlame.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFirework.class +INFO: Loading Class: net/minecraft/client/particle/ParticleHeart.class +INFO: Loading Class: net/minecraft/client/particle/ParticleFootStep.class +INFO: Loading Class: net/minecraft/client/particle/ParticleExplosionHuge.class +INFO: Loading Class: net/minecraft/client/particle/ParticleExplosionLarge.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$7.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$8.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$5.class +INFO: Loading Class: net/minecraft/client/particle/ParticleItemPickup.class +INFO: Loading Class: net/minecraft/client/renderer/color/ItemColors$6.class +INFO: Loading Class: net/minecraft/client/particle/ParticleLava.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSmokeLarge.class +INFO: Loading Class: net/minecraft/client/particle/ParticleNote.class +INFO: Loading Class: net/minecraft/client/resources/data/MetadataSerializer$1.class +INFO: Loading Class: net/minecraft/client/particle/ParticleMobAppearance.class +INFO: Loading Class: net/minecraft/client/particle/ParticleManager.class +INFO: Loading Class: net/minecraft/client/particle/Particle.class +INFO: Loading Class: net/minecraft/client/particle/ParticleCloud.class +INFO: Loading Class: net/minecraft/block/BlockHugeMushroom$EnumType.class +INFO: Loading Class: net/minecraft/client/particle/IParticleFactory.class +INFO: Loading Class: net/minecraft/client/particle/ParticleRedstone.class +INFO: Loading Class: net/minecraft/client/particle/ParticlePortal.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSmokeNormal.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSimpleAnimated.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpell.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSnowShovel.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSplash.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSpit.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSuspendedTown.class +INFO: Loading Class: net/minecraft/client/particle/ParticleSuspend.class +INFO: Loading Class: net/minecraft/client/particle/ParticleDigging.class +INFO: Loading Class: net/minecraft/client/particle/ParticleBlockDust.class +INFO: Loading Class: net/minecraft/client/particle/ParticleEmitter.class +INFO: Loading Class: net/minecraft/client/particle/ParticleTotem.class +INFO: Loading Class: net/minecraft/client/particle/ParticleRain.class +INFO: Loading Class: net/minecraft/client/particle/ParticleWaterWake.class +INFO: Loading Class: net/minecraft/util/MovementInput.class +INFO: Loading Class: net/minecraft/client/entity/AbstractClientPlayer.class +INFO: Loading Class: net/minecraft/client/entity/EntityPlayerSP.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderShulker$HeadLayer.class +INFO: Loading Class: net/minecraft/util/MovementInputFromOptions.class +INFO: Loading Class: net/minecraft/client/settings/HotbarSnapshot.class +INFO: Loading Class: net/minecraft/block/state/BlockStateContainer$StateImplementation.class +INFO: Loading Class: net/minecraft/client/entity/EntityOtherPlayerMP.class +INFO: Loading Class: net/minecraft/client/player/inventory/ContainerLocalMenu.class +INFO: Loading Class: net/minecraft/client/player/inventory/LocalBlockIntercommunication.class +INFO: Loading Class: net/minecraft/client/renderer/WorldVertexBufferUploader.class +INFO: Loading Class: net/minecraft/client/renderer/BufferBuilder.class +INFO: Loading Class: net/minecraft/client/renderer/ChunkRenderContainer.class +INFO: Loading Class: net/minecraft/client/renderer/RegionRenderCacheBuilder.class +INFO: Loading Class: net/minecraft/client/renderer/EnumFaceDirection.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/EntityRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/IImageBuffer.class +INFO: Loading Class: net/minecraft/client/renderer/GlStateManager.class +INFO: Loading Class: net/minecraft/client/renderer/ItemModelMesher.class +INFO: Loading Class: net/minecraft/client/renderer/ItemRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/ItemMeshDefinition.class +INFO: Loading Class: net/minecraft/client/renderer/ImageBufferDownload.class +INFO: Loading Class: net/minecraft/client/renderer/RenderGlobal.class +INFO: Loading Class: net/minecraft/client/renderer/RenderList.class +INFO: Loading Class: net/minecraft/client/renderer/Tessellator.class +INFO: Loading Class: net/minecraft/client/shader/Framebuffer.class +INFO: Loading Class: net/minecraft/client/renderer/VertexBufferUploader.class +INFO: Loading Class: net/minecraft/client/renderer/VboRenderList.class +INFO: Loading Class: net/minecraft/client/renderer/BannerTextures.class +INFO: Loading Class: net/minecraft/client/audio/SoundManager$2.class +INFO: Loading Class: net/minecraft/client/renderer/ViewFrustum.class +INFO: Loading Class: net/minecraft/client/audio/SoundManager$1.class +INFO: Loading Class: net/minecraft/client/renderer/ChestRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/BlockRendererDispatcher.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelShapes.class +INFO: Loading Class: net/minecraft/client/renderer/BlockModelRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/BlockFluidRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockPart.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BakedQuad.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockPartRotation.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockPartFace.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlock.class +INFO: Loading Class: net/minecraft/world/biome/BiomeColorHelper$1.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockFaceUV.class +INFO: Loading Class: net/minecraft/world/biome/BiomeColorHelper$2.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BakedQuadRetextured.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ModelBlockDefinition.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemModelGenerator.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/FaceBakery.class +INFO: Loading Class: net/minecraft/world/biome/BiomeColorHelper$3.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemOverride.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemTransformVec3f.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemOverrideList.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/VariantList.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/ItemCameraTransforms.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionAnd.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/Variant.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ICondition.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionOr.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/Multipart.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/Selector.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/BlockStateMapper.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/StateMapperBase.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/StateMap.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/DefaultStateMapper.class +INFO: Loading Class: net/minecraft/client/renderer/block/statemap/IStateMapper.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer.class +INFO: Loading Class: net/minecraft/entity/boss/EntityWither$1.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.class +INFO: Loading Class: net/minecraft/client/audio/SoundManager$SoundSystemStarterThread.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.class +INFO: Loading Class: net/minecraft/client/gui/toasts/GuiToast$1.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.class +INFO: Loading Class: net/minecraft/world/biome/BiomeColorHelper$ColorResolver.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/CompiledChunk.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ChunkRenderWorker.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ListedRenderChunk.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/ListChunkFactory.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/IRenderChunkFactory.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/RenderChunk.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/VisGraph.class +INFO: Loading Class: net/minecraft/client/gui/GuiScreenCustomizePresets$Info.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/VboChunkFactory.class +INFO: Loading Class: net/minecraft/client/gui/GuiPlayerTabOverlay$1.class +INFO: Loading Class: net/minecraft/client/gui/toasts/GuiToast$ToastInstance.class +INFO: Loading Class: net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer.class +INFO: Loading Class: net/minecraft/client/renderer/chunk/SetVisibility.class +INFO: Loading Class: net/minecraft/client/renderer/culling/ICamera.class +INFO: Loading Class: net/minecraft/client/renderer/culling/ClippingHelperImpl.class +INFO: Loading Class: net/minecraft/client/renderer/culling/ClippingHelper.class +INFO: Loading Class: net/minecraft/client/renderer/culling/Frustum.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererCollisionBox.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererChunkBorder.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererHeightMap.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRenderer.class +INFO: Loading Class: net/minecraft/entity/boss/EntityWither$AIDoNothing.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererPathfinding.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererWater.class +INFO: Loading Class: net/minecraft/client/renderer/debug/DebugRendererSolidFace.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderAbstractHorse.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderArmorStand.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderAreaEffectCloud.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderBat.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderArrow.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderBoat.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderBlaze.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderChicken.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderCaveSpider.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderCreeper.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderCow.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderDragonFireball.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEntity.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderElderGuardian.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderDragon.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEnderCrystal.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEndermite.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEnderman.class +INFO: Loading Class: net/minecraft/client/renderer/entity/Render.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderManager.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEvoker.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEvokerFangs.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderFallingBlock.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderXPOrb.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderFish.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderFireball.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneComparator$Mode.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderGiantZombie.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderGhast.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderHorse.class +INFO: Loading Class: net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderGuardian.class +INFO: Loading Class: net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners.class +INFO: Loading Class: net/minecraft/client/multiplayer/WorldClient$3.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderHusk.class +INFO: Loading Class: net/minecraft/client/multiplayer/WorldClient$4.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderBiped.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderEntityItem.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderIllusionIllager.class +INFO: Loading Class: net/minecraft/block/BlockWallSign$1.class +INFO: Loading Class: net/minecraft/client/renderer/RenderItem.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderItemFrame.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLeashKnot.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderMagmaCube.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiBeacon$CancelButton.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLightningBolt.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiBeacon$PowerButton.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiBeacon$Button.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate.class +INFO: Loading Class: net/minecraft/world/storage/loot/conditions/RandomChance$Serializer.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType.class +INFO: Loading Class: net/minecraft/block/BlockSkull$2.class +INFO: Loading Class: net/minecraft/client/renderer/block/model/multipart/ICondition$1$1.class +INFO: Loading Class: net/minecraft/block/BlockSkull$1.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell.class +INFO: Loading Class: net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell.class +INFO: Loading Class: net/minecraft/block/BlockFlowerPot$1.class +INFO: Loading Class: net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners.class +INFO: Loading Class: net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance.class +INFO: Loading Class: net/minecraft/client/particle/ParticleTotem$Factory.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLivingBase.class +INFO: Loading Class: net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLlamaSpit.class +INFO: Loading Class: net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLlama.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderMinecart.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderMooshroom.class +INFO: Loading Class: net/minecraft/command/AdvancementCommand$ActionType$2.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderLiving.class +INFO: Loading Class: net/minecraft/command/AdvancementCommand$ActionType$1.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPainting.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderOcelot.class +INFO: Loading Class: net/minecraft/client/particle/ParticleNote$Factory.class +INFO: Loading Class: net/minecraft/block/BlockFlowerPot$EnumFlowerType.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPig.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderParrot.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPolarBear.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPigZombie.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSheep.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderRabbit.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderShulker.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderShulkerBullet.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSkeleton.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureComponentTemplate$1.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSilverfish.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSnowMan.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSlime.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSpider.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSpectralArrow.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderStray.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSquid.class +INFO: Loading Class: net/minecraft/client/main/Main$2.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderSnowball.class +INFO: Loading Class: net/minecraft/client/main/Main$1.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderTippedArrow.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderPotion.class +INFO: Loading Class: net/minecraft/client/multiplayer/WorldClient$1.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderTNTPrimed.class +INFO: Loading Class: net/minecraft/block/BlockDoublePlant$EnumBlockHalf.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces$2.class +INFO: Loading Class: net/minecraft/client/multiplayer/WorldClient$2.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderTntMinecart.class +INFO: Loading Class: net/minecraft/client/particle/ParticleExplosion$Factory.class +INFO: Loading Class: net/minecraft/block/BlockRedstoneComparator$1.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces$1.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderIronGolem.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderVex.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderVindicator.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderVillager.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderWither.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces$4.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderWitch.class +INFO: Loading Class: net/minecraft/world/gen/structure/StructureEndCityPieces$3.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderWitherSkull.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderWitherSkeleton.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderZombie.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderWolf.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerArmorBase.class +INFO: Loading Class: net/minecraft/client/renderer/entity/RenderZombieVillager.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerCape.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerArrow.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerHeldBlock.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerCustomHead.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$5.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerElytra.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.class +INFO: Loading Class: net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.class +INFO: Loading Class: net/minecraft/block/BlockDoublePlant$EnumPlantType.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$1.class +INFO: Loading Class: net/minecraft/server/gui/StatsComponent$1.class +INFO: Loading Class: net/minecraft/server/dedicated/ServerHangWatchdog$1.class +INFO: Loading Class: net/minecraft/server/MinecraftServer$2.class +INFO: Loading Class: net/minecraft/server/gui/MinecraftServerGui$3.class +INFO: Loading Class: net/minecraft/server/gui/MinecraftServerGui$2.class +INFO: Loading Class: net/minecraft/server/gui/MinecraftServerGui$1.class +INFO: Loading Class: net/minecraft/server/gui/MinecraftServerGui$5.class +INFO: Loading Class: net/minecraft/server/gui/MinecraftServerGui$4.class +INFO: Loading Class: net/minecraft/server/dedicated/PendingCommand.class +INFO: Loading Class: net/minecraft/server/ServerEula.class +INFO: Loading Class: net/minecraft/network/rcon/IServer.class +INFO: Loading Class: net/minecraft/server/dedicated/PropertyManager.class +INFO: Loading Class: net/minecraft/server/dedicated/DedicatedPlayerList.class +INFO: Loading Class: net/minecraft/server/dedicated/DedicatedServer.class +INFO: Loading Class: net/minecraft/server/dedicated/ServerHangWatchdog.class +INFO: Loading Class: net/minecraft/server/gui/MinecraftServerGui.class +INFO: Loading Class: net/minecraft/server/gui/PlayerListComponent.class +INFO: Loading Class: net/minecraft/server/gui/StatsComponent.class +INFO: Loading Class: net/minecraft/network/rcon/RConOutputStream.class +INFO: Loading Class: net/minecraft/network/rcon/RConUtils.class +INFO: Loading Class: net/minecraft/network/rcon/RConThreadBase.class +INFO: Loading Class: net/minecraft/network/rcon/RConThreadQuery.class +INFO: Loading Class: net/minecraft/network/rcon/RConThreadClient.class +INFO: Loading Class: net/minecraft/network/rcon/RConThreadMain.class +INFO: Loading Class: net/minecraft/network/rcon/RConThreadQuery$Auth.class +INFO: Loading Class: net/minecraft/server/dedicated/DedicatedServer$3.class +INFO: Loading Class: net/minecraft/server/dedicated/DedicatedServer$2.class +INFO: Loading Class: net/minecraft/server/dedicated/DedicatedServer$1.class +INFO: Loading Class: net/minecraft/server/dedicated/DedicatedServer$4.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$ConversionError.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$6.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$2.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$3.class +INFO: Loading Class: net/minecraft/server/management/PreYggdrasilConverter$4.class +INFO: Loading Class: net/minecraftforge/fml/relauncher/SideOnly.class +INFO: Loading Class: net/minecraftforge/fml/relauncher/Side.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.1/f7be08ec23c21485b9b5a1cf1654c2ec8c58168d/jsr305-3.0.1.jar +INFO: Loading Class: javax/annotation/CheckForNull.class +INFO: Loading Class: javax/annotation/CheckForSigned.class +INFO: Loading Class: javax/annotation/CheckReturnValue.class +INFO: Loading Class: javax/annotation/concurrent/GuardedBy.class +INFO: Loading Class: javax/annotation/concurrent/Immutable.class +INFO: Loading Class: javax/annotation/concurrent/NotThreadSafe.class +INFO: Loading Class: javax/annotation/concurrent/ThreadSafe.class +INFO: Loading Class: javax/annotation/Detainted.class +INFO: Loading Class: javax/annotation/MatchesPattern$Checker.class +INFO: Loading Class: javax/annotation/MatchesPattern.class +INFO: Loading Class: javax/annotation/meta/Exclusive.class +INFO: Loading Class: javax/annotation/meta/Exhaustive.class +INFO: Loading Class: javax/annotation/meta/TypeQualifier.class +INFO: Loading Class: javax/annotation/meta/TypeQualifierDefault.class +INFO: Loading Class: javax/annotation/meta/TypeQualifierNickname.class +INFO: Loading Class: javax/annotation/meta/TypeQualifierValidator.class +INFO: Loading Class: javax/annotation/meta/When.class +INFO: Loading Class: javax/annotation/Nonnegative$Checker.class +INFO: Loading Class: javax/annotation/Nonnegative.class +INFO: Loading Class: javax/annotation/Nonnull$Checker.class +INFO: Loading Class: javax/annotation/Nonnull.class +INFO: Loading Class: javax/annotation/Nullable.class +INFO: Loading Class: javax/annotation/OverridingMethodsMustInvokeSuper.class +INFO: Loading Class: javax/annotation/ParametersAreNonnullByDefault.class +INFO: Loading Class: javax/annotation/ParametersAreNullableByDefault.class +INFO: Loading Class: javax/annotation/PropertyKey.class +INFO: Loading Class: javax/annotation/RegEx$Checker.class +INFO: Loading Class: javax/annotation/RegEx.class +INFO: Loading Class: javax/annotation/Signed.class +INFO: Loading Class: javax/annotation/Syntax.class +INFO: Loading Class: javax/annotation/Tainted.class +INFO: Loading Class: javax/annotation/Untainted.class +INFO: Loading Class: javax/annotation/WillClose.class +INFO: Loading Class: javax/annotation/WillCloseWhenClosed.class +INFO: Loading Class: javax/annotation/WillNotClose.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.mojang/patchy/1.1/aef610b34a1be37fa851825f12372b78424d8903/patchy-1.1.jar +INFO: Loading Class: com/mojang/patchy/LegacyXMLLayout.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap$1.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap$2.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap$3.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/oshi-project/oshi-core/1.1/9ddf7b048a8d701be231c0f4f95fd986198fd2d8/oshi-core-1.1.jar +INFO: Loading Class: oshi/hardware/HardwareAbstractionLayer.class +INFO: Loading Class: oshi/hardware/Memory.class +INFO: Loading Class: oshi/hardware/Processor.class +INFO: Loading Class: oshi/PlatformEnum.class +INFO: Loading Class: oshi/software/os/linux/LinuxHardwareAbstractionLayer.class +INFO: Loading Class: oshi/software/os/linux/LinuxOperatingSystem.class +INFO: Loading Class: oshi/software/os/linux/proc/CentralProcessor.class +INFO: Loading Class: oshi/software/os/linux/proc/GlobalMemory.class +INFO: Loading Class: oshi/software/os/linux/proc/OSVersionInfoEx.class +INFO: Loading Class: oshi/software/os/mac/local/CentralProcessor.class +INFO: Loading Class: oshi/software/os/mac/local/GlobalMemory.class +INFO: Loading Class: oshi/software/os/mac/local/OSVersionInfoEx.class +INFO: Loading Class: oshi/software/os/mac/MacHardwareAbstractionLayer.class +INFO: Loading Class: oshi/software/os/mac/MacOperatingSystem.class +INFO: Loading Class: oshi/software/os/OperatingSystem.class +INFO: Loading Class: oshi/software/os/OperatingSystemVersion.class +INFO: Loading Class: oshi/software/os/Process.class +INFO: Loading Class: oshi/software/os/windows/nt/CentralProcessor.class +INFO: Loading Class: oshi/software/os/windows/nt/GlobalMemory.class +INFO: Loading Class: oshi/software/os/windows/nt/OSNativeSystemInfo.class +INFO: Loading Class: oshi/software/os/windows/nt/OSVersionInfoEx.class +INFO: Loading Class: oshi/software/os/windows/WindowsHardwareAbstractionLayer.class +INFO: Loading Class: oshi/software/os/windows/WindowsOperatingSystem.class +INFO: Loading Class: oshi/SystemInfo$1.class +INFO: Loading Class: oshi/SystemInfo.class +INFO: Loading Class: oshi/util/ExecutingCommand.class +INFO: Loading Class: oshi/util/FormatUtil.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/jna/4.4.0/cb208278274bf12ebdb56c61bd7407e6f774d65a/jna-4.4.0.jar +INFO: Loading Class: com/sun/jna/AltCallingConvention.class +INFO: Loading Class: com/sun/jna/Callback$UncaughtExceptionHandler.class +INFO: Loading Class: com/sun/jna/Callback.class +INFO: Loading Class: com/sun/jna/CallbackParameterContext.class +INFO: Loading Class: com/sun/jna/CallbackProxy.class +INFO: Loading Class: com/sun/jna/CallbackReference$AttachOptions.class +INFO: Loading Class: com/sun/jna/CallbackReference$DefaultCallbackProxy.class +INFO: Loading Class: com/sun/jna/CallbackReference$NativeFunctionHandler.class +INFO: Loading Class: com/sun/jna/CallbackReference.class +INFO: Loading Class: com/sun/jna/CallbackResultContext.class +INFO: Loading Class: com/sun/jna/CallbackThreadInitializer.class +INFO: Loading Class: com/sun/jna/DefaultTypeMapper$Entry.class +INFO: Loading Class: com/sun/jna/DefaultTypeMapper.class +INFO: Loading Class: com/sun/jna/ELFAnalyser.class +INFO: Loading Class: com/sun/jna/FromNativeContext.class +INFO: Loading Class: com/sun/jna/FromNativeConverter.class +INFO: Loading Class: com/sun/jna/Function$NativeMappedArray.class +INFO: Loading Class: com/sun/jna/Function$PointerArray.class +INFO: Loading Class: com/sun/jna/Function$PostCallRead.class +INFO: Loading Class: com/sun/jna/Function.class +INFO: Loading Class: com/sun/jna/FunctionMapper.class +INFO: Loading Class: com/sun/jna/FunctionParameterContext.class +INFO: Loading Class: com/sun/jna/FunctionResultContext.class +INFO: Loading Class: com/sun/jna/IntegerType.class +INFO: Loading Class: com/sun/jna/InvocationMapper.class +INFO: Loading Class: com/sun/jna/LastErrorException.class +INFO: Loading Class: com/sun/jna/Library$Handler$FunctionInfo.class +INFO: Loading Class: com/sun/jna/Library$Handler.class +INFO: Loading Class: com/sun/jna/Library.class +INFO: Loading Class: com/sun/jna/Memory$SharedMemory.class +INFO: Loading Class: com/sun/jna/Memory.class +INFO: Loading Class: com/sun/jna/MethodParameterContext.class +INFO: Loading Class: com/sun/jna/MethodResultContext.class +INFO: Loading Class: com/sun/jna/Native$1.class +INFO: Loading Class: com/sun/jna/Native$2.class +INFO: Loading Class: com/sun/jna/Native$3.class +INFO: Loading Class: com/sun/jna/Native$4.class +INFO: Loading Class: com/sun/jna/Native$5.class +INFO: Loading Class: com/sun/jna/Native$6.class +INFO: Loading Class: com/sun/jna/Native$7.class +INFO: Loading Class: com/sun/jna/Native$AWT.class +INFO: Loading Class: com/sun/jna/Native$Buffers.class +INFO: Loading Class: com/sun/jna/Native$ffi_callback.class +INFO: Loading Class: com/sun/jna/Native.class +INFO: Loading Class: com/sun/jna/NativeLibrary$1.class +INFO: Loading Class: com/sun/jna/NativeLibrary$2.class +INFO: Loading Class: com/sun/jna/NativeLibrary.class +INFO: Loading Class: com/sun/jna/NativeLong.class +INFO: Loading Class: com/sun/jna/NativeMapped.class +INFO: Loading Class: com/sun/jna/NativeMappedConverter.class +INFO: Loading Class: com/sun/jna/NativeString$StringMemory.class +INFO: Loading Class: com/sun/jna/NativeString.class +INFO: Loading Class: com/sun/jna/Platform.class +INFO: Loading Class: com/sun/jna/Pointer$1.class +INFO: Loading Class: com/sun/jna/Pointer$Opaque.class +INFO: Loading Class: com/sun/jna/Pointer.class +INFO: Loading Class: com/sun/jna/PointerType.class +INFO: Loading Class: com/sun/jna/StringArray.class +INFO: Loading Class: com/sun/jna/Structure$1.class +INFO: Loading Class: com/sun/jna/Structure$2.class +INFO: Loading Class: com/sun/jna/Structure$3.class +INFO: Loading Class: com/sun/jna/Structure$AutoAllocated.class +INFO: Loading Class: com/sun/jna/Structure$ByReference.class +INFO: Loading Class: com/sun/jna/Structure$ByValue.class +INFO: Loading Class: com/sun/jna/Structure$FFIType$FFITypes.class +INFO: Loading Class: com/sun/jna/Structure$FFIType$size_t.class +INFO: Loading Class: com/sun/jna/Structure$FFIType.class +INFO: Loading Class: com/sun/jna/Structure$LayoutInfo.class +INFO: Loading Class: com/sun/jna/Structure$StructField.class +INFO: Loading Class: com/sun/jna/Structure$StructureSet.class +INFO: Loading Class: com/sun/jna/Structure.class +INFO: Loading Class: com/sun/jna/StructureReadContext.class +INFO: Loading Class: com/sun/jna/StructureWriteContext.class +INFO: Loading Class: com/sun/jna/ToNativeContext.class +INFO: Loading Class: com/sun/jna/ToNativeConverter.class +INFO: Loading Class: com/sun/jna/TypeConverter.class +INFO: Loading Class: com/sun/jna/TypeMapper.class +INFO: Loading Class: com/sun/jna/Union.class +INFO: Loading Class: com/sun/jna/VarArgsChecker$1.class +INFO: Loading Class: com/sun/jna/VarArgsChecker$NoVarArgsChecker.class +INFO: Loading Class: com/sun/jna/VarArgsChecker$RealVarArgsChecker.class +INFO: Loading Class: com/sun/jna/VarArgsChecker.class +INFO: Loading Class: com/sun/jna/Version.class +INFO: Loading Class: com/sun/jna/WString.class +INFO: Loading Class: com/sun/jna/WeakMemoryHolder.class +INFO: Loading Class: com/sun/jna/ptr/ByReference.class +INFO: Loading Class: com/sun/jna/ptr/ByteByReference.class +INFO: Loading Class: com/sun/jna/ptr/DoubleByReference.class +INFO: Loading Class: com/sun/jna/ptr/FloatByReference.class +INFO: Loading Class: com/sun/jna/ptr/IntByReference.class +INFO: Loading Class: com/sun/jna/ptr/LongByReference.class +INFO: Loading Class: com/sun/jna/ptr/NativeLongByReference.class +INFO: Loading Class: com/sun/jna/ptr/PointerByReference.class +INFO: Loading Class: com/sun/jna/ptr/ShortByReference.class +INFO: Loading Class: com/sun/jna/win32/DLLCallback.class +INFO: Loading Class: com/sun/jna/win32/StdCall.class +INFO: Loading Class: com/sun/jna/win32/StdCallFunctionMapper.class +INFO: Loading Class: com/sun/jna/win32/StdCallLibrary$StdCallCallback.class +INFO: Loading Class: com/sun/jna/win32/StdCallLibrary.class +INFO: Loading Class: com/sun/jna/win32/W32APIFunctionMapper.class +INFO: Loading Class: com/sun/jna/win32/W32APIOptions$1.class +INFO: Loading Class: com/sun/jna/win32/W32APIOptions$2.class +INFO: Loading Class: com/sun/jna/win32/W32APIOptions.class +INFO: Loading Class: com/sun/jna/win32/W32APITypeMapper$1.class +INFO: Loading Class: com/sun/jna/win32/W32APITypeMapper$2.class +INFO: Loading Class: com/sun/jna/win32/W32APITypeMapper.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.dev.jna/platform/3.4.0/e3f70017be8100d3d6923f50b3d2ee17714e9c13/platform-3.4.0.jar +INFO: Loading Class: com/sun/jna/platform/FileMonitor$FileEvent.class +INFO: Loading Class: com/sun/jna/platform/FileMonitor$FileListener.class +INFO: Loading Class: com/sun/jna/platform/FileMonitor$Holder.class +INFO: Loading Class: com/sun/jna/platform/FileMonitor.class +INFO: Loading Class: com/sun/jna/platform/FileUtils$1.class +INFO: Loading Class: com/sun/jna/platform/FileUtils$DefaultFileUtils.class +INFO: Loading Class: com/sun/jna/platform/FileUtils$Holder.class +INFO: Loading Class: com/sun/jna/platform/FileUtils.class +INFO: Loading Class: com/sun/jna/platform/KeyboardUtils$1.class +INFO: Loading Class: com/sun/jna/platform/KeyboardUtils$MacKeyboardUtils.class +INFO: Loading Class: com/sun/jna/platform/KeyboardUtils$NativeKeyboardUtils.class +INFO: Loading Class: com/sun/jna/platform/KeyboardUtils$W32KeyboardUtils.class +INFO: Loading Class: com/sun/jna/platform/KeyboardUtils$X11KeyboardUtils.class +INFO: Loading Class: com/sun/jna/platform/KeyboardUtils.class +INFO: Loading Class: com/sun/jna/platform/RasterRangesUtils$1.class +INFO: Loading Class: com/sun/jna/platform/RasterRangesUtils$RangesOutput.class +INFO: Loading Class: com/sun/jna/platform/RasterRangesUtils.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$1.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$HeavyweightForcer.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$Holder.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$MacWindowUtils$1.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$MacWindowUtils$OSXMaskingContentPane.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$MacWindowUtils.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$NativeWindowUtils$1.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$NativeWindowUtils$2.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$NativeWindowUtils$3.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$NativeWindowUtils$TransparentContentPane.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$NativeWindowUtils.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$RepaintTrigger$Listener.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$RepaintTrigger.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$W32WindowUtils$1.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$W32WindowUtils$2.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$W32WindowUtils$3.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$W32WindowUtils$4.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$W32WindowUtils$W32TransparentContentPane.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$W32WindowUtils.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$1.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$2.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$3.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$4.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$5.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$PixmapSource.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils$X11TransparentContentPane.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils$X11WindowUtils.class +INFO: Loading Class: com/sun/jna/platform/WindowUtils.class +INFO: Loading Class: com/sun/jna/platform/dnd/DragHandler.class +INFO: Loading Class: com/sun/jna/platform/dnd/DropHandler.class +INFO: Loading Class: com/sun/jna/platform/dnd/DropTargetPainter.class +INFO: Loading Class: com/sun/jna/platform/dnd/GhostedDragImage$1.class +INFO: Loading Class: com/sun/jna/platform/dnd/GhostedDragImage$2.class +INFO: Loading Class: com/sun/jna/platform/dnd/GhostedDragImage$3.class +INFO: Loading Class: com/sun/jna/platform/dnd/GhostedDragImage.class +INFO: Loading Class: com/sun/jna/platform/mac/Carbon$EventHandlerProcPtr.class +INFO: Loading Class: com/sun/jna/platform/mac/Carbon$EventHotKeyID$ByValue.class +INFO: Loading Class: com/sun/jna/platform/mac/Carbon$EventHotKeyID.class +INFO: Loading Class: com/sun/jna/platform/mac/Carbon$EventTypeSpec.class +INFO: Loading Class: com/sun/jna/platform/mac/Carbon.class +INFO: Loading Class: com/sun/jna/platform/mac/MacFileUtils$FileManager.class +INFO: Loading Class: com/sun/jna/platform/mac/MacFileUtils.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Atom.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$AtomByReference.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Colormap.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Cursor.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Display.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Drawable.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Font.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$GC.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$KeySym.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Pixmap.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Screen.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Visual.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$VisualID.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Window.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$WindowByReference.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XAnyEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XButtonEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XButtonPressedEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XButtonReleasedEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XCirculateEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XCirculateRequestEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XClientMessageEvent$Data.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XClientMessageEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XColormapEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XConfigureEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XConfigureRequestEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XCreateWindowEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XCrossingEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XDestroyWindowEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XDeviceByReference.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XEnterWindowEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XErrorEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XErrorHandler.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XExposeEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XFocusChangeEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XFocusInEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XFocusOutEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XGCValues.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XGraphicsExposeEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XGravityEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XID.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XImage.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XInputClassInfoByReference.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XKeyEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XKeyboardControlRef.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XKeyboardStateRef.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XKeymapEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XLeaveWindowEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XMapEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XMapRequestEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XMappingEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XModifierKeymapRef.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XMotionEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XNoExposeEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XPoint.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XPointerMovedEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XPropertyEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XRectangle.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XReparentEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XResizeRequestEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XSelectionClearEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XSelectionEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XSelectionRequestEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XSetWindowAttributes.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XSizeHints$Aspect.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XSizeHints.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XTest.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XTextProperty.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XUnmapEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XVisibilityEvent.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XVisualInfo.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XWMHints.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$XWindowAttributes.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Xevie.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Xext.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Xrender$PictFormat.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Xrender$XRenderDirectFormat.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Xrender$XRenderPictFormat.class +INFO: Loading Class: com/sun/jna/platform/unix/X11$Xrender.class +INFO: Loading Class: com/sun/jna/platform/unix/X11.class +INFO: Loading Class: com/sun/jna/platform/win32/Advapi32.class +INFO: Loading Class: com/sun/jna/platform/win32/Advapi32Util$Account.class +INFO: Loading Class: com/sun/jna/platform/win32/Advapi32Util$EventLogIterator.class +INFO: Loading Class: com/sun/jna/platform/win32/Advapi32Util$EventLogRecord.class +INFO: Loading Class: com/sun/jna/platform/win32/Advapi32Util$EventLogType.class +INFO: Loading Class: com/sun/jna/platform/win32/Advapi32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD$DWORD_PTR.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD$LONG_PTR.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD$SIZE_T.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD$SSIZE_T.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD$ULONG_PTR.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD$ULONG_PTRByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/BaseTSD.class +INFO: Loading Class: com/sun/jna/platform/win32/Crypt32.class +INFO: Loading Class: com/sun/jna/platform/win32/Crypt32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$DOMAIN_CONTROLLER_INFO$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$DOMAIN_CONTROLLER_INFO.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$DS_DOMAIN_TRUSTS$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$DS_DOMAIN_TRUSTS.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$PDOMAIN_CONTROLLER_INFO$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$PDOMAIN_CONTROLLER_INFO.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$PDS_DOMAIN_TRUSTS$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC$PDS_DOMAIN_TRUSTS.class +INFO: Loading Class: com/sun/jna/platform/win32/DsGetDC.class +INFO: Loading Class: com/sun/jna/platform/win32/GDI32.class +INFO: Loading Class: com/sun/jna/platform/win32/Guid$GUID$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Guid$GUID.class +INFO: Loading Class: com/sun/jna/platform/win32/Guid.class +INFO: Loading Class: com/sun/jna/platform/win32/Kernel32.class +INFO: Loading Class: com/sun/jna/platform/win32/Kernel32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$GROUP_INFO_0.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$GROUP_INFO_1.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$GROUP_INFO_2.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$GROUP_INFO_3.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$GROUP_USERS_INFO_0.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$LOCALGROUP_INFO_0.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$LOCALGROUP_INFO_1.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$LOCALGROUP_USERS_INFO_0.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$USER_INFO_0.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$USER_INFO_1.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess$USER_INFO_23.class +INFO: Loading Class: com/sun/jna/platform/win32/LMAccess.class +INFO: Loading Class: com/sun/jna/platform/win32/LMCons.class +INFO: Loading Class: com/sun/jna/platform/win32/LMErr.class +INFO: Loading Class: com/sun/jna/platform/win32/LMJoin$NETSETUP_JOIN_STATUS.class +INFO: Loading Class: com/sun/jna/platform/win32/LMJoin.class +INFO: Loading Class: com/sun/jna/platform/win32/Msi.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_BINARY_DATA.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_DOMAIN_INFO.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_INFORMATION$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_INFORMATION.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_RECORD$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_RECORD$UNION$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_RECORD$UNION.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_FOREST_TRUST_RECORD.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_UNICODE_STRING$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$LSA_UNICODE_STRING.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$PLSA_FOREST_TRUST_INFORMATION$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$PLSA_FOREST_TRUST_INFORMATION.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$PLSA_FOREST_TRUST_RECORD$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$PLSA_FOREST_TRUST_RECORD.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$PLSA_UNICODE_STRING$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi$PLSA_UNICODE_STRING.class +INFO: Loading Class: com/sun/jna/platform/win32/NTSecApi.class +INFO: Loading Class: com/sun/jna/platform/win32/NTStatus.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util$DomainController.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util$DomainTrust.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util$Group.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util$LocalGroup.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util$User.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util$UserInfo.class +INFO: Loading Class: com/sun/jna/platform/win32/Netapi32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/NtDll.class +INFO: Loading Class: com/sun/jna/platform/win32/NtDllUtil.class +INFO: Loading Class: com/sun/jna/platform/win32/ObjBase.class +INFO: Loading Class: com/sun/jna/platform/win32/Ole32.class +INFO: Loading Class: com/sun/jna/platform/win32/Ole32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/Oleaut32.class +INFO: Loading Class: com/sun/jna/platform/win32/Secur32$EXTENDED_NAME_FORMAT.class +INFO: Loading Class: com/sun/jna/platform/win32/Secur32.class +INFO: Loading Class: com/sun/jna/platform/win32/Secur32Util$SecurityPackage.class +INFO: Loading Class: com/sun/jna/platform/win32/Secur32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/SetupApi$SP_DEVICE_INTERFACE_DATA$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/SetupApi$SP_DEVICE_INTERFACE_DATA.class +INFO: Loading Class: com/sun/jna/platform/win32/SetupApi$SP_DEVINFO_DATA$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/SetupApi$SP_DEVINFO_DATA.class +INFO: Loading Class: com/sun/jna/platform/win32/SetupApi.class +INFO: Loading Class: com/sun/jna/platform/win32/Shell32.class +INFO: Loading Class: com/sun/jna/platform/win32/Shell32Util.class +INFO: Loading Class: com/sun/jna/platform/win32/ShellAPI$SHFILEOPSTRUCT.class +INFO: Loading Class: com/sun/jna/platform/win32/ShellAPI.class +INFO: Loading Class: com/sun/jna/platform/win32/ShlObj.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$CredHandle.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$CtxtHandle.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$PSecHandle$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$PSecHandle.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$PSecPkgInfo$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$PSecPkgInfo.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SECURITY_INTEGER.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecBuffer$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecBuffer.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecBufferDesc.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecHandle$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecHandle.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecPkgInfo$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$SecPkgInfo.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi$TimeStamp.class +INFO: Loading Class: com/sun/jna/platform/win32/Sspi.class +INFO: Loading Class: com/sun/jna/platform/win32/Tlhelp32$PROCESSENTRY32$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Tlhelp32$PROCESSENTRY32.class +INFO: Loading Class: com/sun/jna/platform/win32/Tlhelp32.class +INFO: Loading Class: com/sun/jna/platform/win32/User32.class +INFO: Loading Class: com/sun/jna/platform/win32/VerRsrc$VS_FIXEDFILEINFO$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/VerRsrc$VS_FIXEDFILEINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/VerRsrc.class +INFO: Loading Class: com/sun/jna/platform/win32/Version.class +INFO: Loading Class: com/sun/jna/platform/win32/W32Errors.class +INFO: Loading Class: com/sun/jna/platform/win32/W32FileMonitor$1.class +INFO: Loading Class: com/sun/jna/platform/win32/W32FileMonitor$FileInfo.class +INFO: Loading Class: com/sun/jna/platform/win32/W32FileMonitor.class +INFO: Loading Class: com/sun/jna/platform/win32/W32FileUtils.class +INFO: Loading Class: com/sun/jna/platform/win32/W32Service.class +INFO: Loading Class: com/sun/jna/platform/win32/W32ServiceManager.class +INFO: Loading Class: com/sun/jna/platform/win32/WTypes.class +INFO: Loading Class: com/sun/jna/platform/win32/Wdm$KEY_BASIC_INFORMATION.class +INFO: Loading Class: com/sun/jna/platform/win32/Wdm$KEY_INFORMATION_CLASS.class +INFO: Loading Class: com/sun/jna/platform/win32/Wdm.class +INFO: Loading Class: com/sun/jna/platform/win32/Win32Exception.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$FILETIME$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$FILETIME.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$MEMORYSTATUSEX.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$OVERLAPPED.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$PROCESS_INFORMATION$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$PROCESS_INFORMATION.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SECURITY_ATTRIBUTES.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$STARTUPINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SYSTEMTIME.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SYSTEM_INFO$PI$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SYSTEM_INFO$PI.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SYSTEM_INFO$UNION$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SYSTEM_INFO$UNION.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase$SYSTEM_INFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinBase.class +INFO: Loading Class: com/sun/jna/platform/win32/WinCrypt$CRYPTPROTECT_PROMPTSTRUCT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinCrypt$DATA_BLOB.class +INFO: Loading Class: com/sun/jna/platform/win32/WinCrypt.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$DWORD.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$DWORDLONG.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HBITMAP.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HCURSOR.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HDC.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HFONT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HICON.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HINSTANCE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HMENU.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HMODULE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HPALETTE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HPEN.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HRGN.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HRSRC.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$HWND.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$LONG.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$LPARAM.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$LRESULT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$RECT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$UINT_PTR.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$ULONGLONG.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$WORD.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef$WPARAM.class +INFO: Loading Class: com/sun/jna/platform/win32/WinDef.class +INFO: Loading Class: com/sun/jna/platform/win32/WinError.class +INFO: Loading Class: com/sun/jna/platform/win32/WinGDI$BITMAPINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinGDI$BITMAPINFOHEADER.class +INFO: Loading Class: com/sun/jna/platform/win32/WinGDI$RGBQUAD.class +INFO: Loading Class: com/sun/jna/platform/win32/WinGDI$RGNDATA.class +INFO: Loading Class: com/sun/jna/platform/win32/WinGDI$RGNDATAHEADER.class +INFO: Loading Class: com/sun/jna/platform/win32/WinGDI.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$ACCESS_ACEStructure.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$ACCESS_ALLOWED_ACE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$ACCESS_DENIED_ACE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$ACEStructure.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$ACE_HEADER.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$ACL.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$EVENTLOGRECORD.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$FILE_NOTIFY_INFORMATION.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$HANDLE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$HANDLEByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$HRESULT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$LARGE_INTEGER$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$LARGE_INTEGER$LowHigh.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$LARGE_INTEGER$UNION.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$LARGE_INTEGER.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$LUID.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$LUID_AND_ATTRIBUTES.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$OSVERSIONINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$OSVERSIONINFOEX.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$OVERLAPPED_COMPLETION_ROUTINE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$PSID$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$PSID.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$PSIDByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SECURITY_DESCRIPTOR$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SECURITY_DESCRIPTOR.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SECURITY_DESCRIPTOR_RELATIVE$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SECURITY_DESCRIPTOR_RELATIVE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SECURITY_IMPERSONATION_LEVEL.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SID_AND_ATTRIBUTES.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$SID_NAME_USE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$TOKEN_GROUPS.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$TOKEN_INFORMATION_CLASS.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$TOKEN_OWNER.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$TOKEN_PRIVILEGES.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$TOKEN_TYPE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$TOKEN_USER.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT$WELL_KNOWN_SID_TYPE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinNT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinReg$HKEY.class +INFO: Loading Class: com/sun/jna/platform/win32/WinReg$HKEYByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinReg.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$BLENDFUNCTION.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$FLASHWINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$GUITHREADINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$HARDWAREINPUT$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$HARDWAREINPUT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$HHOOK.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$HOOKPROC.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$INPUT$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$INPUT$INPUT_UNION.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$INPUT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$KBDLLHOOKSTRUCT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$KEYBDINPUT$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$KEYBDINPUT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$LowLevelKeyboardProc.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$MOUSEINPUT$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$MOUSEINPUT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$MSG.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$POINT.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$SIZE.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$WINDOWINFO.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser$WNDENUMPROC.class +INFO: Loading Class: com/sun/jna/platform/win32/WinUser.class +INFO: Loading Class: com/sun/jna/platform/win32/Winioctl$STORAGE_DEVICE_NUMBER$ByReference.class +INFO: Loading Class: com/sun/jna/platform/win32/Winioctl$STORAGE_DEVICE_NUMBER.class +INFO: Loading Class: com/sun/jna/platform/win32/Winioctl.class +INFO: Loading Class: com/sun/jna/platform/win32/Winspool$PRINTER_INFO_1.class +INFO: Loading Class: com/sun/jna/platform/win32/Winspool$PRINTER_INFO_4.class +INFO: Loading Class: com/sun/jna/platform/win32/Winspool.class +INFO: Loading Class: com/sun/jna/platform/win32/WinspoolUtil.class +INFO: Loading Class: com/sun/jna/platform/win32/Winsvc$SC_HANDLE.class +INFO: Loading Class: com/sun/jna/platform/win32/Winsvc$SC_STATUS_TYPE.class +INFO: Loading Class: com/sun/jna/platform/win32/Winsvc$SERVICE_STATUS.class +INFO: Loading Class: com/sun/jna/platform/win32/Winsvc$SERVICE_STATUS_PROCESS.class +INFO: Loading Class: com/sun/jna/platform/win32/Winsvc.class +INFO: Loading Class: com/sun/jna/platform/wince/CoreDLL.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.ibm.icu/icu4j-core-mojang/51.2/63d216a9311cca6be337c1e458e587f99d382b84/icu4j-core-mojang-51.2.jar +INFO: Loading Class: com/ibm/icu/impl/Assert.class +INFO: Loading Class: com/ibm/icu/impl/BMPSet.class +INFO: Loading Class: com/ibm/icu/impl/BOCU.class +INFO: Loading Class: com/ibm/icu/impl/CacheBase.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$1.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$2.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$3.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$4.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$AngleFunc.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$CoordFunc.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$Ecliptic.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$Equatorial.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$Horizon.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$MoonAge.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer$SolarLongitude.class +INFO: Loading Class: com/ibm/icu/impl/CalendarAstronomer.class +INFO: Loading Class: com/ibm/icu/impl/CalendarCache.class +INFO: Loading Class: com/ibm/icu/impl/CalendarData.class +INFO: Loading Class: com/ibm/icu/impl/CalendarUtil.class +INFO: Loading Class: com/ibm/icu/impl/CharacterIteration.class +INFO: Loading Class: com/ibm/icu/impl/CharacterIteratorWrapper.class +INFO: Loading Class: com/ibm/icu/impl/CharTrie.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData$1.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData$CurrencyDisplayInfo.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData$CurrencyDisplayInfoProvider.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData$CurrencyFormatInfo.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData$CurrencySpacingInfo.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData$DefaultInfo.class +INFO: Loading Class: com/ibm/icu/impl/CurrencyData.class +INFO: Loading Class: com/ibm/icu/impl/data/BreakIteratorRules.class +INFO: Loading Class: com/ibm/icu/impl/data/BreakIteratorRules_th.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_da.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_da_DK.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_de.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_de_AT.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_de_DE.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_el.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_el_GR.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_en.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_en_CA.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_en_GB.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_en_US.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_es.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_es_MX.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_fr.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_fr_CA.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_fr_FR.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_it.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_it_IT.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_iw.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_iw_IL.class +INFO: Loading Class: com/ibm/icu/impl/data/HolidayBundle_ja_JP.class +INFO: Loading Class: com/ibm/icu/impl/data/ResourceReader.class +INFO: Loading Class: com/ibm/icu/impl/data/TokenIterator.class +INFO: Loading Class: com/ibm/icu/impl/DateNumberFormat.class +INFO: Loading Class: com/ibm/icu/impl/Differ.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicDurationFormat.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicDurationFormatter.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicDurationFormatterFactory.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicPeriodBuilderFactory$Settings.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicPeriodBuilderFactory.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicPeriodFormatter.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicPeriodFormatterFactory$Customizations.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicPeriodFormatterFactory.class +INFO: Loading Class: com/ibm/icu/impl/duration/BasicPeriodFormatterService.class +INFO: Loading Class: com/ibm/icu/impl/duration/DateFormatter.class +INFO: Loading Class: com/ibm/icu/impl/duration/DurationFormatter.class +INFO: Loading Class: com/ibm/icu/impl/duration/DurationFormatterFactory.class +INFO: Loading Class: com/ibm/icu/impl/duration/FixedUnitBuilder.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$ECountVariant.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EDecimalHandling.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EFractionHandling.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EGender.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EHalfPlacement.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EHalfSupport.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EMilliSupport.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$ENumberSystem.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EPluralization.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$ESeparatorVariant.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$ETimeDirection.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$ETimeLimit.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EUnitVariant.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$EZeroHandling.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord$ScopeData.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/DataRecord.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/PeriodFormatterData.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/PeriodFormatterDataService.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/RecordReader.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/RecordWriter.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/ResourceBasedPeriodFormatterDataService.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/Utils$ChineseDigits.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/Utils.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/XMLRecordReader.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/XMLRecordWriter.class +INFO: Loading Class: com/ibm/icu/impl/duration/impl/YMDDateFormatter.class +INFO: Loading Class: com/ibm/icu/impl/duration/MultiUnitBuilder.class +INFO: Loading Class: com/ibm/icu/impl/duration/OneOrTwoUnitBuilder.class +INFO: Loading Class: com/ibm/icu/impl/duration/Period.class +INFO: Loading Class: com/ibm/icu/impl/duration/PeriodBuilder.class +INFO: Loading Class: com/ibm/icu/impl/duration/PeriodBuilderFactory.class +INFO: Loading Class: com/ibm/icu/impl/duration/PeriodBuilderImpl.class +INFO: Loading Class: com/ibm/icu/impl/duration/PeriodFormatter.class +INFO: Loading Class: com/ibm/icu/impl/duration/PeriodFormatterFactory.class +INFO: Loading Class: com/ibm/icu/impl/duration/PeriodFormatterService.class +INFO: Loading Class: com/ibm/icu/impl/duration/SingleUnitBuilder.class +INFO: Loading Class: com/ibm/icu/impl/duration/TimeUnit.class +INFO: Loading Class: com/ibm/icu/impl/duration/TimeUnitConstants.class +INFO: Loading Class: com/ibm/icu/impl/Grego.class +INFO: Loading Class: com/ibm/icu/impl/ICUBinary$Authenticate.class +INFO: Loading Class: com/ibm/icu/impl/ICUBinary.class +INFO: Loading Class: com/ibm/icu/impl/ICUBinaryStream.class +INFO: Loading Class: com/ibm/icu/impl/ICUCache.class +INFO: Loading Class: com/ibm/icu/impl/ICUConfig$1.class +INFO: Loading Class: com/ibm/icu/impl/ICUConfig.class +INFO: Loading Class: com/ibm/icu/impl/ICUData$1.class +INFO: Loading Class: com/ibm/icu/impl/ICUData$2.class +INFO: Loading Class: com/ibm/icu/impl/ICUData$3.class +INFO: Loading Class: com/ibm/icu/impl/ICUData.class +INFO: Loading Class: com/ibm/icu/impl/ICUDataVersion.class +INFO: Loading Class: com/ibm/icu/impl/ICUDebug.class +INFO: Loading Class: com/ibm/icu/impl/ICULocaleService$ICUResourceBundleFactory.class +INFO: Loading Class: com/ibm/icu/impl/ICULocaleService$LocaleKey.class +INFO: Loading Class: com/ibm/icu/impl/ICULocaleService$LocaleKeyFactory.class +INFO: Loading Class: com/ibm/icu/impl/ICULocaleService$SimpleLocaleKeyFactory.class +INFO: Loading Class: com/ibm/icu/impl/ICULocaleService.class +INFO: Loading Class: com/ibm/icu/impl/ICUNotifier$NotifyThread.class +INFO: Loading Class: com/ibm/icu/impl/ICUNotifier.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundle$1$1.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundle$1.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundle$2.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundle$AvailEntry.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundle.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceArray.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceBinary.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceContainer.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceInt.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceIntVector.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceString.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl$ResourceTable.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleImpl.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$1.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Array.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Array16.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$ByteSequence.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Container.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$ReaderCache.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$ReaderInfo.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Table.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Table16.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Table1632.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader$Table32.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceBundleReader.class +INFO: Loading Class: com/ibm/icu/impl/ICUResourceTableAccess.class +INFO: Loading Class: com/ibm/icu/impl/ICURWLock$1.class +INFO: Loading Class: com/ibm/icu/impl/ICURWLock$Stats.class +INFO: Loading Class: com/ibm/icu/impl/ICURWLock.class +INFO: Loading Class: com/ibm/icu/impl/ICUService$CacheEntry.class +INFO: Loading Class: com/ibm/icu/impl/ICUService$Factory.class +INFO: Loading Class: com/ibm/icu/impl/ICUService$Key.class +INFO: Loading Class: com/ibm/icu/impl/ICUService$LocaleRef.class +INFO: Loading Class: com/ibm/icu/impl/ICUService$ServiceListener.class +INFO: Loading Class: com/ibm/icu/impl/ICUService$SimpleFactory.class +INFO: Loading Class: com/ibm/icu/impl/ICUService.class +INFO: Loading Class: com/ibm/icu/impl/IDNA2003.class +INFO: Loading Class: com/ibm/icu/impl/IllegalIcuArgumentException.class +INFO: Loading Class: com/ibm/icu/impl/IntTrie.class +INFO: Loading Class: com/ibm/icu/impl/IntTrieBuilder.class +INFO: Loading Class: com/ibm/icu/impl/InvalidFormatException.class +INFO: Loading Class: com/ibm/icu/impl/IterableComparator.class +INFO: Loading Class: com/ibm/icu/impl/JavaTimeZone.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$1.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$Appender.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$Cache.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$CapitalizationContextUsage.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$DataTable.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$DataTables$1.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$DataTables.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$DataTableType.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$ICUDataTable.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$ICUDataTables.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$LangDataTables.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl$RegionDataTables.class +INFO: Loading Class: com/ibm/icu/impl/LocaleDisplayNamesImpl.class +INFO: Loading Class: com/ibm/icu/impl/LocaleIDParser$1.class +INFO: Loading Class: com/ibm/icu/impl/LocaleIDParser.class +INFO: Loading Class: com/ibm/icu/impl/LocaleIDs.class +INFO: Loading Class: com/ibm/icu/impl/LocaleUtility.class +INFO: Loading Class: com/ibm/icu/impl/locale/AsciiUtil$CaseInsensitiveKey.class +INFO: Loading Class: com/ibm/icu/impl/locale/AsciiUtil.class +INFO: Loading Class: com/ibm/icu/impl/locale/BaseLocale$1.class +INFO: Loading Class: com/ibm/icu/impl/locale/BaseLocale$Cache.class +INFO: Loading Class: com/ibm/icu/impl/locale/BaseLocale$Key.class +INFO: Loading Class: com/ibm/icu/impl/locale/BaseLocale.class +INFO: Loading Class: com/ibm/icu/impl/locale/Extension.class +INFO: Loading Class: com/ibm/icu/impl/locale/InternalLocaleBuilder$CaseInsensitiveChar.class +INFO: Loading Class: com/ibm/icu/impl/locale/InternalLocaleBuilder$CaseInsensitiveString.class +INFO: Loading Class: com/ibm/icu/impl/locale/InternalLocaleBuilder.class +INFO: Loading Class: com/ibm/icu/impl/locale/LanguageTag.class +INFO: Loading Class: com/ibm/icu/impl/locale/LocaleExtensions.class +INFO: Loading Class: com/ibm/icu/impl/locale/LocaleObjectCache$CacheEntry.class +INFO: Loading Class: com/ibm/icu/impl/locale/LocaleObjectCache.class +INFO: Loading Class: com/ibm/icu/impl/locale/LocaleSyntaxException.class +INFO: Loading Class: com/ibm/icu/impl/locale/ParseStatus.class +INFO: Loading Class: com/ibm/icu/impl/locale/StringTokenIterator.class +INFO: Loading Class: com/ibm/icu/impl/locale/UnicodeLocaleExtension.class +INFO: Loading Class: com/ibm/icu/impl/MultiComparator.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$1.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$ComposeNormalizer2.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$DecomposeNormalizer2.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$FCDNormalizer2.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$NFCSingleton.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$NFKCSingleton.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$NFKC_CFSingleton.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$NoopNormalizer2.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$Norm2AllModesSingleton.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes$Normalizer2WithImpl.class +INFO: Loading Class: com/ibm/icu/impl/Norm2AllModes.class +INFO: Loading Class: com/ibm/icu/impl/Normalizer2Impl$1.class +INFO: Loading Class: com/ibm/icu/impl/Normalizer2Impl$Hangul.class +INFO: Loading Class: com/ibm/icu/impl/Normalizer2Impl$IsAcceptable.class +INFO: Loading Class: com/ibm/icu/impl/Normalizer2Impl$ReorderingBuffer.class +INFO: Loading Class: com/ibm/icu/impl/Normalizer2Impl$UTF16Plus.class +INFO: Loading Class: com/ibm/icu/impl/Normalizer2Impl.class +INFO: Loading Class: com/ibm/icu/impl/OlsonTimeZone.class +INFO: Loading Class: com/ibm/icu/impl/PatternProps.class +INFO: Loading Class: com/ibm/icu/impl/PatternTokenizer.class +INFO: Loading Class: com/ibm/icu/impl/PluralRulesLoader.class +INFO: Loading Class: com/ibm/icu/impl/PropsVectors$1.class +INFO: Loading Class: com/ibm/icu/impl/PropsVectors$CompactHandler.class +INFO: Loading Class: com/ibm/icu/impl/PropsVectors$DefaultGetFoldedValue.class +INFO: Loading Class: com/ibm/icu/impl/PropsVectors$DefaultGetFoldingOffset.class +INFO: Loading Class: com/ibm/icu/impl/PropsVectors.class +INFO: Loading Class: com/ibm/icu/impl/Punycode.class +INFO: Loading Class: com/ibm/icu/impl/PVecToTrieCompactHandler.class +INFO: Loading Class: com/ibm/icu/impl/RelativeDateFormat$1.class +INFO: Loading Class: com/ibm/icu/impl/RelativeDateFormat$URelativeString.class +INFO: Loading Class: com/ibm/icu/impl/RelativeDateFormat.class +INFO: Loading Class: com/ibm/icu/impl/ReplaceableUCharacterIterator.class +INFO: Loading Class: com/ibm/icu/impl/ResourceBundleWrapper$1.class +INFO: Loading Class: com/ibm/icu/impl/ResourceBundleWrapper.class +INFO: Loading Class: com/ibm/icu/impl/Row$R2.class +INFO: Loading Class: com/ibm/icu/impl/Row$R3.class +INFO: Loading Class: com/ibm/icu/impl/Row$R4.class +INFO: Loading Class: com/ibm/icu/impl/Row$R5.class +INFO: Loading Class: com/ibm/icu/impl/Row.class +INFO: Loading Class: com/ibm/icu/impl/RuleCharacterIterator.class +INFO: Loading Class: com/ibm/icu/impl/SimpleCache.class +INFO: Loading Class: com/ibm/icu/impl/SoftCache$1.class +INFO: Loading Class: com/ibm/icu/impl/SoftCache$SettableSoftReference.class +INFO: Loading Class: com/ibm/icu/impl/SoftCache.class +INFO: Loading Class: com/ibm/icu/impl/SortedSetRelation.class +INFO: Loading Class: com/ibm/icu/impl/StringPrepDataReader.class +INFO: Loading Class: com/ibm/icu/impl/StringUCharacterIterator.class +INFO: Loading Class: com/ibm/icu/impl/TextTrieMap$1.class +INFO: Loading Class: com/ibm/icu/impl/TextTrieMap$CharIterator.class +INFO: Loading Class: com/ibm/icu/impl/TextTrieMap$LongestMatchHandler.class +INFO: Loading Class: com/ibm/icu/impl/TextTrieMap$Node.class +INFO: Loading Class: com/ibm/icu/impl/TextTrieMap$ResultHandler.class +INFO: Loading Class: com/ibm/icu/impl/TextTrieMap.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneAdapter.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$1.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$Cache.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$GenericMatchInfo.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$GenericNameSearchHandler.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$GenericNameType.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$NameInfo.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames$Pattern.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneGenericNames.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesFactoryImpl.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$1.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$MZ2TZsCache.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$MZMapEntry.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$NameInfo.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$NameSearchHandler.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$TZ2MZsCache.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$TZNames.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl$ZNames.class +INFO: Loading Class: com/ibm/icu/impl/TimeZoneNamesImpl.class +INFO: Loading Class: com/ibm/icu/impl/Trie$1.class +INFO: Loading Class: com/ibm/icu/impl/Trie$DataManipulate.class +INFO: Loading Class: com/ibm/icu/impl/Trie$DefaultGetFoldingOffset.class +INFO: Loading Class: com/ibm/icu/impl/Trie.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$1.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$2.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$CharSequenceIterator.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$CharSequenceValues.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$Range.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$Trie2Iterator.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$UTrie2Header.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$ValueMapper.class +INFO: Loading Class: com/ibm/icu/impl/Trie2$ValueWidth.class +INFO: Loading Class: com/ibm/icu/impl/Trie2.class +INFO: Loading Class: com/ibm/icu/impl/Trie2Writable$1.class +INFO: Loading Class: com/ibm/icu/impl/Trie2Writable.class +INFO: Loading Class: com/ibm/icu/impl/Trie2_16.class +INFO: Loading Class: com/ibm/icu/impl/Trie2_32.class +INFO: Loading Class: com/ibm/icu/impl/TrieBuilder$DataManipulate.class +INFO: Loading Class: com/ibm/icu/impl/TrieBuilder.class +INFO: Loading Class: com/ibm/icu/impl/TrieIterator.class +INFO: Loading Class: com/ibm/icu/impl/UBiDiProps$1.class +INFO: Loading Class: com/ibm/icu/impl/UBiDiProps$IsAcceptable.class +INFO: Loading Class: com/ibm/icu/impl/UBiDiProps.class +INFO: Loading Class: com/ibm/icu/impl/UCaseProps$1.class +INFO: Loading Class: com/ibm/icu/impl/UCaseProps$ContextIterator.class +INFO: Loading Class: com/ibm/icu/impl/UCaseProps$IsAcceptable.class +INFO: Loading Class: com/ibm/icu/impl/UCaseProps.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterIteratorWrapper.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterName$AlgorithmName.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterName.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterNameChoice.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterNameReader.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$1.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$10.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$11.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$12.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$13.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$14.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$15.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$16.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$17.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$18.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$19.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$2.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$20.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$21.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$22.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$3.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$4.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$5.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$6.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$7.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$8.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$9.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$BiDiIntProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$BinaryProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$CaseBinaryProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$CombiningClassIntProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$IntProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$IsAcceptable.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$NormInertBinaryProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty$NormQuickCheckIntProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterProperty.class +INFO: Loading Class: com/ibm/icu/impl/UCharacterUtility.class +INFO: Loading Class: com/ibm/icu/impl/UCharArrayIterator.class +INFO: Loading Class: com/ibm/icu/impl/UnicodeRegex$1.class +INFO: Loading Class: com/ibm/icu/impl/UnicodeRegex.class +INFO: Loading Class: com/ibm/icu/impl/UnicodeSetStringSpan$OffsetList.class +INFO: Loading Class: com/ibm/icu/impl/UnicodeSetStringSpan.class +INFO: Loading Class: com/ibm/icu/impl/UPropertyAliases$1.class +INFO: Loading Class: com/ibm/icu/impl/UPropertyAliases$IsAcceptable.class +INFO: Loading Class: com/ibm/icu/impl/UPropertyAliases.class +INFO: Loading Class: com/ibm/icu/impl/URLHandler$FileURLHandler.class +INFO: Loading Class: com/ibm/icu/impl/URLHandler$JarURLHandler.class +INFO: Loading Class: com/ibm/icu/impl/URLHandler$URLVisitor.class +INFO: Loading Class: com/ibm/icu/impl/URLHandler.class +INFO: Loading Class: com/ibm/icu/impl/USerializedSet.class +INFO: Loading Class: com/ibm/icu/impl/Utility.class +INFO: Loading Class: com/ibm/icu/impl/UTS46.class +INFO: Loading Class: com/ibm/icu/impl/ZoneMeta$1.class +INFO: Loading Class: com/ibm/icu/impl/ZoneMeta$CustomTimeZoneCache.class +INFO: Loading Class: com/ibm/icu/impl/ZoneMeta$SystemTimeZoneCache.class +INFO: Loading Class: com/ibm/icu/impl/ZoneMeta.class +INFO: Loading Class: com/ibm/icu/lang/CharSequences.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$1.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$DecompositionType.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$DummyValueIterator.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$EastAsianWidth.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$GraphemeClusterBreak.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$HangulSyllableType.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$JoiningGroup.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$JoiningType.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$LineBreak.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$NumericType.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$SentenceBreak.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$StringContextIterator.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$UCharacterTypeIterator$MaskType.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$UCharacterTypeIterator.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$UnicodeBlock.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter$WordBreak.class +INFO: Loading Class: com/ibm/icu/lang/UCharacter.class +INFO: Loading Class: com/ibm/icu/lang/UCharacterCategory.class +INFO: Loading Class: com/ibm/icu/lang/UCharacterDirection.class +INFO: Loading Class: com/ibm/icu/lang/UCharacterEnums$ECharacterCategory.class +INFO: Loading Class: com/ibm/icu/lang/UCharacterEnums$ECharacterDirection.class +INFO: Loading Class: com/ibm/icu/lang/UCharacterEnums.class +INFO: Loading Class: com/ibm/icu/lang/UCharacterNameIterator.class +INFO: Loading Class: com/ibm/icu/lang/UProperty$NameChoice.class +INFO: Loading Class: com/ibm/icu/lang/UProperty.class +INFO: Loading Class: com/ibm/icu/lang/UScript$ScriptMetadata.class +INFO: Loading Class: com/ibm/icu/lang/UScript$ScriptUsage.class +INFO: Loading Class: com/ibm/icu/lang/UScript.class +INFO: Loading Class: com/ibm/icu/lang/UScriptRun$ParenStackEntry.class +INFO: Loading Class: com/ibm/icu/lang/UScriptRun.class +INFO: Loading Class: com/ibm/icu/math/BigDecimal.class +INFO: Loading Class: com/ibm/icu/math/MathContext.class +INFO: Loading Class: com/ibm/icu/text/AbsoluteValueSubstitution.class +INFO: Loading Class: com/ibm/icu/text/ArabicShaping.class +INFO: Loading Class: com/ibm/icu/text/ArabicShapingException.class +INFO: Loading Class: com/ibm/icu/text/Bidi$1.class +INFO: Loading Class: com/ibm/icu/text/Bidi$ImpTabPair.class +INFO: Loading Class: com/ibm/icu/text/Bidi$InsertPoints.class +INFO: Loading Class: com/ibm/icu/text/Bidi$LevState.class +INFO: Loading Class: com/ibm/icu/text/Bidi$Point.class +INFO: Loading Class: com/ibm/icu/text/Bidi.class +INFO: Loading Class: com/ibm/icu/text/BidiClassifier.class +INFO: Loading Class: com/ibm/icu/text/BidiLine.class +INFO: Loading Class: com/ibm/icu/text/BidiRun.class +INFO: Loading Class: com/ibm/icu/text/BidiWriter.class +INFO: Loading Class: com/ibm/icu/text/BreakCTDictionary$CompactTrieHeader.class +INFO: Loading Class: com/ibm/icu/text/BreakCTDictionary$CompactTrieHorizontalNode.class +INFO: Loading Class: com/ibm/icu/text/BreakCTDictionary$CompactTrieNodeFlags.class +INFO: Loading Class: com/ibm/icu/text/BreakCTDictionary$CompactTrieNodes.class +INFO: Loading Class: com/ibm/icu/text/BreakCTDictionary$CompactTrieVerticalNode.class +INFO: Loading Class: com/ibm/icu/text/BreakCTDictionary.class +INFO: Loading Class: com/ibm/icu/text/BreakDictionary.class +INFO: Loading Class: com/ibm/icu/text/BreakIterator$BreakIteratorCache.class +INFO: Loading Class: com/ibm/icu/text/BreakIterator$BreakIteratorServiceShim.class +INFO: Loading Class: com/ibm/icu/text/BreakIterator.class +INFO: Loading Class: com/ibm/icu/text/BreakIteratorFactory$BFService$1RBBreakIteratorFactory.class +INFO: Loading Class: com/ibm/icu/text/BreakIteratorFactory$BFService.class +INFO: Loading Class: com/ibm/icu/text/BreakIteratorFactory.class +INFO: Loading Class: com/ibm/icu/text/BytesDictionaryMatcher.class +INFO: Loading Class: com/ibm/icu/text/CanonicalIterator.class +INFO: Loading Class: com/ibm/icu/text/CharsDictionaryMatcher.class +INFO: Loading Class: com/ibm/icu/text/CharsetDetector.class +INFO: Loading Class: com/ibm/icu/text/CharsetMatch.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecognizer.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_2022$CharsetRecog_2022CN.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_2022$CharsetRecog_2022JP.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_2022$CharsetRecog_2022KR.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_2022.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_big5.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_euc$CharsetRecog_euc_jp.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_euc$CharsetRecog_euc_kr.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_euc.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_gb_18030.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$CharsetRecog_sjis.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs$iteratedChar.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_mbcs.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_1.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_2.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_5.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_5_ru.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_6.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_6_ar.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_7.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_7_el.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_8.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_8_he.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_8_I_he.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_9.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_8859_9_tr.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM420_ar.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM420_ar_ltr.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM420_ar_rtl.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM424_he.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM424_he_ltr.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_IBM424_he_rtl.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_KOI8_R.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_windows_1251.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$CharsetRecog_windows_1256.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$NGramParser.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs$NGramsPlusLang.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_sbcs.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_16_BE.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_16_LE.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_32.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_32_BE.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_Unicode$CharsetRecog_UTF_32_LE.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_Unicode.class +INFO: Loading Class: com/ibm/icu/text/CharsetRecog_UTF8.class +INFO: Loading Class: com/ibm/icu/text/ChineseDateFormat$Field.class +INFO: Loading Class: com/ibm/icu/text/ChineseDateFormat.class +INFO: Loading Class: com/ibm/icu/text/ChineseDateFormatSymbols.class +INFO: Loading Class: com/ibm/icu/text/CjkBreakEngine.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalDataCache$1.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalDataCache$Data.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalDataCache$DataBundle.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalDataCache$QuoteState.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalDataCache$UResFlags.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalDataCache.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalFormat$1.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalFormat$Amount.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalFormat$CompactStyle.class +INFO: Loading Class: com/ibm/icu/text/CompactDecimalFormat.class +INFO: Loading Class: com/ibm/icu/text/ComposedCharIter.class +INFO: Loading Class: com/ibm/icu/text/CurrencyDisplayNames.class +INFO: Loading Class: com/ibm/icu/text/CurrencyFormat.class +INFO: Loading Class: com/ibm/icu/text/CurrencyMetaInfo$CurrencyDigits.class +INFO: Loading Class: com/ibm/icu/text/CurrencyMetaInfo$CurrencyFilter.class +INFO: Loading Class: com/ibm/icu/text/CurrencyMetaInfo$CurrencyInfo.class +INFO: Loading Class: com/ibm/icu/text/CurrencyMetaInfo.class +INFO: Loading Class: com/ibm/icu/text/CurrencyPluralInfo.class +INFO: Loading Class: com/ibm/icu/text/DateFormat$Field.class +INFO: Loading Class: com/ibm/icu/text/DateFormat.class +INFO: Loading Class: com/ibm/icu/text/DateFormatSymbols$CapitalizationContextUsage.class +INFO: Loading Class: com/ibm/icu/text/DateFormatSymbols.class +INFO: Loading Class: com/ibm/icu/text/DateIntervalFormat$BestMatchInfo.class +INFO: Loading Class: com/ibm/icu/text/DateIntervalFormat$SkeletonAndItsBestMatch.class +INFO: Loading Class: com/ibm/icu/text/DateIntervalFormat.class +INFO: Loading Class: com/ibm/icu/text/DateIntervalInfo$PatternInfo.class +INFO: Loading Class: com/ibm/icu/text/DateIntervalInfo.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$1.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$DateTimeMatcher.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$DistanceInfo.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$FormatParser.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$PatternInfo.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$PatternWithMatcher.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$PatternWithSkeletonFlag.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator$VariableField.class +INFO: Loading Class: com/ibm/icu/text/DateTimePatternGenerator.class +INFO: Loading Class: com/ibm/icu/text/DecimalFormat$AffixForCurrency.class +INFO: Loading Class: com/ibm/icu/text/DecimalFormat$Unit.class +INFO: Loading Class: com/ibm/icu/text/DecimalFormat.class +INFO: Loading Class: com/ibm/icu/text/DecimalFormatSymbols.class +INFO: Loading Class: com/ibm/icu/text/DecompData.class +INFO: Loading Class: com/ibm/icu/text/DictionaryBreakEngine.class +INFO: Loading Class: com/ibm/icu/text/DictionaryData.class +INFO: Loading Class: com/ibm/icu/text/DictionaryMatcher.class +INFO: Loading Class: com/ibm/icu/text/DigitList.class +INFO: Loading Class: com/ibm/icu/text/DisplayContext$Type.class +INFO: Loading Class: com/ibm/icu/text/DisplayContext.class +INFO: Loading Class: com/ibm/icu/text/DurationFormat.class +INFO: Loading Class: com/ibm/icu/text/FilteredNormalizer2.class +INFO: Loading Class: com/ibm/icu/text/FractionalPartSubstitution.class +INFO: Loading Class: com/ibm/icu/text/IdentifierInfo$1.class +INFO: Loading Class: com/ibm/icu/text/IdentifierInfo.class +INFO: Loading Class: com/ibm/icu/text/IDNA$Error.class +INFO: Loading Class: com/ibm/icu/text/IDNA$Info.class +INFO: Loading Class: com/ibm/icu/text/IDNA.class +INFO: Loading Class: com/ibm/icu/text/IntegralPartSubstitution.class +INFO: Loading Class: com/ibm/icu/text/LanguageBreakEngine.class +INFO: Loading Class: com/ibm/icu/text/ListFormatter$1.class +INFO: Loading Class: com/ibm/icu/text/ListFormatter$Cache.class +INFO: Loading Class: com/ibm/icu/text/ListFormatter.class +INFO: Loading Class: com/ibm/icu/text/ListFormatterData.class +INFO: Loading Class: com/ibm/icu/text/LocaleDisplayNames$DialectHandling.class +INFO: Loading Class: com/ibm/icu/text/LocaleDisplayNames.class +INFO: Loading Class: com/ibm/icu/text/MeasureFormat.class +INFO: Loading Class: com/ibm/icu/text/MessageFormat$AppendableWrapper.class +INFO: Loading Class: com/ibm/icu/text/MessageFormat$AttributeAndPosition.class +INFO: Loading Class: com/ibm/icu/text/MessageFormat$Field.class +INFO: Loading Class: com/ibm/icu/text/MessageFormat$PluralSelectorProvider.class +INFO: Loading Class: com/ibm/icu/text/MessageFormat.class +INFO: Loading Class: com/ibm/icu/text/MessagePattern$1.class +INFO: Loading Class: com/ibm/icu/text/MessagePattern$ApostropheMode.class +INFO: Loading Class: com/ibm/icu/text/MessagePattern$ArgType.class +INFO: Loading Class: com/ibm/icu/text/MessagePattern$Part$Type.class +INFO: Loading Class: com/ibm/icu/text/MessagePattern$Part.class +INFO: Loading Class: com/ibm/icu/text/MessagePattern.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$1.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$ArgNode.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$ComplexArgStyleNode.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$MessageContentsNode$Type.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$MessageContentsNode.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$MessageNode.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$Node.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$TextNode.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil$VariantNode.class +INFO: Loading Class: com/ibm/icu/text/MessagePatternUtil.class +INFO: Loading Class: com/ibm/icu/text/ModulusSubstitution.class +INFO: Loading Class: com/ibm/icu/text/MultiplierSubstitution.class +INFO: Loading Class: com/ibm/icu/text/NFRule.class +INFO: Loading Class: com/ibm/icu/text/NFRuleSet.class +INFO: Loading Class: com/ibm/icu/text/NFSubstitution.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$1.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$CharsAppendable.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$CmpEquivLevel.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$FCD32ModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$FCDMode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$FCDModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$Mode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$ModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFC32ModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFCMode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFCModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFD32ModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFDMode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFDModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFKC32ModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFKCMode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFKCModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFKD32ModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFKDMode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NFKDModeImpl.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$NONEMode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$QuickCheckResult.class +INFO: Loading Class: com/ibm/icu/text/Normalizer$Unicode32.class +INFO: Loading Class: com/ibm/icu/text/Normalizer.class +INFO: Loading Class: com/ibm/icu/text/Normalizer2$1.class +INFO: Loading Class: com/ibm/icu/text/Normalizer2$Mode.class +INFO: Loading Class: com/ibm/icu/text/Normalizer2.class +INFO: Loading Class: com/ibm/icu/text/NullSubstitution.class +INFO: Loading Class: com/ibm/icu/text/NumberFormat$Field.class +INFO: Loading Class: com/ibm/icu/text/NumberFormat$NumberFormatFactory.class +INFO: Loading Class: com/ibm/icu/text/NumberFormat$NumberFormatShim.class +INFO: Loading Class: com/ibm/icu/text/NumberFormat$SimpleNumberFormatFactory.class +INFO: Loading Class: com/ibm/icu/text/NumberFormat.class +INFO: Loading Class: com/ibm/icu/text/NumberFormatServiceShim$NFFactory.class +INFO: Loading Class: com/ibm/icu/text/NumberFormatServiceShim$NFService$1RBNumberFormatFactory.class +INFO: Loading Class: com/ibm/icu/text/NumberFormatServiceShim$NFService.class +INFO: Loading Class: com/ibm/icu/text/NumberFormatServiceShim.class +INFO: Loading Class: com/ibm/icu/text/NumberingSystem.class +INFO: Loading Class: com/ibm/icu/text/NumeratorSubstitution.class +INFO: Loading Class: com/ibm/icu/text/PluralFormat$1.class +INFO: Loading Class: com/ibm/icu/text/PluralFormat$PluralSelector.class +INFO: Loading Class: com/ibm/icu/text/PluralFormat$PluralSelectorAdapter.class +INFO: Loading Class: com/ibm/icu/text/PluralFormat.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$1.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$2.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$AndConstraint.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$BinaryConstraint.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$ConstrainedRule.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$Constraint.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$KeywordStatus.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$OrConstraint.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$PluralType.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$RangeConstraint$1ListBuilder.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$RangeConstraint.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$Rule.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$RuleChain.class +INFO: Loading Class: com/ibm/icu/text/PluralRules$RuleList.class +INFO: Loading Class: com/ibm/icu/text/PluralRules.class +INFO: Loading Class: com/ibm/icu/text/Quantifier.class +INFO: Loading Class: com/ibm/icu/text/RBBIDataWrapper$RBBIDataHeader.class +INFO: Loading Class: com/ibm/icu/text/RBBIDataWrapper$TrieFoldingFunc.class +INFO: Loading Class: com/ibm/icu/text/RBBIDataWrapper.class +INFO: Loading Class: com/ibm/icu/text/RBBINode.class +INFO: Loading Class: com/ibm/icu/text/RBBIRuleBuilder.class +INFO: Loading Class: com/ibm/icu/text/RBBIRuleParseTable$RBBIRuleTableElement.class +INFO: Loading Class: com/ibm/icu/text/RBBIRuleParseTable.class +INFO: Loading Class: com/ibm/icu/text/RBBIRuleScanner$RBBIRuleChar.class +INFO: Loading Class: com/ibm/icu/text/RBBIRuleScanner$RBBISetTableEl.class +INFO: Loading Class: com/ibm/icu/text/RBBIRuleScanner.class +INFO: Loading Class: com/ibm/icu/text/RBBISetBuilder$RangeDescriptor.class +INFO: Loading Class: com/ibm/icu/text/RBBISetBuilder$RBBIDataManipulate.class +INFO: Loading Class: com/ibm/icu/text/RBBISetBuilder.class +INFO: Loading Class: com/ibm/icu/text/RBBISymbolTable$RBBISymbolTableEntry.class +INFO: Loading Class: com/ibm/icu/text/RBBISymbolTable.class +INFO: Loading Class: com/ibm/icu/text/RBBITableBuilder$RBBIStateDescriptor.class +INFO: Loading Class: com/ibm/icu/text/RBBITableBuilder.class +INFO: Loading Class: com/ibm/icu/text/RBNFChinesePostProcessor.class +INFO: Loading Class: com/ibm/icu/text/RbnfLenientScanner.class +INFO: Loading Class: com/ibm/icu/text/RbnfLenientScannerProvider.class +INFO: Loading Class: com/ibm/icu/text/RBNFPostProcessor.class +INFO: Loading Class: com/ibm/icu/text/Replaceable.class +INFO: Loading Class: com/ibm/icu/text/ReplaceableContextIterator.class +INFO: Loading Class: com/ibm/icu/text/ReplaceableString.class +INFO: Loading Class: com/ibm/icu/text/RuleBasedBreakIterator.class +INFO: Loading Class: com/ibm/icu/text/RuleBasedNumberFormat.class +INFO: Loading Class: com/ibm/icu/text/SameValueSubstitution.class +INFO: Loading Class: com/ibm/icu/text/SCSU.class +INFO: Loading Class: com/ibm/icu/text/SearchIterator.class +INFO: Loading Class: com/ibm/icu/text/SelectFormat.class +INFO: Loading Class: com/ibm/icu/text/SimpleDateFormat$1.class +INFO: Loading Class: com/ibm/icu/text/SimpleDateFormat$ContextValue.class +INFO: Loading Class: com/ibm/icu/text/SimpleDateFormat$PatternItem.class +INFO: Loading Class: com/ibm/icu/text/SimpleDateFormat.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$1.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder$ConfusabledataBuilder$SPUString.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder$ConfusabledataBuilder$SPUStringComparator.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder$ConfusabledataBuilder$SPUStringPool.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder$ConfusabledataBuilder.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder$WSConfusableDataBuilder$BuilderScriptSet.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder$WSConfusableDataBuilder.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$Builder.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$CheckResult.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$RestrictionLevel.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$ScriptSet.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$SpoofData$SpoofStringLengthsElement.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$SpoofData.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker$SpoofDataHeader.class +INFO: Loading Class: com/ibm/icu/text/SpoofChecker.class +INFO: Loading Class: com/ibm/icu/text/StringCharacterIterator.class +INFO: Loading Class: com/ibm/icu/text/StringPrep$1.class +INFO: Loading Class: com/ibm/icu/text/StringPrep$Values.class +INFO: Loading Class: com/ibm/icu/text/StringPrep.class +INFO: Loading Class: com/ibm/icu/text/StringPrepParseException.class +INFO: Loading Class: com/ibm/icu/text/StringTransform.class +INFO: Loading Class: com/ibm/icu/text/SymbolTable.class +INFO: Loading Class: com/ibm/icu/text/ThaiBreakEngine$PossibleWord.class +INFO: Loading Class: com/ibm/icu/text/ThaiBreakEngine.class +INFO: Loading Class: com/ibm/icu/text/TimeUnitFormat.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$1.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$GMTOffsetField.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$GMTOffsetPatternType.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$OffsetFields.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$ParseOption.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$Style.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$TimeType.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat$TimeZoneFormatCache.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneFormat.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$1.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$Cache.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$DefaultTimeZoneNames$FactoryImpl.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$DefaultTimeZoneNames.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$Factory.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$MatchInfo.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames$NameType.class +INFO: Loading Class: com/ibm/icu/text/TimeZoneNames.class +INFO: Loading Class: com/ibm/icu/text/Transform.class +INFO: Loading Class: com/ibm/icu/text/UCharacterIterator.class +INFO: Loading Class: com/ibm/icu/text/UFormat.class +INFO: Loading Class: com/ibm/icu/text/UForwardCharacterIterator.class +INFO: Loading Class: com/ibm/icu/text/UnhandledBreakEngine.class +INFO: Loading Class: com/ibm/icu/text/UnicodeCompressor.class +INFO: Loading Class: com/ibm/icu/text/UnicodeDecompressor.class +INFO: Loading Class: com/ibm/icu/text/UnicodeFilter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeMatcher.class +INFO: Loading Class: com/ibm/icu/text/UnicodeReplacer.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$ComparisonStyle.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$Filter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$GeneralCategoryMaskFilter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$IntPropertyFilter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$NumericValueFilter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$ScriptExtensionsFilter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$SpanCondition.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$UnicodeSetIterator2.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$VersionFilter.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet$XSymbolTable.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSet.class +INFO: Loading Class: com/ibm/icu/text/UnicodeSetIterator.class +INFO: Loading Class: com/ibm/icu/text/UTF16$StringComparator.class +INFO: Loading Class: com/ibm/icu/text/UTF16.class +INFO: Loading Class: com/ibm/icu/util/AnnualTimeZoneRule.class +INFO: Loading Class: com/ibm/icu/util/BasicTimeZone.class +INFO: Loading Class: com/ibm/icu/util/BuddhistCalendar.class +INFO: Loading Class: com/ibm/icu/util/ByteArrayWrapper.class +INFO: Loading Class: com/ibm/icu/util/BytesTrie$1.class +INFO: Loading Class: com/ibm/icu/util/BytesTrie$Entry.class +INFO: Loading Class: com/ibm/icu/util/BytesTrie$Iterator.class +INFO: Loading Class: com/ibm/icu/util/BytesTrie$Result.class +INFO: Loading Class: com/ibm/icu/util/BytesTrie$State.class +INFO: Loading Class: com/ibm/icu/util/BytesTrie.class +INFO: Loading Class: com/ibm/icu/util/BytesTrieBuilder$BytesAsCharSequence.class +INFO: Loading Class: com/ibm/icu/util/BytesTrieBuilder.class +INFO: Loading Class: com/ibm/icu/util/Calendar$1.class +INFO: Loading Class: com/ibm/icu/util/Calendar$CalendarFactory.class +INFO: Loading Class: com/ibm/icu/util/Calendar$CalendarShim.class +INFO: Loading Class: com/ibm/icu/util/Calendar$FormatConfiguration.class +INFO: Loading Class: com/ibm/icu/util/Calendar$PatternData.class +INFO: Loading Class: com/ibm/icu/util/Calendar$WeekData.class +INFO: Loading Class: com/ibm/icu/util/Calendar.class +INFO: Loading Class: com/ibm/icu/util/CalendarServiceShim$CalFactory.class +INFO: Loading Class: com/ibm/icu/util/CalendarServiceShim$CalService$1RBCalendarFactory.class +INFO: Loading Class: com/ibm/icu/util/CalendarServiceShim$CalService.class +INFO: Loading Class: com/ibm/icu/util/CalendarServiceShim.class +INFO: Loading Class: com/ibm/icu/util/CaseInsensitiveString.class +INFO: Loading Class: com/ibm/icu/util/CECalendar.class +INFO: Loading Class: com/ibm/icu/util/CharsTrie$1.class +INFO: Loading Class: com/ibm/icu/util/CharsTrie$Entry.class +INFO: Loading Class: com/ibm/icu/util/CharsTrie$Iterator.class +INFO: Loading Class: com/ibm/icu/util/CharsTrie$State.class +INFO: Loading Class: com/ibm/icu/util/CharsTrie.class +INFO: Loading Class: com/ibm/icu/util/CharsTrieBuilder.class +INFO: Loading Class: com/ibm/icu/util/ChineseCalendar.class +INFO: Loading Class: com/ibm/icu/util/CompactByteArray.class +INFO: Loading Class: com/ibm/icu/util/CompactCharArray.class +INFO: Loading Class: com/ibm/icu/util/CopticCalendar.class +INFO: Loading Class: com/ibm/icu/util/Currency$1.class +INFO: Loading Class: com/ibm/icu/util/Currency$CurrencyNameResultHandler.class +INFO: Loading Class: com/ibm/icu/util/Currency$CurrencyStringInfo.class +INFO: Loading Class: com/ibm/icu/util/Currency$ServiceShim.class +INFO: Loading Class: com/ibm/icu/util/Currency.class +INFO: Loading Class: com/ibm/icu/util/CurrencyAmount.class +INFO: Loading Class: com/ibm/icu/util/CurrencyServiceShim$CFService$1CurrencyFactory.class +INFO: Loading Class: com/ibm/icu/util/CurrencyServiceShim$CFService.class +INFO: Loading Class: com/ibm/icu/util/CurrencyServiceShim.class +INFO: Loading Class: com/ibm/icu/util/DangiCalendar.class +INFO: Loading Class: com/ibm/icu/util/DateInterval.class +INFO: Loading Class: com/ibm/icu/util/DateRule.class +INFO: Loading Class: com/ibm/icu/util/DateTimeRule.class +INFO: Loading Class: com/ibm/icu/util/EasterHoliday.class +INFO: Loading Class: com/ibm/icu/util/EasterRule.class +INFO: Loading Class: com/ibm/icu/util/EthiopicCalendar.class +INFO: Loading Class: com/ibm/icu/util/Freezable.class +INFO: Loading Class: com/ibm/icu/util/GenderInfo$1.class +INFO: Loading Class: com/ibm/icu/util/GenderInfo$Cache.class +INFO: Loading Class: com/ibm/icu/util/GenderInfo$Gender.class +INFO: Loading Class: com/ibm/icu/util/GenderInfo$ListGenderStyle.class +INFO: Loading Class: com/ibm/icu/util/GenderInfo.class +INFO: Loading Class: com/ibm/icu/util/GregorianCalendar.class +INFO: Loading Class: com/ibm/icu/util/HebrewCalendar.class +INFO: Loading Class: com/ibm/icu/util/HebrewHoliday.class +INFO: Loading Class: com/ibm/icu/util/Holiday.class +INFO: Loading Class: com/ibm/icu/util/IllformedLocaleException.class +INFO: Loading Class: com/ibm/icu/util/IndianCalendar.class +INFO: Loading Class: com/ibm/icu/util/InitialTimeZoneRule.class +INFO: Loading Class: com/ibm/icu/util/IslamicCalendar.class +INFO: Loading Class: com/ibm/icu/util/JapaneseCalendar.class +INFO: Loading Class: com/ibm/icu/util/LocaleData$1.class +INFO: Loading Class: com/ibm/icu/util/LocaleData$MeasurementSystem.class +INFO: Loading Class: com/ibm/icu/util/LocaleData$PaperSize.class +INFO: Loading Class: com/ibm/icu/util/LocaleData.class +INFO: Loading Class: com/ibm/icu/util/LocaleMatcher$1.class +INFO: Loading Class: com/ibm/icu/util/LocaleMatcher$LanguageMatcherData.class +INFO: Loading Class: com/ibm/icu/util/LocaleMatcher$Level.class +INFO: Loading Class: com/ibm/icu/util/LocaleMatcher$LocalePatternMatcher.class +INFO: Loading Class: com/ibm/icu/util/LocaleMatcher$ScoreData.class +INFO: Loading Class: com/ibm/icu/util/LocaleMatcher.class +INFO: Loading Class: com/ibm/icu/util/LocalePriorityList$1.class +INFO: Loading Class: com/ibm/icu/util/LocalePriorityList$Builder.class +INFO: Loading Class: com/ibm/icu/util/LocalePriorityList.class +INFO: Loading Class: com/ibm/icu/util/Measure.class +INFO: Loading Class: com/ibm/icu/util/MeasureUnit.class +INFO: Loading Class: com/ibm/icu/util/Output.class +INFO: Loading Class: com/ibm/icu/util/OverlayBundle.class +INFO: Loading Class: com/ibm/icu/util/PersianCalendar.class +INFO: Loading Class: com/ibm/icu/util/Range.class +INFO: Loading Class: com/ibm/icu/util/RangeDateRule.class +INFO: Loading Class: com/ibm/icu/util/RangeValueIterator$Element.class +INFO: Loading Class: com/ibm/icu/util/RangeValueIterator.class +INFO: Loading Class: com/ibm/icu/util/Region$RegionType.class +INFO: Loading Class: com/ibm/icu/util/Region.class +INFO: Loading Class: com/ibm/icu/util/RuleBasedTimeZone.class +INFO: Loading Class: com/ibm/icu/util/SimpleDateRule.class +INFO: Loading Class: com/ibm/icu/util/SimpleHoliday.class +INFO: Loading Class: com/ibm/icu/util/SimpleTimeZone.class +INFO: Loading Class: com/ibm/icu/util/StringTokenizer.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$1.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$BranchHeadNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$BranchNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$DynamicBranchNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$IntermediateValueNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$LinearMatchNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$ListBranchNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$Node.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$Option.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$SplitBranchNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$State.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder$ValueNode.class +INFO: Loading Class: com/ibm/icu/util/StringTrieBuilder.class +INFO: Loading Class: com/ibm/icu/util/STZInfo.class +INFO: Loading Class: com/ibm/icu/util/TaiwanCalendar.class +INFO: Loading Class: com/ibm/icu/util/TimeArrayTimeZoneRule.class +INFO: Loading Class: com/ibm/icu/util/TimeUnit.class +INFO: Loading Class: com/ibm/icu/util/TimeUnitAmount.class +INFO: Loading Class: com/ibm/icu/util/TimeZone$SystemTimeZoneType.class +INFO: Loading Class: com/ibm/icu/util/TimeZone.class +INFO: Loading Class: com/ibm/icu/util/TimeZoneRule.class +INFO: Loading Class: com/ibm/icu/util/TimeZoneTransition.class +INFO: Loading Class: com/ibm/icu/util/ULocale$1.class +INFO: Loading Class: com/ibm/icu/util/ULocale$1ULocaleAcceptLanguageQ.class +INFO: Loading Class: com/ibm/icu/util/ULocale$Builder.class +INFO: Loading Class: com/ibm/icu/util/ULocale$Category.class +INFO: Loading Class: com/ibm/icu/util/ULocale$JDKLocaleHelper$1.class +INFO: Loading Class: com/ibm/icu/util/ULocale$JDKLocaleHelper.class +INFO: Loading Class: com/ibm/icu/util/ULocale$Type.class +INFO: Loading Class: com/ibm/icu/util/ULocale.class +INFO: Loading Class: com/ibm/icu/util/UniversalTimeScale$TimeScaleData.class +INFO: Loading Class: com/ibm/icu/util/UniversalTimeScale.class +INFO: Loading Class: com/ibm/icu/util/UResourceBundle$1.class +INFO: Loading Class: com/ibm/icu/util/UResourceBundle$ResourceCacheKey.class +INFO: Loading Class: com/ibm/icu/util/UResourceBundle.class +INFO: Loading Class: com/ibm/icu/util/UResourceBundleIterator.class +INFO: Loading Class: com/ibm/icu/util/UResourceTypeMismatchException.class +INFO: Loading Class: com/ibm/icu/util/ValueIterator$Element.class +INFO: Loading Class: com/ibm/icu/util/ValueIterator.class +INFO: Loading Class: com/ibm/icu/util/VersionInfo.class +INFO: Loading Class: com/ibm/icu/util/VTimeZone.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.sf.jopt-simple/jopt-simple/5.0.3/cdd846cfc4e0f7eefafc02c0f5dce32b9303aa2a/jopt-simple-5.0.3.jar +INFO: Loading Class: joptsimple/AbstractOptionSpec.class +INFO: Loading Class: joptsimple/AlternativeLongOptionSpec.class +INFO: Loading Class: joptsimple/ArgumentAcceptingOptionSpec.class +INFO: Loading Class: joptsimple/ArgumentList.class +INFO: Loading Class: joptsimple/BuiltinHelpFormatter$1.class +INFO: Loading Class: joptsimple/BuiltinHelpFormatter.class +INFO: Loading Class: joptsimple/HelpFormatter.class +INFO: Loading Class: joptsimple/IllegalOptionSpecificationException.class +INFO: Loading Class: joptsimple/MissingRequiredOptionsException.class +INFO: Loading Class: joptsimple/MultipleArgumentsForOptionException.class +INFO: Loading Class: joptsimple/NoArgumentOptionSpec.class +INFO: Loading Class: joptsimple/NonOptionArgumentSpec.class +INFO: Loading Class: joptsimple/OptionArgumentConversionException.class +INFO: Loading Class: joptsimple/OptionDeclarer.class +INFO: Loading Class: joptsimple/OptionDescriptor.class +INFO: Loading Class: joptsimple/OptionException.class +INFO: Loading Class: joptsimple/OptionMissingRequiredArgumentException.class +INFO: Loading Class: joptsimple/OptionParser.class +INFO: Loading Class: joptsimple/OptionParserState$1.class +INFO: Loading Class: joptsimple/OptionParserState$2.class +INFO: Loading Class: joptsimple/OptionParserState.class +INFO: Loading Class: joptsimple/OptionSet.class +INFO: Loading Class: joptsimple/OptionSpec.class +INFO: Loading Class: joptsimple/OptionSpecBuilder.class +INFO: Loading Class: joptsimple/OptionSpecTokenizer.class +INFO: Loading Class: joptsimple/OptionalArgumentOptionSpec.class +INFO: Loading Class: joptsimple/ParserRules.class +INFO: Loading Class: joptsimple/RequiredArgumentOptionSpec.class +INFO: Loading Class: joptsimple/UnavailableOptionException.class +INFO: Loading Class: joptsimple/UnconfiguredOptionException.class +INFO: Loading Class: joptsimple/UnrecognizedOptionException.class +INFO: Loading Class: joptsimple/ValueConversionException.class +INFO: Loading Class: joptsimple/ValueConverter.class +INFO: Loading Class: joptsimple/internal/AbbreviationMap.class +INFO: Loading Class: joptsimple/internal/Classes.class +INFO: Loading Class: joptsimple/internal/Columns.class +INFO: Loading Class: joptsimple/internal/ConstructorInvokingValueConverter.class +INFO: Loading Class: joptsimple/internal/Messages.class +INFO: Loading Class: joptsimple/internal/MethodInvokingValueConverter.class +INFO: Loading Class: joptsimple/internal/OptionNameMap.class +INFO: Loading Class: joptsimple/internal/Reflection.class +INFO: Loading Class: joptsimple/internal/ReflectionException.class +INFO: Loading Class: joptsimple/internal/Row.class +INFO: Loading Class: joptsimple/internal/Rows.class +INFO: Loading Class: joptsimple/internal/SimpleOptionNameMap.class +INFO: Loading Class: joptsimple/internal/Strings.class +INFO: Loading Class: joptsimple/util/DateConverter.class +INFO: Loading Class: joptsimple/util/EnumConverter.class +INFO: Loading Class: joptsimple/util/InetAddressConverter.class +INFO: Loading Class: joptsimple/util/KeyValuePair.class +INFO: Loading Class: joptsimple/util/PathConverter.class +INFO: Loading Class: joptsimple/util/PathProperties$1.class +INFO: Loading Class: joptsimple/util/PathProperties$2.class +INFO: Loading Class: joptsimple/util/PathProperties$3.class +INFO: Loading Class: joptsimple/util/PathProperties$4.class +INFO: Loading Class: joptsimple/util/PathProperties$5.class +INFO: Loading Class: joptsimple/util/PathProperties$6.class +INFO: Loading Class: joptsimple/util/PathProperties.class +INFO: Loading Class: joptsimple/util/RegexMatcher.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/io.netty/netty-all/4.1.9.Final/97860965d6a0a6b98e7f569f3f966727b8db75/netty-all-4.1.9.Final.jar +INFO: Loading Class: io/netty/internal/tcnative/SSL.class +INFO: Loading Class: io/netty/internal/tcnative/SessionTicketKey.class +INFO: Loading Class: io/netty/internal/tcnative/Buffer.class +INFO: Loading Class: io/netty/internal/tcnative/CertificateRequestedCallback$KeyMaterial.class +INFO: Loading Class: io/netty/resolver/RoundRobinInetAddressResolver$2.class +INFO: Loading Class: io/netty/resolver/CompositeNameResolver$2.class +INFO: Loading Class: io/netty/resolver/AddressResolver.class +INFO: Loading Class: io/netty/resolver/HostsFileEntries.class +INFO: Loading Class: io/netty/resolver/InetSocketAddressResolver$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsServerAddressStream.class +INFO: Loading Class: io/netty/resolver/dns/InflightNameResolver$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$DnsCacheIterable$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsQueryContext.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$4.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$AuthoritativeNameServerList.class +INFO: Loading Class: io/netty/resolver/dns/DnsAddressResolverGroup.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$4.class +INFO: Loading Class: io/netty/resolver/dns/SequentialDnsServerAddressStream.class +INFO: Loading Class: io/netty/resolver/dns/ShuffledDnsServerAddressStream.class +INFO: Loading Class: io/netty/resolver/dns/DnsQueryContext$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsQueryContext$3.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$DnsCacheIterable.class +INFO: Loading Class: io/netty/resolver/dns/RoundRobinDnsAddressResolverGroup.class +INFO: Loading Class: io/netty/resolver/dns/NoopDnsCache.class +INFO: Loading Class: io/netty/resolver/dns/DnsCache.class +INFO: Loading Class: io/netty/resolver/dns/DnsQueryContext$2.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$ListResolverContext.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverException.class +INFO: Loading Class: io/netty/resolver/dns/DefaultDnsCache.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$DnsResponseHandler.class +INFO: Loading Class: io/netty/resolver/ResolvedAddressTypes.class +INFO: Loading Class: io/netty/resolver/CompositeNameResolver$1.class +INFO: Loading Class: io/netty/resolver/AbstractAddressResolver.class +INFO: Loading Class: io/netty/resolver/HostsFileEntriesResolver.class +INFO: Loading Class: io/netty/resolver/RoundRobinInetAddressResolver$1.class +INFO: Loading Class: io/netty/resolver/NoopAddressResolver.class +INFO: Loading Class: io/netty/resolver/NoopAddressResolverGroup.class +INFO: Loading Class: io/netty/resolver/CompositeNameResolver.class +INFO: Loading Class: io/netty/resolver/AddressResolverGroup.class +INFO: Loading Class: io/netty/resolver/NameResolver.class +INFO: Loading Class: io/netty/resolver/InetNameResolver.class +INFO: Loading Class: io/netty/resolver/RoundRobinInetAddressResolver.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrap.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap$3.class +INFO: Loading Class: io/netty/bootstrap/AbstractBootstrapConfig.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrap$ServerBootstrapAcceptor$2.class +INFO: Loading Class: io/netty/bootstrap/ChannelFactory.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrap$1.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrapConfig.class +INFO: Loading Class: io/netty/bootstrap/AbstractBootstrap$1.class +INFO: Loading Class: io/netty/buffer/PooledDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolArena$SizeClass.class +INFO: Loading Class: io/netty/buffer/UnpooledSlicedByteBuf.class +INFO: Loading Class: io/netty/buffer/AbstractByteBufAllocator.class +INFO: Loading Class: io/netty/buffer/UnpooledHeapByteBuf.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$1.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$1.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$UnpooledByteBufAllocatorMetric.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$NormalMemoryRegionCache.class +INFO: Loading Class: io/netty/buffer/ByteBufOutputStream.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$8.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$2.class +INFO: Loading Class: io/netty/buffer/ReadOnlyByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$ThreadLocalDirectByteBuf$1.class +INFO: Loading Class: io/netty/buffer/DuplicatedByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledByteBufAllocator.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$ThreadLocalUnsafeDirectByteBuf$1.class +INFO: Loading Class: io/netty/buffer/PooledUnsafeDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$6.class +INFO: Loading Class: io/netty/buffer/ByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor.class +INFO: Loading Class: io/netty/buffer/UnpooledDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/CompositeByteBuf$1.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufAllocatorMetricProvider.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$1.class +INFO: Loading Class: io/netty/buffer/AbstractUnsafeSwappedByteBuf.class +INFO: Loading Class: io/netty/buffer/CompositeByteBuf$CompositeByteBufIterator.class +INFO: Loading Class: io/netty/buffer/PoolArena$HeapArena.class +INFO: Loading Class: io/netty/buffer/AbstractUnpooledSlicedByteBuf.class +INFO: Loading Class: io/netty/buffer/CompositeByteBuf$Component.class +INFO: Loading Class: io/netty/buffer/UnsafeDirectSwappedByteBuf.class +INFO: Loading Class: io/netty/buffer/UnpooledDuplicatedByteBuf.class +INFO: Loading Class: io/netty/buffer/UnreleasableByteBuf.class +INFO: Loading Class: io/netty/handler/proxy/ProxyHandler.class +INFO: Loading Class: io/netty/handler/proxy/Socks4ProxyHandler.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlProcessingInstruction.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlDecoder.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlSpace.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlDocumentStart.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlEntityReference.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlAttribute.class +INFO: Loading Class: io/netty/handler/codec/LineBasedFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspResponseEncoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspResponseStatuses.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspHeaders.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspHeaderNames.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspDecoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspObjectEncoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspObjectDecoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/AsciiHeadersEncoder$NewlineType.class +INFO: Loading Class: io/netty/handler/codec/marshalling/DefaultMarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/marshalling/DefaultUnmarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/marshalling/ContextBoundUnmarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/marshalling/UnmarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/marshalling/ThreadLocalUnmarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/marshalling/LimitingByteInput.class +INFO: Loading Class: io/netty/handler/codec/marshalling/MarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/MessageToMessageCodec$1.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeaders$HeaderIterator.class +INFO: Loading Class: io/netty/handler/codec/MessageAggregator.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageDecoder$2.class +INFO: Loading Class: io/netty/handler/codec/PrematureChannelClosureException.class +INFO: Loading Class: io/netty/handler/codec/MessageToMessageCodec.class +INFO: Loading Class: io/netty/handler/codec/memcache/DefaultLastMemcacheContent.class +INFO: Loading Class: io/netty/handler/codec/memcache/AbstractMemcacheObjectDecoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/LastMemcacheContent$1.class +INFO: Loading Class: io/netty/handler/codec/memcache/LastMemcacheContent.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/FullBinaryMemcacheRequest.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheRequest.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheDecoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheRequestEncoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheOpcodes.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/DefaultFullBinaryMemcacheRequest.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheMessage.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheClientCodec.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheResponse.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheServerCodec.class +INFO: Loading Class: io/netty/handler/codec/memcache/AbstractMemcacheObject.class +INFO: Loading Class: io/netty/handler/codec/memcache/FullMemcacheMessage.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeaders$NameValidator.class +INFO: Loading Class: io/netty/handler/codec/MessageToMessageEncoder.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FlowController.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameReader$HeadersContinuation.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamChannel$Unsafe.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanEncoder$EncodedLengthProcessor.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameWriter.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamChannel$2.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$ConnectionStream.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamByteDistributor.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameCodec$ConnectionListener.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameReader$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$ListenerWritabilityMonitor.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2DataFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/CharSequenceMap.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$WritabilityMonitor.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameCodec$1.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor$State.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Exception$CompositeStreamException.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameReader$3.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2RemoteFlowController.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2RemoteFlowController$FlowControlled.class +INFO: Loading Class: io/netty/handler/codec/http2/HttpConversionUtil$ExtensionHeaderNames.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Connection.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$PrefaceDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamStateEvent.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameListener.class +INFO: Loading Class: io/netty/handler/codec/http2/DelegatingDecompressorFrameListener$ConsumedBytesConverter.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Headers.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$5.class +INFO: Loading Class: io/netty/handler/codec/http2/DelegatingDecompressorFrameListener$Http2Decompressor.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanDecoder$Node.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2WindowUpdateFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2LocalFlowController.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$4.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2InboundFrameLogger.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$Http2GoAwayException.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2DataWriter.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersEncoder$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandlerBuilder.class +INFO: Loading Class: io/netty/handler/codec/http2/DecoratingHttp2ConnectionEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$2.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2HeadersFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController$FlowState.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController$AutoRefillState.class +INFO: Loading Class: io/netty/handler/codec/http2/ReadOnlyHttp2Headers$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackEncoder$HeaderEntry.class +INFO: Loading Class: io/netty/handler/codec/http2/DelegatingDecompressorFrameListener.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamByteDistributor$StreamState.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Headers$Http2HeaderEntry.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ClientUpgradeCodec.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2MultiplexCodec$ChannelCarryingHeadersFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamChannel.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompSubframeDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/DateFormatter$1.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils$StringEntry.class +INFO: Loading Class: io/netty/handler/codec/serialization/ObjectDecoderInputStream.class +INFO: Loading Class: io/netty/handler/codec/serialization/CompactObjectOutputStream.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsQuestion.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsResponseCode.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsRecordType.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsRawRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsPtrRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsMessageUtil.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsSection.class +INFO: Loading Class: io/netty/handler/codec/dns/DatagramDnsQueryDecoder.class +INFO: Loading Class: io/netty/handler/codec/dns/AbstractDnsMessage.class +INFO: Loading Class: io/netty/handler/codec/DecoderResultProvider.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageCodec$Encoder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageIdVariableHeader.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttCodecUtil.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttSubscribePayload.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageBuilders$ConnAckBuilder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttUnsubscribePayload.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttConnectMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttConnectVariableHeader.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttCodecUtil$1.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttIdentifierRejectedException.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttQoS.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageFactory$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientUpgradeHandler$UpgradeEvent.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectAggregator$AggregatedFullHttpResponse.class +INFO: Loading Class: io/netty/handler/codec/http/LastHttpContent.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/CookieUtil.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientUpgradeHandler$SourceCodec.class +INFO: Loading Class: io/netty/handler/codec/http/HttpMessageUtil.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectAggregator$1.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultFullHttpResponse.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultLastHttpContent$TrailingHttpHeaders.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/MemoryAttribute.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostBodyUtil$SeekAheadNoBackArrayException.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/DiskAttribute.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/InterfaceHttpData$HttpDataType.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/AbstractHttpData.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/FileUpload.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestEncoder$EncoderMode.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/DefaultHttpDataFactory.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/InterfaceHttpPostRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostStandardRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestDecoder$NotEnoughDataDecoderException.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/AbstractMemoryHttpData.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/FileUploadUtil.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectAggregator.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpHeaders$2.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/http/HttpStatusClass.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaderDateFormat$HttpHeaderDateFormatObsolete2.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerUpgradeHandler$UpgradeCodecFactory.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpContent.class +INFO: Loading Class: io/netty/handler/codec/http/HttpScheme.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaders$Values.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/CookieDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/CookieUtil.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/ServerCookieDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/ClientCookieDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaders.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfig$DateValueGenerator.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfigBuilder$ConstantValueGenerator.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfigBuilder$DateValueGenerator.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfig$Builder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerCodec$1.class +INFO: Loading Class: io/netty/handler/codec/http/QueryStringEncoder$Param.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectAggregator$2.class +INFO: Loading Class: io/netty/handler/codec/http/ComposedLastHttpContent.class +INFO: Loading Class: io/netty/handler/codec/http/HttpResponse.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientCodec.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketFrameAggregator.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketHandshakeException.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/PongWebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker08.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshakerFactory.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker13.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker$2.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/BinaryWebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker13.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketProtocolHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker$2.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandler$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionUtil.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateServerExtensionHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/DeflateFrameClientExtensionHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/WebSocketServerCompressionHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateClientExtensionHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker$3.class +INFO: Loading Class: io/netty/handler/codec/http/HttpMessage.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientCodec$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectAggregator$AggregatedFullHttpMessage.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectAggregator$AggregatedFullHttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/HttpResponseEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/FullHttpResponse.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultFullHttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/ClientCookieEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentEncoder.class +INFO: Loading Class: io/netty/handler/codec/DecoderException.class +INFO: Loading Class: io/netty/handler/codec/protobuf/ProtobufDecoderNano.class +INFO: Loading Class: io/netty/handler/codec/protobuf/ProtobufDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdType.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthRequest.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdRequest.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitResponse.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitResponseDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthStatus.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdRequestDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksProtocolVersion.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksMessageEncoder.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils$StringIterator.class +INFO: Loading Class: io/netty/handler/codec/base64/Base64Encoder.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeaders$HeaderEntry.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageCodec$1.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionHandler$3.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameCodec$1.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyPingFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyHeaders$1.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdySettingsFrame$Setting.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockZlibEncoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockZlibDecoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionHandler$4.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyGoAwayFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyWindowUpdateFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockEncoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyRstStreamFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyHeaders.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdySynStreamFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionHandler$ClosingChannelFutureListener.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySynReplyFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockJZlibEncoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyDataFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHttpCodec.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySynStreamFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionHandler.class +INFO: Loading Class: io/netty/handler/codec/sctp/SctpOutboundByteStreamHandler.class +INFO: Loading Class: io/netty/handler/codec/sctp/SctpMessageToMessageDecoder.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils$CharSequenceDelegatingStringSet.class +INFO: Loading Class: io/netty/handler/codec/TooLongFrameException.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyCommand.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyConstants.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyMessageDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5AddressType.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5AddressDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandResponseDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialResponseDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandResponseDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5Message.class +INFO: Loading Class: io/netty/handler/codec/socksx/SocksPortUnificationServerHandler$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4CommandResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ClientEncoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4CommandRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/DefaultSocks4CommandRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/DefaultSocks4CommandResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/SocksVersion.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils$1.class +INFO: Loading Class: io/netty/handler/codec/compression/FastLz.class +INFO: Loading Class: io/netty/handler/codec/compression/JZlibEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2DivSufSort$PartitionResult.class +INFO: Loading Class: io/netty/handler/codec/compression/ZlibEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameEncoder$3.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Encoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2BlockCompressor$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2BlockCompressor.class +INFO: Loading Class: io/netty/handler/codec/compression/CompressionUtil.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/LzfDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameEncoder$2.class +INFO: Loading Class: io/netty/handler/codec/compression/FastLzFrameDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/compression/LzmaFrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Decoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/JZlibEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Encoder$4.class +INFO: Loading Class: io/netty/handler/codec/compression/FastLzFrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/ZlibWrapper.class +INFO: Loading Class: io/netty/handler/codec/compression/SnappyFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/ProtocolDetectionState.class +INFO: Loading Class: io/netty/handler/codec/redis/FixedRedisMessagePool.class +INFO: Loading Class: io/netty/handler/codec/redis/DefaultBulkStringRedisContent.class +INFO: Loading Class: io/netty/handler/codec/redis/DefaultLastBulkStringRedisContent.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisDecoder.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisBulkStringAggregator.class +INFO: Loading Class: io/netty/handler/codec/redis/ArrayHeaderRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/BulkStringRedisContent.class +INFO: Loading Class: io/netty/handler/codec/redis/IntegerRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisCodecException.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisDecoder$ToPositiveLongProcessor.class +INFO: Loading Class: io/netty/handler/codec/redis/ArrayRedisMessage$2.class +INFO: Loading Class: io/netty/handler/codec/redis/LastBulkStringRedisContent$1.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisConstants.class +INFO: Loading Class: io/netty/handler/codec/string/LineEncoder.class +INFO: Loading Class: io/netty/handler/codec/string/StringDecoder.class +INFO: Loading Class: io/netty/handler/codec/MessageToMessageCodec$2.class +INFO: Loading Class: io/netty/handler/codec/AsciiHeadersEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/ValueConverter.class +INFO: Loading Class: io/netty/handler/codec/MessageAggregationException.class +INFO: Loading Class: io/netty/handler/codec/AsciiHeadersEncoder.class +INFO: Loading Class: io/netty/handler/codec/MessageAggregator$1.class +INFO: Loading Class: io/netty/handler/codec/DateFormatter.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpResponse.class +INFO: Loading Class: io/netty/handler/codec/smtp/LastSmtpContent.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpRequestEncoder.class +INFO: Loading Class: io/netty/handler/codec/UnsupportedMessageTypeException.class +INFO: Loading Class: io/netty/handler/ipfilter/IpSubnetFilterRule.class +INFO: Loading Class: io/netty/handler/ipfilter/IpSubnetFilterRule$1.class +INFO: Loading Class: io/netty/handler/ipfilter/UniqueIpFilter.class +INFO: Loading Class: io/netty/handler/ipfilter/IpSubnetFilterRule$Ip4SubnetFilterRule.class +INFO: Loading Class: io/netty/handler/ipfilter/IpFilterRule.class +INFO: Loading Class: io/netty/handler/stream/ChunkedWriteHandler$3.class +INFO: Loading Class: io/netty/handler/stream/ChunkedWriteHandler.class +INFO: Loading Class: io/netty/handler/stream/ChunkedFile.class +INFO: Loading Class: io/netty/handler/timeout/WriteTimeoutException.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateEvent.class +INFO: Loading Class: io/netty/handler/timeout/ReadTimeoutException.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler$2.class +INFO: Loading Class: io/netty/handler/timeout/WriteTimeoutHandler.class +INFO: Loading Class: io/netty/handler/flow/FlowControlHandler$RecyclableArrayDeque$1.class +INFO: Loading Class: io/netty/handler/flow/FlowControlHandler$RecyclableArrayDeque.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficShapingHandler$1$1.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficCounter$MixedTrafficMonitoringTask.class +INFO: Loading Class: io/netty/handler/traffic/GlobalTrafficShapingHandler$ToSend.class +INFO: Loading Class: io/netty/handler/traffic/ChannelTrafficShapingHandler$1.class +INFO: Loading Class: io/netty/handler/traffic/TrafficCounter$1.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficShapingHandler$1.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficCounter.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficShapingHandler$PerChannel.class +INFO: Loading Class: io/netty/handler/traffic/GlobalTrafficShapingHandler$PerChannel.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslSessionContext$1.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$FailProtocolSelector.class +INFO: Loading Class: io/netty/handler/ssl/PemPrivateKey.class +INFO: Loading Class: io/netty/handler/ssl/JdkAlpnSslEngine.class +INFO: Loading Class: io/netty/handler/ssl/SslContextBuilder.class +INFO: Loading Class: io/netty/handler/ssl/JdkSslContext.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$4.class +INFO: Loading Class: io/netty/handler/ssl/OpenSsl$1.class +INFO: Loading Class: io/netty/handler/ssl/SslContext.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslEngine.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslClientContext.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslNpnApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/PemReader.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$6.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslDefaultApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslSessionContext.class +INFO: Loading Class: io/netty/handler/ssl/PemEncoded.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$NoFailProtocolSelector.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslServerContext$TrustManagerVerifyCallback.class +INFO: Loading Class: io/netty/handler/ssl/Java8SslParametersUtils.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslServerContext$ServerContext.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslServerContext.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$6.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$3.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslSessionContext$EmptyEnumeration.class +INFO: Loading Class: io/netty/handler/ssl/util/FingerprintTrustManagerFactory.class +INFO: Loading Class: io/netty/handler/ssl/util/FingerprintTrustManagerFactory$1.class +INFO: Loading Class: io/netty/handler/ssl/util/SimpleTrustManagerFactory$SimpleTrustManagerFactorySpi.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$SslEngineType.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslEngine$OpenSslSession.class +INFO: Loading Class: io/netty/handler/ssl/SslContext$1.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$9.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$2.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpmcArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/atomic/AtomicReferenceArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/QueueProgressIndicators.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MessagePassingQueue$Consumer.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/util/UnsafeRefArrayAccess.class +INFO: Loading Class: io/netty/util/internal/SystemPropertyUtil$1.class +INFO: Loading Class: io/netty/util/internal/PriorityQueueNode.class +INFO: Loading Class: io/netty/util/internal/InternalThreadLocalMap.class +INFO: Loading Class: io/netty/util/internal/ReflectionUtil.class +INFO: Loading Class: io/netty/util/internal/SocketUtils.class +INFO: Loading Class: io/netty/util/internal/logging/JdkLogger.class +INFO: Loading Class: io/netty/util/internal/logging/Log4JLogger.class +INFO: Loading Class: io/netty/util/internal/logging/InternalLogger.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$12.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$ThreadLocalRandomProvider.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$9.class +INFO: Loading Class: io/netty/util/internal/ThreadLocalRandom$1.class +INFO: Loading Class: io/netty/util/internal/ConcurrentSet.class +INFO: Loading Class: io/netty/util/internal/MathUtil.class +INFO: Loading Class: io/netty/util/internal/PendingWrite.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$3.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$4.class +INFO: Loading Class: io/netty/util/internal/OutOfDirectMemoryError.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$2.class +INFO: Loading Class: io/netty/util/internal/PromiseNotificationUtil.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$6.class +INFO: Loading Class: io/netty/util/internal/RecyclableArrayList$1.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$Mpsc.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$AtomicLongCounter.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$13.class +INFO: Loading Class: io/netty/util/internal/DefaultPriorityQueue$PriorityQueueIterator.class +INFO: Loading Class: io/netty/util/internal/TypeParameterMatcher$ReflectiveMatcher.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$10.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$4.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$6.class +INFO: Loading Class: io/netty/util/internal/UnpaddedInternalThreadLocalMap.class +INFO: Loading Class: io/netty/util/internal/NativeLibraryLoader$1.class +INFO: Loading Class: io/netty/util/internal/ObjectUtil.class +INFO: Loading Class: io/netty/util/internal/DefaultPriorityQueue$1.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$7.class +INFO: Loading Class: io/netty/util/internal/AppendableCharSequence.class +INFO: Loading Class: io/netty/util/internal/PendingWrite$1.class +INFO: Loading Class: io/netty/util/Constant.class +INFO: Loading Class: io/netty/util/ReferenceCountUtil$ReleasingTask.class +INFO: Loading Class: io/netty/util/UncheckedBooleanSupplier.class +INFO: Loading Class: io/netty/util/ThreadDeathWatcher$Watcher.class +INFO: Loading Class: io/netty/util/ByteProcessor$IndexOfProcessor.class +INFO: Loading Class: io/netty/util/ThreadDeathWatcher.class +INFO: Loading Class: io/netty/util/Recycler$WeakOrderQueue.class +INFO: Loading Class: io/netty/util/UncheckedBooleanSupplier$2.class +INFO: Loading Class: io/netty/util/HashedWheelTimer$HashedWheelBucket.class +INFO: Loading Class: io/netty/util/IllegalReferenceCountException.class +INFO: Loading Class: io/netty/util/ReferenceCountUtil.class +INFO: Loading Class: io/netty/util/AsciiString$2.class +INFO: Loading Class: io/netty/util/ResourceLeakHint.class +INFO: Loading Class: io/netty/util/ThreadDeathWatcher$Entry.class +INFO: Loading Class: io/netty/util/ConstantPool.class +INFO: Loading Class: io/netty/util/AsyncMapping.class +INFO: Loading Class: io/netty/util/Recycler.class +INFO: Loading Class: io/netty/util/NetUtil.class +INFO: Loading Class: io/netty/util/AbstractConstant.class +INFO: Loading Class: io/netty/util/Timeout.class +INFO: Loading Class: io/netty/util/Recycler$3.class +INFO: Loading Class: io/netty/util/DomainNameMappingBuilder.class +INFO: Loading Class: io/netty/util/AsciiString$DefaultCharEqualityComparator.class +INFO: Loading Class: io/netty/util/Recycler$2.class +INFO: Loading Class: io/netty/util/Attribute.class +INFO: Loading Class: io/netty/util/DomainMappingBuilder.class +INFO: Loading Class: io/netty/util/AttributeKey$1.class +INFO: Loading Class: io/netty/util/Signal$1.class +INFO: Loading Class: io/netty/util/DomainNameMapping.class +INFO: Loading Class: io/netty/util/DefaultAttributeMap$DefaultAttribute.class +INFO: Loading Class: io/netty/util/HashingStrategy.class +INFO: Loading Class: io/netty/util/ByteProcessor$IndexNotOfProcessor.class +INFO: Loading Class: io/netty/util/Recycler$WeakOrderQueue$Link.class +INFO: Loading Class: io/netty/util/IntSupplier.class +INFO: Loading Class: io/netty/util/Recycler$DefaultHandle.class +INFO: Loading Class: io/netty/util/concurrent/SucceededFuture.class +INFO: Loading Class: io/netty/util/concurrent/EventExecutorChooserFactory.class +INFO: Loading Class: io/netty/util/concurrent/ProgressiveFuture.class +INFO: Loading Class: io/netty/util/concurrent/DefaultPromise$1.class +INFO: Loading Class: io/netty/util/concurrent/NonStickyEventExecutorGroup$1.class +INFO: Loading Class: io/netty/util/concurrent/EventExecutorGroup.class +INFO: Loading Class: io/netty/util/concurrent/AbstractEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/GlobalEventExecutor$1.class +INFO: Loading Class: io/netty/util/concurrent/DefaultThreadFactory.class +INFO: Loading Class: io/netty/util/concurrent/PromiseTask.class +INFO: Loading Class: io/netty/util/concurrent/GlobalEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor$DefaultThreadProperties.class +INFO: Loading Class: io/netty/util/concurrent/ImmediateEventExecutor$ImmediatePromise.class +INFO: Loading Class: io/netty/util/concurrent/ImmediateEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/OrderedEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/FastThreadLocalThread.class +INFO: Loading Class: io/netty/util/concurrent/FailedFuture.class +INFO: Loading Class: io/netty/util/concurrent/DefaultPromise.class +INFO: Loading Class: io/netty/util/collection/IntCollections$UnmodifiableMap$IteratorImpl.class +INFO: Loading Class: io/netty/util/collection/LongObjectMap$PrimitiveEntry.class +INFO: Loading Class: io/netty/util/collection/IntObjectMap$PrimitiveEntry.class +INFO: Loading Class: io/netty/util/collection/LongCollections$1.class +INFO: Loading Class: io/netty/util/collection/LongCollections$UnmodifiableMap$EntryImpl.class +INFO: Loading Class: io/netty/util/collection/ShortCollections$UnmodifiableMap.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$MapIterator.class +INFO: Loading Class: io/netty/util/collection/ShortCollections$EmptyMap.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$KeySet$1.class +INFO: Loading Class: io/netty/util/collection/CharObjectMap.class +INFO: Loading Class: io/netty/util/collection/ShortCollections.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$MapIterator.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$PrimitiveIterator.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$EntrySet.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$2.class +INFO: Loading Class: io/netty/util/collection/ByteCollections$1.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$1.class +INFO: Loading Class: io/netty/util/collection/CharCollections$EmptyMap.class +INFO: Loading Class: io/netty/util/collection/IntObjectMap.class +INFO: Loading Class: io/netty/util/collection/ShortCollections$UnmodifiableMap$1.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$2$1.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$KeySet.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$PrimitiveIterator.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$2.class +INFO: Loading Class: io/netty/util/collection/CharCollections$1.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$PrimitiveIterator.class +INFO: Loading Class: io/netty/channel/RecvByteBufAllocator$ExtendedHandle.class +INFO: Loading Class: io/netty/channel/AddressedEnvelope.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannelConfig$Databits.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannel$1.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannelConfig.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxDeviceAddress.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannel$RxtxUnsafe$1.class +INFO: Loading Class: io/netty/channel/rxtx/DefaultRxtxChannelConfig.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannel$EmbeddedChannelPipeline.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannelId.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannel$1.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannel$State.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannel$DefaultUnsafe.class +INFO: Loading Class: io/netty/channel/AbstractServerChannel.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioChannel$2.class +INFO: Loading Class: io/netty/channel/oio/OioByteStreamChannel$1.class +INFO: Loading Class: io/netty/channel/oio/OioByteStreamChannel.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioChannel$1.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioChannel$DefaultOioUnsafe.class +INFO: Loading Class: io/netty/channel/DefaultEventLoop.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext.class +INFO: Loading Class: io/netty/channel/ChannelInboundHandlerAdapter.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$14.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$1.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$WriteAndFlushTask.class +INFO: Loading Class: io/netty/channel/ConnectTimeoutException.class +INFO: Loading Class: io/netty/channel/PendingWriteQueue$PendingWrite.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$9.class +INFO: Loading Class: io/netty/channel/ChannelOption$1.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$5.class +INFO: Loading Class: io/netty/channel/AdaptiveRecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/ChannelInboundInvoker.class +INFO: Loading Class: io/netty/channel/group/ChannelGroup.class +INFO: Loading Class: io/netty/channel/group/ChannelGroupException.class +INFO: Loading Class: io/netty/channel/group/DefaultChannelGroupFuture$DefaultEntry.class +INFO: Loading Class: io/netty/channel/group/ChannelMatchers.class +INFO: Loading Class: io/netty/channel/group/ChannelMatchers$1.class +INFO: Loading Class: io/netty/channel/group/ChannelMatchers$ClassMatcher.class +INFO: Loading Class: io/netty/channel/group/ChannelGroupFuture.class +INFO: Loading Class: io/netty/channel/ChannelConfig.class +INFO: Loading Class: io/netty/channel/FixedRecvByteBufAllocator$HandleImpl.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$PendingHandlerAddedTask.class +INFO: Loading Class: io/netty/channel/ChannelOutboundInvoker.class +INFO: Loading Class: io/netty/channel/ChannelFutureListener$1.class +INFO: Loading Class: io/netty/channel/ServerChannel.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$2.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$13.class +INFO: Loading Class: io/netty/channel/DefaultChannelId.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$7.class +INFO: Loading Class: io/netty/channel/DefaultMessageSizeEstimator$HandleImpl.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$2.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$5$1.class +INFO: Loading Class: io/netty/channel/ChannelFutureListener$2.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$AcquireTimeoutAction.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$AcquireListener.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool$6.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$TimeoutTask.class +INFO: Loading Class: io/netty/channel/pool/ChannelHealthChecker$1.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$AcquireTask.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$2.class +INFO: Loading Class: io/netty/channel/ChannelException.class +INFO: Loading Class: io/netty/channel/unix/DomainSocketChannel.class +INFO: Loading Class: io/netty/channel/unix/Socket.class +INFO: Loading Class: io/netty/channel/ChannelHandler$Sharable.class +INFO: Loading Class: io/netty/channel/DefaultMaxMessagesRecvByteBufAllocator$MaxMessageHandle$1.class +INFO: Loading Class: io/netty/channel/ChannelId.class +INFO: Loading Class: io/netty/channel/ChannelPromise.class +INFO: Loading Class: io/netty/channel/DefaultChannelPromise.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpServerChannel$OioSctpServerChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpChannel$1.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpChannel$OioSctpChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/DefaultSctpChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/DefaultSctpServerChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/SctpChannelOption.class +INFO: Loading Class: io/netty/channel/sctp/SctpChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/SctpServerChannel.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpChannel$NioSctpChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpChannel$1.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpChannel.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AnnotatedSocketException.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer$2.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$16.class +INFO: Loading Class: io/netty/channel/ChannelOption.class +INFO: Loading Class: io/netty/channel/ChannelHandler.class +INFO: Loading Class: io/netty/channel/epoll/EpollEventLoop$2.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$4.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$EpollStreamUnsafe$1.class +INFO: Loading Class: io/netty/channel/epoll/EpollDomainSocketChannel$EpollDomainUnsafe.class +INFO: Loading Class: io/netty/channel/epoll/TcpMd5Util.class +INFO: Loading Class: io/netty/channel/epoll/Epoll.class +INFO: Loading Class: io/netty/channel/epoll/EpollDomainSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$3.class +INFO: Loading Class: io/netty/channel/epoll/EpollRecvByteAllocatorHandle$1.class +INFO: Loading Class: io/netty/channel/epoll/EpollChannelConfig$1.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollServerChannel.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$1.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$5.class +INFO: Loading Class: io/netty/channel/epoll/EpollTcpInfo.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$SpliceInTask.class +INFO: Loading Class: io/netty/channel/epoll/EpollMode.class +INFO: Loading Class: io/netty/channel/epoll/EpollServerSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/EpollEventLoopGroup.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollChannel$AbstractEpollUnsafe$1.class +INFO: Loading Class: io/netty/channel/epoll/EpollChannelOption.class +INFO: Loading Class: io/netty/channel/epoll/EpollRecvByteAllocatorHandle.class +INFO: Loading Class: io/netty/channel/epoll/EpollChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/EpollEventLoop.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$SpliceOutTask.class +INFO: Loading Class: io/netty/channel/epoll/EpollRecvByteAllocatorStreamingHandle.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$6.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$SocketWritableByteChannel.class +INFO: Loading Class: io/netty/channel/MultithreadEventLoopGroup.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$6.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer$Entry.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$11.class +INFO: Loading Class: io/netty/channel/SimpleChannelInboundHandler.class +INFO: Loading Class: io/netty/channel/socket/oio/OioServerSocketChannel.class +INFO: Loading Class: io/netty/channel/socket/oio/OioSocketChannel$3.class +INFO: Loading Class: io/netty/channel/socket/oio/OioServerSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/oio/OioSocketChannel$1.class +INFO: Loading Class: io/netty/channel/socket/oio/OioDatagramChannel.class +INFO: Loading Class: io/netty/channel/socket/oio/OioSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/SocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/ChannelInputShutdownEvent.class +INFO: Loading Class: io/netty/channel/socket/DefaultDatagramChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/ChannelInputShutdownReadComplete.class +INFO: Loading Class: io/netty/channel/socket/DefaultServerSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/ServerSocketChannel.class +INFO: Loading Class: io/netty/channel/socket/InternetProtocolFamily.class +INFO: Loading Class: io/netty/channel/socket/nio/ProtocolFamilyConverter$1.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$5.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$NioSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/nio/NioDatagramChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$6.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$NioSocketChannelUnsafe.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$2.class +INFO: Loading Class: io/netty/channel/socket/nio/ProtocolFamilyConverter.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$4.class +INFO: Loading Class: io/netty/channel/socket/nio/NioServerSocketChannel$NioServerSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/nio/NioServerSocketChannel$1.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$3.class +INFO: Loading Class: io/netty/channel/socket/nio/NioSocketChannel$1.class +INFO: Loading Class: io/netty/channel/socket/DefaultSocketChannelConfig.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext.class +INFO: Loading Class: io/netty/resolver/dns/InflightNameResolver$2.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$AuthoritativeNameServer.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$3.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverBuilder.class +INFO: Loading Class: io/netty/resolver/InetSocketAddressResolver$2.class +INFO: Loading Class: io/netty/resolver/HostsFileParser.class +INFO: Loading Class: io/netty/resolver/DefaultHostsFileEntriesResolver$1.class +INFO: Loading Class: io/netty/resolver/DefaultAddressResolverGroup.class +INFO: Loading Class: io/netty/resolver/InetSocketAddressResolver.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrap$ServerBootstrapAcceptor.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap$1.class +INFO: Loading Class: io/netty/bootstrap/AbstractBootstrap$2.class +INFO: Loading Class: io/netty/bootstrap/AbstractBootstrap$PendingRegistrationPromise.class +INFO: Loading Class: io/netty/bootstrap/AbstractBootstrap.class +INFO: Loading Class: io/netty/buffer/SimpleLeakAwareCompositeByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolChunkList.class +INFO: Loading Class: io/netty/buffer/ByteBufHolder.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$ThreadLocalDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledUnsafeHeapByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolArena$DirectArena.class +INFO: Loading Class: io/netty/buffer/PooledSlicedByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufAllocator.class +INFO: Loading Class: io/netty/buffer/AbstractPooledDerivedByteBuf$PooledNonRetainedDuplicateByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolArenaMetric.class +INFO: Loading Class: io/netty/buffer/AbstractReferenceCountedByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$7.class +INFO: Loading Class: io/netty/buffer/UnpooledUnsafeHeapByteBuf.class +INFO: Loading Class: io/netty/buffer/FixedCompositeByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$MemoryRegionCache$Entry.class +INFO: Loading Class: io/netty/buffer/AdvancedLeakAwareByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolSubpage.class +INFO: Loading Class: io/netty/buffer/ByteBufAllocatorMetric.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$5.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator.class +INFO: Loading Class: io/netty/buffer/SwappedByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$3.class +INFO: Loading Class: io/netty/buffer/AbstractByteBufAllocator$1.class +INFO: Loading Class: io/netty/buffer/PoolChunkListMetric.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$ThreadLocalUnsafeDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/CompositeByteBuf.class +INFO: Loading Class: io/netty/buffer/UnsafeHeapSwappedByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledDuplicatedByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$2.class +INFO: Loading Class: io/netty/buffer/SimpleLeakAwareByteBuf.class +INFO: Loading Class: io/netty/buffer/AdvancedLeakAwareCompositeByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledByteBufAllocator$PoolThreadLocalCache.class +INFO: Loading Class: io/netty/buffer/PoolArena$1.class +INFO: Loading Class: io/netty/buffer/ReadOnlyUnsafeDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$10.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledHeapByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledUnsafeDirectByteBuf$1.class +INFO: Loading Class: io/netty/buffer/PoolChunkMetric.class +INFO: Loading Class: io/netty/buffer/PooledHeapByteBuf.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/UnpooledUnsafeDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledDirectByteBuf$1.class +INFO: Loading Class: io/netty/buffer/ByteBufInputStream.class +INFO: Loading Class: io/netty/handler/flush/FlushConsolidationHandler.class +INFO: Loading Class: io/netty/handler/proxy/HttpProxyHandler.class +INFO: Loading Class: io/netty/handler/proxy/ProxyHandler$2.class +INFO: Loading Class: io/netty/handler/proxy/ProxyConnectException.class +INFO: Loading Class: io/netty/handler/proxy/ProxyConnectionEvent.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlNamespace.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlDocumentEnd.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlElementStart.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlDTD.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlElement.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlComment.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlCharacters.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlContent.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlCdata.class +INFO: Loading Class: io/netty/handler/codec/xml/XmlElementEnd.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspHeaders$Names.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspEncoder.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspHeaders$Values.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspMethods.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspHeaderValues.class +INFO: Loading Class: io/netty/handler/codec/DecoderResult.class +INFO: Loading Class: io/netty/handler/codec/marshalling/ChannelBufferByteInput.class +INFO: Loading Class: io/netty/handler/codec/marshalling/LimitingByteInput$TooBigObjectException.class +INFO: Loading Class: io/netty/handler/codec/marshalling/MarshallingEncoder.class +INFO: Loading Class: io/netty/handler/codec/UnsupportedValueConverter.class +INFO: Loading Class: io/netty/handler/codec/ReplayingDecoderByteBuf.class +INFO: Loading Class: io/netty/handler/codec/memcache/MemcacheObject.class +INFO: Loading Class: io/netty/handler/codec/memcache/MemcacheContent.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheClientCodec$1.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/DefaultBinaryMemcacheResponse.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/DefaultFullBinaryMemcacheResponse.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheMessage.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheObjectAggregator.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheClientCodec$Decoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/MemcacheMessage.class +INFO: Loading Class: io/netty/handler/codec/memcache/AbstractMemcacheObjectAggregator.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeadersImpl.class +INFO: Loading Class: io/netty/handler/codec/FixedLengthFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeaders$NameValidator$1.class +INFO: Loading Class: io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter$ImmediateSendDetector.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackStaticTable.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$HeadersFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackUtil.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Connection$Endpoint.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamVisitor.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Connection$Listener.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamChannelBootstrap$ParentChannelAndMultiplexCodec.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameCodec.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor$StateOnlyComparator.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2SecurityUtil.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackDynamicTable.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController$2.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$ActiveStreams$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2CodecUtil$SimpleChannelPromiseAggregator.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2DataFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$PropertyKeyRegistry.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$Http2ChannelClosedException.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ServerDowngrader.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder$FlowControlledData.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2MultiplexCodec$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameAdapter.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2PromisedRequestVerifier$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2MultiplexCodec$Http2StreamChannel.class +INFO: Loading Class: io/netty/handler/codec/http2/InboundHttp2ToHttpAdapterBuilder.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$FlowState.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2RemoteFlowController$Listener.class +INFO: Loading Class: io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter$1.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamByteDistributor$Writer.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$DefaultPropertyKey.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor$StatePseudoTimeComparator.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Codec.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$3.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersEncoder$SensitivityDetector.class +INFO: Loading Class: io/netty/handler/codec/http2/DelegatingDecompressorFrameListener$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameReader.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Exception$HeaderListSizeException.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2HeadersDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$ListenerWritabilityMonitor$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2LifecycleManager.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackUtil$IndexType.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Frame.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameReader$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2MultiplexCodec$3.class +INFO: Loading Class: io/netty/handler/codec/http2/UniformStreamByteDistributor$State.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Headers$PseudoHeaderName.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHeaderField.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$FlowState$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameLogger.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Stream.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder$FlowControlledHeaders.class +INFO: Loading Class: io/netty/handler/codec/http2/UniformStreamByteDistributor$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameWriter$DataFrameHeader.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameListenerDecorator.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2PromisedRequestVerifier.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2MultiplexCodec$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameReader$HeadersBlockBuilder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Settings.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Exception$StreamException.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Exception$ShutdownHint.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder$FrameReadListener.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$BaseDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder$FlowControlledBase.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2OutboundFrameLogger.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameCodec$FrameListener.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2CodecUtil.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Connection$PropertyKey.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2HeadersEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamChannelBootstrap.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameReader$Configuration.class +INFO: Loading Class: io/netty/handler/codec/http2/EmptyHttp2Headers.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2NoMoreStreamIdsException.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$DefaultStream.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompSubframeDecoder.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompSubframeDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompCommand.class +INFO: Loading Class: io/netty/handler/codec/stomp/DefaultLastStompContentSubframe.class +INFO: Loading Class: io/netty/handler/codec/stomp/DefaultStompFrame.class +INFO: Loading Class: io/netty/handler/codec/serialization/ClassLoaderClassResolver.class +INFO: Loading Class: io/netty/handler/codec/serialization/ObjectEncoderOutputStream.class +INFO: Loading Class: io/netty/handler/codec/serialization/ObjectEncoder.class +INFO: Loading Class: io/netty/handler/codec/serialization/ClassResolvers.class +INFO: Loading Class: io/netty/handler/codec/serialization/CachingClassResolver.class +INFO: Loading Class: io/netty/handler/codec/serialization/ReferenceMap.class +INFO: Loading Class: io/netty/handler/codec/serialization/ClassResolver.class +INFO: Loading Class: io/netty/handler/codec/ReplayingDecoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsOptPseudoRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsResponse.class +INFO: Loading Class: io/netty/handler/codec/dns/AbstractDnsOptPseudoRrRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DatagramDnsQuery.class +INFO: Loading Class: io/netty/handler/codec/dns/AbstractDnsRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsRecordDecoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsOptEcsRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsOpCode.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsOptEcsRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DatagramDnsResponseEncoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsResponse.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageCodec.class +INFO: Loading Class: io/netty/handler/codec/EmptyHeaders.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttTopicSubscription.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttUnacceptableProtocolVersionException.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageFactory.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageBuilders$UnsubscribeBuilder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttVersion.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageType.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttConnectPayload.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttPublishMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttFixedHeader.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttEncoder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttSubAckMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttDecoder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttSubAckPayload.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerCodec.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultLastHttpContent.class +INFO: Loading Class: io/netty/handler/codec/http/LastHttpContent$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketFrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker07.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker00.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker08.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/DeflateDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/WebSocketClientCompressionHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/DeflateFrameServerExtensionHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateClientExtensionHandshaker$PermessageDeflateExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/DeflateFrameServerExtensionHandshaker$DeflateFrameServerExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtensionHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerUpgradeHandler$UpgradeCodec.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/FullHttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaderDateFormat$HttpHeaderDateFormatObsolete1.class +INFO: Loading Class: io/netty/handler/codec/http/FullHttpMessage.class +INFO: Loading Class: io/netty/handler/codec/http/HttpConstants.class +INFO: Loading Class: io/netty/handler/codec/http/HttpResponseStatus.class +INFO: Loading Class: io/netty/handler/codec/http/HttpChunkedInput.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObject.class +INFO: Loading Class: io/netty/handler/codec/http/CombinedHttpHeaders$CombinedHttpHeadersImpl$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContent.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaders$Names.class +INFO: Loading Class: io/netty/handler/codec/protobuf/ProtobufVarint32FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/protobuf/ProtobufEncoder.class +INFO: Loading Class: io/netty/handler/codec/protobuf/ProtobufVarint32LengthFieldPrepender.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthScheme.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksSubnegotiationVersion.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdRequest$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthResponseDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdStatus.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksRequestType.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthResponse.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthResponseDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksRequest.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdResponseDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdResponse.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksResponse.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthRequestDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/base64/Base64$Decoder.class +INFO: Loading Class: io/netty/handler/codec/base64/Base64.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySession$StreamComparator.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyDataFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyProtocolException.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyStreamFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySession$StreamState.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyHeaders$HeaderValueConverterAndValidator.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyStreamStatus.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/LzfEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2HuffmanStageDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/DecompressionException.class +INFO: Loading Class: io/netty/handler/codec/compression/JZlibDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/ByteBufChecksum.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Encoder$2.class +INFO: Loading Class: io/netty/handler/codec/compression/Snappy.class +INFO: Loading Class: io/netty/handler/codec/compression/SnappyFramedDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Crc32.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2HuffmanStageEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Encoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/ByteBufChecksum$ReflectiveByteBufChecksum.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Decoder.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/CompressionException.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Rand.class +INFO: Loading Class: io/netty/handler/codec/compression/FastLzFrameDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/SnappyFrameDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Decoder$State.class +INFO: Loading Class: io/netty/handler/codec/compression/FastLzFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2BitReader.class +INFO: Loading Class: io/netty/handler/codec/compression/SnappyFrameDecoder$ChunkType.class +INFO: Loading Class: io/netty/handler/codec/compression/SnappyFrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisMessagePool.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisMessageType.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisArrayAggregator$AggregateState.class +INFO: Loading Class: io/netty/handler/codec/redis/FullBulkStringRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/AbstractStringRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/BulkStringHeaderRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisEncoder.class +INFO: Loading Class: io/netty/handler/codec/redis/LastBulkStringRedisContent.class +INFO: Loading Class: io/netty/handler/codec/redis/ErrorRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/redis/SimpleStringRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/FullBulkStringRedisMessage$2.class +INFO: Loading Class: io/netty/handler/codec/redis/ArrayRedisMessage.class +INFO: Loading Class: io/netty/handler/codec/redis/FullBulkStringRedisMessage$1.class +INFO: Loading Class: io/netty/handler/codec/string/StringEncoder.class +INFO: Loading Class: io/netty/handler/codec/string/LineSeparator.class +INFO: Loading Class: io/netty/handler/codec/json/JsonObjectDecoder.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeaders$1.class +INFO: Loading Class: io/netty/handler/codec/LengthFieldBasedFrameDecoder.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslCertificateException.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslSessionStats.class +INFO: Loading Class: io/netty/handler/ssl/ClientAuth.class +INFO: Loading Class: io/netty/handler/ssl/JdkAlpnSslEngine$1.class +INFO: Loading Class: io/netty/handler/ssl/DelegatingSslContext.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslX509Certificate.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolUtil.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslEngine$1.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslEngine.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$8$1.class +INFO: Loading Class: io/netty/handler/ssl/SslCompletionEvent.class +INFO: Loading Class: io/netty/handler/ssl/JdkApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/JdkSslServerContext.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$SslEngineType$2.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolConfig$SelectorFailureBehavior.class +INFO: Loading Class: io/netty/handler/ssl/JdkSslEngine.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$5.class +INFO: Loading Class: io/netty/handler/ssl/util/SimpleTrustManagerFactory$2.class +INFO: Loading Class: io/netty/handler/ssl/util/SimpleTrustManagerFactory$1.class +INFO: Loading Class: io/netty/handler/ssl/util/ThreadLocalInsecureRandom.class +INFO: Loading Class: io/netty/handler/ssl/util/FingerprintTrustManagerFactory$2.class +INFO: Loading Class: io/netty/handler/ssl/util/InsecureTrustManagerFactory$1.class +INFO: Loading Class: io/netty/handler/ssl/util/SimpleTrustManagerFactory.class +INFO: Loading Class: io/netty/handler/ssl/SniHandler.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$7.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolNames.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$SslEngineType$1.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$1.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$3.class +INFO: Loading Class: io/netty/handler/ssl/JdkSslSession.class +INFO: Loading Class: io/netty/util/UncheckedBooleanSupplier$1.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$11.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$1.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueConsumerField.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueuePad0.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueueProducerNodeRef.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueuePad1.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscChunkedArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MessagePassingQueue$ExitCondition.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueHeadLimitField.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueueConsumerFields.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueueColdProducerFields.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/ConcurrentCircularArrayQueueL0Pad.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/ConcurrentSequencedCircularArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseLinkedQueueConsumerNodeRef.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueuePad2.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/CircularArrayOffsetCalculator.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueL2Pad.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpmcArrayQueueL2Pad.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueMidPad.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueL1Pad.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MessagePassingQueue$WaitStrategy.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscChunkedArrayQueueColdProducerFields.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MessagePassingQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MessagePassingQueue$Supplier.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpmcArrayQueueConsumerField.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpmcArrayQueueL1Pad.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueueProducerFields.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/IndexedQueueSizeUtil$IndexedQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpmcArrayQueueProducerField.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/atomic/LinkedQueueAtomicNode.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/atomic/SpscLinkedAtomicQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/atomic/BaseLinkedAtomicQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/util/JvmInfo.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/util/Pow2.class +INFO: Loading Class: io/netty/util/internal/UnstableApi.class +INFO: Loading Class: io/netty/util/internal/LongAdderCounter.class +INFO: Loading Class: io/netty/util/internal/StringUtil.class +INFO: Loading Class: io/netty/util/TimerTask.class +INFO: Loading Class: io/netty/util/Mapping.class +INFO: Loading Class: io/netty/util/AsciiString.class +INFO: Loading Class: io/netty/util/ResourceLeakDetectorFactory.class +INFO: Loading Class: io/netty/util/ResourceLeakDetector$Level.class +INFO: Loading Class: io/netty/util/Recycler$Handle.class +INFO: Loading Class: io/netty/util/Recycler$Stack.class +INFO: Loading Class: io/netty/util/Recycler$1.class +INFO: Loading Class: io/netty/util/ResourceLeakDetectorFactory$DefaultResourceLeakDetectorFactory.class +INFO: Loading Class: io/netty/util/ResourceLeakDetectorFactory$DefaultResourceLeakDetectorFactory$1.class +INFO: Loading Class: io/netty/util/AsciiString$GeneralCaseInsensitiveCharEqualityComparator.class +INFO: Loading Class: io/netty/util/DomainNameMappingBuilder$ImmutableDomainNameMapping.class +INFO: Loading Class: io/netty/util/concurrent/PromiseTask$RunnableAdapter.class +INFO: Loading Class: io/netty/util/concurrent/RejectedExecutionHandler.class +INFO: Loading Class: io/netty/util/concurrent/NonStickyEventExecutorGroup.class +INFO: Loading Class: io/netty/util/concurrent/DefaultPromise$3.class +INFO: Loading Class: io/netty/util/concurrent/ImmediateEventExecutor$2.class +INFO: Loading Class: io/netty/util/concurrent/ThreadProperties.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor$3.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor$5.class +INFO: Loading Class: io/netty/util/concurrent/ScheduledFuture.class +INFO: Loading Class: io/netty/util/concurrent/ImmediateExecutor.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor$2.class +INFO: Loading Class: io/netty/util/concurrent/EventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/DefaultProgressivePromise.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor$1.class +INFO: Loading Class: io/netty/util/concurrent/UnorderedThreadPoolEventExecutor$RunnableScheduledFutureTask.class +INFO: Loading Class: io/netty/util/concurrent/ThreadPerTaskExecutor.class +INFO: Loading Class: io/netty/util/concurrent/ProgressivePromise.class +INFO: Loading Class: io/netty/util/concurrent/AbstractScheduledEventExecutor$2.class +INFO: Loading Class: io/netty/util/concurrent/DefaultEventExecutorChooserFactory$GenericEventExecutorChooser.class +INFO: Loading Class: io/netty/util/concurrent/PromiseAggregator.class +INFO: Loading Class: io/netty/util/concurrent/BlockingOperationException.class +INFO: Loading Class: io/netty/util/concurrent/DefaultPromise$4.class +INFO: Loading Class: io/netty/util/concurrent/RejectedExecutionHandlers.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor$4.class +INFO: Loading Class: io/netty/util/concurrent/AbstractScheduledEventExecutor$1.class +INFO: Loading Class: io/netty/util/concurrent/DefaultPromise$CauseHolder.class +INFO: Loading Class: io/netty/util/concurrent/RejectedExecutionHandlers$1.class +INFO: Loading Class: io/netty/util/concurrent/UnaryPromiseNotifier.class +INFO: Loading Class: io/netty/util/concurrent/UnorderedThreadPoolEventExecutor$NonNotifyRunnable.class +INFO: Loading Class: io/netty/util/concurrent/PromiseCombiner$1.class +INFO: Loading Class: io/netty/util/concurrent/DefaultEventExecutorChooserFactory$PowerOfTwoEventExecutorChooser.class +INFO: Loading Class: io/netty/util/concurrent/NonStickyEventExecutorGroup$NonStickyOrderedEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/UnorderedThreadPoolEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/Promise.class +INFO: Loading Class: io/netty/util/concurrent/DefaultEventExecutorGroup.class +INFO: Loading Class: io/netty/util/Version.class +INFO: Loading Class: io/netty/util/HashedWheelTimer$1.class +INFO: Loading Class: io/netty/util/AsciiString$CharEqualityComparator.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$PrimitiveIterator.class +INFO: Loading Class: io/netty/util/collection/LongCollections$UnmodifiableMap$1.class +INFO: Loading Class: io/netty/util/collection/ByteCollections$UnmodifiableMap$EntryImpl.class +INFO: Loading Class: io/netty/util/collection/ByteCollections$UnmodifiableMap$IteratorImpl.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$2.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$EntrySet.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$KeySet.class +INFO: Loading Class: io/netty/util/collection/IntCollections$EmptyMap.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$MapIterator.class +INFO: Loading Class: io/netty/util/collection/ByteCollections$UnmodifiableMap.class +INFO: Loading Class: io/netty/util/collection/ByteCollections.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$KeySet.class +INFO: Loading Class: io/netty/util/collection/ByteObjectMap$PrimitiveEntry.class +INFO: Loading Class: io/netty/util/collection/IntCollections$UnmodifiableMap.class +INFO: Loading Class: io/netty/util/collection/CharCollections.class +INFO: Loading Class: io/netty/channel/ThreadPerChannelEventLoop$1.class +INFO: Loading Class: io/netty/channel/PendingWriteQueue$PendingWrite$1.class +INFO: Loading Class: io/netty/channel/EventLoop.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$WriteTask$1.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$4.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$8.class +INFO: Loading Class: io/netty/channel/RecvByteBufAllocator$DelegatingHandle.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$WriteAndFlushTask$1.class +INFO: Loading Class: io/netty/channel/group/ChannelMatchers$InstanceMatcher.class +INFO: Loading Class: io/netty/channel/group/DefaultChannelGroup.class +INFO: Loading Class: io/netty/channel/group/VoidChannelGroupFuture.class +INFO: Loading Class: io/netty/channel/group/ChannelMatcher.class +INFO: Loading Class: io/netty/channel/AbstractEventLoopGroup.class +INFO: Loading Class: io/netty/channel/ChannelInitializer.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$PendingHandlerRemovedTask.class +INFO: Loading Class: io/netty/channel/ChannelPipelineException.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$4.class +INFO: Loading Class: io/netty/channel/ThreadPerChannelEventLoop$2.class +INFO: Loading Class: io/netty/channel/ChannelOutboundHandler.class +INFO: Loading Class: io/netty/channel/ChannelFlushPromiseNotifier$FlushCheckpoint.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer$1.class +INFO: Loading Class: io/netty/channel/SingleThreadEventLoop$NonWakeupRunnable.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$HeadContext.class +INFO: Loading Class: io/netty/channel/SelectStrategyFactory.class +INFO: Loading Class: io/netty/channel/DefaultMaxMessagesRecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/MessageSizeEstimator$Handle.class +INFO: Loading Class: io/netty/channel/MaxBytesRecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/ChannelMetadata.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe.class +INFO: Loading Class: io/netty/channel/ChannelPipeline.class +INFO: Loading Class: io/netty/channel/ReflectiveChannelFactory.class +INFO: Loading Class: io/netty/channel/pool/ChannelPool.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool$1.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$1.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool$4.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$3.class +INFO: Loading Class: io/netty/channel/pool/ChannelPoolHandler.class +INFO: Loading Class: io/netty/channel/pool/AbstractChannelPoolHandler.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$6.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool$2.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool$5.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$2.class +INFO: Loading Class: io/netty/channel/SingleThreadEventLoop.class +INFO: Loading Class: io/netty/channel/unix/DomainSocketAddress.class +INFO: Loading Class: io/netty/channel/unix/ErrorsStaticallyReferencedJniMethods.class +INFO: Loading Class: io/netty/channel/unix/PeerCredentials.class +INFO: Loading Class: io/netty/channel/unix/DomainSocketReadMode.class +INFO: Loading Class: io/netty/channel/unix/NativeInetAddress.class +INFO: Loading Class: io/netty/channel/unix/UnixChannel.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$9.class +INFO: Loading Class: io/netty/channel/ChannelDuplexHandler.class +INFO: Loading Class: io/netty/channel/EventLoopGroup.class +INFO: Loading Class: io/netty/channel/FixedRecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/DefaultSelectStrategy.class +INFO: Loading Class: io/netty/channel/WriteBufferWaterMark.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpServerChannel.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpServerChannel$2.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpChannel$2.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpServerChannel$1.class +INFO: Loading Class: io/netty/channel/sctp/oio/OioSctpChannel.class +INFO: Loading Class: io/netty/channel/sctp/SctpServerChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/SctpMessage.class +INFO: Loading Class: io/netty/channel/sctp/SctpNotificationHandler.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpServerChannel$2.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpChannel$2.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpServerChannel.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpServerChannel$NioSctpServerChannelConfig.class +INFO: Loading Class: io/netty/channel/sctp/nio/NioSctpServerChannel$1.class +INFO: Loading Class: io/netty/channel/AbstractServerChannel$1.class +INFO: Loading Class: io/netty/channel/RecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/ChannelInboundHandler.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$8.class +INFO: Loading Class: io/netty/channel/DefaultSelectStrategyFactory.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollChannel.class +INFO: Loading Class: io/netty/channel/epoll/EpollDatagramChannel.class +INFO: Loading Class: io/netty/channel/epoll/EpollEventLoop$1.class +INFO: Loading Class: io/netty/channel/epoll/EpollSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/EpollServerDomainSocketChannel.class +INFO: Loading Class: io/netty/channel/CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AnnotatedConnectException.class +INFO: Loading Class: io/netty/channel/MessageSizeEstimator.class +INFO: Loading Class: io/netty/channel/ChannelFactory.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer$3.class +INFO: Loading Class: io/netty/channel/VoidChannelPromise$1.class +INFO: Loading Class: io/netty/channel/ChannelProgressivePromise.class +INFO: Loading Class: io/netty/channel/ChannelPromiseNotifier.class +INFO: Loading Class: io/netty/channel/DefaultMessageSizeEstimator$1.class +INFO: Loading Class: io/netty/channel/VoidChannelPromise.class +INFO: Loading Class: io/netty/channel/DefaultChannelHandlerContext.class +INFO: Loading Class: io/netty/channel/CombinedChannelDuplexHandler.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$WriteTask.class +INFO: Loading Class: io/netty/channel/socket/oio/OioSocketChannel$2.class +INFO: Loading Class: io/netty/channel/socket/oio/OioSocketChannel.class +INFO: Loading Class: io/netty/channel/socket/oio/DefaultOioServerSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/oio/DefaultOioSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/DatagramPacket.class +INFO: Loading Class: io/netty/channel/socket/DatagramChannel.class +INFO: Loading Class: io/netty/channel/socket/SocketChannel.class +INFO: Loading Class: io/netty/channel/socket/DuplexChannel.class +INFO: Loading Class: io/netty/channel/socket/DatagramChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/ServerSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/socket/nio/NioDatagramChannel.class +INFO: Loading Class: io/netty/channel/socket/nio/NioServerSocketChannel.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$6.class +INFO: Loading Class: io/netty/channel/CombinedChannelDuplexHandler$DelegatingChannelHandlerContext$1.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioByteChannel$1.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioMessageChannel$NioMessageUnsafe.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel$AbstractNioUnsafe.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$State.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$6.class +INFO: Loading Class: io/netty/channel/local/LocalServerChannel.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$1.class +INFO: Loading Class: io/netty/channel/local/LocalAddress.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$4.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$3.class +INFO: Loading Class: io/netty/channel/local/LocalServerChannel$2.class +INFO: Loading Class: io/netty/channel/udt/UdtMessage.class +INFO: Loading Class: io/netty/channel/udt/UdtServerChannel.class +INFO: Loading Class: io/netty/channel/udt/UdtChannel.class +INFO: Loading Class: io/netty/channel/udt/DefaultUdtChannelConfig.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtMessageConnectorChannel.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtAcceptorChannel.class +INFO: Loading Class: io/netty/channel/ChannelFlushPromiseNotifier.class +INFO: Loading Class: io/netty/internal/tcnative/CertificateVerifier.class +INFO: Loading Class: io/netty/internal/tcnative/Library.class +INFO: Loading Class: io/netty/internal/tcnative/SSLContext.class +INFO: Loading Class: io/netty/resolver/AddressResolverGroup$1.class +INFO: Loading Class: io/netty/resolver/SimpleNameResolver.class +INFO: Loading Class: io/netty/resolver/DefaultNameResolver.class +INFO: Loading Class: io/netty/resolver/DefaultHostsFileEntriesResolver.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$SingleResolverContext.class +INFO: Loading Class: io/netty/resolver/dns/RotationalDnsServerAddresses.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverBuilder$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$2.class +INFO: Loading Class: io/netty/resolver/dns/DefaultDnsServerAddresses.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$3.class +INFO: Loading Class: io/netty/resolver/dns/SingletonDnsServerAddresses$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsQueryContext$4.class +INFO: Loading Class: io/netty/resolver/dns/SingletonDnsServerAddresses.class +INFO: Loading Class: io/netty/resolver/dns/DnsCacheEntry.class +INFO: Loading Class: io/netty/resolver/dns/DnsServerAddresses.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolverContext$1.class +INFO: Loading Class: io/netty/resolver/dns/DefaultDnsCache$1.class +INFO: Loading Class: io/netty/resolver/dns/NoopDnsServerAddressStreamProvider.class +INFO: Loading Class: io/netty/resolver/dns/DnsServerAddresses$2.class +INFO: Loading Class: io/netty/resolver/dns/DnsQueryContextManager.class +INFO: Loading Class: io/netty/resolver/dns/InflightNameResolver.class +INFO: Loading Class: io/netty/resolver/dns/DnsServerAddresses$1.class +INFO: Loading Class: io/netty/resolver/dns/DnsServerAddressStreamProvider.class +INFO: Loading Class: io/netty/resolver/dns/DnsNameResolver$2.class +INFO: Loading Class: io/netty/resolver/dns/UnixResolverDnsServerAddressStreamProvider.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrap$ServerBootstrapAcceptor$1.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap$2.class +INFO: Loading Class: io/netty/bootstrap/ServerBootstrap$1$1.class +INFO: Loading Class: io/netty/bootstrap/BootstrapConfig.class +INFO: Loading Class: io/netty/bootstrap/Bootstrap.class +INFO: Loading Class: io/netty/buffer/AbstractByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$9.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$2.class +INFO: Loading Class: io/netty/buffer/UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeNoCleanerDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$MemoryRegionCache.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$SubPageMemoryRegionCache.class +INFO: Loading Class: io/netty/buffer/Unpooled.class +INFO: Loading Class: io/netty/buffer/PooledDuplicatedByteBuf$1.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache.class +INFO: Loading Class: io/netty/buffer/DefaultByteBufHolder.class +INFO: Loading Class: io/netty/buffer/WrappedByteBuf.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$HexUtil.class +INFO: Loading Class: io/netty/buffer/PooledSlicedByteBuf$1.class +INFO: Loading Class: io/netty/buffer/PoolChunk.class +INFO: Loading Class: io/netty/handler/flush/FlushConsolidationHandler$1.class +INFO: Loading Class: io/netty/handler/proxy/ProxyHandler$LazyChannelPromise.class +INFO: Loading Class: io/netty/handler/proxy/Socks5ProxyHandler.class +INFO: Loading Class: io/netty/handler/proxy/ProxyHandler$1.class +INFO: Loading Class: io/netty/handler/logging/LogLevel.class +INFO: Loading Class: io/netty/handler/logging/LoggingHandler.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspVersions.class +INFO: Loading Class: io/netty/handler/codec/rtsp/RtspRequestEncoder.class +INFO: Loading Class: io/netty/handler/codec/CodecException.class +INFO: Loading Class: io/netty/handler/codec/marshalling/ChannelBufferByteOutput.class +INFO: Loading Class: io/netty/handler/codec/marshalling/MarshallingDecoder.class +INFO: Loading Class: io/netty/handler/codec/marshalling/CompatibleMarshallingEncoder.class +INFO: Loading Class: io/netty/handler/codec/marshalling/ThreadLocalMarshallerProvider.class +INFO: Loading Class: io/netty/handler/codec/marshalling/CompatibleMarshallingDecoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheClientCodec$Encoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheResponseStatus.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/DefaultBinaryMemcacheRequest.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/FullBinaryMemcacheResponse.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheResponseEncoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/AbstractBinaryMemcacheEncoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/binary/BinaryMemcacheRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/memcache/DefaultMemcacheContent.class +INFO: Loading Class: io/netty/handler/codec/memcache/AbstractMemcacheObjectEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersDecoder$Configuration.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$3.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionPrefaceWrittenEvent.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ResetFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/HttpToHttp2ConnectionHandler.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ServerUpgradeCodec.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$Frame.class +INFO: Loading Class: io/netty/handler/codec/http2/HttpToHttp2ConnectionHandlerBuilder.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/ReadOnlyHttp2Headers.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2EventAdapter.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2ConnectionHandlerBuilder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Exception.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Headers.class +INFO: Loading Class: io/netty/handler/codec/http2/UniformStreamByteDistributor.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController.class +INFO: Loading Class: io/netty/handler/codec/http2/DecoratingHttp2ConnectionDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$Event.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanEncoder$EncodeProcessor.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameTypes.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Exception$ClosedStreamCreationException.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameLogger$Direction.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanDecoder$DecoderProcessor.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$DefaultEndpoint.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$WritabilityMonitor$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackDecoder.class +INFO: Loading Class: io/netty/handler/codec/stomp/DefaultStompHeadersSubframe.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompSubframe.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompContentSubframe.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompFrame.class +INFO: Loading Class: io/netty/handler/codec/stomp/DefaultStompContentSubframe.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompSubframeEncoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsQuery.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsRawRecord.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsMessage.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsRecordEncoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsRecordEncoder.class +INFO: Loading Class: io/netty/handler/codec/bytes/ByteArrayDecoder.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageDecoder$Cumulator.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttUnsubAckMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttPublishVariableHeader.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttSubscribeMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageBuilders$ConnectBuilder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttPubAckMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageBuilders.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttUnsubscribeMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageBuilders$PublishBuilder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttDecoder$Result.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessageBuilders$SubscribeBuilder.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttMessage.class +INFO: Loading Class: io/netty/handler/codec/http/CookieDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/QueryStringDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestDecoder$EndOfDataDecoderException.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/MemoryFileUpload.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/DiskFileUpload.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostMultipartRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostBodyUtil$TransferEncodingMechanism.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/CaseIgnoringComparator.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestDecoder$ErrorDataDecoderException.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientUpgradeHandler.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerUpgradeHandler$UpgradeEvent.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpHeaders$HeaderValueConverterAndValidator.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerCodec$HttpServerResponseEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultCookie.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpResponse.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectDecoder$LineParser.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerKeepAliveHandler.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/DefaultCookie.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/Cookie.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/ClientCookieDecoder$CookieBuilder.class +INFO: Loading Class: io/netty/handler/codec/http/EmptyHttpHeaders.class +INFO: Loading Class: io/netty/handler/codec/http/CombinedHttpHeaders.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentCompressor$1.class +INFO: Loading Class: io/netty/handler/codec/http/CombinedHttpHeaders$CombinedHttpHeadersImpl$CsvValueEscaper.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaderNames.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfigBuilder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectDecoder$HeaderParser.class +INFO: Loading Class: io/netty/handler/codec/http/HttpVersion.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketScheme.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientProtocolHandshakeHandler$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket07FrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientProtocolHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket13FrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/Utf8FrameValidator.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketChunkedInput.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket07FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdySynReplyFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyPingFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionHandler$2.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockRawEncoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyRstStreamFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHttpEncoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHttpHeaders.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaders.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySettingsFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaders$HttpNames.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyGoAwayFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySession$PendingWrite.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHttpResponseStreamIdHandler.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionStatus.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySession.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyStreamFrame.class +INFO: Loading Class: io/netty/handler/codec/DelimiterBasedFrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/sctp/SctpMessageCompletionHandler.class +INFO: Loading Class: io/netty/handler/codec/CorruptedFrameException.class +INFO: Loading Class: io/netty/handler/codec/DatagramPacketDecoder.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyMessage$1.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyMessage.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyProxiedProtocol$TransportProtocol.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5ClientEncoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5ServerEncoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/DefaultSocks5CommandRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthResponseDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthStatus.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialResponseDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandType.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandStatus.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ClientDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ServerDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4CommandType.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ServerDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ClientDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ClientDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/ZlibUtil.class +INFO: Loading Class: io/netty/handler/codec/LengthFieldPrepender.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpCommand.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpContent.class +INFO: Loading Class: io/netty/handler/codec/smtp/DefaultLastSmtpContent.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpRequests.class +INFO: Loading Class: io/netty/handler/codec/smtp/DefaultSmtpContent.class +INFO: Loading Class: io/netty/handler/codec/DefaultHeaders.class +INFO: Loading Class: io/netty/handler/stream/ChunkedWriteHandler$1.class +INFO: Loading Class: io/netty/handler/stream/ChunkedNioStream.class +INFO: Loading Class: io/netty/handler/stream/ChunkedWriteHandler$2.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler$1.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler$ReaderIdleTimeoutTask.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler$AbstractIdleTask.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler$WriterIdleTimeoutTask.class +INFO: Loading Class: io/netty/handler/timeout/TimeoutException.class +INFO: Loading Class: io/netty/handler/timeout/IdleState.class +INFO: Loading Class: io/netty/handler/timeout/WriteTimeoutHandler$WriteTimeoutTask.class +INFO: Loading Class: io/netty/handler/timeout/ReadTimeoutHandler.class +INFO: Loading Class: io/netty/handler/flow/FlowControlHandler.class +INFO: Loading Class: io/netty/handler/flow/FlowControlHandler$1.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficShapingHandler.class +INFO: Loading Class: io/netty/handler/traffic/GlobalTrafficShapingHandler$1.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficShapingHandler$ToSend.class +INFO: Loading Class: io/netty/handler/traffic/TrafficCounter$TrafficMonitoringTask.class +INFO: Loading Class: io/netty/handler/traffic/ChannelTrafficShapingHandler$ToSend.class +INFO: Loading Class: io/netty/handler/traffic/GlobalTrafficShapingHandler.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslClientContext$OpenSslCertificateRequestedCallback.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslExtendedKeyMaterialManager.class +INFO: Loading Class: io/netty/handler/ssl/SslCloseCompletionEvent.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslEngineMap.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslJavaxX509Certificate.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$4.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslSessionTicketKey.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$1.class +INFO: Loading Class: io/netty/handler/ssl/JdkApplicationProtocolNegotiator$ProtocolSelectorFactory.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslContext.class +INFO: Loading Class: io/netty/handler/ssl/JdkDefaultApplicationProtocolNegotiator$1.class +INFO: Loading Class: io/netty/handler/ssl/JdkApplicationProtocolNegotiator$SslEngineWrapperFactory.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$2.class +INFO: Loading Class: io/netty/handler/ssl/Java7SslParametersUtils.class +INFO: Loading Class: io/netty/handler/ssl/SupportedCipherSuiteFilter.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslEngine$HandshakeState.class +INFO: Loading Class: io/netty/handler/ssl/OptionalSslHandler.class +INFO: Loading Class: io/netty/handler/ssl/JdkNpnSslEngine.class +INFO: Loading Class: io/netty/handler/ssl/OpenSsl.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$2.class +INFO: Loading Class: io/netty/handler/ssl/SniHandler$1.class +INFO: Loading Class: io/netty/handler/ssl/CipherSuiteConverter.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$8.class +INFO: Loading Class: io/netty/util/internal/TypeParameterMatcher$1.class +INFO: Loading Class: io/netty/util/internal/logging/Log4J2Logger.class +INFO: Loading Class: io/netty/util/internal/logging/InternalLoggerFactory.class +INFO: Loading Class: io/netty/util/internal/logging/Log4JLoggerFactory.class +INFO: Loading Class: io/netty/util/internal/logging/CommonsLogger.class +INFO: Loading Class: io/netty/util/internal/logging/JdkLoggerFactory.class +INFO: Loading Class: io/netty/util/internal/logging/MessageFormatter.class +INFO: Loading Class: io/netty/util/internal/NoOpTypeParameterMatcher.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent.class +INFO: Loading Class: io/netty/util/internal/NativeLibraryUtil.class +INFO: Loading Class: io/netty/util/internal/EmptyPriorityQueue.class +INFO: Loading Class: io/netty/util/internal/IntegerHolder.class +INFO: Loading Class: io/netty/util/internal/RecyclableArrayList.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$5.class +INFO: Loading Class: io/netty/util/internal/ThreadLocalRandom$2.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$Mpsc$1.class +INFO: Loading Class: io/netty/util/internal/PriorityQueue.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$7.class +INFO: Loading Class: io/netty/util/internal/TypeParameterMatcher.class +INFO: Loading Class: io/netty/util/internal/ConstantTimeUtils.class +INFO: Loading Class: io/netty/util/internal/ReadOnlyIterator.class +INFO: Loading Class: io/netty/util/internal/NativeLibraryLoader$2.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$8.class +INFO: Loading Class: io/netty/util/internal/ThreadLocalRandom$4.class +INFO: Loading Class: io/netty/util/internal/ThrowableUtil.class +INFO: Loading Class: io/netty/util/internal/Cleaner0.class +INFO: Loading Class: io/netty/util/internal/SocketUtils$5.class +INFO: Loading Class: io/netty/util/internal/SystemPropertyUtil.class +INFO: Loading Class: io/netty/util/internal/EmptyArrays.class +INFO: Loading Class: io/netty/util/internal/LongCounter.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$3.class +INFO: Loading Class: io/netty/util/internal/NativeLibraryLoader.class +INFO: Loading Class: io/netty/util/internal/ThreadLocalRandom$3.class +INFO: Loading Class: io/netty/util/HashingStrategy$1.class +INFO: Loading Class: io/netty/util/NetUtil$1.class +INFO: Loading Class: io/netty/util/BooleanSupplier$2.class +INFO: Loading Class: io/netty/util/BooleanSupplier$1.class +INFO: Loading Class: io/netty/util/ResourceLeakException.class +INFO: Loading Class: io/netty/util/Timer.class +INFO: Loading Class: io/netty/util/ReferenceCounted.class +INFO: Loading Class: io/netty/util/ResourceLeakTracker.class +INFO: Loading Class: io/netty/util/AbstractReferenceCounted.class +INFO: Loading Class: io/netty/util/ByteProcessor$3.class +INFO: Loading Class: io/netty/util/ResourceLeakDetector.class +INFO: Loading Class: io/netty/util/ByteProcessor$2.class +INFO: Loading Class: io/netty/util/ByteProcessor$1.class +INFO: Loading Class: io/netty/util/DefaultAttributeMap.class +INFO: Loading Class: io/netty/util/ResourceLeakDetector$LeakEntry.class +INFO: Loading Class: io/netty/util/AsciiString$AsciiCaseInsensitiveCharEqualityComparator.class +INFO: Loading Class: io/netty/util/AttributeKey.class +INFO: Loading Class: io/netty/util/ThreadDeathWatcher$1.class +INFO: Loading Class: io/netty/util/HashedWheelTimer.class +INFO: Loading Class: io/netty/util/ByteProcessor$4.class +INFO: Loading Class: io/netty/util/ResourceLeak.class +INFO: Loading Class: io/netty/util/AttributeMap.class +INFO: Loading Class: io/netty/util/DomainNameMappingBuilder$1.class +INFO: Loading Class: io/netty/util/CharsetUtil.class +INFO: Loading Class: io/netty/util/AsciiString$1.class +INFO: Loading Class: io/netty/util/BooleanSupplier.class +INFO: Loading Class: io/netty/util/ByteProcessor.class +INFO: Loading Class: io/netty/util/Signal$SignalConstant.class +INFO: Loading Class: io/netty/util/ResourceLeakDetector$DefaultResourceLeak.class +INFO: Loading Class: io/netty/util/collection/ShortObjectMap.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$2$1.class +INFO: Loading Class: io/netty/util/collection/LongCollections$EmptyMap.class +INFO: Loading Class: io/netty/util/collection/ShortCollections$UnmodifiableMap$EntryImpl.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$KeySet$1.class +INFO: Loading Class: io/netty/util/collection/ByteCollections$EmptyMap.class +INFO: Loading Class: io/netty/util/collection/ShortCollections$UnmodifiableMap$IteratorImpl.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$MapEntry.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$MapIterator.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$EntrySet.class +INFO: Loading Class: io/netty/util/collection/CharObjectMap$PrimitiveEntry.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$1.class +INFO: Loading Class: io/netty/util/collection/LongCollections$UnmodifiableMap$IteratorImpl.class +INFO: Loading Class: io/netty/util/collection/CharCollections$UnmodifiableMap.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$2.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$2$1.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannelConfig$Paritybit.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannel.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannel$RxtxUnsafe.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannelOption.class +INFO: Loading Class: io/netty/channel/rxtx/RxtxChannelConfig$Stopbits.class +INFO: Loading Class: io/netty/channel/DefaultMaxBytesRecvByteBufAllocator$1.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedEventLoop.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannel.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedChannel$2.class +INFO: Loading Class: io/netty/channel/embedded/EmbeddedSocketAddress.class +INFO: Loading Class: io/netty/channel/oio/OioEventLoopGroup.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioByteChannel.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioChannel$3.class +INFO: Loading Class: io/netty/channel/oio/OioByteStreamChannel$2.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioChannel.class +INFO: Loading Class: io/netty/channel/oio/AbstractOioMessageChannel.class +INFO: Loading Class: io/netty/channel/CombinedChannelDuplexHandler$1.class +INFO: Loading Class: io/netty/channel/ThreadPerChannelEventLoopGroup$1.class +INFO: Loading Class: io/netty/channel/SelectStrategy.class +INFO: Loading Class: io/netty/channel/DefaultMaxBytesRecvByteBufAllocator$HandleImpl.class +INFO: Loading Class: io/netty/channel/DefaultAddressedEnvelope.class +INFO: Loading Class: io/netty/channel/FileRegion.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$8.class +INFO: Loading Class: io/netty/channel/AbstractChannel$CloseFuture.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$3.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$10.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AnnotatedNoRouteToHostException.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer$MessageProcessor.class +INFO: Loading Class: io/netty/channel/ChannelFuture.class +INFO: Loading Class: io/netty/channel/EventLoopException.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$15.class +INFO: Loading Class: io/netty/channel/ThreadPerChannelEventLoopGroup.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$4.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$AbstractWriteTask.class +INFO: Loading Class: io/netty/channel/RecvByteBufAllocator$Handle.class +INFO: Loading Class: io/netty/channel/AbstractChannel.class +INFO: Loading Class: io/netty/channel/Channel$Unsafe.class +INFO: Loading Class: io/netty/channel/FailedChannelFuture.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$12.class +INFO: Loading Class: io/netty/channel/DefaultChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$EpollStreamUnsafe$2.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$SpliceInChannelTask.class +INFO: Loading Class: io/netty/channel/epoll/NativeDatagramPacketArray$1.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$2.class +INFO: Loading Class: io/netty/channel/epoll/EpollDatagramChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollChannel$1.class +INFO: Loading Class: io/netty/channel/epoll/EpollDomainSocketChannel.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$SpliceFdTask.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollChannel$AbstractEpollUnsafe.class +INFO: Loading Class: io/netty/channel/epoll/EpollSocketChannel.class +INFO: Loading Class: io/netty/channel/epoll/EpollEventArray.class +INFO: Loading Class: io/netty/channel/epoll/EpollSocketChannel$EpollSocketChannelUnsafe.class +INFO: Loading Class: io/netty/channel/epoll/NativeDatagramPacketArray$NativeDatagramPacket.class +INFO: Loading Class: io/netty/channel/epoll/EpollServerSocketChannel.class +INFO: Loading Class: io/netty/channel/epoll/NativeDatagramPacketArray.class +INFO: Loading Class: io/netty/channel/epoll/EpollSocketChannel$1.class +INFO: Loading Class: io/netty/channel/epoll/NativeStaticallyReferencedJniMethods.class +INFO: Loading Class: io/netty/channel/epoll/Native.class +INFO: Loading Class: io/netty/channel/epoll/EpollDatagramChannel$EpollDatagramChannelUnsafe.class +INFO: Loading Class: io/netty/channel/epoll/EpollServerChannelConfig.class +INFO: Loading Class: io/netty/channel/epoll/IovArray.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$8.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$7.class +INFO: Loading Class: io/netty/channel/epoll/EpollDomainSocketChannel$1.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollStreamChannel$EpollStreamUnsafe.class +INFO: Loading Class: io/netty/channel/AbstractServerChannel$DefaultServerUnsafe.class +INFO: Loading Class: io/netty/channel/ThreadPerChannelEventLoop.class +INFO: Loading Class: io/netty/channel/DefaultMaxBytesRecvByteBufAllocator$HandleImpl$1.class +INFO: Loading Class: io/netty/channel/nio/SelectedSelectionKeySet.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop$6.class +INFO: Loading Class: io/netty/channel/nio/SelectedSelectionKeySetSelector.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel$1.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoopGroup.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel$2.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel$AbstractNioUnsafe$1.class +INFO: Loading Class: io/netty/channel/nio/NioTask.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop$3.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop$5.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioMessageChannel$1.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioByteChannel$NioByteUnsafe.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop$2.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioMessageChannel.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel$AbstractNioUnsafe$2.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop$1.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioChannel$NioUnsafe.class +INFO: Loading Class: io/netty/channel/nio/AbstractNioByteChannel.class +INFO: Loading Class: io/netty/channel/nio/NioEventLoop$4.class +INFO: Loading Class: io/netty/channel/AdaptiveRecvByteBufAllocator$HandleImpl.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$5.class +INFO: Loading Class: io/netty/channel/local/LocalChannelRegistry.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$2.class +INFO: Loading Class: io/netty/channel/local/LocalServerChannel$1.class +INFO: Loading Class: io/netty/channel/local/PreferHeapByteBufAllocator.class +INFO: Loading Class: io/netty/channel/local/LocalChannel$LocalUnsafe.class +INFO: Loading Class: io/netty/channel/local/LocalChannel.class +INFO: Loading Class: io/netty/channel/local/LocalEventLoopGroup.class +INFO: Loading Class: io/netty/channel/ChannelPromiseAggregator.class +INFO: Loading Class: io/netty/channel/DefaultFileRegion.class +INFO: Loading Class: io/netty/channel/udt/UdtChannelConfig.class +INFO: Loading Class: io/netty/channel/udt/DefaultUdtServerChannelConfig.class +INFO: Loading Class: io/netty/channel/udt/UdtServerChannelConfig.class +INFO: Loading Class: io/netty/channel/udt/UdtChannelOption.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtByteRendezvousChannel.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtByteConnectorChannel$2.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtProvider$1.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtByteConnectorChannel.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtMessageConnectorChannel$1.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtProvider.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtByteConnectorChannel$1.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtMessageRendezvousChannel.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtByteAcceptorChannel.class +INFO: Loading Class: io/netty/channel/udt/nio/NioUdtMessageAcceptorChannel.class +INFO: Loading Class: io/netty/channel/SucceededChannelFuture.class +INFO: Loading Class: io/netty/channel/DefaultChannelProgressivePromise.class +INFO: Loading Class: io/netty/channel/ChannelFutureListener$3.class +INFO: Loading Class: io/netty/channel/Channel.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$5.class +INFO: Loading Class: io/netty/internal/tcnative/CertificateRequestedCallback.class +INFO: Loading Class: io/netty/internal/tcnative/NativeStaticallyReferencedJniMethods.class +INFO: Loading Class: io/netty/buffer/AbstractDerivedByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledHeapByteBuf$1.class +INFO: Loading Class: io/netty/buffer/PoolSubpageMetric.class +INFO: Loading Class: io/netty/buffer/SlicedByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledByteBufAllocatorMetric.class +INFO: Loading Class: io/netty/buffer/UnsafeByteBufUtil.class +INFO: Loading Class: io/netty/buffer/ByteBufProcessor$4.class +INFO: Loading Class: io/netty/buffer/WrappedUnpooledUnsafeDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/ReadOnlyByteBufferBuf.class +INFO: Loading Class: io/netty/buffer/FixedCompositeByteBuf$Component.class +INFO: Loading Class: io/netty/buffer/PoolThreadCache$MemoryRegionCache$1.class +INFO: Loading Class: io/netty/buffer/ByteBufUtil$1.class +INFO: Loading Class: io/netty/buffer/PooledUnsafeHeapByteBuf$1.class +INFO: Loading Class: io/netty/buffer/PoolArena.class +INFO: Loading Class: io/netty/buffer/EmptyByteBuf.class +INFO: Loading Class: io/netty/buffer/UnpooledUnsafeNoCleanerDirectByteBuf.class +INFO: Loading Class: io/netty/buffer/AbstractPooledDerivedByteBuf$PooledNonRetainedSlicedByteBuf.class +INFO: Loading Class: io/netty/buffer/PooledByteBuf.class +INFO: Loading Class: io/netty/buffer/HeapByteBufUtil.class +INFO: Loading Class: io/netty/buffer/AbstractPooledDerivedByteBuf.class +INFO: Loading Class: io/netty/buffer/WrappedCompositeByteBuf.class +INFO: Loading Class: io/netty/handler/codec/http2/WeightedFairQueueByteDistributor$ParentChangedEvent.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController$WindowUpdateVisitor.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameReader.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2RemoteFlowController$WritabilityMonitor$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2GoAwayFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2FrameWriter.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$2.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$PendingStream.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$ClosingChannelFutureListener.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameSizePolicy.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$DefaultStream$PropertyMap.class +INFO: Loading Class: io/netty/handler/codec/http2/InboundHttpToHttp2Adapter.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamStateEvent.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2WindowUpdateFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersEncoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2InboundFrameLogger$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersEncoder$Configuration.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2GoAwayFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Headers$2.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Flags.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Stream$State.class +INFO: Loading Class: io/netty/handler/codec/http2/ReadOnlyHttp2Headers$ReadOnlyIterator.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$ActiveStreams.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameCodec$InternalHttp2ConnectionHandler.class +INFO: Loading Class: io/netty/handler/codec/http2/InboundHttp2ToHttpAdapter.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractInboundHttp2ToHttpAdapterBuilder.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Connection$ActiveStreams$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HttpConversionUtil$Http2ToHttpHeaderTranslator.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2FrameWriter$Configuration.class +INFO: Loading Class: io/netty/handler/codec/http2/CompressorHttp2ConnectionEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2MultiplexCodec.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2HeadersDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionAdapter.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ServerUpgradeCodec$1.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder$PrefaceFrameListener.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamChannel$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/http2/StreamBufferingEncoder$DataFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2Headers$1.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2Error.class +INFO: Loading Class: io/netty/handler/codec/http2/DecoratingHttp2FrameWriter.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamActiveEvent.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ResetFrame.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2StreamClosedEvent.class +INFO: Loading Class: io/netty/handler/codec/http2/DefaultHttp2LocalFlowController$DefaultState.class +INFO: Loading Class: io/netty/handler/codec/http2/Http2ConnectionHandler$ClosingChannelFutureListener$1.class +INFO: Loading Class: io/netty/handler/codec/http2/AbstractHttp2StreamChannel$3.class +INFO: Loading Class: io/netty/handler/codec/http2/HpackHuffmanEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http2/HttpConversionUtil.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompConstants.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompHeaders.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompHeadersSubframe.class +INFO: Loading Class: io/netty/handler/codec/stomp/LastStompContentSubframe$1.class +INFO: Loading Class: io/netty/handler/codec/stomp/DefaultStompHeaders.class +INFO: Loading Class: io/netty/handler/codec/stomp/StompSubframeAggregator.class +INFO: Loading Class: io/netty/handler/codec/stomp/LastStompContentSubframe.class +INFO: Loading Class: io/netty/handler/codec/CharSequenceValueConverter.class +INFO: Loading Class: io/netty/handler/codec/serialization/WeakReferenceMap.class +INFO: Loading Class: io/netty/handler/codec/serialization/CompactObjectInputStream.class +INFO: Loading Class: io/netty/handler/codec/serialization/CompatibleObjectEncoder.class +INFO: Loading Class: io/netty/handler/codec/serialization/ObjectDecoder.class +INFO: Loading Class: io/netty/handler/codec/serialization/SoftReferenceMap.class +INFO: Loading Class: io/netty/handler/codec/dns/DatagramDnsQueryEncoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsQuery.class +INFO: Loading Class: io/netty/handler/codec/dns/DatagramDnsResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DefaultDnsRecordDecoder.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsQuestion.class +INFO: Loading Class: io/netty/handler/codec/dns/DatagramDnsResponse.class +INFO: Loading Class: io/netty/handler/codec/dns/DnsPtrRecord.class +INFO: Loading Class: io/netty/handler/codec/CodecOutputList.class +INFO: Loading Class: io/netty/handler/codec/MessageToByteEncoder.class +INFO: Loading Class: io/netty/handler/codec/bytes/ByteArrayEncoder.class +INFO: Loading Class: io/netty/handler/codec/Delimiters.class +INFO: Loading Class: io/netty/handler/codec/ProtocolDetectionResult.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttDecoder$DecoderState.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttConnAckMessage.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttConnectReturnCode.class +INFO: Loading Class: io/netty/handler/codec/mqtt/MqttConnAckVariableHeader.class +INFO: Loading Class: io/netty/handler/codec/http/HttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpHeaders$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpExpectationFailedEvent.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpObject.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerUpgradeHandler$SourceCodec.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpHeaders.class +INFO: Loading Class: io/netty/handler/codec/http/CombinedHttpHeaders$CombinedHttpHeadersImpl$2.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentDecompressor.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaderDateFormat.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientUpgradeHandler$UpgradeCodec.class +INFO: Loading Class: io/netty/handler/codec/http/HttpObjectEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentEncoder$State.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpData.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestEncoder$ErrorDataEncoderException.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestDecoder$MultiPartStatus.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/InterfaceHttpData.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpDataFactory.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/InternalAttribute.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostBodyUtil.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/AbstractDiskHttpData.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/MixedAttribute.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/Attribute.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostBodyUtil$SeekAheadOptimize.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostMultipartRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/MixedFileUpload.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestEncoder$WrappedFullHttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostStandardRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/multipart/HttpPostRequestEncoder$WrappedHttpRequest.class +INFO: Loading Class: io/netty/handler/codec/http/HttpStatusClass$1.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpMessage.class +INFO: Loading Class: io/netty/handler/codec/http/HttpRequestEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/CombinedHttpHeaders$CombinedHttpHeadersImpl.class +INFO: Loading Class: io/netty/handler/codec/http/ServerCookieEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientCodec$Encoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpMethod.class +INFO: Loading Class: io/netty/handler/codec/http/HttpResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/CookieEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/ClientCookieEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/CookieHeaderNames.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/ServerCookieEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/cookie/ClientCookieEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpClientCodec$Decoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentCompressor.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaderDateFormat$1.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfigBuilder$1.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsHandler.class +INFO: Loading Class: io/netty/handler/codec/http/cors/CorsConfig.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerUpgradeHandler$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeaderValues.class +INFO: Loading Class: io/netty/handler/codec/http/Cookie.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketVersion.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketUtil$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandler$ServerHandshakeStateEvent.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandler$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket08FrameDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/TextWebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandler$HandshakeComplete.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketUtil$2.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientProtocolHandler$ClientHandshakeStateEvent.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/CloseWebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker00.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/PingWebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshakerFactory.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker07.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/ContinuationWebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket13FrameDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketFrame.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientHandshaker$4.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketClientProtocolHandshakeHandler.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketServerHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketServerExtensionHandshaker.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketClientExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketExtensionData.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateServerExtensionHandshaker$PermessageDeflateExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/DeflateEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerFrameDeflateEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerFrameDeflateDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/PerMessageDeflateEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/compression/DeflateFrameClientExtensionHandshaker$DeflateFrameClientExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/extensions/WebSocketExtension.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocket00FrameEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/WebSocketUtil.class +INFO: Loading Class: io/netty/handler/codec/http/websocketx/Utf8Validator.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultLastHttpContent$TrailingHttpHeaders$1.class +INFO: Loading Class: io/netty/handler/codec/http/HttpContentEncoder$Result.class +INFO: Loading Class: io/netty/handler/codec/http/HttpHeadersEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/DefaultHttpHeaders$HeaderValueConverter.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerUpgradeHandler.class +INFO: Loading Class: io/netty/handler/codec/http/QueryStringEncoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpServerCodec$HttpServerRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/http/HttpUtil.class +INFO: Loading Class: io/netty/handler/codec/http/HttpResponseStatus$HttpStatusLineProcessor.class +INFO: Loading Class: io/netty/handler/codec/ByteToMessageDecoder.class +INFO: Loading Class: io/netty/handler/codec/protobuf/ProtobufEncoderNano.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitRequestDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitRequest.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdResponse$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAddressType.class +INFO: Loading Class: io/netty/handler/codec/socks/UnknownSocksRequest.class +INFO: Loading Class: io/netty/handler/codec/socks/UnknownSocksResponse.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksInitResponseDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksAuthRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdResponseDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCmdRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksMessage.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksMessageType.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksResponseType.class +INFO: Loading Class: io/netty/handler/codec/socks/SocksCommonUtils.class +INFO: Loading Class: io/netty/handler/codec/base64/Base64Decoder.class +INFO: Loading Class: io/netty/handler/codec/base64/Base64$1.class +INFO: Loading Class: io/netty/handler/codec/base64/Base64Dialect.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameCodec.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeadersFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdySessionHandler$1.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdySettingsFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyCodecUtil.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyVersion.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyWindowUpdateFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHttpDecoder.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/spdy/DefaultSpdyHeadersFrame.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyFrameDecoderDelegate.class +INFO: Loading Class: io/netty/handler/codec/spdy/SpdyHttpHeaders$Names.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils$StringEntryIterator.class +INFO: Loading Class: io/netty/handler/codec/Headers.class +INFO: Loading Class: io/netty/handler/codec/EncoderException.class +INFO: Loading Class: io/netty/handler/codec/sctp/SctpInboundByteStreamHandler.class +INFO: Loading Class: io/netty/handler/codec/DatagramPacketEncoder.class +INFO: Loading Class: io/netty/handler/codec/AsciiHeadersEncoder$SeparatorType.class +INFO: Loading Class: io/netty/handler/codec/HeadersUtils$DelegatingStringSet.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyProxiedProtocol.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyProxiedProtocol$AddressFamily.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyProtocolVersion.class +INFO: Loading Class: io/netty/handler/codec/haproxy/HAProxyProtocolException.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandRequestDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/DefaultSocks5InitialResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5AddressDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5AddressEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5AddressEncoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5AuthMethod.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthRequestDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/AbstractSocks5Message.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialRequestDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/DefaultSocks5CommandResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/DefaultSocks5PasswordAuthResponse.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5CommandRequestDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/DefaultSocks5PasswordAuthRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5PasswordAuthResponseDecoder$State.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/Socks5InitialRequestDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/socksx/v5/DefaultSocks5InitialRequest.class +INFO: Loading Class: io/netty/handler/codec/socksx/AbstractSocksMessage.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/AbstractSocks4Message.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4CommandStatus.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ServerDecoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4ServerEncoder.class +INFO: Loading Class: io/netty/handler/codec/socksx/v4/Socks4Message.class +INFO: Loading Class: io/netty/handler/codec/socksx/SocksMessage.class +INFO: Loading Class: io/netty/handler/codec/socksx/SocksPortUnificationServerHandler.class +INFO: Loading Class: io/netty/handler/codec/compression/ZlibCodecFactory.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2DivSufSort$TRBudget.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2BitWriter.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2MTFAndRLE2StageEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibEncoder$4.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibEncoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/JZlibEncoder$3.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2MoveToFrontTable.class +INFO: Loading Class: io/netty/handler/codec/compression/LzfDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2DivSufSort$StackEntry.class +INFO: Loading Class: io/netty/handler/codec/compression/SnappyFramedEncoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4Constants.class +INFO: Loading Class: io/netty/handler/codec/compression/Crc32c.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibDecoder$GzipState.class +INFO: Loading Class: io/netty/handler/codec/compression/Lz4FrameDecoder$1.class +INFO: Loading Class: io/netty/handler/codec/compression/ByteBufChecksum$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Encoder$3.class +INFO: Loading Class: io/netty/handler/codec/compression/ByteBufChecksum$SlowByteBufChecksum.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2HuffmanAllocator.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibEncoder$2.class +INFO: Loading Class: io/netty/handler/codec/compression/JZlibEncoder$2.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Encoder$State.class +INFO: Loading Class: io/netty/handler/codec/compression/Snappy$1.class +INFO: Loading Class: io/netty/handler/codec/compression/Snappy$State.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2Constants.class +INFO: Loading Class: io/netty/handler/codec/compression/ZlibUtil$1.class +INFO: Loading Class: io/netty/handler/codec/compression/ZlibDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/LzfDecoder.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2DivSufSort.class +INFO: Loading Class: io/netty/handler/codec/compression/JdkZlibEncoder$3.class +INFO: Loading Class: io/netty/handler/codec/compression/Bzip2BlockDecompressor.class +INFO: Loading Class: io/netty/handler/codec/redis/ArrayRedisMessage$1.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisArrayAggregator.class +INFO: Loading Class: io/netty/handler/codec/redis/RedisCodecUtil.class +INFO: Loading Class: io/netty/handler/codec/smtp/DefaultSmtpResponse.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpRequest.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpResponseDecoder.class +INFO: Loading Class: io/netty/handler/codec/smtp/LastSmtpContent$1.class +INFO: Loading Class: io/netty/handler/codec/smtp/DefaultSmtpRequest.class +INFO: Loading Class: io/netty/handler/codec/smtp/SmtpUtils.class +INFO: Loading Class: io/netty/handler/codec/CodecOutputList$1.class +INFO: Loading Class: io/netty/handler/codec/MessageToMessageDecoder.class +INFO: Loading Class: io/netty/handler/ipfilter/IpFilterRuleType.class +INFO: Loading Class: io/netty/handler/ipfilter/UniqueIpFilter$1.class +INFO: Loading Class: io/netty/handler/ipfilter/IpSubnetFilterRule$Ip6SubnetFilterRule.class +INFO: Loading Class: io/netty/handler/ipfilter/AbstractRemoteAddressFilter.class +INFO: Loading Class: io/netty/handler/ipfilter/RuleBasedIpFilter.class +INFO: Loading Class: io/netty/handler/stream/ChunkedWriteHandler$4.class +INFO: Loading Class: io/netty/handler/stream/ChunkedInput.class +INFO: Loading Class: io/netty/handler/stream/ChunkedWriteHandler$PendingWrite.class +INFO: Loading Class: io/netty/handler/stream/ChunkedStream.class +INFO: Loading Class: io/netty/handler/stream/ChunkedNioFile.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler$AllIdleTimeoutTask.class +INFO: Loading Class: io/netty/handler/timeout/IdleStateHandler.class +INFO: Loading Class: io/netty/handler/traffic/TrafficCounter.class +INFO: Loading Class: io/netty/handler/traffic/GlobalChannelTrafficShapingHandler$2.class +INFO: Loading Class: io/netty/handler/traffic/AbstractTrafficShapingHandler$ReopenReadTimerTask.class +INFO: Loading Class: io/netty/handler/traffic/ChannelTrafficShapingHandler.class +INFO: Loading Class: io/netty/handler/traffic/AbstractTrafficShapingHandler.class +INFO: Loading Class: io/netty/handler/ssl/SniHandler$AsyncMappingAdapter.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$5.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslServerContext.class +INFO: Loading Class: io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator$1.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$NoFailProtocolSelectionListener.class +INFO: Loading Class: io/netty/handler/ssl/CipherSuiteFilter.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslClientContext$TrustManagerVerifyCallback.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslEngine$2.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolConfig$Protocol.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/JdkAlpnSslEngine$2.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$8.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$AbstractCertificateVerifier.class +INFO: Loading Class: io/netty/handler/ssl/PemValue.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslServerSessionContext.class +INFO: Loading Class: io/netty/handler/ssl/NotSslRecordException.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslClientContext$OpenSslClientSessionContext.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolNegotiationHandler.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolAccessor.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$FailProtocolSelectionListener.class +INFO: Loading Class: io/netty/handler/ssl/JdkNpnSslEngine$2.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$4.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslKeyMaterialManager.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$3.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolConfig$SelectedListenerFailureBehavior.class +INFO: Loading Class: io/netty/handler/ssl/JdkDefaultApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/JdkApplicationProtocolNegotiator$ProtocolSelectionListener.class +INFO: Loading Class: io/netty/handler/ssl/SslProvider.class +INFO: Loading Class: io/netty/handler/ssl/JdkNpnApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/JdkSslContext$1.class +INFO: Loading Class: io/netty/handler/ssl/IdentityCipherSuiteFilter.class +INFO: Loading Class: io/netty/handler/ssl/SniHandler$Selection.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$LazyChannelPromise.class +INFO: Loading Class: io/netty/handler/ssl/OpenSslClientContext.class +INFO: Loading Class: io/netty/handler/ssl/SslHandshakeCompletionEvent.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslContext$DefaultOpenSslEngineMap.class +INFO: Loading Class: io/netty/handler/ssl/JdkApplicationProtocolNegotiator$ProtocolSelectionListenerFactory.class +INFO: Loading Class: io/netty/handler/ssl/JdkBaseApplicationProtocolNegotiator$2.class +INFO: Loading Class: io/netty/handler/ssl/JdkApplicationProtocolNegotiator$ProtocolSelector.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$1.class +INFO: Loading Class: io/netty/handler/ssl/ApplicationProtocolConfig.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler$8$2.class +INFO: Loading Class: io/netty/handler/ssl/PemX509Certificate.class +INFO: Loading Class: io/netty/handler/ssl/JdkNpnSslEngine$1.class +INFO: Loading Class: io/netty/handler/ssl/ReferenceCountedOpenSslServerContext$ExtendedTrustManagerVerifyCallback.class +INFO: Loading Class: io/netty/handler/ssl/JdkSslClientContext.class +INFO: Loading Class: io/netty/handler/ssl/JdkAlpnApplicationProtocolNegotiator.class +INFO: Loading Class: io/netty/handler/ssl/SslUtils.class +INFO: Loading Class: io/netty/handler/ssl/JdkNpnApplicationProtocolNegotiator$1.class +INFO: Loading Class: io/netty/handler/ssl/util/BouncyCastleSelfSignedCertGenerator.class +INFO: Loading Class: io/netty/handler/ssl/util/InsecureTrustManagerFactory.class +INFO: Loading Class: io/netty/handler/ssl/util/OpenJdkSelfSignedCertGenerator.class +INFO: Loading Class: io/netty/handler/ssl/util/X509TrustManagerWrapper.class +INFO: Loading Class: io/netty/handler/ssl/util/SelfSignedCertificate.class +INFO: Loading Class: io/netty/handler/ssl/SslHandler.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueuePad1.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/MpscArrayQueueTailField.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/ConcurrentCircularArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/BaseMpscLinkedArrayQueuePad3.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/SpscLinkedQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/LinkedQueueNode.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/IndexedQueueSizeUtil.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/atomic/MpscLinkedAtomicQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/queues/atomic/MpscAtomicArrayQueue.class +INFO: Loading Class: io/netty/util/internal/shaded/org/jctools/util/UnsafeAccess.class +INFO: Loading Class: io/netty/util/internal/ThreadLocalRandom.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0.class +INFO: Loading Class: io/netty/util/internal/logging/FormattingTuple.class +INFO: Loading Class: io/netty/util/internal/logging/AbstractInternalLogger$1.class +INFO: Loading Class: io/netty/util/internal/logging/Slf4JLogger.class +INFO: Loading Class: io/netty/util/internal/logging/Slf4JLoggerFactory.class +INFO: Loading Class: io/netty/util/internal/logging/InternalLogLevel.class +INFO: Loading Class: io/netty/util/internal/logging/Log4J2LoggerFactory.class +INFO: Loading Class: io/netty/util/internal/logging/AbstractInternalLogger.class +INFO: Loading Class: io/netty/util/internal/logging/CommonsLoggerFactory.class +INFO: Loading Class: io/netty/util/internal/DefaultPriorityQueue.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$3.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$2.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent0$1.class +INFO: Loading Class: io/netty/util/internal/PlatformDependent$1.class +INFO: Loading Class: io/netty/util/internal/MacAddressUtil.class +INFO: Loading Class: io/netty/util/HashedWheelTimer$HashedWheelTimeout.class +INFO: Loading Class: io/netty/util/concurrent/AbstractFuture.class +INFO: Loading Class: io/netty/util/concurrent/GenericProgressiveFutureListener.class +INFO: Loading Class: io/netty/util/concurrent/ImmediateEventExecutor$1.class +INFO: Loading Class: io/netty/util/concurrent/DefaultThreadFactory$DefaultRunnableDecorator.class +INFO: Loading Class: io/netty/util/concurrent/SingleThreadEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/DefaultEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/FutureListener.class +INFO: Loading Class: io/netty/util/concurrent/DefaultEventExecutorChooserFactory.class +INFO: Loading Class: io/netty/util/concurrent/AbstractEventExecutorGroup.class +INFO: Loading Class: io/netty/util/concurrent/PromiseNotifier.class +INFO: Loading Class: io/netty/util/concurrent/ImmediateEventExecutor$ImmediateProgressivePromise.class +INFO: Loading Class: io/netty/util/concurrent/PromiseCombiner.class +INFO: Loading Class: io/netty/util/concurrent/DefaultFutureListeners.class +INFO: Loading Class: io/netty/util/concurrent/DefaultPromise$2.class +INFO: Loading Class: io/netty/util/concurrent/ScheduledFutureTask.class +INFO: Loading Class: io/netty/util/concurrent/FastThreadLocal.class +INFO: Loading Class: io/netty/util/concurrent/EventExecutorChooserFactory$EventExecutorChooser.class +INFO: Loading Class: io/netty/util/concurrent/GlobalEventExecutor$TaskRunner.class +INFO: Loading Class: io/netty/util/concurrent/AbstractScheduledEventExecutor.class +INFO: Loading Class: io/netty/util/concurrent/GenericFutureListener.class +INFO: Loading Class: io/netty/util/concurrent/RejectedExecutionHandlers$2.class +INFO: Loading Class: io/netty/util/concurrent/MultithreadEventExecutorGroup.class +INFO: Loading Class: io/netty/util/concurrent/MultithreadEventExecutorGroup$1.class +INFO: Loading Class: io/netty/util/concurrent/Future.class +INFO: Loading Class: io/netty/util/concurrent/CompleteFuture.class +INFO: Loading Class: io/netty/util/Signal.class +INFO: Loading Class: io/netty/util/HashedWheelTimer$Worker.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$KeySet$1.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$KeySet.class +INFO: Loading Class: io/netty/util/collection/ByteCollections$UnmodifiableMap$1.class +INFO: Loading Class: io/netty/util/collection/ShortObjectMap$PrimitiveEntry.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$PrimitiveIterator.class +INFO: Loading Class: io/netty/util/collection/LongCollections.class +INFO: Loading Class: io/netty/util/collection/LongObjectMap.class +INFO: Loading Class: io/netty/util/collection/IntCollections$1.class +INFO: Loading Class: io/netty/util/collection/IntCollections$UnmodifiableMap$1.class +INFO: Loading Class: io/netty/util/collection/LongObjectHashMap$MapEntry.class +INFO: Loading Class: io/netty/util/collection/IntCollections$UnmodifiableMap$EntryImpl.class +INFO: Loading Class: io/netty/util/collection/CharCollections$UnmodifiableMap$IteratorImpl.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$2$1.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$MapEntry.class +INFO: Loading Class: io/netty/util/collection/ByteObjectHashMap$1.class +INFO: Loading Class: io/netty/util/collection/CharCollections$UnmodifiableMap$EntryImpl.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap.class +INFO: Loading Class: io/netty/util/collection/LongCollections$UnmodifiableMap.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$2.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$EntrySet.class +INFO: Loading Class: io/netty/util/collection/ShortCollections$1.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$EntrySet.class +INFO: Loading Class: io/netty/util/collection/CharCollections$UnmodifiableMap$1.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$MapEntry.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$KeySet$1.class +INFO: Loading Class: io/netty/util/collection/CharObjectHashMap$1.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$KeySet.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$MapEntry.class +INFO: Loading Class: io/netty/util/collection/IntCollections.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$KeySet$1.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$MapIterator.class +INFO: Loading Class: io/netty/util/collection/IntObjectHashMap$1.class +INFO: Loading Class: io/netty/util/collection/ShortObjectHashMap$2$1.class +INFO: Loading Class: io/netty/util/collection/ByteObjectMap.class +INFO: Loading Class: io/netty/channel/ChannelHandlerContext.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$6.class +INFO: Loading Class: io/netty/channel/DefaultMessageSizeEstimator.class +INFO: Loading Class: io/netty/channel/ChannelProgressiveFuture.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$PendingHandlerCallback.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$3.class +INFO: Loading Class: io/netty/channel/group/ChannelGroupFutureListener.class +INFO: Loading Class: io/netty/channel/group/DefaultChannelGroup$1.class +INFO: Loading Class: io/netty/channel/group/DefaultChannelGroupFuture.class +INFO: Loading Class: io/netty/channel/group/ChannelMatchers$InvertMatcher.class +INFO: Loading Class: io/netty/channel/group/ChannelMatchers$CompositeMatcher.class +INFO: Loading Class: io/netty/channel/group/CombinedIterator.class +INFO: Loading Class: io/netty/channel/group/DefaultChannelGroupFuture$1.class +INFO: Loading Class: io/netty/channel/ChannelFlushPromiseNotifier$DefaultFlushCheckpoint.class +INFO: Loading Class: io/netty/channel/ChannelOutboundHandlerAdapter.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$7.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$1.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$1.class +INFO: Loading Class: io/netty/channel/PendingWriteQueue$1.class +INFO: Loading Class: io/netty/channel/CompleteChannelFuture.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$7.class +INFO: Loading Class: io/netty/channel/DefaultMaxMessagesRecvByteBufAllocator$MaxMessageHandle.class +INFO: Loading Class: io/netty/channel/DefaultEventLoopGroup.class +INFO: Loading Class: io/netty/channel/MaxMessagesRecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer.class +INFO: Loading Class: io/netty/channel/CoalescingBufferQueue.class +INFO: Loading Class: io/netty/channel/DefaultMaxBytesRecvByteBufAllocator.class +INFO: Loading Class: io/netty/channel/PendingWriteQueue.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$5.class +INFO: Loading Class: io/netty/channel/pool/FixedChannelPool$4.class +INFO: Loading Class: io/netty/channel/pool/ChannelPoolMap.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool.class +INFO: Loading Class: io/netty/channel/pool/AbstractChannelPoolMap.class +INFO: Loading Class: io/netty/channel/pool/SimpleChannelPool$3.class +INFO: Loading Class: io/netty/channel/pool/ChannelHealthChecker.class +INFO: Loading Class: io/netty/channel/AbstractChannel$AbstractUnsafe$5.class +INFO: Loading Class: io/netty/channel/ChannelHandlerAdapter.class +INFO: Loading Class: io/netty/channel/unix/Errors$NativeIoException.class +INFO: Loading Class: io/netty/channel/unix/ServerDomainSocketChannel.class +INFO: Loading Class: io/netty/channel/unix/DatagramSocketAddress.class +INFO: Loading Class: io/netty/channel/unix/Errors.class +INFO: Loading Class: io/netty/channel/unix/Errors$NativeConnectException.class +INFO: Loading Class: io/netty/channel/unix/DomainSocketChannelConfig.class +INFO: Loading Class: io/netty/channel/unix/FileDescriptor.class +INFO: Loading Class: io/netty/channel/AbstractEventLoop.class +INFO: Loading Class: io/netty/channel/ChannelFutureListener.class +INFO: Loading Class: io/netty/channel/DefaultChannelPipeline$TailContext.class +INFO: Loading Class: io/netty/channel/AbstractChannelHandlerContext$3.class +INFO: Loading Class: io/netty/channel/ChannelProgressiveFutureListener.class +INFO: Loading Class: io/netty/channel/sctp/SctpChannel.class +INFO: Loading Class: io/netty/channel/epoll/AbstractEpollServerChannel$EpollServerSocketUnsafe.class +INFO: Loading Class: io/netty/channel/ChannelOutboundBuffer$Entry$1.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/21.0/3a3d111be1be1b745edfa7d91678a12d7ed38709/guava-21.0.jar +INFO: Loading Class: com/google/common/annotations/Beta.class +INFO: Loading Class: com/google/common/annotations/GwtCompatible.class +INFO: Loading Class: com/google/common/annotations/GwtIncompatible.class +INFO: Loading Class: com/google/common/annotations/VisibleForTesting.class +INFO: Loading Class: com/google/common/base/Absent.class +INFO: Loading Class: com/google/common/base/AbstractIterator$1.class +INFO: Loading Class: com/google/common/base/AbstractIterator$State.class +INFO: Loading Class: com/google/common/base/AbstractIterator.class +INFO: Loading Class: com/google/common/base/Ascii.class +INFO: Loading Class: com/google/common/base/CaseFormat$1.class +INFO: Loading Class: com/google/common/base/CaseFormat$2.class +INFO: Loading Class: com/google/common/base/CaseFormat$3.class +INFO: Loading Class: com/google/common/base/CaseFormat$4.class +INFO: Loading Class: com/google/common/base/CaseFormat$5.class +INFO: Loading Class: com/google/common/base/CaseFormat$StringConverter.class +INFO: Loading Class: com/google/common/base/CaseFormat.class +INFO: Loading Class: com/google/common/base/CharMatcher$1.class +INFO: Loading Class: com/google/common/base/CharMatcher$And.class +INFO: Loading Class: com/google/common/base/CharMatcher$Any.class +INFO: Loading Class: com/google/common/base/CharMatcher$AnyOf.class +INFO: Loading Class: com/google/common/base/CharMatcher$Ascii.class +INFO: Loading Class: com/google/common/base/CharMatcher$BitSetMatcher.class +INFO: Loading Class: com/google/common/base/CharMatcher$BreakingWhitespace.class +INFO: Loading Class: com/google/common/base/CharMatcher$Digit.class +INFO: Loading Class: com/google/common/base/CharMatcher$FastMatcher.class +INFO: Loading Class: com/google/common/base/CharMatcher$ForPredicate.class +INFO: Loading Class: com/google/common/base/CharMatcher$InRange.class +INFO: Loading Class: com/google/common/base/CharMatcher$Invisible.class +INFO: Loading Class: com/google/common/base/CharMatcher$Is.class +INFO: Loading Class: com/google/common/base/CharMatcher$IsEither.class +INFO: Loading Class: com/google/common/base/CharMatcher$IsNot.class +INFO: Loading Class: com/google/common/base/CharMatcher$JavaDigit.class +INFO: Loading Class: com/google/common/base/CharMatcher$JavaIsoControl.class +INFO: Loading Class: com/google/common/base/CharMatcher$JavaLetter.class +INFO: Loading Class: com/google/common/base/CharMatcher$JavaLetterOrDigit.class +INFO: Loading Class: com/google/common/base/CharMatcher$JavaLowerCase.class +INFO: Loading Class: com/google/common/base/CharMatcher$JavaUpperCase.class +INFO: Loading Class: com/google/common/base/CharMatcher$NamedFastMatcher.class +INFO: Loading Class: com/google/common/base/CharMatcher$Negated.class +INFO: Loading Class: com/google/common/base/CharMatcher$NegatedFastMatcher.class +INFO: Loading Class: com/google/common/base/CharMatcher$None.class +INFO: Loading Class: com/google/common/base/CharMatcher$Or.class +INFO: Loading Class: com/google/common/base/CharMatcher$RangesMatcher.class +INFO: Loading Class: com/google/common/base/CharMatcher$SingleWidth.class +INFO: Loading Class: com/google/common/base/CharMatcher$Whitespace.class +INFO: Loading Class: com/google/common/base/CharMatcher.class +INFO: Loading Class: com/google/common/base/Charsets.class +INFO: Loading Class: com/google/common/base/CommonMatcher.class +INFO: Loading Class: com/google/common/base/CommonPattern.class +INFO: Loading Class: com/google/common/base/Converter$1$1.class +INFO: Loading Class: com/google/common/base/Converter$1.class +INFO: Loading Class: com/google/common/base/Converter$ConverterComposition.class +INFO: Loading Class: com/google/common/base/Converter$FunctionBasedConverter.class +INFO: Loading Class: com/google/common/base/Converter$IdentityConverter.class +INFO: Loading Class: com/google/common/base/Converter$ReverseConverter.class +INFO: Loading Class: com/google/common/base/Converter.class +INFO: Loading Class: com/google/common/base/Defaults.class +INFO: Loading Class: com/google/common/base/Enums$StringConverter.class +INFO: Loading Class: com/google/common/base/Enums.class +INFO: Loading Class: com/google/common/base/Equivalence$1.class +INFO: Loading Class: com/google/common/base/Equivalence$Equals.class +INFO: Loading Class: com/google/common/base/Equivalence$EquivalentToPredicate.class +INFO: Loading Class: com/google/common/base/Equivalence$Identity.class +INFO: Loading Class: com/google/common/base/Equivalence$Wrapper.class +INFO: Loading Class: com/google/common/base/Equivalence.class +INFO: Loading Class: com/google/common/base/ExtraObjectsMethodsForWeb.class +INFO: Loading Class: com/google/common/base/FinalizablePhantomReference.class +INFO: Loading Class: com/google/common/base/FinalizableReference.class +INFO: Loading Class: com/google/common/base/FinalizableReferenceQueue$DecoupledLoader.class +INFO: Loading Class: com/google/common/base/FinalizableReferenceQueue$DirectLoader.class +INFO: Loading Class: com/google/common/base/FinalizableReferenceQueue$FinalizerLoader.class +INFO: Loading Class: com/google/common/base/FinalizableReferenceQueue$SystemLoader.class +INFO: Loading Class: com/google/common/base/FinalizableReferenceQueue.class +INFO: Loading Class: com/google/common/base/FinalizableSoftReference.class +INFO: Loading Class: com/google/common/base/FinalizableWeakReference.class +INFO: Loading Class: com/google/common/base/Function.class +INFO: Loading Class: com/google/common/base/FunctionalEquivalence.class +INFO: Loading Class: com/google/common/base/Functions$1.class +INFO: Loading Class: com/google/common/base/Functions$ConstantFunction.class +INFO: Loading Class: com/google/common/base/Functions$ForMapWithDefault.class +INFO: Loading Class: com/google/common/base/Functions$FunctionComposition.class +INFO: Loading Class: com/google/common/base/Functions$FunctionForMapNoDefault.class +INFO: Loading Class: com/google/common/base/Functions$IdentityFunction.class +INFO: Loading Class: com/google/common/base/Functions$PredicateFunction.class +INFO: Loading Class: com/google/common/base/Functions$SupplierFunction.class +INFO: Loading Class: com/google/common/base/Functions$ToStringFunction.class +INFO: Loading Class: com/google/common/base/Functions.class +INFO: Loading Class: com/google/common/base/JdkPattern$JdkMatcher.class +INFO: Loading Class: com/google/common/base/JdkPattern.class +INFO: Loading Class: com/google/common/base/Joiner$1.class +INFO: Loading Class: com/google/common/base/Joiner$2.class +INFO: Loading Class: com/google/common/base/Joiner$3.class +INFO: Loading Class: com/google/common/base/Joiner$MapJoiner.class +INFO: Loading Class: com/google/common/base/Joiner.class +INFO: Loading Class: com/google/common/base/MoreObjects$1.class +INFO: Loading Class: com/google/common/base/MoreObjects$ToStringHelper$ValueHolder.class +INFO: Loading Class: com/google/common/base/MoreObjects$ToStringHelper.class +INFO: Loading Class: com/google/common/base/MoreObjects.class +INFO: Loading Class: com/google/common/base/Objects.class +INFO: Loading Class: com/google/common/base/Optional$1$1.class +INFO: Loading Class: com/google/common/base/Optional$1.class +INFO: Loading Class: com/google/common/base/Optional.class +INFO: Loading Class: com/google/common/base/PairwiseEquivalence.class +INFO: Loading Class: com/google/common/base/PatternCompiler.class +INFO: Loading Class: com/google/common/base/Platform$1.class +INFO: Loading Class: com/google/common/base/Platform$JdkPatternCompiler.class +INFO: Loading Class: com/google/common/base/Platform.class +INFO: Loading Class: com/google/common/base/Preconditions.class +INFO: Loading Class: com/google/common/base/Predicate.class +INFO: Loading Class: com/google/common/base/Predicates$1.class +INFO: Loading Class: com/google/common/base/Predicates$AndPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$CompositionPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$ContainsPatternFromStringPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$ContainsPatternPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$InPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$InstanceOfPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$IsEqualToPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$NotPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$ObjectPredicate$1.class +INFO: Loading Class: com/google/common/base/Predicates$ObjectPredicate$2.class +INFO: Loading Class: com/google/common/base/Predicates$ObjectPredicate$3.class +INFO: Loading Class: com/google/common/base/Predicates$ObjectPredicate$4.class +INFO: Loading Class: com/google/common/base/Predicates$ObjectPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$OrPredicate.class +INFO: Loading Class: com/google/common/base/Predicates$SubtypeOfPredicate.class +INFO: Loading Class: com/google/common/base/Predicates.class +INFO: Loading Class: com/google/common/base/Present.class +INFO: Loading Class: com/google/common/base/SmallCharMatcher.class +INFO: Loading Class: com/google/common/base/Splitter$1$1.class +INFO: Loading Class: com/google/common/base/Splitter$1.class +INFO: Loading Class: com/google/common/base/Splitter$2$1.class +INFO: Loading Class: com/google/common/base/Splitter$2.class +INFO: Loading Class: com/google/common/base/Splitter$3$1.class +INFO: Loading Class: com/google/common/base/Splitter$3.class +INFO: Loading Class: com/google/common/base/Splitter$4$1.class +INFO: Loading Class: com/google/common/base/Splitter$4.class +INFO: Loading Class: com/google/common/base/Splitter$5.class +INFO: Loading Class: com/google/common/base/Splitter$MapSplitter.class +INFO: Loading Class: com/google/common/base/Splitter$SplittingIterator.class +INFO: Loading Class: com/google/common/base/Splitter$Strategy.class +INFO: Loading Class: com/google/common/base/Splitter.class +INFO: Loading Class: com/google/common/base/StandardSystemProperty.class +INFO: Loading Class: com/google/common/base/Stopwatch$1.class +INFO: Loading Class: com/google/common/base/Stopwatch.class +INFO: Loading Class: com/google/common/base/Strings.class +INFO: Loading Class: com/google/common/base/Supplier.class +INFO: Loading Class: com/google/common/base/Suppliers$ExpiringMemoizingSupplier.class +INFO: Loading Class: com/google/common/base/Suppliers$MemoizingSupplier.class +INFO: Loading Class: com/google/common/base/Suppliers$NonSerializableMemoizingSupplier.class +INFO: Loading Class: com/google/common/base/Suppliers$SupplierComposition.class +INFO: Loading Class: com/google/common/base/Suppliers$SupplierFunction.class +INFO: Loading Class: com/google/common/base/Suppliers$SupplierFunctionImpl.class +INFO: Loading Class: com/google/common/base/Suppliers$SupplierOfInstance.class +INFO: Loading Class: com/google/common/base/Suppliers$ThreadSafeSupplier.class +INFO: Loading Class: com/google/common/base/Suppliers.class +INFO: Loading Class: com/google/common/base/Throwables$1.class +INFO: Loading Class: com/google/common/base/Throwables.class +INFO: Loading Class: com/google/common/base/Ticker$1.class +INFO: Loading Class: com/google/common/base/Ticker.class +INFO: Loading Class: com/google/common/base/Utf8.class +INFO: Loading Class: com/google/common/base/Verify.class +INFO: Loading Class: com/google/common/base/VerifyException.class +INFO: Loading Class: com/google/common/base/internal/Finalizer.class +INFO: Loading Class: com/google/common/base/package-info.class +INFO: Loading Class: com/google/common/cache/AbstractCache$SimpleStatsCounter.class +INFO: Loading Class: com/google/common/cache/AbstractCache$StatsCounter.class +INFO: Loading Class: com/google/common/cache/AbstractCache.class +INFO: Loading Class: com/google/common/cache/AbstractLoadingCache.class +INFO: Loading Class: com/google/common/cache/Cache.class +INFO: Loading Class: com/google/common/cache/CacheBuilder$1.class +INFO: Loading Class: com/google/common/cache/CacheBuilder$2.class +INFO: Loading Class: com/google/common/cache/CacheBuilder$3.class +INFO: Loading Class: com/google/common/cache/CacheBuilder$NullListener.class +INFO: Loading Class: com/google/common/cache/CacheBuilder$OneWeigher.class +INFO: Loading Class: com/google/common/cache/CacheBuilder.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$1.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$AccessDurationParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$ConcurrencyLevelParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$DurationParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$InitialCapacityParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$IntegerParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$KeyStrengthParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$LongParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$MaximumSizeParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$MaximumWeightParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$RecordStatsParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$RefreshDurationParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$ValueParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$ValueStrengthParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec$WriteDurationParser.class +INFO: Loading Class: com/google/common/cache/CacheBuilderSpec.class +INFO: Loading Class: com/google/common/cache/CacheLoader$1$1.class +INFO: Loading Class: com/google/common/cache/CacheLoader$1.class +INFO: Loading Class: com/google/common/cache/CacheLoader$FunctionToCacheLoader.class +INFO: Loading Class: com/google/common/cache/CacheLoader$InvalidCacheLoadException.class +INFO: Loading Class: com/google/common/cache/CacheLoader$SupplierToCacheLoader.class +INFO: Loading Class: com/google/common/cache/CacheLoader$UnsupportedLoadingOperationException.class +INFO: Loading Class: com/google/common/cache/CacheLoader.class +INFO: Loading Class: com/google/common/cache/CacheStats.class +INFO: Loading Class: com/google/common/cache/ForwardingCache$SimpleForwardingCache.class +INFO: Loading Class: com/google/common/cache/ForwardingCache.class +INFO: Loading Class: com/google/common/cache/ForwardingLoadingCache$SimpleForwardingLoadingCache.class +INFO: Loading Class: com/google/common/cache/ForwardingLoadingCache.class +INFO: Loading Class: com/google/common/cache/LoadingCache.class +INFO: Loading Class: com/google/common/cache/LocalCache$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$2.class +INFO: Loading Class: com/google/common/cache/LocalCache$AbstractCacheSet.class +INFO: Loading Class: com/google/common/cache/LocalCache$AbstractReferenceEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$AccessQueue$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$AccessQueue$2.class +INFO: Loading Class: com/google/common/cache/LocalCache$AccessQueue.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$2.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$3.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$4.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$5.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$6.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$7.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory$8.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryFactory.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntryIterator.class +INFO: Loading Class: com/google/common/cache/LocalCache$EntrySet.class +INFO: Loading Class: com/google/common/cache/LocalCache$HashIterator.class +INFO: Loading Class: com/google/common/cache/LocalCache$KeyIterator.class +INFO: Loading Class: com/google/common/cache/LocalCache$KeySet.class +INFO: Loading Class: com/google/common/cache/LocalCache$LoadingSerializationProxy.class +INFO: Loading Class: com/google/common/cache/LocalCache$LoadingValueReference$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$LoadingValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$LocalLoadingCache.class +INFO: Loading Class: com/google/common/cache/LocalCache$LocalManualCache$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$LocalManualCache.class +INFO: Loading Class: com/google/common/cache/LocalCache$ManualSerializationProxy.class +INFO: Loading Class: com/google/common/cache/LocalCache$NullEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$ReferenceEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$Segment$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$Segment.class +INFO: Loading Class: com/google/common/cache/LocalCache$SoftValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$Strength$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$Strength$2.class +INFO: Loading Class: com/google/common/cache/LocalCache$Strength$3.class +INFO: Loading Class: com/google/common/cache/LocalCache$Strength.class +INFO: Loading Class: com/google/common/cache/LocalCache$StrongAccessEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$StrongAccessWriteEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$StrongEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$StrongValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$StrongWriteEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$ValueIterator.class +INFO: Loading Class: com/google/common/cache/LocalCache$ValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$Values.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeakAccessEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeakAccessWriteEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeakEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeakValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeakWriteEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeightedSoftValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeightedStrongValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$WeightedWeakValueReference.class +INFO: Loading Class: com/google/common/cache/LocalCache$WriteQueue$1.class +INFO: Loading Class: com/google/common/cache/LocalCache$WriteQueue$2.class +INFO: Loading Class: com/google/common/cache/LocalCache$WriteQueue.class +INFO: Loading Class: com/google/common/cache/LocalCache$WriteThroughEntry.class +INFO: Loading Class: com/google/common/cache/LocalCache.class +INFO: Loading Class: com/google/common/cache/LongAddable.class +INFO: Loading Class: com/google/common/cache/LongAddables$1.class +INFO: Loading Class: com/google/common/cache/LongAddables$2.class +INFO: Loading Class: com/google/common/cache/LongAddables$PureJavaLongAddable.class +INFO: Loading Class: com/google/common/cache/LongAddables.class +INFO: Loading Class: com/google/common/cache/LongAdder.class +INFO: Loading Class: com/google/common/cache/RemovalCause$1.class +INFO: Loading Class: com/google/common/cache/RemovalCause$2.class +INFO: Loading Class: com/google/common/cache/RemovalCause$3.class +INFO: Loading Class: com/google/common/cache/RemovalCause$4.class +INFO: Loading Class: com/google/common/cache/RemovalCause$5.class +INFO: Loading Class: com/google/common/cache/RemovalCause.class +INFO: Loading Class: com/google/common/cache/RemovalListener.class +INFO: Loading Class: com/google/common/cache/RemovalListeners$1$1.class +INFO: Loading Class: com/google/common/cache/RemovalListeners$1.class +INFO: Loading Class: com/google/common/cache/RemovalListeners.class +INFO: Loading Class: com/google/common/cache/RemovalNotification.class +INFO: Loading Class: com/google/common/cache/Striped64$1.class +INFO: Loading Class: com/google/common/cache/Striped64$Cell.class +INFO: Loading Class: com/google/common/cache/Striped64.class +INFO: Loading Class: com/google/common/cache/Weigher.class +INFO: Loading Class: com/google/common/cache/package-info.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap$1.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap$BiMapEntry.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap$EntrySet.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap$Inverse.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap$KeySet.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap$ValueSet.class +INFO: Loading Class: com/google/common/collect/AbstractBiMap.class +INFO: Loading Class: com/google/common/collect/AbstractIndexedListIterator.class +INFO: Loading Class: com/google/common/collect/AbstractIterator$1.class +INFO: Loading Class: com/google/common/collect/AbstractIterator$State.class +INFO: Loading Class: com/google/common/collect/AbstractIterator.class +INFO: Loading Class: com/google/common/collect/AbstractListMultimap.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$1.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$2.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$AsMap$AsMapEntries.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$AsMap$AsMapIterator.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$AsMap.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$Itr.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$KeySet$1.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$KeySet.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$NavigableAsMap.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$NavigableKeySet.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$RandomAccessWrappedList.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$SortedAsMap.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$SortedKeySet.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection$WrappedIterator.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedList$WrappedListIterator.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedList.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedNavigableSet.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedSet.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap$WrappedSortedSet.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultimap.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultiset$1$1.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultiset$1.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultiset$MapBasedMultisetIterator.class +INFO: Loading Class: com/google/common/collect/AbstractMapBasedMultiset.class +INFO: Loading Class: com/google/common/collect/AbstractMapEntry.class +INFO: Loading Class: com/google/common/collect/AbstractMultimap$1.class +INFO: Loading Class: com/google/common/collect/AbstractMultimap$Entries.class +INFO: Loading Class: com/google/common/collect/AbstractMultimap$EntrySet.class +INFO: Loading Class: com/google/common/collect/AbstractMultimap$Values.class +INFO: Loading Class: com/google/common/collect/AbstractMultimap.class +INFO: Loading Class: com/google/common/collect/AbstractMultiset$ElementSet.class +INFO: Loading Class: com/google/common/collect/AbstractMultiset$EntrySet.class +INFO: Loading Class: com/google/common/collect/AbstractMultiset.class +INFO: Loading Class: com/google/common/collect/AbstractNavigableMap$1.class +INFO: Loading Class: com/google/common/collect/AbstractNavigableMap$DescendingMap.class +INFO: Loading Class: com/google/common/collect/AbstractNavigableMap.class +INFO: Loading Class: com/google/common/collect/AbstractRangeSet.class +INFO: Loading Class: com/google/common/collect/AbstractSequentialIterator.class +INFO: Loading Class: com/google/common/collect/AbstractSetMultimap.class +INFO: Loading Class: com/google/common/collect/AbstractSortedKeySortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/AbstractSortedMultiset$1DescendingMultisetImpl.class +INFO: Loading Class: com/google/common/collect/AbstractSortedMultiset.class +INFO: Loading Class: com/google/common/collect/AbstractSortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/AbstractTable$1.class +INFO: Loading Class: com/google/common/collect/AbstractTable$CellSet.class +INFO: Loading Class: com/google/common/collect/AbstractTable$Values.class +INFO: Loading Class: com/google/common/collect/AbstractTable.class +INFO: Loading Class: com/google/common/collect/AllEqualOrdering.class +INFO: Loading Class: com/google/common/collect/ArrayListMultimap.class +INFO: Loading Class: com/google/common/collect/ArrayTable$1.class +INFO: Loading Class: com/google/common/collect/ArrayTable$2.class +INFO: Loading Class: com/google/common/collect/ArrayTable$3.class +INFO: Loading Class: com/google/common/collect/ArrayTable$ArrayMap$1.class +INFO: Loading Class: com/google/common/collect/ArrayTable$ArrayMap$2.class +INFO: Loading Class: com/google/common/collect/ArrayTable$ArrayMap.class +INFO: Loading Class: com/google/common/collect/ArrayTable$Column.class +INFO: Loading Class: com/google/common/collect/ArrayTable$ColumnMap.class +INFO: Loading Class: com/google/common/collect/ArrayTable$Row.class +INFO: Loading Class: com/google/common/collect/ArrayTable$RowMap.class +INFO: Loading Class: com/google/common/collect/ArrayTable.class +INFO: Loading Class: com/google/common/collect/BiMap.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$1$1.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$1.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$2$1.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$2.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$InOrderIterator.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$PostOrderIterator.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser$PreOrderIterator.class +INFO: Loading Class: com/google/common/collect/BinaryTreeTraverser.class +INFO: Loading Class: com/google/common/collect/BoundType$1.class +INFO: Loading Class: com/google/common/collect/BoundType$2.class +INFO: Loading Class: com/google/common/collect/BoundType.class +INFO: Loading Class: com/google/common/collect/ByFunctionOrdering.class +INFO: Loading Class: com/google/common/collect/CartesianList$1.class +INFO: Loading Class: com/google/common/collect/CartesianList.class +INFO: Loading Class: com/google/common/collect/ClassToInstanceMap.class +INFO: Loading Class: com/google/common/collect/CollectCollectors.class +INFO: Loading Class: com/google/common/collect/CollectPreconditions.class +INFO: Loading Class: com/google/common/collect/CollectSpliterators$1.class +INFO: Loading Class: com/google/common/collect/CollectSpliterators$1FlatMapSpliterator.class +INFO: Loading Class: com/google/common/collect/CollectSpliterators$1Splitr.class +INFO: Loading Class: com/google/common/collect/CollectSpliterators$1WithCharacteristics.class +INFO: Loading Class: com/google/common/collect/CollectSpliterators.class +INFO: Loading Class: com/google/common/collect/Collections2$1.class +INFO: Loading Class: com/google/common/collect/Collections2$FilteredCollection.class +INFO: Loading Class: com/google/common/collect/Collections2$OrderedPermutationCollection.class +INFO: Loading Class: com/google/common/collect/Collections2$OrderedPermutationIterator.class +INFO: Loading Class: com/google/common/collect/Collections2$PermutationCollection.class +INFO: Loading Class: com/google/common/collect/Collections2$PermutationIterator.class +INFO: Loading Class: com/google/common/collect/Collections2$TransformedCollection.class +INFO: Loading Class: com/google/common/collect/Collections2.class +INFO: Loading Class: com/google/common/collect/ComparatorOrdering.class +INFO: Loading Class: com/google/common/collect/Comparators.class +INFO: Loading Class: com/google/common/collect/ComparisonChain$1.class +INFO: Loading Class: com/google/common/collect/ComparisonChain$InactiveComparisonChain.class +INFO: Loading Class: com/google/common/collect/ComparisonChain.class +INFO: Loading Class: com/google/common/collect/CompoundOrdering.class +INFO: Loading Class: com/google/common/collect/ComputationException.class +INFO: Loading Class: com/google/common/collect/ConcurrentHashMultiset$1.class +INFO: Loading Class: com/google/common/collect/ConcurrentHashMultiset$2.class +INFO: Loading Class: com/google/common/collect/ConcurrentHashMultiset$3.class +INFO: Loading Class: com/google/common/collect/ConcurrentHashMultiset$EntrySet.class +INFO: Loading Class: com/google/common/collect/ConcurrentHashMultiset$FieldSettersHolder.class +INFO: Loading Class: com/google/common/collect/ConcurrentHashMultiset.class +INFO: Loading Class: com/google/common/collect/ConsumingQueueIterator.class +INFO: Loading Class: com/google/common/collect/ContiguousSet.class +INFO: Loading Class: com/google/common/collect/Count.class +INFO: Loading Class: com/google/common/collect/Cut$1.class +INFO: Loading Class: com/google/common/collect/Cut$AboveAll.class +INFO: Loading Class: com/google/common/collect/Cut$AboveValue.class +INFO: Loading Class: com/google/common/collect/Cut$BelowAll.class +INFO: Loading Class: com/google/common/collect/Cut$BelowValue.class +INFO: Loading Class: com/google/common/collect/Cut.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$1.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$Column.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$ColumnMap.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$ImmutableArrayMap$1.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$ImmutableArrayMap.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$Row.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable$RowMap.class +INFO: Loading Class: com/google/common/collect/DenseImmutableTable.class +INFO: Loading Class: com/google/common/collect/DescendingImmutableSortedMultiset.class +INFO: Loading Class: com/google/common/collect/DescendingImmutableSortedSet.class +INFO: Loading Class: com/google/common/collect/DescendingMultiset$1EntrySetImpl.class +INFO: Loading Class: com/google/common/collect/DescendingMultiset.class +INFO: Loading Class: com/google/common/collect/DiscreteDomain$BigIntegerDomain.class +INFO: Loading Class: com/google/common/collect/DiscreteDomain$IntegerDomain.class +INFO: Loading Class: com/google/common/collect/DiscreteDomain$LongDomain.class +INFO: Loading Class: com/google/common/collect/DiscreteDomain.class +INFO: Loading Class: com/google/common/collect/EmptyContiguousSet$1.class +INFO: Loading Class: com/google/common/collect/EmptyContiguousSet$SerializedForm.class +INFO: Loading Class: com/google/common/collect/EmptyContiguousSet.class +INFO: Loading Class: com/google/common/collect/EmptyImmutableListMultimap.class +INFO: Loading Class: com/google/common/collect/EmptyImmutableSetMultimap.class +INFO: Loading Class: com/google/common/collect/EnumBiMap.class +INFO: Loading Class: com/google/common/collect/EnumHashBiMap.class +INFO: Loading Class: com/google/common/collect/EnumMultiset.class +INFO: Loading Class: com/google/common/collect/EvictingQueue.class +INFO: Loading Class: com/google/common/collect/ExplicitOrdering.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$AsMap$1EntrySetImpl$1.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$AsMap$1EntrySetImpl.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$AsMap$1KeySetImpl.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$AsMap$1ValuesImpl.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$AsMap.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$Keys$1$1.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$Keys$1.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$Keys.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap$ValuePredicate.class +INFO: Loading Class: com/google/common/collect/FilteredEntryMultimap.class +INFO: Loading Class: com/google/common/collect/FilteredEntrySetMultimap.class +INFO: Loading Class: com/google/common/collect/FilteredKeyListMultimap.class +INFO: Loading Class: com/google/common/collect/FilteredKeyMultimap$AddRejectingList.class +INFO: Loading Class: com/google/common/collect/FilteredKeyMultimap$AddRejectingSet.class +INFO: Loading Class: com/google/common/collect/FilteredKeyMultimap$Entries.class +INFO: Loading Class: com/google/common/collect/FilteredKeyMultimap.class +INFO: Loading Class: com/google/common/collect/FilteredKeySetMultimap$EntrySet.class +INFO: Loading Class: com/google/common/collect/FilteredKeySetMultimap.class +INFO: Loading Class: com/google/common/collect/FilteredMultimap.class +INFO: Loading Class: com/google/common/collect/FilteredMultimapValues.class +INFO: Loading Class: com/google/common/collect/FilteredSetMultimap.class +INFO: Loading Class: com/google/common/collect/FluentIterable$1.class +INFO: Loading Class: com/google/common/collect/FluentIterable$2.class +INFO: Loading Class: com/google/common/collect/FluentIterable$FromIterableFunction.class +INFO: Loading Class: com/google/common/collect/FluentIterable.class +INFO: Loading Class: com/google/common/collect/ForwardingBlockingDeque.class +INFO: Loading Class: com/google/common/collect/ForwardingCollection.class +INFO: Loading Class: com/google/common/collect/ForwardingConcurrentMap.class +INFO: Loading Class: com/google/common/collect/ForwardingDeque.class +INFO: Loading Class: com/google/common/collect/ForwardingImmutableCollection.class +INFO: Loading Class: com/google/common/collect/ForwardingImmutableList.class +INFO: Loading Class: com/google/common/collect/ForwardingImmutableMap.class +INFO: Loading Class: com/google/common/collect/ForwardingImmutableSet.class +INFO: Loading Class: com/google/common/collect/ForwardingIterator.class +INFO: Loading Class: com/google/common/collect/ForwardingList.class +INFO: Loading Class: com/google/common/collect/ForwardingListIterator.class +INFO: Loading Class: com/google/common/collect/ForwardingListMultimap.class +INFO: Loading Class: com/google/common/collect/ForwardingMap$StandardEntrySet.class +INFO: Loading Class: com/google/common/collect/ForwardingMap$StandardKeySet.class +INFO: Loading Class: com/google/common/collect/ForwardingMap$StandardValues.class +INFO: Loading Class: com/google/common/collect/ForwardingMap.class +INFO: Loading Class: com/google/common/collect/ForwardingMapEntry.class +INFO: Loading Class: com/google/common/collect/ForwardingMultimap.class +INFO: Loading Class: com/google/common/collect/ForwardingMultiset$StandardElementSet.class +INFO: Loading Class: com/google/common/collect/ForwardingMultiset.class +INFO: Loading Class: com/google/common/collect/ForwardingNavigableMap$StandardDescendingMap$1.class +INFO: Loading Class: com/google/common/collect/ForwardingNavigableMap$StandardDescendingMap.class +INFO: Loading Class: com/google/common/collect/ForwardingNavigableMap$StandardNavigableKeySet.class +INFO: Loading Class: com/google/common/collect/ForwardingNavigableMap.class +INFO: Loading Class: com/google/common/collect/ForwardingNavigableSet$StandardDescendingSet.class +INFO: Loading Class: com/google/common/collect/ForwardingNavigableSet.class +INFO: Loading Class: com/google/common/collect/ForwardingObject.class +INFO: Loading Class: com/google/common/collect/ForwardingQueue.class +INFO: Loading Class: com/google/common/collect/ForwardingSet.class +INFO: Loading Class: com/google/common/collect/ForwardingSetMultimap.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedMap$StandardKeySet.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedMap.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedMultiset$StandardDescendingMultiset.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedMultiset$StandardElementSet.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedMultiset.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedSet.class +INFO: Loading Class: com/google/common/collect/ForwardingSortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/ForwardingTable.class +INFO: Loading Class: com/google/common/collect/GeneralRange.class +INFO: Loading Class: com/google/common/collect/GwtTransient.class +INFO: Loading Class: com/google/common/collect/HashBasedTable$Factory.class +INFO: Loading Class: com/google/common/collect/HashBasedTable.class +INFO: Loading Class: com/google/common/collect/HashBiMap$1$MapEntry.class +INFO: Loading Class: com/google/common/collect/HashBiMap$1.class +INFO: Loading Class: com/google/common/collect/HashBiMap$BiEntry.class +INFO: Loading Class: com/google/common/collect/HashBiMap$Inverse$1$InverseEntry.class +INFO: Loading Class: com/google/common/collect/HashBiMap$Inverse$1.class +INFO: Loading Class: com/google/common/collect/HashBiMap$Inverse$InverseKeySet$1.class +INFO: Loading Class: com/google/common/collect/HashBiMap$Inverse$InverseKeySet.class +INFO: Loading Class: com/google/common/collect/HashBiMap$Inverse.class +INFO: Loading Class: com/google/common/collect/HashBiMap$InverseSerializedForm.class +INFO: Loading Class: com/google/common/collect/HashBiMap$Itr.class +INFO: Loading Class: com/google/common/collect/HashBiMap$KeySet$1.class +INFO: Loading Class: com/google/common/collect/HashBiMap$KeySet.class +INFO: Loading Class: com/google/common/collect/HashBiMap.class +INFO: Loading Class: com/google/common/collect/HashMultimap.class +INFO: Loading Class: com/google/common/collect/HashMultiset.class +INFO: Loading Class: com/google/common/collect/Hashing.class +INFO: Loading Class: com/google/common/collect/ImmutableAsList$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableAsList.class +INFO: Loading Class: com/google/common/collect/ImmutableBiMap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableBiMap$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableBiMap.class +INFO: Loading Class: com/google/common/collect/ImmutableBiMapFauxverideShim.class +INFO: Loading Class: com/google/common/collect/ImmutableClassToInstanceMap$1.class +INFO: Loading Class: com/google/common/collect/ImmutableClassToInstanceMap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableClassToInstanceMap.class +INFO: Loading Class: com/google/common/collect/ImmutableCollection$ArrayBasedBuilder.class +INFO: Loading Class: com/google/common/collect/ImmutableCollection$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableCollection.class +INFO: Loading Class: com/google/common/collect/ImmutableEntry.class +INFO: Loading Class: com/google/common/collect/ImmutableEnumMap$1.class +INFO: Loading Class: com/google/common/collect/ImmutableEnumMap$EnumSerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableEnumMap.class +INFO: Loading Class: com/google/common/collect/ImmutableEnumSet$1.class +INFO: Loading Class: com/google/common/collect/ImmutableEnumSet$EnumSerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableEnumSet.class +INFO: Loading Class: com/google/common/collect/ImmutableList$1.class +INFO: Loading Class: com/google/common/collect/ImmutableList$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableList$ReverseImmutableList.class +INFO: Loading Class: com/google/common/collect/ImmutableList$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableList$SubList.class +INFO: Loading Class: com/google/common/collect/ImmutableList.class +INFO: Loading Class: com/google/common/collect/ImmutableListMultimap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableListMultimap.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$1.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$IteratorBasedImmutableMap$1EntrySetImpl.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$IteratorBasedImmutableMap.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$MapViewOfValuesAsSingletonSets$1$1.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$MapViewOfValuesAsSingletonSets$1.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$MapViewOfValuesAsSingletonSets.class +INFO: Loading Class: com/google/common/collect/ImmutableMap$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableMap.class +INFO: Loading Class: com/google/common/collect/ImmutableMapEntry$NonTerminalImmutableBiMapEntry.class +INFO: Loading Class: com/google/common/collect/ImmutableMapEntry$NonTerminalImmutableMapEntry.class +INFO: Loading Class: com/google/common/collect/ImmutableMapEntry.class +INFO: Loading Class: com/google/common/collect/ImmutableMapEntrySet$EntrySetSerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableMapEntrySet$RegularEntrySet.class +INFO: Loading Class: com/google/common/collect/ImmutableMapEntrySet.class +INFO: Loading Class: com/google/common/collect/ImmutableMapKeySet$KeySetSerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableMapKeySet.class +INFO: Loading Class: com/google/common/collect/ImmutableMapValues$1.class +INFO: Loading Class: com/google/common/collect/ImmutableMapValues$2.class +INFO: Loading Class: com/google/common/collect/ImmutableMapValues$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableMapValues.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$1.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$2.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$EntryCollection.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$FieldSettersHolder.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$Itr.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$Keys.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap$Values.class +INFO: Loading Class: com/google/common/collect/ImmutableMultimap.class +INFO: Loading Class: com/google/common/collect/ImmutableMultiset$1.class +INFO: Loading Class: com/google/common/collect/ImmutableMultiset$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableMultiset$EntrySet.class +INFO: Loading Class: com/google/common/collect/ImmutableMultiset$EntrySetSerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableMultiset$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableMultiset.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeMap$1.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeMap$2.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeMap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeMap$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeMap.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$1.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$AsSet$1.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$AsSet$2.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$AsSet.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$AsSetSerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$ComplementRanges.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableRangeSet.class +INFO: Loading Class: com/google/common/collect/ImmutableSet$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableSet$Indexed$1.class +INFO: Loading Class: com/google/common/collect/ImmutableSet$Indexed.class +INFO: Loading Class: com/google/common/collect/ImmutableSet$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableSet.class +INFO: Loading Class: com/google/common/collect/ImmutableSetMultimap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableSetMultimap$EntrySet.class +INFO: Loading Class: com/google/common/collect/ImmutableSetMultimap.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedAsList.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMap$1EntrySet$1.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMap$1EntrySet.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMap$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMap$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMap.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMapFauxverideShim.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMultiset$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMultiset$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMultiset.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedMultisetFauxverideShim.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedSet$1.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedSet$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedSet$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedSet.class +INFO: Loading Class: com/google/common/collect/ImmutableSortedSetFauxverideShim.class +INFO: Loading Class: com/google/common/collect/ImmutableTable$1.class +INFO: Loading Class: com/google/common/collect/ImmutableTable$Builder.class +INFO: Loading Class: com/google/common/collect/ImmutableTable$CollectorState.class +INFO: Loading Class: com/google/common/collect/ImmutableTable$MutableCell.class +INFO: Loading Class: com/google/common/collect/ImmutableTable$SerializedForm.class +INFO: Loading Class: com/google/common/collect/ImmutableTable.class +INFO: Loading Class: com/google/common/collect/Interner.class +INFO: Loading Class: com/google/common/collect/Interners$1.class +INFO: Loading Class: com/google/common/collect/Interners$InternerBuilder.class +INFO: Loading Class: com/google/common/collect/Interners$InternerFunction.class +INFO: Loading Class: com/google/common/collect/Interners$StrongInterner.class +INFO: Loading Class: com/google/common/collect/Interners$WeakInterner$Dummy.class +INFO: Loading Class: com/google/common/collect/Interners$WeakInterner.class +INFO: Loading Class: com/google/common/collect/Interners.class +INFO: Loading Class: com/google/common/collect/Iterables$1.class +INFO: Loading Class: com/google/common/collect/Iterables$10.class +INFO: Loading Class: com/google/common/collect/Iterables$11.class +INFO: Loading Class: com/google/common/collect/Iterables$12.class +INFO: Loading Class: com/google/common/collect/Iterables$13.class +INFO: Loading Class: com/google/common/collect/Iterables$2.class +INFO: Loading Class: com/google/common/collect/Iterables$3.class +INFO: Loading Class: com/google/common/collect/Iterables$4.class +INFO: Loading Class: com/google/common/collect/Iterables$5.class +INFO: Loading Class: com/google/common/collect/Iterables$6.class +INFO: Loading Class: com/google/common/collect/Iterables$7.class +INFO: Loading Class: com/google/common/collect/Iterables$8$1.class +INFO: Loading Class: com/google/common/collect/Iterables$8.class +INFO: Loading Class: com/google/common/collect/Iterables$9.class +INFO: Loading Class: com/google/common/collect/Iterables$UnmodifiableIterable.class +INFO: Loading Class: com/google/common/collect/Iterables.class +INFO: Loading Class: com/google/common/collect/Iterators$1.class +INFO: Loading Class: com/google/common/collect/Iterators$10.class +INFO: Loading Class: com/google/common/collect/Iterators$11.class +INFO: Loading Class: com/google/common/collect/Iterators$12.class +INFO: Loading Class: com/google/common/collect/Iterators$13.class +INFO: Loading Class: com/google/common/collect/Iterators$2.class +INFO: Loading Class: com/google/common/collect/Iterators$3.class +INFO: Loading Class: com/google/common/collect/Iterators$4.class +INFO: Loading Class: com/google/common/collect/Iterators$5.class +INFO: Loading Class: com/google/common/collect/Iterators$6.class +INFO: Loading Class: com/google/common/collect/Iterators$7.class +INFO: Loading Class: com/google/common/collect/Iterators$8.class +INFO: Loading Class: com/google/common/collect/Iterators$9.class +INFO: Loading Class: com/google/common/collect/Iterators$ConcatenatedIterator$1.class +INFO: Loading Class: com/google/common/collect/Iterators$ConcatenatedIterator.class +INFO: Loading Class: com/google/common/collect/Iterators$MergingIterator$1.class +INFO: Loading Class: com/google/common/collect/Iterators$MergingIterator.class +INFO: Loading Class: com/google/common/collect/Iterators$PeekingImpl.class +INFO: Loading Class: com/google/common/collect/Iterators.class +INFO: Loading Class: com/google/common/collect/LexicographicalOrdering.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultimap$1.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultimap$ValueEntry.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultimap$ValueSet$1.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultimap$ValueSet.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultimap$ValueSetLink.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultimap.class +INFO: Loading Class: com/google/common/collect/LinkedHashMultiset.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$1.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$1EntriesImpl.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$1KeySetImpl.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$1ValuesImpl$1.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$1ValuesImpl.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$DistinctKeyIterator.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$KeyList.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$Node.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$NodeIterator.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap$ValueForKeyIterator.class +INFO: Loading Class: com/google/common/collect/LinkedListMultimap.class +INFO: Loading Class: com/google/common/collect/ListMultimap.class +INFO: Loading Class: com/google/common/collect/Lists$1.class +INFO: Loading Class: com/google/common/collect/Lists$2.class +INFO: Loading Class: com/google/common/collect/Lists$AbstractListWrapper.class +INFO: Loading Class: com/google/common/collect/Lists$CharSequenceAsList.class +INFO: Loading Class: com/google/common/collect/Lists$OnePlusArrayList.class +INFO: Loading Class: com/google/common/collect/Lists$Partition.class +INFO: Loading Class: com/google/common/collect/Lists$RandomAccessListWrapper.class +INFO: Loading Class: com/google/common/collect/Lists$RandomAccessPartition.class +INFO: Loading Class: com/google/common/collect/Lists$RandomAccessReverseList.class +INFO: Loading Class: com/google/common/collect/Lists$ReverseList$1.class +INFO: Loading Class: com/google/common/collect/Lists$ReverseList.class +INFO: Loading Class: com/google/common/collect/Lists$StringAsImmutableList.class +INFO: Loading Class: com/google/common/collect/Lists$TransformingRandomAccessList$1.class +INFO: Loading Class: com/google/common/collect/Lists$TransformingRandomAccessList.class +INFO: Loading Class: com/google/common/collect/Lists$TransformingSequentialList$1.class +INFO: Loading Class: com/google/common/collect/Lists$TransformingSequentialList.class +INFO: Loading Class: com/google/common/collect/Lists$TwoPlusArrayList.class +INFO: Loading Class: com/google/common/collect/Lists.class +INFO: Loading Class: com/google/common/collect/MapDifference$ValueDifference.class +INFO: Loading Class: com/google/common/collect/MapDifference.class +INFO: Loading Class: com/google/common/collect/MapMaker.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$1.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$AbstractSerializationProxy.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$AbstractStrongKeyEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$AbstractWeakKeyEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$CleanupMapTask.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$DummyInternalEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$EntryIterator.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$EntrySet.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$HashIterator.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$InternalEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$InternalEntryHelper.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$KeyIterator.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$KeySet.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$SafeToArraySet.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$Segment.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$SerializationProxy.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$Strength$1.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$Strength$2.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$Strength.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongKeyStrongValueEntry$Helper.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongKeyStrongValueEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongKeyStrongValueSegment.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongKeyWeakValueEntry$Helper.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongKeyWeakValueEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongKeyWeakValueSegment.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$StrongValueEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$ValueIterator.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$Values.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakKeyStrongValueEntry$Helper.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakKeyStrongValueEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakKeyStrongValueSegment.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakKeyWeakValueEntry$Helper.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakKeyWeakValueEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakKeyWeakValueSegment.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakValueEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakValueReference.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WeakValueReferenceImpl.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap$WriteThroughEntry.class +INFO: Loading Class: com/google/common/collect/MapMakerInternalMap.class +INFO: Loading Class: com/google/common/collect/Maps$1.class +INFO: Loading Class: com/google/common/collect/Maps$10.class +INFO: Loading Class: com/google/common/collect/Maps$11.class +INFO: Loading Class: com/google/common/collect/Maps$2.class +INFO: Loading Class: com/google/common/collect/Maps$3.class +INFO: Loading Class: com/google/common/collect/Maps$4.class +INFO: Loading Class: com/google/common/collect/Maps$5.class +INFO: Loading Class: com/google/common/collect/Maps$6.class +INFO: Loading Class: com/google/common/collect/Maps$7.class +INFO: Loading Class: com/google/common/collect/Maps$8.class +INFO: Loading Class: com/google/common/collect/Maps$9.class +INFO: Loading Class: com/google/common/collect/Maps$AbstractFilteredMap.class +INFO: Loading Class: com/google/common/collect/Maps$Accumulator.class +INFO: Loading Class: com/google/common/collect/Maps$AsMapView$1EntrySetImpl.class +INFO: Loading Class: com/google/common/collect/Maps$AsMapView.class +INFO: Loading Class: com/google/common/collect/Maps$BiMapConverter.class +INFO: Loading Class: com/google/common/collect/Maps$DescendingMap$1EntrySetImpl.class +INFO: Loading Class: com/google/common/collect/Maps$DescendingMap.class +INFO: Loading Class: com/google/common/collect/Maps$EntryFunction$1.class +INFO: Loading Class: com/google/common/collect/Maps$EntryFunction$2.class +INFO: Loading Class: com/google/common/collect/Maps$EntryFunction.class +INFO: Loading Class: com/google/common/collect/Maps$EntrySet.class +INFO: Loading Class: com/google/common/collect/Maps$EntryTransformer.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryBiMap$1.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryBiMap.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryMap$EntrySet$1$1.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryMap$EntrySet$1.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryMap$EntrySet.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryMap$KeySet.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryMap.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryNavigableMap$1.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntryNavigableMap.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntrySortedMap$SortedKeySet.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredEntrySortedMap.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredKeyMap.class +INFO: Loading Class: com/google/common/collect/Maps$FilteredMapValues.class +INFO: Loading Class: com/google/common/collect/Maps$IteratorBasedAbstractMap$1.class +INFO: Loading Class: com/google/common/collect/Maps$IteratorBasedAbstractMap.class +INFO: Loading Class: com/google/common/collect/Maps$KeySet.class +INFO: Loading Class: com/google/common/collect/Maps$MapDifferenceImpl.class +INFO: Loading Class: com/google/common/collect/Maps$NavigableAsMapView.class +INFO: Loading Class: com/google/common/collect/Maps$NavigableKeySet.class +INFO: Loading Class: com/google/common/collect/Maps$SortedAsMapView.class +INFO: Loading Class: com/google/common/collect/Maps$SortedKeySet.class +INFO: Loading Class: com/google/common/collect/Maps$SortedMapDifferenceImpl.class +INFO: Loading Class: com/google/common/collect/Maps$TransformedEntriesMap.class +INFO: Loading Class: com/google/common/collect/Maps$TransformedEntriesNavigableMap.class +INFO: Loading Class: com/google/common/collect/Maps$TransformedEntriesSortedMap.class +INFO: Loading Class: com/google/common/collect/Maps$UnmodifiableBiMap.class +INFO: Loading Class: com/google/common/collect/Maps$UnmodifiableEntries.class +INFO: Loading Class: com/google/common/collect/Maps$UnmodifiableEntrySet.class +INFO: Loading Class: com/google/common/collect/Maps$UnmodifiableNavigableMap.class +INFO: Loading Class: com/google/common/collect/Maps$ValueDifferenceImpl.class +INFO: Loading Class: com/google/common/collect/Maps$Values.class +INFO: Loading Class: com/google/common/collect/Maps$ViewCachingAbstractMap.class +INFO: Loading Class: com/google/common/collect/Maps.class +INFO: Loading Class: com/google/common/collect/MinMaxPriorityQueue$1.class +INFO: Loading Class: com/google/common/collect/MinMaxPriorityQueue$Builder.class +INFO: Loading Class: com/google/common/collect/MinMaxPriorityQueue$Heap.class +INFO: Loading Class: com/google/common/collect/MinMaxPriorityQueue$MoveDesc.class +INFO: Loading Class: com/google/common/collect/MinMaxPriorityQueue$QueueIterator.class +INFO: Loading Class: com/google/common/collect/MinMaxPriorityQueue.class +INFO: Loading Class: com/google/common/collect/MoreCollectors$ToOptionalState.class +INFO: Loading Class: com/google/common/collect/MoreCollectors.class +INFO: Loading Class: com/google/common/collect/Multimap.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$1.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$2.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$3.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$4.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$ArrayListSupplier.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$EnumSetSupplier.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$HashSetSupplier.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$LinkedHashSetSupplier.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$LinkedListSupplier.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$ListMultimapBuilder.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys$1.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys$2.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys$3.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys$4.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys$5.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys$6.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$MultimapBuilderWithKeys.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$SetMultimapBuilder.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$SortedSetMultimapBuilder.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder$TreeSetSupplier.class +INFO: Loading Class: com/google/common/collect/MultimapBuilder.class +INFO: Loading Class: com/google/common/collect/Multimaps$AsMap$EntrySet$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$AsMap$EntrySet.class +INFO: Loading Class: com/google/common/collect/Multimaps$AsMap.class +INFO: Loading Class: com/google/common/collect/Multimaps$CustomListMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$CustomMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$CustomSetMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$CustomSortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$Entries.class +INFO: Loading Class: com/google/common/collect/Multimaps$Keys$1$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$Keys$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$Keys$KeysEntrySet.class +INFO: Loading Class: com/google/common/collect/Multimaps$Keys.class +INFO: Loading Class: com/google/common/collect/Multimaps$MapMultimap$1$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$MapMultimap$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$MapMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$TransformedEntriesListMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$TransformedEntriesMultimap$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$TransformedEntriesMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$UnmodifiableListMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$UnmodifiableMultimap$1.class +INFO: Loading Class: com/google/common/collect/Multimaps$UnmodifiableMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$UnmodifiableSetMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps$UnmodifiableSortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/Multimaps.class +INFO: Loading Class: com/google/common/collect/Multiset$Entry.class +INFO: Loading Class: com/google/common/collect/Multiset.class +INFO: Loading Class: com/google/common/collect/Multisets$1$1.class +INFO: Loading Class: com/google/common/collect/Multisets$1.class +INFO: Loading Class: com/google/common/collect/Multisets$2$1.class +INFO: Loading Class: com/google/common/collect/Multisets$2.class +INFO: Loading Class: com/google/common/collect/Multisets$3$1.class +INFO: Loading Class: com/google/common/collect/Multisets$3.class +INFO: Loading Class: com/google/common/collect/Multisets$4$1.class +INFO: Loading Class: com/google/common/collect/Multisets$4.class +INFO: Loading Class: com/google/common/collect/Multisets$5.class +INFO: Loading Class: com/google/common/collect/Multisets$AbstractEntry.class +INFO: Loading Class: com/google/common/collect/Multisets$ElementSet$1.class +INFO: Loading Class: com/google/common/collect/Multisets$ElementSet.class +INFO: Loading Class: com/google/common/collect/Multisets$EntrySet.class +INFO: Loading Class: com/google/common/collect/Multisets$FilteredMultiset$1.class +INFO: Loading Class: com/google/common/collect/Multisets$FilteredMultiset.class +INFO: Loading Class: com/google/common/collect/Multisets$ImmutableEntry.class +INFO: Loading Class: com/google/common/collect/Multisets$MultisetIteratorImpl.class +INFO: Loading Class: com/google/common/collect/Multisets$UnmodifiableMultiset.class +INFO: Loading Class: com/google/common/collect/Multisets.class +INFO: Loading Class: com/google/common/collect/MultitransformedIterator.class +INFO: Loading Class: com/google/common/collect/MutableClassToInstanceMap$1.class +INFO: Loading Class: com/google/common/collect/MutableClassToInstanceMap$2$1.class +INFO: Loading Class: com/google/common/collect/MutableClassToInstanceMap$2.class +INFO: Loading Class: com/google/common/collect/MutableClassToInstanceMap$SerializedForm.class +INFO: Loading Class: com/google/common/collect/MutableClassToInstanceMap.class +INFO: Loading Class: com/google/common/collect/NaturalOrdering.class +INFO: Loading Class: com/google/common/collect/NullsFirstOrdering.class +INFO: Loading Class: com/google/common/collect/NullsLastOrdering.class +INFO: Loading Class: com/google/common/collect/ObjectArrays.class +INFO: Loading Class: com/google/common/collect/Ordering$ArbitraryOrdering.class +INFO: Loading Class: com/google/common/collect/Ordering$ArbitraryOrderingHolder.class +INFO: Loading Class: com/google/common/collect/Ordering$IncomparableValueException.class +INFO: Loading Class: com/google/common/collect/Ordering.class +INFO: Loading Class: com/google/common/collect/PeekingIterator.class +INFO: Loading Class: com/google/common/collect/Platform.class +INFO: Loading Class: com/google/common/collect/Queues.class +INFO: Loading Class: com/google/common/collect/Range$1.class +INFO: Loading Class: com/google/common/collect/Range$2.class +INFO: Loading Class: com/google/common/collect/Range$3.class +INFO: Loading Class: com/google/common/collect/Range$RangeLexOrdering.class +INFO: Loading Class: com/google/common/collect/Range.class +INFO: Loading Class: com/google/common/collect/RangeMap.class +INFO: Loading Class: com/google/common/collect/RangeSet.class +INFO: Loading Class: com/google/common/collect/RegularContiguousSet$1.class +INFO: Loading Class: com/google/common/collect/RegularContiguousSet$2.class +INFO: Loading Class: com/google/common/collect/RegularContiguousSet$SerializedForm.class +INFO: Loading Class: com/google/common/collect/RegularContiguousSet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableAsList.class +INFO: Loading Class: com/google/common/collect/RegularImmutableBiMap$1.class +INFO: Loading Class: com/google/common/collect/RegularImmutableBiMap$Inverse$InverseEntrySet$1.class +INFO: Loading Class: com/google/common/collect/RegularImmutableBiMap$Inverse$InverseEntrySet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableBiMap$Inverse.class +INFO: Loading Class: com/google/common/collect/RegularImmutableBiMap$InverseSerializedForm.class +INFO: Loading Class: com/google/common/collect/RegularImmutableBiMap.class +INFO: Loading Class: com/google/common/collect/RegularImmutableList.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMap$KeySet$SerializedForm.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMap$KeySet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMap$Values$SerializedForm.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMap$Values.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMap.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMultiset$1.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMultiset$ElementSet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMultiset$NonTerminalEntry.class +INFO: Loading Class: com/google/common/collect/RegularImmutableMultiset.class +INFO: Loading Class: com/google/common/collect/RegularImmutableSet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableSortedMultiset.class +INFO: Loading Class: com/google/common/collect/RegularImmutableSortedSet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableTable$1.class +INFO: Loading Class: com/google/common/collect/RegularImmutableTable$CellSet.class +INFO: Loading Class: com/google/common/collect/RegularImmutableTable$Values.class +INFO: Loading Class: com/google/common/collect/RegularImmutableTable.class +INFO: Loading Class: com/google/common/collect/ReverseNaturalOrdering.class +INFO: Loading Class: com/google/common/collect/ReverseOrdering.class +INFO: Loading Class: com/google/common/collect/RowSortedTable.class +INFO: Loading Class: com/google/common/collect/Serialization$1.class +INFO: Loading Class: com/google/common/collect/Serialization$FieldSetter.class +INFO: Loading Class: com/google/common/collect/Serialization.class +INFO: Loading Class: com/google/common/collect/SetMultimap.class +INFO: Loading Class: com/google/common/collect/Sets$1.class +INFO: Loading Class: com/google/common/collect/Sets$2.class +INFO: Loading Class: com/google/common/collect/Sets$3.class +INFO: Loading Class: com/google/common/collect/Sets$4$1.class +INFO: Loading Class: com/google/common/collect/Sets$4.class +INFO: Loading Class: com/google/common/collect/Sets$Accumulator.class +INFO: Loading Class: com/google/common/collect/Sets$CartesianSet$1.class +INFO: Loading Class: com/google/common/collect/Sets$CartesianSet.class +INFO: Loading Class: com/google/common/collect/Sets$DescendingSet.class +INFO: Loading Class: com/google/common/collect/Sets$FilteredNavigableSet.class +INFO: Loading Class: com/google/common/collect/Sets$FilteredSet.class +INFO: Loading Class: com/google/common/collect/Sets$FilteredSortedSet.class +INFO: Loading Class: com/google/common/collect/Sets$ImprovedAbstractSet.class +INFO: Loading Class: com/google/common/collect/Sets$PowerSet$1.class +INFO: Loading Class: com/google/common/collect/Sets$PowerSet.class +INFO: Loading Class: com/google/common/collect/Sets$SetView.class +INFO: Loading Class: com/google/common/collect/Sets$SubSet$1.class +INFO: Loading Class: com/google/common/collect/Sets$SubSet.class +INFO: Loading Class: com/google/common/collect/Sets$UnmodifiableNavigableSet.class +INFO: Loading Class: com/google/common/collect/Sets.class +INFO: Loading Class: com/google/common/collect/SingletonImmutableBiMap.class +INFO: Loading Class: com/google/common/collect/SingletonImmutableList.class +INFO: Loading Class: com/google/common/collect/SingletonImmutableSet.class +INFO: Loading Class: com/google/common/collect/SingletonImmutableTable.class +INFO: Loading Class: com/google/common/collect/SortedIterable.class +INFO: Loading Class: com/google/common/collect/SortedIterables.class +INFO: Loading Class: com/google/common/collect/SortedLists$1.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyAbsentBehavior$1.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyAbsentBehavior$2.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyAbsentBehavior$3.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyAbsentBehavior.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyPresentBehavior$1.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyPresentBehavior$2.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyPresentBehavior$3.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyPresentBehavior$4.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyPresentBehavior$5.class +INFO: Loading Class: com/google/common/collect/SortedLists$KeyPresentBehavior.class +INFO: Loading Class: com/google/common/collect/SortedLists.class +INFO: Loading Class: com/google/common/collect/SortedMapDifference.class +INFO: Loading Class: com/google/common/collect/SortedMultiset.class +INFO: Loading Class: com/google/common/collect/SortedMultisetBridge.class +INFO: Loading Class: com/google/common/collect/SortedMultisets$ElementSet.class +INFO: Loading Class: com/google/common/collect/SortedMultisets$NavigableElementSet.class +INFO: Loading Class: com/google/common/collect/SortedMultisets.class +INFO: Loading Class: com/google/common/collect/SortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/SparseImmutableTable.class +INFO: Loading Class: com/google/common/collect/StandardRowSortedTable$1.class +INFO: Loading Class: com/google/common/collect/StandardRowSortedTable$RowSortedMap.class +INFO: Loading Class: com/google/common/collect/StandardRowSortedTable.class +INFO: Loading Class: com/google/common/collect/StandardTable$1.class +INFO: Loading Class: com/google/common/collect/StandardTable$CellIterator.class +INFO: Loading Class: com/google/common/collect/StandardTable$Column$EntrySet.class +INFO: Loading Class: com/google/common/collect/StandardTable$Column$EntrySetIterator$1EntryImpl.class +INFO: Loading Class: com/google/common/collect/StandardTable$Column$EntrySetIterator.class +INFO: Loading Class: com/google/common/collect/StandardTable$Column$KeySet.class +INFO: Loading Class: com/google/common/collect/StandardTable$Column$Values.class +INFO: Loading Class: com/google/common/collect/StandardTable$Column.class +INFO: Loading Class: com/google/common/collect/StandardTable$ColumnKeyIterator.class +INFO: Loading Class: com/google/common/collect/StandardTable$ColumnKeySet.class +INFO: Loading Class: com/google/common/collect/StandardTable$ColumnMap$ColumnMapEntrySet$1.class +INFO: Loading Class: com/google/common/collect/StandardTable$ColumnMap$ColumnMapEntrySet.class +INFO: Loading Class: com/google/common/collect/StandardTable$ColumnMap$ColumnMapValues.class +INFO: Loading Class: com/google/common/collect/StandardTable$ColumnMap.class +INFO: Loading Class: com/google/common/collect/StandardTable$Row$1.class +INFO: Loading Class: com/google/common/collect/StandardTable$Row$2.class +INFO: Loading Class: com/google/common/collect/StandardTable$Row.class +INFO: Loading Class: com/google/common/collect/StandardTable$RowMap$EntrySet$1.class +INFO: Loading Class: com/google/common/collect/StandardTable$RowMap$EntrySet.class +INFO: Loading Class: com/google/common/collect/StandardTable$RowMap.class +INFO: Loading Class: com/google/common/collect/StandardTable$TableSet.class +INFO: Loading Class: com/google/common/collect/StandardTable.class +INFO: Loading Class: com/google/common/collect/Streams$1.class +INFO: Loading Class: com/google/common/collect/Streams$1OptionalState.class +INFO: Loading Class: com/google/common/collect/Streams$1Splitr.class +INFO: Loading Class: com/google/common/collect/Streams$2.class +INFO: Loading Class: com/google/common/collect/Streams$2Splitr.class +INFO: Loading Class: com/google/common/collect/Streams$3.class +INFO: Loading Class: com/google/common/collect/Streams$3Splitr.class +INFO: Loading Class: com/google/common/collect/Streams$4.class +INFO: Loading Class: com/google/common/collect/Streams$4Splitr.class +INFO: Loading Class: com/google/common/collect/Streams$5.class +INFO: Loading Class: com/google/common/collect/Streams$DoubleFunctionWithIndex.class +INFO: Loading Class: com/google/common/collect/Streams$FunctionWithIndex.class +INFO: Loading Class: com/google/common/collect/Streams$IntFunctionWithIndex.class +INFO: Loading Class: com/google/common/collect/Streams$LongFunctionWithIndex.class +INFO: Loading Class: com/google/common/collect/Streams$MapWithIndexSpliterator.class +INFO: Loading Class: com/google/common/collect/Streams.class +INFO: Loading Class: com/google/common/collect/Synchronized$1.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedAsMap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedAsMapEntries$1$1.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedAsMapEntries$1.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedAsMapEntries.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedAsMapValues$1.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedAsMapValues.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedBiMap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedCollection.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedDeque.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedEntry.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedList.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedListMultimap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedMap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedMultimap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedMultiset.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedNavigableMap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedNavigableSet.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedObject.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedQueue.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedRandomAccessList.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedSet.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedSetMultimap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedSortedMap.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedSortedSet.class +INFO: Loading Class: com/google/common/collect/Synchronized$SynchronizedSortedSetMultimap.class +INFO: Loading Class: com/google/common/collect/Synchronized.class +INFO: Loading Class: com/google/common/collect/Table$Cell.class +INFO: Loading Class: com/google/common/collect/Table.class +INFO: Loading Class: com/google/common/collect/Tables$1.class +INFO: Loading Class: com/google/common/collect/Tables$AbstractCell.class +INFO: Loading Class: com/google/common/collect/Tables$ImmutableCell.class +INFO: Loading Class: com/google/common/collect/Tables$TransformedTable$1.class +INFO: Loading Class: com/google/common/collect/Tables$TransformedTable$2.class +INFO: Loading Class: com/google/common/collect/Tables$TransformedTable$3.class +INFO: Loading Class: com/google/common/collect/Tables$TransformedTable.class +INFO: Loading Class: com/google/common/collect/Tables$TransposeTable$1.class +INFO: Loading Class: com/google/common/collect/Tables$TransposeTable.class +INFO: Loading Class: com/google/common/collect/Tables$UnmodifiableRowSortedMap.class +INFO: Loading Class: com/google/common/collect/Tables$UnmodifiableTable.class +INFO: Loading Class: com/google/common/collect/Tables.class +INFO: Loading Class: com/google/common/collect/TopKSelector.class +INFO: Loading Class: com/google/common/collect/TransformedIterator.class +INFO: Loading Class: com/google/common/collect/TransformedListIterator.class +INFO: Loading Class: com/google/common/collect/TreeBasedTable$1.class +INFO: Loading Class: com/google/common/collect/TreeBasedTable$2.class +INFO: Loading Class: com/google/common/collect/TreeBasedTable$Factory.class +INFO: Loading Class: com/google/common/collect/TreeBasedTable$TreeRow.class +INFO: Loading Class: com/google/common/collect/TreeBasedTable.class +INFO: Loading Class: com/google/common/collect/TreeMultimap.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$1.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$2.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$3.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$4.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$Aggregate$1.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$Aggregate$2.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$Aggregate.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$AvlNode.class +INFO: Loading Class: com/google/common/collect/TreeMultiset$Reference.class +INFO: Loading Class: com/google/common/collect/TreeMultiset.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$AsMapOfRanges.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$RangeMapEntry.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$1$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$SubRangeMapAsMap$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$SubRangeMapAsMap$2.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$SubRangeMapAsMap$3.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$SubRangeMapAsMap$4.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap$SubRangeMapAsMap.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap$SubRangeMap.class +INFO: Loading Class: com/google/common/collect/TreeRangeMap.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$AsRanges.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$Complement.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$ComplementRangesByLowerBound$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$ComplementRangesByLowerBound$2.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$ComplementRangesByLowerBound.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$RangesByUpperBound$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$RangesByUpperBound$2.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$RangesByUpperBound.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$SubRangeSet.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$SubRangeSetRangesByLowerBound$1.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$SubRangeSetRangesByLowerBound$2.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet$SubRangeSetRangesByLowerBound.class +INFO: Loading Class: com/google/common/collect/TreeRangeSet.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$1.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$2$1.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$2.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$3$1.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$3.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$4.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$BreadthFirstIterator.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$PostOrderIterator.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$PostOrderNode.class +INFO: Loading Class: com/google/common/collect/TreeTraverser$PreOrderIterator.class +INFO: Loading Class: com/google/common/collect/TreeTraverser.class +INFO: Loading Class: com/google/common/collect/UnmodifiableIterator.class +INFO: Loading Class: com/google/common/collect/UnmodifiableListIterator.class +INFO: Loading Class: com/google/common/collect/UnmodifiableSortedMultiset.class +INFO: Loading Class: com/google/common/collect/UsingToStringOrdering.class +INFO: Loading Class: com/google/common/collect/WellBehavedMap$1.class +INFO: Loading Class: com/google/common/collect/WellBehavedMap$EntrySet$1$1.class +INFO: Loading Class: com/google/common/collect/WellBehavedMap$EntrySet$1.class +INFO: Loading Class: com/google/common/collect/WellBehavedMap$EntrySet.class +INFO: Loading Class: com/google/common/collect/WellBehavedMap.class +INFO: Loading Class: com/google/common/collect/package-info.class +INFO: Loading Class: com/google/common/escape/ArrayBasedCharEscaper.class +INFO: Loading Class: com/google/common/escape/ArrayBasedEscaperMap.class +INFO: Loading Class: com/google/common/escape/ArrayBasedUnicodeEscaper.class +INFO: Loading Class: com/google/common/escape/CharEscaper.class +INFO: Loading Class: com/google/common/escape/CharEscaperBuilder$CharArrayDecorator.class +INFO: Loading Class: com/google/common/escape/CharEscaperBuilder.class +INFO: Loading Class: com/google/common/escape/Escaper$1.class +INFO: Loading Class: com/google/common/escape/Escaper.class +INFO: Loading Class: com/google/common/escape/Escapers$1.class +INFO: Loading Class: com/google/common/escape/Escapers$2.class +INFO: Loading Class: com/google/common/escape/Escapers$Builder$1.class +INFO: Loading Class: com/google/common/escape/Escapers$Builder.class +INFO: Loading Class: com/google/common/escape/Escapers.class +INFO: Loading Class: com/google/common/escape/Platform$1.class +INFO: Loading Class: com/google/common/escape/Platform.class +INFO: Loading Class: com/google/common/escape/UnicodeEscaper.class +INFO: Loading Class: com/google/common/escape/package-info.class +INFO: Loading Class: com/google/common/eventbus/AllowConcurrentEvents.class +INFO: Loading Class: com/google/common/eventbus/AsyncEventBus.class +INFO: Loading Class: com/google/common/eventbus/DeadEvent.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$1.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$ImmediateDispatcher.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$LegacyAsyncDispatcher$EventWithSubscriber.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$LegacyAsyncDispatcher.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$PerThreadQueuedDispatcher$1.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$PerThreadQueuedDispatcher$2.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$PerThreadQueuedDispatcher$Event.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher$PerThreadQueuedDispatcher.class +INFO: Loading Class: com/google/common/eventbus/Dispatcher.class +INFO: Loading Class: com/google/common/eventbus/EventBus$LoggingHandler.class +INFO: Loading Class: com/google/common/eventbus/EventBus.class +INFO: Loading Class: com/google/common/eventbus/Subscribe.class +INFO: Loading Class: com/google/common/eventbus/Subscriber$1.class +INFO: Loading Class: com/google/common/eventbus/Subscriber$SynchronizedSubscriber.class +INFO: Loading Class: com/google/common/eventbus/Subscriber.class +INFO: Loading Class: com/google/common/eventbus/SubscriberExceptionContext.class +INFO: Loading Class: com/google/common/eventbus/SubscriberExceptionHandler.class +INFO: Loading Class: com/google/common/eventbus/SubscriberRegistry$1.class +INFO: Loading Class: com/google/common/eventbus/SubscriberRegistry$2.class +INFO: Loading Class: com/google/common/eventbus/SubscriberRegistry$MethodIdentifier.class +INFO: Loading Class: com/google/common/eventbus/SubscriberRegistry.class +INFO: Loading Class: com/google/common/eventbus/package-info.class +INFO: Loading Class: com/google/common/graph/AbstractDirectedNetworkConnections$1.class +INFO: Loading Class: com/google/common/graph/AbstractDirectedNetworkConnections.class +INFO: Loading Class: com/google/common/graph/AbstractGraph$1.class +INFO: Loading Class: com/google/common/graph/AbstractGraph.class +INFO: Loading Class: com/google/common/graph/AbstractGraphBuilder.class +INFO: Loading Class: com/google/common/graph/AbstractNetwork$1$1$1.class +INFO: Loading Class: com/google/common/graph/AbstractNetwork$1$1.class +INFO: Loading Class: com/google/common/graph/AbstractNetwork$1.class +INFO: Loading Class: com/google/common/graph/AbstractNetwork$2.class +INFO: Loading Class: com/google/common/graph/AbstractNetwork.class +INFO: Loading Class: com/google/common/graph/AbstractUndirectedNetworkConnections.class +INFO: Loading Class: com/google/common/graph/AbstractValueGraph$1.class +INFO: Loading Class: com/google/common/graph/AbstractValueGraph.class +INFO: Loading Class: com/google/common/graph/ConfigurableMutableGraph.class +INFO: Loading Class: com/google/common/graph/ConfigurableMutableNetwork.class +INFO: Loading Class: com/google/common/graph/ConfigurableMutableValueGraph.class +INFO: Loading Class: com/google/common/graph/ConfigurableNetwork.class +INFO: Loading Class: com/google/common/graph/ConfigurableValueGraph.class +INFO: Loading Class: com/google/common/graph/DirectedGraphConnections$1$1.class +INFO: Loading Class: com/google/common/graph/DirectedGraphConnections$1.class +INFO: Loading Class: com/google/common/graph/DirectedGraphConnections$2$1.class +INFO: Loading Class: com/google/common/graph/DirectedGraphConnections$2.class +INFO: Loading Class: com/google/common/graph/DirectedGraphConnections$PredAndSucc.class +INFO: Loading Class: com/google/common/graph/DirectedGraphConnections.class +INFO: Loading Class: com/google/common/graph/DirectedMultiNetworkConnections$1.class +INFO: Loading Class: com/google/common/graph/DirectedMultiNetworkConnections.class +INFO: Loading Class: com/google/common/graph/DirectedNetworkConnections.class +INFO: Loading Class: com/google/common/graph/EdgesConnecting.class +INFO: Loading Class: com/google/common/graph/ElementOrder$1.class +INFO: Loading Class: com/google/common/graph/ElementOrder$Type.class +INFO: Loading Class: com/google/common/graph/ElementOrder.class +INFO: Loading Class: com/google/common/graph/EndpointPair$1.class +INFO: Loading Class: com/google/common/graph/EndpointPair$Ordered.class +INFO: Loading Class: com/google/common/graph/EndpointPair$Unordered.class +INFO: Loading Class: com/google/common/graph/EndpointPair.class +INFO: Loading Class: com/google/common/graph/EndpointPairIterator$1.class +INFO: Loading Class: com/google/common/graph/EndpointPairIterator$Directed.class +INFO: Loading Class: com/google/common/graph/EndpointPairIterator$Undirected.class +INFO: Loading Class: com/google/common/graph/EndpointPairIterator.class +INFO: Loading Class: com/google/common/graph/ForwardingGraph.class +INFO: Loading Class: com/google/common/graph/Graph.class +INFO: Loading Class: com/google/common/graph/GraphBuilder.class +INFO: Loading Class: com/google/common/graph/GraphConnections.class +INFO: Loading Class: com/google/common/graph/GraphConstants$Presence.class +INFO: Loading Class: com/google/common/graph/GraphConstants.class +INFO: Loading Class: com/google/common/graph/Graphs$NodeVisitState.class +INFO: Loading Class: com/google/common/graph/Graphs$TransposedGraph.class +INFO: Loading Class: com/google/common/graph/Graphs$TransposedNetwork.class +INFO: Loading Class: com/google/common/graph/Graphs$TransposedValueGraph.class +INFO: Loading Class: com/google/common/graph/Graphs.class +INFO: Loading Class: com/google/common/graph/ImmutableGraph$ValueBackedImpl.class +INFO: Loading Class: com/google/common/graph/ImmutableGraph.class +INFO: Loading Class: com/google/common/graph/ImmutableNetwork$1.class +INFO: Loading Class: com/google/common/graph/ImmutableNetwork$2.class +INFO: Loading Class: com/google/common/graph/ImmutableNetwork$3.class +INFO: Loading Class: com/google/common/graph/ImmutableNetwork$4.class +INFO: Loading Class: com/google/common/graph/ImmutableNetwork.class +INFO: Loading Class: com/google/common/graph/ImmutableValueGraph$1.class +INFO: Loading Class: com/google/common/graph/ImmutableValueGraph.class +INFO: Loading Class: com/google/common/graph/MapIteratorCache$1$1.class +INFO: Loading Class: com/google/common/graph/MapIteratorCache$1.class +INFO: Loading Class: com/google/common/graph/MapIteratorCache.class +INFO: Loading Class: com/google/common/graph/MapRetrievalCache$CacheEntry.class +INFO: Loading Class: com/google/common/graph/MapRetrievalCache.class +INFO: Loading Class: com/google/common/graph/MultiEdgesConnecting$1.class +INFO: Loading Class: com/google/common/graph/MultiEdgesConnecting.class +INFO: Loading Class: com/google/common/graph/MutableGraph.class +INFO: Loading Class: com/google/common/graph/MutableNetwork.class +INFO: Loading Class: com/google/common/graph/MutableValueGraph.class +INFO: Loading Class: com/google/common/graph/Network.class +INFO: Loading Class: com/google/common/graph/NetworkBuilder.class +INFO: Loading Class: com/google/common/graph/NetworkConnections.class +INFO: Loading Class: com/google/common/graph/UndirectedGraphConnections.class +INFO: Loading Class: com/google/common/graph/UndirectedMultiNetworkConnections$1.class +INFO: Loading Class: com/google/common/graph/UndirectedMultiNetworkConnections.class +INFO: Loading Class: com/google/common/graph/UndirectedNetworkConnections.class +INFO: Loading Class: com/google/common/graph/ValueGraph.class +INFO: Loading Class: com/google/common/graph/ValueGraphBuilder.class +INFO: Loading Class: com/google/common/graph/package-info.class +INFO: Loading Class: com/google/common/hash/AbstractByteHasher.class +INFO: Loading Class: com/google/common/hash/AbstractCompositeHashFunction$1.class +INFO: Loading Class: com/google/common/hash/AbstractCompositeHashFunction.class +INFO: Loading Class: com/google/common/hash/AbstractHasher.class +INFO: Loading Class: com/google/common/hash/AbstractNonStreamingHashFunction$BufferingHasher.class +INFO: Loading Class: com/google/common/hash/AbstractNonStreamingHashFunction$ExposedByteArrayOutputStream.class +INFO: Loading Class: com/google/common/hash/AbstractNonStreamingHashFunction.class +INFO: Loading Class: com/google/common/hash/AbstractStreamingHashFunction$AbstractStreamingHasher.class +INFO: Loading Class: com/google/common/hash/AbstractStreamingHashFunction.class +INFO: Loading Class: com/google/common/hash/BloomFilter$1.class +INFO: Loading Class: com/google/common/hash/BloomFilter$SerialForm.class +INFO: Loading Class: com/google/common/hash/BloomFilter$Strategy.class +INFO: Loading Class: com/google/common/hash/BloomFilter.class +INFO: Loading Class: com/google/common/hash/BloomFilterStrategies$1.class +INFO: Loading Class: com/google/common/hash/BloomFilterStrategies$2.class +INFO: Loading Class: com/google/common/hash/BloomFilterStrategies$BitArray.class +INFO: Loading Class: com/google/common/hash/BloomFilterStrategies.class +INFO: Loading Class: com/google/common/hash/ChecksumHashFunction$1.class +INFO: Loading Class: com/google/common/hash/ChecksumHashFunction$ChecksumHasher.class +INFO: Loading Class: com/google/common/hash/ChecksumHashFunction.class +INFO: Loading Class: com/google/common/hash/Crc32cHashFunction$Crc32cHasher.class +INFO: Loading Class: com/google/common/hash/Crc32cHashFunction.class +INFO: Loading Class: com/google/common/hash/FarmHashFingerprint64.class +INFO: Loading Class: com/google/common/hash/Funnel.class +INFO: Loading Class: com/google/common/hash/Funnels$ByteArrayFunnel.class +INFO: Loading Class: com/google/common/hash/Funnels$IntegerFunnel.class +INFO: Loading Class: com/google/common/hash/Funnels$LongFunnel.class +INFO: Loading Class: com/google/common/hash/Funnels$SequentialFunnel.class +INFO: Loading Class: com/google/common/hash/Funnels$SinkAsStream.class +INFO: Loading Class: com/google/common/hash/Funnels$StringCharsetFunnel$SerializedForm.class +INFO: Loading Class: com/google/common/hash/Funnels$StringCharsetFunnel.class +INFO: Loading Class: com/google/common/hash/Funnels$UnencodedCharsFunnel.class +INFO: Loading Class: com/google/common/hash/Funnels.class +INFO: Loading Class: com/google/common/hash/HashCode$BytesHashCode.class +INFO: Loading Class: com/google/common/hash/HashCode$IntHashCode.class +INFO: Loading Class: com/google/common/hash/HashCode$LongHashCode.class +INFO: Loading Class: com/google/common/hash/HashCode.class +INFO: Loading Class: com/google/common/hash/HashFunction.class +INFO: Loading Class: com/google/common/hash/Hasher.class +INFO: Loading Class: com/google/common/hash/Hashing$1.class +INFO: Loading Class: com/google/common/hash/Hashing$Adler32Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$ChecksumType$1.class +INFO: Loading Class: com/google/common/hash/Hashing$ChecksumType$2.class +INFO: Loading Class: com/google/common/hash/Hashing$ChecksumType.class +INFO: Loading Class: com/google/common/hash/Hashing$ConcatenatedHashFunction.class +INFO: Loading Class: com/google/common/hash/Hashing$Crc32Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Crc32cHolder.class +INFO: Loading Class: com/google/common/hash/Hashing$FarmHashFingerprint64Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$LinearCongruentialGenerator.class +INFO: Loading Class: com/google/common/hash/Hashing$Md5Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Murmur3_128Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Murmur3_32Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Sha1Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Sha256Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Sha384Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$Sha512Holder.class +INFO: Loading Class: com/google/common/hash/Hashing$SipHash24Holder.class +INFO: Loading Class: com/google/common/hash/Hashing.class +INFO: Loading Class: com/google/common/hash/HashingInputStream.class +INFO: Loading Class: com/google/common/hash/HashingOutputStream.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$1.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$JavaLittleEndianBytes$1.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$JavaLittleEndianBytes.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$LittleEndianBytes.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$UnsafeByteArray$1.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$UnsafeByteArray$2.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$UnsafeByteArray$3.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray$UnsafeByteArray.class +INFO: Loading Class: com/google/common/hash/LittleEndianByteArray.class +INFO: Loading Class: com/google/common/hash/MacHashFunction$1.class +INFO: Loading Class: com/google/common/hash/MacHashFunction$MacHasher.class +INFO: Loading Class: com/google/common/hash/MacHashFunction.class +INFO: Loading Class: com/google/common/hash/MessageDigestHashFunction$1.class +INFO: Loading Class: com/google/common/hash/MessageDigestHashFunction$MessageDigestHasher.class +INFO: Loading Class: com/google/common/hash/MessageDigestHashFunction$SerializedForm.class +INFO: Loading Class: com/google/common/hash/MessageDigestHashFunction.class +INFO: Loading Class: com/google/common/hash/Murmur3_128HashFunction$Murmur3_128Hasher.class +INFO: Loading Class: com/google/common/hash/Murmur3_128HashFunction.class +INFO: Loading Class: com/google/common/hash/Murmur3_32HashFunction$Murmur3_32Hasher.class +INFO: Loading Class: com/google/common/hash/Murmur3_32HashFunction.class +INFO: Loading Class: com/google/common/hash/PrimitiveSink.class +INFO: Loading Class: com/google/common/hash/SipHashFunction$SipHasher.class +INFO: Loading Class: com/google/common/hash/SipHashFunction.class +INFO: Loading Class: com/google/common/hash/package-info.class +INFO: Loading Class: com/google/common/html/HtmlEscapers.class +INFO: Loading Class: com/google/common/html/package-info.class +INFO: Loading Class: com/google/common/io/AndroidIncompatible.class +INFO: Loading Class: com/google/common/io/AppendableWriter.class +INFO: Loading Class: com/google/common/io/BaseEncoding$1.class +INFO: Loading Class: com/google/common/io/BaseEncoding$2.class +INFO: Loading Class: com/google/common/io/BaseEncoding$3.class +INFO: Loading Class: com/google/common/io/BaseEncoding$4.class +INFO: Loading Class: com/google/common/io/BaseEncoding$5.class +INFO: Loading Class: com/google/common/io/BaseEncoding$Alphabet.class +INFO: Loading Class: com/google/common/io/BaseEncoding$Base16Encoding.class +INFO: Loading Class: com/google/common/io/BaseEncoding$Base64Encoding.class +INFO: Loading Class: com/google/common/io/BaseEncoding$DecodingException.class +INFO: Loading Class: com/google/common/io/BaseEncoding$SeparatedBaseEncoding.class +INFO: Loading Class: com/google/common/io/BaseEncoding$StandardBaseEncoding$1.class +INFO: Loading Class: com/google/common/io/BaseEncoding$StandardBaseEncoding$2.class +INFO: Loading Class: com/google/common/io/BaseEncoding$StandardBaseEncoding.class +INFO: Loading Class: com/google/common/io/BaseEncoding.class +INFO: Loading Class: com/google/common/io/ByteArrayDataInput.class +INFO: Loading Class: com/google/common/io/ByteArrayDataOutput.class +INFO: Loading Class: com/google/common/io/ByteProcessor.class +INFO: Loading Class: com/google/common/io/ByteSink$1.class +INFO: Loading Class: com/google/common/io/ByteSink$AsCharSink.class +INFO: Loading Class: com/google/common/io/ByteSink.class +INFO: Loading Class: com/google/common/io/ByteSource$AsCharSource.class +INFO: Loading Class: com/google/common/io/ByteSource$ByteArrayByteSource.class +INFO: Loading Class: com/google/common/io/ByteSource$ConcatenatedByteSource.class +INFO: Loading Class: com/google/common/io/ByteSource$EmptyByteSource.class +INFO: Loading Class: com/google/common/io/ByteSource$SlicedByteSource.class +INFO: Loading Class: com/google/common/io/ByteSource.class +INFO: Loading Class: com/google/common/io/ByteStreams$1.class +INFO: Loading Class: com/google/common/io/ByteStreams$ByteArrayDataInputStream.class +INFO: Loading Class: com/google/common/io/ByteStreams$ByteArrayDataOutputStream.class +INFO: Loading Class: com/google/common/io/ByteStreams$FastByteArrayOutputStream.class +INFO: Loading Class: com/google/common/io/ByteStreams$LimitedInputStream.class +INFO: Loading Class: com/google/common/io/ByteStreams.class +INFO: Loading Class: com/google/common/io/CharSequenceReader.class +INFO: Loading Class: com/google/common/io/CharSink.class +INFO: Loading Class: com/google/common/io/CharSource$AsByteSource.class +INFO: Loading Class: com/google/common/io/CharSource$CharSequenceCharSource$1$1.class +INFO: Loading Class: com/google/common/io/CharSource$CharSequenceCharSource$1.class +INFO: Loading Class: com/google/common/io/CharSource$CharSequenceCharSource.class +INFO: Loading Class: com/google/common/io/CharSource$ConcatenatedCharSource.class +INFO: Loading Class: com/google/common/io/CharSource$EmptyCharSource.class +INFO: Loading Class: com/google/common/io/CharSource.class +INFO: Loading Class: com/google/common/io/CharStreams$NullWriter.class +INFO: Loading Class: com/google/common/io/CharStreams.class +INFO: Loading Class: com/google/common/io/Closeables.class +INFO: Loading Class: com/google/common/io/Closer$LoggingSuppressor.class +INFO: Loading Class: com/google/common/io/Closer$SuppressingSuppressor.class +INFO: Loading Class: com/google/common/io/Closer$Suppressor.class +INFO: Loading Class: com/google/common/io/Closer.class +INFO: Loading Class: com/google/common/io/CountingInputStream.class +INFO: Loading Class: com/google/common/io/CountingOutputStream.class +INFO: Loading Class: com/google/common/io/FileBackedOutputStream$1.class +INFO: Loading Class: com/google/common/io/FileBackedOutputStream$2.class +INFO: Loading Class: com/google/common/io/FileBackedOutputStream$MemoryOutput.class +INFO: Loading Class: com/google/common/io/FileBackedOutputStream.class +INFO: Loading Class: com/google/common/io/FileWriteMode.class +INFO: Loading Class: com/google/common/io/Files$1.class +INFO: Loading Class: com/google/common/io/Files$2.class +INFO: Loading Class: com/google/common/io/Files$FileByteSink.class +INFO: Loading Class: com/google/common/io/Files$FileByteSource.class +INFO: Loading Class: com/google/common/io/Files$FilePredicate$1.class +INFO: Loading Class: com/google/common/io/Files$FilePredicate$2.class +INFO: Loading Class: com/google/common/io/Files$FilePredicate.class +INFO: Loading Class: com/google/common/io/Files.class +INFO: Loading Class: com/google/common/io/Flushables.class +INFO: Loading Class: com/google/common/io/InsecureRecursiveDeleteException.class +INFO: Loading Class: com/google/common/io/LineBuffer.class +INFO: Loading Class: com/google/common/io/LineProcessor.class +INFO: Loading Class: com/google/common/io/LineReader$1.class +INFO: Loading Class: com/google/common/io/LineReader.class +INFO: Loading Class: com/google/common/io/LittleEndianDataInputStream.class +INFO: Loading Class: com/google/common/io/LittleEndianDataOutputStream.class +INFO: Loading Class: com/google/common/io/MoreFiles$1.class +INFO: Loading Class: com/google/common/io/MoreFiles$2.class +INFO: Loading Class: com/google/common/io/MoreFiles$DirectoryTreeTraverser.class +INFO: Loading Class: com/google/common/io/MoreFiles$PathByteSink.class +INFO: Loading Class: com/google/common/io/MoreFiles$PathByteSource.class +INFO: Loading Class: com/google/common/io/MoreFiles.class +INFO: Loading Class: com/google/common/io/MultiInputStream.class +INFO: Loading Class: com/google/common/io/MultiReader.class +INFO: Loading Class: com/google/common/io/PatternFilenameFilter.class +INFO: Loading Class: com/google/common/io/ReaderInputStream.class +INFO: Loading Class: com/google/common/io/RecursiveDeleteOption.class +INFO: Loading Class: com/google/common/io/Resources$1.class +INFO: Loading Class: com/google/common/io/Resources$UrlByteSource.class +INFO: Loading Class: com/google/common/io/Resources.class +INFO: Loading Class: com/google/common/io/package-info.class +INFO: Loading Class: com/google/common/math/BigIntegerMath$1.class +INFO: Loading Class: com/google/common/math/BigIntegerMath.class +INFO: Loading Class: com/google/common/math/DoubleMath$1.class +INFO: Loading Class: com/google/common/math/DoubleMath.class +INFO: Loading Class: com/google/common/math/DoubleUtils.class +INFO: Loading Class: com/google/common/math/IntMath$1.class +INFO: Loading Class: com/google/common/math/IntMath.class +INFO: Loading Class: com/google/common/math/LinearTransformation$1.class +INFO: Loading Class: com/google/common/math/LinearTransformation$LinearTransformationBuilder.class +INFO: Loading Class: com/google/common/math/LinearTransformation$NaNLinearTransformation.class +INFO: Loading Class: com/google/common/math/LinearTransformation$RegularLinearTransformation.class +INFO: Loading Class: com/google/common/math/LinearTransformation$VerticalLinearTransformation.class +INFO: Loading Class: com/google/common/math/LinearTransformation.class +INFO: Loading Class: com/google/common/math/LongMath$1.class +INFO: Loading Class: com/google/common/math/LongMath$MillerRabinTester$1.class +INFO: Loading Class: com/google/common/math/LongMath$MillerRabinTester$2.class +INFO: Loading Class: com/google/common/math/LongMath$MillerRabinTester.class +INFO: Loading Class: com/google/common/math/LongMath.class +INFO: Loading Class: com/google/common/math/MathPreconditions.class +INFO: Loading Class: com/google/common/math/PairedStats.class +INFO: Loading Class: com/google/common/math/PairedStatsAccumulator.class +INFO: Loading Class: com/google/common/math/Quantiles$1.class +INFO: Loading Class: com/google/common/math/Quantiles$Scale.class +INFO: Loading Class: com/google/common/math/Quantiles$ScaleAndIndex.class +INFO: Loading Class: com/google/common/math/Quantiles$ScaleAndIndexes.class +INFO: Loading Class: com/google/common/math/Quantiles.class +INFO: Loading Class: com/google/common/math/Stats.class +INFO: Loading Class: com/google/common/math/StatsAccumulator.class +INFO: Loading Class: com/google/common/math/package-info.class +INFO: Loading Class: com/google/common/net/HostAndPort.class +INFO: Loading Class: com/google/common/net/HostSpecifier.class +INFO: Loading Class: com/google/common/net/HttpHeaders.class +INFO: Loading Class: com/google/common/net/InetAddresses$TeredoInfo.class +INFO: Loading Class: com/google/common/net/InetAddresses.class +INFO: Loading Class: com/google/common/net/InternetDomainName.class +INFO: Loading Class: com/google/common/net/MediaType$1.class +INFO: Loading Class: com/google/common/net/MediaType$2.class +INFO: Loading Class: com/google/common/net/MediaType$Tokenizer.class +INFO: Loading Class: com/google/common/net/MediaType.class +INFO: Loading Class: com/google/common/net/PercentEscaper.class +INFO: Loading Class: com/google/common/net/UrlEscapers.class +INFO: Loading Class: com/google/common/net/package-info.class +INFO: Loading Class: com/google/common/primitives/Booleans$BooleanArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Booleans$BooleanComparator.class +INFO: Loading Class: com/google/common/primitives/Booleans$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Booleans.class +INFO: Loading Class: com/google/common/primitives/Bytes$ByteArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Bytes.class +INFO: Loading Class: com/google/common/primitives/Chars$CharArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Chars$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Chars.class +INFO: Loading Class: com/google/common/primitives/Doubles$DoubleArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Doubles$DoubleConverter.class +INFO: Loading Class: com/google/common/primitives/Doubles$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Doubles.class +INFO: Loading Class: com/google/common/primitives/Floats$FloatArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Floats$FloatConverter.class +INFO: Loading Class: com/google/common/primitives/Floats$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Floats.class +INFO: Loading Class: com/google/common/primitives/Ints$IntArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Ints$IntConverter.class +INFO: Loading Class: com/google/common/primitives/Ints$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Ints.class +INFO: Loading Class: com/google/common/primitives/Longs$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Longs$LongArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Longs$LongConverter.class +INFO: Loading Class: com/google/common/primitives/Longs.class +INFO: Loading Class: com/google/common/primitives/ParseRequest.class +INFO: Loading Class: com/google/common/primitives/Primitives.class +INFO: Loading Class: com/google/common/primitives/Shorts$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/Shorts$ShortArrayAsList.class +INFO: Loading Class: com/google/common/primitives/Shorts$ShortConverter.class +INFO: Loading Class: com/google/common/primitives/Shorts.class +INFO: Loading Class: com/google/common/primitives/SignedBytes$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/SignedBytes.class +INFO: Loading Class: com/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$PureJavaComparator.class +INFO: Loading Class: com/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator$1.class +INFO: Loading Class: com/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator.class +INFO: Loading Class: com/google/common/primitives/UnsignedBytes$LexicographicalComparatorHolder.class +INFO: Loading Class: com/google/common/primitives/UnsignedBytes.class +INFO: Loading Class: com/google/common/primitives/UnsignedInteger.class +INFO: Loading Class: com/google/common/primitives/UnsignedInts$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/UnsignedInts.class +INFO: Loading Class: com/google/common/primitives/UnsignedLong.class +INFO: Loading Class: com/google/common/primitives/UnsignedLongs$LexicographicalComparator.class +INFO: Loading Class: com/google/common/primitives/UnsignedLongs.class +INFO: Loading Class: com/google/common/primitives/package-info.class +INFO: Loading Class: com/google/common/reflect/AbstractInvocationHandler.class +INFO: Loading Class: com/google/common/reflect/ClassPath$1.class +INFO: Loading Class: com/google/common/reflect/ClassPath$ClassInfo.class +INFO: Loading Class: com/google/common/reflect/ClassPath$DefaultScanner.class +INFO: Loading Class: com/google/common/reflect/ClassPath$ResourceInfo.class +INFO: Loading Class: com/google/common/reflect/ClassPath$Scanner.class +INFO: Loading Class: com/google/common/reflect/ClassPath.class +INFO: Loading Class: com/google/common/reflect/Element.class +INFO: Loading Class: com/google/common/reflect/ImmutableTypeToInstanceMap$1.class +INFO: Loading Class: com/google/common/reflect/ImmutableTypeToInstanceMap$Builder.class +INFO: Loading Class: com/google/common/reflect/ImmutableTypeToInstanceMap.class +INFO: Loading Class: com/google/common/reflect/Invokable$ConstructorInvokable.class +INFO: Loading Class: com/google/common/reflect/Invokable$MethodInvokable.class +INFO: Loading Class: com/google/common/reflect/Invokable.class +INFO: Loading Class: com/google/common/reflect/MutableTypeToInstanceMap$1.class +INFO: Loading Class: com/google/common/reflect/MutableTypeToInstanceMap$UnmodifiableEntry$1.class +INFO: Loading Class: com/google/common/reflect/MutableTypeToInstanceMap$UnmodifiableEntry$2.class +INFO: Loading Class: com/google/common/reflect/MutableTypeToInstanceMap$UnmodifiableEntry.class +INFO: Loading Class: com/google/common/reflect/MutableTypeToInstanceMap.class +INFO: Loading Class: com/google/common/reflect/Parameter.class +INFO: Loading Class: com/google/common/reflect/Reflection.class +INFO: Loading Class: com/google/common/reflect/TypeCapture.class +INFO: Loading Class: com/google/common/reflect/TypeParameter.class +INFO: Loading Class: com/google/common/reflect/TypeResolver$1.class +INFO: Loading Class: com/google/common/reflect/TypeResolver$TypeMappingIntrospector.class +INFO: Loading Class: com/google/common/reflect/TypeResolver$TypeTable$1.class +INFO: Loading Class: com/google/common/reflect/TypeResolver$TypeTable.class +INFO: Loading Class: com/google/common/reflect/TypeResolver$TypeVariableKey.class +INFO: Loading Class: com/google/common/reflect/TypeResolver$WildcardCapturer.class +INFO: Loading Class: com/google/common/reflect/TypeResolver.class +INFO: Loading Class: com/google/common/reflect/TypeToInstanceMap.class +INFO: Loading Class: com/google/common/reflect/TypeToken$1.class +INFO: Loading Class: com/google/common/reflect/TypeToken$2.class +INFO: Loading Class: com/google/common/reflect/TypeToken$3.class +INFO: Loading Class: com/google/common/reflect/TypeToken$4.class +INFO: Loading Class: com/google/common/reflect/TypeToken$Bounds.class +INFO: Loading Class: com/google/common/reflect/TypeToken$ClassSet.class +INFO: Loading Class: com/google/common/reflect/TypeToken$InterfaceSet$1.class +INFO: Loading Class: com/google/common/reflect/TypeToken$InterfaceSet.class +INFO: Loading Class: com/google/common/reflect/TypeToken$SimpleTypeToken.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeCollector$1.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeCollector$2.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeCollector$3.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeCollector$4.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeCollector$ForwardingTypeCollector.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeCollector.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeFilter$1.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeFilter$2.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeFilter.class +INFO: Loading Class: com/google/common/reflect/TypeToken$TypeSet.class +INFO: Loading Class: com/google/common/reflect/TypeToken.class +INFO: Loading Class: com/google/common/reflect/TypeVisitor.class +INFO: Loading Class: com/google/common/reflect/Types$1.class +INFO: Loading Class: com/google/common/reflect/Types$2.class +INFO: Loading Class: com/google/common/reflect/Types$ClassOwnership$1.class +INFO: Loading Class: com/google/common/reflect/Types$ClassOwnership$1LocalClass.class +INFO: Loading Class: com/google/common/reflect/Types$ClassOwnership$2.class +INFO: Loading Class: com/google/common/reflect/Types$ClassOwnership$3.class +INFO: Loading Class: com/google/common/reflect/Types$ClassOwnership.class +INFO: Loading Class: com/google/common/reflect/Types$GenericArrayTypeImpl.class +INFO: Loading Class: com/google/common/reflect/Types$JavaVersion$1.class +INFO: Loading Class: com/google/common/reflect/Types$JavaVersion$2.class +INFO: Loading Class: com/google/common/reflect/Types$JavaVersion$3.class +INFO: Loading Class: com/google/common/reflect/Types$JavaVersion$4.class +INFO: Loading Class: com/google/common/reflect/Types$JavaVersion.class +INFO: Loading Class: com/google/common/reflect/Types$NativeTypeVariableEquals.class +INFO: Loading Class: com/google/common/reflect/Types$ParameterizedTypeImpl.class +INFO: Loading Class: com/google/common/reflect/Types$TypeVariableImpl.class +INFO: Loading Class: com/google/common/reflect/Types$TypeVariableInvocationHandler.class +INFO: Loading Class: com/google/common/reflect/Types$WildcardTypeImpl.class +INFO: Loading Class: com/google/common/reflect/Types.class +INFO: Loading Class: com/google/common/reflect/package-info.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractCatchingFuture$AsyncCatchingFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractCatchingFuture$CatchingFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractCatchingFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractCheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractExecutionThreadService$1$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractExecutionThreadService$1$2.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractExecutionThreadService$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractExecutionThreadService$2.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractExecutionThreadService.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$AtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$Cancellation.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$Failure$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$Failure.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$Listener.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$SafeAtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$SetFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$SynchronizedHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$TrustedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$UnsafeAtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture$Waiter.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractIdleService$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractIdleService$DelegateService$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractIdleService$DelegateService$2.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractIdleService$DelegateService.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractIdleService$ThreadNameSupplier.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractIdleService.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractListeningExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$1ThreadFactoryImpl.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$CustomScheduler$ReschedulableCallable.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$CustomScheduler$Schedule.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$CustomScheduler.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$Scheduler$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$Scheduler$2.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$Scheduler.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$ServiceDelegate$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$ServiceDelegate$2.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$ServiceDelegate$3.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$ServiceDelegate$Task.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService$ServiceDelegate.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractScheduledService.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$1.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$2.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$3.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$4.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$5.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$6.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$HasReachedRunningGuard.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$IsStartableGuard.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$IsStoppableGuard.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$IsStoppedGuard.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService$StateSnapshot.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractService.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractTransformFuture$AsyncTransformFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractTransformFuture$TransformFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AbstractTransformFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFuture$RunningState$1.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFuture$RunningState.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFuture.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFutureState$1.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFutureState$AtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFutureState$SafeAtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFutureState$SynchronizedAtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/AggregateFutureState.class +INFO: Loading Class: com/google/common/util/concurrent/AsyncCallable.class +INFO: Loading Class: com/google/common/util/concurrent/AsyncFunction.class +INFO: Loading Class: com/google/common/util/concurrent/AtomicDouble.class +INFO: Loading Class: com/google/common/util/concurrent/AtomicDoubleArray.class +INFO: Loading Class: com/google/common/util/concurrent/AtomicLongMap.class +INFO: Loading Class: com/google/common/util/concurrent/Atomics.class +INFO: Loading Class: com/google/common/util/concurrent/Callables$1.class +INFO: Loading Class: com/google/common/util/concurrent/Callables$2.class +INFO: Loading Class: com/google/common/util/concurrent/Callables$3.class +INFO: Loading Class: com/google/common/util/concurrent/Callables$4.class +INFO: Loading Class: com/google/common/util/concurrent/Callables.class +INFO: Loading Class: com/google/common/util/concurrent/CheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/CollectionFuture$CollectionFutureRunningState.class +INFO: Loading Class: com/google/common/util/concurrent/CollectionFuture$ListFuture$ListFutureRunningState.class +INFO: Loading Class: com/google/common/util/concurrent/CollectionFuture$ListFuture.class +INFO: Loading Class: com/google/common/util/concurrent/CollectionFuture.class +INFO: Loading Class: com/google/common/util/concurrent/CombinedFuture$AsyncCallableInterruptibleTask.class +INFO: Loading Class: com/google/common/util/concurrent/CombinedFuture$CallableInterruptibleTask.class +INFO: Loading Class: com/google/common/util/concurrent/CombinedFuture$CombinedFutureInterruptibleTask.class +INFO: Loading Class: com/google/common/util/concurrent/CombinedFuture$CombinedFutureRunningState.class +INFO: Loading Class: com/google/common/util/concurrent/CombinedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$1.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingLock.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingReentrantLock.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingReentrantReadLock.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingReentrantReadWriteLock.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$CycleDetectingReentrantWriteLock.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$ExampleStackTrace.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$LockGraphNode.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$Policies$1.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$Policies$2.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$Policies$3.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$Policies.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$Policy.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$PotentialDeadlockException.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory$WithExplicitOrdering.class +INFO: Loading Class: com/google/common/util/concurrent/CycleDetectingLockFactory.class +INFO: Loading Class: com/google/common/util/concurrent/ExecutionError.class +INFO: Loading Class: com/google/common/util/concurrent/ExecutionList$RunnableExecutorPair.class +INFO: Loading Class: com/google/common/util/concurrent/ExecutionList.class +INFO: Loading Class: com/google/common/util/concurrent/FakeTimeLimiter.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingBlockingDeque.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingBlockingQueue.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingCheckedFuture$SimpleForwardingCheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingCheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingFuture$SimpleForwardingFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingListenableFuture$SimpleForwardingListenableFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingListenableFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ForwardingListeningExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/FutureCallback.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$1.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$2.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$3.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$4.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$FutureCombiner.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$MappingCheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$NonCancellationPropagatingFuture$1.class +INFO: Loading Class: com/google/common/util/concurrent/Futures$NonCancellationPropagatingFuture.class +INFO: Loading Class: com/google/common/util/concurrent/Futures.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked$1.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked$GetCheckedTypeValidator.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator$1.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked$GetCheckedTypeValidatorHolder$WeakSetValidator.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked$GetCheckedTypeValidatorHolder.class +INFO: Loading Class: com/google/common/util/concurrent/FuturesGetChecked.class +INFO: Loading Class: com/google/common/util/concurrent/GwtFuturesCatchingSpecialization.class +INFO: Loading Class: com/google/common/util/concurrent/ImmediateFuture$ImmediateCancelledFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ImmediateFuture$ImmediateFailedCheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ImmediateFuture$ImmediateFailedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ImmediateFuture$ImmediateSuccessfulCheckedFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ImmediateFuture$ImmediateSuccessfulFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ImmediateFuture.class +INFO: Loading Class: com/google/common/util/concurrent/InterruptibleTask$1.class +INFO: Loading Class: com/google/common/util/concurrent/InterruptibleTask$AtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/InterruptibleTask$SafeAtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/InterruptibleTask$SynchronizedAtomicHelper.class +INFO: Loading Class: com/google/common/util/concurrent/InterruptibleTask.class +INFO: Loading Class: com/google/common/util/concurrent/JdkFutureAdapters$ListenableFutureAdapter$1.class +INFO: Loading Class: com/google/common/util/concurrent/JdkFutureAdapters$ListenableFutureAdapter.class +INFO: Loading Class: com/google/common/util/concurrent/JdkFutureAdapters.class +INFO: Loading Class: com/google/common/util/concurrent/ListenableFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ListenableFutureTask.class +INFO: Loading Class: com/google/common/util/concurrent/ListenableScheduledFuture.class +INFO: Loading Class: com/google/common/util/concurrent/ListenerCallQueue$Callback.class +INFO: Loading Class: com/google/common/util/concurrent/ListenerCallQueue.class +INFO: Loading Class: com/google/common/util/concurrent/ListeningExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/ListeningScheduledExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/Monitor$1.class +INFO: Loading Class: com/google/common/util/concurrent/Monitor$Guard.class +INFO: Loading Class: com/google/common/util/concurrent/Monitor.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$1.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$2.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$3.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$4.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$5$1.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$5.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$Application$1.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$Application.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$DirectExecutor.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$DirectExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$ListeningDecorator.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$ScheduledListeningDecorator$ListenableScheduledTask.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$ScheduledListeningDecorator$NeverSuccessfulListenableFutureTask.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors$ScheduledListeningDecorator.class +INFO: Loading Class: com/google/common/util/concurrent/MoreExecutors.class +INFO: Loading Class: com/google/common/util/concurrent/Partially$GwtIncompatible.class +INFO: Loading Class: com/google/common/util/concurrent/Partially.class +INFO: Loading Class: com/google/common/util/concurrent/Platform.class +INFO: Loading Class: com/google/common/util/concurrent/RateLimiter$SleepingStopwatch$1.class +INFO: Loading Class: com/google/common/util/concurrent/RateLimiter$SleepingStopwatch.class +INFO: Loading Class: com/google/common/util/concurrent/RateLimiter.class +INFO: Loading Class: com/google/common/util/concurrent/Runnables$1.class +INFO: Loading Class: com/google/common/util/concurrent/Runnables.class +INFO: Loading Class: com/google/common/util/concurrent/SerializingExecutor$1.class +INFO: Loading Class: com/google/common/util/concurrent/SerializingExecutor$QueueWorker.class +INFO: Loading Class: com/google/common/util/concurrent/SerializingExecutor.class +INFO: Loading Class: com/google/common/util/concurrent/Service$1.class +INFO: Loading Class: com/google/common/util/concurrent/Service$Listener.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State$1.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State$2.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State$3.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State$4.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State$5.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State$6.class +INFO: Loading Class: com/google/common/util/concurrent/Service$State.class +INFO: Loading Class: com/google/common/util/concurrent/Service.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$1.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$2.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$EmptyServiceManagerWarning.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$Listener.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$NoOpService.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$ServiceListener.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$ServiceManagerState$1.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$ServiceManagerState$2.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$ServiceManagerState$AwaitHealthGuard.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$ServiceManagerState$StoppedGuard.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager$ServiceManagerState.class +INFO: Loading Class: com/google/common/util/concurrent/ServiceManager.class +INFO: Loading Class: com/google/common/util/concurrent/SettableFuture.class +INFO: Loading Class: com/google/common/util/concurrent/SimpleTimeLimiter$1$1.class +INFO: Loading Class: com/google/common/util/concurrent/SimpleTimeLimiter$1.class +INFO: Loading Class: com/google/common/util/concurrent/SimpleTimeLimiter.class +INFO: Loading Class: com/google/common/util/concurrent/SmoothRateLimiter$1.class +INFO: Loading Class: com/google/common/util/concurrent/SmoothRateLimiter$SmoothBursty.class +INFO: Loading Class: com/google/common/util/concurrent/SmoothRateLimiter$SmoothWarmingUp.class +INFO: Loading Class: com/google/common/util/concurrent/SmoothRateLimiter.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$1.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$2.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$3.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$4.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$5.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$CompactStriped.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$LargeLazyStriped.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$PaddedLock.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$PaddedSemaphore.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$PowerOfTwoStriped.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$SmallLazyStriped$ArrayReference.class +INFO: Loading Class: com/google/common/util/concurrent/Striped$SmallLazyStriped.class +INFO: Loading Class: com/google/common/util/concurrent/Striped.class +INFO: Loading Class: com/google/common/util/concurrent/ThreadFactoryBuilder$1.class +INFO: Loading Class: com/google/common/util/concurrent/ThreadFactoryBuilder.class +INFO: Loading Class: com/google/common/util/concurrent/TimeLimiter.class +INFO: Loading Class: com/google/common/util/concurrent/TimeoutFuture$Fire.class +INFO: Loading Class: com/google/common/util/concurrent/TimeoutFuture.class +INFO: Loading Class: com/google/common/util/concurrent/TrustedListenableFutureTask$TrustedFutureInterruptibleTask.class +INFO: Loading Class: com/google/common/util/concurrent/TrustedListenableFutureTask.class +INFO: Loading Class: com/google/common/util/concurrent/UncaughtExceptionHandlers$Exiter.class +INFO: Loading Class: com/google/common/util/concurrent/UncaughtExceptionHandlers.class +INFO: Loading Class: com/google/common/util/concurrent/UncheckedExecutionException.class +INFO: Loading Class: com/google/common/util/concurrent/UncheckedTimeoutException.class +INFO: Loading Class: com/google/common/util/concurrent/Uninterruptibles.class +INFO: Loading Class: com/google/common/util/concurrent/WrappingExecutorService$1.class +INFO: Loading Class: com/google/common/util/concurrent/WrappingExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/WrappingScheduledExecutorService.class +INFO: Loading Class: com/google/common/util/concurrent/package-info.class +INFO: Loading Class: com/google/common/xml/XmlEscapers.class +INFO: Loading Class: com/google/common/xml/package-info.class +INFO: Loading Class: com/google/thirdparty/publicsuffix/PublicSuffixPatterns.class +INFO: Loading Class: com/google/thirdparty/publicsuffix/PublicSuffixType.class +INFO: Loading Class: com/google/thirdparty/publicsuffix/TrieParser.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.5/6c6c702c89bfff3cd9e80b04d668c5e190d588c6/commons-lang3-3.5.jar +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringExclude.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$DefaultToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/ClassUtils$Interfaces.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AtomicSafeInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/CircuitBreaker.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/CircuitBreakingException.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/MultiBackgroundInitializer$MultiBackgroundInitializerResults.class +INFO: Loading Class: org/apache/commons/lang3/exception/DefaultExceptionContext.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableFloat.class +INFO: Loading Class: org/apache/commons/lang3/RandomStringUtils.class +INFO: Loading Class: org/apache/commons/lang3/reflect/MemberUtils$Executable.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/CharSequenceTranslator.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/NumericEntityEscaper.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/NumericEntityUnescaper.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils$1.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils$ThreadGroupPredicate.class +INFO: Loading Class: org/apache/commons/lang3/time/CalendarReflection.class +INFO: Loading Class: org/apache/commons/lang3/time/DurationFormatUtils$Token.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$4.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$Strategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$Iso8601_Rule.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TimeZoneNumberRule.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$State$1.class +INFO: Loading Class: org/apache/commons/lang3/tuple/ImmutableTriple.class +INFO: Loading Class: org/apache/commons/lang3/CharSet.class +INFO: Loading Class: org/apache/commons/lang3/ClassUtils$2.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AtomicInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/CallableBackgroundInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ConcurrentUtils.class +INFO: Loading Class: org/apache/commons/lang3/exception/ExceptionUtils.class +INFO: Loading Class: org/apache/commons/lang3/math/NumberUtils.class +INFO: Loading Class: org/apache/commons/lang3/ObjectUtils.class +INFO: Loading Class: org/apache/commons/lang3/reflect/FieldUtils.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils$ThreadIdPredicate.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils$ThreadPredicate.class +INFO: Loading Class: org/apache/commons/lang3/time/DateUtils.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$3.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$NumberStrategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$CharacterLiteral.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TextField.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TwoDigitYearField.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$SplitState.class +INFO: Loading Class: org/apache/commons/lang3/Validate.class +INFO: Loading Class: org/apache/commons/lang3/AnnotationUtils$1.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffResult.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$MultiLineToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/CharRange$1.class +INFO: Loading Class: org/apache/commons/lang3/CharRange$CharacterIterator.class +INFO: Loading Class: org/apache/commons/lang3/ClassUtils$1$1.class +INFO: Loading Class: org/apache/commons/lang3/ClassUtils$2$1.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AbstractCircuitBreaker.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/BasicThreadFactory.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ConstantInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/MultiBackgroundInitializer$1.class +INFO: Loading Class: org/apache/commons/lang3/EnumUtils.class +INFO: Loading Class: org/apache/commons/lang3/event/EventUtils.class +INFO: Loading Class: org/apache/commons/lang3/exception/ContextedException.class +INFO: Loading Class: org/apache/commons/lang3/math/Fraction.class +INFO: Loading Class: org/apache/commons/lang3/RandomUtils.class +INFO: Loading Class: org/apache/commons/lang3/reflect/MemberUtils.class +INFO: Loading Class: org/apache/commons/lang3/time/DatePrinter.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$1.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$6.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$CaseInsensitiveTextStrategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$TimeZoneStrategy$TzInfo.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$Rule.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TwoDigitMonthField.class +INFO: Loading Class: org/apache/commons/lang3/time/FormatCache.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch.class +INFO: Loading Class: org/apache/commons/lang3/ArrayUtils.class +INFO: Loading Class: org/apache/commons/lang3/builder/EqualsExclude.class +INFO: Loading Class: org/apache/commons/lang3/builder/HashCodeBuilder.class +INFO: Loading Class: org/apache/commons/lang3/builder/ReflectionToStringBuilder.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$ShortPrefixToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$SimpleToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/CharEncoding.class +INFO: Loading Class: org/apache/commons/lang3/CharUtils.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AbstractCircuitBreaker$1.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AbstractCircuitBreaker$State$1.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AbstractCircuitBreaker$State$2.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/BasicThreadFactory$1.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/BasicThreadFactory$Builder.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ConcurrentUtils$ConstantFuture.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/EventCountCircuitBreaker.class +INFO: Loading Class: org/apache/commons/lang3/event/EventListenerSupport.class +INFO: Loading Class: org/apache/commons/lang3/LocaleUtils$SyncAvoid.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableBoolean.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableShort.class +INFO: Loading Class: org/apache/commons/lang3/reflect/ConstructorUtils.class +INFO: Loading Class: org/apache/commons/lang3/time/DateFormatUtils.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateFormat.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$PatternStrategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$DayInWeekField.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$NumberRule.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TimeZoneNameRule.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$UnpaddedNumberField.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$State$2.class +INFO: Loading Class: org/apache/commons/lang3/tuple/MutablePair.class +INFO: Loading Class: org/apache/commons/lang3/AnnotationUtils.class +INFO: Loading Class: org/apache/commons/lang3/builder/Builder.class +INFO: Loading Class: org/apache/commons/lang3/builder/CompareToBuilder.class +INFO: Loading Class: org/apache/commons/lang3/builder/Diff.class +INFO: Loading Class: org/apache/commons/lang3/builder/Diffable.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$1.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$10.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$11.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$12.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$13.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$15.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$17.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$2.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$5.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$8.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$JsonToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/ClassPathUtils.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/BackgroundInitializer$InitializationTask.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/EventCountCircuitBreaker$1.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/EventCountCircuitBreaker$CheckIntervalData.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/MultiBackgroundInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/TimedSemaphore$1.class +INFO: Loading Class: org/apache/commons/lang3/exception/ContextedRuntimeException.class +INFO: Loading Class: org/apache/commons/lang3/math/IEEE754rUtils.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableInt.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableObject.class +INFO: Loading Class: org/apache/commons/lang3/Range.class +INFO: Loading Class: org/apache/commons/lang3/reflect/InheritanceUtils.class +INFO: Loading Class: org/apache/commons/lang3/text/StrTokenizer.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/UnicodeUnescaper.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils$AlwaysTruePredicate.class +INFO: Loading Class: org/apache/commons/lang3/time/DateUtils$DateIterator.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$2.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$CopyQuotedStrategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$TimeZoneStrategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$StringLiteral.class +INFO: Loading Class: org/apache/commons/lang3/time/FormatCache$MultipartKey.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$State$4.class +INFO: Loading Class: org/apache/commons/lang3/tuple/Triple.class +INFO: Loading Class: org/apache/commons/lang3/ArrayUtils$1.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringBuilder.class +INFO: Loading Class: org/apache/commons/lang3/CharSetUtils.class +INFO: Loading Class: org/apache/commons/lang3/ClassUtils.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ConcurrentException.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/EventCountCircuitBreaker$StateStrategy.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ThresholdCircuitBreaker.class +INFO: Loading Class: org/apache/commons/lang3/Conversion.class +INFO: Loading Class: org/apache/commons/lang3/LocaleUtils.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableDouble.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableLong.class +INFO: Loading Class: org/apache/commons/lang3/Range$ComparableComparator.class +INFO: Loading Class: org/apache/commons/lang3/reflect/MethodUtils.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeUtils$WildcardTypeBuilder.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeUtils.class +INFO: Loading Class: org/apache/commons/lang3/text/CompositeFormat.class +INFO: Loading Class: org/apache/commons/lang3/text/ExtendedMessageFormat.class +INFO: Loading Class: org/apache/commons/lang3/text/StrBuilder$StrBuilderReader.class +INFO: Loading Class: org/apache/commons/lang3/text/StrBuilder.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/AggregateTranslator.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/CodePointTranslator.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/JavaUnicodeEscaper.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/NumericEntityUnescaper$OPTION.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/UnicodeEscaper.class +INFO: Loading Class: org/apache/commons/lang3/text/WordUtils.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils.class +INFO: Loading Class: org/apache/commons/lang3/time/DurationFormatUtils.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$ISO8601TimeZoneStrategy.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TwelveHourField.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter.class +INFO: Loading Class: org/apache/commons/lang3/tuple/MutableTriple.class +INFO: Loading Class: org/apache/commons/lang3/BitField.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$14.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$16.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$18.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$4.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$7.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder.class +INFO: Loading Class: org/apache/commons/lang3/builder/HashCodeExclude.class +INFO: Loading Class: org/apache/commons/lang3/builder/IDKey.class +INFO: Loading Class: org/apache/commons/lang3/builder/RecursiveToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/builder/StandardToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$NoFieldNameToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/CharSequenceUtils.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/BackgroundInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ConcurrentRuntimeException.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/EventCountCircuitBreaker$StateStrategyOpen.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/LazyInitializer.class +INFO: Loading Class: org/apache/commons/lang3/JavaVersion.class +INFO: Loading Class: org/apache/commons/lang3/mutable/MutableByte.class +INFO: Loading Class: org/apache/commons/lang3/NotImplementedException.class +INFO: Loading Class: org/apache/commons/lang3/reflect/Typed.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeLiteral.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeUtils$1.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeUtils$GenericArrayTypeImpl.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeUtils$ParameterizedTypeImpl.class +INFO: Loading Class: org/apache/commons/lang3/reflect/TypeUtils$WildcardTypeImpl.class +INFO: Loading Class: org/apache/commons/lang3/SerializationException.class +INFO: Loading Class: org/apache/commons/lang3/SerializationUtils$ClassLoaderAwareObjectInputStream.class +INFO: Loading Class: org/apache/commons/lang3/SerializationUtils.class +INFO: Loading Class: org/apache/commons/lang3/StringEscapeUtils$CsvEscaper.class +INFO: Loading Class: org/apache/commons/lang3/StringEscapeUtils$CsvUnescaper.class +INFO: Loading Class: org/apache/commons/lang3/StringEscapeUtils.class +INFO: Loading Class: org/apache/commons/lang3/SystemUtils.class +INFO: Loading Class: org/apache/commons/lang3/text/FormatFactory.class +INFO: Loading Class: org/apache/commons/lang3/text/FormattableUtils.class +INFO: Loading Class: org/apache/commons/lang3/text/StrBuilder$StrBuilderTokenizer.class +INFO: Loading Class: org/apache/commons/lang3/text/StrBuilder$StrBuilderWriter.class +INFO: Loading Class: org/apache/commons/lang3/text/StrLookup$1.class +INFO: Loading Class: org/apache/commons/lang3/text/StrLookup$MapStrLookup.class +INFO: Loading Class: org/apache/commons/lang3/text/StrLookup$SystemPropertiesStrLookup.class +INFO: Loading Class: org/apache/commons/lang3/text/StrLookup.class +INFO: Loading Class: org/apache/commons/lang3/text/StrMatcher$CharMatcher.class +INFO: Loading Class: org/apache/commons/lang3/text/StrMatcher$CharSetMatcher.class +INFO: Loading Class: org/apache/commons/lang3/text/StrMatcher$NoMatcher.class +INFO: Loading Class: org/apache/commons/lang3/text/StrMatcher$StringMatcher.class +INFO: Loading Class: org/apache/commons/lang3/text/StrMatcher$TrimMatcher.class +INFO: Loading Class: org/apache/commons/lang3/text/StrMatcher.class +INFO: Loading Class: org/apache/commons/lang3/text/StrSubstitutor.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/LookupTranslator.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/OctalUnescaper.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/UnicodeUnpairedSurrogateRemover.class +INFO: Loading Class: org/apache/commons/lang3/ThreadUtils$NamePredicate.class +INFO: Loading Class: org/apache/commons/lang3/time/DateUtils$ModifyType.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$StrategyParser.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$PaddedNumberField.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TwentyFourHourField.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TwoDigitNumberField.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$1.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$State.class +INFO: Loading Class: org/apache/commons/lang3/tuple/ImmutablePair.class +INFO: Loading Class: org/apache/commons/lang3/BooleanUtils.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$3.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$6.class +INFO: Loading Class: org/apache/commons/lang3/builder/DiffBuilder$9.class +INFO: Loading Class: org/apache/commons/lang3/builder/EqualsBuilder.class +INFO: Loading Class: org/apache/commons/lang3/builder/MultilineRecursiveToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/builder/ToStringStyle$NoClassNameToStringStyle.class +INFO: Loading Class: org/apache/commons/lang3/CharRange.class +INFO: Loading Class: org/apache/commons/lang3/ClassUtils$1.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/AbstractCircuitBreaker$State.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/ConcurrentInitializer.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/EventCountCircuitBreaker$StateStrategyClosed.class +INFO: Loading Class: org/apache/commons/lang3/concurrent/TimedSemaphore.class +INFO: Loading Class: org/apache/commons/lang3/event/EventListenerSupport$ProxyInvocationHandler.class +INFO: Loading Class: org/apache/commons/lang3/event/EventUtils$EventBindingInvocationHandler.class +INFO: Loading Class: org/apache/commons/lang3/exception/CloneFailedException.class +INFO: Loading Class: org/apache/commons/lang3/exception/ExceptionContext.class +INFO: Loading Class: org/apache/commons/lang3/mutable/Mutable.class +INFO: Loading Class: org/apache/commons/lang3/ObjectUtils$Null.class +INFO: Loading Class: org/apache/commons/lang3/StringUtils.class +INFO: Loading Class: org/apache/commons/lang3/text/translate/EntityArrays.class +INFO: Loading Class: org/apache/commons/lang3/time/DateParser.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateFormat$1.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$5.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDateParser$StrategyAndWidth.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$TimeZoneDisplayKey.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$UnpaddedMonthField.class +INFO: Loading Class: org/apache/commons/lang3/time/FastDatePrinter$WeekYear.class +INFO: Loading Class: org/apache/commons/lang3/time/StopWatch$State$3.class +INFO: Loading Class: org/apache/commons/lang3/tuple/Pair.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/commons-io/commons-io/2.5/2852e6e05fbb95076fc091f6d1780f1f8fe35e0f/commons-io-2.5.jar +INFO: Loading Class: org/apache/commons/io/IOUtils.class +INFO: Loading Class: org/apache/commons/io/DirectoryWalker.class +INFO: Loading Class: org/apache/commons/io/FileCleaner.class +INFO: Loading Class: org/apache/commons/io/TaggedIOException.class +INFO: Loading Class: org/apache/commons/io/comparator/AbstractFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/DirectoryFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/PathFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/ExtensionFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/DefaultFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/ReverseComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/LastModifiedFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/NameFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/CompositeFileComparator.class +INFO: Loading Class: org/apache/commons/io/comparator/SizeFileComparator.class +INFO: Loading Class: org/apache/commons/io/FilenameUtils.class +INFO: Loading Class: org/apache/commons/io/FileCleaningTracker$Tracker.class +INFO: Loading Class: org/apache/commons/io/FileUtils$1.class +INFO: Loading Class: org/apache/commons/io/CopyUtils.class +INFO: Loading Class: org/apache/commons/io/FileExistsException.class +INFO: Loading Class: org/apache/commons/io/ByteOrderMark.class +INFO: Loading Class: org/apache/commons/io/IOCase.class +INFO: Loading Class: org/apache/commons/io/FileDeleteStrategy.class +INFO: Loading Class: org/apache/commons/io/monitor/FileAlterationMonitor.class +INFO: Loading Class: org/apache/commons/io/monitor/FileAlterationObserver.class +INFO: Loading Class: org/apache/commons/io/monitor/FileAlterationListenerAdaptor.class +INFO: Loading Class: org/apache/commons/io/monitor/FileEntry.class +INFO: Loading Class: org/apache/commons/io/monitor/FileAlterationListener.class +INFO: Loading Class: org/apache/commons/io/input/BoundedInputStream.class +INFO: Loading Class: org/apache/commons/io/input/UnixLineEndingInputStream.class +INFO: Loading Class: org/apache/commons/io/input/BrokenInputStream.class +INFO: Loading Class: org/apache/commons/io/input/ClosedInputStream.class +INFO: Loading Class: org/apache/commons/io/input/BoundedReader.class +INFO: Loading Class: org/apache/commons/io/input/ProxyInputStream.class +INFO: Loading Class: org/apache/commons/io/input/NullInputStream.class +INFO: Loading Class: org/apache/commons/io/input/ProxyReader.class +INFO: Loading Class: org/apache/commons/io/input/TaggedInputStream.class +INFO: Loading Class: org/apache/commons/io/input/BOMInputStream.class +INFO: Loading Class: org/apache/commons/io/input/CharSequenceReader.class +INFO: Loading Class: org/apache/commons/io/input/ReversedLinesFileReader.class +INFO: Loading Class: org/apache/commons/io/input/SwappedDataInputStream.class +INFO: Loading Class: org/apache/commons/io/input/CharSequenceInputStream.class +INFO: Loading Class: org/apache/commons/io/input/AutoCloseInputStream.class +INFO: Loading Class: org/apache/commons/io/input/ReversedLinesFileReader$1.class +INFO: Loading Class: org/apache/commons/io/input/ReaderInputStream.class +INFO: Loading Class: org/apache/commons/io/input/TeeInputStream.class +INFO: Loading Class: org/apache/commons/io/input/TailerListener.class +INFO: Loading Class: org/apache/commons/io/input/NullReader.class +INFO: Loading Class: org/apache/commons/io/input/ReversedLinesFileReader$FilePart.class +INFO: Loading Class: org/apache/commons/io/input/XmlStreamReader.class +INFO: Loading Class: org/apache/commons/io/input/CountingInputStream.class +INFO: Loading Class: org/apache/commons/io/input/XmlStreamReaderException.class +INFO: Loading Class: org/apache/commons/io/input/ClassLoaderObjectInputStream.class +INFO: Loading Class: org/apache/commons/io/input/CloseShieldInputStream.class +INFO: Loading Class: org/apache/commons/io/input/Tailer.class +INFO: Loading Class: org/apache/commons/io/input/DemuxInputStream.class +INFO: Loading Class: org/apache/commons/io/input/BOMInputStream$1.class +INFO: Loading Class: org/apache/commons/io/input/WindowsLineEndingInputStream.class +INFO: Loading Class: org/apache/commons/io/input/TailerListenerAdapter.class +INFO: Loading Class: org/apache/commons/io/DirectoryWalker$CancelException.class +INFO: Loading Class: org/apache/commons/io/Java7Support.class +INFO: Loading Class: org/apache/commons/io/EndianUtils.class +INFO: Loading Class: org/apache/commons/io/HexDump.class +INFO: Loading Class: org/apache/commons/io/IOExceptionWithCause.class +INFO: Loading Class: org/apache/commons/io/Charsets.class +INFO: Loading Class: org/apache/commons/io/FileSystemUtils.class +INFO: Loading Class: org/apache/commons/io/LineIterator.class +INFO: Loading Class: org/apache/commons/io/filefilter/WildcardFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/NotFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/FalseFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/HiddenFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/SizeFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/CanWriteFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/AndFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/MagicNumberFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/FileFilterUtils.class +INFO: Loading Class: org/apache/commons/io/filefilter/TrueFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/OrFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/PrefixFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/AgeFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/DelegateFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/ConditionalFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/RegexFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/EmptyFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/IOFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/WildcardFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/FileFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/CanReadFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/AbstractFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/NameFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/DirectoryFileFilter.class +INFO: Loading Class: org/apache/commons/io/filefilter/SuffixFileFilter.class +INFO: Loading Class: org/apache/commons/io/serialization/FullClassNameMatcher.class +INFO: Loading Class: org/apache/commons/io/serialization/ValidatingObjectInputStream.class +INFO: Loading Class: org/apache/commons/io/serialization/RegexpClassNameMatcher.class +INFO: Loading Class: org/apache/commons/io/serialization/ClassNameMatcher.class +INFO: Loading Class: org/apache/commons/io/serialization/WildcardClassNameMatcher.class +INFO: Loading Class: org/apache/commons/io/output/AppendableOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/TaggedOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/ProxyOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/NullOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/ChunkedWriter.class +INFO: Loading Class: org/apache/commons/io/output/CountingOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/WriterOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/ThresholdingOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/TeeOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/FileWriterWithEncoding.class +INFO: Loading Class: org/apache/commons/io/output/CloseShieldOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/ProxyWriter.class +INFO: Loading Class: org/apache/commons/io/output/BrokenOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/XmlStreamWriter.class +INFO: Loading Class: org/apache/commons/io/output/ChunkedOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/LockableFileWriter.class +INFO: Loading Class: org/apache/commons/io/output/NullWriter.class +INFO: Loading Class: org/apache/commons/io/output/StringBuilderWriter.class +INFO: Loading Class: org/apache/commons/io/output/DeferredFileOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/ClosedOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/DemuxOutputStream.class +INFO: Loading Class: org/apache/commons/io/output/ByteArrayOutputStream.class +INFO: Loading Class: org/apache/commons/io/ThreadMonitor.class +INFO: Loading Class: org/apache/commons/io/FileCleaningTracker$Reaper.class +INFO: Loading Class: org/apache/commons/io/FileCleaningTracker.class +INFO: Loading Class: org/apache/commons/io/FileUtils.class +INFO: Loading Class: org/apache/commons/io/FileDeleteStrategy$ForceFileDeleteStrategy.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.10/4b95f4897fa13f2cd904aee711aeafc0c5295cd8/commons-codec-1.10.jar +INFO: Loading Class: org/apache/commons/codec/binary/Base32.class +INFO: Loading Class: org/apache/commons/codec/binary/Base32InputStream.class +INFO: Loading Class: org/apache/commons/codec/binary/Base32OutputStream.class +INFO: Loading Class: org/apache/commons/codec/binary/Base64.class +INFO: Loading Class: org/apache/commons/codec/binary/Base64InputStream.class +INFO: Loading Class: org/apache/commons/codec/binary/Base64OutputStream.class +INFO: Loading Class: org/apache/commons/codec/binary/BaseNCodec$Context.class +INFO: Loading Class: org/apache/commons/codec/binary/BaseNCodec.class +INFO: Loading Class: org/apache/commons/codec/binary/BaseNCodecInputStream.class +INFO: Loading Class: org/apache/commons/codec/binary/BaseNCodecOutputStream.class +INFO: Loading Class: org/apache/commons/codec/binary/BinaryCodec.class +INFO: Loading Class: org/apache/commons/codec/binary/CharSequenceUtils.class +INFO: Loading Class: org/apache/commons/codec/binary/Hex.class +INFO: Loading Class: org/apache/commons/codec/binary/StringUtils.class +INFO: Loading Class: org/apache/commons/codec/BinaryDecoder.class +INFO: Loading Class: org/apache/commons/codec/BinaryEncoder.class +INFO: Loading Class: org/apache/commons/codec/CharEncoding.class +INFO: Loading Class: org/apache/commons/codec/Charsets.class +INFO: Loading Class: org/apache/commons/codec/Decoder.class +INFO: Loading Class: org/apache/commons/codec/DecoderException.class +INFO: Loading Class: org/apache/commons/codec/digest/B64.class +INFO: Loading Class: org/apache/commons/codec/digest/Crypt.class +INFO: Loading Class: org/apache/commons/codec/digest/DigestUtils.class +INFO: Loading Class: org/apache/commons/codec/digest/HmacAlgorithms.class +INFO: Loading Class: org/apache/commons/codec/digest/HmacUtils.class +INFO: Loading Class: org/apache/commons/codec/digest/Md5Crypt.class +INFO: Loading Class: org/apache/commons/codec/digest/MessageDigestAlgorithms.class +INFO: Loading Class: org/apache/commons/codec/digest/Sha2Crypt.class +INFO: Loading Class: org/apache/commons/codec/digest/UnixCrypt.class +INFO: Loading Class: org/apache/commons/codec/Encoder.class +INFO: Loading Class: org/apache/commons/codec/EncoderException.class +INFO: Loading Class: org/apache/commons/codec/language/AbstractCaverphone.class +INFO: Loading Class: org/apache/commons/codec/language/bm/BeiderMorseEncoder.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Lang$1.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Lang$LangRule.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Lang.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Languages$1.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Languages$2.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Languages$LanguageSet.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Languages$SomeLanguages.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Languages.class +INFO: Loading Class: org/apache/commons/codec/language/bm/NameType.class +INFO: Loading Class: org/apache/commons/codec/language/bm/PhoneticEngine$1.class +INFO: Loading Class: org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class +INFO: Loading Class: org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class +INFO: Loading Class: org/apache/commons/codec/language/bm/PhoneticEngine.class +INFO: Loading Class: org/apache/commons/codec/language/bm/ResourceConstants.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$1.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$10.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$2.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$3.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$4.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$5.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$6.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$7.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$8.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$9.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$Phoneme$1.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$Phoneme.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$PhonemeList.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule$RPattern.class +INFO: Loading Class: org/apache/commons/codec/language/bm/Rule.class +INFO: Loading Class: org/apache/commons/codec/language/bm/RuleType.class +INFO: Loading Class: org/apache/commons/codec/language/Caverphone.class +INFO: Loading Class: org/apache/commons/codec/language/Caverphone1.class +INFO: Loading Class: org/apache/commons/codec/language/Caverphone2.class +INFO: Loading Class: org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class +INFO: Loading Class: org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class +INFO: Loading Class: org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class +INFO: Loading Class: org/apache/commons/codec/language/ColognePhonetic.class +INFO: Loading Class: org/apache/commons/codec/language/DaitchMokotoffSoundex$1.class +INFO: Loading Class: org/apache/commons/codec/language/DaitchMokotoffSoundex$Branch.class +INFO: Loading Class: org/apache/commons/codec/language/DaitchMokotoffSoundex$Rule.class +INFO: Loading Class: org/apache/commons/codec/language/DaitchMokotoffSoundex.class +INFO: Loading Class: org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class +INFO: Loading Class: org/apache/commons/codec/language/DoubleMetaphone.class +INFO: Loading Class: org/apache/commons/codec/language/MatchRatingApproachEncoder.class +INFO: Loading Class: org/apache/commons/codec/language/Metaphone.class +INFO: Loading Class: org/apache/commons/codec/language/Nysiis.class +INFO: Loading Class: org/apache/commons/codec/language/RefinedSoundex.class +INFO: Loading Class: org/apache/commons/codec/language/Soundex.class +INFO: Loading Class: org/apache/commons/codec/language/SoundexUtils.class +INFO: Loading Class: org/apache/commons/codec/net/BCodec.class +INFO: Loading Class: org/apache/commons/codec/net/QCodec.class +INFO: Loading Class: org/apache/commons/codec/net/QuotedPrintableCodec.class +INFO: Loading Class: org/apache/commons/codec/net/RFC1522Codec.class +INFO: Loading Class: org/apache/commons/codec/net/URLCodec.class +INFO: Loading Class: org/apache/commons/codec/net/Utils.class +INFO: Loading Class: org/apache/commons/codec/StringDecoder.class +INFO: Loading Class: org/apache/commons/codec/StringEncoder.class +INFO: Loading Class: org/apache/commons/codec/StringEncoderComparator.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.jutils/jutils/1.0.0/e12fe1fda814bd348c1579329c86943d2cd3c6a6/jutils-1.0.0.jar +INFO: Loading Class: net/java/games/util/plugins/Plugin.class +INFO: Loading Class: net/java/games/util/plugins/PluginLoader.class +INFO: Loading Class: net/java/games/util/plugins/Plugins.class +INFO: Loading Class: net/java/games/util/Version.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.0/c4ba5371a29ac9b2ad6129b1d39ea38750043eff/gson-2.8.0.jar +INFO: Loading Class: com/google/gson/annotations/Expose.class +INFO: Loading Class: com/google/gson/annotations/JsonAdapter.class +INFO: Loading Class: com/google/gson/annotations/SerializedName.class +INFO: Loading Class: com/google/gson/annotations/Since.class +INFO: Loading Class: com/google/gson/annotations/Until.class +INFO: Loading Class: com/google/gson/DefaultDateTypeAdapter.class +INFO: Loading Class: com/google/gson/ExclusionStrategy.class +INFO: Loading Class: com/google/gson/FieldAttributes.class +INFO: Loading Class: com/google/gson/FieldNamingPolicy$1.class +INFO: Loading Class: com/google/gson/FieldNamingPolicy$2.class +INFO: Loading Class: com/google/gson/FieldNamingPolicy$3.class +INFO: Loading Class: com/google/gson/FieldNamingPolicy$4.class +INFO: Loading Class: com/google/gson/FieldNamingPolicy$5.class +INFO: Loading Class: com/google/gson/FieldNamingPolicy.class +INFO: Loading Class: com/google/gson/FieldNamingStrategy.class +INFO: Loading Class: com/google/gson/Gson$1.class +INFO: Loading Class: com/google/gson/Gson$2.class +INFO: Loading Class: com/google/gson/Gson$3.class +INFO: Loading Class: com/google/gson/Gson$4.class +INFO: Loading Class: com/google/gson/Gson$5.class +INFO: Loading Class: com/google/gson/Gson$6.class +INFO: Loading Class: com/google/gson/Gson$FutureTypeAdapter.class +INFO: Loading Class: com/google/gson/Gson.class +INFO: Loading Class: com/google/gson/GsonBuilder.class +INFO: Loading Class: com/google/gson/InstanceCreator.class +INFO: Loading Class: com/google/gson/internal/$Gson$Preconditions.class +INFO: Loading Class: com/google/gson/internal/$Gson$Types$GenericArrayTypeImpl.class +INFO: Loading Class: com/google/gson/internal/$Gson$Types$ParameterizedTypeImpl.class +INFO: Loading Class: com/google/gson/internal/$Gson$Types$WildcardTypeImpl.class +INFO: Loading Class: com/google/gson/internal/$Gson$Types.class +INFO: Loading Class: com/google/gson/internal/bind/ArrayTypeAdapter$1.class +INFO: Loading Class: com/google/gson/internal/bind/ArrayTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/CollectionTypeAdapterFactory$Adapter.class +INFO: Loading Class: com/google/gson/internal/bind/CollectionTypeAdapterFactory.class +INFO: Loading Class: com/google/gson/internal/bind/DateTypeAdapter$1.class +INFO: Loading Class: com/google/gson/internal/bind/DateTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory.class +INFO: Loading Class: com/google/gson/internal/bind/JsonTreeReader$1.class +INFO: Loading Class: com/google/gson/internal/bind/JsonTreeReader.class +INFO: Loading Class: com/google/gson/internal/bind/JsonTreeWriter$1.class +INFO: Loading Class: com/google/gson/internal/bind/JsonTreeWriter.class +INFO: Loading Class: com/google/gson/internal/bind/MapTypeAdapterFactory$Adapter.class +INFO: Loading Class: com/google/gson/internal/bind/MapTypeAdapterFactory.class +INFO: Loading Class: com/google/gson/internal/bind/ObjectTypeAdapter$1.class +INFO: Loading Class: com/google/gson/internal/bind/ObjectTypeAdapter$2.class +INFO: Loading Class: com/google/gson/internal/bind/ObjectTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$1.class +INFO: Loading Class: com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter.class +INFO: Loading Class: com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField.class +INFO: Loading Class: com/google/gson/internal/bind/ReflectiveTypeAdapterFactory.class +INFO: Loading Class: com/google/gson/internal/bind/SqlDateTypeAdapter$1.class +INFO: Loading Class: com/google/gson/internal/bind/SqlDateTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/TimeTypeAdapter$1.class +INFO: Loading Class: com/google/gson/internal/bind/TimeTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/TreeTypeAdapter$1.class +INFO: Loading Class: com/google/gson/internal/bind/TreeTypeAdapter$GsonContextImpl.class +INFO: Loading Class: com/google/gson/internal/bind/TreeTypeAdapter$SingleTypeFactory.class +INFO: Loading Class: com/google/gson/internal/bind/TreeTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$1.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$10.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$11.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$12.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$13.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$14.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$15.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$16.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$17.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$18.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$19.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$2.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$20.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$21.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$22.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$23.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$24.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$25.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$26$1.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$26.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$27.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$28.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$29.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$3.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$30.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$31.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$32.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$33.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$34.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$35$1.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$35.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$36.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$4.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$5.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$6.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$7.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$8.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$9.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters$EnumTypeAdapter.class +INFO: Loading Class: com/google/gson/internal/bind/TypeAdapters.class +INFO: Loading Class: com/google/gson/internal/bind/util/ISO8601Utils.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$1.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$10.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$11.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$12.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$13.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$14.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$2.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$3.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$4.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$5.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$6.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$7.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$8.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor$9.class +INFO: Loading Class: com/google/gson/internal/ConstructorConstructor.class +INFO: Loading Class: com/google/gson/internal/Excluder$1.class +INFO: Loading Class: com/google/gson/internal/Excluder.class +INFO: Loading Class: com/google/gson/internal/JsonReaderInternalAccess.class +INFO: Loading Class: com/google/gson/internal/LazilyParsedNumber.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$1.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$AvlBuilder.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$AvlIterator.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$EntrySet$1.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$EntrySet.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$KeySet$1.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$KeySet.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$LinkedTreeMapIterator.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap$Node.class +INFO: Loading Class: com/google/gson/internal/LinkedHashTreeMap.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$1.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$EntrySet$1.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$EntrySet.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$KeySet$1.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$KeySet.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap$Node.class +INFO: Loading Class: com/google/gson/internal/LinkedTreeMap.class +INFO: Loading Class: com/google/gson/internal/ObjectConstructor.class +INFO: Loading Class: com/google/gson/internal/Primitives.class +INFO: Loading Class: com/google/gson/internal/Streams$AppendableWriter$CurrentWrite.class +INFO: Loading Class: com/google/gson/internal/Streams$AppendableWriter.class +INFO: Loading Class: com/google/gson/internal/Streams.class +INFO: Loading Class: com/google/gson/internal/UnsafeAllocator$1.class +INFO: Loading Class: com/google/gson/internal/UnsafeAllocator$2.class +INFO: Loading Class: com/google/gson/internal/UnsafeAllocator$3.class +INFO: Loading Class: com/google/gson/internal/UnsafeAllocator$4.class +INFO: Loading Class: com/google/gson/internal/UnsafeAllocator.class +INFO: Loading Class: com/google/gson/JsonArray.class +INFO: Loading Class: com/google/gson/JsonDeserializationContext.class +INFO: Loading Class: com/google/gson/JsonDeserializer.class +INFO: Loading Class: com/google/gson/JsonElement.class +INFO: Loading Class: com/google/gson/JsonIOException.class +INFO: Loading Class: com/google/gson/JsonNull.class +INFO: Loading Class: com/google/gson/JsonObject.class +INFO: Loading Class: com/google/gson/JsonParseException.class +INFO: Loading Class: com/google/gson/JsonParser.class +INFO: Loading Class: com/google/gson/JsonPrimitive.class +INFO: Loading Class: com/google/gson/JsonSerializationContext.class +INFO: Loading Class: com/google/gson/JsonSerializer.class +INFO: Loading Class: com/google/gson/JsonStreamParser.class +INFO: Loading Class: com/google/gson/JsonSyntaxException.class +INFO: Loading Class: com/google/gson/LongSerializationPolicy$1.class +INFO: Loading Class: com/google/gson/LongSerializationPolicy$2.class +INFO: Loading Class: com/google/gson/LongSerializationPolicy.class +INFO: Loading Class: com/google/gson/reflect/TypeToken.class +INFO: Loading Class: com/google/gson/stream/JsonReader$1.class +INFO: Loading Class: com/google/gson/stream/JsonReader.class +INFO: Loading Class: com/google/gson/stream/JsonScope.class +INFO: Loading Class: com/google/gson/stream/JsonToken.class +INFO: Loading Class: com/google/gson/stream/JsonWriter.class +INFO: Loading Class: com/google/gson/stream/MalformedJsonException.class +INFO: Loading Class: com/google/gson/TypeAdapter$1.class +INFO: Loading Class: com/google/gson/TypeAdapter.class +INFO: Loading Class: com/google/gson/TypeAdapterFactory.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.mojang/authlib/1.5.25/9834cdf236c22e84b946bba989e2f94ef5897c3c/authlib-1.5.25.jar +INFO: Loading Class: com/mojang/authlib/Agent.class +INFO: Loading Class: com/mojang/authlib/AuthenticationService.class +INFO: Loading Class: com/mojang/authlib/BaseAuthenticationService.class +INFO: Loading Class: com/mojang/authlib/BaseUserAuthentication.class +INFO: Loading Class: com/mojang/authlib/exceptions/AuthenticationException.class +INFO: Loading Class: com/mojang/authlib/exceptions/AuthenticationUnavailableException.class +INFO: Loading Class: com/mojang/authlib/exceptions/InvalidCredentialsException.class +INFO: Loading Class: com/mojang/authlib/exceptions/UserMigratedException.class +INFO: Loading Class: com/mojang/authlib/GameProfile.class +INFO: Loading Class: com/mojang/authlib/GameProfileRepository.class +INFO: Loading Class: com/mojang/authlib/HttpAuthenticationService.class +INFO: Loading Class: com/mojang/authlib/HttpUserAuthentication.class +INFO: Loading Class: com/mojang/authlib/legacy/LegacyAuthenticationService.class +INFO: Loading Class: com/mojang/authlib/legacy/LegacyMinecraftSessionService.class +INFO: Loading Class: com/mojang/authlib/legacy/LegacyUserAuthentication.class +INFO: Loading Class: com/mojang/authlib/minecraft/BaseMinecraftSessionService.class +INFO: Loading Class: com/mojang/authlib/minecraft/HttpMinecraftSessionService.class +INFO: Loading Class: com/mojang/authlib/minecraft/InsecureTextureException$MissingTextureException.class +INFO: Loading Class: com/mojang/authlib/minecraft/InsecureTextureException$OutdatedTextureException.class +INFO: Loading Class: com/mojang/authlib/minecraft/InsecureTextureException$WrongTextureOwnerException.class +INFO: Loading Class: com/mojang/authlib/minecraft/InsecureTextureException.class +INFO: Loading Class: com/mojang/authlib/minecraft/MinecraftProfileTexture$Type.class +INFO: Loading Class: com/mojang/authlib/minecraft/MinecraftProfileTexture.class +INFO: Loading Class: com/mojang/authlib/minecraft/MinecraftSessionService.class +INFO: Loading Class: com/mojang/authlib/ProfileLookupCallback.class +INFO: Loading Class: com/mojang/authlib/properties/Property.class +INFO: Loading Class: com/mojang/authlib/properties/PropertyMap$Serializer.class +INFO: Loading Class: com/mojang/authlib/properties/PropertyMap.class +INFO: Loading Class: com/mojang/authlib/UserAuthentication.class +INFO: Loading Class: com/mojang/authlib/UserType.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/ProfileIncompleteException.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/ProfileNotFoundException.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/request/AuthenticationRequest.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/request/InvalidateRequest.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/request/JoinMinecraftServerRequest.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/request/RefreshRequest.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/request/ValidateRequest.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/AuthenticationResponse.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/HasJoinedMinecraftServerResponse.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/MinecraftProfilePropertiesResponse.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/MinecraftTexturesPayload.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/ProfileSearchResultsResponse$Serializer.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/ProfileSearchResultsResponse.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/RefreshResponse.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/Response.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/response/User.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilAuthenticationService$1.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilAuthenticationService$GameProfileSerializer.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilAuthenticationService.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService$1.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.class +INFO: Loading Class: com/mojang/authlib/yggdrasil/YggdrasilUserAuthentication.class +INFO: Loading Class: com/mojang/util/QueueLogAppender.class +INFO: Loading Class: com/mojang/util/UUIDTypeAdapter.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.mojang/realms/1.10.22/bd0dccebdf3744c75f1ca20063f16e8f7d5e663f/realms-1.10.22.jar +INFO: Loading Class: com/mojang/realmsclient/RealmsVersion.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/exception/RealmsHttpException.class +INFO: Loading Class: com/mojang/realmsclient/exception/RealmsServiceException.class +INFO: Loading Class: com/mojang/realmsclient/exception/RetryCallException.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$6.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServerPing.class +INFO: Loading Class: com/mojang/realmsclient/dto/WorldTemplate$WorldTemplateType.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServerPlayerLists.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServer$State.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServerPlayerList.class +INFO: Loading Class: com/mojang/realmsclient/dto/BackupList.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServer.class +INFO: Loading Class: com/mojang/realmsclient/dto/PingResult.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServerList.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsNews.class +INFO: Loading Class: com/mojang/realmsclient/dto/ServerActivityList.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsDescriptionDto.class +INFO: Loading Class: com/mojang/realmsclient/dto/UploadInfo.class +INFO: Loading Class: com/mojang/realmsclient/dto/PendingInvite.class +INFO: Loading Class: com/mojang/realmsclient/dto/ValueObject.class +INFO: Loading Class: com/mojang/realmsclient/dto/RegionPingResult.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsWorldOptions.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServerAddress.class +INFO: Loading Class: com/mojang/realmsclient/dto/Subscription$SubscriptionType.class +INFO: Loading Class: com/mojang/realmsclient/dto/WorldTemplatePaginatedList.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServer$WorldType.class +INFO: Loading Class: com/mojang/realmsclient/dto/WorldDownload.class +INFO: Loading Class: com/mojang/realmsclient/dto/PlayerInfo.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsWorldResetDto.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServer$McoServerComparator.class +INFO: Loading Class: com/mojang/realmsclient/dto/ServerActivity.class +INFO: Loading Class: com/mojang/realmsclient/dto/Ops.class +INFO: Loading Class: com/mojang/realmsclient/dto/PendingInvitesList.class +INFO: Loading Class: com/mojang/realmsclient/dto/RealmsServer$1.class +INFO: Loading Class: com/mojang/realmsclient/dto/Subscription.class +INFO: Loading Class: com/mojang/realmsclient/dto/Backup.class +INFO: Loading Class: com/mojang/realmsclient/dto/WorldTemplate.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$2.class +INFO: Loading Class: com/mojang/realmsclient/gui/LongRunningTask.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$ServerListUpdateTask.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$Task.class +INFO: Loading Class: com/mojang/realmsclient/gui/ErrorCallback.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsConstants.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$UnreadNewsTask.class +INFO: Loading Class: com/mojang/realmsclient/gui/GuiCallback.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$PendingInviteUpdateTask.class +INFO: Loading Class: com/mojang/realmsclient/gui/ChatFormatting.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$PendingInvitationList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsUploadScreen$Unit.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSettingsScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$Activity.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$ResetType.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$ActivityRow.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsScreenWithCallback.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsUploadScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBackupScreen$BackupSelectionList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResourcePackScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsParentalConsentScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBackupScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsTermsScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsUploadScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$2.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$Color.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsConfirmScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsInviteScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSlotOptionsScreen$SettingsSlider.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen$BackupInfoList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen$WorldSelectionList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResetNormalWorldScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsClientOutdatedScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/UploadResult.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPlayerScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen$3.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPlayerScreen$InvitedSelectionList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$DetailsList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$ActivityRender.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen$2.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBackupScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/UploadResult$Builder.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBackupInfoScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsCreateTrialScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$2.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsPendingInvitesScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResourcePackScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsGenericErrorScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSelectFileToUploadScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsLongConfirmationScreen$Type.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSubscriptionInfoScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsLongRunningMcoTaskScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsCreateRealmScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsDownloadLatestWorldScreen$DownloadStatus.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$WorldTemplateSelectionList.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen$ResetWorldInfo.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsResetWorldScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsBrokenWorldScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsSelectWorldTemplateScreen$1.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen$Day.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsActivityScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsNotificationsScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/screens/RealmsConfigureWorldScreen.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsHideableButton.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$LiveStatsTask.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher$TrialAvailabilityTask.class +INFO: Loading Class: com/mojang/realmsclient/gui/RealmsDataFetcher.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$4.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$3.class +INFO: Loading Class: com/mojang/realmsclient/client/FileDownload.class +INFO: Loading Class: com/mojang/realmsclient/client/Request$Post.class +INFO: Loading Class: com/mojang/realmsclient/client/Request$Put.class +INFO: Loading Class: com/mojang/realmsclient/client/UploadStatus.class +INFO: Loading Class: com/mojang/realmsclient/client/Ping$1.class +INFO: Loading Class: com/mojang/realmsclient/client/Ping$Region.class +INFO: Loading Class: com/mojang/realmsclient/client/FileUpload.class +INFO: Loading Class: com/mojang/realmsclient/client/FileDownload$ProgressListener.class +INFO: Loading Class: com/mojang/realmsclient/client/FileUpload$CustomInputStreamEntity.class +INFO: Loading Class: com/mojang/realmsclient/client/RealmsClient.class +INFO: Loading Class: com/mojang/realmsclient/client/RealmsError.class +INFO: Loading Class: com/mojang/realmsclient/client/Request$Delete.class +INFO: Loading Class: com/mojang/realmsclient/client/FileDownload$ResourcePackProgressListener.class +INFO: Loading Class: com/mojang/realmsclient/client/Request$Get.class +INFO: Loading Class: com/mojang/realmsclient/client/FileDownload$1.class +INFO: Loading Class: com/mojang/realmsclient/client/Request.class +INFO: Loading Class: com/mojang/realmsclient/client/FileDownload$DownloadCountingOutputStream.class +INFO: Loading Class: com/mojang/realmsclient/client/Ping.class +INFO: Loading Class: com/mojang/realmsclient/client/RealmsClient$Environment.class +INFO: Loading Class: com/mojang/realmsclient/client/RealmsClientConfig.class +INFO: Loading Class: com/mojang/realmsclient/client/RealmsClient$CompatibleVersionResponse.class +INFO: Loading Class: com/mojang/realmsclient/client/QueryBuilder.class +INFO: Loading Class: com/mojang/realmsclient/util/UploadTokenCache.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$SwitchSlotTask.class +INFO: Loading Class: com/mojang/realmsclient/util/SkinProcessor.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$DownloadTask.class +INFO: Loading Class: com/mojang/realmsclient/util/Option.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$RealmsConnectTask.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsPersistence$1.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsUtil$1.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$TrialCreationTask.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$ResettingWorldTask.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$SwitchMinigameTask.class +INFO: Loading Class: com/mojang/realmsclient/util/JsonUtils.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTextureManager$1.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsUtil.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsPersistence.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$RestoreTask.class +INFO: Loading Class: com/mojang/realmsclient/util/Option$None.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$WorldCreationTask.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTextureManager$RealmsTexture.class +INFO: Loading Class: com/mojang/realmsclient/util/Option$Some.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$CloseServerTask.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$RealmsGetServerDetailsTask.class +INFO: Loading Class: com/mojang/realmsclient/util/Pair.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTextureManager.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsTasks$OpenServerTask.class +INFO: Loading Class: com/mojang/realmsclient/util/RealmsPersistence$RealmsPersistenceData.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$5.class +INFO: Loading Class: com/mojang/realmsclient/RealmsMainScreen$ServerSelectionList.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-compress/1.8.1/a698750c16740fd5b3871425f4cb3bbaa87f529d/commons-compress-1.8.1.jar +INFO: Loading Class: org/apache/commons/compress/archivers/Lister.class +INFO: Loading Class: org/apache/commons/compress/archivers/ArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/ArchiveOutputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/jar/JarArchiveOutputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/jar/JarArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/jar/JarArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/ArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/cpio/CpioArchiveOutputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/cpio/CpioConstants.class +INFO: Loading Class: org/apache/commons/compress/archivers/cpio/CpioUtil.class +INFO: Loading Class: org/apache/commons/compress/archivers/cpio/CpioArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/cpio/CpioArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/ArchiveException.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/LocalFileHeader$Methods.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/ArjArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/MainHeader.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/ArjArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/MainHeader$Flags.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/LocalFileHeader$FileTypes.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/ArjArchiveEntry$HostOs.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/LocalFileHeader$Flags.class +INFO: Loading Class: org/apache/commons/compress/archivers/arj/LocalFileHeader.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnixStat.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/AbstractUnicodeExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnicodeCommentExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/X7875_NewUnix.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestamp.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/Zip64Mode.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipEncoding.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$3.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ExtraFieldUtils$UnparseableExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveInputStream$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/CircularBuffer.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnsupportedZipFeatureException$Feature.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipEightByteInteger.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveInputStream$BoundedInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipConstants.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$NameAndComment.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnrecognizedExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding$Simple8BitChar.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$OffsetEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipLong.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipEncodingHelper.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipShort.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$BoundedInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ExtraFieldUtils.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/GeneralPurposeBit.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/Zip64ExtendedInformationExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/BinaryTree.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream$UnicodeExtraFieldPolicy.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/NioZipEncoding.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$2.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/JarMarker.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveInputStream$CurrentEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipUtil.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ExplodingInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/Zip64RequiredException.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnshrinkingInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnicodePathExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveOutputStream$CurrentEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/AsiExtraField.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipFile$Entry.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipEncodingHelper$SimpleEncodingHolder.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnsupportedZipFeatureException.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/UnparseableExtraFieldData.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/FallbackZipEncoding.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/ZipMethod.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/BitStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/zip/Simple8BitZipEncoding.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZMethod.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$LZMADecoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$CopyDecoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/DeltaDecoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/BindPair.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZFile.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZMethodConfiguration.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/AES256SHA256Decoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/AES256SHA256Decoder$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/CoderBase.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SubStreamsInfo.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZOutputFile$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/LZMA2Decoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/NID.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$DeflateDecoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$BCJDecoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/BoundedRandomAccessFileInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/StreamMap.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Archive.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$BCJDecoder$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/StartHeader.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$BZIP2Decoder.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Coders$DummyByteAddingInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/SevenZOutputFile$OutputStreamWrapper.class +INFO: Loading Class: org/apache/commons/compress/archivers/sevenz/Folder.class +INFO: Loading Class: org/apache/commons/compress/archivers/ar/ArArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/ar/ArArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/ar/ArArchiveOutputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/ArchiveStreamFactory.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/UnsupportedCompressionAlgorithmException.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveException.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/UnrecognizedFormatException.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveConstants$COMPRESSION_TYPE.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveSummary.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveUtil.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveInputStream$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/Dirent.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/InvalidFormatException.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveEntry$TYPE.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveConstants.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveEntry$PERMISSION.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/TapeInputStream$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/TapeInputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/ShortFileException.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveEntry$TapeSegmentHeader.class +INFO: Loading Class: org/apache/commons/compress/archivers/dump/DumpArchiveConstants$SEGMENT_TYPE.class +INFO: Loading Class: org/apache/commons/compress/archivers/StreamingNotSupportedException.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarUtils$1.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarArchiveOutputStream.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarConstants.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarArchiveSparseEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarArchiveEntry.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarUtils.class +INFO: Loading Class: org/apache/commons/compress/archivers/tar/TarArchiveInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/lzma/LZMACompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/CompressorStreamFactory.class +INFO: Loading Class: org/apache/commons/compress/compressors/CompressorOutputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/FileNameUtil.class +INFO: Loading Class: org/apache/commons/compress/compressors/CompressorException.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BZip2Constants.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream$Data.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/CRC.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/Rand.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream$Data.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BlockSort.class +INFO: Loading Class: org/apache/commons/compress/compressors/bzip2/BZip2Utils.class +INFO: Loading Class: org/apache/commons/compress/compressors/snappy/PureJavaCrc32C.class +INFO: Loading Class: org/apache/commons/compress/compressors/snappy/SnappyCompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/gzip/GzipParameters.class +INFO: Loading Class: org/apache/commons/compress/compressors/gzip/GzipCompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/gzip/GzipUtils.class +INFO: Loading Class: org/apache/commons/compress/compressors/gzip/GzipCompressorOutputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200Strategy$2.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/TempFileCachingStreamBridge.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/InMemoryCachingStreamBridge.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200Strategy.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200Utils.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/TempFileCachingStreamBridge$1.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200Strategy$1.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200CompressorOutputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/StreamBridge.class +INFO: Loading Class: org/apache/commons/compress/compressors/pack200/Pack200CompressorInputStream$1.class +INFO: Loading Class: org/apache/commons/compress/compressors/z/_internal_/InternalLZWInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/z/ZCompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/xz/XZCompressorOutputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/xz/XZCompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/compressors/xz/XZUtils.class +INFO: Loading Class: org/apache/commons/compress/compressors/CompressorInputStream.class +INFO: Loading Class: org/apache/commons/compress/changes/ChangeSetPerformer$ArchiveInputStreamIterator.class +INFO: Loading Class: org/apache/commons/compress/changes/ChangeSetPerformer.class +INFO: Loading Class: org/apache/commons/compress/changes/ChangeSet.class +INFO: Loading Class: org/apache/commons/compress/changes/Change.class +INFO: Loading Class: org/apache/commons/compress/changes/ChangeSetPerformer$ZipFileIterator.class +INFO: Loading Class: org/apache/commons/compress/changes/ChangeSetPerformer$ArchiveEntryIterator.class +INFO: Loading Class: org/apache/commons/compress/changes/ChangeSetResults.class +INFO: Loading Class: org/apache/commons/compress/utils/CountingInputStream.class +INFO: Loading Class: org/apache/commons/compress/utils/CRC32VerifyingInputStream.class +INFO: Loading Class: org/apache/commons/compress/utils/ChecksumVerifyingInputStream.class +INFO: Loading Class: org/apache/commons/compress/utils/IOUtils.class +INFO: Loading Class: org/apache/commons/compress/utils/BoundedInputStream.class +INFO: Loading Class: org/apache/commons/compress/utils/Charsets.class +INFO: Loading Class: org/apache/commons/compress/utils/CharsetNames.class +INFO: Loading Class: org/apache/commons/compress/utils/ArchiveUtils.class +INFO: Loading Class: org/apache/commons/compress/utils/CountingOutputStream.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpclient/4.3.3/18f4247ff4572a074444572cee34647c43e7c9c7/httpclient-4.3.3.jar +INFO: Loading Class: org/apache/http/auth/AUTH.class +INFO: Loading Class: org/apache/http/auth/AuthenticationException.class +INFO: Loading Class: org/apache/http/auth/AuthOption.class +INFO: Loading Class: org/apache/http/auth/AuthProtocolState.class +INFO: Loading Class: org/apache/http/auth/AuthScheme.class +INFO: Loading Class: org/apache/http/auth/AuthSchemeFactory.class +INFO: Loading Class: org/apache/http/auth/AuthSchemeProvider.class +INFO: Loading Class: org/apache/http/auth/AuthSchemeRegistry$1.class +INFO: Loading Class: org/apache/http/auth/AuthSchemeRegistry.class +INFO: Loading Class: org/apache/http/auth/AuthScope.class +INFO: Loading Class: org/apache/http/auth/AuthState.class +INFO: Loading Class: org/apache/http/auth/BasicUserPrincipal.class +INFO: Loading Class: org/apache/http/auth/ChallengeState.class +INFO: Loading Class: org/apache/http/auth/ContextAwareAuthScheme.class +INFO: Loading Class: org/apache/http/auth/Credentials.class +INFO: Loading Class: org/apache/http/auth/InvalidCredentialsException.class +INFO: Loading Class: org/apache/http/auth/MalformedChallengeException.class +INFO: Loading Class: org/apache/http/auth/NTCredentials.class +INFO: Loading Class: org/apache/http/auth/NTUserPrincipal.class +INFO: Loading Class: org/apache/http/auth/params/AuthParamBean.class +INFO: Loading Class: org/apache/http/auth/params/AuthParams.class +INFO: Loading Class: org/apache/http/auth/params/AuthPNames.class +INFO: Loading Class: org/apache/http/auth/UsernamePasswordCredentials.class +INFO: Loading Class: org/apache/http/client/AuthCache.class +INFO: Loading Class: org/apache/http/client/AuthenticationHandler.class +INFO: Loading Class: org/apache/http/client/AuthenticationStrategy.class +INFO: Loading Class: org/apache/http/client/BackoffManager.class +INFO: Loading Class: org/apache/http/client/CircularRedirectException.class +INFO: Loading Class: org/apache/http/client/ClientProtocolException.class +INFO: Loading Class: org/apache/http/client/config/AuthSchemes.class +INFO: Loading Class: org/apache/http/client/config/CookieSpecs.class +INFO: Loading Class: org/apache/http/client/config/RequestConfig$Builder.class +INFO: Loading Class: org/apache/http/client/config/RequestConfig.class +INFO: Loading Class: org/apache/http/client/ConnectionBackoffStrategy.class +INFO: Loading Class: org/apache/http/client/CookieStore.class +INFO: Loading Class: org/apache/http/client/CredentialsProvider.class +INFO: Loading Class: org/apache/http/client/entity/DecompressingEntity.class +INFO: Loading Class: org/apache/http/client/entity/DeflateDecompressingEntity.class +INFO: Loading Class: org/apache/http/client/entity/DeflateInputStream$DeflateStream.class +INFO: Loading Class: org/apache/http/client/entity/DeflateInputStream.class +INFO: Loading Class: org/apache/http/client/entity/EntityBuilder.class +INFO: Loading Class: org/apache/http/client/entity/GzipCompressingEntity.class +INFO: Loading Class: org/apache/http/client/entity/GzipDecompressingEntity.class +INFO: Loading Class: org/apache/http/client/entity/LazyDecompressingInputStream.class +INFO: Loading Class: org/apache/http/client/entity/UrlEncodedFormEntity.class +INFO: Loading Class: org/apache/http/client/HttpClient.class +INFO: Loading Class: org/apache/http/client/HttpRequestRetryHandler.class +INFO: Loading Class: org/apache/http/client/HttpResponseException.class +INFO: Loading Class: org/apache/http/client/methods/AbortableHttpRequest.class +INFO: Loading Class: org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class +INFO: Loading Class: org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class +INFO: Loading Class: org/apache/http/client/methods/AbstractExecutionAwareRequest.class +INFO: Loading Class: org/apache/http/client/methods/CloseableHttpResponse.class +INFO: Loading Class: org/apache/http/client/methods/Configurable.class +INFO: Loading Class: org/apache/http/client/methods/HttpDelete.class +INFO: Loading Class: org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class +INFO: Loading Class: org/apache/http/client/methods/HttpExecutionAware.class +INFO: Loading Class: org/apache/http/client/methods/HttpGet.class +INFO: Loading Class: org/apache/http/client/methods/HttpHead.class +INFO: Loading Class: org/apache/http/client/methods/HttpOptions.class +INFO: Loading Class: org/apache/http/client/methods/HttpPatch.class +INFO: Loading Class: org/apache/http/client/methods/HttpPost.class +INFO: Loading Class: org/apache/http/client/methods/HttpPut.class +INFO: Loading Class: org/apache/http/client/methods/HttpRequestBase.class +INFO: Loading Class: org/apache/http/client/methods/HttpRequestWrapper$1.class +INFO: Loading Class: org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class +INFO: Loading Class: org/apache/http/client/methods/HttpRequestWrapper.class +INFO: Loading Class: org/apache/http/client/methods/HttpTrace.class +INFO: Loading Class: org/apache/http/client/methods/HttpUriRequest.class +INFO: Loading Class: org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class +INFO: Loading Class: org/apache/http/client/methods/RequestBuilder$InternalRequest.class +INFO: Loading Class: org/apache/http/client/methods/RequestBuilder.class +INFO: Loading Class: org/apache/http/client/NonRepeatableRequestException.class +INFO: Loading Class: org/apache/http/client/params/AllClientPNames.class +INFO: Loading Class: org/apache/http/client/params/AuthPolicy.class +INFO: Loading Class: org/apache/http/client/params/ClientParamBean.class +INFO: Loading Class: org/apache/http/client/params/ClientPNames.class +INFO: Loading Class: org/apache/http/client/params/CookiePolicy.class +INFO: Loading Class: org/apache/http/client/params/HttpClientParamConfig.class +INFO: Loading Class: org/apache/http/client/params/HttpClientParams.class +INFO: Loading Class: org/apache/http/client/protocol/ClientContext.class +INFO: Loading Class: org/apache/http/client/protocol/ClientContextConfigurer.class +INFO: Loading Class: org/apache/http/client/protocol/HttpClientContext.class +INFO: Loading Class: org/apache/http/client/protocol/RequestAcceptEncoding.class +INFO: Loading Class: org/apache/http/client/protocol/RequestAddCookies.class +INFO: Loading Class: org/apache/http/client/protocol/RequestAuthCache.class +INFO: Loading Class: org/apache/http/client/protocol/RequestAuthenticationBase$1.class +INFO: Loading Class: org/apache/http/client/protocol/RequestAuthenticationBase.class +INFO: Loading Class: org/apache/http/client/protocol/RequestClientConnControl.class +INFO: Loading Class: org/apache/http/client/protocol/RequestDefaultHeaders.class +INFO: Loading Class: org/apache/http/client/protocol/RequestExpectContinue.class +INFO: Loading Class: org/apache/http/client/protocol/RequestProxyAuthentication.class +INFO: Loading Class: org/apache/http/client/protocol/RequestTargetAuthentication.class +INFO: Loading Class: org/apache/http/client/protocol/ResponseAuthCache$1.class +INFO: Loading Class: org/apache/http/client/protocol/ResponseAuthCache.class +INFO: Loading Class: org/apache/http/client/protocol/ResponseContentEncoding.class +INFO: Loading Class: org/apache/http/client/protocol/ResponseProcessCookies.class +INFO: Loading Class: org/apache/http/client/RedirectException.class +INFO: Loading Class: org/apache/http/client/RedirectHandler.class +INFO: Loading Class: org/apache/http/client/RedirectStrategy.class +INFO: Loading Class: org/apache/http/client/RequestDirector.class +INFO: Loading Class: org/apache/http/client/ResponseHandler.class +INFO: Loading Class: org/apache/http/client/ServiceUnavailableRetryStrategy.class +INFO: Loading Class: org/apache/http/client/UserTokenHandler.class +INFO: Loading Class: org/apache/http/client/utils/CloneUtils.class +INFO: Loading Class: org/apache/http/client/utils/DateUtils$DateFormatHolder$1.class +INFO: Loading Class: org/apache/http/client/utils/DateUtils$DateFormatHolder.class +INFO: Loading Class: org/apache/http/client/utils/DateUtils.class +INFO: Loading Class: org/apache/http/client/utils/HttpClientUtils.class +INFO: Loading Class: org/apache/http/client/utils/Idn.class +INFO: Loading Class: org/apache/http/client/utils/JdkIdn.class +INFO: Loading Class: org/apache/http/client/utils/Punycode.class +INFO: Loading Class: org/apache/http/client/utils/Rfc3492Idn.class +INFO: Loading Class: org/apache/http/client/utils/URIBuilder.class +INFO: Loading Class: org/apache/http/client/utils/URIUtils.class +INFO: Loading Class: org/apache/http/client/utils/URLEncodedUtils.class +INFO: Loading Class: org/apache/http/conn/BasicEofSensorWatcher.class +INFO: Loading Class: org/apache/http/conn/BasicManagedEntity.class +INFO: Loading Class: org/apache/http/conn/ClientConnectionManager.class +INFO: Loading Class: org/apache/http/conn/ClientConnectionManagerFactory.class +INFO: Loading Class: org/apache/http/conn/ClientConnectionOperator.class +INFO: Loading Class: org/apache/http/conn/ClientConnectionRequest.class +INFO: Loading Class: org/apache/http/conn/ConnectionKeepAliveStrategy.class +INFO: Loading Class: org/apache/http/conn/ConnectionPoolTimeoutException.class +INFO: Loading Class: org/apache/http/conn/ConnectionReleaseTrigger.class +INFO: Loading Class: org/apache/http/conn/ConnectionRequest.class +INFO: Loading Class: org/apache/http/conn/ConnectTimeoutException.class +INFO: Loading Class: org/apache/http/conn/DnsResolver.class +INFO: Loading Class: org/apache/http/conn/EofSensorInputStream.class +INFO: Loading Class: org/apache/http/conn/EofSensorWatcher.class +INFO: Loading Class: org/apache/http/conn/HttpClientConnectionManager.class +INFO: Loading Class: org/apache/http/conn/HttpConnectionFactory.class +INFO: Loading Class: org/apache/http/conn/HttpHostConnectException.class +INFO: Loading Class: org/apache/http/conn/HttpInetSocketAddress.class +INFO: Loading Class: org/apache/http/conn/HttpRoutedConnection.class +INFO: Loading Class: org/apache/http/conn/ManagedClientConnection.class +INFO: Loading Class: org/apache/http/conn/ManagedHttpClientConnection.class +INFO: Loading Class: org/apache/http/conn/MultihomePlainSocketFactory.class +INFO: Loading Class: org/apache/http/conn/OperatedClientConnection.class +INFO: Loading Class: org/apache/http/conn/params/ConnConnectionParamBean.class +INFO: Loading Class: org/apache/http/conn/params/ConnConnectionPNames.class +INFO: Loading Class: org/apache/http/conn/params/ConnManagerParamBean.class +INFO: Loading Class: org/apache/http/conn/params/ConnManagerParams$1.class +INFO: Loading Class: org/apache/http/conn/params/ConnManagerParams.class +INFO: Loading Class: org/apache/http/conn/params/ConnManagerPNames.class +INFO: Loading Class: org/apache/http/conn/params/ConnPerRoute.class +INFO: Loading Class: org/apache/http/conn/params/ConnPerRouteBean.class +INFO: Loading Class: org/apache/http/conn/params/ConnRouteParamBean.class +INFO: Loading Class: org/apache/http/conn/params/ConnRouteParams.class +INFO: Loading Class: org/apache/http/conn/params/ConnRoutePNames.class +INFO: Loading Class: org/apache/http/conn/routing/BasicRouteDirector.class +INFO: Loading Class: org/apache/http/conn/routing/HttpRoute.class +INFO: Loading Class: org/apache/http/conn/routing/HttpRouteDirector.class +INFO: Loading Class: org/apache/http/conn/routing/HttpRoutePlanner.class +INFO: Loading Class: org/apache/http/conn/routing/RouteInfo$LayerType.class +INFO: Loading Class: org/apache/http/conn/routing/RouteInfo$TunnelType.class +INFO: Loading Class: org/apache/http/conn/routing/RouteInfo.class +INFO: Loading Class: org/apache/http/conn/routing/RouteTracker.class +INFO: Loading Class: org/apache/http/conn/scheme/HostNameResolver.class +INFO: Loading Class: org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class +INFO: Loading Class: org/apache/http/conn/scheme/LayeredSocketFactory.class +INFO: Loading Class: org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class +INFO: Loading Class: org/apache/http/conn/scheme/PlainSocketFactory.class +INFO: Loading Class: org/apache/http/conn/scheme/Scheme.class +INFO: Loading Class: org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class +INFO: Loading Class: org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class +INFO: Loading Class: org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class +INFO: Loading Class: org/apache/http/conn/scheme/SchemeRegistry.class +INFO: Loading Class: org/apache/http/conn/scheme/SchemeSocketFactory.class +INFO: Loading Class: org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class +INFO: Loading Class: org/apache/http/conn/scheme/SocketFactory.class +INFO: Loading Class: org/apache/http/conn/scheme/SocketFactoryAdaptor.class +INFO: Loading Class: org/apache/http/conn/SchemePortResolver.class +INFO: Loading Class: org/apache/http/conn/socket/ConnectionSocketFactory.class +INFO: Loading Class: org/apache/http/conn/socket/LayeredConnectionSocketFactory.class +INFO: Loading Class: org/apache/http/conn/socket/PlainConnectionSocketFactory.class +INFO: Loading Class: org/apache/http/conn/ssl/AbstractVerifier.class +INFO: Loading Class: org/apache/http/conn/ssl/AllowAllHostnameVerifier.class +INFO: Loading Class: org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class +INFO: Loading Class: org/apache/http/conn/ssl/PrivateKeyDetails.class +INFO: Loading Class: org/apache/http/conn/ssl/PrivateKeyStrategy.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLConnectionSocketFactory.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLContextBuilder.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLContexts.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLInitializationException.class +INFO: Loading Class: org/apache/http/conn/ssl/SSLSocketFactory.class +INFO: Loading Class: org/apache/http/conn/ssl/StrictHostnameVerifier.class +INFO: Loading Class: org/apache/http/conn/ssl/TrustSelfSignedStrategy.class +INFO: Loading Class: org/apache/http/conn/ssl/TrustStrategy.class +INFO: Loading Class: org/apache/http/conn/ssl/X509HostnameVerifier.class +INFO: Loading Class: org/apache/http/conn/UnsupportedSchemeException.class +INFO: Loading Class: org/apache/http/conn/util/InetAddressUtils.class +INFO: Loading Class: org/apache/http/cookie/ClientCookie.class +INFO: Loading Class: org/apache/http/cookie/Cookie.class +INFO: Loading Class: org/apache/http/cookie/CookieAttributeHandler.class +INFO: Loading Class: org/apache/http/cookie/CookieIdentityComparator.class +INFO: Loading Class: org/apache/http/cookie/CookieOrigin.class +INFO: Loading Class: org/apache/http/cookie/CookiePathComparator.class +INFO: Loading Class: org/apache/http/cookie/CookieRestrictionViolationException.class +INFO: Loading Class: org/apache/http/cookie/CookieSpec.class +INFO: Loading Class: org/apache/http/cookie/CookieSpecFactory.class +INFO: Loading Class: org/apache/http/cookie/CookieSpecProvider.class +INFO: Loading Class: org/apache/http/cookie/CookieSpecRegistry$1.class +INFO: Loading Class: org/apache/http/cookie/CookieSpecRegistry.class +INFO: Loading Class: org/apache/http/cookie/MalformedCookieException.class +INFO: Loading Class: org/apache/http/cookie/params/CookieSpecParamBean.class +INFO: Loading Class: org/apache/http/cookie/params/CookieSpecPNames.class +INFO: Loading Class: org/apache/http/cookie/SetCookie.class +INFO: Loading Class: org/apache/http/cookie/SetCookie2.class +INFO: Loading Class: org/apache/http/cookie/SM.class +INFO: Loading Class: org/apache/http/impl/auth/AuthSchemeBase.class +INFO: Loading Class: org/apache/http/impl/auth/BasicScheme.class +INFO: Loading Class: org/apache/http/impl/auth/BasicSchemeFactory.class +INFO: Loading Class: org/apache/http/impl/auth/DigestScheme.class +INFO: Loading Class: org/apache/http/impl/auth/DigestSchemeFactory.class +INFO: Loading Class: org/apache/http/impl/auth/GGSSchemeBase$1.class +INFO: Loading Class: org/apache/http/impl/auth/GGSSchemeBase$State.class +INFO: Loading Class: org/apache/http/impl/auth/GGSSchemeBase.class +INFO: Loading Class: org/apache/http/impl/auth/HttpAuthenticator$1.class +INFO: Loading Class: org/apache/http/impl/auth/HttpAuthenticator.class +INFO: Loading Class: org/apache/http/impl/auth/HttpEntityDigester.class +INFO: Loading Class: org/apache/http/impl/auth/KerberosScheme.class +INFO: Loading Class: org/apache/http/impl/auth/KerberosSchemeFactory.class +INFO: Loading Class: org/apache/http/impl/auth/NegotiateScheme.class +INFO: Loading Class: org/apache/http/impl/auth/NegotiateSchemeFactory.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngine.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineException.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$MD4.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMEngineImpl.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMScheme$State.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMScheme.class +INFO: Loading Class: org/apache/http/impl/auth/NTLMSchemeFactory.class +INFO: Loading Class: org/apache/http/impl/auth/RFC2617Scheme.class +INFO: Loading Class: org/apache/http/impl/auth/SPNegoScheme.class +INFO: Loading Class: org/apache/http/impl/auth/SPNegoSchemeFactory.class +INFO: Loading Class: org/apache/http/impl/auth/SpnegoTokenGenerator.class +INFO: Loading Class: org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class +INFO: Loading Class: org/apache/http/impl/client/AbstractAuthenticationHandler.class +INFO: Loading Class: org/apache/http/impl/client/AbstractHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/AIMDBackoffManager.class +INFO: Loading Class: org/apache/http/impl/client/AuthenticationStrategyAdaptor.class +INFO: Loading Class: org/apache/http/impl/client/AuthenticationStrategyImpl.class +INFO: Loading Class: org/apache/http/impl/client/AutoRetryHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/BasicAuthCache.class +INFO: Loading Class: org/apache/http/impl/client/BasicCookieStore.class +INFO: Loading Class: org/apache/http/impl/client/BasicCredentialsProvider.class +INFO: Loading Class: org/apache/http/impl/client/BasicResponseHandler.class +INFO: Loading Class: org/apache/http/impl/client/ClientParamsStack.class +INFO: Loading Class: org/apache/http/impl/client/Clock.class +INFO: Loading Class: org/apache/http/impl/client/CloseableHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/CloseableHttpResponseProxy.class +INFO: Loading Class: org/apache/http/impl/client/ContentEncodingHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/DecompressingHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/DefaultBackoffStrategy.class +INFO: Loading Class: org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class +INFO: Loading Class: org/apache/http/impl/client/DefaultHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class +INFO: Loading Class: org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class +INFO: Loading Class: org/apache/http/impl/client/DefaultRedirectHandler.class +INFO: Loading Class: org/apache/http/impl/client/DefaultRedirectStrategy.class +INFO: Loading Class: org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class +INFO: Loading Class: org/apache/http/impl/client/DefaultRequestDirector.class +INFO: Loading Class: org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class +INFO: Loading Class: org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class +INFO: Loading Class: org/apache/http/impl/client/DefaultUserTokenHandler.class +INFO: Loading Class: org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class +INFO: Loading Class: org/apache/http/impl/client/EntityEnclosingRequestWrapper.class +INFO: Loading Class: org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class +INFO: Loading Class: org/apache/http/impl/client/FutureRequestExecutionMetrics.class +INFO: Loading Class: org/apache/http/impl/client/FutureRequestExecutionService.class +INFO: Loading Class: org/apache/http/impl/client/HttpAuthenticator.class +INFO: Loading Class: org/apache/http/impl/client/HttpClientBuilder.class +INFO: Loading Class: org/apache/http/impl/client/HttpClients.class +INFO: Loading Class: org/apache/http/impl/client/HttpRequestFutureTask.class +INFO: Loading Class: org/apache/http/impl/client/HttpRequestTaskCallable.class +INFO: Loading Class: org/apache/http/impl/client/InternalHttpClient$1.class +INFO: Loading Class: org/apache/http/impl/client/InternalHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/LaxRedirectStrategy.class +INFO: Loading Class: org/apache/http/impl/client/MinimalHttpClient$1.class +INFO: Loading Class: org/apache/http/impl/client/MinimalHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/NoopUserTokenHandler.class +INFO: Loading Class: org/apache/http/impl/client/NullBackoffStrategy.class +INFO: Loading Class: org/apache/http/impl/client/ProxyAuthenticationStrategy.class +INFO: Loading Class: org/apache/http/impl/client/ProxyClient.class +INFO: Loading Class: org/apache/http/impl/client/RedirectLocations.class +INFO: Loading Class: org/apache/http/impl/client/RequestWrapper.class +INFO: Loading Class: org/apache/http/impl/client/RoutedRequest.class +INFO: Loading Class: org/apache/http/impl/client/StandardHttpRequestRetryHandler.class +INFO: Loading Class: org/apache/http/impl/client/SystemClock.class +INFO: Loading Class: org/apache/http/impl/client/SystemDefaultCredentialsProvider.class +INFO: Loading Class: org/apache/http/impl/client/SystemDefaultHttpClient.class +INFO: Loading Class: org/apache/http/impl/client/TargetAuthenticationStrategy.class +INFO: Loading Class: org/apache/http/impl/client/TunnelRefusedException.class +INFO: Loading Class: org/apache/http/impl/conn/AbstractClientConnAdapter.class +INFO: Loading Class: org/apache/http/impl/conn/AbstractPooledConnAdapter.class +INFO: Loading Class: org/apache/http/impl/conn/AbstractPoolEntry.class +INFO: Loading Class: org/apache/http/impl/conn/BasicClientConnectionManager$1.class +INFO: Loading Class: org/apache/http/impl/conn/BasicClientConnectionManager.class +INFO: Loading Class: org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class +INFO: Loading Class: org/apache/http/impl/conn/BasicHttpClientConnectionManager.class +INFO: Loading Class: org/apache/http/impl/conn/ConnectionShutdownException.class +INFO: Loading Class: org/apache/http/impl/conn/CPool.class +INFO: Loading Class: org/apache/http/impl/conn/CPoolEntry.class +INFO: Loading Class: org/apache/http/impl/conn/CPoolProxy.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultClientConnection.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultClientConnectionOperator.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultHttpResponseParser.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultHttpRoutePlanner.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultProxyRoutePlanner.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultResponseParser.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultRoutePlanner.class +INFO: Loading Class: org/apache/http/impl/conn/DefaultSchemePortResolver.class +INFO: Loading Class: org/apache/http/impl/conn/HttpClientConnectionOperator.class +INFO: Loading Class: org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class +INFO: Loading Class: org/apache/http/impl/conn/HttpConnPool.class +INFO: Loading Class: org/apache/http/impl/conn/HttpPoolEntry.class +INFO: Loading Class: org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class +INFO: Loading Class: org/apache/http/impl/conn/IdleConnectionHandler.class +INFO: Loading Class: org/apache/http/impl/conn/InMemoryDnsResolver.class +INFO: Loading Class: org/apache/http/impl/conn/LoggingInputStream.class +INFO: Loading Class: org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class +INFO: Loading Class: org/apache/http/impl/conn/LoggingOutputStream.class +INFO: Loading Class: org/apache/http/impl/conn/LoggingSessionInputBuffer.class +INFO: Loading Class: org/apache/http/impl/conn/LoggingSessionOutputBuffer.class +INFO: Loading Class: org/apache/http/impl/conn/ManagedClientConnectionImpl.class +INFO: Loading Class: org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class +INFO: Loading Class: org/apache/http/impl/conn/PoolingClientConnectionManager$1.class +INFO: Loading Class: org/apache/http/impl/conn/PoolingClientConnectionManager.class +INFO: Loading Class: org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class +INFO: Loading Class: org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class +INFO: Loading Class: org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class +INFO: Loading Class: org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class +INFO: Loading Class: org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class +INFO: Loading Class: org/apache/http/impl/conn/ProxySelectorRoutePlanner.class +INFO: Loading Class: org/apache/http/impl/conn/SchemeRegistryFactory.class +INFO: Loading Class: org/apache/http/impl/conn/SingleClientConnManager$1.class +INFO: Loading Class: org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class +INFO: Loading Class: org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class +INFO: Loading Class: org/apache/http/impl/conn/SingleClientConnManager.class +INFO: Loading Class: org/apache/http/impl/conn/SystemDefaultDnsResolver.class +INFO: Loading Class: org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class +INFO: Loading Class: org/apache/http/impl/conn/SystemDefaultRoutePlanner.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/AbstractConnPool.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/BasicPoolEntry.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/PoolEntryRequest.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/RouteSpecificPool.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/WaitingThread.class +INFO: Loading Class: org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class +INFO: Loading Class: org/apache/http/impl/conn/Wire.class +INFO: Loading Class: org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/AbstractCookieSpec.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicClientCookie.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicClientCookie2.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicCommentHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicDomainHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicExpiresHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicMaxAgeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicPathHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/BasicSecureHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/BestMatchSpec.class +INFO: Loading Class: org/apache/http/impl/cookie/BestMatchSpecFactory.class +INFO: Loading Class: org/apache/http/impl/cookie/BrowserCompatSpec$1.class +INFO: Loading Class: org/apache/http/impl/cookie/BrowserCompatSpec$2.class +INFO: Loading Class: org/apache/http/impl/cookie/BrowserCompatSpec.class +INFO: Loading Class: org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class +INFO: Loading Class: org/apache/http/impl/cookie/BrowserCompatSpecFactory.class +INFO: Loading Class: org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/CookieSpecBase.class +INFO: Loading Class: org/apache/http/impl/cookie/DateParseException.class +INFO: Loading Class: org/apache/http/impl/cookie/DateUtils.class +INFO: Loading Class: org/apache/http/impl/cookie/IgnoreSpec.class +INFO: Loading Class: org/apache/http/impl/cookie/IgnoreSpecFactory.class +INFO: Loading Class: org/apache/http/impl/cookie/NetscapeDomainHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class +INFO: Loading Class: org/apache/http/impl/cookie/NetscapeDraftSpec.class +INFO: Loading Class: org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class +INFO: Loading Class: org/apache/http/impl/cookie/PublicSuffixFilter.class +INFO: Loading Class: org/apache/http/impl/cookie/PublicSuffixListParser.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2109DomainHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2109Spec.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2109SpecFactory.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2109VersionHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965Spec.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965SpecFactory.class +INFO: Loading Class: org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class +INFO: Loading Class: org/apache/http/impl/execchain/BackoffStrategyExec.class +INFO: Loading Class: org/apache/http/impl/execchain/ClientExecChain.class +INFO: Loading Class: org/apache/http/impl/execchain/ConnectionHolder.class +INFO: Loading Class: org/apache/http/impl/execchain/MainClientExec.class +INFO: Loading Class: org/apache/http/impl/execchain/MinimalClientExec.class +INFO: Loading Class: org/apache/http/impl/execchain/ProtocolExec.class +INFO: Loading Class: org/apache/http/impl/execchain/Proxies.class +INFO: Loading Class: org/apache/http/impl/execchain/RedirectExec.class +INFO: Loading Class: org/apache/http/impl/execchain/RequestAbortedException.class +INFO: Loading Class: org/apache/http/impl/execchain/RequestEntityExecHandler.class +INFO: Loading Class: org/apache/http/impl/execchain/ResponseEntityWrapper.class +INFO: Loading Class: org/apache/http/impl/execchain/ResponseProxyHandler.class +INFO: Loading Class: org/apache/http/impl/execchain/RetryExec.class +INFO: Loading Class: org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class +INFO: Loading Class: org/apache/http/impl/execchain/TunnelRefusedException.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.3/f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f/commons-logging-1.1.3.jar +INFO: Loading Class: org/apache/commons/logging/impl/AvalonLogger.class +INFO: Loading Class: org/apache/commons/logging/impl/SimpleLog.class +INFO: Loading Class: org/apache/commons/logging/impl/Log4JLogger.class +INFO: Loading Class: org/apache/commons/logging/impl/WeakHashtable.class +INFO: Loading Class: org/apache/commons/logging/impl/WeakHashtable$1.class +INFO: Loading Class: org/apache/commons/logging/impl/Jdk14Logger.class +INFO: Loading Class: org/apache/commons/logging/impl/ServletContextCleaner.class +INFO: Loading Class: org/apache/commons/logging/impl/WeakHashtable$WeakKey.class +INFO: Loading Class: org/apache/commons/logging/impl/NoOpLog.class +INFO: Loading Class: org/apache/commons/logging/impl/LogKitLogger.class +INFO: Loading Class: org/apache/commons/logging/impl/LogFactoryImpl$3.class +INFO: Loading Class: org/apache/commons/logging/impl/LogFactoryImpl$1.class +INFO: Loading Class: org/apache/commons/logging/impl/WeakHashtable$Referenced.class +INFO: Loading Class: org/apache/commons/logging/impl/SimpleLog$1.class +INFO: Loading Class: org/apache/commons/logging/impl/Jdk13LumberjackLogger.class +INFO: Loading Class: org/apache/commons/logging/impl/LogFactoryImpl.class +INFO: Loading Class: org/apache/commons/logging/impl/LogFactoryImpl$2.class +INFO: Loading Class: org/apache/commons/logging/impl/WeakHashtable$Entry.class +INFO: Loading Class: org/apache/commons/logging/LogSource.class +INFO: Loading Class: org/apache/commons/logging/LogFactory$4.class +INFO: Loading Class: org/apache/commons/logging/LogFactory$3.class +INFO: Loading Class: org/apache/commons/logging/LogFactory$6.class +INFO: Loading Class: org/apache/commons/logging/LogConfigurationException.class +INFO: Loading Class: org/apache/commons/logging/LogFactory.class +INFO: Loading Class: org/apache/commons/logging/LogFactory$5.class +INFO: Loading Class: org/apache/commons/logging/LogFactory$1.class +INFO: Loading Class: org/apache/commons/logging/LogFactory$2.class +INFO: Loading Class: org/apache/commons/logging/Log.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.httpcomponents/httpcore/4.3.2/31fbbff1ddbf98f3aa7377c94d33b0447c646b6e/httpcore-4.3.2.jar +INFO: Loading Class: org/apache/http/HttpMessage.class +INFO: Loading Class: org/apache/http/concurrent/Cancellable.class +INFO: Loading Class: org/apache/http/concurrent/FutureCallback.class +INFO: Loading Class: org/apache/http/concurrent/BasicFuture.class +INFO: Loading Class: org/apache/http/HeaderElementIterator.class +INFO: Loading Class: org/apache/http/HttpServerConnection.class +INFO: Loading Class: org/apache/http/ConnectionClosedException.class +INFO: Loading Class: org/apache/http/UnsupportedHttpVersionException.class +INFO: Loading Class: org/apache/http/MalformedChunkCodingException.class +INFO: Loading Class: org/apache/http/entity/AbstractHttpEntity.class +INFO: Loading Class: org/apache/http/entity/SerializableEntity.class +INFO: Loading Class: org/apache/http/entity/BufferedHttpEntity.class +INFO: Loading Class: org/apache/http/entity/ContentProducer.class +INFO: Loading Class: org/apache/http/entity/EntityTemplate.class +INFO: Loading Class: org/apache/http/entity/HttpEntityWrapper.class +INFO: Loading Class: org/apache/http/entity/BasicHttpEntity.class +INFO: Loading Class: org/apache/http/entity/FileEntity.class +INFO: Loading Class: org/apache/http/entity/InputStreamEntity.class +INFO: Loading Class: org/apache/http/entity/StringEntity.class +INFO: Loading Class: org/apache/http/entity/ByteArrayEntity.class +INFO: Loading Class: org/apache/http/entity/ContentType.class +INFO: Loading Class: org/apache/http/entity/ContentLengthStrategy.class +INFO: Loading Class: org/apache/http/HttpException.class +INFO: Loading Class: org/apache/http/params/SyncBasicHttpParams.class +INFO: Loading Class: org/apache/http/params/CoreConnectionPNames.class +INFO: Loading Class: org/apache/http/params/HttpProtocolParamBean.class +INFO: Loading Class: org/apache/http/params/HttpConnectionParamBean.class +INFO: Loading Class: org/apache/http/params/AbstractHttpParams.class +INFO: Loading Class: org/apache/http/params/HttpParams.class +INFO: Loading Class: org/apache/http/params/CoreProtocolPNames.class +INFO: Loading Class: org/apache/http/params/HttpConnectionParams.class +INFO: Loading Class: org/apache/http/params/DefaultedHttpParams.class +INFO: Loading Class: org/apache/http/params/HttpParamConfig.class +INFO: Loading Class: org/apache/http/params/HttpProtocolParams.class +INFO: Loading Class: org/apache/http/params/HttpParamsNames.class +INFO: Loading Class: org/apache/http/params/HttpAbstractParamBean.class +INFO: Loading Class: org/apache/http/params/BasicHttpParams.class +INFO: Loading Class: org/apache/http/TokenIterator.class +INFO: Loading Class: org/apache/http/MessageConstraintException.class +INFO: Loading Class: org/apache/http/HttpResponseFactory.class +INFO: Loading Class: org/apache/http/HttpEntityEnclosingRequest.class +INFO: Loading Class: org/apache/http/HttpHeaders.class +INFO: Loading Class: org/apache/http/impl/DefaultBHttpServerConnectionFactory.class +INFO: Loading Class: org/apache/http/impl/SocketHttpServerConnection.class +INFO: Loading Class: org/apache/http/impl/DefaultBHttpClientConnection.class +INFO: Loading Class: org/apache/http/impl/EnglishReasonPhraseCatalog.class +INFO: Loading Class: org/apache/http/impl/DefaultHttpResponseFactory.class +INFO: Loading Class: org/apache/http/impl/entity/StrictContentLengthStrategy.class +INFO: Loading Class: org/apache/http/impl/entity/LaxContentLengthStrategy.class +INFO: Loading Class: org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class +INFO: Loading Class: org/apache/http/impl/entity/EntityDeserializer.class +INFO: Loading Class: org/apache/http/impl/entity/EntitySerializer.class +INFO: Loading Class: org/apache/http/impl/DefaultHttpServerConnection.class +INFO: Loading Class: org/apache/http/impl/DefaultHttpClientConnection.class +INFO: Loading Class: org/apache/http/impl/BHttpConnectionBase.class +INFO: Loading Class: org/apache/http/impl/AbstractHttpServerConnection.class +INFO: Loading Class: org/apache/http/impl/NoConnectionReuseStrategy.class +INFO: Loading Class: org/apache/http/impl/DefaultBHttpClientConnectionFactory.class +INFO: Loading Class: org/apache/http/impl/DefaultBHttpServerConnection.class +INFO: Loading Class: org/apache/http/impl/AbstractHttpClientConnection.class +INFO: Loading Class: org/apache/http/impl/DefaultConnectionReuseStrategy.class +INFO: Loading Class: org/apache/http/impl/io/HttpTransportMetricsImpl.class +INFO: Loading Class: org/apache/http/impl/io/SessionOutputBufferImpl.class +INFO: Loading Class: org/apache/http/impl/io/AbstractSessionOutputBuffer.class +INFO: Loading Class: org/apache/http/impl/io/ChunkedOutputStream.class +INFO: Loading Class: org/apache/http/impl/io/HttpResponseWriter.class +INFO: Loading Class: org/apache/http/impl/io/IdentityOutputStream.class +INFO: Loading Class: org/apache/http/impl/io/ContentLengthInputStream.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpRequestParserFactory.class +INFO: Loading Class: org/apache/http/impl/io/AbstractMessageWriter.class +INFO: Loading Class: org/apache/http/impl/io/HttpResponseParser.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpRequestWriter.class +INFO: Loading Class: org/apache/http/impl/io/ChunkedInputStream.class +INFO: Loading Class: org/apache/http/impl/io/AbstractSessionInputBuffer.class +INFO: Loading Class: org/apache/http/impl/io/ContentLengthOutputStream.class +INFO: Loading Class: org/apache/http/impl/io/HttpRequestWriter.class +INFO: Loading Class: org/apache/http/impl/io/HttpRequestParser.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpResponseWriter.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpResponseParserFactory.class +INFO: Loading Class: org/apache/http/impl/io/SocketInputBuffer.class +INFO: Loading Class: org/apache/http/impl/io/SocketOutputBuffer.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpResponseParser.class +INFO: Loading Class: org/apache/http/impl/io/AbstractMessageParser.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpRequestParser.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class +INFO: Loading Class: org/apache/http/impl/io/SessionInputBufferImpl.class +INFO: Loading Class: org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class +INFO: Loading Class: org/apache/http/impl/io/IdentityInputStream.class +INFO: Loading Class: org/apache/http/impl/SocketHttpClientConnection.class +INFO: Loading Class: org/apache/http/impl/pool/BasicConnPool.class +INFO: Loading Class: org/apache/http/impl/pool/BasicPoolEntry.class +INFO: Loading Class: org/apache/http/impl/pool/BasicConnFactory.class +INFO: Loading Class: org/apache/http/impl/ConnSupport.class +INFO: Loading Class: org/apache/http/impl/HttpConnectionMetricsImpl.class +INFO: Loading Class: org/apache/http/impl/DefaultHttpRequestFactory.class +INFO: Loading Class: org/apache/http/HttpResponse.class +INFO: Loading Class: org/apache/http/HttpConnection.class +INFO: Loading Class: org/apache/http/ParseException.class +INFO: Loading Class: org/apache/http/HttpRequest.class +INFO: Loading Class: org/apache/http/HttpResponseInterceptor.class +INFO: Loading Class: org/apache/http/config/Registry.class +INFO: Loading Class: org/apache/http/config/RegistryBuilder.class +INFO: Loading Class: org/apache/http/config/Lookup.class +INFO: Loading Class: org/apache/http/config/SocketConfig.class +INFO: Loading Class: org/apache/http/config/MessageConstraints.class +INFO: Loading Class: org/apache/http/config/MessageConstraints$Builder.class +INFO: Loading Class: org/apache/http/config/ConnectionConfig.class +INFO: Loading Class: org/apache/http/config/ConnectionConfig$Builder.class +INFO: Loading Class: org/apache/http/config/SocketConfig$Builder.class +INFO: Loading Class: org/apache/http/HttpHost.class +INFO: Loading Class: org/apache/http/HttpVersion.class +INFO: Loading Class: org/apache/http/ReasonPhraseCatalog.class +INFO: Loading Class: org/apache/http/HttpConnectionMetrics.class +INFO: Loading Class: org/apache/http/ProtocolVersion.class +INFO: Loading Class: org/apache/http/MethodNotSupportedException.class +INFO: Loading Class: org/apache/http/HttpEntity.class +INFO: Loading Class: org/apache/http/protocol/HttpContext.class +INFO: Loading Class: org/apache/http/protocol/RequestExpectContinue.class +INFO: Loading Class: org/apache/http/protocol/HttpService.class +INFO: Loading Class: org/apache/http/protocol/DefaultedHttpContext.class +INFO: Loading Class: org/apache/http/protocol/RequestContent.class +INFO: Loading Class: org/apache/http/protocol/HttpRequestHandler.class +INFO: Loading Class: org/apache/http/protocol/ImmutableHttpProcessor.class +INFO: Loading Class: org/apache/http/protocol/ExecutionContext.class +INFO: Loading Class: org/apache/http/protocol/UriHttpRequestHandlerMapper.class +INFO: Loading Class: org/apache/http/protocol/ChainBuilder.class +INFO: Loading Class: org/apache/http/protocol/ResponseDate.class +INFO: Loading Class: org/apache/http/protocol/ResponseContent.class +INFO: Loading Class: org/apache/http/protocol/HttpResponseInterceptorList.class +INFO: Loading Class: org/apache/http/protocol/HttpRequestHandlerRegistry.class +INFO: Loading Class: org/apache/http/protocol/HttpRequestExecutor.class +INFO: Loading Class: org/apache/http/protocol/HttpRequestHandlerMapper.class +INFO: Loading Class: org/apache/http/protocol/HttpProcessor.class +INFO: Loading Class: org/apache/http/protocol/HttpRequestInterceptorList.class +INFO: Loading Class: org/apache/http/protocol/UriPatternMatcher.class +INFO: Loading Class: org/apache/http/protocol/HttpCoreContext.class +INFO: Loading Class: org/apache/http/protocol/BasicHttpContext.class +INFO: Loading Class: org/apache/http/protocol/SyncBasicHttpContext.class +INFO: Loading Class: org/apache/http/protocol/RequestDate.class +INFO: Loading Class: org/apache/http/protocol/HttpRequestHandlerResolver.class +INFO: Loading Class: org/apache/http/protocol/RequestConnControl.class +INFO: Loading Class: org/apache/http/protocol/BasicHttpProcessor.class +INFO: Loading Class: org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class +INFO: Loading Class: org/apache/http/protocol/HttpDateGenerator.class +INFO: Loading Class: org/apache/http/protocol/RequestUserAgent.class +INFO: Loading Class: org/apache/http/protocol/RequestTargetHost.class +INFO: Loading Class: org/apache/http/protocol/ResponseServer.class +INFO: Loading Class: org/apache/http/protocol/HttpExpectationVerifier.class +INFO: Loading Class: org/apache/http/protocol/ResponseConnControl.class +INFO: Loading Class: org/apache/http/protocol/HTTP.class +INFO: Loading Class: org/apache/http/protocol/HttpProcessorBuilder.class +INFO: Loading Class: org/apache/http/HttpClientConnection.class +INFO: Loading Class: org/apache/http/util/NetUtils.class +INFO: Loading Class: org/apache/http/util/EntityUtils.class +INFO: Loading Class: org/apache/http/util/Asserts.class +INFO: Loading Class: org/apache/http/util/ExceptionUtils.class +INFO: Loading Class: org/apache/http/util/VersionInfo.class +INFO: Loading Class: org/apache/http/util/ByteArrayBuffer.class +INFO: Loading Class: org/apache/http/util/EncodingUtils.class +INFO: Loading Class: org/apache/http/util/LangUtils.class +INFO: Loading Class: org/apache/http/util/Args.class +INFO: Loading Class: org/apache/http/util/CharsetUtils.class +INFO: Loading Class: org/apache/http/util/TextUtils.class +INFO: Loading Class: org/apache/http/util/CharArrayBuffer.class +INFO: Loading Class: org/apache/http/ConnectionReuseStrategy.class +INFO: Loading Class: org/apache/http/NameValuePair.class +INFO: Loading Class: org/apache/http/Header.class +INFO: Loading Class: org/apache/http/HttpRequestInterceptor.class +INFO: Loading Class: org/apache/http/io/HttpTransportMetrics.class +INFO: Loading Class: org/apache/http/io/SessionInputBuffer.class +INFO: Loading Class: org/apache/http/io/HttpMessageWriterFactory.class +INFO: Loading Class: org/apache/http/io/HttpMessageParserFactory.class +INFO: Loading Class: org/apache/http/io/EofSensor.class +INFO: Loading Class: org/apache/http/io/BufferInfo.class +INFO: Loading Class: org/apache/http/io/HttpMessageParser.class +INFO: Loading Class: org/apache/http/io/SessionOutputBuffer.class +INFO: Loading Class: org/apache/http/io/HttpMessageWriter.class +INFO: Loading Class: org/apache/http/RequestLine.class +INFO: Loading Class: org/apache/http/annotation/NotThreadSafe.class +INFO: Loading Class: org/apache/http/annotation/Immutable.class +INFO: Loading Class: org/apache/http/annotation/GuardedBy.class +INFO: Loading Class: org/apache/http/annotation/ThreadSafe.class +INFO: Loading Class: org/apache/http/NoHttpResponseException.class +INFO: Loading Class: org/apache/http/HttpRequestFactory.class +INFO: Loading Class: org/apache/http/Consts.class +INFO: Loading Class: org/apache/http/HeaderIterator.class +INFO: Loading Class: org/apache/http/pool/ConnPoolControl.class +INFO: Loading Class: org/apache/http/pool/PoolStats.class +INFO: Loading Class: org/apache/http/pool/RouteSpecificPool.class +INFO: Loading Class: org/apache/http/pool/AbstractConnPool$3.class +INFO: Loading Class: org/apache/http/pool/PoolEntry.class +INFO: Loading Class: org/apache/http/pool/PoolEntryFuture.class +INFO: Loading Class: org/apache/http/pool/ConnPool.class +INFO: Loading Class: org/apache/http/pool/AbstractConnPool$2.class +INFO: Loading Class: org/apache/http/pool/AbstractConnPool$1.class +INFO: Loading Class: org/apache/http/pool/ConnFactory.class +INFO: Loading Class: org/apache/http/pool/PoolEntryCallback.class +INFO: Loading Class: org/apache/http/pool/AbstractConnPool.class +INFO: Loading Class: org/apache/http/pool/AbstractConnPool$4.class +INFO: Loading Class: org/apache/http/message/HeaderGroup.class +INFO: Loading Class: org/apache/http/message/BasicHeaderValueFormatter.class +INFO: Loading Class: org/apache/http/message/HeaderValueFormatter.class +INFO: Loading Class: org/apache/http/message/BasicHeader.class +INFO: Loading Class: org/apache/http/message/BasicHeaderValueParser.class +INFO: Loading Class: org/apache/http/message/BasicLineParser.class +INFO: Loading Class: org/apache/http/message/AbstractHttpMessage.class +INFO: Loading Class: org/apache/http/message/HeaderValueParser.class +INFO: Loading Class: org/apache/http/message/LineFormatter.class +INFO: Loading Class: org/apache/http/message/BasicListHeaderIterator.class +INFO: Loading Class: org/apache/http/message/BasicHttpRequest.class +INFO: Loading Class: org/apache/http/message/ParserCursor.class +INFO: Loading Class: org/apache/http/message/BasicHttpEntityEnclosingRequest.class +INFO: Loading Class: org/apache/http/message/BasicHeaderElementIterator.class +INFO: Loading Class: org/apache/http/message/BasicRequestLine.class +INFO: Loading Class: org/apache/http/message/BasicStatusLine.class +INFO: Loading Class: org/apache/http/message/BasicTokenIterator.class +INFO: Loading Class: org/apache/http/message/BasicNameValuePair.class +INFO: Loading Class: org/apache/http/message/BasicHttpResponse.class +INFO: Loading Class: org/apache/http/message/BufferedHeader.class +INFO: Loading Class: org/apache/http/message/BasicHeaderIterator.class +INFO: Loading Class: org/apache/http/message/BasicHeaderElement.class +INFO: Loading Class: org/apache/http/message/BasicLineFormatter.class +INFO: Loading Class: org/apache/http/message/LineParser.class +INFO: Loading Class: org/apache/http/ProtocolException.class +INFO: Loading Class: org/apache/http/FormattedHeader.class +INFO: Loading Class: org/apache/http/StatusLine.class +INFO: Loading Class: org/apache/http/HttpStatus.class +INFO: Loading Class: org/apache/http/TruncatedChunkException.class +INFO: Loading Class: org/apache/http/HeaderElement.class +INFO: Loading Class: org/apache/http/HttpInetConnection.class +INFO: Loading Class: org/apache/http/ContentTooLongException.class +INFO: Loading Class: org/apache/http/HttpConnectionFactory.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/it.unimi.dsi/fastutil/7.1.0/9835253257524c1be7ab50c057aa2d418fb72082/fastutil-7.1.0.jar +INFO: Loading Class: it/unimi/dsi/fastutil/AbstractIndirectDoublePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/AbstractIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/AbstractPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/AbstractStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/Arrays$ForkJoinGenericQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/Arrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/BidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/BigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/BigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/BigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/BigSwapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/Function.class +INFO: Loading Class: it/unimi/dsi/fastutil/Hash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/Hash.class +INFO: Loading Class: it/unimi/dsi/fastutil/HashCommon.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectDoublePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectDoublePriorityQueues$EmptyIndirectDoublePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectDoublePriorityQueues$SynchronizedIndirectDoublePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectDoublePriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectPriorityQueues$EmptyIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectPriorityQueues$SynchronizedIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/IndirectPriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/Maps.class +INFO: Loading Class: it/unimi/dsi/fastutil/PriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/PriorityQueues$EmptyPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/PriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/PriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/Size64.class +INFO: Loading Class: it/unimi/dsi/fastutil/Stack.class +INFO: Loading Class: it/unimi/dsi/fastutil/Swapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanBigList$BooleanSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanBigList$BooleanSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanList$BooleanSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanList$BooleanSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/AbstractBooleanStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/booleans/BooleanStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByte2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteBigList$ByteSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteBigList$ByteSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteList$ByteSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteList$ByteSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractBytePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/AbstractByteStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/Byte2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayFrontCodedList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayFrontCodedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$IntervalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/BytePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/BytePriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/BytePriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/bytes/ByteStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractChar2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharBigList$CharSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharBigList$CharSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharList$CharSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharList$CharSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/AbstractCharStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/Char2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayFrontCodedList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayFrontCodedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$IntervalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharPriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharPriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/chars/CharStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDouble2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleBigList$DoubleSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleBigList$DoubleSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleList$DoubleSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleList$DoubleSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoublePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/AbstractDoubleStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/Double2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$ByteIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$FloatIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$IntIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$ShortIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenHashBigSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenHashBigSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenHashBigSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoublePriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoublePriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoublePriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/doubles/DoubleStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloat2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatBigList$FloatSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatBigList$FloatSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatList$FloatSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatList$FloatSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/AbstractFloatStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/Float2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$ByteIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$ShortIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenHashBigSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenHashBigSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenHashBigSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatPriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatPriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/floats/FloatStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractInt2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntBigList$IntSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntBigList$IntSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntList$IntSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntList$IntSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/AbstractIntStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/Int2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayFrontCodedList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayFrontCodedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$ByteIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$IntervalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$ShortIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenHashBigSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenHashBigSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenHashBigSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntPriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntPriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/ints/IntStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$10.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$11.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$12.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$13.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$14.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$15.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$16.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$4.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$5.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$6.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$7.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$8.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$9.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$BooleanDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$ByteDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$CharDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$DoubleDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$FloatDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$IntDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$LongDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO$ShortDataInputWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/BinIO.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/FastBufferedInputStream$LineTerminator.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/FastBufferedInputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/FastBufferedOutputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/FastByteArrayInputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/FastByteArrayOutputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/FastMultiByteArrayInputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/InspectableFileCachedInputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/MeasurableInputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/MeasurableOutputStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/MeasurableStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/RepositionableStream.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$10.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$11.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$12.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$13.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$14.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$4.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$5.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$6.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$7.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$8.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$9.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$BooleanReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$ByteReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$DoubleReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$FloatReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$IntReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$LongReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO$ShortReaderWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/io/TextIO.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLong2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongBigList$LongSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongBigList$LongSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongList$LongSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongList$LongSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/AbstractLongStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/Long2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayFrontCodedList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayFrontCodedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$ByteIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$IntIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$IntervalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$ShortIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenHashBigSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenHashBigSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenHashBigSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongPriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongPriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/longs/LongStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObject2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectBigList$ObjectSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectBigList$ObjectSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectList$ObjectSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectList$ObjectSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractObjectSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReference2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceBigList$ReferenceSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceBigList$ReferenceSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceList$ReferenceSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceList$ReferenceSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/AbstractReferenceSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Object2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenHashBigSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenHashBigSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenHashBigSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ObjectSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/Reference2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceOpenHashBigSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceOpenHashBigSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceOpenHashBigSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/objects/ReferenceSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortMap$1$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortMap$BasicEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortSortedMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortSortedMap$KeySetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortSortedMap$ValuesCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortSortedMap$ValuesIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShort2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortBigList$ShortSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortBigList$ShortSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortList$ShortSubList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortList$ShortSubList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/AbstractShortStack.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2BooleanSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ByteSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2CharSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2DoubleSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2FloatSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2IntSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2LongSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ObjectSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ReferenceSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortAVLTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortArrayMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortArrayMap$EntrySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortArrayMap$EntrySet$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortArrayMap$EntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortArrayMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortFunctions$EmptyFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortFunctions$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortFunctions$SynchronizedFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortFunctions$UnmodifiableFunction.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortFunctions.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortLinkedOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMap$FastEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMaps$EmptyMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMaps$Singleton$SingletonEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMaps$SynchronizedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMaps$UnmodifiableMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenCustomHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$FastEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$MapEntry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$MapEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$MapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortOpenHashMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$2$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$EntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$KeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$KeySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$SubmapEntryIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$SubmapIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$SubmapKeyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap$SubmapValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$Submap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$TreeIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap$ValueIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortRBTreeMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMap$FastSortedEntrySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMaps$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMaps$EmptySortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMaps$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMaps$SynchronizedSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMaps$UnmodifiableSortedMap.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/Short2ShortSortedMaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortAVLTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortAVLTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortAVLTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortAVLTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortAVLTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortAVLTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayFIFOQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayFrontCodedList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayFrontCodedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrayPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArraySet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArraySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$3.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$ArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$ForkJoinQuickSort.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$ForkJoinQuickSort2.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$ForkJoinQuickSortComp.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$ForkJoinQuickSortIndirect.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays$Segment.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigArrayBigList$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigArrayBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigArrays$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigArrays$BigArrayHashStrategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigArrays.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigListIterators$BigListIteratorListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigListIterators$EmptyBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigListIterators$SingletonBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigListIterators$UnmodifiableBigListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigListIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists$EmptyBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists$ListBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists$SynchronizedBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists$UnmodifiableBigList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortBigLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortCollections$EmptyCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortCollections$IterableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortCollections$SynchronizedCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortCollections$UnmodifiableCollection.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortCollections.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortComparators$NaturalImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortComparators$OppositeComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortComparators$OppositeImplicitComparator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortComparators.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortHash$Strategy.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortHash.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortHeapIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortHeapPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortHeapSemiIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIndirectPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterable.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$ArrayIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$ByteIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$EmptyIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$IntervalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$IteratorConcatenator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$IteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$ListIteratorWrapper.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$SingletonIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$UnmodifiableBidirectionalIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$UnmodifiableIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators$UnmodifiableListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortIterators.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLinkedOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLinkedOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLinkedOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLinkedOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortListIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLists$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLists$EmptyList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLists$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLists$SynchronizedList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLists$UnmodifiableList.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortLists.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortOpenCustomHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortOpenCustomHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortOpenCustomHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortOpenHashSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortOpenHashSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortOpenHashSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortPriorityQueues$SynchronizedPriorityQueue.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortPriorityQueues.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortRBTreeSet$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortRBTreeSet$Entry.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortRBTreeSet$SetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortRBTreeSet$Subset$SubsetIterator.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortRBTreeSet$Subset.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortRBTreeSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSemiIndirectHeaps.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSets$SynchronizedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSets$UnmodifiableSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSets$1.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSets$EmptySet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSets$Singleton.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSets$SynchronizedSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSets$UnmodifiableSortedSet.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortSortedSets.class +INFO: Loading Class: it/unimi/dsi/fastutil/shorts/ShortStack.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.8.1/e801d13612e22cad62a3f4f3fe7fdbe6334a8e72/log4j-api-2.8.1.jar +INFO: Loading Class: org/apache/logging/log4j/Logger.class +INFO: Loading Class: org/apache/logging/log4j/MarkerManager$Log4jMarker.class +INFO: Loading Class: org/apache/logging/log4j/message/ExitMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/LocalizedMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/MessageFactory2.class +INFO: Loading Class: org/apache/logging/log4j/message/ParameterizedMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ReusableSimpleMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/StructuredDataMessage.class +INFO: Loading Class: org/apache/logging/log4j/simple/SimpleLogger.class +INFO: Loading Class: org/apache/logging/log4j/spi/DefaultThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerContext.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerContextFactory.class +INFO: Loading Class: org/apache/logging/log4j/spi/MutableThreadContextStack.class +INFO: Loading Class: org/apache/logging/log4j/spi/ThreadContextMap2.class +INFO: Loading Class: org/apache/logging/log4j/ThreadContext$1.class +INFO: Loading Class: org/apache/logging/log4j/ThreadContext$ContextStack.class +INFO: Loading Class: org/apache/logging/log4j/util/Constants.class +INFO: Loading Class: org/apache/logging/log4j/util/EnglishEnums.class +INFO: Loading Class: org/apache/logging/log4j/util/LowLevelLogUtil.class +INFO: Loading Class: org/apache/logging/log4j/util/ReflectionUtil.class +INFO: Loading Class: org/apache/logging/log4j/util/Unbox$1.class +INFO: Loading Class: org/apache/logging/log4j/message/ExtendedThreadInformation$1.class +INFO: Loading Class: org/apache/logging/log4j/message/LoggerNameAwareMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/MessageFormatMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory$StatusMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/SimpleMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadDumpMessage$BasicThreadInfoFactory.class +INFO: Loading Class: org/apache/logging/log4j/simple/SimpleLoggerContext.class +INFO: Loading Class: org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerAdapter.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerRegistry$WeakMapFactory.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerRegistry.class +INFO: Loading Class: org/apache/logging/log4j/status/StatusConsoleListener.class +INFO: Loading Class: org/apache/logging/log4j/status/StatusData.class +INFO: Loading Class: org/apache/logging/log4j/status/StatusListener.class +INFO: Loading Class: org/apache/logging/log4j/util/Activator.class +INFO: Loading Class: org/apache/logging/log4j/util/LoaderUtil$1.class +INFO: Loading Class: org/apache/logging/log4j/util/ProviderUtil.class +INFO: Loading Class: org/apache/logging/log4j/util/StringMap.class +INFO: Loading Class: org/apache/logging/log4j/util/Strings.class +INFO: Loading Class: org/apache/logging/log4j/CloseableThreadContext$1.class +INFO: Loading Class: org/apache/logging/log4j/LoggingException.class +INFO: Loading Class: org/apache/logging/log4j/LogManager.class +INFO: Loading Class: org/apache/logging/log4j/Marker.class +INFO: Loading Class: org/apache/logging/log4j/message/AbstractMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/EntryMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/LocalizedMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/MessageFormatMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ReusableMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/StringFormatterMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/StructuredDataMessage$Format.class +INFO: Loading Class: org/apache/logging/log4j/spi/AbstractLoggerAdapter.class +INFO: Loading Class: org/apache/logging/log4j/spi/ExtendedLogger.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerContextKey.class +INFO: Loading Class: org/apache/logging/log4j/spi/NoOpThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/ObjectThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/ThreadContextStack.class +INFO: Loading Class: org/apache/logging/log4j/util/Chars.class +INFO: Loading Class: org/apache/logging/log4j/util/LoaderUtil$UrlResource.class +INFO: Loading Class: org/apache/logging/log4j/util/ReflectionUtil$PrivateSecurityManager.class +INFO: Loading Class: org/apache/logging/log4j/util/Supplier.class +INFO: Loading Class: org/apache/logging/log4j/MarkerManager.class +INFO: Loading Class: org/apache/logging/log4j/message/DefaultFlowMessageFactory$AbstractFlowMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ExtendedThreadInformation.class +INFO: Loading Class: org/apache/logging/log4j/message/FlowMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/MapMessage$MapFormat.class +INFO: Loading Class: org/apache/logging/log4j/message/ObjectArrayMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ReusableMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ReusableParameterizedMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadDumpMessage$1.class +INFO: Loading Class: org/apache/logging/log4j/message/TimestampMessage.class +INFO: Loading Class: org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap$1.class +INFO: Loading Class: org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap$1.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerRegistry$ConcurrentMapFactory.class +INFO: Loading Class: org/apache/logging/log4j/spi/ThreadContextMapFactory.class +INFO: Loading Class: org/apache/logging/log4j/ThreadContext$EmptyIterator.class +INFO: Loading Class: org/apache/logging/log4j/util/IndexedReadOnlyStringMap.class +INFO: Loading Class: org/apache/logging/log4j/util/MessageSupplier.class +INFO: Loading Class: org/apache/logging/log4j/util/SortedArrayStringMap$1.class +INFO: Loading Class: org/apache/logging/log4j/util/TriConsumer.class +INFO: Loading Class: org/apache/logging/log4j/CloseableThreadContext$Instance.class +INFO: Loading Class: org/apache/logging/log4j/message/DefaultFlowMessageFactory$SimpleExitMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/MapMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ParameterizedMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/StructuredDataId.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadInformation.class +INFO: Loading Class: org/apache/logging/log4j/spi/CopyOnWrite.class +INFO: Loading Class: org/apache/logging/log4j/spi/ExtendedLoggerWrapper.class +INFO: Loading Class: org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/ReadOnlyThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/StandardLevel.class +INFO: Loading Class: org/apache/logging/log4j/ThreadContext.class +INFO: Loading Class: org/apache/logging/log4j/util/LambdaUtil.class +INFO: Loading Class: org/apache/logging/log4j/util/SortedArrayStringMap.class +INFO: Loading Class: org/apache/logging/log4j/CloseableThreadContext.class +INFO: Loading Class: org/apache/logging/log4j/message/DefaultFlowMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/FormattedMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ObjectMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ReusableObjectMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadDumpMessage$ThreadInfoFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadDumpMessage.class +INFO: Loading Class: org/apache/logging/log4j/spi/CleanableThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/spi/DefaultThreadContextStack.class +INFO: Loading Class: org/apache/logging/log4j/spi/MessageFactory2Adapter.class +INFO: Loading Class: org/apache/logging/log4j/spi/Terminable.class +INFO: Loading Class: org/apache/logging/log4j/status/StatusLogger$BoundedQueue.class +INFO: Loading Class: org/apache/logging/log4j/util/BiConsumer.class +INFO: Loading Class: org/apache/logging/log4j/util/LoaderUtil$ThreadContextClassLoaderGetter.class +INFO: Loading Class: org/apache/logging/log4j/util/ReadOnlyStringMap.class +INFO: Loading Class: org/apache/logging/log4j/util/StringBuilders.class +INFO: Loading Class: org/apache/logging/log4j/util/Unbox$WebSafeState.class +INFO: Loading Class: org/apache/logging/log4j/EventLogger.class +INFO: Loading Class: org/apache/logging/log4j/message/AsynchronouslyFormattable.class +INFO: Loading Class: org/apache/logging/log4j/message/BasicThreadInformation.class +INFO: Loading Class: org/apache/logging/log4j/message/DefaultFlowMessageFactory$SimpleEntryMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/MapMessage$1.class +INFO: Loading Class: org/apache/logging/log4j/message/MultiformatMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/SimpleMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadDumpMessage$ExtendedThreadInfoFactory.class +INFO: Loading Class: org/apache/logging/log4j/simple/SimpleLoggerContextFactory.class +INFO: Loading Class: org/apache/logging/log4j/spi/AbstractLogger.class +INFO: Loading Class: org/apache/logging/log4j/spi/ThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/status/StatusLogger.class +INFO: Loading Class: org/apache/logging/log4j/ThreadContext$EmptyThreadContextStack.class +INFO: Loading Class: org/apache/logging/log4j/util/IndexedStringMap.class +INFO: Loading Class: org/apache/logging/log4j/util/PerformanceSensitive.class +INFO: Loading Class: org/apache/logging/log4j/util/StringBuilderFormattable.class +INFO: Loading Class: org/apache/logging/log4j/util/Unbox$State.class +INFO: Loading Class: org/apache/logging/log4j/Level.class +INFO: Loading Class: org/apache/logging/log4j/message/FlowMessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/FormattedMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/Message.class +INFO: Loading Class: org/apache/logging/log4j/message/MessageFactory.class +INFO: Loading Class: org/apache/logging/log4j/message/ParameterFormatter.class +INFO: Loading Class: org/apache/logging/log4j/message/StringFormattedMessage.class +INFO: Loading Class: org/apache/logging/log4j/message/ThreadDumpMessage$ThreadDumpMessageProxy.class +INFO: Loading Class: org/apache/logging/log4j/spi/DefaultThreadContextMap$1.class +INFO: Loading Class: org/apache/logging/log4j/spi/LoggerRegistry$MapFactory.class +INFO: Loading Class: org/apache/logging/log4j/spi/Provider.class +INFO: Loading Class: org/apache/logging/log4j/util/LoaderUtil.class +INFO: Loading Class: org/apache/logging/log4j/util/PropertiesUtil.class +INFO: Loading Class: org/apache/logging/log4j/util/Unbox.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.8.1/4ac28ff2f1ddf05dae3043a190451e8c46b73c31/log4j-core-2.8.1.jar +INFO: Loading Class: org/apache/logging/log4j/core/appender/AbstractManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AsyncAppender$AsyncThread.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$SystemOutStream.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/CountingNoOpAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/ColumnMapping$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/LevelAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FailoverAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileManager$FileManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsManager$JmsConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/OutputStreamAppender$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileManager$RandomAccessFileManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy$Mode.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/GzCompressAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfAll.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfFileName.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/SortingVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RollingFileAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/Route.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/RoutingAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SmtpAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SyslogAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/WriterAppender$WriterManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/Appender.class +INFO: Loading Class: org/apache/logging/log4j/core/async/ArrayBlockingQueueFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfig$RootLogger.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDefaultExceptionHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDelegate.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor$2.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor$Log4jEventWrapper.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerContext.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerDefaultExceptionHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/async/BlockingQueueFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/DefaultAsyncQueueFullPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/async/DisruptorUtil$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/EventRoute$2.class +INFO: Loading Class: org/apache/logging/log4j/core/async/EventRoute.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$MpscBlockingQueue.class +INFO: Loading Class: org/apache/logging/log4j/core/config/json/JsonConfigurationFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/LockingReliabilityStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/PluginManager.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidHost.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/validators/RequiredValidator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/validators/ValidPortValidator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginValueVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Property.class +INFO: Loading Class: org/apache/logging/log4j/core/config/xml/XmlConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/Filterable.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/LevelRangeFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/RegexFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/ThreadContextMapFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ContextAnchor.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ExtendedClassInfo.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap$2.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/Log4jLogEvent$LogEventProxy.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThrowableFormatOptions.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ExtendedStackTraceElementMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ListOfMapEntryDeserializer$1.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternLayout$PatternSerializer.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternMatch.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$ExcludeChecker.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$ListChecker.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/ScriptPatternSelector$1.class +INFO: Loading Class: org/apache/logging/log4j/core/osgi/BundleContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager.class +INFO: Loading Class: org/apache/logging/log4j/core/StringLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$CustomLogger.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$LevelInfo.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$Type.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Assert.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Cancellable.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ClockFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CoarseCachedClock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/DatePrinter.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$3.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$ISO8601TimeZoneStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$TimeZoneStrategy$TzInfo.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$NumberRule.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TextField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TwoDigitMonthField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$WeekYear.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/Format.class +INFO: Loading Class: org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry.class +INFO: Loading Class: org/apache/logging/log4j/core/util/JndiCloser.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Log4jThread.class +INFO: Loading Class: org/apache/logging/log4j/core/util/NanoClock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/NullOutputStream.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ReflectionUtil.class +INFO: Loading Class: org/apache/logging/log4j/core/util/StringBuilderWriter.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Throwables.class +INFO: Loading Class: org/apache/logging/log4j/core/util/UuidUtil.class +INFO: Loading Class: org/apache/logging/log4j/core/util/WatchManager.class +INFO: Loading Class: org/apache/logging/log4j/core/AbstractLifeCycle.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AbstractWriterAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AppenderSet.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/ColumnConfig$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsManager$JmsManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaProducerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension$2.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension$4.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension$6.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileSize.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/PatternProcessor.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingFileManager$AsyncAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingFileManager$EmptyQueue.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingFileManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingFileManager$RollingFileManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingFileManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RollingFileAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/Routes.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ScriptAppenderSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SocketAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/TlsSyslogFrame.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/WriterAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$WaitStrategy$2.class +INFO: Loading Class: org/apache/logging/log4j/core/async/RingBufferLogEventTranslator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AppenderControl.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/AppenderRefComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/ComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilderFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/FilterableComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/LoggableComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/ScriptComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultComponentAndConfigurationBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultCompositeFilterComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/LoggerConfig.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/EnumConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$BigIntegerConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$ByteArrayConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$CharArrayConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$DoubleConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$InetAddressConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$SecurityProviderConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginAliases.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginElement.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/processor/PluginEntry.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/PluginRegistry$PluginTest.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/PluginRegistry.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/AbstractPluginVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/PropertiesPlugin.class +INFO: Loading Class: org/apache/logging/log4j/core/config/status/StatusConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/AbstractFilterable$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/BurstFilter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/Log4jLogEvent.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/JsonConstants.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/MarkerPatternSelector$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/MarkerPatternSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternLayout$1.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/ScriptPatternSelector$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/SerializedLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/SyslogLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/YamlLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/LogEvent.class +INFO: Loading Class: org/apache/logging/log4j/core/Logger.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/Interpolator.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/MapLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrMatcher$StringMatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StructuredDataLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Advertiser.class +INFO: Loading Class: org/apache/logging/log4j/core/net/DatagramSocketManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/net/mom/jms/JmsTopicReceiver.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/LogEventBridge.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/ObjectInputStreamLogEventBridge.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/TcpSocketServer$CommandLineArguments.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/TcpSocketServer.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Severity$1.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SmtpManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Black.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Blue.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Cyan.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Green.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Magenta.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Red.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$White.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter$Yellow.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AnsiConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/AnsiEscape.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ArrayPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/CachedDateFormat.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/LiteralPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MarkerPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MdcPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$MaxElementAbbreviator$Strategy$2.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$NOPAbbreviator.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NdcPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/PatternParser$1.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/PatternParser.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ThreadNamePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/UuidPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/script/AbstractScript.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$MainScriptRunner$1.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$ThreadLocalScriptRunner$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/BasicCommandLineArguments.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Clock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CloseShieldOutputStream.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CronExpression$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$2.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$CaseInsensitiveTextStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$StrategyParser.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$Rule.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TimeZoneDisplayKey.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AbstractAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AsyncAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AsyncAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/ColumnMapping$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapJsonAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/MessageAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager$JPADatabaseManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/OutputStreamAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/CompositeTriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy$CronTrigger.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/DirectFileRolloverStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/DirectWriteRolloverStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension$3.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension$5.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/FileExtension.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingFileManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$WaitStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AppenderRef.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$FloatConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$PatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/ResolverUtil.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginConfigurationVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitors.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/yaml/YamlConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/ContextDataInjector.class +INFO: Loading Class: org/apache/logging/log4j/core/ErrorHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/AbstractFilterable.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/BurstFilter$LogDelay.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/DynamicThresholdFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/RegexFilter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/ScriptFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/ThresholdFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/Filter.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/DefaultLogEventFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/Log4jContextFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThreadContextDataInjector$ForDefaultThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer$1.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataSerializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Initializers.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/LoggerContextAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/StatusLoggerAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractCsvLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractJacksonLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractStringLayout$Serializer.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractStringLayout$Serializer2.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/CsvLogEventLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout$1.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout$CompressionType$2.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JacksonFactory$JSON.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JacksonFactory$Log4jXmlPrettyPrinter.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JacksonFactory$XML.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JacksonFactory$YAML.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JsonLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/LockingStringBuilderEncoder.class +INFO: Loading Class: org/apache/logging/log4j/core/net/MulticastDnsAdvertiser.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Priority.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Protocol.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Rfc1349TrafficClass.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/AbstractLogEventBridge.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/AbstractSocketServer$CommandLineArguments.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/AbstractSocketServer$ServerConfigurationFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/AbstractSocketServer.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/InputStreamLogEventBridge.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/JmsServer.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SocketAddress.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SocketPerformancePreferences.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/KeyStoreConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/SslConfigurationException.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$ThreadLocalScriptRunner.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CachedClock$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Closer.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Constants.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateFormat$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$4.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$NumberStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$TimeZoneStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TimeZoneNumberRule.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TwoDigitNumberField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Integers.class +INFO: Loading Class: org/apache/logging/log4j/core/util/KeyValuePair.class +INFO: Loading Class: org/apache/logging/log4j/core/util/NetUtils.class +INFO: Loading Class: org/apache/logging/log4j/core/util/SetUtils.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AbstractAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AppenderSet$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/ColumnConfig.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/ConnectionSource.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/DataSourceConnectionSource.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSource$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/FactoryMethodConnectionSource.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/StackTraceElementAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/DefaultErrorHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/AbstractAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/Action.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/Routes$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/RoutingAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/WriterAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$WaitStrategy$3.class +INFO: Loading Class: org/apache/logging/log4j/core/async/ThreadNameCachingStrategy$2.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AppenderControlArraySet.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/AppenderComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/CompositeFilterComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$ClassConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$IntegerConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$ShortConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/Plugin.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor$1.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/ResolverUtil$Test.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/Constraint.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/ConstraintValidator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginNodeVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/properties/PropertiesConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Scheduled.class +INFO: Loading Class: org/apache/logging/log4j/core/config/xml/XmlConfiguration$Status.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ReusableLogEventFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThrowableProxy$CacheEntry.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThrowableProxy.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jJsonObjectMapper.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jXmlModule.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jYamlModule.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/LogEventJsonMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/MapEntry.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/MessageSerializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/MutableThreadContextStackDeserializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/StackTraceElementMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ThrowableProxyWithoutStacktraceMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/AppenderAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/AsyncAppenderAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/ContextSelectorAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/LoggerConfigAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/RingBufferAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/Server.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractStringLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout$CompressionType$3.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/HtmlLayout$1.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$IncludeChecker.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$NoopChecker.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/ScriptPatternSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/SyslogLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/XmlLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/Layout.class +INFO: Loading Class: org/apache/logging/log4j/core/LifeCycle2.class +INFO: Loading Class: org/apache/logging/log4j/core/Logger$PrivateConfig.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/ContextMapLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/EnvironmentLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/JmxRuntimeInputArgumentsLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/JndiLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/MarkerLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrMatcher$CharMatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrMatcher$TrimMatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/SystemPropertiesLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/net/DatagramOutputStream.class +INFO: Loading Class: org/apache/logging/log4j/core/net/DatagramSocketManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Facility.class +INFO: Loading Class: org/apache/logging/log4j/core/net/JndiManager$JndiManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/net/MimeMessageBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/net/mom/jms/JmsQueueReceiver.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SslSocketManager$SslFactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SslSocketManager$SslSocketManagerFactory$TlsSocketManagerFactoryException.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SslSocketManager$SslSocketManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SslSocketManager.class +INFO: Loading Class: org/apache/logging/log4j/core/net/TcpSocketManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/net/TcpSocketManager$Reconnector.class +INFO: Loading Class: org/apache/logging/log4j/core/net/TcpSocketManager$TcpSocketManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/net/TcpSocketManager.class +INFO: Loading Class: org/apache/logging/log4j/core/osgi/Activator.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/IntegerPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MapPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MdcPatternConverter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MethodLocationPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$MaxElementAbbreviator$Strategy$1.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$MaxElementAbbreviator.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$PatternAbbreviatorFragment.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NanoTimePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/PatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/PatternParser$ParserState.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/PlainTextRenderer.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/RegexReplacementConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/SequenceNumberPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/StyleConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ThrowablePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/script/Script.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$AbstractScriptRunner.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$MainScriptRunner.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptRef.class +INFO: Loading Class: org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$Type$1.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$6.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$Strategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$CharacterLiteral.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$PaddedNumberField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TwelveHourField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$UnpaddedMonthField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FixedDateFormat.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ExtensionLanguageMapping.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Loader.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Patterns.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ShutdownCallbackRegistry.class +INFO: Loading Class: org/apache/logging/log4j/core/util/SystemClock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/SystemNanoClock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/TypeUtil.class +INFO: Loading Class: org/apache/logging/log4j/core/util/WatchManager$FileMonitor.class +INFO: Loading Class: org/apache/logging/log4j/core/util/WatchManager$WatchRunnable.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AsyncAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$SystemErrStream.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$Target.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackJsonAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileManager$MemoryMappedFileManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager$JeroMqConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager$2.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/OutputStreamAppender$OutputStreamManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicy$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ScriptAppenderSelector$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SocketAppender$AbstractBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SyslogAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/WriterAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLogger$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfig.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor$3.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor$Log4jEventWrapperHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.class +INFO: Loading Class: org/apache/logging/log4j/core/async/DisruptorBlockingQueueFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/EventRoute$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/EventRoute$3.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$Idle.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/LinkedTransferQueueFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/RingBufferLogEvent$1.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationListener.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationScheduler$CronRunnable.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationSource.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfiguratonFileWatcher$ReconfigurationRunnable.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Configurator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/CustomLevels.class +INFO: Loading Class: org/apache/logging/log4j/core/config/DefaultConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/json/JsonConfiguration$ErrorType.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$LongConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$UrlConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginBuilderFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginVisitorStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/PluginBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/ConstraintValidators.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginBuilderAttributeVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/BurstFilter$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/CompositeFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/MarkerFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/StructuredDataFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/Filter$Result.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ContextDataFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ExtendedStackTraceElement.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/Log4jLogEvent$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThreadContextDataInjector$ForGarbageFreeThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataSerializer$1.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Initializers$SimpleModuleInitializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ListOfMapEntryDeserializer.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternMatch$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$FieldFormatter.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout.class +INFO: Loading Class: org/apache/logging/log4j/core/LifeCycle.class +INFO: Loading Class: org/apache/logging/log4j/core/LogEventListener.class +INFO: Loading Class: org/apache/logging/log4j/core/LoggerContext.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/Log4jLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrMatcher$CharSetMatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrMatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/net/AbstractSocketManager.class +INFO: Loading Class: org/apache/logging/log4j/core/net/DatagramSocketManager$DatagramSocketManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/net/DatagramSocketManager.class +INFO: Loading Class: org/apache/logging/log4j/core/net/JndiManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SocketAddress$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/AbstractKeyStoreConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/SslConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/StoreConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/StoreConfigurationException.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/TrustStoreConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/TrustStoreConfigurationException.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SslSocketManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/LevelPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/LogEventPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MarkerSimpleNamePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MessagePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$MaxElementAbbreviator$Strategy.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$PatternAbbreviator.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NamePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NotANumber.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/PatternFormatter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/RegexReplacement.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/RelativeTimePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/RootThrowablePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/TextRenderer.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ThreadIdPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ThreadPriorityPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/VariablesNotEmptyReplacementConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptFile.class +INFO: Loading Class: org/apache/logging/log4j/core/script/ScriptManager$ScriptRunner.class +INFO: Loading Class: org/apache/logging/log4j/core/selector/BasicContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/selector/ContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/selector/JndiContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$5.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$PatternStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FormatCache.class +INFO: Loading Class: org/apache/logging/log4j/core/util/FileUtils.class +INFO: Loading Class: org/apache/logging/log4j/core/util/JsonUtils.class +INFO: Loading Class: org/apache/logging/log4j/core/util/NameUtil.class +INFO: Loading Class: org/apache/logging/log4j/core/util/OptionConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/util/StringEncoder.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Transform.class +INFO: Loading Class: org/apache/logging/log4j/core/util/WatchManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager$JdbcDatabaseManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity$NullLogEvent.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextMapJsonAttributeConverter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/MarkerAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FailoversPlugin.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/FileManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/OutputStreamAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/Duration.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileSize.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfLastModified.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/PathCondition.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.class +INFO: Loading Class: org/apache/logging/log4j/core/async/RingBufferLogEvent$Factory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/RingBufferLogEvent.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AppendersPlugin.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/Component.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/ConfigurationBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/LayoutComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/RootLoggerComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultConfigurationBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Configuration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationFactory$1.class +INFO: Loading Class: org/apache/logging/log4j/core/config/json/JsonConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/LoggerConfig$RootLogger.class +INFO: Loading Class: org/apache/logging/log4j/core/config/LoggersPlugin.class +INFO: Loading Class: org/apache/logging/log4j/core/config/NullConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Order.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/DateTypeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverterRegistry.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$ByteConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$CharsetConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$DurationConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$LevelConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$UriConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginBuilderAttribute.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginValue.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor$PluginElementVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginAttributeVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/properties/PropertiesConfigurationFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/status/StatusConfiguration$Verbosity.class +INFO: Loading Class: org/apache/logging/log4j/core/config/yaml/YamlConfigurationFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/AbstractFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/BurstFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/MapFilter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/MapFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/filter/TimeFilter.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap$1.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/Log4jLogEvent$1.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/LogEventFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/MutableLogEvent.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataDeserializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Initializers$SetupContextJsonInitializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ListOfMapEntrySerializer.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternLayout$PatternSelectorSerializer.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$StructuredDataElement.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/SerializedLayout$PrivateObjectOutputStream.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/StringBuilderEncoder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/TextEncoderHelper.class +INFO: Loading Class: org/apache/logging/log4j/core/LifeCycle$State.class +INFO: Loading Class: org/apache/logging/log4j/core/Logger$LoggerProxy.class +INFO: Loading Class: org/apache/logging/log4j/core/LoggerContext$1.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/AbstractConfigurationAwareLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/AbstractLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/DateLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/JavaLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/MainMapLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/ResourceBundleLookup.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrMatcher$NoMatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/lookup/StrSubstitutor.class +INFO: Loading Class: org/apache/logging/log4j/core/net/JndiManager.class +INFO: Loading Class: org/apache/logging/log4j/core/net/mom/jms/AbstractJmsReceiver.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/selector/CoreContextSelectors.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CyclicBuffer.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$CopyQuotedStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateParser$StrategyAndWidth.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$Iso8601_Rule.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TimeZoneNameRule.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TwoDigitYearField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FixedDateFormat$FixedFormat.class +INFO: Loading Class: org/apache/logging/log4j/core/util/DummyNanoClock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/FileWatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/util/IOUtils.class +INFO: Loading Class: org/apache/logging/log4j/core/util/KeyValuePair$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Log4jThreadFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ObjectArrayIterator.class +INFO: Loading Class: org/apache/logging/log4j/core/util/SecretKeyProvider.class +INFO: Loading Class: org/apache/logging/log4j/core/AbstractLogEvent.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AbstractOutputStreamAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AppenderLoggingException.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/AppenderSet$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConfigurationFactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$Target$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/ColumnMapping.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jdbc/ColumnConfig$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ThrowableAttributeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/JmsManager$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/DefaultKafkaProducerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/NullAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/OutputStreamAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/OutputStreamManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/RewritePolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/AbstractRolloverStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/CommonsCompressAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager$RollingRandomAccessFileManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RolloverDescription.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RolloverDescriptionImpl.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RolloverFrequency.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/RolloverStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/TriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RollingFileAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/Routes$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SocketAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/SocketAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/WriterAppender$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/WriterManager.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLogger.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor$4.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.class +INFO: Loading Class: org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/async/DiscardingAsyncQueueFullPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/async/DisruptorUtil.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$MpscBlockingQueue$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$WaitStrategy$4.class +INFO: Loading Class: org/apache/logging/log4j/core/async/ThreadNameCachingStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/CustomLevelComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/FilterComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/LoggerComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/api/ScriptFileComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultAppenderRefComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultCustomLevelComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultFilterComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultLoggerComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultScriptComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Loggers.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Node.class +INFO: Loading Class: org/apache/logging/log4j/core/config/OrderComparator.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$BigDecimalConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$BooleanConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$CharacterConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$CronExpressionConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$FileConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$PathConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$UuidConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/processor/PluginCache.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/util/PluginType.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/constraints/Required.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/validation/constraints/ValidPort.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginElementVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ReliabilityStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/xml/XmlConfiguration$ErrorType.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/JdkMapAdapterStringMap.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThreadContextDataInjector$ForCopyOnWriteThreadContextMap.class +INFO: Loading Class: org/apache/logging/log4j/core/impl/ThreadContextDataInjector.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer$1.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Initializers$SetupContextInitializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/LevelMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jJsonModule.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jStackTraceElementDeserializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jXmlObjectMapper.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/Log4jYamlObjectMapper.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/LogEventWithContextListMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/MarkerMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/MutableThreadContextStackDeserializer$1.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/SimpleMessageDeserializer.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/ThrowableProxyMixIn.class +INFO: Loading Class: org/apache/logging/log4j/core/jackson/XmlConstants.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/PatternLayout$SerializerBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Rfc5424Layout$1.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/JsonInputStreamLogEventBridge.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/SecureTcpSocketServer.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/TcpSocketServer$SocketHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/UdpSocketServer.class +INFO: Loading Class: org/apache/logging/log4j/core/net/server/XmlInputStreamLogEventBridge.class +INFO: Loading Class: org/apache/logging/log4j/core/net/Severity.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SmtpManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SmtpManager$SMTPManagerFactory$1.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SmtpManager$SMTPManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SmtpManager.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SocketAddress$1.class +INFO: Loading Class: org/apache/logging/log4j/core/net/SocketOptions.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/KeyStoreConfigurationException.class +INFO: Loading Class: org/apache/logging/log4j/core/net/ssl/SslConfigurationDefaults.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/LineLocationPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/LineSeparatorPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/LoggerPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/MaxLengthConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/NameAbbreviator$1.class +INFO: Loading Class: org/apache/logging/log4j/core/selector/NamedContextSelector.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CoarseCachedClock$1.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CronExpression.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FormatCache$MultipartKey.class +INFO: Loading Class: org/apache/logging/log4j/core/util/DefaultShutdownCallbackRegistry$RegisteredCancellable.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ExecutorServices.class +INFO: Loading Class: org/apache/logging/log4j/core/util/InetAddressConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$ConsoleManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/ConsoleAppender$Target$2.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/AbstractDatabaseManager$AbstractFactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/converter/ContextStackJsonAttributeConverter$1.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/JpaAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/db/jpa/JpaDatabaseManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/MemoryMappedFileAppender$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/jeromq/JeroMqManager$JeroMqManagerFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/mom/kafka/KafkaManager.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/RandomAccessFileManager$FactoryData.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/AbstractTriggeringPolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/AbstractPathAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileCount.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfAny.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/IfNot.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/PathSorter.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/ScriptCondition.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/PurgePolicy.class +INFO: Loading Class: org/apache/logging/log4j/core/appender/routing/RoutingAppender$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/JCToolsBlockingQueueFactory$WaitStrategy$1.class +INFO: Loading Class: org/apache/logging/log4j/core/async/RingBufferLogEventHandler.class +INFO: Loading Class: org/apache/logging/log4j/core/async/ThreadNameCachingStrategy$1.class +INFO: Loading Class: org/apache/logging/log4j/core/config/AbstractConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultLayoutComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultRootLoggerComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/builder/impl/DefaultScriptFileComponentBuilder.class +INFO: Loading Class: org/apache/logging/log4j/core/config/composite/CompositeConfiguration.class +INFO: Loading Class: org/apache/logging/log4j/core/config/composite/MergeStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationAware.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationException.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationFactory$Factory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfigurationScheduler.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ConfiguratonFileWatcher.class +INFO: Loading Class: org/apache/logging/log4j/core/config/CronScheduledFuture$FutureData.class +INFO: Loading Class: org/apache/logging/log4j/core/config/CronScheduledFuture.class +INFO: Loading Class: org/apache/logging/log4j/core/config/CustomLevelConfig.class +INFO: Loading Class: org/apache/logging/log4j/core/config/DefaultAdvertiser.class +INFO: Loading Class: org/apache/logging/log4j/core/config/DefaultReliabilityStrategy.class +INFO: Loading Class: org/apache/logging/log4j/core/config/json/JsonConfiguration$Status.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/convert/TypeConverters$StringConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginAttribute.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/PluginNode.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor$PluginAliasesElementVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/plugins/visitors/PluginVisitor.class +INFO: Loading Class: org/apache/logging/log4j/core/config/Reconfigurable.class +INFO: Loading Class: org/apache/logging/log4j/core/config/ScriptsPlugin.class +INFO: Loading Class: org/apache/logging/log4j/core/config/xml/XmlConfigurationFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/Core.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/AppenderAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/AsyncAppenderAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/ContextSelectorAdminMBean.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/LoggerConfigAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/RingBufferAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractJacksonLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/AbstractStringLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/ByteBufferDestination.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/CsvParameterLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/Encoder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout$CompressionType$1.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/GelfLayout$CompressionType.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/HtmlLayout$Builder.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/HtmlLayout$FontSize.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/HtmlLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JacksonFactory.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/JsonLayout.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/LoggerFields.class +INFO: Loading Class: org/apache/logging/log4j/core/layout/MarkerPatternSelector$1.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ClassNamePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ConverterKeys.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$CachedTime.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$FixedFormatter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$Formatter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$PatternFormatter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$UnixFormatter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter$UnixMillisFormatter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/DatePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/EncodingPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/EqualsBaseReplacementConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/EqualsIgnoreCaseReplacementConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/EqualsReplacementConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/FileDatePatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/FormattingInfo.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/FullLocationPatternConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/HighlightConverter.class +INFO: Loading Class: org/apache/logging/log4j/core/pattern/HtmlTextRenderer.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$ExtendedLogger.class +INFO: Loading Class: org/apache/logging/log4j/core/tools/Generate$Type$2.class +INFO: Loading Class: org/apache/logging/log4j/core/util/ArrayUtils.class +INFO: Loading Class: org/apache/logging/log4j/core/util/Booleans.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CachedClock.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CloseShieldWriter.class +INFO: Loading Class: org/apache/logging/log4j/core/util/CronExpression$ValueSet.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/DateParser.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDateFormat.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$DayInWeekField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$StringLiteral.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$TwentyFourHourField.class +INFO: Loading Class: org/apache/logging/log4j/core/util/datetime/FastDatePrinter$UnpaddedNumberField.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.mojang/text2speech/1.10.3/48fd510879dff266c3815947de66e3d4809f8668/text2speech-1.10.3.jar +INFO: Loading Class: com/mojang/text2speech/NarratorLinux$NarratorThread.class +INFO: Loading Class: com/mojang/text2speech/NarratorWindows$SAPIWrapperSolutionDLL.class +INFO: Loading Class: com/mojang/text2speech/Narrator.class +INFO: Loading Class: com/mojang/text2speech/NarratorLinux$1.class +INFO: Loading Class: com/mojang/text2speech/NarratorWindows$1.class +INFO: Loading Class: com/mojang/text2speech/NarratorDummy.class +INFO: Loading Class: com/mojang/text2speech/Text2Speech.class +INFO: Loading Class: com/mojang/text2speech/NarratorOSX.class +INFO: Loading Class: com/mojang/text2speech/NarratorWindows$NarratorThread.class +INFO: Loading Class: com/mojang/text2speech/NarratorWindows.class +INFO: Loading Class: com/mojang/text2speech/NarratorLinux$FliteLibrary.class +INFO: Loading Class: com/mojang/text2speech/NarratorLinux.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/ca.weblite/java-objc-bridge/1.0.0/6ef160c3133a78de015830860197602ca1c855d3/java-objc-bridge-1.0.0.jar +INFO: Loading Class: ca/weblite/nativeutils/NativeUtils.class +INFO: Loading Class: ca/weblite/objc/annotations/Msg.class +INFO: Loading Class: ca/weblite/objc/Client.class +INFO: Loading Class: ca/weblite/objc/mappers/NSObjectMapping.class +INFO: Loading Class: ca/weblite/objc/mappers/PointerMapping.class +INFO: Loading Class: ca/weblite/objc/mappers/ScalarMapping.class +INFO: Loading Class: ca/weblite/objc/mappers/StringMapping.class +INFO: Loading Class: ca/weblite/objc/mappers/StructureMapping.class +INFO: Loading Class: ca/weblite/objc/Message.class +INFO: Loading Class: ca/weblite/objc/NSObject.class +INFO: Loading Class: ca/weblite/objc/Peerable.class +INFO: Loading Class: ca/weblite/objc/PeerableRecipient.class +INFO: Loading Class: ca/weblite/objc/Proxy.class +INFO: Loading Class: ca/weblite/objc/Recipient.class +INFO: Loading Class: ca/weblite/objc/Runtime.class +INFO: Loading Class: ca/weblite/objc/RuntimeUtils.class +INFO: Loading Class: ca/weblite/objc/TypeMapper.class +INFO: Loading Class: ca/weblite/objc/TypeMapping.class +INFO: Loading Class: ca/weblite/objc/util/CocoaUtils$1.class +INFO: Loading Class: ca/weblite/objc/util/CocoaUtils$2.class +INFO: Loading Class: ca/weblite/objc/util/CocoaUtils.class +INFO: Loading Class: com/sun/jna/PointerTool.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.minecraft/launchwrapper/1.12/111e7bea9c968cdb3d06ef4632bf7ff0824d0f36/launchwrapper-1.12.jar +INFO: Loading Class: net/minecraft/launchwrapper/AlphaVanillaTweaker.class +INFO: Loading Class: net/minecraft/launchwrapper/IClassNameTransformer.class +INFO: Loading Class: net/minecraft/launchwrapper/IClassTransformer.class +INFO: Loading Class: net/minecraft/launchwrapper/IndevVanillaTweaker.class +INFO: Loading Class: net/minecraft/launchwrapper/ITweaker.class +INFO: Loading Class: net/minecraft/launchwrapper/Launch.class +INFO: Loading Class: net/minecraft/launchwrapper/LaunchClassLoader.class +INFO: Loading Class: net/minecraft/launchwrapper/LogWrapper.class +INFO: Loading Class: net/minecraft/launchwrapper/VanillaTweaker.class +INFO: Loading Class: net/minecraft/launchwrapper/injector/AlphaVanillaTweakInjector$1.class +INFO: Loading Class: net/minecraft/launchwrapper/injector/AlphaVanillaTweakInjector$1LauncherFake.class +INFO: Loading Class: net/minecraft/launchwrapper/injector/AlphaVanillaTweakInjector$2.class +INFO: Loading Class: net/minecraft/launchwrapper/injector/AlphaVanillaTweakInjector.class +INFO: Loading Class: net/minecraft/launchwrapper/injector/IndevVanillaTweakInjector.class +INFO: Loading Class: net/minecraft/launchwrapper/injector/VanillaTweakInjector.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.jline/jline/3.5.1/51800e9d7a13608894a5a28eed0f5c7fa2f300fb/jline-3.5.1.jar +INFO: Loading Class: org/jline/utils/AttributedCharSequence.class +INFO: Loading Class: org/jline/builtins/Source$PathSource.class +INFO: Loading Class: org/jline/builtins/Source.class +INFO: Loading Class: org/jline/builtins/ssh/ShellFactoryImpl.class +INFO: Loading Class: org/jline/builtins/ssh/Ssh$JLineUserInteraction.class +INFO: Loading Class: org/jline/builtins/telnet/Connection.class +INFO: Loading Class: org/jline/builtins/telnet/ConnectionFilter.class +INFO: Loading Class: org/jline/builtins/telnet/ConnectionManager.class +INFO: Loading Class: org/jline/builtins/Tmux$1.class +INFO: Loading Class: org/jline/builtins/Tmux$Layout.class +INFO: Loading Class: org/jline/reader/Buffer.class +INFO: Loading Class: org/jline/reader/Completer.class +INFO: Loading Class: org/jline/reader/EndOfFileException.class +INFO: Loading Class: org/jline/reader/Highlighter.class +INFO: Loading Class: org/jline/reader/impl/BufferImpl.class +INFO: Loading Class: org/jline/reader/impl/completer/StringsCompleter.class +INFO: Loading Class: org/jline/reader/impl/DefaultParser$ArgumentList.class +INFO: Loading Class: org/jline/reader/impl/KillRing.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$CompletionType.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$State.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl.class +INFO: Loading Class: org/jline/utils/Log.class +INFO: Loading Class: org/jline/utils/OSUtils.class +INFO: Loading Class: org/jline/utils/PumpReader$Writer.class +INFO: Loading Class: org/jline/utils/ShutdownHooks$1.class +INFO: Loading Class: org/jline/utils/WCWidth$Interval.class +INFO: Loading Class: org/jline/utils/WCWidth.class +INFO: Loading Class: org/jline/builtins/Completers$Completer.class +INFO: Loading Class: org/jline/builtins/Completers$RegexCompleter$ArgumentLine.class +INFO: Loading Class: org/jline/builtins/Completers$TreeCompleter$Node.class +INFO: Loading Class: org/jline/builtins/Completers.class +INFO: Loading Class: org/jline/builtins/Less$InterruptibleInputStream.class +INFO: Loading Class: org/jline/builtins/Less.class +INFO: Loading Class: org/jline/builtins/NfaMatcher$State.class +INFO: Loading Class: org/jline/builtins/NfaMatcher.class +INFO: Loading Class: org/jline/builtins/Source$InputStreamSource.class +INFO: Loading Class: org/jline/builtins/Source$URLSource.class +INFO: Loading Class: org/jline/builtins/ssh/ShellFactoryImpl$ShellImpl.class +INFO: Loading Class: org/jline/builtins/telnet/ConnectionData.class +INFO: Loading Class: org/jline/builtins/telnet/PortListener.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet$1$1.class +INFO: Loading Class: org/jline/builtins/Tmux$Binding.class +INFO: Loading Class: org/jline/builtins/Tmux$Layout$Type.class +INFO: Loading Class: org/jline/builtins/Tmux$VirtualConsole$2.class +INFO: Loading Class: org/jline/builtins/Tmux$VirtualConsole$MasterOutputStream.class +INFO: Loading Class: org/jline/builtins/TTop$Column.class +INFO: Loading Class: org/jline/builtins/TTop.class +INFO: Loading Class: org/jline/reader/impl/ReaderUtils.class +INFO: Loading Class: org/jline/reader/impl/UndoTree.class +INFO: Loading Class: org/jline/reader/Macro.class +INFO: Loading Class: org/jline/reader/Parser.class +INFO: Loading Class: org/jline/terminal/impl/AbstractPosixTerminal.class +INFO: Loading Class: org/jline/terminal/impl/AbstractWindowsConsoleWriter.class +INFO: Loading Class: org/jline/terminal/impl/AbstractWindowsTerminal.class +INFO: Loading Class: org/jline/terminal/impl/jansi/freebsd/FreeBsdNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jansi/solaris/SolarisNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jna/freebsd/CLibrary$termios.class +INFO: Loading Class: org/jline/terminal/impl/jna/freebsd/FreeBsdNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jna/osx/CLibrary$winsize.class +INFO: Loading Class: org/jline/terminal/impl/jna/osx/OsXNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jna/solaris/CLibrary.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_CURSOR_INFO$ByReference.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$COORD.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$WINDOW_BUFFER_SIZE_RECORD.class +INFO: Loading Class: org/jline/terminal/impl/LineDisciplineTerminal$1.class +INFO: Loading Class: org/jline/terminal/impl/NativeSignalHandler.class +INFO: Loading Class: org/jline/terminal/impl/PosixPtyTerminal$PumpThread.class +INFO: Loading Class: org/jline/terminal/MouseEvent$Modifier.class +INFO: Loading Class: org/jline/terminal/MouseEvent.class +INFO: Loading Class: org/jline/terminal/spi/Pty.class +INFO: Loading Class: org/jline/terminal/Terminal.class +INFO: Loading Class: org/jline/utils/AttributedString.class +INFO: Loading Class: org/jline/utils/AttributedStyle.class +INFO: Loading Class: org/jline/utils/Curses.class +INFO: Loading Class: org/jline/utils/Display$1.class +INFO: Loading Class: org/jline/utils/Display.class +INFO: Loading Class: org/jline/utils/InputStreamReader.class +INFO: Loading Class: org/jline/utils/PumpReader$1.class +INFO: Loading Class: org/jline/utils/PumpReader$InputStream.class +INFO: Loading Class: org/jline/utils/ShutdownHooks$Task.class +INFO: Loading Class: org/jline/utils/ShutdownHooks.class +INFO: Loading Class: org/jline/utils/WriterOutputStream.class +INFO: Loading Class: org/jline/builtins/Commands.class +INFO: Loading Class: org/jline/builtins/Nano$WriteFormat.class +INFO: Loading Class: org/jline/builtins/Nano$WriteMode.class +INFO: Loading Class: org/jline/builtins/Nano.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet$1$1$3.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet$ShellProvider.class +INFO: Loading Class: org/jline/builtins/telnet/TelnetIO.class +INFO: Loading Class: org/jline/builtins/Tmux$VirtualConsole.class +INFO: Loading Class: org/jline/reader/Binding.class +INFO: Loading Class: org/jline/reader/Candidate.class +INFO: Loading Class: org/jline/reader/EOFError.class +INFO: Loading Class: org/jline/reader/History$Entry.class +INFO: Loading Class: org/jline/reader/impl/completer/AggregateCompleter.class +INFO: Loading Class: org/jline/reader/impl/completer/ArgumentCompleter.class +INFO: Loading Class: org/jline/reader/impl/DefaultExpander.class +INFO: Loading Class: org/jline/reader/impl/history/DefaultHistory.class +INFO: Loading Class: org/jline/reader/LineReader.class +INFO: Loading Class: org/jline/terminal/Attributes$LocalFlag.class +INFO: Loading Class: org/jline/terminal/Attributes.class +INFO: Loading Class: org/jline/terminal/impl/CursorSupport.class +INFO: Loading Class: org/jline/terminal/impl/DumbTerminal.class +INFO: Loading Class: org/jline/terminal/impl/ExternalTerminal.class +INFO: Loading Class: org/jline/terminal/impl/jansi/JansiNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jansi/linux/LinuxNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jansi/win/JansiWinConsoleWriter.class +INFO: Loading Class: org/jline/terminal/impl/jansi/win/WindowsAnsiWriter.class +INFO: Loading Class: org/jline/terminal/impl/jna/freebsd/FreeBsdNativePty$UtilLibrary.class +INFO: Loading Class: org/jline/terminal/impl/jna/JnaNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jna/linux/LinuxNativePty$UtilLibrary.class +INFO: Loading Class: org/jline/terminal/impl/jna/linux/LinuxNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jna/solaris/CLibrary$termios.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/JnaWinSysTerminal.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32.class +INFO: Loading Class: org/jline/terminal/impl/MouseSupport$1.class +INFO: Loading Class: org/jline/terminal/impl/MouseSupport.class +INFO: Loading Class: org/jline/terminal/impl/PosixSysTerminal.class +INFO: Loading Class: org/jline/terminal/spi/JnaSupport.class +INFO: Loading Class: org/jline/terminal/Terminal$SignalHandler.class +INFO: Loading Class: org/jline/utils/AttributedStringBuilder.class +INFO: Loading Class: org/jline/utils/ClosedException.class +INFO: Loading Class: org/jline/utils/DiffHelper$Diff.class +INFO: Loading Class: org/jline/utils/DiffHelper$Operation.class +INFO: Loading Class: org/jline/utils/DiffHelper.class +INFO: Loading Class: org/jline/utils/ExecHelper.class +INFO: Loading Class: org/jline/utils/InfoCmp$Capability.class +INFO: Loading Class: org/jline/builtins/Completers$CompletionData.class +INFO: Loading Class: org/jline/builtins/Completers$DirectoriesCompleter.class +INFO: Loading Class: org/jline/builtins/Completers$FilesCompleter.class +INFO: Loading Class: org/jline/builtins/Completers$RegexCompleter.class +INFO: Loading Class: org/jline/builtins/Less$1.class +INFO: Loading Class: org/jline/builtins/Less$Operation.class +INFO: Loading Class: org/jline/builtins/Nano$Buffer.class +INFO: Loading Class: org/jline/builtins/ScreenTerminal$State.class +INFO: Loading Class: org/jline/builtins/ScreenTerminal.class +INFO: Loading Class: org/jline/builtins/Tmux.class +INFO: Loading Class: org/jline/reader/ParsedLine.class +INFO: Loading Class: org/jline/reader/Parser$ParseContext.class +INFO: Loading Class: org/jline/terminal/impl/jna/linux/CLibrary$winsize.class +INFO: Loading Class: org/jline/terminal/impl/jna/linux/CLibrary.class +INFO: Loading Class: org/jline/terminal/impl/jna/osx/CLibrary$termios.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/JnaWinConsoleWriter.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$CHAR_INFO.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_SCREEN_BUFFER_INFO.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$KEY_EVENT_RECORD.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$SMALL_RECT.class +INFO: Loading Class: org/jline/terminal/impl/LineDisciplineTerminal$FilteringOutputStream.class +INFO: Loading Class: org/jline/terminal/impl/LineDisciplineTerminal.class +INFO: Loading Class: org/jline/terminal/impl/PosixPtyTerminal.class +INFO: Loading Class: org/jline/terminal/Size.class +INFO: Loading Class: org/jline/terminal/Terminal$MouseTracking.class +INFO: Loading Class: org/jline/terminal/TerminalBuilder.class +INFO: Loading Class: org/jline/builtins/Source$InputStreamSource$1.class +INFO: Loading Class: org/jline/builtins/Source$StdInSource.class +INFO: Loading Class: org/jline/builtins/ssh/ShellCommand.class +INFO: Loading Class: org/jline/builtins/ssh/Ssh$ShellParams.class +INFO: Loading Class: org/jline/builtins/telnet/Connection$1.class +INFO: Loading Class: org/jline/builtins/telnet/ConnectionEvent$Type.class +INFO: Loading Class: org/jline/builtins/telnet/ConnectionEvent.class +INFO: Loading Class: org/jline/builtins/telnet/ConnectionListener.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet$1$1$1.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet$1$1$2.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet$1.class +INFO: Loading Class: org/jline/builtins/telnet/Telnet.class +INFO: Loading Class: org/jline/builtins/Tmux$VirtualConsole$1.class +INFO: Loading Class: org/jline/builtins/Tmux$VirtualConsole$3.class +INFO: Loading Class: org/jline/builtins/TTop$1.class +INFO: Loading Class: org/jline/builtins/TTop$Operation.class +INFO: Loading Class: org/jline/keymap/KeyMap.class +INFO: Loading Class: org/jline/reader/impl/completer/FileNameCompleter.class +INFO: Loading Class: org/jline/reader/impl/DefaultParser.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$BellType.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$PostResult.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$ViMoveMode.class +INFO: Loading Class: org/jline/reader/impl/SimpleMaskingCallback.class +INFO: Loading Class: org/jline/reader/LineReader$Option.class +INFO: Loading Class: org/jline/reader/MaskingCallback.class +INFO: Loading Class: org/jline/reader/SyntaxError.class +INFO: Loading Class: org/jline/reader/UserInterruptException.class +INFO: Loading Class: org/jline/reader/Widget.class +INFO: Loading Class: org/jline/terminal/Attributes$ControlChar.class +INFO: Loading Class: org/jline/terminal/Attributes$ControlFlag.class +INFO: Loading Class: org/jline/terminal/Attributes$InputFlag.class +INFO: Loading Class: org/jline/terminal/Attributes$OutputFlag.class +INFO: Loading Class: org/jline/terminal/Cursor.class +INFO: Loading Class: org/jline/terminal/impl/AbstractTerminal$1.class +INFO: Loading Class: org/jline/terminal/impl/AbstractTerminal.class +INFO: Loading Class: org/jline/terminal/impl/DumbTerminal$1.class +INFO: Loading Class: org/jline/terminal/impl/ExecPty.class +INFO: Loading Class: org/jline/terminal/impl/jansi/JansiSupportImpl.class +INFO: Loading Class: org/jline/terminal/impl/jansi/osx/OsXNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jansi/win/JansiWinSysTerminal.class +INFO: Loading Class: org/jline/terminal/impl/jna/freebsd/CLibrary$winsize.class +INFO: Loading Class: org/jline/terminal/impl/jna/freebsd/CLibrary.class +INFO: Loading Class: org/jline/terminal/impl/jna/JnaSupportImpl.class +INFO: Loading Class: org/jline/terminal/impl/jna/linux/CLibrary$termios.class +INFO: Loading Class: org/jline/terminal/impl/jna/osx/CLibrary.class +INFO: Loading Class: org/jline/terminal/impl/jna/solaris/CLibrary$winsize.class +INFO: Loading Class: org/jline/terminal/impl/jna/solaris/SolarisNativePty.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$CONSOLE_CURSOR_INFO.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$INPUT_RECORD$EventUnion.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$MOUSE_EVENT_RECORD.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/Kernel32$UnionChar.class +INFO: Loading Class: org/jline/terminal/impl/jna/win/WindowsAnsiWriter.class +INFO: Loading Class: org/jline/terminal/impl/PosixPtyTerminal$InputStreamWrapper.class +INFO: Loading Class: org/jline/terminal/MouseEvent$Button.class +INFO: Loading Class: org/jline/terminal/MouseEvent$Type.class +INFO: Loading Class: org/jline/terminal/spi/JansiSupport.class +INFO: Loading Class: org/jline/terminal/Terminal$Signal.class +INFO: Loading Class: org/jline/utils/AnsiWriter.class +INFO: Loading Class: org/jline/utils/InfoCmp.class +INFO: Loading Class: org/jline/utils/Levenshtein.class +INFO: Loading Class: org/jline/utils/NonBlockingReader.class +INFO: Loading Class: org/jline/utils/PumpReader.class +INFO: Loading Class: org/jline/utils/Signals.class +INFO: Loading Class: org/jline/builtins/Completers$CompletionEnvironment.class +INFO: Loading Class: org/jline/builtins/Completers$FileNameCompleter.class +INFO: Loading Class: org/jline/builtins/Completers$TreeCompleter.class +INFO: Loading Class: org/jline/builtins/Nano$1.class +INFO: Loading Class: org/jline/builtins/Nano$Operation.class +INFO: Loading Class: org/jline/builtins/NfaMatcher$Frag.class +INFO: Loading Class: org/jline/builtins/Options.class +INFO: Loading Class: org/jline/builtins/ssh/ShellFactoryImpl$1.class +INFO: Loading Class: org/jline/builtins/ssh/Ssh$ExecuteParams.class +INFO: Loading Class: org/jline/builtins/ssh/Ssh.class +INFO: Loading Class: org/jline/builtins/telnet/TelnetIO$IACHandler.class +INFO: Loading Class: org/jline/builtins/TTop$Align.class +INFO: Loading Class: org/jline/keymap/BindingReader.class +INFO: Loading Class: org/jline/reader/Expander.class +INFO: Loading Class: org/jline/reader/History.class +INFO: Loading Class: org/jline/reader/impl/completer/ArgumentCompleter$ArgumentLine.class +INFO: Loading Class: org/jline/reader/impl/completer/EnumCompleter.class +INFO: Loading Class: org/jline/reader/impl/completer/NullCompleter.class +INFO: Loading Class: org/jline/reader/impl/DefaultHighlighter.class +INFO: Loading Class: org/jline/reader/impl/history/DefaultHistory$EntryImpl.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$1.class +INFO: Loading Class: org/jline/reader/impl/LineReaderImpl$MenuSupport.class +INFO: Loading Class: org/jline/reader/impl/UndoTree$Node.class +INFO: Loading Class: org/jline/reader/LineReader$RegionType.class +INFO: Loading Class: org/jline/reader/LineReaderBuilder.class +INFO: Loading Class: org/jline/reader/Reference.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm-debug-all/5.2/3354e11e2b34215f06dab629ab88e06aca477c19/asm-debug-all-5.2.jar +INFO: Loading Class: org/objectweb/asm/AnnotationVisitor.class +INFO: Loading Class: org/objectweb/asm/AnnotationWriter.class +INFO: Loading Class: org/objectweb/asm/Attribute.class +INFO: Loading Class: org/objectweb/asm/ByteVector.class +INFO: Loading Class: org/objectweb/asm/ClassReader.class +INFO: Loading Class: org/objectweb/asm/ClassVisitor.class +INFO: Loading Class: org/objectweb/asm/ClassWriter.class +INFO: Loading Class: org/objectweb/asm/Context.class +INFO: Loading Class: org/objectweb/asm/CurrentFrame.class +INFO: Loading Class: org/objectweb/asm/Edge.class +INFO: Loading Class: org/objectweb/asm/FieldVisitor.class +INFO: Loading Class: org/objectweb/asm/FieldWriter.class +INFO: Loading Class: org/objectweb/asm/Frame.class +INFO: Loading Class: org/objectweb/asm/Handle.class +INFO: Loading Class: org/objectweb/asm/Handler.class +INFO: Loading Class: org/objectweb/asm/Item.class +INFO: Loading Class: org/objectweb/asm/Label.class +INFO: Loading Class: org/objectweb/asm/MethodVisitor.class +INFO: Loading Class: org/objectweb/asm/MethodWriter.class +INFO: Loading Class: org/objectweb/asm/Opcodes.class +INFO: Loading Class: org/objectweb/asm/Type.class +INFO: Loading Class: org/objectweb/asm/TypePath.class +INFO: Loading Class: org/objectweb/asm/TypeReference.class +INFO: Loading Class: org/objectweb/asm/commons/AdviceAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/AnalyzerAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/AnnotationRemapper.class +INFO: Loading Class: org/objectweb/asm/commons/ClassRemapper.class +INFO: Loading Class: org/objectweb/asm/commons/CodeSizeEvaluator.class +INFO: Loading Class: org/objectweb/asm/commons/FieldRemapper.class +INFO: Loading Class: org/objectweb/asm/commons/GeneratorAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/InstructionAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/JSRInlinerAdapter$Instantiation.class +INFO: Loading Class: org/objectweb/asm/commons/JSRInlinerAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/LocalVariablesSorter.class +INFO: Loading Class: org/objectweb/asm/commons/Method.class +INFO: Loading Class: org/objectweb/asm/commons/MethodRemapper.class +INFO: Loading Class: org/objectweb/asm/commons/Remapper.class +INFO: Loading Class: org/objectweb/asm/commons/RemappingAnnotationAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/RemappingClassAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/RemappingFieldAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/RemappingMethodAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/RemappingSignatureAdapter.class +INFO: Loading Class: org/objectweb/asm/commons/SerialVersionUIDAdder$Item.class +INFO: Loading Class: org/objectweb/asm/commons/SerialVersionUIDAdder.class +INFO: Loading Class: org/objectweb/asm/commons/SignatureRemapper.class +INFO: Loading Class: org/objectweb/asm/commons/SimpleRemapper.class +INFO: Loading Class: org/objectweb/asm/commons/StaticInitMerger.class +INFO: Loading Class: org/objectweb/asm/commons/TableSwitchGenerator.class +INFO: Loading Class: org/objectweb/asm/commons/TryCatchBlockSorter$1.class +INFO: Loading Class: org/objectweb/asm/commons/TryCatchBlockSorter.class +INFO: Loading Class: org/objectweb/asm/signature/SignatureReader.class +INFO: Loading Class: org/objectweb/asm/signature/SignatureVisitor.class +INFO: Loading Class: org/objectweb/asm/signature/SignatureWriter.class +INFO: Loading Class: org/objectweb/asm/tree/AbstractInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/AnnotationNode.class +INFO: Loading Class: org/objectweb/asm/tree/ClassNode.class +INFO: Loading Class: org/objectweb/asm/tree/FieldInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/FieldNode.class +INFO: Loading Class: org/objectweb/asm/tree/FrameNode.class +INFO: Loading Class: org/objectweb/asm/tree/IincInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/InnerClassNode.class +INFO: Loading Class: org/objectweb/asm/tree/InsnList$InsnListIterator.class +INFO: Loading Class: org/objectweb/asm/tree/InsnList.class +INFO: Loading Class: org/objectweb/asm/tree/InsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/IntInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/InvokeDynamicInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/JumpInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/LabelNode.class +INFO: Loading Class: org/objectweb/asm/tree/LdcInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/LineNumberNode.class +INFO: Loading Class: org/objectweb/asm/tree/LocalVariableAnnotationNode.class +INFO: Loading Class: org/objectweb/asm/tree/LocalVariableNode.class +INFO: Loading Class: org/objectweb/asm/tree/LookupSwitchInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/MethodInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/MethodNode$1.class +INFO: Loading Class: org/objectweb/asm/tree/MethodNode.class +INFO: Loading Class: org/objectweb/asm/tree/MultiANewArrayInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/ParameterNode.class +INFO: Loading Class: org/objectweb/asm/tree/TableSwitchInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/TryCatchBlockNode.class +INFO: Loading Class: org/objectweb/asm/tree/TypeAnnotationNode.class +INFO: Loading Class: org/objectweb/asm/tree/TypeInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/VarInsnNode.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/Analyzer.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/AnalyzerException.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/BasicInterpreter.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/BasicValue.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/BasicVerifier.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/Frame.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/Interpreter.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/SimpleVerifier.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/SmallSet.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/SourceInterpreter.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/SourceValue.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/Subroutine.class +INFO: Loading Class: org/objectweb/asm/tree/analysis/Value.class +INFO: Loading Class: org/objectweb/asm/util/ASMifiable.class +INFO: Loading Class: org/objectweb/asm/util/ASMifier.class +INFO: Loading Class: org/objectweb/asm/util/CheckAnnotationAdapter.class +INFO: Loading Class: org/objectweb/asm/util/CheckClassAdapter.class +INFO: Loading Class: org/objectweb/asm/util/CheckFieldAdapter.class +INFO: Loading Class: org/objectweb/asm/util/CheckMethodAdapter$1.class +INFO: Loading Class: org/objectweb/asm/util/CheckMethodAdapter.class +INFO: Loading Class: org/objectweb/asm/util/CheckSignatureAdapter.class +INFO: Loading Class: org/objectweb/asm/util/Printer.class +INFO: Loading Class: org/objectweb/asm/util/Textifiable.class +INFO: Loading Class: org/objectweb/asm/util/Textifier.class +INFO: Loading Class: org/objectweb/asm/util/TraceAnnotationVisitor.class +INFO: Loading Class: org/objectweb/asm/util/TraceClassVisitor.class +INFO: Loading Class: org/objectweb/asm/util/TraceFieldVisitor.class +INFO: Loading Class: org/objectweb/asm/util/TraceMethodVisitor.class +INFO: Loading Class: org/objectweb/asm/util/TraceSignatureVisitor.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationDefaultRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationParameterRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueAnnotationRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueArrayRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueEnumRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$AnnotationValueRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$ClassRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$ExceptionRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$ExceptionsRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$FieldRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$FrameRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$FrameTypeRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$InnerClassRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$InsnAnnotationRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$InterfaceRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$InterfacesRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$InvokeDynamicBsmArgumentsRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$InvokeDynamicRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$LabelRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$LineNumberRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$LocalVarRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$LocalVariableAnnotationRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$LookupSwitchLabelRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$LookupSwitchRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$MaxRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$MethodParameterRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$MethodRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$Opcode.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$OpcodeGroup.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$OpcodesRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$OuterClassRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$Rule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$RuleSet.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$SourceRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$TableSwitchLabelRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$TableSwitchRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$TryCatchAnnotationRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$TryCatchRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler$TypeAnnotationRule.class +INFO: Loading Class: org/objectweb/asm/xml/ASMContentHandler.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$ASMContentHandlerFactory$1.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$ASMContentHandlerFactory.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$ContentHandlerFactory.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$EntryElement.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$InputSlicingHandler.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$OutputSlicingHandler.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$ProtectedInputStream.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$SAXWriter.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$SAXWriterFactory.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$SingleDocElement.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$SubdocumentHandlerFactory.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$TransformerHandlerFactory.class +INFO: Loading Class: org/objectweb/asm/xml/Processor$ZipEntryElement.class +INFO: Loading Class: org/objectweb/asm/xml/Processor.class +INFO: Loading Class: org/objectweb/asm/xml/SAXAdapter.class +INFO: Loading Class: org/objectweb/asm/xml/SAXAnnotationAdapter.class +INFO: Loading Class: org/objectweb/asm/xml/SAXClassAdapter.class +INFO: Loading Class: org/objectweb/asm/xml/SAXCodeAdapter.class +INFO: Loading Class: org/objectweb/asm/xml/SAXFieldAdapter.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.typesafe.akka/akka-actor_2.11/2.3.3/ed62e9fc709ca0f2ff1a3220daa8b70a2870078e/akka-actor_2.11-2.3.3.jar +INFO: Loading Class: akka/AkkaException.class +INFO: Loading Class: akka/ConfigurationException.class +INFO: Loading Class: akka/Main$.class +INFO: Loading Class: akka/Main$Terminator$$anonfun$receive$1.class +INFO: Loading Class: akka/Main$Terminator.class +INFO: Loading Class: akka/Main.class +INFO: Loading Class: akka/OnlyCauseStackTrace$class.class +INFO: Loading Class: akka/OnlyCauseStackTrace.class +INFO: Loading Class: akka/actor/AbstractActor$.class +INFO: Loading Class: akka/actor/AbstractActor.class +INFO: Loading Class: akka/actor/AbstractActorContext.class +INFO: Loading Class: akka/actor/AbstractActorRef.class +INFO: Loading Class: akka/actor/AbstractActorWithStash.class +INFO: Loading Class: akka/actor/AbstractActorWithUnboundedStash.class +INFO: Loading Class: akka/actor/AbstractActorWithUnrestrictedStash.class +INFO: Loading Class: akka/actor/AbstractExtensionId.class +INFO: Loading Class: akka/actor/AbstractFSM$.class +INFO: Loading Class: akka/actor/AbstractFSM.class +INFO: Loading Class: akka/actor/AbstractLoggingActor.class +INFO: Loading Class: akka/actor/AbstractLoggingFSM.class +INFO: Loading Class: akka/actor/AbstractScheduler.class +INFO: Loading Class: akka/actor/AbstractSchedulerBase.class +INFO: Loading Class: akka/actor/Actor$$anonfun$aroundReceive$1.class +INFO: Loading Class: akka/actor/Actor$$anonfun$preRestart$1.class +INFO: Loading Class: akka/actor/Actor$.class +INFO: Loading Class: akka/actor/Actor$class.class +INFO: Loading Class: akka/actor/Actor$emptyBehavior$.class +INFO: Loading Class: akka/actor/Actor.class +INFO: Loading Class: akka/actor/ActorCell$$anon$1.class +INFO: Loading Class: akka/actor/ActorCell$$anon$2.class +INFO: Loading Class: akka/actor/ActorCell$$anonfun$1.class +INFO: Loading Class: akka/actor/ActorCell$$anonfun$2.class +INFO: Loading Class: akka/actor/ActorCell$$anonfun$3.class +INFO: Loading Class: akka/actor/ActorCell$$anonfun$become$1.class +INFO: Loading Class: akka/actor/ActorCell$$anonfun$create$1.class +INFO: Loading Class: akka/actor/ActorCell$.class +INFO: Loading Class: akka/actor/ActorCell.class +INFO: Loading Class: akka/actor/ActorContext$class.class +INFO: Loading Class: akka/actor/ActorContext.class +INFO: Loading Class: akka/actor/ActorDSL$.class +INFO: Loading Class: akka/actor/ActorDSL$Extension$$anonfun$1$$anon$1$$anonfun$receive$1.class +INFO: Loading Class: akka/actor/ActorDSL$Extension$$anonfun$1$$anon$1.class +INFO: Loading Class: akka/actor/ActorDSL$Extension$$anonfun$1.class +INFO: Loading Class: akka/actor/ActorDSL$Extension$.class +INFO: Loading Class: akka/actor/ActorDSL$Extension.class +INFO: Loading Class: akka/actor/ActorDSL.class +INFO: Loading Class: akka/actor/ActorIdentity$.class +INFO: Loading Class: akka/actor/ActorIdentity.class +INFO: Loading Class: akka/actor/ActorInitializationException$.class +INFO: Loading Class: akka/actor/ActorInitializationException.class +INFO: Loading Class: akka/actor/ActorInterruptedException.class +INFO: Loading Class: akka/actor/ActorKilledException$.class +INFO: Loading Class: akka/actor/ActorKilledException.class +INFO: Loading Class: akka/actor/ActorLogging$class.class +INFO: Loading Class: akka/actor/ActorLogging.class +INFO: Loading Class: akka/actor/ActorNotFound$.class +INFO: Loading Class: akka/actor/ActorNotFound.class +INFO: Loading Class: akka/actor/ActorPath$$anonfun$$div$1.class +INFO: Loading Class: akka/actor/ActorPath$.class +INFO: Loading Class: akka/actor/ActorPath$class.class +INFO: Loading Class: akka/actor/ActorPath.class +INFO: Loading Class: akka/actor/ActorPathExtractor$$anonfun$unapply$1.class +INFO: Loading Class: akka/actor/ActorPathExtractor$.class +INFO: Loading Class: akka/actor/ActorPathExtractor.class +INFO: Loading Class: akka/actor/ActorRef$.class +INFO: Loading Class: akka/actor/ActorRef.class +INFO: Loading Class: akka/actor/ActorRefFactory$class.class +INFO: Loading Class: akka/actor/ActorRefFactory.class +INFO: Loading Class: akka/actor/ActorRefProvider.class +INFO: Loading Class: akka/actor/ActorRefScope.class +INFO: Loading Class: akka/actor/ActorRefWithCell.class +INFO: Loading Class: akka/actor/ActorSelection$$anon$1.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$1.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$2.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$rec$1$1.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$rec$1$2.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$rec$1$3.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$rec$1$4.class +INFO: Loading Class: akka/actor/ActorSelection$$anonfun$resolveOne$1.class +INFO: Loading Class: akka/actor/ActorSelection$.class +INFO: Loading Class: akka/actor/ActorSelection.class +INFO: Loading Class: akka/actor/ActorSelectionMessage$.class +INFO: Loading Class: akka/actor/ActorSelectionMessage.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$3.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$4.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$5.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$6.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$findClassLoader$1$$anonfun$apply$1.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$findClassLoader$1.class +INFO: Loading Class: akka/actor/ActorSystem$$anonfun$findClassLoader$2.class +INFO: Loading Class: akka/actor/ActorSystem$.class +INFO: Loading Class: akka/actor/ActorSystem$Settings.class +INFO: Loading Class: akka/actor/ActorSystem.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anon$2.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anon$3.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$7$$anon$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$7.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$8.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$akka$actor$ActorSystemImpl$$printNode$1$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$liftedTree2$1$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$liftedTree2$1$2.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$loadExtensions$1$$anonfun$2.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$loadExtensions$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$shutdown$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$$anonfun$terminationCallbacks$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$TerminationCallbacks$$anonfun$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$TerminationCallbacks$$anonfun$add$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$TerminationCallbacks$$anonfun$run$1.class +INFO: Loading Class: akka/actor/ActorSystemImpl$TerminationCallbacks.class +INFO: Loading Class: akka/actor/ActorSystemImpl.class +INFO: Loading Class: akka/actor/Address$.class +INFO: Loading Class: akka/actor/Address.class +INFO: Loading Class: akka/actor/AddressFromURIString$.class +INFO: Loading Class: akka/actor/AddressFromURIString.class +INFO: Loading Class: akka/actor/AddressTerminated$.class +INFO: Loading Class: akka/actor/AddressTerminated.class +INFO: Loading Class: akka/actor/AllForOneStrategy$$anonfun$4.class +INFO: Loading Class: akka/actor/AllForOneStrategy$$anonfun$processFailure$1.class +INFO: Loading Class: akka/actor/AllForOneStrategy$$anonfun$processFailure$2.class +INFO: Loading Class: akka/actor/AllForOneStrategy$$anonfun$processFailure$3.class +INFO: Loading Class: akka/actor/AllForOneStrategy$.class +INFO: Loading Class: akka/actor/AllForOneStrategy.class +INFO: Loading Class: akka/actor/ArgsReflectConstructor.class +INFO: Loading Class: akka/actor/AutoReceivedMessage.class +INFO: Loading Class: akka/actor/Cancellable.class +INFO: Loading Class: akka/actor/Cell$class.class +INFO: Loading Class: akka/actor/Cell.class +INFO: Loading Class: akka/actor/ChildActorPath$$anonfun$1.class +INFO: Loading Class: akka/actor/ChildActorPath$$anonfun$2.class +INFO: Loading Class: akka/actor/ChildActorPath$$anonfun$toString$1.class +INFO: Loading Class: akka/actor/ChildActorPath$$anonfun$toStringWithAddress$1.class +INFO: Loading Class: akka/actor/ChildActorPath.class +INFO: Loading Class: akka/actor/ChildNameReserved$.class +INFO: Loading Class: akka/actor/ChildNameReserved.class +INFO: Loading Class: akka/actor/ChildRestartStats$.class +INFO: Loading Class: akka/actor/ChildRestartStats.class +INFO: Loading Class: akka/actor/ChildStats.class +INFO: Loading Class: akka/actor/ContextualTypedActorFactory$.class +INFO: Loading Class: akka/actor/ContextualTypedActorFactory.class +INFO: Loading Class: akka/actor/CreatorConsumer.class +INFO: Loading Class: akka/actor/CreatorFunctionConsumer.class +INFO: Loading Class: akka/actor/DeadLetter$$anonfun$1.class +INFO: Loading Class: akka/actor/DeadLetter$$anonfun$2.class +INFO: Loading Class: akka/actor/DeadLetter$.class +INFO: Loading Class: akka/actor/DeadLetter.class +INFO: Loading Class: akka/actor/DeadLetterActorRef$.class +INFO: Loading Class: akka/actor/DeadLetterActorRef$SerializedDeadLetterActorRef.class +INFO: Loading Class: akka/actor/DeadLetterActorRef.class +INFO: Loading Class: akka/actor/DeathPactException$.class +INFO: Loading Class: akka/actor/DeathPactException.class +INFO: Loading Class: akka/actor/DefaultSupervisorStrategy.class +INFO: Loading Class: akka/actor/Deploy$.class +INFO: Loading Class: akka/actor/Deploy.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$1.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$2.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$3.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$4$$anonfun$apply$2.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$4.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$add$1$1.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$createRouterConfig$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/actor/Deployer$$anonfun$createRouterConfig$1.class +INFO: Loading Class: akka/actor/Deployer.class +INFO: Loading Class: akka/actor/DiagnosticActorLogging$class.class +INFO: Loading Class: akka/actor/DiagnosticActorLogging.class +INFO: Loading Class: akka/actor/DynamicAccess.class +INFO: Loading Class: akka/actor/EmptyLocalActorRef.class +INFO: Loading Class: akka/actor/ExtendedActorSystem.class +INFO: Loading Class: akka/actor/Extension.class +INFO: Loading Class: akka/actor/ExtensionId$class.class +INFO: Loading Class: akka/actor/ExtensionId.class +INFO: Loading Class: akka/actor/ExtensionIdProvider.class +INFO: Loading Class: akka/actor/ExtensionKey.class +INFO: Loading Class: akka/actor/FSM$$anon$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$applyState$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$handleTransition$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$makeTransition$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$receive$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$register$1.class +INFO: Loading Class: akka/actor/FSM$$anonfun$terminate$1.class +INFO: Loading Class: akka/actor/FSM$$minus$greater$.class +INFO: Loading Class: akka/actor/FSM$.class +INFO: Loading Class: akka/actor/FSM$CurrentState$.class +INFO: Loading Class: akka/actor/FSM$CurrentState.class +INFO: Loading Class: akka/actor/FSM$Event$.class +INFO: Loading Class: akka/actor/FSM$Event.class +INFO: Loading Class: akka/actor/FSM$Failure$.class +INFO: Loading Class: akka/actor/FSM$Failure.class +INFO: Loading Class: akka/actor/FSM$LogEntry$.class +INFO: Loading Class: akka/actor/FSM$LogEntry.class +INFO: Loading Class: akka/actor/FSM$Normal$.class +INFO: Loading Class: akka/actor/FSM$NullFunction$.class +INFO: Loading Class: akka/actor/FSM$Reason.class +INFO: Loading Class: akka/actor/FSM$Shutdown$.class +INFO: Loading Class: akka/actor/FSM$State$.class +INFO: Loading Class: akka/actor/FSM$State.class +INFO: Loading Class: akka/actor/FSM$StateTimeout$.class +INFO: Loading Class: akka/actor/FSM$StopEvent$.class +INFO: Loading Class: akka/actor/FSM$StopEvent.class +INFO: Loading Class: akka/actor/FSM$SubscribeTransitionCallBack$.class +INFO: Loading Class: akka/actor/FSM$SubscribeTransitionCallBack.class +INFO: Loading Class: akka/actor/FSM$TimeoutMarker$.class +INFO: Loading Class: akka/actor/FSM$TimeoutMarker.class +INFO: Loading Class: akka/actor/FSM$Timer$.class +INFO: Loading Class: akka/actor/FSM$Timer.class +INFO: Loading Class: akka/actor/FSM$TransformHelper$$anonfun$using$1.class +INFO: Loading Class: akka/actor/FSM$TransformHelper.class +INFO: Loading Class: akka/actor/FSM$Transition$.class +INFO: Loading Class: akka/actor/FSM$Transition.class +INFO: Loading Class: akka/actor/FSM$UnsubscribeTransitionCallBack$.class +INFO: Loading Class: akka/actor/FSM$UnsubscribeTransitionCallBack.class +INFO: Loading Class: akka/actor/FSM$class.class +INFO: Loading Class: akka/actor/FSM.class +INFO: Loading Class: akka/actor/Identify$.class +INFO: Loading Class: akka/actor/Identify.class +INFO: Loading Class: akka/actor/IllegalActorStateException$.class +INFO: Loading Class: akka/actor/IllegalActorStateException.class +INFO: Loading Class: akka/actor/Inbox$.class +INFO: Loading Class: akka/actor/Inbox.class +INFO: Loading Class: akka/actor/IndirectActorProducer$.class +INFO: Loading Class: akka/actor/IndirectActorProducer.class +INFO: Loading Class: akka/actor/InternalActorRef.class +INFO: Loading Class: akka/actor/InvalidActorNameException$.class +INFO: Loading Class: akka/actor/InvalidActorNameException.class +INFO: Loading Class: akka/actor/InvalidMessageException$.class +INFO: Loading Class: akka/actor/InvalidMessageException.class +INFO: Loading Class: akka/actor/Kill$.class +INFO: Loading Class: akka/actor/Kill.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$10.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$11.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$2$$anon$1.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$2.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$3.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$8$$anonfun$7.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$8$$anonfun$clearAll$1.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$8$$anonfun$nextTick$1.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$8$$anonfun$run$1.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$8.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anon$9.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$1.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$2.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$3.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$4.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$5.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$6.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$$anonfun$close$1.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$TaskHolder.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$TaskQueue.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler$TimerTask.class +INFO: Loading Class: akka/actor/LightArrayRevolverScheduler.class +INFO: Loading Class: akka/actor/LocalActorRef.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$1$$anonfun$getSingleChild$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$2$$anonfun$$bang$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$2$$anonfun$sendSystemMessage$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$2$$anonfun$stop$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$2$$anonfun$stop$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$2$$anonfun$stop$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anon$2.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$2.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$3.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$4.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$actorOf$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$registerTempActor$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$rootGuardianStrategy$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$$anonfun$unregisterTempActor$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$Guardian$$anonfun$receive$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$Guardian.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$SystemGuardian$$anonfun$receive$2$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$SystemGuardian$$anonfun$receive$2.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$SystemGuardian$$anonfun$terminating$1.class +INFO: Loading Class: akka/actor/LocalActorRefProvider$SystemGuardian.class +INFO: Loading Class: akka/actor/LocalActorRefProvider.class +INFO: Loading Class: akka/actor/LocalRef$class.class +INFO: Loading Class: akka/actor/LocalRef.class +INFO: Loading Class: akka/actor/LocalScope$.class +INFO: Loading Class: akka/actor/LocalScope.class +INFO: Loading Class: akka/actor/LoggingFSM$$anonfun$2.class +INFO: Loading Class: akka/actor/LoggingFSM$$anonfun$3.class +INFO: Loading Class: akka/actor/LoggingFSM$class.class +INFO: Loading Class: akka/actor/LoggingFSM.class +INFO: Loading Class: akka/actor/MinimalActorRef$$anonfun$getChild$1.class +INFO: Loading Class: akka/actor/MinimalActorRef$class.class +INFO: Loading Class: akka/actor/MinimalActorRef.class +INFO: Loading Class: akka/actor/NoArgsReflectConstructor.class +INFO: Loading Class: akka/actor/NoScopeGiven$.class +INFO: Loading Class: akka/actor/NoScopeGiven.class +INFO: Loading Class: akka/actor/NoSerializationVerificationNeeded.class +INFO: Loading Class: akka/actor/Nobody$.class +INFO: Loading Class: akka/actor/Nobody.class +INFO: Loading Class: akka/actor/OneForOneStrategy$$anonfun$5.class +INFO: Loading Class: akka/actor/OneForOneStrategy$.class +INFO: Loading Class: akka/actor/OneForOneStrategy.class +INFO: Loading Class: akka/actor/OriginalRestartException$.class +INFO: Loading Class: akka/actor/OriginalRestartException.class +INFO: Loading Class: akka/actor/PathUtils$class.class +INFO: Loading Class: akka/actor/PathUtils.class +INFO: Loading Class: akka/actor/PoisonPill$.class +INFO: Loading Class: akka/actor/PoisonPill.class +INFO: Loading Class: akka/actor/PossiblyHarmful.class +INFO: Loading Class: akka/actor/PostRestartException$.class +INFO: Loading Class: akka/actor/PostRestartException.class +INFO: Loading Class: akka/actor/PreRestartException$.class +INFO: Loading Class: akka/actor/PreRestartException.class +INFO: Loading Class: akka/actor/Props$$anonfun$1.class +INFO: Loading Class: akka/actor/Props$$anonfun$2.class +INFO: Loading Class: akka/actor/Props$$anonfun$3.class +INFO: Loading Class: akka/actor/Props$.class +INFO: Loading Class: akka/actor/Props$EmptyActor.class +INFO: Loading Class: akka/actor/Props.class +INFO: Loading Class: akka/actor/ReceiveTimeout$.class +INFO: Loading Class: akka/actor/ReceiveTimeout.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$1.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$createInstanceFor$1.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$createInstanceFor$2$$anonfun$2.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$createInstanceFor$2$$anonfun$3.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$createInstanceFor$2.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$getClassFor$1.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$getObjectFor$1$$anonfun$apply$1.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$getObjectFor$1$$anonfun$apply$2.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess$$anonfun$getObjectFor$1.class +INFO: Loading Class: akka/actor/ReflectiveDynamicAccess.class +INFO: Loading Class: akka/actor/RelativeActorPath$.class +INFO: Loading Class: akka/actor/RelativeActorPath.class +INFO: Loading Class: akka/actor/RepointableActorRef.class +INFO: Loading Class: akka/actor/RepointableRef.class +INFO: Loading Class: akka/actor/RootActorPath$.class +INFO: Loading Class: akka/actor/RootActorPath.class +INFO: Loading Class: akka/actor/ScalaActorRef$class.class +INFO: Loading Class: akka/actor/ScalaActorRef.class +INFO: Loading Class: akka/actor/ScalaActorSelection$class.class +INFO: Loading Class: akka/actor/ScalaActorSelection.class +INFO: Loading Class: akka/actor/Scheduler$$anon$4.class +INFO: Loading Class: akka/actor/Scheduler$$anon$5.class +INFO: Loading Class: akka/actor/Scheduler$$anon$6.class +INFO: Loading Class: akka/actor/Scheduler$$anon$7.class +INFO: Loading Class: akka/actor/Scheduler$class.class +INFO: Loading Class: akka/actor/Scheduler.class +INFO: Loading Class: akka/actor/SchedulerException$.class +INFO: Loading Class: akka/actor/SchedulerException.class +INFO: Loading Class: akka/actor/Scope.class +INFO: Loading Class: akka/actor/SelectChildName$.class +INFO: Loading Class: akka/actor/SelectChildName.class +INFO: Loading Class: akka/actor/SelectChildPattern$.class +INFO: Loading Class: akka/actor/SelectChildPattern.class +INFO: Loading Class: akka/actor/SelectParent$.class +INFO: Loading Class: akka/actor/SelectParent.class +INFO: Loading Class: akka/actor/SelectionPathElement.class +INFO: Loading Class: akka/actor/SerializedActorRef$.class +INFO: Loading Class: akka/actor/SerializedActorRef.class +INFO: Loading Class: akka/actor/Stash.class +INFO: Loading Class: akka/actor/StashFactory$$anon$1.class +INFO: Loading Class: akka/actor/StashFactory$class.class +INFO: Loading Class: akka/actor/StashFactory.class +INFO: Loading Class: akka/actor/StashOverflowException$.class +INFO: Loading Class: akka/actor/StashOverflowException.class +INFO: Loading Class: akka/actor/StashSupport$$anonfun$1.class +INFO: Loading Class: akka/actor/StashSupport$$anonfun$prepend$1.class +INFO: Loading Class: akka/actor/StashSupport$$anonfun$unstashAll$1.class +INFO: Loading Class: akka/actor/StashSupport$class.class +INFO: Loading Class: akka/actor/StashSupport.class +INFO: Loading Class: akka/actor/Status$.class +INFO: Loading Class: akka/actor/Status$Failure$.class +INFO: Loading Class: akka/actor/Status$Failure.class +INFO: Loading Class: akka/actor/Status$Status.class +INFO: Loading Class: akka/actor/Status$Success$.class +INFO: Loading Class: akka/actor/Status$Success.class +INFO: Loading Class: akka/actor/Status.class +INFO: Loading Class: akka/actor/StopChild$.class +INFO: Loading Class: akka/actor/StopChild.class +INFO: Loading Class: akka/actor/StoppingSupervisorStrategy.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$1.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$3.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$makeDecider$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$makeDecider$1.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$makeDecider$2$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$makeDecider$2$$anonfun$applyOrElse$3.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$makeDecider$2.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$makeDecider$3.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$sort$1$$anonfun$2.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$sort$1.class +INFO: Loading Class: akka/actor/SupervisorStrategy$$anonfun$stoppingDecider$1$1.class +INFO: Loading Class: akka/actor/SupervisorStrategy$.class +INFO: Loading Class: akka/actor/SupervisorStrategy$Directive.class +INFO: Loading Class: akka/actor/SupervisorStrategy$Escalate$.class +INFO: Loading Class: akka/actor/SupervisorStrategy$Restart$.class +INFO: Loading Class: akka/actor/SupervisorStrategy$Resume$.class +INFO: Loading Class: akka/actor/SupervisorStrategy$Stop$.class +INFO: Loading Class: akka/actor/SupervisorStrategy.class +INFO: Loading Class: akka/actor/SupervisorStrategyConfigurator.class +INFO: Loading Class: akka/actor/SupervisorStrategyLowPriorityImplicits$class.class +INFO: Loading Class: akka/actor/SupervisorStrategyLowPriorityImplicits.class +INFO: Loading Class: akka/actor/SystemGuardian$.class +INFO: Loading Class: akka/actor/SystemGuardian$RegisterTerminationHook$.class +INFO: Loading Class: akka/actor/SystemGuardian$TerminationHook$.class +INFO: Loading Class: akka/actor/SystemGuardian$TerminationHookDone$.class +INFO: Loading Class: akka/actor/SystemGuardian.class +INFO: Loading Class: akka/actor/Terminated$.class +INFO: Loading Class: akka/actor/Terminated.class +INFO: Loading Class: akka/actor/TypedActor$.class +INFO: Loading Class: akka/actor/TypedActor$MethodCall$$anonfun$writeReplace$1.class +INFO: Loading Class: akka/actor/TypedActor$MethodCall$.class +INFO: Loading Class: akka/actor/TypedActor$MethodCall.class +INFO: Loading Class: akka/actor/TypedActor$NullResponse$.class +INFO: Loading Class: akka/actor/TypedActor$PostRestart.class +INFO: Loading Class: akka/actor/TypedActor$PostStop.class +INFO: Loading Class: akka/actor/TypedActor$PreRestart.class +INFO: Loading Class: akka/actor/TypedActor$PreStart.class +INFO: Loading Class: akka/actor/TypedActor$Receiver.class +INFO: Loading Class: akka/actor/TypedActor$SerializedMethodCall$$anonfun$readResolve$1.class +INFO: Loading Class: akka/actor/TypedActor$SerializedMethodCall$.class +INFO: Loading Class: akka/actor/TypedActor$SerializedMethodCall.class +INFO: Loading Class: akka/actor/TypedActor$SerializedTypedActorInvocationHandler$.class +INFO: Loading Class: akka/actor/TypedActor$SerializedTypedActorInvocationHandler.class +INFO: Loading Class: akka/actor/TypedActor$Supervisor.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$3.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$postRestart$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$postStop$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$preRestart$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$preRestart$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$preStart$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$receive$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$receive$1$$anonfun$applyOrElse$2$$anonfun$apply$2.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$receive$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor$$anonfun$receive$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActor.class +INFO: Loading Class: akka/actor/TypedActor$TypedActorInvocationHandler$$anonfun$invoke$1.class +INFO: Loading Class: akka/actor/TypedActor$TypedActorInvocationHandler.class +INFO: Loading Class: akka/actor/TypedActor.class +INFO: Loading Class: akka/actor/TypedActorExtension$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: akka/actor/TypedActorExtension$$anonfun$4.class +INFO: Loading Class: akka/actor/TypedActorExtension$$anonfun$5.class +INFO: Loading Class: akka/actor/TypedActorExtension.class +INFO: Loading Class: akka/actor/TypedActorFactory$$anonfun$1.class +INFO: Loading Class: akka/actor/TypedActorFactory$$anonfun$2.class +INFO: Loading Class: akka/actor/TypedActorFactory$$anonfun$typedActorOf$1.class +INFO: Loading Class: akka/actor/TypedActorFactory$$anonfun$typedActorOf$2.class +INFO: Loading Class: akka/actor/TypedActorFactory$$anonfun$typedActorOf$3.class +INFO: Loading Class: akka/actor/TypedActorFactory$class.class +INFO: Loading Class: akka/actor/TypedActorFactory.class +INFO: Loading Class: akka/actor/TypedCreatorFunctionConsumer.class +INFO: Loading Class: akka/actor/TypedProps$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: akka/actor/TypedProps$.class +INFO: Loading Class: akka/actor/TypedProps.class +INFO: Loading Class: akka/actor/UnboundedStash.class +INFO: Loading Class: akka/actor/UnhandledMessage$.class +INFO: Loading Class: akka/actor/UnhandledMessage.class +INFO: Loading Class: akka/actor/UnrestrictedStash$class.class +INFO: Loading Class: akka/actor/UnrestrictedStash.class +INFO: Loading Class: akka/actor/UnstartedCell$$anonfun$hasMessages$1.class +INFO: Loading Class: akka/actor/UnstartedCell$$anonfun$isTerminated$1.class +INFO: Loading Class: akka/actor/UnstartedCell$$anonfun$numberOfMessages$1.class +INFO: Loading Class: akka/actor/UnstartedCell$$anonfun$replaceWith$1.class +INFO: Loading Class: akka/actor/UnstartedCell$$anonfun$tryEnqueue$1$1.class +INFO: Loading Class: akka/actor/UnstartedCell.class +INFO: Loading Class: akka/actor/UntypedActor$$anonfun$receive$1.class +INFO: Loading Class: akka/actor/UntypedActor.class +INFO: Loading Class: akka/actor/UntypedActorContext.class +INFO: Loading Class: akka/actor/UntypedActorFactory.class +INFO: Loading Class: akka/actor/UntypedActorFactoryConsumer.class +INFO: Loading Class: akka/actor/UntypedActorWithStash.class +INFO: Loading Class: akka/actor/UntypedActorWithUnboundedStash.class +INFO: Loading Class: akka/actor/UntypedActorWithUnrestrictedStash.class +INFO: Loading Class: akka/actor/VirtualPathContainer.class +INFO: Loading Class: akka/actor/dsl/Creators$Act$class.class +INFO: Loading Class: akka/actor/dsl/Creators$Act.class +INFO: Loading Class: akka/actor/dsl/Creators$ActWithStash.class +INFO: Loading Class: akka/actor/dsl/Creators$class.class +INFO: Loading Class: akka/actor/dsl/Creators.class +INFO: Loading Class: akka/actor/dsl/Inbox$$anon$1.class +INFO: Loading Class: akka/actor/dsl/Inbox$.class +INFO: Loading Class: akka/actor/dsl/Inbox$Get$.class +INFO: Loading Class: akka/actor/dsl/Inbox$Get.class +INFO: Loading Class: akka/actor/dsl/Inbox$Inbox.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxActor$$anonfun$1.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxActor$$anonfun$2.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxActor$$anonfun$receive$1$$anonfun$3.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxActor$$anonfun$receive$1.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxActor$$anonfun$receive$2.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxActor.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxExtension$class.class +INFO: Loading Class: akka/actor/dsl/Inbox$InboxExtension.class +INFO: Loading Class: akka/actor/dsl/Inbox$Kick$.class +INFO: Loading Class: akka/actor/dsl/Inbox$Query.class +INFO: Loading Class: akka/actor/dsl/Inbox$Select$.class +INFO: Loading Class: akka/actor/dsl/Inbox$Select.class +INFO: Loading Class: akka/actor/dsl/Inbox$StartWatch$.class +INFO: Loading Class: akka/actor/dsl/Inbox$StartWatch.class +INFO: Loading Class: akka/actor/dsl/Inbox$class.class +INFO: Loading Class: akka/actor/dsl/Inbox.class +INFO: Loading Class: akka/actor/dungeon/AbstractActorCell.class +INFO: Loading Class: akka/actor/dungeon/Children$$anonfun$makeChild$1.class +INFO: Loading Class: akka/actor/dungeon/Children$$anonfun$makeChild$2.class +INFO: Loading Class: akka/actor/dungeon/Children$$anonfun$resumeChildren$1.class +INFO: Loading Class: akka/actor/dungeon/Children$$anonfun$suspendChildren$1.class +INFO: Loading Class: akka/actor/dungeon/Children$class.class +INFO: Loading Class: akka/actor/dungeon/Children.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$ChildRestartsIterable.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$ChildrenIterable.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$Creation$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$Creation.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$EmptyChildrenContainer$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$EmptyChildrenContainer$class.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$EmptyChildrenContainer.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$NormalChildrenContainer$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$NormalChildrenContainer.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$Recreation$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$Recreation.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$SuspendReason.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$TerminatedChildrenContainer$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$TerminatingChildrenContainer$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$TerminatingChildrenContainer.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$Termination$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$UserRequest$.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$WaitingForChildren.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer$class.class +INFO: Loading Class: akka/actor/dungeon/ChildrenContainer.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$addWatcher$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$addressTerminated$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$addressTerminated$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$addressTerminated$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$addressTerminated$2.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$addressTerminated$3.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$akka$actor$dungeon$DeathWatch$$removeFromSet$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$hasNonLocalAddress$1$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$hasNonLocalAddress$1$2.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$remWatcher$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$tellWatchersWeDied$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$tellWatchersWeDied$2.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$unwatch$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$unwatchWatchedActors$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$unwatchWatchedActors$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$watch$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$$anonfun$watchedActorTerminated$1.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch$class.class +INFO: Loading Class: akka/actor/dungeon/DeathWatch.class +INFO: Loading Class: akka/actor/dungeon/Dispatch$$anonfun$handleException$1.class +INFO: Loading Class: akka/actor/dungeon/Dispatch$class.class +INFO: Loading Class: akka/actor/dungeon/Dispatch.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$2.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$3$$anonfun$apply$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$3.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$4.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$6.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$7.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$faultCreate$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$faultCreate$2.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$faultRecreate$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$finishRecreate$1$$anonfun$5.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$finishRecreate$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$handleNonFatalOrInterruptedException$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$terminate$1.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$$anonfun$terminate$2.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling$class.class +INFO: Loading Class: akka/actor/dungeon/FaultHandling.class +INFO: Loading Class: akka/actor/dungeon/ReceiveTimeout$.class +INFO: Loading Class: akka/actor/dungeon/ReceiveTimeout$class.class +INFO: Loading Class: akka/actor/dungeon/ReceiveTimeout.class +INFO: Loading Class: akka/actor/dungeon/UndefinedUidActorRef.class +INFO: Loading Class: akka/actor/package$.class +INFO: Loading Class: akka/actor/package.class +INFO: Loading Class: akka/dispatch/AbstractMailbox.class +INFO: Loading Class: akka/dispatch/AbstractMessageDispatcher.class +INFO: Loading Class: akka/dispatch/AbstractNodeQueue$Node.class +INFO: Loading Class: akka/dispatch/AbstractNodeQueue.class +INFO: Loading Class: akka/dispatch/BalancingDispatcher$$anon$1.class +INFO: Loading Class: akka/dispatch/BalancingDispatcher$SharingMailbox.class +INFO: Loading Class: akka/dispatch/BalancingDispatcher.class +INFO: Loading Class: akka/dispatch/BalancingDispatcherConfigurator$.class +INFO: Loading Class: akka/dispatch/BalancingDispatcherConfigurator.class +INFO: Loading Class: akka/dispatch/Batchable.class +INFO: Loading Class: akka/dispatch/BatchingExecutor$Batch$$anonfun$run$1.class +INFO: Loading Class: akka/dispatch/BatchingExecutor$Batch.class +INFO: Loading Class: akka/dispatch/BatchingExecutor$class.class +INFO: Loading Class: akka/dispatch/BatchingExecutor.class +INFO: Loading Class: akka/dispatch/BoundedDequeBasedMailbox$.class +INFO: Loading Class: akka/dispatch/BoundedDequeBasedMailbox$MessageQueue.class +INFO: Loading Class: akka/dispatch/BoundedDequeBasedMailbox.class +INFO: Loading Class: akka/dispatch/BoundedDequeBasedMessageQueue$class.class +INFO: Loading Class: akka/dispatch/BoundedDequeBasedMessageQueue.class +INFO: Loading Class: akka/dispatch/BoundedDequeBasedMessageQueueSemantics.class +INFO: Loading Class: akka/dispatch/BoundedMailbox$.class +INFO: Loading Class: akka/dispatch/BoundedMailbox$MessageQueue.class +INFO: Loading Class: akka/dispatch/BoundedMailbox.class +INFO: Loading Class: akka/dispatch/BoundedMessageQueueSemantics.class +INFO: Loading Class: akka/dispatch/BoundedPriorityMailbox$.class +INFO: Loading Class: akka/dispatch/BoundedPriorityMailbox$MessageQueue.class +INFO: Loading Class: akka/dispatch/BoundedPriorityMailbox.class +INFO: Loading Class: akka/dispatch/BoundedQueueBasedMessageQueue$class.class +INFO: Loading Class: akka/dispatch/BoundedQueueBasedMessageQueue.class +INFO: Loading Class: akka/dispatch/CachingConfig$$anonfun$1.class +INFO: Loading Class: akka/dispatch/CachingConfig$$anonfun$2.class +INFO: Loading Class: akka/dispatch/CachingConfig$.class +INFO: Loading Class: akka/dispatch/CachingConfig$PathEntry.class +INFO: Loading Class: akka/dispatch/CachingConfig$StringPathEntry$.class +INFO: Loading Class: akka/dispatch/CachingConfig$StringPathEntry.class +INFO: Loading Class: akka/dispatch/CachingConfig$ValuePathEntry$.class +INFO: Loading Class: akka/dispatch/CachingConfig$ValuePathEntry.class +INFO: Loading Class: akka/dispatch/CachingConfig.class +INFO: Loading Class: akka/dispatch/DefaultDispatcherPrerequisites$.class +INFO: Loading Class: akka/dispatch/DefaultDispatcherPrerequisites.class +INFO: Loading Class: akka/dispatch/DefaultExecutorServiceConfigurator$$anon$1.class +INFO: Loading Class: akka/dispatch/DefaultExecutorServiceConfigurator.class +INFO: Loading Class: akka/dispatch/DefaultSystemMessageQueue$class.class +INFO: Loading Class: akka/dispatch/DefaultSystemMessageQueue.class +INFO: Loading Class: akka/dispatch/DequeBasedMessageQueue.class +INFO: Loading Class: akka/dispatch/DequeBasedMessageQueueSemantics.class +INFO: Loading Class: akka/dispatch/Dispatcher$$anon$1.class +INFO: Loading Class: akka/dispatch/Dispatcher$LazyExecutorServiceDelegate.class +INFO: Loading Class: akka/dispatch/Dispatcher.class +INFO: Loading Class: akka/dispatch/DispatcherConfigurator.class +INFO: Loading Class: akka/dispatch/DispatcherPrerequisites.class +INFO: Loading Class: akka/dispatch/Dispatchers$$anonfun$configuratorFrom$1.class +INFO: Loading Class: akka/dispatch/Dispatchers$.class +INFO: Loading Class: akka/dispatch/Dispatchers.class +INFO: Loading Class: akka/dispatch/Envelope$.class +INFO: Loading Class: akka/dispatch/Envelope.class +INFO: Loading Class: akka/dispatch/ExecutionContexts$$anonfun$fromExecutor$1.class +INFO: Loading Class: akka/dispatch/ExecutionContexts$$anonfun$fromExecutorService$1.class +INFO: Loading Class: akka/dispatch/ExecutionContexts$.class +INFO: Loading Class: akka/dispatch/ExecutionContexts$sameThreadExecutionContext$.class +INFO: Loading Class: akka/dispatch/ExecutionContexts.class +INFO: Loading Class: akka/dispatch/ExecutorServiceConfigurator.class +INFO: Loading Class: akka/dispatch/ExecutorServiceDelegate$class.class +INFO: Loading Class: akka/dispatch/ExecutorServiceDelegate.class +INFO: Loading Class: akka/dispatch/ExecutorServiceFactory.class +INFO: Loading Class: akka/dispatch/ExecutorServiceFactoryProvider.class +INFO: Loading Class: akka/dispatch/Filter$$anon$1.class +INFO: Loading Class: akka/dispatch/Filter$.class +INFO: Loading Class: akka/dispatch/Filter.class +INFO: Loading Class: akka/dispatch/Foreach.class +INFO: Loading Class: akka/dispatch/ForkJoinExecutorConfigurator$.class +INFO: Loading Class: akka/dispatch/ForkJoinExecutorConfigurator$AkkaForkJoinPool.class +INFO: Loading Class: akka/dispatch/ForkJoinExecutorConfigurator$AkkaForkJoinTask.class +INFO: Loading Class: akka/dispatch/ForkJoinExecutorConfigurator$ForkJoinExecutorServiceFactory.class +INFO: Loading Class: akka/dispatch/ForkJoinExecutorConfigurator.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$find$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$find$2.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$fold$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$future$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$reduce$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$sequence$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$sequence$2$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$sequence$2$$anonfun$apply$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$sequence$2.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$traverse$1.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$traverse$2$$anonfun$apply$3$$anonfun$apply$4.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$traverse$2$$anonfun$apply$3.class +INFO: Loading Class: akka/dispatch/Futures$$anonfun$traverse$2.class +INFO: Loading Class: akka/dispatch/Futures$.class +INFO: Loading Class: akka/dispatch/Futures.class +INFO: Loading Class: akka/dispatch/LoadMetrics.class +INFO: Loading Class: akka/dispatch/Mailbox$.class +INFO: Loading Class: akka/dispatch/Mailbox.class +INFO: Loading Class: akka/dispatch/MailboxType.class +INFO: Loading Class: akka/dispatch/Mailboxes$$anon$1$$anon$2.class +INFO: Loading Class: akka/dispatch/Mailboxes$$anon$1.class +INFO: Loading Class: akka/dispatch/Mailboxes$$anonfun$1.class +INFO: Loading Class: akka/dispatch/Mailboxes$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: akka/dispatch/Mailboxes$$anonfun$2$$anonfun$apply$2.class +INFO: Loading Class: akka/dispatch/Mailboxes$$anonfun$2.class +INFO: Loading Class: akka/dispatch/Mailboxes$.class +INFO: Loading Class: akka/dispatch/Mailboxes.class +INFO: Loading Class: akka/dispatch/Mapper.class +INFO: Loading Class: akka/dispatch/MessageDispatcher$$anon$2.class +INFO: Loading Class: akka/dispatch/MessageDispatcher$$anon$3.class +INFO: Loading Class: akka/dispatch/MessageDispatcher$$anonfun$1.class +INFO: Loading Class: akka/dispatch/MessageDispatcher$$anonfun$actors$1.class +INFO: Loading Class: akka/dispatch/MessageDispatcher$.class +INFO: Loading Class: akka/dispatch/MessageDispatcher.class +INFO: Loading Class: akka/dispatch/MessageDispatcherConfigurator$$anonfun$configurator$1$1.class +INFO: Loading Class: akka/dispatch/MessageDispatcherConfigurator.class +INFO: Loading Class: akka/dispatch/MessageQueue.class +INFO: Loading Class: akka/dispatch/MonitorableThreadFactory$$anon$2.class +INFO: Loading Class: akka/dispatch/MonitorableThreadFactory$$anonfun$wire$1.class +INFO: Loading Class: akka/dispatch/MonitorableThreadFactory$.class +INFO: Loading Class: akka/dispatch/MonitorableThreadFactory$AkkaForkJoinWorkerThread$$anon$3.class +INFO: Loading Class: akka/dispatch/MonitorableThreadFactory$AkkaForkJoinWorkerThread.class +INFO: Loading Class: akka/dispatch/MonitorableThreadFactory.class +INFO: Loading Class: akka/dispatch/MultipleConsumerSemantics.class +INFO: Loading Class: akka/dispatch/NodeMessageQueue.class +INFO: Loading Class: akka/dispatch/OnComplete.class +INFO: Loading Class: akka/dispatch/OnFailure.class +INFO: Loading Class: akka/dispatch/OnSuccess.class +INFO: Loading Class: akka/dispatch/PinnedDispatcher.class +INFO: Loading Class: akka/dispatch/PinnedDispatcherConfigurator.class +INFO: Loading Class: akka/dispatch/PriorityGenerator$$anon$2.class +INFO: Loading Class: akka/dispatch/PriorityGenerator$.class +INFO: Loading Class: akka/dispatch/PriorityGenerator.class +INFO: Loading Class: akka/dispatch/ProducesMessageQueue.class +INFO: Loading Class: akka/dispatch/QueueBasedMessageQueue$class.class +INFO: Loading Class: akka/dispatch/QueueBasedMessageQueue.class +INFO: Loading Class: akka/dispatch/Recover.class +INFO: Loading Class: akka/dispatch/RequiresMessageQueue.class +INFO: Loading Class: akka/dispatch/SaneRejectedExecutionHandler.class +INFO: Loading Class: akka/dispatch/SingleConsumerOnlyUnboundedMailbox$.class +INFO: Loading Class: akka/dispatch/SingleConsumerOnlyUnboundedMailbox.class +INFO: Loading Class: akka/dispatch/SystemMessageQueue.class +INFO: Loading Class: akka/dispatch/TaskInvocation$.class +INFO: Loading Class: akka/dispatch/TaskInvocation.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$$anonfun$arrayBlockingQueue$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$$anonfun$linkedBlockingQueue$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$$anonfun$linkedBlockingQueue$2.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$$anonfun$reusableQueue$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$$anonfun$synchronousQueue$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$ThreadPoolExecutorServiceFactory$$anon$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig$ThreadPoolExecutorServiceFactory.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfig.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfigBuilder$$anonfun$configure$1$$anonfun$apply$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfigBuilder$$anonfun$configure$1$$anonfun$apply$2.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfigBuilder$$anonfun$configure$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfigBuilder$.class +INFO: Loading Class: akka/dispatch/ThreadPoolConfigBuilder.class +INFO: Loading Class: akka/dispatch/ThreadPoolExecutorConfigurator$$anonfun$createThreadPoolConfigBuilder$1$$anonfun$apply$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolExecutorConfigurator$$anonfun$createThreadPoolConfigBuilder$1$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: akka/dispatch/ThreadPoolExecutorConfigurator$$anonfun$createThreadPoolConfigBuilder$1$$anonfun$apply$2.class +INFO: Loading Class: akka/dispatch/ThreadPoolExecutorConfigurator$$anonfun$createThreadPoolConfigBuilder$1.class +INFO: Loading Class: akka/dispatch/ThreadPoolExecutorConfigurator.class +INFO: Loading Class: akka/dispatch/UnboundedDequeBasedMailbox$.class +INFO: Loading Class: akka/dispatch/UnboundedDequeBasedMailbox$MessageQueue.class +INFO: Loading Class: akka/dispatch/UnboundedDequeBasedMailbox.class +INFO: Loading Class: akka/dispatch/UnboundedDequeBasedMessageQueue$class.class +INFO: Loading Class: akka/dispatch/UnboundedDequeBasedMessageQueue.class +INFO: Loading Class: akka/dispatch/UnboundedDequeBasedMessageQueueSemantics.class +INFO: Loading Class: akka/dispatch/UnboundedMailbox$.class +INFO: Loading Class: akka/dispatch/UnboundedMailbox$MessageQueue.class +INFO: Loading Class: akka/dispatch/UnboundedMailbox.class +INFO: Loading Class: akka/dispatch/UnboundedMessageQueueSemantics.class +INFO: Loading Class: akka/dispatch/UnboundedPriorityMailbox$.class +INFO: Loading Class: akka/dispatch/UnboundedPriorityMailbox$MessageQueue.class +INFO: Loading Class: akka/dispatch/UnboundedPriorityMailbox.class +INFO: Loading Class: akka/dispatch/UnboundedQueueBasedMessageQueue$class.class +INFO: Loading Class: akka/dispatch/UnboundedQueueBasedMessageQueue.class +INFO: Loading Class: akka/dispatch/japi$.class +INFO: Loading Class: akka/dispatch/japi$BooleanFunctionBridge.class +INFO: Loading Class: akka/dispatch/japi$CallbackBridge.class +INFO: Loading Class: akka/dispatch/japi$RecoverBridge.class +INFO: Loading Class: akka/dispatch/japi$UnitFunctionBridge.class +INFO: Loading Class: akka/dispatch/japi.class +INFO: Loading Class: akka/dispatch/sysmsg/Create$.class +INFO: Loading Class: akka/dispatch/sysmsg/Create.class +INFO: Loading Class: akka/dispatch/sysmsg/DeathWatchNotification$.class +INFO: Loading Class: akka/dispatch/sysmsg/DeathWatchNotification.class +INFO: Loading Class: akka/dispatch/sysmsg/EarliestFirstSystemMessageList$.class +INFO: Loading Class: akka/dispatch/sysmsg/EarliestFirstSystemMessageList.class +INFO: Loading Class: akka/dispatch/sysmsg/Failed$.class +INFO: Loading Class: akka/dispatch/sysmsg/Failed.class +INFO: Loading Class: akka/dispatch/sysmsg/LatestFirstSystemMessageList$.class +INFO: Loading Class: akka/dispatch/sysmsg/LatestFirstSystemMessageList.class +INFO: Loading Class: akka/dispatch/sysmsg/NoMessage$.class +INFO: Loading Class: akka/dispatch/sysmsg/NoMessage.class +INFO: Loading Class: akka/dispatch/sysmsg/Recreate$.class +INFO: Loading Class: akka/dispatch/sysmsg/Recreate.class +INFO: Loading Class: akka/dispatch/sysmsg/Resume$.class +INFO: Loading Class: akka/dispatch/sysmsg/Resume.class +INFO: Loading Class: akka/dispatch/sysmsg/StashWhenFailed.class +INFO: Loading Class: akka/dispatch/sysmsg/StashWhenWaitingForChildren.class +INFO: Loading Class: akka/dispatch/sysmsg/Supervise$.class +INFO: Loading Class: akka/dispatch/sysmsg/Supervise.class +INFO: Loading Class: akka/dispatch/sysmsg/Suspend$.class +INFO: Loading Class: akka/dispatch/sysmsg/Suspend.class +INFO: Loading Class: akka/dispatch/sysmsg/SystemMessage$class.class +INFO: Loading Class: akka/dispatch/sysmsg/SystemMessage.class +INFO: Loading Class: akka/dispatch/sysmsg/SystemMessageList$.class +INFO: Loading Class: akka/dispatch/sysmsg/SystemMessageList.class +INFO: Loading Class: akka/dispatch/sysmsg/Terminate$.class +INFO: Loading Class: akka/dispatch/sysmsg/Terminate.class +INFO: Loading Class: akka/dispatch/sysmsg/Unwatch$.class +INFO: Loading Class: akka/dispatch/sysmsg/Unwatch.class +INFO: Loading Class: akka/dispatch/sysmsg/Watch$.class +INFO: Loading Class: akka/dispatch/sysmsg/Watch.class +INFO: Loading Class: akka/event/ActorClassification$$anonfun$publish$2.class +INFO: Loading Class: akka/event/ActorClassification$class.class +INFO: Loading Class: akka/event/ActorClassification.class +INFO: Loading Class: akka/event/ActorClassifier.class +INFO: Loading Class: akka/event/ActorEventBus$class.class +INFO: Loading Class: akka/event/ActorEventBus.class +INFO: Loading Class: akka/event/AddressTerminatedTopic$$anonfun$publish$1.class +INFO: Loading Class: akka/event/AddressTerminatedTopic$.class +INFO: Loading Class: akka/event/AddressTerminatedTopic.class +INFO: Loading Class: akka/event/BusLogging.class +INFO: Loading Class: akka/event/DeadLetterListener$$anonfun$receive$1.class +INFO: Loading Class: akka/event/DeadLetterListener.class +INFO: Loading Class: akka/event/DiagnosticLoggingAdapter$class.class +INFO: Loading Class: akka/event/DiagnosticLoggingAdapter.class +INFO: Loading Class: akka/event/DummyClassForStringSources.class +INFO: Loading Class: akka/event/EventBus.class +INFO: Loading Class: akka/event/EventStream$$anon$1.class +INFO: Loading Class: akka/event/EventStream$.class +INFO: Loading Class: akka/event/EventStream.class +INFO: Loading Class: akka/event/LogSource$$anon$4.class +INFO: Loading Class: akka/event/LogSource$$anon$5.class +INFO: Loading Class: akka/event/LogSource$$anon$6.class +INFO: Loading Class: akka/event/LogSource$$anon$7.class +INFO: Loading Class: akka/event/LogSource$.class +INFO: Loading Class: akka/event/LogSource$class.class +INFO: Loading Class: akka/event/LogSource.class +INFO: Loading Class: akka/event/Logging$$anon$1.class +INFO: Loading Class: akka/event/Logging$$anon$2.class +INFO: Loading Class: akka/event/Logging$.class +INFO: Loading Class: akka/event/Logging$Debug$.class +INFO: Loading Class: akka/event/Logging$Debug.class +INFO: Loading Class: akka/event/Logging$Debug2.class +INFO: Loading Class: akka/event/Logging$DefaultLogger$$anonfun$receive$2.class +INFO: Loading Class: akka/event/Logging$DefaultLogger.class +INFO: Loading Class: akka/event/Logging$Error$.class +INFO: Loading Class: akka/event/Logging$Error$NoCause$.class +INFO: Loading Class: akka/event/Logging$Error.class +INFO: Loading Class: akka/event/Logging$Error2$.class +INFO: Loading Class: akka/event/Logging$Error2.class +INFO: Loading Class: akka/event/Logging$Extension$.class +INFO: Loading Class: akka/event/Logging$Info$.class +INFO: Loading Class: akka/event/Logging$Info.class +INFO: Loading Class: akka/event/Logging$Info2.class +INFO: Loading Class: akka/event/Logging$InitializeLogger$.class +INFO: Loading Class: akka/event/Logging$InitializeLogger.class +INFO: Loading Class: akka/event/Logging$LogEvent$class.class +INFO: Loading Class: akka/event/Logging$LogEvent.class +INFO: Loading Class: akka/event/Logging$LogEventException.class +INFO: Loading Class: akka/event/Logging$LogExt.class +INFO: Loading Class: akka/event/Logging$LogLevel$.class +INFO: Loading Class: akka/event/Logging$LogLevel.class +INFO: Loading Class: akka/event/Logging$LoggerException.class +INFO: Loading Class: akka/event/Logging$LoggerInitializationException.class +INFO: Loading Class: akka/event/Logging$LoggerInitialized$.class +INFO: Loading Class: akka/event/Logging$LoggerInitialized.class +INFO: Loading Class: akka/event/Logging$StandardOutLogger.class +INFO: Loading Class: akka/event/Logging$StdOutLogger$class.class +INFO: Loading Class: akka/event/Logging$StdOutLogger.class +INFO: Loading Class: akka/event/Logging$Warning$.class +INFO: Loading Class: akka/event/Logging$Warning.class +INFO: Loading Class: akka/event/Logging$Warning2.class +INFO: Loading Class: akka/event/Logging.class +INFO: Loading Class: akka/event/LoggingAdapter$$anonfun$format1$1.class +INFO: Loading Class: akka/event/LoggingAdapter$class.class +INFO: Loading Class: akka/event/LoggingAdapter.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$2.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$3.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$4$$anonfun$apply$4.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$4.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$akka$event$LoggingBus$$addLogger$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$akka$event$LoggingBus$$addLogger$2.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$logLevel$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$2.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1$$anonfun$apply$mcV$sp$4$$anonfun$apply$3.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setLogLevel$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setUpStdoutLogger$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setUpStdoutLogger$2.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$setUpStdoutLogger$3.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$startDefaultLoggers$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$startDefaultLoggers$2$$anon$3$$anonfun$receive$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$startDefaultLoggers$2$$anon$3.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$startDefaultLoggers$2.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$stopDefaultLoggers$1.class +INFO: Loading Class: akka/event/LoggingBus$$anonfun$stopDefaultLoggers$2.class +INFO: Loading Class: akka/event/LoggingBus$class.class +INFO: Loading Class: akka/event/LoggingBus.class +INFO: Loading Class: akka/event/LoggingReceive$$anonfun$1.class +INFO: Loading Class: akka/event/LoggingReceive$.class +INFO: Loading Class: akka/event/LoggingReceive.class +INFO: Loading Class: akka/event/LookupClassification$$anon$1.class +INFO: Loading Class: akka/event/LookupClassification$class.class +INFO: Loading Class: akka/event/LookupClassification.class +INFO: Loading Class: akka/event/NoLogging$.class +INFO: Loading Class: akka/event/NoLogging.class +INFO: Loading Class: akka/event/PredicateClassifier.class +INFO: Loading Class: akka/event/ScanningClassification$$anon$2.class +INFO: Loading Class: akka/event/ScanningClassification$class.class +INFO: Loading Class: akka/event/ScanningClassification.class +INFO: Loading Class: akka/event/SubchannelClassification$$anonfun$addToCache$1$$anonfun$apply$2.class +INFO: Loading Class: akka/event/SubchannelClassification$$anonfun$addToCache$1.class +INFO: Loading Class: akka/event/SubchannelClassification$$anonfun$publish$1.class +INFO: Loading Class: akka/event/SubchannelClassification$$anonfun$removeFromCache$1$$anonfun$apply$1.class +INFO: Loading Class: akka/event/SubchannelClassification$$anonfun$removeFromCache$1.class +INFO: Loading Class: akka/event/SubchannelClassification$class.class +INFO: Loading Class: akka/event/SubchannelClassification.class +INFO: Loading Class: akka/event/japi/ActorEventBus$$anon$1.class +INFO: Loading Class: akka/event/japi/ActorEventBus.class +INFO: Loading Class: akka/event/japi/EventBus.class +INFO: Loading Class: akka/event/japi/LookupEventBus$$anon$2.class +INFO: Loading Class: akka/event/japi/LookupEventBus.class +INFO: Loading Class: akka/event/japi/ScanningEventBus$$anon$4.class +INFO: Loading Class: akka/event/japi/ScanningEventBus.class +INFO: Loading Class: akka/event/japi/SubchannelEventBus$$anon$3.class +INFO: Loading Class: akka/event/japi/SubchannelEventBus.class +INFO: Loading Class: akka/io/BufferPool.class +INFO: Loading Class: akka/io/ChannelRegistration.class +INFO: Loading Class: akka/io/ChannelRegistry.class +INFO: Loading Class: akka/io/DirectByteBufferPool.class +INFO: Loading Class: akka/io/IO$.class +INFO: Loading Class: akka/io/IO$Extension.class +INFO: Loading Class: akka/io/IO.class +INFO: Loading Class: akka/io/Inet$.class +INFO: Loading Class: akka/io/Inet$SO$.class +INFO: Loading Class: akka/io/Inet$SO$ReceiveBufferSize$$anonfun$1.class +INFO: Loading Class: akka/io/Inet$SO$ReceiveBufferSize$.class +INFO: Loading Class: akka/io/Inet$SO$ReceiveBufferSize.class +INFO: Loading Class: akka/io/Inet$SO$ReuseAddress$.class +INFO: Loading Class: akka/io/Inet$SO$ReuseAddress.class +INFO: Loading Class: akka/io/Inet$SO$SendBufferSize$$anonfun$2.class +INFO: Loading Class: akka/io/Inet$SO$SendBufferSize$.class +INFO: Loading Class: akka/io/Inet$SO$SendBufferSize.class +INFO: Loading Class: akka/io/Inet$SO$TrafficClass$$anonfun$3.class +INFO: Loading Class: akka/io/Inet$SO$TrafficClass$.class +INFO: Loading Class: akka/io/Inet$SO$TrafficClass.class +INFO: Loading Class: akka/io/Inet$SoForwarders$class.class +INFO: Loading Class: akka/io/Inet$SoForwarders.class +INFO: Loading Class: akka/io/Inet$SoJavaFactories$class.class +INFO: Loading Class: akka/io/Inet$SoJavaFactories.class +INFO: Loading Class: akka/io/Inet$SocketOption$class.class +INFO: Loading Class: akka/io/Inet$SocketOption.class +INFO: Loading Class: akka/io/Inet.class +INFO: Loading Class: akka/io/SelectionHandler$$anon$1.class +INFO: Loading Class: akka/io/SelectionHandler$$anon$2.class +INFO: Loading Class: akka/io/SelectionHandler$$anonfun$akka$io$SelectionHandler$$stoppingDecider$1$1.class +INFO: Loading Class: akka/io/SelectionHandler$$anonfun$receive$1.class +INFO: Loading Class: akka/io/SelectionHandler$.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelAcceptable$.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelConnectable$.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelReadable$.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$$anon$3.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$$anon$4$$anon$5.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$$anon$4.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$$anon$6.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$$anon$7.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$$anon$8.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl$Task.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelRegistryImpl.class +INFO: Loading Class: akka/io/SelectionHandler$ChannelWritable$.class +INFO: Loading Class: akka/io/SelectionHandler$HasFailureMessage.class +INFO: Loading Class: akka/io/SelectionHandler$Retry$.class +INFO: Loading Class: akka/io/SelectionHandler$Retry.class +INFO: Loading Class: akka/io/SelectionHandler$SelectorBasedManager$$anonfun$workerForCommandHandler$1.class +INFO: Loading Class: akka/io/SelectionHandler$SelectorBasedManager.class +INFO: Loading Class: akka/io/SelectionHandler$WorkerForCommand$.class +INFO: Loading Class: akka/io/SelectionHandler$WorkerForCommand.class +INFO: Loading Class: akka/io/SelectionHandler.class +INFO: Loading Class: akka/io/SelectionHandlerSettings$$anonfun$1.class +INFO: Loading Class: akka/io/SelectionHandlerSettings$$anonfun$2.class +INFO: Loading Class: akka/io/SelectionHandlerSettings$$anonfun$3.class +INFO: Loading Class: akka/io/SelectionHandlerSettings$$anonfun$4.class +INFO: Loading Class: akka/io/SelectionHandlerSettings.class +INFO: Loading Class: akka/io/Tcp$.class +INFO: Loading Class: akka/io/Tcp$Abort$.class +INFO: Loading Class: akka/io/Tcp$Aborted$.class +INFO: Loading Class: akka/io/Tcp$Bind$.class +INFO: Loading Class: akka/io/Tcp$Bind.class +INFO: Loading Class: akka/io/Tcp$Bound$.class +INFO: Loading Class: akka/io/Tcp$Bound.class +INFO: Loading Class: akka/io/Tcp$Close$.class +INFO: Loading Class: akka/io/Tcp$CloseCommand.class +INFO: Loading Class: akka/io/Tcp$Closed$.class +INFO: Loading Class: akka/io/Tcp$Command$class.class +INFO: Loading Class: akka/io/Tcp$Command.class +INFO: Loading Class: akka/io/Tcp$CommandFailed$.class +INFO: Loading Class: akka/io/Tcp$CommandFailed.class +INFO: Loading Class: akka/io/Tcp$CompoundWrite$$anon$1.class +INFO: Loading Class: akka/io/Tcp$CompoundWrite$.class +INFO: Loading Class: akka/io/Tcp$CompoundWrite.class +INFO: Loading Class: akka/io/Tcp$ConfirmedClose$.class +INFO: Loading Class: akka/io/Tcp$ConfirmedClosed$.class +INFO: Loading Class: akka/io/Tcp$Connect$.class +INFO: Loading Class: akka/io/Tcp$Connect.class +INFO: Loading Class: akka/io/Tcp$Connected$.class +INFO: Loading Class: akka/io/Tcp$Connected.class +INFO: Loading Class: akka/io/Tcp$ConnectionClosed$class.class +INFO: Loading Class: akka/io/Tcp$ConnectionClosed.class +INFO: Loading Class: akka/io/Tcp$ErrorClosed$.class +INFO: Loading Class: akka/io/Tcp$ErrorClosed.class +INFO: Loading Class: akka/io/Tcp$Event.class +INFO: Loading Class: akka/io/Tcp$Message.class +INFO: Loading Class: akka/io/Tcp$NoAck$.class +INFO: Loading Class: akka/io/Tcp$NoAck.class +INFO: Loading Class: akka/io/Tcp$PeerClosed$.class +INFO: Loading Class: akka/io/Tcp$Received$.class +INFO: Loading Class: akka/io/Tcp$Received.class +INFO: Loading Class: akka/io/Tcp$Register$.class +INFO: Loading Class: akka/io/Tcp$Register.class +INFO: Loading Class: akka/io/Tcp$ResumeAccepting$.class +INFO: Loading Class: akka/io/Tcp$ResumeAccepting.class +INFO: Loading Class: akka/io/Tcp$ResumeReading$.class +INFO: Loading Class: akka/io/Tcp$ResumeWriting$.class +INFO: Loading Class: akka/io/Tcp$SO$.class +INFO: Loading Class: akka/io/Tcp$SO$KeepAlive$.class +INFO: Loading Class: akka/io/Tcp$SO$KeepAlive.class +INFO: Loading Class: akka/io/Tcp$SO$OOBInline$.class +INFO: Loading Class: akka/io/Tcp$SO$OOBInline.class +INFO: Loading Class: akka/io/Tcp$SO$TcpNoDelay$.class +INFO: Loading Class: akka/io/Tcp$SO$TcpNoDelay.class +INFO: Loading Class: akka/io/Tcp$SimpleWriteCommand$$anonfun$4.class +INFO: Loading Class: akka/io/Tcp$SimpleWriteCommand.class +INFO: Loading Class: akka/io/Tcp$SuspendReading$.class +INFO: Loading Class: akka/io/Tcp$Unbind$.class +INFO: Loading Class: akka/io/Tcp$Unbound$.class +INFO: Loading Class: akka/io/Tcp$Unbound.class +INFO: Loading Class: akka/io/Tcp$Write$.class +INFO: Loading Class: akka/io/Tcp$Write.class +INFO: Loading Class: akka/io/Tcp$WriteCommand$$anonfun$$plus$plus$colon$1.class +INFO: Loading Class: akka/io/Tcp$WriteCommand$.class +INFO: Loading Class: akka/io/Tcp$WriteCommand.class +INFO: Loading Class: akka/io/Tcp$WriteFile$$anonfun$5.class +INFO: Loading Class: akka/io/Tcp$WriteFile$$anonfun$6.class +INFO: Loading Class: akka/io/Tcp$WriteFile$.class +INFO: Loading Class: akka/io/Tcp$WriteFile.class +INFO: Loading Class: akka/io/Tcp$WritingResumed$.class +INFO: Loading Class: akka/io/Tcp$WritingResumed.class +INFO: Loading Class: akka/io/Tcp.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$closing$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$closingWithPendingWrite$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$completeConnect$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$connected$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$handleWriteMessages$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$peerSentEOF$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$postStop$1.class +INFO: Loading Class: akka/io/TcpConnection$$anonfun$waitingForRegistration$1.class +INFO: Loading Class: akka/io/TcpConnection$.class +INFO: Loading Class: akka/io/TcpConnection$AllRead$.class +INFO: Loading Class: akka/io/TcpConnection$CloseInformation$.class +INFO: Loading Class: akka/io/TcpConnection$CloseInformation.class +INFO: Loading Class: akka/io/TcpConnection$ConnectionInfo$.class +INFO: Loading Class: akka/io/TcpConnection$ConnectionInfo.class +INFO: Loading Class: akka/io/TcpConnection$EmptyPendingWrite$.class +INFO: Loading Class: akka/io/TcpConnection$EndOfStream$.class +INFO: Loading Class: akka/io/TcpConnection$MoreDataWaiting$.class +INFO: Loading Class: akka/io/TcpConnection$PendingBufferWrite.class +INFO: Loading Class: akka/io/TcpConnection$PendingWrite.class +INFO: Loading Class: akka/io/TcpConnection$PendingWriteFile.class +INFO: Loading Class: akka/io/TcpConnection$ReadResult.class +INFO: Loading Class: akka/io/TcpConnection$UpdatePendingWrite$.class +INFO: Loading Class: akka/io/TcpConnection$UpdatePendingWrite.class +INFO: Loading Class: akka/io/TcpConnection$WriteFileFailed$.class +INFO: Loading Class: akka/io/TcpConnection$WriteFileFailed.class +INFO: Loading Class: akka/io/TcpConnection.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$1.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$2.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$3.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$7.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$8.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$9.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$getIntBytes$1.class +INFO: Loading Class: akka/io/TcpExt$Settings$$anonfun$getIntBytes$2.class +INFO: Loading Class: akka/io/TcpExt$Settings.class +INFO: Loading Class: akka/io/TcpExt.class +INFO: Loading Class: akka/io/TcpIncomingConnection$$anonfun$receive$1.class +INFO: Loading Class: akka/io/TcpIncomingConnection.class +INFO: Loading Class: akka/io/TcpListener$$anonfun$acceptAllPending$1.class +INFO: Loading Class: akka/io/TcpListener$$anonfun$bound$1.class +INFO: Loading Class: akka/io/TcpListener$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: akka/io/TcpListener$$anonfun$receive$1.class +INFO: Loading Class: akka/io/TcpListener$.class +INFO: Loading Class: akka/io/TcpListener$FailedRegisterIncoming$.class +INFO: Loading Class: akka/io/TcpListener$FailedRegisterIncoming.class +INFO: Loading Class: akka/io/TcpListener$RegisterIncoming$.class +INFO: Loading Class: akka/io/TcpListener$RegisterIncoming.class +INFO: Loading Class: akka/io/TcpListener.class +INFO: Loading Class: akka/io/TcpManager$$anonfun$receive$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/io/TcpManager$$anonfun$receive$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: akka/io/TcpManager$$anonfun$receive$1.class +INFO: Loading Class: akka/io/TcpManager.class +INFO: Loading Class: akka/io/TcpMessage$.class +INFO: Loading Class: akka/io/TcpMessage.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$1.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$2.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$3.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$connecting$1$$anonfun$applyOrElse$2$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$connecting$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$connecting$1.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$receive$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/io/TcpOutgoingConnection$$anonfun$receive$1.class +INFO: Loading Class: akka/io/TcpOutgoingConnection.class +INFO: Loading Class: akka/io/TcpSO$.class +INFO: Loading Class: akka/io/TcpSO.class +INFO: Loading Class: akka/io/Udp$.class +INFO: Loading Class: akka/io/Udp$Bind$.class +INFO: Loading Class: akka/io/Udp$Bind.class +INFO: Loading Class: akka/io/Udp$Bound$.class +INFO: Loading Class: akka/io/Udp$Bound.class +INFO: Loading Class: akka/io/Udp$Command$class.class +INFO: Loading Class: akka/io/Udp$Command.class +INFO: Loading Class: akka/io/Udp$CommandFailed$.class +INFO: Loading Class: akka/io/Udp$CommandFailed.class +INFO: Loading Class: akka/io/Udp$Event.class +INFO: Loading Class: akka/io/Udp$Message.class +INFO: Loading Class: akka/io/Udp$NoAck$.class +INFO: Loading Class: akka/io/Udp$NoAck.class +INFO: Loading Class: akka/io/Udp$Received$.class +INFO: Loading Class: akka/io/Udp$Received.class +INFO: Loading Class: akka/io/Udp$ResumeReading$.class +INFO: Loading Class: akka/io/Udp$SO$.class +INFO: Loading Class: akka/io/Udp$SO$Broadcast$.class +INFO: Loading Class: akka/io/Udp$SO$Broadcast.class +INFO: Loading Class: akka/io/Udp$Send$$anonfun$2.class +INFO: Loading Class: akka/io/Udp$Send$.class +INFO: Loading Class: akka/io/Udp$Send.class +INFO: Loading Class: akka/io/Udp$SimpleSender$.class +INFO: Loading Class: akka/io/Udp$SimpleSender.class +INFO: Loading Class: akka/io/Udp$SimpleSenderReady$.class +INFO: Loading Class: akka/io/Udp$SimpleSenderReady.class +INFO: Loading Class: akka/io/Udp$SuspendReading$.class +INFO: Loading Class: akka/io/Udp$UdpSettings$$anonfun$1.class +INFO: Loading Class: akka/io/Udp$UdpSettings$$anonfun$3.class +INFO: Loading Class: akka/io/Udp$UdpSettings$$anonfun$getIntBytes$1.class +INFO: Loading Class: akka/io/Udp$UdpSettings.class +INFO: Loading Class: akka/io/Udp$Unbind$.class +INFO: Loading Class: akka/io/Udp$Unbound$.class +INFO: Loading Class: akka/io/Udp$Unbound.class +INFO: Loading Class: akka/io/Udp.class +INFO: Loading Class: akka/io/UdpConnected$.class +INFO: Loading Class: akka/io/UdpConnected$Command$class.class +INFO: Loading Class: akka/io/UdpConnected$Command.class +INFO: Loading Class: akka/io/UdpConnected$CommandFailed$.class +INFO: Loading Class: akka/io/UdpConnected$CommandFailed.class +INFO: Loading Class: akka/io/UdpConnected$Connect$.class +INFO: Loading Class: akka/io/UdpConnected$Connect.class +INFO: Loading Class: akka/io/UdpConnected$Connected$.class +INFO: Loading Class: akka/io/UdpConnected$Connected.class +INFO: Loading Class: akka/io/UdpConnected$Disconnect$.class +INFO: Loading Class: akka/io/UdpConnected$Disconnected$.class +INFO: Loading Class: akka/io/UdpConnected$Disconnected.class +INFO: Loading Class: akka/io/UdpConnected$Event.class +INFO: Loading Class: akka/io/UdpConnected$Message.class +INFO: Loading Class: akka/io/UdpConnected$NoAck$.class +INFO: Loading Class: akka/io/UdpConnected$NoAck.class +INFO: Loading Class: akka/io/UdpConnected$Received$.class +INFO: Loading Class: akka/io/UdpConnected$Received.class +INFO: Loading Class: akka/io/UdpConnected$ResumeReading$.class +INFO: Loading Class: akka/io/UdpConnected$Send$$anonfun$1.class +INFO: Loading Class: akka/io/UdpConnected$Send$.class +INFO: Loading Class: akka/io/UdpConnected$Send.class +INFO: Loading Class: akka/io/UdpConnected$SuspendReading$.class +INFO: Loading Class: akka/io/UdpConnected.class +INFO: Loading Class: akka/io/UdpConnectedExt.class +INFO: Loading Class: akka/io/UdpConnectedManager$$anonfun$receive$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/io/UdpConnectedManager$$anonfun$receive$1.class +INFO: Loading Class: akka/io/UdpConnectedManager.class +INFO: Loading Class: akka/io/UdpConnectedMessage$.class +INFO: Loading Class: akka/io/UdpConnectedMessage.class +INFO: Loading Class: akka/io/UdpConnection$$anonfun$1.class +INFO: Loading Class: akka/io/UdpConnection$$anonfun$connected$1.class +INFO: Loading Class: akka/io/UdpConnection$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: akka/io/UdpConnection$$anonfun$liftedTree1$1$2.class +INFO: Loading Class: akka/io/UdpConnection$$anonfun$receive$1.class +INFO: Loading Class: akka/io/UdpConnection.class +INFO: Loading Class: akka/io/UdpExt.class +INFO: Loading Class: akka/io/UdpListener$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: akka/io/UdpListener$$anonfun$readHandlers$1.class +INFO: Loading Class: akka/io/UdpListener$$anonfun$receive$1.class +INFO: Loading Class: akka/io/UdpListener.class +INFO: Loading Class: akka/io/UdpManager$$anonfun$receive$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/io/UdpManager$$anonfun$receive$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: akka/io/UdpManager$$anonfun$receive$1.class +INFO: Loading Class: akka/io/UdpManager.class +INFO: Loading Class: akka/io/UdpMessage$.class +INFO: Loading Class: akka/io/UdpMessage.class +INFO: Loading Class: akka/io/UdpSO$.class +INFO: Loading Class: akka/io/UdpSO.class +INFO: Loading Class: akka/io/UdpSender$$anonfun$1.class +INFO: Loading Class: akka/io/UdpSender$$anonfun$receive$1.class +INFO: Loading Class: akka/io/UdpSender.class +INFO: Loading Class: akka/io/WithUdpSend$$anonfun$sendHandlers$1.class +INFO: Loading Class: akka/io/WithUdpSend$class.class +INFO: Loading Class: akka/io/WithUdpSend.class +INFO: Loading Class: akka/japi/Creator.class +INFO: Loading Class: akka/japi/Effect.class +INFO: Loading Class: akka/japi/Function.class +INFO: Loading Class: akka/japi/Function2.class +INFO: Loading Class: akka/japi/JAPI.class +INFO: Loading Class: akka/japi/JavaPartialFunction$.class +INFO: Loading Class: akka/japi/JavaPartialFunction$NoMatch$.class +INFO: Loading Class: akka/japi/JavaPartialFunction$NoMatchException.class +INFO: Loading Class: akka/japi/JavaPartialFunction.class +INFO: Loading Class: akka/japi/Option$.class +INFO: Loading Class: akka/japi/Option$None$.class +INFO: Loading Class: akka/japi/Option$Some$.class +INFO: Loading Class: akka/japi/Option$Some.class +INFO: Loading Class: akka/japi/Option.class +INFO: Loading Class: akka/japi/Pair$.class +INFO: Loading Class: akka/japi/Pair.class +INFO: Loading Class: akka/japi/Predicate.class +INFO: Loading Class: akka/japi/Procedure.class +INFO: Loading Class: akka/japi/Util$.class +INFO: Loading Class: akka/japi/Util.class +INFO: Loading Class: akka/japi/pf/AbstractMatch.class +INFO: Loading Class: akka/japi/pf/AbstractPFBuilder.class +INFO: Loading Class: akka/japi/pf/CaseStatement$.class +INFO: Loading Class: akka/japi/pf/CaseStatement.class +INFO: Loading Class: akka/japi/pf/DeciderBuilder.class +INFO: Loading Class: akka/japi/pf/FI$Apply.class +INFO: Loading Class: akka/japi/pf/FI$Apply2.class +INFO: Loading Class: akka/japi/pf/FI$Predicate.class +INFO: Loading Class: akka/japi/pf/FI$TypedPredicate.class +INFO: Loading Class: akka/japi/pf/FI$TypedPredicate2.class +INFO: Loading Class: akka/japi/pf/FI$UnitApply.class +INFO: Loading Class: akka/japi/pf/FI$UnitApply2.class +INFO: Loading Class: akka/japi/pf/FI$UnitApply3.class +INFO: Loading Class: akka/japi/pf/FI$UnitApplyVoid.class +INFO: Loading Class: akka/japi/pf/FI.class +INFO: Loading Class: akka/japi/pf/FSMStateFunctionBuilder$1.class +INFO: Loading Class: akka/japi/pf/FSMStateFunctionBuilder$2.class +INFO: Loading Class: akka/japi/pf/FSMStateFunctionBuilder$3.class +INFO: Loading Class: akka/japi/pf/FSMStateFunctionBuilder$4.class +INFO: Loading Class: akka/japi/pf/FSMStateFunctionBuilder.class +INFO: Loading Class: akka/japi/pf/FSMStopBuilder$1.class +INFO: Loading Class: akka/japi/pf/FSMStopBuilder$2.class +INFO: Loading Class: akka/japi/pf/FSMStopBuilder$3.class +INFO: Loading Class: akka/japi/pf/FSMStopBuilder$4.class +INFO: Loading Class: akka/japi/pf/FSMStopBuilder$5.class +INFO: Loading Class: akka/japi/pf/FSMStopBuilder.class +INFO: Loading Class: akka/japi/pf/FSMTransitionHandlerBuilder$1.class +INFO: Loading Class: akka/japi/pf/FSMTransitionHandlerBuilder$2.class +INFO: Loading Class: akka/japi/pf/FSMTransitionHandlerBuilder$3.class +INFO: Loading Class: akka/japi/pf/FSMTransitionHandlerBuilder$4.class +INFO: Loading Class: akka/japi/pf/FSMTransitionHandlerBuilder.class +INFO: Loading Class: akka/japi/pf/Match.class +INFO: Loading Class: akka/japi/pf/PFBuilder$1.class +INFO: Loading Class: akka/japi/pf/PFBuilder$2.class +INFO: Loading Class: akka/japi/pf/PFBuilder$3.class +INFO: Loading Class: akka/japi/pf/PFBuilder$4.class +INFO: Loading Class: akka/japi/pf/PFBuilder.class +INFO: Loading Class: akka/japi/pf/ReceiveBuilder.class +INFO: Loading Class: akka/japi/pf/UnitCaseStatement.class +INFO: Loading Class: akka/japi/pf/UnitMatch.class +INFO: Loading Class: akka/japi/pf/UnitPFBuilder$1.class +INFO: Loading Class: akka/japi/pf/UnitPFBuilder$2.class +INFO: Loading Class: akka/japi/pf/UnitPFBuilder$3.class +INFO: Loading Class: akka/japi/pf/UnitPFBuilder$4.class +INFO: Loading Class: akka/japi/pf/UnitPFBuilder$5.class +INFO: Loading Class: akka/japi/pf/UnitPFBuilder.class +INFO: Loading Class: akka/pattern/AbstractCircuitBreaker.class +INFO: Loading Class: akka/pattern/AbstractPromiseActorRef.class +INFO: Loading Class: akka/pattern/AskSupport$class.class +INFO: Loading Class: akka/pattern/AskSupport.class +INFO: Loading Class: akka/pattern/AskTimeoutException.class +INFO: Loading Class: akka/pattern/AskableActorRef$.class +INFO: Loading Class: akka/pattern/AskableActorRef.class +INFO: Loading Class: akka/pattern/AskableActorSelection$.class +INFO: Loading Class: akka/pattern/AskableActorSelection.class +INFO: Loading Class: akka/pattern/CircuitBreaker$$anon$1.class +INFO: Loading Class: akka/pattern/CircuitBreaker$$anon$2.class +INFO: Loading Class: akka/pattern/CircuitBreaker$$anon$3.class +INFO: Loading Class: akka/pattern/CircuitBreaker$$anonfun$callWithCircuitBreaker$1.class +INFO: Loading Class: akka/pattern/CircuitBreaker$$anonfun$callWithSyncCircuitBreaker$1.class +INFO: Loading Class: akka/pattern/CircuitBreaker$$anonfun$withSyncCircuitBreaker$1.class +INFO: Loading Class: akka/pattern/CircuitBreaker$.class +INFO: Loading Class: akka/pattern/CircuitBreaker$Closed$.class +INFO: Loading Class: akka/pattern/CircuitBreaker$HalfOpen$.class +INFO: Loading Class: akka/pattern/CircuitBreaker$Open$$anonfun$_enter$1.class +INFO: Loading Class: akka/pattern/CircuitBreaker$Open$.class +INFO: Loading Class: akka/pattern/CircuitBreaker$State$$anonfun$callThrough$1.class +INFO: Loading Class: akka/pattern/CircuitBreaker$State$class.class +INFO: Loading Class: akka/pattern/CircuitBreaker$State.class +INFO: Loading Class: akka/pattern/CircuitBreaker.class +INFO: Loading Class: akka/pattern/CircuitBreakerOpenException$.class +INFO: Loading Class: akka/pattern/CircuitBreakerOpenException.class +INFO: Loading Class: akka/pattern/FutureTimeoutSupport$$anonfun$after$1.class +INFO: Loading Class: akka/pattern/FutureTimeoutSupport$class.class +INFO: Loading Class: akka/pattern/FutureTimeoutSupport.class +INFO: Loading Class: akka/pattern/GracefulStopSupport$$anonfun$gracefulStop$1.class +INFO: Loading Class: akka/pattern/GracefulStopSupport$$anonfun$gracefulStop$2.class +INFO: Loading Class: akka/pattern/GracefulStopSupport$class.class +INFO: Loading Class: akka/pattern/GracefulStopSupport.class +INFO: Loading Class: akka/pattern/Patterns$$anonfun$after$1.class +INFO: Loading Class: akka/pattern/Patterns$$anonfun$after$2.class +INFO: Loading Class: akka/pattern/Patterns$.class +INFO: Loading Class: akka/pattern/Patterns.class +INFO: Loading Class: akka/pattern/PipeToSupport$PipeableFuture$$anonfun$pipeTo$1.class +INFO: Loading Class: akka/pattern/PipeToSupport$PipeableFuture$$anonfun$pipeToSelection$1.class +INFO: Loading Class: akka/pattern/PipeToSupport$PipeableFuture.class +INFO: Loading Class: akka/pattern/PipeToSupport$class.class +INFO: Loading Class: akka/pattern/PipeToSupport.class +INFO: Loading Class: akka/pattern/PromiseActorRef$$anonfun$1.class +INFO: Loading Class: akka/pattern/PromiseActorRef$$anonfun$apply$1.class +INFO: Loading Class: akka/pattern/PromiseActorRef$$anonfun$ensureCompleted$1$1.class +INFO: Loading Class: akka/pattern/PromiseActorRef$.class +INFO: Loading Class: akka/pattern/PromiseActorRef$Registering$.class +INFO: Loading Class: akka/pattern/PromiseActorRef$Stopped$.class +INFO: Loading Class: akka/pattern/PromiseActorRef$StoppedWithPath$.class +INFO: Loading Class: akka/pattern/PromiseActorRef$StoppedWithPath.class +INFO: Loading Class: akka/pattern/PromiseActorRef.class +INFO: Loading Class: akka/pattern/package$.class +INFO: Loading Class: akka/pattern/package.class +INFO: Loading Class: akka/routing/ActorRefRoutee$.class +INFO: Loading Class: akka/routing/ActorRefRoutee.class +INFO: Loading Class: akka/routing/ActorSelectionRoutee$.class +INFO: Loading Class: akka/routing/ActorSelectionRoutee.class +INFO: Loading Class: akka/routing/AddRoutee$.class +INFO: Loading Class: akka/routing/AddRoutee.class +INFO: Loading Class: akka/routing/AdjustPoolSize$.class +INFO: Loading Class: akka/routing/AdjustPoolSize.class +INFO: Loading Class: akka/routing/BalancingPool$.class +INFO: Loading Class: akka/routing/BalancingPool.class +INFO: Loading Class: akka/routing/BalancingRoutingLogic$.class +INFO: Loading Class: akka/routing/BalancingRoutingLogic.class +INFO: Loading Class: akka/routing/Broadcast$.class +INFO: Loading Class: akka/routing/Broadcast.class +INFO: Loading Class: akka/routing/BroadcastGroup$.class +INFO: Loading Class: akka/routing/BroadcastGroup.class +INFO: Loading Class: akka/routing/BroadcastPool$.class +INFO: Loading Class: akka/routing/BroadcastPool.class +INFO: Loading Class: akka/routing/BroadcastRouter$$anonfun$4.class +INFO: Loading Class: akka/routing/BroadcastRouter$.class +INFO: Loading Class: akka/routing/BroadcastRouter.class +INFO: Loading Class: akka/routing/BroadcastRoutingLogic$.class +INFO: Loading Class: akka/routing/BroadcastRoutingLogic.class +INFO: Loading Class: akka/routing/CollectRouteeRefs$$anonfun$3.class +INFO: Loading Class: akka/routing/CollectRouteeRefs$$anonfun$receive$3$$anonfun$applyOrElse$2.class +INFO: Loading Class: akka/routing/CollectRouteeRefs$$anonfun$receive$3.class +INFO: Loading Class: akka/routing/CollectRouteeRefs.class +INFO: Loading Class: akka/routing/ConsistentActorRef$.class +INFO: Loading Class: akka/routing/ConsistentActorRef.class +INFO: Loading Class: akka/routing/ConsistentHash$$anonfun$$colon$minus$1.class +INFO: Loading Class: akka/routing/ConsistentHash$$anonfun$$colon$plus$1.class +INFO: Loading Class: akka/routing/ConsistentHash$$anonfun$apply$1.class +INFO: Loading Class: akka/routing/ConsistentHash$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: akka/routing/ConsistentHash$$anonfun$apply$2.class +INFO: Loading Class: akka/routing/ConsistentHash$.class +INFO: Loading Class: akka/routing/ConsistentHash.class +INFO: Loading Class: akka/routing/ConsistentHashingGroup$.class +INFO: Loading Class: akka/routing/ConsistentHashingGroup.class +INFO: Loading Class: akka/routing/ConsistentHashingPool$.class +INFO: Loading Class: akka/routing/ConsistentHashingPool.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$$anonfun$1.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$$anonfun$hashMappingAdapter$1.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$ConsistentHashMapper.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$ConsistentHashable.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$ConsistentHashableEnvelope$.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$ConsistentHashableEnvelope.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter$emptyConsistentHashMapping$.class +INFO: Loading Class: akka/routing/ConsistentHashingRouter.class +INFO: Loading Class: akka/routing/ConsistentHashingRoutingLogic$$anonfun$2.class +INFO: Loading Class: akka/routing/ConsistentHashingRoutingLogic$.class +INFO: Loading Class: akka/routing/ConsistentHashingRoutingLogic.class +INFO: Loading Class: akka/routing/ConsistentRoutee$.class +INFO: Loading Class: akka/routing/ConsistentRoutee.class +INFO: Loading Class: akka/routing/CurrentRoutees$.class +INFO: Loading Class: akka/routing/CurrentRoutees.class +INFO: Loading Class: akka/routing/CustomRouterConfig.class +INFO: Loading Class: akka/routing/Deafen$.class +INFO: Loading Class: akka/routing/Deafen.class +INFO: Loading Class: akka/routing/DefaultResizer$$anonfun$pressure$1.class +INFO: Loading Class: akka/routing/DefaultResizer$.class +INFO: Loading Class: akka/routing/DefaultResizer.class +INFO: Loading Class: akka/routing/DeprecatedRouterConfig.class +INFO: Loading Class: akka/routing/FromConfig$.class +INFO: Loading Class: akka/routing/FromConfig.class +INFO: Loading Class: akka/routing/GetRoutees$.class +INFO: Loading Class: akka/routing/GetRoutees.class +INFO: Loading Class: akka/routing/Group$class.class +INFO: Loading Class: akka/routing/Group.class +INFO: Loading Class: akka/routing/GroupBase.class +INFO: Loading Class: akka/routing/Listen$.class +INFO: Loading Class: akka/routing/Listen.class +INFO: Loading Class: akka/routing/ListenerMessage.class +INFO: Loading Class: akka/routing/Listeners$$anonfun$listenerManagement$1.class +INFO: Loading Class: akka/routing/Listeners$class.class +INFO: Loading Class: akka/routing/Listeners.class +INFO: Loading Class: akka/routing/MurmurHash$$anonfun$1.class +INFO: Loading Class: akka/routing/MurmurHash$$anonfun$2.class +INFO: Loading Class: akka/routing/MurmurHash$$anonfun$symmetricHash$1.class +INFO: Loading Class: akka/routing/MurmurHash$.class +INFO: Loading Class: akka/routing/MurmurHash.class +INFO: Loading Class: akka/routing/NoRoutee$.class +INFO: Loading Class: akka/routing/NoRoutee.class +INFO: Loading Class: akka/routing/NoRouter$.class +INFO: Loading Class: akka/routing/NoRouter.class +INFO: Loading Class: akka/routing/Pool$$anonfun$1.class +INFO: Loading Class: akka/routing/Pool$.class +INFO: Loading Class: akka/routing/Pool$class.class +INFO: Loading Class: akka/routing/Pool.class +INFO: Loading Class: akka/routing/PoolBase.class +INFO: Loading Class: akka/routing/PoolOverrideUnsetConfig$class.class +INFO: Loading Class: akka/routing/PoolOverrideUnsetConfig.class +INFO: Loading Class: akka/routing/RandomGroup$.class +INFO: Loading Class: akka/routing/RandomGroup.class +INFO: Loading Class: akka/routing/RandomPool$.class +INFO: Loading Class: akka/routing/RandomPool.class +INFO: Loading Class: akka/routing/RandomRouter$$anonfun$2.class +INFO: Loading Class: akka/routing/RandomRouter$.class +INFO: Loading Class: akka/routing/RandomRouter.class +INFO: Loading Class: akka/routing/RandomRoutingLogic$.class +INFO: Loading Class: akka/routing/RandomRoutingLogic.class +INFO: Loading Class: akka/routing/RemoveRoutee$.class +INFO: Loading Class: akka/routing/RemoveRoutee.class +INFO: Loading Class: akka/routing/ResizablePoolActor$$anonfun$receive$1.class +INFO: Loading Class: akka/routing/ResizablePoolActor$.class +INFO: Loading Class: akka/routing/ResizablePoolActor$Resize$.class +INFO: Loading Class: akka/routing/ResizablePoolActor.class +INFO: Loading Class: akka/routing/ResizablePoolCell$$anonfun$1.class +INFO: Loading Class: akka/routing/ResizablePoolCell$$anonfun$2.class +INFO: Loading Class: akka/routing/ResizablePoolCell.class +INFO: Loading Class: akka/routing/Resizer.class +INFO: Loading Class: akka/routing/RoundRobinGroup$.class +INFO: Loading Class: akka/routing/RoundRobinGroup.class +INFO: Loading Class: akka/routing/RoundRobinPool$.class +INFO: Loading Class: akka/routing/RoundRobinPool.class +INFO: Loading Class: akka/routing/RoundRobinRouter$$anonfun$1.class +INFO: Loading Class: akka/routing/RoundRobinRouter$.class +INFO: Loading Class: akka/routing/RoundRobinRouter.class +INFO: Loading Class: akka/routing/RoundRobinRoutingLogic$.class +INFO: Loading Class: akka/routing/RoundRobinRoutingLogic.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$1.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$addRoutees$1.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$removeRoutees$1.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$start$1.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$start$2.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$start$3.class +INFO: Loading Class: akka/routing/RoutedActorCell$$anonfun$start$4.class +INFO: Loading Class: akka/routing/RoutedActorCell$.class +INFO: Loading Class: akka/routing/RoutedActorCell$RouterActorCreator.class +INFO: Loading Class: akka/routing/RoutedActorCell.class +INFO: Loading Class: akka/routing/RoutedActorRef.class +INFO: Loading Class: akka/routing/Routee.class +INFO: Loading Class: akka/routing/Routees$.class +INFO: Loading Class: akka/routing/Routees.class +INFO: Loading Class: akka/routing/Router$$anonfun$1.class +INFO: Loading Class: akka/routing/Router$.class +INFO: Loading Class: akka/routing/Router.class +INFO: Loading Class: akka/routing/RouterActor$$anonfun$2.class +INFO: Loading Class: akka/routing/RouterActor$$anonfun$receive$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: akka/routing/RouterActor$$anonfun$receive$1.class +INFO: Loading Class: akka/routing/RouterActor.class +INFO: Loading Class: akka/routing/RouterConfig$class.class +INFO: Loading Class: akka/routing/RouterConfig.class +INFO: Loading Class: akka/routing/RouterEnvelope.class +INFO: Loading Class: akka/routing/RouterManagementMesssage.class +INFO: Loading Class: akka/routing/RouterPoolActor$$anonfun$receive$2$$anonfun$4.class +INFO: Loading Class: akka/routing/RouterPoolActor$$anonfun$receive$2.class +INFO: Loading Class: akka/routing/RouterPoolActor.class +INFO: Loading Class: akka/routing/RouterRoutees$.class +INFO: Loading Class: akka/routing/RouterRoutees.class +INFO: Loading Class: akka/routing/RoutingLogic.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedGroup$.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedGroup.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedPool$.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedPool.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRoutees$$anonfun$send$1.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRoutees$.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRoutees.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRouter$$anonfun$5.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRouter$.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRouter.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRoutingLogic$.class +INFO: Loading Class: akka/routing/ScatterGatherFirstCompletedRoutingLogic.class +INFO: Loading Class: akka/routing/SeveralRoutees$$anonfun$send$1.class +INFO: Loading Class: akka/routing/SeveralRoutees$.class +INFO: Loading Class: akka/routing/SeveralRoutees.class +INFO: Loading Class: akka/routing/SmallestMailboxPool$.class +INFO: Loading Class: akka/routing/SmallestMailboxPool.class +INFO: Loading Class: akka/routing/SmallestMailboxRouter$$anonfun$3.class +INFO: Loading Class: akka/routing/SmallestMailboxRouter$.class +INFO: Loading Class: akka/routing/SmallestMailboxRouter.class +INFO: Loading Class: akka/routing/SmallestMailboxRoutingLogic$.class +INFO: Loading Class: akka/routing/SmallestMailboxRoutingLogic.class +INFO: Loading Class: akka/routing/WithListeners$.class +INFO: Loading Class: akka/routing/WithListeners.class +INFO: Loading Class: akka/serialization/ByteArraySerializer.class +INFO: Loading Class: akka/serialization/JSerializer.class +INFO: Loading Class: akka/serialization/JavaSerializer$$anonfun$1.class +INFO: Loading Class: akka/serialization/JavaSerializer$$anonfun$toBinary$1.class +INFO: Loading Class: akka/serialization/JavaSerializer$.class +INFO: Loading Class: akka/serialization/JavaSerializer$CurrentSystem$$anonfun$withValue$1.class +INFO: Loading Class: akka/serialization/JavaSerializer$CurrentSystem.class +INFO: Loading Class: akka/serialization/JavaSerializer.class +INFO: Loading Class: akka/serialization/NullSerializer$.class +INFO: Loading Class: akka/serialization/NullSerializer.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$2.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$3.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$4.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$5.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$6.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$8.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$9.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$deserialize$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$deserialize$2.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$serialize$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$serializedActorPath$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$serializerOf$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$sort$1$$anonfun$7.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$sort$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$unique$1$1.class +INFO: Loading Class: akka/serialization/Serialization$$anonfun$unique$1$2.class +INFO: Loading Class: akka/serialization/Serialization$.class +INFO: Loading Class: akka/serialization/Serialization$Information$.class +INFO: Loading Class: akka/serialization/Serialization$Information.class +INFO: Loading Class: akka/serialization/Serialization$Settings$$anonfun$configToMap$1.class +INFO: Loading Class: akka/serialization/Serialization$Settings.class +INFO: Loading Class: akka/serialization/Serialization.class +INFO: Loading Class: akka/serialization/SerializationExtension$.class +INFO: Loading Class: akka/serialization/SerializationExtension.class +INFO: Loading Class: akka/serialization/Serializer$class.class +INFO: Loading Class: akka/serialization/Serializer.class +INFO: Loading Class: akka/util/BoundedBlockingQueue$$anon$1.class +INFO: Loading Class: akka/util/BoundedBlockingQueue.class +INFO: Loading Class: akka/util/BoxedType$.class +INFO: Loading Class: akka/util/BoxedType.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mBc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mCc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mDc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mFc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mIc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mJc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mSc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mVc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$foldLeft$mZc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$getLongPart$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$getLongPart$2.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$indexOf$1.class +INFO: Loading Class: akka/util/ByteIterator$$anonfun$indexOf$2.class +INFO: Loading Class: akka/util/ByteIterator$.class +INFO: Loading Class: akka/util/ByteIterator$ByteArrayIterator$$anon$1.class +INFO: Loading Class: akka/util/ByteIterator$ByteArrayIterator$.class +INFO: Loading Class: akka/util/ByteIterator$ByteArrayIterator.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anon$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$3.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mBc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mCc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mDc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mFc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mIc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mJc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mSc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mVc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$foreach$mZc$sp$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getBytes$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getBytes$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getDoubles$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getDoubles$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getFloats$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getFloats$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getInts$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getInts$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getLongs$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getLongs$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getShorts$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$getShorts$2.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$$anonfun$len$1.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator$.class +INFO: Loading Class: akka/util/ByteIterator$MultiByteArrayIterator.class +INFO: Loading Class: akka/util/ByteIterator.class +INFO: Loading Class: akka/util/ByteString$$anon$2.class +INFO: Loading Class: akka/util/ByteString$$anonfun$mapI$1.class +INFO: Loading Class: akka/util/ByteString$.class +INFO: Loading Class: akka/util/ByteString$ByteString1$.class +INFO: Loading Class: akka/util/ByteString$ByteString1.class +INFO: Loading Class: akka/util/ByteString$ByteString1C$.class +INFO: Loading Class: akka/util/ByteString$ByteString1C.class +INFO: Loading Class: akka/util/ByteString$ByteStrings$$anonfun$apply$3.class +INFO: Loading Class: akka/util/ByteString$ByteStrings$$anonfun$asByteBuffers$1.class +INFO: Loading Class: akka/util/ByteString$ByteStrings$$anonfun$compact$1.class +INFO: Loading Class: akka/util/ByteString$ByteStrings$$anonfun$iterator$1.class +INFO: Loading Class: akka/util/ByteString$ByteStrings$.class +INFO: Loading Class: akka/util/ByteString$ByteStrings.class +INFO: Loading Class: akka/util/ByteString.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anon$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$fillByteBuffer$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putBytes$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putDoubles$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putFloats$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putInt$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putInts$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putLong$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putLongPart$1$$anonfun$apply$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putLongPart$1$$anonfun$apply$2.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putLongPart$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putLongs$1.class +INFO: Loading Class: akka/util/ByteStringBuilder$$anonfun$putShorts$1.class +INFO: Loading Class: akka/util/ByteStringBuilder.class +INFO: Loading Class: akka/util/ClassLoaderObjectInputStream.class +INFO: Loading Class: akka/util/Collections$.class +INFO: Loading Class: akka/util/Collections$EmptyImmutableSeq$.class +INFO: Loading Class: akka/util/Collections$PartialImmutableValuesIterable$$anon$1.class +INFO: Loading Class: akka/util/Collections$PartialImmutableValuesIterable.class +INFO: Loading Class: akka/util/Collections.class +INFO: Loading Class: akka/util/CompactByteString$$anonfun$apply$4.class +INFO: Loading Class: akka/util/CompactByteString$.class +INFO: Loading Class: akka/util/CompactByteString.class +INFO: Loading Class: akka/util/ConcurrentMultiMap.class +INFO: Loading Class: akka/util/Crypt$$anonfun$1.class +INFO: Loading Class: akka/util/Crypt$$anonfun$hexify$1.class +INFO: Loading Class: akka/util/Crypt$.class +INFO: Loading Class: akka/util/Crypt.class +INFO: Loading Class: akka/util/HashCode$$anonfun$hash$1.class +INFO: Loading Class: akka/util/HashCode$.class +INFO: Loading Class: akka/util/HashCode.class +INFO: Loading Class: akka/util/Helpers$$anon$1.class +INFO: Loading Class: akka/util/Helpers$.class +INFO: Loading Class: akka/util/Helpers$ConfigOps$.class +INFO: Loading Class: akka/util/Helpers$ConfigOps.class +INFO: Loading Class: akka/util/Helpers$Requiring$.class +INFO: Loading Class: akka/util/Helpers$Requiring.class +INFO: Loading Class: akka/util/Helpers.class +INFO: Loading Class: akka/util/Index$$anon$1.class +INFO: Loading Class: akka/util/Index$$anonfun$foreach$1$$anonfun$apply$1.class +INFO: Loading Class: akka/util/Index$$anonfun$foreach$1.class +INFO: Loading Class: akka/util/Index$$anonfun$values$1$$anonfun$apply$2.class +INFO: Loading Class: akka/util/Index$$anonfun$values$1.class +INFO: Loading Class: akka/util/Index.class +INFO: Loading Class: akka/util/ReentrantGuard.class +INFO: Loading Class: akka/util/Reflect$$anonfun$1.class +INFO: Loading Class: akka/util/Reflect$$anonfun$2.class +INFO: Loading Class: akka/util/Reflect$$anonfun$3.class +INFO: Loading Class: akka/util/Reflect$$anonfun$4.class +INFO: Loading Class: akka/util/Reflect$$anonfun$5.class +INFO: Loading Class: akka/util/Reflect$$anonfun$6$$anonfun$apply$1.class +INFO: Loading Class: akka/util/Reflect$$anonfun$6.class +INFO: Loading Class: akka/util/Reflect$$anonfun$instantiator$1.class +INFO: Loading Class: akka/util/Reflect$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: akka/util/Reflect$.class +INFO: Loading Class: akka/util/Reflect.class +INFO: Loading Class: akka/util/SerializedSuspendableExecutionContext$$anonfun$1.class +INFO: Loading Class: akka/util/SerializedSuspendableExecutionContext$.class +INFO: Loading Class: akka/util/SerializedSuspendableExecutionContext.class +INFO: Loading Class: akka/util/Subclassification.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$3.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$4.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$5.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$6.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$innerFindSubKeys$1$$anonfun$apply$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$innerFindSubKeys$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$innerFindValues$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$integrate$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$integrate$2.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$mergeChangesByKey$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$removeValue$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$$anonfun$removeValue$2.class +INFO: Loading Class: akka/util/SubclassifiedIndex$.class +INFO: Loading Class: akka/util/SubclassifiedIndex$Nonroot$$anonfun$1.class +INFO: Loading Class: akka/util/SubclassifiedIndex$Nonroot$$anonfun$2.class +INFO: Loading Class: akka/util/SubclassifiedIndex$Nonroot.class +INFO: Loading Class: akka/util/SubclassifiedIndex.class +INFO: Loading Class: akka/util/Switch$.class +INFO: Loading Class: akka/util/Switch.class +INFO: Loading Class: akka/util/Timeout$.class +INFO: Loading Class: akka/util/Timeout.class +INFO: Loading Class: akka/util/Unsafe.class +INFO: Loading Class: akka/util/WildcardTree$$anonfun$1.class +INFO: Loading Class: akka/util/WildcardTree$$anonfun$2.class +INFO: Loading Class: akka/util/WildcardTree$.class +INFO: Loading Class: akka/util/WildcardTree.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.typesafe/config/1.2.1/f771f71fdae3df231bcd54d5ca2d57f0bf93f467/config-1.2.1.jar +INFO: Loading Class: com/typesafe/config/Config.class +INFO: Loading Class: com/typesafe/config/ConfigException$BadPath.class +INFO: Loading Class: com/typesafe/config/ConfigException$BadValue.class +INFO: Loading Class: com/typesafe/config/ConfigException$BugOrBroken.class +INFO: Loading Class: com/typesafe/config/ConfigException$Generic.class +INFO: Loading Class: com/typesafe/config/ConfigException$IO.class +INFO: Loading Class: com/typesafe/config/ConfigException$Missing.class +INFO: Loading Class: com/typesafe/config/ConfigException$NotResolved.class +INFO: Loading Class: com/typesafe/config/ConfigException$Null.class +INFO: Loading Class: com/typesafe/config/ConfigException$Parse.class +INFO: Loading Class: com/typesafe/config/ConfigException$UnresolvedSubstitution.class +INFO: Loading Class: com/typesafe/config/ConfigException$ValidationFailed.class +INFO: Loading Class: com/typesafe/config/ConfigException$ValidationProblem.class +INFO: Loading Class: com/typesafe/config/ConfigException$WrongType.class +INFO: Loading Class: com/typesafe/config/ConfigException.class +INFO: Loading Class: com/typesafe/config/ConfigFactory$1.class +INFO: Loading Class: com/typesafe/config/ConfigFactory.class +INFO: Loading Class: com/typesafe/config/ConfigIncludeContext.class +INFO: Loading Class: com/typesafe/config/ConfigIncluder.class +INFO: Loading Class: com/typesafe/config/ConfigIncluderClasspath.class +INFO: Loading Class: com/typesafe/config/ConfigIncluderFile.class +INFO: Loading Class: com/typesafe/config/ConfigIncluderURL.class +INFO: Loading Class: com/typesafe/config/ConfigList.class +INFO: Loading Class: com/typesafe/config/ConfigMergeable.class +INFO: Loading Class: com/typesafe/config/ConfigObject.class +INFO: Loading Class: com/typesafe/config/ConfigOrigin.class +INFO: Loading Class: com/typesafe/config/ConfigParseOptions.class +INFO: Loading Class: com/typesafe/config/ConfigParseable.class +INFO: Loading Class: com/typesafe/config/ConfigRenderOptions.class +INFO: Loading Class: com/typesafe/config/ConfigResolveOptions.class +INFO: Loading Class: com/typesafe/config/ConfigSyntax.class +INFO: Loading Class: com/typesafe/config/ConfigUtil.class +INFO: Loading Class: com/typesafe/config/ConfigValue.class +INFO: Loading Class: com/typesafe/config/ConfigValueFactory.class +INFO: Loading Class: com/typesafe/config/ConfigValueType.class +INFO: Loading Class: com/typesafe/config/impl/AbstractConfigObject.class +INFO: Loading Class: com/typesafe/config/impl/AbstractConfigValue$Modifier.class +INFO: Loading Class: com/typesafe/config/impl/AbstractConfigValue$NoExceptionsModifier.class +INFO: Loading Class: com/typesafe/config/impl/AbstractConfigValue$NotPossibleToResolve.class +INFO: Loading Class: com/typesafe/config/impl/AbstractConfigValue.class +INFO: Loading Class: com/typesafe/config/impl/ConfigBoolean.class +INFO: Loading Class: com/typesafe/config/impl/ConfigConcatenation.class +INFO: Loading Class: com/typesafe/config/impl/ConfigDelayedMerge$1.class +INFO: Loading Class: com/typesafe/config/impl/ConfigDelayedMerge.class +INFO: Loading Class: com/typesafe/config/impl/ConfigDelayedMergeObject$1.class +INFO: Loading Class: com/typesafe/config/impl/ConfigDelayedMergeObject.class +INFO: Loading Class: com/typesafe/config/impl/ConfigDouble.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$1.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$ClasspathNameSource.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$ClasspathNameSourceWithClass.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$DebugHolder.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$DefaultIncluderHolder.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$EnvVariablesHolder.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$FileNameSource.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$LoaderCache.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$LoaderCacheHolder.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl$SystemPropertiesHolder.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImpl.class +INFO: Loading Class: com/typesafe/config/impl/ConfigImplUtil.class +INFO: Loading Class: com/typesafe/config/impl/ConfigInt.class +INFO: Loading Class: com/typesafe/config/impl/ConfigLong.class +INFO: Loading Class: com/typesafe/config/impl/ConfigNull.class +INFO: Loading Class: com/typesafe/config/impl/ConfigNumber.class +INFO: Loading Class: com/typesafe/config/impl/ConfigReference.class +INFO: Loading Class: com/typesafe/config/impl/ConfigString.class +INFO: Loading Class: com/typesafe/config/impl/DefaultTransformer$1.class +INFO: Loading Class: com/typesafe/config/impl/DefaultTransformer$2.class +INFO: Loading Class: com/typesafe/config/impl/DefaultTransformer.class +INFO: Loading Class: com/typesafe/config/impl/FromMapMode.class +INFO: Loading Class: com/typesafe/config/impl/FullIncluder.class +INFO: Loading Class: com/typesafe/config/impl/MemoKey.class +INFO: Loading Class: com/typesafe/config/impl/MergeableValue.class +INFO: Loading Class: com/typesafe/config/impl/OriginType.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$1.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$2.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableFile.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableNotFound.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableProperties.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableReader.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableResources.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableString.class +INFO: Loading Class: com/typesafe/config/impl/Parseable$ParseableURL.class +INFO: Loading Class: com/typesafe/config/impl/Parseable.class +INFO: Loading Class: com/typesafe/config/impl/Parser$Element.class +INFO: Loading Class: com/typesafe/config/impl/Parser$ParseContext.class +INFO: Loading Class: com/typesafe/config/impl/Parser$TokenWithComments.class +INFO: Loading Class: com/typesafe/config/impl/Parser.class +INFO: Loading Class: com/typesafe/config/impl/Path.class +INFO: Loading Class: com/typesafe/config/impl/PathBuilder.class +INFO: Loading Class: com/typesafe/config/impl/PropertiesParser$1.class +INFO: Loading Class: com/typesafe/config/impl/PropertiesParser.class +INFO: Loading Class: com/typesafe/config/impl/ReplaceableMergeStack.class +INFO: Loading Class: com/typesafe/config/impl/ResolveContext.class +INFO: Loading Class: com/typesafe/config/impl/ResolveMemos.class +INFO: Loading Class: com/typesafe/config/impl/ResolveReplacer$1.class +INFO: Loading Class: com/typesafe/config/impl/ResolveReplacer.class +INFO: Loading Class: com/typesafe/config/impl/ResolveSource.class +INFO: Loading Class: com/typesafe/config/impl/ResolveStatus.class +INFO: Loading Class: com/typesafe/config/impl/SerializedConfigValue$1.class +INFO: Loading Class: com/typesafe/config/impl/SerializedConfigValue$FieldOut.class +INFO: Loading Class: com/typesafe/config/impl/SerializedConfigValue$SerializedField.class +INFO: Loading Class: com/typesafe/config/impl/SerializedConfigValue$SerializedValueType.class +INFO: Loading Class: com/typesafe/config/impl/SerializedConfigValue.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfig$MemoryUnit.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfig.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigList$1.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigList$2.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigList$3.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigList$4.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigList.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigObject$1.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigObject$2.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigObject.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigOrigin$1.class +INFO: Loading Class: com/typesafe/config/impl/SimpleConfigOrigin.class +INFO: Loading Class: com/typesafe/config/impl/SimpleIncludeContext.class +INFO: Loading Class: com/typesafe/config/impl/SimpleIncluder$NameSource.class +INFO: Loading Class: com/typesafe/config/impl/SimpleIncluder$Proxy.class +INFO: Loading Class: com/typesafe/config/impl/SimpleIncluder$RelativeNameSource.class +INFO: Loading Class: com/typesafe/config/impl/SimpleIncluder.class +INFO: Loading Class: com/typesafe/config/impl/SubstitutionExpression.class +INFO: Loading Class: com/typesafe/config/impl/Token.class +INFO: Loading Class: com/typesafe/config/impl/TokenType.class +INFO: Loading Class: com/typesafe/config/impl/Tokenizer$ProblemException.class +INFO: Loading Class: com/typesafe/config/impl/Tokenizer$TokenIterator$WhitespaceSaver.class +INFO: Loading Class: com/typesafe/config/impl/Tokenizer$TokenIterator.class +INFO: Loading Class: com/typesafe/config/impl/Tokenizer.class +INFO: Loading Class: com/typesafe/config/impl/Tokens$Comment.class +INFO: Loading Class: com/typesafe/config/impl/Tokens$Line.class +INFO: Loading Class: com/typesafe/config/impl/Tokens$Problem.class +INFO: Loading Class: com/typesafe/config/impl/Tokens$Substitution.class +INFO: Loading Class: com/typesafe/config/impl/Tokens$UnquotedText.class +INFO: Loading Class: com/typesafe/config/impl/Tokens$Value.class +INFO: Loading Class: com/typesafe/config/impl/Tokens.class +INFO: Loading Class: com/typesafe/config/impl/Unmergeable.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-actors-migration_2.11/1.1.0/dfa8bc42b181d5b9f1a5dd147f8ae308b893eb6f/scala-actors-migration_2.11-1.1.0.jar +INFO: Loading Class: scala/actors/migration/pattern$.class +INFO: Loading Class: scala/actors/migration/ActWithStash$ActorContext.class +INFO: Loading Class: scala/actors/migration/package$$anon$1.class +INFO: Loading Class: scala/actors/migration/ActWithStash$class.class +INFO: Loading Class: scala/actors/migration/InternalActorRef.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anonfun$1$$anon$1.class +INFO: Loading Class: scala/actors/migration/Terminated.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anonfun$1$$anon$1$$anonfun$receive$1.class +INFO: Loading Class: scala/actors/migration/Timeout.class +INFO: Loading Class: scala/actors/migration/InternalActorRef$$anonfun$$qmark$1$$anonfun$1.class +INFO: Loading Class: scala/actors/migration/ReactorRef.class +INFO: Loading Class: scala/actors/migration/ActorDSL$$anonfun$actor$1.class +INFO: Loading Class: scala/actors/migration/package$$anon$2$$anonfun$$qmark$1.class +INFO: Loading Class: scala/actors/migration/ActWithStash$.class +INFO: Loading Class: scala/actors/migration/package$$anon$2$$anonfun$$qmark$1$$anonfun$1.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anonfun$1.class +INFO: Loading Class: scala/actors/migration/InternalActorRef$$anonfun$$qmark$1.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anonfun$internalAct$1.class +INFO: Loading Class: scala/actors/migration/package$.class +INFO: Loading Class: scala/actors/migration/package$$anon$2.class +INFO: Loading Class: scala/actors/migration/ActorDSL$.class +INFO: Loading Class: scala/actors/migration/ActWithStash$ActorContext$$anonfun$receiveTimeout$1.class +INFO: Loading Class: scala/actors/migration/DeathPactException.class +INFO: Loading Class: scala/actors/migration/ActWithStash.class +INFO: Loading Class: scala/actors/migration/package.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anon$2.class +INFO: Loading Class: scala/actors/migration/ActorDSL$$anon$1.class +INFO: Loading Class: scala/actors/migration/Terminated$.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anon$3.class +INFO: Loading Class: scala/actors/migration/ActWithStash$$anonfun$wrapWithSystemMessageHandling$1.class +INFO: Loading Class: scala/actors/migration/AskableActorRef.class +INFO: Loading Class: scala/actors/migration/OutputChannelRef.class +INFO: Loading Class: scala/actors/migration/DeathPactException$.class +INFO: Loading Class: scala/actors/migration/ActorDSL.class +INFO: Loading Class: scala/actors/migration/pattern.class +INFO: Loading Class: scala/actors/migration/Timeout$.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-compiler/2.11.1/56ea2e6c025e0821f28d73ca271218b8dd04926a/scala-compiler-2.11.1.jar +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler$$anonfun$resolveMacroImpl$1.class +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler$MacroImplRefCompiler$.class +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler$MacroImplRefCompiler.class +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler$MacroImplResolutionException$.class +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler$MacroImplResolutionException.class +INFO: Loading Class: scala/reflect/macros/compiler/DefaultMacroCompiler.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$$anonfun$2.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$$anonfun$3.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$$anonfun$4.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$$anonfun$scala$reflect$macros$compiler$Errors$Error$$abbreviateCoreAliases$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error$class.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$Error.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors$class.class +INFO: Loading Class: scala/reflect/macros/compiler/Errors.class +INFO: Loading Class: scala/reflect/macros/compiler/Resolvers$Resolver$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Resolvers$Resolver$$anonfun$looksCredible$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Resolvers$Resolver$class.class +INFO: Loading Class: scala/reflect/macros/compiler/Resolvers$Resolver.class +INFO: Loading Class: scala/reflect/macros/compiler/Resolvers$class.class +INFO: Loading Class: scala/reflect/macros/compiler/Resolvers.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$11.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$2.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$3.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$4.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$5.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$6.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$7.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$checkMacroDefMacroImplCorrespondence$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$checkMacroDefMacroImplCorrespondence$2.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$scala$reflect$macros$compiler$Validators$Validator$$referenceMacroImplSig$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$$anonfun$scala$reflect$macros$compiler$Validators$Validator$$referenceMacroImplSig$2.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$MacroImplSig$$anonfun$paramss_s$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$MacroImplSig$$anonfun$paramss_s$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$MacroImplSig$$anonfun$tparams_s$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$MacroImplSig$.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$MacroImplSig.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$$anonfun$10.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$$anonfun$8.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$$anonfun$9.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$$anonfun$param$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$$anonfun$param$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$SigmaTypeMap$$anonfun$mapPrefix$1.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$SigGenerator$2$SigmaTypeMap$.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator$class.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$Validator.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators$class.class +INFO: Loading Class: scala/reflect/macros/compiler/Validators.class +INFO: Loading Class: scala/reflect/macros/contexts/Aliases$RichOpenImplicit.class +INFO: Loading Class: scala/reflect/macros/contexts/Aliases$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Aliases.class +INFO: Loading Class: scala/reflect/macros/contexts/Context.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$$anonfun$lenientEnclosure$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$$anonfun$scala$reflect$macros$contexts$Enclosures$$enclPoses$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$$anonfun$scala$reflect$macros$contexts$Enclosures$$enclPoses$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$$anonfun$scala$reflect$macros$contexts$Enclosures$$enclTrees$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$$anonfun$strictEnclosure$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Enclosures.class +INFO: Loading Class: scala/reflect/macros/contexts/Evals$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Evals.class +INFO: Loading Class: scala/reflect/macros/contexts/ExprUtils$class.class +INFO: Loading Class: scala/reflect/macros/contexts/ExprUtils.class +INFO: Loading Class: scala/reflect/macros/contexts/FrontEnds$class.class +INFO: Loading Class: scala/reflect/macros/contexts/FrontEnds.class +INFO: Loading Class: scala/reflect/macros/contexts/Infrastructure$$anonfun$settings$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Infrastructure$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Infrastructure.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$$anon$1$$anonfun$typingTransform$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$$anon$1$HofTransformer$$anon$3.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$$anon$1$HofTransformer.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$$anon$1$HofTypingTransformer$$anon$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$$anon$1$HofTypingTransformer.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$$anon$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Internals.class +INFO: Loading Class: scala/reflect/macros/contexts/Names$$anonfun$freshName$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Names$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Names.class +INFO: Loading Class: scala/reflect/macros/contexts/Parsers$$anon$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Parsers$$anonfun$parse$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Parsers$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Parsers.class +INFO: Loading Class: scala/reflect/macros/contexts/Reifiers$$anonfun$logFreeVars$1$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Reifiers$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Reifiers$utils$2$.class +INFO: Loading Class: scala/reflect/macros/contexts/Reifiers.class +INFO: Loading Class: scala/reflect/macros/contexts/Traces$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Traces.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$3.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$4.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$inferImplicitValue$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$inferImplicitValue$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$inferImplicitView$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$inferImplicitView$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$openImplicits$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$typecheck$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$typecheck$2$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$typecheck$2$$anonfun$apply$1$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$typecheck$2$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$typecheck$2.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$typecheckInternal$1$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$$anonfun$withContext$1$1.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers$class.class +INFO: Loading Class: scala/reflect/macros/contexts/Typers.class +INFO: Loading Class: scala/reflect/macros/runtime/AbortMacroException.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$JavaReflectionResolvers$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$JavaReflectionResolvers$$anonfun$resolveJavaReflectionRuntime$1.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$JavaReflectionResolvers$$anonfun$resolveJavaReflectionRuntime$2$$anonfun$3.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$JavaReflectionResolvers$$anonfun$resolveJavaReflectionRuntime$2.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$JavaReflectionResolvers$class.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$JavaReflectionResolvers.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes$class.class +INFO: Loading Class: scala/reflect/macros/runtime/JavaReflectionRuntimes.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$$anonfun$standardMacroRuntime$1.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$$anonfun$standardMacroRuntime$2.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$$anonfun$standardMacroRuntime$3.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$MacroRuntimeResolver$$anonfun$resolveRuntime$1.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$MacroRuntimeResolver$$anonfun$resolveRuntime$2.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$MacroRuntimeResolver$$anonfun$resolveRuntime$3.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$MacroRuntimeResolver$$anonfun$resolveRuntime$4.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$MacroRuntimeResolver.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes$class.class +INFO: Loading Class: scala/reflect/macros/runtime/MacroRuntimes.class +INFO: Loading Class: scala/reflect/macros/runtime/package$.class +INFO: Loading Class: scala/reflect/macros/runtime/package.class +INFO: Loading Class: scala/reflect/macros/util/Helpers$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/util/Helpers$$anonfun$2.class +INFO: Loading Class: scala/reflect/macros/util/Helpers$$anonfun$decreaseMetalevel$1.class +INFO: Loading Class: scala/reflect/macros/util/Helpers$$anonfun$increaseMetalevel$1.class +INFO: Loading Class: scala/reflect/macros/util/Helpers$$anonfun$untypeMetalevel$1.class +INFO: Loading Class: scala/reflect/macros/util/Helpers$class.class +INFO: Loading Class: scala/reflect/macros/util/Helpers.class +INFO: Loading Class: scala/reflect/macros/util/Traces$class.class +INFO: Loading Class: scala/reflect/macros/util/Traces.class +INFO: Loading Class: scala/reflect/reify/Errors$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/Errors$class.class +INFO: Loading Class: scala/reflect/reify/Errors.class +INFO: Loading Class: scala/reflect/reify/Phases$$anonfun$mkReificationPipeline$1.class +INFO: Loading Class: scala/reflect/reify/Phases$class.class +INFO: Loading Class: scala/reflect/reify/Phases.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$3.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$4.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$5.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$6.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$7.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$8.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$9.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$liftedTree1$1$2.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$liftedTree1$1$3.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$liftedTree1$1$4.class +INFO: Loading Class: scala/reflect/reify/Reifier$$anonfun$liftedTree1$1$5.class +INFO: Loading Class: scala/reflect/reify/Reifier.class +INFO: Loading Class: scala/reflect/reify/States$State.class +INFO: Loading Class: scala/reflect/reify/States$class.class +INFO: Loading Class: scala/reflect/reify/States.class +INFO: Loading Class: scala/reflect/reify/Taggers$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/Taggers$$anonfun$materializeClassTag$1.class +INFO: Loading Class: scala/reflect/reify/Taggers$$anonfun$materializeTypeTag$1.class +INFO: Loading Class: scala/reflect/reify/Taggers$$anonfun$materializeTypeTag$2.class +INFO: Loading Class: scala/reflect/reify/Taggers.class +INFO: Loading Class: scala/reflect/reify/codegen/GenAnnotationInfos$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenAnnotationInfos$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenAnnotationInfos.class +INFO: Loading Class: scala/reflect/reify/codegen/GenNames$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenNames.class +INFO: Loading Class: scala/reflect/reify/codegen/GenPositions$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenPositions.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$$anonfun$reifyFreeTerm$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$$anonfun$reifyFreeTerm$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$$anonfun$reifyFreeType$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$$anonfun$reifySymDef$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$$anonfun$reifySymRef$2.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$Reification$.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$Reification.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenSymbols.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees$$anonfun$reifyTreeSyntactically$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees$$anonfun$spliceTree$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees$$anonfun$spliceTree$2.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTrees.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$$anonfun$isSynthetic$1$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$$anonfun$reifyAnnotatedType$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$$anonfun$reifyScope$1$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$$anonfun$reifyScope$1$2.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenTypes.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$$anonfun$reifyBuildCall$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$$anonfun$reifyList$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$$anonfun$reifyProduct$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$$anonfun$reifyProduct$2.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$$anonfun$termPath$1.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$TypedOrAnnotated$.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils$class.class +INFO: Loading Class: scala/reflect/reify/codegen/GenUtils.class +INFO: Loading Class: scala/reflect/reify/package$$anon$1.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$3.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$5.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$6.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$7.class +INFO: Loading Class: scala/reflect/reify/package$$anonfun$isThisInScope$1$1.class +INFO: Loading Class: scala/reflect/reify/package$.class +INFO: Loading Class: scala/reflect/reify/package.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$$anon$1$$anonfun$traverse$1.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$$anon$1$$anonfun$traverse$2.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$$anon$1$$anonfun$traverse$3.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$$anon$1.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$RichCalculateSymbol$$anonfun$metalevel$1.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$RichCalculateSymbol.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$RichCalculateType$$anonfun$isLocalToReifee$1.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$RichCalculateType.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate$class.class +INFO: Loading Class: scala/reflect/reify/phases/Calculate.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1$$anonfun$transform$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1$$anonfun$transform$1.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1$$anonfun$transform$2.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1$$anonfun$transform$4.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$$anon$1.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels$class.class +INFO: Loading Class: scala/reflect/reify/phases/Metalevels.class +INFO: Loading Class: scala/reflect/reify/phases/Reify$$anonfun$boundSymbolsInCallstack$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reify$class.class +INFO: Loading Class: scala/reflect/reify/phases/Reify$reifyStack$.class +INFO: Loading Class: scala/reflect/reify/phases/Reify.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$11.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$12.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$15$$anonfun$16$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$15$$anonfun$16.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$15$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$15.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$17.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$3.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$5.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$6.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$7.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$8.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$9.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$extractOriginal$1$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$reshapeLazyVals$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$scala$reflect$reify$phases$Reshape$class$$anon$$toScalaAnnotation$1$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimAccessors$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimAccessors$2$$anonfun$4.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimAccessors$2$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimAccessors$2$$anonfun$detectBeanAccessors$1$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimAccessors$2$$anonfun$scala$reflect$reify$phases$Reshape$class$$anon$$anonfun$$findValDef$1$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimAccessors$2.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimSyntheticCaseClassCompanions$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimSyntheticCaseClassCompanions$2.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1$$anonfun$trimSyntheticCaseClassMembers$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$$anon$1.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape$class.class +INFO: Loading Class: scala/reflect/reify/phases/Reshape.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$$anonfun$extractNames$1$1.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$$anonfun$loop$1$1.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$ApplyCall$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$BoundTerm$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$BoundType$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$FreeDef$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$FreeDefExtractor.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$FreeRef$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$FreeTermDef$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$FreeTypeDef$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$ReifiedTree$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$ReifiedType$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$SymDef$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$TreeSplice$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$TypeRefToFreeType$.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors$class.class +INFO: Loading Class: scala/reflect/reify/utils/Extractors.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$class.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$apply$6.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$$anonfun$apply$7.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters$reifiedNodeToString$.class +INFO: Loading Class: scala/reflect/reify/utils/NodePrinters.class +INFO: Loading Class: scala/reflect/reify/utils/StdAttachments$ReifyAliasAttachment$.class +INFO: Loading Class: scala/reflect/reify/utils/StdAttachments$ReifyAliasAttachment.class +INFO: Loading Class: scala/reflect/reify/utils/StdAttachments$ReifyBindingAttachment$.class +INFO: Loading Class: scala/reflect/reify/utils/StdAttachments$ReifyBindingAttachment.class +INFO: Loading Class: scala/reflect/reify/utils/StdAttachments$class.class +INFO: Loading Class: scala/reflect/reify/utils/StdAttachments.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$$minus$minus$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$$minus$minus$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$$minus$minus$3.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$4.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$5.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$6.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$7$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$7$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$7.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$encode$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$encode$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$encode$3.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$fillInSymbol$1$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$filterAliases$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$filterAliases$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$scala$reflect$reify$utils$SymbolTables$SymbolTable$$remove$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$scala$reflect$reify$utils$SymbolTables$SymbolTable$$remove$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$scala$reflect$reify$utils$SymbolTables$SymbolTable$$remove$2$$anonfun$3.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$scala$reflect$reify$utils$SymbolTables$SymbolTable$$remove$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$symAliases$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$symAliases$2$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$symAliases$2.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$$anonfun$symDef$1.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable$.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$SymbolTable.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables$class.class +INFO: Loading Class: scala/reflect/reify/utils/SymbolTables.class +INFO: Loading Class: scala/reflect/reify/utils/Utils$class.class +INFO: Loading Class: scala/reflect/reify/utils/Utils.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify$$anonfun$2.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify$$anonfun$3.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify$$anonfun$execute$2.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify$$anonfun$execute$3.class +INFO: Loading Class: scala/tools/ant/ClassloadVerify.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$10.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$11.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$2.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$3.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$4.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$5.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$6.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$7.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$8.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$9.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$encodeScalacArgsFile$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$encodeScalacArgsFile$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$encodeScalacArgsFile$1$1.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/ant/FastScalac$$anonfun$execute$2.class +INFO: Loading Class: scala/tools/ant/FastScalac.class +INFO: Loading Class: scala/tools/ant/Pack200Task$$anonfun$getFileList$1.class +INFO: Loading Class: scala/tools/ant/Pack200Task$$anonfun$getFileList$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/ant/Pack200Task$$anonfun$getFileList$2.class +INFO: Loading Class: scala/tools/ant/Pack200Task.class +INFO: Loading Class: scala/tools/ant/Same$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/ant/Same$$anonfun$execute$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/ant/Same$$anonfun$execute$2$$anonfun$apply$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/ant/Same$$anonfun$execute$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/ant/Same$$anonfun$execute$2.class +INFO: Loading Class: scala/tools/ant/Same.class +INFO: Loading Class: scala/tools/ant/ScalaMatchingTask.class +INFO: Loading Class: scala/tools/ant/ScalaTask$class.class +INFO: Loading Class: scala/tools/ant/ScalaTask.class +INFO: Loading Class: scala/tools/ant/ScalaTool$$anonfun$getProperties$1.class +INFO: Loading Class: scala/tools/ant/ScalaTool$$anonfun$getResourceAsCharStream$1.class +INFO: Loading Class: scala/tools/ant/ScalaTool$$anonfun$getResourceAsCharStream$2.class +INFO: Loading Class: scala/tools/ant/ScalaTool$$anonfun$getResourceAsCharStream$3.class +INFO: Loading Class: scala/tools/ant/ScalaTool$$anonfun$setPlatforms$1.class +INFO: Loading Class: scala/tools/ant/ScalaTool$$anonfun$setProperties$1.class +INFO: Loading Class: scala/tools/ant/ScalaTool$PermissibleValue$$anonfun$isPermissible$1.class +INFO: Loading Class: scala/tools/ant/ScalaTool$PermissibleValue.class +INFO: Loading Class: scala/tools/ant/ScalaTool$Platforms$.class +INFO: Loading Class: scala/tools/ant/ScalaTool.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$3.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$4.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$5.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$6.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$asString$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createBootclasspath$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createBootclasspath$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createClasspath$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createClasspath$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createCompilerPath$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createCompilerPath$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createExtdirs$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createExtdirs$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createSourcepath$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createSourcepath$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createSrc$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$createSrc$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$executeFork$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$executeInternal$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$pathAsList$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$setLogPhase$1.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$writeSettings$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/ant/Scalac$$anonfun$writeSettings$1$1.class +INFO: Loading Class: scala/tools/ant/Scalac$CompilerPhase$.class +INFO: Loading Class: scala/tools/ant/Scalac$Flag$.class +INFO: Loading Class: scala/tools/ant/Scalac$LoggingLevel$.class +INFO: Loading Class: scala/tools/ant/Scalac$PermissibleValue$$anonfun$isPermissible$1.class +INFO: Loading Class: scala/tools/ant/Scalac$PermissibleValue.class +INFO: Loading Class: scala/tools/ant/Scalac$Target$.class +INFO: Loading Class: scala/tools/ant/Scalac.class +INFO: Loading Class: scala/tools/ant/ScalacShared$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/ScalacShared$$anonfun$execWithArgFiles$1.class +INFO: Loading Class: scala/tools/ant/ScalacShared$class.class +INFO: Loading Class: scala/tools/ant/ScalacShared.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$2.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$asString$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$getBootclasspath$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$getClasspath$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$getExtdirs$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$getOrigin$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$$anonfun$getSourcepath$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$Flag$.class +INFO: Loading Class: scala/tools/ant/Scaladoc$PermissibleValue$$anonfun$isPermissible$1.class +INFO: Loading Class: scala/tools/ant/Scaladoc$PermissibleValue.class +INFO: Loading Class: scala/tools/ant/Scaladoc.class +INFO: Loading Class: scala/tools/ant/sabbus/Break.class +INFO: Loading Class: scala/tools/ant/sabbus/CompilationFailure$.class +INFO: Loading Class: scala/tools/ant/sabbus/CompilationFailure.class +INFO: Loading Class: scala/tools/ant/sabbus/CompilationPathProperty$class.class +INFO: Loading Class: scala/tools/ant/sabbus/CompilationPathProperty.class +INFO: Loading Class: scala/tools/ant/sabbus/Compiler.class +INFO: Loading Class: scala/tools/ant/sabbus/Compilers$.class +INFO: Loading Class: scala/tools/ant/sabbus/Compilers.class +INFO: Loading Class: scala/tools/ant/sabbus/ForeignCompiler$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/sabbus/ForeignCompiler$$anonfun$2.class +INFO: Loading Class: scala/tools/ant/sabbus/ForeignCompiler.class +INFO: Loading Class: scala/tools/ant/sabbus/Make$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/ant/sabbus/Make.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$4.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$5.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$6.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$7.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$encodeScalacArgsFile$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$encodeScalacArgsFile$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$encodeScalacArgsFile$1$1.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$execute$2.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$execute$3.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$execute$4.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork$$anonfun$execute$6.class +INFO: Loading Class: scala/tools/ant/sabbus/ScalacFork.class +INFO: Loading Class: scala/tools/ant/sabbus/Settings.class +INFO: Loading Class: scala/tools/ant/sabbus/TaskArgs$$anonfun$extraArgsFlat$1.class +INFO: Loading Class: scala/tools/ant/sabbus/TaskArgs$$anonfun$setParams$1.class +INFO: Loading Class: scala/tools/ant/sabbus/TaskArgs$class.class +INFO: Loading Class: scala/tools/ant/sabbus/TaskArgs.class +INFO: Loading Class: scala/tools/ant/sabbus/Use$$anonfun$1.class +INFO: Loading Class: scala/tools/ant/sabbus/Use.class +INFO: Loading Class: scala/tools/asm/AnnotationVisitor.class +INFO: Loading Class: scala/tools/asm/AnnotationWriter.class +INFO: Loading Class: scala/tools/asm/Attribute.class +INFO: Loading Class: scala/tools/asm/ByteVector.class +INFO: Loading Class: scala/tools/asm/ClassReader.class +INFO: Loading Class: scala/tools/asm/ClassVisitor.class +INFO: Loading Class: scala/tools/asm/ClassWriter.class +INFO: Loading Class: scala/tools/asm/Context.class +INFO: Loading Class: scala/tools/asm/CustomAttr.class +INFO: Loading Class: scala/tools/asm/Edge.class +INFO: Loading Class: scala/tools/asm/FieldVisitor.class +INFO: Loading Class: scala/tools/asm/FieldWriter.class +INFO: Loading Class: scala/tools/asm/Frame.class +INFO: Loading Class: scala/tools/asm/Handle.class +INFO: Loading Class: scala/tools/asm/Handler.class +INFO: Loading Class: scala/tools/asm/Item.class +INFO: Loading Class: scala/tools/asm/Label.class +INFO: Loading Class: scala/tools/asm/MethodVisitor.class +INFO: Loading Class: scala/tools/asm/MethodWriter.class +INFO: Loading Class: scala/tools/asm/Opcodes.class +INFO: Loading Class: scala/tools/asm/Type.class +INFO: Loading Class: scala/tools/asm/signature/SignatureReader.class +INFO: Loading Class: scala/tools/asm/signature/SignatureVisitor.class +INFO: Loading Class: scala/tools/asm/signature/SignatureWriter.class +INFO: Loading Class: scala/tools/asm/tree/AbstractInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/AnnotationNode.class +INFO: Loading Class: scala/tools/asm/tree/ClassNode.class +INFO: Loading Class: scala/tools/asm/tree/FieldInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/FieldNode.class +INFO: Loading Class: scala/tools/asm/tree/FrameNode.class +INFO: Loading Class: scala/tools/asm/tree/IincInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/InnerClassNode.class +INFO: Loading Class: scala/tools/asm/tree/InsnList$InsnListIterator.class +INFO: Loading Class: scala/tools/asm/tree/InsnList.class +INFO: Loading Class: scala/tools/asm/tree/InsnNode.class +INFO: Loading Class: scala/tools/asm/tree/IntInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/InvokeDynamicInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/JumpInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/LabelNode.class +INFO: Loading Class: scala/tools/asm/tree/LdcInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/LineNumberNode.class +INFO: Loading Class: scala/tools/asm/tree/LocalVariableNode.class +INFO: Loading Class: scala/tools/asm/tree/LookupSwitchInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/MethodInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/MethodNode$1.class +INFO: Loading Class: scala/tools/asm/tree/MethodNode.class +INFO: Loading Class: scala/tools/asm/tree/MultiANewArrayInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/TableSwitchInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/TryCatchBlockNode.class +INFO: Loading Class: scala/tools/asm/tree/TypeInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/VarInsnNode.class +INFO: Loading Class: scala/tools/asm/tree/analysis/Analyzer.class +INFO: Loading Class: scala/tools/asm/tree/analysis/AnalyzerException.class +INFO: Loading Class: scala/tools/asm/tree/analysis/BasicInterpreter.class +INFO: Loading Class: scala/tools/asm/tree/analysis/BasicValue.class +INFO: Loading Class: scala/tools/asm/tree/analysis/BasicVerifier.class +INFO: Loading Class: scala/tools/asm/tree/analysis/Frame.class +INFO: Loading Class: scala/tools/asm/tree/analysis/Interpreter.class +INFO: Loading Class: scala/tools/asm/tree/analysis/SimpleVerifier.class +INFO: Loading Class: scala/tools/asm/tree/analysis/SmallSet.class +INFO: Loading Class: scala/tools/asm/tree/analysis/SourceInterpreter.class +INFO: Loading Class: scala/tools/asm/tree/analysis/SourceValue.class +INFO: Loading Class: scala/tools/asm/tree/analysis/Subroutine.class +INFO: Loading Class: scala/tools/asm/tree/analysis/Value.class +INFO: Loading Class: scala/tools/asm/util/ASMifiable.class +INFO: Loading Class: scala/tools/asm/util/ASMifier.class +INFO: Loading Class: scala/tools/asm/util/CheckAnnotationAdapter.class +INFO: Loading Class: scala/tools/asm/util/CheckClassAdapter.class +INFO: Loading Class: scala/tools/asm/util/CheckFieldAdapter.class +INFO: Loading Class: scala/tools/asm/util/CheckMethodAdapter$1.class +INFO: Loading Class: scala/tools/asm/util/CheckMethodAdapter.class +INFO: Loading Class: scala/tools/asm/util/CheckSignatureAdapter.class +INFO: Loading Class: scala/tools/asm/util/Printer.class +INFO: Loading Class: scala/tools/asm/util/Textifiable.class +INFO: Loading Class: scala/tools/asm/util/Textifier.class +INFO: Loading Class: scala/tools/asm/util/TraceAnnotationVisitor.class +INFO: Loading Class: scala/tools/asm/util/TraceClassVisitor.class +INFO: Loading Class: scala/tools/asm/util/TraceFieldVisitor.class +INFO: Loading Class: scala/tools/asm/util/TraceMethodVisitor.class +INFO: Loading Class: scala/tools/asm/util/TraceSignatureVisitor.class +INFO: Loading Class: scala/tools/cmd/CommandLine$$anonfun$1.class +INFO: Loading Class: scala/tools/cmd/CommandLine.class +INFO: Loading Class: scala/tools/cmd/CommandLineConfig$class.class +INFO: Loading Class: scala/tools/cmd/CommandLineConfig.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$$anonfun$2.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$$anonfun$tokenize$1.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$DoubleQuoted$.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$ParseException.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$QuotedExtractor$$anonfun$1.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$QuotedExtractor.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser$SingleQuoted$.class +INFO: Loading Class: scala/tools/cmd/CommandLineParser.class +INFO: Loading Class: scala/tools/cmd/FromString$$anon$1.class +INFO: Loading Class: scala/tools/cmd/FromString$$anon$2.class +INFO: Loading Class: scala/tools/cmd/FromString$$anon$3.class +INFO: Loading Class: scala/tools/cmd/FromString$$anon$4.class +INFO: Loading Class: scala/tools/cmd/FromString$$anon$5.class +INFO: Loading Class: scala/tools/cmd/FromString$.class +INFO: Loading Class: scala/tools/cmd/FromString.class +INFO: Loading Class: scala/tools/cmd/Instance$class.class +INFO: Loading Class: scala/tools/cmd/Instance.class +INFO: Loading Class: scala/tools/cmd/Interpolation$.class +INFO: Loading Class: scala/tools/cmd/Interpolation$class.class +INFO: Loading Class: scala/tools/cmd/Interpolation$interpolate$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/cmd/Interpolation$interpolate$$anonfun$mapper$1.class +INFO: Loading Class: scala/tools/cmd/Interpolation$interpolate$$anonfun$mapper$2.class +INFO: Loading Class: scala/tools/cmd/Interpolation$interpolate$$anonfun$mapper$3.class +INFO: Loading Class: scala/tools/cmd/Interpolation$interpolate$.class +INFO: Loading Class: scala/tools/cmd/Interpolation.class +INFO: Loading Class: scala/tools/cmd/Meta$.class +INFO: Loading Class: scala/tools/cmd/Meta$Opt.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts$$anonfun$3.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts$Bash$$anonfun$1.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts$Bash$.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts$SelfUpdate$$anonfun$2.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts$SelfUpdate$.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts$class.class +INFO: Loading Class: scala/tools/cmd/Meta$StdOpts.class +INFO: Loading Class: scala/tools/cmd/Meta.class +INFO: Loading Class: scala/tools/cmd/Opt$.class +INFO: Loading Class: scala/tools/cmd/Opt$Error$class.class +INFO: Loading Class: scala/tools/cmd/Opt$Error.class +INFO: Loading Class: scala/tools/cmd/Opt$Implicit$class.class +INFO: Loading Class: scala/tools/cmd/Opt$Implicit.class +INFO: Loading Class: scala/tools/cmd/Opt$Instance.class +INFO: Loading Class: scala/tools/cmd/Opt$Reference$$anonfun$$div$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/cmd/Opt$Reference$$anonfun$$div$1.class +INFO: Loading Class: scala/tools/cmd/Opt$Reference$$anonfun$defaultTo$1.class +INFO: Loading Class: scala/tools/cmd/Opt$Reference$$anonfun$expandTo$1.class +INFO: Loading Class: scala/tools/cmd/Opt$Reference.class +INFO: Loading Class: scala/tools/cmd/Opt.class +INFO: Loading Class: scala/tools/cmd/Property$$anonfun$loadProperties$1.class +INFO: Loading Class: scala/tools/cmd/Property$class.class +INFO: Loading Class: scala/tools/cmd/Property.class +INFO: Loading Class: scala/tools/cmd/PropertyMapper.class +INFO: Loading Class: scala/tools/cmd/Reference$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/cmd/Reference$$anonfun$expandArg$1.class +INFO: Loading Class: scala/tools/cmd/Reference$.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators$$anonfun$addHelpAlias$1.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators$$anonfun$addHelpDefault$1.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators$$anonfun$addHelpEnvDefault$1.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators$$anonfun$helpMsg$1.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators$$anonfun$longestArg$1.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators$$anonfun$mapHelp$1.class +INFO: Loading Class: scala/tools/cmd/Reference$Accumulators.class +INFO: Loading Class: scala/tools/cmd/Reference$SpecCommandLine.class +INFO: Loading Class: scala/tools/cmd/Reference$class.class +INFO: Loading Class: scala/tools/cmd/Reference.class +INFO: Loading Class: scala/tools/cmd/Spec$$anonfun$heading$1.class +INFO: Loading Class: scala/tools/cmd/Spec$.class +INFO: Loading Class: scala/tools/cmd/Spec$Accumulator.class +INFO: Loading Class: scala/tools/cmd/Spec$Choices.class +INFO: Loading Class: scala/tools/cmd/Spec$EnvironmentVar.class +INFO: Loading Class: scala/tools/cmd/Spec$Info$.class +INFO: Loading Class: scala/tools/cmd/Spec$Info.class +INFO: Loading Class: scala/tools/cmd/Spec$class.class +INFO: Loading Class: scala/tools/cmd/Spec.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$2.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$3.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$4.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$classLines$1$$anonfun$5.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$classLines$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$companionCoercions$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$mkBinOpsGroup$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$mkBinOpsGroup$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$mkCoercions$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$mkShiftOps$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$mkShiftOps$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$mkUnaryOps$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$$anonfun$objectLines$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$Op$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum$Op.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValNum.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValRep$$anonfun$6.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValRep$$anonfun$indentN$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValRep$$anonfun$interpolate$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$AnyValRep.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps$class.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValReps.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValTemplates$class.class +INFO: Loading Class: scala/tools/cmd/gen/AnyValTemplates.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$$anonfun$make$1.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$B$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$C$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$D$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$F$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$I$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$L$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$S$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$U$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals$Z$.class +INFO: Loading Class: scala/tools/cmd/gen/AnyVals.class +INFO: Loading Class: scala/tools/cmd/gen/Codegen$$anon$1.class +INFO: Loading Class: scala/tools/cmd/gen/Codegen$.class +INFO: Loading Class: scala/tools/cmd/gen/Codegen.class +INFO: Loading Class: scala/tools/cmd/gen/CodegenSpec$$anonfun$1.class +INFO: Loading Class: scala/tools/cmd/gen/CodegenSpec$.class +INFO: Loading Class: scala/tools/cmd/gen/CodegenSpec$class.class +INFO: Loading Class: scala/tools/cmd/gen/CodegenSpec.class +INFO: Loading Class: scala/tools/cmd/package$$anonfun$stripQuotes$1.class +INFO: Loading Class: scala/tools/cmd/package$.class +INFO: Loading Class: scala/tools/cmd/package.class +INFO: Loading Class: scala/tools/nsc/CommonRunner$class.class +INFO: Loading Class: scala/tools/nsc/CommonRunner.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits$CompilationUnit$synthetics$$anonfun$get$1.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits$CompilationUnit$synthetics$$anonfun$get$2.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits$CompilationUnit$synthetics$.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits$CompilationUnit.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits$NoCompilationUnit$.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits$class.class +INFO: Loading Class: scala/tools/nsc/CompilationUnits.class +INFO: Loading Class: scala/tools/nsc/CompileClient$.class +INFO: Loading Class: scala/tools/nsc/CompileClient.class +INFO: Loading Class: scala/tools/nsc/CompileServer$$anonfun$execute$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/CompileServer$$anonfun$execute$1.class +INFO: Loading Class: scala/tools/nsc/CompileServer$$anonfun$main$1.class +INFO: Loading Class: scala/tools/nsc/CompileServer$.class +INFO: Loading Class: scala/tools/nsc/CompileServer.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$getPassword$1.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$getPassword$2.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$getSocket$1.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$getSocket$2.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$getSocket$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$getSocket$3.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$$anonfun$serverCommand$1.class +INFO: Loading Class: scala/tools/nsc/CompileSocket$.class +INFO: Loading Class: scala/tools/nsc/CompileSocket.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$createUsageMsg$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$expandArg$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$scala$tools$nsc$CompilerCommand$$stripComment$1$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$sstring$1$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$usageMsg$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$xusageMsg$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand$$anonfun$yusageMsg$1.class +INFO: Loading Class: scala/tools/nsc/CompilerCommand.class +INFO: Loading Class: scala/tools/nsc/ConsoleWriter.class +INFO: Loading Class: scala/tools/nsc/Driver$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/Driver.class +INFO: Loading Class: scala/tools/nsc/EvalLoop$class.class +INFO: Loading Class: scala/tools/nsc/EvalLoop.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$AsJar$.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$AsObject$.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$AsRepl$.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$AsScript$.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$Error$.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand$HowToRun.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerCommand.class +INFO: Loading Class: scala/tools/nsc/GenericRunnerSettings.class +INFO: Loading Class: scala/tools/nsc/Global$$anon$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anon$2.class +INFO: Loading Class: scala/tools/nsc/Global$$anon$4.class +INFO: Loading Class: scala/tools/nsc/Global$$anon$5.class +INFO: Loading Class: scala/tools/nsc/Global$$anon$6.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$31$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$31$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$9$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$afterEachPhase$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$afterEachPhase$2.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$afterEachPhase$3.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$assert$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$computeInternalPhases$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$cullPhases$1$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$cullPhases$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$devWarning$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$formatExplain$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$informComplete$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$phaseFlagDescriptions$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$phaseHelp$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$phaseNames$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$printAllUnits$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$printAllUnits$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$require$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$assoc$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$bases$1$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$bases$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$decls$1$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$decls$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$isEnabled$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$members$1$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$members$1$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$members$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$reSync$2$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$reSync$2.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$subPackage$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$scala$tools$nsc$Global$$writeICode$1.class +INFO: Loading Class: scala/tools/nsc/Global$$anonfun$show$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$.class +INFO: Loading Class: scala/tools/nsc/Global$ConditionalWarning.class +INFO: Loading Class: scala/tools/nsc/Global$GlobalMirror.class +INFO: Loading Class: scala/tools/nsc/Global$GlobalPhase$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/Global$GlobalPhase.class +INFO: Loading Class: scala/tools/nsc/Global$GlobalPlatform.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$checkDeprecatedSettings$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$checkDeprecatedSettings$2.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$checkPhaseSettings$1$1$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$checkPhaseSettings$1$1$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$checkPhaseSettings$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileFiles$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileLate$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileLate$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileLate$2.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileUnitsInternal$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileUnitsInternal$3.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$compileUnitsInternal$5.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$isRange$1$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$phaseNamed$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$phaseNamed$2.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$reportCompileErrors$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$reportCompileErrors$2.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$resetProjectClasses$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$resetProjectClasses$2.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$scala$tools$nsc$Global$Run$$resetPackageClass$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$scala$tools$nsc$Global$Run$$resetPackageClass$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$stopPhaseSetting$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$stopPhaseSetting$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$stopPhaseSetting$1$$anonfun$isDefinedAt$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$$anonfun$stopPhaseSetting$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$SyncedCompilationBuffer$$anon$3.class +INFO: Loading Class: scala/tools/nsc/Global$Run$SyncedCompilationBuffer.class +INFO: Loading Class: scala/tools/nsc/Global$Run$trackerFactory$$anonfun$snapshot$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$trackerFactory$$anonfun$snapshot$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$trackerFactory$$anonfun$trackers$1.class +INFO: Loading Class: scala/tools/nsc/Global$Run$trackerFactory$.class +INFO: Loading Class: scala/tools/nsc/Global$Run.class +INFO: Loading Class: scala/tools/nsc/Global$analysis$.class +INFO: Loading Class: scala/tools/nsc/Global$cleanup$.class +INFO: Loading Class: scala/tools/nsc/Global$closureElimination$.class +INFO: Loading Class: scala/tools/nsc/Global$constantOptimization$.class +INFO: Loading Class: scala/tools/nsc/Global$constfold$.class +INFO: Loading Class: scala/tools/nsc/Global$constructors$.class +INFO: Loading Class: scala/tools/nsc/Global$copyPropagation$.class +INFO: Loading Class: scala/tools/nsc/Global$deadCode$.class +INFO: Loading Class: scala/tools/nsc/Global$delambdafy$.class +INFO: Loading Class: scala/tools/nsc/Global$erasure$.class +INFO: Loading Class: scala/tools/nsc/Global$explicitOuter$.class +INFO: Loading Class: scala/tools/nsc/Global$extensionMethods$.class +INFO: Loading Class: scala/tools/nsc/Global$flatten$.class +INFO: Loading Class: scala/tools/nsc/Global$gen$.class +INFO: Loading Class: scala/tools/nsc/Global$genASM$.class +INFO: Loading Class: scala/tools/nsc/Global$genBCode$.class +INFO: Loading Class: scala/tools/nsc/Global$genicode$.class +INFO: Loading Class: scala/tools/nsc/Global$icodeChecker$.class +INFO: Loading Class: scala/tools/nsc/Global$icodeCheckers$.class +INFO: Loading Class: scala/tools/nsc/Global$icodes$.class +INFO: Loading Class: scala/tools/nsc/Global$inlineExceptionHandlers$.class +INFO: Loading Class: scala/tools/nsc/Global$inliner$.class +INFO: Loading Class: scala/tools/nsc/Global$lambdaLift$.class +INFO: Loading Class: scala/tools/nsc/Global$lazyVals$.class +INFO: Loading Class: scala/tools/nsc/Global$mixer$.class +INFO: Loading Class: scala/tools/nsc/Global$nodePrinters$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/Global$nodePrinters$.class +INFO: Loading Class: scala/tools/nsc/Global$overridingPairs$.class +INFO: Loading Class: scala/tools/nsc/Global$patmat$.class +INFO: Loading Class: scala/tools/nsc/Global$pickler$.class +INFO: Loading Class: scala/tools/nsc/Global$postErasure$.class +INFO: Loading Class: scala/tools/nsc/Global$refChecks$.class +INFO: Loading Class: scala/tools/nsc/Global$scalaPrimitives$.class +INFO: Loading Class: scala/tools/nsc/Global$specializeTypes$.class +INFO: Loading Class: scala/tools/nsc/Global$statistics$.class +INFO: Loading Class: scala/tools/nsc/Global$superAccessors$.class +INFO: Loading Class: scala/tools/nsc/Global$tailCalls$.class +INFO: Loading Class: scala/tools/nsc/Global$terminal$.class +INFO: Loading Class: scala/tools/nsc/Global$terminal$TerminalPhase.class +INFO: Loading Class: scala/tools/nsc/Global$treeBrowsers$.class +INFO: Loading Class: scala/tools/nsc/Global$treeChecker$.class +INFO: Loading Class: scala/tools/nsc/Global$typeDeconstruct$.class +INFO: Loading Class: scala/tools/nsc/Global$typer$.class +INFO: Loading Class: scala/tools/nsc/Global$uncurry$.class +INFO: Loading Class: scala/tools/nsc/Global.class +INFO: Loading Class: scala/tools/nsc/GlobalSymbolLoaders$$anonfun$lookupMemberAtTyperPhaseIfPossible$1.class +INFO: Loading Class: scala/tools/nsc/GlobalSymbolLoaders.class +INFO: Loading Class: scala/tools/nsc/HasCompileSocket$$anonfun$compileOnServer$1.class +INFO: Loading Class: scala/tools/nsc/HasCompileSocket$$anonfun$isErrorMessage$1.class +INFO: Loading Class: scala/tools/nsc/HasCompileSocket$class.class +INFO: Loading Class: scala/tools/nsc/HasCompileSocket.class +INFO: Loading Class: scala/tools/nsc/Interpreter.class +INFO: Loading Class: scala/tools/nsc/InterpreterLoop.class +INFO: Loading Class: scala/tools/nsc/JarRunner$.class +INFO: Loading Class: scala/tools/nsc/JarRunner.class +INFO: Loading Class: scala/tools/nsc/Main$.class +INFO: Loading Class: scala/tools/nsc/Main.class +INFO: Loading Class: scala/tools/nsc/MainBench$.class +INFO: Loading Class: scala/tools/nsc/MainBench.class +INFO: Loading Class: scala/tools/nsc/MainClass$$anonfun$resident$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/MainClass$$anonfun$resident$1.class +INFO: Loading Class: scala/tools/nsc/MainClass.class +INFO: Loading Class: scala/tools/nsc/MainGenericRunner$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/MainGenericRunner$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/MainGenericRunner$.class +INFO: Loading Class: scala/tools/nsc/MainGenericRunner.class +INFO: Loading Class: scala/tools/nsc/MainTokenMetric$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/MainTokenMetric$.class +INFO: Loading Class: scala/tools/nsc/MainTokenMetric.class +INFO: Loading Class: scala/tools/nsc/NewLinePrintWriter.class +INFO: Loading Class: scala/tools/nsc/ObjectRunner$.class +INFO: Loading Class: scala/tools/nsc/ObjectRunner.class +INFO: Loading Class: scala/tools/nsc/OfflineCompilerCommand$$anonfun$usageMsg$1.class +INFO: Loading Class: scala/tools/nsc/OfflineCompilerCommand$$anonfun$usageMsg$2.class +INFO: Loading Class: scala/tools/nsc/OfflineCompilerCommand.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$phasesSetToDepGraph$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$phasesSetToDepGraph$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$phasesSetToDepGraph$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$3.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$4.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$$anonfun$scala$tools$nsc$PhaseAssembly$$graphToDotFile$5.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$collapseHardLinksAndLevels$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$collapseHardLinksAndLevels$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$collapseHardLinksAndLevels$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$collapseHardLinksAndLevels$3.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$compilerPhaseList$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$compilerPhaseList$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$compilerPhaseList$3.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$getNodeByPhase$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$removeDanglingNodes$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$removeDanglingNodes$2$$anonfun$apply$4$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$removeDanglingNodes$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$removeDanglingNodes$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$3$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$3$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$3$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$3$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$$anonfun$validateAndEnforceHardlinks$3.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$Edge$.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$Edge.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$Node$$anonfun$allPhaseNames$1.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$Node$$anonfun$allPhaseNames$2.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$Node$.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph$Node.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$DependencyGraph.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly$class.class +INFO: Loading Class: scala/tools/nsc/PhaseAssembly.class +INFO: Loading Class: scala/tools/nsc/Properties$.class +INFO: Loading Class: scala/tools/nsc/Properties.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$$anon$1.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$Command$$anonfun$usageMsg$1.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$Command$$anonfun$usageMsg$2.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc$Command.class +INFO: Loading Class: scala/tools/nsc/ScalaDoc.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$runCommand$1.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$runScript$1.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$scala$tools$nsc$ScriptRunner$$compile$1$1.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$$anonfun$withCompiledScript$1.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner$.class +INFO: Loading Class: scala/tools/nsc/ScriptRunner.class +INFO: Loading Class: scala/tools/nsc/Settings$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/Settings.class +INFO: Loading Class: scala/tools/nsc/StandardCompileClient$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/StandardCompileClient.class +INFO: Loading Class: scala/tools/nsc/StandardCompileServer$$anon$1.class +INFO: Loading Class: scala/tools/nsc/StandardCompileServer$$anon$2.class +INFO: Loading Class: scala/tools/nsc/StandardCompileServer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/StandardCompileServer$$anonfun$trim$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/StandardCompileServer$$anonfun$trim$1$1.class +INFO: Loading Class: scala/tools/nsc/StandardCompileServer.class +INFO: Loading Class: scala/tools/nsc/SubComponent$StdPhase.class +INFO: Loading Class: scala/tools/nsc/SubComponent.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$allInheritedOverriddenSymbols$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$allInheritedOverriddenSymbols$2.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$cookedDocComment$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandInheritdoc$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandInheritdoc$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandInheritdoc$2.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandInternal$1$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandInternal$1$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandInternal$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$expandWiki$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$getDocComment$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$getUseCases$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$getUseCases$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$merge$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$merge$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$superComment$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$$anonfun$superComment$2.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$defineVariables$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$$anonfun$defineVariables$2.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment$.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$DocComment.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$ExpansionLimitExceeded.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anon$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$13$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$expandedDefs$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$expandedDefs$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$$anonfun$scala$tools$nsc$ast$DocComments$UseCase$$findIn$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase$.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$UseCase.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments$class.class +INFO: Loading Class: scala/tools/nsc/ast/DocComments.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$$anonfun$printAll$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$DefaultPrintAST$$anonfun$showAttributes$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$DefaultPrintAST$class.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$DefaultPrintAST.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$InfoLevel$.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$annotationInfoToString$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$annotationInfoToString$2.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$applyCommon$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$10.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$11.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$12.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$13$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$13.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$14.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$15.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$16.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$17.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$18$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$18.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$2.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$3.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$4.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$5.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$6.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$7.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$8.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverse$9.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$traverseAny$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$$anonfun$typeApplyCommon$1.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST$class.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$PrintAST.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters$nodeToRegularString$.class +INFO: Loading Class: scala/tools/nsc/ast/NodePrinters.class +INFO: Loading Class: scala/tools/nsc/ast/Positions$ValidatingPosAssigner.class +INFO: Loading Class: scala/tools/nsc/ast/Positions$class.class +INFO: Loading Class: scala/tools/nsc/ast/Positions.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$$anonfun$asCompactDebugString$1.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$$anonfun$asCompactString$1.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$$anonfun$asString$1.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$CompactTreePrinter$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$CompactTreePrinter$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$CompactTreePrinter$$anonfun$printRow$1.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$CompactTreePrinter$$anonfun$printRow$2.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$CompactTreePrinter.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$TreePrinter$$anonfun$print$1.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$TreePrinter.class +INFO: Loading Class: scala/tools/nsc/ast/Printers$class.class +INFO: Loading Class: scala/tools/nsc/ast/Printers.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$ASTTreeModel$$anonfun$removeTreeModelListener$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$ASTTreeModel.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$$anon$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$$anon$6.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$$anon$7.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$ASTMenuBar$$anon$2.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$ASTMenuBar$$anon$3.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$ASTMenuBar$$anon$4.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$ASTMenuBar$$anon$5.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame$ASTMenuBar.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$BrowserFrame.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$ProgramTree$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$ProgramTree.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$SwingBrowser.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$TextInfoPanel.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$TreeInfo$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$TypePrinter$$anonfun$symsToDocument$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$TypePrinter$$anonfun$toDocument$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$TypePrinter$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$UnitTree$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers$UnitTree.class +INFO: Loading Class: scala/tools/nsc/ast/TreeBrowsers.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$$anonfun$AND$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$$anonfun$nullSafe$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$CaseStart.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$IfStart.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$LIT$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$SelectStart$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$SelectStart.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$TreeMethods.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$CODE$TryStart.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL$class.class +INFO: Loading Class: scala/tools/nsc/ast/TreeDSL.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$evalOnce$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$evalOnceAll$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$evalOnceAll$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$mkAppliedTypeForCase$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$mkBindForCase$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$mkCast$2.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$mkForwarder$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$mkForwarder$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen$$anonfun$scala$tools$nsc$ast$TreeGen$$mkPackedValDef$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeGen.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$AsInstanceOf$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$BinaryOp$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$TypeApplyOp$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$TypeApplyOp$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$$anonfun$isValueClass$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$$anonfun$valueUnbox$1.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$Box$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$BoxAndCompare$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$BoxAndUnbox$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo$ValueClass$Unbox$.class +INFO: Loading Class: scala/tools/nsc/ast/TreeInfo.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$$anonfun$ClassDef$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$$anonfun$ClassDef$1.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$$anonfun$ClassDef$2.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$$anonfun$ClassDef$3.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$$anonfun$PrimarySuperCall$1.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$DocDef$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$DocDef.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$InjectDerivedValue$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$InjectDerivedValue.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$LazyTreeCopier.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$Parens$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$Parens.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$PostfixSelect.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$MarkLocals.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$Transformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$Transformer$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$Transformer$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs$Transformer.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$ResetAttrs.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$SelectFromArray$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$SelectFromArray.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$StrictTreeCopier.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$Transformer.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$TreeCopier.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$TypeTreeWithDeferredRefCheck$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$TypeTreeWithDeferredRefCheck.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$class.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$noopTransformer$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$resetPos$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees$treeInfo$.class +INFO: Loading Class: scala/tools/nsc/ast/Trees.class +INFO: Loading Class: scala/tools/nsc/ast/parser/BracePair$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/BracePair.class +INFO: Loading Class: scala/tools/nsc/ast/parser/BracePatch$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/BracePatch.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Change.class +INFO: Loading Class: scala/tools/nsc/ast/parser/CommonTokens.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Deletion$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Deletion.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Insertion$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Insertion.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$ConfusedAboutBracesControl$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$appendText$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xCharData$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xCharData$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xComment$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xComment$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xEmbeddedExpr$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteral$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteral$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteral$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteralPattern$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteralPattern$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteralPattern$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xLiteralPattern$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xScalaPatterns$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xUnparsed$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser$$anonfun$xUnparsed$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MarkupParser.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$MissingEndTagControl$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$TruncatedXMLControl$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/MarkupParsers.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$OpInfo$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$OpInfo.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$OutlineParser.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anon$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$1$$anonfun$isDefinedAt$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$13$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$8$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$annotTypeRest$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$annotations$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$blockStatSeq$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$classDef$1$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$classDef$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$compilationUnit$1$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$compilationUnit$1$$anonfun$topstats$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$compilationUnit$1$$anonfun$topstats$1$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$compilationUnit$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$constructorAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$convertToParams$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$expr$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$interpolatedString$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$lhsIsTypedParamList$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$loop$2$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$packageOrPackageObject$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$paramClause$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$paramClauses$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$parse$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$parseOther$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$parseStats$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$parseStatsOrPackages$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$readAppliedParent$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$refineStat$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$refineStatSeq$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$removeAsPlaceholder$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$scala$tools$nsc$ast$parser$Parsers$Parser$$args$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$selfInvocation$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$statSeq$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$templateStat$1$$anonfun$applyOrElse$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$templateStat$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$templateStatSeq$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$topStat$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$topStat$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$typeParamClauseOpt$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$$anonfun$typeParamClauseOpt$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$InfixMode$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$ParserTreeBuilder.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$annotType$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$asInfix$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$functionTypes$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$infixType$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$infixTypeRest$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$scala$tools$nsc$ast$parser$Parsers$Parser$PatternContextSensitive$$makeExistentialTypeTree$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$typ$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$$anonfun$types$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$PatternContextSensitive.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$checkWildStar$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$loop$5$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$pattern3$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$patterns$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$simplePattern$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$$anonfun$simplePattern$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$SeqContextSensitive.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$noSeq$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$outPattern$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$seqOK$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser$xmlSeqOK$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$Parser.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$SourceFileParser$$anonfun$parseStartRule$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$SourceFileParser$$anonfun$parseStartRule$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$SourceFileParser$symbXMLBuilder$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$SourceFileParser.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$UnitParser$$anonfun$showSyntaxErrors$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$UnitParser$$anonfun$showSyntaxErrors$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$UnitParser.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Parsers.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ParsersCommon$ParserCommon$$anonfun$makeParens$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ParsersCommon$ParserCommon.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ParsersCommon$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ParsersCommon.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Patch.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$MalformedInput.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$markBalance$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$markBalance$1$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer$$anonfun$scala$tools$nsc$ast$parser$Scanners$ParensAnalyzer$$bpString$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ParensAnalyzer.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$Scanner$$anonfun$fetchSingleQuote$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$Scanner$$anonfun$fetchSingleQuote$1$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$Scanner.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ScannerData$$anon$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ScannerData$$anon$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ScannerData$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$ScannerData.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$SourceFileScanner.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$TokenData$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$TokenData.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$UnitScanner.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Scanners.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$$anonfun$createKeywordArray$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$CommonTokenData.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$ScannerCommon.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/ScannersCommon.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$$anonfun$convertToTextPat$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$xmlterms$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder$xmltypes$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SymbolicXMLBuilder.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberDefTraverser$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberDefTraverser$$anonfun$traverse$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberDefTraverser.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberPosReporter$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberPosReporter$$anonfun$show$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberPosReporter$$anonfun$show$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$MemberPosReporter.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer$ParserPhase.class +INFO: Loading Class: scala/tools/nsc/ast/parser/SyntaxAnalyzer.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Tokens$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/Tokens.class +INFO: Loading Class: scala/tools/nsc/ast/parser/TreeBuilder$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/TreeBuilder$$anonfun$makeAlternative$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/TreeBuilder$$anonfun$makeBinop$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/TreeBuilder$$anonfun$makeBinop$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/TreeBuilder$$anonfun$mkNamed$1$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/TreeBuilder.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$4.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$5.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$6.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$7.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xCharRef$8.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xProcInstr$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xProcInstr$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$$anonfun$xToken$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon$class.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/MarkupParserCommon.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/Utility$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/Utility$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/Utility$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/Utility$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/Utility$.class +INFO: Loading Class: scala/tools/nsc/ast/parser/xml/Utility.class +INFO: Loading Class: scala/tools/nsc/backend/JavaPlatform$class.class +INFO: Loading Class: scala/tools/nsc/backend/JavaPlatform.class +INFO: Loading Class: scala/tools/nsc/backend/Platform.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$addPrimitive$1.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$elementType$1$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$elementType$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$elementType$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives$$anonfun$getPrimitive$1.class +INFO: Loading Class: scala/tools/nsc/backend/ScalaPrimitives.class +INFO: Loading Class: scala/tools/nsc/backend/WorklistAlgorithm$class.class +INFO: Loading Class: scala/tools/nsc/backend/WorklistAlgorithm.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BBFlags$$anonfun$flagsToString$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BBFlags$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BBFlags.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$directSuccessors$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$emit$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$emitOnly$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$exceptionSuccessorsForBlock$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$indexOf$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$predContents$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$predecessors$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$subst$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$subst$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$subst$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$$anonfun$succContents$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock$SuccessorList.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$BasicBlock.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$NoBasicBlock$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/BasicBlocks.class +INFO: Loading Class: scala/tools/nsc/backend/icode/CheckerException.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ExceptionHandlers$ExceptionHandler.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ExceptionHandlers$Finalizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ExceptionHandlers$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ExceptionHandlers.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$EmptyScope$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$1$$anonfun$apply$mcZ$sp$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$1$$anonfun$apply$mcZ$sp$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$1$$anonfun$apply$mcZ$sp$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$5$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$5$$anonfun$genWildcardHandler$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$9$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$String_valueOf$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$addClassFields$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$addClassFields$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genCond$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadArguments$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadLabelDef$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadMatch$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadMatch$1$3$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadMatch$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadMatch$1$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genLoadTry$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genStat$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genSynchronized$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$genSynchronized$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$getMaxType$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$getMaxType$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$mayCleanStack$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$4$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$4$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$prune0$1$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$resolveForwardLabel$1$$anonfun$applyOrElse$1$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$resolveForwardLabel$1$$anonfun$applyOrElse$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$resolveForwardLabel$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$$anonfun$scala$tools$nsc$backend$icode$GenICode$ICodePhase$$resolveForwardLabel$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Cleanup.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Context$$anonfun$Try$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Context$$anonfun$Try$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Context$$anonfun$exitScope$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Context.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$DuplicateLabels$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$DuplicateLabels$$anonfun$getLabel$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$DuplicateLabels$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$DuplicateLabels.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Finalizer$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$Finalizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$MonitorRelease$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase$MonitorRelease.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$ICodePhase.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$Label$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$Label$$anonfun$patch$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$Label.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PCJUMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PCJUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PCZJUMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PCZJUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PJUMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PJUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$PseudoJUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode$Scope.class +INFO: Loading Class: scala/tools/nsc/backend/icode/GenICode.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$1$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$append$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5$$anonfun$checkMethodArgs$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5$$anonfun$checkMethodArgs$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5$$anonfun$checkMethodArgs$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5$$anonfun$scala$tools$nsc$backend$icode$ICodeCheckers$ICodeChecker$$anonfun$$checkType$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$check$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$checkICodes$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$defaultInstrPrinter$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$ifAthenB$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$indent$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$initMaps$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$meet$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$meet$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$mkInstrPrinter$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$pushStackN$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$scala$tools$nsc$backend$icode$ICodeCheckers$ICodeChecker$$allUnits$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$scala$tools$nsc$backend$icode$ICodeCheckers$ICodeChecker$$popStackN$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker$$anonfun$scala$tools$nsc$backend$icode$ICodeCheckers$ICodeChecker$$pushStack$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers$ICodeChecker.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodeCheckers.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$$anonfun$checkValid$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$$anonfun$checkValid$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$$anonfun$dumpClassesAndAbort$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$ICodePhase$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$ICodePhase.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$icodeReader$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$liveness$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes$reachingDefinitions$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ICodes.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$DepthFirstLinerizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$DumpLinearizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$Linearizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$NormalLinearizer$$anonfun$linearize$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$NormalLinearizer$$anonfun$linearize$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$NormalLinearizer$$anonfun$linearize$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$NormalLinearizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$ReversePostOrderLinearizer$$anonfun$linearize$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$ReversePostOrderLinearizer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Linearizers.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$Code$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$Code$$anonfun$instructionCount$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$Code$$anonfun$instructions$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$Code$$anonfun$removeBlock$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$Code.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IClass$$anonfun$lookupMethod$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IClass$$anonfun$lookupStaticCtor$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IClass.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IField.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMember$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMember.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$addLocal$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$addLocal$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$lookupLocal$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$lookupLocal$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$6$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$6.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod$$anonfun$normalize$7.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$IMethod.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$Local.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$NoCode$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$NoIMethod$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Members.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$Instruction.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$BOX$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$BOX.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CALL_METHOD$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CALL_METHOD$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CALL_METHOD.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CALL_PRIMITIVE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CALL_PRIMITIVE.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CHECK_CAST$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CHECK_CAST.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CJUMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CJUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CONSTANT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CONSTANT.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CREATE_ARRAY$$anonfun$consumedTypes$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CREATE_ARRAY$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CREATE_ARRAY.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CZJUMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$CZJUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$DROP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$DROP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$DUP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$DUP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$Dynamic$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$INVOKE_DYNAMIC$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$INVOKE_DYNAMIC.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$IS_INSTANCE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$IS_INSTANCE.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$InvokeStyle.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$JUMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$JUMP.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_ARRAY_ITEM$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_ARRAY_ITEM.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_EXCEPTION$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_EXCEPTION.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_FIELD$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_FIELD.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_LOCAL$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_LOCAL.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_MODULE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$LOAD_MODULE.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$MONITOR_ENTER$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$MONITOR_ENTER.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$MONITOR_EXIT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$MONITOR_EXIT.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$NEW$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$NEW.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$RETURN$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$RETURN.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SCOPE_ENTER$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SCOPE_ENTER.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SCOPE_EXIT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SCOPE_EXIT.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_ARRAY_ITEM$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_ARRAY_ITEM.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_FIELD$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_FIELD.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_LOCAL$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_LOCAL.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_THIS$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$STORE_THIS.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SWITCH$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SWITCH.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$Static$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$Static.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SuperCall$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$SuperCall.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$THIS$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$THIS.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$THROW$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$THROW.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$UNBOX$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes$opcodes$UNBOX.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Opcodes.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ADD$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$AND$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ASR$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Arithmetic$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Arithmetic.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ArithmeticOp.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ArrayLength$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ArrayLength.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$CMP$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$CMPG$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$CMPL$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Comparison$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Comparison.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ComparisonOp.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Conversion$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Conversion.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$DIV$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$EQ$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$EndConcat$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$GE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$GT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$LE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$LSL$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$LSR$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$LT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Logical$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Logical.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$LogicalOp.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$MUL$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$NE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$NOT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Negation$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Negation.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$OR$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Primitive.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$PrimitivePrinter.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$REM$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$SUB$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Shift$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Shift.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$ShiftOp.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$StartConcat$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$StringConcat$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$StringConcat.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Test$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$Test.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$TestOp.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$XOR$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Primitives.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Printers$TextPrinter$$anonfun$printExceptionHandler$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Printers$TextPrinter$$anonfun$printMethod$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Printers$TextPrinter.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Printers$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Printers.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ReferenceEquality$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/ReferenceEquality.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Repository$$anonfun$load$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Repository$$anonfun$load$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Repository$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/Repository.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$lub0$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$primitiveOrClassType$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$primitiveOrRefType$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$scala$tools$nsc$backend$icode$TypeKinds$$arrayOrClassType$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$scala$tools$nsc$backend$icode$TypeKinds$$reversePrimitiveMap$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$toTypeKind$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$$anonfun$toTypeKind$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$ARRAY$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$ARRAY.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$BOOL$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$BOXED$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$BOXED.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$BYTE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$CHAR$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$ConcatClass$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$DOUBLE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$FLOAT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$INT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$LONG$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$REFERENCE$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$REFERENCE.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$SHORT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$TypeKind.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$UNIT$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$ValueTypeKind$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$ValueTypeKind.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeKinds.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeStacks$TypeStack.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeStacks$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/TypeStacks.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$AllRecords$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Boxed$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Boxed.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Const$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Const.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$blockTransfer$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$cleanReferencesTo$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$cleanReferencesTo$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$init$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$init$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$init$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$init$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$interpret$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$interpret$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$interpret$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$invalidateRecords$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$invalidateRecords$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$invalidateRecords$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$run$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$run$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$cleanRecord$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$getBindingsForPrimaryCtor$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$getBindingsForPrimaryCtor$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$getBindingsForPrimaryCtor$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$getBindingsForPrimaryCtor$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$getBindingsForPrimaryCtor$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$getBindingsForPrimaryCtor$6.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$retain$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$retain$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$CopyPropagation$CopyAnalysis$$retain$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$CopyAnalysis.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Deref$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Deref.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Field$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Field.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$LocalVar$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$LocalVar.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Location.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Record$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Record.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$This$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Unknown$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$Value.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$copyLattice$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$copyLattice$$anonfun$lub2$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$copyLattice$$anonfun$lub2$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$copyLattice$$anonfun$lub2$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$copyLattice$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation$copyLattice$State.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/CopyPropagation.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis$$anonfun$backwardAnalysis$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis$$anonfun$forwardAnalysis$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis$$anonfun$forwardAnalysis$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/DataFlowAnalysis.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$genAndKill$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$init$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$init$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$init$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$run$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$run$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$LivenessAnalysis.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$livenessLattice$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$livenessLattice$bottom$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness$livenessLattice$top$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/Liveness.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/LubException.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ProgramPoint.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$findDefs$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$genAndKill$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$genAndKill$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$init$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$init$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$init$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$init$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$run$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$run$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$ReachingDefinitions$ReachingDefinitionsAnalysis$$dropsAndGen$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$scala$tools$nsc$backend$icode$analysis$ReachingDefinitions$ReachingDefinitionsAnalysis$$dropsAndGen$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis$$anonfun$updateReachingDefinition$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$ReachingDefinitionsAnalysis.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$rdefLattice$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$rdefLattice$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$rdefLattice$$anonfun$lub2$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions$rdefLattice$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/ReachingDefinitions.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/SemiLattice$$anonfun$lub$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/SemiLattice$IState$$anonfun$scala$tools$nsc$backend$icode$analysis$SemiLattice$IState$$tstring$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/SemiLattice$IState$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/SemiLattice$IState.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/SemiLattice$class.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/SemiLattice.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$CallsiteInfo$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$CallsiteInfo.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$blankOut$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$conclusives$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$knownBeforehand$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$knownBeforehand$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$populatePerimeter$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$populatePerimeter$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$populatePerimeter$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$populatePerimeter$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$run$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$run$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$run$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$run$6$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$run$6.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$putOnRadar$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$putOnRadar$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$putOnRadar$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$putOnRadar$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$putOnRadar$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$transitivePreds$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable$$anonfun$scala$tools$nsc$backend$icode$analysis$TypeFlowAnalysis$MTFAGrowable$$transitivePreds$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MTFAGrowable.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$init$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$init$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$init$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$init$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$init$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$run$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$$anonfun$run$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Bind$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Bind.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Const$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Const.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Gen.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$InferredType.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Push$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$Push.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$TransferFunction.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$TypeOfStackPos$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$TypeOfStackPos.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$TypeOfVar$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA$TypeOfVar.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$MethodTFA.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$Timer.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$VarBinding.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$typeFlowLattice$$anonfun$lub2$1.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$typeFlowLattice$$anonfun$lub2$3.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$typeFlowLattice$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$typeLattice$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$typeStackLattice$$anonfun$lub2$2.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis$typeStackLattice$.class +INFO: Loading Class: scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/AsmUtils$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/AsmUtils.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genBlock$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genBlock$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genLoad$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genLoad$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genMatch$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genMatch$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genMatch$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genMatch$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genNormalMethodCall$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genNormalMethodCall$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder$PlainBodyBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeBodyBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeGlue$BType$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeGlue$BType.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeGlue$MethodNameAndType$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeGlue$MethodNameAndType.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeGlue.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$addInnerClassesASM$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$addInnerClassesASM$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$addInnerClassesASM$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$addInnerClassesASM$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$addInnerClassesASM$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$addInnerClassesASM$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$fieldSymbols$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$fieldSymbols$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$initBytecodeWriter$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$initBytecodeWriter$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$jvmWiseLUB$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$jvmWiseLUB$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$methodSymbols$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$$anonfun$serialVUID$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$7$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAnnotations$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAnnotations$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAnnotations$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAnnotations$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAnnotations$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitArgument$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitArgument$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAssocs$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitAssocs$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitParamAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitParamAnnotations$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitParamAnnotations$3$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$$anonfun$emitParamAnnotations$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCAnnotGen.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCClassGen$EnclMethodEntry$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCClassGen$EnclMethodEntry.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCClassGen$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCClassGen.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$addForwarders$4$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$addForwarders$4$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$addForwarders$4$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$addForwarders$4$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$addForwarders$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$conflictingNames$lzycompute$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$getExceptions$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$getExceptions$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$$anonfun$scala$tools$nsc$backend$jvm$BCodeHelpers$BCForwardersGen$$addForwarder$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCForwardersGen.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$5$$anonfun$apply$6$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$5$$anonfun$apply$6$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$5$$anonfun$apply$6$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$5$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$6$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$asmMethodType$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$primitiveOrRefType$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$toTypeKind$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$toTypeKind$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$$anonfun$toTypeKind$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCInnerClassGen.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCJGenSigGen$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCJGenSigGen.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCPickles$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$BCPickles.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$CClassWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JAndroidBuilder$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JAndroidBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder$$anonfun$genBeanInfoClass$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder$$anonfun$genBeanInfoClass$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder$$anonfun$genBeanInfoClass$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder$$anonfun$genBeanInfoClass$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBeanInfoBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JCommonBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$JMirrorBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$isJavaEntryPoint$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$isJavaEntryPoint$$anonfun$apply$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$isJavaEntryPoint$$anonfun$apply$1$$anonfun$apply$mcZ$sp$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$isJavaEntryPoint$$anonfun$apply$1$$anonfun$apply$mcZ$sp$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$isJavaEntryPoint$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers$isJavaEntryPoint$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeHelpers.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeICodeCommon$$anonfun$isLiteral$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeICodeCommon$$anonfun$isNull$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeICodeCommon.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$arrayOf$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$$anonfun$mkFlags$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$InsnIterInsnList.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$InsnIterMethodNode.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$JCodeMethodN$$anonfun$emitT2T$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$JCodeMethodN$$anonfun$emitT2T$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$JCodeMethodN$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$JCodeMethodN.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic$LabelDefsFinder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeIdiomatic.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$genDefDef$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$genDefDef$5$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$genDefDef$5$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$genDefDef$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$initJClass$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$paramTKs$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$programPoint$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$$anonfun$resetMethodBookkeeping$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$Local$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$Local.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$bc$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$locals$$anonfun$getOrMakeLocal$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder$locals$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder$PlainSkelBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSkelBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$$anonfun$mayCleanStack$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$BoundEH$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$BoundEH.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$EHClause.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$NamelessEH$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder$NamelessEH.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry$SyncAndTryBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeSyncAndTry.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$allInterfaces$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$exemplar$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$exemplar$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$exemplar$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$getSuperInterfaces$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$getSuperInterfaces$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$getSuperInterfaces$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$7.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$8.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$initBCodeTypes$9.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$isDeprecated$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$isTopLevelModule$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$maxType$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$minimizeInterfaces$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$minimizeInterfaces$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$nonInterfaces$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$saveInnerClassesFor$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$saveInnerClassesFor$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$$anonfun$saveInnerClassesFor$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$InnerClassEntry$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$InnerClassEntry.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$Tracked$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$Tracked$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$Tracked$$anonfun$directMemberClasses_$eq$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$Tracked$$anonfun$directMemberClasses_$eq$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$Tracked$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes$Tracked.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BCodeTypes.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$$anon$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$$anon$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$$anon$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$$anonfun$outputDirectory$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$AsmpBytecodeWriter$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$AsmpBytecodeWriter$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$AsmpBytecodeWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$BytecodeWriter$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$BytecodeWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$ClassBytecodeWriter$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$ClassBytecodeWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$DirectToJarfileWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$DumpBytecodeWriter$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$DumpBytecodeWriter$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$DumpBytecodeWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/BytecodeWriters.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/FileConflictException.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$33.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$getGenericSignature$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$isTopLevelModule$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$needsGenericSignature$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$$anonfun$scala$tools$nsc$backend$jvm$GenASM$$mkFlags$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase$$anonfun$run$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$AsmPhase.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$BlockInteval$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$BlockInteval.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$CClassWriter.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JAndroidBuilder$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JAndroidBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder$$anonfun$genBeanInfoClass$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder$$anonfun$genBeanInfoClass$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder$$anonfun$genBeanInfoClass$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder$$anonfun$genBeanInfoClass$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBeanInfoBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$addInnerClasses$4$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$isDeprecated$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder$$anonfun$javaType$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$11$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$addForwarders$4$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$addForwarders$4$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$addForwarders$4$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$addForwarders$4$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$addForwarders$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$conflictingNames$lzycompute$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAnnotations$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAnnotations$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAnnotations$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAnnotations$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAnnotations$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitArgument$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitArgument$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAssocs$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitAssocs$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitParamAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitParamAnnotations$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitParamAnnotations$3$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$emitParamAnnotations$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$getExceptions$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$getExceptions$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder$$anonfun$scala$tools$nsc$backend$jvm$GenASM$JCommonBuilder$$addForwarder$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JCommonBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JMirrorBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$computeLocalVarsIndex$1$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$computeLocalVarsIndex$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$computeLocalVarsIndex$3$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$computeLocalVarsIndex$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$emitT2T$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$emitT2T$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genBlock$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genCode$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genCode$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genCode$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genExceptionHandlers$1$1$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genExceptionHandlers$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genExceptionHandlers$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genExceptionHandlers$1$3$$anonfun$apply$18$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genExceptionHandlers$1$3$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genExceptionHandlers$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genJumpInstr$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genJumpInstr$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genJumpInstr$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genJumpInstr$1$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genJumpInstr$1$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genLocalVariableTable$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genLocalVariableTable$1$3$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genLocalVariableTable$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genLocalVariableTable$1$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genLocalVariableTable$1$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genMethod$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$genMethod$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$getSuperInterfaces$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$isClosureApply$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$$anonfun$minimizeInterfaces$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$EnclMethodEntry$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$EnclMethodEntry.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$Interval$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$Interval$4$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$LineNumberEntry$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$LineNumberEntry$4$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$LocVarEntry$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$LocVarEntry$4$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$jcode$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$getMerged$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$getMerged$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$getMerged$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$getMerged$4$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$getMerged$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$$anonfun$popScope$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder$scoping$2$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$JPlainBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$MethodNameAndType$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$MethodNameAndType.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$3$$anonfun$apply$24.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$3$$anonfun$apply$25.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$4.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$5.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$6$$anonfun$apply$26.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$collapseJumpOnlyBlocks$6.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$computeDetour$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$elimUnreachableBlocks$3$$anonfun$apply$27.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$elimUnreachableBlocks$3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$elimUnreachableBlocks$4$$anonfun$apply$28.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$firstNonIcodeOnlyInstructions$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$rephraseGotos$1$2$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$rephraseGotos$1$2$$anonfun$replaceLastInstruction$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$rephraseGotos$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$$anonfun$scala$tools$nsc$backend$jvm$GenASM$newNormal$$lookup$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM$newNormal$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenASM.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Item1$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Item1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Item2$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Item2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Item3$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Item3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$SubItem3$.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$SubItem3.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Worker1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase$Worker2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$BCodePhase.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode$PlainClassBuilder.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenBCode.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM$$anonfun$isJavaEntryPoint$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM$$anonfun$isJavaEntryPoint$1$$anonfun$apply$mcZ$sp$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM$$anonfun$isJavaEntryPoint$1$$anonfun$apply$mcZ$sp$2.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM$$anonfun$isJavaEntryPoint$1.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM$class.class +INFO: Loading Class: scala/tools/nsc/backend/jvm/GenJVMASM.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$$anon$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2$$anonfun$replaceFieldAccess$1$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2$$anonfun$replaceFieldAccess$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim$$anonfun$analyzeMethod$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureElim.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$ClosureEliminationPhase.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$PeepholeOpt$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination$PeepholeOpt.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ClosureElimination.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizationPhase.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$interpretInst$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$scala$tools$nsc$backend$opt$ConstantOptimization$ConstantOptimizer$$canSwitch$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$updateInputStates$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$$anonfun$updateInputStates$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Boxed$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Boxed.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Const$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Const.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Contents.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Datum.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Impossible$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Impossible.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Possible$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$Possible.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$State$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$State$$anonfun$mergeLocals$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$State$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer$State.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization$ConstantOptimizer.class +INFO: Loading Class: scala/tools/nsc/backend/opt/ConstantOptimization.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$addDefs$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$addDefs$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$addDefs$1$3$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$addDefs$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1$$anonfun$apply$2$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1$$anonfun$apply$2$$anonfun$5$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1$$anonfun$apply$2$$anonfun$5$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1$$anonfun$apply$2$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$collectRDef$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$computeCompensations$1$$anonfun$apply$19$$anonfun$apply$20$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$computeCompensations$1$$anonfun$apply$19$$anonfun$apply$20$$anonfun$apply$22$$anonfun$apply$23.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$computeCompensations$1$$anonfun$apply$19$$anonfun$apply$20$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$computeCompensations$1$$anonfun$apply$19$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$computeCompensations$1$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$computeCompensations$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$2$$anonfun$apply$7$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$6$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$mark$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$scala$tools$nsc$backend$opt$DeadCodeElimination$DeadCode$$findInstruction$1$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$scala$tools$nsc$backend$opt$DeadCodeElimination$DeadCode$$findInstruction$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$scala$tools$nsc$backend$opt$DeadCodeElimination$DeadCode$$isLoadNeeded$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2$$anonfun$apply$12$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2$$anonfun$apply$12$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2$$anonfun$apply$12$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode$$anonfun$sweep$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCode.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination$DeadCodeEliminationPhase.class +INFO: Loading Class: scala/tools/nsc/backend/opt/DeadCodeElimination.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$findExceptionHandler$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$findExceptionHandler$1$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$findExceptionHandler$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$applyBasicBlock$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$duplicateExceptionHandler$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$duplicateExceptionHandler$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$duplicateExceptionHandlerCache$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$getTypesAtBlockEntry$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$getTypesAtBlockEntry$5$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$getTypesAtBlockEntry$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$getTypesAtInstruction$1$$anonfun$apply$mcVI$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$handlerLocal$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$handlerLocal$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase$$anonfun$scala$tools$nsc$backend$opt$InlineExceptionHandlers$InlineExceptionHandlersPhase$$handlerLocal$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers$InlineExceptionHandlersPhase.class +INFO: Loading Class: scala/tools/nsc/backend/opt/InlineExceptionHandlers.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$$anonfun$lookupImplFor$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$$anonfun$scala$tools$nsc$backend$opt$Inliners$$lookup$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeClass$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeClass$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeClass$3$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeClass$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$10.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$11.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$12.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$5$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$5$$anonfun$apply$2$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$5$$anonfun$apply$2$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$5$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$6$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$6$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$8.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$analyzeMethod$9.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$inlineWithoutTFA$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$inlineWithoutTFA$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$inlineWithoutTFA$1$3$$anonfun$apply$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$inlineWithoutTFA$1$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$inlineWithoutTFA$1$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$lookupIMethod$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$lookupIMethod$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$analyzeInc$1$4$$anonfun$6$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$analyzeInc$1$4$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$analyzeInc$1$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$containsRETURN$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$inlineLog$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$inlineLog$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$isHigherOrderMethod$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$isHigherOrderMethod$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$ownedName$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$ownedName$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$ownedName$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$warnNoInline$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$$warnNoInline$1$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$AccessReq$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$AccessReq.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$doInline$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$doInline$3.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$doInline$5$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$doInline$5$$anonfun$scala$tools$nsc$backend$opt$Inliners$Inliner$CallerCalleeInfo$$anonfun$$emitDrops$1$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$doInline$5.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$doInline$6.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$isStampedForInlining$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$isStampedForInlining$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo$$anonfun$isStampedForInlining$4.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$CallerCalleeInfo.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$DontInlineHere$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$DontInlineHere.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$FeasibleInline$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$FeasibleInline.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$IMethodInfo$$anonfun$accessRequirements$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$IMethodInfo$$anonfun$accessRequirements$2.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$IMethodInfo$$anonfun$hasNonFinalizerHandler$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$IMethodInfo$$anonfun$openBlocks$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$IMethodInfo.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$InlineSafetyInfo.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$InlineableAtThisCaller$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$NeverSafeToInline$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$NonPublicRefs$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner$imethodOrdering$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$Inliner.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$InliningPhase$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$InliningPhase$iclassOrdering$.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners$InliningPhase.class +INFO: Loading Class: scala/tools/nsc/backend/opt/Inliners.class +INFO: Loading Class: scala/tools/nsc/doc/DocFactory$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/DocFactory$$anon$2.class +INFO: Loading Class: scala/tools/nsc/doc/DocFactory$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/DocFactory$NoCompilerRunException$.class +INFO: Loading Class: scala/tools/nsc/doc/DocFactory$compiler$.class +INFO: Loading Class: scala/tools/nsc/doc/DocFactory.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$$anonfun$scala$tools$nsc$doc$DocParser$$loop$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$$anonfun$scala$tools$nsc$doc$DocParser$$loop$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$Parsed$$anonfun$nameChain$1.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$Parsed$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser$Parsed.class +INFO: Loading Class: scala/tools/nsc/doc/DocParser.class +INFO: Loading Class: scala/tools/nsc/doc/Index.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anon$2.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineAlias$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineAlias$1$1$$anonfun$apply$3$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineAlias$1$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineAlias$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineUseCases$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineUseCases$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$defineUseCases$2.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$typedDocDef$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$typedDocDef$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$$anonfun$typedDocDef$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper$class.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$ScaladocTyper.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer$class.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocAnalyzer.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocGlobal$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocGlobal.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocGlobalTrait$$anon$2.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocGlobalTrait$$anon$3.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocGlobalTrait$class.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocGlobalTrait.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocJavaUnitParser.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocJavaUnitScanner.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitParser$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitParser$$anonfun$joinComment$1.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitParser$$anonfun$joinComment$2.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitParser$$anonfun$joinComment$3$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitParser$$anonfun$joinComment$3.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitParser.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitScanner$unmooredParser$.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer$ScaladocUnitScanner.class +INFO: Loading Class: scala/tools/nsc/doc/ScaladocSyntaxAnalyzer.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$$lessinit$greater$default$2$1.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$extUrlMapping$1.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$hiddenImplicits$1.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$$anonfun$uncompilableFiles$1.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$$anonfun$valueClassFilter$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/Settings$hardcoded$.class +INFO: Loading Class: scala/tools/nsc/doc/Settings.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$docPairs$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$docSymbol$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$pairs$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$pairs$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$symbols$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$templates$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$$anonfun$toString$2.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable$class.class +INFO: Loading Class: scala/tools/nsc/doc/Uncompilable.class +INFO: Loading Class: scala/tools/nsc/doc/Universe.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anon$1$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anon$1$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$25$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$clean$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$parse0$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$$anonfun$parse0$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$CharReader$$anonfun$jumpWhitespace$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$CharReader$$anonfun$readUntil$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$CharReader$$anonfun$readUntil$2.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$CharReader$$anonfun$readUntil$3.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$CharReader.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$SimpleTagKey$.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$SimpleTagKey.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$SymbolTagKey$.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$SymbolTagKey.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$TagKey.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$33.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$34.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser$$anonfun$checkList$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$WikiParser.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase$class.class +INFO: Loading Class: scala/tools/nsc/doc/base/CommentFactoryBase.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkTo.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkToExternal$.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkToExternal.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkToMember$.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkToMember.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkToTpl$.class +INFO: Loading Class: scala/tools/nsc/doc/base/LinkToTpl.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$7$$anonfun$linkName$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$7$$anonfun$linkName$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$cleanupBogusClasses$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$$anonfun$completeSearch$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$BothTypeAndTerm$.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$OnlyTerm$.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$OnlyType$.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$SearchStrategy.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase$class.class +INFO: Loading Class: scala/tools/nsc/doc/base/MemberLookupBase.class +INFO: Loading Class: scala/tools/nsc/doc/base/Tooltip$.class +INFO: Loading Class: scala/tools/nsc/doc/base/Tooltip.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Block.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body$$anonfun$scala$tools$nsc$doc$base$comment$Body$$summaryInBlock$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body$$anonfun$scala$tools$nsc$doc$base$comment$Body$$summaryInBlock$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body$$anonfun$scala$tools$nsc$doc$base$comment$Body$$summaryInBlock$1$3.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body$$anonfun$scala$tools$nsc$doc$base$comment$Body$$summaryInInline$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Body.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Bold$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Bold.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Chain$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Chain.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Code$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Code.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Comment$$anonfun$scala$tools$nsc$doc$base$comment$Comment$$scan$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Comment$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Comment.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/DefinitionList$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/DefinitionList.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/EntityLink$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/EntityLink$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/EntityLink.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/HorizontalRule$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/HorizontalRule.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/HtmlTag$$anonfun$close$1.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/HtmlTag$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/HtmlTag.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Inline.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Italic$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Italic.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Link$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Link.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Monospace$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Monospace.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/OrderedList$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/OrderedList.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Paragraph$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Paragraph.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Subscript$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Subscript.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Summary$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Summary.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Superscript$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Superscript.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Text$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Text.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Title$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Title.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Underline$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/Underline.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/UnorderedList$.class +INFO: Loading Class: scala/tools/nsc/doc/base/comment/UnorderedList.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Generator$$anonfun$generate$1.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Generator.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Indexer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Indexer$class.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Indexer.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Universer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Universer$class.class +INFO: Loading Class: scala/tools/nsc/doc/doclet/Universer.class +INFO: Loading Class: scala/tools/nsc/doc/html/Doclet.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlFactory$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlFactory$$anonfun$generate$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlFactory$$anonfun$generate$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlFactory$$anonfun$scala$tools$nsc$doc$html$HtmlFactory$$writeTemplate$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlFactory.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage$$anonfun$blockToHtml$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage$$anonfun$bodyToHtml$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage$$anonfun$inlineToHtml$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage$$anonfun$listItemsToHtml$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage$$anonfun$writeFor$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage$$anonfun$writeFor$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/HtmlPage.class +INFO: Loading Class: scala/tools/nsc/doc/html/Page$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/Page.class +INFO: Loading Class: scala/tools/nsc/doc/html/SyntaxHigh$.class +INFO: Loading Class: scala/tools/nsc/doc/html/SyntaxHigh.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$letters$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$scala$tools$nsc$doc$html$page$Index$$packageElem$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$scala$tools$nsc$doc$html$page$Index$$packageElem$1$2$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$scala$tools$nsc$doc$html$page$Index$$packageElem$1$2$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$scala$tools$nsc$doc$html$page$Index$$packageElem$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$scala$tools$nsc$doc$html$page$Index$$packageElem$1$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index$$anonfun$scala$tools$nsc$doc$html$page$Index$$packageElem$1$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Index.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$1$$anonfun$3$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$allPackages$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$allPackagesWithTemplates$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$allPackagesWithTemplates$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$mergeByQualifiedName$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$mergeByQualifiedName$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$scala$tools$nsc$doc$html$page$IndexScript$$f$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript$$anonfun$writeFor$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/IndexScript.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/ReferenceIndex$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/ReferenceIndex$$anonfun$body$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/ReferenceIndex$$anonfun$scala$tools$nsc$doc$html$page$ReferenceIndex$$entry$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/ReferenceIndex$$anonfun$scala$tools$nsc$doc$html$page$ReferenceIndex$$entry$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/ReferenceIndex.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Source.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$25$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$28$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$31$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$31$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$33$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$33.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$34$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$34.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$35$$anonfun$36.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$35$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$35.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$37$$anonfun$38.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$37$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$37.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$39$$anonfun$40.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$39$$anonfun$41.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$39$$anonfun$42.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$39$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$39.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$43$$anonfun$44.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$43$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$43.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$45.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$bodyToStr$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$inside$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$inside$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$memberToHtml$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$paramsToHtml$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$scala$tools$nsc$doc$html$page$Template$$codeStringToXml$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$scala$tools$nsc$doc$html$page$Template$$indentation$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$scala$tools$nsc$doc$html$page$Template$$inlineToStr$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$scala$tools$nsc$doc$html$page$Template$$transitive$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$scala$tools$nsc$doc$html$page$Template$$transitive$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$treeToHtml$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$$anonfun$treeToHtml$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template$.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/Template.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DiagramGenerator$.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DiagramGenerator.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DiagramStats$.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DiagramStats$TimeTracker.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DiagramStats.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$14$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$flatten$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$generateDot$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$scala$tools$nsc$doc$html$page$diagram$DotDiagramGenerator$$transform$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$scala$tools$nsc$doc$html$page$diagram$DotDiagramGenerator$$transform$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator$$anonfun$scala$tools$nsc$doc$html$page$diagram$DotDiagramGenerator$$transform$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotDiagramGenerator.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotProcess$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotProcess$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotProcess$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotProcess.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotRunner$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/html/page/diagram/DotRunner.class +INFO: Loading Class: scala/tools/nsc/doc/model/AbstractType$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/AbstractType.class +INFO: Loading Class: scala/tools/nsc/doc/model/AliasType$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/AliasType.class +INFO: Loading Class: scala/tools/nsc/doc/model/Annotation$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Annotation.class +INFO: Loading Class: scala/tools/nsc/doc/model/BoundedTypeParamConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/BoundedTypeParamConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/Class$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Class.class +INFO: Loading Class: scala/tools/nsc/doc/model/CommentFactory$$anonfun$comment$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/CommentFactory$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/CommentFactory.class +INFO: Loading Class: scala/tools/nsc/doc/model/Constraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/Constructor$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Constructor.class +INFO: Loading Class: scala/tools/nsc/doc/model/Def$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Def.class +INFO: Loading Class: scala/tools/nsc/doc/model/DocTemplateEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/Entity$$anonfun$EntityOrdering$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/Entity$.class +INFO: Loading Class: scala/tools/nsc/doc/model/Entity$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Entity.class +INFO: Loading Class: scala/tools/nsc/doc/model/EqualTypeParamConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/EqualTypeParamConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/HigherKinded.class +INFO: Loading Class: scala/tools/nsc/doc/model/ImplicitConversion.class +INFO: Loading Class: scala/tools/nsc/doc/model/ImplicitInScopeConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ImplicitInScopeConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/ImplicitMemberShadowing$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ImplicitMemberShadowing.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$$anon$1$$anonfun$scala$tools$nsc$doc$model$IndexModelFactory$$anon$$gather$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$$anon$1$$anonfun$scala$tools$nsc$doc$model$IndexModelFactory$$anon$$gather$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$$anon$1$result$2$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$$anon$1$result$2$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$$anon$1$result$2$.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory$.class +INFO: Loading Class: scala/tools/nsc/doc/model/IndexModelFactory.class +INFO: Loading Class: scala/tools/nsc/doc/model/KnownTypeClassConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/KnownTypeClassConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/LowerBoundedTypeParamConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/LowerBoundedTypeParamConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberEntity$$anonfun$MemberEntityOrdering$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberEntity$.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup$$anonfun$chooseLink$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup$$anonfun$findExternalLink$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup$$anonfun$internalLink$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup$$anonfun$internalLink$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberLookup.class +INFO: Loading Class: scala/tools/nsc/doc/model/MemberTemplateEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$13.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$14.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$15.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$16.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$17.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$18.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19$$anonfun$29$$anon$22.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19$$anonfun$30$$anon$23.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$19.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$20$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$20$$anonfun$defaultValue$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$20$$anonfun$defaultValue$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$20.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$21.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$8.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anon$9.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$findMember$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$isEmptyJavaObject$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$isPureBridge$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$makeMember$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$makeParentTypes$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$makeTemplate$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$makeTemplate$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$scala$tools$nsc$doc$model$ModelFactory$$makeNoDocTemplate$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$scala$tools$nsc$doc$model$ModelFactory$$makeTemplateOrMemberTemplate$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$$anonfun$templatesCount$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$AliasImpl$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$AliasImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$abstractTypes$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$aliasTypes$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$completeModel$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$completeModel$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$completeModel$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$constructors$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$groupDescription$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$groupName$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$groupPriority$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$groupSearch$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$groupSearch$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$memberSyms$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$methods$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$outgoingImplicitlyConvertedClasses$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$outgoingImplicitlyConvertedClasses$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$primaryConstructor$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$sourceUrl$1$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$sourceUrl$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$templates$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$valueParams$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$valueParams$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl$$anonfun$values$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$DocTemplateImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$EntityImpl$$anonfun$annotations$1$$typecreator1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$EntityImpl$$anonfun$annotations$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$EntityImpl$$anonfun$annotations$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$EntityImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$HigherKindedImpl$$anonfun$typeParams$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$HigherKindedImpl$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$HigherKindedImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberImpl$$anonfun$6$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberImpl$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberImpl$$anonfun$inDefinitionTemplates$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberImpl$$anonfun$scala$tools$nsc$doc$model$ModelFactory$MemberImpl$$tParams$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberTemplateImpl$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$MemberTemplateImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$NoDocTemplateImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$NonTemplateMemberImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$NonTemplateParamMemberImpl$$anonfun$valueParams$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$NonTemplateParamMemberImpl$$anonfun$valueParams$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$NonTemplateParamMemberImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$PackageImpl$$anonfun$packages$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$PackageImpl$$anonfun$reprSymbol$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$PackageImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$ParameterImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$RootPackageImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$TemplateImpl$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$TemplateImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$TypeBoundsImpl$$anonfun$hi$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$TypeBoundsImpl$$anonfun$lo$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$TypeBoundsImpl$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$TypeBoundsImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$1$$anonfun$memberSyms$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$10.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$11.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$12.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anon$7.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anonfun$25$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$$anonfun$createTemplate$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory$modelCreation$.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactory.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$11$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$isDistinguishableFrom$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$isDistinguishableFrom$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$isDistinguishableFrom$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$isDistinguishableFrom$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anon$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anon$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anon$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anon$7.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeBoundedConstraints$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConstraints$1$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConstraints$1$$anon$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConstraints$1$$anon$8.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConstraints$1$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConstraints$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConversions$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeImplicitConversions$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$apply$5$$anon$9.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$apply$5$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$apply$5$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeShadowingTable$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeSubstitutionConstraints$1$$anon$3$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeSubstitutionConstraints$1$$anon$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$$anonfun$makeSubstitutionConstraints$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$convertorOwner$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$5$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$7$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$7.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$8.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl$$anonfun$memberImpls$9.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitConversionImpl.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$ImplicitNotFound.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$typeVarToOriginOrWildcard$.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport$wildcardToNothing$.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryImplicitSupport.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport$$anon$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport$$anon$1$$anonfun$scala$tools$nsc$doc$model$ModelFactoryTypeSupport$class$$anon$$appendInfoStringReduced$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport$$anon$1$$anonfun$scala$tools$nsc$doc$model$ModelFactoryTypeSupport$class$$anon$$typeParamsToString$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport$$anonfun$makeType$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/ModelFactoryTypeSupport.class +INFO: Loading Class: scala/tools/nsc/doc/model/NoDocTemplate$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/NoDocTemplate.class +INFO: Loading Class: scala/tools/nsc/doc/model/NonTemplateMemberEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/Object$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Object.class +INFO: Loading Class: scala/tools/nsc/doc/model/Package$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Package.class +INFO: Loading Class: scala/tools/nsc/doc/model/ParameterEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/PrivateInInstance$.class +INFO: Loading Class: scala/tools/nsc/doc/model/PrivateInInstance.class +INFO: Loading Class: scala/tools/nsc/doc/model/PrivateInTemplate$.class +INFO: Loading Class: scala/tools/nsc/doc/model/PrivateInTemplate.class +INFO: Loading Class: scala/tools/nsc/doc/model/ProtectedInInstance$.class +INFO: Loading Class: scala/tools/nsc/doc/model/ProtectedInInstance.class +INFO: Loading Class: scala/tools/nsc/doc/model/ProtectedInTemplate$.class +INFO: Loading Class: scala/tools/nsc/doc/model/ProtectedInTemplate.class +INFO: Loading Class: scala/tools/nsc/doc/model/Public$.class +INFO: Loading Class: scala/tools/nsc/doc/model/Public.class +INFO: Loading Class: scala/tools/nsc/doc/model/RootPackage.class +INFO: Loading Class: scala/tools/nsc/doc/model/TemplateEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/Trait$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Trait.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeFactory$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeFactory$$anon$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeFactory$$anon$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeFactory$$anonfun$makeTree$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeFactory$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/TreeFactory.class +INFO: Loading Class: scala/tools/nsc/doc/model/TypeClassConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/TypeClassConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/TypeEntity.class +INFO: Loading Class: scala/tools/nsc/doc/model/TypeParam.class +INFO: Loading Class: scala/tools/nsc/doc/model/TypeParamConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/UpperBoundedTypeParamConstraint$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/UpperBoundedTypeParamConstraint.class +INFO: Loading Class: scala/tools/nsc/doc/model/Val$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Val.class +INFO: Loading Class: scala/tools/nsc/doc/model/ValueArgument.class +INFO: Loading Class: scala/tools/nsc/doc/model/ValueParam.class +INFO: Loading Class: scala/tools/nsc/doc/model/Visibility$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/Visibility.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ClassNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ClassNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagram$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagram.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$5$$anonfun$6$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$5$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$5$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ContentDiagramDepth.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DepthInfo.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/Diagram.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$$anonfun$makeDiagramFilter$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$AnnotationDiagramFilter$$anonfun$hideEdge$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$AnnotationDiagramFilter$$anonfun$hideEdge$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$AnnotationDiagramFilter$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$AnnotationDiagramFilter.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$DiagramFilter.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$FullDiagram$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$NoDiagramAtAll$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramDirectiveParser.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$10$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$17$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$filterDiagram$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$incomingImplicitNodes$lzycompute$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$listSuperClasses$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$listSuperClasses$1$2.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$listSuperClasses$1$3.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$$anonfun$outgoingImplicitNodes$lzycompute$1$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory$class.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/DiagramFactory.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ImplicitNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ImplicitNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/InheritanceDiagram$$anon$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/InheritanceDiagram$$anonfun$edges$1.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/InheritanceDiagram$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/InheritanceDiagram.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/Node$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/Node.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/NormalNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/NormalNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ObjectNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ObjectNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/OtherNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/OtherNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/OutsideNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/OutsideNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ThisNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/ThisNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/TraitNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/TraitNode.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/TypeNode$.class +INFO: Loading Class: scala/tools/nsc/doc/model/diagram/TypeNode.class +INFO: Loading Class: scala/tools/nsc/interactive/CancelException$.class +INFO: Loading Class: scala/tools/nsc/interactive/CancelException.class +INFO: Loading Class: scala/tools/nsc/interactive/CommentPreservingTypers$class.class +INFO: Loading Class: scala/tools/nsc/interactive/CommentPreservingTypers.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$$anonfun$askForResponse$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$$anonfun$askReload$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$$anonfun$doLocateContext$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$$anonfun$locateTree$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$$anonfun$onUnitOf$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskDocCommentItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskDocCommentItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskLinkPosItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskLinkPosItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskLoadedTypedItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskLoadedTypedItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskParsedEnteredItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskParsedEnteredItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskScopeCompletionItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskScopeCompletionItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskToDoFirstItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskTypeAtItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskTypeAtItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskTypeCompletionItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskTypeCompletionItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskTypeItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$AskTypeItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$FilesDeletedItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$FilesDeletedItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$Member.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$NoWorkScheduler$$anon$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$NoWorkScheduler$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$NoWorkScheduler.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$ReloadItem$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$ReloadItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$ScopeMember$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$ScopeMember.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$TypeMember$.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$TypeMember.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$WorkItem.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl$class.class +INFO: Loading Class: scala/tools/nsc/interactive/CompilerControl.class +INFO: Loading Class: scala/tools/nsc/interactive/CondPickler.class +INFO: Loading Class: scala/tools/nsc/interactive/ContextTrees$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/ContextTrees$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/ContextTrees$$anonfun$addContext$1.class +INFO: Loading Class: scala/tools/nsc/interactive/ContextTrees$ContextTree.class +INFO: Loading Class: scala/tools/nsc/interactive/ContextTrees$class.class +INFO: Loading Class: scala/tools/nsc/interactive/ContextTrees.class +INFO: Loading Class: scala/tools/nsc/interactive/FreshRunReq.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anon$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anon$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anon$8.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$13$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$13$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$13$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$13$$anonfun$liftedTree1$1$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$afterRunRemoveUnitsOf$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$3$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$5$$anonfun$apply$8$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$5$$anonfun$apply$8$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$5$$anonfun$apply$8$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$5$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$backgroundCompile$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$checkNoOutstanding$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$checkNoOutstanding$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$checkNoOutstanding$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$cleanResponses$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$cleanResponses$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$cleanResponses$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$filesDeleted$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$filesDeleted$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$filesDeleted$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$forceSymbolsUsedByParser$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getDocComment$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getDocComment$2$$anonfun$apply$16$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getDocComment$2$$anonfun$apply$16$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getDocComment$2$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getDocComment$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getLinkPos$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getLinkPos$2$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getLinkPos$2$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getLinkPos$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getOrCreateUnitOf$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getScopeCompletion$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getScopeCompletion$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getTypeCompletion$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getTypeCompletion$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getTypedTree$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getTypedTreeAt$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getUnit$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$getUnit$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$10.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$6.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$7.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$8.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1$$anonfun$apply$mcV$sp$9.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$pollForWork$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$reload$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$reload$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$respond$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$addScopeMember$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$addTypeMember$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$findMirrorSymbol$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$findMirrorSymbol$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$findMirrorSymbol$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$forceDocComment$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$getParsedEnteredNow$1$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$getParsedEnteredNow$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$parseAndEnter$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$scopeMembers$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$scopeMembers$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$scopeMembers$3$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$scopeMembers$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$serviceParsedEntered$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$serviceParsedEntered$2$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$serviceParsedEntered$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typeCheck$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typeMembers$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typeMembers$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typeMembers$3$$anonfun$apply$20$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typeMembers$3$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typeMembers$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typedTreeAt$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typedTreeAt$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typedTreeAt$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$typedTreeAt$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$viewApply$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$viewApply$1$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$scala$tools$nsc$interactive$Global$$withTempUnit$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$signalDone$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$syncTopLevelSyms$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$$anonfun$typedTree$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$InteractiveAsSeenFromMap.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$Members$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$Members$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$Members$$anonfun$addNonShadowed$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$Members$$anonfun$addNonShadowed$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$Members$$anonfun$matching$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$Members.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$OnTypeError.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$ResponseMap.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$TyperResult.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$TyperRun$$anonfun$applyPhase$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$TyperRun.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$WorkEvent$.class +INFO: Loading Class: scala/tools/nsc/interactive/Global$WorkEvent.class +INFO: Loading Class: scala/tools/nsc/interactive/Global.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$$anon$6.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$$anon$7.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$InteractiveNamer$$anonfun$enterExistingSym$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$InteractiveNamer$$anonfun$enterExistingSym$2.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$InteractiveNamer$class.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$InteractiveNamer.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$InteractiveTyper$class.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$InteractiveTyper.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer$class.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveAnalyzer.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveReporter$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveReporter$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveReporter$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interactive/InteractiveReporter.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$$anonfun$putAcceptString$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$$anonfun$quoted$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$Delim$.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$Delim.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$FloatLit$.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$FloatLit.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$IntLit$.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$IntLit.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$MalformedInput.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$StringLit$.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$StringLit.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer$Token.class +INFO: Loading Class: scala/tools/nsc/interactive/Lexer.class +INFO: Loading Class: scala/tools/nsc/interactive/LogReplay.class +INFO: Loading Class: scala/tools/nsc/interactive/Logger.class +INFO: Loading Class: scala/tools/nsc/interactive/Main$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Main$.class +INFO: Loading Class: scala/tools/nsc/interactive/Main.class +INFO: Loading Class: scala/tools/nsc/interactive/MissingResponse.class +INFO: Loading Class: scala/tools/nsc/interactive/NoSuchUnitError.class +INFO: Loading Class: scala/tools/nsc/interactive/NullLogger$.class +INFO: Loading Class: scala/tools/nsc/interactive/NullLogger.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$10$$anonfun$unpickle$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$10.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$3$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$3$$anonfun$unpickle$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$4$$anonfun$unpickle$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$4$$anonfun$unpickle$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$6$$anonfun$unpickle$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$6.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$7$$anonfun$unpickle$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$7.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$8$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$8$$anonfun$pickle$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$8.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anon$9.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$asClass$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$booleanPickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$javaInstancePickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$javaInstancePickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$listPickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$listPickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$scala$tools$nsc$interactive$Pickler$$errorExpected$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$singletonPickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$singletonPickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$singletonPickler$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple2Pickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple2Pickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple2Pickler$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple3Pickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple3Pickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple3Pickler$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$anonfun$tuple3Pickler$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$tilde$.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$$tilde.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$TildeDecorator.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$UnpickleFailure.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$UnpickleSuccess$.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$UnpickleSuccess.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler$Unpickled.class +INFO: Loading Class: scala/tools/nsc/interactive/Pickler.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anon$2$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$abstractFile$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$abstractFile$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$10.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$6.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$7.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$8.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$action$9.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askDocCommentItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askDocCommentItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askDocCommentItem$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askDocCommentItem$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askDocCommentItem$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askLinkPosItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askLinkPosItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askLinkPosItem$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askLoadedTypedItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askLoadedTypedItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askParsedEnteredItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askParsedEnteredItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askParsedEnteredItem$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askScopeCompletionItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askScopeCompletionItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askToDoFirstItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askToDoFirstItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeAtItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeAtItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeCompletionItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeCompletionItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$askTypeItem$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$defaultThrowable$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$emptyAction$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$emptyAction$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$freshRunReq$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$freshRunReq$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$freshRunReq$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$interruptReq$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$interruptReq$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$namePickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$namePickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$offsetPosition$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$offsetPosition$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$offsetPosition$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$ownerNames$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$position$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$position$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$position$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$rangePosition$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$rangePosition$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$rangePosition$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$rangePosition$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$rangePosition$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$reloadItem$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$reloadItem$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$sourceFile$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$sourceFile$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$sourceFile$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$symPickler$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$symPickler$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$throwable$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$throwable$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$transparentPosition$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$transparentPosition$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$transparentPosition$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$transparentPosition$4.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$transparentPosition$5.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$workEvent$1.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$workEvent$2.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$$anonfun$workEvent$3.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers$class.class +INFO: Loading Class: scala/tools/nsc/interactive/Picklers.class +INFO: Loading Class: scala/tools/nsc/interactive/PresentationCompilerThread$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/interactive/PresentationCompilerThread$$anonfun$run$7.class +INFO: Loading Class: scala/tools/nsc/interactive/PresentationCompilerThread$.class +INFO: Loading Class: scala/tools/nsc/interactive/PresentationCompilerThread.class +INFO: Loading Class: scala/tools/nsc/interactive/PrettyWriter.class +INFO: Loading Class: scala/tools/nsc/interactive/Problem$.class +INFO: Loading Class: scala/tools/nsc/interactive/Problem.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL$$anonfun$run$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL$$anonfun$show$1.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL$.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL$compiler$2$.class +INFO: Loading Class: scala/tools/nsc/interactive/REPL.class +INFO: Loading Class: scala/tools/nsc/interactive/RangePositions$class.class +INFO: Loading Class: scala/tools/nsc/interactive/RangePositions.class +INFO: Loading Class: scala/tools/nsc/interactive/Replayer.class +INFO: Loading Class: scala/tools/nsc/interactive/Response.class +INFO: Loading Class: scala/tools/nsc/interactive/RichCompilationUnits$RichCompilationUnit.class +INFO: Loading Class: scala/tools/nsc/interactive/RichCompilationUnits$class.class +INFO: Loading Class: scala/tools/nsc/interactive/RichCompilationUnits.class +INFO: Loading Class: scala/tools/nsc/interactive/ShutdownReq$.class +INFO: Loading Class: scala/tools/nsc/interactive/ShutdownReq.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTest$$anonfun$runDefaultTests$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTest.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTestSettings$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTestSettings$$anonfun$adjustPaths$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTestSettings$$anonfun$adjustPaths$1$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTestSettings$$anonfun$adjustPaths$1$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTestSettings$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/InteractiveTestSettings.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$askReload$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$askScopeCompletion$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$askTypeAt$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$askTypeCompletion$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$doTest$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$doTest$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$errorCount$1$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$testFileChanges$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$testFileChanges$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$$anonfun$testFileChanges$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$Change.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$ErrorTrace$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester$ErrorTrace.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/Tester.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskCommand$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskCommand.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskLoadedTyped$$anonfun$askLoadedTyped$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskLoadedTyped$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskLoadedTyped.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskParse$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskParse$$anonfun$askParse$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskParse$$anonfun$scala$tools$nsc$interactive$tests$core$AskParse$$askParse$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskParse$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskParse.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskReload$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskReload$$anonfun$askReload$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskReload$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskReload.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskScopeCompletionAt$$anonfun$askScopeCompletionAt$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskScopeCompletionAt$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskScopeCompletionAt.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskShutdown$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskShutdown.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskTypeAt$$anonfun$askTypeAt$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskTypeAt$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskTypeAt.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskTypeCompletionAt$$anonfun$askTypeCompletionAt$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskTypeCompletionAt$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/AskTypeCompletionAt.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/ConsoleReporter$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/ConsoleReporter.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$HyperlinkAction$$anonfun$runTest$7.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$HyperlinkAction$$anonfun$runTest$8$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$HyperlinkAction$$anonfun$runTest$8$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$HyperlinkAction$$anonfun$runTest$8.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$HyperlinkAction.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction$$anonfun$runTest$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction$$anonfun$runTest$4$$anonfun$apply$2$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction$$anonfun$runTest$4$$anonfun$apply$2$$anonfun$apply$mcV$sp$2$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction$$anonfun$runTest$4$$anonfun$apply$2$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction$$anonfun$runTest$4$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction$$anonfun$runTest$4.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$ScopeCompletionAction.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeAction$$anonfun$runTest$5.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeAction$$anonfun$runTest$6$$anonfun$apply$3$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeAction$$anonfun$runTest$6$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeAction$$anonfun$runTest$6.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeAction.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction$$anonfun$runTest$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction$$anonfun$runTest$2$$anonfun$apply$1$$anonfun$apply$mcV$sp$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction$$anonfun$runTest$2$$anonfun$apply$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction$$anonfun$runTest$2$$anonfun$apply$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction$$anonfun$runTest$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction$$anonfun$runTest$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$TypeCompletionAction.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/CoreTestDefs.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/DuplicateTestMarker$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/DuplicateTestMarker.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/HyperlinkMarker$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/HyperlinkMarker.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/NullReporter$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/NullReporter.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerInstance$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerInstance$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerInstance.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$allPositionsOf$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$allPositionsOf$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$askAllSources$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$askAllSources$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$askAllSources$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$askAllSources$2$$anonfun$apply$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$askAllSources$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$askAllSources$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$scala$tools$nsc$interactive$tests$core$PresentationCompilerRequestsWorkingMode$$askAllSourcesAsync$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$scala$tools$nsc$interactive$tests$core$PresentationCompilerRequestsWorkingMode$$askAllSourcesAsync$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$$anonfun$scala$tools$nsc$interactive$tests$core$PresentationCompilerRequestsWorkingMode$$askAllSourcesSync$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerRequestsWorkingMode.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerTestDef$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/PresentationCompilerTestDef.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/Reporter.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/ScopeCompletionMarker$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/ScopeCompletionMarker.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/SourcesCollector$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/SourcesCollector$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/SourcesCollector$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/SourcesCollector.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestMarker$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestMarker.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestResources$$anonfun$sourceFiles$1.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestResources$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestResources.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestSettings$class.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TestSettings.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TypeCompletionMarker$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TypeCompletionMarker.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TypeMarker$.class +INFO: Loading Class: scala/tools/nsc/interactive/tests/core/TypeMarker.class +INFO: Loading Class: scala/tools/nsc/interpreter/AbstractFileClassLoader.class +INFO: Loading Class: scala/tools/nsc/interpreter/AbstractOrMissingHandler$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/AbstractOrMissingHandler$.class +INFO: Loading Class: scala/tools/nsc/interpreter/AbstractOrMissingHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/CommandLine.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$Candidates$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$Candidates.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$Forwarder$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$Forwarder$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$NullCompleter$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion$ScalaCompleter.class +INFO: Loading Class: scala/tools/nsc/interpreter/Completion.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionAware$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionAware$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionAware$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionAware.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$$anonfun$quietString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput$$anonfun$braceList$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput$$anonfun$methodTypeToString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput$$anonfun$tparamsString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput$$anonfun$tupleString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$MethodSymbolOutput.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/CompletionOutput.class +INFO: Loading Class: scala/tools/nsc/interpreter/ConsoleReaderHelper$$anonfun$printColumns_$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ConsoleReaderHelper$$anonfun$printColumns_$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ConsoleReaderHelper$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/ConsoleReaderHelper.class +INFO: Loading Class: scala/tools/nsc/interpreter/Delimited$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Delimited$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Delimited.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$asExpr$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$symbolOfLine$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$symbolOfLine$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$symbolOfLine$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$typeOfExpression$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$$anonfun$typeOfTypeString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/ExprTyper.class +INFO: Loading Class: scala/tools/nsc/interpreter/Formatting$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Formatting$$anonfun$indentCode$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Formatting$$anonfun$indentCode$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Formatting$$anonfun$spaces$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Formatting$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Formatting.class +INFO: Loading Class: scala/tools/nsc/interpreter/IBindings$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IBindings$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IBindings.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anon$3$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anon$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anon$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$1$$anonfun$scala$tools$nsc$interpreter$ILoop$$anonfun$$fn$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$9$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$addToolsJarToLoader$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$addToolsJarToLoader$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$ambiguousError$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$chooseReader$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$command$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$edit$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$enablePowerMode$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$historicize$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$interpretAllFrom$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$interpretAllFrom$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$interpretAllFrom$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$isNum$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$javap$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$javap$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$loadCommand$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$matchingCommands$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$powerCommands$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$printWelcome$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$process$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$process$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$run$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$run$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$runForTranscript$1$$anonfun$apply$1$$anon$1$$anonfun$write$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$runForTranscript$1$$anonfun$apply$1$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$runForTranscript$1$$anonfun$apply$1$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$runForTranscript$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$runForTranscript$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$importsCommand$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$importsCommand$2$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$importsCommand$2$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$importsCommand$2$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$importsCommand$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$readWhile$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$readWhile$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$searchHistory$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$searchHistory$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$searchHistory$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$showSettings$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$11.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$12.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$13.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$14.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$15.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$16.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$17.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$18.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$19.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$20.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$standardCommands$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$uniqueCommand$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$unleashAndSetPhase$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$update$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$$anonfun$updateSettings$1$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$ILoopInterpreter$$anon$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$ILoopInterpreter.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$paste$$anonfun$transcript$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$paste$$anonfun$transcript$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop$paste$.class +INFO: Loading Class: scala/tools/nsc/interpreter/ILoop.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anon$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anon$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anon$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$8$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$allDefinedNames$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$allDefinedNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$allHandlers$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$backticked$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$bind$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$bind$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$bind$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$cleanMemberDecl$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$cleanTypeAfterTyper$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$debugging$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$definedSymbolList$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$definedSymbolList$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$definedTerms$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$earliestPosition$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$flatPath$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$getClassIfDefined$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$getClassIfDefined$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$getModuleIfDefined$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$getModuleIfDefined$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$importHandlers$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$initialize$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$isShow$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$mostRecentlyHandledTree$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$mostRecentlyHandledTree$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$namedDefinedTerms$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$onlyTerms$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$onlyTypes$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$originalPath$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$quietBind$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$quietRun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$recordRequest$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$requestFromLine$1$$anonfun$apply$10$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$requestFromLine$1$$anonfun$apply$10$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$requestFromLine$1$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$requestFromLine$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$resetClassLoader$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$runtimeClassAndTypeOfTerm$1$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$runtimeClassAndTypeOfTerm$1$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$runtimeClassAndTypeOfTerm$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$runtimeTypeOfTerm$1$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$runtimeTypeOfTerm$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$scala$tools$nsc$interpreter$IMain$$updateReplScope$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$showCodeIfDebugging$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$showCodeIfDebugging$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$symbolDefString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$symbolOfTerm$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$symbolOfType$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$unqualifiedIds$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$valueOfTerm$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$anonfun$withoutWarnings$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$$typecreator2$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$CodeAssembler$$anonfun$apply$24.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$CodeAssembler$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$CodeAssembler.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Factory$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Factory.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$PhaseDependentOps$$anonfun$path$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$PhaseDependentOps$$anonfun$path$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$PhaseDependentOps$$anonfun$sig$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$PhaseDependentOps.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$bindError$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$bindError$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$call$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$call$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$call$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$resolvePathToSymbol$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$resolvePathToSymbol$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$$anonfun$scala$tools$nsc$interpreter$IMain$ReadEvalPrint$$isWrapperInit$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint$EvalException.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReadEvalPrint.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReplStrippingWriter.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$ReplTypeOps.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$applyToResultMember$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$compile$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$compile$2$$anonfun$apply$15$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$compile$2$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$compile$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$compilerTypeOf$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$defHandlers$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$definedSymbols$1$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$definedSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$definedSymbols$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$defines$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$importedSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$lookupTypeOf$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$termNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$typeMap$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$typeNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$typeOf$1$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$typeOf$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$typesOfDefinedTerms$1$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$$anonfun$typesOfDefinedTerms$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$ClassBasedWrapper.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$ObjectBasedWrapper.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$ResultObjectSourceCode$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$ResultObjectSourceCode$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$Wrapper$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$Wrapper$$anonfun$preamble$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request$Wrapper.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$Request.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$StrippingTruncatingWriter.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$StrippingWriter$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$StrippingWriter.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$TranslatingClassLoader.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$TruncatingWriter$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$TruncatingWriter.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$WrappedRequest$$anonfun$loadAndRunReq$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$WrappedRequest$$anonfun$loadAndRunReq$1$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$WrappedRequest$$anonfun$loadAndRunReq$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$WrappedRequest.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$deconstruct$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$exprTyper$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$flatOp$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$naming$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$$anonfun$apply$23.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$Error$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$Incomplete$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$Result.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$Success$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$parse$Success.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$replOutput$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain$typerOp$.class +INFO: Loading Class: scala/tools/nsc/interpreter/IMain.class +INFO: Loading Class: scala/tools/nsc/interpreter/ISettings$$anonfun$allSettingsString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ISettings$$anonfun$allSettingsString$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ISettings.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$allImportedNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$allReqAndHandlers$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$allReqAndHandlers$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$implicitSymbolsBySource$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$implicitSymbolsBySource$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$implicitSymbolsBySource$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$importedTermSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$importsCode$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$importsCode$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$importsCode$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$importsCode$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$importsCode$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$languageSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$languageWildcardHandlers$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$reqsToUse$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$scala$tools$nsc$interpreter$Imports$$membersAtPickler$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$sessionImportedSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$sessionWildcards$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$$anonfun$sessionWildcards$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$ComputedImports$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$ComputedImports.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$ReqAndHandler$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$ReqAndHandler$4$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Imports.class +INFO: Loading Class: scala/tools/nsc/interpreter/InteractiveReader$$anonfun$readLine$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/InteractiveReader$$anonfun$readLine$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/InteractiveReader$.class +INFO: Loading Class: scala/tools/nsc/interpreter/InteractiveReader$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/InteractiveReader.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$$anonfun$imported$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$$anonfun$lastResult$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$$anonfun$lastResultFor$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$aliasNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$aliases$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$memberNamed$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$memberNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$members$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$members$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$methodNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$methods$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$packageNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$$anonfun$packages$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$CompilerCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$ImportCompletion$$anonfun$completions$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$ImportCompletion$$anonfun$completions$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$ImportCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion$$anonfun$complete$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion$$anonfun$complete$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion$$anonfun$lastResultCompletion$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion$$anonfun$tryAll$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion$$anonfun$tryAll$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$JLineTabCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$LiteralCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$NoTypeCompletion$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$PackageCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anonfun$exclude$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anonfun$exclude$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anonfun$filtered$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$$anonfun$methodSignatureString$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$TypeMemberCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$anyref$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$ids$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$javalang$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$literals$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$predef$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$rootClass$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$scalalang$$anonfun$skipArity$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion$scalalang$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineDelimiter.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineReader$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineReader$JLineConsoleReader.class +INFO: Loading Class: scala/tools/nsc/interpreter/JLineReader.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$JpError.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$JpResult$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$JpResult.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$JpSuccess.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$Lastly$$anonfun$lastly$extension$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$Lastly$$anonfun$lastly$extension$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$Lastly$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$Lastly.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap$Showable.class +INFO: Loading Class: scala/tools/nsc/interpreter/Javap.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$asNewStyle$1$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$bytesFor$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$scala$tools$nsc$interpreter$JavapClass$$findNewStyle$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$scala$tools$nsc$interpreter$JavapClass$$isEndPoint$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$scala$tools$nsc$interpreter$JavapClass$$targeted$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$tryFile$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$tryFile$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$$anonfun$tryFile$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$ClassLoaderOps$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$ClassLoaderOps$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$ClassLoaderOps$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$ClassLoaderOps$$anonfun$alldirs$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$ClassLoaderOps$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$ClassLoaderOps.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$25$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$26$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$26$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$funs$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$listFunsInAbsFile$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$listFunsInAbsFile$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$listFunsInDir$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$listFunsInDir$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$listFunsInJar$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$listFunsInJar$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$$anonfun$translate$4$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$FunFinder.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anon$3$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool$$anon$$writeLines$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anon$3$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool$$anon$$writeLines$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anon$3$$anonfun$show$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$isAvailable$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$massage$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool$$candidates$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool$$candidates$1$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool$$uniqueOf$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool$$uniqueOf$1$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$unpacked$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$unpacked$1$2$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$unpacked$1$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$unpacked$1$3$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$$anonfun$unpacked$1$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$Failer.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$JpOptions$$anonfun$apply$13$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$JpOptions$$anonfun$apply$13$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$JpOptions$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$JpOptions$Access$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$JpOptions.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$ToolArgs$$anonfun$fromArgs$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$ToolArgs$$anonfun$fromArgs$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$ToolArgs$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool$ToolArgs.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$apply$7$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$newEnv$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$newEnv$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$newPrinter$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$newPrinter$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool6$$result$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool6.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$apply$10$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool7$$applyOne$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool7$$applyOne$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool7$$applyOne$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$scala$tools$nsc$interpreter$JavapClass$JavapTool7$$applyOne$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$task$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$$anonfun$task$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavaReporter$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavaReporter$$anonfun$messages$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavaReporter.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavapFileManager$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavapFileManager$$anonfun$inputNamed$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavapFileManager$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7$JavapFileManager.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$JavapTool7.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$MaybeClassLike$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$MaybeClassLike.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$PathOps$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$PathOps.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$URLOps$.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass$URLOps.class +INFO: Loading Class: scala/tools/nsc/interpreter/JavapClass.class +INFO: Loading Class: scala/tools/nsc/interpreter/Logger.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$LineCmd.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$LoopCommand$$anonfun$nullary$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$LoopCommand$.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$LoopCommand.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$NullaryCmd.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$Result$.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$Result.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$VarArgsCmd.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/LoopCommands.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$$anonfun$codegen$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$AssignHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ClassHandler$$anonfun$definedSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ClassHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$DefHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$GenericHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$implicitSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$importsSymbolNamed$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$individualNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$individualSymbols$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$individualSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$selectorRenames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$selectorRenames$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$selectorWild$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$wildcardNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler$$anonfun$wildcardSymbols$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportVarsTraverser$.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ImportVarsTraverser.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$MacroHandler$$anonfun$referencedNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$MacroHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$MemberDefHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$MemberHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ModuleHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$TermMacroHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$TypeAliasHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$ValHandler.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/MemberHandlers.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParam$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParam$.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParam$Typed.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParam$Untyped.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParam$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParam.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParamClass$.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParamClass.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParamCreator$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/NamedParamCreator.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$$anonfun$unmangle$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$$anonfun$unmangle$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$NameCreator$$anonfun$didGenerate$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$NameCreator.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$SessionNames$$anonfun$propOr$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$SessionNames$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$SessionNames.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Naming.class +INFO: Loading Class: scala/tools/nsc/interpreter/NoCompletion$.class +INFO: Loading Class: scala/tools/nsc/interpreter/NoCompletion.class +INFO: Loading Class: scala/tools/nsc/interpreter/Parsed$$anonfun$dotted$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Parsed$$anonfun$withVerbosity$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Parsed$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Parsed.class +INFO: Loading Class: scala/tools/nsc/interpreter/Pasted$PasteAnalyzer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Pasted$PasteAnalyzer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Pasted$PasteAnalyzer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Pasted$PasteAnalyzer.class +INFO: Loading Class: scala/tools/nsc/interpreter/Pasted.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$$anonfun$multi$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$$anonfun$parseInternal$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$$anonfun$parsePhaseChange$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Cleanup$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Closelim$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Constructors$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Dce$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Delambdafy$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Erasure$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Explicitouter$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Flatten$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Icode$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Inliner$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Jvm$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Lambdalift$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Lazyvals$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Liftcode$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Mixin$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Namer$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$NoPhaseName$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Packageobjects$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Parser$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$PhaseName$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$PhaseName$$anonfun$nameMap$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$PhaseName$$anonfun$phaseNameOrdering$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$PhaseName$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$PhaseName.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Pickler$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Refchecks$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Selectiveanf$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Selectivecps$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Specialize$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Superaccessors$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Tailcalls$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Terminal$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Typer$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$Uncurry$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Phased.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$$anonfun$unleash$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$$anonfun$unleash$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits1$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits2$$anonfun$powerSymbolOrdering$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits2$$anonfun$powerTypeOrdering$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits2$RichSymbol.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits2$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits2$symbolSubtypeOrdering$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Implicits2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$InternalInfo$$anonfun$members$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$InternalInfo$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$InternalInfo.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$InternalInfoWrapper$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$InternalInfoWrapper.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityInternalInfo$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityInternalInfo.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityInternalInfoWrapper.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$AnyPrettifier$$anonfun$prettify$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$AnyPrettifier$$anonfun$prettify$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$AnyPrettifier$$anonfun$prettify$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$AnyPrettifier$$anonfun$prettify$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$AnyPrettifier$$anonfun$show$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$AnyPrettifier$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$LowPriorityPrettifier.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$MultiPrettifierClass.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PackageSlurper$$anonfun$droppedEnough$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PackageSlurper$$anonfun$slurp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PackageSlurper.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Prettifier$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Prettifier$$anonfun$prettify$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Prettifier$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Prettifier$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$Prettifier.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$$greater$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$$greater$bang$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$$greater$greater$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$freq$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$freq$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$freq$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass$$anonfun$pp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$PrettifierClass.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$$anonfun$clazz$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$$anonfun$module$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$$anonfun$sanitize$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$ReplUtilities.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$RichInputStream$$anonfun$bytes$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$RichInputStream$$anonfun$slurp$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$RichInputStream.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$RichReplString.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$RichReplURL.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$SinglePrettifierClass.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$StringPrettifier$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$SymSlurper$$anonfun$loop$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$SymSlurper$$anonfun$loop$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$SymSlurper$$anonfun$loop$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$SymSlurper$$anonfun$loop$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power$SymSlurper.class +INFO: Loading Class: scala/tools/nsc/interpreter/Power.class +INFO: Loading Class: scala/tools/nsc/interpreter/ProcessResult$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ProcessResult.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$$anonfun$logAndDiscard$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$$anonfun$logAndDiscard$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$$anonfun$logAndDiscard$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$TapMaker$$anonfun$tapDebug$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$TapMaker$$anonfun$tapDebug$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$TapMaker.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplConfig.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplDir.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$$anon$1$$anon$2$$anonfun$typed$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$$anon$1$$anon$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$$anon$1$$anon$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$$anon$1$$anonfun$findMacroClassLoader$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$replPhase$$anon$4$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$replPhase$$anon$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal$replPhase$.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplGlobal.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplOutput$$anonfun$scala$tools$nsc$interpreter$ReplOutput$$pp$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplOutput.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplProps.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplRealDir.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplReporter$$anonfun$printUntruncatedMessage$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplReporter.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplStrings$$anonfun$string2code$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplStrings$$anonfun$words$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplStrings$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplStrings.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplVals$$anonfun$mkCompilerTypeFromTag$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplVals$.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplVals$AppliedTypeFromTags$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplVals.class +INFO: Loading Class: scala/tools/nsc/interpreter/ReplVirtualDir.class +INFO: Loading Class: scala/tools/nsc/interpreter/Results$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Results$Error$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Results$Incomplete$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Results$Result.class +INFO: Loading Class: scala/tools/nsc/interpreter/Results$Success$.class +INFO: Loading Class: scala/tools/nsc/interpreter/Results.class +INFO: Loading Class: scala/tools/nsc/interpreter/RichClass$$anonfun$interfaces$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/RichClass$$anonfun$scala$tools$nsc$interpreter$RichClass$$loop$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/RichClass$$anonfun$superNames$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/RichClass$$anonfun$supertags$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/RichClass.class +INFO: Loading Class: scala/tools/nsc/interpreter/SimpleMath$.class +INFO: Loading Class: scala/tools/nsc/interpreter/SimpleMath$DivRem$.class +INFO: Loading Class: scala/tools/nsc/interpreter/SimpleMath$DivRem.class +INFO: Loading Class: scala/tools/nsc/interpreter/SimpleMath.class +INFO: Loading Class: scala/tools/nsc/interpreter/SimpleReader$.class +INFO: Loading Class: scala/tools/nsc/interpreter/SimpleReader.class +INFO: Loading Class: scala/tools/nsc/interpreter/StdReplTags$.class +INFO: Loading Class: scala/tools/nsc/interpreter/StdReplTags$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/StdReplTags.class +INFO: Loading Class: scala/tools/nsc/interpreter/StdReplVals$ReplImplicits.class +INFO: Loading Class: scala/tools/nsc/interpreter/StdReplVals$treedsl$.class +INFO: Loading Class: scala/tools/nsc/interpreter/StdReplVals.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$$anonfun$columnize$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$$anonfun$fits$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/Tabulator.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$7$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$maxima$1$1$$anonfun$apply$mcII$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$maxima$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$printMultiLineColumns$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$$anonfun$printMultiLineColumns$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/VariColumnTabulator.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$$anon$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$$anonfun$debugging$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$$anonfun$javaCharSeqCollectionToScala$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$echoKind$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$echoTypeSignature$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$echoTypeStructure$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$9$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$apply$5$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$implicitsCommand$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$kindCommandInternal$4$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$kindCommandInternal$4.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$scala$tools$nsc$interpreter$IMainOps$$typeFromFullName$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$scala$tools$nsc$interpreter$IMainOps$$typeFromNameTreatedAsTerm$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps$$anonfun$typeFromTypeString$1$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/package$IMainOps.class +INFO: Loading Class: scala/tools/nsc/interpreter/package.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$$anonfun$load$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$$anonfun$load$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$$anonfun$load$2.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$$anonfun$load$3.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory$class.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/FileBackedHistory.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/History.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/JLineHistory$.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/JLineHistory$JLineFileHistory$$anonfun$add$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/JLineHistory$JLineFileHistory.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/JLineHistory.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/NoHistory$.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/NoHistory.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/SimpleHistory$$anonfun$fail$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/SimpleHistory$$anonfun$toEntries$1.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/SimpleHistory$Entry$.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/SimpleHistory$Entry.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/SimpleHistory.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/package$.class +INFO: Loading Class: scala/tools/nsc/interpreter/session/package.class +INFO: Loading Class: scala/tools/nsc/io/Jar$$anonfun$foreach$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/io/Jar$$anonfun$foreach$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/io/Jar$$anonfun$foreach$1.class +INFO: Loading Class: scala/tools/nsc/io/Jar$$anonfun$manifest$1.class +INFO: Loading Class: scala/tools/nsc/io/Jar$.class +INFO: Loading Class: scala/tools/nsc/io/Jar$WManifest$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/io/Jar$WManifest$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/io/Jar$WManifest$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/io/Jar$WManifest$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/io/Jar$WManifest$.class +INFO: Loading Class: scala/tools/nsc/io/Jar$WManifest.class +INFO: Loading Class: scala/tools/nsc/io/Jar.class +INFO: Loading Class: scala/tools/nsc/io/JarWriter$$anonfun$addDirectory$1.class +INFO: Loading Class: scala/tools/nsc/io/JarWriter$$anonfun$writeAllFrom$1.class +INFO: Loading Class: scala/tools/nsc/io/JarWriter.class +INFO: Loading Class: scala/tools/nsc/io/Socket$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/io/Socket$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/io/Socket$.class +INFO: Loading Class: scala/tools/nsc/io/Socket$Box$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/io/Socket$Box$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/io/Socket$Box$$anonfun$handlerFn$1.class +INFO: Loading Class: scala/tools/nsc/io/Socket$Box.class +INFO: Loading Class: scala/tools/nsc/io/Socket.class +INFO: Loading Class: scala/tools/nsc/io/SourceReader$.class +INFO: Loading Class: scala/tools/nsc/io/SourceReader.class +INFO: Loading Class: scala/tools/nsc/io/package$.class +INFO: Loading Class: scala/tools/nsc/io/package.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaOpInfo$.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaOpInfo.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$interfacesOpt$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$optThrows$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$scala$tools$nsc$javac$JavaParsers$JavaParser$$forwarders$1$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$scala$tools$nsc$javac$JavaParsers$JavaParser$$implWithImport$1$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser$$anonfun$typeBodyDecls$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaParser.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$JavaUnitParser.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers$class.class +INFO: Loading Class: scala/tools/nsc/javac/JavaParsers.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$AbstractJavaScanner.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$AbstractJavaTokenData.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaScanner$JavaTokenData0.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaScanner.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaScannerConfiguration$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaScannerConfiguration$.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaTokenData$class.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaTokenData.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaUnitScanner$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$JavaUnitScanner.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners$class.class +INFO: Loading Class: scala/tools/nsc/javac/JavaScanners.class +INFO: Loading Class: scala/tools/nsc/javac/JavaTokens$.class +INFO: Loading Class: scala/tools/nsc/javac/JavaTokens.class +INFO: Loading Class: scala/tools/nsc/package$.class +INFO: Loading Class: scala/tools/nsc/package.class +INFO: Loading Class: scala/tools/nsc/plugins/MissingPluginException.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$loadDescriptionFromFile$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$options$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$options$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$scala$tools$nsc$plugins$Plugin$$loadDescriptionFromJar$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$scala$tools$nsc$plugins$Plugin$$loadDescriptionFromJar$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$scala$tools$nsc$plugins$Plugin$$scan$1$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$scala$tools$nsc$plugins$Plugin$$scan$1$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$$anonfun$scala$tools$nsc$plugins$Plugin$$scan$1$3.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin$.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugin.class +INFO: Loading Class: scala/tools/nsc/plugins/PluginComponent.class +INFO: Loading Class: scala/tools/nsc/plugins/PluginDescription$.class +INFO: Loading Class: scala/tools/nsc/plugins/PluginDescription.class +INFO: Loading Class: scala/tools/nsc/plugins/PluginLoadException.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$computePluginPhases$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$computePluginPhases$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$3.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$4.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$5$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadPlugins$5.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadRoughPluginsList$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadRoughPluginsList$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$loadRoughPluginsList$2.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$pluginDescriptions$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$pluginOptionsHelp$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$$anonfun$pluginOptionsHelp$1.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins$class.class +INFO: Loading Class: scala/tools/nsc/plugins/Plugins.class +INFO: Loading Class: scala/tools/nsc/reporters/AbstractReporter.class +INFO: Loading Class: scala/tools/nsc/reporters/ConsoleReporter.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$$anon$1.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$$anon$2.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$$anon$3.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$$anonfun$error$1.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$$anonfun$warning$1.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$Severity.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter$severity$.class +INFO: Loading Class: scala/tools/nsc/reporters/Reporter.class +INFO: Loading Class: scala/tools/nsc/reporters/StoreReporter$Info$.class +INFO: Loading Class: scala/tools/nsc/reporters/StoreReporter$Info.class +INFO: Loading Class: scala/tools/nsc/reporters/StoreReporter.class +INFO: Loading Class: scala/tools/nsc/settings/AbsScalaSettings.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$checkDependencies$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$checkDependencies$2$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$checkDependencies$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$checkDependencies$2.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$lookupSetting$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$recreateArgs$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$userSetSettings$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$$anonfun$visibleSettings$1.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$AbsSetting$class.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$AbsSetting.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$InternalSetting$class.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$InternalSetting.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings$class.class +INFO: Loading Class: scala/tools/nsc/settings/AbsSettings.class +INFO: Loading Class: scala/tools/nsc/settings/AnyScalaVersion$.class +INFO: Loading Class: scala/tools/nsc/settings/AnyScalaVersion.class +INFO: Loading Class: scala/tools/nsc/settings/Development$.class +INFO: Loading Class: scala/tools/nsc/settings/Development.class +INFO: Loading Class: scala/tools/nsc/settings/Final$.class +INFO: Loading Class: scala/tools/nsc/settings/Final.class +INFO: Loading Class: scala/tools/nsc/settings/FscSettings$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/settings/FscSettings$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/settings/FscSettings$$anonfun$absolutize$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/settings/FscSettings$$anonfun$absolutize$1.class +INFO: Loading Class: scala/tools/nsc/settings/FscSettings$$anonfun$processArguments$1.class +INFO: Loading Class: scala/tools/nsc/settings/FscSettings.class +INFO: Loading Class: scala/tools/nsc/settings/Milestone$.class +INFO: Loading Class: scala/tools/nsc/settings/Milestone.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$copyInto$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$copyInto$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$copyInto$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$getClasspath$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$parseColonArg$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$parseColonArg$1$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$parseNormalArg$1$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$parseNormalArg$1$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$$anonfun$prefixSettings$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$BooleanSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$ChoiceSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$andThen$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$disabling$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$disabling$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$enabling$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$enabling$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$enablingIfNotSetByUser$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings$$anonfun$enablingIfNotSetByUser$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$EnableSettings.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$IntSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$MultiChoiceSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$MultiStringSetting$$anonfun$tryToSet$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$MultiStringSetting$$anonfun$unparse$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$MultiStringSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$OutputDirs$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$OutputDirs$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$OutputDirs$$anonfun$srcFilesFor$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$OutputDirs.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$OutputSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PathSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$10$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$containsName$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$phaseIdTest$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$unparse$2.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting$$anonfun$v_$eq$1.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PhasesSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$PrefixSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$ScalaVersionSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$Setting$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$Setting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings$StringSetting.class +INFO: Loading Class: scala/tools/nsc/settings/MutableSettings.class +INFO: Loading Class: scala/tools/nsc/settings/NoScalaVersion$.class +INFO: Loading Class: scala/tools/nsc/settings/NoScalaVersion.class +INFO: Loading Class: scala/tools/nsc/settings/RC$.class +INFO: Loading Class: scala/tools/nsc/settings/RC.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaBuild.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$defaultClasspath$1.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$isICodeAskedFor$1.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$$anonfun$isInfo$1.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$MacroExpand$.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings$class.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaSettings.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaVersion$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaVersion$$anonfun$isInt$1$1.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaVersion$.class +INFO: Loading Class: scala/tools/nsc/settings/ScalaVersion.class +INFO: Loading Class: scala/tools/nsc/settings/SpecificScalaVersion$.class +INFO: Loading Class: scala/tools/nsc/settings/SpecificScalaVersion.class +INFO: Loading Class: scala/tools/nsc/settings/StandardScalaSettings$class.class +INFO: Loading Class: scala/tools/nsc/settings/StandardScalaSettings.class +INFO: Loading Class: scala/tools/nsc/settings/Warnings$class.class +INFO: Loading Class: scala/tools/nsc/settings/Warnings.class +INFO: Loading Class: scala/tools/nsc/symtab/BrowsingLoaders$BrowserTraverser$1$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/symtab/BrowsingLoaders$BrowserTraverser$1.class +INFO: Loading Class: scala/tools/nsc/symtab/BrowsingLoaders.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$$anonfun$enterIfNew$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$ClassfileLoader$$anonfun$doComplete$4.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$ClassfileLoader$$anonfun$doComplete$5.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$ClassfileLoader$classfileParser$.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$ClassfileLoader.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$PackageLoader$$anonfun$doComplete$2.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$PackageLoader$$anonfun$doComplete$3.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$PackageLoader.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$SourcefileLoader.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$SymbolLoader.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders$moduleClassLoader$.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoaders.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoadersStats$.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolLoadersStats.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTable.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$$anonfun$scala$tools$nsc$symtab$SymbolTrackers$$SymbolOrdering$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$Change$.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$Change.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$Hierarchy$class.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$Hierarchy.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$6$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$dropSymbol$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$removedString$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$scala$tools$nsc$symtab$SymbolTrackers$SymbolTracker$$NodeOrdering$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$snapshot$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$snapshot$2.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$symbolSnapshot$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$symbolSnapshot$2.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$$anonfun$symbolSnapshot$3.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$descendents$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$flagSummaryString$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$flatten$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$indentString$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$indentString$2.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$$anonfun$nodes$1.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node$.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker$Node.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$SymbolTracker.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers$class.class +INFO: Loading Class: scala/tools/nsc/symtab/SymbolTrackers.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/AbstractFileReader.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$accept$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$enterOwnInnerClasses$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$loadClassSymbol$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$loadClassSymbol$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parse$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseClass$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseField$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseInnerClasses$1$$anonfun$apply$mcVI$sp$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseInnerClasses$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseMethod$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseParents$1$1$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$parseParents$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$processClassType$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$processClassType$1$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$processClassType$1$3.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$processClassType$1$4.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$processClassType$1$5.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$enterClassAndModule$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseAttribute$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseAttribute$1$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseAttribute$1$3.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseAttribute$1$4.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseAttribute$1$5.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseErrorHandler$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseScalaLongSigBytes$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$parseScalaSigBytes$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$scala$tools$nsc$symtab$classfile$ClassfileParser$$sigToType$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$sig2type$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$$anonfun$sig2type$1$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$ConstantPool$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$ConstantPool.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$InnerClassEntry$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$InnerClassEntry.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$LazyAliasType$$anonfun$complete$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$LazyAliasType.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$TypeParamsType.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$innerClasses$$anonfun$add$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$innerClasses$$anonfun$add$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$innerClasses$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser$unpickler$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ClassfileParser.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$forceMangledName$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$forceMangledName$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$forceMangledName$1$$anonfun$apply$mcV$sp$3$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$forceMangledName$1$$anonfun$apply$mcV$sp$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$forceMangledName$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$forceMangledName$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseInstruction$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseInstruction$1$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseInstruction$1$4.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseJumpTarget$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseMember$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseMember$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$parseMethod$3.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$$anonfun$readClass$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$3.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$4.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$5.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$6.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool$$anonfun$getMemberSymbol$7.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$ICodeConstantPool.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anon$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$checkValidIndex$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$makeBasicBlocks$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveDups$1$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveDups$1$$anonfun$apply$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveDups$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveDups$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveNEWs$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveNEWs$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$resolveNEWs$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$toBasicBlock$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$$anonfun$toBasicBlock$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$DUP2_X1$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$DUP2_X2$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$DUP_X1$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$DUP_X2$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$DupX.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LCJUMP$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LCJUMP.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LCZJUMP$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LCZJUMP.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LJUMP$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LJUMP.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LSWITCH$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LSWITCH.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode$LazyJump.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader$LinearCode.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/ICodeReader.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$nonClassRoot$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$putSymbol$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$putSymbol$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$scala$tools$nsc$symtab$classfile$Pickler$Pickle$$putClassfileAnnotArg$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$writeArray$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$writeBody$1$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$$anonfun$writeBody$1$2.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$putTreeTraverser$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle$writeTreeBodyTraverser$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$Pickle.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$PicklePhase$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler$PicklePhase.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/Pickler.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/package$.class +INFO: Loading Class: scala/tools/nsc/symtab/classfile/package.class +INFO: Loading Class: scala/tools/nsc/symtab/package$.class +INFO: Loading Class: scala/tools/nsc/symtab/package.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anon$1$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anon$1$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$13$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$6$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$implClass$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$implClass$1$$anonfun$apply$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$implClass$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$implClass$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$implClassDefs$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$scala$tools$nsc$transform$AddInterfaces$$addMixinConstructorCalls$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$scala$tools$nsc$transform$AddInterfaces$$ifaceMemberDef$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$scala$tools$nsc$transform$AddInterfaces$$ifaceTemplate$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$$anonfun$scala$tools$nsc$transform$AddInterfaces$$implMemberDef$1.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$ChangeOwnerAndReturnTraverser.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType$$anonfun$complete$2.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType$$anonfun$implDecls$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType$$anonfun$implDecls$3$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType$$anonfun$implDecls$3.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces$LazyImplClassType.class +INFO: Loading Class: scala/tools/nsc/transform/AddInterfaces.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$$anonfun$getEntryPoints$2.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$callAsReflective$1$1$$anonfun$isJavaValueMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$callAsReflective$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$getSymbolStaticField$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$scala$tools$nsc$transform$CleanUp$CleanUpTransformer$$paramsToString$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$scala$tools$nsc$transform$CleanUp$CleanUpTransformer$$reflectiveMethodCache$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer$$anonfun$testForName$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp$CleanUpTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/CleanUp.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$ConstructorTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$ConstructorTransformer$$anonfun$checkUninitializedReads$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$ConstructorTransformer$$anonfun$checkUninitializedReads$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$ConstructorTransformer$$anonfun$checkUninitializedReads$2$$anonfun$check$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$ConstructorTransformer$$anonfun$checkUninitializedReads$2.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$ConstructorTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$DelayedInitHelper$class.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$DelayedInitHelper.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$$anonfun$6$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$$anonfun$mergeConstructors$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$$anonfun$specializedAssignFor$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts$class.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$GuardianOfCtorStmts.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$class.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$detectUsages$2$$anonfun$markUsage$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$detectUsages$2$$anonfun$walk$1.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper$detectUsages$2$.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$OmittablesHelper.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$11$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$13$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$13$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$13$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$15$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$22$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$ConstrInfo$.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$ConstrInfo.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer$IntoCtorTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors$TemplateTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Constructors.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DeCapturifyTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$createApplyMethod$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$createApplyMethod$1$4.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$createBridgeMethod$1$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$createBridgeMethod$1.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$makeAnonymousClass$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$$anonfun$scala$tools$nsc$transform$Delambdafy$DelambdafyTransformer$$refersToThis$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$TransformedFunction$.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer$TransformedFunction.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$DelambdafyTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$FreeVarTraverser$.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$FreeVarTraverser.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$ThisReferringMethodsTraverser$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$ThisReferringMethodsTraverser$$anonfun$traverse$2.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy$ThisReferringMethodsTraverser.class +INFO: Loading Class: scala/tools/nsc/transform/Delambdafy.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anon$2$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anon$2$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anon$2$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anon$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anon$3.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$boundsSig$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$classSig$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$fullNameInSig$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$polyParamSig$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$scala$tools$nsc$transform$Erasure$$anonfun$$jsig$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$scala$tools$nsc$transform$Erasure$$anonfun$$jsig$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$scala$tools$nsc$transform$Erasure$$anonfun$$jsig$1$4.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1$$anonfun$superSig$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$javaSig$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$numericConversion$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$resolveAnonymousBridgeClash$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$scala$tools$nsc$transform$Erasure$$hiBounds$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$$anonfun$scala$tools$nsc$transform$Erasure$$isTypeParameterInSig$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$10$$anon$4.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1$$anonfun$apply$4$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1$$anonfun$scala$tools$nsc$transform$Erasure$ComputeBridges$$anonfun$$overriddenBy$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkBridgeOverrides$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkPair$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$checkPair$3.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$compute$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$makeBridgeDefDef$1$$anonfun$14$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$makeBridgeDefDef$1$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$makeBridgeDefDef$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$makeBridgeDefDef$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges$$anonfun$sigContainsValueClass$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ComputeBridges.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser$$anonfun$adaptMember$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser$$anonfun$typed1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser$$anonfun$typed1$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$Eraser.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$alt1$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$preErase$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$preEraseApply$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$preEraseIsInstanceOf$1$1$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$preEraseIsInstanceOf$1$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$preEraseIsInstanceOf$1$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$preEraseIsInstanceOf$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$scala$tools$nsc$transform$Erasure$ErasureTransformer$$anon$$alt2$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$checkNoDeclaredDoubleDefs$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$checkNoDeclaredDoubleDefs$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$sameTypeAfterErasure$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$scala$tools$nsc$transform$Erasure$ErasureTransformer$$checkNoDoubleDefs$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$scala$tools$nsc$transform$Erasure$ErasureTransformer$$checkNoDoubleDefs$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$scala$tools$nsc$transform$Erasure$ErasureTransformer$$doubleDefError$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$scala$tools$nsc$transform$Erasure$ErasureTransformer$$doubleDefError$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$scala$tools$nsc$transform$Erasure$ErasureTransformer$$isErasureDoubleDef$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer$opc$2$.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$ErasureTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$NeedsSigCollector$.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$TypeRefAttachment.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure$UnknownSig.class +INFO: Loading Class: scala/tools/nsc/transform/Erasure.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$$anonfun$outerAccessor$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$$anonfun$outerAccessor$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$$anonfun$transformInfo$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$$anonfun$transformInfo$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$$anonfun$transformInfo$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer$$anonfun$mixinOuterAccessorDef$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer$$anonfun$mixinOuterAccessorDef$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer$$anonfun$transform$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer$$anonfun$transformUnit$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$ExplicitOuterTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$OuterPathTransformer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$OuterPathTransformer$$anonfun$outerSelect$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$OuterPathTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$Phase.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter$RemoveBindingsTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/ExplicitOuter.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1$$anonfun$apply$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1$$anonfun$apply$3$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$extensionMethod$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$scala$tools$nsc$transform$ExtensionMethods$$extensionNames$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$scala$tools$nsc$transform$ExtensionMethods$$extensionNames$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$scala$tools$nsc$transform$ExtensionMethods$$extensionNames$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$scala$tools$nsc$transform$ExtensionMethods$$extensionNames$2.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$$anonfun$scala$tools$nsc$transform$ExtensionMethods$$extensionNames$3.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$extensionMethInfo$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$extensionMethInfo$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transform$3$$anonfun$apply$7$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transform$3$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transformStats$1$$anonfun$11$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transformStats$1$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transformStats$1$$anonfun$apply$10$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transformStats$1$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender$$anonfun$transformStats$1.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$Extender.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$ExtensionMethodType$.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$SubstututeRecursion$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$SubstututeRecursion$$anonfun$transform$4.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods$SubstututeRecursion.class +INFO: Loading Class: scala/tools/nsc/transform/ExtensionMethods.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anon$1$$anonfun$1$$anonfun$apply$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anon$1$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anon$1$$anonfun$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anon$1$$anonfun$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anonfun$liftClass$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anonfun$replaceSymbolInCurrentScope$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anonfun$scala$tools$nsc$transform$Flatten$$isFlattenablePrefix$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anonfun$scala$tools$nsc$transform$Flatten$$removeSymbolInCurrentScope$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anonfun$scala$tools$nsc$transform$Flatten$$removeSymbolInCurrentScope$1$$anonfun$scala$tools$nsc$transform$Flatten$$anonfun$$old_s$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$$anonfun$scala$tools$nsc$transform$Flatten$$removeSymbolInCurrentScope$1.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$Flattener$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten$Flattener.class +INFO: Loading Class: scala/tools/nsc/transform/Flatten.class +INFO: Loading Class: scala/tools/nsc/transform/InfoTransform$Phase$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/InfoTransform$Phase.class +INFO: Loading Class: scala/tools/nsc/transform/InfoTransform$class.class +INFO: Loading Class: scala/tools/nsc/transform/InfoTransform.class +INFO: Loading Class: scala/tools/nsc/transform/InlineErasure.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$$anonfun$scala$tools$nsc$transform$LambdaLift$$refCreateMethod$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$$anonfun$scala$tools$nsc$transform$LambdaLift$$refZeroMethod$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anon$2.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$addFreeArgs$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$addFreeParams$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$addFreeParams$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$5$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$1$$anonfun$apply$mcV$sp$2$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$2$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$2$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$2.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$computeFreeVars$3.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$liftDef$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$scala$tools$nsc$transform$LambdaLift$LambdaLifter$$addLifted$1$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$scala$tools$nsc$transform$LambdaLift$LambdaLifter$$addLifted$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$scala$tools$nsc$transform$LambdaLift$LambdaLifter$$addLifted$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$scala$tools$nsc$transform$LambdaLift$LambdaLifter$$symSet$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$transformStats$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter$$anonfun$transformUnit$1.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift$LambdaLifter.class +INFO: Loading Class: scala/tools/nsc/transform/LambdaLift.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$getBitmapFor$1.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$isMatch$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$mkSlowPathDef$2.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$scala$tools$nsc$transform$LazyVals$LazyValues$$addBitmapDefs$1.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$2$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$2$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$2$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$2$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$4.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues$$anonfun$transform$5.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LazyValues.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals$LocalLazyValFinder$.class +INFO: Loading Class: scala/tools/nsc/transform/LazyVals.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anon$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$2$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$addLateInterfaceMembers$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$addLateInterfaceMembers$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$addMember$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$addMixedinMembers$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$addMixedinMembers$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$addMixedinMembers$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$isOverriddenAccessor$1$$anonfun$hasOverridingAccessor$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$isOverriddenAccessor$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinImplClassMembers$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinImplClassMembers$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinImplClassMembers$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinTraitMembers$1$1$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinTraitMembers$1$1$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinTraitMembers$1$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinTraitMembers$1$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$mixinTraitMembers$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$rebindSuper$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$rebindSuper$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$rebindSuper$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$rebindSuper$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$rebindSuper$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$scala$tools$nsc$transform$Mixin$$toInterface$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$singleUseFields$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$singleUseFields$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$transformInfo$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$transformInfo$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$transformInfo$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$transformInfo$4.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$$anonfun$transformInfo$5.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$add$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$addCheckedGetters$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$addNewDefs$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$addNewDefs$2$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$addNewDefs$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$addNewDefs$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$buildBitmapOffsets$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$buildBitmapOffsets$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$mkFastPathBody$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$nullableFields$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$nullableFields$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$nullableFields$3$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$nullableFields$3.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$preTransform$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$preTransform$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$createBitmap$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$4$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$4.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$5.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$6.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$7.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$isNotDuplicate$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform$4.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$staticCall$1$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$staticCall$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$AddInitBitsTransformer$1$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$AddInitBitsTransformer$1$$anonfun$transformStats$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$AddInitBitsTransformer$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer$TreeSymSubstituterWithCopying$1.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$MixinTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin$SingleUseTraverser$2$.class +INFO: Loading Class: scala/tools/nsc/transform/Mixin.class +INFO: Loading Class: scala/tools/nsc/transform/OverridingPairs$Cursor.class +INFO: Loading Class: scala/tools/nsc/transform/OverridingPairs.class +INFO: Loading Class: scala/tools/nsc/transform/PostErasure$PostErasureTransformer$$anonfun$finish$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/PostErasure$PostErasureTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/PostErasure$class.class +INFO: Loading Class: scala/tools/nsc/transform/PostErasure.class +INFO: Loading Class: scala/tools/nsc/transform/SampleTransform$SampleTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/SampleTransform.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$34.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$35.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$36.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$37.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$38.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$39.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$40.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$41.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$42$$anonfun$apply$41.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$42.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$43.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$44.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$45.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$46.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$47.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$48.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$50.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$addBody$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$addBody$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$computeResidualTypeVars$1$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$computeResidualTypeVars$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$expandInnerNormalizedMembers$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$expandInnerNormalizedMembers$2$$anonfun$apply$43.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$expandInnerNormalizedMembers$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$1$$anonfun$apply$49.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$1$$anonfun$apply$50.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$1$$anonfun$apply$51$$anonfun$51.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$1$$anonfun$apply$51$$anonfun$apply$52.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$1$$anonfun$apply$51.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$implSpecClasses$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$2$$anonfun$49.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$2$$anonfun$apply$45.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$2$$anonfun$apply$46.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$2$$anonfun$apply$47.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$2$$anonfun$apply$48.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$makeSpecializedMembers$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$matchingSymbolInPrefix$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$specSym$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$1$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$6$$anonfun$33.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transform1$6.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$10.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$11.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$12.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$13.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$14.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$15.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$16.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$17.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$18.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$19.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$20.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$21.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$22$$anonfun$apply$42.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$22.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$23.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$24.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$25.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$26.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$27.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$28.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$29.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$6.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$7.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$8.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformDefDef$1$9.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformNew$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformTemplate$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$$anonfun$transformValDef$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$CollectMethodBodies$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2$CollectMethodBodies.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$3$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anon$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$23$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$52.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$53.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$hasSpecializedParams$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$hasUnspecializableAnnotation$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$illegalSpecializedInheritance$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$nonConflicting$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$originalClass$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$produceTypeParameters$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$produceTypeParameters$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$produceTypeParameters$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$satisfiabilityConstraints$1$$anonfun$28$$anonfun$apply$39.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$satisfiabilityConstraints$1$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$satisfiabilityConstraints$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$satisfiable$1$$anonfun$apply$38.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$satisfiable$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$applyContext$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$checkOverriddenTParams$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$enterMember$1$1$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$enterMember$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$enterMember$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$forwardCall$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$forwardCtorCall$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$forwardCtorCall$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$hasNewParents$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$initializesSpecializedField$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$isSpecializedAnyRefSubtype$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$loop$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$loop$1$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$loop$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$makeArguments$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$mapAnyRefsInOrigCls$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$mapAnyRefsInSpecSym$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$needsSpecialOverride$1$1$$anonfun$apply$28$$anonfun$apply$29.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$needsSpecialOverride$1$1$$anonfun$apply$28.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$needsSpecialOverride$1$1$$anonfun$apply$30.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$needsSpecialOverride$1$1$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$anonfun$$atNext$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$needsSpecialOverride$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$needsSpecialization$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$newOverload$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$5$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$5$$anonfun$apply$22$$anonfun$apply$23.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$5$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$5$$anonfun$apply$24.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$normalizeMember$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$pp$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$pp$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializeMember$1$$anonfun$apply$27.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializeMember$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$16$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$anonfun$$overrideIn$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedClass$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$specializedOverload$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$subst$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$typeParamSubAnyRef$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$typeParamSubAnyRef$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$10.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$6.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$7.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$8.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unify$9.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$scala$tools$nsc$transform$SpecializeTypes$$unifyError$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$31.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$32$$anonfun$apply$33.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$32.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$34.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3$$anonfun$apply$35.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specialOverrides$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializableTypes$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializations$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializations$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializations$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializations$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializeClass$1$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializeClass$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializeOn$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializeOn$1$1$$anonfun$apply$25.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializeOn$1$1$$anonfun$apply$26.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializeOn$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedName$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedName$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedOn$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedOn$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedOn$3$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedOn$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedParams$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedParents$1$1$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedParents$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedTypeVars$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedTypeVars$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$specializedTypeVars$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$survivingArgs$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$survivingArgs$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$survivingArgs$3.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$survivingParams$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$transformInfo$1$$anonfun$apply$37.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$transformInfo$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$transformInfo$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$unify$1$$anonfun$apply$36.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$$anonfun$unify$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Abstract$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Abstract.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Duplicator$BodyDuplicator$$anonfun$castType$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Duplicator$BodyDuplicator.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Duplicator$CastMap$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Duplicator.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Forward$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Forward.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$FullTypeMap$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Implementation$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Implementation.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$ImplementationAdapter$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$ImplementationAdapter$$anonfun$scala$tools$nsc$transform$SpecializeTypes$ImplementationAdapter$$isAccessible$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$ImplementationAdapter.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$NormalizedMember$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$NormalizedMember$$anonfun$typeBoundsIn$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$NormalizedMember$$anonfun$typeBoundsIn$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$NormalizedMember$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$NormalizedMember.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Overload$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$Overload.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecialOverload$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecialOverload.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecialOverride$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecialOverride.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecialSuperAccessor$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecialSuperAccessor.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializationDuplicator$$anonfun$retyped$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializationDuplicator.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializationPhase.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializationTransformer$$anonfun$54.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializationTransformer$$anonfun$transform$5.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializationTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializedAccessor$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializedAccessor.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializedInfo.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializedInnerClass$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$SpecializedInnerClass.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$TypeEnv$$anonfun$fromSpecialization$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$TypeEnv$$anonfun$fromSpecialization$2.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$TypeEnv$$anonfun$includes$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$TypeEnv$$anonfun$includes$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$TypeEnv$$anonfun$isValid$1.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$TypeEnv$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes$UnifyError$.class +INFO: Loading Class: scala/tools/nsc/transform/SpecializeTypes.class +INFO: Loading Class: scala/tools/nsc/transform/Statics$StaticsTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/Statics$StaticsTransformer$$anonfun$addStaticInits$1.class +INFO: Loading Class: scala/tools/nsc/transform/Statics$StaticsTransformer$$anonfun$findStaticCtor$1.class +INFO: Loading Class: scala/tools/nsc/transform/Statics$StaticsTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/Statics.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$Phase.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$matchesTypeArgs$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$noTailTransforms$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$2$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$4.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$$anonfun$transform$5.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$ClonedTailContext.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$DefDefTailContext$$anonfun$containsRecursiveCall$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$DefDefTailContext$$anonfun$tparams$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$DefDefTailContext.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$EmptyTailContext$.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$TailContext$$anonfun$newThis$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$TailContext$class.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination$TailContext.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailCallElimination.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailPosLabelsTraverser$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls$TailPosLabelsTraverser.class +INFO: Loading Class: scala/tools/nsc/transform/TailCalls.class +INFO: Loading Class: scala/tools/nsc/transform/Transform$Phase.class +INFO: Loading Class: scala/tools/nsc/transform/Transform$class.class +INFO: Loading Class: scala/tools/nsc/transform/Transform.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter$$anonfun$adaptToType$2.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter$$anonfun$adaptToType$3.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter$$anonfun$box$1.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter$class.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$TypeAdapter.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer$class.class +INFO: Loading Class: scala/tools/nsc/transform/TypeAdaptingTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/TypingTransformers$TypingTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/transform/TypingTransformers$TypingTransformer$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/transform/TypingTransformers$TypingTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/TypingTransformers$class.class +INFO: Loading Class: scala/tools/nsc/transform/TypingTransformers.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$5$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$6$$anonfun$apply$5$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$6$$anonfun$apply$5$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$6$$anonfun$apply$5$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$6$$anonfun$apply$5$$anonfun$scala$tools$nsc$transform$UnCurry$UnCurryTransformer$$anonfun$$anonfun$$transformInConstructor$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$6$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$addNewMember$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$arrayToSequence$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$nonLocalReturnKey$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$postTransform$1$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$postTransform$1$$anonfun$apply$6$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$postTransform$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$postTransform$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$postTransform$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$postTransform$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$replaceElidableTree$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$scala$tools$nsc$transform$UnCurry$UnCurryTransformer$$nonLocalReturnTry$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$scala$tools$nsc$transform$UnCurry$UnCurryTransformer$$nonLocalReturnTry$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$scala$tools$nsc$transform$UnCurry$UnCurryTransformer$$nonLocalReturnTry$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$scala$tools$nsc$transform$UnCurry$UnCurryTransformer$$nonLocalReturnTry$2.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$scala$tools$nsc$transform$UnCurry$UnCurryTransformer$$useNewMembers$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$sequenceToArray$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$transformArgs$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$transformArgs$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$transformVarargs$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$$anonfun$translateSynchronized$2.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$isDependent$1$$anonfun$apply$mcZ$sp$1$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$isDependent$1$$anonfun$apply$mcZ$sp$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$$anonfun$isDependent$1.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$Identity$.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$Identity.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$Packed$.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$Packed.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer$dependentParamTypeErasure$ParamTransform.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry$UnCurryTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/UnCurry.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Debugging$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Debugging$debug$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Debugging.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$MatchMonadInterface$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$MatchMonadInterface.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$EmptySubstitution$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution$$anonfun$$greater$greater$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution$$anonfun$toString$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$Substitution.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$TypedSubstitution.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface$vpmName$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Interface.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$alignAcrossRows$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$alignAcrossRows$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$scala$tools$nsc$transform$patmat$Logic$$alignedColumns$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$$anonfun$scala$tools$nsc$transform$patmat$Logic$$alignedColumns$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$$bslash$div$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$$div$bslash$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$4$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$4$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$4$$anonfun$apply$4$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$4$$anonfun$apply$4$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$4$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$6$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$$anonfun$removeVarEq$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$AbsVar.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$AnalysisBudget$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$AnalysisBudget$Exception.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$AnalysisBudget$exceeded$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$And$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$And.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Eq$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Eq.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$False$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Not$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Not.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Or$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Or.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Prop.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$PropMap$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$PropMap.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$PropTraverser$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$PropTraverser.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Sym$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Sym$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$Sym.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$True$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$TypeConstExtractor.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$UniqueSym.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$ValueConstExtractor.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$VarExtractor.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$gatherEqualities$2$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic$rewriteEqualsToProp$2$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$PropositionalLogic.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Logic.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$14$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$approximate$1$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$approximate$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$modelToCounterExample$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$modelToVarAssignment$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$modelToVarAssignment$2$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$modelToVarAssignment$2$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$modelToVarAssignment$2$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$modelToVarAssignment$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$unreachableCase$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$unreachableCase$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$unreachableCase$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$varAssignmentString$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$$anonfun$varAssignmentString$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ConstructorExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ConstructorExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$CounterExample$$anonfun$prune$1$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$CounterExample$$anonfun$prune$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$CounterExample$$anonfun$prune$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$CounterExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$CounterExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ListExample$$anonfun$coveredBy$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ListExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ListExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$NegativeExample$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$NegativeExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$NegativeExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$NoExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$TupleExample$$anonfun$coveredBy$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$TupleExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$TupleExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$TypeExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$TypeExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ValueExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$ValueExample.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3$$anonfun$allFieldAssignmentsLegal$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3$$anonfun$args$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3$$anonfun$nonTrivialNonEqualTo$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3$$anonfun$prunedEqualTo$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3$$anonfun$uniqueEqualTo$1$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3$$anonfun$uniqueEqualTo$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$4$$anonfun$findVar$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$4$$anonfun$unique$1$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$4$$anonfun$unique$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$VariableAssignment$4$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$WildcardExample$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$MatchAnalyzer.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchAnalysis.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$$anonfun$caseWithoutBodyToProp$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$Test$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$Test.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$11$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$8$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$uniqueEqualityProp$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$uniqueNonNullProp$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$uniqueTp$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$uniqueTp$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$$anonfun$uniqueTypeProp$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$updateSubstitution$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$updateSubstitution$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$updateSubstitution$3$$anonfun$apply$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$updateSubstitution$3$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$$anonfun$updateSubstitution$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp$condStrategy$2$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$TreeMakerToProp.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps$conservative$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToProps.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$TreeMakersToPropsIgnoreNullChecks.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$MatchApproximator.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchApproximation.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$CodegenCore$AbsCodegen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$CodegenCore$Casegen$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$CodegenCore$Casegen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$CodegenCore$CommonCodegen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$CodegenCore$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$CodegenCore.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen$optimizedCodegen$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen$optimizedCodegen$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen$optimizedCodegen$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen$optimizedCodegen$OptimizedCasegen$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen$optimizedCodegen$OptimizedCasegen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$OptimizedCodegen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureCodegen$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureCodegen$pureCodegen$$anonfun$matcher$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureCodegen$pureCodegen$$anonfun$matcher$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureCodegen$pureCodegen$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureCodegen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureMatchMonadInterface$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$PureMatchMonadInterface.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCodeGen.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCps$CpsSymbols$$anonfun$removeCPSFromPt$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCps$CpsSymbols$$anonfun$removeCPSFromPt$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCps$CpsSymbols$$anonfun$removeCPSFromPt$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCps$CpsSymbols$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCps$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchCps.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$3$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$10$$anonfun$apply$9$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$10$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$5$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$5$$anonfun$apply$4$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$5$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$6$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$apply$11$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$doCSE$2$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$doCSE$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$$anonfun$storeDependencies$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusedCondTreeMaker$$anonfun$treesToHoist$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusedCondTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusedCondTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$12$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$lastReusedTreeMaker$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$lastReusedTreeMaker$2$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$lastReusedTreeMaker$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$$anonfun$localSubstitution$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$ReusingCondTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$CommonSubconditionElimination.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$MatchOptimizer$$anonfun$26$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$MatchOptimizer$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$MatchOptimizer$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$MatchOptimizer.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$RegularSwitchMaker$SwitchablePattern$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$RegularSwitchMaker$SwitchableTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$RegularSwitchMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$19$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$19$$anonfun$apply$18$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$19$$anonfun$apply$18$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$19$$anonfun$apply$18$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$19$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$collapseGuardedCases$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$noGuards$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$loop$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternEquals$1$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternEquals$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternEquals$2$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternEquals$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternEquals$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternEquals$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternImplies$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchOptimization$SwitchEmission$SwitchMaker$$patternImplies$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$$anonfun$wrapInDefaultLabelDef$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$GuardAndBodyTreeMakers$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker$SwitchableTreeMakerExtractor.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$SwitchMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$typeSwitchMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission$typeSwitchMaker$SwitchableTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$SwitchEmission.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchOptimization.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$$anonfun$scala$tools$nsc$transform$patmat$MatchTranslation$$setVarInfo$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$5$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$6$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$translateMatch$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$$anonfun$translateTry$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree$$anonfun$setInfo$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree$$anonfun$translate$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree$$anonfun$translatedAlts$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree$SymbolAndTypeBound$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree$TypeBound$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$BoundTree.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$genTake$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$ignoredSubPatBinders$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$lengthGuard$1$$anonfun$compareOp$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$lengthGuard$1$$anonfun$compareOp$1$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$lengthGuard$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$nonStarSubPatTypes$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$productElemsToN$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$subBoundTrees$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$subPatBinders$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$$anonfun$subPatTypes$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCall.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCallProd$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCallProd$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCallProd.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCallRegular$splice$2$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$ExtractorCallRegular.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$PatternBoundToUnderscore$$anonfun$unapply$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$PatternBoundToUnderscore$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$SymbolBound$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$TranslationStep$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$TranslationStep.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$WildcardPattern$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$WildcardPattern$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$MatchTranslator.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTranslation.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$Suppression$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$Suppression.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anon$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$combineCasesNoSubstOnly$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$combineCasesNoSubstOnly$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$combineCasesNoSubstOnly$2$$anonfun$10$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$combineCasesNoSubstOnly$2$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$combineCasesNoSubstOnly$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$combineExtractors$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$matchFailGen$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$matchFailGen$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$$anonfun$removeSubstOnly$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$AlternativesTreeMaker$$anonfun$7$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$AlternativesTreeMaker$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$AlternativesTreeMaker$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$AlternativesTreeMaker$$anonfun$scala$tools$nsc$transform$patmat$MatchTreeMaking$TreeMakers$$incorporateOuterSubstitution$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$AlternativesTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$AlternativesTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$BodyTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$BodyTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$CondTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$EqualityTestTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$EqualityTestTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$ExtractorTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$ExtractorTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$FunTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$GuardTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$GuardTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$IrrefutableExtractorTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$NoNewBinders$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$NoNewBinders.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$PreserveSubPatBinders$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$PreserveSubPatBinders$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$PreserveSubPatBinders$$anonfun$bindSubPats$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$PreserveSubPatBinders$$anonfun$bindSubPats$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$PreserveSubPatBinders$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$PreserveSubPatBinders.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$ProductExtractorTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$ProductExtractorTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$SubstOnlyTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$SubstOnlyTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TrivialTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TrivialTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TypeTestTreeMaker$$anon$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TypeTestTreeMaker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TypeTestTreeMaker$TypeTestCondStrategy.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TypeTestTreeMaker$pureTypeTestChecker$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TypeTestTreeMaker$treeCondStrategy$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$TypeTestTreeMaker.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$TreeMakers.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchTreeMaking.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$TreeMakerWarnings$$anonfun$declarationOfName$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$TreeMakerWarnings$$anonfun$declarationOfName$1$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$TreeMakerWarnings$$anonfun$matchingSymbolInScope$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$TreeMakerWarnings$$anonfun$matchingSymbolInScope$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$TreeMakerWarnings$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$TreeMakerWarnings.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/MatchWarnings.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Aligned$$anonfun$elements$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Aligned$$anonfun$stars$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Aligned$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Aligned.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Extractor$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Extractor$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Extractor.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$NoRepeated$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Patterns$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Patterns.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Repeated$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$Repeated.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$TypedPat$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$TypedPat.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternExpander.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatching$MatchTransformer.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatching$OptimizingMatchTranslator.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatching$PureMatchTranslator.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatching$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatching.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatchingStats$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatchingStats$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/PatternMatchingStats.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$$anonfun$13$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$$anonfun$unique$1$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$$anonfun$unique$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$$anonfun$unique$1$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$$anonfun$unique$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Const.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$NullConst$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$TypeConst$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$TypeConst$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$TypeConst.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$ValueConst$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$ValueConst$$anonfun$fromType$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$ValueConst$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$ValueConst.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$6$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$implications$1$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$implications$1$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$implications$1$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$implications$1$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$implications$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$propForEqualsTo$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$$anonfun$registerEquality$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$ExcludedPair$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var$ExcludedPair$3$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$Var.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$TreesAndTypesDomain.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalaLogic.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$AlignedOps$$anonfun$expectedTypes$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$AlignedOps.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$ScalacPatternExpander$$anonfun$elementTypeOf$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$ScalacPatternExpander$$anonfun$elementTypeOf$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$ScalacPatternExpander$$anonfun$newExtractor$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$ScalacPatternExpander$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$ScalacPatternExpander.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$alignPatterns$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/ScalacPatternExpanders.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$CNF$$anonfun$distribute$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$CNF$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$CNF.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$cnfString$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$dropUnit$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$dropUnit$2.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$findAllModels$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$$anonfun$negateModel$1$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$Lit.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$Solver.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/Solving.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$$anonfun$enumerateSubtypes$3$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$$anonfun$enumerateSubtypes$3.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$typeArgsToWildcardsExceptArray$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis$typeArgsToWildcardsExceptArray$2$.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$CheckableTreeAndTypeAnalysis.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis$class.class +INFO: Loading Class: scala/tools/nsc/transform/patmat/TreeAndTypeAnalysis.class +INFO: Loading Class: scala/tools/nsc/typechecker/Adaptations$Adaptation$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Adaptations$Adaptation.class +INFO: Loading Class: scala/tools/nsc/typechecker/Adaptations$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Adaptations.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$namerFactory$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$namerFactory$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$packageObjects$$anon$2$$anon$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$packageObjects$$anon$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$packageObjects$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$typerFactory$$anon$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$typerFactory$$anon$3$$anonfun$run$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$typerFactory$$anon$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer$typerFactory$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Analyzer.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$1$$anonfun$accumulate$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$2$$anonfun$accumulate$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$3$$anonfun$accumulate$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$4$$anonfun$accumulate$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$5$$anonfun$accumulate$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$6$$anonfun$accumulate$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$7$$anonfun$accumulate$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$7$$anonfun$default$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anon$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anonfun$invoke$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anonfun$pluginsEnsureCompanionObject$default$3$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$$anonfun$pluginsEnterStats$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$AnalyzerPlugin$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$AnalyzerPlugin.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$CumulativeOp.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$MacroPlugin$$anonfun$pluginsEnsureCompanionObject$default$3$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$MacroPlugin$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$MacroPlugin.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$NonCumulativeOp.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/AnalyzerPlugins.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkability$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkability.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$propagateKnownTypes$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$propagateKnownTypes$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$propagateKnownTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$$anonfun$scala$tools$nsc$typechecker$Checkable$$typeArgsInTopLevelType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$$anonfun$7$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$$anonfun$allChildrenAreIrreconcilable$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$$anonfun$allChildrenAreIrreconcilable$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$$anonfun$isNeverSubArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$$anonfun$isNeverSubArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$CheckabilityChecker.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$InferCheckable$$anonfun$checkCheckable$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$InferCheckable$$anonfun$isCheckable$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$InferCheckable$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$InferCheckable.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Checkable.class +INFO: Loading Class: scala/tools/nsc/typechecker/ConstantFolder$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ConstantFolder$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/ConstantFolder.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$$anonfun$onlyAny$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$$anonfun$parents$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AbsTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AccessTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AccessTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AmbiguousImplicitTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AmbiguousImplicitTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AmbiguousTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$AmbiguousTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$DivergentImplicitTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$DivergentImplicitTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$ErrorUtils$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$ImplicitsContextErrors$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$ImplicitsContextErrors.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$$anonfun$allTypes$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$$anonfun$locals$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$$anonfun$scala$tools$nsc$typechecker$ContextErrors$InferencerContextErrors$$applyErrorMsg$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$$anonfun$AmbiguousMethodAlternativeError$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$$anonfun$NoMethodInstanceError$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$$anonfun$NotWithinBoundsErrorMessage$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$$anonfun$NotWithinBoundsErrorMessage$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$$anonfun$NotWithinBoundsErrorMessage$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$InferErrorGen$PolyAlternativeErrorKind$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$InferencerContextErrors.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NamerContextErrors$NamerErrorGen$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NamerContextErrors$NamerErrorGen$DuplicatesErrorKinds$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NamerContextErrors$NamerErrorGen$SymValidateErrors$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NamerContextErrors$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NamerContextErrors.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NamesDefaultsErrorsGen$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NormalTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$NormalTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$PosAndMsgTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$PosAndMsgTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$SymbolTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$SymbolTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TreeTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TypeErrorWithUnderlyingTree$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TypeErrorWithUnderlyingTree.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TypeErrorWrapper$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TypeErrorWrapper.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$MacroGeneratedAbort$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$MacroGeneratedTypeError$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$$anonfun$macroExpansionError$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$TyperErrorGen$MacroExpansionException$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$TyperContextErrors.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextErrors.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextMode$$anonfun$toString$extension$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextMode$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ContextMode.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$$anonfun$rootImports$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$$anonfun$warnUnusedImports$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$$anonfun$warnUnusedImports$1$$anonfun$apply$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$$anonfun$warnUnusedImports$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$$anonfun$warnUnusedImports$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$enclosingApply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$enclosingCaseDef$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$flushAndIssueWarnings$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$importedAccessibleSymbol$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$inSilentMode$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$isAccessible$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$isInPackageObject$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$isNameInScope$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$issue$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$issueAmbiguousError$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$issueAmbiguousError$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$issueCommon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$lookupInScope$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$newOverloaded$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$newOverloaded$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$pushTypeBounds$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restore$1$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restore$1$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restore$1$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restore$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restoreTypeBounds$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restoreTypeBounds$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$restoreTypeBounds$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$savingUndeterminedTypeParams$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$scala$tools$nsc$typechecker$Contexts$Context$$collectImplicits$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$scala$tools$nsc$typechecker$Contexts$Context$$collectImplicits$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context$$anonfun$siteString$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$Context.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ImportContext$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ImportContext.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ImportInfo$$anonfun$allImportedSymbols$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ImportInfo$$anonfun$isExplicitImport$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ImportInfo.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$NoContext$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ReportBuffer$$anonfun$clearErrors$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ReportBuffer$$anonfun$retainErrors$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$ReportBuffer.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$RootImports$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Contexts.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$annotationList$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$assocsNode$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$scopeMemberList$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$symbolList$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$$anonfun$treeList$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$DestructureType.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/DestructureTypes.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$$anonfun$retyped$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$9$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$scala$tools$nsc$typechecker$Duplicators$BodyDuplicator$$invalidate$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$scala$tools$nsc$typechecker$Duplicators$BodyDuplicator$$invalidate$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$scala$tools$nsc$typechecker$Duplicators$BodyDuplicator$$invalidate$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$scala$tools$nsc$typechecker$Duplicators$BodyDuplicator$$invalidate$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$scala$tools$nsc$typechecker$Duplicators$BodyDuplicator$$invalidate$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$scala$tools$nsc$typechecker$Duplicators$BodyDuplicator$$invalidate$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$$anonfun$typed$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$mapOver$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$mapOver$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$mapOver$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms$$anonfun$mapOver$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator$FixInvalidSyms.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$BodyDuplicator.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators$SubstSkolemsTypeMap.class +INFO: Loading Class: scala/tools/nsc/typechecker/Duplicators.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$$anonfun$expand$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$etaExpansion$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion$etaExpansion$.class +INFO: Loading Class: scala/tools/nsc/typechecker/EtaExpansion.class +INFO: Loading Class: scala/tools/nsc/typechecker/Fingerprint$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Fingerprint.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anon$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anon$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anon$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$inferImplicit$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$inferImplicit$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$inferImplicit$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$$anonfun$inferImplicit$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$Function1$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$HasMember$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$HasMember$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$HasMethodMatching$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$HasMethodMatching$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$HasMethodMatching$$anonfun$unapply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$HasMethodMatching$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitInfo.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$Message$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$Message$$anonfun$format$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$Message$$anonfun$interpolate$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$Message$$anonfun$interpolate$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$Message$$anonfun$typeParamNames$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitNotFoundMsg$Message.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anon$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$allImplicits$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$comesBefore$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$eligibleInfos$1$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$eligibleInfos$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$matchesArgRes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$mot$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$complexity$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$complexity$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$core$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$core$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$core$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$getParts$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$overlaps$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$scala$tools$nsc$typechecker$Implicits$ImplicitSearch$$overlaps$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$searchImplicit$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$typedImplicit1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$typedImplicit1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$typedImplicit1$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$typedImplicit1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$typedImplicit1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$$anonfun$typingLog$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$20$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$24$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$findAll$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$findBest$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$DivergentImplicitRecovery$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$DivergentImplicitRecovery$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$DivergentImplicitRecovery$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$LocalShadower$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$NoShadower$2$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation$Shadower.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch$ImplicitComputation.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$ImplicitSearch.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$OpenImplicit$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$OpenImplicit.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$SearchResult.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Implicits.class +INFO: Loading Class: scala/tools/nsc/typechecker/ImplicitsStats$.class +INFO: Loading Class: scala/tools/nsc/typechecker/ImplicitsStats.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$expanded$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$isFullyDefined$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$isFullyDefined$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$isFullyDefined$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$normalize$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$scala$tools$nsc$typechecker$Infer$$bestAlternatives$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$scala$tools$nsc$typechecker$Infer$$ifNoInstance$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$solvedTypes$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$$anonfun$solvedTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$CheckAccessibleMacroCycle$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$DeferredNoInstance.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$14$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$22$$anonfun$apply$8$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$22$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$33$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$33.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$34.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$35.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$36.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$adjustTypeArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$allMonoAlts$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$argsPlusDefaults$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$canWarnAboutAny$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$checkAccessible$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$checkBounds$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$checkBounds$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$checkKindBounds$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$checkWithinBounds$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$explainTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$followApply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferConstructorInstance$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferExprAlternative$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferMethodAlternative$1$$anonfun$apply$14$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferMethodAlternative$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferMethodAlternative$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferPolyAlternatives$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$inferTypedPattern$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$instantiateTypeVar$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isApplicableBasedOnArity$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isAsSpecific$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isAsSpecific$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isCompatibleArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isConservativelyCompatible$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isInstantiatable$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$isInstantiatable$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$methTypeArgs$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$methTypeArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$methTypeArgs$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$missingArgs$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$missingArgs$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$namesMatch$1$1$$anonfun$apply$12$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$namesMatch$1$1$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$namesMatch$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$namesOfNamedArguments$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$onRight$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$onRight$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$overloadsToConsiderBySpecificity$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$protoTypeArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$protoTypeArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$exprTypeArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$inferForApproxPt$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$inferForApproxPt$1$2$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$inferForApproxPt$1$2$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$inferForApproxPt$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$infer_s$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$isApplicable$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$isApplicable$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$isFreeTypeParamOfTerm$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$scala$tools$nsc$typechecker$Infer$Inferencer$$solved_s$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$solve$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$targsStrict$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$tryInstantiating$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$tryTwice$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$$anonfun$typeAfterTupleConversion$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$AllArgsAndUndets$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$AllArgsAndUndets$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$AllArgsAndUndets$$anonfun$unapply$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$AllArgsAndUndets$$anonfun$unapply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$AllArgsAndUndets$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$Undets$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$Undets$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$AdjustedTypeArgs$Undets$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$approximateAbstracts$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer$toOrigin$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$Inferencer.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$NoInstance.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$instantiate$$anonfun$applyTypeVar$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer$instantiate$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Infer.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anon$1$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anon$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anon$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$10$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$17$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$19$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$calculateMacroArgs$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$calculateMacroArgs$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$calculateMacroArgs$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$computeMacroDefTypeFromMacroImplRef$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$enclosingMacroPosition$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$enclosingMacroPosition$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$findMacroClassLoader$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$isBlackbox$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$loadMacroImplBinding$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$macroExpandWithRuntime$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$macroExpandWithRuntime$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$macroExpandWithRuntime$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$macroExpandWithoutRuntime$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$notifyUndetparamsAdded$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$notifyUndetparamsInferred$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$notifyUndetparamsInferred$3$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$notifyUndetparamsInferred$3$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$notifyUndetparamsInferred$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$calculateUndetparams$1$$anonfun$apply$4$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$calculateUndetparams$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$calculateUndetparams$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$calculateUndetparams$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$scala$tools$nsc$typechecker$Macros$$calculateUndetparams$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardMacroArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardMacroArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardTypedMacroBody$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardTypedMacroBody$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardTypedMacroBody$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardTypedMacroBody$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$standardTypedMacroBody$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$validateResultingTree$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$validateResultingTree$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$validateResultingTree$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$$anonfun$validateResultingTree$1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$DefMacroExpander$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$DefMacroExpander$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$DefMacroExpander.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Delayed$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Delayed.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Failure$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Failure.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Fallback$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Fallback.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroArgs$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroArgs.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroExpander$$anonfun$expand$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroExpander$$anonfun$expand$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroExpander$$anonfun$expand$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroExpander.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anon$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$pickleAtom$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$signature$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$$anonfun$unpickleAtom$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroImplBinding.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$MacroStatus.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Skipped$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Skipped.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Success$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$Success.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$UnsigmaTypeMap$2$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$UnsigmaTypeMap$2$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Macros.class +INFO: Loading Class: scala/tools/nsc/typechecker/MacrosStats$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MacrosStats.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$$anonfun$annotationFilter$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$$anonfun$deriveAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$constantMethod$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$constantNullary$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$createMethod$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$createSwitchMethod$1$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$createSwitchMethod$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$forwardMethod$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$forwardMethod$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis$$anonfun$isOverride$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$ClassMethodSynthesis.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anon$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anonfun$addDerivedTrees$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anonfun$addDerivedTrees$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$$anonfun$warnForDroppedAnnotations$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$AnyBeanGetter$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$AnyBeanGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BaseGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BeanAccessor.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BeanGetter$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BeanGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BeanSetter$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BeanSetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BooleanBeanGetter$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$BooleanBeanGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Derived.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromClassDef$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromClassDef.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromMemberDef$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromMemberDef.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromValDef$$anonfun$derivedMods$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromValDef$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedFromValDef.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedSetter$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$DerivedSetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Field$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Field.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Getter$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Getter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$ImplicitClassWrapper$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$ImplicitClassWrapper$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$ImplicitClassWrapper.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$LazyValGetter$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$LazyValGetter$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$LazyValGetter$ChangeOwnerAndModuleClassTraverser.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$LazyValGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$NoSymbolBeanGetter$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$NoSymbolBeanGetter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Param$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Param.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Setter$.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$Setter.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$MethodSynth.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/MethodSynthesis.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$$anonfun$companionSymbolOf$1$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$$anonfun$companionSymbolOf$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$DependentTypeChecker$$anonfun$check$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$DependentTypeChecker.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$LockingTypeCompleter$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$LockingTypeCompleter.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$11$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$21$$anonfun$apply$17$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$21$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$accessorTypeCompleter$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$accessorTypeCompleter$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$14$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$16$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$addDefaultGetters$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$checkSelectors$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$checkSelectors$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$ensureCompanionObject$default$2$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$enterClassSymbol$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$enterCopyMethod$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$enterModuleSymbol$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$enterSyms$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$enterValueParams$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$findCyclicalLowerBound$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$findCyclicalLowerBound$2$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$findCyclicalLowerBound$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$includeParent$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$isValid$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$methodSig$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$methodSig$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$methodSig$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$methodTypeSchema$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$moduleClassTypeCompleter$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$monoTypeCompleter$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$monoTypeCompleter$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$noDuplicates$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$scala$tools$nsc$typechecker$Namers$Namer$$assignParamTypes$1$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$scala$tools$nsc$typechecker$Namers$Namer$$assignParamTypes$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$scala$tools$nsc$typechecker$Namers$Namer$$overriddenSymbol$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$scala$tools$nsc$typechecker$Namers$Namer$$rtparams$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$scala$tools$nsc$typechecker$Namers$Namer$$rvparamss$1$1$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$scala$tools$nsc$typechecker$Namers$Namer$$rvparamss$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$selfTypeCompleter$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$standardEnsureCompanionObject$default$2$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$templateSig$2$$anonfun$hasCopy$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$templateSig$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$templateSig$3$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$typeErrorHandler$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$typesFromOverridden$1$1$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$$anonfun$typesFromOverridden$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$LogTransitions$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$LogTransitions$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$LogTransitions.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer$RestrictJavaArraysMap$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$Namer.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$NormalNamer.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$PolyTypeCompleter$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$PolyTypeCompleter$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$PolyTypeCompleter$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$PolyTypeCompleter.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$TypeCompleter.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$TypeTreeSubstituter$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$TypeTreeSubstituter.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Namers.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$11$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$12$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$13$$anonfun$14$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$13$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$13$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$17$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$17$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$addDefaults$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$addDefaults$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$allArgsArePositional$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$argValDefs$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$baseFunBlock$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$baseFunBlock$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$baseFunBlock$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$makeNamedTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$missingParams$default$3$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$reorderArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$reorderArgsInv$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$scala$tools$nsc$typechecker$NamesDefaults$$isAmbiguousAssignment$1$$anon$1$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$scala$tools$nsc$typechecker$NamesDefaults$$isAmbiguousAssignment$1$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$scala$tools$nsc$typechecker$NamesDefaults$$isAmbiguousAssignment$1$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$scala$tools$nsc$typechecker$NamesDefaults$$isAmbiguousAssignment$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$scala$tools$nsc$typechecker$NamesDefaults$$nameOfNamedArg$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$transformNamedApplication$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$$anonfun$transformNamedApplication$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$ConstructorDefaultsAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$DefaultsOfLocalMethodAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$NamedApplyInfo$.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$NamedApplyInfo.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/NamesDefaults.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$FixedAndRepeatedTypes$.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$canRemedy$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$convertToCaseConstructor$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$convertToCaseConstructor$2$$anonfun$apply$3$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$convertToCaseConstructor$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$convertToCaseConstructor$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$extractorForUncheckedType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$extractorForUncheckedType$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$freshArgType$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$freshUnapplyArgType$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$inPlaceAdHocOverloadingResolution$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$rest$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$rest$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$$anonfun$typedConstructorPattern$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$VariantToSkolemMap$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$VariantToSkolemMap.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$PatternTyper.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/PatternTypers.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$$anonfun$overridesTypeInPrefix$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$$anonfun$transformInfo$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$16$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$16$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$2$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$24$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$27.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$33.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$34.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$35$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$35.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$36.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$37.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$addVarargBridges$2$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$addVarargBridges$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$addVarargBridges$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$callsSelf$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAccessibilityOfReferencedTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAccessibilityOfReferencedTypes$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAllOverrides$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAllOverrides$2$$anonfun$21.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAllOverrides$2$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAllOverrides$2$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAllOverrides$2$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkAllOverrides$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkBounds$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkBounds$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkByNameRightAssociativeDef$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkDeprecatedOvers$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractDecls$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$2$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$2$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$2$$anonfun$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkNoAbstractMembers$1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$4$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$anonfun$$hasDefaultParam$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$6$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$6$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverloadedRestrictions$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverride$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverride$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverride$1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverride$1$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkOverrideAbstract$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkSensibleEquals$1$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkSensibleEquals$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkSensibleEquals$2$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkSensibleEquals$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$checkUndesiredProperties$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$eliminateModuleDefs$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$eliminateModuleDefs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$enterSyms$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$intersectionIsEmpty$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$javaErasedOverridingSym$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$javaErasedOverridingSym$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$matchingSyms$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$applyChecks$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$applyChecks$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$applyRefchecksToAnnotations$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$applyRefchecksToAnnotations$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$isIrrefutable$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$membersStrings$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$membersStrings$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$register$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$scala$tools$nsc$typechecker$RefChecks$RefCheckTransformer$$register$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$stubImplementations$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$stubImplementations$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transform$1$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transformCaseApply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transformSelect$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transformStat$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transformStat$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transformStat$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$transformStats$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$validateBaseTypes$2$$anonfun$apply$mcVI$sp$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$$anonfun$validateBaseTypes$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$LevelInfo.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$MixinOverrideError$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$MixinOverrideError$4$.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$normalizeAll$.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer$varianceValidator$.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks$RefCheckTransformer.class +INFO: Loading Class: scala/tools/nsc/typechecker/RefChecks.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$$anonfun$superArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$DynamicRewriteAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroExpanderAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroExpanderAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroExpansionAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroExpansionAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroImplRefAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroRuntimeAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$MacroRuntimeAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$SuperArgsAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$SuperArgsAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$SuppressMacroExpansionAttachment$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/StdAttachments.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$$anonfun$5$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$Grouping$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$Grouping.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$LabelAndType$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$LabelAndType.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$MonoFunction.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$NullaryFunction.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$PolyFunction.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeAtom$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeAtom.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeEmpty$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeList.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeNode.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeProduct$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$TypeProduct.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings$intoNodes$.class +INFO: Loading Class: scala/tools/nsc/typechecker/StructuredTypeStrings.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$9$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$9$$anonfun$11$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$9$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$9$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$9$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$checkCompanionNameClashes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$makeAccessor$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$scala$tools$nsc$typechecker$SuperAccessors$SuperAccTransformer$$isThisType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transform$2$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformArgs$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformClassDef$1$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformClassDef$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformSelect$1$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformSelect$1$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformSelect$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformSuperSelect$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformSuperSelect$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer$$anonfun$transformTemplate$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors$SuperAccTransformer.class +INFO: Loading Class: scala/tools/nsc/typechecker/SuperAccessors.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$addSyntheticMethods$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$addSyntheticMethods$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$canEqualMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseAccessorName$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseAccessorName$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseClassMethods$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseClassMethods$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseClassMethods$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseObjectMethods$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseObjectMethods$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$3$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$3$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$3$$anonfun$9$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$3$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$3$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$caseTemplateBody$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$chooseHashcode$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$equalsCaseClassMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$equalsDerivedValueClassMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$extras$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$forwardToRuntime$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$hasConcreteImpl$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$hasOverridingImplementation$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$hashCodeDerivedValueClassMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$impls$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$impls$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$impls$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$perElementMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productIteratorMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productMethods$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productMethods$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productMethods$1$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productMethods$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productMethods$1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$productMethods$1$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$specializedHashcode$1$1$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$specializedHashcode$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$valueCaseClassMethods$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$valueClassMethods$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$$anonfun$valueClassMethods$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/SyntheticMethods.class +INFO: Loading Class: scala/tools/nsc/typechecker/Tags$Tag$$anonfun$resolveTag$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Tags$Tag$$anonfun$resolveTag$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Tags$Tag$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Tags$Tag.class +INFO: Loading Class: scala/tools/nsc/typechecker/Tags$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Tags.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$check$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$checkTrees$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$checkTrees$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$checkTrees$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$diffList$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$diffList$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$diffTrees$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$diffTrees$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$nonPackageOwnersPlusOne$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$runWithUnit$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$$anonfun$scala$tools$nsc$typechecker$TreeCheckers$$truncate$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$DiffResult$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$DiffResult.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$record$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$record$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$reportChanges$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$reportChanges$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$reportChanges$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$reportChanges$4$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$reportChanges$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$$anonfun$sortedNewSyms$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$SymbolTracker$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$postcheck$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$encls$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$encls$1$2$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$encls$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$front$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$front$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$mk$default$3$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$ref$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$referencesInType$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$precheck$$traverseInternal$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$precheck$$traverseInternal$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$precheck$$traverseInternal$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$precheck$$traverseInternal$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker$precheck$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers$TreeChecker.class +INFO: Loading Class: scala/tools/nsc/typechecker/TreeCheckers.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$alternatives$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$alternativesString$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$disambiguate$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$existentialContext$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$explainVariance$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$explainVariance$1$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$explainVariance$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$explainVariance$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$forString$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$foundReqMsg$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$pairs$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$pairs$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$pairs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$typeDiags$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$typeDiags$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withAddendum$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withAddendum$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withAddendum$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withDisambiguation$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withDisambiguation$2$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withDisambiguation$2$$anonfun$apply$8$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withDisambiguation$2$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$$anonfun$withDisambiguation$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$DealiasedType$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TypeDiag$$anonfun$postQualify$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TypeDiag$$anonfun$preQualify$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TypeDiag$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TypeDiag.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$$anonfun$cyclicReferenceMessage$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$$anonfun$reportTypeError$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkDead$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$defnSymbols$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$isUnusedTerm$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$isUnusedType$1$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$isUnusedType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$localVars$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$traverse$2$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$traverse$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$traverse$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$unsetVars$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$unusedTerms$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates$$anonfun$unusedTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$checkUnused$UnusedPrivates.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$TyperDiagnostics.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeDiagnostics.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$isAnonClass$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$quieter$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$scalaName$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$tparamString$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$$anonfun$tparamString$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypeStrings.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$NormalTyper.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$SilentResult.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$SilentResultValue$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$SilentResultValue.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$SilentTypeError$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$SilentTypeError.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anon$1$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anon$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anon$2$$anonfun$isCoercible$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anon$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anon$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$100.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$102.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$104.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$105.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$106.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$107.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$108.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$109.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$11$$anonfun$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$11$$anonfun$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$110.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$111.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$112.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$115$$anonfun$apply$54.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$115.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$116.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$18$$anonfun$apply$14.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$23.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$24.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$25.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$26.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$28.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$29.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$34.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$35.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$36$$anonfun$apply$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$36.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$37.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$38.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$39.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$40.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$41.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$42.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$44.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$45$$anonfun$apply$30.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$45.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$46.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$47.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$48.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$49.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$50.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$52.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$53.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$54.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$55.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$56.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$57.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$59.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$60.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$61.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$62.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$64.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$65.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$66$$anonfun$apply$39.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$66.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$67$$anonfun$apply$40.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$67.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$68$$anonfun$apply$41.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$68.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$69.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$70.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$71.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$72.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$73.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$74.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$75.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$76$$anonfun$77.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$76.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$79.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$82.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$83.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$84.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$85.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$86.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$87.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$88.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$89.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$90.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$91.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$93.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$95.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$96.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptCase$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptMismatchedSkolems$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToArguments$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToArguments$3$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToArguments$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToImplicitMethod$1$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToImplicitMethod$1$1$$anonfun$apply$7$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToImplicitMethod$1$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToImplicitMethod$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToMemberWithArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToMemberWithArgs$2$$anonfun$apply$12$$anonfun$apply$13.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToMemberWithArgs$2$$anonfun$apply$12.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$adaptToMemberWithArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$addSynthetics$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$addSynthetics$1$2$$anonfun$apply$34.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$addSynthetics$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$applyImplicitArgs$1$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$applyImplicitArgs$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$applyImplicitArgs$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$applyImplicitArgs$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$applyImplicitArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$applyImplicitArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$body$2$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkEphemeral$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkExistentialsFeature$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkFeature$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkFinitary$1$$anonfun$22.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkFinitary$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkMethodStructuralCompatible$1$$anonfun$apply$20$$anonfun$checkAbstract$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkMethodStructuralCompatible$1$$anonfun$apply$20$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$anonfun$$anonfun$$check$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkMethodStructuralCompatible$1$$anonfun$apply$20.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkMethodStructuralCompatible$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkNonCyclic$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkNonCyclic$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkNotMacro$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkSelfConstructorArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$checkSelfConstructorArgs$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$4$$anonfun$30.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$4$$anonfun$31.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$4$$anonfun$32.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$4$$anonfun$apply$17.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$4$$anonfun$apply$18.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$computeParamAliases$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$decompose$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$doTypedApply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$dropExistential$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$ensurePredefParentsAreInSameSourceFile$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$fallbackAfterVanillaAdapt$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$fallbackAfterVanillaAdapt$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$fallbackAfterVanillaAdapt$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$findMixinSuper$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$findMixinSuper$1$2$$anonfun$apply$50.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$findMixinSuper$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$finish$2$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$fixDuplicateSyntheticParents$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$foreachSubTreeBoundTo$1$$anonfun$apply$19.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$foreachSubTreeBoundTo$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$handlePolymorphicCall$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$handlePolymorphicCall$1$3$$anonfun$apply$42.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$handlePolymorphicCall$1$3$$anonfun$apply$43.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$handlePolymorphicCall$1$3$$anonfun$apply$44.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$handlePolymorphicCall$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$hasMonomorphicApply$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$hasPolymorphicApply$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$hasValue$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$inferView$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$instantiateExpectingUnit$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$isMacroExpansion$1$1$$anonfun$apply$53.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$isMacroExpansion$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$isReferencedFrom$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$maybeWarn$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$mkUpdate$1$1$$anonfun$mkCall$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$mkUpdate$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$needsInstantiation$1$$anonfun$apply$35.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$needsInstantiation$1$$anonfun$apply$36$$anonfun$apply$37.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$needsInstantiation$1$$anonfun$apply$36.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$needsInstantiation$1$$anonfun$apply$38.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$needsInstantiation$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$normalTypedApply$1$1$$anonfun$apply$49.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$normalTypedApply$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$packCaptured$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$packedTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$reenterTypeParams$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$reenterValueParams$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$reenterValueParams$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$rewrappingWrapperTrees$1$$anonfun$apply$15.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$rewrappingWrapperTrees$1$$anonfun$apply$16.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$rewrappingWrapperTrees$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$runTyper$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$addLocals$1$1$$anonfun$apply$45$$anonfun$apply$46.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$addLocals$1$1$$anonfun$apply$45.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$addLocals$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$addLocals$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$asDynamicCall$1$1$$anonfun$apply$51.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$asDynamicCall$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$containsLocal$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$doAdapt$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$errorInResult$1$1$$anonfun$apply$47.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$errorInResult$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$isLocal$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$isPlausible$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$matchesVisibleMember$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$1$1$$anonfun$apply$10.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$1$2$$anonfun$apply$11.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$2$1$$anonfun$92.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$2$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$2$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$onError$2$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$parentString$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$shapeType$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$suspiciousSym$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$treesInResult$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$treesInResult$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedFunction$1$$anonfun$apply$31.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedFunction$1$$anonfun$apply$33.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedFunction$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedInternal$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedSelect$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedSelect$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedTypeDefImpl$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$typedTypeDefImpl$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$$validateParentClass$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$suspiciousIdents$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$trees2ConstArg$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$trees2ConstArg$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryNamesDefaults$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryNamesDefaults$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryNamesDefaults$1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryTupleApply$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryTypedApply$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryWithFilterAndFilter$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryWithFilterAndFilter$1$2$$anonfun$101.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$tryWithFilterAndFilter$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAlternative$1$1$$anonfun$apply$52.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAlternative$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAnnotation$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAnnotation$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAppliedTypeTree$1$1$$anonfun$enhanceBounds$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAppliedTypeTree$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAppliedTypeTree$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedArgs$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedAssign$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedBlock$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$2$$anonfun$apply$28.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$2$$anonfun$apply$29.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCase$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCases$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCompoundTypeTree$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCompoundTypeTree$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCompoundTypeTree$1$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedCompoundTypeTree$1$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$1$$anonfun$apply$21.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$3$$anonfun$apply$23.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$4$$anonfun$apply$24.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$5$$anonfun$apply$25$$anonfun$apply$26$$anonfun$apply$27.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$5$$anonfun$apply$25$$anonfun$apply$26.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$5$$anonfun$apply$25.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedDefDef$6.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedExistentialTypeTree$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedExistentialTypeTree$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedExistentialTypeTree$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedExistentialTypeTree$5$$anonfun$78.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedExistentialTypeTree$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedHigherKindedType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedHigherKindedType$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedLabelDef$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedLabelDef$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedMatch$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedParentTypes$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedParentTypes$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedPrimaryConstrBody$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedPrimaryConstrBody$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedRefinement$1$$anonfun$58.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedRefinement$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedRefinement$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedRefinement$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedSelectInternal$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedSelectOrSuperCall$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedSelectOrSuperCall$1$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedSelectOrSuperQualifier$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedTemplate$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedTemplate$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedTemplate$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedTypeTree$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$typedValDefImpl$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$validateDerivedValueClass$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$validateDynamicParent$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$validateNoCaseAncestor$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$validateParentClasses$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$validateParentClasses$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$$anonfun$withCondConstrTyper$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$ArrayInstantiation$2$$anonfun$unapply$1$$anonfun$94.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$ArrayInstantiation$2$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$ArrayInstantiation$2$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$checkEphemeralDeep$2$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$checkNoEscaping$$anonfun$check$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$checkNoEscaping$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$$anonfun$80.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$$anonfun$81.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$$anonfun$mkInvoke$2$$anonfun$hasNamed$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$$anonfun$mkInvoke$2$$anonfun$scala$tools$nsc$typechecker$Typers$Typer$dyna$$anonfun$$findSelection$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$$anonfun$mkInvoke$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$$anonfun$typedNamedApply$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer$dyna$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$Typer.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Typers.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersStats$$anonfun$117.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersStats$$anonfun$118.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersStats$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersStats.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$$anonfun$tpe_s$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$$anonfun$greenType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$$anonfun$nextTyped$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$$anonfun$scala$tools$nsc$typechecker$TypersTracking$typingStack$$all_s$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$$anonfun$showPush$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$$anonfun$tree_s2$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking$typingStack$Frame.class +INFO: Loading Class: scala/tools/nsc/typechecker/TypersTracking.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$4.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$5.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$caseClassCopyMeth$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$classType$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$factoryMeth$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$localAccessor$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$primaries$1$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$scala$tools$nsc$typechecker$Unapplies$$caseClassUnapplyReturnValue$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$$anonfun$unapplyMember$1.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$ClassForCaseCompanionAttachment.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$HasUnapply$.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies$class.class +INFO: Loading Class: scala/tools/nsc/typechecker/Unapplies.class +INFO: Loading Class: scala/tools/nsc/util/CharArrayReader$CharArrayLookaheadReader.class +INFO: Loading Class: scala/tools/nsc/util/CharArrayReader.class +INFO: Loading Class: scala/tools/nsc/util/CharArrayReaderData$class.class +INFO: Loading Class: scala/tools/nsc/util/CharArrayReaderData.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$expandDir$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$expandDir$2.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$expandManifestPath$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$expandManifestPath$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$expandPath$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$findClass$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$findClass$2.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$join$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$lsDir$1$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$lsDir$1$2.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$lsDir$default$2$1$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$manifests$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$scala$tools$nsc$util$ClassPath$$expandS$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$$anonfun$split$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassPathContext$$anonfun$classesInManifest$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassPathContext$$anonfun$classesInPathImpl$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassPathContext$$anonfun$contentsOfDirsInPath$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassPathContext$$anonfun$contentsOfDirsInPath$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassPathContext$$anonfun$sourcesInPath$1.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassPathContext.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassRep$.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$ClassRep.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$DefaultJavaContext$.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath$JavaContext.class +INFO: Loading Class: scala/tools/nsc/util/ClassPath.class +INFO: Loading Class: scala/tools/nsc/util/DeltaClassPath$$anonfun$$lessinit$greater$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/nsc/util/DeltaClassPath$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/tools/nsc/util/DeltaClassPath.class +INFO: Loading Class: scala/tools/nsc/util/DirectoryClassPath$$anonfun$traverse$2.class +INFO: Loading Class: scala/tools/nsc/util/DirectoryClassPath.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$3.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$groupDoc$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$mergeInheritdocSections$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$paramDocs$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$paramDocs$2.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$returnDoc$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$sectionTagMap$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$$anonfun$tagIndex$default$2$1.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings$.class +INFO: Loading Class: scala/tools/nsc/util/DocStrings.class +INFO: Loading Class: scala/tools/nsc/util/EmptyAction.class +INFO: Loading Class: scala/tools/nsc/util/Exceptional$.class +INFO: Loading Class: scala/tools/nsc/util/Exceptional.class +INFO: Loading Class: scala/tools/nsc/util/FailedInterrupt.class +INFO: Loading Class: scala/tools/nsc/util/InterruptReq.class +INFO: Loading Class: scala/tools/nsc/util/JavaCharArrayReader.class +INFO: Loading Class: scala/tools/nsc/util/JavaClassPath.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$asClasspathString$1.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$asURLs$1.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$classes$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$classes$1.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$origin$3$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$origin$3.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$packages$1$$anonfun$apply$9.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$packages$1.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$show$1.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath$$anonfun$sourcepaths$1.class +INFO: Loading Class: scala/tools/nsc/util/MergedClassPath.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$fromFile$1.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$main$1.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$1.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$10.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$11.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$2.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$3.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$4.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$5.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$6.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$7.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$8.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$$anonfun$scala$tools$nsc$util$ShowPickled$$printEntry$1$9.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$PickleBufferEntry$.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$PickleBufferEntry.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$PickleBufferEntryList$.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled$PickleBufferEntryList.class +INFO: Loading Class: scala/tools/nsc/util/ShowPickled.class +INFO: Loading Class: scala/tools/nsc/util/SimpleTracer$.class +INFO: Loading Class: scala/tools/nsc/util/SimpleTracer.class +INFO: Loading Class: scala/tools/nsc/util/SourcePath$$anonfun$traverse$1.class +INFO: Loading Class: scala/tools/nsc/util/SourcePath.class +INFO: Loading Class: scala/tools/nsc/util/StackTracing$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/util/StackTracing$$anonfun$inSeen$1$1.class +INFO: Loading Class: scala/tools/nsc/util/StackTracing$$anonfun$print$1$1.class +INFO: Loading Class: scala/tools/nsc/util/StackTracing$$anonfun$print$1$2.class +INFO: Loading Class: scala/tools/nsc/util/StackTracing$class.class +INFO: Loading Class: scala/tools/nsc/util/StackTracing.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo$$anonfun$print$1.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo$$anonfun$print$2$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo$$anonfun$print$2.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo$$anonfun$print$3.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo$$anonfun$print$4.class +INFO: Loading Class: scala/tools/nsc/util/StatisticsInfo.class +INFO: Loading Class: scala/tools/nsc/util/WorkScheduler$$anon$1.class +INFO: Loading Class: scala/tools/nsc/util/WorkScheduler$$anonfun$dequeueAll$1.class +INFO: Loading Class: scala/tools/nsc/util/WorkScheduler$$anonfun$dequeueAll$2.class +INFO: Loading Class: scala/tools/nsc/util/WorkScheduler$$anonfun$dequeueAllInterrupts$1.class +INFO: Loading Class: scala/tools/nsc/util/WorkScheduler$$anonfun$pollThrowable$1.class +INFO: Loading Class: scala/tools/nsc/util/WorkScheduler.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$1.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$2.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$stackTraceString$1.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$trackingThreads$1.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$waitingForThreads$1.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$waitingForThreads$2.class +INFO: Loading Class: scala/tools/nsc/util/package$$anonfun$waitingForThreads$3.class +INFO: Loading Class: scala/tools/nsc/util/package$.class +INFO: Loading Class: scala/tools/nsc/util/package$StackTraceOps$.class +INFO: Loading Class: scala/tools/nsc/util/package$StackTraceOps.class +INFO: Loading Class: scala/tools/nsc/util/package.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$$anonfun$newDocFactory$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$$anonfun$getTheFirst$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$$anonfun$scala$tools$partest$ScaladocModelTest$access$$countLinks$1$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$$anonfun$scala$tools$partest$ScaladocModelTest$access$$countLinks$1$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$$anonfun$scala$tools$partest$ScaladocModelTest$access$$extractText$1$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$$anonfun$scala$tools$partest$ScaladocModelTest$access$$extractText$1$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$$anonfun$testDiagram$4.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$DocTemplateEntityMembers.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$ImplicitConversionMembers.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$PackageAccess$$anonfun$_packages$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$PackageAccess.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_absTypeTpls$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_absTypes$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_aliasTypeTpls$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_aliasTypes$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_classes$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_classes$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_classesMbr$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_classesMbr$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_conversions$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_methods$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_objects$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_objects$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_objectsMbr$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_objectsMbr$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_traits$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_traits$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_traitsMbr$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_traitsMbr$2.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess$$anonfun$_values$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$TemplateAccess.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$WithMembers$$anonfun$_members$1.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$WithMembers$class.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$access$WithMembers.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest$delayedInit$body.class +INFO: Loading Class: scala/tools/partest/ScaladocModelTest.class +INFO: Loading Class: scala/tools/reflect/Eval$$anon$5.class +INFO: Loading Class: scala/tools/reflect/Eval.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anon$1.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anon$2.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anon$3.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$2$$anonfun$applyOrElse$2.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$3$$anonfun$applyOrElse$3.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$4$$anonfun$applyOrElse$4.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$5$$anonfun$applyOrElse$5.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$6$$anonfun$applyOrElse$6.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$7$$anonfun$applyOrElse$7.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$8$$anonfun$applyOrElse$8.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/reflect/FastTrack$$anonfun$1.class +INFO: Loading Class: scala/tools/reflect/FastTrack$FastTrackEntry.class +INFO: Loading Class: scala/tools/reflect/FastTrack.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$$anon$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$$anonfun$badlyInvoked$1$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$$anonfun$scala$tools$reflect$FormatInterpolator$$copyPart$1$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$$anonfun$scala$tools$reflect$FormatInterpolator$$escapeHatch$1$1$$anonfun$5.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$$anonfun$scala$tools$reflect$FormatInterpolator$$escapeHatch$1$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$$typecreator1$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$CharacterXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$10.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$11$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$11.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$goodFlags$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$goodFlags$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$hasAnyFlag$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$pickAcceptable$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$pickAcceptable$2$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$$anonfun$pickAcceptable$2.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion$class.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$Conversion.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$DateTimeXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$ErrorXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$FloatingPointXn$$anonfun$13.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$FloatingPointXn$$anonfun$verify$2$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$FloatingPointXn$$anonfun$verify$2.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$FloatingPointXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$GeneralXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$IntegralXn$$anonfun$bad_$plus$1$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$IntegralXn$$anonfun$bad_$plus$1$1$$anonfun$applyOrElse$2.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$IntegralXn$$anonfun$bad_$plus$1$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$IntegralXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$LiteralXn$$anonfun$verify$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$LiteralXn$$anonfun$verify$1.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$LiteralXn.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator$SpecifierGroups$.class +INFO: Loading Class: scala/tools/reflect/FormatInterpolator.class +INFO: Loading Class: scala/tools/reflect/FrontEnd$Info$.class +INFO: Loading Class: scala/tools/reflect/FrontEnd$Info.class +INFO: Loading Class: scala/tools/reflect/FrontEnd$Severity.class +INFO: Loading Class: scala/tools/reflect/FrontEnd$class.class +INFO: Loading Class: scala/tools/reflect/FrontEnd$severity$.class +INFO: Loading Class: scala/tools/reflect/FrontEnd.class +INFO: Loading Class: scala/tools/reflect/ReflectGlobal.class +INFO: Loading Class: scala/tools/reflect/ReflectMain$.class +INFO: Loading Class: scala/tools/reflect/ReflectMain.class +INFO: Loading Class: scala/tools/reflect/ReflectSetup$class.class +INFO: Loading Class: scala/tools/reflect/ReflectSetup.class +INFO: Loading Class: scala/tools/reflect/StdContextTags.class +INFO: Loading Class: scala/tools/reflect/StdRuntimeTags$.class +INFO: Loading Class: scala/tools/reflect/StdRuntimeTags.class +INFO: Loading Class: scala/tools/reflect/StdTags$$anon$1.class +INFO: Loading Class: scala/tools/reflect/StdTags$$anon$2.class +INFO: Loading Class: scala/tools/reflect/StdTags$class.class +INFO: Loading Class: scala/tools/reflect/StdTags.class +INFO: Loading Class: scala/tools/reflect/ToolBox$class.class +INFO: Loading Class: scala/tools/reflect/ToolBox.class +INFO: Loading Class: scala/tools/reflect/ToolBoxError$.class +INFO: Loading Class: scala/tools/reflect/ToolBoxError.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$compile$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$define$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$inferImplicit$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$parse$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$resetLocalAttrs$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$$anonfun$typecheck$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$CompilerApi.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anon$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$14$$anonfun$apply$8.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$14.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$15.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$17.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$18.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$3.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$compile$1$$anonfun$19.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$compile$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$extractFreeTerms$1$$anonfun$4.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$extractFreeTerms$1$$anonfun$5.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$extractFreeTerms$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$inferImplicit$1$$anonfun$apply$6.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$inferImplicit$1$$anonfun$apply$7.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$inferImplicit$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$throwIfErrors$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anon$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$10.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$11.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$12.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$6.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$7.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$8.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$9.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1$$anonfun$withContext$1$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$transformDuringTyper$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$typecheck$1$$anonfun$13.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$typecheck$1$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$typecheck$1$$anonfun$apply$4.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$typecheck$1$$anonfun$apply$5.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$typecheck$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$wrapInModule$1$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$wrapInModule$1$2.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$wrapInModule$1$3.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal$$anonfun$wrapInModule$1$4.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$withCompilerApi$.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$withCompilerApi$api$$anonfun$20.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$withCompilerApi$api$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl$withCompilerApi$api$.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory$ToolBoxImpl.class +INFO: Loading Class: scala/tools/reflect/ToolBoxFactory.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$clearProp$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$envOrElse$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$envOrElse$2.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$envOrNone$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$envOrSome$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$envOrSome$2.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$propIsSet$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$propOrElse$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$propOrElse$2.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$setProp$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$systemProperties$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$$anonfun$systemProperties$1.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$AccessControl$.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties$class.class +INFO: Loading Class: scala/tools/reflect/WrappedProperties.class +INFO: Loading Class: scala/tools/reflect/package$$anon$1.class +INFO: Loading Class: scala/tools/reflect/package$$anon$2.class +INFO: Loading Class: scala/tools/reflect/package$$anon$3.class +INFO: Loading Class: scala/tools/reflect/package$$anon$4.class +INFO: Loading Class: scala/tools/reflect/package$.class +INFO: Loading Class: scala/tools/reflect/package.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$$anonfun$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$$anonfun$scala$tools$reflect$quasiquotes$Holes$ApplyHole$$iterated$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$$anonfun$scala$tools$reflect$quasiquotes$Holes$ApplyHole$$iterated$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$IterableType$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$LiftedType$$anonfun$unapply$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$LiftedType$$anonfun$unapply$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole$LiftedType$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$ApplyHole.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$Hole$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$Hole.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$UnapplyHole$$anonfun$tree$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$UnapplyHole$$anonfun$tree$1$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$UnapplyHole$$anonfun$tree$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$UnapplyHole.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$class.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$unlifters$$anonfun$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$unlifters$$anonfun$preamble$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes$unlifters$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Holes.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$CaseParser$$anonfun$entryPoint$3.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$CaseParser$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$ForEnumeratorParser$$anonfun$entryPoint$5.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$ForEnumeratorParser$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$FreshName$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser$$anonfun$correspondingPosition$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser$$anonfun$correspondingPosition$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser$$anonfun$parse$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser$QuasiquoteParser$$anon$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser$QuasiquoteParser$$anonfun$topStat$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser$QuasiquoteParser.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Parser.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$PatternParser$$anonfun$entryPoint$4.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$PatternParser$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$Q$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$TermParser$$anonfun$entryPoint$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$TermParser$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$TypeParser$$anonfun$entryPoint$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$TypeParser$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers$class.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Parsers.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$$anonfun$code$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$AnnotPlaceholder$$anonfun$matching$3.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$AnnotPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$CasePlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$EarlyDefPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$ForEnumPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$FunctionTypePlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$HolePlaceholder$class.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$HolePlaceholder.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$ModsPlaceholder$$anonfun$matching$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$ModsPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$PackageStatPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$ParamPlaceholder$$anonfun$matching$4.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$ParamPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$Placeholder$$anonfun$matching$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$Placeholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$RefineStatPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$SymbolPlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$TuplePlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$TupleTypePlaceholder$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$class.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$holeMap$$anonfun$keysIterator$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$holeMap$$anonfun$unused$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders$holeMap$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Placeholders.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$3.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$4.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$5.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$6.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$7.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$8.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$9.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$expandQuasiquote$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$expandQuasiquote$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$expandQuasiquote$3.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes$$anonfun$expandQuasiquote$4.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Quasiquotes.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Rank$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Rank$Dot$.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Rank.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier$$anonfun$10.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier$$anonfun$11.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier$$anonfun$12.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier$$anonfun$13.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier$$anonfun$14.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier$$anonfun$reifyHighRankList$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$ApplyReifier.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$1$$anonfun$applyOrElse$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$3.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$5.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$6.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$7.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$8.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$group$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$reifyAnnotList$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$reifyAnnotList$2.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$reifyFillingHoles$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$reifyList$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier$$anonfun$reifyTree$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$Reifier.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$UnapplyReifier$$anonfun$15.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$UnapplyReifier$$anonfun$4.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$UnapplyReifier$$anonfun$appended$1$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$UnapplyReifier$$anonfun$prepended$1$1.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$UnapplyReifier.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers$class.class +INFO: Loading Class: scala/tools/reflect/quasiquotes/Reifiers.class +INFO: Loading Class: scala/tools/util/CompileOutputCommon$class.class +INFO: Loading Class: scala/tools/util/CompileOutputCommon.class +INFO: Loading Class: scala/tools/util/Javap.class +INFO: Loading Class: scala/tools/util/JpResult.class +INFO: Loading Class: scala/tools/util/NoJavap$.class +INFO: Loading Class: scala/tools/util/NoJavap.class +INFO: Loading Class: scala/tools/util/PathResolver$$anonfun$commandLineFor$1.class +INFO: Loading Class: scala/tools/util/PathResolver$$anonfun$scala$tools$util$PathResolver$$cmdLineOrElse$1.class +INFO: Loading Class: scala/tools/util/PathResolver$.class +INFO: Loading Class: scala/tools/util/PathResolver$AsLines$.class +INFO: Loading Class: scala/tools/util/PathResolver$AsLines.class +INFO: Loading Class: scala/tools/util/PathResolver$Calculated$$anonfun$userClassPath$1.class +INFO: Loading Class: scala/tools/util/PathResolver$Calculated$.class +INFO: Loading Class: scala/tools/util/PathResolver$Defaults$.class +INFO: Loading Class: scala/tools/util/PathResolver$Environment$$anonfun$searchForBootClasspath$1.class +INFO: Loading Class: scala/tools/util/PathResolver$Environment$.class +INFO: Loading Class: scala/tools/util/PathResolver$MkLines$.class +INFO: Loading Class: scala/tools/util/PathResolver$MkLines.class +INFO: Loading Class: scala/tools/util/PathResolver$NoImplClassJavaContext$.class +INFO: Loading Class: scala/tools/util/PathResolver$SupplementalLocations$$anonfun$scala$tools$util$PathResolver$SupplementalLocations$$deeply$1$1.class +INFO: Loading Class: scala/tools/util/PathResolver$SupplementalLocations$.class +INFO: Loading Class: scala/tools/util/PathResolver.class +INFO: Loading Class: scala/tools/util/SocketServer$$anonfun$1.class +INFO: Loading Class: scala/tools/util/SocketServer$$anonfun$doSession$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/util/SocketServer$$anonfun$doSession$1.class +INFO: Loading Class: scala/tools/util/SocketServer.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$1.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$2.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$3.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$4.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$checkClassesInDir$1.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$checkClassesInDir$2.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$checkClassesInJar$1.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$checkClassesInJar$2.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$main$1.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$main$2.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$main$3.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$run$1.class +INFO: Loading Class: scala/tools/util/VerifyClass$$anonfun$run$2.class +INFO: Loading Class: scala/tools/util/VerifyClass$.class +INFO: Loading Class: scala/tools/util/VerifyClass.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang.plugins/scala-continuations-library_2.11/1.0.2/e517c53a7e9acd6b1668c5a35eccbaa3bab9aac/scala-continuations-library_2.11-1.0.2.jar +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$1$$anonfun$2.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$1.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$3$$anonfun$4.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$3$$anonfun$5.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$3.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$flatMap$1.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$flatMap$2$$anonfun$apply$2.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$flatMap$2.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$foreach$1.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$map$1.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$map$2$$anonfun$apply$1.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$map$2.class +INFO: Loading Class: scala/util/continuations/ControlContext$$anonfun$mapFinally$1.class +INFO: Loading Class: scala/util/continuations/ControlContext.class +INFO: Loading Class: scala/util/continuations/cpsMinus.class +INFO: Loading Class: scala/util/continuations/cpsParam.class +INFO: Loading Class: scala/util/continuations/cpsPlus.class +INFO: Loading Class: scala/util/continuations/cpsSym.class +INFO: Loading Class: scala/util/continuations/cpsSynth.class +INFO: Loading Class: scala/util/continuations/package$$anonfun$reset$1.class +INFO: Loading Class: scala/util/continuations/package$$anonfun$run$1.class +INFO: Loading Class: scala/util/continuations/package$$anonfun$shiftR$1.class +INFO: Loading Class: scala/util/continuations/package$.class +INFO: Loading Class: scala/util/continuations/package.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang.plugins/scala-continuations-plugin_2.11.1/1.0.2/f361a3283452c57fa30c1ee69448995de23c60f7/scala-continuations-plugin_2.11.1-1.0.2.jar +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$$anonfun$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$$anonfun$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$$anonfun$adaptBoundsToAnnotations$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$$anonfun$adaptBoundsToAnnotations$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$$anonfun$annotationsConform$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$$anonfun$annotationsConform$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$checker$.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$10.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$3.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$4.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$5.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$6.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$7.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$8.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$9.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$adaptAnnotations$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$adaptAnnotations$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$adaptAnnotations$3.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$adaptAnnotations$4.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$adaptAnnotations$5.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$canAdaptAnnotations$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$canAdaptAnnotations$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$canAdaptAnnotations$3.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$canAdaptAnnotations$4.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$canAdaptAnnotations$5.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$canAdaptAnnotations$6.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$10.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$11.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$3.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$4.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$5.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$6.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$7.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$8.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$pluginsTyped$9.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$transArgList$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$transArgList$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$transArgList$3.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$transChildrenInOrder$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$updateAttributesFromChildren$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$updateAttributesFromChildren$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$updateAttributesFromChildren$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$updateAttributesFromChildren$3.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$updateAttributesFromChildren$4$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$$anonfun$updateAttributesFromChildren$4.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker$plugin$.class +INFO: Loading Class: scala/tools/selectivecps/CPSAnnotationChecker.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$cpsParamTypes$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$filterAttribs$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$getAnswerTypeAnn$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$getExternalAnswerTypeAnn$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$linearize$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$linearize$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$removeAttribs$1$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$removeAttribs$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$updateSynthFlag$1.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$$anonfun$updateSynthFlag$2.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$class.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils$cpsNames$.class +INFO: Loading Class: scala/tools/selectivecps/CPSUtils.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$10.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$11.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$12.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$13.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$14.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$5.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$6.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$7.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$8.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$9.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transBlock$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transInlineStm$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transInlineStm$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transTailValue$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transTailValue$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transTailValue$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transTailValue$4.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transTailValue$5.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transValue$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$3$$anonfun$apply$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$3$$anonfun$apply$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$4.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$5$$anonfun$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$5$$anonfun$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$5$$anonfun$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$5$$anonfun$4.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$5$$anonfun$apply$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$5.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$6.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$7.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$$anonfun$transform$8.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$RemoveTailReturnsTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer$RemoveTailReturnsTransformer$.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform$ANFTransformer.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveANFTransform.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSPlugin$$anon$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSPlugin$$anon$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSPlugin$$anon$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSPlugin$$anonfun$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSPlugin$$anonfun$init$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSPlugin.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$$anonfun$transformCPSType$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$$anonfun$transformInfo$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$$anonfun$transformInfo$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$applyCombinatorFun$1$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$applyCombinatorFun$1$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$applyCombinatorFun$1$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$applyCombinatorFun$1$4.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$applyCombinatorFun$1$5.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$applyCombinatorFun$1$6.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$10.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$11.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$4.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$5.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$6.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$7.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$8.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$mainTransform$9.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$transBlock$1.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$transBlock$2.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$transBlock$3.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$transBlock$4.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$transBlock$5.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer$$anonfun$transBlock$6.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform$CPSTransformer.class +INFO: Loading Class: scala/tools/selectivecps/SelectiveCPSTransform.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.11.1/e11da23da3eabab9f4777b9220e60d44c1aab6a/scala-library-2.11.1.jar +INFO: Loading Class: scala/AnyVal.class +INFO: Loading Class: scala/AnyValCompanion.class +INFO: Loading Class: scala/App$$anonfun$main$1.class +INFO: Loading Class: scala/App$class.class +INFO: Loading Class: scala/App.class +INFO: Loading Class: scala/Array$$anon$2.class +INFO: Loading Class: scala/Array$$anonfun$apply$1.class +INFO: Loading Class: scala/Array$$anonfun$apply$10.class +INFO: Loading Class: scala/Array$$anonfun$apply$2.class +INFO: Loading Class: scala/Array$$anonfun$apply$3.class +INFO: Loading Class: scala/Array$$anonfun$apply$4.class +INFO: Loading Class: scala/Array$$anonfun$apply$5.class +INFO: Loading Class: scala/Array$$anonfun$apply$6.class +INFO: Loading Class: scala/Array$$anonfun$apply$7.class +INFO: Loading Class: scala/Array$$anonfun$apply$8.class +INFO: Loading Class: scala/Array$$anonfun$apply$9.class +INFO: Loading Class: scala/Array$$anonfun$concat$1.class +INFO: Loading Class: scala/Array$$anonfun$concat$2.class +INFO: Loading Class: scala/Array$$anonfun$fill$1.class +INFO: Loading Class: scala/Array$$anonfun$fill$2.class +INFO: Loading Class: scala/Array$$anonfun$fill$3.class +INFO: Loading Class: scala/Array$$anonfun$fill$4.class +INFO: Loading Class: scala/Array$$anonfun$ofDim$2.class +INFO: Loading Class: scala/Array$$anonfun$ofDim$3.class +INFO: Loading Class: scala/Array$$anonfun$ofDim$4.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$1$$anonfun$apply$11.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$1.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$2$$anonfun$apply$12.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$2.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$3$$anonfun$apply$13.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$3.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$4$$anonfun$apply$14.class +INFO: Loading Class: scala/Array$$anonfun$tabulate$4.class +INFO: Loading Class: scala/Array$.class +INFO: Loading Class: scala/Array.class +INFO: Loading Class: scala/Boolean$.class +INFO: Loading Class: scala/Boolean.class +INFO: Loading Class: scala/Byte$.class +INFO: Loading Class: scala/Byte.class +INFO: Loading Class: scala/Char$.class +INFO: Loading Class: scala/Char.class +INFO: Loading Class: scala/Cloneable.class +INFO: Loading Class: scala/Console$.class +INFO: Loading Class: scala/Console.class +INFO: Loading Class: scala/DelayedInit.class +INFO: Loading Class: scala/DeprecatedConsole.class +INFO: Loading Class: scala/DeprecatedPredef$class.class +INFO: Loading Class: scala/DeprecatedPredef.class +INFO: Loading Class: scala/Double$.class +INFO: Loading Class: scala/Double.class +INFO: Loading Class: scala/Dynamic.class +INFO: Loading Class: scala/Enumeration$$anonfun$1.class +INFO: Loading Class: scala/Enumeration$$anonfun$scala$Enumeration$$isValDef$1$1.class +INFO: Loading Class: scala/Enumeration$$anonfun$scala$Enumeration$$nameOf$1.class +INFO: Loading Class: scala/Enumeration$$anonfun$scala$Enumeration$$populateNameMap$1.class +INFO: Loading Class: scala/Enumeration$$anonfun$withName$1.class +INFO: Loading Class: scala/Enumeration$Val.class +INFO: Loading Class: scala/Enumeration$Value.class +INFO: Loading Class: scala/Enumeration$ValueOrdering$.class +INFO: Loading Class: scala/Enumeration$ValueSet$$anon$1.class +INFO: Loading Class: scala/Enumeration$ValueSet$$anon$2.class +INFO: Loading Class: scala/Enumeration$ValueSet$$anonfun$iterator$1.class +INFO: Loading Class: scala/Enumeration$ValueSet$$anonfun$keysIteratorFrom$1.class +INFO: Loading Class: scala/Enumeration$ValueSet$.class +INFO: Loading Class: scala/Enumeration$ValueSet.class +INFO: Loading Class: scala/Enumeration.class +INFO: Loading Class: scala/Equals.class +INFO: Loading Class: scala/FallbackArrayBuilding$$anon$1.class +INFO: Loading Class: scala/FallbackArrayBuilding.class +INFO: Loading Class: scala/Float$.class +INFO: Loading Class: scala/Float.class +INFO: Loading Class: scala/Function$$anonfun$chain$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function$$anonfun$chain$1.class +INFO: Loading Class: scala/Function$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function$$anonfun$tupled$2.class +INFO: Loading Class: scala/Function$$anonfun$tupled$3.class +INFO: Loading Class: scala/Function$$anonfun$tupled$4.class +INFO: Loading Class: scala/Function$$anonfun$uncurried$1.class +INFO: Loading Class: scala/Function$$anonfun$uncurried$2.class +INFO: Loading Class: scala/Function$$anonfun$uncurried$3.class +INFO: Loading Class: scala/Function$$anonfun$uncurried$4.class +INFO: Loading Class: scala/Function$$anonfun$untupled$1.class +INFO: Loading Class: scala/Function$$anonfun$untupled$2.class +INFO: Loading Class: scala/Function$$anonfun$untupled$3.class +INFO: Loading Class: scala/Function$$anonfun$untupled$4.class +INFO: Loading Class: scala/Function$.class +INFO: Loading Class: scala/Function.class +INFO: Loading Class: scala/Function0$class.class +INFO: Loading Class: scala/Function0$mcB$sp$class.class +INFO: Loading Class: scala/Function0$mcB$sp.class +INFO: Loading Class: scala/Function0$mcC$sp$class.class +INFO: Loading Class: scala/Function0$mcC$sp.class +INFO: Loading Class: scala/Function0$mcD$sp$class.class +INFO: Loading Class: scala/Function0$mcD$sp.class +INFO: Loading Class: scala/Function0$mcF$sp$class.class +INFO: Loading Class: scala/Function0$mcF$sp.class +INFO: Loading Class: scala/Function0$mcI$sp$class.class +INFO: Loading Class: scala/Function0$mcI$sp.class +INFO: Loading Class: scala/Function0$mcJ$sp$class.class +INFO: Loading Class: scala/Function0$mcJ$sp.class +INFO: Loading Class: scala/Function0$mcS$sp$class.class +INFO: Loading Class: scala/Function0$mcS$sp.class +INFO: Loading Class: scala/Function0$mcV$sp$class.class +INFO: Loading Class: scala/Function0$mcV$sp.class +INFO: Loading Class: scala/Function0$mcZ$sp$class.class +INFO: Loading Class: scala/Function0$mcZ$sp.class +INFO: Loading Class: scala/Function0.class +INFO: Loading Class: scala/Function1$$anonfun$andThen$1.class +INFO: Loading Class: scala/Function1$$anonfun$compose$1.class +INFO: Loading Class: scala/Function1$class.class +INFO: Loading Class: scala/Function1$mcDD$sp$class.class +INFO: Loading Class: scala/Function1$mcDD$sp.class +INFO: Loading Class: scala/Function1$mcDF$sp$class.class +INFO: Loading Class: scala/Function1$mcDF$sp.class +INFO: Loading Class: scala/Function1$mcDI$sp$class.class +INFO: Loading Class: scala/Function1$mcDI$sp.class +INFO: Loading Class: scala/Function1$mcDJ$sp$class.class +INFO: Loading Class: scala/Function1$mcDJ$sp.class +INFO: Loading Class: scala/Function1$mcFD$sp$class.class +INFO: Loading Class: scala/Function1$mcFD$sp.class +INFO: Loading Class: scala/Function1$mcFF$sp$class.class +INFO: Loading Class: scala/Function1$mcFF$sp.class +INFO: Loading Class: scala/Function1$mcFI$sp$class.class +INFO: Loading Class: scala/Function1$mcFI$sp.class +INFO: Loading Class: scala/Function1$mcFJ$sp$class.class +INFO: Loading Class: scala/Function1$mcFJ$sp.class +INFO: Loading Class: scala/Function1$mcID$sp$class.class +INFO: Loading Class: scala/Function1$mcID$sp.class +INFO: Loading Class: scala/Function1$mcIF$sp$class.class +INFO: Loading Class: scala/Function1$mcIF$sp.class +INFO: Loading Class: scala/Function1$mcII$sp$class.class +INFO: Loading Class: scala/Function1$mcII$sp.class +INFO: Loading Class: scala/Function1$mcIJ$sp$class.class +INFO: Loading Class: scala/Function1$mcIJ$sp.class +INFO: Loading Class: scala/Function1$mcJD$sp$class.class +INFO: Loading Class: scala/Function1$mcJD$sp.class +INFO: Loading Class: scala/Function1$mcJF$sp$class.class +INFO: Loading Class: scala/Function1$mcJF$sp.class +INFO: Loading Class: scala/Function1$mcJI$sp$class.class +INFO: Loading Class: scala/Function1$mcJI$sp.class +INFO: Loading Class: scala/Function1$mcJJ$sp$class.class +INFO: Loading Class: scala/Function1$mcJJ$sp.class +INFO: Loading Class: scala/Function1$mcVD$sp$class.class +INFO: Loading Class: scala/Function1$mcVD$sp.class +INFO: Loading Class: scala/Function1$mcVF$sp$class.class +INFO: Loading Class: scala/Function1$mcVF$sp.class +INFO: Loading Class: scala/Function1$mcVI$sp$class.class +INFO: Loading Class: scala/Function1$mcVI$sp.class +INFO: Loading Class: scala/Function1$mcVJ$sp$class.class +INFO: Loading Class: scala/Function1$mcVJ$sp.class +INFO: Loading Class: scala/Function1$mcZD$sp$class.class +INFO: Loading Class: scala/Function1$mcZD$sp.class +INFO: Loading Class: scala/Function1$mcZF$sp$class.class +INFO: Loading Class: scala/Function1$mcZF$sp.class +INFO: Loading Class: scala/Function1$mcZI$sp$class.class +INFO: Loading Class: scala/Function1$mcZI$sp.class +INFO: Loading Class: scala/Function1$mcZJ$sp$class.class +INFO: Loading Class: scala/Function1$mcZJ$sp.class +INFO: Loading Class: scala/Function1.class +INFO: Loading Class: scala/Function10$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function10$$anonfun$curried$1.class +INFO: Loading Class: scala/Function10$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function10$class.class +INFO: Loading Class: scala/Function10.class +INFO: Loading Class: scala/Function11$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function11$$anonfun$curried$1.class +INFO: Loading Class: scala/Function11$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function11$class.class +INFO: Loading Class: scala/Function11.class +INFO: Loading Class: scala/Function12$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function12$$anonfun$curried$1.class +INFO: Loading Class: scala/Function12$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function12$class.class +INFO: Loading Class: scala/Function12.class +INFO: Loading Class: scala/Function13$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function13$$anonfun$curried$1.class +INFO: Loading Class: scala/Function13$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function13$class.class +INFO: Loading Class: scala/Function13.class +INFO: Loading Class: scala/Function14$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function14$$anonfun$curried$1.class +INFO: Loading Class: scala/Function14$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function14$class.class +INFO: Loading Class: scala/Function14.class +INFO: Loading Class: scala/Function15$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function15$$anonfun$curried$1.class +INFO: Loading Class: scala/Function15$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function15$class.class +INFO: Loading Class: scala/Function15.class +INFO: Loading Class: scala/Function16$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function16$$anonfun$curried$1.class +INFO: Loading Class: scala/Function16$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function16$class.class +INFO: Loading Class: scala/Function16.class +INFO: Loading Class: scala/Function17$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function17$$anonfun$curried$1.class +INFO: Loading Class: scala/Function17$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function17$class.class +INFO: Loading Class: scala/Function17.class +INFO: Loading Class: scala/Function18$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function18$$anonfun$curried$1.class +INFO: Loading Class: scala/Function18$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function18$class.class +INFO: Loading Class: scala/Function18.class +INFO: Loading Class: scala/Function19$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function19$$anonfun$curried$1.class +INFO: Loading Class: scala/Function19$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function19$class.class +INFO: Loading Class: scala/Function19.class +INFO: Loading Class: scala/Function2$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function2$$anonfun$curried$1.class +INFO: Loading Class: scala/Function2$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function2$class.class +INFO: Loading Class: scala/Function2$mcDDD$sp$class.class +INFO: Loading Class: scala/Function2$mcDDD$sp.class +INFO: Loading Class: scala/Function2$mcDDI$sp$class.class +INFO: Loading Class: scala/Function2$mcDDI$sp.class +INFO: Loading Class: scala/Function2$mcDDJ$sp$class.class +INFO: Loading Class: scala/Function2$mcDDJ$sp.class +INFO: Loading Class: scala/Function2$mcDID$sp$class.class +INFO: Loading Class: scala/Function2$mcDID$sp.class +INFO: Loading Class: scala/Function2$mcDII$sp$class.class +INFO: Loading Class: scala/Function2$mcDII$sp.class +INFO: Loading Class: scala/Function2$mcDIJ$sp$class.class +INFO: Loading Class: scala/Function2$mcDIJ$sp.class +INFO: Loading Class: scala/Function2$mcDJD$sp$class.class +INFO: Loading Class: scala/Function2$mcDJD$sp.class +INFO: Loading Class: scala/Function2$mcDJI$sp$class.class +INFO: Loading Class: scala/Function2$mcDJI$sp.class +INFO: Loading Class: scala/Function2$mcDJJ$sp$class.class +INFO: Loading Class: scala/Function2$mcDJJ$sp.class +INFO: Loading Class: scala/Function2$mcFDD$sp$class.class +INFO: Loading Class: scala/Function2$mcFDD$sp.class +INFO: Loading Class: scala/Function2$mcFDI$sp$class.class +INFO: Loading Class: scala/Function2$mcFDI$sp.class +INFO: Loading Class: scala/Function2$mcFDJ$sp$class.class +INFO: Loading Class: scala/Function2$mcFDJ$sp.class +INFO: Loading Class: scala/Function2$mcFID$sp$class.class +INFO: Loading Class: scala/Function2$mcFID$sp.class +INFO: Loading Class: scala/Function2$mcFII$sp$class.class +INFO: Loading Class: scala/Function2$mcFII$sp.class +INFO: Loading Class: scala/Function2$mcFIJ$sp$class.class +INFO: Loading Class: scala/Function2$mcFIJ$sp.class +INFO: Loading Class: scala/Function2$mcFJD$sp$class.class +INFO: Loading Class: scala/Function2$mcFJD$sp.class +INFO: Loading Class: scala/Function2$mcFJI$sp$class.class +INFO: Loading Class: scala/Function2$mcFJI$sp.class +INFO: Loading Class: scala/Function2$mcFJJ$sp$class.class +INFO: Loading Class: scala/Function2$mcFJJ$sp.class +INFO: Loading Class: scala/Function2$mcIDD$sp$class.class +INFO: Loading Class: scala/Function2$mcIDD$sp.class +INFO: Loading Class: scala/Function2$mcIDI$sp$class.class +INFO: Loading Class: scala/Function2$mcIDI$sp.class +INFO: Loading Class: scala/Function2$mcIDJ$sp$class.class +INFO: Loading Class: scala/Function2$mcIDJ$sp.class +INFO: Loading Class: scala/Function2$mcIID$sp$class.class +INFO: Loading Class: scala/Function2$mcIID$sp.class +INFO: Loading Class: scala/Function2$mcIII$sp$class.class +INFO: Loading Class: scala/Function2$mcIII$sp.class +INFO: Loading Class: scala/Function2$mcIIJ$sp$class.class +INFO: Loading Class: scala/Function2$mcIIJ$sp.class +INFO: Loading Class: scala/Function2$mcIJD$sp$class.class +INFO: Loading Class: scala/Function2$mcIJD$sp.class +INFO: Loading Class: scala/Function2$mcIJI$sp$class.class +INFO: Loading Class: scala/Function2$mcIJI$sp.class +INFO: Loading Class: scala/Function2$mcIJJ$sp$class.class +INFO: Loading Class: scala/Function2$mcIJJ$sp.class +INFO: Loading Class: scala/Function2$mcJDD$sp$class.class +INFO: Loading Class: scala/Function2$mcJDD$sp.class +INFO: Loading Class: scala/Function2$mcJDI$sp$class.class +INFO: Loading Class: scala/Function2$mcJDI$sp.class +INFO: Loading Class: scala/Function2$mcJDJ$sp$class.class +INFO: Loading Class: scala/Function2$mcJDJ$sp.class +INFO: Loading Class: scala/Function2$mcJID$sp$class.class +INFO: Loading Class: scala/Function2$mcJID$sp.class +INFO: Loading Class: scala/Function2$mcJII$sp$class.class +INFO: Loading Class: scala/Function2$mcJII$sp.class +INFO: Loading Class: scala/Function2$mcJIJ$sp$class.class +INFO: Loading Class: scala/Function2$mcJIJ$sp.class +INFO: Loading Class: scala/Function2$mcJJD$sp$class.class +INFO: Loading Class: scala/Function2$mcJJD$sp.class +INFO: Loading Class: scala/Function2$mcJJI$sp$class.class +INFO: Loading Class: scala/Function2$mcJJI$sp.class +INFO: Loading Class: scala/Function2$mcJJJ$sp$class.class +INFO: Loading Class: scala/Function2$mcJJJ$sp.class +INFO: Loading Class: scala/Function2$mcVDD$sp$class.class +INFO: Loading Class: scala/Function2$mcVDD$sp.class +INFO: Loading Class: scala/Function2$mcVDI$sp$class.class +INFO: Loading Class: scala/Function2$mcVDI$sp.class +INFO: Loading Class: scala/Function2$mcVDJ$sp$class.class +INFO: Loading Class: scala/Function2$mcVDJ$sp.class +INFO: Loading Class: scala/Function2$mcVID$sp$class.class +INFO: Loading Class: scala/Function2$mcVID$sp.class +INFO: Loading Class: scala/Function2$mcVII$sp$class.class +INFO: Loading Class: scala/Function2$mcVII$sp.class +INFO: Loading Class: scala/Function2$mcVIJ$sp$class.class +INFO: Loading Class: scala/Function2$mcVIJ$sp.class +INFO: Loading Class: scala/Function2$mcVJD$sp$class.class +INFO: Loading Class: scala/Function2$mcVJD$sp.class +INFO: Loading Class: scala/Function2$mcVJI$sp$class.class +INFO: Loading Class: scala/Function2$mcVJI$sp.class +INFO: Loading Class: scala/Function2$mcVJJ$sp$class.class +INFO: Loading Class: scala/Function2$mcVJJ$sp.class +INFO: Loading Class: scala/Function2$mcZDD$sp$class.class +INFO: Loading Class: scala/Function2$mcZDD$sp.class +INFO: Loading Class: scala/Function2$mcZDI$sp$class.class +INFO: Loading Class: scala/Function2$mcZDI$sp.class +INFO: Loading Class: scala/Function2$mcZDJ$sp$class.class +INFO: Loading Class: scala/Function2$mcZDJ$sp.class +INFO: Loading Class: scala/Function2$mcZID$sp$class.class +INFO: Loading Class: scala/Function2$mcZID$sp.class +INFO: Loading Class: scala/Function2$mcZII$sp$class.class +INFO: Loading Class: scala/Function2$mcZII$sp.class +INFO: Loading Class: scala/Function2$mcZIJ$sp$class.class +INFO: Loading Class: scala/Function2$mcZIJ$sp.class +INFO: Loading Class: scala/Function2$mcZJD$sp$class.class +INFO: Loading Class: scala/Function2$mcZJD$sp.class +INFO: Loading Class: scala/Function2$mcZJI$sp$class.class +INFO: Loading Class: scala/Function2$mcZJI$sp.class +INFO: Loading Class: scala/Function2$mcZJJ$sp$class.class +INFO: Loading Class: scala/Function2$mcZJJ$sp.class +INFO: Loading Class: scala/Function2.class +INFO: Loading Class: scala/Function20$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function20$$anonfun$curried$1.class +INFO: Loading Class: scala/Function20$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function20$class.class +INFO: Loading Class: scala/Function20.class +INFO: Loading Class: scala/Function21$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function21$$anonfun$curried$1.class +INFO: Loading Class: scala/Function21$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function21$class.class +INFO: Loading Class: scala/Function21.class +INFO: Loading Class: scala/Function22$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function22$$anonfun$curried$1.class +INFO: Loading Class: scala/Function22$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function22$class.class +INFO: Loading Class: scala/Function22.class +INFO: Loading Class: scala/Function3$$anonfun$curried$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/Function3$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function3$$anonfun$curried$1.class +INFO: Loading Class: scala/Function3$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function3$class.class +INFO: Loading Class: scala/Function3.class +INFO: Loading Class: scala/Function4$$anonfun$curried$1$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: scala/Function4$$anonfun$curried$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/Function4$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function4$$anonfun$curried$1.class +INFO: Loading Class: scala/Function4$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function4$class.class +INFO: Loading Class: scala/Function4.class +INFO: Loading Class: scala/Function5$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function5$$anonfun$curried$1.class +INFO: Loading Class: scala/Function5$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function5$class.class +INFO: Loading Class: scala/Function5.class +INFO: Loading Class: scala/Function6$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function6$$anonfun$curried$1.class +INFO: Loading Class: scala/Function6$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function6$class.class +INFO: Loading Class: scala/Function6.class +INFO: Loading Class: scala/Function7$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function7$$anonfun$curried$1.class +INFO: Loading Class: scala/Function7$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function7$class.class +INFO: Loading Class: scala/Function7.class +INFO: Loading Class: scala/Function8$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function8$$anonfun$curried$1.class +INFO: Loading Class: scala/Function8$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function8$class.class +INFO: Loading Class: scala/Function8.class +INFO: Loading Class: scala/Function9$$anonfun$curried$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Function9$$anonfun$curried$1.class +INFO: Loading Class: scala/Function9$$anonfun$tupled$1.class +INFO: Loading Class: scala/Function9$class.class +INFO: Loading Class: scala/Function9.class +INFO: Loading Class: scala/Immutable.class +INFO: Loading Class: scala/Int$.class +INFO: Loading Class: scala/Int.class +INFO: Loading Class: scala/Long$.class +INFO: Loading Class: scala/Long.class +INFO: Loading Class: scala/LowPriorityImplicits$$anon$4.class +INFO: Loading Class: scala/LowPriorityImplicits.class +INFO: Loading Class: scala/MatchError.class +INFO: Loading Class: scala/Mutable.class +INFO: Loading Class: scala/None$.class +INFO: Loading Class: scala/None.class +INFO: Loading Class: scala/NotImplementedError.class +INFO: Loading Class: scala/NotNull.class +INFO: Loading Class: scala/Option$$anonfun$orNull$1.class +INFO: Loading Class: scala/Option$.class +INFO: Loading Class: scala/Option$WithFilter$$anonfun$withFilter$1.class +INFO: Loading Class: scala/Option$WithFilter.class +INFO: Loading Class: scala/Option.class +INFO: Loading Class: scala/PartialFunction$$anon$1$$anonfun$3.class +INFO: Loading Class: scala/PartialFunction$$anon$1.class +INFO: Loading Class: scala/PartialFunction$$anonfun$1.class +INFO: Loading Class: scala/PartialFunction$$anonfun$2.class +INFO: Loading Class: scala/PartialFunction$$anonfun$apply$1.class +INFO: Loading Class: scala/PartialFunction$$anonfun$runWith$1.class +INFO: Loading Class: scala/PartialFunction$.class +INFO: Loading Class: scala/PartialFunction$AndThen.class +INFO: Loading Class: scala/PartialFunction$Lifted.class +INFO: Loading Class: scala/PartialFunction$OrElse.class +INFO: Loading Class: scala/PartialFunction$Unlifted.class +INFO: Loading Class: scala/PartialFunction$class.class +INFO: Loading Class: scala/PartialFunction.class +INFO: Loading Class: scala/Predef$$anon$1.class +INFO: Loading Class: scala/Predef$$anon$2.class +INFO: Loading Class: scala/Predef$$anon$3.class +INFO: Loading Class: scala/Predef$$eq$colon$eq$.class +INFO: Loading Class: scala/Predef$$eq$colon$eq.class +INFO: Loading Class: scala/Predef$$less$colon$less.class +INFO: Loading Class: scala/Predef$.class +INFO: Loading Class: scala/Predef$ArrayCharSequence.class +INFO: Loading Class: scala/Predef$ArrowAssoc$.class +INFO: Loading Class: scala/Predef$ArrowAssoc.class +INFO: Loading Class: scala/Predef$DummyImplicit$.class +INFO: Loading Class: scala/Predef$DummyImplicit.class +INFO: Loading Class: scala/Predef$Ensuring$.class +INFO: Loading Class: scala/Predef$Ensuring.class +INFO: Loading Class: scala/Predef$Pair$.class +INFO: Loading Class: scala/Predef$RichException$.class +INFO: Loading Class: scala/Predef$RichException.class +INFO: Loading Class: scala/Predef$SeqCharSequence.class +INFO: Loading Class: scala/Predef$StringAdd$.class +INFO: Loading Class: scala/Predef$StringAdd.class +INFO: Loading Class: scala/Predef$StringFormat$.class +INFO: Loading Class: scala/Predef$StringFormat.class +INFO: Loading Class: scala/Predef$Triple$.class +INFO: Loading Class: scala/Predef$any2stringadd$.class +INFO: Loading Class: scala/Predef$any2stringadd.class +INFO: Loading Class: scala/Predef.class +INFO: Loading Class: scala/Product$$anon$1.class +INFO: Loading Class: scala/Product$class.class +INFO: Loading Class: scala/Product.class +INFO: Loading Class: scala/Product1$.class +INFO: Loading Class: scala/Product1$class.class +INFO: Loading Class: scala/Product1$mcD$sp$class.class +INFO: Loading Class: scala/Product1$mcD$sp.class +INFO: Loading Class: scala/Product1$mcI$sp$class.class +INFO: Loading Class: scala/Product1$mcI$sp.class +INFO: Loading Class: scala/Product1$mcJ$sp$class.class +INFO: Loading Class: scala/Product1$mcJ$sp.class +INFO: Loading Class: scala/Product1.class +INFO: Loading Class: scala/Product10$.class +INFO: Loading Class: scala/Product10$class.class +INFO: Loading Class: scala/Product10.class +INFO: Loading Class: scala/Product11$.class +INFO: Loading Class: scala/Product11$class.class +INFO: Loading Class: scala/Product11.class +INFO: Loading Class: scala/Product12$.class +INFO: Loading Class: scala/Product12$class.class +INFO: Loading Class: scala/Product12.class +INFO: Loading Class: scala/Product13$.class +INFO: Loading Class: scala/Product13$class.class +INFO: Loading Class: scala/Product13.class +INFO: Loading Class: scala/Product14$.class +INFO: Loading Class: scala/Product14$class.class +INFO: Loading Class: scala/Product14.class +INFO: Loading Class: scala/Product15$.class +INFO: Loading Class: scala/Product15$class.class +INFO: Loading Class: scala/Product15.class +INFO: Loading Class: scala/Product16$.class +INFO: Loading Class: scala/Product16$class.class +INFO: Loading Class: scala/Product16.class +INFO: Loading Class: scala/Product17$.class +INFO: Loading Class: scala/Product17$class.class +INFO: Loading Class: scala/Product17.class +INFO: Loading Class: scala/Product18$.class +INFO: Loading Class: scala/Product18$class.class +INFO: Loading Class: scala/Product18.class +INFO: Loading Class: scala/Product19$.class +INFO: Loading Class: scala/Product19$class.class +INFO: Loading Class: scala/Product19.class +INFO: Loading Class: scala/Product2$.class +INFO: Loading Class: scala/Product2$class.class +INFO: Loading Class: scala/Product2$mcDD$sp$class.class +INFO: Loading Class: scala/Product2$mcDD$sp.class +INFO: Loading Class: scala/Product2$mcDI$sp$class.class +INFO: Loading Class: scala/Product2$mcDI$sp.class +INFO: Loading Class: scala/Product2$mcDJ$sp$class.class +INFO: Loading Class: scala/Product2$mcDJ$sp.class +INFO: Loading Class: scala/Product2$mcID$sp$class.class +INFO: Loading Class: scala/Product2$mcID$sp.class +INFO: Loading Class: scala/Product2$mcII$sp$class.class +INFO: Loading Class: scala/Product2$mcII$sp.class +INFO: Loading Class: scala/Product2$mcIJ$sp$class.class +INFO: Loading Class: scala/Product2$mcIJ$sp.class +INFO: Loading Class: scala/Product2$mcJD$sp$class.class +INFO: Loading Class: scala/Product2$mcJD$sp.class +INFO: Loading Class: scala/Product2$mcJI$sp$class.class +INFO: Loading Class: scala/Product2$mcJI$sp.class +INFO: Loading Class: scala/Product2$mcJJ$sp$class.class +INFO: Loading Class: scala/Product2$mcJJ$sp.class +INFO: Loading Class: scala/Product2.class +INFO: Loading Class: scala/Product20$.class +INFO: Loading Class: scala/Product20$class.class +INFO: Loading Class: scala/Product20.class +INFO: Loading Class: scala/Product21$.class +INFO: Loading Class: scala/Product21$class.class +INFO: Loading Class: scala/Product21.class +INFO: Loading Class: scala/Product22$.class +INFO: Loading Class: scala/Product22$class.class +INFO: Loading Class: scala/Product22.class +INFO: Loading Class: scala/Product3$.class +INFO: Loading Class: scala/Product3$class.class +INFO: Loading Class: scala/Product3.class +INFO: Loading Class: scala/Product4$.class +INFO: Loading Class: scala/Product4$class.class +INFO: Loading Class: scala/Product4.class +INFO: Loading Class: scala/Product5$.class +INFO: Loading Class: scala/Product5$class.class +INFO: Loading Class: scala/Product5.class +INFO: Loading Class: scala/Product6$.class +INFO: Loading Class: scala/Product6$class.class +INFO: Loading Class: scala/Product6.class +INFO: Loading Class: scala/Product7$.class +INFO: Loading Class: scala/Product7$class.class +INFO: Loading Class: scala/Product7.class +INFO: Loading Class: scala/Product8$.class +INFO: Loading Class: scala/Product8$class.class +INFO: Loading Class: scala/Product8.class +INFO: Loading Class: scala/Product9$.class +INFO: Loading Class: scala/Product9$class.class +INFO: Loading Class: scala/Product9.class +INFO: Loading Class: scala/Proxy$.class +INFO: Loading Class: scala/Proxy$Typed.class +INFO: Loading Class: scala/Proxy$class.class +INFO: Loading Class: scala/Proxy.class +INFO: Loading Class: scala/Responder$$anon$1.class +INFO: Loading Class: scala/Responder$$anon$2$$anonfun$respond$2.class +INFO: Loading Class: scala/Responder$$anon$2.class +INFO: Loading Class: scala/Responder$$anon$3$$anonfun$respond$1.class +INFO: Loading Class: scala/Responder$$anon$3.class +INFO: Loading Class: scala/Responder$$anon$4$$anonfun$respond$3.class +INFO: Loading Class: scala/Responder$$anon$4.class +INFO: Loading Class: scala/Responder$$anonfun$loop$1$$anonfun$apply$1.class +INFO: Loading Class: scala/Responder$$anonfun$loop$1.class +INFO: Loading Class: scala/Responder$$anonfun$loopWhile$1$$anonfun$apply$2.class +INFO: Loading Class: scala/Responder$$anonfun$loopWhile$1.class +INFO: Loading Class: scala/Responder$$anonfun$run$1.class +INFO: Loading Class: scala/Responder$.class +INFO: Loading Class: scala/Responder.class +INFO: Loading Class: scala/ScalaReflectionException$.class +INFO: Loading Class: scala/ScalaReflectionException.class +INFO: Loading Class: scala/SerialVersionUID.class +INFO: Loading Class: scala/Serializable.class +INFO: Loading Class: scala/Short$.class +INFO: Loading Class: scala/Short.class +INFO: Loading Class: scala/Some$.class +INFO: Loading Class: scala/Some.class +INFO: Loading Class: scala/Specializable$.class +INFO: Loading Class: scala/Specializable$Group.class +INFO: Loading Class: scala/Specializable$SpecializedGroup.class +INFO: Loading Class: scala/Specializable.class +INFO: Loading Class: scala/StringContext$$anonfun$raw$1.class +INFO: Loading Class: scala/StringContext$$anonfun$s$1.class +INFO: Loading Class: scala/StringContext$.class +INFO: Loading Class: scala/StringContext$InvalidEscapeException.class +INFO: Loading Class: scala/StringContext.class +INFO: Loading Class: scala/Symbol$.class +INFO: Loading Class: scala/Symbol.class +INFO: Loading Class: scala/Tuple1$.class +INFO: Loading Class: scala/Tuple1$mcD$sp.class +INFO: Loading Class: scala/Tuple1$mcI$sp.class +INFO: Loading Class: scala/Tuple1$mcJ$sp.class +INFO: Loading Class: scala/Tuple1.class +INFO: Loading Class: scala/Tuple10$.class +INFO: Loading Class: scala/Tuple10.class +INFO: Loading Class: scala/Tuple11$.class +INFO: Loading Class: scala/Tuple11.class +INFO: Loading Class: scala/Tuple12$.class +INFO: Loading Class: scala/Tuple12.class +INFO: Loading Class: scala/Tuple13$.class +INFO: Loading Class: scala/Tuple13.class +INFO: Loading Class: scala/Tuple14$.class +INFO: Loading Class: scala/Tuple14.class +INFO: Loading Class: scala/Tuple15$.class +INFO: Loading Class: scala/Tuple15.class +INFO: Loading Class: scala/Tuple16$.class +INFO: Loading Class: scala/Tuple16.class +INFO: Loading Class: scala/Tuple17$.class +INFO: Loading Class: scala/Tuple17.class +INFO: Loading Class: scala/Tuple18$.class +INFO: Loading Class: scala/Tuple18.class +INFO: Loading Class: scala/Tuple19$.class +INFO: Loading Class: scala/Tuple19.class +INFO: Loading Class: scala/Tuple2$.class +INFO: Loading Class: scala/Tuple2$mcCC$sp.class +INFO: Loading Class: scala/Tuple2$mcCD$sp.class +INFO: Loading Class: scala/Tuple2$mcCI$sp.class +INFO: Loading Class: scala/Tuple2$mcCJ$sp.class +INFO: Loading Class: scala/Tuple2$mcCZ$sp.class +INFO: Loading Class: scala/Tuple2$mcDC$sp.class +INFO: Loading Class: scala/Tuple2$mcDD$sp.class +INFO: Loading Class: scala/Tuple2$mcDI$sp.class +INFO: Loading Class: scala/Tuple2$mcDJ$sp.class +INFO: Loading Class: scala/Tuple2$mcDZ$sp.class +INFO: Loading Class: scala/Tuple2$mcIC$sp.class +INFO: Loading Class: scala/Tuple2$mcID$sp.class +INFO: Loading Class: scala/Tuple2$mcII$sp.class +INFO: Loading Class: scala/Tuple2$mcIJ$sp.class +INFO: Loading Class: scala/Tuple2$mcIZ$sp.class +INFO: Loading Class: scala/Tuple2$mcJC$sp.class +INFO: Loading Class: scala/Tuple2$mcJD$sp.class +INFO: Loading Class: scala/Tuple2$mcJI$sp.class +INFO: Loading Class: scala/Tuple2$mcJJ$sp.class +INFO: Loading Class: scala/Tuple2$mcJZ$sp.class +INFO: Loading Class: scala/Tuple2$mcZC$sp.class +INFO: Loading Class: scala/Tuple2$mcZD$sp.class +INFO: Loading Class: scala/Tuple2$mcZI$sp.class +INFO: Loading Class: scala/Tuple2$mcZJ$sp.class +INFO: Loading Class: scala/Tuple2$mcZZ$sp.class +INFO: Loading Class: scala/Tuple2.class +INFO: Loading Class: scala/Tuple20$.class +INFO: Loading Class: scala/Tuple20.class +INFO: Loading Class: scala/Tuple21$.class +INFO: Loading Class: scala/Tuple21.class +INFO: Loading Class: scala/Tuple22$.class +INFO: Loading Class: scala/Tuple22.class +INFO: Loading Class: scala/Tuple3$.class +INFO: Loading Class: scala/Tuple3.class +INFO: Loading Class: scala/Tuple4$.class +INFO: Loading Class: scala/Tuple4.class +INFO: Loading Class: scala/Tuple5$.class +INFO: Loading Class: scala/Tuple5.class +INFO: Loading Class: scala/Tuple6$.class +INFO: Loading Class: scala/Tuple6.class +INFO: Loading Class: scala/Tuple7$.class +INFO: Loading Class: scala/Tuple7.class +INFO: Loading Class: scala/Tuple8$.class +INFO: Loading Class: scala/Tuple8.class +INFO: Loading Class: scala/Tuple9$.class +INFO: Loading Class: scala/Tuple9.class +INFO: Loading Class: scala/UninitializedError.class +INFO: Loading Class: scala/UninitializedFieldError$.class +INFO: Loading Class: scala/UninitializedFieldError.class +INFO: Loading Class: scala/UniquenessCache.class +INFO: Loading Class: scala/Unit$.class +INFO: Loading Class: scala/Unit.class +INFO: Loading Class: scala/annotation/Annotation.class +INFO: Loading Class: scala/annotation/ClassfileAnnotation.class +INFO: Loading Class: scala/annotation/StaticAnnotation.class +INFO: Loading Class: scala/annotation/TypeConstraint.class +INFO: Loading Class: scala/annotation/bridge.class +INFO: Loading Class: scala/annotation/compileTimeOnly.class +INFO: Loading Class: scala/annotation/elidable$.class +INFO: Loading Class: scala/annotation/elidable.class +INFO: Loading Class: scala/annotation/implicitNotFound.class +INFO: Loading Class: scala/annotation/meta/beanGetter.class +INFO: Loading Class: scala/annotation/meta/beanSetter.class +INFO: Loading Class: scala/annotation/meta/companionClass.class +INFO: Loading Class: scala/annotation/meta/companionMethod.class +INFO: Loading Class: scala/annotation/meta/companionObject.class +INFO: Loading Class: scala/annotation/meta/field.class +INFO: Loading Class: scala/annotation/meta/getter.class +INFO: Loading Class: scala/annotation/meta/languageFeature.class +INFO: Loading Class: scala/annotation/meta/package$.class +INFO: Loading Class: scala/annotation/meta/package.class +INFO: Loading Class: scala/annotation/meta/param.class +INFO: Loading Class: scala/annotation/meta/setter.class +INFO: Loading Class: scala/annotation/migration.class +INFO: Loading Class: scala/annotation/strictfp.class +INFO: Loading Class: scala/annotation/switch.class +INFO: Loading Class: scala/annotation/tailrec.class +INFO: Loading Class: scala/annotation/unchecked/uncheckedStable.class +INFO: Loading Class: scala/annotation/unchecked/uncheckedVariance.class +INFO: Loading Class: scala/annotation/unspecialized.class +INFO: Loading Class: scala/annotation/varargs.class +INFO: Loading Class: scala/beans/BeanDescription.class +INFO: Loading Class: scala/beans/BeanDisplayName.class +INFO: Loading Class: scala/beans/BeanInfo.class +INFO: Loading Class: scala/beans/BeanInfoSkip.class +INFO: Loading Class: scala/beans/BeanProperty.class +INFO: Loading Class: scala/beans/BooleanBeanProperty.class +INFO: Loading Class: scala/beans/ScalaBeanInfo$$anonfun$1$$anonfun$apply$1.class +INFO: Loading Class: scala/beans/ScalaBeanInfo$$anonfun$1.class +INFO: Loading Class: scala/beans/ScalaBeanInfo$$anonfun$2.class +INFO: Loading Class: scala/beans/ScalaBeanInfo.class +INFO: Loading Class: scala/collection/$colon$plus$.class +INFO: Loading Class: scala/collection/$colon$plus.class +INFO: Loading Class: scala/collection/$plus$colon$.class +INFO: Loading Class: scala/collection/$plus$colon.class +INFO: Loading Class: scala/collection/AbstractIterable.class +INFO: Loading Class: scala/collection/AbstractIterator.class +INFO: Loading Class: scala/collection/AbstractMap.class +INFO: Loading Class: scala/collection/AbstractSeq.class +INFO: Loading Class: scala/collection/AbstractSet.class +INFO: Loading Class: scala/collection/AbstractTraversable.class +INFO: Loading Class: scala/collection/BitSet$.class +INFO: Loading Class: scala/collection/BitSet$class.class +INFO: Loading Class: scala/collection/BitSet.class +INFO: Loading Class: scala/collection/BitSetLike$$anon$1.class +INFO: Loading Class: scala/collection/BitSetLike$$anonfun$isEmpty$1.class +INFO: Loading Class: scala/collection/BitSetLike$$anonfun$subsetOf$1.class +INFO: Loading Class: scala/collection/BitSetLike$.class +INFO: Loading Class: scala/collection/BitSetLike$class.class +INFO: Loading Class: scala/collection/BitSetLike.class +INFO: Loading Class: scala/collection/BufferedIterator$class.class +INFO: Loading Class: scala/collection/BufferedIterator.class +INFO: Loading Class: scala/collection/CustomParallelizable$class.class +INFO: Loading Class: scala/collection/CustomParallelizable.class +INFO: Loading Class: scala/collection/DebugUtils$$anonfun$arrayString$1.class +INFO: Loading Class: scala/collection/DebugUtils$$anonfun$buildString$1.class +INFO: Loading Class: scala/collection/DebugUtils$.class +INFO: Loading Class: scala/collection/DebugUtils.class +INFO: Loading Class: scala/collection/DefaultMap$$anonfun$$minus$1.class +INFO: Loading Class: scala/collection/DefaultMap$class.class +INFO: Loading Class: scala/collection/DefaultMap.class +INFO: Loading Class: scala/collection/GenIterable$.class +INFO: Loading Class: scala/collection/GenIterable$class.class +INFO: Loading Class: scala/collection/GenIterable.class +INFO: Loading Class: scala/collection/GenIterableLike.class +INFO: Loading Class: scala/collection/GenMap$.class +INFO: Loading Class: scala/collection/GenMap.class +INFO: Loading Class: scala/collection/GenMapLike$$anonfun$liftedTree1$1$1.class +INFO: Loading Class: scala/collection/GenMapLike$class.class +INFO: Loading Class: scala/collection/GenMapLike.class +INFO: Loading Class: scala/collection/GenSeq$.class +INFO: Loading Class: scala/collection/GenSeq$class.class +INFO: Loading Class: scala/collection/GenSeq.class +INFO: Loading Class: scala/collection/GenSeqLike$$anonfun$indexOf$1.class +INFO: Loading Class: scala/collection/GenSeqLike$$anonfun$lastIndexOf$1.class +INFO: Loading Class: scala/collection/GenSeqLike$$anonfun$lastIndexOf$2.class +INFO: Loading Class: scala/collection/GenSeqLike$class.class +INFO: Loading Class: scala/collection/GenSeqLike.class +INFO: Loading Class: scala/collection/GenSet$.class +INFO: Loading Class: scala/collection/GenSet$class.class +INFO: Loading Class: scala/collection/GenSet.class +INFO: Loading Class: scala/collection/GenSetLike$class.class +INFO: Loading Class: scala/collection/GenSetLike.class +INFO: Loading Class: scala/collection/GenTraversable$.class +INFO: Loading Class: scala/collection/GenTraversable$class.class +INFO: Loading Class: scala/collection/GenTraversable.class +INFO: Loading Class: scala/collection/GenTraversableLike.class +INFO: Loading Class: scala/collection/GenTraversableOnce.class +INFO: Loading Class: scala/collection/IndexedSeq$$anon$1.class +INFO: Loading Class: scala/collection/IndexedSeq$.class +INFO: Loading Class: scala/collection/IndexedSeq$class.class +INFO: Loading Class: scala/collection/IndexedSeq.class +INFO: Loading Class: scala/collection/IndexedSeqLike$Elements.class +INFO: Loading Class: scala/collection/IndexedSeqLike$class.class +INFO: Loading Class: scala/collection/IndexedSeqLike.class +INFO: Loading Class: scala/collection/IndexedSeqOptimized$$anon$1.class +INFO: Loading Class: scala/collection/IndexedSeqOptimized$$anonfun$1.class +INFO: Loading Class: scala/collection/IndexedSeqOptimized$$anonfun$indexWhere$1.class +INFO: Loading Class: scala/collection/IndexedSeqOptimized$class.class +INFO: Loading Class: scala/collection/IndexedSeqOptimized.class +INFO: Loading Class: scala/collection/Iterable$.class +INFO: Loading Class: scala/collection/Iterable$class.class +INFO: Loading Class: scala/collection/Iterable.class +INFO: Loading Class: scala/collection/IterableLike$$anon$1.class +INFO: Loading Class: scala/collection/IterableLike$$anonfun$grouped$1.class +INFO: Loading Class: scala/collection/IterableLike$$anonfun$sliding$1.class +INFO: Loading Class: scala/collection/IterableLike$$anonfun$takeRight$1.class +INFO: Loading Class: scala/collection/IterableLike$$anonfun$zipWithIndex$1.class +INFO: Loading Class: scala/collection/IterableLike$class.class +INFO: Loading Class: scala/collection/IterableLike.class +INFO: Loading Class: scala/collection/IterableProxy.class +INFO: Loading Class: scala/collection/IterableProxyLike$class.class +INFO: Loading Class: scala/collection/IterableProxyLike.class +INFO: Loading Class: scala/collection/IterableView$$anon$1.class +INFO: Loading Class: scala/collection/IterableView$.class +INFO: Loading Class: scala/collection/IterableView.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$1.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$10.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$2.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$3.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$4.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$5.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$6.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$7.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$8.class +INFO: Loading Class: scala/collection/IterableViewLike$$anon$9.class +INFO: Loading Class: scala/collection/IterableViewLike$$anonfun$grouped$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/IterableViewLike$$anonfun$grouped$1.class +INFO: Loading Class: scala/collection/IterableViewLike$$anonfun$sliding$1$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/IterableViewLike$$anonfun$sliding$1.class +INFO: Loading Class: scala/collection/IterableViewLike$AbstractTransformed.class +INFO: Loading Class: scala/collection/IterableViewLike$Appended$$anonfun$iterator$1.class +INFO: Loading Class: scala/collection/IterableViewLike$Appended$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Appended.class +INFO: Loading Class: scala/collection/IterableViewLike$DroppedWhile$class.class +INFO: Loading Class: scala/collection/IterableViewLike$DroppedWhile.class +INFO: Loading Class: scala/collection/IterableViewLike$EmptyView$class.class +INFO: Loading Class: scala/collection/IterableViewLike$EmptyView.class +INFO: Loading Class: scala/collection/IterableViewLike$Filtered$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Filtered.class +INFO: Loading Class: scala/collection/IterableViewLike$FlatMapped$class.class +INFO: Loading Class: scala/collection/IterableViewLike$FlatMapped.class +INFO: Loading Class: scala/collection/IterableViewLike$Forced$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Forced.class +INFO: Loading Class: scala/collection/IterableViewLike$Mapped$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Mapped.class +INFO: Loading Class: scala/collection/IterableViewLike$Sliced$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Sliced.class +INFO: Loading Class: scala/collection/IterableViewLike$TakenWhile$class.class +INFO: Loading Class: scala/collection/IterableViewLike$TakenWhile.class +INFO: Loading Class: scala/collection/IterableViewLike$Transformed$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Transformed.class +INFO: Loading Class: scala/collection/IterableViewLike$Zipped$class.class +INFO: Loading Class: scala/collection/IterableViewLike$Zipped.class +INFO: Loading Class: scala/collection/IterableViewLike$ZippedAll$class.class +INFO: Loading Class: scala/collection/IterableViewLike$ZippedAll.class +INFO: Loading Class: scala/collection/IterableViewLike$class.class +INFO: Loading Class: scala/collection/IterableViewLike.class +INFO: Loading Class: scala/collection/Iterator$$anon$1.class +INFO: Loading Class: scala/collection/Iterator$$anon$10.class +INFO: Loading Class: scala/collection/Iterator$$anon$11.class +INFO: Loading Class: scala/collection/Iterator$$anon$12.class +INFO: Loading Class: scala/collection/Iterator$$anon$13.class +INFO: Loading Class: scala/collection/Iterator$$anon$14.class +INFO: Loading Class: scala/collection/Iterator$$anon$15.class +INFO: Loading Class: scala/collection/Iterator$$anon$16.class +INFO: Loading Class: scala/collection/Iterator$$anon$17.class +INFO: Loading Class: scala/collection/Iterator$$anon$18.class +INFO: Loading Class: scala/collection/Iterator$$anon$19.class +INFO: Loading Class: scala/collection/Iterator$$anon$2.class +INFO: Loading Class: scala/collection/Iterator$$anon$20.class +INFO: Loading Class: scala/collection/Iterator$$anon$21.class +INFO: Loading Class: scala/collection/Iterator$$anon$22.class +INFO: Loading Class: scala/collection/Iterator$$anon$23.class +INFO: Loading Class: scala/collection/Iterator$$anon$24.class +INFO: Loading Class: scala/collection/Iterator$$anon$3.class +INFO: Loading Class: scala/collection/Iterator$$anon$4.class +INFO: Loading Class: scala/collection/Iterator$$anon$5.class +INFO: Loading Class: scala/collection/Iterator$$anon$6.class +INFO: Loading Class: scala/collection/Iterator$$anon$7.class +INFO: Loading Class: scala/collection/Iterator$$anon$8.class +INFO: Loading Class: scala/collection/Iterator$$anon$9.class +INFO: Loading Class: scala/collection/Iterator$$anonfun$1.class +INFO: Loading Class: scala/collection/Iterator$$anonfun$contains$1.class +INFO: Loading Class: scala/collection/Iterator$$anonfun$copyToArray$1.class +INFO: Loading Class: scala/collection/Iterator$$anonfun$filterNot$1.class +INFO: Loading Class: scala/collection/Iterator$$anonfun$toStream$1.class +INFO: Loading Class: scala/collection/Iterator$.class +INFO: Loading Class: scala/collection/Iterator$ConcatIterator$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/Iterator$ConcatIterator.class +INFO: Loading Class: scala/collection/Iterator$GroupedIterator$$anonfun$padding$1.class +INFO: Loading Class: scala/collection/Iterator$GroupedIterator.class +INFO: Loading Class: scala/collection/Iterator$JoinIterator$$anonfun$$plus$plus$2.class +INFO: Loading Class: scala/collection/Iterator$JoinIterator.class +INFO: Loading Class: scala/collection/Iterator$Leading$1.class +INFO: Loading Class: scala/collection/Iterator$PartitionIterator$1.class +INFO: Loading Class: scala/collection/Iterator$Partner$1.class +INFO: Loading Class: scala/collection/Iterator$class.class +INFO: Loading Class: scala/collection/Iterator.class +INFO: Loading Class: scala/collection/JavaConversions$.class +INFO: Loading Class: scala/collection/JavaConversions.class +INFO: Loading Class: scala/collection/JavaConverters$.class +INFO: Loading Class: scala/collection/JavaConverters.class +INFO: Loading Class: scala/collection/LinearSeq$.class +INFO: Loading Class: scala/collection/LinearSeq$class.class +INFO: Loading Class: scala/collection/LinearSeq.class +INFO: Loading Class: scala/collection/LinearSeqLike$$anon$1.class +INFO: Loading Class: scala/collection/LinearSeqLike$class.class +INFO: Loading Class: scala/collection/LinearSeqLike.class +INFO: Loading Class: scala/collection/LinearSeqOptimized$class.class +INFO: Loading Class: scala/collection/LinearSeqOptimized.class +INFO: Loading Class: scala/collection/Map$.class +INFO: Loading Class: scala/collection/Map$WithDefault.class +INFO: Loading Class: scala/collection/Map$class.class +INFO: Loading Class: scala/collection/Map.class +INFO: Loading Class: scala/collection/MapLike$$anon$1.class +INFO: Loading Class: scala/collection/MapLike$$anon$2.class +INFO: Loading Class: scala/collection/MapLike$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/MapLike$$anonfun$addString$1.class +INFO: Loading Class: scala/collection/MapLike$$anonfun$filterNot$1.class +INFO: Loading Class: scala/collection/MapLike$DefaultKeySet.class +INFO: Loading Class: scala/collection/MapLike$DefaultValuesIterable.class +INFO: Loading Class: scala/collection/MapLike$FilteredKeys$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/MapLike$FilteredKeys$$anonfun$iterator$1.class +INFO: Loading Class: scala/collection/MapLike$FilteredKeys.class +INFO: Loading Class: scala/collection/MapLike$MappedValues$$anonfun$foreach$2.class +INFO: Loading Class: scala/collection/MapLike$MappedValues$$anonfun$foreach$3.class +INFO: Loading Class: scala/collection/MapLike$MappedValues$$anonfun$iterator$2.class +INFO: Loading Class: scala/collection/MapLike$MappedValues$$anonfun$iterator$3.class +INFO: Loading Class: scala/collection/MapLike$MappedValues.class +INFO: Loading Class: scala/collection/MapLike$class.class +INFO: Loading Class: scala/collection/MapLike.class +INFO: Loading Class: scala/collection/MapProxy.class +INFO: Loading Class: scala/collection/MapProxyLike$class.class +INFO: Loading Class: scala/collection/MapProxyLike.class +INFO: Loading Class: scala/collection/Parallel.class +INFO: Loading Class: scala/collection/Parallelizable$$anonfun$par$1.class +INFO: Loading Class: scala/collection/Parallelizable$class.class +INFO: Loading Class: scala/collection/Parallelizable.class +INFO: Loading Class: scala/collection/Searching$.class +INFO: Loading Class: scala/collection/Searching$Found$.class +INFO: Loading Class: scala/collection/Searching$Found.class +INFO: Loading Class: scala/collection/Searching$InsertionPoint$.class +INFO: Loading Class: scala/collection/Searching$InsertionPoint.class +INFO: Loading Class: scala/collection/Searching$SearchImpl.class +INFO: Loading Class: scala/collection/Searching$SearchResult.class +INFO: Loading Class: scala/collection/Searching.class +INFO: Loading Class: scala/collection/Seq$.class +INFO: Loading Class: scala/collection/Seq$class.class +INFO: Loading Class: scala/collection/Seq.class +INFO: Loading Class: scala/collection/SeqExtractors.class +INFO: Loading Class: scala/collection/SeqLike$$anon$1.class +INFO: Loading Class: scala/collection/SeqLike$$anon$2.class +INFO: Loading Class: scala/collection/SeqLike$$anon$3.class +INFO: Loading Class: scala/collection/SeqLike$$anon$4.class +INFO: Loading Class: scala/collection/SeqLike$$anon$5.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$contains$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$diff$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$distinct$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$intersect$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$occCounts$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$reverse$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$reverse$2.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$reverseMap$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$reverseMap$2.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$sorted$1.class +INFO: Loading Class: scala/collection/SeqLike$$anonfun$sorted$2.class +INFO: Loading Class: scala/collection/SeqLike$.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$1.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$4$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$4.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$5.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$init$1.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$init$2.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$next$1$$anonfun$apply$mcVI$sp$1.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$next$1.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr$$anonfun$next$2.class +INFO: Loading Class: scala/collection/SeqLike$CombinationsItr.class +INFO: Loading Class: scala/collection/SeqLike$PermutationsItr$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/SeqLike$PermutationsItr$$anonfun$2.class +INFO: Loading Class: scala/collection/SeqLike$PermutationsItr$$anonfun$3.class +INFO: Loading Class: scala/collection/SeqLike$PermutationsItr.class +INFO: Loading Class: scala/collection/SeqLike$class.class +INFO: Loading Class: scala/collection/SeqLike.class +INFO: Loading Class: scala/collection/SeqProxy.class +INFO: Loading Class: scala/collection/SeqProxyLike$$anonfun$lastIndexOf$1.class +INFO: Loading Class: scala/collection/SeqProxyLike$class.class +INFO: Loading Class: scala/collection/SeqProxyLike.class +INFO: Loading Class: scala/collection/SeqView$$anon$1.class +INFO: Loading Class: scala/collection/SeqView$.class +INFO: Loading Class: scala/collection/SeqView.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$10.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$11.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$12.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$13.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$2.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$3.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$4.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$5.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$6.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$7.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$8.class +INFO: Loading Class: scala/collection/SeqViewLike$$anon$9.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$combinations$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$combinations$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$diff$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$distinct$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$intersect$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$padTo$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$permutations$1$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$permutations$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$sortBy$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$sortWith$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$sorted$1.class +INFO: Loading Class: scala/collection/SeqViewLike$$anonfun$union$1.class +INFO: Loading Class: scala/collection/SeqViewLike$AbstractTransformed.class +INFO: Loading Class: scala/collection/SeqViewLike$Appended$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Appended.class +INFO: Loading Class: scala/collection/SeqViewLike$DroppedWhile$class.class +INFO: Loading Class: scala/collection/SeqViewLike$DroppedWhile.class +INFO: Loading Class: scala/collection/SeqViewLike$EmptyView$class.class +INFO: Loading Class: scala/collection/SeqViewLike$EmptyView.class +INFO: Loading Class: scala/collection/SeqViewLike$Filtered$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Filtered.class +INFO: Loading Class: scala/collection/SeqViewLike$FlatMapped$class.class +INFO: Loading Class: scala/collection/SeqViewLike$FlatMapped.class +INFO: Loading Class: scala/collection/SeqViewLike$Forced$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Forced.class +INFO: Loading Class: scala/collection/SeqViewLike$Mapped$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Mapped.class +INFO: Loading Class: scala/collection/SeqViewLike$Patched$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Patched.class +INFO: Loading Class: scala/collection/SeqViewLike$Prepended$$anonfun$iterator$1.class +INFO: Loading Class: scala/collection/SeqViewLike$Prepended$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Prepended.class +INFO: Loading Class: scala/collection/SeqViewLike$Reversed$$anonfun$createReversedIterator$1.class +INFO: Loading Class: scala/collection/SeqViewLike$Reversed$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Reversed.class +INFO: Loading Class: scala/collection/SeqViewLike$Sliced$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Sliced.class +INFO: Loading Class: scala/collection/SeqViewLike$TakenWhile$class.class +INFO: Loading Class: scala/collection/SeqViewLike$TakenWhile.class +INFO: Loading Class: scala/collection/SeqViewLike$Transformed$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Transformed.class +INFO: Loading Class: scala/collection/SeqViewLike$Zipped$class.class +INFO: Loading Class: scala/collection/SeqViewLike$Zipped.class +INFO: Loading Class: scala/collection/SeqViewLike$ZippedAll$class.class +INFO: Loading Class: scala/collection/SeqViewLike$ZippedAll.class +INFO: Loading Class: scala/collection/SeqViewLike$class.class +INFO: Loading Class: scala/collection/SeqViewLike.class +INFO: Loading Class: scala/collection/Set$.class +INFO: Loading Class: scala/collection/Set$class.class +INFO: Loading Class: scala/collection/Set.class +INFO: Loading Class: scala/collection/SetLike$$anon$1.class +INFO: Loading Class: scala/collection/SetLike$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/SetLike$SubsetsItr$$anonfun$next$2.class +INFO: Loading Class: scala/collection/SetLike$SubsetsItr.class +INFO: Loading Class: scala/collection/SetLike$class.class +INFO: Loading Class: scala/collection/SetLike.class +INFO: Loading Class: scala/collection/SetProxy.class +INFO: Loading Class: scala/collection/SetProxyLike$class.class +INFO: Loading Class: scala/collection/SetProxyLike.class +INFO: Loading Class: scala/collection/SortedMap$.class +INFO: Loading Class: scala/collection/SortedMap$Default$$anonfun$$minus$1.class +INFO: Loading Class: scala/collection/SortedMap$Default$$anonfun$$minus$2.class +INFO: Loading Class: scala/collection/SortedMap$Default$class.class +INFO: Loading Class: scala/collection/SortedMap$Default.class +INFO: Loading Class: scala/collection/SortedMap$class.class +INFO: Loading Class: scala/collection/SortedMap.class +INFO: Loading Class: scala/collection/SortedMapLike$$anon$1$$anonfun$iteratorFrom$1.class +INFO: Loading Class: scala/collection/SortedMapLike$$anon$1$$anonfun$valuesIteratorFrom$1.class +INFO: Loading Class: scala/collection/SortedMapLike$$anon$1.class +INFO: Loading Class: scala/collection/SortedMapLike$$anon$2$$anonfun$iteratorFrom$2.class +INFO: Loading Class: scala/collection/SortedMapLike$$anon$2.class +INFO: Loading Class: scala/collection/SortedMapLike$$anonfun$$plus$1.class +INFO: Loading Class: scala/collection/SortedMapLike$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/SortedMapLike$DefaultKeySortedSet.class +INFO: Loading Class: scala/collection/SortedMapLike$class.class +INFO: Loading Class: scala/collection/SortedMapLike.class +INFO: Loading Class: scala/collection/SortedSet$.class +INFO: Loading Class: scala/collection/SortedSet$class.class +INFO: Loading Class: scala/collection/SortedSet.class +INFO: Loading Class: scala/collection/SortedSetLike$class.class +INFO: Loading Class: scala/collection/SortedSetLike.class +INFO: Loading Class: scala/collection/Traversable$.class +INFO: Loading Class: scala/collection/Traversable$class.class +INFO: Loading Class: scala/collection/Traversable.class +INFO: Loading Class: scala/collection/TraversableLike$$anon$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$2.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$3.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$collect$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$copyToArray$1$$anonfun$apply$mcV$sp$8.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$copyToArray$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$dropWhile$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$exists$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$exists$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$filterImpl$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$find$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$find$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$flatMap$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$forall$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$forall$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$groupBy$1$$anonfun$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$groupBy$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$groupBy$2.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$groupBy$3.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$head$1$$anonfun$apply$mcV$sp$5$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$head$1$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$head$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$init$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$inits$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$isEmpty$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$isEmpty$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$iterateUntilEmpty$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$iterateUntilEmpty$2.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$last$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$map$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$partition$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$scala$collection$TraversableLike$$sliceInternal$1$$anonfun$apply$mcV$sp$6.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$scala$collection$TraversableLike$$sliceInternal$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$scanLeft$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$scanRight$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$scanRight$2.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$span$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$splitAt$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$tails$1.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$takeWhile$1$$anonfun$apply$mcV$sp$7.class +INFO: Loading Class: scala/collection/TraversableLike$$anonfun$takeWhile$1.class +INFO: Loading Class: scala/collection/TraversableLike$WithFilter$$anonfun$flatMap$2.class +INFO: Loading Class: scala/collection/TraversableLike$WithFilter$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/TraversableLike$WithFilter$$anonfun$map$2.class +INFO: Loading Class: scala/collection/TraversableLike$WithFilter$$anonfun$withFilter$1.class +INFO: Loading Class: scala/collection/TraversableLike$WithFilter.class +INFO: Loading Class: scala/collection/TraversableLike$class.class +INFO: Loading Class: scala/collection/TraversableLike.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$addString$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$collectFirst$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$count$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$foldLeft$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$foldRight$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$max$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$maxBy$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$min$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$minBy$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$product$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$reduceLeft$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$reduceRight$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$reversed$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$size$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$sum$1.class +INFO: Loading Class: scala/collection/TraversableOnce$$anonfun$toMap$1.class +INFO: Loading Class: scala/collection/TraversableOnce$.class +INFO: Loading Class: scala/collection/TraversableOnce$BufferedCanBuildFrom$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/TraversableOnce$BufferedCanBuildFrom$$anonfun$newIterator$1.class +INFO: Loading Class: scala/collection/TraversableOnce$BufferedCanBuildFrom.class +INFO: Loading Class: scala/collection/TraversableOnce$FlattenOps$$anon$1.class +INFO: Loading Class: scala/collection/TraversableOnce$FlattenOps.class +INFO: Loading Class: scala/collection/TraversableOnce$ForceImplicitAmbiguity.class +INFO: Loading Class: scala/collection/TraversableOnce$MonadOps.class +INFO: Loading Class: scala/collection/TraversableOnce$OnceCanBuildFrom.class +INFO: Loading Class: scala/collection/TraversableOnce$class.class +INFO: Loading Class: scala/collection/TraversableOnce.class +INFO: Loading Class: scala/collection/TraversableProxy.class +INFO: Loading Class: scala/collection/TraversableProxyLike$class.class +INFO: Loading Class: scala/collection/TraversableProxyLike.class +INFO: Loading Class: scala/collection/TraversableView$$anon$1.class +INFO: Loading Class: scala/collection/TraversableView$.class +INFO: Loading Class: scala/collection/TraversableView$NoBuilder.class +INFO: Loading Class: scala/collection/TraversableView.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$2.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$3.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$4.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$5.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$6.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$7.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anon$8.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$collect$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$filterNot$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$groupBy$1$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$groupBy$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$inits$1$$anonfun$apply$3.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$inits$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$partition$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$scanLeft$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$scanRight$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$tails$1$$anonfun$apply$4.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$tails$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$unzip$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$unzip$2.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$unzip3$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$unzip3$2.class +INFO: Loading Class: scala/collection/TraversableViewLike$$anonfun$unzip3$3.class +INFO: Loading Class: scala/collection/TraversableViewLike$AbstractTransformed.class +INFO: Loading Class: scala/collection/TraversableViewLike$Appended$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$Appended.class +INFO: Loading Class: scala/collection/TraversableViewLike$DroppedWhile$$anonfun$foreach$6.class +INFO: Loading Class: scala/collection/TraversableViewLike$DroppedWhile$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$DroppedWhile.class +INFO: Loading Class: scala/collection/TraversableViewLike$EmptyView$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$EmptyView.class +INFO: Loading Class: scala/collection/TraversableViewLike$Filtered$$anonfun$foreach$4.class +INFO: Loading Class: scala/collection/TraversableViewLike$Filtered$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$Filtered.class +INFO: Loading Class: scala/collection/TraversableViewLike$FlatMapped$$anonfun$foreach$3$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$FlatMapped$$anonfun$foreach$3.class +INFO: Loading Class: scala/collection/TraversableViewLike$FlatMapped$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$FlatMapped.class +INFO: Loading Class: scala/collection/TraversableViewLike$Forced$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$Forced.class +INFO: Loading Class: scala/collection/TraversableViewLike$Mapped$$anonfun$foreach$2.class +INFO: Loading Class: scala/collection/TraversableViewLike$Mapped$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$Mapped.class +INFO: Loading Class: scala/collection/TraversableViewLike$Sliced$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$Sliced$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$Sliced.class +INFO: Loading Class: scala/collection/TraversableViewLike$TakenWhile$$anonfun$foreach$5.class +INFO: Loading Class: scala/collection/TraversableViewLike$TakenWhile$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$TakenWhile.class +INFO: Loading Class: scala/collection/TraversableViewLike$Transformed$$anonfun$headOption$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$Transformed$$anonfun$lastOption$1.class +INFO: Loading Class: scala/collection/TraversableViewLike$Transformed$class.class +INFO: Loading Class: scala/collection/TraversableViewLike$Transformed.class +INFO: Loading Class: scala/collection/TraversableViewLike$class.class +INFO: Loading Class: scala/collection/TraversableViewLike.class +INFO: Loading Class: scala/collection/ViewMkString$$anonfun$addString$1.class +INFO: Loading Class: scala/collection/ViewMkString$class.class +INFO: Loading Class: scala/collection/ViewMkString.class +INFO: Loading Class: scala/collection/concurrent/BasicNode.class +INFO: Loading Class: scala/collection/concurrent/CNode$$anonfun$collectLocalElems$1.class +INFO: Loading Class: scala/collection/concurrent/CNode$$anonfun$scala$collection$concurrent$CNode$$collectElems$1.class +INFO: Loading Class: scala/collection/concurrent/CNode$$anonfun$string$1.class +INFO: Loading Class: scala/collection/concurrent/CNode$.class +INFO: Loading Class: scala/collection/concurrent/CNode.class +INFO: Loading Class: scala/collection/concurrent/CNodeBase.class +INFO: Loading Class: scala/collection/concurrent/Debug$$anonfun$flush$1.class +INFO: Loading Class: scala/collection/concurrent/Debug$.class +INFO: Loading Class: scala/collection/concurrent/Debug.class +INFO: Loading Class: scala/collection/concurrent/FailedNode.class +INFO: Loading Class: scala/collection/concurrent/Gen.class +INFO: Loading Class: scala/collection/concurrent/INode$.class +INFO: Loading Class: scala/collection/concurrent/INode.class +INFO: Loading Class: scala/collection/concurrent/INodeBase.class +INFO: Loading Class: scala/collection/concurrent/KVNode.class +INFO: Loading Class: scala/collection/concurrent/LNode.class +INFO: Loading Class: scala/collection/concurrent/MainNode.class +INFO: Loading Class: scala/collection/concurrent/Map.class +INFO: Loading Class: scala/collection/concurrent/RDCSS_Descriptor$.class +INFO: Loading Class: scala/collection/concurrent/RDCSS_Descriptor.class +INFO: Loading Class: scala/collection/concurrent/RestartException$.class +INFO: Loading Class: scala/collection/concurrent/RestartException.class +INFO: Loading Class: scala/collection/concurrent/SNode.class +INFO: Loading Class: scala/collection/concurrent/TNode.class +INFO: Loading Class: scala/collection/concurrent/TrieMap$.class +INFO: Loading Class: scala/collection/concurrent/TrieMap$MangledHashing.class +INFO: Loading Class: scala/collection/concurrent/TrieMap.class +INFO: Loading Class: scala/collection/concurrent/TrieMapIterator$.class +INFO: Loading Class: scala/collection/concurrent/TrieMapIterator.class +INFO: Loading Class: scala/collection/concurrent/TrieMapSerializationEnd$.class +INFO: Loading Class: scala/collection/concurrent/TrieMapSerializationEnd.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$asJavaIterableConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$asJavaIteratorConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$bufferAsJavaListConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$mapAsJavaConcurrentMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$mapAsJavaMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$mutableMapAsJavaMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$mutableSeqAsJavaListConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$mutableSetAsJavaSetConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$seqAsJavaListConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$$anonfun$setAsJavaSetConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava$class.class +INFO: Loading Class: scala/collection/convert/DecorateAsJava.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$asScalaBufferConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$asScalaIteratorConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$asScalaSetConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$collectionAsScalaIterableConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$dictionaryAsScalaMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$enumerationAsScalaIteratorConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$iterableAsScalaIterableConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$mapAsScalaConcurrentMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$mapAsScalaMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$$anonfun$propertiesAsScalaMapConverter$1.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala$class.class +INFO: Loading Class: scala/collection/convert/DecorateAsScala.class +INFO: Loading Class: scala/collection/convert/Decorators$.class +INFO: Loading Class: scala/collection/convert/Decorators$AsJava.class +INFO: Loading Class: scala/collection/convert/Decorators$AsJavaCollection.class +INFO: Loading Class: scala/collection/convert/Decorators$AsJavaDictionary.class +INFO: Loading Class: scala/collection/convert/Decorators$AsJavaEnumeration.class +INFO: Loading Class: scala/collection/convert/Decorators$AsScala.class +INFO: Loading Class: scala/collection/convert/Decorators$class.class +INFO: Loading Class: scala/collection/convert/Decorators.class +INFO: Loading Class: scala/collection/convert/WrapAsJava$.class +INFO: Loading Class: scala/collection/convert/WrapAsJava$class.class +INFO: Loading Class: scala/collection/convert/WrapAsJava.class +INFO: Loading Class: scala/collection/convert/WrapAsScala$.class +INFO: Loading Class: scala/collection/convert/WrapAsScala$class.class +INFO: Loading Class: scala/collection/convert/WrapAsScala.class +INFO: Loading Class: scala/collection/convert/Wrappers$.class +INFO: Loading Class: scala/collection/convert/Wrappers$ConcurrentMapWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$DictionaryWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$DictionaryWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$IterableWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$IterableWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$IterableWrapperTrait$class.class +INFO: Loading Class: scala/collection/convert/Wrappers$IterableWrapperTrait.class +INFO: Loading Class: scala/collection/convert/Wrappers$IteratorWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$IteratorWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JCollectionWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JCollectionWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JConcurrentMapWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JConcurrentMapWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JDictionaryWrapper$$anonfun$iterator$1.class +INFO: Loading Class: scala/collection/convert/Wrappers$JDictionaryWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JDictionaryWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JEnumerationWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JEnumerationWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JIterableWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JIterableWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JIteratorWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JIteratorWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JListWrapper$$anonfun$insertAll$1.class +INFO: Loading Class: scala/collection/convert/Wrappers$JListWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JListWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JMapWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JMapWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JMapWrapperLike$$anon$2.class +INFO: Loading Class: scala/collection/convert/Wrappers$JMapWrapperLike$class.class +INFO: Loading Class: scala/collection/convert/Wrappers$JMapWrapperLike.class +INFO: Loading Class: scala/collection/convert/Wrappers$JPropertiesWrapper$$anon$3.class +INFO: Loading Class: scala/collection/convert/Wrappers$JPropertiesWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JPropertiesWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$JSetWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$JSetWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$MapWrapper$$anon$1$$anon$5$$anon$6.class +INFO: Loading Class: scala/collection/convert/Wrappers$MapWrapper$$anon$1$$anon$5.class +INFO: Loading Class: scala/collection/convert/Wrappers$MapWrapper$$anon$1.class +INFO: Loading Class: scala/collection/convert/Wrappers$MapWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableBufferWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableBufferWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableMapWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableMapWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableSeqWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableSeqWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableSetWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$MutableSetWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$SeqWrapper$.class +INFO: Loading Class: scala/collection/convert/Wrappers$SeqWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$SetWrapper$$anon$4.class +INFO: Loading Class: scala/collection/convert/Wrappers$SetWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$ToIteratorWrapper.class +INFO: Loading Class: scala/collection/convert/Wrappers$class.class +INFO: Loading Class: scala/collection/convert/Wrappers.class +INFO: Loading Class: scala/collection/convert/package$$anon$1.class +INFO: Loading Class: scala/collection/convert/package$$anon$2.class +INFO: Loading Class: scala/collection/convert/package$$anon$3.class +INFO: Loading Class: scala/collection/convert/package$$anon$4.class +INFO: Loading Class: scala/collection/convert/package$$anon$5.class +INFO: Loading Class: scala/collection/convert/package$$anon$6.class +INFO: Loading Class: scala/collection/convert/package$.class +INFO: Loading Class: scala/collection/convert/package.class +INFO: Loading Class: scala/collection/generic/AtomicIndexFlag$class.class +INFO: Loading Class: scala/collection/generic/AtomicIndexFlag.class +INFO: Loading Class: scala/collection/generic/BitOperations$.class +INFO: Loading Class: scala/collection/generic/BitOperations$Int$$anonfun$bitString$1.class +INFO: Loading Class: scala/collection/generic/BitOperations$Int$$anonfun$bits$1.class +INFO: Loading Class: scala/collection/generic/BitOperations$Int$.class +INFO: Loading Class: scala/collection/generic/BitOperations$Int$class.class +INFO: Loading Class: scala/collection/generic/BitOperations$Int.class +INFO: Loading Class: scala/collection/generic/BitOperations$Long$$anonfun$bitString$2.class +INFO: Loading Class: scala/collection/generic/BitOperations$Long$$anonfun$bits$2.class +INFO: Loading Class: scala/collection/generic/BitOperations$Long$.class +INFO: Loading Class: scala/collection/generic/BitOperations$Long$class.class +INFO: Loading Class: scala/collection/generic/BitOperations$Long.class +INFO: Loading Class: scala/collection/generic/BitOperations.class +INFO: Loading Class: scala/collection/generic/BitSetFactory$$anon$1.class +INFO: Loading Class: scala/collection/generic/BitSetFactory$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/generic/BitSetFactory$class.class +INFO: Loading Class: scala/collection/generic/BitSetFactory.class +INFO: Loading Class: scala/collection/generic/CanBuildFrom.class +INFO: Loading Class: scala/collection/generic/CanCombineFrom.class +INFO: Loading Class: scala/collection/generic/ClassTagTraversableFactory$GenericCanBuildFrom.class +INFO: Loading Class: scala/collection/generic/ClassTagTraversableFactory.class +INFO: Loading Class: scala/collection/generic/Clearable.class +INFO: Loading Class: scala/collection/generic/DefaultSignalling.class +INFO: Loading Class: scala/collection/generic/DelegatedContext.class +INFO: Loading Class: scala/collection/generic/DelegatedSignalling$class.class +INFO: Loading Class: scala/collection/generic/DelegatedSignalling.class +INFO: Loading Class: scala/collection/generic/FilterMonadic.class +INFO: Loading Class: scala/collection/generic/GenMapFactory$MapCanBuildFrom.class +INFO: Loading Class: scala/collection/generic/GenMapFactory.class +INFO: Loading Class: scala/collection/generic/GenSeqFactory.class +INFO: Loading Class: scala/collection/generic/GenSetFactory$$anon$1.class +INFO: Loading Class: scala/collection/generic/GenSetFactory.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anon$1.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$concat$1.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$concat$2.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$concat$3.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$fill$1.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$fill$2.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$fill$3.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$fill$4.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$1.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$2$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$2.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$3$$anonfun$apply$3.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$3.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$4$$anonfun$apply$4.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$$anonfun$tabulate$4.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory$GenericCanBuildFrom.class +INFO: Loading Class: scala/collection/generic/GenTraversableFactory.class +INFO: Loading Class: scala/collection/generic/GenericClassTagCompanion.class +INFO: Loading Class: scala/collection/generic/GenericClassTagTraversableTemplate$class.class +INFO: Loading Class: scala/collection/generic/GenericClassTagTraversableTemplate.class +INFO: Loading Class: scala/collection/generic/GenericCompanion.class +INFO: Loading Class: scala/collection/generic/GenericOrderedCompanion.class +INFO: Loading Class: scala/collection/generic/GenericOrderedTraversableTemplate$class.class +INFO: Loading Class: scala/collection/generic/GenericOrderedTraversableTemplate.class +INFO: Loading Class: scala/collection/generic/GenericParCompanion.class +INFO: Loading Class: scala/collection/generic/GenericParMapCompanion.class +INFO: Loading Class: scala/collection/generic/GenericParMapTemplate$class.class +INFO: Loading Class: scala/collection/generic/GenericParMapTemplate.class +INFO: Loading Class: scala/collection/generic/GenericParTemplate$class.class +INFO: Loading Class: scala/collection/generic/GenericParTemplate.class +INFO: Loading Class: scala/collection/generic/GenericSeqCompanion.class +INFO: Loading Class: scala/collection/generic/GenericSetTemplate$class.class +INFO: Loading Class: scala/collection/generic/GenericSetTemplate.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$1.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$flatten$1.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$transpose$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$transpose$1.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$transpose$2.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$unzip$1.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$$anonfun$unzip3$1.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate$class.class +INFO: Loading Class: scala/collection/generic/GenericTraversableTemplate.class +INFO: Loading Class: scala/collection/generic/Growable$$anonfun$$plus$plus$eq$1.class +INFO: Loading Class: scala/collection/generic/Growable$class.class +INFO: Loading Class: scala/collection/generic/Growable.class +INFO: Loading Class: scala/collection/generic/HasNewBuilder.class +INFO: Loading Class: scala/collection/generic/HasNewCombiner.class +INFO: Loading Class: scala/collection/generic/IdleSignalling$.class +INFO: Loading Class: scala/collection/generic/IdleSignalling.class +INFO: Loading Class: scala/collection/generic/ImmutableMapFactory.class +INFO: Loading Class: scala/collection/generic/ImmutableSetFactory.class +INFO: Loading Class: scala/collection/generic/ImmutableSortedMapFactory.class +INFO: Loading Class: scala/collection/generic/ImmutableSortedSetFactory.class +INFO: Loading Class: scala/collection/generic/IndexedSeqFactory.class +INFO: Loading Class: scala/collection/generic/IsSeqLike$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/collection/generic/IsSeqLike$$anon$1.class +INFO: Loading Class: scala/collection/generic/IsSeqLike$$anon$2.class +INFO: Loading Class: scala/collection/generic/IsSeqLike$.class +INFO: Loading Class: scala/collection/generic/IsSeqLike.class +INFO: Loading Class: scala/collection/generic/IsTraversableLike$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/collection/generic/IsTraversableLike$$anon$1.class +INFO: Loading Class: scala/collection/generic/IsTraversableLike$$anon$2.class +INFO: Loading Class: scala/collection/generic/IsTraversableLike$.class +INFO: Loading Class: scala/collection/generic/IsTraversableLike.class +INFO: Loading Class: scala/collection/generic/IsTraversableOnce$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/collection/generic/IsTraversableOnce$$anon$1.class +INFO: Loading Class: scala/collection/generic/IsTraversableOnce$$anon$2.class +INFO: Loading Class: scala/collection/generic/IsTraversableOnce$.class +INFO: Loading Class: scala/collection/generic/IsTraversableOnce.class +INFO: Loading Class: scala/collection/generic/IterableForwarder$class.class +INFO: Loading Class: scala/collection/generic/IterableForwarder.class +INFO: Loading Class: scala/collection/generic/MapFactory.class +INFO: Loading Class: scala/collection/generic/MutableMapFactory.class +INFO: Loading Class: scala/collection/generic/MutableSetFactory.class +INFO: Loading Class: scala/collection/generic/MutableSortedSetFactory.class +INFO: Loading Class: scala/collection/generic/OrderedTraversableFactory$GenericCanBuildFrom.class +INFO: Loading Class: scala/collection/generic/OrderedTraversableFactory.class +INFO: Loading Class: scala/collection/generic/ParFactory$GenericCanCombineFrom.class +INFO: Loading Class: scala/collection/generic/ParFactory.class +INFO: Loading Class: scala/collection/generic/ParMapFactory$CanCombineFromMap.class +INFO: Loading Class: scala/collection/generic/ParMapFactory.class +INFO: Loading Class: scala/collection/generic/ParSetFactory$GenericCanCombineFrom.class +INFO: Loading Class: scala/collection/generic/ParSetFactory.class +INFO: Loading Class: scala/collection/generic/SeqFactory.class +INFO: Loading Class: scala/collection/generic/SeqForwarder$class.class +INFO: Loading Class: scala/collection/generic/SeqForwarder.class +INFO: Loading Class: scala/collection/generic/SetFactory.class +INFO: Loading Class: scala/collection/generic/Shrinkable$$anonfun$$minus$minus$eq$1.class +INFO: Loading Class: scala/collection/generic/Shrinkable$class.class +INFO: Loading Class: scala/collection/generic/Shrinkable.class +INFO: Loading Class: scala/collection/generic/Signalling.class +INFO: Loading Class: scala/collection/generic/Sizing.class +INFO: Loading Class: scala/collection/generic/SliceInterval$.class +INFO: Loading Class: scala/collection/generic/SliceInterval.class +INFO: Loading Class: scala/collection/generic/Sorted$class.class +INFO: Loading Class: scala/collection/generic/Sorted.class +INFO: Loading Class: scala/collection/generic/SortedMapFactory$SortedMapCanBuildFrom.class +INFO: Loading Class: scala/collection/generic/SortedMapFactory.class +INFO: Loading Class: scala/collection/generic/SortedSetFactory$SortedSetCanBuildFrom.class +INFO: Loading Class: scala/collection/generic/SortedSetFactory.class +INFO: Loading Class: scala/collection/generic/Subtractable$$anonfun$$minus$minus$1.class +INFO: Loading Class: scala/collection/generic/Subtractable$class.class +INFO: Loading Class: scala/collection/generic/Subtractable.class +INFO: Loading Class: scala/collection/generic/TaggedDelegatedContext.class +INFO: Loading Class: scala/collection/generic/TraversableFactory.class +INFO: Loading Class: scala/collection/generic/TraversableForwarder$class.class +INFO: Loading Class: scala/collection/generic/TraversableForwarder.class +INFO: Loading Class: scala/collection/generic/VolatileAbort$class.class +INFO: Loading Class: scala/collection/generic/VolatileAbort.class +INFO: Loading Class: scala/collection/generic/package$.class +INFO: Loading Class: scala/collection/generic/package.class +INFO: Loading Class: scala/collection/immutable/$colon$colon$.class +INFO: Loading Class: scala/collection/immutable/$colon$colon.class +INFO: Loading Class: scala/collection/immutable/AbstractMap.class +INFO: Loading Class: scala/collection/immutable/BitSet$$anon$1.class +INFO: Loading Class: scala/collection/immutable/BitSet$.class +INFO: Loading Class: scala/collection/immutable/BitSet$BitSet1.class +INFO: Loading Class: scala/collection/immutable/BitSet$BitSet2.class +INFO: Loading Class: scala/collection/immutable/BitSet$BitSetN.class +INFO: Loading Class: scala/collection/immutable/BitSet.class +INFO: Loading Class: scala/collection/immutable/DefaultMap$$anonfun$$minus$1.class +INFO: Loading Class: scala/collection/immutable/DefaultMap$$anonfun$$minus$2.class +INFO: Loading Class: scala/collection/immutable/DefaultMap$class.class +INFO: Loading Class: scala/collection/immutable/DefaultMap.class +INFO: Loading Class: scala/collection/immutable/HashMap$$anon$2$$anon$3.class +INFO: Loading Class: scala/collection/immutable/HashMap$$anon$2.class +INFO: Loading Class: scala/collection/immutable/HashMap$$anonfun$1.class +INFO: Loading Class: scala/collection/immutable/HashMap$.class +INFO: Loading Class: scala/collection/immutable/HashMap$EmptyHashMap$.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashMap1.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashMapCollision1$$anonfun$merge0$1.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashMapCollision1.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashTrieMap$$anon$1.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashTrieMap$$anonfun$2.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashTrieMap$$anonfun$3.class +INFO: Loading Class: scala/collection/immutable/HashMap$HashTrieMap.class +INFO: Loading Class: scala/collection/immutable/HashMap$Merger.class +INFO: Loading Class: scala/collection/immutable/HashMap$SerializationProxy$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/immutable/HashMap$SerializationProxy$$anonfun$writeObject$2.class +INFO: Loading Class: scala/collection/immutable/HashMap$SerializationProxy.class +INFO: Loading Class: scala/collection/immutable/HashMap.class +INFO: Loading Class: scala/collection/immutable/HashSet$.class +INFO: Loading Class: scala/collection/immutable/HashSet$EmptyHashSet$.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashSet1.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashSetCollision1$$anonfun$1.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashSetCollision1$$anonfun$2.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashSetCollision1$$anonfun$subsetOf0$1.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashSetCollision1.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashTrieSet$$anon$1.class +INFO: Loading Class: scala/collection/immutable/HashSet$HashTrieSet.class +INFO: Loading Class: scala/collection/immutable/HashSet$LeafHashSet.class +INFO: Loading Class: scala/collection/immutable/HashSet$SerializationProxy$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/immutable/HashSet$SerializationProxy.class +INFO: Loading Class: scala/collection/immutable/HashSet.class +INFO: Loading Class: scala/collection/immutable/IndexedSeq$.class +INFO: Loading Class: scala/collection/immutable/IndexedSeq$Impl.class +INFO: Loading Class: scala/collection/immutable/IndexedSeq$class.class +INFO: Loading Class: scala/collection/immutable/IndexedSeq.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anon$1.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anonfun$intersection$1.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anonfun$toList$1.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anonfun$unionWith$1.class +INFO: Loading Class: scala/collection/immutable/IntMap$$anonfun$unionWith$2.class +INFO: Loading Class: scala/collection/immutable/IntMap$.class +INFO: Loading Class: scala/collection/immutable/IntMap$Bin$.class +INFO: Loading Class: scala/collection/immutable/IntMap$Bin.class +INFO: Loading Class: scala/collection/immutable/IntMap$Nil$.class +INFO: Loading Class: scala/collection/immutable/IntMap$Tip$.class +INFO: Loading Class: scala/collection/immutable/IntMap$Tip.class +INFO: Loading Class: scala/collection/immutable/IntMap.class +INFO: Loading Class: scala/collection/immutable/IntMapEntryIterator.class +INFO: Loading Class: scala/collection/immutable/IntMapIterator.class +INFO: Loading Class: scala/collection/immutable/IntMapKeyIterator.class +INFO: Loading Class: scala/collection/immutable/IntMapUtils$.class +INFO: Loading Class: scala/collection/immutable/IntMapUtils.class +INFO: Loading Class: scala/collection/immutable/IntMapValueIterator.class +INFO: Loading Class: scala/collection/immutable/Iterable$.class +INFO: Loading Class: scala/collection/immutable/Iterable$class.class +INFO: Loading Class: scala/collection/immutable/Iterable.class +INFO: Loading Class: scala/collection/immutable/LinearSeq$.class +INFO: Loading Class: scala/collection/immutable/LinearSeq$class.class +INFO: Loading Class: scala/collection/immutable/LinearSeq.class +INFO: Loading Class: scala/collection/immutable/List$$anon$1.class +INFO: Loading Class: scala/collection/immutable/List$$anonfun$flatMap$1.class +INFO: Loading Class: scala/collection/immutable/List$$anonfun$foldRight$1.class +INFO: Loading Class: scala/collection/immutable/List$$anonfun$toStream$1.class +INFO: Loading Class: scala/collection/immutable/List$.class +INFO: Loading Class: scala/collection/immutable/List$SerializationProxy.class +INFO: Loading Class: scala/collection/immutable/List.class +INFO: Loading Class: scala/collection/immutable/ListMap$$anon$1.class +INFO: Loading Class: scala/collection/immutable/ListMap$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/ListMap$.class +INFO: Loading Class: scala/collection/immutable/ListMap$EmptyListMap$.class +INFO: Loading Class: scala/collection/immutable/ListMap$Node$$anonfun$remove0$1.class +INFO: Loading Class: scala/collection/immutable/ListMap$Node.class +INFO: Loading Class: scala/collection/immutable/ListMap.class +INFO: Loading Class: scala/collection/immutable/ListSerializeEnd$.class +INFO: Loading Class: scala/collection/immutable/ListSerializeEnd.class +INFO: Loading Class: scala/collection/immutable/ListSet$$anon$1.class +INFO: Loading Class: scala/collection/immutable/ListSet$.class +INFO: Loading Class: scala/collection/immutable/ListSet$EmptyListSet$.class +INFO: Loading Class: scala/collection/immutable/ListSet$ListSetBuilder$$anonfun$result$1.class +INFO: Loading Class: scala/collection/immutable/ListSet$ListSetBuilder.class +INFO: Loading Class: scala/collection/immutable/ListSet$Node.class +INFO: Loading Class: scala/collection/immutable/ListSet.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anon$1.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anonfun$intersection$1.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anonfun$toList$1.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anonfun$unionWith$1.class +INFO: Loading Class: scala/collection/immutable/LongMap$$anonfun$unionWith$2.class +INFO: Loading Class: scala/collection/immutable/LongMap$.class +INFO: Loading Class: scala/collection/immutable/LongMap$Bin$.class +INFO: Loading Class: scala/collection/immutable/LongMap$Bin.class +INFO: Loading Class: scala/collection/immutable/LongMap$Nil$.class +INFO: Loading Class: scala/collection/immutable/LongMap$Tip$.class +INFO: Loading Class: scala/collection/immutable/LongMap$Tip.class +INFO: Loading Class: scala/collection/immutable/LongMap.class +INFO: Loading Class: scala/collection/immutable/LongMapEntryIterator.class +INFO: Loading Class: scala/collection/immutable/LongMapIterator.class +INFO: Loading Class: scala/collection/immutable/LongMapKeyIterator.class +INFO: Loading Class: scala/collection/immutable/LongMapUtils$.class +INFO: Loading Class: scala/collection/immutable/LongMapUtils.class +INFO: Loading Class: scala/collection/immutable/LongMapValueIterator.class +INFO: Loading Class: scala/collection/immutable/Map$$anonfun$withDefaultValue$1.class +INFO: Loading Class: scala/collection/immutable/Map$.class +INFO: Loading Class: scala/collection/immutable/Map$EmptyMap$.class +INFO: Loading Class: scala/collection/immutable/Map$Map1.class +INFO: Loading Class: scala/collection/immutable/Map$Map2.class +INFO: Loading Class: scala/collection/immutable/Map$Map3.class +INFO: Loading Class: scala/collection/immutable/Map$Map4.class +INFO: Loading Class: scala/collection/immutable/Map$WithDefault$$anonfun$withDefaultValue$2.class +INFO: Loading Class: scala/collection/immutable/Map$WithDefault.class +INFO: Loading Class: scala/collection/immutable/Map$class.class +INFO: Loading Class: scala/collection/immutable/Map.class +INFO: Loading Class: scala/collection/immutable/MapLike$$anon$1.class +INFO: Loading Class: scala/collection/immutable/MapLike$$anon$2.class +INFO: Loading Class: scala/collection/immutable/MapLike$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/MapLike$$anonfun$transform$1.class +INFO: Loading Class: scala/collection/immutable/MapLike$$anonfun$transform$2.class +INFO: Loading Class: scala/collection/immutable/MapLike$ImmutableDefaultKeySet.class +INFO: Loading Class: scala/collection/immutable/MapLike$class.class +INFO: Loading Class: scala/collection/immutable/MapLike.class +INFO: Loading Class: scala/collection/immutable/MapProxy$$anon$1.class +INFO: Loading Class: scala/collection/immutable/MapProxy$$anon$2.class +INFO: Loading Class: scala/collection/immutable/MapProxy$class.class +INFO: Loading Class: scala/collection/immutable/MapProxy.class +INFO: Loading Class: scala/collection/immutable/Nil$.class +INFO: Loading Class: scala/collection/immutable/Nil.class +INFO: Loading Class: scala/collection/immutable/NumericRange$$anon$1$$anonfun$containsTyped$1.class +INFO: Loading Class: scala/collection/immutable/NumericRange$$anon$1$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/immutable/NumericRange$$anon$1.class +INFO: Loading Class: scala/collection/immutable/NumericRange$.class +INFO: Loading Class: scala/collection/immutable/NumericRange$Exclusive.class +INFO: Loading Class: scala/collection/immutable/NumericRange$Inclusive.class +INFO: Loading Class: scala/collection/immutable/NumericRange.class +INFO: Loading Class: scala/collection/immutable/Page.class +INFO: Loading Class: scala/collection/immutable/PagedSeq$$anonfun$fromIterator$1.class +INFO: Loading Class: scala/collection/immutable/PagedSeq$$anonfun$fromLines$1.class +INFO: Loading Class: scala/collection/immutable/PagedSeq$$anonfun$fromReader$1.class +INFO: Loading Class: scala/collection/immutable/PagedSeq$$anonfun$fromStrings$1.class +INFO: Loading Class: scala/collection/immutable/PagedSeq$$anonfun$toString$1.class +INFO: Loading Class: scala/collection/immutable/PagedSeq$.class +INFO: Loading Class: scala/collection/immutable/PagedSeq.class +INFO: Loading Class: scala/collection/immutable/Queue$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/collection/immutable/Queue$.class +INFO: Loading Class: scala/collection/immutable/Queue$EmptyQueue$.class +INFO: Loading Class: scala/collection/immutable/Queue.class +INFO: Loading Class: scala/collection/immutable/Range$.class +INFO: Loading Class: scala/collection/immutable/Range$BigDecimal$.class +INFO: Loading Class: scala/collection/immutable/Range$BigInt$.class +INFO: Loading Class: scala/collection/immutable/Range$Double$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/immutable/Range$Double$$anonfun$inclusive$1.class +INFO: Loading Class: scala/collection/immutable/Range$Double$.class +INFO: Loading Class: scala/collection/immutable/Range$Inclusive.class +INFO: Loading Class: scala/collection/immutable/Range$Int$.class +INFO: Loading Class: scala/collection/immutable/Range$Long$.class +INFO: Loading Class: scala/collection/immutable/Range$Partial.class +INFO: Loading Class: scala/collection/immutable/Range.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$$anonfun$1.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$BlackTree$.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$BlackTree.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$EntriesIterator.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$KeysIterator.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$NList$.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$NList.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$RedTree$.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$RedTree.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$Tree.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$TreeIterator.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree$ValuesIterator.class +INFO: Loading Class: scala/collection/immutable/RedBlackTree.class +INFO: Loading Class: scala/collection/immutable/Seq$.class +INFO: Loading Class: scala/collection/immutable/Seq$class.class +INFO: Loading Class: scala/collection/immutable/Seq.class +INFO: Loading Class: scala/collection/immutable/Set$.class +INFO: Loading Class: scala/collection/immutable/Set$EmptySet$.class +INFO: Loading Class: scala/collection/immutable/Set$Set1.class +INFO: Loading Class: scala/collection/immutable/Set$Set2.class +INFO: Loading Class: scala/collection/immutable/Set$Set3.class +INFO: Loading Class: scala/collection/immutable/Set$Set4.class +INFO: Loading Class: scala/collection/immutable/Set$class.class +INFO: Loading Class: scala/collection/immutable/Set.class +INFO: Loading Class: scala/collection/immutable/SetProxy$$anon$1.class +INFO: Loading Class: scala/collection/immutable/SetProxy$class.class +INFO: Loading Class: scala/collection/immutable/SetProxy.class +INFO: Loading Class: scala/collection/immutable/SortedMap$$anon$1$$anonfun$iteratorFrom$1.class +INFO: Loading Class: scala/collection/immutable/SortedMap$$anon$1$$anonfun$valuesIteratorFrom$1.class +INFO: Loading Class: scala/collection/immutable/SortedMap$$anon$1.class +INFO: Loading Class: scala/collection/immutable/SortedMap$$anon$2$$anonfun$iteratorFrom$2.class +INFO: Loading Class: scala/collection/immutable/SortedMap$$anon$2.class +INFO: Loading Class: scala/collection/immutable/SortedMap$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/SortedMap$.class +INFO: Loading Class: scala/collection/immutable/SortedMap$Default$$anonfun$$minus$1.class +INFO: Loading Class: scala/collection/immutable/SortedMap$Default$$anonfun$$minus$2.class +INFO: Loading Class: scala/collection/immutable/SortedMap$Default$class.class +INFO: Loading Class: scala/collection/immutable/SortedMap$Default.class +INFO: Loading Class: scala/collection/immutable/SortedMap$DefaultKeySortedSet.class +INFO: Loading Class: scala/collection/immutable/SortedMap$class.class +INFO: Loading Class: scala/collection/immutable/SortedMap.class +INFO: Loading Class: scala/collection/immutable/SortedSet$.class +INFO: Loading Class: scala/collection/immutable/SortedSet$class.class +INFO: Loading Class: scala/collection/immutable/SortedSet.class +INFO: Loading Class: scala/collection/immutable/Stack$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/collection/immutable/Stack$$anonfun$pushAll$1.class +INFO: Loading Class: scala/collection/immutable/Stack$.class +INFO: Loading Class: scala/collection/immutable/Stack.class +INFO: Loading Class: scala/collection/immutable/Stream$$anon$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$$plus$colon$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$2.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$append$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$collectedTail$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$continually$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$fill$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$filteredTail$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$flatMap$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$flatten$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$from$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$init$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$iterate$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$map$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$partition$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$partition$2.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$range$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$scala$collection$immutable$Stream$$advance$1$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$scala$collection$immutable$Stream$$loop$4$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$scala$collection$immutable$Stream$$loop$5$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$scala$collection$immutable$Stream$$loop$5$2.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$scala$collection$immutable$Stream$$loop$6$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$scanLeft$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$take$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$take$2.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$takeWhile$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$anonfun$zip$1.class +INFO: Loading Class: scala/collection/immutable/Stream$$hash$colon$colon$.class +INFO: Loading Class: scala/collection/immutable/Stream$.class +INFO: Loading Class: scala/collection/immutable/Stream$Cons.class +INFO: Loading Class: scala/collection/immutable/Stream$ConsWrapper.class +INFO: Loading Class: scala/collection/immutable/Stream$Empty$.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamBuilder$$anonfun$result$1.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamBuilder.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamCanBuildFrom.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamWithFilter$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamWithFilter$$anonfun$scala$collection$immutable$Stream$StreamWithFilter$$tailFlatMap$1$1.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamWithFilter$$anonfun$scala$collection$immutable$Stream$StreamWithFilter$$tailMap$1$1.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamWithFilter$$anonfun$withFilter$1.class +INFO: Loading Class: scala/collection/immutable/Stream$StreamWithFilter.class +INFO: Loading Class: scala/collection/immutable/Stream$cons$.class +INFO: Loading Class: scala/collection/immutable/Stream.class +INFO: Loading Class: scala/collection/immutable/StreamIterator$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/collection/immutable/StreamIterator$$anonfun$next$1.class +INFO: Loading Class: scala/collection/immutable/StreamIterator$$anonfun$toStream$1.class +INFO: Loading Class: scala/collection/immutable/StreamIterator$LazyCell.class +INFO: Loading Class: scala/collection/immutable/StreamIterator.class +INFO: Loading Class: scala/collection/immutable/StreamView.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$1.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$10.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$11.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$12.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$13.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$2.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$3.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$4.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$5.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$6.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$7.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$8.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$$anon$9.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$AbstractTransformed.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Appended.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$DroppedWhile.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$EmptyView.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Filtered.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$FlatMapped.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Forced.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Mapped.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Patched.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Prepended.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Reversed.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Sliced.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$TakenWhile.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Transformed$class.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Transformed.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$Zipped.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$ZippedAll.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike$class.class +INFO: Loading Class: scala/collection/immutable/StreamViewLike.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anon$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anonfun$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anonfun$format$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anonfun$formatLocal$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anonfun$lines$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anonfun$linesIterator$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$$anonfun$stripMargin$1.class +INFO: Loading Class: scala/collection/immutable/StringLike$.class +INFO: Loading Class: scala/collection/immutable/StringLike$class.class +INFO: Loading Class: scala/collection/immutable/StringLike.class +INFO: Loading Class: scala/collection/immutable/StringOps$.class +INFO: Loading Class: scala/collection/immutable/StringOps.class +INFO: Loading Class: scala/collection/immutable/Traversable$.class +INFO: Loading Class: scala/collection/immutable/Traversable$class.class +INFO: Loading Class: scala/collection/immutable/Traversable.class +INFO: Loading Class: scala/collection/immutable/TreeMap$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/TreeMap$.class +INFO: Loading Class: scala/collection/immutable/TreeMap.class +INFO: Loading Class: scala/collection/immutable/TreeSet$.class +INFO: Loading Class: scala/collection/immutable/TreeSet.class +INFO: Loading Class: scala/collection/immutable/TrieIterator$$anon$1.class +INFO: Loading Class: scala/collection/immutable/TrieIterator$$anonfun$collisionToArray$1.class +INFO: Loading Class: scala/collection/immutable/TrieIterator$$anonfun$collisionToArray$2.class +INFO: Loading Class: scala/collection/immutable/TrieIterator$$anonfun$iteratorWithSize$1.class +INFO: Loading Class: scala/collection/immutable/TrieIterator$DupIterator.class +INFO: Loading Class: scala/collection/immutable/TrieIterator.class +INFO: Loading Class: scala/collection/immutable/Vector$$anon$1.class +INFO: Loading Class: scala/collection/immutable/Vector$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/immutable/Vector$.class +INFO: Loading Class: scala/collection/immutable/Vector.class +INFO: Loading Class: scala/collection/immutable/VectorBuilder.class +INFO: Loading Class: scala/collection/immutable/VectorIterator.class +INFO: Loading Class: scala/collection/immutable/VectorPointer$class.class +INFO: Loading Class: scala/collection/immutable/VectorPointer.class +INFO: Loading Class: scala/collection/immutable/WrappedString$$anon$1.class +INFO: Loading Class: scala/collection/immutable/WrappedString$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/collection/immutable/WrappedString$.class +INFO: Loading Class: scala/collection/immutable/WrappedString.class +INFO: Loading Class: scala/collection/mutable/AVLIterator.class +INFO: Loading Class: scala/collection/mutable/AVLTree$class.class +INFO: Loading Class: scala/collection/mutable/AVLTree.class +INFO: Loading Class: scala/collection/mutable/AbstractBuffer.class +INFO: Loading Class: scala/collection/mutable/AbstractIterable.class +INFO: Loading Class: scala/collection/mutable/AbstractMap.class +INFO: Loading Class: scala/collection/mutable/AbstractSeq.class +INFO: Loading Class: scala/collection/mutable/AbstractSet.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap$$anon$1.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap$$anon$2.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap$$anonfun$1.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap$.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap$AnyRefMapBuilder.class +INFO: Loading Class: scala/collection/mutable/AnyRefMap.class +INFO: Loading Class: scala/collection/mutable/ArrayBuffer$.class +INFO: Loading Class: scala/collection/mutable/ArrayBuffer.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofBoolean.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofByte.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofChar.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofDouble.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofFloat.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofInt.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofLong.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofRef.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofShort.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder$ofUnit.class +INFO: Loading Class: scala/collection/mutable/ArrayBuilder.class +INFO: Loading Class: scala/collection/mutable/ArrayLike$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ArrayLike$class.class +INFO: Loading Class: scala/collection/mutable/ArrayLike.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$$anonfun$1.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$$anonfun$flatten$1.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$$anonfun$flatten$2.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$$anonfun$transpose$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$$anonfun$transpose$1.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$$anonfun$transpose$2.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$class.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofBoolean$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofBoolean.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofByte$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofByte.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofChar$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofChar.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofDouble$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofDouble.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofFloat$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofFloat.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofInt$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofInt.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofLong$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofLong.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofRef$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofRef.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofShort$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofShort.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofUnit$.class +INFO: Loading Class: scala/collection/mutable/ArrayOps$ofUnit.class +INFO: Loading Class: scala/collection/mutable/ArrayOps.class +INFO: Loading Class: scala/collection/mutable/ArraySeq$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ArraySeq$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/collection/mutable/ArraySeq$.class +INFO: Loading Class: scala/collection/mutable/ArraySeq.class +INFO: Loading Class: scala/collection/mutable/ArrayStack$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ArrayStack$$anonfun$$plus$plus$eq$1.class +INFO: Loading Class: scala/collection/mutable/ArrayStack$$anonfun$1.class +INFO: Loading Class: scala/collection/mutable/ArrayStack$.class +INFO: Loading Class: scala/collection/mutable/ArrayStack.class +INFO: Loading Class: scala/collection/mutable/BitSet$.class +INFO: Loading Class: scala/collection/mutable/BitSet.class +INFO: Loading Class: scala/collection/mutable/Buffer$.class +INFO: Loading Class: scala/collection/mutable/Buffer$class.class +INFO: Loading Class: scala/collection/mutable/Buffer.class +INFO: Loading Class: scala/collection/mutable/BufferLike$$anonfun$$less$less$1.class +INFO: Loading Class: scala/collection/mutable/BufferLike$class.class +INFO: Loading Class: scala/collection/mutable/BufferLike.class +INFO: Loading Class: scala/collection/mutable/BufferProxy$$anon$1.class +INFO: Loading Class: scala/collection/mutable/BufferProxy$class.class +INFO: Loading Class: scala/collection/mutable/BufferProxy.class +INFO: Loading Class: scala/collection/mutable/Builder$$anon$1.class +INFO: Loading Class: scala/collection/mutable/Builder$class.class +INFO: Loading Class: scala/collection/mutable/Builder.class +INFO: Loading Class: scala/collection/mutable/Cloneable$class.class +INFO: Loading Class: scala/collection/mutable/Cloneable.class +INFO: Loading Class: scala/collection/mutable/DefaultEntry.class +INFO: Loading Class: scala/collection/mutable/DefaultMapModel$$anonfun$iterator$1.class +INFO: Loading Class: scala/collection/mutable/DefaultMapModel$class.class +INFO: Loading Class: scala/collection/mutable/DefaultMapModel.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedList$$anon$1.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedList$.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedList.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$$anonfun$get$1.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$$anonfun$get$2.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$$anonfun$update$1.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$$anonfun$update$2.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike$class.class +INFO: Loading Class: scala/collection/mutable/DoubleLinkedListLike.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$$anon$1.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$$anon$2.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$$anonfun$checkConsistent$1$$anonfun$apply$mcVI$sp$1.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$$anonfun$checkConsistent$1.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$$anonfun$serializeTo$1.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$Contents.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$HashUtils$class.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$HashUtils.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$NullSentinel$.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable$class.class +INFO: Loading Class: scala/collection/mutable/FlatHashTable.class +INFO: Loading Class: scala/collection/mutable/GrowingBuilder.class +INFO: Loading Class: scala/collection/mutable/HashEntry$class.class +INFO: Loading Class: scala/collection/mutable/HashEntry.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anon$1$$anonfun$foreach$2.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anon$1.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anon$2$$anonfun$foreach$3.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anon$2.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anon$3.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anon$4.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anonfun$iterator$1.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anonfun$readObject$1.class +INFO: Loading Class: scala/collection/mutable/HashMap$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/mutable/HashMap$.class +INFO: Loading Class: scala/collection/mutable/HashMap.class +INFO: Loading Class: scala/collection/mutable/HashSet$$anonfun$readObject$1.class +INFO: Loading Class: scala/collection/mutable/HashSet$.class +INFO: Loading Class: scala/collection/mutable/HashSet.class +INFO: Loading Class: scala/collection/mutable/HashTable$$anon$1.class +INFO: Loading Class: scala/collection/mutable/HashTable$.class +INFO: Loading Class: scala/collection/mutable/HashTable$Contents$$anonfun$debugInformation$1.class +INFO: Loading Class: scala/collection/mutable/HashTable$Contents.class +INFO: Loading Class: scala/collection/mutable/HashTable$HashUtils$class.class +INFO: Loading Class: scala/collection/mutable/HashTable$HashUtils.class +INFO: Loading Class: scala/collection/mutable/HashTable$class.class +INFO: Loading Class: scala/collection/mutable/HashTable.class +INFO: Loading Class: scala/collection/mutable/History$$anonfun$events$1.class +INFO: Loading Class: scala/collection/mutable/History.class +INFO: Loading Class: scala/collection/mutable/ImmutableMapAdaptor$$anonfun$retain$1.class +INFO: Loading Class: scala/collection/mutable/ImmutableMapAdaptor.class +INFO: Loading Class: scala/collection/mutable/ImmutableSetAdaptor.class +INFO: Loading Class: scala/collection/mutable/IndexedSeq$.class +INFO: Loading Class: scala/collection/mutable/IndexedSeq$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeq.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqLike$$anon$1.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqLike$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqLike.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqOptimized.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$1.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$2.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$3.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$4.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$5.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$6.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$$anon$7.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$AbstractTransformed.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$DroppedWhile$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$DroppedWhile.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Filtered$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Filtered.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Reversed$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Reversed.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Sliced$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Sliced.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$TakenWhile$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$TakenWhile.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Transformed$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$Transformed.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView$class.class +INFO: Loading Class: scala/collection/mutable/IndexedSeqView.class +INFO: Loading Class: scala/collection/mutable/Iterable$.class +INFO: Loading Class: scala/collection/mutable/Iterable$class.class +INFO: Loading Class: scala/collection/mutable/Iterable.class +INFO: Loading Class: scala/collection/mutable/LazyBuilder.class +INFO: Loading Class: scala/collection/mutable/Leaf$.class +INFO: Loading Class: scala/collection/mutable/Leaf.class +INFO: Loading Class: scala/collection/mutable/LinearSeq$.class +INFO: Loading Class: scala/collection/mutable/LinearSeq$class.class +INFO: Loading Class: scala/collection/mutable/LinearSeq.class +INFO: Loading Class: scala/collection/mutable/LinkedEntry.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$$anon$1.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$$anon$2.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$$anon$3.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$$anonfun$readObject$1.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$DefaultKeySet.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$FilteredKeys.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap$MappedValues.class +INFO: Loading Class: scala/collection/mutable/LinkedHashMap.class +INFO: Loading Class: scala/collection/mutable/LinkedHashSet$$anon$1.class +INFO: Loading Class: scala/collection/mutable/LinkedHashSet$$anonfun$readObject$1.class +INFO: Loading Class: scala/collection/mutable/LinkedHashSet$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/mutable/LinkedHashSet$.class +INFO: Loading Class: scala/collection/mutable/LinkedHashSet$Entry.class +INFO: Loading Class: scala/collection/mutable/LinkedHashSet.class +INFO: Loading Class: scala/collection/mutable/LinkedList$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/collection/mutable/LinkedList$.class +INFO: Loading Class: scala/collection/mutable/LinkedList.class +INFO: Loading Class: scala/collection/mutable/LinkedListLike$$anon$1.class +INFO: Loading Class: scala/collection/mutable/LinkedListLike$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/LinkedListLike$$anonfun$update$1.class +INFO: Loading Class: scala/collection/mutable/LinkedListLike$class.class +INFO: Loading Class: scala/collection/mutable/LinkedListLike.class +INFO: Loading Class: scala/collection/mutable/ListBuffer$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ListBuffer$.class +INFO: Loading Class: scala/collection/mutable/ListBuffer.class +INFO: Loading Class: scala/collection/mutable/ListMap$$anonfun$get$1.class +INFO: Loading Class: scala/collection/mutable/ListMap$.class +INFO: Loading Class: scala/collection/mutable/ListMap.class +INFO: Loading Class: scala/collection/mutable/LongMap$$anon$1.class +INFO: Loading Class: scala/collection/mutable/LongMap$$anon$2.class +INFO: Loading Class: scala/collection/mutable/LongMap$$anonfun$1.class +INFO: Loading Class: scala/collection/mutable/LongMap$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/LongMap$.class +INFO: Loading Class: scala/collection/mutable/LongMap$LongMapBuilder.class +INFO: Loading Class: scala/collection/mutable/LongMap.class +INFO: Loading Class: scala/collection/mutable/Map$$anonfun$withDefaultValue$1.class +INFO: Loading Class: scala/collection/mutable/Map$.class +INFO: Loading Class: scala/collection/mutable/Map$WithDefault$$anonfun$withDefaultValue$2.class +INFO: Loading Class: scala/collection/mutable/Map$WithDefault.class +INFO: Loading Class: scala/collection/mutable/Map$class.class +INFO: Loading Class: scala/collection/mutable/Map.class +INFO: Loading Class: scala/collection/mutable/MapBuilder.class +INFO: Loading Class: scala/collection/mutable/MapLike$$anonfun$clear$1.class +INFO: Loading Class: scala/collection/mutable/MapLike$$anonfun$retain$1.class +INFO: Loading Class: scala/collection/mutable/MapLike$$anonfun$retain$2.class +INFO: Loading Class: scala/collection/mutable/MapLike$$anonfun$transform$1.class +INFO: Loading Class: scala/collection/mutable/MapLike$class.class +INFO: Loading Class: scala/collection/mutable/MapLike.class +INFO: Loading Class: scala/collection/mutable/MapProxy$$anon$1.class +INFO: Loading Class: scala/collection/mutable/MapProxy$$anon$2.class +INFO: Loading Class: scala/collection/mutable/MapProxy$class.class +INFO: Loading Class: scala/collection/mutable/MapProxy.class +INFO: Loading Class: scala/collection/mutable/MultiMap$class.class +INFO: Loading Class: scala/collection/mutable/MultiMap.class +INFO: Loading Class: scala/collection/mutable/MutableList$.class +INFO: Loading Class: scala/collection/mutable/MutableList.class +INFO: Loading Class: scala/collection/mutable/Node$.class +INFO: Loading Class: scala/collection/mutable/Node.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anon$2.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anon$3.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anon$4.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anon$5.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anon$6.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anonfun$$plus$plus$eq$1.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$$anonfun$1.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer$class.class +INFO: Loading Class: scala/collection/mutable/ObservableBuffer.class +INFO: Loading Class: scala/collection/mutable/ObservableMap$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ObservableMap$$anon$2.class +INFO: Loading Class: scala/collection/mutable/ObservableMap$$anon$3.class +INFO: Loading Class: scala/collection/mutable/ObservableMap$$anon$4.class +INFO: Loading Class: scala/collection/mutable/ObservableMap$class.class +INFO: Loading Class: scala/collection/mutable/ObservableMap.class +INFO: Loading Class: scala/collection/mutable/ObservableSet$$anon$1.class +INFO: Loading Class: scala/collection/mutable/ObservableSet$$anon$2.class +INFO: Loading Class: scala/collection/mutable/ObservableSet$$anon$3.class +INFO: Loading Class: scala/collection/mutable/ObservableSet$class.class +INFO: Loading Class: scala/collection/mutable/ObservableSet.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anon$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anonfun$clone$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anonfun$foreachUndeletedEntry$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anonfun$growTable$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anonfun$retain$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$$anonfun$transform$1.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap$OpenEntry.class +INFO: Loading Class: scala/collection/mutable/OpenHashMap.class +INFO: Loading Class: scala/collection/mutable/PriorityQueue$$anon$1.class +INFO: Loading Class: scala/collection/mutable/PriorityQueue$$anon$2.class +INFO: Loading Class: scala/collection/mutable/PriorityQueue$$anon$3.class +INFO: Loading Class: scala/collection/mutable/PriorityQueue$.class +INFO: Loading Class: scala/collection/mutable/PriorityQueue$ResizableArrayAccess.class +INFO: Loading Class: scala/collection/mutable/PriorityQueue.class +INFO: Loading Class: scala/collection/mutable/PriorityQueueProxy$$anon$1.class +INFO: Loading Class: scala/collection/mutable/PriorityQueueProxy.class +INFO: Loading Class: scala/collection/mutable/Publisher$$anon$1.class +INFO: Loading Class: scala/collection/mutable/Publisher$$anonfun$publish$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/Publisher$$anonfun$publish$1.class +INFO: Loading Class: scala/collection/mutable/Publisher$$anonfun$subscribe$1.class +INFO: Loading Class: scala/collection/mutable/Publisher$class.class +INFO: Loading Class: scala/collection/mutable/Publisher.class +INFO: Loading Class: scala/collection/mutable/Queue$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/collection/mutable/Queue$.class +INFO: Loading Class: scala/collection/mutable/Queue.class +INFO: Loading Class: scala/collection/mutable/QueueProxy$$anon$1.class +INFO: Loading Class: scala/collection/mutable/QueueProxy$class.class +INFO: Loading Class: scala/collection/mutable/QueueProxy.class +INFO: Loading Class: scala/collection/mutable/ResizableArray$.class +INFO: Loading Class: scala/collection/mutable/ResizableArray$class.class +INFO: Loading Class: scala/collection/mutable/ResizableArray.class +INFO: Loading Class: scala/collection/mutable/RevertibleHistory.class +INFO: Loading Class: scala/collection/mutable/Seq$.class +INFO: Loading Class: scala/collection/mutable/Seq$class.class +INFO: Loading Class: scala/collection/mutable/Seq.class +INFO: Loading Class: scala/collection/mutable/SeqLike$$anonfun$transform$1.class +INFO: Loading Class: scala/collection/mutable/SeqLike$class.class +INFO: Loading Class: scala/collection/mutable/SeqLike.class +INFO: Loading Class: scala/collection/mutable/Set$.class +INFO: Loading Class: scala/collection/mutable/Set$class.class +INFO: Loading Class: scala/collection/mutable/Set.class +INFO: Loading Class: scala/collection/mutable/SetBuilder.class +INFO: Loading Class: scala/collection/mutable/SetLike$$anonfun$$less$less$1.class +INFO: Loading Class: scala/collection/mutable/SetLike$$anonfun$clear$1.class +INFO: Loading Class: scala/collection/mutable/SetLike$class.class +INFO: Loading Class: scala/collection/mutable/SetLike.class +INFO: Loading Class: scala/collection/mutable/SetProxy$$anon$1.class +INFO: Loading Class: scala/collection/mutable/SetProxy$class.class +INFO: Loading Class: scala/collection/mutable/SetProxy.class +INFO: Loading Class: scala/collection/mutable/SortedSet$.class +INFO: Loading Class: scala/collection/mutable/SortedSet$class.class +INFO: Loading Class: scala/collection/mutable/SortedSet.class +INFO: Loading Class: scala/collection/mutable/Stack$$anonfun$pushAll$1.class +INFO: Loading Class: scala/collection/mutable/Stack$.class +INFO: Loading Class: scala/collection/mutable/Stack$StackBuilder.class +INFO: Loading Class: scala/collection/mutable/Stack.class +INFO: Loading Class: scala/collection/mutable/StackProxy$$anon$1.class +INFO: Loading Class: scala/collection/mutable/StackProxy$class.class +INFO: Loading Class: scala/collection/mutable/StackProxy.class +INFO: Loading Class: scala/collection/mutable/StringBuilder$.class +INFO: Loading Class: scala/collection/mutable/StringBuilder.class +INFO: Loading Class: scala/collection/mutable/Subscriber.class +INFO: Loading Class: scala/collection/mutable/SynchronizedBuffer$class.class +INFO: Loading Class: scala/collection/mutable/SynchronizedBuffer.class +INFO: Loading Class: scala/collection/mutable/SynchronizedMap$class.class +INFO: Loading Class: scala/collection/mutable/SynchronizedMap.class +INFO: Loading Class: scala/collection/mutable/SynchronizedPriorityQueue.class +INFO: Loading Class: scala/collection/mutable/SynchronizedQueue.class +INFO: Loading Class: scala/collection/mutable/SynchronizedSet$class.class +INFO: Loading Class: scala/collection/mutable/SynchronizedSet.class +INFO: Loading Class: scala/collection/mutable/SynchronizedStack.class +INFO: Loading Class: scala/collection/mutable/Traversable$.class +INFO: Loading Class: scala/collection/mutable/Traversable$class.class +INFO: Loading Class: scala/collection/mutable/Traversable.class +INFO: Loading Class: scala/collection/mutable/TreeSet$$anonfun$1.class +INFO: Loading Class: scala/collection/mutable/TreeSet$$anonfun$2.class +INFO: Loading Class: scala/collection/mutable/TreeSet$$anonfun$3.class +INFO: Loading Class: scala/collection/mutable/TreeSet$$anonfun$iteratorFrom$1.class +INFO: Loading Class: scala/collection/mutable/TreeSet$.class +INFO: Loading Class: scala/collection/mutable/TreeSet.class +INFO: Loading Class: scala/collection/mutable/Undoable.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer$$anon$1.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer$.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer$Unrolled$$anonfun$insertAll$1.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer$Unrolled$.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer$Unrolled.class +INFO: Loading Class: scala/collection/mutable/UnrolledBuffer.class +INFO: Loading Class: scala/collection/mutable/WeakHashMap$.class +INFO: Loading Class: scala/collection/mutable/WeakHashMap.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$$anon$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$$anon$1$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$$anon$1.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofBoolean.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofByte.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofChar.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofDouble.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofFloat.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofInt.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofLong.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofRef.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofShort.class +INFO: Loading Class: scala/collection/mutable/WrappedArray$ofUnit.class +INFO: Loading Class: scala/collection/mutable/WrappedArray.class +INFO: Loading Class: scala/collection/mutable/WrappedArrayBuilder.class +INFO: Loading Class: scala/collection/package$$anon$1.class +INFO: Loading Class: scala/collection/package$.class +INFO: Loading Class: scala/collection/package.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingForkJoinTasks$WrappedTask$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingForkJoinTasks$WrappedTask.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingForkJoinTasks$class.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingForkJoinTasks.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingTasks$WrappedTask$$anonfun$spawnSubtasks$1.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingTasks$WrappedTask$class.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingTasks$WrappedTask.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingTasks$class.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingTasks.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingThreadPoolTasks$WrappedTask$$anonfun$split$2.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingThreadPoolTasks$WrappedTask.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingThreadPoolTasks$class.class +INFO: Loading Class: scala/collection/parallel/AdaptiveWorkStealingThreadPoolTasks.class +INFO: Loading Class: scala/collection/parallel/AugmentedIterableIterator$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/AugmentedIterableIterator$class.class +INFO: Loading Class: scala/collection/parallel/AugmentedIterableIterator.class +INFO: Loading Class: scala/collection/parallel/AugmentedSeqIterator$class.class +INFO: Loading Class: scala/collection/parallel/AugmentedSeqIterator.class +INFO: Loading Class: scala/collection/parallel/BucketCombiner.class +INFO: Loading Class: scala/collection/parallel/BufferSplitter$$anonfun$debugInformation$1.class +INFO: Loading Class: scala/collection/parallel/BufferSplitter.class +INFO: Loading Class: scala/collection/parallel/Combiner$class.class +INFO: Loading Class: scala/collection/parallel/Combiner.class +INFO: Loading Class: scala/collection/parallel/CombinerFactory.class +INFO: Loading Class: scala/collection/parallel/CompositeThrowable$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/collection/parallel/CompositeThrowable$.class +INFO: Loading Class: scala/collection/parallel/CompositeThrowable.class +INFO: Loading Class: scala/collection/parallel/ExecutionContextTaskSupport$.class +INFO: Loading Class: scala/collection/parallel/ExecutionContextTaskSupport.class +INFO: Loading Class: scala/collection/parallel/ExecutionContextTasks$class.class +INFO: Loading Class: scala/collection/parallel/ExecutionContextTasks.class +INFO: Loading Class: scala/collection/parallel/FactoryOps$Otherwise.class +INFO: Loading Class: scala/collection/parallel/FactoryOps$class.class +INFO: Loading Class: scala/collection/parallel/FactoryOps.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTaskSupport$.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTaskSupport.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTasks$$anonfun$execute$2.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTasks$.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTasks$WrappedTask$class.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTasks$WrappedTask.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTasks$class.class +INFO: Loading Class: scala/collection/parallel/ForkJoinTasks.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$exec$1.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$scala$collection$parallel$FutureTasks$$compute$1$1.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$scala$collection$parallel$FutureTasks$$compute$1$2$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$scala$collection$parallel$FutureTasks$$compute$1$2$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$scala$collection$parallel$FutureTasks$$compute$1$2.class +INFO: Loading Class: scala/collection/parallel/FutureTasks$$anonfun$scala$collection$parallel$FutureTasks$$compute$1$3.class +INFO: Loading Class: scala/collection/parallel/FutureTasks.class +INFO: Loading Class: scala/collection/parallel/FutureThreadPoolTasks$.class +INFO: Loading Class: scala/collection/parallel/FutureThreadPoolTasks.class +INFO: Loading Class: scala/collection/parallel/HavingForkJoinPool.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$$anonfun$buildString$1.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$$anonfun$splitWithSignalling$1.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Appended.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Mapped$$anonfun$split$2.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Mapped.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Taken$$anonfun$3.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Taken$$anonfun$4.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Taken$$anonfun$5.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Taken$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Taken$$anonfun$takeSeq$1.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Taken.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Zipped$$anonfun$6.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Zipped$$anonfun$split$3.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$Zipped.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$ZippedAll.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter$class.class +INFO: Loading Class: scala/collection/parallel/IterableSplitter.class +INFO: Loading Class: scala/collection/parallel/ParIterable$.class +INFO: Loading Class: scala/collection/parallel/ParIterable$class.class +INFO: Loading Class: scala/collection/parallel/ParIterable.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$10.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$11$$anon$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$11$$anon$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$11$$anon$3.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$11.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$12.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$13$$anon$14.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$13.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$15.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$16.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$17.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$18.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$19.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$4.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$5.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$6.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$7.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$8.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anon$9.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$$plus$plus$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$$plus$plus$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$$plus$plus$3.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$10.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$11.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$3.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$4.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$5.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$6$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$6.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$7.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$8$$anonfun$apply$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$8.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$9.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$collect$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$collect$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$drop$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$dropWhile$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$filter$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$filterNot$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$flatMap$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$flatMap$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$last$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$map$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$map$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$max$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$maxBy$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$min$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$minBy$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$partition$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$printDebugBuffer$1$$anonfun$apply$5.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$printDebugBuffer$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$reduce$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$scan$1$$anonfun$apply$3.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$scan$1$$anonfun$apply$4.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$scan$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$slice$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$span$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$splitAt$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$take$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$takeWhile$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$takeWhile$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$to$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$toMap$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$toParCollection$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$toParMap$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$toSeq$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$toSet$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$zip$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$zip$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$zipAll$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$$anonfun$zipAll$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Accessor$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Accessor$class.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Accessor.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Aggregate.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$BuilderOps$Otherwise.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$BuilderOps$class.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$BuilderOps.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Collect.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Composite.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Copy.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CopyToArray$$anonfun$split$21.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CopyToArray$$anonfun$split$22.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CopyToArray$$anonfun$split$23.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CopyToArray$$anonfun$split$24.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CopyToArray.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Count.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CreateScanTree$$anonfun$split$25.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CreateScanTree$$anonfun$split$26.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CreateScanTree$$anonfun$split$27.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$CreateScanTree.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Drop$$anonfun$13.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Drop$$anonfun$split$5.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Drop$$anonfun$split$6.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Drop$$anonfun$split$7.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Drop.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Exists.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Filter.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$FilterNot.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Find.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$FlatMap.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Fold.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Forall.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Foreach.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$FromScanTree.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$GroupBy.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Map.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Max.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Min.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$NonDivisible.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$NonDivisibleTask$class.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$NonDivisibleTask.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ParComposite.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Partition.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Product.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Reduce.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ResultMapping.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ScanLeaf$.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ScanLeaf.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ScanNode$.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ScanNode.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ScanTree$class.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ScanTree.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$SeqComposite.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$SignallingOps.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Slice$$anonfun$14.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Slice$$anonfun$split$10.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Slice$$anonfun$split$8.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Slice$$anonfun$split$9.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Slice.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Span$$anonfun$split$16.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Span$$anonfun$split$17.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Span$$anonfun$split$18.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Span.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$SplitAt$$anonfun$15.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$SplitAt$$anonfun$split$11.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$SplitAt$$anonfun$split$12.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$SplitAt.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$StrictSplitterCheckTask$class.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$StrictSplitterCheckTask.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Sum.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Take$$anonfun$12.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Take$$anonfun$split$2.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Take$$anonfun$split$3.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Take$$anonfun$split$4.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Take.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$TakeWhile$$anonfun$split$13.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$TakeWhile$$anonfun$split$14.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$TakeWhile$$anonfun$split$15.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$TakeWhile.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$TaskOps.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ToParCollection.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ToParMap.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Transformer.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Zip$$anonfun$16.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Zip$$anonfun$split$19.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$Zip.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ZipAll$$anonfun$17.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ZipAll$$anonfun$split$20.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$ZipAll.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike$class.class +INFO: Loading Class: scala/collection/parallel/ParIterableLike.class +INFO: Loading Class: scala/collection/parallel/ParMap$.class +INFO: Loading Class: scala/collection/parallel/ParMap$WithDefault.class +INFO: Loading Class: scala/collection/parallel/ParMap$class.class +INFO: Loading Class: scala/collection/parallel/ParMap.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$1$$anonfun$filtered$1.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$1$$anonfun$foreach$5.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$1.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$2$$anonfun$foreach$6.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$2$$anonfun$foreach$7.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$2$$anonfun$splitter$1.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$2.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$3$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$3$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$3.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$4$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$4$$anonfun$split$2.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$$anon$4.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$DefaultKeySet$$anonfun$foreach$1.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$DefaultKeySet$$anonfun$foreach$2.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$DefaultKeySet.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$DefaultValuesIterable$$anonfun$foreach$3.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$DefaultValuesIterable$$anonfun$foreach$4.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$DefaultValuesIterable.class +INFO: Loading Class: scala/collection/parallel/ParMapLike$class.class +INFO: Loading Class: scala/collection/parallel/ParMapLike.class +INFO: Loading Class: scala/collection/parallel/ParSeq$.class +INFO: Loading Class: scala/collection/parallel/ParSeq$class.class +INFO: Loading Class: scala/collection/parallel/ParSeq.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anon$3.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anon$4.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anon$5.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$3.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$corresponds$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$corresponds$2$$anon$9.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$corresponds$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$diff$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$distinct$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$endsWith$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$endsWith$2$$anon$8.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$endsWith$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$intersect$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$patch$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$patch$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$patch$3.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$reverse$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$reverse$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$reverseMap$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$reverseMap$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$sameElements$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$sameElements$2$$anon$7.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$sameElements$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$startsWith$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$startsWith$2$$anon$6.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$startsWith$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$updated$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$updated$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$zip$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$$anonfun$zip$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Accessor.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Corresponds$$anonfun$split$15.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Corresponds$$anonfun$split$16.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Corresponds.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Elements$$anon$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Elements$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Elements$$anonfun$psplit$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Elements$$anonfun$psplit$2$$anon$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Elements$$anonfun$psplit$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Elements.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$IndexWhere$$anonfun$split$4.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$IndexWhere$$anonfun$split$5.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$IndexWhere$$anonfun$split$6.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$IndexWhere.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$LastIndexWhere$$anonfun$split$7.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$LastIndexWhere$$anonfun$split$8.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$LastIndexWhere$$anonfun$split$9.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$LastIndexWhere.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Reverse.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$ReverseMap.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SameElements$$anonfun$split$10.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SameElements$$anonfun$split$11.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SameElements.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SegmentLength$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SegmentLength$$anonfun$split$2.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SegmentLength$$anonfun$split$3.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$SegmentLength.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Transformer.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Updated$$anonfun$split$12.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Updated$$anonfun$split$13.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Updated$$anonfun$split$14.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Updated.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$Zip.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike$class.class +INFO: Loading Class: scala/collection/parallel/ParSeqLike.class +INFO: Loading Class: scala/collection/parallel/ParSet$.class +INFO: Loading Class: scala/collection/parallel/ParSet$class.class +INFO: Loading Class: scala/collection/parallel/ParSet.class +INFO: Loading Class: scala/collection/parallel/ParSetLike$$anonfun$diff$1.class +INFO: Loading Class: scala/collection/parallel/ParSetLike$$anonfun$union$1.class +INFO: Loading Class: scala/collection/parallel/ParSetLike$class.class +INFO: Loading Class: scala/collection/parallel/ParSetLike.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits$$anon$1.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits$$anon$2$$anon$3.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits$$anon$2.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits$$anon$4$$anon$5.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits$$anon$4.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits$.class +INFO: Loading Class: scala/collection/parallel/ParallelCollectionImplicits.class +INFO: Loading Class: scala/collection/parallel/PreciseSplitter.class +INFO: Loading Class: scala/collection/parallel/RemainsIterator$class.class +INFO: Loading Class: scala/collection/parallel/RemainsIterator.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$$anon$1.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$$anonfun$psplitWithSignalling$1.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$$anonfun$splitWithSignalling$2.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Appended$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Appended$$anonfun$10.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Appended$$anonfun$7.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Appended$$anonfun$8.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Appended$$anonfun$9.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Appended.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Mapped$$anonfun$psplit$2.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Mapped.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Patched.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Taken$$anonfun$psplit$1.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Taken.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Zipped$$anonfun$psplit$3.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$Zipped.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$ZippedAll.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter$class.class +INFO: Loading Class: scala/collection/parallel/SeqSplitter.class +INFO: Loading Class: scala/collection/parallel/Splitter$$anon$1.class +INFO: Loading Class: scala/collection/parallel/Splitter$.class +INFO: Loading Class: scala/collection/parallel/Splitter.class +INFO: Loading Class: scala/collection/parallel/Task$$anonfun$tryLeaf$1.class +INFO: Loading Class: scala/collection/parallel/Task$$anonfun$tryLeaf$2.class +INFO: Loading Class: scala/collection/parallel/Task$class.class +INFO: Loading Class: scala/collection/parallel/Task.class +INFO: Loading Class: scala/collection/parallel/TaskSupport.class +INFO: Loading Class: scala/collection/parallel/Tasks$WrappedTask$class.class +INFO: Loading Class: scala/collection/parallel/Tasks$WrappedTask.class +INFO: Loading Class: scala/collection/parallel/Tasks$class.class +INFO: Loading Class: scala/collection/parallel/Tasks.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTaskSupport$.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTaskSupport.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks$$anon$1.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks$$anonfun$execute$1.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks$.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks$WrappedTask$class.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks$WrappedTask.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks$class.class +INFO: Loading Class: scala/collection/parallel/ThreadPoolTasks.class +INFO: Loading Class: scala/collection/parallel/ThrowableOps.class +INFO: Loading Class: scala/collection/parallel/TraversableOps$Otherwise.class +INFO: Loading Class: scala/collection/parallel/TraversableOps$class.class +INFO: Loading Class: scala/collection/parallel/TraversableOps.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anon$1.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anonfun$3.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anonfun$4.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anonfun$5.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$$anonfun$6.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$CreateGroupedTrie$$anonfun$7.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$CreateGroupedTrie.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner$CreateTrie.class +INFO: Loading Class: scala/collection/parallel/immutable/HashMapCombiner.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner$$anon$1.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner$$anonfun$3.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner$.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner$CreateTrie.class +INFO: Loading Class: scala/collection/parallel/immutable/HashSetCombiner.class +INFO: Loading Class: scala/collection/parallel/immutable/LazyParVectorCombiner$$anonfun$result$1.class +INFO: Loading Class: scala/collection/parallel/immutable/LazyParVectorCombiner.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashMap$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashMap$ParHashMapIterator$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashMap$ParHashMapIterator.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashMap.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashSet$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashSet$ParHashSetIterator$$anonfun$split$1.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashSet$ParHashSetIterator.class +INFO: Loading Class: scala/collection/parallel/immutable/ParHashSet.class +INFO: Loading Class: scala/collection/parallel/immutable/ParIterable$$anonfun$toSeq$1.class +INFO: Loading Class: scala/collection/parallel/immutable/ParIterable$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParIterable$class.class +INFO: Loading Class: scala/collection/parallel/immutable/ParIterable.class +INFO: Loading Class: scala/collection/parallel/immutable/ParMap$$anonfun$withDefaultValue$1.class +INFO: Loading Class: scala/collection/parallel/immutable/ParMap$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParMap$WithDefault$$anonfun$withDefaultValue$2.class +INFO: Loading Class: scala/collection/parallel/immutable/ParMap$WithDefault.class +INFO: Loading Class: scala/collection/parallel/immutable/ParMap$class.class +INFO: Loading Class: scala/collection/parallel/immutable/ParMap.class +INFO: Loading Class: scala/collection/parallel/immutable/ParRange$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParRange$ParRangeIterator$$anonfun$psplit$1.class +INFO: Loading Class: scala/collection/parallel/immutable/ParRange$ParRangeIterator$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParRange$ParRangeIterator.class +INFO: Loading Class: scala/collection/parallel/immutable/ParRange.class +INFO: Loading Class: scala/collection/parallel/immutable/ParSeq$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParSeq$class.class +INFO: Loading Class: scala/collection/parallel/immutable/ParSeq.class +INFO: Loading Class: scala/collection/parallel/immutable/ParSet$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParSet$class.class +INFO: Loading Class: scala/collection/parallel/immutable/ParSet.class +INFO: Loading Class: scala/collection/parallel/immutable/ParVector$.class +INFO: Loading Class: scala/collection/parallel/immutable/ParVector$ParVectorIterator$$anonfun$psplit$1.class +INFO: Loading Class: scala/collection/parallel/immutable/ParVector$ParVectorIterator$$anonfun$psplit$2.class +INFO: Loading Class: scala/collection/parallel/immutable/ParVector$ParVectorIterator.class +INFO: Loading Class: scala/collection/parallel/immutable/ParVector.class +INFO: Loading Class: scala/collection/parallel/immutable/Repetition$ParIterator$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/immutable/Repetition$ParIterator$$anonfun$psplit$1.class +INFO: Loading Class: scala/collection/parallel/immutable/Repetition$ParIterator$$anonfun$psplit$2.class +INFO: Loading Class: scala/collection/parallel/immutable/Repetition$ParIterator$.class +INFO: Loading Class: scala/collection/parallel/immutable/Repetition$ParIterator.class +INFO: Loading Class: scala/collection/parallel/immutable/Repetition.class +INFO: Loading Class: scala/collection/parallel/immutable/package$.class +INFO: Loading Class: scala/collection/parallel/immutable/package.class +INFO: Loading Class: scala/collection/parallel/mutable/DoublingUnrolledBuffer.class +INFO: Loading Class: scala/collection/parallel/mutable/ExposedArrayBuffer.class +INFO: Loading Class: scala/collection/parallel/mutable/ExposedArraySeq.class +INFO: Loading Class: scala/collection/parallel/mutable/LazyCombiner$$anonfun$size$1.class +INFO: Loading Class: scala/collection/parallel/mutable/LazyCombiner$class.class +INFO: Loading Class: scala/collection/parallel/mutable/LazyCombiner.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$$anonfun$fromTraversables$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$$anonfun$scan$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$Map.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$copy2builder$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$copy2builder$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$copy2builder$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$copy2builder$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$psplit$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$reverse2combiner$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$reverse2combiner$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$reverse2combiner$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$$anonfun$reverse2combiner$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ParArrayIterator.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray$ScanToArray.class +INFO: Loading Class: scala/collection/parallel/mutable/ParArray.class +INFO: Loading Class: scala/collection/parallel/mutable/ParFlatHashTable$ParFlatHashTableIterator$$anonfun$debugInformation$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParFlatHashTable$ParFlatHashTableIterator.class +INFO: Loading Class: scala/collection/parallel/mutable/ParFlatHashTable$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParFlatHashTable.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$3.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$brokenInvariants$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$brokenInvariants$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$readObject$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$$anonfun$writeObject$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap$ParHashMapIterator.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMap.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$$anon$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$$anonfun$4.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$$anonfun$result$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$AddingHashTable.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$FillBlocks.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner$table$2$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashMapCombiner.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSet$$anonfun$debugInformation$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSet$$anonfun$readObject$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSet$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSet$ParHashSetIterator.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSet.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$$anon$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$$anon$2$$anonfun$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$$anon$2$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$$anon$2$$anonfun$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$$anon$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$$anonfun$parPopulate$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$AddingFlatHashTable.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner$FillBlocks.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashSetCombiner.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashTable$EntryIterator$$anonfun$convertToArrayBuffer$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashTable$EntryIterator$$anonfun$debugInformation$1$$anonfun$apply$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashTable$EntryIterator$$anonfun$debugInformation$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashTable$EntryIterator.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashTable$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParHashTable.class +INFO: Loading Class: scala/collection/parallel/mutable/ParIterable$$anonfun$toSeq$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParIterable$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParIterable$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParIterable.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMap$$anonfun$withDefaultValue$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMap$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMap$WithDefault$$anonfun$withDefaultValue$2.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMap$WithDefault.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMap$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMap.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMapLike$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParMapLike.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSeq$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSeq$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSeq.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSet$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSet$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSet.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSetLike$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParSetLike.class +INFO: Loading Class: scala/collection/parallel/mutable/ParTrieMap$.class +INFO: Loading Class: scala/collection/parallel/mutable/ParTrieMap$Size.class +INFO: Loading Class: scala/collection/parallel/mutable/ParTrieMap.class +INFO: Loading Class: scala/collection/parallel/mutable/ParTrieMapCombiner$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ParTrieMapCombiner.class +INFO: Loading Class: scala/collection/parallel/mutable/ParTrieMapSplitter.class +INFO: Loading Class: scala/collection/parallel/mutable/ResizableParArrayCombiner$$anon$1.class +INFO: Loading Class: scala/collection/parallel/mutable/ResizableParArrayCombiner$.class +INFO: Loading Class: scala/collection/parallel/mutable/ResizableParArrayCombiner$CopyChainToArray.class +INFO: Loading Class: scala/collection/parallel/mutable/ResizableParArrayCombiner$class.class +INFO: Loading Class: scala/collection/parallel/mutable/ResizableParArrayCombiner.class +INFO: Loading Class: scala/collection/parallel/mutable/SizeMapUtils$class.class +INFO: Loading Class: scala/collection/parallel/mutable/SizeMapUtils.class +INFO: Loading Class: scala/collection/parallel/mutable/UnrolledParArrayCombiner$$anon$1.class +INFO: Loading Class: scala/collection/parallel/mutable/UnrolledParArrayCombiner$.class +INFO: Loading Class: scala/collection/parallel/mutable/UnrolledParArrayCombiner$CopyUnrolledToArray.class +INFO: Loading Class: scala/collection/parallel/mutable/UnrolledParArrayCombiner$class.class +INFO: Loading Class: scala/collection/parallel/mutable/UnrolledParArrayCombiner.class +INFO: Loading Class: scala/collection/parallel/mutable/package$.class +INFO: Loading Class: scala/collection/parallel/mutable/package.class +INFO: Loading Class: scala/collection/parallel/package$.class +INFO: Loading Class: scala/collection/parallel/package$CollectionsHaveToParArray.class +INFO: Loading Class: scala/collection/parallel/package.class +INFO: Loading Class: scala/collection/script/End$.class +INFO: Loading Class: scala/collection/script/End.class +INFO: Loading Class: scala/collection/script/Include$.class +INFO: Loading Class: scala/collection/script/Include.class +INFO: Loading Class: scala/collection/script/Index$.class +INFO: Loading Class: scala/collection/script/Index.class +INFO: Loading Class: scala/collection/script/Location.class +INFO: Loading Class: scala/collection/script/Message.class +INFO: Loading Class: scala/collection/script/NoLo$.class +INFO: Loading Class: scala/collection/script/NoLo.class +INFO: Loading Class: scala/collection/script/Remove$.class +INFO: Loading Class: scala/collection/script/Remove.class +INFO: Loading Class: scala/collection/script/Reset$.class +INFO: Loading Class: scala/collection/script/Reset.class +INFO: Loading Class: scala/collection/script/Script.class +INFO: Loading Class: scala/collection/script/Scriptable.class +INFO: Loading Class: scala/collection/script/Start$.class +INFO: Loading Class: scala/collection/script/Start.class +INFO: Loading Class: scala/collection/script/Update$.class +INFO: Loading Class: scala/collection/script/Update.class +INFO: Loading Class: scala/compat/Platform$.class +INFO: Loading Class: scala/compat/Platform.class +INFO: Loading Class: scala/concurrent/Await$$anonfun$ready$1.class +INFO: Loading Class: scala/concurrent/Await$$anonfun$result$1.class +INFO: Loading Class: scala/concurrent/Await$.class +INFO: Loading Class: scala/concurrent/Await.class +INFO: Loading Class: scala/concurrent/AwaitPermission$.class +INFO: Loading Class: scala/concurrent/AwaitPermission.class +INFO: Loading Class: scala/concurrent/Awaitable.class +INFO: Loading Class: scala/concurrent/BatchingExecutor$Batch$$anonfun$run$1.class +INFO: Loading Class: scala/concurrent/BatchingExecutor$Batch.class +INFO: Loading Class: scala/concurrent/BatchingExecutor$class.class +INFO: Loading Class: scala/concurrent/BatchingExecutor.class +INFO: Loading Class: scala/concurrent/BlockContext$.class +INFO: Loading Class: scala/concurrent/BlockContext$DefaultBlockContext$.class +INFO: Loading Class: scala/concurrent/BlockContext.class +INFO: Loading Class: scala/concurrent/CanAwait.class +INFO: Loading Class: scala/concurrent/Channel$LinkedList.class +INFO: Loading Class: scala/concurrent/Channel.class +INFO: Loading Class: scala/concurrent/DelayedLazyVal$$anon$1.class +INFO: Loading Class: scala/concurrent/DelayedLazyVal.class +INFO: Loading Class: scala/concurrent/ExecutionContext$$anonfun$defaultReporter$1.class +INFO: Loading Class: scala/concurrent/ExecutionContext$.class +INFO: Loading Class: scala/concurrent/ExecutionContext$Implicits$.class +INFO: Loading Class: scala/concurrent/ExecutionContext$class.class +INFO: Loading Class: scala/concurrent/ExecutionContext.class +INFO: Loading Class: scala/concurrent/ExecutionContextExecutor.class +INFO: Loading Class: scala/concurrent/ExecutionContextExecutorService.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$2.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$andThen$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$collect$1$$anonfun$apply$4.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$collect$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$failed$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$fallbackTo$1$$anonfun$apply$9.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$fallbackTo$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$filter$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$find$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$firstCompletedOf$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$flatMap$1$$anonfun$apply$3.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$flatMap$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$fold$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$foreach$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$map$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$mapTo$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$onFailure$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$onSuccess$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$recover$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$recoverWith$1$$anonfun$apply$5.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$recoverWith$1$$anonfun$apply$6.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$recoverWith$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$reduce$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$sequence$1$$anonfun$apply$10$$anonfun$apply$11.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$sequence$1$$anonfun$apply$10.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$sequence$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$sequence$2.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$transform$1$$anonfun$apply$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$transform$1$$anonfun$apply$2.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$transform$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$traverse$1$$anonfun$apply$12$$anonfun$apply$13.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$traverse$1$$anonfun$apply$12.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$traverse$1.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$traverse$2.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$zip$1$$anonfun$apply$7$$anonfun$apply$8.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$zip$1$$anonfun$apply$7.class +INFO: Loading Class: scala/concurrent/Future$$anonfun$zip$1.class +INFO: Loading Class: scala/concurrent/Future$.class +INFO: Loading Class: scala/concurrent/Future$InternalCallbackExecutor$.class +INFO: Loading Class: scala/concurrent/Future$class.class +INFO: Loading Class: scala/concurrent/Future.class +INFO: Loading Class: scala/concurrent/FutureTaskRunner.class +INFO: Loading Class: scala/concurrent/JavaConversions$.class +INFO: Loading Class: scala/concurrent/JavaConversions.class +INFO: Loading Class: scala/concurrent/Lock.class +INFO: Loading Class: scala/concurrent/ManagedBlocker.class +INFO: Loading Class: scala/concurrent/OnCompleteRunnable.class +INFO: Loading Class: scala/concurrent/Promise$$anonfun$completeWith$1.class +INFO: Loading Class: scala/concurrent/Promise$$anonfun$tryCompleteWith$1.class +INFO: Loading Class: scala/concurrent/Promise$.class +INFO: Loading Class: scala/concurrent/Promise$class.class +INFO: Loading Class: scala/concurrent/Promise.class +INFO: Loading Class: scala/concurrent/SyncChannel.class +INFO: Loading Class: scala/concurrent/SyncVar.class +INFO: Loading Class: scala/concurrent/TaskRunner.class +INFO: Loading Class: scala/concurrent/ThreadPoolRunner$$anonfun$futureAsFunction$1.class +INFO: Loading Class: scala/concurrent/ThreadPoolRunner$RunCallable.class +INFO: Loading Class: scala/concurrent/ThreadPoolRunner$class.class +INFO: Loading Class: scala/concurrent/ThreadPoolRunner.class +INFO: Loading Class: scala/concurrent/duration/Deadline$.class +INFO: Loading Class: scala/concurrent/duration/Deadline$DeadlineIsOrdered$.class +INFO: Loading Class: scala/concurrent/duration/Deadline.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anon$1.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anon$2.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anon$3.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anonfun$1.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anonfun$2.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anonfun$3.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anonfun$4.class +INFO: Loading Class: scala/concurrent/duration/Duration$$anonfun$scala$concurrent$duration$Duration$$expandLabels$1.class +INFO: Loading Class: scala/concurrent/duration/Duration$.class +INFO: Loading Class: scala/concurrent/duration/Duration$DurationIsOrdered$.class +INFO: Loading Class: scala/concurrent/duration/Duration$Infinite.class +INFO: Loading Class: scala/concurrent/duration/Duration.class +INFO: Loading Class: scala/concurrent/duration/DurationConversions$.class +INFO: Loading Class: scala/concurrent/duration/DurationConversions$Classifier.class +INFO: Loading Class: scala/concurrent/duration/DurationConversions$class.class +INFO: Loading Class: scala/concurrent/duration/DurationConversions$fromNowConvert$.class +INFO: Loading Class: scala/concurrent/duration/DurationConversions$spanConvert$.class +INFO: Loading Class: scala/concurrent/duration/DurationConversions.class +INFO: Loading Class: scala/concurrent/duration/FiniteDuration$.class +INFO: Loading Class: scala/concurrent/duration/FiniteDuration$FiniteDurationIsOrdered$.class +INFO: Loading Class: scala/concurrent/duration/FiniteDuration.class +INFO: Loading Class: scala/concurrent/duration/package$.class +INFO: Loading Class: scala/concurrent/duration/package$DoubleMult$.class +INFO: Loading Class: scala/concurrent/duration/package$DoubleMult.class +INFO: Loading Class: scala/concurrent/duration/package$DurationDouble$.class +INFO: Loading Class: scala/concurrent/duration/package$DurationDouble.class +INFO: Loading Class: scala/concurrent/duration/package$DurationInt$.class +INFO: Loading Class: scala/concurrent/duration/package$DurationInt.class +INFO: Loading Class: scala/concurrent/duration/package$DurationLong$.class +INFO: Loading Class: scala/concurrent/duration/package$DurationLong.class +INFO: Loading Class: scala/concurrent/duration/package$IntMult$.class +INFO: Loading Class: scala/concurrent/duration/package$IntMult.class +INFO: Loading Class: scala/concurrent/duration/package$LongMult$.class +INFO: Loading Class: scala/concurrent/duration/package$LongMult.class +INFO: Loading Class: scala/concurrent/duration/package$fromNow$.class +INFO: Loading Class: scala/concurrent/duration/package$span$.class +INFO: Loading Class: scala/concurrent/duration/package.class +INFO: Loading Class: scala/concurrent/forkjoin/CountedCompleter.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool$DefaultForkJoinWorkerThreadFactory.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool$EmptyTask.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool$ForkJoinWorkerThreadFactory.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool$ManagedBlocker.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool$Submitter.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool$WorkQueue.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinPool.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinTask$AdaptedCallable.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinTask$AdaptedRunnable.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinTask$AdaptedRunnableAction.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinTask$ExceptionNode.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinTask.class +INFO: Loading Class: scala/concurrent/forkjoin/ForkJoinWorkerThread.class +INFO: Loading Class: scala/concurrent/forkjoin/LinkedTransferQueue$Itr.class +INFO: Loading Class: scala/concurrent/forkjoin/LinkedTransferQueue$Node.class +INFO: Loading Class: scala/concurrent/forkjoin/LinkedTransferQueue.class +INFO: Loading Class: scala/concurrent/forkjoin/RecursiveAction.class +INFO: Loading Class: scala/concurrent/forkjoin/RecursiveTask.class +INFO: Loading Class: scala/concurrent/forkjoin/ThreadLocalRandom$1.class +INFO: Loading Class: scala/concurrent/forkjoin/ThreadLocalRandom.class +INFO: Loading Class: scala/concurrent/forkjoin/TransferQueue.class +INFO: Loading Class: scala/concurrent/forkjoin/package-info.class +INFO: Loading Class: scala/concurrent/impl/AbstractPromise.class +INFO: Loading Class: scala/concurrent/impl/CallbackRunnable.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$$anon$1.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$$anon$3.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$AdaptedForkJoinTask.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$DefaultThreadFactory$$anon$2$$anon$4.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$DefaultThreadFactory$$anon$2.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl$DefaultThreadFactory.class +INFO: Loading Class: scala/concurrent/impl/ExecutionContextImpl.class +INFO: Loading Class: scala/concurrent/impl/Future$.class +INFO: Loading Class: scala/concurrent/impl/Future$PromiseCompletingRunnable.class +INFO: Loading Class: scala/concurrent/impl/Future.class +INFO: Loading Class: scala/concurrent/impl/Promise$.class +INFO: Loading Class: scala/concurrent/impl/Promise$CompletionLatch.class +INFO: Loading Class: scala/concurrent/impl/Promise$DefaultPromise.class +INFO: Loading Class: scala/concurrent/impl/Promise$KeptPromise.class +INFO: Loading Class: scala/concurrent/impl/Promise$class.class +INFO: Loading Class: scala/concurrent/impl/Promise.class +INFO: Loading Class: scala/concurrent/package$.class +INFO: Loading Class: scala/concurrent/package.class +INFO: Loading Class: scala/concurrent/util/Unsafe.class +INFO: Loading Class: scala/deprecated$.class +INFO: Loading Class: scala/deprecated.class +INFO: Loading Class: scala/deprecatedInheritance$.class +INFO: Loading Class: scala/deprecatedInheritance.class +INFO: Loading Class: scala/deprecatedName.class +INFO: Loading Class: scala/deprecatedOverriding$.class +INFO: Loading Class: scala/deprecatedOverriding.class +INFO: Loading Class: scala/inline.class +INFO: Loading Class: scala/io/AnsiColor$.class +INFO: Loading Class: scala/io/AnsiColor$class.class +INFO: Loading Class: scala/io/AnsiColor.class +INFO: Loading Class: scala/io/BufferedSource$$anonfun$iter$1$$anonfun$apply$mcI$sp$1.class +INFO: Loading Class: scala/io/BufferedSource$$anonfun$iter$1.class +INFO: Loading Class: scala/io/BufferedSource$$anonfun$iter$2.class +INFO: Loading Class: scala/io/BufferedSource$$anonfun$iter$3.class +INFO: Loading Class: scala/io/BufferedSource$BufferedLineIterator.class +INFO: Loading Class: scala/io/BufferedSource.class +INFO: Loading Class: scala/io/Codec$$anon$1.class +INFO: Loading Class: scala/io/Codec$$anonfun$1.class +INFO: Loading Class: scala/io/Codec$.class +INFO: Loading Class: scala/io/Codec.class +INFO: Loading Class: scala/io/LowPriorityCodecImplicits$class.class +INFO: Loading Class: scala/io/LowPriorityCodecImplicits.class +INFO: Loading Class: scala/io/Position$.class +INFO: Loading Class: scala/io/Position.class +INFO: Loading Class: scala/io/Source$$anon$1.class +INFO: Loading Class: scala/io/Source$$anonfun$1.class +INFO: Loading Class: scala/io/Source$$anonfun$2.class +INFO: Loading Class: scala/io/Source$$anonfun$3.class +INFO: Loading Class: scala/io/Source$$anonfun$fromFile$1.class +INFO: Loading Class: scala/io/Source$$anonfun$fromFile$2.class +INFO: Loading Class: scala/io/Source$$anonfun$fromIterable$1.class +INFO: Loading Class: scala/io/Source$$anonfun$spaces$1.class +INFO: Loading Class: scala/io/Source$.class +INFO: Loading Class: scala/io/Source$LineIterator.class +INFO: Loading Class: scala/io/Source$NoPositioner$.class +INFO: Loading Class: scala/io/Source$Positioner.class +INFO: Loading Class: scala/io/Source$RelaxedPosition$.class +INFO: Loading Class: scala/io/Source$RelaxedPositioner$.class +INFO: Loading Class: scala/io/Source.class +INFO: Loading Class: scala/io/StdIn$.class +INFO: Loading Class: scala/io/StdIn$class.class +INFO: Loading Class: scala/io/StdIn.class +INFO: Loading Class: scala/language$.class +INFO: Loading Class: scala/language$experimental$.class +INFO: Loading Class: scala/language.class +INFO: Loading Class: scala/languageFeature$.class +INFO: Loading Class: scala/languageFeature$dynamics$.class +INFO: Loading Class: scala/languageFeature$dynamics.class +INFO: Loading Class: scala/languageFeature$existentials$.class +INFO: Loading Class: scala/languageFeature$existentials.class +INFO: Loading Class: scala/languageFeature$experimental$.class +INFO: Loading Class: scala/languageFeature$experimental$macros$.class +INFO: Loading Class: scala/languageFeature$experimental$macros.class +INFO: Loading Class: scala/languageFeature$higherKinds$.class +INFO: Loading Class: scala/languageFeature$higherKinds.class +INFO: Loading Class: scala/languageFeature$implicitConversions$.class +INFO: Loading Class: scala/languageFeature$implicitConversions.class +INFO: Loading Class: scala/languageFeature$postfixOps$.class +INFO: Loading Class: scala/languageFeature$postfixOps.class +INFO: Loading Class: scala/languageFeature$reflectiveCalls$.class +INFO: Loading Class: scala/languageFeature$reflectiveCalls.class +INFO: Loading Class: scala/languageFeature.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$equals$1.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$isValidByte$1.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$isValidInt$1.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$isValidLong$1.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$isValidShort$1.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$to$1.class +INFO: Loading Class: scala/math/BigDecimal$$anonfun$until$1.class +INFO: Loading Class: scala/math/BigDecimal$.class +INFO: Loading Class: scala/math/BigDecimal$RoundingMode$.class +INFO: Loading Class: scala/math/BigDecimal.class +INFO: Loading Class: scala/math/BigInt$.class +INFO: Loading Class: scala/math/BigInt.class +INFO: Loading Class: scala/math/Equiv$$anon$1.class +INFO: Loading Class: scala/math/Equiv$$anon$2.class +INFO: Loading Class: scala/math/Equiv$$anon$3.class +INFO: Loading Class: scala/math/Equiv$$anon$4.class +INFO: Loading Class: scala/math/Equiv$$anonfun$by$1.class +INFO: Loading Class: scala/math/Equiv$.class +INFO: Loading Class: scala/math/Equiv.class +INFO: Loading Class: scala/math/Fractional$.class +INFO: Loading Class: scala/math/Fractional$ExtraImplicits$class.class +INFO: Loading Class: scala/math/Fractional$ExtraImplicits.class +INFO: Loading Class: scala/math/Fractional$FractionalOps.class +INFO: Loading Class: scala/math/Fractional$Implicits$.class +INFO: Loading Class: scala/math/Fractional$class.class +INFO: Loading Class: scala/math/Fractional.class +INFO: Loading Class: scala/math/Integral$.class +INFO: Loading Class: scala/math/Integral$ExtraImplicits$class.class +INFO: Loading Class: scala/math/Integral$ExtraImplicits.class +INFO: Loading Class: scala/math/Integral$Implicits$.class +INFO: Loading Class: scala/math/Integral$IntegralOps.class +INFO: Loading Class: scala/math/Integral$class.class +INFO: Loading Class: scala/math/Integral.class +INFO: Loading Class: scala/math/LowPriorityEquiv$class.class +INFO: Loading Class: scala/math/LowPriorityEquiv.class +INFO: Loading Class: scala/math/LowPriorityOrderingImplicits$$anon$6.class +INFO: Loading Class: scala/math/LowPriorityOrderingImplicits$$anon$7.class +INFO: Loading Class: scala/math/LowPriorityOrderingImplicits$class.class +INFO: Loading Class: scala/math/LowPriorityOrderingImplicits.class +INFO: Loading Class: scala/math/Numeric$.class +INFO: Loading Class: scala/math/Numeric$BigDecimalAsIfIntegral$.class +INFO: Loading Class: scala/math/Numeric$BigDecimalAsIfIntegral$class.class +INFO: Loading Class: scala/math/Numeric$BigDecimalAsIfIntegral.class +INFO: Loading Class: scala/math/Numeric$BigDecimalIsConflicted$class.class +INFO: Loading Class: scala/math/Numeric$BigDecimalIsConflicted.class +INFO: Loading Class: scala/math/Numeric$BigDecimalIsFractional$.class +INFO: Loading Class: scala/math/Numeric$BigDecimalIsFractional$class.class +INFO: Loading Class: scala/math/Numeric$BigDecimalIsFractional.class +INFO: Loading Class: scala/math/Numeric$BigIntIsIntegral$.class +INFO: Loading Class: scala/math/Numeric$BigIntIsIntegral$class.class +INFO: Loading Class: scala/math/Numeric$BigIntIsIntegral.class +INFO: Loading Class: scala/math/Numeric$ByteIsIntegral$.class +INFO: Loading Class: scala/math/Numeric$ByteIsIntegral$class.class +INFO: Loading Class: scala/math/Numeric$ByteIsIntegral.class +INFO: Loading Class: scala/math/Numeric$CharIsIntegral$.class +INFO: Loading Class: scala/math/Numeric$CharIsIntegral$class.class +INFO: Loading Class: scala/math/Numeric$CharIsIntegral.class +INFO: Loading Class: scala/math/Numeric$DoubleAsIfIntegral$.class +INFO: Loading Class: scala/math/Numeric$DoubleAsIfIntegral$class.class +INFO: Loading Class: scala/math/Numeric$DoubleAsIfIntegral.class +INFO: Loading Class: scala/math/Numeric$DoubleIsConflicted$class.class +INFO: Loading Class: scala/math/Numeric$DoubleIsConflicted.class +INFO: Loading Class: scala/math/Numeric$DoubleIsFractional$.class +INFO: Loading Class: scala/math/Numeric$DoubleIsFractional$class.class +INFO: Loading Class: scala/math/Numeric$DoubleIsFractional.class +INFO: Loading Class: scala/math/Numeric$ExtraImplicits$class.class +INFO: Loading Class: scala/math/Numeric$ExtraImplicits.class +INFO: Loading Class: scala/math/Numeric$FloatAsIfIntegral$.class +INFO: Loading Class: scala/math/Numeric$FloatAsIfIntegral$class.class +INFO: Loading Class: scala/math/Numeric$FloatAsIfIntegral.class +INFO: Loading Class: scala/math/Numeric$FloatIsConflicted$class.class +INFO: Loading Class: scala/math/Numeric$FloatIsConflicted.class +INFO: Loading Class: scala/math/Numeric$FloatIsFractional$.class +INFO: Loading Class: scala/math/Numeric$FloatIsFractional$class.class +INFO: Loading Class: scala/math/Numeric$FloatIsFractional.class +INFO: Loading Class: scala/math/Numeric$Implicits$.class +INFO: Loading Class: scala/math/Numeric$IntIsIntegral$.class +INFO: Loading Class: scala/math/Numeric$IntIsIntegral$class.class +INFO: Loading Class: scala/math/Numeric$IntIsIntegral.class +INFO: Loading Class: scala/math/Numeric$LongIsIntegral$.class +INFO: Loading Class: scala/math/Numeric$LongIsIntegral$class.class +INFO: Loading Class: scala/math/Numeric$LongIsIntegral.class +INFO: Loading Class: scala/math/Numeric$Ops.class +INFO: Loading Class: scala/math/Numeric$ShortIsIntegral$.class +INFO: Loading Class: scala/math/Numeric$ShortIsIntegral$class.class +INFO: Loading Class: scala/math/Numeric$ShortIsIntegral.class +INFO: Loading Class: scala/math/Numeric$class.class +INFO: Loading Class: scala/math/Numeric.class +INFO: Loading Class: scala/math/Ordered$$anon$1.class +INFO: Loading Class: scala/math/Ordered$.class +INFO: Loading Class: scala/math/Ordered$class.class +INFO: Loading Class: scala/math/Ordered.class +INFO: Loading Class: scala/math/Ordering$$anon$10.class +INFO: Loading Class: scala/math/Ordering$$anon$11.class +INFO: Loading Class: scala/math/Ordering$$anon$12.class +INFO: Loading Class: scala/math/Ordering$$anon$13.class +INFO: Loading Class: scala/math/Ordering$$anon$14.class +INFO: Loading Class: scala/math/Ordering$$anon$15.class +INFO: Loading Class: scala/math/Ordering$$anon$16.class +INFO: Loading Class: scala/math/Ordering$$anon$17.class +INFO: Loading Class: scala/math/Ordering$$anon$18.class +INFO: Loading Class: scala/math/Ordering$$anon$3.class +INFO: Loading Class: scala/math/Ordering$$anon$4.class +INFO: Loading Class: scala/math/Ordering$$anon$5.class +INFO: Loading Class: scala/math/Ordering$$anon$9.class +INFO: Loading Class: scala/math/Ordering$$anonfun$by$1.class +INFO: Loading Class: scala/math/Ordering$.class +INFO: Loading Class: scala/math/Ordering$BigDecimal$.class +INFO: Loading Class: scala/math/Ordering$BigDecimalOrdering$class.class +INFO: Loading Class: scala/math/Ordering$BigDecimalOrdering.class +INFO: Loading Class: scala/math/Ordering$BigInt$.class +INFO: Loading Class: scala/math/Ordering$BigIntOrdering$class.class +INFO: Loading Class: scala/math/Ordering$BigIntOrdering.class +INFO: Loading Class: scala/math/Ordering$Boolean$.class +INFO: Loading Class: scala/math/Ordering$BooleanOrdering$class.class +INFO: Loading Class: scala/math/Ordering$BooleanOrdering.class +INFO: Loading Class: scala/math/Ordering$Byte$.class +INFO: Loading Class: scala/math/Ordering$ByteOrdering$class.class +INFO: Loading Class: scala/math/Ordering$ByteOrdering.class +INFO: Loading Class: scala/math/Ordering$Char$.class +INFO: Loading Class: scala/math/Ordering$CharOrdering$class.class +INFO: Loading Class: scala/math/Ordering$CharOrdering.class +INFO: Loading Class: scala/math/Ordering$Double$.class +INFO: Loading Class: scala/math/Ordering$DoubleOrdering$$anon$2.class +INFO: Loading Class: scala/math/Ordering$DoubleOrdering$class.class +INFO: Loading Class: scala/math/Ordering$DoubleOrdering.class +INFO: Loading Class: scala/math/Ordering$ExtraImplicits$$anon$8.class +INFO: Loading Class: scala/math/Ordering$ExtraImplicits$class.class +INFO: Loading Class: scala/math/Ordering$ExtraImplicits.class +INFO: Loading Class: scala/math/Ordering$Float$.class +INFO: Loading Class: scala/math/Ordering$FloatOrdering$$anon$1.class +INFO: Loading Class: scala/math/Ordering$FloatOrdering$class.class +INFO: Loading Class: scala/math/Ordering$FloatOrdering.class +INFO: Loading Class: scala/math/Ordering$Implicits$.class +INFO: Loading Class: scala/math/Ordering$Int$.class +INFO: Loading Class: scala/math/Ordering$IntOrdering$class.class +INFO: Loading Class: scala/math/Ordering$IntOrdering.class +INFO: Loading Class: scala/math/Ordering$Long$.class +INFO: Loading Class: scala/math/Ordering$LongOrdering$class.class +INFO: Loading Class: scala/math/Ordering$LongOrdering.class +INFO: Loading Class: scala/math/Ordering$Ops.class +INFO: Loading Class: scala/math/Ordering$OptionOrdering$class.class +INFO: Loading Class: scala/math/Ordering$OptionOrdering.class +INFO: Loading Class: scala/math/Ordering$Short$.class +INFO: Loading Class: scala/math/Ordering$ShortOrdering$class.class +INFO: Loading Class: scala/math/Ordering$ShortOrdering.class +INFO: Loading Class: scala/math/Ordering$String$.class +INFO: Loading Class: scala/math/Ordering$StringOrdering$class.class +INFO: Loading Class: scala/math/Ordering$StringOrdering.class +INFO: Loading Class: scala/math/Ordering$Unit$.class +INFO: Loading Class: scala/math/Ordering$UnitOrdering$class.class +INFO: Loading Class: scala/math/Ordering$UnitOrdering.class +INFO: Loading Class: scala/math/Ordering$class.class +INFO: Loading Class: scala/math/Ordering.class +INFO: Loading Class: scala/math/PartialOrdering$$anon$1.class +INFO: Loading Class: scala/math/PartialOrdering$class.class +INFO: Loading Class: scala/math/PartialOrdering.class +INFO: Loading Class: scala/math/PartiallyOrdered$class.class +INFO: Loading Class: scala/math/PartiallyOrdered.class +INFO: Loading Class: scala/math/ScalaNumber.class +INFO: Loading Class: scala/math/ScalaNumericAnyConversions$class.class +INFO: Loading Class: scala/math/ScalaNumericAnyConversions.class +INFO: Loading Class: scala/math/ScalaNumericConversions.class +INFO: Loading Class: scala/math/package$.class +INFO: Loading Class: scala/math/package.class +INFO: Loading Class: scala/native.class +INFO: Loading Class: scala/noinline.class +INFO: Loading Class: scala/package$$anon$1.class +INFO: Loading Class: scala/package$.class +INFO: Loading Class: scala/package.class +INFO: Loading Class: scala/ref/PhantomReference.class +INFO: Loading Class: scala/ref/PhantomReferenceWithWrapper.class +INFO: Loading Class: scala/ref/Reference$class.class +INFO: Loading Class: scala/ref/Reference.class +INFO: Loading Class: scala/ref/ReferenceQueue.class +INFO: Loading Class: scala/ref/ReferenceWithWrapper.class +INFO: Loading Class: scala/ref/ReferenceWrapper$class.class +INFO: Loading Class: scala/ref/ReferenceWrapper.class +INFO: Loading Class: scala/ref/SoftReference.class +INFO: Loading Class: scala/ref/SoftReferenceWithWrapper.class +INFO: Loading Class: scala/ref/WeakReference$.class +INFO: Loading Class: scala/ref/WeakReference.class +INFO: Loading Class: scala/ref/WeakReferenceWithWrapper.class +INFO: Loading Class: scala/reflect/AnyValManifest.class +INFO: Loading Class: scala/reflect/ClassManifestDeprecatedApis$$anonfun$subargs$1.class +INFO: Loading Class: scala/reflect/ClassManifestDeprecatedApis$class.class +INFO: Loading Class: scala/reflect/ClassManifestDeprecatedApis.class +INFO: Loading Class: scala/reflect/ClassManifestFactory$$anon$1.class +INFO: Loading Class: scala/reflect/ClassManifestFactory$$anon$2.class +INFO: Loading Class: scala/reflect/ClassManifestFactory$.class +INFO: Loading Class: scala/reflect/ClassManifestFactory.class +INFO: Loading Class: scala/reflect/ClassTag$$anon$1.class +INFO: Loading Class: scala/reflect/ClassTag$.class +INFO: Loading Class: scala/reflect/ClassTag$class.class +INFO: Loading Class: scala/reflect/ClassTag.class +INFO: Loading Class: scala/reflect/ClassTypeManifest.class +INFO: Loading Class: scala/reflect/Manifest$class.class +INFO: Loading Class: scala/reflect/Manifest.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$1.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$10.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$11.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$12.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$13.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$14.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$15.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$16.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$17.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$2.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$3.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$4.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$5.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$6.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$7.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$8.class +INFO: Loading Class: scala/reflect/ManifestFactory$$anon$9.class +INFO: Loading Class: scala/reflect/ManifestFactory$.class +INFO: Loading Class: scala/reflect/ManifestFactory$ClassTypeManifest.class +INFO: Loading Class: scala/reflect/ManifestFactory$PhantomManifest.class +INFO: Loading Class: scala/reflect/ManifestFactory$SingletonTypeManifest.class +INFO: Loading Class: scala/reflect/ManifestFactory.class +INFO: Loading Class: scala/reflect/NameTransformer$$anonfun$1.class +INFO: Loading Class: scala/reflect/NameTransformer$$anonfun$2.class +INFO: Loading Class: scala/reflect/NameTransformer$.class +INFO: Loading Class: scala/reflect/NameTransformer$OpCodes.class +INFO: Loading Class: scala/reflect/NameTransformer.class +INFO: Loading Class: scala/reflect/NoManifest$.class +INFO: Loading Class: scala/reflect/NoManifest.class +INFO: Loading Class: scala/reflect/OptManifest.class +INFO: Loading Class: scala/reflect/ScalaLongSignature.class +INFO: Loading Class: scala/reflect/ScalaSignature.class +INFO: Loading Class: scala/reflect/macros/internal/macroImpl.class +INFO: Loading Class: scala/reflect/package$.class +INFO: Loading Class: scala/reflect/package.class +INFO: Loading Class: scala/remote.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcB$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcC$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcS$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcV$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0$mcZ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction0.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcDF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcFD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcFF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcFI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcFJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcIF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcJF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcVD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcVF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcVI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcVJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcZD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcZF$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcZI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1$mcZJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction1.class +INFO: Loading Class: scala/runtime/AbstractFunction10.class +INFO: Loading Class: scala/runtime/AbstractFunction11.class +INFO: Loading Class: scala/runtime/AbstractFunction12.class +INFO: Loading Class: scala/runtime/AbstractFunction13.class +INFO: Loading Class: scala/runtime/AbstractFunction14.class +INFO: Loading Class: scala/runtime/AbstractFunction15.class +INFO: Loading Class: scala/runtime/AbstractFunction16.class +INFO: Loading Class: scala/runtime/AbstractFunction17.class +INFO: Loading Class: scala/runtime/AbstractFunction18.class +INFO: Loading Class: scala/runtime/AbstractFunction19.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcDJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcFJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcIJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcJJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcVJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZDD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZDI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZID$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZII$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZJD$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZJI$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2$mcZJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractFunction2.class +INFO: Loading Class: scala/runtime/AbstractFunction20.class +INFO: Loading Class: scala/runtime/AbstractFunction21.class +INFO: Loading Class: scala/runtime/AbstractFunction22.class +INFO: Loading Class: scala/runtime/AbstractFunction3.class +INFO: Loading Class: scala/runtime/AbstractFunction4.class +INFO: Loading Class: scala/runtime/AbstractFunction5.class +INFO: Loading Class: scala/runtime/AbstractFunction6.class +INFO: Loading Class: scala/runtime/AbstractFunction7.class +INFO: Loading Class: scala/runtime/AbstractFunction8.class +INFO: Loading Class: scala/runtime/AbstractFunction9.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcDD$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcDF$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcDI$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcDJ$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcFD$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcFF$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcFI$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcFJ$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcID$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcIF$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcII$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcIJ$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcJD$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcJF$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcJI$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcJJ$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcVD$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcVF$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcVI$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcVJ$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcZD$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcZF$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcZI$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction$mcZJ$sp.class +INFO: Loading Class: scala/runtime/AbstractPartialFunction.class +INFO: Loading Class: scala/runtime/ArrayCharSequence.class +INFO: Loading Class: scala/runtime/ArrayRuntime.class +INFO: Loading Class: scala/runtime/BooleanRef.class +INFO: Loading Class: scala/runtime/Boxed.class +INFO: Loading Class: scala/runtime/BoxedUnit.class +INFO: Loading Class: scala/runtime/BoxesRunTime.class +INFO: Loading Class: scala/runtime/ByteRef.class +INFO: Loading Class: scala/runtime/CharRef.class +INFO: Loading Class: scala/runtime/DoubleRef.class +INFO: Loading Class: scala/runtime/EmptyMethodCache.class +INFO: Loading Class: scala/runtime/FloatRef.class +INFO: Loading Class: scala/runtime/FractionalProxy$$anonfun$to$1.class +INFO: Loading Class: scala/runtime/FractionalProxy$$anonfun$until$1.class +INFO: Loading Class: scala/runtime/FractionalProxy$class.class +INFO: Loading Class: scala/runtime/FractionalProxy.class +INFO: Loading Class: scala/runtime/IntRef.class +INFO: Loading Class: scala/runtime/IntegralProxy$class.class +INFO: Loading Class: scala/runtime/IntegralProxy.class +INFO: Loading Class: scala/runtime/LongRef.class +INFO: Loading Class: scala/runtime/MegaMethodCache.class +INFO: Loading Class: scala/runtime/MethodCache.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcB$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcC$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcD$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcF$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcI$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcJ$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcS$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcV$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl$mcZ$sp.class +INFO: Loading Class: scala/runtime/NonLocalReturnControl.class +INFO: Loading Class: scala/runtime/Nothing$.class +INFO: Loading Class: scala/runtime/Null$.class +INFO: Loading Class: scala/runtime/ObjectRef.class +INFO: Loading Class: scala/runtime/OrderedProxy$class.class +INFO: Loading Class: scala/runtime/OrderedProxy.class +INFO: Loading Class: scala/runtime/PolyMethodCache.class +INFO: Loading Class: scala/runtime/RangedProxy.class +INFO: Loading Class: scala/runtime/RichBoolean$.class +INFO: Loading Class: scala/runtime/RichBoolean.class +INFO: Loading Class: scala/runtime/RichByte$.class +INFO: Loading Class: scala/runtime/RichByte.class +INFO: Loading Class: scala/runtime/RichChar$.class +INFO: Loading Class: scala/runtime/RichChar.class +INFO: Loading Class: scala/runtime/RichDouble$.class +INFO: Loading Class: scala/runtime/RichDouble.class +INFO: Loading Class: scala/runtime/RichException.class +INFO: Loading Class: scala/runtime/RichFloat$.class +INFO: Loading Class: scala/runtime/RichFloat.class +INFO: Loading Class: scala/runtime/RichInt$.class +INFO: Loading Class: scala/runtime/RichInt.class +INFO: Loading Class: scala/runtime/RichLong$.class +INFO: Loading Class: scala/runtime/RichLong.class +INFO: Loading Class: scala/runtime/RichShort$.class +INFO: Loading Class: scala/runtime/RichShort.class +INFO: Loading Class: scala/runtime/ScalaNumberProxy$class.class +INFO: Loading Class: scala/runtime/ScalaNumberProxy.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anon$1.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$arrayToString$1$1.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$arrayToString$1$2.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$scala$runtime$ScalaRunTime$$inner$1$1.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$scala$runtime$ScalaRunTime$$inner$1$2.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$scala$runtime$ScalaRunTime$$inner$1$3.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$scala$runtime$ScalaRunTime$$inner$1$4.class +INFO: Loading Class: scala/runtime/ScalaRunTime$$anonfun$toArray$1.class +INFO: Loading Class: scala/runtime/ScalaRunTime$.class +INFO: Loading Class: scala/runtime/ScalaRunTime.class +INFO: Loading Class: scala/runtime/ScalaWholeNumberProxy$class.class +INFO: Loading Class: scala/runtime/ScalaWholeNumberProxy.class +INFO: Loading Class: scala/runtime/SeqCharSequence.class +INFO: Loading Class: scala/runtime/ShortRef.class +INFO: Loading Class: scala/runtime/Statics.class +INFO: Loading Class: scala/runtime/StringAdd$.class +INFO: Loading Class: scala/runtime/StringAdd.class +INFO: Loading Class: scala/runtime/StringFormat$.class +INFO: Loading Class: scala/runtime/StringFormat.class +INFO: Loading Class: scala/runtime/TraitSetter.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$$anonfun$exists$extension$1.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$$anonfun$filter$extension$1.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$$anonfun$flatMap$extension$1.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$$anonfun$forall$extension$1.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$$anonfun$foreach$extension$1.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$$anonfun$map$extension$1.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$Ops$.class +INFO: Loading Class: scala/runtime/Tuple2Zipped$Ops.class +INFO: Loading Class: scala/runtime/Tuple2Zipped.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$$anonfun$exists$extension$1.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$$anonfun$filter$extension$1.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$$anonfun$flatMap$extension$1.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$$anonfun$forall$extension$1.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$$anonfun$foreach$extension$1.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$$anonfun$map$extension$1.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$Ops$.class +INFO: Loading Class: scala/runtime/Tuple3Zipped$Ops.class +INFO: Loading Class: scala/runtime/Tuple3Zipped.class +INFO: Loading Class: scala/runtime/VolatileBooleanRef.class +INFO: Loading Class: scala/runtime/VolatileByteRef.class +INFO: Loading Class: scala/runtime/VolatileCharRef.class +INFO: Loading Class: scala/runtime/VolatileDoubleRef.class +INFO: Loading Class: scala/runtime/VolatileFloatRef.class +INFO: Loading Class: scala/runtime/VolatileIntRef.class +INFO: Loading Class: scala/runtime/VolatileLongRef.class +INFO: Loading Class: scala/runtime/VolatileObjectRef.class +INFO: Loading Class: scala/runtime/VolatileShortRef.class +INFO: Loading Class: scala/runtime/ZippedTraversable2$$anon$1.class +INFO: Loading Class: scala/runtime/ZippedTraversable2$.class +INFO: Loading Class: scala/runtime/ZippedTraversable2.class +INFO: Loading Class: scala/runtime/ZippedTraversable3$$anon$1.class +INFO: Loading Class: scala/runtime/ZippedTraversable3$.class +INFO: Loading Class: scala/runtime/ZippedTraversable3.class +INFO: Loading Class: scala/runtime/package$.class +INFO: Loading Class: scala/runtime/package.class +INFO: Loading Class: scala/specialized.class +INFO: Loading Class: scala/sys/BooleanProp$$anonfun$keyExists$1.class +INFO: Loading Class: scala/sys/BooleanProp$$anonfun$valueIsTrue$1.class +INFO: Loading Class: scala/sys/BooleanProp$.class +INFO: Loading Class: scala/sys/BooleanProp$BooleanPropImpl.class +INFO: Loading Class: scala/sys/BooleanProp$ConstantImpl.class +INFO: Loading Class: scala/sys/BooleanProp.class +INFO: Loading Class: scala/sys/CreatorImpl.class +INFO: Loading Class: scala/sys/Prop$.class +INFO: Loading Class: scala/sys/Prop$Creator.class +INFO: Loading Class: scala/sys/Prop$DoubleProp$$anonfun$$lessinit$greater$4.class +INFO: Loading Class: scala/sys/Prop$DoubleProp$.class +INFO: Loading Class: scala/sys/Prop$FileProp$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/sys/Prop$FileProp$.class +INFO: Loading Class: scala/sys/Prop$IntProp$$anonfun$$lessinit$greater$3.class +INFO: Loading Class: scala/sys/Prop$IntProp$.class +INFO: Loading Class: scala/sys/Prop$StringProp$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/sys/Prop$StringProp$.class +INFO: Loading Class: scala/sys/Prop.class +INFO: Loading Class: scala/sys/PropImpl$$anonfun$get$1.class +INFO: Loading Class: scala/sys/PropImpl.class +INFO: Loading Class: scala/sys/ShutdownHookThread$$anon$1.class +INFO: Loading Class: scala/sys/ShutdownHookThread$.class +INFO: Loading Class: scala/sys/ShutdownHookThread.class +INFO: Loading Class: scala/sys/SystemProperties$$anonfun$$minus$eq$1.class +INFO: Loading Class: scala/sys/SystemProperties$$anonfun$$plus$eq$1.class +INFO: Loading Class: scala/sys/SystemProperties$$anonfun$contains$1.class +INFO: Loading Class: scala/sys/SystemProperties$$anonfun$get$1.class +INFO: Loading Class: scala/sys/SystemProperties$$anonfun$help$1.class +INFO: Loading Class: scala/sys/SystemProperties$$anonfun$iterator$1.class +INFO: Loading Class: scala/sys/SystemProperties$.class +INFO: Loading Class: scala/sys/SystemProperties.class +INFO: Loading Class: scala/sys/package$.class +INFO: Loading Class: scala/sys/package.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$appendLine$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$input$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$processErrFully$1$$anonfun$apply$4.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$processErrFully$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$processFully$1$$anonfun$apply$6.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$processFully$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$processOutFully$1$$anonfun$apply$5.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$processOutFully$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$toStdErr$1.class +INFO: Loading Class: scala/sys/process/BasicIO$$anonfun$toStdOut$1.class +INFO: Loading Class: scala/sys/process/BasicIO$.class +INFO: Loading Class: scala/sys/process/BasicIO$Streamed$$anonfun$apply$1.class +INFO: Loading Class: scala/sys/process/BasicIO$Streamed$$anonfun$apply$2.class +INFO: Loading Class: scala/sys/process/BasicIO$Streamed$$anonfun$apply$3.class +INFO: Loading Class: scala/sys/process/BasicIO$Streamed$$anonfun$scala$sys$process$BasicIO$Streamed$$next$1$1.class +INFO: Loading Class: scala/sys/process/BasicIO$Streamed$.class +INFO: Loading Class: scala/sys/process/BasicIO$Streamed.class +INFO: Loading Class: scala/sys/process/BasicIO$Uncloseable$$anon$1.class +INFO: Loading Class: scala/sys/process/BasicIO$Uncloseable$$anon$2.class +INFO: Loading Class: scala/sys/process/BasicIO$Uncloseable$.class +INFO: Loading Class: scala/sys/process/BasicIO$Uncloseable$class.class +INFO: Loading Class: scala/sys/process/BasicIO$Uncloseable.class +INFO: Loading Class: scala/sys/process/BasicIO.class +INFO: Loading Class: scala/sys/process/FileProcessLogger.class +INFO: Loading Class: scala/sys/process/Process$.class +INFO: Loading Class: scala/sys/process/Process.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$FileBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$Sink$class.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$Sink.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$Source$class.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$Source.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$URLBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilder$class.class +INFO: Loading Class: scala/sys/process/ProcessBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$AbstractBuilder$$anonfun$lineStream$1.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$AbstractBuilder$$anonfun$runBuffered$1.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$AbstractBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$AndBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$BasicBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$DaemonBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$Dummy.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$FileImpl.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$FileInput$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$FileInput.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$FileOutput$$anonfun$$lessinit$greater$3.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$FileOutput.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$IStreamBuilder$$anonfun$$lessinit$greater$5.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$IStreamBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$OStreamBuilder$$anonfun$$lessinit$greater$4.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$OStreamBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$OrBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$PipedBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$SequenceBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$SequentialBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$Simple$$anonfun$2.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$Simple$$anonfun$3.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$Simple$$anonfun$4.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$Simple.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$ThreadBuilder$$anonfun$1.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$ThreadBuilder.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$URLImpl.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$URLInput$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$URLInput.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl$class.class +INFO: Loading Class: scala/sys/process/ProcessBuilderImpl.class +INFO: Loading Class: scala/sys/process/ProcessCreation$$anonfun$apply$1.class +INFO: Loading Class: scala/sys/process/ProcessCreation$$anonfun$apply$2.class +INFO: Loading Class: scala/sys/process/ProcessCreation$$anonfun$apply$3.class +INFO: Loading Class: scala/sys/process/ProcessCreation$$anonfun$cat$1.class +INFO: Loading Class: scala/sys/process/ProcessCreation$$anonfun$cat$2.class +INFO: Loading Class: scala/sys/process/ProcessCreation$class.class +INFO: Loading Class: scala/sys/process/ProcessCreation.class +INFO: Loading Class: scala/sys/process/ProcessIO.class +INFO: Loading Class: scala/sys/process/ProcessImpl$AndProcess$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/sys/process/ProcessImpl$AndProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$BasicProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$CompoundProcess$$anonfun$1.class +INFO: Loading Class: scala/sys/process/ProcessImpl$CompoundProcess$$anonfun$2.class +INFO: Loading Class: scala/sys/process/ProcessImpl$CompoundProcess$$anonfun$3.class +INFO: Loading Class: scala/sys/process/ProcessImpl$CompoundProcess$$anonfun$4.class +INFO: Loading Class: scala/sys/process/ProcessImpl$CompoundProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$DummyProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$Future$$anonfun$apply$1.class +INFO: Loading Class: scala/sys/process/ProcessImpl$Future$$anonfun$apply$4.class +INFO: Loading Class: scala/sys/process/ProcessImpl$Future$.class +INFO: Loading Class: scala/sys/process/ProcessImpl$OrProcess$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/sys/process/ProcessImpl$OrProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipeSink.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipeSource.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipeThread$$anonfun$10.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipeThread.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$5.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$6.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$7.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$8.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$9.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$runAndExitValue$3.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses$$anonfun$runAndExitValue$4.class +INFO: Loading Class: scala/sys/process/ProcessImpl$PipedProcesses.class +INFO: Loading Class: scala/sys/process/ProcessImpl$ProcessSequence$$anonfun$$lessinit$greater$3.class +INFO: Loading Class: scala/sys/process/ProcessImpl$ProcessSequence.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SequentialProcess$$anonfun$runAndExitValue$1.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SequentialProcess$$anonfun$runAndExitValue$2.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SequentialProcess$$anonfun$runAndExitValue$5$$anonfun$apply$2.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SequentialProcess$$anonfun$runAndExitValue$5$$anonfun$apply$3.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SequentialProcess$$anonfun$runAndExitValue$5.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SequentialProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$SimpleProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$Spawn$$anon$1.class +INFO: Loading Class: scala/sys/process/ProcessImpl$Spawn$.class +INFO: Loading Class: scala/sys/process/ProcessImpl$ThreadProcess.class +INFO: Loading Class: scala/sys/process/ProcessImpl$class.class +INFO: Loading Class: scala/sys/process/ProcessImpl.class +INFO: Loading Class: scala/sys/process/ProcessImplicits$class.class +INFO: Loading Class: scala/sys/process/ProcessImplicits.class +INFO: Loading Class: scala/sys/process/ProcessLogger$$anon$1.class +INFO: Loading Class: scala/sys/process/ProcessLogger$.class +INFO: Loading Class: scala/sys/process/ProcessLogger.class +INFO: Loading Class: scala/sys/process/package$.class +INFO: Loading Class: scala/sys/process/package.class +INFO: Loading Class: scala/sys/process/processInternal$$anonfun$ioFailure$1.class +INFO: Loading Class: scala/sys/process/processInternal$$anonfun$onInterrupt$1.class +INFO: Loading Class: scala/sys/process/processInternal$.class +INFO: Loading Class: scala/sys/process/processInternal.class +INFO: Loading Class: scala/text/DocBreak$.class +INFO: Loading Class: scala/text/DocBreak.class +INFO: Loading Class: scala/text/DocCons$.class +INFO: Loading Class: scala/text/DocCons.class +INFO: Loading Class: scala/text/DocGroup$.class +INFO: Loading Class: scala/text/DocGroup.class +INFO: Loading Class: scala/text/DocNest$.class +INFO: Loading Class: scala/text/DocNest.class +INFO: Loading Class: scala/text/DocNil$.class +INFO: Loading Class: scala/text/DocNil.class +INFO: Loading Class: scala/text/DocText$.class +INFO: Loading Class: scala/text/DocText.class +INFO: Loading Class: scala/text/Document$.class +INFO: Loading Class: scala/text/Document.class +INFO: Loading Class: scala/throws$.class +INFO: Loading Class: scala/throws.class +INFO: Loading Class: scala/transient.class +INFO: Loading Class: scala/unchecked.class +INFO: Loading Class: scala/util/DynamicVariable$$anon$1.class +INFO: Loading Class: scala/util/DynamicVariable.class +INFO: Loading Class: scala/util/Either$.class +INFO: Loading Class: scala/util/Either$LeftProjection$.class +INFO: Loading Class: scala/util/Either$LeftProjection.class +INFO: Loading Class: scala/util/Either$MergeableEither$.class +INFO: Loading Class: scala/util/Either$MergeableEither.class +INFO: Loading Class: scala/util/Either$RightProjection$.class +INFO: Loading Class: scala/util/Either$RightProjection.class +INFO: Loading Class: scala/util/Either.class +INFO: Loading Class: scala/util/Failure$$anonfun$recover$1.class +INFO: Loading Class: scala/util/Failure$.class +INFO: Loading Class: scala/util/Failure.class +INFO: Loading Class: scala/util/Left$.class +INFO: Loading Class: scala/util/Left.class +INFO: Loading Class: scala/util/MurmurHash$$anonfun$1.class +INFO: Loading Class: scala/util/MurmurHash$$anonfun$2.class +INFO: Loading Class: scala/util/MurmurHash$$anonfun$symmetricHash$1.class +INFO: Loading Class: scala/util/MurmurHash$.class +INFO: Loading Class: scala/util/MurmurHash$mcD$sp.class +INFO: Loading Class: scala/util/MurmurHash$mcF$sp.class +INFO: Loading Class: scala/util/MurmurHash$mcI$sp.class +INFO: Loading Class: scala/util/MurmurHash$mcJ$sp.class +INFO: Loading Class: scala/util/MurmurHash.class +INFO: Loading Class: scala/util/Properties$.class +INFO: Loading Class: scala/util/Properties.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$1.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$2.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$3.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$4.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$envOrElse$1.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$envOrSome$1.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$scalaProps$1.class +INFO: Loading Class: scala/util/PropertiesTrait$$anonfun$scalaProps$2.class +INFO: Loading Class: scala/util/PropertiesTrait$class.class +INFO: Loading Class: scala/util/PropertiesTrait.class +INFO: Loading Class: scala/util/Random$$anonfun$alphanumeric$1.class +INFO: Loading Class: scala/util/Random$$anonfun$alphanumeric$2.class +INFO: Loading Class: scala/util/Random$$anonfun$nextString$1.class +INFO: Loading Class: scala/util/Random$.class +INFO: Loading Class: scala/util/Random.class +INFO: Loading Class: scala/util/Right$.class +INFO: Loading Class: scala/util/Right.class +INFO: Loading Class: scala/util/Sorting$$anonfun$stableSort$1.class +INFO: Loading Class: scala/util/Sorting$$anonfun$stableSort$2.class +INFO: Loading Class: scala/util/Sorting$.class +INFO: Loading Class: scala/util/Sorting.class +INFO: Loading Class: scala/util/Success$$anonfun$map$1.class +INFO: Loading Class: scala/util/Success$.class +INFO: Loading Class: scala/util/Success.class +INFO: Loading Class: scala/util/Try$.class +INFO: Loading Class: scala/util/Try$WithFilter$$anonfun$withFilter$1.class +INFO: Loading Class: scala/util/Try$WithFilter.class +INFO: Loading Class: scala/util/Try.class +INFO: Loading Class: scala/util/control/BreakControl.class +INFO: Loading Class: scala/util/control/Breaks$$anon$1.class +INFO: Loading Class: scala/util/control/Breaks$.class +INFO: Loading Class: scala/util/control/Breaks$TryBlock.class +INFO: Loading Class: scala/util/control/Breaks.class +INFO: Loading Class: scala/util/control/ControlThrowable.class +INFO: Loading Class: scala/util/control/Exception$$anon$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$2.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$allCatcher$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$allCatcher$2.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$catching$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$catchingPromiscuously$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$failAsValue$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$failing$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$handling$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$ignoring$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$nonFatalCatcher$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$nonFatalCatcher$2.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$pfFromExceptions$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$scala$util$control$Exception$$wouldMatch$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$throwableSubtypeToCatcher$1.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$throwableSubtypeToCatcher$2.class +INFO: Loading Class: scala/util/control/Exception$$anonfun$unwrapping$1.class +INFO: Loading Class: scala/util/control/Exception$.class +INFO: Loading Class: scala/util/control/Exception$By.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anon$2.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$$lessinit$greater$default$3$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$either$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$opt$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$toEither$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$toOption$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$toTry$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$$anonfun$withTry$1.class +INFO: Loading Class: scala/util/control/Exception$Catch$.class +INFO: Loading Class: scala/util/control/Exception$Catch.class +INFO: Loading Class: scala/util/control/Exception$Described$class.class +INFO: Loading Class: scala/util/control/Exception$Described.class +INFO: Loading Class: scala/util/control/Exception$Finally$$anonfun$and$1.class +INFO: Loading Class: scala/util/control/Exception$Finally.class +INFO: Loading Class: scala/util/control/Exception.class +INFO: Loading Class: scala/util/control/NoStackTrace$.class +INFO: Loading Class: scala/util/control/NoStackTrace$class.class +INFO: Loading Class: scala/util/control/NoStackTrace.class +INFO: Loading Class: scala/util/control/NonFatal$.class +INFO: Loading Class: scala/util/control/NonFatal.class +INFO: Loading Class: scala/util/control/TailCalls$.class +INFO: Loading Class: scala/util/control/TailCalls$Call$.class +INFO: Loading Class: scala/util/control/TailCalls$Call.class +INFO: Loading Class: scala/util/control/TailCalls$Cont$.class +INFO: Loading Class: scala/util/control/TailCalls$Cont.class +INFO: Loading Class: scala/util/control/TailCalls$Done$.class +INFO: Loading Class: scala/util/control/TailCalls$Done.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$flatMap$1.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$flatMap$2.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$map$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$map$1.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$result$1.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$resume$1.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec$$anonfun$resume$2.class +INFO: Loading Class: scala/util/control/TailCalls$TailRec.class +INFO: Loading Class: scala/util/control/TailCalls.class +INFO: Loading Class: scala/util/hashing/ByteswapHashing$.class +INFO: Loading Class: scala/util/hashing/ByteswapHashing$Chained.class +INFO: Loading Class: scala/util/hashing/ByteswapHashing.class +INFO: Loading Class: scala/util/hashing/Hashing$$anon$1.class +INFO: Loading Class: scala/util/hashing/Hashing$.class +INFO: Loading Class: scala/util/hashing/Hashing$Default.class +INFO: Loading Class: scala/util/hashing/Hashing.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anon$1.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anon$2.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anon$3.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anon$4.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anon$5.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anonfun$orderedHash$1.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$$anonfun$unorderedHash$1.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcB$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcC$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcD$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcF$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcI$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcJ$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcS$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcV$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing$mcZ$sp.class +INFO: Loading Class: scala/util/hashing/MurmurHash3$ArrayHashing.class +INFO: Loading Class: scala/util/hashing/MurmurHash3.class +INFO: Loading Class: scala/util/hashing/package$.class +INFO: Loading Class: scala/util/hashing/package.class +INFO: Loading Class: scala/util/matching/Regex$$anon$2.class +INFO: Loading Class: scala/util/matching/Regex$$anon$4.class +INFO: Loading Class: scala/util/matching/Regex$$anonfun$replaceAllIn$1.class +INFO: Loading Class: scala/util/matching/Regex$$anonfun$replaceSomeIn$1.class +INFO: Loading Class: scala/util/matching/Regex$$anonfun$unapplySeq$1.class +INFO: Loading Class: scala/util/matching/Regex$$anonfun$unapplySeq$2.class +INFO: Loading Class: scala/util/matching/Regex$$anonfun$unapplySeq$3.class +INFO: Loading Class: scala/util/matching/Regex$.class +INFO: Loading Class: scala/util/matching/Regex$Groups$$anonfun$unapplySeq$4.class +INFO: Loading Class: scala/util/matching/Regex$Groups$.class +INFO: Loading Class: scala/util/matching/Regex$Match$$anonfun$ends$1.class +INFO: Loading Class: scala/util/matching/Regex$Match$$anonfun$starts$1.class +INFO: Loading Class: scala/util/matching/Regex$Match$.class +INFO: Loading Class: scala/util/matching/Regex$Match.class +INFO: Loading Class: scala/util/matching/Regex$MatchData$$anonfun$subgroups$1.class +INFO: Loading Class: scala/util/matching/Regex$MatchData$class.class +INFO: Loading Class: scala/util/matching/Regex$MatchData.class +INFO: Loading Class: scala/util/matching/Regex$MatchIterator$$anon$1.class +INFO: Loading Class: scala/util/matching/Regex$MatchIterator$$anon$3.class +INFO: Loading Class: scala/util/matching/Regex$MatchIterator.class +INFO: Loading Class: scala/util/matching/Regex$Replacement$class.class +INFO: Loading Class: scala/util/matching/Regex$Replacement.class +INFO: Loading Class: scala/util/matching/Regex.class +INFO: Loading Class: scala/util/matching/UnanchoredRegex$class.class +INFO: Loading Class: scala/util/matching/UnanchoredRegex.class +INFO: Loading Class: scala/volatile.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-parser-combinators_2.11/1.0.1/f05d7345bf5a58924f2837c6c1f4d73a938e1ff0/scala-parser-combinators_2.11-1.0.1.jar +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions$$anonfun$flatten2$1.class +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions$$anonfun$flatten3$1.class +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions$$anonfun$flatten4$1.class +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions$$anonfun$flatten5$1.class +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions$$anonfun$headOptionTailToFunList$1.class +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions$class.class +INFO: Loading Class: scala/util/parsing/combinator/ImplicitConversions.class +INFO: Loading Class: scala/util/parsing/combinator/JavaTokenParsers$class.class +INFO: Loading Class: scala/util/parsing/combinator/JavaTokenParsers.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anon$1.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anon$2.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anonfun$parser2packrat$1.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anonfun$scala$util$parsing$combinator$PackratParsers$$recall$1.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anonfun$scala$util$parsing$combinator$PackratParsers$$setupLR$1.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anonfun$scala$util$parsing$combinator$PackratParsers$$setupLR$2$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$$anonfun$scala$util$parsing$combinator$PackratParsers$$setupLR$2.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$Head$.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$Head.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$LR$.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$LR.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$MemoEntry$.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$MemoEntry.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$PackratParser.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$PackratReader$$anon$3.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$PackratReader.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers$class.class +INFO: Loading Class: scala/util/parsing/combinator/PackratParsers.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$2$$anonfun$apply$14$$anonfun$apply$15.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$2$$anonfun$apply$14$$anonfun$apply$16.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$2$$anonfun$apply$14$$anonfun$apply$17.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$2$$anonfun$apply$14.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anon$3.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$accept$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$accept$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$acceptIf$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$acceptMatch$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$acceptSeq$1$$anonfun$apply$8.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$acceptSeq$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainl1$1$$anonfun$apply$10.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainl1$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainl1$2$$anonfun$apply$11.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainl1$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainr1$1$$anonfun$apply$12.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainr1$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainr1$2$$anonfun$apply$13.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$chainr1$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$commit$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$elem$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$err$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$failure$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$guard$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$log$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$mkList$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$not$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$opt$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$opt$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$positioned$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$rep$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$rep1$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$rep1sep$1$$anonfun$apply$9.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$rep1sep$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$rep1sep$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$repN$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$repsep$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$anonfun$success$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$tilde$.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$$tilde.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Error$.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Error.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Failure$.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Failure.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$NoSuccess$$anonfun$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$NoSuccess$.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$NoSuccess.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$OnceParser$$anonfun$$tilde$2$$anonfun$apply$18.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$OnceParser$$anonfun$$tilde$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$OnceParser$class.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$OnceParser.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$ParseResult.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anon$4.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anon$5$$anonfun$apply$7.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anon$5.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$less$tilde$1$$anonfun$apply$5.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$less$tilde$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$plus$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$qmark$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$tilde$1$$anonfun$apply$3.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$tilde$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$tilde$bang$1$$anonfun$apply$6.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$tilde$bang$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$tilde$greater$1$$anonfun$apply$4.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$tilde$greater$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$times$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$times$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$up$qmark$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$$up$qmark$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$append$1$$anonfun$apply$2.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$append$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$flatMap$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$map$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$withErrorMessage$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$withFailureMessage$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$withFilter$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser$$anonfun$withFilter$1.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Parser.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Success$.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$Success.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers$class.class +INFO: Loading Class: scala/util/parsing/combinator/Parsers.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers$$anon$1.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers$$anon$2.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers$$anon$3.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers$$anonfun$phrase$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers$$anonfun$phrase$1.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers$class.class +INFO: Loading Class: scala/util/parsing/combinator/RegexParsers.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Lexical$$anonfun$chrExcept$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Lexical$$anonfun$chrExcept$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Lexical$$anonfun$digit$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Lexical$$anonfun$letter$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Lexical$$anonfun$whitespaceChar$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Lexical.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Scanners$Scanner.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Scanners$class.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/Scanners.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$_delim$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$_delim$2$$anonfun$apply$28.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$_delim$2.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$comment$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$comment$2.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$comment$3$$anonfun$apply$27.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$comment$3.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$identChar$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$scala$util$parsing$combinator$lexical$StdLexical$$parseDelim$1$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$10.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$2.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$3$$anonfun$apply$3$$anonfun$apply$4.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$3$$anonfun$apply$3.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$3$$anonfun$apply$5.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$3.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$4$$anonfun$apply$6$$anonfun$apply$7.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$4$$anonfun$apply$6.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$4$$anonfun$apply$8.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$4$$anonfun$apply$9.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$4.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$5$$anonfun$apply$10$$anonfun$apply$11.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$5$$anonfun$apply$10.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$5$$anonfun$apply$12.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$5$$anonfun$apply$13.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$5.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$6$$anonfun$apply$14.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$6.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$7$$anonfun$apply$15.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$7.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$8$$anonfun$apply$16.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$8.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$token$9.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$17$$anonfun$apply$18.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$17$$anonfun$apply$19.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$17.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$20$$anonfun$apply$21.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$20$$anonfun$apply$22$$anonfun$apply$23.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$20$$anonfun$apply$22.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$20.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$24$$anonfun$apply$25.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$24$$anonfun$apply$26.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1$$anonfun$apply$24.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical$$anonfun$whitespace$1.class +INFO: Loading Class: scala/util/parsing/combinator/lexical/StdLexical.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StandardTokenParsers.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$ident$1.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$ident$2.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$keyword$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$keyword$1.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$numericLit$1.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$numericLit$2.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$stringLit$1.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$$anonfun$stringLit$2.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers$class.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/StdTokenParsers.class +INFO: Loading Class: scala/util/parsing/combinator/syntactical/TokenParsers.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$Identifier$.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$Identifier.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$Keyword$.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$Keyword.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$NumericLit$.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$NumericLit.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$StringLit$.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$StringLit.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens$class.class +INFO: Loading Class: scala/util/parsing/combinator/token/StdTokens.class +INFO: Loading Class: scala/util/parsing/combinator/token/Tokens$EOF$.class +INFO: Loading Class: scala/util/parsing/combinator/token/Tokens$ErrorToken$.class +INFO: Loading Class: scala/util/parsing/combinator/token/Tokens$ErrorToken.class +INFO: Loading Class: scala/util/parsing/combinator/token/Tokens$Token.class +INFO: Loading Class: scala/util/parsing/combinator/token/Tokens$class.class +INFO: Loading Class: scala/util/parsing/combinator/token/Tokens.class +INFO: Loading Class: scala/util/parsing/input/CharArrayReader$.class +INFO: Loading Class: scala/util/parsing/input/CharArrayReader.class +INFO: Loading Class: scala/util/parsing/input/CharSequenceReader$.class +INFO: Loading Class: scala/util/parsing/input/CharSequenceReader.class +INFO: Loading Class: scala/util/parsing/input/NoPosition$.class +INFO: Loading Class: scala/util/parsing/input/NoPosition.class +INFO: Loading Class: scala/util/parsing/input/OffsetPosition$$anonfun$index$1.class +INFO: Loading Class: scala/util/parsing/input/OffsetPosition$.class +INFO: Loading Class: scala/util/parsing/input/OffsetPosition.class +INFO: Loading Class: scala/util/parsing/input/PagedSeqReader$.class +INFO: Loading Class: scala/util/parsing/input/PagedSeqReader.class +INFO: Loading Class: scala/util/parsing/input/Position$$anonfun$longString$1.class +INFO: Loading Class: scala/util/parsing/input/Position$class.class +INFO: Loading Class: scala/util/parsing/input/Position.class +INFO: Loading Class: scala/util/parsing/input/Positional$class.class +INFO: Loading Class: scala/util/parsing/input/Positional.class +INFO: Loading Class: scala/util/parsing/input/Reader.class +INFO: Loading Class: scala/util/parsing/input/StreamReader$$anon$1.class +INFO: Loading Class: scala/util/parsing/input/StreamReader$.class +INFO: Loading Class: scala/util/parsing/input/StreamReader.class +INFO: Loading Class: scala/util/parsing/json/JSON$$anonfun$resolveType$1.class +INFO: Loading Class: scala/util/parsing/json/JSON$$anonfun$resolveType$2.class +INFO: Loading Class: scala/util/parsing/json/JSON$$anonfun$scala$util$parsing$json$JSON$$unRaw$1.class +INFO: Loading Class: scala/util/parsing/json/JSON$$anonfun$scala$util$parsing$json$JSON$$unRaw$2.class +INFO: Loading Class: scala/util/parsing/json/JSON$.class +INFO: Loading Class: scala/util/parsing/json/JSON.class +INFO: Loading Class: scala/util/parsing/json/JSONArray$.class +INFO: Loading Class: scala/util/parsing/json/JSONArray.class +INFO: Loading Class: scala/util/parsing/json/JSONFormat$$anonfun$1.class +INFO: Loading Class: scala/util/parsing/json/JSONFormat$$anonfun$quoteString$1.class +INFO: Loading Class: scala/util/parsing/json/JSONFormat$.class +INFO: Loading Class: scala/util/parsing/json/JSONFormat.class +INFO: Loading Class: scala/util/parsing/json/JSONObject$$anonfun$toString$1.class +INFO: Loading Class: scala/util/parsing/json/JSONObject$.class +INFO: Loading Class: scala/util/parsing/json/JSONObject.class +INFO: Loading Class: scala/util/parsing/json/JSONType.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$10$$anonfun$apply$36.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$10$$anonfun$apply$37.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$10.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$3$$anonfun$apply$22.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$3$$anonfun$apply$23.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$4$$anonfun$apply$24.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$4$$anonfun$apply$25.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$4.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$5$$anonfun$apply$26.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$5$$anonfun$apply$27.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$5.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$6$$anonfun$apply$28.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$6$$anonfun$apply$29.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$6.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$7$$anonfun$apply$30.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$7$$anonfun$apply$31.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$7.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$8$$anonfun$apply$32.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$8$$anonfun$apply$33.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$8.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$9$$anonfun$apply$34.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$9$$anonfun$apply$35.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$charSeq$9.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$expPart$1$$anonfun$apply$20.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$expPart$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$expPart$2$$anonfun$apply$21.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$expPart$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$expPart$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$exponent$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$fracPart$1$$anonfun$apply$19.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$fracPart$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$fracPart$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$hexDigit$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$intList$1$$anonfun$apply$18.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$intList$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$intList$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$intPart$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$nonzero$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$number$1$$anonfun$apply$16.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$number$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$number$2$$anonfun$apply$17.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$number$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$number$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$scala$util$parsing$json$Lexer$$unicodeBlock$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$scala$util$parsing$json$Lexer$$unicodeBlock$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$scala$util$parsing$json$Lexer$$unicodeBlock$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$scala$util$parsing$json$Lexer$$unicodeBlock$4.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$sign$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$string$1$$anonfun$apply$14$$anonfun$apply$15.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$string$1$$anonfun$apply$14.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$string$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$string$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$string$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$1$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$1$$anonfun$apply$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$2$$anonfun$apply$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$2$$anonfun$apply$4.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$2$$anonfun$apply$5.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$2$$anonfun$apply$6.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$2.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$3$$anonfun$apply$7.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$3$$anonfun$apply$8.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$3$$anonfun$apply$9.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$3.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$4.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$5$$anonfun$apply$10.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$5.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$6.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$7$$anonfun$apply$11.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$7.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$8$$anonfun$apply$12.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$8$$anonfun$apply$13.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$8.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$token$9.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$whitespace$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer$$anonfun$zero$1.class +INFO: Loading Class: scala/util/parsing/json/Lexer.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anon$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$2.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonArray$1$$anonfun$apply$5.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonArray$1$$anonfun$apply$6.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonArray$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonArray$2.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonArray$3.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonObj$1$$anonfun$apply$3.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonObj$1$$anonfun$apply$4.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonObj$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonObj$2.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$jsonObj$3.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$number$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$objEntry$1$$anonfun$apply$7.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$objEntry$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$objEntry$2.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$root$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$stringVal$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$2.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$3$$anonfun$apply$1.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$3.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$4$$anonfun$apply$2.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$4.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$5$$anonfun$apply$8.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$5.class +INFO: Loading Class: scala/util/parsing/json/Parser$$anonfun$value$6.class +INFO: Loading Class: scala/util/parsing/json/Parser.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.11.1/6580347e61cc7f8e802941e7fde40fa83b8badeb/scala-reflect-2.11.1.jar +INFO: Loading Class: scala/reflect/api/Annotations$AnnotationApi$class.class +INFO: Loading Class: scala/reflect/api/Annotations$AnnotationApi.class +INFO: Loading Class: scala/reflect/api/Annotations$AnnotationExtractor.class +INFO: Loading Class: scala/reflect/api/Annotations$ArrayArgumentApi.class +INFO: Loading Class: scala/reflect/api/Annotations$ArrayArgumentExtractor.class +INFO: Loading Class: scala/reflect/api/Annotations$JavaArgumentApi.class +INFO: Loading Class: scala/reflect/api/Annotations$LiteralArgumentApi.class +INFO: Loading Class: scala/reflect/api/Annotations$LiteralArgumentExtractor.class +INFO: Loading Class: scala/reflect/api/Annotations$NestedArgumentApi.class +INFO: Loading Class: scala/reflect/api/Annotations$NestedArgumentExtractor.class +INFO: Loading Class: scala/reflect/api/Annotations$class.class +INFO: Loading Class: scala/reflect/api/Annotations.class +INFO: Loading Class: scala/reflect/api/Constants$ConstantApi.class +INFO: Loading Class: scala/reflect/api/Constants$ConstantExtractor.class +INFO: Loading Class: scala/reflect/api/Constants$class.class +INFO: Loading Class: scala/reflect/api/Constants.class +INFO: Loading Class: scala/reflect/api/Exprs$Expr$.class +INFO: Loading Class: scala/reflect/api/Exprs$Expr$class.class +INFO: Loading Class: scala/reflect/api/Exprs$Expr.class +INFO: Loading Class: scala/reflect/api/Exprs$ExprImpl.class +INFO: Loading Class: scala/reflect/api/Exprs$class.class +INFO: Loading Class: scala/reflect/api/Exprs.class +INFO: Loading Class: scala/reflect/api/FlagSets$FlagOps.class +INFO: Loading Class: scala/reflect/api/FlagSets$FlagValues.class +INFO: Loading Class: scala/reflect/api/FlagSets$class.class +INFO: Loading Class: scala/reflect/api/FlagSets.class +INFO: Loading Class: scala/reflect/api/ImplicitTags.class +INFO: Loading Class: scala/reflect/api/Internals$CompatApi$CompatibleBuildApi.class +INFO: Loading Class: scala/reflect/api/Internals$CompatApi$CompatibleSymbol.class +INFO: Loading Class: scala/reflect/api/Internals$CompatApi$CompatibleTree.class +INFO: Loading Class: scala/reflect/api/Internals$CompatApi$class.class +INFO: Loading Class: scala/reflect/api/Internals$CompatApi.class +INFO: Loading Class: scala/reflect/api/Internals$CompatToken.class +INFO: Loading Class: scala/reflect/api/Internals$FreeTermSymbolApi.class +INFO: Loading Class: scala/reflect/api/Internals$FreeTypeSymbolApi.class +INFO: Loading Class: scala/reflect/api/Internals$Importer.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi$DecoratorApi$SymbolDecoratorApi.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi$DecoratorApi$TreeDecoratorApi.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi$DecoratorApi$TypeDecoratorApi.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi$DecoratorApi$class.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi$DecoratorApi.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi$class.class +INFO: Loading Class: scala/reflect/api/Internals$InternalApi.class +INFO: Loading Class: scala/reflect/api/Internals$ReferenceToBoxedApi.class +INFO: Loading Class: scala/reflect/api/Internals$ReferenceToBoxedExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$FlagsReprExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$ImplicitParamsExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$ScalaDotExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacitcSingletonTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticAnnotatedTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticAppliedExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticAssignExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticBlockExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticClassDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticCompoundTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticDefDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticEmptyTypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticExistentialTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticFilterExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticForExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticFunctionExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticFunctionTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticImportExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticMatchExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticNewExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticObjectDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticPackageObjectDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticPartialFunctionExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticPatDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticSelectTermExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticSelectTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTermIdentExtractor$class.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTermIdentExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTraitDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTryExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTupleExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTypeAppliedExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTypeIdentExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticTypeProjectionExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticValDefExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticValEqExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$SyntacticValFromExtractor.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$UnliftListElementwise.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$UnliftListOfListsElementwise.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi$class.class +INFO: Loading Class: scala/reflect/api/Internals$ReificationSupportApi.class +INFO: Loading Class: scala/reflect/api/Internals$class.class +INFO: Loading Class: scala/reflect/api/Internals.class +INFO: Loading Class: scala/reflect/api/JavaUniverse$JavaMirror$class.class +INFO: Loading Class: scala/reflect/api/JavaUniverse$JavaMirror.class +INFO: Loading Class: scala/reflect/api/JavaUniverse$class.class +INFO: Loading Class: scala/reflect/api/JavaUniverse.class +INFO: Loading Class: scala/reflect/api/Liftables$Liftable$$anon$1.class +INFO: Loading Class: scala/reflect/api/Liftables$Liftable$.class +INFO: Loading Class: scala/reflect/api/Liftables$Liftable.class +INFO: Loading Class: scala/reflect/api/Liftables$Unliftable$$anon$2.class +INFO: Loading Class: scala/reflect/api/Liftables$Unliftable$.class +INFO: Loading Class: scala/reflect/api/Liftables$Unliftable.class +INFO: Loading Class: scala/reflect/api/Liftables$class.class +INFO: Loading Class: scala/reflect/api/Liftables.class +INFO: Loading Class: scala/reflect/api/Mirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$ClassMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$FieldMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$InstanceMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$MethodMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$ModuleMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$ReflectiveMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$RuntimeClassApi.class +INFO: Loading Class: scala/reflect/api/Mirrors$RuntimeMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$TemplateMirror.class +INFO: Loading Class: scala/reflect/api/Mirrors$class.class +INFO: Loading Class: scala/reflect/api/Mirrors.class +INFO: Loading Class: scala/reflect/api/Names$NameApi.class +INFO: Loading Class: scala/reflect/api/Names$TermNameApi.class +INFO: Loading Class: scala/reflect/api/Names$TermNameExtractor.class +INFO: Loading Class: scala/reflect/api/Names$TypeNameApi.class +INFO: Loading Class: scala/reflect/api/Names$TypeNameExtractor.class +INFO: Loading Class: scala/reflect/api/Names$class.class +INFO: Loading Class: scala/reflect/api/Names.class +INFO: Loading Class: scala/reflect/api/Position.class +INFO: Loading Class: scala/reflect/api/Positions.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$render$1.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$render$2.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$render$3.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$render$4.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$render$5.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$render$6.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$show$1.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$showCode$1.class +INFO: Loading Class: scala/reflect/api/Printers$$anonfun$showRaw$1.class +INFO: Loading Class: scala/reflect/api/Printers$BooleanFlag$.class +INFO: Loading Class: scala/reflect/api/Printers$BooleanFlag.class +INFO: Loading Class: scala/reflect/api/Printers$TreePrinter$class.class +INFO: Loading Class: scala/reflect/api/Printers$TreePrinter.class +INFO: Loading Class: scala/reflect/api/Printers$class.class +INFO: Loading Class: scala/reflect/api/Printers.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$api$class.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$api.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$cq$.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$fq$.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$pq$.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$q$.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote$tq$.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$Quasiquote.class +INFO: Loading Class: scala/reflect/api/Quasiquotes$class.class +INFO: Loading Class: scala/reflect/api/Quasiquotes.class +INFO: Loading Class: scala/reflect/api/Scopes$MemberScopeApi.class +INFO: Loading Class: scala/reflect/api/Scopes$ScopeApi.class +INFO: Loading Class: scala/reflect/api/Scopes$class.class +INFO: Loading Class: scala/reflect/api/Scopes.class +INFO: Loading Class: scala/reflect/api/SerializedExpr.class +INFO: Loading Class: scala/reflect/api/SerializedTypeTag.class +INFO: Loading Class: scala/reflect/api/StandardDefinitions$DefinitionsApi$VarArityClassApi.class +INFO: Loading Class: scala/reflect/api/StandardDefinitions$DefinitionsApi$class.class +INFO: Loading Class: scala/reflect/api/StandardDefinitions$DefinitionsApi.class +INFO: Loading Class: scala/reflect/api/StandardDefinitions$StandardTypes.class +INFO: Loading Class: scala/reflect/api/StandardDefinitions$class.class +INFO: Loading Class: scala/reflect/api/StandardDefinitions.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftArray$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftArray$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftAsLiteral$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftConstant$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftEither$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftExpr$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftLeft$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftList$1$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftList$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftMap$1$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftMap$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftName$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftNil$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftNone$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftOption$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftRight$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftScalaSymbol$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftSet$1$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftSet$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftSome$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTree$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple10$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple11$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple12$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple13$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple14$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple15$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple16$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple17$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple18$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple19$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple2$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple20$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple21$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple22$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple3$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple4$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple5$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple6$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple7$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple8$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTuple9$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftType$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftTypeTag$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftVector$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$liftVector$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$$anonfun$scala$reflect$api$StandardLiftables$StandardLiftableInstances$$selectScala$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances$class.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardLiftableInstances.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftConstant$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftName$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftPrimitive$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftScalaSymbol$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftString$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple10$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple11$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple12$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple13$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple14$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple15$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple16$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple17$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple18$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple19$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple2$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple20$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple21$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple22$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple3$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple4$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple5$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple6$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple7$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple8$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftTuple9$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$$anonfun$unliftType$1.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances$class.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$StandardUnliftableInstances.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$class.class +INFO: Loading Class: scala/reflect/api/StandardLiftables$stdnme$.class +INFO: Loading Class: scala/reflect/api/StandardLiftables.class +INFO: Loading Class: scala/reflect/api/StandardNames$NamesApi.class +INFO: Loading Class: scala/reflect/api/StandardNames$TermNamesApi.class +INFO: Loading Class: scala/reflect/api/StandardNames$TypeNamesApi.class +INFO: Loading Class: scala/reflect/api/StandardNames$class.class +INFO: Loading Class: scala/reflect/api/StandardNames.class +INFO: Loading Class: scala/reflect/api/Symbols$ClassSymbolApi$class.class +INFO: Loading Class: scala/reflect/api/Symbols$ClassSymbolApi.class +INFO: Loading Class: scala/reflect/api/Symbols$MethodSymbolApi$class.class +INFO: Loading Class: scala/reflect/api/Symbols$MethodSymbolApi.class +INFO: Loading Class: scala/reflect/api/Symbols$ModuleSymbolApi$class.class +INFO: Loading Class: scala/reflect/api/Symbols$ModuleSymbolApi.class +INFO: Loading Class: scala/reflect/api/Symbols$SymbolApi$class.class +INFO: Loading Class: scala/reflect/api/Symbols$SymbolApi.class +INFO: Loading Class: scala/reflect/api/Symbols$TermSymbolApi$$anonfun$isOverloadedMethod$1.class +INFO: Loading Class: scala/reflect/api/Symbols$TermSymbolApi$class.class +INFO: Loading Class: scala/reflect/api/Symbols$TermSymbolApi.class +INFO: Loading Class: scala/reflect/api/Symbols$TypeSymbolApi$class.class +INFO: Loading Class: scala/reflect/api/Symbols$TypeSymbolApi.class +INFO: Loading Class: scala/reflect/api/Symbols$class.class +INFO: Loading Class: scala/reflect/api/Symbols.class +INFO: Loading Class: scala/reflect/api/TreeCreator.class +INFO: Loading Class: scala/reflect/api/Trees$AlternativeApi.class +INFO: Loading Class: scala/reflect/api/Trees$AlternativeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$AnnotatedApi.class +INFO: Loading Class: scala/reflect/api/Trees$AnnotatedExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$AppliedTypeTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$AppliedTypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ApplyApi.class +INFO: Loading Class: scala/reflect/api/Trees$ApplyExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$AssignApi.class +INFO: Loading Class: scala/reflect/api/Trees$AssignExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$AssignOrNamedArgApi.class +INFO: Loading Class: scala/reflect/api/Trees$AssignOrNamedArgExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$BindApi.class +INFO: Loading Class: scala/reflect/api/Trees$BindExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$BlockApi.class +INFO: Loading Class: scala/reflect/api/Trees$BlockExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$CaseDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$CaseDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ClassDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$ClassDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$CompoundTypeTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$CompoundTypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$DefDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$DefDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$DefTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$ExistentialTypeTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$ExistentialTypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$FunctionApi.class +INFO: Loading Class: scala/reflect/api/Trees$FunctionExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$GenericApplyApi.class +INFO: Loading Class: scala/reflect/api/Trees$IdentApi.class +INFO: Loading Class: scala/reflect/api/Trees$IdentExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$IfApi.class +INFO: Loading Class: scala/reflect/api/Trees$IfExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ImplDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$ImportApi.class +INFO: Loading Class: scala/reflect/api/Trees$ImportExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ImportSelectorApi.class +INFO: Loading Class: scala/reflect/api/Trees$ImportSelectorExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$LabelDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$LabelDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$LiteralApi.class +INFO: Loading Class: scala/reflect/api/Trees$LiteralExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$MatchApi.class +INFO: Loading Class: scala/reflect/api/Trees$MatchExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$MemberDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$ModifiersApi.class +INFO: Loading Class: scala/reflect/api/Trees$ModifiersExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ModuleDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$ModuleDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$NameTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$NewApi.class +INFO: Loading Class: scala/reflect/api/Trees$NewExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$PackageDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$PackageDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$RefTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$RefTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ReturnApi.class +INFO: Loading Class: scala/reflect/api/Trees$ReturnExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$SelectApi.class +INFO: Loading Class: scala/reflect/api/Trees$SelectExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$SelectFromTypeTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$SelectFromTypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$SingletonTypeTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$SingletonTypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$StarApi.class +INFO: Loading Class: scala/reflect/api/Trees$StarExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$SuperApi.class +INFO: Loading Class: scala/reflect/api/Trees$SuperExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$SymTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$TemplateApi.class +INFO: Loading Class: scala/reflect/api/Trees$TemplateExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$TermTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$ThisApi.class +INFO: Loading Class: scala/reflect/api/Trees$ThisExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ThrowApi.class +INFO: Loading Class: scala/reflect/api/Trees$ThrowExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformCaseDefs$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformIdents$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformMemberDefs$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformModifiers$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformStats$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformStats$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformStats$2.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformTrees$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformTypeDefs$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformValDefs$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer$$anonfun$transformValDefss$1.class +INFO: Loading Class: scala/reflect/api/Trees$Transformer.class +INFO: Loading Class: scala/reflect/api/Trees$Traverser$$anonfun$traverseStats$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/api/Trees$Traverser$$anonfun$traverseStats$1.class +INFO: Loading Class: scala/reflect/api/Trees$Traverser.class +INFO: Loading Class: scala/reflect/api/Trees$TreeApi$class.class +INFO: Loading Class: scala/reflect/api/Trees$TreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$TreeCopierOps.class +INFO: Loading Class: scala/reflect/api/Trees$TryApi.class +INFO: Loading Class: scala/reflect/api/Trees$TryExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$TypTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$TypeApplyApi.class +INFO: Loading Class: scala/reflect/api/Trees$TypeApplyExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$TypeBoundsTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$TypeBoundsTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$TypeDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$TypeDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$TypeTreeApi.class +INFO: Loading Class: scala/reflect/api/Trees$TypeTreeExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$TypedApi.class +INFO: Loading Class: scala/reflect/api/Trees$TypedExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$UnApplyApi.class +INFO: Loading Class: scala/reflect/api/Trees$UnApplyExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ValDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$ValDefExtractor.class +INFO: Loading Class: scala/reflect/api/Trees$ValOrDefDefApi.class +INFO: Loading Class: scala/reflect/api/Trees$class.class +INFO: Loading Class: scala/reflect/api/Trees.class +INFO: Loading Class: scala/reflect/api/TypeCreator.class +INFO: Loading Class: scala/reflect/api/TypeTags$PredefTypeCreator.class +INFO: Loading Class: scala/reflect/api/TypeTags$PredefTypeTag.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$1.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$10.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$11.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$12.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$13.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$14.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$15.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$2.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$3.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$4.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$5.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$6.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$7.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$8.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$$anonfun$9.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag$class.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTag.class +INFO: Loading Class: scala/reflect/api/TypeTags$TypeTagImpl.class +INFO: Loading Class: scala/reflect/api/TypeTags$WeakTypeTag$.class +INFO: Loading Class: scala/reflect/api/TypeTags$WeakTypeTag$class.class +INFO: Loading Class: scala/reflect/api/TypeTags$WeakTypeTag.class +INFO: Loading Class: scala/reflect/api/TypeTags$WeakTypeTagImpl.class +INFO: Loading Class: scala/reflect/api/TypeTags$class.class +INFO: Loading Class: scala/reflect/api/TypeTags.class +INFO: Loading Class: scala/reflect/api/Types$AnnotatedTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$AnnotatedTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$BoundedWildcardTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$BoundedWildcardTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$ClassInfoTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$ClassInfoTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$CompoundTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$ConstantTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$ConstantTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$ExistentialTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$ExistentialTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$MethodTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$MethodTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$NullaryMethodTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$NullaryMethodTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$PolyTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$PolyTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$RefinedTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$RefinedTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$SingleTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$SingleTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$SingletonTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$SuperTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$SuperTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$ThisTypeApi.class +INFO: Loading Class: scala/reflect/api/Types$ThisTypeExtractor.class +INFO: Loading Class: scala/reflect/api/Types$TypeApi.class +INFO: Loading Class: scala/reflect/api/Types$TypeBoundsApi.class +INFO: Loading Class: scala/reflect/api/Types$TypeBoundsExtractor.class +INFO: Loading Class: scala/reflect/api/Types$TypeRefApi.class +INFO: Loading Class: scala/reflect/api/Types$TypeRefExtractor.class +INFO: Loading Class: scala/reflect/api/Types$class.class +INFO: Loading Class: scala/reflect/api/Types.class +INFO: Loading Class: scala/reflect/api/Universe.class +INFO: Loading Class: scala/reflect/api/package$.class +INFO: Loading Class: scala/reflect/api/package.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$adaptAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$adaptBoundsToAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$adaptTypeOfReturn$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$adaptTypeOfReturn$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$addAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$annotationsConform$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$annotationsGlb$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$annotationsLub$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$$anonfun$canAdaptAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$AnnotationChecker$class.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$AnnotationChecker.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers$class.class +INFO: Loading Class: scala/reflect/internal/AnnotationCheckers.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$$anonfun$encodeJavaArg$1$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotatable$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotatable$$anonfun$removeAnnotation$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotatable$$anonfun$staticAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotatable$$anonfun$throwsAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotatable$class.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotatable.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$Annotation$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$constantAtIndex$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$defaultTargets$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$defaultTargets$2.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$hasArgWhich$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$isErroneous$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$isTrivial$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$refsSymbol$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$$anonfun$symbolArg$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$AnnotationInfo.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ArrayAnnotArg$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ArrayAnnotArg.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ClassfileAnnotArg.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$CompleteAnnotationInfo.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ErroneousAnnotation$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$LazyAnnotationInfo.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$LiteralAnnotArg$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$LiteralAnnotArg.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$NestedAnnotArg$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$NestedAnnotArg.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ScalaSigBytes$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ScalaSigBytes$$anonfun$toString$1.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ScalaSigBytes$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ScalaSigBytes.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$ThrownException$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$UnmappableAnnotArg$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$UnmappableAnnotation$.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos$class.class +INFO: Loading Class: scala/reflect/internal/AnnotationInfos.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs$BaseTypeSeq.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs$MappedBaseTypeSeq$$anonfun$exists$1.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs$MappedBaseTypeSeq$$anonfun$lateMap$1.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs$MappedBaseTypeSeq$$anonfun$maxDepthOfElems$2.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs$MappedBaseTypeSeq.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs$class.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqs.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqsStats$.class +INFO: Loading Class: scala/reflect/internal/BaseTypeSeqsStats.class +INFO: Loading Class: scala/reflect/internal/CapturedVariables$class.class +INFO: Loading Class: scala/reflect/internal/CapturedVariables.class +INFO: Loading Class: scala/reflect/internal/Chars$.class +INFO: Loading Class: scala/reflect/internal/Chars$class.class +INFO: Loading Class: scala/reflect/internal/Chars.class +INFO: Loading Class: scala/reflect/internal/ClassfileConstants$.class +INFO: Loading Class: scala/reflect/internal/ClassfileConstants$FlagTranslation$.class +INFO: Loading Class: scala/reflect/internal/ClassfileConstants$FlagTranslation.class +INFO: Loading Class: scala/reflect/internal/ClassfileConstants.class +INFO: Loading Class: scala/reflect/internal/Constants$Constant$$anonfun$escape$1$1.class +INFO: Loading Class: scala/reflect/internal/Constants$Constant$.class +INFO: Loading Class: scala/reflect/internal/Constants$Constant.class +INFO: Loading Class: scala/reflect/internal/Constants$class.class +INFO: Loading Class: scala/reflect/internal/Constants.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$Any_asInstanceOf$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$Any_isInstanceOf$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$ArrayModule_apply$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$ArrayModule_genericApply$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$ByNameParamClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$ComparableClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$JavaRepeatedParamClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$JavaSerializableClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$Object_asInstanceOf$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$Object_isInstanceOf$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$Object_synchronized$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$RepeatedParamClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$UnqualifiedOwners$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$briefParentsString$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$dropConcreteParents$1$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$fullyInitializeType$2.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$getterMemberTypes$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$hasJavaMainMethod$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$isArrayOfSymbol$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$isReferenceArray$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$isVolatileRefinedType$1$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$isVolatileRefinedType$1$2.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$isVolatileRefinedType$1$3.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$metaAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$newT1NoParamsMethod$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$newT1NullaryMethod$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$normalizedParents$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$normalizedParents$2.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$primitiveGetClassMethods$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$removeLaterObjects$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$removeRedundantObjects$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$repeatedToSeq$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$scala$reflect$internal$Definitions$DefinitionsClass$$contributesAbstractMembers$1$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$scala$reflect$internal$Definitions$DefinitionsClass$$matchesParams$1$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$seqToRepeated$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$typeOfMemberNamedApply$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$typeOfMemberNamedDrop$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$typeOfMemberNamedGet$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$typeOfMemberNamedHead$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$unboxedValueClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$unboxedValueClass$2.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$$anonfun$valueParamsString$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$BottomClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$MacroContextType$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$NothingClass$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$NullClass$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions$$anonfun$boxMethod$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions$$anonfun$unboxMethod$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions$ExprClassOf$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions$SubtreeType$$anonfun$unapply$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions$SubtreeType$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions$TreeType$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$RunDefinitions.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$UniverseDependentTypes.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$VarArityClass$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$VarArityClass$.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass$VarArityClass.class +INFO: Loading Class: scala/reflect/internal/Definitions$DefinitionsClass.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$ScalaValueClassesNoUnit$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$boxedClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$boxedModule$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$refClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$symbolsMap$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$symbolsMapFilt$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$$anonfun$volatileRefClass$1.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions$class.class +INFO: Loading Class: scala/reflect/internal/Definitions$ValueClassDefinitions.class +INFO: Loading Class: scala/reflect/internal/Definitions$class.class +INFO: Loading Class: scala/reflect/internal/Definitions$definitions$.class +INFO: Loading Class: scala/reflect/internal/Definitions.class +INFO: Loading Class: scala/reflect/internal/Depth$.class +INFO: Loading Class: scala/reflect/internal/Depth.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$3$$anonfun$rawOwner0$1$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$existentialBoundsExcludingHidden$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$existentialTransform$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$existentialTransform$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$$anonfun$packSymbols$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$Deskolemizer$1$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$Deskolemizer$1.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems$class.class +INFO: Loading Class: scala/reflect/internal/ExistentialsAndSkolems.class +INFO: Loading Class: scala/reflect/internal/FatalError$.class +INFO: Loading Class: scala/reflect/internal/FatalError.class +INFO: Loading Class: scala/reflect/internal/FlagSets$Flag$.class +INFO: Loading Class: scala/reflect/internal/FlagSets$FlagOpsImpl.class +INFO: Loading Class: scala/reflect/internal/FlagSets$class.class +INFO: Loading Class: scala/reflect/internal/FlagSets.class +INFO: Loading Class: scala/reflect/internal/Flags$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Flags$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/Flags$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/Flags$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/Flags$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/Flags$$anonfun$flagsToString$1.class +INFO: Loading Class: scala/reflect/internal/Flags$.class +INFO: Loading Class: scala/reflect/internal/Flags$MapFlags$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Flags$MapFlags.class +INFO: Loading Class: scala/reflect/internal/Flags.class +INFO: Loading Class: scala/reflect/internal/FreshNames$FreshNameExtractor$.class +INFO: Loading Class: scala/reflect/internal/FreshNames$FreshNameExtractor.class +INFO: Loading Class: scala/reflect/internal/FreshNames$class.class +INFO: Loading Class: scala/reflect/internal/FreshNames.class +INFO: Loading Class: scala/reflect/internal/HasFlags$class.class +INFO: Loading Class: scala/reflect/internal/HasFlags.class +INFO: Loading Class: scala/reflect/internal/Importers$$anon$2.class +INFO: Loading Class: scala/reflect/internal/Importers$$anon$3.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anon$1$$anonfun$complete$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anon$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$10.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$11.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$12.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$13.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$14.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$15.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$16.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$17.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$9.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$disambiguate$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$disambiguate$1$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$importAnnotArg$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$importAttachments$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$importModifiers$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$importScope$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$importTree$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$importTree$2.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateOrRelink$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$10.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$11.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$12.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$13.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$14.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$15.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$16.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$17.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$18.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$19.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$2.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$20.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$21.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$22.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$23.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$3.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$4.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$5.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$6.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$7.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$8.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateTree$9.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$10.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$11.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$2.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$3.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$4.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$5.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$6.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$7.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$8.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$$anonfun$recreateType$9.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$Cache.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$reverse$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$reverse$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$reverse$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$reverse$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter$reverse$.class +INFO: Loading Class: scala/reflect/internal/Importers$StandardImporter.class +INFO: Loading Class: scala/reflect/internal/Importers$class.class +INFO: Loading Class: scala/reflect/internal/Importers.class +INFO: Loading Class: scala/reflect/internal/InfoTransformers$InfoTransformer$$anonfun$insert$2.class +INFO: Loading Class: scala/reflect/internal/InfoTransformers$InfoTransformer.class +INFO: Loading Class: scala/reflect/internal/InfoTransformers$class.class +INFO: Loading Class: scala/reflect/internal/InfoTransformers.class +INFO: Loading Class: scala/reflect/internal/Internals$$anon$1.class +INFO: Loading Class: scala/reflect/internal/Internals$$anon$2.class +INFO: Loading Class: scala/reflect/internal/Internals$$anon$4.class +INFO: Loading Class: scala/reflect/internal/Internals$SymbolTableInternal$$anon$3.class +INFO: Loading Class: scala/reflect/internal/Internals$SymbolTableInternal$$anonfun$subpatterns$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Internals$SymbolTableInternal$$anonfun$subpatterns$1.class +INFO: Loading Class: scala/reflect/internal/Internals$SymbolTableInternal$changeOwnerAndModuleClassTraverser$2$.class +INFO: Loading Class: scala/reflect/internal/Internals$SymbolTableInternal$class.class +INFO: Loading Class: scala/reflect/internal/Internals$SymbolTableInternal.class +INFO: Loading Class: scala/reflect/internal/Internals$class.class +INFO: Loading Class: scala/reflect/internal/Internals.class +INFO: Loading Class: scala/reflect/internal/JMethodOrConstructor$.class +INFO: Loading Class: scala/reflect/internal/JMethodOrConstructor.class +INFO: Loading Class: scala/reflect/internal/JavaAccFlags$.class +INFO: Loading Class: scala/reflect/internal/JavaAccFlags.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBounds0$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBounds0$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$3.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$4$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$4$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$4$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$4$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/Kinds$$anonfun$checkKindBoundsHK$1$4.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$Head$.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$Head.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$ScalaNotation.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState$$anonfun$countByOrder$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState$$anonfun$removeAlias$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState$$anonfun$removeOnes$1$$anonfun$apply$7.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState$$anonfun$removeOnes$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState$.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$StringState.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$Text$.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind$Text.class +INFO: Loading Class: scala/reflect/internal/Kinds$Kind.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$$anonfun$errorMessage$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$$anonfun$errorMessage$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$$anonfun$errorMessage$3.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$$anonfun$scala$reflect$internal$Kinds$KindErrors$$arityMessage$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$$anonfun$scala$reflect$internal$Kinds$KindErrors$$strictnessMessage$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$$anonfun$scala$reflect$internal$Kinds$KindErrors$$varianceMessage$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors$.class +INFO: Loading Class: scala/reflect/internal/Kinds$KindErrors.class +INFO: Loading Class: scala/reflect/internal/Kinds$ProperTypeKind$$anonfun$buildState$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$ProperTypeKind$$anonfun$scalaNotation$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$ProperTypeKind$$anonfun$starNotation$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$ProperTypeKind$.class +INFO: Loading Class: scala/reflect/internal/Kinds$ProperTypeKind.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$$anonfun$buildState$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$$anonfun$buildState$3.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$$anonfun$hasBounds$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$$anonfun$starNotation$2.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$$anonfun$starNotation$3.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$Argument$.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind$Argument.class +INFO: Loading Class: scala/reflect/internal/Kinds$TypeConKind.class +INFO: Loading Class: scala/reflect/internal/Kinds$class.class +INFO: Loading Class: scala/reflect/internal/Kinds$inferKind$$anon$1$$anonfun$infer$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$inferKind$$anon$1.class +INFO: Loading Class: scala/reflect/internal/Kinds$inferKind$.class +INFO: Loading Class: scala/reflect/internal/Kinds$inferKind$InferKind.class +INFO: Loading Class: scala/reflect/internal/Kinds.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootSymbol.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$EmptyPackage.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$EmptyPackageClass.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$RootClass.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$RootPackage.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$RootSymbol$class.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$RootSymbol.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$WellKnownSymbol$class.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots$WellKnownSymbol.class +INFO: Loading Class: scala/reflect/internal/Mirrors$Roots.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootsBase$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootsBase$$anonfun$getModuleOrClass$1.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootsBase$$anonfun$getModuleOrClass$2.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootsBase$$anonfun$init$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootsBase$$anonfun$missingHook$1.class +INFO: Loading Class: scala/reflect/internal/Mirrors$RootsBase.class +INFO: Loading Class: scala/reflect/internal/Mirrors$class.class +INFO: Loading Class: scala/reflect/internal/Mirrors.class +INFO: Loading Class: scala/reflect/internal/MissingRequirementError$.class +INFO: Loading Class: scala/reflect/internal/MissingRequirementError.class +INFO: Loading Class: scala/reflect/internal/Mode$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Mode$$anonfun$toString$extension$1.class +INFO: Loading Class: scala/reflect/internal/Mode$.class +INFO: Loading Class: scala/reflect/internal/Mode.class +INFO: Loading Class: scala/reflect/internal/ModifierFlags$.class +INFO: Loading Class: scala/reflect/internal/ModifierFlags.class +INFO: Loading Class: scala/reflect/internal/Names$$anonfun$body$1$1.class +INFO: Loading Class: scala/reflect/internal/Names$$anonfun$lookupTypeNameIfExisting$1.class +INFO: Loading Class: scala/reflect/internal/Names$$anonfun$lookupTypeNameIfExisting$2.class +INFO: Loading Class: scala/reflect/internal/Names$Name.class +INFO: Loading Class: scala/reflect/internal/Names$NameOps.class +INFO: Loading Class: scala/reflect/internal/Names$TermName$.class +INFO: Loading Class: scala/reflect/internal/Names$TermName.class +INFO: Loading Class: scala/reflect/internal/Names$TermName_R.class +INFO: Loading Class: scala/reflect/internal/Names$TermName_S.class +INFO: Loading Class: scala/reflect/internal/Names$TypeName$.class +INFO: Loading Class: scala/reflect/internal/Names$TypeName.class +INFO: Loading Class: scala/reflect/internal/Names$TypeName_R.class +INFO: Loading Class: scala/reflect/internal/Names$TypeName_S.class +INFO: Loading Class: scala/reflect/internal/Names$class.class +INFO: Loading Class: scala/reflect/internal/Names.class +INFO: Loading Class: scala/reflect/internal/NoPhase$.class +INFO: Loading Class: scala/reflect/internal/NoPhase.class +INFO: Loading Class: scala/reflect/internal/Phase$$anonfun$iterator$1.class +INFO: Loading Class: scala/reflect/internal/Phase$$anonfun$iterator$2.class +INFO: Loading Class: scala/reflect/internal/Phase.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$findOverlapping$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$findOverlapping$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$isOverlapping$1$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$positionError$1$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$solidDescendants$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$2.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$3.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$4$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$4$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$4.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$5.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$validate$1$6.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$wrappingPos$1.class +INFO: Loading Class: scala/reflect/internal/Positions$$anonfun$wrappingPos$2.class +INFO: Loading Class: scala/reflect/internal/Positions$DefaultPosAssigner.class +INFO: Loading Class: scala/reflect/internal/Positions$Locator.class +INFO: Loading Class: scala/reflect/internal/Positions$PosAssigner.class +INFO: Loading Class: scala/reflect/internal/Positions$Range$.class +INFO: Loading Class: scala/reflect/internal/Positions$Range.class +INFO: Loading Class: scala/reflect/internal/Positions$TypedLocator.class +INFO: Loading Class: scala/reflect/internal/Positions$ValidateException.class +INFO: Loading Class: scala/reflect/internal/Positions$class.class +INFO: Loading Class: scala/reflect/internal/Positions.class +INFO: Loading Class: scala/reflect/internal/Precedence$.class +INFO: Loading Class: scala/reflect/internal/Precedence.class +INFO: Loading Class: scala/reflect/internal/Printers$$anonfun$show$1.class +INFO: Loading Class: scala/reflect/internal/Printers$$anonfun$show$2.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$10.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$addBackquotes$1$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$addBackquotes$1$2.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$addBackquotes$1$3.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$insertBraces$1$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$modsAccepted$1$1$$anonfun$apply$6.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$modsAccepted$1$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$originalTypeTrees$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$originalTypeTrees$2.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$printColumn$3.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$10.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$11.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$12.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$13.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$14.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$15.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$16.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$17.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$18.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$19.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$2.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$20.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$3.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$4.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$5.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$6$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$6.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$7.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$8.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$processTreePrinting$9.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$removeDefaultClassesFromList$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$resolveSelect$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$scala$reflect$internal$Printers$CodePrinter$$printConstrParams$1$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$scala$reflect$internal$Printers$CodePrinter$$printConstrParams$1$1$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter$$anonfun$scala$reflect$internal$Printers$CodePrinter$$printConstrParams$1$1.class +INFO: Loading Class: scala/reflect/internal/Printers$CodePrinter.class +INFO: Loading Class: scala/reflect/internal/Printers$ConsoleWriter$.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$$anonfun$scala$reflect$internal$Printers$FootnoteIndex$$classIndex$1.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$$anonfun$scala$reflect$internal$Printers$FootnoteIndex$$nextCounter$1.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$Footnotes$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$Footnotes$$anonfun$classFootnotes$1.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$Footnotes$$anonfun$get$1$$anonfun$apply$7.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$Footnotes$$anonfun$get$1.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex$Footnotes.class +INFO: Loading Class: scala/reflect/internal/Printers$FootnoteIndex.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$10.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$8.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3$$anonfun$apply$9.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$print$3.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$printIterable$default$3$1.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$printProduct$1.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$printProduct$2.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$printProduct$default$2$1.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$printProduct$default$3$1.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter$$anonfun$printProduct$default$4$1.class +INFO: Loading Class: scala/reflect/internal/Printers$RawTreePrinter.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$ifSym$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$print$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printColumn$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printColumn$2.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printFunction$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printFunction$2.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printImport$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printLabelParams$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printLabelParams$2.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printPosition$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printRow$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printRow$2.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$10.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$11.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$2.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$3.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$4.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$5.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$6.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$7.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$8.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTree$9.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTypeParams$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTypeParams$2.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printTypesInfo$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printValueParams$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printValueParams$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter$$anonfun$printValueParams$1.class +INFO: Loading Class: scala/reflect/internal/Printers$TreePrinter.class +INFO: Loading Class: scala/reflect/internal/Printers$class.class +INFO: Loading Class: scala/reflect/internal/Printers.class +INFO: Loading Class: scala/reflect/internal/PrivateWithin$$anonfun$propagatePackageBoundary$1.class +INFO: Loading Class: scala/reflect/internal/PrivateWithin$class.class +INFO: Loading Class: scala/reflect/internal/PrivateWithin.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anon$1$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anon$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anon$2$$anonfun$8$$anonfun$apply$9.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anon$2$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anon$2.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkAnnotation$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkCases$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkEarlyDef$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkImplicitParam$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkPackageStat$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkParam$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkParam$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkRefineStat$3.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$mkTparams$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$$anonfun$selectTerm$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$FilterCall$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$FlagsRepr$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$FunctionClassRef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$ImplicitParams$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$MaybeSelectApply$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$MaybeTypeTreeOriginal$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$MaybeTyped$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$MaybeUnchecked$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$ScalaDot$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$ScalaMemberRef$$anonfun$result$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$ScalaMemberRef.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticAnnotatedType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticApplied$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticApplied$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticApplied$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticAppliedType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticAssign$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticBlock$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticClassDef$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticClassDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticCompoundType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticDefDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticEmptyTypeTree$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticExistentialType$$anonfun$apply$11.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticExistentialType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticFilter$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticFor$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticForYield$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticFunction$$anonfun$apply$8.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticFunction$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticFunctionType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$$anonfun$11.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$$anonfun$12.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$Arrow$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$NameSelector$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$NameSelectorRepr$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$RenameSelector$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$RenameSelectorRepr$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$UnimportSelector$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$UnimportSelectorRepr$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$WildcardSelector$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticImport$WildcardSelectorRepr$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticMatch$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticNew$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticObjectDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticPackageObjectDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticPartialFunction$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticPatDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticSelectTerm$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticSelectType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticSingletonType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTermIdent$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTraitDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTry$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTuple$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTupleType$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTypeApplied$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTypeIdent$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticTypeProjection$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticValDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticValDefBase.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticValEq$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticValFrom$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntacticVarDef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$SyntheticUnit$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$TupleClassRef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$TupleCompanionRef$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$TupleCompanionRef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnCheckIfRefutable$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnClosure$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnCtor$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnFilter$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnFlatMap$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnFor$$anonfun$unapply$2$$anonfun$10.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnFor$$anonfun$unapply$2.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnFor$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnForCombination.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnForeach$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMap$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$ctorArgsCorrespondToFields$1$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$indexOfCtor$1$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$$anonfun$unapply$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnMkTemplate$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnPatSeq$$anonfun$9.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnPatSeq$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnPatSeqWithRes$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnSyntheticParam$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnVisitor$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$UnitClassRef$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$implodePatDefs$$anonfun$transform$1.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl$implodePatDefs$.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$ReificationSupportImpl.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport$class.class +INFO: Loading Class: scala/reflect/internal/ReificationSupport.class +INFO: Loading Class: scala/reflect/internal/Required$class.class +INFO: Loading Class: scala/reflect/internal/Required.class +INFO: Loading Class: scala/reflect/internal/Scopes$$anon$1$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$$anon$1$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Scopes$$anon$1$$anonfun$sorted$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$$anon$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$$anonfun$newScopeWith$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$EmptyScope$.class +INFO: Loading Class: scala/reflect/internal/Scopes$ErrorScope.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupAmbiguous$.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupAmbiguous.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupInaccessible$.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupInaccessible.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupNotFound$.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupSucceeded$.class +INFO: Loading Class: scala/reflect/internal/Scopes$LookupSucceeded.class +INFO: Loading Class: scala/reflect/internal/Scopes$NameLookup$class.class +INFO: Loading Class: scala/reflect/internal/Scopes$NameLookup.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anon$2.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anon$3.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$isSubScope$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$lookup$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$lookupClass$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$lookupModule$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$lookupUnshadowedEntries$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$mkString$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$$anonfun$scala$reflect$internal$Scopes$Scope$$alts_s$1$1.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope$.class +INFO: Loading Class: scala/reflect/internal/Scopes$Scope.class +INFO: Loading Class: scala/reflect/internal/Scopes$ScopeEntry.class +INFO: Loading Class: scala/reflect/internal/Scopes$class.class +INFO: Loading Class: scala/reflect/internal/Scopes.class +INFO: Loading Class: scala/reflect/internal/SomePhase$.class +INFO: Loading Class: scala/reflect/internal/SomePhase.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$Attachable$class.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$Attachable.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$BackquotedIdentifierAttachment$.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$CompoundTypeTreeOriginalAttachment$.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$CompoundTypeTreeOriginalAttachment.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$ForAttachment$.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$ImportableAttachment.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$PlainAttachment$class.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$PlainAttachment.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$SubpatternsAttachment$.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$SubpatternsAttachment.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$SyntheticUnitAttachment$.class +INFO: Loading Class: scala/reflect/internal/StdAttachments$class.class +INFO: Loading Class: scala/reflect/internal/StdAttachments.class +INFO: Loading Class: scala/reflect/internal/StdCreators$FixedMirrorTreeCreator$.class +INFO: Loading Class: scala/reflect/internal/StdCreators$FixedMirrorTreeCreator.class +INFO: Loading Class: scala/reflect/internal/StdCreators$FixedMirrorTypeCreator$.class +INFO: Loading Class: scala/reflect/internal/StdCreators$FixedMirrorTypeCreator.class +INFO: Loading Class: scala/reflect/internal/StdCreators$class.class +INFO: Loading Class: scala/reflect/internal/StdCreators.class +INFO: Loading Class: scala/reflect/internal/StdNames$$anon$1.class +INFO: Loading Class: scala/reflect/internal/StdNames$CommonNames.class +INFO: Loading Class: scala/reflect/internal/StdNames$JavaKeywords.class +INFO: Loading Class: scala/reflect/internal/StdNames$KeywordSetBuilder.class +INFO: Loading Class: scala/reflect/internal/StdNames$Keywords.class +INFO: Loading Class: scala/reflect/internal/StdNames$SymbolNames.class +INFO: Loading Class: scala/reflect/internal/StdNames$TermNames$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/StdNames$TermNames$raw$.class +INFO: Loading Class: scala/reflect/internal/StdNames$TermNames.class +INFO: Loading Class: scala/reflect/internal/StdNames$TypeNames.class +INFO: Loading Class: scala/reflect/internal/StdNames$binarynme$$anonfun$toBinary$1.class +INFO: Loading Class: scala/reflect/internal/StdNames$binarynme$.class +INFO: Loading Class: scala/reflect/internal/StdNames$class.class +INFO: Loading Class: scala/reflect/internal/StdNames$compactify$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/StdNames$compactify$.class +INFO: Loading Class: scala/reflect/internal/StdNames$fulltpnme$.class +INFO: Loading Class: scala/reflect/internal/StdNames$nme$.class +INFO: Loading Class: scala/reflect/internal/StdNames$tpnme$.class +INFO: Loading Class: scala/reflect/internal/StdNames.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$Cursor$$anon$1.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$Cursor$$anon$2.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$Cursor$$anonfun$init$2$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$Cursor$$anonfun$init$2$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$Cursor$$anonfun$init$2.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$Cursor.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$RelativeTo.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$SymbolPair$.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs$SymbolPair.class +INFO: Loading Class: scala/reflect/internal/SymbolPairs.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anon$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anon$2.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$arrayToRepeated$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$atPhaseStackMessage$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$debugStack$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$debuglogResult$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$debuglogResultIf$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$devWarningDumpStack$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$devWarningResult$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$findSymbol$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$logResult$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$logResultIf$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$openPackageModule$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$openPackageModule$2.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$$anonfun$phase_$eq$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$SimpleNameOrdering$.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$SymLoader.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$perRunCaches$$anon$3.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$perRunCaches$$anonfun$clearAll$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$perRunCaches$$anonfun$clearAll$3.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$perRunCaches$$anonfun$newGeneric$1.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$perRunCaches$.class +INFO: Loading Class: scala/reflect/internal/SymbolTable$traceSymbols$.class +INFO: Loading Class: scala/reflect/internal/SymbolTable.class +INFO: Loading Class: scala/reflect/internal/SymbolTableStats$.class +INFO: Loading Class: scala/reflect/internal/SymbolTableStats.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$11.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$cloneSymbols$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$cloneSymbolsAndModify$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$cloneSymbolsAtOwner$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$cloneSymbolsAtOwnerAndModify$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$deriveSymbols$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$deriveSymbols2$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$deriveTypeWithWildcards$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$existingSymbols$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$markAllCompleted$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$markFlagsCompleted$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$$anonfun$relevantSymbols$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$AbstractTypeSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$AliasTypeSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$ClassSymbol$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/Symbols$ClassSymbol$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/Symbols$ClassSymbol$$anonfun$companionModule0$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$ClassSymbol$$anonfun$derivedValueClassUnbox$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$ClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$CyclicReference$.class +INFO: Loading Class: scala/reflect/internal/Symbols$CyclicReference.class +INFO: Loading Class: scala/reflect/internal/Symbols$FreeSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$FreeTermSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$FreeTypeSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$ImplClassSymbol$class.class +INFO: Loading Class: scala/reflect/internal/Symbols$ImplClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$MethodSymbol$$anonfun$exceptions$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$MethodSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$ModuleClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$ModuleSymbol$$anonfun$companionClass$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$ModuleSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$NoSymbol$$anonfun$owner$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$NoSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$PackageClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$PackageObjectClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$RefinementClassSymbol$$anonfun$hasTransOwner$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$RefinementClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$StubClassSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$StubSymbol$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/Symbols$StubSymbol$class.class +INFO: Loading Class: scala/reflect/internal/Symbols$StubSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$StubTermSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anon$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anon$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$caseFieldAccessors$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$caseFieldAccessors$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$caseFieldAccessorsUnsorted$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$caseModule$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$classBound$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$classBound$2$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$classBound$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$cloneSymbol$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$companionClass$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$compose$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$constrParamAccessors$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$cookJavaRawInfo$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$cookJavaRawInfo$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$extendedOverriddenSymbols$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$extendedOverriddenSymbols$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$freshNamer$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$getterIn$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$info$3.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$info$4.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$isDeclaredByOwner$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$isFBounded$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$isNotOverridden$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$isOverridingSymbol$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$isPossibleInRefinement$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$isSerializable$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$logicallyEnclosingMember$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$matchingSymbolInternal$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$maybeInitialize$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$name_$eq$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$name_$eq$2.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$newSyntheticTypeParams$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$newSyntheticValueParams$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$originalOwnerChain$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$overriddenSymbol$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$parentSymbols$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$sealedDescendants$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$setterIn$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$substInfo$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$superSymbolIn$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol$$anonfun$warnIfSourceLoader$1$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$Symbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$SymbolContextApiImpl.class +INFO: Loading Class: scala/reflect/internal/Symbols$SymbolKind$.class +INFO: Loading Class: scala/reflect/internal/Symbols$SymbolKind.class +INFO: Loading Class: scala/reflect/internal/Symbols$SymbolOps$.class +INFO: Loading Class: scala/reflect/internal/Symbols$SymbolOps.class +INFO: Loading Class: scala/reflect/internal/Symbols$TermSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$TypeHistory$$anonfun$toString$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$TypeHistory$.class +INFO: Loading Class: scala/reflect/internal/Symbols$TypeHistory.class +INFO: Loading Class: scala/reflect/internal/Symbols$TypeSkolem.class +INFO: Loading Class: scala/reflect/internal/Symbols$TypeSymbol$$anonfun$updateTypeCache$1.class +INFO: Loading Class: scala/reflect/internal/Symbols$TypeSymbol.class +INFO: Loading Class: scala/reflect/internal/Symbols$class.class +INFO: Loading Class: scala/reflect/internal/Symbols.class +INFO: Loading Class: scala/reflect/internal/SymbolsStats$.class +INFO: Loading Class: scala/reflect/internal/SymbolsStats.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$11.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$12.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$13.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$14.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$15.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$16.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$17.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$18.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$19.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$20.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$9.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$matchVarPattern$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$mkAttributedTypeApply$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$mkMethodCall$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$mkNullaryCall$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$$anonfun$mkUnattributedRef$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$Filter$.class +INFO: Loading Class: scala/reflect/internal/TreeGen$GetVarTraverser$$anonfun$seenName$1$1.class +INFO: Loading Class: scala/reflect/internal/TreeGen$GetVarTraverser.class +INFO: Loading Class: scala/reflect/internal/TreeGen$ValEq$.class +INFO: Loading Class: scala/reflect/internal/TreeGen$ValFrom$.class +INFO: Loading Class: scala/reflect/internal/TreeGen$Yield$.class +INFO: Loading Class: scala/reflect/internal/TreeGen$patvarTransformer$.class +INFO: Loading Class: scala/reflect/internal/TreeGen.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$detectTypecheckedTree$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$fail$1$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$filterBody$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$filterBody$1$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$firstConstructor$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$foreachMethodParamAndArg$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$hasUntypedPreSuperFields$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$isConstructorWithDefault$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$isExprSafeToInline$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$isSequenceValued$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$isSyntheticCase$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$isWarnableSymbol$1$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$mapMethodParamsAndArgs$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$mayBeTypePat$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$mayBeTypePat$2.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$preSuperFields$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$recoverBody$1$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$recoverBody$1$1$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$recoverBody$1$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$repeatedParams$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$scala$reflect$internal$TreeInfo$$isLeadingPredefImport$1$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$$anonfun$stripNamedApplyBlock$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$Applied$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$Applied.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicApplication$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicApplication$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicApplicationExtractor.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicApplicationNamed$$anonfun$$lessinit$greater$3.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicApplicationNamed$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicUpdate$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$DynamicUpdate$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$IsFalse$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$IsTrue$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$MacroImplReference$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$SeeThroughBlocks.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$StripCast$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$Unapplied$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo$WildcardStarArg$.class +INFO: Loading Class: scala/reflect/internal/TreeInfo.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$New$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$NewFromConstructor$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$Template$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$Try$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$2.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$3.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$4.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$5.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$6.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itransform$7.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$itraverse$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$newDefDef$default$5$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$newDefDef$default$6$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$newTypeDef$default$5$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$scala$reflect$internal$Trees$$substituterString$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$traverseComponents$1$1.class +INFO: Loading Class: scala/reflect/internal/Trees$$anonfun$traverseMemberDef$1$1.class +INFO: Loading Class: scala/reflect/internal/Trees$Alternative$.class +INFO: Loading Class: scala/reflect/internal/Trees$Alternative.class +INFO: Loading Class: scala/reflect/internal/Trees$Annotated$.class +INFO: Loading Class: scala/reflect/internal/Trees$Annotated.class +INFO: Loading Class: scala/reflect/internal/Trees$AppliedTypeTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$AppliedTypeTree.class +INFO: Loading Class: scala/reflect/internal/Trees$Apply$.class +INFO: Loading Class: scala/reflect/internal/Trees$Apply.class +INFO: Loading Class: scala/reflect/internal/Trees$ApplyDynamic$.class +INFO: Loading Class: scala/reflect/internal/Trees$ApplyDynamic.class +INFO: Loading Class: scala/reflect/internal/Trees$ApplyImplicitView.class +INFO: Loading Class: scala/reflect/internal/Trees$ApplyToImplicitArgs.class +INFO: Loading Class: scala/reflect/internal/Trees$ArrayValue$.class +INFO: Loading Class: scala/reflect/internal/Trees$ArrayValue.class +INFO: Loading Class: scala/reflect/internal/Trees$Assign$.class +INFO: Loading Class: scala/reflect/internal/Trees$Assign.class +INFO: Loading Class: scala/reflect/internal/Trees$AssignOrNamedArg$.class +INFO: Loading Class: scala/reflect/internal/Trees$AssignOrNamedArg.class +INFO: Loading Class: scala/reflect/internal/Trees$Bind$.class +INFO: Loading Class: scala/reflect/internal/Trees$Bind.class +INFO: Loading Class: scala/reflect/internal/Trees$Block$.class +INFO: Loading Class: scala/reflect/internal/Trees$Block.class +INFO: Loading Class: scala/reflect/internal/Trees$CannotHaveAttrs$$anonfun$requireLegal$1.class +INFO: Loading Class: scala/reflect/internal/Trees$CannotHaveAttrs$class.class +INFO: Loading Class: scala/reflect/internal/Trees$CannotHaveAttrs.class +INFO: Loading Class: scala/reflect/internal/Trees$CaseDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$CaseDef.class +INFO: Loading Class: scala/reflect/internal/Trees$ChangeOwnerTraverser$$anonfun$traverse$1.class +INFO: Loading Class: scala/reflect/internal/Trees$ChangeOwnerTraverser$$anonfun$traverse$2.class +INFO: Loading Class: scala/reflect/internal/Trees$ChangeOwnerTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$ClassDef$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/Trees$ClassDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$ClassDef.class +INFO: Loading Class: scala/reflect/internal/Trees$CollectTreeTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$CompoundTypeTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$CompoundTypeTree.class +INFO: Loading Class: scala/reflect/internal/Trees$DefDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$DefDef.class +INFO: Loading Class: scala/reflect/internal/Trees$DefTree.class +INFO: Loading Class: scala/reflect/internal/Trees$Duplicator.class +INFO: Loading Class: scala/reflect/internal/Trees$EmptyTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$ExistentialTypeTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$ExistentialTypeTree.class +INFO: Loading Class: scala/reflect/internal/Trees$FilterTreeTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$FindTreeTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$ForeachPartialTreeTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$ForeachTreeTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$Function$.class +INFO: Loading Class: scala/reflect/internal/Trees$Function.class +INFO: Loading Class: scala/reflect/internal/Trees$GenericApply.class +INFO: Loading Class: scala/reflect/internal/Trees$Ident$.class +INFO: Loading Class: scala/reflect/internal/Trees$Ident.class +INFO: Loading Class: scala/reflect/internal/Trees$If$.class +INFO: Loading Class: scala/reflect/internal/Trees$If.class +INFO: Loading Class: scala/reflect/internal/Trees$ImplDef.class +INFO: Loading Class: scala/reflect/internal/Trees$Import$.class +INFO: Loading Class: scala/reflect/internal/Trees$Import.class +INFO: Loading Class: scala/reflect/internal/Trees$ImportSelector$.class +INFO: Loading Class: scala/reflect/internal/Trees$ImportSelector.class +INFO: Loading Class: scala/reflect/internal/Trees$InternalTreeCopierOps.class +INFO: Loading Class: scala/reflect/internal/Trees$LabelDef$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/Trees$LabelDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$LabelDef.class +INFO: Loading Class: scala/reflect/internal/Trees$LazyTreeCopier.class +INFO: Loading Class: scala/reflect/internal/Trees$Literal$.class +INFO: Loading Class: scala/reflect/internal/Trees$Literal.class +INFO: Loading Class: scala/reflect/internal/Trees$Match$.class +INFO: Loading Class: scala/reflect/internal/Trees$Match.class +INFO: Loading Class: scala/reflect/internal/Trees$MemberDef.class +INFO: Loading Class: scala/reflect/internal/Trees$Modifiers$$anonfun$hasAnnotationNamed$1.class +INFO: Loading Class: scala/reflect/internal/Trees$Modifiers$.class +INFO: Loading Class: scala/reflect/internal/Trees$Modifiers.class +INFO: Loading Class: scala/reflect/internal/Trees$ModuleDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$ModuleDef.class +INFO: Loading Class: scala/reflect/internal/Trees$NameTree$class.class +INFO: Loading Class: scala/reflect/internal/Trees$NameTree.class +INFO: Loading Class: scala/reflect/internal/Trees$New$.class +INFO: Loading Class: scala/reflect/internal/Trees$New.class +INFO: Loading Class: scala/reflect/internal/Trees$PackageDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$PackageDef.class +INFO: Loading Class: scala/reflect/internal/Trees$RefTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$RefTree.class +INFO: Loading Class: scala/reflect/internal/Trees$ReferenceToBoxed$.class +INFO: Loading Class: scala/reflect/internal/Trees$ReferenceToBoxed.class +INFO: Loading Class: scala/reflect/internal/Trees$Return$.class +INFO: Loading Class: scala/reflect/internal/Trees$Return.class +INFO: Loading Class: scala/reflect/internal/Trees$Select$.class +INFO: Loading Class: scala/reflect/internal/Trees$Select.class +INFO: Loading Class: scala/reflect/internal/Trees$SelectFromTypeTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$SelectFromTypeTree.class +INFO: Loading Class: scala/reflect/internal/Trees$ShallowDuplicator.class +INFO: Loading Class: scala/reflect/internal/Trees$SingletonTypeTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$SingletonTypeTree.class +INFO: Loading Class: scala/reflect/internal/Trees$Star$.class +INFO: Loading Class: scala/reflect/internal/Trees$Star.class +INFO: Loading Class: scala/reflect/internal/Trees$StrictTreeCopier.class +INFO: Loading Class: scala/reflect/internal/Trees$Super$.class +INFO: Loading Class: scala/reflect/internal/Trees$Super.class +INFO: Loading Class: scala/reflect/internal/Trees$SymTree.class +INFO: Loading Class: scala/reflect/internal/Trees$Template$.class +INFO: Loading Class: scala/reflect/internal/Trees$Template.class +INFO: Loading Class: scala/reflect/internal/Trees$TermTree.class +INFO: Loading Class: scala/reflect/internal/Trees$This$.class +INFO: Loading Class: scala/reflect/internal/Trees$This.class +INFO: Loading Class: scala/reflect/internal/Trees$ThisSubstituter$$anonfun$transform$1.class +INFO: Loading Class: scala/reflect/internal/Trees$ThisSubstituter.class +INFO: Loading Class: scala/reflect/internal/Trees$Throw$.class +INFO: Loading Class: scala/reflect/internal/Trees$Throw.class +INFO: Loading Class: scala/reflect/internal/Trees$Tree.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$changeOwner$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$children$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$correspondsStructure$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$equalsStructure$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$forAll$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$freeSyms$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$freeSyms$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$freeTerms$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$freeTerms$2.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$freeTypes$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$freeTypes$2.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$scala$reflect$internal$Trees$TreeContextApiImpl$$equals0$1$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$scala$reflect$internal$Trees$TreeContextApiImpl$$subtrees$1$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl$$anonfun$substituteThis$1.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeContextApiImpl.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeReplacer.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeStackTraverser$class.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeStackTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeSubstituter.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeSymSubstTraverser.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeSymSubstituter$$anonfun$transform$2.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeSymSubstituter.class +INFO: Loading Class: scala/reflect/internal/Trees$TreeTypeSubstituter.class +INFO: Loading Class: scala/reflect/internal/Trees$Try$.class +INFO: Loading Class: scala/reflect/internal/Trees$Try.class +INFO: Loading Class: scala/reflect/internal/Trees$TypTree.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeApply$.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeApply.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeBoundsTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeBoundsTree.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeDef.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeMapTreeSubstituter.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeTree$.class +INFO: Loading Class: scala/reflect/internal/Trees$TypeTree.class +INFO: Loading Class: scala/reflect/internal/Trees$Typed$.class +INFO: Loading Class: scala/reflect/internal/Trees$Typed.class +INFO: Loading Class: scala/reflect/internal/Trees$UnApply$.class +INFO: Loading Class: scala/reflect/internal/Trees$UnApply.class +INFO: Loading Class: scala/reflect/internal/Trees$UnderConstructionTransformer$class.class +INFO: Loading Class: scala/reflect/internal/Trees$UnderConstructionTransformer.class +INFO: Loading Class: scala/reflect/internal/Trees$ValDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$ValDef.class +INFO: Loading Class: scala/reflect/internal/Trees$ValOrDefDef$.class +INFO: Loading Class: scala/reflect/internal/Trees$ValOrDefDef.class +INFO: Loading Class: scala/reflect/internal/Trees$class.class +INFO: Loading Class: scala/reflect/internal/Trees$noSelfType$.class +INFO: Loading Class: scala/reflect/internal/Trees$pendingSuperCall$.class +INFO: Loading Class: scala/reflect/internal/Trees.class +INFO: Loading Class: scala/reflect/internal/TreesStats$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/TreesStats$.class +INFO: Loading Class: scala/reflect/internal/TreesStats.class +INFO: Loading Class: scala/reflect/internal/TypeConstants$.class +INFO: Loading Class: scala/reflect/internal/TypeConstants.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$$anonfun$paramString$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$$anonfun$typeParamsString$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$class.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$noPrint$.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$$anonfun$ptLine$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$$anonfun$ptLine$2.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$$anonfun$ptLine$3.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$$anonfun$ptTypeParams$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$str$$anonfun$parents$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$str$$anonfun$tparams$1.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging$typeDebug$str$.class +INFO: Loading Class: scala/reflect/internal/TypeDebugging.class +INFO: Loading Class: scala/reflect/internal/Types$$anon$6.class +INFO: Loading Class: scala/reflect/internal/Types$$anon$7.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$30.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$31.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$32.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$33.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$34.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$35.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$36$$anonfun$apply$12.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$36.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$37.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$38.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$39.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$40.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$41.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$42.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$43.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$44.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$45.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$46.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$47.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$48.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$49.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$50.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$51.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$52.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$53.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$54.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$appliedType$1$$anonfun$28.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$appliedType$1$$anonfun$29.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$appliedType$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$appliedType$3.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$check$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$copyRefinedType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$copyRefinedType$2$$anonfun$apply$8.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$copyRefinedType$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineBaseClassesOfCompoundType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineBaseClassesOfCompoundType$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineBaseTypeSeqOfCompoundType$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineBaseTypeSeqOfCompoundType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineBaseTypeSeqOfCompoundType$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineBaseTypeSeqOfCompoundType$3.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineParentsOfTypeRef$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$defineUnderlyingOfSingleType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$elementExtract$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$existentialAbstraction$1$$anonfun$apply$11.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$existentialAbstraction$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$existentialsInType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$explainTypes$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$explainTypes$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$importableMembers$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$inheritsJavaVarArgsMethod$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$instantiatedBounds$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isConsistent$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isConsistent$1$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isConsistent$1$3.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isConsistent$1$4.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isDummyAppliedType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isJavaVarargsAncestor$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isSameTypes$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isSubArgs$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$isSubArgs$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$loop$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$loop$1$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$matchesType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$mergePrefixAndArgs$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$mergePrefixAndArgs$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$mergePrefixAndArgs$3.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$nestedMemberType$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$nonTrivialMembers$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$rebind$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$rebind$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$scala$reflect$internal$Types$$embeddedSymbol$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$specializedBy$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$specializesSym$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$specializesSym$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$specializesSym$3.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$suspendingTypeVars$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$suspendingTypeVars$2.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$symTypeDepth$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$typeParamsToExistentials$1.class +INFO: Loading Class: scala/reflect/internal/Types$$anonfun$typeVarsInType$1.class +INFO: Loading Class: scala/reflect/internal/Types$AbstractArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$AbstractNoArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$AbstractTypeRef$class.class +INFO: Loading Class: scala/reflect/internal/Types$AbstractTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$AliasArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$AliasNoArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$AliasTypeRef$$anonfun$coevolveSym$1.class +INFO: Loading Class: scala/reflect/internal/Types$AliasTypeRef$class.class +INFO: Loading Class: scala/reflect/internal/Types$AliasTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$AnnotatedType$$anonfun$27.class +INFO: Loading Class: scala/reflect/internal/Types$AnnotatedType$$anonfun$isTrivial$1.class +INFO: Loading Class: scala/reflect/internal/Types$AnnotatedType$.class +INFO: Loading Class: scala/reflect/internal/Types$AnnotatedType.class +INFO: Loading Class: scala/reflect/internal/Types$AntiPolyType$.class +INFO: Loading Class: scala/reflect/internal/Types$AntiPolyType.class +INFO: Loading Class: scala/reflect/internal/Types$AppliedTypeVar$$anonfun$params$2.class +INFO: Loading Class: scala/reflect/internal/Types$AppliedTypeVar$$anonfun$safeToString$3.class +INFO: Loading Class: scala/reflect/internal/Types$AppliedTypeVar$$anonfun$typeArgs$2.class +INFO: Loading Class: scala/reflect/internal/Types$AppliedTypeVar.class +INFO: Loading Class: scala/reflect/internal/Types$ArgsTypeRef$$anonfun$transform$1.class +INFO: Loading Class: scala/reflect/internal/Types$ArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$ArrayTypeRef$.class +INFO: Loading Class: scala/reflect/internal/Types$BoundedWildcardType$.class +INFO: Loading Class: scala/reflect/internal/Types$BoundedWildcardType.class +INFO: Loading Class: scala/reflect/internal/Types$ClassArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$computeRefs$1$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$computeRefs$1.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$scala$reflect$internal$Types$ClassInfoType$$propagate$1.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$scala$reflect$internal$Types$ClassInfoType$$propagate$2$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$scala$reflect$internal$Types$ClassInfoType$$propagate$2.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$scala$reflect$internal$Types$ClassInfoType$$propagate$3.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$scala$reflect$internal$Types$ClassInfoType$$propagate$4$$anonfun$apply$6.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$$anonfun$scala$reflect$internal$Types$ClassInfoType$$propagate$4.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$enterRefs$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$enterRefs$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType$enterRefs$.class +INFO: Loading Class: scala/reflect/internal/Types$ClassInfoType.class +INFO: Loading Class: scala/reflect/internal/Types$ClassNoArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$ClassTypeRef$class.class +INFO: Loading Class: scala/reflect/internal/Types$ClassTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$ClassUnwrapper.class +INFO: Loading Class: scala/reflect/internal/Types$CompoundType$.class +INFO: Loading Class: scala/reflect/internal/Types$CompoundType.class +INFO: Loading Class: scala/reflect/internal/Types$ConstantType$.class +INFO: Loading Class: scala/reflect/internal/Types$ConstantType.class +INFO: Loading Class: scala/reflect/internal/Types$ErasedValueType$.class +INFO: Loading Class: scala/reflect/internal/Types$ErasedValueType.class +INFO: Loading Class: scala/reflect/internal/Types$ErrorType$.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$21.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$22.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$23.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$baseTypeSeq$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$cloneInfo$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$isRepresentableWithWildcards$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$isRepresentableWithWildcards$2.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$isStraightApplication$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$paramTypes$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$params$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$parents$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$scala$reflect$internal$Types$ExistentialType$$isQuantified$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$scala$reflect$internal$Types$ExistentialType$$isQuantified$1$2.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$scala$reflect$internal$Types$ExistentialType$$quantifierOwner$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$skolemizeExistential$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$skolemizeExistential$2.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$typeArgs$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$wildcardArgsString$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$withTypeVars$1.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$$anonfun$withTypeVars$2.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType$.class +INFO: Loading Class: scala/reflect/internal/Types$ExistentialType.class +INFO: Loading Class: scala/reflect/internal/Types$FlagAgnosticCompleter.class +INFO: Loading Class: scala/reflect/internal/Types$FlagAssigningCompleter.class +INFO: Loading Class: scala/reflect/internal/Types$GenPolyType$$anonfun$apply$10.class +INFO: Loading Class: scala/reflect/internal/Types$GenPolyType$.class +INFO: Loading Class: scala/reflect/internal/Types$HKTypeVar.class +INFO: Loading Class: scala/reflect/internal/Types$HasTypeMember$.class +INFO: Loading Class: scala/reflect/internal/Types$ImportType$.class +INFO: Loading Class: scala/reflect/internal/Types$ImportType.class +INFO: Loading Class: scala/reflect/internal/Types$JavaMethodType.class +INFO: Loading Class: scala/reflect/internal/Types$LazyPolyType.class +INFO: Loading Class: scala/reflect/internal/Types$LazyType.class +INFO: Loading Class: scala/reflect/internal/Types$MalformedType.class +INFO: Loading Class: scala/reflect/internal/Types$MethodType$.class +INFO: Loading Class: scala/reflect/internal/Types$MethodType.class +INFO: Loading Class: scala/reflect/internal/Types$MissingAliasControl.class +INFO: Loading Class: scala/reflect/internal/Types$MissingTypeControl.class +INFO: Loading Class: scala/reflect/internal/Types$ModuleTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$NamedType$.class +INFO: Loading Class: scala/reflect/internal/Types$NamedType.class +INFO: Loading Class: scala/reflect/internal/Types$NoArgsTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$NoCommonType.class +INFO: Loading Class: scala/reflect/internal/Types$NoPrefix$.class +INFO: Loading Class: scala/reflect/internal/Types$NoType$.class +INFO: Loading Class: scala/reflect/internal/Types$NonClassTypeRef$class.class +INFO: Loading Class: scala/reflect/internal/Types$NonClassTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$NullaryMethodType$.class +INFO: Loading Class: scala/reflect/internal/Types$NullaryMethodType.class +INFO: Loading Class: scala/reflect/internal/Types$OverloadedType$$anonfun$safeToString$2.class +INFO: Loading Class: scala/reflect/internal/Types$OverloadedType$.class +INFO: Loading Class: scala/reflect/internal/Types$OverloadedType.class +INFO: Loading Class: scala/reflect/internal/Types$PackageClassInfoType.class +INFO: Loading Class: scala/reflect/internal/Types$PackageTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$PolyType$.class +INFO: Loading Class: scala/reflect/internal/Types$PolyType.class +INFO: Loading Class: scala/reflect/internal/Types$RecoverableCyclicReference$.class +INFO: Loading Class: scala/reflect/internal/Types$RecoverableCyclicReference.class +INFO: Loading Class: scala/reflect/internal/Types$RefinedType$$anonfun$etaExpand$1.class +INFO: Loading Class: scala/reflect/internal/Types$RefinedType$$anonfun$scala$reflect$internal$Types$RefinedType$$flatten$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$RefinedType$$anonfun$typeConstructor$1.class +INFO: Loading Class: scala/reflect/internal/Types$RefinedType$.class +INFO: Loading Class: scala/reflect/internal/Types$RefinedType.class +INFO: Loading Class: scala/reflect/internal/Types$RefinedType0.class +INFO: Loading Class: scala/reflect/internal/Types$RefinementTypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$RepeatedType$.class +INFO: Loading Class: scala/reflect/internal/Types$RepeatedType.class +INFO: Loading Class: scala/reflect/internal/Types$RewrappingTypeProxy$class.class +INFO: Loading Class: scala/reflect/internal/Types$RewrappingTypeProxy.class +INFO: Loading Class: scala/reflect/internal/Types$SimpleTypeProxy$class.class +INFO: Loading Class: scala/reflect/internal/Types$SimpleTypeProxy.class +INFO: Loading Class: scala/reflect/internal/Types$SingleType$.class +INFO: Loading Class: scala/reflect/internal/Types$SingleType.class +INFO: Loading Class: scala/reflect/internal/Types$SingletonType.class +INFO: Loading Class: scala/reflect/internal/Types$StaticallyAnnotatedType$.class +INFO: Loading Class: scala/reflect/internal/Types$SubType.class +INFO: Loading Class: scala/reflect/internal/Types$SuperType$.class +INFO: Loading Class: scala/reflect/internal/Types$SuperType.class +INFO: Loading Class: scala/reflect/internal/Types$ThisType$.class +INFO: Loading Class: scala/reflect/internal/Types$ThisType.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anon$5.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$$eq$colon$eq$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$$less$colon$less$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$asSeenFrom$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$dummyArgs$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$findMember$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$findMembers$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$matchesPattern$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$nonPrivateDecls$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$$anonfun$skolemsExceptMethodTypeParams$1.class +INFO: Loading Class: scala/reflect/internal/Types$Type$FilterMapForeach.class +INFO: Loading Class: scala/reflect/internal/Types$Type.class +INFO: Loading Class: scala/reflect/internal/Types$TypeApiImpl$$anonfun$erasure$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeApiImpl.class +INFO: Loading Class: scala/reflect/internal/Types$TypeBounds$$anonfun$safeToString$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeBounds$.class +INFO: Loading Class: scala/reflect/internal/Types$TypeBounds.class +INFO: Loading Class: scala/reflect/internal/Types$TypeError.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$baseTypeSeqImpl$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$baseTypeSeqImpl$2.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$customToString$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$etaExpand$2.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$isGround$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$needsPreString$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$refinementDecls$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$$anonfun$refinementString$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef$.class +INFO: Loading Class: scala/reflect/internal/Types$TypeRef.class +INFO: Loading Class: scala/reflect/internal/Types$TypeUnwrapper.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anon$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anon$2.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anon$3.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anon$4.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$containsSkolemAboveLevel$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$etaExpand$3.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$etaExpand$4.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$originLocation$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$originLocation$2.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$registerBound$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$registerBound$2.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$registerBound$3.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$scala$reflect$internal$Types$TypeVar$$tparamsOfSym$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$scala$reflect$internal$Types$TypeVar$$unifyFull$1$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$$anonfun$setInst$1.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar$.class +INFO: Loading Class: scala/reflect/internal/Types$TypeVar.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueConstantType.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueErasedValueType.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueSingleType.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueSuperType.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueThisType.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueType.class +INFO: Loading Class: scala/reflect/internal/Types$UniqueTypeBounds.class +INFO: Loading Class: scala/reflect/internal/Types$UnmappableTree$.class +INFO: Loading Class: scala/reflect/internal/Types$UntouchableTypeVar$class.class +INFO: Loading Class: scala/reflect/internal/Types$UntouchableTypeVar.class +INFO: Loading Class: scala/reflect/internal/Types$WildcardType$.class +INFO: Loading Class: scala/reflect/internal/Types$baseClassesCycleMonitor$.class +INFO: Loading Class: scala/reflect/internal/Types$class.class +INFO: Loading Class: scala/reflect/internal/Types$substTypeMapCache$.class +INFO: Loading Class: scala/reflect/internal/Types$unwrapToClass$.class +INFO: Loading Class: scala/reflect/internal/Types$unwrapToStableClass$.class +INFO: Loading Class: scala/reflect/internal/Types$unwrapWrapperTypes$.class +INFO: Loading Class: scala/reflect/internal/Types.class +INFO: Loading Class: scala/reflect/internal/TypesStats$.class +INFO: Loading Class: scala/reflect/internal/TypesStats.class +INFO: Loading Class: scala/reflect/internal/Variance$$anonfun$fold$1.class +INFO: Loading Class: scala/reflect/internal/Variance$.class +INFO: Loading Class: scala/reflect/internal/Variance$SbtCompat.class +INFO: Loading Class: scala/reflect/internal/Variance.class +INFO: Loading Class: scala/reflect/internal/Variances$$anonfun$inArgs$1$1.class +INFO: Loading Class: scala/reflect/internal/Variances$$anonfun$inSyms$1$1.class +INFO: Loading Class: scala/reflect/internal/Variances$$anonfun$inType$1$1.class +INFO: Loading Class: scala/reflect/internal/Variances$$anonfun$inTypes$1$1.class +INFO: Loading Class: scala/reflect/internal/Variances$$anonfun$varianceInTypes$1.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator$$anonfun$traverse$1.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator$ValidateVarianceMap$$anonfun$checkVarianceOfSymbol$1.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator$ValidateVarianceMap$$anonfun$isUncheckedVariance$1.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator$ValidateVarianceMap$$anonfun$mapOver$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator$ValidateVarianceMap$$anonfun$mapOver$1.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator$ValidateVarianceMap$.class +INFO: Loading Class: scala/reflect/internal/Variances$VarianceValidator.class +INFO: Loading Class: scala/reflect/internal/Variances$class.class +INFO: Loading Class: scala/reflect/internal/Variances.class +INFO: Loading Class: scala/reflect/internal/annotations/package$.class +INFO: Loading Class: scala/reflect/internal/annotations/package.class +INFO: Loading Class: scala/reflect/internal/annotations/uncheckedBounds.class +INFO: Loading Class: scala/reflect/internal/pickling/ByteCodecs$.class +INFO: Loading Class: scala/reflect/internal/pickling/ByteCodecs.class +INFO: Loading Class: scala/reflect/internal/pickling/PickleBuffer.class +INFO: Loading Class: scala/reflect/internal/pickling/PickleFormat$.class +INFO: Loading Class: scala/reflect/internal/pickling/PickleFormat.class +INFO: Loading Class: scala/reflect/internal/pickling/Translations$class.class +INFO: Loading Class: scala/reflect/internal/pickling/Translations.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$fixApply$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$maybeReadSymbol$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readAnnotArg$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readAnnotationRef$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readAnnots$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readClassfileAnnotArg$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readClassfileAnnotArg$2.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readClassfileAnnotArg$3.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readConstantRef$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readExtSymbol$1$1$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readExtSymbol$1$1$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readExtSymbol$1$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readExtSymbol$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readModifiersRef$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readNameRef$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readSymbolAnnotation$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readSymbols$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$10.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$11.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$12.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$13.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$14.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$15.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$16.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$17.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$18.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$19.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$2.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$3.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$4.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$5.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$6.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$7.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$8.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$9$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1$9.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTree$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTreeRef$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTypeRef$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$readTypes$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$scala$reflect$internal$pickling$UnPickler$Scan$$readArrayAnnot$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$selectorsRef$1$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$$anonfun$symScope$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRef$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRef$$anonfun$completeInternal$1.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRef.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRefAndAlias$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRefAndAlias$$anonfun$completeInternal$2$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRefAndAlias$$anonfun$completeInternal$2.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan$LazyTypeRefAndAlias.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler$Scan.class +INFO: Loading Class: scala/reflect/internal/pickling/UnPickler.class +INFO: Loading Class: scala/reflect/internal/settings/AbsSettings$AbsSettingValue.class +INFO: Loading Class: scala/reflect/internal/settings/AbsSettings$class.class +INFO: Loading Class: scala/reflect/internal/settings/AbsSettings.class +INFO: Loading Class: scala/reflect/internal/settings/MutableSettings$.class +INFO: Loading Class: scala/reflect/internal/settings/MutableSettings$SettingValue$class.class +INFO: Loading Class: scala/reflect/internal/settings/MutableSettings$SettingValue.class +INFO: Loading Class: scala/reflect/internal/settings/MutableSettings.class +INFO: Loading Class: scala/reflect/internal/tpe/CommonOwners$CommonOwnerMap.class +INFO: Loading Class: scala/reflect/internal/tpe/CommonOwners$class.class +INFO: Loading Class: scala/reflect/internal/tpe/CommonOwners.class +INFO: Loading Class: scala/reflect/internal/tpe/FindMembers$FindMember.class +INFO: Loading Class: scala/reflect/internal/tpe/FindMembers$FindMemberBase.class +INFO: Loading Class: scala/reflect/internal/tpe/FindMembers$FindMembers.class +INFO: Loading Class: scala/reflect/internal/tpe/FindMembers$class.class +INFO: Loading Class: scala/reflect/internal/tpe/FindMembers.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$10.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$11.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$12$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$12.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$13.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$14.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$15.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$16.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$17.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$18.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$20.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$21.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$22.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$23$$anonfun$apply$6.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$23.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$24.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$25.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$26$$anonfun$apply$7.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$26.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$27.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$29.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$30.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$31.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$32$$anonfun$apply$8.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$32$$anonfun$apply$9.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$32.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$33.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$34.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$35.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$36.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$37.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$38$$anonfun$apply$10.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$38.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$4$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$9.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$elimHigherOrderTypeParam$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$elimSub0$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$elimSuper$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$excludeFromLub$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$fbounds$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$findRecursiveBounds$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$findRecursiveBounds$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$findRecursiveBounds$3$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$findRecursiveBounds$3$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$findRecursiveBounds$3.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$getBounds$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$glb0$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$glb0$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$glb1$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$glbsym$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$glbsym$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$isHotForTs$1$1$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$isHotForTs$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$isRecursive$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$loop$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lub$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lub0$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lub0$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lub0$1$3.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lubBounds$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lubBounds$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lubsym$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$lubsym$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$matchingBounds$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$matchingInstTypes$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$matchingRestypes$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$minSym$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$numericLub$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$refinedToParents$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$refines$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$sameWeakLubAsLub$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$spanningTypes$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$weakLub$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$weakLub$2.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$willViolateRecursiveBounds$1$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$$anonfun$willViolateRecursiveBounds$1.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs$class.class +INFO: Loading Class: scala/reflect/internal/tpe/GlbLubs.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$equalTypeParamsAndResult$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$fourthTry$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$isDifferentType$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$isPolySubType$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$isSub$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$isSub$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$thirdTry$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$thirdTry$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$$anonfun$thirdTry$1$3.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$SubTypePair$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$SubTypePair.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers$class.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeComparers.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$logBounds$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solve$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solve$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$3$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$3.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$4.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$5$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$5.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$$anonfun$solveOne$1$6.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$TypeConstraint$$anonfun$isWithinBounds$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$TypeConstraint$$anonfun$isWithinBounds$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$TypeConstraint$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$TypeConstraint.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$UndoLog$$anonfun$clear$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$UndoLog.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$UndoPair$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$UndoPair.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints$class.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeConstraints.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$$anon$1$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$$anon$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AnnotationFilter$class.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AnnotationFilter.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ApproximateDependentMap$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$8.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$9.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$captureSkolems$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$captureSkolems$2$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$captureSkolems$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$captureThis$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$correspondingTypeArgument$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$$anonfun$scala$reflect$internal$tpe$TypeMaps$AsSeenFromMap$$explain$1$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap$annotationArgRewriter$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$AsSeenFromMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$CollectTypeCollector.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ContainsCollector$$anonfun$mapOver$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ContainsCollector.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ErroneousCollector$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ExistentialExtrapolation$$anonfun$7.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ExistentialExtrapolation$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ExistentialExtrapolation$$anonfun$scala$reflect$internal$tpe$TypeMaps$ExistentialExtrapolation$$countOccs$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ExistentialExtrapolation.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$FilterTypeCollector.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$FindTypeCollector.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$ForEachTypeTraverser.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$InstantiateDependentMap$$anonfun$existentialsNeeded$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$InstantiateDependentMap$StabilizedArgTp$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$InstantiateDependentMap$StableArgTp$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$InstantiateDependentMap$UnstableArgTp$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$InstantiateDependentMap$treeTrans$2$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$InstantiateDependentMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$IsDependentCollector$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$KeepOnlyTypeConstraints$class.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$KeepOnlyTypeConstraints.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstMap$$anonfun$11.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstMap$$anonfun$renameBoundSyms$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstMap$$anonfun$renameBoundSyms$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstMap$$anonfun$renameBoundSyms$3.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstSymMap$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstSymMap$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstSymMap$mapTreeSymbols$$anonfun$transform$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstSymMap$mapTreeSymbols$$anonfun$transform$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstSymMap$mapTreeSymbols$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstSymMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstThisMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstTypeMap$trans$2$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstTypeMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$SubstWildcardMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeCollector.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$6.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$applyToSymbolInfo$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$mapOver$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$mapOverAnnotations$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$mapOverArgs$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$$anonfun$mapOverArgs$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap$TypeMapTransformer.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeMap.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeTraverser.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$TypeTraverserWithResult.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$abstractTypesToBounds$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$12$$anonfun$apply$7.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$12.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$13.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$2$$anonfun$apply$6.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$2.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$3.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$5.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$6.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$7$$anonfun$apply$8.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$adaptToNewRun$7.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$$anonfun$apply$9.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$adaptToNewRunMap$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$class.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$dropIllegalStarTypes$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$dropSingletonType$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$dropSingletonType$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$normalizeAliases$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$normalizeAliases$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$typeVarToOriginMap$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps$wildcardToTypeVarMap$.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeMaps.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeToStrings$$anonfun$typeToString$1.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeToStrings$class.class +INFO: Loading Class: scala/reflect/internal/tpe/TypeToStrings.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$intersectionDominator$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$intersectionDominator$2.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$intersectionDominator$3.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$isUnshadowed$1$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$specialConstructorErasure$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$transformInfo$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$unboundedGenericArrayLevel$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$$anonfun$unboundedGenericArrayLevel$2.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$ErasureMap$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$ErasureMap.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$GenericArray$.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$JavaErasureMap.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$ScalaErasureMap.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$boxingErasure$.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$class.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$javaErasure$.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$scalaErasure$.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$specialScalaErasure$.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$verifiedJavaErasure$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure$verifiedJavaErasure$.class +INFO: Loading Class: scala/reflect/internal/transform/Erasure.class +INFO: Loading Class: scala/reflect/internal/transform/PostErasure$class.class +INFO: Loading Class: scala/reflect/internal/transform/PostErasure$elimErasedValueType$.class +INFO: Loading Class: scala/reflect/internal/transform/PostErasure.class +INFO: Loading Class: scala/reflect/internal/transform/RefChecks$class.class +INFO: Loading Class: scala/reflect/internal/transform/RefChecks.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$1$$anon$4.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$2$$anon$3.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$3$$anon$2.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$4$$anon$1.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$Lazy.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms$class.class +INFO: Loading Class: scala/reflect/internal/transform/Transforms.class +INFO: Loading Class: scala/reflect/internal/transform/UnCurry$$anon$1.class +INFO: Loading Class: scala/reflect/internal/transform/UnCurry$$anon$2$$anon$3.class +INFO: Loading Class: scala/reflect/internal/transform/UnCurry$$anon$2.class +INFO: Loading Class: scala/reflect/internal/transform/UnCurry$class.class +INFO: Loading Class: scala/reflect/internal/transform/UnCurry.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anon$1$$anon$2.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anon$1.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anonfun$findAbstractDir$1.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anonfun$findAbstractFile$1.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anonfun$getPackage$1.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anonfun$getPackages$1.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader$$anonfun$getPackages$2.class +INFO: Loading Class: scala/reflect/internal/util/AbstractFileClassLoader.class +INFO: Loading Class: scala/reflect/internal/util/BatchSourceFile$$anonfun$identifier$1.class +INFO: Loading Class: scala/reflect/internal/util/BatchSourceFile$$anonfun$isAtEndOfLine$1.class +INFO: Loading Class: scala/reflect/internal/util/BatchSourceFile$$anonfun$isEndOfLine$1.class +INFO: Loading Class: scala/reflect/internal/util/BatchSourceFile$$anonfun$isLineBreak$1.class +INFO: Loading Class: scala/reflect/internal/util/BatchSourceFile.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$distinctBy$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$flatCollect$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$flatCollect$2.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mapFrom$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mexists$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mfind$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mforall$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mforeach$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mforeach$2.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$mmap$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$sequence$1.class +INFO: Loading Class: scala/reflect/internal/util/Collections$$anonfun$sequence$2.class +INFO: Loading Class: scala/reflect/internal/util/Collections$.class +INFO: Loading Class: scala/reflect/internal/util/Collections$class.class +INFO: Loading Class: scala/reflect/internal/util/Collections.class +INFO: Loading Class: scala/reflect/internal/util/DefinedPosition.class +INFO: Loading Class: scala/reflect/internal/util/DeprecatedPosition$class.class +INFO: Loading Class: scala/reflect/internal/util/DeprecatedPosition.class +INFO: Loading Class: scala/reflect/internal/util/FakePos$.class +INFO: Loading Class: scala/reflect/internal/util/FakePos.class +INFO: Loading Class: scala/reflect/internal/util/FreshNameCreator$.class +INFO: Loading Class: scala/reflect/internal/util/FreshNameCreator.class +INFO: Loading Class: scala/reflect/internal/util/HasClassPath.class +INFO: Loading Class: scala/reflect/internal/util/HashSet$$anon$1.class +INFO: Loading Class: scala/reflect/internal/util/HashSet$$anonfun$addEntries$1.class +INFO: Loading Class: scala/reflect/internal/util/HashSet$.class +INFO: Loading Class: scala/reflect/internal/util/HashSet.class +INFO: Loading Class: scala/reflect/internal/util/InternalPositionImpl$$anonfun$$bar$1.class +INFO: Loading Class: scala/reflect/internal/util/InternalPositionImpl$$anonfun$escaped$1$1.class +INFO: Loading Class: scala/reflect/internal/util/InternalPositionImpl$$anonfun$escaped$1$2.class +INFO: Loading Class: scala/reflect/internal/util/InternalPositionImpl$class.class +INFO: Loading Class: scala/reflect/internal/util/InternalPositionImpl.class +INFO: Loading Class: scala/reflect/internal/util/NoFile$.class +INFO: Loading Class: scala/reflect/internal/util/NoFile.class +INFO: Loading Class: scala/reflect/internal/util/NoPosition$.class +INFO: Loading Class: scala/reflect/internal/util/NoPosition.class +INFO: Loading Class: scala/reflect/internal/util/NoSourceFile$.class +INFO: Loading Class: scala/reflect/internal/util/NoSourceFile.class +INFO: Loading Class: scala/reflect/internal/util/OffsetPosition.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$lookup$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$readStack$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$readStack$2.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$show$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$$anonfun$total$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$.class +INFO: Loading Class: scala/reflect/internal/util/Origins$MultiLine$$anonfun$repString$1.class +INFO: Loading Class: scala/reflect/internal/util/Origins$MultiLine.class +INFO: Loading Class: scala/reflect/internal/util/Origins$OneLine.class +INFO: Loading Class: scala/reflect/internal/util/Origins$OriginId$.class +INFO: Loading Class: scala/reflect/internal/util/Origins$OriginId.class +INFO: Loading Class: scala/reflect/internal/util/Origins.class +INFO: Loading Class: scala/reflect/internal/util/Position$.class +INFO: Loading Class: scala/reflect/internal/util/Position.class +INFO: Loading Class: scala/reflect/internal/util/RangePosition.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$$anon$1.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$$anonfun$classBytes$1.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$$anonfun$run$1.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$$anonfun$tryClass$1.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$URLClassLoader.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader$class.class +INFO: Loading Class: scala/reflect/internal/util/ScalaClassLoader.class +INFO: Loading Class: scala/reflect/internal/util/ScriptSourceFile$$anonfun$headerLength$1.class +INFO: Loading Class: scala/reflect/internal/util/ScriptSourceFile$.class +INFO: Loading Class: scala/reflect/internal/util/ScriptSourceFile.class +INFO: Loading Class: scala/reflect/internal/util/Set.class +INFO: Loading Class: scala/reflect/internal/util/SourceFile.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$$anonfun$allQuantities$1.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$$anonfun$allQuantities$2.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$$anonfun$allQuantities$3$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$$anonfun$allQuantities$3$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$$anonfun$allQuantities$3.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$Counter.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$QuantMap$$anonfun$toString$2.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$QuantMap$$anonfun$toString$3.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$QuantMap.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$Quantity$class.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$Quantity.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$RelCounter.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$StackableTimer.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$SubCounter.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$SubQuantity$class.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$SubQuantity.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$SubTimer.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$Timer.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$TimerStack.class +INFO: Loading Class: scala/reflect/internal/util/Statistics$View.class +INFO: Loading Class: scala/reflect/internal/util/Statistics.class +INFO: Loading Class: scala/reflect/internal/util/StringOps$$anonfun$lcp$1$1.class +INFO: Loading Class: scala/reflect/internal/util/StringOps$$anonfun$lcp$1$2.class +INFO: Loading Class: scala/reflect/internal/util/StringOps$$anonfun$oempty$1.class +INFO: Loading Class: scala/reflect/internal/util/StringOps$$anonfun$trimAllTrailingSpace$1.class +INFO: Loading Class: scala/reflect/internal/util/StringOps$.class +INFO: Loading Class: scala/reflect/internal/util/StringOps$class.class +INFO: Loading Class: scala/reflect/internal/util/StringOps.class +INFO: Loading Class: scala/reflect/internal/util/StripMarginInterpolator$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/util/StripMarginInterpolator$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/util/StripMarginInterpolator$class.class +INFO: Loading Class: scala/reflect/internal/util/StripMarginInterpolator.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$$anonfun$$tilde$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$$anonfun$colApply$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$$anonfun$colFunctions$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$$anonfun$colNames$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$$anonfun$sepWidths$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Column$$anonfun$maxWidth$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Column$.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Column.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$maxColWidth$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$mkFormatString$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$specs$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table$$anonfun$toFormattedSeq$1.class +INFO: Loading Class: scala/reflect/internal/util/TableDef$Table.class +INFO: Loading Class: scala/reflect/internal/util/TableDef.class +INFO: Loading Class: scala/reflect/internal/util/ThreeValues$.class +INFO: Loading Class: scala/reflect/internal/util/ThreeValues.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$2.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$4.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$recordNewSymbolOwner$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$scala$reflect$internal$util$TraceSymbolActivity$$dashes$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$scala$reflect$internal$util$TraceSymbolActivity$$freq$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$2.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$3.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$4.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$5.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$6$$anonfun$3.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$6.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$7$$anonfun$5.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$7$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showAllSymbols$7.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showHeader$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showMapFreq$1.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$$anonfun$showMapFreq$2.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity$class.class +INFO: Loading Class: scala/reflect/internal/util/TraceSymbolActivity.class +INFO: Loading Class: scala/reflect/internal/util/TransparentPosition.class +INFO: Loading Class: scala/reflect/internal/util/TriState$.class +INFO: Loading Class: scala/reflect/internal/util/TriState.class +INFO: Loading Class: scala/reflect/internal/util/UndefinedPosition.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$$anon$1.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Diagnostics$$anonfun$collisionBucketsCount$1.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Diagnostics$$anonfun$fullBucketsCount$1.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Diagnostics$$anonfun$fullyValidate$1.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Diagnostics$$anonfun$fullyValidate$2.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Diagnostics$$anonfun$fullyValidate$3.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Diagnostics.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet$Entry.class +INFO: Loading Class: scala/reflect/internal/util/WeakHashSet.class +INFO: Loading Class: scala/reflect/internal/util/package$$anonfun$isAnon$1$1.class +INFO: Loading Class: scala/reflect/internal/util/package$$anonfun$shortClass$1.class +INFO: Loading Class: scala/reflect/internal/util/package$$anonfun$shortClass$2.class +INFO: Loading Class: scala/reflect/internal/util/package$.class +INFO: Loading Class: scala/reflect/internal/util/package$StringContextStripMarginOps.class +INFO: Loading Class: scala/reflect/internal/util/package.class +INFO: Loading Class: scala/reflect/io/AbstractFile$$anonfun$lookup$1.class +INFO: Loading Class: scala/reflect/io/AbstractFile$$anonfun$lookup$2.class +INFO: Loading Class: scala/reflect/io/AbstractFile$$anonfun$lookupPathUnchecked$1.class +INFO: Loading Class: scala/reflect/io/AbstractFile$.class +INFO: Loading Class: scala/reflect/io/AbstractFile.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$deepList$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$deepList$1.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$deepList$2$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$deepList$2.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$dirs$1.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$files$1.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$list$1.class +INFO: Loading Class: scala/reflect/io/Directory$$anonfun$walkFilter$1.class +INFO: Loading Class: scala/reflect/io/Directory$.class +INFO: Loading Class: scala/reflect/io/Directory.class +INFO: Loading Class: scala/reflect/io/File$$anonfun$appendAll$1.class +INFO: Loading Class: scala/reflect/io/File$$anonfun$printlnAll$1.class +INFO: Loading Class: scala/reflect/io/File$$anonfun$writeAll$1.class +INFO: Loading Class: scala/reflect/io/File$.class +INFO: Loading Class: scala/reflect/io/File.class +INFO: Loading Class: scala/reflect/io/FileOperationException$.class +INFO: Loading Class: scala/reflect/io/FileOperationException.class +INFO: Loading Class: scala/reflect/io/FileZipArchive$FileEntry$1.class +INFO: Loading Class: scala/reflect/io/FileZipArchive.class +INFO: Loading Class: scala/reflect/io/IOStats$.class +INFO: Loading Class: scala/reflect/io/IOStats.class +INFO: Loading Class: scala/reflect/io/ManifestResources$$anon$1.class +INFO: Loading Class: scala/reflect/io/ManifestResources$$anonfun$2.class +INFO: Loading Class: scala/reflect/io/ManifestResources$$anonfun$3.class +INFO: Loading Class: scala/reflect/io/ManifestResources$FileEntry$3.class +INFO: Loading Class: scala/reflect/io/ManifestResources.class +INFO: Loading Class: scala/reflect/io/NoAbstractFile$.class +INFO: Loading Class: scala/reflect/io/NoAbstractFile.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$hasExtension$1.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$onlyDirs$1.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$onlyDirs$2.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$onlyDirs$3.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$onlyDirs$4.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$onlyFiles$1.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$onlyFiles$2.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$roots$1.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$scala$reflect$io$Path$$deleteRecursively$1.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$segments$1.class +INFO: Loading Class: scala/reflect/io/Path$$anonfun$walk$1.class +INFO: Loading Class: scala/reflect/io/Path$.class +INFO: Loading Class: scala/reflect/io/Path.class +INFO: Loading Class: scala/reflect/io/PlainDirectory$$anonfun$iterator$1.class +INFO: Loading Class: scala/reflect/io/PlainDirectory$$anonfun$iterator$2.class +INFO: Loading Class: scala/reflect/io/PlainDirectory.class +INFO: Loading Class: scala/reflect/io/PlainFile$$anonfun$iterator$3.class +INFO: Loading Class: scala/reflect/io/PlainFile$$anonfun$iterator$4.class +INFO: Loading Class: scala/reflect/io/PlainFile.class +INFO: Loading Class: scala/reflect/io/Streamable$$anon$1.class +INFO: Loading Class: scala/reflect/io/Streamable$$anon$2.class +INFO: Loading Class: scala/reflect/io/Streamable$$anonfun$slurp$1.class +INFO: Loading Class: scala/reflect/io/Streamable$.class +INFO: Loading Class: scala/reflect/io/Streamable$Bytes$$anonfun$bytes$1.class +INFO: Loading Class: scala/reflect/io/Streamable$Bytes$$anonfun$bytesAsInts$1.class +INFO: Loading Class: scala/reflect/io/Streamable$Bytes$$anonfun$bytesAsInts$2.class +INFO: Loading Class: scala/reflect/io/Streamable$Bytes$class.class +INFO: Loading Class: scala/reflect/io/Streamable$Bytes.class +INFO: Loading Class: scala/reflect/io/Streamable$Chars$class.class +INFO: Loading Class: scala/reflect/io/Streamable$Chars.class +INFO: Loading Class: scala/reflect/io/Streamable.class +INFO: Loading Class: scala/reflect/io/URLZipArchive$$anonfun$1.class +INFO: Loading Class: scala/reflect/io/URLZipArchive$EmptyFileEntry$1.class +INFO: Loading Class: scala/reflect/io/URLZipArchive$FileEntry$2.class +INFO: Loading Class: scala/reflect/io/URLZipArchive.class +INFO: Loading Class: scala/reflect/io/VirtualDirectory$$anonfun$lookupName$1.class +INFO: Loading Class: scala/reflect/io/VirtualDirectory.class +INFO: Loading Class: scala/reflect/io/VirtualFile$$anon$1.class +INFO: Loading Class: scala/reflect/io/VirtualFile.class +INFO: Loading Class: scala/reflect/io/ZipArchive$$anonfun$scala$reflect$io$ZipArchive$$walkIterator$1.class +INFO: Loading Class: scala/reflect/io/ZipArchive$.class +INFO: Loading Class: scala/reflect/io/ZipArchive$DirEntry.class +INFO: Loading Class: scala/reflect/io/ZipArchive$Entry.class +INFO: Loading Class: scala/reflect/io/ZipArchive.class +INFO: Loading Class: scala/reflect/macros/Aliases$class.class +INFO: Loading Class: scala/reflect/macros/Aliases.class +INFO: Loading Class: scala/reflect/macros/Attachments$$anonfun$1.class +INFO: Loading Class: scala/reflect/macros/Attachments$$anonfun$contains$1.class +INFO: Loading Class: scala/reflect/macros/Attachments$$anonfun$get$1.class +INFO: Loading Class: scala/reflect/macros/Attachments.class +INFO: Loading Class: scala/reflect/macros/Enclosures$EnclosureException$.class +INFO: Loading Class: scala/reflect/macros/Enclosures$EnclosureException.class +INFO: Loading Class: scala/reflect/macros/Enclosures$class.class +INFO: Loading Class: scala/reflect/macros/Enclosures.class +INFO: Loading Class: scala/reflect/macros/Evals.class +INFO: Loading Class: scala/reflect/macros/ExprUtils.class +INFO: Loading Class: scala/reflect/macros/FrontEnds.class +INFO: Loading Class: scala/reflect/macros/Infrastructure.class +INFO: Loading Class: scala/reflect/macros/Internals$ContextInternalApi$TransformApi.class +INFO: Loading Class: scala/reflect/macros/Internals$ContextInternalApi$TypingTransformApi.class +INFO: Loading Class: scala/reflect/macros/Internals$ContextInternalApi$class.class +INFO: Loading Class: scala/reflect/macros/Internals$ContextInternalApi.class +INFO: Loading Class: scala/reflect/macros/Internals$class.class +INFO: Loading Class: scala/reflect/macros/Internals.class +INFO: Loading Class: scala/reflect/macros/Names.class +INFO: Loading Class: scala/reflect/macros/NonemptyAttachments.class +INFO: Loading Class: scala/reflect/macros/ParseException$.class +INFO: Loading Class: scala/reflect/macros/ParseException.class +INFO: Loading Class: scala/reflect/macros/Parsers.class +INFO: Loading Class: scala/reflect/macros/ReificationException$.class +INFO: Loading Class: scala/reflect/macros/ReificationException.class +INFO: Loading Class: scala/reflect/macros/Reifiers$class.class +INFO: Loading Class: scala/reflect/macros/Reifiers.class +INFO: Loading Class: scala/reflect/macros/TypecheckException$.class +INFO: Loading Class: scala/reflect/macros/TypecheckException.class +INFO: Loading Class: scala/reflect/macros/Typers$class.class +INFO: Loading Class: scala/reflect/macros/Typers.class +INFO: Loading Class: scala/reflect/macros/UnexpectedReificationException$.class +INFO: Loading Class: scala/reflect/macros/UnexpectedReificationException.class +INFO: Loading Class: scala/reflect/macros/Universe$CompilationUnitContextApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroCompatApi$CompatibleTypeTree.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroCompatApi$MacroCompatibleSymbol.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroCompatApi$MacroCompatibleTree.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroCompatApi$class.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroCompatApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$MacroDecoratorApi$MacroScopeDecoratorApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$MacroDecoratorApi$MacroSymbolDecoratorApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$MacroDecoratorApi$MacroTreeDecoratorApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$MacroDecoratorApi$MacroTypeTreeDecoratorApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$MacroDecoratorApi$class.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$MacroDecoratorApi.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi$class.class +INFO: Loading Class: scala/reflect/macros/Universe$MacroInternalApi.class +INFO: Loading Class: scala/reflect/macros/Universe$RunContextApi.class +INFO: Loading Class: scala/reflect/macros/Universe$TreeGen.class +INFO: Loading Class: scala/reflect/macros/Universe.class +INFO: Loading Class: scala/reflect/macros/blackbox/Context.class +INFO: Loading Class: scala/reflect/macros/package$.class +INFO: Loading Class: scala/reflect/macros/package.class +INFO: Loading Class: scala/reflect/macros/whitebox/Context$ImplicitCandidate$.class +INFO: Loading Class: scala/reflect/macros/whitebox/Context$ImplicitCandidate.class +INFO: Loading Class: scala/reflect/macros/whitebox/Context$class.class +INFO: Loading Class: scala/reflect/macros/whitebox/Context.class +INFO: Loading Class: scala/reflect/runtime/Gil$class.class +INFO: Loading Class: scala/reflect/runtime/Gil.class +INFO: Loading Class: scala/reflect/runtime/HasJavaClass.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$$anonfun$missingHook$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$$anonfun$runtimeMirror$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaClassCompleter.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anon$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anon$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anon$3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anon$4.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anon$5.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$12.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$17.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$18.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$19.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$20.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$21.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$22.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$23.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$24.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$4.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$5.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$6.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$7.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$bytecodefulObjectMethods$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$classToJava$1$$anonfun$apply$5.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$classToJava$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$classToScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$constructorToJava$1$$anonfun$26.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$constructorToJava$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$constructorToScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$existsParam$1$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$fieldToJava$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$loadAnnotation$1$1$$anonfun$11.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$loadAnnotation$1$1$$anonfun$apply$3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$loadAnnotation$1$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$lookup$1$$anonfun$14.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$lookup$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$methodToJava$1$$anonfun$25.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$methodToJava$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$methodToScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$packageToScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$$makeScalaPackage$1$$anonfun$apply$4.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$$makeScalaPackage$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$checkConstructorOf$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$checkMemberOf$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$constructorToScala1$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$erasesTo$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$erasesTo$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jclassAsScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jconstrAsScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jfieldAsScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jmethodAsScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$jmethodAsScala1$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$methodToScala1$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$mkMethodMirror$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$mkMethodMirror$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$scala$reflect$runtime$JavaMirrors$JavaMirror$$typeParamToScala1$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$setMethType$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$targsToScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$toScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$typeParamToScala$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$unpickleClass$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$unpickleClass$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$$anonfun$unpickleClass$3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$BytecodelessMethodMirror$$anonfun$10.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$BytecodelessMethodMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$DerivedValueClassMetadata$$anonfun$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$DerivedValueClassMetadata.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1$$anonfun$13.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$4.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$5.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1$$anonfun$apply$mcV$sp$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$completeRest$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$load$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$$anonfun$load$3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter$LazyPolyType.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$FromJavaClassCompleter.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaAnnotationProxy$$anonfun$assocs$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaAnnotationProxy$$anonfun$assocs$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaAnnotationProxy$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaAnnotationProxy.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaClassMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaFieldMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaInstanceMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaMethodMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaModuleMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaTemplateMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaTransformingMethodMirror$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaTransformingMethodMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaVanillaMethodMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaVanillaMethodMirror0.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaVanillaMethodMirror1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaVanillaMethodMirror2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaVanillaMethodMirror3.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$JavaVanillaMethodMirror4.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$MethodMetadata$$anonfun$8.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$MethodMetadata$$anonfun$9.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$MethodMetadata.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$RichClass.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$TypeParamCompleter$$anonfun$complete$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$TypeParamCompleter$$anonfun$complete$2.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$TypeParamCompleter.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$jClassOps.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$jMemberOps.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$AnnotationClass$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$ArrayClass$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$ConstantArg$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$EnumClass$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$toAnnotArg$PrimitiveClass$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror$unpickler$.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$JavaMirror.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors$class.class +INFO: Loading Class: scala/reflect/runtime/JavaMirrors.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse$$anon$1$$anon$2$$anonfun$1.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse$$anon$1$$anon$2$$anonfun$2.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse$$anon$1$$anon$2.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse$$anon$1.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse$$anonfun$inform$1.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse$treeInfo$.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverse.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverseForce$class.class +INFO: Loading Class: scala/reflect/runtime/JavaUniverseForce.class +INFO: Loading Class: scala/reflect/runtime/Macros$.class +INFO: Loading Class: scala/reflect/runtime/Macros.class +INFO: Loading Class: scala/reflect/runtime/ReflectError.class +INFO: Loading Class: scala/reflect/runtime/ReflectSetup$class.class +INFO: Loading Class: scala/reflect/runtime/ReflectSetup.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$$anonfun$1.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$$anonfun$2.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$$anonfun$unwrapHandler$1.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedIn.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInClass$$anonfun$$lessinit$greater$3.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInClass$.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInConstructor$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInConstructor$.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInMethod$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInMethod$.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInPackage$$anonfun$$lessinit$greater$4.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$EnclosedInPackage$.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils$PrimitiveOrArray$.class +INFO: Loading Class: scala/reflect/runtime/ReflectionUtils.class +INFO: Loading Class: scala/reflect/runtime/Settings$BooleanSetting.class +INFO: Loading Class: scala/reflect/runtime/Settings$IntSetting.class +INFO: Loading Class: scala/reflect/runtime/Settings$MultiStringSetting.class +INFO: Loading Class: scala/reflect/runtime/Settings$Setting.class +INFO: Loading Class: scala/reflect/runtime/Settings.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$$anonfun$initAndEnterClassAndModule$1.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$$anonfun$setAllInfos$1.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$LazyPackageType.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$PackageScope$$anonfun$lookupEntry$1$$anonfun$1.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$PackageScope$$anonfun$lookupEntry$1$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$PackageScope$$anonfun$lookupEntry$1$$anonfun$apply$2.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$PackageScope$$anonfun$lookupEntry$1.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$PackageScope.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$TopClassCompleter$$anonfun$complete$1.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$TopClassCompleter$$anonfun$complete$2.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$TopClassCompleter.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders$class.class +INFO: Loading Class: scala/reflect/runtime/SymbolLoaders.class +INFO: Loading Class: scala/reflect/runtime/SymbolTable$class.class +INFO: Loading Class: scala/reflect/runtime/SymbolTable.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$$anon$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$$anon$2.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$$anon$4.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$$anonfun$newBaseTypeSeq$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anon$3.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$apply$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$copy$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$exists$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$lateMap$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$map$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$maxDepth$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$rawElem$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$toList$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$toString$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$$anonfun$typeSymbol$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedBaseTypeSeq.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$enter$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$isEmpty$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$lookupAll$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$lookupEntry$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$lookupNextEntry$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$rehash$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$size$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$toList$2.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$unlink$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$$anonfun$unlink$2.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$SynchronizedScope.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedOps.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$$anon$16.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$$anon$4.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$$anon$7.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$$anonfun$connectModuleToClass$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$$anonfun$scala$reflect$runtime$SynchronizedSymbols$$_recursionTable$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedClassSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedMethodSymbol$$anonfun$typeAsMemberOf$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedMethodSymbol$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedMethodSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedModuleClassSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedModuleSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$10.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$11.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$12.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$13.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$14.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$15.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$2.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$3.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$5.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$6.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$8.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$9.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$info$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$rawInfo$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$typeParams$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$typeSignature$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$typeSignatureIn$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$unsafeTypeParams$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anonfun$validTo$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedTermSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedTypeSymbol$$anonfun$tpe_$times$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedTypeSymbol$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$SynchronizedTypeSymbol.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedSymbols.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$defineBaseClassesOfCompoundType$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$defineBaseTypeSeqOfCompoundType$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$defineBaseTypeSeqOfTypeRef$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$defineParentsOfTypeRef$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$defineUnderlyingOfSingleType$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_basetypeRecursions$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_glbResults$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_indent$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_intersectionWitness$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_lubResults$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_pendingBaseTypes$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_pendingSubTypes$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_skolemizationLevel$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_subsametypeRecursions$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_toStringRecursions$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_toStringSubjects$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$$anonfun$scala$reflect$runtime$SynchronizedTypes$$_undoLog$1.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes$class.class +INFO: Loading Class: scala/reflect/runtime/SynchronizedTypes.class +INFO: Loading Class: scala/reflect/runtime/ThreadLocalStorage$MyThreadLocalStorage.class +INFO: Loading Class: scala/reflect/runtime/ThreadLocalStorage$ThreadLocalStorage.class +INFO: Loading Class: scala/reflect/runtime/ThreadLocalStorage$class.class +INFO: Loading Class: scala/reflect/runtime/ThreadLocalStorage.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCache$SomeRef$.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCache.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$TwoWayCache$$anonfun$enter$1.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$TwoWayCache$$anonfun$toJava$1.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$TwoWayCache$$anonfun$toJavaOption$1.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$TwoWayCache$$anonfun$toScala$1.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$TwoWayCache$SomeRef$.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$TwoWayCache.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches$class.class +INFO: Loading Class: scala/reflect/runtime/TwoWayCaches.class +INFO: Loading Class: scala/reflect/runtime/package$.class +INFO: Loading Class: scala/reflect/runtime/package.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-swing_2.11/1.0.1/b1cdd92bd47b1e1837139c1c53020e86bb9112ae/scala-swing_2.11-1.0.1.jar +INFO: Loading Class: scala/swing/AbstractButton$$anon$1.class +INFO: Loading Class: scala/swing/AbstractButton$$anonfun$1.class +INFO: Loading Class: scala/swing/AbstractButton.class +INFO: Loading Class: scala/swing/Action$$anon$1.class +INFO: Loading Class: scala/swing/Action$$anon$2.class +INFO: Loading Class: scala/swing/Action$.class +INFO: Loading Class: scala/swing/Action$NoAction$.class +INFO: Loading Class: scala/swing/Action$Trigger$.class +INFO: Loading Class: scala/swing/Action$Trigger$Wrapper$class.class +INFO: Loading Class: scala/swing/Action$Trigger$Wrapper.class +INFO: Loading Class: scala/swing/Action$Trigger.class +INFO: Loading Class: scala/swing/Action.class +INFO: Loading Class: scala/swing/Adjustable$.class +INFO: Loading Class: scala/swing/Adjustable$Wrapper$class.class +INFO: Loading Class: scala/swing/Adjustable$Wrapper.class +INFO: Loading Class: scala/swing/Adjustable.class +INFO: Loading Class: scala/swing/Alignment$.class +INFO: Loading Class: scala/swing/Alignment.class +INFO: Loading Class: scala/swing/Applet$UI.class +INFO: Loading Class: scala/swing/Applet.class +INFO: Loading Class: scala/swing/BorderPanel$$anon$1.class +INFO: Loading Class: scala/swing/BorderPanel$.class +INFO: Loading Class: scala/swing/BorderPanel$Position$.class +INFO: Loading Class: scala/swing/BorderPanel.class +INFO: Loading Class: scala/swing/BoxPanel$$anon$1.class +INFO: Loading Class: scala/swing/BoxPanel.class +INFO: Loading Class: scala/swing/BufferWrapper$$anonfun$clear$1.class +INFO: Loading Class: scala/swing/BufferWrapper$$anonfun$insertAll$1.class +INFO: Loading Class: scala/swing/BufferWrapper$$anonfun$iterator$1.class +INFO: Loading Class: scala/swing/BufferWrapper.class +INFO: Loading Class: scala/swing/Button$$anon$1.class +INFO: Loading Class: scala/swing/Button$.class +INFO: Loading Class: scala/swing/Button.class +INFO: Loading Class: scala/swing/ButtonGroup$$anon$1$$anon$2.class +INFO: Loading Class: scala/swing/ButtonGroup$$anon$1.class +INFO: Loading Class: scala/swing/ButtonGroup$$anonfun$selected$1.class +INFO: Loading Class: scala/swing/ButtonGroup.class +INFO: Loading Class: scala/swing/CheckBox$$anon$1.class +INFO: Loading Class: scala/swing/CheckBox.class +INFO: Loading Class: scala/swing/CheckMenuItem.class +INFO: Loading Class: scala/swing/ColorChooser$$anon$1.class +INFO: Loading Class: scala/swing/ColorChooser$$anon$2.class +INFO: Loading Class: scala/swing/ColorChooser$.class +INFO: Loading Class: scala/swing/ColorChooser.class +INFO: Loading Class: scala/swing/ComboBox$$anon$1.class +INFO: Loading Class: scala/swing/ComboBox$$anon$2.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$doubleEditor$1.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$doubleEditor$2.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$floatEditor$1.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$floatEditor$2.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$intEditor$1.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$intEditor$2.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$prototypeDisplayValue_$eq$1.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$stringEditor$1.class +INFO: Loading Class: scala/swing/ComboBox$$anonfun$stringEditor$2.class +INFO: Loading Class: scala/swing/ComboBox$.class +INFO: Loading Class: scala/swing/ComboBox$BuiltInEditor$DelegatedEditor$$anon$4.class +INFO: Loading Class: scala/swing/ComboBox$BuiltInEditor$DelegatedEditor$$anonfun$1.class +INFO: Loading Class: scala/swing/ComboBox$BuiltInEditor$DelegatedEditor.class +INFO: Loading Class: scala/swing/ComboBox$BuiltInEditor.class +INFO: Loading Class: scala/swing/ComboBox$Editor$$anon$3$$anonfun$addActionListener$1.class +INFO: Loading Class: scala/swing/ComboBox$Editor$$anon$3$$anonfun$removeActionListener$1.class +INFO: Loading Class: scala/swing/ComboBox$Editor$$anon$3.class +INFO: Loading Class: scala/swing/ComboBox$Editor$class.class +INFO: Loading Class: scala/swing/ComboBox$Editor.class +INFO: Loading Class: scala/swing/ComboBox$selection$$anonfun$2.class +INFO: Loading Class: scala/swing/ComboBox$selection$.class +INFO: Loading Class: scala/swing/ComboBox.class +INFO: Loading Class: scala/swing/Component$$anon$1.class +INFO: Loading Class: scala/swing/Component$$anon$11.class +INFO: Loading Class: scala/swing/Component$$anon$12.class +INFO: Loading Class: scala/swing/Component$$anon$13.class +INFO: Loading Class: scala/swing/Component$$anon$14.class +INFO: Loading Class: scala/swing/Component$$anon$2.class +INFO: Loading Class: scala/swing/Component$$anonfun$inputVerifier$1$$anonfun$apply$1.class +INFO: Loading Class: scala/swing/Component$$anonfun$inputVerifier$1.class +INFO: Loading Class: scala/swing/Component$.class +INFO: Loading Class: scala/swing/Component$SuperMixin$class.class +INFO: Loading Class: scala/swing/Component$SuperMixin.class +INFO: Loading Class: scala/swing/Component$keys$$anon$10.class +INFO: Loading Class: scala/swing/Component$keys$.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$3$$anon$6.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$3.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$4$$anon$7.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$4$$anon$8.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$4.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$5$$anon$9.class +INFO: Loading Class: scala/swing/Component$mouse$$anon$5.class +INFO: Loading Class: scala/swing/Component$mouse$.class +INFO: Loading Class: scala/swing/Component.class +INFO: Loading Class: scala/swing/Container$.class +INFO: Loading Class: scala/swing/Container$Wrapper$$anon$1.class +INFO: Loading Class: scala/swing/Container$Wrapper$Content.class +INFO: Loading Class: scala/swing/Container$Wrapper$class.class +INFO: Loading Class: scala/swing/Container$Wrapper.class +INFO: Loading Class: scala/swing/Container.class +INFO: Loading Class: scala/swing/Dialog$$anon$2.class +INFO: Loading Class: scala/swing/Dialog$$anon$3.class +INFO: Loading Class: scala/swing/Dialog$$anon$4.class +INFO: Loading Class: scala/swing/Dialog$$anonfun$1.class +INFO: Loading Class: scala/swing/Dialog$$anonfun$2.class +INFO: Loading Class: scala/swing/Dialog$.class +INFO: Loading Class: scala/swing/Dialog$Message$.class +INFO: Loading Class: scala/swing/Dialog$Options$.class +INFO: Loading Class: scala/swing/Dialog$Result$.class +INFO: Loading Class: scala/swing/Dialog.class +INFO: Loading Class: scala/swing/EditorPane$$anon$1.class +INFO: Loading Class: scala/swing/EditorPane.class +INFO: Loading Class: scala/swing/FileChooser$.class +INFO: Loading Class: scala/swing/FileChooser$Result$.class +INFO: Loading Class: scala/swing/FileChooser$SelectionMode$.class +INFO: Loading Class: scala/swing/FileChooser.class +INFO: Loading Class: scala/swing/FlowPanel$$anon$1.class +INFO: Loading Class: scala/swing/FlowPanel$.class +INFO: Loading Class: scala/swing/FlowPanel$Alignment$.class +INFO: Loading Class: scala/swing/FlowPanel.class +INFO: Loading Class: scala/swing/FormattedTextField$$anon$1.class +INFO: Loading Class: scala/swing/FormattedTextField$.class +INFO: Loading Class: scala/swing/FormattedTextField$FocusLostBehavior$.class +INFO: Loading Class: scala/swing/FormattedTextField.class +INFO: Loading Class: scala/swing/Frame$$anon$1.class +INFO: Loading Class: scala/swing/Frame$.class +INFO: Loading Class: scala/swing/Frame.class +INFO: Loading Class: scala/swing/GridBagPanel$$anon$1.class +INFO: Loading Class: scala/swing/GridBagPanel$.class +INFO: Loading Class: scala/swing/GridBagPanel$Anchor$.class +INFO: Loading Class: scala/swing/GridBagPanel$Constraints.class +INFO: Loading Class: scala/swing/GridBagPanel$Fill$.class +INFO: Loading Class: scala/swing/GridBagPanel.class +INFO: Loading Class: scala/swing/GridPanel$$anon$1.class +INFO: Loading Class: scala/swing/GridPanel$.class +INFO: Loading Class: scala/swing/GridPanel.class +INFO: Loading Class: scala/swing/Label$$anon$1.class +INFO: Loading Class: scala/swing/Label.class +INFO: Loading Class: scala/swing/LayoutContainer$$anon$1$$anonfun$iterator$1.class +INFO: Loading Class: scala/swing/LayoutContainer$$anon$1.class +INFO: Loading Class: scala/swing/LayoutContainer$class.class +INFO: Loading Class: scala/swing/LayoutContainer.class +INFO: Loading Class: scala/swing/LazyPublisher$class.class +INFO: Loading Class: scala/swing/LazyPublisher.class +INFO: Loading Class: scala/swing/ListView$$anon$1$$anon$4.class +INFO: Loading Class: scala/swing/ListView$$anon$1.class +INFO: Loading Class: scala/swing/ListView$$anon$2.class +INFO: Loading Class: scala/swing/ListView$$anon$3.class +INFO: Loading Class: scala/swing/ListView$$anon$5.class +INFO: Loading Class: scala/swing/ListView$$anon$7.class +INFO: Loading Class: scala/swing/ListView$.class +INFO: Loading Class: scala/swing/ListView$AbstractRenderer.class +INFO: Loading Class: scala/swing/ListView$GenericRenderer$.class +INFO: Loading Class: scala/swing/ListView$IntervalMode$.class +INFO: Loading Class: scala/swing/ListView$ModelWrapper.class +INFO: Loading Class: scala/swing/ListView$Renderer$$anon$8.class +INFO: Loading Class: scala/swing/ListView$Renderer$$anon$9.class +INFO: Loading Class: scala/swing/ListView$Renderer$.class +INFO: Loading Class: scala/swing/ListView$Renderer$Wrapped.class +INFO: Loading Class: scala/swing/ListView$Renderer.class +INFO: Loading Class: scala/swing/ListView$selection$$anon$6.class +INFO: Loading Class: scala/swing/ListView$selection$.class +INFO: Loading Class: scala/swing/ListView$selection$Indices.class +INFO: Loading Class: scala/swing/ListView$selection$indices$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/swing/ListView$selection$indices$.class +INFO: Loading Class: scala/swing/ListView$selection$items$$anonfun$self$1.class +INFO: Loading Class: scala/swing/ListView$selection$items$.class +INFO: Loading Class: scala/swing/ListView.class +INFO: Loading Class: scala/swing/MainFrame$.class +INFO: Loading Class: scala/swing/MainFrame.class +INFO: Loading Class: scala/swing/Menu.class +INFO: Loading Class: scala/swing/MenuBar$$anon$1.class +INFO: Loading Class: scala/swing/MenuBar$$anonfun$menus$1.class +INFO: Loading Class: scala/swing/MenuBar$$anonfun$menus$2.class +INFO: Loading Class: scala/swing/MenuBar$.class +INFO: Loading Class: scala/swing/MenuBar$NoMenuBar$.class +INFO: Loading Class: scala/swing/MenuBar.class +INFO: Loading Class: scala/swing/MenuItem.class +INFO: Loading Class: scala/swing/Orientable$.class +INFO: Loading Class: scala/swing/Orientable$Wrapper$class.class +INFO: Loading Class: scala/swing/Orientable$Wrapper.class +INFO: Loading Class: scala/swing/Orientable.class +INFO: Loading Class: scala/swing/Orientation$.class +INFO: Loading Class: scala/swing/Orientation.class +INFO: Loading Class: scala/swing/Oriented$.class +INFO: Loading Class: scala/swing/Oriented$Wrapper$class.class +INFO: Loading Class: scala/swing/Oriented$Wrapper.class +INFO: Loading Class: scala/swing/Oriented.class +INFO: Loading Class: scala/swing/Panel$$anon$1.class +INFO: Loading Class: scala/swing/Panel.class +INFO: Loading Class: scala/swing/PasswordField$$anon$1.class +INFO: Loading Class: scala/swing/PasswordField.class +INFO: Loading Class: scala/swing/PopupMenu$$anon$1.class +INFO: Loading Class: scala/swing/PopupMenu$$anon$2.class +INFO: Loading Class: scala/swing/PopupMenu.class +INFO: Loading Class: scala/swing/ProgressBar$$anon$1.class +INFO: Loading Class: scala/swing/ProgressBar.class +INFO: Loading Class: scala/swing/Publisher$$anon$1$$anon$2.class +INFO: Loading Class: scala/swing/Publisher$$anon$1$$anon$3.class +INFO: Loading Class: scala/swing/Publisher$$anon$1.class +INFO: Loading Class: scala/swing/Publisher$$anonfun$publish$1.class +INFO: Loading Class: scala/swing/Publisher$class.class +INFO: Loading Class: scala/swing/Publisher.class +INFO: Loading Class: scala/swing/RadioButton$$anon$1.class +INFO: Loading Class: scala/swing/RadioButton.class +INFO: Loading Class: scala/swing/RadioMenuItem.class +INFO: Loading Class: scala/swing/Reactions$.class +INFO: Loading Class: scala/swing/Reactions$Impl$$anonfun$apply$1.class +INFO: Loading Class: scala/swing/Reactions$Impl$$anonfun$isDefinedAt$1.class +INFO: Loading Class: scala/swing/Reactions$Impl.class +INFO: Loading Class: scala/swing/Reactions$StronglyReferenced.class +INFO: Loading Class: scala/swing/Reactions$Wrapper.class +INFO: Loading Class: scala/swing/Reactions.class +INFO: Loading Class: scala/swing/Reactor$$anonfun$deafTo$1.class +INFO: Loading Class: scala/swing/Reactor$$anonfun$listenTo$1.class +INFO: Loading Class: scala/swing/Reactor$class.class +INFO: Loading Class: scala/swing/Reactor.class +INFO: Loading Class: scala/swing/RefBuffer$$anonfun$insertAll$1.class +INFO: Loading Class: scala/swing/RefBuffer.class +INFO: Loading Class: scala/swing/RefSet.class +INFO: Loading Class: scala/swing/RichWindow$.class +INFO: Loading Class: scala/swing/RichWindow$InterfaceMixin.class +INFO: Loading Class: scala/swing/RichWindow$Undecorated$class.class +INFO: Loading Class: scala/swing/RichWindow$Undecorated.class +INFO: Loading Class: scala/swing/RichWindow$class.class +INFO: Loading Class: scala/swing/RichWindow.class +INFO: Loading Class: scala/swing/RootPanel$class.class +INFO: Loading Class: scala/swing/RootPanel.class +INFO: Loading Class: scala/swing/ScrollBar$$anon$1.class +INFO: Loading Class: scala/swing/ScrollBar$$anon$2.class +INFO: Loading Class: scala/swing/ScrollBar$.class +INFO: Loading Class: scala/swing/ScrollBar.class +INFO: Loading Class: scala/swing/ScrollPane$$anon$1.class +INFO: Loading Class: scala/swing/ScrollPane$$anonfun$columnHeaderView$1.class +INFO: Loading Class: scala/swing/ScrollPane$$anonfun$columnHeaderView_$eq$1.class +INFO: Loading Class: scala/swing/ScrollPane$$anonfun$rowHeaderView$1.class +INFO: Loading Class: scala/swing/ScrollPane$$anonfun$rowHeaderView_$eq$1.class +INFO: Loading Class: scala/swing/ScrollPane$$anonfun$viewportView$1.class +INFO: Loading Class: scala/swing/ScrollPane$$anonfun$viewportView_$eq$1.class +INFO: Loading Class: scala/swing/ScrollPane$.class +INFO: Loading Class: scala/swing/ScrollPane$BarPolicy$.class +INFO: Loading Class: scala/swing/ScrollPane$BarPolicy$Value.class +INFO: Loading Class: scala/swing/ScrollPane.class +INFO: Loading Class: scala/swing/Scrollable$.class +INFO: Loading Class: scala/swing/Scrollable$Wrapper$class.class +INFO: Loading Class: scala/swing/Scrollable$Wrapper.class +INFO: Loading Class: scala/swing/Scrollable.class +INFO: Loading Class: scala/swing/Separator$$anon$1.class +INFO: Loading Class: scala/swing/Separator.class +INFO: Loading Class: scala/swing/SequentialContainer$.class +INFO: Loading Class: scala/swing/SequentialContainer$Wrapper$class.class +INFO: Loading Class: scala/swing/SequentialContainer$Wrapper.class +INFO: Loading Class: scala/swing/SequentialContainer.class +INFO: Loading Class: scala/swing/SimpleSwingApplication.class +INFO: Loading Class: scala/swing/SingleRefCollection$$anon$4.class +INFO: Loading Class: scala/swing/SingleRefCollection$Ref$class.class +INFO: Loading Class: scala/swing/SingleRefCollection$Ref.class +INFO: Loading Class: scala/swing/SingleRefCollection$class.class +INFO: Loading Class: scala/swing/SingleRefCollection.class +INFO: Loading Class: scala/swing/Slider$$anon$1.class +INFO: Loading Class: scala/swing/Slider$$anon$2.class +INFO: Loading Class: scala/swing/Slider$$anonfun$labels$1.class +INFO: Loading Class: scala/swing/Slider$$anonfun$labels_$eq$1.class +INFO: Loading Class: scala/swing/Slider$$anonfun$labels_$eq$2.class +INFO: Loading Class: scala/swing/Slider.class +INFO: Loading Class: scala/swing/SplitPane$$anon$1.class +INFO: Loading Class: scala/swing/SplitPane$$anon$2.class +INFO: Loading Class: scala/swing/SplitPane$$anon$3.class +INFO: Loading Class: scala/swing/SplitPane.class +INFO: Loading Class: scala/swing/StrongReference$$anonfun$toString$1.class +INFO: Loading Class: scala/swing/StrongReference$$anonfun$toString$2.class +INFO: Loading Class: scala/swing/StrongReference.class +INFO: Loading Class: scala/swing/Swing$$anon$1.class +INFO: Loading Class: scala/swing/Swing$$anon$10.class +INFO: Loading Class: scala/swing/Swing$$anon$2.class +INFO: Loading Class: scala/swing/Swing$$anon$3.class +INFO: Loading Class: scala/swing/Swing$$anon$4.class +INFO: Loading Class: scala/swing/Swing$$anon$5.class +INFO: Loading Class: scala/swing/Swing$$anon$6.class +INFO: Loading Class: scala/swing/Swing$$anon$7.class +INFO: Loading Class: scala/swing/Swing$$anon$8.class +INFO: Loading Class: scala/swing/Swing$$anon$9.class +INFO: Loading Class: scala/swing/Swing$.class +INFO: Loading Class: scala/swing/Swing$Embossing.class +INFO: Loading Class: scala/swing/Swing$EmptyIcon$.class +INFO: Loading Class: scala/swing/Swing$Lowered$.class +INFO: Loading Class: scala/swing/Swing$Raised$.class +INFO: Loading Class: scala/swing/Swing.class +INFO: Loading Class: scala/swing/SwingApplication$$anonfun$main$1.class +INFO: Loading Class: scala/swing/SwingApplication.class +INFO: Loading Class: scala/swing/TabbedPane$$anon$1.class +INFO: Loading Class: scala/swing/TabbedPane$.class +INFO: Loading Class: scala/swing/TabbedPane$Layout$.class +INFO: Loading Class: scala/swing/TabbedPane$Page.class +INFO: Loading Class: scala/swing/TabbedPane$pages$.class +INFO: Loading Class: scala/swing/TabbedPane$selection$$anon$2.class +INFO: Loading Class: scala/swing/TabbedPane$selection$.class +INFO: Loading Class: scala/swing/TabbedPane.class +INFO: Loading Class: scala/swing/Table$$anon$2$$anon$10.class +INFO: Loading Class: scala/swing/Table$$anon$2.class +INFO: Loading Class: scala/swing/Table$$anon$3.class +INFO: Loading Class: scala/swing/Table$$anon$4.class +INFO: Loading Class: scala/swing/Table$$anon$5.class +INFO: Loading Class: scala/swing/Table$$anon$6.class +INFO: Loading Class: scala/swing/Table$.class +INFO: Loading Class: scala/swing/Table$AbstractRenderer.class +INFO: Loading Class: scala/swing/Table$AutoResizeMode$.class +INFO: Loading Class: scala/swing/Table$ElementMode$.class +INFO: Loading Class: scala/swing/Table$IntervalMode$.class +INFO: Loading Class: scala/swing/Table$JTableMixin.class +INFO: Loading Class: scala/swing/Table$LabelRenderer$$anonfun$$lessinit$greater$1.class +INFO: Loading Class: scala/swing/Table$LabelRenderer.class +INFO: Loading Class: scala/swing/Table$Renderer$$anon$9.class +INFO: Loading Class: scala/swing/Table$Renderer.class +INFO: Loading Class: scala/swing/Table$selection$$anon$1$$anonfun$$lessinit$greater$4$$anonfun$apply$1$$anonfun$apply$2.class +INFO: Loading Class: scala/swing/Table$selection$$anon$1$$anonfun$$lessinit$greater$4$$anonfun$apply$1.class +INFO: Loading Class: scala/swing/Table$selection$$anon$1$$anonfun$$lessinit$greater$4.class +INFO: Loading Class: scala/swing/Table$selection$$anon$1.class +INFO: Loading Class: scala/swing/Table$selection$$anon$7.class +INFO: Loading Class: scala/swing/Table$selection$$anon$8.class +INFO: Loading Class: scala/swing/Table$selection$.class +INFO: Loading Class: scala/swing/Table$selection$SelectionSet.class +INFO: Loading Class: scala/swing/Table$selection$columns$$anonfun$$lessinit$greater$3.class +INFO: Loading Class: scala/swing/Table$selection$columns$.class +INFO: Loading Class: scala/swing/Table$selection$rows$$anonfun$$lessinit$greater$2.class +INFO: Loading Class: scala/swing/Table$selection$rows$.class +INFO: Loading Class: scala/swing/Table.class +INFO: Loading Class: scala/swing/TextArea$$anon$1.class +INFO: Loading Class: scala/swing/TextArea.class +INFO: Loading Class: scala/swing/TextComponent$$anon$1.class +INFO: Loading Class: scala/swing/TextComponent$$anon$3.class +INFO: Loading Class: scala/swing/TextComponent$.class +INFO: Loading Class: scala/swing/TextComponent$Caret$$anon$2.class +INFO: Loading Class: scala/swing/TextComponent$Caret.class +INFO: Loading Class: scala/swing/TextComponent$HasColumns.class +INFO: Loading Class: scala/swing/TextComponent$HasRows.class +INFO: Loading Class: scala/swing/TextComponent$caret$.class +INFO: Loading Class: scala/swing/TextComponent.class +INFO: Loading Class: scala/swing/TextField$$anon$1.class +INFO: Loading Class: scala/swing/TextField$$anon$2.class +INFO: Loading Class: scala/swing/TextField$$anon$3$$anonfun$shouldYieldFocus$1.class +INFO: Loading Class: scala/swing/TextField$$anon$3.class +INFO: Loading Class: scala/swing/TextField$$anon$4.class +INFO: Loading Class: scala/swing/TextField$$anonfun$actionListener$1.class +INFO: Loading Class: scala/swing/TextField$$anonfun$shouldYieldFocus$2$$anonfun$apply$2.class +INFO: Loading Class: scala/swing/TextField$$anonfun$shouldYieldFocus$2.class +INFO: Loading Class: scala/swing/TextField$$anonfun$verifier$1$$anonfun$apply$1.class +INFO: Loading Class: scala/swing/TextField$$anonfun$verifier$1.class +INFO: Loading Class: scala/swing/TextField.class +INFO: Loading Class: scala/swing/ToggleButton$$anon$1.class +INFO: Loading Class: scala/swing/ToggleButton.class +INFO: Loading Class: scala/swing/UIElement$$anon$1.class +INFO: Loading Class: scala/swing/UIElement$$anon$2.class +INFO: Loading Class: scala/swing/UIElement$.class +INFO: Loading Class: scala/swing/UIElement$class.class +INFO: Loading Class: scala/swing/UIElement.class +INFO: Loading Class: scala/swing/Window$$anon$1.class +INFO: Loading Class: scala/swing/Window$$anonfun$defaultButton$1.class +INFO: Loading Class: scala/swing/Window$$anonfun$defaultButton_$eq$1.class +INFO: Loading Class: scala/swing/Window$InterfaceMixin.class +INFO: Loading Class: scala/swing/Window$SuperMixin$class.class +INFO: Loading Class: scala/swing/Window$SuperMixin.class +INFO: Loading Class: scala/swing/Window.class +INFO: Loading Class: scala/swing/event/ActionEvent$.class +INFO: Loading Class: scala/swing/event/ActionEvent.class +INFO: Loading Class: scala/swing/event/AdjustingEvent$class.class +INFO: Loading Class: scala/swing/event/AdjustingEvent.class +INFO: Loading Class: scala/swing/event/BackgroundChanged$.class +INFO: Loading Class: scala/swing/event/BackgroundChanged.class +INFO: Loading Class: scala/swing/event/ButtonClicked$.class +INFO: Loading Class: scala/swing/event/ButtonClicked.class +INFO: Loading Class: scala/swing/event/CaretUpdate$.class +INFO: Loading Class: scala/swing/event/CaretUpdate.class +INFO: Loading Class: scala/swing/event/ColorChanged$.class +INFO: Loading Class: scala/swing/event/ColorChanged.class +INFO: Loading Class: scala/swing/event/ComponentAdded$.class +INFO: Loading Class: scala/swing/event/ComponentAdded.class +INFO: Loading Class: scala/swing/event/ComponentEvent.class +INFO: Loading Class: scala/swing/event/ComponentRemoved$.class +INFO: Loading Class: scala/swing/event/ComponentRemoved.class +INFO: Loading Class: scala/swing/event/ContainerEvent.class +INFO: Loading Class: scala/swing/event/EditDone$.class +INFO: Loading Class: scala/swing/event/EditDone.class +INFO: Loading Class: scala/swing/event/Event.class +INFO: Loading Class: scala/swing/event/FocusEvent.class +INFO: Loading Class: scala/swing/event/FocusGained$.class +INFO: Loading Class: scala/swing/event/FocusGained.class +INFO: Loading Class: scala/swing/event/FocusLost$.class +INFO: Loading Class: scala/swing/event/FocusLost.class +INFO: Loading Class: scala/swing/event/FontChanged$.class +INFO: Loading Class: scala/swing/event/FontChanged.class +INFO: Loading Class: scala/swing/event/ForegroundChanged$.class +INFO: Loading Class: scala/swing/event/ForegroundChanged.class +INFO: Loading Class: scala/swing/event/InputEvent$class.class +INFO: Loading Class: scala/swing/event/InputEvent.class +INFO: Loading Class: scala/swing/event/Key$.class +INFO: Loading Class: scala/swing/event/Key$Location$.class +INFO: Loading Class: scala/swing/event/Key$Modifier$.class +INFO: Loading Class: scala/swing/event/Key.class +INFO: Loading Class: scala/swing/event/KeyEvent.class +INFO: Loading Class: scala/swing/event/KeyPressed$.class +INFO: Loading Class: scala/swing/event/KeyPressed.class +INFO: Loading Class: scala/swing/event/KeyReleased$.class +INFO: Loading Class: scala/swing/event/KeyReleased.class +INFO: Loading Class: scala/swing/event/KeyTyped$.class +INFO: Loading Class: scala/swing/event/KeyTyped.class +INFO: Loading Class: scala/swing/event/ListChange.class +INFO: Loading Class: scala/swing/event/ListChanged$.class +INFO: Loading Class: scala/swing/event/ListChanged.class +INFO: Loading Class: scala/swing/event/ListElementsAdded$.class +INFO: Loading Class: scala/swing/event/ListElementsAdded.class +INFO: Loading Class: scala/swing/event/ListElementsRemoved$.class +INFO: Loading Class: scala/swing/event/ListElementsRemoved.class +INFO: Loading Class: scala/swing/event/ListEvent.class +INFO: Loading Class: scala/swing/event/ListSelectionChanged$.class +INFO: Loading Class: scala/swing/event/ListSelectionChanged.class +INFO: Loading Class: scala/swing/event/ListSelectionEvent.class +INFO: Loading Class: scala/swing/event/MouseButtonEvent.class +INFO: Loading Class: scala/swing/event/MouseClicked$.class +INFO: Loading Class: scala/swing/event/MouseClicked.class +INFO: Loading Class: scala/swing/event/MouseDragged$.class +INFO: Loading Class: scala/swing/event/MouseDragged.class +INFO: Loading Class: scala/swing/event/MouseEntered$.class +INFO: Loading Class: scala/swing/event/MouseEntered.class +INFO: Loading Class: scala/swing/event/MouseEvent.class +INFO: Loading Class: scala/swing/event/MouseExited$.class +INFO: Loading Class: scala/swing/event/MouseExited.class +INFO: Loading Class: scala/swing/event/MouseMotionEvent.class +INFO: Loading Class: scala/swing/event/MouseMoved$.class +INFO: Loading Class: scala/swing/event/MouseMoved.class +INFO: Loading Class: scala/swing/event/MousePressed$.class +INFO: Loading Class: scala/swing/event/MousePressed.class +INFO: Loading Class: scala/swing/event/MouseReleased$.class +INFO: Loading Class: scala/swing/event/MouseReleased.class +INFO: Loading Class: scala/swing/event/MouseWheelMoved$.class +INFO: Loading Class: scala/swing/event/MouseWheelMoved.class +INFO: Loading Class: scala/swing/event/PopupMenuCanceled$.class +INFO: Loading Class: scala/swing/event/PopupMenuCanceled.class +INFO: Loading Class: scala/swing/event/PopupMenuEvent.class +INFO: Loading Class: scala/swing/event/PopupMenuWillBecomeInvisible$.class +INFO: Loading Class: scala/swing/event/PopupMenuWillBecomeInvisible.class +INFO: Loading Class: scala/swing/event/PopupMenuWillBecomeVisible$.class +INFO: Loading Class: scala/swing/event/PopupMenuWillBecomeVisible.class +INFO: Loading Class: scala/swing/event/SelectionChanged$.class +INFO: Loading Class: scala/swing/event/SelectionChanged.class +INFO: Loading Class: scala/swing/event/SelectionEvent.class +INFO: Loading Class: scala/swing/event/TableChange.class +INFO: Loading Class: scala/swing/event/TableChanged$.class +INFO: Loading Class: scala/swing/event/TableChanged.class +INFO: Loading Class: scala/swing/event/TableColumnsSelected$.class +INFO: Loading Class: scala/swing/event/TableColumnsSelected.class +INFO: Loading Class: scala/swing/event/TableEvent.class +INFO: Loading Class: scala/swing/event/TableResized.class +INFO: Loading Class: scala/swing/event/TableRowsAdded$.class +INFO: Loading Class: scala/swing/event/TableRowsAdded.class +INFO: Loading Class: scala/swing/event/TableRowsRemoved$.class +INFO: Loading Class: scala/swing/event/TableRowsRemoved.class +INFO: Loading Class: scala/swing/event/TableRowsSelected$.class +INFO: Loading Class: scala/swing/event/TableRowsSelected.class +INFO: Loading Class: scala/swing/event/TableStructureChanged$.class +INFO: Loading Class: scala/swing/event/TableStructureChanged.class +INFO: Loading Class: scala/swing/event/TableUpdated$.class +INFO: Loading Class: scala/swing/event/TableUpdated.class +INFO: Loading Class: scala/swing/event/UIElementHidden$.class +INFO: Loading Class: scala/swing/event/UIElementHidden.class +INFO: Loading Class: scala/swing/event/UIElementMoved$.class +INFO: Loading Class: scala/swing/event/UIElementMoved.class +INFO: Loading Class: scala/swing/event/UIElementResized$.class +INFO: Loading Class: scala/swing/event/UIElementResized.class +INFO: Loading Class: scala/swing/event/UIElementShown$.class +INFO: Loading Class: scala/swing/event/UIElementShown.class +INFO: Loading Class: scala/swing/event/UIEvent.class +INFO: Loading Class: scala/swing/event/ValueChanged$.class +INFO: Loading Class: scala/swing/event/ValueChanged.class +INFO: Loading Class: scala/swing/event/WindowActivated$.class +INFO: Loading Class: scala/swing/event/WindowActivated.class +INFO: Loading Class: scala/swing/event/WindowClosed$.class +INFO: Loading Class: scala/swing/event/WindowClosed.class +INFO: Loading Class: scala/swing/event/WindowClosing$.class +INFO: Loading Class: scala/swing/event/WindowClosing.class +INFO: Loading Class: scala/swing/event/WindowDeactivated$.class +INFO: Loading Class: scala/swing/event/WindowDeactivated.class +INFO: Loading Class: scala/swing/event/WindowDeiconified$.class +INFO: Loading Class: scala/swing/event/WindowDeiconified.class +INFO: Loading Class: scala/swing/event/WindowEvent.class +INFO: Loading Class: scala/swing/event/WindowIconified$.class +INFO: Loading Class: scala/swing/event/WindowIconified.class +INFO: Loading Class: scala/swing/event/WindowOpened$.class +INFO: Loading Class: scala/swing/event/WindowOpened.class +INFO: Loading Class: scala/swing/model/Matrix.class +INFO: Loading Class: scala/swing/package$.class +INFO: Loading Class: scala/swing/package.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.11/1.0.2/820fbca7e524b530fdadc594c39d49a21ea0337e/scala-xml_2.11-1.0.2.jar +INFO: Loading Class: scala/xml/Atom.class +INFO: Loading Class: scala/xml/Attribute$$anonfun$iterator$1.class +INFO: Loading Class: scala/xml/Attribute$.class +INFO: Loading Class: scala/xml/Attribute$class.class +INFO: Loading Class: scala/xml/Attribute.class +INFO: Loading Class: scala/xml/Comment$.class +INFO: Loading Class: scala/xml/Comment.class +INFO: Loading Class: scala/xml/Document.class +INFO: Loading Class: scala/xml/Elem$$anon$1.class +INFO: Loading Class: scala/xml/Elem$$anonfun$text$1.class +INFO: Loading Class: scala/xml/Elem$.class +INFO: Loading Class: scala/xml/Elem.class +INFO: Loading Class: scala/xml/EntityRef$$anonfun$text$1.class +INFO: Loading Class: scala/xml/EntityRef$.class +INFO: Loading Class: scala/xml/EntityRef.class +INFO: Loading Class: scala/xml/Equality$.class +INFO: Loading Class: scala/xml/Equality$class.class +INFO: Loading Class: scala/xml/Equality.class +INFO: Loading Class: scala/xml/Group$.class +INFO: Loading Class: scala/xml/Group.class +INFO: Loading Class: scala/xml/MalformedAttributeException$.class +INFO: Loading Class: scala/xml/MalformedAttributeException.class +INFO: Loading Class: scala/xml/MetaData$$anonfun$asAttrMap$1.class +INFO: Loading Class: scala/xml/MetaData$$anonfun$toString$1.class +INFO: Loading Class: scala/xml/MetaData$$anonfun$toString1$1.class +INFO: Loading Class: scala/xml/MetaData$.class +INFO: Loading Class: scala/xml/MetaData.class +INFO: Loading Class: scala/xml/MinimizeMode$.class +INFO: Loading Class: scala/xml/MinimizeMode.class +INFO: Loading Class: scala/xml/NamespaceBinding$$anonfun$buildString$1.class +INFO: Loading Class: scala/xml/NamespaceBinding$$anonfun$toString$1.class +INFO: Loading Class: scala/xml/NamespaceBinding$.class +INFO: Loading Class: scala/xml/NamespaceBinding.class +INFO: Loading Class: scala/xml/Node$$anonfun$descendant$1.class +INFO: Loading Class: scala/xml/Node$$anonfun$nonEmptyChildren$1.class +INFO: Loading Class: scala/xml/Node$.class +INFO: Loading Class: scala/xml/Node.class +INFO: Loading Class: scala/xml/NodeBuffer$$anonfun$$amp$plus$1.class +INFO: Loading Class: scala/xml/NodeBuffer.class +INFO: Loading Class: scala/xml/NodeSeq$$anon$1.class +INFO: Loading Class: scala/xml/NodeSeq$$anon$2.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$$bslash$1.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$$bslash$2.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$$bslash$bslash$1.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$$bslash$bslash$2.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$$bslash$bslash$3.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$$bslash$bslash$4.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$filt$1$1.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$makeSeq$1$1.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$newBuilder$1.class +INFO: Loading Class: scala/xml/NodeSeq$$anonfun$text$1.class +INFO: Loading Class: scala/xml/NodeSeq$.class +INFO: Loading Class: scala/xml/NodeSeq.class +INFO: Loading Class: scala/xml/Null$.class +INFO: Loading Class: scala/xml/Null.class +INFO: Loading Class: scala/xml/PCData$.class +INFO: Loading Class: scala/xml/PCData.class +INFO: Loading Class: scala/xml/PrefixedAttribute$.class +INFO: Loading Class: scala/xml/PrefixedAttribute.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$childrenAreLeaves$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$doPreserve$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$doPreserve$2.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$endTag$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$format$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$format$2.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$formatNodes$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$formatNodes$2.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$leafTag$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$makeBox$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$startTag$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$$anonfun$traverse$1.class +INFO: Loading Class: scala/xml/PrettyPrinter$Box$.class +INFO: Loading Class: scala/xml/PrettyPrinter$Box.class +INFO: Loading Class: scala/xml/PrettyPrinter$Break$.class +INFO: Loading Class: scala/xml/PrettyPrinter$BrokenException.class +INFO: Loading Class: scala/xml/PrettyPrinter$Item.class +INFO: Loading Class: scala/xml/PrettyPrinter$Para$.class +INFO: Loading Class: scala/xml/PrettyPrinter$Para.class +INFO: Loading Class: scala/xml/PrettyPrinter.class +INFO: Loading Class: scala/xml/ProcInstr$.class +INFO: Loading Class: scala/xml/ProcInstr.class +INFO: Loading Class: scala/xml/Properties$.class +INFO: Loading Class: scala/xml/Properties.class +INFO: Loading Class: scala/xml/QNode$.class +INFO: Loading Class: scala/xml/QNode.class +INFO: Loading Class: scala/xml/Source$.class +INFO: Loading Class: scala/xml/Source.class +INFO: Loading Class: scala/xml/SpecialNode.class +INFO: Loading Class: scala/xml/Text$.class +INFO: Loading Class: scala/xml/Text.class +INFO: Loading Class: scala/xml/TextBuffer$$anonfun$append$1.class +INFO: Loading Class: scala/xml/TextBuffer$.class +INFO: Loading Class: scala/xml/TextBuffer.class +INFO: Loading Class: scala/xml/TopScope$.class +INFO: Loading Class: scala/xml/TopScope.class +INFO: Loading Class: scala/xml/TypeSymbol.class +INFO: Loading Class: scala/xml/Unparsed$.class +INFO: Loading Class: scala/xml/Unparsed.class +INFO: Loading Class: scala/xml/UnprefixedAttribute$.class +INFO: Loading Class: scala/xml/UnprefixedAttribute.class +INFO: Loading Class: scala/xml/Utility$$anonfun$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$10.class +INFO: Loading Class: scala/xml/Utility$$anonfun$2.class +INFO: Loading Class: scala/xml/Utility$$anonfun$3.class +INFO: Loading Class: scala/xml/Utility$$anonfun$4.class +INFO: Loading Class: scala/xml/Utility$$anonfun$5.class +INFO: Loading Class: scala/xml/Utility$$anonfun$6.class +INFO: Loading Class: scala/xml/Utility$$anonfun$7.class +INFO: Loading Class: scala/xml/Utility$$anonfun$9.class +INFO: Loading Class: scala/xml/Utility$$anonfun$appendEscapedQuoted$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$appendQuoted$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$collectNamespaces$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$collectNamespaces$2.class +INFO: Loading Class: scala/xml/Utility$$anonfun$collectNamespaces$3.class +INFO: Loading Class: scala/xml/Utility$$anonfun$escape$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$getName$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$sequenceToXML$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$sequenceToXML$2.class +INFO: Loading Class: scala/xml/Utility$$anonfun$serialize$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$sort$1.class +INFO: Loading Class: scala/xml/Utility$$anonfun$unescape$1.class +INFO: Loading Class: scala/xml/Utility$.class +INFO: Loading Class: scala/xml/Utility$Escapes$$anonfun$8.class +INFO: Loading Class: scala/xml/Utility$Escapes$.class +INFO: Loading Class: scala/xml/Utility.class +INFO: Loading Class: scala/xml/XML$$anon$1.class +INFO: Loading Class: scala/xml/XML$$anonfun$save$1.class +INFO: Loading Class: scala/xml/XML$$anonfun$save$2.class +INFO: Loading Class: scala/xml/XML$.class +INFO: Loading Class: scala/xml/XML.class +INFO: Loading Class: scala/xml/Xhtml$$anonfun$1.class +INFO: Loading Class: scala/xml/Xhtml$$anonfun$sequenceToXML$1.class +INFO: Loading Class: scala/xml/Xhtml$$anonfun$toXhtml$1.class +INFO: Loading Class: scala/xml/Xhtml$$anonfun$toXhtml$2.class +INFO: Loading Class: scala/xml/Xhtml$$anonfun$toXhtml$3.class +INFO: Loading Class: scala/xml/Xhtml$.class +INFO: Loading Class: scala/xml/Xhtml.class +INFO: Loading Class: scala/xml/dtd/ANY$.class +INFO: Loading Class: scala/xml/dtd/ANY.class +INFO: Loading Class: scala/xml/dtd/AttListDecl$.class +INFO: Loading Class: scala/xml/dtd/AttListDecl.class +INFO: Loading Class: scala/xml/dtd/AttrDecl$$anonfun$toString$1.class +INFO: Loading Class: scala/xml/dtd/AttrDecl$.class +INFO: Loading Class: scala/xml/dtd/AttrDecl.class +INFO: Loading Class: scala/xml/dtd/ContentModel$$anonfun$buildString$1.class +INFO: Loading Class: scala/xml/dtd/ContentModel$$anonfun$buildString$2.class +INFO: Loading Class: scala/xml/dtd/ContentModel$$anonfun$isMixed$1.class +INFO: Loading Class: scala/xml/dtd/ContentModel$$anonfun$scala$xml$dtd$ContentModel$$traverse$1$1.class +INFO: Loading Class: scala/xml/dtd/ContentModel$$anonfun$scala$xml$dtd$ContentModel$$traverse$1$2.class +INFO: Loading Class: scala/xml/dtd/ContentModel$$anonfun$toString$1.class +INFO: Loading Class: scala/xml/dtd/ContentModel$.class +INFO: Loading Class: scala/xml/dtd/ContentModel$ElemName$.class +INFO: Loading Class: scala/xml/dtd/ContentModel$ElemName.class +INFO: Loading Class: scala/xml/dtd/ContentModel$Translator$.class +INFO: Loading Class: scala/xml/dtd/ContentModel.class +INFO: Loading Class: scala/xml/dtd/ContentModelParser$.class +INFO: Loading Class: scala/xml/dtd/ContentModelParser.class +INFO: Loading Class: scala/xml/dtd/DEFAULT$$anonfun$toString$2.class +INFO: Loading Class: scala/xml/dtd/DEFAULT$.class +INFO: Loading Class: scala/xml/dtd/DEFAULT.class +INFO: Loading Class: scala/xml/dtd/DFAContentModel.class +INFO: Loading Class: scala/xml/dtd/DTD$$anonfun$toString$1.class +INFO: Loading Class: scala/xml/dtd/DTD.class +INFO: Loading Class: scala/xml/dtd/Decl.class +INFO: Loading Class: scala/xml/dtd/DefaultDecl.class +INFO: Loading Class: scala/xml/dtd/DocType$.class +INFO: Loading Class: scala/xml/dtd/DocType.class +INFO: Loading Class: scala/xml/dtd/ELEMENTS$.class +INFO: Loading Class: scala/xml/dtd/ELEMENTS.class +INFO: Loading Class: scala/xml/dtd/EMPTY$.class +INFO: Loading Class: scala/xml/dtd/EMPTY.class +INFO: Loading Class: scala/xml/dtd/ElemDecl$.class +INFO: Loading Class: scala/xml/dtd/ElemDecl.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$1$$anonfun$find$1$1.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$1.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$2.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$3.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$4.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$5.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$6$$anonfun$apply$1.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$check$6.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$getIterable$1.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$getIterable$2.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$scala$xml$dtd$ElementValidator$$find$2$1.class +INFO: Loading Class: scala/xml/dtd/ElementValidator$$anonfun$scala$xml$dtd$ElementValidator$$isAllWhitespace$1$1.class +INFO: Loading Class: scala/xml/dtd/ElementValidator.class +INFO: Loading Class: scala/xml/dtd/EntityDecl.class +INFO: Loading Class: scala/xml/dtd/EntityDef.class +INFO: Loading Class: scala/xml/dtd/ExtDef$.class +INFO: Loading Class: scala/xml/dtd/ExtDef.class +INFO: Loading Class: scala/xml/dtd/ExternalID.class +INFO: Loading Class: scala/xml/dtd/IMPLIED$.class +INFO: Loading Class: scala/xml/dtd/IMPLIED.class +INFO: Loading Class: scala/xml/dtd/IntDef$.class +INFO: Loading Class: scala/xml/dtd/IntDef.class +INFO: Loading Class: scala/xml/dtd/MIXED$.class +INFO: Loading Class: scala/xml/dtd/MIXED.class +INFO: Loading Class: scala/xml/dtd/MakeValidationException$$anonfun$fromMissingAttribute$1.class +INFO: Loading Class: scala/xml/dtd/MakeValidationException$.class +INFO: Loading Class: scala/xml/dtd/MakeValidationException.class +INFO: Loading Class: scala/xml/dtd/MarkupDecl.class +INFO: Loading Class: scala/xml/dtd/NoExternalID$.class +INFO: Loading Class: scala/xml/dtd/NoExternalID.class +INFO: Loading Class: scala/xml/dtd/NotationDecl$.class +INFO: Loading Class: scala/xml/dtd/NotationDecl.class +INFO: Loading Class: scala/xml/dtd/PCDATA$.class +INFO: Loading Class: scala/xml/dtd/PCDATA.class +INFO: Loading Class: scala/xml/dtd/PEReference$.class +INFO: Loading Class: scala/xml/dtd/PEReference.class +INFO: Loading Class: scala/xml/dtd/ParameterEntityDecl$.class +INFO: Loading Class: scala/xml/dtd/ParameterEntityDecl.class +INFO: Loading Class: scala/xml/dtd/ParsedEntityDecl$.class +INFO: Loading Class: scala/xml/dtd/ParsedEntityDecl.class +INFO: Loading Class: scala/xml/dtd/PublicID$.class +INFO: Loading Class: scala/xml/dtd/PublicID.class +INFO: Loading Class: scala/xml/dtd/REQUIRED$.class +INFO: Loading Class: scala/xml/dtd/REQUIRED.class +INFO: Loading Class: scala/xml/dtd/Scanner$$anonfun$accS$1.class +INFO: Loading Class: scala/xml/dtd/Scanner.class +INFO: Loading Class: scala/xml/dtd/SystemID$.class +INFO: Loading Class: scala/xml/dtd/SystemID.class +INFO: Loading Class: scala/xml/dtd/Tokens.class +INFO: Loading Class: scala/xml/dtd/UnparsedEntityDecl$.class +INFO: Loading Class: scala/xml/dtd/UnparsedEntityDecl.class +INFO: Loading Class: scala/xml/dtd/ValidationException$.class +INFO: Loading Class: scala/xml/dtd/ValidationException.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Alt$$anonfun$1.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Alt$.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Alt.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Eps$.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Meta.class +INFO: Loading Class: scala/xml/dtd/impl/Base$RegExp.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Sequ$$anonfun$2.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Sequ$.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Sequ.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Star$.class +INFO: Loading Class: scala/xml/dtd/impl/Base$Star.class +INFO: Loading Class: scala/xml/dtd/impl/Base.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$compFirst$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$compFollow$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$compFollow1$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$compFollow1$2.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$compLast$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$doComp$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$doComp$2.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$doComp$3.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$traverse$1.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi$$anonfun$traverse$2.class +INFO: Loading Class: scala/xml/dtd/impl/BaseBerrySethi.class +INFO: Loading Class: scala/xml/dtd/impl/DetWordAutom$$anonfun$1.class +INFO: Loading Class: scala/xml/dtd/impl/DetWordAutom$$anonfun$next$1.class +INFO: Loading Class: scala/xml/dtd/impl/DetWordAutom$$anonfun$toString$1.class +INFO: Loading Class: scala/xml/dtd/impl/DetWordAutom.class +INFO: Loading Class: scala/xml/dtd/impl/Inclusion$$anonfun$inclusion$1.class +INFO: Loading Class: scala/xml/dtd/impl/Inclusion$class.class +INFO: Loading Class: scala/xml/dtd/impl/Inclusion.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$1.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$2.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$containsFinal$1.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$finalStates$1.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$isEmpty$1.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$next$1.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$next$2.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom$$anonfun$next$3.class +INFO: Loading Class: scala/xml/dtd/impl/NondetWordAutom.class +INFO: Loading Class: scala/xml/dtd/impl/PointedHedgeExp$Node$.class +INFO: Loading Class: scala/xml/dtd/impl/PointedHedgeExp$Node.class +INFO: Loading Class: scala/xml/dtd/impl/PointedHedgeExp$Point$.class +INFO: Loading Class: scala/xml/dtd/impl/PointedHedgeExp$TopIter$.class +INFO: Loading Class: scala/xml/dtd/impl/PointedHedgeExp$TopIter.class +INFO: Loading Class: scala/xml/dtd/impl/PointedHedgeExp.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anon$1.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anonfun$determinize$1.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anonfun$determinize$2$$anonfun$apply$1.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anonfun$determinize$2$$anonfun$apply$2.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anonfun$determinize$2.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anonfun$determinize$3.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction$$anonfun$selectTag$1.class +INFO: Loading Class: scala/xml/dtd/impl/SubsetConstruction.class +INFO: Loading Class: scala/xml/dtd/impl/SyntaxError.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anon$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$1$$anonfun$apply$mcII$sp$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$2.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$3$$anonfun$apply$2.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$3.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$4.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$collectTransitions$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$collectTransitions$2$$anonfun$apply$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$collectTransitions$2.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$initialize$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$initializeAutom$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi$$anonfun$makeTransition$1.class +INFO: Loading Class: scala/xml/dtd/impl/WordBerrySethi.class +INFO: Loading Class: scala/xml/dtd/impl/WordExp$Label.class +INFO: Loading Class: scala/xml/dtd/impl/WordExp$Letter$.class +INFO: Loading Class: scala/xml/dtd/impl/WordExp$Letter.class +INFO: Loading Class: scala/xml/dtd/impl/WordExp$Wildcard$.class +INFO: Loading Class: scala/xml/dtd/impl/WordExp$Wildcard.class +INFO: Loading Class: scala/xml/dtd/impl/WordExp.class +INFO: Loading Class: scala/xml/factory/Binder$$anonfun$traverse$1.class +INFO: Loading Class: scala/xml/factory/Binder.class +INFO: Loading Class: scala/xml/factory/LoggedNodeFactory$class.class +INFO: Loading Class: scala/xml/factory/LoggedNodeFactory.class +INFO: Loading Class: scala/xml/factory/NodeFactory$$anonfun$1.class +INFO: Loading Class: scala/xml/factory/NodeFactory$$anonfun$eqElements$1.class +INFO: Loading Class: scala/xml/factory/NodeFactory$class.class +INFO: Loading Class: scala/xml/factory/NodeFactory.class +INFO: Loading Class: scala/xml/factory/XMLLoader$class.class +INFO: Loading Class: scala/xml/factory/XMLLoader.class +INFO: Loading Class: scala/xml/include/CircularIncludeException.class +INFO: Loading Class: scala/xml/include/UnavailableResourceException.class +INFO: Loading Class: scala/xml/include/XIncludeException.class +INFO: Loading Class: scala/xml/include/sax/EncodingHeuristics$.class +INFO: Loading Class: scala/xml/include/sax/EncodingHeuristics$EncodingNames$.class +INFO: Loading Class: scala/xml/include/sax/EncodingHeuristics.class +INFO: Loading Class: scala/xml/include/sax/XIncludeFilter.class +INFO: Loading Class: scala/xml/include/sax/XIncluder.class +INFO: Loading Class: scala/xml/package$.class +INFO: Loading Class: scala/xml/package.class +INFO: Loading Class: scala/xml/parsing/ConsoleErrorHandler$$anonfun$printError$1.class +INFO: Loading Class: scala/xml/parsing/ConsoleErrorHandler$class.class +INFO: Loading Class: scala/xml/parsing/ConsoleErrorHandler.class +INFO: Loading Class: scala/xml/parsing/ConstructingHandler.class +INFO: Loading Class: scala/xml/parsing/ConstructingParser$.class +INFO: Loading Class: scala/xml/parsing/ConstructingParser.class +INFO: Loading Class: scala/xml/parsing/DefaultMarkupHandler.class +INFO: Loading Class: scala/xml/parsing/ExternalSources$class.class +INFO: Loading Class: scala/xml/parsing/ExternalSources.class +INFO: Loading Class: scala/xml/parsing/FactoryAdapter$$anonfun$1.class +INFO: Loading Class: scala/xml/parsing/FactoryAdapter$$anonfun$2.class +INFO: Loading Class: scala/xml/parsing/FactoryAdapter$$anonfun$characters$1.class +INFO: Loading Class: scala/xml/parsing/FactoryAdapter$$anonfun$startElement$1.class +INFO: Loading Class: scala/xml/parsing/FactoryAdapter.class +INFO: Loading Class: scala/xml/parsing/FatalError$.class +INFO: Loading Class: scala/xml/parsing/FatalError.class +INFO: Loading Class: scala/xml/parsing/MarkupHandler$$anonfun$lookupElemDecl$1.class +INFO: Loading Class: scala/xml/parsing/MarkupHandler$$anonfun$lookupElemDecl$2.class +INFO: Loading Class: scala/xml/parsing/MarkupHandler$$anonfun$parameterEntityDecl$1.class +INFO: Loading Class: scala/xml/parsing/MarkupHandler$$anonfun$parsedEntityDecl$1.class +INFO: Loading Class: scala/xml/parsing/MarkupHandler.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anon$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anon$4.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anonfun$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anonfun$2.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anonfun$appendText$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anonfun$document$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anonfun$xCharData$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$$anonfun$xCharData$2.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$WithLookAhead$$anon$2.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$WithLookAhead$$anonfun$3$$anon$3.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$WithLookAhead$$anonfun$3.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$WithLookAhead.class +INFO: Loading Class: scala/xml/parsing/MarkupParser$class.class +INFO: Loading Class: scala/xml/parsing/MarkupParser.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$peek$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$2.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$3.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$4.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$5.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$6.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$7.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xCharRef$8.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xProcInstr$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xProcInstr$2.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$$anonfun$xToken$1.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon$class.class +INFO: Loading Class: scala/xml/parsing/MarkupParserCommon.class +INFO: Loading Class: scala/xml/parsing/NoBindingFactoryAdapter.class +INFO: Loading Class: scala/xml/parsing/TokenTests$$anonfun$checkPubID$1.class +INFO: Loading Class: scala/xml/parsing/TokenTests$$anonfun$checkSysID$1.class +INFO: Loading Class: scala/xml/parsing/TokenTests$$anonfun$isName$1.class +INFO: Loading Class: scala/xml/parsing/TokenTests$$anonfun$isSpace$1.class +INFO: Loading Class: scala/xml/parsing/TokenTests$$anonfun$isValidIANAEncoding$1.class +INFO: Loading Class: scala/xml/parsing/TokenTests$class.class +INFO: Loading Class: scala/xml/parsing/TokenTests.class +INFO: Loading Class: scala/xml/parsing/ValidatingMarkupHandler.class +INFO: Loading Class: scala/xml/parsing/XhtmlEntities$$anonfun$1.class +INFO: Loading Class: scala/xml/parsing/XhtmlEntities$$anonfun$2.class +INFO: Loading Class: scala/xml/parsing/XhtmlEntities$.class +INFO: Loading Class: scala/xml/parsing/XhtmlEntities.class +INFO: Loading Class: scala/xml/parsing/XhtmlParser$.class +INFO: Loading Class: scala/xml/parsing/XhtmlParser.class +INFO: Loading Class: scala/xml/persistent/CachedFileStorage.class +INFO: Loading Class: scala/xml/persistent/Index.class +INFO: Loading Class: scala/xml/persistent/SetStorage.class +INFO: Loading Class: scala/xml/pull/EvComment$.class +INFO: Loading Class: scala/xml/pull/EvComment.class +INFO: Loading Class: scala/xml/pull/EvElemEnd$.class +INFO: Loading Class: scala/xml/pull/EvElemEnd.class +INFO: Loading Class: scala/xml/pull/EvElemStart$.class +INFO: Loading Class: scala/xml/pull/EvElemStart.class +INFO: Loading Class: scala/xml/pull/EvEntityRef$.class +INFO: Loading Class: scala/xml/pull/EvEntityRef.class +INFO: Loading Class: scala/xml/pull/EvProcInstr$.class +INFO: Loading Class: scala/xml/pull/EvProcInstr.class +INFO: Loading Class: scala/xml/pull/EvText$.class +INFO: Loading Class: scala/xml/pull/EvText.class +INFO: Loading Class: scala/xml/pull/ExceptionEvent$.class +INFO: Loading Class: scala/xml/pull/ExceptionEvent.class +INFO: Loading Class: scala/xml/pull/ProducerConsumerIterator$$anonfun$fillBuffer$1.class +INFO: Loading Class: scala/xml/pull/ProducerConsumerIterator$$anonfun$fillBuffer$2.class +INFO: Loading Class: scala/xml/pull/ProducerConsumerIterator$$anonfun$produce$1.class +INFO: Loading Class: scala/xml/pull/ProducerConsumerIterator$class.class +INFO: Loading Class: scala/xml/pull/ProducerConsumerIterator.class +INFO: Loading Class: scala/xml/pull/XMLEvent.class +INFO: Loading Class: scala/xml/pull/XMLEventReader$POISON$.class +INFO: Loading Class: scala/xml/pull/XMLEventReader$Parser$$anonfun$run$1.class +INFO: Loading Class: scala/xml/pull/XMLEventReader$Parser$$anonfun$setEvent$1.class +INFO: Loading Class: scala/xml/pull/XMLEventReader$Parser.class +INFO: Loading Class: scala/xml/pull/XMLEventReader.class +INFO: Loading Class: scala/xml/pull/package$.class +INFO: Loading Class: scala/xml/pull/package.class +INFO: Loading Class: scala/xml/transform/BasicTransformer$$anonfun$1.class +INFO: Loading Class: scala/xml/transform/BasicTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/xml/transform/BasicTransformer.class +INFO: Loading Class: scala/xml/transform/RewriteRule.class +INFO: Loading Class: scala/xml/transform/RuleTransformer$$anonfun$transform$1.class +INFO: Loading Class: scala/xml/transform/RuleTransformer.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/lzma/lzma/0.0.1/521616dc7487b42bef0e803bd2fa3faf668101d7/lzma-0.0.1.jar +INFO: Loading Class: LZMA/CRangeDecoder.class +INFO: Loading Class: LZMA/LzmaException.class +INFO: Loading Class: LZMA/LzmaInputStream.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.sf.trove4j/trove4j/3.0.3/42ccaf4761f0dfdfa805c9e340d99a755907e2dd/trove4j-3.0.3.jar +INFO: Loading Class: gnu/trove/TByteCollection.class +INFO: Loading Class: gnu/trove/TCharCollection.class +INFO: Loading Class: gnu/trove/TCollections.class +INFO: Loading Class: gnu/trove/TDecorators.class +INFO: Loading Class: gnu/trove/TDoubleCollection.class +INFO: Loading Class: gnu/trove/TFloatCollection.class +INFO: Loading Class: gnu/trove/TIntCollection.class +INFO: Loading Class: gnu/trove/TLongCollection.class +INFO: Loading Class: gnu/trove/TShortCollection.class +INFO: Loading Class: gnu/trove/Version.class +INFO: Loading Class: gnu/trove/decorator/TByteByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TByteShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TByteShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TByteShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TCharShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TCharShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TCharShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TDoubleShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TDoubleShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TFloatShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TFloatShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TIntShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TIntShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TIntShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TLongShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TLongShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TLongShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TObjectShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TObjectShortMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortByteMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortByteMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortByteMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortByteMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortCharMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortCharMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortCharMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortCharMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortDoubleMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortDoubleMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortDoubleMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortDoubleMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortFloatMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortFloatMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortFloatMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortFloatMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortIntMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortIntMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortIntMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortIntMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortListDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortLongMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortLongMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortLongMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortLongMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortObjectMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortObjectMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortObjectMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortObjectMapDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortSetDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortSetDecorator.class +INFO: Loading Class: gnu/trove/decorator/TShortShortMapDecorator$1$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortShortMapDecorator$1$1.class +INFO: Loading Class: gnu/trove/decorator/TShortShortMapDecorator$1.class +INFO: Loading Class: gnu/trove/decorator/TShortShortMapDecorator.class +INFO: Loading Class: gnu/trove/function/TByteFunction.class +INFO: Loading Class: gnu/trove/function/TCharFunction.class +INFO: Loading Class: gnu/trove/function/TDoubleFunction.class +INFO: Loading Class: gnu/trove/function/TFloatFunction.class +INFO: Loading Class: gnu/trove/function/TIntFunction.class +INFO: Loading Class: gnu/trove/function/TLongFunction.class +INFO: Loading Class: gnu/trove/function/TObjectFunction.class +INFO: Loading Class: gnu/trove/function/TShortFunction.class +INFO: Loading Class: gnu/trove/impl/Constants.class +INFO: Loading Class: gnu/trove/impl/HashFunctions.class +INFO: Loading Class: gnu/trove/impl/PrimeFinder.class +INFO: Loading Class: gnu/trove/impl/hash/TByteByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TByteShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCharShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/TCustomObjectHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TDoubleShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TFloatShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/THash.class +INFO: Loading Class: gnu/trove/impl/hash/THashIterator.class +INFO: Loading Class: gnu/trove/impl/hash/THashPrimitiveIterator.class +INFO: Loading Class: gnu/trove/impl/hash/TIntByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TIntShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TLongShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/TObjectHash.class +INFO: Loading Class: gnu/trove/impl/hash/TPrimitiveHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortByteHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortCharHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortDoubleHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortFloatHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortIntHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortLongHash.class +INFO: Loading Class: gnu/trove/impl/hash/TShortShortHash.class +INFO: Loading Class: gnu/trove/impl/sync/SynchronizedCollection.class +INFO: Loading Class: gnu/trove/impl/sync/SynchronizedSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedByteShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedCharShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedDoubleShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedFloatShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedIntShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedLongShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedObjectShortMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessByteList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessCharList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessDoubleList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessFloatList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessIntList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessLongList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedRandomAccessShortList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortByteMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortCharMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortCollection.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortDoubleMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortFloatMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortIntMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortList.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortLongMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortObjectMap.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortSet.class +INFO: Loading Class: gnu/trove/impl/sync/TSynchronizedShortShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableByteShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableCharShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableDoubleShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableFloatShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableIntShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableLongShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableObjectShortMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessByteList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessCharList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessDoubleList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessFloatList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessIntList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessLongList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableRandomAccessShortList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortByteMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortByteMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortCharMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortCharMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortCollection$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortCollection.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortDoubleMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortDoubleMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortFloatMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortFloatMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortIntMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortIntMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortList.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortLongMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortLongMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortObjectMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortObjectMap.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortSet.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortShortMap$1.class +INFO: Loading Class: gnu/trove/impl/unmodifiable/TUnmodifiableShortShortMap.class +INFO: Loading Class: gnu/trove/iterator/TAdvancingIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TByteShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TCharShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TDoubleShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TFloatShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TIntShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TLongShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TObjectShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TPrimitiveIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortByteIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortCharIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortDoubleIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortFloatIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortIntIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortLongIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortObjectIterator.class +INFO: Loading Class: gnu/trove/iterator/TShortShortIterator.class +INFO: Loading Class: gnu/trove/iterator/hash/TObjectHashIterator.class +INFO: Loading Class: gnu/trove/list/TByteList.class +INFO: Loading Class: gnu/trove/list/TCharList.class +INFO: Loading Class: gnu/trove/list/TDoubleList.class +INFO: Loading Class: gnu/trove/list/TFloatList.class +INFO: Loading Class: gnu/trove/list/TIntList.class +INFO: Loading Class: gnu/trove/list/TLinkable.class +INFO: Loading Class: gnu/trove/list/TLinkableAdapter.class +INFO: Loading Class: gnu/trove/list/TLongList.class +INFO: Loading Class: gnu/trove/list/TShortList.class +INFO: Loading Class: gnu/trove/list/array/TByteArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TByteArrayList$TByteArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TByteArrayList.class +INFO: Loading Class: gnu/trove/list/array/TCharArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TCharArrayList$TCharArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TCharArrayList.class +INFO: Loading Class: gnu/trove/list/array/TDoubleArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TDoubleArrayList$TDoubleArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TDoubleArrayList.class +INFO: Loading Class: gnu/trove/list/array/TFloatArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TFloatArrayList$TFloatArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TFloatArrayList.class +INFO: Loading Class: gnu/trove/list/array/TIntArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TIntArrayList$TIntArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TIntArrayList.class +INFO: Loading Class: gnu/trove/list/array/TLongArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TLongArrayList$TLongArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TLongArrayList.class +INFO: Loading Class: gnu/trove/list/array/TShortArrayList$1.class +INFO: Loading Class: gnu/trove/list/array/TShortArrayList$TShortArrayIterator.class +INFO: Loading Class: gnu/trove/list/array/TShortArrayList.class +INFO: Loading Class: gnu/trove/list/linked/TByteLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TByteLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TByteLinkedList$TByteLink.class +INFO: Loading Class: gnu/trove/list/linked/TByteLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TCharLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TCharLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TCharLinkedList$TCharLink.class +INFO: Loading Class: gnu/trove/list/linked/TCharLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TDoubleLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TDoubleLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TDoubleLinkedList$TDoubleLink.class +INFO: Loading Class: gnu/trove/list/linked/TDoubleLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TFloatLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TFloatLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TFloatLinkedList$TFloatLink.class +INFO: Loading Class: gnu/trove/list/linked/TFloatLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TIntLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TIntLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TIntLinkedList$TIntLink.class +INFO: Loading Class: gnu/trove/list/linked/TIntLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TLinkedList$IteratorImpl.class +INFO: Loading Class: gnu/trove/list/linked/TLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TLongLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TLongLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TLongLinkedList$TLongLink.class +INFO: Loading Class: gnu/trove/list/linked/TLongLinkedList.class +INFO: Loading Class: gnu/trove/list/linked/TShortLinkedList$1.class +INFO: Loading Class: gnu/trove/list/linked/TShortLinkedList$RemoveProcedure.class +INFO: Loading Class: gnu/trove/list/linked/TShortLinkedList$TShortLink.class +INFO: Loading Class: gnu/trove/list/linked/TShortLinkedList.class +INFO: Loading Class: gnu/trove/map/TByteByteMap.class +INFO: Loading Class: gnu/trove/map/TByteCharMap.class +INFO: Loading Class: gnu/trove/map/TByteDoubleMap.class +INFO: Loading Class: gnu/trove/map/TByteFloatMap.class +INFO: Loading Class: gnu/trove/map/TByteIntMap.class +INFO: Loading Class: gnu/trove/map/TByteLongMap.class +INFO: Loading Class: gnu/trove/map/TByteObjectMap.class +INFO: Loading Class: gnu/trove/map/TByteShortMap.class +INFO: Loading Class: gnu/trove/map/TCharByteMap.class +INFO: Loading Class: gnu/trove/map/TCharCharMap.class +INFO: Loading Class: gnu/trove/map/TCharDoubleMap.class +INFO: Loading Class: gnu/trove/map/TCharFloatMap.class +INFO: Loading Class: gnu/trove/map/TCharIntMap.class +INFO: Loading Class: gnu/trove/map/TCharLongMap.class +INFO: Loading Class: gnu/trove/map/TCharObjectMap.class +INFO: Loading Class: gnu/trove/map/TCharShortMap.class +INFO: Loading Class: gnu/trove/map/TDoubleByteMap.class +INFO: Loading Class: gnu/trove/map/TDoubleCharMap.class +INFO: Loading Class: gnu/trove/map/TDoubleDoubleMap.class +INFO: Loading Class: gnu/trove/map/TDoubleFloatMap.class +INFO: Loading Class: gnu/trove/map/TDoubleIntMap.class +INFO: Loading Class: gnu/trove/map/TDoubleLongMap.class +INFO: Loading Class: gnu/trove/map/TDoubleObjectMap.class +INFO: Loading Class: gnu/trove/map/TDoubleShortMap.class +INFO: Loading Class: gnu/trove/map/TFloatByteMap.class +INFO: Loading Class: gnu/trove/map/TFloatCharMap.class +INFO: Loading Class: gnu/trove/map/TFloatDoubleMap.class +INFO: Loading Class: gnu/trove/map/TFloatFloatMap.class +INFO: Loading Class: gnu/trove/map/TFloatIntMap.class +INFO: Loading Class: gnu/trove/map/TFloatLongMap.class +INFO: Loading Class: gnu/trove/map/TFloatObjectMap.class +INFO: Loading Class: gnu/trove/map/TFloatShortMap.class +INFO: Loading Class: gnu/trove/map/TIntByteMap.class +INFO: Loading Class: gnu/trove/map/TIntCharMap.class +INFO: Loading Class: gnu/trove/map/TIntDoubleMap.class +INFO: Loading Class: gnu/trove/map/TIntFloatMap.class +INFO: Loading Class: gnu/trove/map/TIntIntMap.class +INFO: Loading Class: gnu/trove/map/TIntLongMap.class +INFO: Loading Class: gnu/trove/map/TIntObjectMap.class +INFO: Loading Class: gnu/trove/map/TIntShortMap.class +INFO: Loading Class: gnu/trove/map/TLongByteMap.class +INFO: Loading Class: gnu/trove/map/TLongCharMap.class +INFO: Loading Class: gnu/trove/map/TLongDoubleMap.class +INFO: Loading Class: gnu/trove/map/TLongFloatMap.class +INFO: Loading Class: gnu/trove/map/TLongIntMap.class +INFO: Loading Class: gnu/trove/map/TLongLongMap.class +INFO: Loading Class: gnu/trove/map/TLongObjectMap.class +INFO: Loading Class: gnu/trove/map/TLongShortMap.class +INFO: Loading Class: gnu/trove/map/TMap.class +INFO: Loading Class: gnu/trove/map/TObjectByteMap.class +INFO: Loading Class: gnu/trove/map/TObjectCharMap.class +INFO: Loading Class: gnu/trove/map/TObjectDoubleMap.class +INFO: Loading Class: gnu/trove/map/TObjectFloatMap.class +INFO: Loading Class: gnu/trove/map/TObjectIntMap.class +INFO: Loading Class: gnu/trove/map/TObjectLongMap.class +INFO: Loading Class: gnu/trove/map/TObjectShortMap.class +INFO: Loading Class: gnu/trove/map/TShortByteMap.class +INFO: Loading Class: gnu/trove/map/TShortCharMap.class +INFO: Loading Class: gnu/trove/map/TShortDoubleMap.class +INFO: Loading Class: gnu/trove/map/TShortFloatMap.class +INFO: Loading Class: gnu/trove/map/TShortIntMap.class +INFO: Loading Class: gnu/trove/map/TShortLongMap.class +INFO: Loading Class: gnu/trove/map/TShortObjectMap.class +INFO: Loading Class: gnu/trove/map/TShortShortMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$TByteValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$TByteValueCollection$TObjectByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$TByteValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap$TObjectByteHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectByteCustomHashMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$TCharValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$TCharValueCollection$TObjectCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$TCharValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap$TObjectCharHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectCharCustomHashMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$TDoubleValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$TDoubleValueCollection$TObjectDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$TDoubleValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap$TObjectDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectDoubleCustomHashMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$TFloatValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$TFloatValueCollection$TObjectFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$TFloatValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap$TObjectFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectFloatCustomHashMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$TIntValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$TIntValueCollection$TObjectIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$TIntValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap$TObjectIntHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectIntCustomHashMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$TLongValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$TLongValueCollection$TObjectLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$TLongValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap$TObjectLongHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectLongCustomHashMap.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$2.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$TObjectShortHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$TShortValueCollection$1.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$TShortValueCollection$TObjectShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap$TShortValueCollection.class +INFO: Loading Class: gnu/trove/map/custom_hash/TObjectShortCustomHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TByteByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TByteByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TByteByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TByteCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TByteCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TByteCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TByteDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TByteDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TByteDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TByteFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TByteFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TByteFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TByteIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TByteIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TByteIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TByteLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TByteLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TByteLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$KeyView$TByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$TByteObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$ValueView$TByteObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TByteShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TByteShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TByteShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TByteShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TCharByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TCharByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TCharByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TCharCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TCharCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TCharCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TCharDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TCharDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TCharDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TCharFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TCharFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TCharFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TCharIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TCharIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TCharIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TCharLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TCharLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TCharLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$KeyView$TCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$TCharObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$ValueView$TCharObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TCharShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TCharShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TCharShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCharShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$Entry.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$EntryView$EntryIterator.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$EntryView.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$EqProcedure.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$HashProcedure.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TCustomHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TDoubleByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TDoubleByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TDoubleByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TDoubleCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TDoubleCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TDoubleCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TDoubleDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TDoubleDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TDoubleDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TDoubleFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TDoubleFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TDoubleFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TDoubleIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TDoubleIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TDoubleIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TDoubleLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TDoubleLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TDoubleLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$KeyView$TDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$TDoubleObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$ValueView$TDoubleObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TDoubleShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TDoubleShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TDoubleShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TDoubleShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TFloatByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TFloatByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TFloatByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TFloatCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TFloatCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TFloatCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TFloatDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TFloatDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TFloatDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TFloatFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TFloatFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TFloatFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TFloatIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TFloatIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TFloatIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TFloatLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TFloatLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TFloatLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$KeyView$TFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$TFloatObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$ValueView$TFloatObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TFloatShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TFloatShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TFloatShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TFloatShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$Entry.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$EntryView$EntryIterator.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$EntryView.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$EqProcedure.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$HashProcedure.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/THashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/THashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TIntByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TIntByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TIntByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TIntCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TIntCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TIntCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TIntDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TIntDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TIntDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TIntFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TIntFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TIntFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TIntIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TIntIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TIntIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TIntLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TIntLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TIntLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$KeyView$TIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$TIntObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$ValueView$TIntObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TIntShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TIntShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TIntShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TIntShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TLongByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TLongByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TLongByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TLongCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TLongCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TLongCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TLongDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TLongDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TLongDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TLongFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TLongFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TLongFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TLongIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TLongIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TLongIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TLongLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TLongLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TLongLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$KeyView$TLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$TLongObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$ValueView$TLongObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TLongShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TLongShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TLongShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TLongShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$TByteValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$TByteValueCollection$TObjectByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$TByteValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap$TObjectByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$TCharValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$TCharValueCollection$TObjectCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$TCharValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap$TObjectCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$TDoubleValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$TDoubleValueCollection$TObjectDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$TDoubleValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap$TObjectDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$TFloatValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$TFloatValueCollection$TObjectFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$TFloatValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap$TObjectFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$TIntValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$TIntValueCollection$TObjectIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$TIntValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap$TObjectIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$TLongValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$TLongValueCollection$TObjectLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$TLongValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap$TObjectLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$TObjectShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$TShortValueCollection$1.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$TShortValueCollection$TObjectShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap$TShortValueCollection.class +INFO: Loading Class: gnu/trove/map/hash/TObjectShortHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TShortByteHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TShortByteKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TShortByteValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortByteHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TShortCharHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TShortCharKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TShortCharValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortCharHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TShortDoubleHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TShortDoubleKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TShortDoubleValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortDoubleHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TShortFloatHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TShortFloatKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TShortFloatValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortFloatHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TShortIntHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TShortIntKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TShortIntValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortIntHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TShortLongHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TShortLongKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TShortLongValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortLongHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$2.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$KeyView$TShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$KeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$MapBackedView.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$TShortObjectHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$ValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$ValueView$TShortObjectValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap$ValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortObjectHashMap.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TKeyView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TKeyView.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TShortShortHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TShortShortKeyHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TShortShortValueHashIterator.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TValueView$1.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap$TValueView.class +INFO: Loading Class: gnu/trove/map/hash/TShortShortHashMap.class +INFO: Loading Class: gnu/trove/procedure/TByteByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TByteShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TCharShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TDoubleShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TFloatShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TIntShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TLongShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TObjectShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortByteProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortCharProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortDoubleProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortFloatProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortIntProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortLongProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortObjectProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/TShortShortProcedure.class +INFO: Loading Class: gnu/trove/procedure/array/ToObjectArrayProceedure.class +INFO: Loading Class: gnu/trove/queue/TByteQueue.class +INFO: Loading Class: gnu/trove/queue/TCharQueue.class +INFO: Loading Class: gnu/trove/queue/TDoubleQueue.class +INFO: Loading Class: gnu/trove/queue/TFloatQueue.class +INFO: Loading Class: gnu/trove/queue/TIntQueue.class +INFO: Loading Class: gnu/trove/queue/TLongQueue.class +INFO: Loading Class: gnu/trove/queue/TShortQueue.class +INFO: Loading Class: gnu/trove/set/TByteSet.class +INFO: Loading Class: gnu/trove/set/TCharSet.class +INFO: Loading Class: gnu/trove/set/TDoubleSet.class +INFO: Loading Class: gnu/trove/set/TFloatSet.class +INFO: Loading Class: gnu/trove/set/TIntSet.class +INFO: Loading Class: gnu/trove/set/TLongSet.class +INFO: Loading Class: gnu/trove/set/TShortSet.class +INFO: Loading Class: gnu/trove/set/hash/TByteHashSet$TByteHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TByteHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TCharHashSet$TCharHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TCharHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TCustomHashSet$1.class +INFO: Loading Class: gnu/trove/set/hash/TCustomHashSet$HashProcedure.class +INFO: Loading Class: gnu/trove/set/hash/TCustomHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TDoubleHashSet$TDoubleHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TDoubleHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TFloatHashSet$TFloatHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TFloatHashSet.class +INFO: Loading Class: gnu/trove/set/hash/THashSet$1.class +INFO: Loading Class: gnu/trove/set/hash/THashSet$HashProcedure.class +INFO: Loading Class: gnu/trove/set/hash/THashSet.class +INFO: Loading Class: gnu/trove/set/hash/TIntHashSet$TIntHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TIntHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TLinkedHashSet$1.class +INFO: Loading Class: gnu/trove/set/hash/TLinkedHashSet$2.class +INFO: Loading Class: gnu/trove/set/hash/TLinkedHashSet$ForEachProcedure.class +INFO: Loading Class: gnu/trove/set/hash/TLinkedHashSet$WriteProcedure.class +INFO: Loading Class: gnu/trove/set/hash/TLinkedHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TLongHashSet$TLongHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TLongHashSet.class +INFO: Loading Class: gnu/trove/set/hash/TShortHashSet$TShortHashIterator.class +INFO: Loading Class: gnu/trove/set/hash/TShortHashSet.class +INFO: Loading Class: gnu/trove/stack/TByteStack.class +INFO: Loading Class: gnu/trove/stack/TCharStack.class +INFO: Loading Class: gnu/trove/stack/TDoubleStack.class +INFO: Loading Class: gnu/trove/stack/TFloatStack.class +INFO: Loading Class: gnu/trove/stack/TIntStack.class +INFO: Loading Class: gnu/trove/stack/TLongStack.class +INFO: Loading Class: gnu/trove/stack/TShortStack.class +INFO: Loading Class: gnu/trove/stack/array/TByteArrayStack.class +INFO: Loading Class: gnu/trove/stack/array/TCharArrayStack.class +INFO: Loading Class: gnu/trove/stack/array/TDoubleArrayStack.class +INFO: Loading Class: gnu/trove/stack/array/TFloatArrayStack.class +INFO: Loading Class: gnu/trove/stack/array/TIntArrayStack.class +INFO: Loading Class: gnu/trove/stack/array/TLongArrayStack.class +INFO: Loading Class: gnu/trove/stack/array/TShortArrayStack.class +INFO: Loading Class: gnu/trove/strategy/HashingStrategy.class +INFO: Loading Class: gnu/trove/strategy/IdentityHashingStrategy.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.apache.maven/maven-artifact/3.5.3/7dc72b6d6d8a6dced3d294ed54c2cc3515ade9f4/maven-artifact-3.5.3.jar +INFO: Loading Class: org/apache/maven/artifact/metadata/ArtifactMetadata.class +INFO: Loading Class: org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ComparableVersion$Item.class +INFO: Loading Class: org/apache/maven/artifact/versioning/VersionRange.class +INFO: Loading Class: org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.class +INFO: Loading Class: org/apache/maven/artifact/resolver/CyclicDependencyException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ComparableVersion$StringItem.class +INFO: Loading Class: org/apache/maven/repository/Proxy.class +INFO: Loading Class: org/apache/maven/artifact/repository/ArtifactRepository.class +INFO: Loading Class: org/apache/maven/artifact/resolver/ArtifactResolutionException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ComparableVersion$ListItem.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ComparableVersion.class +INFO: Loading Class: org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.class +INFO: Loading Class: org/apache/maven/artifact/Artifact.class +INFO: Loading Class: org/apache/maven/artifact/repository/Authentication.class +INFO: Loading Class: org/apache/maven/artifact/resolver/filter/ArtifactFilter.class +INFO: Loading Class: org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/DefaultArtifactVersion.class +INFO: Loading Class: org/apache/maven/artifact/ArtifactUtils.class +INFO: Loading Class: org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.class +INFO: Loading Class: org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ArtifactVersion.class +INFO: Loading Class: org/apache/maven/artifact/DefaultArtifact.class +INFO: Loading Class: org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ComparableVersion$1.class +INFO: Loading Class: org/apache/maven/artifact/versioning/OverConstrainedVersionException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/Restriction.class +INFO: Loading Class: org/apache/maven/artifact/handler/ArtifactHandler.class +INFO: Loading Class: org/apache/maven/repository/legacy/metadata/ArtifactMetadata.class +INFO: Loading Class: org/apache/maven/artifact/InvalidArtifactRTException.class +INFO: Loading Class: org/apache/maven/artifact/resolver/ArtifactNotFoundException.class +INFO: Loading Class: org/apache/maven/artifact/versioning/ComparableVersion$IntegerItem.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.paulscode/codecjorbis/20101023/c73b5636faf089d9f00e8732a829577de25237ee/codecjorbis-20101023.jar +INFO: Loading Class: com/jcraft/jogg/Buffer.class +INFO: Loading Class: com/jcraft/jogg/Packet.class +INFO: Loading Class: com/jcraft/jogg/Page.class +INFO: Loading Class: com/jcraft/jogg/StreamState.class +INFO: Loading Class: com/jcraft/jogg/SyncState.class +INFO: Loading Class: com/jcraft/jorbis/Block.class +INFO: Loading Class: com/jcraft/jorbis/ChainingExample.class +INFO: Loading Class: com/jcraft/jorbis/CodeBook$DecodeAux.class +INFO: Loading Class: com/jcraft/jorbis/CodeBook.class +INFO: Loading Class: com/jcraft/jorbis/Comment.class +INFO: Loading Class: com/jcraft/jorbis/DecodeExample.class +INFO: Loading Class: com/jcraft/jorbis/Drft.class +INFO: Loading Class: com/jcraft/jorbis/DspState.class +INFO: Loading Class: com/jcraft/jorbis/Floor0$EchstateFloor0.class +INFO: Loading Class: com/jcraft/jorbis/Floor0$InfoFloor0.class +INFO: Loading Class: com/jcraft/jorbis/Floor0$LookFloor0.class +INFO: Loading Class: com/jcraft/jorbis/Floor0.class +INFO: Loading Class: com/jcraft/jorbis/Floor1$EchstateFloor1.class +INFO: Loading Class: com/jcraft/jorbis/Floor1$InfoFloor1.class +INFO: Loading Class: com/jcraft/jorbis/Floor1$LookFloor1.class +INFO: Loading Class: com/jcraft/jorbis/Floor1$Lsfit_acc.class +INFO: Loading Class: com/jcraft/jorbis/Floor1.class +INFO: Loading Class: com/jcraft/jorbis/FuncFloor.class +INFO: Loading Class: com/jcraft/jorbis/FuncMapping.class +INFO: Loading Class: com/jcraft/jorbis/FuncResidue.class +INFO: Loading Class: com/jcraft/jorbis/FuncTime.class +INFO: Loading Class: com/jcraft/jorbis/Info.class +INFO: Loading Class: com/jcraft/jorbis/InfoMode.class +INFO: Loading Class: com/jcraft/jorbis/JOrbisException.class +INFO: Loading Class: com/jcraft/jorbis/Lookup.class +INFO: Loading Class: com/jcraft/jorbis/Lpc.class +INFO: Loading Class: com/jcraft/jorbis/Lsp.class +INFO: Loading Class: com/jcraft/jorbis/Mapping0$InfoMapping0.class +INFO: Loading Class: com/jcraft/jorbis/Mapping0$LookMapping0.class +INFO: Loading Class: com/jcraft/jorbis/Mapping0.class +INFO: Loading Class: com/jcraft/jorbis/Mdct.class +INFO: Loading Class: com/jcraft/jorbis/PsyInfo.class +INFO: Loading Class: com/jcraft/jorbis/PsyLook.class +INFO: Loading Class: com/jcraft/jorbis/Residue0$InfoResidue0.class +INFO: Loading Class: com/jcraft/jorbis/Residue0$LookResidue0.class +INFO: Loading Class: com/jcraft/jorbis/Residue0.class +INFO: Loading Class: com/jcraft/jorbis/Residue1.class +INFO: Loading Class: com/jcraft/jorbis/Residue2.class +INFO: Loading Class: com/jcraft/jorbis/StaticCodeBook.class +INFO: Loading Class: com/jcraft/jorbis/Time0.class +INFO: Loading Class: com/jcraft/jorbis/Util.class +INFO: Loading Class: com/jcraft/jorbis/VorbisFile$SeekableInputStream.class +INFO: Loading Class: com/jcraft/jorbis/VorbisFile.class +INFO: Loading Class: paulscode/sound/codecs/CodecJOrbis.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.paulscode/codecwav/20101023/12f031cfe88fef5c1dd36c563c0a3a69bd7261da/codecwav-20101023.jar +INFO: Loading Class: paulscode/sound/codecs/CodecWav.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.paulscode/libraryjavasound/20101123/5c5e304366f75f9eaa2e8cca546a1fb6109348b3/libraryjavasound-20101123.jar +INFO: Loading Class: paulscode/sound/libraries/ChannelJavaSound.class +INFO: Loading Class: paulscode/sound/libraries/LibraryJavaSound$Exception.class +INFO: Loading Class: paulscode/sound/libraries/LibraryJavaSound$MixerRanking.class +INFO: Loading Class: paulscode/sound/libraries/LibraryJavaSound.class +INFO: Loading Class: paulscode/sound/libraries/SourceJavaSound.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.paulscode/librarylwjglopenal/20100824/73e80d0794c39665aec3f62eee88ca91676674ef/librarylwjglopenal-20100824.jar +INFO: Loading Class: paulscode/sound/libraries/ChannelLWJGLOpenAL.class +INFO: Loading Class: paulscode/sound/libraries/LibraryLWJGLOpenAL$Exception.class +INFO: Loading Class: paulscode/sound/libraries/LibraryLWJGLOpenAL.class +INFO: Loading Class: paulscode/sound/libraries/SourceLWJGLOpenAL.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/com.paulscode/soundsystem/20120107/419c05fe9be71f792b2d76cfc9b67f1ed0fec7f6/soundsystem-20120107.jar +INFO: Loading Class: paulscode/sound/Channel.class +INFO: Loading Class: paulscode/sound/CommandObject.class +INFO: Loading Class: paulscode/sound/CommandThread.class +INFO: Loading Class: paulscode/sound/FilenameURL.class +INFO: Loading Class: paulscode/sound/ICodec.class +INFO: Loading Class: paulscode/sound/IStreamListener.class +INFO: Loading Class: paulscode/sound/Library.class +INFO: Loading Class: paulscode/sound/ListenerData.class +INFO: Loading Class: paulscode/sound/MidiChannel$1.class +INFO: Loading Class: paulscode/sound/MidiChannel$FadeThread.class +INFO: Loading Class: paulscode/sound/MidiChannel.class +INFO: Loading Class: paulscode/sound/SimpleThread$1.class +INFO: Loading Class: paulscode/sound/SimpleThread.class +INFO: Loading Class: paulscode/sound/SoundBuffer.class +INFO: Loading Class: paulscode/sound/SoundSystem.class +INFO: Loading Class: paulscode/sound/SoundSystemConfig$1.class +INFO: Loading Class: paulscode/sound/SoundSystemConfig$Codec.class +INFO: Loading Class: paulscode/sound/SoundSystemConfig.class +INFO: Loading Class: paulscode/sound/SoundSystemException.class +INFO: Loading Class: paulscode/sound/SoundSystemLogger.class +INFO: Loading Class: paulscode/sound/Source.class +INFO: Loading Class: paulscode/sound/StreamThread.class +INFO: Loading Class: paulscode/sound/Vector3D.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput/2.0.5/39c7796b469a600f72380316f6b1f11db6c2c7c4/jinput-2.0.5.jar +INFO: Loading Class: net/java/games/input/AWTEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/AWTKeyMap.class +INFO: Loading Class: net/java/games/input/AWTKeyboard$Key.class +INFO: Loading Class: net/java/games/input/AWTKeyboard.class +INFO: Loading Class: net/java/games/input/AWTMouse$Axis.class +INFO: Loading Class: net/java/games/input/AWTMouse$Button.class +INFO: Loading Class: net/java/games/input/AWTMouse.class +INFO: Loading Class: net/java/games/input/AbstractComponent.class +INFO: Loading Class: net/java/games/input/AbstractController.class +INFO: Loading Class: net/java/games/input/ButtonUsage.class +INFO: Loading Class: net/java/games/input/Component$Identifier$Axis.class +INFO: Loading Class: net/java/games/input/Component$Identifier$Button.class +INFO: Loading Class: net/java/games/input/Component$Identifier$Key.class +INFO: Loading Class: net/java/games/input/Component$Identifier.class +INFO: Loading Class: net/java/games/input/Component$POV.class +INFO: Loading Class: net/java/games/input/Component.class +INFO: Loading Class: net/java/games/input/Controller$PortType.class +INFO: Loading Class: net/java/games/input/Controller$Type.class +INFO: Loading Class: net/java/games/input/Controller.class +INFO: Loading Class: net/java/games/input/ControllerEnvironment.class +INFO: Loading Class: net/java/games/input/ControllerEvent.class +INFO: Loading Class: net/java/games/input/ControllerListener.class +INFO: Loading Class: net/java/games/input/DIAbstractController.class +INFO: Loading Class: net/java/games/input/DIComponent.class +INFO: Loading Class: net/java/games/input/DIControllers.class +INFO: Loading Class: net/java/games/input/DIDeviceObject.class +INFO: Loading Class: net/java/games/input/DIDeviceObjectData.class +INFO: Loading Class: net/java/games/input/DIEffectInfo.class +INFO: Loading Class: net/java/games/input/DIIdentifierMap.class +INFO: Loading Class: net/java/games/input/DIKeyboard.class +INFO: Loading Class: net/java/games/input/DIMouse.class +INFO: Loading Class: net/java/games/input/DataQueue.class +INFO: Loading Class: net/java/games/input/DefaultControllerEnvironment$1.class +INFO: Loading Class: net/java/games/input/DefaultControllerEnvironment$2.class +INFO: Loading Class: net/java/games/input/DefaultControllerEnvironment$3.class +INFO: Loading Class: net/java/games/input/DefaultControllerEnvironment$4.class +INFO: Loading Class: net/java/games/input/DefaultControllerEnvironment.class +INFO: Loading Class: net/java/games/input/DirectAndRawInputEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/DirectInputEnvironmentPlugin$1.class +INFO: Loading Class: net/java/games/input/DirectInputEnvironmentPlugin$2.class +INFO: Loading Class: net/java/games/input/DirectInputEnvironmentPlugin$3.class +INFO: Loading Class: net/java/games/input/DirectInputEnvironmentPlugin$4.class +INFO: Loading Class: net/java/games/input/DirectInputEnvironmentPlugin$ShutdownHook.class +INFO: Loading Class: net/java/games/input/DirectInputEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/DummyWindow.class +INFO: Loading Class: net/java/games/input/ElementType.class +INFO: Loading Class: net/java/games/input/Event.class +INFO: Loading Class: net/java/games/input/EventQueue.class +INFO: Loading Class: net/java/games/input/GenericDesktopUsage.class +INFO: Loading Class: net/java/games/input/IDirectInput.class +INFO: Loading Class: net/java/games/input/IDirectInputDevice.class +INFO: Loading Class: net/java/games/input/IDirectInputEffect.class +INFO: Loading Class: net/java/games/input/Keyboard.class +INFO: Loading Class: net/java/games/input/KeyboardUsage.class +INFO: Loading Class: net/java/games/input/LinuxAbsInfo.class +INFO: Loading Class: net/java/games/input/LinuxAbstractController.class +INFO: Loading Class: net/java/games/input/LinuxAxisDescriptor.class +INFO: Loading Class: net/java/games/input/LinuxCombinedController.class +INFO: Loading Class: net/java/games/input/LinuxComponent.class +INFO: Loading Class: net/java/games/input/LinuxConstantFF.class +INFO: Loading Class: net/java/games/input/LinuxControllers.class +INFO: Loading Class: net/java/games/input/LinuxDevice.class +INFO: Loading Class: net/java/games/input/LinuxDeviceTask.class +INFO: Loading Class: net/java/games/input/LinuxDeviceThread.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$1.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$2.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$3.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$4.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$5.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$6.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$7$1.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$7.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$8.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin$ShutdownHook.class +INFO: Loading Class: net/java/games/input/LinuxEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/LinuxEvent.class +INFO: Loading Class: net/java/games/input/LinuxEventComponent.class +INFO: Loading Class: net/java/games/input/LinuxEventDevice$1.class +INFO: Loading Class: net/java/games/input/LinuxEventDevice.class +INFO: Loading Class: net/java/games/input/LinuxForceFeedbackEffect$1.class +INFO: Loading Class: net/java/games/input/LinuxForceFeedbackEffect$UploadTask.class +INFO: Loading Class: net/java/games/input/LinuxForceFeedbackEffect$WriteTask.class +INFO: Loading Class: net/java/games/input/LinuxForceFeedbackEffect.class +INFO: Loading Class: net/java/games/input/LinuxInputID.class +INFO: Loading Class: net/java/games/input/LinuxJoystickAbstractController.class +INFO: Loading Class: net/java/games/input/LinuxJoystickAxis.class +INFO: Loading Class: net/java/games/input/LinuxJoystickButton.class +INFO: Loading Class: net/java/games/input/LinuxJoystickDevice.class +INFO: Loading Class: net/java/games/input/LinuxJoystickEvent.class +INFO: Loading Class: net/java/games/input/LinuxJoystickPOV.class +INFO: Loading Class: net/java/games/input/LinuxKeyboard.class +INFO: Loading Class: net/java/games/input/LinuxMouse.class +INFO: Loading Class: net/java/games/input/LinuxNativeTypesMap.class +INFO: Loading Class: net/java/games/input/LinuxPOV.class +INFO: Loading Class: net/java/games/input/LinuxRumbleFF.class +INFO: Loading Class: net/java/games/input/Mouse.class +INFO: Loading Class: net/java/games/input/NativeDefinitions.class +INFO: Loading Class: net/java/games/input/OSXAbstractController.class +INFO: Loading Class: net/java/games/input/OSXComponent.class +INFO: Loading Class: net/java/games/input/OSXControllers.class +INFO: Loading Class: net/java/games/input/OSXEnvironmentPlugin$1.class +INFO: Loading Class: net/java/games/input/OSXEnvironmentPlugin$2.class +INFO: Loading Class: net/java/games/input/OSXEnvironmentPlugin$3.class +INFO: Loading Class: net/java/games/input/OSXEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/OSXEvent.class +INFO: Loading Class: net/java/games/input/OSXHIDDevice.class +INFO: Loading Class: net/java/games/input/OSXHIDDeviceIterator.class +INFO: Loading Class: net/java/games/input/OSXHIDElement.class +INFO: Loading Class: net/java/games/input/OSXHIDQueue.class +INFO: Loading Class: net/java/games/input/OSXKeyboard.class +INFO: Loading Class: net/java/games/input/OSXMouse.class +INFO: Loading Class: net/java/games/input/PluginClassLoader$1.class +INFO: Loading Class: net/java/games/input/PluginClassLoader$JarFileFilter.class +INFO: Loading Class: net/java/games/input/PluginClassLoader.class +INFO: Loading Class: net/java/games/input/RawDevice.class +INFO: Loading Class: net/java/games/input/RawDeviceInfo.class +INFO: Loading Class: net/java/games/input/RawHIDInfo.class +INFO: Loading Class: net/java/games/input/RawIdentifierMap.class +INFO: Loading Class: net/java/games/input/RawInputEnvironmentPlugin$1.class +INFO: Loading Class: net/java/games/input/RawInputEnvironmentPlugin$2.class +INFO: Loading Class: net/java/games/input/RawInputEnvironmentPlugin$3.class +INFO: Loading Class: net/java/games/input/RawInputEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/RawInputEventQueue$QueueThread.class +INFO: Loading Class: net/java/games/input/RawInputEventQueue.class +INFO: Loading Class: net/java/games/input/RawKeyboard$Key.class +INFO: Loading Class: net/java/games/input/RawKeyboard.class +INFO: Loading Class: net/java/games/input/RawKeyboardEvent.class +INFO: Loading Class: net/java/games/input/RawKeyboardInfo.class +INFO: Loading Class: net/java/games/input/RawMouse$Axis.class +INFO: Loading Class: net/java/games/input/RawMouse$Button.class +INFO: Loading Class: net/java/games/input/RawMouse.class +INFO: Loading Class: net/java/games/input/RawMouseEvent.class +INFO: Loading Class: net/java/games/input/RawMouseInfo.class +INFO: Loading Class: net/java/games/input/Rumbler.class +INFO: Loading Class: net/java/games/input/SetupAPIDevice.class +INFO: Loading Class: net/java/games/input/Usage.class +INFO: Loading Class: net/java/games/input/UsagePage.class +INFO: Loading Class: net/java/games/input/UsagePair.class +INFO: Loading Class: net/java/games/input/Version.class +INFO: Loading Class: net/java/games/input/WinTabButtonComponent.class +INFO: Loading Class: net/java/games/input/WinTabComponent.class +INFO: Loading Class: net/java/games/input/WinTabContext.class +INFO: Loading Class: net/java/games/input/WinTabCursorComponent.class +INFO: Loading Class: net/java/games/input/WinTabDevice.class +INFO: Loading Class: net/java/games/input/WinTabEnvironmentPlugin$1.class +INFO: Loading Class: net/java/games/input/WinTabEnvironmentPlugin$2.class +INFO: Loading Class: net/java/games/input/WinTabEnvironmentPlugin$3.class +INFO: Loading Class: net/java/games/input/WinTabEnvironmentPlugin$4.class +INFO: Loading Class: net/java/games/input/WinTabEnvironmentPlugin$ShutdownHook.class +INFO: Loading Class: net/java/games/input/WinTabEnvironmentPlugin.class +INFO: Loading Class: net/java/games/input/WinTabPacket.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl/2.9.2-nightly-20140822/7707204c9ffa5d91662de95f0a224e2f721b22af/lwjgl-2.9.2-nightly-20140822.jar +INFO: Loading Class: org/lwjgl/BufferChecks.class +INFO: Loading Class: org/lwjgl/BufferUtils.class +INFO: Loading Class: org/lwjgl/DefaultSysImplementation.class +INFO: Loading Class: org/lwjgl/J2SESysImplementation.class +INFO: Loading Class: org/lwjgl/LWJGLException.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$1.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$2.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$3.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$4.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$5.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$6.class +INFO: Loading Class: org/lwjgl/LWJGLUtil$TokenFilter.class +INFO: Loading Class: org/lwjgl/LWJGLUtil.class +INFO: Loading Class: org/lwjgl/LinuxSysImplementation$1.class +INFO: Loading Class: org/lwjgl/LinuxSysImplementation.class +INFO: Loading Class: org/lwjgl/MacOSXSysImplementation.class +INFO: Loading Class: org/lwjgl/MemoryUtil$1.class +INFO: Loading Class: org/lwjgl/MemoryUtil$Accessor.class +INFO: Loading Class: org/lwjgl/MemoryUtil$AccessorJNI.class +INFO: Loading Class: org/lwjgl/MemoryUtil$AccessorReflect.class +INFO: Loading Class: org/lwjgl/MemoryUtil$CharSequenceNT.class +INFO: Loading Class: org/lwjgl/MemoryUtil.class +INFO: Loading Class: org/lwjgl/MemoryUtilSun$AccessorReflectFast.class +INFO: Loading Class: org/lwjgl/MemoryUtilSun$AccessorUnsafe.class +INFO: Loading Class: org/lwjgl/MemoryUtilSun.class +INFO: Loading Class: org/lwjgl/PointerBuffer$PointerBufferR.class +INFO: Loading Class: org/lwjgl/PointerBuffer.class +INFO: Loading Class: org/lwjgl/PointerWrapper.class +INFO: Loading Class: org/lwjgl/PointerWrapperAbstract.class +INFO: Loading Class: org/lwjgl/Sys$1.class +INFO: Loading Class: org/lwjgl/Sys$2.class +INFO: Loading Class: org/lwjgl/Sys$3.class +INFO: Loading Class: org/lwjgl/Sys.class +INFO: Loading Class: org/lwjgl/SysImplementation.class +INFO: Loading Class: org/lwjgl/WindowsSysImplementation$1.class +INFO: Loading Class: org/lwjgl/WindowsSysImplementation.class +INFO: Loading Class: org/lwjgl/input/Controller.class +INFO: Loading Class: org/lwjgl/input/ControllerEvent.class +INFO: Loading Class: org/lwjgl/input/Controllers.class +INFO: Loading Class: org/lwjgl/input/Cursor$CursorElement.class +INFO: Loading Class: org/lwjgl/input/Cursor.class +INFO: Loading Class: org/lwjgl/input/JInputController.class +INFO: Loading Class: org/lwjgl/input/Keyboard$1.class +INFO: Loading Class: org/lwjgl/input/Keyboard$KeyEvent.class +INFO: Loading Class: org/lwjgl/input/Keyboard.class +INFO: Loading Class: org/lwjgl/input/Mouse$1.class +INFO: Loading Class: org/lwjgl/input/Mouse.class +INFO: Loading Class: org/lwjgl/input/OpenGLPackageAccess$1.class +INFO: Loading Class: org/lwjgl/input/OpenGLPackageAccess$2.class +INFO: Loading Class: org/lwjgl/input/OpenGLPackageAccess.class +INFO: Loading Class: org/lwjgl/openal/AL.class +INFO: Loading Class: org/lwjgl/openal/AL10.class +INFO: Loading Class: org/lwjgl/openal/AL11.class +INFO: Loading Class: org/lwjgl/openal/ALC10.class +INFO: Loading Class: org/lwjgl/openal/ALC11.class +INFO: Loading Class: org/lwjgl/openal/ALCcontext.class +INFO: Loading Class: org/lwjgl/openal/ALCdevice.class +INFO: Loading Class: org/lwjgl/openal/EFX10.class +INFO: Loading Class: org/lwjgl/openal/EFXUtil.class +INFO: Loading Class: org/lwjgl/openal/OpenALException.class +INFO: Loading Class: org/lwjgl/openal/Util.class +INFO: Loading Class: org/lwjgl/opencl/AMDDeviceAttributeQuery.class +INFO: Loading Class: org/lwjgl/opencl/AMDDeviceMemoryFlags.class +INFO: Loading Class: org/lwjgl/opencl/AMDOfflineDevices.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$1.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$10.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$11.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$12.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$2.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$3.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$4.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$5.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$6.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$7.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$8.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$9.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$Buffers.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil$ObjectDestructor.class +INFO: Loading Class: org/lwjgl/opencl/APIUtil.class +INFO: Loading Class: org/lwjgl/opencl/APPLEContextLoggingFunctions.class +INFO: Loading Class: org/lwjgl/opencl/APPLEContextLoggingUtil$1.class +INFO: Loading Class: org/lwjgl/opencl/APPLEContextLoggingUtil$2.class +INFO: Loading Class: org/lwjgl/opencl/APPLEContextLoggingUtil$3.class +INFO: Loading Class: org/lwjgl/opencl/APPLEContextLoggingUtil.class +INFO: Loading Class: org/lwjgl/opencl/APPLEGLSharing.class +INFO: Loading Class: org/lwjgl/opencl/APPLESetMemObjectDestructor.class +INFO: Loading Class: org/lwjgl/opencl/CL.class +INFO: Loading Class: org/lwjgl/opencl/CL10.class +INFO: Loading Class: org/lwjgl/opencl/CL10GL.class +INFO: Loading Class: org/lwjgl/opencl/CL11.class +INFO: Loading Class: org/lwjgl/opencl/CL12.class +INFO: Loading Class: org/lwjgl/opencl/CL12GL.class +INFO: Loading Class: org/lwjgl/opencl/CLBuildProgramCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLCapabilities.class +INFO: Loading Class: org/lwjgl/opencl/CLChecks.class +INFO: Loading Class: org/lwjgl/opencl/CLCommandQueue.class +INFO: Loading Class: org/lwjgl/opencl/CLCompileProgramCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLContext$CLContextUtil.class +INFO: Loading Class: org/lwjgl/opencl/CLContext.class +INFO: Loading Class: org/lwjgl/opencl/CLContextCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLDevice.class +INFO: Loading Class: org/lwjgl/opencl/CLDeviceCapabilities.class +INFO: Loading Class: org/lwjgl/opencl/CLEvent$CLEventUtil.class +INFO: Loading Class: org/lwjgl/opencl/CLEvent.class +INFO: Loading Class: org/lwjgl/opencl/CLEventCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLFunctionAddress.class +INFO: Loading Class: org/lwjgl/opencl/CLKernel$CLKernelUtil.class +INFO: Loading Class: org/lwjgl/opencl/CLKernel.class +INFO: Loading Class: org/lwjgl/opencl/CLLinkProgramCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLMem$CLMemUtil.class +INFO: Loading Class: org/lwjgl/opencl/CLMem.class +INFO: Loading Class: org/lwjgl/opencl/CLMemObjectDestructorCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLNativeKernel.class +INFO: Loading Class: org/lwjgl/opencl/CLObject.class +INFO: Loading Class: org/lwjgl/opencl/CLObjectChild.class +INFO: Loading Class: org/lwjgl/opencl/CLObjectRegistry.class +INFO: Loading Class: org/lwjgl/opencl/CLObjectRetainable.class +INFO: Loading Class: org/lwjgl/opencl/CLPlatform$CLPlatformUtil.class +INFO: Loading Class: org/lwjgl/opencl/CLPlatform.class +INFO: Loading Class: org/lwjgl/opencl/CLPlatformCapabilities.class +INFO: Loading Class: org/lwjgl/opencl/CLPrintfCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLProgram$CLProgramUtil.class +INFO: Loading Class: org/lwjgl/opencl/CLProgram.class +INFO: Loading Class: org/lwjgl/opencl/CLProgramCallback.class +INFO: Loading Class: org/lwjgl/opencl/CLSampler.class +INFO: Loading Class: org/lwjgl/opencl/CallbackUtil.class +INFO: Loading Class: org/lwjgl/opencl/EXTAtomicCounters32.class +INFO: Loading Class: org/lwjgl/opencl/EXTAtomicCounters64.class +INFO: Loading Class: org/lwjgl/opencl/EXTDeviceFission.class +INFO: Loading Class: org/lwjgl/opencl/EXTMigrateMemobject.class +INFO: Loading Class: org/lwjgl/opencl/FastLongMap$Entry.class +INFO: Loading Class: org/lwjgl/opencl/FastLongMap$EntryIterator.class +INFO: Loading Class: org/lwjgl/opencl/FastLongMap.class +INFO: Loading Class: org/lwjgl/opencl/INTELImmediateExecution.class +INFO: Loading Class: org/lwjgl/opencl/INTELThreadLocalExec.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilAbstract.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$1.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$2.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLContextUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLDeviceUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLEventUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLKernelUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLMemUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLPlatformUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory$CLProgramUtil.class +INFO: Loading Class: org/lwjgl/opencl/InfoUtilFactory.class +INFO: Loading Class: org/lwjgl/opencl/KHRDepthImages.class +INFO: Loading Class: org/lwjgl/opencl/KHRFp16.class +INFO: Loading Class: org/lwjgl/opencl/KHRFp64.class +INFO: Loading Class: org/lwjgl/opencl/KHRGLDepthImages.class +INFO: Loading Class: org/lwjgl/opencl/KHRGLEvent.class +INFO: Loading Class: org/lwjgl/opencl/KHRGLMsaaSharing.class +INFO: Loading Class: org/lwjgl/opencl/KHRGLSharing.class +INFO: Loading Class: org/lwjgl/opencl/KHRICD.class +INFO: Loading Class: org/lwjgl/opencl/KHRImage2DFromBuffer.class +INFO: Loading Class: org/lwjgl/opencl/KHRInitializeMemory.class +INFO: Loading Class: org/lwjgl/opencl/KHRSubgroups.class +INFO: Loading Class: org/lwjgl/opencl/KHRTerminateContext.class +INFO: Loading Class: org/lwjgl/opencl/NVDeviceAttributeQuery.class +INFO: Loading Class: org/lwjgl/opencl/OpenCLException.class +INFO: Loading Class: org/lwjgl/opencl/Util$1.class +INFO: Loading Class: org/lwjgl/opencl/Util.class +INFO: Loading Class: org/lwjgl/opencl/api/CLBufferRegion.class +INFO: Loading Class: org/lwjgl/opencl/api/CLImageFormat.class +INFO: Loading Class: org/lwjgl/opencl/api/Filter.class +INFO: Loading Class: org/lwjgl/opengl/AMDBlendMinmaxFactor.class +INFO: Loading Class: org/lwjgl/opengl/AMDDebugOutput.class +INFO: Loading Class: org/lwjgl/opengl/AMDDebugOutputCallback$1.class +INFO: Loading Class: org/lwjgl/opengl/AMDDebugOutputCallback$Handler.class +INFO: Loading Class: org/lwjgl/opengl/AMDDebugOutputCallback.class +INFO: Loading Class: org/lwjgl/opengl/AMDDepthClampSeparate.class +INFO: Loading Class: org/lwjgl/opengl/AMDDrawBuffersBlend.class +INFO: Loading Class: org/lwjgl/opengl/AMDInterleavedElements.class +INFO: Loading Class: org/lwjgl/opengl/AMDMultiDrawIndirect.class +INFO: Loading Class: org/lwjgl/opengl/AMDNameGenDelete.class +INFO: Loading Class: org/lwjgl/opengl/AMDPerformanceMonitor.class +INFO: Loading Class: org/lwjgl/opengl/AMDPinnedMemory.class +INFO: Loading Class: org/lwjgl/opengl/AMDQueryBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/AMDSamplePositions.class +INFO: Loading Class: org/lwjgl/opengl/AMDSeamlessCubemapPerTexture.class +INFO: Loading Class: org/lwjgl/opengl/AMDSparseTexture.class +INFO: Loading Class: org/lwjgl/opengl/AMDStencilOperationExtended.class +INFO: Loading Class: org/lwjgl/opengl/AMDVertexShaderTessellator.class +INFO: Loading Class: org/lwjgl/opengl/APIUtil.class +INFO: Loading Class: org/lwjgl/opengl/APPLEAuxDepthStencil.class +INFO: Loading Class: org/lwjgl/opengl/APPLEClientStorage.class +INFO: Loading Class: org/lwjgl/opengl/APPLEElementArray.class +INFO: Loading Class: org/lwjgl/opengl/APPLEFence.class +INFO: Loading Class: org/lwjgl/opengl/APPLEFloatPixels.class +INFO: Loading Class: org/lwjgl/opengl/APPLEFlushBufferRange.class +INFO: Loading Class: org/lwjgl/opengl/APPLEObjectPurgeable.class +INFO: Loading Class: org/lwjgl/opengl/APPLEPackedPixels.class +INFO: Loading Class: org/lwjgl/opengl/APPLERgb422.class +INFO: Loading Class: org/lwjgl/opengl/APPLERowBytes.class +INFO: Loading Class: org/lwjgl/opengl/APPLETextureRange.class +INFO: Loading Class: org/lwjgl/opengl/APPLEVertexArrayObject.class +INFO: Loading Class: org/lwjgl/opengl/APPLEVertexArrayRange.class +INFO: Loading Class: org/lwjgl/opengl/APPLEVertexProgramEvaluators.class +INFO: Loading Class: org/lwjgl/opengl/APPLEYcbcr422.class +INFO: Loading Class: org/lwjgl/opengl/ARBBaseInstance.class +INFO: Loading Class: org/lwjgl/opengl/ARBBindlessTexture.class +INFO: Loading Class: org/lwjgl/opengl/ARBBlendFuncExtended.class +INFO: Loading Class: org/lwjgl/opengl/ARBBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBBufferStorage.class +INFO: Loading Class: org/lwjgl/opengl/ARBCLEvent.class +INFO: Loading Class: org/lwjgl/opengl/ARBClearBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBClearTexture.class +INFO: Loading Class: org/lwjgl/opengl/ARBClipControl.class +INFO: Loading Class: org/lwjgl/opengl/ARBColorBufferFloat.class +INFO: Loading Class: org/lwjgl/opengl/ARBCompressedTexturePixelStorage.class +INFO: Loading Class: org/lwjgl/opengl/ARBComputeShader.class +INFO: Loading Class: org/lwjgl/opengl/ARBComputeVariableGroupSize.class +INFO: Loading Class: org/lwjgl/opengl/ARBConditionalRenderInverted.class +INFO: Loading Class: org/lwjgl/opengl/ARBCopyBuffer.class +INFO: Loading Class: org/lwjgl/opengl/ARBCopyImage.class +INFO: Loading Class: org/lwjgl/opengl/ARBCullDistance.class +INFO: Loading Class: org/lwjgl/opengl/ARBDebugOutput.class +INFO: Loading Class: org/lwjgl/opengl/ARBDebugOutputCallback$1.class +INFO: Loading Class: org/lwjgl/opengl/ARBDebugOutputCallback$Handler.class +INFO: Loading Class: org/lwjgl/opengl/ARBDebugOutputCallback.class +INFO: Loading Class: org/lwjgl/opengl/ARBDepthBufferFloat.class +INFO: Loading Class: org/lwjgl/opengl/ARBDepthClamp.class +INFO: Loading Class: org/lwjgl/opengl/ARBDepthTexture.class +INFO: Loading Class: org/lwjgl/opengl/ARBDirectStateAccess.class +INFO: Loading Class: org/lwjgl/opengl/ARBDrawBuffers.class +INFO: Loading Class: org/lwjgl/opengl/ARBDrawBuffersBlend.class +INFO: Loading Class: org/lwjgl/opengl/ARBDrawElementsBaseVertex.class +INFO: Loading Class: org/lwjgl/opengl/ARBDrawIndirect.class +INFO: Loading Class: org/lwjgl/opengl/ARBDrawInstanced.class +INFO: Loading Class: org/lwjgl/opengl/ARBES2Compatibility.class +INFO: Loading Class: org/lwjgl/opengl/ARBES31Compatibility.class +INFO: Loading Class: org/lwjgl/opengl/ARBES3Compatibility.class +INFO: Loading Class: org/lwjgl/opengl/ARBEnhancedLayouts.class +INFO: Loading Class: org/lwjgl/opengl/ARBExplicitUniformLocation.class +INFO: Loading Class: org/lwjgl/opengl/ARBFragmentProgram.class +INFO: Loading Class: org/lwjgl/opengl/ARBFragmentShader.class +INFO: Loading Class: org/lwjgl/opengl/ARBFramebufferNoAttachments.class +INFO: Loading Class: org/lwjgl/opengl/ARBFramebufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBFramebufferSRGB.class +INFO: Loading Class: org/lwjgl/opengl/ARBGeometryShader4.class +INFO: Loading Class: org/lwjgl/opengl/ARBGetProgramBinary.class +INFO: Loading Class: org/lwjgl/opengl/ARBGetTextureSubImage.class +INFO: Loading Class: org/lwjgl/opengl/ARBGpuShader5.class +INFO: Loading Class: org/lwjgl/opengl/ARBGpuShaderFp64.class +INFO: Loading Class: org/lwjgl/opengl/ARBHalfFloatPixel.class +INFO: Loading Class: org/lwjgl/opengl/ARBHalfFloatVertex.class +INFO: Loading Class: org/lwjgl/opengl/ARBImaging.class +INFO: Loading Class: org/lwjgl/opengl/ARBIndirectParameters.class +INFO: Loading Class: org/lwjgl/opengl/ARBInstancedArrays.class +INFO: Loading Class: org/lwjgl/opengl/ARBInternalformatQuery.class +INFO: Loading Class: org/lwjgl/opengl/ARBInternalformatQuery2.class +INFO: Loading Class: org/lwjgl/opengl/ARBInvalidateSubdata.class +INFO: Loading Class: org/lwjgl/opengl/ARBMapBufferAlignment.class +INFO: Loading Class: org/lwjgl/opengl/ARBMapBufferRange.class +INFO: Loading Class: org/lwjgl/opengl/ARBMatrixPalette.class +INFO: Loading Class: org/lwjgl/opengl/ARBMultiBind.class +INFO: Loading Class: org/lwjgl/opengl/ARBMultiDrawIndirect.class +INFO: Loading Class: org/lwjgl/opengl/ARBMultisample.class +INFO: Loading Class: org/lwjgl/opengl/ARBMultitexture.class +INFO: Loading Class: org/lwjgl/opengl/ARBOcclusionQuery.class +INFO: Loading Class: org/lwjgl/opengl/ARBOcclusionQuery2.class +INFO: Loading Class: org/lwjgl/opengl/ARBPipelineStatisticsQuery.class +INFO: Loading Class: org/lwjgl/opengl/ARBPixelBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBPointParameters.class +INFO: Loading Class: org/lwjgl/opengl/ARBPointSprite.class +INFO: Loading Class: org/lwjgl/opengl/ARBProgram.class +INFO: Loading Class: org/lwjgl/opengl/ARBProgramInterfaceQuery.class +INFO: Loading Class: org/lwjgl/opengl/ARBProvokingVertex.class +INFO: Loading Class: org/lwjgl/opengl/ARBQueryBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBRobustness.class +INFO: Loading Class: org/lwjgl/opengl/ARBSampleShading.class +INFO: Loading Class: org/lwjgl/opengl/ARBSamplerObjects.class +INFO: Loading Class: org/lwjgl/opengl/ARBSeamlessCubeMap.class +INFO: Loading Class: org/lwjgl/opengl/ARBSeamlessCubemapPerTexture.class +INFO: Loading Class: org/lwjgl/opengl/ARBSeparateShaderObjects.class +INFO: Loading Class: org/lwjgl/opengl/ARBShaderAtomicCounters.class +INFO: Loading Class: org/lwjgl/opengl/ARBShaderImageLoadStore.class +INFO: Loading Class: org/lwjgl/opengl/ARBShaderObjects.class +INFO: Loading Class: org/lwjgl/opengl/ARBShaderStorageBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBShaderSubroutine.class +INFO: Loading Class: org/lwjgl/opengl/ARBShadingLanguage100.class +INFO: Loading Class: org/lwjgl/opengl/ARBShadingLanguageInclude.class +INFO: Loading Class: org/lwjgl/opengl/ARBShadow.class +INFO: Loading Class: org/lwjgl/opengl/ARBShadowAmbient.class +INFO: Loading Class: org/lwjgl/opengl/ARBSparseBuffer.class +INFO: Loading Class: org/lwjgl/opengl/ARBSparseTexture.class +INFO: Loading Class: org/lwjgl/opengl/ARBStencilTexturing.class +INFO: Loading Class: org/lwjgl/opengl/ARBSync.class +INFO: Loading Class: org/lwjgl/opengl/ARBTessellationShader.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureBarrier.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureBorderClamp.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureBufferRange.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureCompression.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureCompressionBPTC.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureCompressionRGTC.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureCubeMap.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureCubeMapArray.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureEnvCombine.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureEnvDot3.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureFloat.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureGather.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureMirrorClampToEdge.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureMirroredRepeat.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureMultisample.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureRGB10_A2UI.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureRectangle.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureRg.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureStorage.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureStorageMultisample.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureSwizzle.class +INFO: Loading Class: org/lwjgl/opengl/ARBTextureView.class +INFO: Loading Class: org/lwjgl/opengl/ARBTimerQuery.class +INFO: Loading Class: org/lwjgl/opengl/ARBTransformFeedback2.class +INFO: Loading Class: org/lwjgl/opengl/ARBTransformFeedback3.class +INFO: Loading Class: org/lwjgl/opengl/ARBTransformFeedbackInstanced.class +INFO: Loading Class: org/lwjgl/opengl/ARBTransformFeedbackOverflowQuery.class +INFO: Loading Class: org/lwjgl/opengl/ARBTransposeMatrix.class +INFO: Loading Class: org/lwjgl/opengl/ARBUniformBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexArrayBgra.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexArrayObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexAttrib64bit.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexAttribBinding.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexBlend.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexProgram.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexShader.class +INFO: Loading Class: org/lwjgl/opengl/ARBVertexType2_10_10_10_REV.class +INFO: Loading Class: org/lwjgl/opengl/ARBViewportArray.class +INFO: Loading Class: org/lwjgl/opengl/ARBWindowPos.class +INFO: Loading Class: org/lwjgl/opengl/ATIDrawBuffers.class +INFO: Loading Class: org/lwjgl/opengl/ATIElementArray.class +INFO: Loading Class: org/lwjgl/opengl/ATIEnvmapBumpmap.class +INFO: Loading Class: org/lwjgl/opengl/ATIFragmentShader.class +INFO: Loading Class: org/lwjgl/opengl/ATIMapObjectBuffer.class +INFO: Loading Class: org/lwjgl/opengl/ATIMeminfo.class +INFO: Loading Class: org/lwjgl/opengl/ATIPnTriangles.class +INFO: Loading Class: org/lwjgl/opengl/ATISeparateStencil.class +INFO: Loading Class: org/lwjgl/opengl/ATITextFragmentShader.class +INFO: Loading Class: org/lwjgl/opengl/ATITextureCompression3DC.class +INFO: Loading Class: org/lwjgl/opengl/ATITextureEnvCombine3.class +INFO: Loading Class: org/lwjgl/opengl/ATITextureFloat.class +INFO: Loading Class: org/lwjgl/opengl/ATITextureMirrorOnce.class +INFO: Loading Class: org/lwjgl/opengl/ATIVertexArrayObject.class +INFO: Loading Class: org/lwjgl/opengl/ATIVertexAttribArrayObject.class +INFO: Loading Class: org/lwjgl/opengl/ATIVertexStreams.class +INFO: Loading Class: org/lwjgl/opengl/AWTCanvasImplementation.class +INFO: Loading Class: org/lwjgl/opengl/AWTGLCanvas.class +INFO: Loading Class: org/lwjgl/opengl/AWTSurfaceLock$1.class +INFO: Loading Class: org/lwjgl/opengl/AWTSurfaceLock.class +INFO: Loading Class: org/lwjgl/opengl/AWTUtil$1.class +INFO: Loading Class: org/lwjgl/opengl/AWTUtil$2.class +INFO: Loading Class: org/lwjgl/opengl/AWTUtil.class +INFO: Loading Class: org/lwjgl/opengl/BaseReferences.class +INFO: Loading Class: org/lwjgl/opengl/CallbackUtil.class +INFO: Loading Class: org/lwjgl/opengl/Context.class +INFO: Loading Class: org/lwjgl/opengl/ContextAttribs.class +INFO: Loading Class: org/lwjgl/opengl/ContextCapabilities.class +INFO: Loading Class: org/lwjgl/opengl/ContextGL.class +INFO: Loading Class: org/lwjgl/opengl/ContextGLES.class +INFO: Loading Class: org/lwjgl/opengl/ContextImplementation.class +INFO: Loading Class: org/lwjgl/opengl/Display$1.class +INFO: Loading Class: org/lwjgl/opengl/Display$2.class +INFO: Loading Class: org/lwjgl/opengl/Display$3.class +INFO: Loading Class: org/lwjgl/opengl/Display$4.class +INFO: Loading Class: org/lwjgl/opengl/Display$5.class +INFO: Loading Class: org/lwjgl/opengl/Display$6.class +INFO: Loading Class: org/lwjgl/opengl/Display$7.class +INFO: Loading Class: org/lwjgl/opengl/Display$8.class +INFO: Loading Class: org/lwjgl/opengl/Display.class +INFO: Loading Class: org/lwjgl/opengl/DisplayImplementation.class +INFO: Loading Class: org/lwjgl/opengl/DisplayMode.class +INFO: Loading Class: org/lwjgl/opengl/Drawable.class +INFO: Loading Class: org/lwjgl/opengl/DrawableGL.class +INFO: Loading Class: org/lwjgl/opengl/DrawableGLES.class +INFO: Loading Class: org/lwjgl/opengl/DrawableLWJGL.class +INFO: Loading Class: org/lwjgl/opengl/EXTAbgr.class +INFO: Loading Class: org/lwjgl/opengl/EXTBgra.class +INFO: Loading Class: org/lwjgl/opengl/EXTBindableUniform.class +INFO: Loading Class: org/lwjgl/opengl/EXTBlendColor.class +INFO: Loading Class: org/lwjgl/opengl/EXTBlendEquationSeparate.class +INFO: Loading Class: org/lwjgl/opengl/EXTBlendFuncSeparate.class +INFO: Loading Class: org/lwjgl/opengl/EXTBlendMinmax.class +INFO: Loading Class: org/lwjgl/opengl/EXTBlendSubtract.class +INFO: Loading Class: org/lwjgl/opengl/EXTCgShader.class +INFO: Loading Class: org/lwjgl/opengl/EXTCompiledVertexArray.class +INFO: Loading Class: org/lwjgl/opengl/EXTDepthBoundsTest.class +INFO: Loading Class: org/lwjgl/opengl/EXTDirectStateAccess.class +INFO: Loading Class: org/lwjgl/opengl/EXTDrawBuffers2.class +INFO: Loading Class: org/lwjgl/opengl/EXTDrawInstanced.class +INFO: Loading Class: org/lwjgl/opengl/EXTDrawRangeElements.class +INFO: Loading Class: org/lwjgl/opengl/EXTFogCoord.class +INFO: Loading Class: org/lwjgl/opengl/EXTFramebufferBlit.class +INFO: Loading Class: org/lwjgl/opengl/EXTFramebufferMultisample.class +INFO: Loading Class: org/lwjgl/opengl/EXTFramebufferMultisampleBlitScaled.class +INFO: Loading Class: org/lwjgl/opengl/EXTFramebufferObject.class +INFO: Loading Class: org/lwjgl/opengl/EXTFramebufferSRGB.class +INFO: Loading Class: org/lwjgl/opengl/EXTGeometryShader4.class +INFO: Loading Class: org/lwjgl/opengl/EXTGpuProgramParameters.class +INFO: Loading Class: org/lwjgl/opengl/EXTGpuShader4.class +INFO: Loading Class: org/lwjgl/opengl/EXTMultiDrawArrays.class +INFO: Loading Class: org/lwjgl/opengl/EXTPackedDepthStencil.class +INFO: Loading Class: org/lwjgl/opengl/EXTPackedFloat.class +INFO: Loading Class: org/lwjgl/opengl/EXTPackedPixels.class +INFO: Loading Class: org/lwjgl/opengl/EXTPalettedTexture.class +INFO: Loading Class: org/lwjgl/opengl/EXTPixelBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/EXTPointParameters.class +INFO: Loading Class: org/lwjgl/opengl/EXTProvokingVertex.class +INFO: Loading Class: org/lwjgl/opengl/EXTRescaleNormal.class +INFO: Loading Class: org/lwjgl/opengl/EXTSecondaryColor.class +INFO: Loading Class: org/lwjgl/opengl/EXTSeparateShaderObjects.class +INFO: Loading Class: org/lwjgl/opengl/EXTSeparateSpecularColor.class +INFO: Loading Class: org/lwjgl/opengl/EXTShaderImageLoadStore.class +INFO: Loading Class: org/lwjgl/opengl/EXTSharedTexturePalette.class +INFO: Loading Class: org/lwjgl/opengl/EXTStencilClearTag.class +INFO: Loading Class: org/lwjgl/opengl/EXTStencilTwoSide.class +INFO: Loading Class: org/lwjgl/opengl/EXTStencilWrap.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureArray.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureCompressionLATC.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureCompressionRGTC.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureCompressionS3TC.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureEnvCombine.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureEnvDot3.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureFilterAnisotropic.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureInteger.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureLODBias.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureMirrorClamp.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureRectangle.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureSRGB.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureSRGBDecode.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureSharedExponent.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureSnorm.class +INFO: Loading Class: org/lwjgl/opengl/EXTTextureSwizzle.class +INFO: Loading Class: org/lwjgl/opengl/EXTTimerQuery.class +INFO: Loading Class: org/lwjgl/opengl/EXTTransformFeedback.class +INFO: Loading Class: org/lwjgl/opengl/EXTVertexArrayBgra.class +INFO: Loading Class: org/lwjgl/opengl/EXTVertexAttrib64bit.class +INFO: Loading Class: org/lwjgl/opengl/EXTVertexShader.class +INFO: Loading Class: org/lwjgl/opengl/EXTVertexWeighting.class +INFO: Loading Class: org/lwjgl/opengl/EventQueue.class +INFO: Loading Class: org/lwjgl/opengl/FastIntMap$Entry.class +INFO: Loading Class: org/lwjgl/opengl/FastIntMap$EntryIterator.class +INFO: Loading Class: org/lwjgl/opengl/FastIntMap.class +INFO: Loading Class: org/lwjgl/opengl/GL11.class +INFO: Loading Class: org/lwjgl/opengl/GL12.class +INFO: Loading Class: org/lwjgl/opengl/GL13.class +INFO: Loading Class: org/lwjgl/opengl/GL14.class +INFO: Loading Class: org/lwjgl/opengl/GL15.class +INFO: Loading Class: org/lwjgl/opengl/GL20.class +INFO: Loading Class: org/lwjgl/opengl/GL21.class +INFO: Loading Class: org/lwjgl/opengl/GL30.class +INFO: Loading Class: org/lwjgl/opengl/GL31.class +INFO: Loading Class: org/lwjgl/opengl/GL32.class +INFO: Loading Class: org/lwjgl/opengl/GL33.class +INFO: Loading Class: org/lwjgl/opengl/GL40.class +INFO: Loading Class: org/lwjgl/opengl/GL41.class +INFO: Loading Class: org/lwjgl/opengl/GL42.class +INFO: Loading Class: org/lwjgl/opengl/GL43.class +INFO: Loading Class: org/lwjgl/opengl/GL44.class +INFO: Loading Class: org/lwjgl/opengl/GL45.class +INFO: Loading Class: org/lwjgl/opengl/GLChecks.class +INFO: Loading Class: org/lwjgl/opengl/GLContext$1.class +INFO: Loading Class: org/lwjgl/opengl/GLContext$2.class +INFO: Loading Class: org/lwjgl/opengl/GLContext$CapabilitiesCacheEntry.class +INFO: Loading Class: org/lwjgl/opengl/GLContext.class +INFO: Loading Class: org/lwjgl/opengl/GLSync.class +INFO: Loading Class: org/lwjgl/opengl/GLUConstants.class +INFO: Loading Class: org/lwjgl/opengl/GREMEDYFrameTerminator.class +INFO: Loading Class: org/lwjgl/opengl/GREMEDYStringMarker.class +INFO: Loading Class: org/lwjgl/opengl/GlobalLock.class +INFO: Loading Class: org/lwjgl/opengl/HPOcclusionTest.class +INFO: Loading Class: org/lwjgl/opengl/IBMRasterposClip.class +INFO: Loading Class: org/lwjgl/opengl/INTELMapTexture.class +INFO: Loading Class: org/lwjgl/opengl/InputImplementation.class +INFO: Loading Class: org/lwjgl/opengl/KHRContextFlushControl.class +INFO: Loading Class: org/lwjgl/opengl/KHRDebug.class +INFO: Loading Class: org/lwjgl/opengl/KHRDebugCallback$1.class +INFO: Loading Class: org/lwjgl/opengl/KHRDebugCallback$Handler.class +INFO: Loading Class: org/lwjgl/opengl/KHRDebugCallback.class +INFO: Loading Class: org/lwjgl/opengl/KHRRobustness.class +INFO: Loading Class: org/lwjgl/opengl/KHRTextureCompressionAstcLdr.class +INFO: Loading Class: org/lwjgl/opengl/KeyboardEventQueue.class +INFO: Loading Class: org/lwjgl/opengl/LinuxAWTGLCanvasPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/LinuxCanvasImplementation$1.class +INFO: Loading Class: org/lwjgl/opengl/LinuxCanvasImplementation$2.class +INFO: Loading Class: org/lwjgl/opengl/LinuxCanvasImplementation.class +INFO: Loading Class: org/lwjgl/opengl/LinuxContextImplementation.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$1.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$2.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$3.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$4.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$Compiz$1$1.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$Compiz$1$2.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$Compiz$1.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$Compiz$2.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$Compiz$Provider.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay$Compiz.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplay.class +INFO: Loading Class: org/lwjgl/opengl/LinuxDisplayPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/LinuxEvent.class +INFO: Loading Class: org/lwjgl/opengl/LinuxKeyboard.class +INFO: Loading Class: org/lwjgl/opengl/LinuxKeycodes.class +INFO: Loading Class: org/lwjgl/opengl/LinuxMouse.class +INFO: Loading Class: org/lwjgl/opengl/LinuxPbufferPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/LinuxPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXCanvasImplementation.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXCanvasListener$1.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXCanvasListener.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXCanvasPeerInfo$1.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXCanvasPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXContextImplementation.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXDisplay.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXDisplayPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXGLCanvas.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXMouseEventQueue.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXNativeKeyboard.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXNativeMouse.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXPbufferPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/MacOSXPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/MouseEventQueue.class +INFO: Loading Class: org/lwjgl/opengl/NVBindlessMultiDrawIndirect.class +INFO: Loading Class: org/lwjgl/opengl/NVBindlessTexture.class +INFO: Loading Class: org/lwjgl/opengl/NVBlendEquationAdvanced.class +INFO: Loading Class: org/lwjgl/opengl/NVComputeProgram5.class +INFO: Loading Class: org/lwjgl/opengl/NVConditionalRender.class +INFO: Loading Class: org/lwjgl/opengl/NVCopyDepthToColor.class +INFO: Loading Class: org/lwjgl/opengl/NVCopyImage.class +INFO: Loading Class: org/lwjgl/opengl/NVDeepTexture3D.class +INFO: Loading Class: org/lwjgl/opengl/NVDepthBufferFloat.class +INFO: Loading Class: org/lwjgl/opengl/NVDepthClamp.class +INFO: Loading Class: org/lwjgl/opengl/NVDrawTexture.class +INFO: Loading Class: org/lwjgl/opengl/NVEvaluators.class +INFO: Loading Class: org/lwjgl/opengl/NVExplicitMultisample.class +INFO: Loading Class: org/lwjgl/opengl/NVFence.class +INFO: Loading Class: org/lwjgl/opengl/NVFloatBuffer.class +INFO: Loading Class: org/lwjgl/opengl/NVFogDistance.class +INFO: Loading Class: org/lwjgl/opengl/NVFragmentProgram.class +INFO: Loading Class: org/lwjgl/opengl/NVFragmentProgram2.class +INFO: Loading Class: org/lwjgl/opengl/NVFramebufferMultisampleCoverage.class +INFO: Loading Class: org/lwjgl/opengl/NVGeometryProgram4.class +INFO: Loading Class: org/lwjgl/opengl/NVGpuProgram4.class +INFO: Loading Class: org/lwjgl/opengl/NVGpuProgram5.class +INFO: Loading Class: org/lwjgl/opengl/NVGpuShader5.class +INFO: Loading Class: org/lwjgl/opengl/NVHalfFloat.class +INFO: Loading Class: org/lwjgl/opengl/NVLightMaxExponent.class +INFO: Loading Class: org/lwjgl/opengl/NVMultisampleCoverage.class +INFO: Loading Class: org/lwjgl/opengl/NVMultisampleFilterHint.class +INFO: Loading Class: org/lwjgl/opengl/NVOcclusionQuery.class +INFO: Loading Class: org/lwjgl/opengl/NVPackedDepthStencil.class +INFO: Loading Class: org/lwjgl/opengl/NVParameterBufferObject.class +INFO: Loading Class: org/lwjgl/opengl/NVPathRendering.class +INFO: Loading Class: org/lwjgl/opengl/NVPixelDataRange.class +INFO: Loading Class: org/lwjgl/opengl/NVPointSprite.class +INFO: Loading Class: org/lwjgl/opengl/NVPresentVideo.class +INFO: Loading Class: org/lwjgl/opengl/NVPresentVideoUtil.class +INFO: Loading Class: org/lwjgl/opengl/NVPrimitiveRestart.class +INFO: Loading Class: org/lwjgl/opengl/NVProgram.class +INFO: Loading Class: org/lwjgl/opengl/NVRegisterCombiners.class +INFO: Loading Class: org/lwjgl/opengl/NVRegisterCombiners2.class +INFO: Loading Class: org/lwjgl/opengl/NVShaderBufferLoad.class +INFO: Loading Class: org/lwjgl/opengl/NVShaderBufferStore.class +INFO: Loading Class: org/lwjgl/opengl/NVTessellationProgram5.class +INFO: Loading Class: org/lwjgl/opengl/NVTexgenReflection.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureBarrier.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureCompressionVTC.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureEnvCombine4.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureExpandNormal.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureMultisample.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureRectangle.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureShader.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureShader2.class +INFO: Loading Class: org/lwjgl/opengl/NVTextureShader3.class +INFO: Loading Class: org/lwjgl/opengl/NVTransformFeedback.class +INFO: Loading Class: org/lwjgl/opengl/NVTransformFeedback2.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexArrayRange.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexArrayRange2.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexAttribInteger64bit.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexBufferUnifiedMemory.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexProgram.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexProgram2Option.class +INFO: Loading Class: org/lwjgl/opengl/NVVertexProgram3.class +INFO: Loading Class: org/lwjgl/opengl/NVVideoCapture.class +INFO: Loading Class: org/lwjgl/opengl/NVVideoCaptureUtil.class +INFO: Loading Class: org/lwjgl/opengl/NVXGpuMemoryInfo.class +INFO: Loading Class: org/lwjgl/opengl/OpenGLException.class +INFO: Loading Class: org/lwjgl/opengl/Pbuffer.class +INFO: Loading Class: org/lwjgl/opengl/PeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/PixelFormat.class +INFO: Loading Class: org/lwjgl/opengl/PixelFormatLWJGL.class +INFO: Loading Class: org/lwjgl/opengl/References.class +INFO: Loading Class: org/lwjgl/opengl/ReferencesStack.class +INFO: Loading Class: org/lwjgl/opengl/RenderTexture.class +INFO: Loading Class: org/lwjgl/opengl/SGISGenerateMipmap.class +INFO: Loading Class: org/lwjgl/opengl/SGISTextureLOD.class +INFO: Loading Class: org/lwjgl/opengl/SUNSliceAccum.class +INFO: Loading Class: org/lwjgl/opengl/SharedDrawable.class +INFO: Loading Class: org/lwjgl/opengl/StateStack.class +INFO: Loading Class: org/lwjgl/opengl/StateTracker$1.class +INFO: Loading Class: org/lwjgl/opengl/StateTracker$VAOState.class +INFO: Loading Class: org/lwjgl/opengl/StateTracker.class +INFO: Loading Class: org/lwjgl/opengl/Sync$1.class +INFO: Loading Class: org/lwjgl/opengl/Sync$RunningAvg.class +INFO: Loading Class: org/lwjgl/opengl/Sync.class +INFO: Loading Class: org/lwjgl/opengl/Util.class +INFO: Loading Class: org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/WindowsCanvasImplementation$1.class +INFO: Loading Class: org/lwjgl/opengl/WindowsCanvasImplementation.class +INFO: Loading Class: org/lwjgl/opengl/WindowsContextImplementation.class +INFO: Loading Class: org/lwjgl/opengl/WindowsDisplay$1.class +INFO: Loading Class: org/lwjgl/opengl/WindowsDisplay$2.class +INFO: Loading Class: org/lwjgl/opengl/WindowsDisplay$3.class +INFO: Loading Class: org/lwjgl/opengl/WindowsDisplay$Rect.class +INFO: Loading Class: org/lwjgl/opengl/WindowsDisplay.class +INFO: Loading Class: org/lwjgl/opengl/WindowsDisplayPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/WindowsFileVersion.class +INFO: Loading Class: org/lwjgl/opengl/WindowsKeyboard.class +INFO: Loading Class: org/lwjgl/opengl/WindowsKeycodes.class +INFO: Loading Class: org/lwjgl/opengl/WindowsMouse.class +INFO: Loading Class: org/lwjgl/opengl/WindowsPbufferPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/WindowsPeerInfo.class +INFO: Loading Class: org/lwjgl/opengl/WindowsRegistry.class +INFO: Loading Class: org/lwjgl/opengl/XRandR$Screen.class +INFO: Loading Class: org/lwjgl/opengl/XRandR.class +INFO: Loading Class: org/lwjgl/opengles/ContextAttribs.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl_util/2.9.2-nightly-20140822/f0e612c840a7639c1f77f68d72a28dae2f0c8490/lwjgl_util-2.9.2-nightly-20140822.jar +INFO: Loading Class: org/lwjgl/util/Color.class +INFO: Loading Class: org/lwjgl/util/Dimension.class +INFO: Loading Class: org/lwjgl/util/Display$1FieldAccessor.class +INFO: Loading Class: org/lwjgl/util/Display$1Sorter.class +INFO: Loading Class: org/lwjgl/util/Display.class +INFO: Loading Class: org/lwjgl/util/Point.class +INFO: Loading Class: org/lwjgl/util/ReadableColor.class +INFO: Loading Class: org/lwjgl/util/ReadableDimension.class +INFO: Loading Class: org/lwjgl/util/ReadablePoint.class +INFO: Loading Class: org/lwjgl/util/ReadableRectangle.class +INFO: Loading Class: org/lwjgl/util/Rectangle.class +INFO: Loading Class: org/lwjgl/util/Renderable.class +INFO: Loading Class: org/lwjgl/util/Timer.class +INFO: Loading Class: org/lwjgl/util/WaveData.class +INFO: Loading Class: org/lwjgl/util/WritableColor.class +INFO: Loading Class: org/lwjgl/util/WritableDimension.class +INFO: Loading Class: org/lwjgl/util/WritablePoint.class +INFO: Loading Class: org/lwjgl/util/WritableRectangle.class +INFO: Loading Class: org/lwjgl/util/XPMFile.class +INFO: Loading Class: org/lwjgl/util/glu/Cylinder.class +INFO: Loading Class: org/lwjgl/util/glu/Disk.class +INFO: Loading Class: org/lwjgl/util/glu/GLU.class +INFO: Loading Class: org/lwjgl/util/glu/GLUtessellator.class +INFO: Loading Class: org/lwjgl/util/glu/GLUtessellatorCallback.class +INFO: Loading Class: org/lwjgl/util/glu/GLUtessellatorCallbackAdapter.class +INFO: Loading Class: org/lwjgl/util/glu/MipMap.class +INFO: Loading Class: org/lwjgl/util/glu/PartialDisk.class +INFO: Loading Class: org/lwjgl/util/glu/PixelStoreState.class +INFO: Loading Class: org/lwjgl/util/glu/Project.class +INFO: Loading Class: org/lwjgl/util/glu/Quadric.class +INFO: Loading Class: org/lwjgl/util/glu/Registry.class +INFO: Loading Class: org/lwjgl/util/glu/Sphere.class +INFO: Loading Class: org/lwjgl/util/glu/Util.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/ActiveRegion.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/CachedVertex.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Dict$DictLeq.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Dict.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/DictNode.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/GLUface.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/GLUhalfEdge.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/GLUmesh.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/GLUtessellatorImpl.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/GLUvertex.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Geom.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Mesh.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Normal.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQ$Leq.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQ$PQhandleElem.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQ$PQnode.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQ.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQHeap.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQSort$1.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQSort$Stack.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/PriorityQSort.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render$1.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render$FaceCount.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render$RenderFan.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render$RenderStrip.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render$RenderTriangle.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render$renderCallBack.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Render.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Sweep$1.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Sweep$2.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/Sweep.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/TessMono.class +INFO: Loading Class: org/lwjgl/util/glu/tessellation/TessState.class +INFO: Loading Class: org/lwjgl/util/input/ControllerAdapter.class +INFO: Loading Class: org/lwjgl/util/jinput/KeyMap.class +INFO: Loading Class: org/lwjgl/util/jinput/LWJGLEnvironmentPlugin.class +INFO: Loading Class: org/lwjgl/util/jinput/LWJGLKeyboard$Key.class +INFO: Loading Class: org/lwjgl/util/jinput/LWJGLKeyboard.class +INFO: Loading Class: org/lwjgl/util/jinput/LWJGLMouse$Axis.class +INFO: Loading Class: org/lwjgl/util/jinput/LWJGLMouse$Button.class +INFO: Loading Class: org/lwjgl/util/jinput/LWJGLMouse.class +INFO: Loading Class: org/lwjgl/util/mapped/CacheLinePad.class +INFO: Loading Class: org/lwjgl/util/mapped/CacheLineSize$1.class +INFO: Loading Class: org/lwjgl/util/mapped/CacheLineSize.class +INFO: Loading Class: org/lwjgl/util/mapped/CacheUtil.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedField.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedForeach$1.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedForeach.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedHelper.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObject.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectClassLoader.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$1.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$2.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$3.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$FieldInfo.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$MappedSubtypeInfo.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$TransformationAdapter$1.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$TransformationAdapter$2.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer$TransformationAdapter.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectTransformer.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedObjectUnsafe.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedSet.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedSet2.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedSet3.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedSet4.class +INFO: Loading Class: org/lwjgl/util/mapped/MappedType.class +INFO: Loading Class: org/lwjgl/util/mapped/Pointer.class +INFO: Loading Class: org/lwjgl/util/vector/Matrix.class +INFO: Loading Class: org/lwjgl/util/vector/Matrix2f.class +INFO: Loading Class: org/lwjgl/util/vector/Matrix3f.class +INFO: Loading Class: org/lwjgl/util/vector/Matrix4f.class +INFO: Loading Class: org/lwjgl/util/vector/Quaternion.class +INFO: Loading Class: org/lwjgl/util/vector/ReadableVector.class +INFO: Loading Class: org/lwjgl/util/vector/ReadableVector2f.class +INFO: Loading Class: org/lwjgl/util/vector/ReadableVector3f.class +INFO: Loading Class: org/lwjgl/util/vector/ReadableVector4f.class +INFO: Loading Class: org/lwjgl/util/vector/Vector.class +INFO: Loading Class: org/lwjgl/util/vector/Vector2f.class +INFO: Loading Class: org/lwjgl/util/vector/Vector3f.class +INFO: Loading Class: org/lwjgl/util/vector/Vector4f.class +INFO: Loading Class: org/lwjgl/util/vector/WritableVector2f.class +INFO: Loading Class: org/lwjgl/util/vector/WritableVector3f.class +INFO: Loading Class: org/lwjgl/util/vector/WritableVector4f.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/java3d/vecmath/1.5.2/79846ba34cbd89e2422d74d53752f993dcc2ccaf/vecmath-1.5.2.jar +INFO: Loading Class: javax/vecmath/AxisAngle4d.class +INFO: Loading Class: javax/vecmath/AxisAngle4f.class +INFO: Loading Class: javax/vecmath/Color3b.class +INFO: Loading Class: javax/vecmath/Color3f.class +INFO: Loading Class: javax/vecmath/Color4b.class +INFO: Loading Class: javax/vecmath/Color4f.class +INFO: Loading Class: javax/vecmath/GMatrix.class +INFO: Loading Class: javax/vecmath/GVector.class +INFO: Loading Class: javax/vecmath/Matrix3d.class +INFO: Loading Class: javax/vecmath/Matrix3f.class +INFO: Loading Class: javax/vecmath/Matrix4d.class +INFO: Loading Class: javax/vecmath/Matrix4f.class +INFO: Loading Class: javax/vecmath/MismatchedSizeException.class +INFO: Loading Class: javax/vecmath/Point2d.class +INFO: Loading Class: javax/vecmath/Point2f.class +INFO: Loading Class: javax/vecmath/Point2i.class +INFO: Loading Class: javax/vecmath/Point3d.class +INFO: Loading Class: javax/vecmath/Point3f.class +INFO: Loading Class: javax/vecmath/Point3i.class +INFO: Loading Class: javax/vecmath/Point4d.class +INFO: Loading Class: javax/vecmath/Point4f.class +INFO: Loading Class: javax/vecmath/Point4i.class +INFO: Loading Class: javax/vecmath/Quat4d.class +INFO: Loading Class: javax/vecmath/Quat4f.class +INFO: Loading Class: javax/vecmath/SingularMatrixException.class +INFO: Loading Class: javax/vecmath/TexCoord2f.class +INFO: Loading Class: javax/vecmath/TexCoord3f.class +INFO: Loading Class: javax/vecmath/TexCoord4f.class +INFO: Loading Class: javax/vecmath/Tuple2d.class +INFO: Loading Class: javax/vecmath/Tuple2f.class +INFO: Loading Class: javax/vecmath/Tuple2i.class +INFO: Loading Class: javax/vecmath/Tuple3b.class +INFO: Loading Class: javax/vecmath/Tuple3d.class +INFO: Loading Class: javax/vecmath/Tuple3f.class +INFO: Loading Class: javax/vecmath/Tuple3i.class +INFO: Loading Class: javax/vecmath/Tuple4b.class +INFO: Loading Class: javax/vecmath/Tuple4d.class +INFO: Loading Class: javax/vecmath/Tuple4f.class +INFO: Loading Class: javax/vecmath/Tuple4i.class +INFO: Loading Class: javax/vecmath/VecMathI18N.class +INFO: Loading Class: javax/vecmath/VecMathUtil.class +INFO: Loading Class: javax/vecmath/Vector2d.class +INFO: Loading Class: javax/vecmath/Vector2f.class +INFO: Loading Class: javax/vecmath/Vector3d.class +INFO: Loading Class: javax/vecmath/Vector3f.class +INFO: Loading Class: javax/vecmath/Vector4d.class +INFO: Loading Class: javax/vecmath/Vector4f.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-actors/2.11.0/8ccfb6541de179bb1c4d45cf414acee069b7f78b/scala-actors-2.11.0.jar +INFO: Loading Class: scala/actors/$bang$.class +INFO: Loading Class: scala/actors/$bang.class +INFO: Loading Class: scala/actors/AbstractActor$class.class +INFO: Loading Class: scala/actors/AbstractActor.class +INFO: Loading Class: scala/actors/Actor$$anon$1.class +INFO: Loading Class: scala/actors/Actor$$anon$2.class +INFO: Loading Class: scala/actors/Actor$$anon$4.class +INFO: Loading Class: scala/actors/Actor$$anonfun$respondOn$1$$anon$3.class +INFO: Loading Class: scala/actors/Actor$$anonfun$respondOn$1.class +INFO: Loading Class: scala/actors/Actor$.class +INFO: Loading Class: scala/actors/Actor$Body.class +INFO: Loading Class: scala/actors/Actor$RecursiveProxyHandler.class +INFO: Loading Class: scala/actors/Actor$State$.class +INFO: Loading Class: scala/actors/Actor$class.class +INFO: Loading Class: scala/actors/Actor.class +INFO: Loading Class: scala/actors/ActorCanReply$$anonfun$$bang$qmark$1.class +INFO: Loading Class: scala/actors/ActorCanReply$$anonfun$1.class +INFO: Loading Class: scala/actors/ActorCanReply$$anonfun$2$$anon$1.class +INFO: Loading Class: scala/actors/ActorCanReply$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: scala/actors/ActorCanReply$$anonfun$2.class +INFO: Loading Class: scala/actors/ActorCanReply$class.class +INFO: Loading Class: scala/actors/ActorCanReply.class +INFO: Loading Class: scala/actors/ActorProxy.class +INFO: Loading Class: scala/actors/ActorRef$class.class +INFO: Loading Class: scala/actors/ActorRef.class +INFO: Loading Class: scala/actors/ActorTask$$anonfun$1.class +INFO: Loading Class: scala/actors/ActorTask.class +INFO: Loading Class: scala/actors/AskTimeoutException.class +INFO: Loading Class: scala/actors/CanReply.class +INFO: Loading Class: scala/actors/Channel$$anonfun$$bang$qmark$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$$bang$qmark$2.class +INFO: Loading Class: scala/actors/Channel$$anonfun$$qmark$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$2$$anon$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$2$$anonfun$apply$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$2.class +INFO: Loading Class: scala/actors/Channel$$anonfun$react$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$reactWithin$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$receive$1.class +INFO: Loading Class: scala/actors/Channel$$anonfun$receiveWithin$1.class +INFO: Loading Class: scala/actors/Channel.class +INFO: Loading Class: scala/actors/Combinators$$anonfun$loop$1.class +INFO: Loading Class: scala/actors/Combinators$$anonfun$loopWhile$1.class +INFO: Loading Class: scala/actors/Combinators$class.class +INFO: Loading Class: scala/actors/Combinators.class +INFO: Loading Class: scala/actors/DaemonActor$class.class +INFO: Loading Class: scala/actors/DaemonActor.class +INFO: Loading Class: scala/actors/Debug$.class +INFO: Loading Class: scala/actors/Debug.class +INFO: Loading Class: scala/actors/Eval$.class +INFO: Loading Class: scala/actors/Eval.class +INFO: Loading Class: scala/actors/Exit$.class +INFO: Loading Class: scala/actors/Exit.class +INFO: Loading Class: scala/actors/Future.class +INFO: Loading Class: scala/actors/FutureActor$$anonfun$act$1.class +INFO: Loading Class: scala/actors/FutureActor$$anonfun$act$2$$anonfun$apply$mcV$sp$1$$anonfun$apply$1.class +INFO: Loading Class: scala/actors/FutureActor$$anonfun$act$2$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/actors/FutureActor$$anonfun$act$2.class +INFO: Loading Class: scala/actors/FutureActor$$anonfun$respond$1.class +INFO: Loading Class: scala/actors/FutureActor.class +INFO: Loading Class: scala/actors/Futures$$anon$1.class +INFO: Loading Class: scala/actors/Futures$$anon$2$$anonfun$7.class +INFO: Loading Class: scala/actors/Futures$$anon$2$$anonfun$8.class +INFO: Loading Class: scala/actors/Futures$$anon$2$$anonfun$isDefinedAt$1.class +INFO: Loading Class: scala/actors/Futures$$anon$2.class +INFO: Loading Class: scala/actors/Futures$$anonfun$2.class +INFO: Loading Class: scala/actors/Futures$$anonfun$3$$anonfun$apply$2.class +INFO: Loading Class: scala/actors/Futures$$anonfun$3.class +INFO: Loading Class: scala/actors/Futures$$anonfun$4.class +INFO: Loading Class: scala/actors/Futures$$anonfun$5.class +INFO: Loading Class: scala/actors/Futures$$anonfun$6$$anonfun$1.class +INFO: Loading Class: scala/actors/Futures$$anonfun$6.class +INFO: Loading Class: scala/actors/Futures$$anonfun$awaitEither$1.class +INFO: Loading Class: scala/actors/Futures$.class +INFO: Loading Class: scala/actors/Futures.class +INFO: Loading Class: scala/actors/IScheduler$class.class +INFO: Loading Class: scala/actors/IScheduler.class +INFO: Loading Class: scala/actors/InputChannel.class +INFO: Loading Class: scala/actors/InternalActor$$anon$1.class +INFO: Loading Class: scala/actors/InternalActor$$anon$2.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$$qmark$1.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$1.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$2.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$3.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$4.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$5.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$6.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$7.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$8.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$exitLinked$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$exitLinked$1.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$receiveWithin$2.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$searchMailbox$1.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$startSearch$1.class +INFO: Loading Class: scala/actors/InternalActor$$anonfun$unlinkFrom$1.class +INFO: Loading Class: scala/actors/InternalActor$.class +INFO: Loading Class: scala/actors/InternalActor$Body.class +INFO: Loading Class: scala/actors/InternalActor$blocker$.class +INFO: Loading Class: scala/actors/InternalActor$class.class +INFO: Loading Class: scala/actors/InternalActor.class +INFO: Loading Class: scala/actors/InternalReplyReactor$$anon$1.class +INFO: Loading Class: scala/actors/InternalReplyReactor$$anonfun$1.class +INFO: Loading Class: scala/actors/InternalReplyReactor$$anonfun$2.class +INFO: Loading Class: scala/actors/InternalReplyReactor$$anonfun$reactWithin$2.class +INFO: Loading Class: scala/actors/InternalReplyReactor$$anonfun$searchMailbox$1.class +INFO: Loading Class: scala/actors/InternalReplyReactor$class.class +INFO: Loading Class: scala/actors/InternalReplyReactor.class +INFO: Loading Class: scala/actors/KillActorControl.class +INFO: Loading Class: scala/actors/LinkedNode.class +INFO: Loading Class: scala/actors/LinkedQueue.class +INFO: Loading Class: scala/actors/Logger.class +INFO: Loading Class: scala/actors/MQueue.class +INFO: Loading Class: scala/actors/MQueueElement.class +INFO: Loading Class: scala/actors/MessageQueueTracer$.class +INFO: Loading Class: scala/actors/MessageQueueTracer$class.class +INFO: Loading Class: scala/actors/MessageQueueTracer.class +INFO: Loading Class: scala/actors/OutputChannel.class +INFO: Loading Class: scala/actors/PoisonPill$.class +INFO: Loading Class: scala/actors/PoisonPill.class +INFO: Loading Class: scala/actors/ReactChannel$$anonfun$$qmark$1.class +INFO: Loading Class: scala/actors/ReactChannel$$anonfun$react$1.class +INFO: Loading Class: scala/actors/ReactChannel$$anonfun$reactWithin$1.class +INFO: Loading Class: scala/actors/ReactChannel$$anonfun$receive$1.class +INFO: Loading Class: scala/actors/ReactChannel$$anonfun$receiveWithin$1.class +INFO: Loading Class: scala/actors/ReactChannel$SendToReactor$.class +INFO: Loading Class: scala/actors/ReactChannel$SendToReactor.class +INFO: Loading Class: scala/actors/ReactChannel.class +INFO: Loading Class: scala/actors/Reactor$$anon$1.class +INFO: Loading Class: scala/actors/Reactor$$anon$2.class +INFO: Loading Class: scala/actors/Reactor$$anon$3.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$1.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$2.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$dostart$1.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$seq$1$$anonfun$apply$1.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$seq$1.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$startSearch$1$$anonfun$apply$mcV$sp$1.class +INFO: Loading Class: scala/actors/Reactor$$anonfun$startSearch$1.class +INFO: Loading Class: scala/actors/Reactor$.class +INFO: Loading Class: scala/actors/Reactor$class.class +INFO: Loading Class: scala/actors/Reactor.class +INFO: Loading Class: scala/actors/ReactorCanReply$$anon$1$$anonfun$respond$1.class +INFO: Loading Class: scala/actors/ReactorCanReply$$anon$1.class +INFO: Loading Class: scala/actors/ReactorCanReply$$anon$2.class +INFO: Loading Class: scala/actors/ReactorCanReply$$anon$3.class +INFO: Loading Class: scala/actors/ReactorCanReply$$anonfun$$bang$bang$1.class +INFO: Loading Class: scala/actors/ReactorCanReply$class.class +INFO: Loading Class: scala/actors/ReactorCanReply.class +INFO: Loading Class: scala/actors/ReactorTask.class +INFO: Loading Class: scala/actors/ReplyReactor$class.class +INFO: Loading Class: scala/actors/ReplyReactor.class +INFO: Loading Class: scala/actors/ReplyReactorTask.class +INFO: Loading Class: scala/actors/Scheduler$.class +INFO: Loading Class: scala/actors/Scheduler.class +INFO: Loading Class: scala/actors/SchedulerAdapter$$anonfun$execute$1.class +INFO: Loading Class: scala/actors/SchedulerAdapter$class.class +INFO: Loading Class: scala/actors/SchedulerAdapter.class +INFO: Loading Class: scala/actors/SuspendActorControl.class +INFO: Loading Class: scala/actors/TIMEOUT$.class +INFO: Loading Class: scala/actors/TIMEOUT.class +INFO: Loading Class: scala/actors/UncaughtException$.class +INFO: Loading Class: scala/actors/UncaughtException.class +INFO: Loading Class: scala/actors/package$.class +INFO: Loading Class: scala/actors/package.class +INFO: Loading Class: scala/actors/remote/Apply0$.class +INFO: Loading Class: scala/actors/remote/Apply0.class +INFO: Loading Class: scala/actors/remote/CustomObjectInputStream$$anonfun$1.class +INFO: Loading Class: scala/actors/remote/CustomObjectInputStream.class +INFO: Loading Class: scala/actors/remote/DelegateActor$$anonfun$act$1$$anonfun$apply$1.class +INFO: Loading Class: scala/actors/remote/DelegateActor$$anonfun$act$1.class +INFO: Loading Class: scala/actors/remote/DelegateActor.class +INFO: Loading Class: scala/actors/remote/ExitFun.class +INFO: Loading Class: scala/actors/remote/FreshNameCreator$.class +INFO: Loading Class: scala/actors/remote/FreshNameCreator.class +INFO: Loading Class: scala/actors/remote/JavaSerializer.class +INFO: Loading Class: scala/actors/remote/LinkToFun.class +INFO: Loading Class: scala/actors/remote/LocalApply0$.class +INFO: Loading Class: scala/actors/remote/LocalApply0.class +INFO: Loading Class: scala/actors/remote/Locator$.class +INFO: Loading Class: scala/actors/remote/Locator.class +INFO: Loading Class: scala/actors/remote/NamedSend$.class +INFO: Loading Class: scala/actors/remote/NamedSend.class +INFO: Loading Class: scala/actors/remote/NetKernel$$anonfun$terminate$1.class +INFO: Loading Class: scala/actors/remote/NetKernel.class +INFO: Loading Class: scala/actors/remote/Node$.class +INFO: Loading Class: scala/actors/remote/Node.class +INFO: Loading Class: scala/actors/remote/Proxy.class +INFO: Loading Class: scala/actors/remote/RemoteActor$$anonfun$createNetKernelOnPort$1.class +INFO: Loading Class: scala/actors/remote/RemoteActor$.class +INFO: Loading Class: scala/actors/remote/RemoteActor.class +INFO: Loading Class: scala/actors/remote/RemoteApply0$.class +INFO: Loading Class: scala/actors/remote/RemoteApply0.class +INFO: Loading Class: scala/actors/remote/SendTo$.class +INFO: Loading Class: scala/actors/remote/SendTo.class +INFO: Loading Class: scala/actors/remote/Serializer.class +INFO: Loading Class: scala/actors/remote/Service$class.class +INFO: Loading Class: scala/actors/remote/Service.class +INFO: Loading Class: scala/actors/remote/TcpService$$anonfun$2.class +INFO: Loading Class: scala/actors/remote/TcpService$$anonfun$run$1.class +INFO: Loading Class: scala/actors/remote/TcpService$$anonfun$send$1.class +INFO: Loading Class: scala/actors/remote/TcpService$.class +INFO: Loading Class: scala/actors/remote/TcpService.class +INFO: Loading Class: scala/actors/remote/TcpServiceWorker.class +INFO: Loading Class: scala/actors/remote/Terminate$.class +INFO: Loading Class: scala/actors/remote/Terminate.class +INFO: Loading Class: scala/actors/remote/UnlinkFromFun.class +INFO: Loading Class: scala/actors/scheduler/ActorGC$$anonfun$1.class +INFO: Loading Class: scala/actors/scheduler/ActorGC$class.class +INFO: Loading Class: scala/actors/scheduler/ActorGC.class +INFO: Loading Class: scala/actors/scheduler/DaemonScheduler$.class +INFO: Loading Class: scala/actors/scheduler/DaemonScheduler.class +INFO: Loading Class: scala/actors/scheduler/DelegatingScheduler$class.class +INFO: Loading Class: scala/actors/scheduler/DelegatingScheduler.class +INFO: Loading Class: scala/actors/scheduler/DrainableForkJoinPool.class +INFO: Loading Class: scala/actors/scheduler/ExecutorScheduler$$anon$1.class +INFO: Loading Class: scala/actors/scheduler/ExecutorScheduler$$anon$2.class +INFO: Loading Class: scala/actors/scheduler/ExecutorScheduler$.class +INFO: Loading Class: scala/actors/scheduler/ExecutorScheduler$RunCallable.class +INFO: Loading Class: scala/actors/scheduler/ExecutorScheduler$class.class +INFO: Loading Class: scala/actors/scheduler/ExecutorScheduler.class +INFO: Loading Class: scala/actors/scheduler/ForkJoinScheduler$$anon$1.class +INFO: Loading Class: scala/actors/scheduler/ForkJoinScheduler$$anon$2.class +INFO: Loading Class: scala/actors/scheduler/ForkJoinScheduler.class +INFO: Loading Class: scala/actors/scheduler/QuitControl.class +INFO: Loading Class: scala/actors/scheduler/ResizableThreadPoolScheduler$$anon$1.class +INFO: Loading Class: scala/actors/scheduler/ResizableThreadPoolScheduler$DaemonThreadFactory.class +INFO: Loading Class: scala/actors/scheduler/ResizableThreadPoolScheduler.class +INFO: Loading Class: scala/actors/scheduler/SingleThreadedScheduler$$anon$1.class +INFO: Loading Class: scala/actors/scheduler/SingleThreadedScheduler.class +INFO: Loading Class: scala/actors/scheduler/TerminationMonitor$$anonfun$1.class +INFO: Loading Class: scala/actors/scheduler/TerminationMonitor$class.class +INFO: Loading Class: scala/actors/scheduler/TerminationMonitor.class +INFO: Loading Class: scala/actors/scheduler/TerminationService$class.class +INFO: Loading Class: scala/actors/scheduler/TerminationService.class +INFO: Loading Class: scala/actors/scheduler/ThreadPoolConfig$.class +INFO: Loading Class: scala/actors/scheduler/ThreadPoolConfig.class +INFO: Loading Class: scala/actors/threadpool/AbstractCollection.class +INFO: Loading Class: scala/actors/threadpool/AbstractExecutorService.class +INFO: Loading Class: scala/actors/threadpool/AbstractQueue.class +INFO: Loading Class: scala/actors/threadpool/Arrays.class +INFO: Loading Class: scala/actors/threadpool/AtomicInteger.class +INFO: Loading Class: scala/actors/threadpool/BlockingQueue.class +INFO: Loading Class: scala/actors/threadpool/Callable.class +INFO: Loading Class: scala/actors/threadpool/CancellationException.class +INFO: Loading Class: scala/actors/threadpool/CompletionService.class +INFO: Loading Class: scala/actors/threadpool/ExecutionException.class +INFO: Loading Class: scala/actors/threadpool/Executor.class +INFO: Loading Class: scala/actors/threadpool/ExecutorCompletionService$QueueingFuture.class +INFO: Loading Class: scala/actors/threadpool/ExecutorCompletionService.class +INFO: Loading Class: scala/actors/threadpool/ExecutorService.class +INFO: Loading Class: scala/actors/threadpool/Executors$1.class +INFO: Loading Class: scala/actors/threadpool/Executors$2.class +INFO: Loading Class: scala/actors/threadpool/Executors$DefaultThreadFactory.class +INFO: Loading Class: scala/actors/threadpool/Executors$DelegatedExecutorService.class +INFO: Loading Class: scala/actors/threadpool/Executors$FinalizableDelegatedExecutorService.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedCallable$1.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedCallable.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedCallableUsingCurrentClassLoader$1.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedCallableUsingCurrentClassLoader.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedThreadFactory$1$1.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedThreadFactory$1.class +INFO: Loading Class: scala/actors/threadpool/Executors$PrivilegedThreadFactory.class +INFO: Loading Class: scala/actors/threadpool/Executors$RunnableAdapter.class +INFO: Loading Class: scala/actors/threadpool/Executors.class +INFO: Loading Class: scala/actors/threadpool/Future.class +INFO: Loading Class: scala/actors/threadpool/FutureTask.class +INFO: Loading Class: scala/actors/threadpool/LinkedBlockingQueue$Itr.class +INFO: Loading Class: scala/actors/threadpool/LinkedBlockingQueue$Node.class +INFO: Loading Class: scala/actors/threadpool/LinkedBlockingQueue.class +INFO: Loading Class: scala/actors/threadpool/Perf.class +INFO: Loading Class: scala/actors/threadpool/Queue.class +INFO: Loading Class: scala/actors/threadpool/RejectedExecutionException.class +INFO: Loading Class: scala/actors/threadpool/RejectedExecutionHandler.class +INFO: Loading Class: scala/actors/threadpool/RunnableFuture.class +INFO: Loading Class: scala/actors/threadpool/SynchronousQueue$EmptyIterator.class +INFO: Loading Class: scala/actors/threadpool/SynchronousQueue$FifoWaitQueue.class +INFO: Loading Class: scala/actors/threadpool/SynchronousQueue$LifoWaitQueue.class +INFO: Loading Class: scala/actors/threadpool/SynchronousQueue$Node.class +INFO: Loading Class: scala/actors/threadpool/SynchronousQueue$WaitQueue.class +INFO: Loading Class: scala/actors/threadpool/SynchronousQueue.class +INFO: Loading Class: scala/actors/threadpool/ThreadFactory.class +INFO: Loading Class: scala/actors/threadpool/ThreadPoolExecutor$AbortPolicy.class +INFO: Loading Class: scala/actors/threadpool/ThreadPoolExecutor$CallerRunsPolicy.class +INFO: Loading Class: scala/actors/threadpool/ThreadPoolExecutor$DiscardOldestPolicy.class +INFO: Loading Class: scala/actors/threadpool/ThreadPoolExecutor$DiscardPolicy.class +INFO: Loading Class: scala/actors/threadpool/ThreadPoolExecutor$Worker.class +INFO: Loading Class: scala/actors/threadpool/ThreadPoolExecutor.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$1.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$2.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$3.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$4.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$5.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$6.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit$7.class +INFO: Loading Class: scala/actors/threadpool/TimeUnit.class +INFO: Loading Class: scala/actors/threadpool/TimeoutException.class +INFO: Loading Class: scala/actors/threadpool/helpers/FIFOWaitQueue.class +INFO: Loading Class: scala/actors/threadpool/helpers/NanoTimer.class +INFO: Loading Class: scala/actors/threadpool/helpers/ThreadHelpers$1.class +INFO: Loading Class: scala/actors/threadpool/helpers/ThreadHelpers$UncaughtExceptionHandler.class +INFO: Loading Class: scala/actors/threadpool/helpers/ThreadHelpers.class +INFO: Loading Class: scala/actors/threadpool/helpers/Utils$1.class +INFO: Loading Class: scala/actors/threadpool/helpers/Utils$MillisProvider.class +INFO: Loading Class: scala/actors/threadpool/helpers/Utils$SunPerfProvider$1.class +INFO: Loading Class: scala/actors/threadpool/helpers/Utils$SunPerfProvider.class +INFO: Loading Class: scala/actors/threadpool/helpers/Utils.class +INFO: Loading Class: scala/actors/threadpool/helpers/WaitQueue$QueuedSync.class +INFO: Loading Class: scala/actors/threadpool/helpers/WaitQueue$WaitNode.class +INFO: Loading Class: scala/actors/threadpool/helpers/WaitQueue.class +INFO: Loading Class: scala/actors/threadpool/locks/CondVar$ExclusiveLock.class +INFO: Loading Class: scala/actors/threadpool/locks/CondVar.class +INFO: Loading Class: scala/actors/threadpool/locks/Condition.class +INFO: Loading Class: scala/actors/threadpool/locks/FIFOCondVar$1.class +INFO: Loading Class: scala/actors/threadpool/locks/FIFOCondVar.class +INFO: Loading Class: scala/actors/threadpool/locks/Lock.class +INFO: Loading Class: scala/actors/threadpool/locks/ReadWriteLock.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantLock$FairSync.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantLock$NonfairSync.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantLock$Sync.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantLock.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantReadWriteLock$NonfairSync.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantReadWriteLock$ReadLock.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantReadWriteLock$Sync.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantReadWriteLock$WriteLock.class +INFO: Loading Class: scala/actors/threadpool/locks/ReentrantReadWriteLock.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.codehaus.plexus/plexus-utils/3.1.0/60eecb6f15abdb1c653ad80abaac6fe188b3feaa/plexus-utils-3.1.0.jar +INFO: Loading Class: org/codehaus/plexus/util/AbstractScanner.class +INFO: Loading Class: org/codehaus/plexus/util/Base64.class +INFO: Loading Class: org/codehaus/plexus/util/CachedMap.class +INFO: Loading Class: org/codehaus/plexus/util/cli/AbstractStreamHandler.class +INFO: Loading Class: org/codehaus/plexus/util/cli/Arg.class +INFO: Loading Class: org/codehaus/plexus/util/cli/Commandline$Argument.class +INFO: Loading Class: org/codehaus/plexus/util/cli/Commandline$Marker.class +INFO: Loading Class: org/codehaus/plexus/util/cli/Commandline.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineCallable.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineException.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineTimeOutException.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineUtils$1.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineUtils$2.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineUtils$StringStreamConsumer.class +INFO: Loading Class: org/codehaus/plexus/util/cli/CommandLineUtils.class +INFO: Loading Class: org/codehaus/plexus/util/cli/DefaultConsumer.class +INFO: Loading Class: org/codehaus/plexus/util/cli/EnhancedStringTokenizer.class +INFO: Loading Class: org/codehaus/plexus/util/cli/shell/BourneShell.class +INFO: Loading Class: org/codehaus/plexus/util/cli/shell/CmdShell.class +INFO: Loading Class: org/codehaus/plexus/util/cli/shell/CommandShell.class +INFO: Loading Class: org/codehaus/plexus/util/cli/shell/Shell.class +INFO: Loading Class: org/codehaus/plexus/util/cli/ShutdownHookUtils.class +INFO: Loading Class: org/codehaus/plexus/util/cli/StreamConsumer.class +INFO: Loading Class: org/codehaus/plexus/util/cli/StreamFeeder.class +INFO: Loading Class: org/codehaus/plexus/util/cli/StreamPumper.class +INFO: Loading Class: org/codehaus/plexus/util/cli/WriterStreamConsumer.class +INFO: Loading Class: org/codehaus/plexus/util/CollectionUtils.class +INFO: Loading Class: org/codehaus/plexus/util/dag/CycleDetectedException.class +INFO: Loading Class: org/codehaus/plexus/util/dag/CycleDetector.class +INFO: Loading Class: org/codehaus/plexus/util/dag/DAG.class +INFO: Loading Class: org/codehaus/plexus/util/dag/TopologicalSorter.class +INFO: Loading Class: org/codehaus/plexus/util/dag/Vertex.class +INFO: Loading Class: org/codehaus/plexus/util/DirectoryScanner.class +INFO: Loading Class: org/codehaus/plexus/util/DirectoryWalker$DirStackEntry.class +INFO: Loading Class: org/codehaus/plexus/util/DirectoryWalker.class +INFO: Loading Class: org/codehaus/plexus/util/DirectoryWalkListener.class +INFO: Loading Class: org/codehaus/plexus/util/ExceptionUtils.class +INFO: Loading Class: org/codehaus/plexus/util/Expand.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$1.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$EntryImpl.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$EntrySet$1.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$EntrySet.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$KeySet$1.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$KeySet.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$Values$1.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap$Values.class +INFO: Loading Class: org/codehaus/plexus/util/FastMap.class +INFO: Loading Class: org/codehaus/plexus/util/FileUtils$FilterWrapper.class +INFO: Loading Class: org/codehaus/plexus/util/FileUtils.class +INFO: Loading Class: org/codehaus/plexus/util/InterpolationFilterReader.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/ClassMap$1.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/ClassMap$CacheMiss.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/ClassMap$MethodInfo.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/ClassMap.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/MethodMap$AmbiguousException.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/MethodMap.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/ReflectionValueExtractor$Tokenizer.class +INFO: Loading Class: org/codehaus/plexus/util/introspection/ReflectionValueExtractor.class +INFO: Loading Class: org/codehaus/plexus/util/io/InputStreamFacade.class +INFO: Loading Class: org/codehaus/plexus/util/io/RawInputStreamFacade.class +INFO: Loading Class: org/codehaus/plexus/util/io/URLInputStreamFacade.class +INFO: Loading Class: org/codehaus/plexus/util/IOUtil.class +INFO: Loading Class: org/codehaus/plexus/util/Java7Detector.class +INFO: Loading Class: org/codehaus/plexus/util/LineOrientedInterpolatingReader.class +INFO: Loading Class: org/codehaus/plexus/util/MatchPattern.class +INFO: Loading Class: org/codehaus/plexus/util/MatchPatterns.class +INFO: Loading Class: org/codehaus/plexus/util/NioFiles.class +INFO: Loading Class: org/codehaus/plexus/util/Os.class +INFO: Loading Class: org/codehaus/plexus/util/PathTool.class +INFO: Loading Class: org/codehaus/plexus/util/PropertyUtils.class +INFO: Loading Class: org/codehaus/plexus/util/ReaderFactory.class +INFO: Loading Class: org/codehaus/plexus/util/reflection/Reflector.class +INFO: Loading Class: org/codehaus/plexus/util/reflection/ReflectorException.class +INFO: Loading Class: org/codehaus/plexus/util/ReflectionUtils.class +INFO: Loading Class: org/codehaus/plexus/util/Scanner.class +INFO: Loading Class: org/codehaus/plexus/util/SelectorUtils.class +INFO: Loading Class: org/codehaus/plexus/util/StringInputStream.class +INFO: Loading Class: org/codehaus/plexus/util/StringOutputStream.class +INFO: Loading Class: org/codehaus/plexus/util/StringUtils.class +INFO: Loading Class: org/codehaus/plexus/util/SweeperPool$Sweeper.class +INFO: Loading Class: org/codehaus/plexus/util/SweeperPool.class +INFO: Loading Class: org/codehaus/plexus/util/TypeFormat.class +INFO: Loading Class: org/codehaus/plexus/util/WriterFactory.class +INFO: Loading Class: org/codehaus/plexus/util/xml/CompactXMLWriter.class +INFO: Loading Class: org/codehaus/plexus/util/xml/PrettyPrintXMLWriter.class +INFO: Loading Class: org/codehaus/plexus/util/xml/pull/EntityReplacementMap.class +INFO: Loading Class: org/codehaus/plexus/util/xml/pull/MXParser.class +INFO: Loading Class: org/codehaus/plexus/util/xml/pull/MXSerializer.class +INFO: Loading Class: org/codehaus/plexus/util/xml/pull/XmlPullParser.class +INFO: Loading Class: org/codehaus/plexus/util/xml/pull/XmlPullParserException.class +INFO: Loading Class: org/codehaus/plexus/util/xml/pull/XmlSerializer.class +INFO: Loading Class: org/codehaus/plexus/util/xml/SerializerXMLWriter.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlReader.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlReaderException.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlStreamReader.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlStreamReaderException.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlStreamWriter.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlUtil.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XMLWriter.class +INFO: Loading Class: org/codehaus/plexus/util/xml/XmlWriterUtil.class +INFO: Loading Class: org/codehaus/plexus/util/xml/Xpp3Dom.class +INFO: Loading Class: org/codehaus/plexus/util/xml/Xpp3DomBuilder.class +INFO: Loading Class: org/codehaus/plexus/util/xml/Xpp3DomUtils.class +INFO: Loading Class: org/codehaus/plexus/util/xml/Xpp3DomWriter.class +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/7ff832a6eb9ab6a767f1ade2b548092d0fa64795/jinput-platform-2.0.5-natives-linux.jar +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/385ee093e01f587f30ee1c8a2ee7d408fd732e16/jinput-platform-2.0.5-natives-windows.jar +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/net.java.jinput/jinput-platform/2.0.5/53f9c919f34d2ca9de8c51fc4e1e8282029a9232/jinput-platform-2.0.5-natives-osx.jar +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.2-nightly-20140822/78b2a55ce4dc29c6b3ec4df8ca165eba05f9b341/lwjgl-platform-2.9.2-nightly-20140822-natives-windows.jar +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.2-nightly-20140822/d898a33b5d0a6ef3fed3a4ead506566dce6720a5/lwjgl-platform-2.9.2-nightly-20140822-natives-linux.jar +INFO: Adding Archive: /Users/mminaie/.gradle/caches/modules-2/files-2.1/org.lwjgl.lwjgl/lwjgl-platform/2.9.2-nightly-20140822/79f5ce2fea02e77fe47a3c745219167a542121d7/lwjgl-platform-2.9.2-nightly-20140822-natives-osx.jar +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerHeldItem +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerBipedArmor +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerLlamaDecor +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerSaddle +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerSlimeGel +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerSheepWool +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerSpiderEyes +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerSnowmanHead +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerVillagerArmor +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerStrayClothing +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerWolfCollar +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerWitherAura +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/ShaderDefault +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/JsonBlendingMode +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/ShaderGroup +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/ShaderManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/Shader +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/ShaderLinkHelper +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/ShaderLoader +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/ShaderUniform +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/AbstractTexture +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ThreadDownloadImageData +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/DynamicTexture +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/LayeredColorMaskTexture +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/ITextureMapPopulator +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/PngSizeInfo +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/LayeredTexture +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/Stitcher +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/SimpleTexture +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/TextureMap +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/StitcherException +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/TextureManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/TextureAtlasSprite +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/TextureUtil +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/ITextureObject +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/ITickableTextureObject +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/texture/ITickable +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/vertex/VertexBuffer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/vertex/DefaultVertexFormats +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/vertex/VertexFormat +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/vertex/VertexFormatElement +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourceIndex +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/AbstractResourcePack +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/DefaultResourcePack +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/DefaultPlayerSkin +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/FallbackResourceManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourceIndexFolder +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/FolderResourcePack +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/FileResourcePack +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/GrassColorReloadListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/FoliageColorReloadListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/IResource +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/IReloadableResourceManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/IResourceManagerReloadListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/IResourceManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/LegacyV2Adapter +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/IResourcePack +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourcePackRepository +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourcePackFileNotFoundException +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/SimpleResource +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/SimpleReloadableResourceManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/I18n +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/SkinManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/Language +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/Locale +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/LanguageManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/BaseMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextFormatting +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/IMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/crash/CrashReport +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/IMetadataSection +INFO: ... done +INFO: Decompiling class net/minecraft/crash/CrashReportCategory +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/AnimationFrame +INFO: ... done +INFO: Decompiling class net/minecraft/crash/ICrashReportDetail +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/MetadataSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/AnimationMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/util/ReportedException +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/AnimationMetadataSection +INFO: ... done +INFO: Decompiling class net/minecraft/util/ChatAllowedCharacters +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/FontMetadataSection +INFO: ... done +INFO: Decompiling class net/minecraft/util/Util +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/Advancement +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/AdvancementList +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/FontMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/AdvancementProgress +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/LanguageMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/AdvancementRewards +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/LanguageMetadataSection +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/CriteriaTriggers +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/PackMetadataSection +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/Criterion +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/CriterionProgress +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/ICriterionTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/PackMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/ICriterionInstance +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/TextureMetadataSection +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/DisplayInfo +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/FrameType +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/AdvancementTreeNode +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/data/TextureMetadataSectionSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/AbstractCriterionInstance +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ModelRotation +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/BredAnimalsTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/IBakedModel +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/BrewedPotionTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/ChangeDimensionTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/ConstructBeaconTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/ConsumeItemTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BuiltInModel +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ModelManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ModelBakery +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/MultipartBakedModel +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ModelResourceLocation +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/WeightedBakedModel +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/SimpleBakedModel +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/MovingSound +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/PositionedSound +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/GuardianSound +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/ElytraSound +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/MovingSoundMinecartRiding +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/MovingSoundMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/Sound +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/PositionedSoundRecord +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/SoundListSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/SoundList +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/ITickableSound +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/ISound +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/SearchTree +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/ISearchTree +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/SearchTreeManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/SuffixArray +INFO: ... done +INFO: Decompiling class net/minecraft/server/integrated/IntegratedServer +INFO: ... done +INFO: Decompiling class net/minecraft/server/integrated/IntegratedPlayerList +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/LanServerInfo +INFO: ... done +INFO: Decompiling class net/minecraft/server/integrated/IntegratedServerCommandManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/ThreadLanServerPing +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/LanServerDetector +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/MusicTicker +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/ISoundEventListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/SoundManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/SoundRegistry +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/SoundHandler +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/ISoundEventAccessor +INFO: ... done +INFO: Decompiling class net/minecraft/client/audio/SoundEventAccessor +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/CompletedTutorialStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/FindTreeStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/CraftPlanksStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/OpenInventoryStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/MovementStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/Tutorial +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/PunchTreeStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/ITutorialStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/tutorial/TutorialSteps +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/Vector3d +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/Matrix4f +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/OpenGlHelper +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/RecipeBookClient +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsClickableScrolledSelectionList +INFO: ... done +INFO: Decompiling class net/minecraft/server/MinecraftServer +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsEditBox +INFO: ... done +INFO: Decompiling class net/minecraft/realms/Realms +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsServerAddress +INFO: ... done +INFO: Decompiling class net/minecraft/realms/Tezzelator +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsScreen +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsSharedConstants +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/CuredZombieVillagerTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/DamagePredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/DamageSourcePredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/DistancePredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/EffectsChangedTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/EnchantedItemTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/EnchantmentPredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/EnterBlockTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/EntityHurtPlayerTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/EntityPredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/ImpossibleTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/InventoryChangeTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/ItemDurabilityTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/ItemPredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/KilledTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/LevitationTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/LocationPredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/PositionTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/MinMaxBounds +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/MobEffectsPredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/NBTPredicate +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/NetherTravelTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/PlacedBlockTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/PlayerHurtEntityTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/RecipeUnlockedTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/SummonedEntityTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/TameAnimalTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/TickTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/VillagerTradeTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/UsedEnderEyeTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/critereon/UsedTotemTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/command/ICommandListener +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandBase +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandHandler +INFO: ... done +INFO: Decompiling class net/minecraft/command/ICommand +INFO: ... done +INFO: Decompiling class net/minecraft/command/ICommandManager +INFO: ... done +INFO: Decompiling class net/minecraft/command/FunctionObject +INFO: ... done +INFO: Decompiling class net/minecraft/command/ICommandSender +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandSenderWrapper +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandResultStats +INFO: ... done +INFO: Decompiling class net/minecraft/command/EntitySelector +INFO: ... done +INFO: Decompiling class net/minecraft/command/AdvancementCommand +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandBanIp +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandListBans +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandBanPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandBlockData +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandClearInventory +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandClone +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandDeOp +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandDebug +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandDefaultGameMode +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandEffect +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandEmote +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandEnchant +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandEntityData +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandExecuteAt +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandXP +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandFill +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandFunction +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandDifficulty +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandGameMode +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandGameRule +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandGive +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandHelp +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandServerKick +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandKill +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandListPlayers +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandLocate +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandMessage +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandOp +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandPardonIp +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandPardonPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandParticle +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandPlaySound +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandPublishLocalServer +INFO: ... done +INFO: Decompiling class net/minecraft/command/RecipeCommand +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandReload +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandReplaceItem +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandSaveAll +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandSaveOff +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandSaveOn +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandBroadcast +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandScoreboard +INFO: ... done +INFO: Decompiling class net/minecraft/command/ServerCommandManager +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandSetBlock +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandSetPlayerTimeout +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandSetSpawnpoint +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandSetDefaultSpawnpoint +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandShowSeed +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandSpreadPlayers +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandStats +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandStop +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandStopSound +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandSummon +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandTeleport +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandMessageRaw +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandTestForBlock +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandCompare +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandTestFor +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandTime +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandTitle +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandToggleDownfall +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandTP +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandTrigger +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandWeather +INFO: ... done +INFO: Decompiling class net/minecraft/command/server/CommandWhitelist +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandWorldBorder +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandException +INFO: ... done +INFO: Decompiling class net/minecraft/command/EntityNotFoundException +INFO: ... done +INFO: Decompiling class net/minecraft/command/InvalidBlockStateException +INFO: ... done +INFO: Decompiling class net/minecraft/command/NumberInvalidException +INFO: ... done +INFO: Decompiling class net/minecraft/command/SyntaxErrorException +INFO: ... done +INFO: Decompiling class net/minecraft/command/PlayerNotFoundException +INFO: ... done +INFO: Decompiling class net/minecraft/command/CommandNotFoundException +INFO: ... done +INFO: Decompiling class net/minecraft/command/WrongUsageException +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/BlockPos +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/IBlockSource +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSourceImpl +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/Cartesian +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/BehaviorDefaultDispenseItem +INFO: ... done +INFO: Decompiling class net/minecraft/util/registry/RegistryNamespacedDefaultedByKey +INFO: ... done +INFO: Decompiling class net/minecraft/util/registry/RegistryDefaulted +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumFacing +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/IBehaviorDispenseItem +INFO: ... done +INFO: Decompiling class net/minecraft/util/IObjectIntIterable +INFO: ... done +INFO: Decompiling class net/minecraft/util/ObjectIntIdentityMap +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/ILocatableSource +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/ILocation +INFO: ... done +INFO: Decompiling class net/minecraft/util/MapPopulator +INFO: ... done +INFO: Decompiling class net/minecraft/util/registry/RegistryNamespaced +INFO: ... done +INFO: Decompiling class net/minecraft/util/NonNullList +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumParticleTypes +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/IPosition +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/PositionImpl +INFO: ... done +INFO: Decompiling class net/minecraft/util/registry/IRegistry +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/Rotations +INFO: ... done +INFO: Decompiling class net/minecraft/util/registry/RegistrySimple +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/Vec3i +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/translation/I18n +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/translation/LanguageMap +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagByteArray +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagByte +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagCompound +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagDouble +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagEnd +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagFloat +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagIntArray +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagInt +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagList +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagLongArray +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagLong +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTSizeTracker +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/CompressedStreamTools +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTUtil +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTPrimitive +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagShort +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTTagString +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTBase +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/NBTException +INFO: ... done +INFO: Decompiling class net/minecraft/nbt/JsonToNBT +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyEncryptionTranslator +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyEncryptingDecoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyEncryptingEncoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyCompressionDecoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyCompressionEncoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/NetworkManager +INFO: ... done +INFO: Decompiling class net/minecraft/network/EnumConnectionState +INFO: ... done +INFO: Decompiling class net/minecraft/network/PacketBuffer +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyPacketDecoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyPacketEncoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/INetHandler +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyVarint21FrameDecoder +INFO: ... done +INFO: Decompiling class net/minecraft/network/NettyVarint21FrameEncoder +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentBase +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/ChatType +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/event/ClickEvent +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/ITextComponent +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentUtils +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/event/HoverEvent +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentKeybind +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentScore +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentSelector +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/Style +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentString +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentTranslation +INFO: ... done +INFO: Decompiling class net/minecraft/util/text/TextComponentTranslationFormatException +INFO: ... done +INFO: Decompiling class net/minecraft/network/Packet +INFO: ... done +INFO: Decompiling class net/minecraft/network/EnumPacketDirection +INFO: ... done +INFO: Decompiling class net/minecraft/network/PacketThreadUtil +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/INetHandlerPlayClient +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnObject +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnExperienceOrb +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnGlobalEntity +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnMob +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnPainting +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketAnimation +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketStatistics +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketBlockBreakAnim +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketUpdateTileEntity +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketBlockAction +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketBlockChange +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketUpdateBossInfo +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketServerDifficulty +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketTabComplete +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketChat +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketMultiBlockChange +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketConfirmTransaction +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCloseWindow +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketOpenWindow +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketWindowItems +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketWindowProperty +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSetSlot +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCooldown +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCustomPayload +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCustomSound +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketDisconnect +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityStatus +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketExplosion +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketUnloadChunk +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketChangeGameState +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketKeepAlive +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketChunkData +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEffect +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketParticles +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketJoinGame +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketMaps +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntity +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketMoveVehicle +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSignEditorOpen +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketPlaceGhostRecipe +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketPlayerAbilities +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCombatEvent +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketPlayerListItem +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketPlayerPosLook +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketUseBed +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketRecipeBook +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketDestroyEntities +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketRemoveEntityEffect +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketResourcePackSend +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketRespawn +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityHeadLook +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSelectAdvancementsTab +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketWorldBorder +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCamera +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketHeldItemChange +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketDisplayObjective +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityMetadata +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityAttach +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityVelocity +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityEquipment +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSetExperience +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketUpdateHealth +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketScoreboardObjective +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSetPassengers +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketTeams +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketUpdateScore +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSpawnPosition +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketTimeUpdate +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketTitle +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketSoundEffect +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketPlayerListHeaderFooter +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketCollectItem +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityTeleport +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketAdvancementInfo +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityProperties +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/server/SPacketEntityEffect +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/INetHandlerPlayServer +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketConfirmTeleport +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketTabComplete +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketChatMessage +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketClientStatus +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketClientSettings +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketConfirmTransaction +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketEnchantItem +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketClickWindow +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketCloseWindow +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketCustomPayload +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketUseEntity +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketKeepAlive +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketVehicleMove +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketSteerBoat +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketPlaceRecipe +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketPlayerAbilities +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketPlayerDigging +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketEntityAction +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketInput +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketRecipeInfo +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketResourcePackStatus +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketSeenAdvancements +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketHeldItemChange +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketCreativeInventoryAction +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketUpdateSign +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketAnimation +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketSpectate +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock +INFO: ... done +INFO: Decompiling class net/minecraft/network/play/client/CPacketPlayerTryUseItem +INFO: ... done +INFO: Decompiling class net/minecraft/network/handshake/client/C00Handshake +INFO: ... done +INFO: Decompiling class net/minecraft/network/handshake/INetHandlerHandshakeServer +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/INetHandlerLoginClient +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/server/SPacketLoginSuccess +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/server/SPacketEncryptionRequest +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/server/SPacketEnableCompression +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/server/SPacketDisconnect +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/INetHandlerLoginServer +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/client/CPacketLoginStart +INFO: ... done +INFO: Decompiling class net/minecraft/network/login/client/CPacketEncryptionResponse +INFO: ... done +INFO: Decompiling class net/minecraft/network/status/INetHandlerStatusClient +INFO: ... done +INFO: Decompiling class net/minecraft/network/status/server/SPacketPong +INFO: ... done +INFO: Decompiling class net/minecraft/network/status/server/SPacketServerInfo +INFO: ... done +INFO: Decompiling class net/minecraft/network/ServerStatusResponse +INFO: ... done +INFO: Decompiling class net/minecraft/network/status/INetHandlerStatusServer +INFO: ... done +INFO: Decompiling class net/minecraft/network/status/client/CPacketPing +INFO: ... done +INFO: Decompiling class net/minecraft/network/status/client/CPacketServerQuery +INFO: ... done +INFO: Decompiling class net/minecraft/network/datasync/DataParameter +INFO: ... done +INFO: Decompiling class net/minecraft/network/datasync/DataSerializer +INFO: ... done +INFO: Decompiling class net/minecraft/network/datasync/DataSerializers +INFO: ... done +INFO: Decompiling class net/minecraft/network/datasync/EntityDataManager +INFO: ... done +INFO: Decompiling class net/minecraft/util/ServerRecipeBookHelper +INFO: ... done +INFO: Decompiling class net/minecraft/util/ResourceLocation +INFO: ... done +INFO: Decompiling class net/minecraft/dispenser/BehaviorProjectileDispense +INFO: ... done +INFO: Decompiling class net/minecraft/init/Bootstrap +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/JsonException +INFO: ... done +INFO: Decompiling class net/minecraft/server/DebugLoggingPrintStream +INFO: ... done +INFO: Decompiling class net/minecraft/util/LoggingPrintStream +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/PlayerAdvancements +INFO: ... done +INFO: Decompiling class net/minecraft/network/ThreadQuickExitException +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/AdvancementManager +INFO: ... done +INFO: Decompiling class net/minecraft/advancements/FunctionManager +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ServerScoreboard +INFO: ... done +INFO: Decompiling class net/minecraft/util/ITickable +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/DestroyBlockProgress +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldServerDemo +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/DemoPlayerInteractionManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldServerMulti +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityTracker +INFO: ... done +INFO: Decompiling class net/minecraft/world/BossInfoServer +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkProviderServer +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldServer +INFO: ... done +INFO: Decompiling class net/minecraft/world/ServerWorldEventHandler +INFO: ... done +INFO: Decompiling class net/minecraft/entity/player/EntityPlayerMP +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/PlayerInteractionManager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityTrackerEntry +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/PlayerChunkMapEntry +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/PlayerChunkMap +INFO: ... done +INFO: Decompiling class net/minecraft/network/LegacyPingHandler +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/NetHandlerHandshakeMemory +INFO: ... done +INFO: Decompiling class net/minecraft/network/NetworkSystem +INFO: ... done +INFO: Decompiling class net/minecraft/network/NetHandlerPlayServer +INFO: ... done +INFO: Decompiling class net/minecraft/server/network/NetHandlerHandshakeTCP +INFO: ... done +INFO: Decompiling class net/minecraft/server/network/NetHandlerLoginServer +INFO: ... done +INFO: Decompiling class net/minecraft/server/network/NetHandlerStatusServer +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListEntryBan +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/PlayerProfileCache +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListIPBans +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListIPBansEntry +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/PreYggdrasilConverter +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/PlayerList +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListOps +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListOpsEntry +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListEntry +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserList +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListBans +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListBansEntry +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListWhitelist +INFO: ... done +INFO: Decompiling class net/minecraft/server/management/UserListWhitelistEntry +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConConsoleSource +INFO: ... done +INFO: Decompiling class net/minecraft/util/SoundEvent +INFO: ... done +INFO: Decompiling class net/minecraft/init/SoundEvents +INFO: ... done +INFO: Decompiling class net/minecraft/util/SoundCategory +INFO: ... done +INFO: Decompiling class net/minecraft/stats/StatBasic +INFO: ... done +INFO: Decompiling class net/minecraft/stats/StatCrafting +INFO: ... done +INFO: Decompiling class net/minecraft/stats/RecipeBook +INFO: ... done +INFO: Decompiling class net/minecraft/stats/RecipeBookServer +INFO: ... done +INFO: Decompiling class net/minecraft/stats/StatisticsManagerServer +INFO: ... done +INFO: Decompiling class net/minecraft/stats/StatBase +INFO: ... done +INFO: Decompiling class net/minecraft/stats/IStatType +INFO: ... done +INFO: Decompiling class net/minecraft/util/TupleIntJsonSerializable +INFO: ... done +INFO: Decompiling class net/minecraft/util/IJsonSerializable +INFO: ... done +INFO: Decompiling class net/minecraft/stats/StatList +INFO: ... done +INFO: Decompiling class net/minecraft/stats/StatisticsManager +INFO: ... done +INFO: Decompiling class net/minecraft/realms/DisconnectedRealmsScreen +INFO: ... done +INFO: Decompiling class net/minecraft/util/BitArray +INFO: ... done +INFO: Decompiling class net/minecraft/util/ClassInheritanceMultiMap +INFO: ... done +INFO: Decompiling class net/minecraft/util/IntIdentityHashBiMap +INFO: ... done +INFO: Decompiling class net/minecraft/util/CryptManager +INFO: ... done +INFO: Decompiling class net/minecraft/util/FrameTimer +INFO: ... done +INFO: Decompiling class net/minecraft/util/JsonUtils +INFO: ... done +INFO: Decompiling class net/minecraft/util/HttpUtil +INFO: ... done +INFO: Decompiling class net/minecraft/util/LowerStringMap +INFO: ... done +INFO: Decompiling class net/minecraft/util/IntegerCache +INFO: ... done +INFO: Decompiling class net/minecraft/util/IntHashMap +INFO: ... done +INFO: Decompiling class net/minecraft/util/LazyLoadBase +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumTypeAdapterFactory +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/MathHelper +INFO: ... done +INFO: Decompiling class net/minecraft/profiler/Profiler +INFO: ... done +INFO: Decompiling class net/minecraft/util/IProgressUpdate +INFO: ... done +INFO: Decompiling class net/minecraft/util/MouseFilter +INFO: ... done +INFO: Decompiling class net/minecraft/util/IStringSerializable +INFO: ... done +INFO: Decompiling class net/minecraft/util/StringUtils +INFO: ... done +INFO: Decompiling class net/minecraft/util/Tuple +INFO: ... done +INFO: Decompiling class net/minecraft/util/WeightedRandom +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/IFixableData +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/IFixType +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/FixTypes +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/IDataFixer +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/DataFixer +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/DataFixesManager +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/IDataWalker +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/AddBedTileEntity +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/BedItemColor +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/TileEntityId +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/SpawnerEntityTypes +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ShulkerBoxTileColor +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/SignStrictJSON +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ArmorStandSilent +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ElderGuardianSplit +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/EntityArmorAndHeld +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/EntityHealth +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/HorseSaddle +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/HorseSplit +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/EntityId +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/MinecartEntityTypes +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/PaintingDirection +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/RedundantChanceTags +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/RidingToPassengers +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/SkeletonSplit +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/StringToUUID +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ZombieSplit +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ZombieProfToType +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/BannerItemColor +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/CookedFishIDTypo +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ItemIntIDToString +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/PotionItems +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ShulkerBoxItemColor +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/SpawnEggNames +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/TotemItemRename +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/PotionWater +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/BookPagesStrictJSON +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsVertexFormatElement +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/ForceVBOOn +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/walkers/ItemStackData +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/walkers/BlockEntityTag +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/walkers/EntityTag +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/walkers/ItemStackDataLists +INFO: ... done +INFO: Decompiling class net/minecraft/util/datafix/walkers/Filtered +INFO: ... done +INFO: Decompiling class net/minecraft/util/IThreadListener +INFO: ... done +INFO: Decompiling class net/minecraft/world/BossInfo +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryLargeChest +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/IInventory +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ItemStackHelper +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/IInventoryChangedListener +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryHelper +INFO: ... done +INFO: Decompiling class net/minecraft/world/EnumDifficulty +INFO: ... done +INFO: Decompiling class net/minecraft/world/DifficultyInstance +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumHand +INFO: ... done +INFO: Decompiling class net/minecraft/world/IInteractionObject +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumActionResult +INFO: ... done +INFO: Decompiling class net/minecraft/util/ActionResult +INFO: ... done +INFO: Decompiling class net/minecraft/world/LockCode +INFO: ... done +INFO: Decompiling class net/minecraft/world/ILockableContainer +INFO: ... done +INFO: Decompiling class net/minecraft/world/IWorldNameable +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/ILootContainer +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryBasic +INFO: ... done +INFO: Decompiling class net/minecraft/profiler/Snooper +INFO: ... done +INFO: Decompiling class net/minecraft/profiler/ISnooperInfo +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ISidedInventory +INFO: ... done +INFO: Decompiling class net/minecraft/util/CombatEntry +INFO: ... done +INFO: Decompiling class net/minecraft/util/CombatRules +INFO: ... done +INFO: Decompiling class net/minecraft/util/CombatTracker +INFO: ... done +INFO: Decompiling class net/minecraft/util/DamageSource +INFO: ... done +INFO: Decompiling class net/minecraft/util/EntityDamageSource +INFO: ... done +INFO: Decompiling class net/minecraft/util/EntityDamageSourceIndirect +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionAbsorption +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionAttackDamage +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionHealthBoost +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionHealth +INFO: ... done +INFO: Decompiling class net/minecraft/potion/Potion +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionEffect +INFO: ... done +INFO: Decompiling class net/minecraft/init/MobEffects +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityAgeable +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityAreaEffectCloud +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/IAnimals +INFO: ... done +INFO: Decompiling class net/minecraft/entity/Entity +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityList +INFO: ... done +INFO: Decompiling class net/minecraft/util/EntitySelectors +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/EntityEquipmentSlot +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityXPOrb +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityFlying +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumHandSide +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityLivingBase +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityLiving +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EnumCreatureType +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IEntityLivingData +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntitySpawnPlacementRegistry +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EnumCreatureAttribute +INFO: ... done +INFO: Decompiling class net/minecraft/entity/MoverType +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IEntityOwnable +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityCreature +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IJumpingMount +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityTameable +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/IAttribute +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/IAttributeInstance +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/AttributeModifier +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/BaseAttribute +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/AbstractAttributeMap +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/ModifiableAttributeInstance +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/AttributeMap +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/attributes/RangedAttribute +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityBodyHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityFlyHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityJumpHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityLookHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityMoveHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIAvoidEntity +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIBeg +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIBreakDoor +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIMate +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIDoorInteract +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIEatGrass +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFleeSun +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAISwimming +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFollow +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFollowOwnerFlying +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFollowOwner +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFollowParent +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIBase +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAITasks +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIHarvestFarmland +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIWatchClosest2 +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAILandOnOwnersShoulder +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAILeapAtTarget +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAILlamaFollowCaravan +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIWatchClosest +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAILookAtTradePlayer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIVillagerMate +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIAttackMelee +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIMoveIndoors +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIMoveThroughVillage +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIMoveToBlock +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIMoveTowardsRestriction +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIMoveTowardsTarget +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIOcelotAttack +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIOcelotSit +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAILookAtVillager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIOpenDoor +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIPanic +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIPlay +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAILookIdle +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIWander +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIAttackRanged +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIAttackRangedBow +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIRestrictOpenDoor +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIRestrictSun +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAISit +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAICreeperSwell +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFollowGolem +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAITempt +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAITradePlayer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIVillagerInteract +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIWanderAvoidWater +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIZombieAttack +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIDefendVillage +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIHurtByTarget +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFindEntityNearest +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAINearestAttackableTarget +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAITargetNonTamed +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIOwnerHurtByTarget +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAIOwnerHurtTarget +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAITarget +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathNavigateFlying +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathNavigateGround +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathNavigate +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathWorldListener +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathNavigateClimber +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathNavigateSwimmer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntitySenses +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/RandomPositionGenerator +INFO: ... done +INFO: Decompiling class net/minecraft/village/VillageDoorInfo +INFO: ... done +INFO: Decompiling class net/minecraft/village/Village +INFO: ... done +INFO: Decompiling class net/minecraft/village/VillageSiege +INFO: ... done +INFO: Decompiling class net/minecraft/village/VillageCollection +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityAmbientCreature +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityBat +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityAnimal +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityChicken +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityCow +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityFlying +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityGolem +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsAnvilLevelStorageSource +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsScrolledSelectionList +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsSimpleScrolledSelectionList +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsSliderButton +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsVertexFormat +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsMth +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsBufferBuilder +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsDefaultVertexFormat +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityMooshroom +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityParrot +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityOcelot +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityPolarBear +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityPig +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntitySheep +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityRabbit +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntitySnowman +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityShoulderRiding +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityIronGolem +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntitySquid +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityWolf +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityWaterMob +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/AbstractHorse +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/AbstractChestHorse +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityHorse +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityDonkey +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityLlama +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/HorseArmorType +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntitySkeletonHorse +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityMule +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityZombieHorse +INFO: ... done +INFO: Decompiling class net/minecraft/entity/ai/EntityAISkeletonRiders +INFO: ... done +INFO: Decompiling class net/minecraft/entity/MultiPartEntityPart +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IEntityMultiPart +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/EntityDragon +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityEnderCrystal +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseBase +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseSittingBase +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseDying +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseHover +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/IPhase +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseLanding +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseList +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseTakeoff +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/dragon/phase/PhaseManager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/boss/EntityWither +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityArmorStand +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityHanging +INFO: ... done +INFO: Decompiling class net/minecraft/entity/EntityLeashKnot +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityItemFrame +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityPainting +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityFishHook +INFO: ... done +INFO: Decompiling class net/minecraft/entity/effect/EntityLightningBolt +INFO: ... done +INFO: Decompiling class net/minecraft/entity/effect/EntityWeatherEffect +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityFallingBlock +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityTNTPrimed +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityItem +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/AbstractIllager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityBlaze +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/AbstractSkeleton +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityCreeper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityCaveSpider +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityEnderman +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityElderGuardian +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/IMob +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityEndermite +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityGhast +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityEvoker +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityGiantZombie +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityHusk +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityGuardian +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityMagmaCube +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityIllusionIllager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityPigZombie +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityMob +INFO: ... done +INFO: Decompiling class net/minecraft/entity/SharedMonsterAttributes +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IRangedAttackMob +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntitySilverfish +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityShulker +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntitySlime +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntitySkeleton +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntitySpider +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntitySpellcasterIllager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityVex +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityStray +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityWitch +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityVindicator +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityZombie +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityWitherSkeleton +INFO: ... done +INFO: Decompiling class net/minecraft/entity/monster/EntityZombieVillager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/INpc +INFO: ... done +INFO: Decompiling class net/minecraft/entity/NpcMerchant +INFO: ... done +INFO: Decompiling class net/minecraft/entity/passive/EntityVillager +INFO: ... done +INFO: Decompiling class net/minecraft/entity/player/InventoryPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/player/PlayerCapabilities +INFO: ... done +INFO: Decompiling class net/minecraft/entity/player/EnumPlayerModelParts +INFO: ... done +INFO: Decompiling class net/minecraft/entity/player/EntityPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/RecipeItemHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityDragonFireball +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityArrow +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityEnderEye +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityEvokerFangs +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityFireworkRocket +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityFireball +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityLlamaSpit +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityLargeFireball +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/ProjectileHelper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IProjectile +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntitySmallFireball +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityShulkerBullet +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntitySpectralArrow +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntitySnowball +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityEgg +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityThrowable +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityExpBottle +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityEnderPearl +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityPotion +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityWitherSkull +INFO: ... done +INFO: Decompiling class net/minecraft/entity/projectile/EntityTippedArrow +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityBoat +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartChest +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartContainer +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartCommandBlock +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartHopper +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartFurnace +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartMobSpawner +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartEmpty +INFO: ... done +INFO: Decompiling class net/minecraft/entity/item/EntityMinecartTNT +INFO: ... done +INFO: Decompiling class net/minecraft/util/FoodStats +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/Container +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerBeacon +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerRepair +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerChest +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerBrewingStand +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/IContainerListener +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ClickType +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerWorkbench +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryCrafting +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsBridge +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerDispenser +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/SlotFurnaceFuel +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerEnchantment +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/SlotFurnaceOutput +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerFurnace +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerHorseChest +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerHopper +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerHorseInventory +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerMerchant +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryMerchant +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryEnderChest +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/SlotMerchantResult +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/SlotCrafting +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/InventoryCraftResult +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/SlotShulkerBox +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/ContainerShulkerBox +INFO: ... done +INFO: Decompiling class net/minecraft/inventory/Slot +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemAnvilBlock +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemAir +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemArmorStand +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemArmor +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemAxe +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemArrow +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBanner +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBlock +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBed +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBoat +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBlockSpecial +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemGlassBottle +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBook +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSoup +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBow +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemCarrotOnAStick +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBucket +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemClock +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemChorusFruit +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemCompass +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemCoal +INFO: ... done +INFO: Decompiling class net/minecraft/creativetab/CreativeTabs +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemMapBase +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemDoor +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemTool +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemDye +INFO: ... done +INFO: Decompiling class net/minecraft/item/EnumDyeColor +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemEgg +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemCloth +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemEmptyMap +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemElytra +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemEndCrystal +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemEnchantedBook +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemEnderEye +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemExpBottle +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemEnderPearl +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFireworkCharge +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFireball +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFishFood +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFirework +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFlintAndSteel +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFishingRod +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemAppleGold +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemFood +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemHoe +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemHangingEntity +INFO: ... done +INFO: Decompiling class net/minecraft/util/CooldownTracker +INFO: ... done +INFO: Decompiling class net/minecraft/item/Item +INFO: ... done +INFO: Decompiling class net/minecraft/item/IItemPropertyGetter +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemStack +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemKnowledgeBook +INFO: ... done +INFO: Decompiling class net/minecraft/init/Items +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemLeaves +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemLead +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemMap +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemLingeringPotion +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemBucketMilk +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemMultiTexture +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemPickaxe +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemNameTag +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemPotion +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemPiston +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemRecord +INFO: ... done +INFO: Decompiling class net/minecraft/item/EnumRarity +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSaddle +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemRedstone +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSeeds +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSeedFood +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemShears +INFO: ... done +INFO: Decompiling class net/minecraft/util/CooldownTrackerServer +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSpade +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemShield +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSign +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemShulkerBox +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSkull +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSimpleFoiled +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSnow +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSlab +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemMonsterPlacer +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSnowball +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSplashPotion +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSpectralArrow +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemColored +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemSword +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemTippedArrow +INFO: ... done +INFO: Decompiling class net/minecraft/item/EnumAction +INFO: ... done +INFO: Decompiling class net/minecraft/client/util/ITooltipFlag +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemWritableBook +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemLilyPad +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionType +INFO: ... done +INFO: Decompiling class net/minecraft/item/ItemWrittenBook +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionUtils +INFO: ... done +INFO: Decompiling class net/minecraft/potion/PotionHelper +INFO: ... done +INFO: Decompiling class net/minecraft/init/PotionTypes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipesBanners +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipesArmorDyes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipeFireworks +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipeBookCloning +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/Ingredient +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/FurnaceRecipes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipesMapExtending +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipesMapCloning +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/CraftingManager +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/IRecipe +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/ShapedRecipes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipeRepairItem +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/ShieldRecipes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/ShapelessRecipes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/ShulkerBoxRecipes +INFO: ... done +INFO: Decompiling class net/minecraft/item/crafting/RecipeTippedArrow +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentArrowFire +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentArrowDamage +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentArrowKnockback +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentArrowInfinite +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentDamage +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentBindingCurse +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentDigging +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentDurability +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnumEnchantmentType +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/Enchantment +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentData +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentHelper +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentFireAspect +INFO: ... done +INFO: Decompiling class net/minecraft/init/Enchantments +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentFrostWalker +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentFishingSpeed +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentLootBonus +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentKnockback +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentOxygen +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentMending +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentSweepingEdge +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentProtection +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentUntouching +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentThorns +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentVanishingCurse +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentWaterWorker +INFO: ... done +INFO: Decompiling class net/minecraft/enchantment/EnchantmentWaterWalker +INFO: ... done +INFO: Decompiling class net/minecraft/village/MerchantRecipe +INFO: ... done +INFO: Decompiling class net/minecraft/entity/IMerchant +INFO: ... done +INFO: Decompiling class net/minecraft/village/MerchantRecipeList +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/MobSpawnerBaseLogic +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/CommandBlockBaseLogic +INFO: ... done +INFO: Decompiling class net/minecraft/util/BlockRenderLayer +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEventData +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/ChunkPos +INFO: ... done +INFO: Decompiling class net/minecraft/world/ColorizerFoliage +INFO: ... done +INFO: Decompiling class net/minecraft/world/Explosion +INFO: ... done +INFO: Decompiling class net/minecraft/world/GameType +INFO: ... done +INFO: Decompiling class net/minecraft/world/GameRules +INFO: ... done +INFO: Decompiling class net/minecraft/world/World +INFO: ... done +INFO: Decompiling class net/minecraft/world/ColorizerGrass +INFO: ... done +INFO: Decompiling class net/minecraft/world/IWorldEventListener +INFO: ... done +INFO: Decompiling class net/minecraft/world/MinecraftException +INFO: ... done +INFO: Decompiling class net/minecraft/world/IBlockAccess +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldSettings +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldType +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldEntitySpawner +INFO: ... done +INFO: Decompiling class net/minecraft/world/EnumSkyBlock +INFO: ... done +INFO: Decompiling class net/minecraft/world/ChunkCache +INFO: ... done +INFO: Decompiling class net/minecraft/world/Teleporter +INFO: ... done +INFO: Decompiling class net/minecraft/world/NextTickListEntry +INFO: ... done +INFO: Decompiling class net/minecraft/util/WeightedSpawnerEntity +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/Biome +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeBeach +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeColorHelper +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeCache +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeProvider +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeDecorator +INFO: ... done +INFO: Decompiling class net/minecraft/init/Biomes +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeHills +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeDesert +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeForest +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeProviderSingle +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeHellDecorator +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeHell +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeJungle +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeSnow +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeMushroomIsland +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeMesa +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeSavannaMutated +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeForestMutated +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeOcean +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeRiver +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomePlains +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeStoneBeach +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeSavanna +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeTaiga +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeSwamp +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeEndDecorator +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeEnd +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeVoidDecorator +INFO: ... done +INFO: Decompiling class net/minecraft/world/biome/BiomeVoid +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockAir +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBanner +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockAnvil +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockContainer +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBarrier +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRailBase +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBasePressurePlate +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBed +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBeacon +INFO: ... done +INFO: Decompiling class net/minecraft/block/Block +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBeetroot +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBone +INFO: ... done +INFO: Decompiling class net/minecraft/init/Blocks +INFO: ... done +INFO: Decompiling class net/minecraft/block/IGrowable +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBrewingStand +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBookshelf +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockButton +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBush +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCake +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCactus +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCauldron +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCarrot +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockChorusFlower +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockChest +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockClay +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockChorusPlant +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockColored +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCocoa +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneComparator +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCommandBlock +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockWorkbench +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockConcretePowder +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDaylightDetector +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCrops +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRailDetector +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDeadBush +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDirectional +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneDiode +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDispenser +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDirt +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDoor +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDragonEgg +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDoublePlant +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDynamicLiquid +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDropper +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEndGateway +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEnchantmentTable +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEndPortalFrame +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEndPortal +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEnderChest +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEndRod +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFalling +INFO: ... done +INFO: Decompiling class net/minecraft/block/ITileEntityProvider +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFence +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFarmland +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFire +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFenceGate +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFlowerPot +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFlower +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDoubleStoneSlabNew +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFrostedIce +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDoubleWoodSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockDoubleStoneSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockGlass +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockFurnace +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockGlazedTerracotta +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockGrass +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockGlowstone +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockGravel +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockGrassPath +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHalfStoneSlabNew +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockBreakable +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHalfStoneSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHardenedClay +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHalfWoodSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHopper +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHay +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHugeMushroom +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockHorizontal +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockJukebox +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockIce +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockLeaves +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockLadder +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockLever +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockLog +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockLiquid +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockMelon +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockMagma +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockMobSpawner +INFO: ... done +INFO: Decompiling class net/minecraft/util/Mirror +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSilverfish +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockMycelium +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockMushroom +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockNetherWart +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockNetherBrick +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockNewLeaf +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockNetherrack +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStoneSlabNew +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockNewLog +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockNote +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockEmptyDrops +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockObsidian +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockObserver +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockOldLog +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockOldLeaf +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPackedIce +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockOre +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPortal +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPlanks +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCompressedPowered +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPotato +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPressurePlate +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRailPowered +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPumpkin +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPrismarine +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPurpurSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRail +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockQuartz +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedSandstone +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedFlower +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneWire +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneOre +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneTorch +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneLight +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnumBlockRenderType +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockReed +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRotatedPillar +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockRedstoneRepeater +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSand +INFO: ... done +INFO: Decompiling class net/minecraft/util/Rotation +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSapling +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSandStone +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockShulkerBox +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSeaLantern +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSkull +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSign +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSnowBlock +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSlime +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSoulSand +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSnow +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockSponge +INFO: ... done +INFO: Decompiling class net/minecraft/block/SoundType +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStainedGlass +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStainedHardenedClay +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStainedGlassPane +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStandingSign +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStairs +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStem +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStaticLiquid +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStoneBrick +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStone +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStoneSlab +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockButtonStone +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStructureVoid +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockStructure +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPane +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockTallGrass +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockTorch +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockTNT +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockTripWire +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockTrapDoor +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockVine +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockTripWireHook +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockWallSign +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockWall +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockLilyPad +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockWeb +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockButtonWood +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPressurePlateWeighted +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockCarpet +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockWoodSlab +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityBanner +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockYellowFlower +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityBeacon +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/BannerPattern +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntity +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityBed +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityChest +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityBrewingStand +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityComparator +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityCommandBlock +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityDispenser +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityDaylightDetector +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityEnchantmentTable +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityDropper +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityFlowerPot +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityEnderChest +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/IHopper +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityFurnace +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityLockable +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityHopper +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityNote +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityMobSpawner +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityLockableLoot +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntitySign +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityShulkerBox +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityStructure +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntitySkull +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityEndPortal +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityEndGateway +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPistonExtension +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPistonBase +INFO: ... done +INFO: Decompiling class net/minecraft/tileentity/TileEntityPiston +INFO: ... done +INFO: Decompiling class net/minecraft/block/BlockPistonMoving +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/BlockPistonStructureHelper +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/IBlockBehaviors +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/BlockStateBase +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/IBlockProperties +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/BlockFaceShape +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/BlockStateContainer +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/IBlockState +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/BlockWorldState +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/pattern/FactoryBlockPattern +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/pattern/BlockPattern +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/pattern/BlockMatcher +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/pattern/BlockMaterialMatcher +INFO: ... done +INFO: Decompiling class net/minecraft/block/state/pattern/BlockStateMatcher +INFO: ... done +INFO: Decompiling class net/minecraft/block/properties/PropertyBool +INFO: ... done +INFO: Decompiling class net/minecraft/block/properties/PropertyHelper +INFO: ... done +INFO: Decompiling class net/minecraft/block/properties/PropertyEnum +INFO: ... done +INFO: Decompiling class net/minecraft/block/properties/PropertyDirection +INFO: ... done +INFO: Decompiling class net/minecraft/block/properties/IProperty +INFO: ... done +INFO: Decompiling class net/minecraft/block/properties/PropertyInteger +INFO: ... done +INFO: Decompiling class net/minecraft/world/border/IBorderListener +INFO: ... done +INFO: Decompiling class net/minecraft/world/border/WorldBorder +INFO: ... done +INFO: Decompiling class net/minecraft/world/border/EnumBorderStatus +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/BlockStateContainer +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/IChunkProvider +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/IChunkGenerator +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/EmptyChunk +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/NibbleArray +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/BlockStatePaletteHashMap +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/BlockStatePaletteRegistry +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/ExtendedBlockStorage +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/Chunk +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/NibbleArrayReader +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/BlockStatePaletteLinear +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/IBlockStatePalette +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/IBlockStatePaletteResizer +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/AnvilChunkLoader +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/IChunkLoader +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/ChunkLoader +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/RegionFileCache +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/RegionFile +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldProvider +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldProviderHell +INFO: ... done +INFO: Decompiling class net/minecraft/world/DimensionType +INFO: ... done +INFO: Decompiling class net/minecraft/world/end/DragonSpawnManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldProviderSurface +INFO: ... done +INFO: Decompiling class net/minecraft/world/WorldProviderEnd +INFO: ... done +INFO: Decompiling class net/minecraft/world/end/DragonFightManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/ChunkPrimer +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/MapGenRavine +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkGeneratorDebug +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkGeneratorSettings +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkGeneratorFlat +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/MapGenBase +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/MapGenCaves +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkGeneratorHell +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/MapGenCavesHell +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkGeneratorEnd +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/ChunkGeneratorOverworld +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenBigTree +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenAbstractTree +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenBlockBlob +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenBirchTree +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenBush +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGeneratorBonusChest +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenClay +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenCactus +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenDesertWells +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenDeadBush +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenEndGateway +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenDoublePlant +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenEndPodium +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenEndIsland +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenFlowers +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenerator +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenShrub +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenFossils +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenGlowStone2 +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenFire +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenBigMushroom +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenHellLava +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenIceSpike +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenIcePath +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenGlowStone1 +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenLakes +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenMegaPineTree +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenMegaJungle +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenMelon +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenHugeTrees +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenMinable +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenDungeons +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenPumpkin +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenTaiga1 +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenCanopyTree +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenReed +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenSavannaTree +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenSand +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenLiquids +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenSpikes +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenSwamp +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenTaiga2 +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenTrees +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenTallGrass +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenWaterlily +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/feature/WorldGenVines +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/FlatLayerInfo +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/FlatGeneratorInfo +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureBoundingBox +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureEndCityPieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenEndCity +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureMineshaftPieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenMineshaft +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenNetherBridge +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureMineshaftStart +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureOceanMonument +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureNetherBridgePieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenScatteredFeature +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureOceanMonumentPieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenStronghold +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenStructure +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureStrongholdPieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenStructureData +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenStructureIO +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureStart +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureComponent +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureComponentTemplate +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/StructureVillagePieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/MapGenVillage +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/WoodlandMansionPieces +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/WoodlandMansion +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/template/BlockRotationProcessor +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/template/PlacementSettings +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/template/TemplateManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/template/Template +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/structure/template/ITemplateProcessor +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/NoiseGeneratorOctaves +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/NoiseGeneratorImproved +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/NoiseGeneratorPerlin +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/NoiseGeneratorSimplex +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/NoiseGenerator +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/MaterialTransparent +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/MaterialLogic +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/Material +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/MaterialLiquid +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/MapColor +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/EnumPushReaction +INFO: ... done +INFO: Decompiling class net/minecraft/block/material/MaterialPortal +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerDeepOcean +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerAddIsland +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerEdge +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerAddSnow +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerAddMushroomIsland +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerBiome +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerBiomeEdge +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerFuzzyZoom +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/IntCache +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayer +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerIsland +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerHills +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerRareBiome +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerRiverInit +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerRiverMix +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerRiver +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerSmooth +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerShore +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerZoom +INFO: ... done +INFO: Decompiling class net/minecraft/world/gen/layer/GenLayerVoronoiZoom +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathNodeType +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathHeap +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathPoint +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/FlyingNodeProcessor +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/Path +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/NodeProcessor +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/SwimNodeProcessor +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/PathFinder +INFO: ... done +INFO: Decompiling class net/minecraft/pathfinding/WalkNodeProcessor +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/WorldSavedData +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/WorldSavedDataCallableSave +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/MapData +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/MapDecoration +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/AnvilSaveConverter +INFO: ... done +INFO: Decompiling class net/minecraft/world/chunk/storage/AnvilSaveHandler +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/DerivedWorldInfo +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/SaveFormatOld +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/SaveHandler +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/ISaveHandler +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/WorldInfo +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/ISaveFormat +INFO: ... done +INFO: Decompiling class net/minecraft/client/AnvilConverterException +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/WorldSummary +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/IPlayerFileData +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/SaveHandlerMP +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/MapStorage +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/SaveDataMemoryStorage +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootEntryEmpty +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootTableList +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootPool +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootEntryItem +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootTable +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootEntry +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootEntryTable +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootContext +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/RandomValueRange +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/LootTableManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/EnchantWithLevels +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/EnchantRandomly +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/LootFunction +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/LootingEnchantBonus +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/LootFunctionManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/SetCount +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsConnect +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/SetAttributes +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/SetMetadata +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/SetDamage +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/Smelt +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsButton +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/functions/SetNBT +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/LootCondition +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/EntityHasScore +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/EntityHasProperty +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/LootConditionManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/RandomChance +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/KilledByPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/properties/EntityProperty +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/properties/EntityPropertyManager +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/loot/properties/EntityOnFire +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/ThreadedFileIOBase +INFO: ... done +INFO: Decompiling class net/minecraft/world/storage/IThreadedFileIO +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/RayTraceResult +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/AxisAlignedBB +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/Vec3d +INFO: ... done +INFO: Decompiling class net/minecraft/util/math/Vec2f +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreObjective +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/Score +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScorePlayerTeam +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/Scoreboard +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/Team +INFO: ... done +INFO: Decompiling class net/minecraft/client/ClientBrandRetriever +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreboardSaveData +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreCriteria +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreCriteriaColored +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/IScoreCriteria +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreCriteriaHealth +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreCriteriaStat +INFO: ... done +INFO: Decompiling class net/minecraft/scoreboard/ScoreCriteriaReadOnly +INFO: ... done +INFO: Decompiling class net/minecraft/client/settings/CreativeSettings +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ActiveRenderInfo +INFO: ... done +INFO: Decompiling class net/minecraft/client/settings/KeyBinding +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ChatLine +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/RenderHelper +INFO: ... done +INFO: Decompiling class net/minecraft/client/Minecraft +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/GLAllocation +INFO: ... done +INFO: Decompiling class net/minecraft/client/settings/GameSettings +INFO: ... done +INFO: Decompiling class net/minecraft/util/MouseHelper +INFO: ... done +INFO: Decompiling class net/minecraft/util/ScreenShotHelper +INFO: ... done +INFO: Decompiling class net/minecraft/client/LoadingScreenRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/util/Timer +INFO: ... done +INFO: Decompiling class net/minecraft/util/MinecraftError +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/color/IBlockColor +INFO: ... done +INFO: Decompiling class net/minecraft/util/Session +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/color/BlockColors +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/color/ItemColors +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/color/IItemColor +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/FontRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/Gui +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiIngame +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ScaledResolution +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/MapItemRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/chat/NarratorChatListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/chat/IChatListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/chat/NormalChatListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/chat/OverlayChatListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiBossOverlay +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiButton +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiUtilRenderComponents +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiNewChat +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiTextField +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiOverlayDebug +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiButtonImage +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSlider +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiButtonLanguage +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiLabel +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiListButton +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/BossInfoClient +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiListExtended +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiLockIconButton +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiOptionsRowList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiOptionButton +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiPlayerTabOverlay +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiPageButtonList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiOptionSlider +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSlot +INFO: ... done +INFO: Decompiling class net/minecraft/realms/RealmsLevelSummary +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSubtitleOverlay +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiButtonToggle +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSpectator +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/toasts/AdvancementToast +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/toasts/RecipeToast +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/toasts/IToast +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/toasts/SystemToast +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/toasts/TutorialToast +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/toasts/GuiToast +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiButtonRealmsProxy +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSlotRealmsProxy +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenRealmsProxy +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiChat +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ScreenChatOptions +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiYesNoCallback +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiConfirmOpenLink +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/GuiConnecting +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiYesNo +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenCustomizePresets +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiCreateFlatWorld +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiGameOver +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiCustomizeWorldScreen +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenServerList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenDemo +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenAddServer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiDisconnected +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiErrorScreen +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiLanguage +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSleepMP +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiOptions +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiIngameMenu +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiMemoryErrorScreen +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenWorking +INFO: ... done +INFO: Decompiling class net/minecraft/client/main/Main +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiFlatPresets +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreen +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiDownloadTerrain +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiCustomizeSkin +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiShareToLan +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenOptionsSounds +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiSnooper +INFO: ... done +INFO: Decompiling class net/minecraft/util/TabCompleter +INFO: ... done +INFO: Decompiling class net/minecraft/util/ITabCompleter +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiVideoSettings +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiMainMenu +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/achievement/GuiStats +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiWinGame +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/IProgressMeter +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/advancements/AdvancementTabType +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/advancements/GuiAdvancementTab +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/advancements/GuiAdvancement +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/advancements/GuiScreenAdvancements +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/advancements/AdvancementState +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiKeyBindingList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiControls +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiRepair +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiContainer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenBook +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiBeacon +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiCommandBlock +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiBrewingStand +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiCrafting +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiChest +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiContainerCreative +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/CreativeCrafting +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/InventoryEffectRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiDispenser +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiEnchantment +INFO: ... done +INFO: Decompiling class net/minecraft/util/EnchantmentNameParts +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiHopper +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiFurnace +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiInventory +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiScreenHorseInventory +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiMerchant +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiShulkerBox +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiEditStructure +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/inventory/GuiEditSign +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ServerListEntryLanScan +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiMultiplayer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ServerListEntryNormal +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ServerListEntryLanDetected +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/ServerSelectionList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/GhostRecipe +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/GuiRecipeBook +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/GuiRecipeOverlay +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/GuiButtonRecipeTab +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/RecipeBookPage +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/RecipeList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/GuiButtonRecipe +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/IRecipeShownListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/recipebook/IRecipeUpdateListener +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiScreenResourcePacks +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourcePackListEntryDefault +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourcePackListEntry +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourcePackListEntryFound +INFO: ... done +INFO: Decompiling class net/minecraft/client/resources/ResourcePackListEntryServer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiResourcePackList +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiResourcePackAvailable +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiResourcePackSelected +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiWorldEdit +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiCreateWorld +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiListWorldSelectionEntry +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiWorldSelection +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/GuiListWorldSelection +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/BaseSpectatorGroup +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/PlayerMenuObject +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/ISpectatorMenuView +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/SpectatorMenu +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/ISpectatorMenuRecipient +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/ISpectatorMenuObject +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/categories/TeleportToPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/categories/SpectatorDetails +INFO: ... done +INFO: Decompiling class net/minecraft/client/gui/spectator/categories/TeleportToTeam +INFO: ... done +INFO: Decompiling class net/minecraft/client/main/GameConfiguration +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelArmorStand +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelArmorStandArmor +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBat +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBanner +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBlaze +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBed +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBook +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBoat +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelChicken +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelChest +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelCreeper +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelCow +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelEnderman +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelElytra +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelEvokerFangs +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelEnderMite +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelGuardian +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelGhast +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelHumanoidHead +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelHorse +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelIllager +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBiped +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelLargeChest +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelLeashKnot +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelMagmaCube +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelLlamaSpit +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelLlama +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBase +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelParrot +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelOcelot +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelPig +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/TexturedQuad +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelPolarBear +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelRabbit +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelQuadruped +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSheep2 +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSheep1 +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelShulkerBullet +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelShield +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSign +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelShulker +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSkeletonHead +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSilverfish +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSkeleton +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSnowMan +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSlime +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSpider +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/IMultipassModel +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelSquid +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelVex +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/PositionTextureVertex +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelVillager +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelIronGolem +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelWitch +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelZombieVillager +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelWolf +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelWither +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelDragonHead +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelZombie +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelEnderCrystal +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelDragon +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelBox +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/ModelRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/model/TextureOffset +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/ClientAdvancementManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/NetHandlerLoginClient +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/ChunkProviderClient +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/NetHandlerPlayClient +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/WorldClient +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/PlayerControllerMP +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/ServerAddress +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/NetworkPlayerInfo +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/ServerList +INFO: ... done +INFO: Decompiling class net/minecraft/client/multiplayer/ServerData +INFO: ... done +INFO: Decompiling class net/minecraft/client/network/ServerPinger +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSweepAttack +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleBreaking +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/Barrier +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleCrit +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleBubble +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleDrip +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleDragonBreath +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleEndRod +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleEnchantmentTable +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleFallingDust +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleExplosion +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleFlame +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleFirework +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleHeart +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleFootStep +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleExplosionHuge +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleExplosionLarge +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleItemPickup +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleLava +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSmokeLarge +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleNote +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleMobAppearance +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/Particle +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleCloud +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/IParticleFactory +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleRedstone +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticlePortal +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSmokeNormal +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSimpleAnimated +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSpell +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSnowShovel +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSplash +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSpit +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSuspendedTown +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleSuspend +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleDigging +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleBlockDust +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleEmitter +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleTotem +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleRain +INFO: ... done +INFO: Decompiling class net/minecraft/client/particle/ParticleWaterWake +INFO: ... done +INFO: Decompiling class net/minecraft/util/MovementInput +INFO: ... done +INFO: Decompiling class net/minecraft/client/entity/AbstractClientPlayer +INFO: ... done +INFO: Decompiling class net/minecraft/client/entity/EntityPlayerSP +INFO: ... done +INFO: Decompiling class net/minecraft/util/MovementInputFromOptions +INFO: ... done +INFO: Decompiling class net/minecraft/client/settings/HotbarSnapshot +INFO: ... done +INFO: Decompiling class net/minecraft/client/entity/EntityOtherPlayerMP +INFO: ... done +INFO: Decompiling class net/minecraft/client/player/inventory/ContainerLocalMenu +INFO: ... done +INFO: Decompiling class net/minecraft/client/player/inventory/LocalBlockIntercommunication +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/WorldVertexBufferUploader +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/BufferBuilder +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ChunkRenderContainer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/RegionRenderCacheBuilder +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/EnumFaceDirection +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/EntityRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/IImageBuffer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/GlStateManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ItemModelMesher +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ItemRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ItemMeshDefinition +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ImageBufferDownload +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/RenderGlobal +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/RenderList +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/Tessellator +INFO: ... done +INFO: Decompiling class net/minecraft/client/shader/Framebuffer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/VertexBufferUploader +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/VboRenderList +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/BannerTextures +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ViewFrustum +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/ChestRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/BlockRendererDispatcher +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/BlockModelShapes +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/BlockModelRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/BlockFluidRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BlockPart +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BakedQuad +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BlockPartRotation +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BlockPartFace +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ModelBlock +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BlockFaceUV +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/BakedQuadRetextured +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ModelBlockDefinition +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ItemModelGenerator +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/FaceBakery +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ItemOverride +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ItemTransformVec3f +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ItemOverrideList +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/VariantList +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/ItemCameraTransforms +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/multipart/ConditionAnd +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/Variant +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/multipart/ICondition +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/multipart/ConditionOr +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/multipart/Multipart +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/model/multipart/Selector +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/statemap/BlockStateMapper +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/statemap/StateMapperBase +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/statemap/StateMap +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/statemap/DefaultStateMapper +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/block/statemap/IStateMapper +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityBedRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityChestRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntitySignRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/ChunkRenderDispatcher +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/CompiledChunk +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/ChunkRenderWorker +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/ListedRenderChunk +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/ListChunkFactory +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/IRenderChunkFactory +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/RenderChunk +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/VisGraph +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/VboChunkFactory +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/chunk/SetVisibility +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/culling/ICamera +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/culling/ClippingHelperImpl +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/culling/ClippingHelper +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/culling/Frustum +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererCollisionBox +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererChunkBorder +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererHeightMap +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRenderer +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererPathfinding +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererWater +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/debug/DebugRendererSolidFace +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderAbstractHorse +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderArmorStand +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderAreaEffectCloud +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderBat +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderArrow +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderBoat +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderBlaze +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderChicken +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderCaveSpider +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderCreeper +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderCow +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderDragonFireball +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEntity +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderElderGuardian +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderDragon +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEnderCrystal +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEndermite +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEnderman +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/Render +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderManager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEvoker +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEvokerFangs +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderFallingBlock +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderXPOrb +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderFish +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderFireball +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderGiantZombie +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderGhast +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderHorse +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderGuardian +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderHusk +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderBiped +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderEntityItem +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderIllusionIllager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/RenderItem +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderItemFrame +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderLeashKnot +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderMagmaCube +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderLightningBolt +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderLivingBase +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderLlamaSpit +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderLlama +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderMinecartMobSpawner +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderMooshroom +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderLiving +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderPainting +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderOcelot +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderPig +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderParrot +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderPolarBear +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderPigZombie +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSheep +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderRabbit +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderShulker +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderShulkerBullet +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSkeleton +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSilverfish +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSnowMan +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSlime +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSpider +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSpectralArrow +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderStray +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSquid +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderSnowball +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderTippedArrow +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderPotion +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderTNTPrimed +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderTntMinecart +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderIronGolem +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderVex +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderVindicator +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderVillager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderWither +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderWitch +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderWitherSkull +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderWitherSkeleton +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderZombie +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderWolf +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerArmorBase +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/RenderZombieVillager +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerCape +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerArrow +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerCreeperCharge +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerHeldBlock +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerCustomHead +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerElytra +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerEndermanEyes +INFO: ... done +INFO: Decompiling class net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes +INFO: ... done +INFO: Decompiling class net/minecraft/server/dedicated/PendingCommand +INFO: ... done +INFO: Decompiling class net/minecraft/server/ServerEula +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/IServer +INFO: ... done +INFO: Decompiling class net/minecraft/server/dedicated/PropertyManager +INFO: ... done +INFO: Decompiling class net/minecraft/server/dedicated/DedicatedPlayerList +INFO: ... done +INFO: Decompiling class net/minecraft/server/dedicated/DedicatedServer +INFO: ... done +INFO: Decompiling class net/minecraft/server/dedicated/ServerHangWatchdog +INFO: ... done +INFO: Decompiling class net/minecraft/server/gui/MinecraftServerGui +INFO: ... done +INFO: Decompiling class net/minecraft/server/gui/PlayerListComponent +INFO: ... done +INFO: Decompiling class net/minecraft/server/gui/StatsComponent +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConOutputStream +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConUtils +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConThreadBase +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConThreadQuery +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConThreadClient +INFO: ... done +INFO: Decompiling class net/minecraft/network/rcon/RConThreadMain +INFO: ... done +INFO: Decompiling class net/minecraftforge/fml/relauncher/SideOnly +INFO: ... done +INFO: Decompiling class net/minecraftforge/fml/relauncher/Side +INFO: ... done diff --git a/build/tmp/decompileMc/forge-1.12.2-14.23.4.2744-PROJECT(PrimalEnergy)-srgBin.jar b/build/tmp/decompileMc/forge-1.12.2-14.23.4.2744-PROJECT(PrimalEnergy)-srgBin.jar new file mode 100644 index 0000000..2dc67ba Binary files /dev/null and b/build/tmp/decompileMc/forge-1.12.2-14.23.4.2744-PROJECT(PrimalEnergy)-srgBin.jar differ diff --git a/build/tmp/decompileMc/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar b/build/tmp/decompileMc/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar new file mode 100644 index 0000000..abb0aae Binary files /dev/null and b/build/tmp/decompileMc/forge-1.12.2-14.23.4.2744-PROJECT(PrimalSorcery)-srgBin.jar differ diff --git a/build/tmp/deobfMcSRG/deobfed.jar b/build/tmp/deobfMcSRG/deobfed.jar new file mode 100644 index 0000000..dc63958 Binary files /dev/null and b/build/tmp/deobfMcSRG/deobfed.jar differ diff --git a/build/tmp/deobfMcSRG/transformed.json b/build/tmp/deobfMcSRG/transformed.json new file mode 100644 index 0000000..d000135 --- /dev/null +++ b/build/tmp/deobfMcSRG/transformed.json @@ -0,0 +1,26094 @@ +{ + "net/minecraft/advancements/Advancement": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/Advancement$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/advancements/Advancement", + "start": "154" + } + ] + }, + "net/minecraft/advancements/Advancement$Builder": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/Advancement" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/Advancement$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/advancements/Advancement", + "start": "154" + } + ] + }, + "net/minecraft/advancements/AdvancementList": { + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/advancements/AdvancementList$Listener", + "inner_name": "Listener", + "outer_class": "net/minecraft/advancements/AdvancementList" + } + ] + }, + "net/minecraft/advancements/AdvancementList$Listener": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/AdvancementList" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/advancements/AdvancementList$Listener", + "inner_name": "Listener", + "outer_class": "net/minecraft/advancements/AdvancementList" + } + ] + }, + "net/minecraft/advancements/AdvancementManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/AdvancementManager$1", + "start": "48" + } + ] + }, + "net/minecraft/advancements/AdvancementManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/AdvancementManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/AdvancementManager$1", + "start": "48" + } + ] + }, + "net/minecraft/advancements/AdvancementProgress": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/AdvancementProgress$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/advancements/AdvancementProgress", + "start": "217" + } + ] + }, + "net/minecraft/advancements/AdvancementProgress$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/AdvancementProgress" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/AdvancementProgress$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/advancements/AdvancementProgress", + "start": "217" + } + ] + }, + "net/minecraft/advancements/AdvancementRewards": { + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/AdvancementRewards$1", + "start": "84" + }, + { + "access": "29", + "inner_class": "net/minecraft/advancements/AdvancementRewards$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/advancements/AdvancementRewards", + "start": "150" + } + ] + }, + "net/minecraft/advancements/AdvancementRewards$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/player/EntityPlayerMP;)V", + "name": "func_192113_a", + "owner": "net/minecraft/advancements/AdvancementRewards" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/AdvancementRewards$1", + "start": "84" + } + ] + }, + "net/minecraft/advancements/AdvancementRewards$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/AdvancementRewards" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/AdvancementRewards$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/advancements/AdvancementRewards", + "start": "150" + } + ] + }, + "net/minecraft/advancements/FunctionManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/FunctionManager$1", + "start": "38" + }, + { + "access": "21", + "inner_class": "net/minecraft/advancements/FunctionManager$QueuedCommand", + "inner_name": "QueuedCommand", + "outer_class": "net/minecraft/advancements/FunctionManager", + "start": "179" + } + ] + }, + "net/minecraft/advancements/FunctionManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/FunctionManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/FunctionManager$1", + "start": "38" + } + ] + }, + "net/minecraft/advancements/FunctionManager$QueuedCommand": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/FunctionManager" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/advancements/FunctionManager$QueuedCommand", + "inner_name": "QueuedCommand", + "outer_class": "net/minecraft/advancements/FunctionManager", + "start": "179" + } + ] + }, + "net/minecraft/advancements/ICriterionTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/ICriterionTrigger$Listener", + "inner_name": "Listener", + "outer_class": "net/minecraft/advancements/ICriterionTrigger", + "start": "27" + } + ] + }, + "net/minecraft/advancements/ICriterionTrigger$Listener": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/ICriterionTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/ICriterionTrigger$Listener", + "inner_name": "Listener", + "outer_class": "net/minecraft/advancements/ICriterionTrigger", + "start": "27" + } + ] + }, + "net/minecraft/advancements/PlayerAdvancements": { + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/PlayerAdvancements$1" + } + ] + }, + "net/minecraft/advancements/PlayerAdvancements$1": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/PlayerAdvancements" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/advancements/PlayerAdvancements$1" + } + ] + }, + "net/minecraft/advancements/critereon/BredAnimalsTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger", + "start": "82" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger", + "start": "99" + } + ] + }, + "net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/BredAnimalsTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger", + "start": "82" + } + ] + }, + "net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/BredAnimalsTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/BredAnimalsTrigger", + "start": "99" + } + ] + }, + "net/minecraft/advancements/critereon/BrewedPotionTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger", + "start": "85" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger", + "start": "101" + } + ] + }, + "net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/BrewedPotionTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger", + "start": "85" + } + ] + }, + "net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/BrewedPotionTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/BrewedPotionTrigger", + "start": "101" + } + ] + }, + "net/minecraft/advancements/critereon/ChangeDimensionTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger", + "start": "80" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger", + "start": "99" + } + ] + }, + "net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ChangeDimensionTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger", + "start": "80" + } + ] + }, + "net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ChangeDimensionTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ChangeDimensionTrigger", + "start": "99" + } + ] + }, + "net/minecraft/advancements/critereon/ConstructBeaconTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger", + "start": "75" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ConstructBeaconTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger", + "start": "75" + } + ] + }, + "net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ConstructBeaconTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ConstructBeaconTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/ConsumeItemTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger", + "start": "75" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ConsumeItemTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger", + "start": "75" + } + ] + }, + "net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ConsumeItemTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ConsumeItemTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger", + "start": "79" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger", + "start": "98" + } + ] + }, + "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger", + "start": "79" + } + ] + }, + "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/CuredZombieVillagerTrigger", + "start": "98" + } + ] + }, + "net/minecraft/advancements/critereon/EffectsChangedTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger", + "start": "74" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger", + "start": "87" + } + ] + }, + "net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EffectsChangedTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger", + "start": "74" + } + ] + }, + "net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EffectsChangedTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EffectsChangedTrigger", + "start": "87" + } + ] + }, + "net/minecraft/advancements/critereon/EnchantedItemTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger", + "start": "78" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger", + "start": "97" + } + ] + }, + "net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EnchantedItemTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger", + "start": "78" + } + ] + }, + "net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EnchantedItemTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EnchantedItemTrigger", + "start": "97" + } + ] + }, + "net/minecraft/advancements/critereon/EnterBlockTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EnterBlockTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EnterBlockTrigger", + "start": "116" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EnterBlockTrigger", + "start": "139" + } + ] + }, + "net/minecraft/advancements/critereon/EnterBlockTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EnterBlockTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EnterBlockTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EnterBlockTrigger", + "start": "116" + } + ] + }, + "net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EnterBlockTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EnterBlockTrigger", + "start": "139" + } + ] + }, + "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger", + "start": "75" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger", + "start": "91" + } + ] + }, + "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger", + "start": "75" + } + ] + }, + "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/EntityHurtPlayerTrigger", + "start": "91" + } + ] + }, + "net/minecraft/advancements/critereon/ImpossibleTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ImpossibleTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ImpossibleTrigger" + } + ] + }, + "net/minecraft/advancements/critereon/ImpossibleTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ImpossibleTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ImpossibleTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ImpossibleTrigger" + } + ] + }, + "net/minecraft/advancements/critereon/InventoryChangeTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger", + "start": "89" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger", + "start": "135" + } + ] + }, + "net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/InventoryChangeTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger", + "start": "89" + } + ] + }, + "net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/InventoryChangeTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/InventoryChangeTrigger", + "start": "135" + } + ] + }, + "net/minecraft/advancements/critereon/ItemDurabilityTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger", + "start": "81" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger", + "start": "103" + } + ] + }, + "net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ItemDurabilityTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger", + "start": "81" + } + ] + }, + "net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/ItemDurabilityTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/ItemDurabilityTrigger", + "start": "103" + } + ] + }, + "net/minecraft/advancements/critereon/KilledTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/KilledTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/KilledTrigger", + "start": "81" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/KilledTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/KilledTrigger", + "start": "97" + } + ] + }, + "net/minecraft/advancements/critereon/KilledTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/KilledTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/KilledTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/KilledTrigger", + "start": "81" + } + ] + }, + "net/minecraft/advancements/critereon/KilledTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/KilledTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/KilledTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/KilledTrigger", + "start": "97" + } + ] + }, + "net/minecraft/advancements/critereon/LevitationTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/LevitationTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/LevitationTrigger", + "start": "78" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/LevitationTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/LevitationTrigger", + "start": "97" + } + ] + }, + "net/minecraft/advancements/critereon/LevitationTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/LevitationTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/LevitationTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/LevitationTrigger", + "start": "78" + } + ] + }, + "net/minecraft/advancements/critereon/LevitationTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/LevitationTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/LevitationTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/LevitationTrigger", + "start": "97" + } + ] + }, + "net/minecraft/advancements/critereon/MobEffectsPredicate": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate", + "inner_name": "InstancePredicate", + "outer_class": "net/minecraft/advancements/critereon/MobEffectsPredicate", + "start": "93" + } + ] + }, + "net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/MobEffectsPredicate" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate", + "inner_name": "InstancePredicate", + "outer_class": "net/minecraft/advancements/critereon/MobEffectsPredicate", + "start": "93" + } + ] + }, + "net/minecraft/advancements/critereon/NetherTravelTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/NetherTravelTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/NetherTravelTrigger", + "start": "82" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/NetherTravelTrigger", + "start": "104" + } + ] + }, + "net/minecraft/advancements/critereon/NetherTravelTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/NetherTravelTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/NetherTravelTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/NetherTravelTrigger", + "start": "82" + } + ] + }, + "net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/NetherTravelTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/NetherTravelTrigger", + "start": "104" + } + ] + }, + "net/minecraft/advancements/critereon/PlacedBlockTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger", + "start": "127" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger", + "start": "156" + } + ] + }, + "net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/PlacedBlockTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger", + "start": "127" + } + ] + }, + "net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/PlacedBlockTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/PlacedBlockTrigger", + "start": "156" + } + ] + }, + "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger", + "start": "79" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger", + "start": "98" + } + ] + }, + "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger", + "start": "79" + } + ] + }, + "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/PlayerHurtEntityTrigger", + "start": "98" + } + ] + }, + "net/minecraft/advancements/critereon/PositionTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/PositionTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/PositionTrigger", + "start": "79" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/PositionTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/PositionTrigger", + "start": "92" + } + ] + }, + "net/minecraft/advancements/critereon/PositionTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/PositionTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/PositionTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/PositionTrigger", + "start": "79" + } + ] + }, + "net/minecraft/advancements/critereon/PositionTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/PositionTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/PositionTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/PositionTrigger", + "start": "92" + } + ] + }, + "net/minecraft/advancements/critereon/RecipeUnlockedTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger", + "start": "82" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger", + "start": "95" + } + ] + }, + "net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger", + "start": "82" + } + ] + }, + "net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/RecipeUnlockedTrigger", + "start": "95" + } + ] + }, + "net/minecraft/advancements/critereon/SummonedEntityTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger", + "start": "75" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/SummonedEntityTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger", + "start": "75" + } + ] + }, + "net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/SummonedEntityTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/SummonedEntityTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/TameAnimalTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/TameAnimalTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/TameAnimalTrigger", + "start": "75" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/TameAnimalTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/TameAnimalTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/TameAnimalTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/TameAnimalTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/TameAnimalTrigger", + "start": "75" + } + ] + }, + "net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/TameAnimalTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/TameAnimalTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/TickTrigger": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/TickTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/TickTrigger", + "start": "79" + }, + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/TickTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/TickTrigger" + } + ] + }, + "net/minecraft/advancements/critereon/TickTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/TickTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/TickTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/TickTrigger" + } + ] + }, + "net/minecraft/advancements/critereon/TickTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/TickTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/TickTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/TickTrigger", + "start": "79" + } + ] + }, + "net/minecraft/advancements/critereon/UsedEnderEyeTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger", + "start": "77" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger", + "start": "90" + } + ] + }, + "net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger", + "start": "77" + } + ] + }, + "net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/UsedEnderEyeTrigger", + "start": "90" + } + ] + }, + "net/minecraft/advancements/critereon/UsedTotemTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/UsedTotemTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/UsedTotemTrigger", + "start": "75" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/UsedTotemTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/UsedTotemTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/UsedTotemTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/UsedTotemTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/UsedTotemTrigger", + "start": "75" + } + ] + }, + "net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/UsedTotemTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/UsedTotemTrigger", + "start": "88" + } + ] + }, + "net/minecraft/advancements/critereon/VillagerTradeTrigger": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger", + "start": "79" + }, + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger", + "start": "98" + } + ] + }, + "net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/VillagerTradeTrigger" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger", + "start": "79" + } + ] + }, + "net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners": { + "enclosingMethod": { + "owner": "net/minecraft/advancements/critereon/VillagerTradeTrigger" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners", + "inner_name": "Listeners", + "outer_class": "net/minecraft/advancements/critereon/VillagerTradeTrigger", + "start": "98" + } + ] + }, + "net/minecraft/block/Block": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/Block$EnumOffsetType", + "inner_name": "EnumOffsetType", + "outer_class": "net/minecraft/block/Block", + "start": "835" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/Block$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/Block" + } + ] + }, + "net/minecraft/block/Block$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/Block" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/Block$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/Block" + } + ] + }, + "net/minecraft/block/Block$EnumOffsetType": { + "enclosingMethod": { + "owner": "net/minecraft/block/Block" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/Block$EnumOffsetType", + "inner_name": "EnumOffsetType", + "outer_class": "net/minecraft/block/Block", + "start": "835" + } + ] + }, + "net/minecraft/block/BlockAnvil": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockAnvil$Anvil", + "inner_name": "Anvil", + "outer_class": "net/minecraft/block/BlockAnvil", + "start": "142" + } + ] + }, + "net/minecraft/block/BlockAnvil$Anvil": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockAnvil" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockAnvil$Anvil", + "inner_name": "Anvil", + "outer_class": "net/minecraft/block/BlockAnvil", + "start": "142" + } + ] + }, + "net/minecraft/block/BlockBanner": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockBanner$BlockBannerHanging", + "inner_name": "BlockBannerHanging", + "outer_class": "net/minecraft/block/BlockBanner", + "start": "135" + }, + { + "access": "29", + "inner_class": "net/minecraft/block/BlockBanner$BlockBannerStanding", + "inner_name": "BlockBannerStanding", + "outer_class": "net/minecraft/block/BlockBanner", + "start": "197" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockBanner$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockBanner" + } + ] + }, + "net/minecraft/block/BlockBanner$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockBanner" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockBanner$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockBanner" + } + ] + }, + "net/minecraft/block/BlockBanner$BlockBannerHanging": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockBanner" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockBanner$BlockBannerHanging", + "inner_name": "BlockBannerHanging", + "outer_class": "net/minecraft/block/BlockBanner", + "start": "135" + } + ] + }, + "net/minecraft/block/BlockBanner$BlockBannerStanding": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockBanner" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockBanner$BlockBannerStanding", + "inner_name": "BlockBannerStanding", + "outer_class": "net/minecraft/block/BlockBanner", + "start": "197" + } + ] + }, + "net/minecraft/block/BlockBeacon": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockBeacon$1", + "start": "94" + } + ] + }, + "net/minecraft/block/BlockBeacon$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;)V", + "name": "func_176450_d", + "owner": "net/minecraft/block/BlockBeacon" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockBeacon$1", + "start": "94" + }, + { + "inner_class": "net/minecraft/block/BlockBeacon$1$1", + "start": "103" + } + ] + }, + "net/minecraft/block/BlockBeacon$1$1": { + "enclosingMethod": { + "desc": "()V", + "name": "run", + "owner": "net/minecraft/block/BlockBeacon$1" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockBeacon$1$1", + "start": "103" + } + ] + }, + "net/minecraft/block/BlockBed": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockBed$EnumPartType", + "inner_name": "EnumPartType", + "outer_class": "net/minecraft/block/BlockBed", + "start": "379" + } + ] + }, + "net/minecraft/block/BlockBed$EnumPartType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockBed" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockBed$EnumPartType", + "inner_name": "EnumPartType", + "outer_class": "net/minecraft/block/BlockBed", + "start": "379" + } + ] + }, + "net/minecraft/block/BlockButton": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockButton$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockButton" + } + ] + }, + "net/minecraft/block/BlockButton$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockButton" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockButton$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockButton" + } + ] + }, + "net/minecraft/block/BlockChest": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockChest$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/block/BlockChest", + "start": "36" + } + ] + }, + "net/minecraft/block/BlockChest$Type": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockChest" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockChest$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/block/BlockChest", + "start": "36" + } + ] + }, + "net/minecraft/block/BlockCocoa": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockCocoa$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockCocoa" + } + ] + }, + "net/minecraft/block/BlockCocoa$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockCocoa" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockCocoa$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockCocoa" + } + ] + }, + "net/minecraft/block/BlockDirt": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDirt$DirtType", + "inner_name": "DirtType", + "outer_class": "net/minecraft/block/BlockDirt", + "start": "78" + } + ] + }, + "net/minecraft/block/BlockDirt$DirtType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockDirt" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDirt$DirtType", + "inner_name": "DirtType", + "outer_class": "net/minecraft/block/BlockDirt", + "start": "78" + } + ] + }, + "net/minecraft/block/BlockDoor": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoor$EnumDoorHalf", + "inner_name": "EnumDoorHalf", + "outer_class": "net/minecraft/block/BlockDoor", + "start": "378" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoor$EnumHingePosition", + "inner_name": "EnumHingePosition", + "outer_class": "net/minecraft/block/BlockDoor", + "start": "394" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockDoor$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockDoor" + } + ] + }, + "net/minecraft/block/BlockDoor$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockDoor" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockDoor$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockDoor" + } + ] + }, + "net/minecraft/block/BlockDoor$EnumDoorHalf": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockDoor" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoor$EnumDoorHalf", + "inner_name": "EnumDoorHalf", + "outer_class": "net/minecraft/block/BlockDoor", + "start": "378" + } + ] + }, + "net/minecraft/block/BlockDoor$EnumHingePosition": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockDoor" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoor$EnumHingePosition", + "inner_name": "EnumHingePosition", + "outer_class": "net/minecraft/block/BlockDoor", + "start": "394" + } + ] + }, + "net/minecraft/block/BlockDoublePlant": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoublePlant$EnumPlantType", + "inner_name": "EnumPlantType", + "outer_class": "net/minecraft/block/BlockDoublePlant", + "start": "270" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoublePlant$EnumBlockHalf", + "inner_name": "EnumBlockHalf", + "outer_class": "net/minecraft/block/BlockDoublePlant", + "start": "332" + } + ] + }, + "net/minecraft/block/BlockDoublePlant$EnumBlockHalf": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockDoublePlant" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoublePlant$EnumBlockHalf", + "inner_name": "EnumBlockHalf", + "outer_class": "net/minecraft/block/BlockDoublePlant", + "start": "332" + } + ] + }, + "net/minecraft/block/BlockDoublePlant$EnumPlantType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockDoublePlant" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockDoublePlant$EnumPlantType", + "inner_name": "EnumPlantType", + "outer_class": "net/minecraft/block/BlockDoublePlant", + "start": "270" + } + ] + }, + "net/minecraft/block/BlockEndRod": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockEndRod$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockEndRod" + } + ] + }, + "net/minecraft/block/BlockEndRod$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockEndRod" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockEndRod$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockEndRod" + } + ] + }, + "net/minecraft/block/BlockFarmland": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFarmland$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFarmland" + } + ] + }, + "net/minecraft/block/BlockFarmland$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFarmland" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFarmland$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFarmland" + } + ] + }, + "net/minecraft/block/BlockFence": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFence$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFence" + } + ] + }, + "net/minecraft/block/BlockFence$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFence" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFence$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFence" + } + ] + }, + "net/minecraft/block/BlockFlower": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockFlower$1", + "start": "55" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockFlower$EnumFlowerColor", + "inner_name": "EnumFlowerColor", + "outer_class": "net/minecraft/block/BlockFlower", + "start": "75" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockFlower$EnumFlowerType", + "inner_name": "EnumFlowerType", + "outer_class": "net/minecraft/block/BlockFlower", + "start": "89" + } + ] + }, + "net/minecraft/block/BlockFlower$1": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/block/properties/IProperty;", + "name": "func_176494_l", + "owner": "net/minecraft/block/BlockFlower" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockFlower$1", + "start": "55" + } + ] + }, + "net/minecraft/block/BlockFlower$EnumFlowerColor": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFlower" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockFlower$EnumFlowerColor", + "inner_name": "EnumFlowerColor", + "outer_class": "net/minecraft/block/BlockFlower", + "start": "75" + } + ] + }, + "net/minecraft/block/BlockFlower$EnumFlowerType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFlower" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockFlower$EnumFlowerType", + "inner_name": "EnumFlowerType", + "outer_class": "net/minecraft/block/BlockFlower", + "start": "89" + }, + { + "inner_class": "net/minecraft/block/BlockFlower$EnumFlowerType$1", + "start": "112" + } + ] + }, + "net/minecraft/block/BlockFlower$EnumFlowerType$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFlower$EnumFlowerType" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockFlower$EnumFlowerType$1", + "start": "112" + } + ] + }, + "net/minecraft/block/BlockFlowerPot": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockFlowerPot$EnumFlowerType", + "inner_name": "EnumFlowerType", + "outer_class": "net/minecraft/block/BlockFlowerPot", + "start": "343" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFlowerPot$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFlowerPot" + } + ] + }, + "net/minecraft/block/BlockFlowerPot$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFlowerPot" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFlowerPot$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFlowerPot" + } + ] + }, + "net/minecraft/block/BlockFlowerPot$EnumFlowerType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFlowerPot" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockFlowerPot$EnumFlowerType", + "inner_name": "EnumFlowerType", + "outer_class": "net/minecraft/block/BlockFlowerPot", + "start": "343" + } + ] + }, + "net/minecraft/block/BlockFurnace": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFurnace$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFurnace" + } + ] + }, + "net/minecraft/block/BlockFurnace$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockFurnace" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockFurnace$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockFurnace" + } + ] + }, + "net/minecraft/block/BlockGrassPath": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockGrassPath$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockGrassPath" + } + ] + }, + "net/minecraft/block/BlockGrassPath$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockGrassPath" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockGrassPath$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockGrassPath" + } + ] + }, + "net/minecraft/block/BlockHopper": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockHopper$1", + "start": "33" + } + ] + }, + "net/minecraft/block/BlockHopper$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockHopper" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockHopper$1", + "start": "33" + } + ] + }, + "net/minecraft/block/BlockHugeMushroom": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockHugeMushroom$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockHugeMushroom", + "start": "199" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockHugeMushroom$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockHugeMushroom" + } + ] + }, + "net/minecraft/block/BlockHugeMushroom$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockHugeMushroom" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockHugeMushroom$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockHugeMushroom" + } + ] + }, + "net/minecraft/block/BlockHugeMushroom$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockHugeMushroom" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockHugeMushroom$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockHugeMushroom", + "start": "199" + } + ] + }, + "net/minecraft/block/BlockJukebox": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockJukebox$TileEntityJukebox", + "inner_name": "TileEntityJukebox", + "outer_class": "net/minecraft/block/BlockJukebox", + "start": "36" + } + ] + }, + "net/minecraft/block/BlockJukebox$TileEntityJukebox": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockJukebox" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockJukebox$TileEntityJukebox", + "inner_name": "TileEntityJukebox", + "outer_class": "net/minecraft/block/BlockJukebox", + "start": "36" + } + ] + }, + "net/minecraft/block/BlockLadder": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockLadder$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockLadder" + } + ] + }, + "net/minecraft/block/BlockLadder$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockLadder" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockLadder$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockLadder" + } + ] + }, + "net/minecraft/block/BlockLever": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockLever$EnumOrientation", + "inner_name": "EnumOrientation", + "outer_class": "net/minecraft/block/BlockLever", + "start": "301" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockLever$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockLever" + } + ] + }, + "net/minecraft/block/BlockLever$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockLever" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockLever$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockLever" + } + ] + }, + "net/minecraft/block/BlockLever$EnumOrientation": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockLever" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockLever$EnumOrientation", + "inner_name": "EnumOrientation", + "outer_class": "net/minecraft/block/BlockLever", + "start": "301" + } + ] + }, + "net/minecraft/block/BlockLog": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockLog$EnumAxis", + "inner_name": "EnumAxis", + "outer_class": "net/minecraft/block/BlockLog", + "start": "70" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockLog$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockLog" + } + ] + }, + "net/minecraft/block/BlockLog$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockLog" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockLog$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockLog" + } + ] + }, + "net/minecraft/block/BlockLog$EnumAxis": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockLog" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockLog$EnumAxis", + "inner_name": "EnumAxis", + "outer_class": "net/minecraft/block/BlockLog", + "start": "70" + } + ] + }, + "net/minecraft/block/BlockNewLeaf": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockNewLeaf$1", + "start": "21" + } + ] + }, + "net/minecraft/block/BlockNewLeaf$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockNewLeaf" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockNewLeaf$1", + "start": "21" + } + ] + }, + "net/minecraft/block/BlockNewLog": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockNewLog$1", + "start": "18" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockNewLog$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockNewLog" + } + ] + }, + "net/minecraft/block/BlockNewLog$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockNewLog" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockNewLog$1", + "start": "18" + } + ] + }, + "net/minecraft/block/BlockNewLog$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockNewLog" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockNewLog$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockNewLog" + } + ] + }, + "net/minecraft/block/BlockOldLeaf": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockOldLeaf$1", + "start": "21" + } + ] + }, + "net/minecraft/block/BlockOldLeaf$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockOldLeaf" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockOldLeaf$1", + "start": "21" + } + ] + }, + "net/minecraft/block/BlockOldLog": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockOldLog$1", + "start": "18" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockOldLog$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockOldLog" + } + ] + }, + "net/minecraft/block/BlockOldLog$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockOldLog" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockOldLog$1", + "start": "18" + } + ] + }, + "net/minecraft/block/BlockOldLog$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockOldLog" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockOldLog$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockOldLog" + } + ] + }, + "net/minecraft/block/BlockPane": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPane$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPane" + } + ] + }, + "net/minecraft/block/BlockPane$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPane" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPane$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPane" + } + ] + }, + "net/minecraft/block/BlockPistonBase": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPistonBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPistonBase" + } + ] + }, + "net/minecraft/block/BlockPistonBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPistonBase" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPistonBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPistonBase" + } + ] + }, + "net/minecraft/block/BlockPistonExtension": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPistonExtension$EnumPistonType", + "inner_name": "EnumPistonType", + "outer_class": "net/minecraft/block/BlockPistonExtension", + "start": "236" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPistonExtension$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPistonExtension" + } + ] + }, + "net/minecraft/block/BlockPistonExtension$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPistonExtension" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPistonExtension$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPistonExtension" + } + ] + }, + "net/minecraft/block/BlockPistonExtension$EnumPistonType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPistonExtension" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPistonExtension$EnumPistonType", + "inner_name": "EnumPistonType", + "outer_class": "net/minecraft/block/BlockPistonExtension", + "start": "236" + } + ] + }, + "net/minecraft/block/BlockPlanks": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPlanks$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockPlanks", + "start": "57" + } + ] + }, + "net/minecraft/block/BlockPlanks$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPlanks" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPlanks$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockPlanks", + "start": "57" + } + ] + }, + "net/minecraft/block/BlockPortal": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockPortal$Size", + "inner_name": "Size", + "outer_class": "net/minecraft/block/BlockPortal", + "start": "309" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPortal$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPortal" + } + ] + }, + "net/minecraft/block/BlockPortal$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPortal" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPortal$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPortal" + } + ] + }, + "net/minecraft/block/BlockPortal$Size": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPortal" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockPortal$Size", + "inner_name": "Size", + "outer_class": "net/minecraft/block/BlockPortal", + "start": "309" + } + ] + }, + "net/minecraft/block/BlockPressurePlate": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPressurePlate$Sensitivity", + "inner_name": "Sensitivity", + "outer_class": "net/minecraft/block/BlockPressurePlate", + "start": "21" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPressurePlate$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPressurePlate" + } + ] + }, + "net/minecraft/block/BlockPressurePlate$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPressurePlate" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockPressurePlate$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockPressurePlate" + } + ] + }, + "net/minecraft/block/BlockPressurePlate$Sensitivity": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPressurePlate" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPressurePlate$Sensitivity", + "inner_name": "Sensitivity", + "outer_class": "net/minecraft/block/BlockPressurePlate", + "start": "21" + } + ] + }, + "net/minecraft/block/BlockPrismarine": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPrismarine$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockPrismarine", + "start": "68" + } + ] + }, + "net/minecraft/block/BlockPrismarine$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPrismarine" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPrismarine$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockPrismarine", + "start": "68" + } + ] + }, + "net/minecraft/block/BlockPumpkin": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockPumpkin$1", + "start": "146" + } + ] + }, + "net/minecraft/block/BlockPumpkin$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPumpkin" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockPumpkin$1", + "start": "146" + } + ] + }, + "net/minecraft/block/BlockPurpurSlab": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockPurpurSlab$Half", + "inner_name": "Half", + "outer_class": "net/minecraft/block/BlockPurpurSlab", + "start": "92" + }, + { + "access": "29", + "inner_class": "net/minecraft/block/BlockPurpurSlab$Double", + "inner_name": "Double", + "outer_class": "net/minecraft/block/BlockPurpurSlab", + "start": "99" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPurpurSlab$Variant", + "inner_name": "Variant", + "outer_class": "net/minecraft/block/BlockPurpurSlab", + "start": "105" + } + ] + }, + "net/minecraft/block/BlockPurpurSlab$Double": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPurpurSlab" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockPurpurSlab$Double", + "inner_name": "Double", + "outer_class": "net/minecraft/block/BlockPurpurSlab", + "start": "99" + } + ] + }, + "net/minecraft/block/BlockPurpurSlab$Half": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPurpurSlab" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockPurpurSlab$Half", + "inner_name": "Half", + "outer_class": "net/minecraft/block/BlockPurpurSlab", + "start": "92" + } + ] + }, + "net/minecraft/block/BlockPurpurSlab$Variant": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockPurpurSlab" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockPurpurSlab$Variant", + "inner_name": "Variant", + "outer_class": "net/minecraft/block/BlockPurpurSlab", + "start": "105" + } + ] + }, + "net/minecraft/block/BlockQuartz": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockQuartz$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockQuartz", + "start": "113" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockQuartz$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockQuartz" + } + ] + }, + "net/minecraft/block/BlockQuartz$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockQuartz" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockQuartz$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockQuartz" + } + ] + }, + "net/minecraft/block/BlockQuartz$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockQuartz" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockQuartz$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockQuartz", + "start": "113" + } + ] + }, + "net/minecraft/block/BlockRail": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRail$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRail" + } + ] + }, + "net/minecraft/block/BlockRail$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRail" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRail$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRail" + } + ] + }, + "net/minecraft/block/BlockRailBase": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/block/BlockRailBase$Rail", + "inner_name": "Rail", + "outer_class": "net/minecraft/block/BlockRailBase", + "start": "47" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockRailBase$EnumRailDirection", + "inner_name": "EnumRailDirection", + "outer_class": "net/minecraft/block/BlockRailBase", + "start": "487" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRailBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRailBase" + } + ] + }, + "net/minecraft/block/BlockRailBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailBase" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRailBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRailBase" + } + ] + }, + "net/minecraft/block/BlockRailBase$EnumRailDirection": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailBase" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockRailBase$EnumRailDirection", + "inner_name": "EnumRailDirection", + "outer_class": "net/minecraft/block/BlockRailBase", + "start": "487" + } + ] + }, + "net/minecraft/block/BlockRailBase$Rail": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailBase" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/block/BlockRailBase$Rail", + "inner_name": "Rail", + "outer_class": "net/minecraft/block/BlockRailBase", + "start": "47" + } + ] + }, + "net/minecraft/block/BlockRailDetector": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockRailDetector$1", + "start": "27" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRailDetector$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockRailDetector" + } + ] + }, + "net/minecraft/block/BlockRailDetector$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailDetector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockRailDetector$1", + "start": "27" + } + ] + }, + "net/minecraft/block/BlockRailDetector$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailDetector" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRailDetector$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockRailDetector" + } + ] + }, + "net/minecraft/block/BlockRailPowered": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockRailPowered$1", + "start": "15" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRailPowered$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockRailPowered" + } + ] + }, + "net/minecraft/block/BlockRailPowered$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailPowered" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockRailPowered$1", + "start": "15" + } + ] + }, + "net/minecraft/block/BlockRailPowered$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRailPowered" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRailPowered$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockRailPowered" + } + ] + }, + "net/minecraft/block/BlockRedSandstone": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockRedSandstone$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockRedSandstone", + "start": "49" + } + ] + }, + "net/minecraft/block/BlockRedSandstone$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRedSandstone" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockRedSandstone$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockRedSandstone", + "start": "49" + } + ] + }, + "net/minecraft/block/BlockRedstoneComparator": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockRedstoneComparator$1", + "start": "152" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockRedstoneComparator$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/block/BlockRedstoneComparator", + "start": "309" + } + ] + }, + "net/minecraft/block/BlockRedstoneComparator$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;Lnet/minecraft/util/EnumFacing;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/entity/item/EntityItemFrame;", + "name": "func_176461_a", + "owner": "net/minecraft/block/BlockRedstoneComparator" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockRedstoneComparator$1", + "start": "152" + } + ] + }, + "net/minecraft/block/BlockRedstoneComparator$Mode": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRedstoneComparator" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockRedstoneComparator$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/block/BlockRedstoneComparator", + "start": "309" + } + ] + }, + "net/minecraft/block/BlockRedstoneTorch": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/block/BlockRedstoneTorch$Toggle", + "inner_name": "Toggle", + "outer_class": "net/minecraft/block/BlockRedstoneTorch" + } + ] + }, + "net/minecraft/block/BlockRedstoneTorch$Toggle": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRedstoneTorch" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/block/BlockRedstoneTorch$Toggle", + "inner_name": "Toggle", + "outer_class": "net/minecraft/block/BlockRedstoneTorch" + } + ] + }, + "net/minecraft/block/BlockRedstoneWire": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/block/BlockRedstoneWire$EnumAttachPosition", + "inner_name": "EnumAttachPosition", + "outer_class": "net/minecraft/block/BlockRedstoneWire", + "start": "512" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRedstoneWire$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRedstoneWire" + } + ] + }, + "net/minecraft/block/BlockRedstoneWire$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRedstoneWire" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRedstoneWire$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRedstoneWire" + } + ] + }, + "net/minecraft/block/BlockRedstoneWire$EnumAttachPosition": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRedstoneWire" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/block/BlockRedstoneWire$EnumAttachPosition", + "inner_name": "EnumAttachPosition", + "outer_class": "net/minecraft/block/BlockRedstoneWire", + "start": "512" + } + ] + }, + "net/minecraft/block/BlockRotatedPillar": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRotatedPillar$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRotatedPillar" + } + ] + }, + "net/minecraft/block/BlockRotatedPillar$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockRotatedPillar" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockRotatedPillar$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockRotatedPillar" + } + ] + }, + "net/minecraft/block/BlockSand": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockSand$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockSand", + "start": "60" + } + ] + }, + "net/minecraft/block/BlockSand$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSand" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockSand$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockSand", + "start": "60" + } + ] + }, + "net/minecraft/block/BlockSandStone": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockSandStone$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockSandStone", + "start": "57" + } + ] + }, + "net/minecraft/block/BlockSandStone$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSandStone" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockSandStone$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockSandStone", + "start": "57" + } + ] + }, + "net/minecraft/block/BlockSapling": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockSapling$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockSapling" + } + ] + }, + "net/minecraft/block/BlockSapling$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSapling" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockSapling$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockSapling" + } + ] + }, + "net/minecraft/block/BlockShulkerBox": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockShulkerBox$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockShulkerBox" + } + ] + }, + "net/minecraft/block/BlockShulkerBox$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockShulkerBox" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockShulkerBox$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockShulkerBox" + } + ] + }, + "net/minecraft/block/BlockSilverfish": { + "innerClasses": [ + { + "access": "4429", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockSilverfish", + "start": "96" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockSilverfish$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockSilverfish" + } + ] + }, + "net/minecraft/block/BlockSilverfish$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockSilverfish$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockSilverfish" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish" + }, + "innerClasses": [ + { + "access": "4429", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockSilverfish", + "start": "96" + }, + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$1", + "start": "101" + }, + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$2", + "start": "107" + }, + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$3", + "start": "113" + }, + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$4", + "start": "119" + }, + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$5", + "start": "125" + }, + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$6", + "start": "131" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish$EnumType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$1", + "start": "101" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish$EnumType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$2", + "start": "107" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType$3": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish$EnumType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$3", + "start": "113" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType$4": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish$EnumType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$4", + "start": "119" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType$5": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish$EnumType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$5", + "start": "125" + } + ] + }, + "net/minecraft/block/BlockSilverfish$EnumType$6": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSilverfish$EnumType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/block/BlockSilverfish$EnumType$6", + "start": "131" + } + ] + }, + "net/minecraft/block/BlockSkull": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockSkull$1", + "start": "43" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockSkull$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockSkull" + } + ] + }, + "net/minecraft/block/BlockSkull$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSkull" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockSkull$1", + "start": "43" + } + ] + }, + "net/minecraft/block/BlockSkull$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSkull" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockSkull$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockSkull" + } + ] + }, + "net/minecraft/block/BlockSlab": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockSlab$EnumBlockHalf", + "inner_name": "EnumBlockHalf", + "outer_class": "net/minecraft/block/BlockSlab", + "start": "152" + } + ] + }, + "net/minecraft/block/BlockSlab$EnumBlockHalf": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockSlab" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockSlab$EnumBlockHalf", + "inner_name": "EnumBlockHalf", + "outer_class": "net/minecraft/block/BlockSlab", + "start": "152" + } + ] + }, + "net/minecraft/block/BlockStainedGlassPane": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockStainedGlassPane$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockStainedGlassPane" + } + ] + }, + "net/minecraft/block/BlockStainedGlassPane$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStainedGlassPane" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockStainedGlassPane$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockStainedGlassPane" + } + ] + }, + "net/minecraft/block/BlockStairs": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStairs$EnumHalf", + "inner_name": "EnumHalf", + "outer_class": "net/minecraft/block/BlockStairs", + "start": "452" + }, + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStairs$EnumShape", + "inner_name": "EnumShape", + "outer_class": "net/minecraft/block/BlockStairs", + "start": "474" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockStairs$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockStairs" + } + ] + }, + "net/minecraft/block/BlockStairs$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStairs" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockStairs$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockStairs" + } + ] + }, + "net/minecraft/block/BlockStairs$EnumHalf": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStairs" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStairs$EnumHalf", + "inner_name": "EnumHalf", + "outer_class": "net/minecraft/block/BlockStairs", + "start": "452" + } + ] + }, + "net/minecraft/block/BlockStairs$EnumShape": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStairs" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStairs$EnumShape", + "inner_name": "EnumShape", + "outer_class": "net/minecraft/block/BlockStairs", + "start": "474" + } + ] + }, + "net/minecraft/block/BlockStone": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStone$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStone", + "start": "74" + } + ] + }, + "net/minecraft/block/BlockStone$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStone" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStone$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStone", + "start": "74" + } + ] + }, + "net/minecraft/block/BlockStoneBrick": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStoneBrick$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStoneBrick", + "start": "54" + } + ] + }, + "net/minecraft/block/BlockStoneBrick$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStoneBrick" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStoneBrick$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStoneBrick", + "start": "54" + } + ] + }, + "net/minecraft/block/BlockStoneSlab": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStoneSlab$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStoneSlab", + "start": "123" + } + ] + }, + "net/minecraft/block/BlockStoneSlab$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStoneSlab" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStoneSlab$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStoneSlab", + "start": "123" + } + ] + }, + "net/minecraft/block/BlockStoneSlabNew": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStoneSlabNew$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStoneSlabNew", + "start": "126" + } + ] + }, + "net/minecraft/block/BlockStoneSlabNew$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStoneSlabNew" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockStoneSlabNew$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockStoneSlabNew", + "start": "126" + } + ] + }, + "net/minecraft/block/BlockStructure": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockStructure$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockStructure" + } + ] + }, + "net/minecraft/block/BlockStructure$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockStructure" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockStructure$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockStructure" + } + ] + }, + "net/minecraft/block/BlockTallGrass": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockTallGrass$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockTallGrass", + "start": "124" + } + ] + }, + "net/minecraft/block/BlockTallGrass$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTallGrass" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockTallGrass$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockTallGrass", + "start": "124" + } + ] + }, + "net/minecraft/block/BlockTorch": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockTorch$1", + "start": "23" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTorch$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockTorch" + } + ] + }, + "net/minecraft/block/BlockTorch$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTorch" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/BlockTorch$1", + "start": "23" + } + ] + }, + "net/minecraft/block/BlockTorch$2": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTorch" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTorch$2", + "inner_name": "2", + "outer_class": "net/minecraft/block/BlockTorch" + } + ] + }, + "net/minecraft/block/BlockTrapDoor": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockTrapDoor$DoorHalf", + "inner_name": "DoorHalf", + "outer_class": "net/minecraft/block/BlockTrapDoor", + "start": "221" + }, + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTrapDoor$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockTrapDoor" + } + ] + }, + "net/minecraft/block/BlockTrapDoor$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTrapDoor" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTrapDoor$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockTrapDoor" + } + ] + }, + "net/minecraft/block/BlockTrapDoor$DoorHalf": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTrapDoor" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockTrapDoor$DoorHalf", + "inner_name": "DoorHalf", + "outer_class": "net/minecraft/block/BlockTrapDoor", + "start": "221" + } + ] + }, + "net/minecraft/block/BlockTripWire": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTripWire$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockTripWire" + } + ] + }, + "net/minecraft/block/BlockTripWire$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTripWire" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTripWire$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockTripWire" + } + ] + }, + "net/minecraft/block/BlockTripWireHook": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTripWireHook$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockTripWireHook" + } + ] + }, + "net/minecraft/block/BlockTripWireHook$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockTripWireHook" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockTripWireHook$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockTripWireHook" + } + ] + }, + "net/minecraft/block/BlockVine": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockVine$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockVine" + } + ] + }, + "net/minecraft/block/BlockVine$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockVine" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockVine$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockVine" + } + ] + }, + "net/minecraft/block/BlockWall": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockWall$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockWall", + "start": "220" + } + ] + }, + "net/minecraft/block/BlockWall$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockWall" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/block/BlockWall$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/block/BlockWall", + "start": "220" + } + ] + }, + "net/minecraft/block/BlockWallSign": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockWallSign$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockWallSign" + } + ] + }, + "net/minecraft/block/BlockWallSign$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockWallSign" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/block/BlockWallSign$1", + "inner_name": "1", + "outer_class": "net/minecraft/block/BlockWallSign" + } + ] + }, + "net/minecraft/block/BlockWorkbench": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockWorkbench$InterfaceCraftingTable", + "inner_name": "InterfaceCraftingTable", + "outer_class": "net/minecraft/block/BlockWorkbench", + "start": "47" + } + ] + }, + "net/minecraft/block/BlockWorkbench$InterfaceCraftingTable": { + "enclosingMethod": { + "owner": "net/minecraft/block/BlockWorkbench" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/BlockWorkbench$InterfaceCraftingTable", + "inner_name": "InterfaceCraftingTable", + "outer_class": "net/minecraft/block/BlockWorkbench", + "start": "47" + } + ] + }, + "net/minecraft/block/material/Material": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/material/Material$1", + "start": "39" + } + ] + }, + "net/minecraft/block/material/Material$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/material/Material" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/material/Material$1", + "start": "39" + } + ] + }, + "net/minecraft/block/state/BlockStateBase": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/BlockStateBase$1", + "start": "16" + } + ] + }, + "net/minecraft/block/state/BlockStateBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/BlockStateBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/BlockStateBase$1", + "start": "16" + } + ] + }, + "net/minecraft/block/state/BlockStateContainer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/BlockStateContainer$1", + "start": "44" + }, + { + "access": "29", + "inner_class": "net/minecraft/block/state/BlockStateContainer$StateImplementation", + "inner_name": "StateImplementation", + "outer_class": "net/minecraft/block/state/BlockStateContainer", + "start": "154" + } + ] + }, + "net/minecraft/block/state/BlockStateContainer$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/BlockStateContainer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/BlockStateContainer$1", + "start": "44" + } + ] + }, + "net/minecraft/block/state/BlockStateContainer$StateImplementation": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/BlockStateContainer" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/state/BlockStateContainer$StateImplementation", + "inner_name": "StateImplementation", + "outer_class": "net/minecraft/block/state/BlockStateContainer", + "start": "154" + } + ] + }, + "net/minecraft/block/state/BlockWorldState": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/BlockWorldState$1", + "start": "52" + } + ] + }, + "net/minecraft/block/state/BlockWorldState$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/BlockWorldState" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/BlockWorldState$1", + "start": "52" + } + ] + }, + "net/minecraft/block/state/pattern/BlockPattern": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/block/state/pattern/BlockPattern$CacheLoader", + "inner_name": "CacheLoader", + "outer_class": "net/minecraft/block/state/pattern/BlockPattern", + "start": "121" + }, + { + "access": "29", + "inner_class": "net/minecraft/block/state/pattern/BlockPattern$PatternHelper", + "inner_name": "PatternHelper", + "outer_class": "net/minecraft/block/state/pattern/BlockPattern", + "start": "156" + } + ] + }, + "net/minecraft/block/state/pattern/BlockPattern$CacheLoader": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/pattern/BlockPattern" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/block/state/pattern/BlockPattern$CacheLoader", + "inner_name": "CacheLoader", + "outer_class": "net/minecraft/block/state/pattern/BlockPattern", + "start": "121" + } + ] + }, + "net/minecraft/block/state/pattern/BlockPattern$PatternHelper": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/pattern/BlockPattern" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/block/state/pattern/BlockPattern$PatternHelper", + "inner_name": "PatternHelper", + "outer_class": "net/minecraft/block/state/pattern/BlockPattern", + "start": "156" + } + ] + }, + "net/minecraft/block/state/pattern/BlockStateMatcher": { + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/pattern/BlockStateMatcher$1", + "start": "14" + } + ] + }, + "net/minecraft/block/state/pattern/BlockStateMatcher$1": { + "enclosingMethod": { + "owner": "net/minecraft/block/state/pattern/BlockStateMatcher" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/block/state/pattern/BlockStateMatcher$1", + "start": "14" + } + ] + }, + "net/minecraft/client/Minecraft": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$1", + "start": "706" + }, + { + "inner_class": "net/minecraft/client/Minecraft$2", + "start": "1629" + }, + { + "inner_class": "net/minecraft/client/Minecraft$3", + "start": "1644" + }, + { + "inner_class": "net/minecraft/client/Minecraft$4", + "start": "2492" + }, + { + "inner_class": "net/minecraft/client/Minecraft$5", + "start": "2499" + }, + { + "inner_class": "net/minecraft/client/Minecraft$6", + "start": "2506" + }, + { + "inner_class": "net/minecraft/client/Minecraft$7", + "start": "2513" + }, + { + "inner_class": "net/minecraft/client/Minecraft$8", + "start": "2520" + }, + { + "inner_class": "net/minecraft/client/Minecraft$9", + "start": "2527" + }, + { + "inner_class": "net/minecraft/client/Minecraft$10", + "start": "2541" + }, + { + "inner_class": "net/minecraft/client/Minecraft$11", + "start": "2548" + }, + { + "inner_class": "net/minecraft/client/Minecraft$12", + "start": "2565" + }, + { + "inner_class": "net/minecraft/client/Minecraft$13", + "start": "2572" + }, + { + "inner_class": "net/minecraft/client/Minecraft$14", + "start": "2579" + }, + { + "inner_class": "net/minecraft/client/Minecraft$15", + "start": "2601" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/Minecraft$16", + "inner_name": "16", + "outer_class": "net/minecraft/client/Minecraft" + } + ] + }, + "net/minecraft/client/Minecraft$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71389_H", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$1", + "start": "706" + } + ] + }, + "net/minecraft/client/Minecraft$10": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$10", + "start": "2541" + } + ] + }, + "net/minecraft/client/Minecraft$11": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$11", + "start": "2548" + } + ] + }, + "net/minecraft/client/Minecraft$12": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$12", + "start": "2565" + } + ] + }, + "net/minecraft/client/Minecraft$13": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$13", + "start": "2572" + } + ] + }, + "net/minecraft/client/Minecraft$14": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$14", + "start": "2579" + } + ] + }, + "net/minecraft/client/Minecraft$15": { + "enclosingMethod": { + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$15", + "start": "2601" + } + ] + }, + "net/minecraft/client/Minecraft$16": { + "enclosingMethod": { + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/Minecraft$16", + "inner_name": "16", + "outer_class": "net/minecraft/client/Minecraft" + } + ] + }, + "net/minecraft/client/Minecraft$2": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71407_l", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$2", + "start": "1629" + } + ] + }, + "net/minecraft/client/Minecraft$3": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71407_l", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$3", + "start": "1644" + } + ] + }, + "net/minecraft/client/Minecraft$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$4", + "start": "2492" + } + ] + }, + "net/minecraft/client/Minecraft$5": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$5", + "start": "2499" + } + ] + }, + "net/minecraft/client/Minecraft$6": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$6", + "start": "2506" + } + ] + }, + "net/minecraft/client/Minecraft$7": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$7", + "start": "2513" + } + ] + }, + "net/minecraft/client/Minecraft$8": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$8", + "start": "2520" + } + ] + }, + "net/minecraft/client/Minecraft$9": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71396_d", + "owner": "net/minecraft/client/Minecraft" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/Minecraft$9", + "start": "2527" + } + ] + }, + "net/minecraft/client/audio/ISound": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/audio/ISound$AttenuationType", + "inner_name": "AttenuationType", + "outer_class": "net/minecraft/client/audio/ISound", + "start": "12" + } + ] + }, + "net/minecraft/client/audio/ISound$AttenuationType": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/ISound" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/audio/ISound$AttenuationType", + "inner_name": "AttenuationType", + "outer_class": "net/minecraft/client/audio/ISound", + "start": "12" + } + ] + }, + "net/minecraft/client/audio/MusicTicker": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/audio/MusicTicker$MusicType", + "inner_name": "MusicType", + "outer_class": "net/minecraft/client/audio/MusicTicker", + "start": "61" + } + ] + }, + "net/minecraft/client/audio/MusicTicker$MusicType": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/MusicTicker" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/audio/MusicTicker$MusicType", + "inner_name": "MusicType", + "outer_class": "net/minecraft/client/audio/MusicTicker", + "start": "61" + } + ] + }, + "net/minecraft/client/audio/Sound": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/audio/Sound$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/client/audio/Sound", + "start": "57" + } + ] + }, + "net/minecraft/client/audio/Sound$Type": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/Sound" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/audio/Sound$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/client/audio/Sound", + "start": "57" + } + ] + }, + "net/minecraft/client/audio/SoundHandler": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundHandler$1", + "start": "49" + }, + { + "inner_class": "net/minecraft/client/audio/SoundHandler$2", + "start": "152" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/audio/SoundHandler$3", + "inner_name": "3", + "outer_class": "net/minecraft/client/audio/SoundHandler" + } + ] + }, + "net/minecraft/client/audio/SoundHandler$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/SoundHandler" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundHandler$1", + "start": "49" + } + ] + }, + "net/minecraft/client/audio/SoundHandler$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/audio/SoundList;)V", + "name": "func_147693_a", + "owner": "net/minecraft/client/audio/SoundHandler" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundHandler$2", + "start": "152" + } + ] + }, + "net/minecraft/client/audio/SoundHandler$3": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/SoundHandler" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/audio/SoundHandler$3", + "inner_name": "3", + "outer_class": "net/minecraft/client/audio/SoundHandler" + } + ] + }, + "net/minecraft/client/audio/SoundManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundManager$1", + "start": "111" + }, + { + "inner_class": "net/minecraft/client/audio/SoundManager$2", + "start": "445" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/audio/SoundManager$SoundSystemStarterThread", + "inner_name": "SoundSystemStarterThread", + "outer_class": "net/minecraft/client/audio/SoundManager", + "start": "503" + } + ] + }, + "net/minecraft/client/audio/SoundManager$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_148608_i", + "owner": "net/minecraft/client/audio/SoundManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundManager$1", + "start": "111" + }, + { + "inner_class": "net/minecraft/client/audio/SoundManager$1$1", + "start": "114" + } + ] + }, + "net/minecraft/client/audio/SoundManager$1$1": { + "enclosingMethod": { + "desc": "()V", + "name": "run", + "owner": "net/minecraft/client/audio/SoundManager$1" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundManager$1$1", + "start": "114" + } + ] + }, + "net/minecraft/client/audio/SoundManager$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/SoundManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundManager$2", + "start": "445" + }, + { + "inner_class": "net/minecraft/client/audio/SoundManager$2$1", + "start": "449" + } + ] + }, + "net/minecraft/client/audio/SoundManager$2$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/SoundManager$2" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/audio/SoundManager$2$1", + "start": "449" + } + ] + }, + "net/minecraft/client/audio/SoundManager$SoundSystemStarterThread": { + "enclosingMethod": { + "owner": "net/minecraft/client/audio/SoundManager" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/audio/SoundManager$SoundSystemStarterThread", + "inner_name": "SoundSystemStarterThread", + "outer_class": "net/minecraft/client/audio/SoundManager", + "start": "503" + } + ] + }, + "net/minecraft/client/gui/BossInfoClient": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/BossInfoClient$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/BossInfoClient" + } + ] + }, + "net/minecraft/client/gui/BossInfoClient$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/BossInfoClient" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/BossInfoClient$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/BossInfoClient" + } + ] + }, + "net/minecraft/client/gui/GuiChat": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiChat$ChatTabCompleter", + "inner_name": "ChatTabCompleter", + "outer_class": "net/minecraft/client/gui/GuiChat", + "start": "190" + } + ] + }, + "net/minecraft/client/gui/GuiChat$ChatTabCompleter": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiChat" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiChat$ChatTabCompleter", + "inner_name": "ChatTabCompleter", + "outer_class": "net/minecraft/client/gui/GuiChat", + "start": "190" + } + ] + }, + "net/minecraft/client/gui/GuiCommandBlock": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiCommandBlock$1", + "start": "84" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/GuiCommandBlock$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/gui/GuiCommandBlock" + } + ] + }, + "net/minecraft/client/gui/GuiCommandBlock$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiCommandBlock" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiCommandBlock$1", + "start": "84" + } + ] + }, + "net/minecraft/client/gui/GuiCommandBlock$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiCommandBlock" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/GuiCommandBlock$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/gui/GuiCommandBlock" + } + ] + }, + "net/minecraft/client/gui/GuiCreateFlatWorld": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiCreateFlatWorld$Details", + "inner_name": "Details", + "outer_class": "net/minecraft/client/gui/GuiCreateFlatWorld", + "start": "149" + } + ] + }, + "net/minecraft/client/gui/GuiCreateFlatWorld$Details": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiCreateFlatWorld" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiCreateFlatWorld$Details", + "inner_name": "Details", + "outer_class": "net/minecraft/client/gui/GuiCreateFlatWorld", + "start": "149" + } + ] + }, + "net/minecraft/client/gui/GuiCustomizeSkin": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart", + "inner_name": "ButtonPart", + "outer_class": "net/minecraft/client/gui/GuiCustomizeSkin", + "start": "88" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/GuiCustomizeSkin$1" + } + ] + }, + "net/minecraft/client/gui/GuiCustomizeSkin$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiCustomizeSkin" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/GuiCustomizeSkin$1" + } + ] + }, + "net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiCustomizeSkin" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart", + "inner_name": "ButtonPart", + "outer_class": "net/minecraft/client/gui/GuiCustomizeSkin", + "start": "88" + } + ] + }, + "net/minecraft/client/gui/GuiCustomizeWorldScreen": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiCustomizeWorldScreen$1", + "start": "193" + } + ] + }, + "net/minecraft/client/gui/GuiCustomizeWorldScreen$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiCustomizeWorldScreen" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiCustomizeWorldScreen$1", + "start": "193" + } + ] + }, + "net/minecraft/client/gui/GuiFlatPresets": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiFlatPresets$ListSlot", + "inner_name": "ListSlot", + "outer_class": "net/minecraft/client/gui/GuiFlatPresets", + "start": "240" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiFlatPresets$LayerItem", + "inner_name": "LayerItem", + "outer_class": "net/minecraft/client/gui/GuiFlatPresets" + } + ] + }, + "net/minecraft/client/gui/GuiFlatPresets$LayerItem": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiFlatPresets" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiFlatPresets$LayerItem", + "inner_name": "LayerItem", + "outer_class": "net/minecraft/client/gui/GuiFlatPresets" + } + ] + }, + "net/minecraft/client/gui/GuiFlatPresets$ListSlot": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiFlatPresets" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiFlatPresets$ListSlot", + "inner_name": "ListSlot", + "outer_class": "net/minecraft/client/gui/GuiFlatPresets", + "start": "240" + } + ] + }, + "net/minecraft/client/gui/GuiIngame": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiIngame$1", + "start": "646" + } + ] + }, + "net/minecraft/client/gui/GuiIngame$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/scoreboard/ScoreObjective;Lnet/minecraft/client/gui/ScaledResolution;)V", + "name": "func_180475_a", + "owner": "net/minecraft/client/gui/GuiIngame" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiIngame$1", + "start": "646" + } + ] + }, + "net/minecraft/client/gui/GuiKeyBindingList": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry", + "inner_name": "CategoryEntry", + "outer_class": "net/minecraft/client/gui/GuiKeyBindingList", + "start": "71" + }, + { + "access": "21", + "inner_class": "net/minecraft/client/gui/GuiKeyBindingList$KeyEntry", + "inner_name": "KeyEntry", + "outer_class": "net/minecraft/client/gui/GuiKeyBindingList", + "start": "103" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/GuiKeyBindingList$1" + } + ] + }, + "net/minecraft/client/gui/GuiKeyBindingList$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiKeyBindingList" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/GuiKeyBindingList$1" + } + ] + }, + "net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiKeyBindingList" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry", + "inner_name": "CategoryEntry", + "outer_class": "net/minecraft/client/gui/GuiKeyBindingList", + "start": "71" + } + ] + }, + "net/minecraft/client/gui/GuiKeyBindingList$KeyEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiKeyBindingList" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/GuiKeyBindingList$KeyEntry", + "inner_name": "KeyEntry", + "outer_class": "net/minecraft/client/gui/GuiKeyBindingList", + "start": "103" + } + ] + }, + "net/minecraft/client/gui/GuiLanguage": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiLanguage$List", + "inner_name": "List", + "outer_class": "net/minecraft/client/gui/GuiLanguage", + "start": "102" + } + ] + }, + "net/minecraft/client/gui/GuiLanguage$List": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiLanguage" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiLanguage$List", + "inner_name": "List", + "outer_class": "net/minecraft/client/gui/GuiLanguage", + "start": "102" + } + ] + }, + "net/minecraft/client/gui/GuiListExtended": { + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/gui/GuiListExtended$IGuiListEntry", + "inner_name": "IGuiListEntry", + "outer_class": "net/minecraft/client/gui/GuiListExtended" + } + ] + }, + "net/minecraft/client/gui/GuiListExtended$IGuiListEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiListExtended" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/gui/GuiListExtended$IGuiListEntry", + "inner_name": "IGuiListEntry", + "outer_class": "net/minecraft/client/gui/GuiListExtended" + } + ] + }, + "net/minecraft/client/gui/GuiListWorldSelectionEntry": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiListWorldSelectionEntry$1", + "start": "168" + }, + { + "inner_class": "net/minecraft/client/gui/GuiListWorldSelectionEntry$2", + "start": "191" + } + ] + }, + "net/minecraft/client/gui/GuiListWorldSelectionEntry$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_186774_a", + "owner": "net/minecraft/client/gui/GuiListWorldSelectionEntry" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiListWorldSelectionEntry$1", + "start": "168" + } + ] + }, + "net/minecraft/client/gui/GuiListWorldSelectionEntry$2": { + "enclosingMethod": { + "desc": "()V", + "name": "func_186776_b", + "owner": "net/minecraft/client/gui/GuiListWorldSelectionEntry" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiListWorldSelectionEntry$2", + "start": "191" + } + ] + }, + "net/minecraft/client/gui/GuiLockIconButton": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/gui/GuiLockIconButton$Icon", + "inner_name": "Icon", + "outer_class": "net/minecraft/client/gui/GuiLockIconButton", + "start": "54" + } + ] + }, + "net/minecraft/client/gui/GuiLockIconButton$Icon": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiLockIconButton" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/gui/GuiLockIconButton$Icon", + "inner_name": "Icon", + "outer_class": "net/minecraft/client/gui/GuiLockIconButton", + "start": "54" + } + ] + }, + "net/minecraft/client/gui/GuiMerchant": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiMerchant$MerchantButton", + "inner_name": "MerchantButton", + "outer_class": "net/minecraft/client/gui/GuiMerchant", + "start": "197" + } + ] + }, + "net/minecraft/client/gui/GuiMerchant$MerchantButton": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiMerchant" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiMerchant$MerchantButton", + "inner_name": "MerchantButton", + "outer_class": "net/minecraft/client/gui/GuiMerchant", + "start": "197" + } + ] + }, + "net/minecraft/client/gui/GuiOptionsRowList": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiOptionsRowList$Row", + "inner_name": "Row", + "outer_class": "net/minecraft/client/gui/GuiOptionsRowList", + "start": "68" + } + ] + }, + "net/minecraft/client/gui/GuiOptionsRowList$Row": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiOptionsRowList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiOptionsRowList$Row", + "inner_name": "Row", + "outer_class": "net/minecraft/client/gui/GuiOptionsRowList", + "start": "68" + } + ] + }, + "net/minecraft/client/gui/GuiOverlayDebug": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/GuiOverlayDebug$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/GuiOverlayDebug" + } + ] + }, + "net/minecraft/client/gui/GuiOverlayDebug$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiOverlayDebug" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/GuiOverlayDebug$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/GuiOverlayDebug" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiEntry", + "inner_name": "GuiEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "290" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiListEntry", + "inner_name": "GuiListEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "425" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry", + "inner_name": "GuiSlideEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "452" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry", + "inner_name": "GuiButtonEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "477" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry", + "inner_name": "EditBoxEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "490" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry", + "inner_name": "GuiLabelEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList" + }, + { + "access": "609", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiResponder", + "inner_name": "GuiResponder", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry", + "inner_name": "EditBoxEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "490" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry", + "inner_name": "GuiButtonEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "477" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$GuiEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiEntry", + "inner_name": "GuiEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "290" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry", + "inner_name": "GuiLabelEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$GuiListEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiListEntry", + "inner_name": "GuiListEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "425" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$GuiResponder": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiResponder", + "inner_name": "GuiResponder", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList" + } + ] + }, + "net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPageButtonList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry", + "inner_name": "GuiSlideEntry", + "outer_class": "net/minecraft/client/gui/GuiPageButtonList", + "start": "452" + } + ] + }, + "net/minecraft/client/gui/GuiPlayerTabOverlay": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator", + "inner_name": "PlayerComparator", + "outer_class": "net/minecraft/client/gui/GuiPlayerTabOverlay", + "start": "318" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/GuiPlayerTabOverlay$1" + } + ] + }, + "net/minecraft/client/gui/GuiPlayerTabOverlay$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPlayerTabOverlay" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/GuiPlayerTabOverlay$1" + } + ] + }, + "net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiPlayerTabOverlay" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator", + "inner_name": "PlayerComparator", + "outer_class": "net/minecraft/client/gui/GuiPlayerTabOverlay", + "start": "318" + } + ] + }, + "net/minecraft/client/gui/GuiScreenAddServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiScreenAddServer$1", + "start": "23" + } + ] + }, + "net/minecraft/client/gui/GuiScreenAddServer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiScreenAddServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/GuiScreenAddServer$1", + "start": "23" + } + ] + }, + "net/minecraft/client/gui/GuiScreenBook": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiScreenBook$NextPageButton", + "inner_name": "NextPageButton", + "outer_class": "net/minecraft/client/gui/GuiScreenBook", + "start": "494" + } + ] + }, + "net/minecraft/client/gui/GuiScreenBook$NextPageButton": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiScreenBook" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiScreenBook$NextPageButton", + "inner_name": "NextPageButton", + "outer_class": "net/minecraft/client/gui/GuiScreenBook", + "start": "494" + } + ] + }, + "net/minecraft/client/gui/GuiScreenCustomizePresets": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset", + "inner_name": "ListPreset", + "outer_class": "net/minecraft/client/gui/GuiScreenCustomizePresets", + "start": "164" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiScreenCustomizePresets$Info", + "inner_name": "Info", + "outer_class": "net/minecraft/client/gui/GuiScreenCustomizePresets" + } + ] + }, + "net/minecraft/client/gui/GuiScreenCustomizePresets$Info": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiScreenCustomizePresets" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/GuiScreenCustomizePresets$Info", + "inner_name": "Info", + "outer_class": "net/minecraft/client/gui/GuiScreenCustomizePresets" + } + ] + }, + "net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiScreenCustomizePresets" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset", + "inner_name": "ListPreset", + "outer_class": "net/minecraft/client/gui/GuiScreenCustomizePresets", + "start": "164" + } + ] + }, + "net/minecraft/client/gui/GuiScreenOptionsSounds": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiScreenOptionsSounds$Button", + "inner_name": "Button", + "outer_class": "net/minecraft/client/gui/GuiScreenOptionsSounds", + "start": "108" + } + ] + }, + "net/minecraft/client/gui/GuiScreenOptionsSounds$Button": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiScreenOptionsSounds" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiScreenOptionsSounds$Button", + "inner_name": "Button", + "outer_class": "net/minecraft/client/gui/GuiScreenOptionsSounds", + "start": "108" + } + ] + }, + "net/minecraft/client/gui/GuiSlider": { + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/gui/GuiSlider$FormatHelper", + "inner_name": "FormatHelper", + "outer_class": "net/minecraft/client/gui/GuiSlider" + } + ] + }, + "net/minecraft/client/gui/GuiSlider$FormatHelper": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiSlider" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/gui/GuiSlider$FormatHelper", + "inner_name": "FormatHelper", + "outer_class": "net/minecraft/client/gui/GuiSlider" + } + ] + }, + "net/minecraft/client/gui/GuiSnooper": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiSnooper$List", + "inner_name": "List", + "outer_class": "net/minecraft/client/gui/GuiSnooper", + "start": "113" + } + ] + }, + "net/minecraft/client/gui/GuiSnooper$List": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiSnooper" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/GuiSnooper$List", + "inner_name": "List", + "outer_class": "net/minecraft/client/gui/GuiSnooper", + "start": "113" + } + ] + }, + "net/minecraft/client/gui/GuiSubtitleOverlay": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle", + "inner_name": "Subtitle", + "outer_class": "net/minecraft/client/gui/GuiSubtitleOverlay", + "start": "134" + } + ] + }, + "net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/GuiSubtitleOverlay" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle", + "inner_name": "Subtitle", + "outer_class": "net/minecraft/client/gui/GuiSubtitleOverlay", + "start": "134" + } + ] + }, + "net/minecraft/client/gui/MapItemRenderer": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/MapItemRenderer$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/client/gui/MapItemRenderer", + "start": "70" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/MapItemRenderer$1" + } + ] + }, + "net/minecraft/client/gui/MapItemRenderer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/MapItemRenderer" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/MapItemRenderer$1" + } + ] + }, + "net/minecraft/client/gui/MapItemRenderer$Instance": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/MapItemRenderer" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/MapItemRenderer$Instance", + "inner_name": "Instance", + "outer_class": "net/minecraft/client/gui/MapItemRenderer", + "start": "70" + } + ] + }, + "net/minecraft/client/gui/ServerListEntryNormal": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/ServerListEntryNormal$1", + "start": "74" + } + ] + }, + "net/minecraft/client/gui/ServerListEntryNormal$1": { + "enclosingMethod": { + "desc": "(IIIIIIIZF)V", + "name": "func_192634_a", + "owner": "net/minecraft/client/gui/ServerListEntryNormal" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/ServerListEntryNormal$1", + "start": "74" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsGeneral", + "inner_name": "StatsGeneral", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "161" + }, + { + "access": "420", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$Stats", + "inner_name": "Stats", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "263" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsItem", + "inner_name": "StatsItem", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "545" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsBlock", + "inner_name": "StatsBlock", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "681" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsMobsList", + "inner_name": "StatsMobsList", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "757" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$Stats": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats" + }, + "innerClasses": [ + { + "access": "420", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$Stats", + "inner_name": "Stats", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "263" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$StatsBlock": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1", + "start": "635" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsBlock", + "inner_name": "StatsBlock", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "681" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats$StatsBlock" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1", + "start": "635" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$StatsGeneral": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsGeneral", + "inner_name": "StatsGeneral", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "161" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$StatsItem": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsItem$1", + "start": "495" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsItem", + "inner_name": "StatsItem", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "545" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$StatsItem$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats$StatsItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsItem$1", + "start": "495" + } + ] + }, + "net/minecraft/client/gui/achievement/GuiStats$StatsMobsList": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/achievement/GuiStats" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/achievement/GuiStats$StatsMobsList", + "inner_name": "StatsMobsList", + "outer_class": "net/minecraft/client/gui/achievement/GuiStats", + "start": "757" + } + ] + }, + "net/minecraft/client/gui/advancements/AdvancementTabType": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/advancements/AdvancementTabType$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/advancements/AdvancementTabType" + } + ] + }, + "net/minecraft/client/gui/advancements/AdvancementTabType$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/advancements/AdvancementTabType" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/advancements/AdvancementTabType$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/advancements/AdvancementTabType" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiBeacon": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$Button", + "inner_name": "Button", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "204" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$PowerButton", + "inner_name": "PowerButton", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "240" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton", + "inner_name": "ConfirmButton", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "270" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$CancelButton", + "inner_name": "CancelButton", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "281" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiBeacon$Button": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiBeacon" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$Button", + "inner_name": "Button", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "204" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiBeacon$CancelButton": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiBeacon" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$CancelButton", + "inner_name": "CancelButton", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "281" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiBeacon" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton", + "inner_name": "ConfirmButton", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "270" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiBeacon$PowerButton": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiBeacon" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiBeacon$PowerButton", + "inner_name": "PowerButton", + "outer_class": "net/minecraft/client/gui/inventory/GuiBeacon", + "start": "240" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiContainerCreative": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative", + "inner_name": "ContainerCreative", + "outer_class": "net/minecraft/client/gui/inventory/GuiContainerCreative", + "start": "88" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot", + "inner_name": "CreativeSlot", + "outer_class": "net/minecraft/client/gui/inventory/GuiContainerCreative", + "start": "766" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot", + "inner_name": "LockedSlot", + "outer_class": "net/minecraft/client/gui/inventory/GuiContainerCreative", + "start": "854" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiContainerCreative" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative", + "inner_name": "ContainerCreative", + "outer_class": "net/minecraft/client/gui/inventory/GuiContainerCreative", + "start": "88" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiContainerCreative" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot", + "inner_name": "CreativeSlot", + "outer_class": "net/minecraft/client/gui/inventory/GuiContainerCreative", + "start": "766" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiContainerCreative" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot", + "inner_name": "LockedSlot", + "outer_class": "net/minecraft/client/gui/inventory/GuiContainerCreative", + "start": "854" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1", + "start": "68" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1", + "start": "68" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiEditStructure": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/inventory/GuiEditStructure$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/inventory/GuiEditStructure" + } + ] + }, + "net/minecraft/client/gui/inventory/GuiEditStructure$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/inventory/GuiEditStructure" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/gui/inventory/GuiEditStructure$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/gui/inventory/GuiEditStructure" + } + ] + }, + "net/minecraft/client/gui/recipebook/GhostRecipe": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient", + "inner_name": "GhostIngredient", + "outer_class": "net/minecraft/client/gui/recipebook/GhostRecipe", + "start": "102" + } + ] + }, + "net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/recipebook/GhostRecipe" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient", + "inner_name": "GhostIngredient", + "outer_class": "net/minecraft/client/gui/recipebook/GhostRecipe", + "start": "102" + } + ] + }, + "net/minecraft/client/gui/recipebook/GuiRecipeOverlay": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button", + "inner_name": "Button", + "outer_class": "net/minecraft/client/gui/recipebook/GuiRecipeOverlay", + "start": "189" + } + ] + }, + "net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/recipebook/GuiRecipeOverlay" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button", + "inner_name": "Button", + "outer_class": "net/minecraft/client/gui/recipebook/GuiRecipeOverlay", + "start": "189" + } + ] + }, + "net/minecraft/client/gui/spectator/SpectatorMenu": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/spectator/SpectatorMenu$1", + "start": "24" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject", + "inner_name": "EndSpectatorObject", + "outer_class": "net/minecraft/client/gui/spectator/SpectatorMenu", + "start": "123" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject", + "inner_name": "MoveMenuObject", + "outer_class": "net/minecraft/client/gui/spectator/SpectatorMenu", + "start": "154" + } + ] + }, + "net/minecraft/client/gui/spectator/SpectatorMenu$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/spectator/SpectatorMenu" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/spectator/SpectatorMenu$1", + "start": "24" + } + ] + }, + "net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/spectator/SpectatorMenu" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject", + "inner_name": "EndSpectatorObject", + "outer_class": "net/minecraft/client/gui/spectator/SpectatorMenu", + "start": "123" + } + ] + }, + "net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/spectator/SpectatorMenu" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject", + "inner_name": "MoveMenuObject", + "outer_class": "net/minecraft/client/gui/spectator/SpectatorMenu", + "start": "154" + } + ] + }, + "net/minecraft/client/gui/spectator/categories/TeleportToPlayer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1", + "start": "23" + } + ] + }, + "net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/spectator/categories/TeleportToPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1", + "start": "23" + } + ] + }, + "net/minecraft/client/gui/spectator/categories/TeleportToTeam": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject", + "inner_name": "TeamSelectionObject", + "outer_class": "net/minecraft/client/gui/spectator/categories/TeleportToTeam", + "start": "100" + } + ] + }, + "net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/spectator/categories/TeleportToTeam" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject", + "inner_name": "TeamSelectionObject", + "outer_class": "net/minecraft/client/gui/spectator/categories/TeleportToTeam", + "start": "100" + } + ] + }, + "net/minecraft/client/gui/toasts/GuiToast": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/toasts/GuiToast$ToastInstance", + "inner_name": "ToastInstance", + "outer_class": "net/minecraft/client/gui/toasts/GuiToast", + "start": "88" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/toasts/GuiToast$1" + } + ] + }, + "net/minecraft/client/gui/toasts/GuiToast$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/toasts/GuiToast" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/gui/toasts/GuiToast$1" + } + ] + }, + "net/minecraft/client/gui/toasts/GuiToast$ToastInstance": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/toasts/GuiToast" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/gui/toasts/GuiToast$ToastInstance", + "inner_name": "ToastInstance", + "outer_class": "net/minecraft/client/gui/toasts/GuiToast", + "start": "88" + } + ] + }, + "net/minecraft/client/gui/toasts/IToast": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/gui/toasts/IToast$Visibility", + "inner_name": "Visibility", + "outer_class": "net/minecraft/client/gui/toasts/IToast", + "start": "22" + } + ] + }, + "net/minecraft/client/gui/toasts/IToast$Visibility": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/toasts/IToast" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/gui/toasts/IToast$Visibility", + "inner_name": "Visibility", + "outer_class": "net/minecraft/client/gui/toasts/IToast", + "start": "22" + } + ] + }, + "net/minecraft/client/gui/toasts/SystemToast": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/gui/toasts/SystemToast$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/client/gui/toasts/SystemToast", + "start": "55" + } + ] + }, + "net/minecraft/client/gui/toasts/SystemToast$Type": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/toasts/SystemToast" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/gui/toasts/SystemToast$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/client/gui/toasts/SystemToast", + "start": "55" + } + ] + }, + "net/minecraft/client/gui/toasts/TutorialToast": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/gui/toasts/TutorialToast$Icons", + "inner_name": "Icons", + "outer_class": "net/minecraft/client/gui/toasts/TutorialToast", + "start": "71" + } + ] + }, + "net/minecraft/client/gui/toasts/TutorialToast$Icons": { + "enclosingMethod": { + "owner": "net/minecraft/client/gui/toasts/TutorialToast" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/gui/toasts/TutorialToast$Icons", + "inner_name": "Icons", + "outer_class": "net/minecraft/client/gui/toasts/TutorialToast", + "start": "71" + } + ] + }, + "net/minecraft/client/main/GameConfiguration": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$FolderInformation", + "inner_name": "FolderInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration", + "start": "81" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$GameInformation", + "inner_name": "GameInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$UserInformation", + "inner_name": "UserInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$DisplayInformation", + "inner_name": "DisplayInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$ServerInformation", + "inner_name": "ServerInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + } + ] + }, + "net/minecraft/client/main/GameConfiguration$DisplayInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/main/GameConfiguration" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$DisplayInformation", + "inner_name": "DisplayInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + } + ] + }, + "net/minecraft/client/main/GameConfiguration$FolderInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/main/GameConfiguration" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$FolderInformation", + "inner_name": "FolderInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration", + "start": "81" + } + ] + }, + "net/minecraft/client/main/GameConfiguration$GameInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/main/GameConfiguration" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$GameInformation", + "inner_name": "GameInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + } + ] + }, + "net/minecraft/client/main/GameConfiguration$ServerInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/main/GameConfiguration" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$ServerInformation", + "inner_name": "ServerInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + } + ] + }, + "net/minecraft/client/main/GameConfiguration$UserInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/main/GameConfiguration" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/main/GameConfiguration$UserInformation", + "inner_name": "UserInformation", + "outer_class": "net/minecraft/client/main/GameConfiguration" + } + ] + }, + "net/minecraft/client/main/Main": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/main/Main$1", + "start": "75" + }, + { + "inner_class": "net/minecraft/client/main/Main$2", + "start": "116" + } + ] + }, + "net/minecraft/client/main/Main$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/main/Main" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/main/Main$1", + "start": "75" + } + ] + }, + "net/minecraft/client/main/Main$2": { + "enclosingMethod": { + "desc": "([Ljava/lang/String;)V", + "name": "main", + "owner": "net/minecraft/client/main/Main" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/main/Main$2", + "start": "116" + } + ] + }, + "net/minecraft/client/model/ModelBiped": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/model/ModelBiped$ArmPose", + "inner_name": "ArmPose", + "outer_class": "net/minecraft/client/model/ModelBiped", + "start": "15" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/model/ModelBiped$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/model/ModelBiped" + } + ] + }, + "net/minecraft/client/model/ModelBiped$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/model/ModelBiped" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/model/ModelBiped$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/model/ModelBiped" + } + ] + }, + "net/minecraft/client/model/ModelBiped$ArmPose": { + "enclosingMethod": { + "owner": "net/minecraft/client/model/ModelBiped" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/model/ModelBiped$ArmPose", + "inner_name": "ArmPose", + "outer_class": "net/minecraft/client/model/ModelBiped", + "start": "15" + } + ] + }, + "net/minecraft/client/model/ModelParrot": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/model/ModelParrot$State", + "inner_name": "State", + "outer_class": "net/minecraft/client/model/ModelParrot", + "start": "22" + } + ] + }, + "net/minecraft/client/model/ModelParrot$State": { + "enclosingMethod": { + "owner": "net/minecraft/client/model/ModelParrot" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/model/ModelParrot$State", + "inner_name": "State", + "outer_class": "net/minecraft/client/model/ModelParrot", + "start": "22" + } + ] + }, + "net/minecraft/client/multiplayer/ChunkProviderClient": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/ChunkProviderClient$1", + "start": "24" + } + ] + }, + "net/minecraft/client/multiplayer/ChunkProviderClient$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/multiplayer/ChunkProviderClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/ChunkProviderClient$1", + "start": "24" + } + ] + }, + "net/minecraft/client/multiplayer/ClientAdvancementManager": { + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/multiplayer/ClientAdvancementManager$IListener", + "inner_name": "IListener", + "outer_class": "net/minecraft/client/multiplayer/ClientAdvancementManager" + } + ] + }, + "net/minecraft/client/multiplayer/ClientAdvancementManager$IListener": { + "enclosingMethod": { + "owner": "net/minecraft/client/multiplayer/ClientAdvancementManager" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/multiplayer/ClientAdvancementManager$IListener", + "inner_name": "IListener", + "outer_class": "net/minecraft/client/multiplayer/ClientAdvancementManager" + } + ] + }, + "net/minecraft/client/multiplayer/GuiConnecting": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/GuiConnecting$1", + "start": "52" + } + ] + }, + "net/minecraft/client/multiplayer/GuiConnecting$1": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;I)V", + "name": "func_146367_a", + "owner": "net/minecraft/client/multiplayer/GuiConnecting" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/GuiConnecting$1", + "start": "52" + } + ] + }, + "net/minecraft/client/multiplayer/ServerData": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/multiplayer/ServerData$ServerResourceMode", + "inner_name": "ServerResourceMode", + "outer_class": "net/minecraft/client/multiplayer/ServerData", + "start": "95" + } + ] + }, + "net/minecraft/client/multiplayer/ServerData$ServerResourceMode": { + "enclosingMethod": { + "owner": "net/minecraft/client/multiplayer/ServerData" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/multiplayer/ServerData$ServerResourceMode", + "inner_name": "ServerResourceMode", + "outer_class": "net/minecraft/client/multiplayer/ServerData", + "start": "95" + } + ] + }, + "net/minecraft/client/multiplayer/WorldClient": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$1", + "start": "368" + }, + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$2", + "start": "375" + }, + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$3", + "start": "382" + }, + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$4", + "start": "389" + } + ] + }, + "net/minecraft/client/multiplayer/WorldClient$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReportCategory;", + "name": "func_72914_a", + "owner": "net/minecraft/client/multiplayer/WorldClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$1", + "start": "368" + } + ] + }, + "net/minecraft/client/multiplayer/WorldClient$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReportCategory;", + "name": "func_72914_a", + "owner": "net/minecraft/client/multiplayer/WorldClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$2", + "start": "375" + } + ] + }, + "net/minecraft/client/multiplayer/WorldClient$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReportCategory;", + "name": "func_72914_a", + "owner": "net/minecraft/client/multiplayer/WorldClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$3", + "start": "382" + } + ] + }, + "net/minecraft/client/multiplayer/WorldClient$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReportCategory;", + "name": "func_72914_a", + "owner": "net/minecraft/client/multiplayer/WorldClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/multiplayer/WorldClient$4", + "start": "389" + } + ] + }, + "net/minecraft/client/network/LanServerDetector": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/network/LanServerDetector$LanServerList", + "inner_name": "LanServerList", + "outer_class": "net/minecraft/client/network/LanServerDetector", + "start": "26" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/network/LanServerDetector$ThreadLanServerFind", + "inner_name": "ThreadLanServerFind", + "outer_class": "net/minecraft/client/network/LanServerDetector", + "start": "82" + } + ] + }, + "net/minecraft/client/network/LanServerDetector$LanServerList": { + "enclosingMethod": { + "owner": "net/minecraft/client/network/LanServerDetector" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/network/LanServerDetector$LanServerList", + "inner_name": "LanServerList", + "outer_class": "net/minecraft/client/network/LanServerDetector", + "start": "26" + } + ] + }, + "net/minecraft/client/network/LanServerDetector$ThreadLanServerFind": { + "enclosingMethod": { + "owner": "net/minecraft/client/network/LanServerDetector" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/network/LanServerDetector$ThreadLanServerFind", + "inner_name": "ThreadLanServerFind", + "outer_class": "net/minecraft/client/network/LanServerDetector", + "start": "82" + } + ] + }, + "net/minecraft/client/network/NetHandlerLoginClient": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetHandlerLoginClient$1", + "start": "78" + } + ] + }, + "net/minecraft/client/network/NetHandlerLoginClient$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/network/login/server/SPacketEncryptionRequest;)V", + "name": "func_147389_a", + "owner": "net/minecraft/client/network/NetHandlerLoginClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetHandlerLoginClient$1", + "start": "78" + } + ] + }, + "net/minecraft/client/network/NetHandlerPlayClient": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$1", + "start": "1457" + }, + { + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$2", + "start": "1517" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$3", + "inner_name": "3", + "outer_class": "net/minecraft/client/network/NetHandlerPlayClient" + } + ] + }, + "net/minecraft/client/network/NetHandlerPlayClient$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/network/play/server/SPacketResourcePackSend;)V", + "name": "func_175095_a", + "owner": "net/minecraft/client/network/NetHandlerPlayClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$1", + "start": "1457" + }, + { + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$1$1", + "start": "1460" + } + ] + }, + "net/minecraft/client/network/NetHandlerPlayClient$1$1": { + "enclosingMethod": { + "desc": "()V", + "name": "run", + "owner": "net/minecraft/client/network/NetHandlerPlayClient$1" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$1$1", + "start": "1460" + } + ] + }, + "net/minecraft/client/network/NetHandlerPlayClient$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/network/NetHandlerPlayClient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$2", + "start": "1517" + } + ] + }, + "net/minecraft/client/network/NetHandlerPlayClient$3": { + "enclosingMethod": { + "owner": "net/minecraft/client/network/NetHandlerPlayClient" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/network/NetHandlerPlayClient$3", + "inner_name": "3", + "outer_class": "net/minecraft/client/network/NetHandlerPlayClient" + } + ] + }, + "net/minecraft/client/network/NetworkPlayerInfo": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetworkPlayerInfo$1", + "start": "114" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/network/NetworkPlayerInfo$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/network/NetworkPlayerInfo" + } + ] + }, + "net/minecraft/client/network/NetworkPlayerInfo$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178841_j", + "owner": "net/minecraft/client/network/NetworkPlayerInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/NetworkPlayerInfo$1", + "start": "114" + } + ] + }, + "net/minecraft/client/network/NetworkPlayerInfo$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/network/NetworkPlayerInfo" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/network/NetworkPlayerInfo$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/network/NetworkPlayerInfo" + } + ] + }, + "net/minecraft/client/network/ServerPinger": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/ServerPinger$1", + "start": "69" + }, + { + "inner_class": "net/minecraft/client/network/ServerPinger$2", + "start": "173" + } + ] + }, + "net/minecraft/client/network/ServerPinger$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/multiplayer/ServerData;)V", + "name": "func_147224_a", + "owner": "net/minecraft/client/network/ServerPinger" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/ServerPinger$1", + "start": "69" + } + ] + }, + "net/minecraft/client/network/ServerPinger$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/multiplayer/ServerData;)V", + "name": "func_147225_b", + "owner": "net/minecraft/client/network/ServerPinger" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/ServerPinger$2", + "start": "173" + }, + { + "inner_class": "net/minecraft/client/network/ServerPinger$2$1", + "start": "178" + } + ] + }, + "net/minecraft/client/network/ServerPinger$2$1": { + "enclosingMethod": { + "desc": "(Lio/netty/channel/Channel;)V", + "name": "initChannel", + "owner": "net/minecraft/client/network/ServerPinger$2" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/network/ServerPinger$2$1", + "start": "178" + } + ] + }, + "net/minecraft/client/particle/Barrier": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/Barrier$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/Barrier", + "start": "54" + } + ] + }, + "net/minecraft/client/particle/Barrier$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/Barrier" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/Barrier$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/Barrier", + "start": "54" + } + ] + }, + "net/minecraft/client/particle/ParticleBlockDust": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBlockDust$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleBlockDust", + "start": "23" + } + ] + }, + "net/minecraft/client/particle/ParticleBlockDust$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleBlockDust" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBlockDust$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleBlockDust", + "start": "23" + } + ] + }, + "net/minecraft/client/particle/ParticleBreaking": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBreaking$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleBreaking", + "start": "74" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBreaking$SlimeFactory", + "inner_name": "SlimeFactory", + "outer_class": "net/minecraft/client/particle/ParticleBreaking", + "start": "82" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBreaking$SnowballFactory", + "inner_name": "SnowballFactory", + "outer_class": "net/minecraft/client/particle/ParticleBreaking", + "start": "89" + } + ] + }, + "net/minecraft/client/particle/ParticleBreaking$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleBreaking" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBreaking$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleBreaking", + "start": "74" + } + ] + }, + "net/minecraft/client/particle/ParticleBreaking$SlimeFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleBreaking" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBreaking$SlimeFactory", + "inner_name": "SlimeFactory", + "outer_class": "net/minecraft/client/particle/ParticleBreaking", + "start": "82" + } + ] + }, + "net/minecraft/client/particle/ParticleBreaking$SnowballFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleBreaking" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBreaking$SnowballFactory", + "inner_name": "SnowballFactory", + "outer_class": "net/minecraft/client/particle/ParticleBreaking", + "start": "89" + } + ] + }, + "net/minecraft/client/particle/ParticleBubble": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBubble$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleBubble", + "start": "50" + } + ] + }, + "net/minecraft/client/particle/ParticleBubble$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleBubble" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleBubble$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleBubble", + "start": "50" + } + ] + }, + "net/minecraft/client/particle/ParticleCloud": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCloud$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleCloud", + "start": "80" + } + ] + }, + "net/minecraft/client/particle/ParticleCloud$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleCloud" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCloud$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleCloud", + "start": "80" + } + ] + }, + "net/minecraft/client/particle/ParticleCrit": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCrit$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleCrit", + "start": "76" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCrit$MagicFactory", + "inner_name": "MagicFactory", + "outer_class": "net/minecraft/client/particle/ParticleCrit", + "start": "83" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory", + "inner_name": "DamageIndicatorFactory", + "outer_class": "net/minecraft/client/particle/ParticleCrit", + "start": "93" + } + ] + }, + "net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleCrit" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory", + "inner_name": "DamageIndicatorFactory", + "outer_class": "net/minecraft/client/particle/ParticleCrit", + "start": "93" + } + ] + }, + "net/minecraft/client/particle/ParticleCrit$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleCrit" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCrit$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleCrit", + "start": "76" + } + ] + }, + "net/minecraft/client/particle/ParticleCrit$MagicFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleCrit" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleCrit$MagicFactory", + "inner_name": "MagicFactory", + "outer_class": "net/minecraft/client/particle/ParticleCrit", + "start": "83" + } + ] + }, + "net/minecraft/client/particle/ParticleDigging": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDigging$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleDigging", + "start": "105" + } + ] + }, + "net/minecraft/client/particle/ParticleDigging$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleDigging" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDigging$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleDigging", + "start": "105" + } + ] + }, + "net/minecraft/client/particle/ParticleDragonBreath": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDragonBreath$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleDragonBreath", + "start": "86" + } + ] + }, + "net/minecraft/client/particle/ParticleDragonBreath$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleDragonBreath" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDragonBreath$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleDragonBreath", + "start": "86" + } + ] + }, + "net/minecraft/client/particle/ParticleDrip": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDrip$WaterFactory", + "inner_name": "WaterFactory", + "outer_class": "net/minecraft/client/particle/ParticleDrip", + "start": "125" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDrip$LavaFactory", + "inner_name": "LavaFactory", + "outer_class": "net/minecraft/client/particle/ParticleDrip", + "start": "132" + } + ] + }, + "net/minecraft/client/particle/ParticleDrip$LavaFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleDrip" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDrip$LavaFactory", + "inner_name": "LavaFactory", + "outer_class": "net/minecraft/client/particle/ParticleDrip", + "start": "132" + } + ] + }, + "net/minecraft/client/particle/ParticleDrip$WaterFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleDrip" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleDrip$WaterFactory", + "inner_name": "WaterFactory", + "outer_class": "net/minecraft/client/particle/ParticleDrip", + "start": "125" + } + ] + }, + "net/minecraft/client/particle/ParticleEnchantmentTable": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable", + "inner_name": "EnchantmentTable", + "outer_class": "net/minecraft/client/particle/ParticleEnchantmentTable", + "start": "95" + } + ] + }, + "net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleEnchantmentTable" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable", + "inner_name": "EnchantmentTable", + "outer_class": "net/minecraft/client/particle/ParticleEnchantmentTable", + "start": "95" + } + ] + }, + "net/minecraft/client/particle/ParticleEndRod": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleEndRod$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleEndRod", + "start": "29" + } + ] + }, + "net/minecraft/client/particle/ParticleEndRod$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleEndRod" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleEndRod$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleEndRod", + "start": "29" + } + ] + }, + "net/minecraft/client/particle/ParticleExplosion": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleExplosion$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleExplosion", + "start": "48" + } + ] + }, + "net/minecraft/client/particle/ParticleExplosion$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleExplosion" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleExplosion$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleExplosion", + "start": "48" + } + ] + }, + "net/minecraft/client/particle/ParticleExplosionHuge": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleExplosionHuge$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleExplosionHuge", + "start": "44" + } + ] + }, + "net/minecraft/client/particle/ParticleExplosionHuge$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleExplosionHuge" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleExplosionHuge$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleExplosionHuge", + "start": "44" + } + ] + }, + "net/minecraft/client/particle/ParticleExplosionLarge": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleExplosionLarge$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleExplosionLarge", + "start": "97" + } + ] + }, + "net/minecraft/client/particle/ParticleExplosionLarge$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleExplosionLarge" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleExplosionLarge$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleExplosionLarge", + "start": "97" + } + ] + }, + "net/minecraft/client/particle/ParticleFallingDust": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFallingDust$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFallingDust", + "start": "81" + } + ] + }, + "net/minecraft/client/particle/ParticleFallingDust$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFallingDust" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFallingDust$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFallingDust", + "start": "81" + } + ] + }, + "net/minecraft/client/particle/ParticleFirework": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Starter", + "inner_name": "Starter", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "57" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Spark", + "inner_name": "Spark", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "300" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Overlay", + "inner_name": "Overlay", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "349" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "374" + } + ] + }, + "net/minecraft/client/particle/ParticleFirework$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFirework" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "374" + } + ] + }, + "net/minecraft/client/particle/ParticleFirework$Overlay": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFirework" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Overlay", + "inner_name": "Overlay", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "349" + } + ] + }, + "net/minecraft/client/particle/ParticleFirework$Spark": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFirework" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Spark", + "inner_name": "Spark", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "300" + } + ] + }, + "net/minecraft/client/particle/ParticleFirework$Starter": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFirework" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFirework$Starter", + "inner_name": "Starter", + "outer_class": "net/minecraft/client/particle/ParticleFirework", + "start": "57" + } + ] + }, + "net/minecraft/client/particle/ParticleFlame": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFlame$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFlame", + "start": "90" + } + ] + }, + "net/minecraft/client/particle/ParticleFlame$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFlame" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFlame$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFlame", + "start": "90" + } + ] + }, + "net/minecraft/client/particle/ParticleFootStep": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFootStep$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFootStep", + "start": "81" + } + ] + }, + "net/minecraft/client/particle/ParticleFootStep$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleFootStep" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleFootStep$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleFootStep", + "start": "81" + } + ] + }, + "net/minecraft/client/particle/ParticleHeart": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleHeart$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleHeart", + "start": "68" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory", + "inner_name": "AngryVillagerFactory", + "outer_class": "net/minecraft/client/particle/ParticleHeart", + "start": "75" + } + ] + }, + "net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleHeart" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory", + "inner_name": "AngryVillagerFactory", + "outer_class": "net/minecraft/client/particle/ParticleHeart", + "start": "75" + } + ] + }, + "net/minecraft/client/particle/ParticleHeart$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleHeart" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleHeart$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleHeart", + "start": "68" + } + ] + }, + "net/minecraft/client/particle/ParticleLava": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleLava$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleLava", + "start": "78" + } + ] + }, + "net/minecraft/client/particle/ParticleLava$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleLava" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleLava$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleLava", + "start": "78" + } + ] + }, + "net/minecraft/client/particle/ParticleManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/particle/ParticleManager$1", + "start": "214" + }, + { + "inner_class": "net/minecraft/client/particle/ParticleManager$2", + "start": "221" + }, + { + "inner_class": "net/minecraft/client/particle/ParticleManager$3", + "start": "294" + }, + { + "inner_class": "net/minecraft/client/particle/ParticleManager$4", + "start": "301" + } + ] + }, + "net/minecraft/client/particle/ParticleManager$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/particle/Particle;)V", + "name": "func_178923_d", + "owner": "net/minecraft/client/particle/ParticleManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/particle/ParticleManager$1", + "start": "214" + } + ] + }, + "net/minecraft/client/particle/ParticleManager$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/particle/Particle;)V", + "name": "func_178923_d", + "owner": "net/minecraft/client/particle/ParticleManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/particle/ParticleManager$2", + "start": "221" + } + ] + }, + "net/minecraft/client/particle/ParticleManager$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/Entity;F)V", + "name": "func_78874_a", + "owner": "net/minecraft/client/particle/ParticleManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/particle/ParticleManager$3", + "start": "294" + } + ] + }, + "net/minecraft/client/particle/ParticleManager$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/Entity;F)V", + "name": "func_78874_a", + "owner": "net/minecraft/client/particle/ParticleManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/particle/ParticleManager$4", + "start": "301" + } + ] + }, + "net/minecraft/client/particle/ParticleMobAppearance": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleMobAppearance$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleMobAppearance", + "start": "91" + } + ] + }, + "net/minecraft/client/particle/ParticleMobAppearance$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleMobAppearance" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleMobAppearance$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleMobAppearance", + "start": "91" + } + ] + }, + "net/minecraft/client/particle/ParticleNote": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleNote$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleNote", + "start": "72" + } + ] + }, + "net/minecraft/client/particle/ParticleNote$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleNote" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleNote$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleNote", + "start": "72" + } + ] + }, + "net/minecraft/client/particle/ParticlePortal": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticlePortal$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticlePortal", + "start": "101" + } + ] + }, + "net/minecraft/client/particle/ParticlePortal$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticlePortal" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticlePortal$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticlePortal", + "start": "101" + } + ] + }, + "net/minecraft/client/particle/ParticleRain": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleRain$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleRain", + "start": "71" + } + ] + }, + "net/minecraft/client/particle/ParticleRain$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleRain" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleRain$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleRain", + "start": "71" + } + ] + }, + "net/minecraft/client/particle/ParticleRedstone": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleRedstone$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleRedstone", + "start": "75" + } + ] + }, + "net/minecraft/client/particle/ParticleRedstone$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleRedstone" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleRedstone$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleRedstone", + "start": "75" + } + ] + }, + "net/minecraft/client/particle/ParticleSmokeLarge": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSmokeLarge$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSmokeLarge", + "start": "13" + } + ] + }, + "net/minecraft/client/particle/ParticleSmokeLarge$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSmokeLarge" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSmokeLarge$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSmokeLarge", + "start": "13" + } + ] + }, + "net/minecraft/client/particle/ParticleSmokeNormal": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSmokeNormal$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSmokeNormal", + "start": "76" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/particle/ParticleSmokeNormal$1" + } + ] + }, + "net/minecraft/client/particle/ParticleSmokeNormal$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSmokeNormal" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/particle/ParticleSmokeNormal$1" + } + ] + }, + "net/minecraft/client/particle/ParticleSmokeNormal$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSmokeNormal" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSmokeNormal$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSmokeNormal", + "start": "76" + } + ] + }, + "net/minecraft/client/particle/ParticleSnowShovel": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSnowShovel$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSnowShovel", + "start": "72" + } + ] + }, + "net/minecraft/client/particle/ParticleSnowShovel$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSnowShovel" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSnowShovel$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSnowShovel", + "start": "72" + } + ] + }, + "net/minecraft/client/particle/ParticleSpell": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "65" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$MobFactory", + "inner_name": "MobFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "72" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$AmbientMobFactory", + "inner_name": "AmbientMobFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "81" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$WitchFactory", + "inner_name": "WitchFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "91" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$InstantFactory", + "inner_name": "InstantFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "102" + } + ] + }, + "net/minecraft/client/particle/ParticleSpell$AmbientMobFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSpell" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$AmbientMobFactory", + "inner_name": "AmbientMobFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "81" + } + ] + }, + "net/minecraft/client/particle/ParticleSpell$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSpell" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "65" + } + ] + }, + "net/minecraft/client/particle/ParticleSpell$InstantFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSpell" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$InstantFactory", + "inner_name": "InstantFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "102" + } + ] + }, + "net/minecraft/client/particle/ParticleSpell$MobFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSpell" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$MobFactory", + "inner_name": "MobFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "72" + } + ] + }, + "net/minecraft/client/particle/ParticleSpell$WitchFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSpell" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpell$WitchFactory", + "inner_name": "WitchFactory", + "outer_class": "net/minecraft/client/particle/ParticleSpell", + "start": "91" + } + ] + }, + "net/minecraft/client/particle/ParticleSpit": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpit$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSpit", + "start": "20" + } + ] + }, + "net/minecraft/client/particle/ParticleSpit$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSpit" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSpit$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSpit", + "start": "20" + } + ] + }, + "net/minecraft/client/particle/ParticleSplash": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSplash$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSplash", + "start": "20" + } + ] + }, + "net/minecraft/client/particle/ParticleSplash$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSplash" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSplash$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSplash", + "start": "20" + } + ] + }, + "net/minecraft/client/particle/ParticleSuspend": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSuspend$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSuspend", + "start": "46" + } + ] + }, + "net/minecraft/client/particle/ParticleSuspend$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSuspend" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSuspend$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSuspend", + "start": "46" + } + ] + }, + "net/minecraft/client/particle/ParticleSuspendedTown": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSuspendedTown$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSuspendedTown", + "start": "50" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory", + "inner_name": "HappyVillagerFactory", + "outer_class": "net/minecraft/client/particle/ParticleSuspendedTown", + "start": "57" + } + ] + }, + "net/minecraft/client/particle/ParticleSuspendedTown$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSuspendedTown" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSuspendedTown$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSuspendedTown", + "start": "50" + } + ] + }, + "net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSuspendedTown" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory", + "inner_name": "HappyVillagerFactory", + "outer_class": "net/minecraft/client/particle/ParticleSuspendedTown", + "start": "57" + } + ] + }, + "net/minecraft/client/particle/ParticleSweepAttack": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSweepAttack$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSweepAttack", + "start": "98" + } + ] + }, + "net/minecraft/client/particle/ParticleSweepAttack$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleSweepAttack" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleSweepAttack$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleSweepAttack", + "start": "98" + } + ] + }, + "net/minecraft/client/particle/ParticleTotem": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleTotem$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleTotem", + "start": "29" + } + ] + }, + "net/minecraft/client/particle/ParticleTotem$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleTotem" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleTotem$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleTotem", + "start": "29" + } + ] + }, + "net/minecraft/client/particle/ParticleWaterWake": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleWaterWake$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleWaterWake", + "start": "51" + } + ] + }, + "net/minecraft/client/particle/ParticleWaterWake$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/client/particle/ParticleWaterWake" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/particle/ParticleWaterWake$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/client/particle/ParticleWaterWake", + "start": "51" + } + ] + }, + "net/minecraft/client/renderer/BannerTextures": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/BannerTextures$Cache", + "inner_name": "Cache", + "outer_class": "net/minecraft/client/renderer/BannerTextures", + "start": "45" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/BannerTextures$CacheEntry", + "inner_name": "CacheEntry", + "outer_class": "net/minecraft/client/renderer/BannerTextures" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/BannerTextures$1" + } + ] + }, + "net/minecraft/client/renderer/BannerTextures$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BannerTextures" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/BannerTextures$1" + } + ] + }, + "net/minecraft/client/renderer/BannerTextures$Cache": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BannerTextures" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/BannerTextures$Cache", + "inner_name": "Cache", + "outer_class": "net/minecraft/client/renderer/BannerTextures", + "start": "45" + } + ] + }, + "net/minecraft/client/renderer/BannerTextures$CacheEntry": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BannerTextures" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/BannerTextures$CacheEntry", + "inner_name": "CacheEntry", + "outer_class": "net/minecraft/client/renderer/BannerTextures" + } + ] + }, + "net/minecraft/client/renderer/BlockModelRenderer": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations", + "inner_name": "VertexTranslations", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "303" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace", + "inner_name": "AmbientOcclusionFace", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "339" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$Orientation", + "inner_name": "Orientation", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "507" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo", + "inner_name": "EnumNeighborInfo", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "528" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer" + } + ] + }, + "net/minecraft/client/renderer/BlockModelRenderer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelRenderer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer" + } + ] + }, + "net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelRenderer" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace", + "inner_name": "AmbientOcclusionFace", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "339" + } + ] + }, + "net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelRenderer" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo", + "inner_name": "EnumNeighborInfo", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "528" + } + ] + }, + "net/minecraft/client/renderer/BlockModelRenderer$Orientation": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelRenderer" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$Orientation", + "inner_name": "Orientation", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "507" + } + ] + }, + "net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelRenderer" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations", + "inner_name": "VertexTranslations", + "outer_class": "net/minecraft/client/renderer/BlockModelRenderer", + "start": "303" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$1", + "start": "279" + }, + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$2", + "start": "299" + }, + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$3", + "start": "306" + }, + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$4", + "start": "318" + }, + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$5", + "start": "330" + }, + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$6", + "start": "344" + }, + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$7", + "start": "357" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$8", + "inner_name": "8", + "outer_class": "net/minecraft/client/renderer/BlockModelShapes" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178119_d", + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$1", + "start": "279" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$2", + "start": "299" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$3": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178119_d", + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$3", + "start": "306" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$4": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178119_d", + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$4", + "start": "318" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$5": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178119_d", + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$5", + "start": "330" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$6": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178119_d", + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$6", + "start": "344" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$7": { + "enclosingMethod": { + "desc": "()V", + "name": "func_178119_d", + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$7", + "start": "357" + } + ] + }, + "net/minecraft/client/renderer/BlockModelShapes$8": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockModelShapes" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BlockModelShapes$8", + "inner_name": "8", + "outer_class": "net/minecraft/client/renderer/BlockModelShapes" + } + ] + }, + "net/minecraft/client/renderer/BlockRendererDispatcher": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BlockRendererDispatcher$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/BlockRendererDispatcher" + } + ] + }, + "net/minecraft/client/renderer/BlockRendererDispatcher$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BlockRendererDispatcher" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BlockRendererDispatcher$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/BlockRendererDispatcher" + } + ] + }, + "net/minecraft/client/renderer/BufferBuilder": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BufferBuilder$1", + "start": "90" + }, + { + "access": "21", + "inner_class": "net/minecraft/client/renderer/BufferBuilder$State", + "inner_name": "State", + "outer_class": "net/minecraft/client/renderer/BufferBuilder", + "start": "552" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BufferBuilder$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/renderer/BufferBuilder" + } + ] + }, + "net/minecraft/client/renderer/BufferBuilder$1": { + "enclosingMethod": { + "desc": "(FFF)V", + "name": "func_181674_a", + "owner": "net/minecraft/client/renderer/BufferBuilder" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/BufferBuilder$1", + "start": "90" + } + ] + }, + "net/minecraft/client/renderer/BufferBuilder$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BufferBuilder" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/BufferBuilder$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/renderer/BufferBuilder" + } + ] + }, + "net/minecraft/client/renderer/BufferBuilder$State": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/BufferBuilder" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/renderer/BufferBuilder$State", + "inner_name": "State", + "outer_class": "net/minecraft/client/renderer/BufferBuilder", + "start": "552" + } + ] + }, + "net/minecraft/client/renderer/EntityRenderer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$1", + "start": "453" + }, + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$2", + "start": "1084" + }, + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$3", + "start": "1091" + }, + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$4", + "start": "1098" + } + ] + }, + "net/minecraft/client/renderer/EntityRenderer$1": { + "enclosingMethod": { + "desc": "(F)V", + "name": "func_78473_a", + "owner": "net/minecraft/client/renderer/EntityRenderer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$1", + "start": "453" + } + ] + }, + "net/minecraft/client/renderer/EntityRenderer$2": { + "enclosingMethod": { + "desc": "(FJ)V", + "name": "func_181560_a", + "owner": "net/minecraft/client/renderer/EntityRenderer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$2", + "start": "1084" + } + ] + }, + "net/minecraft/client/renderer/EntityRenderer$3": { + "enclosingMethod": { + "desc": "(FJ)V", + "name": "func_181560_a", + "owner": "net/minecraft/client/renderer/EntityRenderer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$3", + "start": "1091" + } + ] + }, + "net/minecraft/client/renderer/EntityRenderer$4": { + "enclosingMethod": { + "desc": "(FJ)V", + "name": "func_181560_a", + "owner": "net/minecraft/client/renderer/EntityRenderer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/EntityRenderer$4", + "start": "1098" + } + ] + }, + "net/minecraft/client/renderer/EnumFaceDirection": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/EnumFaceDirection$VertexInformation", + "inner_name": "VertexInformation", + "outer_class": "net/minecraft/client/renderer/EnumFaceDirection" + }, + { + "access": "39", + "inner_class": "net/minecraft/client/renderer/EnumFaceDirection$Constants", + "inner_name": "Constants", + "outer_class": "net/minecraft/client/renderer/EnumFaceDirection" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/EnumFaceDirection$1" + } + ] + }, + "net/minecraft/client/renderer/EnumFaceDirection$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/EnumFaceDirection" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/EnumFaceDirection$1" + } + ] + }, + "net/minecraft/client/renderer/EnumFaceDirection$Constants": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/EnumFaceDirection" + }, + "innerClasses": [ + { + "access": "39", + "inner_class": "net/minecraft/client/renderer/EnumFaceDirection$Constants", + "inner_name": "Constants", + "outer_class": "net/minecraft/client/renderer/EnumFaceDirection" + } + ] + }, + "net/minecraft/client/renderer/EnumFaceDirection$VertexInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/EnumFaceDirection" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/EnumFaceDirection$VertexInformation", + "inner_name": "VertexInformation", + "outer_class": "net/minecraft/client/renderer/EnumFaceDirection" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$FogMode", + "inner_name": "FogMode", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "240" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$CullFace", + "inner_name": "CullFace", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "301" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$LogicOp", + "inner_name": "LogicOp", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "362" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TexGen", + "inner_name": "TexGen", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "948" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$BooleanState", + "inner_name": "BooleanState", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "986" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$SourceFactor", + "inner_name": "SourceFactor", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "1005" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$DestFactor", + "inner_name": "DestFactor", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "1029" + }, + { + "access": "4429", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile", + "inner_name": "Profile", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "1060" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ColorLogicState", + "inner_name": "ColorLogicState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ClearState", + "inner_name": "ClearState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TexGenCoord", + "inner_name": "TexGenCoord", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$StencilState", + "inner_name": "StencilState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$AlphaState", + "inner_name": "AlphaState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$FogState", + "inner_name": "FogState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ColorMaterialState", + "inner_name": "ColorMaterialState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$PolygonOffsetState", + "inner_name": "PolygonOffsetState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$DepthState", + "inner_name": "DepthState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TextureState", + "inner_name": "TextureState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$CullState", + "inner_name": "CullState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Color", + "inner_name": "Color", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$BlendState", + "inner_name": "BlendState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/GlStateManager$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TexGenState", + "inner_name": "TexGenState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$StencilFunc", + "inner_name": "StencilFunc", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ColorMask", + "inner_name": "ColorMask", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/GlStateManager$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$AlphaState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$AlphaState", + "inner_name": "AlphaState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$BlendState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$BlendState", + "inner_name": "BlendState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$BooleanState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$BooleanState", + "inner_name": "BooleanState", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "986" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$ClearState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ClearState", + "inner_name": "ClearState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$Color": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Color", + "inner_name": "Color", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$ColorLogicState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ColorLogicState", + "inner_name": "ColorLogicState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$ColorMask": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ColorMask", + "inner_name": "ColorMask", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$ColorMaterialState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$ColorMaterialState", + "inner_name": "ColorMaterialState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$CullFace": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$CullFace", + "inner_name": "CullFace", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "301" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$CullState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$CullState", + "inner_name": "CullState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$DepthState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$DepthState", + "inner_name": "DepthState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$DestFactor": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$DestFactor", + "inner_name": "DestFactor", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "1029" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$FogMode": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$FogMode", + "inner_name": "FogMode", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "240" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$FogState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$FogState", + "inner_name": "FogState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$LogicOp": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$LogicOp", + "inner_name": "LogicOp", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "362" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$PolygonOffsetState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$PolygonOffsetState", + "inner_name": "PolygonOffsetState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$Profile": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4429", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile", + "inner_name": "Profile", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "1060" + }, + { + "access": "4000", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile$1", + "start": "1064" + }, + { + "access": "4000", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile$2", + "start": "1167" + }, + { + "access": "4000", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile$3", + "start": "1179" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$Profile$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager$Profile" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile$1", + "start": "1064" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$Profile$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager$Profile" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile$2", + "start": "1167" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$Profile$3": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager$Profile" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/client/renderer/GlStateManager$Profile$3", + "start": "1179" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$SourceFactor": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$SourceFactor", + "inner_name": "SourceFactor", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "1005" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$StencilFunc": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$StencilFunc", + "inner_name": "StencilFunc", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$StencilState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$StencilState", + "inner_name": "StencilState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$TexGen": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TexGen", + "inner_name": "TexGen", + "outer_class": "net/minecraft/client/renderer/GlStateManager", + "start": "948" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$TexGenCoord": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TexGenCoord", + "inner_name": "TexGenCoord", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$TexGenState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TexGenState", + "inner_name": "TexGenState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/GlStateManager$TextureState": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/GlStateManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/GlStateManager$TextureState", + "inner_name": "TextureState", + "outer_class": "net/minecraft/client/renderer/GlStateManager" + } + ] + }, + "net/minecraft/client/renderer/ItemRenderer": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/ItemRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/ItemRenderer" + } + ] + }, + "net/minecraft/client/renderer/ItemRenderer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/ItemRenderer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/ItemRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/ItemRenderer" + } + ] + }, + "net/minecraft/client/renderer/OpenGlHelper": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/renderer/OpenGlHelper$FboMode", + "inner_name": "FboMode", + "outer_class": "net/minecraft/client/renderer/OpenGlHelper", + "start": "50" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/OpenGlHelper$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/OpenGlHelper" + } + ] + }, + "net/minecraft/client/renderer/OpenGlHelper$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/OpenGlHelper" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/OpenGlHelper$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/OpenGlHelper" + } + ] + }, + "net/minecraft/client/renderer/OpenGlHelper$FboMode": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/OpenGlHelper" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/renderer/OpenGlHelper$FboMode", + "inner_name": "FboMode", + "outer_class": "net/minecraft/client/renderer/OpenGlHelper", + "start": "50" + } + ] + }, + "net/minecraft/client/renderer/RenderGlobal": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderGlobal$1", + "start": "2301" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation", + "inner_name": "ContainerLocalRenderInformation", + "outer_class": "net/minecraft/client/renderer/RenderGlobal", + "start": "2682" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/RenderGlobal$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/renderer/RenderGlobal" + } + ] + }, + "net/minecraft/client/renderer/RenderGlobal$1": { + "enclosingMethod": { + "desc": "(IZZDDDDDD[I)V", + "name": "func_190570_a", + "owner": "net/minecraft/client/renderer/RenderGlobal" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderGlobal$1", + "start": "2301" + } + ] + }, + "net/minecraft/client/renderer/RenderGlobal$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderGlobal" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/RenderGlobal$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/renderer/RenderGlobal" + } + ] + }, + "net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderGlobal" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation", + "inner_name": "ContainerLocalRenderInformation", + "outer_class": "net/minecraft/client/renderer/RenderGlobal", + "start": "2682" + } + ] + }, + "net/minecraft/client/renderer/RenderItem": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$1", + "start": "367" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$2", + "start": "374" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$3", + "start": "381" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$4", + "start": "388" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$5", + "start": "1034" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$6", + "start": "1079" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$7", + "start": "1086" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$8", + "start": "1093" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$9", + "start": "1123" + }, + { + "inner_class": "net/minecraft/client/renderer/RenderItem$10", + "start": "1130" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;II)V", + "name": "func_184391_a", + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$1", + "start": "367" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$10": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$10", + "start": "1130" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;II)V", + "name": "func_184391_a", + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$2", + "start": "374" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;II)V", + "name": "func_184391_a", + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$3", + "start": "381" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/EntityLivingBase;Lnet/minecraft/item/ItemStack;II)V", + "name": "func_184391_a", + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$4", + "start": "388" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$5": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$5", + "start": "1034" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$6": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$6", + "start": "1079" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$7": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$7", + "start": "1086" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$8": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$8", + "start": "1093" + } + ] + }, + "net/minecraft/client/renderer/RenderItem$9": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/RenderItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/RenderItem$9", + "start": "1123" + } + ] + }, + "net/minecraft/client/renderer/ThreadDownloadImageData": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/ThreadDownloadImageData$1", + "start": "100" + } + ] + }, + "net/minecraft/client/renderer/ThreadDownloadImageData$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_152433_a", + "owner": "net/minecraft/client/renderer/ThreadDownloadImageData" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/ThreadDownloadImageData$1", + "start": "100" + } + ] + }, + "net/minecraft/client/renderer/WorldVertexBufferUploader": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/WorldVertexBufferUploader$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/WorldVertexBufferUploader" + } + ] + }, + "net/minecraft/client/renderer/WorldVertexBufferUploader$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/WorldVertexBufferUploader" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/WorldVertexBufferUploader$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/WorldVertexBufferUploader" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockFaceUV": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/BlockFaceUV", + "start": "55" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/BlockFaceUV" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/BlockFaceUV", + "start": "55" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockPart": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/BlockPart$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/BlockPart", + "start": "67" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/BlockPart$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/block/model/BlockPart" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockPart$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/BlockPart" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/BlockPart$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/block/model/BlockPart" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockPart$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/BlockPart" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/BlockPart$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/BlockPart", + "start": "67" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockPartFace": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/BlockPartFace", + "start": "30" + } + ] + }, + "net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/BlockPartFace" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/BlockPartFace", + "start": "30" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery": { + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$Rotation", + "inner_name": "Rotation", + "outer_class": "net/minecraft/client/renderer/block/model/FaceBakery", + "start": "276" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$1", + "start": "290" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$2", + "start": "296" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$3", + "start": "302" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$4", + "start": "308" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$5", + "inner_name": "5", + "outer_class": "net/minecraft/client/renderer/block/model/FaceBakery" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/FaceBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$1", + "start": "290" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/FaceBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$2", + "start": "296" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery$3": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/FaceBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$3", + "start": "302" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery$4": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/FaceBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$4", + "start": "308" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery$5": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/FaceBakery" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$5", + "inner_name": "5", + "outer_class": "net/minecraft/client/renderer/block/model/FaceBakery" + } + ] + }, + "net/minecraft/client/renderer/block/model/FaceBakery$Rotation": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/FaceBakery" + }, + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/client/renderer/block/model/FaceBakery$Rotation", + "inner_name": "Rotation", + "outer_class": "net/minecraft/client/renderer/block/model/FaceBakery", + "start": "276" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemCameraTransforms": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType", + "inner_name": "TransformType", + "outer_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms", + "start": "135" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms", + "start": "147" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemCameraTransforms$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemCameraTransforms" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemCameraTransforms" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms", + "start": "147" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemCameraTransforms" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType", + "inner_name": "TransformType", + "outer_class": "net/minecraft/client/renderer/block/model/ItemCameraTransforms", + "start": "135" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemModelGenerator": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing", + "inner_name": "SpanFacing", + "outer_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator", + "start": "224" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator$Span", + "inner_name": "Span", + "outer_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator", + "start": "273" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemModelGenerator$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemModelGenerator" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemModelGenerator$Span": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemModelGenerator" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator$Span", + "inner_name": "Span", + "outer_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator", + "start": "273" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemModelGenerator" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing", + "inner_name": "SpanFacing", + "outer_class": "net/minecraft/client/renderer/block/model/ItemModelGenerator", + "start": "224" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemOverride": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemOverride$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ItemOverride", + "start": "46" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemOverride$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemOverride" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemOverride$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ItemOverride", + "start": "46" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemTransformVec3f": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ItemTransformVec3f", + "start": "52" + } + ] + }, + "net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ItemTransformVec3f" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ItemTransformVec3f", + "start": "52" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBakery": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/ModelBakery$1", + "start": "220" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/ModelBakery$2", + "start": "594" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/ModelBakery$3", + "start": "756" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBakery$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_188640_b", + "owner": "net/minecraft/client/renderer/block/model/ModelBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/ModelBakery$1", + "start": "220" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBakery$2": { + "enclosingMethod": { + "desc": "()Ljava/util/Set;", + "name": "func_177575_g", + "owner": "net/minecraft/client/renderer/block/model/ModelBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/ModelBakery$2", + "start": "594" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBakery$3": { + "enclosingMethod": { + "desc": "()V", + "name": "func_177572_j", + "owner": "net/minecraft/client/renderer/block/model/ModelBakery" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/ModelBakery$3", + "start": "756" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlock": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlock", + "start": "210" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$1" + }, + { + "access": "30", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep", + "inner_name": "Bookkeep", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlock" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$LoopException", + "inner_name": "LoopException", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlock" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlock$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ModelBlock" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$1" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ModelBlock" + }, + "innerClasses": [ + { + "access": "30", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep", + "inner_name": "Bookkeep", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlock" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlock$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ModelBlock" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlock", + "start": "210" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlock$LoopException": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ModelBlock" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlock$LoopException", + "inner_name": "LoopException", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlock" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlockDefinition": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition", + "start": "117" + }, + { + "access": "21", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException", + "inner_name": "MissingVariantException", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ModelBlockDefinition" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition", + "start": "117" + } + ] + }, + "net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/ModelBlockDefinition" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException", + "inner_name": "MissingVariantException", + "outer_class": "net/minecraft/client/renderer/block/model/ModelBlockDefinition" + } + ] + }, + "net/minecraft/client/renderer/block/model/MultipartBakedModel": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/model/MultipartBakedModel", + "start": "85" + } + ] + }, + "net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/MultipartBakedModel" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/model/MultipartBakedModel", + "start": "85" + } + ] + }, + "net/minecraft/client/renderer/block/model/SimpleBakedModel": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/model/SimpleBakedModel", + "start": "113" + } + ] + }, + "net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/SimpleBakedModel" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/model/SimpleBakedModel", + "start": "113" + } + ] + }, + "net/minecraft/client/renderer/block/model/Variant": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/Variant$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/Variant", + "start": "75" + } + ] + }, + "net/minecraft/client/renderer/block/model/Variant$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/Variant" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/Variant$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/Variant", + "start": "75" + } + ] + }, + "net/minecraft/client/renderer/block/model/VariantList": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/VariantList$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/VariantList", + "start": "44" + } + ] + }, + "net/minecraft/client/renderer/block/model/VariantList$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/VariantList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/VariantList$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/VariantList", + "start": "44" + } + ] + }, + "net/minecraft/client/renderer/block/model/WeightedBakedModel": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel", + "start": "71" + }, + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel", + "inner_name": "WeightedModel", + "outer_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel", + "start": "86" + } + ] + }, + "net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/WeightedBakedModel" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel", + "start": "71" + } + ] + }, + "net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/WeightedBakedModel" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel", + "inner_name": "WeightedModel", + "outer_class": "net/minecraft/client/renderer/block/model/WeightedBakedModel", + "start": "86" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionAnd": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1", + "start": "22" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ConditionAnd" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1", + "start": "22" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionOr": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionOr$1", + "start": "23" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionOr$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ConditionOr" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionOr$1", + "start": "23" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1", + "start": "50" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2", + "start": "68" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/block/state/BlockStateContainer;)Lcom/google/common/base/Predicate;", + "name": "func_188118_a", + "owner": "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1", + "start": "50" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2", + "start": "68" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ICondition": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$1", + "start": "14" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$2", + "start": "25" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ICondition$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ICondition" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$1", + "start": "14" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$1$1", + "start": "14" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ICondition$1$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ICondition$1" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$1$1", + "start": "14" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ICondition$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ICondition" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$2$1", + "start": "25" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$2", + "start": "25" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/ICondition$2$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/ICondition$2" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/ICondition$2$1", + "start": "25" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/Multipart": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/multipart/Multipart", + "start": "71" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/Multipart" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/multipart/Multipart", + "start": "71" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/Selector": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/multipart/Selector", + "start": "66" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/Selector" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer", + "inner_name": "Deserializer", + "outer_class": "net/minecraft/client/renderer/block/model/multipart/Selector", + "start": "66" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1", + "start": "67" + }, + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2", + "start": "75" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1", + "start": "67" + } + ] + }, + "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2", + "start": "75" + } + ] + }, + "net/minecraft/client/renderer/block/statemap/StateMap": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/statemap/StateMap$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/statemap/StateMap", + "start": "62" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/block/statemap/StateMap$1" + } + ] + }, + "net/minecraft/client/renderer/block/statemap/StateMap$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/statemap/StateMap" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/renderer/block/statemap/StateMap$1" + } + ] + }, + "net/minecraft/client/renderer/block/statemap/StateMap$Builder": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/block/statemap/StateMap" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/block/statemap/StateMap$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/client/renderer/block/statemap/StateMap", + "start": "62" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator", + "start": "110" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status", + "inner_name": "Status", + "outer_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator", + "start": "116" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status", + "inner_name": "Status", + "outer_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator", + "start": "116" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator", + "start": "110" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1", + "start": "122" + }, + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2", + "start": "184" + }, + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3", + "start": "224" + }, + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload", + "inner_name": "PendingUpload", + "outer_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher", + "start": "284" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/chunk/RenderChunk;)Z", + "name": "func_178507_a", + "owner": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1", + "start": "122" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/chunk/RenderChunk;)Z", + "name": "func_178509_c", + "owner": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2", + "start": "184" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/BlockRenderLayer;Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/client/renderer/chunk/RenderChunk;Lnet/minecraft/client/renderer/chunk/CompiledChunk;D)Lcom/google/common/util/concurrent/ListenableFuture;", + "name": "func_188245_a", + "owner": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3", + "start": "224" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload", + "inner_name": "PendingUpload", + "outer_class": "net/minecraft/client/renderer/chunk/ChunkRenderDispatcher", + "start": "284" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderWorker": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderWorker$1", + "start": "137" + }, + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderWorker$2", + "start": "141" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderWorker$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator;)V", + "name": "func_178474_a", + "owner": "net/minecraft/client/renderer/chunk/ChunkRenderWorker" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderWorker$1", + "start": "137" + } + ] + }, + "net/minecraft/client/renderer/chunk/ChunkRenderWorker$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator;)V", + "name": "func_178474_a", + "owner": "net/minecraft/client/renderer/chunk/ChunkRenderWorker" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/ChunkRenderWorker$2", + "start": "141" + } + ] + }, + "net/minecraft/client/renderer/chunk/CompiledChunk": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/CompiledChunk$1", + "start": "13" + } + ] + }, + "net/minecraft/client/renderer/chunk/CompiledChunk$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/chunk/CompiledChunk" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/chunk/CompiledChunk$1", + "start": "13" + } + ] + }, + "net/minecraft/client/renderer/chunk/VisGraph": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/chunk/VisGraph$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/chunk/VisGraph" + } + ] + }, + "net/minecraft/client/renderer/chunk/VisGraph$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/chunk/VisGraph" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/chunk/VisGraph$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/chunk/VisGraph" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$1", + "start": "37" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$2", + "start": "48" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$3", + "start": "67" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$4", + "start": "77" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$5", + "start": "95" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$6", + "start": "105" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$7", + "start": "115" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$8", + "start": "122" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$9", + "start": "132" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$10", + "start": "143" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$11", + "start": "157" + }, + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$12", + "start": "167" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$1": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$1", + "start": "37" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$10": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$10", + "start": "143" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$11": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$11", + "start": "157" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$12": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$12", + "start": "167" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$2": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$2", + "start": "48" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$3": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$3", + "start": "67" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$4": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$4", + "start": "77" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$5": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$5", + "start": "95" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$6": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$6", + "start": "105" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$7": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$7", + "start": "115" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$8": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$8", + "start": "122" + } + ] + }, + "net/minecraft/client/renderer/color/BlockColors$9": { + "enclosingMethod": { + "desc": "()Lnet/minecraft/client/renderer/color/BlockColors;", + "name": "func_186723_a", + "owner": "net/minecraft/client/renderer/color/BlockColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/BlockColors$9", + "start": "132" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$1", + "start": "35" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$2", + "start": "42" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$3", + "start": "54" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$4", + "start": "89" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$5", + "start": "96" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$6", + "start": "108" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$7", + "start": "116" + }, + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$8", + "start": "123" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$1", + "start": "35" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/color/BlockColors;)Lnet/minecraft/client/renderer/color/ItemColors;", + "name": "func_186729_a", + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$2", + "start": "42" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/color/BlockColors;)Lnet/minecraft/client/renderer/color/ItemColors;", + "name": "func_186729_a", + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$3", + "start": "54" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$4": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$4", + "start": "89" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$5": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/color/BlockColors;)Lnet/minecraft/client/renderer/color/ItemColors;", + "name": "func_186729_a", + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$5", + "start": "96" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$6": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/renderer/color/BlockColors;)Lnet/minecraft/client/renderer/color/ItemColors;", + "name": "func_186729_a", + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$6", + "start": "108" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$7": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$7", + "start": "116" + } + ] + }, + "net/minecraft/client/renderer/color/ItemColors$8": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/color/ItemColors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/color/ItemColors$8", + "start": "123" + } + ] + }, + "net/minecraft/client/renderer/debug/DebugRenderer": { + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer", + "inner_name": "IDebugRenderer", + "outer_class": "net/minecraft/client/renderer/debug/DebugRenderer" + } + ] + }, + "net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/debug/DebugRenderer" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer", + "inner_name": "IDebugRenderer", + "outer_class": "net/minecraft/client/renderer/debug/DebugRenderer" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderArmorStand": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderArmorStand$1", + "start": "22" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderArmorStand$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderArmorStand" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderArmorStand$1", + "start": "22" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderEvoker": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderEvoker$1", + "start": "21" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderEvoker$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderEvoker" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderEvoker$1", + "start": "21" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderGiantZombie": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderGiantZombie$1", + "start": "23" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderGiantZombie$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderGiantZombie" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderGiantZombie$1", + "start": "23" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderIllusionIllager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderIllusionIllager$1", + "start": "23" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderIllusionIllager$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderIllusionIllager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderIllusionIllager$1", + "start": "23" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderLivingBase": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/RenderLivingBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/RenderLivingBase" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderLivingBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderLivingBase" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/RenderLivingBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/RenderLivingBase" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderPigZombie": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderPigZombie$1", + "start": "17" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderPigZombie$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderPigZombie" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderPigZombie$1", + "start": "17" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderShulker": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/entity/RenderShulker$HeadLayer", + "inner_name": "HeadLayer", + "outer_class": "net/minecraft/client/renderer/entity/RenderShulker", + "start": "136" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/RenderShulker$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/RenderShulker" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderShulker$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderShulker" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/RenderShulker$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/RenderShulker" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderShulker$HeadLayer": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderShulker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/entity/RenderShulker$HeadLayer", + "inner_name": "HeadLayer", + "outer_class": "net/minecraft/client/renderer/entity/RenderShulker", + "start": "136" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderSkeleton": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderSkeleton$1", + "start": "20" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderSkeleton$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderSkeleton" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderSkeleton$1", + "start": "20" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderVindicator": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderVindicator$1", + "start": "21" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderVindicator$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderVindicator" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderVindicator$1", + "start": "21" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderZombie": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderZombie$1", + "start": "18" + } + ] + }, + "net/minecraft/client/renderer/entity/RenderZombie$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/RenderZombie" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/entity/RenderZombie$1", + "start": "18" + } + ] + }, + "net/minecraft/client/renderer/entity/layers/LayerArmorBase": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/layers/LayerArmorBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/layers/LayerArmorBase" + } + ] + }, + "net/minecraft/client/renderer/entity/layers/LayerArmorBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/layers/LayerArmorBase" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/layers/LayerArmorBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/layers/LayerArmorBase" + } + ] + }, + "net/minecraft/client/renderer/entity/layers/LayerBipedArmor": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/layers/LayerBipedArmor" + } + ] + }, + "net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/layers/LayerBipedArmor" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/entity/layers/LayerBipedArmor" + } + ] + }, + "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder", + "inner_name": "DataHolder", + "outer_class": "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder" + } + ] + }, + "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder", + "inner_name": "DataHolder", + "outer_class": "net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder" + } + ] + }, + "net/minecraft/client/renderer/texture/Stitcher": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/texture/Stitcher$Holder", + "inner_name": "Holder", + "outer_class": "net/minecraft/client/renderer/texture/Stitcher", + "start": "175" + }, + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/texture/Stitcher$Slot", + "inner_name": "Slot", + "outer_class": "net/minecraft/client/renderer/texture/Stitcher", + "start": "265" + } + ] + }, + "net/minecraft/client/renderer/texture/Stitcher$Holder": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/texture/Stitcher" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/texture/Stitcher$Holder", + "inner_name": "Holder", + "outer_class": "net/minecraft/client/renderer/texture/Stitcher", + "start": "175" + } + ] + }, + "net/minecraft/client/renderer/texture/Stitcher$Slot": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/texture/Stitcher" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/renderer/texture/Stitcher$Slot", + "inner_name": "Slot", + "outer_class": "net/minecraft/client/renderer/texture/Stitcher", + "start": "265" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureAtlasSprite": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureAtlasSprite$1", + "start": "275" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureAtlasSprite$1": { + "enclosingMethod": { + "desc": "(I)V", + "name": "func_147963_d", + "owner": "net/minecraft/client/renderer/texture/TextureAtlasSprite" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureAtlasSprite$1", + "start": "275" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureManager$1", + "start": "74" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureManager$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/ResourceLocation;Lnet/minecraft/client/renderer/texture/ITextureObject;)Z", + "name": "func_110579_a", + "owner": "net/minecraft/client/renderer/texture/TextureManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureManager$1", + "start": "74" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureMap": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureMap$1", + "start": "207" + }, + { + "inner_class": "net/minecraft/client/renderer/texture/TextureMap$2", + "start": "214" + }, + { + "inner_class": "net/minecraft/client/renderer/texture/TextureMap$3", + "start": "221" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureMap$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/resources/IResourceManager;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;)Z", + "name": "func_184397_a", + "owner": "net/minecraft/client/renderer/texture/TextureMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureMap$1", + "start": "207" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureMap$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/resources/IResourceManager;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;)Z", + "name": "func_184397_a", + "owner": "net/minecraft/client/renderer/texture/TextureMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureMap$2", + "start": "214" + } + ] + }, + "net/minecraft/client/renderer/texture/TextureMap$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/client/resources/IResourceManager;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;)Z", + "name": "func_184397_a", + "owner": "net/minecraft/client/renderer/texture/TextureMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/renderer/texture/TextureMap$3", + "start": "221" + } + ] + }, + "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer" + } + ] + }, + "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer" + } + ] + }, + "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer" + } + ] + }, + "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer" + } + ] + }, + "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer" + } + ] + }, + "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer" + } + ] + }, + "net/minecraft/client/renderer/vertex/VertexFormat": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/vertex/VertexFormat$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/vertex/VertexFormat" + } + ] + }, + "net/minecraft/client/renderer/vertex/VertexFormat$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/vertex/VertexFormat" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/renderer/vertex/VertexFormat$1", + "inner_name": "1", + "outer_class": "net/minecraft/client/renderer/vertex/VertexFormat" + } + ] + }, + "net/minecraft/client/renderer/vertex/VertexFormatElement": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage", + "inner_name": "EnumUsage", + "outer_class": "net/minecraft/client/renderer/vertex/VertexFormatElement", + "start": "97" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/client/renderer/vertex/VertexFormatElement", + "start": "117" + } + ] + }, + "net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/vertex/VertexFormatElement" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType", + "inner_name": "EnumType", + "outer_class": "net/minecraft/client/renderer/vertex/VertexFormatElement", + "start": "117" + } + ] + }, + "net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage": { + "enclosingMethod": { + "owner": "net/minecraft/client/renderer/vertex/VertexFormatElement" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage", + "inner_name": "EnumUsage", + "outer_class": "net/minecraft/client/renderer/vertex/VertexFormatElement", + "start": "97" + } + ] + }, + "net/minecraft/client/resources/FallbackResourceManager": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger", + "inner_name": "InputStreamLeakedResourceLogger", + "outer_class": "net/minecraft/client/resources/FallbackResourceManager", + "start": "88" + } + ] + }, + "net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/FallbackResourceManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger", + "inner_name": "InputStreamLeakedResourceLogger", + "outer_class": "net/minecraft/client/resources/FallbackResourceManager", + "start": "88" + } + ] + }, + "net/minecraft/client/resources/LegacyV2Adapter": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/LegacyV2Adapter$1", + "start": "34" + } + ] + }, + "net/minecraft/client/resources/LegacyV2Adapter$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/LegacyV2Adapter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/LegacyV2Adapter$1", + "start": "34" + } + ] + }, + "net/minecraft/client/resources/ResourcePackListEntry": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/ResourcePackListEntry$1", + "start": "168" + } + ] + }, + "net/minecraft/client/resources/ResourcePackListEntry$1": { + "enclosingMethod": { + "desc": "(IIIIII)Z", + "name": "func_148278_a", + "owner": "net/minecraft/client/resources/ResourcePackListEntry" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/ResourcePackListEntry$1", + "start": "168" + } + ] + }, + "net/minecraft/client/resources/ResourcePackRepository": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$1", + "start": "54" + }, + { + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$2", + "start": "237" + }, + { + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$3", + "start": "246" + }, + { + "access": "21", + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/client/resources/ResourcePackRepository", + "start": "361" + } + ] + }, + "net/minecraft/client/resources/ResourcePackRepository$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/ResourcePackRepository" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$1", + "start": "54" + } + ] + }, + "net/minecraft/client/resources/ResourcePackRepository$2": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;Ljava/lang/String;)Lcom/google/common/util/concurrent/ListenableFuture;", + "name": "func_180601_a", + "owner": "net/minecraft/client/resources/ResourcePackRepository" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$2", + "start": "237" + } + ] + }, + "net/minecraft/client/resources/ResourcePackRepository$3": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;Ljava/lang/String;)Lcom/google/common/util/concurrent/ListenableFuture;", + "name": "func_180601_a", + "owner": "net/minecraft/client/resources/ResourcePackRepository" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$3", + "start": "246" + } + ] + }, + "net/minecraft/client/resources/ResourcePackRepository$Entry": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/ResourcePackRepository" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/client/resources/ResourcePackRepository$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/client/resources/ResourcePackRepository", + "start": "361" + } + ] + }, + "net/minecraft/client/resources/SimpleReloadableResourceManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SimpleReloadableResourceManager$1", + "start": "82" + } + ] + }, + "net/minecraft/client/resources/SimpleReloadableResourceManager$1": { + "enclosingMethod": { + "desc": "(Ljava/util/List;)V", + "name": "func_110541_a", + "owner": "net/minecraft/client/resources/SimpleReloadableResourceManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SimpleReloadableResourceManager$1", + "start": "82" + } + ] + }, + "net/minecraft/client/resources/SkinManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SkinManager$1", + "start": "44" + }, + { + "inner_class": "net/minecraft/client/resources/SkinManager$2", + "start": "75" + }, + { + "inner_class": "net/minecraft/client/resources/SkinManager$3", + "start": "101" + }, + { + "access": "609", + "inner_class": "net/minecraft/client/resources/SkinManager$SkinAvailableCallback", + "inner_name": "SkinAvailableCallback", + "outer_class": "net/minecraft/client/resources/SkinManager" + } + ] + }, + "net/minecraft/client/resources/SkinManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/SkinManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SkinManager$1", + "start": "44" + } + ] + }, + "net/minecraft/client/resources/SkinManager$2": { + "enclosingMethod": { + "desc": "(Lcom/mojang/authlib/minecraft/MinecraftProfileTexture;Lcom/mojang/authlib/minecraft/MinecraftProfileTexture$Type;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;)Lnet/minecraft/util/ResourceLocation;", + "name": "func_152789_a", + "owner": "net/minecraft/client/resources/SkinManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SkinManager$2", + "start": "75" + } + ] + }, + "net/minecraft/client/resources/SkinManager$3": { + "enclosingMethod": { + "desc": "(Lcom/mojang/authlib/GameProfile;Lnet/minecraft/client/resources/SkinManager$SkinAvailableCallback;Z)V", + "name": "func_152790_a", + "owner": "net/minecraft/client/resources/SkinManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SkinManager$3", + "start": "101" + }, + { + "inner_class": "net/minecraft/client/resources/SkinManager$3$1", + "start": "117" + } + ] + }, + "net/minecraft/client/resources/SkinManager$3$1": { + "enclosingMethod": { + "desc": "()V", + "name": "run", + "owner": "net/minecraft/client/resources/SkinManager$3" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/resources/SkinManager$3$1", + "start": "117" + } + ] + }, + "net/minecraft/client/resources/SkinManager$SkinAvailableCallback": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/SkinManager" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/client/resources/SkinManager$SkinAvailableCallback", + "inner_name": "SkinAvailableCallback", + "outer_class": "net/minecraft/client/resources/SkinManager" + } + ] + }, + "net/minecraft/client/resources/data/MetadataSerializer": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/resources/data/MetadataSerializer$Registration", + "inner_name": "Registration", + "outer_class": "net/minecraft/client/resources/data/MetadataSerializer" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/resources/data/MetadataSerializer$1" + } + ] + }, + "net/minecraft/client/resources/data/MetadataSerializer$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/data/MetadataSerializer" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/resources/data/MetadataSerializer$1" + } + ] + }, + "net/minecraft/client/resources/data/MetadataSerializer$Registration": { + "enclosingMethod": { + "owner": "net/minecraft/client/resources/data/MetadataSerializer" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/resources/data/MetadataSerializer$Registration", + "inner_name": "Registration", + "outer_class": "net/minecraft/client/resources/data/MetadataSerializer" + } + ] + }, + "net/minecraft/client/settings/GameSettings": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/settings/GameSettings$1", + "start": "54" + }, + { + "access": "4029", + "inner_class": "net/minecraft/client/settings/GameSettings$Options", + "inner_name": "Options", + "outer_class": "net/minecraft/client/settings/GameSettings", + "start": "96" + }, + { + "access": "1018", + "inner_class": "net/minecraft/client/settings/GameSettings$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/settings/GameSettings" + } + ] + }, + "net/minecraft/client/settings/GameSettings$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/settings/GameSettings" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/settings/GameSettings$1", + "start": "54" + } + ] + }, + "net/minecraft/client/settings/GameSettings$2": { + "enclosingMethod": { + "owner": "net/minecraft/client/settings/GameSettings" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/client/settings/GameSettings$2", + "inner_name": "2", + "outer_class": "net/minecraft/client/settings/GameSettings" + } + ] + }, + "net/minecraft/client/settings/GameSettings$Options": { + "enclosingMethod": { + "owner": "net/minecraft/client/settings/GameSettings" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/settings/GameSettings$Options", + "inner_name": "Options", + "outer_class": "net/minecraft/client/settings/GameSettings", + "start": "96" + } + ] + }, + "net/minecraft/client/shader/ShaderLoader": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/shader/ShaderLoader$ShaderType", + "inner_name": "ShaderType", + "outer_class": "net/minecraft/client/shader/ShaderLoader", + "start": "85" + } + ] + }, + "net/minecraft/client/shader/ShaderLoader$ShaderType": { + "enclosingMethod": { + "owner": "net/minecraft/client/shader/ShaderLoader" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/shader/ShaderLoader$ShaderType", + "inner_name": "ShaderType", + "outer_class": "net/minecraft/client/shader/ShaderLoader", + "start": "85" + } + ] + }, + "net/minecraft/client/util/ITooltipFlag": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/util/ITooltipFlag$TooltipFlags", + "inner_name": "TooltipFlags", + "outer_class": "net/minecraft/client/util/ITooltipFlag", + "start": "4" + } + ] + }, + "net/minecraft/client/util/ITooltipFlag$TooltipFlags": { + "enclosingMethod": { + "owner": "net/minecraft/client/util/ITooltipFlag" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/client/util/ITooltipFlag$TooltipFlags", + "inner_name": "TooltipFlags", + "outer_class": "net/minecraft/client/util/ITooltipFlag", + "start": "4" + } + ] + }, + "net/minecraft/client/util/JsonException": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/util/JsonException$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/client/util/JsonException", + "start": "51" + }, + { + "access": "1000", + "inner_class": "net/minecraft/client/util/JsonException$1" + } + ] + }, + "net/minecraft/client/util/JsonException$1": { + "enclosingMethod": { + "owner": "net/minecraft/client/util/JsonException" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/client/util/JsonException$1" + } + ] + }, + "net/minecraft/client/util/JsonException$Entry": { + "enclosingMethod": { + "owner": "net/minecraft/client/util/JsonException" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/util/JsonException$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/client/util/JsonException", + "start": "51" + } + ] + }, + "net/minecraft/client/util/RecipeItemHelper": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/util/RecipeItemHelper$RecipePicker", + "inner_name": "RecipePicker", + "outer_class": "net/minecraft/client/util/RecipeItemHelper", + "start": "107" + } + ] + }, + "net/minecraft/client/util/RecipeItemHelper$RecipePicker": { + "enclosingMethod": { + "owner": "net/minecraft/client/util/RecipeItemHelper" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/client/util/RecipeItemHelper$RecipePicker", + "inner_name": "RecipePicker", + "outer_class": "net/minecraft/client/util/RecipeItemHelper", + "start": "107" + } + ] + }, + "net/minecraft/client/util/SearchTree": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/util/SearchTree$MergingIterator", + "inner_name": "MergingIterator", + "outer_class": "net/minecraft/client/util/SearchTree", + "start": "86" + } + ] + }, + "net/minecraft/client/util/SearchTree$MergingIterator": { + "enclosingMethod": { + "owner": "net/minecraft/client/util/SearchTree" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/client/util/SearchTree$MergingIterator", + "inner_name": "MergingIterator", + "outer_class": "net/minecraft/client/util/SearchTree", + "start": "86" + } + ] + }, + "net/minecraft/client/util/SearchTreeManager": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/util/SearchTreeManager$Key", + "inner_name": "Key", + "outer_class": "net/minecraft/client/util/SearchTreeManager" + } + ] + }, + "net/minecraft/client/util/SearchTreeManager$Key": { + "enclosingMethod": { + "owner": "net/minecraft/client/util/SearchTreeManager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/client/util/SearchTreeManager$Key", + "inner_name": "Key", + "outer_class": "net/minecraft/client/util/SearchTreeManager" + } + ] + }, + "net/minecraft/client/util/SuffixArray": { + "innerClasses": [ + { + "inner_class": "net/minecraft/client/util/SuffixArray$1", + "start": "60" + } + ] + }, + "net/minecraft/client/util/SuffixArray$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_194058_a", + "owner": "net/minecraft/client/util/SuffixArray" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/client/util/SuffixArray$1", + "start": "60" + } + ] + }, + "net/minecraft/command/AdvancementCommand": { + "innerClasses": [ + { + "access": "4428", + "inner_class": "net/minecraft/command/AdvancementCommand$ActionType", + "inner_name": "ActionType", + "outer_class": "net/minecraft/command/AdvancementCommand", + "start": "225" + }, + { + "access": "4028", + "inner_class": "net/minecraft/command/AdvancementCommand$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/command/AdvancementCommand", + "start": "301" + }, + { + "access": "1000", + "inner_class": "net/minecraft/command/AdvancementCommand$1" + } + ] + }, + "net/minecraft/command/AdvancementCommand$1": { + "enclosingMethod": { + "owner": "net/minecraft/command/AdvancementCommand" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/command/AdvancementCommand$1" + } + ] + }, + "net/minecraft/command/AdvancementCommand$ActionType": { + "enclosingMethod": { + "owner": "net/minecraft/command/AdvancementCommand" + }, + "innerClasses": [ + { + "access": "4428", + "inner_class": "net/minecraft/command/AdvancementCommand$ActionType", + "inner_name": "ActionType", + "outer_class": "net/minecraft/command/AdvancementCommand", + "start": "225" + }, + { + "access": "4000", + "inner_class": "net/minecraft/command/AdvancementCommand$ActionType$1", + "start": "229" + }, + { + "access": "4000", + "inner_class": "net/minecraft/command/AdvancementCommand$ActionType$2", + "start": "247" + } + ] + }, + "net/minecraft/command/AdvancementCommand$ActionType$1": { + "enclosingMethod": { + "owner": "net/minecraft/command/AdvancementCommand$ActionType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/command/AdvancementCommand$ActionType$1", + "start": "229" + } + ] + }, + "net/minecraft/command/AdvancementCommand$ActionType$2": { + "enclosingMethod": { + "owner": "net/minecraft/command/AdvancementCommand$ActionType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/command/AdvancementCommand$ActionType$2", + "start": "247" + } + ] + }, + "net/minecraft/command/AdvancementCommand$Mode": { + "enclosingMethod": { + "owner": "net/minecraft/command/AdvancementCommand" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/command/AdvancementCommand$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/command/AdvancementCommand", + "start": "301" + } + ] + }, + "net/minecraft/command/CommandBase": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/command/CommandBase$CoordinateArg", + "inner_name": "CoordinateArg", + "outer_class": "net/minecraft/command/CommandBase", + "start": "421" + }, + { + "inner_class": "net/minecraft/command/CommandBase$1", + "start": "491" + }, + { + "inner_class": "net/minecraft/command/CommandBase$2", + "start": "501" + } + ] + }, + "net/minecraft/command/CommandBase$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/block/Block;Ljava/lang/String;)Lcom/google/common/base/Predicate;", + "name": "func_190791_b", + "owner": "net/minecraft/command/CommandBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/CommandBase$1", + "start": "491" + } + ] + }, + "net/minecraft/command/CommandBase$2": { + "enclosingMethod": { + "owner": "net/minecraft/command/CommandBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/CommandBase$2", + "start": "501" + } + ] + }, + "net/minecraft/command/CommandBase$CoordinateArg": { + "enclosingMethod": { + "owner": "net/minecraft/command/CommandBase" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/command/CommandBase$CoordinateArg", + "inner_name": "CoordinateArg", + "outer_class": "net/minecraft/command/CommandBase", + "start": "421" + } + ] + }, + "net/minecraft/command/CommandClone": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/command/CommandClone$StaticCloneData", + "inner_name": "StaticCloneData", + "outer_class": "net/minecraft/command/CommandClone" + } + ] + }, + "net/minecraft/command/CommandClone$StaticCloneData": { + "enclosingMethod": { + "owner": "net/minecraft/command/CommandClone" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/command/CommandClone$StaticCloneData", + "inner_name": "StaticCloneData", + "outer_class": "net/minecraft/command/CommandClone" + } + ] + }, + "net/minecraft/command/CommandResultStats": { + "innerClasses": [ + { + "inner_class": "net/minecraft/command/CommandResultStats$1", + "start": "36" + }, + { + "access": "4029", + "inner_class": "net/minecraft/command/CommandResultStats$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/command/CommandResultStats", + "start": "187" + } + ] + }, + "net/minecraft/command/CommandResultStats$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/command/ICommandSender;Lnet/minecraft/command/CommandResultStats$Type;I)V", + "name": "func_184932_a", + "owner": "net/minecraft/command/CommandResultStats" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/CommandResultStats$1", + "start": "36" + } + ] + }, + "net/minecraft/command/CommandResultStats$Type": { + "enclosingMethod": { + "owner": "net/minecraft/command/CommandResultStats" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/command/CommandResultStats$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/command/CommandResultStats", + "start": "187" + } + ] + }, + "net/minecraft/command/CommandSpreadPlayers": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/command/CommandSpreadPlayers$Position", + "inner_name": "Position", + "outer_class": "net/minecraft/command/CommandSpreadPlayers", + "start": "266" + } + ] + }, + "net/minecraft/command/CommandSpreadPlayers$Position": { + "enclosingMethod": { + "owner": "net/minecraft/command/CommandSpreadPlayers" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/command/CommandSpreadPlayers$Position", + "inner_name": "Position", + "outer_class": "net/minecraft/command/CommandSpreadPlayers", + "start": "266" + } + ] + }, + "net/minecraft/command/EntitySelector": { + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$1", + "start": "86" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$2", + "start": "227" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$3", + "start": "235" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$4", + "start": "251" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$5", + "start": "286" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$6", + "start": "311" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$7", + "start": "335" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$8", + "start": "384" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$9", + "start": "403" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$10", + "start": "434" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$11", + "start": "452" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$12", + "start": "470" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$13", + "start": "507" + }, + { + "inner_class": "net/minecraft/command/EntitySelector$14", + "start": "540" + } + ] + }, + "net/minecraft/command/EntitySelector$1": { + "enclosingMethod": { + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$1", + "start": "86" + } + ] + }, + "net/minecraft/command/EntitySelector$10": { + "enclosingMethod": { + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$10", + "start": "434" + } + ] + }, + "net/minecraft/command/EntitySelector$11": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_179662_g", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$11", + "start": "452" + } + ] + }, + "net/minecraft/command/EntitySelector$12": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_179662_g", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$12", + "start": "470" + } + ] + }, + "net/minecraft/command/EntitySelector$13": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;Ljava/lang/Class;Ljava/util/List;Ljava/lang/String;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;)Ljava/util/List;", + "name": "func_179660_a", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$13", + "start": "507" + } + ] + }, + "net/minecraft/command/EntitySelector$14": { + "enclosingMethod": { + "desc": "(Ljava/util/List;Ljava/util/Map;Lnet/minecraft/command/ICommandSender;Ljava/lang/Class;Ljava/lang/String;Lnet/minecraft/util/math/Vec3d;)Ljava/util/List;", + "name": "func_179658_a", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$14", + "start": "540" + } + ] + }, + "net/minecraft/command/EntitySelector$2": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;Ljava/lang/String;)Ljava/util/List;", + "name": "func_179663_a", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$2", + "start": "227" + } + ] + }, + "net/minecraft/command/EntitySelector$3": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;Ljava/lang/String;)Ljava/util/List;", + "name": "func_179663_a", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$3", + "start": "235" + } + ] + }, + "net/minecraft/command/EntitySelector$4": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_179648_b", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$4", + "start": "251" + } + ] + }, + "net/minecraft/command/EntitySelector$5": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_179649_c", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$5", + "start": "286" + } + ] + }, + "net/minecraft/command/EntitySelector$6": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_179659_d", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$6", + "start": "311" + } + ] + }, + "net/minecraft/command/EntitySelector$7": { + "enclosingMethod": { + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$7", + "start": "335" + } + ] + }, + "net/minecraft/command/EntitySelector$8": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_179647_f", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$8", + "start": "384" + } + ] + }, + "net/minecraft/command/EntitySelector$9": { + "enclosingMethod": { + "desc": "(Ljava/util/Map;)Ljava/util/List;", + "name": "func_184951_f", + "owner": "net/minecraft/command/EntitySelector" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/command/EntitySelector$9", + "start": "403" + } + ] + }, + "net/minecraft/command/FunctionObject": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/command/FunctionObject$CommandEntry", + "inner_name": "CommandEntry", + "outer_class": "net/minecraft/command/FunctionObject", + "start": "58" + }, + { + "access": "21", + "inner_class": "net/minecraft/command/FunctionObject$FunctionEntry", + "inner_name": "FunctionEntry", + "outer_class": "net/minecraft/command/FunctionObject", + "start": "76" + }, + { + "access": "29", + "inner_class": "net/minecraft/command/FunctionObject$CacheableFunction", + "inner_name": "CacheableFunction", + "outer_class": "net/minecraft/command/FunctionObject", + "start": "112" + }, + { + "access": "609", + "inner_class": "net/minecraft/command/FunctionObject$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/command/FunctionObject" + } + ] + }, + "net/minecraft/command/FunctionObject$CacheableFunction": { + "enclosingMethod": { + "owner": "net/minecraft/command/FunctionObject" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/command/FunctionObject$CacheableFunction", + "inner_name": "CacheableFunction", + "outer_class": "net/minecraft/command/FunctionObject", + "start": "112" + } + ] + }, + "net/minecraft/command/FunctionObject$CommandEntry": { + "enclosingMethod": { + "owner": "net/minecraft/command/FunctionObject" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/command/FunctionObject$CommandEntry", + "inner_name": "CommandEntry", + "outer_class": "net/minecraft/command/FunctionObject", + "start": "58" + } + ] + }, + "net/minecraft/command/FunctionObject$Entry": { + "enclosingMethod": { + "owner": "net/minecraft/command/FunctionObject" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/command/FunctionObject$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/command/FunctionObject" + } + ] + }, + "net/minecraft/command/FunctionObject$FunctionEntry": { + "enclosingMethod": { + "owner": "net/minecraft/command/FunctionObject" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/command/FunctionObject$FunctionEntry", + "inner_name": "FunctionEntry", + "outer_class": "net/minecraft/command/FunctionObject", + "start": "76" + } + ] + }, + "net/minecraft/crash/CrashReport": { + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$1", + "start": "41" + }, + { + "inner_class": "net/minecraft/crash/CrashReport$2", + "start": "48" + }, + { + "inner_class": "net/minecraft/crash/CrashReport$3", + "start": "55" + }, + { + "inner_class": "net/minecraft/crash/CrashReport$4", + "start": "62" + }, + { + "inner_class": "net/minecraft/crash/CrashReport$5", + "start": "69" + }, + { + "inner_class": "net/minecraft/crash/CrashReport$6", + "start": "84" + }, + { + "inner_class": "net/minecraft/crash/CrashReport$7", + "start": "106" + } + ] + }, + "net/minecraft/crash/CrashReport$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$1", + "start": "41" + } + ] + }, + "net/minecraft/crash/CrashReport$2": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$2", + "start": "48" + } + ] + }, + "net/minecraft/crash/CrashReport$3": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$3", + "start": "55" + } + ] + }, + "net/minecraft/crash/CrashReport$4": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$4", + "start": "62" + } + ] + }, + "net/minecraft/crash/CrashReport$5": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$5", + "start": "69" + } + ] + }, + "net/minecraft/crash/CrashReport$6": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$6", + "start": "84" + } + ] + }, + "net/minecraft/crash/CrashReport$7": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71504_g", + "owner": "net/minecraft/crash/CrashReport" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReport$7", + "start": "106" + } + ] + }, + "net/minecraft/crash/CrashReportCategory": { + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReportCategory$1", + "start": "166" + }, + { + "inner_class": "net/minecraft/crash/CrashReportCategory$2", + "start": "177" + }, + { + "inner_class": "net/minecraft/crash/CrashReportCategory$3", + "start": "190" + }, + { + "inner_class": "net/minecraft/crash/CrashReportCategory$6", + "start": "222" + }, + { + "inner_class": "net/minecraft/crash/CrashReportCategory$7", + "start": "229" + }, + { + "access": "28", + "inner_class": "net/minecraft/crash/CrashReportCategory$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/crash/CrashReportCategory", + "start": "255" + } + ] + }, + "net/minecraft/crash/CrashReportCategory$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/Block;I)V", + "name": "func_180523_a", + "owner": "net/minecraft/crash/CrashReportCategory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReportCategory$1", + "start": "166" + } + ] + }, + "net/minecraft/crash/CrashReportCategory$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/Block;I)V", + "name": "func_180523_a", + "owner": "net/minecraft/crash/CrashReportCategory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReportCategory$2", + "start": "177" + } + ] + }, + "net/minecraft/crash/CrashReportCategory$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/Block;I)V", + "name": "func_180523_a", + "owner": "net/minecraft/crash/CrashReportCategory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReportCategory$3", + "start": "190" + } + ] + }, + "net/minecraft/crash/CrashReportCategory$6": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/state/IBlockState;)V", + "name": "func_175750_a", + "owner": "net/minecraft/crash/CrashReportCategory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReportCategory$6", + "start": "222" + } + ] + }, + "net/minecraft/crash/CrashReportCategory$7": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/state/IBlockState;)V", + "name": "func_175750_a", + "owner": "net/minecraft/crash/CrashReportCategory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/crash/CrashReportCategory$7", + "start": "229" + } + ] + }, + "net/minecraft/crash/CrashReportCategory$Entry": { + "enclosingMethod": { + "owner": "net/minecraft/crash/CrashReportCategory" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/crash/CrashReportCategory$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/crash/CrashReportCategory", + "start": "255" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs": { + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$1", + "start": "17" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$2", + "start": "23" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$3", + "start": "29" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$4", + "start": "35" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$5", + "start": "41" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$6", + "start": "47" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$7", + "start": "54" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$8", + "start": "60" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$9", + "start": "66" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$10", + "start": "72" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$11", + "start": "79" + }, + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$12", + "start": "94" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$1": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$1", + "start": "17" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$10": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$10", + "start": "72" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$11": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$11", + "start": "79" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$12": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$12", + "start": "94" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$2": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$2", + "start": "23" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$3": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$3", + "start": "29" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$4": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$4", + "start": "35" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$5": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$5", + "start": "41" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$6": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$6", + "start": "47" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$7": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$7", + "start": "54" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$8": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$8", + "start": "60" + } + ] + }, + "net/minecraft/creativetab/CreativeTabs$9": { + "enclosingMethod": { + "owner": "net/minecraft/creativetab/CreativeTabs" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/creativetab/CreativeTabs$9", + "start": "66" + } + ] + }, + "net/minecraft/dispenser/IBehaviorDispenseItem": { + "innerClasses": [ + { + "inner_class": "net/minecraft/dispenser/IBehaviorDispenseItem$1", + "start": "12" + } + ] + }, + "net/minecraft/dispenser/IBehaviorDispenseItem$1": { + "enclosingMethod": { + "owner": "net/minecraft/dispenser/IBehaviorDispenseItem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/dispenser/IBehaviorDispenseItem$1", + "start": "12" + } + ] + }, + "net/minecraft/enchantment/Enchantment": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/enchantment/Enchantment$Rarity", + "inner_name": "Rarity", + "outer_class": "net/minecraft/enchantment/Enchantment", + "start": "37" + } + ] + }, + "net/minecraft/enchantment/Enchantment$Rarity": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/Enchantment" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/enchantment/Enchantment$Rarity", + "inner_name": "Rarity", + "outer_class": "net/minecraft/enchantment/Enchantment", + "start": "37" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper": { + "innerClasses": [ + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$ModifierDamage", + "inner_name": "ModifierDamage", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "123" + }, + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$ModifierLiving", + "inner_name": "ModifierLiving", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "153" + }, + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$HurtIterator", + "inner_name": "HurtIterator", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "182" + }, + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$DamageIterator", + "inner_name": "DamageIterator", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "205" + }, + { + "access": "1000", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$1" + }, + { + "access": "608", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$IModifier", + "inner_name": "IModifier", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper$1": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentHelper" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$1" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper$DamageIterator": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentHelper" + }, + "innerClasses": [ + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$DamageIterator", + "inner_name": "DamageIterator", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "205" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper$HurtIterator": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentHelper" + }, + "innerClasses": [ + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$HurtIterator", + "inner_name": "HurtIterator", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "182" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper$IModifier": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentHelper" + }, + "innerClasses": [ + { + "access": "608", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$IModifier", + "inner_name": "IModifier", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper$ModifierDamage": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentHelper" + }, + "innerClasses": [ + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$ModifierDamage", + "inner_name": "ModifierDamage", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "123" + } + ] + }, + "net/minecraft/enchantment/EnchantmentHelper$ModifierLiving": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentHelper" + }, + "innerClasses": [ + { + "access": "38", + "inner_class": "net/minecraft/enchantment/EnchantmentHelper$ModifierLiving", + "inner_name": "ModifierLiving", + "outer_class": "net/minecraft/enchantment/EnchantmentHelper", + "start": "153" + } + ] + }, + "net/minecraft/enchantment/EnchantmentProtection": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/enchantment/EnchantmentProtection$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/enchantment/EnchantmentProtection", + "start": "9" + } + ] + }, + "net/minecraft/enchantment/EnchantmentProtection$Type": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnchantmentProtection" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/enchantment/EnchantmentProtection$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/enchantment/EnchantmentProtection", + "start": "9" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType": { + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$1", + "start": "19" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$2", + "start": "36" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$3", + "start": "42" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$4", + "start": "48" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$5", + "start": "54" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$6", + "start": "60" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$7", + "start": "67" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$8", + "start": "73" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$9", + "start": "79" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$10", + "start": "85" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$11", + "start": "91" + }, + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$12", + "start": "97" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$1": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$1", + "start": "19" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$10": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$10", + "start": "85" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$11": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$11", + "start": "91" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$12": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$12", + "start": "97" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$2": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$2", + "start": "36" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$3": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$3", + "start": "42" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$4": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$4", + "start": "48" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$5": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$5", + "start": "54" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$6": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$6", + "start": "60" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$7": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$7", + "start": "67" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$8": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$8", + "start": "73" + } + ] + }, + "net/minecraft/enchantment/EnumEnchantmentType$9": { + "enclosingMethod": { + "owner": "net/minecraft/enchantment/EnumEnchantmentType" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/enchantment/EnumEnchantmentType$9", + "start": "79" + } + ] + }, + "net/minecraft/entity/Entity": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/Entity$1", + "start": "1392" + }, + { + "inner_class": "net/minecraft/entity/Entity$2", + "start": "2174" + }, + { + "inner_class": "net/minecraft/entity/Entity$3", + "start": "2181" + }, + { + "inner_class": "net/minecraft/entity/Entity$4", + "start": "2190" + }, + { + "inner_class": "net/minecraft/entity/Entity$5", + "start": "2196" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/Entity$6", + "inner_name": "6", + "outer_class": "net/minecraft/entity/Entity" + } + ] + }, + "net/minecraft/entity/Entity$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_190533_a", + "owner": "net/minecraft/entity/Entity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/Entity$1", + "start": "1392" + } + ] + }, + "net/minecraft/entity/Entity$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85029_a", + "owner": "net/minecraft/entity/Entity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/Entity$2", + "start": "2174" + } + ] + }, + "net/minecraft/entity/Entity$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85029_a", + "owner": "net/minecraft/entity/Entity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/Entity$3", + "start": "2181" + } + ] + }, + "net/minecraft/entity/Entity$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85029_a", + "owner": "net/minecraft/entity/Entity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/Entity$4", + "start": "2190" + } + ] + }, + "net/minecraft/entity/Entity$5": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85029_a", + "owner": "net/minecraft/entity/Entity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/Entity$5", + "start": "2196" + } + ] + }, + "net/minecraft/entity/Entity$6": { + "enclosingMethod": { + "owner": "net/minecraft/entity/Entity" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/Entity$6", + "inner_name": "6", + "outer_class": "net/minecraft/entity/Entity" + } + ] + }, + "net/minecraft/entity/EntityHanging": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/EntityHanging$1", + "start": "26" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/EntityHanging$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/EntityHanging" + } + ] + }, + "net/minecraft/entity/EntityHanging$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/EntityHanging" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/EntityHanging$1", + "start": "26" + } + ] + }, + "net/minecraft/entity/EntityHanging$2": { + "enclosingMethod": { + "owner": "net/minecraft/entity/EntityHanging" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/EntityHanging$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/EntityHanging" + } + ] + }, + "net/minecraft/entity/EntityList": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/EntityList$EntityEggInfo", + "inner_name": "EntityEggInfo", + "outer_class": "net/minecraft/entity/EntityList" + } + ] + }, + "net/minecraft/entity/EntityList$EntityEggInfo": { + "enclosingMethod": { + "owner": "net/minecraft/entity/EntityList" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/EntityList$EntityEggInfo", + "inner_name": "EntityEggInfo", + "outer_class": "net/minecraft/entity/EntityList" + } + ] + }, + "net/minecraft/entity/EntityLiving": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/EntityLiving$SpawnPlacementType", + "inner_name": "SpawnPlacementType", + "outer_class": "net/minecraft/entity/EntityLiving", + "start": "75" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/EntityLiving$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/EntityLiving" + } + ] + }, + "net/minecraft/entity/EntityLiving$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/EntityLiving" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/EntityLiving$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/EntityLiving" + } + ] + }, + "net/minecraft/entity/EntityLiving$SpawnPlacementType": { + "enclosingMethod": { + "owner": "net/minecraft/entity/EntityLiving" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/EntityLiving$SpawnPlacementType", + "inner_name": "SpawnPlacementType", + "outer_class": "net/minecraft/entity/EntityLiving", + "start": "75" + } + ] + }, + "net/minecraft/entity/EntityLivingBase": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/EntityLivingBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/EntityLivingBase" + } + ] + }, + "net/minecraft/entity/EntityLivingBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/EntityLivingBase" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/EntityLivingBase$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/EntityLivingBase" + } + ] + }, + "net/minecraft/entity/EntityTracker": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/EntityTracker$1", + "start": "163" + } + ] + }, + "net/minecraft/entity/EntityTracker$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/Entity;IIZ)V", + "name": "func_72785_a", + "owner": "net/minecraft/entity/EntityTracker" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/EntityTracker$1", + "start": "163" + } + ] + }, + "net/minecraft/entity/ai/EntityAIAvoidEntity": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIAvoidEntity$1", + "start": "18" + } + ] + }, + "net/minecraft/entity/ai/EntityAIAvoidEntity$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAIAvoidEntity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIAvoidEntity$1", + "start": "18" + } + ] + }, + "net/minecraft/entity/ai/EntityAIFindEntityNearest": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIFindEntityNearest$1", + "start": "40" + } + ] + }, + "net/minecraft/entity/ai/EntityAIFindEntityNearest$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAIFindEntityNearest" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIFindEntityNearest$1", + "start": "40" + } + ] + }, + "net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1", + "start": "41" + } + ] + }, + "net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1", + "start": "41" + } + ] + }, + "net/minecraft/entity/ai/EntityAIFollow": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIFollow$1", + "start": "28" + } + ] + }, + "net/minecraft/entity/ai/EntityAIFollow$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAIFollow" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAIFollow$1", + "start": "28" + } + ] + }, + "net/minecraft/entity/ai/EntityAINearestAttackableTarget": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget$1", + "start": "47" + }, + { + "inner_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget$2", + "start": "72" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter", + "inner_name": "Sorter", + "outer_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget", + "start": "113" + } + ] + }, + "net/minecraft/entity/ai/EntityAINearestAttackableTarget$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAINearestAttackableTarget" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget$1", + "start": "47" + } + ] + }, + "net/minecraft/entity/ai/EntityAINearestAttackableTarget$2": { + "enclosingMethod": { + "desc": "()Z", + "name": "func_75250_a", + "owner": "net/minecraft/entity/ai/EntityAINearestAttackableTarget" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget$2", + "start": "72" + } + ] + }, + "net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAINearestAttackableTarget" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter", + "inner_name": "Sorter", + "outer_class": "net/minecraft/entity/ai/EntityAINearestAttackableTarget", + "start": "113" + } + ] + }, + "net/minecraft/entity/ai/EntityAITasks": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry", + "inner_name": "EntityAITaskEntry", + "outer_class": "net/minecraft/entity/ai/EntityAITasks", + "start": "29" + } + ] + }, + "net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityAITasks" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry", + "inner_name": "EntityAITaskEntry", + "outer_class": "net/minecraft/entity/ai/EntityAITasks", + "start": "29" + } + ] + }, + "net/minecraft/entity/ai/EntityMoveHelper": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/ai/EntityMoveHelper$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/entity/ai/EntityMoveHelper", + "start": "158" + } + ] + }, + "net/minecraft/entity/ai/EntityMoveHelper$Action": { + "enclosingMethod": { + "owner": "net/minecraft/entity/ai/EntityMoveHelper" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/ai/EntityMoveHelper$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/entity/ai/EntityMoveHelper", + "start": "158" + } + ] + }, + "net/minecraft/entity/boss/EntityWither": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/boss/EntityWither$1", + "start": "75" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/boss/EntityWither$AIDoNothing", + "inner_name": "AIDoNothing", + "outer_class": "net/minecraft/entity/boss/EntityWither", + "start": "585" + } + ] + }, + "net/minecraft/entity/boss/EntityWither$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/boss/EntityWither" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/boss/EntityWither$1", + "start": "75" + } + ] + }, + "net/minecraft/entity/boss/EntityWither$AIDoNothing": { + "enclosingMethod": { + "owner": "net/minecraft/entity/boss/EntityWither" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/boss/EntityWither$AIDoNothing", + "inner_name": "AIDoNothing", + "outer_class": "net/minecraft/entity/boss/EntityWither", + "start": "585" + } + ] + }, + "net/minecraft/entity/item/EntityArmorStand": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityArmorStand$1", + "start": "77" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/item/EntityArmorStand$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/item/EntityArmorStand" + } + ] + }, + "net/minecraft/entity/item/EntityArmorStand$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityArmorStand" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityArmorStand$1", + "start": "77" + } + ] + }, + "net/minecraft/entity/item/EntityArmorStand$2": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityArmorStand" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/item/EntityArmorStand$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/item/EntityArmorStand" + } + ] + }, + "net/minecraft/entity/item/EntityBoat": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityBoat$Status", + "inner_name": "Status", + "outer_class": "net/minecraft/entity/item/EntityBoat", + "start": "359" + }, + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityBoat$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/entity/item/EntityBoat", + "start": "802" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/item/EntityBoat$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/item/EntityBoat" + } + ] + }, + "net/minecraft/entity/item/EntityBoat$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityBoat" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/item/EntityBoat$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/item/EntityBoat" + } + ] + }, + "net/minecraft/entity/item/EntityBoat$Status": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityBoat" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityBoat$Status", + "inner_name": "Status", + "outer_class": "net/minecraft/entity/item/EntityBoat", + "start": "359" + } + ] + }, + "net/minecraft/entity/item/EntityBoat$Type": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityBoat" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityBoat$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/entity/item/EntityBoat", + "start": "802" + } + ] + }, + "net/minecraft/entity/item/EntityMinecart": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityMinecart$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/entity/item/EntityMinecart", + "start": "42" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/item/EntityMinecart$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/item/EntityMinecart" + } + ] + }, + "net/minecraft/entity/item/EntityMinecart$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityMinecart" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/item/EntityMinecart$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/item/EntityMinecart" + } + ] + }, + "net/minecraft/entity/item/EntityMinecart$Type": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityMinecart" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityMinecart$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/entity/item/EntityMinecart", + "start": "42" + } + ] + }, + "net/minecraft/entity/item/EntityMinecartCommandBlock": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityMinecartCommandBlock$1", + "start": "36" + }, + { + "inner_class": "net/minecraft/entity/item/EntityMinecartCommandBlock$2", + "start": "92" + } + ] + }, + "net/minecraft/entity/item/EntityMinecartCommandBlock$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityMinecartCommandBlock" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityMinecartCommandBlock$1", + "start": "36" + } + ] + }, + "net/minecraft/entity/item/EntityMinecartCommandBlock$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189670_a", + "owner": "net/minecraft/entity/item/EntityMinecartCommandBlock" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityMinecartCommandBlock$2", + "start": "92" + } + ] + }, + "net/minecraft/entity/item/EntityMinecartMobSpawner": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityMinecartMobSpawner$1", + "start": "22" + }, + { + "inner_class": "net/minecraft/entity/item/EntityMinecartMobSpawner$2", + "start": "49" + } + ] + }, + "net/minecraft/entity/item/EntityMinecartMobSpawner$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityMinecartMobSpawner" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityMinecartMobSpawner$1", + "start": "22" + } + ] + }, + "net/minecraft/entity/item/EntityMinecartMobSpawner$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189672_a", + "owner": "net/minecraft/entity/item/EntityMinecartMobSpawner" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/item/EntityMinecartMobSpawner$2", + "start": "49" + } + ] + }, + "net/minecraft/entity/item/EntityPainting": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityPainting$EnumArt", + "inner_name": "EnumArt", + "outer_class": "net/minecraft/entity/item/EntityPainting", + "start": "20" + } + ] + }, + "net/minecraft/entity/item/EntityPainting$EnumArt": { + "enclosingMethod": { + "owner": "net/minecraft/entity/item/EntityPainting" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/item/EntityPainting$EnumArt", + "inner_name": "EnumArt", + "outer_class": "net/minecraft/entity/item/EntityPainting", + "start": "20" + } + ] + }, + "net/minecraft/entity/monster/AbstractIllager": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/monster/AbstractIllager$IllagerArmPose", + "inner_name": "IllagerArmPose", + "outer_class": "net/minecraft/entity/monster/AbstractIllager", + "start": "49" + } + ] + }, + "net/minecraft/entity/monster/AbstractIllager$IllagerArmPose": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/AbstractIllager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/monster/AbstractIllager$IllagerArmPose", + "inner_name": "IllagerArmPose", + "outer_class": "net/minecraft/entity/monster/AbstractIllager", + "start": "49" + } + ] + }, + "net/minecraft/entity/monster/AbstractSkeleton": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/AbstractSkeleton$1", + "start": "52" + } + ] + }, + "net/minecraft/entity/monster/AbstractSkeleton$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/AbstractSkeleton" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/AbstractSkeleton$1", + "start": "52" + } + ] + }, + "net/minecraft/entity/monster/EntityBlaze": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityBlaze$AIFireballAttack", + "inner_name": "AIFireballAttack", + "outer_class": "net/minecraft/entity/monster/EntityBlaze", + "start": "195" + } + ] + }, + "net/minecraft/entity/monster/EntityBlaze$AIFireballAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityBlaze" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityBlaze$AIFireballAttack", + "inner_name": "AIFireballAttack", + "outer_class": "net/minecraft/entity/monster/EntityBlaze", + "start": "195" + } + ] + }, + "net/minecraft/entity/monster/EntityElderGuardian": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityElderGuardian$1", + "start": "93" + } + ] + }, + "net/minecraft/entity/monster/EntityElderGuardian$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_70619_bc", + "owner": "net/minecraft/entity/monster/EntityElderGuardian" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityElderGuardian$1", + "start": "93" + } + ] + }, + "net/minecraft/entity/monster/EntityEnderman": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityEnderman$1", + "start": "105" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer", + "inner_name": "AIFindPlayer", + "outer_class": "net/minecraft/entity/monster/EntityEnderman", + "start": "350" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock", + "inner_name": "AIPlaceBlock", + "outer_class": "net/minecraft/entity/monster/EntityEnderman", + "start": "439" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AITakeBlock", + "inner_name": "AITakeBlock", + "outer_class": "net/minecraft/entity/monster/EntityEnderman", + "start": "496" + } + ] + }, + "net/minecraft/entity/monster/EntityEnderman$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_184651_r", + "owner": "net/minecraft/entity/monster/EntityEnderman" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityEnderman$1", + "start": "105" + } + ] + }, + "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEnderman" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer", + "inner_name": "AIFindPlayer", + "outer_class": "net/minecraft/entity/monster/EntityEnderman", + "start": "350" + }, + { + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1", + "start": "364" + } + ] + }, + "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1": { + "enclosingMethod": { + "desc": "()Z", + "name": "func_75250_a", + "owner": "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1", + "start": "364" + } + ] + }, + "net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEnderman" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock", + "inner_name": "AIPlaceBlock", + "outer_class": "net/minecraft/entity/monster/EntityEnderman", + "start": "439" + } + ] + }, + "net/minecraft/entity/monster/EntityEnderman$AITakeBlock": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEnderman" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEnderman$AITakeBlock", + "inner_name": "AITakeBlock", + "outer_class": "net/minecraft/entity/monster/EntityEnderman", + "start": "496" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AICastingSpell", + "inner_name": "AICastingSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "166" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AIAttackSpell", + "inner_name": "AIAttackSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "177" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AISummonSpell", + "inner_name": "AISummonSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "251" + }, + { + "access": "21", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell", + "inner_name": "AIWololoSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "294" + }, + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$1" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEvoker" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$1" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker$AIAttackSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEvoker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AIAttackSpell", + "inner_name": "AIAttackSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "177" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker$AICastingSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEvoker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AICastingSpell", + "inner_name": "AICastingSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "166" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker$AISummonSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEvoker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AISummonSpell", + "inner_name": "AISummonSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "251" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEvoker" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell", + "inner_name": "AIWololoSpell", + "outer_class": "net/minecraft/entity/monster/EntityEvoker", + "start": "294" + }, + { + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1", + "start": "295" + } + ] + }, + "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1", + "start": "295" + } + ] + }, + "net/minecraft/entity/monster/EntityGhast": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$GhastMoveHelper", + "inner_name": "GhastMoveHelper", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "182" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$AIRandomFly", + "inner_name": "AIRandomFly", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "236" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$AILookAround", + "inner_name": "AILookAround", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "280" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$AIFireballAttack", + "inner_name": "AIFireballAttack", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "312" + } + ] + }, + "net/minecraft/entity/monster/EntityGhast$AIFireballAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGhast" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$AIFireballAttack", + "inner_name": "AIFireballAttack", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "312" + } + ] + }, + "net/minecraft/entity/monster/EntityGhast$AILookAround": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGhast" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$AILookAround", + "inner_name": "AILookAround", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "280" + } + ] + }, + "net/minecraft/entity/monster/EntityGhast$AIRandomFly": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGhast" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$AIRandomFly", + "inner_name": "AIRandomFly", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "236" + } + ] + }, + "net/minecraft/entity/monster/EntityGhast$GhastMoveHelper": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGhast" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGhast$GhastMoveHelper", + "inner_name": "GhastMoveHelper", + "outer_class": "net/minecraft/entity/monster/EntityGhast", + "start": "182" + } + ] + }, + "net/minecraft/entity/monster/EntityGuardian": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector", + "inner_name": "GuardianTargetSelector", + "outer_class": "net/minecraft/entity/monster/EntityGuardian", + "start": "367" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack", + "inner_name": "AIGuardianAttack", + "outer_class": "net/minecraft/entity/monster/EntityGuardian", + "start": "396" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper", + "inner_name": "GuardianMoveHelper", + "outer_class": "net/minecraft/entity/monster/EntityGuardian", + "start": "467" + } + ] + }, + "net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGuardian" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack", + "inner_name": "AIGuardianAttack", + "outer_class": "net/minecraft/entity/monster/EntityGuardian", + "start": "396" + } + ] + }, + "net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGuardian" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper", + "inner_name": "GuardianMoveHelper", + "outer_class": "net/minecraft/entity/monster/EntityGuardian", + "start": "467" + } + ] + }, + "net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityGuardian" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector", + "inner_name": "GuardianTargetSelector", + "outer_class": "net/minecraft/entity/monster/EntityGuardian", + "start": "367" + } + ] + }, + "net/minecraft/entity/monster/EntityIllusionIllager": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell", + "inner_name": "AIMirriorSpell", + "outer_class": "net/minecraft/entity/monster/EntityIllusionIllager", + "start": "201" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell", + "inner_name": "AIBlindnessSpell", + "outer_class": "net/minecraft/entity/monster/EntityIllusionIllager", + "start": "241" + }, + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityIllusionIllager$1" + } + ] + }, + "net/minecraft/entity/monster/EntityIllusionIllager$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityIllusionIllager" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityIllusionIllager$1" + } + ] + }, + "net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityIllusionIllager" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell", + "inner_name": "AIBlindnessSpell", + "outer_class": "net/minecraft/entity/monster/EntityIllusionIllager", + "start": "241" + } + ] + }, + "net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityIllusionIllager" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell", + "inner_name": "AIMirriorSpell", + "outer_class": "net/minecraft/entity/monster/EntityIllusionIllager", + "start": "201" + } + ] + }, + "net/minecraft/entity/monster/EntityIronGolem": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityIronGolem$1", + "start": "72" + } + ] + }, + "net/minecraft/entity/monster/EntityIronGolem$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_184651_r", + "owner": "net/minecraft/entity/monster/EntityIronGolem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityIronGolem$1", + "start": "72" + } + ] + }, + "net/minecraft/entity/monster/EntityPigZombie": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor", + "inner_name": "AIHurtByAggressor", + "outer_class": "net/minecraft/entity/monster/EntityPigZombie", + "start": "206" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor", + "inner_name": "AITargetAggressor", + "outer_class": "net/minecraft/entity/monster/EntityPigZombie", + "start": "221" + } + ] + }, + "net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPigZombie" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor", + "inner_name": "AIHurtByAggressor", + "outer_class": "net/minecraft/entity/monster/EntityPigZombie", + "start": "206" + } + ] + }, + "net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPigZombie" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor", + "inner_name": "AITargetAggressor", + "outer_class": "net/minecraft/entity/monster/EntityPigZombie", + "start": "221" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget", + "inner_name": "AIHurtByTarget", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "208" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer", + "inner_name": "AIAttackPlayer", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "236" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack", + "inner_name": "AIMeleeAttack", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "270" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIPanic", + "inner_name": "AIPanic", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "310" + }, + { + "access": "28", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear" + }, + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$1" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPolarBear" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$1" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPolarBear" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer", + "inner_name": "AIAttackPlayer", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "236" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPolarBear" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget", + "inner_name": "AIHurtByTarget", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "208" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPolarBear" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack", + "inner_name": "AIMeleeAttack", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "270" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear$AIPanic": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPolarBear" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$AIPanic", + "inner_name": "AIPanic", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear", + "start": "310" + } + ] + }, + "net/minecraft/entity/monster/EntityPolarBear$GroupData": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityPolarBear" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/entity/monster/EntityPolarBear$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/monster/EntityPolarBear" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$BodyHelper", + "inner_name": "BodyHelper", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "550" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIPeek", + "inner_name": "AIPeek", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "558" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIAttack", + "inner_name": "AIAttack", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "594" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIAttackNearest", + "inner_name": "AIAttackNearest", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "651" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack", + "inner_name": "AIDefenseAttack", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "682" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/monster/EntityShulker$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/monster/EntityShulker" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/monster/EntityShulker$1", + "inner_name": "1", + "outer_class": "net/minecraft/entity/monster/EntityShulker" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$AIAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIAttack", + "inner_name": "AIAttack", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "594" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$AIAttackNearest": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIAttackNearest", + "inner_name": "AIAttackNearest", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "651" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1", + "start": "672" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack", + "inner_name": "AIDefenseAttack", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "682" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1", + "start": "672" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$AIPeek": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$AIPeek", + "inner_name": "AIPeek", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "558" + } + ] + }, + "net/minecraft/entity/monster/EntityShulker$BodyHelper": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityShulker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityShulker$BodyHelper", + "inner_name": "BodyHelper", + "outer_class": "net/minecraft/entity/monster/EntityShulker", + "start": "550" + } + ] + }, + "net/minecraft/entity/monster/EntitySilverfish": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish", + "inner_name": "AISummonSilverfish", + "outer_class": "net/minecraft/entity/monster/EntitySilverfish", + "start": "172" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySilverfish$AIHideInStone", + "inner_name": "AIHideInStone", + "outer_class": "net/minecraft/entity/monster/EntitySilverfish", + "start": "227" + } + ] + }, + "net/minecraft/entity/monster/EntitySilverfish$AIHideInStone": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySilverfish" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySilverfish$AIHideInStone", + "inner_name": "AIHideInStone", + "outer_class": "net/minecraft/entity/monster/EntitySilverfish", + "start": "227" + } + ] + }, + "net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySilverfish" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish", + "inner_name": "AISummonSilverfish", + "outer_class": "net/minecraft/entity/monster/EntitySilverfish", + "start": "172" + } + ] + }, + "net/minecraft/entity/monster/EntitySlime": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper", + "inner_name": "SlimeMoveHelper", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "351" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeAttack", + "inner_name": "AISlimeAttack", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "409" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom", + "inner_name": "AISlimeFaceRandom", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "472" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeFloat", + "inner_name": "AISlimeFloat", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "496" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeHop", + "inner_name": "AISlimeHop", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "518" + } + ] + }, + "net/minecraft/entity/monster/EntitySlime$AISlimeAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySlime" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeAttack", + "inner_name": "AISlimeAttack", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "409" + } + ] + }, + "net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySlime" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom", + "inner_name": "AISlimeFaceRandom", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "472" + } + ] + }, + "net/minecraft/entity/monster/EntitySlime$AISlimeFloat": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySlime" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeFloat", + "inner_name": "AISlimeFloat", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "496" + } + ] + }, + "net/minecraft/entity/monster/EntitySlime$AISlimeHop": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySlime" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$AISlimeHop", + "inner_name": "AISlimeHop", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "518" + } + ] + }, + "net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySlime" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper", + "inner_name": "SlimeMoveHelper", + "outer_class": "net/minecraft/entity/monster/EntitySlime", + "start": "351" + } + ] + }, + "net/minecraft/entity/monster/EntitySpellcasterIllager": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell", + "inner_name": "AICastingApell", + "outer_class": "net/minecraft/entity/monster/EntitySpellcasterIllager", + "start": "117" + }, + { + "access": "421", + "inner_class": "net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell", + "inner_name": "AIUseSpell", + "outer_class": "net/minecraft/entity/monster/EntitySpellcasterIllager", + "start": "146" + }, + { + "access": "4029", + "inner_class": "net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType", + "inner_name": "SpellType", + "outer_class": "net/minecraft/entity/monster/EntitySpellcasterIllager", + "start": "201" + } + ] + }, + "net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySpellcasterIllager" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell", + "inner_name": "AICastingApell", + "outer_class": "net/minecraft/entity/monster/EntitySpellcasterIllager", + "start": "117" + } + ] + }, + "net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySpellcasterIllager" + }, + "innerClasses": [ + { + "access": "421", + "inner_class": "net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell", + "inner_name": "AIUseSpell", + "outer_class": "net/minecraft/entity/monster/EntitySpellcasterIllager", + "start": "146" + } + ] + }, + "net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySpellcasterIllager" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType", + "inner_name": "SpellType", + "outer_class": "net/minecraft/entity/monster/EntitySpellcasterIllager", + "start": "201" + } + ] + }, + "net/minecraft/entity/monster/EntitySpider": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/monster/EntitySpider$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/monster/EntitySpider", + "start": "212" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySpider$AISpiderAttack", + "inner_name": "AISpiderAttack", + "outer_class": "net/minecraft/entity/monster/EntitySpider", + "start": "232" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySpider$AISpiderTarget", + "inner_name": "AISpiderTarget", + "outer_class": "net/minecraft/entity/monster/EntitySpider", + "start": "253" + } + ] + }, + "net/minecraft/entity/monster/EntitySpider$AISpiderAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySpider" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySpider$AISpiderAttack", + "inner_name": "AISpiderAttack", + "outer_class": "net/minecraft/entity/monster/EntitySpider", + "start": "232" + } + ] + }, + "net/minecraft/entity/monster/EntitySpider$AISpiderTarget": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySpider" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntitySpider$AISpiderTarget", + "inner_name": "AISpiderTarget", + "outer_class": "net/minecraft/entity/monster/EntitySpider", + "start": "253" + } + ] + }, + "net/minecraft/entity/monster/EntitySpider$GroupData": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntitySpider" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/monster/EntitySpider$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/monster/EntitySpider", + "start": "212" + } + ] + }, + "net/minecraft/entity/monster/EntityVex": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AIMoveControl", + "inner_name": "AIMoveControl", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "225" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AIChargeAttack", + "inner_name": "AIChargeAttack", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "268" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AIMoveRandom", + "inner_name": "AIMoveRandom", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "316" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget", + "inner_name": "AICopyOwnerTarget", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "367" + } + ] + }, + "net/minecraft/entity/monster/EntityVex$AIChargeAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityVex" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AIChargeAttack", + "inner_name": "AIChargeAttack", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "268" + } + ] + }, + "net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityVex" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget", + "inner_name": "AICopyOwnerTarget", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "367" + } + ] + }, + "net/minecraft/entity/monster/EntityVex$AIMoveControl": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityVex" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AIMoveControl", + "inner_name": "AIMoveControl", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "225" + } + ] + }, + "net/minecraft/entity/monster/EntityVex$AIMoveRandom": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityVex" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVex$AIMoveRandom", + "inner_name": "AIMoveRandom", + "outer_class": "net/minecraft/entity/monster/EntityVex", + "start": "316" + } + ] + }, + "net/minecraft/entity/monster/EntityVindicator": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack", + "inner_name": "AIJohnnyAttack", + "outer_class": "net/minecraft/entity/monster/EntityVindicator", + "start": "185" + }, + { + "inner_class": "net/minecraft/entity/monster/EntityVindicator$1", + "start": "189" + } + ] + }, + "net/minecraft/entity/monster/EntityVindicator$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityVindicator" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/EntityVindicator$1", + "start": "189" + } + ] + }, + "net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityVindicator" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack", + "inner_name": "AIJohnnyAttack", + "outer_class": "net/minecraft/entity/monster/EntityVindicator", + "start": "185" + } + ] + }, + "net/minecraft/entity/monster/EntityZombie": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityZombie$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/monster/EntityZombie" + }, + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityZombie$1" + } + ] + }, + "net/minecraft/entity/monster/EntityZombie$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityZombie" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/entity/monster/EntityZombie$1" + } + ] + }, + "net/minecraft/entity/monster/EntityZombie$GroupData": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/EntityZombie" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/monster/EntityZombie$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/monster/EntityZombie" + } + ] + }, + "net/minecraft/entity/monster/IMob": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/IMob$1", + "start": "17" + }, + { + "inner_class": "net/minecraft/entity/monster/IMob$2", + "start": "24" + } + ] + }, + "net/minecraft/entity/monster/IMob$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/IMob" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/IMob$1", + "start": "17" + } + ] + }, + "net/minecraft/entity/monster/IMob$2": { + "enclosingMethod": { + "owner": "net/minecraft/entity/monster/IMob" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/monster/IMob$2", + "start": "24" + } + ] + }, + "net/minecraft/entity/passive/AbstractHorse": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/AbstractHorse$1", + "start": "71" + } + ] + }, + "net/minecraft/entity/passive/AbstractHorse$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/AbstractHorse" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/AbstractHorse$1", + "start": "71" + } + ] + }, + "net/minecraft/entity/passive/EntityHorse": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityHorse$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/passive/EntityHorse" + } + ] + }, + "net/minecraft/entity/passive/EntityHorse$GroupData": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityHorse" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityHorse$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/passive/EntityHorse" + } + ] + }, + "net/minecraft/entity/passive/EntityLlama": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityLlama$AIHurtByTarget", + "inner_name": "AIHurtByTarget", + "outer_class": "net/minecraft/entity/passive/EntityLlama", + "start": "508" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityLlama$AIDefendTarget", + "inner_name": "AIDefendTarget", + "outer_class": "net/minecraft/entity/passive/EntityLlama", + "start": "526" + }, + { + "access": "1000", + "inner_class": "net/minecraft/entity/passive/EntityLlama$1" + }, + { + "access": "28", + "inner_class": "net/minecraft/entity/passive/EntityLlama$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/passive/EntityLlama" + } + ] + }, + "net/minecraft/entity/passive/EntityLlama$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityLlama" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/entity/passive/EntityLlama$1" + } + ] + }, + "net/minecraft/entity/passive/EntityLlama$AIDefendTarget": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityLlama" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityLlama$AIDefendTarget", + "inner_name": "AIDefendTarget", + "outer_class": "net/minecraft/entity/passive/EntityLlama", + "start": "526" + } + ] + }, + "net/minecraft/entity/passive/EntityLlama$AIHurtByTarget": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityLlama" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityLlama$AIHurtByTarget", + "inner_name": "AIHurtByTarget", + "outer_class": "net/minecraft/entity/passive/EntityLlama", + "start": "508" + } + ] + }, + "net/minecraft/entity/passive/EntityLlama$GroupData": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityLlama" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/entity/passive/EntityLlama$GroupData", + "inner_name": "GroupData", + "outer_class": "net/minecraft/entity/passive/EntityLlama" + } + ] + }, + "net/minecraft/entity/passive/EntityParrot": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntityParrot$1", + "start": "86" + } + ] + }, + "net/minecraft/entity/passive/EntityParrot$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityParrot" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntityParrot$1", + "start": "86" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper", + "inner_name": "RabbitJumpHelper", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "475" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper", + "inner_name": "RabbitMoveHelper", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "506" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity", + "inner_name": "AIAvoidEntity", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "537" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIRaidFarm", + "inner_name": "AIRaidFarm", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "554" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIPanic", + "inner_name": "AIPanic", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "633" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIEvilAttack", + "inner_name": "AIEvilAttack", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "646" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$RabbitTypeData", + "inner_name": "RabbitTypeData", + "outer_class": "net/minecraft/entity/passive/EntityRabbit" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity", + "inner_name": "AIAvoidEntity", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "537" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$AIEvilAttack": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIEvilAttack", + "inner_name": "AIEvilAttack", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "646" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$AIPanic": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIPanic", + "inner_name": "AIPanic", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "633" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$AIRaidFarm": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$AIRaidFarm", + "inner_name": "AIRaidFarm", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "554" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper", + "inner_name": "RabbitJumpHelper", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "475" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper", + "inner_name": "RabbitMoveHelper", + "outer_class": "net/minecraft/entity/passive/EntityRabbit", + "start": "506" + } + ] + }, + "net/minecraft/entity/passive/EntityRabbit$RabbitTypeData": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityRabbit" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityRabbit$RabbitTypeData", + "inner_name": "RabbitTypeData", + "outer_class": "net/minecraft/entity/passive/EntityRabbit" + } + ] + }, + "net/minecraft/entity/passive/EntitySheep": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntitySheep$1", + "start": "58" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/passive/EntitySheep$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/passive/EntitySheep" + } + ] + }, + "net/minecraft/entity/passive/EntitySheep$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntitySheep" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntitySheep$1", + "start": "58" + } + ] + }, + "net/minecraft/entity/passive/EntitySheep$2": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntitySheep" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/passive/EntitySheep$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/passive/EntitySheep" + } + ] + }, + "net/minecraft/entity/passive/EntitySquid": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntitySquid$AIMoveRandom", + "inner_name": "AIMoveRandom", + "outer_class": "net/minecraft/entity/passive/EntitySquid", + "start": "206" + } + ] + }, + "net/minecraft/entity/passive/EntitySquid$AIMoveRandom": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntitySquid" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntitySquid$AIMoveRandom", + "inner_name": "AIMoveRandom", + "outer_class": "net/minecraft/entity/passive/EntitySquid", + "start": "206" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntityVillager$1", + "start": "302" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$PriceInfo", + "inner_name": "PriceInfo", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "931" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$EmeraldForItems", + "inner_name": "EmeraldForItems", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "954" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds", + "inner_name": "ListItemForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "979" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds", + "inner_name": "ListEnchantedItemForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1008" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds", + "inner_name": "ListEnchantedBookForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1026" + }, + { + "access": "28", + "inner_class": "net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds", + "inner_name": "TreasureMapForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1054" + }, + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem", + "inner_name": "ItemAndEmeraldToItem", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1084" + }, + { + "access": "609", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ITradeList", + "inner_name": "ITradeList", + "outer_class": "net/minecraft/entity/passive/EntityVillager" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189785_b", + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntityVillager$1", + "start": "302" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$EmeraldForItems": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$EmeraldForItems", + "inner_name": "EmeraldForItems", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "954" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$ITradeList": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ITradeList", + "inner_name": "ITradeList", + "outer_class": "net/minecraft/entity/passive/EntityVillager" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem", + "inner_name": "ItemAndEmeraldToItem", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1084" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds", + "inner_name": "ListEnchantedBookForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1026" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds", + "inner_name": "ListEnchantedItemForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1008" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds", + "inner_name": "ListItemForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "979" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$PriceInfo": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/entity/passive/EntityVillager$PriceInfo", + "inner_name": "PriceInfo", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "931" + } + ] + }, + "net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityVillager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds", + "inner_name": "TreasureMapForEmeralds", + "outer_class": "net/minecraft/entity/passive/EntityVillager", + "start": "1054" + } + ] + }, + "net/minecraft/entity/passive/EntityWolf": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntityWolf$1", + "start": "99" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityWolf$AIAvoidEntity", + "inner_name": "AIAvoidEntity", + "outer_class": "net/minecraft/entity/passive/EntityWolf", + "start": "541" + } + ] + }, + "net/minecraft/entity/passive/EntityWolf$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_184651_r", + "owner": "net/minecraft/entity/passive/EntityWolf" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/passive/EntityWolf$1", + "start": "99" + } + ] + }, + "net/minecraft/entity/passive/EntityWolf$AIAvoidEntity": { + "enclosingMethod": { + "owner": "net/minecraft/entity/passive/EntityWolf" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/passive/EntityWolf$AIAvoidEntity", + "inner_name": "AIAvoidEntity", + "outer_class": "net/minecraft/entity/passive/EntityWolf", + "start": "541" + } + ] + }, + "net/minecraft/entity/player/EntityPlayer": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/player/EntityPlayer$EnumChatVisibility", + "inner_name": "EnumChatVisibility", + "outer_class": "net/minecraft/entity/player/EntityPlayer", + "start": "117" + }, + { + "inner_class": "net/minecraft/entity/player/EntityPlayer$1", + "start": "760" + }, + { + "access": "4029", + "inner_class": "net/minecraft/entity/player/EntityPlayer$SleepResult", + "inner_name": "SleepResult", + "outer_class": "net/minecraft/entity/player/EntityPlayer", + "start": "1293" + }, + { + "access": "20", + "inner_class": "net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate", + "inner_name": "SleepEnemyPredicate", + "outer_class": "net/minecraft/entity/player/EntityPlayer", + "start": "2107" + }, + { + "access": "1018", + "inner_class": "net/minecraft/entity/player/EntityPlayer$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/player/EntityPlayer" + } + ] + }, + "net/minecraft/entity/player/EntityPlayer$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189806_a", + "owner": "net/minecraft/entity/player/EntityPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/player/EntityPlayer$1", + "start": "760" + } + ] + }, + "net/minecraft/entity/player/EntityPlayer$2": { + "enclosingMethod": { + "owner": "net/minecraft/entity/player/EntityPlayer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/entity/player/EntityPlayer$2", + "inner_name": "2", + "outer_class": "net/minecraft/entity/player/EntityPlayer" + } + ] + }, + "net/minecraft/entity/player/EntityPlayer$EnumChatVisibility": { + "enclosingMethod": { + "owner": "net/minecraft/entity/player/EntityPlayer" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/player/EntityPlayer$EnumChatVisibility", + "inner_name": "EnumChatVisibility", + "outer_class": "net/minecraft/entity/player/EntityPlayer", + "start": "117" + } + ] + }, + "net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate": { + "enclosingMethod": { + "owner": "net/minecraft/entity/player/EntityPlayer" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate", + "inner_name": "SleepEnemyPredicate", + "outer_class": "net/minecraft/entity/player/EntityPlayer", + "start": "2107" + } + ] + }, + "net/minecraft/entity/player/EntityPlayer$SleepResult": { + "enclosingMethod": { + "owner": "net/minecraft/entity/player/EntityPlayer" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/player/EntityPlayer$SleepResult", + "inner_name": "SleepResult", + "outer_class": "net/minecraft/entity/player/EntityPlayer", + "start": "1293" + } + ] + }, + "net/minecraft/entity/player/EntityPlayerMP": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/player/EntityPlayerMP$1", + "start": "213" + } + ] + }, + "net/minecraft/entity/player/EntityPlayerMP$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_191522_a", + "owner": "net/minecraft/entity/player/EntityPlayerMP" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/player/EntityPlayerMP$1", + "start": "213" + } + ] + }, + "net/minecraft/entity/player/InventoryPlayer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/player/InventoryPlayer$1", + "start": "364" + } + ] + }, + "net/minecraft/entity/player/InventoryPlayer$1": { + "enclosingMethod": { + "desc": "(ILnet/minecraft/item/ItemStack;)Z", + "name": "func_191971_c", + "owner": "net/minecraft/entity/player/InventoryPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/player/InventoryPlayer$1", + "start": "364" + } + ] + }, + "net/minecraft/entity/projectile/EntityArrow": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/projectile/EntityArrow$1", + "start": "44" + }, + { + "access": "4029", + "inner_class": "net/minecraft/entity/projectile/EntityArrow$PickupStatus", + "inner_name": "PickupStatus", + "outer_class": "net/minecraft/entity/projectile/EntityArrow", + "start": "51" + } + ] + }, + "net/minecraft/entity/projectile/EntityArrow$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/projectile/EntityArrow" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/projectile/EntityArrow$1", + "start": "44" + } + ] + }, + "net/minecraft/entity/projectile/EntityArrow$PickupStatus": { + "enclosingMethod": { + "owner": "net/minecraft/entity/projectile/EntityArrow" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/entity/projectile/EntityArrow$PickupStatus", + "inner_name": "PickupStatus", + "outer_class": "net/minecraft/entity/projectile/EntityArrow", + "start": "51" + } + ] + }, + "net/minecraft/entity/projectile/EntityFishHook": { + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/entity/projectile/EntityFishHook$State", + "inner_name": "State", + "outer_class": "net/minecraft/entity/projectile/EntityFishHook", + "start": "51" + } + ] + }, + "net/minecraft/entity/projectile/EntityFishHook$State": { + "enclosingMethod": { + "owner": "net/minecraft/entity/projectile/EntityFishHook" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/entity/projectile/EntityFishHook$State", + "inner_name": "State", + "outer_class": "net/minecraft/entity/projectile/EntityFishHook", + "start": "51" + } + ] + }, + "net/minecraft/entity/projectile/EntityPotion": { + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/projectile/EntityPotion$1", + "start": "43" + } + ] + }, + "net/minecraft/entity/projectile/EntityPotion$1": { + "enclosingMethod": { + "owner": "net/minecraft/entity/projectile/EntityPotion" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/entity/projectile/EntityPotion$1", + "start": "43" + } + ] + }, + "net/minecraft/init/Bootstrap": { + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$1", + "start": "87" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$2", + "start": "96" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$3", + "start": "106" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$4", + "start": "115" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$5", + "start": "121" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$6", + "start": "127" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$7", + "start": "144" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$8", + "start": "166" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$9", + "start": "188" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$10", + "start": "210" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$11", + "start": "232" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$12", + "start": "270" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$13", + "start": "288" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$14", + "start": "319" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$15", + "start": "346" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$16", + "start": "369" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$17", + "start": "384" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$18", + "start": "432" + }, + { + "access": "29", + "inner_class": "net/minecraft/init/Bootstrap$BehaviorDispenseBoat", + "inner_name": "BehaviorDispenseBoat", + "outer_class": "net/minecraft/init/Bootstrap", + "start": "529" + }, + { + "access": "429", + "inner_class": "net/minecraft/init/Bootstrap$BehaviorDispenseOptional", + "inner_name": "BehaviorDispenseOptional", + "outer_class": "net/minecraft/init/Bootstrap", + "start": "569" + }, + { + "access": "28", + "inner_class": "net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox", + "inner_name": "BehaviorDispenseShulkerBox", + "outer_class": "net/minecraft/init/Bootstrap", + "start": "576" + } + ] + }, + "net/minecraft/init/Bootstrap$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$1", + "start": "87" + } + ] + }, + "net/minecraft/init/Bootstrap$10": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$10", + "start": "210" + } + ] + }, + "net/minecraft/init/Bootstrap$11": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$11", + "start": "232" + } + ] + }, + "net/minecraft/init/Bootstrap$12": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$12", + "start": "270" + } + ] + }, + "net/minecraft/init/Bootstrap$13": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$13", + "start": "288" + } + ] + }, + "net/minecraft/init/Bootstrap$14": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$14", + "start": "319" + } + ] + }, + "net/minecraft/init/Bootstrap$15": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$15", + "start": "346" + } + ] + }, + "net/minecraft/init/Bootstrap$16": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$16", + "start": "369" + } + ] + }, + "net/minecraft/init/Bootstrap$17": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$17", + "start": "384" + } + ] + }, + "net/minecraft/init/Bootstrap$18": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$18", + "start": "432" + } + ] + }, + "net/minecraft/init/Bootstrap$2": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$2", + "start": "96" + } + ] + }, + "net/minecraft/init/Bootstrap$3": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$3", + "start": "106" + } + ] + }, + "net/minecraft/init/Bootstrap$4": { + "enclosingMethod": { + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$4", + "start": "115" + } + ] + }, + "net/minecraft/init/Bootstrap$5": { + "enclosingMethod": { + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$5", + "start": "121" + } + ] + }, + "net/minecraft/init/Bootstrap$6": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$6", + "start": "127" + } + ] + }, + "net/minecraft/init/Bootstrap$7": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$7", + "start": "144" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$7$1", + "start": "147" + } + ] + }, + "net/minecraft/init/Bootstrap$7$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/dispenser/IBlockSource;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack;", + "name": "func_82482_a", + "owner": "net/minecraft/init/Bootstrap$7" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$7$1", + "start": "147" + } + ] + }, + "net/minecraft/init/Bootstrap$8": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$8", + "start": "166" + }, + { + "inner_class": "net/minecraft/init/Bootstrap$8$1", + "start": "169" + } + ] + }, + "net/minecraft/init/Bootstrap$8$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/dispenser/IBlockSource;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack;", + "name": "func_82482_a", + "owner": "net/minecraft/init/Bootstrap$8" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$8$1", + "start": "169" + } + ] + }, + "net/minecraft/init/Bootstrap$9": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151353_a", + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/init/Bootstrap$9", + "start": "188" + } + ] + }, + "net/minecraft/init/Bootstrap$BehaviorDispenseBoat": { + "enclosingMethod": { + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/init/Bootstrap$BehaviorDispenseBoat", + "inner_name": "BehaviorDispenseBoat", + "outer_class": "net/minecraft/init/Bootstrap", + "start": "529" + } + ] + }, + "net/minecraft/init/Bootstrap$BehaviorDispenseOptional": { + "enclosingMethod": { + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/init/Bootstrap$BehaviorDispenseOptional", + "inner_name": "BehaviorDispenseOptional", + "outer_class": "net/minecraft/init/Bootstrap", + "start": "569" + } + ] + }, + "net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox": { + "enclosingMethod": { + "owner": "net/minecraft/init/Bootstrap" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox", + "inner_name": "BehaviorDispenseShulkerBox", + "outer_class": "net/minecraft/init/Bootstrap", + "start": "576" + } + ] + }, + "net/minecraft/inventory/ContainerBeacon": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/inventory/ContainerBeacon$BeaconSlot", + "inner_name": "BeaconSlot", + "outer_class": "net/minecraft/inventory/ContainerBeacon", + "start": "122" + } + ] + }, + "net/minecraft/inventory/ContainerBeacon$BeaconSlot": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerBeacon" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/inventory/ContainerBeacon$BeaconSlot", + "inner_name": "BeaconSlot", + "outer_class": "net/minecraft/inventory/ContainerBeacon", + "start": "122" + } + ] + }, + "net/minecraft/inventory/ContainerBrewingStand": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/inventory/ContainerBrewingStand$Potion", + "inner_name": "Potion", + "outer_class": "net/minecraft/inventory/ContainerBrewingStand", + "start": "143" + }, + { + "access": "28", + "inner_class": "net/minecraft/inventory/ContainerBrewingStand$Ingredient", + "inner_name": "Ingredient", + "outer_class": "net/minecraft/inventory/ContainerBrewingStand", + "start": "174" + }, + { + "access": "28", + "inner_class": "net/minecraft/inventory/ContainerBrewingStand$Fuel", + "inner_name": "Fuel", + "outer_class": "net/minecraft/inventory/ContainerBrewingStand", + "start": "190" + } + ] + }, + "net/minecraft/inventory/ContainerBrewingStand$Fuel": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerBrewingStand" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/inventory/ContainerBrewingStand$Fuel", + "inner_name": "Fuel", + "outer_class": "net/minecraft/inventory/ContainerBrewingStand", + "start": "190" + } + ] + }, + "net/minecraft/inventory/ContainerBrewingStand$Ingredient": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerBrewingStand" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/inventory/ContainerBrewingStand$Ingredient", + "inner_name": "Ingredient", + "outer_class": "net/minecraft/inventory/ContainerBrewingStand", + "start": "174" + } + ] + }, + "net/minecraft/inventory/ContainerBrewingStand$Potion": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerBrewingStand" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/inventory/ContainerBrewingStand$Potion", + "inner_name": "Potion", + "outer_class": "net/minecraft/inventory/ContainerBrewingStand", + "start": "143" + } + ] + }, + "net/minecraft/inventory/ContainerEnchantment": { + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerEnchantment$1", + "start": "30" + }, + { + "inner_class": "net/minecraft/inventory/ContainerEnchantment$2", + "start": "63" + }, + { + "inner_class": "net/minecraft/inventory/ContainerEnchantment$3", + "start": "75" + } + ] + }, + "net/minecraft/inventory/ContainerEnchantment$1": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerEnchantment" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerEnchantment$1", + "start": "30" + } + ] + }, + "net/minecraft/inventory/ContainerEnchantment$2": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerEnchantment" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerEnchantment$2", + "start": "63" + } + ] + }, + "net/minecraft/inventory/ContainerEnchantment$3": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerEnchantment" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerEnchantment$3", + "start": "75" + } + ] + }, + "net/minecraft/inventory/ContainerHorseInventory": { + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerHorseInventory$1", + "start": "26" + }, + { + "inner_class": "net/minecraft/inventory/ContainerHorseInventory$2", + "start": "38" + } + ] + }, + "net/minecraft/inventory/ContainerHorseInventory$1": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerHorseInventory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerHorseInventory$1", + "start": "26" + } + ] + }, + "net/minecraft/inventory/ContainerHorseInventory$2": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerHorseInventory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerHorseInventory$2", + "start": "38" + } + ] + }, + "net/minecraft/inventory/ContainerPlayer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerPlayer$1", + "start": "53" + }, + { + "inner_class": "net/minecraft/inventory/ContainerPlayer$2", + "start": "90" + } + ] + }, + "net/minecraft/inventory/ContainerPlayer$1": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerPlayer$1", + "start": "53" + } + ] + }, + "net/minecraft/inventory/ContainerPlayer$2": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerPlayer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerPlayer$2", + "start": "90" + } + ] + }, + "net/minecraft/inventory/ContainerRepair": { + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerRepair$1", + "start": "44" + }, + { + "inner_class": "net/minecraft/inventory/ContainerRepair$2", + "start": "90" + }, + { + "access": "1018", + "inner_class": "net/minecraft/inventory/ContainerRepair$3", + "inner_name": "3", + "outer_class": "net/minecraft/inventory/ContainerRepair" + } + ] + }, + "net/minecraft/inventory/ContainerRepair$1": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerRepair" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerRepair$1", + "start": "44" + } + ] + }, + "net/minecraft/inventory/ContainerRepair$2": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerRepair" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/inventory/ContainerRepair$2", + "start": "90" + } + ] + }, + "net/minecraft/inventory/ContainerRepair$3": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/ContainerRepair" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/inventory/ContainerRepair$3", + "inner_name": "3", + "outer_class": "net/minecraft/inventory/ContainerRepair" + } + ] + }, + "net/minecraft/inventory/EntityEquipmentSlot": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/inventory/EntityEquipmentSlot$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/inventory/EntityEquipmentSlot", + "start": "39" + } + ] + }, + "net/minecraft/inventory/EntityEquipmentSlot$Type": { + "enclosingMethod": { + "owner": "net/minecraft/inventory/EntityEquipmentSlot" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/inventory/EntityEquipmentSlot$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/inventory/EntityEquipmentSlot", + "start": "39" + } + ] + }, + "net/minecraft/item/Item": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$1", + "start": "68" + }, + { + "inner_class": "net/minecraft/item/Item$2", + "start": "74" + }, + { + "inner_class": "net/minecraft/item/Item$3", + "start": "80" + }, + { + "inner_class": "net/minecraft/item/Item$4", + "start": "86" + }, + { + "access": "4029", + "inner_class": "net/minecraft/item/Item$ToolMaterial", + "inner_name": "ToolMaterial", + "outer_class": "net/minecraft/item/Item", + "start": "141" + }, + { + "inner_class": "net/minecraft/item/Item$5", + "start": "462" + }, + { + "inner_class": "net/minecraft/item/Item$6", + "start": "469" + }, + { + "inner_class": "net/minecraft/item/Item$7", + "start": "476" + }, + { + "inner_class": "net/minecraft/item/Item$8", + "start": "482" + }, + { + "inner_class": "net/minecraft/item/Item$9", + "start": "489" + }, + { + "inner_class": "net/minecraft/item/Item$10", + "start": "499" + }, + { + "inner_class": "net/minecraft/item/Item$11", + "start": "505" + }, + { + "inner_class": "net/minecraft/item/Item$12", + "start": "513" + }, + { + "inner_class": "net/minecraft/item/Item$13", + "start": "523" + }, + { + "inner_class": "net/minecraft/item/Item$14", + "start": "538" + }, + { + "inner_class": "net/minecraft/item/Item$15", + "start": "544" + }, + { + "inner_class": "net/minecraft/item/Item$16", + "start": "603" + }, + { + "inner_class": "net/minecraft/item/Item$17", + "start": "609" + }, + { + "inner_class": "net/minecraft/item/Item$18", + "start": "651" + }, + { + "inner_class": "net/minecraft/item/Item$19", + "start": "682" + }, + { + "inner_class": "net/minecraft/item/Item$20", + "start": "690" + }, + { + "inner_class": "net/minecraft/item/Item$21", + "start": "697" + } + ] + }, + "net/minecraft/item/Item$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$1", + "start": "68" + } + ] + }, + "net/minecraft/item/Item$10": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$10", + "start": "499" + } + ] + }, + "net/minecraft/item/Item$11": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$11", + "start": "505" + } + ] + }, + "net/minecraft/item/Item$12": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$12", + "start": "513" + } + ] + }, + "net/minecraft/item/Item$13": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$13", + "start": "523" + } + ] + }, + "net/minecraft/item/Item$14": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$14", + "start": "538" + } + ] + }, + "net/minecraft/item/Item$15": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$15", + "start": "544" + } + ] + }, + "net/minecraft/item/Item$16": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$16", + "start": "603" + } + ] + }, + "net/minecraft/item/Item$17": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$17", + "start": "609" + } + ] + }, + "net/minecraft/item/Item$18": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$18", + "start": "651" + } + ] + }, + "net/minecraft/item/Item$19": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$19", + "start": "682" + } + ] + }, + "net/minecraft/item/Item$2": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$2", + "start": "74" + } + ] + }, + "net/minecraft/item/Item$20": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$20", + "start": "690" + } + ] + }, + "net/minecraft/item/Item$21": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$21", + "start": "697" + } + ] + }, + "net/minecraft/item/Item$3": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$3", + "start": "80" + } + ] + }, + "net/minecraft/item/Item$4": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$4", + "start": "86" + } + ] + }, + "net/minecraft/item/Item$5": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$5", + "start": "462" + } + ] + }, + "net/minecraft/item/Item$6": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$6", + "start": "469" + } + ] + }, + "net/minecraft/item/Item$7": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$7", + "start": "476" + } + ] + }, + "net/minecraft/item/Item$8": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$8", + "start": "482" + } + ] + }, + "net/minecraft/item/Item$9": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/Item$9", + "start": "489" + } + ] + }, + "net/minecraft/item/Item$ToolMaterial": { + "enclosingMethod": { + "owner": "net/minecraft/item/Item" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/item/Item$ToolMaterial", + "inner_name": "ToolMaterial", + "outer_class": "net/minecraft/item/Item", + "start": "141" + } + ] + }, + "net/minecraft/item/ItemArmor": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemArmor$1", + "start": "52" + }, + { + "access": "4029", + "inner_class": "net/minecraft/item/ItemArmor$ArmorMaterial", + "inner_name": "ArmorMaterial", + "outer_class": "net/minecraft/item/ItemArmor", + "start": "86" + } + ] + }, + "net/minecraft/item/ItemArmor$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemArmor" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemArmor$1", + "start": "52" + } + ] + }, + "net/minecraft/item/ItemArmor$ArmorMaterial": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemArmor" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/item/ItemArmor$ArmorMaterial", + "inner_name": "ArmorMaterial", + "outer_class": "net/minecraft/item/ItemArmor", + "start": "86" + } + ] + }, + "net/minecraft/item/ItemBow": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemBow$1", + "start": "33" + }, + { + "inner_class": "net/minecraft/item/ItemBow$2", + "start": "49" + } + ] + }, + "net/minecraft/item/ItemBow$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemBow" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemBow$1", + "start": "33" + } + ] + }, + "net/minecraft/item/ItemBow$2": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemBow" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemBow$2", + "start": "49" + } + ] + }, + "net/minecraft/item/ItemClock": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemClock$1", + "start": "22" + } + ] + }, + "net/minecraft/item/ItemClock$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemClock" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemClock$1", + "start": "22" + } + ] + }, + "net/minecraft/item/ItemCompass": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemCompass$1", + "start": "24" + } + ] + }, + "net/minecraft/item/ItemCompass$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemCompass" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemCompass$1", + "start": "24" + } + ] + }, + "net/minecraft/item/ItemElytra": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemElytra$1", + "start": "27" + } + ] + }, + "net/minecraft/item/ItemElytra$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemElytra" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemElytra$1", + "start": "27" + } + ] + }, + "net/minecraft/item/ItemFishFood": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/item/ItemFishFood$FishType", + "inner_name": "FishType", + "outer_class": "net/minecraft/item/ItemFishFood", + "start": "75" + } + ] + }, + "net/minecraft/item/ItemFishFood$FishType": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemFishFood" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/item/ItemFishFood$FishType", + "inner_name": "FishType", + "outer_class": "net/minecraft/item/ItemFishFood", + "start": "75" + } + ] + }, + "net/minecraft/item/ItemFishingRod": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemFishingRod$1", + "start": "29" + } + ] + }, + "net/minecraft/item/ItemFishingRod$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemFishingRod" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemFishingRod$1", + "start": "29" + } + ] + }, + "net/minecraft/item/ItemGlassBottle": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemGlassBottle$1", + "start": "30" + } + ] + }, + "net/minecraft/item/ItemGlassBottle$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/EnumHand;)Lnet/minecraft/util/ActionResult;", + "name": "func_77659_a", + "owner": "net/minecraft/item/ItemGlassBottle" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemGlassBottle$1", + "start": "30" + } + ] + }, + "net/minecraft/item/ItemHoe": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/item/ItemHoe$1", + "inner_name": "1", + "outer_class": "net/minecraft/item/ItemHoe" + } + ] + }, + "net/minecraft/item/ItemHoe$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemHoe" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/item/ItemHoe$1", + "inner_name": "1", + "outer_class": "net/minecraft/item/ItemHoe" + } + ] + }, + "net/minecraft/item/ItemMinecart": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemMinecart$1", + "start": "25" + } + ] + }, + "net/minecraft/item/ItemMinecart$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemMinecart" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemMinecart$1", + "start": "25" + } + ] + }, + "net/minecraft/item/ItemMultiTexture": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemMultiTexture$1", + "start": "28" + }, + { + "access": "609", + "inner_class": "net/minecraft/item/ItemMultiTexture$Mapper", + "inner_name": "Mapper", + "outer_class": "net/minecraft/item/ItemMultiTexture" + } + ] + }, + "net/minecraft/item/ItemMultiTexture$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemMultiTexture" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemMultiTexture$1", + "start": "28" + } + ] + }, + "net/minecraft/item/ItemMultiTexture$Mapper": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemMultiTexture" + }, + "innerClasses": [ + { + "access": "609", + "inner_class": "net/minecraft/item/ItemMultiTexture$Mapper", + "inner_name": "Mapper", + "outer_class": "net/minecraft/item/ItemMultiTexture" + } + ] + }, + "net/minecraft/item/ItemShield": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemShield$1", + "start": "32" + } + ] + }, + "net/minecraft/item/ItemShield$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/ItemShield" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/ItemShield$1", + "start": "32" + } + ] + }, + "net/minecraft/item/crafting/Ingredient": { + "innerClasses": [ + { + "inner_class": "net/minecraft/item/crafting/Ingredient$1", + "start": "15" + } + ] + }, + "net/minecraft/item/crafting/Ingredient$1": { + "enclosingMethod": { + "owner": "net/minecraft/item/crafting/Ingredient" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/item/crafting/Ingredient$1", + "start": "15" + } + ] + }, + "net/minecraft/item/crafting/RecipesBanners": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern", + "inner_name": "RecipeDuplicatePattern", + "outer_class": "net/minecraft/item/crafting/RecipesBanners", + "start": "24" + }, + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern", + "inner_name": "RecipeAddPattern", + "outer_class": "net/minecraft/item/crafting/RecipesBanners", + "start": "138" + } + ] + }, + "net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern": { + "enclosingMethod": { + "owner": "net/minecraft/item/crafting/RecipesBanners" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern", + "inner_name": "RecipeAddPattern", + "outer_class": "net/minecraft/item/crafting/RecipesBanners", + "start": "138" + } + ] + }, + "net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern": { + "enclosingMethod": { + "owner": "net/minecraft/item/crafting/RecipesBanners" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern", + "inner_name": "RecipeDuplicatePattern", + "outer_class": "net/minecraft/item/crafting/RecipesBanners", + "start": "24" + } + ] + }, + "net/minecraft/item/crafting/ShieldRecipes": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/ShieldRecipes$Decoration", + "inner_name": "Decoration", + "outer_class": "net/minecraft/item/crafting/ShieldRecipes", + "start": "16" + } + ] + }, + "net/minecraft/item/crafting/ShieldRecipes$Decoration": { + "enclosingMethod": { + "owner": "net/minecraft/item/crafting/ShieldRecipes" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/ShieldRecipes$Decoration", + "inner_name": "Decoration", + "outer_class": "net/minecraft/item/crafting/ShieldRecipes", + "start": "16" + } + ] + }, + "net/minecraft/item/crafting/ShulkerBoxRecipes": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring", + "inner_name": "ShulkerBoxColoring", + "outer_class": "net/minecraft/item/crafting/ShulkerBoxRecipes", + "start": "16" + } + ] + }, + "net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring": { + "enclosingMethod": { + "owner": "net/minecraft/item/crafting/ShulkerBoxRecipes" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring", + "inner_name": "ShulkerBoxColoring", + "outer_class": "net/minecraft/item/crafting/ShulkerBoxRecipes", + "start": "16" + } + ] + }, + "net/minecraft/nbt/NBTSizeTracker": { + "innerClasses": [ + { + "inner_class": "net/minecraft/nbt/NBTSizeTracker$1", + "start": "8" + } + ] + }, + "net/minecraft/nbt/NBTSizeTracker$1": { + "enclosingMethod": { + "owner": "net/minecraft/nbt/NBTSizeTracker" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/nbt/NBTSizeTracker$1", + "start": "8" + } + ] + }, + "net/minecraft/nbt/NBTTagCompound": { + "innerClasses": [ + { + "inner_class": "net/minecraft/nbt/NBTTagCompound$1", + "start": "381" + }, + { + "inner_class": "net/minecraft/nbt/NBTTagCompound$2", + "start": "387" + } + ] + }, + "net/minecraft/nbt/NBTTagCompound$1": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;ILjava/lang/ClassCastException;)Lnet/minecraft/crash/CrashReport;", + "name": "func_82581_a", + "owner": "net/minecraft/nbt/NBTTagCompound" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/nbt/NBTTagCompound$1", + "start": "381" + } + ] + }, + "net/minecraft/nbt/NBTTagCompound$2": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;ILjava/lang/ClassCastException;)Lnet/minecraft/crash/CrashReport;", + "name": "func_82581_a", + "owner": "net/minecraft/nbt/NBTTagCompound" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/nbt/NBTTagCompound$2", + "start": "387" + } + ] + }, + "net/minecraft/network/EnumConnectionState": { + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$2" + }, + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$4" + }, + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$1" + }, + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$3" + } + ] + }, + "net/minecraft/network/EnumConnectionState$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/EnumConnectionState" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$1" + } + ] + }, + "net/minecraft/network/EnumConnectionState$2": { + "enclosingMethod": { + "owner": "net/minecraft/network/EnumConnectionState" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$2" + } + ] + }, + "net/minecraft/network/EnumConnectionState$3": { + "enclosingMethod": { + "owner": "net/minecraft/network/EnumConnectionState" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$3" + } + ] + }, + "net/minecraft/network/EnumConnectionState$4": { + "enclosingMethod": { + "owner": "net/minecraft/network/EnumConnectionState" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/network/EnumConnectionState$4" + } + ] + }, + "net/minecraft/network/NetHandlerPlayServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetHandlerPlayServer$1", + "start": "274" + }, + { + "inner_class": "net/minecraft/network/NetHandlerPlayServer$2", + "start": "281" + }, + { + "inner_class": "net/minecraft/network/NetHandlerPlayServer$3", + "start": "799" + }, + { + "access": "1018", + "inner_class": "net/minecraft/network/NetHandlerPlayServer$4", + "inner_name": "4", + "outer_class": "net/minecraft/network/NetHandlerPlayServer" + } + ] + }, + "net/minecraft/network/NetHandlerPlayServer$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/text/ITextComponent;)V", + "name": "func_194028_b", + "owner": "net/minecraft/network/NetHandlerPlayServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetHandlerPlayServer$1", + "start": "274" + } + ] + }, + "net/minecraft/network/NetHandlerPlayServer$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/text/ITextComponent;)V", + "name": "func_194028_b", + "owner": "net/minecraft/network/NetHandlerPlayServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetHandlerPlayServer$2", + "start": "281" + } + ] + }, + "net/minecraft/network/NetHandlerPlayServer$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/network/Packet;)V", + "name": "func_147359_a", + "owner": "net/minecraft/network/NetHandlerPlayServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetHandlerPlayServer$3", + "start": "799" + } + ] + }, + "net/minecraft/network/NetHandlerPlayServer$4": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetHandlerPlayServer" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/network/NetHandlerPlayServer$4", + "inner_name": "4", + "outer_class": "net/minecraft/network/NetHandlerPlayServer" + } + ] + }, + "net/minecraft/network/NetworkManager": { + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$1", + "start": "58" + }, + { + "inner_class": "net/minecraft/network/NetworkManager$2", + "start": "64" + }, + { + "inner_class": "net/minecraft/network/NetworkManager$3", + "start": "70" + }, + { + "inner_class": "net/minecraft/network/NetworkManager$4", + "start": "198" + }, + { + "inner_class": "net/minecraft/network/NetworkManager$5", + "start": "280" + }, + { + "inner_class": "net/minecraft/network/NetworkManager$6", + "start": "310" + }, + { + "access": "28", + "inner_class": "net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener", + "inner_name": "InboundHandlerTuplePacketListener", + "outer_class": "net/minecraft/network/NetworkManager", + "start": "388" + } + ] + }, + "net/minecraft/network/NetworkManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$1", + "start": "58" + } + ] + }, + "net/minecraft/network/NetworkManager$2": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$2", + "start": "64" + } + ] + }, + "net/minecraft/network/NetworkManager$3": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$3", + "start": "70" + } + ] + }, + "net/minecraft/network/NetworkManager$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/network/Packet;[Lio/netty/util/concurrent/GenericFutureListener;)V", + "name": "func_150732_b", + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$4", + "start": "198" + } + ] + }, + "net/minecraft/network/NetworkManager$5": { + "enclosingMethod": { + "desc": "(Ljava/net/InetAddress;IZ)Lnet/minecraft/network/NetworkManager;", + "name": "func_181124_a", + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$5", + "start": "280" + } + ] + }, + "net/minecraft/network/NetworkManager$6": { + "enclosingMethod": { + "desc": "(Ljava/net/SocketAddress;)Lnet/minecraft/network/NetworkManager;", + "name": "func_150722_a", + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkManager$6", + "start": "310" + } + ] + }, + "net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkManager" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener", + "inner_name": "InboundHandlerTuplePacketListener", + "outer_class": "net/minecraft/network/NetworkManager", + "start": "388" + } + ] + }, + "net/minecraft/network/NetworkSystem": { + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$1", + "start": "58" + }, + { + "inner_class": "net/minecraft/network/NetworkSystem$2", + "start": "64" + }, + { + "inner_class": "net/minecraft/network/NetworkSystem$3", + "start": "70" + }, + { + "inner_class": "net/minecraft/network/NetworkSystem$4", + "start": "107" + }, + { + "inner_class": "net/minecraft/network/NetworkSystem$5", + "start": "143" + }, + { + "inner_class": "net/minecraft/network/NetworkSystem$6", + "start": "193" + }, + { + "inner_class": "net/minecraft/network/NetworkSystem$7", + "start": "207" + } + ] + }, + "net/minecraft/network/NetworkSystem$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$1", + "start": "58" + } + ] + }, + "net/minecraft/network/NetworkSystem$2": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$2", + "start": "64" + } + ] + }, + "net/minecraft/network/NetworkSystem$3": { + "enclosingMethod": { + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$3", + "start": "70" + } + ] + }, + "net/minecraft/network/NetworkSystem$4": { + "enclosingMethod": { + "desc": "(Ljava/net/InetAddress;I)V", + "name": "func_151265_a", + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$4", + "start": "107" + } + ] + }, + "net/minecraft/network/NetworkSystem$5": { + "enclosingMethod": { + "desc": "()Ljava/net/SocketAddress;", + "name": "func_151270_a", + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$5", + "start": "143" + } + ] + }, + "net/minecraft/network/NetworkSystem$6": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151269_c", + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$6", + "start": "193" + } + ] + }, + "net/minecraft/network/NetworkSystem$7": { + "enclosingMethod": { + "desc": "()V", + "name": "func_151269_c", + "owner": "net/minecraft/network/NetworkSystem" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/NetworkSystem$7", + "start": "207" + } + ] + }, + "net/minecraft/network/PacketThreadUtil": { + "innerClasses": [ + { + "inner_class": "net/minecraft/network/PacketThreadUtil$1", + "start": "13" + } + ] + }, + "net/minecraft/network/PacketThreadUtil$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/network/Packet;Lnet/minecraft/network/INetHandler;Lnet/minecraft/util/IThreadListener;)V", + "name": "func_180031_a", + "owner": "net/minecraft/network/PacketThreadUtil" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/PacketThreadUtil$1", + "start": "13" + } + ] + }, + "net/minecraft/network/ServerStatusResponse": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Players", + "inner_name": "Players", + "outer_class": "net/minecraft/network/ServerStatusResponse", + "start": "70" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Version", + "inner_name": "Version", + "outer_class": "net/minecraft/network/ServerStatusResponse", + "start": "143" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/network/ServerStatusResponse", + "start": "167" + } + ] + }, + "net/minecraft/network/ServerStatusResponse$Players": { + "enclosingMethod": { + "owner": "net/minecraft/network/ServerStatusResponse" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Players", + "inner_name": "Players", + "outer_class": "net/minecraft/network/ServerStatusResponse", + "start": "70" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Players$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/network/ServerStatusResponse$Players", + "start": "85" + } + ] + }, + "net/minecraft/network/ServerStatusResponse$Players$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/network/ServerStatusResponse$Players" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Players$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/network/ServerStatusResponse$Players", + "start": "85" + } + ] + }, + "net/minecraft/network/ServerStatusResponse$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/network/ServerStatusResponse" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/network/ServerStatusResponse", + "start": "167" + } + ] + }, + "net/minecraft/network/ServerStatusResponse$Version": { + "enclosingMethod": { + "owner": "net/minecraft/network/ServerStatusResponse" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Version", + "inner_name": "Version", + "outer_class": "net/minecraft/network/ServerStatusResponse", + "start": "143" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Version$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/network/ServerStatusResponse$Version", + "start": "150" + } + ] + }, + "net/minecraft/network/ServerStatusResponse$Version$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/network/ServerStatusResponse$Version" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/ServerStatusResponse$Version$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/network/ServerStatusResponse$Version", + "start": "150" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers": { + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$1", + "start": "21" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$2", + "start": "43" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$3", + "start": "65" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$4", + "start": "87" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$5", + "start": "109" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$6", + "start": "131" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$7", + "start": "153" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$8", + "start": "184" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$9", + "start": "206" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$10", + "start": "230" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$11", + "start": "252" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$12", + "start": "280" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$13", + "start": "302" + }, + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$14", + "start": "330" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$1", + "start": "21" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$10": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$10", + "start": "230" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$11": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$11", + "start": "252" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$12": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$12", + "start": "280" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$13": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$13", + "start": "302" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$14": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$14", + "start": "330" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$2": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$2", + "start": "43" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$3": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$3", + "start": "65" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$4": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$4", + "start": "87" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$5": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$5", + "start": "109" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$6": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$6", + "start": "131" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$7": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$7", + "start": "153" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$8": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$8", + "start": "184" + } + ] + }, + "net/minecraft/network/datasync/DataSerializers$9": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/DataSerializers" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/network/datasync/DataSerializers$9", + "start": "206" + } + ] + }, + "net/minecraft/network/datasync/EntityDataManager": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/datasync/EntityDataManager$DataEntry", + "inner_name": "DataEntry", + "outer_class": "net/minecraft/network/datasync/EntityDataManager", + "start": "269" + } + ] + }, + "net/minecraft/network/datasync/EntityDataManager$DataEntry": { + "enclosingMethod": { + "owner": "net/minecraft/network/datasync/EntityDataManager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/datasync/EntityDataManager$DataEntry", + "inner_name": "DataEntry", + "outer_class": "net/minecraft/network/datasync/EntityDataManager", + "start": "269" + } + ] + }, + "net/minecraft/network/play/client/CPacketClientStatus": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketClientStatus$State", + "inner_name": "State", + "outer_class": "net/minecraft/network/play/client/CPacketClientStatus", + "start": "38" + } + ] + }, + "net/minecraft/network/play/client/CPacketClientStatus$State": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketClientStatus" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketClientStatus$State", + "inner_name": "State", + "outer_class": "net/minecraft/network/play/client/CPacketClientStatus", + "start": "38" + } + ] + }, + "net/minecraft/network/play/client/CPacketEntityAction": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketEntityAction$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketEntityAction", + "start": "58" + } + ] + }, + "net/minecraft/network/play/client/CPacketEntityAction$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketEntityAction" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketEntityAction$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketEntityAction", + "start": "58" + } + ] + }, + "net/minecraft/network/play/client/CPacketPlayer": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/client/CPacketPlayer$PositionRotation", + "inner_name": "PositionRotation", + "outer_class": "net/minecraft/network/play/client/CPacketPlayer", + "start": "18" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/play/client/CPacketPlayer$Position", + "inner_name": "Position", + "outer_class": "net/minecraft/network/play/client/CPacketPlayer", + "start": "57" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/play/client/CPacketPlayer$Rotation", + "inner_name": "Rotation", + "outer_class": "net/minecraft/network/play/client/CPacketPlayer", + "start": "88" + } + ] + }, + "net/minecraft/network/play/client/CPacketPlayer$Position": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketPlayer" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/client/CPacketPlayer$Position", + "inner_name": "Position", + "outer_class": "net/minecraft/network/play/client/CPacketPlayer", + "start": "57" + } + ] + }, + "net/minecraft/network/play/client/CPacketPlayer$PositionRotation": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketPlayer" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/client/CPacketPlayer$PositionRotation", + "inner_name": "PositionRotation", + "outer_class": "net/minecraft/network/play/client/CPacketPlayer", + "start": "18" + } + ] + }, + "net/minecraft/network/play/client/CPacketPlayer$Rotation": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketPlayer" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/client/CPacketPlayer$Rotation", + "inner_name": "Rotation", + "outer_class": "net/minecraft/network/play/client/CPacketPlayer", + "start": "88" + } + ] + }, + "net/minecraft/network/play/client/CPacketPlayerDigging": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketPlayerDigging$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketPlayerDigging", + "start": "55" + } + ] + }, + "net/minecraft/network/play/client/CPacketPlayerDigging$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketPlayerDigging" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketPlayerDigging$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketPlayerDigging", + "start": "55" + } + ] + }, + "net/minecraft/network/play/client/CPacketRecipeInfo": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketRecipeInfo$Purpose", + "inner_name": "Purpose", + "outer_class": "net/minecraft/network/play/client/CPacketRecipeInfo", + "start": "11" + } + ] + }, + "net/minecraft/network/play/client/CPacketRecipeInfo$Purpose": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketRecipeInfo" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketRecipeInfo$Purpose", + "inner_name": "Purpose", + "outer_class": "net/minecraft/network/play/client/CPacketRecipeInfo", + "start": "11" + } + ] + }, + "net/minecraft/network/play/client/CPacketResourcePackStatus": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketResourcePackStatus$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketResourcePackStatus", + "start": "38" + } + ] + }, + "net/minecraft/network/play/client/CPacketResourcePackStatus$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketResourcePackStatus" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketResourcePackStatus$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketResourcePackStatus", + "start": "38" + } + ] + }, + "net/minecraft/network/play/client/CPacketSeenAdvancements": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketSeenAdvancements$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketSeenAdvancements", + "start": "61" + } + ] + }, + "net/minecraft/network/play/client/CPacketSeenAdvancements$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketSeenAdvancements" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketSeenAdvancements$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketSeenAdvancements", + "start": "61" + } + ] + }, + "net/minecraft/network/play/client/CPacketUseEntity": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketUseEntity$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketUseEntity", + "start": "89" + } + ] + }, + "net/minecraft/network/play/client/CPacketUseEntity$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/client/CPacketUseEntity" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/client/CPacketUseEntity$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/client/CPacketUseEntity", + "start": "89" + } + ] + }, + "net/minecraft/network/play/server/SPacketCombatEvent": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketCombatEvent$Event", + "inner_name": "Event", + "outer_class": "net/minecraft/network/play/server/SPacketCombatEvent", + "start": "13" + }, + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketCombatEvent$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketCombatEvent" + } + ] + }, + "net/minecraft/network/play/server/SPacketCombatEvent$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketCombatEvent" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketCombatEvent$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketCombatEvent" + } + ] + }, + "net/minecraft/network/play/server/SPacketCombatEvent$Event": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketCombatEvent" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketCombatEvent$Event", + "inner_name": "Event", + "outer_class": "net/minecraft/network/play/server/SPacketCombatEvent", + "start": "13" + } + ] + }, + "net/minecraft/network/play/server/SPacketEntity": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove", + "inner_name": "S17PacketEntityLookMove", + "outer_class": "net/minecraft/network/play/server/SPacketEntity", + "start": "25" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove", + "inner_name": "S15PacketEntityRelMove", + "outer_class": "net/minecraft/network/play/server/SPacketEntity", + "start": "67" + }, + { + "access": "29", + "inner_class": "net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook", + "inner_name": "S16PacketEntityLook", + "outer_class": "net/minecraft/network/play/server/SPacketEntity", + "start": "101" + } + ] + }, + "net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketEntity" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove", + "inner_name": "S15PacketEntityRelMove", + "outer_class": "net/minecraft/network/play/server/SPacketEntity", + "start": "67" + } + ] + }, + "net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketEntity" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook", + "inner_name": "S16PacketEntityLook", + "outer_class": "net/minecraft/network/play/server/SPacketEntity", + "start": "101" + } + ] + }, + "net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketEntity" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove", + "inner_name": "S17PacketEntityLookMove", + "outer_class": "net/minecraft/network/play/server/SPacketEntity", + "start": "25" + } + ] + }, + "net/minecraft/network/play/server/SPacketEntityProperties": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/network/play/server/SPacketEntityProperties$Snapshot", + "inner_name": "Snapshot", + "outer_class": "net/minecraft/network/play/server/SPacketEntityProperties", + "start": "93" + } + ] + }, + "net/minecraft/network/play/server/SPacketEntityProperties$Snapshot": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketEntityProperties" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/network/play/server/SPacketEntityProperties$Snapshot", + "inner_name": "Snapshot", + "outer_class": "net/minecraft/network/play/server/SPacketEntityProperties", + "start": "93" + } + ] + }, + "net/minecraft/network/play/server/SPacketMultiBlockChange": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData", + "inner_name": "BlockUpdateData", + "outer_class": "net/minecraft/network/play/server/SPacketMultiBlockChange", + "start": "75" + } + ] + }, + "net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketMultiBlockChange" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData", + "inner_name": "BlockUpdateData", + "outer_class": "net/minecraft/network/play/server/SPacketMultiBlockChange", + "start": "75" + } + ] + }, + "net/minecraft/network/play/server/SPacketPlayerListItem": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerListItem$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerListItem", + "start": "164" + }, + { + "access": "21", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData", + "inner_name": "AddPlayerData", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerListItem", + "start": "195" + }, + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerListItem$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerListItem" + } + ] + }, + "net/minecraft/network/play/server/SPacketPlayerListItem$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketPlayerListItem" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerListItem$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerListItem" + } + ] + }, + "net/minecraft/network/play/server/SPacketPlayerListItem$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketPlayerListItem" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerListItem$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerListItem", + "start": "164" + } + ] + }, + "net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketPlayerListItem" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData", + "inner_name": "AddPlayerData", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerListItem", + "start": "195" + } + ] + }, + "net/minecraft/network/play/server/SPacketPlayerPosLook": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags", + "inner_name": "EnumFlags", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerPosLook", + "start": "88" + } + ] + }, + "net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketPlayerPosLook" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags", + "inner_name": "EnumFlags", + "outer_class": "net/minecraft/network/play/server/SPacketPlayerPosLook", + "start": "88" + } + ] + }, + "net/minecraft/network/play/server/SPacketRecipeBook": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketRecipeBook$State", + "inner_name": "State", + "outer_class": "net/minecraft/network/play/server/SPacketRecipeBook", + "start": "13" + } + ] + }, + "net/minecraft/network/play/server/SPacketRecipeBook$State": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketRecipeBook" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketRecipeBook$State", + "inner_name": "State", + "outer_class": "net/minecraft/network/play/server/SPacketRecipeBook", + "start": "13" + } + ] + }, + "net/minecraft/network/play/server/SPacketTitle": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketTitle$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/network/play/server/SPacketTitle", + "start": "89" + } + ] + }, + "net/minecraft/network/play/server/SPacketTitle$Type": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketTitle" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketTitle$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/network/play/server/SPacketTitle", + "start": "89" + } + ] + }, + "net/minecraft/network/play/server/SPacketUpdateBossInfo": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation", + "inner_name": "Operation", + "outer_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo", + "start": "165" + }, + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo" + } + ] + }, + "net/minecraft/network/play/server/SPacketUpdateBossInfo$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketUpdateBossInfo" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo" + } + ] + }, + "net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketUpdateBossInfo" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation", + "inner_name": "Operation", + "outer_class": "net/minecraft/network/play/server/SPacketUpdateBossInfo", + "start": "165" + } + ] + }, + "net/minecraft/network/play/server/SPacketUpdateScore": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketUpdateScore$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/server/SPacketUpdateScore", + "start": "84" + } + ] + }, + "net/minecraft/network/play/server/SPacketUpdateScore$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketUpdateScore" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketUpdateScore$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/server/SPacketUpdateScore", + "start": "84" + } + ] + }, + "net/minecraft/network/play/server/SPacketWorldBorder": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketWorldBorder$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/server/SPacketWorldBorder", + "start": "146" + }, + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketWorldBorder$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketWorldBorder" + } + ] + }, + "net/minecraft/network/play/server/SPacketWorldBorder$1": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketWorldBorder" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/network/play/server/SPacketWorldBorder$1", + "inner_name": "1", + "outer_class": "net/minecraft/network/play/server/SPacketWorldBorder" + } + ] + }, + "net/minecraft/network/play/server/SPacketWorldBorder$Action": { + "enclosingMethod": { + "owner": "net/minecraft/network/play/server/SPacketWorldBorder" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/network/play/server/SPacketWorldBorder$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/network/play/server/SPacketWorldBorder", + "start": "146" + } + ] + }, + "net/minecraft/network/rcon/RConThreadQuery": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/network/rcon/RConThreadQuery$Auth", + "inner_name": "Auth", + "outer_class": "net/minecraft/network/rcon/RConThreadQuery", + "start": "360" + } + ] + }, + "net/minecraft/network/rcon/RConThreadQuery$Auth": { + "enclosingMethod": { + "owner": "net/minecraft/network/rcon/RConThreadQuery" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/network/rcon/RConThreadQuery$Auth", + "inner_name": "Auth", + "outer_class": "net/minecraft/network/rcon/RConThreadQuery", + "start": "360" + } + ] + }, + "net/minecraft/potion/PotionHelper": { + "innerClasses": [ + { + "inner_class": "net/minecraft/potion/PotionHelper$1", + "start": "21" + }, + { + "access": "29", + "inner_class": "net/minecraft/potion/PotionHelper$MixPredicate", + "inner_name": "MixPredicate", + "outer_class": "net/minecraft/potion/PotionHelper" + } + ] + }, + "net/minecraft/potion/PotionHelper$1": { + "enclosingMethod": { + "owner": "net/minecraft/potion/PotionHelper" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/potion/PotionHelper$1", + "start": "21" + } + ] + }, + "net/minecraft/potion/PotionHelper$MixPredicate": { + "enclosingMethod": { + "owner": "net/minecraft/potion/PotionHelper" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/potion/PotionHelper$MixPredicate", + "inner_name": "MixPredicate", + "outer_class": "net/minecraft/potion/PotionHelper" + } + ] + }, + "net/minecraft/profiler/Profiler": { + "innerClasses": [ + { + "access": "39", + "inner_class": "net/minecraft/profiler/Profiler$Result", + "inner_name": "Result", + "outer_class": "net/minecraft/profiler/Profiler", + "start": "21" + } + ] + }, + "net/minecraft/profiler/Profiler$Result": { + "enclosingMethod": { + "owner": "net/minecraft/profiler/Profiler" + }, + "innerClasses": [ + { + "access": "39", + "inner_class": "net/minecraft/profiler/Profiler$Result", + "inner_name": "Result", + "outer_class": "net/minecraft/profiler/Profiler", + "start": "21" + } + ] + }, + "net/minecraft/profiler/Snooper": { + "innerClasses": [ + { + "inner_class": "net/minecraft/profiler/Snooper$1", + "start": "57" + } + ] + }, + "net/minecraft/profiler/Snooper$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_76463_a", + "owner": "net/minecraft/profiler/Snooper" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/profiler/Snooper$1", + "start": "57" + } + ] + }, + "net/minecraft/realms/RealmsConnect": { + "innerClasses": [ + { + "inner_class": "net/minecraft/realms/RealmsConnect$1", + "start": "33" + } + ] + }, + "net/minecraft/realms/RealmsConnect$1": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;I)V", + "name": "connect", + "owner": "net/minecraft/realms/RealmsConnect" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/realms/RealmsConnect$1", + "start": "33" + } + ] + }, + "net/minecraft/scoreboard/IScoreCriteria": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/scoreboard/IScoreCriteria$EnumRenderType", + "inner_name": "EnumRenderType", + "outer_class": "net/minecraft/scoreboard/IScoreCriteria", + "start": "47" + } + ] + }, + "net/minecraft/scoreboard/IScoreCriteria$EnumRenderType": { + "enclosingMethod": { + "owner": "net/minecraft/scoreboard/IScoreCriteria" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/scoreboard/IScoreCriteria$EnumRenderType", + "inner_name": "EnumRenderType", + "outer_class": "net/minecraft/scoreboard/IScoreCriteria", + "start": "47" + } + ] + }, + "net/minecraft/scoreboard/Score": { + "innerClasses": [ + { + "inner_class": "net/minecraft/scoreboard/Score$1", + "start": "6" + } + ] + }, + "net/minecraft/scoreboard/Score$1": { + "enclosingMethod": { + "owner": "net/minecraft/scoreboard/Score" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/scoreboard/Score$1", + "start": "6" + } + ] + }, + "net/minecraft/scoreboard/Team": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/scoreboard/Team$EnumVisible", + "inner_name": "EnumVisible", + "outer_class": "net/minecraft/scoreboard/Team", + "start": "41" + }, + { + "access": "4029", + "inner_class": "net/minecraft/scoreboard/Team$CollisionRule", + "inner_name": "CollisionRule", + "outer_class": "net/minecraft/scoreboard/Team", + "start": "73" + } + ] + }, + "net/minecraft/scoreboard/Team$CollisionRule": { + "enclosingMethod": { + "owner": "net/minecraft/scoreboard/Team" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/scoreboard/Team$CollisionRule", + "inner_name": "CollisionRule", + "outer_class": "net/minecraft/scoreboard/Team", + "start": "73" + } + ] + }, + "net/minecraft/scoreboard/Team$EnumVisible": { + "enclosingMethod": { + "owner": "net/minecraft/scoreboard/Team" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/scoreboard/Team$EnumVisible", + "inner_name": "EnumVisible", + "outer_class": "net/minecraft/scoreboard/Team", + "start": "41" + } + ] + }, + "net/minecraft/server/MinecraftServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/MinecraftServer$1", + "start": "203" + }, + { + "inner_class": "net/minecraft/server/MinecraftServer$2", + "start": "746" + }, + { + "inner_class": "net/minecraft/server/MinecraftServer$3", + "start": "822" + }, + { + "inner_class": "net/minecraft/server/MinecraftServer$4", + "start": "830" + } + ] + }, + "net/minecraft/server/MinecraftServer$1": { + "enclosingMethod": { + "desc": "(Ljava/lang/String;)V", + "name": "func_71237_c", + "owner": "net/minecraft/server/MinecraftServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/MinecraftServer$1", + "start": "203" + } + ] + }, + "net/minecraft/server/MinecraftServer$2": { + "enclosingMethod": { + "desc": "([Ljava/lang/String;)V", + "name": "main", + "owner": "net/minecraft/server/MinecraftServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/MinecraftServer$2", + "start": "746" + } + ] + }, + "net/minecraft/server/MinecraftServer$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71230_b", + "owner": "net/minecraft/server/MinecraftServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/MinecraftServer$3", + "start": "822" + } + ] + }, + "net/minecraft/server/MinecraftServer$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71230_b", + "owner": "net/minecraft/server/MinecraftServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/MinecraftServer$4", + "start": "830" + } + ] + }, + "net/minecraft/server/dedicated/DedicatedServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$1", + "start": "84" + }, + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$2", + "start": "97" + }, + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$3", + "start": "321" + }, + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$4", + "start": "332" + } + ] + }, + "net/minecraft/server/dedicated/DedicatedServer$1": { + "enclosingMethod": { + "owner": "net/minecraft/server/dedicated/DedicatedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$1", + "start": "84" + } + ] + }, + "net/minecraft/server/dedicated/DedicatedServer$2": { + "enclosingMethod": { + "desc": "()Z", + "name": "func_71197_b", + "owner": "net/minecraft/server/dedicated/DedicatedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$2", + "start": "97" + } + ] + }, + "net/minecraft/server/dedicated/DedicatedServer$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71230_b", + "owner": "net/minecraft/server/dedicated/DedicatedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$3", + "start": "321" + } + ] + }, + "net/minecraft/server/dedicated/DedicatedServer$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71230_b", + "owner": "net/minecraft/server/dedicated/DedicatedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/DedicatedServer$4", + "start": "332" + } + ] + }, + "net/minecraft/server/dedicated/ServerHangWatchdog": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/ServerHangWatchdog$1", + "start": "85" + } + ] + }, + "net/minecraft/server/dedicated/ServerHangWatchdog$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_180248_a", + "owner": "net/minecraft/server/dedicated/ServerHangWatchdog" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/dedicated/ServerHangWatchdog$1", + "start": "85" + } + ] + }, + "net/minecraft/server/gui/MinecraftServerGui": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$1", + "start": "54" + }, + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$2", + "start": "107" + }, + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$3", + "start": "118" + }, + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$4", + "start": "129" + }, + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$5", + "start": "145" + } + ] + }, + "net/minecraft/server/gui/MinecraftServerGui$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/dedicated/DedicatedServer;)V", + "name": "func_120016_a", + "owner": "net/minecraft/server/gui/MinecraftServerGui" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$1", + "start": "54" + } + ] + }, + "net/minecraft/server/gui/MinecraftServerGui$2": { + "enclosingMethod": { + "desc": "()Ljavax/swing/JComponent;", + "name": "func_120018_d", + "owner": "net/minecraft/server/gui/MinecraftServerGui" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$2", + "start": "107" + } + ] + }, + "net/minecraft/server/gui/MinecraftServerGui$3": { + "enclosingMethod": { + "owner": "net/minecraft/server/gui/MinecraftServerGui" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$3", + "start": "118" + } + ] + }, + "net/minecraft/server/gui/MinecraftServerGui$4": { + "enclosingMethod": { + "desc": "()Ljavax/swing/JComponent;", + "name": "func_120018_d", + "owner": "net/minecraft/server/gui/MinecraftServerGui" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$4", + "start": "129" + } + ] + }, + "net/minecraft/server/gui/MinecraftServerGui$5": { + "enclosingMethod": { + "desc": "(Ljavax/swing/JTextArea;Ljavax/swing/JScrollPane;Ljava/lang/String;)V", + "name": "func_164247_a", + "owner": "net/minecraft/server/gui/MinecraftServerGui" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/MinecraftServerGui$5", + "start": "145" + } + ] + }, + "net/minecraft/server/gui/StatsComponent": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/StatsComponent$1", + "start": "31" + } + ] + }, + "net/minecraft/server/gui/StatsComponent$1": { + "enclosingMethod": { + "owner": "net/minecraft/server/gui/StatsComponent" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/gui/StatsComponent$1", + "start": "31" + } + ] + }, + "net/minecraft/server/integrated/IntegratedServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/integrated/IntegratedServer$1", + "start": "240" + }, + { + "inner_class": "net/minecraft/server/integrated/IntegratedServer$2", + "start": "247" + }, + { + "inner_class": "net/minecraft/server/integrated/IntegratedServer$3", + "start": "336" + } + ] + }, + "net/minecraft/server/integrated/IntegratedServer$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71230_b", + "owner": "net/minecraft/server/integrated/IntegratedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/integrated/IntegratedServer$1", + "start": "240" + } + ] + }, + "net/minecraft/server/integrated/IntegratedServer$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReport;", + "name": "func_71230_b", + "owner": "net/minecraft/server/integrated/IntegratedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/integrated/IntegratedServer$2", + "start": "247" + } + ] + }, + "net/minecraft/server/integrated/IntegratedServer$3": { + "enclosingMethod": { + "desc": "()V", + "name": "func_71263_m", + "owner": "net/minecraft/server/integrated/IntegratedServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/integrated/IntegratedServer$3", + "start": "336" + } + ] + }, + "net/minecraft/server/management/PlayerChunkMap": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$1", + "start": "29" + }, + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$2", + "start": "35" + }, + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$3", + "start": "74" + }, + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$4", + "start": "122" + }, + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$5", + "start": "131" + } + ] + }, + "net/minecraft/server/management/PlayerChunkMap$1": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PlayerChunkMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$1", + "start": "29" + } + ] + }, + "net/minecraft/server/management/PlayerChunkMap$2": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PlayerChunkMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$2", + "start": "35" + } + ] + }, + "net/minecraft/server/management/PlayerChunkMap$3": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PlayerChunkMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$3", + "start": "74" + } + ] + }, + "net/minecraft/server/management/PlayerChunkMap$4": { + "enclosingMethod": { + "desc": "()V", + "name": "func_72693_b", + "owner": "net/minecraft/server/management/PlayerChunkMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$4", + "start": "122" + } + ] + }, + "net/minecraft/server/management/PlayerChunkMap$5": { + "enclosingMethod": { + "desc": "()V", + "name": "func_72693_b", + "owner": "net/minecraft/server/management/PlayerChunkMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerChunkMap$5", + "start": "131" + } + ] + }, + "net/minecraft/server/management/PlayerList": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerList$1", + "start": "230" + } + ] + }, + "net/minecraft/server/management/PlayerList$1": { + "enclosingMethod": { + "desc": "([Lnet/minecraft/world/WorldServer;)V", + "name": "func_72364_a", + "owner": "net/minecraft/server/management/PlayerList" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerList$1", + "start": "230" + } + ] + }, + "net/minecraft/server/management/PlayerProfileCache": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerProfileCache$1", + "start": "71" + }, + { + "access": "20", + "inner_class": "net/minecraft/server/management/PlayerProfileCache$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/server/management/PlayerProfileCache", + "start": "226" + }, + { + "access": "20", + "inner_class": "net/minecraft/server/management/PlayerProfileCache$ProfileEntry", + "inner_name": "ProfileEntry", + "outer_class": "net/minecraft/server/management/PlayerProfileCache", + "start": "272" + }, + { + "inner_class": "net/minecraft/server/management/PlayerProfileCache$2", + "start": "293" + } + ] + }, + "net/minecraft/server/management/PlayerProfileCache$1": { + "enclosingMethod": { + "desc": "(Lcom/mojang/authlib/GameProfileRepository;Ljava/lang/String;)Lcom/mojang/authlib/GameProfile;", + "name": "func_187319_a", + "owner": "net/minecraft/server/management/PlayerProfileCache" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerProfileCache$1", + "start": "71" + } + ] + }, + "net/minecraft/server/management/PlayerProfileCache$2": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PlayerProfileCache" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PlayerProfileCache$2", + "start": "293" + } + ] + }, + "net/minecraft/server/management/PlayerProfileCache$ProfileEntry": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PlayerProfileCache" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/server/management/PlayerProfileCache$ProfileEntry", + "inner_name": "ProfileEntry", + "outer_class": "net/minecraft/server/management/PlayerProfileCache", + "start": "272" + } + ] + }, + "net/minecraft/server/management/PlayerProfileCache$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PlayerProfileCache" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/server/management/PlayerProfileCache$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/server/management/PlayerProfileCache", + "start": "226" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$1", + "start": "54" + }, + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$2", + "start": "88" + }, + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$3", + "start": "173" + }, + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$4", + "start": "215" + }, + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$5", + "start": "258" + }, + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$6", + "start": "310" + }, + { + "access": "28", + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$ConversionError", + "inner_name": "ConversionError", + "outer_class": "net/minecraft/server/management/PreYggdrasilConverter" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/MinecraftServer;Ljava/util/Collection;Lcom/mojang/authlib/ProfileLookupCallback;)V", + "name": "func_152717_a", + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$1", + "start": "54" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/MinecraftServer;)Z", + "name": "func_152724_a", + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$2", + "start": "88" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/MinecraftServer;)Z", + "name": "func_152718_c", + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$3", + "start": "173" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/MinecraftServer;)Z", + "name": "func_152710_d", + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$4", + "start": "215" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$5": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/MinecraftServer;Ljava/lang/String;)Ljava/lang/String;", + "name": "func_187473_a", + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$5", + "start": "258" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$6": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/server/dedicated/DedicatedServer;Lnet/minecraft/server/dedicated/PropertyManager;)Z", + "name": "func_152723_a", + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$6", + "start": "310" + } + ] + }, + "net/minecraft/server/management/PreYggdrasilConverter$ConversionError": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/PreYggdrasilConverter" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/server/management/PreYggdrasilConverter$ConversionError", + "inner_name": "ConversionError", + "outer_class": "net/minecraft/server/management/PreYggdrasilConverter" + } + ] + }, + "net/minecraft/server/management/UserList": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/server/management/UserList$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/server/management/UserList", + "start": "155" + }, + { + "inner_class": "net/minecraft/server/management/UserList$1", + "start": "176" + } + ] + }, + "net/minecraft/server/management/UserList$1": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/UserList" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/management/UserList$1", + "start": "176" + } + ] + }, + "net/minecraft/server/management/UserList$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/server/management/UserList" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/server/management/UserList$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/server/management/UserList", + "start": "155" + } + ] + }, + "net/minecraft/server/network/NetHandlerHandshakeTCP": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/server/network/NetHandlerHandshakeTCP$1", + "inner_name": "1", + "outer_class": "net/minecraft/server/network/NetHandlerHandshakeTCP" + } + ] + }, + "net/minecraft/server/network/NetHandlerHandshakeTCP$1": { + "enclosingMethod": { + "owner": "net/minecraft/server/network/NetHandlerHandshakeTCP" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/server/network/NetHandlerHandshakeTCP$1", + "inner_name": "1", + "outer_class": "net/minecraft/server/network/NetHandlerHandshakeTCP" + } + ] + }, + "net/minecraft/server/network/NetHandlerLoginServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/server/network/NetHandlerLoginServer$1", + "start": "106" + }, + { + "inner_class": "net/minecraft/server/network/NetHandlerLoginServer$2", + "start": "170" + }, + { + "access": "4028", + "inner_class": "net/minecraft/server/network/NetHandlerLoginServer$LoginState", + "inner_name": "LoginState", + "outer_class": "net/minecraft/server/network/NetHandlerLoginServer", + "start": "212" + } + ] + }, + "net/minecraft/server/network/NetHandlerLoginServer$1": { + "enclosingMethod": { + "desc": "()V", + "name": "func_147326_c", + "owner": "net/minecraft/server/network/NetHandlerLoginServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/network/NetHandlerLoginServer$1", + "start": "106" + } + ] + }, + "net/minecraft/server/network/NetHandlerLoginServer$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/network/login/client/CPacketEncryptionResponse;)V", + "name": "func_147315_a", + "owner": "net/minecraft/server/network/NetHandlerLoginServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/server/network/NetHandlerLoginServer$2", + "start": "170" + } + ] + }, + "net/minecraft/server/network/NetHandlerLoginServer$LoginState": { + "enclosingMethod": { + "owner": "net/minecraft/server/network/NetHandlerLoginServer" + }, + "innerClasses": [ + { + "access": "4028", + "inner_class": "net/minecraft/server/network/NetHandlerLoginServer$LoginState", + "inner_name": "LoginState", + "outer_class": "net/minecraft/server/network/NetHandlerLoginServer", + "start": "212" + } + ] + }, + "net/minecraft/stats/StatBase": { + "innerClasses": [ + { + "inner_class": "net/minecraft/stats/StatBase$1", + "start": "57" + }, + { + "inner_class": "net/minecraft/stats/StatBase$2", + "start": "65" + }, + { + "inner_class": "net/minecraft/stats/StatBase$3", + "start": "87" + }, + { + "inner_class": "net/minecraft/stats/StatBase$4", + "start": "102" + } + ] + }, + "net/minecraft/stats/StatBase$1": { + "enclosingMethod": { + "owner": "net/minecraft/stats/StatBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/stats/StatBase$1", + "start": "57" + } + ] + }, + "net/minecraft/stats/StatBase$2": { + "enclosingMethod": { + "owner": "net/minecraft/stats/StatBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/stats/StatBase$2", + "start": "65" + } + ] + }, + "net/minecraft/stats/StatBase$3": { + "enclosingMethod": { + "owner": "net/minecraft/stats/StatBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/stats/StatBase$3", + "start": "87" + } + ] + }, + "net/minecraft/stats/StatBase$4": { + "enclosingMethod": { + "owner": "net/minecraft/stats/StatBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/stats/StatBase$4", + "start": "102" + } + ] + }, + "net/minecraft/tileentity/CommandBlockBaseLogic": { + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/CommandBlockBaseLogic$1", + "start": "130" + }, + { + "inner_class": "net/minecraft/tileentity/CommandBlockBaseLogic$2", + "start": "137" + } + ] + }, + "net/minecraft/tileentity/CommandBlockBaseLogic$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;)Z", + "name": "func_145755_a", + "owner": "net/minecraft/tileentity/CommandBlockBaseLogic" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/CommandBlockBaseLogic$1", + "start": "130" + } + ] + }, + "net/minecraft/tileentity/CommandBlockBaseLogic$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;)Z", + "name": "func_145755_a", + "owner": "net/minecraft/tileentity/CommandBlockBaseLogic" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/CommandBlockBaseLogic$2", + "start": "137" + } + ] + }, + "net/minecraft/tileentity/TileEntity": { + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntity$1", + "start": "217" + }, + { + "inner_class": "net/minecraft/tileentity/TileEntity$2", + "start": "230" + }, + { + "inner_class": "net/minecraft/tileentity/TileEntity$3", + "start": "242" + } + ] + }, + "net/minecraft/tileentity/TileEntity$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_145828_a", + "owner": "net/minecraft/tileentity/TileEntity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntity$1", + "start": "217" + } + ] + }, + "net/minecraft/tileentity/TileEntity$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_145828_a", + "owner": "net/minecraft/tileentity/TileEntity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntity$2", + "start": "230" + } + ] + }, + "net/minecraft/tileentity/TileEntity$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_145828_a", + "owner": "net/minecraft/tileentity/TileEntity" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntity$3", + "start": "242" + } + ] + }, + "net/minecraft/tileentity/TileEntityBeacon": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/tileentity/TileEntityBeacon$BeamSegment", + "inner_name": "BeamSegment", + "outer_class": "net/minecraft/tileentity/TileEntityBeacon", + "start": "496" + } + ] + }, + "net/minecraft/tileentity/TileEntityBeacon$BeamSegment": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityBeacon" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/tileentity/TileEntityBeacon$BeamSegment", + "inner_name": "BeamSegment", + "outer_class": "net/minecraft/tileentity/TileEntityBeacon", + "start": "496" + } + ] + }, + "net/minecraft/tileentity/TileEntityChest": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityChest$1", + "inner_name": "1", + "outer_class": "net/minecraft/tileentity/TileEntityChest" + } + ] + }, + "net/minecraft/tileentity/TileEntityChest$1": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityChest" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityChest$1", + "inner_name": "1", + "outer_class": "net/minecraft/tileentity/TileEntityChest" + } + ] + }, + "net/minecraft/tileentity/TileEntityCommandBlock": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/tileentity/TileEntityCommandBlock$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/tileentity/TileEntityCommandBlock", + "start": "146" + }, + { + "inner_class": "net/minecraft/tileentity/TileEntityCommandBlock$1", + "start": "155" + } + ] + }, + "net/minecraft/tileentity/TileEntityCommandBlock$1": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityCommandBlock" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityCommandBlock$1", + "start": "155" + } + ] + }, + "net/minecraft/tileentity/TileEntityCommandBlock$Mode": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityCommandBlock" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/tileentity/TileEntityCommandBlock$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/tileentity/TileEntityCommandBlock", + "start": "146" + } + ] + }, + "net/minecraft/tileentity/TileEntityMobSpawner": { + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityMobSpawner$1", + "start": "27" + }, + { + "inner_class": "net/minecraft/tileentity/TileEntityMobSpawner$2", + "start": "57" + } + ] + }, + "net/minecraft/tileentity/TileEntityMobSpawner$1": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityMobSpawner" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityMobSpawner$1", + "start": "27" + } + ] + }, + "net/minecraft/tileentity/TileEntityMobSpawner$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189684_a", + "owner": "net/minecraft/tileentity/TileEntityMobSpawner" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityMobSpawner$2", + "start": "57" + } + ] + }, + "net/minecraft/tileentity/TileEntityPiston": { + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityPiston$1", + "start": "33" + }, + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityPiston$2", + "inner_name": "2", + "outer_class": "net/minecraft/tileentity/TileEntityPiston" + } + ] + }, + "net/minecraft/tileentity/TileEntityPiston$1": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityPiston" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityPiston$1", + "start": "33" + } + ] + }, + "net/minecraft/tileentity/TileEntityPiston$2": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityPiston" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityPiston$2", + "inner_name": "2", + "outer_class": "net/minecraft/tileentity/TileEntityPiston" + } + ] + }, + "net/minecraft/tileentity/TileEntityShulkerBox": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus", + "inner_name": "AnimationStatus", + "outer_class": "net/minecraft/tileentity/TileEntityShulkerBox", + "start": "68" + }, + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityShulkerBox$1", + "inner_name": "1", + "outer_class": "net/minecraft/tileentity/TileEntityShulkerBox" + } + ] + }, + "net/minecraft/tileentity/TileEntityShulkerBox$1": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityShulkerBox" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityShulkerBox$1", + "inner_name": "1", + "outer_class": "net/minecraft/tileentity/TileEntityShulkerBox" + } + ] + }, + "net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityShulkerBox" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus", + "inner_name": "AnimationStatus", + "outer_class": "net/minecraft/tileentity/TileEntityShulkerBox", + "start": "68" + } + ] + }, + "net/minecraft/tileentity/TileEntitySign": { + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntitySign$1", + "start": "57" + }, + { + "inner_class": "net/minecraft/tileentity/TileEntitySign$2", + "start": "137" + } + ] + }, + "net/minecraft/tileentity/TileEntitySign$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/nbt/NBTTagCompound;)V", + "name": "func_145839_a", + "owner": "net/minecraft/tileentity/TileEntitySign" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntitySign$1", + "start": "57" + } + ] + }, + "net/minecraft/tileentity/TileEntitySign$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/entity/player/EntityPlayer;)Z", + "name": "func_174882_b", + "owner": "net/minecraft/tileentity/TileEntitySign" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntitySign$2", + "start": "137" + } + ] + }, + "net/minecraft/tileentity/TileEntityStructure": { + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityStructure$1", + "start": "296" + }, + { + "access": "4029", + "inner_class": "net/minecraft/tileentity/TileEntityStructure$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/tileentity/TileEntityStructure", + "start": "472" + }, + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityStructure$2", + "inner_name": "2", + "outer_class": "net/minecraft/tileentity/TileEntityStructure" + } + ] + }, + "net/minecraft/tileentity/TileEntityStructure$1": { + "enclosingMethod": { + "desc": "(Ljava/util/List;)Ljava/util/List;", + "name": "func_184415_a", + "owner": "net/minecraft/tileentity/TileEntityStructure" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/tileentity/TileEntityStructure$1", + "start": "296" + } + ] + }, + "net/minecraft/tileentity/TileEntityStructure$2": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityStructure" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/tileentity/TileEntityStructure$2", + "inner_name": "2", + "outer_class": "net/minecraft/tileentity/TileEntityStructure" + } + ] + }, + "net/minecraft/tileentity/TileEntityStructure$Mode": { + "enclosingMethod": { + "owner": "net/minecraft/tileentity/TileEntityStructure" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/tileentity/TileEntityStructure$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/tileentity/TileEntityStructure", + "start": "472" + } + ] + }, + "net/minecraft/util/ClassInheritanceMultiMap": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/ClassInheritanceMultiMap$1", + "start": "101" + } + ] + }, + "net/minecraft/util/ClassInheritanceMultiMap$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/ClassInheritanceMultiMap" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/ClassInheritanceMultiMap$1", + "start": "101" + } + ] + }, + "net/minecraft/util/CooldownTracker": { + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/util/CooldownTracker$1" + }, + { + "access": "20", + "inner_class": "net/minecraft/util/CooldownTracker$Cooldown", + "inner_name": "Cooldown", + "outer_class": "net/minecraft/util/CooldownTracker" + } + ] + }, + "net/minecraft/util/CooldownTracker$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/CooldownTracker" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/util/CooldownTracker$1" + } + ] + }, + "net/minecraft/util/CooldownTracker$Cooldown": { + "enclosingMethod": { + "owner": "net/minecraft/util/CooldownTracker" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/util/CooldownTracker$Cooldown", + "inner_name": "Cooldown", + "outer_class": "net/minecraft/util/CooldownTracker" + } + ] + }, + "net/minecraft/util/EntitySelectors": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$1", + "start": "17" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$2", + "start": "23" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$3", + "start": "29" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$4", + "start": "35" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$5", + "start": "41" + }, + { + "access": "29", + "inner_class": "net/minecraft/util/EntitySelectors$ArmoredMob", + "inner_name": "ArmoredMob", + "outer_class": "net/minecraft/util/EntitySelectors", + "start": "48" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$6", + "start": "82" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$7", + "start": "96" + }, + { + "inner_class": "net/minecraft/util/EntitySelectors$8", + "start": "123" + } + ] + }, + "net/minecraft/util/EntitySelectors$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$1", + "start": "17" + } + ] + }, + "net/minecraft/util/EntitySelectors$2": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$2", + "start": "23" + } + ] + }, + "net/minecraft/util/EntitySelectors$3": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$3", + "start": "29" + } + ] + }, + "net/minecraft/util/EntitySelectors$4": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$4", + "start": "35" + } + ] + }, + "net/minecraft/util/EntitySelectors$5": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$5", + "start": "41" + } + ] + }, + "net/minecraft/util/EntitySelectors$6": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$6", + "start": "82" + } + ] + }, + "net/minecraft/util/EntitySelectors$7": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$7", + "start": "96" + } + ] + }, + "net/minecraft/util/EntitySelectors$8": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EntitySelectors$8", + "start": "123" + } + ] + }, + "net/minecraft/util/EntitySelectors$ArmoredMob": { + "enclosingMethod": { + "owner": "net/minecraft/util/EntitySelectors" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/EntitySelectors$ArmoredMob", + "inner_name": "ArmoredMob", + "outer_class": "net/minecraft/util/EntitySelectors", + "start": "48" + } + ] + }, + "net/minecraft/util/EnumFacing": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/EnumFacing$Axis", + "inner_name": "Axis", + "outer_class": "net/minecraft/util/EnumFacing", + "start": "341" + }, + { + "access": "4029", + "inner_class": "net/minecraft/util/EnumFacing$AxisDirection", + "inner_name": "AxisDirection", + "outer_class": "net/minecraft/util/EnumFacing", + "start": "403" + }, + { + "access": "4029", + "inner_class": "net/minecraft/util/EnumFacing$Plane", + "inner_name": "Plane", + "outer_class": "net/minecraft/util/EnumFacing", + "start": "434" + }, + { + "access": "1018", + "inner_class": "net/minecraft/util/EnumFacing$1", + "inner_name": "1", + "outer_class": "net/minecraft/util/EnumFacing" + } + ] + }, + "net/minecraft/util/EnumFacing$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/EnumFacing" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/util/EnumFacing$1", + "inner_name": "1", + "outer_class": "net/minecraft/util/EnumFacing" + } + ] + }, + "net/minecraft/util/EnumFacing$Axis": { + "enclosingMethod": { + "owner": "net/minecraft/util/EnumFacing" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/EnumFacing$Axis", + "inner_name": "Axis", + "outer_class": "net/minecraft/util/EnumFacing", + "start": "341" + } + ] + }, + "net/minecraft/util/EnumFacing$AxisDirection": { + "enclosingMethod": { + "owner": "net/minecraft/util/EnumFacing" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/EnumFacing$AxisDirection", + "inner_name": "AxisDirection", + "outer_class": "net/minecraft/util/EnumFacing", + "start": "403" + } + ] + }, + "net/minecraft/util/EnumFacing$Plane": { + "enclosingMethod": { + "owner": "net/minecraft/util/EnumFacing" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/EnumFacing$Plane", + "inner_name": "Plane", + "outer_class": "net/minecraft/util/EnumFacing", + "start": "434" + } + ] + }, + "net/minecraft/util/EnumTypeAdapterFactory": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EnumTypeAdapterFactory$1", + "start": "37" + } + ] + }, + "net/minecraft/util/EnumTypeAdapterFactory$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/EnumTypeAdapterFactory" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/EnumTypeAdapterFactory$1", + "start": "37" + } + ] + }, + "net/minecraft/util/HttpUtil": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/HttpUtil$1", + "start": "119" + } + ] + }, + "net/minecraft/util/HttpUtil$1": { + "enclosingMethod": { + "desc": "(Ljava/io/File;Ljava/lang/String;Ljava/util/Map;ILnet/minecraft/util/IProgressUpdate;Ljava/net/Proxy;)Lcom/google/common/util/concurrent/ListenableFuture;", + "name": "func_180192_a", + "owner": "net/minecraft/util/HttpUtil" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/HttpUtil$1", + "start": "119" + } + ] + }, + "net/minecraft/util/IntHashMap": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/util/IntHashMap$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/util/IntHashMap", + "start": "202" + } + ] + }, + "net/minecraft/util/IntHashMap$Entry": { + "enclosingMethod": { + "owner": "net/minecraft/util/IntHashMap" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/util/IntHashMap$Entry", + "inner_name": "Entry", + "outer_class": "net/minecraft/util/IntHashMap", + "start": "202" + } + ] + }, + "net/minecraft/util/Mirror": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/util/Mirror$1", + "inner_name": "1", + "outer_class": "net/minecraft/util/Mirror" + } + ] + }, + "net/minecraft/util/Mirror$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/Mirror" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/util/Mirror$1", + "inner_name": "1", + "outer_class": "net/minecraft/util/Mirror" + } + ] + }, + "net/minecraft/util/ResourceLocation": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/ResourceLocation$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/util/ResourceLocation", + "start": "94" + } + ] + }, + "net/minecraft/util/ResourceLocation$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/util/ResourceLocation" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/ResourceLocation$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/util/ResourceLocation", + "start": "94" + } + ] + }, + "net/minecraft/util/Rotation": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/util/Rotation$1", + "inner_name": "1", + "outer_class": "net/minecraft/util/Rotation" + } + ] + }, + "net/minecraft/util/Rotation$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/Rotation" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/util/Rotation$1", + "inner_name": "1", + "outer_class": "net/minecraft/util/Rotation" + } + ] + }, + "net/minecraft/util/Session": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/Session$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/util/Session", + "start": "54" + } + ] + }, + "net/minecraft/util/Session$Type": { + "enclosingMethod": { + "owner": "net/minecraft/util/Session" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/Session$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/util/Session", + "start": "54" + } + ] + }, + "net/minecraft/util/Util": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/Util$EnumOS", + "inner_name": "EnumOS", + "outer_class": "net/minecraft/util/Util", + "start": "12" + } + ] + }, + "net/minecraft/util/Util$EnumOS": { + "enclosingMethod": { + "owner": "net/minecraft/util/Util" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/Util$EnumOS", + "inner_name": "EnumOS", + "outer_class": "net/minecraft/util/Util", + "start": "12" + } + ] + }, + "net/minecraft/util/WeightedRandom": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/WeightedRandom$Item", + "inner_name": "Item", + "outer_class": "net/minecraft/util/WeightedRandom" + } + ] + }, + "net/minecraft/util/WeightedRandom$Item": { + "enclosingMethod": { + "owner": "net/minecraft/util/WeightedRandom" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/WeightedRandom$Item", + "inner_name": "Item", + "outer_class": "net/minecraft/util/WeightedRandom" + } + ] + }, + "net/minecraft/util/datafix/fixes/SignStrictJSON": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/datafix/fixes/SignStrictJSON$1", + "start": "21" + } + ] + }, + "net/minecraft/util/datafix/fixes/SignStrictJSON$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/datafix/fixes/SignStrictJSON" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/datafix/fixes/SignStrictJSON$1", + "start": "21" + } + ] + }, + "net/minecraft/util/math/BlockPos": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/math/BlockPos$1", + "start": "219" + }, + { + "access": "29", + "inner_class": "net/minecraft/util/math/BlockPos$MutableBlockPos", + "inner_name": "MutableBlockPos", + "outer_class": "net/minecraft/util/math/BlockPos", + "start": "261" + }, + { + "inner_class": "net/minecraft/util/math/BlockPos$2", + "start": "394" + }, + { + "access": "39", + "inner_class": "net/minecraft/util/math/BlockPos$PooledMutableBlockPos", + "inner_name": "PooledMutableBlockPos", + "outer_class": "net/minecraft/util/math/BlockPos", + "start": "426" + }, + { + "access": "1018", + "inner_class": "net/minecraft/util/math/BlockPos$4", + "inner_name": "4", + "outer_class": "net/minecraft/util/math/BlockPos" + } + ] + }, + "net/minecraft/util/math/BlockPos$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/math/BlockPos$1", + "start": "219" + }, + { + "inner_class": "net/minecraft/util/math/BlockPos$1$1", + "start": "219" + } + ] + }, + "net/minecraft/util/math/BlockPos$1$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos$1" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/math/BlockPos$1$1", + "start": "219" + } + ] + }, + "net/minecraft/util/math/BlockPos$2": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/math/BlockPos$2$1", + "start": "394" + }, + { + "inner_class": "net/minecraft/util/math/BlockPos$2", + "start": "394" + } + ] + }, + "net/minecraft/util/math/BlockPos$2$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos$2" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/math/BlockPos$2$1", + "start": "394" + } + ] + }, + "net/minecraft/util/math/BlockPos$4": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/util/math/BlockPos$4", + "inner_name": "4", + "outer_class": "net/minecraft/util/math/BlockPos" + } + ] + }, + "net/minecraft/util/math/BlockPos$MutableBlockPos": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/math/BlockPos$MutableBlockPos", + "inner_name": "MutableBlockPos", + "outer_class": "net/minecraft/util/math/BlockPos", + "start": "261" + } + ] + }, + "net/minecraft/util/math/BlockPos$PooledMutableBlockPos": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/BlockPos" + }, + "innerClasses": [ + { + "access": "39", + "inner_class": "net/minecraft/util/math/BlockPos$PooledMutableBlockPos", + "inner_name": "PooledMutableBlockPos", + "outer_class": "net/minecraft/util/math/BlockPos", + "start": "426" + } + ] + }, + "net/minecraft/util/math/Cartesian": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/util/math/Cartesian$GetList", + "inner_name": "GetList", + "outer_class": "net/minecraft/util/math/Cartesian", + "start": "51" + }, + { + "access": "28", + "inner_class": "net/minecraft/util/math/Cartesian$Product", + "inner_name": "Product", + "outer_class": "net/minecraft/util/math/Cartesian", + "start": "70" + }, + { + "access": "1000", + "inner_class": "net/minecraft/util/math/Cartesian$1" + } + ] + }, + "net/minecraft/util/math/Cartesian$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/Cartesian" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/util/math/Cartesian$1" + } + ] + }, + "net/minecraft/util/math/Cartesian$GetList": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/Cartesian" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/util/math/Cartesian$GetList", + "inner_name": "GetList", + "outer_class": "net/minecraft/util/math/Cartesian", + "start": "51" + } + ] + }, + "net/minecraft/util/math/Cartesian$Product": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/Cartesian" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/util/math/Cartesian$Product", + "inner_name": "Product", + "outer_class": "net/minecraft/util/math/Cartesian", + "start": "70" + }, + { + "access": "28", + "inner_class": "net/minecraft/util/math/Cartesian$Product$ProductIterator", + "inner_name": "ProductIterator", + "outer_class": "net/minecraft/util/math/Cartesian$Product", + "start": "77" + } + ] + }, + "net/minecraft/util/math/Cartesian$Product$ProductIterator": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/Cartesian$Product" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/util/math/Cartesian$Product$ProductIterator", + "inner_name": "ProductIterator", + "outer_class": "net/minecraft/util/math/Cartesian$Product", + "start": "77" + } + ] + }, + "net/minecraft/util/math/RayTraceResult": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/math/RayTraceResult$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/util/math/RayTraceResult", + "start": "8" + } + ] + }, + "net/minecraft/util/math/RayTraceResult$Type": { + "enclosingMethod": { + "owner": "net/minecraft/util/math/RayTraceResult" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/math/RayTraceResult$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/util/math/RayTraceResult", + "start": "8" + } + ] + }, + "net/minecraft/util/text/ITextComponent": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/text/ITextComponent$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/util/text/ITextComponent", + "start": "41" + } + ] + }, + "net/minecraft/util/text/ITextComponent$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/util/text/ITextComponent" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/text/ITextComponent$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/util/text/ITextComponent", + "start": "41" + } + ] + }, + "net/minecraft/util/text/Style": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/text/Style$1", + "start": "229" + }, + { + "access": "29", + "inner_class": "net/minecraft/util/text/Style$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/util/text/Style", + "start": "285" + } + ] + }, + "net/minecraft/util/text/Style$1": { + "enclosingMethod": { + "owner": "net/minecraft/util/text/Style" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/text/Style$1", + "start": "229" + } + ] + }, + "net/minecraft/util/text/Style$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/util/text/Style" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/util/text/Style$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/util/text/Style", + "start": "285" + } + ] + }, + "net/minecraft/util/text/TextComponentBase": { + "innerClasses": [ + { + "inner_class": "net/minecraft/util/text/TextComponentBase$1", + "start": "88" + }, + { + "inner_class": "net/minecraft/util/text/TextComponentBase$2", + "start": "94" + } + ] + }, + "net/minecraft/util/text/TextComponentBase$1": { + "enclosingMethod": { + "desc": "(Ljava/lang/Iterable;)Ljava/util/Iterator;", + "name": "func_150262_a", + "owner": "net/minecraft/util/text/TextComponentBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/text/TextComponentBase$1", + "start": "88" + } + ] + }, + "net/minecraft/util/text/TextComponentBase$2": { + "enclosingMethod": { + "desc": "(Ljava/lang/Iterable;)Ljava/util/Iterator;", + "name": "func_150262_a", + "owner": "net/minecraft/util/text/TextComponentBase" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/util/text/TextComponentBase$2", + "start": "94" + } + ] + }, + "net/minecraft/util/text/event/ClickEvent": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/text/event/ClickEvent$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/util/text/event/ClickEvent", + "start": "60" + } + ] + }, + "net/minecraft/util/text/event/ClickEvent$Action": { + "enclosingMethod": { + "owner": "net/minecraft/util/text/event/ClickEvent" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/text/event/ClickEvent$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/util/text/event/ClickEvent", + "start": "60" + } + ] + }, + "net/minecraft/util/text/event/HoverEvent": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/text/event/HoverEvent$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/util/text/event/HoverEvent", + "start": "60" + } + ] + }, + "net/minecraft/util/text/event/HoverEvent$Action": { + "enclosingMethod": { + "owner": "net/minecraft/util/text/event/HoverEvent" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/util/text/event/HoverEvent$Action", + "inner_name": "Action", + "outer_class": "net/minecraft/util/text/event/HoverEvent", + "start": "60" + } + ] + }, + "net/minecraft/village/Village": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/village/Village$VillageAggressor", + "inner_name": "VillageAggressor", + "outer_class": "net/minecraft/village/Village" + } + ] + }, + "net/minecraft/village/Village$VillageAggressor": { + "enclosingMethod": { + "owner": "net/minecraft/village/Village" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/village/Village$VillageAggressor", + "inner_name": "VillageAggressor", + "outer_class": "net/minecraft/village/Village" + } + ] + }, + "net/minecraft/world/BossInfo": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/BossInfo$Color", + "inner_name": "Color", + "outer_class": "net/minecraft/world/BossInfo", + "start": "88" + }, + { + "access": "4029", + "inner_class": "net/minecraft/world/BossInfo$Overlay", + "inner_name": "Overlay", + "outer_class": "net/minecraft/world/BossInfo", + "start": "99" + } + ] + }, + "net/minecraft/world/BossInfo$Color": { + "enclosingMethod": { + "owner": "net/minecraft/world/BossInfo" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/BossInfo$Color", + "inner_name": "Color", + "outer_class": "net/minecraft/world/BossInfo", + "start": "88" + } + ] + }, + "net/minecraft/world/BossInfo$Overlay": { + "enclosingMethod": { + "owner": "net/minecraft/world/BossInfo" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/BossInfo$Overlay", + "inner_name": "Overlay", + "outer_class": "net/minecraft/world/BossInfo", + "start": "99" + } + ] + }, + "net/minecraft/world/GameRules": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/GameRules$Value", + "inner_name": "Value", + "outer_class": "net/minecraft/world/GameRules", + "start": "158" + }, + { + "access": "4029", + "inner_class": "net/minecraft/world/GameRules$ValueType", + "inner_name": "ValueType", + "outer_class": "net/minecraft/world/GameRules", + "start": "192" + } + ] + }, + "net/minecraft/world/GameRules$Value": { + "enclosingMethod": { + "owner": "net/minecraft/world/GameRules" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/GameRules$Value", + "inner_name": "Value", + "outer_class": "net/minecraft/world/GameRules", + "start": "158" + } + ] + }, + "net/minecraft/world/GameRules$ValueType": { + "enclosingMethod": { + "owner": "net/minecraft/world/GameRules" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/GameRules$ValueType", + "inner_name": "ValueType", + "outer_class": "net/minecraft/world/GameRules", + "start": "192" + } + ] + }, + "net/minecraft/world/Teleporter": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/world/Teleporter$PortalPosition", + "inner_name": "PortalPosition", + "outer_class": "net/minecraft/world/Teleporter" + } + ] + }, + "net/minecraft/world/Teleporter$PortalPosition": { + "enclosingMethod": { + "owner": "net/minecraft/world/Teleporter" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/world/Teleporter$PortalPosition", + "inner_name": "PortalPosition", + "outer_class": "net/minecraft/world/Teleporter" + } + ] + }, + "net/minecraft/world/World": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/World$1", + "start": "189" + }, + { + "inner_class": "net/minecraft/world/World$2", + "start": "478" + }, + { + "inner_class": "net/minecraft/world/World$3", + "start": "510" + }, + { + "inner_class": "net/minecraft/world/World$4", + "start": "2859" + }, + { + "inner_class": "net/minecraft/world/World$5", + "start": "2866" + } + ] + }, + "net/minecraft/world/World$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/world/biome/Biome;", + "name": "func_180494_b", + "owner": "net/minecraft/world/World" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/World$1", + "start": "189" + } + ] + }, + "net/minecraft/world/World$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/Block;Lnet/minecraft/util/math/BlockPos;)V", + "name": "func_190524_a", + "owner": "net/minecraft/world/World" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/World$2", + "start": "478" + } + ] + }, + "net/minecraft/world/World$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/Block;Lnet/minecraft/util/math/BlockPos;)V", + "name": "func_190529_b", + "owner": "net/minecraft/world/World" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/World$3", + "start": "510" + } + ] + }, + "net/minecraft/world/World$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReportCategory;", + "name": "func_72914_a", + "owner": "net/minecraft/world/World" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/World$4", + "start": "2859" + } + ] + }, + "net/minecraft/world/World$5": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReport;)Lnet/minecraft/crash/CrashReportCategory;", + "name": "func_72914_a", + "owner": "net/minecraft/world/World" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/World$5", + "start": "2866" + } + ] + }, + "net/minecraft/world/WorldProviderHell": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/WorldProviderHell$1", + "start": "68" + } + ] + }, + "net/minecraft/world/WorldProviderHell$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/WorldProviderHell" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/WorldProviderHell$1", + "start": "68" + } + ] + }, + "net/minecraft/world/WorldServer": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/WorldServer$1", + "start": "455" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/WorldServer$ServerBlockEventList", + "inner_name": "ServerBlockEventList", + "outer_class": "net/minecraft/world/WorldServer" + } + ] + }, + "net/minecraft/world/WorldServer$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/util/math/BlockPos;", + "name": "func_175736_a", + "owner": "net/minecraft/world/WorldServer" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/WorldServer$1", + "start": "455" + } + ] + }, + "net/minecraft/world/WorldServer$ServerBlockEventList": { + "enclosingMethod": { + "owner": "net/minecraft/world/WorldServer" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/WorldServer$ServerBlockEventList", + "inner_name": "ServerBlockEventList", + "outer_class": "net/minecraft/world/WorldServer" + } + ] + }, + "net/minecraft/world/WorldServerMulti": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/WorldServerMulti$1", + "start": "22" + } + ] + }, + "net/minecraft/world/WorldServerMulti$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/WorldServerMulti" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/WorldServerMulti$1", + "start": "22" + } + ] + }, + "net/minecraft/world/biome/Biome": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/Biome$TempCategory", + "inner_name": "TempCategory", + "outer_class": "net/minecraft/world/biome/Biome", + "start": "92" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/biome/Biome$SpawnListEntry", + "inner_name": "SpawnListEntry", + "outer_class": "net/minecraft/world/biome/Biome", + "start": "213" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/biome/Biome$BiomeProperties", + "inner_name": "BiomeProperties", + "outer_class": "net/minecraft/world/biome/Biome", + "start": "468" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/biome/Biome$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/biome/Biome" + } + ] + }, + "net/minecraft/world/biome/Biome$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/Biome" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/biome/Biome$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/biome/Biome" + } + ] + }, + "net/minecraft/world/biome/Biome$BiomeProperties": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/Biome" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/biome/Biome$BiomeProperties", + "inner_name": "BiomeProperties", + "outer_class": "net/minecraft/world/biome/Biome", + "start": "468" + } + ] + }, + "net/minecraft/world/biome/Biome$SpawnListEntry": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/Biome" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/biome/Biome$SpawnListEntry", + "inner_name": "SpawnListEntry", + "outer_class": "net/minecraft/world/biome/Biome", + "start": "213" + } + ] + }, + "net/minecraft/world/biome/Biome$TempCategory": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/Biome" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/Biome$TempCategory", + "inner_name": "TempCategory", + "outer_class": "net/minecraft/world/biome/Biome", + "start": "92" + } + ] + }, + "net/minecraft/world/biome/BiomeCache": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/world/biome/BiomeCache$Block", + "inner_name": "Block", + "outer_class": "net/minecraft/world/biome/BiomeCache", + "start": "31" + } + ] + }, + "net/minecraft/world/biome/BiomeCache$Block": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeCache" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/world/biome/BiomeCache$Block", + "inner_name": "Block", + "outer_class": "net/minecraft/world/biome/BiomeCache", + "start": "31" + } + ] + }, + "net/minecraft/world/biome/BiomeColorHelper": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$1", + "start": "14" + }, + { + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$2", + "start": "20" + }, + { + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$3", + "start": "26" + }, + { + "access": "608", + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$ColorResolver", + "inner_name": "ColorResolver", + "outer_class": "net/minecraft/world/biome/BiomeColorHelper" + } + ] + }, + "net/minecraft/world/biome/BiomeColorHelper$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeColorHelper" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$1", + "start": "14" + } + ] + }, + "net/minecraft/world/biome/BiomeColorHelper$2": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeColorHelper" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$2", + "start": "20" + } + ] + }, + "net/minecraft/world/biome/BiomeColorHelper$3": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeColorHelper" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$3", + "start": "26" + } + ] + }, + "net/minecraft/world/biome/BiomeColorHelper$ColorResolver": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeColorHelper" + }, + "innerClasses": [ + { + "access": "608", + "inner_class": "net/minecraft/world/biome/BiomeColorHelper$ColorResolver", + "inner_name": "ColorResolver", + "outer_class": "net/minecraft/world/biome/BiomeColorHelper" + } + ] + }, + "net/minecraft/world/biome/BiomeEndDecorator": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader", + "inner_name": "SpikeCacheLoader", + "outer_class": "net/minecraft/world/biome/BiomeEndDecorator", + "start": "45" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/biome/BiomeEndDecorator$1" + } + ] + }, + "net/minecraft/world/biome/BiomeEndDecorator$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeEndDecorator" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/biome/BiomeEndDecorator$1" + } + ] + }, + "net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeEndDecorator" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader", + "inner_name": "SpikeCacheLoader", + "outer_class": "net/minecraft/world/biome/BiomeEndDecorator", + "start": "45" + } + ] + }, + "net/minecraft/world/biome/BiomeForest": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/BiomeForest$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/biome/BiomeForest", + "start": "18" + } + ] + }, + "net/minecraft/world/biome/BiomeForest$Type": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeForest" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/BiomeForest$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/biome/BiomeForest", + "start": "18" + } + ] + }, + "net/minecraft/world/biome/BiomeHills": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/BiomeHills$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/biome/BiomeHills", + "start": "23" + } + ] + }, + "net/minecraft/world/biome/BiomeHills$Type": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeHills" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/BiomeHills$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/biome/BiomeHills", + "start": "23" + } + ] + }, + "net/minecraft/world/biome/BiomeMesa": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/world/biome/BiomeMesa$Decorator", + "inner_name": "Decorator", + "outer_class": "net/minecraft/world/biome/BiomeMesa", + "start": "261" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/biome/BiomeMesa$1" + } + ] + }, + "net/minecraft/world/biome/BiomeMesa$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeMesa" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/biome/BiomeMesa$1" + } + ] + }, + "net/minecraft/world/biome/BiomeMesa$Decorator": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeMesa" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/world/biome/BiomeMesa$Decorator", + "inner_name": "Decorator", + "outer_class": "net/minecraft/world/biome/BiomeMesa", + "start": "261" + } + ] + }, + "net/minecraft/world/biome/BiomeTaiga": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/BiomeTaiga$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/biome/BiomeTaiga", + "start": "29" + } + ] + }, + "net/minecraft/world/biome/BiomeTaiga$Type": { + "enclosingMethod": { + "owner": "net/minecraft/world/biome/BiomeTaiga" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/biome/BiomeTaiga$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/biome/BiomeTaiga", + "start": "29" + } + ] + }, + "net/minecraft/world/chunk/Chunk": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/chunk/Chunk$1", + "start": "394" + }, + { + "access": "4029", + "inner_class": "net/minecraft/world/chunk/Chunk$EnumCreateEntityType", + "inner_name": "EnumCreateEntityType", + "outer_class": "net/minecraft/world/chunk/Chunk", + "start": "1168" + } + ] + }, + "net/minecraft/world/chunk/Chunk$1": { + "enclosingMethod": { + "desc": "(III)Lnet/minecraft/block/state/IBlockState;", + "name": "func_186032_a", + "owner": "net/minecraft/world/chunk/Chunk" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/chunk/Chunk$1", + "start": "394" + } + ] + }, + "net/minecraft/world/chunk/Chunk$EnumCreateEntityType": { + "enclosingMethod": { + "owner": "net/minecraft/world/chunk/Chunk" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/chunk/Chunk$EnumCreateEntityType", + "inner_name": "EnumCreateEntityType", + "outer_class": "net/minecraft/world/chunk/Chunk", + "start": "1168" + } + ] + }, + "net/minecraft/world/chunk/storage/AnvilChunkLoader": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/chunk/storage/AnvilChunkLoader$1", + "start": "186" + } + ] + }, + "net/minecraft/world/chunk/storage/AnvilChunkLoader$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189889_a", + "owner": "net/minecraft/world/chunk/storage/AnvilChunkLoader" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/chunk/storage/AnvilChunkLoader$1", + "start": "186" + } + ] + }, + "net/minecraft/world/chunk/storage/AnvilSaveConverter": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/chunk/storage/AnvilSaveConverter$1", + "start": "235" + } + ] + }, + "net/minecraft/world/chunk/storage/AnvilSaveConverter$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/chunk/storage/AnvilSaveConverter" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/chunk/storage/AnvilSaveConverter$1", + "start": "235" + } + ] + }, + "net/minecraft/world/chunk/storage/ChunkLoader": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData", + "inner_name": "AnvilConverterData", + "outer_class": "net/minecraft/world/chunk/storage/ChunkLoader" + } + ] + }, + "net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData": { + "enclosingMethod": { + "owner": "net/minecraft/world/chunk/storage/ChunkLoader" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData", + "inner_name": "AnvilConverterData", + "outer_class": "net/minecraft/world/chunk/storage/ChunkLoader" + } + ] + }, + "net/minecraft/world/chunk/storage/RegionFile": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer", + "inner_name": "ChunkBuffer", + "outer_class": "net/minecraft/world/chunk/storage/RegionFile", + "start": "244" + } + ] + }, + "net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer": { + "enclosingMethod": { + "owner": "net/minecraft/world/chunk/storage/RegionFile" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer", + "inner_name": "ChunkBuffer", + "outer_class": "net/minecraft/world/chunk/storage/RegionFile", + "start": "244" + } + ] + }, + "net/minecraft/world/end/DragonSpawnManager": { + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$1", + "start": "18" + }, + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$2", + "start": "28" + }, + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$3", + "start": "40" + }, + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$4", + "start": "77" + }, + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$5", + "start": "100" + } + ] + }, + "net/minecraft/world/end/DragonSpawnManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/end/DragonSpawnManager" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$1", + "start": "18" + } + ] + }, + "net/minecraft/world/end/DragonSpawnManager$2": { + "enclosingMethod": { + "owner": "net/minecraft/world/end/DragonSpawnManager" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$2", + "start": "28" + } + ] + }, + "net/minecraft/world/end/DragonSpawnManager$3": { + "enclosingMethod": { + "owner": "net/minecraft/world/end/DragonSpawnManager" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$3", + "start": "40" + } + ] + }, + "net/minecraft/world/end/DragonSpawnManager$4": { + "enclosingMethod": { + "owner": "net/minecraft/world/end/DragonSpawnManager" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$4", + "start": "77" + } + ] + }, + "net/minecraft/world/end/DragonSpawnManager$5": { + "enclosingMethod": { + "owner": "net/minecraft/world/end/DragonSpawnManager" + }, + "innerClasses": [ + { + "access": "4000", + "inner_class": "net/minecraft/world/end/DragonSpawnManager$5", + "start": "100" + } + ] + }, + "net/minecraft/world/gen/ChunkGeneratorSettings": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/ChunkGeneratorSettings$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/world/gen/ChunkGeneratorSettings", + "start": "231" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/ChunkGeneratorSettings$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/gen/ChunkGeneratorSettings", + "start": "763" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/ChunkGeneratorSettings$1" + } + ] + }, + "net/minecraft/world/gen/ChunkGeneratorSettings$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/ChunkGeneratorSettings" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/ChunkGeneratorSettings$1" + } + ] + }, + "net/minecraft/world/gen/ChunkGeneratorSettings$Factory": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/ChunkGeneratorSettings" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/ChunkGeneratorSettings$Factory", + "inner_name": "Factory", + "outer_class": "net/minecraft/world/gen/ChunkGeneratorSettings", + "start": "231" + } + ] + }, + "net/minecraft/world/gen/ChunkGeneratorSettings$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/ChunkGeneratorSettings" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/ChunkGeneratorSettings$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/gen/ChunkGeneratorSettings", + "start": "763" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenBigTree": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates", + "inner_name": "FoliageCoordinates", + "outer_class": "net/minecraft/world/gen/feature/WorldGenBigTree", + "start": "27" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/feature/WorldGenBigTree" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates", + "inner_name": "FoliageCoordinates", + "outer_class": "net/minecraft/world/gen/feature/WorldGenBigTree", + "start": "27" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenMinable": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate", + "inner_name": "StonePredicate", + "outer_class": "net/minecraft/world/gen/feature/WorldGenMinable", + "start": "84" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/feature/WorldGenMinable$1" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenMinable$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/feature/WorldGenMinable" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/feature/WorldGenMinable$1" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/feature/WorldGenMinable" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate", + "inner_name": "StonePredicate", + "outer_class": "net/minecraft/world/gen/feature/WorldGenMinable", + "start": "84" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenSpikes": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike", + "inner_name": "EndSpike", + "outer_class": "net/minecraft/world/gen/feature/WorldGenSpikes", + "start": "90" + } + ] + }, + "net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/feature/WorldGenSpikes" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike", + "inner_name": "EndSpike", + "outer_class": "net/minecraft/world/gen/feature/WorldGenSpikes", + "start": "90" + } + ] + }, + "net/minecraft/world/gen/layer/GenLayerEdge": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/gen/layer/GenLayerEdge$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/world/gen/layer/GenLayerEdge", + "start": "7" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/layer/GenLayerEdge$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/layer/GenLayerEdge" + } + ] + }, + "net/minecraft/world/gen/layer/GenLayerEdge$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/layer/GenLayerEdge" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/layer/GenLayerEdge$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/layer/GenLayerEdge" + } + ] + }, + "net/minecraft/world/gen/layer/GenLayerEdge$Mode": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/layer/GenLayerEdge" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/gen/layer/GenLayerEdge$Mode", + "inner_name": "Mode", + "outer_class": "net/minecraft/world/gen/layer/GenLayerEdge", + "start": "7" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces": { + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature", + "inner_name": "Feature", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "74" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid", + "inner_name": "DesertPyramid", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "128" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid", + "inner_name": "JunglePyramid", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "368" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut", + "inner_name": "SwampHut", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "609" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo", + "inner_name": "Igloo", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "711" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid", + "inner_name": "DesertPyramid", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "128" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces" + }, + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature", + "inner_name": "Feature", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "74" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo", + "inner_name": "Igloo", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "711" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid", + "inner_name": "JunglePyramid", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "368" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones", + "inner_name": "Stones", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid", + "start": "585" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones", + "inner_name": "Stones", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid", + "start": "585" + } + ] + }, + "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut", + "inner_name": "SwampHut", + "outer_class": "net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces", + "start": "609" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenEndCity": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenEndCity$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenEndCity", + "start": "89" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenEndCity$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/MapGenEndCity" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenEndCity$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenEndCity", + "start": "89" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenMineshaft": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/gen/structure/MapGenMineshaft$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/gen/structure/MapGenMineshaft", + "start": "78" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenMineshaft$Type": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/MapGenMineshaft" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/gen/structure/MapGenMineshaft$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/gen/structure/MapGenMineshaft", + "start": "78" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenNetherBridge": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenNetherBridge$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenNetherBridge" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenNetherBridge$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/MapGenNetherBridge" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenNetherBridge$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenNetherBridge" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenScatteredFeature": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenScatteredFeature$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenScatteredFeature" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenScatteredFeature$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/MapGenScatteredFeature" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenScatteredFeature$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenScatteredFeature" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenStronghold": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenStronghold$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenStronghold" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenStronghold$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/MapGenStronghold" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenStronghold$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenStronghold" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenStructure": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/MapGenStructure$1", + "start": "58" + }, + { + "inner_class": "net/minecraft/world/gen/structure/MapGenStructure$2", + "start": "67" + }, + { + "inner_class": "net/minecraft/world/gen/structure/MapGenStructure$3", + "start": "74" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenStructure$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;IIIILnet/minecraft/world/chunk/ChunkPrimer;)V", + "name": "func_180701_a", + "owner": "net/minecraft/world/gen/structure/MapGenStructure" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/MapGenStructure$1", + "start": "58" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenStructure$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;IIIILnet/minecraft/world/chunk/ChunkPrimer;)V", + "name": "func_180701_a", + "owner": "net/minecraft/world/gen/structure/MapGenStructure" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/MapGenStructure$2", + "start": "67" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenStructure$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;IIIILnet/minecraft/world/chunk/ChunkPrimer;)V", + "name": "func_180701_a", + "owner": "net/minecraft/world/gen/structure/MapGenStructure" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/MapGenStructure$3", + "start": "74" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenVillage": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenVillage$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenVillage", + "start": "134" + } + ] + }, + "net/minecraft/world/gen/structure/MapGenVillage$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/MapGenVillage" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/MapGenVillage$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/MapGenVillage", + "start": "134" + } + ] + }, + "net/minecraft/world/gen/structure/StructureBoundingBox": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureBoundingBox$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureBoundingBox" + } + ] + }, + "net/minecraft/world/gen/structure/StructureBoundingBox$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureBoundingBox" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureBoundingBox$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureBoundingBox" + } + ] + }, + "net/minecraft/world/gen/structure/StructureComponent": { + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureComponent$BlockSelector", + "inner_name": "BlockSelector", + "outer_class": "net/minecraft/world/gen/structure/StructureComponent", + "start": "527" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureComponent$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureComponent" + } + ] + }, + "net/minecraft/world/gen/structure/StructureComponent$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureComponent" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureComponent$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureComponent" + } + ] + }, + "net/minecraft/world/gen/structure/StructureComponent$BlockSelector": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureComponent" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureComponent$BlockSelector", + "inner_name": "BlockSelector", + "outer_class": "net/minecraft/world/gen/structure/StructureComponent", + "start": "527" + } + ] + }, + "net/minecraft/world/gen/structure/StructureComponentTemplate": { + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureComponentTemplate$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureComponentTemplate" + } + ] + }, + "net/minecraft/world/gen/structure/StructureComponentTemplate$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureComponentTemplate" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureComponentTemplate$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureComponentTemplate" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate", + "inner_name": "CityTemplate", + "outer_class": "net/minecraft/world/gen/structure/StructureEndCityPieces", + "start": "65" + }, + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$1", + "start": "171" + }, + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$2", + "start": "211" + }, + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$3", + "start": "256" + }, + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$4", + "start": "309" + }, + { + "access": "608", + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator", + "inner_name": "IGenerator", + "outer_class": "net/minecraft/world/gen/structure/StructureEndCityPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureEndCityPieces" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$1", + "start": "171" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces$2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureEndCityPieces" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$2", + "start": "211" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces$3": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureEndCityPieces" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$3", + "start": "256" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces$4": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureEndCityPieces" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$4", + "start": "309" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureEndCityPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate", + "inner_name": "CityTemplate", + "outer_class": "net/minecraft/world/gen/structure/StructureEndCityPieces", + "start": "65" + } + ] + }, + "net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureEndCityPieces" + }, + "innerClasses": [ + { + "access": "608", + "inner_class": "net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator", + "inner_name": "IGenerator", + "outer_class": "net/minecraft/world/gen/structure/StructureEndCityPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces": { + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice", + "inner_name": "Peice", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "59" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Room", + "inner_name": "Room", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "152" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor", + "inner_name": "Corridor", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "278" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross", + "inner_name": "Cross", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "563" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs", + "inner_name": "Stairs", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "725" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor", + "inner_name": "Corridor", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "278" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross", + "inner_name": "Cross", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "563" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + }, + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice", + "inner_name": "Peice", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "59" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces$Room": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Room", + "inner_name": "Room", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "152" + } + ] + }, + "net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureMineshaftPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs", + "inner_name": "Stairs", + "outer_class": "net/minecraft/world/gen/structure/StructureMineshaftPieces", + "start": "725" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight", + "inner_name": "PieceWeight", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "65" + }, + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece", + "inner_name": "Piece", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "138" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight", + "inner_name": "Straight", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "347" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$End", + "inner_name": "End", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "417" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3", + "inner_name": "Crossing3", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "508" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing", + "inner_name": "Crossing", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "586" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs", + "inner_name": "Stairs", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "657" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne", + "inner_name": "Throne", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "734" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance", + "inner_name": "Entrance", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "825" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom", + "inner_name": "NetherStalkRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "943" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5", + "inner_name": "Corridor5", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1094" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2", + "inner_name": "Crossing2", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1154" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2", + "inner_name": "Corridor2", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1218" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor", + "inner_name": "Corridor", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1306" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3", + "inner_name": "Corridor3", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1390" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4", + "inner_name": "Corridor4", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1459" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor", + "inner_name": "Corridor", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1306" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2", + "inner_name": "Corridor2", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1218" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3", + "inner_name": "Corridor3", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1390" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4", + "inner_name": "Corridor4", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1459" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5", + "inner_name": "Corridor5", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1094" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing", + "inner_name": "Crossing", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "586" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2", + "inner_name": "Crossing2", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "1154" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3", + "inner_name": "Crossing3", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "508" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$End": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$End", + "inner_name": "End", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "417" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance", + "inner_name": "Entrance", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "825" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom", + "inner_name": "NetherStalkRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "943" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece", + "inner_name": "Piece", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "138" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight", + "inner_name": "PieceWeight", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "65" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs", + "inner_name": "Stairs", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "657" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight", + "inner_name": "Straight", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "347" + } + ] + }, + "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureNetherBridgePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne", + "inner_name": "Throne", + "outer_class": "net/minecraft/world/gen/structure/StructureNetherBridgePieces", + "start": "734" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonument": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument", + "inner_name": "StartMonument", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonument", + "start": "126" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonument" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument", + "inner_name": "StartMonument", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonument", + "start": "126" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces": { + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece", + "inner_name": "Piece", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "71" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding", + "inner_name": "MonumentBuilding", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "303" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom", + "inner_name": "EntryRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "862" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom", + "inner_name": "SimpleRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "903" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom", + "inner_name": "SimpleTopRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1071" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom", + "inner_name": "DoubleYRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1128" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom", + "inner_name": "DoubleXRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1208" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom", + "inner_name": "DoubleZRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1277" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom", + "inner_name": "DoubleXYRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1368" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom", + "inner_name": "DoubleYZRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1476" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom", + "inner_name": "MonumentCoreRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1577" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom", + "inner_name": "WingRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1668" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse", + "inner_name": "Penthouse", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1775" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition", + "inner_name": "RoomDefinition", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1837" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper", + "inner_name": "FitSimpleRoomHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1886" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper", + "inner_name": "FitSimpleRoomTopHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1899" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper", + "inner_name": "YDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1912" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper", + "inner_name": "XDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1926" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper", + "inner_name": "ZDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1940" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper", + "inner_name": "XYDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1958" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper", + "inner_name": "YZDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1981" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + { + "access": "608", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper", + "inner_name": "MonumentRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom", + "inner_name": "DoubleXRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1208" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom", + "inner_name": "DoubleXYRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1368" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom", + "inner_name": "DoubleYRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1128" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom", + "inner_name": "DoubleYZRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1476" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom", + "inner_name": "DoubleZRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1277" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom", + "inner_name": "EntryRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "862" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper", + "inner_name": "FitSimpleRoomHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1886" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper", + "inner_name": "FitSimpleRoomTopHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1899" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding", + "inner_name": "MonumentBuilding", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "303" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom", + "inner_name": "MonumentCoreRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1577" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "608", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper", + "inner_name": "MonumentRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse", + "inner_name": "Penthouse", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1775" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece", + "inner_name": "Piece", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "71" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition", + "inner_name": "RoomDefinition", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1837" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom", + "inner_name": "SimpleRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "903" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom", + "inner_name": "SimpleTopRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1071" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom", + "inner_name": "WingRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1668" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper", + "inner_name": "XDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1926" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper", + "inner_name": "XYDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1958" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper", + "inner_name": "YDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1912" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper", + "inner_name": "YZDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1981" + } + ] + }, + "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper", + "inner_name": "ZDoubleRoomFitHelper", + "outer_class": "net/minecraft/world/gen/structure/StructureOceanMonumentPieces", + "start": "1940" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces": { + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight", + "inner_name": "PieceWeight", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "71" + }, + { + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$1", + "start": "93" + }, + { + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$2", + "start": "99" + }, + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold", + "inner_name": "Stronghold", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "239" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor", + "inner_name": "Corridor", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "385" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs", + "inner_name": "Stairs", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "491" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2", + "inner_name": "Stairs2", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "574" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight", + "inner_name": "Straight", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "606" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor", + "inner_name": "ChestCorridor", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "692" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight", + "inner_name": "StairsStraight", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "770" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn", + "inner_name": "LeftTurn", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "832" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn", + "inner_name": "RightTurn", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "883" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing", + "inner_name": "RoomCrossing", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "935" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison", + "inner_name": "Prison", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1077" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Library", + "inner_name": "Library", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1150" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing", + "inner_name": "Crossing", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1322" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom", + "inner_name": "PortalRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1448" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones", + "inner_name": "Stones", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1579" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$3", + "inner_name": "3", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$1", + "start": "93" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$2", + "start": "99" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$3": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$3", + "inner_name": "3", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor", + "inner_name": "ChestCorridor", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "692" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor", + "inner_name": "Corridor", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "385" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing", + "inner_name": "Crossing", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1322" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn", + "inner_name": "LeftTurn", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "832" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Library": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Library", + "inner_name": "Library", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1150" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight", + "inner_name": "PieceWeight", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "71" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom", + "inner_name": "PortalRoom", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1448" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison", + "inner_name": "Prison", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1077" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn", + "inner_name": "RightTurn", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "883" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing", + "inner_name": "RoomCrossing", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "935" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs", + "inner_name": "Stairs", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "491" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2", + "inner_name": "Stairs2", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "574" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight", + "inner_name": "StairsStraight", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "770" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones", + "inner_name": "Stones", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "1579" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight", + "inner_name": "Straight", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "606" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door", + "inner_name": "Door", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold", + "start": "233" + }, + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold", + "inner_name": "Stronghold", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces", + "start": "239" + } + ] + }, + "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door", + "inner_name": "Door", + "outer_class": "net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold", + "start": "233" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight", + "inner_name": "PieceWeight", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "84" + }, + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Village", + "inner_name": "Village", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "252" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Well", + "inner_name": "Well", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "485" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "573" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Path", + "inner_name": "Path", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "606" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden", + "inner_name": "House4Garden", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "752" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Church", + "inner_name": "Church", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "894" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House1", + "inner_name": "House1", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1039" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut", + "inner_name": "WoodHut", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1191" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Hall", + "inner_name": "Hall", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1315" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House3", + "inner_name": "House3", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1464" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House2", + "inner_name": "House2", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1631" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Field2", + "inner_name": "Field2", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1780" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Field1", + "inner_name": "Field1", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1893" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Torch", + "inner_name": "Torch", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "2024" + }, + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Road", + "inner_name": "Road", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Church": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Church", + "inner_name": "Church", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "894" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Field1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Field1", + "inner_name": "Field1", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1893" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Field2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Field2", + "inner_name": "Field2", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1780" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Hall": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Hall", + "inner_name": "Hall", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1315" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$House1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House1", + "inner_name": "House1", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1039" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$House2": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House2", + "inner_name": "House2", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1631" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$House3": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House3", + "inner_name": "House3", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1464" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden", + "inner_name": "House4Garden", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "752" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Path": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Path", + "inner_name": "Path", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "606" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight", + "inner_name": "PieceWeight", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "84" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Road": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Road", + "inner_name": "Road", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "573" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Torch": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Torch", + "inner_name": "Torch", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "2024" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Village": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Village", + "inner_name": "Village", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "252" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$Well": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$Well", + "inner_name": "Well", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "485" + } + ] + }, + "net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/StructureVillagePieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut", + "inner_name": "WoodHut", + "outer_class": "net/minecraft/world/gen/structure/StructureVillagePieces", + "start": "1191" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansion": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansion$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansion", + "start": "96" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansion$Start": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansion" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansion$Start", + "inner_name": "Start", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansion", + "start": "96" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate", + "inner_name": "MansionTemplate", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "59" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer", + "inner_name": "Placer", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "142" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid", + "inner_name": "Grid", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "689" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid", + "inner_name": "SimpleGrid", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "1024" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor", + "inner_name": "FirstFloor", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "1104" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor", + "inner_name": "SecondFloor", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "1141" + }, + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection", + "inner_name": "RoomCollection", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData", + "inner_name": "PlacementData", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$1" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor", + "inner_name": "ThirdFloor", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$1" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor", + "inner_name": "FirstFloor", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "1104" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid", + "inner_name": "Grid", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "689" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate", + "inner_name": "MansionTemplate", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "59" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData", + "inner_name": "PlacementData", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer", + "inner_name": "Placer", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "142" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "428", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection", + "inner_name": "RoomCollection", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor", + "inner_name": "SecondFloor", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "1141" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid", + "inner_name": "SimpleGrid", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces", + "start": "1024" + } + ] + }, + "net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor", + "inner_name": "ThirdFloor", + "outer_class": "net/minecraft/world/gen/structure/WoodlandMansionPieces" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/template/Template$1", + "start": "122" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/template/Template$BasicPalette", + "inner_name": "BasicPalette", + "outer_class": "net/minecraft/world/gen/structure/template/Template", + "start": "404" + }, + { + "inner_class": "net/minecraft/world/gen/structure/template/Template$2", + "start": "433" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/template/Template$EntityInfo", + "inner_name": "EntityInfo", + "outer_class": "net/minecraft/world/gen/structure/template/Template" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/template/Template$BlockInfo", + "inner_name": "BlockInfo", + "outer_class": "net/minecraft/world/gen/structure/template/Template" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/template/Template$3", + "inner_name": "3", + "outer_class": "net/minecraft/world/gen/structure/template/Template" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/BlockPos;)V", + "name": "func_186255_a", + "owner": "net/minecraft/world/gen/structure/template/Template" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/template/Template$1", + "start": "122" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_191158_a", + "owner": "net/minecraft/world/gen/structure/template/Template" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/gen/structure/template/Template$2", + "start": "433" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template$3": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/template/Template" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/gen/structure/template/Template$3", + "inner_name": "3", + "outer_class": "net/minecraft/world/gen/structure/template/Template" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template$BasicPalette": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/template/Template" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/gen/structure/template/Template$BasicPalette", + "inner_name": "BasicPalette", + "outer_class": "net/minecraft/world/gen/structure/template/Template", + "start": "404" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template$BlockInfo": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/template/Template" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/template/Template$BlockInfo", + "inner_name": "BlockInfo", + "outer_class": "net/minecraft/world/gen/structure/template/Template" + } + ] + }, + "net/minecraft/world/gen/structure/template/Template$EntityInfo": { + "enclosingMethod": { + "owner": "net/minecraft/world/gen/structure/template/Template" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/gen/structure/template/Template$EntityInfo", + "inner_name": "EntityInfo", + "outer_class": "net/minecraft/world/gen/structure/template/Template" + } + ] + }, + "net/minecraft/world/storage/MapData": { + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/world/storage/MapData$MapInfo", + "inner_name": "MapInfo", + "outer_class": "net/minecraft/world/storage/MapData", + "start": "44" + } + ] + }, + "net/minecraft/world/storage/MapData$MapInfo": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/MapData" + }, + "innerClasses": [ + { + "access": "21", + "inner_class": "net/minecraft/world/storage/MapData$MapInfo", + "inner_name": "MapInfo", + "outer_class": "net/minecraft/world/storage/MapData", + "start": "44" + } + ] + }, + "net/minecraft/world/storage/MapDecoration": { + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/storage/MapDecoration$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/storage/MapDecoration", + "start": "6" + } + ] + }, + "net/minecraft/world/storage/MapDecoration$Type": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/MapDecoration" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/storage/MapDecoration$Type", + "inner_name": "Type", + "outer_class": "net/minecraft/world/storage/MapDecoration", + "start": "6" + } + ] + }, + "net/minecraft/world/storage/WorldInfo": { + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$1", + "start": "78" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$2", + "start": "619" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$3", + "start": "626" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$4", + "start": "633" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$5", + "start": "640" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$6", + "start": "647" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$7", + "start": "654" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$8", + "start": "661" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$9", + "start": "682" + }, + { + "inner_class": "net/minecraft/world/storage/WorldInfo$10", + "start": "689" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$1": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/util/datafix/DataFixer;)V", + "name": "func_189967_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$1", + "start": "78" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$10": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$10", + "start": "689" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$2": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$2", + "start": "619" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$3": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$3", + "start": "626" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$4": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$4", + "start": "633" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$5": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$5", + "start": "640" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$6": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$6", + "start": "647" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$7": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$7", + "start": "654" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$8": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$8", + "start": "661" + } + ] + }, + "net/minecraft/world/storage/WorldInfo$9": { + "enclosingMethod": { + "desc": "(Lnet/minecraft/crash/CrashReportCategory;)V", + "name": "func_85118_a", + "owner": "net/minecraft/world/storage/WorldInfo" + }, + "innerClasses": [ + { + "inner_class": "net/minecraft/world/storage/WorldInfo$9", + "start": "682" + } + ] + }, + "net/minecraft/world/storage/loot/LootContext": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootContext$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/world/storage/loot/LootContext", + "start": "99" + }, + { + "access": "4029", + "inner_class": "net/minecraft/world/storage/loot/LootContext$EntityTarget", + "inner_name": "EntityTarget", + "outer_class": "net/minecraft/world/storage/loot/LootContext", + "start": "123" + }, + { + "access": "1018", + "inner_class": "net/minecraft/world/storage/loot/LootContext$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/storage/loot/LootContext" + } + ] + }, + "net/minecraft/world/storage/loot/LootContext$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootContext" + }, + "innerClasses": [ + { + "access": "1018", + "inner_class": "net/minecraft/world/storage/loot/LootContext$1", + "inner_name": "1", + "outer_class": "net/minecraft/world/storage/loot/LootContext" + } + ] + }, + "net/minecraft/world/storage/loot/LootContext$Builder": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootContext" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootContext$Builder", + "inner_name": "Builder", + "outer_class": "net/minecraft/world/storage/loot/LootContext", + "start": "99" + } + ] + }, + "net/minecraft/world/storage/loot/LootContext$EntityTarget": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootContext" + }, + "innerClasses": [ + { + "access": "4029", + "inner_class": "net/minecraft/world/storage/loot/LootContext$EntityTarget", + "inner_name": "EntityTarget", + "outer_class": "net/minecraft/world/storage/loot/LootContext", + "start": "123" + }, + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootContext$EntityTarget", + "start": "144" + } + ] + }, + "net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootContext$EntityTarget" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootContext$EntityTarget", + "start": "144" + } + ] + }, + "net/minecraft/world/storage/loot/LootEntry": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootEntry$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootEntry", + "start": "37" + } + ] + }, + "net/minecraft/world/storage/loot/LootEntry$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootEntry" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootEntry$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootEntry", + "start": "37" + } + ] + }, + "net/minecraft/world/storage/loot/LootPool": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootPool$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootPool", + "start": "71" + } + ] + }, + "net/minecraft/world/storage/loot/LootPool$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootPool" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootPool$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootPool", + "start": "71" + } + ] + }, + "net/minecraft/world/storage/loot/LootTable": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootTable$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootTable", + "start": "115" + } + ] + }, + "net/minecraft/world/storage/loot/LootTable$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootTable" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/LootTable$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/LootTable", + "start": "115" + } + ] + }, + "net/minecraft/world/storage/loot/LootTableManager": { + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/world/storage/loot/LootTableManager$Loader", + "inner_name": "Loader", + "outer_class": "net/minecraft/world/storage/loot/LootTableManager", + "start": "57" + }, + { + "access": "1000", + "inner_class": "net/minecraft/world/storage/loot/LootTableManager$1" + } + ] + }, + "net/minecraft/world/storage/loot/LootTableManager$1": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootTableManager" + }, + "innerClasses": [ + { + "access": "1000", + "inner_class": "net/minecraft/world/storage/loot/LootTableManager$1" + } + ] + }, + "net/minecraft/world/storage/loot/LootTableManager$Loader": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/LootTableManager" + }, + "innerClasses": [ + { + "access": "20", + "inner_class": "net/minecraft/world/storage/loot/LootTableManager$Loader", + "inner_name": "Loader", + "outer_class": "net/minecraft/world/storage/loot/LootTableManager", + "start": "57" + } + ] + }, + "net/minecraft/world/storage/loot/RandomValueRange": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/RandomValueRange$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/RandomValueRange", + "start": "51" + } + ] + }, + "net/minecraft/world/storage/loot/RandomValueRange$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/RandomValueRange" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/RandomValueRange$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/RandomValueRange", + "start": "51" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/EntityHasProperty": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/EntityHasProperty", + "start": "41" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/EntityHasProperty" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/EntityHasProperty", + "start": "41" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/EntityHasScore": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/EntityHasScore", + "start": "57" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/EntityHasScore" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/EntityHasScore", + "start": "57" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/KilledByPlayer": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/KilledByPlayer", + "start": "25" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/KilledByPlayer" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/KilledByPlayer", + "start": "25" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/LootCondition": { + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/storage/loot/conditions/LootCondition$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/LootCondition", + "start": "24" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/LootCondition$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/LootCondition" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/storage/loot/conditions/LootCondition$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/LootCondition", + "start": "24" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/LootConditionManager": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/LootConditionManager", + "start": "76" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/LootConditionManager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/LootConditionManager", + "start": "76" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/RandomChance": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/RandomChance$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/RandomChance", + "start": "24" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/RandomChance$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/RandomChance" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/RandomChance$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/RandomChance", + "start": "24" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting", + "start": "32" + } + ] + }, + "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting", + "start": "32" + } + ] + }, + "net/minecraft/world/storage/loot/functions/EnchantRandomly": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/EnchantRandomly", + "start": "69" + } + ] + }, + "net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/EnchantRandomly" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/EnchantRandomly", + "start": "69" + } + ] + }, + "net/minecraft/world/storage/loot/functions/EnchantWithLevels": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/EnchantWithLevels", + "start": "31" + } + ] + }, + "net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/EnchantWithLevels" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/EnchantWithLevels", + "start": "31" + } + ] + }, + "net/minecraft/world/storage/loot/functions/LootFunction": { + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/storage/loot/functions/LootFunction$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/LootFunction", + "start": "36" + } + ] + }, + "net/minecraft/world/storage/loot/functions/LootFunction$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/LootFunction" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/storage/loot/functions/LootFunction$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/LootFunction", + "start": "36" + } + ] + }, + "net/minecraft/world/storage/loot/functions/LootFunctionManager": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/LootFunctionManager", + "start": "66" + } + ] + }, + "net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/LootFunctionManager" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/LootFunctionManager", + "start": "66" + } + ] + }, + "net/minecraft/world/storage/loot/functions/LootingEnchantBonus": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/LootingEnchantBonus", + "start": "48" + } + ] + }, + "net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/LootingEnchantBonus" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/LootingEnchantBonus", + "start": "48" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetAttributes": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetAttributes$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetAttributes", + "start": "47" + }, + { + "access": "28", + "inner_class": "net/minecraft/world/storage/loot/functions/SetAttributes$Modifier", + "inner_name": "Modifier", + "outer_class": "net/minecraft/world/storage/loot/functions/SetAttributes", + "start": "77" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetAttributes$Modifier": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/SetAttributes" + }, + "innerClasses": [ + { + "access": "28", + "inner_class": "net/minecraft/world/storage/loot/functions/SetAttributes$Modifier", + "inner_name": "Modifier", + "outer_class": "net/minecraft/world/storage/loot/functions/SetAttributes", + "start": "77" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetAttributes$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/SetAttributes" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetAttributes$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetAttributes", + "start": "47" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetCount": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetCount$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetCount", + "start": "29" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetCount$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/SetCount" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetCount$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetCount", + "start": "29" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetDamage": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetDamage$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetDamage", + "start": "39" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetDamage$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/SetDamage" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetDamage$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetDamage", + "start": "39" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetMetadata": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetMetadata$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetMetadata", + "start": "37" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetMetadata$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/SetMetadata" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetMetadata$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetMetadata", + "start": "37" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetNBT": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetNBT$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetNBT", + "start": "40" + } + ] + }, + "net/minecraft/world/storage/loot/functions/SetNBT$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/SetNBT" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/SetNBT$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/SetNBT", + "start": "40" + } + ] + }, + "net/minecraft/world/storage/loot/functions/Smelt": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/Smelt$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/Smelt", + "start": "40" + } + ] + }, + "net/minecraft/world/storage/loot/functions/Smelt$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/functions/Smelt" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/functions/Smelt$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/functions/Smelt", + "start": "40" + } + ] + }, + "net/minecraft/world/storage/loot/properties/EntityOnFire": { + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/properties/EntityOnFire", + "start": "25" + } + ] + }, + "net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/properties/EntityOnFire" + }, + "innerClasses": [ + { + "access": "29", + "inner_class": "net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/properties/EntityOnFire", + "start": "25" + } + ] + }, + "net/minecraft/world/storage/loot/properties/EntityProperty": { + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/storage/loot/properties/EntityProperty$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/properties/EntityProperty", + "start": "24" + } + ] + }, + "net/minecraft/world/storage/loot/properties/EntityProperty$Serializer": { + "enclosingMethod": { + "owner": "net/minecraft/world/storage/loot/properties/EntityProperty" + }, + "innerClasses": [ + { + "access": "429", + "inner_class": "net/minecraft/world/storage/loot/properties/EntityProperty$Serializer", + "inner_name": "Serializer", + "outer_class": "net/minecraft/world/storage/loot/properties/EntityProperty", + "start": "24" + } + ] + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/compiled/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat b/build/tmp/recompileMc/compiled/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat new file mode 100644 index 0000000..b6666ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Channel.class b/build/tmp/recompileMc/compiled/ibxm/Channel.class new file mode 100644 index 0000000..9181fc5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Channel.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Envelope.class b/build/tmp/recompileMc/compiled/ibxm/Envelope.class new file mode 100644 index 0000000..5eef495 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Envelope.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/FastTracker2.class b/build/tmp/recompileMc/compiled/ibxm/FastTracker2.class new file mode 100644 index 0000000..90f8abd Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/FastTracker2.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/IBXM.class b/build/tmp/recompileMc/compiled/ibxm/IBXM.class new file mode 100644 index 0000000..5619dee Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/IBXM.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Instrument.class b/build/tmp/recompileMc/compiled/ibxm/Instrument.class new file mode 100644 index 0000000..0fa29d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Instrument.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/LogTable.class b/build/tmp/recompileMc/compiled/ibxm/LogTable.class new file mode 100644 index 0000000..84918e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/LogTable.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Module.class b/build/tmp/recompileMc/compiled/ibxm/Module.class new file mode 100644 index 0000000..cec1d8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Module.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Pattern.class b/build/tmp/recompileMc/compiled/ibxm/Pattern.class new file mode 100644 index 0000000..5b196c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Pattern.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Player$1.class b/build/tmp/recompileMc/compiled/ibxm/Player$1.class new file mode 100644 index 0000000..85024c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Player$1.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Player$Driver.class b/build/tmp/recompileMc/compiled/ibxm/Player$Driver.class new file mode 100644 index 0000000..b46a018 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Player$Driver.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Player.class b/build/tmp/recompileMc/compiled/ibxm/Player.class new file mode 100644 index 0000000..9a8cd4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Player.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/ProTracker.class b/build/tmp/recompileMc/compiled/ibxm/ProTracker.class new file mode 100644 index 0000000..dbc0f2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/ProTracker.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/Sample.class b/build/tmp/recompileMc/compiled/ibxm/Sample.class new file mode 100644 index 0000000..9cfa357 Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/Sample.class differ diff --git a/build/tmp/recompileMc/compiled/ibxm/ScreamTracker3.class b/build/tmp/recompileMc/compiled/ibxm/ScreamTracker3.class new file mode 100644 index 0000000..294e7ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/ibxm/ScreamTracker3.class differ diff --git a/build/tmp/recompileMc/compiled/mcp/MethodsReturnNonnullByDefault.class b/build/tmp/recompileMc/compiled/mcp/MethodsReturnNonnullByDefault.class new file mode 100644 index 0000000..8b840ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/mcp/MethodsReturnNonnullByDefault.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/Advancement$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/Advancement$Builder.class new file mode 100644 index 0000000..c10a678 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/Advancement$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/Advancement.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/Advancement.class new file mode 100644 index 0000000..97eb1e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/Advancement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementList$Listener.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementList$Listener.class new file mode 100644 index 0000000..686eaf6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementList$Listener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementList.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementList.class new file mode 100644 index 0000000..4c4e8cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementManager$1.class new file mode 100644 index 0000000..1ea36dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementManager.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementManager.class new file mode 100644 index 0000000..5becec9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementProgress$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementProgress$Serializer.class new file mode 100644 index 0000000..430a78b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementProgress$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementProgress.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementProgress.class new file mode 100644 index 0000000..b8723bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementProgress.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards$1.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards$1.class new file mode 100644 index 0000000..fc53e94 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards$Deserializer.class new file mode 100644 index 0000000..abcff31 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards.class new file mode 100644 index 0000000..ba108ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementRewards.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementTreeNode.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementTreeNode.class new file mode 100644 index 0000000..4378ee1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/AdvancementTreeNode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/CriteriaTriggers.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/CriteriaTriggers.class new file mode 100644 index 0000000..aa1db6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/CriteriaTriggers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/Criterion.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/Criterion.class new file mode 100644 index 0000000..c0deaca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/Criterion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/CriterionProgress.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/CriterionProgress.class new file mode 100644 index 0000000..57ca2ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/CriterionProgress.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/DisplayInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/DisplayInfo.class new file mode 100644 index 0000000..0c56219 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/DisplayInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/FrameType.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FrameType.class new file mode 100644 index 0000000..16507f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FrameType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager$1.class new file mode 100644 index 0000000..f3482fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager$QueuedCommand.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager$QueuedCommand.class new file mode 100644 index 0000000..1f47a19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager$QueuedCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager.class new file mode 100644 index 0000000..a8a0c39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/FunctionManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionInstance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionInstance.class new file mode 100644 index 0000000..6fbc186 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionInstance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionTrigger$Listener.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionTrigger$Listener.class new file mode 100644 index 0000000..2550b5c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionTrigger$Listener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionTrigger.class new file mode 100644 index 0000000..e067cfd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/ICriterionTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/PlayerAdvancements$1.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/PlayerAdvancements$1.class new file mode 100644 index 0000000..f7aee65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/PlayerAdvancements$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/PlayerAdvancements.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/PlayerAdvancements.class new file mode 100644 index 0000000..7d02f26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/PlayerAdvancements.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/AbstractCriterionInstance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/AbstractCriterionInstance.class new file mode 100644 index 0000000..520d48c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/AbstractCriterionInstance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance.class new file mode 100644 index 0000000..8d18457 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners.class new file mode 100644 index 0000000..d2edcd2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger.class new file mode 100644 index 0000000..8393db3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BredAnimalsTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance.class new file mode 100644 index 0000000..b29a1ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners.class new file mode 100644 index 0000000..ef392f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger.class new file mode 100644 index 0000000..4455778 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/BrewedPotionTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance.class new file mode 100644 index 0000000..a284a13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners.class new file mode 100644 index 0000000..f03958d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger.class new file mode 100644 index 0000000..b574505 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ChangeDimensionTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance.class new file mode 100644 index 0000000..7b07187 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners.class new file mode 100644 index 0000000..baacf02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger.class new file mode 100644 index 0000000..38401ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConstructBeaconTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance.class new file mode 100644 index 0000000..f3ac2b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners.class new file mode 100644 index 0000000..70fd128 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger.class new file mode 100644 index 0000000..c5ad2df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ConsumeItemTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance.class new file mode 100644 index 0000000..7664bd4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners.class new file mode 100644 index 0000000..7e2299a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.class new file mode 100644 index 0000000..b2a7efa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DamagePredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DamagePredicate.class new file mode 100644 index 0000000..7ce9bc6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DamagePredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DamageSourcePredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DamageSourcePredicate.class new file mode 100644 index 0000000..1f8faf3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DamageSourcePredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DistancePredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DistancePredicate.class new file mode 100644 index 0000000..18fee0a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/DistancePredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance.class new file mode 100644 index 0000000..afc5d6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners.class new file mode 100644 index 0000000..912c467 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger.class new file mode 100644 index 0000000..29f87e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EffectsChangedTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance.class new file mode 100644 index 0000000..f489b51 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners.class new file mode 100644 index 0000000..8284055 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger.class new file mode 100644 index 0000000..23ae78a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantedItemTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantmentPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantmentPredicate.class new file mode 100644 index 0000000..d4eac9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnchantmentPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger$Instance.class new file mode 100644 index 0000000..fdf4265 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners.class new file mode 100644 index 0000000..623e81d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger.class new file mode 100644 index 0000000..0444608 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EnterBlockTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance.class new file mode 100644 index 0000000..5310afa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners.class new file mode 100644 index 0000000..4c68344 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.class new file mode 100644 index 0000000..2366cc4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityPredicate.class new file mode 100644 index 0000000..7042f83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/EntityPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ImpossibleTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ImpossibleTrigger$Instance.class new file mode 100644 index 0000000..0cbe9b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ImpossibleTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ImpossibleTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ImpossibleTrigger.class new file mode 100644 index 0000000..42ecf64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ImpossibleTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance.class new file mode 100644 index 0000000..d284c68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners.class new file mode 100644 index 0000000..8f4a066 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger.class new file mode 100644 index 0000000..8ff0fdf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/InventoryChangeTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance.class new file mode 100644 index 0000000..fd71c3b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners.class new file mode 100644 index 0000000..d56a1ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger.class new file mode 100644 index 0000000..bcbf9fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemDurabilityTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemPredicate.class new file mode 100644 index 0000000..aeccdf3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/ItemPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger$Instance.class new file mode 100644 index 0000000..f6c6a42 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger$Listeners.class new file mode 100644 index 0000000..0fdb0f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger.class new file mode 100644 index 0000000..5634712 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/KilledTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger$Instance.class new file mode 100644 index 0000000..a5dbe49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger$Listeners.class new file mode 100644 index 0000000..aa3aa29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger.class new file mode 100644 index 0000000..1165d49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LevitationTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LocationPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LocationPredicate.class new file mode 100644 index 0000000..22768ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/LocationPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MinMaxBounds.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MinMaxBounds.class new file mode 100644 index 0000000..6439312 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MinMaxBounds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate.class new file mode 100644 index 0000000..b74ff85 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MobEffectsPredicate$InstancePredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MobEffectsPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MobEffectsPredicate.class new file mode 100644 index 0000000..ce27d42 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/MobEffectsPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NBTPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NBTPredicate.class new file mode 100644 index 0000000..4248e2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NBTPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger$Instance.class new file mode 100644 index 0000000..060efac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners.class new file mode 100644 index 0000000..e8be6ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger.class new file mode 100644 index 0000000..a801d09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/NetherTravelTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance.class new file mode 100644 index 0000000..3ef8011 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners.class new file mode 100644 index 0000000..8ff8e88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger.class new file mode 100644 index 0000000..bbfd09d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlacedBlockTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance.class new file mode 100644 index 0000000..71ecfc6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners.class new file mode 100644 index 0000000..7d407a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.class new file mode 100644 index 0000000..38ec13e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger$Instance.class new file mode 100644 index 0000000..08b3bed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger$Listeners.class new file mode 100644 index 0000000..9346e44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger.class new file mode 100644 index 0000000..b343645 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/PositionTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance.class new file mode 100644 index 0000000..dacec98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners.class new file mode 100644 index 0000000..740bd0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger.class new file mode 100644 index 0000000..1ff3531 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/RecipeUnlockedTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance.class new file mode 100644 index 0000000..65a1b1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners.class new file mode 100644 index 0000000..51ecc4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger.class new file mode 100644 index 0000000..dd5c215 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/SummonedEntityTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger$Instance.class new file mode 100644 index 0000000..cf745c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners.class new file mode 100644 index 0000000..1202f32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger.class new file mode 100644 index 0000000..b4d9f07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TameAnimalTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger$Instance.class new file mode 100644 index 0000000..e03e188 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger$Listeners.class new file mode 100644 index 0000000..433a3ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger.class new file mode 100644 index 0000000..bc2d9d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/TickTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance.class new file mode 100644 index 0000000..6d2630c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners.class new file mode 100644 index 0000000..3582c5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger.class new file mode 100644 index 0000000..8b08663 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedEnderEyeTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger$Instance.class new file mode 100644 index 0000000..6fd9e01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners.class new file mode 100644 index 0000000..627e155 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger.class new file mode 100644 index 0000000..11cd742 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/UsedTotemTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance.class new file mode 100644 index 0000000..be02151 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners.class new file mode 100644 index 0000000..f4b1e93 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger$Listeners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger.class new file mode 100644 index 0000000..fb728cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/VillagerTradeTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/package-info.class new file mode 100644 index 0000000..939fdfb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/critereon/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/advancements/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/advancements/package-info.class new file mode 100644 index 0000000..147660d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/advancements/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/Block$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/Block$1.class new file mode 100644 index 0000000..129fc90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/Block$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/Block$EnumOffsetType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/Block$EnumOffsetType.class new file mode 100644 index 0000000..56e59b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/Block$EnumOffsetType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/Block.class b/build/tmp/recompileMc/compiled/net/minecraft/block/Block.class new file mode 100644 index 0000000..faa5709 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/Block.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAir.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAir.class new file mode 100644 index 0000000..cb6c06f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAir.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAnvil$Anvil.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAnvil$Anvil.class new file mode 100644 index 0000000..70a42e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAnvil$Anvil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAnvil.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAnvil.class new file mode 100644 index 0000000..417cd34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockAnvil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$1.class new file mode 100644 index 0000000..a1ffd38 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$BlockBannerHanging.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$BlockBannerHanging.class new file mode 100644 index 0000000..c6b113b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$BlockBannerHanging.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$BlockBannerStanding.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$BlockBannerStanding.class new file mode 100644 index 0000000..69ba447 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner$BlockBannerStanding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner.class new file mode 100644 index 0000000..9c6374f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBanner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBarrier.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBarrier.class new file mode 100644 index 0000000..7f3b1a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBarrier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBasePressurePlate.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBasePressurePlate.class new file mode 100644 index 0000000..3ec9f3d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBasePressurePlate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon$1$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon$1$1.class new file mode 100644 index 0000000..d7355dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon$1.class new file mode 100644 index 0000000..f1403fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon.class new file mode 100644 index 0000000..b3899d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeacon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBed$EnumPartType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBed$EnumPartType.class new file mode 100644 index 0000000..b1a8b52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBed$EnumPartType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBed.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBed.class new file mode 100644 index 0000000..62c8a14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeetroot.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeetroot.class new file mode 100644 index 0000000..2268f7d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBeetroot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBone.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBone.class new file mode 100644 index 0000000..3aabf30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBookshelf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBookshelf.class new file mode 100644 index 0000000..dacc933 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBookshelf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBreakable.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBreakable.class new file mode 100644 index 0000000..716ffab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBreakable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBrewingStand.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBrewingStand.class new file mode 100644 index 0000000..677d9dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBrewingStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBush.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBush.class new file mode 100644 index 0000000..9818fee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockBush.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButton$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButton$1.class new file mode 100644 index 0000000..a445655 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButton$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButton.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButton.class new file mode 100644 index 0000000..ea0203d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButtonStone.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButtonStone.class new file mode 100644 index 0000000..c59ffd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButtonStone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButtonWood.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButtonWood.class new file mode 100644 index 0000000..dbed78c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockButtonWood.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCactus.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCactus.class new file mode 100644 index 0000000..4096fdc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCactus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCake.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCake.class new file mode 100644 index 0000000..1b215c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCake.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCarpet.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCarpet.class new file mode 100644 index 0000000..c2c661f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCarpet.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCarrot.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCarrot.class new file mode 100644 index 0000000..ca6646b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCarrot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCauldron.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCauldron.class new file mode 100644 index 0000000..691d760 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCauldron.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChest$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChest$Type.class new file mode 100644 index 0000000..db4586e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChest$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChest.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChest.class new file mode 100644 index 0000000..fd81761 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChorusFlower.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChorusFlower.class new file mode 100644 index 0000000..dcca34a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChorusFlower.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChorusPlant.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChorusPlant.class new file mode 100644 index 0000000..2b00ea4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockChorusPlant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockClay.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockClay.class new file mode 100644 index 0000000..b349a24 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockClay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCocoa$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCocoa$1.class new file mode 100644 index 0000000..aae0a76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCocoa$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCocoa.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCocoa.class new file mode 100644 index 0000000..4aa257e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCocoa.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockColored.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockColored.class new file mode 100644 index 0000000..1500a6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockColored.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCommandBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCommandBlock.class new file mode 100644 index 0000000..2754258 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCommandBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCompressedPowered.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCompressedPowered.class new file mode 100644 index 0000000..c800cea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCompressedPowered.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockConcretePowder.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockConcretePowder.class new file mode 100644 index 0000000..c3ff905 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockConcretePowder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockContainer.class new file mode 100644 index 0000000..6f7628e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCrops.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCrops.class new file mode 100644 index 0000000..5831595 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockCrops.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDaylightDetector.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDaylightDetector.class new file mode 100644 index 0000000..040288f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDaylightDetector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDeadBush.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDeadBush.class new file mode 100644 index 0000000..6e98041 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDeadBush.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirectional.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirectional.class new file mode 100644 index 0000000..4f081bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirectional.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirt$DirtType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirt$DirtType.class new file mode 100644 index 0000000..ee7bcf8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirt$DirtType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirt.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirt.class new file mode 100644 index 0000000..47ac0c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDirt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDispenser.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDispenser.class new file mode 100644 index 0000000..5627809 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDispenser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$1.class new file mode 100644 index 0000000..5d55675 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$EnumDoorHalf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$EnumDoorHalf.class new file mode 100644 index 0000000..86839bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$EnumDoorHalf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$EnumHingePosition.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$EnumHingePosition.class new file mode 100644 index 0000000..010d867 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor$EnumHingePosition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor.class new file mode 100644 index 0000000..d845035 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant$EnumBlockHalf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant$EnumBlockHalf.class new file mode 100644 index 0000000..a4f167e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant$EnumBlockHalf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant$EnumPlantType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant$EnumPlantType.class new file mode 100644 index 0000000..29678a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant$EnumPlantType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant.class new file mode 100644 index 0000000..54cf2a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoublePlant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleStoneSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleStoneSlab.class new file mode 100644 index 0000000..0da6cbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleStoneSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleStoneSlabNew.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleStoneSlabNew.class new file mode 100644 index 0000000..7c3c988 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleStoneSlabNew.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleWoodSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleWoodSlab.class new file mode 100644 index 0000000..8629eeb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDoubleWoodSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDragonEgg.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDragonEgg.class new file mode 100644 index 0000000..54961f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDragonEgg.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDropper.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDropper.class new file mode 100644 index 0000000..1d4ca7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDropper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDynamicLiquid.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDynamicLiquid.class new file mode 100644 index 0000000..72a575b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockDynamicLiquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEmptyDrops.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEmptyDrops.class new file mode 100644 index 0000000..f7ed9d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEmptyDrops.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEnchantmentTable.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEnchantmentTable.class new file mode 100644 index 0000000..02f6459 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEnchantmentTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndGateway.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndGateway.class new file mode 100644 index 0000000..e3f4543 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndGateway.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndPortal.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndPortal.class new file mode 100644 index 0000000..67ecaec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndPortal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndPortalFrame.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndPortalFrame.class new file mode 100644 index 0000000..be9b2a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndPortalFrame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndRod$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndRod$1.class new file mode 100644 index 0000000..c674e54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndRod$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndRod.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndRod.class new file mode 100644 index 0000000..ac6cf2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEndRod.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEnderChest.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEnderChest.class new file mode 100644 index 0000000..1cccf76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEnderChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEventData.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEventData.class new file mode 100644 index 0000000..c06bbd2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockEventData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFalling.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFalling.class new file mode 100644 index 0000000..e0752ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFalling.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFarmland$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFarmland$1.class new file mode 100644 index 0000000..fcd0ad1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFarmland$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFarmland.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFarmland.class new file mode 100644 index 0000000..2a0ec9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFarmland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFence$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFence$1.class new file mode 100644 index 0000000..9c3c874 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFence$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFence.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFence.class new file mode 100644 index 0000000..b57e539 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFence.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFenceGate.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFenceGate.class new file mode 100644 index 0000000..0665768 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFenceGate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFire.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFire.class new file mode 100644 index 0000000..b1f170e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFire.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$1.class new file mode 100644 index 0000000..96f0a48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerColor.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerColor.class new file mode 100644 index 0000000..b5f8af6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerType$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerType$1.class new file mode 100644 index 0000000..2372ddc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerType$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerType.class new file mode 100644 index 0000000..f02b9a4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower$EnumFlowerType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower.class new file mode 100644 index 0000000..d8528bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlower.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot$1.class new file mode 100644 index 0000000..37820c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot$EnumFlowerType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot$EnumFlowerType.class new file mode 100644 index 0000000..2fb0182 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot$EnumFlowerType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot.class new file mode 100644 index 0000000..84458ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFlowerPot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFrostedIce.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFrostedIce.class new file mode 100644 index 0000000..4290214 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFrostedIce.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFurnace$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFurnace$1.class new file mode 100644 index 0000000..3ad8744 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFurnace$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFurnace.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFurnace.class new file mode 100644 index 0000000..37af617 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockFurnace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlass.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlass.class new file mode 100644 index 0000000..bca7c3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlazedTerracotta.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlazedTerracotta.class new file mode 100644 index 0000000..89cf27f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlazedTerracotta.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlowstone.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlowstone.class new file mode 100644 index 0000000..d54cd01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGlowstone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrass.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrass.class new file mode 100644 index 0000000..df5e296 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrassPath$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrassPath$1.class new file mode 100644 index 0000000..770c375 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrassPath$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrassPath.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrassPath.class new file mode 100644 index 0000000..b00299c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGrassPath.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGravel.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGravel.class new file mode 100644 index 0000000..3a033f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockGravel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfStoneSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfStoneSlab.class new file mode 100644 index 0000000..5acf28e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfStoneSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfStoneSlabNew.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfStoneSlabNew.class new file mode 100644 index 0000000..29c9843 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfStoneSlabNew.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfWoodSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfWoodSlab.class new file mode 100644 index 0000000..10f76d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHalfWoodSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHardenedClay.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHardenedClay.class new file mode 100644 index 0000000..0739f72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHardenedClay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHay.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHay.class new file mode 100644 index 0000000..66b5f2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHopper$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHopper$1.class new file mode 100644 index 0000000..88d962d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHopper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHopper.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHopper.class new file mode 100644 index 0000000..097cc6d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHopper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHorizontal.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHorizontal.class new file mode 100644 index 0000000..4b4059a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHorizontal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom$1.class new file mode 100644 index 0000000..ea0d9a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom$EnumType.class new file mode 100644 index 0000000..a0e6d8d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom.class new file mode 100644 index 0000000..fe03770 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockHugeMushroom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockIce.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockIce.class new file mode 100644 index 0000000..08972e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockIce.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockJukebox$TileEntityJukebox.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockJukebox$TileEntityJukebox.class new file mode 100644 index 0000000..834b4b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockJukebox$TileEntityJukebox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockJukebox.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockJukebox.class new file mode 100644 index 0000000..84529fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockJukebox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLadder$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLadder$1.class new file mode 100644 index 0000000..5bc5936 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLadder$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLadder.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLadder.class new file mode 100644 index 0000000..f2a3b13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLadder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLeaves.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLeaves.class new file mode 100644 index 0000000..415b296 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLeaves.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever$1.class new file mode 100644 index 0000000..41d628f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever$EnumOrientation.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever$EnumOrientation.class new file mode 100644 index 0000000..5f43e5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever$EnumOrientation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever.class new file mode 100644 index 0000000..f835e33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLever.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLilyPad.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLilyPad.class new file mode 100644 index 0000000..7792422 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLilyPad.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLiquid.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLiquid.class new file mode 100644 index 0000000..0abd6ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLiquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog$1.class new file mode 100644 index 0000000..9273682 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog$EnumAxis.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog$EnumAxis.class new file mode 100644 index 0000000..f4a9853 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog$EnumAxis.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog.class new file mode 100644 index 0000000..7bf1bea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockLog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMagma.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMagma.class new file mode 100644 index 0000000..0c335a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMagma.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMelon.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMelon.class new file mode 100644 index 0000000..51394d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMelon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMobSpawner.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMobSpawner.class new file mode 100644 index 0000000..de26c39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMobSpawner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMushroom.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMushroom.class new file mode 100644 index 0000000..c06bff1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMushroom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMycelium.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMycelium.class new file mode 100644 index 0000000..d64b3d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockMycelium.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherBrick.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherBrick.class new file mode 100644 index 0000000..012f7f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherBrick.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherWart.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherWart.class new file mode 100644 index 0000000..efb660b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherWart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherrack.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherrack.class new file mode 100644 index 0000000..9941455 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNetherrack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLeaf$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLeaf$1.class new file mode 100644 index 0000000..a413925 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLeaf$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLeaf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLeaf.class new file mode 100644 index 0000000..1e20649 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLeaf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog$1.class new file mode 100644 index 0000000..29d2067 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog$2.class new file mode 100644 index 0000000..ffe486b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog.class new file mode 100644 index 0000000..fb2260f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNewLog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNote.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNote.class new file mode 100644 index 0000000..cad7b72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockNote.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockObserver.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockObserver.class new file mode 100644 index 0000000..c5287c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockObserver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockObsidian.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockObsidian.class new file mode 100644 index 0000000..44d8ae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockObsidian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLeaf$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLeaf$1.class new file mode 100644 index 0000000..dba595e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLeaf$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLeaf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLeaf.class new file mode 100644 index 0000000..99c64d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLeaf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog$1.class new file mode 100644 index 0000000..46a21b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog$2.class new file mode 100644 index 0000000..3261c48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog.class new file mode 100644 index 0000000..0ccdc98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOldLog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOre.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOre.class new file mode 100644 index 0000000..a3b03a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockOre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPackedIce.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPackedIce.class new file mode 100644 index 0000000..b133de5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPackedIce.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPane$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPane$1.class new file mode 100644 index 0000000..8bdd327 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPane$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPane.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPane.class new file mode 100644 index 0000000..6383cec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPane.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonBase$1.class new file mode 100644 index 0000000..31912e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonBase.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonBase.class new file mode 100644 index 0000000..10540e6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension$1.class new file mode 100644 index 0000000..f0d8f14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension$EnumPistonType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension$EnumPistonType.class new file mode 100644 index 0000000..f8f74d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension$EnumPistonType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension.class new file mode 100644 index 0000000..33492d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonExtension.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonMoving.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonMoving.class new file mode 100644 index 0000000..f72d446 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPistonMoving.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPlanks$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPlanks$EnumType.class new file mode 100644 index 0000000..8bd28ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPlanks$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPlanks.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPlanks.class new file mode 100644 index 0000000..5c0f744 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPlanks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal$1.class new file mode 100644 index 0000000..94630d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal$Size.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal$Size.class new file mode 100644 index 0000000..25857fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal$Size.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal.class new file mode 100644 index 0000000..b950ba5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPortal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPotato.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPotato.class new file mode 100644 index 0000000..29585ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPotato.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate$1.class new file mode 100644 index 0000000..6bb0a23 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate$Sensitivity.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate$Sensitivity.class new file mode 100644 index 0000000..18d23fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate$Sensitivity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate.class new file mode 100644 index 0000000..e200e5c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlateWeighted.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlateWeighted.class new file mode 100644 index 0000000..db00c32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPressurePlateWeighted.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPrismarine$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPrismarine$EnumType.class new file mode 100644 index 0000000..831f50a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPrismarine$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPrismarine.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPrismarine.class new file mode 100644 index 0000000..a5b1c3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPrismarine.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPumpkin$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPumpkin$1.class new file mode 100644 index 0000000..059d4dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPumpkin$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPumpkin.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPumpkin.class new file mode 100644 index 0000000..500917c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPumpkin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Double.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Double.class new file mode 100644 index 0000000..5c8454e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Double.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Half.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Half.class new file mode 100644 index 0000000..45f6e86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Half.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Variant.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Variant.class new file mode 100644 index 0000000..0f17958 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab$Variant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab.class new file mode 100644 index 0000000..664c7fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockPurpurSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz$1.class new file mode 100644 index 0000000..82afae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz$EnumType.class new file mode 100644 index 0000000..736f0fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz.class new file mode 100644 index 0000000..169f8e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockQuartz.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRail$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRail$1.class new file mode 100644 index 0000000..2149b0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRail$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRail.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRail.class new file mode 100644 index 0000000..269de67 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRail.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$1.class new file mode 100644 index 0000000..79e49f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$EnumRailDirection.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$EnumRailDirection.class new file mode 100644 index 0000000..1514ec4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$EnumRailDirection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$Rail.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$Rail.class new file mode 100644 index 0000000..d2714c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase$Rail.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase.class new file mode 100644 index 0000000..f15ebe6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector$1.class new file mode 100644 index 0000000..a003b61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector$2.class new file mode 100644 index 0000000..ed7a03f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector.class new file mode 100644 index 0000000..4bbdf5b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailDetector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered$1.class new file mode 100644 index 0000000..a50e454 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered$2.class new file mode 100644 index 0000000..87c2983 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered.class new file mode 100644 index 0000000..b2cac85 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRailPowered.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedFlower.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedFlower.class new file mode 100644 index 0000000..a69bab7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedFlower.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedSandstone$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedSandstone$EnumType.class new file mode 100644 index 0000000..873f7ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedSandstone$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedSandstone.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedSandstone.class new file mode 100644 index 0000000..81385c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedSandstone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator$1.class new file mode 100644 index 0000000..40a44c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator$Mode.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator$Mode.class new file mode 100644 index 0000000..747c6e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator$Mode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator.class new file mode 100644 index 0000000..88156a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneDiode.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneDiode.class new file mode 100644 index 0000000..ec3dac2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneDiode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneLight.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneLight.class new file mode 100644 index 0000000..c76b2e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneLight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneOre.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneOre.class new file mode 100644 index 0000000..63eec8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneOre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneRepeater.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneRepeater.class new file mode 100644 index 0000000..7ebe1c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneRepeater.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneTorch$Toggle.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneTorch$Toggle.class new file mode 100644 index 0000000..45725d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneTorch$Toggle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneTorch.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneTorch.class new file mode 100644 index 0000000..15c3842 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneTorch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire$1.class new file mode 100644 index 0000000..39ae189 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire$EnumAttachPosition.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire$EnumAttachPosition.class new file mode 100644 index 0000000..83abd3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire$EnumAttachPosition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire.class new file mode 100644 index 0000000..8bae3f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRedstoneWire.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockReed.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockReed.class new file mode 100644 index 0000000..0428b02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockReed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRotatedPillar$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRotatedPillar$1.class new file mode 100644 index 0000000..e572c7e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRotatedPillar$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRotatedPillar.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRotatedPillar.class new file mode 100644 index 0000000..d36a69f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockRotatedPillar.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSand$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSand$EnumType.class new file mode 100644 index 0000000..c7c241c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSand$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSand.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSand.class new file mode 100644 index 0000000..2b94321 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSandStone$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSandStone$EnumType.class new file mode 100644 index 0000000..a9103ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSandStone$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSandStone.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSandStone.class new file mode 100644 index 0000000..c62d19f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSandStone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSapling$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSapling$1.class new file mode 100644 index 0000000..b1e21e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSapling$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSapling.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSapling.class new file mode 100644 index 0000000..723e948 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSapling.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSeaLantern.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSeaLantern.class new file mode 100644 index 0000000..bc7a856 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSeaLantern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockShulkerBox$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockShulkerBox$1.class new file mode 100644 index 0000000..9507656 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockShulkerBox$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockShulkerBox.class new file mode 100644 index 0000000..47dd2ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSign.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSign.class new file mode 100644 index 0000000..6a60f9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$1.class new file mode 100644 index 0000000..994f2ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$1.class new file mode 100644 index 0000000..f5d277b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$2.class new file mode 100644 index 0000000..872f692 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$3.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$3.class new file mode 100644 index 0000000..b5991c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$4.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$4.class new file mode 100644 index 0000000..392b883 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$5.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$5.class new file mode 100644 index 0000000..4d33ff9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$6.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$6.class new file mode 100644 index 0000000..945a16c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType.class new file mode 100644 index 0000000..76a1d0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish.class new file mode 100644 index 0000000..ec1fcd9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSilverfish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull$1.class new file mode 100644 index 0000000..e22ad17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull$2.class new file mode 100644 index 0000000..a0c7fdf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull.class new file mode 100644 index 0000000..06ccf22 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSkull.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlab$EnumBlockHalf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlab$EnumBlockHalf.class new file mode 100644 index 0000000..ccb7a8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlab$EnumBlockHalf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlab.class new file mode 100644 index 0000000..f5a47f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlime.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlime.class new file mode 100644 index 0000000..8223a5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSlime.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSnow.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSnow.class new file mode 100644 index 0000000..e936543 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSnow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSnowBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSnowBlock.class new file mode 100644 index 0000000..20dcddd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSnowBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSoulSand.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSoulSand.class new file mode 100644 index 0000000..d922637 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSoulSand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSourceImpl.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSourceImpl.class new file mode 100644 index 0000000..da16d22 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSourceImpl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSponge.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSponge.class new file mode 100644 index 0000000..4c3bbf4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockSponge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlass.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlass.class new file mode 100644 index 0000000..e9e66a7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlassPane$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlassPane$1.class new file mode 100644 index 0000000..74d213d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlassPane$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlassPane.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlassPane.class new file mode 100644 index 0000000..77fd544 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedGlassPane.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedHardenedClay.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedHardenedClay.class new file mode 100644 index 0000000..6505d26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStainedHardenedClay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$1.class new file mode 100644 index 0000000..4a4b71d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$EnumHalf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$EnumHalf.class new file mode 100644 index 0000000..d985b55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$EnumHalf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$EnumShape.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$EnumShape.class new file mode 100644 index 0000000..5d5c023 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs$EnumShape.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs.class new file mode 100644 index 0000000..02c8fb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStairs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStandingSign.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStandingSign.class new file mode 100644 index 0000000..b794af1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStandingSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStaticLiquid.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStaticLiquid.class new file mode 100644 index 0000000..4f1bf16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStaticLiquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStem.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStem.class new file mode 100644 index 0000000..5a9ec61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStone$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStone$EnumType.class new file mode 100644 index 0000000..45d67c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStone$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStone.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStone.class new file mode 100644 index 0000000..cd49efc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneBrick$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneBrick$EnumType.class new file mode 100644 index 0000000..a00adcf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneBrick$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneBrick.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneBrick.class new file mode 100644 index 0000000..ea5cfa5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneBrick.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlab$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlab$EnumType.class new file mode 100644 index 0000000..d1c8a0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlab$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlab.class new file mode 100644 index 0000000..1192fc9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlabNew$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlabNew$EnumType.class new file mode 100644 index 0000000..69d1d6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlabNew$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlabNew.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlabNew.class new file mode 100644 index 0000000..8fef186 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStoneSlabNew.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructure$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructure$1.class new file mode 100644 index 0000000..019e60b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructure$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructure.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructure.class new file mode 100644 index 0000000..7ae2dd1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructure.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructureVoid.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructureVoid.class new file mode 100644 index 0000000..2018341 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockStructureVoid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTNT.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTNT.class new file mode 100644 index 0000000..6407162 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTNT.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTallGrass$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTallGrass$EnumType.class new file mode 100644 index 0000000..14d44c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTallGrass$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTallGrass.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTallGrass.class new file mode 100644 index 0000000..7ec8db0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTallGrass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch$1.class new file mode 100644 index 0000000..fc3a307 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch$2.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch$2.class new file mode 100644 index 0000000..b7e5214 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch.class new file mode 100644 index 0000000..25d5db3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTorch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor$1.class new file mode 100644 index 0000000..9234b66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor$DoorHalf.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor$DoorHalf.class new file mode 100644 index 0000000..e040043 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor$DoorHalf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor.class new file mode 100644 index 0000000..13b9c05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTrapDoor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWire$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWire$1.class new file mode 100644 index 0000000..6b6b499 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWire$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWire.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWire.class new file mode 100644 index 0000000..72725c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWire.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWireHook$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWireHook$1.class new file mode 100644 index 0000000..726e64c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWireHook$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWireHook.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWireHook.class new file mode 100644 index 0000000..2bb35d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockTripWireHook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockVine$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockVine$1.class new file mode 100644 index 0000000..b93b9f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockVine$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockVine.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockVine.class new file mode 100644 index 0000000..aa3e27d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockVine.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWall$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWall$EnumType.class new file mode 100644 index 0000000..000eb44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWall$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWall.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWall.class new file mode 100644 index 0000000..579df05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWall.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWallSign$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWallSign$1.class new file mode 100644 index 0000000..c9e42db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWallSign$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWallSign.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWallSign.class new file mode 100644 index 0000000..a54a8bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWallSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWeb.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWeb.class new file mode 100644 index 0000000..a4d4c41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWeb.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWoodSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWoodSlab.class new file mode 100644 index 0000000..0702221 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWoodSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWorkbench$InterfaceCraftingTable.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWorkbench$InterfaceCraftingTable.class new file mode 100644 index 0000000..a57b6e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWorkbench$InterfaceCraftingTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWorkbench.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWorkbench.class new file mode 100644 index 0000000..0b46a76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockWorkbench.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/BlockYellowFlower.class b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockYellowFlower.class new file mode 100644 index 0000000..3a79096 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/BlockYellowFlower.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/IGrowable.class b/build/tmp/recompileMc/compiled/net/minecraft/block/IGrowable.class new file mode 100644 index 0000000..dd9b879 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/IGrowable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/ITileEntityProvider.class b/build/tmp/recompileMc/compiled/net/minecraft/block/ITileEntityProvider.class new file mode 100644 index 0000000..cf116a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/ITileEntityProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/SoundType.class b/build/tmp/recompileMc/compiled/net/minecraft/block/SoundType.class new file mode 100644 index 0000000..a8bf613 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/SoundType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/EnumPushReaction.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/EnumPushReaction.class new file mode 100644 index 0000000..d1d2449 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/EnumPushReaction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/MapColor.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MapColor.class new file mode 100644 index 0000000..7c7a798 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MapColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/Material$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/Material$1.class new file mode 100644 index 0000000..c99e202 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/Material$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/Material.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/Material.class new file mode 100644 index 0000000..4f1d9e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/Material.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialLiquid.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialLiquid.class new file mode 100644 index 0000000..9a51749 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialLiquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialLogic.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialLogic.class new file mode 100644 index 0000000..65d973e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialLogic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialPortal.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialPortal.class new file mode 100644 index 0000000..b1d39e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialPortal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialTransparent.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialTransparent.class new file mode 100644 index 0000000..536824b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/MaterialTransparent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/material/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/block/material/package-info.class new file mode 100644 index 0000000..b53c831 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/material/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/block/package-info.class new file mode 100644 index 0000000..9947ad8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/IProperty.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/IProperty.class new file mode 100644 index 0000000..85e6456 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/IProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyBool.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyBool.class new file mode 100644 index 0000000..64c4f46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyBool.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyDirection.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyDirection.class new file mode 100644 index 0000000..3a975ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyDirection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyEnum.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyEnum.class new file mode 100644 index 0000000..1e6b263 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyEnum.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyHelper.class new file mode 100644 index 0000000..f7308e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyInteger.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyInteger.class new file mode 100644 index 0000000..2a6c95d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/PropertyInteger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/properties/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/package-info.class new file mode 100644 index 0000000..db78d43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/properties/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockFaceShape.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockFaceShape.class new file mode 100644 index 0000000..732452d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockFaceShape.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockPistonStructureHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockPistonStructureHelper.class new file mode 100644 index 0000000..7d5bcb0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockPistonStructureHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateBase$1.class new file mode 100644 index 0000000..87172d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateBase.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateBase.class new file mode 100644 index 0000000..145be53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$1.class new file mode 100644 index 0000000..957e5fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$Builder.class new file mode 100644 index 0000000..3287b3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$StateImplementation.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$StateImplementation.class new file mode 100644 index 0000000..b3de55f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer$StateImplementation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer.class new file mode 100644 index 0000000..20c3458 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockStateContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockWorldState$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockWorldState$1.class new file mode 100644 index 0000000..06c8f16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockWorldState$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockWorldState.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockWorldState.class new file mode 100644 index 0000000..6faaf9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/BlockWorldState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockBehaviors.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockBehaviors.class new file mode 100644 index 0000000..5830127 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockBehaviors.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockProperties.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockProperties.class new file mode 100644 index 0000000..f308a54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockProperties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockState.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockState.class new file mode 100644 index 0000000..f4672aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/IBlockState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/package-info.class new file mode 100644 index 0000000..ede9d7d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockMatcher.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockMatcher.class new file mode 100644 index 0000000..d8c07da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockMatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockMaterialMatcher.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockMaterialMatcher.class new file mode 100644 index 0000000..cbb60a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockMaterialMatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern$CacheLoader.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern$CacheLoader.class new file mode 100644 index 0000000..8b7105d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern$CacheLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern$PatternHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern$PatternHelper.class new file mode 100644 index 0000000..dcd887a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern$PatternHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern.class new file mode 100644 index 0000000..9c71950 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockPattern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockStateMatcher$1.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockStateMatcher$1.class new file mode 100644 index 0000000..a980df5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockStateMatcher$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockStateMatcher.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockStateMatcher.class new file mode 100644 index 0000000..e3b662b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/BlockStateMatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/FactoryBlockPattern.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/FactoryBlockPattern.class new file mode 100644 index 0000000..898ee44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/FactoryBlockPattern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/package-info.class new file mode 100644 index 0000000..dcd6cdf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/block/state/pattern/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/AnvilConverterException.class b/build/tmp/recompileMc/compiled/net/minecraft/client/AnvilConverterException.class new file mode 100644 index 0000000..59cf99f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/AnvilConverterException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/ClientBrandRetriever.class b/build/tmp/recompileMc/compiled/net/minecraft/client/ClientBrandRetriever.class new file mode 100644 index 0000000..27da43a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/ClientBrandRetriever.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/LoadingScreenRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/LoadingScreenRenderer.class new file mode 100644 index 0000000..27b67d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/LoadingScreenRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$1.class new file mode 100644 index 0000000..fe92fe0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$10.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$10.class new file mode 100644 index 0000000..ffbb149 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$11.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$11.class new file mode 100644 index 0000000..922ee97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$12.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$12.class new file mode 100644 index 0000000..5ce2ceb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$13.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$13.class new file mode 100644 index 0000000..176bae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$13.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$14.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$14.class new file mode 100644 index 0000000..6636262 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$14.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$15.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$15.class new file mode 100644 index 0000000..2e4f44e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$15.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$16.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$16.class new file mode 100644 index 0000000..42e5156 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$16.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$2.class new file mode 100644 index 0000000..520f708 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$3.class new file mode 100644 index 0000000..260b610 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$4.class new file mode 100644 index 0000000..0b09a8d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$5.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$5.class new file mode 100644 index 0000000..02e8c91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$6.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$6.class new file mode 100644 index 0000000..dfa80ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$7.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$7.class new file mode 100644 index 0000000..8d49912 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$8.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$8.class new file mode 100644 index 0000000..53488d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$9.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$9.class new file mode 100644 index 0000000..f4bf602 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft.class b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft.class new file mode 100644 index 0000000..a0ce180 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/Minecraft.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ElytraSound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ElytraSound.class new file mode 100644 index 0000000..736adf2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ElytraSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/GuardianSound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/GuardianSound.class new file mode 100644 index 0000000..f2bc809 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/GuardianSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISound$AttenuationType.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISound$AttenuationType.class new file mode 100644 index 0000000..edbdb01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISound$AttenuationType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISound.class new file mode 100644 index 0000000..c93cad2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISoundEventAccessor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISoundEventAccessor.class new file mode 100644 index 0000000..ad493b5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISoundEventAccessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISoundEventListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISoundEventListener.class new file mode 100644 index 0000000..096fccb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ISoundEventListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ITickableSound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ITickableSound.class new file mode 100644 index 0000000..526c5b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/ITickableSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSound.class new file mode 100644 index 0000000..0fa8f0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSoundMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSoundMinecart.class new file mode 100644 index 0000000..121d223 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSoundMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSoundMinecartRiding.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSoundMinecartRiding.class new file mode 100644 index 0000000..e421f6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MovingSoundMinecartRiding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MusicTicker$MusicType.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MusicTicker$MusicType.class new file mode 100644 index 0000000..b5c2e0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MusicTicker$MusicType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MusicTicker.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MusicTicker.class new file mode 100644 index 0000000..75b566c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/MusicTicker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/PositionedSound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/PositionedSound.class new file mode 100644 index 0000000..97af13f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/PositionedSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/PositionedSoundRecord.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/PositionedSoundRecord.class new file mode 100644 index 0000000..057ebc3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/PositionedSoundRecord.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/Sound$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/Sound$Type.class new file mode 100644 index 0000000..a31bfe0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/Sound$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/Sound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/Sound.class new file mode 100644 index 0000000..e9bf7bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/Sound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundEventAccessor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundEventAccessor.class new file mode 100644 index 0000000..ecc71cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundEventAccessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$1.class new file mode 100644 index 0000000..0c2045d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$2.class new file mode 100644 index 0000000..67d8c8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$3.class new file mode 100644 index 0000000..979ee58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler.class new file mode 100644 index 0000000..7b96cfa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundList.class new file mode 100644 index 0000000..4730fe7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundListSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundListSerializer.class new file mode 100644 index 0000000..082a81c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundListSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$1$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$1$1.class new file mode 100644 index 0000000..194c566 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$1.class new file mode 100644 index 0000000..9ab2233 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$2$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$2$1.class new file mode 100644 index 0000000..2d85571 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$2$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$2.class new file mode 100644 index 0000000..cf0485b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$SoundSystemStarterThread.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$SoundSystemStarterThread.class new file mode 100644 index 0000000..2387dca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager$SoundSystemStarterThread.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager.class new file mode 100644 index 0000000..5f8b775 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundRegistry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundRegistry.class new file mode 100644 index 0000000..02bb853 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/SoundRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/audio/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/package-info.class new file mode 100644 index 0000000..ac50101 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/audio/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/entity/AbstractClientPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/AbstractClientPlayer.class new file mode 100644 index 0000000..62ecb6c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/AbstractClientPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/entity/EntityOtherPlayerMP.class b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/EntityOtherPlayerMP.class new file mode 100644 index 0000000..c835206 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/EntityOtherPlayerMP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/entity/EntityPlayerSP.class b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/EntityPlayerSP.class new file mode 100644 index 0000000..35bad7e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/EntityPlayerSP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/entity/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/package-info.class new file mode 100644 index 0000000..8b4a912 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/entity/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/BossInfoClient$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/BossInfoClient$1.class new file mode 100644 index 0000000..b315687 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/BossInfoClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/BossInfoClient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/BossInfoClient.class new file mode 100644 index 0000000..f3570ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/BossInfoClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ChatLine.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ChatLine.class new file mode 100644 index 0000000..5a6739e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ChatLine.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/FontRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/FontRenderer.class new file mode 100644 index 0000000..e7571b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/FontRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/Gui.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/Gui.class new file mode 100644 index 0000000..f9b3a32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/Gui.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiBossOverlay.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiBossOverlay.class new file mode 100644 index 0000000..155cea9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiBossOverlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButton.class new file mode 100644 index 0000000..2ead052 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonImage.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonImage.class new file mode 100644 index 0000000..38e4788 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonImage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonLanguage.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonLanguage.class new file mode 100644 index 0000000..26b35fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonLanguage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonRealmsProxy.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonRealmsProxy.class new file mode 100644 index 0000000..9a33df6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonRealmsProxy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonToggle.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonToggle.class new file mode 100644 index 0000000..96aac7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiButtonToggle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiChat$ChatTabCompleter.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiChat$ChatTabCompleter.class new file mode 100644 index 0000000..d05560e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiChat$ChatTabCompleter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiChat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiChat.class new file mode 100644 index 0000000..1ea570a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiChat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.class new file mode 100644 index 0000000..928c419 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock$1.class new file mode 100644 index 0000000..6f3689d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock$2.class new file mode 100644 index 0000000..da18a2f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock.class new file mode 100644 index 0000000..22aead3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCommandBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiConfirmOpenLink.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiConfirmOpenLink.class new file mode 100644 index 0000000..f049344 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiConfirmOpenLink.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiControls.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiControls.class new file mode 100644 index 0000000..5d62ede Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiControls.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateFlatWorld$Details.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateFlatWorld$Details.class new file mode 100644 index 0000000..640fba0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateFlatWorld$Details.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateFlatWorld.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateFlatWorld.class new file mode 100644 index 0000000..cef3475 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateFlatWorld.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateWorld.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateWorld.class new file mode 100644 index 0000000..83f6201 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCreateWorld.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin$1.class new file mode 100644 index 0000000..c1ddce2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart.class new file mode 100644 index 0000000..98de6f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin$ButtonPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin.class new file mode 100644 index 0000000..29e5b6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeSkin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeWorldScreen$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeWorldScreen$1.class new file mode 100644 index 0000000..c8ed19d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeWorldScreen$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeWorldScreen.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeWorldScreen.class new file mode 100644 index 0000000..ccc4b66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiCustomizeWorldScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiDisconnected.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiDisconnected.class new file mode 100644 index 0000000..e1261b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiDisconnected.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiDownloadTerrain.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiDownloadTerrain.class new file mode 100644 index 0000000..efc8c16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiDownloadTerrain.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiEnchantment.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiEnchantment.class new file mode 100644 index 0000000..0b70fe5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiEnchantment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiErrorScreen.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiErrorScreen.class new file mode 100644 index 0000000..c9246da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiErrorScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets$LayerItem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets$LayerItem.class new file mode 100644 index 0000000..45ee9fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets$LayerItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets$ListSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets$ListSlot.class new file mode 100644 index 0000000..54eec71 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets$ListSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets.class new file mode 100644 index 0000000..057ae52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiFlatPresets.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiGameOver.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiGameOver.class new file mode 100644 index 0000000..ae204b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiGameOver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiHopper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiHopper.class new file mode 100644 index 0000000..c16c968 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiHopper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngame$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngame$1.class new file mode 100644 index 0000000..d285d83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngame$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngame.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngame.class new file mode 100644 index 0000000..eb6efad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngameMenu.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngameMenu.class new file mode 100644 index 0000000..0a5d0c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiIngameMenu.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$1.class new file mode 100644 index 0000000..3a23237 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry.class new file mode 100644 index 0000000..b41d4f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$CategoryEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$KeyEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$KeyEntry.class new file mode 100644 index 0000000..04b0c4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList$KeyEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList.class new file mode 100644 index 0000000..7ca5fb1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiKeyBindingList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLabel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLabel.class new file mode 100644 index 0000000..390b219 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLabel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLanguage$List.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLanguage$List.class new file mode 100644 index 0000000..2195720 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLanguage$List.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLanguage.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLanguage.class new file mode 100644 index 0000000..049075f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLanguage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListButton.class new file mode 100644 index 0000000..cd8d922 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListExtended$IGuiListEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListExtended$IGuiListEntry.class new file mode 100644 index 0000000..810e7e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListExtended$IGuiListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListExtended.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListExtended.class new file mode 100644 index 0000000..7315d0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListExtended.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelection.class new file mode 100644 index 0000000..8506176 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry$1.class new file mode 100644 index 0000000..e797edc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry$2.class new file mode 100644 index 0000000..e1ece5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry.class new file mode 100644 index 0000000..69c7c26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiListWorldSelectionEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLockIconButton$Icon.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLockIconButton$Icon.class new file mode 100644 index 0000000..f39c970 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLockIconButton$Icon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLockIconButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLockIconButton.class new file mode 100644 index 0000000..cf65e0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiLockIconButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMainMenu.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMainMenu.class new file mode 100644 index 0000000..240cef2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMainMenu.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMemoryErrorScreen.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMemoryErrorScreen.class new file mode 100644 index 0000000..d00d7ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMemoryErrorScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMerchant$MerchantButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMerchant$MerchantButton.class new file mode 100644 index 0000000..483237a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMerchant$MerchantButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMerchant.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMerchant.class new file mode 100644 index 0000000..a9c1824 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMerchant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMultiplayer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMultiplayer.class new file mode 100644 index 0000000..28809ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiMultiplayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiNewChat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiNewChat.class new file mode 100644 index 0000000..eb21362 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiNewChat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionButton.class new file mode 100644 index 0000000..b84394b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionSlider.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionSlider.class new file mode 100644 index 0000000..63d4544 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionSlider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptions.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptions.class new file mode 100644 index 0000000..3f7d166 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptions.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionsRowList$Row.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionsRowList$Row.class new file mode 100644 index 0000000..66bae74 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionsRowList$Row.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionsRowList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionsRowList.class new file mode 100644 index 0000000..dcf1ff4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOptionsRowList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOverlayDebug$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOverlayDebug$1.class new file mode 100644 index 0000000..3ef1df4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOverlayDebug$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOverlayDebug.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOverlayDebug.class new file mode 100644 index 0000000..e40778e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiOverlayDebug.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry.class new file mode 100644 index 0000000..fd4d3a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$EditBoxEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry.class new file mode 100644 index 0000000..454f597 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiButtonEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiEntry.class new file mode 100644 index 0000000..ac4df69 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry.class new file mode 100644 index 0000000..ff71162 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiLabelEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiListEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiListEntry.class new file mode 100644 index 0000000..61a2e81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiResponder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiResponder.class new file mode 100644 index 0000000..723dc33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiResponder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry.class new file mode 100644 index 0000000..1852142 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList$GuiSlideEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList.class new file mode 100644 index 0000000..33798a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPageButtonList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay$1.class new file mode 100644 index 0000000..866f157 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator.class new file mode 100644 index 0000000..b7d3e95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay$PlayerComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay.class new file mode 100644 index 0000000..3331579 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiPlayerTabOverlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiRepair.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiRepair.class new file mode 100644 index 0000000..b259696 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiRepair.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackAvailable.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackAvailable.class new file mode 100644 index 0000000..18e6178 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackAvailable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackList.class new file mode 100644 index 0000000..e0ba350 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackSelected.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackSelected.class new file mode 100644 index 0000000..0386e1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiResourcePackSelected.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreen.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreen.class new file mode 100644 index 0000000..90a2259 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenAddServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenAddServer$1.class new file mode 100644 index 0000000..c847134 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenAddServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenAddServer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenAddServer.class new file mode 100644 index 0000000..d5bde83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenAddServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenBook$NextPageButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenBook$NextPageButton.class new file mode 100644 index 0000000..4bc4569 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenBook$NextPageButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenBook.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenBook.class new file mode 100644 index 0000000..aaf14f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets$Info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets$Info.class new file mode 100644 index 0000000..ddd3267 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets$Info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset.class new file mode 100644 index 0000000..92d4337 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets$ListPreset.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets.class new file mode 100644 index 0000000..9c97bdb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenCustomizePresets.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenDemo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenDemo.class new file mode 100644 index 0000000..f6d8448 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenDemo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenOptionsSounds$Button.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenOptionsSounds$Button.class new file mode 100644 index 0000000..50018e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenOptionsSounds$Button.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenOptionsSounds.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenOptionsSounds.class new file mode 100644 index 0000000..8f50a2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenOptionsSounds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenRealmsProxy.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenRealmsProxy.class new file mode 100644 index 0000000..8931dd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenRealmsProxy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenResourcePacks.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenResourcePacks.class new file mode 100644 index 0000000..086e5fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenResourcePacks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenServerList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenServerList.class new file mode 100644 index 0000000..92b61f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenServerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenWorking.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenWorking.class new file mode 100644 index 0000000..c46465b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiScreenWorking.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiShareToLan.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiShareToLan.class new file mode 100644 index 0000000..40f3114 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiShareToLan.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.class new file mode 100644 index 0000000..daae3b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSleepMP.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSleepMP.class new file mode 100644 index 0000000..61de188 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSleepMP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlider$FormatHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlider$FormatHelper.class new file mode 100644 index 0000000..86efe47 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlider$FormatHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlider.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlider.class new file mode 100644 index 0000000..4a159c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlot.class new file mode 100644 index 0000000..7d8ee51 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlotRealmsProxy.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlotRealmsProxy.class new file mode 100644 index 0000000..b53854a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSlotRealmsProxy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSnooper$List.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSnooper$List.class new file mode 100644 index 0000000..9012369 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSnooper$List.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSnooper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSnooper.class new file mode 100644 index 0000000..2270d6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSnooper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSpectator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSpectator.class new file mode 100644 index 0000000..9cd6a6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSpectator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle.class new file mode 100644 index 0000000..e4a78e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSubtitleOverlay$Subtitle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSubtitleOverlay.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSubtitleOverlay.class new file mode 100644 index 0000000..b3768c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiSubtitleOverlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiTextField.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiTextField.class new file mode 100644 index 0000000..0b3094b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiTextField.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiUtilRenderComponents.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiUtilRenderComponents.class new file mode 100644 index 0000000..7b9765e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiUtilRenderComponents.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiVideoSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiVideoSettings.class new file mode 100644 index 0000000..4c1a548 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiVideoSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWinGame.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWinGame.class new file mode 100644 index 0000000..11b160b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWinGame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWorldEdit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWorldEdit.class new file mode 100644 index 0000000..132ae03 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWorldEdit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWorldSelection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWorldSelection.class new file mode 100644 index 0000000..af3abf4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiWorldSelection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiYesNo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiYesNo.class new file mode 100644 index 0000000..af716bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiYesNo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiYesNoCallback.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiYesNoCallback.class new file mode 100644 index 0000000..fb33813 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/GuiYesNoCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/IProgressMeter.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/IProgressMeter.class new file mode 100644 index 0000000..1dbc557 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/IProgressMeter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer$1.class new file mode 100644 index 0000000..9e83b6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer$Instance.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer$Instance.class new file mode 100644 index 0000000..19b2d4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer.class new file mode 100644 index 0000000..8baf0d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/MapItemRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ScaledResolution.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ScaledResolution.class new file mode 100644 index 0000000..2e0880f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ScaledResolution.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ScreenChatOptions.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ScreenChatOptions.class new file mode 100644 index 0000000..4bb270e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ScreenChatOptions.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryLanDetected.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryLanDetected.class new file mode 100644 index 0000000..174a8a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryLanDetected.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryLanScan.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryLanScan.class new file mode 100644 index 0000000..2a3264f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryLanScan.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryNormal$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryNormal$1.class new file mode 100644 index 0000000..a8ac623 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryNormal$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryNormal.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryNormal.class new file mode 100644 index 0000000..f4f9e28 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerListEntryNormal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerSelectionList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerSelectionList.class new file mode 100644 index 0000000..4ae9cc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/ServerSelectionList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$Stats.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$Stats.class new file mode 100644 index 0000000..5bbaa58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$Stats.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1.class new file mode 100644 index 0000000..c42bfbe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsBlock$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsBlock.class new file mode 100644 index 0000000..e4f0475 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsGeneral.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsGeneral.class new file mode 100644 index 0000000..9dbd7eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsGeneral.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsItem$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsItem$1.class new file mode 100644 index 0000000..658bc6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsItem$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsItem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsItem.class new file mode 100644 index 0000000..fd16747 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsMobsList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsMobsList.class new file mode 100644 index 0000000..82d554d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats$StatsMobsList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats.class new file mode 100644 index 0000000..3b858d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/GuiStats.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/package-info.class new file mode 100644 index 0000000..d247f68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/achievement/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementState.class new file mode 100644 index 0000000..351accb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementTabType$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementTabType$1.class new file mode 100644 index 0000000..753f095 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementTabType$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementTabType.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementTabType.class new file mode 100644 index 0000000..28ba750 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/AdvancementTabType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiAdvancement.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiAdvancement.class new file mode 100644 index 0000000..d668e7c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiAdvancement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiAdvancementTab.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiAdvancementTab.class new file mode 100644 index 0000000..2eec758 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiAdvancementTab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiScreenAdvancements.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiScreenAdvancements.class new file mode 100644 index 0000000..7781c79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/GuiScreenAdvancements.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/package-info.class new file mode 100644 index 0000000..91a4b80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/advancements/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/IChatListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/IChatListener.class new file mode 100644 index 0000000..0f85b9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/IChatListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/NarratorChatListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/NarratorChatListener.class new file mode 100644 index 0000000..b237989 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/NarratorChatListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/NormalChatListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/NormalChatListener.class new file mode 100644 index 0000000..bd94a87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/NormalChatListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/OverlayChatListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/OverlayChatListener.class new file mode 100644 index 0000000..d1b592a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/OverlayChatListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/package-info.class new file mode 100644 index 0000000..1436c88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/chat/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/CreativeCrafting.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/CreativeCrafting.class new file mode 100644 index 0000000..0b5be00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/CreativeCrafting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$Button.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$Button.class new file mode 100644 index 0000000..0c32c8d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$Button.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$CancelButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$CancelButton.class new file mode 100644 index 0000000..d763f61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$CancelButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton.class new file mode 100644 index 0000000..8fd2863 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$ConfirmButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$PowerButton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$PowerButton.class new file mode 100644 index 0000000..0be294a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon$PowerButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon.class new file mode 100644 index 0000000..576608e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBeacon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBrewingStand.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBrewingStand.class new file mode 100644 index 0000000..cfea3ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiBrewingStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiChest.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiChest.class new file mode 100644 index 0000000..2c78e67 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainer.class new file mode 100644 index 0000000..43f60e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative.class new file mode 100644 index 0000000..6997789 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$ContainerCreative.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot.class new file mode 100644 index 0000000..946518c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$CreativeSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot.class new file mode 100644 index 0000000..10057a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative$LockedSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative.class new file mode 100644 index 0000000..fe72638 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiContainerCreative.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiCrafting.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiCrafting.class new file mode 100644 index 0000000..0f5c2bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiCrafting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiDispenser.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiDispenser.class new file mode 100644 index 0000000..fcb433c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiDispenser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1.class new file mode 100644 index 0000000..20220f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.class new file mode 100644 index 0000000..949c036 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditSign.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditSign.class new file mode 100644 index 0000000..9f56692 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditStructure$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditStructure$1.class new file mode 100644 index 0000000..66487ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditStructure$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditStructure.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditStructure.class new file mode 100644 index 0000000..f1d70b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiEditStructure.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiFurnace.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiFurnace.class new file mode 100644 index 0000000..5a2e4a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiFurnace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiInventory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiInventory.class new file mode 100644 index 0000000..5ce4dab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiInventory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.class new file mode 100644 index 0000000..ccb7386 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiShulkerBox.class new file mode 100644 index 0000000..e51ed35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/GuiShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/package-info.class new file mode 100644 index 0000000..ffdd724 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/inventory/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/package-info.class new file mode 100644 index 0000000..fbd5da8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient.class new file mode 100644 index 0000000..07153f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GhostRecipe$GhostIngredient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GhostRecipe.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GhostRecipe.class new file mode 100644 index 0000000..2f55595 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GhostRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiButtonRecipe.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiButtonRecipe.class new file mode 100644 index 0000000..7592edf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiButtonRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.class new file mode 100644 index 0000000..d8cd072 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeBook.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeBook.class new file mode 100644 index 0000000..ac094ee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button.class new file mode 100644 index 0000000..3b143c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeOverlay$Button.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeOverlay.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeOverlay.class new file mode 100644 index 0000000..1af2b68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/GuiRecipeOverlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/IRecipeShownListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/IRecipeShownListener.class new file mode 100644 index 0000000..31ce528 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/IRecipeShownListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/IRecipeUpdateListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/IRecipeUpdateListener.class new file mode 100644 index 0000000..ae37b9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/IRecipeUpdateListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/RecipeBookPage.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/RecipeBookPage.class new file mode 100644 index 0000000..7742e50 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/RecipeBookPage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/RecipeList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/RecipeList.class new file mode 100644 index 0000000..24f9a7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/RecipeList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/package-info.class new file mode 100644 index 0000000..17017a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/recipebook/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/BaseSpectatorGroup.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/BaseSpectatorGroup.class new file mode 100644 index 0000000..6e46661 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/BaseSpectatorGroup.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuObject.class new file mode 100644 index 0000000..6109c79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.class new file mode 100644 index 0000000..7e7e755 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuView.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuView.class new file mode 100644 index 0000000..5a72b07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/ISpectatorMenuView.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/PlayerMenuObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/PlayerMenuObject.class new file mode 100644 index 0000000..e391e41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/PlayerMenuObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$1.class new file mode 100644 index 0000000..60e5ac7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject.class new file mode 100644 index 0000000..4e32783 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$EndSpectatorObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject.class new file mode 100644 index 0000000..72be4ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu$MoveMenuObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu.class new file mode 100644 index 0000000..6891f0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/SpectatorMenu.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/SpectatorDetails.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/SpectatorDetails.class new file mode 100644 index 0000000..d8e25d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/SpectatorDetails.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1.class new file mode 100644 index 0000000..80b1117 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToPlayer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.class new file mode 100644 index 0000000..e10ff29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject.class new file mode 100644 index 0000000..38c42a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToTeam$TeamSelectionObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToTeam.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToTeam.class new file mode 100644 index 0000000..f6f9ba8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/TeleportToTeam.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/package-info.class new file mode 100644 index 0000000..fae083c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/categories/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/package-info.class new file mode 100644 index 0000000..586093a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/spectator/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/AdvancementToast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/AdvancementToast.class new file mode 100644 index 0000000..0c6a0a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/AdvancementToast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast$1.class new file mode 100644 index 0000000..63cbd59 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast$ToastInstance.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast$ToastInstance.class new file mode 100644 index 0000000..235529e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast$ToastInstance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast.class new file mode 100644 index 0000000..d444734 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/GuiToast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/IToast$Visibility.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/IToast$Visibility.class new file mode 100644 index 0000000..ae4f239 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/IToast$Visibility.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/IToast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/IToast.class new file mode 100644 index 0000000..e3de35f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/IToast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/RecipeToast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/RecipeToast.class new file mode 100644 index 0000000..baf20e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/RecipeToast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/SystemToast$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/SystemToast$Type.class new file mode 100644 index 0000000..d96c49f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/SystemToast$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/SystemToast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/SystemToast.class new file mode 100644 index 0000000..eb7b0a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/SystemToast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/TutorialToast$Icons.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/TutorialToast$Icons.class new file mode 100644 index 0000000..b293b6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/TutorialToast$Icons.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/TutorialToast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/TutorialToast.class new file mode 100644 index 0000000..65ee327 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/TutorialToast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/package-info.class new file mode 100644 index 0000000..1e1a932 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/gui/toasts/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$DisplayInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$DisplayInformation.class new file mode 100644 index 0000000..c56629d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$DisplayInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$FolderInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$FolderInformation.class new file mode 100644 index 0000000..6cacf48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$FolderInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$GameInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$GameInformation.class new file mode 100644 index 0000000..1c1ad15 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$GameInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$ServerInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$ServerInformation.class new file mode 100644 index 0000000..a30ec9e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$ServerInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$UserInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$UserInformation.class new file mode 100644 index 0000000..4ce009c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration$UserInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration.class new file mode 100644 index 0000000..1e88bee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/GameConfiguration.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main$1.class new file mode 100644 index 0000000..cf7b800 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main$2.class new file mode 100644 index 0000000..4784945 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main.class new file mode 100644 index 0000000..6c6b772 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/Main.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/main/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/main/package-info.class new file mode 100644 index 0000000..2ca6a25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/main/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/IMultipassModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/IMultipassModel.class new file mode 100644 index 0000000..f2524f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/IMultipassModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelArmorStand.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelArmorStand.class new file mode 100644 index 0000000..712bcf8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelArmorStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelArmorStandArmor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelArmorStandArmor.class new file mode 100644 index 0000000..2ce1697 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelArmorStandArmor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBanner.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBanner.class new file mode 100644 index 0000000..e45246f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBanner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBase.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBase.class new file mode 100644 index 0000000..f460017 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBat.class new file mode 100644 index 0000000..94fc1b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBed.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBed.class new file mode 100644 index 0000000..fc3ba94 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped$1.class new file mode 100644 index 0000000..6055482 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped$ArmPose.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped$ArmPose.class new file mode 100644 index 0000000..1921346 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped$ArmPose.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped.class new file mode 100644 index 0000000..5eeba83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBiped.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBlaze.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBlaze.class new file mode 100644 index 0000000..6c5c4f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBlaze.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBoat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBoat.class new file mode 100644 index 0000000..04365c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBoat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBook.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBook.class new file mode 100644 index 0000000..2d6d406 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBox.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBox.class new file mode 100644 index 0000000..f30c01e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelChest.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelChest.class new file mode 100644 index 0000000..4f609f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelChicken.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelChicken.class new file mode 100644 index 0000000..c6d2a05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelChicken.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelCow.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelCow.class new file mode 100644 index 0000000..54fec3d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelCow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelCreeper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelCreeper.class new file mode 100644 index 0000000..132151d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelCreeper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelDragon.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelDragon.class new file mode 100644 index 0000000..d0cd6cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelDragon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelDragonHead.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelDragonHead.class new file mode 100644 index 0000000..54fcb2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelDragonHead.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelElytra.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelElytra.class new file mode 100644 index 0000000..6aa240d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelElytra.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderCrystal.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderCrystal.class new file mode 100644 index 0000000..d3fa978 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderCrystal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderMite.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderMite.class new file mode 100644 index 0000000..b4cd631 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderMite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderman.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderman.class new file mode 100644 index 0000000..309ea31 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEnderman.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEvokerFangs.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEvokerFangs.class new file mode 100644 index 0000000..e0fe001 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelEvokerFangs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelGhast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelGhast.class new file mode 100644 index 0000000..1f882bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelGhast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelGuardian.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelGuardian.class new file mode 100644 index 0000000..987632e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelGuardian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelHorse.class new file mode 100644 index 0000000..8bdb440 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelHumanoidHead.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelHumanoidHead.class new file mode 100644 index 0000000..c4eb1e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelHumanoidHead.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelIllager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelIllager.class new file mode 100644 index 0000000..f4f0d32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelIllager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelIronGolem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelIronGolem.class new file mode 100644 index 0000000..e3e5920 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelIronGolem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLargeChest.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLargeChest.class new file mode 100644 index 0000000..46fd922 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLargeChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLeashKnot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLeashKnot.class new file mode 100644 index 0000000..f5d1575 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLeashKnot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLlama.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLlama.class new file mode 100644 index 0000000..046b75a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLlama.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLlamaSpit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLlamaSpit.class new file mode 100644 index 0000000..ecd244e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelLlamaSpit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelMagmaCube.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelMagmaCube.class new file mode 100644 index 0000000..11b8b87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelMagmaCube.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelMinecart.class new file mode 100644 index 0000000..dc74c0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelOcelot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelOcelot.class new file mode 100644 index 0000000..089b548 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelOcelot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelParrot$State.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelParrot$State.class new file mode 100644 index 0000000..6b1e069 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelParrot$State.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelParrot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelParrot.class new file mode 100644 index 0000000..79fd286 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelParrot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPig.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPig.class new file mode 100644 index 0000000..b8d40d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPig.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPlayer.class new file mode 100644 index 0000000..ca2b178 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPolarBear.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPolarBear.class new file mode 100644 index 0000000..e278606 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelPolarBear.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelQuadruped.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelQuadruped.class new file mode 100644 index 0000000..19d9cfc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelQuadruped.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelRabbit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelRabbit.class new file mode 100644 index 0000000..24fe902 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelRabbit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelRenderer.class new file mode 100644 index 0000000..6ecf6d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSheep1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSheep1.class new file mode 100644 index 0000000..110eaee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSheep1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSheep2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSheep2.class new file mode 100644 index 0000000..311903a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSheep2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShield.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShield.class new file mode 100644 index 0000000..41bd8a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShield.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShulker.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShulker.class new file mode 100644 index 0000000..f612b57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShulker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShulkerBullet.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShulkerBullet.class new file mode 100644 index 0000000..aa631c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelShulkerBullet.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSign.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSign.class new file mode 100644 index 0000000..744c428 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSilverfish.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSilverfish.class new file mode 100644 index 0000000..d2f661b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSilverfish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSkeleton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSkeleton.class new file mode 100644 index 0000000..c6f7db5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSkeleton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSkeletonHead.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSkeletonHead.class new file mode 100644 index 0000000..40273bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSkeletonHead.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSlime.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSlime.class new file mode 100644 index 0000000..6f0c237 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSlime.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSnowMan.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSnowMan.class new file mode 100644 index 0000000..c994df7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSnowMan.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSpider.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSpider.class new file mode 100644 index 0000000..6be090e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSpider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSquid.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSquid.class new file mode 100644 index 0000000..2710332 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelSquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelVex.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelVex.class new file mode 100644 index 0000000..7faf9cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelVex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelVillager.class new file mode 100644 index 0000000..6961b9d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWitch.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWitch.class new file mode 100644 index 0000000..fe79813 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWitch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWither.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWither.class new file mode 100644 index 0000000..854c5ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWither.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWolf.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWolf.class new file mode 100644 index 0000000..b48deb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelWolf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelZombie.class new file mode 100644 index 0000000..b15ba1e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelZombieVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelZombieVillager.class new file mode 100644 index 0000000..637f8fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/ModelZombieVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/PositionTextureVertex.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/PositionTextureVertex.class new file mode 100644 index 0000000..971f765 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/PositionTextureVertex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/TextureOffset.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/TextureOffset.class new file mode 100644 index 0000000..c29a2f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/TextureOffset.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/TexturedQuad.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/TexturedQuad.class new file mode 100644 index 0000000..ed7a76e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/TexturedQuad.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/model/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/model/package-info.class new file mode 100644 index 0000000..79792a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/model/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ChunkProviderClient$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ChunkProviderClient$1.class new file mode 100644 index 0000000..378acc7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ChunkProviderClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ChunkProviderClient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ChunkProviderClient.class new file mode 100644 index 0000000..f54e760 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ChunkProviderClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ClientAdvancementManager$IListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ClientAdvancementManager$IListener.class new file mode 100644 index 0000000..1e05625 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ClientAdvancementManager$IListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ClientAdvancementManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ClientAdvancementManager.class new file mode 100644 index 0000000..65b2a2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ClientAdvancementManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/GuiConnecting$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/GuiConnecting$1.class new file mode 100644 index 0000000..dcbad03 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/GuiConnecting$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/GuiConnecting.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/GuiConnecting.class new file mode 100644 index 0000000..6acc471 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/GuiConnecting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/PlayerControllerMP.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/PlayerControllerMP.class new file mode 100644 index 0000000..bd5fd40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/PlayerControllerMP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerAddress.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerAddress.class new file mode 100644 index 0000000..5950c8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerAddress.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerData$ServerResourceMode.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerData$ServerResourceMode.class new file mode 100644 index 0000000..f8b8e32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerData$ServerResourceMode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerData.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerData.class new file mode 100644 index 0000000..16b18c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerList.class new file mode 100644 index 0000000..996140f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ServerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ThreadLanServerPing.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ThreadLanServerPing.class new file mode 100644 index 0000000..29f4086 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/ThreadLanServerPing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$1.class new file mode 100644 index 0000000..d022d85 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$2.class new file mode 100644 index 0000000..b2c2e07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$3.class new file mode 100644 index 0000000..3d234c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$4.class new file mode 100644 index 0000000..7975ea0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient.class new file mode 100644 index 0000000..94f8190 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/WorldClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/package-info.class new file mode 100644 index 0000000..830d849 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/multiplayer/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector$LanServerList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector$LanServerList.class new file mode 100644 index 0000000..10965e6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector$LanServerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector$ThreadLanServerFind.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector$ThreadLanServerFind.class new file mode 100644 index 0000000..dbe2a90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector$ThreadLanServerFind.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector.class new file mode 100644 index 0000000..2c464d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerDetector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerInfo.class new file mode 100644 index 0000000..e1bbad2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/LanServerInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerHandshakeMemory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerHandshakeMemory.class new file mode 100644 index 0000000..ebd71a4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerHandshakeMemory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerLoginClient$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerLoginClient$1.class new file mode 100644 index 0000000..215439f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerLoginClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerLoginClient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerLoginClient.class new file mode 100644 index 0000000..bcd514d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerLoginClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$1$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$1$1.class new file mode 100644 index 0000000..fd4450c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$1.class new file mode 100644 index 0000000..77b73e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$2.class new file mode 100644 index 0000000..1ab57ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$3.class new file mode 100644 index 0000000..90e6c57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient.class new file mode 100644 index 0000000..b0bc961 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetHandlerPlayClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo$1.class new file mode 100644 index 0000000..cf51364 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo$2.class new file mode 100644 index 0000000..f75d52c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo.class new file mode 100644 index 0000000..3ae4a80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/NetworkPlayerInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$1.class new file mode 100644 index 0000000..46d2301 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$2$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$2$1.class new file mode 100644 index 0000000..abfa085 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$2$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$2.class new file mode 100644 index 0000000..c458e14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger.class new file mode 100644 index 0000000..e28237c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/ServerPinger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/network/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/network/package-info.class new file mode 100644 index 0000000..6dc6042 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/network/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/package-info.class new file mode 100644 index 0000000..7bcb360 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Barrier$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Barrier$Factory.class new file mode 100644 index 0000000..82b6c4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Barrier$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Barrier.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Barrier.class new file mode 100644 index 0000000..6f78f6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Barrier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/IParticleFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/IParticleFactory.class new file mode 100644 index 0000000..d6ce800 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/IParticleFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Particle.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Particle.class new file mode 100644 index 0000000..4fd5fa4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/Particle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBlockDust$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBlockDust$Factory.class new file mode 100644 index 0000000..f40c601 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBlockDust$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBlockDust.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBlockDust.class new file mode 100644 index 0000000..1c37550 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBlockDust.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$Factory.class new file mode 100644 index 0000000..9d39c8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$SlimeFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$SlimeFactory.class new file mode 100644 index 0000000..c604cac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$SlimeFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$SnowballFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$SnowballFactory.class new file mode 100644 index 0000000..29cbe68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking$SnowballFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking.class new file mode 100644 index 0000000..80cb180 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBreaking.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBubble$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBubble$Factory.class new file mode 100644 index 0000000..a0bab47 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBubble$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBubble.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBubble.class new file mode 100644 index 0000000..42fdeec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleBubble.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCloud$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCloud$Factory.class new file mode 100644 index 0000000..535efb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCloud$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCloud.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCloud.class new file mode 100644 index 0000000..99184ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCloud.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory.class new file mode 100644 index 0000000..66403f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$DamageIndicatorFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$Factory.class new file mode 100644 index 0000000..fd422e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$MagicFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$MagicFactory.class new file mode 100644 index 0000000..8a70401 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit$MagicFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit.class new file mode 100644 index 0000000..682ed9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleCrit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDigging$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDigging$Factory.class new file mode 100644 index 0000000..40f340d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDigging$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDigging.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDigging.class new file mode 100644 index 0000000..c2cebc0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDigging.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDragonBreath$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDragonBreath$Factory.class new file mode 100644 index 0000000..48d9ac2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDragonBreath$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDragonBreath.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDragonBreath.class new file mode 100644 index 0000000..f9226c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDragonBreath.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip$LavaFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip$LavaFactory.class new file mode 100644 index 0000000..7e57db2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip$LavaFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip$WaterFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip$WaterFactory.class new file mode 100644 index 0000000..a5bb262 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip$WaterFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip.class new file mode 100644 index 0000000..d809ad3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleDrip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEmitter.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEmitter.class new file mode 100644 index 0000000..a69ecf0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEmitter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable.class new file mode 100644 index 0000000..1f319cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEnchantmentTable$EnchantmentTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEnchantmentTable.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEnchantmentTable.class new file mode 100644 index 0000000..32ade38 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEnchantmentTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEndRod$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEndRod$Factory.class new file mode 100644 index 0000000..dda6c11 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEndRod$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEndRod.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEndRod.class new file mode 100644 index 0000000..2776e46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleEndRod.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosion$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosion$Factory.class new file mode 100644 index 0000000..d095704 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosion$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosion.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosion.class new file mode 100644 index 0000000..55a0bf8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionHuge$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionHuge$Factory.class new file mode 100644 index 0000000..ccbe2c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionHuge$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionHuge.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionHuge.class new file mode 100644 index 0000000..00136af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionHuge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionLarge$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionLarge$Factory.class new file mode 100644 index 0000000..ae2c56d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionLarge$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionLarge.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionLarge.class new file mode 100644 index 0000000..00292bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleExplosionLarge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFallingDust$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFallingDust$Factory.class new file mode 100644 index 0000000..09afc68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFallingDust$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFallingDust.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFallingDust.class new file mode 100644 index 0000000..266e66b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFallingDust.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Factory.class new file mode 100644 index 0000000..8ad112a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Overlay.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Overlay.class new file mode 100644 index 0000000..a04fdf7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Overlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Spark.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Spark.class new file mode 100644 index 0000000..6a384e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Spark.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Starter.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Starter.class new file mode 100644 index 0000000..9c92031 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework$Starter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework.class new file mode 100644 index 0000000..1ca226f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFirework.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFlame$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFlame$Factory.class new file mode 100644 index 0000000..33a4573 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFlame$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFlame.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFlame.class new file mode 100644 index 0000000..ffbd837 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFlame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFootStep$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFootStep$Factory.class new file mode 100644 index 0000000..6b7bcb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFootStep$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFootStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFootStep.class new file mode 100644 index 0000000..091f3b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleFootStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory.class new file mode 100644 index 0000000..074bf58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart$AngryVillagerFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart$Factory.class new file mode 100644 index 0000000..379d62a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart.class new file mode 100644 index 0000000..851c9c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleHeart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleItemPickup.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleItemPickup.class new file mode 100644 index 0000000..4ca2214 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleItemPickup.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleLava$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleLava$Factory.class new file mode 100644 index 0000000..188c1aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleLava$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleLava.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleLava.class new file mode 100644 index 0000000..c9530bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleLava.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$1.class new file mode 100644 index 0000000..074566a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$2.class new file mode 100644 index 0000000..4201387 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$3.class new file mode 100644 index 0000000..fde03a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$4.class new file mode 100644 index 0000000..e9698ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager.class new file mode 100644 index 0000000..cd5b8f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleMobAppearance$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleMobAppearance$Factory.class new file mode 100644 index 0000000..692dfa3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleMobAppearance$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleMobAppearance.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleMobAppearance.class new file mode 100644 index 0000000..5472b8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleMobAppearance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleNote$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleNote$Factory.class new file mode 100644 index 0000000..83f15bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleNote$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleNote.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleNote.class new file mode 100644 index 0000000..13898b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleNote.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticlePortal$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticlePortal$Factory.class new file mode 100644 index 0000000..0d6acc4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticlePortal$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticlePortal.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticlePortal.class new file mode 100644 index 0000000..e07618c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticlePortal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRain$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRain$Factory.class new file mode 100644 index 0000000..d2d7213 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRain$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRain.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRain.class new file mode 100644 index 0000000..4facb1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRain.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRedstone$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRedstone$Factory.class new file mode 100644 index 0000000..a851b18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRedstone$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRedstone.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRedstone.class new file mode 100644 index 0000000..1af8edc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleRedstone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSimpleAnimated.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSimpleAnimated.class new file mode 100644 index 0000000..0e865cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSimpleAnimated.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeLarge$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeLarge$Factory.class new file mode 100644 index 0000000..63a8438 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeLarge$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeLarge.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeLarge.class new file mode 100644 index 0000000..9cfd3db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeLarge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal$1.class new file mode 100644 index 0000000..0edd738 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal$Factory.class new file mode 100644 index 0000000..fef0e5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal.class new file mode 100644 index 0000000..824f7dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSmokeNormal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSnowShovel$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSnowShovel$Factory.class new file mode 100644 index 0000000..68e7ed5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSnowShovel$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSnowShovel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSnowShovel.class new file mode 100644 index 0000000..e361679 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSnowShovel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$AmbientMobFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$AmbientMobFactory.class new file mode 100644 index 0000000..4f74827 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$AmbientMobFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$Factory.class new file mode 100644 index 0000000..582c41d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$InstantFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$InstantFactory.class new file mode 100644 index 0000000..935d0fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$InstantFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$MobFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$MobFactory.class new file mode 100644 index 0000000..68d74c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$MobFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$WitchFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$WitchFactory.class new file mode 100644 index 0000000..96acb44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell$WitchFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell.class new file mode 100644 index 0000000..4f510be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpit$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpit$Factory.class new file mode 100644 index 0000000..f248979 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpit$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpit.class new file mode 100644 index 0000000..6002a26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSpit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSplash$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSplash$Factory.class new file mode 100644 index 0000000..2ec6cb6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSplash$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSplash.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSplash.class new file mode 100644 index 0000000..1669c41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSplash.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspend$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspend$Factory.class new file mode 100644 index 0000000..f778a66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspend$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspend.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspend.class new file mode 100644 index 0000000..4112060 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspend.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown$Factory.class new file mode 100644 index 0000000..4327146 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory.class new file mode 100644 index 0000000..1db0034 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown$HappyVillagerFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown.class new file mode 100644 index 0000000..83096a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSuspendedTown.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSweepAttack$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSweepAttack$Factory.class new file mode 100644 index 0000000..6a4a6ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSweepAttack$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSweepAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSweepAttack.class new file mode 100644 index 0000000..9ec8501 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleSweepAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleTotem$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleTotem$Factory.class new file mode 100644 index 0000000..afeb689 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleTotem$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleTotem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleTotem.class new file mode 100644 index 0000000..15b57d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleTotem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleWaterWake$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleWaterWake$Factory.class new file mode 100644 index 0000000..430f53e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleWaterWake$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleWaterWake.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleWaterWake.class new file mode 100644 index 0000000..f80fcc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/ParticleWaterWake.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/particle/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/package-info.class new file mode 100644 index 0000000..4960d92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/particle/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/ContainerLocalMenu.class b/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/ContainerLocalMenu.class new file mode 100644 index 0000000..26dfd54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/ContainerLocalMenu.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/LocalBlockIntercommunication.class b/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/LocalBlockIntercommunication.class new file mode 100644 index 0000000..9555cc0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/LocalBlockIntercommunication.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/package-info.class new file mode 100644 index 0000000..3cdd707 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/player/inventory/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ActiveRenderInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ActiveRenderInfo.class new file mode 100644 index 0000000..39b3a6d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ActiveRenderInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$1.class new file mode 100644 index 0000000..e810ee9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$Cache.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$Cache.class new file mode 100644 index 0000000..c8a3c0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$Cache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$CacheEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$CacheEntry.class new file mode 100644 index 0000000..8d6b9fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures$CacheEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures.class new file mode 100644 index 0000000..49e05f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BannerTextures.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockFluidRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockFluidRenderer.class new file mode 100644 index 0000000..b8e9816 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockFluidRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$1.class new file mode 100644 index 0000000..3344bf0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace.class new file mode 100644 index 0000000..e4e27d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$AmbientOcclusionFace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo.class new file mode 100644 index 0000000..26c26c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$EnumNeighborInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$Orientation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$Orientation.class new file mode 100644 index 0000000..73cd6b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$Orientation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations.class new file mode 100644 index 0000000..3e3a31a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer$VertexTranslations.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer.class new file mode 100644 index 0000000..87e3b35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$1.class new file mode 100644 index 0000000..24e42e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$2.class new file mode 100644 index 0000000..917d465 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$3.class new file mode 100644 index 0000000..b39f511 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$4.class new file mode 100644 index 0000000..c2bb2e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$5.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$5.class new file mode 100644 index 0000000..6de888d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$6.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$6.class new file mode 100644 index 0000000..f2be0ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$7.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$7.class new file mode 100644 index 0000000..ae73714 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$8.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$8.class new file mode 100644 index 0000000..972625d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes.class new file mode 100644 index 0000000..5009afb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockModelShapes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockRendererDispatcher$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockRendererDispatcher$1.class new file mode 100644 index 0000000..8dacd5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockRendererDispatcher$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockRendererDispatcher.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockRendererDispatcher.class new file mode 100644 index 0000000..f9e4376 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BlockRendererDispatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$1.class new file mode 100644 index 0000000..4b6f21a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$2.class new file mode 100644 index 0000000..8a96206 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$State.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$State.class new file mode 100644 index 0000000..6ad1a3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder$State.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder.class new file mode 100644 index 0000000..1ad1321 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/BufferBuilder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ChestRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ChestRenderer.class new file mode 100644 index 0000000..00e44c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ChestRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ChunkRenderContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ChunkRenderContainer.class new file mode 100644 index 0000000..2f64e0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ChunkRenderContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/DestroyBlockProgress.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/DestroyBlockProgress.class new file mode 100644 index 0000000..203a3b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/DestroyBlockProgress.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$1.class new file mode 100644 index 0000000..e75538c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$2.class new file mode 100644 index 0000000..c36a4a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$3.class new file mode 100644 index 0000000..83c4992 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$4.class new file mode 100644 index 0000000..93ec236 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer.class new file mode 100644 index 0000000..19618de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EntityRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$1.class new file mode 100644 index 0000000..d9cb024 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$Constants.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$Constants.class new file mode 100644 index 0000000..d162221 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$Constants.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$VertexInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$VertexInformation.class new file mode 100644 index 0000000..49e4039 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection$VertexInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection.class new file mode 100644 index 0000000..d0b7a31 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/EnumFaceDirection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GLAllocation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GLAllocation.class new file mode 100644 index 0000000..fa4ba25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GLAllocation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$1.class new file mode 100644 index 0000000..7e5e375 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$AlphaState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$AlphaState.class new file mode 100644 index 0000000..1224c79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$AlphaState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$BlendState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$BlendState.class new file mode 100644 index 0000000..d9c6511 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$BlendState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$BooleanState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$BooleanState.class new file mode 100644 index 0000000..2426f37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$BooleanState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ClearState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ClearState.class new file mode 100644 index 0000000..134a33d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ClearState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Color.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Color.class new file mode 100644 index 0000000..258d263 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Color.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorLogicState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorLogicState.class new file mode 100644 index 0000000..5229dbc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorLogicState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorMask.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorMask.class new file mode 100644 index 0000000..884de5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorMask.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorMaterialState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorMaterialState.class new file mode 100644 index 0000000..9a5d18b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$ColorMaterialState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$CullFace.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$CullFace.class new file mode 100644 index 0000000..2f7d645 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$CullFace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$CullState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$CullState.class new file mode 100644 index 0000000..234272a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$CullState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$DepthState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$DepthState.class new file mode 100644 index 0000000..32395fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$DepthState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$DestFactor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$DestFactor.class new file mode 100644 index 0000000..0ea489b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$DestFactor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$FogMode.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$FogMode.class new file mode 100644 index 0000000..9ecddbd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$FogMode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$FogState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$FogState.class new file mode 100644 index 0000000..508126e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$FogState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$LogicOp.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$LogicOp.class new file mode 100644 index 0000000..279a91a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$LogicOp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$PolygonOffsetState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$PolygonOffsetState.class new file mode 100644 index 0000000..5f59c6d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$PolygonOffsetState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$1.class new file mode 100644 index 0000000..c144429 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$2.class new file mode 100644 index 0000000..66533f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$3.class new file mode 100644 index 0000000..c87144f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile.class new file mode 100644 index 0000000..4491da2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$Profile.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$SourceFactor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$SourceFactor.class new file mode 100644 index 0000000..b229a9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$SourceFactor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$StencilFunc.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$StencilFunc.class new file mode 100644 index 0000000..40c9e0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$StencilFunc.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$StencilState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$StencilState.class new file mode 100644 index 0000000..f33b793 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$StencilState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGen.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGen.class new file mode 100644 index 0000000..37b1d2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGenCoord.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGenCoord.class new file mode 100644 index 0000000..cab08a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGenCoord.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGenState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGenState.class new file mode 100644 index 0000000..0891545 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TexGenState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TextureState.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TextureState.class new file mode 100644 index 0000000..8eb2483 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager$TextureState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager.class new file mode 100644 index 0000000..beff776 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/GlStateManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/IImageBuffer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/IImageBuffer.class new file mode 100644 index 0000000..46d1677 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/IImageBuffer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ImageBufferDownload.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ImageBufferDownload.class new file mode 100644 index 0000000..6b694b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ImageBufferDownload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/InventoryEffectRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/InventoryEffectRenderer.class new file mode 100644 index 0000000..6e143ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/InventoryEffectRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemMeshDefinition.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemMeshDefinition.class new file mode 100644 index 0000000..8245b54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemMeshDefinition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemModelMesher.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemModelMesher.class new file mode 100644 index 0000000..b72c761 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemModelMesher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemRenderer$1.class new file mode 100644 index 0000000..fcfdb01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemRenderer.class new file mode 100644 index 0000000..84f01a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ItemRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Matrix4f.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Matrix4f.class new file mode 100644 index 0000000..5a217d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Matrix4f.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper$1.class new file mode 100644 index 0000000..aa176ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper$FboMode.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper$FboMode.class new file mode 100644 index 0000000..977572e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper$FboMode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper.class new file mode 100644 index 0000000..d023fc6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/OpenGlHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RegionRenderCacheBuilder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RegionRenderCacheBuilder.class new file mode 100644 index 0000000..fb6f43f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RegionRenderCacheBuilder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$1.class new file mode 100644 index 0000000..d833316 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$2.class new file mode 100644 index 0000000..f604b6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation.class new file mode 100644 index 0000000..9e4bdf3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal.class new file mode 100644 index 0000000..5c484b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderGlobal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderHelper.class new file mode 100644 index 0000000..cd9d079 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$1.class new file mode 100644 index 0000000..0ba6654 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$10.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$10.class new file mode 100644 index 0000000..e701e47 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$2.class new file mode 100644 index 0000000..c8f3038 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$3.class new file mode 100644 index 0000000..b6ceb46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$4.class new file mode 100644 index 0000000..333e71b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$5.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$5.class new file mode 100644 index 0000000..7caeaa0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$6.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$6.class new file mode 100644 index 0000000..57b4d75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$7.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$7.class new file mode 100644 index 0000000..aff520a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$8.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$8.class new file mode 100644 index 0000000..db4b2de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$9.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$9.class new file mode 100644 index 0000000..a126e56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem.class new file mode 100644 index 0000000..db7f2ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderList.class new file mode 100644 index 0000000..28a5c6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/RenderList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/StitcherException.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/StitcherException.class new file mode 100644 index 0000000..29288c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/StitcherException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Tessellator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Tessellator.class new file mode 100644 index 0000000..72ebbe5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Tessellator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ThreadDownloadImageData$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ThreadDownloadImageData$1.class new file mode 100644 index 0000000..da3fef2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ThreadDownloadImageData$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ThreadDownloadImageData.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ThreadDownloadImageData.class new file mode 100644 index 0000000..7e0096f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ThreadDownloadImageData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/VboRenderList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/VboRenderList.class new file mode 100644 index 0000000..b81aed5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/VboRenderList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Vector3d.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Vector3d.class new file mode 100644 index 0000000..60b0ec1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/Vector3d.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/VertexBufferUploader.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/VertexBufferUploader.class new file mode 100644 index 0000000..b0cf981 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/VertexBufferUploader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ViewFrustum.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ViewFrustum.class new file mode 100644 index 0000000..a3d3833 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/ViewFrustum.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/WorldVertexBufferUploader.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/WorldVertexBufferUploader.class new file mode 100644 index 0000000..b89e30f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/WorldVertexBufferUploader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BakedQuad.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BakedQuad.class new file mode 100644 index 0000000..78394dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BakedQuad.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BakedQuadRetextured.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BakedQuadRetextured.class new file mode 100644 index 0000000..2e831c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BakedQuadRetextured.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer.class new file mode 100644 index 0000000..55b712b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockFaceUV$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockFaceUV.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockFaceUV.class new file mode 100644 index 0000000..c742594 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockFaceUV.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart$1.class new file mode 100644 index 0000000..ffae9aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart$Deserializer.class new file mode 100644 index 0000000..efbacfa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart.class new file mode 100644 index 0000000..3c0c275 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer.class new file mode 100644 index 0000000..08e6920 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartFace$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartFace.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartFace.class new file mode 100644 index 0000000..9c26a92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartFace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartRotation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartRotation.class new file mode 100644 index 0000000..f9752ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BlockPartRotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BuiltInModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BuiltInModel.class new file mode 100644 index 0000000..4f5c7f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/BuiltInModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$1.class new file mode 100644 index 0000000..523ba41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$2.class new file mode 100644 index 0000000..f6aa185 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$3.class new file mode 100644 index 0000000..25fbe81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$4.class new file mode 100644 index 0000000..044c352 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$5.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$5.class new file mode 100644 index 0000000..3483f09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$Rotation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$Rotation.class new file mode 100644 index 0000000..c199f97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery$Rotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery.class new file mode 100644 index 0000000..80c16fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/FaceBakery.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/IBakedModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/IBakedModel.class new file mode 100644 index 0000000..45b39ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/IBakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$1.class new file mode 100644 index 0000000..a21d014 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer.class new file mode 100644 index 0000000..c1d0455 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType.class new file mode 100644 index 0000000..e160aaf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms$TransformType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms.class new file mode 100644 index 0000000..d08ef50 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemCameraTransforms.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$1.class new file mode 100644 index 0000000..816943c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$Span.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$Span.class new file mode 100644 index 0000000..d1a466f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$Span.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing.class new file mode 100644 index 0000000..aa32802 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator$SpanFacing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator.class new file mode 100644 index 0000000..051f014 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemModelGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverride$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverride$Deserializer.class new file mode 100644 index 0000000..3feb279 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverride$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverride.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverride.class new file mode 100644 index 0000000..e06f184 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverride.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverrideList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverrideList.class new file mode 100644 index 0000000..1afce9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemOverrideList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer.class new file mode 100644 index 0000000..36947e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemTransformVec3f$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemTransformVec3f.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemTransformVec3f.class new file mode 100644 index 0000000..efc6ad1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ItemTransformVec3f.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$1.class new file mode 100644 index 0000000..b1dcf19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$2.class new file mode 100644 index 0000000..1f1f103 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$3.class new file mode 100644 index 0000000..31f1cdc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery.class new file mode 100644 index 0000000..a94b2cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBakery.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$1.class new file mode 100644 index 0000000..4696dca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep.class new file mode 100644 index 0000000..2d66e5a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$Bookkeep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$Deserializer.class new file mode 100644 index 0000000..6b63ce1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$LoopException.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$LoopException.class new file mode 100644 index 0000000..c48892b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock$LoopException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock.class new file mode 100644 index 0000000..ce1d609 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer.class new file mode 100644 index 0000000..de86190 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException.class new file mode 100644 index 0000000..6101c76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition$MissingVariantException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition.class new file mode 100644 index 0000000..6453c62 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelBlockDefinition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelManager.class new file mode 100644 index 0000000..3bdab89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelResourceLocation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelResourceLocation.class new file mode 100644 index 0000000..a3050ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelResourceLocation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelRotation.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelRotation.class new file mode 100644 index 0000000..bf97f04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/ModelRotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder.class new file mode 100644 index 0000000..46ccb64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/MultipartBakedModel$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/MultipartBakedModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/MultipartBakedModel.class new file mode 100644 index 0000000..b0be0d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/MultipartBakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder.class new file mode 100644 index 0000000..ca475c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/SimpleBakedModel$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/SimpleBakedModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/SimpleBakedModel.class new file mode 100644 index 0000000..2585d12 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/SimpleBakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/Variant$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/Variant$Deserializer.class new file mode 100644 index 0000000..1bf6b52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/Variant$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/Variant.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/Variant.class new file mode 100644 index 0000000..18e0f8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/Variant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/VariantList$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/VariantList$Deserializer.class new file mode 100644 index 0000000..88a7a9e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/VariantList$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/VariantList.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/VariantList.class new file mode 100644 index 0000000..75b0d5b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/VariantList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder.class new file mode 100644 index 0000000..d0c7706 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel.class new file mode 100644 index 0000000..35e79d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel$WeightedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel.class new file mode 100644 index 0000000..c251545 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/WeightedBakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1.class new file mode 100644 index 0000000..f2e4f8b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionAnd$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionAnd.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionAnd.class new file mode 100644 index 0000000..e51b33a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionAnd.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionOr$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionOr$1.class new file mode 100644 index 0000000..312f4a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionOr$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionOr.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionOr.class new file mode 100644 index 0000000..f4c2a86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionOr.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1.class new file mode 100644 index 0000000..ce5b3ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2.class new file mode 100644 index 0000000..8c8c79a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.class new file mode 100644 index 0000000..a118fbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$1$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$1$1.class new file mode 100644 index 0000000..3fc9fbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$1.class new file mode 100644 index 0000000..21db2dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$2$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$2$1.class new file mode 100644 index 0000000..458116e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$2$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$2.class new file mode 100644 index 0000000..6372a14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition.class new file mode 100644 index 0000000..ed361ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/ICondition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer.class new file mode 100644 index 0000000..d24a66f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Multipart$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Multipart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Multipart.class new file mode 100644 index 0000000..f92a16e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Multipart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1.class new file mode 100644 index 0000000..5ef4542 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2.class new file mode 100644 index 0000000..facefdb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer.class new file mode 100644 index 0000000..f695dc9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector.class new file mode 100644 index 0000000..ab1df08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/Selector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/package-info.class new file mode 100644 index 0000000..944b5c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/multipart/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/package-info.class new file mode 100644 index 0000000..f223540 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/model/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/BlockStateMapper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/BlockStateMapper.class new file mode 100644 index 0000000..57760e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/BlockStateMapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.class new file mode 100644 index 0000000..bdbf128 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/IStateMapper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/IStateMapper.class new file mode 100644 index 0000000..644cad3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/IStateMapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap$1.class new file mode 100644 index 0000000..79d6618 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap$Builder.class new file mode 100644 index 0000000..a59f9f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap.class new file mode 100644 index 0000000..fc5c34d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMapperBase.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMapperBase.class new file mode 100644 index 0000000..6b38c75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/StateMapperBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/package-info.class new file mode 100644 index 0000000..dcfa868 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/block/statemap/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status.class new file mode 100644 index 0000000..e6d4cd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Status.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type.class new file mode 100644 index 0000000..e4d77f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.class new file mode 100644 index 0000000..522a910 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1.class new file mode 100644 index 0000000..8bef689 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2.class new file mode 100644 index 0000000..be2e8a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3.class new file mode 100644 index 0000000..f854b52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload.class new file mode 100644 index 0000000..90f503d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher$PendingUpload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.class new file mode 100644 index 0000000..3c7eb26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker$1.class new file mode 100644 index 0000000..dc583a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker$2.class new file mode 100644 index 0000000..44a6553 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker.class new file mode 100644 index 0000000..a2a3551 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ChunkRenderWorker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/CompiledChunk$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/CompiledChunk$1.class new file mode 100644 index 0000000..cc566f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/CompiledChunk$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/CompiledChunk.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/CompiledChunk.class new file mode 100644 index 0000000..aca6c79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/CompiledChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/IRenderChunkFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/IRenderChunkFactory.class new file mode 100644 index 0000000..bcb9755 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/IRenderChunkFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ListChunkFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ListChunkFactory.class new file mode 100644 index 0000000..198cacc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ListChunkFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ListedRenderChunk.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ListedRenderChunk.class new file mode 100644 index 0000000..b190126 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/ListedRenderChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/RenderChunk.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/RenderChunk.class new file mode 100644 index 0000000..00923e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/RenderChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/SetVisibility.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/SetVisibility.class new file mode 100644 index 0000000..f53c5a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/SetVisibility.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VboChunkFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VboChunkFactory.class new file mode 100644 index 0000000..eaf5178 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VboChunkFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VisGraph$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VisGraph$1.class new file mode 100644 index 0000000..de2635e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VisGraph$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VisGraph.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VisGraph.class new file mode 100644 index 0000000..3aef8c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/VisGraph.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/package-info.class new file mode 100644 index 0000000..7f6b46f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/chunk/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$1.class new file mode 100644 index 0000000..7c7cc2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$10.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$10.class new file mode 100644 index 0000000..b620b5a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$11.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$11.class new file mode 100644 index 0000000..3a0cbdd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$12.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$12.class new file mode 100644 index 0000000..9c35501 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$2.class new file mode 100644 index 0000000..cf7cbb1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$3.class new file mode 100644 index 0000000..83ba37a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$4.class new file mode 100644 index 0000000..9a15d91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$5.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$5.class new file mode 100644 index 0000000..ac78a6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$6.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$6.class new file mode 100644 index 0000000..d37770b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$7.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$7.class new file mode 100644 index 0000000..d062d37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$8.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$8.class new file mode 100644 index 0000000..1856273 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$9.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$9.class new file mode 100644 index 0000000..17ecf1e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors.class new file mode 100644 index 0000000..feaafd1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/BlockColors.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/IBlockColor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/IBlockColor.class new file mode 100644 index 0000000..f555d1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/IBlockColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/IItemColor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/IItemColor.class new file mode 100644 index 0000000..0f33954 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/IItemColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$1.class new file mode 100644 index 0000000..6b400a7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$2.class new file mode 100644 index 0000000..f524ebb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$3.class new file mode 100644 index 0000000..7b7e50e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$4.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$4.class new file mode 100644 index 0000000..99e8638 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$5.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$5.class new file mode 100644 index 0000000..c6a957a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$6.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$6.class new file mode 100644 index 0000000..4917c6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$7.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$7.class new file mode 100644 index 0000000..528ad2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$8.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$8.class new file mode 100644 index 0000000..747d77a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors.class new file mode 100644 index 0000000..d81402b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/ItemColors.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/package-info.class new file mode 100644 index 0000000..10e897e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/color/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ClippingHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ClippingHelper.class new file mode 100644 index 0000000..506b40d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ClippingHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ClippingHelperImpl.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ClippingHelperImpl.class new file mode 100644 index 0000000..6d97169 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ClippingHelperImpl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/Frustum.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/Frustum.class new file mode 100644 index 0000000..59059ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/Frustum.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ICamera.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ICamera.class new file mode 100644 index 0000000..a9cf70a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/ICamera.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/package-info.class new file mode 100644 index 0000000..c6d97e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/culling/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer.class new file mode 100644 index 0000000..cb5c2e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRenderer$IDebugRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRenderer.class new file mode 100644 index 0000000..2d31cac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererChunkBorder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererChunkBorder.class new file mode 100644 index 0000000..662f22d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererChunkBorder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererCollisionBox.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererCollisionBox.class new file mode 100644 index 0000000..b1af662 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererCollisionBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererHeightMap.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererHeightMap.class new file mode 100644 index 0000000..46ee9b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererHeightMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.class new file mode 100644 index 0000000..efb0c49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererPathfinding.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererPathfinding.class new file mode 100644 index 0000000..4ebf480 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererPathfinding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererSolidFace.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererSolidFace.class new file mode 100644 index 0000000..e906118 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererSolidFace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererWater.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererWater.class new file mode 100644 index 0000000..a424bbe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/DebugRendererWater.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/package-info.class new file mode 100644 index 0000000..bffd2bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/debug/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/Render.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/Render.class new file mode 100644 index 0000000..d37487e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/Render.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderAbstractHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderAbstractHorse.class new file mode 100644 index 0000000..15d116e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderAbstractHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderAreaEffectCloud.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderAreaEffectCloud.class new file mode 100644 index 0000000..712af4b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderAreaEffectCloud.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArmorStand$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArmorStand$1.class new file mode 100644 index 0000000..fbc41a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArmorStand$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArmorStand.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArmorStand.class new file mode 100644 index 0000000..c88fc22 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArmorStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArrow.class new file mode 100644 index 0000000..c7cd73f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBat.class new file mode 100644 index 0000000..60b0b55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBiped.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBiped.class new file mode 100644 index 0000000..e1fbdd3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBiped.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBlaze.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBlaze.class new file mode 100644 index 0000000..8d4b306 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBlaze.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBoat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBoat.class new file mode 100644 index 0000000..c899dac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderBoat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCaveSpider.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCaveSpider.class new file mode 100644 index 0000000..9ed433d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCaveSpider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderChicken.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderChicken.class new file mode 100644 index 0000000..d27bacf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderChicken.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCow.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCow.class new file mode 100644 index 0000000..dcb47f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCreeper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCreeper.class new file mode 100644 index 0000000..8aeb728 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderCreeper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderDragon.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderDragon.class new file mode 100644 index 0000000..6442857 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderDragon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderDragonFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderDragonFireball.class new file mode 100644 index 0000000..b2347ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderDragonFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderElderGuardian.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderElderGuardian.class new file mode 100644 index 0000000..3ac6493 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderElderGuardian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEnderCrystal.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEnderCrystal.class new file mode 100644 index 0000000..0cbaf81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEnderCrystal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEnderman.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEnderman.class new file mode 100644 index 0000000..b831827 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEnderman.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEndermite.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEndermite.class new file mode 100644 index 0000000..cc236f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEndermite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEntity.class new file mode 100644 index 0000000..a4b5e69 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEntityItem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEntityItem.class new file mode 100644 index 0000000..d418258 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEntityItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvoker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvoker$1.class new file mode 100644 index 0000000..159bd7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvoker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvoker.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvoker.class new file mode 100644 index 0000000..0e910ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvoker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvokerFangs.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvokerFangs.class new file mode 100644 index 0000000..678f8a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderEvokerFangs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFallingBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFallingBlock.class new file mode 100644 index 0000000..46b7a41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFallingBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFireball.class new file mode 100644 index 0000000..9477ab4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFish.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFish.class new file mode 100644 index 0000000..e8fd85c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderFish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGhast.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGhast.class new file mode 100644 index 0000000..b12e235 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGhast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGiantZombie$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGiantZombie$1.class new file mode 100644 index 0000000..396c23f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGiantZombie$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGiantZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGiantZombie.class new file mode 100644 index 0000000..6966139 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGiantZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGuardian.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGuardian.class new file mode 100644 index 0000000..7fb54ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderGuardian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderHorse.class new file mode 100644 index 0000000..e9137da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderHusk.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderHusk.class new file mode 100644 index 0000000..96a0c4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderHusk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIllusionIllager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIllusionIllager$1.class new file mode 100644 index 0000000..7f2ba14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIllusionIllager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIllusionIllager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIllusionIllager.class new file mode 100644 index 0000000..4747fc3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIllusionIllager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIronGolem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIronGolem.class new file mode 100644 index 0000000..f4b08c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderIronGolem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderItemFrame.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderItemFrame.class new file mode 100644 index 0000000..a24a978 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderItemFrame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLeashKnot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLeashKnot.class new file mode 100644 index 0000000..47c734f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLeashKnot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLightningBolt.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLightningBolt.class new file mode 100644 index 0000000..a385407 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLightningBolt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLiving.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLiving.class new file mode 100644 index 0000000..4a4917b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLiving.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLivingBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLivingBase$1.class new file mode 100644 index 0000000..cb50f4b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLivingBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLivingBase.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLivingBase.class new file mode 100644 index 0000000..c4ba590 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLivingBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLlama.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLlama.class new file mode 100644 index 0000000..a4a425a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLlama.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLlamaSpit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLlamaSpit.class new file mode 100644 index 0000000..9c6cd4e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderLlamaSpit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMagmaCube.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMagmaCube.class new file mode 100644 index 0000000..f8e5169 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMagmaCube.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderManager.class new file mode 100644 index 0000000..bd5888b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMinecart.class new file mode 100644 index 0000000..4b0e11d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.class new file mode 100644 index 0000000..8fa5a35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMooshroom.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMooshroom.class new file mode 100644 index 0000000..e8b25b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderMooshroom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderOcelot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderOcelot.class new file mode 100644 index 0000000..71e9f9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderOcelot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPainting.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPainting.class new file mode 100644 index 0000000..5321515 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPainting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderParrot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderParrot.class new file mode 100644 index 0000000..9d09fe6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderParrot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPig.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPig.class new file mode 100644 index 0000000..bfd0cad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPig.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPigZombie$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPigZombie$1.class new file mode 100644 index 0000000..de9cda7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPigZombie$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPigZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPigZombie.class new file mode 100644 index 0000000..b26da99 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPigZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPlayer.class new file mode 100644 index 0000000..a00507b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPolarBear.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPolarBear.class new file mode 100644 index 0000000..2bd15c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPolarBear.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPotion.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPotion.class new file mode 100644 index 0000000..d3c3537 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderPotion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderRabbit.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderRabbit.class new file mode 100644 index 0000000..facaf2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderRabbit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSheep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSheep.class new file mode 100644 index 0000000..6646ca6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSheep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker$1.class new file mode 100644 index 0000000..bbb0a83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker$HeadLayer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker$HeadLayer.class new file mode 100644 index 0000000..c8669c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker$HeadLayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker.class new file mode 100644 index 0000000..27d9f8d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulkerBullet.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulkerBullet.class new file mode 100644 index 0000000..e643c49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderShulkerBullet.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSilverfish.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSilverfish.class new file mode 100644 index 0000000..f0a6583 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSilverfish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSkeleton$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSkeleton$1.class new file mode 100644 index 0000000..e88188d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSkeleton$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSkeleton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSkeleton.class new file mode 100644 index 0000000..7501d3d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSkeleton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSlime.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSlime.class new file mode 100644 index 0000000..7e434af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSlime.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSnowMan.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSnowMan.class new file mode 100644 index 0000000..3f2f2b5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSnowMan.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSnowball.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSnowball.class new file mode 100644 index 0000000..ebf9f29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSnowball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSpectralArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSpectralArrow.class new file mode 100644 index 0000000..e0ce75b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSpectralArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSpider.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSpider.class new file mode 100644 index 0000000..1b8a016 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSpider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSquid.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSquid.class new file mode 100644 index 0000000..8a06608 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderSquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderStray.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderStray.class new file mode 100644 index 0000000..dc2c533 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderStray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTNTPrimed.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTNTPrimed.class new file mode 100644 index 0000000..c79fd30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTNTPrimed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTippedArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTippedArrow.class new file mode 100644 index 0000000..b0d5254 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTippedArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTntMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTntMinecart.class new file mode 100644 index 0000000..9b0346b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderTntMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVex.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVex.class new file mode 100644 index 0000000..dd91414 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVillager.class new file mode 100644 index 0000000..2e8b747 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVindicator$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVindicator$1.class new file mode 100644 index 0000000..44417d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVindicator$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVindicator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVindicator.class new file mode 100644 index 0000000..7accbc6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderVindicator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitch.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitch.class new file mode 100644 index 0000000..eaa1dc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWither.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWither.class new file mode 100644 index 0000000..cf416a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWither.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitherSkeleton.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitherSkeleton.class new file mode 100644 index 0000000..04295cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitherSkeleton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitherSkull.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitherSkull.class new file mode 100644 index 0000000..ce7f4ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWitherSkull.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWolf.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWolf.class new file mode 100644 index 0000000..4b91306 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderWolf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderXPOrb.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderXPOrb.class new file mode 100644 index 0000000..4d944a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderXPOrb.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombie$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombie$1.class new file mode 100644 index 0000000..cc88719 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombie$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombie.class new file mode 100644 index 0000000..6686af3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombieVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombieVillager.class new file mode 100644 index 0000000..d2e0df4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/RenderZombieVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerArmorBase.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerArmorBase.class new file mode 100644 index 0000000..c54fd3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerArmorBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerArrow.class new file mode 100644 index 0000000..0bb9250 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1.class new file mode 100644 index 0000000..bff8147 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerBipedArmor$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.class new file mode 100644 index 0000000..ee05329 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCape.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCape.class new file mode 100644 index 0000000..5c39625 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCape.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.class new file mode 100644 index 0000000..8c3dc06 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCustomHead.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCustomHead.class new file mode 100644 index 0000000..4ff8d19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerCustomHead.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.class new file mode 100644 index 0000000..a30139d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerElytra.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerElytra.class new file mode 100644 index 0000000..3886939 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerElytra.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.class new file mode 100644 index 0000000..2f27284 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.class new file mode 100644 index 0000000..249f136 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.class new file mode 100644 index 0000000..b16c150 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder.class new file mode 100644 index 0000000..a538652 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder$DataHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.class new file mode 100644 index 0000000..4f6d1e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.class new file mode 100644 index 0000000..7306225 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldItem.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldItem.class new file mode 100644 index 0000000..b3e537c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.class new file mode 100644 index 0000000..5d99bbb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.class new file mode 100644 index 0000000..a7b5820 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.class new file mode 100644 index 0000000..1d668e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.class new file mode 100644 index 0000000..e213e1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerRenderer.class new file mode 100644 index 0000000..b9d169a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSaddle.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSaddle.class new file mode 100644 index 0000000..d102fe8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSaddle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSheepWool.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSheepWool.class new file mode 100644 index 0000000..e851a66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSheepWool.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.class new file mode 100644 index 0000000..de50bc4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.class new file mode 100644 index 0000000..fb20a82 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.class new file mode 100644 index 0000000..d85d8ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerStrayClothing.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerStrayClothing.class new file mode 100644 index 0000000..782187d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerStrayClothing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.class new file mode 100644 index 0000000..492749f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerWitherAura.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerWitherAura.class new file mode 100644 index 0000000..8e66a92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerWitherAura.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.class new file mode 100644 index 0000000..d49c665 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/package-info.class new file mode 100644 index 0000000..f973927 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/layers/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/package-info.class new file mode 100644 index 0000000..a8b1615 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/entity/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/package-info.class new file mode 100644 index 0000000..335a03e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/AbstractTexture.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/AbstractTexture.class new file mode 100644 index 0000000..5a111a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/AbstractTexture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/DynamicTexture.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/DynamicTexture.class new file mode 100644 index 0000000..3f7abbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/DynamicTexture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITextureMapPopulator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITextureMapPopulator.class new file mode 100644 index 0000000..700c0aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITextureMapPopulator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITextureObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITextureObject.class new file mode 100644 index 0000000..b1b596e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITextureObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITickable.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITickable.class new file mode 100644 index 0000000..4872e32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITickable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITickableTextureObject.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITickableTextureObject.class new file mode 100644 index 0000000..79ff43e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/ITickableTextureObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.class new file mode 100644 index 0000000..65091e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/LayeredTexture.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/LayeredTexture.class new file mode 100644 index 0000000..548b2a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/LayeredTexture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/PngSizeInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/PngSizeInfo.class new file mode 100644 index 0000000..be73620 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/PngSizeInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/SimpleTexture.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/SimpleTexture.class new file mode 100644 index 0000000..3c1bd1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/SimpleTexture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher$Holder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher$Holder.class new file mode 100644 index 0000000..5acd11c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher$Holder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher$Slot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher$Slot.class new file mode 100644 index 0000000..09b4c00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher$Slot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher.class new file mode 100644 index 0000000..cb25f64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/Stitcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureAtlasSprite$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureAtlasSprite$1.class new file mode 100644 index 0000000..1bc2273 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureAtlasSprite$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureAtlasSprite.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureAtlasSprite.class new file mode 100644 index 0000000..2b9e13c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureAtlasSprite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureManager$1.class new file mode 100644 index 0000000..0dc3a7e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureManager.class new file mode 100644 index 0000000..cc6a182 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$1.class new file mode 100644 index 0000000..ab2eff1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$2.class new file mode 100644 index 0000000..dc1eaf9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$3.class new file mode 100644 index 0000000..60ba1fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap.class new file mode 100644 index 0000000..80bc876 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureUtil.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureUtil.class new file mode 100644 index 0000000..996583d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/TextureUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/package-info.class new file mode 100644 index 0000000..0372950 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/texture/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.class new file mode 100644 index 0000000..aae0a27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.class new file mode 100644 index 0000000..6793ad3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.class new file mode 100644 index 0000000..875a2d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.class new file mode 100644 index 0000000..ac707f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.class new file mode 100644 index 0000000..0241b91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.class new file mode 100644 index 0000000..c3946f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.class new file mode 100644 index 0000000..e550e6d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.class new file mode 100644 index 0000000..e6bfef3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.class new file mode 100644 index 0000000..836a5f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.class new file mode 100644 index 0000000..7d74f21 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.class new file mode 100644 index 0000000..c6b8508 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.class new file mode 100644 index 0000000..adbc939 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1.class new file mode 100644 index 0000000..1a26a29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.class new file mode 100644 index 0000000..b2ff96f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.class new file mode 100644 index 0000000..49c06ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1.class new file mode 100644 index 0000000..2d94249 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.class new file mode 100644 index 0000000..4e72d49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.class new file mode 100644 index 0000000..814d326 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1.class new file mode 100644 index 0000000..61d6ef4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.class new file mode 100644 index 0000000..d919a54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/package-info.class new file mode 100644 index 0000000..f14bcb3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/tileentity/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/DefaultVertexFormats.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/DefaultVertexFormats.class new file mode 100644 index 0000000..0ab7ac1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/DefaultVertexFormats.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexBuffer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexBuffer.class new file mode 100644 index 0000000..64a6314 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexBuffer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormat$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormat$1.class new file mode 100644 index 0000000..47a36e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormat$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormat.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormat.class new file mode 100644 index 0000000..90e5cb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType.class new file mode 100644 index 0000000..b5a1a66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement$EnumType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage.class new file mode 100644 index 0000000..9f34dea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement$EnumUsage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement.class new file mode 100644 index 0000000..e060807 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/VertexFormatElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/package-info.class new file mode 100644 index 0000000..3d3ce7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/renderer/vertex/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/AbstractResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/AbstractResourcePack.class new file mode 100644 index 0000000..8c65a86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/AbstractResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/DefaultPlayerSkin.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/DefaultPlayerSkin.class new file mode 100644 index 0000000..c1f2be3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/DefaultPlayerSkin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/DefaultResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/DefaultResourcePack.class new file mode 100644 index 0000000..b2603af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/DefaultResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger.class new file mode 100644 index 0000000..c50dce4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FallbackResourceManager$InputStreamLeakedResourceLogger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FallbackResourceManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FallbackResourceManager.class new file mode 100644 index 0000000..5715814 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FallbackResourceManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FileResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FileResourcePack.class new file mode 100644 index 0000000..8d57b4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FileResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FolderResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FolderResourcePack.class new file mode 100644 index 0000000..7ef13de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FolderResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FoliageColorReloadListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FoliageColorReloadListener.class new file mode 100644 index 0000000..7c250ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/FoliageColorReloadListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/GrassColorReloadListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/GrassColorReloadListener.class new file mode 100644 index 0000000..8e33a49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/GrassColorReloadListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/I18n.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/I18n.class new file mode 100644 index 0000000..635abf7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/I18n.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IReloadableResourceManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IReloadableResourceManager.class new file mode 100644 index 0000000..d53a9fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IReloadableResourceManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResource.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResource.class new file mode 100644 index 0000000..bb017b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourceManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourceManager.class new file mode 100644 index 0000000..129ee0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourceManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourceManagerReloadListener.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourceManagerReloadListener.class new file mode 100644 index 0000000..48ee7e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourceManagerReloadListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourcePack.class new file mode 100644 index 0000000..e3a4aa2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/IResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/Language.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/Language.class new file mode 100644 index 0000000..0777ece Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/Language.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LanguageManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LanguageManager.class new file mode 100644 index 0000000..64a2a38 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LanguageManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LegacyV2Adapter$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LegacyV2Adapter$1.class new file mode 100644 index 0000000..c5c5f47 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LegacyV2Adapter$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LegacyV2Adapter.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LegacyV2Adapter.class new file mode 100644 index 0000000..7ee62ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/LegacyV2Adapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/Locale.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/Locale.class new file mode 100644 index 0000000..52488e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/Locale.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourceIndex.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourceIndex.class new file mode 100644 index 0000000..9429369 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourceIndex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourceIndexFolder.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourceIndexFolder.class new file mode 100644 index 0000000..9b2763e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourceIndexFolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackFileNotFoundException.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackFileNotFoundException.class new file mode 100644 index 0000000..85cd987 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackFileNotFoundException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntry$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntry$1.class new file mode 100644 index 0000000..9c5cc97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntry$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntry.class new file mode 100644 index 0000000..ab59aa8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryDefault.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryDefault.class new file mode 100644 index 0000000..197d03f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryDefault.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryFound.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryFound.class new file mode 100644 index 0000000..20e88ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryFound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryServer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryServer.class new file mode 100644 index 0000000..78bdf56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackListEntryServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$1.class new file mode 100644 index 0000000..adb6ce7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$2.class new file mode 100644 index 0000000..c5a0d31 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$3.class new file mode 100644 index 0000000..5abe858 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$Entry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$Entry.class new file mode 100644 index 0000000..52d81ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository$Entry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository.class new file mode 100644 index 0000000..341324d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/ResourcePackRepository.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleReloadableResourceManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleReloadableResourceManager$1.class new file mode 100644 index 0000000..19f734a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleReloadableResourceManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleReloadableResourceManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleReloadableResourceManager.class new file mode 100644 index 0000000..265d11f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleReloadableResourceManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleResource.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleResource.class new file mode 100644 index 0000000..22b0fca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SimpleResource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$1.class new file mode 100644 index 0000000..a16d741 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$2.class new file mode 100644 index 0000000..2c37cd3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$3$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$3$1.class new file mode 100644 index 0000000..3e55a27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$3$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$3.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$3.class new file mode 100644 index 0000000..9fcde95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$SkinAvailableCallback.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$SkinAvailableCallback.class new file mode 100644 index 0000000..c6cd131 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager$SkinAvailableCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager.class new file mode 100644 index 0000000..3cebaaa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/SkinManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationFrame.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationFrame.class new file mode 100644 index 0000000..28ce3b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationFrame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationMetadataSection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationMetadataSection.class new file mode 100644 index 0000000..13c642b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationMetadataSection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.class new file mode 100644 index 0000000..ee7e145 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.class new file mode 100644 index 0000000..5d22152 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/FontMetadataSection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/FontMetadataSection.class new file mode 100644 index 0000000..157b3eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/FontMetadataSection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/FontMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/FontMetadataSectionSerializer.class new file mode 100644 index 0000000..04654d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/FontMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/IMetadataSection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/IMetadataSection.class new file mode 100644 index 0000000..39de99c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/IMetadataSection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/IMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/IMetadataSectionSerializer.class new file mode 100644 index 0000000..1d5d858 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/IMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/LanguageMetadataSection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/LanguageMetadataSection.class new file mode 100644 index 0000000..32924a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/LanguageMetadataSection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.class new file mode 100644 index 0000000..0ec55fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer$1.class new file mode 100644 index 0000000..b532f9e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer$Registration.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer$Registration.class new file mode 100644 index 0000000..51219bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer$Registration.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer.class new file mode 100644 index 0000000..b3e756d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/MetadataSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/PackMetadataSection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/PackMetadataSection.class new file mode 100644 index 0000000..86436fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/PackMetadataSection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/PackMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/PackMetadataSectionSerializer.class new file mode 100644 index 0000000..1afe459 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/PackMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/TextureMetadataSection.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/TextureMetadataSection.class new file mode 100644 index 0000000..b4551d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/TextureMetadataSection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.class new file mode 100644 index 0000000..db577af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/package-info.class new file mode 100644 index 0000000..2dcd318 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/data/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/resources/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/package-info.class new file mode 100644 index 0000000..606a103 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/resources/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/CreativeSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/CreativeSettings.class new file mode 100644 index 0000000..95ac3b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/CreativeSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$1.class new file mode 100644 index 0000000..b918e9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$2.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$2.class new file mode 100644 index 0000000..6d68676 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$Options.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$Options.class new file mode 100644 index 0000000..b1338e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings$Options.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings.class new file mode 100644 index 0000000..d8d5f65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/GameSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/HotbarSnapshot.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/HotbarSnapshot.class new file mode 100644 index 0000000..865e65d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/HotbarSnapshot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/KeyBinding.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/KeyBinding.class new file mode 100644 index 0000000..ad20b71 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/KeyBinding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/settings/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/package-info.class new file mode 100644 index 0000000..79756ee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/settings/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/Framebuffer.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/Framebuffer.class new file mode 100644 index 0000000..24172d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/Framebuffer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/Shader.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/Shader.class new file mode 100644 index 0000000..a065b0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/Shader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderDefault.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderDefault.class new file mode 100644 index 0000000..9580d86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderDefault.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderGroup.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderGroup.class new file mode 100644 index 0000000..906505e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderGroup.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLinkHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLinkHelper.class new file mode 100644 index 0000000..c577e2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLinkHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLoader$ShaderType.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLoader$ShaderType.class new file mode 100644 index 0000000..381e4f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLoader$ShaderType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLoader.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLoader.class new file mode 100644 index 0000000..74cb08a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderManager.class new file mode 100644 index 0000000..56e0d3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderUniform.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderUniform.class new file mode 100644 index 0000000..c9e27ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/ShaderUniform.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/shader/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/package-info.class new file mode 100644 index 0000000..801e186 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/shader/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/CompletedTutorialStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/CompletedTutorialStep.class new file mode 100644 index 0000000..3a881de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/CompletedTutorialStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/CraftPlanksStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/CraftPlanksStep.class new file mode 100644 index 0000000..6056ec4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/CraftPlanksStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/FindTreeStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/FindTreeStep.class new file mode 100644 index 0000000..045db4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/FindTreeStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/ITutorialStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/ITutorialStep.class new file mode 100644 index 0000000..35a64b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/ITutorialStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/MovementStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/MovementStep.class new file mode 100644 index 0000000..b332434 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/MovementStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/OpenInventoryStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/OpenInventoryStep.class new file mode 100644 index 0000000..2755870 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/OpenInventoryStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/PunchTreeStep.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/PunchTreeStep.class new file mode 100644 index 0000000..b36e984 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/PunchTreeStep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/Tutorial.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/Tutorial.class new file mode 100644 index 0000000..394df19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/Tutorial.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/TutorialSteps.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/TutorialSteps.class new file mode 100644 index 0000000..5421b10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/TutorialSteps.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/package-info.class new file mode 100644 index 0000000..81d3cfe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/tutorial/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/ISearchTree.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/ISearchTree.class new file mode 100644 index 0000000..9dac8bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/ISearchTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/ITooltipFlag$TooltipFlags.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/ITooltipFlag$TooltipFlags.class new file mode 100644 index 0000000..af5f571 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/ITooltipFlag$TooltipFlags.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/ITooltipFlag.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/ITooltipFlag.class new file mode 100644 index 0000000..db3a989 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/ITooltipFlag.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonBlendingMode.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonBlendingMode.class new file mode 100644 index 0000000..62ab04d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonBlendingMode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException$1.class new file mode 100644 index 0000000..5eb3b39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException$Entry.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException$Entry.class new file mode 100644 index 0000000..6c9664e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException$Entry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException.class new file mode 100644 index 0000000..fdf4a89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/JsonException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeBookClient.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeBookClient.class new file mode 100644 index 0000000..621382b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeBookClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeItemHelper$RecipePicker.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeItemHelper$RecipePicker.class new file mode 100644 index 0000000..81d9b91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeItemHelper$RecipePicker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeItemHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeItemHelper.class new file mode 100644 index 0000000..aa55a1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/RecipeItemHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTree$MergingIterator.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTree$MergingIterator.class new file mode 100644 index 0000000..e2557d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTree$MergingIterator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTree.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTree.class new file mode 100644 index 0000000..27bd3d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTreeManager$Key.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTreeManager$Key.class new file mode 100644 index 0000000..4d7fe3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTreeManager$Key.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTreeManager.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTreeManager.class new file mode 100644 index 0000000..e16a9f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SearchTreeManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/SuffixArray$1.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SuffixArray$1.class new file mode 100644 index 0000000..e6f42ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SuffixArray$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/SuffixArray.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SuffixArray.class new file mode 100644 index 0000000..f71067d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/SuffixArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/client/util/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/client/util/package-info.class new file mode 100644 index 0000000..34f031b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/client/util/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$1.class b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$1.class new file mode 100644 index 0000000..4b12431 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType$1.class b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType$1.class new file mode 100644 index 0000000..9be3387 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType$2.class b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType$2.class new file mode 100644 index 0000000..d14b297 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType.class b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType.class new file mode 100644 index 0000000..c75c7f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$ActionType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$Mode.class b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$Mode.class new file mode 100644 index 0000000..b79e19c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand$Mode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand.class b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand.class new file mode 100644 index 0000000..72a3068 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/AdvancementCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$1.class new file mode 100644 index 0000000..f4e8605 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$2.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$2.class new file mode 100644 index 0000000..e34e4f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$CoordinateArg.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$CoordinateArg.class new file mode 100644 index 0000000..4fdad05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase$CoordinateArg.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase.class new file mode 100644 index 0000000..445c018 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBlockData.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBlockData.class new file mode 100644 index 0000000..1b8e22f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandBlockData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClearInventory.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClearInventory.class new file mode 100644 index 0000000..c3724d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClearInventory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClone$StaticCloneData.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClone$StaticCloneData.class new file mode 100644 index 0000000..c914976 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClone$StaticCloneData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClone.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClone.class new file mode 100644 index 0000000..6ed7309 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandClone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandCompare.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandCompare.class new file mode 100644 index 0000000..8da50ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandCompare.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDebug.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDebug.class new file mode 100644 index 0000000..724bd66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDebug.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDefaultGameMode.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDefaultGameMode.class new file mode 100644 index 0000000..d53b515 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDefaultGameMode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDifficulty.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDifficulty.class new file mode 100644 index 0000000..8dddda4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandDifficulty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEffect.class new file mode 100644 index 0000000..f67b2e6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEnchant.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEnchant.class new file mode 100644 index 0000000..3496f29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEnchant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEntityData.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEntityData.class new file mode 100644 index 0000000..09a8e3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandEntityData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandException.class new file mode 100644 index 0000000..8a89677 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandExecuteAt.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandExecuteAt.class new file mode 100644 index 0000000..8ccb172 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandExecuteAt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandFill.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandFill.class new file mode 100644 index 0000000..ee3d697 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandFill.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandFunction.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandFunction.class new file mode 100644 index 0000000..cb200c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandFunction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGameMode.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGameMode.class new file mode 100644 index 0000000..7a2ad74 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGameMode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGameRule.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGameRule.class new file mode 100644 index 0000000..f4c84be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGameRule.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGive.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGive.class new file mode 100644 index 0000000..f2e44a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandGive.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandHandler.class new file mode 100644 index 0000000..ef183cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandHelp.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandHelp.class new file mode 100644 index 0000000..1f5c5d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandHelp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandKill.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandKill.class new file mode 100644 index 0000000..02e470c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandKill.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandLocate.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandLocate.class new file mode 100644 index 0000000..4b5f8fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandLocate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandNotFoundException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandNotFoundException.class new file mode 100644 index 0000000..cc028cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandNotFoundException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandParticle.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandParticle.class new file mode 100644 index 0000000..7a57a6f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandParticle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandPlaySound.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandPlaySound.class new file mode 100644 index 0000000..56b39de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandPlaySound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandReload.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandReload.class new file mode 100644 index 0000000..cb58893 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandReload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandReplaceItem.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandReplaceItem.class new file mode 100644 index 0000000..f607029 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandReplaceItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats$1.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats$1.class new file mode 100644 index 0000000..e9c705b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats$Type.class new file mode 100644 index 0000000..438d39e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats.class new file mode 100644 index 0000000..1fcfb6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandResultStats.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSenderWrapper.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSenderWrapper.class new file mode 100644 index 0000000..ccbdfbc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSenderWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandServerKick.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandServerKick.class new file mode 100644 index 0000000..fd72e5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandServerKick.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSetPlayerTimeout.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSetPlayerTimeout.class new file mode 100644 index 0000000..4f51221 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSetPlayerTimeout.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSetSpawnpoint.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSetSpawnpoint.class new file mode 100644 index 0000000..934e5c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSetSpawnpoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandShowSeed.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandShowSeed.class new file mode 100644 index 0000000..493fc3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandShowSeed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSpreadPlayers$Position.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSpreadPlayers$Position.class new file mode 100644 index 0000000..80eca46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSpreadPlayers$Position.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSpreadPlayers.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSpreadPlayers.class new file mode 100644 index 0000000..5065ba5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandSpreadPlayers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandStats.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandStats.class new file mode 100644 index 0000000..c18b135 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandStats.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandStopSound.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandStopSound.class new file mode 100644 index 0000000..5eea95a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandStopSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTP.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTP.class new file mode 100644 index 0000000..d5e84e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTime.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTime.class new file mode 100644 index 0000000..9492797 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTime.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTitle.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTitle.class new file mode 100644 index 0000000..95250c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTitle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandToggleDownfall.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandToggleDownfall.class new file mode 100644 index 0000000..91253fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandToggleDownfall.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTrigger.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTrigger.class new file mode 100644 index 0000000..e463fc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandTrigger.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandWeather.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandWeather.class new file mode 100644 index 0000000..53f1c46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandWeather.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandWorldBorder.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandWorldBorder.class new file mode 100644 index 0000000..dd344a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandWorldBorder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/CommandXP.class b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandXP.class new file mode 100644 index 0000000..7aab02c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/CommandXP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntityNotFoundException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntityNotFoundException.class new file mode 100644 index 0000000..a6a831c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntityNotFoundException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$1.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$1.class new file mode 100644 index 0000000..303f0cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$10.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$10.class new file mode 100644 index 0000000..76f8829 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$11.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$11.class new file mode 100644 index 0000000..68e1f40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$12.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$12.class new file mode 100644 index 0000000..0ed9223 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$13.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$13.class new file mode 100644 index 0000000..f609f08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$13.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$14.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$14.class new file mode 100644 index 0000000..73c8cc8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$14.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$2.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$2.class new file mode 100644 index 0000000..ef0b642 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$3.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$3.class new file mode 100644 index 0000000..01e333a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$4.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$4.class new file mode 100644 index 0000000..017854e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$5.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$5.class new file mode 100644 index 0000000..ed0cf34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$6.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$6.class new file mode 100644 index 0000000..837138b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$7.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$7.class new file mode 100644 index 0000000..3354f2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$8.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$8.class new file mode 100644 index 0000000..0da7823 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$9.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$9.class new file mode 100644 index 0000000..3f5b148 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector.class b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector.class new file mode 100644 index 0000000..6796419 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/EntitySelector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$CacheableFunction.class b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$CacheableFunction.class new file mode 100644 index 0000000..3deee4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$CacheableFunction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$CommandEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$CommandEntry.class new file mode 100644 index 0000000..fc2a982 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$CommandEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$Entry.class b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$Entry.class new file mode 100644 index 0000000..76ff155 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$Entry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$FunctionEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$FunctionEntry.class new file mode 100644 index 0000000..b843f88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject$FunctionEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject.class b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject.class new file mode 100644 index 0000000..571b6af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/FunctionObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/ICommand.class b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommand.class new file mode 100644 index 0000000..fd1b566 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandListener.class b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandListener.class new file mode 100644 index 0000000..e23155e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandManager.class b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandManager.class new file mode 100644 index 0000000..fbfe66d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandSender.class b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandSender.class new file mode 100644 index 0000000..54a6a3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/ICommandSender.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/InvalidBlockStateException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/InvalidBlockStateException.class new file mode 100644 index 0000000..766bd41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/InvalidBlockStateException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/NumberInvalidException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/NumberInvalidException.class new file mode 100644 index 0000000..29f71e6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/NumberInvalidException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/PlayerNotFoundException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/PlayerNotFoundException.class new file mode 100644 index 0000000..e6aa125 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/PlayerNotFoundException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/RecipeCommand.class b/build/tmp/recompileMc/compiled/net/minecraft/command/RecipeCommand.class new file mode 100644 index 0000000..5b8f2de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/RecipeCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/ServerCommandManager.class b/build/tmp/recompileMc/compiled/net/minecraft/command/ServerCommandManager.class new file mode 100644 index 0000000..ecf15ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/ServerCommandManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/SyntaxErrorException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/SyntaxErrorException.class new file mode 100644 index 0000000..eadf211 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/SyntaxErrorException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/WrongUsageException.class b/build/tmp/recompileMc/compiled/net/minecraft/command/WrongUsageException.class new file mode 100644 index 0000000..084556d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/WrongUsageException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/command/package-info.class new file mode 100644 index 0000000..f1dcf2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBanIp.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBanIp.class new file mode 100644 index 0000000..b19f182 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBanIp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBanPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBanPlayer.class new file mode 100644 index 0000000..374b3af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBanPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBroadcast.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBroadcast.class new file mode 100644 index 0000000..0e094b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandBroadcast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandDeOp.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandDeOp.class new file mode 100644 index 0000000..ddc0cd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandDeOp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandEmote.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandEmote.class new file mode 100644 index 0000000..04283bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandEmote.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandListBans.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandListBans.class new file mode 100644 index 0000000..5bd795f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandListBans.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandListPlayers.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandListPlayers.class new file mode 100644 index 0000000..88067f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandListPlayers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandMessage.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandMessage.class new file mode 100644 index 0000000..4a0407d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandMessageRaw.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandMessageRaw.class new file mode 100644 index 0000000..9a0be14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandMessageRaw.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandOp.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandOp.class new file mode 100644 index 0000000..88da3d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandOp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPardonIp.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPardonIp.class new file mode 100644 index 0000000..2959606 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPardonIp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPardonPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPardonPlayer.class new file mode 100644 index 0000000..71bbe2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPardonPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPublishLocalServer.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPublishLocalServer.class new file mode 100644 index 0000000..1336360 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandPublishLocalServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveAll.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveAll.class new file mode 100644 index 0000000..b9b4ba8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveAll.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveOff.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveOff.class new file mode 100644 index 0000000..3e08436 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveOff.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveOn.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveOn.class new file mode 100644 index 0000000..e7c941e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSaveOn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandScoreboard.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandScoreboard.class new file mode 100644 index 0000000..ec92b07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandScoreboard.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSetBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSetBlock.class new file mode 100644 index 0000000..478c116 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSetBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSetDefaultSpawnpoint.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSetDefaultSpawnpoint.class new file mode 100644 index 0000000..12e473b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSetDefaultSpawnpoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandStop.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandStop.class new file mode 100644 index 0000000..66b9fbd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandStop.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSummon.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSummon.class new file mode 100644 index 0000000..1eea0e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandSummon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTeleport.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTeleport.class new file mode 100644 index 0000000..38d88ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTeleport.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTestFor.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTestFor.class new file mode 100644 index 0000000..6acf985 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTestFor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTestForBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTestForBlock.class new file mode 100644 index 0000000..15c6970 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandTestForBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandWhitelist.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandWhitelist.class new file mode 100644 index 0000000..af87c04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/CommandWhitelist.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/command/server/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/command/server/package-info.class new file mode 100644 index 0000000..fc517df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/command/server/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$1.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$1.class new file mode 100644 index 0000000..5101a67 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$2.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$2.class new file mode 100644 index 0000000..69f9b0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$3.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$3.class new file mode 100644 index 0000000..434845f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$4.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$4.class new file mode 100644 index 0000000..ac87352 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$5.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$5.class new file mode 100644 index 0000000..726f1c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$6.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$6.class new file mode 100644 index 0000000..318f275 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$7.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$7.class new file mode 100644 index 0000000..8dd9088 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport.class new file mode 100644 index 0000000..0a93d2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReport.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$1.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$1.class new file mode 100644 index 0000000..e1b478f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$2.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$2.class new file mode 100644 index 0000000..e720a75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$3.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$3.class new file mode 100644 index 0000000..51df546 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$4.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$4.class new file mode 100644 index 0000000..b67ad09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$5.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$5.class new file mode 100644 index 0000000..4f79fde Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$Entry.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$Entry.class new file mode 100644 index 0000000..ec38460 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory$Entry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory.class new file mode 100644 index 0000000..88e0025 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/CrashReportCategory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/ICrashReportDetail.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/ICrashReportDetail.class new file mode 100644 index 0000000..7a8d1c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/ICrashReportDetail.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/crash/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/crash/package-info.class new file mode 100644 index 0000000..ce53189 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/crash/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$1.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$1.class new file mode 100644 index 0000000..c84f003 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$10.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$10.class new file mode 100644 index 0000000..af61493 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$11.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$11.class new file mode 100644 index 0000000..9839db0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$12.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$12.class new file mode 100644 index 0000000..4287674 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$2.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$2.class new file mode 100644 index 0000000..0f8d28c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$3.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$3.class new file mode 100644 index 0000000..f606e3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$4.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$4.class new file mode 100644 index 0000000..4e00d48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$5.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$5.class new file mode 100644 index 0000000..00cb581 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$6.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$6.class new file mode 100644 index 0000000..49ba54c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$7.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$7.class new file mode 100644 index 0000000..b349285 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$8.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$8.class new file mode 100644 index 0000000..4cf4ca9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$9.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$9.class new file mode 100644 index 0000000..a7957e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs.class new file mode 100644 index 0000000..b7878c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/CreativeTabs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/creativetab/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/package-info.class new file mode 100644 index 0000000..147e8f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/creativetab/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/BehaviorDefaultDispenseItem.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/BehaviorDefaultDispenseItem.class new file mode 100644 index 0000000..0172063 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/BehaviorDefaultDispenseItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/BehaviorProjectileDispense.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/BehaviorProjectileDispense.class new file mode 100644 index 0000000..6977b54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/BehaviorProjectileDispense.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBehaviorDispenseItem$1.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBehaviorDispenseItem$1.class new file mode 100644 index 0000000..2f04995 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBehaviorDispenseItem$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBehaviorDispenseItem.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBehaviorDispenseItem.class new file mode 100644 index 0000000..5cd800d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBehaviorDispenseItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBlockSource.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBlockSource.class new file mode 100644 index 0000000..9a21e60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IBlockSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/ILocatableSource.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/ILocatableSource.class new file mode 100644 index 0000000..d0b6ba3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/ILocatableSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/ILocation.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/ILocation.class new file mode 100644 index 0000000..a1e6c20 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/ILocation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IPosition.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IPosition.class new file mode 100644 index 0000000..0f66dee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/IPosition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/PositionImpl.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/PositionImpl.class new file mode 100644 index 0000000..007ebe1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/PositionImpl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/dispenser/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/package-info.class new file mode 100644 index 0000000..8f9c945 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/dispenser/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/Enchantment$Rarity.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/Enchantment$Rarity.class new file mode 100644 index 0000000..124b317 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/Enchantment$Rarity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/Enchantment.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/Enchantment.class new file mode 100644 index 0000000..151424c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/Enchantment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowDamage.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowDamage.class new file mode 100644 index 0000000..88e0131 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowDamage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowFire.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowFire.class new file mode 100644 index 0000000..99ee5cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowFire.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowInfinite.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowInfinite.class new file mode 100644 index 0000000..6675837 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowInfinite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowKnockback.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowKnockback.class new file mode 100644 index 0000000..50c3c7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentArrowKnockback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentBindingCurse.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentBindingCurse.class new file mode 100644 index 0000000..6a5a1f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentBindingCurse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDamage.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDamage.class new file mode 100644 index 0000000..499d399 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDamage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentData.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentData.class new file mode 100644 index 0000000..dddfab7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDigging.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDigging.class new file mode 100644 index 0000000..dd5af7e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDigging.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDurability.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDurability.class new file mode 100644 index 0000000..a5ccbeb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentDurability.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFireAspect.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFireAspect.class new file mode 100644 index 0000000..ecaa790 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFireAspect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFishingSpeed.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFishingSpeed.class new file mode 100644 index 0000000..ffef904 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFishingSpeed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFrostWalker.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFrostWalker.class new file mode 100644 index 0000000..d0dc2fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentFrostWalker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$1.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$1.class new file mode 100644 index 0000000..1bfd3be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$DamageIterator.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$DamageIterator.class new file mode 100644 index 0000000..6a2a634 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$DamageIterator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$HurtIterator.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$HurtIterator.class new file mode 100644 index 0000000..ab207aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$HurtIterator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$IModifier.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$IModifier.class new file mode 100644 index 0000000..926e964 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$IModifier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$ModifierDamage.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$ModifierDamage.class new file mode 100644 index 0000000..f96dbe4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$ModifierDamage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$ModifierLiving.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$ModifierLiving.class new file mode 100644 index 0000000..8c30737 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper$ModifierLiving.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper.class new file mode 100644 index 0000000..b4fa6ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentKnockback.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentKnockback.class new file mode 100644 index 0000000..3d77602 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentKnockback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentLootBonus.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentLootBonus.class new file mode 100644 index 0000000..562b9ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentLootBonus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentMending.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentMending.class new file mode 100644 index 0000000..dad4d40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentMending.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentOxygen.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentOxygen.class new file mode 100644 index 0000000..c34c116 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentOxygen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentProtection$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentProtection$Type.class new file mode 100644 index 0000000..e9bc0ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentProtection$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentProtection.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentProtection.class new file mode 100644 index 0000000..aec4753 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentProtection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentSweepingEdge.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentSweepingEdge.class new file mode 100644 index 0000000..adf068c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentSweepingEdge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentThorns.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentThorns.class new file mode 100644 index 0000000..527b83a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentThorns.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentUntouching.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentUntouching.class new file mode 100644 index 0000000..d8b936c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentUntouching.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentVanishingCurse.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentVanishingCurse.class new file mode 100644 index 0000000..3480b87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentVanishingCurse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentWaterWalker.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentWaterWalker.class new file mode 100644 index 0000000..da8b2bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentWaterWalker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentWaterWorker.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentWaterWorker.class new file mode 100644 index 0000000..a62c1fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnchantmentWaterWorker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$1.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$1.class new file mode 100644 index 0000000..7144cf0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$10.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$10.class new file mode 100644 index 0000000..348ae61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$11.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$11.class new file mode 100644 index 0000000..5df83b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$12.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$12.class new file mode 100644 index 0000000..572c609 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$2.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$2.class new file mode 100644 index 0000000..b321321 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$3.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$3.class new file mode 100644 index 0000000..da30bff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$4.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$4.class new file mode 100644 index 0000000..dac269d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$5.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$5.class new file mode 100644 index 0000000..c72ab91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$6.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$6.class new file mode 100644 index 0000000..05da47e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$7.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$7.class new file mode 100644 index 0000000..104a324 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$8.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$8.class new file mode 100644 index 0000000..e1cdf14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$9.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$9.class new file mode 100644 index 0000000..2d673ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType.class new file mode 100644 index 0000000..4b8f7d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/EnumEnchantmentType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/enchantment/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/package-info.class new file mode 100644 index 0000000..7054f7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/enchantment/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$1.class new file mode 100644 index 0000000..5388a8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$2.class new file mode 100644 index 0000000..1861dbc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$3.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$3.class new file mode 100644 index 0000000..bd7d1b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$4.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$4.class new file mode 100644 index 0000000..2dd9760 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$5.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$5.class new file mode 100644 index 0000000..25743fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$6.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$6.class new file mode 100644 index 0000000..ed4b2f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity.class new file mode 100644 index 0000000..957e570 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/Entity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityAgeable.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityAgeable.class new file mode 100644 index 0000000..adbf0dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityAgeable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityAreaEffectCloud.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityAreaEffectCloud.class new file mode 100644 index 0000000..2256821 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityAreaEffectCloud.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityBodyHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityBodyHelper.class new file mode 100644 index 0000000..b99c9a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityBodyHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityCreature.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityCreature.class new file mode 100644 index 0000000..0140132 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityCreature.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityFlying.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityFlying.class new file mode 100644 index 0000000..602ba60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityFlying.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging$1.class new file mode 100644 index 0000000..a61eddb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging$2.class new file mode 100644 index 0000000..ef27d9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging.class new file mode 100644 index 0000000..4f43b13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityHanging.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLeashKnot.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLeashKnot.class new file mode 100644 index 0000000..2776b84 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLeashKnot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityList$EntityEggInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityList$EntityEggInfo.class new file mode 100644 index 0000000..2fdc2ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityList$EntityEggInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityList.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityList.class new file mode 100644 index 0000000..be42b1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving$1.class new file mode 100644 index 0000000..4c2e07d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving$SpawnPlacementType.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving$SpawnPlacementType.class new file mode 100644 index 0000000..0c2ac41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving$SpawnPlacementType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving.class new file mode 100644 index 0000000..6308947 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLiving.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLivingBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLivingBase$1.class new file mode 100644 index 0000000..93e9148 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLivingBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLivingBase.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLivingBase.class new file mode 100644 index 0000000..39b2a4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityLivingBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntitySpawnPlacementRegistry.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntitySpawnPlacementRegistry.class new file mode 100644 index 0000000..ab4cfcd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntitySpawnPlacementRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTracker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTracker$1.class new file mode 100644 index 0000000..ebc126f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTracker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTracker.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTracker.class new file mode 100644 index 0000000..3268b68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTracker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTrackerEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTrackerEntry.class new file mode 100644 index 0000000..82bf42d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EntityTrackerEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EnumCreatureAttribute.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EnumCreatureAttribute.class new file mode 100644 index 0000000..5f0704f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EnumCreatureAttribute.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/EnumCreatureType.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/EnumCreatureType.class new file mode 100644 index 0000000..a879c8d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/EnumCreatureType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityLivingData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityLivingData.class new file mode 100644 index 0000000..8e76e1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityLivingData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityMultiPart.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityMultiPart.class new file mode 100644 index 0000000..a7bc4b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityMultiPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityOwnable.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityOwnable.class new file mode 100644 index 0000000..cc2a39d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IEntityOwnable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IJumpingMount.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IJumpingMount.class new file mode 100644 index 0000000..3847d27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IJumpingMount.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IMerchant.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IMerchant.class new file mode 100644 index 0000000..cc47d8b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IMerchant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/INpc.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/INpc.class new file mode 100644 index 0000000..09660e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/INpc.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IProjectile.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IProjectile.class new file mode 100644 index 0000000..81678c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IProjectile.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/IRangedAttackMob.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/IRangedAttackMob.class new file mode 100644 index 0000000..165c7d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/IRangedAttackMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/MoverType.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/MoverType.class new file mode 100644 index 0000000..6b74764 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/MoverType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/MultiPartEntityPart.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/MultiPartEntityPart.class new file mode 100644 index 0000000..fd2ee6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/MultiPartEntityPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/NpcMerchant.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/NpcMerchant.class new file mode 100644 index 0000000..19a8f54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/NpcMerchant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/SharedMonsterAttributes.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/SharedMonsterAttributes.class new file mode 100644 index 0000000..bf25671 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/SharedMonsterAttributes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackMelee.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackMelee.class new file mode 100644 index 0000000..b37bfb5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackMelee.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackRanged.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackRanged.class new file mode 100644 index 0000000..e8553ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackRanged.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackRangedBow.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackRangedBow.class new file mode 100644 index 0000000..c22a751 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAttackRangedBow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAvoidEntity$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAvoidEntity$1.class new file mode 100644 index 0000000..15809bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAvoidEntity$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAvoidEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAvoidEntity.class new file mode 100644 index 0000000..a137ae2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIAvoidEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBase.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBase.class new file mode 100644 index 0000000..f38c1b5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBeg.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBeg.class new file mode 100644 index 0000000..04ee818 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBeg.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBreakDoor.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBreakDoor.class new file mode 100644 index 0000000..bbe3025 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIBreakDoor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAICreeperSwell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAICreeperSwell.class new file mode 100644 index 0000000..7635ca2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAICreeperSwell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIDefendVillage.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIDefendVillage.class new file mode 100644 index 0000000..23a39e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIDefendVillage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIDoorInteract.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIDoorInteract.class new file mode 100644 index 0000000..a72a9c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIDoorInteract.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIEatGrass.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIEatGrass.class new file mode 100644 index 0000000..04a9818 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIEatGrass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearest$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearest$1.class new file mode 100644 index 0000000..75725b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearest$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearest.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearest.class new file mode 100644 index 0000000..e8382a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1.class new file mode 100644 index 0000000..c9701b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.class new file mode 100644 index 0000000..909d349 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFleeSun.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFleeSun.class new file mode 100644 index 0000000..4c3a42d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFleeSun.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollow$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollow$1.class new file mode 100644 index 0000000..9787246 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollow$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollow.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollow.class new file mode 100644 index 0000000..7e58355 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowGolem.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowGolem.class new file mode 100644 index 0000000..f079f45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowGolem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowOwner.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowOwner.class new file mode 100644 index 0000000..0af766b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowOwner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowOwnerFlying.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowOwnerFlying.class new file mode 100644 index 0000000..428feaa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowOwnerFlying.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowParent.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowParent.class new file mode 100644 index 0000000..9582504 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIFollowParent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIHarvestFarmland.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIHarvestFarmland.class new file mode 100644 index 0000000..8fb3a58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIHarvestFarmland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIHurtByTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIHurtByTarget.class new file mode 100644 index 0000000..87cf783 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIHurtByTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.class new file mode 100644 index 0000000..a3c43bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILeapAtTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILeapAtTarget.class new file mode 100644 index 0000000..f6d61b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILeapAtTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILlamaFollowCaravan.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILlamaFollowCaravan.class new file mode 100644 index 0000000..0c648a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILlamaFollowCaravan.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookAtTradePlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookAtTradePlayer.class new file mode 100644 index 0000000..990544a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookAtTradePlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookAtVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookAtVillager.class new file mode 100644 index 0000000..b052e00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookAtVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookIdle.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookIdle.class new file mode 100644 index 0000000..abb9529 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAILookIdle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMate.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMate.class new file mode 100644 index 0000000..301fc3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveIndoors.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveIndoors.class new file mode 100644 index 0000000..bb8443a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveIndoors.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveThroughVillage.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveThroughVillage.class new file mode 100644 index 0000000..f519863 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveThroughVillage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveToBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveToBlock.class new file mode 100644 index 0000000..11628fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveToBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.class new file mode 100644 index 0000000..e584c01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.class new file mode 100644 index 0000000..6914964 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$1.class new file mode 100644 index 0000000..733f9ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$2.class new file mode 100644 index 0000000..7f3ab0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter.class new file mode 100644 index 0000000..5e7f7b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget$Sorter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget.class new file mode 100644 index 0000000..e6464b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAINearestAttackableTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOcelotAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOcelotAttack.class new file mode 100644 index 0000000..9d066cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOcelotAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOcelotSit.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOcelotSit.class new file mode 100644 index 0000000..ae0ff7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOcelotSit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOpenDoor.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOpenDoor.class new file mode 100644 index 0000000..db75e12 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOpenDoor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.class new file mode 100644 index 0000000..86d53a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.class new file mode 100644 index 0000000..5f0e59d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIPanic.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIPanic.class new file mode 100644 index 0000000..e3627d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIPanic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIPlay.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIPlay.class new file mode 100644 index 0000000..1ee1446 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIPlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.class new file mode 100644 index 0000000..08b8302 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRestrictSun.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRestrictSun.class new file mode 100644 index 0000000..9cca70e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRestrictSun.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.class new file mode 100644 index 0000000..bfaa18a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISit.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISit.class new file mode 100644 index 0000000..a4d1fdb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISkeletonRiders.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISkeletonRiders.class new file mode 100644 index 0000000..e4f7259 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISkeletonRiders.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISwimming.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISwimming.class new file mode 100644 index 0000000..17a3d54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAISwimming.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITarget.class new file mode 100644 index 0000000..8e778ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITargetNonTamed.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITargetNonTamed.class new file mode 100644 index 0000000..dbfcae7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITargetNonTamed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry.class new file mode 100644 index 0000000..3e9ff93 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITasks$EntityAITaskEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITasks.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITasks.class new file mode 100644 index 0000000..972b8e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITasks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITempt.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITempt.class new file mode 100644 index 0000000..0be3b01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITempt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITradePlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITradePlayer.class new file mode 100644 index 0000000..b2d6b56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAITradePlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIVillagerInteract.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIVillagerInteract.class new file mode 100644 index 0000000..3137f97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIVillagerInteract.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIVillagerMate.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIVillagerMate.class new file mode 100644 index 0000000..24ed112 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIVillagerMate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWander.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWander.class new file mode 100644 index 0000000..4078e17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWander.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWanderAvoidWater.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWanderAvoidWater.class new file mode 100644 index 0000000..27841c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWanderAvoidWater.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.class new file mode 100644 index 0000000..8bd8034 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWatchClosest.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWatchClosest.class new file mode 100644 index 0000000..eaea243 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWatchClosest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWatchClosest2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWatchClosest2.class new file mode 100644 index 0000000..08a4fc0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIWatchClosest2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIZombieAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIZombieAttack.class new file mode 100644 index 0000000..67318a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityAIZombieAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityFlyHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityFlyHelper.class new file mode 100644 index 0000000..30ab602 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityFlyHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityJumpHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityJumpHelper.class new file mode 100644 index 0000000..1e73e14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityJumpHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityLookHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityLookHelper.class new file mode 100644 index 0000000..4084973 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityLookHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityMoveHelper$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityMoveHelper$Action.class new file mode 100644 index 0000000..39fcb49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityMoveHelper$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityMoveHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityMoveHelper.class new file mode 100644 index 0000000..938f201 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntityMoveHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntitySenses.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntitySenses.class new file mode 100644 index 0000000..9148cef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/EntitySenses.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/RandomPositionGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/RandomPositionGenerator.class new file mode 100644 index 0000000..f2a2265 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/RandomPositionGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AbstractAttributeMap.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AbstractAttributeMap.class new file mode 100644 index 0000000..c565b9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AbstractAttributeMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AttributeMap.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AttributeMap.class new file mode 100644 index 0000000..97b381b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AttributeMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AttributeModifier.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AttributeModifier.class new file mode 100644 index 0000000..32b6012 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/AttributeModifier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/BaseAttribute.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/BaseAttribute.class new file mode 100644 index 0000000..12f51b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/BaseAttribute.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/IAttribute.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/IAttribute.class new file mode 100644 index 0000000..354aa4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/IAttribute.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/IAttributeInstance.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/IAttributeInstance.class new file mode 100644 index 0000000..7136c3b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/IAttributeInstance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.class new file mode 100644 index 0000000..406c19b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/RangedAttribute.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/RangedAttribute.class new file mode 100644 index 0000000..b303fda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/RangedAttribute.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/package-info.class new file mode 100644 index 0000000..f2272e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/attributes/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/package-info.class new file mode 100644 index 0000000..76c7fb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/ai/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityDragon.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityDragon.class new file mode 100644 index 0000000..cdf13e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityDragon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither$1.class new file mode 100644 index 0000000..d26b1c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither$AIDoNothing.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither$AIDoNothing.class new file mode 100644 index 0000000..0c5613f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither$AIDoNothing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither.class new file mode 100644 index 0000000..874a4cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/EntityWither.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/IPhase.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/IPhase.class new file mode 100644 index 0000000..7510e97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/IPhase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseBase.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseBase.class new file mode 100644 index 0000000..cc707d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.class new file mode 100644 index 0000000..7c998a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseDying.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseDying.class new file mode 100644 index 0000000..7f7d9e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseDying.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.class new file mode 100644 index 0000000..188f824 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseHover.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseHover.class new file mode 100644 index 0000000..17c8f70 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseHover.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseLanding.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseLanding.class new file mode 100644 index 0000000..41eb796 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseLanding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.class new file mode 100644 index 0000000..f28e893 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseList.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseList.class new file mode 100644 index 0000000..829d254 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseManager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseManager.class new file mode 100644 index 0000000..9a5c71b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.class new file mode 100644 index 0000000..130f4e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.class new file mode 100644 index 0000000..59e19d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.class new file mode 100644 index 0000000..3a3754b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.class new file mode 100644 index 0000000..aad327b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.class new file mode 100644 index 0000000..3143882 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.class new file mode 100644 index 0000000..08aea39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/package-info.class new file mode 100644 index 0000000..643dc9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/dragon/phase/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/package-info.class new file mode 100644 index 0000000..998df88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/boss/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/EntityLightningBolt.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/EntityLightningBolt.class new file mode 100644 index 0000000..4ca451c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/EntityLightningBolt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/EntityWeatherEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/EntityWeatherEffect.class new file mode 100644 index 0000000..28ddf12 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/EntityWeatherEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/package-info.class new file mode 100644 index 0000000..f8c76a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/effect/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand$1.class new file mode 100644 index 0000000..f6c9172 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand$2.class new file mode 100644 index 0000000..8d226ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand.class new file mode 100644 index 0000000..d918af9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityArmorStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$1.class new file mode 100644 index 0000000..a23e063 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$Status.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$Status.class new file mode 100644 index 0000000..ec0c857 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$Status.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$Type.class new file mode 100644 index 0000000..ecf75d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat.class new file mode 100644 index 0000000..24cb0a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityBoat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderCrystal.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderCrystal.class new file mode 100644 index 0000000..b126e34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderCrystal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderEye.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderEye.class new file mode 100644 index 0000000..66f50c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderEye.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderPearl.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderPearl.class new file mode 100644 index 0000000..5f5371a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityEnderPearl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityExpBottle.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityExpBottle.class new file mode 100644 index 0000000..194a424 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityExpBottle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityFallingBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityFallingBlock.class new file mode 100644 index 0000000..b7a0e01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityFallingBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityFireworkRocket.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityFireworkRocket.class new file mode 100644 index 0000000..9b1f7cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityFireworkRocket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityItem.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityItem.class new file mode 100644 index 0000000..b554b18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityItemFrame.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityItemFrame.class new file mode 100644 index 0000000..958d77b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityItemFrame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart$1.class new file mode 100644 index 0000000..e181c11 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart$Type.class new file mode 100644 index 0000000..f18616f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart.class new file mode 100644 index 0000000..a449861 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartChest.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartChest.class new file mode 100644 index 0000000..7067a3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock$1.class new file mode 100644 index 0000000..e080648 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock$2.class new file mode 100644 index 0000000..336e580 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock.class new file mode 100644 index 0000000..9d0f427 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartCommandBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartContainer.class new file mode 100644 index 0000000..1ec5f39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartEmpty.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartEmpty.class new file mode 100644 index 0000000..1d91d13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartEmpty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartFurnace.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartFurnace.class new file mode 100644 index 0000000..25ab6eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartFurnace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartHopper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartHopper.class new file mode 100644 index 0000000..9a2efb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartHopper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner$1.class new file mode 100644 index 0000000..a988301 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner$2.class new file mode 100644 index 0000000..bb08c36 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner.class new file mode 100644 index 0000000..4408395 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartMobSpawner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartTNT.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartTNT.class new file mode 100644 index 0000000..4cf61e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityMinecartTNT.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityPainting$EnumArt.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityPainting$EnumArt.class new file mode 100644 index 0000000..1478cfc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityPainting$EnumArt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityPainting.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityPainting.class new file mode 100644 index 0000000..94495ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityPainting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityTNTPrimed.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityTNTPrimed.class new file mode 100644 index 0000000..8b75278 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityTNTPrimed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityXPOrb.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityXPOrb.class new file mode 100644 index 0000000..7fada18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/EntityXPOrb.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/item/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/package-info.class new file mode 100644 index 0000000..f4fb540 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/item/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractIllager$IllagerArmPose.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractIllager$IllagerArmPose.class new file mode 100644 index 0000000..7911f42 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractIllager$IllagerArmPose.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractIllager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractIllager.class new file mode 100644 index 0000000..a228f55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractIllager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractSkeleton$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractSkeleton$1.class new file mode 100644 index 0000000..2fd1128 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractSkeleton$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractSkeleton.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractSkeleton.class new file mode 100644 index 0000000..6da1303 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/AbstractSkeleton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityBlaze$AIFireballAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityBlaze$AIFireballAttack.class new file mode 100644 index 0000000..e87b91f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityBlaze$AIFireballAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityBlaze.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityBlaze.class new file mode 100644 index 0000000..41dd726 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityBlaze.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityCaveSpider.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityCaveSpider.class new file mode 100644 index 0000000..183fd3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityCaveSpider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityCreeper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityCreeper.class new file mode 100644 index 0000000..bb38230 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityCreeper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityElderGuardian$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityElderGuardian$1.class new file mode 100644 index 0000000..34fff93 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityElderGuardian$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityElderGuardian.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityElderGuardian.class new file mode 100644 index 0000000..e3d0941 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityElderGuardian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$1.class new file mode 100644 index 0000000..681301e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1.class new file mode 100644 index 0000000..e7f66a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIFindPlayer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIFindPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIFindPlayer.class new file mode 100644 index 0000000..70e07e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIFindPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock.class new file mode 100644 index 0000000..a7cc030 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AIPlaceBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AITakeBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AITakeBlock.class new file mode 100644 index 0000000..a93cc59 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman$AITakeBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman.class new file mode 100644 index 0000000..0ebc5d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEnderman.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEndermite.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEndermite.class new file mode 100644 index 0000000..291b5ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEndermite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$1.class new file mode 100644 index 0000000..e8d0076 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIAttackSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIAttackSpell.class new file mode 100644 index 0000000..57b24d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIAttackSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AICastingSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AICastingSpell.class new file mode 100644 index 0000000..7b80069 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AICastingSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AISummonSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AISummonSpell.class new file mode 100644 index 0000000..fecad0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AISummonSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1.class new file mode 100644 index 0000000..3eb3f92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIWololoSpell$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIWololoSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIWololoSpell.class new file mode 100644 index 0000000..6fdad84 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker$AIWololoSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker.class new file mode 100644 index 0000000..cc508ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityEvoker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AIFireballAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AIFireballAttack.class new file mode 100644 index 0000000..8614edd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AIFireballAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AILookAround.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AILookAround.class new file mode 100644 index 0000000..1f24d5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AILookAround.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AIRandomFly.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AIRandomFly.class new file mode 100644 index 0000000..a2bfdd1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$AIRandomFly.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$GhastMoveHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$GhastMoveHelper.class new file mode 100644 index 0000000..07fb4b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast$GhastMoveHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast.class new file mode 100644 index 0000000..5132a0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGhast.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGiantZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGiantZombie.class new file mode 100644 index 0000000..5f106b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGiantZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGolem.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGolem.class new file mode 100644 index 0000000..90a5a2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGolem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack.class new file mode 100644 index 0000000..01f9d9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$AIGuardianAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper.class new file mode 100644 index 0000000..aecba27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$GuardianMoveHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector.class new file mode 100644 index 0000000..68d7ab9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian$GuardianTargetSelector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian.class new file mode 100644 index 0000000..6e00d69 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityGuardian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityHusk.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityHusk.class new file mode 100644 index 0000000..3966ceb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityHusk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$1.class new file mode 100644 index 0000000..966a65d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell.class new file mode 100644 index 0000000..e5b3e64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$AIBlindnessSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell.class new file mode 100644 index 0000000..436974d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager$AIMirriorSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager.class new file mode 100644 index 0000000..de5f2b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIllusionIllager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIronGolem$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIronGolem$1.class new file mode 100644 index 0000000..ff94ab3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIronGolem$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIronGolem.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIronGolem.class new file mode 100644 index 0000000..2e38ad1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityIronGolem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityMagmaCube.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityMagmaCube.class new file mode 100644 index 0000000..af84200 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityMagmaCube.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityMob.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityMob.class new file mode 100644 index 0000000..5657425 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor.class new file mode 100644 index 0000000..e5a8381 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie$AIHurtByAggressor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor.class new file mode 100644 index 0000000..5f7afe9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie$AITargetAggressor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie.class new file mode 100644 index 0000000..b3196cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPigZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$1.class new file mode 100644 index 0000000..e904105 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer.class new file mode 100644 index 0000000..9a59ec8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIAttackPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget.class new file mode 100644 index 0000000..88ce994 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIHurtByTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack.class new file mode 100644 index 0000000..5f0ee8d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIMeleeAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIPanic.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIPanic.class new file mode 100644 index 0000000..a6d81af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$AIPanic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$GroupData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$GroupData.class new file mode 100644 index 0000000..fadd729 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear$GroupData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear.class new file mode 100644 index 0000000..1a666fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityPolarBear.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$1.class new file mode 100644 index 0000000..36bc83d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIAttack.class new file mode 100644 index 0000000..e5dc4cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIAttackNearest.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIAttackNearest.class new file mode 100644 index 0000000..7ded8d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIAttackNearest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1.class new file mode 100644 index 0000000..783e2da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIDefenseAttack$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIDefenseAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIDefenseAttack.class new file mode 100644 index 0000000..4b89440 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIDefenseAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIPeek.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIPeek.class new file mode 100644 index 0000000..41c0a0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$AIPeek.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$BodyHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$BodyHelper.class new file mode 100644 index 0000000..c4e083a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker$BodyHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker.class new file mode 100644 index 0000000..231d87d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityShulker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish$AIHideInStone.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish$AIHideInStone.class new file mode 100644 index 0000000..ad3cb52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish$AIHideInStone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish.class new file mode 100644 index 0000000..023a6a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish$AISummonSilverfish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish.class new file mode 100644 index 0000000..264a0f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySilverfish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySkeleton.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySkeleton.class new file mode 100644 index 0000000..05318c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySkeleton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeAttack.class new file mode 100644 index 0000000..406cd18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom.class new file mode 100644 index 0000000..0f14fef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeFaceRandom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeFloat.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeFloat.class new file mode 100644 index 0000000..be90889 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeFloat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeHop.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeHop.class new file mode 100644 index 0000000..77bcde2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$AISlimeHop.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper.class new file mode 100644 index 0000000..fb1b4d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime$SlimeMoveHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime.class new file mode 100644 index 0000000..b07d464 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySlime.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySnowman.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySnowman.class new file mode 100644 index 0000000..8882eb5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySnowman.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell.class new file mode 100644 index 0000000..6f7e2c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$AICastingApell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell.class new file mode 100644 index 0000000..4f1f832 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$AIUseSpell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType.class new file mode 100644 index 0000000..7507c78 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager$SpellType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager.class new file mode 100644 index 0000000..fdf7b6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpellcasterIllager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$AISpiderAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$AISpiderAttack.class new file mode 100644 index 0000000..d1a8170 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$AISpiderAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$AISpiderTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$AISpiderTarget.class new file mode 100644 index 0000000..4b93205 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$AISpiderTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$GroupData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$GroupData.class new file mode 100644 index 0000000..7ede280 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider$GroupData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider.class new file mode 100644 index 0000000..39ce602 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntitySpider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityStray.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityStray.class new file mode 100644 index 0000000..e7b4ce6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityStray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIChargeAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIChargeAttack.class new file mode 100644 index 0000000..ba2ab5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIChargeAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget.class new file mode 100644 index 0000000..dbade05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AICopyOwnerTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIMoveControl.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIMoveControl.class new file mode 100644 index 0000000..0180fba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIMoveControl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIMoveRandom.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIMoveRandom.class new file mode 100644 index 0000000..79ba469 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex$AIMoveRandom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex.class new file mode 100644 index 0000000..a5e6d1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator$1.class new file mode 100644 index 0000000..dddea52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack.class new file mode 100644 index 0000000..1ef5c43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator$AIJohnnyAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator.class new file mode 100644 index 0000000..da949d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityVindicator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityWitch.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityWitch.class new file mode 100644 index 0000000..620aa91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityWitch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityWitherSkeleton.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityWitherSkeleton.class new file mode 100644 index 0000000..ec035cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityWitherSkeleton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie$1.class new file mode 100644 index 0000000..a627bfd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie$GroupData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie$GroupData.class new file mode 100644 index 0000000..a362c91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie$GroupData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie.class new file mode 100644 index 0000000..ee9f25e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombie.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombieVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombieVillager.class new file mode 100644 index 0000000..5a8992b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/EntityZombieVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob$1.class new file mode 100644 index 0000000..8fd71cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob$2.class new file mode 100644 index 0000000..a65f0a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob.class new file mode 100644 index 0000000..0cfa14a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/IMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/package-info.class new file mode 100644 index 0000000..d573dd8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/monster/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/package-info.class new file mode 100644 index 0000000..5fa2ee1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractChestHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractChestHorse.class new file mode 100644 index 0000000..0136851 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractChestHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractHorse$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractHorse$1.class new file mode 100644 index 0000000..db9bcd6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractHorse$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractHorse.class new file mode 100644 index 0000000..8a4ccb1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/AbstractHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityAmbientCreature.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityAmbientCreature.class new file mode 100644 index 0000000..309c107 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityAmbientCreature.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityAnimal.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityAnimal.class new file mode 100644 index 0000000..79dcec0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityAnimal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityBat.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityBat.class new file mode 100644 index 0000000..ece453d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityBat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityChicken.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityChicken.class new file mode 100644 index 0000000..afe45d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityChicken.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityCow.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityCow.class new file mode 100644 index 0000000..ac6c3f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityCow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityDonkey.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityDonkey.class new file mode 100644 index 0000000..827e602 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityDonkey.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityFlying.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityFlying.class new file mode 100644 index 0000000..1f916da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityFlying.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityHorse$GroupData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityHorse$GroupData.class new file mode 100644 index 0000000..43dc0ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityHorse$GroupData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityHorse.class new file mode 100644 index 0000000..c8ed6e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$1.class new file mode 100644 index 0000000..07da7e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$AIDefendTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$AIDefendTarget.class new file mode 100644 index 0000000..44b9c53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$AIDefendTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$AIHurtByTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$AIHurtByTarget.class new file mode 100644 index 0000000..bdaa54c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$AIHurtByTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$GroupData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$GroupData.class new file mode 100644 index 0000000..67b3582 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama$GroupData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama.class new file mode 100644 index 0000000..4130ac8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityLlama.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityMooshroom.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityMooshroom.class new file mode 100644 index 0000000..fb772b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityMooshroom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityMule.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityMule.class new file mode 100644 index 0000000..ca36789 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityMule.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityOcelot.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityOcelot.class new file mode 100644 index 0000000..2d27d87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityOcelot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityParrot$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityParrot$1.class new file mode 100644 index 0000000..36d5817 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityParrot$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityParrot.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityParrot.class new file mode 100644 index 0000000..eaca659 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityParrot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityPig.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityPig.class new file mode 100644 index 0000000..a7de758 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityPig.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity.class new file mode 100644 index 0000000..cf40313 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIAvoidEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIEvilAttack.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIEvilAttack.class new file mode 100644 index 0000000..611ff11 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIEvilAttack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIPanic.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIPanic.class new file mode 100644 index 0000000..95f277a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIPanic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIRaidFarm.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIRaidFarm.class new file mode 100644 index 0000000..3156ec1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$AIRaidFarm.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper.class new file mode 100644 index 0000000..849215b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitJumpHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper.class new file mode 100644 index 0000000..c23f89a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitMoveHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitTypeData.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitTypeData.class new file mode 100644 index 0000000..c7f4a24 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit$RabbitTypeData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit.class new file mode 100644 index 0000000..7f404ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityRabbit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep$1.class new file mode 100644 index 0000000..b8a7af7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep$2.class new file mode 100644 index 0000000..13e23bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep.class new file mode 100644 index 0000000..46359f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySheep.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityShoulderRiding.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityShoulderRiding.class new file mode 100644 index 0000000..7af683f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityShoulderRiding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySkeletonHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySkeletonHorse.class new file mode 100644 index 0000000..b29c069 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySkeletonHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySquid$AIMoveRandom.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySquid$AIMoveRandom.class new file mode 100644 index 0000000..5dd5041 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySquid$AIMoveRandom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySquid.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySquid.class new file mode 100644 index 0000000..5a87401 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntitySquid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityTameable.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityTameable.class new file mode 100644 index 0000000..3ff5457 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityTameable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$1.class new file mode 100644 index 0000000..3564794 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$EmeraldForItems.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$EmeraldForItems.class new file mode 100644 index 0000000..aac35b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$EmeraldForItems.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ITradeList.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ITradeList.class new file mode 100644 index 0000000..583cfa3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ITradeList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem.class new file mode 100644 index 0000000..5b68405 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ItemAndEmeraldToItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds.class new file mode 100644 index 0000000..b231fc8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListEnchantedBookForEmeralds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds.class new file mode 100644 index 0000000..4bf5508 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListEnchantedItemForEmeralds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds.class new file mode 100644 index 0000000..ddd6956 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$ListItemForEmeralds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$PriceInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$PriceInfo.class new file mode 100644 index 0000000..c76337d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$PriceInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds.class new file mode 100644 index 0000000..fa80caf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager$TreasureMapForEmeralds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager.class new file mode 100644 index 0000000..e94deee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityVillager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWaterMob.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWaterMob.class new file mode 100644 index 0000000..f135a81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWaterMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf$1.class new file mode 100644 index 0000000..0346d5c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf$AIAvoidEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf$AIAvoidEntity.class new file mode 100644 index 0000000..c3ee666 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf$AIAvoidEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf.class new file mode 100644 index 0000000..2bd4343 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityWolf.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityZombieHorse.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityZombieHorse.class new file mode 100644 index 0000000..1024289 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/EntityZombieHorse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/HorseArmorType.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/HorseArmorType.class new file mode 100644 index 0000000..de383b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/HorseArmorType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/IAnimals.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/IAnimals.class new file mode 100644 index 0000000..7b0046d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/IAnimals.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/package-info.class new file mode 100644 index 0000000..0ad5b4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/passive/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$1.class new file mode 100644 index 0000000..4d76dd8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$2.class new file mode 100644 index 0000000..b45525a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$EnumChatVisibility.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$EnumChatVisibility.class new file mode 100644 index 0000000..445529a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$EnumChatVisibility.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate.class new file mode 100644 index 0000000..53a305d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$SleepEnemyPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$SleepResult.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$SleepResult.class new file mode 100644 index 0000000..3e0f7a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer$SleepResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer.class new file mode 100644 index 0000000..c3780b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayerMP$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayerMP$1.class new file mode 100644 index 0000000..073f264 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayerMP$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayerMP.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayerMP.class new file mode 100644 index 0000000..428df8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EntityPlayerMP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EnumPlayerModelParts.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EnumPlayerModelParts.class new file mode 100644 index 0000000..7c54a53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/EnumPlayerModelParts.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/InventoryPlayer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/InventoryPlayer$1.class new file mode 100644 index 0000000..0f3fb10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/InventoryPlayer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/InventoryPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/InventoryPlayer.class new file mode 100644 index 0000000..09aa8c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/InventoryPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/PlayerCapabilities.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/PlayerCapabilities.class new file mode 100644 index 0000000..edfbb38 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/PlayerCapabilities.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/player/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/package-info.class new file mode 100644 index 0000000..7553f83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/player/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow$1.class new file mode 100644 index 0000000..7230c7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow$PickupStatus.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow$PickupStatus.class new file mode 100644 index 0000000..56f3fbb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow$PickupStatus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow.class new file mode 100644 index 0000000..2b87d5d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityDragonFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityDragonFireball.class new file mode 100644 index 0000000..2b3371e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityDragonFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityEgg.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityEgg.class new file mode 100644 index 0000000..a757b55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityEgg.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityEvokerFangs.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityEvokerFangs.class new file mode 100644 index 0000000..6bcc7e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityEvokerFangs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFireball.class new file mode 100644 index 0000000..f31ee2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFishHook$State.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFishHook$State.class new file mode 100644 index 0000000..5be6329 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFishHook$State.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFishHook.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFishHook.class new file mode 100644 index 0000000..f7363db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityFishHook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityLargeFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityLargeFireball.class new file mode 100644 index 0000000..dcedeaa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityLargeFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityLlamaSpit.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityLlamaSpit.class new file mode 100644 index 0000000..8d6babe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityLlamaSpit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityPotion$1.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityPotion$1.class new file mode 100644 index 0000000..2a80cfc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityPotion$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityPotion.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityPotion.class new file mode 100644 index 0000000..5894a8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityPotion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityShulkerBullet.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityShulkerBullet.class new file mode 100644 index 0000000..9eb90b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityShulkerBullet.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySmallFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySmallFireball.class new file mode 100644 index 0000000..b85121f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySmallFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySnowball.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySnowball.class new file mode 100644 index 0000000..5c9b760 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySnowball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySpectralArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySpectralArrow.class new file mode 100644 index 0000000..2fe0f3d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntitySpectralArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityThrowable.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityThrowable.class new file mode 100644 index 0000000..c6b645c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityThrowable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityTippedArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityTippedArrow.class new file mode 100644 index 0000000..df7210c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityTippedArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityWitherSkull.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityWitherSkull.class new file mode 100644 index 0000000..a7345d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/EntityWitherSkull.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/ProjectileHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/ProjectileHelper.class new file mode 100644 index 0000000..67e9680 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/ProjectileHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/package-info.class new file mode 100644 index 0000000..1b25ba6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/entity/projectile/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Biomes.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Biomes.class new file mode 100644 index 0000000..e0b657e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Biomes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Blocks.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Blocks.class new file mode 100644 index 0000000..71e1365 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Blocks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$1.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$1.class new file mode 100644 index 0000000..7060f9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$10.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$10.class new file mode 100644 index 0000000..70e3bbb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$11.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$11.class new file mode 100644 index 0000000..db401d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$12.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$12.class new file mode 100644 index 0000000..5fdb10b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$14.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$14.class new file mode 100644 index 0000000..c27988f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$14.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$15.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$15.class new file mode 100644 index 0000000..4aad001 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$15.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$16.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$16.class new file mode 100644 index 0000000..b4dceb9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$16.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$17.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$17.class new file mode 100644 index 0000000..180c98b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$17.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$18.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$18.class new file mode 100644 index 0000000..403b73b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$18.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$2.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$2.class new file mode 100644 index 0000000..48a9425 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$3.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$3.class new file mode 100644 index 0000000..d023367 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$4.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$4.class new file mode 100644 index 0000000..1be0981 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$5.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$5.class new file mode 100644 index 0000000..0016fc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$6.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$6.class new file mode 100644 index 0000000..b3665a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$7$1.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$7$1.class new file mode 100644 index 0000000..0676396 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$7$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$7.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$7.class new file mode 100644 index 0000000..0481554 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$8$1.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$8$1.class new file mode 100644 index 0000000..e32734b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$8$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$8.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$8.class new file mode 100644 index 0000000..5eaafa0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$9.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$9.class new file mode 100644 index 0000000..41ccac7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseBoat.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseBoat.class new file mode 100644 index 0000000..2d012c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseBoat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseOptional.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseOptional.class new file mode 100644 index 0000000..33f49c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseOptional.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox.class new file mode 100644 index 0000000..b22e18f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap$BehaviorDispenseShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap.class new file mode 100644 index 0000000..765ee70 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Bootstrap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Enchantments.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Enchantments.class new file mode 100644 index 0000000..7c6cade Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Enchantments.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/Items.class b/build/tmp/recompileMc/compiled/net/minecraft/init/Items.class new file mode 100644 index 0000000..614b240 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/Items.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/MobEffects.class b/build/tmp/recompileMc/compiled/net/minecraft/init/MobEffects.class new file mode 100644 index 0000000..46308be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/MobEffects.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/PotionTypes.class b/build/tmp/recompileMc/compiled/net/minecraft/init/PotionTypes.class new file mode 100644 index 0000000..8c2ac68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/PotionTypes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/SoundEvents.class b/build/tmp/recompileMc/compiled/net/minecraft/init/SoundEvents.class new file mode 100644 index 0000000..2250107 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/SoundEvents.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/init/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/init/package-info.class new file mode 100644 index 0000000..ca6ca4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/init/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ClickType.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ClickType.class new file mode 100644 index 0000000..c7facf0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ClickType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/Container.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/Container.class new file mode 100644 index 0000000..089996d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/Container.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBeacon$BeaconSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBeacon$BeaconSlot.class new file mode 100644 index 0000000..c3c9a52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBeacon$BeaconSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBeacon.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBeacon.class new file mode 100644 index 0000000..818c2dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBeacon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Fuel.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Fuel.class new file mode 100644 index 0000000..570b778 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Fuel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Ingredient.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Ingredient.class new file mode 100644 index 0000000..30a4b14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Ingredient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Potion.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Potion.class new file mode 100644 index 0000000..ed879ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand$Potion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand.class new file mode 100644 index 0000000..824cc14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerBrewingStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerChest.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerChest.class new file mode 100644 index 0000000..f14d01b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerDispenser.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerDispenser.class new file mode 100644 index 0000000..1450504 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerDispenser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$1.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$1.class new file mode 100644 index 0000000..7ecf628 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$2.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$2.class new file mode 100644 index 0000000..13f4d8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$3.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$3.class new file mode 100644 index 0000000..234f7f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment.class new file mode 100644 index 0000000..dd97a04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerEnchantment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerFurnace.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerFurnace.class new file mode 100644 index 0000000..4d20640 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerFurnace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHopper.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHopper.class new file mode 100644 index 0000000..9542088 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHopper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseChest.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseChest.class new file mode 100644 index 0000000..c99bec0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory$1.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory$1.class new file mode 100644 index 0000000..cb2e226 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory$2.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory$2.class new file mode 100644 index 0000000..7ef1072 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory.class new file mode 100644 index 0000000..7f5e235 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerHorseInventory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerMerchant.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerMerchant.class new file mode 100644 index 0000000..689d827 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerMerchant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer$1.class new file mode 100644 index 0000000..76bbfbc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer$2.class new file mode 100644 index 0000000..fecd5e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer.class new file mode 100644 index 0000000..fd4c2ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$1.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$1.class new file mode 100644 index 0000000..359b4e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$2.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$2.class new file mode 100644 index 0000000..f983da9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$3.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$3.class new file mode 100644 index 0000000..d2248ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair.class new file mode 100644 index 0000000..24ac04b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerRepair.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerShulkerBox.class new file mode 100644 index 0000000..5da740d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerWorkbench.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerWorkbench.class new file mode 100644 index 0000000..9ee5cd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ContainerWorkbench.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/EntityEquipmentSlot$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/EntityEquipmentSlot$Type.class new file mode 100644 index 0000000..55274e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/EntityEquipmentSlot$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/EntityEquipmentSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/EntityEquipmentSlot.class new file mode 100644 index 0000000..6968d9e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/EntityEquipmentSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/IContainerListener.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/IContainerListener.class new file mode 100644 index 0000000..404ae5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/IContainerListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/IInventory.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/IInventory.class new file mode 100644 index 0000000..6166cad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/IInventory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/IInventoryChangedListener.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/IInventoryChangedListener.class new file mode 100644 index 0000000..1ed63a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/IInventoryChangedListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ISidedInventory.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ISidedInventory.class new file mode 100644 index 0000000..13e72e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ISidedInventory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryBasic.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryBasic.class new file mode 100644 index 0000000..3f46493 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryBasic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryCraftResult.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryCraftResult.class new file mode 100644 index 0000000..c2210a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryCraftResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryCrafting.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryCrafting.class new file mode 100644 index 0000000..587b339 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryCrafting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryEnderChest.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryEnderChest.class new file mode 100644 index 0000000..845da82 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryEnderChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryHelper.class new file mode 100644 index 0000000..42487bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryLargeChest.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryLargeChest.class new file mode 100644 index 0000000..1770ae4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryLargeChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryMerchant.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryMerchant.class new file mode 100644 index 0000000..6ca1277 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/InventoryMerchant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/ItemStackHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ItemStackHelper.class new file mode 100644 index 0000000..38a7636 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/ItemStackHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/Slot.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/Slot.class new file mode 100644 index 0000000..b7a2832 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/Slot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotCrafting.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotCrafting.class new file mode 100644 index 0000000..e2c5753 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotCrafting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotFurnaceFuel.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotFurnaceFuel.class new file mode 100644 index 0000000..fb00a34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotFurnaceFuel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotFurnaceOutput.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotFurnaceOutput.class new file mode 100644 index 0000000..794920c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotFurnaceOutput.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotMerchantResult.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotMerchantResult.class new file mode 100644 index 0000000..da2a0f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotMerchantResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotShulkerBox.class new file mode 100644 index 0000000..4166f7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/SlotShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/inventory/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/inventory/package-info.class new file mode 100644 index 0000000..97419e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/inventory/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/EnumAction.class b/build/tmp/recompileMc/compiled/net/minecraft/item/EnumAction.class new file mode 100644 index 0000000..fe403bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/EnumAction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/EnumDyeColor.class b/build/tmp/recompileMc/compiled/net/minecraft/item/EnumDyeColor.class new file mode 100644 index 0000000..7576476 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/EnumDyeColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/EnumRarity.class b/build/tmp/recompileMc/compiled/net/minecraft/item/EnumRarity.class new file mode 100644 index 0000000..4c70834 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/EnumRarity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/IItemPropertyGetter.class b/build/tmp/recompileMc/compiled/net/minecraft/item/IItemPropertyGetter.class new file mode 100644 index 0000000..a439dce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/IItemPropertyGetter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$1.class new file mode 100644 index 0000000..7f8fc52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$10.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$10.class new file mode 100644 index 0000000..96d8f92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$11.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$11.class new file mode 100644 index 0000000..2c46ef1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$12.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$12.class new file mode 100644 index 0000000..522b0c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$13.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$13.class new file mode 100644 index 0000000..5e07ea7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$13.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$14.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$14.class new file mode 100644 index 0000000..856b366 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$14.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$15.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$15.class new file mode 100644 index 0000000..f236b35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$15.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$16.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$16.class new file mode 100644 index 0000000..81ee699 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$16.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$17.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$17.class new file mode 100644 index 0000000..f76e180 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$17.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$18.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$18.class new file mode 100644 index 0000000..0752a10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$18.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$19.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$19.class new file mode 100644 index 0000000..a2f403e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$19.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$2.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$2.class new file mode 100644 index 0000000..abe9b56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$20.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$20.class new file mode 100644 index 0000000..db23673 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$20.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$21.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$21.class new file mode 100644 index 0000000..1668032 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$21.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$22.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$22.class new file mode 100644 index 0000000..5170df2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$22.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$3.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$3.class new file mode 100644 index 0000000..cc20fd8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$4.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$4.class new file mode 100644 index 0000000..45b4a92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$5.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$5.class new file mode 100644 index 0000000..8b4f8b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$6.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$6.class new file mode 100644 index 0000000..d6df506 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$7.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$7.class new file mode 100644 index 0000000..212744b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$8.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$8.class new file mode 100644 index 0000000..4ff901e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$9.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$9.class new file mode 100644 index 0000000..563b701 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item$ToolMaterial.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$ToolMaterial.class new file mode 100644 index 0000000..6350911 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item$ToolMaterial.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/Item.class b/build/tmp/recompileMc/compiled/net/minecraft/item/Item.class new file mode 100644 index 0000000..2d5e30b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/Item.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAir.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAir.class new file mode 100644 index 0000000..f935a0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAir.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAnvilBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAnvilBlock.class new file mode 100644 index 0000000..b8813ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAnvilBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAppleGold.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAppleGold.class new file mode 100644 index 0000000..cd79b21 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAppleGold.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor$1.class new file mode 100644 index 0000000..fd399b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor$ArmorMaterial.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor$ArmorMaterial.class new file mode 100644 index 0000000..8736e65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor$ArmorMaterial.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor.class new file mode 100644 index 0000000..5e2d521 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmorStand.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmorStand.class new file mode 100644 index 0000000..4a0c0fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArmorStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArrow.class new file mode 100644 index 0000000..710fdc9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAxe.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAxe.class new file mode 100644 index 0000000..9b066be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemAxe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBanner.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBanner.class new file mode 100644 index 0000000..4a043af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBanner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBed.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBed.class new file mode 100644 index 0000000..9338eb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBlock.class new file mode 100644 index 0000000..b4e5132 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBlockSpecial.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBlockSpecial.class new file mode 100644 index 0000000..31ba27f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBlockSpecial.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBoat.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBoat.class new file mode 100644 index 0000000..221f645 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBoat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBook.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBook.class new file mode 100644 index 0000000..918dfe4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow$1.class new file mode 100644 index 0000000..497c9a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow$2.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow$2.class new file mode 100644 index 0000000..97f4641 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow.class new file mode 100644 index 0000000..23fa350 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBucket.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBucket.class new file mode 100644 index 0000000..4fd788a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBucket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBucketMilk.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBucketMilk.class new file mode 100644 index 0000000..db001a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemBucketMilk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCarrotOnAStick.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCarrotOnAStick.class new file mode 100644 index 0000000..6591b8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCarrotOnAStick.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemChorusFruit.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemChorusFruit.class new file mode 100644 index 0000000..c7eba70 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemChorusFruit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemClock$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemClock$1.class new file mode 100644 index 0000000..4639a2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemClock$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemClock.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemClock.class new file mode 100644 index 0000000..3638e24 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemClock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCloth.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCloth.class new file mode 100644 index 0000000..7c8fe27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCloth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCoal.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCoal.class new file mode 100644 index 0000000..632eeb5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCoal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemColored.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemColored.class new file mode 100644 index 0000000..ab04072 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemColored.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCompass$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCompass$1.class new file mode 100644 index 0000000..7afa839 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCompass$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCompass.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCompass.class new file mode 100644 index 0000000..630399d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemCompass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemDoor.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemDoor.class new file mode 100644 index 0000000..cf83d68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemDoor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemDye.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemDye.class new file mode 100644 index 0000000..291ad5c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemDye.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEgg.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEgg.class new file mode 100644 index 0000000..a2535fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEgg.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemElytra$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemElytra$1.class new file mode 100644 index 0000000..50ddeef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemElytra$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemElytra.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemElytra.class new file mode 100644 index 0000000..ef4a85b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemElytra.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEmptyMap.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEmptyMap.class new file mode 100644 index 0000000..03e3d03 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEmptyMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnchantedBook.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnchantedBook.class new file mode 100644 index 0000000..bb948a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnchantedBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEndCrystal.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEndCrystal.class new file mode 100644 index 0000000..9bccb95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEndCrystal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnderEye.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnderEye.class new file mode 100644 index 0000000..319fbb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnderEye.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnderPearl.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnderPearl.class new file mode 100644 index 0000000..fbce329 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemEnderPearl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemExpBottle.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemExpBottle.class new file mode 100644 index 0000000..67f6087 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemExpBottle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFireball.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFireball.class new file mode 100644 index 0000000..f815397 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFirework.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFirework.class new file mode 100644 index 0000000..06dea83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFirework.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFireworkCharge.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFireworkCharge.class new file mode 100644 index 0000000..c114a9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFireworkCharge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishFood$FishType.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishFood$FishType.class new file mode 100644 index 0000000..83feb2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishFood$FishType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishFood.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishFood.class new file mode 100644 index 0000000..801e4f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishFood.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishingRod$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishingRod$1.class new file mode 100644 index 0000000..95c44d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishingRod$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishingRod.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishingRod.class new file mode 100644 index 0000000..0fcdf27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFishingRod.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFlintAndSteel.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFlintAndSteel.class new file mode 100644 index 0000000..4cf13ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFlintAndSteel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFood.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFood.class new file mode 100644 index 0000000..325fb69 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemFood.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemGlassBottle$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemGlassBottle$1.class new file mode 100644 index 0000000..32cf33c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemGlassBottle$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemGlassBottle.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemGlassBottle.class new file mode 100644 index 0000000..5c59c99 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemGlassBottle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHangingEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHangingEntity.class new file mode 100644 index 0000000..f2a5724 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHangingEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHoe$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHoe$1.class new file mode 100644 index 0000000..9289a9d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHoe$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHoe.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHoe.class new file mode 100644 index 0000000..3707773 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemHoe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemKnowledgeBook.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemKnowledgeBook.class new file mode 100644 index 0000000..779612a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemKnowledgeBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLead.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLead.class new file mode 100644 index 0000000..d26f7a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLead.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLeaves.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLeaves.class new file mode 100644 index 0000000..8df9dd9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLeaves.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLilyPad.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLilyPad.class new file mode 100644 index 0000000..030f240 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLilyPad.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLingeringPotion.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLingeringPotion.class new file mode 100644 index 0000000..d53793a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemLingeringPotion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMap.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMap.class new file mode 100644 index 0000000..1522108 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMapBase.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMapBase.class new file mode 100644 index 0000000..ddf9c26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMapBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMinecart$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMinecart$1.class new file mode 100644 index 0000000..bbc8800 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMinecart$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMinecart.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMinecart.class new file mode 100644 index 0000000..9444408 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMinecart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMonsterPlacer.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMonsterPlacer.class new file mode 100644 index 0000000..81f475a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMonsterPlacer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture$1.class new file mode 100644 index 0000000..fa9d5cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture$Mapper.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture$Mapper.class new file mode 100644 index 0000000..4d988e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture$Mapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture.class new file mode 100644 index 0000000..c34283e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemMultiTexture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemNameTag.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemNameTag.class new file mode 100644 index 0000000..d958943 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemNameTag.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPickaxe.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPickaxe.class new file mode 100644 index 0000000..bb53c6f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPickaxe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPiston.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPiston.class new file mode 100644 index 0000000..6cad0e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPiston.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPotion.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPotion.class new file mode 100644 index 0000000..4ad2c08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemPotion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemRecord.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemRecord.class new file mode 100644 index 0000000..5c44232 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemRecord.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemRedstone.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemRedstone.class new file mode 100644 index 0000000..81a67d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemRedstone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSaddle.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSaddle.class new file mode 100644 index 0000000..f1d77cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSaddle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSeedFood.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSeedFood.class new file mode 100644 index 0000000..edfdc2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSeedFood.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSeeds.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSeeds.class new file mode 100644 index 0000000..bbd2d78 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSeeds.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShears.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShears.class new file mode 100644 index 0000000..01c9327 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShears.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShield$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShield$1.class new file mode 100644 index 0000000..0c564e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShield$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShield.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShield.class new file mode 100644 index 0000000..d850b64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShield.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShulkerBox.class new file mode 100644 index 0000000..876525c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSign.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSign.class new file mode 100644 index 0000000..d63a791 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSimpleFoiled.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSimpleFoiled.class new file mode 100644 index 0000000..6300088 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSimpleFoiled.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSkull.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSkull.class new file mode 100644 index 0000000..b6b3097 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSkull.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSlab.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSlab.class new file mode 100644 index 0000000..821880c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSlab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSnow.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSnow.class new file mode 100644 index 0000000..6bdf9dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSnow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSnowball.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSnowball.class new file mode 100644 index 0000000..9303dfd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSnowball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSoup.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSoup.class new file mode 100644 index 0000000..8feede9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSoup.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSpade.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSpade.class new file mode 100644 index 0000000..7fdad02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSpade.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSpectralArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSpectralArrow.class new file mode 100644 index 0000000..70ecbba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSpectralArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSplashPotion.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSplashPotion.class new file mode 100644 index 0000000..5355dd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSplashPotion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemStack.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemStack.class new file mode 100644 index 0000000..561fc77 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemStack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSword.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSword.class new file mode 100644 index 0000000..b0a4eab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemSword.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemTippedArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemTippedArrow.class new file mode 100644 index 0000000..34e0be5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemTippedArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemTool.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemTool.class new file mode 100644 index 0000000..4d8aa62 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemTool.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemWritableBook.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemWritableBook.class new file mode 100644 index 0000000..23333c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemWritableBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/ItemWrittenBook.class b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemWrittenBook.class new file mode 100644 index 0000000..cc5e965 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/ItemWrittenBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/CraftingManager.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/CraftingManager.class new file mode 100644 index 0000000..e2754f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/CraftingManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/FurnaceRecipes.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/FurnaceRecipes.class new file mode 100644 index 0000000..07bf895 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/FurnaceRecipes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/IRecipe.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/IRecipe.class new file mode 100644 index 0000000..8c679e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/IRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/Ingredient$1.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/Ingredient$1.class new file mode 100644 index 0000000..59f624d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/Ingredient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/Ingredient.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/Ingredient.class new file mode 100644 index 0000000..d2a4772 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/Ingredient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeBookCloning.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeBookCloning.class new file mode 100644 index 0000000..f21f359 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeBookCloning.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeFireworks.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeFireworks.class new file mode 100644 index 0000000..28f29f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeFireworks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeRepairItem.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeRepairItem.class new file mode 100644 index 0000000..9f1de7c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeRepairItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeTippedArrow.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeTippedArrow.class new file mode 100644 index 0000000..baf6788 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipeTippedArrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesArmorDyes.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesArmorDyes.class new file mode 100644 index 0000000..0651c1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesArmorDyes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern.class new file mode 100644 index 0000000..a269852 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners$RecipeAddPattern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern.class new file mode 100644 index 0000000..2ad3329 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners$RecipeDuplicatePattern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners.class new file mode 100644 index 0000000..3e073af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesBanners.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesMapCloning.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesMapCloning.class new file mode 100644 index 0000000..1605f52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesMapCloning.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesMapExtending.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesMapExtending.class new file mode 100644 index 0000000..96eb3b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/RecipesMapExtending.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShapedRecipes.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShapedRecipes.class new file mode 100644 index 0000000..652734b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShapedRecipes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShapelessRecipes.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShapelessRecipes.class new file mode 100644 index 0000000..2a956fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShapelessRecipes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShieldRecipes$Decoration.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShieldRecipes$Decoration.class new file mode 100644 index 0000000..5183b27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShieldRecipes$Decoration.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShieldRecipes.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShieldRecipes.class new file mode 100644 index 0000000..cf4fb32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShieldRecipes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring.class new file mode 100644 index 0000000..7747a7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShulkerBoxRecipes$ShulkerBoxColoring.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShulkerBoxRecipes.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShulkerBoxRecipes.class new file mode 100644 index 0000000..c9a2172 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/ShulkerBoxRecipes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/package-info.class new file mode 100644 index 0000000..b2c75eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/crafting/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/item/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/item/package-info.class new file mode 100644 index 0000000..878cfac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/item/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/CompressedStreamTools.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/CompressedStreamTools.class new file mode 100644 index 0000000..98729a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/CompressedStreamTools.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/JsonToNBT.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/JsonToNBT.class new file mode 100644 index 0000000..82ca8b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/JsonToNBT.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTBase.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTBase.class new file mode 100644 index 0000000..539d3ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTException.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTException.class new file mode 100644 index 0000000..c409952 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTPrimitive.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTPrimitive.class new file mode 100644 index 0000000..58dc9ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTPrimitive.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTSizeTracker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTSizeTracker$1.class new file mode 100644 index 0000000..bb8a6cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTSizeTracker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTSizeTracker.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTSizeTracker.class new file mode 100644 index 0000000..9b8a6f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTSizeTracker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagByte.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagByte.class new file mode 100644 index 0000000..7f5061e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagByte.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagByteArray.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagByteArray.class new file mode 100644 index 0000000..55d91a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagByteArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound$1.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound$1.class new file mode 100644 index 0000000..7d1c797 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound$2.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound$2.class new file mode 100644 index 0000000..00efe73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound.class new file mode 100644 index 0000000..e30b22d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagCompound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagDouble.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagDouble.class new file mode 100644 index 0000000..03df755 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagDouble.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagEnd.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagEnd.class new file mode 100644 index 0000000..2988cfb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagEnd.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagFloat.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagFloat.class new file mode 100644 index 0000000..ed42f4e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagFloat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagInt.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagInt.class new file mode 100644 index 0000000..6c847db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagInt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagIntArray.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagIntArray.class new file mode 100644 index 0000000..8e40315 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagIntArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagList.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagList.class new file mode 100644 index 0000000..1a87d1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagLong.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagLong.class new file mode 100644 index 0000000..b5678df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagLong.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagLongArray.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagLongArray.class new file mode 100644 index 0000000..61eed94 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagLongArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagShort.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagShort.class new file mode 100644 index 0000000..76feea4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagShort.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagString.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagString.class new file mode 100644 index 0000000..da5a351 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTTagString.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTUtil.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTUtil.class new file mode 100644 index 0000000..3769a9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/NBTUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/nbt/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/nbt/package-info.class new file mode 100644 index 0000000..592359f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/nbt/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$1.class new file mode 100644 index 0000000..5903e90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$2.class b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$2.class new file mode 100644 index 0000000..45ff267 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$3.class b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$3.class new file mode 100644 index 0000000..eae1e6f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$4.class b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$4.class new file mode 100644 index 0000000..afb9097 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState.class b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState.class new file mode 100644 index 0000000..98ce4e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumConnectionState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/EnumPacketDirection.class b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumPacketDirection.class new file mode 100644 index 0000000..4c78e7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/EnumPacketDirection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/INetHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/network/INetHandler.class new file mode 100644 index 0000000..55caa0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/INetHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/LegacyPingHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/network/LegacyPingHandler.class new file mode 100644 index 0000000..f4494da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/LegacyPingHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$1.class new file mode 100644 index 0000000..12218b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$2.class new file mode 100644 index 0000000..c4bd8b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$3.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$3.class new file mode 100644 index 0000000..a9ca7f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$4.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$4.class new file mode 100644 index 0000000..4464cc8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer.class new file mode 100644 index 0000000..13d3ec6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetHandlerPlayServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyCompressionDecoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyCompressionDecoder.class new file mode 100644 index 0000000..9c1afad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyCompressionDecoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyCompressionEncoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyCompressionEncoder.class new file mode 100644 index 0000000..3adaffd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyCompressionEncoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptingDecoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptingDecoder.class new file mode 100644 index 0000000..61eec1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptingDecoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptingEncoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptingEncoder.class new file mode 100644 index 0000000..40e1df7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptingEncoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptionTranslator.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptionTranslator.class new file mode 100644 index 0000000..b800760 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyEncryptionTranslator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyPacketDecoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyPacketDecoder.class new file mode 100644 index 0000000..7f98279 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyPacketDecoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyPacketEncoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyPacketEncoder.class new file mode 100644 index 0000000..d19d14f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyPacketEncoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyVarint21FrameDecoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyVarint21FrameDecoder.class new file mode 100644 index 0000000..43bb31c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyVarint21FrameDecoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NettyVarint21FrameEncoder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyVarint21FrameEncoder.class new file mode 100644 index 0000000..58f10df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NettyVarint21FrameEncoder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$1.class new file mode 100644 index 0000000..d71b2ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$2.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$2.class new file mode 100644 index 0000000..65f2fc6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$3.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$3.class new file mode 100644 index 0000000..9b822d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$4.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$4.class new file mode 100644 index 0000000..7240619 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$5.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$5.class new file mode 100644 index 0000000..6f411af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$6.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$6.class new file mode 100644 index 0000000..5065cac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener.class new file mode 100644 index 0000000..285357d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager$InboundHandlerTuplePacketListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager.class new file mode 100644 index 0000000..adbc59a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$1.class new file mode 100644 index 0000000..8871a62 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$2.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$2.class new file mode 100644 index 0000000..212e99e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$3.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$3.class new file mode 100644 index 0000000..cefb15c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$4.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$4.class new file mode 100644 index 0000000..aa3b816 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$5.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$5.class new file mode 100644 index 0000000..a086c6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$6.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$6.class new file mode 100644 index 0000000..cd13d3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$7.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$7.class new file mode 100644 index 0000000..ae57aa0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem.class b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem.class new file mode 100644 index 0000000..e1936de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/NetworkSystem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/Packet.class b/build/tmp/recompileMc/compiled/net/minecraft/network/Packet.class new file mode 100644 index 0000000..25e5fee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/Packet.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/PacketBuffer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/PacketBuffer.class new file mode 100644 index 0000000..5cd86c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/PacketBuffer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/PacketThreadUtil$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/PacketThreadUtil$1.class new file mode 100644 index 0000000..742d5a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/PacketThreadUtil$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/PacketThreadUtil.class b/build/tmp/recompileMc/compiled/net/minecraft/network/PacketThreadUtil.class new file mode 100644 index 0000000..cf7a769 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/PacketThreadUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Players$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Players$Serializer.class new file mode 100644 index 0000000..86d5448 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Players$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Players.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Players.class new file mode 100644 index 0000000..f30a02b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Players.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Serializer.class new file mode 100644 index 0000000..2dc61f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Version$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Version$Serializer.class new file mode 100644 index 0000000..e04453a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Version$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Version.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Version.class new file mode 100644 index 0000000..b799a05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse$Version.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse.class new file mode 100644 index 0000000..4a0b28f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ServerStatusResponse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/ThreadQuickExitException.class b/build/tmp/recompileMc/compiled/net/minecraft/network/ThreadQuickExitException.class new file mode 100644 index 0000000..1c8a515 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/ThreadQuickExitException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataParameter.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataParameter.class new file mode 100644 index 0000000..e124827 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataParameter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializer.class new file mode 100644 index 0000000..de514dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$1.class new file mode 100644 index 0000000..de2cb20 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$10.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$10.class new file mode 100644 index 0000000..6559e60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$11.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$11.class new file mode 100644 index 0000000..5139a29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$12.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$12.class new file mode 100644 index 0000000..e8cb02c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$13.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$13.class new file mode 100644 index 0000000..43af60f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$13.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$14.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$14.class new file mode 100644 index 0000000..bdd08fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$14.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$2.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$2.class new file mode 100644 index 0000000..b6a5690 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$3.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$3.class new file mode 100644 index 0000000..1bd0885 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$4.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$4.class new file mode 100644 index 0000000..193fa1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$5.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$5.class new file mode 100644 index 0000000..3c4dab5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$6.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$6.class new file mode 100644 index 0000000..c80ea76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$7.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$7.class new file mode 100644 index 0000000..639dc46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$8.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$8.class new file mode 100644 index 0000000..8313cb7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$9.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$9.class new file mode 100644 index 0000000..f3864f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers.class new file mode 100644 index 0000000..e014ef4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/DataSerializers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/EntityDataManager$DataEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/EntityDataManager$DataEntry.class new file mode 100644 index 0000000..3b38b26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/EntityDataManager$DataEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/EntityDataManager.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/EntityDataManager.class new file mode 100644 index 0000000..fd69c50 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/EntityDataManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/package-info.class new file mode 100644 index 0000000..f9d02fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/datasync/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/INetHandlerHandshakeServer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/INetHandlerHandshakeServer.class new file mode 100644 index 0000000..8b3daaa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/INetHandlerHandshakeServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/client/C00Handshake.class b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/client/C00Handshake.class new file mode 100644 index 0000000..b3395cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/client/C00Handshake.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/client/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/client/package-info.class new file mode 100644 index 0000000..3fc6c73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/client/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/package-info.class new file mode 100644 index 0000000..84e4482 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/handshake/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/INetHandlerLoginClient.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/INetHandlerLoginClient.class new file mode 100644 index 0000000..f7fd934 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/INetHandlerLoginClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/INetHandlerLoginServer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/INetHandlerLoginServer.class new file mode 100644 index 0000000..ff97b52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/INetHandlerLoginServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/CPacketEncryptionResponse.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/CPacketEncryptionResponse.class new file mode 100644 index 0000000..274e80c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/CPacketEncryptionResponse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/CPacketLoginStart.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/CPacketLoginStart.class new file mode 100644 index 0000000..adb1ec4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/CPacketLoginStart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/package-info.class new file mode 100644 index 0000000..b798844 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/client/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/package-info.class new file mode 100644 index 0000000..fd9671c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketDisconnect.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketDisconnect.class new file mode 100644 index 0000000..03b05b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketDisconnect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketEnableCompression.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketEnableCompression.class new file mode 100644 index 0000000..708bcea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketEnableCompression.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketEncryptionRequest.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketEncryptionRequest.class new file mode 100644 index 0000000..17508f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketEncryptionRequest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketLoginSuccess.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketLoginSuccess.class new file mode 100644 index 0000000..645843a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/SPacketLoginSuccess.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/package-info.class new file mode 100644 index 0000000..92e4b2f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/login/server/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/package-info.class new file mode 100644 index 0000000..7a695a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/INetHandlerPlayClient.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/INetHandlerPlayClient.class new file mode 100644 index 0000000..9a97d8b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/INetHandlerPlayClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/INetHandlerPlayServer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/INetHandlerPlayServer.class new file mode 100644 index 0000000..f60d2f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/INetHandlerPlayServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketAnimation.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketAnimation.class new file mode 100644 index 0000000..b4218ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketAnimation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketChatMessage.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketChatMessage.class new file mode 100644 index 0000000..cf3dbcb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketChatMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClickWindow.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClickWindow.class new file mode 100644 index 0000000..477dce1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClickWindow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientSettings.class new file mode 100644 index 0000000..7966c7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientStatus$State.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientStatus$State.class new file mode 100644 index 0000000..f39ca4d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientStatus$State.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientStatus.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientStatus.class new file mode 100644 index 0000000..1077a84 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketClientStatus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCloseWindow.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCloseWindow.class new file mode 100644 index 0000000..bd65f27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCloseWindow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketConfirmTeleport.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketConfirmTeleport.class new file mode 100644 index 0000000..58be29b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketConfirmTeleport.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketConfirmTransaction.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketConfirmTransaction.class new file mode 100644 index 0000000..2fbe9ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketConfirmTransaction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCreativeInventoryAction.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCreativeInventoryAction.class new file mode 100644 index 0000000..ea5f26d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCreativeInventoryAction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCustomPayload.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCustomPayload.class new file mode 100644 index 0000000..d6dea40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketCustomPayload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEnchantItem.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEnchantItem.class new file mode 100644 index 0000000..f6a3385 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEnchantItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEntityAction$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEntityAction$Action.class new file mode 100644 index 0000000..1499726 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEntityAction$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEntityAction.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEntityAction.class new file mode 100644 index 0000000..a58b5cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketEntityAction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketHeldItemChange.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketHeldItemChange.class new file mode 100644 index 0000000..602d9ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketHeldItemChange.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketInput.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketInput.class new file mode 100644 index 0000000..f4dbf74 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketInput.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketKeepAlive.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketKeepAlive.class new file mode 100644 index 0000000..3af309c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketKeepAlive.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlaceRecipe.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlaceRecipe.class new file mode 100644 index 0000000..53ce9a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlaceRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$Position.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$Position.class new file mode 100644 index 0000000..b328cb0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$Position.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$PositionRotation.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$PositionRotation.class new file mode 100644 index 0000000..60b8216 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$PositionRotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$Rotation.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$Rotation.class new file mode 100644 index 0000000..c3a2a54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer$Rotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer.class new file mode 100644 index 0000000..768317b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerAbilities.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerAbilities.class new file mode 100644 index 0000000..6abda0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerAbilities.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerDigging$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerDigging$Action.class new file mode 100644 index 0000000..571994e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerDigging$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerDigging.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerDigging.class new file mode 100644 index 0000000..5e0ff00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerDigging.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerTryUseItem.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerTryUseItem.class new file mode 100644 index 0000000..3abf761 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerTryUseItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.class new file mode 100644 index 0000000..e9456e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketRecipeInfo$Purpose.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketRecipeInfo$Purpose.class new file mode 100644 index 0000000..c464750 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketRecipeInfo$Purpose.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketRecipeInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketRecipeInfo.class new file mode 100644 index 0000000..ff6946b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketRecipeInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketResourcePackStatus$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketResourcePackStatus$Action.class new file mode 100644 index 0000000..9eba21e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketResourcePackStatus$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketResourcePackStatus.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketResourcePackStatus.class new file mode 100644 index 0000000..420a792 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketResourcePackStatus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSeenAdvancements$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSeenAdvancements$Action.class new file mode 100644 index 0000000..17bf7a4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSeenAdvancements$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSeenAdvancements.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSeenAdvancements.class new file mode 100644 index 0000000..da7d87c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSeenAdvancements.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSpectate.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSpectate.class new file mode 100644 index 0000000..2b23591 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSpectate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSteerBoat.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSteerBoat.class new file mode 100644 index 0000000..57ead95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketSteerBoat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketTabComplete.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketTabComplete.class new file mode 100644 index 0000000..1563fed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketTabComplete.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUpdateSign.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUpdateSign.class new file mode 100644 index 0000000..b8ee808 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUpdateSign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUseEntity$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUseEntity$Action.class new file mode 100644 index 0000000..c995e86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUseEntity$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUseEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUseEntity.class new file mode 100644 index 0000000..6731287 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketUseEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketVehicleMove.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketVehicleMove.class new file mode 100644 index 0000000..bbd081d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/CPacketVehicleMove.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/package-info.class new file mode 100644 index 0000000..7ef077b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/client/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/package-info.class new file mode 100644 index 0000000..94eff58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketAdvancementInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketAdvancementInfo.class new file mode 100644 index 0000000..9bd3822 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketAdvancementInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketAnimation.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketAnimation.class new file mode 100644 index 0000000..3f21fc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketAnimation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockAction.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockAction.class new file mode 100644 index 0000000..a7e4058 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockAction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockBreakAnim.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockBreakAnim.class new file mode 100644 index 0000000..6b8c6d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockBreakAnim.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockChange.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockChange.class new file mode 100644 index 0000000..839a874 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketBlockChange.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCamera.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCamera.class new file mode 100644 index 0000000..870e218 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCamera.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChangeGameState.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChangeGameState.class new file mode 100644 index 0000000..a8050da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChangeGameState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChat.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChat.class new file mode 100644 index 0000000..8eecbe0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChunkData.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChunkData.class new file mode 100644 index 0000000..31e3f97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketChunkData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCloseWindow.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCloseWindow.class new file mode 100644 index 0000000..ada4573 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCloseWindow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCollectItem.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCollectItem.class new file mode 100644 index 0000000..ac9eb84 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCollectItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent$1.class new file mode 100644 index 0000000..55eb42c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent$Event.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent$Event.class new file mode 100644 index 0000000..23442f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent$Event.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent.class new file mode 100644 index 0000000..8e83dd4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCombatEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketConfirmTransaction.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketConfirmTransaction.class new file mode 100644 index 0000000..51b5918 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketConfirmTransaction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCooldown.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCooldown.class new file mode 100644 index 0000000..74efd8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCooldown.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCustomPayload.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCustomPayload.class new file mode 100644 index 0000000..912327a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCustomPayload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCustomSound.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCustomSound.class new file mode 100644 index 0000000..095ad3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketCustomSound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDestroyEntities.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDestroyEntities.class new file mode 100644 index 0000000..1c4c108 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDestroyEntities.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDisconnect.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDisconnect.class new file mode 100644 index 0000000..5deb037 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDisconnect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDisplayObjective.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDisplayObjective.class new file mode 100644 index 0000000..901bc8c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketDisplayObjective.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEffect.class new file mode 100644 index 0000000..32a5d53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove.class new file mode 100644 index 0000000..f8d8f73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S15PacketEntityRelMove.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook.class new file mode 100644 index 0000000..58e9c8c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S16PacketEntityLook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove.class new file mode 100644 index 0000000..0627580 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity$S17PacketEntityLookMove.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity.class new file mode 100644 index 0000000..ebea6fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityAttach.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityAttach.class new file mode 100644 index 0000000..97fdbac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityAttach.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityEffect.class new file mode 100644 index 0000000..58206aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityEquipment.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityEquipment.class new file mode 100644 index 0000000..f11fa3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityEquipment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityHeadLook.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityHeadLook.class new file mode 100644 index 0000000..cfb6788 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityHeadLook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityMetadata.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityMetadata.class new file mode 100644 index 0000000..7e19d4d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityMetadata.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityProperties$Snapshot.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityProperties$Snapshot.class new file mode 100644 index 0000000..a2ff246 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityProperties$Snapshot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityProperties.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityProperties.class new file mode 100644 index 0000000..027494e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityProperties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityStatus.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityStatus.class new file mode 100644 index 0000000..bb0c926 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityStatus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityTeleport.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityTeleport.class new file mode 100644 index 0000000..c1401cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityTeleport.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityVelocity.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityVelocity.class new file mode 100644 index 0000000..0a52921 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketEntityVelocity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketExplosion.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketExplosion.class new file mode 100644 index 0000000..3b76aaf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketExplosion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketHeldItemChange.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketHeldItemChange.class new file mode 100644 index 0000000..50a72c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketHeldItemChange.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketJoinGame.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketJoinGame.class new file mode 100644 index 0000000..fe88645 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketJoinGame.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketKeepAlive.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketKeepAlive.class new file mode 100644 index 0000000..c56bc62 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketKeepAlive.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMaps.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMaps.class new file mode 100644 index 0000000..f8a0074 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMaps.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMoveVehicle.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMoveVehicle.class new file mode 100644 index 0000000..935da80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMoveVehicle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData.class new file mode 100644 index 0000000..7754923 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMultiBlockChange$BlockUpdateData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMultiBlockChange.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMultiBlockChange.class new file mode 100644 index 0000000..2f19805 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketMultiBlockChange.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketOpenWindow.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketOpenWindow.class new file mode 100644 index 0000000..6bf9449 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketOpenWindow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketParticles.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketParticles.class new file mode 100644 index 0000000..68cf0b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketParticles.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlaceGhostRecipe.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlaceGhostRecipe.class new file mode 100644 index 0000000..cd241dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlaceGhostRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerAbilities.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerAbilities.class new file mode 100644 index 0000000..4fc97c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerAbilities.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.class new file mode 100644 index 0000000..55d82a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$1.class new file mode 100644 index 0000000..aa23672 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$Action.class new file mode 100644 index 0000000..e22162b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData.class new file mode 100644 index 0000000..7857636 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem$AddPlayerData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem.class new file mode 100644 index 0000000..a061c6c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerListItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags.class new file mode 100644 index 0000000..1dc17ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerPosLook$EnumFlags.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerPosLook.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerPosLook.class new file mode 100644 index 0000000..2d924ee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketPlayerPosLook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRecipeBook$State.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRecipeBook$State.class new file mode 100644 index 0000000..cffb7ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRecipeBook$State.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRecipeBook.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRecipeBook.class new file mode 100644 index 0000000..bdcfd3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRecipeBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRemoveEntityEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRemoveEntityEffect.class new file mode 100644 index 0000000..3f31d68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRemoveEntityEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketResourcePackSend.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketResourcePackSend.class new file mode 100644 index 0000000..1a7ae7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketResourcePackSend.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRespawn.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRespawn.class new file mode 100644 index 0000000..f11bf83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketRespawn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketScoreboardObjective.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketScoreboardObjective.class new file mode 100644 index 0000000..8ec0e8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketScoreboardObjective.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSelectAdvancementsTab.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSelectAdvancementsTab.class new file mode 100644 index 0000000..2204388 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSelectAdvancementsTab.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketServerDifficulty.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketServerDifficulty.class new file mode 100644 index 0000000..a833e9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketServerDifficulty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetExperience.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetExperience.class new file mode 100644 index 0000000..a21ff98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetExperience.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetPassengers.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetPassengers.class new file mode 100644 index 0000000..26b3023 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetPassengers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetSlot.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetSlot.class new file mode 100644 index 0000000..ddff835 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSetSlot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSignEditorOpen.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSignEditorOpen.class new file mode 100644 index 0000000..8cdf54a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSignEditorOpen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSoundEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSoundEffect.class new file mode 100644 index 0000000..320d31c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSoundEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnExperienceOrb.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnExperienceOrb.class new file mode 100644 index 0000000..d795f2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnExperienceOrb.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnGlobalEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnGlobalEntity.class new file mode 100644 index 0000000..45763b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnGlobalEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnMob.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnMob.class new file mode 100644 index 0000000..8428c4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnObject.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnObject.class new file mode 100644 index 0000000..9ac93c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPainting.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPainting.class new file mode 100644 index 0000000..9b0a52b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPainting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPlayer.class new file mode 100644 index 0000000..d5e2a4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPosition.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPosition.class new file mode 100644 index 0000000..0c15124 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketSpawnPosition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketStatistics.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketStatistics.class new file mode 100644 index 0000000..8da4dbc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketStatistics.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTabComplete.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTabComplete.class new file mode 100644 index 0000000..d252842 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTabComplete.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTeams.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTeams.class new file mode 100644 index 0000000..c503b73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTeams.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTimeUpdate.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTimeUpdate.class new file mode 100644 index 0000000..c9989e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTimeUpdate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTitle$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTitle$Type.class new file mode 100644 index 0000000..23d2526 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTitle$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTitle.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTitle.class new file mode 100644 index 0000000..95337aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketTitle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUnloadChunk.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUnloadChunk.class new file mode 100644 index 0000000..3f5fe10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUnloadChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo$1.class new file mode 100644 index 0000000..5a2c9b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation.class new file mode 100644 index 0000000..4ee60cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo$Operation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo.class new file mode 100644 index 0000000..7d375ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateBossInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateHealth.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateHealth.class new file mode 100644 index 0000000..9fb8225 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateHealth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateScore$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateScore$Action.class new file mode 100644 index 0000000..c615514 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateScore$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateScore.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateScore.class new file mode 100644 index 0000000..5a4855c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateScore.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateTileEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateTileEntity.class new file mode 100644 index 0000000..6c17a59 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUpdateTileEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUseBed.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUseBed.class new file mode 100644 index 0000000..b87202a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketUseBed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWindowItems.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWindowItems.class new file mode 100644 index 0000000..2f1713b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWindowItems.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWindowProperty.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWindowProperty.class new file mode 100644 index 0000000..58db51d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWindowProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder$1.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder$1.class new file mode 100644 index 0000000..6a60ef6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder$Action.class new file mode 100644 index 0000000..153580c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder.class new file mode 100644 index 0000000..4070638 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/SPacketWorldBorder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/package-info.class new file mode 100644 index 0000000..e384237 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/play/server/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/IServer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/IServer.class new file mode 100644 index 0000000..ef4d953 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/IServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConConsoleSource.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConConsoleSource.class new file mode 100644 index 0000000..3654e56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConConsoleSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConOutputStream.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConOutputStream.class new file mode 100644 index 0000000..8f24fa8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConOutputStream.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadBase.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadBase.class new file mode 100644 index 0000000..c9e5a30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadClient.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadClient.class new file mode 100644 index 0000000..9f768ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadMain.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadMain.class new file mode 100644 index 0000000..1674f5a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadMain.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadQuery$Auth.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadQuery$Auth.class new file mode 100644 index 0000000..edf9d2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadQuery$Auth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadQuery.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadQuery.class new file mode 100644 index 0000000..94cc44a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConThreadQuery.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConUtils.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConUtils.class new file mode 100644 index 0000000..5dc683a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/RConUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/package-info.class new file mode 100644 index 0000000..ecee0ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/rcon/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/INetHandlerStatusClient.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/INetHandlerStatusClient.class new file mode 100644 index 0000000..2dd283b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/INetHandlerStatusClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/INetHandlerStatusServer.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/INetHandlerStatusServer.class new file mode 100644 index 0000000..ce6a90c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/INetHandlerStatusServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/CPacketPing.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/CPacketPing.class new file mode 100644 index 0000000..c85520c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/CPacketPing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/CPacketServerQuery.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/CPacketServerQuery.class new file mode 100644 index 0000000..9252094 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/CPacketServerQuery.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/package-info.class new file mode 100644 index 0000000..6294f15 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/client/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/package-info.class new file mode 100644 index 0000000..c8aab43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/SPacketPong.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/SPacketPong.class new file mode 100644 index 0000000..dc3b51d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/SPacketPong.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/SPacketServerInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/SPacketServerInfo.class new file mode 100644 index 0000000..291f869 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/SPacketServerInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/package-info.class new file mode 100644 index 0000000..41312c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/network/status/server/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/FlyingNodeProcessor.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/FlyingNodeProcessor.class new file mode 100644 index 0000000..5f3cc27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/FlyingNodeProcessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/NodeProcessor.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/NodeProcessor.class new file mode 100644 index 0000000..0120a00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/NodeProcessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/Path.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/Path.class new file mode 100644 index 0000000..f47e69a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/Path.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathFinder.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathFinder.class new file mode 100644 index 0000000..c096894 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathFinder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathHeap.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathHeap.class new file mode 100644 index 0000000..1008ee0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathHeap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigate.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigate.class new file mode 100644 index 0000000..49a5df2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateClimber.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateClimber.class new file mode 100644 index 0000000..b6c3d70 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateClimber.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateFlying.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateFlying.class new file mode 100644 index 0000000..a9e16f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateFlying.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateGround.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateGround.class new file mode 100644 index 0000000..cc8eaad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateGround.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateSwimmer.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateSwimmer.class new file mode 100644 index 0000000..d842bcf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNavigateSwimmer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNodeType.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNodeType.class new file mode 100644 index 0000000..d9c6f01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathNodeType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathPoint.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathPoint.class new file mode 100644 index 0000000..0ae11c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathPoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathWorldListener.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathWorldListener.class new file mode 100644 index 0000000..1443cf8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/PathWorldListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/SwimNodeProcessor.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/SwimNodeProcessor.class new file mode 100644 index 0000000..05cbbab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/SwimNodeProcessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/WalkNodeProcessor.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/WalkNodeProcessor.class new file mode 100644 index 0000000..629c8af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/WalkNodeProcessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/package-info.class new file mode 100644 index 0000000..c66ecd2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/pathfinding/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/Potion.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/Potion.class new file mode 100644 index 0000000..949a000 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/Potion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionAbsorption.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionAbsorption.class new file mode 100644 index 0000000..776af16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionAbsorption.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionAttackDamage.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionAttackDamage.class new file mode 100644 index 0000000..ae1512d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionAttackDamage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionEffect.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionEffect.class new file mode 100644 index 0000000..f96551f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionEffect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHealth.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHealth.class new file mode 100644 index 0000000..f46d435 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHealth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHealthBoost.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHealthBoost.class new file mode 100644 index 0000000..f4f6c15 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHealthBoost.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper$1.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper$1.class new file mode 100644 index 0000000..f9dbc5b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper$MixPredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper$MixPredicate.class new file mode 100644 index 0000000..7a9240e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper$MixPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper.class new file mode 100644 index 0000000..f8f128e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionType.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionType.class new file mode 100644 index 0000000..0edc52c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionUtils.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionUtils.class new file mode 100644 index 0000000..621b4a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/PotionUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/potion/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/potion/package-info.class new file mode 100644 index 0000000..7b993e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/potion/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/profiler/ISnooperInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/profiler/ISnooperInfo.class new file mode 100644 index 0000000..3d58ec8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/profiler/ISnooperInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/profiler/Profiler$Result.class b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Profiler$Result.class new file mode 100644 index 0000000..93cb6c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Profiler$Result.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/profiler/Profiler.class b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Profiler.class new file mode 100644 index 0000000..bd9e8a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Profiler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/profiler/Snooper$1.class b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Snooper$1.class new file mode 100644 index 0000000..56ba937 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Snooper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/profiler/Snooper.class b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Snooper.class new file mode 100644 index 0000000..7e60203 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/profiler/Snooper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/profiler/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/profiler/package-info.class new file mode 100644 index 0000000..f0e75ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/profiler/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/DisconnectedRealmsScreen.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/DisconnectedRealmsScreen.class new file mode 100644 index 0000000..f205e37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/DisconnectedRealmsScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/Realms.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/Realms.class new file mode 100644 index 0000000..c29602d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/Realms.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsAnvilLevelStorageSource.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsAnvilLevelStorageSource.class new file mode 100644 index 0000000..6c73ffe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsAnvilLevelStorageSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsBridge.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsBridge.class new file mode 100644 index 0000000..a509c08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsBridge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsBufferBuilder.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsBufferBuilder.class new file mode 100644 index 0000000..eba52fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsBufferBuilder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsButton.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsButton.class new file mode 100644 index 0000000..41fa96d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsClickableScrolledSelectionList.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsClickableScrolledSelectionList.class new file mode 100644 index 0000000..c694457 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsClickableScrolledSelectionList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsConnect$1.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsConnect$1.class new file mode 100644 index 0000000..733157f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsConnect$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsConnect.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsConnect.class new file mode 100644 index 0000000..ab8cf79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsConnect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsDefaultVertexFormat.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsDefaultVertexFormat.class new file mode 100644 index 0000000..d87a296 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsDefaultVertexFormat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsEditBox.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsEditBox.class new file mode 100644 index 0000000..91d3f61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsEditBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsLevelSummary.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsLevelSummary.class new file mode 100644 index 0000000..99afc88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsLevelSummary.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsMth.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsMth.class new file mode 100644 index 0000000..36202d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsMth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsScreen.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsScreen.class new file mode 100644 index 0000000..73aab48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsScrolledSelectionList.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsScrolledSelectionList.class new file mode 100644 index 0000000..9d2a647 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsScrolledSelectionList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsServerAddress.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsServerAddress.class new file mode 100644 index 0000000..02b567d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsServerAddress.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSharedConstants.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSharedConstants.class new file mode 100644 index 0000000..749b66e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSharedConstants.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSimpleScrolledSelectionList.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSimpleScrolledSelectionList.class new file mode 100644 index 0000000..0326978 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSimpleScrolledSelectionList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSliderButton.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSliderButton.class new file mode 100644 index 0000000..e38ac45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsSliderButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsVertexFormat.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsVertexFormat.class new file mode 100644 index 0000000..a259e2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsVertexFormat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsVertexFormatElement.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsVertexFormatElement.class new file mode 100644 index 0000000..1192d78 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/RealmsVertexFormatElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/Tezzelator.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/Tezzelator.class new file mode 100644 index 0000000..8cbbe35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/Tezzelator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/realms/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/realms/package-info.class new file mode 100644 index 0000000..67d5af7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/realms/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/IScoreCriteria$EnumRenderType.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/IScoreCriteria$EnumRenderType.class new file mode 100644 index 0000000..ef51acd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/IScoreCriteria$EnumRenderType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/IScoreCriteria.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/IScoreCriteria.class new file mode 100644 index 0000000..b969594 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/IScoreCriteria.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Score$1.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Score$1.class new file mode 100644 index 0000000..54083b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Score$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Score.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Score.class new file mode 100644 index 0000000..9d186ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Score.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteria.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteria.class new file mode 100644 index 0000000..79cda6d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteria.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaColored.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaColored.class new file mode 100644 index 0000000..d5c3f44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaColored.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaHealth.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaHealth.class new file mode 100644 index 0000000..62048b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaHealth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaReadOnly.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaReadOnly.class new file mode 100644 index 0000000..b50df05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaReadOnly.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaStat.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaStat.class new file mode 100644 index 0000000..292372a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreCriteriaStat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreObjective.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreObjective.class new file mode 100644 index 0000000..f101475 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreObjective.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScorePlayerTeam.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScorePlayerTeam.class new file mode 100644 index 0000000..b4f170d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScorePlayerTeam.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Scoreboard.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Scoreboard.class new file mode 100644 index 0000000..b654a03 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Scoreboard.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreboardSaveData.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreboardSaveData.class new file mode 100644 index 0000000..c7989c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ScoreboardSaveData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ServerScoreboard.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ServerScoreboard.class new file mode 100644 index 0000000..089bb72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/ServerScoreboard.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team$CollisionRule.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team$CollisionRule.class new file mode 100644 index 0000000..97800ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team$CollisionRule.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team$EnumVisible.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team$EnumVisible.class new file mode 100644 index 0000000..2e7b51d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team$EnumVisible.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team.class new file mode 100644 index 0000000..0a68cfb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/Team.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/package-info.class new file mode 100644 index 0000000..0c788c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/scoreboard/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/DebugLoggingPrintStream.class b/build/tmp/recompileMc/compiled/net/minecraft/server/DebugLoggingPrintStream.class new file mode 100644 index 0000000..30326cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/DebugLoggingPrintStream.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$1.class new file mode 100644 index 0000000..5ba8758 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$2.class new file mode 100644 index 0000000..907d092 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$3.class b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$3.class new file mode 100644 index 0000000..34848ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$4.class b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$4.class new file mode 100644 index 0000000..e0f0f89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer.class new file mode 100644 index 0000000..b3d92bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/MinecraftServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/ServerEula.class b/build/tmp/recompileMc/compiled/net/minecraft/server/ServerEula.class new file mode 100644 index 0000000..79e8ddd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/ServerEula.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedPlayerList.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedPlayerList.class new file mode 100644 index 0000000..fd669bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedPlayerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$1.class new file mode 100644 index 0000000..adfcb0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$2.class new file mode 100644 index 0000000..2e77a2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$3.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$3.class new file mode 100644 index 0000000..a1a1b73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$4.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$4.class new file mode 100644 index 0000000..8b4ccfa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer.class new file mode 100644 index 0000000..08d0884 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/DedicatedServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/PendingCommand.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/PendingCommand.class new file mode 100644 index 0000000..007a4b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/PendingCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/PropertyManager.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/PropertyManager.class new file mode 100644 index 0000000..15e300d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/PropertyManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/ServerHangWatchdog$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/ServerHangWatchdog$1.class new file mode 100644 index 0000000..4b16c1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/ServerHangWatchdog$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/ServerHangWatchdog.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/ServerHangWatchdog.class new file mode 100644 index 0000000..98f60ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/ServerHangWatchdog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/package-info.class new file mode 100644 index 0000000..5cc22f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/dedicated/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$1.class new file mode 100644 index 0000000..ecef6be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$2.class new file mode 100644 index 0000000..e622e5d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$3.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$3.class new file mode 100644 index 0000000..4e88aa7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$4.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$4.class new file mode 100644 index 0000000..81d56bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$5.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$5.class new file mode 100644 index 0000000..ee05e51 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui.class new file mode 100644 index 0000000..dc67c45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/MinecraftServerGui.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/PlayerListComponent.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/PlayerListComponent.class new file mode 100644 index 0000000..69b1026 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/PlayerListComponent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/StatsComponent$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/StatsComponent$1.class new file mode 100644 index 0000000..1e99dff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/StatsComponent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/StatsComponent.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/StatsComponent.class new file mode 100644 index 0000000..5798201 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/StatsComponent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/gui/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/package-info.class new file mode 100644 index 0000000..90a0188 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/gui/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedPlayerList.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedPlayerList.class new file mode 100644 index 0000000..115eff6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedPlayerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$1.class new file mode 100644 index 0000000..defd1c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$2.class new file mode 100644 index 0000000..ce2b244 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$3.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$3.class new file mode 100644 index 0000000..d28b3b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer.class new file mode 100644 index 0000000..d31059f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServerCommandManager.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServerCommandManager.class new file mode 100644 index 0000000..812bc29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/IntegratedServerCommandManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/package-info.class new file mode 100644 index 0000000..bc06758 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/integrated/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/DemoPlayerInteractionManager.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/DemoPlayerInteractionManager.class new file mode 100644 index 0000000..15fbe34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/DemoPlayerInteractionManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$1.class new file mode 100644 index 0000000..9500649 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$2.class new file mode 100644 index 0000000..4df9b4d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$3.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$3.class new file mode 100644 index 0000000..7543ae2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$4.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$4.class new file mode 100644 index 0000000..b9925d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$5.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$5.class new file mode 100644 index 0000000..d98eea0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap.class new file mode 100644 index 0000000..b78aac7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMapEntry$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMapEntry$1.class new file mode 100644 index 0000000..949b6f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMapEntry$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMapEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMapEntry.class new file mode 100644 index 0000000..5d17ef7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerChunkMapEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerInteractionManager.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerInteractionManager.class new file mode 100644 index 0000000..531b6f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerInteractionManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerList$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerList$1.class new file mode 100644 index 0000000..46ae13f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerList$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerList.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerList.class new file mode 100644 index 0000000..d1d39ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$1.class new file mode 100644 index 0000000..91206f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$2.class new file mode 100644 index 0000000..e56a58f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$ProfileEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$ProfileEntry.class new file mode 100644 index 0000000..cf41327 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$ProfileEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$Serializer.class new file mode 100644 index 0000000..f575e58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache.class new file mode 100644 index 0000000..0193be1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PlayerProfileCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$1.class new file mode 100644 index 0000000..de5296e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$2.class new file mode 100644 index 0000000..bba062b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$3.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$3.class new file mode 100644 index 0000000..ad85daa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$4.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$4.class new file mode 100644 index 0000000..99a54f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$5.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$5.class new file mode 100644 index 0000000..1751d65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$6.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$6.class new file mode 100644 index 0000000..3a16a97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$ConversionError.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$ConversionError.class new file mode 100644 index 0000000..848616e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter$ConversionError.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter.class new file mode 100644 index 0000000..76d0f55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/PreYggdrasilConverter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList$1.class new file mode 100644 index 0000000..bec0fec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList$Serializer.class new file mode 100644 index 0000000..f2ef08a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList.class new file mode 100644 index 0000000..dd646f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListBans.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListBans.class new file mode 100644 index 0000000..22bc0e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListBans.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListBansEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListBansEntry.class new file mode 100644 index 0000000..2392f61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListBansEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListEntry.class new file mode 100644 index 0000000..bf21a28 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListEntryBan.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListEntryBan.class new file mode 100644 index 0000000..d500a5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListEntryBan.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListIPBans.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListIPBans.class new file mode 100644 index 0000000..b376478 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListIPBans.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListIPBansEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListIPBansEntry.class new file mode 100644 index 0000000..b1b4021 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListIPBansEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListOps.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListOps.class new file mode 100644 index 0000000..3087952 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListOps.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListOpsEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListOpsEntry.class new file mode 100644 index 0000000..c90f66a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListOpsEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListWhitelist.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListWhitelist.class new file mode 100644 index 0000000..b924c9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListWhitelist.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListWhitelistEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListWhitelistEntry.class new file mode 100644 index 0000000..549e46d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/UserListWhitelistEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/management/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/server/management/package-info.class new file mode 100644 index 0000000..73ac51e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/management/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerHandshakeTCP$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerHandshakeTCP$1.class new file mode 100644 index 0000000..6a6f19f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerHandshakeTCP$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerHandshakeTCP.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerHandshakeTCP.class new file mode 100644 index 0000000..6514d0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerHandshakeTCP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$1.class new file mode 100644 index 0000000..cb4e41e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$2.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$2.class new file mode 100644 index 0000000..86d33da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$LoginState.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$LoginState.class new file mode 100644 index 0000000..baf06c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer$LoginState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer.class new file mode 100644 index 0000000..874ffa0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerLoginServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerStatusServer.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerStatusServer.class new file mode 100644 index 0000000..e885a9d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/NetHandlerStatusServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/network/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/server/network/package-info.class new file mode 100644 index 0000000..f70e743 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/network/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/server/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/server/package-info.class new file mode 100644 index 0000000..1996789 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/server/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/IStatType.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/IStatType.class new file mode 100644 index 0000000..cb233a7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/IStatType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/RecipeBook.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/RecipeBook.class new file mode 100644 index 0000000..ab9b62f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/RecipeBook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/RecipeBookServer.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/RecipeBookServer.class new file mode 100644 index 0000000..9d54914 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/RecipeBookServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$1.class new file mode 100644 index 0000000..b8dc828 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$2.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$2.class new file mode 100644 index 0000000..d90d61c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$3.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$3.class new file mode 100644 index 0000000..040286d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$4.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$4.class new file mode 100644 index 0000000..7373b9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase.class new file mode 100644 index 0000000..39d8276 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBasic.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBasic.class new file mode 100644 index 0000000..bc45a05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatBasic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatCrafting.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatCrafting.class new file mode 100644 index 0000000..4ed4eb5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatCrafting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatList.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatList.class new file mode 100644 index 0000000..371ea4e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatisticsManager.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatisticsManager.class new file mode 100644 index 0000000..3b91214 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatisticsManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/StatisticsManagerServer.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatisticsManagerServer.class new file mode 100644 index 0000000..3fd6a3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/StatisticsManagerServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/stats/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/stats/package-info.class new file mode 100644 index 0000000..2d8f072 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/stats/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/BannerPattern.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/BannerPattern.class new file mode 100644 index 0000000..32b6789 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/BannerPattern.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic$1.class new file mode 100644 index 0000000..4c4d861 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic$2.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic$2.class new file mode 100644 index 0000000..a0d83b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic.class new file mode 100644 index 0000000..4ecb345 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/CommandBlockBaseLogic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/IHopper.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/IHopper.class new file mode 100644 index 0000000..8fa77d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/IHopper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/MobSpawnerBaseLogic.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/MobSpawnerBaseLogic.class new file mode 100644 index 0000000..67b5d0a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/MobSpawnerBaseLogic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$1.class new file mode 100644 index 0000000..2d82822 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$2.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$2.class new file mode 100644 index 0000000..5673707 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$3.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$3.class new file mode 100644 index 0000000..6376a0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity.class new file mode 100644 index 0000000..695ea33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBanner.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBanner.class new file mode 100644 index 0000000..6936edb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBanner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBeacon$BeamSegment.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBeacon$BeamSegment.class new file mode 100644 index 0000000..4537552 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBeacon$BeamSegment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBeacon.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBeacon.class new file mode 100644 index 0000000..4b0a2ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBeacon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBed.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBed.class new file mode 100644 index 0000000..f9330f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBrewingStand.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBrewingStand.class new file mode 100644 index 0000000..da49e02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityBrewingStand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityChest$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityChest$1.class new file mode 100644 index 0000000..2c085f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityChest$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityChest.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityChest.class new file mode 100644 index 0000000..8f84eb1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock$1.class new file mode 100644 index 0000000..2d9cb0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock$Mode.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock$Mode.class new file mode 100644 index 0000000..49ab312 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock$Mode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock.class new file mode 100644 index 0000000..4f5d2a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityCommandBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityComparator.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityComparator.class new file mode 100644 index 0000000..b2a819d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDaylightDetector.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDaylightDetector.class new file mode 100644 index 0000000..8603141 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDaylightDetector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDispenser.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDispenser.class new file mode 100644 index 0000000..cc263e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDispenser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDropper.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDropper.class new file mode 100644 index 0000000..aed3fb5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityDropper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEnchantmentTable.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEnchantmentTable.class new file mode 100644 index 0000000..95c098f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEnchantmentTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEndGateway.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEndGateway.class new file mode 100644 index 0000000..835a994 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEndGateway.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEndPortal.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEndPortal.class new file mode 100644 index 0000000..00b88a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEndPortal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEnderChest.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEnderChest.class new file mode 100644 index 0000000..d48dfae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityEnderChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityFlowerPot.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityFlowerPot.class new file mode 100644 index 0000000..ec58392 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityFlowerPot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityFurnace.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityFurnace.class new file mode 100644 index 0000000..a0caf8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityFurnace.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityHopper.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityHopper.class new file mode 100644 index 0000000..f745572 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityHopper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityLockable.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityLockable.class new file mode 100644 index 0000000..6f8cb07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityLockable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityLockableLoot.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityLockableLoot.class new file mode 100644 index 0000000..fa09c70 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityLockableLoot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner$1.class new file mode 100644 index 0000000..505bf83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner$2.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner$2.class new file mode 100644 index 0000000..4c730ce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner.class new file mode 100644 index 0000000..a502547 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityMobSpawner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityNote.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityNote.class new file mode 100644 index 0000000..8ab7118 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityNote.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston$1.class new file mode 100644 index 0000000..5d75b0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston$2.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston$2.class new file mode 100644 index 0000000..a1a2495 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston.class new file mode 100644 index 0000000..8d84ac2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityPiston.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox$1.class new file mode 100644 index 0000000..648ae4c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus.class new file mode 100644 index 0000000..5b0a4e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox$AnimationStatus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox.class new file mode 100644 index 0000000..08f7ed5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityShulkerBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign$1.class new file mode 100644 index 0000000..a8e4e66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign$2.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign$2.class new file mode 100644 index 0000000..1209d86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign.class new file mode 100644 index 0000000..37b3af3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySign.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySkull.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySkull.class new file mode 100644 index 0000000..51c0997 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntitySkull.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$1.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$1.class new file mode 100644 index 0000000..e8c21c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$2.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$2.class new file mode 100644 index 0000000..6cd8b68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$Mode.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$Mode.class new file mode 100644 index 0000000..ee96737 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure$Mode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure.class new file mode 100644 index 0000000..ce852bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/TileEntityStructure.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/tileentity/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/package-info.class new file mode 100644 index 0000000..54e498f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/tileentity/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ActionResult.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ActionResult.class new file mode 100644 index 0000000..d82c7e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ActionResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/BitArray.class b/build/tmp/recompileMc/compiled/net/minecraft/util/BitArray.class new file mode 100644 index 0000000..4751f04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/BitArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/BlockRenderLayer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/BlockRenderLayer.class new file mode 100644 index 0000000..81f438b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/BlockRenderLayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ChatAllowedCharacters.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ChatAllowedCharacters.class new file mode 100644 index 0000000..7b80231 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ChatAllowedCharacters.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ClassInheritanceMultiMap$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ClassInheritanceMultiMap$1.class new file mode 100644 index 0000000..0ea5e56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ClassInheritanceMultiMap$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ClassInheritanceMultiMap.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ClassInheritanceMultiMap.class new file mode 100644 index 0000000..5833b16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ClassInheritanceMultiMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CombatEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CombatEntry.class new file mode 100644 index 0000000..4bc5b98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CombatEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CombatRules.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CombatRules.class new file mode 100644 index 0000000..16569b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CombatRules.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CombatTracker.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CombatTracker.class new file mode 100644 index 0000000..300de45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CombatTracker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker$1.class new file mode 100644 index 0000000..e4db066 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker$Cooldown.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker$Cooldown.class new file mode 100644 index 0000000..61135b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker$Cooldown.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker.class new file mode 100644 index 0000000..fc2c9de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTracker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTrackerServer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTrackerServer.class new file mode 100644 index 0000000..58ffa66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CooldownTrackerServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/CryptManager.class b/build/tmp/recompileMc/compiled/net/minecraft/util/CryptManager.class new file mode 100644 index 0000000..7228576 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/CryptManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/DamageSource.class b/build/tmp/recompileMc/compiled/net/minecraft/util/DamageSource.class new file mode 100644 index 0000000..86ab126 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/DamageSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnchantmentNameParts.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnchantmentNameParts.class new file mode 100644 index 0000000..ad89274 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnchantmentNameParts.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntityDamageSource.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntityDamageSource.class new file mode 100644 index 0000000..49788e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntityDamageSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntityDamageSourceIndirect.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntityDamageSourceIndirect.class new file mode 100644 index 0000000..affeb9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntityDamageSourceIndirect.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$1.class new file mode 100644 index 0000000..4155dde Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$2.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$2.class new file mode 100644 index 0000000..b893126 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$3.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$3.class new file mode 100644 index 0000000..dd8bdc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$4.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$4.class new file mode 100644 index 0000000..76e646f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$5.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$5.class new file mode 100644 index 0000000..f7b9e01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$6.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$6.class new file mode 100644 index 0000000..0a8ecc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$7.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$7.class new file mode 100644 index 0000000..de398d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$8.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$8.class new file mode 100644 index 0000000..c5ad9a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$ArmoredMob.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$ArmoredMob.class new file mode 100644 index 0000000..5e396bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors$ArmoredMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors.class new file mode 100644 index 0000000..7c695d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EntitySelectors.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumActionResult.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumActionResult.class new file mode 100644 index 0000000..3d4ed0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumActionResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumBlockRenderType.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumBlockRenderType.class new file mode 100644 index 0000000..c23106b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumBlockRenderType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$1.class new file mode 100644 index 0000000..696651d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$Axis.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$Axis.class new file mode 100644 index 0000000..5286457 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$Axis.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$AxisDirection.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$AxisDirection.class new file mode 100644 index 0000000..60b4f90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$AxisDirection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$Plane.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$Plane.class new file mode 100644 index 0000000..f04455c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing$Plane.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing.class new file mode 100644 index 0000000..e1d0ef7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumFacing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumHand.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumHand.class new file mode 100644 index 0000000..a6bc703 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumHand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumHandSide.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumHandSide.class new file mode 100644 index 0000000..e4706e6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumHandSide.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumParticleTypes.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumParticleTypes.class new file mode 100644 index 0000000..eda4590 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumParticleTypes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumTypeAdapterFactory$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumTypeAdapterFactory$1.class new file mode 100644 index 0000000..8307e0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumTypeAdapterFactory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/EnumTypeAdapterFactory.class b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumTypeAdapterFactory.class new file mode 100644 index 0000000..e586454 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/EnumTypeAdapterFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/FoodStats.class b/build/tmp/recompileMc/compiled/net/minecraft/util/FoodStats.class new file mode 100644 index 0000000..9b09d55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/FoodStats.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/FrameTimer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/FrameTimer.class new file mode 100644 index 0000000..1795ae5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/FrameTimer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/HttpUtil$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/HttpUtil$1.class new file mode 100644 index 0000000..de691be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/HttpUtil$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/HttpUtil.class b/build/tmp/recompileMc/compiled/net/minecraft/util/HttpUtil.class new file mode 100644 index 0000000..95bf030 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/HttpUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IJsonSerializable.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IJsonSerializable.class new file mode 100644 index 0000000..bb2bc93 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IJsonSerializable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IObjectIntIterable.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IObjectIntIterable.class new file mode 100644 index 0000000..30a2231 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IObjectIntIterable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IProgressUpdate.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IProgressUpdate.class new file mode 100644 index 0000000..7b700c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IProgressUpdate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IStringSerializable.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IStringSerializable.class new file mode 100644 index 0000000..d061a04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IStringSerializable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ITabCompleter.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ITabCompleter.class new file mode 100644 index 0000000..73e6540 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ITabCompleter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IThreadListener.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IThreadListener.class new file mode 100644 index 0000000..09cf712 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IThreadListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ITickable.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ITickable.class new file mode 100644 index 0000000..c4a0d4b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ITickable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IntHashMap$Entry.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IntHashMap$Entry.class new file mode 100644 index 0000000..6d280fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IntHashMap$Entry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IntHashMap.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IntHashMap.class new file mode 100644 index 0000000..629d601 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IntHashMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IntIdentityHashBiMap.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IntIdentityHashBiMap.class new file mode 100644 index 0000000..7108a45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IntIdentityHashBiMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/IntegerCache.class b/build/tmp/recompileMc/compiled/net/minecraft/util/IntegerCache.class new file mode 100644 index 0000000..d036c80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/IntegerCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/JsonUtils.class b/build/tmp/recompileMc/compiled/net/minecraft/util/JsonUtils.class new file mode 100644 index 0000000..0adbc55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/JsonUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/LazyLoadBase.class b/build/tmp/recompileMc/compiled/net/minecraft/util/LazyLoadBase.class new file mode 100644 index 0000000..ea6cbb7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/LazyLoadBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/LoggingPrintStream.class b/build/tmp/recompileMc/compiled/net/minecraft/util/LoggingPrintStream.class new file mode 100644 index 0000000..3f1a019 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/LoggingPrintStream.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/LowerStringMap.class b/build/tmp/recompileMc/compiled/net/minecraft/util/LowerStringMap.class new file mode 100644 index 0000000..79b4c13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/LowerStringMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/MapPopulator.class b/build/tmp/recompileMc/compiled/net/minecraft/util/MapPopulator.class new file mode 100644 index 0000000..1a59dd9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/MapPopulator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/MinecraftError.class b/build/tmp/recompileMc/compiled/net/minecraft/util/MinecraftError.class new file mode 100644 index 0000000..0461331 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/MinecraftError.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Mirror$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Mirror$1.class new file mode 100644 index 0000000..6a44208 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Mirror$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Mirror.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Mirror.class new file mode 100644 index 0000000..9a89246 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Mirror.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/MouseFilter.class b/build/tmp/recompileMc/compiled/net/minecraft/util/MouseFilter.class new file mode 100644 index 0000000..0047c89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/MouseFilter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/MouseHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/util/MouseHelper.class new file mode 100644 index 0000000..ffb6305 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/MouseHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/MovementInput.class b/build/tmp/recompileMc/compiled/net/minecraft/util/MovementInput.class new file mode 100644 index 0000000..73e0576 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/MovementInput.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/MovementInputFromOptions.class b/build/tmp/recompileMc/compiled/net/minecraft/util/MovementInputFromOptions.class new file mode 100644 index 0000000..02ea389 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/MovementInputFromOptions.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/NonNullList.class b/build/tmp/recompileMc/compiled/net/minecraft/util/NonNullList.class new file mode 100644 index 0000000..1c1a8c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/NonNullList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ObjectIntIdentityMap.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ObjectIntIdentityMap.class new file mode 100644 index 0000000..6a34019 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ObjectIntIdentityMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ReportedException.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ReportedException.class new file mode 100644 index 0000000..47f61e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ReportedException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ResourceLocation$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ResourceLocation$Serializer.class new file mode 100644 index 0000000..5e19598 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ResourceLocation$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ResourceLocation.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ResourceLocation.class new file mode 100644 index 0000000..e9c25ee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ResourceLocation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Rotation$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Rotation$1.class new file mode 100644 index 0000000..47296e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Rotation$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Rotation.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Rotation.class new file mode 100644 index 0000000..a4005af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Rotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ScreenShotHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ScreenShotHelper.class new file mode 100644 index 0000000..937cdb7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ScreenShotHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/ServerRecipeBookHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/util/ServerRecipeBookHelper.class new file mode 100644 index 0000000..9729f90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/ServerRecipeBookHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Session$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Session$Type.class new file mode 100644 index 0000000..ce00e04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Session$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Session.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Session.class new file mode 100644 index 0000000..1b2ae5b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Session.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/SoundCategory.class b/build/tmp/recompileMc/compiled/net/minecraft/util/SoundCategory.class new file mode 100644 index 0000000..eec477c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/SoundCategory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/SoundEvent.class b/build/tmp/recompileMc/compiled/net/minecraft/util/SoundEvent.class new file mode 100644 index 0000000..2f49bdd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/SoundEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/StringUtils.class b/build/tmp/recompileMc/compiled/net/minecraft/util/StringUtils.class new file mode 100644 index 0000000..9de0cd2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/StringUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/TabCompleter.class b/build/tmp/recompileMc/compiled/net/minecraft/util/TabCompleter.class new file mode 100644 index 0000000..fbb2f88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/TabCompleter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Timer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Timer.class new file mode 100644 index 0000000..097d4aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Timer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Tuple.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Tuple.class new file mode 100644 index 0000000..4fe556c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Tuple.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/TupleIntJsonSerializable.class b/build/tmp/recompileMc/compiled/net/minecraft/util/TupleIntJsonSerializable.class new file mode 100644 index 0000000..315532c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/TupleIntJsonSerializable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Util$EnumOS.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Util$EnumOS.class new file mode 100644 index 0000000..3656445 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Util$EnumOS.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/Util.class b/build/tmp/recompileMc/compiled/net/minecraft/util/Util.class new file mode 100644 index 0000000..fa1530d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/Util.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedRandom$Item.class b/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedRandom$Item.class new file mode 100644 index 0000000..2d5d66a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedRandom$Item.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedRandom.class b/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedRandom.class new file mode 100644 index 0000000..10cecfb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedRandom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedSpawnerEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedSpawnerEntity.class new file mode 100644 index 0000000..476d7d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/WeightedSpawnerEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/DataFixer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/DataFixer.class new file mode 100644 index 0000000..e650b18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/DataFixer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/DataFixesManager.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/DataFixesManager.class new file mode 100644 index 0000000..3a3a3cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/DataFixesManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/FixTypes.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/FixTypes.class new file mode 100644 index 0000000..8a563d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/FixTypes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IDataFixer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IDataFixer.class new file mode 100644 index 0000000..b1b3cba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IDataFixer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IDataWalker.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IDataWalker.class new file mode 100644 index 0000000..d666578 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IDataWalker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IFixType.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IFixType.class new file mode 100644 index 0000000..c1fea9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IFixType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IFixableData.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IFixableData.class new file mode 100644 index 0000000..265f719 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/IFixableData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/AddBedTileEntity.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/AddBedTileEntity.class new file mode 100644 index 0000000..a26a44e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/AddBedTileEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ArmorStandSilent.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ArmorStandSilent.class new file mode 100644 index 0000000..3032ae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ArmorStandSilent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BannerItemColor.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BannerItemColor.class new file mode 100644 index 0000000..5eb3285 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BannerItemColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BedItemColor.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BedItemColor.class new file mode 100644 index 0000000..2bc4528 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BedItemColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BookPagesStrictJSON.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BookPagesStrictJSON.class new file mode 100644 index 0000000..b41df4d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/BookPagesStrictJSON.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/CookedFishIDTypo.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/CookedFishIDTypo.class new file mode 100644 index 0000000..138c28f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/CookedFishIDTypo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ElderGuardianSplit.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ElderGuardianSplit.class new file mode 100644 index 0000000..6aac0db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ElderGuardianSplit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityArmorAndHeld.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityArmorAndHeld.class new file mode 100644 index 0000000..1781fdc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityArmorAndHeld.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityHealth.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityHealth.class new file mode 100644 index 0000000..00eb07b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityHealth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityId.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityId.class new file mode 100644 index 0000000..6081515 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/EntityId.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ForceVBOOn.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ForceVBOOn.class new file mode 100644 index 0000000..c0fd9fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ForceVBOOn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/HorseSaddle.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/HorseSaddle.class new file mode 100644 index 0000000..379b1b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/HorseSaddle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/HorseSplit.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/HorseSplit.class new file mode 100644 index 0000000..2f5a7b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/HorseSplit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ItemIntIDToString.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ItemIntIDToString.class new file mode 100644 index 0000000..5e8e802 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ItemIntIDToString.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/MinecartEntityTypes.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/MinecartEntityTypes.class new file mode 100644 index 0000000..cab22c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/MinecartEntityTypes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.class new file mode 100644 index 0000000..05c4068 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PaintingDirection.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PaintingDirection.class new file mode 100644 index 0000000..e9fb2ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PaintingDirection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PotionItems.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PotionItems.class new file mode 100644 index 0000000..9b4c200 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PotionItems.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PotionWater.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PotionWater.class new file mode 100644 index 0000000..37fa23a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/PotionWater.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/RedundantChanceTags.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/RedundantChanceTags.class new file mode 100644 index 0000000..88b9528 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/RedundantChanceTags.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/RidingToPassengers.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/RidingToPassengers.class new file mode 100644 index 0000000..3ac7631 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/RidingToPassengers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.class new file mode 100644 index 0000000..916b85f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.class new file mode 100644 index 0000000..81e2183 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.class new file mode 100644 index 0000000..090039e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SignStrictJSON$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SignStrictJSON$1.class new file mode 100644 index 0000000..7c10f65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SignStrictJSON$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SignStrictJSON.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SignStrictJSON.class new file mode 100644 index 0000000..a08713a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SignStrictJSON.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SkeletonSplit.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SkeletonSplit.class new file mode 100644 index 0000000..c85901d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SkeletonSplit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SpawnEggNames.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SpawnEggNames.class new file mode 100644 index 0000000..83b5392 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SpawnEggNames.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SpawnerEntityTypes.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SpawnerEntityTypes.class new file mode 100644 index 0000000..25cb0f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/SpawnerEntityTypes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/StringToUUID.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/StringToUUID.class new file mode 100644 index 0000000..5cdcbce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/StringToUUID.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/TileEntityId.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/TileEntityId.class new file mode 100644 index 0000000..605c3f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/TileEntityId.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/TotemItemRename.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/TotemItemRename.class new file mode 100644 index 0000000..a09d1c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/TotemItemRename.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ZombieProfToType.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ZombieProfToType.class new file mode 100644 index 0000000..ba6b567 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ZombieProfToType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ZombieSplit.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ZombieSplit.class new file mode 100644 index 0000000..e6d7997 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/ZombieSplit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/package-info.class new file mode 100644 index 0000000..429136a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/fixes/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/package-info.class new file mode 100644 index 0000000..2fbfdf2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/BlockEntityTag.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/BlockEntityTag.class new file mode 100644 index 0000000..d551466 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/BlockEntityTag.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/EntityTag.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/EntityTag.class new file mode 100644 index 0000000..797b537 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/EntityTag.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/Filtered.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/Filtered.class new file mode 100644 index 0000000..b188f93 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/Filtered.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/ItemStackData.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/ItemStackData.class new file mode 100644 index 0000000..bf31fb1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/ItemStackData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/ItemStackDataLists.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/ItemStackDataLists.class new file mode 100644 index 0000000..f0c366e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/ItemStackDataLists.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/package-info.class new file mode 100644 index 0000000..069cc92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/datafix/walkers/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/AxisAlignedBB.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/AxisAlignedBB.class new file mode 100644 index 0000000..12169d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/AxisAlignedBB.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$1$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$1$1.class new file mode 100644 index 0000000..fcf1b02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$1.class new file mode 100644 index 0000000..15ac099 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$2$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$2$1.class new file mode 100644 index 0000000..e4b63ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$2$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$2.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$2.class new file mode 100644 index 0000000..2c22097 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$3.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$3.class new file mode 100644 index 0000000..aefee6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$MutableBlockPos.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$MutableBlockPos.class new file mode 100644 index 0000000..4227a32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$MutableBlockPos.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$PooledMutableBlockPos.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$PooledMutableBlockPos.class new file mode 100644 index 0000000..5f30eb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos$PooledMutableBlockPos.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos.class new file mode 100644 index 0000000..5a9397d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/BlockPos.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$1.class new file mode 100644 index 0000000..7e7314e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$GetList.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$GetList.class new file mode 100644 index 0000000..30e98e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$GetList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$Product$ProductIterator.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$Product$ProductIterator.class new file mode 100644 index 0000000..6ec696b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$Product$ProductIterator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$Product.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$Product.class new file mode 100644 index 0000000..0d52f86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian$Product.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian.class new file mode 100644 index 0000000..4d7d706 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Cartesian.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/ChunkPos.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/ChunkPos.class new file mode 100644 index 0000000..c692235 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/ChunkPos.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/MathHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/MathHelper.class new file mode 100644 index 0000000..7b6ac17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/MathHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/RayTraceResult$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/RayTraceResult$Type.class new file mode 100644 index 0000000..bc67641 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/RayTraceResult$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/RayTraceResult.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/RayTraceResult.class new file mode 100644 index 0000000..de7ca9d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/RayTraceResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Rotations.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Rotations.class new file mode 100644 index 0000000..f84a711 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Rotations.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec2f.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec2f.class new file mode 100644 index 0000000..a9cfb25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec2f.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec3d.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec3d.class new file mode 100644 index 0000000..7dda492 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec3d.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec3i.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec3i.class new file mode 100644 index 0000000..7b30cd5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/Vec3i.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/math/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/math/package-info.class new file mode 100644 index 0000000..b828f10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/math/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/package-info.class new file mode 100644 index 0000000..b3b8790 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/registry/IRegistry.class b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/IRegistry.class new file mode 100644 index 0000000..6d28b97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/IRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryDefaulted.class b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryDefaulted.class new file mode 100644 index 0000000..8ff1ca3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryDefaulted.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryNamespaced.class b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryNamespaced.class new file mode 100644 index 0000000..9eeb11f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryNamespaced.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.class b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.class new file mode 100644 index 0000000..2e51c16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistrySimple.class b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistrySimple.class new file mode 100644 index 0000000..a3dd2e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/RegistrySimple.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/registry/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/package-info.class new file mode 100644 index 0000000..0d551fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/registry/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/ChatType.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/ChatType.class new file mode 100644 index 0000000..dc4b1c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/ChatType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/ITextComponent$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/ITextComponent$Serializer.class new file mode 100644 index 0000000..e44e183 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/ITextComponent$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/ITextComponent.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/ITextComponent.class new file mode 100644 index 0000000..202e81a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/ITextComponent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style$1.class new file mode 100644 index 0000000..fd084cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style$Serializer.class new file mode 100644 index 0000000..2894d82 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style.class new file mode 100644 index 0000000..588fa0a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/Style.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase$1.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase$1.class new file mode 100644 index 0000000..7f75762 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase$2.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase$2.class new file mode 100644 index 0000000..34f222e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase.class new file mode 100644 index 0000000..e347f4b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentKeybind.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentKeybind.class new file mode 100644 index 0000000..a1a1d6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentKeybind.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentScore.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentScore.class new file mode 100644 index 0000000..723f251 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentScore.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentSelector.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentSelector.class new file mode 100644 index 0000000..3f0722f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentSelector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentString.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentString.class new file mode 100644 index 0000000..ceb6c0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentString.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentTranslation.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentTranslation.class new file mode 100644 index 0000000..8846f87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentTranslation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentTranslationFormatException.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentTranslationFormatException.class new file mode 100644 index 0000000..8adc411 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentTranslationFormatException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentUtils.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentUtils.class new file mode 100644 index 0000000..19f1e90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextComponentUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextFormatting.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextFormatting.class new file mode 100644 index 0000000..f0507d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/TextFormatting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/ClickEvent$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/ClickEvent$Action.class new file mode 100644 index 0000000..80edcf3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/ClickEvent$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/ClickEvent.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/ClickEvent.class new file mode 100644 index 0000000..380b52d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/ClickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/HoverEvent$Action.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/HoverEvent$Action.class new file mode 100644 index 0000000..5de8f87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/HoverEvent$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/HoverEvent.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/HoverEvent.class new file mode 100644 index 0000000..4916dca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/HoverEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/package-info.class new file mode 100644 index 0000000..c83f9d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/event/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/package-info.class new file mode 100644 index 0000000..c5584e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/I18n.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/I18n.class new file mode 100644 index 0000000..12e6bc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/I18n.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/LanguageMap.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/LanguageMap.class new file mode 100644 index 0000000..57e0317 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/LanguageMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/package-info.class new file mode 100644 index 0000000..45ead75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/util/text/translation/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/MerchantRecipe.class b/build/tmp/recompileMc/compiled/net/minecraft/village/MerchantRecipe.class new file mode 100644 index 0000000..c58751b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/MerchantRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/MerchantRecipeList.class b/build/tmp/recompileMc/compiled/net/minecraft/village/MerchantRecipeList.class new file mode 100644 index 0000000..d762022 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/MerchantRecipeList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/Village$VillageAggressor.class b/build/tmp/recompileMc/compiled/net/minecraft/village/Village$VillageAggressor.class new file mode 100644 index 0000000..ac6e3d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/Village$VillageAggressor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/Village.class b/build/tmp/recompileMc/compiled/net/minecraft/village/Village.class new file mode 100644 index 0000000..35c7510 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/Village.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/VillageCollection.class b/build/tmp/recompileMc/compiled/net/minecraft/village/VillageCollection.class new file mode 100644 index 0000000..855736d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/VillageCollection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/VillageDoorInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/village/VillageDoorInfo.class new file mode 100644 index 0000000..df58ca0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/VillageDoorInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/VillageSiege.class b/build/tmp/recompileMc/compiled/net/minecraft/village/VillageSiege.class new file mode 100644 index 0000000..0d4a85a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/VillageSiege.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/village/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/village/package-info.class new file mode 100644 index 0000000..aa09e6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/village/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo$Color.class b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo$Color.class new file mode 100644 index 0000000..55ada44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo$Color.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo$Overlay.class b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo$Overlay.class new file mode 100644 index 0000000..bdfc38d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo$Overlay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo.class new file mode 100644 index 0000000..57cb4ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfoServer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfoServer.class new file mode 100644 index 0000000..f7421fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/BossInfoServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/ChunkCache.class b/build/tmp/recompileMc/compiled/net/minecraft/world/ChunkCache.class new file mode 100644 index 0000000..db62a79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/ChunkCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/ColorizerFoliage.class b/build/tmp/recompileMc/compiled/net/minecraft/world/ColorizerFoliage.class new file mode 100644 index 0000000..e2a7288 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/ColorizerFoliage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/ColorizerGrass.class b/build/tmp/recompileMc/compiled/net/minecraft/world/ColorizerGrass.class new file mode 100644 index 0000000..f73970e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/ColorizerGrass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/DifficultyInstance.class b/build/tmp/recompileMc/compiled/net/minecraft/world/DifficultyInstance.class new file mode 100644 index 0000000..c54c7ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/DifficultyInstance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/DimensionType.class b/build/tmp/recompileMc/compiled/net/minecraft/world/DimensionType.class new file mode 100644 index 0000000..229dfee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/DimensionType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/EnumDifficulty.class b/build/tmp/recompileMc/compiled/net/minecraft/world/EnumDifficulty.class new file mode 100644 index 0000000..c991560 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/EnumDifficulty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/EnumSkyBlock.class b/build/tmp/recompileMc/compiled/net/minecraft/world/EnumSkyBlock.class new file mode 100644 index 0000000..3502dc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/EnumSkyBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/Explosion.class b/build/tmp/recompileMc/compiled/net/minecraft/world/Explosion.class new file mode 100644 index 0000000..a53a70c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/Explosion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules$Value.class b/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules$Value.class new file mode 100644 index 0000000..2ca71cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules$Value.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules$ValueType.class b/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules$ValueType.class new file mode 100644 index 0000000..8afa8de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules$ValueType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules.class b/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules.class new file mode 100644 index 0000000..4d39704 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/GameRules.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/GameType.class b/build/tmp/recompileMc/compiled/net/minecraft/world/GameType.class new file mode 100644 index 0000000..97abd63 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/GameType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/IBlockAccess.class b/build/tmp/recompileMc/compiled/net/minecraft/world/IBlockAccess.class new file mode 100644 index 0000000..9fede89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/IBlockAccess.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/IInteractionObject.class b/build/tmp/recompileMc/compiled/net/minecraft/world/IInteractionObject.class new file mode 100644 index 0000000..c05882e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/IInteractionObject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/ILockableContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/ILockableContainer.class new file mode 100644 index 0000000..6dbe379 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/ILockableContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/IWorldEventListener.class b/build/tmp/recompileMc/compiled/net/minecraft/world/IWorldEventListener.class new file mode 100644 index 0000000..2a5b6bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/IWorldEventListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/IWorldNameable.class b/build/tmp/recompileMc/compiled/net/minecraft/world/IWorldNameable.class new file mode 100644 index 0000000..f45f248 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/IWorldNameable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/LockCode.class b/build/tmp/recompileMc/compiled/net/minecraft/world/LockCode.class new file mode 100644 index 0000000..d3e4b5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/LockCode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/MinecraftException.class b/build/tmp/recompileMc/compiled/net/minecraft/world/MinecraftException.class new file mode 100644 index 0000000..fa119f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/MinecraftException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/NextTickListEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/world/NextTickListEntry.class new file mode 100644 index 0000000..24795fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/NextTickListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/ServerWorldEventHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/world/ServerWorldEventHandler.class new file mode 100644 index 0000000..527779d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/ServerWorldEventHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/Teleporter$PortalPosition.class b/build/tmp/recompileMc/compiled/net/minecraft/world/Teleporter$PortalPosition.class new file mode 100644 index 0000000..297703c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/Teleporter$PortalPosition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/Teleporter.class b/build/tmp/recompileMc/compiled/net/minecraft/world/Teleporter.class new file mode 100644 index 0000000..93a3b17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/Teleporter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/World$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/World$1.class new file mode 100644 index 0000000..533ecba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/World$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/World$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/World$2.class new file mode 100644 index 0000000..12750e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/World$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/World$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/World$3.class new file mode 100644 index 0000000..3deac4e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/World$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/World$4.class b/build/tmp/recompileMc/compiled/net/minecraft/world/World$4.class new file mode 100644 index 0000000..a556c7d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/World$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/World$5.class b/build/tmp/recompileMc/compiled/net/minecraft/world/World$5.class new file mode 100644 index 0000000..a5fbcd1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/World$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/World.class b/build/tmp/recompileMc/compiled/net/minecraft/world/World.class new file mode 100644 index 0000000..83d3616 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/World.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldEntitySpawner.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldEntitySpawner.class new file mode 100644 index 0000000..a934c52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldEntitySpawner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProvider$WorldSleepResult.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProvider$WorldSleepResult.class new file mode 100644 index 0000000..73e755b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProvider$WorldSleepResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProvider.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProvider.class new file mode 100644 index 0000000..f909bd8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderEnd.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderEnd.class new file mode 100644 index 0000000..3ffe6a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderEnd.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderHell$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderHell$1.class new file mode 100644 index 0000000..9151203 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderHell$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderHell.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderHell.class new file mode 100644 index 0000000..d0a8850 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderHell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderSurface.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderSurface.class new file mode 100644 index 0000000..59aabdf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldProviderSurface.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer$1.class new file mode 100644 index 0000000..e12fa08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer$ServerBlockEventList.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer$ServerBlockEventList.class new file mode 100644 index 0000000..ee141da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer$ServerBlockEventList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer.class new file mode 100644 index 0000000..42a219a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerDemo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerDemo.class new file mode 100644 index 0000000..78dae37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerDemo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerMulti$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerMulti$1.class new file mode 100644 index 0000000..a6d2568 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerMulti$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerMulti.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerMulti.class new file mode 100644 index 0000000..f43640b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldServerMulti.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldSettings.class new file mode 100644 index 0000000..a0318d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/WorldType.class b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldType.class new file mode 100644 index 0000000..cf6a02b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/WorldType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$1.class new file mode 100644 index 0000000..f421f30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$BiomeProperties.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$BiomeProperties.class new file mode 100644 index 0000000..4680535 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$BiomeProperties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$FlowerEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$FlowerEntry.class new file mode 100644 index 0000000..826ddb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$FlowerEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$SpawnListEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$SpawnListEntry.class new file mode 100644 index 0000000..914f243 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$SpawnListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$TempCategory.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$TempCategory.class new file mode 100644 index 0000000..52e8bbb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome$TempCategory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome.class new file mode 100644 index 0000000..4470c2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/Biome.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeBeach.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeBeach.class new file mode 100644 index 0000000..7ea2a02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeBeach.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeCache$Block.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeCache$Block.class new file mode 100644 index 0000000..286feb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeCache$Block.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeCache.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeCache.class new file mode 100644 index 0000000..f12faa2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$1.class new file mode 100644 index 0000000..b2bc842 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$2.class new file mode 100644 index 0000000..a74a949 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$3.class new file mode 100644 index 0000000..88438cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$ColorResolver.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$ColorResolver.class new file mode 100644 index 0000000..6c4014a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper$ColorResolver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper.class new file mode 100644 index 0000000..de6b239 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeColorHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeDecorator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeDecorator.class new file mode 100644 index 0000000..f2b2192 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeDecorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeDesert.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeDesert.class new file mode 100644 index 0000000..3741b18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeDesert.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEnd.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEnd.class new file mode 100644 index 0000000..b808699 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEnd.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator$1.class new file mode 100644 index 0000000..295e0f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader.class new file mode 100644 index 0000000..18dfad3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator$SpikeCacheLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator.class new file mode 100644 index 0000000..20407db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeEndDecorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForest$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForest$Type.class new file mode 100644 index 0000000..b7b0bb1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForest$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForest.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForest.class new file mode 100644 index 0000000..a253d3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForestMutated.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForestMutated.class new file mode 100644 index 0000000..3469b98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeForestMutated.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHell.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHell.class new file mode 100644 index 0000000..0cea029 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHellDecorator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHellDecorator.class new file mode 100644 index 0000000..5f94699 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHellDecorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$1.class new file mode 100644 index 0000000..9cd903c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$EmeraldGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$EmeraldGenerator.class new file mode 100644 index 0000000..6c1520e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$EmeraldGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$Type.class new file mode 100644 index 0000000..c42b51d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills.class new file mode 100644 index 0000000..2d507bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeHills.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeJungle.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeJungle.class new file mode 100644 index 0000000..d5383fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeJungle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa$1.class new file mode 100644 index 0000000..57b89ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa$Decorator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa$Decorator.class new file mode 100644 index 0000000..cc2faba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa$Decorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa.class new file mode 100644 index 0000000..456b6cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMesa.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMushroomIsland.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMushroomIsland.class new file mode 100644 index 0000000..1f33e91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeMushroomIsland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeOcean.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeOcean.class new file mode 100644 index 0000000..a98ae9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeOcean.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomePlains.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomePlains.class new file mode 100644 index 0000000..383899c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomePlains.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeProvider.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeProvider.class new file mode 100644 index 0000000..3d894ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeProviderSingle.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeProviderSingle.class new file mode 100644 index 0000000..586717c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeProviderSingle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeRiver.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeRiver.class new file mode 100644 index 0000000..45cc26c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeRiver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSavanna.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSavanna.class new file mode 100644 index 0000000..14b1d39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSavanna.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSavannaMutated.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSavannaMutated.class new file mode 100644 index 0000000..d556b91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSavannaMutated.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSnow.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSnow.class new file mode 100644 index 0000000..7504d4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSnow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeStoneBeach.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeStoneBeach.class new file mode 100644 index 0000000..f6a4c87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeStoneBeach.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSwamp.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSwamp.class new file mode 100644 index 0000000..d68cb86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeSwamp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeTaiga$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeTaiga$Type.class new file mode 100644 index 0000000..f561b7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeTaiga$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeTaiga.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeTaiga.class new file mode 100644 index 0000000..0f7162c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeTaiga.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeVoid.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeVoid.class new file mode 100644 index 0000000..c18310c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeVoid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeVoidDecorator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeVoidDecorator.class new file mode 100644 index 0000000..cda5457 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/BiomeVoidDecorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/biome/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/package-info.class new file mode 100644 index 0000000..5f40c63 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/biome/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/border/EnumBorderStatus.class b/build/tmp/recompileMc/compiled/net/minecraft/world/border/EnumBorderStatus.class new file mode 100644 index 0000000..115fd91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/border/EnumBorderStatus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/border/IBorderListener.class b/build/tmp/recompileMc/compiled/net/minecraft/world/border/IBorderListener.class new file mode 100644 index 0000000..86a513c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/border/IBorderListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/border/WorldBorder.class b/build/tmp/recompileMc/compiled/net/minecraft/world/border/WorldBorder.class new file mode 100644 index 0000000..79629e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/border/WorldBorder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/border/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/border/package-info.class new file mode 100644 index 0000000..d6345fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/border/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStateContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStateContainer.class new file mode 100644 index 0000000..c042b77 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStateContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteHashMap.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteHashMap.class new file mode 100644 index 0000000..fa54599 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteHashMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteLinear.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteLinear.class new file mode 100644 index 0000000..52dcf7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteLinear.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteRegistry.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteRegistry.class new file mode 100644 index 0000000..4e176f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/BlockStatePaletteRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk$1.class new file mode 100644 index 0000000..fc40fbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk$EnumCreateEntityType.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk$EnumCreateEntityType.class new file mode 100644 index 0000000..6908da0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk$EnumCreateEntityType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk.class new file mode 100644 index 0000000..47ad86e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/Chunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/ChunkPrimer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/ChunkPrimer.class new file mode 100644 index 0000000..90e6a66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/ChunkPrimer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/EmptyChunk.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/EmptyChunk.class new file mode 100644 index 0000000..008572a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/EmptyChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IBlockStatePalette.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IBlockStatePalette.class new file mode 100644 index 0000000..cecd9c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IBlockStatePalette.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IBlockStatePaletteResizer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IBlockStatePaletteResizer.class new file mode 100644 index 0000000..e5419df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IBlockStatePaletteResizer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IChunkProvider.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IChunkProvider.class new file mode 100644 index 0000000..9483419 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/IChunkProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/NibbleArray.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/NibbleArray.class new file mode 100644 index 0000000..7a63236 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/NibbleArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/package-info.class new file mode 100644 index 0000000..2a2fde9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilChunkLoader$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilChunkLoader$1.class new file mode 100644 index 0000000..db6291d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilChunkLoader$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilChunkLoader.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilChunkLoader.class new file mode 100644 index 0000000..5745e50 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilChunkLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveConverter$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveConverter$1.class new file mode 100644 index 0000000..161fee3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveConverter$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveConverter.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveConverter.class new file mode 100644 index 0000000..4c95e50 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveConverter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveHandler.class new file mode 100644 index 0000000..e160a10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/AnvilSaveHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData.class new file mode 100644 index 0000000..01a6dad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ChunkLoader$AnvilConverterData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ChunkLoader.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ChunkLoader.class new file mode 100644 index 0000000..fe4bfaf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ChunkLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ExtendedBlockStorage.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ExtendedBlockStorage.class new file mode 100644 index 0000000..78ae633 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/ExtendedBlockStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/IChunkLoader.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/IChunkLoader.class new file mode 100644 index 0000000..a07e159 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/IChunkLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/NibbleArrayReader.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/NibbleArrayReader.class new file mode 100644 index 0000000..2d8923f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/NibbleArrayReader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer.class new file mode 100644 index 0000000..808b3f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFile$ChunkBuffer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFile.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFile.class new file mode 100644 index 0000000..6c17490 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFile.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFileCache.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFileCache.class new file mode 100644 index 0000000..7a2c671 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/RegionFileCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/package-info.class new file mode 100644 index 0000000..1cea12c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/chunk/storage/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonFightManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonFightManager.class new file mode 100644 index 0000000..2eb27cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonFightManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$1.class new file mode 100644 index 0000000..0548d0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$2.class new file mode 100644 index 0000000..91cee4d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$3.class new file mode 100644 index 0000000..98f261c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$4.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$4.class new file mode 100644 index 0000000..bf636ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$5.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$5.class new file mode 100644 index 0000000..4599d96 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager.class new file mode 100644 index 0000000..5f3a797 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/DragonSpawnManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/end/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/end/package-info.class new file mode 100644 index 0000000..a1c1ea3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/end/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorDebug.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorDebug.class new file mode 100644 index 0000000..9ea9c82 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorDebug.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorEnd.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorEnd.class new file mode 100644 index 0000000..159dfcf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorEnd.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorFlat.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorFlat.class new file mode 100644 index 0000000..b60eccb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorFlat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorHell.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorHell.class new file mode 100644 index 0000000..51e25d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorHell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorOverworld.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorOverworld.class new file mode 100644 index 0000000..353eef5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorOverworld.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$1.class new file mode 100644 index 0000000..98eb7e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$Factory.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$Factory.class new file mode 100644 index 0000000..3900e3d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$Serializer.class new file mode 100644 index 0000000..bc46d6f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings.class new file mode 100644 index 0000000..a227433 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkGeneratorSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkProviderServer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkProviderServer.class new file mode 100644 index 0000000..a58858a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/ChunkProviderServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/FlatGeneratorInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/FlatGeneratorInfo.class new file mode 100644 index 0000000..9efb83e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/FlatGeneratorInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/FlatLayerInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/FlatLayerInfo.class new file mode 100644 index 0000000..abc1bc9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/FlatLayerInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/IChunkGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/IChunkGenerator.class new file mode 100644 index 0000000..c3d0e8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/IChunkGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenBase.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenBase.class new file mode 100644 index 0000000..a4c764c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenCaves.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenCaves.class new file mode 100644 index 0000000..928c9d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenCaves.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenCavesHell.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenCavesHell.class new file mode 100644 index 0000000..c5f178e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenCavesHell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenRavine.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenRavine.class new file mode 100644 index 0000000..ef0f65b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/MapGenRavine.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGenerator.class new file mode 100644 index 0000000..14aea71 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorImproved.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorImproved.class new file mode 100644 index 0000000..406fab0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorImproved.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorOctaves.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorOctaves.class new file mode 100644 index 0000000..8b16ab3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorOctaves.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorPerlin.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorPerlin.class new file mode 100644 index 0000000..10fabbd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorPerlin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorSimplex.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorSimplex.class new file mode 100644 index 0000000..e42601f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/NoiseGeneratorSimplex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenAbstractTree.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenAbstractTree.class new file mode 100644 index 0000000..e9736da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenAbstractTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigMushroom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigMushroom.class new file mode 100644 index 0000000..52901db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigMushroom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates.class new file mode 100644 index 0000000..3e24dbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigTree$FoliageCoordinates.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigTree.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigTree.class new file mode 100644 index 0000000..ff17f33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBigTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBirchTree.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBirchTree.class new file mode 100644 index 0000000..0cf6ec6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBirchTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBlockBlob.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBlockBlob.class new file mode 100644 index 0000000..339b30a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBlockBlob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBush.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBush.class new file mode 100644 index 0000000..794abef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenBush.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenCactus.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenCactus.class new file mode 100644 index 0000000..677dff3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenCactus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenCanopyTree.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenCanopyTree.class new file mode 100644 index 0000000..9f72dc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenCanopyTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenClay.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenClay.class new file mode 100644 index 0000000..8f81211 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenClay.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDeadBush.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDeadBush.class new file mode 100644 index 0000000..c7e9537 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDeadBush.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDesertWells.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDesertWells.class new file mode 100644 index 0000000..4cec837 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDesertWells.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDoublePlant.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDoublePlant.class new file mode 100644 index 0000000..41a3385 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDoublePlant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDungeons.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDungeons.class new file mode 100644 index 0000000..8ac2e5a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenDungeons.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndGateway.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndGateway.class new file mode 100644 index 0000000..92e996c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndGateway.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndIsland.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndIsland.class new file mode 100644 index 0000000..b7a0a70 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndIsland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndPodium.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndPodium.class new file mode 100644 index 0000000..f4c150c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenEndPodium.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFire.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFire.class new file mode 100644 index 0000000..f732eea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFire.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFlowers.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFlowers.class new file mode 100644 index 0000000..da4a5a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFlowers.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFossils.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFossils.class new file mode 100644 index 0000000..2b4b4fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenFossils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenGlowStone1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenGlowStone1.class new file mode 100644 index 0000000..78340bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenGlowStone1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenGlowStone2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenGlowStone2.class new file mode 100644 index 0000000..6b2d819 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenGlowStone2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenHellLava.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenHellLava.class new file mode 100644 index 0000000..e7c8186 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenHellLava.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenHugeTrees.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenHugeTrees.class new file mode 100644 index 0000000..06eb000 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenHugeTrees.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenIcePath.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenIcePath.class new file mode 100644 index 0000000..c2db8fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenIcePath.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenIceSpike.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenIceSpike.class new file mode 100644 index 0000000..3dcdbc6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenIceSpike.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenLakes.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenLakes.class new file mode 100644 index 0000000..68e23b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenLakes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenLiquids.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenLiquids.class new file mode 100644 index 0000000..dad5e08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenLiquids.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMegaJungle.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMegaJungle.class new file mode 100644 index 0000000..6f407d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMegaJungle.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMegaPineTree.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMegaPineTree.class new file mode 100644 index 0000000..92e8a2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMegaPineTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMelon.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMelon.class new file mode 100644 index 0000000..174e5bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMelon.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable$1.class new file mode 100644 index 0000000..2231ffa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate.class new file mode 100644 index 0000000..57eecb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable$StonePredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable.class new file mode 100644 index 0000000..50b57ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenMinable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenPumpkin.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenPumpkin.class new file mode 100644 index 0000000..6728f82 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenPumpkin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenReed.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenReed.class new file mode 100644 index 0000000..43036d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenReed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSand.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSand.class new file mode 100644 index 0000000..8df8876 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSavannaTree.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSavannaTree.class new file mode 100644 index 0000000..8ab63b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSavannaTree.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenShrub.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenShrub.class new file mode 100644 index 0000000..ce596d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenShrub.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike.class new file mode 100644 index 0000000..eb52b73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSpikes$EndSpike.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSpikes.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSpikes.class new file mode 100644 index 0000000..0f236ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSpikes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSwamp.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSwamp.class new file mode 100644 index 0000000..40d4985 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenSwamp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTaiga1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTaiga1.class new file mode 100644 index 0000000..cf6e38e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTaiga1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTaiga2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTaiga2.class new file mode 100644 index 0000000..3793c8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTaiga2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTallGrass.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTallGrass.class new file mode 100644 index 0000000..97c3a29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTallGrass.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTrees.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTrees.class new file mode 100644 index 0000000..6722982 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenTrees.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenVines.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenVines.class new file mode 100644 index 0000000..a34b7c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenVines.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenWaterlily.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenWaterlily.class new file mode 100644 index 0000000..bb3eb0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenWaterlily.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenerator.class new file mode 100644 index 0000000..4f9315c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.class new file mode 100644 index 0000000..9c1b1b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/WorldGeneratorBonusChest.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/package-info.class new file mode 100644 index 0000000..cb60fcc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/feature/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayer.class new file mode 100644 index 0000000..9991c1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddIsland.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddIsland.class new file mode 100644 index 0000000..03ebec0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddIsland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.class new file mode 100644 index 0000000..b3f46da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddMushroomIsland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddSnow.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddSnow.class new file mode 100644 index 0000000..a9b3cd0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerAddSnow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerBiome.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerBiome.class new file mode 100644 index 0000000..800c01c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerBiome.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerBiomeEdge.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerBiomeEdge.class new file mode 100644 index 0000000..81ecbfc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerBiomeEdge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerDeepOcean.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerDeepOcean.class new file mode 100644 index 0000000..90045bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerDeepOcean.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge$1.class new file mode 100644 index 0000000..017e8cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge$Mode.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge$Mode.class new file mode 100644 index 0000000..673312a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge$Mode.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge.class new file mode 100644 index 0000000..3b83e39 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerEdge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.class new file mode 100644 index 0000000..9b6bfe8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerFuzzyZoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerHills.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerHills.class new file mode 100644 index 0000000..06335fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerHills.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerIsland.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerIsland.class new file mode 100644 index 0000000..3818543 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerIsland.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRareBiome.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRareBiome.class new file mode 100644 index 0000000..dea43cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRareBiome.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.class new file mode 100644 index 0000000..7537515 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRemoveTooMuchOcean.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiver.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiver.class new file mode 100644 index 0000000..9c84bd5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiverInit.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiverInit.class new file mode 100644 index 0000000..0dc297d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiverInit.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiverMix.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiverMix.class new file mode 100644 index 0000000..c62d60f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerRiverMix.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerShore.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerShore.class new file mode 100644 index 0000000..b92d032 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerShore.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerSmooth.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerSmooth.class new file mode 100644 index 0000000..16a0f90 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerSmooth.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.class new file mode 100644 index 0000000..e899791 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerVoronoiZoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerZoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerZoom.class new file mode 100644 index 0000000..a245eb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/GenLayerZoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/IntCache.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/IntCache.class new file mode 100644 index 0000000..8f8aa1c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/IntCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/package-info.class new file mode 100644 index 0000000..1b5d3b0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/layer/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/package-info.class new file mode 100644 index 0000000..f761d07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1.class new file mode 100644 index 0000000..7cdaff1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid.class new file mode 100644 index 0000000..aad8248 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$DesertPyramid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature.class new file mode 100644 index 0000000..cf5e941 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Feature.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo.class new file mode 100644 index 0000000..3695223 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$Igloo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones.class new file mode 100644 index 0000000..7154096 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid$Stones.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid.class new file mode 100644 index 0000000..205d728 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$JunglePyramid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut.class new file mode 100644 index 0000000..ef59342 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces$SwampHut.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.class new file mode 100644 index 0000000..ae5ce91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/ComponentScatteredFeaturePieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenEndCity$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenEndCity$Start.class new file mode 100644 index 0000000..23794e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenEndCity$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenEndCity.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenEndCity.class new file mode 100644 index 0000000..b31823c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenEndCity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenMineshaft$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenMineshaft$Type.class new file mode 100644 index 0000000..028b326 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenMineshaft$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenMineshaft.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenMineshaft.class new file mode 100644 index 0000000..16f4d45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenMineshaft.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenNetherBridge$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenNetherBridge$Start.class new file mode 100644 index 0000000..03dfc54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenNetherBridge$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenNetherBridge.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenNetherBridge.class new file mode 100644 index 0000000..c70cde0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenNetherBridge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenScatteredFeature$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenScatteredFeature$Start.class new file mode 100644 index 0000000..a793b1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenScatteredFeature$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenScatteredFeature.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenScatteredFeature.class new file mode 100644 index 0000000..7d1ceec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenScatteredFeature.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStronghold$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStronghold$Start.class new file mode 100644 index 0000000..a49c699 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStronghold$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStronghold.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStronghold.class new file mode 100644 index 0000000..e0b1f00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStronghold.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$1.class new file mode 100644 index 0000000..9d3ad57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$2.class new file mode 100644 index 0000000..cf4588f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$3.class new file mode 100644 index 0000000..a662106 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure.class new file mode 100644 index 0000000..a344e47 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructure.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructureData.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructureData.class new file mode 100644 index 0000000..3b5ad3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructureData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructureIO.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructureIO.class new file mode 100644 index 0000000..f8cb84b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenStructureIO.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenVillage$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenVillage$Start.class new file mode 100644 index 0000000..c6c093e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenVillage$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenVillage.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenVillage.class new file mode 100644 index 0000000..fbcaebc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/MapGenVillage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureBoundingBox$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureBoundingBox$1.class new file mode 100644 index 0000000..90d713b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureBoundingBox$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureBoundingBox.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureBoundingBox.class new file mode 100644 index 0000000..c73ed5c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureBoundingBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent$1.class new file mode 100644 index 0000000..e228673 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent$BlockSelector.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent$BlockSelector.class new file mode 100644 index 0000000..8065295 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent$BlockSelector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent.class new file mode 100644 index 0000000..9c21746 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponentTemplate$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponentTemplate$1.class new file mode 100644 index 0000000..0306b72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponentTemplate$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponentTemplate.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponentTemplate.class new file mode 100644 index 0000000..c0c1456 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureComponentTemplate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$1.class new file mode 100644 index 0000000..b353219 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$2.class new file mode 100644 index 0000000..5db8c1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$3.class new file mode 100644 index 0000000..f830f43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$4.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$4.class new file mode 100644 index 0000000..1083aac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate.class new file mode 100644 index 0000000..ce4801f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$CityTemplate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator.class new file mode 100644 index 0000000..404d290 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces$IGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces.class new file mode 100644 index 0000000..277c5b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureEndCityPieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$1.class new file mode 100644 index 0000000..d565ae6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor.class new file mode 100644 index 0000000..e452318 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Corridor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross.class new file mode 100644 index 0000000..fe9ef1c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Cross.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice.class new file mode 100644 index 0000000..533667c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Peice.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Room.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Room.class new file mode 100644 index 0000000..d63f0b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Room.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs.class new file mode 100644 index 0000000..9b6b31a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces$Stairs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces.class new file mode 100644 index 0000000..1cf2a00 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftPieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftStart.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftStart.class new file mode 100644 index 0000000..0f575b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureMineshaftStart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$1.class new file mode 100644 index 0000000..ca84436 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor.class new file mode 100644 index 0000000..56c22ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2.class new file mode 100644 index 0000000..0fb1d91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3.class new file mode 100644 index 0000000..161e385 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4.class new file mode 100644 index 0000000..25be9fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5.class new file mode 100644 index 0000000..a89ef41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Corridor5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing.class new file mode 100644 index 0000000..6034d18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2.class new file mode 100644 index 0000000..8da06f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3.class new file mode 100644 index 0000000..85ae138 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Crossing3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$End.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$End.class new file mode 100644 index 0000000..9e5e992 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$End.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance.class new file mode 100644 index 0000000..607aeac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Entrance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom.class new file mode 100644 index 0000000..578ffd1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$NetherStalkRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece.class new file mode 100644 index 0000000..114d600 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Piece.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight.class new file mode 100644 index 0000000..7a0412b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$PieceWeight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs.class new file mode 100644 index 0000000..1069ded Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Stairs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start.class new file mode 100644 index 0000000..592a96a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight.class new file mode 100644 index 0000000..8aa872e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Straight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne.class new file mode 100644 index 0000000..e720b81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces$Throne.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces.class new file mode 100644 index 0000000..b9da677 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureNetherBridgePieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument.class new file mode 100644 index 0000000..8587afd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonument$StartMonument.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonument.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonument.class new file mode 100644 index 0000000..61f77e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonument.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1.class new file mode 100644 index 0000000..ddc82a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom.class new file mode 100644 index 0000000..1a08263 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom.class new file mode 100644 index 0000000..d9862b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleXYRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom.class new file mode 100644 index 0000000..72a1c53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom.class new file mode 100644 index 0000000..b755432 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleYZRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom.class new file mode 100644 index 0000000..29e718c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$DoubleZRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom.class new file mode 100644 index 0000000..527316b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$EntryRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper.class new file mode 100644 index 0000000..3b130f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper.class new file mode 100644 index 0000000..81dc956 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$FitSimpleRoomTopHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding.class new file mode 100644 index 0000000..f5c02ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentBuilding.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom.class new file mode 100644 index 0000000..3cb6d13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentCoreRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper.class new file mode 100644 index 0000000..161a82b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$MonumentRoomFitHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse.class new file mode 100644 index 0000000..77b87fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Penthouse.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece.class new file mode 100644 index 0000000..47d2196 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$Piece.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition.class new file mode 100644 index 0000000..c1cd6d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$RoomDefinition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom.class new file mode 100644 index 0000000..78dd1f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom.class new file mode 100644 index 0000000..50fe47d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$SimpleTopRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom.class new file mode 100644 index 0000000..5d170d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$WingRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper.class new file mode 100644 index 0000000..e3521cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XDoubleRoomFitHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper.class new file mode 100644 index 0000000..2f8ad54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$XYDoubleRoomFitHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper.class new file mode 100644 index 0000000..57777e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YDoubleRoomFitHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper.class new file mode 100644 index 0000000..6144a58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$YZDoubleRoomFitHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper.class new file mode 100644 index 0000000..f427dbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces$ZDoubleRoomFitHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.class new file mode 100644 index 0000000..f2ec808 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureOceanMonumentPieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStart.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStart.class new file mode 100644 index 0000000..6701d6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$1.class new file mode 100644 index 0000000..6d63187 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$2.class new file mode 100644 index 0000000..4d31adb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$3.class new file mode 100644 index 0000000..32f02fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor.class new file mode 100644 index 0000000..e054731 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$ChestCorridor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor.class new file mode 100644 index 0000000..058c98b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Corridor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing.class new file mode 100644 index 0000000..fe81c6f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Crossing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn.class new file mode 100644 index 0000000..91aebbc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$LeftTurn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Library.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Library.class new file mode 100644 index 0000000..e529c3b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Library.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight.class new file mode 100644 index 0000000..8f17ac6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$PieceWeight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom.class new file mode 100644 index 0000000..68f0745 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$PortalRoom.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison.class new file mode 100644 index 0000000..059b2a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Prison.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn.class new file mode 100644 index 0000000..7a34ca2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$RightTurn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing.class new file mode 100644 index 0000000..80a3d5d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$RoomCrossing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs.class new file mode 100644 index 0000000..6b608a7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2.class new file mode 100644 index 0000000..6c43ff8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stairs2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight.class new file mode 100644 index 0000000..40bbc0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$StairsStraight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones.class new file mode 100644 index 0000000..06011f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stones.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight.class new file mode 100644 index 0000000..941debf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Straight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door.class new file mode 100644 index 0000000..b3cac16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold$Door.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold.class new file mode 100644 index 0000000..5cb7c57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces$Stronghold.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces.class new file mode 100644 index 0000000..3c51c99 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureStrongholdPieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$1.class new file mode 100644 index 0000000..561d611 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Church.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Church.class new file mode 100644 index 0000000..c9164e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Church.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Field1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Field1.class new file mode 100644 index 0000000..85db1f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Field1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Field2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Field2.class new file mode 100644 index 0000000..b545865 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Field2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Hall.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Hall.class new file mode 100644 index 0000000..b59fe09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Hall.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House1.class new file mode 100644 index 0000000..09e1104 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House2.class new file mode 100644 index 0000000..ab29793 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House3.class new file mode 100644 index 0000000..7e979a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden.class new file mode 100644 index 0000000..43b9a3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$House4Garden.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Path.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Path.class new file mode 100644 index 0000000..cbe026b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Path.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight.class new file mode 100644 index 0000000..7ee304d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$PieceWeight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Road.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Road.class new file mode 100644 index 0000000..3c6f9b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Road.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Start.class new file mode 100644 index 0000000..2b90e5c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Torch.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Torch.class new file mode 100644 index 0000000..f1a371d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Torch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Village.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Village.class new file mode 100644 index 0000000..96387ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Village.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Well.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Well.class new file mode 100644 index 0000000..2eb2e0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$Well.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut.class new file mode 100644 index 0000000..378f94b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces$WoodHut.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces.class new file mode 100644 index 0000000..0f5d54e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/StructureVillagePieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansion$Start.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansion$Start.class new file mode 100644 index 0000000..82689fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansion$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansion.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansion.class new file mode 100644 index 0000000..2ede0ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$1.class new file mode 100644 index 0000000..c565c92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor.class new file mode 100644 index 0000000..3e2d2fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$FirstFloor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid.class new file mode 100644 index 0000000..e108dcc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$Grid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate.class new file mode 100644 index 0000000..5bd9279 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$MansionTemplate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData.class new file mode 100644 index 0000000..00f00d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$PlacementData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer.class new file mode 100644 index 0000000..699156d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$Placer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection.class new file mode 100644 index 0000000..f1d5f0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$RoomCollection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor.class new file mode 100644 index 0000000..a66739d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$SecondFloor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid.class new file mode 100644 index 0000000..a979abc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$SimpleGrid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor.class new file mode 100644 index 0000000..6c451f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces$ThirdFloor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces.class new file mode 100644 index 0000000..3923e80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/WoodlandMansionPieces.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/package-info.class new file mode 100644 index 0000000..06dd37a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/BlockRotationProcessor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/BlockRotationProcessor.class new file mode 100644 index 0000000..e873cda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/BlockRotationProcessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/ITemplateProcessor.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/ITemplateProcessor.class new file mode 100644 index 0000000..ecf4791 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/ITemplateProcessor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/PlacementSettings.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/PlacementSettings.class new file mode 100644 index 0000000..5e4d3d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/PlacementSettings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$1.class new file mode 100644 index 0000000..a854307 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$2.class new file mode 100644 index 0000000..37688a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$3.class new file mode 100644 index 0000000..8cdf2f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$BasicPalette.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$BasicPalette.class new file mode 100644 index 0000000..34e2555 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$BasicPalette.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$BlockInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$BlockInfo.class new file mode 100644 index 0000000..f345074 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$BlockInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$EntityInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$EntityInfo.class new file mode 100644 index 0000000..05643d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template$EntityInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template.class new file mode 100644 index 0000000..73c3693 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/Template.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/TemplateManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/TemplateManager.class new file mode 100644 index 0000000..b6533ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/TemplateManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/package-info.class new file mode 100644 index 0000000..6af51e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/gen/structure/template/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/package-info.class new file mode 100644 index 0000000..496cdcd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/DerivedWorldInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/DerivedWorldInfo.class new file mode 100644 index 0000000..f2596fe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/DerivedWorldInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/IPlayerFileData.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/IPlayerFileData.class new file mode 100644 index 0000000..8993f2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/IPlayerFileData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ISaveFormat.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ISaveFormat.class new file mode 100644 index 0000000..5a416ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ISaveFormat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ISaveHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ISaveHandler.class new file mode 100644 index 0000000..131e69a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ISaveHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/IThreadedFileIO.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/IThreadedFileIO.class new file mode 100644 index 0000000..c0f3eb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/IThreadedFileIO.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapData$MapInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapData$MapInfo.class new file mode 100644 index 0000000..93e4362 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapData$MapInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapData.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapData.class new file mode 100644 index 0000000..e6d2c32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapDecoration$Type.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapDecoration$Type.class new file mode 100644 index 0000000..6cc9bb6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapDecoration$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapDecoration.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapDecoration.class new file mode 100644 index 0000000..821a306 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapDecoration.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapStorage.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapStorage.class new file mode 100644 index 0000000..218bee9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/MapStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveDataMemoryStorage.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveDataMemoryStorage.class new file mode 100644 index 0000000..2689369 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveDataMemoryStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveFormatOld.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveFormatOld.class new file mode 100644 index 0000000..267f824 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveFormatOld.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveHandler.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveHandler.class new file mode 100644 index 0000000..a00f49e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveHandlerMP.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveHandlerMP.class new file mode 100644 index 0000000..f5cf47c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/SaveHandlerMP.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ThreadedFileIOBase.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ThreadedFileIOBase.class new file mode 100644 index 0000000..0b246a4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/ThreadedFileIOBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$1.class new file mode 100644 index 0000000..d24f446 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$10.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$10.class new file mode 100644 index 0000000..d2df370 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$2.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$2.class new file mode 100644 index 0000000..0b8e09b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$3.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$3.class new file mode 100644 index 0000000..19b1cc4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$4.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$4.class new file mode 100644 index 0000000..d9a8f06 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$5.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$5.class new file mode 100644 index 0000000..a1d23cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$6.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$6.class new file mode 100644 index 0000000..d5c4db8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$7.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$7.class new file mode 100644 index 0000000..8b6b706 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$8.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$8.class new file mode 100644 index 0000000..3653341 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$9.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$9.class new file mode 100644 index 0000000..14f31fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo.class new file mode 100644 index 0000000..91bf067 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSavedData.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSavedData.class new file mode 100644 index 0000000..bc06ccb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSavedData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSavedDataCallableSave.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSavedDataCallableSave.class new file mode 100644 index 0000000..8eaece3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSavedDataCallableSave.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSummary.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSummary.class new file mode 100644 index 0000000..0a09265 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/WorldSummary.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/ILootContainer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/ILootContainer.class new file mode 100644 index 0000000..a216920 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/ILootContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$1.class new file mode 100644 index 0000000..74a947b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$Builder.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$Builder.class new file mode 100644 index 0000000..6b6f4d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer.class new file mode 100644 index 0000000..dbc3df4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$EntityTarget$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$EntityTarget.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$EntityTarget.class new file mode 100644 index 0000000..dbf8801 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext$EntityTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext.class new file mode 100644 index 0000000..4bb1a1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntry$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntry$Serializer.class new file mode 100644 index 0000000..120fa9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntry$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntry.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntry.class new file mode 100644 index 0000000..869c8e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryEmpty.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryEmpty.class new file mode 100644 index 0000000..371b2bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryEmpty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryItem.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryItem.class new file mode 100644 index 0000000..d950bb0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryTable.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryTable.class new file mode 100644 index 0000000..a5949cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootEntryTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootPool$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootPool$Serializer.class new file mode 100644 index 0000000..e15c59b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootPool$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootPool.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootPool.class new file mode 100644 index 0000000..2307249 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootPool.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTable$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTable$Serializer.class new file mode 100644 index 0000000..774e6a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTable$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTable.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTable.class new file mode 100644 index 0000000..986ec64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableList.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableList.class new file mode 100644 index 0000000..f367936 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager$1.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager$1.class new file mode 100644 index 0000000..d3c7c0e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager$Loader.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager$Loader.class new file mode 100644 index 0000000..d5882aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager$Loader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager.class new file mode 100644 index 0000000..f945d84 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/LootTableManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/RandomValueRange$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/RandomValueRange$Serializer.class new file mode 100644 index 0000000..9cec3f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/RandomValueRange$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/RandomValueRange.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/RandomValueRange.class new file mode 100644 index 0000000..09cf85d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/RandomValueRange.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer.class new file mode 100644 index 0000000..4ec73b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasProperty$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasProperty.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasProperty.class new file mode 100644 index 0000000..73bdbc3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer.class new file mode 100644 index 0000000..2cf54a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasScore$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasScore.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasScore.class new file mode 100644 index 0000000..a88451c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/EntityHasScore.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer.class new file mode 100644 index 0000000..4d34ccc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/KilledByPlayer$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/KilledByPlayer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/KilledByPlayer.class new file mode 100644 index 0000000..9da7c4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/KilledByPlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootCondition$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootCondition$Serializer.class new file mode 100644 index 0000000..ddac547 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootCondition$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootCondition.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootCondition.class new file mode 100644 index 0000000..d832e61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootCondition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer.class new file mode 100644 index 0000000..8b274d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootConditionManager$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootConditionManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootConditionManager.class new file mode 100644 index 0000000..d5121db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/LootConditionManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChance$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChance$Serializer.class new file mode 100644 index 0000000..f128b60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChance$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChance.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChance.class new file mode 100644 index 0000000..b0d104b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer.class new file mode 100644 index 0000000..d010f34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting.class new file mode 100644 index 0000000..4451542 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/RandomChanceWithLooting.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/package-info.class new file mode 100644 index 0000000..cdb1d08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/conditions/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer.class new file mode 100644 index 0000000..0eb6cdd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantRandomly$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantRandomly.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantRandomly.class new file mode 100644 index 0000000..2ae7166 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantRandomly.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer.class new file mode 100644 index 0000000..d2a47ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantWithLevels$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantWithLevels.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantWithLevels.class new file mode 100644 index 0000000..ad8651c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/EnchantWithLevels.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunction$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunction$Serializer.class new file mode 100644 index 0000000..b060607 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunction$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunction.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunction.class new file mode 100644 index 0000000..2da90a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer.class new file mode 100644 index 0000000..f88c2ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunctionManager$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunctionManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunctionManager.class new file mode 100644 index 0000000..c77982e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootFunctionManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer.class new file mode 100644 index 0000000..9fa57b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootingEnchantBonus$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootingEnchantBonus.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootingEnchantBonus.class new file mode 100644 index 0000000..756a7e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/LootingEnchantBonus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes$Modifier.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes$Modifier.class new file mode 100644 index 0000000..51b0bf1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes$Modifier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes$Serializer.class new file mode 100644 index 0000000..1f0277a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes.class new file mode 100644 index 0000000..fe87d60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetAttributes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetCount$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetCount$Serializer.class new file mode 100644 index 0000000..8f73990 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetCount$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetCount.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetCount.class new file mode 100644 index 0000000..d3a1c4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetCount.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetDamage$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetDamage$Serializer.class new file mode 100644 index 0000000..584fb76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetDamage$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetDamage.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetDamage.class new file mode 100644 index 0000000..2ae17ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetDamage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetMetadata$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetMetadata$Serializer.class new file mode 100644 index 0000000..ddd69ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetMetadata$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetMetadata.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetMetadata.class new file mode 100644 index 0000000..b0b8e7c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetMetadata.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetNBT$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetNBT$Serializer.class new file mode 100644 index 0000000..ec9def1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetNBT$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetNBT.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetNBT.class new file mode 100644 index 0000000..d345ad5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/SetNBT.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/Smelt$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/Smelt$Serializer.class new file mode 100644 index 0000000..9e9da54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/Smelt$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/Smelt.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/Smelt.class new file mode 100644 index 0000000..1a0cbf3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/Smelt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/package-info.class new file mode 100644 index 0000000..378afc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/functions/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/package-info.class new file mode 100644 index 0000000..0288924 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer.class new file mode 100644 index 0000000..a99a3fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityOnFire$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityOnFire.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityOnFire.class new file mode 100644 index 0000000..2303087 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityOnFire.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityProperty$Serializer.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityProperty$Serializer.class new file mode 100644 index 0000000..a4aa304 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityProperty$Serializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityProperty.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityProperty.class new file mode 100644 index 0000000..30f03eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityPropertyManager.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityPropertyManager.class new file mode 100644 index 0000000..6e20bb0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/EntityPropertyManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/package-info.class new file mode 100644 index 0000000..071eaf8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/loot/properties/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraft/world/storage/package-info.class b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/package-info.class new file mode 100644 index 0000000..3c0117f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraft/world/storage/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/advancements/critereon/ItemPredicates.class b/build/tmp/recompileMc/compiled/net/minecraftforge/advancements/critereon/ItemPredicates.class new file mode 100644 index 0000000..c49a44b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/advancements/critereon/ItemPredicates.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/advancements/critereon/OredictItemPredicate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/advancements/critereon/OredictItemPredicate.class new file mode 100644 index 0000000..670f5e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/advancements/critereon/OredictItemPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/classloading/FMLForgePlugin.class b/build/tmp/recompileMc/compiled/net/minecraftforge/classloading/FMLForgePlugin.class new file mode 100644 index 0000000..35fcc3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/classloading/FMLForgePlugin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/ClientCommandHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ClientCommandHandler.class new file mode 100644 index 0000000..d7b6359 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ClientCommandHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/CloudRenderer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/CloudRenderer.class new file mode 100644 index 0000000..daa3ae2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/CloudRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/EnumHelperClient.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/EnumHelperClient.class new file mode 100644 index 0000000..8263bce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/EnumHelperClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/FluidContainerColorer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/FluidContainerColorer.class new file mode 100644 index 0000000..1445ff8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/FluidContainerColorer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeClientHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeClientHandler.class new file mode 100644 index 0000000..112a138 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeClientHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeHooksClient$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeHooksClient$1.class new file mode 100644 index 0000000..492775f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeHooksClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeHooksClient.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeHooksClient.class new file mode 100644 index 0000000..4999b3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ForgeHooksClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge$1.class new file mode 100644 index 0000000..f3d7746 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge$GuiOverlayDebugForge.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge$GuiOverlayDebugForge.class new file mode 100644 index 0000000..c412616 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge$GuiOverlayDebugForge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge.class new file mode 100644 index 0000000..f00165c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/GuiIngameForge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/IClientCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/IClientCommand.class new file mode 100644 index 0000000..924be7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/IClientCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/IRenderContextHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/IRenderContextHandler.class new file mode 100644 index 0000000..7852b3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/IRenderContextHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/IRenderHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/IRenderHandler.class new file mode 100644 index 0000000..0f7c27e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/IRenderHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/ItemModelMesherForge.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ItemModelMesherForge.class new file mode 100644 index 0000000..bf38935 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/ItemModelMesherForge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/MinecraftForgeClient$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/MinecraftForgeClient$1.class new file mode 100644 index 0000000..4ffaab2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/MinecraftForgeClient$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/MinecraftForgeClient.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/MinecraftForgeClient.class new file mode 100644 index 0000000..3e58805 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/MinecraftForgeClient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ClientChatEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ClientChatEvent.class new file mode 100644 index 0000000..188c1ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ClientChatEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ClientChatReceivedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ClientChatReceivedEvent.class new file mode 100644 index 0000000..421bfe7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ClientChatReceivedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent$Block.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent$Block.class new file mode 100644 index 0000000..73e4636 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent$Block.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent$Item.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent$Item.class new file mode 100644 index 0000000..2a3636f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent$Item.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent.class new file mode 100644 index 0000000..d3b1bf6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ColorHandlerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/DrawBlockHighlightEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/DrawBlockHighlightEvent.class new file mode 100644 index 0000000..a05f93f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/DrawBlockHighlightEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$CameraSetup.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$CameraSetup.class new file mode 100644 index 0000000..bda0b26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$CameraSetup.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FOVModifier.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FOVModifier.class new file mode 100644 index 0000000..b1e5738 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FOVModifier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FogColors.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FogColors.class new file mode 100644 index 0000000..6c258b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FogColors.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FogDensity.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FogDensity.class new file mode 100644 index 0000000..5a6d972 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$FogDensity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$RenderFogEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$RenderFogEvent.class new file mode 100644 index 0000000..f872c1e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent$RenderFogEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent.class new file mode 100644 index 0000000..6a6032b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/EntityViewRenderEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/FOVUpdateEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/FOVUpdateEvent.class new file mode 100644 index 0000000..29c37b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/FOVUpdateEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiContainerEvent$DrawForeground.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiContainerEvent$DrawForeground.class new file mode 100644 index 0000000..df070b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiContainerEvent$DrawForeground.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiContainerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiContainerEvent.class new file mode 100644 index 0000000..df4b01c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiContainerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiOpenEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiOpenEvent.class new file mode 100644 index 0000000..81ba15e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiOpenEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent$Post.class new file mode 100644 index 0000000..5855c07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent$Pre.class new file mode 100644 index 0000000..dee598d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent.class new file mode 100644 index 0000000..749a8ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$ActionPerformedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$BackgroundDrawnEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$BackgroundDrawnEvent.class new file mode 100644 index 0000000..5e8f2b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$BackgroundDrawnEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Post.class new file mode 100644 index 0000000..9f3da01 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Pre.class new file mode 100644 index 0000000..d6c5b66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent.class new file mode 100644 index 0000000..c303b30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$DrawScreenEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent$Post.class new file mode 100644 index 0000000..b0076d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent$Pre.class new file mode 100644 index 0000000..a534dda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent.class new file mode 100644 index 0000000..32074d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$InitGuiEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent$Post.class new file mode 100644 index 0000000..96c281c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent$Pre.class new file mode 100644 index 0000000..426e9ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent.class new file mode 100644 index 0000000..6f47c94 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$KeyboardInputEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent$Post.class new file mode 100644 index 0000000..17ef8ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent$Pre.class new file mode 100644 index 0000000..020ad33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent.class new file mode 100644 index 0000000..ad69a46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$MouseInputEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$PotionShiftEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$PotionShiftEvent.class new file mode 100644 index 0000000..398d4b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent$PotionShiftEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent.class new file mode 100644 index 0000000..810802b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/GuiScreenEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/InputUpdateEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/InputUpdateEvent.class new file mode 100644 index 0000000..1e91922 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/InputUpdateEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ModelBakeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ModelBakeEvent.class new file mode 100644 index 0000000..04b9164 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ModelBakeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ModelRegistryEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ModelRegistryEvent.class new file mode 100644 index 0000000..a549f05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ModelRegistryEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/MouseEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/MouseEvent.class new file mode 100644 index 0000000..d74764f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/MouseEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/PlayerSPPushOutOfBlocksEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/PlayerSPPushOutOfBlocksEvent.class new file mode 100644 index 0000000..6648dbf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/PlayerSPPushOutOfBlocksEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderBlockOverlayEvent$OverlayType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderBlockOverlayEvent$OverlayType.class new file mode 100644 index 0000000..6915a25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderBlockOverlayEvent$OverlayType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderBlockOverlayEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderBlockOverlayEvent.class new file mode 100644 index 0000000..2e834cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderBlockOverlayEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$1.class new file mode 100644 index 0000000..1fd5225 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$BossInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$BossInfo.class new file mode 100644 index 0000000..6e1ab6b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$BossInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Chat.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Chat.class new file mode 100644 index 0000000..bed22d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Chat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$ElementType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$ElementType.class new file mode 100644 index 0000000..6a00a77 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$ElementType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Post.class new file mode 100644 index 0000000..1dcdaa6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Pre.class new file mode 100644 index 0000000..0c2fb6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Text.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Text.class new file mode 100644 index 0000000..89e5cc4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent$Text.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent.class new file mode 100644 index 0000000..73701f7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderGameOverlayEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderHandEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderHandEvent.class new file mode 100644 index 0000000..f8cbb16 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderHandEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderItemInFrameEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderItemInFrameEvent.class new file mode 100644 index 0000000..331f592 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderItemInFrameEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Post.class new file mode 100644 index 0000000..ab9bfb9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Pre.class new file mode 100644 index 0000000..cf1cdab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials$Post.class new file mode 100644 index 0000000..6889550 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials$Pre.class new file mode 100644 index 0000000..81c80ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials.class new file mode 100644 index 0000000..e4fd531 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent$Specials.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent.class new file mode 100644 index 0000000..267e2fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderLivingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Post.class new file mode 100644 index 0000000..153a8be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Pre.class new file mode 100644 index 0000000..0656458 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$SetArmorModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$SetArmorModel.class new file mode 100644 index 0000000..8589d21 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$SetArmorModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials$Post.class new file mode 100644 index 0000000..2ae9d64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials$Pre.class new file mode 100644 index 0000000..f25ba02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials.class new file mode 100644 index 0000000..2a7d596 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent$Specials.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent.class new file mode 100644 index 0000000..3af06c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderPlayerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderSpecificHandEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderSpecificHandEvent.class new file mode 100644 index 0000000..0c27403 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderSpecificHandEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Color.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Color.class new file mode 100644 index 0000000..3295a1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Color.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Post.class new file mode 100644 index 0000000..d46e24d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$PostBackground.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$PostBackground.class new file mode 100644 index 0000000..e841957 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$PostBackground.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$PostText.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$PostText.class new file mode 100644 index 0000000..3d062bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$PostText.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Pre.class new file mode 100644 index 0000000..428626d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent.class new file mode 100644 index 0000000..eef4377 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderTooltipEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderWorldLastEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderWorldLastEvent.class new file mode 100644 index 0000000..da42b2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/RenderWorldLastEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ScreenshotEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ScreenshotEvent.class new file mode 100644 index 0000000..b82496d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/ScreenshotEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent$Post.class new file mode 100644 index 0000000..776864c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent$Pre.class new file mode 100644 index 0000000..dc7d1aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent.class new file mode 100644 index 0000000..dc82d09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/TextureStitchEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlaySoundEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlaySoundEvent.class new file mode 100644 index 0000000..bf8ceb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlaySoundEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlaySoundSourceEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlaySoundSourceEvent.class new file mode 100644 index 0000000..97e219f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlaySoundSourceEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlayStreamingSourceEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlayStreamingSourceEvent.class new file mode 100644 index 0000000..14ef1dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/PlayStreamingSourceEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundEvent$SoundSourceEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundEvent$SoundSourceEvent.class new file mode 100644 index 0000000..041d571 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundEvent$SoundSourceEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundEvent.class new file mode 100644 index 0000000..c7afac6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundLoadEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundLoadEvent.class new file mode 100644 index 0000000..c800247 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundLoadEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundSetupEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundSetupEvent.class new file mode 100644 index 0000000..779b127 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/event/sound/SoundSetupEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$AddModOverrideEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$AddModOverrideEntry.class new file mode 100644 index 0000000..bb35367 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$AddModOverrideEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ChunkLoaderEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ChunkLoaderEntry.class new file mode 100644 index 0000000..22dea66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ChunkLoaderEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ClientEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ClientEntry.class new file mode 100644 index 0000000..97e8b9e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ClientEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$GeneralEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$GeneralEntry.class new file mode 100644 index 0000000..a0a18b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$GeneralEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ModIDEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ModIDEntry.class new file mode 100644 index 0000000..c8a0277 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ModIDEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ModOverridesEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ModOverridesEntry.class new file mode 100644 index 0000000..61f1571 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$ModOverridesEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$VersionCheckEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$VersionCheckEntry.class new file mode 100644 index 0000000..e6b339d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui$VersionCheckEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui.class new file mode 100644 index 0000000..3f92864 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory$ForgeConfigGui.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory.class new file mode 100644 index 0000000..3141b33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/ForgeGuiFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/NotificationModUpdateScreen.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/NotificationModUpdateScreen.class new file mode 100644 index 0000000..7f1ea30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/gui/NotificationModUpdateScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/Attributes.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/Attributes.class new file mode 100644 index 0000000..f364591 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/Attributes.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedItemModel$BakedGuiItemModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedItemModel$BakedGuiItemModel.class new file mode 100644 index 0000000..f12fd79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedItemModel$BakedGuiItemModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedItemModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedItemModel.class new file mode 100644 index 0000000..6e87050 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedItemModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedModelWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedModelWrapper.class new file mode 100644 index 0000000..b6c59c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BakedModelWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$ForgeVariant.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$ForgeVariant.class new file mode 100644 index 0000000..0f6f86c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$ForgeVariant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$Marker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$Marker.class new file mode 100644 index 0000000..fba69bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$Marker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$SubModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$SubModel.class new file mode 100644 index 0000000..0f0d547 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader$SubModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader.class new file mode 100644 index 0000000..1b05cfd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/BlockStateLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$1$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$1$1.class new file mode 100644 index 0000000..0bb82c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$1.class new file mode 100644 index 0000000..e8eb670 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$2.class new file mode 100644 index 0000000..601fadd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$BakedModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$BakedModel.class new file mode 100644 index 0000000..1198aa7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel$BakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel.class new file mode 100644 index 0000000..0aba05a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/FancyMissingModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$1.class new file mode 100644 index 0000000..0f0298c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Deserializer.class new file mode 100644 index 0000000..ab2d340 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$TRSRDeserializer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$TRSRDeserializer.class new file mode 100644 index 0000000..97c875f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$TRSRDeserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Variant$Deserializer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Variant$Deserializer.class new file mode 100644 index 0000000..0304c61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Variant$Deserializer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Variant.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Variant.class new file mode 100644 index 0000000..8d8a8cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1$Variant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1.class new file mode 100644 index 0000000..53ed6e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ForgeBlockStateV1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ICustomModelLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ICustomModelLoader.class new file mode 100644 index 0000000..5141f73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ICustomModelLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/IModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/IModel.class new file mode 100644 index 0000000..13482d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/IModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ISmartVariant.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ISmartVariant.class new file mode 100644 index 0000000..a026f7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ISmartVariant.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$1.class new file mode 100644 index 0000000..36e9a0d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$FaceData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$FaceData.class new file mode 100644 index 0000000..b920115 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$FaceData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$Loader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$Loader.class new file mode 100644 index 0000000..e2ba625 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel$Loader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel.class new file mode 100644 index 0000000..742fca3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemLayerModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemTextureQuadConverter$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemTextureQuadConverter$1.class new file mode 100644 index 0000000..3e1a262 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemTextureQuadConverter$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemTextureQuadConverter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemTextureQuadConverter.class new file mode 100644 index 0000000..83e9d55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ItemTextureQuadConverter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MapModelState$Wrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MapModelState$Wrapper.class new file mode 100644 index 0000000..e4dda2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MapModelState$Wrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MapModelState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MapModelState.class new file mode 100644 index 0000000..e89565f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MapModelState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$1.class new file mode 100644 index 0000000..6fac35f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BakedDynBucket.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BakedDynBucket.class new file mode 100644 index 0000000..2f2a94d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BakedDynBucket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BakedDynBucketOverrideHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BakedDynBucketOverrideHandler.class new file mode 100644 index 0000000..97584ca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BakedDynBucketOverrideHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BucketBaseSprite.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BucketBaseSprite.class new file mode 100644 index 0000000..2a6d88c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BucketBaseSprite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BucketCoverSprite.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BucketCoverSprite.class new file mode 100644 index 0000000..190e0fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$BucketCoverSprite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$LoaderDynBucket.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$LoaderDynBucket.class new file mode 100644 index 0000000..e47ecb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket$LoaderDynBucket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket.class new file mode 100644 index 0000000..e57742a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelDynBucket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$1.class new file mode 100644 index 0000000..ea148a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$BakedFluid$VertexParameter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$BakedFluid$VertexParameter.class new file mode 100644 index 0000000..ad17ca0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$BakedFluid$VertexParameter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$BakedFluid.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$BakedFluid.class new file mode 100644 index 0000000..6da92a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$BakedFluid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$CachingBakedFluid$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$CachingBakedFluid$1.class new file mode 100644 index 0000000..7f8aff7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$CachingBakedFluid$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$CachingBakedFluid.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$CachingBakedFluid.class new file mode 100644 index 0000000..6ebaa55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$CachingBakedFluid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$FluidLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$FluidLoader.class new file mode 100644 index 0000000..5cb3d2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid$FluidLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid.class new file mode 100644 index 0000000..a72dc15 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelFluid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$BakedModelCacheKey.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$BakedModelCacheKey.class new file mode 100644 index 0000000..91a1748 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$BakedModelCacheKey.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$DefaultTextureGetter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$DefaultTextureGetter.class new file mode 100644 index 0000000..674c8a0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$DefaultTextureGetter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$ItemLoadingException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$ItemLoadingException.class new file mode 100644 index 0000000..0874915 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$ItemLoadingException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$MultipartModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$MultipartModel.class new file mode 100644 index 0000000..9e00a9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$MultipartModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaLoader$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaLoader$1.class new file mode 100644 index 0000000..ba3ba30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaLoader$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaLoader.class new file mode 100644 index 0000000..cfd1f83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaModelWrapper$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaModelWrapper$1.class new file mode 100644 index 0000000..3768a6d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaModelWrapper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaModelWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaModelWrapper.class new file mode 100644 index 0000000..94dc104 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VanillaModelWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VariantLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VariantLoader.class new file mode 100644 index 0000000..18206b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$VariantLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$WeightedRandomModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$WeightedRandomModel.class new file mode 100644 index 0000000..2bdbb92 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$WeightedRandomModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$White.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$White.class new file mode 100644 index 0000000..258945d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader$White.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader.class new file mode 100644 index 0000000..a39e7d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoaderRegistry$LoaderException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoaderRegistry$LoaderException.class new file mode 100644 index 0000000..89d7f54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoaderRegistry$LoaderException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoaderRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoaderRegistry.class new file mode 100644 index 0000000..954418d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelLoaderRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelStateComposition.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelStateComposition.class new file mode 100644 index 0000000..9819de9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/ModelStateComposition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel$Loader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel$Loader.class new file mode 100644 index 0000000..f8026b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel$Loader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel$MultiLayerBakedModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel$MultiLayerBakedModel.class new file mode 100644 index 0000000..42d1f3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel$MultiLayerBakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel.class new file mode 100644 index 0000000..66e79ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiLayerModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel$Baked$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel$Baked$1.class new file mode 100644 index 0000000..7986ca0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel$Baked$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel$Baked.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel$Baked.class new file mode 100644 index 0000000..6f8efa0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel$Baked.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel.class new file mode 100644 index 0000000..9122ec8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$MultiModelPart.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$MultiModelPart.class new file mode 100644 index 0000000..b0a8763 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$MultiModelPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$PartPart.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$PartPart.class new file mode 100644 index 0000000..ec11bab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$PartPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$PartState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$PartState.class new file mode 100644 index 0000000..6911238 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState$PartState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState.class new file mode 100644 index 0000000..30dd36c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/MultiModelState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/PerspectiveMapWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/PerspectiveMapWrapper.class new file mode 100644 index 0000000..13baae5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/PerspectiveMapWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelFontRenderer$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelFontRenderer$1.class new file mode 100644 index 0000000..de0791b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelFontRenderer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelFontRenderer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelFontRenderer.class new file mode 100644 index 0000000..3c810e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelFontRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelState.class new file mode 100644 index 0000000..8605f0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/SimpleModelState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/Animation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/Animation.class new file mode 100644 index 0000000..586829c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/Animation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationItemOverrideList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationItemOverrideList.class new file mode 100644 index 0000000..42efe18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationItemOverrideList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationModelBase.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationModelBase.class new file mode 100644 index 0000000..d12a5c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationModelBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationTESR.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationTESR.class new file mode 100644 index 0000000..aee0877 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/AnimationTESR.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/FastTESR.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/FastTESR.class new file mode 100644 index 0000000..e266f66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/FastTESR.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$1.class new file mode 100644 index 0000000..bee503c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$1$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$1$1.class new file mode 100644 index 0000000..1e54dd9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$1$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$1.class new file mode 100644 index 0000000..ce7fc2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$MBJointClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$MBJointClip.class new file mode 100644 index 0000000..89f3eb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip$MBJointClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip.class new file mode 100644 index 0000000..3a41611 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBJoint.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBJoint.class new file mode 100644 index 0000000..08d7183 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBJoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBJointWeight.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBJointWeight.class new file mode 100644 index 0000000..31a6eba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBJointWeight.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBVariableClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBVariableClip.class new file mode 100644 index 0000000..b355fd8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$MBVariableClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Interpolation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Interpolation.class new file mode 100644 index 0000000..8e1f72e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Interpolation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Type.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Type.class new file mode 100644 index 0000000..d2b724a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Variable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Variable.class new file mode 100644 index 0000000..53a3b25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter$Variable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter.class new file mode 100644 index 0000000..4ceb638 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation$Parameter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation.class new file mode 100644 index 0000000..01bb52f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/ModelBlockAnimation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/package-info.class new file mode 100644 index 0000000..9ba4b5b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/animation/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DClip$NodeClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DClip$NodeClip.class new file mode 100644 index 0000000..6959307 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DClip$NodeClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DClip.class new file mode 100644 index 0000000..602ba5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$1.class new file mode 100644 index 0000000..5bf56b5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$B3DState$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$B3DState$1.class new file mode 100644 index 0000000..77d2f72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$B3DState$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$B3DState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$B3DState.class new file mode 100644 index 0000000..a58dae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$B3DState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$1.class new file mode 100644 index 0000000..3386a73 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$2$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$2$1.class new file mode 100644 index 0000000..decb25b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$2$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$2.class new file mode 100644 index 0000000..5bc33db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper.class new file mode 100644 index 0000000..6ad4918 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$BakedWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$ModelWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$ModelWrapper.class new file mode 100644 index 0000000..fc1b998 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$ModelWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$NodeJoint.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$NodeJoint.class new file mode 100644 index 0000000..62b9e95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader$NodeJoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader.class new file mode 100644 index 0000000..87b7b56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Animation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Animation.class new file mode 100644 index 0000000..d2cd331 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Animation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Bone.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Bone.class new file mode 100644 index 0000000..28f13de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Bone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Brush.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Brush.class new file mode 100644 index 0000000..8ad74fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Brush.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Face.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Face.class new file mode 100644 index 0000000..12941f3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Face.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$IKind.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$IKind.class new file mode 100644 index 0000000..723f11d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$IKind.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Key.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Key.class new file mode 100644 index 0000000..763036b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Key.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Mesh.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Mesh.class new file mode 100644 index 0000000..17a68be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Mesh.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Node.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Node.class new file mode 100644 index 0000000..13ff66e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Node.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Parser.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Parser.class new file mode 100644 index 0000000..9152319 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Parser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Pivot.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Pivot.class new file mode 100644 index 0000000..c5286e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Pivot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Texture.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Texture.class new file mode 100644 index 0000000..642a6ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Texture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Vertex.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Vertex.class new file mode 100644 index 0000000..1b87fda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel$Vertex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel.class new file mode 100644 index 0000000..1287369 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/B3DModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/package-info.class new file mode 100644 index 0000000..d7a3e57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/b3d/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJLoader.class new file mode 100644 index 0000000..b72f4df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$1.class new file mode 100644 index 0000000..5fa7550 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$CustomData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$CustomData.class new file mode 100644 index 0000000..bc94afd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$CustomData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Face.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Face.class new file mode 100644 index 0000000..ea355e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Face.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Group.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Group.class new file mode 100644 index 0000000..bb25749 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Group.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Material.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Material.class new file mode 100644 index 0000000..2542a54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Material.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$MaterialLibrary.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$MaterialLibrary.class new file mode 100644 index 0000000..10c9eac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$MaterialLibrary.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Normal.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Normal.class new file mode 100644 index 0000000..9243422 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Normal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJBakedModel$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJBakedModel$1.class new file mode 100644 index 0000000..8007ad1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJBakedModel$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJBakedModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJBakedModel.class new file mode 100644 index 0000000..842f6f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJBakedModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJProperty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJProperty.class new file mode 100644 index 0000000..4b1761b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJState$Operation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJState$Operation.class new file mode 100644 index 0000000..7cd9d3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJState$Operation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJState.class new file mode 100644 index 0000000..8b90d9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$OBJState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Parser.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Parser.class new file mode 100644 index 0000000..023014c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Parser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Texture.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Texture.class new file mode 100644 index 0000000..e28ad13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Texture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$TextureCoordinate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$TextureCoordinate.class new file mode 100644 index 0000000..b719f1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$TextureCoordinate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$UVsOutOfBoundsException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$UVsOutOfBoundsException.class new file mode 100644 index 0000000..8b066c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$UVsOutOfBoundsException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Vertex.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Vertex.class new file mode 100644 index 0000000..4483a35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel$Vertex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel.class new file mode 100644 index 0000000..8879399 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/OBJModel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/package-info.class new file mode 100644 index 0000000..cd0c302 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/obj/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/package-info.class new file mode 100644 index 0000000..8aea713 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/BlockInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/BlockInfo.class new file mode 100644 index 0000000..86b082d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/BlockInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.class new file mode 100644 index 0000000..e8689b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/IVertexConsumer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/IVertexConsumer.class new file mode 100644 index 0000000..6e3b8b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/IVertexConsumer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/IVertexProducer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/IVertexProducer.class new file mode 100644 index 0000000..57d8c87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/IVertexProducer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil$1.class new file mode 100644 index 0000000..ab80c0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil$ItemConsumer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil$ItemConsumer.class new file mode 100644 index 0000000..3055d07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil$ItemConsumer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil.class new file mode 100644 index 0000000..4d4ff3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/LightUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/QuadGatheringTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/QuadGatheringTransformer.class new file mode 100644 index 0000000..4493d0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/QuadGatheringTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/TransformerConsumer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/TransformerConsumer.class new file mode 100644 index 0000000..4a6c4d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/TransformerConsumer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/UnpackedBakedQuad$Builder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/UnpackedBakedQuad$Builder.class new file mode 100644 index 0000000..67e8357 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/UnpackedBakedQuad$Builder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/UnpackedBakedQuad.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/UnpackedBakedQuad.class new file mode 100644 index 0000000..f104cad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/UnpackedBakedQuad.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexBufferConsumer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexBufferConsumer.class new file mode 100644 index 0000000..21df830 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexBufferConsumer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterFlat$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterFlat$1.class new file mode 100644 index 0000000..5430074 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterFlat$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterFlat.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterFlat.class new file mode 100644 index 0000000..9c8f826 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterFlat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterSmoothAo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterSmoothAo.class new file mode 100644 index 0000000..6ce0c8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexLighterSmoothAo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexTransformer.class new file mode 100644 index 0000000..72fd838 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/VertexTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/package-info.class new file mode 100644 index 0000000..7f85a89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/model/pipeline/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/IResourceType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/IResourceType.class new file mode 100644 index 0000000..e634055 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/IResourceType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/ISelectiveResourceReloadListener.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/ISelectiveResourceReloadListener.class new file mode 100644 index 0000000..b377a21 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/ISelectiveResourceReloadListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/ReloadRequirements.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/ReloadRequirements.class new file mode 100644 index 0000000..956a3e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/ReloadRequirements.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/SelectiveReloadStateHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/SelectiveReloadStateHandler.class new file mode 100644 index 0000000..a6f29f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/SelectiveReloadStateHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/VanillaResourceType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/VanillaResourceType.class new file mode 100644 index 0000000..db4bcb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/VanillaResourceType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/package-info.class new file mode 100644 index 0000000..0e06654 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/resource/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/IKeyConflictContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/IKeyConflictContext.class new file mode 100644 index 0000000..d4860b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/IKeyConflictContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyBindingMap.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyBindingMap.class new file mode 100644 index 0000000..bd22f5d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyBindingMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$1.class new file mode 100644 index 0000000..0b11b35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$2.class new file mode 100644 index 0000000..23a15ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$3.class new file mode 100644 index 0000000..e88cdf5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext.class new file mode 100644 index 0000000..c4ea9e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyConflictContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$1.class new file mode 100644 index 0000000..94f7486 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$2.class new file mode 100644 index 0000000..47f5404 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$3.class new file mode 100644 index 0000000..9965bad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$4.class new file mode 100644 index 0000000..d790944 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier.class b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier.class new file mode 100644 index 0000000..157cda4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/client/settings/KeyModifier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$1.class new file mode 100644 index 0000000..a17a0dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$BiomeInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$BiomeInfo.class new file mode 100644 index 0000000..289ff23 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$BiomeInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$Type.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$Type.class new file mode 100644 index 0000000..44e3ee5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary.class new file mode 100644 index 0000000..7ec4a2f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeDictionary.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$BiomeEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$BiomeEntry.class new file mode 100644 index 0000000..4ea547a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$BiomeEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$BiomeType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$BiomeType.class new file mode 100644 index 0000000..e8b6467 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$BiomeType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$TrackedList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$TrackedList.class new file mode 100644 index 0000000..2142967 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager$TrackedList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager.class new file mode 100644 index 0000000..c67c8e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/BiomeManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager$1.class new file mode 100644 index 0000000..1b50944 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager$Dimension.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager$Dimension.class new file mode 100644 index 0000000..aed8d30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager$Dimension.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager.class new file mode 100644 index 0000000..0f54827 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DimensionManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/DungeonHooks$DungeonMob.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DungeonHooks$DungeonMob.class new file mode 100644 index 0000000..850c9e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DungeonHooks$DungeonMob.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/DungeonHooks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DungeonHooks.class new file mode 100644 index 0000000..36e0931 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/DungeonHooks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/EnumPlantType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/EnumPlantType.class new file mode 100644 index 0000000..50a98f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/EnumPlantType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$ChunkEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$ChunkEntry.class new file mode 100644 index 0000000..2b4d262 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$ChunkEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent.class new file mode 100644 index 0000000..32b77b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$ForceChunkEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$LoadingCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$LoadingCallback.class new file mode 100644 index 0000000..e03b845 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$LoadingCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$OrderedLoadingCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$OrderedLoadingCallback.class new file mode 100644 index 0000000..c64d71a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$OrderedLoadingCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$PlayerOrderedLoadingCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$PlayerOrderedLoadingCallback.class new file mode 100644 index 0000000..c1614ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$PlayerOrderedLoadingCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$Ticket.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$Ticket.class new file mode 100644 index 0000000..bef802f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$Ticket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$Type.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$Type.class new file mode 100644 index 0000000..ead35d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent.class new file mode 100644 index 0000000..65290e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager$UnforceChunkEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager.class new file mode 100644 index 0000000..aa0d06c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeChunkManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$1.class new file mode 100644 index 0000000..1917bc5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$2.class new file mode 100644 index 0000000..b0ecd6c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$LootTableContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$LootTableContext.class new file mode 100644 index 0000000..0009409 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$LootTableContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$SeedEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$SeedEntry.class new file mode 100644 index 0000000..7f0b28a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks$SeedEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks.class new file mode 100644 index 0000000..ca15702 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeHooks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeInternalHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeInternalHandler.class new file mode 100644 index 0000000..ce59baf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeInternalHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeModContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeModContainer.class new file mode 100644 index 0000000..1704493 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeModContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$1.class new file mode 100644 index 0000000..6e4a29b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$CheckResult.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$CheckResult.class new file mode 100644 index 0000000..ef74474 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$CheckResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$Status.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$Status.class new file mode 100644 index 0000000..7a38ea9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion$Status.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion.class new file mode 100644 index 0000000..76af518 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ForgeVersion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/IMinecartCollisionHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/IMinecartCollisionHandler.class new file mode 100644 index 0000000..2885f1c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/IMinecartCollisionHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/IPlantable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/IPlantable.class new file mode 100644 index 0000000..30ef230 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/IPlantable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/IShearable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/IShearable.class new file mode 100644 index 0000000..a473d5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/IShearable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ISpecialArmor$ArmorProperties.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ISpecialArmor$ArmorProperties.class new file mode 100644 index 0000000..6a40202 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ISpecialArmor$ArmorProperties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/ISpecialArmor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ISpecialArmor.class new file mode 100644 index 0000000..7d576c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/ISpecialArmor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/MinecraftForge.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/MinecraftForge.class new file mode 100644 index 0000000..66e4b3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/MinecraftForge.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache$1.class new file mode 100644 index 0000000..7652c7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache$SaveThread.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache$SaveThread.class new file mode 100644 index 0000000..0bb0f59 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache$SaveThread.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache.class new file mode 100644 index 0000000..da984be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/UsernameCache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldSpecificSaveHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldSpecificSaveHandler.class new file mode 100644 index 0000000..970bee4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldSpecificSaveHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldWorkerManager$IWorker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldWorkerManager$IWorker.class new file mode 100644 index 0000000..05f5eba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldWorkerManager$IWorker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldWorkerManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldWorkerManager.class new file mode 100644 index 0000000..4a12e7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/WorldWorkerManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/Event.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/Event.class new file mode 100644 index 0000000..c721d2f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/Event.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/IEventHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/IEventHandler.class new file mode 100644 index 0000000..331981d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/IEventHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/ITimeValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/ITimeValue.class new file mode 100644 index 0000000..f0c77dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/ITimeValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$1.class new file mode 100644 index 0000000..7f9af19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CommonTimeValueTypeAdapterFactory$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CommonTimeValueTypeAdapterFactory$1.class new file mode 100644 index 0000000..4e45cb6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CommonTimeValueTypeAdapterFactory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CommonTimeValueTypeAdapterFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CommonTimeValueTypeAdapterFactory.class new file mode 100644 index 0000000..6028987 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CommonTimeValueTypeAdapterFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CompositionValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CompositionValue.class new file mode 100644 index 0000000..c8f964a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$CompositionValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$ConstValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$ConstValue.class new file mode 100644 index 0000000..cdf3c4e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$ConstValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$IdentityValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$IdentityValue.class new file mode 100644 index 0000000..f8c8976 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$IdentityValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$ParameterValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$ParameterValue.class new file mode 100644 index 0000000..e616906 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$ParameterValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$SimpleExprValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$SimpleExprValue.class new file mode 100644 index 0000000..bb7f555 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$SimpleExprValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$VariableValue.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$VariableValue.class new file mode 100644 index 0000000..ae8ad9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues$VariableValue.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues.class new file mode 100644 index 0000000..ed701e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/animation/TimeValues.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/AbstractBrewingRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/AbstractBrewingRecipe.class new file mode 100644 index 0000000..d5538f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/AbstractBrewingRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingOreRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingOreRecipe.class new file mode 100644 index 0000000..d6285a2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingOreRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingRecipe.class new file mode 100644 index 0000000..a1d4e68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingRecipeRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingRecipeRegistry.class new file mode 100644 index 0000000..3217ff5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/BrewingRecipeRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/IBrewingRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/IBrewingRecipe.class new file mode 100644 index 0000000..85ee79e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/IBrewingRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/VanillaBrewingRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/VanillaBrewingRecipe.class new file mode 100644 index 0000000..cccb319 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/brewing/VanillaBrewingRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/Capability$IStorage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/Capability$IStorage.class new file mode 100644 index 0000000..4f3c621 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/Capability$IStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/Capability.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/Capability.class new file mode 100644 index 0000000..e3d6f86 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/Capability.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityDispatcher.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityDispatcher.class new file mode 100644 index 0000000..3e63aa8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityDispatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityInject.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityInject.class new file mode 100644 index 0000000..35c39ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityInject.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager$1.class new file mode 100644 index 0000000..f9dbeb9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager$2.class new file mode 100644 index 0000000..115c0c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager.class new file mode 100644 index 0000000..56fb94c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/CapabilityManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/ICapabilityProvider.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/ICapabilityProvider.class new file mode 100644 index 0000000..ae965db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/ICapabilityProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/ICapabilitySerializable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/ICapabilitySerializable.class new file mode 100644 index 0000000..ed301eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/capabilities/ICapabilitySerializable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOExecutor$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOExecutor$1.class new file mode 100644 index 0000000..41a191d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOExecutor$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOExecutor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOExecutor.class new file mode 100644 index 0000000..f096835 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOExecutor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOProvider.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOProvider.class new file mode 100644 index 0000000..8bdb309 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOThreadPoolExecutor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOThreadPoolExecutor.class new file mode 100644 index 0000000..59c5885 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/ChunkIOThreadPoolExecutor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/QueuedChunk.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/QueuedChunk.class new file mode 100644 index 0000000..84eee96 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/chunkio/QueuedChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandler.class new file mode 100644 index 0000000..72faa1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandlerManager$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandlerManager$1.class new file mode 100644 index 0000000..93d5bb6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandlerManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandlerManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandlerManager.class new file mode 100644 index 0000000..e08ce4e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/command/SelectorHandlerManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Comment.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Comment.class new file mode 100644 index 0000000..362668f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Comment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Ignore.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Ignore.class new file mode 100644 index 0000000..344906e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Ignore.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$LangKey.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$LangKey.class new file mode 100644 index 0000000..7e8c8fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$LangKey.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Name.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Name.class new file mode 100644 index 0000000..8598d04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Name.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RangeDouble.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RangeDouble.class new file mode 100644 index 0000000..b48ffcf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RangeDouble.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RangeInt.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RangeInt.class new file mode 100644 index 0000000..0a6db29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RangeInt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RequiresMcRestart.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RequiresMcRestart.class new file mode 100644 index 0000000..6dc2afb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RequiresMcRestart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RequiresWorldRestart.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RequiresWorldRestart.class new file mode 100644 index 0000000..8909f43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$RequiresWorldRestart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Type.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Type.class new file mode 100644 index 0000000..87d4472 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config.class new file mode 100644 index 0000000..bb6a9e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Config.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigCategory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigCategory.class new file mode 100644 index 0000000..45fd168 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigCategory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigElement.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigElement.class new file mode 100644 index 0000000..6badcf1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigManager.class new file mode 100644 index 0000000..5e7ec65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ConfigManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Configuration$UnicodeInputStreamReader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Configuration$UnicodeInputStreamReader.class new file mode 100644 index 0000000..1466306 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Configuration$UnicodeInputStreamReader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Configuration.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Configuration.class new file mode 100644 index 0000000..4596a1d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Configuration.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$1.class new file mode 100644 index 0000000..6c4e654 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$BeanEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$BeanEntry.class new file mode 100644 index 0000000..3096c13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$BeanEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$EnumWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$EnumWrapper.class new file mode 100644 index 0000000..e0effb3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$EnumWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$MapWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$MapWrapper.class new file mode 100644 index 0000000..91e8171 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$MapWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$PrimitiveWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$PrimitiveWrapper.class new file mode 100644 index 0000000..fd13ce3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$PrimitiveWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$SingleValueFieldWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$SingleValueFieldWrapper.class new file mode 100644 index 0000000..d6db608 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper$SingleValueFieldWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper.class new file mode 100644 index 0000000..998ad64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/FieldWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/IFieldWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/IFieldWrapper.class new file mode 100644 index 0000000..350398d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/IFieldWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ITypeAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ITypeAdapter.class new file mode 100644 index 0000000..030981d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/ITypeAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Property$Type.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Property$Type.class new file mode 100644 index 0000000..e6b003d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Property$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Property.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Property.class new file mode 100644 index 0000000..dcb52b5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/Property.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$1.class new file mode 100644 index 0000000..f0e5508 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$10.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$10.class new file mode 100644 index 0000000..c362682 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$11.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$11.class new file mode 100644 index 0000000..f681be2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$11.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$12.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$12.class new file mode 100644 index 0000000..17357cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$12.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$13.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$13.class new file mode 100644 index 0000000..7054e96 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$13.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$14.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$14.class new file mode 100644 index 0000000..c7633e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$14.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$15.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$15.class new file mode 100644 index 0000000..d5b88bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$15.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$16.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$16.class new file mode 100644 index 0000000..e699144 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$16.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$17.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$17.class new file mode 100644 index 0000000..1dee011 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$17.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$18.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$18.class new file mode 100644 index 0000000..e7f94c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$18.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$19.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$19.class new file mode 100644 index 0000000..80141c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$19.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$2.class new file mode 100644 index 0000000..4ebcfcb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$20.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$20.class new file mode 100644 index 0000000..8c016e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$20.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$21.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$21.class new file mode 100644 index 0000000..94b0177 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$21.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$22.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$22.class new file mode 100644 index 0000000..429f476 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$22.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$23.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$23.class new file mode 100644 index 0000000..40cd3c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$23.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$24.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$24.class new file mode 100644 index 0000000..2fd9b21 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$24.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$25.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$25.class new file mode 100644 index 0000000..f201caf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$25.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$26.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$26.class new file mode 100644 index 0000000..cc07121 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$26.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$27.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$27.class new file mode 100644 index 0000000..06f0e49 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$27.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$28.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$28.class new file mode 100644 index 0000000..34fb9bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$28.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$29.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$29.class new file mode 100644 index 0000000..8a18cbe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$29.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$3.class new file mode 100644 index 0000000..55f17af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$30.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$30.class new file mode 100644 index 0000000..13dc7a7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$30.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$4.class new file mode 100644 index 0000000..f723661 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$5.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$5.class new file mode 100644 index 0000000..f594030 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$6.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$6.class new file mode 100644 index 0000000..c5f9164 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$7.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$7.class new file mode 100644 index 0000000..9aeaea8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$8.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$8.class new file mode 100644 index 0000000..29dcce9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$9.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$9.class new file mode 100644 index 0000000..56afc17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters.class new file mode 100644 index 0000000..fbe3948 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/config/TypeAdapters.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CompoundIngredient.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CompoundIngredient.class new file mode 100644 index 0000000..4206899 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CompoundIngredient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CraftingHelper$ShapedPrimer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CraftingHelper$ShapedPrimer.class new file mode 100644 index 0000000..ceccb08 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CraftingHelper$ShapedPrimer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CraftingHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CraftingHelper.class new file mode 100644 index 0000000..b5d8e5f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/CraftingHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IConditionFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IConditionFactory.class new file mode 100644 index 0000000..622f4a3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IConditionFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IIngredientFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IIngredientFactory.class new file mode 100644 index 0000000..d8117d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IIngredientFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IRecipeContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IRecipeContainer.class new file mode 100644 index 0000000..c698618 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IRecipeContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IRecipeFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IRecipeFactory.class new file mode 100644 index 0000000..40c05d4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IRecipeFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IShapedRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IShapedRecipe.class new file mode 100644 index 0000000..cea51ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IShapedRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IngredientNBT.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IngredientNBT.class new file mode 100644 index 0000000..c30e474 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/IngredientNBT.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/JsonContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/JsonContext.class new file mode 100644 index 0000000..a58ac09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/crafting/JsonContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/HiddenModelPart.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/HiddenModelPart.class new file mode 100644 index 0000000..5aa7c9b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/HiddenModelPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/IModelPart.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/IModelPart.class new file mode 100644 index 0000000..46ec2c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/IModelPart.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/IModelState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/IModelState.class new file mode 100644 index 0000000..2c7be99 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/IModelState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/ITransformation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/ITransformation.class new file mode 100644 index 0000000..d2afcb0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/ITransformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/Models.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/Models.class new file mode 100644 index 0000000..7f41513 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/Models.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation$1.class new file mode 100644 index 0000000..66ed854 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation$Cache.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation$Cache.class new file mode 100644 index 0000000..68770f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation$Cache.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation.class new file mode 100644 index 0000000..5343015 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/TRSRTransformation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$1.class new file mode 100644 index 0000000..b2836da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$2.class new file mode 100644 index 0000000..bfb628d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$3.class new file mode 100644 index 0000000..fba6900 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$ClipResolver.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$ClipResolver.class new file mode 100644 index 0000000..62ed094 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$ClipResolver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$ParameterResolver.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$ParameterResolver.class new file mode 100644 index 0000000..43313f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$ParameterResolver.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$1.class new file mode 100644 index 0000000..438bc9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$2.class new file mode 100644 index 0000000..f79cdac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$3.class new file mode 100644 index 0000000..070ee37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory.class new file mode 100644 index 0000000..57cf021 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine$TransitionsAdapterFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine.class new file mode 100644 index 0000000..9c20356 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/AnimationStateMachine.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation$1.class new file mode 100644 index 0000000..7f47165 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation$DefaultItemAnimationCapabilityProvider.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation$DefaultItemAnimationCapabilityProvider.class new file mode 100644 index 0000000..d38c7f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation$DefaultItemAnimationCapabilityProvider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation.class new file mode 100644 index 0000000..71d452d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/CapabilityAnimation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$1.class new file mode 100644 index 0000000..546f626 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$2.class new file mode 100644 index 0000000..ab7f4b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$3.class new file mode 100644 index 0000000..340e00f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$ClipReference.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$ClipReference.class new file mode 100644 index 0000000..1319e47 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$ClipReference.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$CommonClipTypeAdapterFactory$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$CommonClipTypeAdapterFactory$1.class new file mode 100644 index 0000000..a004721 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$CommonClipTypeAdapterFactory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$CommonClipTypeAdapterFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$CommonClipTypeAdapterFactory.class new file mode 100644 index 0000000..a8d57bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$CommonClipTypeAdapterFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$IdentityClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$IdentityClip.class new file mode 100644 index 0000000..9a1631f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$IdentityClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$ModelClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$ModelClip.class new file mode 100644 index 0000000..06a4cfa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$ModelClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$SlerpClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$SlerpClip.class new file mode 100644 index 0000000..4435998 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$SlerpClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TimeClip$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TimeClip$1.class new file mode 100644 index 0000000..7c7b296 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TimeClip$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TimeClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TimeClip.class new file mode 100644 index 0000000..8e08cb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TimeClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TriggerClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TriggerClip.class new file mode 100644 index 0000000..4213969 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips$TriggerClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips.class new file mode 100644 index 0000000..7643d45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/Clips.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IAnimationStateMachine.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IAnimationStateMachine.class new file mode 100644 index 0000000..49ab39b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IAnimationStateMachine.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IClip.class new file mode 100644 index 0000000..7058457 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IJoint.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IJoint.class new file mode 100644 index 0000000..b502c56 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IJoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IJointClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IJointClip.class new file mode 100644 index 0000000..ceb850c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/IJointClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips$IdentityJointClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips$IdentityJointClip.class new file mode 100644 index 0000000..0ecddad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips$IdentityJointClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips$NodeJointClip.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips$NodeJointClip.class new file mode 100644 index 0000000..c891e52 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips$NodeJointClip.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips.class new file mode 100644 index 0000000..ca655b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/model/animation/JointClips.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/DimensionMessageHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/DimensionMessageHandler.class new file mode 100644 index 0000000..ea0f354 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/DimensionMessageHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/FluidIdRegistryMessageHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/FluidIdRegistryMessageHandler.class new file mode 100644 index 0000000..8c9eebc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/FluidIdRegistryMessageHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage$DimensionRegisterMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage$DimensionRegisterMessage.class new file mode 100644 index 0000000..2f4f277 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage$DimensionRegisterMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage$FluidIdMapMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage$FluidIdMapMessage.class new file mode 100644 index 0000000..28a3680 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage$FluidIdMapMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage.class new file mode 100644 index 0000000..aec66ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeNetworkHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeNetworkHandler.class new file mode 100644 index 0000000..cdbd865 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeNetworkHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeRuntimeCodec.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeRuntimeCodec.class new file mode 100644 index 0000000..939038a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ForgeRuntimeCodec.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ServerToClientConnectionEstablishedHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ServerToClientConnectionEstablishedHandler.class new file mode 100644 index 0000000..bfc7067 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/network/ServerToClientConnectionEstablishedHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/ExtendedBlockState$ExtendedStateImplementation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/ExtendedBlockState$ExtendedStateImplementation.class new file mode 100644 index 0000000..b43358e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/ExtendedBlockState$ExtendedStateImplementation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/ExtendedBlockState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/ExtendedBlockState.class new file mode 100644 index 0000000..b296fcd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/ExtendedBlockState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/IExtendedBlockState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/IExtendedBlockState.class new file mode 100644 index 0000000..cecfe78 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/IExtendedBlockState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/IUnlistedProperty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/IUnlistedProperty.class new file mode 100644 index 0000000..1e1e201 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/IUnlistedProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties$1.class new file mode 100644 index 0000000..152e896 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties$PropertyAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties$PropertyAdapter.class new file mode 100644 index 0000000..c7245aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties$PropertyAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties.class new file mode 100644 index 0000000..6af2cfb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/Properties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/PropertyFloat.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/PropertyFloat.class new file mode 100644 index 0000000..970f07c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/property/PropertyFloat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/BlockSnapshot.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/BlockSnapshot.class new file mode 100644 index 0000000..55f66a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/BlockSnapshot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ChunkCoordComparator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ChunkCoordComparator.class new file mode 100644 index 0000000..cc02344 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ChunkCoordComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/CompoundDataFixer$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/CompoundDataFixer$1.class new file mode 100644 index 0000000..51b8244 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/CompoundDataFixer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/CompoundDataFixer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/CompoundDataFixer.class new file mode 100644 index 0000000..2d2a58a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/CompoundDataFixer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/Constants$NBT.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/Constants$NBT.class new file mode 100644 index 0000000..ac485a4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/Constants$NBT.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/Constants.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/Constants.class new file mode 100644 index 0000000..4ff4737 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/Constants.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper$1.class new file mode 100644 index 0000000..0bd8549 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper$2.class new file mode 100644 index 0000000..688639f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper.class new file mode 100644 index 0000000..38c727d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/EnumHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/FakePlayer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/FakePlayer.class new file mode 100644 index 0000000..5fb9dfd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/FakePlayer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/FakePlayerFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/FakePlayerFactory.class new file mode 100644 index 0000000..17115a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/FakePlayerFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/IDataFixerData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/IDataFixerData.class new file mode 100644 index 0000000..48bc7df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/IDataFixerData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/INBTSerializable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/INBTSerializable.class new file mode 100644 index 0000000..44bd42d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/INBTSerializable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ITeleporter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ITeleporter.class new file mode 100644 index 0000000..17072e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ITeleporter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$1.class new file mode 100644 index 0000000..bb3fff4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$2.class new file mode 100644 index 0000000..5868eaa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$3.class new file mode 100644 index 0000000..d963758 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$4.class new file mode 100644 index 0000000..01111f6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$ImmutableListTypeAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$ImmutableListTypeAdapter.class new file mode 100644 index 0000000..d2e9f60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$ImmutableListTypeAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$ImmutableMapTypeAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$ImmutableMapTypeAdapter.class new file mode 100644 index 0000000..8d6e501 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils$ImmutableMapTypeAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils.class new file mode 100644 index 0000000..997aae1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/JsonUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ModFixs.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ModFixs.class new file mode 100644 index 0000000..30f37e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/ModFixs.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/PacketUtil.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/PacketUtil.class new file mode 100644 index 0000000..cf6dddd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/PacketUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/RecipeMatcher.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/RecipeMatcher.class new file mode 100644 index 0000000..e32fafb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/RecipeMatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$1.class new file mode 100644 index 0000000..cc65382 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Alignment.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Alignment.class new file mode 100644 index 0000000..dda39f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Alignment.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Column.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Column.class new file mode 100644 index 0000000..6660ca7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Column.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Row.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Row.class new file mode 100644 index 0000000..a2680f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable$Row.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable.class new file mode 100644 index 0000000..76893c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/TextTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/WorldCapabilityData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/WorldCapabilityData.class new file mode 100644 index 0000000..2177ec4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/common/util/WorldCapabilityData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/energy/CapabilityEnergy$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/CapabilityEnergy$1.class new file mode 100644 index 0000000..92cae37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/CapabilityEnergy$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/energy/CapabilityEnergy.class b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/CapabilityEnergy.class new file mode 100644 index 0000000..cd840b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/CapabilityEnergy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/energy/EnergyStorage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/EnergyStorage.class new file mode 100644 index 0000000..49b2f54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/EnergyStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/energy/IEnergyStorage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/IEnergyStorage.class new file mode 100644 index 0000000..9e5cc58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/energy/IEnergyStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/AnvilUpdateEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/AnvilUpdateEvent.class new file mode 100644 index 0000000..d8ef60d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/AnvilUpdateEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/AttachCapabilitiesEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/AttachCapabilitiesEvent.class new file mode 100644 index 0000000..76d0fe7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/AttachCapabilitiesEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/CommandEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/CommandEvent.class new file mode 100644 index 0000000..4ec33a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/CommandEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/DifficultyChangeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/DifficultyChangeEvent.class new file mode 100644 index 0000000..9d5ad0f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/DifficultyChangeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/ForgeEventFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/ForgeEventFactory.class new file mode 100644 index 0000000..08255aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/ForgeEventFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/LootTableLoadEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/LootTableLoadEvent.class new file mode 100644 index 0000000..661ce04 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/LootTableLoadEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings$Action.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings$Action.class new file mode 100644 index 0000000..071e957 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings$Action.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings$Mapping.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings$Mapping.class new file mode 100644 index 0000000..cb672ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings$Mapping.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings.class new file mode 100644 index 0000000..5feaf95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$MissingMappings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$NewRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$NewRegistry.class new file mode 100644 index 0000000..3208e7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$NewRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$Register.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$Register.class new file mode 100644 index 0000000..85ccca9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent$Register.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent.class new file mode 100644 index 0000000..f4c06cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/RegistryEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/ServerChatEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/ServerChatEvent.class new file mode 100644 index 0000000..cb64a12 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/ServerChatEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PlayerBrewedPotionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PlayerBrewedPotionEvent.class new file mode 100644 index 0000000..9fc6c79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PlayerBrewedPotionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent$Post.class new file mode 100644 index 0000000..96b43dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent$Pre.class new file mode 100644 index 0000000..b0fe4b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent.class new file mode 100644 index 0000000..d187498 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/brewing/PotionBrewEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/enchanting/EnchantmentLevelSetEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/enchanting/EnchantmentLevelSetEvent.class new file mode 100644 index 0000000..4bbb3e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/enchanting/EnchantmentLevelSetEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$CanUpdate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$CanUpdate.class new file mode 100644 index 0000000..fa6936a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$CanUpdate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$EnteringChunk.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$EnteringChunk.class new file mode 100644 index 0000000..67ce150 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$EnteringChunk.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$EntityConstructing.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$EntityConstructing.class new file mode 100644 index 0000000..ffc3f2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent$EntityConstructing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent.class new file mode 100644 index 0000000..5525915 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityJoinWorldEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityJoinWorldEvent.class new file mode 100644 index 0000000..22b5261 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityJoinWorldEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityMobGriefingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityMobGriefingEvent.class new file mode 100644 index 0000000..f41f017 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityMobGriefingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityMountEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityMountEvent.class new file mode 100644 index 0000000..e6fd11f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityMountEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityStruckByLightningEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityStruckByLightningEvent.class new file mode 100644 index 0000000..ef5ea71 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityStruckByLightningEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityTravelToDimensionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityTravelToDimensionEvent.class new file mode 100644 index 0000000..5e6453e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/EntityTravelToDimensionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/PlaySoundAtEntityEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/PlaySoundAtEntityEvent.class new file mode 100644 index 0000000..a7aa07e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/PlaySoundAtEntityEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Arrow.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Arrow.class new file mode 100644 index 0000000..36e4317 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Arrow.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Fireball.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Fireball.class new file mode 100644 index 0000000..7393c95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Fireball.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Throwable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Throwable.class new file mode 100644 index 0000000..78ab380 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent$Throwable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent.class new file mode 100644 index 0000000..138f40a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ProjectileImpactEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ThrowableImpactEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ThrowableImpactEvent.class new file mode 100644 index 0000000..e7844e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/ThrowableImpactEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemEvent.class new file mode 100644 index 0000000..6b42194 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemExpireEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemExpireEvent.class new file mode 100644 index 0000000..03b9104 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemExpireEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemTossEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemTossEvent.class new file mode 100644 index 0000000..1d2d8a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/item/ItemTossEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/AnimalTameEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/AnimalTameEvent.class new file mode 100644 index 0000000..3394bd2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/AnimalTameEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/BabyEntitySpawnEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/BabyEntitySpawnEvent.class new file mode 100644 index 0000000..a4c8391 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/BabyEntitySpawnEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/EnderTeleportEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/EnderTeleportEvent.class new file mode 100644 index 0000000..2a2761f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/EnderTeleportEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingAttackEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingAttackEvent.class new file mode 100644 index 0000000..7fbf3e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingAttackEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDamageEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDamageEvent.class new file mode 100644 index 0000000..4e5f2f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDamageEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDeathEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDeathEvent.class new file mode 100644 index 0000000..ada0019 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDeathEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDestroyBlockEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDestroyBlockEvent.class new file mode 100644 index 0000000..0f8477c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDestroyBlockEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDropsEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDropsEvent.class new file mode 100644 index 0000000..bddb15e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingDropsEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$1.class new file mode 100644 index 0000000..0047306 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Finish.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Finish.class new file mode 100644 index 0000000..c57240f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Finish.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Start.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Start.class new file mode 100644 index 0000000..c7fef07 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Stop.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Stop.class new file mode 100644 index 0000000..1cd9762 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Stop.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Tick.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Tick.class new file mode 100644 index 0000000..ffdcd64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent$Tick.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.class new file mode 100644 index 0000000..27a92b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEntityUseItemEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEquipmentChangeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEquipmentChangeEvent.class new file mode 100644 index 0000000..6f65468 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEquipmentChangeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent$LivingJumpEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent$LivingJumpEvent.class new file mode 100644 index 0000000..c932fbd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent$LivingJumpEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent$LivingUpdateEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent$LivingUpdateEvent.class new file mode 100644 index 0000000..352468c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent$LivingUpdateEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent.class new file mode 100644 index 0000000..9152dda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingExperienceDropEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingExperienceDropEvent.class new file mode 100644 index 0000000..c22c714 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingExperienceDropEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingFallEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingFallEvent.class new file mode 100644 index 0000000..0b90365 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingFallEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingHealEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingHealEvent.class new file mode 100644 index 0000000..ba74458 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingHealEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingHurtEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingHurtEvent.class new file mode 100644 index 0000000..150ac60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingHurtEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingKnockBackEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingKnockBackEvent.class new file mode 100644 index 0000000..b88bcf6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingKnockBackEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingPackSizeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingPackSizeEvent.class new file mode 100644 index 0000000..a69f1f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingPackSizeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSetAttackTargetEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSetAttackTargetEvent.class new file mode 100644 index 0000000..762b9e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSetAttackTargetEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$AllowDespawn.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$AllowDespawn.class new file mode 100644 index 0000000..f8ff0e2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$AllowDespawn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$CheckSpawn.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$CheckSpawn.class new file mode 100644 index 0000000..7688b0a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$CheckSpawn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$SpecialSpawn.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$SpecialSpawn.class new file mode 100644 index 0000000..4b62b05 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent$SpecialSpawn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent.class new file mode 100644 index 0000000..6ff1b98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LivingSpawnEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LootingLevelEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LootingLevelEvent.class new file mode 100644 index 0000000..dc5561f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/LootingLevelEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/PotionColorCalculationEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/PotionColorCalculationEvent.class new file mode 100644 index 0000000..456994c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/PotionColorCalculationEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/ZombieEvent$SummonAidEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/ZombieEvent$SummonAidEvent.class new file mode 100644 index 0000000..30c3b2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/ZombieEvent$SummonAidEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/ZombieEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/ZombieEvent.class new file mode 100644 index 0000000..ac7dfb7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/living/ZombieEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartCollisionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartCollisionEvent.class new file mode 100644 index 0000000..fa7d7a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartCollisionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartEvent.class new file mode 100644 index 0000000..39e0c19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartInteractEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartInteractEvent.class new file mode 100644 index 0000000..239ba32 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartInteractEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartUpdateEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartUpdateEvent.class new file mode 100644 index 0000000..a209fde Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/minecart/MinecartUpdateEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AdvancementEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AdvancementEvent.class new file mode 100644 index 0000000..0c3ca2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AdvancementEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AnvilRepairEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AnvilRepairEvent.class new file mode 100644 index 0000000..4915016 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AnvilRepairEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ArrowLooseEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ArrowLooseEvent.class new file mode 100644 index 0000000..5d30112 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ArrowLooseEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ArrowNockEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ArrowNockEvent.class new file mode 100644 index 0000000..076a89a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ArrowNockEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AttackEntityEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AttackEntityEvent.class new file mode 100644 index 0000000..b63d12a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/AttackEntityEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/BonemealEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/BonemealEvent.class new file mode 100644 index 0000000..731c706 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/BonemealEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/CriticalHitEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/CriticalHitEvent.class new file mode 100644 index 0000000..5470799 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/CriticalHitEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/EntityItemPickupEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/EntityItemPickupEvent.class new file mode 100644 index 0000000..5c34b75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/EntityItemPickupEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/FillBucketEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/FillBucketEvent.class new file mode 100644 index 0000000..743fddb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/FillBucketEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ItemFishedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ItemFishedEvent.class new file mode 100644 index 0000000..271e8f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ItemFishedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ItemTooltipEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ItemTooltipEvent.class new file mode 100644 index 0000000..842bb11 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/ItemTooltipEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent$Close.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent$Close.class new file mode 100644 index 0000000..df61eb9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent$Close.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent$Open.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent$Open.class new file mode 100644 index 0000000..144bfa1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent$Open.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent.class new file mode 100644 index 0000000..3789cfb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerContainerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerDestroyItemEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerDestroyItemEvent.class new file mode 100644 index 0000000..100d426 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerDestroyItemEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerDropsEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerDropsEvent.class new file mode 100644 index 0000000..8a5e008 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerDropsEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$BreakSpeed.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$BreakSpeed.class new file mode 100644 index 0000000..0dd7394 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$BreakSpeed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$Clone.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$Clone.class new file mode 100644 index 0000000..8eb3791 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$Clone.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$HarvestCheck.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$HarvestCheck.class new file mode 100644 index 0000000..132f183 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$HarvestCheck.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$LoadFromFile.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$LoadFromFile.class new file mode 100644 index 0000000..d6c2d67 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$LoadFromFile.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$NameFormat.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$NameFormat.class new file mode 100644 index 0000000..ffe4b18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$NameFormat.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$SaveToFile.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$SaveToFile.class new file mode 100644 index 0000000..f2d3bb2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$SaveToFile.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$StartTracking.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$StartTracking.class new file mode 100644 index 0000000..f76ded3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$StartTracking.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$StopTracking.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$StopTracking.class new file mode 100644 index 0000000..5ff3556 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$StopTracking.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$Visibility.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$Visibility.class new file mode 100644 index 0000000..fe13f17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent$Visibility.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent.class new file mode 100644 index 0000000..7bcc16b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.class new file mode 100644 index 0000000..8697724 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerFlyableFallEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$1.class new file mode 100644 index 0000000..431b253 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.class new file mode 100644 index 0000000..3ffd672 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteract.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteractSpecific.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteractSpecific.class new file mode 100644 index 0000000..dc98064 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$EntityInteractSpecific.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$LeftClickBlock.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$LeftClickBlock.class new file mode 100644 index 0000000..031b377 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$LeftClickBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$LeftClickEmpty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$LeftClickEmpty.class new file mode 100644 index 0000000..0b4c29e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$LeftClickEmpty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.class new file mode 100644 index 0000000..65cd723 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickEmpty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickEmpty.class new file mode 100644 index 0000000..062a7a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickEmpty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickItem.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickItem.class new file mode 100644 index 0000000..7cd2a81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent$RightClickItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent.class new file mode 100644 index 0000000..92fda18 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerInteractEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerPickupXpEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerPickupXpEvent.class new file mode 100644 index 0000000..010e420 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerPickupXpEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.class new file mode 100644 index 0000000..ada51b7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerSleepInBedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerSleepInBedEvent.class new file mode 100644 index 0000000..7baff40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerSleepInBedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerWakeUpEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerWakeUpEvent.class new file mode 100644 index 0000000..703f850 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/PlayerWakeUpEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/SleepingLocationCheckEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/SleepingLocationCheckEvent.class new file mode 100644 index 0000000..47f71ad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/SleepingLocationCheckEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/UseHoeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/UseHoeEvent.class new file mode 100644 index 0000000..a73df0c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/entity/player/UseHoeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.class new file mode 100644 index 0000000..64f6305 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/furnace/FurnaceFuelBurnTimeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$BiomeColor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$BiomeColor.class new file mode 100644 index 0000000..90cabf6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$BiomeColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$CreateDecorator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$CreateDecorator.class new file mode 100644 index 0000000..4902c02 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$CreateDecorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetFoliageColor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetFoliageColor.class new file mode 100644 index 0000000..a5f866e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetFoliageColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetGrassColor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetGrassColor.class new file mode 100644 index 0000000..a40d592 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetGrassColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetVillageBlockID.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetVillageBlockID.class new file mode 100644 index 0000000..95116b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetVillageBlockID.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetWaterColor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetWaterColor.class new file mode 100644 index 0000000..57578ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent$GetWaterColor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent.class new file mode 100644 index 0000000..b9d3c3e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/BiomeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent$InitNoiseField.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent$InitNoiseField.class new file mode 100644 index 0000000..17314bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent$InitNoiseField.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent$ReplaceBiomeBlocks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent$ReplaceBiomeBlocks.class new file mode 100644 index 0000000..23849e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent$ReplaceBiomeBlocks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent.class new file mode 100644 index 0000000..deef280 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/ChunkGeneratorEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Decorate$EventType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Decorate$EventType.class new file mode 100644 index 0000000..0aae896 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Decorate$EventType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Decorate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Decorate.class new file mode 100644 index 0000000..03047f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Decorate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Post.class new file mode 100644 index 0000000..29487b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Pre.class new file mode 100644 index 0000000..527af1a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent.class new file mode 100644 index 0000000..de6c80b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DecorateBiomeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DeferredBiomeDecorator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DeferredBiomeDecorator.class new file mode 100644 index 0000000..946af2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/DeferredBiomeDecorator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitMapGenEvent$EventType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitMapGenEvent$EventType.class new file mode 100644 index 0000000..39cbb5d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitMapGenEvent$EventType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitMapGenEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitMapGenEvent.class new file mode 100644 index 0000000..a11ef10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitMapGenEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$Context.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$Context.class new file mode 100644 index 0000000..1a70491 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$Context.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextEnd.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextEnd.class new file mode 100644 index 0000000..f2425d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextEnd.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextHell.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextHell.class new file mode 100644 index 0000000..2041e4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextHell.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextOverworld.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextOverworld.class new file mode 100644 index 0000000..879f8fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent$ContextOverworld.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent.class new file mode 100644 index 0000000..957a7e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/InitNoiseGensEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$GenerateMinable$EventType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$GenerateMinable$EventType.class new file mode 100644 index 0000000..5116aec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$GenerateMinable$EventType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$GenerateMinable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$GenerateMinable.class new file mode 100644 index 0000000..168ab27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$GenerateMinable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$Post.class new file mode 100644 index 0000000..f39b97a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$Pre.class new file mode 100644 index 0000000..038cc25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent.class new file mode 100644 index 0000000..335c590 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/OreGenEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Populate$EventType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Populate$EventType.class new file mode 100644 index 0000000..0ef30f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Populate$EventType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Populate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Populate.class new file mode 100644 index 0000000..29b7738 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Populate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Post.class new file mode 100644 index 0000000..fc97780 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Pre.class new file mode 100644 index 0000000..e240c71 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent.class new file mode 100644 index 0000000..24150c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/PopulateChunkEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/SaplingGrowTreeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/SaplingGrowTreeEvent.class new file mode 100644 index 0000000..5d3a093 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/SaplingGrowTreeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/TerrainGen.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/TerrainGen.class new file mode 100644 index 0000000..d130198 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/TerrainGen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent$BiomeSize.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent$BiomeSize.class new file mode 100644 index 0000000..f891627 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent$BiomeSize.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent$InitBiomeGens.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent$InitBiomeGens.class new file mode 100644 index 0000000..145c5a8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent$InitBiomeGens.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent.class new file mode 100644 index 0000000..b979c95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/terraingen/WorldTypeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$BreakEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$BreakEvent.class new file mode 100644 index 0000000..e488ccd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$BreakEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CreateFluidSourceEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CreateFluidSourceEvent.class new file mode 100644 index 0000000..0c9d3f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CreateFluidSourceEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent$Post.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent$Post.class new file mode 100644 index 0000000..ad267be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent$Post.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent$Pre.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent$Pre.class new file mode 100644 index 0000000..dcb5643 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent$Pre.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent.class new file mode 100644 index 0000000..70479bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$CropGrowEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$FarmlandTrampleEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$FarmlandTrampleEvent.class new file mode 100644 index 0000000..6a017c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$FarmlandTrampleEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$FluidPlaceBlockEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$FluidPlaceBlockEvent.class new file mode 100644 index 0000000..75be680 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$FluidPlaceBlockEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$HarvestDropsEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$HarvestDropsEvent.class new file mode 100644 index 0000000..e1c6a3d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$HarvestDropsEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$MultiPlaceEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$MultiPlaceEvent.class new file mode 100644 index 0000000..47bb8ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$MultiPlaceEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$NeighborNotifyEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$NeighborNotifyEvent.class new file mode 100644 index 0000000..eb35686 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$NeighborNotifyEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$PlaceEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$PlaceEvent.class new file mode 100644 index 0000000..145b3d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$PlaceEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$PortalSpawnEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$PortalSpawnEvent.class new file mode 100644 index 0000000..b705aa9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent$PortalSpawnEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent.class new file mode 100644 index 0000000..0884ccf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/BlockEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent$Load.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent$Load.class new file mode 100644 index 0000000..991084c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent$Load.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent$Save.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent$Save.class new file mode 100644 index 0000000..173c67e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent$Save.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent.class new file mode 100644 index 0000000..29708e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkDataEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent$Load.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent$Load.class new file mode 100644 index 0000000..450acb3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent$Load.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent$Unload.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent$Unload.class new file mode 100644 index 0000000..26dd2f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent$Unload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent.class new file mode 100644 index 0000000..be1c000 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent$UnWatch.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent$UnWatch.class new file mode 100644 index 0000000..d859186 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent$UnWatch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent$Watch.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent$Watch.class new file mode 100644 index 0000000..f989c42 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent$Watch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent.class new file mode 100644 index 0000000..2b97d09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ChunkWatchEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent$Detonate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent$Detonate.class new file mode 100644 index 0000000..6c575a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent$Detonate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent$Start.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent$Start.class new file mode 100644 index 0000000..110d660 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent$Start.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent.class new file mode 100644 index 0000000..82f2959 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/ExplosionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/GetCollisionBoxesEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/GetCollisionBoxesEvent.class new file mode 100644 index 0000000..fa0cda2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/GetCollisionBoxesEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Change.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Change.class new file mode 100644 index 0000000..5b62744 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Change.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Instrument.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Instrument.class new file mode 100644 index 0000000..bc7407f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Instrument.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Note.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Note.class new file mode 100644 index 0000000..a17671f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Note.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Octave.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Octave.class new file mode 100644 index 0000000..072ab2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Octave.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Play.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Play.class new file mode 100644 index 0000000..209d2dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent$Play.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent.class new file mode 100644 index 0000000..788c026 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/NoteBlockEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$CreateSpawnPosition.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$CreateSpawnPosition.class new file mode 100644 index 0000000..cab4891 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$CreateSpawnPosition.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Load.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Load.class new file mode 100644 index 0000000..351ba1e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Load.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$PotentialSpawns.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$PotentialSpawns.class new file mode 100644 index 0000000..5ca9ef3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$PotentialSpawns.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Save.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Save.class new file mode 100644 index 0000000..8148055 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Save.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Unload.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Unload.class new file mode 100644 index 0000000..0a2ef75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent$Unload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent.class new file mode 100644 index 0000000..72ba145 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/event/world/WorldEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidBase$UnlistedPropertyBool.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidBase$UnlistedPropertyBool.class new file mode 100644 index 0000000..7236a83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidBase$UnlistedPropertyBool.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidBase.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidBase.class new file mode 100644 index 0000000..6f1d725 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidClassic.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidClassic.class new file mode 100644 index 0000000..6e772ee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidClassic.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidFinite.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidFinite.class new file mode 100644 index 0000000..e1c6bcb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/BlockFluidFinite.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/DispenseFluidContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/DispenseFluidContainer.class new file mode 100644 index 0000000..3e30b3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/DispenseFluidContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/Fluid.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/Fluid.class new file mode 100644 index 0000000..29f706f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/Fluid.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidActionResult.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidActionResult.class new file mode 100644 index 0000000..19d2357 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidActionResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidDrainingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidDrainingEvent.class new file mode 100644 index 0000000..e239809 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidDrainingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidFillingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidFillingEvent.class new file mode 100644 index 0000000..ef403b6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidFillingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidMotionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidMotionEvent.class new file mode 100644 index 0000000..f157d77 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidMotionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidSpilledEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidSpilledEvent.class new file mode 100644 index 0000000..99f2f60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent$FluidSpilledEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent.class new file mode 100644 index 0000000..a511f76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$1.class new file mode 100644 index 0000000..fdbf0d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$2.class new file mode 100644 index 0000000..7dceeca Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$FluidDelegate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$FluidDelegate.class new file mode 100644 index 0000000..a5f7b19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$FluidDelegate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$FluidRegisterEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$FluidRegisterEvent.class new file mode 100644 index 0000000..4bfef2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry$FluidRegisterEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry.class new file mode 100644 index 0000000..faa9b64 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidStack.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidStack.class new file mode 100644 index 0000000..d5bb6ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidStack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidTank.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidTank.class new file mode 100644 index 0000000..62c42c2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidTank.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidTankInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidTankInfo.class new file mode 100644 index 0000000..c94a580 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidTankInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidUtil.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidUtil.class new file mode 100644 index 0000000..9b6f169 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/FluidUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/IFluidBlock.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/IFluidBlock.class new file mode 100644 index 0000000..6a1a5e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/IFluidBlock.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/IFluidTank.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/IFluidTank.class new file mode 100644 index 0000000..df1f350 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/IFluidTank.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/UniversalBucket.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/UniversalBucket.class new file mode 100644 index 0000000..f9a9f3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/UniversalBucket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler$1.class new file mode 100644 index 0000000..821ad96 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler$DefaultFluidHandlerStorage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler$DefaultFluidHandlerStorage.class new file mode 100644 index 0000000..0ad1b98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler$DefaultFluidHandlerStorage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler.class new file mode 100644 index 0000000..ece7de8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/CapabilityFluidHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/FluidTankProperties.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/FluidTankProperties.class new file mode 100644 index 0000000..670b0c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/FluidTankProperties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/FluidTankPropertiesWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/FluidTankPropertiesWrapper.class new file mode 100644 index 0000000..2a9efc2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/FluidTankPropertiesWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidHandler.class new file mode 100644 index 0000000..4149a20 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidHandlerItem.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidHandlerItem.class new file mode 100644 index 0000000..c2e00be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidHandlerItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidTankProperties.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidTankProperties.class new file mode 100644 index 0000000..922e15b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/IFluidTankProperties.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/ItemFluidContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/ItemFluidContainer.class new file mode 100644 index 0000000..a5bd7f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/ItemFluidContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/TileFluidHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/TileFluidHandler.class new file mode 100644 index 0000000..9a3b774 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/TileFluidHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/EmptyFluidHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/EmptyFluidHandler.class new file mode 100644 index 0000000..084db30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/EmptyFluidHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerConcatenate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerConcatenate.class new file mode 100644 index 0000000..b891ae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerConcatenate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerFluidMap.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerFluidMap.class new file mode 100644 index 0000000..79b8ea0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerFluidMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack$Consumable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack$Consumable.class new file mode 100644 index 0000000..537d1d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack$Consumable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack$SwapEmpty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack$SwapEmpty.class new file mode 100644 index 0000000..10b8c87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack$SwapEmpty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack.class new file mode 100644 index 0000000..056735b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple$Consumable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple$Consumable.class new file mode 100644 index 0000000..727369e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple$Consumable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple$SwapEmpty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple$SwapEmpty.class new file mode 100644 index 0000000..64c01b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple$SwapEmpty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple.class new file mode 100644 index 0000000..572e187 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/FluidHandlerItemStackSimple.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/VoidFluidHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/VoidFluidHandler.class new file mode 100644 index 0000000..c984a78 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/templates/VoidFluidHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/BlockLiquidWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/BlockLiquidWrapper.class new file mode 100644 index 0000000..ee79f11 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/BlockLiquidWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/BlockWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/BlockWrapper.class new file mode 100644 index 0000000..c06dd0b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/BlockWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/FluidBlockWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/FluidBlockWrapper.class new file mode 100644 index 0000000..84e2383 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/FluidBlockWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.class new file mode 100644 index 0000000..7aad632 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fluids/capability/wrappers/FluidBucketWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/CustomModLoadingErrorDisplayException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/CustomModLoadingErrorDisplayException.class new file mode 100644 index 0000000..4ff5166 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/CustomModLoadingErrorDisplayException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/DefaultGuiFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/DefaultGuiFactory.class new file mode 100644 index 0000000..d134403 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/DefaultGuiFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/ExtendedServerListData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/ExtendedServerListData.class new file mode 100644 index 0000000..7dffd14 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/ExtendedServerListData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLClientHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLClientHandler.class new file mode 100644 index 0000000..9092179 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLClientHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory$CustomArrayEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory$CustomArrayEntry.class new file mode 100644 index 0000000..da2edcb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory$CustomArrayEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory$FMLConfigGuiScreen.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory$FMLConfigGuiScreen.class new file mode 100644 index 0000000..3efa229 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory$FMLConfigGuiScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory.class new file mode 100644 index 0000000..f8b6c20 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLConfigGuiFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLFileResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLFileResourcePack.class new file mode 100644 index 0000000..004a15d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLFileResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLFolderResourcePack.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLFolderResourcePack.class new file mode 100644 index 0000000..923f565 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/FMLFolderResourcePack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiAccessDenied.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiAccessDenied.class new file mode 100644 index 0000000..3ddd6b2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiAccessDenied.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiBackupFailed.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiBackupFailed.class new file mode 100644 index 0000000..c379f29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiBackupFailed.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiConfirmation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiConfirmation.class new file mode 100644 index 0000000..84897bc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiConfirmation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiCustomModLoadingErrorScreen.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiCustomModLoadingErrorScreen.class new file mode 100644 index 0000000..aeba213 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiCustomModLoadingErrorScreen.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiDupesFound.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiDupesFound.class new file mode 100644 index 0000000..8b6ab9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiDupesFound.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiErrorBase.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiErrorBase.class new file mode 100644 index 0000000..daa5cb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiErrorBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$1.class new file mode 100644 index 0000000..4a8c101 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$Info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$Info.class new file mode 100644 index 0000000..13c0dcd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$Info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType$1.class new file mode 100644 index 0000000..9e374fa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType$2.class new file mode 100644 index 0000000..651ddc9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType.class new file mode 100644 index 0000000..9c7c349 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList$SortType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList.class new file mode 100644 index 0000000..100657a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModsMissing.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModsMissing.class new file mode 100644 index 0000000..124bc45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModsMissing.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModsMissingForServer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModsMissingForServer.class new file mode 100644 index 0000000..81e8e53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiModsMissingForServer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiMultipleModsErrored$GuiList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiMultipleModsErrored$GuiList.class new file mode 100644 index 0000000..68cdf45 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiMultipleModsErrored$GuiList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiMultipleModsErrored.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiMultipleModsErrored.class new file mode 100644 index 0000000..834733b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiMultipleModsErrored.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiNotification.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiNotification.class new file mode 100644 index 0000000..0fa91ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiNotification.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiOldSaveLoadConfirm.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiOldSaveLoadConfirm.class new file mode 100644 index 0000000..bae2485 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiOldSaveLoadConfirm.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiScrollingList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiScrollingList.class new file mode 100644 index 0000000..64ee0c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiScrollingList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiSlotModList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiSlotModList.class new file mode 100644 index 0000000..937f32f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiSlotModList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiSortingProblem.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiSortingProblem.class new file mode 100644 index 0000000..a8630ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiSortingProblem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiWrongMinecraft.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiWrongMinecraft.class new file mode 100644 index 0000000..70c2128 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/GuiWrongMinecraft.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IDisplayableError.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IDisplayableError.class new file mode 100644 index 0000000..a1302e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IDisplayableError.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IModGuiFactory$RuntimeOptionCategoryElement.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IModGuiFactory$RuntimeOptionCategoryElement.class new file mode 100644 index 0000000..005c668 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IModGuiFactory$RuntimeOptionCategoryElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IModGuiFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IModGuiFactory.class new file mode 100644 index 0000000..3630618 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/IModGuiFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$1.class new file mode 100644 index 0000000..e9762dd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$2.class new file mode 100644 index 0000000..379c7ec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$3.class new file mode 100644 index 0000000..88c7b20 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$4.class new file mode 100644 index 0000000..e26914c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$5.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$5.class new file mode 100644 index 0000000..fa389e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$SplashFontRenderer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$SplashFontRenderer.class new file mode 100644 index 0000000..a16bd62 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$SplashFontRenderer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$Texture.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$Texture.class new file mode 100644 index 0000000..5f75b7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress$Texture.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress.class new file mode 100644 index 0000000..5b9c7fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/SplashProgress.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/ConfigGuiType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/ConfigGuiType.class new file mode 100644 index 0000000..4204638 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/ConfigGuiType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement$DummyCategoryElement.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement$DummyCategoryElement.class new file mode 100644 index 0000000..086222e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement$DummyCategoryElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement$DummyListElement.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement$DummyListElement.class new file mode 100644 index 0000000..c5cf5d7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement$DummyListElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement.class new file mode 100644 index 0000000..8fe331e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/DummyConfigElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiButtonExt.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiButtonExt.class new file mode 100644 index 0000000..acebd99 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiButtonExt.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiCheckBox.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiCheckBox.class new file mode 100644 index 0000000..58fc556 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiCheckBox.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfig.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfig.class new file mode 100644 index 0000000..95b6352 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfig.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$1.class new file mode 100644 index 0000000..86c87e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ArrayEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ArrayEntry.class new file mode 100644 index 0000000..d7a98c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ArrayEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$BooleanEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$BooleanEntry.class new file mode 100644 index 0000000..6c8ee88 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$BooleanEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ButtonEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ButtonEntry.class new file mode 100644 index 0000000..4e7cbb9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ButtonEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$CategoryEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$CategoryEntry.class new file mode 100644 index 0000000..f162f67 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$CategoryEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ChatColorEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ChatColorEntry.class new file mode 100644 index 0000000..75fdd68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ChatColorEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$CycleValueEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$CycleValueEntry.class new file mode 100644 index 0000000..315ab81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$CycleValueEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$DoubleEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$DoubleEntry.class new file mode 100644 index 0000000..9397e6c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$DoubleEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$IConfigEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$IConfigEntry.class new file mode 100644 index 0000000..954cead Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$IConfigEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$IntegerEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$IntegerEntry.class new file mode 100644 index 0000000..4b39f84 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$IntegerEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ListEntryBase.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ListEntryBase.class new file mode 100644 index 0000000..4919100 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$ListEntryBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$NumberSliderEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$NumberSliderEntry.class new file mode 100644 index 0000000..424ead1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$NumberSliderEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$SelectValueEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$SelectValueEntry.class new file mode 100644 index 0000000..6af0982 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$SelectValueEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$StringEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$StringEntry.class new file mode 100644 index 0000000..7482356 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries$StringEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries.class new file mode 100644 index 0000000..6c88e9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiConfigEntries.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArray.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArray.class new file mode 100644 index 0000000..41093a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArray.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$1.class new file mode 100644 index 0000000..b40b6dc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$BaseEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$BaseEntry.class new file mode 100644 index 0000000..7b6e9a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$BaseEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$BooleanEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$BooleanEntry.class new file mode 100644 index 0000000..67e07b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$BooleanEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$DoubleEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$DoubleEntry.class new file mode 100644 index 0000000..6e90823 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$DoubleEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$IArrayEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$IArrayEntry.class new file mode 100644 index 0000000..0263b72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$IArrayEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$IntegerEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$IntegerEntry.class new file mode 100644 index 0000000..bec94cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$IntegerEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$StringEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$StringEntry.class new file mode 100644 index 0000000..f0994ac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries$StringEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries.class new file mode 100644 index 0000000..30a2b81 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiEditArrayEntries.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiMessageDialog.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiMessageDialog.class new file mode 100644 index 0000000..47aaa51 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiMessageDialog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectString.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectString.class new file mode 100644 index 0000000..943cee9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectString.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$EntryComparator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$EntryComparator.class new file mode 100644 index 0000000..4448109 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$EntryComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$IGuiSelectStringListEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$IGuiSelectStringListEntry.class new file mode 100644 index 0000000..12613a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$IGuiSelectStringListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$ListEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$ListEntry.class new file mode 100644 index 0000000..f846080 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries$ListEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries.class new file mode 100644 index 0000000..8005c89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSelectStringEntries.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSlider$ISlider.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSlider$ISlider.class new file mode 100644 index 0000000..346d191 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSlider$ISlider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSlider.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSlider.class new file mode 100644 index 0000000..16606c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiSlider.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiUnicodeGlyphButton.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiUnicodeGlyphButton.class new file mode 100644 index 0000000..9fd1138 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiUnicodeGlyphButton.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiUtils.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiUtils.class new file mode 100644 index 0000000..12a07d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/GuiUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/HoverChecker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/HoverChecker.class new file mode 100644 index 0000000..430b5c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/HoverChecker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/IConfigElement.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/IConfigElement.class new file mode 100644 index 0000000..dc799a6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/config/IConfigElement.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent$OnConfigChangedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent$OnConfigChangedEvent.class new file mode 100644 index 0000000..a0e5049 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent$OnConfigChangedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent$PostConfigChangedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent$PostConfigChangedEvent.class new file mode 100644 index 0000000..b979e34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent$PostConfigChangedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent.class new file mode 100644 index 0000000..16c3d98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/event/ConfigChangedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/ClientRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/ClientRegistry.class new file mode 100644 index 0000000..092deac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/ClientRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/IRenderFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/IRenderFactory.class new file mode 100644 index 0000000..1fe7021 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/IRenderFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/RenderingRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/RenderingRegistry.class new file mode 100644 index 0000000..b3e1337 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/client/registry/RenderingRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/API.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/API.class new file mode 100644 index 0000000..c1cdcab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/API.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/AutomaticEventSubscriber.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/AutomaticEventSubscriber.class new file mode 100644 index 0000000..821fdd4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/AutomaticEventSubscriber.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/CertificateHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/CertificateHelper.class new file mode 100644 index 0000000..112c46e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/CertificateHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ClassNameUtils.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ClassNameUtils.class new file mode 100644 index 0000000..caaf018 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ClassNameUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/DummyModContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/DummyModContainer.class new file mode 100644 index 0000000..b3be39b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/DummyModContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/DuplicateModsFoundException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/DuplicateModsFoundException.class new file mode 100644 index 0000000..c402ac2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/DuplicateModsFoundException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$1.class new file mode 100644 index 0000000..21341c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$2.class new file mode 100644 index 0000000..fdf6305 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$3.class new file mode 100644 index 0000000..23a09c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$WrappedPrintStream.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$WrappedPrintStream.class new file mode 100644 index 0000000..3e812f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException$WrappedPrintStream.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException.class new file mode 100644 index 0000000..6d373bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/EnhancedRuntimeException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLCommonHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLCommonHandler$1.class new file mode 100644 index 0000000..ae1448c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLCommonHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLCommonHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLCommonHandler.class new file mode 100644 index 0000000..e4bbcc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLCommonHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLContainer.class new file mode 100644 index 0000000..e45c6b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLContainerHolder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLContainerHolder.class new file mode 100644 index 0000000..d284e4b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLContainerHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLLog.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLLog.class new file mode 100644 index 0000000..2cf11a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLLog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLModContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLModContainer.class new file mode 100644 index 0000000..3113d2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/FMLModContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ICrashCallable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ICrashCallable.class new file mode 100644 index 0000000..8743963 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ICrashCallable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IEntitySelectorFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IEntitySelectorFactory.class new file mode 100644 index 0000000..2633abe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IEntitySelectorFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFMLHandledException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFMLHandledException.class new file mode 100644 index 0000000..05b8836 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFMLHandledException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFMLSidedHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFMLSidedHandler.class new file mode 100644 index 0000000..ccfc67b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFMLSidedHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFuelHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFuelHandler.class new file mode 100644 index 0000000..bc5907d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IFuelHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter$JavaAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter$JavaAdapter.class new file mode 100644 index 0000000..cd5f1f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter$JavaAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter$ScalaAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter$ScalaAdapter.class new file mode 100644 index 0000000..0ac52da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter$ScalaAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter.class new file mode 100644 index 0000000..9df54cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ILanguageAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IWorldGenerator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IWorldGenerator.class new file mode 100644 index 0000000..0ea4915 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/IWorldGenerator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/InjectedModContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/InjectedModContainer.class new file mode 100644 index 0000000..2ccac99 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/InjectedModContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoadController$FMLSecurityManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoadController$FMLSecurityManager.class new file mode 100644 index 0000000..ce662f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoadController$FMLSecurityManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoadController.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoadController.class new file mode 100644 index 0000000..9c23511 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoadController.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader$1.class new file mode 100644 index 0000000..164da4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader$ModIdComparator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader$ModIdComparator.class new file mode 100644 index 0000000..84015f0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader$ModIdComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader.class new file mode 100644 index 0000000..47d9d9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Loader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderException.class new file mode 100644 index 0000000..cc11a93 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderExceptionModCrash.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderExceptionModCrash.class new file mode 100644 index 0000000..0a7f83f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderExceptionModCrash.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderState$ModState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderState$ModState.class new file mode 100644 index 0000000..d4f0c30 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderState$ModState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderState.class new file mode 100644 index 0000000..60804f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/LoaderState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MCPDummyContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MCPDummyContainer.class new file mode 100644 index 0000000..b31a1d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MCPDummyContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MetadataCollection$ArtifactVersionAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MetadataCollection$ArtifactVersionAdapter.class new file mode 100644 index 0000000..6b222ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MetadataCollection$ArtifactVersionAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MetadataCollection.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MetadataCollection.class new file mode 100644 index 0000000..3aaf817 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MetadataCollection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MinecraftDummyContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MinecraftDummyContainer.class new file mode 100644 index 0000000..62538c4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MinecraftDummyContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException$1.class new file mode 100644 index 0000000..00ee4bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException$MissingModInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException$MissingModInfo.class new file mode 100644 index 0000000..f4bb408 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException$MissingModInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException.class new file mode 100644 index 0000000..0f6d6af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MissingModsException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$CustomProperty.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$CustomProperty.class new file mode 100644 index 0000000..d13d7a9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$CustomProperty.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$EventBusSubscriber.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$EventBusSubscriber.class new file mode 100644 index 0000000..56fc834 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$EventBusSubscriber.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$EventHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$EventHandler.class new file mode 100644 index 0000000..38a54b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$EventHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$Instance.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$Instance.class new file mode 100644 index 0000000..109d2b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$Instance.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$InstanceFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$InstanceFactory.class new file mode 100644 index 0000000..99f7526 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$InstanceFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$Metadata.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$Metadata.class new file mode 100644 index 0000000..37f48d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod$Metadata.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod.class new file mode 100644 index 0000000..e38bf09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Mod.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModAPIManager$APIContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModAPIManager$APIContainer.class new file mode 100644 index 0000000..cccd3ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModAPIManager$APIContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModAPIManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModAPIManager.class new file mode 100644 index 0000000..355ce41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModAPIManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModClassLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModClassLoader.class new file mode 100644 index 0000000..dd2ca35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModClassLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainer$Disableable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainer$Disableable.class new file mode 100644 index 0000000..32c99e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainer$Disableable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainer.class new file mode 100644 index 0000000..d79ea3b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainerFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainerFactory.class new file mode 100644 index 0000000..07a501c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModContainerFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModMetadata.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModMetadata.class new file mode 100644 index 0000000..8ff1467 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ModMetadata.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MultipleModsErrored.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MultipleModsErrored.class new file mode 100644 index 0000000..4194f95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/MultipleModsErrored.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ObfuscationReflectionHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ObfuscationReflectionHelper.class new file mode 100644 index 0000000..c37e872 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ObfuscationReflectionHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$Interface.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$Interface.class new file mode 100644 index 0000000..68c4651 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$Interface.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$InterfaceList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$InterfaceList.class new file mode 100644 index 0000000..1f3f152 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$InterfaceList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$Method.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$Method.class new file mode 100644 index 0000000..042c6be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional$Method.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional.class new file mode 100644 index 0000000..938d390 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/Optional.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager$1.class new file mode 100644 index 0000000..9f008a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager$ProgressBar.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager$ProgressBar.class new file mode 100644 index 0000000..60f21ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager$ProgressBar.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager.class new file mode 100644 index 0000000..b9d35ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProgressManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProxyInjector.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProxyInjector.class new file mode 100644 index 0000000..b0c494a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ProxyInjector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/SaveInspectionHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/SaveInspectionHandler.class new file mode 100644 index 0000000..1087eec Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/SaveInspectionHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/SidedProxy.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/SidedProxy.class new file mode 100644 index 0000000..65a4e1b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/SidedProxy.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery$1.class new file mode 100644 index 0000000..8031b8b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery$AbortedException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery$AbortedException.class new file mode 100644 index 0000000..9f1feba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery$AbortedException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery.class new file mode 100644 index 0000000..81b2449 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/StartupQuery.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/TracingPrintStream.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/TracingPrintStream.class new file mode 100644 index 0000000..5c2f391 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/TracingPrintStream.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/WorldAccessContainer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/WorldAccessContainer.class new file mode 100644 index 0000000..0db1dcf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/WorldAccessContainer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/WrongMinecraftVersionException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/WrongMinecraftVersionException.class new file mode 100644 index 0000000..5c546cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/WrongMinecraftVersionException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ZipperUtil.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ZipperUtil.class new file mode 100644 index 0000000..35185df Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/ZipperUtil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$1.class new file mode 100644 index 0000000..92dfc57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenConnection.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenConnection.class new file mode 100644 index 0000000..e402e46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenConnection.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenHandler$1.class new file mode 100644 index 0000000..3ce1c8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenHandler.class new file mode 100644 index 0000000..6aeebb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$ASMGenHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$TransformerException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$TransformerException.class new file mode 100644 index 0000000..b2d872e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$TransformerException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$TransformerWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$TransformerWrapper.class new file mode 100644 index 0000000..403ebce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$TransformerWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$WrapperVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$WrapperVisitor.class new file mode 100644 index 0000000..3993e17 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper$WrapperVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper.class new file mode 100644 index 0000000..77adc60 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ASMTransformerWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/FMLSanityChecker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/FMLSanityChecker.class new file mode 100644 index 0000000..c95e012 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/FMLSanityChecker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ReobfuscationMarker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ReobfuscationMarker.class new file mode 100644 index 0000000..b11cb97 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/ReobfuscationMarker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer$1.class new file mode 100644 index 0000000..58046b9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer$Modifier.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer$Modifier.class new file mode 100644 index 0000000..3728cee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer$Modifier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.class new file mode 100644 index 0000000..9005e54 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/BlamingTransformer$VersionVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/BlamingTransformer$VersionVisitor.class new file mode 100644 index 0000000..c044877 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/BlamingTransformer$VersionVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/BlamingTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/BlamingTransformer.class new file mode 100644 index 0000000..2c11936 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/BlamingTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.class new file mode 100644 index 0000000..06f5fb4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriberTransformer$SubscribeEventPredicate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriberTransformer$SubscribeEventPredicate.class new file mode 100644 index 0000000..d20aa48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriberTransformer$SubscribeEventPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriberTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriberTransformer.class new file mode 100644 index 0000000..05bcc2e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriberTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriptionTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriptionTransformer.class new file mode 100644 index 0000000..4039681 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/EventSubscriptionTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/FieldRedirectTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/FieldRedirectTransformer.class new file mode 100644 index 0000000..da9da87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/FieldRedirectTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemBlockSpecialTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemBlockSpecialTransformer.class new file mode 100644 index 0000000..ad6a32e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemBlockSpecialTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemBlockTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemBlockTransformer.class new file mode 100644 index 0000000..48adfde Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemBlockTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemStackTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemStackTransformer.class new file mode 100644 index 0000000..18e1806 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ItemStackTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/MarkerTransformer$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/MarkerTransformer$1.class new file mode 100644 index 0000000..654e7ee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/MarkerTransformer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/MarkerTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/MarkerTransformer.class new file mode 100644 index 0000000..455e2d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/MarkerTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAPITransformer$RemovingSignatureWriter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAPITransformer$RemovingSignatureWriter.class new file mode 100644 index 0000000..54cce80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAPITransformer$RemovingSignatureWriter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAPITransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAPITransformer.class new file mode 100644 index 0000000..87abf83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAPITransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAccessTransformer$JarByteSource.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAccessTransformer$JarByteSource.class new file mode 100644 index 0000000..4f75c7c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAccessTransformer$JarByteSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAccessTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAccessTransformer.class new file mode 100644 index 0000000..e8b6ec2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/ModAccessTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/PatchingTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/PatchingTransformer.class new file mode 100644 index 0000000..d1d906d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/PatchingTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SideTransformer$LambdaGatherer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SideTransformer$LambdaGatherer.class new file mode 100644 index 0000000..9079cc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SideTransformer$LambdaGatherer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SideTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SideTransformer.class new file mode 100644 index 0000000..220d0f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SideTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SoundEngineFixTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SoundEngineFixTransformer.class new file mode 100644 index 0000000..21c99cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/SoundEngineFixTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$1.class new file mode 100644 index 0000000..b3bd75a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$ExitVisitor$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$ExitVisitor$1.class new file mode 100644 index 0000000..9ca4eda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$ExitVisitor$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$ExitVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$ExitVisitor.class new file mode 100644 index 0000000..f0b518c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer$ExitVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer.class new file mode 100644 index 0000000..9c3d773 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/TerminalTransformer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.class new file mode 100644 index 0000000..d92008e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLDeobfuscatingRemapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLRemappingAdapter$StaticFixingMethodVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLRemappingAdapter$StaticFixingMethodVisitor.class new file mode 100644 index 0000000..fe89fe9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLRemappingAdapter$StaticFixingMethodVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLRemappingAdapter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLRemappingAdapter.class new file mode 100644 index 0000000..254beee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/FMLRemappingAdapter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/LZMAInputSupplier.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/LZMAInputSupplier.class new file mode 100644 index 0000000..bd9b57e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/asm/transformers/deobf/LZMAInputSupplier.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable$ASMData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable$ASMData.class new file mode 100644 index 0000000..bdfae33 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable$ASMData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable$ModContainerPredicate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable$ModContainerPredicate.class new file mode 100644 index 0000000..5b74371 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable$ModContainerPredicate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable.class new file mode 100644 index 0000000..a3f7f41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ASMDataTable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ContainerType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ContainerType.class new file mode 100644 index 0000000..0ad5f38 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ContainerType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer$1.class new file mode 100644 index 0000000..d7e1b13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer$ClassFilter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer$ClassFilter.class new file mode 100644 index 0000000..aa3f273 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer$ClassFilter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer.class new file mode 100644 index 0000000..c9ce950 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/DirectoryDiscoverer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ITypeDiscoverer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ITypeDiscoverer.class new file mode 100644 index 0000000..4b1d3ff Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ITypeDiscoverer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/JarDiscoverer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/JarDiscoverer.class new file mode 100644 index 0000000..1c9b7f2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/JarDiscoverer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ModCandidate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ModCandidate.class new file mode 100644 index 0000000..18664ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ModCandidate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ModDiscoverer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ModDiscoverer.class new file mode 100644 index 0000000..2f147c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/ModDiscoverer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ASMModParser$AnnotationType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ASMModParser$AnnotationType.class new file mode 100644 index 0000000..b23cf2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ASMModParser$AnnotationType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ASMModParser.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ASMModParser.class new file mode 100644 index 0000000..df97462 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ASMModParser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotation$EnumHolder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotation$EnumHolder.class new file mode 100644 index 0000000..d45d0fb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotation$EnumHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotation.class new file mode 100644 index 0000000..aefbbbb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotationVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotationVisitor.class new file mode 100644 index 0000000..db777de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModAnnotationVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModClassVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModClassVisitor.class new file mode 100644 index 0000000..7a22af6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModClassVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModFieldVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModFieldVisitor.class new file mode 100644 index 0000000..ec21bda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModFieldVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModMethodVisitor.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModMethodVisitor.class new file mode 100644 index 0000000..0251617 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/asm/ModMethodVisitor.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$Annotation.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$Annotation.class new file mode 100644 index 0000000..a7c9e57 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$Annotation.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$TargetType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$TargetType.class new file mode 100644 index 0000000..17e16f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$TargetType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$ValueHolder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$ValueHolder.class new file mode 100644 index 0000000..720b70f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$ValueHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$ValueType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$ValueType.class new file mode 100644 index 0000000..518a895 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo$ValueType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo.class new file mode 100644 index 0000000..8c35a61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/ASMInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/JsonAnnotationLoader$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/JsonAnnotationLoader$1.class new file mode 100644 index 0000000..e3e648b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/JsonAnnotationLoader$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/JsonAnnotationLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/JsonAnnotationLoader.class new file mode 100644 index 0000000..9aa32cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/discovery/json/JsonAnnotationLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLConstructionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLConstructionEvent.class new file mode 100644 index 0000000..73c3f27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLConstructionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLEvent.class new file mode 100644 index 0000000..011c768 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLFingerprintViolationEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLFingerprintViolationEvent.class new file mode 100644 index 0000000..bde5596 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLFingerprintViolationEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInitializationEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInitializationEvent.class new file mode 100644 index 0000000..e3276e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInitializationEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$1.class new file mode 100644 index 0000000..ef4cc58 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$IMCEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$IMCEvent.class new file mode 100644 index 0000000..d64bbba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$IMCEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$IMCMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$IMCMessage.class new file mode 100644 index 0000000..d58f8fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms$IMCMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms.class new file mode 100644 index 0000000..9772531 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLInterModComms.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLLoadCompleteEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLLoadCompleteEvent.class new file mode 100644 index 0000000..4ed7382 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLLoadCompleteEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLLoadEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLLoadEvent.class new file mode 100644 index 0000000..c4b8ef7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLLoadEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModDisabledEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModDisabledEvent.class new file mode 100644 index 0000000..9605b34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModDisabledEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent$1.class new file mode 100644 index 0000000..fa46c40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent$ModRemapping.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent$ModRemapping.class new file mode 100644 index 0000000..ca572e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent$ModRemapping.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent.class new file mode 100644 index 0000000..33f6031 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLModIdMappingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLPostInitializationEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLPostInitializationEvent.class new file mode 100644 index 0000000..a9bce35 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLPostInitializationEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLPreInitializationEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLPreInitializationEvent.class new file mode 100644 index 0000000..678a493 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLPreInitializationEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerAboutToStartEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerAboutToStartEvent.class new file mode 100644 index 0000000..25e7d7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerAboutToStartEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStartedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStartedEvent.class new file mode 100644 index 0000000..73e3111 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStartedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStartingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStartingEvent.class new file mode 100644 index 0000000..6f45be0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStartingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStoppedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStoppedEvent.class new file mode 100644 index 0000000..3c9bf68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStoppedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStoppingEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStoppingEvent.class new file mode 100644 index 0000000..d4d65d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLServerStoppingEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLStateEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLStateEvent.class new file mode 100644 index 0000000..7cfcdfc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/event/FMLStateEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler$1.class new file mode 100644 index 0000000..03277ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler$ASMClassLoader.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler$ASMClassLoader.class new file mode 100644 index 0000000..13a4929 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler$ASMClassLoader.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler.class new file mode 100644 index 0000000..2e37145 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ASMEventHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Cancelable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Cancelable.class new file mode 100644 index 0000000..7cc298e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Cancelable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event$HasResult.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event$HasResult.class new file mode 100644 index 0000000..4071ab4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event$HasResult.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event$Result.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event$Result.class new file mode 100644 index 0000000..5578503 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event$Result.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event.class new file mode 100644 index 0000000..841057f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/Event.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventBus$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventBus$1.class new file mode 100644 index 0000000..4cc4aee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventBus$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventBus.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventBus.class new file mode 100644 index 0000000..01e64cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventBus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventPriority.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventPriority.class new file mode 100644 index 0000000..04a08ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/EventPriority.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/FMLThrowingEventBus$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/FMLThrowingEventBus$1.class new file mode 100644 index 0000000..280188e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/FMLThrowingEventBus$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/FMLThrowingEventBus.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/FMLThrowingEventBus.class new file mode 100644 index 0000000..12cddc5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/FMLThrowingEventBus.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/GenericEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/GenericEvent.class new file mode 100644 index 0000000..b8c1e40 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/GenericEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IContextSetter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IContextSetter.class new file mode 100644 index 0000000..b9d327c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IContextSetter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IEventExceptionHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IEventExceptionHandler.class new file mode 100644 index 0000000..c0c32d8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IEventExceptionHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IEventListener.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IEventListener.class new file mode 100644 index 0000000..d9d8a75 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IEventListener.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IGenericEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IGenericEvent.class new file mode 100644 index 0000000..3f0d19b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/IGenericEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList$1.class new file mode 100644 index 0000000..f9d2e7d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList$ListenerListInst.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList$ListenerListInst.class new file mode 100644 index 0000000..9f2e72f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList$ListenerListInst.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList.class new file mode 100644 index 0000000..fb0d5bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/ListenerList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/SubscribeEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/SubscribeEvent.class new file mode 100644 index 0000000..f1fe5db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/eventhandler/SubscribeEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent$KeyInputEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent$KeyInputEvent.class new file mode 100644 index 0000000..aa1a6bd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent$KeyInputEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent$MouseInputEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent$MouseInputEvent.class new file mode 100644 index 0000000..a084bef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent$MouseInputEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent.class new file mode 100644 index 0000000..cc19bd2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/InputEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$1.class new file mode 100644 index 0000000..f00d951 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemCraftedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemCraftedEvent.class new file mode 100644 index 0000000..7f15604 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemCraftedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemPickupEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemPickupEvent.class new file mode 100644 index 0000000..c49c142 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemPickupEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemSmeltedEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemSmeltedEvent.class new file mode 100644 index 0000000..c04f9e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$ItemSmeltedEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerChangedDimensionEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerChangedDimensionEvent.class new file mode 100644 index 0000000..9d2d147 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerChangedDimensionEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerLoggedInEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerLoggedInEvent.class new file mode 100644 index 0000000..e6cc8a1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerLoggedInEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerLoggedOutEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerLoggedOutEvent.class new file mode 100644 index 0000000..9375ba1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerLoggedOutEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerRespawnEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerRespawnEvent.class new file mode 100644 index 0000000..a723927 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent$PlayerRespawnEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent.class new file mode 100644 index 0000000..b4227a5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/PlayerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$ClientTickEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$ClientTickEvent.class new file mode 100644 index 0000000..5a4d3c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$ClientTickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$Phase.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$Phase.class new file mode 100644 index 0000000..63377de Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$Phase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$PlayerTickEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$PlayerTickEvent.class new file mode 100644 index 0000000..726a582 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$PlayerTickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$RenderTickEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$RenderTickEvent.class new file mode 100644 index 0000000..b7194ae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$RenderTickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$ServerTickEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$ServerTickEvent.class new file mode 100644 index 0000000..fad0f9a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$ServerTickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$Type.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$Type.class new file mode 100644 index 0000000..39534f9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$Type.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent.class new file mode 100644 index 0000000..647fd3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent.class new file mode 100644 index 0000000..b1ea722 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/gameevent/TickEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.class new file mode 100644 index 0000000..39ee8c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLInjectionAndSortingTweaker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLInjectionAndSortingTweaker.class new file mode 100644 index 0000000..e2e9b53 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLInjectionAndSortingTweaker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLServerTweaker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLServerTweaker.class new file mode 100644 index 0000000..4f9ef7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLServerTweaker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLTweaker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLTweaker.class new file mode 100644 index 0000000..280f5ab Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/FMLTweaker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/TerminalTweaker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/TerminalTweaker.class new file mode 100644 index 0000000..99bc63b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/TerminalTweaker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/Yggdrasil.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/Yggdrasil.class new file mode 100644 index 0000000..5e8549a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/launcher/Yggdrasil.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/ByteBufUtils.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/ByteBufUtils.class new file mode 100644 index 0000000..54cfb72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/ByteBufUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEmbeddedChannel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEmbeddedChannel.class new file mode 100644 index 0000000..7dd19e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEmbeddedChannel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$1.class new file mode 100644 index 0000000..f8e9ab3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory$1.class new file mode 100644 index 0000000..efd7cb8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory$2.class new file mode 100644 index 0000000..ad3ae2a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory.class new file mode 100644 index 0000000..8d010e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel$EventFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel.class new file mode 100644 index 0000000..3bb3ef3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLEventChannel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLIndexedMessageToMessageCodec.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLIndexedMessageToMessageCodec.class new file mode 100644 index 0000000..6251fad Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLIndexedMessageToMessageCodec.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientConnectedToServerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientConnectedToServerEvent.class new file mode 100644 index 0000000..7de48ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientConnectedToServerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientCustomPacketEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientCustomPacketEvent.class new file mode 100644 index 0000000..68c9f66 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientCustomPacketEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientDisconnectionFromServerEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientDisconnectionFromServerEvent.class new file mode 100644 index 0000000..e66bd13 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ClientDisconnectionFromServerEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomNetworkEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomNetworkEvent.class new file mode 100644 index 0000000..c5a584a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomNetworkEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomPacketEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomPacketEvent.class new file mode 100644 index 0000000..25d78c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomPacketEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomPacketRegistrationEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomPacketRegistrationEvent.class new file mode 100644 index 0000000..8e255ea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$CustomPacketRegistrationEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerConnectionFromClientEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerConnectionFromClientEvent.class new file mode 100644 index 0000000..fadc207 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerConnectionFromClientEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerCustomPacketEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerCustomPacketEvent.class new file mode 100644 index 0000000..6220a26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerCustomPacketEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerDisconnectionFromClientEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerDisconnectionFromClientEvent.class new file mode 100644 index 0000000..d4f4ede Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent$ServerDisconnectionFromClientEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent.class new file mode 100644 index 0000000..a8ea41c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkException.class new file mode 100644 index 0000000..3f219ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLNetworkException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$1.class new file mode 100644 index 0000000..f928c78 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$1.class new file mode 100644 index 0000000..0d40c43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$10.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$10.class new file mode 100644 index 0000000..be2b909 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$10.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$2.class new file mode 100644 index 0000000..42c9c74 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$3.class new file mode 100644 index 0000000..cfddc29 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$4.class new file mode 100644 index 0000000..3c362b3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$5.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$5.class new file mode 100644 index 0000000..9b337c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$6.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$6.class new file mode 100644 index 0000000..e4c7c46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$7.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$7.class new file mode 100644 index 0000000..7682d28 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$8.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$8.class new file mode 100644 index 0000000..4934846 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$9.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$9.class new file mode 100644 index 0000000..80999af Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget$9.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget.class new file mode 100644 index 0000000..56ae86d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler$OutboundTarget.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler.class new file mode 100644 index 0000000..df70245 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/FMLOutboundHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/IGuiHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/IGuiHandler.class new file mode 100644 index 0000000..23b058c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/IGuiHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkCheckHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkCheckHandler.class new file mode 100644 index 0000000..11de6f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkCheckHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkEventFiringHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkEventFiringHandler.class new file mode 100644 index 0000000..45cf567 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkEventFiringHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkHandshakeEstablished.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkHandshakeEstablished.class new file mode 100644 index 0000000..f19feac Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkHandshakeEstablished.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkRegistry$TargetPoint.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkRegistry$TargetPoint.class new file mode 100644 index 0000000..84d88b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkRegistry$TargetPoint.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkRegistry.class new file mode 100644 index 0000000..9d0c4ed Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/NetworkRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$1.class new file mode 100644 index 0000000..33ed81d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$2.class new file mode 100644 index 0000000..04f9f19 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$3.class new file mode 100644 index 0000000..6b4e1e0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$4.class new file mode 100644 index 0000000..22e5fda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler.class new file mode 100644 index 0000000..5cbd779 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/PacketLoggingHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/ChannelRegistrationHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/ChannelRegistrationHandler.class new file mode 100644 index 0000000..21b5355 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/ChannelRegistrationHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$1.class new file mode 100644 index 0000000..9af1d65 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$2.class new file mode 100644 index 0000000..2cd9a7c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$3.class new file mode 100644 index 0000000..535e2d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$4.class new file mode 100644 index 0000000..511f1c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$5.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$5.class new file mode 100644 index 0000000..36404fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$6.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$6.class new file mode 100644 index 0000000..ed9ba10 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$7.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$7.class new file mode 100644 index 0000000..83272d1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$7.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$8.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$8.class new file mode 100644 index 0000000..32bff5d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState$8.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState.class new file mode 100644 index 0000000..b3a7108 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeCodec.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeCodec.class new file mode 100644 index 0000000..c67d8e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeCodec.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ClientHello.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ClientHello.class new file mode 100644 index 0000000..264f131 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ClientHello.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$HandshakeAck.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$HandshakeAck.class new file mode 100644 index 0000000..614591f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$HandshakeAck.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$HandshakeReset.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$HandshakeReset.class new file mode 100644 index 0000000..6e6305f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$HandshakeReset.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ModList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ModList.class new file mode 100644 index 0000000..e3d610e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ModList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$RegistryData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$RegistryData.class new file mode 100644 index 0000000..d0339cd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$RegistryData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ServerHello.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ServerHello.class new file mode 100644 index 0000000..b580676 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage$ServerHello.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage.class new file mode 100644 index 0000000..2d9484e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$1.class new file mode 100644 index 0000000..47645e7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$2.class new file mode 100644 index 0000000..847cde5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$3.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$3.class new file mode 100644 index 0000000..81657bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$3.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$4.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$4.class new file mode 100644 index 0000000..d0018cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$4.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$5.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$5.class new file mode 100644 index 0000000..44466d6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$5.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$6.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$6.class new file mode 100644 index 0000000..4a4f468 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState$6.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState.class new file mode 100644 index 0000000..a29901b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/FMLHandshakeServerState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/HandshakeInjector.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/HandshakeInjector.class new file mode 100644 index 0000000..d3926a4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/HandshakeInjector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/HandshakeMessageHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/HandshakeMessageHandler.class new file mode 100644 index 0000000..9ebff68 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/HandshakeMessageHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/IHandshakeState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/IHandshakeState.class new file mode 100644 index 0000000..c3c6c3a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/IHandshakeState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$1.class new file mode 100644 index 0000000..8d41427 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$2.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$2.class new file mode 100644 index 0000000..55b3dae Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$2.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$ConnectionState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$ConnectionState.class new file mode 100644 index 0000000..d8e39c1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$ConnectionState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$ConnectionType.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$ConnectionType.class new file mode 100644 index 0000000..6b9d4c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$ConnectionType.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$MultiPartCustomPayload.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$MultiPartCustomPayload.class new file mode 100644 index 0000000..703d125 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher$MultiPartCustomPayload.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher.class new file mode 100644 index 0000000..4a7ccee Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/handshake/NetworkDispatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.class new file mode 100644 index 0000000..ed75b89 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$CompleteHandshake.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$CompleteHandshake.class new file mode 100644 index 0000000..e43a911 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$CompleteHandshake.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$EntityMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$EntityMessage.class new file mode 100644 index 0000000..a62ef5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$EntityMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$EntitySpawnMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$EntitySpawnMessage.class new file mode 100644 index 0000000..5461492 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$EntitySpawnMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$OpenGui.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$OpenGui.class new file mode 100644 index 0000000..1a8c106 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage$OpenGui.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage.class new file mode 100644 index 0000000..90eaff3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLNetworkHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLNetworkHandler.class new file mode 100644 index 0000000..a86057c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLNetworkHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLProxyPacket.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLProxyPacket.class new file mode 100644 index 0000000..0cabd26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLProxyPacket.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLRuntimeCodec.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLRuntimeCodec.class new file mode 100644 index 0000000..6ae6344 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/FMLRuntimeCodec.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/HandshakeCompletionHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/HandshakeCompletionHandler.class new file mode 100644 index 0000000..e13a6f8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/HandshakeCompletionHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$1.class new file mode 100644 index 0000000..c043cc7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$DefaultNetworkChecker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$DefaultNetworkChecker.class new file mode 100644 index 0000000..cf4aa91 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$DefaultNetworkChecker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$IgnoredChecker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$IgnoredChecker.class new file mode 100644 index 0000000..cec9c87 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$IgnoredChecker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$MethodNetworkChecker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$MethodNetworkChecker.class new file mode 100644 index 0000000..e965734 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$MethodNetworkChecker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$NetworkChecker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$NetworkChecker.class new file mode 100644 index 0000000..0463710 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder$NetworkChecker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder.class new file mode 100644 index 0000000..660dc9c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/NetworkModHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/OpenGuiHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/OpenGuiHandler.class new file mode 100644 index 0000000..6c63496 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/internal/OpenGuiHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/IMessage.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/IMessage.class new file mode 100644 index 0000000..1afc0cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/IMessage.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/IMessageHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/IMessageHandler.class new file mode 100644 index 0000000..1d5034a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/IMessageHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/MessageContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/MessageContext.class new file mode 100644 index 0000000..ffb41ba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/MessageContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleChannelHandlerWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleChannelHandlerWrapper.class new file mode 100644 index 0000000..a12561c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleChannelHandlerWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleIndexedCodec.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleIndexedCodec.class new file mode 100644 index 0000000..d752b27 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleIndexedCodec.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleNetworkWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleNetworkWrapper.class new file mode 100644 index 0000000..fc054c5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/network/simpleimpl/SimpleNetworkWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/ClassPatch.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/ClassPatch.class new file mode 100644 index 0000000..8ccb701 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/ClassPatch.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/ClassPatchManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/ClassPatchManager.class new file mode 100644 index 0000000..63b9145 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/ClassPatchManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/GenDiffSet.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/GenDiffSet.class new file mode 100644 index 0000000..9cfc756 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/patcher/GenDiffSet.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntry$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntry$1.class new file mode 100644 index 0000000..d5137cc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntry$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntry.class new file mode 100644 index 0000000..13626c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$1.class new file mode 100644 index 0000000..6b58e7b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$BuiltEntityEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$BuiltEntityEntry.class new file mode 100644 index 0000000..50e3bbe Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$BuiltEntityEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$ConstructorFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$ConstructorFactory.class new file mode 100644 index 0000000..10dc1c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$ConstructorFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$Spawn.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$Spawn.class new file mode 100644 index 0000000..8c153cb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder$Spawn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder.class new file mode 100644 index 0000000..f09312b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityEntryBuilder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry$EntityRegistration$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry$EntityRegistration$1.class new file mode 100644 index 0000000..6f17e41 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry$EntityRegistration$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry$EntityRegistration.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry$EntityRegistration.class new file mode 100644 index 0000000..9a6b820 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry$EntityRegistration.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry.class new file mode 100644 index 0000000..060a820 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/EntityRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ExistingSubstitutionException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ExistingSubstitutionException.class new file mode 100644 index 0000000..3ecee83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ExistingSubstitutionException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ForgeRegistries.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ForgeRegistries.class new file mode 100644 index 0000000..8d922f4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ForgeRegistries.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry$ItemStackHolder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry$ItemStackHolder.class new file mode 100644 index 0000000..2364c43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry$ItemStackHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry$ObjectHolder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry$ObjectHolder.class new file mode 100644 index 0000000..37273e4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry$ObjectHolder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry.class new file mode 100644 index 0000000..0250b8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/GameRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/IEntityAdditionalSpawnData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/IEntityAdditionalSpawnData.class new file mode 100644 index 0000000..fa79c44 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/IEntityAdditionalSpawnData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/IThrowableEntity.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/IThrowableEntity.class new file mode 100644 index 0000000..d40e562 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/IThrowableEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ItemStackHolderInjector.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ItemStackHolderInjector.class new file mode 100644 index 0000000..9c07d7a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ItemStackHolderInjector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ItemStackHolderRef.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ItemStackHolderRef.class new file mode 100644 index 0000000..a8886fd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/ItemStackHolderRef.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$IVillageCreationHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$IVillageCreationHandler.class new file mode 100644 index 0000000..4424b2c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$IVillageCreationHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VanillaTrades.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VanillaTrades.class new file mode 100644 index 0000000..a331700 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VanillaTrades.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VillagerCareer.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VillagerCareer.class new file mode 100644 index 0000000..3979fb3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VillagerCareer.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VillagerProfession.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VillagerProfession.class new file mode 100644 index 0000000..8206113 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry$VillagerProfession.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry.class new file mode 100644 index 0000000..f7eecd3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/registry/VillagerRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/thread/SidedThreadGroup.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/thread/SidedThreadGroup.class new file mode 100644 index 0000000..12191bf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/thread/SidedThreadGroup.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/thread/SidedThreadGroups.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/thread/SidedThreadGroups.class new file mode 100644 index 0000000..70b16b4 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/thread/SidedThreadGroups.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSorter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSorter.class new file mode 100644 index 0000000..5074bba Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSorter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSortingException$SortingExceptionData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSortingException$SortingExceptionData.class new file mode 100644 index 0000000..9e2bc3f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSortingException$SortingExceptionData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSortingException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSortingException.class new file mode 100644 index 0000000..7934121 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/ModSortingException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/TopologicalSort$DirectedGraph.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/TopologicalSort$DirectedGraph.class new file mode 100644 index 0000000..34cacdd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/TopologicalSort$DirectedGraph.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/TopologicalSort.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/TopologicalSort.class new file mode 100644 index 0000000..e2cbdbb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/toposort/TopologicalSort.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ArtifactVersion.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ArtifactVersion.class new file mode 100644 index 0000000..02ee55b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ArtifactVersion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$1.class new file mode 100644 index 0000000..d6ebacd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$IntegerItem.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$IntegerItem.class new file mode 100644 index 0000000..1c85547 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$IntegerItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$Item.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$Item.class new file mode 100644 index 0000000..bc81ebd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$Item.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$ListItem.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$ListItem.class new file mode 100644 index 0000000..e0a0d83 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$ListItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$StringItem.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$StringItem.class new file mode 100644 index 0000000..2a3cf2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion$StringItem.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion.class new file mode 100644 index 0000000..dbf887a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/ComparableVersion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DefaultArtifactVersion.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DefaultArtifactVersion.class new file mode 100644 index 0000000..00392e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DefaultArtifactVersion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser$DependencyInfo.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser$DependencyInfo.class new file mode 100644 index 0000000..a626ada Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser$DependencyInfo.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser$DependencyParserException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser$DependencyParserException.class new file mode 100644 index 0000000..15f50e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser$DependencyParserException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser.class new file mode 100644 index 0000000..faafa34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/DependencyParser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/InvalidVersionSpecificationException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/InvalidVersionSpecificationException.class new file mode 100644 index 0000000..d7adb72 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/InvalidVersionSpecificationException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/Restriction.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/Restriction.class new file mode 100644 index 0000000..4687737 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/Restriction.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/VersionParser.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/VersionParser.class new file mode 100644 index 0000000..cc86d8a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/VersionParser.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/VersionRange.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/VersionRange.class new file mode 100644 index 0000000..acefd26 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/common/versioning/VersionRange.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/CoreModManager$FMLPluginWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/CoreModManager$FMLPluginWrapper.class new file mode 100644 index 0000000..a87ea80 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/CoreModManager$FMLPluginWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/CoreModManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/CoreModManager.class new file mode 100644 index 0000000..03670b1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/CoreModManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLCorePlugin.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLCorePlugin.class new file mode 100644 index 0000000..2fab177 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLCorePlugin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLInjectionData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLInjectionData.class new file mode 100644 index 0000000..d47ddc7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLInjectionData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLLaunchHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLLaunchHandler.class new file mode 100644 index 0000000..de1c742 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLLaunchHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLRelaunchLog.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLRelaunchLog.class new file mode 100644 index 0000000..219ed6f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLRelaunchLog.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLSecurityManager$ExitTrappedException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLSecurityManager$ExitTrappedException.class new file mode 100644 index 0000000..a29fb8c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLSecurityManager$ExitTrappedException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLSecurityManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLSecurityManager.class new file mode 100644 index 0000000..b9caebc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FMLSecurityManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FileListHelper$CaseInsensitiveFileComparator.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FileListHelper$CaseInsensitiveFileComparator.class new file mode 100644 index 0000000..b193670 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FileListHelper$CaseInsensitiveFileComparator.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FileListHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FileListHelper.class new file mode 100644 index 0000000..c26df2b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/FileListHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLCallHook.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLCallHook.class new file mode 100644 index 0000000..f3c6763 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLCallHook.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$DependsOn.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$DependsOn.class new file mode 100644 index 0000000..2c1918e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$DependsOn.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$MCVersion.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$MCVersion.class new file mode 100644 index 0000000..3366102 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$MCVersion.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$Name.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$Name.class new file mode 100644 index 0000000..f31ab2d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$Name.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$SortingIndex.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$SortingIndex.class new file mode 100644 index 0000000..e6ccbaf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$SortingIndex.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$TransformerExclusions.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$TransformerExclusions.class new file mode 100644 index 0000000..67f46e5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin$TransformerExclusions.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin.class new file mode 100644 index 0000000..0251fa2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/IFMLLoadingPlugin.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToAccessFieldException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToAccessFieldException.class new file mode 100644 index 0000000..b74eb76 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToAccessFieldException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindClassException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindClassException.class new file mode 100644 index 0000000..cee131e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindClassException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindFieldException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindFieldException.class new file mode 100644 index 0000000..1e40132 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindFieldException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindMethodException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindMethodException.class new file mode 100644 index 0000000..3706ccb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnableToFindMethodException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnknownConstructorException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnknownConstructorException.class new file mode 100644 index 0000000..a21b324 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper$UnknownConstructorException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper.class new file mode 100644 index 0000000..052df48 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ReflectionHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ServerLaunchWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ServerLaunchWrapper.class new file mode 100644 index 0000000..a20ebb7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/ServerLaunchWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/Side.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/Side.class new file mode 100644 index 0000000..ff12f95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/Side.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/SideOnly.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/SideOnly.class new file mode 100644 index 0000000..3b9eb96 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/SideOnly.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/Artifact.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/Artifact.class new file mode 100644 index 0000000..b44e011 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/Artifact.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/LibraryManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/LibraryManager.class new file mode 100644 index 0000000..6f88e46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/LibraryManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/LinkRepository.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/LinkRepository.class new file mode 100644 index 0000000..1964cf2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/LinkRepository.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/MemoryModList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/MemoryModList.class new file mode 100644 index 0000000..ffe3954 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/MemoryModList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList$1.class new file mode 100644 index 0000000..5008018 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList$JsonModList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList$JsonModList.class new file mode 100644 index 0000000..e6ae81c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList$JsonModList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList.class new file mode 100644 index 0000000..3da7c9e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/ModList.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/Repository.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/Repository.class new file mode 100644 index 0000000..a482c8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/Repository.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/SnapshotJson$Entry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/SnapshotJson$Entry.class new file mode 100644 index 0000000..4da770d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/SnapshotJson$Entry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/SnapshotJson.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/SnapshotJson.class new file mode 100644 index 0000000..68101d3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/relauncher/libraries/SnapshotJson.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/ByteBufferSeekableSource.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/ByteBufferSeekableSource.class new file mode 100644 index 0000000..43bc0e1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/ByteBufferSeekableSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Checksum.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Checksum.class new file mode 100644 index 0000000..1df3fb0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Checksum.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/DebugDiffWriter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/DebugDiffWriter.class new file mode 100644 index 0000000..4d28d95 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/DebugDiffWriter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta$SourceState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta$SourceState.class new file mode 100644 index 0000000..e7b5310 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta$SourceState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta$TargetState.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta$TargetState.class new file mode 100644 index 0000000..edcdba9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta$TargetState.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta.class new file mode 100644 index 0000000..aa87586 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/Delta.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/DiffWriter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/DiffWriter.class new file mode 100644 index 0000000..2b62b55 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/DiffWriter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/GDiffPatcher.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/GDiffPatcher.class new file mode 100644 index 0000000..67024cf Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/GDiffPatcher.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/GDiffWriter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/GDiffWriter.class new file mode 100644 index 0000000..7be7c71 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/GDiffWriter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/PatchException.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/PatchException.class new file mode 100644 index 0000000..50255e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/PatchException.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/RandomAccessFileSeekableSource.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/RandomAccessFileSeekableSource.class new file mode 100644 index 0000000..0f2c571 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/RandomAccessFileSeekableSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/SeekableSource.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/SeekableSource.class new file mode 100644 index 0000000..4d835ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/repackage/com/nothome/delta/SeekableSource.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/fml/server/FMLServerHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/server/FMLServerHandler.class new file mode 100644 index 0000000..95f6ef2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/fml/server/FMLServerHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/CapabilityItemHandler$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/CapabilityItemHandler$1.class new file mode 100644 index 0000000..71a298d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/CapabilityItemHandler$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/CapabilityItemHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/CapabilityItemHandler.class new file mode 100644 index 0000000..86bba4f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/CapabilityItemHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/IItemHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/IItemHandler.class new file mode 100644 index 0000000..67010aa Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/IItemHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/IItemHandlerModifiable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/IItemHandlerModifiable.class new file mode 100644 index 0000000..76ba87e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/IItemHandlerModifiable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/ItemHandlerHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/ItemHandlerHelper.class new file mode 100644 index 0000000..824c1eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/ItemHandlerHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/ItemStackHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/ItemStackHandler.class new file mode 100644 index 0000000..d6b243f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/ItemStackHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/SlotItemHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/SlotItemHandler.class new file mode 100644 index 0000000..03451c3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/SlotItemHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaDoubleChestItemHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaDoubleChestItemHandler.class new file mode 100644 index 0000000..ced2818 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaDoubleChestItemHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaHopperItemHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaHopperItemHandler.class new file mode 100644 index 0000000..f76d2c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaHopperItemHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaInventoryCodeHooks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaInventoryCodeHooks.class new file mode 100644 index 0000000..2f97302 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/VanillaInventoryCodeHooks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/CombinedInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/CombinedInvWrapper.class new file mode 100644 index 0000000..4dfcb98 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/CombinedInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EmptyHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EmptyHandler.class new file mode 100644 index 0000000..1b02e25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EmptyHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.class new file mode 100644 index 0000000..0bfb9c9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.class new file mode 100644 index 0000000..33aab34 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityHandsInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityHandsInvWrapper.class new file mode 100644 index 0000000..1cb0b1f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/EntityHandsInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/InvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/InvWrapper.class new file mode 100644 index 0000000..bd46c74 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/InvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.class new file mode 100644 index 0000000..4a5cef6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerInvWrapper.class new file mode 100644 index 0000000..e95eb69 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerMainInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerMainInvWrapper.class new file mode 100644 index 0000000..8cf31b5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerMainInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerOffhandInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerOffhandInvWrapper.class new file mode 100644 index 0000000..7d485db Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/PlayerOffhandInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/RangedWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/RangedWrapper.class new file mode 100644 index 0000000..00c2511 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/RangedWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/SidedInvWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/SidedInvWrapper.class new file mode 100644 index 0000000..f37703f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/items/wrapper/SidedInvWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/DyeUtils.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/DyeUtils.class new file mode 100644 index 0000000..e8361e3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/DyeUtils.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreDictionary$OreRegisterEvent.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreDictionary$OreRegisterEvent.class new file mode 100644 index 0000000..1e95822 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreDictionary$OreRegisterEvent.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreDictionary.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreDictionary.class new file mode 100644 index 0000000..76646c7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreDictionary.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreIngredient.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreIngredient.class new file mode 100644 index 0000000..ddcf9f5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/OreIngredient.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$1.class new file mode 100644 index 0000000..7717a25 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$Category.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$Category.class new file mode 100644 index 0000000..5decb1e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$Category.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$SortEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$SortEntry.class new file mode 100644 index 0000000..5118b6e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter$SortEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter.class new file mode 100644 index 0000000..fd30fd1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/RecipeSorter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/ShapedOreRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/ShapedOreRecipe.class new file mode 100644 index 0000000..1afed7f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/ShapedOreRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/ShapelessOreRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/ShapelessOreRecipe.class new file mode 100644 index 0000000..58daf09 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/oredict/ShapelessOreRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$1.class new file mode 100644 index 0000000..b3ec01e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$OverrideOwner.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$OverrideOwner.class new file mode 100644 index 0000000..a91c1b8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$OverrideOwner.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$Snapshot.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$Snapshot.class new file mode 100644 index 0000000..76ec27a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry$Snapshot.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry.class new file mode 100644 index 0000000..1dfb51e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ForgeRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$1.class new file mode 100644 index 0000000..7097940 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks$1.class new file mode 100644 index 0000000..f2b5bce Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks$BlockDummyAir.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks$BlockDummyAir.class new file mode 100644 index 0000000..436fc5a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks$BlockDummyAir.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks.class new file mode 100644 index 0000000..c973ce8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$BlockCallbacks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$ClearableObjectIntIdentityMap.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$ClearableObjectIntIdentityMap.class new file mode 100644 index 0000000..4dde2e6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$ClearableObjectIntIdentityMap.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$EntityCallbacks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$EntityCallbacks.class new file mode 100644 index 0000000..6b5d3c6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$EntityCallbacks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$ItemCallbacks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$ItemCallbacks.class new file mode 100644 index 0000000..7380efc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$ItemCallbacks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$RecipeCallbacks$DummyRecipe.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$RecipeCallbacks$DummyRecipe.class new file mode 100644 index 0000000..f30fae1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$RecipeCallbacks$DummyRecipe.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$RecipeCallbacks.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$RecipeCallbacks.class new file mode 100644 index 0000000..1703588 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData$RecipeCallbacks.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData.class new file mode 100644 index 0000000..37c77d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/GameData.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$AddCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$AddCallback.class new file mode 100644 index 0000000..9205059 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$AddCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$ClearCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$ClearCallback.class new file mode 100644 index 0000000..b5ff6d2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$ClearCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$CreateCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$CreateCallback.class new file mode 100644 index 0000000..dadd066 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$CreateCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$DummyFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$DummyFactory.class new file mode 100644 index 0000000..514a89e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$DummyFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$MissingFactory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$MissingFactory.class new file mode 100644 index 0000000..6a86c20 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$MissingFactory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$ValidateCallback.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$ValidateCallback.class new file mode 100644 index 0000000..e325442 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry$ValidateCallback.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry.class new file mode 100644 index 0000000..a2322ef Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry$Impl$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry$Impl$1.class new file mode 100644 index 0000000..559eeb5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry$Impl$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry$Impl.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry$Impl.class new file mode 100644 index 0000000..cc21184 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry$Impl.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry.class new file mode 100644 index 0000000..a490dc1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryEntry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryInternal.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryInternal.class new file mode 100644 index 0000000..210cc5e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryInternal.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryModifiable.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryModifiable.class new file mode 100644 index 0000000..45abb9f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IForgeRegistryModifiable.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ILockableRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ILockableRegistry.class new file mode 100644 index 0000000..d39fa38 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ILockableRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IRegistryDelegate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IRegistryDelegate.class new file mode 100644 index 0000000..a322ddc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/IRegistryDelegate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper$1.class new file mode 100644 index 0000000..ae6d1d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper$Factory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper$Factory.class new file mode 100644 index 0000000..9196bd5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper.class new file mode 100644 index 0000000..8a2f37e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedDefaultedWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedWrapper$Factory.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedWrapper$Factory.class new file mode 100644 index 0000000..4434f3c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedWrapper$Factory.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedWrapper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedWrapper.class new file mode 100644 index 0000000..722051c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/NamespacedWrapper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRef$FinalFieldHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRef$FinalFieldHelper.class new file mode 100644 index 0000000..bfa35f1 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRef$FinalFieldHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRef.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRef.class new file mode 100644 index 0000000..f27a21c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRef.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRegistry.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRegistry.class new file mode 100644 index 0000000..c04c6c8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/ObjectHolderRegistry.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryBuilder.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryBuilder.class new file mode 100644 index 0000000..5b16fb7 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryBuilder.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryDelegate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryDelegate.class new file mode 100644 index 0000000..da0b449 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryDelegate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryManager.class b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryManager.class new file mode 100644 index 0000000..8659d67 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/registries/RegistryManager.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/ForgeTimeTracker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/ForgeTimeTracker.class new file mode 100644 index 0000000..1170ca9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/ForgeTimeTracker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/ChunkGenWorker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/ChunkGenWorker.class new file mode 100644 index 0000000..dfebae3 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/ChunkGenWorker.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandDimensions.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandDimensions.class new file mode 100644 index 0000000..5085128 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandDimensions.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity$1.class new file mode 100644 index 0000000..235ce8f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity$EntityListCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity$EntityListCommand.class new file mode 100644 index 0000000..abc0e43 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity$EntityListCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity.class new file mode 100644 index 0000000..c7476e8 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandGenerate.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandGenerate.class new file mode 100644 index 0000000..f5072da Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandGenerate.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension$1.class new file mode 100644 index 0000000..b54c58a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension$CommandTeleporter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension$CommandTeleporter.class new file mode 100644 index 0000000..404ffa5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension$CommandTeleporter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension.class new file mode 100644 index 0000000..7028c61 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandSetDimension.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTps.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTps.class new file mode 100644 index 0000000..3e5608c Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTps.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$1.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$1.class new file mode 100644 index 0000000..d0ece4a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$1.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$ResetTrackingCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$ResetTrackingCommand.class new file mode 100644 index 0000000..ecbc015 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$ResetTrackingCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$StartTrackingCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$StartTrackingCommand.class new file mode 100644 index 0000000..2580a8e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$StartTrackingCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsBaseCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsBaseCommand.class new file mode 100644 index 0000000..19af473 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsBaseCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsEntity.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsEntity.class new file mode 100644 index 0000000..76756bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsTileEntity.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsTileEntity.class new file mode 100644 index 0000000..8cb73e9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack$TrackResultsTileEntity.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack.class new file mode 100644 index 0000000..1b96ec2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTrack.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeBase.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeBase.class new file mode 100644 index 0000000..9b5bcea Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeBase.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeHelp$HelpSubCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeHelp$HelpSubCommand.class new file mode 100644 index 0000000..40a6dd6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeHelp$HelpSubCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeHelp.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeHelp.class new file mode 100644 index 0000000..ec986bb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/CommandTreeHelp.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/ForgeCommand.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/ForgeCommand.class new file mode 100644 index 0000000..710215f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/ForgeCommand.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/TextComponentHelper.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/TextComponentHelper.class new file mode 100644 index 0000000..f360ae2 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/TextComponentHelper.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/package-info.class new file mode 100644 index 0000000..8582fda Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/command/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/console/ConsoleCommandCompleter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/console/ConsoleCommandCompleter.class new file mode 100644 index 0000000..68a846d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/console/ConsoleCommandCompleter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/console/TerminalHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/console/TerminalHandler.class new file mode 100644 index 0000000..6dbaa46 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/console/TerminalHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/DefaultPermissionHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/DefaultPermissionHandler.class new file mode 100644 index 0000000..904230e Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/DefaultPermissionHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/DefaultPermissionLevel.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/DefaultPermissionLevel.class new file mode 100644 index 0000000..cb9de37 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/DefaultPermissionLevel.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/IPermissionHandler.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/IPermissionHandler.class new file mode 100644 index 0000000..4bce34a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/IPermissionHandler.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/PermissionAPI.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/PermissionAPI.class new file mode 100644 index 0000000..211c872 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/PermissionAPI.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/AreaContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/AreaContext.class new file mode 100644 index 0000000..1fec35f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/AreaContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/BlockPosContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/BlockPosContext.class new file mode 100644 index 0000000..31ae1d5 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/BlockPosContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/Context.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/Context.class new file mode 100644 index 0000000..9be95c0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/Context.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/ContextKey.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/ContextKey.class new file mode 100644 index 0000000..c631136 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/ContextKey.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/ContextKeys.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/ContextKeys.class new file mode 100644 index 0000000..059304b Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/ContextKeys.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/IContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/IContext.class new file mode 100644 index 0000000..d25115f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/IContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/PlayerContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/PlayerContext.class new file mode 100644 index 0000000..5e614d0 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/PlayerContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/TargetContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/TargetContext.class new file mode 100644 index 0000000..68298eb Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/TargetContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/WorldContext.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/WorldContext.class new file mode 100644 index 0000000..3e6495d Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/WorldContext.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/package-info.class new file mode 100644 index 0000000..9fc1430 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/context/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/package-info.class new file mode 100644 index 0000000..860282f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/permission/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/HighlightErrorConverter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/HighlightErrorConverter.class new file mode 100644 index 0000000..22914fc Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/HighlightErrorConverter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/MinecraftFormattingConverter.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/MinecraftFormattingConverter.class new file mode 100644 index 0000000..6404f1f Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/MinecraftFormattingConverter.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/TerminalConsoleAppender.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/TerminalConsoleAppender.class new file mode 100644 index 0000000..df98fa6 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/TerminalConsoleAppender.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/package-info.class new file mode 100644 index 0000000..d6f1933 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/LoggerNamePatternSelector$LoggerNameSelector.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/LoggerNamePatternSelector$LoggerNameSelector.class new file mode 100644 index 0000000..b8c8a79 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/LoggerNamePatternSelector$LoggerNameSelector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/LoggerNamePatternSelector.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/LoggerNamePatternSelector.class new file mode 100644 index 0000000..6719f6a Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/LoggerNamePatternSelector.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/package-info.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/package-info.class new file mode 100644 index 0000000..25533d9 Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/terminalconsole/util/package-info.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/timings/ForgeTimings.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/timings/ForgeTimings.class new file mode 100644 index 0000000..0e32efd Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/timings/ForgeTimings.class differ diff --git a/build/tmp/recompileMc/compiled/net/minecraftforge/server/timings/TimeTracker.class b/build/tmp/recompileMc/compiled/net/minecraftforge/server/timings/TimeTracker.class new file mode 100644 index 0000000..f33a7be Binary files /dev/null and b/build/tmp/recompileMc/compiled/net/minecraftforge/server/timings/TimeTracker.class differ diff --git a/build/tmp/recompileMc/compiled/paulscode/sound/codecs/CodecIBXM.class b/build/tmp/recompileMc/compiled/paulscode/sound/codecs/CodecIBXM.class new file mode 100644 index 0000000..32b5703 Binary files /dev/null and b/build/tmp/recompileMc/compiled/paulscode/sound/codecs/CodecIBXM.class differ diff --git a/build/tmp/recompileMc/sources/ibxm/Channel.java b/build/tmp/recompileMc/sources/ibxm/Channel.java new file mode 100644 index 0000000..928abe9 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Channel.java @@ -0,0 +1,946 @@ + +package ibxm; + +public class Channel { + public int pattern_loop_row; + + private Module module; + private Instrument instrument; + private Sample sample; + private int[] global_volume, current_note; + private boolean linear_periods, fast_volume_slides, key_on, silent; + private int sample_idx, sample_frac, step, left_gain, right_gain; + @SuppressWarnings("unused") //Forge + private int volume, panning, fine_tune, period, porta_period, key_add; + private int tremolo_speed, tremolo_depth, tremolo_tick, tremolo_wave, tremolo_add; + private int vibrato_speed, vibrato_depth, vibrato_tick, vibrato_wave, vibrato_add; + private int volume_slide_param, portamento_param, retrig_param; + private int volume_envelope_tick, panning_envelope_tick; + private int effect_tick, trigger_tick, fade_out_volume, random_seed; + + private int log_2_sampling_rate; + private static final int LOG_2_29024 = LogTable.log_2( 29024 ); + private static final int LOG_2_8287 = LogTable.log_2( 8287 ); + private static final int LOG_2_8363 = LogTable.log_2( 8363 ); + private static final int LOG_2_1712 = LogTable.log_2( 1712 ); + + private static final int[] sine_table = new int[] { + 0, 24 , 49, 74, 97, 120, 141, 161, 180, 197, 212, 224, 235, 244, 250, 253, + 255, 253, 250, 244, 235, 224, 212, 197, 180, 161, 141, 120, 97, 74, 49, 24 + }; + + public Channel( Module mod, int sampling_rate, int[] global_vol ) { + module = mod; + global_volume = global_vol; + linear_periods = module.linear_periods; + fast_volume_slides = module.fast_volume_slides; + current_note = new int[ 5 ]; + log_2_sampling_rate = LogTable.log_2( sampling_rate ); + } + + public void reset() { + tremolo_speed = 0; + tremolo_depth = 0; + tremolo_wave = 0; + vibrato_speed = 0; + vibrato_depth = 0; + vibrato_wave = 0; + volume_slide_param = 0; + portamento_param = 0; + retrig_param = 0; + random_seed = 0xABC123; + instrument = module.get_instrument( 0 ); + row( 48, 256, 0, 0, 0 ); + } + + public void resample( int[] mixing_buffer, int frame_offset, int frames, int quality ) { + if( !silent ) { + switch( quality ) { + default: + sample.resample_nearest( sample_idx, sample_frac, step, left_gain, right_gain, mixing_buffer, frame_offset, frames ); + break; + case 1: + sample.resample_linear( sample_idx, sample_frac, step, left_gain, right_gain, mixing_buffer, frame_offset, frames ); + break; + case 2: + sample.resample_sinc( sample_idx, sample_frac, step, left_gain, right_gain, mixing_buffer, frame_offset, frames ); + break; + } + } + } + + public void update_sample_idx( int samples ) { + sample_frac += step * samples; + sample_idx += sample_frac >> IBXM.FP_SHIFT; + sample_frac &= IBXM.FP_MASK; + } + + public void set_volume( int vol ) { + if( vol < 0 ) { + vol = 0; + } + if( vol > 64 ) { + vol = 64; + } + volume = vol; + } + + public void set_panning( int pan ) { + if( pan < 0 ) { + pan = 0; + } + if( pan > 255 ) { + pan = 255; + } + panning = pan; + } + + public void row( int key, int inst_idx, int volume_column, int effect, int effect_param ) { + effect = effect & 0xFF; + if( effect >= 0x30 ) { + /* Effects above 0x30 are internal.*/ + effect = 0; + } + if( effect == 0x00 && effect_param != 0 ) { + /* Arpeggio.*/ + effect = 0x40; + } + if( effect == 0x0E ) { + /* Renumber 0x0Ex effect command.*/ + effect = 0x30 + ( ( effect_param & 0xF0 ) >> 4 ); + effect_param = effect_param & 0x0F; + } + if( effect == 0x21 ) { + /* Renumber 0x21x effect command.*/ + effect = 0x40 + ( ( effect_param & 0xF0 ) >> 4 ); + effect_param = effect_param & 0x0F; + } + current_note[ 0 ] = key; + current_note[ 1 ] = inst_idx; + current_note[ 2 ] = volume_column; + current_note[ 3 ] = effect; + current_note[ 4 ] = effect_param; + effect_tick = 0; + trigger_tick += 1; + update_envelopes(); + key_add = 0; + vibrato_add = 0; + tremolo_add = 0; + if( ! ( effect == 0x3D && effect_param > 0 ) ) { + /* Not note delay.*/ + trigger( key, inst_idx, volume_column, effect ); + /* Handle volume column.*/ + switch( volume_column & 0xF0 ) { + case 0x00: + /* Do nothing.*/ + break; + case 0x60: + /* Volume slide down.*/ + break; + case 0x70: + /* Volume slide up.*/ + break; + case 0x80: + /* Fine volume slide down.*/ + set_volume( volume - ( volume_column & 0x0F ) ); + break; + case 0x90: + /* Fine volume slide up.*/ + set_volume( volume + ( volume_column & 0x0F ) ); + break; + case 0xA0: + /* Set vibrato speed.*/ + set_vibrato_speed( volume_column & 0x0F ); + break; + case 0xB0: + /* Vibrato.*/ + set_vibrato_depth( volume_column & 0x0F ); + vibrato(); + break; + case 0xC0: + /* Set panning.*/ + set_panning( ( volume_column & 0x0F ) << 4 ); + break; + case 0xD0: + /* Panning slide left.*/ + break; + case 0xE0: + /* Panning slide right.*/ + break; + case 0xF0: + /* Tone portamento.*/ + set_portamento_param( volume_column & 0x0F ); + break; + default: + /* Set volume.*/ + set_volume( volume_column - 0x10 ); + break; + } + } + if( instrument.vibrato_depth > 0 ) { + auto_vibrato(); + } + switch( effect ) { + case 0x01: + /* Portmento Up.*/ + set_portamento_param( effect_param ); + portamento_up(); + break; + case 0x02: + /* Portamento Down.*/ + set_portamento_param( effect_param ); + portamento_down(); + break; + case 0x03: + /* Tone Portamento.*/ + set_portamento_param( effect_param ); + break; + case 0x04: + /* Vibrato.*/ + set_vibrato_speed( ( effect_param & 0xF0 ) >> 4 ); + set_vibrato_depth( effect_param & 0x0F ); + vibrato(); + break; + case 0x05: + /* Tone Portamento + Volume Slide.*/ + set_volume_slide_param( effect_param ); + volume_slide(); + break; + case 0x06: + /* Vibrato + Volume Slide.*/ + set_volume_slide_param( effect_param ); + vibrato(); + volume_slide(); + break; + case 0x07: + /* Tremolo.*/ + set_tremolo_speed( ( effect_param & 0xF0 ) >> 4 ); + set_tremolo_depth( effect_param & 0x0F ); + tremolo(); + break; + case 0x08: + /* Set Panning.*/ + set_panning( effect_param ); + break; + case 0x09: + /* Set Sample Index.*/ + set_sample_index( effect_param << 8 ); + break; + case 0x0A: + /* Volume Slide.*/ + set_volume_slide_param( effect_param ); + volume_slide(); + break; + case 0x0B: + /* Pattern Jump.*/ + break; + case 0x0C: + /* Set volume.*/ + set_volume( effect_param ); + break; + case 0x0D: + /* Pattern Break.*/ + break; + case 0x0E: + /* Extended Commands (See 0x30-0x3F).*/ + break; + case 0x0F: + /* Set Speed/Tempo.*/ + break; + case 0x10: + /* Set Global Volume.*/ + set_global_volume( effect_param ); + break; + case 0x11: + /* global Volume Slide.*/ + set_volume_slide_param( effect_param ); + break; + case 0x14: + /* Key Off*/ + if( effect_param == 0 ) { + key_on = false; + } + break; + case 0x15: + /* Set Envelope Tick.*/ + set_envelope_tick( effect_param ); + break; + case 0x19: + /* Panning Slide.*/ + set_volume_slide_param( effect_param ); + break; + case 0x1B: + /* Retrig + Volume Slide.*/ + set_retrig_param( effect_param ); + retrig_volume_slide(); + break; + case 0x1D: + /* Tremor.*/ + set_retrig_param( effect_param ); + tremor(); + break; + case 0x24: + /* S3M Fine Vibrato.*/ + set_vibrato_speed( ( effect_param & 0xF0 ) >> 4 ); + set_vibrato_depth( effect_param & 0x0F ); + fine_vibrato(); + break; + case 0x25: + /* S3M Set Speed.*/ + break; + case 0x30: + /* Amiga Set Filter.*/ + break; + case 0x31: + /* Fine Portamento Up.*/ + set_portamento_param( 0xF0 | effect_param ); + portamento_up(); + break; + case 0x32: + /* Fine Portamento Down.*/ + set_portamento_param( 0xF0 | effect_param ); + portamento_down(); + break; + case 0x33: + /* Set Glissando Mode.*/ + break; + case 0x34: + /* Set Vibrato Waveform.*/ + set_vibrato_wave( effect_param ); + break; + case 0x35: + /* Set Fine Tune.*/ + break; + case 0x36: + /* Pattern Loop.*/ + break; + case 0x37: + /* Set Tremolo Waveform.*/ + set_tremolo_wave( effect_param ); + break; + case 0x38: + /* Set Panning(Obsolete).*/ + break; + case 0x39: + /* Retrig.*/ + set_retrig_param( effect_param ); + break; + case 0x3A: + /* Fine Volume Slide Up.*/ + set_volume_slide_param( ( effect_param << 4 ) | 0x0F ); + volume_slide(); + break; + case 0x3B: + /* Fine Volume Slide Down.*/ + set_volume_slide_param( 0xF0 | effect_param ); + volume_slide(); + break; + case 0x3C: + /* Note Cut.*/ + if( effect_param == 0 ) { + set_volume( 0 ); + } + break; + case 0x3D: + /* Note Delay.*/ + break; + case 0x3E: + /* Pattern Delay.*/ + break; + case 0x3F: + /* Invert Loop.*/ + break; + case 0x40: + /* Arpeggio.*/ + break; + case 0x41: + /* Extra Fine Porta Up.*/ + set_portamento_param( 0xE0 | effect_param ); + portamento_up(); + break; + case 0x42: + /* Extra Fine Porta Down.*/ + set_portamento_param( 0xE0 | effect_param ); + portamento_down(); + break; + } + calculate_amplitude(); + calculate_frequency(); + } + + public void tick() { + int volume_column, effect, effect_param; + volume_column = current_note[ 2 ]; + effect = current_note[ 3 ]; + effect_param = current_note[ 4 ]; + effect_tick += 1; + if( effect == 0x3D && effect_param == effect_tick ) { + /* Note delay.*/ + row( current_note[ 0 ], current_note[ 1 ], volume_column, 0, 0 ); + } else { + trigger_tick += 1; + vibrato_tick += 1; + tremolo_tick += 1; + update_envelopes(); + key_add = 0; + vibrato_add = 0; + tremolo_add = 0; + if( instrument.vibrato_depth > 0 ) { + auto_vibrato(); + } + switch( volume_column & 0xF0 ) { + case 0x60: + /* Volume Slide Down.*/ + set_volume( volume - ( volume_column & 0x0F ) ); + break; + case 0x70: + /* Volume Slide Up.*/ + set_volume( volume + ( volume_column & 0x0F ) ); + break; + case 0xB0: + /* Vibrato.*/ + vibrato(); + break; + case 0xD0: + /* Panning Slide Left.*/ + set_panning( panning - ( volume_column & 0x0F ) ); + break; + case 0xE0: + /* Panning Slide Right.*/ + set_panning( panning + ( volume_column & 0x0F ) ); + break; + case 0xF0: + /* Tone Portamento.*/ + tone_portamento(); + break; + } + switch( effect ) { + case 0x01: + /* Portamento Up.*/ + portamento_up(); + break; + case 0x02: + /* Portamento Down.*/ + portamento_down(); + break; + case 0x03: + /* Tone Portamento.*/ + tone_portamento(); + break; + case 0x04: + /* Vibrato.*/ + vibrato(); + break; + case 0x05: + /* Tone Portamento + Volume Slide.*/ + tone_portamento(); + volume_slide(); + break; + case 0x06: + /* Vibrato + Volume Slide */ + vibrato(); + volume_slide(); + break; + case 0x07: + /* Tremolo.*/ + tremolo(); + break; + case 0x0A: + /* Volume Slide.*/ + volume_slide(); + break; + case 0x11: + /* Global Volume Slide.*/ + global_volume_slide(); + break; + case 0x14: + /* Key off.*/ + if( effect_tick == effect_param ) { + key_on = false; + } + break; + case 0x19: + /* Panning Slide.*/ + panning_slide(); + break; + case 0x1B: + /* Retrig + Volume Slide.*/ + retrig_volume_slide(); + break; + case 0x1D: + /* Tremor.*/ + tremor(); + break; + case 0x24: + /* S3M Fine Vibrato.*/ + fine_vibrato(); + break; + case 0x39: + /* Retrig.*/ + retrig_volume_slide(); + break; + case 0x3C: + /* Note Cut.*/ + if( effect_tick == effect_param ) { + set_volume( 0 ); + } + break; + case 0x40: + /* Arpeggio.*/ + switch( effect_tick % 3 ) { + case 1: + key_add = ( effect_param & 0xF0 ) >> 4; + break; + case 2: + key_add = effect_param & 0x0F; + break; + } + break; + } + } + calculate_amplitude(); + calculate_frequency(); + } + + private void set_vibrato_speed( int speed ) { + if( speed > 0 ) { + vibrato_speed = speed; + } + } + + private void set_vibrato_depth( int depth ) { + if( depth > 0 ) { + vibrato_depth = depth; + } + } + + private void set_vibrato_wave( int wave ) { + if( wave < 0 || wave > 7 ) { + wave = 0; + } + vibrato_wave = wave; + } + + private void set_tremolo_speed( int speed ) { + if( speed > 0 ) { + tremolo_speed = speed; + } + } + + private void set_tremolo_depth( int depth ) { + if( depth > 0 ) { + tremolo_depth = depth; + } + } + + private void set_tremolo_wave( int wave ) { + if( wave < 0 || wave > 7 ) { + wave = 0; + } + tremolo_wave = wave; + } + + private void vibrato() { + int vibrato_phase; + vibrato_phase = vibrato_tick * vibrato_speed; + vibrato_add += waveform( vibrato_phase, vibrato_wave ) * vibrato_depth >> 5; + } + + private void fine_vibrato() { + int vibrato_phase; + vibrato_phase = vibrato_tick * vibrato_speed; + vibrato_add += waveform( vibrato_phase, vibrato_wave ) * vibrato_depth >> 7; + } + + private void tremolo() { + int tremolo_phase; + tremolo_phase = tremolo_tick * tremolo_speed; + tremolo_add += waveform( tremolo_phase, tremolo_wave ) * tremolo_depth >> 6; + } + + private void set_portamento_param( int param ) { + if( param != 0 ) { + portamento_param = param; + } + } + + private void tone_portamento() { + int new_period; + if( porta_period < period ) { + new_period = period - ( portamento_param << 2 ); + if( new_period < porta_period ) { + new_period = porta_period; + } + set_period( new_period ); + } + if( porta_period > period ) { + new_period = period + ( portamento_param << 2 ); + if( new_period > porta_period ) { + new_period = porta_period; + } + set_period( new_period ); + } + } + + private void portamento_up() { + if( ( portamento_param & 0xF0 ) == 0xE0 ) { + /* Extra-fine porta.*/ + if( effect_tick == 0 ) { + set_period( period - ( portamento_param & 0x0F ) ); + } + } else if( ( portamento_param & 0xF0 ) == 0xF0 ) { + /* Fine porta.*/ + if( effect_tick == 0 ) { + set_period( period - ( ( portamento_param & 0x0F ) << 2 ) ); + } + } else { + /* Normal porta.*/ + if( effect_tick > 0 ) { + set_period( period - ( portamento_param << 2 ) ); + } + } + } + + private void portamento_down() { + if( ( portamento_param & 0xF0 ) == 0xE0 ) { + /* Extra-fine porta.*/ + if( effect_tick == 0 ) { + set_period( period + ( portamento_param & 0x0F ) ); + } + } else if( ( portamento_param & 0xF0 ) == 0xF0 ) { + /* Fine porta.*/ + if( effect_tick == 0 ) { + set_period( period + ( ( portamento_param & 0x0F ) << 2 ) ); + } + } else { + /* Normal porta.*/ + if( effect_tick > 0 ) { + set_period( period + ( portamento_param << 2 ) ); + } + } + } + + private void set_period( int p ) { + if( p < 32 ) { + p = 32; + } + if( p > 32768 ) { + p = 32768; + } + period = p; + } + + private void set_global_volume( int vol ) { + if( vol < 0 ) { + vol = 0; + } + if( vol > 64 ) { + vol = 64; + } + global_volume[ 0 ] = vol; + } + + private void set_volume_slide_param( int param ) { + if( param != 0 ) { + volume_slide_param = param; + } + } + + private void global_volume_slide() { + int up, down; + up = ( volume_slide_param & 0xF0 ) >> 4; + down = volume_slide_param & 0x0F; + set_global_volume( global_volume[ 0 ] + up - down ); + } + + private void volume_slide() { + int up, down; + up = ( volume_slide_param & 0xF0 ) >> 4; + down = volume_slide_param & 0x0F; + if( down == 0x0F && up > 0 ) { + /* Fine slide up.*/ + if( effect_tick == 0 ) { + set_volume( volume + up ); + } + } else if( up == 0x0F && down > 0 ) { + /* Fine slide down.*/ + if( effect_tick == 0 ) { + set_volume( volume - down ); + } + } else { + /* Normal slide.*/ + if( effect_tick > 0 || fast_volume_slides ) { + set_volume( volume + up - down ); + } + } + } + + private void panning_slide() { + int left, right; + left = ( volume_slide_param & 0xF0 ) >> 4; + right = volume_slide_param & 0x0F; + set_panning( panning - left + right ); + } + + private void set_retrig_param( int param ) { + if( param != 0 ) { + retrig_param = param; + } + } + + private void tremor() { + int on_ticks, cycle_length, cycle_index; + on_ticks = ( ( retrig_param & 0xF0 ) >> 4 ) + 1; + cycle_length = on_ticks + ( retrig_param & 0x0F ) + 1; + cycle_index = trigger_tick % cycle_length; + if( cycle_index >= on_ticks ) { + tremolo_add = -64; + } + } + + private void retrig_volume_slide() { + int retrig_volume, retrig_tick; + retrig_volume = ( retrig_param & 0xF0 ) >> 4; + retrig_tick = retrig_param & 0x0F; + if( retrig_tick > 0 && ( trigger_tick % retrig_tick ) == 0 ) { + set_sample_index( 0 ); + switch( retrig_volume ) { + case 0x01: + set_volume( volume - 1 ); + break; + case 0x02: + set_volume( volume - 2 ); + break; + case 0x03: + set_volume( volume - 4 ); + break; + case 0x04: + set_volume( volume - 8 ); + break; + case 0x05: + set_volume( volume - 16 ); + break; + case 0x06: + set_volume( volume - volume / 3 ); + break; + case 0x07: + set_volume( volume / 2 ); + break; + case 0x09: + set_volume( volume + 1 ); + break; + case 0x0A: + set_volume( volume + 2 ); + break; + case 0x0B: + set_volume( volume + 4 ); + break; + case 0x0C: + set_volume( volume + 8 ); + break; + case 0x0D: + set_volume( volume + 16 ); + break; + case 0x0E: + set_volume( volume + volume / 2 ); + break; + case 0x0F: + set_volume( volume * 2 ); + break; + } + } + } + + private void set_sample_index( int index ) { + if( index < 0 ) { + index = 0; + } + sample_idx = index; + sample_frac = 0; + } + + private void set_envelope_tick( int tick ) { + volume_envelope_tick = tick; + panning_envelope_tick = tick; + } + + private void trigger( int key, int instrument_idx, int volume_column, int effect ) { + if( instrument_idx > 0 ) { + instrument = module.get_instrument( instrument_idx ); + sample = instrument.get_sample_from_key( key ); + set_volume( sample.volume ); + if( sample.set_panning ) { + set_panning( sample.panning ); + } + set_envelope_tick( 0 ); + fade_out_volume = 32768; + key_on = true; + } + if( key > 0 ) { + if( key < 97 ) { + porta_period = key_to_period( key ); + if( effect != 0x03 && effect != 0x05 ) { + if( ( volume_column & 0xF0 ) != 0xF0 ) { + /* Not portamento.*/ + trigger_tick = 0; + if( vibrato_wave < 4 ) { + vibrato_tick = 0; + } + if( tremolo_wave < 4 ) { + tremolo_tick = 0; + } + set_period( porta_period ); + set_sample_index( 0 ); + } + } + } else { + /* Key off.*/ + key_on = false; + } + } + } + + private void update_envelopes() { + Envelope envelope; + if( instrument.volume_envelope_active ) { + if( !key_on ) { + fade_out_volume -= instrument.volume_fade_out & 0xFFFF; + if( fade_out_volume < 0 ) { + fade_out_volume = 0; + } + } + envelope = instrument.get_volume_envelope(); + volume_envelope_tick = envelope.next_tick( volume_envelope_tick, key_on ); + } + if( instrument.panning_envelope_active ) { + envelope = instrument.get_panning_envelope(); + panning_envelope_tick = envelope.next_tick( panning_envelope_tick, key_on ); + } + } + + private void auto_vibrato() { + int sweep, depth, rate; + sweep = instrument.vibrato_sweep & 0xFF; + depth = instrument.vibrato_depth & 0x0F; + rate = instrument.vibrato_rate & 0x3F; + if( trigger_tick < sweep ) { + depth = depth * trigger_tick / sweep; + } + vibrato_add += waveform( trigger_tick * rate, 0 ) * depth >> 9; + } + + private int waveform( int phase, int wform ) { + int amplitude; + amplitude = 0; + switch( wform & 0x3 ) { + case 0: + /* Sine. */ + if( ( phase & 0x20 ) == 0 ) { + amplitude = sine_table[ phase & 0x1F ]; + } else { + amplitude = -sine_table[ phase & 0x1F ]; + } + break; + case 1: + /* Saw. */ + if( ( phase & 0x20 ) == 0 ) { + amplitude = ( phase & 0x1F ) << 3; + } else { + amplitude = ( ( phase & 0x1F ) << 3 ) - 255; + } + break; + case 2: + /* Square. */ + if( ( phase & 0x20 ) == 0 ) { + amplitude = 255; + } else { + amplitude = -255; + } + break; + case 3: + /* Random. */ + amplitude = ( random_seed >> 15 ) - 255; + random_seed = ( random_seed * 65 + 17 ) & 0xFFFFFF; + break; + } + return amplitude; + } + + private int key_to_period( int key ) { + int octave, log_2_period, period_out; + octave = ( key << IBXM.FP_SHIFT ) / 12 + sample.transpose; + if( linear_periods ) { + period_out = 7744 - ( octave * 768 >> IBXM.FP_SHIFT ); + } else { + log_2_period = LOG_2_29024 - octave; + period_out = LogTable.raise_2( log_2_period ); + period_out = period_out >> ( IBXM.FP_SHIFT - 1 ); + period_out = ( period_out >> 1 ) + ( period_out & 1 ); + } + return period_out; + } + + private void calculate_amplitude() { + int envelope_volume, tremolo_volume, amplitude; + int envelope_panning, mixer_panning, panning_range; + Envelope envelope; + envelope_volume = 0; + if( instrument.volume_envelope_active ) { + envelope = instrument.get_volume_envelope(); + envelope_volume = envelope.calculate_ampl( volume_envelope_tick ); + } else { + if( key_on ) { + envelope_volume = 64; + } + } + tremolo_volume = volume + tremolo_add; + if( tremolo_volume < 0 ) { + tremolo_volume = 0; + } + if( tremolo_volume > 64 ) { + tremolo_volume = 64; + } + amplitude = tremolo_volume << IBXM.FP_SHIFT - 6; + amplitude = amplitude * envelope_volume >> 6; + amplitude = amplitude * fade_out_volume >> 15; + amplitude = amplitude * global_volume[ 0 ] >> 6; + amplitude = amplitude * module.channel_gain >> IBXM.FP_SHIFT; + silent = sample.has_finished( sample_idx ); + if( amplitude <= 0 ) { + silent = true; + } else { + envelope_panning = 32; + if( instrument.panning_envelope_active ) { + envelope = instrument.get_panning_envelope(); + envelope_panning = envelope.calculate_ampl( panning_envelope_tick ); + } + mixer_panning = ( panning & 0xFF ) << IBXM.FP_SHIFT - 8; + panning_range = IBXM.FP_ONE - mixer_panning; + if( panning_range > mixer_panning ) { + panning_range = mixer_panning; + } + mixer_panning = mixer_panning + ( panning_range * ( envelope_panning - 32 ) >> 5 ); + left_gain = amplitude * ( IBXM.FP_ONE - mixer_panning ) >> IBXM.FP_SHIFT; + right_gain = amplitude * mixer_panning >> IBXM.FP_SHIFT; + } + } + + private void calculate_frequency() { + int vibrato_period, log_2_freq; + vibrato_period = period + vibrato_add; + if( vibrato_period < 32 ) { + vibrato_period = 32; + } + if( vibrato_period > 32768 ) { + vibrato_period = 32768; + } + if( linear_periods ) { + log_2_freq = LOG_2_8363 + ( 4608 - vibrato_period << IBXM.FP_SHIFT ) / 768; + } else { + log_2_freq = module.pal ? LOG_2_8287 : LOG_2_8363; + log_2_freq = log_2_freq + LOG_2_1712 - LogTable.log_2( vibrato_period ); + } + log_2_freq += ( key_add << IBXM.FP_SHIFT ) / 12; + step = LogTable.raise_2( log_2_freq - log_2_sampling_rate ); + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/Envelope.java b/build/tmp/recompileMc/sources/ibxm/Envelope.java new file mode 100644 index 0000000..5c07cb0 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Envelope.java @@ -0,0 +1,110 @@ + +package ibxm; + +public class Envelope { + public boolean sustain, looped; + private int sustain_tick, loop_start_tick, loop_end_tick; + private int[] ticks, ampls; + + public Envelope() { + set_num_points( 1 ); + } + + public void set_num_points( int num_points ) { + //int point; Forge: Unused + if( num_points <= 0 ) { + num_points = 1; + } + ticks = new int[ num_points ]; + ampls = new int[ num_points ]; + set_point( 0, 0, 0, false ); + } + + /* When you set a point, all subsequent points are reset. */ + public void set_point( int point, int tick, int ampl, boolean delta ) { + if( point >= 0 && point < ticks.length ) { + if( point == 0 ) { + tick = 0; + } + if( point > 0 ) { + if( delta ) tick += ticks[ point - 1 ]; + if( tick <= ticks[ point - 1 ] ) { + System.out.println( "Envelope: Point not valid (" + tick + " <= " + ticks[ point - 1 ] + ")"); + tick = ticks[ point - 1 ] + 1; + } + } + ticks[ point ] = tick; + ampls[ point ] = ampl; + point += 1; + while( point < ticks.length ) { + ticks[ point ] = ticks[ point - 1 ] + 1; + ampls[ point ] = 0; + point += 1; + } + } + } + + public void set_sustain_point( int point ) { + if( point < 0 ) { + point = 0; + } + if( point >= ticks.length ) { + point = ticks.length - 1; + } + sustain_tick = ticks[ point ]; + } + + public void set_loop_points( int start, int end ) { + if( start < 0 ) { + start = 0; + } + if( start >= ticks.length ) { + start = ticks.length - 1; + } + if( end < start || end >= ticks.length ) { + end = start; + } + loop_start_tick = ticks[ start ]; + loop_end_tick = ticks[ end ]; + } + + public int next_tick( int tick, boolean key_on ) { + tick = tick + 1; + if( looped && tick >= loop_end_tick ) { + tick = loop_start_tick; + } + if( sustain && key_on && tick >= sustain_tick ) { + tick = sustain_tick; + } + return tick; + } + + public int calculate_ampl( int tick ) { + int idx, point, delta_t, delta_a, ampl; + ampl = ampls[ ticks.length - 1 ]; + if( tick < ticks[ ticks.length - 1 ] ) { + point = 0; + for( idx = 1; idx < ticks.length; idx++ ) { + if( ticks[ idx ] <= tick ) { + point = idx; + } + } + delta_t = ticks[ point + 1 ] - ticks[ point ]; + delta_a = ampls[ point + 1 ] - ampls[ point ]; + ampl = ( delta_a << IBXM.FP_SHIFT ) / delta_t; + ampl = ampl * ( tick - ticks[ point ] ) >> IBXM.FP_SHIFT; + ampl = ampl + ampls[ point ]; + } + return ampl; + } + + public void dump() { + int idx, tick; + for( idx = 0; idx < ticks.length; idx++ ) { + System.out.println( ticks[ idx ] + ", " + ampls[ idx ] ); + } + for( tick = 0; tick < 222; tick++ ) { + System.out.print( calculate_ampl( tick ) + ", " ); + } + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/FastTracker2.java b/build/tmp/recompileMc/sources/ibxm/FastTracker2.java new file mode 100644 index 0000000..5bae612 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/FastTracker2.java @@ -0,0 +1,256 @@ + +package ibxm; + +import java.io.*; + +public class FastTracker2 { + public static boolean is_xm( byte[] header_60_bytes ) { + String xm_identifier; + xm_identifier = ascii_text( header_60_bytes, 0, 17 ); + return xm_identifier.equals( "Extended Module: " ); + } + + public static Module load_xm( byte[] header_60_bytes, DataInput data_input ) throws IOException { + int xm_version, song_header_length, sequence_length; + int num_channels, num_patterns, num_instruments, xm_flags, idx; + byte[] structure_header, song_header; + boolean delta_env; + String tracker_name; + Instrument instrument; + Module module; + if( !is_xm( header_60_bytes ) ) { + throw new IllegalArgumentException( "Not an XM file!" ); + } + xm_version = unsigned_short_le( header_60_bytes, 58 ); + if( xm_version != 0x0104 ) { + throw new IllegalArgumentException( "Sorry, XM version " + xm_version + " is not supported!" ); + } + module = new Module(); + module.song_title = ascii_text( header_60_bytes, 17, 20 ); + tracker_name = ascii_text( header_60_bytes, 38, 20 ); + delta_env = tracker_name.startsWith( "DigiBooster Pro" ); + structure_header = new byte[ 4 ]; + data_input.readFully( structure_header ); + song_header_length = int_le( structure_header, 0 ); + song_header = new byte[ song_header_length ]; + data_input.readFully( song_header, 4, song_header_length - 4 ); + sequence_length = unsigned_short_le( song_header, 4 ); + module.restart_sequence_index = unsigned_short_le( song_header, 6 ); + num_channels = unsigned_short_le( song_header, 8 ); + num_patterns = unsigned_short_le( song_header, 10 ); + num_instruments = unsigned_short_le( song_header, 12 ); + xm_flags = unsigned_short_le( song_header, 14 ); + module.linear_periods = ( xm_flags & 0x1 ) == 0x1; + module.global_volume = 64; + module.channel_gain = IBXM.FP_ONE * 3 / 8; + module.default_speed = unsigned_short_le( song_header, 16 ); + module.default_tempo = unsigned_short_le( song_header, 18 ); + module.set_num_channels( num_channels ); + for( idx = 0; idx < num_channels; idx++ ) { + module.set_initial_panning( idx, 128 ); + } + module.set_sequence_length( sequence_length ); + for( idx = 0; idx < sequence_length; idx++ ) { + module.set_sequence( idx, song_header[ 20 + idx ] & 0xFF ); + } + module.set_num_patterns( num_patterns ); + for( idx = 0; idx < num_patterns; idx++ ) { + module.set_pattern( idx, read_xm_pattern( data_input, num_channels ) ); + } + module.set_num_instruments( num_instruments ); + for( idx = 1; idx <= num_instruments; idx++ ) { + try { + instrument = read_xm_instrument( data_input, delta_env ); + module.set_instrument( idx, instrument ); + } catch( EOFException e ) { + System.out.println( "Instrument " + idx + " is missing!" ); + } + } + return module; + } + + private static Pattern read_xm_pattern( DataInput data_input, int num_channels ) throws IOException { + @SuppressWarnings("unused") //Forge + int pattern_header_length, packing_type, num_rows, pattern_data_length; + byte[] structure_header, pattern_header, pattern_data; + Pattern pattern; + structure_header = new byte[ 4 ]; + data_input.readFully( structure_header ); + pattern_header_length = int_le( structure_header, 0 ); + pattern_header = new byte[ pattern_header_length ]; + data_input.readFully( pattern_header, 4, pattern_header_length - 4 ); + packing_type = pattern_header[ 4 ]; + if( packing_type != 0 ) { + throw new IllegalArgumentException( "Pattern packing type " + packing_type + " is not supported!" ); + } + pattern = new Pattern(); + pattern.num_rows = unsigned_short_le( pattern_header, 5 ); + pattern_data_length = unsigned_short_le( pattern_header, 7 ); + pattern_data = new byte[ pattern_data_length ]; + data_input.readFully( pattern_data ); + pattern.set_pattern_data( pattern_data ); + return pattern; + } + + private static Instrument read_xm_instrument( DataInput data_input, boolean delta_env ) throws IOException { + int instrument_header_length, num_samples, idx; + int env_tick, env_ampl, env_num_points, flags; + byte[] structure_header, instrument_header, sample_headers; + Instrument instrument; + Envelope envelope; + structure_header = new byte[ 4 ]; + data_input.readFully( structure_header ); + instrument_header_length = int_le( structure_header, 0 ); + instrument_header = new byte[ instrument_header_length ]; + data_input.readFully( instrument_header, 4, instrument_header_length - 4 ); + instrument = new Instrument(); + instrument.name = ascii_text( instrument_header, 4, 22 ); + num_samples = unsigned_short_le( instrument_header, 27 ); + if( num_samples > 0 ) { + instrument.set_num_samples( num_samples ); + for( idx = 0; idx < 96; idx++ ) { + instrument.set_key_to_sample( idx + 1, instrument_header[ 33 + idx ] & 0xFF ); + } + envelope = new Envelope(); + env_num_points = instrument_header[ 225 ] & 0xFF; + envelope.set_num_points( env_num_points ); + for( idx = 0; idx < env_num_points; idx++ ) { + env_tick = unsigned_short_le( instrument_header, 129 + idx * 4 ); + env_ampl = unsigned_short_le( instrument_header, 131 + idx * 4 ); + envelope.set_point( idx, env_tick, env_ampl, delta_env ); + } + envelope.set_sustain_point( instrument_header[ 227 ] & 0xFF ); + envelope.set_loop_points( instrument_header[ 228 ] & 0xFF, instrument_header[ 229 ] & 0xFF ); + flags = instrument_header[ 233 ] & 0xFF; + instrument.volume_envelope_active = ( flags & 0x1 ) == 0x1; + envelope.sustain = ( flags & 0x2 ) == 0x2; + envelope.looped = ( flags & 0x4 ) == 0x4; + instrument.set_volume_envelope( envelope ); + envelope = new Envelope(); + env_num_points = instrument_header[ 226 ] & 0xFF; + envelope.set_num_points( env_num_points ); + for( idx = 0; idx < env_num_points; idx++ ) { + env_tick = unsigned_short_le( instrument_header, 177 + idx * 4 ); + env_ampl = unsigned_short_le( instrument_header, 179 + idx * 4 ); + envelope.set_point( idx, env_tick, env_ampl, delta_env ); + } + envelope.set_sustain_point( instrument_header[ 230 ] & 0xFF ); + envelope.set_loop_points( instrument_header[ 231 ] & 0xFF, instrument_header[ 232 ] & 0xFF ); + flags = instrument_header[ 234 ] & 0xFF; + instrument.panning_envelope_active = ( flags & 0x1 ) == 0x1; + envelope.sustain = ( flags & 0x2 ) == 0x2; + envelope.looped = ( flags & 0x4 ) == 0x4; + instrument.set_panning_envelope( envelope ); + instrument.vibrato_type = instrument_header[ 235 ] & 0xFF; + instrument.vibrato_sweep = instrument_header[ 236 ] & 0xFF; + instrument.vibrato_depth = instrument_header[ 237 ] & 0xFF; + instrument.vibrato_rate = instrument_header[ 238 ] & 0xFF; + instrument.volume_fade_out = unsigned_short_le( instrument_header, 239 ); + sample_headers = new byte[ num_samples * 40 ]; + data_input.readFully( sample_headers ); + for( idx = 0; idx < num_samples; idx++ ) { + instrument.set_sample( idx, read_xm_sample( sample_headers, idx, data_input ) ); + } + } + return instrument; + } + + private static Sample read_xm_sample( byte[] sample_headers, int sample_idx, DataInput data_input ) throws IOException { + int header_offset, sample_length, loop_start, loop_length; + int flags, in_idx, out_idx, sam, last_sam; + int fine_tune, relative_note; + boolean sixteen_bit, ping_pong; + byte[] raw_sample_data; + short[] decoded_sample_data; + Sample sample; + header_offset = sample_idx * 40; + sample = new Sample(); + sample_length = int_le( sample_headers, header_offset ); + loop_start = int_le( sample_headers, header_offset + 4 ); + loop_length = int_le( sample_headers, header_offset + 8 ); + sample.volume = sample_headers[ header_offset + 12 ] & 0xFF; + fine_tune = sample_headers[ header_offset + 13 ]; + fine_tune = ( fine_tune << IBXM.FP_SHIFT ) / 1536; + sample.set_panning = true; + flags = sample_headers[ header_offset + 14 ] & 0xFF; + if( ( flags & 0x03 ) == 0 ) { + loop_length = 0; + } + ping_pong = ( flags & 0x02 ) == 0x02; + sixteen_bit = ( flags & 0x10 ) == 0x10; + sample.panning = sample_headers[ header_offset + 15 ] & 0xFF; + relative_note = sample_headers[ header_offset + 16 ]; + relative_note = ( relative_note << IBXM.FP_SHIFT ) / 12; + sample.transpose = relative_note + fine_tune; + sample.name = ascii_text( sample_headers, header_offset + 18, 22 ); + raw_sample_data = new byte[ sample_length ]; + try { + data_input.readFully( raw_sample_data ); + } catch( EOFException e ) { + System.out.println( "Sample has been truncated!" ); + } + in_idx = 0; + out_idx = 0; + sam = 0; + last_sam = 0; + if( sixteen_bit ) { + decoded_sample_data = new short[ sample_length >> 1 ]; + while( in_idx < raw_sample_data.length ) { + sam = raw_sample_data[ in_idx ] & 0xFF; + sam = sam | ( ( raw_sample_data[ in_idx + 1 ] & 0xFF ) << 8 ); + last_sam = last_sam + sam; + decoded_sample_data[ out_idx ] = ( short ) last_sam; + in_idx += 2; + out_idx += 1; + } + sample.set_sample_data( decoded_sample_data, loop_start >> 1, loop_length >> 1, ping_pong ); + } else { + decoded_sample_data = new short[ sample_length ]; + while( in_idx < raw_sample_data.length ) { + sam = raw_sample_data[ in_idx ] & 0xFF; + last_sam = last_sam + sam; + decoded_sample_data[ out_idx ] = ( short ) ( last_sam << 8 ); + in_idx += 1; + out_idx += 1; + } + sample.set_sample_data( decoded_sample_data, loop_start, loop_length, ping_pong ); + } + return sample; + } + + private static int unsigned_short_le( byte[] buffer, int offset ) { + int value; + value = buffer[ offset ] & 0xFF; + value = value | ( ( buffer[ offset + 1 ] & 0xFF ) << 8 ); + return value; + } + + private static int int_le( byte[] buffer, int offset ) { + int value; + value = buffer[ offset ] & 0xFF; + value = value | ( ( buffer[ offset + 1 ] & 0xFF ) << 8 ); + value = value | ( ( buffer[ offset + 2 ] & 0xFF ) << 16 ); + value = value | ( ( buffer[ offset + 3 ] & 0x7F ) << 24 ); + return value; + } + + private static String ascii_text( byte[] buffer, int offset, int length ) { + int idx, chr; + byte[] string_buffer; + String string; + string_buffer = new byte[ length ]; + for( idx = 0; idx < length; idx++ ) { + chr = buffer[ offset + idx ]; + if( chr < 32 ) { + chr = 32; + } + string_buffer[ idx ] = ( byte ) chr; + } + try { + string = new String( string_buffer, 0, length, "ISO-8859-1" ); + } catch( UnsupportedEncodingException e ) { + string = ""; + } + return string; + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/IBXM.java b/build/tmp/recompileMc/sources/ibxm/IBXM.java new file mode 100644 index 0000000..ae1a2e2 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/IBXM.java @@ -0,0 +1,342 @@ + +package ibxm; + +public class IBXM { + public static final String VERSION = "ibxm alpha 51 (c)2008 mumart@gmail.com"; + + public static final int FP_SHIFT = 15; + public static final int FP_ONE = 1 << FP_SHIFT; + public static final int FP_MASK = FP_ONE - 1; + + private int sampling_rate, resampling_quality, volume_ramp_length; + private int tick_length_samples, current_tick_samples; + private int[] mixing_buffer, volume_ramp_buffer; + + private Module module; + private Channel[] channels; + private int[] global_volume, note; + private int current_sequence_index, next_sequence_index; + private int current_row, next_row; + private int tick_counter, ticks_per_row; + private int pattern_loop_count, pattern_loop_channel; + + public IBXM( int sample_rate ) { + +/** MODIFIED 13 Oct 2009 by Paul Lamb **/ +// System.out.println( VERSION ); +/***************************************/ + + if( sample_rate < 8000 ) { + sample_rate = 8000; + } + sampling_rate = sample_rate; + volume_ramp_length = sampling_rate >> 10; + volume_ramp_buffer = new int[ volume_ramp_length * 2 ]; + mixing_buffer = new int[ sampling_rate / 6 ]; + global_volume = new int[ 1 ]; + note = new int[ 5 ]; + set_module( new Module() ); + set_resampling_quality( 1 ); + } + + public void set_module( Module m ) { + int channel_idx; + module = m; + channels = new Channel[ module.get_num_channels() ]; + for( channel_idx = 0; channel_idx < channels.length; channel_idx++ ) { + channels[ channel_idx ] = new Channel( module, sampling_rate, global_volume ); + } + set_sequence_index( 0, 0 ); + } + + public void set_resampling_quality( int quality ) { + resampling_quality = quality; + } + + public int calculate_song_duration() { + int song_duration; + set_sequence_index( 0, 0 ); + next_tick(); + song_duration = tick_length_samples; + while( !next_tick() ) { + song_duration += tick_length_samples; + } + set_sequence_index( 0, 0 ); + return song_duration; + } + + public void set_sequence_index( int sequence_index, int row ) { + int channel_idx; + global_volume[ 0 ] = 64; + for( channel_idx = 0; channel_idx < channels.length; channel_idx++ ) { + channels[ channel_idx ].reset(); + channels[ channel_idx ].set_panning( module.get_initial_panning( channel_idx ) ); + } + set_global_volume( module.global_volume ); + set_speed( 6 ); + set_speed( module.default_speed ); + set_tempo( 125 ); + set_tempo( module.default_tempo ); + pattern_loop_count = -1; + next_sequence_index = sequence_index; + next_row = row; + tick_counter = 0; + current_tick_samples = tick_length_samples; + clear_vol_ramp_buffer(); + } + + public void seek( int sample_position ) { + //int idx; Forge, Unused + set_sequence_index( 0, 0 ); + next_tick(); + while( sample_position > tick_length_samples ) { + sample_position -= tick_length_samples; + next_tick(); + } + mix_tick(); + current_tick_samples = sample_position; + } + + public void get_audio( byte[] output_buffer, int frames ) { + int output_idx, mix_idx, mix_end, count, amplitude; + output_idx = 0; + while( frames > 0 ) { + count = tick_length_samples - current_tick_samples; + if( count > frames ) { + count = frames; + } + mix_idx = current_tick_samples << 1; + mix_end = mix_idx + ( count << 1 ) - 1; + while( mix_idx <= mix_end ) { + amplitude = mixing_buffer[ mix_idx ]; + if( amplitude > 32767 ) { + amplitude = 32767; + } + if( amplitude < -32768 ) { + amplitude = -32768; + } + output_buffer[ output_idx ] = ( byte ) ( amplitude >> 8 ); + output_buffer[ output_idx + 1 ] = ( byte ) ( amplitude & 0xFF ); + output_idx += 2; + mix_idx += 1; + } + current_tick_samples = mix_idx >> 1; + frames -= count; + if( frames > 0 ) { + next_tick(); + mix_tick(); + current_tick_samples = 0; + } + } + } + + private void mix_tick() { + int channel_idx, mix_idx, mix_len; + mix_idx = 0; + mix_len = tick_length_samples + volume_ramp_length << 1; + while( mix_idx < mix_len ) { + mixing_buffer[ mix_idx ] = 0; + mix_idx += 1; + } + for( channel_idx = 0; channel_idx < channels.length; channel_idx++ ) { + mix_len = tick_length_samples + volume_ramp_length; + channels[ channel_idx ].resample( mixing_buffer, 0, mix_len, resampling_quality ); + } + volume_ramp(); + } + + private boolean next_tick() { + int channel_idx; + boolean song_end; + for( channel_idx = 0; channel_idx < channels.length; channel_idx++ ) { + channels[ channel_idx ].update_sample_idx( tick_length_samples ); + } + tick_counter -= 1; + if( tick_counter <= 0 ) { + tick_counter = ticks_per_row; + song_end = next_row(); + } else { + for( channel_idx = 0; channel_idx < channels.length; channel_idx++ ) { + channels[ channel_idx ].tick(); + } + song_end = false; + } + return song_end; + } + + private boolean next_row() { + int channel_idx, effect, effect_param; + boolean song_end; + Pattern pattern; + song_end = false; + if( next_sequence_index < 0 ) { + /* Bad next sequence index.*/ + next_sequence_index = 0; + next_row = 0; + } + if( next_sequence_index >= module.get_sequence_length() ) { + /* End of sequence.*/ + song_end = true; + next_sequence_index = module.restart_sequence_index; + if( next_sequence_index < 0 ) { + next_sequence_index = 0; + } + if( next_sequence_index >= module.get_sequence_length() ) { + next_sequence_index = 0; + } + next_row = 0; + } + if( next_sequence_index < current_sequence_index ) { + /* Jump to previous pattern. */ + song_end = true; + } + if( next_sequence_index == current_sequence_index ) { + if( next_row <= current_row ) { + if( pattern_loop_count < 0 ) { + /* Jump to previous row in the same pattern, but not a pattern loop. */ + song_end = true; + } + } + } + current_sequence_index = next_sequence_index; + pattern = module.get_pattern_from_sequence( current_sequence_index ); + if( next_row < 0 || next_row >= pattern.num_rows ) { + /* Bad next row.*/ + next_row = 0; + } + current_row = next_row; + next_row = current_row + 1; + if( next_row >= pattern.num_rows ) { + next_sequence_index = current_sequence_index + 1; + next_row = 0; + } + for( channel_idx = 0; channel_idx < channels.length; channel_idx++ ) { + pattern.get_note( note, current_row * channels.length + channel_idx ); + effect = note[ 3 ]; + effect_param = note[ 4 ]; + channels[ channel_idx ].row( note[ 0 ], note[ 1 ], note[ 2 ], effect, effect_param ); + switch( effect ) { + case 0x0B: + /* Pattern Jump.*/ + if( pattern_loop_count < 0 ) { + next_sequence_index = effect_param; + next_row = 0; + } + break; + case 0x0D: + /* Pattern Break.*/ + if( pattern_loop_count < 0 ) { + next_sequence_index = current_sequence_index + 1; + next_row = ( effect_param >> 4 ) * 10 + ( effect_param & 0x0F ); + } + break; + case 0x0E: + /* Extended.*/ + switch( effect_param & 0xF0 ) { + case 0x60: + /* Pattern loop.*/ + if( ( effect_param & 0x0F ) == 0 ) { + /* Set loop marker on this channel. */ + channels[ channel_idx ].pattern_loop_row = current_row; + } + if( channels[ channel_idx ].pattern_loop_row < current_row ) { + /* Marker and parameter are valid. Begin looping. */ + if( pattern_loop_count < 0 ) { + /* Not already looping, begin. */ + pattern_loop_count = effect_param & 0x0F; + pattern_loop_channel = channel_idx; + } + if( pattern_loop_channel == channel_idx ) { + /* Loop in progress on this channel. Next iteration. */ + if( pattern_loop_count == 0 ) { + /* Loop finished. */ + /* Invalidate current marker. */ + channels[ channel_idx ].pattern_loop_row = current_row + 1; + } else { + /* Count must be higher than zero. */ + /* Loop and cancel any breaks on this row. */ + next_row = channels[ channel_idx ].pattern_loop_row; + next_sequence_index = current_sequence_index; + } + pattern_loop_count -= 1; + } + } + break; + case 0xE0: + /* Pattern delay.*/ + tick_counter += ticks_per_row * ( effect_param & 0x0F ); + break; + } + break; + case 0x0F: + /* Set Speed/Tempo.*/ + if( effect_param < 32 ) { + set_speed( effect_param ); + tick_counter = ticks_per_row; + } else { + set_tempo( effect_param ); + } + break; + case 0x25: + /* S3M Set Speed.*/ + set_speed( effect_param ); + tick_counter = ticks_per_row; + break; + } + } + return song_end; + } + + private void set_global_volume( int volume ) { + if( volume < 0 ) { + volume = 0; + } + if( volume > 64 ) { + volume = 64; + } + global_volume[ 0 ] = volume; + } + + private void set_speed( int speed ) { + if( speed > 0 && speed < 256 ) { + ticks_per_row = speed; + } + } + + private void set_tempo( int bpm ) { + if( bpm > 31 && bpm < 256 ) { + tick_length_samples = ( sampling_rate * 5 ) / ( bpm * 2 ); + } + } + + private void volume_ramp() { + int ramp_idx, next_idx, ramp_end; + int volume_ramp_delta, volume, sample; + sample = 0; + volume_ramp_delta = FP_ONE / volume_ramp_length; + volume = 0; + ramp_idx = 0; + next_idx = 2 * tick_length_samples; + ramp_end = volume_ramp_length * 2 - 1; + while( ramp_idx <= ramp_end ) { + sample = volume_ramp_buffer[ ramp_idx ] * ( FP_ONE - volume ) >> FP_SHIFT; + mixing_buffer[ ramp_idx ] = sample + ( mixing_buffer[ ramp_idx ] * volume >> FP_SHIFT ); + volume_ramp_buffer[ ramp_idx ] = mixing_buffer[ next_idx + ramp_idx ]; + sample = volume_ramp_buffer[ ramp_idx + 1 ] * ( FP_ONE - volume ) >> FP_SHIFT; + mixing_buffer[ ramp_idx + 1 ] = sample + ( mixing_buffer[ ramp_idx + 1 ] * volume >> FP_SHIFT ); + volume_ramp_buffer[ ramp_idx + 1 ] = mixing_buffer[ next_idx + ramp_idx + 1 ]; + volume += volume_ramp_delta; + ramp_idx += 2; + } + } + + private void clear_vol_ramp_buffer() { + int ramp_idx, ramp_end; + ramp_idx = 0; + ramp_end = volume_ramp_length * 2 - 1; + while( ramp_idx <= ramp_end ) { + volume_ramp_buffer[ ramp_idx ] = 0; + ramp_idx += 1; + } + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/Instrument.java b/build/tmp/recompileMc/sources/ibxm/Instrument.java new file mode 100644 index 0000000..6e960ea --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Instrument.java @@ -0,0 +1,90 @@ + +package ibxm; + +public class Instrument { + public String name; + public int vibrato_type, vibrato_sweep; + public int vibrato_depth, vibrato_rate; + public boolean volume_envelope_active, panning_envelope_active; + public int volume_fade_out; + + private Envelope volume_envelope, panning_envelope; + private int[] key_to_sample; + private Sample[] samples; + + public Instrument() { + name = ""; + set_volume_envelope( new Envelope() ); + set_panning_envelope( new Envelope() ); + key_to_sample = new int[ 96 ]; + set_num_samples( 1 ); + } + + public Envelope get_volume_envelope() { + return volume_envelope; + } + + public void set_volume_envelope( Envelope envelope ) { + if( envelope != null ) { + volume_envelope = envelope; + } + } + + public Envelope get_panning_envelope() { + return panning_envelope; + } + + public void set_panning_envelope( Envelope envelope ) { + if( envelope != null ) { + panning_envelope = envelope; + } + } + + public Sample get_sample_from_key( int key ) { + int sample_idx; + sample_idx = 0; + if( key > 0 && key <= key_to_sample.length ) { + sample_idx = key_to_sample[ key - 1 ]; + } + return get_sample( sample_idx ); + } + + public void set_key_to_sample( int key, int sample ) { + if( key > 0 && key <= key_to_sample.length ) { + key_to_sample[ key - 1 ] = sample; + } + } + + public int get_num_samples() { + return samples.length; + } + + public void set_num_samples( int num_samples ) { + if( num_samples < 1 ) { + num_samples = 1; + } + samples = new Sample[ num_samples ]; + set_sample( 0, null ); + } + + public Sample get_sample( int sample_index ) { + Sample sample; + sample = null; + if( sample_index >= 0 && sample_index < samples.length ) { + sample = samples[ sample_index ]; + } + if( sample == null ) { + sample = samples[ 0 ]; + } + return sample; + } + + public void set_sample( int sample_index, Sample sample ) { + if( sample_index >= 0 && sample_index < samples.length ) { + samples[ sample_index ] = sample; + } + if( samples[ 0 ] == null ) { + samples[ 0 ] = new Sample(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/ibxm/LogTable.java b/build/tmp/recompileMc/sources/ibxm/LogTable.java new file mode 100644 index 0000000..ca3b0e5 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/LogTable.java @@ -0,0 +1,90 @@ + +package ibxm; + +/* + Base-2 Log and Exp functions, using linear-interpolated tables. +*/ +public class LogTable { + private static final int TABLE_SHIFT = 7; // 128 points (+1 for interp) + private static final int INTERP_SHIFT = IBXM.FP_SHIFT - TABLE_SHIFT; + private static final int INTERP_MASK = ( 1 << INTERP_SHIFT ) - 1; + + private static final int[] exp_2_table = { + 32768, 32945, 33124, 33304, 33485, 33667, 33850, 34033, + 34218, 34404, 34591, 34779, 34968, 35157, 35348, 35540, + 35733, 35927, 36122, 36319, 36516, 36714, 36913, 37114, + 37315, 37518, 37722, 37926, 38132, 38339, 38548, 38757, + 38967, 39179, 39392, 39606, 39821, 40037, 40254, 40473, + 40693, 40914, 41136, 41359, 41584, 41810, 42037, 42265, + 42494, 42725, 42957, 43190, 43425, 43661, 43898, 44136, + 44376, 44617, 44859, 45103, 45347, 45594, 45841, 46090, + 46340, 46592, 46845, 47099, 47355, 47612, 47871, 48131, + 48392, 48655, 48919, 49185, 49452, 49720, 49990, 50262, + 50535, 50809, 51085, 51362, 51641, 51922, 52204, 52487, + 52772, 53059, 53347, 53636, 53928, 54220, 54515, 54811, + 55108, 55408, 55709, 56011, 56315, 56621, 56928, 57238, + 57548, 57861, 58175, 58491, 58809, 59128, 59449, 59772, + 60096, 60423, 60751, 61081, 61412, 61746, 62081, 62418, + 62757, 63098, 63440, 63785, 64131, 64479, 64830, 65182, + 65536 + }; + + private static final int[] log_2_table = { + 0, 367, 732, 1095, 1454, 1811, 2165, 2517, + 2865, 3212, 3556, 3897, 4236, 4572, 4906, 5238, + 5568, 5895, 6220, 6542, 6863, 7181, 7497, 7812, + 8124, 8434, 8742, 9048, 9352, 9654, 9954, 10252, + 10548, 10843, 11136, 11427, 11716, 12003, 12289, 12573, + 12855, 13136, 13414, 13692, 13967, 14241, 14514, 14785, + 15054, 15322, 15588, 15853, 16117, 16378, 16639, 16898, + 17156, 17412, 17667, 17920, 18172, 18423, 18673, 18921, + 19168, 19413, 19657, 19900, 20142, 20383, 20622, 20860, + 21097, 21333, 21568, 21801, 22034, 22265, 22495, 22724, + 22952, 23178, 23404, 23628, 23852, 24074, 24296, 24516, + 24736, 24954, 25171, 25388, 25603, 25817, 26031, 26243, + 26455, 26665, 26875, 27084, 27292, 27499, 27705, 27910, + 28114, 28317, 28520, 28721, 28922, 29122, 29321, 29519, + 29716, 29913, 30109, 30304, 30498, 30691, 30884, 31076, + 31267, 31457, 31646, 31835, 32023, 32210, 32397, 32582, + 32768 + }; + + /* + Calculate log-base-2 of x (non-fixed-point). + A fixed point value is returned. + */ + public static int log_2( int x ) { + int shift; + /* Scale x to range 1.0 <= x < 2.0 */ + shift = IBXM.FP_SHIFT; + while( x < IBXM.FP_ONE ) { + x <<= 1; + shift--; + } + while( x >= ( IBXM.FP_ONE << 1 ) ) { + x >>= 1; + shift++; + } + return ( IBXM.FP_ONE * shift ) + eval_table( log_2_table, x - IBXM.FP_ONE ); + } + + /* + Raise 2 to the power x (fixed point). + A fixed point value is returned. + */ + public static int raise_2( int x ) { + int y; + y = eval_table( exp_2_table, x & IBXM.FP_MASK ) << IBXM.FP_SHIFT; + return y >> IBXM.FP_SHIFT - ( x >> IBXM.FP_SHIFT ); + } + + private static int eval_table( int[] table, int x ) { + int table_idx, table_frac, c, m, y; + table_idx = x >> INTERP_SHIFT; + table_frac = x & INTERP_MASK; + c = table[ table_idx ]; + m = table[ table_idx + 1 ] - c; + y = ( m * table_frac >> INTERP_SHIFT ) + c; + return y >> 15 - IBXM.FP_SHIFT; + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/Module.java b/build/tmp/recompileMc/sources/ibxm/Module.java new file mode 100644 index 0000000..101de29 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Module.java @@ -0,0 +1,137 @@ + +package ibxm; + +public class Module { + public String song_title; + public boolean linear_periods, fast_volume_slides, pal; + public int global_volume, channel_gain; + public int default_speed, default_tempo; + public int restart_sequence_index; + + private int[] initial_panning, sequence; + private Pattern[] patterns; + private Instrument[] instruments; + + private Pattern default_pattern; + private Instrument default_instrument; + + public Module() { + song_title = IBXM.VERSION; + set_num_channels( 1 ); + set_sequence_length( 1 ); + set_num_patterns( 0 ); + set_num_instruments( 0 ); + default_pattern = new Pattern(); + default_instrument = new Instrument(); + } + + public int get_num_channels() { + return initial_panning.length; + } + + public void set_num_channels( int num_channels ) { + if( num_channels < 1 ) { + num_channels = 1; + } + initial_panning = new int[ num_channels ]; + } + + public int get_initial_panning( int channel ) { + int panning; + panning = 128; + if( channel >= 0 && channel < initial_panning.length ) { + panning = initial_panning[ channel ]; + } + return panning; + } + + public void set_initial_panning( int channel, int panning ) { + if( channel >= 0 && channel < initial_panning.length ) { + initial_panning[ channel ] = panning; + } + } + + public int get_sequence_length() { + return sequence.length; + } + + public void set_sequence_length( int sequence_length ) { + if( sequence_length < 0 ) { + sequence_length = 0; + } + sequence = new int[ sequence_length ]; + } + + public void set_sequence( int sequence_index, int pattern_index ) { + if( sequence_index >= 0 && sequence_index < sequence.length ) { + sequence[ sequence_index ] = pattern_index; + } + } + + public int get_num_patterns() { + return patterns.length; + } + + public void set_num_patterns( int num_patterns ) { + if( num_patterns < 0 ) { + num_patterns = 0; + } + patterns = new Pattern[ num_patterns ]; + } + + public Pattern get_pattern_from_sequence( int sequence_index ) { + Pattern pattern; + pattern = default_pattern; + if( sequence_index >= 0 && sequence_index < sequence.length ) { + pattern = get_pattern( sequence[ sequence_index ] ); + } + return pattern; + } + + public Pattern get_pattern( int pattern_index ) { + Pattern pattern; + pattern = null; + if( pattern_index >= 0 && pattern_index < patterns.length ) { + pattern = patterns[ pattern_index ]; + } + if( pattern == null ) { + pattern = default_pattern; + } + return pattern; + } + + public void set_pattern( int pattern_index, Pattern pattern ) { + if( pattern_index >= 0 && pattern_index < patterns.length ) { + patterns[ pattern_index ] = pattern; + } + } + + public int get_num_instruments() { + return instruments.length; + } + + public void set_num_instruments( int num_instruments ) { + if( num_instruments < 0 ) { + num_instruments = 0; + } + instruments = new Instrument[ num_instruments ]; + } + + public Instrument get_instrument( int instrument_index ) { + Instrument instrument; + instrument = null; + if( instrument_index > 0 && instrument_index <= instruments.length ) { + instrument = instruments[ instrument_index - 1 ]; + } + if( instrument == null ) { + instrument = default_instrument; + } + return instrument; + } + + public void set_instrument( int instrument_index, Instrument instrument ) { + if( instrument_index > 0 && instrument_index <= instruments.length ) { + instruments[ instrument_index - 1 ] = instrument; + } + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/Pattern.java b/build/tmp/recompileMc/sources/ibxm/Pattern.java new file mode 100644 index 0000000..c6f484b --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Pattern.java @@ -0,0 +1,60 @@ + +package ibxm; + +public class Pattern { + public int num_rows; + + private int data_offset, note_index; + private byte[] pattern_data; + + public Pattern() { + num_rows = 1; + set_pattern_data( new byte[ 0 ] ); + } + + public void set_pattern_data( byte[] data ) { + if( data != null ) { + pattern_data = data; + } + data_offset = 0; + note_index = 0; + } + + public void get_note( int[] note, int index ) { + if( index < note_index ) { + note_index = 0; + data_offset = 0; + } + while( note_index <= index ) { + data_offset = next_note( data_offset, note ); + note_index += 1; + } + } + + public int next_note( int data_offset, int[] note ) { + int bitmask, field; + if( data_offset < 0 ) { + data_offset = pattern_data.length; + } + bitmask = 0x80; + if( data_offset < pattern_data.length ) { + bitmask = pattern_data[ data_offset ] & 0xFF; + } + if( ( bitmask & 0x80 ) == 0x80 ) { + data_offset += 1; + } else { + bitmask = 0x1F; + } + for( field = 0; field < 5; field++ ) { + note[ field ] = 0; + if( ( bitmask & 0x01 ) == 0x01 ) { + if( data_offset < pattern_data.length ) { + note[ field ] = pattern_data[ data_offset ] & 0xFF; + data_offset += 1; + } + } + bitmask = bitmask >> 1; + } + return data_offset; + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/Player.java b/build/tmp/recompileMc/sources/ibxm/Player.java new file mode 100644 index 0000000..0e18307 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Player.java @@ -0,0 +1,133 @@ + +package ibxm; + +import java.io.*; +import javax.sound.sampled.*; + +public class Player { + private Thread play_thread; + private IBXM ibxm; + private Module module; + private int song_duration, play_position; + private boolean running, loop; + private byte[] output_buffer; + private SourceDataLine output_line; + + /** + Simple command-line test player. + */ + public static void main( String[] args ) throws Exception { + if( args.length < 1 ) { + System.err.println( "Usage: java ibxm.Player " ); + System.exit( 0 ); + } + FileInputStream file_input_stream = new FileInputStream( args[ 0 ] ); + Player player = new Player(); + player.set_module( Player.load_module( file_input_stream ) ); + file_input_stream.close(); + player.play(); + } + + /** + Decode the data in the specified InputStream into a Module instance. + @param input an InputStream containing the module file to be decoded. + @throws IllegalArgumentException if the data is not recognised as a module file. + */ + public static Module load_module( InputStream input ) throws IllegalArgumentException, IOException { + DataInputStream data_input_stream = new DataInputStream( input ); + /* Check if data is in XM format.*/ + byte[] xm_header = new byte[ 60 ]; + data_input_stream.readFully( xm_header ); + if( FastTracker2.is_xm( xm_header ) ) + return FastTracker2.load_xm( xm_header, data_input_stream ); + /* Check if data is in ScreamTracker 3 format.*/ + byte[] s3m_header = new byte[ 96 ]; + System.arraycopy( xm_header, 0, s3m_header, 0, 60 ); + data_input_stream.readFully( s3m_header, 60, 36 ); + if( ScreamTracker3.is_s3m( s3m_header ) ) + return ScreamTracker3.load_s3m( s3m_header, data_input_stream ); + /* Check if data is in ProTracker format.*/ + byte[] mod_header = new byte[ 1084 ]; + System.arraycopy( s3m_header, 0, mod_header, 0, 96 ); + data_input_stream.readFully( mod_header, 96, 988 ); + return ProTracker.load_mod( mod_header, data_input_stream ); + } + + /** + Instantiate a new Player. + */ + public Player() throws LineUnavailableException { + ibxm = new IBXM( 48000 ); + set_loop( true ); + output_line = AudioSystem.getSourceDataLine( new AudioFormat( 48000, 16, 2, true, true ) ); + output_buffer = new byte[ 1024 * 4 ]; + } + + /** + Set the Module instance to be played. + */ + public void set_module( Module m ) { + if( m != null ) module = m; + stop(); + ibxm.set_module( module ); + song_duration = ibxm.calculate_song_duration(); + } + + /** + If loop is true, playback will continue indefinitely, + otherwise the module will play through once and stop. + */ + public void set_loop( boolean loop ) { + this.loop = loop; + } + + /** + Open the audio device and begin playback. + If a module is already playing it will be restarted. + */ + public void play() { + stop(); + play_thread = new Thread( new Driver() ); + play_thread.start(); + } + + /** + Stop playback and close the audio device. + */ + public void stop() { + running = false; + if( play_thread != null ) { + try { + play_thread.join(); + } catch( InterruptedException ie ) {} + } + } + + private class Driver implements Runnable { + @Override + public void run() { + if( running ) return; + try { + output_line.open(); + output_line.start(); + play_position = 0; + running = true; + while( running ) { + int frames = song_duration - play_position; + if( frames > 1024 ) frames = 1024; + ibxm.get_audio( output_buffer, frames ); + output_line.write( output_buffer, 0, frames * 4 ); + play_position += frames; + if( play_position >= song_duration ) { + play_position = 0; + if( !loop ) running = false; + } + } + output_line.drain(); + output_line.close(); + } catch( LineUnavailableException lue ) { + lue.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/ibxm/ProTracker.java b/build/tmp/recompileMc/sources/ibxm/ProTracker.java new file mode 100644 index 0000000..85684c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/ProTracker.java @@ -0,0 +1,233 @@ +package ibxm; + +import java.io.*; + +public class ProTracker { + public static boolean is_mod( byte[] header_1084_bytes ) { + boolean is_mod; + is_mod = false; + if( calculate_num_channels( header_1084_bytes ) > 0 ) { + is_mod = true; + } + return is_mod; + } + + public static Module load_mod( byte[] header_1084_bytes, DataInput data_input ) throws IOException { + int num_channels, channel_idx, panning; + int sequence_length, restart_idx, sequence_idx; + int num_patterns, pattern_idx, instrument_idx; + Module module; + num_channels = calculate_num_channels( header_1084_bytes ); + if( num_channels < 1 ) { + throw new IllegalArgumentException( "ProTracker: Unrecognised module format!" ); + } + module = new Module(); + module.song_title = ascii_text( header_1084_bytes, 0, 20 ); + module.pal = ( num_channels == 4 ); + module.global_volume = 64; + module.channel_gain = IBXM.FP_ONE * 3 / 8; + module.default_speed = 6; + module.default_tempo = 125; + module.set_num_channels( num_channels ); + for( channel_idx = 0; channel_idx < num_channels; channel_idx++ ) { + panning = 64; + if( ( channel_idx & 0x03 ) == 0x01 || ( channel_idx & 0x03 ) == 0x02 ) { + panning = 192; + } + module.set_initial_panning( channel_idx, panning ); + } + sequence_length = header_1084_bytes[ 950 ] & 0x7F; + restart_idx = header_1084_bytes[ 951 ] & 0x7F; + if( restart_idx >= sequence_length ) { + restart_idx = 0; + } + module.restart_sequence_index = restart_idx; + module.set_sequence_length( sequence_length ); + for( sequence_idx = 0; sequence_idx < sequence_length; sequence_idx++ ) { + module.set_sequence( sequence_idx, header_1084_bytes[ 952 + sequence_idx ] & 0x7F ); + } + num_patterns = calculate_num_patterns( header_1084_bytes ); + module.set_num_patterns( num_patterns ); + for( pattern_idx = 0; pattern_idx < num_patterns; pattern_idx++ ) { + module.set_pattern( pattern_idx, read_mod_pattern( data_input, num_channels ) ); + } + module.set_num_instruments( 31 ); + for( instrument_idx = 1; instrument_idx <= 31; instrument_idx++ ) { + module.set_instrument( instrument_idx, read_mod_instrument( header_1084_bytes, instrument_idx, data_input ) ); + } + return module; + } + + private static int calculate_num_patterns( byte[] module_header ) { + int num_patterns, order_entry, pattern_idx; + num_patterns = 0; + for( pattern_idx = 0; pattern_idx < 128; pattern_idx++ ) { + order_entry = module_header[ 952 + pattern_idx ] & 0x7F; + if( order_entry >= num_patterns ) { + num_patterns = order_entry + 1; + } + } + return num_patterns; + } + + private static int calculate_num_channels( byte[] module_header ) { + int num_channels; + switch( ( module_header[ 1082 ] << 8 ) | module_header[ 1083 ] ) { + case 0x4b2e: /* M.K. */ + case 0x4b21: /* M!K! */ + case 0x542e: /* N.T. */ + case 0x5434: /* FLT4 */ + num_channels = 4; + break; + case 0x484e: /* xCHN */ + num_channels = module_header[ 1080 ] - 48; + break; + case 0x4348: /* xxCH */ + num_channels = ( ( module_header[ 1080 ] - 48 ) * 10 ) + ( module_header[ 1081 ] - 48 ); + break; + default: + /* Not recognised. */ + num_channels = 0; + break; + } + return num_channels; + } + + private static Pattern read_mod_pattern( DataInput data_input, int num_channels ) throws IOException { + int input_idx, output_idx; + int period, instrument, effect, effect_param; + Pattern pattern; + byte[] input_pattern_data, output_pattern_data; + pattern = new Pattern(); + pattern.num_rows = 64; + input_pattern_data = new byte[ 64 * num_channels * 4 ]; + output_pattern_data = new byte[ 64 * num_channels * 5 ]; + data_input.readFully( input_pattern_data ); + input_idx = 0; + output_idx = 0; + while( input_idx < input_pattern_data.length ) { + period = ( input_pattern_data[ input_idx ] & 0x0F ) << 8; + period = period | ( input_pattern_data[ input_idx + 1 ] & 0xFF ); + output_pattern_data[ output_idx ] = to_key( period ); + instrument = input_pattern_data[ input_idx ] & 0x10; + instrument = instrument | ( ( input_pattern_data[ input_idx + 2 ] & 0xF0 ) >> 4 ); + output_pattern_data[ output_idx + 1 ] = ( byte ) instrument; + effect = input_pattern_data[ input_idx + 2 ] & 0x0F; + effect_param = input_pattern_data[ input_idx + 3 ] & 0xFF; + if( effect == 0x01 && effect_param == 0 ) { + /* Portamento up of zero has no effect. */ + effect = 0; + } + if( effect == 0x02 && effect_param == 0 ) { + /* Portamento down of zero has no effect. */ + effect = 0; + } + if( effect == 0x08 && num_channels == 4 ) { + /* Some Amiga mods use effect 0x08 for reasons other than panning.*/ + effect = 0; + effect_param = 0; + } + if( effect == 0x0A && effect_param == 0 ) { + /* Volume slide of zero has no effect.*/ + effect = 0; + } + if( effect == 0x05 && effect_param == 0 ) { + /* Porta + Volume slide of zero has no effect.*/ + effect = 0x03; + } + if( effect == 0x06 && effect_param == 0 ) { + /* Vibrato + Volume slide of zero has no effect.*/ + effect = 0x04; + } + output_pattern_data[ output_idx + 3 ] = ( byte ) effect; + output_pattern_data[ output_idx + 4 ] = ( byte ) effect_param; + input_idx += 4; + output_idx += 5; + } + pattern.set_pattern_data( output_pattern_data ); + return pattern; + } + + private static Instrument read_mod_instrument( byte[] mod_header, int idx, DataInput data_input ) throws IOException { + int header_offset, sample_data_length; + int loop_start, loop_length, sample_idx, fine_tune; + Instrument instrument; + Sample sample; + byte[] raw_sample_data; + short[] sample_data; + header_offset = ( idx - 1 ) * 30 + 20; + instrument = new Instrument(); + instrument.name = ascii_text( mod_header, header_offset, 22 ); + sample = new Sample(); + sample_data_length = unsigned_short_be( mod_header, header_offset + 22 ) << 1; + fine_tune = mod_header[ header_offset + 24 ] & 0x0F; + if( fine_tune > 7 ) { + fine_tune -= 16; + } + sample.transpose = ( fine_tune << IBXM.FP_SHIFT ) / 96; + sample.volume = mod_header[ header_offset + 25 ] & 0x7F; + loop_start = unsigned_short_be( mod_header, header_offset + 26 ) << 1; + loop_length = unsigned_short_be( mod_header, header_offset + 28 ) << 1; + if( loop_length < 4 ) { + loop_length = 0; + } + raw_sample_data = new byte[ sample_data_length ]; + sample_data = new short[ sample_data_length ]; + try { + data_input.readFully( raw_sample_data ); + } catch( EOFException e ) { + System.out.println( "ProTracker: Instrument " + idx + " has samples missing." ); + } + for( sample_idx = 0; sample_idx < raw_sample_data.length; sample_idx++ ) { + sample_data[ sample_idx ] = ( short ) ( raw_sample_data[ sample_idx ] << 8 ); + } + sample.set_sample_data( sample_data, loop_start, loop_length, false ); + instrument.set_num_samples( 1 ); + instrument.set_sample( 0, sample ); + return instrument; + } + + private static byte to_key( int period ) { + int oct, key; + if( period < 32 ) { + key = 0; + } else { + oct = LogTable.log_2( 7256 ) - LogTable.log_2( period ); + if( oct < 0 ) { + key = 0; + } else { + key = oct * 12; + key = key >> ( IBXM.FP_SHIFT - 1 ); + key = ( key >> 1 ) + ( key & 1 ); + } + } + return ( byte ) key; + } + + private static int unsigned_short_be( byte[] buf, int offset ) { + int value; + value = ( buf[ offset ] & 0xFF ) << 8; + value = value | ( buf[ offset + 1 ] & 0xFF ); + return value; + } + + private static String ascii_text( byte[] buffer, int offset, int length ) { + int idx, chr; + byte[] string_buffer; + String string; + string_buffer = new byte[ length ]; + for( idx = 0; idx < length; idx++ ) { + chr = buffer[ offset + idx ]; + if( chr < 32 ) { + chr = 32; + } + string_buffer[ idx ] = ( byte ) chr; + } + try { + string = new String( string_buffer, 0, length, "ISO-8859-1" ); + } catch( UnsupportedEncodingException e ) { + string = ""; + } + return string; + } +} diff --git a/build/tmp/recompileMc/sources/ibxm/Sample.java b/build/tmp/recompileMc/sources/ibxm/Sample.java new file mode 100644 index 0000000..2a2dba8 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/Sample.java @@ -0,0 +1,239 @@ + +package ibxm; + +public class Sample { + public String name; + public boolean set_panning; + public int volume, panning; + public int transpose; + + private int loop_start, loop_length; + private short[] sample_data; + + /* For the sinc interpolator.*/ + private static final int POINT_SHIFT = 4; + private static final int POINTS = 1 << POINT_SHIFT; + private static final int OVERLAP = POINTS >> 1; + private static final int INTERP_SHIFT = IBXM.FP_SHIFT - 4; + private static final int INTERP_BITMASK = ( 1 << INTERP_SHIFT ) - 1; + private static final short[] sinc_table = { + 0, -7, 27, -71, 142, -227, 299, 32439, 299, -227, 142, -71, 27, -7, 0, 0, + 0, 0, -5, 36, -142, 450, -1439, 32224, 2302, -974, 455, -190, 64, -15, 2, 0, + 0, 6, -33, 128, -391, 1042, -2894, 31584, 4540, -1765, 786, -318, 105, -25, 3, 0, + 0, 10, -55, 204, -597, 1533, -4056, 30535, 6977, -2573, 1121, -449, 148, -36, 5, 0, + -1, 13, -71, 261, -757, 1916, -4922, 29105, 9568, -3366, 1448, -578, 191, -47, 7, 0, + -1, 15, -81, 300, -870, 2185, -5498, 27328, 12263, -4109, 1749, -698, 232, -58, 9, 0, + -1, 15, -86, 322, -936, 2343, -5800, 25249, 15006, -4765, 2011, -802, 269, -68, 10, 0, + -1, 15, -87, 328, -957, 2394, -5849, 22920, 17738, -5298, 2215, -885, 299, -77, 12, 0, + 0, 14, -83, 319, -938, 2347, -5671, 20396, 20396, -5671, 2347, -938, 319, -83, 14, 0, + 0, 12, -77, 299, -885, 2215, -5298, 17738, 22920, -5849, 2394, -957, 328, -87, 15, -1, + 0, 10, -68, 269, -802, 2011, -4765, 15006, 25249, -5800, 2343, -936, 322, -86, 15, -1, + 0, 9, -58, 232, -698, 1749, -4109, 12263, 27328, -5498, 2185, -870, 300, -81, 15, -1, + 0, 7, -47, 191, -578, 1448, -3366, 9568, 29105, -4922, 1916, -757, 261, -71, 13, -1, + 0, 5, -36, 148, -449, 1121, -2573, 6977, 30535, -4056, 1533, -597, 204, -55, 10, 0, + 0, 3, -25, 105, -318, 786, -1765, 4540, 31584, -2894, 1042, -391, 128, -33, 6, 0, + 0, 2, -15, 64, -190, 455, -974, 2302, 32224, -1439, 450, -142, 36, -5, 0, 0, + 0, 0, -7, 27, -71, 142, -227, 299, 32439, 299, -227, 142, -71, 27, -7, 0 + }; + + public Sample() { + name = ""; + set_sample_data( new short[ 0 ], 0, 0, false ); + } + + public void set_sample_data( short[] data, int loop_start, int loop_length, boolean ping_pong ) { + int offset; + short sample; + if( loop_start < 0 ) { + loop_start = 0; + } + if( loop_start >= data.length ) { + loop_start = data.length - 1; + } + if( loop_start + loop_length > data.length ) { + loop_length = data.length - loop_start; + } + if( loop_length <= 1 ) { + sample_data = new short[ OVERLAP + data.length + OVERLAP * 3 ]; + System.arraycopy( data, 0, sample_data, OVERLAP, data.length ); + offset = 0; + while( offset < OVERLAP ) { + sample = sample_data[ OVERLAP + data.length - 1 ]; + sample = ( short ) ( sample * ( OVERLAP - offset ) / OVERLAP ); + sample_data[ OVERLAP + data.length + offset ] = sample; + offset += 1; + } + loop_start = OVERLAP + data.length + OVERLAP; + loop_length = 1; + } else { + if( ping_pong ) { + sample_data = new short[ OVERLAP + loop_start + loop_length * 2 + OVERLAP * 2 ]; + System.arraycopy( data, 0, sample_data, OVERLAP, loop_start + loop_length ); + offset = 0; + while( offset < loop_length ) { + sample = data[ loop_start + loop_length - offset - 1 ]; + sample_data[ OVERLAP + loop_start + loop_length + offset ] = sample; + offset += 1; + } + loop_start = loop_start + OVERLAP; + loop_length = loop_length * 2; + } else { + sample_data = new short[ OVERLAP + loop_start + loop_length + OVERLAP * 2 ]; + System.arraycopy( data, 0, sample_data, OVERLAP, loop_start + loop_length ); + loop_start = loop_start + OVERLAP; + } + offset = 0; + while( offset < OVERLAP * 2 ) { + sample = sample_data[ loop_start + offset ]; + sample_data[ loop_start + loop_length + offset ] = sample; + offset += 1; + } + } + this.loop_start = loop_start; + this.loop_length = loop_length; + } + + public void resample_nearest( + int sample_idx, int sample_frac, int step, int left_gain, int right_gain, + int[] mix_buffer, int frame_offset, int frames ) { + int loop_end, offset, end, max_sample_idx; + sample_idx += OVERLAP; + loop_end = loop_start + loop_length - 1; + offset = frame_offset << 1; + end = ( frame_offset + frames - 1 ) << 1; + while( frames > 0 ) { + if( sample_idx > loop_end ) { + if( loop_length <= 1 ) { + break; + } + sample_idx = loop_start + ( sample_idx - loop_start ) % loop_length; + } + max_sample_idx = sample_idx + ( ( sample_frac + ( frames - 1 ) * step ) >> IBXM.FP_SHIFT ); + if( max_sample_idx > loop_end ) { + while( sample_idx <= loop_end ) { + mix_buffer[ offset++ ] += sample_data[ sample_idx ] * left_gain >> IBXM.FP_SHIFT; + mix_buffer[ offset++ ] += sample_data[ sample_idx ] * right_gain >> IBXM.FP_SHIFT; + sample_frac += step; + sample_idx += sample_frac >> IBXM.FP_SHIFT; + sample_frac &= IBXM.FP_MASK; + } + } else { + while( offset <= end ) { + mix_buffer[ offset++ ] += sample_data[ sample_idx ] * left_gain >> IBXM.FP_SHIFT; + mix_buffer[ offset++ ] += sample_data[ sample_idx ] * right_gain >> IBXM.FP_SHIFT; + sample_frac += step; + sample_idx += sample_frac >> IBXM.FP_SHIFT; + sample_frac &= IBXM.FP_MASK; + } + } + frames = ( end - offset + 2 ) >> 1; + } + } + + public void resample_linear( + int sample_idx, int sample_frac, int step, int left_gain, int right_gain, + int[] mix_buffer, int frame_offset, int frames ) { + int loop_end, offset, end, max_sample_idx, amplitude; + sample_idx += OVERLAP; + loop_end = loop_start + loop_length - 1; + offset = frame_offset << 1; + end = ( frame_offset + frames - 1 ) << 1; + while( frames > 0 ) { + if( sample_idx > loop_end ) { + if( loop_length <= 1 ) { + break; + } + sample_idx = loop_start + ( sample_idx - loop_start ) % loop_length; + } + max_sample_idx = sample_idx + ( ( sample_frac + ( frames - 1 ) * step ) >> IBXM.FP_SHIFT ); + if( max_sample_idx > loop_end ) { + while( sample_idx <= loop_end ) { + amplitude = sample_data[ sample_idx ]; + amplitude += ( sample_data[ sample_idx + 1 ] - amplitude ) * sample_frac >> IBXM.FP_SHIFT; + mix_buffer[ offset++ ] += amplitude * left_gain >> IBXM.FP_SHIFT; + mix_buffer[ offset++ ] += amplitude * right_gain >> IBXM.FP_SHIFT; + sample_frac += step; + sample_idx += sample_frac >> IBXM.FP_SHIFT; + sample_frac &= IBXM.FP_MASK; + } + } else { + while( offset <= end ) { + amplitude = sample_data[ sample_idx ]; + amplitude += ( sample_data[ sample_idx + 1 ] - amplitude ) * sample_frac >> IBXM.FP_SHIFT; + mix_buffer[ offset++ ] += amplitude * left_gain >> IBXM.FP_SHIFT; + mix_buffer[ offset++ ] += amplitude * right_gain >> IBXM.FP_SHIFT; + sample_frac += step; + sample_idx += sample_frac >> IBXM.FP_SHIFT; + sample_frac &= IBXM.FP_MASK; + } + } + frames = ( end - offset + 2 ) >> 1; + } + } + + public void resample_sinc( + int sample_idx, int sample_frac, int step, int left_gain, int right_gain, + int[] mix_buffer, int frame_offset, int frames ) { + int offset, end, loop_end, table_idx, a1, a2, amplitude; + loop_end = loop_start + loop_length - 1; + offset = frame_offset << 1; + end = ( frame_offset + frames - 1 ) << 1; + while( offset <= end ) { + if( sample_idx > loop_end ) { + if( loop_length <= 1 ) { + break; + } + sample_idx = loop_start + ( sample_idx - loop_start ) % loop_length; + } + table_idx = ( sample_frac >> INTERP_SHIFT ) << POINT_SHIFT; + a1 = sinc_table[ table_idx + 0 ] * sample_data[ sample_idx + 0 ] >> 15; + a1 += sinc_table[ table_idx + 1 ] * sample_data[ sample_idx + 1 ] >> 15; + a1 += sinc_table[ table_idx + 2 ] * sample_data[ sample_idx + 2 ] >> 15; + a1 += sinc_table[ table_idx + 3 ] * sample_data[ sample_idx + 3 ] >> 15; + a1 += sinc_table[ table_idx + 4 ] * sample_data[ sample_idx + 4 ] >> 15; + a1 += sinc_table[ table_idx + 5 ] * sample_data[ sample_idx + 5 ] >> 15; + a1 += sinc_table[ table_idx + 6 ] * sample_data[ sample_idx + 6 ] >> 15; + a1 += sinc_table[ table_idx + 7 ] * sample_data[ sample_idx + 7 ] >> 15; + a1 += sinc_table[ table_idx + 8 ] * sample_data[ sample_idx + 8 ] >> 15; + a1 += sinc_table[ table_idx + 9 ] * sample_data[ sample_idx + 9 ] >> 15; + a1 += sinc_table[ table_idx + 10 ] * sample_data[ sample_idx + 10 ] >> 15; + a1 += sinc_table[ table_idx + 11 ] * sample_data[ sample_idx + 11 ] >> 15; + a1 += sinc_table[ table_idx + 12 ] * sample_data[ sample_idx + 12 ] >> 15; + a1 += sinc_table[ table_idx + 13 ] * sample_data[ sample_idx + 13 ] >> 15; + a1 += sinc_table[ table_idx + 14 ] * sample_data[ sample_idx + 14 ] >> 15; + a1 += sinc_table[ table_idx + 15 ] * sample_data[ sample_idx + 15 ] >> 15; + a2 = sinc_table[ table_idx + 16 ] * sample_data[ sample_idx + 0 ] >> 15; + a2 += sinc_table[ table_idx + 17 ] * sample_data[ sample_idx + 1 ] >> 15; + a2 += sinc_table[ table_idx + 18 ] * sample_data[ sample_idx + 2 ] >> 15; + a2 += sinc_table[ table_idx + 19 ] * sample_data[ sample_idx + 3 ] >> 15; + a2 += sinc_table[ table_idx + 20 ] * sample_data[ sample_idx + 4 ] >> 15; + a2 += sinc_table[ table_idx + 21 ] * sample_data[ sample_idx + 5 ] >> 15; + a2 += sinc_table[ table_idx + 22 ] * sample_data[ sample_idx + 6 ] >> 15; + a2 += sinc_table[ table_idx + 23 ] * sample_data[ sample_idx + 7 ] >> 15; + a2 += sinc_table[ table_idx + 24 ] * sample_data[ sample_idx + 8 ] >> 15; + a2 += sinc_table[ table_idx + 25 ] * sample_data[ sample_idx + 9 ] >> 15; + a2 += sinc_table[ table_idx + 26 ] * sample_data[ sample_idx + 10 ] >> 15; + a2 += sinc_table[ table_idx + 27 ] * sample_data[ sample_idx + 11 ] >> 15; + a2 += sinc_table[ table_idx + 28 ] * sample_data[ sample_idx + 12 ] >> 15; + a2 += sinc_table[ table_idx + 29 ] * sample_data[ sample_idx + 13 ] >> 15; + a2 += sinc_table[ table_idx + 30 ] * sample_data[ sample_idx + 14 ] >> 15; + a2 += sinc_table[ table_idx + 31 ] * sample_data[ sample_idx + 15 ] >> 15; + amplitude = a1 + ( ( a2 - a1 ) * ( sample_frac & INTERP_BITMASK ) >> INTERP_SHIFT ); + mix_buffer[ offset ] += amplitude * left_gain >> IBXM.FP_SHIFT; + mix_buffer[ offset + 1 ] += amplitude * right_gain >> IBXM.FP_SHIFT; + offset += 2; + sample_frac += step; + sample_idx += sample_frac >> IBXM.FP_SHIFT; + sample_frac &= IBXM.FP_MASK; + } + } + + public boolean has_finished( int sample_idx ) { + boolean finished; + finished = false; + if( loop_length <= 1 && sample_idx > loop_start ) { + finished = true; + } + return finished; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/ibxm/ScreamTracker3.java b/build/tmp/recompileMc/sources/ibxm/ScreamTracker3.java new file mode 100644 index 0000000..4010a67 --- /dev/null +++ b/build/tmp/recompileMc/sources/ibxm/ScreamTracker3.java @@ -0,0 +1,489 @@ + +package ibxm; + +import java.io.*; + +public class ScreamTracker3 { + private static final int[] effect_map = new int[] { + 0xFF, + 0x25, /* A: Set Speed.*/ + 0x0B, /* B: Pattern Jump.*/ + 0x0D, /* C: Pattern Break.*/ + 0x0A, /* D: Volume Slide.*/ + 0x02, /* E: Portamento Down.*/ + 0x01, /* F: Portamento Up.*/ + 0x03, /* G: Tone Portamento.*/ + 0x04, /* H: Vibrato.*/ + 0x1D, /* I: Tremor.*/ + 0x00, /* J: Arpeggio.*/ + 0x06, /* K: Vibrato + Volume Slide.*/ + 0x05, /* L: Tone Portamento + Volume Slide.*/ + 0xFF, /* M: */ + 0xFF, /* N: */ + 0x09, /* O: Sample Offset.*/ + 0xFF, /* P: */ + 0x1B, /* Q: Retrig + Volume Slide.*/ + 0x07, /* R: Tremolo.*/ + 0x0E, /* S: Extended Effects.*/ + 0x0F, /* T: Set Tempo.*/ + 0x24, /* U: Fine Vibrato.*/ + 0x10, /* V: Set Global Volume. */ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF + }; + + private static final int[] effect_s_map = new int[] { + 0x00, /* 0: Set Filter.*/ + 0x03, /* 1: Glissando.*/ + 0x05, /* 2: Set Fine Tune.*/ + 0x04, /* 3: Set Vibrato Waveform.*/ + 0x07, /* 4: Set Tremolo Waveform.*/ + 0xFF, /* 5: */ + 0xFF, /* 6: */ + 0xFF, /* 7: */ + 0x08, /* 8: Set Panning.*/ + 0xFF, /* 9: */ + 0x09, /* A: Stereo Control.*/ + 0x06, /* B: Pattern Loop.*/ + 0x0C, /* C: Note Cut.*/ + 0x0D, /* D: Note Delay.*/ + 0x0E, /* E: Pattern Delay.*/ + 0x0F /* F: Invert Loop.*/ + }; + + public static boolean is_s3m( byte[] header_96_bytes ) { + String s3m_identifier; + s3m_identifier = ascii_text( header_96_bytes, 44, 4 ); + return s3m_identifier.equals( "SCRM" ); + } + + public static Module load_s3m( byte[] header_96_bytes, DataInput data_input ) throws IOException { + int num_pattern_orders, num_instruments, num_patterns, num_channels; + @SuppressWarnings("unused") //Forge + int flags, tracker_version, master_volume, panning, channel_config, sequence_length; + int instrument_idx, pattern_idx, channel_idx, order_idx, panning_offset; + boolean signed_samples, stereo_mode, default_panning; + int[] channel_map, sequence; + byte[] s3m_file; + Module module; + Instrument instrument; + s3m_file = read_s3m_file( header_96_bytes, data_input ); + module = new Module(); + module.song_title = ascii_text( s3m_file, 0, 28 ); + num_pattern_orders = get_num_pattern_orders( s3m_file ); + num_instruments = get_num_instruments( s3m_file ); + num_patterns = get_num_patterns( s3m_file ); + flags = unsigned_short_le( s3m_file, 38 ); + tracker_version = unsigned_short_le( s3m_file, 40 ); + if( ( flags & 0x40 ) == 0x40 || tracker_version == 0x1300 ) { + module.fast_volume_slides = true; + } + signed_samples = false; + if( unsigned_short_le( s3m_file, 42 ) == 0x01 ) { + signed_samples = true; + } + module.global_volume = s3m_file[ 48 ] & 0xFF; + module.default_speed = s3m_file[ 49 ] & 0xFF; + module.default_tempo = s3m_file[ 50 ] & 0xFF; + master_volume = s3m_file[ 51 ] & 0x7F; + module.channel_gain = ( master_volume << IBXM.FP_SHIFT ) >> 7; + stereo_mode = ( s3m_file[ 51 ] & 0x80 ) == 0x80; + default_panning = ( s3m_file[ 53 ] & 0xFF ) == 0xFC; + channel_map = new int[ 32 ]; + num_channels = 0; + for( channel_idx = 0; channel_idx < 32; channel_idx++ ) { + channel_config = s3m_file[ 64 + channel_idx ] & 0xFF; + channel_map[ channel_idx ] = -1; + if( channel_config < 16 ) { + channel_map[ channel_idx ] = num_channels; + num_channels += 1; + } + } + module.set_num_channels( num_channels ); + panning_offset = 96 + num_pattern_orders + num_instruments * 2 + num_patterns * 2; + for( channel_idx = 0; channel_idx < 32; channel_idx++ ) { + if( channel_map[ channel_idx ] < 0 ) continue; + panning = 7; + if( stereo_mode ) { + panning = 12; + if( ( s3m_file[ 64 + channel_idx ] & 0xFF ) < 8 ) { + panning = 3; + } + } + if( default_panning ) { + flags = s3m_file[ panning_offset + channel_idx ] & 0xFF; + if( ( flags & 0x20 ) == 0x20 ) { + panning = flags & 0xF; + } + } + module.set_initial_panning( channel_map[ channel_idx ], panning * 17 ); + } + sequence = read_s3m_sequence( s3m_file ); + module.set_sequence_length( sequence.length ); + for( order_idx = 0; order_idx < sequence.length; order_idx++ ) { + module.set_sequence( order_idx, sequence[ order_idx ] ); + } + module.set_num_instruments( num_instruments ); + for( instrument_idx = 0; instrument_idx < num_instruments; instrument_idx++ ) { + instrument = read_s3m_instrument( s3m_file, instrument_idx, signed_samples ); + module.set_instrument( instrument_idx + 1, instrument ); + } + module.set_num_patterns( num_patterns ); + for( pattern_idx = 0; pattern_idx < num_patterns; pattern_idx++ ) { + module.set_pattern( pattern_idx, read_s3m_pattern( s3m_file, pattern_idx, channel_map ) ); + } + return module; + } + + private static int[] read_s3m_sequence( byte[] s3m_file ) { + int num_pattern_orders, sequence_length; + int sequence_idx, order_idx, pattern_order; + int[] sequence; + num_pattern_orders = get_num_pattern_orders( s3m_file ); + sequence_length = 0; + for( order_idx = 0; order_idx < num_pattern_orders; order_idx++ ) { + pattern_order = s3m_file[ 96 + order_idx ] & 0xFF; + if( pattern_order == 255 ) { + break; + } else if( pattern_order < 254 ) { + sequence_length += 1; + } + } + sequence = new int[ sequence_length ]; + sequence_idx = 0; + for( order_idx = 0; order_idx < num_pattern_orders; order_idx++ ) { + pattern_order = s3m_file[ 96 + order_idx ] & 0xFF; + if( pattern_order == 255 ) { + break; + } else if( pattern_order < 254 ) { + sequence[ sequence_idx ] = pattern_order; + sequence_idx += 1; + } + } + return sequence; + } + + private static Instrument read_s3m_instrument( byte[] s3m_file, int instrument_idx, boolean signed_samples ) { + int instrument_offset; + int sample_data_offset, sample_data_length; + int loop_start, loop_length, c2_rate, sample_idx, amplitude; + boolean sixteen_bit; + Instrument instrument; + Sample sample; + short[] sample_data; + instrument_offset = get_instrument_offset( s3m_file, instrument_idx ); + instrument = new Instrument(); + instrument.name = ascii_text( s3m_file, instrument_offset + 48, 28 ); + sample = new Sample(); + if( s3m_file[ instrument_offset ] == 1 ) { + sample_data_length = get_sample_data_length( s3m_file, instrument_offset ); + loop_start = unsigned_short_le( s3m_file, instrument_offset + 20 ); + loop_length = unsigned_short_le( s3m_file, instrument_offset + 24 ) - loop_start; + sample.volume = s3m_file[ instrument_offset + 28 ] & 0xFF; + if( s3m_file[ instrument_offset + 30 ] != 0 ) { + throw new IllegalArgumentException( "ScreamTracker3: Packed samples not supported!" ); + } + if( ( s3m_file[ instrument_offset + 31 ] & 0x01 ) == 0 ) { + loop_length = 0; + } + if( ( s3m_file[ instrument_offset + 31 ] & 0x02 ) != 0 ) { + throw new IllegalArgumentException( "ScreamTracker3: Stereo samples not supported!" ); + } + sixteen_bit = ( s3m_file[ instrument_offset + 31 ] & 0x04 ) != 0; + c2_rate = unsigned_short_le( s3m_file, instrument_offset + 32 ); + sample.transpose = LogTable.log_2( c2_rate ) - LogTable.log_2( 8363 ); + sample_data_offset = get_sample_data_offset( s3m_file, instrument_offset ); + if( sixteen_bit ) { + if( signed_samples ) { + throw new IllegalArgumentException( "ScreamTracker3: Signed 16-bit samples not supported!" ); + } + sample_data_length >>= 1; + sample_data = new short[ sample_data_length ]; + for( sample_idx = 0; sample_idx < sample_data_length; sample_idx++ ) { + amplitude = s3m_file[ sample_data_offset + sample_idx * 2 ] & 0xFF; + amplitude |= ( s3m_file[ sample_data_offset + sample_idx * 2 + 1 ] & 0xFF ) << 8; + sample_data[ sample_idx ] = ( short ) ( amplitude - 32768 ); + } + } else { + sample_data = new short[ sample_data_length ]; + if( signed_samples ) { + for( sample_idx = 0; sample_idx < sample_data_length; sample_idx++ ) { + amplitude = s3m_file[ sample_data_offset + sample_idx ] << 8; + sample_data[ sample_idx ] = ( short ) amplitude; + } + } else { + for( sample_idx = 0; sample_idx < sample_data_length; sample_idx++ ) { + amplitude = ( s3m_file[ sample_data_offset + sample_idx ] & 0xFF ) << 8; + sample_data[ sample_idx ] = ( short ) ( amplitude - 32768 ); + } + } + } + sample.set_sample_data( sample_data, loop_start, loop_length, false ); + } + instrument.set_num_samples( 1 ); + instrument.set_sample( 0, sample ); + return instrument; + } + + private static Pattern read_s3m_pattern( byte[] s3m_file, int pattern_idx, int[] channel_map ) { + int pattern_offset; + int num_channels, num_notes; + int row_idx, channel_idx, note_idx; + int token, key, volume_column, effect, effect_param; + byte[] pattern_data; + Pattern pattern; + num_channels = 0; + for( channel_idx = 0; channel_idx < 32; channel_idx++ ) { + if( channel_map[ channel_idx ] >= num_channels ) { + num_channels = channel_idx + 1; + } + } + num_notes = num_channels * 64; + pattern_data = new byte[ num_notes * 5 ]; + row_idx = 0; + pattern_offset = get_pattern_offset( s3m_file, pattern_idx ) + 2; + while( row_idx < 64 ) { + token = s3m_file[ pattern_offset ] & 0xFF; + pattern_offset += 1; + if( token > 0 ) { + channel_idx = channel_map[ token & 0x1F ]; + note_idx = ( num_channels * row_idx + channel_idx ) * 5; + if( ( token & 0x20 ) == 0x20 ) { + /* Key + Instrument.*/ + if( channel_idx >= 0 ) { + key = s3m_file[ pattern_offset ] & 0xFF; + if( key == 255 ) { + key = 0; + } else if( key == 254 ) { + key = 97; + } else { + key = ( ( key & 0xF0 ) >> 4 ) * 12 + ( key & 0x0F ) + 1; + while( key > 96 ) { + key = key - 12; + } + } + pattern_data[ note_idx ] = ( byte ) key; + pattern_data[ note_idx + 1 ] = s3m_file[ pattern_offset + 1 ]; + } + pattern_offset += 2; + } + if( ( token & 0x40 ) == 0x40 ) { + /* Volume.*/ + if( channel_idx >= 0 ) { + volume_column = ( s3m_file[ pattern_offset ] & 0xFF ) + 0x10; + pattern_data[ note_idx + 2 ] = ( byte ) volume_column; + } + pattern_offset += 1; + } + if( ( token & 0x80 ) == 0x80 ) { + /* Effect + Param.*/ + if( channel_idx >= 0 ) { + effect = s3m_file[ pattern_offset ] & 0xFF; + effect_param = s3m_file[ pattern_offset + 1 ] & 0xFF; + effect = effect_map[ effect & 0x1F ]; + if( effect == 0xFF ) { + effect = 0; + effect_param = 0; + } + if( effect == 0x0E ) { + effect = effect_s_map[ ( effect_param & 0xF0 ) >> 4 ]; + effect_param = effect_param & 0x0F; + switch( effect ) { + case 0x08: + effect = 0x08; + effect_param = effect_param * 17; + break; + case 0x09: + effect = 0x08; + if( effect_param > 7 ) { + effect_param -= 8; + } else { + effect_param += 8; + } + effect_param = effect_param * 17; + break; + case 0xFF: + effect = 0; + effect_param = 0; + break; + default: + effect_param = ( ( effect & 0x0F ) << 4 ) | ( effect_param & 0x0F ); + effect = 0x0E; + break; + } + } + pattern_data[ note_idx + 3 ] = ( byte ) effect; + pattern_data[ note_idx + 4 ] = ( byte ) effect_param; + } + pattern_offset += 2; + } + } else { + row_idx += 1; + } + } + pattern = new Pattern(); + pattern.num_rows = 64; + pattern.set_pattern_data( pattern_data ); + return pattern; + } + + private static byte[] read_s3m_file( byte[] header_96_bytes, DataInput data_input ) throws IOException { + int s3m_file_length; + int num_pattern_orders, num_instruments, num_patterns; + int instrument_idx, pattern_idx; + int instrument_offset, sample_data_offset, pattern_offset; + byte[] s3m_file; + if( !is_s3m( header_96_bytes ) ) { + throw new IllegalArgumentException( "ScreamTracker3: Not an S3M file!" ); + } + s3m_file = header_96_bytes; + s3m_file_length = header_96_bytes.length; + num_pattern_orders = get_num_pattern_orders( s3m_file ); + num_instruments = get_num_instruments( s3m_file ); + num_patterns = get_num_patterns( s3m_file ); + s3m_file_length += num_pattern_orders; + s3m_file_length += num_instruments * 2; + s3m_file_length += num_patterns * 2; + /* Read enough of file to calculate the length.*/ + s3m_file = read_more( s3m_file, s3m_file_length, data_input ); + for( instrument_idx = 0; instrument_idx < num_instruments; instrument_idx++ ) { + instrument_offset = get_instrument_offset( s3m_file, instrument_idx ); + instrument_offset += 80; + if( instrument_offset > s3m_file_length ) { + s3m_file_length = instrument_offset; + } + } + for( pattern_idx = 0; pattern_idx < num_patterns; pattern_idx++ ) { + pattern_offset = get_pattern_offset( s3m_file, pattern_idx ); + pattern_offset += 2; + if( pattern_offset > s3m_file_length ) { + s3m_file_length = pattern_offset; + } + } + s3m_file = read_more( s3m_file, s3m_file_length, data_input ); + /* Read rest of file.*/ + for( instrument_idx = 0; instrument_idx < num_instruments; instrument_idx++ ) { + instrument_offset = get_instrument_offset( s3m_file, instrument_idx ); + sample_data_offset = get_sample_data_offset( s3m_file, instrument_offset ); + sample_data_offset += get_sample_data_length( s3m_file, instrument_offset ); + if( sample_data_offset > s3m_file_length ) { + s3m_file_length = sample_data_offset; + } + } + for( pattern_idx = 0; pattern_idx < num_patterns; pattern_idx++ ) { + pattern_offset = get_pattern_offset( s3m_file, pattern_idx ); + pattern_offset += get_pattern_length( s3m_file, pattern_offset ); + pattern_offset += 2; + if( pattern_offset > s3m_file_length ) { + s3m_file_length = pattern_offset; + } + } + s3m_file = read_more( s3m_file, s3m_file_length, data_input ); + return s3m_file; + } + + private static int get_num_pattern_orders( byte[] s3m_file ) { + int num_pattern_orders; + num_pattern_orders = unsigned_short_le( s3m_file, 32 ); + return num_pattern_orders; + } + + private static int get_num_instruments( byte[] s3m_file ) { + int num_instruments; + num_instruments = unsigned_short_le( s3m_file, 34 ); + return num_instruments; + } + + private static int get_num_patterns( byte[] s3m_file ) { + int num_patterns; + num_patterns = unsigned_short_le( s3m_file, 36 ); + return num_patterns; + } + + private static int get_instrument_offset( byte[] s3m_file, int instrument_idx ) { + int instrument_offset, pointer_offset; + pointer_offset = 96 + get_num_pattern_orders( s3m_file ); + instrument_offset = unsigned_short_le( s3m_file, pointer_offset + instrument_idx * 2 ) << 4; + return instrument_offset; + } + + private static int get_sample_data_offset( byte[] s3m_file, int instrument_offset ) { + int sample_data_offset; + sample_data_offset = 0; + if( s3m_file[ instrument_offset ] == 1 ) { + sample_data_offset = ( s3m_file[ instrument_offset + 13 ] & 0xFF ) << 20; + sample_data_offset |= unsigned_short_le( s3m_file, instrument_offset + 14 ) << 4; + } + return sample_data_offset; + } + + private static int get_sample_data_length( byte[] s3m_file, int instrument_offset ) { + int sample_data_length; + boolean sixteen_bit; + sample_data_length = 0; + if( s3m_file[ instrument_offset ] == 1 ) { + sample_data_length = unsigned_short_le( s3m_file, instrument_offset + 16 ); + sixteen_bit = ( s3m_file[ instrument_offset + 31 ] & 0x04 ) != 0; + if( sixteen_bit ) { + sample_data_length <<= 1; + } + } + return sample_data_length; + } + + private static int get_pattern_offset( byte[] s3m_file, int pattern_idx ) { + int pattern_offset, pointer_offset; + pointer_offset = 96 + get_num_pattern_orders( s3m_file ); + pointer_offset += get_num_instruments( s3m_file ) * 2; + pattern_offset = unsigned_short_le( s3m_file, pointer_offset + pattern_idx * 2 ) << 4; + return pattern_offset; + } + + private static int get_pattern_length( byte[] s3m_file, int pattern_offset ) { + int pattern_length; + pattern_length = unsigned_short_le( s3m_file, pattern_offset ); + return pattern_length; + } + + private static byte[] read_more( byte[] old_data, int new_length, DataInput data_input ) throws IOException { + byte[] new_data; + new_data = old_data; + if( new_length > old_data.length ) { + new_data = new byte[ new_length ]; + System.arraycopy( old_data, 0, new_data, 0, old_data.length ); + try { + data_input.readFully( new_data, old_data.length, new_data.length - old_data.length ); + } catch( EOFException e ) { + System.out.println( "ScreamTracker3: Module has been truncated!" ); + } + } + return new_data; + } + + private static int unsigned_short_le( byte[] buffer, int offset ) { + int value; + value = buffer[ offset ] & 0xFF; + value = value | ( ( buffer[ offset + 1 ] & 0xFF ) << 8 ); + return value; + } + + private static String ascii_text( byte[] buffer, int offset, int length ) { + int idx, chr; + byte[] string_buffer; + String string; + string_buffer = new byte[ length ]; + for( idx = 0; idx < length; idx++ ) { + chr = buffer[ offset + idx ]; + if( chr < 32 ) { + chr = 32; + } + string_buffer[ idx ] = ( byte ) chr; + } + try { + string = new String( string_buffer, 0, length, "ISO-8859-1" ); + } catch( UnsupportedEncodingException e ) { + string = ""; + } + return string; + } +} diff --git a/build/tmp/recompileMc/sources/mcp/MethodsReturnNonnullByDefault.java b/build/tmp/recompileMc/sources/mcp/MethodsReturnNonnullByDefault.java new file mode 100644 index 0000000..485bb9d --- /dev/null +++ b/build/tmp/recompileMc/sources/mcp/MethodsReturnNonnullByDefault.java @@ -0,0 +1,26 @@ +package mcp; +import javax.annotation.Nonnull; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.annotation.meta.TypeQualifierDefault; + +/** + * This annotation can be applied to a package, class or method to indicate that + * the method in that element are nonnull by default unless there is: + * + * + */ +@Documented +@Nonnull +@TypeQualifierDefault(ElementType.METHOD) // Note: This is a copy of javax.annotation.ParametersAreNonnullByDefault with target changed to METHOD +@Retention(RetentionPolicy.RUNTIME) +public @interface MethodsReturnNonnullByDefault {} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/Advancement.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/Advancement.java new file mode 100644 index 0000000..ed2f561 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/Advancement.java @@ -0,0 +1,388 @@ +package net.minecraft.advancements; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import javax.annotation.Nullable; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.event.HoverEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.ArrayUtils; + +public class Advancement +{ + private final Advancement parent; + private final DisplayInfo display; + private final AdvancementRewards rewards; + private final ResourceLocation id; + private final Map criteria; + private final String[][] requirements; + private final Set children = Sets.newLinkedHashSet(); + private final ITextComponent displayText; + + public Advancement(ResourceLocation id, @Nullable Advancement parentIn, @Nullable DisplayInfo displayIn, AdvancementRewards rewardsIn, Map criteriaIn, String[][] requirementsIn) + { + this.id = id; + this.display = displayIn; + this.criteria = ImmutableMap.copyOf(criteriaIn); + this.parent = parentIn; + this.rewards = rewardsIn; + this.requirements = requirementsIn; + + if (parentIn != null) + { + parentIn.addChild(this); + } + + if (displayIn == null) + { + this.displayText = new TextComponentString(id.toString()); + } + else + { + this.displayText = new TextComponentString("["); + this.displayText.getStyle().setColor(displayIn.getFrame().getFormat()); + ITextComponent itextcomponent = displayIn.getTitle().createCopy(); + ITextComponent itextcomponent1 = new TextComponentString(""); + ITextComponent itextcomponent2 = itextcomponent.createCopy(); + itextcomponent2.getStyle().setColor(displayIn.getFrame().getFormat()); + itextcomponent1.appendSibling(itextcomponent2); + itextcomponent1.appendText("\n"); + itextcomponent1.appendSibling(displayIn.getDescription()); + itextcomponent.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, itextcomponent1)); + this.displayText.appendSibling(itextcomponent); + this.displayText.appendText("]"); + } + } + + /** + * Creates a new advancement builder with the data from this advancement + */ + public Advancement.Builder copy() + { + return new Advancement.Builder(this.parent == null ? null : this.parent.getId(), this.display, this.rewards, this.criteria, this.requirements); + } + + /** + * Get the {@code Advancement} that is this {@code Advancement}'s parent. This determines the tree structure that + * appears in the {@linkplain GuiScreenAdvancements GUI}. + * + * @return the parent {@code Advancement} of this {@code Advancement}, or {@code null} to signify that this {@code + * Advancement} is a root with no parent. + */ + @Nullable + public Advancement getParent() + { + return this.parent; + } + + /** + * Get information that defines this {@code Advancement}'s appearance in GUIs. + * + * @return information that defines this {@code Advancement}'s appearance in GUIs. If {@code null}, signifies an + * invisible {@code Advancement}. + */ + @Nullable + public DisplayInfo getDisplay() + { + return this.display; + } + + public AdvancementRewards getRewards() + { + return this.rewards; + } + + public String toString() + { + return "SimpleAdvancement{id=" + this.getId() + ", parent=" + (this.parent == null ? "null" : this.parent.getId()) + ", display=" + this.display + ", rewards=" + this.rewards + ", criteria=" + this.criteria + ", requirements=" + Arrays.deepToString(this.requirements) + '}'; + } + + /** + * Get the children of this {@code Advancement}. + * + * @return an {@code Iterable} of this {@code Advancement}'s children. + * @see #getParent() + */ + public Iterable getChildren() + { + return this.children; + } + + /** + * Get the {@link Criterion Criteria} used to decide the completion of this {@code Advancement}. Each key-value pair + * consists of a {@code Criterion} and its name. + * + * @return the criteria used to decide the completion of this {@code Advancement} + * @see #getRequirements() + */ + public Map getCriteria() + { + return this.criteria; + } + + /** + * Get how many requirements this {@code Advancement} has. + * + * @return {@code this.getRequirements().length} + * @see #getRequirements() + */ + @SideOnly(Side.CLIENT) + public int getRequirementCount() + { + return this.requirements.length; + } + + /** + * Add the given {@code Advancement} as a child of this {@code Advancement}. + * + * @see #getParent() + */ + public void addChild(Advancement advancementIn) + { + this.children.add(advancementIn); + } + + /** + * Get this {@code Advancement}'s unique identifier. + * + * @return this {@code Advancement}'s unique identifier + */ + public ResourceLocation getId() + { + return this.id; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof Advancement)) + { + return false; + } + else + { + Advancement advancement = (Advancement)p_equals_1_; + return this.id.equals(advancement.id); + } + } + + public int hashCode() + { + return this.id.hashCode(); + } + + public String[][] getRequirements() + { + return this.requirements; + } + + /** + * Returns the {@code ITextComponent} that is shown in the chat message sent after this {@code Advancement} is + * completed. + * + * @return the {@code ITextComponent} that is shown in the chat message sent after this {@code Advancement} is + * completed. If this {@code Advancement} is {@linkplain #getDisplay() invisible}, then it consists simply of {@link + * #getId()}. Otherwise, it is the {@linkplain DisplayInfo#getTitle() title} inside square brackets, colored by the + * {@linkplain net.minecraft.advancements.FrameType#getFormat frame type}, and hovering over it shows the + * {@linkplain DisplayInfo#getDescription() description}. + */ + public ITextComponent getDisplayText() + { + return this.displayText; + } + + public static class Builder + { + private final ResourceLocation parentId; + private Advancement parent; + private final DisplayInfo display; + private final AdvancementRewards rewards; + private final Map criteria; + private final String[][] requirements; + + Builder(@Nullable ResourceLocation p_i47414_1_, @Nullable DisplayInfo p_i47414_2_, AdvancementRewards p_i47414_3_, Map p_i47414_4_, String[][] p_i47414_5_) + { + this.parentId = p_i47414_1_; + this.display = p_i47414_2_; + this.rewards = p_i47414_3_; + this.criteria = p_i47414_4_; + this.requirements = p_i47414_5_; + } + + /** + * Tries to resolve the parent of this advancement, if possible. Returns true on success. + */ + public boolean resolveParent(Function lookup) + { + if (this.parentId == null) + { + return true; + } + else + { + this.parent = lookup.apply(this.parentId); + return this.parent != null; + } + } + + public Advancement build(ResourceLocation id) + { + return new Advancement(id, this.parent, this.display, this.rewards, this.criteria, this.requirements); + } + + public void writeTo(PacketBuffer buf) + { + if (this.parentId == null) + { + buf.writeBoolean(false); + } + else + { + buf.writeBoolean(true); + buf.writeResourceLocation(this.parentId); + } + + if (this.display == null) + { + buf.writeBoolean(false); + } + else + { + buf.writeBoolean(true); + this.display.write(buf); + } + + Criterion.serializeToNetwork(this.criteria, buf); + buf.writeVarInt(this.requirements.length); + + for (String[] astring : this.requirements) + { + buf.writeVarInt(astring.length); + + for (String s : astring) + { + buf.writeString(s); + } + } + } + + public String toString() + { + return "Task Advancement{parentId=" + this.parentId + ", display=" + this.display + ", rewards=" + this.rewards + ", criteria=" + this.criteria + ", requirements=" + Arrays.deepToString(this.requirements) + '}'; + } + + public static Advancement.Builder deserialize(JsonObject json, JsonDeserializationContext context) + { + ResourceLocation resourcelocation = json.has("parent") ? new ResourceLocation(JsonUtils.getString(json, "parent")) : null; + DisplayInfo displayinfo = json.has("display") ? DisplayInfo.deserialize(JsonUtils.getJsonObject(json, "display"), context) : null; + AdvancementRewards advancementrewards = (AdvancementRewards)JsonUtils.deserializeClass(json, "rewards", AdvancementRewards.EMPTY, context, AdvancementRewards.class); + Map map = Criterion.criteriaFromJson(JsonUtils.getJsonObject(json, "criteria"), context); + + if (map.isEmpty()) + { + throw new JsonSyntaxException("Advancement criteria cannot be empty"); + } + else + { + JsonArray jsonarray = JsonUtils.getJsonArray(json, "requirements", new JsonArray()); + String[][] astring = new String[jsonarray.size()][]; + + for (int i = 0; i < jsonarray.size(); ++i) + { + JsonArray jsonarray1 = JsonUtils.getJsonArray(jsonarray.get(i), "requirements[" + i + "]"); + astring[i] = new String[jsonarray1.size()]; + + for (int j = 0; j < jsonarray1.size(); ++j) + { + astring[i][j] = JsonUtils.getString(jsonarray1.get(j), "requirements[" + i + "][" + j + "]"); + } + } + + if (astring.length == 0) + { + astring = new String[map.size()][]; + int k = 0; + + for (String s2 : map.keySet()) + { + astring[k++] = new String[] {s2}; + } + } + + for (String[] astring1 : astring) + { + if (astring1.length == 0 && map.isEmpty()) + { + throw new JsonSyntaxException("Requirement entry cannot be empty"); + } + + for (String s : astring1) + { + if (!map.containsKey(s)) + { + throw new JsonSyntaxException("Unknown required criterion '" + s + "'"); + } + } + } + + for (String s1 : map.keySet()) + { + boolean flag = false; + + for (String[] astring2 : astring) + { + if (ArrayUtils.contains(astring2, s1)) + { + flag = true; + break; + } + } + + if (!flag) + { + throw new JsonSyntaxException("Criterion '" + s1 + "' isn't a requirement for completion. This isn't supported behaviour, all criteria must be required."); + } + } + + return new Advancement.Builder(resourcelocation, displayinfo, advancementrewards, map, astring); + } + } + + public static Advancement.Builder readFrom(PacketBuffer buf) throws IOException + { + ResourceLocation resourcelocation = buf.readBoolean() ? buf.readResourceLocation() : null; + DisplayInfo displayinfo = buf.readBoolean() ? DisplayInfo.read(buf) : null; + Map map = Criterion.criteriaFromNetwork(buf); + String[][] astring = new String[buf.readVarInt()][]; + + for (int i = 0; i < astring.length; ++i) + { + astring[i] = new String[buf.readVarInt()]; + + for (int j = 0; j < astring[i].length; ++j) + { + astring[i][j] = buf.readString(32767); + } + } + + return new Advancement.Builder(resourcelocation, displayinfo, AdvancementRewards.EMPTY, map, astring); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementList.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementList.java new file mode 100644 index 0000000..39005cf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementList.java @@ -0,0 +1,201 @@ +package net.minecraft.advancements; + +import com.google.common.base.Functions; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import java.util.function.Function; +import javax.annotation.Nullable; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class AdvancementList +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Map advancements = Maps.newHashMap(); + /** All advancements that do not have a parent. */ + private final Set roots = Sets.newLinkedHashSet(); + private final Set nonRoots = Sets.newLinkedHashSet(); + private AdvancementList.Listener listener; + + @SideOnly(Side.CLIENT) + private void remove(Advancement advancementIn) + { + for (Advancement advancement : advancementIn.getChildren()) + { + this.remove(advancement); + } + + LOGGER.info("Forgot about advancement " + advancementIn.getId()); + this.advancements.remove(advancementIn.getId()); + + if (advancementIn.getParent() == null) + { + this.roots.remove(advancementIn); + + if (this.listener != null) + { + this.listener.rootAdvancementRemoved(advancementIn); + } + } + else + { + this.nonRoots.remove(advancementIn); + + if (this.listener != null) + { + this.listener.nonRootAdvancementRemoved(advancementIn); + } + } + } + + @SideOnly(Side.CLIENT) + public void removeAll(Set ids) + { + for (ResourceLocation resourcelocation : ids) + { + Advancement advancement = this.advancements.get(resourcelocation); + + if (advancement == null) + { + LOGGER.warn("Told to remove advancement " + resourcelocation + " but I don't know what that is"); + } + else + { + this.remove(advancement); + } + } + } + + public void loadAdvancements(Map advancementsIn) + { + Function function = Functions.forMap(this.advancements, null); + label42: + + while (!advancementsIn.isEmpty()) + { + boolean flag = false; + Iterator> iterator = advancementsIn.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + ResourceLocation resourcelocation = entry.getKey(); + Advancement.Builder advancement$builder = entry.getValue(); + + if (advancement$builder.resolveParent(function)) + { + Advancement advancement = advancement$builder.build(resourcelocation); + this.advancements.put(resourcelocation, advancement); + flag = true; + iterator.remove(); + + if (advancement.getParent() == null) + { + this.roots.add(advancement); + + if (this.listener != null) + { + this.listener.rootAdvancementAdded(advancement); + } + } + else + { + this.nonRoots.add(advancement); + + if (this.listener != null) + { + this.listener.nonRootAdvancementAdded(advancement); + } + } + } + } + + if (!flag) + { + iterator = advancementsIn.entrySet().iterator(); + + while (true) + { + if (!iterator.hasNext()) + { + break label42; + } + + Entry entry1 = (Entry)iterator.next(); + LOGGER.error("Couldn't load advancement " + entry1.getKey() + ": " + entry1.getValue()); + } + } + } + + LOGGER.info("Loaded " + this.advancements.size() + " advancements"); + } + + public void clear() + { + this.advancements.clear(); + this.roots.clear(); + this.nonRoots.clear(); + + if (this.listener != null) + { + this.listener.advancementsCleared(); + } + } + + public Iterable getRoots() + { + return this.roots; + } + + public Iterable getAdvancements() + { + return this.advancements.values(); + } + + @Nullable + public Advancement getAdvancement(ResourceLocation id) + { + return this.advancements.get(id); + } + + @SideOnly(Side.CLIENT) + public void setListener(@Nullable AdvancementList.Listener listenerIn) + { + this.listener = listenerIn; + + if (listenerIn != null) + { + for (Advancement advancement : this.roots) + { + listenerIn.rootAdvancementAdded(advancement); + } + + for (Advancement advancement1 : this.nonRoots) + { + listenerIn.nonRootAdvancementAdded(advancement1); + } + } + } + + public interface Listener + { + void rootAdvancementAdded(Advancement advancementIn); + + @SideOnly(Side.CLIENT) + void rootAdvancementRemoved(Advancement advancementIn); + + void nonRootAdvancementAdded(Advancement advancementIn); + + @SideOnly(Side.CLIENT) + void nonRootAdvancementRemoved(Advancement advancementIn); + + void advancementsCleared(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementManager.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementManager.java new file mode 100644 index 0000000..5fe8162 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementManager.java @@ -0,0 +1,234 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.Type; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.util.EnumTypeAdapterFactory; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class AdvancementManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final Gson GSON = (new GsonBuilder()).registerTypeHierarchyAdapter(Advancement.Builder.class, new JsonDeserializer() + { + public Advancement.Builder deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "advancement"); + return Advancement.Builder.deserialize(jsonobject, p_deserialize_3_); + } + }).registerTypeAdapter(AdvancementRewards.class, new AdvancementRewards.Deserializer()).registerTypeHierarchyAdapter(ITextComponent.class, new ITextComponent.Serializer()).registerTypeHierarchyAdapter(Style.class, new Style.Serializer()).registerTypeAdapterFactory(new EnumTypeAdapterFactory()).create(); + private static final AdvancementList ADVANCEMENT_LIST = new AdvancementList(); + /** The directory where this manager looks for custom advancement files. */ + private final File advancementsDir; + private boolean hasErrored; + + public AdvancementManager(@Nullable File advancementsDirIn) + { + this.advancementsDir = advancementsDirIn; + this.reload(); + } + + public void reload() + { + this.hasErrored = false; + ADVANCEMENT_LIST.clear(); + Map map = this.loadCustomAdvancements(); + this.loadBuiltInAdvancements(map); + this.hasErrored |= net.minecraftforge.common.ForgeHooks.loadAdvancements(map); + ADVANCEMENT_LIST.loadAdvancements(map); + + for (Advancement advancement : ADVANCEMENT_LIST.getRoots()) + { + if (advancement.getDisplay() != null) + { + AdvancementTreeNode.layout(advancement); + } + } + } + + public boolean hasErrored() + { + return this.hasErrored; + } + + private Map loadCustomAdvancements() + { + if (this.advancementsDir == null) + { + return Maps.newHashMap(); + } + else + { + Map map = Maps.newHashMap(); + this.advancementsDir.mkdirs(); + + for (File file1 : FileUtils.listFiles(this.advancementsDir, new String[] {"json"}, true)) + { + String s = FilenameUtils.removeExtension(this.advancementsDir.toURI().relativize(file1.toURI()).toString()); + String[] astring = s.split("/", 2); + + if (astring.length == 2) + { + ResourceLocation resourcelocation = new ResourceLocation(astring[0], astring[1]); + + try + { + Advancement.Builder advancement$builder = (Advancement.Builder)JsonUtils.gsonDeserialize(GSON, FileUtils.readFileToString(file1, StandardCharsets.UTF_8), Advancement.Builder.class); + + if (advancement$builder == null) + { + LOGGER.error("Couldn't load custom advancement " + resourcelocation + " from " + file1 + " as it's empty or null"); + } + else + { + map.put(resourcelocation, advancement$builder); + } + } + catch (IllegalArgumentException | JsonParseException jsonparseexception) + { + LOGGER.error("Parsing error loading custom advancement " + resourcelocation, (Throwable)jsonparseexception); + this.hasErrored = true; + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't read custom advancement " + resourcelocation + " from " + file1, (Throwable)ioexception); + this.hasErrored = true; + } + } + } + return map; + } + } + + private void loadBuiltInAdvancements(Map map) + { + FileSystem filesystem = null; + + try + { + URL url = AdvancementManager.class.getResource("/assets/.mcassetsroot"); + + if (url != null) + { + URI uri = url.toURI(); + Path path; + + if ("file".equals(uri.getScheme())) + { + path = Paths.get(CraftingManager.class.getResource("/assets/minecraft/advancements").toURI()); + } + else + { + if (!"jar".equals(uri.getScheme())) + { + LOGGER.error("Unsupported scheme " + uri + " trying to list all built-in advancements (NYI?)"); + this.hasErrored = true; + return; + } + + filesystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); + path = filesystem.getPath("/assets/minecraft/advancements"); + } + + Iterator iterator = Files.walk(path).iterator(); + + while (iterator.hasNext()) + { + Path path1 = iterator.next(); + + if ("json".equals(FilenameUtils.getExtension(path1.toString()))) + { + Path path2 = path.relativize(path1); + String s = FilenameUtils.removeExtension(path2.toString()).replaceAll("\\\\", "/"); + ResourceLocation resourcelocation = new ResourceLocation("minecraft", s); + + if (!map.containsKey(resourcelocation)) + { + BufferedReader bufferedreader = null; + + try + { + bufferedreader = Files.newBufferedReader(path1); + Advancement.Builder advancement$builder = (Advancement.Builder)JsonUtils.fromJson(GSON, bufferedreader, Advancement.Builder.class); + map.put(resourcelocation, advancement$builder); + } + catch (JsonParseException jsonparseexception) + { + LOGGER.error("Parsing error loading built-in advancement " + resourcelocation, (Throwable)jsonparseexception); + this.hasErrored = true; + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't read advancement " + resourcelocation + " from " + path1, (Throwable)ioexception); + this.hasErrored = true; + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + } + } + } + + return; + } + + LOGGER.error("Couldn't find .mcassetsroot"); + this.hasErrored = true; + } + catch (IOException | URISyntaxException urisyntaxexception) + { + LOGGER.error("Couldn't get a list of all built-in advancement files", (Throwable)urisyntaxexception); + this.hasErrored = true; + return; + } + finally + { + IOUtils.closeQuietly((Closeable)filesystem); + } + } + + @Nullable + public Advancement getAdvancement(ResourceLocation id) + { + return ADVANCEMENT_LIST.getAdvancement(id); + } + + public Iterable getAdvancements() + { + return ADVANCEMENT_LIST.getAdvancements(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementProgress.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementProgress.java new file mode 100644 index 0000000..dbc79a0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementProgress.java @@ -0,0 +1,345 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import java.util.Arrays; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class AdvancementProgress implements Comparable +{ + private final Map criteria = Maps.newHashMap(); + private String[][] requirements = new String[0][]; + + /** + * Update this AdvancementProgress' criteria and requirements + */ + public void update(Map criteriaIn, String[][] requirements) + { + Set set = criteriaIn.keySet(); + Iterator> iterator = this.criteria.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + + if (!set.contains(entry.getKey())) + { + iterator.remove(); + } + } + + for (String s : set) + { + if (!this.criteria.containsKey(s)) + { + this.criteria.put(s, new CriterionProgress(this)); + } + } + + this.requirements = requirements; + } + + public boolean isDone() + { + if (this.requirements.length == 0) + { + return false; + } + else + { + for (String[] astring : this.requirements) + { + boolean flag = false; + + for (String s : astring) + { + CriterionProgress criterionprogress = this.getCriterionProgress(s); + + if (criterionprogress != null && criterionprogress.isObtained()) + { + flag = true; + break; + } + } + + if (!flag) + { + return false; + } + } + + return true; + } + } + + public boolean hasProgress() + { + for (CriterionProgress criterionprogress : this.criteria.values()) + { + if (criterionprogress.isObtained()) + { + return true; + } + } + + return false; + } + + public boolean grantCriterion(String criterionIn) + { + CriterionProgress criterionprogress = this.criteria.get(criterionIn); + + if (criterionprogress != null && !criterionprogress.isObtained()) + { + criterionprogress.obtain(); + return true; + } + else + { + return false; + } + } + + public boolean revokeCriterion(String criterionIn) + { + CriterionProgress criterionprogress = this.criteria.get(criterionIn); + + if (criterionprogress != null && criterionprogress.isObtained()) + { + criterionprogress.reset(); + return true; + } + else + { + return false; + } + } + + public String toString() + { + return "AdvancementProgress{criteria=" + this.criteria + ", requirements=" + Arrays.deepToString(this.requirements) + '}'; + } + + public void serializeToNetwork(PacketBuffer p_192104_1_) + { + p_192104_1_.writeVarInt(this.criteria.size()); + + for (Entry entry : this.criteria.entrySet()) + { + p_192104_1_.writeString(entry.getKey()); + ((CriterionProgress)entry.getValue()).write(p_192104_1_); + } + } + + public static AdvancementProgress fromNetwork(PacketBuffer p_192100_0_) + { + AdvancementProgress advancementprogress = new AdvancementProgress(); + int i = p_192100_0_.readVarInt(); + + for (int j = 0; j < i; ++j) + { + advancementprogress.criteria.put(p_192100_0_.readString(32767), CriterionProgress.read(p_192100_0_, advancementprogress)); + } + + return advancementprogress; + } + + @Nullable + public CriterionProgress getCriterionProgress(String criterionIn) + { + return this.criteria.get(criterionIn); + } + + @SideOnly(Side.CLIENT) + public float getPercent() + { + if (this.criteria.isEmpty()) + { + return 0.0F; + } + else + { + float f = (float)this.requirements.length; + float f1 = (float)this.countCompletedRequirements(); + return f1 / f; + } + } + + @Nullable + @SideOnly(Side.CLIENT) + public String getProgressText() + { + if (this.criteria.isEmpty()) + { + return null; + } + else + { + int i = this.requirements.length; + + if (i <= 1) + { + return null; + } + else + { + int j = this.countCompletedRequirements(); + return j + "/" + i; + } + } + } + + @SideOnly(Side.CLIENT) + private int countCompletedRequirements() + { + int i = 0; + + for (String[] astring : this.requirements) + { + boolean flag = false; + + for (String s : astring) + { + CriterionProgress criterionprogress = this.getCriterionProgress(s); + + if (criterionprogress != null && criterionprogress.isObtained()) + { + flag = true; + break; + } + } + + if (flag) + { + ++i; + } + } + + return i; + } + + public Iterable getRemaningCriteria() + { + List list = Lists.newArrayList(); + + for (Entry entry : this.criteria.entrySet()) + { + if (!((CriterionProgress)entry.getValue()).isObtained()) + { + list.add(entry.getKey()); + } + } + + return list; + } + + public Iterable getCompletedCriteria() + { + List list = Lists.newArrayList(); + + for (Entry entry : this.criteria.entrySet()) + { + if (((CriterionProgress)entry.getValue()).isObtained()) + { + list.add(entry.getKey()); + } + } + + return list; + } + + @Nullable + public Date getFirstProgressDate() + { + Date date = null; + + for (CriterionProgress criterionprogress : this.criteria.values()) + { + if (criterionprogress.isObtained() && (date == null || criterionprogress.getObtained().before(date))) + { + date = criterionprogress.getObtained(); + } + } + + return date; + } + + public int compareTo(AdvancementProgress p_compareTo_1_) + { + Date date = this.getFirstProgressDate(); + Date date1 = p_compareTo_1_.getFirstProgressDate(); + + if (date == null && date1 != null) + { + return 1; + } + else if (date != null && date1 == null) + { + return -1; + } + else + { + return date == null && date1 == null ? 0 : date.compareTo(date1); + } + } + + public static class Serializer implements JsonDeserializer, JsonSerializer + { + public JsonElement serialize(AdvancementProgress p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + JsonObject jsonobject1 = new JsonObject(); + + for (Entry entry : p_serialize_1_.criteria.entrySet()) + { + CriterionProgress criterionprogress = entry.getValue(); + + if (criterionprogress.isObtained()) + { + jsonobject1.add(entry.getKey(), criterionprogress.serialize()); + } + } + + if (!jsonobject1.entrySet().isEmpty()) + { + jsonobject.add("criteria", jsonobject1); + } + + jsonobject.addProperty("done", Boolean.valueOf(p_serialize_1_.isDone())); + return jsonobject; + } + + public AdvancementProgress deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "advancement"); + JsonObject jsonobject1 = JsonUtils.getJsonObject(jsonobject, "criteria", new JsonObject()); + AdvancementProgress advancementprogress = new AdvancementProgress(); + + for (Entry entry : jsonobject1.entrySet()) + { + String s = entry.getKey(); + advancementprogress.criteria.put(s, CriterionProgress.fromDateTime(advancementprogress, JsonUtils.getString(entry.getValue(), s))); + } + + return advancementprogress; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementRewards.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementRewards.java new file mode 100644 index 0000000..33d7cb4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementRewards.java @@ -0,0 +1,222 @@ +package net.minecraft.advancements; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; +import java.lang.reflect.Type; +import java.util.Arrays; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.FunctionObject; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootContext; + +public class AdvancementRewards +{ + public static final AdvancementRewards EMPTY = new AdvancementRewards(0, new ResourceLocation[0], new ResourceLocation[0], FunctionObject.CacheableFunction.EMPTY); + private final int experience; + private final ResourceLocation[] loot; + private final ResourceLocation[] recipes; + private final FunctionObject.CacheableFunction function; + + public AdvancementRewards(int experience, ResourceLocation[] loot, ResourceLocation[] recipes, FunctionObject.CacheableFunction function) + { + this.experience = experience; + this.loot = loot; + this.recipes = recipes; + this.function = function; + } + + public void apply(final EntityPlayerMP player) + { + player.addExperience(this.experience); + LootContext lootcontext = (new LootContext.Builder(player.getServerWorld())).withLootedEntity(player).withPlayer(player).withLuck(player.getLuck()).build(); // Forge: add player & luck to LootContext + boolean flag = false; + + for (ResourceLocation resourcelocation : this.loot) + { + for (ItemStack itemstack : player.world.getLootTableManager().getLootTableFromLocation(resourcelocation).generateLootForPools(player.getRNG(), lootcontext)) + { + if (player.addItemStackToInventory(itemstack)) + { + player.world.playSound((EntityPlayer)null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, ((player.getRNG().nextFloat() - player.getRNG().nextFloat()) * 0.7F + 1.0F) * 2.0F); + flag = true; + } + else + { + EntityItem entityitem = player.dropItem(itemstack, false); + + if (entityitem != null) + { + entityitem.setNoPickupDelay(); + entityitem.setOwner(player.getName()); + } + } + } + } + + if (flag) + { + player.inventoryContainer.detectAndSendChanges(); + } + + if (this.recipes.length > 0) + { + player.unlockRecipes(this.recipes); + } + + final MinecraftServer minecraftserver = player.mcServer; + FunctionObject functionobject = this.function.get(minecraftserver.getFunctionManager()); + + if (functionobject != null) + { + ICommandSender icommandsender = new ICommandSender() + { + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return player.getName(); + } + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return player.getDisplayName(); + } + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + } + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return permLevel <= 2; + } + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the + * world, return the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return player.getPosition(); + } + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, + * return 0.0D, 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return player.getPositionVector(); + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the + * world, return the overworld + */ + public World getEntityWorld() + { + return player.world; + } + /** + * Returns the entity associated with the command sender. MAY BE NULL! + */ + public Entity getCommandSenderEntity() + { + return player; + } + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return minecraftserver.worlds[0].getGameRules().getBoolean("commandBlockOutput"); + } + public void setCommandStat(CommandResultStats.Type type, int amount) + { + player.setCommandStat(type, amount); + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return player.getServer(); + } + }; + minecraftserver.getFunctionManager().execute(functionobject, icommandsender); + } + } + + public String toString() + { + return "AdvancementRewards{experience=" + this.experience + ", loot=" + Arrays.toString((Object[])this.loot) + ", recipes=" + Arrays.toString((Object[])this.recipes) + ", function=" + this.function + '}'; + } + + public static class Deserializer implements JsonDeserializer + { + public AdvancementRewards deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "rewards"); + int i = JsonUtils.getInt(jsonobject, "experience", 0); + JsonArray jsonarray = JsonUtils.getJsonArray(jsonobject, "loot", new JsonArray()); + ResourceLocation[] aresourcelocation = new ResourceLocation[jsonarray.size()]; + + for (int j = 0; j < aresourcelocation.length; ++j) + { + aresourcelocation[j] = new ResourceLocation(JsonUtils.getString(jsonarray.get(j), "loot[" + j + "]")); + } + + JsonArray jsonarray1 = JsonUtils.getJsonArray(jsonobject, "recipes", new JsonArray()); + ResourceLocation[] aresourcelocation1 = new ResourceLocation[jsonarray1.size()]; + + for (int k = 0; k < aresourcelocation1.length; ++k) + { + aresourcelocation1[k] = new ResourceLocation(JsonUtils.getString(jsonarray1.get(k), "recipes[" + k + "]")); + IRecipe irecipe = CraftingManager.getRecipe(aresourcelocation1[k]); + + if (irecipe == null) + { + throw new JsonSyntaxException("Unknown recipe '" + aresourcelocation1[k] + "'"); + } + } + + FunctionObject.CacheableFunction functionobject$cacheablefunction; + + if (jsonobject.has("function")) + { + functionobject$cacheablefunction = new FunctionObject.CacheableFunction(new ResourceLocation(JsonUtils.getString(jsonobject, "function"))); + } + else + { + functionobject$cacheablefunction = FunctionObject.CacheableFunction.EMPTY; + } + + return new AdvancementRewards(i, aresourcelocation, aresourcelocation1, functionobject$cacheablefunction); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementTreeNode.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementTreeNode.java new file mode 100644 index 0000000..5df4a60 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/AdvancementTreeNode.java @@ -0,0 +1,286 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; + +public class AdvancementTreeNode +{ + private final Advancement advancement; + private final AdvancementTreeNode parent; + private final AdvancementTreeNode sibling; + private final int index; + private final List children = Lists.newArrayList(); + private AdvancementTreeNode ancestor; + private AdvancementTreeNode thread; + private int x; + private float y; + private float mod; + private float change; + private float shift; + + public AdvancementTreeNode(Advancement advancementIn, @Nullable AdvancementTreeNode parentIn, @Nullable AdvancementTreeNode siblingIn, int indexIn, int xIn) + { + if (advancementIn.getDisplay() == null) + { + throw new IllegalArgumentException("Can't position an invisible advancement!"); + } + else + { + this.advancement = advancementIn; + this.parent = parentIn; + this.sibling = siblingIn; + this.index = indexIn; + this.ancestor = this; + this.x = xIn; + this.y = -1.0F; + AdvancementTreeNode advancementtreenode = null; + + for (Advancement advancement : advancementIn.getChildren()) + { + advancementtreenode = this.buildSubTree(advancement, advancementtreenode); + } + } + } + + @Nullable + private AdvancementTreeNode buildSubTree(Advancement advancementIn, @Nullable AdvancementTreeNode previous) + { + if (advancementIn.getDisplay() != null) + { + previous = new AdvancementTreeNode(advancementIn, this, previous, this.children.size() + 1, this.x + 1); + this.children.add(previous); + } + else + { + for (Advancement advancement : advancementIn.getChildren()) + { + previous = this.buildSubTree(advancement, previous); + } + } + + return previous; + } + + private void firstWalk() + { + if (this.children.isEmpty()) + { + if (this.sibling != null) + { + this.y = this.sibling.y + 1.0F; + } + else + { + this.y = 0.0F; + } + } + else + { + AdvancementTreeNode advancementtreenode = null; + + for (AdvancementTreeNode advancementtreenode1 : this.children) + { + advancementtreenode1.firstWalk(); + advancementtreenode = advancementtreenode1.apportion(advancementtreenode == null ? advancementtreenode1 : advancementtreenode); + } + + this.executeShifts(); + float f = ((this.children.get(0)).y + (this.children.get(this.children.size() - 1)).y) / 2.0F; + + if (this.sibling != null) + { + this.y = this.sibling.y + 1.0F; + this.mod = this.y - f; + } + else + { + this.y = f; + } + } + } + + private float secondWalk(float p_192319_1_, int p_192319_2_, float p_192319_3_) + { + this.y += p_192319_1_; + this.x = p_192319_2_; + + if (this.y < p_192319_3_) + { + p_192319_3_ = this.y; + } + + for (AdvancementTreeNode advancementtreenode : this.children) + { + p_192319_3_ = advancementtreenode.secondWalk(p_192319_1_ + this.mod, p_192319_2_ + 1, p_192319_3_); + } + + return p_192319_3_; + } + + private void thirdWalk(float yIn) + { + this.y += yIn; + + for (AdvancementTreeNode advancementtreenode : this.children) + { + advancementtreenode.thirdWalk(yIn); + } + } + + private void executeShifts() + { + float f = 0.0F; + float f1 = 0.0F; + + for (int i = this.children.size() - 1; i >= 0; --i) + { + AdvancementTreeNode advancementtreenode = this.children.get(i); + advancementtreenode.y += f; + advancementtreenode.mod += f; + f1 += advancementtreenode.change; + f += advancementtreenode.shift + f1; + } + } + + @Nullable + private AdvancementTreeNode getFirstChild() + { + if (this.thread != null) + { + return this.thread; + } + else + { + return !this.children.isEmpty() ? (AdvancementTreeNode)this.children.get(0) : null; + } + } + + @Nullable + private AdvancementTreeNode getLastChild() + { + if (this.thread != null) + { + return this.thread; + } + else + { + return !this.children.isEmpty() ? (AdvancementTreeNode)this.children.get(this.children.size() - 1) : null; + } + } + + private AdvancementTreeNode apportion(AdvancementTreeNode nodeIn) + { + if (this.sibling == null) + { + return nodeIn; + } + else + { + AdvancementTreeNode advancementtreenode = this; + AdvancementTreeNode advancementtreenode1 = this; + AdvancementTreeNode advancementtreenode2 = this.sibling; + AdvancementTreeNode advancementtreenode3 = this.parent.children.get(0); + float f = this.mod; + float f1 = this.mod; + float f2 = advancementtreenode2.mod; + float f3; + + for (f3 = advancementtreenode3.mod; advancementtreenode2.getLastChild() != null && advancementtreenode.getFirstChild() != null; f1 += advancementtreenode1.mod) + { + advancementtreenode2 = advancementtreenode2.getLastChild(); + advancementtreenode = advancementtreenode.getFirstChild(); + advancementtreenode3 = advancementtreenode3.getFirstChild(); + advancementtreenode1 = advancementtreenode1.getLastChild(); + advancementtreenode1.ancestor = this; + float f4 = advancementtreenode2.y + f2 - (advancementtreenode.y + f) + 1.0F; + + if (f4 > 0.0F) + { + advancementtreenode2.getAncestor(this, nodeIn).moveSubtree(this, f4); + f += f4; + f1 += f4; + } + + f2 += advancementtreenode2.mod; + f += advancementtreenode.mod; + f3 += advancementtreenode3.mod; + } + + if (advancementtreenode2.getLastChild() != null && advancementtreenode1.getLastChild() == null) + { + advancementtreenode1.thread = advancementtreenode2.getLastChild(); + advancementtreenode1.mod += f2 - f1; + } + else + { + if (advancementtreenode.getFirstChild() != null && advancementtreenode3.getFirstChild() == null) + { + advancementtreenode3.thread = advancementtreenode.getFirstChild(); + advancementtreenode3.mod += f - f3; + } + + nodeIn = this; + } + + return nodeIn; + } + } + + private void moveSubtree(AdvancementTreeNode nodeIn, float p_192316_2_) + { + float f = (float)(nodeIn.index - this.index); + + if (f != 0.0F) + { + nodeIn.change -= p_192316_2_ / f; + this.change += p_192316_2_ / f; + } + + nodeIn.shift += p_192316_2_; + nodeIn.y += p_192316_2_; + nodeIn.mod += p_192316_2_; + } + + private AdvancementTreeNode getAncestor(AdvancementTreeNode p_192326_1_, AdvancementTreeNode p_192326_2_) + { + return this.ancestor != null && p_192326_1_.parent.children.contains(this.ancestor) ? this.ancestor : p_192326_2_; + } + + private void updatePosition() + { + if (this.advancement.getDisplay() != null) + { + this.advancement.getDisplay().setPosition((float)this.x, this.y); + } + + if (!this.children.isEmpty()) + { + for (AdvancementTreeNode advancementtreenode : this.children) + { + advancementtreenode.updatePosition(); + } + } + } + + public static void layout(Advancement root) + { + if (root.getDisplay() == null) + { + throw new IllegalArgumentException("Can't position children of an invisible root!"); + } + else + { + AdvancementTreeNode advancementtreenode = new AdvancementTreeNode(root, (AdvancementTreeNode)null, (AdvancementTreeNode)null, 1, 0); + advancementtreenode.firstWalk(); + float f = advancementtreenode.secondWalk(0.0F, 0, advancementtreenode.y); + + if (f < 0.0F) + { + advancementtreenode.thirdWalk(-f); + } + + advancementtreenode.updatePosition(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/CriteriaTriggers.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/CriteriaTriggers.java new file mode 100644 index 0000000..e5cb7b2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/CriteriaTriggers.java @@ -0,0 +1,89 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.advancements.critereon.BredAnimalsTrigger; +import net.minecraft.advancements.critereon.BrewedPotionTrigger; +import net.minecraft.advancements.critereon.ChangeDimensionTrigger; +import net.minecraft.advancements.critereon.ConstructBeaconTrigger; +import net.minecraft.advancements.critereon.ConsumeItemTrigger; +import net.minecraft.advancements.critereon.CuredZombieVillagerTrigger; +import net.minecraft.advancements.critereon.EffectsChangedTrigger; +import net.minecraft.advancements.critereon.EnchantedItemTrigger; +import net.minecraft.advancements.critereon.EnterBlockTrigger; +import net.minecraft.advancements.critereon.EntityHurtPlayerTrigger; +import net.minecraft.advancements.critereon.ImpossibleTrigger; +import net.minecraft.advancements.critereon.InventoryChangeTrigger; +import net.minecraft.advancements.critereon.ItemDurabilityTrigger; +import net.minecraft.advancements.critereon.KilledTrigger; +import net.minecraft.advancements.critereon.LevitationTrigger; +import net.minecraft.advancements.critereon.NetherTravelTrigger; +import net.minecraft.advancements.critereon.PlacedBlockTrigger; +import net.minecraft.advancements.critereon.PlayerHurtEntityTrigger; +import net.minecraft.advancements.critereon.PositionTrigger; +import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; +import net.minecraft.advancements.critereon.SummonedEntityTrigger; +import net.minecraft.advancements.critereon.TameAnimalTrigger; +import net.minecraft.advancements.critereon.TickTrigger; +import net.minecraft.advancements.critereon.UsedEnderEyeTrigger; +import net.minecraft.advancements.critereon.UsedTotemTrigger; +import net.minecraft.advancements.critereon.VillagerTradeTrigger; +import net.minecraft.util.ResourceLocation; + +public class CriteriaTriggers +{ + private static final Map < ResourceLocation, ICriterionTrigger> REGISTRY = Maps. < ResourceLocation, ICriterionTrigger> newHashMap(); + public static final ImpossibleTrigger IMPOSSIBLE = (ImpossibleTrigger)register(new ImpossibleTrigger()); + public static final KilledTrigger PLAYER_KILLED_ENTITY = (KilledTrigger)register(new KilledTrigger(new ResourceLocation("player_killed_entity"))); + public static final KilledTrigger ENTITY_KILLED_PLAYER = (KilledTrigger)register(new KilledTrigger(new ResourceLocation("entity_killed_player"))); + public static final EnterBlockTrigger ENTER_BLOCK = (EnterBlockTrigger)register(new EnterBlockTrigger()); + public static final InventoryChangeTrigger INVENTORY_CHANGED = (InventoryChangeTrigger)register(new InventoryChangeTrigger()); + public static final RecipeUnlockedTrigger RECIPE_UNLOCKED = (RecipeUnlockedTrigger)register(new RecipeUnlockedTrigger()); + public static final PlayerHurtEntityTrigger PLAYER_HURT_ENTITY = (PlayerHurtEntityTrigger)register(new PlayerHurtEntityTrigger()); + public static final EntityHurtPlayerTrigger ENTITY_HURT_PLAYER = (EntityHurtPlayerTrigger)register(new EntityHurtPlayerTrigger()); + public static final EnchantedItemTrigger ENCHANTED_ITEM = (EnchantedItemTrigger)register(new EnchantedItemTrigger()); + public static final BrewedPotionTrigger BREWED_POTION = (BrewedPotionTrigger)register(new BrewedPotionTrigger()); + public static final ConstructBeaconTrigger CONSTRUCT_BEACON = (ConstructBeaconTrigger)register(new ConstructBeaconTrigger()); + public static final UsedEnderEyeTrigger USED_ENDER_EYE = (UsedEnderEyeTrigger)register(new UsedEnderEyeTrigger()); + public static final SummonedEntityTrigger SUMMONED_ENTITY = (SummonedEntityTrigger)register(new SummonedEntityTrigger()); + public static final BredAnimalsTrigger BRED_ANIMALS = (BredAnimalsTrigger)register(new BredAnimalsTrigger()); + public static final PositionTrigger LOCATION = (PositionTrigger)register(new PositionTrigger(new ResourceLocation("location"))); + public static final PositionTrigger SLEPT_IN_BED = (PositionTrigger)register(new PositionTrigger(new ResourceLocation("slept_in_bed"))); + public static final CuredZombieVillagerTrigger CURED_ZOMBIE_VILLAGER = (CuredZombieVillagerTrigger)register(new CuredZombieVillagerTrigger()); + public static final VillagerTradeTrigger VILLAGER_TRADE = (VillagerTradeTrigger)register(new VillagerTradeTrigger()); + public static final ItemDurabilityTrigger ITEM_DURABILITY_CHANGED = (ItemDurabilityTrigger)register(new ItemDurabilityTrigger()); + public static final LevitationTrigger LEVITATION = (LevitationTrigger)register(new LevitationTrigger()); + public static final ChangeDimensionTrigger CHANGED_DIMENSION = (ChangeDimensionTrigger)register(new ChangeDimensionTrigger()); + public static final TickTrigger TICK = (TickTrigger)register(new TickTrigger()); + public static final TameAnimalTrigger TAME_ANIMAL = (TameAnimalTrigger)register(new TameAnimalTrigger()); + public static final PlacedBlockTrigger PLACED_BLOCK = (PlacedBlockTrigger)register(new PlacedBlockTrigger()); + public static final ConsumeItemTrigger CONSUME_ITEM = (ConsumeItemTrigger)register(new ConsumeItemTrigger()); + public static final EffectsChangedTrigger EFFECTS_CHANGED = (EffectsChangedTrigger)register(new EffectsChangedTrigger()); + public static final UsedTotemTrigger USED_TOTEM = (UsedTotemTrigger)register(new UsedTotemTrigger()); + public static final NetherTravelTrigger NETHER_TRAVEL = (NetherTravelTrigger)register(new NetherTravelTrigger()); + + public static T register(T criterion) + { + if (REGISTRY.containsKey(criterion.getId())) + { + throw new IllegalArgumentException("Duplicate criterion id " + criterion.getId()); + } + else + { + REGISTRY.put(criterion.getId(), criterion); + return criterion; + } + } + + @Nullable + public static ICriterionTrigger get(ResourceLocation id) + { + return (ICriterionTrigger)REGISTRY.get(id); + } + + public static Iterable > getAll() + { + return REGISTRY.values(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/Criterion.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/Criterion.java new file mode 100644 index 0000000..fb7406f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/Criterion.java @@ -0,0 +1,134 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Maps; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class Criterion +{ + private final ICriterionInstance criterionInstance; + + public Criterion(ICriterionInstance p_i47470_1_) + { + this.criterionInstance = p_i47470_1_; + } + + public Criterion() + { + this.criterionInstance = null; + } + + public void serializeToNetwork(PacketBuffer p_192140_1_) + { + } + + /** + * Deserialize a single {@code Criterion} from {@code json}. The {@link ICriterionTrigger} is chosen by the + * {@code "trigger"} property of the object, which can then handle the optional {@code "conditions"} in the object. + * The {@code "conditions"}, if present, must be a {@code JsonObject}. The resulting {@link ICriterionInstance} is + * wrapped in a {@code Criterion}. + * + * @return the deserialized {@code Criterion}. + * @see ICriterionTrigger#deserializeInstance(JsonObject, JsonDeserializationContext) + * + * @param json the {@code JsonObject} to deserialize from + * @param context the {@code JsonDeserializationContext} to deserialize in + */ + public static Criterion criterionFromJson(JsonObject json, JsonDeserializationContext context) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(json, "trigger")); + ICriterionTrigger icriteriontrigger = CriteriaTriggers.get(resourcelocation); + + if (icriteriontrigger == null) + { + throw new JsonSyntaxException("Invalid criterion trigger: " + resourcelocation); + } + else + { + ICriterionInstance icriterioninstance = icriteriontrigger.deserializeInstance(JsonUtils.getJsonObject(json, "conditions", new JsonObject()), context); + return new Criterion(icriterioninstance); + } + } + + public static Criterion criterionFromNetwork(PacketBuffer p_192146_0_) + { + return new Criterion(); + } + + /** + * Read criteria from {@code json}. The keys of the object name the criteria, and the values (which must be objects) + * are the criteria themselves. + * + * @return the deserialized criteria. Each key-value pair consists of a {@code Criterion} and its name. + * @see #criterionFromJson(JsonObject, JsonDeserializationContext) + * + * @param json the {@code JsonObject} to deserialize from + * @param context the {@code JsonDeserializationContext} to deserialize in + */ + public static Map criteriaFromJson(JsonObject json, JsonDeserializationContext context) + { + Map map = Maps.newHashMap(); + + for (Entry entry : json.entrySet()) + { + map.put(entry.getKey(), criterionFromJson(JsonUtils.getJsonObject(entry.getValue(), "criterion"), context)); + } + + return map; + } + + /** + * Read criteria from {@code buf}. + * + * @return the read criteria. Each key-value pair consists of a {@code Criterion} and its name. + * @see #serializeToNetwork(Map, PacketBuffer) + * + * @param bus the {@code PacketBuffer} to read from + */ + public static Map criteriaFromNetwork(PacketBuffer bus) + { + Map map = Maps.newHashMap(); + int i = bus.readVarInt(); + + for (int j = 0; j < i; ++j) + { + map.put(bus.readString(32767), criterionFromNetwork(bus)); + } + + return map; + } + + /** + * Write {@code criteria} to {@code buf}. + * + * @see #criteriaFromNetwork(PacketBuffer) + * + * @param criteria the criteria to write to {@code buf}. Each key-value pair consists of a {@code Criterion} and its + * name. + * @param buf the {@code PacketBuffer} to write to + */ + public static void serializeToNetwork(Map criteria, PacketBuffer buf) + { + buf.writeVarInt(criteria.size()); + + for (Entry entry : criteria.entrySet()) + { + buf.writeString(entry.getKey()); + ((Criterion)entry.getValue()).serializeToNetwork(buf); + } + } + + @Nullable + public ICriterionInstance getCriterionInstance() + { + return this.criterionInstance; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/CriterionProgress.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/CriterionProgress.java new file mode 100644 index 0000000..486d862 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/CriterionProgress.java @@ -0,0 +1,89 @@ +package net.minecraft.advancements; + +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import net.minecraft.network.PacketBuffer; + +public class CriterionProgress +{ + private static final SimpleDateFormat DATE_TIME_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); + private final AdvancementProgress advancementProgress; + private Date obtained; + + public CriterionProgress(AdvancementProgress advancementProgressIn) + { + this.advancementProgress = advancementProgressIn; + } + + public boolean isObtained() + { + return this.obtained != null; + } + + public void obtain() + { + this.obtained = new Date(); + } + + public void reset() + { + this.obtained = null; + } + + public Date getObtained() + { + return this.obtained; + } + + public String toString() + { + return "CriterionProgress{obtained=" + (this.obtained == null ? "false" : this.obtained) + '}'; + } + + public void write(PacketBuffer buf) + { + buf.writeBoolean(this.obtained != null); + + if (this.obtained != null) + { + buf.writeTime(this.obtained); + } + } + + public JsonElement serialize() + { + return (JsonElement)(this.obtained != null ? new JsonPrimitive(DATE_TIME_FORMATTER.format(this.obtained)) : JsonNull.INSTANCE); + } + + public static CriterionProgress read(PacketBuffer buf, AdvancementProgress advancementProgressIn) + { + CriterionProgress criterionprogress = new CriterionProgress(advancementProgressIn); + + if (buf.readBoolean()) + { + criterionprogress.obtained = buf.readTime(); + } + + return criterionprogress; + } + + public static CriterionProgress fromDateTime(AdvancementProgress advancementProgressIn, String dateTime) + { + CriterionProgress criterionprogress = new CriterionProgress(advancementProgressIn); + + try + { + criterionprogress.obtained = DATE_TIME_FORMATTER.parse(dateTime); + return criterionprogress; + } + catch (ParseException parseexception) + { + throw new JsonSyntaxException("Invalid datetime: " + dateTime, parseexception); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/DisplayInfo.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/DisplayInfo.java new file mode 100644 index 0000000..76b01b0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/DisplayInfo.java @@ -0,0 +1,189 @@ +package net.minecraft.advancements; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class DisplayInfo +{ + private final ITextComponent title; + private final ITextComponent description; + private final ItemStack icon; + private final ResourceLocation background; + private final FrameType frame; + private final boolean showToast; + private final boolean announceToChat; + private final boolean hidden; + private float x; + private float y; + + public DisplayInfo(ItemStack icon, ITextComponent title, ITextComponent description, @Nullable ResourceLocation background, FrameType frame, boolean showToast, boolean announceToChat, boolean hidden) + { + this.title = title; + this.description = description; + this.icon = icon; + this.background = background; + this.frame = frame; + this.showToast = showToast; + this.announceToChat = announceToChat; + this.hidden = hidden; + } + + public void setPosition(float x, float y) + { + this.x = x; + this.y = y; + } + + public ITextComponent getTitle() + { + return this.title; + } + + public ITextComponent getDescription() + { + return this.description; + } + + @SideOnly(Side.CLIENT) + public ItemStack getIcon() + { + return this.icon; + } + + @Nullable + @SideOnly(Side.CLIENT) + public ResourceLocation getBackground() + { + return this.background; + } + + public FrameType getFrame() + { + return this.frame; + } + + @SideOnly(Side.CLIENT) + public float getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public float getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public boolean shouldShowToast() + { + return this.showToast; + } + + public boolean shouldAnnounceToChat() + { + return this.announceToChat; + } + + public boolean isHidden() + { + return this.hidden; + } + + public static DisplayInfo deserialize(JsonObject object, JsonDeserializationContext context) + { + ITextComponent itextcomponent = (ITextComponent)JsonUtils.deserializeClass(object, "title", context, ITextComponent.class); + ITextComponent itextcomponent1 = (ITextComponent)JsonUtils.deserializeClass(object, "description", context, ITextComponent.class); + + if (itextcomponent != null && itextcomponent1 != null) + { + ItemStack itemstack = deserializeIcon(JsonUtils.getJsonObject(object, "icon")); + ResourceLocation resourcelocation = object.has("background") ? new ResourceLocation(JsonUtils.getString(object, "background")) : null; + FrameType frametype = object.has("frame") ? FrameType.byName(JsonUtils.getString(object, "frame")) : FrameType.TASK; + boolean flag = JsonUtils.getBoolean(object, "show_toast", true); + boolean flag1 = JsonUtils.getBoolean(object, "announce_to_chat", true); + boolean flag2 = JsonUtils.getBoolean(object, "hidden", false); + return new DisplayInfo(itemstack, itextcomponent, itextcomponent1, resourcelocation, frametype, flag, flag1, flag2); + } + else + { + throw new JsonSyntaxException("Both title and description must be set"); + } + } + + private static ItemStack deserializeIcon(JsonObject object) + { + if (!object.has("item")) + { + throw new JsonSyntaxException("Unsupported icon type, currently only items are supported (add 'item' key)"); + } + else + { + Item item = JsonUtils.getItem(object, "item"); + int i = JsonUtils.getInt(object, "data", 0); + ItemStack ret = new ItemStack(item, 1, i); + ret.setTagCompound(net.minecraftforge.common.util.JsonUtils.readNBT(object, "nbt")); + return ret; + } + } + + public void write(PacketBuffer buf) + { + buf.writeTextComponent(this.title); + buf.writeTextComponent(this.description); + buf.writeItemStack(this.icon); + buf.writeEnumValue(this.frame); + int i = 0; + + if (this.background != null) + { + i |= 1; + } + + if (this.showToast) + { + i |= 2; + } + + if (this.hidden) + { + i |= 4; + } + + buf.writeInt(i); + + if (this.background != null) + { + buf.writeResourceLocation(this.background); + } + + buf.writeFloat(this.x); + buf.writeFloat(this.y); + } + + public static DisplayInfo read(PacketBuffer buf) throws IOException + { + ITextComponent itextcomponent = buf.readTextComponent(); + ITextComponent itextcomponent1 = buf.readTextComponent(); + ItemStack itemstack = buf.readItemStack(); + FrameType frametype = (FrameType)buf.readEnumValue(FrameType.class); + int i = buf.readInt(); + ResourceLocation resourcelocation = (i & 1) != 0 ? buf.readResourceLocation() : null; + boolean flag = (i & 2) != 0; + boolean flag1 = (i & 4) != 0; + DisplayInfo displayinfo = new DisplayInfo(itemstack, itextcomponent, itextcomponent1, resourcelocation, frametype, flag, false, flag1); + displayinfo.setPosition(buf.readFloat(), buf.readFloat()); + return displayinfo; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/FrameType.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/FrameType.java new file mode 100644 index 0000000..b375f93 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/FrameType.java @@ -0,0 +1,52 @@ +package net.minecraft.advancements; + +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public enum FrameType +{ + TASK("task", 0, TextFormatting.GREEN), + CHALLENGE("challenge", 26, TextFormatting.DARK_PURPLE), + GOAL("goal", 52, TextFormatting.GREEN); + + private final String name; + private final int icon; + private final TextFormatting format; + + private FrameType(String nameIn, int iconIn, TextFormatting formatIn) + { + this.name = nameIn; + this.icon = iconIn; + this.format = formatIn; + } + + public String getName() + { + return this.name; + } + + public static FrameType byName(String nameIn) + { + for (FrameType frametype : values()) + { + if (frametype.name.equals(nameIn)) + { + return frametype; + } + } + + throw new IllegalArgumentException("Unknown frame type '" + nameIn + "'"); + } + + @SideOnly(Side.CLIENT) + public int getIcon() + { + return this.icon; + } + + public TextFormatting getFormat() + { + return this.format; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/FunctionManager.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/FunctionManager.java new file mode 100644 index 0000000..70a0dfc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/FunctionManager.java @@ -0,0 +1,233 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.ArrayDeque; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.command.FunctionObject; +import net.minecraft.command.ICommandManager; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ITickable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class FunctionManager implements ITickable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final File functionDir; + private final MinecraftServer server; + private final Map functions = Maps.newHashMap(); + private String currentGameLoopFunctionId = "-"; + private FunctionObject gameLoopFunction; + private final ArrayDeque commandQueue = new ArrayDeque(); + private boolean isExecuting = false; + private final ICommandSender gameLoopFunctionSender = new ICommandSender() + { + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return FunctionManager.this.currentGameLoopFunctionId; + } + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return permLevel <= 2; + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, + * return the overworld + */ + public World getEntityWorld() + { + return FunctionManager.this.server.worlds[0]; + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return FunctionManager.this.server; + } + }; + + public FunctionManager(@Nullable File functionDirIn, MinecraftServer serverIn) + { + this.functionDir = functionDirIn; + this.server = serverIn; + this.reload(); + } + + @Nullable + public FunctionObject getFunction(ResourceLocation id) + { + return this.functions.get(id); + } + + public ICommandManager getCommandManager() + { + return this.server.getCommandManager(); + } + + public int getMaxCommandChainLength() + { + return this.server.worlds[0].getGameRules().getInt("maxCommandChainLength"); + } + + public Map getFunctions() + { + return this.functions; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + String s = this.server.worlds[0].getGameRules().getString("gameLoopFunction"); + + if (!s.equals(this.currentGameLoopFunctionId)) + { + this.currentGameLoopFunctionId = s; + this.gameLoopFunction = this.getFunction(new ResourceLocation(s)); + } + + if (this.gameLoopFunction != null) + { + this.execute(this.gameLoopFunction, this.gameLoopFunctionSender); + } + } + + public int execute(FunctionObject function, ICommandSender sender) + { + int i = this.getMaxCommandChainLength(); + + if (this.isExecuting) + { + if (this.commandQueue.size() < i) + { + this.commandQueue.addFirst(new FunctionManager.QueuedCommand(this, sender, new FunctionObject.FunctionEntry(function))); + } + + return 0; + } + else + { + int l; + + try + { + this.isExecuting = true; + int j = 0; + FunctionObject.Entry[] afunctionobject$entry = function.getEntries(); + + for (int k = afunctionobject$entry.length - 1; k >= 0; --k) + { + this.commandQueue.push(new FunctionManager.QueuedCommand(this, sender, afunctionobject$entry[k])); + } + + while (true) + { + if (this.commandQueue.isEmpty()) + { + l = j; + return l; + } + + (this.commandQueue.removeFirst()).execute(this.commandQueue, i); + ++j; + + if (j >= i) + { + break; + } + } + + l = j; + } + finally + { + this.commandQueue.clear(); + this.isExecuting = false; + } + + return l; + } + } + + public void reload() + { + this.functions.clear(); + this.gameLoopFunction = null; + this.currentGameLoopFunctionId = "-"; + this.loadFunctions(); + } + + private void loadFunctions() + { + if (this.functionDir != null) + { + this.functionDir.mkdirs(); + + for (File file1 : FileUtils.listFiles(this.functionDir, new String[] {"mcfunction"}, true)) + { + String s = FilenameUtils.removeExtension(this.functionDir.toURI().relativize(file1.toURI()).toString()); + String[] astring = s.split("/", 2); + + if (astring.length == 2) + { + ResourceLocation resourcelocation = new ResourceLocation(astring[0], astring[1]); + + try + { + this.functions.put(resourcelocation, FunctionObject.create(this, Files.readLines(file1, StandardCharsets.UTF_8))); + } + catch (Throwable throwable) + { + LOGGER.error("Couldn't read custom function " + resourcelocation + " from " + file1, throwable); + } + } + } + + if (!this.functions.isEmpty()) + { + LOGGER.info("Loaded " + this.functions.size() + " custom command functions"); + } + } + } + + public static class QueuedCommand + { + private final FunctionManager functionManager; + private final ICommandSender sender; + private final FunctionObject.Entry entry; + + public QueuedCommand(FunctionManager functionManagerIn, ICommandSender senderIn, FunctionObject.Entry entryIn) + { + this.functionManager = functionManagerIn; + this.sender = senderIn; + this.entry = entryIn; + } + + public void execute(ArrayDeque commandQueue, int maxCommandChainLength) + { + this.entry.execute(this.functionManager, this.sender, commandQueue, maxCommandChainLength); + } + + public String toString() + { + return this.entry.toString(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/ICriterionInstance.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/ICriterionInstance.java new file mode 100644 index 0000000..32fd32c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/ICriterionInstance.java @@ -0,0 +1,8 @@ +package net.minecraft.advancements; + +import net.minecraft.util.ResourceLocation; + +public interface ICriterionInstance +{ + ResourceLocation getId(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/ICriterionTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/ICriterionTrigger.java new file mode 100644 index 0000000..2c39393 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/ICriterionTrigger.java @@ -0,0 +1,78 @@ +package net.minecraft.advancements; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import net.minecraft.util.ResourceLocation; + +public interface ICriterionTrigger +{ + ResourceLocation getId(); + + void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener); + + void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener); + + void removeAllListeners(PlayerAdvancements playerAdvancementsIn); + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + T deserializeInstance(JsonObject json, JsonDeserializationContext context); + + public static class Listener + { + private final T criterionInstance; + private final Advancement advancement; + private final String criterionName; + + public Listener(T criterionInstanceIn, Advancement advancementIn, String criterionNameIn) + { + this.criterionInstance = criterionInstanceIn; + this.advancement = advancementIn; + this.criterionName = criterionNameIn; + } + + public T getCriterionInstance() + { + return this.criterionInstance; + } + + public void grantCriterion(PlayerAdvancements playerAdvancementsIn) + { + playerAdvancementsIn.grantCriterion(this.advancement, this.criterionName); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + ICriterionTrigger.Listener listener = (ICriterionTrigger.Listener)p_equals_1_; + + if (!this.criterionInstance.equals(listener.criterionInstance)) + { + return false; + } + else + { + return !this.advancement.equals(listener.advancement) ? false : this.criterionName.equals(listener.criterionName); + } + } + else + { + return false; + } + } + + public int hashCode() + { + int i = this.criterionInstance.hashCode(); + i = 31 * i + this.advancement.hashCode(); + i = 31 * i + this.criterionName.hashCode(); + return i; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/PlayerAdvancements.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/PlayerAdvancements.java new file mode 100644 index 0000000..90f0bd2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/PlayerAdvancements.java @@ -0,0 +1,468 @@ +package net.minecraft.advancements; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonParseException; +import com.google.gson.reflect.TypeToken; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketAdvancementInfo; +import net.minecraft.network.play.server.SPacketSelectAdvancementsTab; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextComponentTranslation; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PlayerAdvancements +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Gson GSON = (new GsonBuilder()).registerTypeAdapter(AdvancementProgress.class, new AdvancementProgress.Serializer()).registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).setPrettyPrinting().create(); + private static final TypeToken> MAP_TOKEN = new TypeToken>() + { + }; + private final MinecraftServer server; + private final File progressFile; + private final Map progress = Maps.newLinkedHashMap(); + private final Set visible = Sets.newLinkedHashSet(); + private final Set visibilityChanged = Sets.newLinkedHashSet(); + private final Set progressChanged = Sets.newLinkedHashSet(); + private EntityPlayerMP player; + @Nullable + private Advancement lastSelectedTab; + private boolean isFirstPacket = true; + + public PlayerAdvancements(MinecraftServer server, File p_i47422_2_, EntityPlayerMP player) + { + this.server = server; + this.progressFile = p_i47422_2_; + this.player = player; + this.load(); + } + + public void setPlayer(EntityPlayerMP player) + { + this.player = player; + } + + public void dispose() + { + for (ICriterionTrigger icriteriontrigger : CriteriaTriggers.getAll()) + { + icriteriontrigger.removeAllListeners(this); + } + } + + public void reload() + { + this.dispose(); + this.progress.clear(); + this.visible.clear(); + this.visibilityChanged.clear(); + this.progressChanged.clear(); + this.isFirstPacket = true; + this.lastSelectedTab = null; + this.load(); + } + + private void registerListeners() + { + for (Advancement advancement : this.server.getAdvancementManager().getAdvancements()) + { + this.registerListeners(advancement); + } + } + + private void ensureAllVisible() + { + List list = Lists.newArrayList(); + + for (Entry entry : this.progress.entrySet()) + { + if (((AdvancementProgress)entry.getValue()).isDone()) + { + list.add(entry.getKey()); + this.progressChanged.add(entry.getKey()); + } + } + + for (Advancement advancement : list) + { + this.ensureVisibility(advancement); + } + } + + private void checkForAutomaticTriggers() + { + for (Advancement advancement : this.server.getAdvancementManager().getAdvancements()) + { + if (advancement.getCriteria().isEmpty()) + { + this.grantCriterion(advancement, ""); + advancement.getRewards().apply(this.player); + } + } + } + + private void load() + { + if (this.progressFile.isFile()) + { + try + { + String s = Files.toString(this.progressFile, StandardCharsets.UTF_8); + Map map = (Map)JsonUtils.gsonDeserialize(GSON, s, MAP_TOKEN.getType()); + + if (map == null) + { + throw new JsonParseException("Found null for advancements"); + } + + Stream> stream = map.entrySet().stream().sorted(Comparator.comparing(Entry::getValue)); + + for (Entry entry : stream.collect(Collectors.toList())) + { + Advancement advancement = this.server.getAdvancementManager().getAdvancement(entry.getKey()); + + if (advancement == null) + { + LOGGER.warn("Ignored advancement '" + entry.getKey() + "' in progress file " + this.progressFile + " - it doesn't exist anymore?"); + } + else + { + this.startProgress(advancement, entry.getValue()); + } + } + } + catch (JsonParseException jsonparseexception) + { + LOGGER.error("Couldn't parse player advancements in " + this.progressFile, (Throwable)jsonparseexception); + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't access player advancements in " + this.progressFile, (Throwable)ioexception); + } + } + + this.checkForAutomaticTriggers(); + this.ensureAllVisible(); + this.registerListeners(); + } + + public void save() + { + Map map = Maps.newHashMap(); + + for (Entry entry : this.progress.entrySet()) + { + AdvancementProgress advancementprogress = entry.getValue(); + + if (advancementprogress.hasProgress()) + { + map.put(((Advancement)entry.getKey()).getId(), advancementprogress); + } + } + + if (this.progressFile.getParentFile() != null) + { + this.progressFile.getParentFile().mkdirs(); + } + + try + { + Files.write(GSON.toJson(map), this.progressFile, StandardCharsets.UTF_8); + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't save player advancements to " + this.progressFile, (Throwable)ioexception); + } + } + + public boolean grantCriterion(Advancement p_192750_1_, String p_192750_2_) + { + // Forge: don't grant advancements for fake players + if (this.player instanceof net.minecraftforge.common.util.FakePlayer) return false; + + boolean flag = false; + AdvancementProgress advancementprogress = this.getProgress(p_192750_1_); + boolean flag1 = advancementprogress.isDone(); + + if (advancementprogress.grantCriterion(p_192750_2_)) + { + this.unregisterListeners(p_192750_1_); + this.progressChanged.add(p_192750_1_); + flag = true; + + if (!flag1 && advancementprogress.isDone()) + { + p_192750_1_.getRewards().apply(this.player); + + if (p_192750_1_.getDisplay() != null && p_192750_1_.getDisplay().shouldAnnounceToChat() && this.player.world.getGameRules().getBoolean("announceAdvancements")) + { + this.server.getPlayerList().sendMessage(new TextComponentTranslation("chat.type.advancement." + p_192750_1_.getDisplay().getFrame().getName(), new Object[] {this.player.getDisplayName(), p_192750_1_.getDisplayText()})); + } + + net.minecraftforge.common.ForgeHooks.onAdvancement(this.player, p_192750_1_); + } + } + + if (advancementprogress.isDone()) + { + this.ensureVisibility(p_192750_1_); + } + + return flag; + } + + public boolean revokeCriterion(Advancement p_192744_1_, String p_192744_2_) + { + boolean flag = false; + AdvancementProgress advancementprogress = this.getProgress(p_192744_1_); + + if (advancementprogress.revokeCriterion(p_192744_2_)) + { + this.registerListeners(p_192744_1_); + this.progressChanged.add(p_192744_1_); + flag = true; + } + + if (!advancementprogress.hasProgress()) + { + this.ensureVisibility(p_192744_1_); + } + + return flag; + } + + private void registerListeners(Advancement p_193764_1_) + { + AdvancementProgress advancementprogress = this.getProgress(p_193764_1_); + + if (!advancementprogress.isDone()) + { + for (Entry entry : p_193764_1_.getCriteria().entrySet()) + { + CriterionProgress criterionprogress = advancementprogress.getCriterionProgress(entry.getKey()); + + if (criterionprogress != null && !criterionprogress.isObtained()) + { + ICriterionInstance icriterioninstance = ((Criterion)entry.getValue()).getCriterionInstance(); + + if (icriterioninstance != null) + { + ICriterionTrigger icriteriontrigger = CriteriaTriggers.get(icriterioninstance.getId()); + + if (icriteriontrigger != null) + { + icriteriontrigger.addListener(this, new ICriterionTrigger.Listener(icriterioninstance, p_193764_1_, entry.getKey())); + } + } + } + } + } + } + + private void unregisterListeners(Advancement p_193765_1_) + { + AdvancementProgress advancementprogress = this.getProgress(p_193765_1_); + + for (Entry entry : p_193765_1_.getCriteria().entrySet()) + { + CriterionProgress criterionprogress = advancementprogress.getCriterionProgress(entry.getKey()); + + if (criterionprogress != null && (criterionprogress.isObtained() || advancementprogress.isDone())) + { + ICriterionInstance icriterioninstance = ((Criterion)entry.getValue()).getCriterionInstance(); + + if (icriterioninstance != null) + { + ICriterionTrigger icriteriontrigger = CriteriaTriggers.get(icriterioninstance.getId()); + + if (icriteriontrigger != null) + { + icriteriontrigger.removeListener(this, new ICriterionTrigger.Listener(icriterioninstance, p_193765_1_, entry.getKey())); + } + } + } + } + } + + public void flushDirty(EntityPlayerMP p_192741_1_) + { + if (!this.visibilityChanged.isEmpty() || !this.progressChanged.isEmpty()) + { + Map map = Maps.newHashMap(); + Set set = Sets.newLinkedHashSet(); + Set set1 = Sets.newLinkedHashSet(); + + for (Advancement advancement : this.progressChanged) + { + if (this.visible.contains(advancement)) + { + map.put(advancement.getId(), this.progress.get(advancement)); + } + } + + for (Advancement advancement1 : this.visibilityChanged) + { + if (this.visible.contains(advancement1)) + { + set.add(advancement1); + } + else + { + set1.add(advancement1.getId()); + } + } + + if (!map.isEmpty() || !set.isEmpty() || !set1.isEmpty()) + { + p_192741_1_.connection.sendPacket(new SPacketAdvancementInfo(this.isFirstPacket, set, set1, map)); + this.visibilityChanged.clear(); + this.progressChanged.clear(); + } + } + + this.isFirstPacket = false; + } + + public void setSelectedTab(@Nullable Advancement p_194220_1_) + { + Advancement advancement = this.lastSelectedTab; + + if (p_194220_1_ != null && p_194220_1_.getParent() == null && p_194220_1_.getDisplay() != null) + { + this.lastSelectedTab = p_194220_1_; + } + else + { + this.lastSelectedTab = null; + } + + if (advancement != this.lastSelectedTab) + { + this.player.connection.sendPacket(new SPacketSelectAdvancementsTab(this.lastSelectedTab == null ? null : this.lastSelectedTab.getId())); + } + } + + public AdvancementProgress getProgress(Advancement advancementIn) + { + AdvancementProgress advancementprogress = this.progress.get(advancementIn); + + if (advancementprogress == null) + { + advancementprogress = new AdvancementProgress(); + this.startProgress(advancementIn, advancementprogress); + } + + return advancementprogress; + } + + private void startProgress(Advancement p_192743_1_, AdvancementProgress p_192743_2_) + { + p_192743_2_.update(p_192743_1_.getCriteria(), p_192743_1_.getRequirements()); + this.progress.put(p_192743_1_, p_192743_2_); + } + + private void ensureVisibility(Advancement p_192742_1_) + { + boolean flag = this.shouldBeVisible(p_192742_1_); + boolean flag1 = this.visible.contains(p_192742_1_); + + if (flag && !flag1) + { + this.visible.add(p_192742_1_); + this.visibilityChanged.add(p_192742_1_); + + if (this.progress.containsKey(p_192742_1_)) + { + this.progressChanged.add(p_192742_1_); + } + } + else if (!flag && flag1) + { + this.visible.remove(p_192742_1_); + this.visibilityChanged.add(p_192742_1_); + } + + if (flag != flag1 && p_192742_1_.getParent() != null) + { + this.ensureVisibility(p_192742_1_.getParent()); + } + + for (Advancement advancement : p_192742_1_.getChildren()) + { + this.ensureVisibility(advancement); + } + } + + private boolean shouldBeVisible(Advancement p_192738_1_) + { + for (int i = 0; p_192738_1_ != null && i <= 2; ++i) + { + if (i == 0 && this.hasCompletedChildrenOrSelf(p_192738_1_)) + { + return true; + } + + if (p_192738_1_.getDisplay() == null) + { + return false; + } + + AdvancementProgress advancementprogress = this.getProgress(p_192738_1_); + + if (advancementprogress.isDone()) + { + return true; + } + + if (p_192738_1_.getDisplay().isHidden()) + { + return false; + } + + p_192738_1_ = p_192738_1_.getParent(); + } + + return false; + } + + private boolean hasCompletedChildrenOrSelf(Advancement p_192746_1_) + { + AdvancementProgress advancementprogress = this.getProgress(p_192746_1_); + + if (advancementprogress.isDone()) + { + return true; + } + else + { + for (Advancement advancement : p_192746_1_.getChildren()) + { + if (this.hasCompletedChildrenOrSelf(advancement)) + { + return true; + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/AbstractCriterionInstance.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/AbstractCriterionInstance.java new file mode 100644 index 0000000..fd8b6b2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/AbstractCriterionInstance.java @@ -0,0 +1,24 @@ +package net.minecraft.advancements.critereon; + +import net.minecraft.advancements.ICriterionInstance; +import net.minecraft.util.ResourceLocation; + +public class AbstractCriterionInstance implements ICriterionInstance +{ + private final ResourceLocation criterion; + + public AbstractCriterionInstance(ResourceLocation criterionIn) + { + this.criterion = criterionIn; + } + + public ResourceLocation getId() + { + return this.criterion; + } + + public String toString() + { + return "AbstractCriterionInstance{criterion=" + this.criterion + '}'; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/BredAnimalsTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/BredAnimalsTrigger.java new file mode 100644 index 0000000..a560566 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/BredAnimalsTrigger.java @@ -0,0 +1,160 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public class BredAnimalsTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("bred_animals"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + BredAnimalsTrigger.Listeners bredanimalstrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (bredanimalstrigger$listeners == null) + { + bredanimalstrigger$listeners = new BredAnimalsTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, bredanimalstrigger$listeners); + } + + bredanimalstrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + BredAnimalsTrigger.Listeners bredanimalstrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (bredanimalstrigger$listeners != null) + { + bredanimalstrigger$listeners.remove(listener); + + if (bredanimalstrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public BredAnimalsTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + EntityPredicate entitypredicate = EntityPredicate.deserialize(json.get("parent")); + EntityPredicate entitypredicate1 = EntityPredicate.deserialize(json.get("partner")); + EntityPredicate entitypredicate2 = EntityPredicate.deserialize(json.get("child")); + return new BredAnimalsTrigger.Instance(entitypredicate, entitypredicate1, entitypredicate2); + } + + public void trigger(EntityPlayerMP player, EntityAnimal parent1, EntityAnimal parent2, EntityAgeable child) + { + BredAnimalsTrigger.Listeners bredanimalstrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (bredanimalstrigger$listeners != null) + { + bredanimalstrigger$listeners.trigger(player, parent1, parent2, child); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final EntityPredicate parent; + private final EntityPredicate partner; + private final EntityPredicate child; + + public Instance(EntityPredicate parent, EntityPredicate partner, EntityPredicate child) + { + super(BredAnimalsTrigger.ID); + this.parent = parent; + this.partner = partner; + this.child = child; + } + + public boolean test(EntityPlayerMP player, EntityAnimal parent1In, EntityAnimal parent2In, EntityAgeable childIn) + { + if (!this.child.test(player, childIn)) + { + return false; + } + else + { + return this.parent.test(player, parent1In) && this.partner.test(player, parent2In) || this.parent.test(player, parent2In) && this.partner.test(player, parent1In); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, EntityAnimal parent1, EntityAnimal parent2, EntityAgeable child) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((BredAnimalsTrigger.Instance)listener.getCriterionInstance()).test(player, parent1, parent2, child)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/BrewedPotionTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/BrewedPotionTrigger.java new file mode 100644 index 0000000..94c5c09 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/BrewedPotionTrigger.java @@ -0,0 +1,162 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.potion.PotionType; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class BrewedPotionTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("brewed_potion"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + BrewedPotionTrigger.Listeners brewedpotiontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (brewedpotiontrigger$listeners == null) + { + brewedpotiontrigger$listeners = new BrewedPotionTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, brewedpotiontrigger$listeners); + } + + brewedpotiontrigger$listeners.addListener(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + BrewedPotionTrigger.Listeners brewedpotiontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (brewedpotiontrigger$listeners != null) + { + brewedpotiontrigger$listeners.removeListener(listener); + + if (brewedpotiontrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public BrewedPotionTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + PotionType potiontype = null; + + if (json.has("potion")) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(json, "potion")); + + if (!PotionType.REGISTRY.containsKey(resourcelocation)) + { + throw new JsonSyntaxException("Unknown potion '" + resourcelocation + "'"); + } + + potiontype = PotionType.REGISTRY.getObject(resourcelocation); + } + + return new BrewedPotionTrigger.Instance(potiontype); + } + + public void trigger(EntityPlayerMP player, PotionType potionIn) + { + BrewedPotionTrigger.Listeners brewedpotiontrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (brewedpotiontrigger$listeners != null) + { + brewedpotiontrigger$listeners.trigger(potionIn); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final PotionType potion; + + public Instance(@Nullable PotionType potion) + { + super(BrewedPotionTrigger.ID); + this.potion = potion; + } + + public boolean test(PotionType potion) + { + return this.potion == null || this.potion == potion; + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void addListener(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void removeListener(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(PotionType potion) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((BrewedPotionTrigger.Instance)listener.getCriterionInstance()).test(potion)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ChangeDimensionTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ChangeDimensionTrigger.java new file mode 100644 index 0000000..c3997f8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ChangeDimensionTrigger.java @@ -0,0 +1,160 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.DimensionType; + +public class ChangeDimensionTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("changed_dimension"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ChangeDimensionTrigger.Listeners changedimensiontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (changedimensiontrigger$listeners == null) + { + changedimensiontrigger$listeners = new ChangeDimensionTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, changedimensiontrigger$listeners); + } + + changedimensiontrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ChangeDimensionTrigger.Listeners changedimensiontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (changedimensiontrigger$listeners != null) + { + changedimensiontrigger$listeners.remove(listener); + + if (changedimensiontrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public ChangeDimensionTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + DimensionType dimensiontype = json.has("from") ? DimensionType.byName(JsonUtils.getString(json, "from")) : null; + DimensionType dimensiontype1 = json.has("to") ? DimensionType.byName(JsonUtils.getString(json, "to")) : null; + return new ChangeDimensionTrigger.Instance(dimensiontype, dimensiontype1); + } + + public void trigger(EntityPlayerMP player, DimensionType from, DimensionType to) + { + ChangeDimensionTrigger.Listeners changedimensiontrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (changedimensiontrigger$listeners != null) + { + changedimensiontrigger$listeners.trigger(from, to); + } + } + + public static class Instance extends AbstractCriterionInstance + { + @Nullable + private final DimensionType from; + @Nullable + private final DimensionType to; + + public Instance(@Nullable DimensionType from, @Nullable DimensionType to) + { + super(ChangeDimensionTrigger.ID); + this.from = from; + this.to = to; + } + + public boolean test(DimensionType from, DimensionType to) + { + if (this.from != null && this.from != from) + { + return false; + } + else + { + return this.to == null || this.to == to; + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(DimensionType from, DimensionType to) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((ChangeDimensionTrigger.Instance)listener.getCriterionInstance()).test(from, to)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ConstructBeaconTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ConstructBeaconTrigger.java new file mode 100644 index 0000000..6fe41c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ConstructBeaconTrigger.java @@ -0,0 +1,146 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntityBeacon; +import net.minecraft.util.ResourceLocation; + +public class ConstructBeaconTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("construct_beacon"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ConstructBeaconTrigger.Listeners constructbeacontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (constructbeacontrigger$listeners == null) + { + constructbeacontrigger$listeners = new ConstructBeaconTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, constructbeacontrigger$listeners); + } + + constructbeacontrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ConstructBeaconTrigger.Listeners constructbeacontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (constructbeacontrigger$listeners != null) + { + constructbeacontrigger$listeners.remove(listener); + + if (constructbeacontrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public ConstructBeaconTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(json.get("level")); + return new ConstructBeaconTrigger.Instance(minmaxbounds); + } + + public void trigger(EntityPlayerMP player, TileEntityBeacon beacon) + { + ConstructBeaconTrigger.Listeners constructbeacontrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (constructbeacontrigger$listeners != null) + { + constructbeacontrigger$listeners.trigger(beacon); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final MinMaxBounds level; + + public Instance(MinMaxBounds level) + { + super(ConstructBeaconTrigger.ID); + this.level = level; + } + + public boolean test(TileEntityBeacon beacon) + { + return this.level.test((float)beacon.getLevels()); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(TileEntityBeacon beacon) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((ConstructBeaconTrigger.Instance)listener.getCriterionInstance()).test(beacon)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ConsumeItemTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ConsumeItemTrigger.java new file mode 100644 index 0000000..406148d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ConsumeItemTrigger.java @@ -0,0 +1,146 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class ConsumeItemTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("consume_item"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ConsumeItemTrigger.Listeners consumeitemtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (consumeitemtrigger$listeners == null) + { + consumeitemtrigger$listeners = new ConsumeItemTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, consumeitemtrigger$listeners); + } + + consumeitemtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ConsumeItemTrigger.Listeners consumeitemtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (consumeitemtrigger$listeners != null) + { + consumeitemtrigger$listeners.remove(listener); + + if (consumeitemtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public ConsumeItemTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + ItemPredicate itempredicate = ItemPredicate.deserialize(json.get("item")); + return new ConsumeItemTrigger.Instance(itempredicate); + } + + public void trigger(EntityPlayerMP player, ItemStack item) + { + ConsumeItemTrigger.Listeners consumeitemtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (consumeitemtrigger$listeners != null) + { + consumeitemtrigger$listeners.trigger(item); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final ItemPredicate item; + + public Instance(ItemPredicate item) + { + super(ConsumeItemTrigger.ID); + this.item = item; + } + + public boolean test(ItemStack item) + { + return this.item.test(item); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(ItemStack item) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((ConsumeItemTrigger.Instance)listener.getCriterionInstance()).test(item)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.java new file mode 100644 index 0000000..f15bdb3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/CuredZombieVillagerTrigger.java @@ -0,0 +1,157 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public class CuredZombieVillagerTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("cured_zombie_villager"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + CuredZombieVillagerTrigger.Listeners curedzombievillagertrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (curedzombievillagertrigger$listeners == null) + { + curedzombievillagertrigger$listeners = new CuredZombieVillagerTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, curedzombievillagertrigger$listeners); + } + + curedzombievillagertrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + CuredZombieVillagerTrigger.Listeners curedzombievillagertrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (curedzombievillagertrigger$listeners != null) + { + curedzombievillagertrigger$listeners.remove(listener); + + if (curedzombievillagertrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public CuredZombieVillagerTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + EntityPredicate entitypredicate = EntityPredicate.deserialize(json.get("zombie")); + EntityPredicate entitypredicate1 = EntityPredicate.deserialize(json.get("villager")); + return new CuredZombieVillagerTrigger.Instance(entitypredicate, entitypredicate1); + } + + public void trigger(EntityPlayerMP player, EntityZombie zombie, EntityVillager villager) + { + CuredZombieVillagerTrigger.Listeners curedzombievillagertrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (curedzombievillagertrigger$listeners != null) + { + curedzombievillagertrigger$listeners.trigger(player, zombie, villager); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final EntityPredicate zombie; + private final EntityPredicate villager; + + public Instance(EntityPredicate zombie, EntityPredicate villager) + { + super(CuredZombieVillagerTrigger.ID); + this.zombie = zombie; + this.villager = villager; + } + + public boolean test(EntityPlayerMP player, EntityZombie zombie, EntityVillager villager) + { + if (!this.zombie.test(player, zombie)) + { + return false; + } + else + { + return this.villager.test(player, villager); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, EntityZombie zombie, EntityVillager villager) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((CuredZombieVillagerTrigger.Instance)listener.getCriterionInstance()).test(player, zombie, villager)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DamagePredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DamagePredicate.java new file mode 100644 index 0000000..de36296 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DamagePredicate.java @@ -0,0 +1,82 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; +import net.minecraft.util.JsonUtils; + +public class DamagePredicate +{ + public static DamagePredicate ANY = new DamagePredicate(); + private final MinMaxBounds dealt; + private final MinMaxBounds taken; + private final EntityPredicate sourceEntity; + private final Boolean blocked; + private final DamageSourcePredicate type; + + public DamagePredicate() + { + this.dealt = MinMaxBounds.UNBOUNDED; + this.taken = MinMaxBounds.UNBOUNDED; + this.sourceEntity = EntityPredicate.ANY; + this.blocked = null; + this.type = DamageSourcePredicate.ANY; + } + + public DamagePredicate(MinMaxBounds dealt, MinMaxBounds taken, EntityPredicate sourceEntity, @Nullable Boolean blocked, DamageSourcePredicate type) + { + this.dealt = dealt; + this.taken = taken; + this.sourceEntity = sourceEntity; + this.blocked = blocked; + this.type = type; + } + + public boolean test(EntityPlayerMP player, DamageSource source, float dealt, float taken, boolean blocked) + { + if (this == ANY) + { + return true; + } + else if (!this.dealt.test(dealt)) + { + return false; + } + else if (!this.taken.test(taken)) + { + return false; + } + else if (!this.sourceEntity.test(player, source.getTrueSource())) + { + return false; + } + else if (this.blocked != null && this.blocked.booleanValue() != blocked) + { + return false; + } + else + { + return this.type.test(player, source); + } + } + + public static DamagePredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "damage"); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(jsonobject.get("dealt")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(jsonobject.get("taken")); + Boolean obool = jsonobject.has("blocked") ? JsonUtils.getBoolean(jsonobject, "blocked") : null; + EntityPredicate entitypredicate = EntityPredicate.deserialize(jsonobject.get("source_entity")); + DamageSourcePredicate damagesourcepredicate = DamageSourcePredicate.deserialize(jsonobject.get("type")); + return new DamagePredicate(minmaxbounds, minmaxbounds1, entitypredicate, obool, damagesourcepredicate); + } + else + { + return ANY; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DamageSourcePredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DamageSourcePredicate.java new file mode 100644 index 0000000..6e61309 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DamageSourcePredicate.java @@ -0,0 +1,120 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; +import net.minecraft.util.JsonUtils; + +public class DamageSourcePredicate +{ + public static DamageSourcePredicate ANY = new DamageSourcePredicate(); + private final Boolean isProjectile; + private final Boolean isExplosion; + private final Boolean bypassesArmor; + private final Boolean bypassesInvulnerability; + private final Boolean bypassesMagic; + private final Boolean isFire; + private final Boolean isMagic; + private final EntityPredicate directEntity; + private final EntityPredicate sourceEntity; + + public DamageSourcePredicate() + { + this.isProjectile = null; + this.isExplosion = null; + this.bypassesArmor = null; + this.bypassesInvulnerability = null; + this.bypassesMagic = null; + this.isFire = null; + this.isMagic = null; + this.directEntity = EntityPredicate.ANY; + this.sourceEntity = EntityPredicate.ANY; + } + + public DamageSourcePredicate(@Nullable Boolean isProjectile, @Nullable Boolean isExplosion, @Nullable Boolean bypassesArmor, @Nullable Boolean bypassesInvulnerability, @Nullable Boolean bypassesMagic, @Nullable Boolean isFire, @Nullable Boolean isMagic, EntityPredicate directEntity, EntityPredicate sourceEntity) + { + this.isProjectile = isProjectile; + this.isExplosion = isExplosion; + this.bypassesArmor = bypassesArmor; + this.bypassesInvulnerability = bypassesInvulnerability; + this.bypassesMagic = bypassesMagic; + this.isFire = isFire; + this.isMagic = isMagic; + this.directEntity = directEntity; + this.sourceEntity = sourceEntity; + } + + public boolean test(EntityPlayerMP player, DamageSource source) + { + if (this == ANY) + { + return true; + } + else if (this.isProjectile != null && this.isProjectile.booleanValue() != source.isProjectile()) + { + return false; + } + else if (this.isExplosion != null && this.isExplosion.booleanValue() != source.isExplosion()) + { + return false; + } + else if (this.bypassesArmor != null && this.bypassesArmor.booleanValue() != source.isUnblockable()) + { + return false; + } + else if (this.bypassesInvulnerability != null && this.bypassesInvulnerability.booleanValue() != source.canHarmInCreative()) + { + return false; + } + else if (this.bypassesMagic != null && this.bypassesMagic.booleanValue() != source.isDamageAbsolute()) + { + return false; + } + else if (this.isFire != null && this.isFire.booleanValue() != source.isFireDamage()) + { + return false; + } + else if (this.isMagic != null && this.isMagic.booleanValue() != source.isMagicDamage()) + { + return false; + } + else if (!this.directEntity.test(player, source.getImmediateSource())) + { + return false; + } + else + { + return this.sourceEntity.test(player, source.getTrueSource()); + } + } + + public static DamageSourcePredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "damage type"); + Boolean obool = optionalBoolean(jsonobject, "is_projectile"); + Boolean obool1 = optionalBoolean(jsonobject, "is_explosion"); + Boolean obool2 = optionalBoolean(jsonobject, "bypasses_armor"); + Boolean obool3 = optionalBoolean(jsonobject, "bypasses_invulnerability"); + Boolean obool4 = optionalBoolean(jsonobject, "bypasses_magic"); + Boolean obool5 = optionalBoolean(jsonobject, "is_fire"); + Boolean obool6 = optionalBoolean(jsonobject, "is_magic"); + EntityPredicate entitypredicate = EntityPredicate.deserialize(jsonobject.get("direct_entity")); + EntityPredicate entitypredicate1 = EntityPredicate.deserialize(jsonobject.get("source_entity")); + return new DamageSourcePredicate(obool, obool1, obool2, obool3, obool4, obool5, obool6, entitypredicate, entitypredicate1); + } + else + { + return ANY; + } + } + + @Nullable + private static Boolean optionalBoolean(JsonObject object, String memberName) + { + return object.has(memberName) ? JsonUtils.getBoolean(object, memberName) : null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DistancePredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DistancePredicate.java new file mode 100644 index 0000000..aac3869 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/DistancePredicate.java @@ -0,0 +1,68 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import javax.annotation.Nullable; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.math.MathHelper; + +public class DistancePredicate +{ + /** The predicate that matches any distance. */ + public static final DistancePredicate ANY = new DistancePredicate(MinMaxBounds.UNBOUNDED, MinMaxBounds.UNBOUNDED, MinMaxBounds.UNBOUNDED, MinMaxBounds.UNBOUNDED, MinMaxBounds.UNBOUNDED); + private final MinMaxBounds x; + private final MinMaxBounds y; + private final MinMaxBounds z; + private final MinMaxBounds horizontal; + private final MinMaxBounds absolute; + + public DistancePredicate(MinMaxBounds x, MinMaxBounds y, MinMaxBounds z, MinMaxBounds horizontal, MinMaxBounds absolute) + { + this.x = x; + this.y = y; + this.z = z; + this.horizontal = horizontal; + this.absolute = absolute; + } + + public boolean test(double x1, double y1, double z1, double x2, double y2, double z2) + { + float f = (float)(x1 - x2); + float f1 = (float)(y1 - y2); + float f2 = (float)(z1 - z2); + + if (this.x.test(MathHelper.abs(f)) && this.y.test(MathHelper.abs(f1)) && this.z.test(MathHelper.abs(f2))) + { + if (!this.horizontal.testSquare((double)(f * f + f2 * f2))) + { + return false; + } + else + { + return this.absolute.testSquare((double)(f * f + f1 * f1 + f2 * f2)); + } + } + else + { + return false; + } + } + + public static DistancePredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "distance"); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(jsonobject.get("x")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(jsonobject.get("y")); + MinMaxBounds minmaxbounds2 = MinMaxBounds.deserialize(jsonobject.get("z")); + MinMaxBounds minmaxbounds3 = MinMaxBounds.deserialize(jsonobject.get("horizontal")); + MinMaxBounds minmaxbounds4 = MinMaxBounds.deserialize(jsonobject.get("absolute")); + return new DistancePredicate(minmaxbounds, minmaxbounds1, minmaxbounds2, minmaxbounds3, minmaxbounds4); + } + else + { + return ANY; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EffectsChangedTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EffectsChangedTrigger.java new file mode 100644 index 0000000..4e5ed5f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EffectsChangedTrigger.java @@ -0,0 +1,145 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public class EffectsChangedTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("effects_changed"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EffectsChangedTrigger.Listeners effectschangedtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (effectschangedtrigger$listeners == null) + { + effectschangedtrigger$listeners = new EffectsChangedTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, effectschangedtrigger$listeners); + } + + effectschangedtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EffectsChangedTrigger.Listeners effectschangedtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (effectschangedtrigger$listeners != null) + { + effectschangedtrigger$listeners.remove(listener); + + if (effectschangedtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public EffectsChangedTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + MobEffectsPredicate mobeffectspredicate = MobEffectsPredicate.deserialize(json.get("effects")); + return new EffectsChangedTrigger.Instance(mobeffectspredicate); + } + + public void trigger(EntityPlayerMP player) + { + EffectsChangedTrigger.Listeners effectschangedtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (effectschangedtrigger$listeners != null) + { + effectschangedtrigger$listeners.trigger(player); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final MobEffectsPredicate effects; + + public Instance(MobEffectsPredicate effects) + { + super(EffectsChangedTrigger.ID); + this.effects = effects; + } + + public boolean test(EntityPlayerMP player) + { + return this.effects.test(player); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((EffectsChangedTrigger.Instance)listener.getCriterionInstance()).test(player)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnchantedItemTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnchantedItemTrigger.java new file mode 100644 index 0000000..eca3283 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnchantedItemTrigger.java @@ -0,0 +1,156 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class EnchantedItemTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("enchanted_item"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EnchantedItemTrigger.Listeners enchanteditemtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (enchanteditemtrigger$listeners == null) + { + enchanteditemtrigger$listeners = new EnchantedItemTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, enchanteditemtrigger$listeners); + } + + enchanteditemtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EnchantedItemTrigger.Listeners enchanteditemtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (enchanteditemtrigger$listeners != null) + { + enchanteditemtrigger$listeners.remove(listener); + + if (enchanteditemtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public EnchantedItemTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + ItemPredicate itempredicate = ItemPredicate.deserialize(json.get("item")); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(json.get("levels")); + return new EnchantedItemTrigger.Instance(itempredicate, minmaxbounds); + } + + public void trigger(EntityPlayerMP player, ItemStack item, int levelsSpent) + { + EnchantedItemTrigger.Listeners enchanteditemtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (enchanteditemtrigger$listeners != null) + { + enchanteditemtrigger$listeners.trigger(item, levelsSpent); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final ItemPredicate item; + private final MinMaxBounds levels; + + public Instance(ItemPredicate item, MinMaxBounds levels) + { + super(EnchantedItemTrigger.ID); + this.item = item; + this.levels = levels; + } + + public boolean test(ItemStack item, int levelsIn) + { + if (!this.item.test(item)) + { + return false; + } + else + { + return this.levels.test((float)levelsIn); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(ItemStack item, int levelsIn) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((EnchantedItemTrigger.Instance)listener.getCriterionInstance()).test(item, levelsIn)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnchantmentPredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnchantmentPredicate.java new file mode 100644 index 0000000..abc9fc1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnchantmentPredicate.java @@ -0,0 +1,110 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class EnchantmentPredicate +{ + /** The predicate that matches any set of enchantments. */ + public static final EnchantmentPredicate ANY = new EnchantmentPredicate(); + private final Enchantment enchantment; + private final MinMaxBounds levels; + + public EnchantmentPredicate() + { + this.enchantment = null; + this.levels = MinMaxBounds.UNBOUNDED; + } + + public EnchantmentPredicate(@Nullable Enchantment enchantment, MinMaxBounds levels) + { + this.enchantment = enchantment; + this.levels = levels; + } + + public boolean test(Map enchantmentsIn) + { + if (this.enchantment != null) + { + if (!enchantmentsIn.containsKey(this.enchantment)) + { + return false; + } + + int i = ((Integer)enchantmentsIn.get(this.enchantment)).intValue(); + + if (this.levels != null && !this.levels.test((float)i)) + { + return false; + } + } + else if (this.levels != null) + { + for (Integer integer : enchantmentsIn.values()) + { + if (this.levels.test((float)integer.intValue())) + { + return true; + } + } + + return false; + } + + return true; + } + + public static EnchantmentPredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "enchantment"); + Enchantment enchantment = null; + + if (jsonobject.has("enchantment")) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(jsonobject, "enchantment")); + enchantment = Enchantment.REGISTRY.getObject(resourcelocation); + + if (enchantment == null) + { + throw new JsonSyntaxException("Unknown enchantment '" + resourcelocation + "'"); + } + } + + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(jsonobject.get("levels")); + return new EnchantmentPredicate(enchantment, minmaxbounds); + } + else + { + return ANY; + } + } + + public static EnchantmentPredicate[] deserializeArray(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonArray jsonarray = JsonUtils.getJsonArray(element, "enchantments"); + EnchantmentPredicate[] aenchantmentpredicate = new EnchantmentPredicate[jsonarray.size()]; + + for (int i = 0; i < aenchantmentpredicate.length; ++i) + { + aenchantmentpredicate[i] = deserialize(jsonarray.get(i)); + } + + return aenchantmentpredicate; + } + else + { + return new EnchantmentPredicate[0]; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnterBlockTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnterBlockTrigger.java new file mode 100644 index 0000000..6064c60 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EnterBlockTrigger.java @@ -0,0 +1,225 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.base.Optional; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class EnterBlockTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("enter_block"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EnterBlockTrigger.Listeners enterblocktrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (enterblocktrigger$listeners == null) + { + enterblocktrigger$listeners = new EnterBlockTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, enterblocktrigger$listeners); + } + + enterblocktrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EnterBlockTrigger.Listeners enterblocktrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (enterblocktrigger$listeners != null) + { + enterblocktrigger$listeners.remove(listener); + + if (enterblocktrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public EnterBlockTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + Block block = null; + + if (json.has("block")) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(json, "block")); + + if (!Block.REGISTRY.containsKey(resourcelocation)) + { + throw new JsonSyntaxException("Unknown block type '" + resourcelocation + "'"); + } + + block = Block.REGISTRY.getObject(resourcelocation); + } + + Map < IProperty, Object > map = null; + + if (json.has("state")) + { + if (block == null) + { + throw new JsonSyntaxException("Can't define block state without a specific block type"); + } + + BlockStateContainer blockstatecontainer = block.getBlockState(); + + for (Entry entry : JsonUtils.getJsonObject(json, "state").entrySet()) + { + IProperty iproperty = blockstatecontainer.getProperty(entry.getKey()); + + if (iproperty == null) + { + throw new JsonSyntaxException("Unknown block state property '" + (String)entry.getKey() + "' for block '" + Block.REGISTRY.getNameForObject(block) + "'"); + } + + String s = JsonUtils.getString(entry.getValue(), entry.getKey()); + Optional optional = iproperty.parseValue(s); + + if (!optional.isPresent()) + { + throw new JsonSyntaxException("Invalid block state value '" + s + "' for property '" + (String)entry.getKey() + "' on block '" + Block.REGISTRY.getNameForObject(block) + "'"); + } + + if (map == null) + { + map = Maps. < IProperty, Object > newHashMap(); + } + + map.put(iproperty, optional.get()); + } + } + + return new EnterBlockTrigger.Instance(block, map); + } + + public void trigger(EntityPlayerMP player, IBlockState state) + { + EnterBlockTrigger.Listeners enterblocktrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (enterblocktrigger$listeners != null) + { + enterblocktrigger$listeners.trigger(state); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final Block block; + private final Map < IProperty, Object > properties; + + public Instance(@Nullable Block blockIn, @Nullable Map < IProperty, Object > propertiesIn) + { + super(EnterBlockTrigger.ID); + this.block = blockIn; + this.properties = propertiesIn; + } + + public boolean test(IBlockState state) + { + if (this.block != null && state.getBlock() != this.block) + { + return false; + } + else + { + if (this.properties != null) + { + for (Entry < IProperty, Object > entry : this.properties.entrySet()) + { + if (state.getValue(entry.getKey()) != entry.getValue()) + { + return false; + } + } + } + + return true; + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(IBlockState state) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((EnterBlockTrigger.Instance)listener.getCriterionInstance()).test(state)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.java new file mode 100644 index 0000000..7c10e9e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EntityHurtPlayerTrigger.java @@ -0,0 +1,146 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; + +public class EntityHurtPlayerTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("entity_hurt_player"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EntityHurtPlayerTrigger.Listeners entityhurtplayertrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (entityhurtplayertrigger$listeners == null) + { + entityhurtplayertrigger$listeners = new EntityHurtPlayerTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, entityhurtplayertrigger$listeners); + } + + entityhurtplayertrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + EntityHurtPlayerTrigger.Listeners entityhurtplayertrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (entityhurtplayertrigger$listeners != null) + { + entityhurtplayertrigger$listeners.remove(listener); + + if (entityhurtplayertrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public EntityHurtPlayerTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + DamagePredicate damagepredicate = DamagePredicate.deserialize(json.get("damage")); + return new EntityHurtPlayerTrigger.Instance(damagepredicate); + } + + public void trigger(EntityPlayerMP player, DamageSource source, float amountDealt, float amountTaken, boolean wasBlocked) + { + EntityHurtPlayerTrigger.Listeners entityhurtplayertrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (entityhurtplayertrigger$listeners != null) + { + entityhurtplayertrigger$listeners.trigger(player, source, amountDealt, amountTaken, wasBlocked); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final DamagePredicate damage; + + public Instance(DamagePredicate damage) + { + super(EntityHurtPlayerTrigger.ID); + this.damage = damage; + } + + public boolean test(EntityPlayerMP player, DamageSource source, float amountDealt, float amountTaken, boolean wasBlocked) + { + return this.damage.test(player, source, amountDealt, amountTaken, wasBlocked); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements p_i47439_1_) + { + this.playerAdvancements = p_i47439_1_; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, DamageSource source, float amountDealt, float amountTaken, boolean wasBlocked) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((EntityHurtPlayerTrigger.Instance)listener.getCriterionInstance()).test(player, source, amountDealt, amountTaken, wasBlocked)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EntityPredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EntityPredicate.java new file mode 100644 index 0000000..5229aef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/EntityPredicate.java @@ -0,0 +1,92 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class EntityPredicate +{ + /** The predicate that matches any entity. */ + public static final EntityPredicate ANY = new EntityPredicate((ResourceLocation)null, DistancePredicate.ANY, LocationPredicate.ANY, MobEffectsPredicate.ANY, NBTPredicate.ANY); + private final ResourceLocation type; + private final DistancePredicate distance; + private final LocationPredicate location; + private final MobEffectsPredicate effects; + private final NBTPredicate nbt; + + public EntityPredicate(@Nullable ResourceLocation type, DistancePredicate distance, LocationPredicate location, MobEffectsPredicate effects, NBTPredicate nbt) + { + this.type = type; + this.distance = distance; + this.location = location; + this.effects = effects; + this.nbt = nbt; + } + + public boolean test(EntityPlayerMP player, @Nullable Entity entity) + { + if (this == ANY) + { + return true; + } + else if (entity == null) + { + return false; + } + else if (this.type != null && !EntityList.isMatchingName(entity, this.type)) + { + return false; + } + else if (!this.distance.test(player.posX, player.posY, player.posZ, entity.posX, entity.posY, entity.posZ)) + { + return false; + } + else if (!this.location.test(player.getServerWorld(), entity.posX, entity.posY, entity.posZ)) + { + return false; + } + else if (!this.effects.test(entity)) + { + return false; + } + else + { + return this.nbt.test(entity); + } + } + + public static EntityPredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "entity"); + ResourceLocation resourcelocation = null; + + if (jsonobject.has("type")) + { + resourcelocation = new ResourceLocation(JsonUtils.getString(jsonobject, "type")); + + if (!EntityList.isRegistered(resourcelocation)) + { + throw new JsonSyntaxException("Unknown entity type '" + resourcelocation + "', valid types are: " + EntityList.getValidTypeNames()); + } + } + + DistancePredicate distancepredicate = DistancePredicate.deserialize(jsonobject.get("distance")); + LocationPredicate locationpredicate = LocationPredicate.deserialize(jsonobject.get("location")); + MobEffectsPredicate mobeffectspredicate = MobEffectsPredicate.deserialize(jsonobject.get("effects")); + NBTPredicate nbtpredicate = NBTPredicate.deserialize(jsonobject.get("nbt")); + return new EntityPredicate(resourcelocation, distancepredicate, locationpredicate, mobeffectspredicate, nbtpredicate); + } + else + { + return ANY; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ImpossibleTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ImpossibleTrigger.java new file mode 100644 index 0000000..748d887 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ImpossibleTrigger.java @@ -0,0 +1,45 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.util.ResourceLocation; + +public class ImpossibleTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("impossible"); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public ImpossibleTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + return new ImpossibleTrigger.Instance(); + } + + public static class Instance extends AbstractCriterionInstance + { + public Instance() + { + super(ImpossibleTrigger.ID); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/InventoryChangeTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/InventoryChangeTrigger.java new file mode 100644 index 0000000..230a852 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/InventoryChangeTrigger.java @@ -0,0 +1,214 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class InventoryChangeTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("inventory_changed"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + InventoryChangeTrigger.Listeners inventorychangetrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (inventorychangetrigger$listeners == null) + { + inventorychangetrigger$listeners = new InventoryChangeTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, inventorychangetrigger$listeners); + } + + inventorychangetrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + InventoryChangeTrigger.Listeners inventorychangetrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (inventorychangetrigger$listeners != null) + { + inventorychangetrigger$listeners.remove(listener); + + if (inventorychangetrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public InventoryChangeTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + JsonObject jsonobject = JsonUtils.getJsonObject(json, "slots", new JsonObject()); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(jsonobject.get("occupied")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(jsonobject.get("full")); + MinMaxBounds minmaxbounds2 = MinMaxBounds.deserialize(jsonobject.get("empty")); + ItemPredicate[] aitempredicate = ItemPredicate.deserializeArray(json.get("items")); + return new InventoryChangeTrigger.Instance(minmaxbounds, minmaxbounds1, minmaxbounds2, aitempredicate); + } + + public void trigger(EntityPlayerMP player, InventoryPlayer inventory) + { + InventoryChangeTrigger.Listeners inventorychangetrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (inventorychangetrigger$listeners != null) + { + inventorychangetrigger$listeners.trigger(inventory); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final MinMaxBounds occupied; + private final MinMaxBounds full; + private final MinMaxBounds empty; + private final ItemPredicate[] items; + + public Instance(MinMaxBounds occupied, MinMaxBounds full, MinMaxBounds empty, ItemPredicate[] items) + { + super(InventoryChangeTrigger.ID); + this.occupied = occupied; + this.full = full; + this.empty = empty; + this.items = items; + } + + public boolean test(InventoryPlayer inventory) + { + int i = 0; + int j = 0; + int k = 0; + List list = Lists.newArrayList(this.items); + + for (int l = 0; l < inventory.getSizeInventory(); ++l) + { + ItemStack itemstack = inventory.getStackInSlot(l); + + if (itemstack.isEmpty()) + { + ++j; + } + else + { + ++k; + + if (itemstack.getCount() >= itemstack.getMaxStackSize()) + { + ++i; + } + + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + ItemPredicate itempredicate = iterator.next(); + + if (itempredicate.test(itemstack)) + { + iterator.remove(); + } + } + } + } + + if (!this.full.test((float)i)) + { + return false; + } + else if (!this.empty.test((float)j)) + { + return false; + } + else if (!this.occupied.test((float)k)) + { + return false; + } + else if (!list.isEmpty()) + { + return false; + } + else + { + return true; + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(InventoryPlayer inventory) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((InventoryChangeTrigger.Instance)listener.getCriterionInstance()).test(inventory)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ItemDurabilityTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ItemDurabilityTrigger.java new file mode 100644 index 0000000..34498d3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ItemDurabilityTrigger.java @@ -0,0 +1,163 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class ItemDurabilityTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("item_durability_changed"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ItemDurabilityTrigger.Listeners itemdurabilitytrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (itemdurabilitytrigger$listeners == null) + { + itemdurabilitytrigger$listeners = new ItemDurabilityTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, itemdurabilitytrigger$listeners); + } + + itemdurabilitytrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + ItemDurabilityTrigger.Listeners itemdurabilitytrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (itemdurabilitytrigger$listeners != null) + { + itemdurabilitytrigger$listeners.remove(listener); + + if (itemdurabilitytrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public ItemDurabilityTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + ItemPredicate itempredicate = ItemPredicate.deserialize(json.get("item")); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(json.get("durability")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(json.get("delta")); + return new ItemDurabilityTrigger.Instance(itempredicate, minmaxbounds, minmaxbounds1); + } + + public void trigger(EntityPlayerMP player, ItemStack itemIn, int newDurability) + { + ItemDurabilityTrigger.Listeners itemdurabilitytrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (itemdurabilitytrigger$listeners != null) + { + itemdurabilitytrigger$listeners.trigger(itemIn, newDurability); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final ItemPredicate item; + private final MinMaxBounds durability; + private final MinMaxBounds delta; + + public Instance(ItemPredicate item, MinMaxBounds durability, MinMaxBounds delta) + { + super(ItemDurabilityTrigger.ID); + this.item = item; + this.durability = durability; + this.delta = delta; + } + + public boolean test(ItemStack item, int p_193197_2_) + { + if (!this.item.test(item)) + { + return false; + } + else if (!this.durability.test((float)(item.getMaxDamage() - p_193197_2_))) + { + return false; + } + else + { + return this.delta.test((float)(item.getItemDamage() - p_193197_2_)); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(ItemStack item, int newDurability) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((ItemDurabilityTrigger.Instance)listener.getCriterionInstance()).test(item, newDurability)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ItemPredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ItemPredicate.java new file mode 100644 index 0000000..0221b97 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/ItemPredicate.java @@ -0,0 +1,173 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class ItemPredicate +{ + public static final ItemPredicate ANY = new ItemPredicate(); + private final Item item; + private final Integer data; + private final MinMaxBounds count; + private final MinMaxBounds durability; + private final EnchantmentPredicate[] enchantments; + private final PotionType potion; + private final NBTPredicate nbt; + + public ItemPredicate() + { + this.item = null; + this.data = null; + this.potion = null; + this.count = MinMaxBounds.UNBOUNDED; + this.durability = MinMaxBounds.UNBOUNDED; + this.enchantments = new EnchantmentPredicate[0]; + this.nbt = NBTPredicate.ANY; + } + + public ItemPredicate(@Nullable Item item, @Nullable Integer data, MinMaxBounds count, MinMaxBounds durability, EnchantmentPredicate[] enchantments, @Nullable PotionType potion, NBTPredicate nbt) + { + this.item = item; + this.data = data; + this.count = count; + this.durability = durability; + this.enchantments = enchantments; + this.potion = potion; + this.nbt = nbt; + } + + public boolean test(ItemStack item) + { + if (this.item != null && item.getItem() != this.item) + { + return false; + } + else if (this.data != null && item.getMetadata() != this.data.intValue()) + { + return false; + } + else if (!this.count.test((float)item.getCount())) + { + return false; + } + else if (this.durability != MinMaxBounds.UNBOUNDED && !item.isItemStackDamageable()) + { + return false; + } + else if (!this.durability.test((float)(item.getMaxDamage() - item.getItemDamage()))) + { + return false; + } + else if (!this.nbt.test(item)) + { + return false; + } + else + { + Map map = EnchantmentHelper.getEnchantments(item); + + for (int i = 0; i < this.enchantments.length; ++i) + { + if (!this.enchantments[i].test(map)) + { + return false; + } + } + + PotionType potiontype = PotionUtils.getPotionFromItem(item); + + if (this.potion != null && this.potion != potiontype) + { + return false; + } + else + { + return true; + } + } + } + + public static ItemPredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "item"); + if (jsonobject.has("type")) + { + final ResourceLocation rl = new ResourceLocation(JsonUtils.getString(jsonobject, "type")); + final Map> map = net.minecraftforge.advancements.critereon.ItemPredicates.getPredicates(); + if (map.containsKey(rl)) return map.get(rl).apply(jsonobject); + else throw new JsonSyntaxException("There is no ItemPredicate of type "+rl); + } + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(jsonobject.get("count")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(jsonobject.get("durability")); + Integer integer = jsonobject.has("data") ? JsonUtils.getInt(jsonobject, "data") : null; + NBTPredicate nbtpredicate = NBTPredicate.deserialize(jsonobject.get("nbt")); + Item item = null; + + if (jsonobject.has("item")) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(jsonobject, "item")); + item = Item.REGISTRY.getObject(resourcelocation); + + if (item == null) + { + throw new JsonSyntaxException("Unknown item id '" + resourcelocation + "'"); + } + } + + EnchantmentPredicate[] aenchantmentpredicate = EnchantmentPredicate.deserializeArray(jsonobject.get("enchantments")); + PotionType potiontype = null; + + if (jsonobject.has("potion")) + { + ResourceLocation resourcelocation1 = new ResourceLocation(JsonUtils.getString(jsonobject, "potion")); + + if (!PotionType.REGISTRY.containsKey(resourcelocation1)) + { + throw new JsonSyntaxException("Unknown potion '" + resourcelocation1 + "'"); + } + + potiontype = PotionType.REGISTRY.getObject(resourcelocation1); + } + + return new ItemPredicate(item, integer, minmaxbounds, minmaxbounds1, aenchantmentpredicate, potiontype, nbtpredicate); + } + else + { + return ANY; + } + } + + public static ItemPredicate[] deserializeArray(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonArray jsonarray = JsonUtils.getJsonArray(element, "items"); + ItemPredicate[] aitempredicate = new ItemPredicate[jsonarray.size()]; + + for (int i = 0; i < aitempredicate.length; ++i) + { + aitempredicate[i] = deserialize(jsonarray.get(i)); + } + + return aitempredicate; + } + else + { + return new ItemPredicate[0]; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/KilledTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/KilledTrigger.java new file mode 100644 index 0000000..75fdf66 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/KilledTrigger.java @@ -0,0 +1,153 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; + +public class KilledTrigger implements ICriterionTrigger +{ + private final Map listeners = Maps.newHashMap(); + private final ResourceLocation id; + + public KilledTrigger(ResourceLocation id) + { + this.id = id; + } + + public ResourceLocation getId() + { + return this.id; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + KilledTrigger.Listeners killedtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (killedtrigger$listeners == null) + { + killedtrigger$listeners = new KilledTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, killedtrigger$listeners); + } + + killedtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + KilledTrigger.Listeners killedtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (killedtrigger$listeners != null) + { + killedtrigger$listeners.remove(listener); + + if (killedtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public KilledTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + return new KilledTrigger.Instance(this.id, EntityPredicate.deserialize(json.get("entity")), DamageSourcePredicate.deserialize(json.get("killing_blow"))); + } + + public void trigger(EntityPlayerMP player, Entity entity, DamageSource source) + { + KilledTrigger.Listeners killedtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (killedtrigger$listeners != null) + { + killedtrigger$listeners.trigger(player, entity, source); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final EntityPredicate entity; + private final DamageSourcePredicate killingBlow; + + public Instance(ResourceLocation criterionIn, EntityPredicate entity, DamageSourcePredicate killingBlow) + { + super(criterionIn); + this.entity = entity; + this.killingBlow = killingBlow; + } + + public boolean test(EntityPlayerMP player, Entity entity, DamageSource source) + { + return !this.killingBlow.test(player, source) ? false : this.entity.test(player, entity); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, Entity entity, DamageSource source) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((KilledTrigger.Instance)listener.getCriterionInstance()).test(player, entity, source)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/LevitationTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/LevitationTrigger.java new file mode 100644 index 0000000..fd83e1f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/LevitationTrigger.java @@ -0,0 +1,156 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.Vec3d; + +public class LevitationTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("levitation"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + LevitationTrigger.Listeners levitationtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (levitationtrigger$listeners == null) + { + levitationtrigger$listeners = new LevitationTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, levitationtrigger$listeners); + } + + levitationtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + LevitationTrigger.Listeners levitationtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (levitationtrigger$listeners != null) + { + levitationtrigger$listeners.remove(listener); + + if (levitationtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public LevitationTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + DistancePredicate distancepredicate = DistancePredicate.deserialize(json.get("distance")); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(json.get("duration")); + return new LevitationTrigger.Instance(distancepredicate, minmaxbounds); + } + + public void trigger(EntityPlayerMP player, Vec3d startPos, int duration) + { + LevitationTrigger.Listeners levitationtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (levitationtrigger$listeners != null) + { + levitationtrigger$listeners.trigger(player, startPos, duration); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final DistancePredicate distance; + private final MinMaxBounds duration; + + public Instance(DistancePredicate distance, MinMaxBounds duration) + { + super(LevitationTrigger.ID); + this.distance = distance; + this.duration = duration; + } + + public boolean test(EntityPlayerMP player, Vec3d startPos, int durationIn) + { + if (!this.distance.test(startPos.x, startPos.y, startPos.z, player.posX, player.posY, player.posZ)) + { + return false; + } + else + { + return this.duration.test((float)durationIn); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, Vec3d startPos, int durationIn) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((LevitationTrigger.Instance)listener.getCriterionInstance()).test(player, startPos, durationIn)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/LocationPredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/LocationPredicate.java new file mode 100644 index 0000000..9ab136d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/LocationPredicate.java @@ -0,0 +1,106 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import javax.annotation.Nullable; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.DimensionType; +import net.minecraft.world.WorldServer; +import net.minecraft.world.biome.Biome; + +public class LocationPredicate +{ + public static LocationPredicate ANY = new LocationPredicate(MinMaxBounds.UNBOUNDED, MinMaxBounds.UNBOUNDED, MinMaxBounds.UNBOUNDED, (Biome)null, (String)null, (DimensionType)null); + private final MinMaxBounds x; + private final MinMaxBounds y; + private final MinMaxBounds z; + @Nullable + final Biome biome; + @Nullable + private final String feature; + @Nullable + private final DimensionType dimension; + + public LocationPredicate(MinMaxBounds x, MinMaxBounds y, MinMaxBounds z, @Nullable Biome biome, @Nullable String feature, @Nullable DimensionType dimension) + { + this.x = x; + this.y = y; + this.z = z; + this.biome = biome; + this.feature = feature; + this.dimension = dimension; + } + + public boolean test(WorldServer world, double x, double y, double z) + { + return this.test(world, (float)x, (float)y, (float)z); + } + + public boolean test(WorldServer world, float x, float y, float z) + { + if (!this.x.test(x)) + { + return false; + } + else if (!this.y.test(y)) + { + return false; + } + else if (!this.z.test(z)) + { + return false; + } + else if (this.dimension != null && this.dimension != world.provider.getDimensionType()) + { + return false; + } + else + { + BlockPos blockpos = new BlockPos((double)x, (double)y, (double)z); + + if (this.biome != null && this.biome != world.getBiome(blockpos)) + { + return false; + } + else + { + return this.feature == null || world.getChunkProvider().isInsideStructure(world, this.feature, blockpos); + } + } + } + + public static LocationPredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "location"); + JsonObject jsonobject1 = JsonUtils.getJsonObject(jsonobject, "position", new JsonObject()); + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(jsonobject1.get("x")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(jsonobject1.get("y")); + MinMaxBounds minmaxbounds2 = MinMaxBounds.deserialize(jsonobject1.get("z")); + DimensionType dimensiontype = jsonobject.has("dimension") ? DimensionType.byName(JsonUtils.getString(jsonobject, "dimension")) : null; + String s = jsonobject.has("feature") ? JsonUtils.getString(jsonobject, "feature") : null; + Biome biome = null; + + if (jsonobject.has("biome")) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(jsonobject, "biome")); + biome = Biome.REGISTRY.getObject(resourcelocation); + + if (biome == null) + { + throw new JsonSyntaxException("Unknown biome '" + resourcelocation + "'"); + } + } + + return new LocationPredicate(minmaxbounds, minmaxbounds1, minmaxbounds2, biome, s, dimensiontype); + } + else + { + return ANY; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/MinMaxBounds.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/MinMaxBounds.java new file mode 100644 index 0000000..2821272 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/MinMaxBounds.java @@ -0,0 +1,66 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import javax.annotation.Nullable; +import net.minecraft.util.JsonUtils; + +public class MinMaxBounds +{ + public static final MinMaxBounds UNBOUNDED = new MinMaxBounds((Float)null, (Float)null); + private final Float min; + private final Float max; + + public MinMaxBounds(@Nullable Float min, @Nullable Float max) + { + this.min = min; + this.max = max; + } + + public boolean test(float value) + { + if (this.min != null && this.min.floatValue() > value) + { + return false; + } + else + { + return this.max == null || this.max.floatValue() >= value; + } + } + + public boolean testSquare(double value) + { + if (this.min != null && (double)(this.min.floatValue() * this.min.floatValue()) > value) + { + return false; + } + else + { + return this.max == null || (double)(this.max.floatValue() * this.max.floatValue()) >= value; + } + } + + public static MinMaxBounds deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + if (JsonUtils.isNumber(element)) + { + float f2 = JsonUtils.getFloat(element, "value"); + return new MinMaxBounds(f2, f2); + } + else + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "value"); + Float f = jsonobject.has("min") ? JsonUtils.getFloat(jsonobject, "min") : null; + Float f1 = jsonobject.has("max") ? JsonUtils.getFloat(jsonobject, "max") : null; + return new MinMaxBounds(f, f1); + } + } + else + { + return UNBOUNDED; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/MobEffectsPredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/MobEffectsPredicate.java new file mode 100644 index 0000000..d7fd4eb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/MobEffectsPredicate.java @@ -0,0 +1,147 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Maps; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.Collections; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class MobEffectsPredicate +{ + /** The predicate that matches any set of effects. */ + public static final MobEffectsPredicate ANY = new MobEffectsPredicate(Collections.emptyMap()); + private final Map effects; + + public MobEffectsPredicate(Map effects) + { + this.effects = effects; + } + + public boolean test(Entity entityIn) + { + if (this == ANY) + { + return true; + } + else + { + return entityIn instanceof EntityLivingBase ? this.test(((EntityLivingBase)entityIn).getActivePotionMap()) : false; + } + } + + public boolean test(EntityLivingBase entityIn) + { + return this == ANY ? true : this.test(entityIn.getActivePotionMap()); + } + + public boolean test(Map potions) + { + if (this == ANY) + { + return true; + } + else + { + for (Entry entry : this.effects.entrySet()) + { + PotionEffect potioneffect = potions.get(entry.getKey()); + + if (!((MobEffectsPredicate.InstancePredicate)entry.getValue()).test(potioneffect)) + { + return false; + } + } + + return true; + } + } + + public static MobEffectsPredicate deserialize(@Nullable JsonElement element) + { + if (element != null && !element.isJsonNull()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "effects"); + Map map = Maps.newHashMap(); + + for (Entry entry : jsonobject.entrySet()) + { + ResourceLocation resourcelocation = new ResourceLocation(entry.getKey()); + Potion potion = Potion.REGISTRY.getObject(resourcelocation); + + if (potion == null) + { + throw new JsonSyntaxException("Unknown effect '" + resourcelocation + "'"); + } + + MobEffectsPredicate.InstancePredicate mobeffectspredicate$instancepredicate = MobEffectsPredicate.InstancePredicate.deserialize(JsonUtils.getJsonObject(entry.getValue(), entry.getKey())); + map.put(potion, mobeffectspredicate$instancepredicate); + } + + return new MobEffectsPredicate(map); + } + else + { + return ANY; + } + } + + public static class InstancePredicate + { + private final MinMaxBounds amplifier; + private final MinMaxBounds duration; + @Nullable + private final Boolean ambient; + @Nullable + private final Boolean visible; + + public InstancePredicate(MinMaxBounds amplifier, MinMaxBounds duration, @Nullable Boolean ambient, @Nullable Boolean visible) + { + this.amplifier = amplifier; + this.duration = duration; + this.ambient = ambient; + this.visible = visible; + } + + public boolean test(@Nullable PotionEffect effect) + { + if (effect == null) + { + return false; + } + else if (!this.amplifier.test((float)effect.getAmplifier())) + { + return false; + } + else if (!this.duration.test((float)effect.getDuration())) + { + return false; + } + else if (this.ambient != null && this.ambient.booleanValue() != effect.getIsAmbient()) + { + return false; + } + else + { + return this.visible == null || this.visible.booleanValue() == effect.doesShowParticles(); + } + } + + public static MobEffectsPredicate.InstancePredicate deserialize(JsonObject object) + { + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(object.get("amplifier")); + MinMaxBounds minmaxbounds1 = MinMaxBounds.deserialize(object.get("duration")); + Boolean obool = object.has("ambient") ? JsonUtils.getBoolean(object, "ambient") : null; + Boolean obool1 = object.has("visible") ? JsonUtils.getBoolean(object, "visible") : null; + return new MobEffectsPredicate.InstancePredicate(minmaxbounds, minmaxbounds1, obool, obool1); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/NBTPredicate.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/NBTPredicate.java new file mode 100644 index 0000000..fff70ce --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/NBTPredicate.java @@ -0,0 +1,72 @@ +package net.minecraft.advancements.critereon; + +import com.google.gson.JsonElement; +import com.google.gson.JsonSyntaxException; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.util.JsonUtils; + +public class NBTPredicate +{ + /** The predicate that matches any NBT tag. */ + public static final NBTPredicate ANY = new NBTPredicate((NBTTagCompound)null); + @Nullable + private final NBTTagCompound tag; + + public NBTPredicate(@Nullable NBTTagCompound tag) + { + this.tag = tag; + } + + public boolean test(ItemStack item) + { + return this == ANY ? true : this.test(item.getTagCompound()); + } + + public boolean test(Entity entityIn) + { + return this == ANY ? true : this.test(CommandBase.entityToNBT(entityIn)); + } + + public boolean test(@Nullable NBTBase nbt) + { + if (nbt == null) + { + return this == ANY; + } + else + { + return this.tag == null || NBTUtil.areNBTEquals(this.tag, nbt, true); + } + } + + public static NBTPredicate deserialize(@Nullable JsonElement json) + { + if (json != null && !json.isJsonNull()) + { + NBTTagCompound nbttagcompound; + + try + { + nbttagcompound = JsonToNBT.getTagFromJson(JsonUtils.getString(json, "nbt")); + } + catch (NBTException nbtexception) + { + throw new JsonSyntaxException("Invalid nbt tag: " + nbtexception.getMessage()); + } + + return new NBTPredicate(nbttagcompound); + } + else + { + return ANY; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/NetherTravelTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/NetherTravelTrigger.java new file mode 100644 index 0000000..700c06c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/NetherTravelTrigger.java @@ -0,0 +1,164 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.WorldServer; + +public class NetherTravelTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("nether_travel"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + NetherTravelTrigger.Listeners nethertraveltrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (nethertraveltrigger$listeners == null) + { + nethertraveltrigger$listeners = new NetherTravelTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, nethertraveltrigger$listeners); + } + + nethertraveltrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + NetherTravelTrigger.Listeners nethertraveltrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (nethertraveltrigger$listeners != null) + { + nethertraveltrigger$listeners.remove(listener); + + if (nethertraveltrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public NetherTravelTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + LocationPredicate locationpredicate = LocationPredicate.deserialize(json.get("entered")); + LocationPredicate locationpredicate1 = LocationPredicate.deserialize(json.get("exited")); + DistancePredicate distancepredicate = DistancePredicate.deserialize(json.get("distance")); + return new NetherTravelTrigger.Instance(locationpredicate, locationpredicate1, distancepredicate); + } + + public void trigger(EntityPlayerMP player, Vec3d enteredNetherPosition) + { + NetherTravelTrigger.Listeners nethertraveltrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (nethertraveltrigger$listeners != null) + { + nethertraveltrigger$listeners.trigger(player.getServerWorld(), enteredNetherPosition, player.posX, player.posY, player.posZ); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final LocationPredicate entered; + private final LocationPredicate exited; + private final DistancePredicate distance; + + public Instance(LocationPredicate enteredIn, LocationPredicate exitedIn, DistancePredicate distanceIn) + { + super(NetherTravelTrigger.ID); + this.entered = enteredIn; + this.exited = exitedIn; + this.distance = distanceIn; + } + + public boolean test(WorldServer world, Vec3d enteredNetherPosition, double x, double y, double z) + { + if (!this.entered.test(world, enteredNetherPosition.x, enteredNetherPosition.y, enteredNetherPosition.z)) + { + return false; + } + else if (!this.exited.test(world, x, y, z)) + { + return false; + } + else + { + return this.distance.test(enteredNetherPosition.x, enteredNetherPosition.y, enteredNetherPosition.z, x, y, z); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(WorldServer world, Vec3d enteredNetherPosition, double x, double y, double z) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((NetherTravelTrigger.Instance)listener.getCriterionInstance()).test(world, enteredNetherPosition, x, y, z)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PlacedBlockTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PlacedBlockTrigger.java new file mode 100644 index 0000000..6267017 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PlacedBlockTrigger.java @@ -0,0 +1,242 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.base.Optional; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +public class PlacedBlockTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("placed_block"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + PlacedBlockTrigger.Listeners placedblocktrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (placedblocktrigger$listeners == null) + { + placedblocktrigger$listeners = new PlacedBlockTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, placedblocktrigger$listeners); + } + + placedblocktrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + PlacedBlockTrigger.Listeners placedblocktrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (placedblocktrigger$listeners != null) + { + placedblocktrigger$listeners.remove(listener); + + if (placedblocktrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public PlacedBlockTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + Block block = null; + + if (json.has("block")) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(json, "block")); + + if (!Block.REGISTRY.containsKey(resourcelocation)) + { + throw new JsonSyntaxException("Unknown block type '" + resourcelocation + "'"); + } + + block = Block.REGISTRY.getObject(resourcelocation); + } + + Map < IProperty, Object > map = null; + + if (json.has("state")) + { + if (block == null) + { + throw new JsonSyntaxException("Can't define block state without a specific block type"); + } + + BlockStateContainer blockstatecontainer = block.getBlockState(); + + for (Entry entry : JsonUtils.getJsonObject(json, "state").entrySet()) + { + IProperty iproperty = blockstatecontainer.getProperty(entry.getKey()); + + if (iproperty == null) + { + throw new JsonSyntaxException("Unknown block state property '" + (String)entry.getKey() + "' for block '" + Block.REGISTRY.getNameForObject(block) + "'"); + } + + String s = JsonUtils.getString(entry.getValue(), entry.getKey()); + Optional optional = iproperty.parseValue(s); + + if (!optional.isPresent()) + { + throw new JsonSyntaxException("Invalid block state value '" + s + "' for property '" + (String)entry.getKey() + "' on block '" + Block.REGISTRY.getNameForObject(block) + "'"); + } + + if (map == null) + { + map = Maps. < IProperty, Object > newHashMap(); + } + + map.put(iproperty, optional.get()); + } + } + + LocationPredicate locationpredicate = LocationPredicate.deserialize(json.get("location")); + ItemPredicate itempredicate = ItemPredicate.deserialize(json.get("item")); + return new PlacedBlockTrigger.Instance(block, map, locationpredicate, itempredicate); + } + + public void trigger(EntityPlayerMP player, BlockPos pos, ItemStack item) + { + IBlockState iblockstate = player.world.getBlockState(pos); + PlacedBlockTrigger.Listeners placedblocktrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (placedblocktrigger$listeners != null) + { + placedblocktrigger$listeners.trigger(iblockstate, pos, player.getServerWorld(), item); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final Block block; + private final Map < IProperty, Object > properties; + private final LocationPredicate location; + private final ItemPredicate item; + + public Instance(@Nullable Block block, @Nullable Map < IProperty, Object > propertiesIn, LocationPredicate locationIn, ItemPredicate itemIn) + { + super(PlacedBlockTrigger.ID); + this.block = block; + this.properties = propertiesIn; + this.location = locationIn; + this.item = itemIn; + } + + public boolean test(IBlockState state, BlockPos pos, WorldServer world, ItemStack item) + { + if (this.block != null && state.getBlock() != this.block) + { + return false; + } + else + { + if (this.properties != null) + { + for (Entry < IProperty, Object > entry : this.properties.entrySet()) + { + if (state.getValue(entry.getKey()) != entry.getValue()) + { + return false; + } + } + } + + if (!this.location.test(world, (float)pos.getX(), (float)pos.getY(), (float)pos.getZ())) + { + return false; + } + else + { + return this.item.test(item); + } + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(IBlockState state, BlockPos pos, WorldServer world, ItemStack item) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((PlacedBlockTrigger.Instance)listener.getCriterionInstance()).test(state, pos, world, item)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.java new file mode 100644 index 0000000..9337eda --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PlayerHurtEntityTrigger.java @@ -0,0 +1,157 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; + +public class PlayerHurtEntityTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("player_hurt_entity"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + PlayerHurtEntityTrigger.Listeners playerhurtentitytrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (playerhurtentitytrigger$listeners == null) + { + playerhurtentitytrigger$listeners = new PlayerHurtEntityTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, playerhurtentitytrigger$listeners); + } + + playerhurtentitytrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + PlayerHurtEntityTrigger.Listeners playerhurtentitytrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (playerhurtentitytrigger$listeners != null) + { + playerhurtentitytrigger$listeners.remove(listener); + + if (playerhurtentitytrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public PlayerHurtEntityTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + DamagePredicate damagepredicate = DamagePredicate.deserialize(json.get("damage")); + EntityPredicate entitypredicate = EntityPredicate.deserialize(json.get("entity")); + return new PlayerHurtEntityTrigger.Instance(damagepredicate, entitypredicate); + } + + public void trigger(EntityPlayerMP player, Entity entityIn, DamageSource source, float amountDealt, float amountTaken, boolean blocked) + { + PlayerHurtEntityTrigger.Listeners playerhurtentitytrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (playerhurtentitytrigger$listeners != null) + { + playerhurtentitytrigger$listeners.trigger(player, entityIn, source, amountDealt, amountTaken, blocked); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final DamagePredicate damage; + private final EntityPredicate entity; + + public Instance(DamagePredicate damage, EntityPredicate entity) + { + super(PlayerHurtEntityTrigger.ID); + this.damage = damage; + this.entity = entity; + } + + public boolean test(EntityPlayerMP player, Entity entity, DamageSource source, float dealt, float taken, boolean blocked) + { + if (!this.damage.test(player, source, dealt, taken, blocked)) + { + return false; + } + else + { + return this.entity.test(player, entity); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, Entity entity, DamageSource source, float dealt, float taken, boolean blocked) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((PlayerHurtEntityTrigger.Instance)listener.getCriterionInstance()).test(player, entity, source, dealt, taken, blocked)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PositionTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PositionTrigger.java new file mode 100644 index 0000000..e9f0bb2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/PositionTrigger.java @@ -0,0 +1,151 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldServer; + +public class PositionTrigger implements ICriterionTrigger +{ + private final ResourceLocation id; + private final Map listeners = Maps.newHashMap(); + + public PositionTrigger(ResourceLocation id) + { + this.id = id; + } + + public ResourceLocation getId() + { + return this.id; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + PositionTrigger.Listeners positiontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (positiontrigger$listeners == null) + { + positiontrigger$listeners = new PositionTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, positiontrigger$listeners); + } + + positiontrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + PositionTrigger.Listeners positiontrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (positiontrigger$listeners != null) + { + positiontrigger$listeners.remove(listener); + + if (positiontrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public PositionTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + LocationPredicate locationpredicate = LocationPredicate.deserialize(json); + return new PositionTrigger.Instance(this.id, locationpredicate); + } + + public void trigger(EntityPlayerMP player) + { + PositionTrigger.Listeners positiontrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (positiontrigger$listeners != null) + { + positiontrigger$listeners.trigger(player.getServerWorld(), player.posX, player.posY, player.posZ); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final LocationPredicate location; + + public Instance(ResourceLocation criterionIn, LocationPredicate location) + { + super(criterionIn); + this.location = location; + } + + public boolean test(WorldServer world, double x, double y, double z) + { + return this.location.test(world, x, y, z); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(WorldServer world, double x, double y, double z) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((PositionTrigger.Instance)listener.getCriterionInstance()).test(world, x, y, z)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/RecipeUnlockedTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/RecipeUnlockedTrigger.java new file mode 100644 index 0000000..a26b607 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/RecipeUnlockedTrigger.java @@ -0,0 +1,158 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; + +public class RecipeUnlockedTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("recipe_unlocked"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + RecipeUnlockedTrigger.Listeners recipeunlockedtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (recipeunlockedtrigger$listeners == null) + { + recipeunlockedtrigger$listeners = new RecipeUnlockedTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, recipeunlockedtrigger$listeners); + } + + recipeunlockedtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + RecipeUnlockedTrigger.Listeners recipeunlockedtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (recipeunlockedtrigger$listeners != null) + { + recipeunlockedtrigger$listeners.remove(listener); + + if (recipeunlockedtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public RecipeUnlockedTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(json, "recipe")); + IRecipe irecipe = CraftingManager.getRecipe(resourcelocation); + + if (irecipe == null) + { + throw new JsonSyntaxException("Unknown recipe '" + resourcelocation + "'"); + } + else + { + return new RecipeUnlockedTrigger.Instance(irecipe); + } + } + + public void trigger(EntityPlayerMP player, IRecipe recipe) + { + RecipeUnlockedTrigger.Listeners recipeunlockedtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (recipeunlockedtrigger$listeners != null) + { + recipeunlockedtrigger$listeners.trigger(recipe); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final IRecipe recipe; + + public Instance(IRecipe recipe) + { + super(RecipeUnlockedTrigger.ID); + this.recipe = recipe; + } + + public boolean test(IRecipe recipe) + { + return this.recipe == recipe; + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(IRecipe recipe) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((RecipeUnlockedTrigger.Instance)listener.getCriterionInstance()).test(recipe)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/SummonedEntityTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/SummonedEntityTrigger.java new file mode 100644 index 0000000..9b73082 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/SummonedEntityTrigger.java @@ -0,0 +1,146 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public class SummonedEntityTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("summoned_entity"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + SummonedEntityTrigger.Listeners summonedentitytrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (summonedentitytrigger$listeners == null) + { + summonedentitytrigger$listeners = new SummonedEntityTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, summonedentitytrigger$listeners); + } + + summonedentitytrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + SummonedEntityTrigger.Listeners summonedentitytrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (summonedentitytrigger$listeners != null) + { + summonedentitytrigger$listeners.remove(listener); + + if (summonedentitytrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public SummonedEntityTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + EntityPredicate entitypredicate = EntityPredicate.deserialize(json.get("entity")); + return new SummonedEntityTrigger.Instance(entitypredicate); + } + + public void trigger(EntityPlayerMP player, Entity entity) + { + SummonedEntityTrigger.Listeners summonedentitytrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (summonedentitytrigger$listeners != null) + { + summonedentitytrigger$listeners.trigger(player, entity); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final EntityPredicate entity; + + public Instance(EntityPredicate entity) + { + super(SummonedEntityTrigger.ID); + this.entity = entity; + } + + public boolean test(EntityPlayerMP player, Entity entity) + { + return this.entity.test(player, entity); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, Entity entity) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((SummonedEntityTrigger.Instance)listener.getCriterionInstance()).test(player, entity)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/TameAnimalTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/TameAnimalTrigger.java new file mode 100644 index 0000000..2e30880 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/TameAnimalTrigger.java @@ -0,0 +1,146 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public class TameAnimalTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("tame_animal"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + TameAnimalTrigger.Listeners tameanimaltrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (tameanimaltrigger$listeners == null) + { + tameanimaltrigger$listeners = new TameAnimalTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, tameanimaltrigger$listeners); + } + + tameanimaltrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + TameAnimalTrigger.Listeners tameanimaltrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (tameanimaltrigger$listeners != null) + { + tameanimaltrigger$listeners.remove(listener); + + if (tameanimaltrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public TameAnimalTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + EntityPredicate entitypredicate = EntityPredicate.deserialize(json.get("entity")); + return new TameAnimalTrigger.Instance(entitypredicate); + } + + public void trigger(EntityPlayerMP player, EntityAnimal entity) + { + TameAnimalTrigger.Listeners tameanimaltrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (tameanimaltrigger$listeners != null) + { + tameanimaltrigger$listeners.trigger(player, entity); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final EntityPredicate entity; + + public Instance(EntityPredicate entity) + { + super(TameAnimalTrigger.ID); + this.entity = entity; + } + + public boolean test(EntityPlayerMP player, EntityAnimal entity) + { + return this.entity.test(player, entity); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, EntityAnimal entity) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((TameAnimalTrigger.Instance)listener.getCriterionInstance()).test(player, entity)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/TickTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/TickTrigger.java new file mode 100644 index 0000000..7f4abaf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/TickTrigger.java @@ -0,0 +1,117 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; + +public class TickTrigger implements ICriterionTrigger +{ + public static final ResourceLocation ID = new ResourceLocation("tick"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + TickTrigger.Listeners ticktrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (ticktrigger$listeners == null) + { + ticktrigger$listeners = new TickTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, ticktrigger$listeners); + } + + ticktrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + TickTrigger.Listeners ticktrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (ticktrigger$listeners != null) + { + ticktrigger$listeners.remove(listener); + + if (ticktrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public TickTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + return new TickTrigger.Instance(); + } + + public void trigger(EntityPlayerMP player) + { + TickTrigger.Listeners ticktrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (ticktrigger$listeners != null) + { + ticktrigger$listeners.trigger(); + } + } + + public static class Instance extends AbstractCriterionInstance + { + public Instance() + { + super(TickTrigger.ID); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger() + { + for (ICriterionTrigger.Listener listener : Lists.newArrayList(this.listeners)) + { + listener.grantCriterion(this.playerAdvancements); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/UsedEnderEyeTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/UsedEnderEyeTrigger.java new file mode 100644 index 0000000..0eb0032 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/UsedEnderEyeTrigger.java @@ -0,0 +1,148 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; + +public class UsedEnderEyeTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("used_ender_eye"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + UsedEnderEyeTrigger.Listeners usedendereyetrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (usedendereyetrigger$listeners == null) + { + usedendereyetrigger$listeners = new UsedEnderEyeTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, usedendereyetrigger$listeners); + } + + usedendereyetrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + UsedEnderEyeTrigger.Listeners usedendereyetrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (usedendereyetrigger$listeners != null) + { + usedendereyetrigger$listeners.remove(listener); + + if (usedendereyetrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public UsedEnderEyeTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + MinMaxBounds minmaxbounds = MinMaxBounds.deserialize(json.get("distance")); + return new UsedEnderEyeTrigger.Instance(minmaxbounds); + } + + public void trigger(EntityPlayerMP player, BlockPos pos) + { + UsedEnderEyeTrigger.Listeners usedendereyetrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (usedendereyetrigger$listeners != null) + { + double d0 = player.posX - (double)pos.getX(); + double d1 = player.posZ - (double)pos.getZ(); + usedendereyetrigger$listeners.trigger(d0 * d0 + d1 * d1); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final MinMaxBounds distance; + + public Instance(MinMaxBounds distance) + { + super(UsedEnderEyeTrigger.ID); + this.distance = distance; + } + + public boolean test(double distanceSq) + { + return this.distance.testSquare(distanceSq); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(double distanceSq) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((UsedEnderEyeTrigger.Instance)listener.getCriterionInstance()).test(distanceSq)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/UsedTotemTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/UsedTotemTrigger.java new file mode 100644 index 0000000..71023ac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/UsedTotemTrigger.java @@ -0,0 +1,146 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class UsedTotemTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("used_totem"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + UsedTotemTrigger.Listeners usedtotemtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (usedtotemtrigger$listeners == null) + { + usedtotemtrigger$listeners = new UsedTotemTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, usedtotemtrigger$listeners); + } + + usedtotemtrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + UsedTotemTrigger.Listeners usedtotemtrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (usedtotemtrigger$listeners != null) + { + usedtotemtrigger$listeners.remove(listener); + + if (usedtotemtrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public UsedTotemTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + ItemPredicate itempredicate = ItemPredicate.deserialize(json.get("item")); + return new UsedTotemTrigger.Instance(itempredicate); + } + + public void trigger(EntityPlayerMP player, ItemStack item) + { + UsedTotemTrigger.Listeners usedtotemtrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (usedtotemtrigger$listeners != null) + { + usedtotemtrigger$listeners.trigger(item); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final ItemPredicate item; + + public Instance(ItemPredicate item) + { + super(UsedTotemTrigger.ID); + this.item = item; + } + + public boolean test(ItemStack item) + { + return this.item.test(item); + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(ItemStack item) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((UsedTotemTrigger.Instance)listener.getCriterionInstance()).test(item)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/VillagerTradeTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/VillagerTradeTrigger.java new file mode 100644 index 0000000..d4dc731 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/VillagerTradeTrigger.java @@ -0,0 +1,157 @@ +package net.minecraft.advancements.critereon; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.advancements.ICriterionTrigger; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class VillagerTradeTrigger implements ICriterionTrigger +{ + private static final ResourceLocation ID = new ResourceLocation("villager_trade"); + private final Map listeners = Maps.newHashMap(); + + public ResourceLocation getId() + { + return ID; + } + + public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + VillagerTradeTrigger.Listeners villagertradetrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (villagertradetrigger$listeners == null) + { + villagertradetrigger$listeners = new VillagerTradeTrigger.Listeners(playerAdvancementsIn); + this.listeners.put(playerAdvancementsIn, villagertradetrigger$listeners); + } + + villagertradetrigger$listeners.add(listener); + } + + public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener listener) + { + VillagerTradeTrigger.Listeners villagertradetrigger$listeners = this.listeners.get(playerAdvancementsIn); + + if (villagertradetrigger$listeners != null) + { + villagertradetrigger$listeners.remove(listener); + + if (villagertradetrigger$listeners.isEmpty()) + { + this.listeners.remove(playerAdvancementsIn); + } + } + } + + public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) + { + this.listeners.remove(playerAdvancementsIn); + } + + /** + * Deserialize a ICriterionInstance of this trigger from the data in the JSON. + */ + public VillagerTradeTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) + { + EntityPredicate entitypredicate = EntityPredicate.deserialize(json.get("villager")); + ItemPredicate itempredicate = ItemPredicate.deserialize(json.get("item")); + return new VillagerTradeTrigger.Instance(entitypredicate, itempredicate); + } + + public void trigger(EntityPlayerMP player, EntityVillager villager, ItemStack item) + { + VillagerTradeTrigger.Listeners villagertradetrigger$listeners = this.listeners.get(player.getAdvancements()); + + if (villagertradetrigger$listeners != null) + { + villagertradetrigger$listeners.trigger(player, villager, item); + } + } + + public static class Instance extends AbstractCriterionInstance + { + private final EntityPredicate villager; + private final ItemPredicate item; + + public Instance(EntityPredicate villager, ItemPredicate item) + { + super(VillagerTradeTrigger.ID); + this.villager = villager; + this.item = item; + } + + public boolean test(EntityPlayerMP player, EntityVillager villager, ItemStack item) + { + if (!this.villager.test(player, villager)) + { + return false; + } + else + { + return this.item.test(item); + } + } + } + + static class Listeners + { + private final PlayerAdvancements playerAdvancements; + private final Set> listeners = Sets.>newHashSet(); + + public Listeners(PlayerAdvancements playerAdvancementsIn) + { + this.playerAdvancements = playerAdvancementsIn; + } + + public boolean isEmpty() + { + return this.listeners.isEmpty(); + } + + public void add(ICriterionTrigger.Listener listener) + { + this.listeners.add(listener); + } + + public void remove(ICriterionTrigger.Listener listener) + { + this.listeners.remove(listener); + } + + public void trigger(EntityPlayerMP player, EntityVillager villager, ItemStack item) + { + List> list = null; + + for (ICriterionTrigger.Listener listener : this.listeners) + { + if (((VillagerTradeTrigger.Instance)listener.getCriterionInstance()).test(player, villager, item)) + { + if (list == null) + { + list = Lists.>newArrayList(); + } + + list.add(listener); + } + } + + if (list != null) + { + for (ICriterionTrigger.Listener listener1 : list) + { + listener1.grantCriterion(this.playerAdvancements); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/package-info.java new file mode 100644 index 0000000..524a4f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/critereon/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.advancements.critereon; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/advancements/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/advancements/package-info.java new file mode 100644 index 0000000..9f7dfa0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/advancements/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.advancements; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/Block.java b/build/tmp/recompileMc/sources/net/minecraft/block/Block.java new file mode 100644 index 0000000..0571540 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/Block.java @@ -0,0 +1,2867 @@ +package net.minecraft.block; + +import com.google.common.collect.Sets; +import com.google.common.collect.UnmodifiableIterator; +import java.util.List; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ObjectIntIdentityMap; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.registry.RegistryNamespacedDefaultedByKey; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Block extends net.minecraftforge.registries.IForgeRegistryEntry.Impl +{ + /** ResourceLocation for the Air block */ + private static final ResourceLocation AIR_ID = new ResourceLocation("air"); + public static final RegistryNamespacedDefaultedByKey REGISTRY = net.minecraftforge.registries.GameData.getWrapperDefaulted(Block.class); + @Deprecated //Modders: DO NOT use this! Use GameRegistry + public static final ObjectIntIdentityMap BLOCK_STATE_IDS = net.minecraftforge.registries.GameData.getBlockStateIDMap(); + public static final AxisAlignedBB FULL_BLOCK_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + @Nullable + public static final AxisAlignedBB NULL_AABB = null; + private CreativeTabs displayOnCreativeTab; + protected boolean fullBlock; + /** How much light is subtracted for going through this block */ + protected int lightOpacity; + protected boolean translucent; + /** Amount of light emitted */ + protected int lightValue; + /** Flag if block should use the brightest neighbor light value as its own */ + protected boolean useNeighborBrightness; + /** Indicates how many hits it takes to break a block. */ + public float blockHardness; + /** Indicates how much this block can resist explosions */ + protected float blockResistance; + protected boolean enableStats; + /** + * Flags whether or not this block is of a type that needs random ticking. Ref-counted by ExtendedBlockStorage in + * order to broadly cull a chunk from the random chunk update list for efficiency's sake. + */ + protected boolean needsRandomTick; + /** true if the Block contains a Tile Entity */ + protected boolean hasTileEntity; + /** Sound of stepping on the block */ + protected SoundType blockSoundType; + public float blockParticleGravity; + protected final Material blockMaterial; + /** The Block's MapColor */ + protected final MapColor blockMapColor; + /** Determines how much velocity is maintained while moving on top of this block */ + @Deprecated // Forge: State/world/pos/entity sensitive version below + public float slipperiness; + protected final BlockStateContainer blockState; + private IBlockState defaultBlockState; + private String unlocalizedName; + + public static int getIdFromBlock(Block blockIn) + { + return REGISTRY.getIDForObject(blockIn); + } + + /** + * Get a unique ID for the given BlockState, containing both BlockID and metadata + */ + public static int getStateId(IBlockState state) + { + Block block = state.getBlock(); + return getIdFromBlock(block) + (block.getMetaFromState(state) << 12); + } + + public static Block getBlockById(int id) + { + return REGISTRY.getObjectById(id); + } + + /** + * Get a BlockState by it's ID (see getStateId) + */ + public static IBlockState getStateById(int id) + { + int i = id & 4095; + int j = id >> 12 & 15; + return getBlockById(i).getStateFromMeta(j); + } + + public static Block getBlockFromItem(@Nullable Item itemIn) + { + return itemIn instanceof ItemBlock ? ((ItemBlock)itemIn).getBlock() : Blocks.AIR; + } + + @Nullable + public static Block getBlockFromName(String name) + { + ResourceLocation resourcelocation = new ResourceLocation(name); + + if (REGISTRY.containsKey(resourcelocation)) + { + return REGISTRY.getObject(resourcelocation); + } + else + { + try + { + return REGISTRY.getObjectById(Integer.parseInt(name)); + } + catch (NumberFormatException var3) + { + return null; + } + } + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + @Deprecated + public boolean isTopSolid(IBlockState state) + { + return state.getMaterial().isOpaque() && state.isFullCube(); + } + + /** + * @return true if the state occupies all of its 1x1x1 cube + */ + @Deprecated + public boolean isFullBlock(IBlockState state) + { + return this.fullBlock; + } + + @Deprecated + public boolean canEntitySpawn(IBlockState state, Entity entityIn) + { + return true; + } + + @Deprecated + public int getLightOpacity(IBlockState state) + { + return this.lightOpacity; + } + + /** + * Used in the renderer to apply ambient occlusion + */ + @Deprecated + @SideOnly(Side.CLIENT) + public boolean isTranslucent(IBlockState state) + { + return this.translucent; + } + + @Deprecated + public int getLightValue(IBlockState state) + { + return this.lightValue; + } + + /** + * Should block use the brightest neighbor light value as its own + */ + @Deprecated + public boolean getUseNeighborBrightness(IBlockState state) + { + return this.useNeighborBrightness; + } + + /** + * Get a material of block + */ + @Deprecated + public Material getMaterial(IBlockState state) + { + return this.blockMaterial; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + @Deprecated + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return this.blockMapColor; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + @Deprecated + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState(); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + if (state.getPropertyKeys().isEmpty()) + { + return 0; + } + else + { + throw new IllegalArgumentException("Don't know how to convert " + state + " back into data..."); + } + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + @Deprecated + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @Deprecated + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state; + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @Deprecated + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state; + } + + public Block(Material blockMaterialIn, MapColor blockMapColorIn) + { + this.enableStats = true; + this.blockSoundType = SoundType.STONE; + this.blockParticleGravity = 1.0F; + this.slipperiness = 0.6F; + this.blockMaterial = blockMaterialIn; + this.blockMapColor = blockMapColorIn; + this.blockState = this.createBlockState(); + this.setDefaultState(this.blockState.getBaseState()); + this.fullBlock = this.getDefaultState().isOpaqueCube(); + this.lightOpacity = this.fullBlock ? 255 : 0; + this.translucent = !blockMaterialIn.blocksLight(); + } + + public Block(Material materialIn) + { + this(materialIn, materialIn.getMaterialMapColor()); + } + + /** + * Sets the footstep sound for the block. Returns the object for convenience in constructing. + */ + protected Block setSoundType(SoundType sound) + { + this.blockSoundType = sound; + return this; + } + + /** + * Sets how much light is blocked going through this block. Returns the object for convenience in constructing. + */ + public Block setLightOpacity(int opacity) + { + this.lightOpacity = opacity; + return this; + } + + /** + * Sets the light value that the block emits. Returns resulting block instance for constructing convenience. + */ + public Block setLightLevel(float value) + { + this.lightValue = (int)(15.0F * value); + return this; + } + + /** + * Sets the the blocks resistance to explosions. Returns the object for convenience in constructing. + */ + public Block setResistance(float resistance) + { + this.blockResistance = resistance * 3.0F; + return this; + } + + protected static boolean isExceptionBlockForAttaching(Block attachBlock) + { + return attachBlock instanceof BlockShulkerBox || attachBlock instanceof BlockLeaves || attachBlock instanceof BlockTrapDoor || attachBlock == Blocks.BEACON || attachBlock == Blocks.CAULDRON || attachBlock == Blocks.GLASS || attachBlock == Blocks.GLOWSTONE || attachBlock == Blocks.ICE || attachBlock == Blocks.SEA_LANTERN || attachBlock == Blocks.STAINED_GLASS; + } + + protected static boolean isExceptBlockForAttachWithPiston(Block attachBlock) + { + return isExceptionBlockForAttaching(attachBlock) || attachBlock == Blocks.PISTON || attachBlock == Blocks.STICKY_PISTON || attachBlock == Blocks.PISTON_HEAD; + } + + /** + * Indicate if a material is a normal solid opaque cube + */ + @Deprecated + public boolean isBlockNormalCube(IBlockState state) + { + return state.getMaterial().blocksMovement() && state.isFullCube(); + } + + /** + * Used for nearly all game logic (non-rendering) purposes. Use Forge-provided isNormalCube(IBlockAccess, BlockPos) + * instead. + */ + @Deprecated + public boolean isNormalCube(IBlockState state) + { + return state.getMaterial().isOpaque() && state.isFullCube() && !state.canProvidePower(); + } + + @Deprecated + public boolean causesSuffocation(IBlockState state) + { + return this.blockMaterial.blocksMovement() && this.getDefaultState().isFullCube(); + } + + @Deprecated + public boolean isFullCube(IBlockState state) + { + return true; + } + + @Deprecated + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return !this.blockMaterial.blocksMovement(); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + @Deprecated + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getMaterial().isReplaceable(); + } + + /** + * Sets how many hits it takes to break a block. + */ + public Block setHardness(float hardness) + { + this.blockHardness = hardness; + + if (this.blockResistance < hardness * 5.0F) + { + this.blockResistance = hardness * 5.0F; + } + + return this; + } + + public Block setBlockUnbreakable() + { + this.setHardness(-1.0F); + return this; + } + + @Deprecated + public float getBlockHardness(IBlockState blockState, World worldIn, BlockPos pos) + { + return this.blockHardness; + } + + /** + * Sets whether this block type will receive random update ticks + */ + public Block setTickRandomly(boolean shouldTick) + { + this.needsRandomTick = shouldTick; + return this; + } + + /** + * Returns whether or not this block is of a type that needs random ticking. Called for ref-counting purposes by + * ExtendedBlockStorage in order to broadly cull a chunk from the random chunk update list for efficiency's sake. + */ + public boolean getTickRandomly() + { + return this.needsRandomTick; + } + + @Deprecated //Forge: New State sensitive version. + public boolean hasTileEntity() + { + return hasTileEntity(getDefaultState()); + } + + @Deprecated + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FULL_BLOCK_AABB; + } + + @Deprecated + @SideOnly(Side.CLIENT) + public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos) + { + int i = source.getCombinedLight(pos, state.getLightValue(source, pos)); + + if (i == 0 && state.getBlock() instanceof BlockSlab) + { + pos = pos.down(); + state = source.getBlockState(pos); + return source.getCombinedLight(pos, state.getLightValue(source, pos)); + } + else + { + return i; + } + } + + @Deprecated + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + AxisAlignedBB axisalignedbb = blockState.getBoundingBox(blockAccess, pos); + + switch (side) + { + case DOWN: + + if (axisalignedbb.minY > 0.0D) + { + return true; + } + + break; + case UP: + + if (axisalignedbb.maxY < 1.0D) + { + return true; + } + + break; + case NORTH: + + if (axisalignedbb.minZ > 0.0D) + { + return true; + } + + break; + case SOUTH: + + if (axisalignedbb.maxZ < 1.0D) + { + return true; + } + + break; + case WEST: + + if (axisalignedbb.minX > 0.0D) + { + return true; + } + + break; + case EAST: + + if (axisalignedbb.maxX < 1.0D) + { + return true; + } + } + + return !blockAccess.getBlockState(pos.offset(side)).doesSideBlockRendering(blockAccess, pos.offset(side), side.getOpposite()); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + @Deprecated + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.SOLID; + } + + @Deprecated + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, state.getCollisionBoundingBox(worldIn, pos)); + } + + protected static void addCollisionBoxToList(BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable AxisAlignedBB blockBox) + { + if (blockBox != NULL_AABB) + { + AxisAlignedBB axisalignedbb = blockBox.offset(pos); + + if (entityBox.intersects(axisalignedbb)) + { + collidingBoxes.add(axisalignedbb); + } + } + } + + @Deprecated + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return blockState.getBoundingBox(worldIn, pos); + } + + /** + * Return an AABB (in world coords!) that should be highlighted when the player is targeting this Block + */ + @Deprecated + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) + { + return state.getBoundingBox(worldIn, pos).offset(pos); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + @Deprecated + public boolean isOpaqueCube(IBlockState state) + { + return true; + } + + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) + { + return this.isCollidable(); + } + + /** + * Returns if this block is collidable. Only used by fire, although stairs return that of the block that the stair + * is made of (though nobody's going to make fire stairs, right?) + */ + public boolean isCollidable() + { + return true; + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + this.updateTick(worldIn, pos, state, random); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + } + + /** + * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated. + */ + public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state) + { + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + @Deprecated + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 10; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (hasTileEntity(state) && !(this instanceof BlockContainer)) + { + worldIn.removeTileEntity(pos); + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 1; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(this); + } + + /** + * Get the hardness of this Block relative to the ability of the given player + */ + @Deprecated + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos) + { + return net.minecraftforge.common.ForgeHooks.blockStrength(state, player, worldIn, pos); + } + + /** + * Spawn this Block's drops into the World as EntityItems + */ + public final void dropBlockAsItem(World worldIn, BlockPos pos, IBlockState state, int fortune) + { + this.dropBlockAsItemWithChance(worldIn, pos, state, 1.0F, fortune); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + if (!worldIn.isRemote && !worldIn.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe + { + List drops = getDrops(worldIn, pos, state, fortune); // use the old method until it gets removed, for backward compatibility + chance = net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(drops, worldIn, pos, state, fortune, chance, false, harvesters.get()); + + for (ItemStack drop : drops) + { + if (worldIn.rand.nextFloat() <= chance) + { + spawnAsEntity(worldIn, pos, drop); + } + } + } + } + + /** + * Spawns the given ItemStack as an EntityItem into the World at the given position + */ + public static void spawnAsEntity(World worldIn, BlockPos pos, ItemStack stack) + { + if (!worldIn.isRemote && !stack.isEmpty() && worldIn.getGameRules().getBoolean("doTileDrops")&& !worldIn.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe + { + if (captureDrops.get()) + { + capturedDrops.get().add(stack); + return; + } + float f = 0.5F; + double d0 = (double)(worldIn.rand.nextFloat() * 0.5F) + 0.25D; + double d1 = (double)(worldIn.rand.nextFloat() * 0.5F) + 0.25D; + double d2 = (double)(worldIn.rand.nextFloat() * 0.5F) + 0.25D; + EntityItem entityitem = new EntityItem(worldIn, (double)pos.getX() + d0, (double)pos.getY() + d1, (double)pos.getZ() + d2, stack); + entityitem.setDefaultPickupDelay(); + worldIn.spawnEntity(entityitem); + } + } + + /** + * Spawns the given amount of experience into the World as XP orb entities + */ + public void dropXpOnBlockBreak(World worldIn, BlockPos pos, int amount) + { + if (!worldIn.isRemote && worldIn.getGameRules().getBoolean("doTileDrops")) + { + while (amount > 0) + { + int i = EntityXPOrb.getXPSplit(amount); + amount -= i; + worldIn.spawnEntity(new EntityXPOrb(worldIn, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, i)); + } + } + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return 0; + } + + /** + * Returns how much this block can resist explosions from the passed in entity. + */ + @Deprecated //Forge: State sensitive version + public float getExplosionResistance(Entity exploder) + { + return this.blockResistance / 5.0F; + } + + /** + * Ray traces through the blocks collision from start vector to end vector returning a ray trace hit. + */ + @Deprecated + @Nullable + public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end) + { + return this.rayTrace(pos, start, end, blockState.getBoundingBox(worldIn, pos)); + } + + @Nullable + protected RayTraceResult rayTrace(BlockPos pos, Vec3d start, Vec3d end, AxisAlignedBB boundingBox) + { + Vec3d vec3d = start.subtract((double)pos.getX(), (double)pos.getY(), (double)pos.getZ()); + Vec3d vec3d1 = end.subtract((double)pos.getX(), (double)pos.getY(), (double)pos.getZ()); + RayTraceResult raytraceresult = boundingBox.calculateIntercept(vec3d, vec3d1); + return raytraceresult == null ? null : new RayTraceResult(raytraceresult.hitVec.addVector((double)pos.getX(), (double)pos.getY(), (double)pos.getZ()), raytraceresult.sideHit, pos); + } + + /** + * Called when this Block is destroyed by an Explosion + */ + public void onBlockDestroyedByExplosion(World worldIn, BlockPos pos, Explosion explosionIn) + { + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.SOLID; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return this.canPlaceBlockAt(worldIn, pos); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + return false; + } + + /** + * Called when the given entity walks on this Block + */ + public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) + { + } + + // Forge: use getStateForPlacement + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + @Deprecated + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getStateFromMeta(meta); + } + + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + } + + public Vec3d modifyAcceleration(World worldIn, BlockPos pos, Entity entityIn, Vec3d motion) + { + return motion; + } + + @Deprecated + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return 0; + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + @Deprecated + public boolean canProvidePower(IBlockState state) + { + return false; + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + } + + @Deprecated + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return 0; + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.005F); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0) + { + java.util.List items = new java.util.ArrayList(); + ItemStack itemstack = this.getSilkTouchDrop(state); + + if (!itemstack.isEmpty()) + { + items.add(itemstack); + } + + net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + for (ItemStack item : items) + { + spawnAsEntity(worldIn, pos, item); + } + } + else + { + harvesters.set(player); + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); + this.dropBlockAsItem(worldIn, pos, state, i); + harvesters.set(null); + } + } + + @Deprecated //Forge: State sensitive version + protected boolean canSilkHarvest() + { + return this.getDefaultState().isFullCube() && !this.hasTileEntity(silk_check_state.get()); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + Item item = Item.getItemFromBlock(this); + int i = 0; + + if (item.getHasSubtypes()) + { + i = this.getMetaFromState(state); + } + + return new ItemStack(item, 1, i); + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + return this.quantityDropped(random); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + } + + /** + * Return true if an entity can be spawned inside the block (used to get the player's bed spawn location) + */ + public boolean canSpawnInBlock() + { + return !this.blockMaterial.isSolid() && !this.blockMaterial.isLiquid(); + } + + public Block setUnlocalizedName(String name) + { + this.unlocalizedName = name; + return this; + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + ".name"); + } + + /** + * Returns the unlocalized name of the block with "tile." appended to the front. + */ + public String getUnlocalizedName() + { + return "tile." + this.unlocalizedName; + } + + /** + * Called on server when World#addBlockEvent is called. If server returns true, then also called on the client. On + * the Server, this may perform additional changes to the world, like pistons replacing the block with an extended + * base. On the client, the update may involve replacing tile entities or effects such as sounds or particles + */ + @Deprecated + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) + { + return false; + } + + /** + * Return the state of blocks statistics flags - if the block is counted for mined and placed. + */ + public boolean getEnableStats() + { + return this.enableStats; + } + + protected Block disableStats() + { + this.enableStats = false; + return this; + } + + @Deprecated + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return this.blockMaterial.getMobilityFlag(); + } + + @Deprecated + @SideOnly(Side.CLIENT) + public float getAmbientOcclusionLightValue(IBlockState state) + { + return state.isBlockNormalCube() ? 0.2F : 1.0F; + } + + /** + * Block's chance to react to a living entity falling on it. + */ + public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) + { + entityIn.fall(fallDistance, 1.0F); + } + + /** + * Called when an Entity lands on this Block. This method *must* update motionY because the entity will not do that + * on its own + */ + public void onLanded(World worldIn, Entity entityIn) + { + entityIn.motionY = 0.0D; + } + + @Deprecated // Forge: Use more sensitive version below: getPickBlock + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(this), 1, this.damageDropped(state)); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this)); + } + + /** + * Returns the CreativeTab to display the given block on. + */ + public CreativeTabs getCreativeTabToDisplayOn() + { + return this.displayOnCreativeTab; + } + + public Block setCreativeTab(CreativeTabs tab) + { + this.displayOnCreativeTab = tab; + return this; + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + } + + /** + * Called similar to random ticks, but only when it is raining. + */ + public void fillWithRain(World worldIn, BlockPos pos) + { + } + + public boolean requiresUpdates() + { + return true; + } + + /** + * Return whether this block can drop from an explosion. + */ + public boolean canDropFromExplosion(Explosion explosionIn) + { + return true; + } + + public boolean isAssociatedBlock(Block other) + { + return this == other; + } + + public static boolean isEqualTo(Block blockIn, Block other) + { + if (blockIn != null && other != null) + { + return blockIn == other ? true : blockIn.isAssociatedBlock(other); + } + else + { + return false; + } + } + + @Deprecated + public boolean hasComparatorInputOverride(IBlockState state) + { + return false; + } + + @Deprecated + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[0]); + } + + public BlockStateContainer getBlockState() + { + return this.blockState; + } + + protected final void setDefaultState(IBlockState state) + { + this.defaultBlockState = state; + } + + public final IBlockState getDefaultState() + { + return this.defaultBlockState; + } + + /** + * Get the OffsetType for this Block. Determines if the model is rendered slightly offset. + */ + public Block.EnumOffsetType getOffsetType() + { + return Block.EnumOffsetType.NONE; + } + + @Deprecated + public Vec3d getOffset(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + Block.EnumOffsetType block$enumoffsettype = this.getOffsetType(); + + if (block$enumoffsettype == Block.EnumOffsetType.NONE) + { + return Vec3d.ZERO; + } + else + { + long i = MathHelper.getCoordinateRandom(pos.getX(), 0, pos.getZ()); + return new Vec3d(((double)((float)(i >> 16 & 15L) / 15.0F) - 0.5D) * 0.5D, block$enumoffsettype == Block.EnumOffsetType.XYZ ? ((double)((float)(i >> 20 & 15L) / 15.0F) - 1.0D) * 0.2D : 0.0D, ((double)((float)(i >> 24 & 15L) / 15.0F) - 0.5D) * 0.5D); + } + } + + @Deprecated // Forge - World/state/pos/entity sensitive version below + public SoundType getSoundType() + { + return this.blockSoundType; + } + + public String toString() + { + return "Block{" + REGISTRY.getNameForObject(this) + "}"; + } + + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World player, List tooltip, ITooltipFlag advanced) + { + } + + /* ======================================== FORGE START =====================================*/ + //For ForgeInternal use Only! + protected ThreadLocal harvesters = new ThreadLocal(); + private ThreadLocal silk_check_state = new ThreadLocal(); + protected static java.util.Random RANDOM = new java.util.Random(); // Useful for random things without a seed. + + /** + * Gets the slipperiness at the given location at the given state. Normally + * between 0 and 1. + *

+ * Note that entities may reduce slipperiness by a certain factor of their own; + * for {@link net.minecraft.entity.EntityLivingBase}, this is {@code .91}. + * {@link net.minecraft.entity.item.EntityItem} uses {@code .98}, and + * {@link net.minecraft.entity.projectile.EntityFishHook} uses {@code .92}. + * + * @param state state of the block + * @param world the world + * @param pos the position in the world + * @param entity the entity in question + * @return the factor by which the entity's motion should be multiplied + */ + public float getSlipperiness(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable Entity entity) + { + return slipperiness; + } + + /** + * Sets the base slipperiness level. Normally between 0 and 1. + *

+ * Calling this method may have no effect on the function of this block, + * or may not have the expected result. This block is free to caclculate + * its slipperiness arbitrarily. This method is guaranteed to work on the + * base {@code Block} class. + * + * @param slipperiness the base slipperiness of this block + * @see #getSlipperiness(IBlockState, IBlockAccess, BlockPos, Entity) + */ + public void setDefaultSlipperiness(float slipperiness) + { + this.slipperiness = slipperiness; + } + + /** + * Get a light value for this block, taking into account the given state and coordinates, normal ranges are between 0 and 15 + * + * @param state Block state + * @param world The current world + * @param pos Block position in world + * @return The light value + */ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.getLightValue(); + } + + /** + * Checks if a player or entity can use this block to 'climb' like a ladder. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @param entity The entity trying to use the ladder, CAN be null. + * @return True if the block should act like a ladder + */ + public boolean isLadder(IBlockState state, IBlockAccess world, BlockPos pos, EntityLivingBase entity) { return false; } + + /** + * Return true if the block is a normal, solid cube. This + * determines indirect power state, entity ejection from blocks, and a few + * others. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return True if the block is a full cube + */ + public boolean isNormalCube(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.isNormalCube(); + } + + /** + * Check if the face of a block should block rendering. + * + * Faces which are fully opaque should return true, faces with transparency + * or faces which do not span the full size of the block should return false. + * + * @param state The current block state + * @param world The current world + * @param pos Block position in world + * @param face The side to check + * @return True if the block is opaque on the specified side. + */ + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) + { + return state.isOpaqueCube(); + } + + /** + * Checks if the block is a solid face on the given side, used by placement logic. + * + * @param base_state The base state, getActualState should be called first + * @param world The current world + * @param pos Block position in world + * @param side The side to check + * @return True if the block is solid on the specified side. + */ + @Deprecated //Use IBlockState.getBlockFaceShape + public boolean isSideSolid(IBlockState base_state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + if (base_state.isTopSolid() && side == EnumFacing.UP) // Short circuit to vanilla function if its true + return true; + + if (this instanceof BlockSlab) + { + IBlockState state = this.getActualState(base_state, world, pos); + return base_state.isFullBlock() + || (state.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP && side == EnumFacing.UP ) + || (state.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.BOTTOM && side == EnumFacing.DOWN); + } + else if (this instanceof BlockFarmland) + { + return (side != EnumFacing.DOWN && side != EnumFacing.UP); + } + else if (this instanceof BlockStairs) + { + IBlockState state = this.getActualState(base_state, world, pos); + boolean flipped = state.getValue(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; + BlockStairs.EnumShape shape = (BlockStairs.EnumShape)state.getValue(BlockStairs.SHAPE); + EnumFacing facing = (EnumFacing)state.getValue(BlockStairs.FACING); + if (side == EnumFacing.UP) return flipped; + if (side == EnumFacing.DOWN) return !flipped; + if (facing == side) return true; + if (flipped) + { + if (shape == BlockStairs.EnumShape.INNER_LEFT ) return side == facing.rotateYCCW(); + if (shape == BlockStairs.EnumShape.INNER_RIGHT) return side == facing.rotateY(); + } + else + { + if (shape == BlockStairs.EnumShape.INNER_LEFT ) return side == facing.rotateY(); + if (shape == BlockStairs.EnumShape.INNER_RIGHT) return side == facing.rotateYCCW(); + } + return false; + } + else if (this instanceof BlockSnow) + { + IBlockState state = this.getActualState(base_state, world, pos); + return ((Integer)state.getValue(BlockSnow.LAYERS)) >= 8; + } + else if (this instanceof BlockHopper && side == EnumFacing.UP) + { + return true; + } + else if (this instanceof BlockCompressedPowered) + { + return true; + } + return isNormalCube(base_state, world, pos); + } + + /** + * Determines if this block should set fire and deal fire damage + * to entities coming into contact with it. + * + * @param world The current world + * @param pos Block position in world + * @return True if the block should deal damage + */ + public boolean isBurning(IBlockAccess world, BlockPos pos) + { + return false; + } + + /** + * Determines this block should be treated as an air block + * by the rest of the code. This method is primarily + * useful for creating pure logic-blocks that will be invisible + * to the player and otherwise interact as air would. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return True if the block considered air + */ + public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.getMaterial() == Material.AIR; + } + + /** + * Determines if the player can harvest this block, obtaining it's drops when the block is destroyed. + * + * @param player The player damaging the block + * @param pos The block's current position + * @return True to spawn the drops + */ + public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return net.minecraftforge.common.ForgeHooks.canHarvestBlock(this, player, world, pos); + } + + /** + * Called when a player removes a block. This is responsible for + * actually destroying the block, and the block is intact at time of call. + * This is called regardless of whether the player can harvest the block or + * not. + * + * Return true if the block is actually destroyed. + * + * Note: When used in multiplayer, this is called on both client and + * server sides! + * + * @param state The current state. + * @param world The current world + * @param player The player damaging the block, may be null + * @param pos Block position in world + * @param willHarvest True if Block.harvestBlock will be called after this, if the return in true. + * Can be useful to delay the destruction of tile entities till after harvestBlock + * @return True if the block is actually destroyed. + */ + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + this.onBlockHarvested(world, pos, state, player); + return world.setBlockState(pos, net.minecraft.init.Blocks.AIR.getDefaultState(), world.isRemote ? 11 : 3); + } + + /** + * Chance that fire will spread and consume this block. + * 300 being a 100% chance, 0, being a 0% chance. + * + * @param world The current world + * @param pos Block position in world + * @param face The face that the fire is coming from + * @return A number ranging from 0 to 300 relating used to determine if the block will be consumed by fire + */ + public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face) + { + return net.minecraft.init.Blocks.FIRE.getFlammability(this); + } + + /** + * Called when fire is updating, checks if a block face can catch fire. + * + * + * @param world The current world + * @param pos Block position in world + * @param face The face that the fire is coming from + * @return True if the face can be on fire, false otherwise. + */ + public boolean isFlammable(IBlockAccess world, BlockPos pos, EnumFacing face) + { + return getFlammability(world, pos, face) > 0; + } + + /** + * Called when fire is updating on a neighbor block. + * The higher the number returned, the faster fire will spread around this block. + * + * @param world The current world + * @param pos Block position in world + * @param face The face that the fire is coming from + * @return A number that is used to determine the speed of fire growth around the block + */ + public int getFireSpreadSpeed(IBlockAccess world, BlockPos pos, EnumFacing face) + { + return net.minecraft.init.Blocks.FIRE.getEncouragement(this); + } + + /** + * Currently only called by fire when it is on top of this block. + * Returning true will prevent the fire from naturally dying during updating. + * Also prevents firing from dying from rain. + * + * @param world The current world + * @param pos Block position in world + * @param side The face that the fire is coming from + * @return True if this block sustains fire, meaning it will never go out. + */ + public boolean isFireSource(World world, BlockPos pos, EnumFacing side) + { + if (side != EnumFacing.UP) + return false; + if (this == Blocks.NETHERRACK || this == Blocks.MAGMA) + return true; + if ((world.provider instanceof net.minecraft.world.WorldProviderEnd) && this == Blocks.BEDROCK) + return true; + return false; + } + + private boolean isTileProvider = this instanceof ITileEntityProvider; + /** + * Called throughout the code as a replacement for block instanceof BlockContainer + * Moving this to the Block base class allows for mods that wish to extend vanilla + * blocks, and also want to have a tile entity on that block, may. + * + * Return true from this function to specify this block has a tile entity. + * + * @param state State of the current block + * @return True if block has a tile entity, false otherwise + */ + public boolean hasTileEntity(IBlockState state) + { + return isTileProvider; + } + + /** + * Called throughout the code as a replacement for ITileEntityProvider.createNewTileEntity + * Return the same thing you would from that function. + * This will fall back to ITileEntityProvider.createNewTileEntity(World) if this block is a ITileEntityProvider + * + * @param state The state of the current block + * @return A instance of a class extending TileEntity + */ + @Nullable + public TileEntity createTileEntity(World world, IBlockState state) + { + if (isTileProvider) + { + return ((ITileEntityProvider)this).createNewTileEntity(world, getMetaFromState(state)); + } + return null; + } + + /** + * State and fortune sensitive version, this replaces the old (int meta, Random rand) + * version in 1.1. + * + * @param state Current state + * @param fortune Current item fortune level + * @param random Random number generator + * @return The number of items to drop + */ + public int quantityDropped(IBlockState state, int fortune, Random random) + { + return quantityDroppedWithBonus(fortune, random); + } + + /** + * @deprecated use {@link #getDrops(NonNullList, IBlockAccess, BlockPos, IBlockState, int)} + */ + @Deprecated + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + NonNullList ret = NonNullList.create(); + getDrops(ret, world, pos, state, fortune); + return ret; + } + + /** + * This gets a complete list of items dropped from this block. + * + * @param drops add all items this block drops to this drops list + * @param world The current world + * @param pos Block position in world + * @param state Current state + * @param fortune Breakers fortune level + */ + public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + Random rand = world instanceof World ? ((World)world).rand : RANDOM; + + int count = quantityDropped(state, fortune, rand); + for (int i = 0; i < count; i++) + { + Item item = this.getItemDropped(state, rand, fortune); + if (item != Items.AIR) + { + drops.add(new ItemStack(item, 1, this.damageDropped(state))); + } + } + } + + /** + * Return true from this function if the player with silk touch can harvest this block directly, and not it's normal drops. + * + * @param world The world + * @param pos Block position in world + * @param state current block state + * @param player The player doing the harvesting + * @return True if the block can be directly harvested using silk touch + */ + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player) + { + silk_check_state.set(state);; + boolean ret = this.canSilkHarvest(); + silk_check_state.set(null); + return ret; + } + + /** + * Determines if a specified mob type can spawn on this block, returning false will + * prevent any mob from spawning on the block. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @param type The Mob Category Type + * @return True to allow a mob of the specified category to spawn, false to prevent it. + */ + public boolean canCreatureSpawn(IBlockState state, IBlockAccess world, BlockPos pos, net.minecraft.entity.EntityLiving.SpawnPlacementType type) + { + return isSideSolid(state, world, pos, EnumFacing.UP); + } + + /** + * Determines if this block is classified as a Bed, Allowing + * players to sleep in it, though the block has to specifically + * perform the sleeping functionality in it's activated event. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @param player The player or camera entity, null in some cases. + * @return True to treat this as a bed + */ + public boolean isBed(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable Entity player) + { + return this == net.minecraft.init.Blocks.BED; + } + + /** + * Returns the position that the player is moved to upon + * waking up, or respawning at the bed. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @param player The player or camera entity, null in some cases. + * @return The spawn position + */ + @Nullable + public BlockPos getBedSpawnPosition(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable EntityPlayer player) + { + if (world instanceof World) + return BlockBed.getSafeExitLocation((World)world, pos, 0); + return null; + } + + /** + * Called when a user either starts or stops sleeping in the bed. + * + * @param world The current world + * @param pos Block position in world + * @param player The player or camera entity, null in some cases. + * @param occupied True if we are occupying the bed, or false if they are stopping use of the bed + */ + public void setBedOccupied(IBlockAccess world, BlockPos pos, EntityPlayer player, boolean occupied) + { + if (world instanceof World) + { + IBlockState state = world.getBlockState(pos); + state = state.getBlock().getActualState(state, world, pos); + state = state.withProperty(BlockBed.OCCUPIED, occupied); + ((World)world).setBlockState(pos, state, 4); + } + } + + /** + * Returns the direction of the block. Same values that + * are returned by BlockDirectional + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return Bed direction + */ + public EnumFacing getBedDirection(IBlockState state, IBlockAccess world, BlockPos pos) + { + return (EnumFacing)getActualState(state, world, pos).getValue(BlockHorizontal.FACING); + } + + /** + * Determines if the current block is the foot half of the bed. + * + * @param world The current world + * @param pos Block position in world + * @return True if the current block is the foot side of a bed. + */ + public boolean isBedFoot(IBlockAccess world, BlockPos pos) + { + return getActualState(world.getBlockState(pos), world, pos).getValue(BlockBed.PART) == BlockBed.EnumPartType.FOOT; + } + + /** + * Called when a leaf should start its decay process. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + */ + public void beginLeavesDecay(IBlockState state, World world, BlockPos pos){} + + /** + * Determines if this block can prevent leaves connected to it from decaying. + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return true if the presence this block can prevent leaves from decaying. + */ + public boolean canSustainLeaves(IBlockState state, IBlockAccess world, BlockPos pos) + { + return false; + } + + /** + * Determines if this block is considered a leaf block, used to apply the leaf decay and generation system. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return true if this block is considered leaves. + */ + public boolean isLeaves(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.getMaterial() == Material.LEAVES; + } + + /** + * Used during tree growth to determine if newly generated leaves can replace this block. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return true if this block can be replaced by growing leaves. + */ + public boolean canBeReplacedByLeaves(IBlockState state, IBlockAccess world, BlockPos pos) + { + return isAir(state, world, pos) || isLeaves(state, world, pos); //!state.isFullBlock(); + } + + /** + * + * @param world The current world + * @param pos Block position in world + * @return true if the block is wood (logs) + */ + public boolean isWood(IBlockAccess world, BlockPos pos) + { + return false; + } + + /** + * Determines if the current block is replaceable by Ore veins during world generation. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @param target The generic target block the gen is looking for, Standards define stone + * for overworld generation, and neatherack for the nether. + * @return True to allow this block to be replaced by a ore + */ + public boolean isReplaceableOreGen(IBlockState state, IBlockAccess world, BlockPos pos, com.google.common.base.Predicate target) + { + return target.apply(state); + } + + /** + * Location sensitive version of getExplosionResistance + * + * @param world The current world + * @param pos Block position in world + * @param exploder The entity that caused the explosion, can be null + * @param explosion The explosion + * @return The amount of the explosion absorbed. + */ + public float getExplosionResistance(World world, BlockPos pos, @Nullable Entity exploder, Explosion explosion) + { + return getExplosionResistance(exploder); + } + + /** + * Called when the block is destroyed by an explosion. + * Useful for allowing the block to take into account tile entities, + * state, etc. when exploded, before it is removed. + * + * @param world The current world + * @param pos Block position in world + * @param explosion The explosion instance affecting the block + */ + public void onBlockExploded(World world, BlockPos pos, Explosion explosion) + { + world.setBlockToAir(pos); + onBlockDestroyedByExplosion(world, pos, explosion); + } + + /** + * Determine if this block can make a redstone connection on the side provided, + * Useful to control which sides are inputs and outputs for redstone wires. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @param side The side that is trying to make the connection, CAN BE NULL + * @return True to make the connection + */ + public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable EnumFacing side) + { + return state.canProvidePower() && side != null; + } + + /** + * Determines if a torch can be placed on the top surface of this block. + * Useful for creating your own block that torches can be on, such as fences. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return True to allow the torch to be placed + */ + public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos) + { + if (state.isTopSolid() || state.getBlockFaceShape(world, pos, EnumFacing.UP) == BlockFaceShape.SOLID) + { + return this != Blocks.END_GATEWAY && this != Blocks.LIT_PUMPKIN; + } + else + { + return this instanceof BlockFence || this == Blocks.GLASS || this == Blocks.COBBLESTONE_WALL || this == Blocks.STAINED_GLASS; + } + } + + /** + * Called when a user uses the creative pick block button on this block + * + * @param target The full target the player is looking at + * @return A ItemStack to add to the player's inventory, empty itemstack if nothing should be added. + */ + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) + { + return getItem(world, pos, state); + } + + /** + * Used by getTopSolidOrLiquidBlock while placing biome decorations, villages, etc + * Also used to determine if the player can spawn on this block. + * + * @return False to disallow spawning + */ + public boolean isFoliage(IBlockAccess world, BlockPos pos) + { + return false; + } + + /** + * Allows a block to override the standard EntityLivingBase.updateFallState + * particles, this is a server side method that spawns particles with + * WorldServer.spawnParticle + * + * @param world The current Server world + * @param blockPosition of the block that the entity landed on. + * @param iblockstate State at the specific world/pos + * @param entity the entity that hit landed on the block. + * @param numberOfParticles that vanilla would have spawned. + * @return True to prevent vanilla landing particles form spawning. + */ + public boolean addLandingEffects(IBlockState state, net.minecraft.world.WorldServer worldObj, BlockPos blockPosition, IBlockState iblockstate, EntityLivingBase entity, int numberOfParticles ) + { + return false; + } + + /** + * Allows a block to override the standard vanilla running particles. + * This is called from {@link Entity#spawnRunningParticles} and is called both, + * Client and server side, it's up to the implementor to client check / server check. + * By default vanilla spawns particles only on the client and the server methods no-op. + * + * @param state The BlockState the entity is running on. + * @param world The world. + * @param pos The position at the entities feet. + * @param entity The entity running on the block. + * @return True to prevent vanilla running particles from spawning. + */ + public boolean addRunningEffects(IBlockState state, World world, BlockPos pos, Entity entity) + { + return false; + } + + /** + * Spawn a digging particle effect in the world, this is a wrapper + * around EffectRenderer.addBlockHitEffects to allow the block more + * control over the particles. Useful when you have entirely different + * texture sheets for different sides/locations in the world. + * + * @param state The current state + * @param world The current world + * @param target The target the player is looking at {x/y/z/side/sub} + * @param manager A reference to the current particle manager. + * @return True to prevent vanilla digging particles form spawning. + */ + @SideOnly(Side.CLIENT) + public boolean addHitEffects(IBlockState state, World worldObj, RayTraceResult target, net.minecraft.client.particle.ParticleManager manager) + { + return false; + } + + /** + * Spawn particles for when the block is destroyed. Due to the nature + * of how this is invoked, the x/y/z locations are not always guaranteed + * to host your block. So be sure to do proper sanity checks before assuming + * that the location is this block. + * + * @param world The current world + * @param pos Position to spawn the particle + * @param manager A reference to the current particle manager. + * @return True to prevent vanilla break particles from spawning. + */ + @SideOnly(Side.CLIENT) + public boolean addDestroyEffects(World world, BlockPos pos, net.minecraft.client.particle.ParticleManager manager) + { + return false; + } + + /** + * Determines if this block can support the passed in plant, allowing it to be planted and grow. + * Some examples: + * Reeds check if its a reed, or if its sand/dirt/grass and adjacent to water + * Cacti checks if its a cacti, or if its sand + * Nether types check for soul sand + * Crops check for tilled soil + * Caves check if it's a solid surface + * Plains check if its grass or dirt + * Water check if its still water + * + * @param state The Current state + * @param world The current world + * @param pos Block position in world + * @param direction The direction relative to the given position the plant wants to be, typically its UP + * @param plantable The plant that wants to check + * @return True to allow the plant to be planted/stay. + */ + public boolean canSustainPlant(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing direction, net.minecraftforge.common.IPlantable plantable) + { + IBlockState plant = plantable.getPlant(world, pos.offset(direction)); + net.minecraftforge.common.EnumPlantType plantType = plantable.getPlantType(world, pos.offset(direction)); + + if (plant.getBlock() == net.minecraft.init.Blocks.CACTUS) + { + return this == net.minecraft.init.Blocks.CACTUS || this == net.minecraft.init.Blocks.SAND; + } + + if (plant.getBlock() == net.minecraft.init.Blocks.REEDS && this == net.minecraft.init.Blocks.REEDS) + { + return true; + } + + if (plantable instanceof BlockBush && ((BlockBush)plantable).canSustainBush(state)) + { + return true; + } + + switch (plantType) + { + case Desert: return this == net.minecraft.init.Blocks.SAND || this == net.minecraft.init.Blocks.HARDENED_CLAY || this == net.minecraft.init.Blocks.STAINED_HARDENED_CLAY; + case Nether: return this == net.minecraft.init.Blocks.SOUL_SAND; + case Crop: return this == net.minecraft.init.Blocks.FARMLAND; + case Cave: return state.isSideSolid(world, pos, EnumFacing.UP); + case Plains: return this == net.minecraft.init.Blocks.GRASS || this == net.minecraft.init.Blocks.DIRT || this == net.minecraft.init.Blocks.FARMLAND; + case Water: return state.getMaterial() == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0; + case Beach: + boolean isBeach = this == net.minecraft.init.Blocks.GRASS || this == net.minecraft.init.Blocks.DIRT || this == net.minecraft.init.Blocks.SAND; + boolean hasWater = (world.getBlockState(pos.east()).getMaterial() == Material.WATER || + world.getBlockState(pos.west()).getMaterial() == Material.WATER || + world.getBlockState(pos.north()).getMaterial() == Material.WATER || + world.getBlockState(pos.south()).getMaterial() == Material.WATER); + return isBeach && hasWater; + } + + return false; + } + + /** + * Called when a plant grows on this block, only implemented for saplings using the WorldGen*Trees classes right now. + * Modder may implement this for custom plants. + * This does not use ForgeDirection, because large/huge trees can be located in non-representable direction, + * so the source location is specified. + * Currently this just changes the block to dirt if it was grass. + * + * Note: This happens DURING the generation, the generation may not be complete when this is called. + * + * @param state The current state + * @param world Current world + * @param pos Block position in world + * @param source Source plant's position in world + */ + public void onPlantGrow(IBlockState state, World world, BlockPos pos, BlockPos source) + { + if (this == net.minecraft.init.Blocks.GRASS || this == net.minecraft.init.Blocks.FARMLAND) + { + world.setBlockState(pos, net.minecraft.init.Blocks.DIRT.getDefaultState(), 2); + } + } + + /** + * Checks if this soil is fertile, typically this means that growth rates + * of plants on this soil will be slightly sped up. + * Only vanilla case is tilledField when it is within range of water. + * + * @param world The current world + * @param pos Block position in world + * @return True if the soil should be considered fertile. + */ + public boolean isFertile(World world, BlockPos pos) + { + if (this == net.minecraft.init.Blocks.FARMLAND) + { + return ((Integer)world.getBlockState(pos).getValue(BlockFarmland.MOISTURE)) > 0; + } + + return false; + } + + /** + * Location aware and overrideable version of the lightOpacity array, + * return the number to subtract from the light value when it passes through this block. + * + * This is not guaranteed to have the tile entity in place before this is called, so it is + * Recommended that you have your tile entity call relight after being placed if you + * rely on it for light info. + * + * @param state The Block state + * @param world The current world + * @param pos Block position in world + * @return The amount of light to block, 0 for air, 255 for fully opaque. + */ + public int getLightOpacity(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state.getLightOpacity(); + } + + /** + * Determines if this block is can be destroyed by the specified entities normal behavior. + * + * @param state The current state + * @param world The current world + * @param pos Block position in world + * @return True to allow the ender dragon to destroy this block + */ + public boolean canEntityDestroy(IBlockState state, IBlockAccess world, BlockPos pos, Entity entity) + { + if (entity instanceof net.minecraft.entity.boss.EntityDragon) + { + return this != net.minecraft.init.Blocks.BARRIER && + this != net.minecraft.init.Blocks.OBSIDIAN && + this != net.minecraft.init.Blocks.END_STONE && + this != net.minecraft.init.Blocks.BEDROCK && + this != net.minecraft.init.Blocks.END_PORTAL && + this != net.minecraft.init.Blocks.END_PORTAL_FRAME && + this != net.minecraft.init.Blocks.COMMAND_BLOCK && + this != net.minecraft.init.Blocks.REPEATING_COMMAND_BLOCK && + this != net.minecraft.init.Blocks.CHAIN_COMMAND_BLOCK && + this != net.minecraft.init.Blocks.IRON_BARS && + this != net.minecraft.init.Blocks.END_GATEWAY; + } + else if ((entity instanceof net.minecraft.entity.boss.EntityWither) || + (entity instanceof net.minecraft.entity.projectile.EntityWitherSkull)) + { + return net.minecraft.entity.boss.EntityWither.canDestroyBlock(this); + } + + return true; + } + + /** + * Determines if this block can be used as the base of a beacon. + * + * @param world The current world + * @param pos Block position in world + * @param beacon Beacon position in world + * @return True, to support the beacon, and make it active with this block. + */ + public boolean isBeaconBase(IBlockAccess worldObj, BlockPos pos, BlockPos beacon) + { + return this == net.minecraft.init.Blocks.EMERALD_BLOCK || this == net.minecraft.init.Blocks.GOLD_BLOCK || this == net.minecraft.init.Blocks.DIAMOND_BLOCK || this == net.minecraft.init.Blocks.IRON_BLOCK; + } + + /** + * Rotate the block. For vanilla blocks this rotates around the axis passed in (generally, it should be the "face" that was hit). + * Note: for mod blocks, this is up to the block and modder to decide. It is not mandated that it be a rotation around the + * face, but could be a rotation to orient *to* that face, or a visiting of possible rotations. + * The method should return true if the rotation was successful though. + * + * @param world The world + * @param pos Block position in world + * @param axis The axis to rotate around + * @return True if the rotation was successful, False if the rotation failed, or is not possible + */ + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + IBlockState state = world.getBlockState(pos); + for (IProperty prop : state.getProperties().keySet()) + { + if ((prop.getName().equals("facing") || prop.getName().equals("rotation")) && prop.getValueClass() == EnumFacing.class) + { + Block block = state.getBlock(); + if (!(block instanceof BlockBed) && !(block instanceof BlockPistonExtension)) + { + IBlockState newState; + //noinspection unchecked + IProperty facingProperty = (IProperty) prop; + EnumFacing facing = state.getValue(facingProperty); + java.util.Collection validFacings = facingProperty.getAllowedValues(); + + // rotate horizontal facings clockwise + if (validFacings.size() == 4 && !validFacings.contains(EnumFacing.UP) && !validFacings.contains(EnumFacing.DOWN)) + { + newState = state.withProperty(facingProperty, facing.rotateY()); + } + else + { + // rotate other facings about the axis + EnumFacing rotatedFacing = facing.rotateAround(axis.getAxis()); + if (validFacings.contains(rotatedFacing)) + { + newState = state.withProperty(facingProperty, rotatedFacing); + } + else // abnormal facing property, just cycle it + { + newState = state.cycleProperty(facingProperty); + } + } + + world.setBlockState(pos, newState); + return true; + } + } + } + return false; + } + + /** + * Get the rotations that can apply to the block at the specified coordinates. Null means no rotations are possible. + * Note, this is up to the block to decide. It may not be accurate or representative. + * @param world The world + * @param pos Block position in world + * @return An array of valid axes to rotate around, or null for none or unknown + */ + @Nullable + public EnumFacing[] getValidRotations(World world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + for (IProperty prop : state.getProperties().keySet()) + { + if ((prop.getName().equals("facing") || prop.getName().equals("rotation")) && prop.getValueClass() == EnumFacing.class) + { + @SuppressWarnings("unchecked") + java.util.Collection values = ((java.util.Collection)prop.getAllowedValues()); + return values.toArray(new EnumFacing[values.size()]); + } + } + return null; + } + + /** + * Determines the amount of enchanting power this block can provide to an enchanting table. + * @param world The World + * @param pos Block position in world + * @return The amount of enchanting power this block produces. + */ + public float getEnchantPowerBonus(World world, BlockPos pos) + { + return this == net.minecraft.init.Blocks.BOOKSHELF ? 1 : 0; + } + + /** + * Common way to recolor a block with an external tool + * @param world The world + * @param pos Block position in world + * @param side The side hit with the coloring tool + * @param color The color to change to + * @return If the recoloring was successful + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public boolean recolorBlock(World world, BlockPos pos, EnumFacing side, net.minecraft.item.EnumDyeColor color) + { + IBlockState state = world.getBlockState(pos); + for (IProperty prop : state.getProperties().keySet()) + { + if (prop.getName().equals("color") && prop.getValueClass() == net.minecraft.item.EnumDyeColor.class) + { + net.minecraft.item.EnumDyeColor current = (net.minecraft.item.EnumDyeColor)state.getValue(prop); + if (current != color && prop.getAllowedValues().contains(color)) + { + world.setBlockState(pos, state.withProperty(prop, color)); + return true; + } + } + } + return false; + } + + /** + * Gathers how much experience this block drops when broken. + * + * @param state The current state + * @param world The world + * @param pos Block position + * @param fortune + * @return Amount of XP from breaking this block. + */ + public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune) + { + return 0; + } + + /** + * Called when a tile entity on a side of this block changes is created or is destroyed. + * @param world The world + * @param pos Block position in world + * @param neighbor Block position of neighbor + */ + public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor){} + + /** + * Called on an Observer block whenever an update for an Observer is received. + * + * @param observerState The Observer block's state. + * @param world The current world. + * @param observerPos The Observer block's position. + * @param changedBlock The updated block. + * @param changedBlockPos The updated block's position. + */ + public void observedNeighborChange(IBlockState observerState, World world, BlockPos observerPos, Block changedBlock, BlockPos changedBlockPos){} + + /** + * Called to determine whether to allow the a block to handle its own indirect power rather than using the default rules. + * @param world The world + * @param pos Block position in world + * @param side The INPUT side of the block to be powered - ie the opposite of this block's output side + * @return Whether Block#isProvidingWeakPower should be called when determining indirect power + */ + public boolean shouldCheckWeakPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) + { + return state.isNormalCube(); + } + + /** + * If this block should be notified of weak changes. + * Weak changes are changes 1 block away through a solid block. + * Similar to comparators. + * + * @param world The current world + * @param pos Block position in world + * @return true To be notified of changes + */ + public boolean getWeakChanges(IBlockAccess world, BlockPos pos) + { + return false; + } + + private String[] harvestTool = new String[16];; + private int[] harvestLevel = new int[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + /** + * Sets or removes the tool and level required to harvest this block. + * + * @param toolClass Class + * @param level Harvest level: + * Wood: 0 + * Stone: 1 + * Iron: 2 + * Diamond: 3 + * Gold: 0 + */ + public void setHarvestLevel(String toolClass, int level) + { + java.util.Iterator itr = getBlockState().getValidStates().iterator(); + while (itr.hasNext()) + { + setHarvestLevel(toolClass, level, itr.next()); + } + } + + /** + * Sets or removes the tool and level required to harvest this block. + * + * @param toolClass Class + * @param level Harvest level: + * Wood: 0 + * Stone: 1 + * Iron: 2 + * Diamond: 3 + * Gold: 0 + * @param state The specific state. + */ + public void setHarvestLevel(String toolClass, int level, IBlockState state) + { + int idx = this.getMetaFromState(state); + this.harvestTool[idx] = toolClass; + this.harvestLevel[idx] = level; + } + + /** + * Queries the class of tool required to harvest this block, if null is returned + * we assume that anything can harvest this block. + */ + @Nullable public String getHarvestTool(IBlockState state) + { + return harvestTool[getMetaFromState(state)]; + } + + /** + * Queries the harvest level of this item stack for the specified tool class, + * Returns -1 if this tool is not of the specified type + * + * @return Harvest level, or -1 if not the specified tool type. + */ + public int getHarvestLevel(IBlockState state) + { + return harvestLevel[getMetaFromState(state)]; + } + + /** + * Checks if the specified tool type is efficient on this block, + * meaning that it digs at full speed. + */ + public boolean isToolEffective(String type, IBlockState state) + { + if ("pickaxe".equals(type) && (this == net.minecraft.init.Blocks.REDSTONE_ORE || this == net.minecraft.init.Blocks.LIT_REDSTONE_ORE || this == net.minecraft.init.Blocks.OBSIDIAN)) + return false; + return type != null && type.equals(getHarvestTool(state)); + } + + /** + * Can return IExtendedBlockState + */ + public IBlockState getExtendedState(IBlockState state, IBlockAccess world, BlockPos pos) + { + return state; + } + + /** + * Called when the entity is inside this block, may be used to determined if the entity can breathing, + * display material overlays, or if the entity can swim inside a block. + * + * @param world that is being tested. + * @param blockpos position thats being tested. + * @param iblockstate state at world/blockpos + * @param entity that is being tested. + * @param yToTest, primarily for testingHead, which sends the the eye level of the entity, other wise it sends a y that can be tested vs liquid height. + * @param materialIn to test for. + * @param testingHead when true, its testing the entities head for vision, breathing ect... otherwise its testing the body, for swimming and movement adjustment. + * @return null for default behavior, true if the entity is within the material, false if it was not. + */ + @Nullable + public Boolean isEntityInsideMaterial(IBlockAccess world, BlockPos blockpos, IBlockState iblockstate, Entity entity, double yToTest, Material materialIn, boolean testingHead) + { + return null; + } + + /** + * Called when boats or fishing hooks are inside the block to check if they are inside + * the material requested. + * + * @param world world that is being tested. + * @param pos block thats being tested. + * @param boundingBox box to test, generally the bounds of an entity that are besting tested. + * @param materialIn to check for. + * @return null for default behavior, true if the box is within the material, false if it was not. + */ + @Nullable + public Boolean isAABBInsideMaterial(World world, BlockPos pos, AxisAlignedBB boundingBox, Material materialIn) + { + return null; + } + + /** + * Called when entities are moving to check if they are inside a liquid + * + * @param world world that is being tested. + * @param pos block thats being tested. + * @param boundingBox box to test, generally the bounds of an entity that are besting tested. + * @return null for default behavior, true if the box is within the material, false if it was not. + */ + @Nullable + public Boolean isAABBInsideLiquid(World world, BlockPos pos, AxisAlignedBB boundingBox) + { + return null; + } + + /** + * Queries if this block should render in a given layer. + * ISmartBlockModel can use {@link net.minecraftforge.client.MinecraftForgeClient#getRenderLayer()} to alter their model based on layer. + */ + public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) + { + return getBlockLayer() == layer; + } + // For Internal use only to capture droped items inside getDrops + protected static ThreadLocal captureDrops = ThreadLocal.withInitial(() -> false); + protected static ThreadLocal> capturedDrops = ThreadLocal.withInitial(NonNullList::create); + protected NonNullList captureDrops(boolean start) + { + if (start) + { + captureDrops.set(true); + capturedDrops.get().clear(); + return NonNullList.create(); + } + else + { + captureDrops.set(false); + return capturedDrops.get(); + } + } + + /** + * Sensitive version of getSoundType + * @param state The state + * @param world The world + * @param pos The position. Note that the world may not necessarily have {@code state} here! + * @param entity The entity that is breaking/stepping on/placing/hitting/falling on this block, or null if no entity is in this context + * @return A SoundType to use + */ + public SoundType getSoundType(IBlockState state, World world, BlockPos pos, @Nullable Entity entity) + { + return getSoundType(); + } + + /** + * @param state The state + * @param world The world + * @param pos The position of this state + * @param beaconPos The position of the beacon + * @return A float RGB [0.0, 1.0] array to be averaged with a beacon's existing beam color, or null to do nothing to the beam + */ + @Nullable + public float[] getBeaconColorMultiplier(IBlockState state, World world, BlockPos pos, BlockPos beaconPos) + { + return null; + } + + /** + * Use this to change the fog color used when the entity is "inside" a material. + * Vec3d is used here as "r/g/b" 0 - 1 values. + * + * @param world The world. + * @param pos The position at the entity viewport. + * @param state The state at the entity viewport. + * @param entity the entity + * @param originalColor The current fog color, You are not expected to use this, Return as the default if applicable. + * @return The new fog color. + */ + @SideOnly (Side.CLIENT) + public Vec3d getFogColor(World world, BlockPos pos, IBlockState state, Entity entity, Vec3d originalColor, float partialTicks) + { + if (state.getMaterial() == Material.WATER) + { + float f12 = 0.0F; + + if (entity instanceof net.minecraft.entity.EntityLivingBase) + { + net.minecraft.entity.EntityLivingBase ent = (net.minecraft.entity.EntityLivingBase)entity; + f12 = (float)net.minecraft.enchantment.EnchantmentHelper.getRespirationModifier(ent) * 0.2F; + + if (ent.isPotionActive(net.minecraft.init.MobEffects.WATER_BREATHING)) + { + f12 = f12 * 0.3F + 0.6F; + } + } + return new Vec3d(0.02F + f12, 0.02F + f12, 0.2F + f12); + } + else if (state.getMaterial() == Material.LAVA) + { + return new Vec3d(0.6F, 0.1F, 0.0F); + } + return originalColor; + } + + /** + * Used to determine the state 'viewed' by an entity (see + * {@link net.minecraft.client.renderer.ActiveRenderInfo#getBlockStateAtEntityViewpoint(World, Entity, float)}). + * Can be used by fluid blocks to determine if the viewpoint is within the fluid or not. + * + * @param state the state + * @param world the world + * @param pos the position + * @param viewpoint the viewpoint + * @return the block state that should be 'seen' + */ + public IBlockState getStateAtViewpoint(IBlockState state, IBlockAccess world, BlockPos pos, Vec3d viewpoint) + { + return state; + } + + /** + * Gets the {@link IBlockState} to place + * @param world The world the block is being placed in + * @param pos The position the block is being placed at + * @param facing The side the block is being placed on + * @param hitX The X coordinate of the hit vector + * @param hitY The Y coordinate of the hit vector + * @param hitZ The Z coordinate of the hit vector + * @param meta The metadata of {@link ItemStack} as processed by {@link Item#getMetadata(int)} + * @param placer The entity placing the block + * @param hand The player hand used to place this block + * @return The state to be placed in the world + */ + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { + return getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer); + } + + /** + * Determines if another block can connect to this block + * + * @param world The current world + * @param pos The position of this block + * @param facing The side the connecting block is on + * @return True to allow another block to connect to this block + */ + public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + return false; + } + + /** + * Get the {@code PathNodeType} for this block. Return {@code null} for vanilla behavior. + * + * @return the PathNodeType + */ + @Nullable + public net.minecraft.pathfinding.PathNodeType getAiPathNodeType(IBlockState state, IBlockAccess world, BlockPos pos) + { + return isBurning(world, pos) ? net.minecraft.pathfinding.PathNodeType.DAMAGE_FIRE : null; + } + + /** + * @param blockState The state for this block + * @param world The world this block is in + * @param pos The position of this block + * @param side The side of this block that the chest lid is trying to open into + * @return true if the chest should be prevented from opening by this block + */ + public boolean doesSideBlockChestOpening(IBlockState blockState, IBlockAccess world, BlockPos pos, EnumFacing side) + { + ResourceLocation registryName = this.getRegistryName(); + if (registryName != null && "minecraft".equals(registryName.getResourceDomain())) + { + // maintain the vanilla behavior of https://bugs.mojang.com/browse/MC-378 + return isNormalCube(blockState, world, pos); + } + return isSideSolid(blockState, world, pos, side); + } + + /** + * @param state The state + * @return true if the block is sticky block which used for pull or push adjacent blocks (use by piston) + */ + public boolean isStickyBlock(IBlockState state) + { + return state.getBlock() == Blocks.SLIME_BLOCK; + } + + /* ========================================= FORGE END ======================================*/ + + public static void registerBlocks() + { + registerBlock(0, AIR_ID, (new BlockAir()).setUnlocalizedName("air")); + registerBlock(1, "stone", (new BlockStone()).setHardness(1.5F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stone")); + registerBlock(2, "grass", (new BlockGrass()).setHardness(0.6F).setSoundType(SoundType.PLANT).setUnlocalizedName("grass")); + registerBlock(3, "dirt", (new BlockDirt()).setHardness(0.5F).setSoundType(SoundType.GROUND).setUnlocalizedName("dirt")); + Block block = (new Block(Material.ROCK)).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stonebrick").setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + registerBlock(4, "cobblestone", block); + Block block1 = (new BlockPlanks()).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("wood"); + registerBlock(5, "planks", block1); + registerBlock(6, "sapling", (new BlockSapling()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("sapling")); + registerBlock(7, "bedrock", (new BlockEmptyDrops(Material.ROCK)).setBlockUnbreakable().setResistance(6000000.0F).setSoundType(SoundType.STONE).setUnlocalizedName("bedrock").disableStats().setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(8, "flowing_water", (new BlockDynamicLiquid(Material.WATER)).setHardness(100.0F).setLightOpacity(3).setUnlocalizedName("water").disableStats()); + registerBlock(9, "water", (new BlockStaticLiquid(Material.WATER)).setHardness(100.0F).setLightOpacity(3).setUnlocalizedName("water").disableStats()); + registerBlock(10, "flowing_lava", (new BlockDynamicLiquid(Material.LAVA)).setHardness(100.0F).setLightLevel(1.0F).setUnlocalizedName("lava").disableStats()); + registerBlock(11, "lava", (new BlockStaticLiquid(Material.LAVA)).setHardness(100.0F).setLightLevel(1.0F).setUnlocalizedName("lava").disableStats()); + registerBlock(12, "sand", (new BlockSand()).setHardness(0.5F).setSoundType(SoundType.SAND).setUnlocalizedName("sand")); + registerBlock(13, "gravel", (new BlockGravel()).setHardness(0.6F).setSoundType(SoundType.GROUND).setUnlocalizedName("gravel")); + registerBlock(14, "gold_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreGold")); + registerBlock(15, "iron_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreIron")); + registerBlock(16, "coal_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreCoal")); + registerBlock(17, "log", (new BlockOldLog()).setUnlocalizedName("log")); + registerBlock(18, "leaves", (new BlockOldLeaf()).setUnlocalizedName("leaves")); + registerBlock(19, "sponge", (new BlockSponge()).setHardness(0.6F).setSoundType(SoundType.PLANT).setUnlocalizedName("sponge")); + registerBlock(20, "glass", (new BlockGlass(Material.GLASS, false)).setHardness(0.3F).setSoundType(SoundType.GLASS).setUnlocalizedName("glass")); + registerBlock(21, "lapis_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreLapis")); + registerBlock(22, "lapis_block", (new Block(Material.IRON, MapColor.LAPIS)).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("blockLapis").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(23, "dispenser", (new BlockDispenser()).setHardness(3.5F).setSoundType(SoundType.STONE).setUnlocalizedName("dispenser")); + Block block2 = (new BlockSandStone()).setSoundType(SoundType.STONE).setHardness(0.8F).setUnlocalizedName("sandStone"); + registerBlock(24, "sandstone", block2); + registerBlock(25, "noteblock", (new BlockNote()).setSoundType(SoundType.WOOD).setHardness(0.8F).setUnlocalizedName("musicBlock")); + registerBlock(26, "bed", (new BlockBed()).setSoundType(SoundType.WOOD).setHardness(0.2F).setUnlocalizedName("bed").disableStats()); + registerBlock(27, "golden_rail", (new BlockRailPowered()).setHardness(0.7F).setSoundType(SoundType.METAL).setUnlocalizedName("goldenRail")); + registerBlock(28, "detector_rail", (new BlockRailDetector()).setHardness(0.7F).setSoundType(SoundType.METAL).setUnlocalizedName("detectorRail")); + registerBlock(29, "sticky_piston", (new BlockPistonBase(true)).setUnlocalizedName("pistonStickyBase")); + registerBlock(30, "web", (new BlockWeb()).setLightOpacity(1).setHardness(4.0F).setUnlocalizedName("web")); + registerBlock(31, "tallgrass", (new BlockTallGrass()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("tallgrass")); + registerBlock(32, "deadbush", (new BlockDeadBush()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("deadbush")); + registerBlock(33, "piston", (new BlockPistonBase(false)).setUnlocalizedName("pistonBase")); + registerBlock(34, "piston_head", (new BlockPistonExtension()).setUnlocalizedName("pistonBase")); + registerBlock(35, "wool", (new BlockColored(Material.CLOTH)).setHardness(0.8F).setSoundType(SoundType.CLOTH).setUnlocalizedName("cloth")); + registerBlock(36, "piston_extension", new BlockPistonMoving()); + registerBlock(37, "yellow_flower", (new BlockYellowFlower()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("flower1")); + registerBlock(38, "red_flower", (new BlockRedFlower()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("flower2")); + Block block3 = (new BlockMushroom()).setHardness(0.0F).setSoundType(SoundType.PLANT).setLightLevel(0.125F).setUnlocalizedName("mushroom"); + registerBlock(39, "brown_mushroom", block3); + Block block4 = (new BlockMushroom()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("mushroom"); + registerBlock(40, "red_mushroom", block4); + registerBlock(41, "gold_block", (new Block(Material.IRON, MapColor.GOLD)).setHardness(3.0F).setResistance(10.0F).setSoundType(SoundType.METAL).setUnlocalizedName("blockGold").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(42, "iron_block", (new Block(Material.IRON, MapColor.IRON)).setHardness(5.0F).setResistance(10.0F).setSoundType(SoundType.METAL).setUnlocalizedName("blockIron").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(43, "double_stone_slab", (new BlockDoubleStoneSlab()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stoneSlab")); + registerBlock(44, "stone_slab", (new BlockHalfStoneSlab()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stoneSlab")); + Block block5 = (new Block(Material.ROCK, MapColor.RED)).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("brick").setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + registerBlock(45, "brick_block", block5); + registerBlock(46, "tnt", (new BlockTNT()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("tnt")); + registerBlock(47, "bookshelf", (new BlockBookshelf()).setHardness(1.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("bookshelf")); + registerBlock(48, "mossy_cobblestone", (new Block(Material.ROCK)).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stoneMoss").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(49, "obsidian", (new BlockObsidian()).setHardness(50.0F).setResistance(2000.0F).setSoundType(SoundType.STONE).setUnlocalizedName("obsidian")); + registerBlock(50, "torch", (new BlockTorch()).setHardness(0.0F).setLightLevel(0.9375F).setSoundType(SoundType.WOOD).setUnlocalizedName("torch")); + registerBlock(51, "fire", (new BlockFire()).setHardness(0.0F).setLightLevel(1.0F).setSoundType(SoundType.CLOTH).setUnlocalizedName("fire").disableStats()); + registerBlock(52, "mob_spawner", (new BlockMobSpawner()).setHardness(5.0F).setSoundType(SoundType.METAL).setUnlocalizedName("mobSpawner").disableStats()); + registerBlock(53, "oak_stairs", (new BlockStairs(block1.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.OAK))).setUnlocalizedName("stairsWood")); + registerBlock(54, "chest", (new BlockChest(BlockChest.Type.BASIC)).setHardness(2.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("chest")); + registerBlock(55, "redstone_wire", (new BlockRedstoneWire()).setHardness(0.0F).setSoundType(SoundType.STONE).setUnlocalizedName("redstoneDust").disableStats()); + registerBlock(56, "diamond_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreDiamond")); + registerBlock(57, "diamond_block", (new Block(Material.IRON, MapColor.DIAMOND)).setHardness(5.0F).setResistance(10.0F).setSoundType(SoundType.METAL).setUnlocalizedName("blockDiamond").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(58, "crafting_table", (new BlockWorkbench()).setHardness(2.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("workbench")); + registerBlock(59, "wheat", (new BlockCrops()).setUnlocalizedName("crops")); + Block block6 = (new BlockFarmland()).setHardness(0.6F).setSoundType(SoundType.GROUND).setUnlocalizedName("farmland"); + registerBlock(60, "farmland", block6); + registerBlock(61, "furnace", (new BlockFurnace(false)).setHardness(3.5F).setSoundType(SoundType.STONE).setUnlocalizedName("furnace").setCreativeTab(CreativeTabs.DECORATIONS)); + registerBlock(62, "lit_furnace", (new BlockFurnace(true)).setHardness(3.5F).setSoundType(SoundType.STONE).setLightLevel(0.875F).setUnlocalizedName("furnace")); + registerBlock(63, "standing_sign", (new BlockStandingSign()).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("sign").disableStats()); + registerBlock(64, "wooden_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("doorOak").disableStats()); + registerBlock(65, "ladder", (new BlockLadder()).setHardness(0.4F).setSoundType(SoundType.LADDER).setUnlocalizedName("ladder")); + registerBlock(66, "rail", (new BlockRail()).setHardness(0.7F).setSoundType(SoundType.METAL).setUnlocalizedName("rail")); + registerBlock(67, "stone_stairs", (new BlockStairs(block.getDefaultState())).setUnlocalizedName("stairsStone")); + registerBlock(68, "wall_sign", (new BlockWallSign()).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("sign").disableStats()); + registerBlock(69, "lever", (new BlockLever()).setHardness(0.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("lever")); + registerBlock(70, "stone_pressure_plate", (new BlockPressurePlate(Material.ROCK, BlockPressurePlate.Sensitivity.MOBS)).setHardness(0.5F).setSoundType(SoundType.STONE).setUnlocalizedName("pressurePlateStone")); + registerBlock(71, "iron_door", (new BlockDoor(Material.IRON)).setHardness(5.0F).setSoundType(SoundType.METAL).setUnlocalizedName("doorIron").disableStats()); + registerBlock(72, "wooden_pressure_plate", (new BlockPressurePlate(Material.WOOD, BlockPressurePlate.Sensitivity.EVERYTHING)).setHardness(0.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("pressurePlateWood")); + registerBlock(73, "redstone_ore", (new BlockRedstoneOre(false)).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreRedstone").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(74, "lit_redstone_ore", (new BlockRedstoneOre(true)).setLightLevel(0.625F).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreRedstone")); + registerBlock(75, "unlit_redstone_torch", (new BlockRedstoneTorch(false)).setHardness(0.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("notGate")); + registerBlock(76, "redstone_torch", (new BlockRedstoneTorch(true)).setHardness(0.0F).setLightLevel(0.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("notGate").setCreativeTab(CreativeTabs.REDSTONE)); + registerBlock(77, "stone_button", (new BlockButtonStone()).setHardness(0.5F).setSoundType(SoundType.STONE).setUnlocalizedName("button")); + registerBlock(78, "snow_layer", (new BlockSnow()).setHardness(0.1F).setSoundType(SoundType.SNOW).setUnlocalizedName("snow").setLightOpacity(0)); + registerBlock(79, "ice", (new BlockIce()).setHardness(0.5F).setLightOpacity(3).setSoundType(SoundType.GLASS).setUnlocalizedName("ice")); + registerBlock(80, "snow", (new BlockSnowBlock()).setHardness(0.2F).setSoundType(SoundType.SNOW).setUnlocalizedName("snow")); + registerBlock(81, "cactus", (new BlockCactus()).setHardness(0.4F).setSoundType(SoundType.CLOTH).setUnlocalizedName("cactus")); + registerBlock(82, "clay", (new BlockClay()).setHardness(0.6F).setSoundType(SoundType.GROUND).setUnlocalizedName("clay")); + registerBlock(83, "reeds", (new BlockReed()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("reeds").disableStats()); + registerBlock(84, "jukebox", (new BlockJukebox()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("jukebox")); + registerBlock(85, "fence", (new BlockFence(Material.WOOD, BlockPlanks.EnumType.OAK.getMapColor())).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("fence")); + Block block7 = (new BlockPumpkin()).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("pumpkin"); + registerBlock(86, "pumpkin", block7); + registerBlock(87, "netherrack", (new BlockNetherrack()).setHardness(0.4F).setSoundType(SoundType.STONE).setUnlocalizedName("hellrock")); + registerBlock(88, "soul_sand", (new BlockSoulSand()).setHardness(0.5F).setSoundType(SoundType.SAND).setUnlocalizedName("hellsand")); + registerBlock(89, "glowstone", (new BlockGlowstone(Material.GLASS)).setHardness(0.3F).setSoundType(SoundType.GLASS).setLightLevel(1.0F).setUnlocalizedName("lightgem")); + registerBlock(90, "portal", (new BlockPortal()).setHardness(-1.0F).setSoundType(SoundType.GLASS).setLightLevel(0.75F).setUnlocalizedName("portal")); + registerBlock(91, "lit_pumpkin", (new BlockPumpkin()).setHardness(1.0F).setSoundType(SoundType.WOOD).setLightLevel(1.0F).setUnlocalizedName("litpumpkin")); + registerBlock(92, "cake", (new BlockCake()).setHardness(0.5F).setSoundType(SoundType.CLOTH).setUnlocalizedName("cake").disableStats()); + registerBlock(93, "unpowered_repeater", (new BlockRedstoneRepeater(false)).setHardness(0.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("diode").disableStats()); + registerBlock(94, "powered_repeater", (new BlockRedstoneRepeater(true)).setHardness(0.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("diode").disableStats()); + registerBlock(95, "stained_glass", (new BlockStainedGlass(Material.GLASS)).setHardness(0.3F).setSoundType(SoundType.GLASS).setUnlocalizedName("stainedGlass")); + registerBlock(96, "trapdoor", (new BlockTrapDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("trapdoor").disableStats()); + registerBlock(97, "monster_egg", (new BlockSilverfish()).setHardness(0.75F).setUnlocalizedName("monsterStoneEgg")); + Block block8 = (new BlockStoneBrick()).setHardness(1.5F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stonebricksmooth"); + registerBlock(98, "stonebrick", block8); + registerBlock(99, "brown_mushroom_block", (new BlockHugeMushroom(Material.WOOD, MapColor.DIRT, block3)).setHardness(0.2F).setSoundType(SoundType.WOOD).setUnlocalizedName("mushroom")); + registerBlock(100, "red_mushroom_block", (new BlockHugeMushroom(Material.WOOD, MapColor.RED, block4)).setHardness(0.2F).setSoundType(SoundType.WOOD).setUnlocalizedName("mushroom")); + registerBlock(101, "iron_bars", (new BlockPane(Material.IRON, true)).setHardness(5.0F).setResistance(10.0F).setSoundType(SoundType.METAL).setUnlocalizedName("fenceIron")); + registerBlock(102, "glass_pane", (new BlockPane(Material.GLASS, false)).setHardness(0.3F).setSoundType(SoundType.GLASS).setUnlocalizedName("thinGlass")); + Block block9 = (new BlockMelon()).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("melon"); + registerBlock(103, "melon_block", block9); + registerBlock(104, "pumpkin_stem", (new BlockStem(block7)).setHardness(0.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("pumpkinStem")); + registerBlock(105, "melon_stem", (new BlockStem(block9)).setHardness(0.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("pumpkinStem")); + registerBlock(106, "vine", (new BlockVine()).setHardness(0.2F).setSoundType(SoundType.PLANT).setUnlocalizedName("vine")); + registerBlock(107, "fence_gate", (new BlockFenceGate(BlockPlanks.EnumType.OAK)).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("fenceGate")); + registerBlock(108, "brick_stairs", (new BlockStairs(block5.getDefaultState())).setUnlocalizedName("stairsBrick")); + registerBlock(109, "stone_brick_stairs", (new BlockStairs(block8.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.DEFAULT))).setUnlocalizedName("stairsStoneBrickSmooth")); + registerBlock(110, "mycelium", (new BlockMycelium()).setHardness(0.6F).setSoundType(SoundType.PLANT).setUnlocalizedName("mycel")); + registerBlock(111, "waterlily", (new BlockLilyPad()).setHardness(0.0F).setSoundType(SoundType.PLANT).setUnlocalizedName("waterlily")); + Block block10 = (new BlockNetherBrick()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("netherBrick").setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + registerBlock(112, "nether_brick", block10); + registerBlock(113, "nether_brick_fence", (new BlockFence(Material.ROCK, MapColor.NETHERRACK)).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("netherFence")); + registerBlock(114, "nether_brick_stairs", (new BlockStairs(block10.getDefaultState())).setUnlocalizedName("stairsNetherBrick")); + registerBlock(115, "nether_wart", (new BlockNetherWart()).setUnlocalizedName("netherStalk")); + registerBlock(116, "enchanting_table", (new BlockEnchantmentTable()).setHardness(5.0F).setResistance(2000.0F).setUnlocalizedName("enchantmentTable")); + registerBlock(117, "brewing_stand", (new BlockBrewingStand()).setHardness(0.5F).setLightLevel(0.125F).setUnlocalizedName("brewingStand")); + registerBlock(118, "cauldron", (new BlockCauldron()).setHardness(2.0F).setUnlocalizedName("cauldron")); + registerBlock(119, "end_portal", (new BlockEndPortal(Material.PORTAL)).setHardness(-1.0F).setResistance(6000000.0F)); + registerBlock(120, "end_portal_frame", (new BlockEndPortalFrame()).setSoundType(SoundType.GLASS).setLightLevel(0.125F).setHardness(-1.0F).setUnlocalizedName("endPortalFrame").setResistance(6000000.0F).setCreativeTab(CreativeTabs.DECORATIONS)); + registerBlock(121, "end_stone", (new Block(Material.ROCK, MapColor.SAND)).setHardness(3.0F).setResistance(15.0F).setSoundType(SoundType.STONE).setUnlocalizedName("whiteStone").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(122, "dragon_egg", (new BlockDragonEgg()).setHardness(3.0F).setResistance(15.0F).setSoundType(SoundType.STONE).setLightLevel(0.125F).setUnlocalizedName("dragonEgg")); + registerBlock(123, "redstone_lamp", (new BlockRedstoneLight(false)).setHardness(0.3F).setSoundType(SoundType.GLASS).setUnlocalizedName("redstoneLight").setCreativeTab(CreativeTabs.REDSTONE)); + registerBlock(124, "lit_redstone_lamp", (new BlockRedstoneLight(true)).setHardness(0.3F).setSoundType(SoundType.GLASS).setUnlocalizedName("redstoneLight")); + registerBlock(125, "double_wooden_slab", (new BlockDoubleWoodSlab()).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("woodSlab")); + registerBlock(126, "wooden_slab", (new BlockHalfWoodSlab()).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("woodSlab")); + registerBlock(127, "cocoa", (new BlockCocoa()).setHardness(0.2F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("cocoa")); + registerBlock(128, "sandstone_stairs", (new BlockStairs(block2.getDefaultState().withProperty(BlockSandStone.TYPE, BlockSandStone.EnumType.SMOOTH))).setUnlocalizedName("stairsSandStone")); + registerBlock(129, "emerald_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("oreEmerald")); + registerBlock(130, "ender_chest", (new BlockEnderChest()).setHardness(22.5F).setResistance(1000.0F).setSoundType(SoundType.STONE).setUnlocalizedName("enderChest").setLightLevel(0.5F)); + registerBlock(131, "tripwire_hook", (new BlockTripWireHook()).setUnlocalizedName("tripWireSource")); + registerBlock(132, "tripwire", (new BlockTripWire()).setUnlocalizedName("tripWire")); + registerBlock(133, "emerald_block", (new Block(Material.IRON, MapColor.EMERALD)).setHardness(5.0F).setResistance(10.0F).setSoundType(SoundType.METAL).setUnlocalizedName("blockEmerald").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(134, "spruce_stairs", (new BlockStairs(block1.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.SPRUCE))).setUnlocalizedName("stairsWoodSpruce")); + registerBlock(135, "birch_stairs", (new BlockStairs(block1.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.BIRCH))).setUnlocalizedName("stairsWoodBirch")); + registerBlock(136, "jungle_stairs", (new BlockStairs(block1.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.JUNGLE))).setUnlocalizedName("stairsWoodJungle")); + registerBlock(137, "command_block", (new BlockCommandBlock(MapColor.BROWN)).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("commandBlock")); + registerBlock(138, "beacon", (new BlockBeacon()).setUnlocalizedName("beacon").setLightLevel(1.0F)); + registerBlock(139, "cobblestone_wall", (new BlockWall(block)).setUnlocalizedName("cobbleWall")); + registerBlock(140, "flower_pot", (new BlockFlowerPot()).setHardness(0.0F).setSoundType(SoundType.STONE).setUnlocalizedName("flowerPot")); + registerBlock(141, "carrots", (new BlockCarrot()).setUnlocalizedName("carrots")); + registerBlock(142, "potatoes", (new BlockPotato()).setUnlocalizedName("potatoes")); + registerBlock(143, "wooden_button", (new BlockButtonWood()).setHardness(0.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("button")); + registerBlock(144, "skull", (new BlockSkull()).setHardness(1.0F).setSoundType(SoundType.STONE).setUnlocalizedName("skull")); + registerBlock(145, "anvil", (new BlockAnvil()).setHardness(5.0F).setSoundType(SoundType.ANVIL).setResistance(2000.0F).setUnlocalizedName("anvil")); + registerBlock(146, "trapped_chest", (new BlockChest(BlockChest.Type.TRAP)).setHardness(2.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("chestTrap")); + registerBlock(147, "light_weighted_pressure_plate", (new BlockPressurePlateWeighted(Material.IRON, 15, MapColor.GOLD)).setHardness(0.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("weightedPlate_light")); + registerBlock(148, "heavy_weighted_pressure_plate", (new BlockPressurePlateWeighted(Material.IRON, 150)).setHardness(0.5F).setSoundType(SoundType.WOOD).setUnlocalizedName("weightedPlate_heavy")); + registerBlock(149, "unpowered_comparator", (new BlockRedstoneComparator(false)).setHardness(0.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("comparator").disableStats()); + registerBlock(150, "powered_comparator", (new BlockRedstoneComparator(true)).setHardness(0.0F).setLightLevel(0.625F).setSoundType(SoundType.WOOD).setUnlocalizedName("comparator").disableStats()); + registerBlock(151, "daylight_detector", new BlockDaylightDetector(false)); + registerBlock(152, "redstone_block", (new BlockCompressedPowered(Material.IRON, MapColor.TNT)).setHardness(5.0F).setResistance(10.0F).setSoundType(SoundType.METAL).setUnlocalizedName("blockRedstone").setCreativeTab(CreativeTabs.REDSTONE)); + registerBlock(153, "quartz_ore", (new BlockOre(MapColor.NETHERRACK)).setHardness(3.0F).setResistance(5.0F).setSoundType(SoundType.STONE).setUnlocalizedName("netherquartz")); + registerBlock(154, "hopper", (new BlockHopper()).setHardness(3.0F).setResistance(8.0F).setSoundType(SoundType.METAL).setUnlocalizedName("hopper")); + Block block11 = (new BlockQuartz()).setSoundType(SoundType.STONE).setHardness(0.8F).setUnlocalizedName("quartzBlock"); + registerBlock(155, "quartz_block", block11); + registerBlock(156, "quartz_stairs", (new BlockStairs(block11.getDefaultState().withProperty(BlockQuartz.VARIANT, BlockQuartz.EnumType.DEFAULT))).setUnlocalizedName("stairsQuartz")); + registerBlock(157, "activator_rail", (new BlockRailPowered(true)).setHardness(0.7F).setSoundType(SoundType.METAL).setUnlocalizedName("activatorRail")); + registerBlock(158, "dropper", (new BlockDropper()).setHardness(3.5F).setSoundType(SoundType.STONE).setUnlocalizedName("dropper")); + registerBlock(159, "stained_hardened_clay", (new BlockStainedHardenedClay()).setHardness(1.25F).setResistance(7.0F).setSoundType(SoundType.STONE).setUnlocalizedName("clayHardenedStained")); + registerBlock(160, "stained_glass_pane", (new BlockStainedGlassPane()).setHardness(0.3F).setSoundType(SoundType.GLASS).setUnlocalizedName("thinStainedGlass")); + registerBlock(161, "leaves2", (new BlockNewLeaf()).setUnlocalizedName("leaves")); + registerBlock(162, "log2", (new BlockNewLog()).setUnlocalizedName("log")); + registerBlock(163, "acacia_stairs", (new BlockStairs(block1.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.ACACIA))).setUnlocalizedName("stairsWoodAcacia")); + registerBlock(164, "dark_oak_stairs", (new BlockStairs(block1.getDefaultState().withProperty(BlockPlanks.VARIANT, BlockPlanks.EnumType.DARK_OAK))).setUnlocalizedName("stairsWoodDarkOak")); + registerBlock(165, "slime", (new BlockSlime()).setUnlocalizedName("slime").setSoundType(SoundType.SLIME)); + registerBlock(166, "barrier", (new BlockBarrier()).setUnlocalizedName("barrier")); + registerBlock(167, "iron_trapdoor", (new BlockTrapDoor(Material.IRON)).setHardness(5.0F).setSoundType(SoundType.METAL).setUnlocalizedName("ironTrapdoor").disableStats()); + registerBlock(168, "prismarine", (new BlockPrismarine()).setHardness(1.5F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("prismarine")); + registerBlock(169, "sea_lantern", (new BlockSeaLantern(Material.GLASS)).setHardness(0.3F).setSoundType(SoundType.GLASS).setLightLevel(1.0F).setUnlocalizedName("seaLantern")); + registerBlock(170, "hay_block", (new BlockHay()).setHardness(0.5F).setSoundType(SoundType.PLANT).setUnlocalizedName("hayBlock").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(171, "carpet", (new BlockCarpet()).setHardness(0.1F).setSoundType(SoundType.CLOTH).setUnlocalizedName("woolCarpet").setLightOpacity(0)); + registerBlock(172, "hardened_clay", (new BlockHardenedClay()).setHardness(1.25F).setResistance(7.0F).setSoundType(SoundType.STONE).setUnlocalizedName("clayHardened")); + registerBlock(173, "coal_block", (new Block(Material.ROCK, MapColor.BLACK)).setHardness(5.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("blockCoal").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(174, "packed_ice", (new BlockPackedIce()).setHardness(0.5F).setSoundType(SoundType.GLASS).setUnlocalizedName("icePacked")); + registerBlock(175, "double_plant", new BlockDoublePlant()); + registerBlock(176, "standing_banner", (new BlockBanner.BlockBannerStanding()).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("banner").disableStats()); + registerBlock(177, "wall_banner", (new BlockBanner.BlockBannerHanging()).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("banner").disableStats()); + registerBlock(178, "daylight_detector_inverted", new BlockDaylightDetector(true)); + Block block12 = (new BlockRedSandstone()).setSoundType(SoundType.STONE).setHardness(0.8F).setUnlocalizedName("redSandStone"); + registerBlock(179, "red_sandstone", block12); + registerBlock(180, "red_sandstone_stairs", (new BlockStairs(block12.getDefaultState().withProperty(BlockRedSandstone.TYPE, BlockRedSandstone.EnumType.SMOOTH))).setUnlocalizedName("stairsRedSandStone")); + registerBlock(181, "double_stone_slab2", (new BlockDoubleStoneSlabNew()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stoneSlab2")); + registerBlock(182, "stone_slab2", (new BlockHalfStoneSlabNew()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("stoneSlab2")); + registerBlock(183, "spruce_fence_gate", (new BlockFenceGate(BlockPlanks.EnumType.SPRUCE)).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("spruceFenceGate")); + registerBlock(184, "birch_fence_gate", (new BlockFenceGate(BlockPlanks.EnumType.BIRCH)).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("birchFenceGate")); + registerBlock(185, "jungle_fence_gate", (new BlockFenceGate(BlockPlanks.EnumType.JUNGLE)).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("jungleFenceGate")); + registerBlock(186, "dark_oak_fence_gate", (new BlockFenceGate(BlockPlanks.EnumType.DARK_OAK)).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("darkOakFenceGate")); + registerBlock(187, "acacia_fence_gate", (new BlockFenceGate(BlockPlanks.EnumType.ACACIA)).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("acaciaFenceGate")); + registerBlock(188, "spruce_fence", (new BlockFence(Material.WOOD, BlockPlanks.EnumType.SPRUCE.getMapColor())).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("spruceFence")); + registerBlock(189, "birch_fence", (new BlockFence(Material.WOOD, BlockPlanks.EnumType.BIRCH.getMapColor())).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("birchFence")); + registerBlock(190, "jungle_fence", (new BlockFence(Material.WOOD, BlockPlanks.EnumType.JUNGLE.getMapColor())).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("jungleFence")); + registerBlock(191, "dark_oak_fence", (new BlockFence(Material.WOOD, BlockPlanks.EnumType.DARK_OAK.getMapColor())).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("darkOakFence")); + registerBlock(192, "acacia_fence", (new BlockFence(Material.WOOD, BlockPlanks.EnumType.ACACIA.getMapColor())).setHardness(2.0F).setResistance(5.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("acaciaFence")); + registerBlock(193, "spruce_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("doorSpruce").disableStats()); + registerBlock(194, "birch_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("doorBirch").disableStats()); + registerBlock(195, "jungle_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("doorJungle").disableStats()); + registerBlock(196, "acacia_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("doorAcacia").disableStats()); + registerBlock(197, "dark_oak_door", (new BlockDoor(Material.WOOD)).setHardness(3.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("doorDarkOak").disableStats()); + registerBlock(198, "end_rod", (new BlockEndRod()).setHardness(0.0F).setLightLevel(0.9375F).setSoundType(SoundType.WOOD).setUnlocalizedName("endRod")); + registerBlock(199, "chorus_plant", (new BlockChorusPlant()).setHardness(0.4F).setSoundType(SoundType.WOOD).setUnlocalizedName("chorusPlant")); + registerBlock(200, "chorus_flower", (new BlockChorusFlower()).setHardness(0.4F).setSoundType(SoundType.WOOD).setUnlocalizedName("chorusFlower")); + Block block13 = (new Block(Material.ROCK, MapColor.MAGENTA)).setHardness(1.5F).setResistance(10.0F).setSoundType(SoundType.STONE).setCreativeTab(CreativeTabs.BUILDING_BLOCKS).setUnlocalizedName("purpurBlock"); + registerBlock(201, "purpur_block", block13); + registerBlock(202, "purpur_pillar", (new BlockRotatedPillar(Material.ROCK, MapColor.MAGENTA)).setHardness(1.5F).setResistance(10.0F).setSoundType(SoundType.STONE).setCreativeTab(CreativeTabs.BUILDING_BLOCKS).setUnlocalizedName("purpurPillar")); + registerBlock(203, "purpur_stairs", (new BlockStairs(block13.getDefaultState())).setUnlocalizedName("stairsPurpur")); + registerBlock(204, "purpur_double_slab", (new BlockPurpurSlab.Double()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("purpurSlab")); + registerBlock(205, "purpur_slab", (new BlockPurpurSlab.Half()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("purpurSlab")); + registerBlock(206, "end_bricks", (new Block(Material.ROCK, MapColor.SAND)).setSoundType(SoundType.STONE).setHardness(0.8F).setCreativeTab(CreativeTabs.BUILDING_BLOCKS).setUnlocalizedName("endBricks")); + registerBlock(207, "beetroots", (new BlockBeetroot()).setUnlocalizedName("beetroots")); + Block block14 = (new BlockGrassPath()).setHardness(0.65F).setSoundType(SoundType.PLANT).setUnlocalizedName("grassPath").disableStats(); + registerBlock(208, "grass_path", block14); + registerBlock(209, "end_gateway", (new BlockEndGateway(Material.PORTAL)).setHardness(-1.0F).setResistance(6000000.0F)); + registerBlock(210, "repeating_command_block", (new BlockCommandBlock(MapColor.PURPLE)).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("repeatingCommandBlock")); + registerBlock(211, "chain_command_block", (new BlockCommandBlock(MapColor.GREEN)).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("chainCommandBlock")); + registerBlock(212, "frosted_ice", (new BlockFrostedIce()).setHardness(0.5F).setLightOpacity(3).setSoundType(SoundType.GLASS).setUnlocalizedName("frostedIce")); + registerBlock(213, "magma", (new BlockMagma()).setHardness(0.5F).setSoundType(SoundType.STONE).setUnlocalizedName("magma")); + registerBlock(214, "nether_wart_block", (new Block(Material.GRASS, MapColor.RED)).setCreativeTab(CreativeTabs.BUILDING_BLOCKS).setHardness(1.0F).setSoundType(SoundType.WOOD).setUnlocalizedName("netherWartBlock")); + registerBlock(215, "red_nether_brick", (new BlockNetherBrick()).setHardness(2.0F).setResistance(10.0F).setSoundType(SoundType.STONE).setUnlocalizedName("redNetherBrick").setCreativeTab(CreativeTabs.BUILDING_BLOCKS)); + registerBlock(216, "bone_block", (new BlockBone()).setUnlocalizedName("boneBlock")); + registerBlock(217, "structure_void", (new BlockStructureVoid()).setUnlocalizedName("structureVoid")); + registerBlock(218, "observer", (new BlockObserver()).setHardness(3.0F).setUnlocalizedName("observer")); + registerBlock(219, "white_shulker_box", (new BlockShulkerBox(EnumDyeColor.WHITE)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxWhite")); + registerBlock(220, "orange_shulker_box", (new BlockShulkerBox(EnumDyeColor.ORANGE)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxOrange")); + registerBlock(221, "magenta_shulker_box", (new BlockShulkerBox(EnumDyeColor.MAGENTA)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxMagenta")); + registerBlock(222, "light_blue_shulker_box", (new BlockShulkerBox(EnumDyeColor.LIGHT_BLUE)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxLightBlue")); + registerBlock(223, "yellow_shulker_box", (new BlockShulkerBox(EnumDyeColor.YELLOW)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxYellow")); + registerBlock(224, "lime_shulker_box", (new BlockShulkerBox(EnumDyeColor.LIME)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxLime")); + registerBlock(225, "pink_shulker_box", (new BlockShulkerBox(EnumDyeColor.PINK)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxPink")); + registerBlock(226, "gray_shulker_box", (new BlockShulkerBox(EnumDyeColor.GRAY)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxGray")); + registerBlock(227, "silver_shulker_box", (new BlockShulkerBox(EnumDyeColor.SILVER)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxSilver")); + registerBlock(228, "cyan_shulker_box", (new BlockShulkerBox(EnumDyeColor.CYAN)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxCyan")); + registerBlock(229, "purple_shulker_box", (new BlockShulkerBox(EnumDyeColor.PURPLE)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxPurple")); + registerBlock(230, "blue_shulker_box", (new BlockShulkerBox(EnumDyeColor.BLUE)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxBlue")); + registerBlock(231, "brown_shulker_box", (new BlockShulkerBox(EnumDyeColor.BROWN)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxBrown")); + registerBlock(232, "green_shulker_box", (new BlockShulkerBox(EnumDyeColor.GREEN)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxGreen")); + registerBlock(233, "red_shulker_box", (new BlockShulkerBox(EnumDyeColor.RED)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxRed")); + registerBlock(234, "black_shulker_box", (new BlockShulkerBox(EnumDyeColor.BLACK)).setHardness(2.0F).setSoundType(SoundType.STONE).setUnlocalizedName("shulkerBoxBlack")); + registerBlock(235, "white_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.WHITE)); + registerBlock(236, "orange_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.ORANGE)); + registerBlock(237, "magenta_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.MAGENTA)); + registerBlock(238, "light_blue_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.LIGHT_BLUE)); + registerBlock(239, "yellow_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.YELLOW)); + registerBlock(240, "lime_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.LIME)); + registerBlock(241, "pink_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.PINK)); + registerBlock(242, "gray_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.GRAY)); + registerBlock(243, "silver_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.SILVER)); + registerBlock(244, "cyan_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.CYAN)); + registerBlock(245, "purple_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.PURPLE)); + registerBlock(246, "blue_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.BLUE)); + registerBlock(247, "brown_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.BROWN)); + registerBlock(248, "green_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.GREEN)); + registerBlock(249, "red_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.RED)); + registerBlock(250, "black_glazed_terracotta", new BlockGlazedTerracotta(EnumDyeColor.BLACK)); + registerBlock(251, "concrete", (new BlockColored(Material.ROCK)).setHardness(1.8F).setSoundType(SoundType.STONE).setUnlocalizedName("concrete")); + registerBlock(252, "concrete_powder", (new BlockConcretePowder()).setHardness(0.5F).setSoundType(SoundType.SAND).setUnlocalizedName("concretePowder")); + registerBlock(255, "structure_block", (new BlockStructure()).setBlockUnbreakable().setResistance(6000000.0F).setUnlocalizedName("structureBlock")); + REGISTRY.validateKey(); + + for (Block block15 : REGISTRY) + { + if (block15.blockMaterial == Material.AIR) + { + block15.useNeighborBrightness = false; + } + else + { + boolean flag = false; + boolean flag1 = block15 instanceof BlockStairs; + boolean flag2 = block15 instanceof BlockSlab; + boolean flag3 = block15 == block6 || block15 == block14; + boolean flag4 = block15.translucent; + boolean flag5 = block15.lightOpacity == 0; + + if (flag1 || flag2 || flag3 || flag4 || flag5) + { + flag = true; + } + + block15.useNeighborBrightness = flag; + } + } + } + + private static void registerBlock(int id, ResourceLocation textualID, Block block_) + { + REGISTRY.register(id, textualID, block_); + } + + private static void registerBlock(int id, String textualID, Block block_) + { + registerBlock(id, new ResourceLocation(textualID), block_); + } + + public static enum EnumOffsetType + { + NONE, + XZ, + XYZ; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockAir.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockAir.java new file mode 100644 index 0000000..2a7b00f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockAir.java @@ -0,0 +1,82 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockAir extends Block +{ + protected BlockAir() + { + super(Material.AIR); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) + { + return false; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockAnvil.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockAnvil.java new file mode 100644 index 0000000..1665888 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockAnvil.java @@ -0,0 +1,243 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerRepair; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.IInteractionObject; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class BlockAnvil extends BlockFalling +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyInteger DAMAGE = PropertyInteger.create("damage", 0, 2); + protected static final AxisAlignedBB X_AXIS_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.125D, 1.0D, 1.0D, 0.875D); + protected static final AxisAlignedBB Z_AXIS_AABB = new AxisAlignedBB(0.125D, 0.0D, 0.0D, 0.875D, 1.0D, 1.0D); + protected static final Logger LOGGER = LogManager.getLogger(); + + protected BlockAnvil() + { + super(Material.ANVIL); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(DAMAGE, Integer.valueOf(0))); + this.setLightOpacity(0); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + EnumFacing enumfacing = placer.getHorizontalFacing().rotateY(); + + try + { + return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(FACING, enumfacing).withProperty(DAMAGE, Integer.valueOf(meta >> 2)); + } + catch (IllegalArgumentException var11) + { + if (!worldIn.isRemote) + { + LOGGER.warn(String.format("Invalid damage property for anvil at %s. Found %d, must be in [0, 1, 2]", pos, meta >> 2)); + + if (placer instanceof EntityPlayer) + { + placer.sendMessage(new TextComponentTranslation("Invalid damage property. Please pick in [0, 1, 2]", new Object[0])); + } + } + + return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, 0, placer).withProperty(FACING, enumfacing).withProperty(DAMAGE, Integer.valueOf(0)); + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!worldIn.isRemote) + { + playerIn.displayGui(new BlockAnvil.Anvil(worldIn, pos)); + } + + return true; + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((Integer)state.getValue(DAMAGE)).intValue(); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + return enumfacing.getAxis() == EnumFacing.Axis.X ? X_AXIS_AABB : Z_AXIS_AABB; + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this)); + items.add(new ItemStack(this, 1, 1)); + items.add(new ItemStack(this, 1, 2)); + } + + protected void onStartFalling(EntityFallingBlock fallingEntity) + { + fallingEntity.setHurtEntities(true); + } + + public void onEndFalling(World worldIn, BlockPos pos, IBlockState p_176502_3_, IBlockState p_176502_4_) + { + worldIn.playEvent(1031, pos, 0); + } + + public void onBroken(World worldIn, BlockPos pos) + { + worldIn.playEvent(1029, pos, 0); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta & 3)).withProperty(DAMAGE, Integer.valueOf((meta & 15) >> 2)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + i = i | ((Integer)state.getValue(DAMAGE)).intValue() << 2; + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.getBlock() != this ? state : state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, DAMAGE}); + } + + public static class Anvil implements IInteractionObject + { + private final World world; + private final BlockPos position; + + public Anvil(World worldIn, BlockPos pos) + { + this.world = worldIn; + this.position = pos; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "anvil"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return new TextComponentTranslation(Blocks.ANVIL.getUnlocalizedName() + ".name", new Object[0]); + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerRepair(playerInventory, this.world, this.position, playerIn); + } + + public String getGuiID() + { + return "minecraft:anvil"; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBanner.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBanner.java new file mode 100644 index 0000000..d0dbeca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBanner.java @@ -0,0 +1,336 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockBanner extends BlockContainer +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyInteger ROTATION = PropertyInteger.create("rotation", 0, 15); + protected static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D); + + protected BlockBanner() + { + super(Material.WOOD); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal("item.banner.white.name"); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Return true if an entity can be spawned inside the block (used to get the player's bed spawn location) + */ + public boolean canSpawnInBlock() + { + return true; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityBanner(); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.BANNER; + } + + private ItemStack getTileDataItemStack(World worldIn, BlockPos pos) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity instanceof TileEntityBanner ? ((TileEntityBanner)tileentity).getItem() : ItemStack.EMPTY; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + ItemStack itemstack = this.getTileDataItemStack(worldIn, pos); + return itemstack.isEmpty() ? new ItemStack(Items.BANNER) : itemstack; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return !this.hasInvalidNeighbor(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos); + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (te instanceof TileEntityBanner) + { + TileEntityBanner tileentitybanner = (TileEntityBanner)te; + ItemStack itemstack = tileentitybanner.getItem(); + spawnAsEntity(worldIn, pos, itemstack); + } + else + { + super.harvestBlock(worldIn, player, pos, state, (TileEntity)null, stack); + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + TileEntity te = world.getTileEntity(pos); + + if (te instanceof TileEntityBanner) + { + TileEntityBanner tileentitybanner = (TileEntityBanner)te; + ItemStack itemstack = tileentitybanner.getItem(); + drops.add(itemstack); + } + else + { + drops.add(new ItemStack(Items.BANNER, 1, 0)); + } + } + + public static class BlockBannerHanging extends BlockBanner + { + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.875D, 1.0D, 0.78125D, 1.0D); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.78125D, 0.125D); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.875D, 0.0D, 0.0D, 1.0D, 0.78125D, 1.0D); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.125D, 0.78125D, 1.0D); + + public BlockBannerHanging() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the + * passed blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the + * passed blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case NORTH: + default: + return NORTH_AABB; + case SOUTH: + return SOUTH_AABB; + case WEST: + return WEST_AABB; + case EAST: + return EAST_AABB; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a + * neighbor change. Cases may include when redstone power is updated, cactus blocks popping off due to a + * neighboring solid block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (!worldIn.getBlockState(pos.offset(enumfacing.getOpposite())).getMaterial().isSolid()) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + } + + public static class BlockBannerStanding extends BlockBanner + { + public BlockBannerStanding() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(ROTATION, Integer.valueOf(0))); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return STANDING_AABB; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the + * passed blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(ROTATION, Integer.valueOf(rot.rotate(((Integer)state.getValue(ROTATION)).intValue(), 16))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the + * passed blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withProperty(ROTATION, Integer.valueOf(mirrorIn.mirrorRotation(((Integer)state.getValue(ROTATION)).intValue(), 16))); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a + * neighbor change. Cases may include when redstone power is updated, cactus blocks popping off due to a + * neighboring solid block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.getBlockState(pos.down()).getMaterial().isSolid()) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(ROTATION, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(ROTATION)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {ROTATION}); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBarrier.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBarrier.java new file mode 100644 index 0000000..6d8fe77 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBarrier.java @@ -0,0 +1,51 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBarrier extends Block +{ + protected BlockBarrier() + { + super(Material.BARRIER); + this.setBlockUnbreakable(); + this.setResistance(6000001.0F); + this.disableStats(); + this.translucent = true; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public float getAmbientOcclusionLightValue(IBlockState state) + { + return 1.0F; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBasePressurePlate.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBasePressurePlate.java new file mode 100644 index 0000000..bd0086e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBasePressurePlate.java @@ -0,0 +1,250 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public abstract class BlockBasePressurePlate extends Block +{ + /** The bounding box for the pressure plate pressed state */ + protected static final AxisAlignedBB PRESSED_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.03125D, 0.9375D); + protected static final AxisAlignedBB UNPRESSED_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.0625D, 0.9375D); + /** This bounding box is used to check for entities in a certain area and then determine the pressed state. */ + protected static final AxisAlignedBB PRESSURE_AABB = new AxisAlignedBB(0.125D, 0.0D, 0.125D, 0.875D, 0.25D, 0.875D); + + protected BlockBasePressurePlate(Material materialIn) + { + this(materialIn, materialIn.getMaterialMapColor()); + } + + protected BlockBasePressurePlate(Material materialIn, MapColor mapColorIn) + { + super(materialIn, mapColorIn); + this.setCreativeTab(CreativeTabs.REDSTONE); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + boolean flag = this.getRedstoneStrength(state) > 0; + return flag ? PRESSED_AABB : UNPRESSED_AABB; + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 20; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Return true if an entity can be spawned inside the block (used to get the player's bed spawn location) + */ + public boolean canSpawnInBlock() + { + return true; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return this.canBePlacedOn(worldIn, pos.down()); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canBePlacedOn(worldIn, pos.down())) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + + private boolean canBePlacedOn(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).isTopSolid() || worldIn.getBlockState(pos).getBlock() instanceof BlockFence; + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + int i = this.getRedstoneStrength(state); + + if (i > 0) + { + this.updateState(worldIn, pos, state, i); + } + } + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote) + { + int i = this.getRedstoneStrength(state); + + if (i == 0) + { + this.updateState(worldIn, pos, state, i); + } + } + } + + /** + * Updates the pressure plate when stepped on + */ + protected void updateState(World worldIn, BlockPos pos, IBlockState state, int oldRedstoneStrength) + { + int i = this.computeRedstoneStrength(worldIn, pos); + boolean flag = oldRedstoneStrength > 0; + boolean flag1 = i > 0; + + if (oldRedstoneStrength != i) + { + state = this.setRedstoneStrength(state, i); + worldIn.setBlockState(pos, state, 2); + this.updateNeighbors(worldIn, pos); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + } + + if (!flag1 && flag) + { + this.playClickOffSound(worldIn, pos); + } + else if (flag1 && !flag) + { + this.playClickOnSound(worldIn, pos); + } + + if (flag1) + { + worldIn.scheduleUpdate(new BlockPos(pos), this, this.tickRate(worldIn)); + } + } + + protected abstract void playClickOnSound(World worldIn, BlockPos color); + + protected abstract void playClickOffSound(World worldIn, BlockPos pos); + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (this.getRedstoneStrength(state) > 0) + { + this.updateNeighbors(worldIn, pos); + } + + super.breakBlock(worldIn, pos, state); + } + + /** + * Notify block and block below of changes + */ + protected void updateNeighbors(World worldIn, BlockPos pos) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.down(), this, false); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return this.getRedstoneStrength(blockState); + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.UP ? this.getRedstoneStrength(blockState) : 0; + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + protected abstract int computeRedstoneStrength(World worldIn, BlockPos pos); + + protected abstract int getRedstoneStrength(IBlockState state); + + protected abstract IBlockState setRedstoneStrength(IBlockState state, int strength); + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBeacon.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBeacon.java new file mode 100644 index 0000000..ca4c471 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBeacon.java @@ -0,0 +1,167 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBeacon; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.HttpUtil; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBeacon extends BlockContainer +{ + public BlockBeacon() + { + super(Material.GLASS, MapColor.DIAMOND); + this.setHardness(3.0F); + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityBeacon(); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBeacon) + { + playerIn.displayGUIChest((TileEntityBeacon)tileentity); + playerIn.addStat(StatList.BEACON_INTERACTION); + } + + return true; + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBeacon) + { + ((TileEntityBeacon)tileentity).setName(stack.getDisplayName()); + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBeacon) + { + ((TileEntityBeacon)tileentity).updateBeacon(); + worldIn.addBlockEvent(pos, this, 1, 0); + } + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + public static void updateColorAsync(final World worldIn, final BlockPos glassPos) + { + HttpUtil.DOWNLOADER_EXECUTOR.submit(new Runnable() + { + public void run() + { + Chunk chunk = worldIn.getChunkFromBlockCoords(glassPos); + + for (int i = glassPos.getY() - 1; i >= 0; --i) + { + final BlockPos blockpos = new BlockPos(glassPos.getX(), i, glassPos.getZ()); + + if (!chunk.canSeeSky(blockpos)) + { + break; + } + + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() == Blocks.BEACON) + { + ((WorldServer)worldIn).addScheduledTask(new Runnable() + { + public void run() + { + TileEntity tileentity = worldIn.getTileEntity(blockpos); + + if (tileentity instanceof TileEntityBeacon) + { + ((TileEntityBeacon)tileentity).updateBeacon(); + worldIn.addBlockEvent(blockpos, Blocks.BEACON, 1, 0); + } + } + }); + } + } + } + }); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBed.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBed.java new file mode 100644 index 0000000..019a670 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBed.java @@ -0,0 +1,513 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Biomes; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBed; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBed extends BlockHorizontal implements ITileEntityProvider +{ + public static final PropertyEnum PART = PropertyEnum.create("part", BlockBed.EnumPartType.class); + public static final PropertyBool OCCUPIED = PropertyBool.create("occupied"); + protected static final AxisAlignedBB BED_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5625D, 1.0D); + + public BlockBed() + { + super(Material.CLOTH); + this.setDefaultState(this.blockState.getBaseState().withProperty(PART, BlockBed.EnumPartType.FOOT).withProperty(OCCUPIED, Boolean.valueOf(false))); + this.hasTileEntity = true; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(PART) == BlockBed.EnumPartType.FOOT) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBed) + { + EnumDyeColor enumdyecolor = ((TileEntityBed)tileentity).getColor(); + return MapColor.getBlockColor(enumdyecolor); + } + } + + return MapColor.CLOTH; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + if (state.getValue(PART) != BlockBed.EnumPartType.HEAD) + { + pos = pos.offset((EnumFacing)state.getValue(FACING)); + state = worldIn.getBlockState(pos); + + if (state.getBlock() != this) + { + return true; + } + } + + net.minecraft.world.WorldProvider.WorldSleepResult sleepResult = worldIn.provider.canSleepAt(playerIn, pos); + if (sleepResult != net.minecraft.world.WorldProvider.WorldSleepResult.BED_EXPLODES) + { + if (sleepResult == net.minecraft.world.WorldProvider.WorldSleepResult.DENY) return true; + if (((Boolean)state.getValue(OCCUPIED)).booleanValue()) + { + EntityPlayer entityplayer = this.getPlayerInBed(worldIn, pos); + + if (entityplayer != null) + { + playerIn.sendStatusMessage(new TextComponentTranslation("tile.bed.occupied", new Object[0]), true); + return true; + } + + state = state.withProperty(OCCUPIED, Boolean.valueOf(false)); + worldIn.setBlockState(pos, state, 4); + } + + EntityPlayer.SleepResult entityplayer$sleepresult = playerIn.trySleep(pos); + + if (entityplayer$sleepresult == EntityPlayer.SleepResult.OK) + { + state = state.withProperty(OCCUPIED, Boolean.valueOf(true)); + worldIn.setBlockState(pos, state, 4); + return true; + } + else + { + if (entityplayer$sleepresult == EntityPlayer.SleepResult.NOT_POSSIBLE_NOW) + { + playerIn.sendStatusMessage(new TextComponentTranslation("tile.bed.noSleep", new Object[0]), true); + } + else if (entityplayer$sleepresult == EntityPlayer.SleepResult.NOT_SAFE) + { + playerIn.sendStatusMessage(new TextComponentTranslation("tile.bed.notSafe", new Object[0]), true); + } + else if (entityplayer$sleepresult == EntityPlayer.SleepResult.TOO_FAR_AWAY) + { + playerIn.sendStatusMessage(new TextComponentTranslation("tile.bed.tooFarAway", new Object[0]), true); + } + + return true; + } + } + else + { + worldIn.setBlockToAir(pos); + BlockPos blockpos = pos.offset(((EnumFacing)state.getValue(FACING)).getOpposite()); + + if (worldIn.getBlockState(blockpos).getBlock() == this) + { + worldIn.setBlockToAir(blockpos); + } + + worldIn.newExplosion((Entity)null, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, 5.0F, true, true); + return true; + } + } + } + + @Nullable + private EntityPlayer getPlayerInBed(World worldIn, BlockPos pos) + { + for (EntityPlayer entityplayer : worldIn.playerEntities) + { + if (entityplayer.isPlayerSleeping() && entityplayer.bedLocation.equals(pos)) + { + return entityplayer; + } + } + + return null; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Block's chance to react to a living entity falling on it. + */ + public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) + { + super.onFallenUpon(worldIn, pos, entityIn, fallDistance * 0.5F); + } + + /** + * Called when an Entity lands on this Block. This method *must* update motionY because the entity will not do that + * on its own + */ + public void onLanded(World worldIn, Entity entityIn) + { + if (entityIn.isSneaking()) + { + super.onLanded(worldIn, entityIn); + } + else if (entityIn.motionY < 0.0D) + { + entityIn.motionY = -entityIn.motionY * 0.6600000262260437D; + + if (!(entityIn instanceof EntityLivingBase)) + { + entityIn.motionY *= 0.8D; + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (state.getValue(PART) == BlockBed.EnumPartType.FOOT) + { + if (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() != this) + { + worldIn.setBlockToAir(pos); + } + } + else if (worldIn.getBlockState(pos.offset(enumfacing.getOpposite())).getBlock() != this) + { + if (!worldIn.isRemote) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + } + + worldIn.setBlockToAir(pos); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return state.getValue(PART) == BlockBed.EnumPartType.FOOT ? Items.AIR : Items.BED; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BED_AABB; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return true; + } + + /** + * Returns a safe BlockPos to disembark the bed + */ + @Nullable + public static BlockPos getSafeExitLocation(World worldIn, BlockPos pos, int tries) + { + EnumFacing enumfacing = (EnumFacing)worldIn.getBlockState(pos).getValue(FACING); + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + + for (int l = 0; l <= 1; ++l) + { + int i1 = i - enumfacing.getFrontOffsetX() * l - 1; + int j1 = k - enumfacing.getFrontOffsetZ() * l - 1; + int k1 = i1 + 2; + int l1 = j1 + 2; + + for (int i2 = i1; i2 <= k1; ++i2) + { + for (int j2 = j1; j2 <= l1; ++j2) + { + BlockPos blockpos = new BlockPos(i2, j, j2); + + if (hasRoomForPlayer(worldIn, blockpos)) + { + if (tries <= 0) + { + return blockpos; + } + + --tries; + } + } + } + } + + return null; + } + + protected static boolean hasRoomForPlayer(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isTopSolid() && !worldIn.getBlockState(pos).getMaterial().isSolid() && !worldIn.getBlockState(pos.up()).getMaterial().isSolid(); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + if (state.getValue(PART) == BlockBed.EnumPartType.HEAD) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + EnumDyeColor enumdyecolor = tileentity instanceof TileEntityBed ? ((TileEntityBed)tileentity).getColor() : EnumDyeColor.RED; + spawnAsEntity(worldIn, pos, new ItemStack(Items.BED, 1, enumdyecolor.getMetadata())); + } + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.ENTITYBLOCK_ANIMATED; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + BlockPos blockpos = pos; + + if (state.getValue(PART) == BlockBed.EnumPartType.FOOT) + { + blockpos = pos.offset((EnumFacing)state.getValue(FACING)); + } + + TileEntity tileentity = worldIn.getTileEntity(blockpos); + EnumDyeColor enumdyecolor = tileentity instanceof TileEntityBed ? ((TileEntityBed)tileentity).getColor() : EnumDyeColor.RED; + return new ItemStack(Items.BED, 1, enumdyecolor.getMetadata()); + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (player.capabilities.isCreativeMode && state.getValue(PART) == BlockBed.EnumPartType.FOOT) + { + BlockPos blockpos = pos.offset((EnumFacing)state.getValue(FACING)); + + if (worldIn.getBlockState(blockpos).getBlock() == this) + { + worldIn.setBlockToAir(blockpos); + } + } + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack stack) + { + if (state.getValue(PART) == BlockBed.EnumPartType.HEAD && te instanceof TileEntityBed) + { + TileEntityBed tileentitybed = (TileEntityBed)te; + ItemStack itemstack = tileentitybed.getItemStack(); + spawnAsEntity(worldIn, pos, itemstack); + } + else + { + super.harvestBlock(worldIn, player, pos, state, (TileEntity)null, stack); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + worldIn.removeTileEntity(pos); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getHorizontal(meta); + return (meta & 8) > 0 ? this.getDefaultState().withProperty(PART, BlockBed.EnumPartType.HEAD).withProperty(FACING, enumfacing).withProperty(OCCUPIED, Boolean.valueOf((meta & 4) > 0)) : this.getDefaultState().withProperty(PART, BlockBed.EnumPartType.FOOT).withProperty(FACING, enumfacing); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(PART) == BlockBed.EnumPartType.FOOT) + { + IBlockState iblockstate = worldIn.getBlockState(pos.offset((EnumFacing)state.getValue(FACING))); + + if (iblockstate.getBlock() == this) + { + state = state.withProperty(OCCUPIED, iblockstate.getValue(OCCUPIED)); + } + } + + return state; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + + if (state.getValue(PART) == BlockBed.EnumPartType.HEAD) + { + i |= 8; + + if (((Boolean)state.getValue(OCCUPIED)).booleanValue()) + { + i |= 4; + } + } + + return i; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, PART, OCCUPIED}); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityBed(); + } + + @SideOnly(Side.CLIENT) + public static boolean isHeadPiece(int metadata) + { + return (metadata & 8) != 0; + } + + public static enum EnumPartType implements IStringSerializable + { + HEAD("head"), + FOOT("foot"); + + private final String name; + + private EnumPartType(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBeetroot.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBeetroot.java new file mode 100644 index 0000000..c709378 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBeetroot.java @@ -0,0 +1,66 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockBeetroot extends BlockCrops +{ + public static final PropertyInteger BEETROOT_AGE = PropertyInteger.create("age", 0, 3); + private static final AxisAlignedBB[] BEETROOT_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D)}; + + protected PropertyInteger getAgeProperty() + { + return BEETROOT_AGE; + } + + public int getMaxAge() + { + return 3; + } + + protected Item getSeed() + { + return Items.BEETROOT_SEEDS; + } + + protected Item getCrop() + { + return Items.BEETROOT; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (rand.nextInt(3) == 0) + { + this.checkAndDropBlock(worldIn, pos, state); + } + else + { + super.updateTick(worldIn, pos, state, rand); + } + } + + protected int getBonemealAgeIncrease(World worldIn) + { + return super.getBonemealAgeIncrease(worldIn) / 3; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {BEETROOT_AGE}); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BEETROOT_AABB[((Integer)state.getValue(this.getAgeProperty())).intValue()]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBone.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBone.java new file mode 100644 index 0000000..8ab5aab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBone.java @@ -0,0 +1,16 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +public class BlockBone extends BlockRotatedPillar +{ + public BlockBone() + { + super(Material.ROCK, MapColor.SAND); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + this.setHardness(2.0F); + this.setSoundType(SoundType.STONE); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBookshelf.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBookshelf.java new file mode 100644 index 0000000..4806bd3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBookshelf.java @@ -0,0 +1,33 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; + +public class BlockBookshelf extends Block +{ + public BlockBookshelf() + { + super(Material.WOOD); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 3; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.BOOK; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBreakable.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBreakable.java new file mode 100644 index 0000000..a82260e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBreakable.java @@ -0,0 +1,57 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBreakable extends Block +{ + private final boolean ignoreSimilarity; + + protected BlockBreakable(Material materialIn, boolean ignoreSimilarityIn) + { + this(materialIn, ignoreSimilarityIn, materialIn.getMaterialMapColor()); + } + + protected BlockBreakable(Material materialIn, boolean ignoreSimilarityIn, MapColor mapColorIn) + { + super(materialIn, mapColorIn); + this.ignoreSimilarity = ignoreSimilarityIn; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side)); + Block block = iblockstate.getBlock(); + + if (this == Blocks.GLASS || this == Blocks.STAINED_GLASS) + { + if (blockState != iblockstate) + { + return true; + } + + if (block == this) + { + return false; + } + } + + return !this.ignoreSimilarity && block == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBrewingStand.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBrewingStand.java new file mode 100644 index 0000000..a3345a5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBrewingStand.java @@ -0,0 +1,240 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBrewingStand; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBrewingStand extends BlockContainer +{ + public static final PropertyBool[] HAS_BOTTLE = new PropertyBool[] {PropertyBool.create("has_bottle_0"), PropertyBool.create("has_bottle_1"), PropertyBool.create("has_bottle_2")}; + protected static final AxisAlignedBB BASE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D); + protected static final AxisAlignedBB STICK_AABB = new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 0.5625D, 0.875D, 0.5625D); + + public BlockBrewingStand() + { + super(Material.IRON); + this.setDefaultState(this.blockState.getBaseState().withProperty(HAS_BOTTLE[0], Boolean.valueOf(false)).withProperty(HAS_BOTTLE[1], Boolean.valueOf(false)).withProperty(HAS_BOTTLE[2], Boolean.valueOf(false))); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal("item.brewingStand.name"); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityBrewingStand(); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, STICK_AABB); + addCollisionBoxToList(pos, entityBox, collidingBoxes, BASE_AABB); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BASE_AABB; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBrewingStand) + { + playerIn.displayGUIChest((TileEntityBrewingStand)tileentity); + playerIn.addStat(StatList.BREWINGSTAND_INTERACTION); + } + + return true; + } + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBrewingStand) + { + ((TileEntityBrewingStand)tileentity).setName(stack.getDisplayName()); + } + } + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + double d0 = (double)((float)pos.getX() + 0.4F + rand.nextFloat() * 0.2F); + double d1 = (double)((float)pos.getY() + 0.7F + rand.nextFloat() * 0.3F); + double d2 = (double)((float)pos.getZ() + 0.4F + rand.nextFloat() * 0.2F); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBrewingStand) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (TileEntityBrewingStand)tileentity); + } + + super.breakBlock(worldIn, pos, state); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.BREWING_STAND; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.BREWING_STAND); + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return Container.calcRedstone(worldIn.getTileEntity(pos)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState(); + + for (int i = 0; i < 3; ++i) + { + iblockstate = iblockstate.withProperty(HAS_BOTTLE[i], Boolean.valueOf((meta & 1 << i) > 0)); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + for (int j = 0; j < 3; ++j) + { + if (((Boolean)state.getValue(HAS_BOTTLE[j])).booleanValue()) + { + i |= 1 << j; + } + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {HAS_BOTTLE[0], HAS_BOTTLE[1], HAS_BOTTLE[2]}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockBush.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBush.java new file mode 100644 index 0000000..6f7e520 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockBush.java @@ -0,0 +1,166 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockBush extends Block implements net.minecraftforge.common.IPlantable +{ + protected static final AxisAlignedBB BUSH_AABB = new AxisAlignedBB(0.30000001192092896D, 0.0D, 0.30000001192092896D, 0.699999988079071D, 0.6000000238418579D, 0.699999988079071D); + + protected BlockBush() + { + this(Material.PLANTS); + } + + protected BlockBush(Material materialIn) + { + this(materialIn, materialIn.getMaterialMapColor()); + } + + protected BlockBush(Material materialIn, MapColor mapColorIn) + { + super(materialIn, mapColorIn); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + IBlockState soil = worldIn.getBlockState(pos.down()); + return super.canPlaceBlockAt(worldIn, pos) && soil.getBlock().canSustainPlant(soil, worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this); + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.getBlock() == Blocks.GRASS || state.getBlock() == Blocks.DIRT || state.getBlock() == Blocks.FARMLAND; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + this.checkAndDropBlock(worldIn, pos, state); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + this.checkAndDropBlock(worldIn, pos, state); + } + + protected void checkAndDropBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.canBlockStay(worldIn, pos, state)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + } + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + if (state.getBlock() == this) //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. + { + IBlockState soil = worldIn.getBlockState(pos.down()); + return soil.getBlock().canSustainPlant(soil, worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this); + } + return this.canSustainBush(worldIn.getBlockState(pos.down())); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return BUSH_AABB; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Override + public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + if (this == Blocks.WHEAT) return net.minecraftforge.common.EnumPlantType.Crop; + if (this == Blocks.CARROTS) return net.minecraftforge.common.EnumPlantType.Crop; + if (this == Blocks.POTATOES) return net.minecraftforge.common.EnumPlantType.Crop; + if (this == Blocks.BEETROOTS) return net.minecraftforge.common.EnumPlantType.Crop; + if (this == Blocks.MELON_STEM) return net.minecraftforge.common.EnumPlantType.Crop; + if (this == Blocks.PUMPKIN_STEM) return net.minecraftforge.common.EnumPlantType.Crop; + if (this == Blocks.DEADBUSH) return net.minecraftforge.common.EnumPlantType.Desert; + if (this == Blocks.WATERLILY) return net.minecraftforge.common.EnumPlantType.Water; + if (this == Blocks.RED_MUSHROOM) return net.minecraftforge.common.EnumPlantType.Cave; + if (this == Blocks.BROWN_MUSHROOM) return net.minecraftforge.common.EnumPlantType.Cave; + if (this == Blocks.NETHER_WART) return net.minecraftforge.common.EnumPlantType.Nether; + if (this == Blocks.SAPLING) return net.minecraftforge.common.EnumPlantType.Plains; + if (this == Blocks.TALLGRASS) return net.minecraftforge.common.EnumPlantType.Plains; + if (this == Blocks.DOUBLE_PLANT) return net.minecraftforge.common.EnumPlantType.Plains; + if (this == Blocks.RED_FLOWER) return net.minecraftforge.common.EnumPlantType.Plains; + if (this == Blocks.YELLOW_FLOWER) return net.minecraftforge.common.EnumPlantType.Plains; + return net.minecraftforge.common.EnumPlantType.Plains; + } + + @Override + public IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + if (state.getBlock() != this) return getDefaultState(); + return state; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockButton.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockButton.java new file mode 100644 index 0000000..77a016e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockButton.java @@ -0,0 +1,430 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public abstract class BlockButton extends BlockDirectional +{ + public static final PropertyBool POWERED = PropertyBool.create("powered"); + protected static final AxisAlignedBB AABB_DOWN_OFF = new AxisAlignedBB(0.3125D, 0.875D, 0.375D, 0.6875D, 1.0D, 0.625D); + protected static final AxisAlignedBB AABB_UP_OFF = new AxisAlignedBB(0.3125D, 0.0D, 0.375D, 0.6875D, 0.125D, 0.625D); + protected static final AxisAlignedBB AABB_NORTH_OFF = new AxisAlignedBB(0.3125D, 0.375D, 0.875D, 0.6875D, 0.625D, 1.0D); + protected static final AxisAlignedBB AABB_SOUTH_OFF = new AxisAlignedBB(0.3125D, 0.375D, 0.0D, 0.6875D, 0.625D, 0.125D); + protected static final AxisAlignedBB AABB_WEST_OFF = new AxisAlignedBB(0.875D, 0.375D, 0.3125D, 1.0D, 0.625D, 0.6875D); + protected static final AxisAlignedBB AABB_EAST_OFF = new AxisAlignedBB(0.0D, 0.375D, 0.3125D, 0.125D, 0.625D, 0.6875D); + protected static final AxisAlignedBB AABB_DOWN_ON = new AxisAlignedBB(0.3125D, 0.9375D, 0.375D, 0.6875D, 1.0D, 0.625D); + protected static final AxisAlignedBB AABB_UP_ON = new AxisAlignedBB(0.3125D, 0.0D, 0.375D, 0.6875D, 0.0625D, 0.625D); + protected static final AxisAlignedBB AABB_NORTH_ON = new AxisAlignedBB(0.3125D, 0.375D, 0.9375D, 0.6875D, 0.625D, 1.0D); + protected static final AxisAlignedBB AABB_SOUTH_ON = new AxisAlignedBB(0.3125D, 0.375D, 0.0D, 0.6875D, 0.625D, 0.0625D); + protected static final AxisAlignedBB AABB_WEST_ON = new AxisAlignedBB(0.9375D, 0.375D, 0.3125D, 1.0D, 0.625D, 0.6875D); + protected static final AxisAlignedBB AABB_EAST_ON = new AxisAlignedBB(0.0D, 0.375D, 0.3125D, 0.0625D, 0.625D, 0.6875D); + private final boolean wooden; + + protected BlockButton(boolean wooden) + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(POWERED, Boolean.valueOf(false))); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.REDSTONE); + this.wooden = wooden; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return this.wooden ? 30 : 20; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return canPlaceBlock(worldIn, pos, side); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (canPlaceBlock(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + /** + * Check whether this block can be placed on the block in the given direction. + */ + protected static boolean canPlaceBlock(World worldIn, BlockPos pos, EnumFacing direction) + { + BlockPos blockpos = pos.offset(direction.getOpposite()); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + boolean flag = iblockstate.getBlockFaceShape(worldIn, blockpos, direction) == BlockFaceShape.SOLID; + Block block = iblockstate.getBlock(); + + if (direction == EnumFacing.UP) + { + return iblockstate.isTopSolid() || !isExceptionBlockForAttaching(block) && flag; + } + else + { + return !isExceptBlockForAttachWithPiston(block) && flag; + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return canPlaceBlock(worldIn, pos, facing) ? this.getDefaultState().withProperty(FACING, facing).withProperty(POWERED, Boolean.valueOf(false)) : this.getDefaultState().withProperty(FACING, EnumFacing.DOWN).withProperty(POWERED, Boolean.valueOf(false)); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.checkForDrop(worldIn, pos, state) && !canPlaceBlock(worldIn, pos, (EnumFacing)state.getValue(FACING))) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + + private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (this.canPlaceBlockAt(worldIn, pos)) + { + return true; + } + else + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return false; + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + boolean flag = ((Boolean)state.getValue(POWERED)).booleanValue(); + + switch (enumfacing) + { + case EAST: + return flag ? AABB_EAST_ON : AABB_EAST_OFF; + case WEST: + return flag ? AABB_WEST_ON : AABB_WEST_OFF; + case SOUTH: + return flag ? AABB_SOUTH_ON : AABB_SOUTH_OFF; + case NORTH: + default: + return flag ? AABB_NORTH_ON : AABB_NORTH_OFF; + case UP: + return flag ? AABB_UP_ON : AABB_UP_OFF; + case DOWN: + return flag ? AABB_DOWN_ON : AABB_DOWN_OFF; + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + return true; + } + else + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 3); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + this.playClickSound(playerIn, worldIn, pos); + this.notifyNeighbors(worldIn, pos, (EnumFacing)state.getValue(FACING)); + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + return true; + } + } + + protected abstract void playClickSound(@Nullable EntityPlayer player, World worldIn, BlockPos pos); + + protected abstract void playReleaseSound(World worldIn, BlockPos pos); + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + this.notifyNeighbors(worldIn, pos, (EnumFacing)state.getValue(FACING)); + } + + super.breakBlock(worldIn, pos, state); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return ((Boolean)blockState.getValue(POWERED)).booleanValue() ? 15 : 0; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!((Boolean)blockState.getValue(POWERED)).booleanValue()) + { + return 0; + } + else + { + return blockState.getValue(FACING) == side ? 15 : 0; + } + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + if (this.wooden) + { + this.checkPressed(state, worldIn, pos); + } + else + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false))); + this.notifyNeighbors(worldIn, pos, (EnumFacing)state.getValue(FACING)); + this.playReleaseSound(worldIn, pos); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + } + } + } + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote) + { + if (this.wooden) + { + if (!((Boolean)state.getValue(POWERED)).booleanValue()) + { + this.checkPressed(state, worldIn, pos); + } + } + } + } + + private void checkPressed(IBlockState state, World worldIn, BlockPos pos) + { + List list = worldIn.getEntitiesWithinAABB(EntityArrow.class, state.getBoundingBox(worldIn, pos).offset(pos)); + boolean flag = !list.isEmpty(); + boolean flag1 = ((Boolean)state.getValue(POWERED)).booleanValue(); + + if (flag && !flag1) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true))); + this.notifyNeighbors(worldIn, pos, (EnumFacing)state.getValue(FACING)); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + this.playClickSound((EntityPlayer)null, worldIn, pos); + } + + if (!flag && flag1) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false))); + this.notifyNeighbors(worldIn, pos, (EnumFacing)state.getValue(FACING)); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + this.playReleaseSound(worldIn, pos); + } + + if (flag) + { + worldIn.scheduleUpdate(new BlockPos(pos), this, this.tickRate(worldIn)); + } + } + + private void notifyNeighbors(World worldIn, BlockPos pos, EnumFacing facing) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.offset(facing.getOpposite()), this, false); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing; + + switch (meta & 7) + { + case 0: + enumfacing = EnumFacing.DOWN; + break; + case 1: + enumfacing = EnumFacing.EAST; + break; + case 2: + enumfacing = EnumFacing.WEST; + break; + case 3: + enumfacing = EnumFacing.SOUTH; + break; + case 4: + enumfacing = EnumFacing.NORTH; + break; + case 5: + default: + enumfacing = EnumFacing.UP; + } + + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i; + + switch ((EnumFacing)state.getValue(FACING)) + { + case EAST: + i = 1; + break; + case WEST: + i = 2; + break; + case SOUTH: + i = 3; + break; + case NORTH: + i = 4; + break; + case UP: + default: + i = 5; + break; + case DOWN: + i = 0; + } + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, POWERED}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockButtonStone.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockButtonStone.java new file mode 100644 index 0000000..f8dba6c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockButtonStone.java @@ -0,0 +1,26 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockButtonStone extends BlockButton +{ + protected BlockButtonStone() + { + super(false); + } + + protected void playClickSound(@Nullable EntityPlayer player, World worldIn, BlockPos pos) + { + worldIn.playSound(player, pos, SoundEvents.BLOCK_STONE_BUTTON_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.6F); + } + + protected void playReleaseSound(World worldIn, BlockPos pos) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_STONE_BUTTON_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.5F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockButtonWood.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockButtonWood.java new file mode 100644 index 0000000..d174e8b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockButtonWood.java @@ -0,0 +1,26 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockButtonWood extends BlockButton +{ + protected BlockButtonWood() + { + super(true); + } + + protected void playClickSound(@Nullable EntityPlayer player, World worldIn, BlockPos pos) + { + worldIn.playSound(player, pos, SoundEvents.BLOCK_WOOD_BUTTON_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.6F); + } + + protected void playReleaseSound(World worldIn, BlockPos pos) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_WOOD_BUTTON_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.5F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCactus.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCactus.java new file mode 100644 index 0000000..5379133 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCactus.java @@ -0,0 +1,198 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCactus extends Block implements net.minecraftforge.common.IPlantable +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); + protected static final AxisAlignedBB CACTUS_COLLISION_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.9375D, 0.9375D); + protected static final AxisAlignedBB CACTUS_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 1.0D, 0.9375D); + + protected BlockCactus() + { + super(Material.CACTUS); + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0))); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isAreaLoaded(pos, 1)) return; // Forge: prevent growing cactus from loading unloaded chunks with block update + BlockPos blockpos = pos.up(); + + if (worldIn.isAirBlock(blockpos)) + { + int i; + + for (i = 1; worldIn.getBlockState(pos.down(i)).getBlock() == this; ++i) + { + ; + } + + if (i < 3) + { + int j = ((Integer)state.getValue(AGE)).intValue(); + + if(net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, blockpos, state, true)) + { + if (j == 15) + { + worldIn.setBlockState(blockpos, this.getDefaultState()); + IBlockState iblockstate = state.withProperty(AGE, Integer.valueOf(0)); + worldIn.setBlockState(pos, iblockstate, 4); + iblockstate.neighborChanged(worldIn, blockpos, this, pos); + } + else + { + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(j + 1)), 4); + } + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos)); + } + } + } + } + + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return CACTUS_COLLISION_AABB; + } + + /** + * Return an AABB (in world coords!) that should be highlighted when the player is targeting this Block + */ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) + { + return CACTUS_AABB.offset(pos); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) ? this.canBlockStay(worldIn, pos) : false; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canBlockStay(worldIn, pos)) + { + worldIn.destroyBlock(pos, true); + } + } + + public boolean canBlockStay(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + Material material = worldIn.getBlockState(pos.offset(enumfacing)).getMaterial(); + + if (material.isSolid() || material == Material.LAVA) + { + return false; + } + } + + IBlockState state = worldIn.getBlockState(pos.down()); + return state.getBlock().canSustainPlant(state, worldIn, pos.down(), EnumFacing.UP, this) && !worldIn.getBlockState(pos.up()).getMaterial().isLiquid(); + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + entityIn.attackEntityFrom(DamageSource.CACTUS, 1.0F); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + @Override + public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + return net.minecraftforge.common.EnumPlantType.Desert; + } + + @Override + public IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + return getDefaultState(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCake.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCake.java new file mode 100644 index 0000000..52ad785 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCake.java @@ -0,0 +1,193 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCake extends Block +{ + public static final PropertyInteger BITES = PropertyInteger.create("bites", 0, 6); + protected static final AxisAlignedBB[] CAKE_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D), new AxisAlignedBB(0.1875D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D), new AxisAlignedBB(0.3125D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D), new AxisAlignedBB(0.4375D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D), new AxisAlignedBB(0.5625D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D), new AxisAlignedBB(0.6875D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D), new AxisAlignedBB(0.8125D, 0.0D, 0.0625D, 0.9375D, 0.5D, 0.9375D)}; + + protected BlockCake() + { + super(Material.CAKE); + this.setDefaultState(this.blockState.getBaseState().withProperty(BITES, Integer.valueOf(0))); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return CAKE_AABB[((Integer)state.getValue(BITES)).intValue()]; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!worldIn.isRemote) + { + return this.eatCake(worldIn, pos, state, playerIn); + } + else + { + ItemStack itemstack = playerIn.getHeldItem(hand); + return this.eatCake(worldIn, pos, state, playerIn) || itemstack.isEmpty(); + } + } + + private boolean eatCake(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (!player.canEat(false)) + { + return false; + } + else + { + player.addStat(StatList.CAKE_SLICES_EATEN); + player.getFoodStats().addStats(2, 0.1F); + int i = ((Integer)state.getValue(BITES)).intValue(); + + if (i < 6) + { + worldIn.setBlockState(pos, state.withProperty(BITES, Integer.valueOf(i + 1)), 3); + } + else + { + worldIn.setBlockToAir(pos); + } + + return true; + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) ? this.canBlockStay(worldIn, pos) : false; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canBlockStay(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + } + + private boolean canBlockStay(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).getMaterial().isSolid(); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.CAKE); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(BITES, Integer.valueOf(meta)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(BITES)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {BITES}); + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return (7 - ((Integer)blockState.getValue(BITES)).intValue()) * 2; + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCarpet.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCarpet.java new file mode 100644 index 0000000..e7975d1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCarpet.java @@ -0,0 +1,165 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCarpet extends Block +{ + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + protected static final AxisAlignedBB CARPET_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D); + + protected BlockCarpet() + { + super(Material.CARPET); + this.setDefaultState(this.blockState.getBaseState().withProperty(COLOR, EnumDyeColor.WHITE)); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return CARPET_AABB; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.getBlockColor((EnumDyeColor)state.getValue(COLOR)); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) && this.canBlockStay(worldIn, pos); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.checkForDrop(worldIn, pos, state); + } + + private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.canBlockStay(worldIn, pos)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return false; + } + else + { + return true; + } + } + + private boolean canBlockStay(World worldIn, BlockPos pos) + { + return !worldIn.isAirBlock(pos.down()); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (side == EnumFacing.UP) + { + return true; + } + else + { + return blockAccess.getBlockState(pos.offset(side)).getBlock() == this ? true : super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (int i = 0; i < 16; ++i) + { + items.add(new ItemStack(this, 1, i)); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {COLOR}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCarrot.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCarrot.java new file mode 100644 index 0000000..dc46f99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCarrot.java @@ -0,0 +1,28 @@ +package net.minecraft.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockCarrot extends BlockCrops +{ + private static final AxisAlignedBB[] CARROT_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.1875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.4375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5625D, 1.0D)}; + + protected Item getSeed() + { + return Items.CARROT; + } + + protected Item getCrop() + { + return Items.CARROT; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return CARROT_AABB[((Integer)state.getValue(this.getAgeProperty())).intValue()]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCauldron.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCauldron.java new file mode 100644 index 0000000..ea6d881 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCauldron.java @@ -0,0 +1,354 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemBanner; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockCauldron extends Block +{ + public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 3); + protected static final AxisAlignedBB AABB_LEGS = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3125D, 1.0D); + protected static final AxisAlignedBB AABB_WALL_NORTH = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.125D); + protected static final AxisAlignedBB AABB_WALL_SOUTH = new AxisAlignedBB(0.0D, 0.0D, 0.875D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB AABB_WALL_EAST = new AxisAlignedBB(0.875D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB AABB_WALL_WEST = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.125D, 1.0D, 1.0D); + + public BlockCauldron() + { + super(Material.IRON, MapColor.STONE); + this.setDefaultState(this.blockState.getBaseState().withProperty(LEVEL, Integer.valueOf(0))); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_LEGS); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_WEST); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_NORTH); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_EAST); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_SOUTH); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FULL_BLOCK_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + int i = ((Integer)state.getValue(LEVEL)).intValue(); + float f = (float)pos.getY() + (6.0F + (float)(3 * i)) / 16.0F; + + if (!worldIn.isRemote && entityIn.isBurning() && i > 0 && entityIn.getEntityBoundingBox().minY <= (double)f) + { + entityIn.extinguish(); + this.setWaterLevel(worldIn, pos, state, i - 1); + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + + if (itemstack.isEmpty()) + { + return true; + } + else + { + int i = ((Integer)state.getValue(LEVEL)).intValue(); + Item item = itemstack.getItem(); + + if (item == Items.WATER_BUCKET) + { + if (i < 3 && !worldIn.isRemote) + { + if (!playerIn.capabilities.isCreativeMode) + { + playerIn.setHeldItem(hand, new ItemStack(Items.BUCKET)); + } + + playerIn.addStat(StatList.CAULDRON_FILLED); + this.setWaterLevel(worldIn, pos, state, 3); + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ITEM_BUCKET_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + return true; + } + else if (item == Items.BUCKET) + { + if (i == 3 && !worldIn.isRemote) + { + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + playerIn.setHeldItem(hand, new ItemStack(Items.WATER_BUCKET)); + } + else if (!playerIn.inventory.addItemStackToInventory(new ItemStack(Items.WATER_BUCKET))) + { + playerIn.dropItem(new ItemStack(Items.WATER_BUCKET), false); + } + } + + playerIn.addStat(StatList.CAULDRON_USED); + this.setWaterLevel(worldIn, pos, state, 0); + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ITEM_BUCKET_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + + return true; + } + else if (item == Items.GLASS_BOTTLE) + { + if (i > 0 && !worldIn.isRemote) + { + if (!playerIn.capabilities.isCreativeMode) + { + ItemStack itemstack3 = PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER); + playerIn.addStat(StatList.CAULDRON_USED); + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + playerIn.setHeldItem(hand, itemstack3); + } + else if (!playerIn.inventory.addItemStackToInventory(itemstack3)) + { + playerIn.dropItem(itemstack3, false); + } + else if (playerIn instanceof EntityPlayerMP) + { + ((EntityPlayerMP)playerIn).sendContainerToPlayer(playerIn.inventoryContainer); + } + } + + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F); + this.setWaterLevel(worldIn, pos, state, i - 1); + } + + return true; + } + else if (item == Items.POTIONITEM && PotionUtils.getPotionFromItem(itemstack) == PotionTypes.WATER) + { + if (i < 3 && !worldIn.isRemote) + { + if (!playerIn.capabilities.isCreativeMode) + { + ItemStack itemstack2 = new ItemStack(Items.GLASS_BOTTLE); + playerIn.addStat(StatList.CAULDRON_USED); + playerIn.setHeldItem(hand, itemstack2); + + if (playerIn instanceof EntityPlayerMP) + { + ((EntityPlayerMP)playerIn).sendContainerToPlayer(playerIn.inventoryContainer); + } + } + + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); + this.setWaterLevel(worldIn, pos, state, i + 1); + } + + return true; + } + else + { + if (i > 0 && item instanceof ItemArmor) + { + ItemArmor itemarmor = (ItemArmor)item; + + if (itemarmor.getArmorMaterial() == ItemArmor.ArmorMaterial.LEATHER && itemarmor.hasColor(itemstack) && !worldIn.isRemote) + { + itemarmor.removeColor(itemstack); + this.setWaterLevel(worldIn, pos, state, i - 1); + playerIn.addStat(StatList.ARMOR_CLEANED); + return true; + } + } + + if (i > 0 && item instanceof ItemBanner) + { + if (TileEntityBanner.getPatterns(itemstack) > 0 && !worldIn.isRemote) + { + ItemStack itemstack1 = itemstack.copy(); + itemstack1.setCount(1); + TileEntityBanner.removeBannerData(itemstack1); + playerIn.addStat(StatList.BANNER_CLEANED); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + this.setWaterLevel(worldIn, pos, state, i - 1); + } + + if (itemstack.isEmpty()) + { + playerIn.setHeldItem(hand, itemstack1); + } + else if (!playerIn.inventory.addItemStackToInventory(itemstack1)) + { + playerIn.dropItem(itemstack1, false); + } + else if (playerIn instanceof EntityPlayerMP) + { + ((EntityPlayerMP)playerIn).sendContainerToPlayer(playerIn.inventoryContainer); + } + } + + return true; + } + else + { + return false; + } + } + } + } + + public void setWaterLevel(World worldIn, BlockPos pos, IBlockState state, int level) + { + worldIn.setBlockState(pos, state.withProperty(LEVEL, Integer.valueOf(MathHelper.clamp(level, 0, 3))), 2); + worldIn.updateComparatorOutputLevel(pos, this); + } + + /** + * Called similar to random ticks, but only when it is raining. + */ + public void fillWithRain(World worldIn, BlockPos pos) + { + if (worldIn.rand.nextInt(20) == 1) + { + float f = worldIn.getBiome(pos).getTemperature(pos); + + if (worldIn.getBiomeProvider().getTemperatureAtHeight(f, pos.getY()) >= 0.15F) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (((Integer)iblockstate.getValue(LEVEL)).intValue() < 3) + { + worldIn.setBlockState(pos, iblockstate.cycleProperty(LEVEL), 2); + } + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.CAULDRON; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.CAULDRON); + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return ((Integer)blockState.getValue(LEVEL)).intValue(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(LEVEL, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(LEVEL)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {LEVEL}); + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + if (face == EnumFacing.UP) + { + return BlockFaceShape.BOWL; + } + else + { + return face == EnumFacing.DOWN ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockChest.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockChest.java new file mode 100644 index 0000000..e34c994 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockChest.java @@ -0,0 +1,678 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.InventoryLargeChest; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockChest extends BlockContainer +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + protected static final AxisAlignedBB NORTH_CHEST_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0D, 0.9375D, 0.875D, 0.9375D); + protected static final AxisAlignedBB SOUTH_CHEST_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.875D, 1.0D); + protected static final AxisAlignedBB WEST_CHEST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0625D, 0.9375D, 0.875D, 0.9375D); + protected static final AxisAlignedBB EAST_CHEST_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 1.0D, 0.875D, 0.9375D); + protected static final AxisAlignedBB NOT_CONNECTED_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.875D, 0.9375D); + /** 0 : Normal chest, 1 : Trapped chest */ + public final BlockChest.Type chestType; + + protected BlockChest(BlockChest.Type chestTypeIn) + { + super(Material.WOOD); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.chestType = chestTypeIn; + this.setCreativeTab(chestTypeIn == BlockChest.Type.TRAP ? CreativeTabs.REDSTONE : CreativeTabs.DECORATIONS); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return true; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.ENTITYBLOCK_ANIMATED; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + if (source.getBlockState(pos.north()).getBlock() == this) + { + return NORTH_CHEST_AABB; + } + else if (source.getBlockState(pos.south()).getBlock() == this) + { + return SOUTH_CHEST_AABB; + } + else if (source.getBlockState(pos.west()).getBlock() == this) + { + return WEST_CHEST_AABB; + } + else + { + return source.getBlockState(pos.east()).getBlock() == this ? EAST_CHEST_AABB : NOT_CONNECTED_AABB; + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForSurroundingChests(worldIn, pos, state); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() == this) + { + this.checkForSurroundingChests(worldIn, blockpos, iblockstate); + } + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + EnumFacing enumfacing = EnumFacing.getHorizontal(MathHelper.floor((double)(placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3).getOpposite(); + state = state.withProperty(FACING, enumfacing); + BlockPos blockpos = pos.north(); + BlockPos blockpos1 = pos.south(); + BlockPos blockpos2 = pos.west(); + BlockPos blockpos3 = pos.east(); + boolean flag = this == worldIn.getBlockState(blockpos).getBlock(); + boolean flag1 = this == worldIn.getBlockState(blockpos1).getBlock(); + boolean flag2 = this == worldIn.getBlockState(blockpos2).getBlock(); + boolean flag3 = this == worldIn.getBlockState(blockpos3).getBlock(); + + if (!flag && !flag1 && !flag2 && !flag3) + { + worldIn.setBlockState(pos, state, 3); + } + else if (enumfacing.getAxis() != EnumFacing.Axis.X || !flag && !flag1) + { + if (enumfacing.getAxis() == EnumFacing.Axis.Z && (flag2 || flag3)) + { + if (flag2) + { + worldIn.setBlockState(blockpos2, state, 3); + } + else + { + worldIn.setBlockState(blockpos3, state, 3); + } + + worldIn.setBlockState(pos, state, 3); + } + } + else + { + if (flag) + { + worldIn.setBlockState(blockpos, state, 3); + } + else + { + worldIn.setBlockState(blockpos1, state, 3); + } + + worldIn.setBlockState(pos, state, 3); + } + + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityChest) + { + ((TileEntityChest)tileentity).setCustomName(stack.getDisplayName()); + } + } + } + + public IBlockState checkForSurroundingChests(World worldIn, BlockPos pos, IBlockState state) + { + if (worldIn.isRemote) + { + return state; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos.north()); + IBlockState iblockstate1 = worldIn.getBlockState(pos.south()); + IBlockState iblockstate2 = worldIn.getBlockState(pos.west()); + IBlockState iblockstate3 = worldIn.getBlockState(pos.east()); + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (iblockstate.getBlock() != this && iblockstate1.getBlock() != this) + { + boolean flag = iblockstate.isFullBlock(); + boolean flag1 = iblockstate1.isFullBlock(); + + if (iblockstate2.getBlock() == this || iblockstate3.getBlock() == this) + { + BlockPos blockpos1 = iblockstate2.getBlock() == this ? pos.west() : pos.east(); + IBlockState iblockstate7 = worldIn.getBlockState(blockpos1.north()); + IBlockState iblockstate6 = worldIn.getBlockState(blockpos1.south()); + enumfacing = EnumFacing.SOUTH; + EnumFacing enumfacing2; + + if (iblockstate2.getBlock() == this) + { + enumfacing2 = (EnumFacing)iblockstate2.getValue(FACING); + } + else + { + enumfacing2 = (EnumFacing)iblockstate3.getValue(FACING); + } + + if (enumfacing2 == EnumFacing.NORTH) + { + enumfacing = EnumFacing.NORTH; + } + + if ((flag || iblockstate7.isFullBlock()) && !flag1 && !iblockstate6.isFullBlock()) + { + enumfacing = EnumFacing.SOUTH; + } + + if ((flag1 || iblockstate6.isFullBlock()) && !flag && !iblockstate7.isFullBlock()) + { + enumfacing = EnumFacing.NORTH; + } + } + } + else + { + BlockPos blockpos = iblockstate.getBlock() == this ? pos.north() : pos.south(); + IBlockState iblockstate4 = worldIn.getBlockState(blockpos.west()); + IBlockState iblockstate5 = worldIn.getBlockState(blockpos.east()); + enumfacing = EnumFacing.EAST; + EnumFacing enumfacing1; + + if (iblockstate.getBlock() == this) + { + enumfacing1 = (EnumFacing)iblockstate.getValue(FACING); + } + else + { + enumfacing1 = (EnumFacing)iblockstate1.getValue(FACING); + } + + if (enumfacing1 == EnumFacing.WEST) + { + enumfacing = EnumFacing.WEST; + } + + if ((iblockstate2.isFullBlock() || iblockstate4.isFullBlock()) && !iblockstate3.isFullBlock() && !iblockstate5.isFullBlock()) + { + enumfacing = EnumFacing.EAST; + } + + if ((iblockstate3.isFullBlock() || iblockstate5.isFullBlock()) && !iblockstate2.isFullBlock() && !iblockstate4.isFullBlock()) + { + enumfacing = EnumFacing.WEST; + } + } + + state = state.withProperty(FACING, enumfacing); + worldIn.setBlockState(pos, state, 3); + return state; + } + } + + public IBlockState correctFacing(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = null; + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + IBlockState iblockstate = worldIn.getBlockState(pos.offset(enumfacing1)); + + if (iblockstate.getBlock() == this) + { + return state; + } + + if (iblockstate.isFullBlock()) + { + if (enumfacing != null) + { + enumfacing = null; + break; + } + + enumfacing = enumfacing1; + } + } + + if (enumfacing != null) + { + return state.withProperty(FACING, enumfacing.getOpposite()); + } + else + { + EnumFacing enumfacing2 = (EnumFacing)state.getValue(FACING); + + if (worldIn.getBlockState(pos.offset(enumfacing2)).isFullBlock()) + { + enumfacing2 = enumfacing2.getOpposite(); + } + + if (worldIn.getBlockState(pos.offset(enumfacing2)).isFullBlock()) + { + enumfacing2 = enumfacing2.rotateY(); + } + + if (worldIn.getBlockState(pos.offset(enumfacing2)).isFullBlock()) + { + enumfacing2 = enumfacing2.getOpposite(); + } + + return state.withProperty(FACING, enumfacing2); + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + int i = 0; + BlockPos blockpos = pos.west(); + BlockPos blockpos1 = pos.east(); + BlockPos blockpos2 = pos.north(); + BlockPos blockpos3 = pos.south(); + + if (worldIn.getBlockState(blockpos).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos1).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos1)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos2).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos2)) + { + return false; + } + + ++i; + } + + if (worldIn.getBlockState(blockpos3).getBlock() == this) + { + if (this.isDoubleChest(worldIn, blockpos3)) + { + return false; + } + + ++i; + } + + return i <= 1; + } + + private boolean isDoubleChest(World worldIn, BlockPos pos) + { + if (worldIn.getBlockState(pos).getBlock() != this) + { + return false; + } + else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() == this) + { + return true; + } + } + + return false; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityChest) + { + tileentity.updateContainingBlockInfo(); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof IInventory) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (IInventory)tileentity); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.breakBlock(worldIn, pos, state); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + ILockableContainer ilockablecontainer = this.getLockableContainer(worldIn, pos); + + if (ilockablecontainer != null) + { + playerIn.displayGUIChest(ilockablecontainer); + + if (this.chestType == BlockChest.Type.BASIC) + { + playerIn.addStat(StatList.CHEST_OPENED); + } + else if (this.chestType == BlockChest.Type.TRAP) + { + playerIn.addStat(StatList.TRAPPED_CHEST_TRIGGERED); + } + } + + return true; + } + } + + @Nullable + public ILockableContainer getLockableContainer(World worldIn, BlockPos pos) + { + return this.getContainer(worldIn, pos, false); + } + + @Nullable + public ILockableContainer getContainer(World worldIn, BlockPos pos, boolean allowBlocking) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (!(tileentity instanceof TileEntityChest)) + { + return null; + } + else + { + ILockableContainer ilockablecontainer = (TileEntityChest)tileentity; + + if (!allowBlocking && this.isBlocked(worldIn, pos)) + { + return null; + } + else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing); + Block block = worldIn.getBlockState(blockpos).getBlock(); + + if (block == this) + { + if (!allowBlocking && this.isBlocked(worldIn, blockpos)) // Forge: fix MC-99321 + { + return null; + } + + TileEntity tileentity1 = worldIn.getTileEntity(blockpos); + + if (tileentity1 instanceof TileEntityChest) + { + if (enumfacing != EnumFacing.WEST && enumfacing != EnumFacing.NORTH) + { + ilockablecontainer = new InventoryLargeChest("container.chestDouble", ilockablecontainer, (TileEntityChest)tileentity1); + } + else + { + ilockablecontainer = new InventoryLargeChest("container.chestDouble", (TileEntityChest)tileentity1, ilockablecontainer); + } + } + } + } + + return ilockablecontainer; + } + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityChest(); + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return this.chestType == BlockChest.Type.TRAP; + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!blockState.canProvidePower()) + { + return 0; + } + else + { + int i = 0; + TileEntity tileentity = blockAccess.getTileEntity(pos); + + if (tileentity instanceof TileEntityChest) + { + i = ((TileEntityChest)tileentity).numPlayersUsing; + } + + return MathHelper.clamp(i, 0, 15); + } + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.UP ? blockState.getWeakPower(blockAccess, pos, side) : 0; + } + + private boolean isBlocked(World worldIn, BlockPos pos) + { + return this.isBelowSolidBlock(worldIn, pos) || this.isOcelotSittingOnChest(worldIn, pos); + } + + private boolean isBelowSolidBlock(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.up()).doesSideBlockChestOpening(worldIn, pos.up(), EnumFacing.DOWN); + } + + private boolean isOcelotSittingOnChest(World worldIn, BlockPos pos) + { + for (Entity entity : worldIn.getEntitiesWithinAABB(EntityOcelot.class, new AxisAlignedBB((double)pos.getX(), (double)(pos.getY() + 1), (double)pos.getZ(), (double)(pos.getX() + 1), (double)(pos.getY() + 2), (double)(pos.getZ() + 1)))) + { + EntityOcelot entityocelot = (EntityOcelot)entity; + + if (entityocelot.isSitting()) + { + return true; + } + } + + return false; + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return Container.calcRedstoneFromInventory(this.getLockableContainer(worldIn, pos)); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + public static enum Type + { + BASIC, + TRAP; + } + + /* ======================================== FORGE START =====================================*/ + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + return !isDoubleChest(world, pos) && super.rotateBlock(world, pos, axis); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockChorusFlower.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockChorusFlower.java new file mode 100644 index 0000000..b70778f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockChorusFlower.java @@ -0,0 +1,367 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockChorusFlower extends Block +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 5); + + protected BlockChorusFlower() + { + super(Material.PLANTS, MapColor.PURPLE); + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0))); + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setTickRandomly(true); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!this.canSurvive(worldIn, pos)) + { + worldIn.destroyBlock(pos, true); + } + else + { + BlockPos blockpos = pos.up(); + + if (worldIn.isAirBlock(blockpos) && blockpos.getY() < 256) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + if (i < 5 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, blockpos, state, rand.nextInt(1) == 0)) + { + boolean flag = false; + boolean flag1 = false; + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + Block block = iblockstate.getBlock(); + + if (block == Blocks.END_STONE) + { + flag = true; + } + else if (block == Blocks.CHORUS_PLANT) + { + int j = 1; + + for (int k = 0; k < 4; ++k) + { + Block block1 = worldIn.getBlockState(pos.down(j + 1)).getBlock(); + + if (block1 != Blocks.CHORUS_PLANT) + { + if (block1 == Blocks.END_STONE) + { + flag1 = true; + } + + break; + } + + ++j; + } + + int i1 = 4; + + if (flag1) + { + ++i1; + } + + if (j < 2 || rand.nextInt(i1) >= j) + { + flag = true; + } + } + else if (iblockstate.getMaterial() == Material.AIR) + { + flag = true; + } + + if (flag && areAllNeighborsEmpty(worldIn, blockpos, (EnumFacing)null) && worldIn.isAirBlock(pos.up(2))) + { + worldIn.setBlockState(pos, Blocks.CHORUS_PLANT.getDefaultState(), 2); + this.placeGrownFlower(worldIn, blockpos, i); + } + else if (i < 4) + { + int l = rand.nextInt(4); + boolean flag2 = false; + + if (flag1) + { + ++l; + } + + for (int j1 = 0; j1 < l; ++j1) + { + EnumFacing enumfacing = EnumFacing.Plane.HORIZONTAL.random(rand); + BlockPos blockpos1 = pos.offset(enumfacing); + + if (worldIn.isAirBlock(blockpos1) && worldIn.isAirBlock(blockpos1.down()) && areAllNeighborsEmpty(worldIn, blockpos1, enumfacing.getOpposite())) + { + this.placeGrownFlower(worldIn, blockpos1, i + 1); + flag2 = true; + } + } + + if (flag2) + { + worldIn.setBlockState(pos, Blocks.CHORUS_PLANT.getDefaultState(), 2); + } + else + { + this.placeDeadFlower(worldIn, pos); + } + } + else if (i == 4) + { + this.placeDeadFlower(worldIn, pos); + } + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos)); + } + } + } + } + + private void placeGrownFlower(World worldIn, BlockPos pos, int age) + { + worldIn.setBlockState(pos, this.getDefaultState().withProperty(AGE, Integer.valueOf(age)), 2); + worldIn.playEvent(1033, pos, 0); + } + + private void placeDeadFlower(World worldIn, BlockPos pos) + { + worldIn.setBlockState(pos, this.getDefaultState().withProperty(AGE, Integer.valueOf(5)), 2); + worldIn.playEvent(1034, pos, 0); + } + + private static boolean areAllNeighborsEmpty(World worldIn, BlockPos pos, EnumFacing excludingSide) + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (enumfacing != excludingSide && !worldIn.isAirBlock(pos.offset(enumfacing))) + { + return false; + } + } + + return true; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) && this.canSurvive(worldIn, pos); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canSurvive(worldIn, pos)) + { + worldIn.scheduleUpdate(pos, this, 1); + } + } + + public boolean canSurvive(World worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + Block block = iblockstate.getBlock(); + + if (block != Blocks.CHORUS_PLANT && block != Blocks.END_STONE) + { + if (iblockstate.getMaterial() == Material.AIR) + { + int i = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.offset(enumfacing)); + Block block1 = iblockstate1.getBlock(); + + if (block1 == Blocks.CHORUS_PLANT) + { + ++i; + } + else if (iblockstate1.getMaterial() != Material.AIR) + { + return false; + } + } + + return i == 1; + } + else + { + return false; + } + } + else + { + return true; + } + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + spawnAsEntity(worldIn, pos, new ItemStack(Item.getItemFromBlock(this))); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return ItemStack.EMPTY; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE}); + } + + public static void generatePlant(World worldIn, BlockPos pos, Random rand, int p_185603_3_) + { + worldIn.setBlockState(pos, Blocks.CHORUS_PLANT.getDefaultState(), 2); + growTreeRecursive(worldIn, pos, rand, pos, p_185603_3_, 0); + } + + private static void growTreeRecursive(World worldIn, BlockPos p_185601_1_, Random rand, BlockPos p_185601_3_, int p_185601_4_, int p_185601_5_) + { + int i = rand.nextInt(4) + 1; + + if (p_185601_5_ == 0) + { + ++i; + } + + for (int j = 0; j < i; ++j) + { + BlockPos blockpos = p_185601_1_.up(j + 1); + + if (!areAllNeighborsEmpty(worldIn, blockpos, (EnumFacing)null)) + { + return; + } + + worldIn.setBlockState(blockpos, Blocks.CHORUS_PLANT.getDefaultState(), 2); + } + + boolean flag = false; + + if (p_185601_5_ < 4) + { + int l = rand.nextInt(4); + + if (p_185601_5_ == 0) + { + ++l; + } + + for (int k = 0; k < l; ++k) + { + EnumFacing enumfacing = EnumFacing.Plane.HORIZONTAL.random(rand); + BlockPos blockpos1 = p_185601_1_.up(i).offset(enumfacing); + + if (Math.abs(blockpos1.getX() - p_185601_3_.getX()) < p_185601_4_ && Math.abs(blockpos1.getZ() - p_185601_3_.getZ()) < p_185601_4_ && worldIn.isAirBlock(blockpos1) && worldIn.isAirBlock(blockpos1.down()) && areAllNeighborsEmpty(worldIn, blockpos1, enumfacing.getOpposite())) + { + flag = true; + worldIn.setBlockState(blockpos1, Blocks.CHORUS_PLANT.getDefaultState(), 2); + growTreeRecursive(worldIn, blockpos1, rand, p_185601_3_, p_185601_4_, p_185601_5_ + 1); + } + } + } + + if (!flag) + { + worldIn.setBlockState(p_185601_1_.up(i), Blocks.CHORUS_FLOWER.getDefaultState().withProperty(AGE, Integer.valueOf(5)), 2); + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockChorusPlant.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockChorusPlant.java new file mode 100644 index 0000000..c7e01ba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockChorusPlant.java @@ -0,0 +1,248 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockChorusPlant extends Block +{ + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool DOWN = PropertyBool.create("down"); + + protected BlockChorusPlant() + { + super(Material.PLANTS, MapColor.PURPLE); + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)).withProperty(UP, Boolean.valueOf(false)).withProperty(DOWN, Boolean.valueOf(false))); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos.down()).getBlock(); + Block block1 = worldIn.getBlockState(pos.up()).getBlock(); + Block block2 = worldIn.getBlockState(pos.north()).getBlock(); + Block block3 = worldIn.getBlockState(pos.east()).getBlock(); + Block block4 = worldIn.getBlockState(pos.south()).getBlock(); + Block block5 = worldIn.getBlockState(pos.west()).getBlock(); + return state.withProperty(DOWN, Boolean.valueOf(block == this || block == Blocks.CHORUS_FLOWER || block == Blocks.END_STONE)).withProperty(UP, Boolean.valueOf(block1 == this || block1 == Blocks.CHORUS_FLOWER)).withProperty(NORTH, Boolean.valueOf(block2 == this || block2 == Blocks.CHORUS_FLOWER)).withProperty(EAST, Boolean.valueOf(block3 == this || block3 == Blocks.CHORUS_FLOWER)).withProperty(SOUTH, Boolean.valueOf(block4 == this || block4 == Blocks.CHORUS_FLOWER)).withProperty(WEST, Boolean.valueOf(block5 == this || block5 == Blocks.CHORUS_FLOWER)); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = state.getActualState(source, pos); + float f = 0.1875F; + float f1 = ((Boolean)state.getValue(WEST)).booleanValue() ? 0.0F : 0.1875F; + float f2 = ((Boolean)state.getValue(DOWN)).booleanValue() ? 0.0F : 0.1875F; + float f3 = ((Boolean)state.getValue(NORTH)).booleanValue() ? 0.0F : 0.1875F; + float f4 = ((Boolean)state.getValue(EAST)).booleanValue() ? 1.0F : 0.8125F; + float f5 = ((Boolean)state.getValue(UP)).booleanValue() ? 1.0F : 0.8125F; + float f6 = ((Boolean)state.getValue(SOUTH)).booleanValue() ? 1.0F : 0.8125F; + return new AxisAlignedBB((double)f1, (double)f2, (double)f3, (double)f4, (double)f5, (double)f6); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + if (!isActualState) + { + state = state.getActualState(worldIn, pos); + } + + float f = 0.1875F; + float f1 = 0.8125F; + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.1875D, 0.1875D, 0.1875D, 0.8125D, 0.8125D, 0.8125D)); + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.0D, 0.1875D, 0.1875D, 0.1875D, 0.8125D, 0.8125D)); + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.8125D, 0.1875D, 0.1875D, 1.0D, 0.8125D, 0.8125D)); + } + + if (((Boolean)state.getValue(UP)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.1875D, 0.8125D, 0.1875D, 0.8125D, 1.0D, 0.8125D)); + } + + if (((Boolean)state.getValue(DOWN)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 0.8125D, 0.1875D, 0.8125D)); + } + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.1875D, 0.1875D, 0.0D, 0.8125D, 0.8125D, 0.1875D)); + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, new AxisAlignedBB(0.1875D, 0.1875D, 0.8125D, 0.8125D, 0.8125D, 1.0D)); + } + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return 0; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!this.canSurviveAt(worldIn, pos)) + { + worldIn.destroyBlock(pos, true); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.CHORUS_FRUIT; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return random.nextInt(2); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) ? this.canSurviveAt(worldIn, pos) : false; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canSurviveAt(worldIn, pos)) + { + worldIn.scheduleUpdate(pos, this, 1); + } + } + + public boolean canSurviveAt(World wordIn, BlockPos pos) + { + boolean flag = wordIn.isAirBlock(pos.up()); + boolean flag1 = wordIn.isAirBlock(pos.down()); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing); + Block block = wordIn.getBlockState(blockpos).getBlock(); + + if (block == this) + { + if (!flag && !flag1) + { + return false; + } + + Block block1 = wordIn.getBlockState(blockpos.down()).getBlock(); + + if (block1 == this || block1 == Blocks.END_STONE) + { + return true; + } + } + } + + Block block2 = wordIn.getBlockState(pos.down()).getBlock(); + return block2 == this || block2 == Blocks.END_STONE; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {NORTH, EAST, SOUTH, WEST, UP, DOWN}); + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + Block block = blockAccess.getBlockState(pos.offset(side)).getBlock(); + return block != this && block != Blocks.CHORUS_FLOWER && (side != EnumFacing.DOWN || block != Blocks.END_STONE); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockClay.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockClay.java new file mode 100644 index 0000000..141705e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockClay.java @@ -0,0 +1,33 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; + +public class BlockClay extends Block +{ + public BlockClay() + { + super(Material.CLAY); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.CLAY_BALL; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 4; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCocoa.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCocoa.java new file mode 100644 index 0000000..1ade7f3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCocoa.java @@ -0,0 +1,249 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockCocoa extends BlockHorizontal implements IGrowable +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 2); + protected static final AxisAlignedBB[] COCOA_EAST_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.6875D, 0.4375D, 0.375D, 0.9375D, 0.75D, 0.625D), new AxisAlignedBB(0.5625D, 0.3125D, 0.3125D, 0.9375D, 0.75D, 0.6875D), new AxisAlignedBB(0.4375D, 0.1875D, 0.25D, 0.9375D, 0.75D, 0.75D)}; + protected static final AxisAlignedBB[] COCOA_WEST_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0625D, 0.4375D, 0.375D, 0.3125D, 0.75D, 0.625D), new AxisAlignedBB(0.0625D, 0.3125D, 0.3125D, 0.4375D, 0.75D, 0.6875D), new AxisAlignedBB(0.0625D, 0.1875D, 0.25D, 0.5625D, 0.75D, 0.75D)}; + protected static final AxisAlignedBB[] COCOA_NORTH_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.375D, 0.4375D, 0.0625D, 0.625D, 0.75D, 0.3125D), new AxisAlignedBB(0.3125D, 0.3125D, 0.0625D, 0.6875D, 0.75D, 0.4375D), new AxisAlignedBB(0.25D, 0.1875D, 0.0625D, 0.75D, 0.75D, 0.5625D)}; + protected static final AxisAlignedBB[] COCOA_SOUTH_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.375D, 0.4375D, 0.6875D, 0.625D, 0.75D, 0.9375D), new AxisAlignedBB(0.3125D, 0.3125D, 0.5625D, 0.6875D, 0.75D, 0.9375D), new AxisAlignedBB(0.25D, 0.1875D, 0.4375D, 0.75D, 0.75D, 0.9375D)}; + + public BlockCocoa() + { + super(Material.PLANTS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(AGE, Integer.valueOf(0))); + this.setTickRandomly(true); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!this.canBlockStay(worldIn, pos, state)) + { + this.dropBlock(worldIn, pos, state); + } + else + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + if (i < 2 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, pos, state, rand.nextInt(5) == 0)) + { + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(i + 1)), 2); + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos)); + } + } + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + pos = pos.offset((EnumFacing)state.getValue(FACING)); + IBlockState iblockstate = worldIn.getBlockState(pos); + return iblockstate.getBlock() == Blocks.LOG && iblockstate.getValue(BlockOldLog.VARIANT) == BlockPlanks.EnumType.JUNGLE; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + switch ((EnumFacing)state.getValue(FACING)) + { + case SOUTH: + return COCOA_SOUTH_AABB[i]; + case NORTH: + default: + return COCOA_NORTH_AABB[i]; + case WEST: + return COCOA_WEST_AABB[i]; + case EAST: + return COCOA_EAST_AABB[i]; + } + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + EnumFacing enumfacing = EnumFacing.fromAngle((double)placer.rotationYaw); + worldIn.setBlockState(pos, state.withProperty(FACING, enumfacing), 2); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + if (!facing.getAxis().isHorizontal()) + { + facing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, facing.getOpposite()).withProperty(AGE, Integer.valueOf(0)); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.canBlockStay(worldIn, pos, state)) + { + this.dropBlock(worldIn, pos, state); + } + } + + private void dropBlock(World worldIn, BlockPos pos, IBlockState state) + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 3); + this.dropBlockAsItem(worldIn, pos, state, 0); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + super.getDrops(drops, world, pos, state, fortune); + int i = ((Integer)state.getValue(AGE)).intValue(); + int j = 1; + + if (i >= 2) + { + j = 3; + } + + for (int k = 0; k < j; ++k) + { + drops.add(new ItemStack(Items.DYE, 1, EnumDyeColor.BROWN.getDyeDamage())); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.DYE, 1, EnumDyeColor.BROWN.getDyeDamage()); + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return ((Integer)state.getValue(AGE)).intValue() < 2; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return true; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(((Integer)state.getValue(AGE)).intValue() + 1)), 2); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)).withProperty(AGE, Integer.valueOf((meta & 15) >> 2)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + i = i | ((Integer)state.getValue(AGE)).intValue() << 2; + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, AGE}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockColored.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockColored.java new file mode 100644 index 0000000..c7c7b1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockColored.java @@ -0,0 +1,75 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockColored extends Block +{ + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + + public BlockColored(Material materialIn) + { + super(materialIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(COLOR, EnumDyeColor.WHITE)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + items.add(new ItemStack(this, 1, enumdyecolor.getMetadata())); + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.getBlockColor((EnumDyeColor)state.getValue(COLOR)); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {COLOR}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCommandBlock.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCommandBlock.java new file mode 100644 index 0000000..9df4e23 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCommandBlock.java @@ -0,0 +1,342 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.GameRules; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class BlockCommandBlock extends BlockContainer +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final PropertyDirection FACING = BlockDirectional.FACING; + public static final PropertyBool CONDITIONAL = PropertyBool.create("conditional"); + + public BlockCommandBlock(MapColor color) + { + super(Material.IRON, color); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(CONDITIONAL, Boolean.valueOf(false))); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + TileEntityCommandBlock tileentitycommandblock = new TileEntityCommandBlock(); + tileentitycommandblock.setAuto(this == Blocks.CHAIN_COMMAND_BLOCK); + return tileentitycommandblock; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityCommandBlock) + { + TileEntityCommandBlock tileentitycommandblock = (TileEntityCommandBlock)tileentity; + boolean flag = worldIn.isBlockPowered(pos); + boolean flag1 = tileentitycommandblock.isPowered(); + tileentitycommandblock.setPowered(flag); + + if (!flag1 && !tileentitycommandblock.isAuto() && tileentitycommandblock.getMode() != TileEntityCommandBlock.Mode.SEQUENCE) + { + if (flag) + { + tileentitycommandblock.setConditionMet(); + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + } + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityCommandBlock) + { + TileEntityCommandBlock tileentitycommandblock = (TileEntityCommandBlock)tileentity; + CommandBlockBaseLogic commandblockbaselogic = tileentitycommandblock.getCommandBlockLogic(); + boolean flag = !StringUtils.isNullOrEmpty(commandblockbaselogic.getCommand()); + TileEntityCommandBlock.Mode tileentitycommandblock$mode = tileentitycommandblock.getMode(); + boolean flag1 = tileentitycommandblock.isConditionMet(); + + if (tileentitycommandblock$mode == TileEntityCommandBlock.Mode.AUTO) + { + tileentitycommandblock.setConditionMet(); + + if (flag1) + { + this.execute(state, worldIn, pos, commandblockbaselogic, flag); + } + else if (tileentitycommandblock.isConditional()) + { + commandblockbaselogic.setSuccessCount(0); + } + + if (tileentitycommandblock.isPowered() || tileentitycommandblock.isAuto()) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + else if (tileentitycommandblock$mode == TileEntityCommandBlock.Mode.REDSTONE) + { + if (flag1) + { + this.execute(state, worldIn, pos, commandblockbaselogic, flag); + } + else if (tileentitycommandblock.isConditional()) + { + commandblockbaselogic.setSuccessCount(0); + } + } + + worldIn.updateComparatorOutputLevel(pos, this); + } + } + } + + private void execute(IBlockState p_193387_1_, World p_193387_2_, BlockPos p_193387_3_, CommandBlockBaseLogic p_193387_4_, boolean p_193387_5_) + { + if (p_193387_5_) + { + p_193387_4_.trigger(p_193387_2_); + } + else + { + p_193387_4_.setSuccessCount(0); + } + + executeChain(p_193387_2_, p_193387_3_, (EnumFacing)p_193387_1_.getValue(FACING)); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 1; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityCommandBlock && playerIn.canUseCommandBlock()) + { + playerIn.displayGuiCommandBlock((TileEntityCommandBlock)tileentity); + return true; + } + else + { + return false; + } + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity instanceof TileEntityCommandBlock ? ((TileEntityCommandBlock)tileentity).getCommandBlockLogic().getSuccessCount() : 0; + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityCommandBlock) + { + TileEntityCommandBlock tileentitycommandblock = (TileEntityCommandBlock)tileentity; + CommandBlockBaseLogic commandblockbaselogic = tileentitycommandblock.getCommandBlockLogic(); + + if (stack.hasDisplayName()) + { + commandblockbaselogic.setName(stack.getDisplayName()); + } + + if (!worldIn.isRemote) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound == null || !nbttagcompound.hasKey("BlockEntityTag", 10)) + { + commandblockbaselogic.setTrackOutput(worldIn.getGameRules().getBoolean("sendCommandFeedback")); + tileentitycommandblock.setAuto(this == Blocks.CHAIN_COMMAND_BLOCK); + } + + if (tileentitycommandblock.getMode() == TileEntityCommandBlock.Mode.SEQUENCE) + { + boolean flag = worldIn.isBlockPowered(pos); + tileentitycommandblock.setPowered(flag); + } + } + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getFront(meta & 7)).withProperty(CONDITIONAL, Boolean.valueOf((meta & 8) != 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex() | (((Boolean)state.getValue(CONDITIONAL)).booleanValue() ? 8 : 0); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, CONDITIONAL}); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer)).withProperty(CONDITIONAL, Boolean.valueOf(false)); + } + + private static void executeChain(World p_193386_0_, BlockPos p_193386_1_, EnumFacing p_193386_2_) + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(p_193386_1_); + GameRules gamerules = p_193386_0_.getGameRules(); + int i; + IBlockState iblockstate; + + for (i = gamerules.getInt("maxCommandChainLength"); i-- > 0; p_193386_2_ = (EnumFacing)iblockstate.getValue(FACING)) + { + blockpos$mutableblockpos.move(p_193386_2_); + iblockstate = p_193386_0_.getBlockState(blockpos$mutableblockpos); + Block block = iblockstate.getBlock(); + + if (block != Blocks.CHAIN_COMMAND_BLOCK) + { + break; + } + + TileEntity tileentity = p_193386_0_.getTileEntity(blockpos$mutableblockpos); + + if (!(tileentity instanceof TileEntityCommandBlock)) + { + break; + } + + TileEntityCommandBlock tileentitycommandblock = (TileEntityCommandBlock)tileentity; + + if (tileentitycommandblock.getMode() != TileEntityCommandBlock.Mode.SEQUENCE) + { + break; + } + + if (tileentitycommandblock.isPowered() || tileentitycommandblock.isAuto()) + { + CommandBlockBaseLogic commandblockbaselogic = tileentitycommandblock.getCommandBlockLogic(); + + if (tileentitycommandblock.setConditionMet()) + { + if (!commandblockbaselogic.trigger(p_193386_0_)) + { + break; + } + + p_193386_0_.updateComparatorOutputLevel(blockpos$mutableblockpos, block); + } + else if (tileentitycommandblock.isConditional()) + { + commandblockbaselogic.setSuccessCount(0); + } + } + } + + if (i <= 0) + { + int j = Math.max(gamerules.getInt("maxCommandChainLength"), 0); + LOGGER.warn("Commandblock chain tried to execure more than " + j + " steps!"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCompressedPowered.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCompressedPowered.java new file mode 100644 index 0000000..0f48eb8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCompressedPowered.java @@ -0,0 +1,29 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockCompressedPowered extends Block +{ + public BlockCompressedPowered(Material materialIn, MapColor color) + { + super(materialIn, color); + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return 15; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockConcretePowder.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockConcretePowder.java new file mode 100644 index 0000000..0a57c1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockConcretePowder.java @@ -0,0 +1,136 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockConcretePowder extends BlockFalling +{ + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + + public BlockConcretePowder() + { + super(Material.SAND); + this.setDefaultState(this.blockState.getBaseState().withProperty(COLOR, EnumDyeColor.WHITE)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + public void onEndFalling(World worldIn, BlockPos pos, IBlockState p_176502_3_, IBlockState p_176502_4_) + { + if (p_176502_4_.getMaterial().isLiquid()) + { + worldIn.setBlockState(pos, Blocks.CONCRETE.getDefaultState().withProperty(BlockColored.COLOR, p_176502_3_.getValue(COLOR)), 3); + } + } + + protected boolean tryTouchWater(World worldIn, BlockPos pos, IBlockState state) + { + boolean flag = false; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (enumfacing != EnumFacing.DOWN) + { + BlockPos blockpos = pos.offset(enumfacing); + + if (worldIn.getBlockState(blockpos).getMaterial() == Material.WATER) + { + flag = true; + break; + } + } + } + + if (flag) + { + worldIn.setBlockState(pos, Blocks.CONCRETE.getDefaultState().withProperty(BlockColored.COLOR, state.getValue(COLOR)), 3); + } + + return flag; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.tryTouchWater(worldIn, pos, state)) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.tryTouchWater(worldIn, pos, state)) + { + super.onBlockAdded(worldIn, pos, state); + } + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + items.add(new ItemStack(this, 1, enumdyecolor.getMetadata())); + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.getBlockColor((EnumDyeColor)state.getValue(COLOR)); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {COLOR}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockContainer.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockContainer.java new file mode 100644 index 0000000..857bc6f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockContainer.java @@ -0,0 +1,107 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorldNameable; +import net.minecraft.world.World; + +public abstract class BlockContainer extends Block implements ITileEntityProvider +{ + protected BlockContainer(Material materialIn) + { + this(materialIn, materialIn.getMaterialMapColor()); + } + + protected BlockContainer(Material materialIn, MapColor color) + { + super(materialIn, color); + this.hasTileEntity = true; + } + + protected boolean isInvalidNeighbor(World worldIn, BlockPos pos, EnumFacing facing) + { + return worldIn.getBlockState(pos.offset(facing)).getMaterial() == Material.CACTUS; + } + + protected boolean hasInvalidNeighbor(World worldIn, BlockPos pos) + { + return this.isInvalidNeighbor(worldIn, pos, EnumFacing.NORTH) || this.isInvalidNeighbor(worldIn, pos, EnumFacing.SOUTH) || this.isInvalidNeighbor(worldIn, pos, EnumFacing.WEST) || this.isInvalidNeighbor(worldIn, pos, EnumFacing.EAST); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + worldIn.removeTileEntity(pos); + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (te instanceof IWorldNameable && ((IWorldNameable)te).hasCustomName()) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.005F); + + if (worldIn.isRemote) + { + return; + } + + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); + Item item = this.getItemDropped(state, worldIn.rand, i); + + if (item == Items.AIR) + { + return; + } + + ItemStack itemstack = new ItemStack(item, this.quantityDropped(worldIn.rand)); + itemstack.setStackDisplayName(((IWorldNameable)te).getName()); + spawnAsEntity(worldIn, pos, itemstack); + } + else + { + super.harvestBlock(worldIn, player, pos, state, (TileEntity)null, stack); + } + } + + /** + * Called on server when World#addBlockEvent is called. If server returns true, then also called on the client. On + * the Server, this may perform additional changes to the world, like pistons replacing the block with an extended + * base. On the client, the update may involve replacing tile entities or effects such as sounds or particles + */ + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) + { + super.eventReceived(state, worldIn, pos, id, param); + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(id, param); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockCrops.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCrops.java new file mode 100644 index 0000000..ad61c1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockCrops.java @@ -0,0 +1,281 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockCrops extends BlockBush implements IGrowable +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7); + private static final AxisAlignedBB[] CROPS_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + + protected BlockCrops() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(this.getAgeProperty(), Integer.valueOf(0))); + this.setTickRandomly(true); + this.setCreativeTab((CreativeTabs)null); + this.setHardness(0.0F); + this.setSoundType(SoundType.PLANT); + this.disableStats(); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return CROPS_AABB[((Integer)state.getValue(this.getAgeProperty())).intValue()]; + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.getBlock() == Blocks.FARMLAND; + } + + protected PropertyInteger getAgeProperty() + { + return AGE; + } + + public int getMaxAge() + { + return 7; + } + + protected int getAge(IBlockState state) + { + return ((Integer)state.getValue(this.getAgeProperty())).intValue(); + } + + public IBlockState withAge(int age) + { + return this.getDefaultState().withProperty(this.getAgeProperty(), Integer.valueOf(age)); + } + + public boolean isMaxAge(IBlockState state) + { + return ((Integer)state.getValue(this.getAgeProperty())).intValue() >= this.getMaxAge(); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + super.updateTick(worldIn, pos, state, rand); + + if (!worldIn.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light + if (worldIn.getLightFromNeighbors(pos.up()) >= 9) + { + int i = this.getAge(state); + + if (i < this.getMaxAge()) + { + float f = getGrowthChance(this, worldIn, pos); + + if(net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, pos, state, rand.nextInt((int)(25.0F / f) + 1) == 0)) + { + worldIn.setBlockState(pos, this.withAge(i + 1), 2); + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos)); + } + } + } + } + + public void grow(World worldIn, BlockPos pos, IBlockState state) + { + int i = this.getAge(state) + this.getBonemealAgeIncrease(worldIn); + int j = this.getMaxAge(); + + if (i > j) + { + i = j; + } + + worldIn.setBlockState(pos, this.withAge(i), 2); + } + + protected int getBonemealAgeIncrease(World worldIn) + { + return MathHelper.getInt(worldIn.rand, 2, 5); + } + + protected static float getGrowthChance(Block blockIn, World worldIn, BlockPos pos) + { + float f = 1.0F; + BlockPos blockpos = pos.down(); + + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1; ++j) + { + float f1 = 0.0F; + IBlockState iblockstate = worldIn.getBlockState(blockpos.add(i, 0, j)); + + if (iblockstate.getBlock().canSustainPlant(iblockstate, worldIn, blockpos.add(i, 0, j), net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)blockIn)) + { + f1 = 1.0F; + + if (iblockstate.getBlock().isFertile(worldIn, blockpos.add(i, 0, j))) + { + f1 = 3.0F; + } + } + + if (i != 0 || j != 0) + { + f1 /= 4.0F; + } + + f += f1; + } + } + + BlockPos blockpos1 = pos.north(); + BlockPos blockpos2 = pos.south(); + BlockPos blockpos3 = pos.west(); + BlockPos blockpos4 = pos.east(); + boolean flag = blockIn == worldIn.getBlockState(blockpos3).getBlock() || blockIn == worldIn.getBlockState(blockpos4).getBlock(); + boolean flag1 = blockIn == worldIn.getBlockState(blockpos1).getBlock() || blockIn == worldIn.getBlockState(blockpos2).getBlock(); + + if (flag && flag1) + { + f /= 2.0F; + } + else + { + boolean flag2 = blockIn == worldIn.getBlockState(blockpos3.north()).getBlock() || blockIn == worldIn.getBlockState(blockpos4.north()).getBlock() || blockIn == worldIn.getBlockState(blockpos4.south()).getBlock() || blockIn == worldIn.getBlockState(blockpos3.south()).getBlock(); + + if (flag2) + { + f /= 2.0F; + } + } + + return f; + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + IBlockState soil = worldIn.getBlockState(pos.down()); + return (worldIn.getLight(pos) >= 8 || worldIn.canSeeSky(pos)) && soil.getBlock().canSustainPlant(soil, worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this); + } + + protected Item getSeed() + { + return Items.WHEAT_SEEDS; + } + + protected Item getCrop() + { + return Items.WHEAT; + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + super.getDrops(drops, world, pos, state, 0); + int age = getAge(state); + Random rand = world instanceof World ? ((World)world).rand : new Random(); + + if (age >= getMaxAge()) + { + int k = 3 + fortune; + + for (int i = 0; i < 3 + fortune; ++i) + { + if (rand.nextInt(2 * getMaxAge()) <= age) + { + drops.add(new ItemStack(this.getSeed(), 1, 0)); + } + } + } + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + + if (false && !worldIn.isRemote) // Forge: NOP all this. + { + int i = this.getAge(state); + + if (i >= this.getMaxAge()) + { + int j = 3 + fortune; + + for (int k = 0; k < j; ++k) + { + if (worldIn.rand.nextInt(2 * this.getMaxAge()) <= i) + { + spawnAsEntity(worldIn, pos, new ItemStack(this.getSeed())); + } + } + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return this.isMaxAge(state) ? this.getCrop() : this.getSeed(); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this.getSeed()); + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return !this.isMaxAge(state); + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return true; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + this.grow(worldIn, pos, state); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.withAge(meta); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return this.getAge(state); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDaylightDetector.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDaylightDetector.java new file mode 100644 index 0000000..ca55244 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDaylightDetector.java @@ -0,0 +1,213 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDaylightDetector; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockDaylightDetector extends BlockContainer +{ + public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); + protected static final AxisAlignedBB DAYLIGHT_DETECTOR_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D); + private final boolean inverted; + + public BlockDaylightDetector(boolean inverted) + { + super(Material.WOOD); + this.inverted = inverted; + this.setDefaultState(this.blockState.getBaseState().withProperty(POWER, Integer.valueOf(0))); + this.setCreativeTab(CreativeTabs.REDSTONE); + this.setHardness(0.2F); + this.setSoundType(SoundType.WOOD); + this.setUnlocalizedName("daylightDetector"); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return DAYLIGHT_DETECTOR_AABB; + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return ((Integer)blockState.getValue(POWER)).intValue(); + } + + public void updatePower(World worldIn, BlockPos pos) + { + if (worldIn.provider.hasSkyLight()) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + int i = worldIn.getLightFor(EnumSkyBlock.SKY, pos) - worldIn.getSkylightSubtracted(); + float f = worldIn.getCelestialAngleRadians(1.0F); + + if (this.inverted) + { + i = 15 - i; + } + + if (i > 0 && !this.inverted) + { + float f1 = f < (float)Math.PI ? 0.0F : ((float)Math.PI * 2F); + f = f + (f1 - f) * 0.2F; + i = Math.round((float)i * MathHelper.cos(f)); + } + + i = MathHelper.clamp(i, 0, 15); + + if (((Integer)iblockstate.getValue(POWER)).intValue() != i) + { + worldIn.setBlockState(pos, iblockstate.withProperty(POWER, Integer.valueOf(i)), 3); + } + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (playerIn.isAllowEdit()) + { + if (worldIn.isRemote) + { + return true; + } + else + { + if (this.inverted) + { + worldIn.setBlockState(pos, Blocks.DAYLIGHT_DETECTOR.getDefaultState().withProperty(POWER, state.getValue(POWER)), 4); + Blocks.DAYLIGHT_DETECTOR.updatePower(worldIn, pos); + } + else + { + worldIn.setBlockState(pos, Blocks.DAYLIGHT_DETECTOR_INVERTED.getDefaultState().withProperty(POWER, state.getValue(POWER)), 4); + Blocks.DAYLIGHT_DETECTOR_INVERTED.updatePower(worldIn, pos); + } + + return true; + } + } + else + { + return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.DAYLIGHT_DETECTOR); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.DAYLIGHT_DETECTOR); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDaylightDetector(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWER, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(POWER)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {POWER}); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + if (!this.inverted) + { + super.getSubBlocks(itemIn, items); + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDeadBush.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDeadBush.java new file mode 100644 index 0000000..bebf341 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDeadBush.java @@ -0,0 +1,97 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockDeadBush extends BlockBush implements net.minecraftforge.common.IShearable +{ + protected static final AxisAlignedBB DEAD_BUSH_AABB = new AxisAlignedBB(0.09999999403953552D, 0.0D, 0.09999999403953552D, 0.8999999761581421D, 0.800000011920929D, 0.8999999761581421D); + + protected BlockDeadBush() + { + super(Material.VINE); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return DEAD_BUSH_AABB; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.WOOD; + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.getBlock() == Blocks.SAND || state.getBlock() == Blocks.HARDENED_CLAY || state.getBlock() == Blocks.STAINED_HARDENED_CLAY || state.getBlock() == Blocks.DIRT; + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return random.nextInt(3); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.STICK; + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (!worldIn.isRemote && stack.getItem() == Items.SHEARS) + { + player.addStat(StatList.getBlockStats(this)); + spawnAsEntity(worldIn, pos, new ItemStack(Blocks.DEADBUSH, 1, 0)); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + return java.util.Arrays.asList(new ItemStack(Blocks.DEADBUSH)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDirectional.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDirectional.java new file mode 100644 index 0000000..c465f70 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDirectional.java @@ -0,0 +1,14 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; + +public abstract class BlockDirectional extends Block +{ + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + + protected BlockDirectional(Material materialIn) + { + super(materialIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDirt.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDirt.java new file mode 100644 index 0000000..95c50a6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDirt.java @@ -0,0 +1,174 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockDirt extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockDirt.DirtType.class); + public static final PropertyBool SNOWY = PropertyBool.create("snowy"); + + protected BlockDirt() + { + super(Material.GROUND); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockDirt.DirtType.DIRT).withProperty(SNOWY, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockDirt.DirtType)state.getValue(VARIANT)).getColor(); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(VARIANT) == BlockDirt.DirtType.PODZOL) + { + Block block = worldIn.getBlockState(pos.up()).getBlock(); + state = state.withProperty(SNOWY, Boolean.valueOf(block == Blocks.SNOW || block == Blocks.SNOW_LAYER)); + } + + return state; + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, BlockDirt.DirtType.DIRT.getMetadata())); + items.add(new ItemStack(this, 1, BlockDirt.DirtType.COARSE_DIRT.getMetadata())); + items.add(new ItemStack(this, 1, BlockDirt.DirtType.PODZOL.getMetadata())); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this, 1, ((BlockDirt.DirtType)state.getValue(VARIANT)).getMetadata()); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockDirt.DirtType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockDirt.DirtType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT, SNOWY}); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + BlockDirt.DirtType blockdirt$dirttype = (BlockDirt.DirtType)state.getValue(VARIANT); + + if (blockdirt$dirttype == BlockDirt.DirtType.PODZOL) + { + blockdirt$dirttype = BlockDirt.DirtType.DIRT; + } + + return blockdirt$dirttype.getMetadata(); + } + + public static enum DirtType implements IStringSerializable + { + DIRT(0, "dirt", "default", MapColor.DIRT), + COARSE_DIRT(1, "coarse_dirt", "coarse", MapColor.DIRT), + PODZOL(2, "podzol", MapColor.OBSIDIAN); + + private static final BlockDirt.DirtType[] METADATA_LOOKUP = new BlockDirt.DirtType[values().length]; + private final int metadata; + private final String name; + private final String unlocalizedName; + private final MapColor color; + + private DirtType(int metadataIn, String nameIn, MapColor color) + { + this(metadataIn, nameIn, nameIn, color); + } + + private DirtType(int metadataIn, String nameIn, String unlocalizedNameIn, MapColor color) + { + this.metadata = metadataIn; + this.name = nameIn; + this.unlocalizedName = unlocalizedNameIn; + this.color = color; + } + + public int getMetadata() + { + return this.metadata; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + public MapColor getColor() + { + return this.color; + } + + public String toString() + { + return this.name; + } + + public static BlockDirt.DirtType byMetadata(int metadata) + { + if (metadata < 0 || metadata >= METADATA_LOOKUP.length) + { + metadata = 0; + } + + return METADATA_LOOKUP[metadata]; + } + + public String getName() + { + return this.name; + } + + static + { + for (BlockDirt.DirtType blockdirt$dirttype : values()) + { + METADATA_LOOKUP[blockdirt$dirttype.getMetadata()] = blockdirt$dirttype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDispenser.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDispenser.java new file mode 100644 index 0000000..ccbaee9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDispenser.java @@ -0,0 +1,321 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.dispenser.PositionImpl; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.tileentity.TileEntityDropper; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.RegistryDefaulted; +import net.minecraft.world.World; + +public class BlockDispenser extends BlockContainer +{ + public static final PropertyDirection FACING = BlockDirectional.FACING; + public static final PropertyBool TRIGGERED = PropertyBool.create("triggered"); + /** Registry for all dispense behaviors. */ + public static final RegistryDefaulted DISPENSE_BEHAVIOR_REGISTRY = new RegistryDefaulted(new BehaviorDefaultDispenseItem()); + protected Random rand = new Random(); + + protected BlockDispenser() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(TRIGGERED, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 4; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + this.setDefaultDirection(worldIn, pos, state); + } + + private void setDefaultDirection(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + boolean flag = worldIn.getBlockState(pos.north()).isFullBlock(); + boolean flag1 = worldIn.getBlockState(pos.south()).isFullBlock(); + + if (enumfacing == EnumFacing.NORTH && flag && !flag1) + { + enumfacing = EnumFacing.SOUTH; + } + else if (enumfacing == EnumFacing.SOUTH && flag1 && !flag) + { + enumfacing = EnumFacing.NORTH; + } + else + { + boolean flag2 = worldIn.getBlockState(pos.west()).isFullBlock(); + boolean flag3 = worldIn.getBlockState(pos.east()).isFullBlock(); + + if (enumfacing == EnumFacing.WEST && flag2 && !flag3) + { + enumfacing = EnumFacing.EAST; + } + else if (enumfacing == EnumFacing.EAST && flag3 && !flag2) + { + enumfacing = EnumFacing.WEST; + } + } + + worldIn.setBlockState(pos, state.withProperty(FACING, enumfacing).withProperty(TRIGGERED, Boolean.valueOf(false)), 2); + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityDispenser) + { + playerIn.displayGUIChest((TileEntityDispenser)tileentity); + + if (tileentity instanceof TileEntityDropper) + { + playerIn.addStat(StatList.DROPPER_INSPECTED); + } + else + { + playerIn.addStat(StatList.DISPENSER_INSPECTED); + } + } + + return true; + } + } + + protected void dispense(World worldIn, BlockPos pos) + { + BlockSourceImpl blocksourceimpl = new BlockSourceImpl(worldIn, pos); + TileEntityDispenser tileentitydispenser = (TileEntityDispenser)blocksourceimpl.getBlockTileEntity(); + + if (tileentitydispenser != null) + { + int i = tileentitydispenser.getDispenseSlot(); + + if (i < 0) + { + worldIn.playEvent(1001, pos, 0); + } + else + { + ItemStack itemstack = tileentitydispenser.getStackInSlot(i); + IBehaviorDispenseItem ibehaviordispenseitem = this.getBehavior(itemstack); + + if (ibehaviordispenseitem != IBehaviorDispenseItem.DEFAULT_BEHAVIOR) + { + tileentitydispenser.setInventorySlotContents(i, ibehaviordispenseitem.dispense(blocksourceimpl, itemstack)); + } + } + } + } + + protected IBehaviorDispenseItem getBehavior(ItemStack stack) + { + return DISPENSE_BEHAVIOR_REGISTRY.getObject(stack.getItem()); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + boolean flag = worldIn.isBlockPowered(pos) || worldIn.isBlockPowered(pos.up()); + boolean flag1 = ((Boolean)state.getValue(TRIGGERED)).booleanValue(); + + if (flag && !flag1) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + worldIn.setBlockState(pos, state.withProperty(TRIGGERED, Boolean.valueOf(true)), 4); + } + else if (!flag && flag1) + { + worldIn.setBlockState(pos, state.withProperty(TRIGGERED, Boolean.valueOf(false)), 4); + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + this.dispense(worldIn, pos); + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDispenser(); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer)).withProperty(TRIGGERED, Boolean.valueOf(false)); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos, state.withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer)), 2); + + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityDispenser) + { + ((TileEntityDispenser)tileentity).setCustomName(stack.getDisplayName()); + } + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityDispenser) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (TileEntityDispenser)tileentity); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.breakBlock(worldIn, pos, state); + } + + /** + * Get the position where the dispenser at the given Coordinates should dispense to. + */ + public static IPosition getDispensePosition(IBlockSource coords) + { + EnumFacing enumfacing = (EnumFacing)coords.getBlockState().getValue(FACING); + double d0 = coords.getX() + 0.7D * (double)enumfacing.getFrontOffsetX(); + double d1 = coords.getY() + 0.7D * (double)enumfacing.getFrontOffsetY(); + double d2 = coords.getZ() + 0.7D * (double)enumfacing.getFrontOffsetZ(); + return new PositionImpl(d0, d1, d2); + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return Container.calcRedstone(worldIn.getTileEntity(pos)); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getFront(meta & 7)).withProperty(TRIGGERED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (((Boolean)state.getValue(TRIGGERED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, TRIGGERED}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoor.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoor.java new file mode 100644 index 0000000..ab3d0d1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoor.java @@ -0,0 +1,540 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockDoor extends Block +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyBool OPEN = PropertyBool.create("open"); + public static final PropertyEnum HINGE = PropertyEnum.create("hinge", BlockDoor.EnumHingePosition.class); + public static final PropertyBool POWERED = PropertyBool.create("powered"); + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockDoor.EnumDoorHalf.class); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.1875D); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.8125D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.8125D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.1875D, 1.0D, 1.0D); + + protected BlockDoor(Material materialIn) + { + super(materialIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(OPEN, Boolean.valueOf(false)).withProperty(HINGE, BlockDoor.EnumHingePosition.LEFT).withProperty(POWERED, Boolean.valueOf(false)).withProperty(HALF, BlockDoor.EnumDoorHalf.LOWER)); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = state.getActualState(source, pos); + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + boolean flag = !((Boolean)state.getValue(OPEN)).booleanValue(); + boolean flag1 = state.getValue(HINGE) == BlockDoor.EnumHingePosition.RIGHT; + + switch (enumfacing) + { + case EAST: + default: + return flag ? EAST_AABB : (flag1 ? NORTH_AABB : SOUTH_AABB); + case SOUTH: + return flag ? SOUTH_AABB : (flag1 ? EAST_AABB : WEST_AABB); + case WEST: + return flag ? WEST_AABB : (flag1 ? SOUTH_AABB : NORTH_AABB); + case NORTH: + return flag ? NORTH_AABB : (flag1 ? WEST_AABB : EAST_AABB); + } + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal((this.getUnlocalizedName() + ".name").replaceAll("tile", "item")); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return isOpen(combineMetadata(worldIn, pos)); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + private int getCloseSound() + { + return this.blockMaterial == Material.IRON ? 1011 : 1012; + } + + private int getOpenSound() + { + return this.blockMaterial == Material.IRON ? 1005 : 1006; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getBlock() == Blocks.IRON_DOOR) + { + return MapColor.IRON; + } + else if (state.getBlock() == Blocks.OAK_DOOR) + { + return BlockPlanks.EnumType.OAK.getMapColor(); + } + else if (state.getBlock() == Blocks.SPRUCE_DOOR) + { + return BlockPlanks.EnumType.SPRUCE.getMapColor(); + } + else if (state.getBlock() == Blocks.BIRCH_DOOR) + { + return BlockPlanks.EnumType.BIRCH.getMapColor(); + } + else if (state.getBlock() == Blocks.JUNGLE_DOOR) + { + return BlockPlanks.EnumType.JUNGLE.getMapColor(); + } + else if (state.getBlock() == Blocks.ACACIA_DOOR) + { + return BlockPlanks.EnumType.ACACIA.getMapColor(); + } + else + { + return state.getBlock() == Blocks.DARK_OAK_DOOR ? BlockPlanks.EnumType.DARK_OAK.getMapColor() : super.getMapColor(state, worldIn, pos); + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (this.blockMaterial == Material.IRON) + { + return false; + } + else + { + BlockPos blockpos = state.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER ? pos : pos.down(); + IBlockState iblockstate = pos.equals(blockpos) ? state : worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() != this) + { + return false; + } + else + { + state = iblockstate.cycleProperty(OPEN); + worldIn.setBlockState(blockpos, state, 10); + worldIn.markBlockRangeForRenderUpdate(blockpos, pos); + worldIn.playEvent(playerIn, ((Boolean)state.getValue(OPEN)).booleanValue() ? this.getOpenSound() : this.getCloseSound(), pos, 0); + return true; + } + } + } + + public void toggleDoor(World worldIn, BlockPos pos, boolean open) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() == this) + { + BlockPos blockpos = iblockstate.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER ? pos : pos.down(); + IBlockState iblockstate1 = pos == blockpos ? iblockstate : worldIn.getBlockState(blockpos); + + if (iblockstate1.getBlock() == this && ((Boolean)iblockstate1.getValue(OPEN)).booleanValue() != open) + { + worldIn.setBlockState(blockpos, iblockstate1.withProperty(OPEN, Boolean.valueOf(open)), 10); + worldIn.markBlockRangeForRenderUpdate(blockpos, pos); + worldIn.playEvent((EntityPlayer)null, open ? this.getOpenSound() : this.getCloseSound(), pos, 0); + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER) + { + BlockPos blockpos = pos.down(); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() != this) + { + worldIn.setBlockToAir(pos); + } + else if (blockIn != this) + { + iblockstate.neighborChanged(worldIn, blockpos, blockIn, fromPos); + } + } + else + { + boolean flag1 = false; + BlockPos blockpos1 = pos.up(); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); + + if (iblockstate1.getBlock() != this) + { + worldIn.setBlockToAir(pos); + flag1 = true; + } + + if (!worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP)) + { + worldIn.setBlockToAir(pos); + flag1 = true; + + if (iblockstate1.getBlock() == this) + { + worldIn.setBlockToAir(blockpos1); + } + } + + if (flag1) + { + if (!worldIn.isRemote) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + } + } + else + { + boolean flag = worldIn.isBlockPowered(pos) || worldIn.isBlockPowered(blockpos1); + + if (blockIn != this && (flag || blockIn.getDefaultState().canProvidePower()) && flag != ((Boolean)iblockstate1.getValue(POWERED)).booleanValue()) + { + worldIn.setBlockState(blockpos1, iblockstate1.withProperty(POWERED, Boolean.valueOf(flag)), 2); + + if (flag != ((Boolean)state.getValue(OPEN)).booleanValue()) + { + worldIn.setBlockState(pos, state.withProperty(OPEN, Boolean.valueOf(flag)), 2); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + worldIn.playEvent((EntityPlayer)null, flag ? this.getOpenSound() : this.getCloseSound(), pos, 0); + } + } + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER ? Items.AIR : this.getItem(); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + if (pos.getY() >= worldIn.getHeight() - 1) + { + return false; + } + else + { + IBlockState state = worldIn.getBlockState(pos.down()); + return (state.isTopSolid() || state.getBlockFaceShape(worldIn, pos.down(), EnumFacing.UP) == BlockFaceShape.SOLID) && super.canPlaceBlockAt(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos.up()); + } + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + public static int combineMetadata(IBlockAccess worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + int i = iblockstate.getBlock().getMetaFromState(iblockstate); + boolean flag = isTop(i); + IBlockState iblockstate1 = worldIn.getBlockState(pos.down()); + int j = iblockstate1.getBlock().getMetaFromState(iblockstate1); + int k = flag ? j : i; + IBlockState iblockstate2 = worldIn.getBlockState(pos.up()); + int l = iblockstate2.getBlock().getMetaFromState(iblockstate2); + int i1 = flag ? i : l; + boolean flag1 = (i1 & 1) != 0; + boolean flag2 = (i1 & 2) != 0; + return removeHalfBit(k) | (flag ? 8 : 0) | (flag1 ? 16 : 0) | (flag2 ? 32 : 0); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this.getItem()); + } + + private Item getItem() + { + if (this == Blocks.IRON_DOOR) + { + return Items.IRON_DOOR; + } + else if (this == Blocks.SPRUCE_DOOR) + { + return Items.SPRUCE_DOOR; + } + else if (this == Blocks.BIRCH_DOOR) + { + return Items.BIRCH_DOOR; + } + else if (this == Blocks.JUNGLE_DOOR) + { + return Items.JUNGLE_DOOR; + } + else if (this == Blocks.ACACIA_DOOR) + { + return Items.ACACIA_DOOR; + } + else + { + return this == Blocks.DARK_OAK_DOOR ? Items.DARK_OAK_DOOR : Items.OAK_DOOR; + } + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + BlockPos blockpos = pos.down(); + BlockPos blockpos1 = pos.up(); + + if (player.capabilities.isCreativeMode && state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER && worldIn.getBlockState(blockpos).getBlock() == this) + { + worldIn.setBlockToAir(blockpos); + } + + if (state.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER && worldIn.getBlockState(blockpos1).getBlock() == this) + { + if (player.capabilities.isCreativeMode) + { + worldIn.setBlockToAir(pos); + } + + worldIn.setBlockToAir(blockpos1); + } + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(HALF) == BlockDoor.EnumDoorHalf.LOWER) + { + IBlockState iblockstate = worldIn.getBlockState(pos.up()); + + if (iblockstate.getBlock() == this) + { + state = state.withProperty(HINGE, iblockstate.getValue(HINGE)).withProperty(POWERED, iblockstate.getValue(POWERED)); + } + } + else + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.down()); + + if (iblockstate1.getBlock() == this) + { + state = state.withProperty(FACING, iblockstate1.getValue(FACING)).withProperty(OPEN, iblockstate1.getValue(OPEN)); + } + } + + return state; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.getValue(HALF) != BlockDoor.EnumDoorHalf.LOWER ? state : state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return mirrorIn == Mirror.NONE ? state : state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))).cycleProperty(HINGE); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return (meta & 8) > 0 ? this.getDefaultState().withProperty(HALF, BlockDoor.EnumDoorHalf.UPPER).withProperty(HINGE, (meta & 1) > 0 ? BlockDoor.EnumHingePosition.RIGHT : BlockDoor.EnumHingePosition.LEFT).withProperty(POWERED, Boolean.valueOf((meta & 2) > 0)) : this.getDefaultState().withProperty(HALF, BlockDoor.EnumDoorHalf.LOWER).withProperty(FACING, EnumFacing.getHorizontal(meta & 3).rotateYCCW()).withProperty(OPEN, Boolean.valueOf((meta & 4) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + if (state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER) + { + i = i | 8; + + if (state.getValue(HINGE) == BlockDoor.EnumHingePosition.RIGHT) + { + i |= 1; + } + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 2; + } + } + else + { + i = i | ((EnumFacing)state.getValue(FACING)).rotateY().getHorizontalIndex(); + + if (((Boolean)state.getValue(OPEN)).booleanValue()) + { + i |= 4; + } + } + + return i; + } + + protected static int removeHalfBit(int meta) + { + return meta & 7; + } + + public static boolean isOpen(IBlockAccess worldIn, BlockPos pos) + { + return isOpen(combineMetadata(worldIn, pos)); + } + + public static EnumFacing getFacing(IBlockAccess worldIn, BlockPos pos) + { + return getFacing(combineMetadata(worldIn, pos)); + } + + public static EnumFacing getFacing(int combinedMeta) + { + return EnumFacing.getHorizontal(combinedMeta & 3).rotateYCCW(); + } + + protected static boolean isOpen(int combinedMeta) + { + return (combinedMeta & 4) != 0; + } + + protected static boolean isTop(int meta) + { + return (meta & 8) != 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {HALF, FACING, OPEN, HINGE, POWERED}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + public static enum EnumDoorHalf implements IStringSerializable + { + UPPER, + LOWER; + + public String toString() + { + return this.getName(); + } + + public String getName() + { + return this == UPPER ? "upper" : "lower"; + } + } + + public static enum EnumHingePosition implements IStringSerializable + { + LEFT, + RIGHT; + + public String toString() + { + return this.getName(); + } + + public String getName() + { + return this == LEFT ? "left" : "right"; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoublePlant.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoublePlant.java new file mode 100644 index 0000000..405a574 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoublePlant.java @@ -0,0 +1,429 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockDoublePlant extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockDoublePlant.EnumPlantType.class); + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockDoublePlant.EnumBlockHalf.class); + public static final PropertyEnum FACING = BlockHorizontal.FACING; + + public BlockDoublePlant() + { + super(Material.VINE); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockDoublePlant.EnumPlantType.SUNFLOWER).withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(FACING, EnumFacing.NORTH)); + this.setHardness(0.0F); + this.setSoundType(SoundType.PLANT); + this.setUnlocalizedName("doublePlant"); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FULL_BLOCK_AABB; + } + + private BlockDoublePlant.EnumPlantType getType(IBlockAccess blockAccess, BlockPos pos, IBlockState state) + { + if (state.getBlock() == this) + { + state = state.getActualState(blockAccess, pos); + return (BlockDoublePlant.EnumPlantType)state.getValue(VARIANT); + } + else + { + return BlockDoublePlant.EnumPlantType.FERN; + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) && worldIn.isAirBlock(pos.up()); + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() != this) + { + return true; + } + else + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)iblockstate.getActualState(worldIn, pos).getValue(VARIANT); + return blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.FERN || blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.GRASS; + } + } + + protected void checkAndDropBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.canBlockStay(worldIn, pos, state)) + { + boolean flag = state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER; + BlockPos blockpos = flag ? pos : pos.up(); + BlockPos blockpos1 = flag ? pos.down() : pos; + Block block = (Block)(flag ? this : worldIn.getBlockState(blockpos).getBlock()); + Block block1 = (Block)(flag ? worldIn.getBlockState(blockpos1).getBlock() : this); + + if (!flag) this.dropBlockAsItem(worldIn, pos, state, 0); //Forge move above the setting to air. + + if (block == this) + { + worldIn.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 2); + } + + if (block1 == this) + { + worldIn.setBlockState(blockpos1, Blocks.AIR.getDefaultState(), 3); + } + } + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + if (state.getBlock() != this) return super.canBlockStay(worldIn, pos, state); //Forge: This function is called during world gen and placement, before this block is set, so if we are not 'here' then assume it's the pre-check. + if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) + { + return worldIn.getBlockState(pos.down()).getBlock() == this; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos.up()); + return iblockstate.getBlock() == this && super.canBlockStay(worldIn, pos, iblockstate); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) + { + return Items.AIR; + } + else + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)state.getValue(VARIANT); + + if (blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.FERN) + { + return Items.AIR; + } + else if (blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.GRASS) + { + return rand.nextInt(8) == 0 ? Items.WHEAT_SEEDS : Items.AIR; + } + else + { + return super.getItemDropped(state, rand, fortune); + } + } + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return state.getValue(HALF) != BlockDoublePlant.EnumBlockHalf.UPPER && state.getValue(VARIANT) != BlockDoublePlant.EnumPlantType.GRASS ? ((BlockDoublePlant.EnumPlantType)state.getValue(VARIANT)).getMeta() : 0; + } + + public void placeAt(World worldIn, BlockPos lowerPos, BlockDoublePlant.EnumPlantType variant, int flags) + { + worldIn.setBlockState(lowerPos, this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(VARIANT, variant), flags); + worldIn.setBlockState(lowerPos.up(), this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER), flags); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos.up(), this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER), 2); + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) + { + if (worldIn.getBlockState(pos.down()).getBlock() == this) + { + if (player.capabilities.isCreativeMode) + { + worldIn.setBlockToAir(pos.down()); + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)iblockstate.getValue(VARIANT); + + if (blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS) + { + worldIn.destroyBlock(pos.down(), true); + } + else if (worldIn.isRemote) + { + worldIn.setBlockToAir(pos.down()); + } + else if (!player.getHeldItemMainhand().isEmpty() && player.getHeldItemMainhand().getItem() == Items.SHEARS) + { + this.onHarvest(worldIn, pos, iblockstate, player); + worldIn.setBlockToAir(pos.down()); + } + else + { + worldIn.destroyBlock(pos.down(), true); + } + } + } + } + else if (worldIn.getBlockState(pos.up()).getBlock() == this) + { + worldIn.setBlockState(pos.up(), Blocks.AIR.getDefaultState(), 2); + } + + super.onBlockHarvested(worldIn, pos, state, player); + } + + private boolean onHarvest(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)state.getValue(VARIANT); + + if (blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS) + { + return false; + } + else + { + player.addStat(StatList.getBlockStats(this)); + return true; + } + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype : BlockDoublePlant.EnumPlantType.values()) + { + items.add(new ItemStack(this, 1, blockdoubleplant$enumplanttype.getMeta())); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this, 1, this.getType(worldIn, pos, state).getMeta()); + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = this.getType(worldIn, pos, state); + return blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return true; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + spawnAsEntity(worldIn, pos, new ItemStack(this, 1, this.getType(worldIn, pos, state).getMeta())); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return (meta & 8) > 0 ? this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.UPPER) : this.getDefaultState().withProperty(HALF, BlockDoublePlant.EnumBlockHalf.LOWER).withProperty(VARIANT, BlockDoublePlant.EnumPlantType.byMetadata(meta & 7)); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + + if (iblockstate.getBlock() == this) + { + state = state.withProperty(VARIANT, iblockstate.getValue(VARIANT)); + } + } + + return state; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return state.getValue(HALF) == BlockDoublePlant.EnumBlockHalf.UPPER ? 8 | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex() : ((BlockDoublePlant.EnumPlantType)state.getValue(VARIANT)).getMeta(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {HALF, VARIANT, FACING}); + } + + /** + * Get the OffsetType for this Block. Determines if the model is rendered slightly offset. + */ + public Block.EnumOffsetType getOffsetType() + { + return Block.EnumOffsetType.XZ; + } + + @Override + public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) + { + IBlockState state = world.getBlockState(pos); + EnumPlantType type = (EnumPlantType)state.getValue(VARIANT); + return state.getValue(HALF) == EnumBlockHalf.LOWER && (type == EnumPlantType.FERN || type == EnumPlantType.GRASS); + } + + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + java.util.List ret = new java.util.ArrayList(); + EnumPlantType type = (EnumPlantType)world.getBlockState(pos).getValue(VARIANT); + if (type == EnumPlantType.FERN) ret.add(new ItemStack(Blocks.TALLGRASS, 2, BlockTallGrass.EnumType.FERN.getMeta())); + if (type == EnumPlantType.GRASS) ret.add(new ItemStack(Blocks.TALLGRASS, 2, BlockTallGrass.EnumType.GRASS.getMeta())); + return ret; + } + + public static enum EnumBlockHalf implements IStringSerializable + { + UPPER, + LOWER; + + public String toString() + { + return this.getName(); + } + + public String getName() + { + return this == UPPER ? "upper" : "lower"; + } + } + + public static enum EnumPlantType implements IStringSerializable + { + SUNFLOWER(0, "sunflower"), + SYRINGA(1, "syringa"), + GRASS(2, "double_grass", "grass"), + FERN(3, "double_fern", "fern"), + ROSE(4, "double_rose", "rose"), + PAEONIA(5, "paeonia"); + + private static final BlockDoublePlant.EnumPlantType[] META_LOOKUP = new BlockDoublePlant.EnumPlantType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumPlantType(int meta, String name) + { + this(meta, name, name); + } + + private EnumPlantType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMeta() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockDoublePlant.EnumPlantType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype : values()) + { + META_LOOKUP[blockdoubleplant$enumplanttype.getMeta()] = blockdoubleplant$enumplanttype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleStoneSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleStoneSlab.java new file mode 100644 index 0000000..3fd8f21 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleStoneSlab.java @@ -0,0 +1,29 @@ +package net.minecraft.block; + +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockDoubleStoneSlab extends BlockStoneSlab +{ + public boolean isDouble() + { + return true; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.SOLID; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleStoneSlabNew.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleStoneSlabNew.java new file mode 100644 index 0000000..270740e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleStoneSlabNew.java @@ -0,0 +1,9 @@ +package net.minecraft.block; + +public class BlockDoubleStoneSlabNew extends BlockStoneSlabNew +{ + public boolean isDouble() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleWoodSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleWoodSlab.java new file mode 100644 index 0000000..2a3c414 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDoubleWoodSlab.java @@ -0,0 +1,9 @@ +package net.minecraft.block; + +public class BlockDoubleWoodSlab extends BlockWoodSlab +{ + public boolean isDouble() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDragonEgg.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDragonEgg.java new file mode 100644 index 0000000..f1e1a1e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDragonEgg.java @@ -0,0 +1,177 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockDragonEgg extends Block +{ + protected static final AxisAlignedBB DRAGON_EGG_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 1.0D, 0.9375D); + + public BlockDragonEgg() + { + super(Material.DRAGON_EGG, MapColor.BLACK); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return DRAGON_EGG_AABB; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + this.checkFall(worldIn, pos); + } + + private void checkFall(World worldIn, BlockPos pos) + { + if (worldIn.isAirBlock(pos.down()) && BlockFalling.canFallThrough(worldIn.getBlockState(pos.down())) && pos.getY() >= 0) + { + int i = 32; + + if (!BlockFalling.fallInstantly && worldIn.isAreaLoaded(pos.add(-32, -32, -32), pos.add(32, 32, 32))) + { + worldIn.spawnEntity(new EntityFallingBlock(worldIn, (double)((float)pos.getX() + 0.5F), (double)pos.getY(), (double)((float)pos.getZ() + 0.5F), this.getDefaultState())); + } + else + { + worldIn.setBlockToAir(pos); + BlockPos blockpos; + + for (blockpos = pos; worldIn.isAirBlock(blockpos) && BlockFalling.canFallThrough(worldIn.getBlockState(blockpos)) && blockpos.getY() > 0; blockpos = blockpos.down()) + { + ; + } + + if (blockpos.getY() > 0) + { + worldIn.setBlockState(blockpos, this.getDefaultState(), 2); + } + } + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + this.teleport(worldIn, pos); + return true; + } + + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + this.teleport(worldIn, pos); + } + + private void teleport(World worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() == this) + { + for (int i = 0; i < 1000; ++i) + { + BlockPos blockpos = pos.add(worldIn.rand.nextInt(16) - worldIn.rand.nextInt(16), worldIn.rand.nextInt(8) - worldIn.rand.nextInt(8), worldIn.rand.nextInt(16) - worldIn.rand.nextInt(16)); + + if (worldIn.isAirBlock(blockpos)) + { + if (worldIn.isRemote) + { + for (int j = 0; j < 128; ++j) + { + double d0 = worldIn.rand.nextDouble(); + float f = (worldIn.rand.nextFloat() - 0.5F) * 0.2F; + float f1 = (worldIn.rand.nextFloat() - 0.5F) * 0.2F; + float f2 = (worldIn.rand.nextFloat() - 0.5F) * 0.2F; + double d1 = (double)blockpos.getX() + (double)(pos.getX() - blockpos.getX()) * d0 + (worldIn.rand.nextDouble() - 0.5D) + 0.5D; + double d2 = (double)blockpos.getY() + (double)(pos.getY() - blockpos.getY()) * d0 + worldIn.rand.nextDouble() - 0.5D; + double d3 = (double)blockpos.getZ() + (double)(pos.getZ() - blockpos.getZ()) * d0 + (worldIn.rand.nextDouble() - 0.5D) + 0.5D; + worldIn.spawnParticle(EnumParticleTypes.PORTAL, d1, d2, d3, (double)f, (double)f1, (double)f2); + } + } + else + { + worldIn.setBlockState(blockpos, iblockstate, 2); + worldIn.setBlockToAir(pos); + } + + return; + } + } + } + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 5; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDropper.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDropper.java new file mode 100644 index 0000000..6bc4e4d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDropper.java @@ -0,0 +1,80 @@ +package net.minecraft.block; + +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.tileentity.TileEntityDropper; +import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockDropper extends BlockDispenser +{ + private final IBehaviorDispenseItem dropBehavior = new BehaviorDefaultDispenseItem(); + + protected IBehaviorDispenseItem getBehavior(ItemStack stack) + { + return this.dropBehavior; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityDropper(); + } + + protected void dispense(World worldIn, BlockPos pos) + { + BlockSourceImpl blocksourceimpl = new BlockSourceImpl(worldIn, pos); + TileEntityDispenser tileentitydispenser = (TileEntityDispenser)blocksourceimpl.getBlockTileEntity(); + + if (tileentitydispenser != null) + { + int i = tileentitydispenser.getDispenseSlot(); + + if (i < 0) + { + worldIn.playEvent(1001, pos, 0); + } + else + { + ItemStack itemstack = tileentitydispenser.getStackInSlot(i); + + if (!itemstack.isEmpty() && net.minecraftforge.items.VanillaInventoryCodeHooks.dropperInsertHook(worldIn, pos, tileentitydispenser, i, itemstack)) + { + EnumFacing enumfacing = (EnumFacing)worldIn.getBlockState(pos).getValue(FACING); + BlockPos blockpos = pos.offset(enumfacing); + IInventory iinventory = TileEntityHopper.getInventoryAtPosition(worldIn, (double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ()); + ItemStack itemstack1; + + if (iinventory == null) + { + itemstack1 = this.dropBehavior.dispense(blocksourceimpl, itemstack); + } + else + { + itemstack1 = TileEntityHopper.putStackInInventoryAllSlots(tileentitydispenser, iinventory, itemstack.copy().splitStack(1), enumfacing.getOpposite()); + + if (itemstack1.isEmpty()) + { + itemstack1 = itemstack.copy(); + itemstack1.shrink(1); + } + else + { + itemstack1 = itemstack.copy(); + } + } + + tileentitydispenser.setInventorySlotContents(i, itemstack1); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockDynamicLiquid.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDynamicLiquid.java new file mode 100644 index 0000000..d9adaba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockDynamicLiquid.java @@ -0,0 +1,315 @@ +package net.minecraft.block; + +import java.util.EnumSet; +import java.util.Random; +import java.util.Set; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockDynamicLiquid extends BlockLiquid +{ + int adjacentSourceBlocks; + + protected BlockDynamicLiquid(Material materialIn) + { + super(materialIn); + } + + private void placeStaticBlock(World worldIn, BlockPos pos, IBlockState currentState) + { + worldIn.setBlockState(pos, getStaticBlock(this.blockMaterial).getDefaultState().withProperty(LEVEL, currentState.getValue(LEVEL)), 2); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isAreaLoaded(pos, this.getSlopeFindDistance(worldIn))) return; // Forge: avoid loading unloaded chunks + int i = ((Integer)state.getValue(LEVEL)).intValue(); + int j = 1; + + if (this.blockMaterial == Material.LAVA && !worldIn.provider.doesWaterVaporize()) + { + j = 2; + } + + int k = this.tickRate(worldIn); + + if (i > 0) + { + int l = -100; + this.adjacentSourceBlocks = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + l = this.checkAdjacentBlock(worldIn, pos.offset(enumfacing), l); + } + + int i1 = l + j; + + if (i1 >= 8 || l < 0) + { + i1 = -1; + } + + int j1 = this.getDepth(worldIn.getBlockState(pos.up())); + + if (j1 >= 0) + { + if (j1 >= 8) + { + i1 = j1; + } + else + { + i1 = j1 + 8; + } + } + + if (this.adjacentSourceBlocks >= 2 && net.minecraftforge.event.ForgeEventFactory.canCreateFluidSource(worldIn, pos, state, this.blockMaterial == Material.WATER)) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + + if (iblockstate.getMaterial().isSolid()) + { + i1 = 0; + } + else if (iblockstate.getMaterial() == this.blockMaterial && ((Integer)iblockstate.getValue(LEVEL)).intValue() == 0) + { + i1 = 0; + } + } + + if (this.blockMaterial == Material.LAVA && i < 8 && i1 < 8 && i1 > i && rand.nextInt(4) != 0) + { + k *= 4; + } + + if (i1 == i) + { + this.placeStaticBlock(worldIn, pos, state); + } + else + { + i = i1; + + if (i1 < 0) + { + worldIn.setBlockToAir(pos); + } + else + { + state = state.withProperty(LEVEL, Integer.valueOf(i1)); + worldIn.setBlockState(pos, state, 2); + worldIn.scheduleUpdate(pos, this, k); + worldIn.notifyNeighborsOfStateChange(pos, this, false); + } + } + } + else + { + this.placeStaticBlock(worldIn, pos, state); + } + + IBlockState iblockstate1 = worldIn.getBlockState(pos.down()); + + if (this.canFlowInto(worldIn, pos.down(), iblockstate1)) + { + if (this.blockMaterial == Material.LAVA && worldIn.getBlockState(pos.down()).getMaterial() == Material.WATER) + { + worldIn.setBlockState(pos.down(), net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, pos.down(), pos, Blocks.STONE.getDefaultState())); + this.triggerMixEffects(worldIn, pos.down()); + return; + } + + if (i >= 8) + { + this.tryFlowInto(worldIn, pos.down(), iblockstate1, i); + } + else + { + this.tryFlowInto(worldIn, pos.down(), iblockstate1, i + 8); + } + } + else if (i >= 0 && (i == 0 || this.isBlocked(worldIn, pos.down(), iblockstate1))) + { + Set set = this.getPossibleFlowDirections(worldIn, pos); + int k1 = i + j; + + if (i >= 8) + { + k1 = 1; + } + + if (k1 >= 8) + { + return; + } + + for (EnumFacing enumfacing1 : set) + { + this.tryFlowInto(worldIn, pos.offset(enumfacing1), worldIn.getBlockState(pos.offset(enumfacing1)), k1); + } + } + } + + private void tryFlowInto(World worldIn, BlockPos pos, IBlockState state, int level) + { + if (this.canFlowInto(worldIn, pos, state)) + { + if (state.getMaterial() != Material.AIR) + { + if (this.blockMaterial == Material.LAVA) + { + this.triggerMixEffects(worldIn, pos); + } + else + { + if (state.getBlock() != Blocks.SNOW_LAYER) //Forge: Vanilla has a 'bug' where snowballs don't drop like every other block. So special case because ewww... + state.getBlock().dropBlockAsItem(worldIn, pos, state, 0); + } + } + + worldIn.setBlockState(pos, this.getDefaultState().withProperty(LEVEL, Integer.valueOf(level)), 3); + } + } + + private int getSlopeDistance(World worldIn, BlockPos pos, int distance, EnumFacing calculateFlowCost) + { + int i = 1000; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (enumfacing != calculateFlowCost) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (!this.isBlocked(worldIn, blockpos, iblockstate) && (iblockstate.getMaterial() != this.blockMaterial || ((Integer)iblockstate.getValue(LEVEL)).intValue() > 0)) + { + if (!this.isBlocked(worldIn, blockpos.down(), worldIn.getBlockState(blockpos.down()))) + { + return distance; + } + + if (distance < this.getSlopeFindDistance(worldIn)) + { + int j = this.getSlopeDistance(worldIn, blockpos, distance + 1, enumfacing.getOpposite()); + + if (j < i) + { + i = j; + } + } + } + } + } + + return i; + } + + private int getSlopeFindDistance(World worldIn) + { + return this.blockMaterial == Material.LAVA && !worldIn.provider.doesWaterVaporize() ? 2 : 4; + } + + /** + * This method returns a Set of EnumFacing + */ + private Set getPossibleFlowDirections(World worldIn, BlockPos pos) + { + int i = 1000; + Set set = EnumSet.noneOf(EnumFacing.class); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (!this.isBlocked(worldIn, blockpos, iblockstate) && (iblockstate.getMaterial() != this.blockMaterial || ((Integer)iblockstate.getValue(LEVEL)).intValue() > 0)) + { + int j; + + if (this.isBlocked(worldIn, blockpos.down(), worldIn.getBlockState(blockpos.down()))) + { + j = this.getSlopeDistance(worldIn, blockpos, 1, enumfacing.getOpposite()); + } + else + { + j = 0; + } + + if (j < i) + { + set.clear(); + } + + if (j <= i) + { + set.add(enumfacing); + i = j; + } + } + } + + return set; + } + + private boolean isBlocked(World worldIn, BlockPos pos, IBlockState state) + { + Block block = state.getBlock(); //Forge: state must be valid for position + Material mat = state.getMaterial(); + + if (!(block instanceof BlockDoor) && block != Blocks.STANDING_SIGN && block != Blocks.LADDER && block != Blocks.REEDS) + { + return mat != Material.PORTAL && mat != Material.STRUCTURE_VOID ? mat.blocksMovement() : true; + } + else + { + return true; + } + } + + protected int checkAdjacentBlock(World worldIn, BlockPos pos, int currentMinLevel) + { + int i = this.getDepth(worldIn.getBlockState(pos)); + + if (i < 0) + { + return currentMinLevel; + } + else + { + if (i == 0) + { + ++this.adjacentSourceBlocks; + } + + if (i >= 8) + { + i = 0; + } + + return currentMinLevel >= 0 && i >= currentMinLevel ? currentMinLevel : i; + } + } + + private boolean canFlowInto(World worldIn, BlockPos pos, IBlockState state) + { + Material material = state.getMaterial(); + return material != this.blockMaterial && material != Material.LAVA && !this.isBlocked(worldIn, pos, state); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.checkForMixing(worldIn, pos, state)) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEmptyDrops.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEmptyDrops.java new file mode 100644 index 0000000..c21cce7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEmptyDrops.java @@ -0,0 +1,31 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.item.Item; + +public class BlockEmptyDrops extends Block +{ + public BlockEmptyDrops(Material materialIn) + { + super(materialIn); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEnchantmentTable.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEnchantmentTable.java new file mode 100644 index 0000000..bab35ae --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEnchantmentTable.java @@ -0,0 +1,160 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityEnchantmentTable; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockEnchantmentTable extends BlockContainer +{ + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D); + + protected BlockEnchantmentTable() + { + super(Material.ROCK, MapColor.RED); + this.setLightOpacity(0); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + for (int i = -2; i <= 2; ++i) + { + for (int j = -2; j <= 2; ++j) + { + if (i > -2 && i < 2 && j == -1) + { + j = 2; + } + + if (rand.nextInt(16) == 0) + { + for (int k = 0; k <= 1; ++k) + { + BlockPos blockpos = pos.add(i, k, j); + + if (net.minecraftforge.common.ForgeHooks.getEnchantPower(worldIn, blockpos) > 0) + { + if (!worldIn.isAirBlock(pos.add(i / 2, 0, j / 2))) + { + break; + } + + worldIn.spawnParticle(EnumParticleTypes.ENCHANTMENT_TABLE, (double)pos.getX() + 0.5D, (double)pos.getY() + 2.0D, (double)pos.getZ() + 0.5D, (double)((float)i + rand.nextFloat()) - 0.5D, (double)((float)k - rand.nextFloat() - 1.0F), (double)((float)j + rand.nextFloat()) - 0.5D); + } + } + } + } + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityEnchantmentTable(); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityEnchantmentTable) + { + playerIn.displayGui((TileEntityEnchantmentTable)tileentity); + } + + return true; + } + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityEnchantmentTable) + { + ((TileEntityEnchantmentTable)tileentity).setCustomName(stack.getDisplayName()); + } + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndGateway.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndGateway.java new file mode 100644 index 0000000..2c625a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndGateway.java @@ -0,0 +1,134 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityEndGateway; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockEndGateway extends BlockContainer +{ + protected BlockEndGateway(Material p_i46687_1_) + { + super(p_i46687_1_); + this.setLightLevel(1.0F); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityEndGateway(); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side)); + Block block = iblockstate.getBlock(); + return !iblockstate.isOpaqueCube() && block != Blocks.END_GATEWAY; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityEndGateway) + { + int i = ((TileEntityEndGateway)tileentity).getParticleAmount(); + + for (int j = 0; j < i; ++j) + { + double d0 = (double)((float)pos.getX() + rand.nextFloat()); + double d1 = (double)((float)pos.getY() + rand.nextFloat()); + double d2 = (double)((float)pos.getZ() + rand.nextFloat()); + double d3 = ((double)rand.nextFloat() - 0.5D) * 0.5D; + double d4 = ((double)rand.nextFloat() - 0.5D) * 0.5D; + double d5 = ((double)rand.nextFloat() - 0.5D) * 0.5D; + int k = rand.nextInt(2) * 2 - 1; + + if (rand.nextBoolean()) + { + d2 = (double)pos.getZ() + 0.5D + 0.25D * (double)k; + d5 = (double)(rand.nextFloat() * 2.0F * (float)k); + } + else + { + d0 = (double)pos.getX() + 0.5D + 0.25D * (double)k; + d3 = (double)(rand.nextFloat() * 2.0F * (float)k); + } + + worldIn.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); + } + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return ItemStack.EMPTY; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.BLACK; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndPortal.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndPortal.java new file mode 100644 index 0000000..eca6ea3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndPortal.java @@ -0,0 +1,126 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityEndPortal; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockEndPortal extends BlockContainer +{ + protected static final AxisAlignedBB END_PORTAL_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D); + + protected BlockEndPortal(Material materialIn) + { + super(materialIn); + this.setLightLevel(1.0F); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityEndPortal(); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return END_PORTAL_AABB; + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : false; + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote && !entityIn.isRiding() && !entityIn.isBeingRidden() && entityIn.isNonBoss() && entityIn.getEntityBoundingBox().intersects(state.getBoundingBox(worldIn, pos).offset(pos))) + { + entityIn.changeDimension(1); + } + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + double d0 = (double)((float)pos.getX() + rand.nextFloat()); + double d1 = (double)((float)pos.getY() + 0.8F); + double d2 = (double)((float)pos.getZ() + rand.nextFloat()); + double d3 = 0.0D; + double d4 = 0.0D; + double d5 = 0.0D; + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return ItemStack.EMPTY; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.BLACK; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndPortalFrame.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndPortalFrame.java new file mode 100644 index 0000000..7b5588a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndPortalFrame.java @@ -0,0 +1,171 @@ +package net.minecraft.block; + +import com.google.common.base.Predicates; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.BlockWorldState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockPattern; +import net.minecraft.block.state.pattern.BlockStateMatcher; +import net.minecraft.block.state.pattern.FactoryBlockPattern; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockEndPortalFrame extends Block +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyBool EYE = PropertyBool.create("eye"); + protected static final AxisAlignedBB AABB_BLOCK = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.8125D, 1.0D); + protected static final AxisAlignedBB AABB_EYE = new AxisAlignedBB(0.3125D, 0.8125D, 0.3125D, 0.6875D, 1.0D, 0.6875D); + private static BlockPattern portalShape; + + public BlockEndPortalFrame() + { + super(Material.ROCK, MapColor.GREEN); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(EYE, Boolean.valueOf(false))); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return AABB_BLOCK; + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_BLOCK); + + if (((Boolean)worldIn.getBlockState(pos).getValue(EYE)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_EYE); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()).withProperty(EYE, Boolean.valueOf(false)); + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return ((Boolean)blockState.getValue(EYE)).booleanValue() ? 15 : 0; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(EYE, Boolean.valueOf((meta & 4) != 0)).withProperty(FACING, EnumFacing.getHorizontal(meta & 3)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + + if (((Boolean)state.getValue(EYE)).booleanValue()) + { + i |= 4; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, EYE}); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + public static BlockPattern getOrCreatePortalShape() + { + if (portalShape == null) + { + portalShape = FactoryBlockPattern.start().aisle("?vvv?", ">???<", ">???<", ">???<", "?^^^?").where('?', BlockWorldState.hasState(BlockStateMatcher.ANY)).where('^', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.END_PORTAL_FRAME).where(EYE, Predicates.equalTo(Boolean.valueOf(true))).where(FACING, Predicates.equalTo(EnumFacing.SOUTH)))).where('>', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.END_PORTAL_FRAME).where(EYE, Predicates.equalTo(Boolean.valueOf(true))).where(FACING, Predicates.equalTo(EnumFacing.WEST)))).where('v', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.END_PORTAL_FRAME).where(EYE, Predicates.equalTo(Boolean.valueOf(true))).where(FACING, Predicates.equalTo(EnumFacing.NORTH)))).where('<', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.END_PORTAL_FRAME).where(EYE, Predicates.equalTo(Boolean.valueOf(true))).where(FACING, Predicates.equalTo(EnumFacing.EAST)))).build(); + } + + return portalShape; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndRod.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndRod.java new file mode 100644 index 0000000..dfc5022 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEndRod.java @@ -0,0 +1,174 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockEndRod extends BlockDirectional +{ + protected static final AxisAlignedBB END_ROD_VERTICAL_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D); + protected static final AxisAlignedBB END_ROD_NS_AABB = new AxisAlignedBB(0.375D, 0.375D, 0.0D, 0.625D, 0.625D, 1.0D); + protected static final AxisAlignedBB END_ROD_EW_AABB = new AxisAlignedBB(0.0D, 0.375D, 0.375D, 1.0D, 0.625D, 0.625D); + + protected BlockEndRod() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withProperty(FACING, mirrorIn.mirror((EnumFacing)state.getValue(FACING))); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch (((EnumFacing)state.getValue(FACING)).getAxis()) + { + case X: + default: + return END_ROD_EW_AABB; + case Z: + return END_ROD_NS_AABB; + case Y: + return END_ROD_VERTICAL_AABB; + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return true; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = worldIn.getBlockState(pos.offset(facing.getOpposite())); + + if (iblockstate.getBlock() == Blocks.END_ROD) + { + EnumFacing enumfacing = (EnumFacing)iblockstate.getValue(FACING); + + if (enumfacing == facing) + { + return this.getDefaultState().withProperty(FACING, facing.getOpposite()); + } + } + + return this.getDefaultState().withProperty(FACING, facing); + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + EnumFacing enumfacing = (EnumFacing)stateIn.getValue(FACING); + double d0 = (double)pos.getX() + 0.55D - (double)(rand.nextFloat() * 0.1F); + double d1 = (double)pos.getY() + 0.55D - (double)(rand.nextFloat() * 0.1F); + double d2 = (double)pos.getZ() + 0.55D - (double)(rand.nextFloat() * 0.1F); + double d3 = (double)(0.4F - (rand.nextFloat() + rand.nextFloat()) * 0.4F); + + if (rand.nextInt(5) == 0) + { + worldIn.spawnParticle(EnumParticleTypes.END_ROD, d0 + (double)enumfacing.getFrontOffsetX() * d3, d1 + (double)enumfacing.getFrontOffsetY() * d3, d2 + (double)enumfacing.getFrontOffsetZ() * d3, rand.nextGaussian() * 0.005D, rand.nextGaussian() * 0.005D, rand.nextGaussian() * 0.005D); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState(); + iblockstate = iblockstate.withProperty(FACING, EnumFacing.getFront(meta)); + return iblockstate; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.NORMAL; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEnderChest.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEnderChest.java new file mode 100644 index 0000000..7d2a5e0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEnderChest.java @@ -0,0 +1,232 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.InventoryEnderChest; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityEnderChest; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockEnderChest extends BlockContainer +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + protected static final AxisAlignedBB ENDER_CHEST_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.875D, 0.9375D); + + protected BlockEnderChest() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return ENDER_CHEST_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return true; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.ENTITYBLOCK_ANIMATED; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.OBSIDIAN); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 8; + } + + protected boolean canSilkHarvest() + { + return true; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos, state.withProperty(FACING, placer.getHorizontalFacing().getOpposite()), 2); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + InventoryEnderChest inventoryenderchest = playerIn.getInventoryEnderChest(); + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (inventoryenderchest != null && tileentity instanceof TileEntityEnderChest) + { + if (worldIn.getBlockState(pos.up()).doesSideBlockChestOpening(worldIn, pos.up(), EnumFacing.DOWN)) + { + return true; + } + else if (worldIn.isRemote) + { + return true; + } + else + { + inventoryenderchest.setChestTileEntity((TileEntityEnderChest)tileentity); + playerIn.displayGUIChest(inventoryenderchest); + playerIn.addStat(StatList.ENDERCHEST_OPENED); + return true; + } + } + else + { + return true; + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityEnderChest(); + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + for (int i = 0; i < 3; ++i) + { + int j = rand.nextInt(2) * 2 - 1; + int k = rand.nextInt(2) * 2 - 1; + double d0 = (double)pos.getX() + 0.5D + 0.25D * (double)j; + double d1 = (double)((float)pos.getY() + rand.nextFloat()); + double d2 = (double)pos.getZ() + 0.5D + 0.25D * (double)k; + double d3 = (double)(rand.nextFloat() * (float)j); + double d4 = ((double)rand.nextFloat() - 0.5D) * 0.125D; + double d5 = (double)(rand.nextFloat() * (float)k); + worldIn.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockEventData.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEventData.java new file mode 100644 index 0000000..8f3cd24 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockEventData.java @@ -0,0 +1,61 @@ +package net.minecraft.block; + +import net.minecraft.util.math.BlockPos; + +public class BlockEventData +{ + private final BlockPos position; + private final Block blockType; + /** Different for each blockID */ + private final int eventID; + private final int eventParameter; + + public BlockEventData(BlockPos pos, Block blockType, int eventId, int p_i45756_4_) + { + this.position = pos; + this.eventID = eventId; + this.eventParameter = p_i45756_4_; + this.blockType = blockType; + } + + public BlockPos getPosition() + { + return this.position; + } + + /** + * Get the Event ID (different for each BlockID) + */ + public int getEventID() + { + return this.eventID; + } + + public int getEventParameter() + { + return this.eventParameter; + } + + public Block getBlock() + { + return this.blockType; + } + + public boolean equals(Object p_equals_1_) + { + if (!(p_equals_1_ instanceof BlockEventData)) + { + return false; + } + else + { + BlockEventData blockeventdata = (BlockEventData)p_equals_1_; + return this.position.equals(blockeventdata.position) && this.eventID == blockeventdata.eventID && this.eventParameter == blockeventdata.eventParameter && this.blockType == blockeventdata.blockType; + } + } + + public String toString() + { + return "TE(" + this.position + ")," + this.eventID + "," + this.eventParameter + "," + this.blockType; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFalling.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFalling.java new file mode 100644 index 0000000..87811a9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFalling.java @@ -0,0 +1,139 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFalling extends Block +{ + public static boolean fallInstantly; + + public BlockFalling() + { + super(Material.SAND); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + public BlockFalling(Material materialIn) + { + super(materialIn); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + this.checkFallable(worldIn, pos); + } + } + + private void checkFallable(World worldIn, BlockPos pos) + { + if ((worldIn.isAirBlock(pos.down()) || canFallThrough(worldIn.getBlockState(pos.down()))) && pos.getY() >= 0) + { + int i = 32; + + if (!fallInstantly && worldIn.isAreaLoaded(pos.add(-32, -32, -32), pos.add(32, 32, 32))) + { + if (!worldIn.isRemote) + { + EntityFallingBlock entityfallingblock = new EntityFallingBlock(worldIn, (double)pos.getX() + 0.5D, (double)pos.getY(), (double)pos.getZ() + 0.5D, worldIn.getBlockState(pos)); + this.onStartFalling(entityfallingblock); + worldIn.spawnEntity(entityfallingblock); + } + } + else + { + IBlockState state = worldIn.getBlockState(pos); + worldIn.setBlockToAir(pos); + BlockPos blockpos; + + for (blockpos = pos.down(); (worldIn.isAirBlock(blockpos) || canFallThrough(worldIn.getBlockState(blockpos))) && blockpos.getY() > 0; blockpos = blockpos.down()) + { + ; + } + + if (blockpos.getY() > 0) + { + worldIn.setBlockState(blockpos.up(), state); //Forge: Fix loss of state information during world gen. + } + } + } + } + + protected void onStartFalling(EntityFallingBlock fallingEntity) + { + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 2; + } + + public static boolean canFallThrough(IBlockState state) + { + Block block = state.getBlock(); + Material material = state.getMaterial(); + return block == Blocks.FIRE || material == Material.AIR || material == Material.WATER || material == Material.LAVA; + } + + public void onEndFalling(World worldIn, BlockPos pos, IBlockState p_176502_3_, IBlockState p_176502_4_) + { + } + + public void onBroken(World worldIn, BlockPos pos) + { + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (rand.nextInt(16) == 0) + { + BlockPos blockpos = pos.down(); + + if (canFallThrough(worldIn.getBlockState(blockpos))) + { + double d0 = (double)((float)pos.getX() + rand.nextFloat()); + double d1 = (double)pos.getY() - 0.05D; + double d2 = (double)((float)pos.getZ() + rand.nextFloat()); + worldIn.spawnParticle(EnumParticleTypes.FALLING_DUST, d0, d1, d2, 0.0D, 0.0D, 0.0D, Block.getStateId(stateIn)); + } + } + } + + @SideOnly(Side.CLIENT) + public int getDustColor(IBlockState state) + { + return -16777216; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFarmland.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFarmland.java new file mode 100644 index 0000000..0f7bf3c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFarmland.java @@ -0,0 +1,209 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFarmland extends Block +{ + public static final PropertyInteger MOISTURE = PropertyInteger.create("moisture", 0, 7); + protected static final AxisAlignedBB FARMLAND_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.9375D, 1.0D); + protected static final AxisAlignedBB field_194405_c = new AxisAlignedBB(0.0D, 0.9375D, 0.0D, 1.0D, 1.0D, 1.0D); + + protected BlockFarmland() + { + super(Material.GROUND); + this.setDefaultState(this.blockState.getBaseState().withProperty(MOISTURE, Integer.valueOf(0))); + this.setTickRandomly(true); + this.setLightOpacity(255); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FARMLAND_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + int i = ((Integer)state.getValue(MOISTURE)).intValue(); + + if (!this.hasWater(worldIn, pos) && !worldIn.isRainingAt(pos.up())) + { + if (i > 0) + { + worldIn.setBlockState(pos, state.withProperty(MOISTURE, Integer.valueOf(i - 1)), 2); + } + else if (!this.hasCrops(worldIn, pos)) + { + turnToDirt(worldIn, pos); + } + } + else if (i < 7) + { + worldIn.setBlockState(pos, state.withProperty(MOISTURE, Integer.valueOf(7)), 2); + } + } + + /** + * Block's chance to react to a living entity falling on it. + */ + public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) + { + if (net.minecraftforge.common.ForgeHooks.onFarmlandTrample(worldIn, pos, Blocks.DIRT.getDefaultState(), fallDistance, entityIn)) // Forge: Move logic to Entity#canTrample + { + turnToDirt(worldIn, pos); + } + + super.onFallenUpon(worldIn, pos, entityIn, fallDistance); + } + + protected static void turnToDirt(World p_190970_0_, BlockPos worldIn) + { + p_190970_0_.setBlockState(worldIn, Blocks.DIRT.getDefaultState()); + AxisAlignedBB axisalignedbb = field_194405_c.offset(worldIn); + + for (Entity entity : p_190970_0_.getEntitiesWithinAABBExcludingEntity((Entity)null, axisalignedbb)) + { + double d0 = Math.min(axisalignedbb.maxY - axisalignedbb.minY, axisalignedbb.maxY - entity.getEntityBoundingBox().minY); + entity.setPositionAndUpdate(entity.posX, entity.posY + d0 + 0.001D, entity.posZ); + } + } + + private boolean hasCrops(World worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos.up()).getBlock(); + return block instanceof net.minecraftforge.common.IPlantable && canSustainPlant(worldIn.getBlockState(pos), worldIn, pos, net.minecraft.util.EnumFacing.UP, (net.minecraftforge.common.IPlantable)block); + } + + private boolean hasWater(World worldIn, BlockPos pos) + { + for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(pos.add(-4, 0, -4), pos.add(4, 1, 4))) + { + if (worldIn.getBlockState(blockpos$mutableblockpos).getMaterial() == Material.WATER) + { + return true; + } + } + + return false; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + + if (worldIn.getBlockState(pos.up()).getMaterial().isSolid()) + { + turnToDirt(worldIn, pos); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + + if (worldIn.getBlockState(pos.up()).getMaterial().isSolid()) + { + turnToDirt(worldIn, pos); + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + switch (side) + { + case UP: + return true; + case NORTH: + case SOUTH: + case WEST: + case EAST: + IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side)); + Block block = iblockstate.getBlock(); + return !iblockstate.isOpaqueCube() && block != Blocks.FARMLAND && block != Blocks.GRASS_PATH; + default: + return super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Blocks.DIRT.getItemDropped(Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), rand, fortune); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(MOISTURE, Integer.valueOf(meta & 7)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(MOISTURE)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {MOISTURE}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFence.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFence.java new file mode 100644 index 0000000..6e58139 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFence.java @@ -0,0 +1,268 @@ +package net.minecraft.block; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemLead; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFence extends Block +{ + /** Whether this fence connects in the northern direction */ + public static final PropertyBool NORTH = PropertyBool.create("north"); + /** Whether this fence connects in the eastern direction */ + public static final PropertyBool EAST = PropertyBool.create("east"); + /** Whether this fence connects in the southern direction */ + public static final PropertyBool SOUTH = PropertyBool.create("south"); + /** Whether this fence connects in the western direction */ + public static final PropertyBool WEST = PropertyBool.create("west"); + protected static final AxisAlignedBB[] BOUNDING_BOXES = new AxisAlignedBB[] {new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D), new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.625D, 1.0D, 1.0D), new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.625D, 1.0D, 0.625D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D), new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.375D, 0.0D, 0.0D, 1.0D, 1.0D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.625D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + public static final AxisAlignedBB PILLAR_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.5D, 0.625D); + public static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.625D, 0.625D, 1.5D, 1.0D); + public static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 0.375D, 1.5D, 0.625D); + public static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.5D, 0.375D); + public static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.625D, 0.0D, 0.375D, 1.0D, 1.5D, 0.625D); + + public BlockFence(Material materialIn, MapColor mapColorIn) + { + super(materialIn, mapColorIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + if (!isActualState) + { + state = state.getActualState(worldIn, pos); + } + + addCollisionBoxToList(pos, entityBox, collidingBoxes, PILLAR_AABB); + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, NORTH_AABB); + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, EAST_AABB); + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, SOUTH_AABB); + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, WEST_AABB); + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return BOUNDING_BOXES[getBoundingBoxIdx(state)]; + } + + /** + * Returns the correct index into boundingBoxes, based on what the fence is connected to. + */ + private static int getBoundingBoxIdx(IBlockState state) + { + int i = 0; + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos, EnumFacing facing) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + BlockFaceShape blockfaceshape = iblockstate.getBlockFaceShape(worldIn, pos, facing); + Block block = iblockstate.getBlock(); + boolean flag = blockfaceshape == BlockFaceShape.MIDDLE_POLE && (iblockstate.getMaterial() == this.blockMaterial || block instanceof BlockFenceGate); + return !isExcepBlockForAttachWithPiston(block) && blockfaceshape == BlockFaceShape.SOLID || flag; + } + + protected static boolean isExcepBlockForAttachWithPiston(Block p_194142_0_) + { + return Block.isExceptBlockForAttachWithPiston(p_194142_0_) || p_194142_0_ == Blocks.BARRIER || p_194142_0_ == Blocks.MELON_BLOCK || p_194142_0_ == Blocks.PUMPKIN || p_194142_0_ == Blocks.LIT_PUMPKIN; + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!worldIn.isRemote) + { + return ItemLead.attachToFence(playerIn, worldIn, pos); + } + else + { + ItemStack itemstack = playerIn.getHeldItem(hand); + return itemstack.getItem() == Items.LEAD || itemstack.isEmpty(); + } + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return 0; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(NORTH, canFenceConnectTo(worldIn, pos, EnumFacing.NORTH)) + .withProperty(EAST, canFenceConnectTo(worldIn, pos, EnumFacing.EAST)) + .withProperty(SOUTH, canFenceConnectTo(worldIn, pos, EnumFacing.SOUTH)) + .withProperty(WEST, canFenceConnectTo(worldIn, pos, EnumFacing.WEST)); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(EAST, state.getValue(WEST)).withProperty(SOUTH, state.getValue(NORTH)).withProperty(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(EAST)).withProperty(EAST, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(WEST)).withProperty(WEST, state.getValue(NORTH)); + case CLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(WEST)).withProperty(EAST, state.getValue(NORTH)).withProperty(SOUTH, state.getValue(EAST)).withProperty(WEST, state.getValue(SOUTH)); + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + switch (mirrorIn) + { + case LEFT_RIGHT: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(NORTH)); + case FRONT_BACK: + return state.withProperty(EAST, state.getValue(WEST)).withProperty(WEST, state.getValue(EAST)); + default: + return super.withMirror(state, mirrorIn); + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {NORTH, EAST, WEST, SOUTH}); + } + + /* ======================================== FORGE START ======================================== */ + + @Override + public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + return canConnectTo(world, pos.offset(facing), facing.getOpposite()); + } + + private boolean canFenceConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + BlockPos other = pos.offset(facing); + Block block = world.getBlockState(other).getBlock(); + return block.canBeConnectedTo(world, other, facing.getOpposite()) || canConnectTo(world, other, facing.getOpposite()); + } + + /* ======================================== FORGE END ======================================== */ + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE : BlockFaceShape.CENTER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFenceGate.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFenceGate.java new file mode 100644 index 0000000..a9a70c8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFenceGate.java @@ -0,0 +1,271 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFenceGate extends BlockHorizontal +{ + public static final PropertyBool OPEN = PropertyBool.create("open"); + public static final PropertyBool POWERED = PropertyBool.create("powered"); + public static final PropertyBool IN_WALL = PropertyBool.create("in_wall"); + protected static final AxisAlignedBB AABB_HITBOX_ZAXIS = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D); + protected static final AxisAlignedBB AABB_HITBOX_XAXIS = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D); + protected static final AxisAlignedBB AABB_HITBOX_ZAXIS_INWALL = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 0.8125D, 0.625D); + protected static final AxisAlignedBB AABB_HITBOX_XAXIS_INWALL = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 0.8125D, 1.0D); + protected static final AxisAlignedBB AABB_COLLISION_BOX_ZAXIS = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.5D, 0.625D); + protected static final AxisAlignedBB AABB_COLLISION_BOX_XAXIS = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.5D, 1.0D); + + public BlockFenceGate(BlockPlanks.EnumType p_i46394_1_) + { + super(Material.WOOD, p_i46394_1_.getMapColor()); + this.setDefaultState(this.blockState.getBaseState().withProperty(OPEN, Boolean.valueOf(false)).withProperty(POWERED, Boolean.valueOf(false)).withProperty(IN_WALL, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + + if (((Boolean)state.getValue(IN_WALL)).booleanValue()) + { + return ((EnumFacing)state.getValue(FACING)).getAxis() == EnumFacing.Axis.X ? AABB_HITBOX_XAXIS_INWALL : AABB_HITBOX_ZAXIS_INWALL; + } + else + { + return ((EnumFacing)state.getValue(FACING)).getAxis() == EnumFacing.Axis.X ? AABB_HITBOX_XAXIS : AABB_HITBOX_ZAXIS; + } + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + EnumFacing.Axis enumfacing$axis = ((EnumFacing)state.getValue(FACING)).getAxis(); + + if (enumfacing$axis == EnumFacing.Axis.Z && (worldIn.getBlockState(pos.west()).getBlock() instanceof BlockWall || worldIn.getBlockState(pos.east()).getBlock() instanceof BlockWall) || enumfacing$axis == EnumFacing.Axis.X && (worldIn.getBlockState(pos.north()).getBlock() instanceof BlockWall || worldIn.getBlockState(pos.south()).getBlock() instanceof BlockWall)) + { + state = state.withProperty(IN_WALL, Boolean.valueOf(true)); + } + + return state; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).getMaterial().isSolid() ? super.canPlaceBlockAt(worldIn, pos) : false; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + if (((Boolean)blockState.getValue(OPEN)).booleanValue()) + { + return NULL_AABB; + } + else + { + return ((EnumFacing)blockState.getValue(FACING)).getAxis() == EnumFacing.Axis.Z ? AABB_COLLISION_BOX_ZAXIS : AABB_COLLISION_BOX_XAXIS; + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return ((Boolean)worldIn.getBlockState(pos).getValue(OPEN)).booleanValue(); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + boolean flag = worldIn.isBlockPowered(pos); + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()).withProperty(OPEN, Boolean.valueOf(flag)).withProperty(POWERED, Boolean.valueOf(flag)).withProperty(IN_WALL, Boolean.valueOf(false)); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (((Boolean)state.getValue(OPEN)).booleanValue()) + { + state = state.withProperty(OPEN, Boolean.valueOf(false)); + worldIn.setBlockState(pos, state, 10); + } + else + { + EnumFacing enumfacing = EnumFacing.fromAngle((double)playerIn.rotationYaw); + + if (state.getValue(FACING) == enumfacing.getOpposite()) + { + state = state.withProperty(FACING, enumfacing); + } + + state = state.withProperty(OPEN, Boolean.valueOf(true)); + worldIn.setBlockState(pos, state, 10); + } + + worldIn.playEvent(playerIn, ((Boolean)state.getValue(OPEN)).booleanValue() ? 1008 : 1014, pos, 0); + return true; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + boolean flag = worldIn.isBlockPowered(pos); + + if (((Boolean)state.getValue(POWERED)).booleanValue() != flag) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(flag)).withProperty(OPEN, Boolean.valueOf(flag)), 2); + + if (((Boolean)state.getValue(OPEN)).booleanValue() != flag) + { + worldIn.playEvent((EntityPlayer)null, flag ? 1008 : 1014, pos, 0); + } + } + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)).withProperty(OPEN, Boolean.valueOf((meta & 4) != 0)).withProperty(POWERED, Boolean.valueOf((meta & 8) != 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + if (((Boolean)state.getValue(OPEN)).booleanValue()) + { + i |= 4; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, OPEN, POWERED, IN_WALL}); + } + + /* ======================================== FORGE START ======================================== */ + + @Override + public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + IBlockState state = world.getBlockState(pos); + if (state.getBlock() instanceof BlockFenceGate && + state.getBlockFaceShape(world, pos, facing) == BlockFaceShape.MIDDLE_POLE) + { + Block connector = world.getBlockState(pos.offset(facing)).getBlock(); + return connector instanceof BlockFence || connector instanceof BlockWall; + } + return false; + } + + /* ======================================== FORGE END ======================================== */ + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + if (face != EnumFacing.UP && face != EnumFacing.DOWN) + { + return ((EnumFacing)state.getValue(FACING)).getAxis() == face.rotateY().getAxis() ? BlockFaceShape.MIDDLE_POLE : BlockFaceShape.UNDEFINED; + } + else + { + return BlockFaceShape.UNDEFINED; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFire.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFire.java new file mode 100644 index 0000000..d02e1a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFire.java @@ -0,0 +1,547 @@ +package net.minecraft.block; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFire extends Block +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + public static final PropertyBool UPPER = PropertyBool.create("up"); + private final Map encouragements = Maps.newIdentityHashMap(); + private final Map flammabilities = Maps.newIdentityHashMap(); + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + if (!worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP) && !Blocks.FIRE.canCatchFire(worldIn, pos.down(), EnumFacing.UP)) + { + return state.withProperty(NORTH, this.canCatchFire(worldIn, pos.north(), EnumFacing.SOUTH)) + .withProperty(EAST, this.canCatchFire(worldIn, pos.east(), EnumFacing.WEST)) + .withProperty(SOUTH, this.canCatchFire(worldIn, pos.south(), EnumFacing.NORTH)) + .withProperty(WEST, this.canCatchFire(worldIn, pos.west(), EnumFacing.EAST)) + .withProperty(UPPER, this.canCatchFire(worldIn, pos.up(), EnumFacing.DOWN)); + } + return this.getDefaultState(); + } + + protected BlockFire() + { + super(Material.FIRE); + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)).withProperty(UPPER, Boolean.valueOf(false))); + this.setTickRandomly(true); + } + + public static void init() + { + Blocks.FIRE.setFireInfo(Blocks.PLANKS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.DOUBLE_WOODEN_SLAB, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.WOODEN_SLAB, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.OAK_FENCE_GATE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.SPRUCE_FENCE_GATE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.BIRCH_FENCE_GATE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.JUNGLE_FENCE_GATE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.DARK_OAK_FENCE_GATE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.ACACIA_FENCE_GATE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.OAK_FENCE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.SPRUCE_FENCE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.BIRCH_FENCE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.JUNGLE_FENCE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.DARK_OAK_FENCE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.ACACIA_FENCE, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.OAK_STAIRS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.BIRCH_STAIRS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.SPRUCE_STAIRS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.JUNGLE_STAIRS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.ACACIA_STAIRS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.DARK_OAK_STAIRS, 5, 20); + Blocks.FIRE.setFireInfo(Blocks.LOG, 5, 5); + Blocks.FIRE.setFireInfo(Blocks.LOG2, 5, 5); + Blocks.FIRE.setFireInfo(Blocks.LEAVES, 30, 60); + Blocks.FIRE.setFireInfo(Blocks.LEAVES2, 30, 60); + Blocks.FIRE.setFireInfo(Blocks.BOOKSHELF, 30, 20); + Blocks.FIRE.setFireInfo(Blocks.TNT, 15, 100); + Blocks.FIRE.setFireInfo(Blocks.TALLGRASS, 60, 100); + Blocks.FIRE.setFireInfo(Blocks.DOUBLE_PLANT, 60, 100); + Blocks.FIRE.setFireInfo(Blocks.YELLOW_FLOWER, 60, 100); + Blocks.FIRE.setFireInfo(Blocks.RED_FLOWER, 60, 100); + Blocks.FIRE.setFireInfo(Blocks.DEADBUSH, 60, 100); + Blocks.FIRE.setFireInfo(Blocks.WOOL, 30, 60); + Blocks.FIRE.setFireInfo(Blocks.VINE, 15, 100); + Blocks.FIRE.setFireInfo(Blocks.COAL_BLOCK, 5, 5); + Blocks.FIRE.setFireInfo(Blocks.HAY_BLOCK, 60, 20); + Blocks.FIRE.setFireInfo(Blocks.CARPET, 60, 20); + } + + public void setFireInfo(Block blockIn, int encouragement, int flammability) + { + if (blockIn == Blocks.AIR) throw new IllegalArgumentException("Tried to set air on fire... This is bad."); + this.encouragements.put(blockIn, Integer.valueOf(encouragement)); + this.flammabilities.put(blockIn, Integer.valueOf(flammability)); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 30; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getGameRules().getBoolean("doFireTick")) + { + if (!worldIn.isAreaLoaded(pos, 2)) return; // Forge: prevent loading unloaded chunks when spreading fire + if (!this.canPlaceBlockAt(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + + Block block = worldIn.getBlockState(pos.down()).getBlock(); + boolean flag = block.isFireSource(worldIn, pos.down(), EnumFacing.UP); + + int i = ((Integer)state.getValue(AGE)).intValue(); + + if (!flag && worldIn.isRaining() && this.canDie(worldIn, pos) && rand.nextFloat() < 0.2F + (float)i * 0.03F) + { + worldIn.setBlockToAir(pos); + } + else + { + if (i < 15) + { + state = state.withProperty(AGE, Integer.valueOf(i + rand.nextInt(3) / 2)); + worldIn.setBlockState(pos, state, 4); + } + + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn) + rand.nextInt(10)); + + if (!flag) + { + if (!this.canNeighborCatchFire(worldIn, pos)) + { + if (!worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP) || i > 3) + { + worldIn.setBlockToAir(pos); + } + + return; + } + + if (!this.canCatchFire(worldIn, pos.down(), EnumFacing.UP) && i == 15 && rand.nextInt(4) == 0) + { + worldIn.setBlockToAir(pos); + return; + } + } + + boolean flag1 = worldIn.isBlockinHighHumidity(pos); + int j = 0; + + if (flag1) + { + j = -50; + } + + this.tryCatchFire(worldIn, pos.east(), 300 + j, rand, i, EnumFacing.WEST); + this.tryCatchFire(worldIn, pos.west(), 300 + j, rand, i, EnumFacing.EAST); + this.tryCatchFire(worldIn, pos.down(), 250 + j, rand, i, EnumFacing.UP); + this.tryCatchFire(worldIn, pos.up(), 250 + j, rand, i, EnumFacing.DOWN); + this.tryCatchFire(worldIn, pos.north(), 300 + j, rand, i, EnumFacing.SOUTH); + this.tryCatchFire(worldIn, pos.south(), 300 + j, rand, i, EnumFacing.NORTH); + + for (int k = -1; k <= 1; ++k) + { + for (int l = -1; l <= 1; ++l) + { + for (int i1 = -1; i1 <= 4; ++i1) + { + if (k != 0 || i1 != 0 || l != 0) + { + int j1 = 100; + + if (i1 > 1) + { + j1 += (i1 - 1) * 100; + } + + BlockPos blockpos = pos.add(k, i1, l); + int k1 = this.getNeighborEncouragement(worldIn, blockpos); + + if (k1 > 0) + { + int l1 = (k1 + 40 + worldIn.getDifficulty().getDifficultyId() * 7) / (i + 30); + + if (flag1) + { + l1 /= 2; + } + + if (l1 > 0 && rand.nextInt(j1) <= l1 && (!worldIn.isRaining() || !this.canDie(worldIn, blockpos))) + { + int i2 = i + rand.nextInt(5) / 4; + + if (i2 > 15) + { + i2 = 15; + } + + worldIn.setBlockState(blockpos, state.withProperty(AGE, Integer.valueOf(i2)), 3); + } + } + } + } + } + } + } + } + } + + protected boolean canDie(World worldIn, BlockPos pos) + { + return worldIn.isRainingAt(pos) || worldIn.isRainingAt(pos.west()) || worldIn.isRainingAt(pos.east()) || worldIn.isRainingAt(pos.north()) || worldIn.isRainingAt(pos.south()); + } + + public boolean requiresUpdates() + { + return false; + } + + @Deprecated // Use Block.getFlammability + public int getFlammability(Block blockIn) + { + Integer integer = this.flammabilities.get(blockIn); + return integer == null ? 0 : integer.intValue(); + } + + @Deprecated // Use Block.getFireSpreadSpeed + public int getEncouragement(Block blockIn) + { + Integer integer = this.encouragements.get(blockIn); + return integer == null ? 0 : integer.intValue(); + } + + @Deprecated // Use tryCatchFire with face below + private void catchOnFire(World worldIn, BlockPos pos, int chance, Random random, int age) + { + this.tryCatchFire(worldIn, pos, chance, random, age, EnumFacing.UP); + } + + private void tryCatchFire(World worldIn, BlockPos pos, int chance, Random random, int age, EnumFacing face) + { + int i = worldIn.getBlockState(pos).getBlock().getFlammability(worldIn, pos, face); + + if (random.nextInt(chance) < i) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (random.nextInt(age + 10) < 5 && !worldIn.isRainingAt(pos)) + { + int j = age + random.nextInt(5) / 4; + + if (j > 15) + { + j = 15; + } + + worldIn.setBlockState(pos, this.getDefaultState().withProperty(AGE, Integer.valueOf(j)), 3); + } + else + { + worldIn.setBlockToAir(pos); + } + + if (iblockstate.getBlock() == Blocks.TNT) + { + Blocks.TNT.onBlockDestroyedByPlayer(worldIn, pos, iblockstate.withProperty(BlockTNT.EXPLODE, Boolean.valueOf(true))); + } + } + } + + private boolean canNeighborCatchFire(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (this.canCatchFire(worldIn, pos.offset(enumfacing), enumfacing.getOpposite())) + { + return true; + } + } + + return false; + } + + private int getNeighborEncouragement(World worldIn, BlockPos pos) + { + if (!worldIn.isAirBlock(pos)) + { + return 0; + } + else + { + int i = 0; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + i = Math.max(worldIn.getBlockState(pos.offset(enumfacing)).getBlock().getFireSpreadSpeed(worldIn, pos.offset(enumfacing), enumfacing.getOpposite()), i); + } + + return i; + } + } + + /** + * Returns if this block is collidable. Only used by fire, although stairs return that of the block that the stair + * is made of (though nobody's going to make fire stairs, right?) + */ + public boolean isCollidable() + { + return false; + } + + /** + * Checks if the block can be caught on fire + */ + @Deprecated // Use canCatchFire with face sensitive version below + public boolean canCatchFire(IBlockAccess worldIn, BlockPos pos) + { + return canCatchFire(worldIn, pos, EnumFacing.UP); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isTopSolid() || this.canNeighborCatchFire(worldIn, pos); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.getBlockState(pos.down()).isTopSolid() && !this.canNeighborCatchFire(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (worldIn.provider.getDimensionType().getId() > 0 || !Blocks.PORTAL.trySpawnPortal(worldIn, pos)) + { + if (!worldIn.getBlockState(pos.down()).isTopSolid() && !this.canNeighborCatchFire(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + } + else + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn) + worldIn.rand.nextInt(10)); + } + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.TNT; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (rand.nextInt(24) == 0) + { + worldIn.playSound((double)((float)pos.getX() + 0.5F), (double)((float)pos.getY() + 0.5F), (double)((float)pos.getZ() + 0.5F), SoundEvents.BLOCK_FIRE_AMBIENT, SoundCategory.BLOCKS, 1.0F + rand.nextFloat(), rand.nextFloat() * 0.7F + 0.3F, false); + } + + if (!worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP) && !Blocks.FIRE.canCatchFire(worldIn, pos.down(), EnumFacing.UP)) + { + if (Blocks.FIRE.canCatchFire(worldIn, pos.west(), EnumFacing.EAST)) + { + for (int j = 0; j < 2; ++j) + { + double d3 = (double)pos.getX() + rand.nextDouble() * 0.10000000149011612D; + double d8 = (double)pos.getY() + rand.nextDouble(); + double d13 = (double)pos.getZ() + rand.nextDouble(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d3, d8, d13, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.FIRE.canCatchFire(worldIn, pos.east(), EnumFacing.WEST)) + { + for (int k = 0; k < 2; ++k) + { + double d4 = (double)(pos.getX() + 1) - rand.nextDouble() * 0.10000000149011612D; + double d9 = (double)pos.getY() + rand.nextDouble(); + double d14 = (double)pos.getZ() + rand.nextDouble(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d4, d9, d14, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.FIRE.canCatchFire(worldIn, pos.north(), EnumFacing.SOUTH)) + { + for (int l = 0; l < 2; ++l) + { + double d5 = (double)pos.getX() + rand.nextDouble(); + double d10 = (double)pos.getY() + rand.nextDouble(); + double d15 = (double)pos.getZ() + rand.nextDouble() * 0.10000000149011612D; + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d5, d10, d15, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.FIRE.canCatchFire(worldIn, pos.south(), EnumFacing.NORTH)) + { + for (int i1 = 0; i1 < 2; ++i1) + { + double d6 = (double)pos.getX() + rand.nextDouble(); + double d11 = (double)pos.getY() + rand.nextDouble(); + double d16 = (double)(pos.getZ() + 1) - rand.nextDouble() * 0.10000000149011612D; + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d6, d11, d16, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.FIRE.canCatchFire(worldIn, pos.up(), EnumFacing.DOWN)) + { + for (int j1 = 0; j1 < 2; ++j1) + { + double d7 = (double)pos.getX() + rand.nextDouble(); + double d12 = (double)(pos.getY() + 1) - rand.nextDouble() * 0.10000000149011612D; + double d17 = (double)pos.getZ() + rand.nextDouble(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d7, d12, d17, 0.0D, 0.0D, 0.0D); + } + } + } + else + { + for (int i = 0; i < 3; ++i) + { + double d0 = (double)pos.getX() + rand.nextDouble(); + double d1 = (double)pos.getY() + rand.nextDouble() * 0.5D + 0.5D; + double d2 = (double)pos.getZ() + rand.nextDouble(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE, NORTH, EAST, SOUTH, WEST, UPPER}); + } + + /*================================= Forge Start ======================================*/ + /** + * Side sensitive version that calls the block function. + * + * @param world The current world + * @param pos Block position + * @param face The side the fire is coming from + * @return True if the face can catch fire. + */ + public boolean canCatchFire(IBlockAccess world, BlockPos pos, EnumFacing face) + { + return world.getBlockState(pos).getBlock().isFlammable(world, pos, face); + } + /*================================= Forge Start ======================================*/ + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFlower.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFlower.java new file mode 100644 index 0000000..9c6e7e8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFlower.java @@ -0,0 +1,211 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import java.util.Collection; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public abstract class BlockFlower extends BlockBush +{ + protected PropertyEnum type; + + protected BlockFlower() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(this.getTypeProperty(), this.getBlockType() == BlockFlower.EnumFlowerColor.RED ? BlockFlower.EnumFlowerType.POPPY : BlockFlower.EnumFlowerType.DANDELION)); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return super.getBoundingBox(state, source, pos).offset(state.getOffset(source, pos)); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockFlower.EnumFlowerType)state.getValue(this.getTypeProperty())).getMeta(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockFlower.EnumFlowerType blockflower$enumflowertype : BlockFlower.EnumFlowerType.getTypes(this.getBlockType())) + { + items.add(new ItemStack(this, 1, blockflower$enumflowertype.getMeta())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(this.getTypeProperty(), BlockFlower.EnumFlowerType.getType(this.getBlockType(), meta)); + } + + /** + * Get the Type of this flower (Yellow/Red) + */ + public abstract BlockFlower.EnumFlowerColor getBlockType(); + + public IProperty getTypeProperty() + { + if (this.type == null) + { + this.type = PropertyEnum.create("type", BlockFlower.EnumFlowerType.class, new Predicate() + { + public boolean apply(@Nullable BlockFlower.EnumFlowerType p_apply_1_) + { + return p_apply_1_.getBlockType() == BlockFlower.this.getBlockType(); + } + }); + } + + return this.type; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockFlower.EnumFlowerType)state.getValue(this.getTypeProperty())).getMeta(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {this.getTypeProperty()}); + } + + /** + * Get the OffsetType for this Block. Determines if the model is rendered slightly offset. + */ + public Block.EnumOffsetType getOffsetType() + { + return Block.EnumOffsetType.XZ; + } + + public static enum EnumFlowerColor + { + YELLOW, + RED; + + public BlockFlower getBlock() + { + return this == YELLOW ? Blocks.YELLOW_FLOWER : Blocks.RED_FLOWER; + } + } + + public static enum EnumFlowerType implements IStringSerializable + { + DANDELION(BlockFlower.EnumFlowerColor.YELLOW, 0, "dandelion"), + POPPY(BlockFlower.EnumFlowerColor.RED, 0, "poppy"), + BLUE_ORCHID(BlockFlower.EnumFlowerColor.RED, 1, "blue_orchid", "blueOrchid"), + ALLIUM(BlockFlower.EnumFlowerColor.RED, 2, "allium"), + HOUSTONIA(BlockFlower.EnumFlowerColor.RED, 3, "houstonia"), + RED_TULIP(BlockFlower.EnumFlowerColor.RED, 4, "red_tulip", "tulipRed"), + ORANGE_TULIP(BlockFlower.EnumFlowerColor.RED, 5, "orange_tulip", "tulipOrange"), + WHITE_TULIP(BlockFlower.EnumFlowerColor.RED, 6, "white_tulip", "tulipWhite"), + PINK_TULIP(BlockFlower.EnumFlowerColor.RED, 7, "pink_tulip", "tulipPink"), + OXEYE_DAISY(BlockFlower.EnumFlowerColor.RED, 8, "oxeye_daisy", "oxeyeDaisy"); + + private static final BlockFlower.EnumFlowerType[][] TYPES_FOR_BLOCK = new BlockFlower.EnumFlowerType[BlockFlower.EnumFlowerColor.values().length][]; + private final BlockFlower.EnumFlowerColor blockType; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumFlowerType(BlockFlower.EnumFlowerColor blockType, int meta, String name) + { + this(blockType, meta, name, name); + } + + private EnumFlowerType(BlockFlower.EnumFlowerColor blockType, int meta, String name, String unlocalizedName) + { + this.blockType = blockType; + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public BlockFlower.EnumFlowerColor getBlockType() + { + return this.blockType; + } + + public int getMeta() + { + return this.meta; + } + + /** + * Get the given FlowerType from BlockType & metadata + */ + public static BlockFlower.EnumFlowerType getType(BlockFlower.EnumFlowerColor blockType, int meta) + { + BlockFlower.EnumFlowerType[] ablockflower$enumflowertype = TYPES_FOR_BLOCK[blockType.ordinal()]; + + if (meta < 0 || meta >= ablockflower$enumflowertype.length) + { + meta = 0; + } + + return ablockflower$enumflowertype[meta]; + } + + /** + * Get all FlowerTypes that are applicable for the given Flower block ("yellow", "red") + */ + public static BlockFlower.EnumFlowerType[] getTypes(BlockFlower.EnumFlowerColor flowerColor) + { + return TYPES_FOR_BLOCK[flowerColor.ordinal()]; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (final BlockFlower.EnumFlowerColor blockflower$enumflowercolor : BlockFlower.EnumFlowerColor.values()) + { + Collection collection = Collections2.filter(Lists.newArrayList(values()), new Predicate() + { + public boolean apply(@Nullable BlockFlower.EnumFlowerType p_apply_1_) + { + return p_apply_1_.getBlockType() == blockflower$enumflowercolor; + } + }); + TYPES_FOR_BLOCK[blockflower$enumflowercolor.ordinal()] = (BlockFlower.EnumFlowerType[])collection.toArray(new BlockFlower.EnumFlowerType[collection.size()]); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFlowerPot.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFlowerPot.java new file mode 100644 index 0000000..dfda64d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFlowerPot.java @@ -0,0 +1,516 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFlowerPot; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.ChunkCache; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFlowerPot extends BlockContainer +{ + public static final PropertyInteger LEGACY_DATA = PropertyInteger.create("legacy_data", 0, 15); + public static final PropertyEnum CONTENTS = PropertyEnum.create("contents", BlockFlowerPot.EnumFlowerType.class); + protected static final AxisAlignedBB FLOWER_POT_AABB = new AxisAlignedBB(0.3125D, 0.0D, 0.3125D, 0.6875D, 0.375D, 0.6875D); + + public BlockFlowerPot() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(CONTENTS, BlockFlowerPot.EnumFlowerType.EMPTY).withProperty(LEGACY_DATA, Integer.valueOf(0))); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal("item.flowerPot.name"); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FLOWER_POT_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(worldIn, pos); + + if (tileentityflowerpot == null) + { + return false; + } + else + { + ItemStack itemstack1 = tileentityflowerpot.getFlowerItemStack(); + + if (itemstack1.isEmpty()) + { + if (!this.canBePotted(itemstack)) + { + return false; + } + + tileentityflowerpot.setItemStack(itemstack); + playerIn.addStat(StatList.FLOWER_POTTED); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + else + { + if (itemstack.isEmpty()) + { + playerIn.setHeldItem(hand, itemstack1); + } + else if (!playerIn.addItemStackToInventory(itemstack1)) + { + playerIn.dropItem(itemstack1, false); + } + + tileentityflowerpot.setItemStack(ItemStack.EMPTY); + } + + tileentityflowerpot.markDirty(); + worldIn.notifyBlockUpdate(pos, state, state, 3); + return true; + } + } + + private boolean canBePotted(ItemStack stack) + { + Block block = Block.getBlockFromItem(stack.getItem()); + + if (block != Blocks.YELLOW_FLOWER && block != Blocks.RED_FLOWER && block != Blocks.CACTUS && block != Blocks.BROWN_MUSHROOM && block != Blocks.RED_MUSHROOM && block != Blocks.SAPLING && block != Blocks.DEADBUSH) + { + int i = stack.getMetadata(); + return block == Blocks.TALLGRASS && i == BlockTallGrass.EnumType.FERN.getMeta(); + } + else + { + return true; + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(worldIn, pos); + + if (tileentityflowerpot != null) + { + ItemStack itemstack = tileentityflowerpot.getFlowerItemStack(); + + if (!itemstack.isEmpty()) + { + return itemstack; + } + } + + return new ItemStack(Items.FLOWER_POT); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + IBlockState downState = worldIn.getBlockState(pos.down()); + return super.canPlaceBlockAt(worldIn, pos) && (downState.isTopSolid() || downState.getBlockFaceShape(worldIn, pos.down(), EnumFacing.UP) == BlockFaceShape.SOLID); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + IBlockState downState = worldIn.getBlockState(pos.down()); + if (!downState.isTopSolid() && downState.getBlockFaceShape(worldIn, pos.down(), EnumFacing.UP) != BlockFaceShape.SOLID) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + super.onBlockHarvested(worldIn, pos, state, player); + + if (player.capabilities.isCreativeMode) + { + TileEntityFlowerPot tileentityflowerpot = this.getTileEntity(worldIn, pos); + + if (tileentityflowerpot != null) + { + tileentityflowerpot.setItemStack(ItemStack.EMPTY); + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.FLOWER_POT; + } + + @Nullable + private TileEntityFlowerPot getTileEntity(World worldIn, BlockPos pos) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity instanceof TileEntityFlowerPot ? (TileEntityFlowerPot)tileentity : null; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + Block block = null; + int i = 0; + + switch (meta) + { + case 1: + block = Blocks.RED_FLOWER; + i = BlockFlower.EnumFlowerType.POPPY.getMeta(); + break; + case 2: + block = Blocks.YELLOW_FLOWER; + break; + case 3: + block = Blocks.SAPLING; + i = BlockPlanks.EnumType.OAK.getMetadata(); + break; + case 4: + block = Blocks.SAPLING; + i = BlockPlanks.EnumType.SPRUCE.getMetadata(); + break; + case 5: + block = Blocks.SAPLING; + i = BlockPlanks.EnumType.BIRCH.getMetadata(); + break; + case 6: + block = Blocks.SAPLING; + i = BlockPlanks.EnumType.JUNGLE.getMetadata(); + break; + case 7: + block = Blocks.RED_MUSHROOM; + break; + case 8: + block = Blocks.BROWN_MUSHROOM; + break; + case 9: + block = Blocks.CACTUS; + break; + case 10: + block = Blocks.DEADBUSH; + break; + case 11: + block = Blocks.TALLGRASS; + i = BlockTallGrass.EnumType.FERN.getMeta(); + break; + case 12: + block = Blocks.SAPLING; + i = BlockPlanks.EnumType.ACACIA.getMetadata(); + break; + case 13: + block = Blocks.SAPLING; + i = BlockPlanks.EnumType.DARK_OAK.getMetadata(); + } + + return new TileEntityFlowerPot(Item.getItemFromBlock(block), i); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {CONTENTS, LEGACY_DATA}); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(LEGACY_DATA)).intValue(); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + BlockFlowerPot.EnumFlowerType blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.EMPTY; + TileEntity tileentity = worldIn instanceof ChunkCache ? ((ChunkCache)worldIn).getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK) : worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityFlowerPot) + { + TileEntityFlowerPot tileentityflowerpot = (TileEntityFlowerPot)tileentity; + Item item = tileentityflowerpot.getFlowerPotItem(); + + if (item instanceof ItemBlock) + { + int i = tileentityflowerpot.getFlowerPotData(); + Block block = Block.getBlockFromItem(item); + + if (block == Blocks.SAPLING) + { + switch (BlockPlanks.EnumType.byMetadata(i)) + { + case OAK: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.OAK_SAPLING; + break; + case SPRUCE: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.SPRUCE_SAPLING; + break; + case BIRCH: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.BIRCH_SAPLING; + break; + case JUNGLE: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.JUNGLE_SAPLING; + break; + case ACACIA: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.ACACIA_SAPLING; + break; + case DARK_OAK: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.DARK_OAK_SAPLING; + break; + default: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.EMPTY; + } + } + else if (block == Blocks.TALLGRASS) + { + switch (i) + { + case 0: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.DEAD_BUSH; + break; + case 2: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.FERN; + break; + default: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.EMPTY; + } + } + else if (block == Blocks.YELLOW_FLOWER) + { + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.DANDELION; + } + else if (block == Blocks.RED_FLOWER) + { + switch (BlockFlower.EnumFlowerType.getType(BlockFlower.EnumFlowerColor.RED, i)) + { + case POPPY: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.POPPY; + break; + case BLUE_ORCHID: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.BLUE_ORCHID; + break; + case ALLIUM: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.ALLIUM; + break; + case HOUSTONIA: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.HOUSTONIA; + break; + case RED_TULIP: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.RED_TULIP; + break; + case ORANGE_TULIP: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.ORANGE_TULIP; + break; + case WHITE_TULIP: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.WHITE_TULIP; + break; + case PINK_TULIP: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.PINK_TULIP; + break; + case OXEYE_DAISY: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.OXEYE_DAISY; + break; + default: + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.EMPTY; + } + } + else if (block == Blocks.RED_MUSHROOM) + { + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.MUSHROOM_RED; + } + else if (block == Blocks.BROWN_MUSHROOM) + { + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.MUSHROOM_BROWN; + } + else if (block == Blocks.DEADBUSH) + { + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.DEAD_BUSH; + } + else if (block == Blocks.CACTUS) + { + blockflowerpot$enumflowertype = BlockFlowerPot.EnumFlowerType.CACTUS; + } + } + } + + return state.withProperty(CONTENTS, blockflowerpot$enumflowertype); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + + /*============================FORGE START=====================================*/ + @Override + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + super.getDrops(drops, world, pos, state, fortune); + TileEntityFlowerPot te = world.getTileEntity(pos) instanceof TileEntityFlowerPot ? (TileEntityFlowerPot)world.getTileEntity(pos) : null; + if (te != null && te.getFlowerPotItem() != null) + drops.add(new ItemStack(te.getFlowerPotItem(), 1, te.getFlowerPotData())); + } + @Override + public boolean removedByPlayer(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) + { + if (willHarvest) return true; //If it will harvest, delay deletion of the block until after getDrops + return super.removedByPlayer(state, world, pos, player, willHarvest); + } + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + @Override + public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack tool) + { + super.harvestBlock(world, player, pos, state, te, tool); + world.setBlockToAir(pos); + } + /*===========================FORGE END==========================================*/ + + public static enum EnumFlowerType implements IStringSerializable + { + EMPTY("empty"), + POPPY("rose"), + BLUE_ORCHID("blue_orchid"), + ALLIUM("allium"), + HOUSTONIA("houstonia"), + RED_TULIP("red_tulip"), + ORANGE_TULIP("orange_tulip"), + WHITE_TULIP("white_tulip"), + PINK_TULIP("pink_tulip"), + OXEYE_DAISY("oxeye_daisy"), + DANDELION("dandelion"), + OAK_SAPLING("oak_sapling"), + SPRUCE_SAPLING("spruce_sapling"), + BIRCH_SAPLING("birch_sapling"), + JUNGLE_SAPLING("jungle_sapling"), + ACACIA_SAPLING("acacia_sapling"), + DARK_OAK_SAPLING("dark_oak_sapling"), + MUSHROOM_RED("mushroom_red"), + MUSHROOM_BROWN("mushroom_brown"), + DEAD_BUSH("dead_bush"), + FERN("fern"), + CACTUS("cactus"); + + private final String name; + + private EnumFlowerType(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFrostedIce.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFrostedIce.java new file mode 100644 index 0000000..758a136 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFrostedIce.java @@ -0,0 +1,127 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class BlockFrostedIce extends BlockIce +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 3); + + public BlockFrostedIce() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0))); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(MathHelper.clamp(meta, 0, 3))); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if ((rand.nextInt(3) == 0 || this.countNeighbors(worldIn, pos) < 4) && worldIn.getLightFromNeighbors(pos) > 11 - ((Integer)state.getValue(AGE)).intValue() - state.getLightOpacity()) + { + this.slightlyMelt(worldIn, pos, state, rand, true); + } + else + { + worldIn.scheduleUpdate(pos, this, MathHelper.getInt(rand, 20, 40)); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (blockIn == this) + { + int i = this.countNeighbors(worldIn, pos); + + if (i < 2) + { + this.turnIntoWater(worldIn, pos); + } + } + } + + private int countNeighbors(World worldIn, BlockPos pos) + { + int i = 0; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() == this) + { + ++i; + + if (i >= 4) + { + return i; + } + } + } + + return i; + } + + protected void slightlyMelt(World worldIn, BlockPos pos, IBlockState state, Random rand, boolean meltNeighbors) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + if (i < 3) + { + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(i + 1)), 2); + worldIn.scheduleUpdate(pos, this, MathHelper.getInt(rand, 20, 40)); + } + else + { + this.turnIntoWater(worldIn, pos); + + if (meltNeighbors) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() == this) + { + this.slightlyMelt(worldIn, blockpos, iblockstate, rand, false); + } + } + } + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE}); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return ItemStack.EMPTY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockFurnace.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFurnace.java new file mode 100644 index 0000000..e732c6d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockFurnace.java @@ -0,0 +1,303 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockFurnace extends BlockContainer +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + private final boolean isBurning; + private static boolean keepInventory; + + protected BlockFurnace(boolean isBurning) + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.isBurning = isBurning; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.FURNACE); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.setDefaultFacing(worldIn, pos, state); + } + + private void setDefaultFacing(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + IBlockState iblockstate = worldIn.getBlockState(pos.north()); + IBlockState iblockstate1 = worldIn.getBlockState(pos.south()); + IBlockState iblockstate2 = worldIn.getBlockState(pos.west()); + IBlockState iblockstate3 = worldIn.getBlockState(pos.east()); + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (enumfacing == EnumFacing.NORTH && iblockstate.isFullBlock() && !iblockstate1.isFullBlock()) + { + enumfacing = EnumFacing.SOUTH; + } + else if (enumfacing == EnumFacing.SOUTH && iblockstate1.isFullBlock() && !iblockstate.isFullBlock()) + { + enumfacing = EnumFacing.NORTH; + } + else if (enumfacing == EnumFacing.WEST && iblockstate2.isFullBlock() && !iblockstate3.isFullBlock()) + { + enumfacing = EnumFacing.EAST; + } + else if (enumfacing == EnumFacing.EAST && iblockstate3.isFullBlock() && !iblockstate2.isFullBlock()) + { + enumfacing = EnumFacing.WEST; + } + + worldIn.setBlockState(pos, state.withProperty(FACING, enumfacing), 2); + } + } + + @SideOnly(Side.CLIENT) + @SuppressWarnings("incomplete-switch") + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (this.isBurning) + { + EnumFacing enumfacing = (EnumFacing)stateIn.getValue(FACING); + double d0 = (double)pos.getX() + 0.5D; + double d1 = (double)pos.getY() + rand.nextDouble() * 6.0D / 16.0D; + double d2 = (double)pos.getZ() + 0.5D; + double d3 = 0.52D; + double d4 = rand.nextDouble() * 0.6D - 0.3D; + + if (rand.nextDouble() < 0.1D) + { + worldIn.playSound((double)pos.getX() + 0.5D, (double)pos.getY(), (double)pos.getZ() + 0.5D, SoundEvents.BLOCK_FURNACE_FIRE_CRACKLE, SoundCategory.BLOCKS, 1.0F, 1.0F, false); + } + + switch (enumfacing) + { + case WEST: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 - 0.52D, d1, d2 + d4, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 - 0.52D, d1, d2 + d4, 0.0D, 0.0D, 0.0D); + break; + case EAST: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + 0.52D, d1, d2 + d4, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + 0.52D, d1, d2 + d4, 0.0D, 0.0D, 0.0D); + break; + case NORTH: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d4, d1, d2 - 0.52D, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4, d1, d2 - 0.52D, 0.0D, 0.0D, 0.0D); + break; + case SOUTH: + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d4, d1, d2 + 0.52D, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4, d1, d2 + 0.52D, 0.0D, 0.0D, 0.0D); + } + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityFurnace) + { + playerIn.displayGUIChest((TileEntityFurnace)tileentity); + playerIn.addStat(StatList.FURNACE_INTERACTION); + } + + return true; + } + } + + public static void setState(boolean active, World worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + TileEntity tileentity = worldIn.getTileEntity(pos); + keepInventory = true; + + if (active) + { + worldIn.setBlockState(pos, Blocks.LIT_FURNACE.getDefaultState().withProperty(FACING, iblockstate.getValue(FACING)), 3); + worldIn.setBlockState(pos, Blocks.LIT_FURNACE.getDefaultState().withProperty(FACING, iblockstate.getValue(FACING)), 3); + } + else + { + worldIn.setBlockState(pos, Blocks.FURNACE.getDefaultState().withProperty(FACING, iblockstate.getValue(FACING)), 3); + worldIn.setBlockState(pos, Blocks.FURNACE.getDefaultState().withProperty(FACING, iblockstate.getValue(FACING)), 3); + } + + keepInventory = false; + + if (tileentity != null) + { + tileentity.validate(); + worldIn.setTileEntity(pos, tileentity); + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityFurnace(); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos, state.withProperty(FACING, placer.getHorizontalFacing().getOpposite()), 2); + + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityFurnace) + { + ((TileEntityFurnace)tileentity).setCustomInventoryName(stack.getDisplayName()); + } + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!keepInventory) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityFurnace) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (TileEntityFurnace)tileentity); + worldIn.updateComparatorOutputLevel(pos, this); + } + } + + super.breakBlock(worldIn, pos, state); + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return Container.calcRedstone(worldIn.getTileEntity(pos)); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.FURNACE); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlass.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlass.java new file mode 100644 index 0000000..ae8365e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlass.java @@ -0,0 +1,42 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.BlockRenderLayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockGlass extends BlockBreakable +{ + public BlockGlass(Material materialIn, boolean ignoreSimilarity) + { + super(materialIn, ignoreSimilarity); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + protected boolean canSilkHarvest() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlazedTerracotta.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlazedTerracotta.java new file mode 100644 index 0000000..906a663 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlazedTerracotta.java @@ -0,0 +1,90 @@ +package net.minecraft.block; + +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockGlazedTerracotta extends BlockHorizontal +{ + public BlockGlazedTerracotta(EnumDyeColor color) + { + super(Material.ROCK, MapColor.getBlockColor(color)); + this.setHardness(1.4F); + this.setSoundType(SoundType.STONE); + String s = color.getUnlocalizedName(); + + if (s.length() > 1) + { + String s1 = s.substring(0, 1).toUpperCase() + s.substring(1, s.length()); + this.setUnlocalizedName("glazedTerracotta" + s1); + } + + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + return i; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)); + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.PUSH_ONLY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlowstone.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlowstone.java new file mode 100644 index 0000000..a4f15dd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGlowstone.java @@ -0,0 +1,53 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class BlockGlowstone extends Block +{ + public BlockGlowstone(Material materialIn) + { + super(materialIn); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + return MathHelper.clamp(this.quantityDropped(random) + random.nextInt(fortune + 1), 1, 4); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 2 + random.nextInt(3); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.GLOWSTONE_DUST; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.SAND; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockGrass.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGrass.java new file mode 100644 index 0000000..42649d2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGrass.java @@ -0,0 +1,160 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockGrass extends Block implements IGrowable +{ + public static final PropertyBool SNOWY = PropertyBool.create("snowy"); + + protected BlockGrass() + { + super(Material.GRASS); + this.setDefaultState(this.blockState.getBaseState().withProperty(SNOWY, Boolean.valueOf(false))); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos.up()).getBlock(); + return state.withProperty(SNOWY, Boolean.valueOf(block == Blocks.SNOW || block == Blocks.SNOW_LAYER)); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (!worldIn.isAreaLoaded(pos, 3)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getLightOpacity(worldIn, pos.up()) > 2) + { + worldIn.setBlockState(pos, Blocks.DIRT.getDefaultState()); + } + else + { + if (worldIn.getLightFromNeighbors(pos.up()) >= 9) + { + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos = pos.add(rand.nextInt(3) - 1, rand.nextInt(5) - 3, rand.nextInt(3) - 1); + + if (blockpos.getY() >= 0 && blockpos.getY() < 256 && !worldIn.isBlockLoaded(blockpos)) + { + return; + } + + IBlockState iblockstate = worldIn.getBlockState(blockpos.up()); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos); + + if (iblockstate1.getBlock() == Blocks.DIRT && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos.up()) >= 4 && iblockstate.getLightOpacity(worldIn, pos.up()) <= 2) + { + worldIn.setBlockState(blockpos, Blocks.GRASS.getDefaultState()); + } + } + } + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Blocks.DIRT.getItemDropped(Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), rand, fortune); + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return true; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return true; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + BlockPos blockpos = pos.up(); + + for (int i = 0; i < 128; ++i) + { + BlockPos blockpos1 = blockpos; + int j = 0; + + while (true) + { + if (j >= i / 16) + { + if (worldIn.isAirBlock(blockpos1)) + { + if (rand.nextInt(8) == 0) + { + worldIn.getBiome(blockpos1).plantFlower(worldIn, rand, blockpos1); + } + else + { + IBlockState iblockstate1 = Blocks.TALLGRASS.getDefaultState().withProperty(BlockTallGrass.TYPE, BlockTallGrass.EnumType.GRASS); + + if (Blocks.TALLGRASS.canBlockStay(worldIn, blockpos1, iblockstate1)) + { + worldIn.setBlockState(blockpos1, iblockstate1, 3); + } + } + } + + break; + } + + blockpos1 = blockpos1.add(rand.nextInt(3) - 1, (rand.nextInt(3) - 1) * rand.nextInt(3) / 2, rand.nextInt(3) - 1); + + if (worldIn.getBlockState(blockpos1.down()).getBlock() != Blocks.GRASS || worldIn.getBlockState(blockpos1).isNormalCube()) + { + break; + } + + ++j; + } + } + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT_MIPPED; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {SNOWY}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockGrassPath.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGrassPath.java new file mode 100644 index 0000000..1256f8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGrassPath.java @@ -0,0 +1,119 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockGrassPath extends Block +{ + protected static final AxisAlignedBB GRASS_PATH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.9375D, 1.0D); + + protected BlockGrassPath() + { + super(Material.GROUND); + this.setLightOpacity(255); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + switch (side) + { + case UP: + return true; + case NORTH: + case SOUTH: + case WEST: + case EAST: + IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side)); + Block block = iblockstate.getBlock(); + return !iblockstate.isOpaqueCube() && block != Blocks.FARMLAND && block != Blocks.GRASS_PATH; + default: + return super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + this.updateBlockState(worldIn, pos); + } + + private void updateBlockState(World worldIn, BlockPos pos) + { + if (worldIn.getBlockState(pos.up()).getMaterial().isSolid()) + { + BlockFarmland.turnToDirt(worldIn, pos); + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return GRASS_PATH_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Blocks.DIRT.getItemDropped(Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), rand, fortune); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + this.updateBlockState(worldIn, pos); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockGravel.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGravel.java new file mode 100644 index 0000000..d0f736d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockGravel.java @@ -0,0 +1,41 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockGravel extends BlockFalling +{ + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (fortune > 3) + { + fortune = 3; + } + + return rand.nextInt(10 - fortune * 3) == 0 ? Items.FLINT : super.getItemDropped(state, rand, fortune); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.STONE; + } + + @SideOnly(Side.CLIENT) + public int getDustColor(IBlockState state) + { + return -8356741; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfStoneSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfStoneSlab.java new file mode 100644 index 0000000..b7b7f10 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfStoneSlab.java @@ -0,0 +1,9 @@ +package net.minecraft.block; + +public class BlockHalfStoneSlab extends BlockStoneSlab +{ + public boolean isDouble() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfStoneSlabNew.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfStoneSlabNew.java new file mode 100644 index 0000000..573afa3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfStoneSlabNew.java @@ -0,0 +1,9 @@ +package net.minecraft.block; + +public class BlockHalfStoneSlabNew extends BlockStoneSlabNew +{ + public boolean isDouble() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfWoodSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfWoodSlab.java new file mode 100644 index 0000000..1adb002 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHalfWoodSlab.java @@ -0,0 +1,9 @@ +package net.minecraft.block; + +public class BlockHalfWoodSlab extends BlockWoodSlab +{ + public boolean isDouble() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHardenedClay.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHardenedClay.java new file mode 100644 index 0000000..8d94cc0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHardenedClay.java @@ -0,0 +1,25 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockHardenedClay extends Block +{ + public BlockHardenedClay() + { + super(Material.ROCK); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.ADOBE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHay.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHay.java new file mode 100644 index 0000000..b9c0ac4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHay.java @@ -0,0 +1,27 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockHay extends BlockRotatedPillar +{ + public BlockHay() + { + super(Material.GRASS, MapColor.YELLOW); + this.setDefaultState(this.blockState.getBaseState().withProperty(AXIS, EnumFacing.Axis.Y)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Block's chance to react to a living entity falling on it. + */ + public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) + { + entityIn.fall(fallDistance, 0.2F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHopper.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHopper.java new file mode 100644 index 0000000..c4490f1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHopper.java @@ -0,0 +1,309 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockHopper extends BlockContainer +{ + public static final PropertyDirection FACING = PropertyDirection.create("facing", new Predicate() + { + public boolean apply(@Nullable EnumFacing p_apply_1_) + { + return p_apply_1_ != EnumFacing.UP; + } + }); + public static final PropertyBool ENABLED = PropertyBool.create("enabled"); + protected static final AxisAlignedBB BASE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.625D, 1.0D); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.125D); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.875D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.875D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.125D, 1.0D, 1.0D); + + public BlockHopper() + { + super(Material.IRON, MapColor.STONE); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.DOWN).withProperty(ENABLED, Boolean.valueOf(true))); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FULL_BLOCK_AABB; + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, BASE_AABB); + addCollisionBoxToList(pos, entityBox, collidingBoxes, EAST_AABB); + addCollisionBoxToList(pos, entityBox, collidingBoxes, WEST_AABB); + addCollisionBoxToList(pos, entityBox, collidingBoxes, SOUTH_AABB); + addCollisionBoxToList(pos, entityBox, collidingBoxes, NORTH_AABB); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + EnumFacing enumfacing = facing.getOpposite(); + + if (enumfacing == EnumFacing.UP) + { + enumfacing = EnumFacing.DOWN; + } + + return this.getDefaultState().withProperty(FACING, enumfacing).withProperty(ENABLED, Boolean.valueOf(true)); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityHopper(); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + super.onBlockPlacedBy(worldIn, pos, state, placer, stack); + + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityHopper) + { + ((TileEntityHopper)tileentity).setCustomName(stack.getDisplayName()); + } + } + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + public boolean isTopSolid(IBlockState state) + { + return true; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.updateState(worldIn, pos, state); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityHopper) + { + playerIn.displayGUIChest((TileEntityHopper)tileentity); + playerIn.addStat(StatList.HOPPER_INSPECTED); + } + + return true; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.updateState(worldIn, pos, state); + } + + private void updateState(World worldIn, BlockPos pos, IBlockState state) + { + boolean flag = !worldIn.isBlockPowered(pos); + + if (flag != ((Boolean)state.getValue(ENABLED)).booleanValue()) + { + worldIn.setBlockState(pos, state.withProperty(ENABLED, Boolean.valueOf(flag)), 4); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityHopper) + { + InventoryHelper.dropInventoryItems(worldIn, pos, (TileEntityHopper)tileentity); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.breakBlock(worldIn, pos, state); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public static EnumFacing getFacing(int meta) + { + return EnumFacing.getFront(meta & 7); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + /** + * Get's the hopper's active status from the 8-bit of the metadata. Note that the metadata stores whether the block + * is powered, so this returns true when that bit is 0. + */ + public static boolean isEnabled(int meta) + { + return (meta & 8) != 8; + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return Container.calcRedstone(worldIn.getTileEntity(pos)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT_MIPPED; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, getFacing(meta)).withProperty(ENABLED, Boolean.valueOf(isEnabled(meta))); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (!((Boolean)state.getValue(ENABLED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, ENABLED}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.UP ? BlockFaceShape.BOWL : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHorizontal.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHorizontal.java new file mode 100644 index 0000000..df7d107 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHorizontal.java @@ -0,0 +1,21 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.util.EnumFacing; + +public abstract class BlockHorizontal extends Block +{ + public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); + + protected BlockHorizontal(Material materialIn) + { + super(materialIn); + } + + protected BlockHorizontal(Material materialIn, MapColor colorIn) + { + super(materialIn, colorIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockHugeMushroom.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHugeMushroom.java new file mode 100644 index 0000000..9c7de6d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockHugeMushroom.java @@ -0,0 +1,326 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockHugeMushroom extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockHugeMushroom.EnumType.class); + private final Block smallBlock; + + public BlockHugeMushroom(Material materialIn, MapColor color, Block smallBlockIn) + { + super(materialIn, color); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockHugeMushroom.EnumType.ALL_OUTSIDE)); + this.smallBlock = smallBlockIn; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return Math.max(0, random.nextInt(10) - 7); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + switch ((BlockHugeMushroom.EnumType)state.getValue(VARIANT)) + { + case ALL_STEM: + return MapColor.CLOTH; + case ALL_INSIDE: + return MapColor.SAND; + case STEM: + return MapColor.SAND; + default: + return super.getMapColor(state, worldIn, pos); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(this.smallBlock); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this.smallBlock); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockHugeMushroom.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockHugeMushroom.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + + switch ((BlockHugeMushroom.EnumType)state.getValue(VARIANT)) + { + case STEM: + break; + case NORTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_EAST); + case NORTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH); + case NORTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_WEST); + case WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.EAST); + case EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.WEST); + case SOUTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_EAST); + case SOUTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH); + case SOUTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_WEST); + default: + return state; + } + + case COUNTERCLOCKWISE_90: + + switch ((BlockHugeMushroom.EnumType)state.getValue(VARIANT)) + { + case STEM: + break; + case NORTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_WEST); + case NORTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.WEST); + case NORTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_WEST); + case WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH); + case EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH); + case SOUTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_EAST); + case SOUTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.EAST); + case SOUTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_EAST); + default: + return state; + } + + case CLOCKWISE_90: + + switch ((BlockHugeMushroom.EnumType)state.getValue(VARIANT)) + { + case STEM: + break; + case NORTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_EAST); + case NORTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.EAST); + case NORTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_EAST); + case WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH); + case EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH); + case SOUTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_WEST); + case SOUTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.WEST); + case SOUTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_WEST); + default: + return state; + } + + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + BlockHugeMushroom.EnumType blockhugemushroom$enumtype = (BlockHugeMushroom.EnumType)state.getValue(VARIANT); + + switch (mirrorIn) + { + case LEFT_RIGHT: + + switch (blockhugemushroom$enumtype) + { + case NORTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_WEST); + case NORTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH); + case NORTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_EAST); + case WEST: + case EAST: + default: + return super.withMirror(state, mirrorIn); + case SOUTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_WEST); + case SOUTH: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH); + case SOUTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_EAST); + } + + case FRONT_BACK: + + switch (blockhugemushroom$enumtype) + { + case NORTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_EAST); + case NORTH: + case SOUTH: + default: + break; + case NORTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.NORTH_WEST); + case WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.EAST); + case EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.WEST); + case SOUTH_WEST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_EAST); + case SOUTH_EAST: + return state.withProperty(VARIANT, BlockHugeMushroom.EnumType.SOUTH_WEST); + } + } + + return super.withMirror(state, mirrorIn); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + IBlockState state = world.getBlockState(pos); + for (IProperty prop : (java.util.Set>)state.getProperties().keySet()) + { + if (prop.getName().equals("variant")) + { + world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } + return false; + } + + public static enum EnumType implements IStringSerializable + { + NORTH_WEST(1, "north_west"), + NORTH(2, "north"), + NORTH_EAST(3, "north_east"), + WEST(4, "west"), + CENTER(5, "center"), + EAST(6, "east"), + SOUTH_WEST(7, "south_west"), + SOUTH(8, "south"), + SOUTH_EAST(9, "south_east"), + STEM(10, "stem"), + ALL_INSIDE(0, "all_inside"), + ALL_OUTSIDE(14, "all_outside"), + ALL_STEM(15, "all_stem"); + + private static final BlockHugeMushroom.EnumType[] META_LOOKUP = new BlockHugeMushroom.EnumType[16]; + private final int meta; + private final String name; + + private EnumType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockHugeMushroom.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + BlockHugeMushroom.EnumType blockhugemushroom$enumtype = META_LOOKUP[meta]; + return blockhugemushroom$enumtype == null ? META_LOOKUP[0] : blockhugemushroom$enumtype; + } + + public String getName() + { + return this.name; + } + + static + { + for (BlockHugeMushroom.EnumType blockhugemushroom$enumtype : values()) + { + META_LOOKUP[blockhugemushroom$enumtype.getMetadata()] = blockhugemushroom$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockIce.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockIce.java new file mode 100644 index 0000000..d1563d5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockIce.java @@ -0,0 +1,112 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockIce extends BlockBreakable +{ + public BlockIce() + { + super(Material.ICE, false); + this.slipperiness = 0.98F; + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + player.addStat(StatList.getBlockStats(this)); + player.addExhaustion(0.005F); + + if (this.canSilkHarvest(worldIn, pos, state, player) && EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0) + { + java.util.List items = new java.util.ArrayList(); + items.add(this.getSilkTouchDrop(state)); + + net.minecraftforge.event.ForgeEventFactory.fireBlockHarvesting(items, worldIn, pos, state, 0, 1.0f, true, player); + for (ItemStack is : items) + spawnAsEntity(worldIn, pos, is); + } + else + { + if (worldIn.provider.doesWaterVaporize()) + { + worldIn.setBlockToAir(pos); + return; + } + + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); + harvesters.set(player); + this.dropBlockAsItem(worldIn, pos, state, i); + harvesters.set(null); + Material material = worldIn.getBlockState(pos.down()).getMaterial(); + + if (material.blocksMovement() || material.isLiquid()) + { + worldIn.setBlockState(pos, Blocks.FLOWING_WATER.getDefaultState()); + } + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getLightFor(EnumSkyBlock.BLOCK, pos) > 11 - this.getDefaultState().getLightOpacity()) + { + this.turnIntoWater(worldIn, pos); + } + } + + protected void turnIntoWater(World worldIn, BlockPos pos) + { + if (worldIn.provider.doesWaterVaporize()) + { + worldIn.setBlockToAir(pos); + } + else + { + this.dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0); + worldIn.setBlockState(pos, Blocks.WATER.getDefaultState()); + worldIn.neighborChanged(pos, Blocks.WATER, pos); + } + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.NORMAL; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockJukebox.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockJukebox.java new file mode 100644 index 0000000..b1b36df --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockJukebox.java @@ -0,0 +1,222 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockJukebox extends BlockContainer +{ + public static final PropertyBool HAS_RECORD = PropertyBool.create("has_record"); + + public static void registerFixesJukebox(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackData(BlockJukebox.TileEntityJukebox.class, new String[] {"RecordItem"})); + } + + protected BlockJukebox() + { + super(Material.WOOD, MapColor.DIRT); + this.setDefaultState(this.blockState.getBaseState().withProperty(HAS_RECORD, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (((Boolean)state.getValue(HAS_RECORD)).booleanValue()) + { + this.dropRecord(worldIn, pos, state); + state = state.withProperty(HAS_RECORD, Boolean.valueOf(false)); + worldIn.setBlockState(pos, state, 2); + return true; + } + else + { + return false; + } + } + + public void insertRecord(World worldIn, BlockPos pos, IBlockState state, ItemStack recordStack) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof BlockJukebox.TileEntityJukebox) + { + ((BlockJukebox.TileEntityJukebox)tileentity).setRecord(recordStack.copy()); + worldIn.setBlockState(pos, state.withProperty(HAS_RECORD, Boolean.valueOf(true)), 2); + } + } + + private void dropRecord(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof BlockJukebox.TileEntityJukebox) + { + BlockJukebox.TileEntityJukebox blockjukebox$tileentityjukebox = (BlockJukebox.TileEntityJukebox)tileentity; + ItemStack itemstack = blockjukebox$tileentityjukebox.getRecord(); + + if (!itemstack.isEmpty()) + { + worldIn.playEvent(1010, pos, 0); + worldIn.playRecord(pos, (SoundEvent)null); + blockjukebox$tileentityjukebox.setRecord(ItemStack.EMPTY); + float f = 0.7F; + double d0 = (double)(worldIn.rand.nextFloat() * 0.7F) + 0.15000000596046448D; + double d1 = (double)(worldIn.rand.nextFloat() * 0.7F) + 0.06000000238418579D + 0.6D; + double d2 = (double)(worldIn.rand.nextFloat() * 0.7F) + 0.15000000596046448D; + ItemStack itemstack1 = itemstack.copy(); + EntityItem entityitem = new EntityItem(worldIn, (double)pos.getX() + d0, (double)pos.getY() + d1, (double)pos.getZ() + d2, itemstack1); + entityitem.setDefaultPickupDelay(); + worldIn.spawnEntity(entityitem); + } + } + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + this.dropRecord(worldIn, pos, state); + super.breakBlock(worldIn, pos, state); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + if (!worldIn.isRemote) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, 0); + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new BlockJukebox.TileEntityJukebox(); + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof BlockJukebox.TileEntityJukebox) + { + ItemStack itemstack = ((BlockJukebox.TileEntityJukebox)tileentity).getRecord(); + + if (!itemstack.isEmpty()) + { + return Item.getIdFromItem(itemstack.getItem()) + 1 - Item.getIdFromItem(Items.RECORD_13); + } + } + + return 0; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(HAS_RECORD, Boolean.valueOf(meta > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Boolean)state.getValue(HAS_RECORD)).booleanValue() ? 1 : 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {HAS_RECORD}); + } + + public static class TileEntityJukebox extends TileEntity + { + private ItemStack record = ItemStack.EMPTY; + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + + if (compound.hasKey("RecordItem", 10)) + { + this.setRecord(new ItemStack(compound.getCompoundTag("RecordItem"))); + } + else if (compound.getInteger("Record") > 0) + { + this.setRecord(new ItemStack(Item.getItemById(compound.getInteger("Record")))); + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + if (!this.getRecord().isEmpty()) + { + compound.setTag("RecordItem", this.getRecord().writeToNBT(new NBTTagCompound())); + } + + return compound; + } + + public ItemStack getRecord() + { + return this.record; + } + + public void setRecord(ItemStack recordStack) + { + this.record = recordStack; + this.markDirty(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockLadder.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLadder.java new file mode 100644 index 0000000..baccff3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLadder.java @@ -0,0 +1,205 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockLadder extends Block +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + protected static final AxisAlignedBB LADDER_EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.1875D, 1.0D, 1.0D); + protected static final AxisAlignedBB LADDER_WEST_AABB = new AxisAlignedBB(0.8125D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB LADDER_SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.1875D); + protected static final AxisAlignedBB LADDER_NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.8125D, 1.0D, 1.0D, 1.0D); + + protected BlockLadder() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case NORTH: + return LADDER_NORTH_AABB; + case SOUTH: + return LADDER_SOUTH_AABB; + case WEST: + return LADDER_WEST_AABB; + case EAST: + default: + return LADDER_EAST_AABB; + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + if (this.canAttachTo(worldIn, pos.west(), side)) + { + return true; + } + else if (this.canAttachTo(worldIn, pos.east(), side)) + { + return true; + } + else if (this.canAttachTo(worldIn, pos.north(), side)) + { + return true; + } + else + { + return this.canAttachTo(worldIn, pos.south(), side); + } + } + + private boolean canAttachTo(World p_193392_1_, BlockPos p_193392_2_, EnumFacing p_193392_3_) + { + IBlockState iblockstate = p_193392_1_.getBlockState(p_193392_2_); + boolean flag = isExceptBlockForAttachWithPiston(iblockstate.getBlock()); + return !flag && iblockstate.getBlockFaceShape(p_193392_1_, p_193392_2_, p_193392_3_) == BlockFaceShape.SOLID && !iblockstate.canProvidePower(); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + if (facing.getAxis().isHorizontal() && this.canAttachTo(worldIn, pos.offset(facing.getOpposite()), facing)) + { + return this.getDefaultState().withProperty(FACING, facing); + } + else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.canAttachTo(worldIn, pos.offset(enumfacing.getOpposite()), enumfacing)) + { + return this.getDefaultState().withProperty(FACING, enumfacing); + } + } + + return this.getDefaultState(); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (!this.canAttachTo(worldIn, pos.offset(enumfacing.getOpposite()), enumfacing)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + @Override public boolean isLadder(IBlockState state, IBlockAccess world, BlockPos pos, EntityLivingBase entity) { return true; } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockLeaves.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLeaves.java new file mode 100644 index 0000000..cbfc25f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLeaves.java @@ -0,0 +1,313 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class BlockLeaves extends Block implements net.minecraftforge.common.IShearable +{ + public static final PropertyBool DECAYABLE = PropertyBool.create("decayable"); + public static final PropertyBool CHECK_DECAY = PropertyBool.create("check_decay"); + protected boolean leavesFancy; + int[] surroundings; + + public BlockLeaves() + { + super(Material.LEAVES); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setHardness(0.2F); + this.setLightOpacity(1); + this.setSoundType(SoundType.PLANT); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + int i = 1; + int j = 2; + int k = pos.getX(); + int l = pos.getY(); + int i1 = pos.getZ(); + + if (worldIn.isAreaLoaded(new BlockPos(k - 2, l - 2, i1 - 2), new BlockPos(k + 2, l + 2, i1 + 2))) + { + for (int j1 = -1; j1 <= 1; ++j1) + { + for (int k1 = -1; k1 <= 1; ++k1) + { + for (int l1 = -1; l1 <= 1; ++l1) + { + BlockPos blockpos = pos.add(j1, k1, l1); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock().isLeaves(iblockstate, worldIn, blockpos)) + { + iblockstate.getBlock().beginLeavesDecay(iblockstate, worldIn, blockpos); + } + } + } + } + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (((Boolean)state.getValue(CHECK_DECAY)).booleanValue() && ((Boolean)state.getValue(DECAYABLE)).booleanValue()) + { + int i = 4; + int j = 5; + int k = pos.getX(); + int l = pos.getY(); + int i1 = pos.getZ(); + int j1 = 32; + int k1 = 1024; + int l1 = 16; + + if (this.surroundings == null) + { + this.surroundings = new int[32768]; + } + + if (!worldIn.isAreaLoaded(pos, 1)) return; // Forge: prevent decaying leaves from updating neighbors and loading unloaded chunks + if (worldIn.isAreaLoaded(pos, 6)) // Forge: extend range from 5 to 6 to account for neighbor checks in world.markAndNotifyBlock -> world.updateObservingBlocksAt + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int i2 = -4; i2 <= 4; ++i2) + { + for (int j2 = -4; j2 <= 4; ++j2) + { + for (int k2 = -4; k2 <= 4; ++k2) + { + IBlockState iblockstate = worldIn.getBlockState(blockpos$mutableblockpos.setPos(k + i2, l + j2, i1 + k2)); + Block block = iblockstate.getBlock(); + + if (!block.canSustainLeaves(iblockstate, worldIn, blockpos$mutableblockpos.setPos(k + i2, l + j2, i1 + k2))) + { + if (block.isLeaves(iblockstate, worldIn, blockpos$mutableblockpos.setPos(k + i2, l + j2, i1 + k2))) + { + this.surroundings[(i2 + 16) * 1024 + (j2 + 16) * 32 + k2 + 16] = -2; + } + else + { + this.surroundings[(i2 + 16) * 1024 + (j2 + 16) * 32 + k2 + 16] = -1; + } + } + else + { + this.surroundings[(i2 + 16) * 1024 + (j2 + 16) * 32 + k2 + 16] = 0; + } + } + } + } + + for (int i3 = 1; i3 <= 4; ++i3) + { + for (int j3 = -4; j3 <= 4; ++j3) + { + for (int k3 = -4; k3 <= 4; ++k3) + { + for (int l3 = -4; l3 <= 4; ++l3) + { + if (this.surroundings[(j3 + 16) * 1024 + (k3 + 16) * 32 + l3 + 16] == i3 - 1) + { + if (this.surroundings[(j3 + 16 - 1) * 1024 + (k3 + 16) * 32 + l3 + 16] == -2) + { + this.surroundings[(j3 + 16 - 1) * 1024 + (k3 + 16) * 32 + l3 + 16] = i3; + } + + if (this.surroundings[(j3 + 16 + 1) * 1024 + (k3 + 16) * 32 + l3 + 16] == -2) + { + this.surroundings[(j3 + 16 + 1) * 1024 + (k3 + 16) * 32 + l3 + 16] = i3; + } + + if (this.surroundings[(j3 + 16) * 1024 + (k3 + 16 - 1) * 32 + l3 + 16] == -2) + { + this.surroundings[(j3 + 16) * 1024 + (k3 + 16 - 1) * 32 + l3 + 16] = i3; + } + + if (this.surroundings[(j3 + 16) * 1024 + (k3 + 16 + 1) * 32 + l3 + 16] == -2) + { + this.surroundings[(j3 + 16) * 1024 + (k3 + 16 + 1) * 32 + l3 + 16] = i3; + } + + if (this.surroundings[(j3 + 16) * 1024 + (k3 + 16) * 32 + (l3 + 16 - 1)] == -2) + { + this.surroundings[(j3 + 16) * 1024 + (k3 + 16) * 32 + (l3 + 16 - 1)] = i3; + } + + if (this.surroundings[(j3 + 16) * 1024 + (k3 + 16) * 32 + l3 + 16 + 1] == -2) + { + this.surroundings[(j3 + 16) * 1024 + (k3 + 16) * 32 + l3 + 16 + 1] = i3; + } + } + } + } + } + } + } + + int l2 = this.surroundings[16912]; + + if (l2 >= 0) + { + worldIn.setBlockState(pos, state.withProperty(CHECK_DECAY, Boolean.valueOf(false)), 4); + } + else + { + this.destroy(worldIn, pos); + } + } + } + } + + private void destroy(World worldIn, BlockPos pos) + { + this.dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0); + worldIn.setBlockToAir(pos); + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (worldIn.isRainingAt(pos.up()) && !worldIn.getBlockState(pos.down()).isTopSolid() && rand.nextInt(15) == 1) + { + double d0 = (double)((float)pos.getX() + rand.nextFloat()); + double d1 = (double)pos.getY() - 0.05D; + double d2 = (double)((float)pos.getZ() + rand.nextFloat()); + worldIn.spawnParticle(EnumParticleTypes.DRIP_WATER, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return random.nextInt(20) == 0 ? 1 : 0; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.SAPLING); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + protected void dropApple(World worldIn, BlockPos pos, IBlockState state, int chance) + { + } + + protected int getSaplingDropChance(IBlockState state) + { + return 20; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return !this.leavesFancy; + } + + /** + * Pass true to draw this block using fancy graphics, or false for fast graphics. + */ + @SideOnly(Side.CLIENT) + public void setGraphicsLevel(boolean fancy) + { + this.leavesFancy = fancy; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return this.leavesFancy ? BlockRenderLayer.CUTOUT_MIPPED : BlockRenderLayer.SOLID; + } + + public boolean causesSuffocation(IBlockState state) + { + return false; + } + + public abstract BlockPlanks.EnumType getWoodType(int meta); + + @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } + @Override public boolean isLeaves(IBlockState state, IBlockAccess world, BlockPos pos){ return true; } + + @Override + public void beginLeavesDecay(IBlockState state, World world, BlockPos pos) + { + if (!(Boolean)state.getValue(CHECK_DECAY)) + { + world.setBlockState(pos, state.withProperty(CHECK_DECAY, true), 4); + } + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + Random rand = world instanceof World ? ((World)world).rand : new Random(); + int chance = this.getSaplingDropChance(state); + + if (fortune > 0) + { + chance -= 2 << fortune; + if (chance < 10) chance = 10; + } + + if (rand.nextInt(chance) == 0) + { + ItemStack drop = new ItemStack(getItemDropped(state, rand, fortune), 1, damageDropped(state)); + if (!drop.isEmpty()) + drops.add(drop); + } + + chance = 200; + if (fortune > 0) + { + chance -= 10 << fortune; + if (chance < 40) chance = 40; + } + + this.captureDrops(true); + if (world instanceof World) + this.dropApple((World)world, pos, state, chance); // Dammet mojang + drops.addAll(this.captureDrops(false)); + } + + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return !this.leavesFancy && blockAccess.getBlockState(pos.offset(side)).getBlock() == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockLever.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLever.java new file mode 100644 index 0000000..c614ab0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLever.java @@ -0,0 +1,464 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockLever extends Block +{ + public static final PropertyEnum FACING = PropertyEnum.create("facing", BlockLever.EnumOrientation.class); + public static final PropertyBool POWERED = PropertyBool.create("powered"); + protected static final AxisAlignedBB LEVER_NORTH_AABB = new AxisAlignedBB(0.3125D, 0.20000000298023224D, 0.625D, 0.6875D, 0.800000011920929D, 1.0D); + protected static final AxisAlignedBB LEVER_SOUTH_AABB = new AxisAlignedBB(0.3125D, 0.20000000298023224D, 0.0D, 0.6875D, 0.800000011920929D, 0.375D); + protected static final AxisAlignedBB LEVER_WEST_AABB = new AxisAlignedBB(0.625D, 0.20000000298023224D, 0.3125D, 1.0D, 0.800000011920929D, 0.6875D); + protected static final AxisAlignedBB LEVER_EAST_AABB = new AxisAlignedBB(0.0D, 0.20000000298023224D, 0.3125D, 0.375D, 0.800000011920929D, 0.6875D); + protected static final AxisAlignedBB LEVER_UP_AABB = new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 0.6000000238418579D, 0.75D); + protected static final AxisAlignedBB LEVER_DOWN_AABB = new AxisAlignedBB(0.25D, 0.4000000059604645D, 0.25D, 0.75D, 1.0D, 0.75D); + + protected BlockLever() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, BlockLever.EnumOrientation.NORTH).withProperty(POWERED, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return canAttachTo(worldIn, pos, side); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (canAttachTo(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + protected static boolean canAttachTo(World worldIn, BlockPos p_181090_1_, EnumFacing p_181090_2_) + { + return BlockButton.canPlaceBlock(worldIn, p_181090_1_, p_181090_2_); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = this.getDefaultState().withProperty(POWERED, Boolean.valueOf(false)); + + if (canAttachTo(worldIn, pos, facing)) + { + return iblockstate.withProperty(FACING, BlockLever.EnumOrientation.forFacings(facing, placer.getHorizontalFacing())); + } + else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (enumfacing != facing && canAttachTo(worldIn, pos, enumfacing)) + { + return iblockstate.withProperty(FACING, BlockLever.EnumOrientation.forFacings(enumfacing, placer.getHorizontalFacing())); + } + } + + if (worldIn.getBlockState(pos.down()).isTopSolid()) + { + return iblockstate.withProperty(FACING, BlockLever.EnumOrientation.forFacings(EnumFacing.UP, placer.getHorizontalFacing())); + } + else + { + return iblockstate; + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.checkCanSurvive(worldIn, pos, state) && !canAttachTo(worldIn, pos, ((BlockLever.EnumOrientation)state.getValue(FACING)).getFacing())) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + + private boolean checkCanSurvive(World worldIn, BlockPos pos, IBlockState state) + { + if (this.canPlaceBlockAt(worldIn, pos)) + { + return true; + } + else + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return false; + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((BlockLever.EnumOrientation)state.getValue(FACING)) + { + case EAST: + default: + return LEVER_EAST_AABB; + case WEST: + return LEVER_WEST_AABB; + case SOUTH: + return LEVER_SOUTH_AABB; + case NORTH: + return LEVER_NORTH_AABB; + case UP_Z: + case UP_X: + return LEVER_UP_AABB; + case DOWN_X: + case DOWN_Z: + return LEVER_DOWN_AABB; + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + state = state.cycleProperty(POWERED); + worldIn.setBlockState(pos, state, 3); + float f = ((Boolean)state.getValue(POWERED)).booleanValue() ? 0.6F : 0.5F; + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_LEVER_CLICK, SoundCategory.BLOCKS, 0.3F, f); + worldIn.notifyNeighborsOfStateChange(pos, this, false); + EnumFacing enumfacing = ((BlockLever.EnumOrientation)state.getValue(FACING)).getFacing(); + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing.getOpposite()), this, false); + return true; + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + EnumFacing enumfacing = ((BlockLever.EnumOrientation)state.getValue(FACING)).getFacing(); + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing.getOpposite()), this, false); + } + + super.breakBlock(worldIn, pos, state); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return ((Boolean)blockState.getValue(POWERED)).booleanValue() ? 15 : 0; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!((Boolean)blockState.getValue(POWERED)).booleanValue()) + { + return 0; + } + else + { + return ((BlockLever.EnumOrientation)blockState.getValue(FACING)).getFacing() == side ? 15 : 0; + } + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, BlockLever.EnumOrientation.byMetadata(meta & 7)).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockLever.EnumOrientation)state.getValue(FACING)).getMetadata(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + + switch ((BlockLever.EnumOrientation)state.getValue(FACING)) + { + case EAST: + return state.withProperty(FACING, BlockLever.EnumOrientation.WEST); + case WEST: + return state.withProperty(FACING, BlockLever.EnumOrientation.EAST); + case SOUTH: + return state.withProperty(FACING, BlockLever.EnumOrientation.NORTH); + case NORTH: + return state.withProperty(FACING, BlockLever.EnumOrientation.SOUTH); + default: + return state; + } + + case COUNTERCLOCKWISE_90: + + switch ((BlockLever.EnumOrientation)state.getValue(FACING)) + { + case EAST: + return state.withProperty(FACING, BlockLever.EnumOrientation.NORTH); + case WEST: + return state.withProperty(FACING, BlockLever.EnumOrientation.SOUTH); + case SOUTH: + return state.withProperty(FACING, BlockLever.EnumOrientation.EAST); + case NORTH: + return state.withProperty(FACING, BlockLever.EnumOrientation.WEST); + case UP_Z: + return state.withProperty(FACING, BlockLever.EnumOrientation.UP_X); + case UP_X: + return state.withProperty(FACING, BlockLever.EnumOrientation.UP_Z); + case DOWN_X: + return state.withProperty(FACING, BlockLever.EnumOrientation.DOWN_Z); + case DOWN_Z: + return state.withProperty(FACING, BlockLever.EnumOrientation.DOWN_X); + } + + case CLOCKWISE_90: + + switch ((BlockLever.EnumOrientation)state.getValue(FACING)) + { + case EAST: + return state.withProperty(FACING, BlockLever.EnumOrientation.SOUTH); + case WEST: + return state.withProperty(FACING, BlockLever.EnumOrientation.NORTH); + case SOUTH: + return state.withProperty(FACING, BlockLever.EnumOrientation.WEST); + case NORTH: + return state.withProperty(FACING, BlockLever.EnumOrientation.EAST); + case UP_Z: + return state.withProperty(FACING, BlockLever.EnumOrientation.UP_X); + case UP_X: + return state.withProperty(FACING, BlockLever.EnumOrientation.UP_Z); + case DOWN_X: + return state.withProperty(FACING, BlockLever.EnumOrientation.DOWN_Z); + case DOWN_Z: + return state.withProperty(FACING, BlockLever.EnumOrientation.DOWN_X); + } + + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation(((BlockLever.EnumOrientation)state.getValue(FACING)).getFacing())); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, POWERED}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + public static enum EnumOrientation implements IStringSerializable + { + DOWN_X(0, "down_x", EnumFacing.DOWN), + EAST(1, "east", EnumFacing.EAST), + WEST(2, "west", EnumFacing.WEST), + SOUTH(3, "south", EnumFacing.SOUTH), + NORTH(4, "north", EnumFacing.NORTH), + UP_Z(5, "up_z", EnumFacing.UP), + UP_X(6, "up_x", EnumFacing.UP), + DOWN_Z(7, "down_z", EnumFacing.DOWN); + + private static final BlockLever.EnumOrientation[] META_LOOKUP = new BlockLever.EnumOrientation[values().length]; + private final int meta; + private final String name; + private final EnumFacing facing; + + private EnumOrientation(int meta, String name, EnumFacing facing) + { + this.meta = meta; + this.name = name; + this.facing = facing; + } + + public int getMetadata() + { + return this.meta; + } + + public EnumFacing getFacing() + { + return this.facing; + } + + public String toString() + { + return this.name; + } + + public static BlockLever.EnumOrientation byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public static BlockLever.EnumOrientation forFacings(EnumFacing clickedSide, EnumFacing entityFacing) + { + switch (clickedSide) + { + case DOWN: + + switch (entityFacing.getAxis()) + { + case X: + return DOWN_X; + case Z: + return DOWN_Z; + default: + throw new IllegalArgumentException("Invalid entityFacing " + entityFacing + " for facing " + clickedSide); + } + + case UP: + + switch (entityFacing.getAxis()) + { + case X: + return UP_X; + case Z: + return UP_Z; + default: + throw new IllegalArgumentException("Invalid entityFacing " + entityFacing + " for facing " + clickedSide); + } + + case NORTH: + return NORTH; + case SOUTH: + return SOUTH; + case WEST: + return WEST; + case EAST: + return EAST; + default: + throw new IllegalArgumentException("Invalid facing: " + clickedSide); + } + } + + public String getName() + { + return this.name; + } + + static + { + for (BlockLever.EnumOrientation blocklever$enumorientation : values()) + { + META_LOOKUP[blocklever$enumorientation.getMetadata()] = blocklever$enumorientation; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockLilyPad.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLilyPad.java new file mode 100644 index 0000000..b68a63a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLilyPad.java @@ -0,0 +1,80 @@ +package net.minecraft.block; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockLilyPad extends BlockBush +{ + protected static final AxisAlignedBB LILY_PAD_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.09375D, 0.9375D); + + protected BlockLilyPad() + { + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + if (!(entityIn instanceof EntityBoat)) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, LILY_PAD_AABB); + } + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + super.onEntityCollidedWithBlock(worldIn, pos, state, entityIn); + + if (entityIn instanceof EntityBoat) + { + worldIn.destroyBlock(new BlockPos(pos), true); + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return LILY_PAD_AABB; + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.getBlock() == Blocks.WATER || state.getMaterial() == Material.ICE; + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + if (pos.getY() >= 0 && pos.getY() < 256) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + Material material = iblockstate.getMaterial(); + return material == Material.WATER && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0 || material == Material.ICE; + } + else + { + return false; + } + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockLiquid.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLiquid.java new file mode 100644 index 0000000..ee05fc2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLiquid.java @@ -0,0 +1,529 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class BlockLiquid extends Block +{ + public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 15); + + protected BlockLiquid(Material materialIn) + { + super(materialIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(LEVEL, Integer.valueOf(0))); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return FULL_BLOCK_AABB; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return this.blockMaterial != Material.LAVA; + } + + /** + * Returns the percentage of the liquid block that is air, based on the given flow decay of the liquid + */ + public static float getLiquidHeightPercent(int meta) + { + if (meta >= 8) + { + meta = 0; + } + + return (float)(meta + 1) / 9.0F; + } + + protected int getDepth(IBlockState state) + { + return state.getMaterial() == this.blockMaterial ? ((Integer)state.getValue(LEVEL)).intValue() : -1; + } + + protected int getRenderedDepth(IBlockState state) + { + int i = this.getDepth(state); + return i >= 8 ? 0 : i; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) + { + return hitIfLiquid && ((Integer)state.getValue(LEVEL)).intValue() == 0; + } + + /** + * Checks if an additional {@code -6} vertical drag should be applied to the entity. See {#link + * net.minecraft.block.BlockLiquid#getFlow()} + */ + private boolean causesDownwardCurrent(IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + Material material = iblockstate.getMaterial(); + + if (material == this.blockMaterial) + { + return false; + } + else if (side == EnumFacing.UP) + { + return true; + } + else if (material == Material.ICE) + { + return false; + } + else + { + boolean flag = isExceptBlockForAttachWithPiston(block) || block instanceof BlockStairs; + return !flag && iblockstate.getBlockFaceShape(worldIn, pos, side) == BlockFaceShape.SOLID; + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (blockAccess.getBlockState(pos.offset(side)).getMaterial() == this.blockMaterial) + { + return false; + } + else + { + return side == EnumFacing.UP ? true : super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.LIQUID; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + protected Vec3d getFlow(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + double d0 = 0.0D; + double d1 = 0.0D; + double d2 = 0.0D; + int i = this.getRenderedDepth(state); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + blockpos$pooledmutableblockpos.setPos(pos).move(enumfacing); + int j = this.getRenderedDepth(worldIn.getBlockState(blockpos$pooledmutableblockpos)); + + if (j < 0) + { + if (!worldIn.getBlockState(blockpos$pooledmutableblockpos).getMaterial().blocksMovement()) + { + j = this.getRenderedDepth(worldIn.getBlockState(blockpos$pooledmutableblockpos.down())); + + if (j >= 0) + { + int k = j - (i - 8); + d0 += (double)(enumfacing.getFrontOffsetX() * k); + d1 += (double)(enumfacing.getFrontOffsetY() * k); + d2 += (double)(enumfacing.getFrontOffsetZ() * k); + } + } + } + else if (j >= 0) + { + int l = j - i; + d0 += (double)(enumfacing.getFrontOffsetX() * l); + d1 += (double)(enumfacing.getFrontOffsetY() * l); + d2 += (double)(enumfacing.getFrontOffsetZ() * l); + } + } + + Vec3d vec3d = new Vec3d(d0, d1, d2); + + if (((Integer)state.getValue(LEVEL)).intValue() >= 8) + { + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + blockpos$pooledmutableblockpos.setPos(pos).move(enumfacing1); + + if (this.causesDownwardCurrent(worldIn, blockpos$pooledmutableblockpos, enumfacing1) || this.causesDownwardCurrent(worldIn, blockpos$pooledmutableblockpos.up(), enumfacing1)) + { + vec3d = vec3d.normalize().addVector(0.0D, -6.0D, 0.0D); + break; + } + } + } + + blockpos$pooledmutableblockpos.release(); + return vec3d.normalize(); + } + + public Vec3d modifyAcceleration(World worldIn, BlockPos pos, Entity entityIn, Vec3d motion) + { + return motion.add(this.getFlow(worldIn, pos, worldIn.getBlockState(pos))); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + if (this.blockMaterial == Material.WATER) + { + return 5; + } + else if (this.blockMaterial == Material.LAVA) + { + return worldIn.provider.isNether() ? 10 : 30; + } + else + { + return 0; + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldRenderSides(IBlockAccess blockAccess, BlockPos pos) + { + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1; ++j) + { + IBlockState iblockstate = blockAccess.getBlockState(pos.add(i, 0, j)); + + if (iblockstate.getMaterial() != this.blockMaterial && !iblockstate.isFullBlock()) + { + return true; + } + } + } + + return false; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForMixing(worldIn, pos, state); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.checkForMixing(worldIn, pos, state); + } + + @SideOnly(Side.CLIENT) + public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos) + { + int i = source.getCombinedLight(pos, 0); + int j = source.getCombinedLight(pos.up(), 0); + int k = i & 255; + int l = j & 255; + int i1 = i >> 16 & 255; + int j1 = j >> 16 & 255; + return (k > l ? k : l) | (i1 > j1 ? i1 : j1) << 16; + } + + public boolean checkForMixing(World worldIn, BlockPos pos, IBlockState state) + { + if (this.blockMaterial == Material.LAVA) + { + boolean flag = false; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (enumfacing != EnumFacing.DOWN && worldIn.getBlockState(pos.offset(enumfacing)).getMaterial() == Material.WATER) + { + flag = true; + break; + } + } + + if (flag) + { + Integer integer = (Integer)state.getValue(LEVEL); + + if (integer.intValue() == 0) + { + worldIn.setBlockState(pos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, pos, pos, Blocks.OBSIDIAN.getDefaultState())); + this.triggerMixEffects(worldIn, pos); + return true; + } + + if (integer.intValue() <= 4) + { + worldIn.setBlockState(pos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, pos, pos, Blocks.COBBLESTONE.getDefaultState())); + this.triggerMixEffects(worldIn, pos); + return true; + } + } + } + + return false; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return this.blockMaterial == Material.WATER ? BlockRenderLayer.TRANSLUCENT : BlockRenderLayer.SOLID; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + double d0 = (double)pos.getX(); + double d1 = (double)pos.getY(); + double d2 = (double)pos.getZ(); + + if (this.blockMaterial == Material.WATER) + { + int i = ((Integer)stateIn.getValue(LEVEL)).intValue(); + + if (i > 0 && i < 8) + { + if (rand.nextInt(64) == 0) + { + worldIn.playSound(d0 + 0.5D, d1 + 0.5D, d2 + 0.5D, SoundEvents.BLOCK_WATER_AMBIENT, SoundCategory.BLOCKS, rand.nextFloat() * 0.25F + 0.75F, rand.nextFloat() + 0.5F, false); + } + } + else if (rand.nextInt(10) == 0) + { + worldIn.spawnParticle(EnumParticleTypes.SUSPENDED, d0 + (double)rand.nextFloat(), d1 + (double)rand.nextFloat(), d2 + (double)rand.nextFloat(), 0.0D, 0.0D, 0.0D); + } + } + + if (this.blockMaterial == Material.LAVA && worldIn.getBlockState(pos.up()).getMaterial() == Material.AIR && !worldIn.getBlockState(pos.up()).isOpaqueCube()) + { + if (rand.nextInt(100) == 0) + { + double d8 = d0 + (double)rand.nextFloat(); + double d4 = d1 + stateIn.getBoundingBox(worldIn, pos).maxY; + double d6 = d2 + (double)rand.nextFloat(); + worldIn.spawnParticle(EnumParticleTypes.LAVA, d8, d4, d6, 0.0D, 0.0D, 0.0D); + worldIn.playSound(d8, d4, d6, SoundEvents.BLOCK_LAVA_POP, SoundCategory.BLOCKS, 0.2F + rand.nextFloat() * 0.2F, 0.9F + rand.nextFloat() * 0.15F, false); + } + + if (rand.nextInt(200) == 0) + { + worldIn.playSound(d0, d1, d2, SoundEvents.BLOCK_LAVA_AMBIENT, SoundCategory.BLOCKS, 0.2F + rand.nextFloat() * 0.2F, 0.9F + rand.nextFloat() * 0.15F, false); + } + } + + if (rand.nextInt(10) == 0 && worldIn.getBlockState(pos.down()).isTopSolid()) + { + Material material = worldIn.getBlockState(pos.down(2)).getMaterial(); + + if (!material.blocksMovement() && !material.isLiquid()) + { + double d3 = d0 + (double)rand.nextFloat(); + double d5 = d1 - 1.05D; + double d7 = d2 + (double)rand.nextFloat(); + + if (this.blockMaterial == Material.WATER) + { + worldIn.spawnParticle(EnumParticleTypes.DRIP_WATER, d3, d5, d7, 0.0D, 0.0D, 0.0D); + } + else + { + worldIn.spawnParticle(EnumParticleTypes.DRIP_LAVA, d3, d5, d7, 0.0D, 0.0D, 0.0D); + } + } + } + } + + @SideOnly(Side.CLIENT) + public static float getSlopeAngle(IBlockAccess worldIn, BlockPos pos, Material materialIn, IBlockState state) + { + Vec3d vec3d = getFlowingBlock(materialIn).getFlow(worldIn, pos, state); + return vec3d.x == 0.0D && vec3d.z == 0.0D ? -1000.0F : (float)MathHelper.atan2(vec3d.z, vec3d.x) - ((float)Math.PI / 2F); + } + + protected void triggerMixEffects(World worldIn, BlockPos pos) + { + double d0 = (double)pos.getX(); + double d1 = (double)pos.getY(); + double d2 = (double)pos.getZ(); + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_LAVA_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + for (int i = 0; i < 8; ++i) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, d0 + Math.random(), d1 + 1.2D, d2 + Math.random(), 0.0D, 0.0D, 0.0D); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(LEVEL, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(LEVEL)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {LEVEL}); + } + + public static BlockDynamicLiquid getFlowingBlock(Material materialIn) + { + if (materialIn == Material.WATER) + { + return Blocks.FLOWING_WATER; + } + else if (materialIn == Material.LAVA) + { + return Blocks.FLOWING_LAVA; + } + else + { + throw new IllegalArgumentException("Invalid material"); + } + } + + public static BlockStaticLiquid getStaticBlock(Material materialIn) + { + if (materialIn == Material.WATER) + { + return Blocks.WATER; + } + else if (materialIn == Material.LAVA) + { + return Blocks.LAVA; + } + else + { + throw new IllegalArgumentException("Invalid material"); + } + } + + public static float getBlockLiquidHeight(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + int i = ((Integer)state.getValue(LEVEL)).intValue(); + return (i & 7) == 0 && worldIn.getBlockState(pos.up()).getMaterial() == Material.WATER ? 1.0F : 1.0F - getLiquidHeightPercent(i); + } + + public static float getLiquidHeight(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return (float)pos.getY() + getBlockLiquidHeight(state, worldIn, pos); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + @Override + @SideOnly (Side.CLIENT) + public Vec3d getFogColor(World world, BlockPos pos, IBlockState state, Entity entity, Vec3d originalColor, float partialTicks) + { + Vec3d viewport = net.minecraft.client.renderer.ActiveRenderInfo.projectViewFromEntity(entity, partialTicks); + + if (state.getMaterial().isLiquid()) + { + float height = 0.0F; + if (state.getBlock() instanceof BlockLiquid) + { + height = getLiquidHeightPercent(state.getValue(LEVEL)) - 0.11111111F; + } + float f1 = (float) (pos.getY() + 1) - height; + if (viewport.y > (double)f1) + { + BlockPos upPos = pos.up(); + IBlockState upState = world.getBlockState(upPos); + return upState.getBlock().getFogColor(world, upPos, upState, entity, originalColor, partialTicks); + } + } + + return super.getFogColor(world, pos, state, entity, originalColor, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockLog.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLog.java new file mode 100644 index 0000000..e9f2dbb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockLog.java @@ -0,0 +1,125 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class BlockLog extends BlockRotatedPillar +{ + public static final PropertyEnum LOG_AXIS = PropertyEnum.create("axis", BlockLog.EnumAxis.class); + + public BlockLog() + { + super(Material.WOOD); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + this.setHardness(2.0F); + this.setSoundType(SoundType.WOOD); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + int i = 4; + int j = 5; + + if (worldIn.isAreaLoaded(pos.add(-5, -5, -5), pos.add(5, 5, 5))) + { + for (BlockPos blockpos : BlockPos.getAllInBox(pos.add(-4, -4, -4), pos.add(4, 4, 4))) + { + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock().isLeaves(iblockstate, worldIn, blockpos)) + { + iblockstate.getBlock().beginLeavesDecay(iblockstate, worldIn, blockpos); + } + } + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getStateFromMeta(meta).withProperty(LOG_AXIS, BlockLog.EnumAxis.fromFacingAxis(facing.getAxis())); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case COUNTERCLOCKWISE_90: + case CLOCKWISE_90: + + switch ((BlockLog.EnumAxis)state.getValue(LOG_AXIS)) + { + case X: + return state.withProperty(LOG_AXIS, BlockLog.EnumAxis.Z); + case Z: + return state.withProperty(LOG_AXIS, BlockLog.EnumAxis.X); + default: + return state; + } + + default: + return state; + } + } + + @Override public boolean canSustainLeaves(IBlockState state, net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } + @Override public boolean isWood(net.minecraft.world.IBlockAccess world, BlockPos pos){ return true; } + + public static enum EnumAxis implements IStringSerializable + { + X("x"), + Y("y"), + Z("z"), + NONE("none"); + + private final String name; + + private EnumAxis(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public static BlockLog.EnumAxis fromFacingAxis(EnumFacing.Axis axis) + { + switch (axis) + { + case X: + return X; + case Y: + return Y; + case Z: + return Z; + default: + return NONE; + } + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockMagma.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMagma.java new file mode 100644 index 0000000..590376f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMagma.java @@ -0,0 +1,82 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMagma extends Block +{ + public BlockMagma() + { + super(Material.ROCK); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + this.setLightLevel(0.2F); + this.setTickRandomly(true); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.NETHERRACK; + } + + /** + * Called when the given entity walks on this Block + */ + public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) + { + if (!entityIn.isImmuneToFire() && entityIn instanceof EntityLivingBase && !EnchantmentHelper.hasFrostWalkerEnchantment((EntityLivingBase)entityIn)) + { + entityIn.attackEntityFrom(DamageSource.HOT_FLOOR, 1.0F); + } + + super.onEntityWalk(worldIn, pos, entityIn); + } + + @SideOnly(Side.CLIENT) + public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos) + { + return 15728880; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + BlockPos blockpos = pos.up(); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() == Blocks.WATER || iblockstate.getBlock() == Blocks.FLOWING_WATER) + { + worldIn.setBlockToAir(blockpos); + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + if (worldIn instanceof WorldServer) + { + ((WorldServer)worldIn).spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.25D, (double)blockpos.getZ() + 0.5D, 8, 0.5D, 0.25D, 0.5D, 0.0D); + } + } + } + + public boolean canEntitySpawn(IBlockState state, Entity entityIn) + { + return entityIn.isImmuneToFire(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockMelon.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMelon.java new file mode 100644 index 0000000..0487132 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMelon.java @@ -0,0 +1,42 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; + +public class BlockMelon extends Block +{ + protected BlockMelon() + { + super(Material.GOURD, MapColor.LIME); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.MELON; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 3 + random.nextInt(5); + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + return Math.min(9, this.quantityDropped(random) + random.nextInt(1 + fortune)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockMobSpawner.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMobSpawner.java new file mode 100644 index 0000000..c9b34a9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMobSpawner.java @@ -0,0 +1,90 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMobSpawner extends BlockContainer +{ + protected BlockMobSpawner() + { + super(Material.ROCK); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityMobSpawner(); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + @Override + public int getExpDrop(IBlockState state, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + return 15 + RANDOM.nextInt(15) + RANDOM.nextInt(15); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return ItemStack.EMPTY; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockMushroom.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMushroom.java new file mode 100644 index 0000000..10a78b1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMushroom.java @@ -0,0 +1,149 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenBigMushroom; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class BlockMushroom extends BlockBush implements IGrowable +{ + protected static final AxisAlignedBB MUSHROOM_AABB = new AxisAlignedBB(0.30000001192092896D, 0.0D, 0.30000001192092896D, 0.699999988079071D, 0.4000000059604645D, 0.699999988079071D); + + protected BlockMushroom() + { + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return MUSHROOM_AABB; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (rand.nextInt(25) == 0) + { + int i = 5; + int j = 4; + + for (BlockPos blockpos : BlockPos.getAllInBoxMutable(pos.add(-4, -1, -4), pos.add(4, 1, 4))) + { + if (worldIn.getBlockState(blockpos).getBlock() == this) + { + --i; + + if (i <= 0) + { + return; + } + } + } + + BlockPos blockpos1 = pos.add(rand.nextInt(3) - 1, rand.nextInt(2) - rand.nextInt(2), rand.nextInt(3) - 1); + + for (int k = 0; k < 4; ++k) + { + if (worldIn.isAirBlock(blockpos1) && this.canBlockStay(worldIn, blockpos1, this.getDefaultState())) + { + pos = blockpos1; + } + + blockpos1 = pos.add(rand.nextInt(3) - 1, rand.nextInt(2) - rand.nextInt(2), rand.nextInt(3) - 1); + } + + if (worldIn.isAirBlock(blockpos1) && this.canBlockStay(worldIn, blockpos1, this.getDefaultState())) + { + worldIn.setBlockState(blockpos1, this.getDefaultState(), 2); + } + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return super.canPlaceBlockAt(worldIn, pos) && this.canBlockStay(worldIn, pos, this.getDefaultState()); + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.isFullBlock(); + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + if (pos.getY() >= 0 && pos.getY() < 256) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + + if (iblockstate.getBlock() == Blocks.MYCELIUM) + { + return true; + } + else if (iblockstate.getBlock() == Blocks.DIRT && iblockstate.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.PODZOL) + { + return true; + } + else + { + return worldIn.getLight(pos) < 13 && iblockstate.getBlock().canSustainPlant(iblockstate, worldIn, pos.down(), net.minecraft.util.EnumFacing.UP, this); + } + } + else + { + return false; + } + } + + public boolean generateBigMushroom(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + worldIn.setBlockToAir(pos); + WorldGenerator worldgenerator = null; + + if (this == Blocks.BROWN_MUSHROOM) + { + worldgenerator = new WorldGenBigMushroom(Blocks.BROWN_MUSHROOM_BLOCK); + } + else if (this == Blocks.RED_MUSHROOM) + { + worldgenerator = new WorldGenBigMushroom(Blocks.RED_MUSHROOM_BLOCK); + } + + if (worldgenerator != null && worldgenerator.generate(worldIn, rand, pos)) + { + return true; + } + else + { + worldIn.setBlockState(pos, state, 3); + return false; + } + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return true; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return (double)rand.nextFloat() < 0.4D; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + this.generateBigMushroom(worldIn, pos, state, rand); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockMycelium.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMycelium.java new file mode 100644 index 0000000..51d63fd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockMycelium.java @@ -0,0 +1,102 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockMycelium extends Block +{ + public static final PropertyBool SNOWY = PropertyBool.create("snowy"); + + protected BlockMycelium() + { + super(Material.GRASS, MapColor.PURPLE); + this.setDefaultState(this.blockState.getBaseState().withProperty(SNOWY, Boolean.valueOf(false))); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos.up()).getBlock(); + return state.withProperty(SNOWY, Boolean.valueOf(block == Blocks.SNOW || block == Blocks.SNOW_LAYER)); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (!worldIn.isAreaLoaded(pos, 2)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light and spreading + if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getLightOpacity(worldIn, pos.up()) > 2) + { + worldIn.setBlockState(pos, Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT)); + } + else + { + if (worldIn.getLightFromNeighbors(pos.up()) >= 9) + { + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos = pos.add(rand.nextInt(3) - 1, rand.nextInt(5) - 3, rand.nextInt(3) - 1); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + IBlockState iblockstate1 = worldIn.getBlockState(blockpos.up()); + + if (iblockstate.getBlock() == Blocks.DIRT && iblockstate.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos.up()) >= 4 && iblockstate1.getLightOpacity(worldIn, blockpos.up()) <= 2) + { + worldIn.setBlockState(blockpos, this.getDefaultState()); + } + } + } + } + } + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + super.randomDisplayTick(stateIn, worldIn, pos, rand); + + if (rand.nextInt(10) == 0) + { + worldIn.spawnParticle(EnumParticleTypes.TOWN_AURA, (double)((float)pos.getX() + rand.nextFloat()), (double)((float)pos.getY() + 1.1F), (double)((float)pos.getZ() + rand.nextFloat()), 0.0D, 0.0D, 0.0D); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Blocks.DIRT.getItemDropped(Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT), rand, fortune); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {SNOWY}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherBrick.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherBrick.java new file mode 100644 index 0000000..d9aca6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherBrick.java @@ -0,0 +1,25 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockNetherBrick extends Block +{ + public BlockNetherBrick() + { + super(Material.ROCK); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.NETHERRACK; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherWart.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherWart.java new file mode 100644 index 0000000..8e9699f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherWart.java @@ -0,0 +1,151 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockNetherWart extends BlockBush +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 3); + private static final AxisAlignedBB[] NETHER_WART_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.6875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.875D, 1.0D)}; + + protected BlockNetherWart() + { + super(Material.PLANTS, MapColor.RED); + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0))); + this.setTickRandomly(true); + this.setCreativeTab((CreativeTabs)null); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return NETHER_WART_AABB[((Integer)state.getValue(AGE)).intValue()]; + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.getBlock() == Blocks.SOUL_SAND; + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + return super.canBlockStay(worldIn, pos, state); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + if (i < 3 && net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, pos, state, rand.nextInt(10) == 0)) + { + IBlockState newState = state.withProperty(AGE, Integer.valueOf(i + 1)); + worldIn.setBlockState(pos, newState, 2); + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, newState); + } + + super.updateTick(worldIn, pos, state, rand); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + @SuppressWarnings("unused") + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + if (false && !worldIn.isRemote) + { + int i = 1; + + if (((Integer)state.getValue(AGE)).intValue() >= 3) + { + i = 2 + worldIn.rand.nextInt(3); + + if (fortune > 0) + { + i += worldIn.rand.nextInt(fortune + 1); + } + } + + for (int j = 0; j < i; ++j) + { + spawnAsEntity(worldIn, pos, new ItemStack(Items.NETHER_WART)); + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.NETHER_WART); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + Random rand = world instanceof World ? ((World)world).rand : new Random(); + int count = 1; + + if (((Integer)state.getValue(AGE)) >= 3) + { + count = 2 + rand.nextInt(3) + (fortune > 0 ? rand.nextInt(fortune + 1) : 0); + } + + for (int i = 0; i < count; i++) + { + drops.add(new ItemStack(Items.NETHER_WART)); + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherrack.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherrack.java new file mode 100644 index 0000000..9e1d1cf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNetherrack.java @@ -0,0 +1,25 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockNetherrack extends Block +{ + public BlockNetherrack() + { + super(Material.ROCK); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.NETHERRACK; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockNewLeaf.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNewLeaf.java new file mode 100644 index 0000000..9ef432e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNewLeaf.java @@ -0,0 +1,132 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockNewLeaf extends BlockLeaves +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() + { + public boolean apply(@Nullable BlockPlanks.EnumType p_apply_1_) + { + return p_apply_1_.getMetadata() >= 4; + } + }); + + public BlockNewLeaf() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.ACACIA).withProperty(CHECK_DECAY, Boolean.valueOf(true)).withProperty(DECAYABLE, Boolean.valueOf(true))); + } + + protected void dropApple(World worldIn, BlockPos pos, IBlockState state, int chance) + { + if (state.getValue(VARIANT) == BlockPlanks.EnumType.DARK_OAK && worldIn.rand.nextInt(chance) == 0) + { + spawnAsEntity(worldIn, pos, new ItemStack(Items.APPLE)); + } + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this, 1, state.getBlock().getMetaFromState(state) & 3); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, 0)); + items.add(new ItemStack(this, 1, 1)); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, this.getWoodType(meta)).withProperty(DECAYABLE, Boolean.valueOf((meta & 4) == 0)).withProperty(CHECK_DECAY, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4; + + if (!((Boolean)state.getValue(DECAYABLE)).booleanValue()) + { + i |= 4; + } + + if (((Boolean)state.getValue(CHECK_DECAY)).booleanValue()) + { + i |= 8; + } + + return i; + } + + public BlockPlanks.EnumType getWoodType(int meta) + { + return BlockPlanks.EnumType.byMetadata((meta & 3) + 4); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT, CHECK_DECAY, DECAYABLE}); + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (!worldIn.isRemote && stack.getItem() == Items.SHEARS) + { + player.addStat(StatList.getBlockStats(this)); + spawnAsEntity(worldIn, pos, new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4)); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + @Override + public NonNullList onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + return NonNullList.withSize(1, new ItemStack(this, 1, world.getBlockState(pos).getValue(VARIANT).getMetadata() - 4)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockNewLog.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNewLog.java new file mode 100644 index 0000000..5beada1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNewLog.java @@ -0,0 +1,136 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockNewLog extends BlockLog +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() + { + public boolean apply(@Nullable BlockPlanks.EnumType p_apply_1_) + { + return p_apply_1_.getMetadata() >= 4; + } + }); + + public BlockNewLog() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.ACACIA).withProperty(LOG_AXIS, BlockLog.EnumAxis.Y)); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + BlockPlanks.EnumType blockplanks$enumtype = (BlockPlanks.EnumType)state.getValue(VARIANT); + + switch ((BlockLog.EnumAxis)state.getValue(LOG_AXIS)) + { + case X: + case Z: + case NONE: + default: + + switch (blockplanks$enumtype) + { + case ACACIA: + default: + return MapColor.STONE; + case DARK_OAK: + return BlockPlanks.EnumType.DARK_OAK.getMapColor(); + } + + case Y: + return blockplanks$enumtype.getMapColor(); + } + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.ACACIA.getMetadata() - 4)); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.DARK_OAK.getMetadata() - 4)); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata((meta & 3) + 4)); + + switch (meta & 12) + { + case 0: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.Y); + break; + case 4: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.X); + break; + case 8: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.Z); + break; + default: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.NONE); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + @SuppressWarnings("incomplete-switch") + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4; + + switch ((BlockLog.EnumAxis)state.getValue(LOG_AXIS)) + { + case X: + i |= 4; + break; + case Z: + i |= 8; + break; + case NONE: + i |= 12; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT, LOG_AXIS}); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata() - 4; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockNote.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNote.java new file mode 100644 index 0000000..698c955 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockNote.java @@ -0,0 +1,142 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityNote; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockNote extends BlockContainer +{ + private static final List INSTRUMENTS = Lists.newArrayList(SoundEvents.BLOCK_NOTE_HARP, SoundEvents.BLOCK_NOTE_BASEDRUM, SoundEvents.BLOCK_NOTE_SNARE, SoundEvents.BLOCK_NOTE_HAT, SoundEvents.BLOCK_NOTE_BASS, SoundEvents.BLOCK_NOTE_FLUTE, SoundEvents.BLOCK_NOTE_BELL, SoundEvents.BLOCK_NOTE_GUITAR, SoundEvents.BLOCK_NOTE_CHIME, SoundEvents.BLOCK_NOTE_XYLOPHONE); + + public BlockNote() + { + super(Material.WOOD); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + boolean flag = worldIn.isBlockPowered(pos); + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityNote) + { + TileEntityNote tileentitynote = (TileEntityNote)tileentity; + + if (tileentitynote.previousRedstoneState != flag) + { + if (flag) + { + tileentitynote.triggerNote(worldIn, pos); + } + + tileentitynote.previousRedstoneState = flag; + } + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityNote) + { + TileEntityNote tileentitynote = (TileEntityNote)tileentity; + int old = tileentitynote.note; + tileentitynote.changePitch(); + if (old == tileentitynote.note) return false; + tileentitynote.triggerNote(worldIn, pos); + playerIn.addStat(StatList.NOTEBLOCK_TUNED); + } + + return true; + } + } + + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + if (!worldIn.isRemote) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityNote) + { + ((TileEntityNote)tileentity).triggerNote(worldIn, pos); + playerIn.addStat(StatList.NOTEBLOCK_PLAYED); + } + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityNote(); + } + + private SoundEvent getInstrument(int eventId) + { + if (eventId < 0 || eventId >= INSTRUMENTS.size()) + { + eventId = 0; + } + + return INSTRUMENTS.get(eventId); + } + + /** + * Called on server when World#addBlockEvent is called. If server returns true, then also called on the client. On + * the Server, this may perform additional changes to the world, like pistons replacing the block with an extended + * base. On the client, the update may involve replacing tile entities or effects such as sounds or particles + */ + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) + { + net.minecraftforge.event.world.NoteBlockEvent.Play e = new net.minecraftforge.event.world.NoteBlockEvent.Play(worldIn, pos, state, param, id); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(e)) return false; + id = e.getInstrument().ordinal(); + param = e.getVanillaNoteId(); + float f = (float)Math.pow(2.0D, (double)(param - 12) / 12.0D); + worldIn.playSound((EntityPlayer)null, pos, this.getInstrument(id), SoundCategory.RECORDS, 3.0F, f); + worldIn.spawnParticle(EnumParticleTypes.NOTE, (double)pos.getX() + 0.5D, (double)pos.getY() + 1.2D, (double)pos.getZ() + 0.5D, (double)param / 24.0D, 0.0D, 0.0D); + return true; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockObserver.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockObserver.java new file mode 100644 index 0000000..ef3087a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockObserver.java @@ -0,0 +1,188 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockObserver extends BlockDirectional +{ + public static final PropertyBool POWERED = PropertyBool.create("powered"); + + public BlockObserver() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.SOUTH).withProperty(POWERED, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, POWERED}); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false)), 2); + } + else + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 2); + worldIn.scheduleUpdate(pos, this, 2); + } + + this.updateNeighborsInFront(worldIn, pos, state); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + } + + public void observedNeighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote && pos.offset((EnumFacing)state.getValue(FACING)).equals(fromPos)) + { + this.startSignal(state, worldIn, pos); + } + } + + private void startSignal(IBlockState p_190960_1_, World p_190960_2_, BlockPos pos) + { + if (!((Boolean)p_190960_1_.getValue(POWERED)).booleanValue()) + { + if (!p_190960_2_.isUpdateScheduled(pos, this)) + { + p_190960_2_.scheduleUpdate(pos, this, 2); + } + } + } + + protected void updateNeighborsInFront(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockPos blockpos = pos.offset(enumfacing.getOpposite()); + worldIn.neighborChanged(blockpos, this, pos); + worldIn.notifyNeighborsOfStateExcept(blockpos, this, enumfacing); + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return blockState.getWeakPower(blockAccess, pos, side); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return ((Boolean)blockState.getValue(POWERED)).booleanValue() && blockState.getValue(FACING) == side ? 15 : 0; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + this.updateTick(worldIn, pos, state, worldIn.rand); + } + + this.startSignal(state, worldIn, pos); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (((Boolean)state.getValue(POWERED)).booleanValue() && worldIn.isUpdateScheduled(pos, this)) + { + this.updateNeighborsInFront(worldIn, pos, state.withProperty(POWERED, Boolean.valueOf(false))); + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer).getOpposite()); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getFront(meta & 7)); + } + + /* ======================================== FORGE START =====================================*/ + @Override + public void observedNeighborChange(IBlockState observerState, World world, BlockPos observerPos, Block changedBlock, BlockPos changedBlockPos) + { + observedNeighborChanged(observerState, world, observerPos, changedBlock, changedBlockPos); + } + /* ========================================= FORGE END ======================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockObsidian.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockObsidian.java new file mode 100644 index 0000000..a9d14e3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockObsidian.java @@ -0,0 +1,36 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockObsidian extends Block +{ + public BlockObsidian() + { + super(Material.ROCK); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.OBSIDIAN); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.BLACK; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockOldLeaf.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockOldLeaf.java new file mode 100644 index 0000000..a89206e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockOldLeaf.java @@ -0,0 +1,133 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockOldLeaf extends BlockLeaves +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() + { + public boolean apply(@Nullable BlockPlanks.EnumType p_apply_1_) + { + return p_apply_1_.getMetadata() < 4; + } + }); + + public BlockOldLeaf() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.OAK).withProperty(CHECK_DECAY, Boolean.valueOf(true)).withProperty(DECAYABLE, Boolean.valueOf(true))); + } + + protected void dropApple(World worldIn, BlockPos pos, IBlockState state, int chance) + { + if (state.getValue(VARIANT) == BlockPlanks.EnumType.OAK && worldIn.rand.nextInt(chance) == 0) + { + spawnAsEntity(worldIn, pos, new ItemStack(Items.APPLE)); + } + } + + protected int getSaplingDropChance(IBlockState state) + { + return state.getValue(VARIANT) == BlockPlanks.EnumType.JUNGLE ? 40 : super.getSaplingDropChance(state); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.OAK.getMetadata())); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.SPRUCE.getMetadata())); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.BIRCH.getMetadata())); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.JUNGLE.getMetadata())); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata()); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, this.getWoodType(meta)).withProperty(DECAYABLE, Boolean.valueOf((meta & 4) == 0)).withProperty(CHECK_DECAY, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + + if (!((Boolean)state.getValue(DECAYABLE)).booleanValue()) + { + i |= 4; + } + + if (((Boolean)state.getValue(CHECK_DECAY)).booleanValue()) + { + i |= 8; + } + + return i; + } + + public BlockPlanks.EnumType getWoodType(int meta) + { + return BlockPlanks.EnumType.byMetadata((meta & 3) % 4); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT, CHECK_DECAY, DECAYABLE}); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (!worldIn.isRemote && stack.getItem() == Items.SHEARS) + { + player.addStat(StatList.getBlockStats(this)); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + @Override + public NonNullList onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + return NonNullList.withSize(1, new ItemStack(this, 1, world.getBlockState(pos).getValue(VARIANT).getMetadata())); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockOldLog.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockOldLog.java new file mode 100644 index 0000000..d65eebd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockOldLog.java @@ -0,0 +1,142 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockOldLog extends BlockLog +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class, new Predicate() + { + public boolean apply(@Nullable BlockPlanks.EnumType p_apply_1_) + { + return p_apply_1_.getMetadata() < 4; + } + }); + + public BlockOldLog() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.OAK).withProperty(LOG_AXIS, BlockLog.EnumAxis.Y)); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + BlockPlanks.EnumType blockplanks$enumtype = (BlockPlanks.EnumType)state.getValue(VARIANT); + + switch ((BlockLog.EnumAxis)state.getValue(LOG_AXIS)) + { + case X: + case Z: + case NONE: + default: + + switch (blockplanks$enumtype) + { + case OAK: + default: + return BlockPlanks.EnumType.SPRUCE.getMapColor(); + case SPRUCE: + return BlockPlanks.EnumType.DARK_OAK.getMapColor(); + case BIRCH: + return MapColor.QUARTZ; + case JUNGLE: + return BlockPlanks.EnumType.SPRUCE.getMapColor(); + } + + case Y: + return blockplanks$enumtype.getMapColor(); + } + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.OAK.getMetadata())); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.SPRUCE.getMetadata())); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.BIRCH.getMetadata())); + items.add(new ItemStack(this, 1, BlockPlanks.EnumType.JUNGLE.getMetadata())); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata((meta & 3) % 4)); + + switch (meta & 12) + { + case 0: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.Y); + break; + case 4: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.X); + break; + case 8: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.Z); + break; + default: + iblockstate = iblockstate.withProperty(LOG_AXIS, BlockLog.EnumAxis.NONE); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + @SuppressWarnings("incomplete-switch") + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + + switch ((BlockLog.EnumAxis)state.getValue(LOG_AXIS)) + { + case X: + i |= 4; + break; + case Z: + i |= 8; + break; + case NONE: + i |= 12; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT, LOG_AXIS}); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(this), 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata()); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockOre.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockOre.java new file mode 100644 index 0000000..cc3c16c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockOre.java @@ -0,0 +1,141 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class BlockOre extends Block +{ + public BlockOre() + { + this(Material.ROCK.getMaterialMapColor()); + } + + public BlockOre(MapColor color) + { + super(Material.ROCK, color); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + if (this == Blocks.COAL_ORE) + { + return Items.COAL; + } + else if (this == Blocks.DIAMOND_ORE) + { + return Items.DIAMOND; + } + else if (this == Blocks.LAPIS_ORE) + { + return Items.DYE; + } + else if (this == Blocks.EMERALD_ORE) + { + return Items.EMERALD; + } + else + { + return this == Blocks.QUARTZ_ORE ? Items.QUARTZ : Item.getItemFromBlock(this); + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return this == Blocks.LAPIS_ORE ? 4 + random.nextInt(5) : 1; + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + if (fortune > 0 && Item.getItemFromBlock(this) != this.getItemDropped((IBlockState)this.getBlockState().getValidStates().iterator().next(), random, fortune)) + { + int i = random.nextInt(fortune + 2) - 1; + + if (i < 0) + { + i = 0; + } + + return this.quantityDropped(random) * (i + 1); + } + else + { + return this.quantityDropped(random); + } + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + @Override + public int getExpDrop(IBlockState state, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + Random rand = world instanceof World ? ((World)world).rand : new Random(); + if (this.getItemDropped(state, rand, fortune) != Item.getItemFromBlock(this)) + { + int i = 0; + + if (this == Blocks.COAL_ORE) + { + i = MathHelper.getInt(rand, 0, 2); + } + else if (this == Blocks.DIAMOND_ORE) + { + i = MathHelper.getInt(rand, 3, 7); + } + else if (this == Blocks.EMERALD_ORE) + { + i = MathHelper.getInt(rand, 3, 7); + } + else if (this == Blocks.LAPIS_ORE) + { + i = MathHelper.getInt(rand, 2, 5); + } + else if (this == Blocks.QUARTZ_ORE) + { + i = MathHelper.getInt(rand, 2, 5); + } + + return i; + } + return 0; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return this == Blocks.LAPIS_ORE ? EnumDyeColor.BLUE.getDyeDamage() : 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPackedIce.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPackedIce.java new file mode 100644 index 0000000..32c8838 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPackedIce.java @@ -0,0 +1,23 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +public class BlockPackedIce extends Block +{ + public BlockPackedIce() + { + super(Material.PACKED_ICE); + this.slipperiness = 0.98F; + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPane.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPane.java new file mode 100644 index 0000000..f5d573a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPane.java @@ -0,0 +1,255 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockPane extends Block +{ + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 0.5625D, 1.0D, 0.5625D), new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 0.5625D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.4375D, 0.5625D, 1.0D, 0.5625D), new AxisAlignedBB(0.0D, 0.0D, 0.4375D, 0.5625D, 1.0D, 1.0D), new AxisAlignedBB(0.4375D, 0.0D, 0.0D, 0.5625D, 1.0D, 0.5625D), new AxisAlignedBB(0.4375D, 0.0D, 0.0D, 0.5625D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.5625D, 1.0D, 0.5625D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.5625D, 1.0D, 1.0D), new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 1.0D, 1.0D, 0.5625D), new AxisAlignedBB(0.4375D, 0.0D, 0.4375D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.4375D, 1.0D, 1.0D, 0.5625D), new AxisAlignedBB(0.0D, 0.0D, 0.4375D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.4375D, 0.0D, 0.0D, 1.0D, 1.0D, 0.5625D), new AxisAlignedBB(0.4375D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.5625D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + private final boolean canDrop; + + protected BlockPane(Material materialIn, boolean canDrop) + { + super(materialIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); + this.canDrop = canDrop; + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + if (!isActualState) + { + state = this.getActualState(state, worldIn, pos); + } + + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_BY_INDEX[0]); + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_BY_INDEX[getBoundingBoxIndex(EnumFacing.NORTH)]); + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_BY_INDEX[getBoundingBoxIndex(EnumFacing.SOUTH)]); + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_BY_INDEX[getBoundingBoxIndex(EnumFacing.EAST)]); + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_BY_INDEX[getBoundingBoxIndex(EnumFacing.WEST)]); + } + } + + private static int getBoundingBoxIndex(EnumFacing p_185729_0_) + { + return 1 << p_185729_0_.getHorizontalIndex(); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return AABB_BY_INDEX[getBoundingBoxIndex(state)]; + } + + private static int getBoundingBoxIndex(IBlockState state) + { + int i = 0; + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + i |= getBoundingBoxIndex(EnumFacing.NORTH); + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + i |= getBoundingBoxIndex(EnumFacing.EAST); + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + i |= getBoundingBoxIndex(EnumFacing.SOUTH); + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + i |= getBoundingBoxIndex(EnumFacing.WEST); + } + + return i; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(NORTH, canPaneConnectTo(worldIn, pos, EnumFacing.NORTH)) + .withProperty(SOUTH, canPaneConnectTo(worldIn, pos, EnumFacing.SOUTH)) + .withProperty(WEST, canPaneConnectTo(worldIn, pos, EnumFacing.WEST)) + .withProperty(EAST, canPaneConnectTo(worldIn, pos, EnumFacing.EAST)); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return !this.canDrop ? Items.AIR : super.getItemDropped(state, rand, fortune); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return blockAccess.getBlockState(pos.offset(side)).getBlock() == this ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + + public final boolean attachesTo(IBlockAccess p_193393_1_, IBlockState state, BlockPos pos, EnumFacing facing) + { + Block block = state.getBlock(); + BlockFaceShape blockfaceshape = state.getBlockFaceShape(p_193393_1_, pos, facing); + return !isExcepBlockForAttachWithPiston(block) && blockfaceshape == BlockFaceShape.SOLID || blockfaceshape == BlockFaceShape.MIDDLE_POLE_THIN; + } + + protected static boolean isExcepBlockForAttachWithPiston(Block p_193394_0_) + { + return p_193394_0_ instanceof BlockShulkerBox || p_193394_0_ instanceof BlockLeaves || p_193394_0_ == Blocks.BEACON || p_193394_0_ == Blocks.CAULDRON || p_193394_0_ == Blocks.GLOWSTONE || p_193394_0_ == Blocks.ICE || p_193394_0_ == Blocks.SEA_LANTERN || p_193394_0_ == Blocks.PISTON || p_193394_0_ == Blocks.STICKY_PISTON || p_193394_0_ == Blocks.PISTON_HEAD || p_193394_0_ == Blocks.MELON_BLOCK || p_193394_0_ == Blocks.PUMPKIN || p_193394_0_ == Blocks.LIT_PUMPKIN || p_193394_0_ == Blocks.BARRIER; + } + + protected boolean canSilkHarvest() + { + return true; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT_MIPPED; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return 0; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(EAST, state.getValue(WEST)).withProperty(SOUTH, state.getValue(NORTH)).withProperty(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(EAST)).withProperty(EAST, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(WEST)).withProperty(WEST, state.getValue(NORTH)); + case CLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(WEST)).withProperty(EAST, state.getValue(NORTH)).withProperty(SOUTH, state.getValue(EAST)).withProperty(WEST, state.getValue(SOUTH)); + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + switch (mirrorIn) + { + case LEFT_RIGHT: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(NORTH)); + case FRONT_BACK: + return state.withProperty(EAST, state.getValue(WEST)).withProperty(WEST, state.getValue(EAST)); + default: + return super.withMirror(state, mirrorIn); + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {NORTH, EAST, WEST, SOUTH}); + } + + /* ======================================== FORGE START ======================================== */ + + @Override + public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + BlockPos offset = pos.offset(facing); + return attachesTo(world, world.getBlockState(offset), offset, facing.getOpposite()); + } + + public boolean canPaneConnectTo(IBlockAccess world, BlockPos pos, EnumFacing dir) + { + BlockPos other = pos.offset(dir); + IBlockState state = world.getBlockState(other); + return state.getBlock().canBeConnectedTo(world, other, dir.getOpposite()) || attachesTo(world, state, other, dir.getOpposite()); + } + + /* ======================================== FORGE END ======================================== */ + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE_THIN : BlockFaceShape.CENTER_SMALL; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonBase.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonBase.java new file mode 100644 index 0000000..c8697ba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonBase.java @@ -0,0 +1,504 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockPistonStructureHelper; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityPiston; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockPistonBase extends BlockDirectional +{ + public static final PropertyBool EXTENDED = PropertyBool.create("extended"); + protected static final AxisAlignedBB PISTON_BASE_EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_BASE_WEST_AABB = new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_BASE_SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D); + protected static final AxisAlignedBB PISTON_BASE_NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_BASE_UP_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D); + protected static final AxisAlignedBB PISTON_BASE_DOWN_AABB = new AxisAlignedBB(0.0D, 0.25D, 0.0D, 1.0D, 1.0D, 1.0D); + /** This piston is the sticky one? */ + private final boolean isSticky; + + public BlockPistonBase(boolean isSticky) + { + super(Material.PISTON); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(EXTENDED, Boolean.valueOf(false))); + this.isSticky = isSticky; + this.setSoundType(SoundType.STONE); + this.setHardness(0.5F); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + public boolean causesSuffocation(IBlockState state) + { + return !((Boolean)state.getValue(EXTENDED)).booleanValue(); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + if (((Boolean)state.getValue(EXTENDED)).booleanValue()) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case DOWN: + return PISTON_BASE_DOWN_AABB; + case UP: + default: + return PISTON_BASE_UP_AABB; + case NORTH: + return PISTON_BASE_NORTH_AABB; + case SOUTH: + return PISTON_BASE_SOUTH_AABB; + case WEST: + return PISTON_BASE_WEST_AABB; + case EAST: + return PISTON_BASE_EAST_AABB; + } + } + else + { + return FULL_BLOCK_AABB; + } + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + public boolean isTopSolid(IBlockState state) + { + return !((Boolean)state.getValue(EXTENDED)).booleanValue() || state.getValue(FACING) == EnumFacing.DOWN; + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, state.getBoundingBox(worldIn, pos)); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + worldIn.setBlockState(pos, state.withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer)), 2); + + if (!worldIn.isRemote) + { + this.checkForMove(worldIn, pos, state); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + this.checkForMove(worldIn, pos, state); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote && worldIn.getTileEntity(pos) == null) + { + this.checkForMove(worldIn, pos, state); + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getDirectionFromEntityLiving(pos, placer)).withProperty(EXTENDED, Boolean.valueOf(false)); + } + + private void checkForMove(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + boolean flag = this.shouldBeExtended(worldIn, pos, enumfacing); + + if (flag && !((Boolean)state.getValue(EXTENDED)).booleanValue()) + { + if ((new BlockPistonStructureHelper(worldIn, pos, enumfacing, true)).canMove()) + { + worldIn.addBlockEvent(pos, this, 0, enumfacing.getIndex()); + } + } + else if (!flag && ((Boolean)state.getValue(EXTENDED)).booleanValue()) + { + worldIn.addBlockEvent(pos, this, 1, enumfacing.getIndex()); + } + } + + private boolean shouldBeExtended(World worldIn, BlockPos pos, EnumFacing facing) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (enumfacing != facing && worldIn.isSidePowered(pos.offset(enumfacing), enumfacing)) + { + return true; + } + } + + if (worldIn.isSidePowered(pos, EnumFacing.DOWN)) + { + return true; + } + else + { + BlockPos blockpos = pos.up(); + + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + if (enumfacing1 != EnumFacing.DOWN && worldIn.isSidePowered(blockpos.offset(enumfacing1), enumfacing1)) + { + return true; + } + } + + return false; + } + } + + /** + * Called on server when World#addBlockEvent is called. If server returns true, then also called on the client. On + * the Server, this may perform additional changes to the world, like pistons replacing the block with an extended + * base. On the client, the update may involve replacing tile entities or effects such as sounds or particles + */ + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (!worldIn.isRemote) + { + boolean flag = this.shouldBeExtended(worldIn, pos, enumfacing); + + if (flag && id == 1) + { + worldIn.setBlockState(pos, state.withProperty(EXTENDED, Boolean.valueOf(true)), 2); + return false; + } + + if (!flag && id == 0) + { + return false; + } + } + + if (id == 0) + { + if (!this.doMove(worldIn, pos, enumfacing, true)) + { + return false; + } + + worldIn.setBlockState(pos, state.withProperty(EXTENDED, Boolean.valueOf(true)), 3); + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_PISTON_EXTEND, SoundCategory.BLOCKS, 0.5F, worldIn.rand.nextFloat() * 0.25F + 0.6F); + } + else if (id == 1) + { + TileEntity tileentity1 = worldIn.getTileEntity(pos.offset(enumfacing)); + + if (tileentity1 instanceof TileEntityPiston) + { + ((TileEntityPiston)tileentity1).clearPistonTileEntity(); + } + + worldIn.setBlockState(pos, Blocks.PISTON_EXTENSION.getDefaultState().withProperty(BlockPistonMoving.FACING, enumfacing).withProperty(BlockPistonMoving.TYPE, this.isSticky ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT), 3); + worldIn.setTileEntity(pos, BlockPistonMoving.createTilePiston(this.getStateFromMeta(param), enumfacing, false, true)); + + if (this.isSticky) + { + BlockPos blockpos = pos.add(enumfacing.getFrontOffsetX() * 2, enumfacing.getFrontOffsetY() * 2, enumfacing.getFrontOffsetZ() * 2); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + boolean flag1 = false; + + if (block == Blocks.PISTON_EXTENSION) + { + TileEntity tileentity = worldIn.getTileEntity(blockpos); + + if (tileentity instanceof TileEntityPiston) + { + TileEntityPiston tileentitypiston = (TileEntityPiston)tileentity; + + if (tileentitypiston.getFacing() == enumfacing && tileentitypiston.isExtending()) + { + tileentitypiston.clearPistonTileEntity(); + flag1 = true; + } + } + } + + if (!flag1 && !iblockstate.getBlock().isAir(iblockstate, worldIn, blockpos) && canPush(iblockstate, worldIn, blockpos, enumfacing.getOpposite(), false, enumfacing) && (iblockstate.getMobilityFlag() == EnumPushReaction.NORMAL || block == Blocks.PISTON || block == Blocks.STICKY_PISTON)) + { + this.doMove(worldIn, pos, enumfacing, false); + } + } + else + { + worldIn.setBlockToAir(pos.offset(enumfacing)); + } + + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_PISTON_CONTRACT, SoundCategory.BLOCKS, 0.5F, worldIn.rand.nextFloat() * 0.15F + 0.6F); + } + + return true; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @Nullable + public static EnumFacing getFacing(int meta) + { + int i = meta & 7; + return i > 5 ? null : EnumFacing.getFront(i); + } + + /** + * Checks if the piston can push the given BlockState. + */ + public static boolean canPush(IBlockState blockStateIn, World worldIn, BlockPos pos, EnumFacing facing, boolean destroyBlocks, EnumFacing p_185646_5_) + { + Block block = blockStateIn.getBlock(); + + if (block == Blocks.OBSIDIAN) + { + return false; + } + else if (!worldIn.getWorldBorder().contains(pos)) + { + return false; + } + else if (pos.getY() >= 0 && (facing != EnumFacing.DOWN || pos.getY() != 0)) + { + if (pos.getY() <= worldIn.getHeight() - 1 && (facing != EnumFacing.UP || pos.getY() != worldIn.getHeight() - 1)) + { + if (block != Blocks.PISTON && block != Blocks.STICKY_PISTON) + { + if (blockStateIn.getBlockHardness(worldIn, pos) == -1.0F) + { + return false; + } + + switch (blockStateIn.getMobilityFlag()) + { + case BLOCK: + return false; + case DESTROY: + return destroyBlocks; + case PUSH_ONLY: + return facing == p_185646_5_; + } + } + else if (((Boolean)blockStateIn.getValue(EXTENDED)).booleanValue()) + { + return false; + } + + return !block.hasTileEntity(blockStateIn); + } + else + { + return false; + } + } + else + { + return false; + } + } + + private boolean doMove(World worldIn, BlockPos pos, EnumFacing direction, boolean extending) + { + if (!extending) + { + worldIn.setBlockToAir(pos.offset(direction)); + } + + BlockPistonStructureHelper blockpistonstructurehelper = new BlockPistonStructureHelper(worldIn, pos, direction, extending); + + if (!blockpistonstructurehelper.canMove()) + { + return false; + } + else + { + List list = blockpistonstructurehelper.getBlocksToMove(); + List list1 = Lists.newArrayList(); + + for (int i = 0; i < list.size(); ++i) + { + BlockPos blockpos = list.get(i); + list1.add(worldIn.getBlockState(blockpos).getActualState(worldIn, blockpos)); + } + + List list2 = blockpistonstructurehelper.getBlocksToDestroy(); + int k = list.size() + list2.size(); + IBlockState[] aiblockstate = new IBlockState[k]; + EnumFacing enumfacing = extending ? direction : direction.getOpposite(); + + for (int j = list2.size() - 1; j >= 0; --j) + { + BlockPos blockpos1 = list2.get(j); + IBlockState iblockstate = worldIn.getBlockState(blockpos1); + // Forge: With our change to how snowballs are dropped this needs to disallow to mimic vanilla behavior. + float chance = iblockstate.getBlock() instanceof BlockSnow ? -1.0f : 1.0f; + iblockstate.getBlock().dropBlockAsItemWithChance(worldIn, blockpos1, iblockstate, chance, 0); + worldIn.setBlockState(blockpos1, Blocks.AIR.getDefaultState(), 4); + --k; + aiblockstate[k] = iblockstate; + } + + for (int l = list.size() - 1; l >= 0; --l) + { + BlockPos blockpos3 = list.get(l); + IBlockState iblockstate2 = worldIn.getBlockState(blockpos3); + worldIn.setBlockState(blockpos3, Blocks.AIR.getDefaultState(), 2); + blockpos3 = blockpos3.offset(enumfacing); + worldIn.setBlockState(blockpos3, Blocks.PISTON_EXTENSION.getDefaultState().withProperty(FACING, direction), 4); + worldIn.setTileEntity(blockpos3, BlockPistonMoving.createTilePiston(list1.get(l), direction, extending, false)); + --k; + aiblockstate[k] = iblockstate2; + } + + BlockPos blockpos2 = pos.offset(direction); + + if (extending) + { + BlockPistonExtension.EnumPistonType blockpistonextension$enumpistontype = this.isSticky ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT; + IBlockState iblockstate3 = Blocks.PISTON_HEAD.getDefaultState().withProperty(BlockPistonExtension.FACING, direction).withProperty(BlockPistonExtension.TYPE, blockpistonextension$enumpistontype); + IBlockState iblockstate1 = Blocks.PISTON_EXTENSION.getDefaultState().withProperty(BlockPistonMoving.FACING, direction).withProperty(BlockPistonMoving.TYPE, this.isSticky ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); + worldIn.setBlockState(blockpos2, iblockstate1, 4); + worldIn.setTileEntity(blockpos2, BlockPistonMoving.createTilePiston(iblockstate3, direction, true, true)); + } + + for (int i1 = list2.size() - 1; i1 >= 0; --i1) + { + worldIn.notifyNeighborsOfStateChange(list2.get(i1), aiblockstate[k++].getBlock(), false); + } + + for (int j1 = list.size() - 1; j1 >= 0; --j1) + { + worldIn.notifyNeighborsOfStateChange(list.get(j1), aiblockstate[k++].getBlock(), false); + } + + if (extending) + { + worldIn.notifyNeighborsOfStateChange(blockpos2, Blocks.PISTON_HEAD, false); + } + + return true; + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, getFacing(meta)).withProperty(EXTENDED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (((Boolean)state.getValue(EXTENDED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, EXTENDED}); + } + + /* ======================================== FORGE START =====================================*/ + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + IBlockState state = world.getBlockState(pos); + return !state.getValue(EXTENDED) && super.rotateBlock(world, pos, axis); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + state = this.getActualState(state, worldIn, pos); + return state.getValue(FACING) != face.getOpposite() && ((Boolean)state.getValue(EXTENDED)).booleanValue() ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonExtension.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonExtension.java new file mode 100644 index 0000000..a9b74af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonExtension.java @@ -0,0 +1,311 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockPistonExtension extends BlockDirectional +{ + public static final PropertyEnum TYPE = PropertyEnum.create("type", BlockPistonExtension.EnumPistonType.class); + public static final PropertyBool SHORT = PropertyBool.create("short"); + protected static final AxisAlignedBB PISTON_EXTENSION_EAST_AABB = new AxisAlignedBB(0.75D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_EXTENSION_WEST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.25D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_EXTENSION_SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.75D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_EXTENSION_NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.25D); + protected static final AxisAlignedBB PISTON_EXTENSION_UP_AABB = new AxisAlignedBB(0.0D, 0.75D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB PISTON_EXTENSION_DOWN_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D); + protected static final AxisAlignedBB UP_ARM_AABB = new AxisAlignedBB(0.375D, -0.25D, 0.375D, 0.625D, 0.75D, 0.625D); + protected static final AxisAlignedBB DOWN_ARM_AABB = new AxisAlignedBB(0.375D, 0.25D, 0.375D, 0.625D, 1.25D, 0.625D); + protected static final AxisAlignedBB SOUTH_ARM_AABB = new AxisAlignedBB(0.375D, 0.375D, -0.25D, 0.625D, 0.625D, 0.75D); + protected static final AxisAlignedBB NORTH_ARM_AABB = new AxisAlignedBB(0.375D, 0.375D, 0.25D, 0.625D, 0.625D, 1.25D); + protected static final AxisAlignedBB EAST_ARM_AABB = new AxisAlignedBB(-0.25D, 0.375D, 0.375D, 0.75D, 0.625D, 0.625D); + protected static final AxisAlignedBB WEST_ARM_AABB = new AxisAlignedBB(0.25D, 0.375D, 0.375D, 1.25D, 0.625D, 0.625D); + protected static final AxisAlignedBB SHORT_UP_ARM_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.75D, 0.625D); + protected static final AxisAlignedBB SHORT_DOWN_ARM_AABB = new AxisAlignedBB(0.375D, 0.25D, 0.375D, 0.625D, 1.0D, 0.625D); + protected static final AxisAlignedBB SHORT_SOUTH_ARM_AABB = new AxisAlignedBB(0.375D, 0.375D, 0.0D, 0.625D, 0.625D, 0.75D); + protected static final AxisAlignedBB SHORT_NORTH_ARM_AABB = new AxisAlignedBB(0.375D, 0.375D, 0.25D, 0.625D, 0.625D, 1.0D); + protected static final AxisAlignedBB SHORT_EAST_ARM_AABB = new AxisAlignedBB(0.0D, 0.375D, 0.375D, 0.75D, 0.625D, 0.625D); + protected static final AxisAlignedBB SHORT_WEST_ARM_AABB = new AxisAlignedBB(0.25D, 0.375D, 0.375D, 1.0D, 0.625D, 0.625D); + + public BlockPistonExtension() + { + super(Material.PISTON); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(TYPE, BlockPistonExtension.EnumPistonType.DEFAULT).withProperty(SHORT, Boolean.valueOf(false))); + this.setSoundType(SoundType.STONE); + this.setHardness(0.5F); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case DOWN: + default: + return PISTON_EXTENSION_DOWN_AABB; + case UP: + return PISTON_EXTENSION_UP_AABB; + case NORTH: + return PISTON_EXTENSION_NORTH_AABB; + case SOUTH: + return PISTON_EXTENSION_SOUTH_AABB; + case WEST: + return PISTON_EXTENSION_WEST_AABB; + case EAST: + return PISTON_EXTENSION_EAST_AABB; + } + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, state.getBoundingBox(worldIn, pos)); + addCollisionBoxToList(pos, entityBox, collidingBoxes, this.getArmShape(state)); + } + + private AxisAlignedBB getArmShape(IBlockState state) + { + boolean flag = ((Boolean)state.getValue(SHORT)).booleanValue(); + + switch ((EnumFacing)state.getValue(FACING)) + { + case DOWN: + default: + return flag ? SHORT_DOWN_ARM_AABB : DOWN_ARM_AABB; + case UP: + return flag ? SHORT_UP_ARM_AABB : UP_ARM_AABB; + case NORTH: + return flag ? SHORT_NORTH_ARM_AABB : NORTH_ARM_AABB; + case SOUTH: + return flag ? SHORT_SOUTH_ARM_AABB : SOUTH_ARM_AABB; + case WEST: + return flag ? SHORT_WEST_ARM_AABB : WEST_ARM_AABB; + case EAST: + return flag ? SHORT_EAST_ARM_AABB : EAST_ARM_AABB; + } + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + public boolean isTopSolid(IBlockState state) + { + return state.getValue(FACING) == EnumFacing.UP; + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (player.capabilities.isCreativeMode) + { + BlockPos blockpos = pos.offset(((EnumFacing)state.getValue(FACING)).getOpposite()); + Block block = worldIn.getBlockState(blockpos).getBlock(); + + if (block == Blocks.PISTON || block == Blocks.STICKY_PISTON) + { + worldIn.setBlockToAir(blockpos); + } + } + + super.onBlockHarvested(worldIn, pos, state, player); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + EnumFacing enumfacing = ((EnumFacing)state.getValue(FACING)).getOpposite(); + pos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(pos); + + if ((iblockstate.getBlock() == Blocks.PISTON || iblockstate.getBlock() == Blocks.STICKY_PISTON) && ((Boolean)iblockstate.getValue(BlockPistonBase.EXTENDED)).booleanValue()) + { + iblockstate.getBlock().dropBlockAsItem(worldIn, pos, iblockstate, 0); + worldIn.setBlockToAir(pos); + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return false; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return false; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockPos blockpos = pos.offset(enumfacing.getOpposite()); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() != Blocks.PISTON && iblockstate.getBlock() != Blocks.STICKY_PISTON) + { + worldIn.setBlockToAir(pos); + } + else + { + iblockstate.neighborChanged(worldIn, blockpos, blockIn, fromPos); + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return true; + } + + @Nullable + public static EnumFacing getFacing(int meta) + { + int i = meta & 7; + return i > 5 ? null : EnumFacing.getFront(i); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(state.getValue(TYPE) == BlockPistonExtension.EnumPistonType.STICKY ? Blocks.STICKY_PISTON : Blocks.PISTON); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, getFacing(meta)).withProperty(TYPE, (meta & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (state.getValue(TYPE) == BlockPistonExtension.EnumPistonType.STICKY) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, TYPE, SHORT}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == state.getValue(FACING) ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + + public static enum EnumPistonType implements IStringSerializable + { + DEFAULT("normal"), + STICKY("sticky"); + + private final String VARIANT; + + private EnumPistonType(String name) + { + this.VARIANT = name; + } + + public String toString() + { + return this.VARIANT; + } + + public String getName() + { + return this.VARIANT; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonMoving.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonMoving.java new file mode 100644 index 0000000..ef0d62f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPistonMoving.java @@ -0,0 +1,290 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityPiston; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockPistonMoving extends BlockContainer +{ + public static final PropertyDirection FACING = BlockPistonExtension.FACING; + public static final PropertyEnum TYPE = BlockPistonExtension.TYPE; + + public BlockPistonMoving() + { + super(Material.PISTON); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(TYPE, BlockPistonExtension.EnumPistonType.DEFAULT)); + this.setHardness(-1.0F); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + @Nullable + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return null; + } + + public static TileEntity createTilePiston(IBlockState blockStateIn, EnumFacing facingIn, boolean extendingIn, boolean shouldHeadBeRenderedIn) + { + return new TileEntityPiston(blockStateIn, facingIn, extendingIn, shouldHeadBeRenderedIn); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityPiston) + { + ((TileEntityPiston)tileentity).clearPistonTileEntity(); + } + else + { + super.breakBlock(worldIn, pos, state); + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return false; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return false; + } + + /** + * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated. + */ + public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state) + { + BlockPos blockpos = pos.offset(((EnumFacing)state.getValue(FACING)).getOpposite()); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() instanceof BlockPistonBase && ((Boolean)iblockstate.getValue(BlockPistonBase.EXTENDED)).booleanValue()) + { + worldIn.setBlockToAir(blockpos); + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!worldIn.isRemote && worldIn.getTileEntity(pos) == null) + { + worldIn.setBlockToAir(pos); + return true; + } + else + { + return false; + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + if (false && !worldIn.isRemote) // Forge: Noop this out + { + TileEntityPiston tileentitypiston = this.getTilePistonAt(worldIn, pos); + + if (tileentitypiston != null) + { + IBlockState iblockstate = tileentitypiston.getPistonState(); + iblockstate.getBlock().dropBlockAsItem(worldIn, pos, iblockstate, 0); + } + } + super.dropBlockAsItemWithChance(worldIn, pos, state, 1, fortune); // mimic vanilla behavior from above and ignore chance + } + + /** + * Ray traces through the blocks collision from start vector to end vector returning a ray trace hit. + */ + @Nullable + public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end) + { + return null; + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + worldIn.getTileEntity(pos); + } + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + TileEntityPiston tileentitypiston = this.getTilePistonAt(worldIn, pos); + return tileentitypiston == null ? null : tileentitypiston.getAABB(worldIn, pos); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + TileEntityPiston tileentitypiston = this.getTilePistonAt(worldIn, pos); + + if (tileentitypiston != null) + { + tileentitypiston.addCollissionAABBs(worldIn, pos, entityBox, collidingBoxes, entityIn); + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + TileEntityPiston tileentitypiston = this.getTilePistonAt(source, pos); + return tileentitypiston != null ? tileentitypiston.getAABB(source, pos) : FULL_BLOCK_AABB; + } + + /** + * Gets a TileEntityPiston at the given position. Returns null if the tile is not an instance of TileEntityPiston. + */ + @Nullable + private TileEntityPiston getTilePistonAt(IBlockAccess iBlockAccessIn, BlockPos blockPosIn) + { + TileEntity tileentity = iBlockAccessIn.getTileEntity(blockPosIn); + return tileentity instanceof TileEntityPiston ? (TileEntityPiston)tileentity : null; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return ItemStack.EMPTY; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, BlockPistonExtension.getFacing(meta)).withProperty(TYPE, (meta & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (state.getValue(TYPE) == BlockPistonExtension.EnumPistonType.STICKY) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, TYPE}); + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + TileEntityPiston tileentitypiston = this.getTilePistonAt(world, pos); + if (tileentitypiston != null) + { + IBlockState pushed = tileentitypiston.getPistonState(); + drops.addAll(pushed.getBlock().getDrops(world, pos, pushed, fortune)); // use the old method until it gets removed, for backward compatibility + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPlanks.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPlanks.java new file mode 100644 index 0000000..b42edfa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPlanks.java @@ -0,0 +1,151 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockPlanks extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class); + + public BlockPlanks() + { + super(Material.WOOD); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPlanks.EnumType.OAK)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockPlanks.EnumType blockplanks$enumtype : BlockPlanks.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockplanks$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata(meta)); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMapColor(); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + public static enum EnumType implements IStringSerializable + { + OAK(0, "oak", MapColor.WOOD), + SPRUCE(1, "spruce", MapColor.OBSIDIAN), + BIRCH(2, "birch", MapColor.SAND), + JUNGLE(3, "jungle", MapColor.DIRT), + ACACIA(4, "acacia", MapColor.ADOBE), + DARK_OAK(5, "dark_oak", "big_oak", MapColor.BROWN); + + private static final BlockPlanks.EnumType[] META_LOOKUP = new BlockPlanks.EnumType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + /** The color that represents this entry on a map. */ + private final MapColor mapColor; + + private EnumType(int metaIn, String nameIn, MapColor mapColorIn) + { + this(metaIn, nameIn, nameIn, mapColorIn); + } + + private EnumType(int metaIn, String nameIn, String unlocalizedNameIn, MapColor mapColorIn) + { + this.meta = metaIn; + this.name = nameIn; + this.unlocalizedName = unlocalizedNameIn; + this.mapColor = mapColorIn; + } + + public int getMetadata() + { + return this.meta; + } + + /** + * The color which represents this entry on a map. + */ + public MapColor getMapColor() + { + return this.mapColor; + } + + public String toString() + { + return this.name; + } + + public static BlockPlanks.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockPlanks.EnumType blockplanks$enumtype : values()) + { + META_LOOKUP[blockplanks$enumtype.getMetadata()] = blockplanks$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPortal.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPortal.java new file mode 100644 index 0000000..bc48026 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPortal.java @@ -0,0 +1,560 @@ +package net.minecraft.block; + +import com.google.common.cache.LoadingCache; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.BlockWorldState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockPattern; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockPortal extends BlockBreakable +{ + public static final PropertyEnum AXIS = PropertyEnum.create("axis", EnumFacing.Axis.class, EnumFacing.Axis.X, EnumFacing.Axis.Z); + protected static final AxisAlignedBB X_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D); + protected static final AxisAlignedBB Z_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D); + protected static final AxisAlignedBB Y_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D); + + public BlockPortal() + { + super(Material.PORTAL, false); + this.setDefaultState(this.blockState.getBaseState().withProperty(AXIS, EnumFacing.Axis.X)); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing.Axis)state.getValue(AXIS)) + { + case X: + return X_AABB; + case Y: + default: + return Y_AABB; + case Z: + return Z_AABB; + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + super.updateTick(worldIn, pos, state, rand); + + if (worldIn.provider.isSurfaceWorld() && worldIn.getGameRules().getBoolean("doMobSpawning") && rand.nextInt(2000) < worldIn.getDifficulty().getDifficultyId()) + { + int i = pos.getY(); + BlockPos blockpos; + + for (blockpos = pos; !worldIn.getBlockState(blockpos).isTopSolid() && blockpos.getY() > 0; blockpos = blockpos.down()) + { + ; + } + + if (i > 0 && !worldIn.getBlockState(blockpos.up()).isNormalCube()) + { + Entity entity = ItemMonsterPlacer.spawnCreature(worldIn, EntityList.getKey(EntityPigZombie.class), (double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 1.1D, (double)blockpos.getZ() + 0.5D); + + if (entity != null) + { + entity.timeUntilPortal = entity.getPortalCooldown(); + } + } + } + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + public static int getMetaForAxis(EnumFacing.Axis axis) + { + if (axis == EnumFacing.Axis.X) + { + return 1; + } + else + { + return axis == EnumFacing.Axis.Z ? 2 : 0; + } + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + public boolean trySpawnPortal(World worldIn, BlockPos pos) + { + BlockPortal.Size blockportal$size = new BlockPortal.Size(worldIn, pos, EnumFacing.Axis.X); + + if (blockportal$size.isValid() && blockportal$size.portalBlockCount == 0 && !net.minecraftforge.event.ForgeEventFactory.onTrySpawnPortal(worldIn, pos, blockportal$size)) + { + blockportal$size.placePortalBlocks(); + return true; + } + else + { + BlockPortal.Size blockportal$size1 = new BlockPortal.Size(worldIn, pos, EnumFacing.Axis.Z); + + if (blockportal$size1.isValid() && blockportal$size1.portalBlockCount == 0 && !net.minecraftforge.event.ForgeEventFactory.onTrySpawnPortal(worldIn, pos, blockportal$size1)) + { + blockportal$size1.placePortalBlocks(); + return true; + } + else + { + return false; + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing.Axis enumfacing$axis = (EnumFacing.Axis)state.getValue(AXIS); + + if (enumfacing$axis == EnumFacing.Axis.X) + { + BlockPortal.Size blockportal$size = new BlockPortal.Size(worldIn, pos, EnumFacing.Axis.X); + + if (!blockportal$size.isValid() || blockportal$size.portalBlockCount < blockportal$size.width * blockportal$size.height) + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState()); + } + } + else if (enumfacing$axis == EnumFacing.Axis.Z) + { + BlockPortal.Size blockportal$size1 = new BlockPortal.Size(worldIn, pos, EnumFacing.Axis.Z); + + if (!blockportal$size1.isValid() || blockportal$size1.portalBlockCount < blockportal$size1.width * blockportal$size1.height) + { + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState()); + } + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + pos = pos.offset(side); + EnumFacing.Axis enumfacing$axis = null; + + if (blockState.getBlock() == this) + { + enumfacing$axis = (EnumFacing.Axis)blockState.getValue(AXIS); + + if (enumfacing$axis == null) + { + return false; + } + + if (enumfacing$axis == EnumFacing.Axis.Z && side != EnumFacing.EAST && side != EnumFacing.WEST) + { + return false; + } + + if (enumfacing$axis == EnumFacing.Axis.X && side != EnumFacing.SOUTH && side != EnumFacing.NORTH) + { + return false; + } + } + + boolean flag = blockAccess.getBlockState(pos.west()).getBlock() == this && blockAccess.getBlockState(pos.west(2)).getBlock() != this; + boolean flag1 = blockAccess.getBlockState(pos.east()).getBlock() == this && blockAccess.getBlockState(pos.east(2)).getBlock() != this; + boolean flag2 = blockAccess.getBlockState(pos.north()).getBlock() == this && blockAccess.getBlockState(pos.north(2)).getBlock() != this; + boolean flag3 = blockAccess.getBlockState(pos.south()).getBlock() == this && blockAccess.getBlockState(pos.south(2)).getBlock() != this; + boolean flag4 = flag || flag1 || enumfacing$axis == EnumFacing.Axis.X; + boolean flag5 = flag2 || flag3 || enumfacing$axis == EnumFacing.Axis.Z; + + if (flag4 && side == EnumFacing.WEST) + { + return true; + } + else if (flag4 && side == EnumFacing.EAST) + { + return true; + } + else if (flag5 && side == EnumFacing.NORTH) + { + return true; + } + else + { + return flag5 && side == EnumFacing.SOUTH; + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!entityIn.isRiding() && !entityIn.isBeingRidden() && entityIn.isNonBoss()) + { + entityIn.setPortal(pos); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return ItemStack.EMPTY; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AXIS, (meta & 3) == 2 ? EnumFacing.Axis.Z : EnumFacing.Axis.X); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (rand.nextInt(100) == 0) + { + worldIn.playSound((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, SoundEvents.BLOCK_PORTAL_AMBIENT, SoundCategory.BLOCKS, 0.5F, rand.nextFloat() * 0.4F + 0.8F, false); + } + + for (int i = 0; i < 4; ++i) + { + double d0 = (double)((float)pos.getX() + rand.nextFloat()); + double d1 = (double)((float)pos.getY() + rand.nextFloat()); + double d2 = (double)((float)pos.getZ() + rand.nextFloat()); + double d3 = ((double)rand.nextFloat() - 0.5D) * 0.5D; + double d4 = ((double)rand.nextFloat() - 0.5D) * 0.5D; + double d5 = ((double)rand.nextFloat() - 0.5D) * 0.5D; + int j = rand.nextInt(2) * 2 - 1; + + if (worldIn.getBlockState(pos.west()).getBlock() != this && worldIn.getBlockState(pos.east()).getBlock() != this) + { + d0 = (double)pos.getX() + 0.5D + 0.25D * (double)j; + d3 = (double)(rand.nextFloat() * 2.0F * (float)j); + } + else + { + d2 = (double)pos.getZ() + 0.5D + 0.25D * (double)j; + d5 = (double)(rand.nextFloat() * 2.0F * (float)j); + } + + worldIn.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); + } + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return getMetaForAxis((EnumFacing.Axis)state.getValue(AXIS)); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case COUNTERCLOCKWISE_90: + case CLOCKWISE_90: + + switch ((EnumFacing.Axis)state.getValue(AXIS)) + { + case X: + return state.withProperty(AXIS, EnumFacing.Axis.Z); + case Z: + return state.withProperty(AXIS, EnumFacing.Axis.X); + default: + return state; + } + + default: + return state; + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AXIS}); + } + + public BlockPattern.PatternHelper createPatternHelper(World worldIn, BlockPos p_181089_2_) + { + EnumFacing.Axis enumfacing$axis = EnumFacing.Axis.Z; + BlockPortal.Size blockportal$size = new BlockPortal.Size(worldIn, p_181089_2_, EnumFacing.Axis.X); + LoadingCache loadingcache = BlockPattern.createLoadingCache(worldIn, true); + + if (!blockportal$size.isValid()) + { + enumfacing$axis = EnumFacing.Axis.X; + blockportal$size = new BlockPortal.Size(worldIn, p_181089_2_, EnumFacing.Axis.Z); + } + + if (!blockportal$size.isValid()) + { + return new BlockPattern.PatternHelper(p_181089_2_, EnumFacing.NORTH, EnumFacing.UP, loadingcache, 1, 1, 1); + } + else + { + int[] aint = new int[EnumFacing.AxisDirection.values().length]; + EnumFacing enumfacing = blockportal$size.rightDir.rotateYCCW(); + BlockPos blockpos = blockportal$size.bottomLeft.up(blockportal$size.getHeight() - 1); + + for (EnumFacing.AxisDirection enumfacing$axisdirection : EnumFacing.AxisDirection.values()) + { + BlockPattern.PatternHelper blockpattern$patternhelper = new BlockPattern.PatternHelper(enumfacing.getAxisDirection() == enumfacing$axisdirection ? blockpos : blockpos.offset(blockportal$size.rightDir, blockportal$size.getWidth() - 1), EnumFacing.getFacingFromAxis(enumfacing$axisdirection, enumfacing$axis), EnumFacing.UP, loadingcache, blockportal$size.getWidth(), blockportal$size.getHeight(), 1); + + for (int i = 0; i < blockportal$size.getWidth(); ++i) + { + for (int j = 0; j < blockportal$size.getHeight(); ++j) + { + BlockWorldState blockworldstate = blockpattern$patternhelper.translateOffset(i, j, 1); + + if (blockworldstate.getBlockState() != null && blockworldstate.getBlockState().getMaterial() != Material.AIR) + { + ++aint[enumfacing$axisdirection.ordinal()]; + } + } + } + } + + EnumFacing.AxisDirection enumfacing$axisdirection1 = EnumFacing.AxisDirection.POSITIVE; + + for (EnumFacing.AxisDirection enumfacing$axisdirection2 : EnumFacing.AxisDirection.values()) + { + if (aint[enumfacing$axisdirection2.ordinal()] < aint[enumfacing$axisdirection1.ordinal()]) + { + enumfacing$axisdirection1 = enumfacing$axisdirection2; + } + } + + return new BlockPattern.PatternHelper(enumfacing.getAxisDirection() == enumfacing$axisdirection1 ? blockpos : blockpos.offset(blockportal$size.rightDir, blockportal$size.getWidth() - 1), EnumFacing.getFacingFromAxis(enumfacing$axisdirection1, enumfacing$axis), EnumFacing.UP, loadingcache, blockportal$size.getWidth(), blockportal$size.getHeight(), 1); + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + public static class Size + { + private final World world; + private final EnumFacing.Axis axis; + private final EnumFacing rightDir; + private final EnumFacing leftDir; + private int portalBlockCount; + private BlockPos bottomLeft; + private int height; + private int width; + + public Size(World worldIn, BlockPos p_i45694_2_, EnumFacing.Axis p_i45694_3_) + { + this.world = worldIn; + this.axis = p_i45694_3_; + + if (p_i45694_3_ == EnumFacing.Axis.X) + { + this.leftDir = EnumFacing.EAST; + this.rightDir = EnumFacing.WEST; + } + else + { + this.leftDir = EnumFacing.NORTH; + this.rightDir = EnumFacing.SOUTH; + } + + for (BlockPos blockpos = p_i45694_2_; p_i45694_2_.getY() > blockpos.getY() - 21 && p_i45694_2_.getY() > 0 && this.isEmptyBlock(worldIn.getBlockState(p_i45694_2_.down()).getBlock()); p_i45694_2_ = p_i45694_2_.down()) + { + ; + } + + int i = this.getDistanceUntilEdge(p_i45694_2_, this.leftDir) - 1; + + if (i >= 0) + { + this.bottomLeft = p_i45694_2_.offset(this.leftDir, i); + this.width = this.getDistanceUntilEdge(this.bottomLeft, this.rightDir); + + if (this.width < 2 || this.width > 21) + { + this.bottomLeft = null; + this.width = 0; + } + } + + if (this.bottomLeft != null) + { + this.height = this.calculatePortalHeight(); + } + } + + protected int getDistanceUntilEdge(BlockPos p_180120_1_, EnumFacing p_180120_2_) + { + int i; + + for (i = 0; i < 22; ++i) + { + BlockPos blockpos = p_180120_1_.offset(p_180120_2_, i); + + if (!this.isEmptyBlock(this.world.getBlockState(blockpos).getBlock()) || this.world.getBlockState(blockpos.down()).getBlock() != Blocks.OBSIDIAN) + { + break; + } + } + + Block block = this.world.getBlockState(p_180120_1_.offset(p_180120_2_, i)).getBlock(); + return block == Blocks.OBSIDIAN ? i : 0; + } + + public int getHeight() + { + return this.height; + } + + public int getWidth() + { + return this.width; + } + + protected int calculatePortalHeight() + { + label56: + + for (this.height = 0; this.height < 21; ++this.height) + { + for (int i = 0; i < this.width; ++i) + { + BlockPos blockpos = this.bottomLeft.offset(this.rightDir, i).up(this.height); + Block block = this.world.getBlockState(blockpos).getBlock(); + + if (!this.isEmptyBlock(block)) + { + break label56; + } + + if (block == Blocks.PORTAL) + { + ++this.portalBlockCount; + } + + if (i == 0) + { + block = this.world.getBlockState(blockpos.offset(this.leftDir)).getBlock(); + + if (block != Blocks.OBSIDIAN) + { + break label56; + } + } + else if (i == this.width - 1) + { + block = this.world.getBlockState(blockpos.offset(this.rightDir)).getBlock(); + + if (block != Blocks.OBSIDIAN) + { + break label56; + } + } + } + } + + for (int j = 0; j < this.width; ++j) + { + if (this.world.getBlockState(this.bottomLeft.offset(this.rightDir, j).up(this.height)).getBlock() != Blocks.OBSIDIAN) + { + this.height = 0; + break; + } + } + + if (this.height <= 21 && this.height >= 3) + { + return this.height; + } + else + { + this.bottomLeft = null; + this.width = 0; + this.height = 0; + return 0; + } + } + + protected boolean isEmptyBlock(Block blockIn) + { + return blockIn.blockMaterial == Material.AIR || blockIn == Blocks.FIRE || blockIn == Blocks.PORTAL; + } + + public boolean isValid() + { + return this.bottomLeft != null && this.width >= 2 && this.width <= 21 && this.height >= 3 && this.height <= 21; + } + + public void placePortalBlocks() + { + for (int i = 0; i < this.width; ++i) + { + BlockPos blockpos = this.bottomLeft.offset(this.rightDir, i); + + for (int j = 0; j < this.height; ++j) + { + this.world.setBlockState(blockpos.up(j), Blocks.PORTAL.getDefaultState().withProperty(BlockPortal.AXIS, this.axis), 2); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPotato.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPotato.java new file mode 100644 index 0000000..66ac84e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPotato.java @@ -0,0 +1,54 @@ +package net.minecraft.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockPotato extends BlockCrops +{ + private static final AxisAlignedBB[] POTATO_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.1875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.4375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5625D, 1.0D)}; + + protected Item getSeed() + { + return Items.POTATO; + } + + protected Item getCrop() + { + return Items.POTATO; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + + if (false && !worldIn.isRemote) //Forge: Moved to getDrops + { + if (this.isMaxAge(state) && worldIn.rand.nextInt(50) == 0) + { + spawnAsEntity(worldIn, pos, new ItemStack(Items.POISONOUS_POTATO)); + } + } + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return POTATO_AABB[((Integer)state.getValue(this.getAgeProperty())).intValue()]; + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + super.getDrops(drops, world, pos, state, fortune); + if (this.isMaxAge(state) && RANDOM.nextInt(50) == 0) + drops.add(new ItemStack(Items.POISONOUS_POTATO)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPressurePlate.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPressurePlate.java new file mode 100644 index 0000000..fc6ed91 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPressurePlate.java @@ -0,0 +1,121 @@ +package net.minecraft.block; + +import java.util.List; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockPressurePlate extends BlockBasePressurePlate +{ + public static final PropertyBool POWERED = PropertyBool.create("powered"); + private final BlockPressurePlate.Sensitivity sensitivity; + + protected BlockPressurePlate(Material materialIn, BlockPressurePlate.Sensitivity sensitivityIn) + { + super(materialIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(POWERED, Boolean.valueOf(false))); + this.sensitivity = sensitivityIn; + } + + protected int getRedstoneStrength(IBlockState state) + { + return ((Boolean)state.getValue(POWERED)).booleanValue() ? 15 : 0; + } + + protected IBlockState setRedstoneStrength(IBlockState state, int strength) + { + return state.withProperty(POWERED, Boolean.valueOf(strength > 0)); + } + + protected void playClickOnSound(World worldIn, BlockPos color) + { + if (this.blockMaterial == Material.WOOD) + { + worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.8F); + } + else + { + worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.6F); + } + } + + protected void playClickOffSound(World worldIn, BlockPos pos) + { + if (this.blockMaterial == Material.WOOD) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_WOOD_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.7F); + } + else + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_STONE_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.5F); + } + } + + protected int computeRedstoneStrength(World worldIn, BlockPos pos) + { + AxisAlignedBB axisalignedbb = PRESSURE_AABB.offset(pos); + List list; + + switch (this.sensitivity) + { + case EVERYTHING: + list = worldIn.getEntitiesWithinAABBExcludingEntity((Entity)null, axisalignedbb); + break; + case MOBS: + list = worldIn.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); + break; + default: + return 0; + } + + if (!list.isEmpty()) + { + for (Entity entity : list) + { + if (!entity.doesEntityNotTriggerPressurePlate()) + { + return 15; + } + } + } + + return 0; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWERED, Boolean.valueOf(meta == 1)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Boolean)state.getValue(POWERED)).booleanValue() ? 1 : 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {POWERED}); + } + + public static enum Sensitivity + { + EVERYTHING, + MOBS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPressurePlateWeighted.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPressurePlateWeighted.java new file mode 100644 index 0000000..d2abc92 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPressurePlateWeighted.java @@ -0,0 +1,97 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class BlockPressurePlateWeighted extends BlockBasePressurePlate +{ + public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); + private final int maxWeight; + + protected BlockPressurePlateWeighted(Material materialIn, int p_i46379_2_) + { + this(materialIn, p_i46379_2_, materialIn.getMaterialMapColor()); + } + + protected BlockPressurePlateWeighted(Material materialIn, int p_i46380_2_, MapColor color) + { + super(materialIn, color); + this.setDefaultState(this.blockState.getBaseState().withProperty(POWER, Integer.valueOf(0))); + this.maxWeight = p_i46380_2_; + } + + protected int computeRedstoneStrength(World worldIn, BlockPos pos) + { + int i = Math.min(worldIn.getEntitiesWithinAABB(Entity.class, PRESSURE_AABB.offset(pos)).size(), this.maxWeight); + + if (i > 0) + { + float f = (float)Math.min(this.maxWeight, i) / (float)this.maxWeight; + return MathHelper.ceil(f * 15.0F); + } + else + { + return 0; + } + } + + protected void playClickOnSound(World worldIn, BlockPos color) + { + worldIn.playSound((EntityPlayer)null, color, SoundEvents.BLOCK_METAL_PRESSPLATE_CLICK_ON, SoundCategory.BLOCKS, 0.3F, 0.90000004F); + } + + protected void playClickOffSound(World worldIn, BlockPos pos) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_METAL_PRESSPLATE_CLICK_OFF, SoundCategory.BLOCKS, 0.3F, 0.75F); + } + + protected int getRedstoneStrength(IBlockState state) + { + return ((Integer)state.getValue(POWER)).intValue(); + } + + protected IBlockState setRedstoneStrength(IBlockState state, int strength) + { + return state.withProperty(POWER, Integer.valueOf(strength)); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 10; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWER, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(POWER)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {POWER}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPrismarine.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPrismarine.java new file mode 100644 index 0000000..3b7add2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPrismarine.java @@ -0,0 +1,143 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; + +public class BlockPrismarine extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPrismarine.EnumType.class); + public static final int ROUGH_META = BlockPrismarine.EnumType.ROUGH.getMetadata(); + public static final int BRICKS_META = BlockPrismarine.EnumType.BRICKS.getMetadata(); + public static final int DARK_META = BlockPrismarine.EnumType.DARK.getMetadata(); + + public BlockPrismarine() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockPrismarine.EnumType.ROUGH)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + "." + BlockPrismarine.EnumType.ROUGH.getUnlocalizedName() + ".name"); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.getValue(VARIANT) == BlockPrismarine.EnumType.ROUGH ? MapColor.CYAN : MapColor.DIAMOND; + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPrismarine.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockPrismarine.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockPrismarine.EnumType.byMetadata(meta)); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, ROUGH_META)); + items.add(new ItemStack(this, 1, BRICKS_META)); + items.add(new ItemStack(this, 1, DARK_META)); + } + + public static enum EnumType implements IStringSerializable + { + ROUGH(0, "prismarine", "rough"), + BRICKS(1, "prismarine_bricks", "bricks"), + DARK(2, "dark_prismarine", "dark"); + + private static final BlockPrismarine.EnumType[] META_LOOKUP = new BlockPrismarine.EnumType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockPrismarine.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockPrismarine.EnumType blockprismarine$enumtype : values()) + { + META_LOOKUP[blockprismarine$enumtype.getMetadata()] = blockprismarine$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPumpkin.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPumpkin.java new file mode 100644 index 0000000..1f3cb38 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPumpkin.java @@ -0,0 +1,235 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.BlockWorldState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMaterialMatcher; +import net.minecraft.block.state.pattern.BlockPattern; +import net.minecraft.block.state.pattern.BlockStateMatcher; +import net.minecraft.block.state.pattern.FactoryBlockPattern; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockPumpkin extends BlockHorizontal +{ + private BlockPattern snowmanBasePattern; + private BlockPattern snowmanPattern; + private BlockPattern golemBasePattern; + private BlockPattern golemPattern; + private static final Predicate IS_PUMPKIN = new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return p_apply_1_ != null && (p_apply_1_.getBlock() == Blocks.PUMPKIN || p_apply_1_.getBlock() == Blocks.LIT_PUMPKIN); + } + }; + + protected BlockPumpkin() + { + super(Material.GOURD, MapColor.ADOBE); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + this.trySpawnGolem(worldIn, pos); + } + + public boolean canDispenserPlace(World worldIn, BlockPos pos) + { + return this.getSnowmanBasePattern().match(worldIn, pos) != null || this.getGolemBasePattern().match(worldIn, pos) != null; + } + + private void trySpawnGolem(World worldIn, BlockPos pos) + { + BlockPattern.PatternHelper blockpattern$patternhelper = this.getSnowmanPattern().match(worldIn, pos); + + if (blockpattern$patternhelper != null) + { + for (int i = 0; i < this.getSnowmanPattern().getThumbLength(); ++i) + { + BlockWorldState blockworldstate = blockpattern$patternhelper.translateOffset(0, i, 0); + worldIn.setBlockState(blockworldstate.getPos(), Blocks.AIR.getDefaultState(), 2); + } + + EntitySnowman entitysnowman = new EntitySnowman(worldIn); + BlockPos blockpos1 = blockpattern$patternhelper.translateOffset(0, 2, 0).getPos(); + entitysnowman.setLocationAndAngles((double)blockpos1.getX() + 0.5D, (double)blockpos1.getY() + 0.05D, (double)blockpos1.getZ() + 0.5D, 0.0F, 0.0F); + worldIn.spawnEntity(entitysnowman); + + for (EntityPlayerMP entityplayermp : worldIn.getEntitiesWithinAABB(EntityPlayerMP.class, entitysnowman.getEntityBoundingBox().grow(5.0D))) + { + CriteriaTriggers.SUMMONED_ENTITY.trigger(entityplayermp, entitysnowman); + } + + for (int l = 0; l < 120; ++l) + { + worldIn.spawnParticle(EnumParticleTypes.SNOW_SHOVEL, (double)blockpos1.getX() + worldIn.rand.nextDouble(), (double)blockpos1.getY() + worldIn.rand.nextDouble() * 2.5D, (double)blockpos1.getZ() + worldIn.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + for (int i1 = 0; i1 < this.getSnowmanPattern().getThumbLength(); ++i1) + { + BlockWorldState blockworldstate2 = blockpattern$patternhelper.translateOffset(0, i1, 0); + worldIn.notifyNeighborsRespectDebug(blockworldstate2.getPos(), Blocks.AIR, false); + } + } + else + { + blockpattern$patternhelper = this.getGolemPattern().match(worldIn, pos); + + if (blockpattern$patternhelper != null) + { + for (int j = 0; j < this.getGolemPattern().getPalmLength(); ++j) + { + for (int k = 0; k < this.getGolemPattern().getThumbLength(); ++k) + { + worldIn.setBlockState(blockpattern$patternhelper.translateOffset(j, k, 0).getPos(), Blocks.AIR.getDefaultState(), 2); + } + } + + BlockPos blockpos = blockpattern$patternhelper.translateOffset(1, 2, 0).getPos(); + EntityIronGolem entityirongolem = new EntityIronGolem(worldIn); + entityirongolem.setPlayerCreated(true); + entityirongolem.setLocationAndAngles((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.05D, (double)blockpos.getZ() + 0.5D, 0.0F, 0.0F); + worldIn.spawnEntity(entityirongolem); + + for (EntityPlayerMP entityplayermp1 : worldIn.getEntitiesWithinAABB(EntityPlayerMP.class, entityirongolem.getEntityBoundingBox().grow(5.0D))) + { + CriteriaTriggers.SUMMONED_ENTITY.trigger(entityplayermp1, entityirongolem); + } + + for (int j1 = 0; j1 < 120; ++j1) + { + worldIn.spawnParticle(EnumParticleTypes.SNOWBALL, (double)blockpos.getX() + worldIn.rand.nextDouble(), (double)blockpos.getY() + worldIn.rand.nextDouble() * 3.9D, (double)blockpos.getZ() + worldIn.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + for (int k1 = 0; k1 < this.getGolemPattern().getPalmLength(); ++k1) + { + for (int l1 = 0; l1 < this.getGolemPattern().getThumbLength(); ++l1) + { + BlockWorldState blockworldstate1 = blockpattern$patternhelper.translateOffset(k1, l1, 0); + worldIn.notifyNeighborsRespectDebug(blockworldstate1.getPos(), Blocks.AIR, false); + } + } + } + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos) && worldIn.isSideSolid(pos.down(), EnumFacing.UP); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + protected BlockPattern getSnowmanBasePattern() + { + if (this.snowmanBasePattern == null) + { + this.snowmanBasePattern = FactoryBlockPattern.start().aisle(" ", "#", "#").where('#', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.SNOW))).build(); + } + + return this.snowmanBasePattern; + } + + protected BlockPattern getSnowmanPattern() + { + if (this.snowmanPattern == null) + { + this.snowmanPattern = FactoryBlockPattern.start().aisle("^", "#", "#").where('^', BlockWorldState.hasState(IS_PUMPKIN)).where('#', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.SNOW))).build(); + } + + return this.snowmanPattern; + } + + protected BlockPattern getGolemBasePattern() + { + if (this.golemBasePattern == null) + { + this.golemBasePattern = FactoryBlockPattern.start().aisle("~ ~", "###", "~#~").where('#', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.IRON_BLOCK))).where('~', BlockWorldState.hasState(BlockMaterialMatcher.forMaterial(Material.AIR))).build(); + } + + return this.golemBasePattern; + } + + protected BlockPattern getGolemPattern() + { + if (this.golemPattern == null) + { + this.golemPattern = FactoryBlockPattern.start().aisle("~^~", "###", "~#~").where('^', BlockWorldState.hasState(IS_PUMPKIN)).where('#', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.IRON_BLOCK))).where('~', BlockWorldState.hasState(BlockMaterialMatcher.forMaterial(Material.AIR))).build(); + } + + return this.golemPattern; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockPurpurSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPurpurSlab.java new file mode 100644 index 0000000..7bf6722 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockPurpurSlab.java @@ -0,0 +1,127 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class BlockPurpurSlab extends BlockSlab +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPurpurSlab.Variant.class); + + public BlockPurpurSlab() + { + super(Material.ROCK, MapColor.MAGENTA); + IBlockState iblockstate = this.blockState.getBaseState(); + + if (!this.isDouble()) + { + iblockstate = iblockstate.withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); + } + + this.setDefaultState(iblockstate.withProperty(VARIANT, BlockPurpurSlab.Variant.DEFAULT)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.PURPUR_SLAB); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.PURPUR_SLAB); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPurpurSlab.Variant.DEFAULT); + + if (!this.isDouble()) + { + iblockstate = iblockstate.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + if (!this.isDouble() && state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return this.isDouble() ? new BlockStateContainer(this, new IProperty[] {VARIANT}) : new BlockStateContainer(this, new IProperty[] {HALF, VARIANT}); + } + + /** + * Returns the slab block name with the type associated with it + */ + public String getUnlocalizedName(int meta) + { + return super.getUnlocalizedName(); + } + + public IProperty getVariantProperty() + { + return VARIANT; + } + + public Comparable getTypeForItem(ItemStack stack) + { + return BlockPurpurSlab.Variant.DEFAULT; + } + + public static class Double extends BlockPurpurSlab + { + public boolean isDouble() + { + return true; + } + } + + public static class Half extends BlockPurpurSlab + { + public boolean isDouble() + { + return false; + } + } + + public static enum Variant implements IStringSerializable + { + DEFAULT; + + public String getName() + { + return "default"; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockQuartz.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockQuartz.java new file mode 100644 index 0000000..b3f0e4b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockQuartz.java @@ -0,0 +1,208 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockQuartz extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockQuartz.EnumType.class); + + public BlockQuartz() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockQuartz.EnumType.DEFAULT)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + if (meta == BlockQuartz.EnumType.LINES_Y.getMetadata()) + { + switch (facing.getAxis()) + { + case Z: + return this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.LINES_Z); + case X: + return this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.LINES_X); + case Y: + return this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.LINES_Y); + } + } + + return meta == BlockQuartz.EnumType.CHISELED.getMetadata() ? this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.CHISELED) : this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.DEFAULT); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + BlockQuartz.EnumType blockquartz$enumtype = (BlockQuartz.EnumType)state.getValue(VARIANT); + return blockquartz$enumtype != BlockQuartz.EnumType.LINES_X && blockquartz$enumtype != BlockQuartz.EnumType.LINES_Z ? blockquartz$enumtype.getMetadata() : BlockQuartz.EnumType.LINES_Y.getMetadata(); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + BlockQuartz.EnumType blockquartz$enumtype = (BlockQuartz.EnumType)state.getValue(VARIANT); + return blockquartz$enumtype != BlockQuartz.EnumType.LINES_X && blockquartz$enumtype != BlockQuartz.EnumType.LINES_Z ? super.getSilkTouchDrop(state) : new ItemStack(Item.getItemFromBlock(this), 1, BlockQuartz.EnumType.LINES_Y.getMetadata()); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, BlockQuartz.EnumType.DEFAULT.getMetadata())); + items.add(new ItemStack(this, 1, BlockQuartz.EnumType.CHISELED.getMetadata())); + items.add(new ItemStack(this, 1, BlockQuartz.EnumType.LINES_Y.getMetadata())); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.QUARTZ; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockQuartz.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockQuartz.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case COUNTERCLOCKWISE_90: + case CLOCKWISE_90: + + switch ((BlockQuartz.EnumType)state.getValue(VARIANT)) + { + case LINES_X: + return state.withProperty(VARIANT, BlockQuartz.EnumType.LINES_Z); + case LINES_Z: + return state.withProperty(VARIANT, BlockQuartz.EnumType.LINES_X); + default: + return state; + } + + default: + return state; + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + IBlockState state = world.getBlockState(pos); + for (IProperty prop : state.getProperties().keySet()) + { + if (prop.getName().equals("variant") && prop.getValueClass() == EnumType.class) + { + EnumType current = (EnumType)state.getValue(prop); + EnumType next = current == EnumType.LINES_X ? EnumType.LINES_Y : + current == EnumType.LINES_Y ? EnumType.LINES_Z : + current == EnumType.LINES_Z ? EnumType.LINES_X : current; + if (next == current) + return false; + world.setBlockState(pos, state.withProperty(prop, next)); + return true; + } + } + return false; + } + + public static enum EnumType implements IStringSerializable + { + DEFAULT(0, "default", "default"), + CHISELED(1, "chiseled", "chiseled"), + LINES_Y(2, "lines_y", "lines"), + LINES_X(3, "lines_x", "lines"), + LINES_Z(4, "lines_z", "lines"); + + private static final BlockQuartz.EnumType[] META_LOOKUP = new BlockQuartz.EnumType[values().length]; + private final int meta; + private final String serializedName; + private final String unlocalizedName; + + private EnumType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.serializedName = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.unlocalizedName; + } + + public static BlockQuartz.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.serializedName; + } + + static + { + for (BlockQuartz.EnumType blockquartz$enumtype : values()) + { + META_LOOKUP[blockquartz$enumtype.getMetadata()] = blockquartz$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRail.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRail.java new file mode 100644 index 0000000..a8bd043 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRail.java @@ -0,0 +1,200 @@ +package net.minecraft.block; + +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockRail extends BlockRailBase +{ + public static final PropertyEnum SHAPE = PropertyEnum.create("shape", BlockRailBase.EnumRailDirection.class); + + protected BlockRail() + { + super(false); + this.setDefaultState(this.blockState.getBaseState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH)); + } + + protected void updateState(IBlockState state, World worldIn, BlockPos pos, Block blockIn) + { + if (blockIn.getDefaultState().canProvidePower() && (new BlockRailBase.Rail(worldIn, pos, state)).countAdjacentRails() == 3) + { + this.updateDir(worldIn, pos, state, false); + } + } + + public IProperty getShapeProperty() + { + return SHAPE; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)).getMetadata(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + } + + case COUNTERCLOCKWISE_90: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.EAST_WEST); + case EAST_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH); + } + + case CLOCKWISE_90: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.EAST_WEST); + case EAST_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH); + } + + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)state.getValue(SHAPE); + + switch (mirrorIn) + { + case LEFT_RIGHT: + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + default: + return super.withMirror(state, mirrorIn); + } + + case FRONT_BACK: + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_NORTH: + case ASCENDING_SOUTH: + default: + break; + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + } + } + + return super.withMirror(state, mirrorIn); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {SHAPE}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailBase.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailBase.java new file mode 100644 index 0000000..461f500 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailBase.java @@ -0,0 +1,783 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class BlockRailBase extends Block +{ + protected static final AxisAlignedBB FLAT_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D); + protected static final AxisAlignedBB ASCENDING_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); + protected final boolean isPowered; + + public static boolean isRailBlock(World worldIn, BlockPos pos) + { + return isRailBlock(worldIn.getBlockState(pos)); + } + + public static boolean isRailBlock(IBlockState state) + { + Block block = state.getBlock(); + return block instanceof BlockRailBase; + } + + protected BlockRailBase(boolean isPowered) + { + super(Material.CIRCUITS); + this.isPowered = isPowered; + this.setCreativeTab(CreativeTabs.TRANSPORTATION); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = state.getBlock() == this ? getRailDirection(source, pos, state, null) : null; + return blockrailbase$enumraildirection != null && blockrailbase$enumraildirection.isAscending() ? ASCENDING_AABB : FLAT_AABB; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + state = this.updateDir(worldIn, pos, state, true); + + if (this.isPowered) + { + state.neighborChanged(worldIn, pos, this, pos); + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = getRailDirection(worldIn, pos, worldIn.getBlockState(pos), null); + boolean flag = false; + + if (!worldIn.getBlockState(pos.down()).isSideSolid(worldIn, pos.down(), EnumFacing.UP)) + { + flag = true; + } + + if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.ASCENDING_EAST && !worldIn.getBlockState(pos.east()).isSideSolid(worldIn, pos.east(), EnumFacing.UP)) + { + flag = true; + } + else if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.ASCENDING_WEST && !worldIn.getBlockState(pos.west()).isSideSolid(worldIn, pos.west(), EnumFacing.UP)) + { + flag = true; + } + else if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.ASCENDING_NORTH && !worldIn.getBlockState(pos.north()).isSideSolid(worldIn, pos.north(), EnumFacing.UP)) + { + flag = true; + } + else if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.ASCENDING_SOUTH && !worldIn.getBlockState(pos.south()).isSideSolid(worldIn, pos.south(), EnumFacing.UP)) + { + flag = true; + } + + if (flag && !worldIn.isAirBlock(pos)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + else + { + this.updateState(state, worldIn, pos, blockIn); + } + } + } + + protected void updateState(IBlockState state, World worldIn, BlockPos pos, Block blockIn) + { + } + + protected IBlockState updateDir(World worldIn, BlockPos pos, IBlockState state, boolean initialPlacement) + { + return worldIn.isRemote ? state : (new BlockRailBase.Rail(worldIn, pos, state)).place(worldIn.isBlockPowered(pos), initialPlacement).getBlockState(); + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.NORMAL; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + + if (getRailDirection(worldIn, pos, state, null).isAscending()) + { + worldIn.notifyNeighborsOfStateChange(pos.up(), this, false); + } + + if (this.isPowered) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.down(), this, false); + } + } + + //Forge: Use getRailDirection(IBlockAccess, BlockPos, IBlockState, EntityMinecart) for enhanced ability + public abstract IProperty getShapeProperty(); + + /* ======================================== FORGE START =====================================*/ + /** + * Return true if the rail can make corners. + * Used by placement logic. + * @param world The world. + * @param pos Block's position in world + * @return True if the rail can make corners. + */ + public boolean isFlexibleRail(IBlockAccess world, BlockPos pos) + { + return !this.isPowered; + } + + /** + * Returns true if the rail can make up and down slopes. + * Used by placement logic. + * @param world The world. + * @param pos Block's position in world + * @return True if the rail can make slopes. + */ + public boolean canMakeSlopes(IBlockAccess world, BlockPos pos) + { + return true; + } + + /** + * Return the rail's direction. + * Can be used to make the cart think the rail is a different shape, + * for example when making diamond junctions or switches. + * The cart parameter will often be null unless it it called from EntityMinecart. + * + * @param world The world. + * @param pos Block's position in world + * @param state The BlockState + * @param cart The cart asking for the metadata, null if it is not called by EntityMinecart. + * @return The direction. + */ + public EnumRailDirection getRailDirection(IBlockAccess world, BlockPos pos, IBlockState state, @javax.annotation.Nullable net.minecraft.entity.item.EntityMinecart cart) + { + return state.getValue(getShapeProperty()); + } + + /** + * Returns the max speed of the rail at the specified position. + * @param world The world. + * @param cart The cart on the rail, may be null. + * @param pos Block's position in world + * @return The max speed of the current rail. + */ + public float getRailMaxSpeed(World world, net.minecraft.entity.item.EntityMinecart cart, BlockPos pos) + { + return 0.4f; + } + + /** + * This function is called by any minecart that passes over this rail. + * It is called once per update tick that the minecart is on the rail. + * @param world The world. + * @param cart The cart on the rail. + * @param pos Block's position in world + */ + public void onMinecartPass(World world, net.minecraft.entity.item.EntityMinecart cart, BlockPos pos) + { + } + + /** + * Rotate the block. For vanilla blocks this rotates around the axis passed in (generally, it should be the "face" that was hit). + * Note: for mod blocks, this is up to the block and modder to decide. It is not mandated that it be a rotation around the + * face, but could be a rotation to orient *to* that face, or a visiting of possible rotations. + * The method should return true if the rotation was successful though. + * + * @param world The world + * @param pos Block position in world + * @param axis The axis to rotate around + * @return True if the rotation was successful, False if the rotation failed, or is not possible + */ + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + IBlockState state = world.getBlockState(pos); + for (IProperty prop : state.getProperties().keySet()) + { + if (prop.getName().equals("shape")) + { + world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } + return false; + } + + /* ======================================== FORGE END =====================================*/ + + public static enum EnumRailDirection implements IStringSerializable + { + NORTH_SOUTH(0, "north_south"), + EAST_WEST(1, "east_west"), + ASCENDING_EAST(2, "ascending_east"), + ASCENDING_WEST(3, "ascending_west"), + ASCENDING_NORTH(4, "ascending_north"), + ASCENDING_SOUTH(5, "ascending_south"), + SOUTH_EAST(6, "south_east"), + SOUTH_WEST(7, "south_west"), + NORTH_WEST(8, "north_west"), + NORTH_EAST(9, "north_east"); + + private static final BlockRailBase.EnumRailDirection[] META_LOOKUP = new BlockRailBase.EnumRailDirection[values().length]; + private final int meta; + private final String name; + + private EnumRailDirection(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public boolean isAscending() + { + return this == ASCENDING_NORTH || this == ASCENDING_EAST || this == ASCENDING_SOUTH || this == ASCENDING_WEST; + } + + public static BlockRailBase.EnumRailDirection byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + static + { + for (BlockRailBase.EnumRailDirection blockrailbase$enumraildirection : values()) + { + META_LOOKUP[blockrailbase$enumraildirection.getMetadata()] = blockrailbase$enumraildirection; + } + } + } + + public class Rail + { + private final World world; + private final BlockPos pos; + private final BlockRailBase block; + private IBlockState state; + private final boolean isPowered; + private final List connectedRails = Lists.newArrayList(); + private final boolean canMakeSlopes; + + public Rail(World worldIn, BlockPos pos, IBlockState state) + { + this.world = worldIn; + this.pos = pos; + this.state = state; + this.block = (BlockRailBase)state.getBlock(); + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = block.getRailDirection(worldIn, pos, state, null); + this.isPowered = !this.block.isFlexibleRail(worldIn, pos); + this.canMakeSlopes = this.block.canMakeSlopes(worldIn, pos); + this.updateConnectedRails(blockrailbase$enumraildirection); + } + + public List getConnectedRails() + { + return this.connectedRails; + } + + private void updateConnectedRails(BlockRailBase.EnumRailDirection railDirection) + { + this.connectedRails.clear(); + + switch (railDirection) + { + case NORTH_SOUTH: + this.connectedRails.add(this.pos.north()); + this.connectedRails.add(this.pos.south()); + break; + case EAST_WEST: + this.connectedRails.add(this.pos.west()); + this.connectedRails.add(this.pos.east()); + break; + case ASCENDING_EAST: + this.connectedRails.add(this.pos.west()); + this.connectedRails.add(this.pos.east().up()); + break; + case ASCENDING_WEST: + this.connectedRails.add(this.pos.west().up()); + this.connectedRails.add(this.pos.east()); + break; + case ASCENDING_NORTH: + this.connectedRails.add(this.pos.north().up()); + this.connectedRails.add(this.pos.south()); + break; + case ASCENDING_SOUTH: + this.connectedRails.add(this.pos.north()); + this.connectedRails.add(this.pos.south().up()); + break; + case SOUTH_EAST: + this.connectedRails.add(this.pos.east()); + this.connectedRails.add(this.pos.south()); + break; + case SOUTH_WEST: + this.connectedRails.add(this.pos.west()); + this.connectedRails.add(this.pos.south()); + break; + case NORTH_WEST: + this.connectedRails.add(this.pos.west()); + this.connectedRails.add(this.pos.north()); + break; + case NORTH_EAST: + this.connectedRails.add(this.pos.east()); + this.connectedRails.add(this.pos.north()); + } + } + + private void removeSoftConnections() + { + for (int i = 0; i < this.connectedRails.size(); ++i) + { + BlockRailBase.Rail blockrailbase$rail = this.findRailAt(this.connectedRails.get(i)); + + if (blockrailbase$rail != null && blockrailbase$rail.isConnectedToRail(this)) + { + this.connectedRails.set(i, blockrailbase$rail.pos); + } + else + { + this.connectedRails.remove(i--); + } + } + } + + private boolean hasRailAt(BlockPos pos) + { + return BlockRailBase.isRailBlock(this.world, pos) || BlockRailBase.isRailBlock(this.world, pos.up()) || BlockRailBase.isRailBlock(this.world, pos.down()); + } + + @Nullable + private BlockRailBase.Rail findRailAt(BlockPos pos) + { + IBlockState iblockstate = this.world.getBlockState(pos); + + if (BlockRailBase.isRailBlock(iblockstate)) + { + return BlockRailBase.this.new Rail(this.world, pos, iblockstate); + } + else + { + BlockPos lvt_2_1_ = pos.up(); + iblockstate = this.world.getBlockState(lvt_2_1_); + + if (BlockRailBase.isRailBlock(iblockstate)) + { + return BlockRailBase.this.new Rail(this.world, lvt_2_1_, iblockstate); + } + else + { + lvt_2_1_ = pos.down(); + iblockstate = this.world.getBlockState(lvt_2_1_); + return BlockRailBase.isRailBlock(iblockstate) ? BlockRailBase.this.new Rail(this.world, lvt_2_1_, iblockstate) : null; + } + } + } + + private boolean isConnectedToRail(BlockRailBase.Rail rail) + { + return this.isConnectedTo(rail.pos); + } + + private boolean isConnectedTo(BlockPos posIn) + { + for (int i = 0; i < this.connectedRails.size(); ++i) + { + BlockPos blockpos = this.connectedRails.get(i); + + if (blockpos.getX() == posIn.getX() && blockpos.getZ() == posIn.getZ()) + { + return true; + } + } + + return false; + } + + /** + * Counts the number of rails adjacent to this rail. + */ + protected int countAdjacentRails() + { + int i = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.hasRailAt(this.pos.offset(enumfacing))) + { + ++i; + } + } + + return i; + } + + private boolean canConnectTo(BlockRailBase.Rail rail) + { + return this.isConnectedToRail(rail) || this.connectedRails.size() != 2; + } + + private void connectTo(BlockRailBase.Rail rail) + { + this.connectedRails.add(rail.pos); + BlockPos blockpos = this.pos.north(); + BlockPos blockpos1 = this.pos.south(); + BlockPos blockpos2 = this.pos.west(); + BlockPos blockpos3 = this.pos.east(); + boolean flag = this.isConnectedTo(blockpos); + boolean flag1 = this.isConnectedTo(blockpos1); + boolean flag2 = this.isConnectedTo(blockpos2); + boolean flag3 = this.isConnectedTo(blockpos3); + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = null; + + if (flag || flag1) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + } + + if (flag2 || flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.EAST_WEST; + } + + if (!this.isPowered) + { + if (flag1 && flag3 && !flag && !flag2) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_EAST; + } + + if (flag1 && flag2 && !flag && !flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_WEST; + } + + if (flag && flag2 && !flag1 && !flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_WEST; + } + + if (flag && flag3 && !flag1 && !flag2) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_EAST; + } + } + + if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH && canMakeSlopes) + { + if (BlockRailBase.isRailBlock(this.world, blockpos.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_NORTH; + } + + if (BlockRailBase.isRailBlock(this.world, blockpos1.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_SOUTH; + } + } + + if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST && canMakeSlopes) + { + if (BlockRailBase.isRailBlock(this.world, blockpos3.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_EAST; + } + + if (BlockRailBase.isRailBlock(this.world, blockpos2.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_WEST; + } + } + + if (blockrailbase$enumraildirection == null) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + } + + this.state = this.state.withProperty(this.block.getShapeProperty(), blockrailbase$enumraildirection); + this.world.setBlockState(this.pos, this.state, 3); + } + + private boolean hasNeighborRail(BlockPos posIn) + { + BlockRailBase.Rail blockrailbase$rail = this.findRailAt(posIn); + + if (blockrailbase$rail == null) + { + return false; + } + else + { + blockrailbase$rail.removeSoftConnections(); + return blockrailbase$rail.canConnectTo(this); + } + } + + public BlockRailBase.Rail place(boolean powered, boolean initialPlacement) + { + BlockPos blockpos = this.pos.north(); + BlockPos blockpos1 = this.pos.south(); + BlockPos blockpos2 = this.pos.west(); + BlockPos blockpos3 = this.pos.east(); + boolean flag = this.hasNeighborRail(blockpos); + boolean flag1 = this.hasNeighborRail(blockpos1); + boolean flag2 = this.hasNeighborRail(blockpos2); + boolean flag3 = this.hasNeighborRail(blockpos3); + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = null; + + if ((flag || flag1) && !flag2 && !flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + } + + if ((flag2 || flag3) && !flag && !flag1) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.EAST_WEST; + } + + if (!this.isPowered) + { + if (flag1 && flag3 && !flag && !flag2) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_EAST; + } + + if (flag1 && flag2 && !flag && !flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_WEST; + } + + if (flag && flag2 && !flag1 && !flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_WEST; + } + + if (flag && flag3 && !flag1 && !flag2) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_EAST; + } + } + + if (blockrailbase$enumraildirection == null) + { + if (flag || flag1) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + } + + if (flag2 || flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.EAST_WEST; + } + + if (!this.isPowered) + { + if (powered) + { + if (flag1 && flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_EAST; + } + + if (flag2 && flag1) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_WEST; + } + + if (flag3 && flag) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_EAST; + } + + if (flag && flag2) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_WEST; + } + } + else + { + if (flag && flag2) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_WEST; + } + + if (flag3 && flag) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_EAST; + } + + if (flag2 && flag1) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_WEST; + } + + if (flag1 && flag3) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.SOUTH_EAST; + } + } + } + } + + if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH && canMakeSlopes) + { + if (BlockRailBase.isRailBlock(this.world, blockpos.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_NORTH; + } + + if (BlockRailBase.isRailBlock(this.world, blockpos1.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_SOUTH; + } + } + + if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST && canMakeSlopes) + { + if (BlockRailBase.isRailBlock(this.world, blockpos3.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_EAST; + } + + if (BlockRailBase.isRailBlock(this.world, blockpos2.up())) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.ASCENDING_WEST; + } + } + + if (blockrailbase$enumraildirection == null) + { + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + } + + this.updateConnectedRails(blockrailbase$enumraildirection); + this.state = this.state.withProperty(this.block.getShapeProperty(), blockrailbase$enumraildirection); + + if (initialPlacement || this.world.getBlockState(this.pos) != this.state) + { + this.world.setBlockState(this.pos, this.state, 3); + + for (int i = 0; i < this.connectedRails.size(); ++i) + { + BlockRailBase.Rail blockrailbase$rail = this.findRailAt(this.connectedRails.get(i)); + + if (blockrailbase$rail != null) + { + blockrailbase$rail.removeSoftConnections(); + + if (blockrailbase$rail.canConnectTo(this)) + { + blockrailbase$rail.connectTo(this); + } + } + } + } + + return this; + } + + public IBlockState getBlockState() + { + return this.state; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailDetector.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailDetector.java new file mode 100644 index 0000000..1d14676 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailDetector.java @@ -0,0 +1,386 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityMinecartCommandBlock; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockRailDetector extends BlockRailBase +{ + public static final PropertyEnum SHAPE = PropertyEnum.create("shape", BlockRailBase.EnumRailDirection.class, new Predicate() + { + public boolean apply(@Nullable BlockRailBase.EnumRailDirection p_apply_1_) + { + return p_apply_1_ != BlockRailBase.EnumRailDirection.NORTH_EAST && p_apply_1_ != BlockRailBase.EnumRailDirection.NORTH_WEST && p_apply_1_ != BlockRailBase.EnumRailDirection.SOUTH_EAST && p_apply_1_ != BlockRailBase.EnumRailDirection.SOUTH_WEST; + } + }); + public static final PropertyBool POWERED = PropertyBool.create("powered"); + + public BlockRailDetector() + { + super(true); + this.setDefaultState(this.blockState.getBaseState().withProperty(POWERED, Boolean.valueOf(false)).withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH)); + this.setTickRandomly(true); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 20; + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote) + { + if (!((Boolean)state.getValue(POWERED)).booleanValue()) + { + this.updatePoweredState(worldIn, pos, state); + } + } + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote && ((Boolean)state.getValue(POWERED)).booleanValue()) + { + this.updatePoweredState(worldIn, pos, state); + } + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return ((Boolean)blockState.getValue(POWERED)).booleanValue() ? 15 : 0; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!((Boolean)blockState.getValue(POWERED)).booleanValue()) + { + return 0; + } + else + { + return side == EnumFacing.UP ? 15 : 0; + } + } + + private void updatePoweredState(World worldIn, BlockPos pos, IBlockState state) + { + boolean flag = ((Boolean)state.getValue(POWERED)).booleanValue(); + boolean flag1 = false; + List list = this.findMinecarts(worldIn, pos, EntityMinecart.class); + + if (!list.isEmpty()) + { + flag1 = true; + } + + if (flag1 && !flag) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 3); + this.updateConnectedRails(worldIn, pos, state, true); + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.down(), this, false); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + } + + if (!flag1 && flag) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false)), 3); + this.updateConnectedRails(worldIn, pos, state, false); + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.down(), this, false); + worldIn.markBlockRangeForRenderUpdate(pos, pos); + } + + if (flag1) + { + worldIn.scheduleUpdate(new BlockPos(pos), this, this.tickRate(worldIn)); + } + + worldIn.updateComparatorOutputLevel(pos, this); + } + + protected void updateConnectedRails(World worldIn, BlockPos pos, IBlockState state, boolean powered) + { + BlockRailBase.Rail blockrailbase$rail = new BlockRailBase.Rail(worldIn, pos, state); + + for (BlockPos blockpos : blockrailbase$rail.getConnectedRails()) + { + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate != null) + { + iblockstate.neighborChanged(worldIn, blockpos, iblockstate.getBlock(), pos); + } + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + this.updatePoweredState(worldIn, pos, state); + } + + public IProperty getShapeProperty() + { + return SHAPE; + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + if (((Boolean)blockState.getValue(POWERED)).booleanValue()) + { + List carts = this.findMinecarts(worldIn, pos, EntityMinecart.class); + if (!carts.isEmpty() && carts.get(0).getComparatorLevel() > -1) return carts.get(0).getComparatorLevel(); + List list = this.findMinecarts(worldIn, pos, EntityMinecartCommandBlock.class); + + if (!list.isEmpty()) + { + return ((EntityMinecartCommandBlock)list.get(0)).getCommandBlockLogic().getSuccessCount(); + } + + List list1 = this.findMinecarts(worldIn, pos, EntityMinecart.class, EntitySelectors.HAS_INVENTORY); + + if (!list1.isEmpty()) + { + return Container.calcRedstoneFromInventory((IInventory)list1.get(0)); + } + } + + return 0; + } + + protected List findMinecarts(World worldIn, BlockPos pos, Class clazz, Predicate... filter) + { + AxisAlignedBB axisalignedbb = this.getDectectionBox(pos); + return filter.length != 1 ? worldIn.getEntitiesWithinAABB(clazz, axisalignedbb) : worldIn.getEntitiesWithinAABB(clazz, axisalignedbb, filter[0]); + } + + private AxisAlignedBB getDectectionBox(BlockPos pos) + { + float f = 0.2F; + return new AxisAlignedBB((double)((float)pos.getX() + 0.2F), (double)pos.getY(), (double)((float)pos.getZ() + 0.2F), (double)((float)(pos.getX() + 1) - 0.2F), (double)((float)(pos.getY() + 1) - 0.2F), (double)((float)(pos.getZ() + 1) - 0.2F)); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.byMetadata(meta & 7)).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)).getMetadata(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + } + + case COUNTERCLOCKWISE_90: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.EAST_WEST); + case EAST_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH); + } + + case CLOCKWISE_90: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.EAST_WEST); + case EAST_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH); + } + + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)state.getValue(SHAPE); + + switch (mirrorIn) + { + case LEFT_RIGHT: + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + default: + return super.withMirror(state, mirrorIn); + } + + case FRONT_BACK: + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_NORTH: + case ASCENDING_SOUTH: + default: + break; + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + } + } + + return super.withMirror(state, mirrorIn); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {SHAPE, POWERED}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailPowered.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailPowered.java new file mode 100644 index 0000000..2a2626f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRailPowered.java @@ -0,0 +1,385 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockRailPowered extends BlockRailBase +{ + public static final PropertyEnum SHAPE = PropertyEnum.create("shape", BlockRailBase.EnumRailDirection.class, new Predicate() + { + public boolean apply(@Nullable BlockRailBase.EnumRailDirection p_apply_1_) + { + return p_apply_1_ != BlockRailBase.EnumRailDirection.NORTH_EAST && p_apply_1_ != BlockRailBase.EnumRailDirection.NORTH_WEST && p_apply_1_ != BlockRailBase.EnumRailDirection.SOUTH_EAST && p_apply_1_ != BlockRailBase.EnumRailDirection.SOUTH_WEST; + } + }); + public static final PropertyBool POWERED = PropertyBool.create("powered"); + + private final boolean isActivator; + + protected BlockRailPowered() + { + this(false); + } + + protected BlockRailPowered(boolean isActivator) + { + super(true); + this.isActivator = isActivator; + this.setDefaultState(this.blockState.getBaseState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH).withProperty(POWERED, Boolean.valueOf(false))); + } + + @SuppressWarnings("incomplete-switch") + protected boolean findPoweredRailSignal(World worldIn, BlockPos pos, IBlockState state, boolean p_176566_4_, int p_176566_5_) + { + if (p_176566_5_ >= 8) + { + return false; + } + else + { + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + boolean flag = true; + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)state.getValue(SHAPE); + + switch (blockrailbase$enumraildirection) + { + case NORTH_SOUTH: + + if (p_176566_4_) + { + ++k; + } + else + { + --k; + } + + break; + case EAST_WEST: + + if (p_176566_4_) + { + --i; + } + else + { + ++i; + } + + break; + case ASCENDING_EAST: + + if (p_176566_4_) + { + --i; + } + else + { + ++i; + ++j; + flag = false; + } + + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.EAST_WEST; + break; + case ASCENDING_WEST: + + if (p_176566_4_) + { + --i; + ++j; + flag = false; + } + else + { + ++i; + } + + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.EAST_WEST; + break; + case ASCENDING_NORTH: + + if (p_176566_4_) + { + ++k; + } + else + { + --k; + ++j; + flag = false; + } + + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + break; + case ASCENDING_SOUTH: + + if (p_176566_4_) + { + ++k; + ++j; + flag = false; + } + else + { + --k; + } + + blockrailbase$enumraildirection = BlockRailBase.EnumRailDirection.NORTH_SOUTH; + } + + if (this.isSameRailWithPower(worldIn, new BlockPos(i, j, k), p_176566_4_, p_176566_5_, blockrailbase$enumraildirection)) + { + return true; + } + else + { + return flag && this.isSameRailWithPower(worldIn, new BlockPos(i, j - 1, k), p_176566_4_, p_176566_5_, blockrailbase$enumraildirection); + } + } + } + + protected boolean isSameRailWithPower(World worldIn, BlockPos pos, boolean p_176567_3_, int distance, BlockRailBase.EnumRailDirection p_176567_5_) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (!(iblockstate.getBlock() instanceof BlockRailPowered) || isActivator != ((BlockRailPowered)iblockstate.getBlock()).isActivator) + { + return false; + } + else + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)iblockstate.getValue(SHAPE); + + if (p_176567_5_ != BlockRailBase.EnumRailDirection.EAST_WEST || blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.NORTH_SOUTH && blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.ASCENDING_NORTH && blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.ASCENDING_SOUTH) + { + if (p_176567_5_ != BlockRailBase.EnumRailDirection.NORTH_SOUTH || blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.EAST_WEST && blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.ASCENDING_EAST && blockrailbase$enumraildirection != BlockRailBase.EnumRailDirection.ASCENDING_WEST) + { + if (((Boolean)iblockstate.getValue(POWERED)).booleanValue()) + { + return worldIn.isBlockPowered(pos) ? true : this.findPoweredRailSignal(worldIn, pos, iblockstate, p_176567_3_, distance + 1); + } + else + { + return false; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + } + + protected void updateState(IBlockState state, World worldIn, BlockPos pos, Block blockIn) + { + boolean flag = ((Boolean)state.getValue(POWERED)).booleanValue(); + boolean flag1 = worldIn.isBlockPowered(pos) || this.findPoweredRailSignal(worldIn, pos, state, true, 0) || this.findPoweredRailSignal(worldIn, pos, state, false, 0); + + if (flag1 != flag) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(flag1)), 3); + worldIn.notifyNeighborsOfStateChange(pos.down(), this, false); + + if (((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)).isAscending()) + { + worldIn.notifyNeighborsOfStateChange(pos.up(), this, false); + } + } + } + + public IProperty getShapeProperty() + { + return SHAPE; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(SHAPE, BlockRailBase.EnumRailDirection.byMetadata(meta & 7)).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)).getMetadata(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + } + + case COUNTERCLOCKWISE_90: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case NORTH_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.EAST_WEST); + case EAST_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH); + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + } + + case CLOCKWISE_90: + + switch ((BlockRailBase.EnumRailDirection)state.getValue(SHAPE)) + { + case NORTH_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.EAST_WEST); + case EAST_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_SOUTH); + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + } + + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)state.getValue(SHAPE); + + switch (mirrorIn) + { + case LEFT_RIGHT: + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_NORTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_SOUTH); + case ASCENDING_SOUTH: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_NORTH); + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + default: + return super.withMirror(state, mirrorIn); + } + + case FRONT_BACK: + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_WEST); + case ASCENDING_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.ASCENDING_EAST); + case ASCENDING_NORTH: + case ASCENDING_SOUTH: + default: + break; + case SOUTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_WEST); + case SOUTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.SOUTH_EAST); + case NORTH_WEST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_EAST); + case NORTH_EAST: + return state.withProperty(SHAPE, BlockRailBase.EnumRailDirection.NORTH_WEST); + } + } + + return super.withMirror(state, mirrorIn); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {SHAPE, POWERED}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedFlower.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedFlower.java new file mode 100644 index 0000000..d3b592c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedFlower.java @@ -0,0 +1,12 @@ +package net.minecraft.block; + +public class BlockRedFlower extends BlockFlower +{ + /** + * Get the Type of this flower (Yellow/Red) + */ + public BlockFlower.EnumFlowerColor getBlockType() + { + return BlockFlower.EnumFlowerColor.RED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedSandstone.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedSandstone.java new file mode 100644 index 0000000..8afab8f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedSandstone.java @@ -0,0 +1,121 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; + +public class BlockRedSandstone extends Block +{ + public static final PropertyEnum TYPE = PropertyEnum.create("type", BlockRedSandstone.EnumType.class); + + public BlockRedSandstone() + { + super(Material.ROCK, BlockSand.EnumType.RED_SAND.getMapColor()); + this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, BlockRedSandstone.EnumType.DEFAULT)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockRedSandstone.EnumType)state.getValue(TYPE)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockRedSandstone.EnumType blockredsandstone$enumtype : BlockRedSandstone.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockredsandstone$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(TYPE, BlockRedSandstone.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockRedSandstone.EnumType)state.getValue(TYPE)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {TYPE}); + } + + public static enum EnumType implements IStringSerializable + { + DEFAULT(0, "red_sandstone", "default"), + CHISELED(1, "chiseled_red_sandstone", "chiseled"), + SMOOTH(2, "smooth_red_sandstone", "smooth"); + + private static final BlockRedSandstone.EnumType[] META_LOOKUP = new BlockRedSandstone.EnumType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockRedSandstone.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockRedSandstone.EnumType blockredsandstone$enumtype : values()) + { + META_LOOKUP[blockredsandstone$enumtype.getMetadata()] = blockredsandstone$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneComparator.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneComparator.java new file mode 100644 index 0000000..a794da0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneComparator.java @@ -0,0 +1,400 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityComparator; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockRedstoneComparator extends BlockRedstoneDiode implements ITileEntityProvider +{ + public static final PropertyBool POWERED = PropertyBool.create("powered"); + public static final PropertyEnum MODE = PropertyEnum.create("mode", BlockRedstoneComparator.Mode.class); + + public BlockRedstoneComparator(boolean powered) + { + super(powered); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(POWERED, Boolean.valueOf(false)).withProperty(MODE, BlockRedstoneComparator.Mode.COMPARE)); + this.hasTileEntity = true; + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal("item.comparator.name"); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.COMPARATOR; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.COMPARATOR); + } + + protected int getDelay(IBlockState state) + { + return 2; + } + + protected IBlockState getPoweredState(IBlockState unpoweredState) + { + Boolean obool = (Boolean)unpoweredState.getValue(POWERED); + BlockRedstoneComparator.Mode blockredstonecomparator$mode = (BlockRedstoneComparator.Mode)unpoweredState.getValue(MODE); + EnumFacing enumfacing = (EnumFacing)unpoweredState.getValue(FACING); + return Blocks.POWERED_COMPARATOR.getDefaultState().withProperty(FACING, enumfacing).withProperty(POWERED, obool).withProperty(MODE, blockredstonecomparator$mode); + } + + protected IBlockState getUnpoweredState(IBlockState poweredState) + { + Boolean obool = (Boolean)poweredState.getValue(POWERED); + BlockRedstoneComparator.Mode blockredstonecomparator$mode = (BlockRedstoneComparator.Mode)poweredState.getValue(MODE); + EnumFacing enumfacing = (EnumFacing)poweredState.getValue(FACING); + return Blocks.UNPOWERED_COMPARATOR.getDefaultState().withProperty(FACING, enumfacing).withProperty(POWERED, obool).withProperty(MODE, blockredstonecomparator$mode); + } + + protected boolean isPowered(IBlockState state) + { + return this.isRepeaterPowered || ((Boolean)state.getValue(POWERED)).booleanValue(); + } + + protected int getActiveSignal(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity instanceof TileEntityComparator ? ((TileEntityComparator)tileentity).getOutputSignal() : 0; + } + + private int calculateOutput(World worldIn, BlockPos pos, IBlockState state) + { + return state.getValue(MODE) == BlockRedstoneComparator.Mode.SUBTRACT ? Math.max(this.calculateInputStrength(worldIn, pos, state) - this.getPowerOnSides(worldIn, pos, state), 0) : this.calculateInputStrength(worldIn, pos, state); + } + + protected boolean shouldBePowered(World worldIn, BlockPos pos, IBlockState state) + { + int i = this.calculateInputStrength(worldIn, pos, state); + + if (i >= 15) + { + return true; + } + else if (i == 0) + { + return false; + } + else + { + int j = this.getPowerOnSides(worldIn, pos, state); + + if (j == 0) + { + return true; + } + else + { + return i >= j; + } + } + } + + protected int calculateInputStrength(World worldIn, BlockPos pos, IBlockState state) + { + int i = super.calculateInputStrength(worldIn, pos, state); + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.hasComparatorInputOverride()) + { + i = iblockstate.getComparatorInputOverride(worldIn, blockpos); + } + else if (i < 15 && iblockstate.isNormalCube()) + { + blockpos = blockpos.offset(enumfacing); + iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.hasComparatorInputOverride()) + { + i = iblockstate.getComparatorInputOverride(worldIn, blockpos); + } + else if (iblockstate.getMaterial() == Material.AIR) + { + EntityItemFrame entityitemframe = this.findItemFrame(worldIn, enumfacing, blockpos); + + if (entityitemframe != null) + { + i = entityitemframe.getAnalogOutput(); + } + } + } + + return i; + } + + @Nullable + private EntityItemFrame findItemFrame(World worldIn, final EnumFacing facing, BlockPos pos) + { + List list = worldIn.getEntitiesWithinAABB(EntityItemFrame.class, new AxisAlignedBB((double)pos.getX(), (double)pos.getY(), (double)pos.getZ(), (double)(pos.getX() + 1), (double)(pos.getY() + 1), (double)(pos.getZ() + 1)), new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getHorizontalFacing() == facing; + } + }); + return list.size() == 1 ? (EntityItemFrame)list.get(0) : null; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!playerIn.capabilities.allowEdit) + { + return false; + } + else + { + state = state.cycleProperty(MODE); + float f = state.getValue(MODE) == BlockRedstoneComparator.Mode.SUBTRACT ? 0.55F : 0.5F; + worldIn.playSound(playerIn, pos, SoundEvents.BLOCK_COMPARATOR_CLICK, SoundCategory.BLOCKS, 0.3F, f); + worldIn.setBlockState(pos, state, 2); + this.onStateChange(worldIn, pos, state); + return true; + } + } + + protected void updateState(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isBlockTickPending(pos, this)) + { + int i = this.calculateOutput(worldIn, pos, state); + TileEntity tileentity = worldIn.getTileEntity(pos); + int j = tileentity instanceof TileEntityComparator ? ((TileEntityComparator)tileentity).getOutputSignal() : 0; + + if (i != j || this.isPowered(state) != this.shouldBePowered(worldIn, pos, state)) + { + if (this.isFacingTowardsRepeater(worldIn, pos, state)) + { + worldIn.updateBlockTick(pos, this, 2, -1); + } + else + { + worldIn.updateBlockTick(pos, this, 2, 0); + } + } + } + } + + private void onStateChange(World worldIn, BlockPos pos, IBlockState state) + { + int i = this.calculateOutput(worldIn, pos, state); + TileEntity tileentity = worldIn.getTileEntity(pos); + int j = 0; + + if (tileentity instanceof TileEntityComparator) + { + TileEntityComparator tileentitycomparator = (TileEntityComparator)tileentity; + j = tileentitycomparator.getOutputSignal(); + tileentitycomparator.setOutputSignal(i); + } + + if (j != i || state.getValue(MODE) == BlockRedstoneComparator.Mode.COMPARE) + { + boolean flag1 = this.shouldBePowered(worldIn, pos, state); + boolean flag = this.isPowered(state); + + if (flag && !flag1) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(false)), 2); + } + else if (!flag && flag1) + { + worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(true)), 2); + } + + this.notifyNeighbors(worldIn, pos, state); + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (this.isRepeaterPowered) + { + worldIn.setBlockState(pos, this.getUnpoweredState(state).withProperty(POWERED, Boolean.valueOf(true)), 4); + } + + this.onStateChange(worldIn, pos, state); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + worldIn.setTileEntity(pos, this.createNewTileEntity(worldIn, 0)); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + worldIn.removeTileEntity(pos); + this.notifyNeighbors(worldIn, pos, state); + } + + /** + * Called on server when World#addBlockEvent is called. If server returns true, then also called on the client. On + * the Server, this may perform additional changes to the world, like pistons replacing the block with an extended + * base. On the client, the update may involve replacing tile entities or effects such as sounds or particles + */ + public boolean eventReceived(IBlockState state, World worldIn, BlockPos pos, int id, int param) + { + super.eventReceived(state, worldIn, pos, id, param); + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity == null ? false : tileentity.receiveClientEvent(id, param); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityComparator(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)).withProperty(MODE, (meta & 4) > 0 ? BlockRedstoneComparator.Mode.SUBTRACT : BlockRedstoneComparator.Mode.COMPARE); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + if (state.getValue(MODE) == BlockRedstoneComparator.Mode.SUBTRACT) + { + i |= 4; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, MODE, POWERED}); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()).withProperty(POWERED, Boolean.valueOf(false)).withProperty(MODE, BlockRedstoneComparator.Mode.COMPARE); + } + + @Override + public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor) + { + if (pos.getY() == neighbor.getY() && world instanceof World && !((World) world).isRemote) + { + neighborChanged(world.getBlockState(pos), (World)world, pos, world.getBlockState(neighbor).getBlock(), neighbor); + } + } + + @Override + public boolean getWeakChanges(IBlockAccess world, BlockPos pos) + { + return true; + } + + public static enum Mode implements IStringSerializable + { + COMPARE("compare"), + SUBTRACT("subtract"); + + private final String name; + + private Mode(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneDiode.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneDiode.java new file mode 100644 index 0000000..da91279 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneDiode.java @@ -0,0 +1,375 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class BlockRedstoneDiode extends BlockHorizontal +{ + protected static final AxisAlignedBB REDSTONE_DIODE_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D); + /** Tells whether the repeater is powered or not */ + protected final boolean isRepeaterPowered; + + protected BlockRedstoneDiode(boolean powered) + { + super(Material.CIRCUITS); + this.isRepeaterPowered = powered; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return REDSTONE_DIODE_AABB; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isTopSolid() ? super.canPlaceBlockAt(worldIn, pos) : false; + } + + public boolean canBlockStay(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isTopSolid(); + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!this.isLocked(worldIn, pos, state)) + { + boolean flag = this.shouldBePowered(worldIn, pos, state); + + if (this.isRepeaterPowered && !flag) + { + worldIn.setBlockState(pos, this.getUnpoweredState(state), 2); + } + else if (!this.isRepeaterPowered) + { + worldIn.setBlockState(pos, this.getPoweredState(state), 2); + + if (!flag) + { + worldIn.updateBlockTick(pos, this.getPoweredState(state).getBlock(), this.getTickDelay(state), -1); + } + } + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side.getAxis() != EnumFacing.Axis.Y; + } + + protected boolean isPowered(IBlockState state) + { + return this.isRepeaterPowered; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return blockState.getWeakPower(blockAccess, pos, side); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!this.isPowered(blockState)) + { + return 0; + } + else + { + return blockState.getValue(FACING) == side ? this.getActiveSignal(blockAccess, pos, blockState) : 0; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (this.canBlockStay(worldIn, pos)) + { + this.updateState(worldIn, pos, state); + } + else + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + } + + protected void updateState(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.isLocked(worldIn, pos, state)) + { + boolean flag = this.shouldBePowered(worldIn, pos, state); + + if (this.isRepeaterPowered != flag && !worldIn.isBlockTickPending(pos, this)) + { + int i = -1; + + if (this.isFacingTowardsRepeater(worldIn, pos, state)) + { + i = -3; + } + else if (this.isRepeaterPowered) + { + i = -2; + } + + worldIn.updateBlockTick(pos, this, this.getDelay(state), i); + } + } + } + + public boolean isLocked(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + return false; + } + + protected boolean shouldBePowered(World worldIn, BlockPos pos, IBlockState state) + { + return this.calculateInputStrength(worldIn, pos, state) > 0; + } + + protected int calculateInputStrength(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockPos blockpos = pos.offset(enumfacing); + int i = worldIn.getRedstonePower(blockpos, enumfacing); + + if (i >= 15) + { + return i; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(blockpos); + return Math.max(i, iblockstate.getBlock() == Blocks.REDSTONE_WIRE ? ((Integer)iblockstate.getValue(BlockRedstoneWire.POWER)).intValue() : 0); + } + } + + protected int getPowerOnSides(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + EnumFacing enumfacing1 = enumfacing.rotateY(); + EnumFacing enumfacing2 = enumfacing.rotateYCCW(); + return Math.max(this.getPowerOnSide(worldIn, pos.offset(enumfacing1), enumfacing1), this.getPowerOnSide(worldIn, pos.offset(enumfacing2), enumfacing2)); + } + + protected int getPowerOnSide(IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (this.isAlternateInput(iblockstate)) + { + if (block == Blocks.REDSTONE_BLOCK) + { + return 15; + } + else + { + return block == Blocks.REDSTONE_WIRE ? ((Integer)iblockstate.getValue(BlockRedstoneWire.POWER)).intValue() : worldIn.getStrongPower(pos, side); + } + } + else + { + return 0; + } + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + if (this.shouldBePowered(worldIn, pos, state)) + { + worldIn.scheduleUpdate(pos, this, 1); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.notifyNeighbors(worldIn, pos, state); + } + + protected void notifyNeighbors(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockPos blockpos = pos.offset(enumfacing.getOpposite()); + if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(worldIn, pos, worldIn.getBlockState(pos), java.util.EnumSet.of(enumfacing.getOpposite()), false).isCanceled()) + return; + worldIn.neighborChanged(blockpos, this, pos); + worldIn.notifyNeighborsOfStateExcept(blockpos, this, enumfacing); + } + + /** + * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated. + */ + public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state) + { + if (this.isRepeaterPowered) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + + super.onBlockDestroyedByPlayer(worldIn, pos, state); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + protected boolean isAlternateInput(IBlockState state) + { + return state.canProvidePower(); + } + + protected int getActiveSignal(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + return 15; + } + + public static boolean isDiode(IBlockState state) + { + return Blocks.UNPOWERED_REPEATER.isSameDiode(state) || Blocks.UNPOWERED_COMPARATOR.isSameDiode(state); + } + + public boolean isSameDiode(IBlockState state) + { + Block block = state.getBlock(); + return block == this.getPoweredState(this.getDefaultState()).getBlock() || block == this.getUnpoweredState(this.getDefaultState()).getBlock(); + } + + public boolean isFacingTowardsRepeater(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = ((EnumFacing)state.getValue(FACING)).getOpposite(); + BlockPos blockpos = pos.offset(enumfacing); + + if (isDiode(worldIn.getBlockState(blockpos))) + { + return worldIn.getBlockState(blockpos).getValue(FACING) != enumfacing; + } + else + { + return false; + } + } + + protected int getTickDelay(IBlockState state) + { + return this.getDelay(state); + } + + protected abstract int getDelay(IBlockState state); + + protected abstract IBlockState getPoweredState(IBlockState unpoweredState); + + protected abstract IBlockState getUnpoweredState(IBlockState poweredState); + + public boolean isAssociatedBlock(Block other) + { + return this.isSameDiode(other.getDefaultState()); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /* ======================================== FORGE START =====================================*/ + @Override + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) + { + if (super.rotateBlock(world, pos, axis)) + { + IBlockState state = world.getBlockState(pos); + state = getUnpoweredState(state); + world.setBlockState(pos, state); + + if (shouldBePowered(world, pos, state)) + { + world.scheduleUpdate(pos, this, 1); + } + return true; + } + return false; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneLight.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneLight.java new file mode 100644 index 0000000..8c80605 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneLight.java @@ -0,0 +1,93 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockRedstoneLight extends Block +{ + private final boolean isOn; + + public BlockRedstoneLight(boolean isOn) + { + super(Material.REDSTONE_LIGHT); + this.isOn = isOn; + + if (isOn) + { + this.setLightLevel(1.0F); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + if (this.isOn && !worldIn.isBlockPowered(pos)) + { + worldIn.setBlockState(pos, Blocks.REDSTONE_LAMP.getDefaultState(), 2); + } + else if (!this.isOn && worldIn.isBlockPowered(pos)) + { + worldIn.setBlockState(pos, Blocks.LIT_REDSTONE_LAMP.getDefaultState(), 2); + } + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + if (this.isOn && !worldIn.isBlockPowered(pos)) + { + worldIn.scheduleUpdate(pos, this, 4); + } + else if (!this.isOn && worldIn.isBlockPowered(pos)) + { + worldIn.setBlockState(pos, Blocks.LIT_REDSTONE_LAMP.getDefaultState(), 2); + } + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (this.isOn && !worldIn.isBlockPowered(pos)) + { + worldIn.setBlockState(pos, Blocks.REDSTONE_LAMP.getDefaultState(), 2); + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.REDSTONE_LAMP); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.REDSTONE_LAMP); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Blocks.REDSTONE_LAMP); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneOre.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneOre.java new file mode 100644 index 0000000..2b69fdf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneOre.java @@ -0,0 +1,194 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockRedstoneOre extends Block +{ + private final boolean isOn; + + public BlockRedstoneOre(boolean isOn) + { + super(Material.ROCK); + + if (isOn) + { + this.setTickRandomly(true); + } + + this.isOn = isOn; + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 30; + } + + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + this.activate(worldIn, pos); + super.onBlockClicked(worldIn, pos, playerIn); + } + + /** + * Called when the given entity walks on this Block + */ + public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) + { + this.activate(worldIn, pos); + super.onEntityWalk(worldIn, pos, entityIn); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + this.activate(worldIn, pos); + return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ); + } + + private void activate(World worldIn, BlockPos pos) + { + this.spawnParticles(worldIn, pos); + + if (this == Blocks.REDSTONE_ORE) + { + worldIn.setBlockState(pos, Blocks.LIT_REDSTONE_ORE.getDefaultState()); + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (this == Blocks.LIT_REDSTONE_ORE) + { + worldIn.setBlockState(pos, Blocks.REDSTONE_ORE.getDefaultState()); + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.REDSTONE; + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + return this.quantityDropped(random) + random.nextInt(fortune + 1); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 4 + random.nextInt(2); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + @Override + public int getExpDrop(IBlockState state, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + if (this.getItemDropped(state, RANDOM, fortune) != Item.getItemFromBlock(this)) + { + return 1 + RANDOM.nextInt(5); + } + return 0; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (this.isOn) + { + this.spawnParticles(worldIn, pos); + } + } + + private void spawnParticles(World worldIn, BlockPos pos) + { + Random random = worldIn.rand; + double d0 = 0.0625D; + + for (int i = 0; i < 6; ++i) + { + double d1 = (double)((float)pos.getX() + random.nextFloat()); + double d2 = (double)((float)pos.getY() + random.nextFloat()); + double d3 = (double)((float)pos.getZ() + random.nextFloat()); + + if (i == 0 && !worldIn.getBlockState(pos.up()).isOpaqueCube()) + { + d2 = (double)pos.getY() + 0.0625D + 1.0D; + } + + if (i == 1 && !worldIn.getBlockState(pos.down()).isOpaqueCube()) + { + d2 = (double)pos.getY() - 0.0625D; + } + + if (i == 2 && !worldIn.getBlockState(pos.south()).isOpaqueCube()) + { + d3 = (double)pos.getZ() + 0.0625D + 1.0D; + } + + if (i == 3 && !worldIn.getBlockState(pos.north()).isOpaqueCube()) + { + d3 = (double)pos.getZ() - 0.0625D; + } + + if (i == 4 && !worldIn.getBlockState(pos.east()).isOpaqueCube()) + { + d1 = (double)pos.getX() + 0.0625D + 1.0D; + } + + if (i == 5 && !worldIn.getBlockState(pos.west()).isOpaqueCube()) + { + d1 = (double)pos.getX() - 0.0625D; + } + + if (d1 < (double)pos.getX() || d1 > (double)(pos.getX() + 1) || d2 < 0.0D || d2 > (double)(pos.getY() + 1) || d3 < (double)pos.getZ() || d3 > (double)(pos.getZ() + 1)) + { + worldIn.spawnParticle(EnumParticleTypes.REDSTONE, d1, d2, d3, 0.0D, 0.0D, 0.0D); + } + } + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Blocks.REDSTONE_ORE); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(Blocks.REDSTONE_ORE), 1, this.damageDropped(state)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneRepeater.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneRepeater.java new file mode 100644 index 0000000..3dc82c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneRepeater.java @@ -0,0 +1,187 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockRedstoneRepeater extends BlockRedstoneDiode +{ + public static final PropertyBool LOCKED = PropertyBool.create("locked"); + public static final PropertyInteger DELAY = PropertyInteger.create("delay", 1, 4); + + protected BlockRedstoneRepeater(boolean powered) + { + super(powered); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(DELAY, Integer.valueOf(1)).withProperty(LOCKED, Boolean.valueOf(false))); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal("item.diode.name"); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(LOCKED, Boolean.valueOf(this.isLocked(worldIn, pos, state))); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!playerIn.capabilities.allowEdit) + { + return false; + } + else + { + worldIn.setBlockState(pos, state.cycleProperty(DELAY), 3); + return true; + } + } + + protected int getDelay(IBlockState state) + { + return ((Integer)state.getValue(DELAY)).intValue() * 2; + } + + protected IBlockState getPoweredState(IBlockState unpoweredState) + { + Integer integer = (Integer)unpoweredState.getValue(DELAY); + Boolean obool = (Boolean)unpoweredState.getValue(LOCKED); + EnumFacing enumfacing = (EnumFacing)unpoweredState.getValue(FACING); + return Blocks.POWERED_REPEATER.getDefaultState().withProperty(FACING, enumfacing).withProperty(DELAY, integer).withProperty(LOCKED, obool); + } + + protected IBlockState getUnpoweredState(IBlockState poweredState) + { + Integer integer = (Integer)poweredState.getValue(DELAY); + Boolean obool = (Boolean)poweredState.getValue(LOCKED); + EnumFacing enumfacing = (EnumFacing)poweredState.getValue(FACING); + return Blocks.UNPOWERED_REPEATER.getDefaultState().withProperty(FACING, enumfacing).withProperty(DELAY, integer).withProperty(LOCKED, obool); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.REPEATER; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.REPEATER); + } + + public boolean isLocked(IBlockAccess worldIn, BlockPos pos, IBlockState state) + { + return this.getPowerOnSides(worldIn, pos, state) > 0; + } + + protected boolean isAlternateInput(IBlockState state) + { + return isDiode(state); + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (this.isRepeaterPowered) + { + EnumFacing enumfacing = (EnumFacing)stateIn.getValue(FACING); + double d0 = (double)((float)pos.getX() + 0.5F) + (double)(rand.nextFloat() - 0.5F) * 0.2D; + double d1 = (double)((float)pos.getY() + 0.4F) + (double)(rand.nextFloat() - 0.5F) * 0.2D; + double d2 = (double)((float)pos.getZ() + 0.5F) + (double)(rand.nextFloat() - 0.5F) * 0.2D; + float f = -5.0F; + + if (rand.nextBoolean()) + { + f = (float)(((Integer)stateIn.getValue(DELAY)).intValue() * 2 - 1); + } + + f = f / 16.0F; + double d3 = (double)(f * (float)enumfacing.getFrontOffsetX()); + double d4 = (double)(f * (float)enumfacing.getFrontOffsetZ()); + worldIn.spawnParticle(EnumParticleTypes.REDSTONE, d0 + d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + this.notifyNeighbors(worldIn, pos, state); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)).withProperty(LOCKED, Boolean.valueOf(false)).withProperty(DELAY, Integer.valueOf(1 + (meta >> 2))); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + i = i | ((Integer)state.getValue(DELAY)).intValue() - 1 << 2; + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, DELAY, LOCKED}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneTorch.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneTorch.java new file mode 100644 index 0000000..061623d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneTorch.java @@ -0,0 +1,243 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import java.util.Random; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockRedstoneTorch extends BlockTorch +{ + private static final Map> toggles = new java.util.WeakHashMap>(); // FORGE - fix vanilla MC-101233 + private final boolean isOn; + + private boolean isBurnedOut(World worldIn, BlockPos pos, boolean turnOff) + { + if (!toggles.containsKey(worldIn)) + { + toggles.put(worldIn, Lists.newArrayList()); + } + + List list = (List)toggles.get(worldIn); + + if (turnOff) + { + list.add(new BlockRedstoneTorch.Toggle(pos, worldIn.getTotalWorldTime())); + } + + int i = 0; + + for (int j = 0; j < list.size(); ++j) + { + BlockRedstoneTorch.Toggle blockredstonetorch$toggle = list.get(j); + + if (blockredstonetorch$toggle.pos.equals(pos)) + { + ++i; + + if (i >= 8) + { + return true; + } + } + } + + return false; + } + + protected BlockRedstoneTorch(boolean isOn) + { + this.isOn = isOn; + this.setTickRandomly(true); + this.setCreativeTab((CreativeTabs)null); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return 2; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (this.isOn) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (this.isOn) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return this.isOn && blockState.getValue(FACING) != side ? 15 : 0; + } + + private boolean shouldBeOff(World worldIn, BlockPos pos, IBlockState state) + { + EnumFacing enumfacing = ((EnumFacing)state.getValue(FACING)).getOpposite(); + return worldIn.isSidePowered(pos.offset(enumfacing), enumfacing); + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + boolean flag = this.shouldBeOff(worldIn, pos, state); + List list = (List)toggles.get(worldIn); + + while (list != null && !list.isEmpty() && worldIn.getTotalWorldTime() - (list.get(0)).time > 60L) + { + list.remove(0); + } + + if (this.isOn) + { + if (flag) + { + worldIn.setBlockState(pos, Blocks.UNLIT_REDSTONE_TORCH.getDefaultState().withProperty(FACING, state.getValue(FACING)), 3); + + if (this.isBurnedOut(worldIn, pos, true)) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_REDSTONE_TORCH_BURNOUT, SoundCategory.BLOCKS, 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + for (int i = 0; i < 5; ++i) + { + double d0 = (double)pos.getX() + rand.nextDouble() * 0.6D + 0.2D; + double d1 = (double)pos.getY() + rand.nextDouble() * 0.6D + 0.2D; + double d2 = (double)pos.getZ() + rand.nextDouble() * 0.6D + 0.2D; + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + worldIn.scheduleUpdate(pos, worldIn.getBlockState(pos).getBlock(), 160); + } + } + } + else if (!flag && !this.isBurnedOut(worldIn, pos, false)) + { + worldIn.setBlockState(pos, Blocks.REDSTONE_TORCH.getDefaultState().withProperty(FACING, state.getValue(FACING)), 3); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.onNeighborChangeInternal(worldIn, pos, state)) + { + if (this.isOn == this.shouldBeOff(worldIn, pos, state)) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + } + } + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.DOWN ? blockState.getWeakPower(blockAccess, pos, side) : 0; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.REDSTONE_TORCH); + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (this.isOn) + { + double d0 = (double)pos.getX() + 0.5D + (rand.nextDouble() - 0.5D) * 0.2D; + double d1 = (double)pos.getY() + 0.7D + (rand.nextDouble() - 0.5D) * 0.2D; + double d2 = (double)pos.getZ() + 0.5D + (rand.nextDouble() - 0.5D) * 0.2D; + EnumFacing enumfacing = (EnumFacing)stateIn.getValue(FACING); + + if (enumfacing.getAxis().isHorizontal()) + { + EnumFacing enumfacing1 = enumfacing.getOpposite(); + double d3 = 0.27D; + d0 += 0.27D * (double)enumfacing1.getFrontOffsetX(); + d1 += 0.22D; + d2 += 0.27D * (double)enumfacing1.getFrontOffsetZ(); + } + + worldIn.spawnParticle(EnumParticleTypes.REDSTONE, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.REDSTONE_TORCH); + } + + public boolean isAssociatedBlock(Block other) + { + return other == Blocks.UNLIT_REDSTONE_TORCH || other == Blocks.REDSTONE_TORCH; + } + + static class Toggle + { + BlockPos pos; + long time; + + public Toggle(BlockPos pos, long time) + { + this.pos = pos; + this.time = time; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneWire.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneWire.java new file mode 100644 index 0000000..5cbcecf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRedstoneWire.java @@ -0,0 +1,649 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.EnumSet; +import java.util.List; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockRedstoneWire extends Block +{ + public static final PropertyEnum NORTH = PropertyEnum.create("north", BlockRedstoneWire.EnumAttachPosition.class); + public static final PropertyEnum EAST = PropertyEnum.create("east", BlockRedstoneWire.EnumAttachPosition.class); + public static final PropertyEnum SOUTH = PropertyEnum.create("south", BlockRedstoneWire.EnumAttachPosition.class); + public static final PropertyEnum WEST = PropertyEnum.create("west", BlockRedstoneWire.EnumAttachPosition.class); + public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); + protected static final AxisAlignedBB[] REDSTONE_WIRE_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.8125D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.8125D, 0.0625D, 1.0D), new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.1875D, 1.0D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.1875D, 1.0D, 0.0625D, 1.0D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.1875D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 0.8125D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0625D, 1.0D)}; + private boolean canProvidePower = true; + /** List of blocks to update with redstone. */ + private final Set blocksNeedingUpdate = Sets.newHashSet(); + + public BlockRedstoneWire() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, BlockRedstoneWire.EnumAttachPosition.NONE).withProperty(EAST, BlockRedstoneWire.EnumAttachPosition.NONE).withProperty(SOUTH, BlockRedstoneWire.EnumAttachPosition.NONE).withProperty(WEST, BlockRedstoneWire.EnumAttachPosition.NONE).withProperty(POWER, Integer.valueOf(0))); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return REDSTONE_WIRE_AABB[getAABBIndex(state.getActualState(source, pos))]; + } + + private static int getAABBIndex(IBlockState state) + { + int i = 0; + boolean flag = state.getValue(NORTH) != BlockRedstoneWire.EnumAttachPosition.NONE; + boolean flag1 = state.getValue(EAST) != BlockRedstoneWire.EnumAttachPosition.NONE; + boolean flag2 = state.getValue(SOUTH) != BlockRedstoneWire.EnumAttachPosition.NONE; + boolean flag3 = state.getValue(WEST) != BlockRedstoneWire.EnumAttachPosition.NONE; + + if (flag || flag2 && !flag && !flag1 && !flag3) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (flag1 || flag3 && !flag && !flag1 && !flag2) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (flag2 || flag && !flag1 && !flag2 && !flag3) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (flag3 || flag1 && !flag && !flag2 && !flag3) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + state = state.withProperty(WEST, this.getAttachPosition(worldIn, pos, EnumFacing.WEST)); + state = state.withProperty(EAST, this.getAttachPosition(worldIn, pos, EnumFacing.EAST)); + state = state.withProperty(NORTH, this.getAttachPosition(worldIn, pos, EnumFacing.NORTH)); + state = state.withProperty(SOUTH, this.getAttachPosition(worldIn, pos, EnumFacing.SOUTH)); + return state; + } + + private BlockRedstoneWire.EnumAttachPosition getAttachPosition(IBlockAccess worldIn, BlockPos pos, EnumFacing direction) + { + BlockPos blockpos = pos.offset(direction); + IBlockState iblockstate = worldIn.getBlockState(pos.offset(direction)); + + if (!canConnectTo(worldIn.getBlockState(blockpos), direction, worldIn, blockpos) && (iblockstate.isNormalCube() || !canConnectUpwardsTo(worldIn, blockpos.down()))) + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.up()); + + if (!iblockstate1.isNormalCube()) + { + boolean flag = worldIn.getBlockState(blockpos).isSideSolid(worldIn, blockpos, EnumFacing.UP) || worldIn.getBlockState(blockpos).getBlock() == Blocks.GLOWSTONE; + + if (flag && canConnectUpwardsTo(worldIn, blockpos.up())) + { + if (iblockstate.isBlockNormalCube()) + { + return BlockRedstoneWire.EnumAttachPosition.UP; + } + + return BlockRedstoneWire.EnumAttachPosition.SIDE; + } + } + + return BlockRedstoneWire.EnumAttachPosition.NONE; + } + else + { + return BlockRedstoneWire.EnumAttachPosition.SIDE; + } + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return worldIn.getBlockState(pos.down()).isTopSolid() || worldIn.getBlockState(pos.down()).getBlock() == Blocks.GLOWSTONE; + } + + private IBlockState updateSurroundingRedstone(World worldIn, BlockPos pos, IBlockState state) + { + state = this.calculateCurrentChanges(worldIn, pos, pos, state); + List list = Lists.newArrayList(this.blocksNeedingUpdate); + this.blocksNeedingUpdate.clear(); + + for (BlockPos blockpos : list) + { + worldIn.notifyNeighborsOfStateChange(blockpos, this, false); + } + + return state; + } + + private IBlockState calculateCurrentChanges(World worldIn, BlockPos pos1, BlockPos pos2, IBlockState state) + { + IBlockState iblockstate = state; + int i = ((Integer)state.getValue(POWER)).intValue(); + int j = 0; + j = this.getMaxCurrentStrength(worldIn, pos2, j); + this.canProvidePower = false; + int k = worldIn.isBlockIndirectlyGettingPowered(pos1); + this.canProvidePower = true; + + if (k > 0 && k > j - 1) + { + j = k; + } + + int l = 0; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos1.offset(enumfacing); + boolean flag = blockpos.getX() != pos2.getX() || blockpos.getZ() != pos2.getZ(); + + if (flag) + { + l = this.getMaxCurrentStrength(worldIn, blockpos, l); + } + + if (worldIn.getBlockState(blockpos).isNormalCube() && !worldIn.getBlockState(pos1.up()).isNormalCube()) + { + if (flag && pos1.getY() >= pos2.getY()) + { + l = this.getMaxCurrentStrength(worldIn, blockpos.up(), l); + } + } + else if (!worldIn.getBlockState(blockpos).isNormalCube() && flag && pos1.getY() <= pos2.getY()) + { + l = this.getMaxCurrentStrength(worldIn, blockpos.down(), l); + } + } + + if (l > j) + { + j = l - 1; + } + else if (j > 0) + { + --j; + } + else + { + j = 0; + } + + if (k > j - 1) + { + j = k; + } + + if (i != j) + { + state = state.withProperty(POWER, Integer.valueOf(j)); + + if (worldIn.getBlockState(pos1) == iblockstate) + { + worldIn.setBlockState(pos1, state, 2); + } + + this.blocksNeedingUpdate.add(pos1); + + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + this.blocksNeedingUpdate.add(pos1.offset(enumfacing1)); + } + } + + return state; + } + + /** + * Calls World.notifyNeighborsOfStateChange() for all neighboring blocks, but only if the given block is a redstone + * wire. + */ + private void notifyWireNeighborsOfStateChange(World worldIn, BlockPos pos) + { + if (worldIn.getBlockState(pos).getBlock() == this) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + this.updateSurroundingRedstone(worldIn, pos, state); + + for (EnumFacing enumfacing : EnumFacing.Plane.VERTICAL) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(enumfacing1)); + } + + for (EnumFacing enumfacing2 : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing2); + + if (worldIn.getBlockState(blockpos).isNormalCube()) + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.up()); + } + else + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.down()); + } + } + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + + if (!worldIn.isRemote) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + worldIn.notifyNeighborsOfStateChange(pos.offset(enumfacing), this, false); + } + + this.updateSurroundingRedstone(worldIn, pos, state); + + for (EnumFacing enumfacing1 : EnumFacing.Plane.HORIZONTAL) + { + this.notifyWireNeighborsOfStateChange(worldIn, pos.offset(enumfacing1)); + } + + for (EnumFacing enumfacing2 : EnumFacing.Plane.HORIZONTAL) + { + BlockPos blockpos = pos.offset(enumfacing2); + + if (worldIn.getBlockState(blockpos).isNormalCube()) + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.up()); + } + else + { + this.notifyWireNeighborsOfStateChange(worldIn, blockpos.down()); + } + } + } + } + + private int getMaxCurrentStrength(World worldIn, BlockPos pos, int strength) + { + if (worldIn.getBlockState(pos).getBlock() != this) + { + return strength; + } + else + { + int i = ((Integer)worldIn.getBlockState(pos).getValue(POWER)).intValue(); + return i > strength ? i : strength; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + if (this.canPlaceBlockAt(worldIn, pos)) + { + this.updateSurroundingRedstone(worldIn, pos, state); + } + else + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.REDSTONE; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return !this.canProvidePower ? 0 : blockState.getWeakPower(blockAccess, pos, side); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!this.canProvidePower) + { + return 0; + } + else + { + int i = ((Integer)blockState.getValue(POWER)).intValue(); + + if (i == 0) + { + return 0; + } + else if (side == EnumFacing.UP) + { + return i; + } + else + { + EnumSet enumset = EnumSet.noneOf(EnumFacing.class); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.isPowerSourceAt(blockAccess, pos, enumfacing)) + { + enumset.add(enumfacing); + } + } + + if (side.getAxis().isHorizontal() && enumset.isEmpty()) + { + return i; + } + else if (enumset.contains(side) && !enumset.contains(side.rotateYCCW()) && !enumset.contains(side.rotateY())) + { + return i; + } + else + { + return 0; + } + } + } + } + + private boolean isPowerSourceAt(IBlockAccess worldIn, BlockPos pos, EnumFacing side) + { + BlockPos blockpos = pos.offset(side); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + boolean flag = iblockstate.isNormalCube(); + boolean flag1 = worldIn.getBlockState(pos.up()).isNormalCube(); + + if (!flag1 && flag && canConnectUpwardsTo(worldIn, blockpos.up())) + { + return true; + } + else if (canConnectTo(iblockstate, side, worldIn, pos)) + { + return true; + } + else if (iblockstate.getBlock() == Blocks.POWERED_REPEATER && iblockstate.getValue(BlockRedstoneDiode.FACING) == side) + { + return true; + } + else + { + return !flag && canConnectUpwardsTo(worldIn, blockpos.down()); + } + } + + protected static boolean canConnectUpwardsTo(IBlockAccess worldIn, BlockPos pos) + { + return canConnectTo(worldIn.getBlockState(pos), null, worldIn, pos); + } + + protected static boolean canConnectTo(IBlockState blockState, @Nullable EnumFacing side, IBlockAccess world, BlockPos pos) + { + Block block = blockState.getBlock(); + + if (block == Blocks.REDSTONE_WIRE) + { + return true; + } + else if (Blocks.UNPOWERED_REPEATER.isSameDiode(blockState)) + { + EnumFacing enumfacing = (EnumFacing)blockState.getValue(BlockRedstoneRepeater.FACING); + return enumfacing == side || enumfacing.getOpposite() == side; + } + else if (Blocks.OBSERVER == blockState.getBlock()) + { + return side == blockState.getValue(BlockObserver.FACING); + } + else + { + return blockState.getBlock().canConnectRedstone(blockState, world, pos, side); + } + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return this.canProvidePower; + } + + @SideOnly(Side.CLIENT) + public static int colorMultiplier(int p_176337_0_) + { + float f = (float)p_176337_0_ / 15.0F; + float f1 = f * 0.6F + 0.4F; + + if (p_176337_0_ == 0) + { + f1 = 0.3F; + } + + float f2 = f * f * 0.7F - 0.5F; + float f3 = f * f * 0.6F - 0.7F; + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + if (f3 < 0.0F) + { + f3 = 0.0F; + } + + int i = MathHelper.clamp((int)(f1 * 255.0F), 0, 255); + int j = MathHelper.clamp((int)(f2 * 255.0F), 0, 255); + int k = MathHelper.clamp((int)(f3 * 255.0F), 0, 255); + return -16777216 | i << 16 | j << 8 | k; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + int i = ((Integer)stateIn.getValue(POWER)).intValue(); + + if (i != 0) + { + double d0 = (double)pos.getX() + 0.5D + ((double)rand.nextFloat() - 0.5D) * 0.2D; + double d1 = (double)((float)pos.getY() + 0.0625F); + double d2 = (double)pos.getZ() + 0.5D + ((double)rand.nextFloat() - 0.5D) * 0.2D; + float f = (float)i / 15.0F; + float f1 = f * 0.6F + 0.4F; + float f2 = Math.max(0.0F, f * f * 0.7F - 0.5F); + float f3 = Math.max(0.0F, f * f * 0.6F - 0.7F); + worldIn.spawnParticle(EnumParticleTypes.REDSTONE, d0, d1, d2, (double)f1, (double)f2, (double)f3); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.REDSTONE); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWER, Integer.valueOf(meta)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(POWER)).intValue(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(EAST, state.getValue(WEST)).withProperty(SOUTH, state.getValue(NORTH)).withProperty(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(EAST)).withProperty(EAST, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(WEST)).withProperty(WEST, state.getValue(NORTH)); + case CLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(WEST)).withProperty(EAST, state.getValue(NORTH)).withProperty(SOUTH, state.getValue(EAST)).withProperty(WEST, state.getValue(SOUTH)); + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + switch (mirrorIn) + { + case LEFT_RIGHT: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(NORTH)); + case FRONT_BACK: + return state.withProperty(EAST, state.getValue(WEST)).withProperty(WEST, state.getValue(EAST)); + default: + return super.withMirror(state, mirrorIn); + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {NORTH, EAST, SOUTH, WEST, POWER}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } + + static enum EnumAttachPosition implements IStringSerializable + { + UP("up"), + SIDE("side"), + NONE("none"); + + private final String name; + + private EnumAttachPosition(String name) + { + this.name = name; + } + + public String toString() + { + return this.getName(); + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockReed.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockReed.java new file mode 100644 index 0000000..fd265ca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockReed.java @@ -0,0 +1,223 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockReed extends Block implements net.minecraftforge.common.IPlantable +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 15); + protected static final AxisAlignedBB REED_AABB = new AxisAlignedBB(0.125D, 0.0D, 0.125D, 0.875D, 1.0D, 0.875D); + + protected BlockReed() + { + super(Material.PLANTS); + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0))); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return REED_AABB; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getBlockState(pos.down()).getBlock() == Blocks.REEDS || this.checkForDrop(worldIn, pos, state)) + { + if (worldIn.isAirBlock(pos.up())) + { + int i; + + for (i = 1; worldIn.getBlockState(pos.down(i)).getBlock() == this; ++i) + { + ; + } + + if (i < 3) + { + int j = ((Integer)state.getValue(AGE)).intValue(); + + if(net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, pos, state, true)) + { + if (j == 15) + { + worldIn.setBlockState(pos.up(), this.getDefaultState()); + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(0)), 4); + } + else + { + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(j + 1)), 4); + } + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos)); + } + } + } + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + IBlockState state = worldIn.getBlockState(pos.down()); + Block block = state.getBlock(); + if (block.canSustainPlant(state, worldIn, pos.down(), EnumFacing.UP, this)) return true; + + if (block == this) + { + return true; + } + else if (block != Blocks.GRASS && block != Blocks.DIRT && block != Blocks.SAND) + { + return false; + } + else + { + BlockPos blockpos = pos.down(); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + IBlockState iblockstate = worldIn.getBlockState(blockpos.offset(enumfacing)); + + if (iblockstate.getMaterial() == Material.WATER || iblockstate.getBlock() == Blocks.FROSTED_ICE) + { + return true; + } + } + + return false; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.checkForDrop(worldIn, pos, state); + } + + protected final boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (this.canBlockStay(worldIn, pos)) + { + return true; + } + else + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return false; + } + } + + public boolean canBlockStay(World worldIn, BlockPos pos) + { + return this.canPlaceBlockAt(worldIn, pos); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.REEDS; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.REEDS); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + @Override + public net.minecraftforge.common.EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) + { + return net.minecraftforge.common.EnumPlantType.Beach; + } + @Override + public IBlockState getPlant(IBlockAccess world, BlockPos pos) + { + return this.getDefaultState(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockRotatedPillar.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRotatedPillar.java new file mode 100644 index 0000000..eb309ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockRotatedPillar.java @@ -0,0 +1,130 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockRotatedPillar extends Block +{ + public static final PropertyEnum AXIS = PropertyEnum.create("axis", EnumFacing.Axis.class); + + protected BlockRotatedPillar(Material materialIn) + { + super(materialIn, materialIn.getMaterialMapColor()); + } + + protected BlockRotatedPillar(Material materialIn, MapColor color) + { + super(materialIn, color); + } + + @Override + public boolean rotateBlock(net.minecraft.world.World world, BlockPos pos, EnumFacing axis) + { + net.minecraft.block.state.IBlockState state = world.getBlockState(pos); + for (net.minecraft.block.properties.IProperty prop : state.getProperties().keySet()) + { + if (prop.getName().equals("axis")) + { + world.setBlockState(pos, state.cycleProperty(prop)); + return true; + } + } + return false; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case COUNTERCLOCKWISE_90: + case CLOCKWISE_90: + + switch ((EnumFacing.Axis)state.getValue(AXIS)) + { + case X: + return state.withProperty(AXIS, EnumFacing.Axis.Z); + case Z: + return state.withProperty(AXIS, EnumFacing.Axis.X); + default: + return state; + } + + default: + return state; + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing.Axis enumfacing$axis = EnumFacing.Axis.Y; + int i = meta & 12; + + if (i == 4) + { + enumfacing$axis = EnumFacing.Axis.X; + } + else if (i == 8) + { + enumfacing$axis = EnumFacing.Axis.Z; + } + + return this.getDefaultState().withProperty(AXIS, enumfacing$axis); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + EnumFacing.Axis enumfacing$axis = (EnumFacing.Axis)state.getValue(AXIS); + + if (enumfacing$axis == EnumFacing.Axis.X) + { + i |= 4; + } + else if (enumfacing$axis == EnumFacing.Axis.Z) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AXIS}); + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + return new ItemStack(Item.getItemFromBlock(this)); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(AXIS, facing.getAxis()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSand.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSand.java new file mode 100644 index 0000000..c09895e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSand.java @@ -0,0 +1,152 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSand extends BlockFalling +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockSand.EnumType.class); + + public BlockSand() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockSand.EnumType.SAND)); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockSand.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockSand.EnumType blocksand$enumtype : BlockSand.EnumType.values()) + { + items.add(new ItemStack(this, 1, blocksand$enumtype.getMetadata())); + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockSand.EnumType)state.getValue(VARIANT)).getMapColor(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockSand.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockSand.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + @SideOnly(Side.CLIENT) + public int getDustColor(IBlockState state) + { + BlockSand.EnumType blocksand$enumtype = (BlockSand.EnumType)state.getValue(VARIANT); + return blocksand$enumtype.getDustColor(); + } + + public static enum EnumType implements IStringSerializable + { + SAND(0, "sand", "default", MapColor.SAND, -2370656), + RED_SAND(1, "red_sand", "red", MapColor.ADOBE, -5679071); + + private static final BlockSand.EnumType[] META_LOOKUP = new BlockSand.EnumType[values().length]; + private final int meta; + private final String name; + private final MapColor mapColor; + private final String unlocalizedName; + private final int dustColor; + + private EnumType(int p_i47157_3_, String p_i47157_4_, String p_i47157_5_, MapColor p_i47157_6_, int p_i47157_7_) + { + this.meta = p_i47157_3_; + this.name = p_i47157_4_; + this.mapColor = p_i47157_6_; + this.unlocalizedName = p_i47157_5_; + this.dustColor = p_i47157_7_; + } + + @SideOnly(Side.CLIENT) + public int getDustColor() + { + return this.dustColor; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public MapColor getMapColor() + { + return this.mapColor; + } + + public static BlockSand.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockSand.EnumType blocksand$enumtype : values()) + { + META_LOOKUP[blocksand$enumtype.getMetadata()] = blocksand$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSandStone.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSandStone.java new file mode 100644 index 0000000..bc59421 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSandStone.java @@ -0,0 +1,135 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockSandStone extends Block +{ + public static final PropertyEnum TYPE = PropertyEnum.create("type", BlockSandStone.EnumType.class); + + public BlockSandStone() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, BlockSandStone.EnumType.DEFAULT)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockSandStone.EnumType)state.getValue(TYPE)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockSandStone.EnumType blocksandstone$enumtype : BlockSandStone.EnumType.values()) + { + items.add(new ItemStack(this, 1, blocksandstone$enumtype.getMetadata())); + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.SAND; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(TYPE, BlockSandStone.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockSandStone.EnumType)state.getValue(TYPE)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {TYPE}); + } + + public static enum EnumType implements IStringSerializable + { + DEFAULT(0, "sandstone", "default"), + CHISELED(1, "chiseled_sandstone", "chiseled"), + SMOOTH(2, "smooth_sandstone", "smooth"); + + private static final BlockSandStone.EnumType[] META_LOOKUP = new BlockSandStone.EnumType[values().length]; + private final int metadata; + private final String name; + private final String unlocalizedName; + + private EnumType(int meta, String name, String unlocalizedName) + { + this.metadata = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.metadata; + } + + public String toString() + { + return this.name; + } + + /** + * Returns the matching EnumType for the given metadata. + */ + public static BlockSandStone.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockSandStone.EnumType blocksandstone$enumtype : values()) + { + META_LOOKUP[blocksandstone$enumtype.getMetadata()] = blocksandstone$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSapling.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSapling.java new file mode 100644 index 0000000..184e471 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSapling.java @@ -0,0 +1,274 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenBigTree; +import net.minecraft.world.gen.feature.WorldGenBirchTree; +import net.minecraft.world.gen.feature.WorldGenCanopyTree; +import net.minecraft.world.gen.feature.WorldGenMegaJungle; +import net.minecraft.world.gen.feature.WorldGenMegaPineTree; +import net.minecraft.world.gen.feature.WorldGenSavannaTree; +import net.minecraft.world.gen.feature.WorldGenTaiga2; +import net.minecraft.world.gen.feature.WorldGenTrees; +import net.minecraft.world.gen.feature.WorldGenerator; + +public class BlockSapling extends BlockBush implements IGrowable +{ + public static final PropertyEnum TYPE = PropertyEnum.create("type", BlockPlanks.EnumType.class); + public static final PropertyInteger STAGE = PropertyInteger.create("stage", 0, 1); + protected static final AxisAlignedBB SAPLING_AABB = new AxisAlignedBB(0.09999999403953552D, 0.0D, 0.09999999403953552D, 0.8999999761581421D, 0.800000011920929D, 0.8999999761581421D); + + protected BlockSapling() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, BlockPlanks.EnumType.OAK).withProperty(STAGE, Integer.valueOf(0))); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return SAPLING_AABB; + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + "." + BlockPlanks.EnumType.OAK.getUnlocalizedName() + ".name"); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + super.updateTick(worldIn, pos, state, rand); + + if (!worldIn.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light + if (worldIn.getLightFromNeighbors(pos.up()) >= 9 && rand.nextInt(7) == 0) + { + this.grow(worldIn, pos, state, rand); + } + } + } + + public void grow(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (((Integer)state.getValue(STAGE)).intValue() == 0) + { + worldIn.setBlockState(pos, state.cycleProperty(STAGE), 4); + } + else + { + this.generateTree(worldIn, pos, state, rand); + } + } + + public void generateTree(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!net.minecraftforge.event.terraingen.TerrainGen.saplingGrowTree(worldIn, rand, pos)) return; + WorldGenerator worldgenerator = (WorldGenerator)(rand.nextInt(10) == 0 ? new WorldGenBigTree(true) : new WorldGenTrees(true)); + int i = 0; + int j = 0; + boolean flag = false; + + switch ((BlockPlanks.EnumType)state.getValue(TYPE)) + { + case SPRUCE: + label68: + + for (i = 0; i >= -1; --i) + { + for (j = 0; j >= -1; --j) + { + if (this.isTwoByTwoOfType(worldIn, pos, i, j, BlockPlanks.EnumType.SPRUCE)) + { + worldgenerator = new WorldGenMegaPineTree(false, rand.nextBoolean()); + flag = true; + break label68; + } + } + } + + if (!flag) + { + i = 0; + j = 0; + worldgenerator = new WorldGenTaiga2(true); + } + + break; + case BIRCH: + worldgenerator = new WorldGenBirchTree(true, false); + break; + case JUNGLE: + IBlockState iblockstate = Blocks.LOG.getDefaultState().withProperty(BlockOldLog.VARIANT, BlockPlanks.EnumType.JUNGLE); + IBlockState iblockstate1 = Blocks.LEAVES.getDefaultState().withProperty(BlockOldLeaf.VARIANT, BlockPlanks.EnumType.JUNGLE).withProperty(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + label82: + + for (i = 0; i >= -1; --i) + { + for (j = 0; j >= -1; --j) + { + if (this.isTwoByTwoOfType(worldIn, pos, i, j, BlockPlanks.EnumType.JUNGLE)) + { + worldgenerator = new WorldGenMegaJungle(true, 10, 20, iblockstate, iblockstate1); + flag = true; + break label82; + } + } + } + + if (!flag) + { + i = 0; + j = 0; + worldgenerator = new WorldGenTrees(true, 4 + rand.nextInt(7), iblockstate, iblockstate1, false); + } + + break; + case ACACIA: + worldgenerator = new WorldGenSavannaTree(true); + break; + case DARK_OAK: + label96: + + for (i = 0; i >= -1; --i) + { + for (j = 0; j >= -1; --j) + { + if (this.isTwoByTwoOfType(worldIn, pos, i, j, BlockPlanks.EnumType.DARK_OAK)) + { + worldgenerator = new WorldGenCanopyTree(true); + flag = true; + break label96; + } + } + } + + if (!flag) + { + return; + } + + case OAK: + } + + IBlockState iblockstate2 = Blocks.AIR.getDefaultState(); + + if (flag) + { + worldIn.setBlockState(pos.add(i, 0, j), iblockstate2, 4); + worldIn.setBlockState(pos.add(i + 1, 0, j), iblockstate2, 4); + worldIn.setBlockState(pos.add(i, 0, j + 1), iblockstate2, 4); + worldIn.setBlockState(pos.add(i + 1, 0, j + 1), iblockstate2, 4); + } + else + { + worldIn.setBlockState(pos, iblockstate2, 4); + } + + if (!worldgenerator.generate(worldIn, rand, pos.add(i, 0, j))) + { + if (flag) + { + worldIn.setBlockState(pos.add(i, 0, j), state, 4); + worldIn.setBlockState(pos.add(i + 1, 0, j), state, 4); + worldIn.setBlockState(pos.add(i, 0, j + 1), state, 4); + worldIn.setBlockState(pos.add(i + 1, 0, j + 1), state, 4); + } + else + { + worldIn.setBlockState(pos, state, 4); + } + } + } + + private boolean isTwoByTwoOfType(World worldIn, BlockPos pos, int p_181624_3_, int p_181624_4_, BlockPlanks.EnumType type) + { + return this.isTypeAt(worldIn, pos.add(p_181624_3_, 0, p_181624_4_), type) && this.isTypeAt(worldIn, pos.add(p_181624_3_ + 1, 0, p_181624_4_), type) && this.isTypeAt(worldIn, pos.add(p_181624_3_, 0, p_181624_4_ + 1), type) && this.isTypeAt(worldIn, pos.add(p_181624_3_ + 1, 0, p_181624_4_ + 1), type); + } + + /** + * Check whether the given BlockPos has a Sapling of the given type + */ + public boolean isTypeAt(World worldIn, BlockPos pos, BlockPlanks.EnumType type) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + return iblockstate.getBlock() == this && iblockstate.getValue(TYPE) == type; + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(TYPE)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockPlanks.EnumType blockplanks$enumtype : BlockPlanks.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockplanks$enumtype.getMetadata())); + } + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return true; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return (double)worldIn.rand.nextFloat() < 0.45D; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + this.grow(worldIn, pos, state, rand); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(TYPE, BlockPlanks.EnumType.byMetadata(meta & 7)).withProperty(STAGE, Integer.valueOf((meta & 8) >> 3)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockPlanks.EnumType)state.getValue(TYPE)).getMetadata(); + i = i | ((Integer)state.getValue(STAGE)).intValue() << 3; + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {TYPE, STAGE}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSeaLantern.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSeaLantern.java new file mode 100644 index 0000000..2fd9ad4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSeaLantern.java @@ -0,0 +1,58 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class BlockSeaLantern extends Block +{ + public BlockSeaLantern(Material materialIn) + { + super(materialIn); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 2 + random.nextInt(2); + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + return MathHelper.clamp(this.quantityDropped(random) + random.nextInt(fortune + 1), 1, 5); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.PRISMARINE_CRYSTALS; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.QUARTZ; + } + + protected boolean canSilkHarvest() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockShulkerBox.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockShulkerBox.java new file mode 100644 index 0000000..f4c491b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockShulkerBox.java @@ -0,0 +1,423 @@ +package net.minecraft.block; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.Mirror; +import net.minecraft.util.NonNullList; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockShulkerBox extends BlockContainer +{ + public static final PropertyEnum FACING = PropertyDirection.create("facing"); + private final EnumDyeColor color; + + public BlockShulkerBox(EnumDyeColor colorIn) + { + super(Material.ROCK, MapColor.AIR); + this.color = colorIn; + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityShulkerBox(this.color); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean causesSuffocation(IBlockState state) + { + return true; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return true; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.ENTITYBLOCK_ANIMATED; + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else if (playerIn.isSpectator()) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityShulkerBox) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + boolean flag; + + if (((TileEntityShulkerBox)tileentity).getAnimationStatus() == TileEntityShulkerBox.AnimationStatus.CLOSED) + { + AxisAlignedBB axisalignedbb = FULL_BLOCK_AABB.expand((double)(0.5F * (float)enumfacing.getFrontOffsetX()), (double)(0.5F * (float)enumfacing.getFrontOffsetY()), (double)(0.5F * (float)enumfacing.getFrontOffsetZ())).contract((double)enumfacing.getFrontOffsetX(), (double)enumfacing.getFrontOffsetY(), (double)enumfacing.getFrontOffsetZ()); + flag = !worldIn.collidesWithAnyBlock(axisalignedbb.offset(pos.offset(enumfacing))); + } + else + { + flag = true; + } + + if (flag) + { + playerIn.addStat(StatList.OPEN_SHULKER_BOX); + playerIn.displayGUIChest((IInventory)tileentity); + } + + return true; + } + else + { + return false; + } + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, facing); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (worldIn.getTileEntity(pos) instanceof TileEntityShulkerBox) + { + TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox)worldIn.getTileEntity(pos); + tileentityshulkerbox.setDestroyedByCreativePlayer(player.capabilities.isCreativeMode); + tileentityshulkerbox.fillWithLoot(player); + } + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + if (stack.hasDisplayName()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityShulkerBox) + { + ((TileEntityShulkerBox)tileentity).setCustomName(stack.getDisplayName()); + } + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityShulkerBox) + { + TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox)tileentity; + + if (!tileentityshulkerbox.isCleared() && tileentityshulkerbox.shouldDrop()) + { + ItemStack itemstack = new ItemStack(Item.getItemFromBlock(this)); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound.setTag("BlockEntityTag", ((TileEntityShulkerBox)tileentity).saveToNbt(nbttagcompound1)); + itemstack.setTagCompound(nbttagcompound); + + if (tileentityshulkerbox.hasCustomName()) + { + itemstack.setStackDisplayName(tileentityshulkerbox.getName()); + tileentityshulkerbox.setCustomName(""); + } + + spawnAsEntity(worldIn, pos, itemstack); + } + + worldIn.updateComparatorOutputLevel(pos, state.getBlock()); + } + + super.breakBlock(worldIn, pos, state); + } + + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World player, List tooltip, ITooltipFlag advanced) + { + super.addInformation(stack, player, tooltip, advanced); + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound != null && nbttagcompound.hasKey("BlockEntityTag", 10)) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("BlockEntityTag"); + + if (nbttagcompound1.hasKey("LootTable", 8)) + { + tooltip.add("???????"); + } + + if (nbttagcompound1.hasKey("Items", 9)) + { + NonNullList nonnulllist = NonNullList.withSize(27, ItemStack.EMPTY); + ItemStackHelper.loadAllItems(nbttagcompound1, nonnulllist); + int i = 0; + int j = 0; + + for (ItemStack itemstack : nonnulllist) + { + if (!itemstack.isEmpty()) + { + ++j; + + if (i <= 4) + { + ++i; + tooltip.add(String.format("%s x%d", itemstack.getDisplayName(), itemstack.getCount())); + } + } + } + + if (j - i > 0) + { + tooltip.add(String.format(TextFormatting.ITALIC + I18n.translateToLocal("container.shulkerBox.more"), j - i)); + } + } + } + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + TileEntity tileentity = source.getTileEntity(pos); + return tileentity instanceof TileEntityShulkerBox ? ((TileEntityShulkerBox)tileentity).getBoundingBox(state) : FULL_BLOCK_AABB; + } + + public boolean hasComparatorInputOverride(IBlockState state) + { + return true; + } + + public int getComparatorInputOverride(IBlockState blockState, World worldIn, BlockPos pos) + { + return Container.calcRedstoneFromInventory((IInventory)worldIn.getTileEntity(pos)); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + ItemStack itemstack = super.getItem(worldIn, pos, state); + TileEntityShulkerBox tileentityshulkerbox = (TileEntityShulkerBox)worldIn.getTileEntity(pos); + NBTTagCompound nbttagcompound = tileentityshulkerbox.saveToNbt(new NBTTagCompound()); + + if (!nbttagcompound.hasNoTags()) + { + itemstack.setTagInfo("BlockEntityTag", nbttagcompound); + } + + return itemstack; + } + + public static Block getBlockByColor(EnumDyeColor colorIn) + { + switch (colorIn) + { + case WHITE: + return Blocks.WHITE_SHULKER_BOX; + case ORANGE: + return Blocks.ORANGE_SHULKER_BOX; + case MAGENTA: + return Blocks.MAGENTA_SHULKER_BOX; + case LIGHT_BLUE: + return Blocks.LIGHT_BLUE_SHULKER_BOX; + case YELLOW: + return Blocks.YELLOW_SHULKER_BOX; + case LIME: + return Blocks.LIME_SHULKER_BOX; + case PINK: + return Blocks.PINK_SHULKER_BOX; + case GRAY: + return Blocks.GRAY_SHULKER_BOX; + case SILVER: + return Blocks.SILVER_SHULKER_BOX; + case CYAN: + return Blocks.CYAN_SHULKER_BOX; + case PURPLE: + default: + return Blocks.PURPLE_SHULKER_BOX; + case BLUE: + return Blocks.BLUE_SHULKER_BOX; + case BROWN: + return Blocks.BROWN_SHULKER_BOX; + case GREEN: + return Blocks.GREEN_SHULKER_BOX; + case RED: + return Blocks.RED_SHULKER_BOX; + case BLACK: + return Blocks.BLACK_SHULKER_BOX; + } + } + + @SideOnly(Side.CLIENT) + public static EnumDyeColor getColorFromItem(Item itemIn) + { + return getColorFromBlock(Block.getBlockFromItem(itemIn)); + } + + public static ItemStack getColoredItemStack(EnumDyeColor colorIn) + { + return new ItemStack(getBlockByColor(colorIn)); + } + + @SideOnly(Side.CLIENT) + public static EnumDyeColor getColorFromBlock(Block blockIn) + { + return blockIn instanceof BlockShulkerBox ? ((BlockShulkerBox)blockIn).getColor() : EnumDyeColor.PURPLE; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + state = this.getActualState(state, worldIn, pos); + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + TileEntityShulkerBox.AnimationStatus tileentityshulkerbox$animationstatus = ((TileEntityShulkerBox)worldIn.getTileEntity(pos)).getAnimationStatus(); + return tileentityshulkerbox$animationstatus != TileEntityShulkerBox.AnimationStatus.CLOSED && (tileentityshulkerbox$animationstatus != TileEntityShulkerBox.AnimationStatus.OPENED || enumfacing != face.getOpposite() && enumfacing != face) ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + } + + @SideOnly(Side.CLIENT) + public EnumDyeColor getColor() + { + return this.color; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSign.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSign.java new file mode 100644 index 0000000..3e1db57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSign.java @@ -0,0 +1,136 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSign extends BlockContainer +{ + protected static final AxisAlignedBB SIGN_AABB = new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D); + + protected BlockSign() + { + super(Material.WOOD); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return SIGN_AABB; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return true; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + /** + * Return true if an entity can be spawned inside the block (used to get the player's bed spawn location) + */ + public boolean canSpawnInBlock() + { + return true; + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntitySign(); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.SIGN; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.SIGN); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity instanceof TileEntitySign ? ((TileEntitySign)tileentity).executeCommand(playerIn) : false; + } + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return !this.hasInvalidNeighbor(worldIn, pos) && super.canPlaceBlockAt(worldIn, pos); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSilverfish.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSilverfish.java new file mode 100644 index 0000000..d9943c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSilverfish.java @@ -0,0 +1,229 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockSilverfish extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockSilverfish.EnumType.class); + + public BlockSilverfish() + { + super(Material.CLAY); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockSilverfish.EnumType.STONE)); + this.setHardness(0.0F); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + public static boolean canContainSilverfish(IBlockState blockState) + { + Block block = blockState.getBlock(); + return blockState == Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.STONE) || block == Blocks.COBBLESTONE || block == Blocks.STONEBRICK; + } + + protected ItemStack getSilkTouchDrop(IBlockState state) + { + switch ((BlockSilverfish.EnumType)state.getValue(VARIANT)) + { + case COBBLESTONE: + return new ItemStack(Blocks.COBBLESTONE); + case STONEBRICK: + return new ItemStack(Blocks.STONEBRICK); + case MOSSY_STONEBRICK: + return new ItemStack(Blocks.STONEBRICK, 1, BlockStoneBrick.EnumType.MOSSY.getMetadata()); + case CRACKED_STONEBRICK: + return new ItemStack(Blocks.STONEBRICK, 1, BlockStoneBrick.EnumType.CRACKED.getMetadata()); + case CHISELED_STONEBRICK: + return new ItemStack(Blocks.STONEBRICK, 1, BlockStoneBrick.EnumType.CHISELED.getMetadata()); + default: + return new ItemStack(Blocks.STONE); + } + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + if (!worldIn.isRemote && worldIn.getGameRules().getBoolean("doTileDrops")) + { + EntitySilverfish entitysilverfish = new EntitySilverfish(worldIn); + entitysilverfish.setLocationAndAngles((double)pos.getX() + 0.5D, (double)pos.getY(), (double)pos.getZ() + 0.5D, 0.0F, 0.0F); + worldIn.spawnEntity(entitysilverfish); + entitysilverfish.spawnExplosionParticle(); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this, 1, state.getBlock().getMetaFromState(state)); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockSilverfish.EnumType blocksilverfish$enumtype : BlockSilverfish.EnumType.values()) + { + items.add(new ItemStack(this, 1, blocksilverfish$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockSilverfish.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockSilverfish.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + public static enum EnumType implements IStringSerializable + { + STONE(0, "stone") + { + public IBlockState getModelBlock() + { + return Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.STONE); + } + }, + COBBLESTONE(1, "cobblestone", "cobble") + { + public IBlockState getModelBlock() + { + return Blocks.COBBLESTONE.getDefaultState(); + } + }, + STONEBRICK(2, "stone_brick", "brick") + { + public IBlockState getModelBlock() + { + return Blocks.STONEBRICK.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.DEFAULT); + } + }, + MOSSY_STONEBRICK(3, "mossy_brick", "mossybrick") + { + public IBlockState getModelBlock() + { + return Blocks.STONEBRICK.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.MOSSY); + } + }, + CRACKED_STONEBRICK(4, "cracked_brick", "crackedbrick") + { + public IBlockState getModelBlock() + { + return Blocks.STONEBRICK.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.CRACKED); + } + }, + CHISELED_STONEBRICK(5, "chiseled_brick", "chiseledbrick") + { + public IBlockState getModelBlock() + { + return Blocks.STONEBRICK.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.CHISELED); + } + }; + + private static final BlockSilverfish.EnumType[] META_LOOKUP = new BlockSilverfish.EnumType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumType(int meta, String name) + { + this(meta, name, name); + } + + private EnumType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockSilverfish.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + public abstract IBlockState getModelBlock(); + + public static BlockSilverfish.EnumType forModelBlock(IBlockState model) + { + for (BlockSilverfish.EnumType blocksilverfish$enumtype : values()) + { + if (model == blocksilverfish$enumtype.getModelBlock()) + { + return blocksilverfish$enumtype; + } + } + + return STONE; + } + + static + { + for (BlockSilverfish.EnumType blocksilverfish$enumtype : values()) + { + META_LOOKUP[blocksilverfish$enumtype.getMetadata()] = blocksilverfish$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSkull.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSkull.java new file mode 100644 index 0000000..a35e4d7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSkull.java @@ -0,0 +1,348 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.BlockWorldState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockMaterialMatcher; +import net.minecraft.block.state.pattern.BlockPattern; +import net.minecraft.block.state.pattern.BlockStateMatcher; +import net.minecraft.block.state.pattern.FactoryBlockPattern; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSkull extends BlockContainer +{ + public static final PropertyDirection FACING = BlockDirectional.FACING; + public static final PropertyBool NODROP = PropertyBool.create("nodrop"); + private static final Predicate IS_WITHER_SKELETON = new Predicate() + { + public boolean apply(@Nullable BlockWorldState p_apply_1_) + { + return p_apply_1_.getBlockState() != null && p_apply_1_.getBlockState().getBlock() == Blocks.SKULL && p_apply_1_.getTileEntity() instanceof TileEntitySkull && ((TileEntitySkull)p_apply_1_.getTileEntity()).getSkullType() == 1; + } + }; + protected static final AxisAlignedBB DEFAULT_AABB = new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 0.5D, 0.75D); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.25D, 0.25D, 0.5D, 0.75D, 0.75D, 1.0D); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.25D, 0.25D, 0.0D, 0.75D, 0.75D, 0.5D); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.5D, 0.25D, 0.25D, 1.0D, 0.75D, 0.75D); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.0D, 0.25D, 0.25D, 0.5D, 0.75D, 0.75D); + private BlockPattern witherBasePattern; + private BlockPattern witherPattern; + + protected BlockSkull() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(NODROP, Boolean.valueOf(false))); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal("tile.skull.skeleton.name"); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress(IBlockState state) + { + return true; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case UP: + default: + return DEFAULT_AABB; + case NORTH: + return NORTH_AABB; + case SOUTH: + return SOUTH_AABB; + case WEST: + return WEST_AABB; + case EAST: + return EAST_AABB; + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing()).withProperty(NODROP, Boolean.valueOf(false)); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntitySkull(); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + int i = 0; + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntitySkull) + { + i = ((TileEntitySkull)tileentity).getSkullType(); + } + + return new ItemStack(Items.SKULL, 1, i); + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (player.capabilities.isCreativeMode) + { + state = state.withProperty(NODROP, Boolean.valueOf(true)); + worldIn.setBlockState(pos, state, 4); + } + this.dropBlockAsItem(worldIn, pos, state, 0); + + super.onBlockHarvested(worldIn, pos, state, player); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + super.breakBlock(worldIn, pos, state); + } + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess worldIn, BlockPos pos, IBlockState state, int fortune) + { + { + if (!((Boolean)state.getValue(NODROP)).booleanValue()) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntitySkull) + { + TileEntitySkull tileentityskull = (TileEntitySkull)tileentity; + ItemStack itemstack = new ItemStack(Items.SKULL, 1, tileentityskull.getSkullType()); + + if (tileentityskull.getSkullType() == 3 && tileentityskull.getPlayerProfile() != null) + { + itemstack.setTagCompound(new NBTTagCompound()); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + NBTUtil.writeGameProfile(nbttagcompound, tileentityskull.getPlayerProfile()); + itemstack.getTagCompound().setTag("SkullOwner", nbttagcompound); + } + + drops.add(itemstack); + } + } + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.SKULL; + } + + public boolean canDispenserPlace(World worldIn, BlockPos pos, ItemStack stack) + { + if (stack.getMetadata() == 1 && pos.getY() >= 2 && worldIn.getDifficulty() != EnumDifficulty.PEACEFUL && !worldIn.isRemote) + { + return this.getWitherBasePattern().match(worldIn, pos) != null; + } + else + { + return false; + } + } + + public void checkWitherSpawn(World worldIn, BlockPos pos, TileEntitySkull te) + { + if (te.getSkullType() == 1 && pos.getY() >= 2 && worldIn.getDifficulty() != EnumDifficulty.PEACEFUL && !worldIn.isRemote) + { + BlockPattern blockpattern = this.getWitherPattern(); + BlockPattern.PatternHelper blockpattern$patternhelper = blockpattern.match(worldIn, pos); + + if (blockpattern$patternhelper != null) + { + for (int i = 0; i < 3; ++i) + { + BlockWorldState blockworldstate = blockpattern$patternhelper.translateOffset(i, 0, 0); + worldIn.setBlockState(blockworldstate.getPos(), blockworldstate.getBlockState().withProperty(NODROP, Boolean.valueOf(true)), 2); + } + + for (int j = 0; j < blockpattern.getPalmLength(); ++j) + { + for (int k = 0; k < blockpattern.getThumbLength(); ++k) + { + BlockWorldState blockworldstate1 = blockpattern$patternhelper.translateOffset(j, k, 0); + worldIn.setBlockState(blockworldstate1.getPos(), Blocks.AIR.getDefaultState(), 2); + } + } + + BlockPos blockpos = blockpattern$patternhelper.translateOffset(1, 0, 0).getPos(); + EntityWither entitywither = new EntityWither(worldIn); + BlockPos blockpos1 = blockpattern$patternhelper.translateOffset(1, 2, 0).getPos(); + entitywither.setLocationAndAngles((double)blockpos1.getX() + 0.5D, (double)blockpos1.getY() + 0.55D, (double)blockpos1.getZ() + 0.5D, blockpattern$patternhelper.getForwards().getAxis() == EnumFacing.Axis.X ? 0.0F : 90.0F, 0.0F); + entitywither.renderYawOffset = blockpattern$patternhelper.getForwards().getAxis() == EnumFacing.Axis.X ? 0.0F : 90.0F; + entitywither.ignite(); + + for (EntityPlayerMP entityplayermp : worldIn.getEntitiesWithinAABB(EntityPlayerMP.class, entitywither.getEntityBoundingBox().grow(50.0D))) + { + CriteriaTriggers.SUMMONED_ENTITY.trigger(entityplayermp, entitywither); + } + + worldIn.spawnEntity(entitywither); + + for (int l = 0; l < 120; ++l) + { + worldIn.spawnParticle(EnumParticleTypes.SNOWBALL, (double)blockpos.getX() + worldIn.rand.nextDouble(), (double)(blockpos.getY() - 2) + worldIn.rand.nextDouble() * 3.9D, (double)blockpos.getZ() + worldIn.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + for (int i1 = 0; i1 < blockpattern.getPalmLength(); ++i1) + { + for (int j1 = 0; j1 < blockpattern.getThumbLength(); ++j1) + { + BlockWorldState blockworldstate2 = blockpattern$patternhelper.translateOffset(i1, j1, 0); + worldIn.notifyNeighborsRespectDebug(blockworldstate2.getPos(), Blocks.AIR, false); + } + } + } + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getFront(meta & 7)).withProperty(NODROP, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getIndex(); + + if (((Boolean)state.getValue(NODROP)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, NODROP}); + } + + protected BlockPattern getWitherBasePattern() + { + if (this.witherBasePattern == null) + { + this.witherBasePattern = FactoryBlockPattern.start().aisle(" ", "###", "~#~").where('#', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.SOUL_SAND))).where('~', BlockWorldState.hasState(BlockMaterialMatcher.forMaterial(Material.AIR))).build(); + } + + return this.witherBasePattern; + } + + protected BlockPattern getWitherPattern() + { + if (this.witherPattern == null) + { + this.witherPattern = FactoryBlockPattern.start().aisle("^^^", "###", "~#~").where('#', BlockWorldState.hasState(BlockStateMatcher.forBlock(Blocks.SOUL_SAND))).where('^', IS_WITHER_SKELETON).where('~', BlockWorldState.hasState(BlockMaterialMatcher.forMaterial(Material.AIR))).build(); + } + + return this.witherPattern; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSlab.java new file mode 100644 index 0000000..8a54d84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSlab.java @@ -0,0 +1,230 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class BlockSlab extends Block +{ + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockSlab.EnumBlockHalf.class); + protected static final AxisAlignedBB AABB_BOTTOM_HALF = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); + protected static final AxisAlignedBB AABB_TOP_HALF = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); + + public BlockSlab(Material materialIn) + { + this(materialIn, materialIn.getMaterialMapColor()); + } + + public BlockSlab(Material p_i47249_1_, MapColor p_i47249_2_) + { + super(p_i47249_1_, p_i47249_2_); + this.fullBlock = this.isDouble(); + this.setLightOpacity(255); + } + + protected boolean canSilkHarvest() + { + return false; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + if (this.isDouble()) + { + return FULL_BLOCK_AABB; + } + else + { + return state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP ? AABB_TOP_HALF : AABB_BOTTOM_HALF; + } + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + public boolean isTopSolid(IBlockState state) + { + return ((BlockSlab)state.getBlock()).isDouble() || state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + if (((BlockSlab)state.getBlock()).isDouble()) + { + return BlockFaceShape.SOLID; + } + else if (face == EnumFacing.UP && state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) + { + return BlockFaceShape.SOLID; + } + else + { + return face == EnumFacing.DOWN && state.getValue(HALF) == BlockSlab.EnumBlockHalf.BOTTOM ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return this.isDouble(); + } + + @Override + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) + { + if (net.minecraftforge.common.ForgeModContainer.disableStairSlabCulling) + return super.doesSideBlockRendering(state, world, pos, face); + + if ( state.isOpaqueCube() ) + return true; + + EnumBlockHalf side = state.getValue(HALF); + return (side == EnumBlockHalf.TOP && face == EnumFacing.UP) || (side == EnumBlockHalf.BOTTOM && face == EnumFacing.DOWN); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); + + if (this.isDouble()) + { + return iblockstate; + } + else + { + return facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double)hitY <= 0.5D) ? iblockstate : iblockstate.withProperty(HALF, BlockSlab.EnumBlockHalf.TOP); + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return this.isDouble() ? 2 : 1; + } + + public boolean isFullCube(IBlockState state) + { + return this.isDouble(); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (this.isDouble()) + { + return super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + else if (side != EnumFacing.UP && side != EnumFacing.DOWN && !super.shouldSideBeRendered(blockState, blockAccess, pos, side)) + { + return false; + } + else if (false) // Forge: Additional logic breaks doesSideBlockRendering and is no longer useful. + { + IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side)); + boolean flag = isHalfSlab(iblockstate) && iblockstate.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP; + boolean flag1 = isHalfSlab(blockState) && blockState.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP; + + if (flag1) + { + if (side == EnumFacing.DOWN) + { + return true; + } + else if (side == EnumFacing.UP && super.shouldSideBeRendered(blockState, blockAccess, pos, side)) + { + return true; + } + else + { + return !isHalfSlab(iblockstate) || !flag; + } + } + else if (side == EnumFacing.UP) + { + return true; + } + else if (side == EnumFacing.DOWN && super.shouldSideBeRendered(blockState, blockAccess, pos, side)) + { + return true; + } + else + { + return !isHalfSlab(iblockstate) || flag; + } + } + return super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + + @SideOnly(Side.CLIENT) + protected static boolean isHalfSlab(IBlockState state) + { + Block block = state.getBlock(); + return block == Blocks.STONE_SLAB || block == Blocks.WOODEN_SLAB || block == Blocks.STONE_SLAB2 || block == Blocks.PURPUR_SLAB; + } + + /** + * Returns the slab block name with the type associated with it + */ + public abstract String getUnlocalizedName(int meta); + + public abstract boolean isDouble(); + + public abstract IProperty getVariantProperty(); + + public abstract Comparable getTypeForItem(ItemStack stack); + + public static enum EnumBlockHalf implements IStringSerializable + { + TOP("top"), + BOTTOM("bottom"); + + private final String name; + + private EnumBlockHalf(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSlime.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSlime.java new file mode 100644 index 0000000..d9fa8bc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSlime.java @@ -0,0 +1,79 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSlime extends BlockBreakable +{ + public BlockSlime() + { + super(Material.CLAY, false, MapColor.GRASS); + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.slipperiness = 0.8F; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + /** + * Block's chance to react to a living entity falling on it. + */ + public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) + { + if (entityIn.isSneaking()) + { + super.onFallenUpon(worldIn, pos, entityIn, fallDistance); + } + else + { + entityIn.fall(fallDistance, 0.0F); + } + } + + /** + * Called when an Entity lands on this Block. This method *must* update motionY because the entity will not do that + * on its own + */ + public void onLanded(World worldIn, Entity entityIn) + { + if (entityIn.isSneaking()) + { + super.onLanded(worldIn, entityIn); + } + else if (entityIn.motionY < 0.0D) + { + entityIn.motionY = -entityIn.motionY; + + if (!(entityIn instanceof EntityLivingBase)) + { + entityIn.motionY *= 0.8D; + } + } + } + + /** + * Called when the given entity walks on this Block + */ + public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) + { + if (Math.abs(entityIn.motionY) < 0.1D && !entityIn.isSneaking()) + { + double d0 = 0.4D + Math.abs(entityIn.motionY) * 0.2D; + entityIn.motionX *= d0; + entityIn.motionZ *= d0; + } + + super.onEntityWalk(worldIn, pos, entityIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSnow.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSnow.java new file mode 100644 index 0000000..eb27578 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSnow.java @@ -0,0 +1,218 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSnow extends Block +{ + public static final PropertyInteger LAYERS = PropertyInteger.create("layers", 1, 8); + protected static final AxisAlignedBB[] SNOW_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + + protected BlockSnow() + { + super(Material.SNOW); + this.setDefaultState(this.blockState.getBaseState().withProperty(LAYERS, Integer.valueOf(1))); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return SNOW_AABB[((Integer)state.getValue(LAYERS)).intValue()]; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return ((Integer)worldIn.getBlockState(pos).getValue(LAYERS)).intValue() < 5; + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + public boolean isTopSolid(IBlockState state) + { + return ((Integer)state.getValue(LAYERS)).intValue() == 8; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face == EnumFacing.DOWN ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + int i = ((Integer)blockState.getValue(LAYERS)).intValue() - 1; + float f = 0.125F; + AxisAlignedBB axisalignedbb = blockState.getBoundingBox(worldIn, pos); + return new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, axisalignedbb.maxX, (double)((float)i * 0.125F), axisalignedbb.maxZ); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos.down()); + Block block = iblockstate.getBlock(); + + if (block != Blocks.ICE && block != Blocks.PACKED_ICE && block != Blocks.BARRIER) + { + BlockFaceShape blockfaceshape = iblockstate.getBlockFaceShape(worldIn, pos.down(), EnumFacing.UP); + return blockfaceshape == BlockFaceShape.SOLID || iblockstate.getBlock().isLeaves(iblockstate, worldIn, pos.down()) || block == this && ((Integer)iblockstate.getValue(LAYERS)).intValue() == 8; + } + else + { + return false; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.checkAndDropBlock(worldIn, pos, state); + } + + private boolean checkAndDropBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.canPlaceBlockAt(worldIn, pos)) + { + worldIn.setBlockToAir(pos); + return false; + } + else + { + return true; + } + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + worldIn.setBlockToAir(pos); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.SNOWBALL; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 1; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getLightFor(EnumSkyBlock.BLOCK, pos) > 11) + { + worldIn.setBlockToAir(pos); + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (side == EnumFacing.UP) + { + return true; + } + else + { + IBlockState iblockstate = blockAccess.getBlockState(pos.offset(side)); + return iblockstate.getBlock() == this && ((Integer)iblockstate.getValue(LAYERS)).intValue() >= ((Integer)blockState.getValue(LAYERS)).intValue() ? false : super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(LAYERS, Integer.valueOf((meta & 7) + 1)); + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return ((Integer)worldIn.getBlockState(pos).getValue(LAYERS)).intValue() == 1; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(LAYERS)).intValue() - 1; + } + + @Override public int quantityDropped(IBlockState state, int fortune, Random random){ return ((Integer)state.getValue(LAYERS)) + 1; } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {LAYERS}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSnowBlock.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSnowBlock.java new file mode 100644 index 0000000..08ce345 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSnowBlock.java @@ -0,0 +1,46 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; + +public class BlockSnowBlock extends Block +{ + protected BlockSnowBlock() + { + super(Material.CRAFTED_SNOW); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.SNOWBALL; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 4; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (worldIn.getLightFor(EnumSkyBlock.BLOCK, pos) > 11) + { + this.dropBlockAsItem(worldIn, pos, worldIn.getBlockState(pos), 0); + worldIn.setBlockToAir(pos); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSoulSand.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSoulSand.java new file mode 100644 index 0000000..fdbc07d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSoulSand.java @@ -0,0 +1,38 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockSoulSand extends Block +{ + protected static final AxisAlignedBB SOUL_SAND_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.875D, 1.0D); + + public BlockSoulSand() + { + super(Material.SAND, MapColor.BROWN); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return SOUL_SAND_AABB; + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + entityIn.motionX *= 0.4D; + entityIn.motionZ *= 0.4D; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSourceImpl.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSourceImpl.java new file mode 100644 index 0000000..af325c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSourceImpl.java @@ -0,0 +1,58 @@ +package net.minecraft.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockSourceImpl implements IBlockSource +{ + private final World world; + private final BlockPos pos; + + public BlockSourceImpl(World worldIn, BlockPos posIn) + { + this.world = worldIn; + this.pos = posIn; + } + + public World getWorld() + { + return this.world; + } + + public double getX() + { + return (double)this.pos.getX() + 0.5D; + } + + public double getY() + { + return (double)this.pos.getY() + 0.5D; + } + + public double getZ() + { + return (double)this.pos.getZ() + 0.5D; + } + + public BlockPos getBlockPos() + { + return this.pos; + } + + /** + * Gets the block state of this position and returns it. + * @return Block state in this position + */ + public IBlockState getBlockState() + { + return this.world.getBlockState(this.pos); + } + + public T getBlockTileEntity() + { + return (T)this.world.getTileEntity(this.pos); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockSponge.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSponge.java new file mode 100644 index 0000000..c75dc62 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockSponge.java @@ -0,0 +1,210 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Queue; +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.NonNullList; +import net.minecraft.util.Tuple; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockSponge extends Block +{ + public static final PropertyBool WET = PropertyBool.create("wet"); + + protected BlockSponge() + { + super(Material.SPONGE); + this.setDefaultState(this.blockState.getBaseState().withProperty(WET, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + ".dry.name"); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((Boolean)state.getValue(WET)).booleanValue() ? 1 : 0; + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.tryAbsorb(worldIn, pos, state); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.tryAbsorb(worldIn, pos, state); + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + protected void tryAbsorb(World worldIn, BlockPos pos, IBlockState state) + { + if (!((Boolean)state.getValue(WET)).booleanValue() && this.absorb(worldIn, pos)) + { + worldIn.setBlockState(pos, state.withProperty(WET, Boolean.valueOf(true)), 2); + worldIn.playEvent(2001, pos, Block.getIdFromBlock(Blocks.WATER)); + } + } + + private boolean absorb(World worldIn, BlockPos pos) + { + Queue> queue = Lists.>newLinkedList(); + List list = Lists.newArrayList(); + queue.add(new Tuple(pos, Integer.valueOf(0))); + int i = 0; + + while (!queue.isEmpty()) + { + Tuple tuple = (Tuple)queue.poll(); + BlockPos blockpos = tuple.getFirst(); + int j = ((Integer)tuple.getSecond()).intValue(); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + BlockPos blockpos1 = blockpos.offset(enumfacing); + + if (worldIn.getBlockState(blockpos1).getMaterial() == Material.WATER) + { + worldIn.setBlockState(blockpos1, Blocks.AIR.getDefaultState(), 2); + list.add(blockpos1); + ++i; + + if (j < 6) + { + queue.add(new Tuple(blockpos1, j + 1)); + } + } + } + + if (i > 64) + { + break; + } + } + + for (BlockPos blockpos2 : list) + { + worldIn.notifyNeighborsOfStateChange(blockpos2, Blocks.AIR, false); + } + + return i > 0; + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + items.add(new ItemStack(this, 1, 0)); + items.add(new ItemStack(this, 1, 1)); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(WET, Boolean.valueOf((meta & 1) == 1)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Boolean)state.getValue(WET)).booleanValue() ? 1 : 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {WET}); + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + if (((Boolean)stateIn.getValue(WET)).booleanValue()) + { + EnumFacing enumfacing = EnumFacing.random(rand); + + if (enumfacing != EnumFacing.UP && !worldIn.getBlockState(pos.offset(enumfacing)).isTopSolid()) + { + double d0 = (double)pos.getX(); + double d1 = (double)pos.getY(); + double d2 = (double)pos.getZ(); + + if (enumfacing == EnumFacing.DOWN) + { + d1 = d1 - 0.05D; + d0 += rand.nextDouble(); + d2 += rand.nextDouble(); + } + else + { + d1 = d1 + rand.nextDouble() * 0.8D; + + if (enumfacing.getAxis() == EnumFacing.Axis.X) + { + d2 += rand.nextDouble(); + + if (enumfacing == EnumFacing.EAST) + { + ++d0; + } + else + { + d0 += 0.05D; + } + } + else + { + d0 += rand.nextDouble(); + + if (enumfacing == EnumFacing.SOUTH) + { + ++d2; + } + else + { + d2 += 0.05D; + } + } + } + + worldIn.spawnParticle(EnumParticleTypes.DRIP_WATER, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedGlass.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedGlass.java new file mode 100644 index 0000000..67e942e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedGlass.java @@ -0,0 +1,126 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockStainedGlass extends BlockBreakable +{ + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + + public BlockStainedGlass(Material materialIn) + { + super(materialIn, false); + this.setDefaultState(this.blockState.getBaseState().withProperty(COLOR, EnumDyeColor.WHITE)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + items.add(new ItemStack(this, 1, enumdyecolor.getMetadata())); + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.getBlockColor((EnumDyeColor)state.getValue(COLOR)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + protected boolean canSilkHarvest() + { + return true; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + BlockBeacon.updateColorAsync(worldIn, pos); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + BlockBeacon.updateColorAsync(worldIn, pos); + } + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {COLOR}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedGlassPane.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedGlassPane.java new file mode 100644 index 0000000..a97a06d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedGlassPane.java @@ -0,0 +1,145 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Mirror; +import net.minecraft.util.NonNullList; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockStainedGlassPane extends BlockPane +{ + public static final PropertyEnum COLOR = PropertyEnum.create("color", EnumDyeColor.class); + + public BlockStainedGlassPane() + { + super(Material.GLASS, false); + this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)).withProperty(COLOR, EnumDyeColor.WHITE)); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (int i = 0; i < EnumDyeColor.values().length; ++i) + { + items.add(new ItemStack(this, 1, i)); + } + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MapColor.getBlockColor((EnumDyeColor)state.getValue(COLOR)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(COLOR, EnumDyeColor.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumDyeColor)state.getValue(COLOR)).getMetadata(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(EAST, state.getValue(WEST)).withProperty(SOUTH, state.getValue(NORTH)).withProperty(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(EAST)).withProperty(EAST, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(WEST)).withProperty(WEST, state.getValue(NORTH)); + case CLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(WEST)).withProperty(EAST, state.getValue(NORTH)).withProperty(SOUTH, state.getValue(EAST)).withProperty(WEST, state.getValue(SOUTH)); + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + switch (mirrorIn) + { + case LEFT_RIGHT: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(NORTH)); + case FRONT_BACK: + return state.withProperty(EAST, state.getValue(WEST)).withProperty(WEST, state.getValue(EAST)); + default: + return super.withMirror(state, mirrorIn); + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {NORTH, EAST, WEST, SOUTH, COLOR}); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + BlockBeacon.updateColorAsync(worldIn, pos); + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + if (!worldIn.isRemote) + { + BlockBeacon.updateColorAsync(worldIn, pos); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedHardenedClay.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedHardenedClay.java new file mode 100644 index 0000000..d97d69d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStainedHardenedClay.java @@ -0,0 +1,26 @@ +package net.minecraft.block; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class BlockStainedHardenedClay extends BlockColored +{ + private static final MapColor[] MAP_COLORS = new MapColor[] {MapColor.WHITE_STAINED_HARDENED_CLAY, MapColor.ORANGE_STAINED_HARDENED_CLAY, MapColor.MAGENTA_STAINED_HARDENED_CLAY, MapColor.LIGHT_BLUE_STAINED_HARDENED_CLAY, MapColor.YELLOW_STAINED_HARDENED_CLAY, MapColor.LIME_STAINED_HARDENED_CLAY, MapColor.PINK_STAINED_HARDENED_CLAY, MapColor.GRAY_STAINED_HARDENED_CLAY, MapColor.SILVER_STAINED_HARDENED_CLAY, MapColor.CYAN_STAINED_HARDENED_CLAY, MapColor.PURPLE_STAINED_HARDENED_CLAY, MapColor.BLUE_STAINED_HARDENED_CLAY, MapColor.BROWN_STAINED_HARDENED_CLAY, MapColor.GREEN_STAINED_HARDENED_CLAY, MapColor.RED_STAINED_HARDENED_CLAY, MapColor.BLACK_STAINED_HARDENED_CLAY}; + + public BlockStainedHardenedClay() + { + super(Material.ROCK); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return MAP_COLORS[((EnumDyeColor)state.getValue(COLOR)).getMetadata()]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStairs.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStairs.java new file mode 100644 index 0000000..30acb10 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStairs.java @@ -0,0 +1,715 @@ +package net.minecraft.block; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockStairs extends Block +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockStairs.EnumHalf.class); + public static final PropertyEnum SHAPE = PropertyEnum.create("shape", BlockStairs.EnumShape.class); + /** + * B: .. T: xx + * B: .. T: xx + */ + protected static final AxisAlignedBB AABB_SLAB_TOP = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); + /** + * B: .. T: x. + * B: .. T: x. + */ + protected static final AxisAlignedBB AABB_QTR_TOP_WEST = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 0.5D, 1.0D, 1.0D); + /** + * B: .. T: .x + * B: .. T: .x + */ + protected static final AxisAlignedBB AABB_QTR_TOP_EAST = new AxisAlignedBB(0.5D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); + /** + * B: .. T: xx + * B: .. T: .. + */ + protected static final AxisAlignedBB AABB_QTR_TOP_NORTH = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 0.5D); + /** + * B: .. T: .. + * B: .. T: xx + */ + protected static final AxisAlignedBB AABB_QTR_TOP_SOUTH = new AxisAlignedBB(0.0D, 0.5D, 0.5D, 1.0D, 1.0D, 1.0D); + /** + * B: .. T: x. + * B: .. T: .. + */ + protected static final AxisAlignedBB AABB_OCT_TOP_NW = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 0.5D, 1.0D, 0.5D); + /** + * B: .. T: .x + * B: .. T: .. + */ + protected static final AxisAlignedBB AABB_OCT_TOP_NE = new AxisAlignedBB(0.5D, 0.5D, 0.0D, 1.0D, 1.0D, 0.5D); + /** + * B: .. T: .. + * B: .. T: x. + */ + protected static final AxisAlignedBB AABB_OCT_TOP_SW = new AxisAlignedBB(0.0D, 0.5D, 0.5D, 0.5D, 1.0D, 1.0D); + /** + * B: .. T: .. + * B: .. T: .x + */ + protected static final AxisAlignedBB AABB_OCT_TOP_SE = new AxisAlignedBB(0.5D, 0.5D, 0.5D, 1.0D, 1.0D, 1.0D); + /** + * B: xx T: .. + * B: xx T: .. + */ + protected static final AxisAlignedBB AABB_SLAB_BOTTOM = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); + /** + * B: x. T: .. + * B: x. T: .. + */ + protected static final AxisAlignedBB AABB_QTR_BOT_WEST = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 1.0D); + /** + * B: .x T: .. + * B: .x T: .. + */ + protected static final AxisAlignedBB AABB_QTR_BOT_EAST = new AxisAlignedBB(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); + /** + * B: xx T: .. + * B: .. T: .. + */ + protected static final AxisAlignedBB AABB_QTR_BOT_NORTH = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D); + /** + * B: .. T: .. + * B: xx T: .. + */ + protected static final AxisAlignedBB AABB_QTR_BOT_SOUTH = new AxisAlignedBB(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D); + /** + * B: x. T: .. + * B: .. T: .. + */ + protected static final AxisAlignedBB AABB_OCT_BOT_NW = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D); + /** + * B: .x T: .. + * B: .. T: .. + */ + protected static final AxisAlignedBB AABB_OCT_BOT_NE = new AxisAlignedBB(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D); + /** + * B: .. T: .. + * B: x. T: .. + */ + protected static final AxisAlignedBB AABB_OCT_BOT_SW = new AxisAlignedBB(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D); + /** + * B: .. T: .. + * B: .x T: .. + */ + protected static final AxisAlignedBB AABB_OCT_BOT_SE = new AxisAlignedBB(0.5D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D); + private final Block modelBlock; + private final IBlockState modelState; + + protected BlockStairs(IBlockState modelState) + { + super(modelState.getBlock().blockMaterial); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(HALF, BlockStairs.EnumHalf.BOTTOM).withProperty(SHAPE, BlockStairs.EnumShape.STRAIGHT)); + this.modelBlock = modelState.getBlock(); + this.modelState = modelState; + this.setHardness(this.modelBlock.blockHardness); + this.setResistance(this.modelBlock.blockResistance / 3.0F); + this.setSoundType(this.modelBlock.blockSoundType); + this.setLightOpacity(255); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + if (!isActualState) + { + state = this.getActualState(state, worldIn, pos); + } + + for (AxisAlignedBB axisalignedbb : getCollisionBoxList(state)) + { + addCollisionBoxToList(pos, entityBox, collidingBoxes, axisalignedbb); + } + } + + private static List getCollisionBoxList(IBlockState bstate) + { + List list = Lists.newArrayList(); + boolean flag = bstate.getValue(HALF) == BlockStairs.EnumHalf.TOP; + list.add(flag ? AABB_SLAB_TOP : AABB_SLAB_BOTTOM); + BlockStairs.EnumShape blockstairs$enumshape = (BlockStairs.EnumShape)bstate.getValue(SHAPE); + + if (blockstairs$enumshape == BlockStairs.EnumShape.STRAIGHT || blockstairs$enumshape == BlockStairs.EnumShape.INNER_LEFT || blockstairs$enumshape == BlockStairs.EnumShape.INNER_RIGHT) + { + list.add(getCollQuarterBlock(bstate)); + } + + if (blockstairs$enumshape != BlockStairs.EnumShape.STRAIGHT) + { + list.add(getCollEighthBlock(bstate)); + } + + return list; + } + + /** + * Returns a bounding box representing a quarter of a block (two eight-size cubes back to back). + * Used in all stair shapes except OUTER. + */ + private static AxisAlignedBB getCollQuarterBlock(IBlockState bstate) + { + boolean flag = bstate.getValue(HALF) == BlockStairs.EnumHalf.TOP; + + switch ((EnumFacing)bstate.getValue(FACING)) + { + case NORTH: + default: + return flag ? AABB_QTR_BOT_NORTH : AABB_QTR_TOP_NORTH; + case SOUTH: + return flag ? AABB_QTR_BOT_SOUTH : AABB_QTR_TOP_SOUTH; + case WEST: + return flag ? AABB_QTR_BOT_WEST : AABB_QTR_TOP_WEST; + case EAST: + return flag ? AABB_QTR_BOT_EAST : AABB_QTR_TOP_EAST; + } + } + + /** + * Returns a bounding box representing an eighth of a block (a block whose three dimensions are halved). + * Used in all stair shapes except STRAIGHT (gets added alone in the case of OUTER; alone with a quarter block in + * case of INSIDE). + */ + private static AxisAlignedBB getCollEighthBlock(IBlockState bstate) + { + EnumFacing enumfacing = (EnumFacing)bstate.getValue(FACING); + EnumFacing enumfacing1; + + switch ((BlockStairs.EnumShape)bstate.getValue(SHAPE)) + { + case OUTER_LEFT: + default: + enumfacing1 = enumfacing; + break; + case OUTER_RIGHT: + enumfacing1 = enumfacing.rotateY(); + break; + case INNER_RIGHT: + enumfacing1 = enumfacing.getOpposite(); + break; + case INNER_LEFT: + enumfacing1 = enumfacing.rotateYCCW(); + } + + boolean flag = bstate.getValue(HALF) == BlockStairs.EnumHalf.TOP; + + switch (enumfacing1) + { + case NORTH: + default: + return flag ? AABB_OCT_BOT_NW : AABB_OCT_TOP_NW; + case SOUTH: + return flag ? AABB_OCT_BOT_SE : AABB_OCT_TOP_SE; + case WEST: + return flag ? AABB_OCT_BOT_SW : AABB_OCT_TOP_SW; + case EAST: + return flag ? AABB_OCT_BOT_NE : AABB_OCT_TOP_NE; + } + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + state = this.getActualState(state, worldIn, pos); + + if (face.getAxis() == EnumFacing.Axis.Y) + { + return face == EnumFacing.UP == (state.getValue(HALF) == BlockStairs.EnumHalf.TOP) ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + else + { + BlockStairs.EnumShape blockstairs$enumshape = (BlockStairs.EnumShape)state.getValue(SHAPE); + + if (blockstairs$enumshape != BlockStairs.EnumShape.OUTER_LEFT && blockstairs$enumshape != BlockStairs.EnumShape.OUTER_RIGHT) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + switch (blockstairs$enumshape) + { + case INNER_RIGHT: + return enumfacing != face && enumfacing != face.rotateYCCW() ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + case INNER_LEFT: + return enumfacing != face && enumfacing != face.rotateY() ? BlockFaceShape.UNDEFINED : BlockFaceShape.SOLID; + case STRAIGHT: + return enumfacing == face ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + default: + return BlockFaceShape.UNDEFINED; + } + } + else + { + return BlockFaceShape.UNDEFINED; + } + } + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + this.modelBlock.randomDisplayTick(stateIn, worldIn, pos, rand); + } + + public void onBlockClicked(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + this.modelBlock.onBlockClicked(worldIn, pos, playerIn); + } + + /** + * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated. + */ + public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state) + { + this.modelBlock.onBlockDestroyedByPlayer(worldIn, pos, state); + } + + @SideOnly(Side.CLIENT) + public int getPackedLightmapCoords(IBlockState state, IBlockAccess source, BlockPos pos) + { + return this.modelState.getPackedLightmapCoords(source, pos); + } + + /** + * Returns how much this block can resist explosions from the passed in entity. + */ + public float getExplosionResistance(Entity exploder) + { + return this.modelBlock.getExplosionResistance(exploder); + } + + /** + * How many world ticks before ticking + */ + public int tickRate(World worldIn) + { + return this.modelBlock.tickRate(worldIn); + } + + public Vec3d modifyAcceleration(World worldIn, BlockPos pos, Entity entityIn, Vec3d motion) + { + return this.modelBlock.modifyAcceleration(worldIn, pos, entityIn, motion); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return this.modelBlock.getBlockLayer(); + } + + /** + * Return an AABB (in world coords!) that should be highlighted when the player is targeting this Block + */ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) + { + return this.modelState.getSelectedBoundingBox(worldIn, pos); + } + + /** + * Returns if this block is collidable. Only used by fire, although stairs return that of the block that the stair + * is made of (though nobody's going to make fire stairs, right?) + */ + public boolean isCollidable() + { + return this.modelBlock.isCollidable(); + } + + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) + { + return this.modelBlock.canCollideCheck(state, hitIfLiquid); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + return this.modelBlock.canPlaceBlockAt(worldIn, pos); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.modelState.neighborChanged(worldIn, pos, Blocks.AIR, pos); + this.modelBlock.onBlockAdded(worldIn, pos, this.modelState); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + this.modelBlock.breakBlock(worldIn, pos, this.modelState); + } + + /** + * Called when the given entity walks on this Block + */ + public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) + { + this.modelBlock.onEntityWalk(worldIn, pos, entityIn); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + this.modelBlock.updateTick(worldIn, pos, state, rand); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + return this.modelBlock.onBlockActivated(worldIn, pos, this.modelState, playerIn, hand, EnumFacing.DOWN, 0.0F, 0.0F, 0.0F); + } + + /** + * Called when this Block is destroyed by an Explosion + */ + public void onBlockDestroyedByExplosion(World worldIn, BlockPos pos, Explosion explosionIn) + { + this.modelBlock.onBlockDestroyedByExplosion(worldIn, pos, explosionIn); + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + public boolean isTopSolid(IBlockState state) + { + return state.getValue(HALF) == BlockStairs.EnumHalf.TOP; + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return this.modelBlock.getMapColor(this.modelState, worldIn, pos); + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer); + iblockstate = iblockstate.withProperty(FACING, placer.getHorizontalFacing()).withProperty(SHAPE, BlockStairs.EnumShape.STRAIGHT); + return facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double)hitY <= 0.5D) ? iblockstate.withProperty(HALF, BlockStairs.EnumHalf.BOTTOM) : iblockstate.withProperty(HALF, BlockStairs.EnumHalf.TOP); + } + + /** + * Ray traces through the blocks collision from start vector to end vector returning a ray trace hit. + */ + @Nullable + public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end) + { + List list = Lists.newArrayList(); + + for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(blockState, worldIn, pos))) + { + list.add(this.rayTrace(pos, start, end, axisalignedbb)); + } + + RayTraceResult raytraceresult1 = null; + double d1 = 0.0D; + + for (RayTraceResult raytraceresult : list) + { + if (raytraceresult != null) + { + double d0 = raytraceresult.hitVec.squareDistanceTo(end); + + if (d0 > d1) + { + raytraceresult1 = raytraceresult; + d1 = d0; + } + } + } + + return raytraceresult1; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(HALF, (meta & 4) > 0 ? BlockStairs.EnumHalf.TOP : BlockStairs.EnumHalf.BOTTOM); + iblockstate = iblockstate.withProperty(FACING, EnumFacing.getFront(5 - (meta & 3))); + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + if (state.getValue(HALF) == BlockStairs.EnumHalf.TOP) + { + i |= 4; + } + + i = i | 5 - ((EnumFacing)state.getValue(FACING)).getIndex(); + return i; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(SHAPE, getStairsShape(state, worldIn, pos)); + } + + private static BlockStairs.EnumShape getStairsShape(IBlockState p_185706_0_, IBlockAccess p_185706_1_, BlockPos p_185706_2_) + { + EnumFacing enumfacing = (EnumFacing)p_185706_0_.getValue(FACING); + IBlockState iblockstate = p_185706_1_.getBlockState(p_185706_2_.offset(enumfacing)); + + if (isBlockStairs(iblockstate) && p_185706_0_.getValue(HALF) == iblockstate.getValue(HALF)) + { + EnumFacing enumfacing1 = (EnumFacing)iblockstate.getValue(FACING); + + if (enumfacing1.getAxis() != ((EnumFacing)p_185706_0_.getValue(FACING)).getAxis() && isDifferentStairs(p_185706_0_, p_185706_1_, p_185706_2_, enumfacing1.getOpposite())) + { + if (enumfacing1 == enumfacing.rotateYCCW()) + { + return BlockStairs.EnumShape.OUTER_LEFT; + } + + return BlockStairs.EnumShape.OUTER_RIGHT; + } + } + + IBlockState iblockstate1 = p_185706_1_.getBlockState(p_185706_2_.offset(enumfacing.getOpposite())); + + if (isBlockStairs(iblockstate1) && p_185706_0_.getValue(HALF) == iblockstate1.getValue(HALF)) + { + EnumFacing enumfacing2 = (EnumFacing)iblockstate1.getValue(FACING); + + if (enumfacing2.getAxis() != ((EnumFacing)p_185706_0_.getValue(FACING)).getAxis() && isDifferentStairs(p_185706_0_, p_185706_1_, p_185706_2_, enumfacing2)) + { + if (enumfacing2 == enumfacing.rotateYCCW()) + { + return BlockStairs.EnumShape.INNER_LEFT; + } + + return BlockStairs.EnumShape.INNER_RIGHT; + } + } + + return BlockStairs.EnumShape.STRAIGHT; + } + + private static boolean isDifferentStairs(IBlockState p_185704_0_, IBlockAccess p_185704_1_, BlockPos p_185704_2_, EnumFacing p_185704_3_) + { + IBlockState iblockstate = p_185704_1_.getBlockState(p_185704_2_.offset(p_185704_3_)); + return !isBlockStairs(iblockstate) || iblockstate.getValue(FACING) != p_185704_0_.getValue(FACING) || iblockstate.getValue(HALF) != p_185704_0_.getValue(HALF); + } + + public static boolean isBlockStairs(IBlockState state) + { + return state.getBlock() instanceof BlockStairs; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + @SuppressWarnings("incomplete-switch") + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + BlockStairs.EnumShape blockstairs$enumshape = (BlockStairs.EnumShape)state.getValue(SHAPE); + + switch (mirrorIn) + { + case LEFT_RIGHT: + + if (enumfacing.getAxis() == EnumFacing.Axis.Z) + { + switch (blockstairs$enumshape) + { + case OUTER_LEFT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.OUTER_RIGHT); + case OUTER_RIGHT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.OUTER_LEFT); + case INNER_RIGHT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.INNER_LEFT); + case INNER_LEFT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.INNER_RIGHT); + default: + return state.withRotation(Rotation.CLOCKWISE_180); + } + } + + break; + case FRONT_BACK: + + if (enumfacing.getAxis() == EnumFacing.Axis.X) + { + switch (blockstairs$enumshape) + { + case OUTER_LEFT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.OUTER_RIGHT); + case OUTER_RIGHT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.OUTER_LEFT); + case INNER_RIGHT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.INNER_RIGHT); + case INNER_LEFT: + return state.withRotation(Rotation.CLOCKWISE_180).withProperty(SHAPE, BlockStairs.EnumShape.INNER_LEFT); + case STRAIGHT: + return state.withRotation(Rotation.CLOCKWISE_180); + } + } + } + + return super.withMirror(state, mirrorIn); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, HALF, SHAPE}); + } + + @Override + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) + { + if (net.minecraftforge.common.ForgeModContainer.disableStairSlabCulling) + return super.doesSideBlockRendering(state, world, pos, face); + + if ( state.isOpaqueCube() ) + return true; + + state = this.getActualState(state, world, pos); + + EnumHalf half = state.getValue(HALF); + EnumFacing side = state.getValue(FACING); + EnumShape shape = state.getValue(SHAPE); + if (face == EnumFacing.UP) return half == EnumHalf.TOP; + if (face == EnumFacing.DOWN) return half == EnumHalf.BOTTOM; + if (shape == EnumShape.OUTER_LEFT || shape == EnumShape.OUTER_RIGHT) return false; + if (face == side) return true; + if (shape == EnumShape.INNER_LEFT && face.rotateY() == side) return true; + if (shape == EnumShape.INNER_RIGHT && face.rotateYCCW() == side) return true; + return false; + } + + public static enum EnumHalf implements IStringSerializable + { + TOP("top"), + BOTTOM("bottom"); + + private final String name; + + private EnumHalf(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } + + public static enum EnumShape implements IStringSerializable + { + STRAIGHT("straight"), + INNER_LEFT("inner_left"), + INNER_RIGHT("inner_right"), + OUTER_LEFT("outer_left"), + OUTER_RIGHT("outer_right"); + + private final String name; + + private EnumShape(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStandingSign.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStandingSign.java new file mode 100644 index 0000000..89790a6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStandingSign.java @@ -0,0 +1,75 @@ +package net.minecraft.block; + +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockStandingSign extends BlockSign +{ + public static final PropertyInteger ROTATION = PropertyInteger.create("rotation", 0, 15); + + public BlockStandingSign() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(ROTATION, Integer.valueOf(0))); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.getBlockState(pos.down()).getMaterial().isSolid()) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(ROTATION, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(ROTATION)).intValue(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(ROTATION, Integer.valueOf(rot.rotate(((Integer)state.getValue(ROTATION)).intValue(), 16))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withProperty(ROTATION, Integer.valueOf(mirrorIn.mirrorRotation(((Integer)state.getValue(ROTATION)).intValue(), 16))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {ROTATION}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStaticLiquid.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStaticLiquid.java new file mode 100644 index 0000000..a165b65 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStaticLiquid.java @@ -0,0 +1,119 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockStaticLiquid extends BlockLiquid +{ + protected BlockStaticLiquid(Material materialIn) + { + super(materialIn); + this.setTickRandomly(false); + + if (materialIn == Material.LAVA) + { + this.setTickRandomly(true); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!this.checkForMixing(worldIn, pos, state)) + { + this.updateLiquid(worldIn, pos, state); + } + } + + private void updateLiquid(World worldIn, BlockPos pos, IBlockState state) + { + BlockDynamicLiquid blockdynamicliquid = getFlowingBlock(this.blockMaterial); + worldIn.setBlockState(pos, blockdynamicliquid.getDefaultState().withProperty(LEVEL, state.getValue(LEVEL)), 2); + worldIn.scheduleUpdate(pos, blockdynamicliquid, this.tickRate(worldIn)); + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (this.blockMaterial == Material.LAVA) + { + if (worldIn.getGameRules().getBoolean("doFireTick")) + { + int i = rand.nextInt(3); + + if (i > 0) + { + BlockPos blockpos = pos; + + for (int j = 0; j < i; ++j) + { + blockpos = blockpos.add(rand.nextInt(3) - 1, 1, rand.nextInt(3) - 1); + + if (blockpos.getY() >= 0 && blockpos.getY() < worldIn.getHeight() && !worldIn.isBlockLoaded(blockpos)) + { + return; + } + + IBlockState block = worldIn.getBlockState(blockpos); + + if (block.getBlock().isAir(block, worldIn, blockpos)) + { + if (this.isSurroundingBlockFlammable(worldIn, blockpos)) + { + worldIn.setBlockState(blockpos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, blockpos, pos, Blocks.FIRE.getDefaultState())); + return; + } + } + else if (block.getMaterial().blocksMovement()) + { + return; + } + } + } + else + { + for (int k = 0; k < 3; ++k) + { + BlockPos blockpos1 = pos.add(rand.nextInt(3) - 1, 0, rand.nextInt(3) - 1); + + if (blockpos1.getY() >= 0 && blockpos1.getY() < 256 && !worldIn.isBlockLoaded(blockpos1)) + { + return; + } + + if (worldIn.isAirBlock(blockpos1.up()) && this.getCanBlockBurn(worldIn, blockpos1)) + { + worldIn.setBlockState(blockpos1.up(), net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, blockpos1.up(), pos, Blocks.FIRE.getDefaultState())); + } + } + } + } + } + } + + protected boolean isSurroundingBlockFlammable(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (this.getCanBlockBurn(worldIn, pos.offset(enumfacing))) + { + return true; + } + } + + return false; + } + + private boolean getCanBlockBurn(World worldIn, BlockPos pos) + { + return pos.getY() >= 0 && pos.getY() < 256 && !worldIn.isBlockLoaded(pos) ? false : worldIn.getBlockState(pos).getMaterial().getCanBurn(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStem.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStem.java new file mode 100644 index 0000000..c3db8c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStem.java @@ -0,0 +1,214 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockStem extends BlockBush implements IGrowable +{ + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 7); + public static final PropertyDirection FACING = BlockTorch.FACING; + private final Block crop; + protected static final AxisAlignedBB[] STEM_AABB = new AxisAlignedBB[] {new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.125D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.25D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.375D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.5D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.625D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.75D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 0.875D, 0.625D), new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, 0.625D)}; + + protected BlockStem(Block crop) + { + this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0)).withProperty(FACING, EnumFacing.UP)); + this.crop = crop; + this.setTickRandomly(true); + this.setCreativeTab((CreativeTabs)null); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return STEM_AABB[((Integer)state.getValue(AGE)).intValue()]; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + state = state.withProperty(FACING, EnumFacing.UP); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() == this.crop && i == 7) + { + state = state.withProperty(FACING, enumfacing); + break; + } + } + + return state; + } + + /** + * Return true if the block can sustain a Bush + */ + protected boolean canSustainBush(IBlockState state) + { + return state.getBlock() == Blocks.FARMLAND; + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + super.updateTick(worldIn, pos, state, rand); + + if (!worldIn.isAreaLoaded(pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light + if (worldIn.getLightFromNeighbors(pos.up()) >= 9) + { + float f = BlockCrops.getGrowthChance(this, worldIn, pos); + + if(net.minecraftforge.common.ForgeHooks.onCropsGrowPre(worldIn, pos, state, rand.nextInt((int)(25.0F / f) + 1) == 0)) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + if (i < 7) + { + IBlockState newState = state.withProperty(AGE, Integer.valueOf(i + 1)); + worldIn.setBlockState(pos, newState, 2); + } + else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (worldIn.getBlockState(pos.offset(enumfacing)).getBlock() == this.crop) + { + return; + } + } + + pos = pos.offset(EnumFacing.Plane.HORIZONTAL.random(rand)); + IBlockState soil = worldIn.getBlockState(pos.down()); + Block block = soil.getBlock(); + + if (worldIn.isAirBlock(pos) && (block.canSustainPlant(soil, worldIn, pos.down(), EnumFacing.UP, this) || block == Blocks.DIRT || block == Blocks.GRASS)) + { + worldIn.setBlockState(pos, this.crop.getDefaultState()); + } + } + net.minecraftforge.common.ForgeHooks.onCropsGrowPost(worldIn, pos, state, worldIn.getBlockState(pos)); + } + } + } + + public void growStem(World worldIn, BlockPos pos, IBlockState state) + { + int i = ((Integer)state.getValue(AGE)).intValue() + MathHelper.getInt(worldIn.rand, 2, 5); + worldIn.setBlockState(pos, state.withProperty(AGE, Integer.valueOf(Math.min(7, i))), 2); + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + super.dropBlockAsItemWithChance(worldIn, pos, state, chance, fortune); + } + + @Override + public void getDrops(net.minecraft.util.NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + { + Item item = this.getSeedItem(); + + if (item != null) + { + int i = ((Integer)state.getValue(AGE)).intValue(); + + for (int j = 0; j < 3; ++j) + { + if (RANDOM.nextInt(15) <= i) + { + drops.add(new ItemStack(item)); + } + } + } + } + } + + @Nullable + protected Item getSeedItem() + { + if (this.crop == Blocks.PUMPKIN) + { + return Items.PUMPKIN_SEEDS; + } + else + { + return this.crop == Blocks.MELON_BLOCK ? Items.MELON_SEEDS : null; + } + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + Item item = this.getSeedItem(); + return item == null ? ItemStack.EMPTY : new ItemStack(item); + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return ((Integer)state.getValue(AGE)).intValue() != 7; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return true; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + this.growStem(worldIn, pos, state); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Integer)state.getValue(AGE)).intValue(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {AGE, FACING}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStone.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStone.java new file mode 100644 index 0000000..de14380 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStone.java @@ -0,0 +1,184 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; + +public class BlockStone extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockStone.EnumType.class); + + public BlockStone() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockStone.EnumType.STONE)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + "." + BlockStone.EnumType.STONE.getUnlocalizedName() + ".name"); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockStone.EnumType)state.getValue(VARIANT)).getMapColor(); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return state.getValue(VARIANT) == BlockStone.EnumType.STONE ? Item.getItemFromBlock(Blocks.COBBLESTONE) : Item.getItemFromBlock(Blocks.STONE); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockStone.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockStone.EnumType blockstone$enumtype : BlockStone.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockstone$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockStone.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockStone.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + public static enum EnumType implements IStringSerializable + { + STONE(0, MapColor.STONE, "stone", true), + GRANITE(1, MapColor.DIRT, "granite", true), + GRANITE_SMOOTH(2, MapColor.DIRT, "smooth_granite", "graniteSmooth", false), + DIORITE(3, MapColor.QUARTZ, "diorite", true), + DIORITE_SMOOTH(4, MapColor.QUARTZ, "smooth_diorite", "dioriteSmooth", false), + ANDESITE(5, MapColor.STONE, "andesite", true), + ANDESITE_SMOOTH(6, MapColor.STONE, "smooth_andesite", "andesiteSmooth", false); + + /** Array of the Block's BlockStates */ + private static final BlockStone.EnumType[] META_LOOKUP = new BlockStone.EnumType[values().length]; + /** The BlockState's metadata. */ + private final int meta; + /** The EnumType's name. */ + private final String name; + private final String unlocalizedName; + private final MapColor mapColor; + private final boolean isNatural; + + private EnumType(int p_i46383_3_, MapColor p_i46383_4_, String p_i46383_5_, boolean p_i46383_6_) + { + this(p_i46383_3_, p_i46383_4_, p_i46383_5_, p_i46383_5_, p_i46383_6_); + } + + private EnumType(int p_i46384_3_, MapColor p_i46384_4_, String p_i46384_5_, String p_i46384_6_, boolean p_i46384_7_) + { + this.meta = p_i46384_3_; + this.name = p_i46384_5_; + this.unlocalizedName = p_i46384_6_; + this.mapColor = p_i46384_4_; + this.isNatural = p_i46384_7_; + } + + /** + * Returns the EnumType's metadata value. + */ + public int getMetadata() + { + return this.meta; + } + + public MapColor getMapColor() + { + return this.mapColor; + } + + public String toString() + { + return this.name; + } + + /** + * Returns an EnumType for the BlockState from a metadata value. + */ + public static BlockStone.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + public boolean isNatural() + { + return this.isNatural; + } + + static + { + for (BlockStone.EnumType blockstone$enumtype : values()) + { + META_LOOKUP[blockstone$enumtype.getMetadata()] = blockstone$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneBrick.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneBrick.java new file mode 100644 index 0000000..af8e8bb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneBrick.java @@ -0,0 +1,126 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; + +public class BlockStoneBrick extends Block +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockStoneBrick.EnumType.class); + public static final int DEFAULT_META = BlockStoneBrick.EnumType.DEFAULT.getMetadata(); + public static final int MOSSY_META = BlockStoneBrick.EnumType.MOSSY.getMetadata(); + public static final int CRACKED_META = BlockStoneBrick.EnumType.CRACKED.getMetadata(); + public static final int CHISELED_META = BlockStoneBrick.EnumType.CHISELED.getMetadata(); + + public BlockStoneBrick() + { + super(Material.ROCK); + this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, BlockStoneBrick.EnumType.DEFAULT)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockStoneBrick.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockStoneBrick.EnumType blockstonebrick$enumtype : BlockStoneBrick.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockstonebrick$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockStoneBrick.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockStoneBrick.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {VARIANT}); + } + + public static enum EnumType implements IStringSerializable + { + DEFAULT(0, "stonebrick", "default"), + MOSSY(1, "mossy_stonebrick", "mossy"), + CRACKED(2, "cracked_stonebrick", "cracked"), + CHISELED(3, "chiseled_stonebrick", "chiseled"); + + private static final BlockStoneBrick.EnumType[] META_LOOKUP = new BlockStoneBrick.EnumType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockStoneBrick.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockStoneBrick.EnumType blockstonebrick$enumtype : values()) + { + META_LOOKUP[blockstonebrick$enumtype.getMetadata()] = blockstonebrick$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneSlab.java new file mode 100644 index 0000000..db4147f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneSlab.java @@ -0,0 +1,226 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public abstract class BlockStoneSlab extends BlockSlab +{ + public static final PropertyBool SEAMLESS = PropertyBool.create("seamless"); + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockStoneSlab.EnumType.class); + + public BlockStoneSlab() + { + super(Material.ROCK); + IBlockState iblockstate = this.blockState.getBaseState(); + + if (this.isDouble()) + { + iblockstate = iblockstate.withProperty(SEAMLESS, Boolean.valueOf(false)); + } + else + { + iblockstate = iblockstate.withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); + } + + this.setDefaultState(iblockstate.withProperty(VARIANT, BlockStoneSlab.EnumType.STONE)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.STONE_SLAB); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.STONE_SLAB, 1, ((BlockStoneSlab.EnumType)state.getValue(VARIANT)).getMetadata()); + } + + /** + * Returns the slab block name with the type associated with it + */ + public String getUnlocalizedName(int meta) + { + return super.getUnlocalizedName() + "." + BlockStoneSlab.EnumType.byMetadata(meta).getUnlocalizedName(); + } + + public IProperty getVariantProperty() + { + return VARIANT; + } + + public Comparable getTypeForItem(ItemStack stack) + { + return BlockStoneSlab.EnumType.byMetadata(stack.getMetadata() & 7); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockStoneSlab.EnumType blockstoneslab$enumtype : BlockStoneSlab.EnumType.values()) + { + if (blockstoneslab$enumtype != BlockStoneSlab.EnumType.WOOD) + { + items.add(new ItemStack(this, 1, blockstoneslab$enumtype.getMetadata())); + } + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockStoneSlab.EnumType.byMetadata(meta & 7)); + + if (this.isDouble()) + { + iblockstate = iblockstate.withProperty(SEAMLESS, Boolean.valueOf((meta & 8) != 0)); + } + else + { + iblockstate = iblockstate.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockStoneSlab.EnumType)state.getValue(VARIANT)).getMetadata(); + + if (this.isDouble()) + { + if (((Boolean)state.getValue(SEAMLESS)).booleanValue()) + { + i |= 8; + } + } + else if (state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return this.isDouble() ? new BlockStateContainer(this, new IProperty[] {SEAMLESS, VARIANT}) : new BlockStateContainer(this, new IProperty[] {HALF, VARIANT}); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockStoneSlab.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockStoneSlab.EnumType)state.getValue(VARIANT)).getMapColor(); + } + + public static enum EnumType implements IStringSerializable + { + STONE(0, MapColor.STONE, "stone"), + SAND(1, MapColor.SAND, "sandstone", "sand"), + WOOD(2, MapColor.WOOD, "wood_old", "wood"), + COBBLESTONE(3, MapColor.STONE, "cobblestone", "cobble"), + BRICK(4, MapColor.RED, "brick"), + SMOOTHBRICK(5, MapColor.STONE, "stone_brick", "smoothStoneBrick"), + NETHERBRICK(6, MapColor.NETHERRACK, "nether_brick", "netherBrick"), + QUARTZ(7, MapColor.QUARTZ, "quartz"); + + private static final BlockStoneSlab.EnumType[] META_LOOKUP = new BlockStoneSlab.EnumType[values().length]; + private final int meta; + private final MapColor mapColor; + private final String name; + private final String unlocalizedName; + + private EnumType(int p_i46381_3_, MapColor p_i46381_4_, String p_i46381_5_) + { + this(p_i46381_3_, p_i46381_4_, p_i46381_5_, p_i46381_5_); + } + + private EnumType(int p_i46382_3_, MapColor p_i46382_4_, String p_i46382_5_, String p_i46382_6_) + { + this.meta = p_i46382_3_; + this.mapColor = p_i46382_4_; + this.name = p_i46382_5_; + this.unlocalizedName = p_i46382_6_; + } + + public int getMetadata() + { + return this.meta; + } + + public MapColor getMapColor() + { + return this.mapColor; + } + + public String toString() + { + return this.name; + } + + public static BlockStoneSlab.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockStoneSlab.EnumType blockstoneslab$enumtype : values()) + { + META_LOOKUP[blockstoneslab$enumtype.getMetadata()] = blockstoneslab$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneSlabNew.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneSlabNew.java new file mode 100644 index 0000000..783eef9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStoneSlabNew.java @@ -0,0 +1,218 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public abstract class BlockStoneSlabNew extends BlockSlab +{ + public static final PropertyBool SEAMLESS = PropertyBool.create("seamless"); + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockStoneSlabNew.EnumType.class); + + public BlockStoneSlabNew() + { + super(Material.ROCK); + IBlockState iblockstate = this.blockState.getBaseState(); + + if (this.isDouble()) + { + iblockstate = iblockstate.withProperty(SEAMLESS, Boolean.valueOf(false)); + } + else + { + iblockstate = iblockstate.withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); + } + + this.setDefaultState(iblockstate.withProperty(VARIANT, BlockStoneSlabNew.EnumType.RED_SANDSTONE)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + ".red_sandstone.name"); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.STONE_SLAB2); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.STONE_SLAB2, 1, ((BlockStoneSlabNew.EnumType)state.getValue(VARIANT)).getMetadata()); + } + + /** + * Returns the slab block name with the type associated with it + */ + public String getUnlocalizedName(int meta) + { + return super.getUnlocalizedName() + "." + BlockStoneSlabNew.EnumType.byMetadata(meta).getUnlocalizedName(); + } + + public IProperty getVariantProperty() + { + return VARIANT; + } + + public Comparable getTypeForItem(ItemStack stack) + { + return BlockStoneSlabNew.EnumType.byMetadata(stack.getMetadata() & 7); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockStoneSlabNew.EnumType blockstoneslabnew$enumtype : BlockStoneSlabNew.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockstoneslabnew$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockStoneSlabNew.EnumType.byMetadata(meta & 7)); + + if (this.isDouble()) + { + iblockstate = iblockstate.withProperty(SEAMLESS, Boolean.valueOf((meta & 8) != 0)); + } + else + { + iblockstate = iblockstate.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockStoneSlabNew.EnumType)state.getValue(VARIANT)).getMetadata(); + + if (this.isDouble()) + { + if (((Boolean)state.getValue(SEAMLESS)).booleanValue()) + { + i |= 8; + } + } + else if (state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return this.isDouble() ? new BlockStateContainer(this, new IProperty[] {SEAMLESS, VARIANT}) : new BlockStateContainer(this, new IProperty[] {HALF, VARIANT}); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockStoneSlabNew.EnumType)state.getValue(VARIANT)).getMapColor(); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockStoneSlabNew.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + public static enum EnumType implements IStringSerializable + { + RED_SANDSTONE(0, "red_sandstone", BlockSand.EnumType.RED_SAND.getMapColor()); + + private static final BlockStoneSlabNew.EnumType[] META_LOOKUP = new BlockStoneSlabNew.EnumType[values().length]; + private final int meta; + private final String name; + private final MapColor mapColor; + + private EnumType(int p_i46391_3_, String p_i46391_4_, MapColor p_i46391_5_) + { + this.meta = p_i46391_3_; + this.name = p_i46391_4_; + this.mapColor = p_i46391_5_; + } + + public int getMetadata() + { + return this.meta; + } + + public MapColor getMapColor() + { + return this.mapColor; + } + + public String toString() + { + return this.name; + } + + public static BlockStoneSlabNew.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.name; + } + + static + { + for (BlockStoneSlabNew.EnumType blockstoneslabnew$enumtype : values()) + { + META_LOOKUP[blockstoneslabnew$enumtype.getMetadata()] = blockstoneslabnew$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStructure.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStructure.java new file mode 100644 index 0000000..7f1d2bf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStructure.java @@ -0,0 +1,157 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockStructure extends BlockContainer +{ + public static final PropertyEnum MODE = PropertyEnum.create("mode", TileEntityStructure.Mode.class); + + public BlockStructure() + { + super(Material.IRON, MapColor.SILVER); + this.setDefaultState(this.blockState.getBaseState()); + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World worldIn, int meta) + { + return new TileEntityStructure(); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + return tileentity instanceof TileEntityStructure ? ((TileEntityStructure)tileentity).usedBy(playerIn) : false; + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + if (!worldIn.isRemote) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityStructure) + { + TileEntityStructure tileentitystructure = (TileEntityStructure)tileentity; + tileentitystructure.createdBy(placer); + } + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + return this.getDefaultState().withProperty(MODE, TileEntityStructure.Mode.DATA); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(MODE, TileEntityStructure.Mode.getById(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((TileEntityStructure.Mode)state.getValue(MODE)).getModeId(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {MODE}); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityStructure) + { + TileEntityStructure tileentitystructure = (TileEntityStructure)tileentity; + boolean flag = worldIn.isBlockPowered(pos); + boolean flag1 = tileentitystructure.isPowered(); + + if (flag && !flag1) + { + tileentitystructure.setPowered(true); + this.trigger(tileentitystructure); + } + else if (!flag && flag1) + { + tileentitystructure.setPowered(false); + } + } + } + } + + private void trigger(TileEntityStructure p_189874_1_) + { + switch (p_189874_1_.getMode()) + { + case SAVE: + p_189874_1_.save(false); + break; + case LOAD: + p_189874_1_.load(false); + break; + case CORNER: + p_189874_1_.unloadStructure(); + case DATA: + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockStructureVoid.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStructureVoid.java new file mode 100644 index 0000000..7049879 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockStructureVoid.java @@ -0,0 +1,90 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockStructureVoid extends Block +{ + private static final AxisAlignedBB STRUCTURE_VOID_AABB = new AxisAlignedBB(0.3D, 0.3D, 0.3D, 0.7D, 0.7D, 0.7D); + + protected BlockStructureVoid() + { + super(Material.STRUCTURE_VOID); + } + + /** + * The type of render function called. MODEL for mixed tesr and static model, MODELBLOCK_ANIMATED for TESR-only, + * LIQUID for vanilla liquids, INVISIBLE to skip all rendering + */ + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.INVISIBLE; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return STRUCTURE_VOID_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public float getAmbientOcclusionLightValue(IBlockState state) + { + return 1.0F; + } + + /** + * Spawns this Block's drops into the World as EntityItems. + */ + public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) + { + } + + public EnumPushReaction getMobilityFlag(IBlockState state) + { + return EnumPushReaction.DESTROY; + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockTNT.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTNT.java new file mode 100644 index 0000000..4cb0e0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTNT.java @@ -0,0 +1,172 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +public class BlockTNT extends Block +{ + public static final PropertyBool EXPLODE = PropertyBool.create("explode"); + + public BlockTNT() + { + super(Material.TNT); + this.setDefaultState(this.blockState.getBaseState().withProperty(EXPLODE, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + super.onBlockAdded(worldIn, pos, state); + + if (worldIn.isBlockPowered(pos)) + { + this.onBlockDestroyedByPlayer(worldIn, pos, state.withProperty(EXPLODE, Boolean.valueOf(true))); + worldIn.setBlockToAir(pos); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (worldIn.isBlockPowered(pos)) + { + this.onBlockDestroyedByPlayer(worldIn, pos, state.withProperty(EXPLODE, Boolean.valueOf(true))); + worldIn.setBlockToAir(pos); + } + } + + /** + * Called when this Block is destroyed by an Explosion + */ + public void onBlockDestroyedByExplosion(World worldIn, BlockPos pos, Explosion explosionIn) + { + if (!worldIn.isRemote) + { + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(worldIn, (double)((float)pos.getX() + 0.5F), (double)pos.getY(), (double)((float)pos.getZ() + 0.5F), explosionIn.getExplosivePlacedBy()); + entitytntprimed.setFuse((short)(worldIn.rand.nextInt(entitytntprimed.getFuse() / 4) + entitytntprimed.getFuse() / 8)); + worldIn.spawnEntity(entitytntprimed); + } + } + + /** + * Called after a player destroys this Block - the posiiton pos may no longer hold the state indicated. + */ + public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state) + { + this.explode(worldIn, pos, state, (EntityLivingBase)null); + } + + public void explode(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase igniter) + { + if (!worldIn.isRemote) + { + if (((Boolean)state.getValue(EXPLODE)).booleanValue()) + { + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(worldIn, (double)((float)pos.getX() + 0.5F), (double)pos.getY(), (double)((float)pos.getZ() + 0.5F), igniter); + worldIn.spawnEntity(entitytntprimed); + worldIn.playSound((EntityPlayer)null, entitytntprimed.posX, entitytntprimed.posY, entitytntprimed.posZ, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + } + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = playerIn.getHeldItem(hand); + + if (!itemstack.isEmpty() && (itemstack.getItem() == Items.FLINT_AND_STEEL || itemstack.getItem() == Items.FIRE_CHARGE)) + { + this.explode(worldIn, pos, state.withProperty(EXPLODE, Boolean.valueOf(true)), playerIn); + worldIn.setBlockState(pos, Blocks.AIR.getDefaultState(), 11); + + if (itemstack.getItem() == Items.FLINT_AND_STEEL) + { + itemstack.damageItem(1, playerIn); + } + else if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return true; + } + else + { + return super.onBlockActivated(worldIn, pos, state, playerIn, hand, facing, hitX, hitY, hitZ); + } + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote && entityIn instanceof EntityArrow) + { + EntityArrow entityarrow = (EntityArrow)entityIn; + + if (entityarrow.isBurning()) + { + this.explode(worldIn, pos, worldIn.getBlockState(pos).withProperty(EXPLODE, Boolean.valueOf(true)), entityarrow.shootingEntity instanceof EntityLivingBase ? (EntityLivingBase)entityarrow.shootingEntity : null); + worldIn.setBlockToAir(pos); + } + } + } + + /** + * Return whether this block can drop from an explosion. + */ + public boolean canDropFromExplosion(Explosion explosionIn) + { + return false; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(EXPLODE, Boolean.valueOf((meta & 1) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((Boolean)state.getValue(EXPLODE)).booleanValue() ? 1 : 0; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {EXPLODE}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockTallGrass.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTallGrass.java new file mode 100644 index 0000000..a4a07bf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTallGrass.java @@ -0,0 +1,224 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockTallGrass extends BlockBush implements IGrowable, net.minecraftforge.common.IShearable +{ + public static final PropertyEnum TYPE = PropertyEnum.create("type", BlockTallGrass.EnumType.class); + protected static final AxisAlignedBB TALL_GRASS_AABB = new AxisAlignedBB(0.09999999403953552D, 0.0D, 0.09999999403953552D, 0.8999999761581421D, 0.800000011920929D, 0.8999999761581421D); + + protected BlockTallGrass() + { + super(Material.VINE); + this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, BlockTallGrass.EnumType.DEAD_BUSH)); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return TALL_GRASS_AABB; + } + + public boolean canBlockStay(World worldIn, BlockPos pos, IBlockState state) + { + return super.canBlockStay(worldIn, pos, state); + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return null; + } + + /** + * Get the quantity dropped based on the given fortune level + */ + public int quantityDroppedWithBonus(int fortune, Random random) + { + return 1 + random.nextInt(fortune * 2 + 1); + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (!worldIn.isRemote && stack.getItem() == Items.SHEARS) + { + player.addStat(StatList.getBlockStats(this)); + spawnAsEntity(worldIn, pos, new ItemStack(Blocks.TALLGRASS, 1, ((BlockTallGrass.EnumType)state.getValue(TYPE)).getMeta())); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(this, 1, state.getBlock().getMetaFromState(state)); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (int i = 1; i < 3; ++i) + { + items.add(new ItemStack(this, 1, i)); + } + } + + /** + * Whether this IGrowable can grow + */ + public boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient) + { + return state.getValue(TYPE) != BlockTallGrass.EnumType.DEAD_BUSH; + } + + public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + return true; + } + + public void grow(World worldIn, Random rand, BlockPos pos, IBlockState state) + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType.GRASS; + + if (state.getValue(TYPE) == BlockTallGrass.EnumType.FERN) + { + blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType.FERN; + } + + if (Blocks.DOUBLE_PLANT.canPlaceBlockAt(worldIn, pos)) + { + Blocks.DOUBLE_PLANT.placeAt(worldIn, pos, blockdoubleplant$enumplanttype, 2); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(TYPE, BlockTallGrass.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockTallGrass.EnumType)state.getValue(TYPE)).getMeta(); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {TYPE}); + } + + /** + * Get the OffsetType for this Block. Determines if the model is rendered slightly offset. + */ + public Block.EnumOffsetType getOffsetType() + { + return Block.EnumOffsetType.XYZ; + } + + public static enum EnumType implements IStringSerializable + { + DEAD_BUSH(0, "dead_bush"), + GRASS(1, "tall_grass"), + FERN(2, "fern"); + + private static final BlockTallGrass.EnumType[] META_LOOKUP = new BlockTallGrass.EnumType[values().length]; + private final int meta; + private final String name; + + private EnumType(int meta, String name) + { + this.meta = meta; + this.name = name; + } + + public int getMeta() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockTallGrass.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + static + { + for (BlockTallGrass.EnumType blocktallgrass$enumtype : values()) + { + META_LOOKUP[blocktallgrass$enumtype.getMeta()] = blocktallgrass$enumtype; + } + } + } + + @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } + @Override + public NonNullList onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) + { + return NonNullList.withSize(1, new ItemStack(Blocks.TALLGRASS, 1, ((BlockTallGrass.EnumType)world.getBlockState(pos).getValue(TYPE)).getMeta())); + } + @Override + public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) + { + if (RANDOM.nextInt(8) != 0) return; + ItemStack seed = net.minecraftforge.common.ForgeHooks.getGrassSeed(RANDOM, fortune); + if (!seed.isEmpty()) + drops.add(seed); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockTorch.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTorch.java new file mode 100644 index 0000000..f2ee141 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTorch.java @@ -0,0 +1,349 @@ +package net.minecraft.block; + +import com.google.common.base.Predicate; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTorch extends Block +{ + public static final PropertyDirection FACING = PropertyDirection.create("facing", new Predicate() + { + public boolean apply(@Nullable EnumFacing p_apply_1_) + { + return p_apply_1_ != EnumFacing.DOWN; + } + }); + protected static final AxisAlignedBB STANDING_AABB = new AxisAlignedBB(0.4000000059604645D, 0.0D, 0.4000000059604645D, 0.6000000238418579D, 0.6000000238418579D, 0.6000000238418579D); + protected static final AxisAlignedBB TORCH_NORTH_AABB = new AxisAlignedBB(0.3499999940395355D, 0.20000000298023224D, 0.699999988079071D, 0.6499999761581421D, 0.800000011920929D, 1.0D); + protected static final AxisAlignedBB TORCH_SOUTH_AABB = new AxisAlignedBB(0.3499999940395355D, 0.20000000298023224D, 0.0D, 0.6499999761581421D, 0.800000011920929D, 0.30000001192092896D); + protected static final AxisAlignedBB TORCH_WEST_AABB = new AxisAlignedBB(0.699999988079071D, 0.20000000298023224D, 0.3499999940395355D, 1.0D, 0.800000011920929D, 0.6499999761581421D); + protected static final AxisAlignedBB TORCH_EAST_AABB = new AxisAlignedBB(0.0D, 0.20000000298023224D, 0.3499999940395355D, 0.30000001192092896D, 0.800000011920929D, 0.6499999761581421D); + + protected BlockTorch() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case EAST: + return TORCH_EAST_AABB; + case WEST: + return TORCH_WEST_AABB; + case SOUTH: + return TORCH_SOUTH_AABB; + case NORTH: + return TORCH_NORTH_AABB; + default: + return STANDING_AABB; + } + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + private boolean canPlaceOn(World worldIn, BlockPos pos) + { + IBlockState state = worldIn.getBlockState(pos); + return state.getBlock().canPlaceTorchOnTop(state, worldIn, pos); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : FACING.getAllowedValues()) + { + if (this.canPlaceAt(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + private boolean canPlaceAt(World worldIn, BlockPos pos, EnumFacing facing) + { + BlockPos blockpos = pos.offset(facing.getOpposite()); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + BlockFaceShape blockfaceshape = iblockstate.getBlockFaceShape(worldIn, blockpos, facing); + + if (facing.equals(EnumFacing.UP) && this.canPlaceOn(worldIn, blockpos)) + { + return true; + } + else if (facing != EnumFacing.UP && facing != EnumFacing.DOWN) + { + return !isExceptBlockForAttachWithPiston(block) && blockfaceshape == BlockFaceShape.SOLID; + } + else + { + return false; + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + if (this.canPlaceAt(worldIn, pos, facing)) + { + return this.getDefaultState().withProperty(FACING, facing); + } + else + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.canPlaceAt(worldIn, pos, enumfacing)) + { + return this.getDefaultState().withProperty(FACING, enumfacing); + } + } + + return this.getDefaultState(); + } + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + this.checkForDrop(worldIn, pos, state); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.onNeighborChangeInternal(worldIn, pos, state); + } + + protected boolean onNeighborChangeInternal(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.checkForDrop(worldIn, pos, state)) + { + return true; + } + else + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + EnumFacing.Axis enumfacing$axis = enumfacing.getAxis(); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + BlockPos blockpos = pos.offset(enumfacing1); + boolean flag = false; + + if (enumfacing$axis.isHorizontal() && worldIn.getBlockState(blockpos).getBlockFaceShape(worldIn, blockpos, enumfacing) != BlockFaceShape.SOLID) + { + flag = true; + } + else if (enumfacing$axis.isVertical() && !this.canPlaceOn(worldIn, blockpos)) + { + flag = true; + } + + if (flag) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return true; + } + else + { + return false; + } + } + } + + protected boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (state.getBlock() == this && this.canPlaceAt(worldIn, pos, (EnumFacing)state.getValue(FACING))) + { + return true; + } + else + { + if (worldIn.getBlockState(pos).getBlock() == this) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + return false; + } + } + + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, Random rand) + { + EnumFacing enumfacing = (EnumFacing)stateIn.getValue(FACING); + double d0 = (double)pos.getX() + 0.5D; + double d1 = (double)pos.getY() + 0.7D; + double d2 = (double)pos.getZ() + 0.5D; + double d3 = 0.22D; + double d4 = 0.27D; + + if (enumfacing.getAxis().isHorizontal()) + { + EnumFacing enumfacing1 = enumfacing.getOpposite(); + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + 0.27D * (double)enumfacing1.getFrontOffsetX(), d1 + 0.22D, d2 + 0.27D * (double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + 0.27D * (double)enumfacing1.getFrontOffsetX(), d1 + 0.22D, d2 + 0.27D * (double)enumfacing1.getFrontOffsetZ(), 0.0D, 0.0D, 0.0D); + } + else + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D); + worldIn.spawnParticle(EnumParticleTypes.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState(); + + switch (meta) + { + case 1: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.EAST); + break; + case 2: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.WEST); + break; + case 3: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.SOUTH); + break; + case 4: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.NORTH); + break; + case 5: + default: + iblockstate = iblockstate.withProperty(FACING, EnumFacing.UP); + } + + return iblockstate; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + switch ((EnumFacing)state.getValue(FACING)) + { + case EAST: + i = i | 1; + break; + case WEST: + i = i | 2; + break; + case SOUTH: + i = i | 3; + break; + case NORTH: + i = i | 4; + break; + case DOWN: + case UP: + default: + i = i | 5; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockTrapDoor.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTrapDoor.java new file mode 100644 index 0000000..2572a80 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTrapDoor.java @@ -0,0 +1,331 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTrapDoor extends Block +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyBool OPEN = PropertyBool.create("open"); + public static final PropertyEnum HALF = PropertyEnum.create("half", BlockTrapDoor.DoorHalf.class); + protected static final AxisAlignedBB EAST_OPEN_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.1875D, 1.0D, 1.0D); + protected static final AxisAlignedBB WEST_OPEN_AABB = new AxisAlignedBB(0.8125D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB SOUTH_OPEN_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.1875D); + protected static final AxisAlignedBB NORTH_OPEN_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.8125D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB BOTTOM_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.1875D, 1.0D); + protected static final AxisAlignedBB TOP_AABB = new AxisAlignedBB(0.0D, 0.8125D, 0.0D, 1.0D, 1.0D, 1.0D); + + protected BlockTrapDoor(Material materialIn) + { + super(materialIn); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(OPEN, Boolean.valueOf(false)).withProperty(HALF, BlockTrapDoor.DoorHalf.BOTTOM)); + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + AxisAlignedBB axisalignedbb; + + if (((Boolean)state.getValue(OPEN)).booleanValue()) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case NORTH: + default: + axisalignedbb = NORTH_OPEN_AABB; + break; + case SOUTH: + axisalignedbb = SOUTH_OPEN_AABB; + break; + case WEST: + axisalignedbb = WEST_OPEN_AABB; + break; + case EAST: + axisalignedbb = EAST_OPEN_AABB; + } + } + else if (state.getValue(HALF) == BlockTrapDoor.DoorHalf.TOP) + { + axisalignedbb = TOP_AABB; + } + else + { + axisalignedbb = BOTTOM_AABB; + } + + return axisalignedbb; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return !((Boolean)worldIn.getBlockState(pos).getValue(OPEN)).booleanValue(); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (this.blockMaterial == Material.IRON) + { + return false; + } + else + { + state = state.cycleProperty(OPEN); + worldIn.setBlockState(pos, state, 2); + this.playSound(playerIn, worldIn, pos, ((Boolean)state.getValue(OPEN)).booleanValue()); + return true; + } + } + + protected void playSound(@Nullable EntityPlayer player, World worldIn, BlockPos pos, boolean p_185731_4_) + { + if (p_185731_4_) + { + int i = this.blockMaterial == Material.IRON ? 1037 : 1007; + worldIn.playEvent(player, i, pos, 0); + } + else + { + int j = this.blockMaterial == Material.IRON ? 1036 : 1013; + worldIn.playEvent(player, j, pos, 0); + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote) + { + boolean flag = worldIn.isBlockPowered(pos); + + if (flag || blockIn.getDefaultState().canProvidePower()) + { + boolean flag1 = ((Boolean)state.getValue(OPEN)).booleanValue(); + + if (flag1 != flag) + { + worldIn.setBlockState(pos, state.withProperty(OPEN, Boolean.valueOf(flag)), 2); + this.playSound((EntityPlayer)null, worldIn, pos, flag); + } + } + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = this.getDefaultState(); + + if (facing.getAxis().isHorizontal()) + { + iblockstate = iblockstate.withProperty(FACING, facing).withProperty(OPEN, Boolean.valueOf(false)); + iblockstate = iblockstate.withProperty(HALF, hitY > 0.5F ? BlockTrapDoor.DoorHalf.TOP : BlockTrapDoor.DoorHalf.BOTTOM); + } + else + { + iblockstate = iblockstate.withProperty(FACING, placer.getHorizontalFacing().getOpposite()).withProperty(OPEN, Boolean.valueOf(false)); + iblockstate = iblockstate.withProperty(HALF, facing == EnumFacing.UP ? BlockTrapDoor.DoorHalf.BOTTOM : BlockTrapDoor.DoorHalf.TOP); + } + + if (worldIn.isBlockPowered(pos)) + { + iblockstate = iblockstate.withProperty(OPEN, Boolean.valueOf(true)); + } + + return iblockstate; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return true; + } + + protected static EnumFacing getFacing(int meta) + { + switch (meta & 3) + { + case 0: + return EnumFacing.NORTH; + case 1: + return EnumFacing.SOUTH; + case 2: + return EnumFacing.WEST; + case 3: + default: + return EnumFacing.EAST; + } + } + + protected static int getMetaForFacing(EnumFacing facing) + { + switch (facing) + { + case NORTH: + return 0; + case SOUTH: + return 1; + case WEST: + return 2; + case EAST: + default: + return 3; + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, getFacing(meta)).withProperty(OPEN, Boolean.valueOf((meta & 4) != 0)).withProperty(HALF, (meta & 8) == 0 ? BlockTrapDoor.DoorHalf.BOTTOM : BlockTrapDoor.DoorHalf.TOP); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | getMetaForFacing((EnumFacing)state.getValue(FACING)); + + if (((Boolean)state.getValue(OPEN)).booleanValue()) + { + i |= 4; + } + + if (state.getValue(HALF) == BlockTrapDoor.DoorHalf.TOP) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, OPEN, HALF}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return (face == EnumFacing.UP && state.getValue(HALF) == BlockTrapDoor.DoorHalf.TOP || face == EnumFacing.DOWN && state.getValue(HALF) == BlockTrapDoor.DoorHalf.BOTTOM) && !((Boolean)state.getValue(OPEN)).booleanValue() ? BlockFaceShape.SOLID : BlockFaceShape.UNDEFINED; + } + + @Override + public boolean isLadder(IBlockState state, IBlockAccess world, BlockPos pos, EntityLivingBase entity) + { + if (state.getValue(OPEN)) + { + IBlockState down = world.getBlockState(pos.down()); + if (down.getBlock() == net.minecraft.init.Blocks.LADDER) + return down.getValue(BlockLadder.FACING) == state.getValue(FACING); + } + return false; + } + + public static enum DoorHalf implements IStringSerializable + { + TOP("top"), + BOTTOM("bottom"); + + private final String name; + + private DoorHalf(String name) + { + this.name = name; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockTripWire.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTripWire.java new file mode 100644 index 0000000..7c0211a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTripWire.java @@ -0,0 +1,327 @@ +package net.minecraft.block; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTripWire extends Block +{ + public static final PropertyBool POWERED = PropertyBool.create("powered"); + public static final PropertyBool ATTACHED = PropertyBool.create("attached"); + public static final PropertyBool DISARMED = PropertyBool.create("disarmed"); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + protected static final AxisAlignedBB AABB = new AxisAlignedBB(0.0D, 0.0625D, 0.0D, 1.0D, 0.15625D, 1.0D); + protected static final AxisAlignedBB TRIP_WRITE_ATTACHED_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); + + public BlockTripWire() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(POWERED, Boolean.valueOf(false)).withProperty(ATTACHED, Boolean.valueOf(false)).withProperty(DISARMED, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + return !((Boolean)state.getValue(ATTACHED)).booleanValue() ? TRIP_WRITE_ATTACHED_AABB : AABB; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return state.withProperty(NORTH, Boolean.valueOf(isConnectedTo(worldIn, pos, state, EnumFacing.NORTH))).withProperty(EAST, Boolean.valueOf(isConnectedTo(worldIn, pos, state, EnumFacing.EAST))).withProperty(SOUTH, Boolean.valueOf(isConnectedTo(worldIn, pos, state, EnumFacing.SOUTH))).withProperty(WEST, Boolean.valueOf(isConnectedTo(worldIn, pos, state, EnumFacing.WEST))); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.TRANSLUCENT; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.STRING; + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Items.STRING); + } + + /** + * Called after the block is set in the Chunk data, but before the Tile Entity is set + */ + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) + { + worldIn.setBlockState(pos, state, 3); + this.notifyHook(worldIn, pos, state); + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + this.notifyHook(worldIn, pos, state.withProperty(POWERED, Boolean.valueOf(true))); + } + + /** + * Called before the Block is set to air in the world. Called regardless of if the player's tool can actually + * collect this block + */ + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) + { + if (!worldIn.isRemote) + { + if (!player.getHeldItemMainhand().isEmpty() && player.getHeldItemMainhand().getItem() == Items.SHEARS) + { + worldIn.setBlockState(pos, state.withProperty(DISARMED, Boolean.valueOf(true)), 4); + } + } + } + + private void notifyHook(World worldIn, BlockPos pos, IBlockState state) + { + for (EnumFacing enumfacing : new EnumFacing[] {EnumFacing.SOUTH, EnumFacing.WEST}) + { + for (int i = 1; i < 42; ++i) + { + BlockPos blockpos = pos.offset(enumfacing, i); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() == Blocks.TRIPWIRE_HOOK) + { + if (iblockstate.getValue(BlockTripWireHook.FACING) == enumfacing.getOpposite()) + { + Blocks.TRIPWIRE_HOOK.calculateState(worldIn, blockpos, iblockstate, false, true, i, state); + } + + break; + } + + if (iblockstate.getBlock() != Blocks.TRIPWIRE) + { + break; + } + } + } + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + if (!worldIn.isRemote) + { + if (!((Boolean)state.getValue(POWERED)).booleanValue()) + { + this.updateState(worldIn, pos); + } + } + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (((Boolean)worldIn.getBlockState(pos).getValue(POWERED)).booleanValue()) + { + this.updateState(worldIn, pos); + } + } + } + + private void updateState(World worldIn, BlockPos pos) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + boolean flag = ((Boolean)iblockstate.getValue(POWERED)).booleanValue(); + boolean flag1 = false; + List list = worldIn.getEntitiesWithinAABBExcludingEntity((Entity)null, iblockstate.getBoundingBox(worldIn, pos).offset(pos)); + + if (!list.isEmpty()) + { + for (Entity entity : list) + { + if (!entity.doesEntityNotTriggerPressurePlate()) + { + flag1 = true; + break; + } + } + } + + if (flag1 != flag) + { + iblockstate = iblockstate.withProperty(POWERED, Boolean.valueOf(flag1)); + worldIn.setBlockState(pos, iblockstate, 3); + this.notifyHook(worldIn, pos, iblockstate); + } + + if (flag1) + { + worldIn.scheduleUpdate(new BlockPos(pos), this, this.tickRate(worldIn)); + } + } + + public static boolean isConnectedTo(IBlockAccess worldIn, BlockPos pos, IBlockState state, EnumFacing direction) + { + BlockPos blockpos = pos.offset(direction); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + + if (block == Blocks.TRIPWIRE_HOOK) + { + EnumFacing enumfacing = direction.getOpposite(); + return iblockstate.getValue(BlockTripWireHook.FACING) == enumfacing; + } + else + { + return block == Blocks.TRIPWIRE; + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(POWERED, Boolean.valueOf((meta & 1) > 0)).withProperty(ATTACHED, Boolean.valueOf((meta & 4) > 0)).withProperty(DISARMED, Boolean.valueOf((meta & 8) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 1; + } + + if (((Boolean)state.getValue(ATTACHED)).booleanValue()) + { + i |= 4; + } + + if (((Boolean)state.getValue(DISARMED)).booleanValue()) + { + i |= 8; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(EAST, state.getValue(WEST)).withProperty(SOUTH, state.getValue(NORTH)).withProperty(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(EAST)).withProperty(EAST, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(WEST)).withProperty(WEST, state.getValue(NORTH)); + case CLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(WEST)).withProperty(EAST, state.getValue(NORTH)).withProperty(SOUTH, state.getValue(EAST)).withProperty(WEST, state.getValue(SOUTH)); + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + switch (mirrorIn) + { + case LEFT_RIGHT: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(NORTH)); + case FRONT_BACK: + return state.withProperty(EAST, state.getValue(WEST)).withProperty(WEST, state.getValue(EAST)); + default: + return super.withMirror(state, mirrorIn); + } + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {POWERED, ATTACHED, DISARMED, NORTH, EAST, WEST, SOUTH}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockTripWireHook.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTripWireHook.java new file mode 100644 index 0000000..91d3d1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockTripWireHook.java @@ -0,0 +1,418 @@ +package net.minecraft.block; + +import com.google.common.base.MoreObjects; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTripWireHook extends Block +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + public static final PropertyBool POWERED = PropertyBool.create("powered"); + public static final PropertyBool ATTACHED = PropertyBool.create("attached"); + protected static final AxisAlignedBB HOOK_NORTH_AABB = new AxisAlignedBB(0.3125D, 0.0D, 0.625D, 0.6875D, 0.625D, 1.0D); + protected static final AxisAlignedBB HOOK_SOUTH_AABB = new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.625D, 0.375D); + protected static final AxisAlignedBB HOOK_WEST_AABB = new AxisAlignedBB(0.625D, 0.0D, 0.3125D, 1.0D, 0.625D, 0.6875D); + protected static final AxisAlignedBB HOOK_EAST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 0.375D, 0.625D, 0.6875D); + + public BlockTripWireHook() + { + super(Material.CIRCUITS); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(POWERED, Boolean.valueOf(false)).withProperty(ATTACHED, Boolean.valueOf(false))); + this.setCreativeTab(CreativeTabs.REDSTONE); + this.setTickRandomly(true); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case EAST: + default: + return HOOK_EAST_AABB; + case WEST: + return HOOK_WEST_AABB; + case SOUTH: + return HOOK_SOUTH_AABB; + case NORTH: + return HOOK_NORTH_AABB; + } + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + EnumFacing enumfacing = side.getOpposite(); + BlockPos blockpos = pos.offset(enumfacing); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + boolean flag = isExceptBlockForAttachWithPiston(iblockstate.getBlock()); + return !flag && side.getAxis().isHorizontal() && iblockstate.getBlockFaceShape(worldIn, blockpos, side) == BlockFaceShape.SOLID && !iblockstate.canProvidePower(); + } + + /** + * Checks if this block can be placed exactly at the given position. + */ + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) + { + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (this.canPlaceBlockOnSide(worldIn, pos, enumfacing)) + { + return true; + } + } + + return false; + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = this.getDefaultState().withProperty(POWERED, Boolean.valueOf(false)).withProperty(ATTACHED, Boolean.valueOf(false)); + + if (facing.getAxis().isHorizontal()) + { + iblockstate = iblockstate.withProperty(FACING, facing); + } + + return iblockstate; + } + + /** + * Called by ItemBlocks after a block is set in the world, to allow post-place logic + */ + public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) + { + this.calculateState(worldIn, pos, state, false, false, -1, (IBlockState)null); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (blockIn != this) + { + if (this.checkForDrop(worldIn, pos, state)) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (!this.canPlaceBlockOnSide(worldIn, pos, enumfacing)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + } + } + + public void calculateState(World worldIn, BlockPos pos, IBlockState hookState, boolean p_176260_4_, boolean p_176260_5_, int p_176260_6_, @Nullable IBlockState p_176260_7_) + { + EnumFacing enumfacing = (EnumFacing)hookState.getValue(FACING); + boolean flag = ((Boolean)hookState.getValue(ATTACHED)).booleanValue(); + boolean flag1 = ((Boolean)hookState.getValue(POWERED)).booleanValue(); + boolean flag2 = !p_176260_4_; + boolean flag3 = false; + int i = 0; + IBlockState[] aiblockstate = new IBlockState[42]; + + for (int j = 1; j < 42; ++j) + { + BlockPos blockpos = pos.offset(enumfacing, j); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getBlock() == Blocks.TRIPWIRE_HOOK) + { + if (iblockstate.getValue(FACING) == enumfacing.getOpposite()) + { + i = j; + } + + break; + } + + if (iblockstate.getBlock() != Blocks.TRIPWIRE && j != p_176260_6_) + { + aiblockstate[j] = null; + flag2 = false; + } + else + { + if (j == p_176260_6_) + { + iblockstate = (IBlockState)MoreObjects.firstNonNull(p_176260_7_, iblockstate); + } + + boolean flag4 = !((Boolean)iblockstate.getValue(BlockTripWire.DISARMED)).booleanValue(); + boolean flag5 = ((Boolean)iblockstate.getValue(BlockTripWire.POWERED)).booleanValue(); + flag3 |= flag4 && flag5; + aiblockstate[j] = iblockstate; + + if (j == p_176260_6_) + { + worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn)); + flag2 &= flag4; + } + } + } + + flag2 = flag2 & i > 1; + flag3 = flag3 & flag2; + IBlockState iblockstate1 = this.getDefaultState().withProperty(ATTACHED, Boolean.valueOf(flag2)).withProperty(POWERED, Boolean.valueOf(flag3)); + + if (i > 0) + { + BlockPos blockpos1 = pos.offset(enumfacing, i); + EnumFacing enumfacing1 = enumfacing.getOpposite(); + worldIn.setBlockState(blockpos1, iblockstate1.withProperty(FACING, enumfacing1), 3); + this.notifyNeighbors(worldIn, blockpos1, enumfacing1); + this.playSound(worldIn, blockpos1, flag2, flag3, flag, flag1); + } + + this.playSound(worldIn, pos, flag2, flag3, flag, flag1); + + if (!p_176260_4_) + { + worldIn.setBlockState(pos, iblockstate1.withProperty(FACING, enumfacing), 3); + + if (p_176260_5_) + { + this.notifyNeighbors(worldIn, pos, enumfacing); + } + } + + if (flag != flag2) + { + for (int k = 1; k < i; ++k) + { + BlockPos blockpos2 = pos.offset(enumfacing, k); + IBlockState iblockstate2 = aiblockstate[k]; + + if (iblockstate2 != null && worldIn.getBlockState(blockpos2).getMaterial() != Material.AIR) + { + worldIn.setBlockState(blockpos2, iblockstate2.withProperty(ATTACHED, Boolean.valueOf(flag2)), 3); + } + } + } + } + + /** + * Called randomly when setTickRandomly is set to true (used by e.g. crops to grow, etc.) + */ + public void randomTick(World worldIn, BlockPos pos, IBlockState state, Random random) + { + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + this.calculateState(worldIn, pos, state, false, true, -1, (IBlockState)null); + } + + private void playSound(World worldIn, BlockPos pos, boolean p_180694_3_, boolean p_180694_4_, boolean p_180694_5_, boolean p_180694_6_) + { + if (p_180694_4_ && !p_180694_6_) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_TRIPWIRE_CLICK_ON, SoundCategory.BLOCKS, 0.4F, 0.6F); + } + else if (!p_180694_4_ && p_180694_6_) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_TRIPWIRE_CLICK_OFF, SoundCategory.BLOCKS, 0.4F, 0.5F); + } + else if (p_180694_3_ && !p_180694_5_) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_TRIPWIRE_ATTACH, SoundCategory.BLOCKS, 0.4F, 0.7F); + } + else if (!p_180694_3_ && p_180694_5_) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_TRIPWIRE_DETACH, SoundCategory.BLOCKS, 0.4F, 1.2F / (worldIn.rand.nextFloat() * 0.2F + 0.9F)); + } + } + + private void notifyNeighbors(World worldIn, BlockPos pos, EnumFacing side) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.offset(side.getOpposite()), this, false); + } + + private boolean checkForDrop(World worldIn, BlockPos pos, IBlockState state) + { + if (!this.canPlaceBlockAt(worldIn, pos)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + return false; + } + else + { + return true; + } + } + + /** + * Called serverside after this block is replaced with another in Chunk, but before the Tile Entity is updated + */ + public void breakBlock(World worldIn, BlockPos pos, IBlockState state) + { + boolean flag = ((Boolean)state.getValue(ATTACHED)).booleanValue(); + boolean flag1 = ((Boolean)state.getValue(POWERED)).booleanValue(); + + if (flag || flag1) + { + this.calculateState(worldIn, pos, state, true, false, -1, (IBlockState)null); + } + + if (flag1) + { + worldIn.notifyNeighborsOfStateChange(pos, this, false); + worldIn.notifyNeighborsOfStateChange(pos.offset(((EnumFacing)state.getValue(FACING)).getOpposite()), this, false); + } + + super.breakBlock(worldIn, pos, state); + } + + public int getWeakPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return ((Boolean)blockState.getValue(POWERED)).booleanValue() ? 15 : 0; + } + + public int getStrongPower(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + if (!((Boolean)blockState.getValue(POWERED)).booleanValue()) + { + return 0; + } + else + { + return blockState.getValue(FACING) == side ? 15 : 0; + } + } + + /** + * Can this block provide power. Only wire currently seems to have this change based on its state. + */ + public boolean canProvidePower(IBlockState state) + { + return true; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT_MIPPED; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta & 3)).withProperty(POWERED, Boolean.valueOf((meta & 8) > 0)).withProperty(ATTACHED, Boolean.valueOf((meta & 4) > 0)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); + + if (((Boolean)state.getValue(POWERED)).booleanValue()) + { + i |= 8; + } + + if (((Boolean)state.getValue(ATTACHED)).booleanValue()) + { + i |= 4; + } + + return i; + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING, POWERED, ATTACHED}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockVine.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockVine.java new file mode 100644 index 0000000..e4c36d2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockVine.java @@ -0,0 +1,532 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockVine extends Block implements net.minecraftforge.common.IShearable +{ + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + public static final PropertyBool[] ALL_FACES = new PropertyBool[] {UP, NORTH, SOUTH, WEST, EAST}; + protected static final AxisAlignedBB UP_AABB = new AxisAlignedBB(0.0D, 0.9375D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB WEST_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.0625D, 1.0D, 1.0D); + protected static final AxisAlignedBB EAST_AABB = new AxisAlignedBB(0.9375D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB NORTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.0625D); + protected static final AxisAlignedBB SOUTH_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.9375D, 1.0D, 1.0D, 1.0D); + + public BlockVine() + { + super(Material.VINE); + this.setDefaultState(this.blockState.getBaseState().withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = state.getActualState(source, pos); + int i = 0; + AxisAlignedBB axisalignedbb = FULL_BLOCK_AABB; + + if (((Boolean)state.getValue(UP)).booleanValue()) + { + axisalignedbb = UP_AABB; + ++i; + } + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + axisalignedbb = NORTH_AABB; + ++i; + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + axisalignedbb = EAST_AABB; + ++i; + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + axisalignedbb = SOUTH_AABB; + ++i; + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + axisalignedbb = WEST_AABB; + ++i; + } + + return i == 1 ? axisalignedbb : FULL_BLOCK_AABB; + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + BlockPos blockpos = pos.up(); + return state.withProperty(UP, Boolean.valueOf(worldIn.getBlockState(blockpos).getBlockFaceShape(worldIn, blockpos, EnumFacing.DOWN) == BlockFaceShape.SOLID)); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Whether this Block can be replaced directly by other blocks (true for e.g. tall grass) + */ + public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos) + { + return true; + } + + /** + * Check whether this Block can be placed at pos, while aiming at the specified side of an adjacent block + */ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) + { + return side != EnumFacing.DOWN && side != EnumFacing.UP && this.canAttachTo(worldIn, pos, side); + } + + public boolean canAttachTo(World p_193395_1_, BlockPos p_193395_2_, EnumFacing p_193395_3_) + { + Block block = p_193395_1_.getBlockState(p_193395_2_.up()).getBlock(); + return this.isAcceptableNeighbor(p_193395_1_, p_193395_2_.offset(p_193395_3_.getOpposite()), p_193395_3_) && (block == Blocks.AIR || block == Blocks.VINE || this.isAcceptableNeighbor(p_193395_1_, p_193395_2_.up(), EnumFacing.UP)); + } + + private boolean isAcceptableNeighbor(World p_193396_1_, BlockPos p_193396_2_, EnumFacing p_193396_3_) + { + IBlockState iblockstate = p_193396_1_.getBlockState(p_193396_2_); + return iblockstate.getBlockFaceShape(p_193396_1_, p_193396_2_, p_193396_3_) == BlockFaceShape.SOLID && !isExceptBlockForAttaching(iblockstate.getBlock()); + } + + protected static boolean isExceptBlockForAttaching(Block p_193397_0_) + { + return p_193397_0_ instanceof BlockShulkerBox || p_193397_0_ == Blocks.BEACON || p_193397_0_ == Blocks.CAULDRON || p_193397_0_ == Blocks.GLASS || p_193397_0_ == Blocks.STAINED_GLASS || p_193397_0_ == Blocks.PISTON || p_193397_0_ == Blocks.STICKY_PISTON || p_193397_0_ == Blocks.PISTON_HEAD || p_193397_0_ == Blocks.TRAPDOOR; + } + + private boolean recheckGrownSides(World worldIn, BlockPos pos, IBlockState state) + { + IBlockState iblockstate = state; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + PropertyBool propertybool = getPropertyFor(enumfacing); + + if (((Boolean)state.getValue(propertybool)).booleanValue() && !this.canAttachTo(worldIn, pos, enumfacing.getOpposite())) + { + IBlockState iblockstate1 = worldIn.getBlockState(pos.up()); + + if (iblockstate1.getBlock() != this || !((Boolean)iblockstate1.getValue(propertybool)).booleanValue()) + { + state = state.withProperty(propertybool, Boolean.valueOf(false)); + } + } + } + + if (getNumGrownFaces(state) == 0) + { + return false; + } + else + { + if (iblockstate != state) + { + worldIn.setBlockState(pos, state, 2); + } + + return true; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + if (!worldIn.isRemote && !this.recheckGrownSides(worldIn, pos, state)) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + } + + public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) + { + if (!worldIn.isRemote) + { + if (worldIn.rand.nextInt(4) == 0 && worldIn.isAreaLoaded(pos, 4)) // Forge: check area to prevent loading unloaded chunks + { + int i = 4; + int j = 5; + boolean flag = false; + label181: + + for (int k = -4; k <= 4; ++k) + { + for (int l = -4; l <= 4; ++l) + { + for (int i1 = -1; i1 <= 1; ++i1) + { + if (worldIn.getBlockState(pos.add(k, i1, l)).getBlock() == this) + { + --j; + + if (j <= 0) + { + flag = true; + break label181; + } + } + } + } + } + + EnumFacing enumfacing1 = EnumFacing.random(rand); + BlockPos blockpos2 = pos.up(); + + if (enumfacing1 == EnumFacing.UP && pos.getY() < 255 && worldIn.isAirBlock(blockpos2)) + { + IBlockState iblockstate2 = state; + + for (EnumFacing enumfacing2 : EnumFacing.Plane.HORIZONTAL) + { + if (rand.nextBoolean() && this.canAttachTo(worldIn, blockpos2, enumfacing2.getOpposite())) + { + iblockstate2 = iblockstate2.withProperty(getPropertyFor(enumfacing2), Boolean.valueOf(true)); + } + else + { + iblockstate2 = iblockstate2.withProperty(getPropertyFor(enumfacing2), Boolean.valueOf(false)); + } + } + + if (((Boolean)iblockstate2.getValue(NORTH)).booleanValue() || ((Boolean)iblockstate2.getValue(EAST)).booleanValue() || ((Boolean)iblockstate2.getValue(SOUTH)).booleanValue() || ((Boolean)iblockstate2.getValue(WEST)).booleanValue()) + { + worldIn.setBlockState(blockpos2, iblockstate2, 2); + } + } + else if (enumfacing1.getAxis().isHorizontal() && !((Boolean)state.getValue(getPropertyFor(enumfacing1))).booleanValue()) + { + if (!flag) + { + BlockPos blockpos4 = pos.offset(enumfacing1); + IBlockState iblockstate3 = worldIn.getBlockState(blockpos4); + Block block1 = iblockstate3.getBlock(); + + if (block1.isAir(iblockstate3, worldIn, blockpos4)) + { + EnumFacing enumfacing3 = enumfacing1.rotateY(); + EnumFacing enumfacing4 = enumfacing1.rotateYCCW(); + boolean flag1 = ((Boolean)state.getValue(getPropertyFor(enumfacing3))).booleanValue(); + boolean flag2 = ((Boolean)state.getValue(getPropertyFor(enumfacing4))).booleanValue(); + BlockPos blockpos = blockpos4.offset(enumfacing3); + BlockPos blockpos1 = blockpos4.offset(enumfacing4); + + if (flag1 && this.canAttachTo(worldIn, blockpos.offset(enumfacing3), enumfacing3)) + { + worldIn.setBlockState(blockpos4, this.getDefaultState().withProperty(getPropertyFor(enumfacing3), Boolean.valueOf(true)), 2); + } + else if (flag2 && this.canAttachTo(worldIn, blockpos1.offset(enumfacing4), enumfacing4)) + { + worldIn.setBlockState(blockpos4, this.getDefaultState().withProperty(getPropertyFor(enumfacing4), Boolean.valueOf(true)), 2); + } + else if (flag1 && worldIn.isAirBlock(blockpos) && this.canAttachTo(worldIn, blockpos, enumfacing1)) + { + worldIn.setBlockState(blockpos, this.getDefaultState().withProperty(getPropertyFor(enumfacing1.getOpposite()), Boolean.valueOf(true)), 2); + } + else if (flag2 && worldIn.isAirBlock(blockpos1) && this.canAttachTo(worldIn, blockpos1, enumfacing1)) + { + worldIn.setBlockState(blockpos1, this.getDefaultState().withProperty(getPropertyFor(enumfacing1.getOpposite()), Boolean.valueOf(true)), 2); + } + } + else if (iblockstate3.getBlockFaceShape(worldIn, blockpos4, enumfacing1) == BlockFaceShape.SOLID) + { + worldIn.setBlockState(pos, state.withProperty(getPropertyFor(enumfacing1), Boolean.valueOf(true)), 2); + } + } + } + else + { + if (pos.getY() > 1) + { + BlockPos blockpos3 = pos.down(); + IBlockState iblockstate = worldIn.getBlockState(blockpos3); + Block block = iblockstate.getBlock(); + + if (block.blockMaterial == Material.AIR) + { + IBlockState iblockstate1 = state; + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + if (rand.nextBoolean()) + { + iblockstate1 = iblockstate1.withProperty(getPropertyFor(enumfacing), Boolean.valueOf(false)); + } + } + + if (((Boolean)iblockstate1.getValue(NORTH)).booleanValue() || ((Boolean)iblockstate1.getValue(EAST)).booleanValue() || ((Boolean)iblockstate1.getValue(SOUTH)).booleanValue() || ((Boolean)iblockstate1.getValue(WEST)).booleanValue()) + { + worldIn.setBlockState(blockpos3, iblockstate1, 2); + } + } + else if (block == this) + { + IBlockState iblockstate4 = iblockstate; + + for (EnumFacing enumfacing5 : EnumFacing.Plane.HORIZONTAL) + { + PropertyBool propertybool = getPropertyFor(enumfacing5); + + if (rand.nextBoolean() && ((Boolean)state.getValue(propertybool)).booleanValue()) + { + iblockstate4 = iblockstate4.withProperty(propertybool, Boolean.valueOf(true)); + } + } + + if (((Boolean)iblockstate4.getValue(NORTH)).booleanValue() || ((Boolean)iblockstate4.getValue(EAST)).booleanValue() || ((Boolean)iblockstate4.getValue(SOUTH)).booleanValue() || ((Boolean)iblockstate4.getValue(WEST)).booleanValue()) + { + worldIn.setBlockState(blockpos3, iblockstate4, 2); + } + } + } + } + } + } + } + + /** + * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the + * IBlockstate + */ + public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) + { + IBlockState iblockstate = this.getDefaultState().withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)); + return facing.getAxis().isHorizontal() ? iblockstate.withProperty(getPropertyFor(facing.getOpposite()), Boolean.valueOf(true)) : iblockstate; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.AIR; + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + public int quantityDropped(Random random) + { + return 0; + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (!worldIn.isRemote && stack.getItem() == Items.SHEARS) + { + player.addStat(StatList.getBlockStats(this)); + spawnAsEntity(worldIn, pos, new ItemStack(Blocks.VINE, 1, 0)); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(SOUTH, Boolean.valueOf((meta & 1) > 0)).withProperty(WEST, Boolean.valueOf((meta & 2) > 0)).withProperty(NORTH, Boolean.valueOf((meta & 4) > 0)).withProperty(EAST, Boolean.valueOf((meta & 8) > 0)); + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + i |= 1; + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + i |= 2; + } + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + i |= 4; + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, SOUTH, WEST}); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + switch (rot) + { + case CLOCKWISE_180: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(EAST, state.getValue(WEST)).withProperty(SOUTH, state.getValue(NORTH)).withProperty(WEST, state.getValue(EAST)); + case COUNTERCLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(EAST)).withProperty(EAST, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(WEST)).withProperty(WEST, state.getValue(NORTH)); + case CLOCKWISE_90: + return state.withProperty(NORTH, state.getValue(WEST)).withProperty(EAST, state.getValue(NORTH)).withProperty(SOUTH, state.getValue(EAST)).withProperty(WEST, state.getValue(SOUTH)); + default: + return state; + } + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + switch (mirrorIn) + { + case LEFT_RIGHT: + return state.withProperty(NORTH, state.getValue(SOUTH)).withProperty(SOUTH, state.getValue(NORTH)); + case FRONT_BACK: + return state.withProperty(EAST, state.getValue(WEST)).withProperty(WEST, state.getValue(EAST)); + default: + return super.withMirror(state, mirrorIn); + } + } + + public static PropertyBool getPropertyFor(EnumFacing side) + { + switch (side) + { + case UP: + return UP; + case NORTH: + return NORTH; + case SOUTH: + return SOUTH; + case WEST: + return WEST; + case EAST: + return EAST; + default: + throw new IllegalArgumentException(side + " is an invalid choice"); + } + } + + public static int getNumGrownFaces(IBlockState state) + { + int i = 0; + + for (PropertyBool propertybool : ALL_FACES) + { + if (((Boolean)state.getValue(propertybool)).booleanValue()) + { + ++i; + } + } + + return i; + } + /*************************FORGE START***********************************/ + @Override public boolean isLadder(IBlockState state, IBlockAccess world, BlockPos pos, EntityLivingBase entity){ return true; } + @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos){ return true; } + @Override + public java.util.List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) + { + return java.util.Arrays.asList(new ItemStack(this, 1)); + } + /*************************FORGE END***********************************/ + + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockWall.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWall.java new file mode 100644 index 0000000..5eb5d86 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWall.java @@ -0,0 +1,287 @@ +package net.minecraft.block; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockWall extends Block +{ + public static final PropertyBool UP = PropertyBool.create("up"); + public static final PropertyBool NORTH = PropertyBool.create("north"); + public static final PropertyBool EAST = PropertyBool.create("east"); + public static final PropertyBool SOUTH = PropertyBool.create("south"); + public static final PropertyBool WEST = PropertyBool.create("west"); + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockWall.EnumType.class); + protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] {AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; + + public BlockWall(Block modelBlock) + { + super(modelBlock.blockMaterial); + this.setDefaultState(this.blockState.getBaseState().withProperty(UP, Boolean.valueOf(false)).withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)).withProperty(VARIANT, BlockWall.EnumType.NORMAL)); + this.setHardness(modelBlock.blockHardness); + this.setResistance(modelBlock.blockResistance / 3.0F); + this.setSoundType(modelBlock.blockSoundType); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + state = this.getActualState(state, source, pos); + return AABB_BY_INDEX[getAABBIndex(state)]; + } + + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean isActualState) + { + if (!isActualState) + { + state = this.getActualState(state, worldIn, pos); + } + + addCollisionBoxToList(pos, entityBox, collidingBoxes, CLIP_AABB_BY_INDEX[getAABBIndex(state)]); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + blockState = this.getActualState(blockState, worldIn, pos); + return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)]; + } + + private static int getAABBIndex(IBlockState state) + { + int i = 0; + + if (((Boolean)state.getValue(NORTH)).booleanValue()) + { + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if (((Boolean)state.getValue(EAST)).booleanValue()) + { + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if (((Boolean)state.getValue(SOUTH)).booleanValue()) + { + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if (((Boolean)state.getValue(WEST)).booleanValue()) + { + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; + } + + /** + * Gets the localized name of this block. Used for the statistics page. + */ + public String getLocalizedName() + { + return I18n.translateToLocal(this.getUnlocalizedName() + "." + BlockWall.EnumType.NORMAL.getUnlocalizedName() + ".name"); + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Determines if an entity can path through this block + */ + public boolean isPassable(IBlockAccess worldIn, BlockPos pos) + { + return false; + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos, EnumFacing p_176253_3_) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + BlockFaceShape blockfaceshape = iblockstate.getBlockFaceShape(worldIn, pos, p_176253_3_); + boolean flag = blockfaceshape == BlockFaceShape.MIDDLE_POLE_THICK || blockfaceshape == BlockFaceShape.MIDDLE_POLE && block instanceof BlockFenceGate; + return !isExcepBlockForAttachWithPiston(block) && blockfaceshape == BlockFaceShape.SOLID || flag; + } + + protected static boolean isExcepBlockForAttachWithPiston(Block p_194143_0_) + { + return Block.isExceptBlockForAttachWithPiston(p_194143_0_) || p_194143_0_ == Blocks.BARRIER || p_194143_0_ == Blocks.MELON_BLOCK || p_194143_0_ == Blocks.PUMPKIN || p_194143_0_ == Blocks.LIT_PUMPKIN; + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockWall.EnumType blockwall$enumtype : BlockWall.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockwall$enumtype.getMetadata())); + } + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockWall.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + return this.getDefaultState().withProperty(VARIANT, BlockWall.EnumType.byMetadata(meta)); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((BlockWall.EnumType)state.getValue(VARIANT)).getMetadata(); + } + + /** + * Get the actual Block state of this Block at the given position. This applies properties not visible in the + * metadata, such as fence connections. + */ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + boolean flag = canWallConnectTo(worldIn, pos, EnumFacing.NORTH); + boolean flag1 = canWallConnectTo(worldIn, pos, EnumFacing.EAST); + boolean flag2 = canWallConnectTo(worldIn, pos, EnumFacing.SOUTH); + boolean flag3 = canWallConnectTo(worldIn, pos, EnumFacing.WEST); + boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; + return state.withProperty(UP, Boolean.valueOf(!flag4 || !worldIn.isAirBlock(pos.up()))).withProperty(NORTH, Boolean.valueOf(flag)).withProperty(EAST, Boolean.valueOf(flag1)).withProperty(SOUTH, Boolean.valueOf(flag2)).withProperty(WEST, Boolean.valueOf(flag3)); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH, VARIANT}); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return face != EnumFacing.UP && face != EnumFacing.DOWN ? BlockFaceShape.MIDDLE_POLE_THICK : BlockFaceShape.CENTER_BIG; + } + + /* ======================================== FORGE START ======================================== */ + + @Override + public boolean canBeConnectedTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + return canConnectTo(world, pos.offset(facing), facing.getOpposite()); + } + + private boolean canWallConnectTo(IBlockAccess world, BlockPos pos, EnumFacing facing) + { + BlockPos other = pos.offset(facing); + Block block = world.getBlockState(other).getBlock(); + return block.canBeConnectedTo(world, other, facing.getOpposite()) || canConnectTo(world, other, facing.getOpposite()); + } + + /* ======================================== FORGE END ======================================== */ + + public static enum EnumType implements IStringSerializable + { + NORMAL(0, "cobblestone", "normal"), + MOSSY(1, "mossy_cobblestone", "mossy"); + + private static final BlockWall.EnumType[] META_LOOKUP = new BlockWall.EnumType[values().length]; + private final int meta; + private final String name; + private final String unlocalizedName; + + private EnumType(int meta, String name, String unlocalizedName) + { + this.meta = meta; + this.name = name; + this.unlocalizedName = unlocalizedName; + } + + public int getMetadata() + { + return this.meta; + } + + public String toString() + { + return this.name; + } + + public static BlockWall.EnumType byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String getName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + static + { + for (BlockWall.EnumType blockwall$enumtype : values()) + { + META_LOOKUP[blockwall$enumtype.getMetadata()] = blockwall$enumtype; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockWallSign.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWallSign.java new file mode 100644 index 0000000..1431e93 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWallSign.java @@ -0,0 +1,107 @@ +package net.minecraft.block; + +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockWallSign extends BlockSign +{ + public static final PropertyDirection FACING = BlockHorizontal.FACING; + protected static final AxisAlignedBB SIGN_EAST_AABB = new AxisAlignedBB(0.0D, 0.28125D, 0.0D, 0.125D, 0.78125D, 1.0D); + protected static final AxisAlignedBB SIGN_WEST_AABB = new AxisAlignedBB(0.875D, 0.28125D, 0.0D, 1.0D, 0.78125D, 1.0D); + protected static final AxisAlignedBB SIGN_SOUTH_AABB = new AxisAlignedBB(0.0D, 0.28125D, 0.0D, 1.0D, 0.78125D, 0.125D); + protected static final AxisAlignedBB SIGN_NORTH_AABB = new AxisAlignedBB(0.0D, 0.28125D, 0.875D, 1.0D, 0.78125D, 1.0D); + + public BlockWallSign() + { + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) + { + switch ((EnumFacing)state.getValue(FACING)) + { + case NORTH: + default: + return SIGN_NORTH_AABB; + case SOUTH: + return SIGN_SOUTH_AABB; + case WEST: + return SIGN_WEST_AABB; + case EAST: + return SIGN_EAST_AABB; + } + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); + + if (!worldIn.getBlockState(pos.offset(enumfacing.getOpposite())).getMaterial().isSolid()) + { + this.dropBlockAsItem(worldIn, pos, state, 0); + worldIn.setBlockToAir(pos); + } + + super.neighborChanged(state, worldIn, pos, blockIn, fromPos); + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + EnumFacing enumfacing = EnumFacing.getFront(meta); + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + enumfacing = EnumFacing.NORTH; + } + + return this.getDefaultState().withProperty(FACING, enumfacing); + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + return ((EnumFacing)state.getValue(FACING)).getIndex(); + } + + /** + * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withRotation(IBlockState state, Rotation rot) + { + return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); + } + + /** + * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed + * blockstate. + */ + public IBlockState withMirror(IBlockState state, Mirror mirrorIn) + { + return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); + } + + protected BlockStateContainer createBlockState() + { + return new BlockStateContainer(this, new IProperty[] {FACING}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockWeb.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWeb.java new file mode 100644 index 0000000..3eb9c8c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWeb.java @@ -0,0 +1,115 @@ +package net.minecraft.block; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockWeb extends Block implements net.minecraftforge.common.IShearable +{ + public BlockWeb() + { + super(Material.WEB); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called When an Entity Collided with the Block + */ + public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) + { + entityIn.setInWeb(); + } + + /** + * Used to determine ambient occlusion and culling when rebuilding chunks for render + */ + public boolean isOpaqueCube(IBlockState state) + { + return false; + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, IBlockAccess worldIn, BlockPos pos) + { + return NULL_AABB; + } + + public boolean isFullCube(IBlockState state) + { + return false; + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Items.STRING; + } + + protected boolean canSilkHarvest() + { + return true; + } + + @SideOnly(Side.CLIENT) + public BlockRenderLayer getBlockLayer() + { + return BlockRenderLayer.CUTOUT; + } + + /** + * Spawns the block's drops in the world. By the time this is called the Block has possibly been set to air via + * Block.removedByPlayer + */ + public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack) + { + if (!worldIn.isRemote && stack.getItem() == Items.SHEARS) + { + player.addStat(StatList.getBlockStats(this)); + spawnAsEntity(worldIn, pos, new ItemStack(Item.getItemFromBlock(this), 1)); + } + else + { + super.harvestBlock(worldIn, player, pos, state, te, stack); + } + } + + @Override public boolean isShearable(ItemStack item, IBlockAccess world, BlockPos pos) { return true; } + @Override + public java.util.List onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) { + return com.google.common.collect.Lists.newArrayList(new ItemStack(Item.getItemFromBlock(this))); + } + + /** + * Get the geometry of the queried face at the given position and state. This is used to decide whether things like + * buttons are allowed to be placed on the face, or how glass panes connect to the face, among other things. + *

+ * Common values are {@code SOLID}, which is the default, and {@code UNDEFINED}, which represents something that + * does not fit the other descriptions and will generally cause other things not to connect to the face. + * + * @return an approximation of the form of the given face + */ + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) + { + return BlockFaceShape.UNDEFINED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockWoodSlab.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWoodSlab.java new file mode 100644 index 0000000..2f5cf4c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWoodSlab.java @@ -0,0 +1,131 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public abstract class BlockWoodSlab extends BlockSlab +{ + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", BlockPlanks.EnumType.class); + + public BlockWoodSlab() + { + super(Material.WOOD); + IBlockState iblockstate = this.blockState.getBaseState(); + + if (!this.isDouble()) + { + iblockstate = iblockstate.withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); + } + + this.setDefaultState(iblockstate.withProperty(VARIANT, BlockPlanks.EnumType.OAK)); + this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS); + } + + /** + * Get the MapColor for this Block and the given BlockState + */ + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMapColor(); + } + + /** + * Get the Item that this Block should drop when harvested. + */ + public Item getItemDropped(IBlockState state, Random rand, int fortune) + { + return Item.getItemFromBlock(Blocks.WOODEN_SLAB); + } + + public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) + { + return new ItemStack(Blocks.WOODEN_SLAB, 1, ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata()); + } + + /** + * Returns the slab block name with the type associated with it + */ + public String getUnlocalizedName(int meta) + { + return super.getUnlocalizedName() + "." + BlockPlanks.EnumType.byMetadata(meta).getUnlocalizedName(); + } + + public IProperty getVariantProperty() + { + return VARIANT; + } + + public Comparable getTypeForItem(ItemStack stack) + { + return BlockPlanks.EnumType.byMetadata(stack.getMetadata() & 7); + } + + /** + * returns a list of blocks with the same ID, but different meta (eg: wood returns 4 blocks) + */ + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) + { + for (BlockPlanks.EnumType blockplanks$enumtype : BlockPlanks.EnumType.values()) + { + items.add(new ItemStack(this, 1, blockplanks$enumtype.getMetadata())); + } + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) + { + IBlockState iblockstate = this.getDefaultState().withProperty(VARIANT, BlockPlanks.EnumType.byMetadata(meta & 7)); + + if (!this.isDouble()) + { + iblockstate = iblockstate.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) + { + int i = 0; + i = i | ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + + if (!this.isDouble() && state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) + { + i |= 8; + } + + return i; + } + + protected BlockStateContainer createBlockState() + { + return this.isDouble() ? new BlockStateContainer(this, new IProperty[] {VARIANT}) : new BlockStateContainer(this, new IProperty[] {HALF, VARIANT}); + } + + /** + * Gets the metadata of the item this Block can drop. This method is called when the block gets destroyed. It + * returns the metadata of the dropped item based on the old metadata of the block. + */ + public int damageDropped(IBlockState state) + { + return ((BlockPlanks.EnumType)state.getValue(VARIANT)).getMetadata(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockWorkbench.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWorkbench.java new file mode 100644 index 0000000..7a0e2f7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockWorkbench.java @@ -0,0 +1,90 @@ +package net.minecraft.block; + +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerWorkbench; +import net.minecraft.stats.StatList; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.IInteractionObject; +import net.minecraft.world.World; + +public class BlockWorkbench extends Block +{ + protected BlockWorkbench() + { + super(Material.WOOD); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called when the block is right clicked by a player. + */ + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return true; + } + else + { + playerIn.displayGui(new BlockWorkbench.InterfaceCraftingTable(worldIn, pos)); + playerIn.addStat(StatList.CRAFTING_TABLE_INTERACTION); + return true; + } + } + + public static class InterfaceCraftingTable implements IInteractionObject + { + private final World world; + private final BlockPos position; + + public InterfaceCraftingTable(World worldIn, BlockPos pos) + { + this.world = worldIn; + this.position = pos; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "crafting_table"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return new TextComponentTranslation(Blocks.CRAFTING_TABLE.getUnlocalizedName() + ".name", new Object[0]); + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerWorkbench(playerInventory, this.world, this.position); + } + + public String getGuiID() + { + return "minecraft:crafting_table"; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/BlockYellowFlower.java b/build/tmp/recompileMc/sources/net/minecraft/block/BlockYellowFlower.java new file mode 100644 index 0000000..0037248 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/BlockYellowFlower.java @@ -0,0 +1,12 @@ +package net.minecraft.block; + +public class BlockYellowFlower extends BlockFlower +{ + /** + * Get the Type of this flower (Yellow/Red) + */ + public BlockFlower.EnumFlowerColor getBlockType() + { + return BlockFlower.EnumFlowerColor.YELLOW; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/IGrowable.java b/build/tmp/recompileMc/sources/net/minecraft/block/IGrowable.java new file mode 100644 index 0000000..beef9f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/IGrowable.java @@ -0,0 +1,18 @@ +package net.minecraft.block; + +import java.util.Random; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IGrowable +{ + /** + * Whether this IGrowable can grow + */ + boolean canGrow(World worldIn, BlockPos pos, IBlockState state, boolean isClient); + + boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos, IBlockState state); + + void grow(World worldIn, Random rand, BlockPos pos, IBlockState state); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/ITileEntityProvider.java b/build/tmp/recompileMc/sources/net/minecraft/block/ITileEntityProvider.java new file mode 100644 index 0000000..fe9a3b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/ITileEntityProvider.java @@ -0,0 +1,14 @@ +package net.minecraft.block; + +import javax.annotation.Nullable; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public interface ITileEntityProvider +{ + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + @Nullable + TileEntity createNewTileEntity(World worldIn, int meta); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/SoundType.java b/build/tmp/recompileMc/sources/net/minecraft/block/SoundType.java new file mode 100644 index 0000000..3fa2e72 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/SoundType.java @@ -0,0 +1,80 @@ +package net.minecraft.block; + +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SoundType +{ + public static final SoundType WOOD = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_WOOD_BREAK, SoundEvents.BLOCK_WOOD_STEP, SoundEvents.BLOCK_WOOD_PLACE, SoundEvents.BLOCK_WOOD_HIT, SoundEvents.BLOCK_WOOD_FALL); + public static final SoundType GROUND = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_GRAVEL_BREAK, SoundEvents.BLOCK_GRAVEL_STEP, SoundEvents.BLOCK_GRAVEL_PLACE, SoundEvents.BLOCK_GRAVEL_HIT, SoundEvents.BLOCK_GRAVEL_FALL); + public static final SoundType PLANT = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_GRASS_BREAK, SoundEvents.BLOCK_GRASS_STEP, SoundEvents.BLOCK_GRASS_PLACE, SoundEvents.BLOCK_GRASS_HIT, SoundEvents.BLOCK_GRASS_FALL); + public static final SoundType STONE = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_STONE_BREAK, SoundEvents.BLOCK_STONE_STEP, SoundEvents.BLOCK_STONE_PLACE, SoundEvents.BLOCK_STONE_HIT, SoundEvents.BLOCK_STONE_FALL); + public static final SoundType METAL = new SoundType(1.0F, 1.5F, SoundEvents.BLOCK_METAL_BREAK, SoundEvents.BLOCK_METAL_STEP, SoundEvents.BLOCK_METAL_PLACE, SoundEvents.BLOCK_METAL_HIT, SoundEvents.BLOCK_METAL_FALL); + public static final SoundType GLASS = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_GLASS_BREAK, SoundEvents.BLOCK_GLASS_STEP, SoundEvents.BLOCK_GLASS_PLACE, SoundEvents.BLOCK_GLASS_HIT, SoundEvents.BLOCK_GLASS_FALL); + public static final SoundType CLOTH = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_CLOTH_BREAK, SoundEvents.BLOCK_CLOTH_STEP, SoundEvents.BLOCK_CLOTH_PLACE, SoundEvents.BLOCK_CLOTH_HIT, SoundEvents.BLOCK_CLOTH_FALL); + public static final SoundType SAND = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_SAND_BREAK, SoundEvents.BLOCK_SAND_STEP, SoundEvents.BLOCK_SAND_PLACE, SoundEvents.BLOCK_SAND_HIT, SoundEvents.BLOCK_SAND_FALL); + public static final SoundType SNOW = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_SNOW_BREAK, SoundEvents.BLOCK_SNOW_STEP, SoundEvents.BLOCK_SNOW_PLACE, SoundEvents.BLOCK_SNOW_HIT, SoundEvents.BLOCK_SNOW_FALL); + public static final SoundType LADDER = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_LADDER_BREAK, SoundEvents.BLOCK_LADDER_STEP, SoundEvents.BLOCK_LADDER_PLACE, SoundEvents.BLOCK_LADDER_HIT, SoundEvents.BLOCK_LADDER_FALL); + public static final SoundType ANVIL = new SoundType(0.3F, 1.0F, SoundEvents.BLOCK_ANVIL_BREAK, SoundEvents.BLOCK_ANVIL_STEP, SoundEvents.BLOCK_ANVIL_PLACE, SoundEvents.BLOCK_ANVIL_HIT, SoundEvents.BLOCK_ANVIL_FALL); + public static final SoundType SLIME = new SoundType(1.0F, 1.0F, SoundEvents.BLOCK_SLIME_BREAK, SoundEvents.BLOCK_SLIME_STEP, SoundEvents.BLOCK_SLIME_PLACE, SoundEvents.BLOCK_SLIME_HIT, SoundEvents.BLOCK_SLIME_FALL); + public final float volume; + public final float pitch; + /** The sound played when a block gets broken. */ + private final SoundEvent breakSound; + /** The sound played when walking on a block. */ + private final SoundEvent stepSound; + /** The sound played when a block gets placed. */ + private final SoundEvent placeSound; + /** The sound played when a block gets hit (i.e. while mining). */ + private final SoundEvent hitSound; + /** The sound played when a block gets fallen upon. */ + private final SoundEvent fallSound; + + public SoundType(float volumeIn, float pitchIn, SoundEvent breakSoundIn, SoundEvent stepSoundIn, SoundEvent placeSoundIn, SoundEvent hitSoundIn, SoundEvent fallSoundIn) + { + this.volume = volumeIn; + this.pitch = pitchIn; + this.breakSound = breakSoundIn; + this.stepSound = stepSoundIn; + this.placeSound = placeSoundIn; + this.hitSound = hitSoundIn; + this.fallSound = fallSoundIn; + } + + public float getVolume() + { + return this.volume; + } + + public float getPitch() + { + return this.pitch; + } + + public SoundEvent getBreakSound() + { + return this.breakSound; + } + + public SoundEvent getStepSound() + { + return this.stepSound; + } + + public SoundEvent getPlaceSound() + { + return this.placeSound; + } + + public SoundEvent getHitSound() + { + return this.hitSound; + } + + public SoundEvent getFallSound() + { + return this.fallSound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/EnumPushReaction.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/EnumPushReaction.java new file mode 100644 index 0000000..831b443 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/EnumPushReaction.java @@ -0,0 +1,10 @@ +package net.minecraft.block.material; + +public enum EnumPushReaction +{ + NORMAL, + DESTROY, + BLOCK, + IGNORE, + PUSH_ONLY; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/MapColor.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/MapColor.java new file mode 100644 index 0000000..57b6260 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/MapColor.java @@ -0,0 +1,138 @@ +package net.minecraft.block.material; + +import net.minecraft.item.EnumDyeColor; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class MapColor +{ + /** Holds all the 16 colors used on maps, very similar of a pallete system. */ + public static final MapColor[] COLORS = new MapColor[64]; + public static final MapColor[] BLOCK_COLORS = new MapColor[16]; + public static final MapColor AIR = new MapColor(0, 0); + public static final MapColor GRASS = new MapColor(1, 8368696); + public static final MapColor SAND = new MapColor(2, 16247203); + public static final MapColor CLOTH = new MapColor(3, 13092807); + public static final MapColor TNT = new MapColor(4, 16711680); + public static final MapColor ICE = new MapColor(5, 10526975); + public static final MapColor IRON = new MapColor(6, 10987431); + public static final MapColor FOLIAGE = new MapColor(7, 31744); + public static final MapColor SNOW = new MapColor(8, 16777215); + public static final MapColor CLAY = new MapColor(9, 10791096); + public static final MapColor DIRT = new MapColor(10, 9923917); + public static final MapColor STONE = new MapColor(11, 7368816); + public static final MapColor WATER = new MapColor(12, 4210943); + public static final MapColor WOOD = new MapColor(13, 9402184); + public static final MapColor QUARTZ = new MapColor(14, 16776437); + public static final MapColor ADOBE = new MapColor(15, 14188339); + public static final MapColor MAGENTA = new MapColor(16, 11685080); + public static final MapColor LIGHT_BLUE = new MapColor(17, 6724056); + public static final MapColor YELLOW = new MapColor(18, 15066419); + public static final MapColor LIME = new MapColor(19, 8375321); + public static final MapColor PINK = new MapColor(20, 15892389); + public static final MapColor GRAY = new MapColor(21, 5000268); + public static final MapColor SILVER = new MapColor(22, 10066329); + public static final MapColor CYAN = new MapColor(23, 5013401); + public static final MapColor PURPLE = new MapColor(24, 8339378); + public static final MapColor BLUE = new MapColor(25, 3361970); + public static final MapColor BROWN = new MapColor(26, 6704179); + public static final MapColor GREEN = new MapColor(27, 6717235); + public static final MapColor RED = new MapColor(28, 10040115); + public static final MapColor BLACK = new MapColor(29, 1644825); + public static final MapColor GOLD = new MapColor(30, 16445005); + public static final MapColor DIAMOND = new MapColor(31, 6085589); + public static final MapColor LAPIS = new MapColor(32, 4882687); + public static final MapColor EMERALD = new MapColor(33, 55610); + public static final MapColor OBSIDIAN = new MapColor(34, 8476209); + public static final MapColor NETHERRACK = new MapColor(35, 7340544); + public static final MapColor WHITE_STAINED_HARDENED_CLAY = new MapColor(36, 13742497); + public static final MapColor ORANGE_STAINED_HARDENED_CLAY = new MapColor(37, 10441252); + public static final MapColor MAGENTA_STAINED_HARDENED_CLAY = new MapColor(38, 9787244); + public static final MapColor LIGHT_BLUE_STAINED_HARDENED_CLAY = new MapColor(39, 7367818); + public static final MapColor YELLOW_STAINED_HARDENED_CLAY = new MapColor(40, 12223780); + public static final MapColor LIME_STAINED_HARDENED_CLAY = new MapColor(41, 6780213); + public static final MapColor PINK_STAINED_HARDENED_CLAY = new MapColor(42, 10505550); + public static final MapColor GRAY_STAINED_HARDENED_CLAY = new MapColor(43, 3746083); + public static final MapColor SILVER_STAINED_HARDENED_CLAY = new MapColor(44, 8874850); + public static final MapColor CYAN_STAINED_HARDENED_CLAY = new MapColor(45, 5725276); + public static final MapColor PURPLE_STAINED_HARDENED_CLAY = new MapColor(46, 8014168); + public static final MapColor BLUE_STAINED_HARDENED_CLAY = new MapColor(47, 4996700); + public static final MapColor BROWN_STAINED_HARDENED_CLAY = new MapColor(48, 4993571); + public static final MapColor GREEN_STAINED_HARDENED_CLAY = new MapColor(49, 5001770); + public static final MapColor RED_STAINED_HARDENED_CLAY = new MapColor(50, 9321518); + public static final MapColor BLACK_STAINED_HARDENED_CLAY = new MapColor(51, 2430480); + /** Holds the color in RGB value that will be rendered on maps. */ + public final int colorValue; + /** Holds the index of the color used on map. */ + public final int colorIndex; + + private MapColor(int index, int color) + { + if (index >= 0 && index <= 63) + { + this.colorIndex = index; + this.colorValue = color; + COLORS[index] = this; + } + else + { + throw new IndexOutOfBoundsException("Map colour ID must be between 0 and 63 (inclusive)"); + } + } + + @SideOnly(Side.CLIENT) + public int getMapColor(int index) + { + int i = 220; + + if (index == 3) + { + i = 135; + } + + if (index == 2) + { + i = 255; + } + + if (index == 1) + { + i = 220; + } + + if (index == 0) + { + i = 180; + } + + int j = (this.colorValue >> 16 & 255) * i / 255; + int k = (this.colorValue >> 8 & 255) * i / 255; + int l = (this.colorValue & 255) * i / 255; + return -16777216 | j << 16 | k << 8 | l; + } + + public static MapColor getBlockColor(EnumDyeColor dyeColorIn) + { + return BLOCK_COLORS[dyeColorIn.getMetadata()]; + } + + static + { + BLOCK_COLORS[EnumDyeColor.WHITE.getMetadata()] = SNOW; + BLOCK_COLORS[EnumDyeColor.ORANGE.getMetadata()] = ADOBE; + BLOCK_COLORS[EnumDyeColor.MAGENTA.getMetadata()] = MAGENTA; + BLOCK_COLORS[EnumDyeColor.LIGHT_BLUE.getMetadata()] = LIGHT_BLUE; + BLOCK_COLORS[EnumDyeColor.YELLOW.getMetadata()] = YELLOW; + BLOCK_COLORS[EnumDyeColor.LIME.getMetadata()] = LIME; + BLOCK_COLORS[EnumDyeColor.PINK.getMetadata()] = PINK; + BLOCK_COLORS[EnumDyeColor.GRAY.getMetadata()] = GRAY; + BLOCK_COLORS[EnumDyeColor.SILVER.getMetadata()] = SILVER; + BLOCK_COLORS[EnumDyeColor.CYAN.getMetadata()] = CYAN; + BLOCK_COLORS[EnumDyeColor.PURPLE.getMetadata()] = PURPLE; + BLOCK_COLORS[EnumDyeColor.BLUE.getMetadata()] = BLUE; + BLOCK_COLORS[EnumDyeColor.BROWN.getMetadata()] = BROWN; + BLOCK_COLORS[EnumDyeColor.GREEN.getMetadata()] = GREEN; + BLOCK_COLORS[EnumDyeColor.RED.getMetadata()] = RED; + BLOCK_COLORS[EnumDyeColor.BLACK.getMetadata()] = BLACK; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/Material.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/Material.java new file mode 100644 index 0000000..1b13f0f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/Material.java @@ -0,0 +1,216 @@ +package net.minecraft.block.material; + +public class Material +{ + public static final Material AIR = new MaterialTransparent(MapColor.AIR); + public static final Material GRASS = new Material(MapColor.GRASS); + public static final Material GROUND = new Material(MapColor.DIRT); + public static final Material WOOD = (new Material(MapColor.WOOD)).setBurning(); + public static final Material ROCK = (new Material(MapColor.STONE)).setRequiresTool(); + public static final Material IRON = (new Material(MapColor.IRON)).setRequiresTool(); + public static final Material ANVIL = (new Material(MapColor.IRON)).setRequiresTool().setImmovableMobility(); + public static final Material WATER = (new MaterialLiquid(MapColor.WATER)).setNoPushMobility(); + public static final Material LAVA = (new MaterialLiquid(MapColor.TNT)).setNoPushMobility(); + public static final Material LEAVES = (new Material(MapColor.FOLIAGE)).setBurning().setTranslucent().setNoPushMobility(); + public static final Material PLANTS = (new MaterialLogic(MapColor.FOLIAGE)).setNoPushMobility(); + public static final Material VINE = (new MaterialLogic(MapColor.FOLIAGE)).setBurning().setNoPushMobility().setReplaceable(); + public static final Material SPONGE = new Material(MapColor.YELLOW); + public static final Material CLOTH = (new Material(MapColor.CLOTH)).setBurning(); + public static final Material FIRE = (new MaterialTransparent(MapColor.AIR)).setNoPushMobility(); + public static final Material SAND = new Material(MapColor.SAND); + public static final Material CIRCUITS = (new MaterialLogic(MapColor.AIR)).setNoPushMobility(); + public static final Material CARPET = (new MaterialLogic(MapColor.CLOTH)).setBurning(); + public static final Material GLASS = (new Material(MapColor.AIR)).setTranslucent().setAdventureModeExempt(); + public static final Material REDSTONE_LIGHT = (new Material(MapColor.AIR)).setAdventureModeExempt(); + public static final Material TNT = (new Material(MapColor.TNT)).setBurning().setTranslucent(); + public static final Material CORAL = (new Material(MapColor.FOLIAGE)).setNoPushMobility(); + public static final Material ICE = (new Material(MapColor.ICE)).setTranslucent().setAdventureModeExempt(); + public static final Material PACKED_ICE = (new Material(MapColor.ICE)).setAdventureModeExempt(); + public static final Material SNOW = (new MaterialLogic(MapColor.SNOW)).setReplaceable().setTranslucent().setRequiresTool().setNoPushMobility(); + /** The material for crafted snow. */ + public static final Material CRAFTED_SNOW = (new Material(MapColor.SNOW)).setRequiresTool(); + public static final Material CACTUS = (new Material(MapColor.FOLIAGE)).setTranslucent().setNoPushMobility(); + public static final Material CLAY = new Material(MapColor.CLAY); + public static final Material GOURD = (new Material(MapColor.FOLIAGE)).setNoPushMobility(); + public static final Material DRAGON_EGG = (new Material(MapColor.FOLIAGE)).setNoPushMobility(); + public static final Material PORTAL = (new MaterialPortal(MapColor.AIR)).setImmovableMobility(); + public static final Material CAKE = (new Material(MapColor.AIR)).setNoPushMobility(); + public static final Material WEB = (new Material(MapColor.CLOTH) + { + /** + * Returns if this material is considered solid or not + */ + public boolean blocksMovement() + { + return false; + } + }).setRequiresTool().setNoPushMobility(); + /** Pistons' material. */ + public static final Material PISTON = (new Material(MapColor.STONE)).setImmovableMobility(); + public static final Material BARRIER = (new Material(MapColor.AIR)).setRequiresTool().setImmovableMobility(); + public static final Material STRUCTURE_VOID = new MaterialTransparent(MapColor.AIR); + /** Bool defining if the block can burn or not. */ + private boolean canBurn; + /** + * Determines whether blocks with this material can be "overwritten" by other blocks when placed - eg snow, vines + * and tall grass. + */ + private boolean replaceable; + /** Indicates if the material is translucent */ + private boolean isTranslucent; + /** The color index used to draw the blocks of this material on maps. */ + private final MapColor materialMapColor; + /** Determines if the material can be harvested without a tool (or with the wrong tool) */ + private boolean requiresNoTool = true; + /** + * Mobility information flag. 0 indicates that this block is normal, 1 indicates that it can't push other blocks, 2 + * indicates that it can't be pushed. + */ + private EnumPushReaction mobilityFlag = EnumPushReaction.NORMAL; + private boolean isAdventureModeExempt; + + public Material(MapColor color) + { + this.materialMapColor = color; + } + + /** + * Returns if blocks of these materials are liquids. + */ + public boolean isLiquid() + { + return false; + } + + /** + * Returns true if the block is a considered solid. This is true by default. + */ + public boolean isSolid() + { + return true; + } + + /** + * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true + */ + public boolean blocksLight() + { + return true; + } + + /** + * Returns if this material is considered solid or not + */ + public boolean blocksMovement() + { + return true; + } + + /** + * Marks the material as translucent + */ + private Material setTranslucent() + { + this.isTranslucent = true; + return this; + } + + /** + * Makes blocks with this material require the correct tool to be harvested. + */ + protected Material setRequiresTool() + { + this.requiresNoTool = false; + return this; + } + + /** + * Set the canBurn bool to True and return the current object. + */ + protected Material setBurning() + { + this.canBurn = true; + return this; + } + + /** + * Returns if the block can burn or not. + */ + public boolean getCanBurn() + { + return this.canBurn; + } + + /** + * Sets {@link #replaceable} to true. + */ + public Material setReplaceable() + { + this.replaceable = true; + return this; + } + + /** + * Returns whether the material can be replaced by other blocks when placed - eg snow, vines and tall grass. + */ + public boolean isReplaceable() + { + return this.replaceable; + } + + /** + * Indicate if the material is opaque + */ + public boolean isOpaque() + { + return this.isTranslucent ? false : this.blocksMovement(); + } + + /** + * Returns true if the material can be harvested without a tool (or with the wrong tool) + */ + public boolean isToolNotRequired() + { + return this.requiresNoTool; + } + + public EnumPushReaction getMobilityFlag() + { + return this.mobilityFlag; + } + + /** + * This type of material can't be pushed, but pistons can move over it. + */ + protected Material setNoPushMobility() + { + this.mobilityFlag = EnumPushReaction.DESTROY; + return this; + } + + /** + * This type of material can't be pushed, and pistons are blocked to move. + */ + protected Material setImmovableMobility() + { + this.mobilityFlag = EnumPushReaction.BLOCK; + return this; + } + + /** + * @see #isAdventureModeExempt() + */ + protected Material setAdventureModeExempt() + { + this.isAdventureModeExempt = true; + return this; + } + + /** + * Retrieves the color index of the block. This is is the same color used by vanilla maps to represent this block. + */ + public MapColor getMaterialMapColor() + { + return this.materialMapColor; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialLiquid.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialLiquid.java new file mode 100644 index 0000000..2b3a869 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialLiquid.java @@ -0,0 +1,35 @@ +package net.minecraft.block.material; + +public class MaterialLiquid extends Material +{ + public MaterialLiquid(MapColor color) + { + super(color); + this.setReplaceable(); + this.setNoPushMobility(); + } + + /** + * Returns if blocks of these materials are liquids. + */ + public boolean isLiquid() + { + return true; + } + + /** + * Returns if this material is considered solid or not + */ + public boolean blocksMovement() + { + return false; + } + + /** + * Returns true if the block is a considered solid. This is true by default. + */ + public boolean isSolid() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialLogic.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialLogic.java new file mode 100644 index 0000000..15c8395 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialLogic.java @@ -0,0 +1,34 @@ +package net.minecraft.block.material; + +public class MaterialLogic extends Material +{ + public MaterialLogic(MapColor color) + { + super(color); + this.setAdventureModeExempt(); + } + + /** + * Returns true if the block is a considered solid. This is true by default. + */ + public boolean isSolid() + { + return false; + } + + /** + * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true + */ + public boolean blocksLight() + { + return false; + } + + /** + * Returns if this material is considered solid or not + */ + public boolean blocksMovement() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialPortal.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialPortal.java new file mode 100644 index 0000000..a74c80f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialPortal.java @@ -0,0 +1,33 @@ +package net.minecraft.block.material; + +public class MaterialPortal extends Material +{ + public MaterialPortal(MapColor color) + { + super(color); + } + + /** + * Returns true if the block is a considered solid. This is true by default. + */ + public boolean isSolid() + { + return false; + } + + /** + * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true + */ + public boolean blocksLight() + { + return false; + } + + /** + * Returns if this material is considered solid or not + */ + public boolean blocksMovement() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialTransparent.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialTransparent.java new file mode 100644 index 0000000..05c17ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/MaterialTransparent.java @@ -0,0 +1,34 @@ +package net.minecraft.block.material; + +public class MaterialTransparent extends Material +{ + public MaterialTransparent(MapColor color) + { + super(color); + this.setReplaceable(); + } + + /** + * Returns true if the block is a considered solid. This is true by default. + */ + public boolean isSolid() + { + return false; + } + + /** + * Will prevent grass from growing on dirt underneath and kill any grass below it if it returns true + */ + public boolean blocksLight() + { + return false; + } + + /** + * Returns if this material is considered solid or not + */ + public boolean blocksMovement() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/material/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/block/material/package-info.java new file mode 100644 index 0000000..2eaecae --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/material/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.block.material; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/block/package-info.java new file mode 100644 index 0000000..7344a5d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.block; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/IProperty.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/IProperty.java new file mode 100644 index 0000000..1acd6a5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/IProperty.java @@ -0,0 +1,23 @@ +package net.minecraft.block.properties; + +import com.google.common.base.Optional; +import java.util.Collection; + +public interface IProperty> +{ + String getName(); + + Collection getAllowedValues(); + + /** + * The class of the values of this property + */ + Class getValueClass(); + + Optional parseValue(String value); + + /** + * Get the name for the given value. + */ + String getName(T value); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyBool.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyBool.java new file mode 100644 index 0000000..0d62ce8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyBool.java @@ -0,0 +1,60 @@ +package net.minecraft.block.properties; + +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableSet; +import java.util.Collection; + +public class PropertyBool extends PropertyHelper +{ + private final ImmutableSet allowedValues = ImmutableSet.of(Boolean.valueOf(true), Boolean.valueOf(false)); + + protected PropertyBool(String name) + { + super(name, Boolean.class); + } + + public Collection getAllowedValues() + { + return this.allowedValues; + } + + public static PropertyBool create(String name) + { + return new PropertyBool(name); + } + + public Optional parseValue(String value) + { + return !"true".equals(value) && !"false".equals(value) ? Optional.absent() : Optional.of(Boolean.valueOf(value)); + } + + /** + * Get the name for the given value. + */ + public String getName(Boolean value) + { + return value.toString(); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ instanceof PropertyBool && super.equals(p_equals_1_)) + { + PropertyBool propertybool = (PropertyBool)p_equals_1_; + return this.allowedValues.equals(propertybool.allowedValues); + } + else + { + return false; + } + } + + public int hashCode() + { + return 31 * super.hashCode() + this.allowedValues.hashCode(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyDirection.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyDirection.java new file mode 100644 index 0000000..9644081 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyDirection.java @@ -0,0 +1,40 @@ +package net.minecraft.block.properties; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import java.util.Collection; +import net.minecraft.util.EnumFacing; + +public class PropertyDirection extends PropertyEnum +{ + protected PropertyDirection(String name, Collection values) + { + super(name, EnumFacing.class, values); + } + + /** + * Create a new PropertyDirection with the given name + */ + public static PropertyDirection create(String name) + { + return create(name, Predicates.alwaysTrue()); + } + + /** + * Create a new PropertyDirection with all directions that match the given Predicate + */ + public static PropertyDirection create(String name, Predicate filter) + { + return create(name, Collections2.filter(Lists.newArrayList(EnumFacing.values()), filter)); + } + + /** + * Create a new PropertyDirection for the given direction values + */ + public static PropertyDirection create(String name, Collection values) + { + return new PropertyDirection(name, values); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyEnum.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyEnum.java new file mode 100644 index 0000000..4f6b2f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyEnum.java @@ -0,0 +1,112 @@ +package net.minecraft.block.properties; + +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Map; +import net.minecraft.util.IStringSerializable; + +public class PropertyEnum & IStringSerializable> extends PropertyHelper +{ + private final ImmutableSet allowedValues; + /** Map of names to Enum values */ + private final Map nameToValue = Maps.newHashMap(); + + protected PropertyEnum(String name, Class valueClass, Collection allowedValues) + { + super(name, valueClass); + this.allowedValues = ImmutableSet.copyOf(allowedValues); + + for (T t : allowedValues) + { + String s = ((IStringSerializable)t).getName(); + + if (this.nameToValue.containsKey(s)) + { + throw new IllegalArgumentException("Multiple values have the same name '" + s + "'"); + } + + this.nameToValue.put(s, t); + } + } + + public Collection getAllowedValues() + { + return this.allowedValues; + } + + public Optional parseValue(String value) + { + return Optional.fromNullable(this.nameToValue.get(value)); + } + + /** + * Get the name for the given value. + */ + public String getName(T value) + { + return ((IStringSerializable)value).getName(); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ instanceof PropertyEnum && super.equals(p_equals_1_)) + { + PropertyEnum propertyenum = (PropertyEnum)p_equals_1_; + return this.allowedValues.equals(propertyenum.allowedValues) && this.nameToValue.equals(propertyenum.nameToValue); + } + else + { + return false; + } + } + + public int hashCode() + { + int i = super.hashCode(); + i = 31 * i + this.allowedValues.hashCode(); + i = 31 * i + this.nameToValue.hashCode(); + return i; + } + + /** + * Create a new PropertyEnum with all Enum constants of the given class. + */ + public static & IStringSerializable> PropertyEnum create(String name, Class clazz) + { + return create(name, clazz, Predicates.alwaysTrue()); + } + + /** + * Create a new PropertyEnum with all Enum constants of the given class that match the given Predicate. + */ + public static & IStringSerializable> PropertyEnum create(String name, Class clazz, Predicate filter) + { + return create(name, clazz, Collections2.filter(Lists.newArrayList(clazz.getEnumConstants()), filter)); + } + + /** + * Create a new PropertyEnum with the specified values + */ + public static & IStringSerializable> PropertyEnum create(String name, Class clazz, T... values) + { + return create(name, clazz, Lists.newArrayList(values)); + } + + /** + * Create a new PropertyEnum with the specified values + */ + public static & IStringSerializable> PropertyEnum create(String name, Class clazz, Collection values) + { + return new PropertyEnum(name, clazz, values); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyHelper.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyHelper.java new file mode 100644 index 0000000..c2f5917 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyHelper.java @@ -0,0 +1,55 @@ +package net.minecraft.block.properties; + +import com.google.common.base.MoreObjects; + +public abstract class PropertyHelper> implements IProperty +{ + private final Class valueClass; + private final String name; + + protected PropertyHelper(String name, Class valueClass) + { + this.valueClass = valueClass; + this.name = name; + } + + public String getName() + { + return this.name; + } + + /** + * The class of the values of this property + */ + public Class getValueClass() + { + return this.valueClass; + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("name", this.name).add("clazz", this.valueClass).add("values", this.getAllowedValues()).toString(); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof PropertyHelper)) + { + return false; + } + else + { + PropertyHelper propertyhelper = (PropertyHelper)p_equals_1_; + return this.valueClass.equals(propertyhelper.valueClass) && this.name.equals(propertyhelper.name); + } + } + + public int hashCode() + { + return 31 * this.valueClass.hashCode() + this.name.hashCode(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyInteger.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyInteger.java new file mode 100644 index 0000000..d8e31f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/PropertyInteger.java @@ -0,0 +1,90 @@ +package net.minecraft.block.properties; + +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; + +public class PropertyInteger extends PropertyHelper +{ + private final ImmutableSet allowedValues; + + protected PropertyInteger(String name, int min, int max) + { + super(name, Integer.class); + + if (min < 0) + { + throw new IllegalArgumentException("Min value of " + name + " must be 0 or greater"); + } + else if (max <= min) + { + throw new IllegalArgumentException("Max value of " + name + " must be greater than min (" + min + ")"); + } + else + { + Set set = Sets.newHashSet(); + + for (int i = min; i <= max; ++i) + { + set.add(Integer.valueOf(i)); + } + + this.allowedValues = ImmutableSet.copyOf(set); + } + } + + public Collection getAllowedValues() + { + return this.allowedValues; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ instanceof PropertyInteger && super.equals(p_equals_1_)) + { + PropertyInteger propertyinteger = (PropertyInteger)p_equals_1_; + return this.allowedValues.equals(propertyinteger.allowedValues); + } + else + { + return false; + } + } + + public int hashCode() + { + return 31 * super.hashCode() + this.allowedValues.hashCode(); + } + + public static PropertyInteger create(String name, int min, int max) + { + return new PropertyInteger(name, min, max); + } + + public Optional parseValue(String value) + { + try + { + Integer integer = Integer.valueOf(value); + return this.allowedValues.contains(integer) ? Optional.of(integer) : Optional.absent(); + } + catch (NumberFormatException var3) + { + return Optional.absent(); + } + } + + /** + * Get the name for the given value. + */ + public String getName(Integer value) + { + return value.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/properties/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/block/properties/package-info.java new file mode 100644 index 0000000..8a7235f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/properties/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.block.properties; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockFaceShape.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockFaceShape.java new file mode 100644 index 0000000..2e08f61 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockFaceShape.java @@ -0,0 +1,14 @@ +package net.minecraft.block.state; + +public enum BlockFaceShape +{ + SOLID, + BOWL, + CENTER_SMALL, + MIDDLE_POLE_THIN, + CENTER, + MIDDLE_POLE, + CENTER_BIG, + MIDDLE_POLE_THICK, + UNDEFINED; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockPistonStructureHelper.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockPistonStructureHelper.java new file mode 100644 index 0000000..fad3d9e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockPistonStructureHelper.java @@ -0,0 +1,235 @@ +package net.minecraft.block.state; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockPistonStructureHelper +{ + private final World world; + private final BlockPos pistonPos; + private final BlockPos blockToMove; + private final EnumFacing moveDirection; + /** This is a List of all blocks that will be moved by the piston. */ + private final List toMove = Lists.newArrayList(); + /** This is a List of blocks that will be destroyed when a piston attempts to move them. */ + private final List toDestroy = Lists.newArrayList(); + + public BlockPistonStructureHelper(World worldIn, BlockPos posIn, EnumFacing pistonFacing, boolean extending) + { + this.world = worldIn; + this.pistonPos = posIn; + + if (extending) + { + this.moveDirection = pistonFacing; + this.blockToMove = posIn.offset(pistonFacing); + } + else + { + this.moveDirection = pistonFacing.getOpposite(); + this.blockToMove = posIn.offset(pistonFacing, 2); + } + } + + public boolean canMove() + { + this.toMove.clear(); + this.toDestroy.clear(); + IBlockState iblockstate = this.world.getBlockState(this.blockToMove); + + if (!BlockPistonBase.canPush(iblockstate, this.world, this.blockToMove, this.moveDirection, false, this.moveDirection)) + { + if (iblockstate.getMobilityFlag() == EnumPushReaction.DESTROY) + { + this.toDestroy.add(this.blockToMove); + return true; + } + else + { + return false; + } + } + else if (!this.addBlockLine(this.blockToMove, this.moveDirection)) + { + return false; + } + else + { + for (int i = 0; i < this.toMove.size(); ++i) + { + BlockPos blockpos = this.toMove.get(i); + + if (this.world.getBlockState(blockpos).getBlock().isStickyBlock(this.world.getBlockState(blockpos)) && !this.addBranchingBlocks(blockpos)) + { + return false; + } + } + + return true; + } + } + + private boolean addBlockLine(BlockPos origin, EnumFacing p_177251_2_) + { + IBlockState iblockstate = this.world.getBlockState(origin); + Block block = iblockstate.getBlock(); + + if (iblockstate.getBlock().isAir(iblockstate, this.world, origin)) + { + return true; + } + else if (!BlockPistonBase.canPush(iblockstate, this.world, origin, this.moveDirection, false, p_177251_2_)) + { + return true; + } + else if (origin.equals(this.pistonPos)) + { + return true; + } + else if (this.toMove.contains(origin)) + { + return true; + } + else + { + int i = 1; + + if (i + this.toMove.size() > 12) + { + return false; + } + else + { + while (block.isStickyBlock(iblockstate)) + { + BlockPos blockpos = origin.offset(this.moveDirection.getOpposite(), i); + iblockstate = this.world.getBlockState(blockpos); + block = iblockstate.getBlock(); + + if (iblockstate.getBlock().isAir(iblockstate, this.world, blockpos) || !BlockPistonBase.canPush(iblockstate, this.world, blockpos, this.moveDirection, false, this.moveDirection.getOpposite()) || blockpos.equals(this.pistonPos)) + { + break; + } + + ++i; + + if (i + this.toMove.size() > 12) + { + return false; + } + } + + int i1 = 0; + + for (int j = i - 1; j >= 0; --j) + { + this.toMove.add(origin.offset(this.moveDirection.getOpposite(), j)); + ++i1; + } + + int j1 = 1; + + while (true) + { + BlockPos blockpos1 = origin.offset(this.moveDirection, j1); + int k = this.toMove.indexOf(blockpos1); + + if (k > -1) + { + this.reorderListAtCollision(i1, k); + + for (int l = 0; l <= k + i1; ++l) + { + BlockPos blockpos2 = this.toMove.get(l); + + if (this.world.getBlockState(blockpos2).getBlock().isStickyBlock(this.world.getBlockState(blockpos2)) && !this.addBranchingBlocks(blockpos2)) + { + return false; + } + } + + return true; + } + + iblockstate = this.world.getBlockState(blockpos1); + + if (iblockstate.getBlock().isAir(iblockstate, this.world, blockpos1)) + { + return true; + } + + if (!BlockPistonBase.canPush(iblockstate, this.world, blockpos1, this.moveDirection, true, this.moveDirection) || blockpos1.equals(this.pistonPos)) + { + return false; + } + + if (iblockstate.getMobilityFlag() == EnumPushReaction.DESTROY) + { + this.toDestroy.add(blockpos1); + return true; + } + + if (this.toMove.size() >= 12) + { + return false; + } + + this.toMove.add(blockpos1); + ++i1; + ++j1; + } + } + } + } + + private void reorderListAtCollision(int p_177255_1_, int p_177255_2_) + { + List list = Lists.newArrayList(); + List list1 = Lists.newArrayList(); + List list2 = Lists.newArrayList(); + list.addAll(this.toMove.subList(0, p_177255_2_)); + list1.addAll(this.toMove.subList(this.toMove.size() - p_177255_1_, this.toMove.size())); + list2.addAll(this.toMove.subList(p_177255_2_, this.toMove.size() - p_177255_1_)); + this.toMove.clear(); + this.toMove.addAll(list); + this.toMove.addAll(list1); + this.toMove.addAll(list2); + } + + private boolean addBranchingBlocks(BlockPos fromPos) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (enumfacing.getAxis() != this.moveDirection.getAxis() && !this.addBlockLine(fromPos.offset(enumfacing), enumfacing)) + { + return false; + } + } + + return true; + } + + /** + * Returns a List of all the blocks that are being moved by the piston. + */ + public List getBlocksToMove() + { + return this.toMove; + } + + /** + * Returns an List of all the blocks that are being destroyed by the piston. + */ + public List getBlocksToDestroy() + { + return this.toDestroy; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockStateBase.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockStateBase.java new file mode 100644 index 0000000..3dce6a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockStateBase.java @@ -0,0 +1,89 @@ +package net.minecraft.block.state; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; + +public abstract class BlockStateBase implements IBlockState +{ + private static final Joiner COMMA_JOINER = Joiner.on(','); + private static final Function < Entry < IProperty, Comparable> , String > MAP_ENTRY_TO_STRING = new Function < Entry < IProperty, Comparable> , String > () + { + @Nullable + public String apply(@Nullable Entry < IProperty, Comparable> p_apply_1_) + { + if (p_apply_1_ == null) + { + return ""; + } + else + { + IProperty iproperty = (IProperty)p_apply_1_.getKey(); + return iproperty.getName() + "=" + this.getPropertyName(iproperty, p_apply_1_.getValue()); + } + } + private > String getPropertyName(IProperty property, Comparable entry) + { + return property.getName((T)entry); + } + }; + + /** + * Create a version of this BlockState with the given property cycled to the next value in order. If the property + * was at the highest possible value, it is set to the lowest one instead. + */ + public > IBlockState cycleProperty(IProperty property) + { + return this.withProperty(property, cyclePropertyValue(property.getAllowedValues(), this.getValue(property))); + } + + /** + * Helper method for cycleProperty. + */ + protected static T cyclePropertyValue(Collection values, T currentValue) + { + Iterator iterator = values.iterator(); + + while (iterator.hasNext()) + { + if (iterator.next().equals(currentValue)) + { + if (iterator.hasNext()) + { + return iterator.next(); + } + + return values.iterator().next(); + } + } + + return iterator.next(); + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append(Block.REGISTRY.getNameForObject(this.getBlock())); + + if (!this.getProperties().isEmpty()) + { + stringbuilder.append("["); + COMMA_JOINER.appendTo(stringbuilder, Iterables.transform(this.getProperties().entrySet(), MAP_ENTRY_TO_STRING)); + stringbuilder.append("]"); + } + + return stringbuilder.toString(); + } + + @Nullable + public com.google.common.collect.ImmutableTable, Comparable, IBlockState> getPropertyValueTable() + { + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockStateContainer.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockStateContainer.java new file mode 100644 index 0000000..cb5f274 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockStateContainer.java @@ -0,0 +1,610 @@ +package net.minecraft.block.state; + +import com.google.common.base.Function; +import com.google.common.base.MoreObjects; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.ImmutableCollection; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSortedMap; +import com.google.common.collect.ImmutableTable; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Table; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.MapPopulator; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Cartesian; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockStateContainer +{ + private static final Pattern NAME_PATTERN = Pattern.compile("^[a-z0-9_]+$"); + private static final Function < IProperty, String > GET_NAME_FUNC = new Function < IProperty, String > () + { + @Nullable + public String apply(@Nullable IProperty p_apply_1_) + { + return p_apply_1_ == null ? "" : p_apply_1_.getName(); + } + }; + private final Block block; + private final ImmutableSortedMap < String, IProperty> properties; + private final ImmutableList validStates; + + public BlockStateContainer(Block blockIn, IProperty... properties) + { + this(blockIn, properties, null); + } + + protected StateImplementation createState(Block block, ImmutableMap, Comparable> properties, @Nullable ImmutableMap, java.util.Optional> unlistedProperties) + { + return new StateImplementation(block, properties); + } + + protected BlockStateContainer(Block blockIn, IProperty[] properties, ImmutableMap, java.util.Optional> unlistedProperties) + { + this.block = blockIn; + Map < String, IProperty> map = Maps. < String, IProperty> newHashMap(); + + for (IProperty iproperty : properties) + { + validateProperty(blockIn, iproperty); + map.put(iproperty.getName(), iproperty); + } + + this.properties = ImmutableSortedMap.copyOf(map); + Map < Map < IProperty, Comparable> , BlockStateContainer.StateImplementation > map2 = Maps. < Map < IProperty, Comparable> , BlockStateContainer.StateImplementation > newLinkedHashMap(); + List list1 = Lists.newArrayList(); + + for (List < Comparable> list : Cartesian.cartesianProduct(this.getAllowedValues())) + { + Map < IProperty, Comparable> map1 = MapPopulator. < IProperty, Comparable> createMap(this.properties.values(), list); + BlockStateContainer.StateImplementation blockstatecontainer$stateimplementation = createState(blockIn, ImmutableMap.copyOf(map1), unlistedProperties); + map2.put(map1, blockstatecontainer$stateimplementation); + list1.add(blockstatecontainer$stateimplementation); + } + + for (BlockStateContainer.StateImplementation blockstatecontainer$stateimplementation1 : list1) + { + blockstatecontainer$stateimplementation1.buildPropertyValueTable(map2); + } + + this.validStates = ImmutableList.copyOf(list1); + } + + public static > String validateProperty(Block block, IProperty property) + { + String s = property.getName(); + + if (!NAME_PATTERN.matcher(s).matches()) + { + throw new IllegalArgumentException("Block: " + block.getClass() + " has invalidly named property: " + s); + } + else + { + for (T t : property.getAllowedValues()) + { + String s1 = property.getName(t); + + if (!NAME_PATTERN.matcher(s1).matches()) + { + throw new IllegalArgumentException("Block: " + block.getClass() + " has property: " + s + " with invalidly named value: " + s1); + } + } + + return s; + } + } + + public ImmutableList getValidStates() + { + return this.validStates; + } + + private List < Iterable < Comparable>> getAllowedValues() + { + List < Iterable < Comparable>> list = Lists. < Iterable < Comparable>> newArrayList(); + ImmutableCollection < IProperty> immutablecollection = this.properties.values(); + UnmodifiableIterator unmodifiableiterator = immutablecollection.iterator(); + + while (unmodifiableiterator.hasNext()) + { + IProperty iproperty = (IProperty)unmodifiableiterator.next(); + list.add(((IProperty)iproperty).getAllowedValues()); + } + + return list; + } + + public IBlockState getBaseState() + { + return (IBlockState)this.validStates.get(0); + } + + public Block getBlock() + { + return this.block; + } + + public Collection < IProperty> getProperties() + { + return this.properties.values(); + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("block", Block.REGISTRY.getNameForObject(this.block)).add("properties", Iterables.transform(this.properties.values(), GET_NAME_FUNC)).toString(); + } + + @Nullable + public IProperty getProperty(String propertyName) + { + return (IProperty)this.properties.get(propertyName); + } + + public static class StateImplementation extends BlockStateBase + { + private final Block block; + private final ImmutableMap < IProperty, Comparable> properties; + protected ImmutableTable < IProperty, Comparable, IBlockState > propertyValueTable; + + protected StateImplementation(Block blockIn, ImmutableMap < IProperty, Comparable> propertiesIn) + { + this.block = blockIn; + this.properties = propertiesIn; + } + + protected StateImplementation(Block blockIn, ImmutableMap, Comparable> propertiesIn, ImmutableTable, Comparable, IBlockState> propertyValueTable) + { + this.block = blockIn; + this.properties = propertiesIn; + this.propertyValueTable = propertyValueTable; + } + + public Collection < IProperty> getPropertyKeys() + { + return Collections. < IProperty> unmodifiableCollection(this.properties.keySet()); + } + + /** + * Get the value of the given Property for this BlockState + */ + public > T getValue(IProperty property) + { + Comparable comparable = (Comparable)this.properties.get(property); + + if (comparable == null) + { + throw new IllegalArgumentException("Cannot get property " + property + " as it does not exist in " + this.block.getBlockState()); + } + else + { + return (T)(property.getValueClass().cast(comparable)); + } + } + + /** + * Get a version of this BlockState with the given Property now set to the given value + */ + public , V extends T> IBlockState withProperty(IProperty property, V value) + { + Comparable comparable = (Comparable)this.properties.get(property); + + if (comparable == null) + { + throw new IllegalArgumentException("Cannot set property " + property + " as it does not exist in " + this.block.getBlockState()); + } + else if (comparable == value) + { + return this; + } + else + { + IBlockState iblockstate = (IBlockState)this.propertyValueTable.get(property, value); + + if (iblockstate == null) + { + throw new IllegalArgumentException("Cannot set property " + property + " to " + value + " on block " + Block.REGISTRY.getNameForObject(this.block) + ", it is not an allowed value"); + } + else + { + return iblockstate; + } + } + } + + public ImmutableMap < IProperty, Comparable> getProperties() + { + return this.properties; + } + + public Block getBlock() + { + return this.block; + } + + public boolean equals(Object p_equals_1_) + { + return this == p_equals_1_; + } + + public int hashCode() + { + return this.properties.hashCode(); + } + + public void buildPropertyValueTable(Map < Map < IProperty, Comparable> , BlockStateContainer.StateImplementation > map) + { + if (this.propertyValueTable != null) + { + throw new IllegalStateException(); + } + else + { + Table < IProperty, Comparable, IBlockState > table = HashBasedTable. < IProperty, Comparable, IBlockState > create(); + UnmodifiableIterator unmodifiableiterator = this.properties.entrySet().iterator(); + + while (unmodifiableiterator.hasNext()) + { + Entry < IProperty, Comparable> entry = (Entry)unmodifiableiterator.next(); + IProperty iproperty = (IProperty)entry.getKey(); + + for (Comparable comparable : iproperty.getAllowedValues()) + { + if (comparable != entry.getValue()) + { + table.put(iproperty, comparable, map.get(this.getPropertiesWithValue(iproperty, comparable))); + } + } + } + + this.propertyValueTable = ImmutableTable.copyOf(table); + } + } + + private Map < IProperty, Comparable> getPropertiesWithValue(IProperty property, Comparable value) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newHashMap(this.properties); + map.put(property, value); + return map; + } + + public Material getMaterial() + { + return this.block.getMaterial(this); + } + + public boolean isFullBlock() + { + return this.block.isFullBlock(this); + } + + public boolean canEntitySpawn(Entity entityIn) + { + return this.block.canEntitySpawn(this, entityIn); + } + + public int getLightOpacity() + { + return this.block.getLightOpacity(this); + } + + public int getLightValue() + { + return this.block.getLightValue(this); + } + + @SideOnly(Side.CLIENT) + public boolean isTranslucent() + { + return this.block.isTranslucent(this); + } + + public boolean useNeighborBrightness() + { + return this.block.getUseNeighborBrightness(this); + } + + public MapColor getMapColor(IBlockAccess p_185909_1_, BlockPos p_185909_2_) + { + return this.block.getMapColor(this, p_185909_1_, p_185909_2_); + } + + /** + * Returns the blockstate with the given rotation. If inapplicable, returns itself. + */ + public IBlockState withRotation(Rotation rot) + { + return this.block.withRotation(this, rot); + } + + /** + * Returns the blockstate mirrored in the given way. If inapplicable, returns itself. + */ + public IBlockState withMirror(Mirror mirrorIn) + { + return this.block.withMirror(this, mirrorIn); + } + + public boolean isFullCube() + { + return this.block.isFullCube(this); + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomBreakingProgress() + { + return this.block.hasCustomBreakingProgress(this); + } + + public EnumBlockRenderType getRenderType() + { + return this.block.getRenderType(this); + } + + @SideOnly(Side.CLIENT) + public int getPackedLightmapCoords(IBlockAccess source, BlockPos pos) + { + return this.block.getPackedLightmapCoords(this, source, pos); + } + + @SideOnly(Side.CLIENT) + public float getAmbientOcclusionLightValue() + { + return this.block.getAmbientOcclusionLightValue(this); + } + + public boolean isBlockNormalCube() + { + return this.block.isBlockNormalCube(this); + } + + public boolean isNormalCube() + { + return this.block.isNormalCube(this); + } + + public boolean canProvidePower() + { + return this.block.canProvidePower(this); + } + + public int getWeakPower(IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return this.block.getWeakPower(this, blockAccess, pos, side); + } + + public boolean hasComparatorInputOverride() + { + return this.block.hasComparatorInputOverride(this); + } + + public int getComparatorInputOverride(World worldIn, BlockPos pos) + { + return this.block.getComparatorInputOverride(this, worldIn, pos); + } + + public float getBlockHardness(World worldIn, BlockPos pos) + { + return this.block.getBlockHardness(this, worldIn, pos); + } + + public float getPlayerRelativeBlockHardness(EntityPlayer player, World worldIn, BlockPos pos) + { + return this.block.getPlayerRelativeBlockHardness(this, player, worldIn, pos); + } + + public int getStrongPower(IBlockAccess blockAccess, BlockPos pos, EnumFacing side) + { + return this.block.getStrongPower(this, blockAccess, pos, side); + } + + public EnumPushReaction getMobilityFlag() + { + return this.block.getMobilityFlag(this); + } + + public IBlockState getActualState(IBlockAccess blockAccess, BlockPos pos) + { + return this.block.getActualState(this, blockAccess, pos); + } + + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBox(World worldIn, BlockPos pos) + { + return this.block.getSelectedBoundingBox(this, worldIn, pos); + } + + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess blockAccess, BlockPos pos, EnumFacing facing) + { + return this.block.shouldSideBeRendered(this, blockAccess, pos, facing); + } + + public boolean isOpaqueCube() + { + return this.block.isOpaqueCube(this); + } + + @Nullable + public AxisAlignedBB getCollisionBoundingBox(IBlockAccess worldIn, BlockPos pos) + { + return this.block.getCollisionBoundingBox(this, worldIn, pos); + } + + public void addCollisionBoxToList(World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean p_185908_6_) + { + this.block.addCollisionBoxToList(this, worldIn, pos, entityBox, collidingBoxes, entityIn, p_185908_6_); + } + + public AxisAlignedBB getBoundingBox(IBlockAccess blockAccess, BlockPos pos) + { + return this.block.getBoundingBox(this, blockAccess, pos); + } + + public RayTraceResult collisionRayTrace(World worldIn, BlockPos pos, Vec3d start, Vec3d end) + { + return this.block.collisionRayTrace(this, worldIn, pos, start, end); + } + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone + * components. + */ + public boolean isTopSolid() + { + return this.block.isTopSolid(this); + } + + public Vec3d getOffset(IBlockAccess access, BlockPos pos) + { + return this.block.getOffset(this, access, pos); + } + + /** + * Called on both Client and Server when World#addBlockEvent is called. On the Server, this may perform + * additional changes to the world, like pistons replacing the block with an extended base. On the client, + * the update may involve replacing tile entities, playing sounds, or performing other visual actions to + * reflect the server side changes. + */ + public boolean onBlockEventReceived(World worldIn, BlockPos pos, int id, int param) + { + return this.block.eventReceived(this, worldIn, pos, id, param); + } + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a + * neighbor change. Cases may include when redstone power is updated, cactus blocks popping off due to a + * neighboring solid block, etc. + */ + public void neighborChanged(World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos) + { + this.block.neighborChanged(this, worldIn, pos, blockIn, fromPos); + } + + public boolean causesSuffocation() + { + return this.block.causesSuffocation(this); + } + + public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, BlockPos pos, EnumFacing facing) + { + return this.block.getBlockFaceShape(worldIn, this, pos, facing); + } + + //Forge Start + @Override + public ImmutableTable, Comparable, IBlockState> getPropertyValueTable() + { + return propertyValueTable; + } + + @Override + public int getLightOpacity(IBlockAccess world, BlockPos pos) + { + return this.block.getLightOpacity(this, world, pos); + } + + @Override + public int getLightValue(IBlockAccess world, BlockPos pos) + { + return this.block.getLightValue(this, world, pos); + } + + @Override + public boolean isSideSolid(IBlockAccess world, BlockPos pos, EnumFacing side) + { + return this.block.isSideSolid(this, world, pos, side); + } + + @Override + public boolean doesSideBlockChestOpening(IBlockAccess world, BlockPos pos, EnumFacing side) + { + return this.block.doesSideBlockChestOpening(this, world, pos, side); + } + + @Override + public boolean doesSideBlockRendering(IBlockAccess world, BlockPos pos, EnumFacing side) + { + return this.block.doesSideBlockRendering(this, world, pos, side); + } + } + + /** + * Forge added class to make building things easier. + * Will return an instance of BlockStateContainer appropriate for + * the list of properties passed in. + * + * Example usage: + * + * protected BlockStateContainer createBlockState() + * { + * return (new BlockStateContainer.Builder(this)).add(FACING).add(SOME_UNLISTED).build(); + * } + * + */ + public static class Builder + { + private final Block block; + private final List> listed = Lists.newArrayList(); + private final List> unlisted = Lists.newArrayList(); + + public Builder(Block block) + { + this.block = block; + } + + public Builder add(IProperty... props) + { + for (IProperty prop : props) + this.listed.add(prop); + return this; + } + + public Builder add(net.minecraftforge.common.property.IUnlistedProperty... props) + { + for (net.minecraftforge.common.property.IUnlistedProperty prop : props) + this.unlisted.add(prop); + return this; + } + + public BlockStateContainer build() + { + IProperty[] listed = new IProperty[this.listed.size()]; + listed = this.listed.toArray(listed); + if (this.unlisted.size() == 0) + return new BlockStateContainer(this.block, listed); + + net.minecraftforge.common.property.IUnlistedProperty[] unlisted = new net.minecraftforge.common.property.IUnlistedProperty[this.unlisted.size()]; + unlisted = this.unlisted.toArray(unlisted); + + return new net.minecraftforge.common.property.ExtendedBlockState(this.block, listed, unlisted); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockWorldState.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockWorldState.java new file mode 100644 index 0000000..8476af5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/BlockWorldState.java @@ -0,0 +1,72 @@ +package net.minecraft.block.state; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockWorldState +{ + private final World world; + private final BlockPos pos; + private final boolean forceLoad; + private IBlockState state; + private TileEntity tileEntity; + private boolean tileEntityInitialized; + + public BlockWorldState(World worldIn, BlockPos posIn, boolean forceLoadIn) + { + this.world = worldIn; + this.pos = posIn; + this.forceLoad = forceLoadIn; + } + + /** + * Gets the block state as currently held, or (if it has not gotten it from the world) loads it from the world. + * This will only look up the state from the world if {@link #forceLoad} is true or the block position is loaded. + */ + public IBlockState getBlockState() + { + if (this.state == null && (this.forceLoad || this.world.isBlockLoaded(this.pos))) + { + this.state = this.world.getBlockState(this.pos); + } + + return this.state; + } + + /** + * Gets the tile entity as currently held, or (if it has not gotten it from the world) loads it from the world. + */ + @Nullable + public TileEntity getTileEntity() + { + if (this.tileEntity == null && !this.tileEntityInitialized) + { + this.tileEntity = this.world.getTileEntity(this.pos); + this.tileEntityInitialized = true; + } + + return this.tileEntity; + } + + public BlockPos getPos() + { + return this.pos; + } + + /** + * Creates a new {@link Predicate} that will match when the given {@link IBlockState} predicate matches. + */ + public static Predicate hasState(final Predicate predicatesIn) + { + return new Predicate() + { + public boolean apply(@Nullable BlockWorldState p_apply_1_) + { + return p_apply_1_ != null && predicatesIn.apply(p_apply_1_.getBlockState()); + } + }; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockBehaviors.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockBehaviors.java new file mode 100644 index 0000000..dd3eb19 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockBehaviors.java @@ -0,0 +1,23 @@ +package net.minecraft.block.state; + +import net.minecraft.block.Block; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IBlockBehaviors +{ + /** + * Called on both Client and Server when World#addBlockEvent is called. On the Server, this may perform additional + * changes to the world, like pistons replacing the block with an extended base. On the client, the update may + * involve replacing tile entities, playing sounds, or performing other visual actions to reflect the server side + * changes. + */ + boolean onBlockEventReceived(World worldIn, BlockPos pos, int id, int param); + + /** + * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor + * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid + * block, etc. + */ + void neighborChanged(World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockProperties.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockProperties.java new file mode 100644 index 0000000..ba3821a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockProperties.java @@ -0,0 +1,124 @@ +package net.minecraft.block.state; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IBlockProperties +{ + Material getMaterial(); + + boolean isFullBlock(); + + boolean canEntitySpawn(Entity entityIn); + + @Deprecated //Forge location aware version below + int getLightOpacity(); + int getLightOpacity(IBlockAccess world, BlockPos pos); + + @Deprecated //Forge location aware version below + int getLightValue(); + int getLightValue(IBlockAccess world, BlockPos pos); + + @SideOnly(Side.CLIENT) + boolean isTranslucent(); + + boolean useNeighborBrightness(); + + MapColor getMapColor(IBlockAccess p_185909_1_, BlockPos p_185909_2_); + + /** + * Returns the blockstate with the given rotation. If inapplicable, returns itself. + */ + IBlockState withRotation(Rotation rot); + + /** + * Returns the blockstate mirrored in the given way. If inapplicable, returns itself. + */ + IBlockState withMirror(Mirror mirrorIn); + + boolean isFullCube(); + + @SideOnly(Side.CLIENT) + boolean hasCustomBreakingProgress(); + + EnumBlockRenderType getRenderType(); + + @SideOnly(Side.CLIENT) + int getPackedLightmapCoords(IBlockAccess source, BlockPos pos); + + @SideOnly(Side.CLIENT) + float getAmbientOcclusionLightValue(); + + boolean isBlockNormalCube(); + + boolean isNormalCube(); + + boolean canProvidePower(); + + int getWeakPower(IBlockAccess blockAccess, BlockPos pos, EnumFacing side); + + boolean hasComparatorInputOverride(); + + int getComparatorInputOverride(World worldIn, BlockPos pos); + + float getBlockHardness(World worldIn, BlockPos pos); + + float getPlayerRelativeBlockHardness(EntityPlayer player, World worldIn, BlockPos pos); + + int getStrongPower(IBlockAccess blockAccess, BlockPos pos, EnumFacing side); + + EnumPushReaction getMobilityFlag(); + + IBlockState getActualState(IBlockAccess blockAccess, BlockPos pos); + + @SideOnly(Side.CLIENT) + AxisAlignedBB getSelectedBoundingBox(World worldIn, BlockPos pos); + + @SideOnly(Side.CLIENT) + boolean shouldSideBeRendered(IBlockAccess blockAccess, BlockPos pos, EnumFacing facing); + + boolean isOpaqueCube(); + + @Nullable + AxisAlignedBB getCollisionBoundingBox(IBlockAccess worldIn, BlockPos pos); + + void addCollisionBoxToList(World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean p_185908_6_); + + AxisAlignedBB getBoundingBox(IBlockAccess blockAccess, BlockPos pos); + + RayTraceResult collisionRayTrace(World worldIn, BlockPos pos, Vec3d start, Vec3d end); + + /** + * Determines if the block is solid enough on the top side to support other blocks, like redstone components. + */ + @Deprecated // Forge: Use isSideSolid(IBlockAccess, BlockPos, EnumFacing.UP) instead + boolean isTopSolid(); + + //Forge added functions + boolean doesSideBlockRendering(IBlockAccess world, BlockPos pos, EnumFacing side); + boolean isSideSolid(IBlockAccess world, BlockPos pos, EnumFacing side); + boolean doesSideBlockChestOpening(IBlockAccess world, BlockPos pos, EnumFacing side); + + Vec3d getOffset(IBlockAccess access, BlockPos pos); + + boolean causesSuffocation(); + + BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, BlockPos pos, EnumFacing facing); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockState.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockState.java new file mode 100644 index 0000000..9d89a24 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/IBlockState.java @@ -0,0 +1,31 @@ +package net.minecraft.block.state; + +import com.google.common.collect.ImmutableMap; +import java.util.Collection; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; + +public interface IBlockState extends IBlockBehaviors, IBlockProperties +{ + Collection < IProperty> getPropertyKeys(); + + /** + * Get the value of the given Property for this BlockState + */ + > T getValue(IProperty property); + + /** + * Get a version of this BlockState with the given Property now set to the given value + */ + , V extends T> IBlockState withProperty(IProperty property, V value); + + /** + * Create a version of this BlockState with the given property cycled to the next value in order. If the property + * was at the highest possible value, it is set to the lowest one instead. + */ + > IBlockState cycleProperty(IProperty property); + + ImmutableMap < IProperty, Comparable> getProperties(); + + Block getBlock(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/package-info.java new file mode 100644 index 0000000..2602ee2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.block.state; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockMatcher.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockMatcher.java new file mode 100644 index 0000000..10c7fe5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockMatcher.java @@ -0,0 +1,26 @@ +package net.minecraft.block.state.pattern; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; + +public class BlockMatcher implements Predicate +{ + private final Block block; + + private BlockMatcher(Block blockType) + { + this.block = blockType; + } + + public static BlockMatcher forBlock(Block blockType) + { + return new BlockMatcher(blockType); + } + + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getBlock() == this.block; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockMaterialMatcher.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockMaterialMatcher.java new file mode 100644 index 0000000..7a9b4cf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockMaterialMatcher.java @@ -0,0 +1,26 @@ +package net.minecraft.block.state.pattern; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; + +public class BlockMaterialMatcher implements Predicate +{ + private final Material material; + + private BlockMaterialMatcher(Material materialIn) + { + this.material = materialIn; + } + + public static BlockMaterialMatcher forMaterial(Material materialIn) + { + return new BlockMaterialMatcher(materialIn); + } + + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getMaterial() == this.material; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockPattern.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockPattern.java new file mode 100644 index 0000000..88b3592 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockPattern.java @@ -0,0 +1,216 @@ +package net.minecraft.block.state.pattern; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Predicate; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.LoadingCache; +import javax.annotation.Nullable; +import net.minecraft.block.state.BlockWorldState; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3i; +import net.minecraft.world.World; + +public class BlockPattern +{ + private final Predicate[][][] blockMatches; + private final int fingerLength; + private final int thumbLength; + private final int palmLength; + + public BlockPattern(Predicate[][][] predicatesIn) + { + this.blockMatches = predicatesIn; + this.fingerLength = predicatesIn.length; + + if (this.fingerLength > 0) + { + this.thumbLength = predicatesIn[0].length; + + if (this.thumbLength > 0) + { + this.palmLength = predicatesIn[0][0].length; + } + else + { + this.palmLength = 0; + } + } + else + { + this.thumbLength = 0; + this.palmLength = 0; + } + } + + public int getFingerLength() + { + return this.fingerLength; + } + + public int getThumbLength() + { + return this.thumbLength; + } + + public int getPalmLength() + { + return this.palmLength; + } + + /** + * checks that the given pattern & rotation is at the block co-ordinates. + */ + @Nullable + private BlockPattern.PatternHelper checkPatternAt(BlockPos pos, EnumFacing finger, EnumFacing thumb, LoadingCache lcache) + { + for (int i = 0; i < this.palmLength; ++i) + { + for (int j = 0; j < this.thumbLength; ++j) + { + for (int k = 0; k < this.fingerLength; ++k) + { + if (!this.blockMatches[k][j][i].apply(lcache.getUnchecked(translateOffset(pos, finger, thumb, i, j, k)))) + { + return null; + } + } + } + } + + return new BlockPattern.PatternHelper(pos, finger, thumb, lcache, this.palmLength, this.thumbLength, this.fingerLength); + } + + /** + * Calculates whether the given world position matches the pattern. Warning, fairly heavy function. @return a + * BlockPattern.PatternHelper if found, null otherwise. + */ + @Nullable + public BlockPattern.PatternHelper match(World worldIn, BlockPos pos) + { + LoadingCache loadingcache = createLoadingCache(worldIn, false); + int i = Math.max(Math.max(this.palmLength, this.thumbLength), this.fingerLength); + + for (BlockPos blockpos : BlockPos.getAllInBox(pos, pos.add(i - 1, i - 1, i - 1))) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + if (enumfacing1 != enumfacing && enumfacing1 != enumfacing.getOpposite()) + { + BlockPattern.PatternHelper blockpattern$patternhelper = this.checkPatternAt(blockpos, enumfacing, enumfacing1, loadingcache); + + if (blockpattern$patternhelper != null) + { + return blockpattern$patternhelper; + } + } + } + } + } + + return null; + } + + public static LoadingCache createLoadingCache(World worldIn, boolean forceLoadIn) + { + return CacheBuilder.newBuilder().build(new BlockPattern.CacheLoader(worldIn, forceLoadIn)); + } + + /** + * Offsets the position of pos in the direction of finger and thumb facing by offset amounts, follows the right-hand + * rule for cross products (finger, thumb, palm) @return A new BlockPos offset in the facing directions + */ + protected static BlockPos translateOffset(BlockPos pos, EnumFacing finger, EnumFacing thumb, int palmOffset, int thumbOffset, int fingerOffset) + { + if (finger != thumb && finger != thumb.getOpposite()) + { + Vec3i vec3i = new Vec3i(finger.getFrontOffsetX(), finger.getFrontOffsetY(), finger.getFrontOffsetZ()); + Vec3i vec3i1 = new Vec3i(thumb.getFrontOffsetX(), thumb.getFrontOffsetY(), thumb.getFrontOffsetZ()); + Vec3i vec3i2 = vec3i.crossProduct(vec3i1); + return pos.add(vec3i1.getX() * -thumbOffset + vec3i2.getX() * palmOffset + vec3i.getX() * fingerOffset, vec3i1.getY() * -thumbOffset + vec3i2.getY() * palmOffset + vec3i.getY() * fingerOffset, vec3i1.getZ() * -thumbOffset + vec3i2.getZ() * palmOffset + vec3i.getZ() * fingerOffset); + } + else + { + throw new IllegalArgumentException("Invalid forwards & up combination"); + } + } + + static class CacheLoader extends com.google.common.cache.CacheLoader + { + private final World world; + private final boolean forceLoad; + + public CacheLoader(World worldIn, boolean forceLoadIn) + { + this.world = worldIn; + this.forceLoad = forceLoadIn; + } + + public BlockWorldState load(BlockPos p_load_1_) throws Exception + { + return new BlockWorldState(this.world, p_load_1_, this.forceLoad); + } + } + + public static class PatternHelper + { + private final BlockPos frontTopLeft; + private final EnumFacing forwards; + private final EnumFacing up; + private final LoadingCache lcache; + private final int width; + private final int height; + private final int depth; + + public PatternHelper(BlockPos posIn, EnumFacing fingerIn, EnumFacing thumbIn, LoadingCache lcacheIn, int widthIn, int heightIn, int depthIn) + { + this.frontTopLeft = posIn; + this.forwards = fingerIn; + this.up = thumbIn; + this.lcache = lcacheIn; + this.width = widthIn; + this.height = heightIn; + this.depth = depthIn; + } + + /** + * Return the BlockPos of the Pattern + */ + public BlockPos getFrontTopLeft() + { + return this.frontTopLeft; + } + + public EnumFacing getForwards() + { + return this.forwards; + } + + public EnumFacing getUp() + { + return this.up; + } + + public int getWidth() + { + return this.width; + } + + public int getHeight() + { + return this.height; + } + + public BlockWorldState translateOffset(int palmOffset, int thumbOffset, int fingerOffset) + { + return this.lcache.getUnchecked(BlockPattern.translateOffset(this.frontTopLeft, this.getForwards(), this.getUp(), palmOffset, thumbOffset, fingerOffset)); + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("up", this.up).add("forwards", this.forwards).add("frontTopLeft", this.frontTopLeft).toString(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockStateMatcher.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockStateMatcher.java new file mode 100644 index 0000000..1e17417 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/BlockStateMatcher.java @@ -0,0 +1,79 @@ +package net.minecraft.block.state.pattern; + +import com.google.common.base.Predicate; +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; + +public class BlockStateMatcher implements Predicate +{ + public static final Predicate ANY = new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return true; + } + }; + private final BlockStateContainer blockstate; + private final Map < IProperty, Predicate> propertyPredicates = Maps. < IProperty, Predicate> newHashMap(); + + private BlockStateMatcher(BlockStateContainer blockStateIn) + { + this.blockstate = blockStateIn; + } + + public static BlockStateMatcher forBlock(Block blockIn) + { + return new BlockStateMatcher(blockIn.getBlockState()); + } + + public boolean apply(@Nullable IBlockState p_apply_1_) + { + if (p_apply_1_ != null && p_apply_1_.getBlock().equals(this.blockstate.getBlock())) + { + if (this.propertyPredicates.isEmpty()) + { + return true; + } + else + { + for (Entry < IProperty, Predicate> entry : this.propertyPredicates.entrySet()) + { + if (!this.matches(p_apply_1_, (IProperty)entry.getKey(), (Predicate)entry.getValue())) + { + return false; + } + } + + return true; + } + } + else + { + return false; + } + } + + protected > boolean matches(IBlockState blockState, IProperty property, Predicate predicate) + { + return predicate.apply(blockState.getValue(property)); + } + + public > BlockStateMatcher where(IProperty property, Predicate is) + { + if (!this.blockstate.getProperties().contains(property)) + { + throw new IllegalArgumentException(this.blockstate + " cannot support property " + property); + } + else + { + this.propertyPredicates.put(property, is); + return this; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/FactoryBlockPattern.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/FactoryBlockPattern.java new file mode 100644 index 0000000..e54c395 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/FactoryBlockPattern.java @@ -0,0 +1,127 @@ +package net.minecraft.block.state.pattern; + +import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.lang.reflect.Array; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.block.state.BlockWorldState; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; + +public class FactoryBlockPattern +{ + private static final Joiner COMMA_JOIN = Joiner.on(","); + private final List depth = Lists.newArrayList(); + private final Map> symbolMap = Maps.>newHashMap(); + private int aisleHeight; + private int rowWidth; + + private FactoryBlockPattern() + { + this.symbolMap.put(' ', Predicates.alwaysTrue()); + } + + /** + * Adds a single aisle to this pattern, going in the z axis. (so multiple calls to this will increase the z-size by + * 1) + */ + public FactoryBlockPattern aisle(String... aisle) + { + if (!ArrayUtils.isEmpty((Object[])aisle) && !StringUtils.isEmpty(aisle[0])) + { + if (this.depth.isEmpty()) + { + this.aisleHeight = aisle.length; + this.rowWidth = aisle[0].length(); + } + + if (aisle.length != this.aisleHeight) + { + throw new IllegalArgumentException("Expected aisle with height of " + this.aisleHeight + ", but was given one with a height of " + aisle.length + ")"); + } + else + { + for (String s : aisle) + { + if (s.length() != this.rowWidth) + { + throw new IllegalArgumentException("Not all rows in the given aisle are the correct width (expected " + this.rowWidth + ", found one with " + s.length() + ")"); + } + + for (char c0 : s.toCharArray()) + { + if (!this.symbolMap.containsKey(Character.valueOf(c0))) + { + this.symbolMap.put(Character.valueOf(c0), null); + } + } + } + + this.depth.add(aisle); + return this; + } + } + else + { + throw new IllegalArgumentException("Empty pattern for aisle"); + } + } + + public static FactoryBlockPattern start() + { + return new FactoryBlockPattern(); + } + + public FactoryBlockPattern where(char symbol, Predicate blockMatcher) + { + this.symbolMap.put(Character.valueOf(symbol), blockMatcher); + return this; + } + + public BlockPattern build() + { + return new BlockPattern(this.makePredicateArray()); + } + + private Predicate[][][] makePredicateArray() + { + this.checkMissingPredicates(); + Predicate[][][] predicate = (Predicate[][][])((Predicate[][][])Array.newInstance(Predicate.class, this.depth.size(), this.aisleHeight, this.rowWidth)); + + for (int i = 0; i < this.depth.size(); ++i) + { + for (int j = 0; j < this.aisleHeight; ++j) + { + for (int k = 0; k < this.rowWidth; ++k) + { + predicate[i][j][k] = this.symbolMap.get(Character.valueOf(((String[])this.depth.get(i))[j].charAt(k))); + } + } + } + + return predicate; + } + + private void checkMissingPredicates() + { + List list = Lists.newArrayList(); + + for (Entry> entry : this.symbolMap.entrySet()) + { + if (entry.getValue() == null) + { + list.add(entry.getKey()); + } + } + + if (!list.isEmpty()) + { + throw new IllegalStateException("Predicates for character(s) " + COMMA_JOIN.join(list) + " are missing"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/package-info.java new file mode 100644 index 0000000..df29520 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/block/state/pattern/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.block.state.pattern; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/AnvilConverterException.java b/build/tmp/recompileMc/sources/net/minecraft/client/AnvilConverterException.java new file mode 100644 index 0000000..4690e4d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/AnvilConverterException.java @@ -0,0 +1,13 @@ +package net.minecraft.client; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class AnvilConverterException extends Exception +{ + public AnvilConverterException(String exceptionMessage) + { + super(exceptionMessage); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/ClientBrandRetriever.java b/build/tmp/recompileMc/sources/net/minecraft/client/ClientBrandRetriever.java new file mode 100644 index 0000000..366fe56 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/ClientBrandRetriever.java @@ -0,0 +1,13 @@ +package net.minecraft.client; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ClientBrandRetriever +{ + public static String getClientModName() + { + return net.minecraftforge.fml.common.FMLCommonHandler.instance().getModName(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/LoadingScreenRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/LoadingScreenRenderer.java new file mode 100644 index 0000000..7ef08f2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/LoadingScreenRenderer.java @@ -0,0 +1,228 @@ +package net.minecraft.client; + +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.util.IProgressUpdate; +import net.minecraft.util.MinecraftError; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LoadingScreenRenderer implements IProgressUpdate +{ + private String message = ""; + /** A reference to the Minecraft object. */ + private final Minecraft mc; + /** The text currently displayed (i.e. the argument to the last call to printText or displayString) */ + private String currentlyDisplayedText = ""; + /** The system's time represented in milliseconds. */ + private long systemTime = Minecraft.getSystemTime(); + /** True if the loading ended with a success */ + private boolean loadingSuccess; + private final ScaledResolution scaledResolution; + private final Framebuffer framebuffer; + + public LoadingScreenRenderer(Minecraft mcIn) + { + this.mc = mcIn; + this.scaledResolution = new ScaledResolution(mcIn); + this.framebuffer = new Framebuffer(mcIn.displayWidth, mcIn.displayHeight, false); + this.framebuffer.setFramebufferFilter(9728); + } + + /** + * this string, followed by "working..." and then the "% complete" are the 3 lines shown. This resets progress to 0, + * and the WorkingString to "working...". + */ + public void resetProgressAndMessage(String message) + { + this.loadingSuccess = false; + this.displayString(message); + } + + /** + * Shows the 'Saving level' string. + */ + public void displaySavingString(String message) + { + this.loadingSuccess = true; + this.displayString(message); + } + + private void displayString(String message) + { + this.currentlyDisplayedText = message; + + if (!this.mc.running) + { + if (!this.loadingSuccess) + { + throw new MinecraftError(); + } + } + else + { + GlStateManager.clear(256); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + + if (OpenGlHelper.isFramebufferEnabled()) + { + int i = this.scaledResolution.getScaleFactor(); + GlStateManager.ortho(0.0D, (double)(this.scaledResolution.getScaledWidth() * i), (double)(this.scaledResolution.getScaledHeight() * i), 0.0D, 100.0D, 300.0D); + } + else + { + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + GlStateManager.ortho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); + } + + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -200.0F); + } + } + + /** + * Displays a string on the loading screen supposed to indicate what is being done currently. + */ + public void displayLoadingString(String message) + { + if (!this.mc.running) + { + if (!this.loadingSuccess) + { + throw new MinecraftError(); + } + } + else + { + this.systemTime = 0L; + this.message = message; + this.setLoadingProgress(-1); + this.systemTime = 0L; + } + } + + /** + * Updates the progress bar on the loading screen to the specified amount. + */ + public void setLoadingProgress(int progress) + { + if (!this.mc.running) + { + if (!this.loadingSuccess) + { + throw new MinecraftError(); + } + } + else + { + long i = Minecraft.getSystemTime(); + + if (i - this.systemTime >= 100L) + { + this.systemTime = i; + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int j = scaledresolution.getScaleFactor(); + int k = scaledresolution.getScaledWidth(); + int l = scaledresolution.getScaledHeight(); + + if (OpenGlHelper.isFramebufferEnabled()) + { + this.framebuffer.framebufferClear(); + } + else + { + GlStateManager.clear(256); + } + + this.framebuffer.bindFramebuffer(false); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -200.0F); + + if (!OpenGlHelper.isFramebufferEnabled()) + { + GlStateManager.clear(16640); + } + + try + { + if (!net.minecraftforge.fml.client.FMLClientHandler.instance().handleLoadingScreen(scaledresolution)) //FML Don't render while FML's pre-screen is rendering + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.mc.getTextureManager().bindTexture(Gui.OPTIONS_BACKGROUND); + float f = 32.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)l, 0.0D).tex(0.0D, (double)((float)l / 32.0F)).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos((double)k, (double)l, 0.0D).tex((double)((float)k / 32.0F), (double)((float)l / 32.0F)).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos((double)k, 0.0D, 0.0D).tex((double)((float)k / 32.0F), 0.0D).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).tex(0.0D, 0.0D).color(64, 64, 64, 255).endVertex(); + tessellator.draw(); + + if (progress >= 0) + { + int i1 = 100; + int j1 = 2; + int k1 = k / 2 - 50; + int l1 = l / 2 + 16; + GlStateManager.disableTexture2D(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos((double)k1, (double)l1, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)k1, (double)(l1 + 2), 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)(k1 + 100), (double)(l1 + 2), 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)(k1 + 100), (double)l1, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)k1, (double)l1, 0.0D).color(128, 255, 128, 255).endVertex(); + bufferbuilder.pos((double)k1, (double)(l1 + 2), 0.0D).color(128, 255, 128, 255).endVertex(); + bufferbuilder.pos((double)(k1 + progress), (double)(l1 + 2), 0.0D).color(128, 255, 128, 255).endVertex(); + bufferbuilder.pos((double)(k1 + progress), (double)l1, 0.0D).color(128, 255, 128, 255).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + } + + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.mc.fontRenderer.drawStringWithShadow(this.currentlyDisplayedText, (float)((k - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedText)) / 2), (float)(l / 2 - 4 - 16), 16777215); + this.mc.fontRenderer.drawStringWithShadow(this.message, (float)((k - this.mc.fontRenderer.getStringWidth(this.message)) / 2), (float)(l / 2 - 4 + 8), 16777215); + } + } + catch (java.io.IOException e) + { + throw new RuntimeException(e); + } //FML End + this.framebuffer.unbindFramebuffer(); + + if (OpenGlHelper.isFramebufferEnabled()) + { + this.framebuffer.framebufferRender(k * j, l * j); + } + + this.mc.updateDisplay(); + + try + { + Thread.yield(); + } + catch (Exception var15) + { + ; + } + } + } + } + + public void setDoneWorking() + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/Minecraft.java b/build/tmp/recompileMc/sources/net/minecraft/client/Minecraft.java new file mode 100644 index 0000000..bde0049 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/Minecraft.java @@ -0,0 +1,3463 @@ +package net.minecraft.client; + +import com.google.common.collect.Lists; +import com.google.common.collect.Queues; +import com.google.common.collect.Sets; +import com.google.common.hash.Hashing; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import com.mojang.authlib.AuthenticationService; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.properties.PropertyMap; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.Proxy; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.IntBuffer; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Queue; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.audio.MusicTicker; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiChat; +import net.minecraft.client.gui.GuiControls; +import net.minecraft.client.gui.GuiGameOver; +import net.minecraft.client.gui.GuiIngame; +import net.minecraft.client.gui.GuiIngameMenu; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiMemoryErrorScreen; +import net.minecraft.client.gui.GuiMultiplayer; +import net.minecraft.client.gui.GuiNewChat; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiScreenWorking; +import net.minecraft.client.gui.GuiSleepMP; +import net.minecraft.client.gui.GuiWinGame; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.gui.ScreenChatOptions; +import net.minecraft.client.gui.advancements.GuiScreenAdvancements; +import net.minecraft.client.gui.chat.NarratorChatListener; +import net.minecraft.client.gui.inventory.GuiContainerCreative; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.client.gui.recipebook.RecipeList; +import net.minecraft.client.gui.toasts.GuiToast; +import net.minecraft.client.main.GameConfiguration; +import net.minecraft.client.multiplayer.GuiConnecting; +import net.minecraft.client.multiplayer.PlayerControllerMP; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.network.NetHandlerLoginClient; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.renderer.color.BlockColors; +import net.minecraft.client.renderer.color.ItemColors; +import net.minecraft.client.renderer.debug.DebugRenderer; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.DefaultResourcePack; +import net.minecraft.client.resources.FoliageColorReloadListener; +import net.minecraft.client.resources.GrassColorReloadListener; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourcePack; +import net.minecraft.client.resources.LanguageManager; +import net.minecraft.client.resources.ResourcePackRepository; +import net.minecraft.client.resources.SimpleReloadableResourceManager; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.client.resources.data.AnimationMetadataSection; +import net.minecraft.client.resources.data.AnimationMetadataSectionSerializer; +import net.minecraft.client.resources.data.FontMetadataSection; +import net.minecraft.client.resources.data.FontMetadataSectionSerializer; +import net.minecraft.client.resources.data.LanguageMetadataSection; +import net.minecraft.client.resources.data.LanguageMetadataSectionSerializer; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.client.resources.data.PackMetadataSection; +import net.minecraft.client.resources.data.PackMetadataSectionSerializer; +import net.minecraft.client.resources.data.TextureMetadataSection; +import net.minecraft.client.resources.data.TextureMetadataSectionSerializer; +import net.minecraft.client.settings.CreativeSettings; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.client.tutorial.Tutorial; +import net.minecraft.client.util.ISearchTree; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.client.util.RecipeBookClient; +import net.minecraft.client.util.SearchTree; +import net.minecraft.client.util.SearchTreeManager; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLeashKnot; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Bootstrap; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.login.client.CPacketLoginStart; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.profiler.ISnooperInfo; +import net.minecraft.profiler.Profiler; +import net.minecraft.profiler.Snooper; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.integrated.IntegratedServer; +import net.minecraft.server.management.PlayerProfileCache; +import net.minecraft.stats.RecipeBook; +import net.minecraft.stats.StatisticsManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.FrameTimer; +import net.minecraft.util.IThreadListener; +import net.minecraft.util.MinecraftError; +import net.minecraft.util.MouseHelper; +import net.minecraft.util.MovementInputFromOptions; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.ScreenShotHelper; +import net.minecraft.util.Session; +import net.minecraft.util.Timer; +import net.minecraft.util.Util; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.DataFixesManager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentKeybind; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.WorldProviderHell; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.chunk.storage.AnvilSaveConverter; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.ISaveHandler; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.Charsets; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.LWJGLException; +import org.lwjgl.Sys; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.ContextCapabilities; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.DisplayMode; +import org.lwjgl.opengl.GLContext; +import org.lwjgl.opengl.OpenGLException; +import org.lwjgl.opengl.PixelFormat; +import org.lwjgl.util.glu.GLU; + +@SideOnly(Side.CLIENT) +public class Minecraft implements IThreadListener, ISnooperInfo +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation LOCATION_MOJANG_PNG = new ResourceLocation("textures/gui/title/mojang.png"); + public static final boolean IS_RUNNING_ON_MAC = Util.getOSType() == Util.EnumOS.OSX; + /** + * A 10MiB preallocation to ensure the heap is reasonably sized. {@linkplain #freeMemory() Freed} when the game runs + * out of memory. + * + * @see #freeMemory() + */ + public static byte[] memoryReserve = new byte[10485760]; + private static final List MAC_DISPLAY_MODES = Lists.newArrayList(new DisplayMode(2560, 1600), new DisplayMode(2880, 1800)); + private final File fileResourcepacks; + private final PropertyMap twitchDetails; + /** The player's GameProfile properties */ + private final PropertyMap profileProperties; + private ServerData currentServerData; + /** The RenderEngine instance used by Minecraft */ + public TextureManager renderEngine; + /** The instance of the Minecraft Client, set in the constructor. */ + private static Minecraft instance; + private final DataFixer dataFixer; + public PlayerControllerMP playerController; + private boolean fullscreen; + private final boolean enableGLErrorChecking = true; + private boolean hasCrashed; + /** Instance of CrashReport. */ + private CrashReport crashReporter; + public int displayWidth; + public int displayHeight; + /** True if the player is connected to a realms server */ + private boolean connectedToRealms; + private final Timer timer = new Timer(20.0F); + /** Instance of PlayerUsageSnooper. */ + private final Snooper usageSnooper = new Snooper("client", this, MinecraftServer.getCurrentTimeMillis()); + public WorldClient world; + public RenderGlobal renderGlobal; + private RenderManager renderManager; + private RenderItem renderItem; + private ItemRenderer itemRenderer; + public EntityPlayerSP player; + @Nullable + private Entity renderViewEntity; + public Entity pointedEntity; + public ParticleManager effectRenderer; + /** Manages all search trees */ + private SearchTreeManager searchTreeManager = new SearchTreeManager(); + private final Session session; + private boolean isGamePaused; + /** + * Time passed since the last update in ticks. Used instead of this.timer.renderPartialTicks when paused in + * singleplayer. + */ + private float renderPartialTicksPaused; + /** The font renderer used for displaying and measuring text */ + public FontRenderer fontRenderer; + public FontRenderer standardGalacticFontRenderer; + /** The GuiScreen that's being displayed at the moment. */ + @Nullable + public GuiScreen currentScreen; + public LoadingScreenRenderer loadingScreen; + public EntityRenderer entityRenderer; + public DebugRenderer debugRenderer; + /** Mouse left click counter */ + private int leftClickCounter; + /** Display width */ + private final int tempDisplayWidth; + /** Display height */ + private final int tempDisplayHeight; + /** Instance of IntegratedServer. */ + @Nullable + private IntegratedServer integratedServer; + public GuiIngame ingameGUI; + /** Skip render world */ + public boolean skipRenderWorld; + /** The ray trace hit that the mouse is over. */ + public RayTraceResult objectMouseOver; + /** The game settings that currently hold effect. */ + public GameSettings gameSettings; + public CreativeSettings creativeSettings; + /** Mouse helper instance. */ + public MouseHelper mouseHelper; + public final File mcDataDir; + private final File fileAssets; + private final String launchedVersion; + private final String versionType; + private final Proxy proxy; + private ISaveFormat saveLoader; + /** + * This is set to fpsCounter every debug screen update, and is shown on the debug screen. It's also sent as part of + * the usage snooping. + */ + private static int debugFPS; + /** When you place a block, it's set to 6, decremented once per tick, when it's 0, you can place another block. */ + private int rightClickDelayTimer; + private String serverName; + private int serverPort; + /** Does the actual gameplay have focus. If so then mouse and keys will effect the player instead of menus. */ + public boolean inGameHasFocus; + long systemTime = getSystemTime(); + /** Join player counter */ + private int joinPlayerCounter; + /** The FrameTimer's instance */ + public final FrameTimer frameTimer = new FrameTimer(); + /** Time in nanoseconds of when the class is loaded */ + long startNanoTime = System.nanoTime(); + private final boolean jvm64bit; + private final boolean isDemo; + @Nullable + private NetworkManager myNetworkManager; + private boolean integratedServerIsRunning; + /** The profiler instance */ + public final Profiler mcProfiler = new Profiler(); + /** Keeps track of how long the debug crash keycombo (F3+C) has been pressed for, in order to crash after 10 seconds. */ + private long debugCrashKeyPressTime = -1L; + private IReloadableResourceManager mcResourceManager; + private final MetadataSerializer metadataSerializer_ = new MetadataSerializer(); + private final List defaultResourcePacks = Lists.newArrayList(); + public final DefaultResourcePack mcDefaultResourcePack; + private ResourcePackRepository mcResourcePackRepository; + private LanguageManager mcLanguageManager; + private BlockColors blockColors; + private ItemColors itemColors; + private Framebuffer framebufferMc; + private TextureMap textureMapBlocks; + private SoundHandler mcSoundHandler; + private MusicTicker mcMusicTicker; + private ResourceLocation mojangLogo; + private final MinecraftSessionService sessionService; + private SkinManager skinManager; + private final Queue < FutureTask> scheduledTasks = Queues. < FutureTask> newArrayDeque(); + private final Thread mcThread = Thread.currentThread(); + private ModelManager modelManager; + /** The BlockRenderDispatcher instance that will be used based off gamesettings */ + private BlockRendererDispatcher blockRenderDispatcher; + private final GuiToast toastGui; + /** Set to true to keep the game loop running. Set to false by shutdown() to allow the game loop to exit cleanly. */ + volatile boolean running = true; + /** String that shows the debug information */ + public String debug = ""; + public boolean renderChunksMany = true; + /** Approximate time (in ms) of last update to debug string */ + private long debugUpdateTime = getSystemTime(); + /** holds the current fps */ + private int fpsCounter; + private boolean actionKeyF3; + private final Tutorial tutorial; + long prevFrameTime = -1L; + /** Profiler currently displayed in the debug screen pie chart */ + private String debugProfilerName = "root"; + + public Minecraft(GameConfiguration gameConfig) + { + instance = this; + this.mcDataDir = gameConfig.folderInfo.mcDataDir; + this.fileAssets = gameConfig.folderInfo.assetsDir; + this.fileResourcepacks = gameConfig.folderInfo.resourcePacksDir; + this.launchedVersion = gameConfig.gameInfo.version; + this.versionType = gameConfig.gameInfo.versionType; + this.twitchDetails = gameConfig.userInfo.userProperties; + this.profileProperties = gameConfig.userInfo.profileProperties; + this.mcDefaultResourcePack = new DefaultResourcePack(gameConfig.folderInfo.getAssetsIndex()); + this.proxy = gameConfig.userInfo.proxy == null ? Proxy.NO_PROXY : gameConfig.userInfo.proxy; + this.sessionService = (new YggdrasilAuthenticationService(this.proxy, UUID.randomUUID().toString())).createMinecraftSessionService(); + this.session = gameConfig.userInfo.session; + LOGGER.info("Setting user: {}", (Object)this.session.getUsername()); + this.isDemo = gameConfig.gameInfo.isDemo; + this.displayWidth = gameConfig.displayInfo.width > 0 ? gameConfig.displayInfo.width : 1; + this.displayHeight = gameConfig.displayInfo.height > 0 ? gameConfig.displayInfo.height : 1; + this.tempDisplayWidth = gameConfig.displayInfo.width; + this.tempDisplayHeight = gameConfig.displayInfo.height; + this.fullscreen = gameConfig.displayInfo.fullscreen; + this.jvm64bit = isJvm64bit(); + this.integratedServer = null; + + if (gameConfig.serverInfo.serverName != null) + { + this.serverName = gameConfig.serverInfo.serverName; + this.serverPort = gameConfig.serverInfo.serverPort; + } + + ImageIO.setUseCache(false); + Locale.setDefault(Locale.ROOT); + Bootstrap.register(); + TextComponentKeybind.displaySupplierFunction = KeyBinding::getDisplayString; + this.dataFixer = DataFixesManager.createFixer(); + this.toastGui = new GuiToast(this); + this.tutorial = new Tutorial(this); + } + + public void run() + { + this.running = true; + + try + { + this.init(); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Initializing game"); + crashreport.makeCategory("Initialization"); + this.displayCrashReport(this.addGraphicsAndWorldToCrashReport(crashreport)); + return; + } + + while (true) + { + try + { + while (this.running) + { + if (!this.hasCrashed || this.crashReporter == null) + { + try + { + this.runGameLoop(); + } + catch (OutOfMemoryError var10) + { + this.freeMemory(); + this.displayGuiScreen(new GuiMemoryErrorScreen()); + System.gc(); + } + } + else + { + this.displayCrashReport(this.crashReporter); + } + } + } + catch (MinecraftError var12) + { + break; + } + catch (ReportedException reportedexception) + { + this.addGraphicsAndWorldToCrashReport(reportedexception.getCrashReport()); + this.freeMemory(); + LOGGER.fatal("Reported exception thrown!", (Throwable)reportedexception); + this.displayCrashReport(reportedexception.getCrashReport()); + break; + } + catch (Throwable throwable1) + { + CrashReport crashreport1 = this.addGraphicsAndWorldToCrashReport(new CrashReport("Unexpected error", throwable1)); + this.freeMemory(); + LOGGER.fatal("Unreported exception thrown!", throwable1); + this.displayCrashReport(crashreport1); + break; + } + finally + { + this.shutdownMinecraftApplet(); + } + + return; + } + } + + /** + * Starts the game: initializes the canvas, the title, the settings, etcetera. + */ + private void init() throws LWJGLException, IOException + { + this.gameSettings = new GameSettings(this, this.mcDataDir); + this.creativeSettings = new CreativeSettings(this, this.mcDataDir); + this.defaultResourcePacks.add(this.mcDefaultResourcePack); + this.startTimerHackThread(); + + if (this.gameSettings.overrideHeight > 0 && this.gameSettings.overrideWidth > 0) + { + this.displayWidth = this.gameSettings.overrideWidth; + this.displayHeight = this.gameSettings.overrideHeight; + } + + LOGGER.info("LWJGL Version: {}", (Object)Sys.getVersion()); + this.setWindowIcon(); + this.setInitialDisplayMode(); + this.createDisplay(); + OpenGlHelper.initializeTextures(); + this.framebufferMc = new Framebuffer(this.displayWidth, this.displayHeight, true); + this.framebufferMc.setFramebufferColor(0.0F, 0.0F, 0.0F, 0.0F); + this.registerMetadataSerializers(); + this.mcResourcePackRepository = new ResourcePackRepository(this.fileResourcepacks, new File(this.mcDataDir, "server-resource-packs"), this.mcDefaultResourcePack, this.metadataSerializer_, this.gameSettings); + this.mcResourceManager = new SimpleReloadableResourceManager(this.metadataSerializer_); + this.mcLanguageManager = new LanguageManager(this.metadataSerializer_, this.gameSettings.language); + this.mcResourceManager.registerReloadListener(this.mcLanguageManager); + net.minecraftforge.fml.client.FMLClientHandler.instance().beginMinecraftLoading(this, this.defaultResourcePacks, this.mcResourceManager, this.metadataSerializer_); + this.renderEngine = new TextureManager(this.mcResourceManager); + this.mcResourceManager.registerReloadListener(this.renderEngine); + net.minecraftforge.fml.client.SplashProgress.drawVanillaScreen(this.renderEngine); + this.skinManager = new SkinManager(this.renderEngine, new File(this.fileAssets, "skins"), this.sessionService); + this.saveLoader = new AnvilSaveConverter(new File(this.mcDataDir, "saves"), this.dataFixer); + this.mcSoundHandler = new SoundHandler(this.mcResourceManager, this.gameSettings); + this.mcResourceManager.registerReloadListener(this.mcSoundHandler); + this.mcMusicTicker = new MusicTicker(this); + this.fontRenderer = new FontRenderer(this.gameSettings, new ResourceLocation("textures/font/ascii.png"), this.renderEngine, false); + + if (this.gameSettings.language != null) + { + this.fontRenderer.setUnicodeFlag(this.isUnicode()); + this.fontRenderer.setBidiFlag(this.mcLanguageManager.isCurrentLanguageBidirectional()); + } + + this.standardGalacticFontRenderer = new FontRenderer(this.gameSettings, new ResourceLocation("textures/font/ascii_sga.png"), this.renderEngine, false); + this.mcResourceManager.registerReloadListener(this.fontRenderer); + this.mcResourceManager.registerReloadListener(this.standardGalacticFontRenderer); + this.mcResourceManager.registerReloadListener(new GrassColorReloadListener()); + this.mcResourceManager.registerReloadListener(new FoliageColorReloadListener()); + this.mouseHelper = new MouseHelper(); + net.minecraftforge.fml.common.ProgressManager.ProgressBar bar= net.minecraftforge.fml.common.ProgressManager.push("Rendering Setup", 5, true); + bar.step("GL Setup"); + this.checkGLError("Pre startup"); + GlStateManager.enableTexture2D(); + GlStateManager.shadeModel(7425); + GlStateManager.clearDepth(1.0D); + GlStateManager.enableDepth(); + GlStateManager.depthFunc(515); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.cullFace(GlStateManager.CullFace.BACK); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + this.checkGLError("Startup"); + bar.step("Loading Texture Map"); + this.textureMapBlocks = new TextureMap("textures"); + this.textureMapBlocks.setMipmapLevels(this.gameSettings.mipmapLevels); + this.renderEngine.loadTickableTexture(TextureMap.LOCATION_BLOCKS_TEXTURE, this.textureMapBlocks); + this.renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.textureMapBlocks.setBlurMipmapDirect(false, this.gameSettings.mipmapLevels > 0); + bar.step("Loading Model Manager"); + this.modelManager = new ModelManager(this.textureMapBlocks); + this.mcResourceManager.registerReloadListener(this.modelManager); + this.blockColors = BlockColors.init(); + this.itemColors = ItemColors.init(this.blockColors); + bar.step("Loading Item Renderer"); + this.renderItem = new RenderItem(this.renderEngine, this.modelManager, this.itemColors); + this.renderManager = new RenderManager(this.renderEngine, this.renderItem); + this.itemRenderer = new ItemRenderer(this); + this.mcResourceManager.registerReloadListener(this.renderItem); + bar.step("Loading Entity Renderer"); + net.minecraftforge.fml.client.SplashProgress.pause(); + this.entityRenderer = new EntityRenderer(this, this.mcResourceManager); + this.mcResourceManager.registerReloadListener(this.entityRenderer); + this.blockRenderDispatcher = new BlockRendererDispatcher(this.modelManager.getBlockModelShapes(), this.blockColors); + this.mcResourceManager.registerReloadListener(this.blockRenderDispatcher); + this.renderGlobal = new RenderGlobal(this); + this.mcResourceManager.registerReloadListener(this.renderGlobal); + this.populateSearchTreeManager(); + this.mcResourceManager.registerReloadListener(this.searchTreeManager); + GlStateManager.viewport(0, 0, this.displayWidth, this.displayHeight); + this.effectRenderer = new ParticleManager(this.world, this.renderEngine); + net.minecraftforge.fml.client.SplashProgress.resume(); + net.minecraftforge.fml.common.ProgressManager.pop(bar); + net.minecraftforge.fml.client.FMLClientHandler.instance().finishMinecraftLoading(); + this.checkGLError("Post startup"); + this.ingameGUI = new net.minecraftforge.client.GuiIngameForge(this); + + if (this.serverName != null) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().connectToServerAtStartup(this.serverName, this.serverPort); + } + else + { + this.displayGuiScreen(new GuiMainMenu()); + } + + net.minecraftforge.fml.client.SplashProgress.clearVanillaResources(renderEngine, mojangLogo); + this.mojangLogo = null; + this.loadingScreen = new LoadingScreenRenderer(this); + this.debugRenderer = new DebugRenderer(this); + + net.minecraftforge.fml.client.FMLClientHandler.instance().onInitializationComplete(); + if (this.gameSettings.fullScreen && !this.fullscreen) + { + this.toggleFullscreen(); + } + + try + { + Display.setVSyncEnabled(this.gameSettings.enableVsync); + } + catch (OpenGLException var2) + { + this.gameSettings.enableVsync = false; + this.gameSettings.saveOptions(); + } + + this.renderGlobal.makeEntityOutlineShader(); + } + + /** + * Fills {@link #searchTreeManager} with the current item and recipe registry contents. + */ + public void populateSearchTreeManager() + { + SearchTree searchtree = new SearchTree((p_193988_0_) -> + { + return (List)p_193988_0_.getTooltip((EntityPlayer)null, ITooltipFlag.TooltipFlags.NORMAL).stream().map(TextFormatting::getTextWithoutFormattingCodes).map(String::trim).filter((p_193984_0_) -> { + return !p_193984_0_.isEmpty(); + }).collect(Collectors.toList()); + }, (p_193985_0_) -> + { + return Collections.singleton(Item.REGISTRY.getNameForObject(p_193985_0_.getItem())); + }); + NonNullList nonnulllist = NonNullList.create(); + + for (Item item : Item.REGISTRY) + { + item.getSubItems(CreativeTabs.SEARCH, nonnulllist); + } + + nonnulllist.forEach(searchtree::add); + SearchTree searchtree1 = new SearchTree((p_193990_0_) -> + { + return (List)p_193990_0_.getRecipes().stream().flatMap((p_193993_0_) -> { + return p_193993_0_.getRecipeOutput().getTooltip((EntityPlayer)null, ITooltipFlag.TooltipFlags.NORMAL).stream(); + }).map(TextFormatting::getTextWithoutFormattingCodes).map(String::trim).filter((p_193994_0_) -> { + return !p_193994_0_.isEmpty(); + }).collect(Collectors.toList()); + }, (p_193991_0_) -> + { + return (List)p_193991_0_.getRecipes().stream().map((p_193992_0_) -> { + return Item.REGISTRY.getNameForObject(p_193992_0_.getRecipeOutput().getItem()); + }).collect(Collectors.toList()); + }); + RecipeBookClient.ALL_RECIPES.forEach(searchtree1::add); + this.searchTreeManager.register(SearchTreeManager.ITEMS, searchtree); + this.searchTreeManager.register(SearchTreeManager.RECIPES, searchtree1); + } + + private void registerMetadataSerializers() + { + this.metadataSerializer_.registerMetadataSectionType(new TextureMetadataSectionSerializer(), TextureMetadataSection.class); + this.metadataSerializer_.registerMetadataSectionType(new FontMetadataSectionSerializer(), FontMetadataSection.class); + this.metadataSerializer_.registerMetadataSectionType(new AnimationMetadataSectionSerializer(), AnimationMetadataSection.class); + this.metadataSerializer_.registerMetadataSectionType(new PackMetadataSectionSerializer(), PackMetadataSection.class); + this.metadataSerializer_.registerMetadataSectionType(new LanguageMetadataSectionSerializer(), LanguageMetadataSection.class); + } + + private void createDisplay() throws LWJGLException + { + Display.setResizable(true); + Display.setTitle("Minecraft 1.12.2"); + + try + { + Display.create((new PixelFormat()).withDepthBits(24)); + } + catch (LWJGLException lwjglexception) + { + LOGGER.error("Couldn't set pixel format", (Throwable)lwjglexception); + + try + { + Thread.sleep(1000L); + } + catch (InterruptedException var3) + { + ; + } + + if (this.fullscreen) + { + this.updateDisplayMode(); + } + + Display.create(); + } + } + + private void setInitialDisplayMode() throws LWJGLException + { + if (this.fullscreen) + { + Display.setFullscreen(true); + DisplayMode displaymode = Display.getDisplayMode(); + this.displayWidth = Math.max(1, displaymode.getWidth()); + this.displayHeight = Math.max(1, displaymode.getHeight()); + } + else + { + Display.setDisplayMode(new DisplayMode(this.displayWidth, this.displayHeight)); + } + } + + private void setWindowIcon() + { + Util.EnumOS util$enumos = Util.getOSType(); + + if (util$enumos != Util.EnumOS.OSX) + { + InputStream inputstream = null; + InputStream inputstream1 = null; + + try + { + inputstream = this.mcDefaultResourcePack.getInputStreamAssets(new ResourceLocation("icons/icon_16x16.png")); + inputstream1 = this.mcDefaultResourcePack.getInputStreamAssets(new ResourceLocation("icons/icon_32x32.png")); + + if (inputstream != null && inputstream1 != null) + { + Display.setIcon(new ByteBuffer[] {this.readImageToBuffer(inputstream), this.readImageToBuffer(inputstream1)}); + } + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't set icon", (Throwable)ioexception); + } + finally + { + IOUtils.closeQuietly(inputstream); + IOUtils.closeQuietly(inputstream1); + } + } + } + + private static boolean isJvm64bit() + { + String[] astring = new String[] {"sun.arch.data.model", "com.ibm.vm.bitmode", "os.arch"}; + + for (String s : astring) + { + String s1 = System.getProperty(s); + + if (s1 != null && s1.contains("64")) + { + return true; + } + } + + return false; + } + + public Framebuffer getFramebuffer() + { + return this.framebufferMc; + } + + /** + * Gets the version that Minecraft was launched under (the name of a version JSON). Specified via the -- + * version flag. + */ + public String getVersion() + { + return this.launchedVersion; + } + + /** + * Gets the type of version that Minecraft was launched under (as specified in the version JSON). Specified via the + * --versionType flag. + */ + public String getVersionType() + { + return this.versionType; + } + + private void startTimerHackThread() + { + Thread thread = new Thread("Timer hack thread") + { + public void run() + { + while (Minecraft.this.running) + { + try + { + Thread.sleep(2147483647L); + } + catch (InterruptedException var2) + { + ; + } + } + } + }; + thread.setDaemon(true); + thread.start(); + } + + public void crashed(CrashReport crash) + { + this.hasCrashed = true; + this.crashReporter = crash; + } + + /** + * Wrapper around displayCrashReportInternal + */ + public void displayCrashReport(CrashReport crashReportIn) + { + File file1 = new File(getMinecraft().mcDataDir, "crash-reports"); + File file2 = new File(file1, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt"); + Bootstrap.printToSYSOUT(crashReportIn.getCompleteReport()); + + int retVal; + if (crashReportIn.getFile() != null) + { + Bootstrap.printToSYSOUT("#@!@# Game crashed! Crash report saved to: #@!@# " + crashReportIn.getFile()); + retVal = -1; + } + else if (crashReportIn.saveToFile(file2)) + { + Bootstrap.printToSYSOUT("#@!@# Game crashed! Crash report saved to: #@!@# " + file2.getAbsolutePath()); + retVal = -1; + } + else + { + Bootstrap.printToSYSOUT("#@?@# Game crashed! Crash report could not be saved. #@?@#"); + retVal = -2; + } + net.minecraftforge.fml.common.FMLCommonHandler.instance().handleExit(retVal); + } + + public boolean isUnicode() + { + return this.mcLanguageManager.isCurrentLocaleUnicode() || this.gameSettings.forceUnicodeFont; + } + + @Deprecated // Forge: Use selective refreshResources method in FMLClientHandler + public void refreshResources() + { + List list = Lists.newArrayList(this.defaultResourcePacks); + + if (this.integratedServer != null) + { + this.integratedServer.reload(); + } + + for (ResourcePackRepository.Entry resourcepackrepository$entry : this.mcResourcePackRepository.getRepositoryEntries()) + { + list.add(resourcepackrepository$entry.getResourcePack()); + } + + if (this.mcResourcePackRepository.getServerResourcePack() != null) + { + list.add(this.mcResourcePackRepository.getServerResourcePack()); + } + + try + { + this.mcResourceManager.reloadResources(list); + } + catch (RuntimeException runtimeexception) + { + LOGGER.info("Caught error stitching, removing all assigned resourcepacks", (Throwable)runtimeexception); + list.clear(); + list.addAll(this.defaultResourcePacks); + this.mcResourcePackRepository.setRepositories(Collections.emptyList()); + this.mcResourceManager.reloadResources(list); + this.gameSettings.resourcePacks.clear(); + this.gameSettings.incompatibleResourcePacks.clear(); + this.gameSettings.saveOptions(); + } + + this.mcLanguageManager.parseLanguageMetadata(list); + + if (this.renderGlobal != null) + { + this.renderGlobal.loadRenderers(); + } + } + + private ByteBuffer readImageToBuffer(InputStream imageStream) throws IOException + { + BufferedImage bufferedimage = ImageIO.read(imageStream); + int[] aint = bufferedimage.getRGB(0, 0, bufferedimage.getWidth(), bufferedimage.getHeight(), (int[])null, 0, bufferedimage.getWidth()); + ByteBuffer bytebuffer = ByteBuffer.allocate(4 * aint.length); + + for (int i : aint) + { + bytebuffer.putInt(i << 8 | i >> 24 & 255); + } + + bytebuffer.flip(); + return bytebuffer; + } + + private void updateDisplayMode() throws LWJGLException + { + Set set = Sets.newHashSet(); + Collections.addAll(set, Display.getAvailableDisplayModes()); + DisplayMode displaymode = Display.getDesktopDisplayMode(); + + if (!set.contains(displaymode) && Util.getOSType() == Util.EnumOS.OSX) + { + label52: + + for (DisplayMode displaymode1 : MAC_DISPLAY_MODES) + { + boolean flag = true; + + for (DisplayMode displaymode2 : set) + { + if (displaymode2.getBitsPerPixel() == 32 && displaymode2.getWidth() == displaymode1.getWidth() && displaymode2.getHeight() == displaymode1.getHeight()) + { + flag = false; + break; + } + } + + if (!flag) + { + Iterator iterator = set.iterator(); + DisplayMode displaymode3; + + while (true) + { + if (!iterator.hasNext()) + { + continue label52; + } + + displaymode3 = (DisplayMode)iterator.next(); + + if (displaymode3.getBitsPerPixel() == 32 && displaymode3.getWidth() == displaymode1.getWidth() / 2 && displaymode3.getHeight() == displaymode1.getHeight() / 2) + { + break; + } + } + + displaymode = displaymode3; + } + } + } + + Display.setDisplayMode(displaymode); + this.displayWidth = displaymode.getWidth(); + this.displayHeight = displaymode.getHeight(); + } + + public void drawSplashScreen(TextureManager textureManagerInstance) throws LWJGLException + { + ScaledResolution scaledresolution = new ScaledResolution(this); + int i = scaledresolution.getScaleFactor(); + Framebuffer framebuffer = new Framebuffer(scaledresolution.getScaledWidth() * i, scaledresolution.getScaledHeight() * i, true); + framebuffer.bindFramebuffer(false); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, (double)scaledresolution.getScaledWidth(), (double)scaledresolution.getScaledHeight(), 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + GlStateManager.disableLighting(); + GlStateManager.disableFog(); + GlStateManager.disableDepth(); + GlStateManager.enableTexture2D(); + InputStream inputstream = null; + + try + { + inputstream = this.mcDefaultResourcePack.getInputStream(LOCATION_MOJANG_PNG); + this.mojangLogo = textureManagerInstance.getDynamicTextureLocation("logo", new DynamicTexture(ImageIO.read(inputstream))); + textureManagerInstance.bindTexture(this.mojangLogo); + } + catch (IOException ioexception) + { + LOGGER.error("Unable to load logo: {}", LOCATION_MOJANG_PNG, ioexception); + } + finally + { + IOUtils.closeQuietly(inputstream); + } + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)this.displayHeight, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos((double)this.displayWidth, (double)this.displayHeight, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos((double)this.displayWidth, 0.0D, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex(); + tessellator.draw(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int j = 256; + int k = 256; + this.draw((scaledresolution.getScaledWidth() - 256) / 2, (scaledresolution.getScaledHeight() - 256) / 2, 0, 0, 256, 256, 255, 255, 255, 255); + GlStateManager.disableLighting(); + GlStateManager.disableFog(); + framebuffer.unbindFramebuffer(); + framebuffer.framebufferRender(scaledresolution.getScaledWidth() * i, scaledresolution.getScaledHeight() * i); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(516, 0.1F); + this.updateDisplay(); + } + + /** + * Draw with the WorldRenderer + */ + public void draw(int posX, int posY, int texU, int texV, int width, int height, int red, int green, int blue, int alpha) + { + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + float f = 0.00390625F; + float f1 = 0.00390625F; + bufferbuilder.pos((double)posX, (double)(posY + height), 0.0D).tex((double)((float)texU * 0.00390625F), (double)((float)(texV + height) * 0.00390625F)).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos((double)(posX + width), (double)(posY + height), 0.0D).tex((double)((float)(texU + width) * 0.00390625F), (double)((float)(texV + height) * 0.00390625F)).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos((double)(posX + width), (double)posY, 0.0D).tex((double)((float)(texU + width) * 0.00390625F), (double)((float)texV * 0.00390625F)).color(red, green, blue, alpha).endVertex(); + bufferbuilder.pos((double)posX, (double)posY, 0.0D).tex((double)((float)texU * 0.00390625F), (double)((float)texV * 0.00390625F)).color(red, green, blue, alpha).endVertex(); + Tessellator.getInstance().draw(); + } + + /** + * Returns the save loader that is currently being used + */ + public ISaveFormat getSaveLoader() + { + return this.saveLoader; + } + + /** + * Sets the argument GuiScreen as the main (topmost visible) screen. + * + *

WARNING: This method is not thread-safe. Opening GUIs from a thread other than the main + * thread may cause many different issues, including the GUI being rendered before it has initialized (leading to + * unusual crashes). If on a thread other than the main thread, use {@link #addScheduledTask}: + * + *

+     * minecraft.addScheduledTask(() -> minecraft.displayGuiScreen(gui));
+     * 
+ * + * @param guiScreenIn The {@link GuiScreen} to display. If it is {@code null}, any open GUI will be closed. + */ + public void displayGuiScreen(@Nullable GuiScreen guiScreenIn) + { + if (guiScreenIn == null && this.world == null) + { + guiScreenIn = new GuiMainMenu(); + } + else if (guiScreenIn == null && this.player.getHealth() <= 0.0F) + { + guiScreenIn = new GuiGameOver((ITextComponent)null); + } + + GuiScreen old = this.currentScreen; + net.minecraftforge.client.event.GuiOpenEvent event = new net.minecraftforge.client.event.GuiOpenEvent(guiScreenIn); + + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; + + guiScreenIn = event.getGui(); + if (old != null && guiScreenIn != old) + { + old.onGuiClosed(); + } + + if (guiScreenIn instanceof GuiMainMenu || guiScreenIn instanceof GuiMultiplayer) + { + this.gameSettings.showDebugInfo = false; + this.ingameGUI.getChatGUI().clearChatMessages(true); + } + + this.currentScreen = guiScreenIn; + + if (guiScreenIn != null) + { + this.setIngameNotInFocus(); + KeyBinding.unPressAllKeys(); + + while (Mouse.next()) + { + ; + } + + while (Keyboard.next()) + { + ; + } + + ScaledResolution scaledresolution = new ScaledResolution(this); + int i = scaledresolution.getScaledWidth(); + int j = scaledresolution.getScaledHeight(); + guiScreenIn.setWorldAndResolution(this, i, j); + this.skipRenderWorld = false; + } + else + { + this.mcSoundHandler.resumeSounds(); + this.setIngameFocus(); + } + } + + /** + * Checks for an OpenGL error. If there is one, prints the error ID and error string. + */ + private void checkGLError(String message) + { + int i = GlStateManager.glGetError(); + + if (i != 0) + { + String s = GLU.gluErrorString(i); + LOGGER.error("########## GL ERROR ##########"); + LOGGER.error("@ {}", (Object)message); + LOGGER.error("{}: {}", Integer.valueOf(i), s); + } + } + + /** + * Shuts down the minecraft applet by stopping the resource downloads, and clearing up GL stuff; called when the + * application (or web page) is exited. + */ + public void shutdownMinecraftApplet() + { + try + { + LOGGER.info("Stopping!"); + + try + { + this.loadWorld((WorldClient)null); + } + catch (Throwable var5) + { + ; + } + + this.mcSoundHandler.unloadSounds(); + } + finally + { + Display.destroy(); + + if (!this.hasCrashed) + { + System.exit(0); + } + } + + System.gc(); + } + + /** + * Called repeatedly from run() + */ + private void runGameLoop() throws IOException + { + long i = System.nanoTime(); + this.mcProfiler.startSection("root"); + + if (Display.isCreated() && Display.isCloseRequested()) + { + this.shutdown(); + } + + this.timer.updateTimer(); + this.mcProfiler.startSection("scheduledExecutables"); + + synchronized (this.scheduledTasks) + { + while (!this.scheduledTasks.isEmpty()) + { + Util.runTask(this.scheduledTasks.poll(), LOGGER); + } + } + + this.mcProfiler.endSection(); + long l = System.nanoTime(); + this.mcProfiler.startSection("tick"); + + for (int j = 0; j < Math.min(10, this.timer.elapsedTicks); ++j) + { + this.runTick(); + } + + this.mcProfiler.endStartSection("preRenderErrors"); + long i1 = System.nanoTime() - l; + this.checkGLError("Pre render"); + this.mcProfiler.endStartSection("sound"); + this.mcSoundHandler.setListener(this.getRenderViewEntity(), this.timer.renderPartialTicks); //Forge: MC-46445 Spectator mode particles and sounds computed from where you have been before + this.mcProfiler.endSection(); + this.mcProfiler.startSection("render"); + GlStateManager.pushMatrix(); + GlStateManager.clear(16640); + this.framebufferMc.bindFramebuffer(true); + this.mcProfiler.startSection("display"); + GlStateManager.enableTexture2D(); + this.mcProfiler.endSection(); + + if (!this.skipRenderWorld) + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().onRenderTickStart(this.timer.renderPartialTicks); + this.mcProfiler.endStartSection("gameRenderer"); + this.entityRenderer.updateCameraAndRender(this.isGamePaused ? this.renderPartialTicksPaused : this.timer.renderPartialTicks, i); + this.mcProfiler.endStartSection("toasts"); + this.toastGui.drawToast(new ScaledResolution(this)); + this.mcProfiler.endSection(); + net.minecraftforge.fml.common.FMLCommonHandler.instance().onRenderTickEnd(this.timer.renderPartialTicks); + } + + this.mcProfiler.endSection(); + + if (this.gameSettings.showDebugInfo && this.gameSettings.showDebugProfilerChart && !this.gameSettings.hideGUI) + { + if (!this.mcProfiler.profilingEnabled) + { + this.mcProfiler.clearProfiling(); + } + + this.mcProfiler.profilingEnabled = true; + this.displayDebugInfo(i1); + } + else + { + this.mcProfiler.profilingEnabled = false; + this.prevFrameTime = System.nanoTime(); + } + + this.framebufferMc.unbindFramebuffer(); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + this.framebufferMc.framebufferRender(this.displayWidth, this.displayHeight); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + this.entityRenderer.renderStreamIndicator(this.timer.renderPartialTicks); + GlStateManager.popMatrix(); + this.mcProfiler.startSection("root"); + this.updateDisplay(); + Thread.yield(); + this.checkGLError("Post render"); + ++this.fpsCounter; + boolean flag = this.isSingleplayer() && this.currentScreen != null && this.currentScreen.doesGuiPauseGame() && !this.integratedServer.getPublic(); + + if (this.isGamePaused != flag) + { + if (this.isGamePaused) + { + this.renderPartialTicksPaused = this.timer.renderPartialTicks; + } + else + { + this.timer.renderPartialTicks = this.renderPartialTicksPaused; + } + + this.isGamePaused = flag; + } + + long k = System.nanoTime(); + this.frameTimer.addFrame(k - this.startNanoTime); + this.startNanoTime = k; + + while (getSystemTime() >= this.debugUpdateTime + 1000L) + { + debugFPS = this.fpsCounter; + this.debug = String.format("%d fps (%d chunk update%s) T: %s%s%s%s%s", debugFPS, RenderChunk.renderChunksUpdated, RenderChunk.renderChunksUpdated == 1 ? "" : "s", (float)this.gameSettings.limitFramerate == GameSettings.Options.FRAMERATE_LIMIT.getValueMax() ? "inf" : this.gameSettings.limitFramerate, this.gameSettings.enableVsync ? " vsync" : "", this.gameSettings.fancyGraphics ? "" : " fast", this.gameSettings.clouds == 0 ? "" : (this.gameSettings.clouds == 1 ? " fast-clouds" : " fancy-clouds"), OpenGlHelper.useVbo() ? " vbo" : ""); + RenderChunk.renderChunksUpdated = 0; + this.debugUpdateTime += 1000L; + this.fpsCounter = 0; + this.usageSnooper.addMemoryStatsToSnooper(); + + if (!this.usageSnooper.isSnooperRunning()) + { + this.usageSnooper.startSnooper(); + } + } + + if (this.isFramerateLimitBelowMax()) + { + this.mcProfiler.startSection("fpslimit_wait"); + Display.sync(this.getLimitFramerate()); + this.mcProfiler.endSection(); + } + + this.mcProfiler.endSection(); + } + + public void updateDisplay() + { + this.mcProfiler.startSection("display_update"); + Display.update(); + this.mcProfiler.endSection(); + this.checkWindowResize(); + } + + protected void checkWindowResize() + { + if (!this.fullscreen && Display.wasResized()) + { + int i = this.displayWidth; + int j = this.displayHeight; + this.displayWidth = Display.getWidth(); + this.displayHeight = Display.getHeight(); + + if (this.displayWidth != i || this.displayHeight != j) + { + if (this.displayWidth <= 0) + { + this.displayWidth = 1; + } + + if (this.displayHeight <= 0) + { + this.displayHeight = 1; + } + + this.resize(this.displayWidth, this.displayHeight); + } + } + } + + public int getLimitFramerate() + { + return this.world == null && this.currentScreen != null ? 30 : this.gameSettings.limitFramerate; + } + + public boolean isFramerateLimitBelowMax() + { + return (float)this.getLimitFramerate() < GameSettings.Options.FRAMERATE_LIMIT.getValueMax(); + } + + /** + * Attempts to free as much memory as possible, including leaving the world and running the garbage collector. + */ + public void freeMemory() + { + try + { + memoryReserve = new byte[0]; + this.renderGlobal.deleteAllDisplayLists(); + } + catch (Throwable var3) + { + ; + } + + try + { + System.gc(); + this.loadWorld((WorldClient)null); + } + catch (Throwable var2) + { + ; + } + + System.gc(); + } + + /** + * Update debugProfilerName in response to number keys in debug screen + */ + private void updateDebugProfilerName(int keyCount) + { + List list = this.mcProfiler.getProfilingData(this.debugProfilerName); + + if (!list.isEmpty()) + { + Profiler.Result profiler$result = list.remove(0); + + if (keyCount == 0) + { + if (!profiler$result.profilerName.isEmpty()) + { + int i = this.debugProfilerName.lastIndexOf(46); + + if (i >= 0) + { + this.debugProfilerName = this.debugProfilerName.substring(0, i); + } + } + } + else + { + --keyCount; + + if (keyCount < list.size() && !"unspecified".equals((list.get(keyCount)).profilerName)) + { + if (!this.debugProfilerName.isEmpty()) + { + this.debugProfilerName = this.debugProfilerName + "."; + } + + this.debugProfilerName = this.debugProfilerName + (list.get(keyCount)).profilerName; + } + } + } + } + + /** + * Parameter appears to be unused + */ + private void displayDebugInfo(long elapsedTicksTime) + { + if (this.mcProfiler.profilingEnabled) + { + List list = this.mcProfiler.getProfilingData(this.debugProfilerName); + Profiler.Result profiler$result = list.remove(0); + GlStateManager.clear(256); + GlStateManager.matrixMode(5889); + GlStateManager.enableColorMaterial(); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, (double)this.displayWidth, (double)this.displayHeight, 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + GlStateManager.glLineWidth(1.0F); + GlStateManager.disableTexture2D(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + int i = 160; + int j = this.displayWidth - 160 - 10; + int k = this.displayHeight - 320; + GlStateManager.enableBlend(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos((double)((float)j - 176.0F), (double)((float)k - 96.0F - 16.0F), 0.0D).color(200, 0, 0, 0).endVertex(); + bufferbuilder.pos((double)((float)j - 176.0F), (double)(k + 320), 0.0D).color(200, 0, 0, 0).endVertex(); + bufferbuilder.pos((double)((float)j + 176.0F), (double)(k + 320), 0.0D).color(200, 0, 0, 0).endVertex(); + bufferbuilder.pos((double)((float)j + 176.0F), (double)((float)k - 96.0F - 16.0F), 0.0D).color(200, 0, 0, 0).endVertex(); + tessellator.draw(); + GlStateManager.disableBlend(); + double d0 = 0.0D; + + for (int l = 0; l < list.size(); ++l) + { + Profiler.Result profiler$result1 = list.get(l); + int i1 = MathHelper.floor(profiler$result1.usePercentage / 4.0D) + 1; + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + int j1 = profiler$result1.getColor(); + int k1 = j1 >> 16 & 255; + int l1 = j1 >> 8 & 255; + int i2 = j1 & 255; + bufferbuilder.pos((double)j, (double)k, 0.0D).color(k1, l1, i2, 255).endVertex(); + + for (int j2 = i1; j2 >= 0; --j2) + { + float f = (float)((d0 + profiler$result1.usePercentage * (double)j2 / (double)i1) * (Math.PI * 2D) / 100.0D); + float f1 = MathHelper.sin(f) * 160.0F; + float f2 = MathHelper.cos(f) * 160.0F * 0.5F; + bufferbuilder.pos((double)((float)j + f1), (double)((float)k - f2), 0.0D).color(k1, l1, i2, 255).endVertex(); + } + + tessellator.draw(); + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + + for (int i3 = i1; i3 >= 0; --i3) + { + float f3 = (float)((d0 + profiler$result1.usePercentage * (double)i3 / (double)i1) * (Math.PI * 2D) / 100.0D); + float f4 = MathHelper.sin(f3) * 160.0F; + float f5 = MathHelper.cos(f3) * 160.0F * 0.5F; + bufferbuilder.pos((double)((float)j + f4), (double)((float)k - f5), 0.0D).color(k1 >> 1, l1 >> 1, i2 >> 1, 255).endVertex(); + bufferbuilder.pos((double)((float)j + f4), (double)((float)k - f5 + 10.0F), 0.0D).color(k1 >> 1, l1 >> 1, i2 >> 1, 255).endVertex(); + } + + tessellator.draw(); + d0 += profiler$result1.usePercentage; + } + + DecimalFormat decimalformat = new DecimalFormat("##0.00"); + GlStateManager.enableTexture2D(); + String s = ""; + + if (!"unspecified".equals(profiler$result.profilerName)) + { + s = s + "[0] "; + } + + if (profiler$result.profilerName.isEmpty()) + { + s = s + "ROOT "; + } + else + { + s = s + profiler$result.profilerName + ' '; + } + + int l2 = 16777215; + this.fontRenderer.drawStringWithShadow(s, (float)(j - 160), (float)(k - 80 - 16), 16777215); + s = decimalformat.format(profiler$result.totalUsePercentage) + "%"; + this.fontRenderer.drawStringWithShadow(s, (float)(j + 160 - this.fontRenderer.getStringWidth(s)), (float)(k - 80 - 16), 16777215); + + for (int k2 = 0; k2 < list.size(); ++k2) + { + Profiler.Result profiler$result2 = list.get(k2); + StringBuilder stringbuilder = new StringBuilder(); + + if ("unspecified".equals(profiler$result2.profilerName)) + { + stringbuilder.append("[?] "); + } + else + { + stringbuilder.append("[").append(k2 + 1).append("] "); + } + + String s1 = stringbuilder.append(profiler$result2.profilerName).toString(); + this.fontRenderer.drawStringWithShadow(s1, (float)(j - 160), (float)(k + 80 + k2 * 8 + 20), profiler$result2.getColor()); + s1 = decimalformat.format(profiler$result2.usePercentage) + "%"; + this.fontRenderer.drawStringWithShadow(s1, (float)(j + 160 - 50 - this.fontRenderer.getStringWidth(s1)), (float)(k + 80 + k2 * 8 + 20), profiler$result2.getColor()); + s1 = decimalformat.format(profiler$result2.totalUsePercentage) + "%"; + this.fontRenderer.drawStringWithShadow(s1, (float)(j + 160 - this.fontRenderer.getStringWidth(s1)), (float)(k + 80 + k2 * 8 + 20), profiler$result2.getColor()); + } + } + } + + /** + * Called when the window is closing. Sets 'running' to false which allows the game loop to exit cleanly. + */ + public void shutdown() + { + this.running = false; + } + + /** + * Will set the focus to ingame if the Minecraft window is the active with focus. Also clears any GUI screen + * currently displayed + */ + public void setIngameFocus() + { + if (Display.isActive()) + { + if (!this.inGameHasFocus) + { + if (!IS_RUNNING_ON_MAC) + { + KeyBinding.updateKeyBindState(); + } + + this.inGameHasFocus = true; + this.mouseHelper.grabMouseCursor(); + this.displayGuiScreen((GuiScreen)null); + this.leftClickCounter = 10000; + } + } + } + + /** + * Resets the player keystate, disables the ingame focus, and ungrabs the mouse cursor. + */ + public void setIngameNotInFocus() + { + if (this.inGameHasFocus) + { + this.inGameHasFocus = false; + this.mouseHelper.ungrabMouseCursor(); + } + } + + /** + * Displays the ingame menu + */ + public void displayInGameMenu() + { + if (this.currentScreen == null) + { + this.displayGuiScreen(new GuiIngameMenu()); + + if (this.isSingleplayer() && !this.integratedServer.getPublic()) + { + this.mcSoundHandler.pauseSounds(); + } + } + } + + private void sendClickBlockToController(boolean leftClick) + { + if (!leftClick) + { + this.leftClickCounter = 0; + } + + if (this.leftClickCounter <= 0 && !this.player.isHandActive()) + { + if (leftClick && this.objectMouseOver != null && this.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = this.objectMouseOver.getBlockPos(); + + if (!this.world.isAirBlock(blockpos) && this.playerController.onPlayerDamageBlock(blockpos, this.objectMouseOver.sideHit)) + { + this.effectRenderer.addBlockHitEffects(blockpos, this.objectMouseOver); + this.player.swingArm(EnumHand.MAIN_HAND); + } + } + else + { + this.playerController.resetBlockRemoving(); + } + } + } + + private void clickMouse() + { + if (this.leftClickCounter <= 0) + { + if (this.objectMouseOver == null) + { + LOGGER.error("Null returned as 'hitResult', this shouldn't happen!"); + + if (this.playerController.isNotCreative()) + { + this.leftClickCounter = 10; + } + } + else if (!this.player.isRowingBoat()) + { + switch (this.objectMouseOver.typeOfHit) + { + case ENTITY: + this.playerController.attackEntity(this.player, this.objectMouseOver.entityHit); + break; + case BLOCK: + BlockPos blockpos = this.objectMouseOver.getBlockPos(); + + if (!this.world.isAirBlock(blockpos)) + { + this.playerController.clickBlock(blockpos, this.objectMouseOver.sideHit); + break; + } + + case MISS: + + if (this.playerController.isNotCreative()) + { + this.leftClickCounter = 10; + } + + this.player.resetCooldown(); + net.minecraftforge.common.ForgeHooks.onEmptyLeftClick(this.player); + } + + this.player.swingArm(EnumHand.MAIN_HAND); + } + } + } + + /** + * Called when user clicked he's mouse right button (place) + */ + @SuppressWarnings("incomplete-switch") + private void rightClickMouse() + { + if (!this.playerController.getIsHittingBlock()) + { + this.rightClickDelayTimer = 4; + + if (!this.player.isRowingBoat()) + { + if (this.objectMouseOver == null) + { + LOGGER.warn("Null returned as 'hitResult', this shouldn't happen!"); + } + + for (EnumHand enumhand : EnumHand.values()) + { + ItemStack itemstack = this.player.getHeldItem(enumhand); + + if (this.objectMouseOver != null) + { + switch (this.objectMouseOver.typeOfHit) + { + case ENTITY: + + if (this.playerController.interactWithEntity(this.player, this.objectMouseOver.entityHit, this.objectMouseOver, enumhand) == EnumActionResult.SUCCESS) + { + return; + } + + if (this.playerController.interactWithEntity(this.player, this.objectMouseOver.entityHit, enumhand) == EnumActionResult.SUCCESS) + { + return; + } + + break; + case BLOCK: + BlockPos blockpos = this.objectMouseOver.getBlockPos(); + + if (this.world.getBlockState(blockpos).getMaterial() != Material.AIR) + { + int i = itemstack.getCount(); + EnumActionResult enumactionresult = this.playerController.processRightClickBlock(this.player, this.world, blockpos, this.objectMouseOver.sideHit, this.objectMouseOver.hitVec, enumhand); + + if (enumactionresult == EnumActionResult.SUCCESS) + { + this.player.swingArm(enumhand); + + if (!itemstack.isEmpty() && (itemstack.getCount() != i || this.playerController.isInCreativeMode())) + { + this.entityRenderer.itemRenderer.resetEquippedProgress(enumhand); + } + + return; + } + } + } + } + + if (itemstack.isEmpty() && (this.objectMouseOver == null || this.objectMouseOver.typeOfHit == RayTraceResult.Type.MISS)) net.minecraftforge.common.ForgeHooks.onEmptyClick(this.player, enumhand); + if (!itemstack.isEmpty() && this.playerController.processRightClick(this.player, this.world, enumhand) == EnumActionResult.SUCCESS) + { + this.entityRenderer.itemRenderer.resetEquippedProgress(enumhand); + return; + } + } + } + } + } + + /** + * Toggles fullscreen mode. + */ + public void toggleFullscreen() + { + try + { + this.fullscreen = !this.fullscreen; + this.gameSettings.fullScreen = this.fullscreen; + + if (this.fullscreen) + { + this.updateDisplayMode(); + this.displayWidth = Display.getDisplayMode().getWidth(); + this.displayHeight = Display.getDisplayMode().getHeight(); + + if (this.displayWidth <= 0) + { + this.displayWidth = 1; + } + + if (this.displayHeight <= 0) + { + this.displayHeight = 1; + } + } + else + { + Display.setDisplayMode(new DisplayMode(this.tempDisplayWidth, this.tempDisplayHeight)); + this.displayWidth = this.tempDisplayWidth; + this.displayHeight = this.tempDisplayHeight; + + if (this.displayWidth <= 0) + { + this.displayWidth = 1; + } + + if (this.displayHeight <= 0) + { + this.displayHeight = 1; + } + } + + if (this.currentScreen != null) + { + this.resize(this.displayWidth, this.displayHeight); + } + else + { + this.updateFramebufferSize(); + } + + Display.setFullscreen(this.fullscreen); + if (!this.fullscreen) //Forge: Fix MC-68754, Screen is not resizeable after exiting fullscreen due to LWJGL bug https://github.com/LWJGL/lwjgl/issues/142 which is fixed, but not in the version MC ships + { + Display.setResizable(false); + Display.setResizable(true); + } + Display.setVSyncEnabled(this.gameSettings.enableVsync); + this.updateDisplay(); + } + catch (Exception exception) + { + LOGGER.error("Couldn't toggle fullscreen", (Throwable)exception); + } + } + + /** + * Called to resize the current screen. + */ + public void resize(int width, int height) + { + this.displayWidth = Math.max(1, width); + this.displayHeight = Math.max(1, height); + + if (this.currentScreen != null) + { + ScaledResolution scaledresolution = new ScaledResolution(this); + this.currentScreen.onResize(this, scaledresolution.getScaledWidth(), scaledresolution.getScaledHeight()); + } + + this.loadingScreen = new LoadingScreenRenderer(this); + this.updateFramebufferSize(); + } + + private void updateFramebufferSize() + { + this.framebufferMc.createBindFramebuffer(this.displayWidth, this.displayHeight); + + if (this.entityRenderer != null) + { + this.entityRenderer.updateShaderGroupSize(this.displayWidth, this.displayHeight); + } + } + + /** + * Return the musicTicker's instance + */ + public MusicTicker getMusicTicker() + { + return this.mcMusicTicker; + } + + /** + * Runs the current tick. + */ + public void runTick() throws IOException + { + if (this.rightClickDelayTimer > 0) + { + --this.rightClickDelayTimer; + } + + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreClientTick(); + + this.mcProfiler.startSection("gui"); + + if (!this.isGamePaused) + { + this.ingameGUI.updateTick(); + } + + this.mcProfiler.endSection(); + this.entityRenderer.getMouseOver(1.0F); + this.tutorial.onMouseHover(this.world, this.objectMouseOver); + this.mcProfiler.startSection("gameMode"); + + if (!this.isGamePaused && this.world != null) + { + this.playerController.updateController(); + } + + this.mcProfiler.endStartSection("textures"); + + if (this.world != null) + { + this.renderEngine.tick(); + } + + if (this.currentScreen == null && this.player != null) + { + if (this.player.getHealth() <= 0.0F && !(this.currentScreen instanceof GuiGameOver)) + { + this.displayGuiScreen((GuiScreen)null); + } + else if (this.player.isPlayerSleeping() && this.world != null) + { + this.displayGuiScreen(new GuiSleepMP()); + } + } + else if (this.currentScreen != null && this.currentScreen instanceof GuiSleepMP && !this.player.isPlayerSleeping()) + { + this.displayGuiScreen((GuiScreen)null); + } + + if (this.currentScreen != null) + { + this.leftClickCounter = 10000; + } + + if (this.currentScreen != null) + { + try + { + this.currentScreen.handleInput(); + } + catch (Throwable throwable1) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable1, "Updating screen events"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Affected screen"); + crashreportcategory.addDetail("Screen name", new ICrashReportDetail() + { + public String call() throws Exception + { + return Minecraft.this.currentScreen.getClass().getCanonicalName(); + } + }); + throw new ReportedException(crashreport); + } + + if (this.currentScreen != null) + { + try + { + this.currentScreen.updateScreen(); + } + catch (Throwable throwable) + { + CrashReport crashreport1 = CrashReport.makeCrashReport(throwable, "Ticking screen"); + CrashReportCategory crashreportcategory1 = crashreport1.makeCategory("Affected screen"); + crashreportcategory1.addDetail("Screen name", new ICrashReportDetail() + { + public String call() throws Exception + { + return Minecraft.this.currentScreen.getClass().getCanonicalName(); + } + }); + throw new ReportedException(crashreport1); + } + } + } + + if (this.currentScreen == null || this.currentScreen.allowUserInput) + { + this.mcProfiler.endStartSection("mouse"); + this.runTickMouse(); + + if (this.leftClickCounter > 0) + { + --this.leftClickCounter; + } + + this.mcProfiler.endStartSection("keyboard"); + this.runTickKeyboard(); + } + + if (this.world != null) + { + if (this.player != null) + { + ++this.joinPlayerCounter; + + if (this.joinPlayerCounter == 30) + { + this.joinPlayerCounter = 0; + this.world.joinEntityInSurroundings(this.player); + } + } + + this.mcProfiler.endStartSection("gameRenderer"); + + if (!this.isGamePaused) + { + this.entityRenderer.updateRenderer(); + } + + this.mcProfiler.endStartSection("levelRenderer"); + + if (!this.isGamePaused) + { + this.renderGlobal.updateClouds(); + } + + this.mcProfiler.endStartSection("level"); + + if (!this.isGamePaused) + { + if (this.world.getLastLightningBolt() > 0) + { + this.world.setLastLightningBolt(this.world.getLastLightningBolt() - 1); + } + + this.world.updateEntities(); + } + } + else if (this.entityRenderer.isShaderActive()) + { + this.entityRenderer.stopUseShader(); + } + + if (!this.isGamePaused) + { + this.mcMusicTicker.update(); + this.mcSoundHandler.update(); + } + + if (this.world != null) + { + if (!this.isGamePaused) + { + this.world.setAllowedSpawnTypes(this.world.getDifficulty() != EnumDifficulty.PEACEFUL, true); + this.tutorial.update(); + + try + { + this.world.tick(); + } + catch (Throwable throwable2) + { + CrashReport crashreport2 = CrashReport.makeCrashReport(throwable2, "Exception in world tick"); + + if (this.world == null) + { + CrashReportCategory crashreportcategory2 = crashreport2.makeCategory("Affected level"); + crashreportcategory2.addCrashSection("Problem", "Level is null!"); + } + else + { + this.world.addWorldInfoToCrashReport(crashreport2); + } + + throw new ReportedException(crashreport2); + } + } + + this.mcProfiler.endStartSection("animateTick"); + + if (!this.isGamePaused && this.world != null) + { + this.world.doVoidFogParticles(MathHelper.floor(this.player.posX), MathHelper.floor(this.player.posY), MathHelper.floor(this.player.posZ)); + } + + this.mcProfiler.endStartSection("particles"); + + if (!this.isGamePaused) + { + this.effectRenderer.updateEffects(); + } + } + else if (this.myNetworkManager != null) + { + this.mcProfiler.endStartSection("pendingConnection"); + this.myNetworkManager.processReceivedPackets(); + } + + this.mcProfiler.endSection(); + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostClientTick(); + this.systemTime = getSystemTime(); + } + + private void runTickKeyboard() throws IOException + { + while (Keyboard.next()) + { + int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() + 256 : Keyboard.getEventKey(); + + if (this.debugCrashKeyPressTime > 0L) + { + if (getSystemTime() - this.debugCrashKeyPressTime >= 6000L) + { + throw new ReportedException(new CrashReport("Manually triggered debug crash", new Throwable())); + } + + if (!Keyboard.isKeyDown(46) || !Keyboard.isKeyDown(61)) + { + this.debugCrashKeyPressTime = -1L; + } + } + else if (Keyboard.isKeyDown(46) && Keyboard.isKeyDown(61)) + { + this.actionKeyF3 = true; + this.debugCrashKeyPressTime = getSystemTime(); + } + + this.dispatchKeypresses(); + + if (this.currentScreen != null) + { + this.currentScreen.handleKeyboardInput(); + } + + boolean flag = Keyboard.getEventKeyState(); + + if (flag) + { + if (i == 62 && this.entityRenderer != null) + { + this.entityRenderer.switchUseShader(); + } + + boolean flag1 = false; + + if (this.currentScreen == null) + { + if (i == 1) + { + this.displayInGameMenu(); + } + + flag1 = Keyboard.isKeyDown(61) && this.processKeyF3(i); + this.actionKeyF3 |= flag1; + + if (i == 59) + { + this.gameSettings.hideGUI = !this.gameSettings.hideGUI; + } + } + + if (flag1) + { + KeyBinding.setKeyBindState(i, false); + } + else + { + KeyBinding.setKeyBindState(i, true); + KeyBinding.onTick(i); + } + + if (this.gameSettings.showDebugProfilerChart) + { + if (i == 11) + { + this.updateDebugProfilerName(0); + } + + for (int j = 0; j < 9; ++j) + { + if (i == 2 + j) + { + this.updateDebugProfilerName(j + 1); + } + } + } + } + else + { + KeyBinding.setKeyBindState(i, false); + + if (i == 61) + { + if (this.actionKeyF3) + { + this.actionKeyF3 = false; + } + else + { + this.gameSettings.showDebugInfo = !this.gameSettings.showDebugInfo; + this.gameSettings.showDebugProfilerChart = this.gameSettings.showDebugInfo && GuiScreen.isShiftKeyDown(); + this.gameSettings.showLagometer = this.gameSettings.showDebugInfo && GuiScreen.isAltKeyDown(); + } + } + } + net.minecraftforge.fml.common.FMLCommonHandler.instance().fireKeyInput(); + } + + this.processKeyBinds(); + } + + private boolean processKeyF3(int auxKey) + { + if (auxKey == 30) + { + this.renderGlobal.loadRenderers(); + this.debugFeedbackTranslated("debug.reload_chunks.message"); + return true; + } + else if (auxKey == 48) + { + boolean flag1 = !this.renderManager.isDebugBoundingBox(); + this.renderManager.setDebugBoundingBox(flag1); + this.debugFeedbackTranslated(flag1 ? "debug.show_hitboxes.on" : "debug.show_hitboxes.off"); + return true; + } + else if (auxKey == 32) + { + if (this.ingameGUI != null) + { + this.ingameGUI.getChatGUI().clearChatMessages(false); + } + + return true; + } + else if (auxKey == 33) + { + this.gameSettings.setOptionValue(GameSettings.Options.RENDER_DISTANCE, GuiScreen.isShiftKeyDown() ? -1 : 1); + this.debugFeedbackTranslated("debug.cycle_renderdistance.message", this.gameSettings.renderDistanceChunks); + return true; + } + else if (auxKey == 34) + { + boolean flag = this.debugRenderer.toggleChunkBorders(); + this.debugFeedbackTranslated(flag ? "debug.chunk_boundaries.on" : "debug.chunk_boundaries.off"); + return true; + } + else if (auxKey == 35) + { + this.gameSettings.advancedItemTooltips = !this.gameSettings.advancedItemTooltips; + this.debugFeedbackTranslated(this.gameSettings.advancedItemTooltips ? "debug.advanced_tooltips.on" : "debug.advanced_tooltips.off"); + this.gameSettings.saveOptions(); + return true; + } + else if (auxKey == 49) + { + if (!this.player.canUseCommand(2, "")) + { + this.debugFeedbackTranslated("debug.creative_spectator.error"); + } + else if (this.player.isCreative()) + { + this.player.sendChatMessage("/gamemode spectator"); + } + else if (this.player.isSpectator()) + { + this.player.sendChatMessage("/gamemode creative"); + } + + return true; + } + else if (auxKey == 25) + { + this.gameSettings.pauseOnLostFocus = !this.gameSettings.pauseOnLostFocus; + this.gameSettings.saveOptions(); + this.debugFeedbackTranslated(this.gameSettings.pauseOnLostFocus ? "debug.pause_focus.on" : "debug.pause_focus.off"); + return true; + } + else if (auxKey == 16) + { + this.debugFeedbackTranslated("debug.help.message"); + GuiNewChat guinewchat = this.ingameGUI.getChatGUI(); + guinewchat.printChatMessage(new TextComponentTranslation("debug.reload_chunks.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.show_hitboxes.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.clear_chat.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.cycle_renderdistance.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.chunk_boundaries.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.advanced_tooltips.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.creative_spectator.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.pause_focus.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.help.help", new Object[0])); + guinewchat.printChatMessage(new TextComponentTranslation("debug.reload_resourcepacks.help", new Object[0])); + return true; + } + else if (auxKey == 20) + { + this.debugFeedbackTranslated("debug.reload_resourcepacks.message"); + this.refreshResources(); + return true; + } + else + { + return false; + } + } + + private void processKeyBinds() + { + for (; this.gameSettings.keyBindTogglePerspective.isPressed(); this.renderGlobal.setDisplayListEntitiesDirty()) + { + ++this.gameSettings.thirdPersonView; + + if (this.gameSettings.thirdPersonView > 2) + { + this.gameSettings.thirdPersonView = 0; + } + + if (this.gameSettings.thirdPersonView == 0) + { + this.entityRenderer.loadEntityShader(this.getRenderViewEntity()); + } + else if (this.gameSettings.thirdPersonView == 1) + { + this.entityRenderer.loadEntityShader((Entity)null); + } + } + + while (this.gameSettings.keyBindSmoothCamera.isPressed()) + { + this.gameSettings.smoothCamera = !this.gameSettings.smoothCamera; + } + + for (int i = 0; i < 9; ++i) + { + boolean flag = this.gameSettings.keyBindSaveToolbar.isKeyDown(); + boolean flag1 = this.gameSettings.keyBindLoadToolbar.isKeyDown(); + + if (this.gameSettings.keyBindsHotbar[i].isPressed()) + { + if (this.player.isSpectator()) + { + this.ingameGUI.getSpectatorGui().onHotbarSelected(i); + } + else if (!this.player.isCreative() || this.currentScreen != null || !flag1 && !flag) + { + this.player.inventory.currentItem = i; + } + else + { + GuiContainerCreative.handleHotbarSnapshots(this, i, flag1, flag); + } + } + } + + while (this.gameSettings.keyBindInventory.isPressed()) + { + if (this.playerController.isRidingHorse()) + { + this.player.sendHorseInventory(); + } + else + { + this.tutorial.openInventory(); + this.displayGuiScreen(new GuiInventory(this.player)); + } + } + + while (this.gameSettings.keyBindAdvancements.isPressed()) + { + this.displayGuiScreen(new GuiScreenAdvancements(this.player.connection.getAdvancementManager())); + } + + while (this.gameSettings.keyBindSwapHands.isPressed()) + { + if (!this.player.isSpectator()) + { + this.getConnection().sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.SWAP_HELD_ITEMS, BlockPos.ORIGIN, EnumFacing.DOWN)); + } + } + + while (this.gameSettings.keyBindDrop.isPressed()) + { + if (!this.player.isSpectator()) + { + this.player.dropItem(GuiScreen.isCtrlKeyDown()); + } + } + + boolean flag2 = this.gameSettings.chatVisibility != EntityPlayer.EnumChatVisibility.HIDDEN; + + if (flag2) + { + while (this.gameSettings.keyBindChat.isPressed()) + { + this.displayGuiScreen(new GuiChat()); + } + + if (this.currentScreen == null && this.gameSettings.keyBindCommand.isPressed()) + { + this.displayGuiScreen(new GuiChat("/")); + } + } + + if (this.player.isHandActive()) + { + if (!this.gameSettings.keyBindUseItem.isKeyDown()) + { + this.playerController.onStoppedUsingItem(this.player); + } + + label109: + + while (true) + { + if (!this.gameSettings.keyBindAttack.isPressed()) + { + while (this.gameSettings.keyBindUseItem.isPressed()) + { + ; + } + + while (true) + { + if (this.gameSettings.keyBindPickBlock.isPressed()) + { + continue; + } + + break label109; + } + } + } + } + else + { + while (this.gameSettings.keyBindAttack.isPressed()) + { + this.clickMouse(); + } + + while (this.gameSettings.keyBindUseItem.isPressed()) + { + this.rightClickMouse(); + } + + while (this.gameSettings.keyBindPickBlock.isPressed()) + { + this.middleClickMouse(); + } + } + + if (this.gameSettings.keyBindUseItem.isKeyDown() && this.rightClickDelayTimer == 0 && !this.player.isHandActive()) + { + this.rightClickMouse(); + } + + this.sendClickBlockToController(this.currentScreen == null && this.gameSettings.keyBindAttack.isKeyDown() && this.inGameHasFocus); + } + + private void runTickMouse() throws IOException + { + while (Mouse.next()) + { + if (net.minecraftforge.client.ForgeHooksClient.postMouseEvent()) continue; + + int i = Mouse.getEventButton(); + KeyBinding.setKeyBindState(i - 100, Mouse.getEventButtonState()); + + if (Mouse.getEventButtonState()) + { + if (this.player.isSpectator() && i == 2) + { + this.ingameGUI.getSpectatorGui().onMiddleClick(); + } + else + { + KeyBinding.onTick(i - 100); + } + } + + long j = getSystemTime() - this.systemTime; + + if (j <= 200L) + { + int k = Mouse.getEventDWheel(); + + if (k != 0) + { + if (this.player.isSpectator()) + { + k = k < 0 ? -1 : 1; + + if (this.ingameGUI.getSpectatorGui().isMenuActive()) + { + this.ingameGUI.getSpectatorGui().onMouseScroll(-k); + } + else + { + float f = MathHelper.clamp(this.player.capabilities.getFlySpeed() + (float)k * 0.005F, 0.0F, 0.2F); + this.player.capabilities.setFlySpeed(f); + } + } + else + { + this.player.inventory.changeCurrentItem(k); + } + } + + if (this.currentScreen == null) + { + if (!this.inGameHasFocus && Mouse.getEventButtonState()) + { + this.setIngameFocus(); + } + } + else if (this.currentScreen != null) + { + this.currentScreen.handleMouseInput(); + } + } + net.minecraftforge.fml.common.FMLCommonHandler.instance().fireMouseInput(); + } + } + + private void debugFeedbackTranslated(String untranslatedTemplate, Object... objs) + { + this.ingameGUI.getChatGUI().printChatMessage((new TextComponentString("")).appendSibling((new TextComponentTranslation("debug.prefix", new Object[0])).setStyle((new Style()).setColor(TextFormatting.YELLOW).setBold(Boolean.valueOf(true)))).appendText(" ").appendSibling(new TextComponentTranslation(untranslatedTemplate, objs))); + } + + /** + * Arguments: World foldername, World ingame name, WorldSettings + */ + public void launchIntegratedServer(String folderName, String worldName, @Nullable WorldSettings worldSettingsIn) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().startIntegratedServer(folderName, worldName, worldSettingsIn); + this.loadWorld((WorldClient)null); + System.gc(); + ISaveHandler isavehandler = this.saveLoader.getSaveLoader(folderName, false); + WorldInfo worldinfo = isavehandler.loadWorldInfo(); + + if (worldinfo == null && worldSettingsIn != null) + { + worldinfo = new WorldInfo(worldSettingsIn, folderName); + isavehandler.saveWorldInfo(worldinfo); + } + + if (worldSettingsIn == null) + { + worldSettingsIn = new WorldSettings(worldinfo); + } + + try + { + YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(this.proxy, UUID.randomUUID().toString()); + MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); + GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); + PlayerProfileCache playerprofilecache = new PlayerProfileCache(gameprofilerepository, new File(this.mcDataDir, MinecraftServer.USER_CACHE_FILE.getName())); + TileEntitySkull.setProfileCache(playerprofilecache); + TileEntitySkull.setSessionService(minecraftsessionservice); + PlayerProfileCache.setOnlineMode(false); + this.integratedServer = new IntegratedServer(this, folderName, worldName, worldSettingsIn, yggdrasilauthenticationservice, minecraftsessionservice, gameprofilerepository, playerprofilecache); + this.integratedServer.startServerThread(); + this.integratedServerIsRunning = true; + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Starting integrated server"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Starting integrated server"); + crashreportcategory.addCrashSection("Level ID", folderName); + crashreportcategory.addCrashSection("Level Name", worldName); + throw new ReportedException(crashreport); + } + + this.loadingScreen.displaySavingString(I18n.format("menu.loadingLevel")); + + while (!this.integratedServer.serverIsInRunLoop() && !this.integratedServer.isServerStopped()) + { + if (!net.minecraftforge.fml.common.StartupQuery.check()) + { + loadWorld(null); + displayGuiScreen(null); + return; + } + String s = this.integratedServer.getUserMessage(); + + if (s != null) + { + this.loadingScreen.displayLoadingString(I18n.format(s)); + } + else + { + this.loadingScreen.displayLoadingString(""); + } + + try + { + Thread.sleep(200L); + } + catch (InterruptedException var10) + { + ; + } + } + + this.displayGuiScreen(new GuiScreenWorking()); + SocketAddress socketaddress = this.integratedServer.getNetworkSystem().addLocalEndpoint(); + NetworkManager networkmanager = NetworkManager.provideLocalClient(socketaddress); + networkmanager.setNetHandler(new NetHandlerLoginClient(networkmanager, this, (GuiScreen)null)); + networkmanager.sendPacket(new C00Handshake(socketaddress.toString(), 0, EnumConnectionState.LOGIN, true)); + com.mojang.authlib.GameProfile gameProfile = this.getSession().getProfile(); + if (!this.getSession().hasCachedProperties()) + { + gameProfile = sessionService.fillProfileProperties(gameProfile, true); //Forge: Fill profile properties upon game load. Fixes MC-52974. + this.getSession().setProperties(gameProfile.getProperties()); + } + networkmanager.sendPacket(new CPacketLoginStart(gameProfile)); + this.myNetworkManager = networkmanager; + } + + /** + * unloads the current world first + */ + public void loadWorld(@Nullable WorldClient worldClientIn) + { + this.loadWorld(worldClientIn, ""); + } + + /** + * par2Str is displayed on the loading screen to the user unloads the current world first + */ + public void loadWorld(@Nullable WorldClient worldClientIn, String loadingMessage) + { + if (world != null) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(world)); + + if (worldClientIn == null) + { + NetHandlerPlayClient nethandlerplayclient = this.getConnection(); + + if (nethandlerplayclient != null) + { + nethandlerplayclient.cleanup(); + } + + if (this.integratedServer != null && this.integratedServer.isAnvilFileSet()) + { + this.integratedServer.initiateShutdown(); + if (loadingScreen != null && this.running) + { + this.loadingScreen.displayLoadingString(I18n.format("forge.client.shutdown.internal")); + } + while (!integratedServer.isServerStopped()) + { + try + { + Thread.sleep(10); + } + catch (InterruptedException ie) {} + } + } + + this.integratedServer = null; + this.entityRenderer.resetData(); + this.playerController = null; + NarratorChatListener.INSTANCE.clear(); + } + + this.renderViewEntity = null; + this.myNetworkManager = null; + + if (this.loadingScreen != null) + { + this.loadingScreen.resetProgressAndMessage(loadingMessage); + this.loadingScreen.displayLoadingString(""); + } + + if (worldClientIn == null && this.world != null) + { + this.mcResourcePackRepository.clearResourcePack(); + this.ingameGUI.resetPlayersOverlayFooterHeader(); + this.setServerData((ServerData)null); + this.integratedServerIsRunning = false; + net.minecraftforge.fml.client.FMLClientHandler.instance().handleClientWorldClosing(this.world); + } + + this.mcSoundHandler.stopSounds(); + this.world = worldClientIn; + + if (this.renderGlobal != null) + { + this.renderGlobal.setWorldAndLoadRenderers(worldClientIn); + } + + if (this.effectRenderer != null) + { + this.effectRenderer.clearEffects(worldClientIn); + } + + TileEntityRendererDispatcher.instance.setWorld(worldClientIn); + net.minecraftforge.client.MinecraftForgeClient.clearRenderCache(); + + if (worldClientIn != null) + { + if (!this.integratedServerIsRunning) + { + AuthenticationService authenticationservice = new YggdrasilAuthenticationService(this.proxy, UUID.randomUUID().toString()); + MinecraftSessionService minecraftsessionservice = authenticationservice.createMinecraftSessionService(); + GameProfileRepository gameprofilerepository = authenticationservice.createProfileRepository(); + PlayerProfileCache playerprofilecache = new PlayerProfileCache(gameprofilerepository, new File(this.mcDataDir, MinecraftServer.USER_CACHE_FILE.getName())); + TileEntitySkull.setProfileCache(playerprofilecache); + TileEntitySkull.setSessionService(minecraftsessionservice); + PlayerProfileCache.setOnlineMode(false); + } + + if (this.player == null) + { + this.player = this.playerController.createPlayer(worldClientIn, new StatisticsManager(), new RecipeBookClient()); + this.playerController.flipPlayer(this.player); + } + + this.player.preparePlayerToSpawn(); + worldClientIn.spawnEntity(this.player); + this.player.movementInput = new MovementInputFromOptions(this.gameSettings); + this.playerController.setPlayerCapabilities(this.player); + this.renderViewEntity = this.player; + } + else + { + this.saveLoader.flushCache(); + this.player = null; + } + + System.gc(); + this.systemTime = 0L; + } + + public void setDimensionAndSpawnPlayer(int dimension) + { + this.world.setInitialSpawnLocation(); + this.world.removeAllEntities(); + int i = 0; + String s = null; + + if (this.player != null) + { + i = this.player.getEntityId(); + this.world.removeEntity(this.player); + s = this.player.getServerBrand(); + } + + this.renderViewEntity = null; + EntityPlayerSP entityplayersp = this.player; + this.player = this.playerController.createPlayer(this.world, this.player == null ? new StatisticsManager() : this.player.getStatFileWriter(), this.player == null ? new RecipeBook() : this.player.getRecipeBook()); + this.player.getDataManager().setEntryValues(entityplayersp.getDataManager().getAll()); + this.player.updateSyncFields(entityplayersp); // Forge: fix MC-10657 + this.player.dimension = dimension; + this.renderViewEntity = this.player; + this.player.preparePlayerToSpawn(); + this.player.setServerBrand(s); + this.world.spawnEntity(this.player); + this.playerController.flipPlayer(this.player); + this.player.movementInput = new MovementInputFromOptions(this.gameSettings); + this.player.setEntityId(i); + this.playerController.setPlayerCapabilities(this.player); + this.player.setReducedDebug(entityplayersp.hasReducedDebug()); + + if (this.currentScreen instanceof GuiGameOver) + { + this.displayGuiScreen((GuiScreen)null); + } + } + + /** + * Gets whether this is a demo or not. + */ + public final boolean isDemo() + { + return this.isDemo; + } + + @Nullable + public NetHandlerPlayClient getConnection() + { + return this.player == null ? null : this.player.connection; + } + + public static boolean isGuiEnabled() + { + return instance == null || !instance.gameSettings.hideGUI; + } + + public static boolean isFancyGraphicsEnabled() + { + return instance != null && instance.gameSettings.fancyGraphics; + } + + /** + * Returns if ambient occlusion is enabled + */ + public static boolean isAmbientOcclusionEnabled() + { + return instance != null && instance.gameSettings.ambientOcclusion != 0; + } + + /** + * Called when user clicked he's mouse middle button (pick block) + */ + private void middleClickMouse() + { + if (this.objectMouseOver != null && this.objectMouseOver.typeOfHit != RayTraceResult.Type.MISS) + { + net.minecraftforge.common.ForgeHooks.onPickBlock(this.objectMouseOver, this.player, this.world); + // We delete this code wholly instead of commenting it out, to make sure we detect changes in it between MC versions + } + } + + public ItemStack storeTEInStack(ItemStack stack, TileEntity te) + { + NBTTagCompound nbttagcompound = te.writeToNBT(new NBTTagCompound()); + + if (stack.getItem() == Items.SKULL && nbttagcompound.hasKey("Owner")) + { + NBTTagCompound nbttagcompound2 = nbttagcompound.getCompoundTag("Owner"); + NBTTagCompound nbttagcompound3 = new NBTTagCompound(); + nbttagcompound3.setTag("SkullOwner", nbttagcompound2); + stack.setTagCompound(nbttagcompound3); + return stack; + } + else + { + stack.setTagInfo("BlockEntityTag", nbttagcompound); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + NBTTagList nbttaglist = new NBTTagList(); + nbttaglist.appendTag(new NBTTagString("(+NBT)")); + nbttagcompound1.setTag("Lore", nbttaglist); + stack.setTagInfo("display", nbttagcompound1); + return stack; + } + } + + /** + * adds core server Info (GL version , Texture pack, isModded, type), and the worldInfo to the crash report + */ + public CrashReport addGraphicsAndWorldToCrashReport(CrashReport theCrash) + { + theCrash.getCategory().addDetail("Launched Version", new ICrashReportDetail() + { + public String call() throws Exception + { + return Minecraft.this.launchedVersion; + } + }); + theCrash.getCategory().addDetail("LWJGL", new ICrashReportDetail() + { + public String call() throws Exception + { + return Sys.getVersion(); + } + }); + theCrash.getCategory().addDetail("OpenGL", new ICrashReportDetail() + { + public String call() + { + return GlStateManager.glGetString(7937) + " GL version " + GlStateManager.glGetString(7938) + ", " + GlStateManager.glGetString(7936); + } + }); + theCrash.getCategory().addDetail("GL Caps", new ICrashReportDetail() + { + public String call() + { + return OpenGlHelper.getLogText(); + } + }); + theCrash.getCategory().addDetail("Using VBOs", new ICrashReportDetail() + { + public String call() + { + return Minecraft.this.gameSettings.useVbo ? "Yes" : "No"; + } + }); + theCrash.getCategory().addDetail("Is Modded", new ICrashReportDetail() + { + public String call() throws Exception + { + String s = ClientBrandRetriever.getClientModName(); + + if (!"vanilla".equals(s)) + { + return "Definitely; Client brand changed to '" + s + "'"; + } + else + { + return Minecraft.class.getSigners() == null ? "Very likely; Jar signature invalidated" : "Probably not. Jar signature remains and client brand is untouched."; + } + } + }); + theCrash.getCategory().addDetail("Type", new ICrashReportDetail() + { + public String call() throws Exception + { + return "Client (map_client.txt)"; + } + }); + theCrash.getCategory().addDetail("Resource Packs", new ICrashReportDetail() + { + public String call() throws Exception + { + StringBuilder stringbuilder = new StringBuilder(); + + for (String s : Minecraft.this.gameSettings.resourcePacks) + { + if (stringbuilder.length() > 0) + { + stringbuilder.append(", "); + } + + stringbuilder.append(s); + + if (Minecraft.this.gameSettings.incompatibleResourcePacks.contains(s)) + { + stringbuilder.append(" (incompatible)"); + } + } + + return stringbuilder.toString(); + } + }); + theCrash.getCategory().addDetail("Current Language", new ICrashReportDetail() + { + public String call() throws Exception + { + return Minecraft.this.mcLanguageManager.getCurrentLanguage().toString(); + } + }); + theCrash.getCategory().addDetail("Profiler Position", new ICrashReportDetail() + { + public String call() throws Exception + { + return Minecraft.this.mcProfiler.profilingEnabled ? Minecraft.this.mcProfiler.getNameOfLastSection() : "N/A (disabled)"; + } + }); + theCrash.getCategory().addDetail("CPU", new ICrashReportDetail() + { + public String call() throws Exception + { + return OpenGlHelper.getCpu(); + } + }); + + if (this.world != null) + { + this.world.addWorldInfoToCrashReport(theCrash); + } + + return theCrash; + } + + /** + * Return the singleton Minecraft instance for the game + */ + public static Minecraft getMinecraft() + { + return instance; + } + + @Deprecated // Forge: Use selective scheduleResourceRefresh method in FMLClientHandler + public ListenableFuture scheduleResourcesRefresh() + { + return this.addScheduledTask(new Runnable() + { + public void run() + { + Minecraft.this.refreshResources(); + } + }); + } + + public void addServerStatsToSnooper(Snooper playerSnooper) + { + playerSnooper.addClientStat("fps", Integer.valueOf(debugFPS)); + playerSnooper.addClientStat("vsync_enabled", Boolean.valueOf(this.gameSettings.enableVsync)); + playerSnooper.addClientStat("display_frequency", Integer.valueOf(Display.getDisplayMode().getFrequency())); + playerSnooper.addClientStat("display_type", this.fullscreen ? "fullscreen" : "windowed"); + playerSnooper.addClientStat("run_time", Long.valueOf((MinecraftServer.getCurrentTimeMillis() - playerSnooper.getMinecraftStartTimeMillis()) / 60L * 1000L)); + playerSnooper.addClientStat("current_action", this.getCurrentAction()); + playerSnooper.addClientStat("language", this.gameSettings.language == null ? "en_us" : this.gameSettings.language); + String s = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN ? "little" : "big"; + playerSnooper.addClientStat("endianness", s); + playerSnooper.addClientStat("subtitles", Boolean.valueOf(this.gameSettings.showSubtitles)); + playerSnooper.addClientStat("touch", this.gameSettings.touchscreen ? "touch" : "mouse"); + playerSnooper.addClientStat("resource_packs", Integer.valueOf(this.mcResourcePackRepository.getRepositoryEntries().size())); + int i = 0; + + for (ResourcePackRepository.Entry resourcepackrepository$entry : this.mcResourcePackRepository.getRepositoryEntries()) + { + playerSnooper.addClientStat("resource_pack[" + i++ + "]", resourcepackrepository$entry.getResourcePackName()); + } + + if (this.integratedServer != null && this.integratedServer.getPlayerUsageSnooper() != null) + { + playerSnooper.addClientStat("snooper_partner", this.integratedServer.getPlayerUsageSnooper().getUniqueID()); + } + } + + /** + * Return the current action's name + */ + private String getCurrentAction() + { + if (this.integratedServer != null) + { + return this.integratedServer.getPublic() ? "hosting_lan" : "singleplayer"; + } + else if (this.currentServerData != null) + { + return this.currentServerData.isOnLAN() ? "playing_lan" : "multiplayer"; + } + else + { + return "out_of_game"; + } + } + + public void addServerTypeToSnooper(Snooper playerSnooper) + { + playerSnooper.addStatToSnooper("opengl_version", GlStateManager.glGetString(7938)); + playerSnooper.addStatToSnooper("opengl_vendor", GlStateManager.glGetString(7936)); + playerSnooper.addStatToSnooper("client_brand", ClientBrandRetriever.getClientModName()); + playerSnooper.addStatToSnooper("launched_version", this.launchedVersion); + ContextCapabilities contextcapabilities = GLContext.getCapabilities(); + playerSnooper.addStatToSnooper("gl_caps[ARB_arrays_of_arrays]", Boolean.valueOf(contextcapabilities.GL_ARB_arrays_of_arrays)); + playerSnooper.addStatToSnooper("gl_caps[ARB_base_instance]", Boolean.valueOf(contextcapabilities.GL_ARB_base_instance)); + playerSnooper.addStatToSnooper("gl_caps[ARB_blend_func_extended]", Boolean.valueOf(contextcapabilities.GL_ARB_blend_func_extended)); + playerSnooper.addStatToSnooper("gl_caps[ARB_clear_buffer_object]", Boolean.valueOf(contextcapabilities.GL_ARB_clear_buffer_object)); + playerSnooper.addStatToSnooper("gl_caps[ARB_color_buffer_float]", Boolean.valueOf(contextcapabilities.GL_ARB_color_buffer_float)); + playerSnooper.addStatToSnooper("gl_caps[ARB_compatibility]", Boolean.valueOf(contextcapabilities.GL_ARB_compatibility)); + playerSnooper.addStatToSnooper("gl_caps[ARB_compressed_texture_pixel_storage]", Boolean.valueOf(contextcapabilities.GL_ARB_compressed_texture_pixel_storage)); + playerSnooper.addStatToSnooper("gl_caps[ARB_compute_shader]", Boolean.valueOf(contextcapabilities.GL_ARB_compute_shader)); + playerSnooper.addStatToSnooper("gl_caps[ARB_copy_buffer]", Boolean.valueOf(contextcapabilities.GL_ARB_copy_buffer)); + playerSnooper.addStatToSnooper("gl_caps[ARB_copy_image]", Boolean.valueOf(contextcapabilities.GL_ARB_copy_image)); + playerSnooper.addStatToSnooper("gl_caps[ARB_depth_buffer_float]", Boolean.valueOf(contextcapabilities.GL_ARB_depth_buffer_float)); + playerSnooper.addStatToSnooper("gl_caps[ARB_compute_shader]", Boolean.valueOf(contextcapabilities.GL_ARB_compute_shader)); + playerSnooper.addStatToSnooper("gl_caps[ARB_copy_buffer]", Boolean.valueOf(contextcapabilities.GL_ARB_copy_buffer)); + playerSnooper.addStatToSnooper("gl_caps[ARB_copy_image]", Boolean.valueOf(contextcapabilities.GL_ARB_copy_image)); + playerSnooper.addStatToSnooper("gl_caps[ARB_depth_buffer_float]", Boolean.valueOf(contextcapabilities.GL_ARB_depth_buffer_float)); + playerSnooper.addStatToSnooper("gl_caps[ARB_depth_clamp]", Boolean.valueOf(contextcapabilities.GL_ARB_depth_clamp)); + playerSnooper.addStatToSnooper("gl_caps[ARB_depth_texture]", Boolean.valueOf(contextcapabilities.GL_ARB_depth_texture)); + playerSnooper.addStatToSnooper("gl_caps[ARB_draw_buffers]", Boolean.valueOf(contextcapabilities.GL_ARB_draw_buffers)); + playerSnooper.addStatToSnooper("gl_caps[ARB_draw_buffers_blend]", Boolean.valueOf(contextcapabilities.GL_ARB_draw_buffers_blend)); + playerSnooper.addStatToSnooper("gl_caps[ARB_draw_elements_base_vertex]", Boolean.valueOf(contextcapabilities.GL_ARB_draw_elements_base_vertex)); + playerSnooper.addStatToSnooper("gl_caps[ARB_draw_indirect]", Boolean.valueOf(contextcapabilities.GL_ARB_draw_indirect)); + playerSnooper.addStatToSnooper("gl_caps[ARB_draw_instanced]", Boolean.valueOf(contextcapabilities.GL_ARB_draw_instanced)); + playerSnooper.addStatToSnooper("gl_caps[ARB_explicit_attrib_location]", Boolean.valueOf(contextcapabilities.GL_ARB_explicit_attrib_location)); + playerSnooper.addStatToSnooper("gl_caps[ARB_explicit_uniform_location]", Boolean.valueOf(contextcapabilities.GL_ARB_explicit_uniform_location)); + playerSnooper.addStatToSnooper("gl_caps[ARB_fragment_layer_viewport]", Boolean.valueOf(contextcapabilities.GL_ARB_fragment_layer_viewport)); + playerSnooper.addStatToSnooper("gl_caps[ARB_fragment_program]", Boolean.valueOf(contextcapabilities.GL_ARB_fragment_program)); + playerSnooper.addStatToSnooper("gl_caps[ARB_fragment_shader]", Boolean.valueOf(contextcapabilities.GL_ARB_fragment_shader)); + playerSnooper.addStatToSnooper("gl_caps[ARB_fragment_program_shadow]", Boolean.valueOf(contextcapabilities.GL_ARB_fragment_program_shadow)); + playerSnooper.addStatToSnooper("gl_caps[ARB_framebuffer_object]", Boolean.valueOf(contextcapabilities.GL_ARB_framebuffer_object)); + playerSnooper.addStatToSnooper("gl_caps[ARB_framebuffer_sRGB]", Boolean.valueOf(contextcapabilities.GL_ARB_framebuffer_sRGB)); + playerSnooper.addStatToSnooper("gl_caps[ARB_geometry_shader4]", Boolean.valueOf(contextcapabilities.GL_ARB_geometry_shader4)); + playerSnooper.addStatToSnooper("gl_caps[ARB_gpu_shader5]", Boolean.valueOf(contextcapabilities.GL_ARB_gpu_shader5)); + playerSnooper.addStatToSnooper("gl_caps[ARB_half_float_pixel]", Boolean.valueOf(contextcapabilities.GL_ARB_half_float_pixel)); + playerSnooper.addStatToSnooper("gl_caps[ARB_half_float_vertex]", Boolean.valueOf(contextcapabilities.GL_ARB_half_float_vertex)); + playerSnooper.addStatToSnooper("gl_caps[ARB_instanced_arrays]", Boolean.valueOf(contextcapabilities.GL_ARB_instanced_arrays)); + playerSnooper.addStatToSnooper("gl_caps[ARB_map_buffer_alignment]", Boolean.valueOf(contextcapabilities.GL_ARB_map_buffer_alignment)); + playerSnooper.addStatToSnooper("gl_caps[ARB_map_buffer_range]", Boolean.valueOf(contextcapabilities.GL_ARB_map_buffer_range)); + playerSnooper.addStatToSnooper("gl_caps[ARB_multisample]", Boolean.valueOf(contextcapabilities.GL_ARB_multisample)); + playerSnooper.addStatToSnooper("gl_caps[ARB_multitexture]", Boolean.valueOf(contextcapabilities.GL_ARB_multitexture)); + playerSnooper.addStatToSnooper("gl_caps[ARB_occlusion_query2]", Boolean.valueOf(contextcapabilities.GL_ARB_occlusion_query2)); + playerSnooper.addStatToSnooper("gl_caps[ARB_pixel_buffer_object]", Boolean.valueOf(contextcapabilities.GL_ARB_pixel_buffer_object)); + playerSnooper.addStatToSnooper("gl_caps[ARB_seamless_cube_map]", Boolean.valueOf(contextcapabilities.GL_ARB_seamless_cube_map)); + playerSnooper.addStatToSnooper("gl_caps[ARB_shader_objects]", Boolean.valueOf(contextcapabilities.GL_ARB_shader_objects)); + playerSnooper.addStatToSnooper("gl_caps[ARB_shader_stencil_export]", Boolean.valueOf(contextcapabilities.GL_ARB_shader_stencil_export)); + playerSnooper.addStatToSnooper("gl_caps[ARB_shader_texture_lod]", Boolean.valueOf(contextcapabilities.GL_ARB_shader_texture_lod)); + playerSnooper.addStatToSnooper("gl_caps[ARB_shadow]", Boolean.valueOf(contextcapabilities.GL_ARB_shadow)); + playerSnooper.addStatToSnooper("gl_caps[ARB_shadow_ambient]", Boolean.valueOf(contextcapabilities.GL_ARB_shadow_ambient)); + playerSnooper.addStatToSnooper("gl_caps[ARB_stencil_texturing]", Boolean.valueOf(contextcapabilities.GL_ARB_stencil_texturing)); + playerSnooper.addStatToSnooper("gl_caps[ARB_sync]", Boolean.valueOf(contextcapabilities.GL_ARB_sync)); + playerSnooper.addStatToSnooper("gl_caps[ARB_tessellation_shader]", Boolean.valueOf(contextcapabilities.GL_ARB_tessellation_shader)); + playerSnooper.addStatToSnooper("gl_caps[ARB_texture_border_clamp]", Boolean.valueOf(contextcapabilities.GL_ARB_texture_border_clamp)); + playerSnooper.addStatToSnooper("gl_caps[ARB_texture_buffer_object]", Boolean.valueOf(contextcapabilities.GL_ARB_texture_buffer_object)); + playerSnooper.addStatToSnooper("gl_caps[ARB_texture_cube_map]", Boolean.valueOf(contextcapabilities.GL_ARB_texture_cube_map)); + playerSnooper.addStatToSnooper("gl_caps[ARB_texture_cube_map_array]", Boolean.valueOf(contextcapabilities.GL_ARB_texture_cube_map_array)); + playerSnooper.addStatToSnooper("gl_caps[ARB_texture_non_power_of_two]", Boolean.valueOf(contextcapabilities.GL_ARB_texture_non_power_of_two)); + playerSnooper.addStatToSnooper("gl_caps[ARB_uniform_buffer_object]", Boolean.valueOf(contextcapabilities.GL_ARB_uniform_buffer_object)); + playerSnooper.addStatToSnooper("gl_caps[ARB_vertex_blend]", Boolean.valueOf(contextcapabilities.GL_ARB_vertex_blend)); + playerSnooper.addStatToSnooper("gl_caps[ARB_vertex_buffer_object]", Boolean.valueOf(contextcapabilities.GL_ARB_vertex_buffer_object)); + playerSnooper.addStatToSnooper("gl_caps[ARB_vertex_program]", Boolean.valueOf(contextcapabilities.GL_ARB_vertex_program)); + playerSnooper.addStatToSnooper("gl_caps[ARB_vertex_shader]", Boolean.valueOf(contextcapabilities.GL_ARB_vertex_shader)); + playerSnooper.addStatToSnooper("gl_caps[EXT_bindable_uniform]", Boolean.valueOf(contextcapabilities.GL_EXT_bindable_uniform)); + playerSnooper.addStatToSnooper("gl_caps[EXT_blend_equation_separate]", Boolean.valueOf(contextcapabilities.GL_EXT_blend_equation_separate)); + playerSnooper.addStatToSnooper("gl_caps[EXT_blend_func_separate]", Boolean.valueOf(contextcapabilities.GL_EXT_blend_func_separate)); + playerSnooper.addStatToSnooper("gl_caps[EXT_blend_minmax]", Boolean.valueOf(contextcapabilities.GL_EXT_blend_minmax)); + playerSnooper.addStatToSnooper("gl_caps[EXT_blend_subtract]", Boolean.valueOf(contextcapabilities.GL_EXT_blend_subtract)); + playerSnooper.addStatToSnooper("gl_caps[EXT_draw_instanced]", Boolean.valueOf(contextcapabilities.GL_EXT_draw_instanced)); + playerSnooper.addStatToSnooper("gl_caps[EXT_framebuffer_multisample]", Boolean.valueOf(contextcapabilities.GL_EXT_framebuffer_multisample)); + playerSnooper.addStatToSnooper("gl_caps[EXT_framebuffer_object]", Boolean.valueOf(contextcapabilities.GL_EXT_framebuffer_object)); + playerSnooper.addStatToSnooper("gl_caps[EXT_framebuffer_sRGB]", Boolean.valueOf(contextcapabilities.GL_EXT_framebuffer_sRGB)); + playerSnooper.addStatToSnooper("gl_caps[EXT_geometry_shader4]", Boolean.valueOf(contextcapabilities.GL_EXT_geometry_shader4)); + playerSnooper.addStatToSnooper("gl_caps[EXT_gpu_program_parameters]", Boolean.valueOf(contextcapabilities.GL_EXT_gpu_program_parameters)); + playerSnooper.addStatToSnooper("gl_caps[EXT_gpu_shader4]", Boolean.valueOf(contextcapabilities.GL_EXT_gpu_shader4)); + playerSnooper.addStatToSnooper("gl_caps[EXT_multi_draw_arrays]", Boolean.valueOf(contextcapabilities.GL_EXT_multi_draw_arrays)); + playerSnooper.addStatToSnooper("gl_caps[EXT_packed_depth_stencil]", Boolean.valueOf(contextcapabilities.GL_EXT_packed_depth_stencil)); + playerSnooper.addStatToSnooper("gl_caps[EXT_paletted_texture]", Boolean.valueOf(contextcapabilities.GL_EXT_paletted_texture)); + playerSnooper.addStatToSnooper("gl_caps[EXT_rescale_normal]", Boolean.valueOf(contextcapabilities.GL_EXT_rescale_normal)); + playerSnooper.addStatToSnooper("gl_caps[EXT_separate_shader_objects]", Boolean.valueOf(contextcapabilities.GL_EXT_separate_shader_objects)); + playerSnooper.addStatToSnooper("gl_caps[EXT_shader_image_load_store]", Boolean.valueOf(contextcapabilities.GL_EXT_shader_image_load_store)); + playerSnooper.addStatToSnooper("gl_caps[EXT_shadow_funcs]", Boolean.valueOf(contextcapabilities.GL_EXT_shadow_funcs)); + playerSnooper.addStatToSnooper("gl_caps[EXT_shared_texture_palette]", Boolean.valueOf(contextcapabilities.GL_EXT_shared_texture_palette)); + playerSnooper.addStatToSnooper("gl_caps[EXT_stencil_clear_tag]", Boolean.valueOf(contextcapabilities.GL_EXT_stencil_clear_tag)); + playerSnooper.addStatToSnooper("gl_caps[EXT_stencil_two_side]", Boolean.valueOf(contextcapabilities.GL_EXT_stencil_two_side)); + playerSnooper.addStatToSnooper("gl_caps[EXT_stencil_wrap]", Boolean.valueOf(contextcapabilities.GL_EXT_stencil_wrap)); + playerSnooper.addStatToSnooper("gl_caps[EXT_texture_3d]", Boolean.valueOf(contextcapabilities.GL_EXT_texture_3d)); + playerSnooper.addStatToSnooper("gl_caps[EXT_texture_array]", Boolean.valueOf(contextcapabilities.GL_EXT_texture_array)); + playerSnooper.addStatToSnooper("gl_caps[EXT_texture_buffer_object]", Boolean.valueOf(contextcapabilities.GL_EXT_texture_buffer_object)); + playerSnooper.addStatToSnooper("gl_caps[EXT_texture_integer]", Boolean.valueOf(contextcapabilities.GL_EXT_texture_integer)); + playerSnooper.addStatToSnooper("gl_caps[EXT_texture_lod_bias]", Boolean.valueOf(contextcapabilities.GL_EXT_texture_lod_bias)); + playerSnooper.addStatToSnooper("gl_caps[EXT_texture_sRGB]", Boolean.valueOf(contextcapabilities.GL_EXT_texture_sRGB)); + playerSnooper.addStatToSnooper("gl_caps[EXT_vertex_shader]", Boolean.valueOf(contextcapabilities.GL_EXT_vertex_shader)); + playerSnooper.addStatToSnooper("gl_caps[EXT_vertex_weighting]", Boolean.valueOf(contextcapabilities.GL_EXT_vertex_weighting)); + playerSnooper.addStatToSnooper("gl_caps[gl_max_vertex_uniforms]", Integer.valueOf(GlStateManager.glGetInteger(35658))); + GlStateManager.glGetError(); + playerSnooper.addStatToSnooper("gl_caps[gl_max_fragment_uniforms]", Integer.valueOf(GlStateManager.glGetInteger(35657))); + GlStateManager.glGetError(); + playerSnooper.addStatToSnooper("gl_caps[gl_max_vertex_attribs]", Integer.valueOf(GlStateManager.glGetInteger(34921))); + GlStateManager.glGetError(); + playerSnooper.addStatToSnooper("gl_caps[gl_max_vertex_texture_image_units]", Integer.valueOf(GlStateManager.glGetInteger(35660))); + GlStateManager.glGetError(); + playerSnooper.addStatToSnooper("gl_caps[gl_max_texture_image_units]", Integer.valueOf(GlStateManager.glGetInteger(34930))); + GlStateManager.glGetError(); + playerSnooper.addStatToSnooper("gl_caps[gl_max_array_texture_layers]", Integer.valueOf(GlStateManager.glGetInteger(35071))); + GlStateManager.glGetError(); + playerSnooper.addStatToSnooper("gl_max_texture_size", Integer.valueOf(getGLMaximumTextureSize())); + GameProfile gameprofile = this.session.getProfile(); + + if (gameprofile != null && gameprofile.getId() != null) + { + playerSnooper.addStatToSnooper("uuid", Hashing.sha1().hashBytes(gameprofile.getId().toString().getBytes(Charsets.ISO_8859_1)).toString()); + } + } + + /** + * Used in the usage snooper. + */ + public static int getGLMaximumTextureSize() + { + //Forge we redirect this to our code which caches the value before any splash screen stuff is done. + return net.minecraftforge.fml.client.SplashProgress.getMaxTextureSize(); + } + + /** + * Returns whether snooping is enabled or not. + */ + public boolean isSnooperEnabled() + { + return this.gameSettings.snooperEnabled; + } + + /** + * Set the current ServerData instance. + */ + public void setServerData(ServerData serverDataIn) + { + this.currentServerData = serverDataIn; + } + + @Nullable + public ServerData getCurrentServerData() + { + return this.currentServerData; + } + + public boolean isIntegratedServerRunning() + { + return this.integratedServerIsRunning; + } + + /** + * Returns true if there is only one player playing, and the current server is the integrated one. + */ + public boolean isSingleplayer() + { + return this.integratedServerIsRunning && this.integratedServer != null; + } + + /** + * Returns the currently running integrated server + */ + @Nullable + public IntegratedServer getIntegratedServer() + { + return this.integratedServer; + } + + public static void stopIntegratedServer() + { + if (instance != null) + { + IntegratedServer integratedserver = instance.getIntegratedServer(); + + if (integratedserver != null) + { + integratedserver.stopServer(); + } + } + } + + /** + * Returns the PlayerUsageSnooper instance. + */ + public Snooper getPlayerUsageSnooper() + { + return this.usageSnooper; + } + + /** + * Gets the system time in milliseconds. + */ + public static long getSystemTime() + { + return Sys.getTime() * 1000L / Sys.getTimerResolution(); + } + + /** + * Returns whether we're in full screen or not. + */ + public boolean isFullScreen() + { + return this.fullscreen; + } + + public Session getSession() + { + return this.session; + } + + /** + * Return the player's GameProfile properties + */ + public PropertyMap getProfileProperties() + { + if (this.profileProperties.isEmpty()) + { + GameProfile gameprofile = this.getSessionService().fillProfileProperties(this.session.getProfile(), false); + this.profileProperties.putAll(gameprofile.getProperties()); + } + + return this.profileProperties; + } + + public Proxy getProxy() + { + return this.proxy; + } + + public TextureManager getTextureManager() + { + return this.renderEngine; + } + + public IResourceManager getResourceManager() + { + return this.mcResourceManager; + } + + public ResourcePackRepository getResourcePackRepository() + { + return this.mcResourcePackRepository; + } + + public LanguageManager getLanguageManager() + { + return this.mcLanguageManager; + } + + public TextureMap getTextureMapBlocks() + { + return this.textureMapBlocks; + } + + public boolean isJava64bit() + { + return this.jvm64bit; + } + + public boolean isGamePaused() + { + return this.isGamePaused; + } + + public SoundHandler getSoundHandler() + { + return this.mcSoundHandler; + } + + public MusicTicker.MusicType getAmbientMusicType() + { + if (this.currentScreen instanceof GuiWinGame) + { + return MusicTicker.MusicType.CREDITS; + } + else if (this.player != null) + { + MusicTicker.MusicType type = this.world.provider.getMusicType(); + if (type != null) return type; + + if (this.player.world.provider instanceof WorldProviderHell) + { + return MusicTicker.MusicType.NETHER; + } + else if (this.player.world.provider instanceof WorldProviderEnd) + { + return this.ingameGUI.getBossOverlay().shouldPlayEndBossMusic() ? MusicTicker.MusicType.END_BOSS : MusicTicker.MusicType.END; + } + else + { + return this.player.capabilities.isCreativeMode && this.player.capabilities.allowFlying ? MusicTicker.MusicType.CREATIVE : MusicTicker.MusicType.GAME; + } + } + else + { + return MusicTicker.MusicType.MENU; + } + } + + public void dispatchKeypresses() + { + int i = Keyboard.getEventKey() == 0 ? Keyboard.getEventCharacter() + 256 : Keyboard.getEventKey(); + + if (i != 0 && !Keyboard.isRepeatEvent()) + { + if (!(this.currentScreen instanceof GuiControls) || ((GuiControls)this.currentScreen).time <= getSystemTime() - 20L) + { + if (Keyboard.getEventKeyState()) + { + if (this.gameSettings.keyBindFullscreen.isActiveAndMatches(i)) + { + this.toggleFullscreen(); + } + else if (this.gameSettings.keyBindScreenshot.isActiveAndMatches(i)) + { + this.ingameGUI.getChatGUI().printChatMessage(ScreenShotHelper.saveScreenshot(this.mcDataDir, this.displayWidth, this.displayHeight, this.framebufferMc)); + } + else if (i == 48 && GuiScreen.isCtrlKeyDown() && (this.currentScreen == null || this.currentScreen != null && !this.currentScreen.isFocused())) + { + this.gameSettings.setOptionValue(GameSettings.Options.NARRATOR, 1); + + if (this.currentScreen instanceof ScreenChatOptions) + { + ((ScreenChatOptions)this.currentScreen).updateNarratorButton(); + } + } + } + else if (this.currentScreen instanceof GuiControls) ((GuiControls)this.currentScreen).buttonId = null; + } + } + } + + public MinecraftSessionService getSessionService() + { + return this.sessionService; + } + + public SkinManager getSkinManager() + { + return this.skinManager; + } + + @Nullable + public Entity getRenderViewEntity() + { + return this.renderViewEntity; + } + + public void setRenderViewEntity(Entity viewingEntity) + { + this.renderViewEntity = viewingEntity; + this.entityRenderer.loadEntityShader(viewingEntity); + } + + public ListenableFuture addScheduledTask(Callable callableToSchedule) + { + Validate.notNull(callableToSchedule); + + if (this.isCallingFromMinecraftThread()) + { + try + { + return Futures.immediateFuture(callableToSchedule.call()); + } + catch (Exception exception) + { + return Futures.immediateFailedCheckedFuture(exception); + } + } + else + { + ListenableFutureTask listenablefuturetask = ListenableFutureTask.create(callableToSchedule); + + synchronized (this.scheduledTasks) + { + this.scheduledTasks.add(listenablefuturetask); + return listenablefuturetask; + } + } + } + + public ListenableFuture addScheduledTask(Runnable runnableToSchedule) + { + Validate.notNull(runnableToSchedule); + return this.addScheduledTask(Executors.callable(runnableToSchedule)); + } + + public boolean isCallingFromMinecraftThread() + { + return Thread.currentThread() == this.mcThread; + } + + public BlockRendererDispatcher getBlockRendererDispatcher() + { + return this.blockRenderDispatcher; + } + + public RenderManager getRenderManager() + { + return this.renderManager; + } + + public RenderItem getRenderItem() + { + return this.renderItem; + } + + public ItemRenderer getItemRenderer() + { + return this.itemRenderer; + } + + /** + * Gets the {@link ISearchTree} for the given search tree key, returning null if no such tree exists. + * + * @param key "The search tree's key" + */ + public ISearchTree getSearchTree(SearchTreeManager.Key key) + { + return this.searchTreeManager.get(key); + } + + public static int getDebugFPS() + { + return debugFPS; + } + + /** + * Return the FrameTimer's instance + */ + public FrameTimer getFrameTimer() + { + return this.frameTimer; + } + + /** + * Return true if the player is connected to a realms server + */ + public boolean isConnectedToRealms() + { + return this.connectedToRealms; + } + + /** + * Set if the player is connected to a realms server + */ + public void setConnectedToRealms(boolean isConnected) + { + this.connectedToRealms = isConnected; + } + + public DataFixer getDataFixer() + { + return this.dataFixer; + } + + public float getRenderPartialTicks() + { + return this.timer.renderPartialTicks; + } + + public float getTickLength() + { + return this.timer.elapsedPartialTicks; + } + + public BlockColors getBlockColors() + { + return this.blockColors; + } + + // FORGE + public ItemColors getItemColors() + { + return this.itemColors; + } + + /** + * Whether to use reduced debug info + */ + public boolean isReducedDebug() + { + return this.player != null && this.player.hasReducedDebug() || this.gameSettings.reducedDebugInfo; + } + + public GuiToast getToastGui() + { + return this.toastGui; + } + + public Tutorial getTutorial() + { + return this.tutorial; + } + + public SearchTreeManager getSearchTreeManager() + { + return this.searchTreeManager; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/ElytraSound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ElytraSound.java new file mode 100644 index 0000000..6fdd4ea --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ElytraSound.java @@ -0,0 +1,74 @@ +package net.minecraft.client.audio; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ElytraSound extends MovingSound +{ + private final EntityPlayerSP player; + private int time; + + public ElytraSound(EntityPlayerSP p_i47113_1_) + { + super(SoundEvents.ITEM_ELYTRA_FLYING, SoundCategory.PLAYERS); + this.player = p_i47113_1_; + this.repeat = true; + this.repeatDelay = 0; + this.volume = 0.1F; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + ++this.time; + + if (!this.player.isDead && (this.time <= 20 || this.player.isElytraFlying())) + { + this.xPosF = (float)this.player.posX; + this.yPosF = (float)this.player.posY; + this.zPosF = (float)this.player.posZ; + float f = MathHelper.sqrt(this.player.motionX * this.player.motionX + this.player.motionZ * this.player.motionZ + this.player.motionY * this.player.motionY); + float f1 = f / 2.0F; + + if ((double)f >= 0.01D) + { + this.volume = MathHelper.clamp(f1 * f1, 0.0F, 1.0F); + } + else + { + this.volume = 0.0F; + } + + if (this.time < 20) + { + this.volume = 0.0F; + } + else if (this.time < 40) + { + this.volume = (float)((double)this.volume * ((double)(this.time - 20) / 20.0D)); + } + + float f2 = 0.8F; + + if (this.volume > 0.8F) + { + this.pitch = 1.0F + (this.volume - 0.8F); + } + else + { + this.pitch = 1.0F; + } + } + else + { + this.donePlaying = true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/GuardianSound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/GuardianSound.java new file mode 100644 index 0000000..7ee580b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/GuardianSound.java @@ -0,0 +1,42 @@ +package net.minecraft.client.audio; + +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuardianSound extends MovingSound +{ + private final EntityGuardian guardian; + + public GuardianSound(EntityGuardian guardian) + { + super(SoundEvents.ENTITY_GUARDIAN_ATTACK, SoundCategory.HOSTILE); + this.guardian = guardian; + this.attenuationType = ISound.AttenuationType.NONE; + this.repeat = true; + this.repeatDelay = 0; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (!this.guardian.isDead && this.guardian.hasTargetedEntity()) + { + this.xPosF = (float)this.guardian.posX; + this.yPosF = (float)this.guardian.posY; + this.zPosF = (float)this.guardian.posZ; + float f = this.guardian.getAttackAnimationScale(0.0F); + this.volume = 0.0F + 1.0F * f * f; + this.pitch = 0.7F + 0.5F * f; + } + else + { + this.donePlaying = true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISound.java new file mode 100644 index 0000000..2db6e1f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISound.java @@ -0,0 +1,55 @@ +package net.minecraft.client.audio; + +import javax.annotation.Nullable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISound +{ + ResourceLocation getSoundLocation(); + + @Nullable + SoundEventAccessor createAccessor(SoundHandler handler); + + Sound getSound(); + + SoundCategory getCategory(); + + boolean canRepeat(); + + int getRepeatDelay(); + + float getVolume(); + + float getPitch(); + + float getXPosF(); + + float getYPosF(); + + float getZPosF(); + + ISound.AttenuationType getAttenuationType(); + + @SideOnly(Side.CLIENT) + public static enum AttenuationType + { + NONE(0), + LINEAR(2); + + private final int type; + + private AttenuationType(int typeIn) + { + this.type = typeIn; + } + + public int getTypeInt() + { + return this.type; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISoundEventAccessor.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISoundEventAccessor.java new file mode 100644 index 0000000..c6c083a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISoundEventAccessor.java @@ -0,0 +1,12 @@ +package net.minecraft.client.audio; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISoundEventAccessor +{ + int getWeight(); + + T cloneEntry(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISoundEventListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISoundEventListener.java new file mode 100644 index 0000000..e2e179b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ISoundEventListener.java @@ -0,0 +1,10 @@ +package net.minecraft.client.audio; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISoundEventListener +{ + void soundPlay(ISound soundIn, SoundEventAccessor accessor); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/ITickableSound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ITickableSound.java new file mode 100644 index 0000000..bf2a446 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/ITickableSound.java @@ -0,0 +1,11 @@ +package net.minecraft.client.audio; + +import net.minecraft.util.ITickable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITickableSound extends ISound, ITickable +{ + boolean isDonePlaying(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSound.java new file mode 100644 index 0000000..b3701ee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSound.java @@ -0,0 +1,22 @@ +package net.minecraft.client.audio; + +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class MovingSound extends PositionedSound implements ITickableSound +{ + protected boolean donePlaying; + + protected MovingSound(SoundEvent soundIn, SoundCategory categoryIn) + { + super(soundIn, categoryIn); + } + + public boolean isDonePlaying() + { + return this.donePlaying; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSoundMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSoundMinecart.java new file mode 100644 index 0000000..44cb8ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSoundMinecart.java @@ -0,0 +1,52 @@ +package net.minecraft.client.audio; + +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MovingSoundMinecart extends MovingSound +{ + private final EntityMinecart minecart; + private float distance = 0.0F; + + public MovingSoundMinecart(EntityMinecart minecartIn) + { + super(SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.NEUTRAL); + this.minecart = minecartIn; + this.repeat = true; + this.repeatDelay = 0; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.minecart.isDead) + { + this.donePlaying = true; + } + else + { + this.xPosF = (float)this.minecart.posX; + this.yPosF = (float)this.minecart.posY; + this.zPosF = (float)this.minecart.posZ; + float f = MathHelper.sqrt(this.minecart.motionX * this.minecart.motionX + this.minecart.motionZ * this.minecart.motionZ); + + if ((double)f >= 0.01D) + { + this.distance = MathHelper.clamp(this.distance + 0.0025F, 0.0F, 1.0F); + this.volume = 0.0F + MathHelper.clamp(f, 0.0F, 0.5F) * 0.7F; + } + else + { + this.distance = 0.0F; + this.volume = 0.0F; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSoundMinecartRiding.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSoundMinecartRiding.java new file mode 100644 index 0000000..559a4c0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MovingSoundMinecartRiding.java @@ -0,0 +1,50 @@ +package net.minecraft.client.audio; + +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MovingSoundMinecartRiding extends MovingSound +{ + private final EntityPlayer player; + private final EntityMinecart minecart; + + public MovingSoundMinecartRiding(EntityPlayer playerRiding, EntityMinecart minecart) + { + super(SoundEvents.ENTITY_MINECART_INSIDE, SoundCategory.NEUTRAL); + this.player = playerRiding; + this.minecart = minecart; + this.attenuationType = ISound.AttenuationType.NONE; + this.repeat = true; + this.repeatDelay = 0; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (!this.minecart.isDead && this.player.isRiding() && this.player.getRidingEntity() == this.minecart) + { + float f = MathHelper.sqrt(this.minecart.motionX * this.minecart.motionX + this.minecart.motionZ * this.minecart.motionZ); + + if ((double)f >= 0.01D) + { + this.volume = 0.0F + MathHelper.clamp(f, 0.0F, 1.0F) * 0.75F; + } + else + { + this.volume = 0.0F; + } + } + else + { + this.donePlaying = true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/MusicTicker.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MusicTicker.java new file mode 100644 index 0000000..1edbdaa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/MusicTicker.java @@ -0,0 +1,111 @@ +package net.minecraft.client.audio; + +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ITickable; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MusicTicker implements ITickable +{ + private final Random rand = new Random(); + private final Minecraft mc; + private ISound currentMusic; + private int timeUntilNextMusic = 100; + + public MusicTicker(Minecraft mcIn) + { + this.mc = mcIn; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + MusicTicker.MusicType musicticker$musictype = this.mc.getAmbientMusicType(); + + if (this.currentMusic != null) + { + if (!musicticker$musictype.getMusicLocation().getSoundName().equals(this.currentMusic.getSoundLocation())) + { + this.mc.getSoundHandler().stopSound(this.currentMusic); + this.timeUntilNextMusic = MathHelper.getInt(this.rand, 0, musicticker$musictype.getMinDelay() / 2); + } + + if (!this.mc.getSoundHandler().isSoundPlaying(this.currentMusic)) + { + this.currentMusic = null; + this.timeUntilNextMusic = Math.min(MathHelper.getInt(this.rand, musicticker$musictype.getMinDelay(), musicticker$musictype.getMaxDelay()), this.timeUntilNextMusic); + } + } + + this.timeUntilNextMusic = Math.min(this.timeUntilNextMusic, musicticker$musictype.getMaxDelay()); + + if (this.currentMusic == null && this.timeUntilNextMusic-- <= 0) + { + this.playMusic(musicticker$musictype); + } + } + + /** + * Plays a music track for the maximum allowable period of time + */ + public void playMusic(MusicTicker.MusicType requestedMusicType) + { + this.currentMusic = PositionedSoundRecord.getMusicRecord(requestedMusicType.getMusicLocation()); + this.mc.getSoundHandler().playSound(this.currentMusic); + this.timeUntilNextMusic = Integer.MAX_VALUE; + } + + @SideOnly(Side.CLIENT) + public static enum MusicType + { + MENU(SoundEvents.MUSIC_MENU, 20, 600), + GAME(SoundEvents.MUSIC_GAME, 12000, 24000), + CREATIVE(SoundEvents.MUSIC_CREATIVE, 1200, 3600), + CREDITS(SoundEvents.MUSIC_CREDITS, 0, 0), + NETHER(SoundEvents.MUSIC_NETHER, 1200, 3600), + END_BOSS(SoundEvents.MUSIC_DRAGON, 0, 0), + END(SoundEvents.MUSIC_END, 6000, 24000); + + private final SoundEvent musicLocation; + private final int minDelay; + private final int maxDelay; + + private MusicType(SoundEvent musicLocationIn, int minDelayIn, int maxDelayIn) + { + this.musicLocation = musicLocationIn; + this.minDelay = minDelayIn; + this.maxDelay = maxDelayIn; + } + + /** + * Gets the {@link SoundEvent} containing the current music track's location + */ + public SoundEvent getMusicLocation() + { + return this.musicLocation; + } + + /** + * Returns the minimum delay between playing music of this type. + */ + public int getMinDelay() + { + return this.minDelay; + } + + /** + * Returns the maximum delay between playing music of this type. + */ + public int getMaxDelay() + { + return this.maxDelay; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/PositionedSound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/PositionedSound.java new file mode 100644 index 0000000..ded64ed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/PositionedSound.java @@ -0,0 +1,112 @@ +package net.minecraft.client.audio; + +import javax.annotation.Nullable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class PositionedSound implements ISound +{ + protected Sound sound; + @Nullable + private SoundEventAccessor soundEvent; + protected SoundCategory category; + protected ResourceLocation positionedSoundLocation; + protected float volume; + protected float pitch; + protected float xPosF; + protected float yPosF; + protected float zPosF; + protected boolean repeat; + /** The number of ticks between repeating the sound */ + protected int repeatDelay; + protected ISound.AttenuationType attenuationType; + + protected PositionedSound(SoundEvent soundIn, SoundCategory categoryIn) + { + this(soundIn.getSoundName(), categoryIn); + } + + protected PositionedSound(ResourceLocation soundId, SoundCategory categoryIn) + { + this.volume = 1.0F; + this.pitch = 1.0F; + this.attenuationType = ISound.AttenuationType.LINEAR; + this.positionedSoundLocation = soundId; + this.category = categoryIn; + } + + public ResourceLocation getSoundLocation() + { + return this.positionedSoundLocation; + } + + public SoundEventAccessor createAccessor(SoundHandler handler) + { + this.soundEvent = handler.getAccessor(this.positionedSoundLocation); + + if (this.soundEvent == null) + { + this.sound = SoundHandler.MISSING_SOUND; + } + else + { + this.sound = this.soundEvent.cloneEntry(); + } + + return this.soundEvent; + } + + public Sound getSound() + { + return this.sound; + } + + public SoundCategory getCategory() + { + return this.category; + } + + public boolean canRepeat() + { + return this.repeat; + } + + public int getRepeatDelay() + { + return this.repeatDelay; + } + + public float getVolume() + { + return this.volume * this.sound.getVolume(); + } + + public float getPitch() + { + return this.pitch * this.sound.getPitch(); + } + + public float getXPosF() + { + return this.xPosF; + } + + public float getYPosF() + { + return this.yPosF; + } + + public float getZPosF() + { + return this.zPosF; + } + + public ISound.AttenuationType getAttenuationType() + { + return this.attenuationType; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/PositionedSoundRecord.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/PositionedSoundRecord.java new file mode 100644 index 0000000..ca5f4e1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/PositionedSoundRecord.java @@ -0,0 +1,60 @@ +package net.minecraft.client.audio; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class PositionedSoundRecord extends PositionedSound +{ + public PositionedSoundRecord(SoundEvent soundIn, SoundCategory categoryIn, float volumeIn, float pitchIn, BlockPos pos) + { + this(soundIn, categoryIn, volumeIn, pitchIn, (float)pos.getX() + 0.5F, (float)pos.getY() + 0.5F, (float)pos.getZ() + 0.5F); + } + + public static PositionedSoundRecord getMasterRecord(SoundEvent soundIn, float pitchIn) + { + return getRecord(soundIn, pitchIn, 0.25F); + } + + public static PositionedSoundRecord getRecord(SoundEvent soundIn, float pitchIn, float volumeIn) + { + return new PositionedSoundRecord(soundIn, SoundCategory.MASTER, volumeIn, pitchIn, false, 0, ISound.AttenuationType.NONE, 0.0F, 0.0F, 0.0F); + } + + public static PositionedSoundRecord getMusicRecord(SoundEvent soundIn) + { + return new PositionedSoundRecord(soundIn, SoundCategory.MUSIC, 1.0F, 1.0F, false, 0, ISound.AttenuationType.NONE, 0.0F, 0.0F, 0.0F); + } + + public static PositionedSoundRecord getRecordSoundRecord(SoundEvent soundIn, float xIn, float yIn, float zIn) + { + return new PositionedSoundRecord(soundIn, SoundCategory.RECORDS, 4.0F, 1.0F, false, 0, ISound.AttenuationType.LINEAR, xIn, yIn, zIn); + } + + public PositionedSoundRecord(SoundEvent soundIn, SoundCategory categoryIn, float volumeIn, float pitchIn, float xIn, float yIn, float zIn) + { + this(soundIn, categoryIn, volumeIn, pitchIn, false, 0, ISound.AttenuationType.LINEAR, xIn, yIn, zIn); + } + + private PositionedSoundRecord(SoundEvent soundIn, SoundCategory categoryIn, float volumeIn, float pitchIn, boolean repeatIn, int repeatDelayIn, ISound.AttenuationType attenuationTypeIn, float xIn, float yIn, float zIn) + { + this(soundIn.getSoundName(), categoryIn, volumeIn, pitchIn, repeatIn, repeatDelayIn, attenuationTypeIn, xIn, yIn, zIn); + } + + public PositionedSoundRecord(ResourceLocation soundId, SoundCategory categoryIn, float volumeIn, float pitchIn, boolean repeatIn, int repeatDelayIn, ISound.AttenuationType attenuationTypeIn, float xIn, float yIn, float zIn) + { + super(soundId, categoryIn); + this.volume = volumeIn; + this.pitch = pitchIn; + this.xPosF = xIn; + this.yPosF = yIn; + this.zPosF = zIn; + this.repeat = repeatIn; + this.repeatDelay = repeatDelayIn; + this.attenuationType = attenuationTypeIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/Sound.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/Sound.java new file mode 100644 index 0000000..3824d66 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/Sound.java @@ -0,0 +1,93 @@ +package net.minecraft.client.audio; + +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Sound implements ISoundEventAccessor +{ + private final ResourceLocation name; + private final float volume; + private final float pitch; + private final int weight; + private final Sound.Type type; + private final boolean streaming; + + public Sound(String nameIn, float volumeIn, float pitchIn, int weightIn, Sound.Type typeIn, boolean p_i46526_6_) + { + this.name = new ResourceLocation(nameIn); + this.volume = volumeIn; + this.pitch = pitchIn; + this.weight = weightIn; + this.type = typeIn; + this.streaming = p_i46526_6_; + } + + public ResourceLocation getSoundLocation() + { + return this.name; + } + + public ResourceLocation getSoundAsOggLocation() + { + return new ResourceLocation(this.name.getResourceDomain(), "sounds/" + this.name.getResourcePath() + ".ogg"); + } + + public float getVolume() + { + return this.volume; + } + + public float getPitch() + { + return this.pitch; + } + + public int getWeight() + { + return this.weight; + } + + public Sound cloneEntry() + { + return this; + } + + public Sound.Type getType() + { + return this.type; + } + + public boolean isStreaming() + { + return this.streaming; + } + + @SideOnly(Side.CLIENT) + public static enum Type + { + FILE("file"), + SOUND_EVENT("event"); + + private final String name; + + private Type(String nameIn) + { + this.name = nameIn; + } + + public static Sound.Type getByName(String nameIn) + { + for (Sound.Type sound$type : values()) + { + if (sound$type.name.equals(nameIn)) + { + return sound$type; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundEventAccessor.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundEventAccessor.java new file mode 100644 index 0000000..1224995 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundEventAccessor.java @@ -0,0 +1,80 @@ +package net.minecraft.client.audio; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SoundEventAccessor implements ISoundEventAccessor +{ + private final List> accessorList = Lists.>newArrayList(); + private final Random rnd = new Random(); + private final ResourceLocation location; + private final ITextComponent subtitle; + + public SoundEventAccessor(ResourceLocation locationIn, @Nullable String subtitleIn) + { + this.location = locationIn; + this.subtitle = subtitleIn == null ? null : new TextComponentTranslation(subtitleIn, new Object[0]); + } + + public int getWeight() + { + int i = 0; + + for (ISoundEventAccessor isoundeventaccessor : this.accessorList) + { + i += isoundeventaccessor.getWeight(); + } + + return i; + } + + public Sound cloneEntry() + { + int i = this.getWeight(); + + if (!this.accessorList.isEmpty() && i != 0) + { + int j = this.rnd.nextInt(i); + + for (ISoundEventAccessor isoundeventaccessor : this.accessorList) + { + j -= isoundeventaccessor.getWeight(); + + if (j < 0) + { + return isoundeventaccessor.cloneEntry(); + } + } + + return SoundHandler.MISSING_SOUND; + } + else + { + return SoundHandler.MISSING_SOUND; + } + } + + public void addSound(ISoundEventAccessor p_188715_1_) + { + this.accessorList.add(p_188715_1_); + } + + public ResourceLocation getLocation() + { + return this.location; + } + + @Nullable + public ITextComponent getSubtitle() + { + return this.subtitle; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundHandler.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundHandler.java new file mode 100644 index 0000000..553b238 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundHandler.java @@ -0,0 +1,344 @@ +package net.minecraft.client.audio; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.Closeable; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ITickable; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class SoundHandler implements IResourceManagerReloadListener, ITickable +{ + public static final Sound MISSING_SOUND = new Sound("meta:missing_sound", 1.0F, 1.0F, 1, Sound.Type.FILE, false); + private static final Logger LOGGER = LogManager.getLogger(); + private static final Gson GSON = (new GsonBuilder()).registerTypeHierarchyAdapter(ITextComponent.class, new ITextComponent.Serializer()).registerTypeAdapter(SoundList.class, new SoundListSerializer()).create(); + private static final ParameterizedType TYPE = new ParameterizedType() + { + public Type[] getActualTypeArguments() + { + return new Type[] {String.class, SoundList.class}; + } + public Type getRawType() + { + return Map.class; + } + public Type getOwnerType() + { + return null; + } + }; + private final SoundRegistry soundRegistry = new SoundRegistry(); + private final SoundManager sndManager; + private final IResourceManager mcResourceManager; + + public SoundHandler(IResourceManager manager, GameSettings gameSettingsIn) + { + this.mcResourceManager = manager; + this.sndManager = new SoundManager(this, gameSettingsIn); + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.soundRegistry.clearMap(); + + java.util.List> resources = new java.util.LinkedList<>(); + for (String s : resourceManager.getResourceDomains()) + { + try + { + for (IResource iresource : resourceManager.getAllResources(new ResourceLocation(s, "sounds.json"))) + { + try + { + Map map = this.getSoundMap(iresource.getInputStream()); + + for (Entry entry : map.entrySet()) + { + resources.add(new net.minecraft.util.Tuple<>(new ResourceLocation(s, entry.getKey()), entry.getValue())); + } + } + catch (RuntimeException runtimeexception) + { + LOGGER.warn("Invalid sounds.json", (Throwable)runtimeexception); + } + } + } + catch (IOException var11) + { + ; + } + } + + net.minecraftforge.fml.common.ProgressManager.ProgressBar resourcesBar = net.minecraftforge.fml.common.ProgressManager.push("Loading sounds", resources.size()); + resources.forEach(entry -> + { + resourcesBar.step(entry.getFirst().toString()); + try + { + this.loadSoundResource(entry.getFirst(), entry.getSecond()); + } + catch (RuntimeException e) + { + LOGGER.warn("Invalid sounds.json", e); + } + }); + net.minecraftforge.fml.common.ProgressManager.pop(resourcesBar); + for (ResourceLocation resourcelocation : this.soundRegistry.getKeys()) + { + SoundEventAccessor soundeventaccessor = (SoundEventAccessor)this.soundRegistry.getObject(resourcelocation); + + if (soundeventaccessor.getSubtitle() instanceof TextComponentTranslation) + { + String s1 = ((TextComponentTranslation)soundeventaccessor.getSubtitle()).getKey(); + + if (!I18n.hasKey(s1)) + { + LOGGER.debug("Missing subtitle {} for event: {}", s1, resourcelocation); + } + } + } + + for (ResourceLocation resourcelocation1 : this.soundRegistry.getKeys()) + { + if (SoundEvent.REGISTRY.getObject(resourcelocation1) == null) + { + LOGGER.debug("Not having sound event for: {}", (Object)resourcelocation1); + } + } + + this.sndManager.reloadSoundSystem(); + } + + @Nullable + protected Map getSoundMap(InputStream stream) + { + Map map; + + try + { + map = (Map)JsonUtils.fromJson(GSON, new InputStreamReader(stream, StandardCharsets.UTF_8), TYPE); + } + finally + { + IOUtils.closeQuietly(stream); + } + + return map; + } + + private void loadSoundResource(ResourceLocation location, SoundList sounds) + { + SoundEventAccessor soundeventaccessor = (SoundEventAccessor)this.soundRegistry.getObject(location); + boolean flag = soundeventaccessor == null; + + if (flag || sounds.canReplaceExisting()) + { + if (!flag) + { + LOGGER.debug("Replaced sound event location {}", (Object)location); + } + + soundeventaccessor = new SoundEventAccessor(location, sounds.getSubtitle()); + this.soundRegistry.add(soundeventaccessor); + } + + for (final Sound sound : sounds.getSounds()) + { + final ResourceLocation resourcelocation = sound.getSoundLocation(); + ISoundEventAccessor isoundeventaccessor; + + switch (sound.getType()) + { + case FILE: + + if (!this.validateSoundResource(sound, location)) + { + continue; + } + + isoundeventaccessor = sound; + break; + case SOUND_EVENT: + isoundeventaccessor = new ISoundEventAccessor() + { + public int getWeight() + { + SoundEventAccessor soundeventaccessor1 = (SoundEventAccessor)SoundHandler.this.soundRegistry.getObject(resourcelocation); + return soundeventaccessor1 == null ? 0 : soundeventaccessor1.getWeight(); + } + public Sound cloneEntry() + { + SoundEventAccessor soundeventaccessor1 = (SoundEventAccessor)SoundHandler.this.soundRegistry.getObject(resourcelocation); + + if (soundeventaccessor1 == null) + { + return SoundHandler.MISSING_SOUND; + } + else + { + Sound sound1 = soundeventaccessor1.cloneEntry(); + return new Sound(sound1.getSoundLocation().toString(), sound1.getVolume() * sound.getVolume(), sound1.getPitch() * sound.getPitch(), sound.getWeight(), Sound.Type.FILE, sound1.isStreaming() || sound.isStreaming()); + } + } + }; + break; + default: + throw new IllegalStateException("Unknown SoundEventRegistration type: " + sound.getType()); + } + + soundeventaccessor.addSound(isoundeventaccessor); + } + } + + private boolean validateSoundResource(Sound p_184401_1_, ResourceLocation p_184401_2_) + { + ResourceLocation resourcelocation = p_184401_1_.getSoundAsOggLocation(); + IResource iresource = null; + boolean flag; + + try + { + iresource = this.mcResourceManager.getResource(resourcelocation); + iresource.getInputStream(); + return true; + } + catch (FileNotFoundException var11) + { + LOGGER.warn("File {} does not exist, cannot add it to event {}", resourcelocation, p_184401_2_); + flag = false; + } + catch (IOException ioexception) + { + LOGGER.warn("Could not load sound file {}, cannot add it to event {}", resourcelocation, p_184401_2_, ioexception); + flag = false; + return flag; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + return flag; + } + + @Nullable + public SoundEventAccessor getAccessor(ResourceLocation location) + { + return (SoundEventAccessor)this.soundRegistry.getObject(location); + } + + /** + * Play a sound + */ + public void playSound(ISound sound) + { + this.sndManager.playSound(sound); + } + + /** + * Plays the sound in n ticks + */ + public void playDelayedSound(ISound sound, int delay) + { + this.sndManager.playDelayedSound(sound, delay); + } + + public void setListener(EntityPlayer player, float p_147691_2_) + { + this.sndManager.setListener(player, p_147691_2_); + } + + public void setListener(net.minecraft.entity.Entity entity, float partialTicks) + { + this.sndManager.setListener(entity, partialTicks); + } + + public void pauseSounds() + { + this.sndManager.pauseAllSounds(); + } + + public void stopSounds() + { + this.sndManager.stopAllSounds(); + } + + public void unloadSounds() + { + this.sndManager.unloadSoundSystem(); + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.sndManager.updateAllSounds(); + } + + public void resumeSounds() + { + this.sndManager.resumeAllSounds(); + } + + public void setSoundLevel(SoundCategory category, float volume) + { + if (category == SoundCategory.MASTER && volume <= 0.0F) + { + this.stopSounds(); + } + + this.sndManager.setVolume(category, volume); + } + + public void stopSound(ISound soundIn) + { + this.sndManager.stopSound(soundIn); + } + + public boolean isSoundPlaying(ISound sound) + { + return this.sndManager.isSoundPlaying(sound); + } + + public void addListener(ISoundEventListener listener) + { + this.sndManager.addListener(listener); + } + + public void removeListener(ISoundEventListener listener) + { + this.sndManager.removeListener(listener); + } + + public void stop(String p_189520_1_, SoundCategory p_189520_2_) + { + this.sndManager.stop(p_189520_1_, p_189520_2_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundList.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundList.java new file mode 100644 index 0000000..30e93cc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundList.java @@ -0,0 +1,38 @@ +package net.minecraft.client.audio; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SoundList +{ + private final List sounds; + /** if true it will override all the sounds from the resourcepacks loaded before */ + private final boolean replaceExisting; + private final String subtitle; + + public SoundList(List soundsIn, boolean replceIn, String subtitleIn) + { + this.sounds = soundsIn; + this.replaceExisting = replceIn; + this.subtitle = subtitleIn; + } + + public List getSounds() + { + return this.sounds; + } + + public boolean canReplaceExisting() + { + return this.replaceExisting; + } + + @Nullable + public String getSubtitle() + { + return this.subtitle; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundListSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundListSerializer.java new file mode 100644 index 0000000..bb00d63 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundListSerializer.java @@ -0,0 +1,82 @@ +package net.minecraft.client.audio; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.List; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; + +@SideOnly(Side.CLIENT) +public class SoundListSerializer implements JsonDeserializer +{ + public SoundList deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "entry"); + boolean flag = JsonUtils.getBoolean(jsonobject, "replace", false); + String s = JsonUtils.getString(jsonobject, "subtitle", (String)null); + List list = this.deserializeSounds(jsonobject); + return new SoundList(list, flag, s); + } + + private List deserializeSounds(JsonObject object) + { + List list = Lists.newArrayList(); + + if (object.has("sounds")) + { + JsonArray jsonarray = JsonUtils.getJsonArray(object, "sounds"); + + for (int i = 0; i < jsonarray.size(); ++i) + { + JsonElement jsonelement = jsonarray.get(i); + + if (JsonUtils.isString(jsonelement)) + { + String s = JsonUtils.getString(jsonelement, "sound"); + list.add(new Sound(s, 1.0F, 1.0F, 1, Sound.Type.FILE, false)); + } + else + { + list.add(this.deserializeSound(JsonUtils.getJsonObject(jsonelement, "sound"))); + } + } + } + + return list; + } + + private Sound deserializeSound(JsonObject object) + { + String s = JsonUtils.getString(object, "name"); + Sound.Type sound$type = this.deserializeType(object, Sound.Type.FILE); + float f = JsonUtils.getFloat(object, "volume", 1.0F); + Validate.isTrue(f > 0.0F, "Invalid volume"); + float f1 = JsonUtils.getFloat(object, "pitch", 1.0F); + Validate.isTrue(f1 > 0.0F, "Invalid pitch"); + int i = JsonUtils.getInt(object, "weight", 1); + Validate.isTrue(i > 0, "Invalid weight"); + boolean flag = JsonUtils.getBoolean(object, "stream", false); + return new Sound(s, f, f1, i, sound$type, flag); + } + + private Sound.Type deserializeType(JsonObject object, Sound.Type defaultValue) + { + Sound.Type sound$type = defaultValue; + + if (object.has("type")) + { + sound$type = Sound.Type.getByName(JsonUtils.getString(object, "type")); + Validate.notNull(sound$type, "Invalid type"); + } + + return sound$type; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundManager.java new file mode 100644 index 0000000..8e27b84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundManager.java @@ -0,0 +1,645 @@ +package net.minecraft.client.audio; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; +import io.netty.util.internal.ThreadLocalRandom; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; +import paulscode.sound.SoundSystem; +import paulscode.sound.SoundSystemConfig; +import paulscode.sound.SoundSystemException; +import paulscode.sound.SoundSystemLogger; +import paulscode.sound.Source; +import paulscode.sound.codecs.CodecJOrbis; +import paulscode.sound.libraries.LibraryLWJGLOpenAL; + +@SideOnly(Side.CLIENT) +public class SoundManager +{ + /** The marker used for logging */ + private static final Marker LOG_MARKER = MarkerManager.getMarker("SOUNDS"); + private static final Logger LOGGER = LogManager.getLogger(); + private static final Set UNABLE_TO_PLAY = Sets.newHashSet(); + /** A reference to the sound handler. */ + public final SoundHandler sndHandler; + /** Reference to the GameSettings object. */ + private final GameSettings options; + /** A reference to the sound system. */ + private SoundManager.SoundSystemStarterThread sndSystem; + /** Set to true when the SoundManager has been initialised. */ + private boolean loaded; + /** A counter for how long the sound manager has been running */ + private int playTime; + /** Identifiers of all currently playing sounds. Type: HashBiMap */ + private final Map playingSounds = HashBiMap.create(); + /** Inverse map of currently playing sounds, automatically mirroring changes in original map */ + private final Map invPlayingSounds; + private final Multimap categorySounds; + /** A subset of playingSounds, this contains only ITickableSounds */ + private final List tickableSounds; + /** Contains sounds to play in n ticks. Type: HashMap */ + private final Map delayedSounds; + /** The future time in which to stop this sound. Type: HashMap */ + private final Map playingSoundsStopTime; + private final List listeners; + private final List pausedChannels; + + public SoundManager(SoundHandler p_i45119_1_, GameSettings p_i45119_2_) + { + this.invPlayingSounds = ((BiMap)this.playingSounds).inverse(); + this.categorySounds = HashMultimap.create(); + this.tickableSounds = Lists.newArrayList(); + this.delayedSounds = Maps.newHashMap(); + this.playingSoundsStopTime = Maps.newHashMap(); + this.listeners = Lists.newArrayList(); + this.pausedChannels = Lists.newArrayList(); + this.sndHandler = p_i45119_1_; + this.options = p_i45119_2_; + + try + { + SoundSystemConfig.addLibrary(LibraryLWJGLOpenAL.class); + SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.sound.SoundSetupEvent(this)); + } + catch (SoundSystemException soundsystemexception) + { + LOGGER.error(LOG_MARKER, "Error linking with the LibraryJavaSound plug-in", (Throwable)soundsystemexception); + } + } + + public void reloadSoundSystem() + { + UNABLE_TO_PLAY.clear(); + + for (SoundEvent soundevent : SoundEvent.REGISTRY) + { + ResourceLocation resourcelocation = soundevent.getSoundName(); + + if (this.sndHandler.getAccessor(resourcelocation) == null) + { + LOGGER.warn("Missing sound for event: {}", SoundEvent.REGISTRY.getNameForObject(soundevent)); + UNABLE_TO_PLAY.add(resourcelocation); + } + } + + this.unloadSoundSystem(); + this.loadSoundSystem(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.sound.SoundLoadEvent(this)); + } + + /** + * Tries to add the paulscode library and the relevant codecs. If it fails, the master volume will be set to zero. + */ + private synchronized void loadSoundSystem() + { + if (!this.loaded) + { + try + { + (new Thread(new Runnable() + { + public void run() + { + SoundSystemConfig.setLogger(new SoundSystemLogger() + { + public void message(String p_message_1_, int p_message_2_) + { + if (!p_message_1_.isEmpty()) + { + SoundManager.LOGGER.info(p_message_1_); + } + } + public void importantMessage(String p_importantMessage_1_, int p_importantMessage_2_) + { + if (!p_importantMessage_1_.isEmpty()) + { + SoundManager.LOGGER.warn(p_importantMessage_1_); + } + } + public void errorMessage(String p_errorMessage_1_, String p_errorMessage_2_, int p_errorMessage_3_) + { + if (!p_errorMessage_2_.isEmpty()) + { + SoundManager.LOGGER.error("Error in class '{}'", (Object)p_errorMessage_1_); + SoundManager.LOGGER.error(p_errorMessage_2_); + } + } + }); + SoundManager.this.sndSystem = SoundManager.this.new SoundSystemStarterThread(); + SoundManager.this.loaded = true; + SoundManager.this.sndSystem.setMasterVolume(SoundManager.this.options.getSoundLevel(SoundCategory.MASTER)); + SoundManager.LOGGER.info(SoundManager.LOG_MARKER, "Sound engine started"); + } + }, "Sound Library Loader")).start(); + } + catch (RuntimeException runtimeexception) + { + LOGGER.error(LOG_MARKER, "Error starting SoundSystem. Turning off sounds & music", (Throwable)runtimeexception); + this.options.setSoundLevel(SoundCategory.MASTER, 0.0F); + this.options.saveOptions(); + } + } + } + + private float getVolume(SoundCategory category) + { + return category != null && category != SoundCategory.MASTER ? this.options.getSoundLevel(category) : 1.0F; + } + + public void setVolume(SoundCategory category, float volume) + { + if (this.loaded) + { + if (category == SoundCategory.MASTER) + { + this.sndSystem.setMasterVolume(volume); + } + else + { + for (String s : this.categorySounds.get(category)) + { + ISound isound = this.playingSounds.get(s); + float f = this.getClampedVolume(isound); + + if (f <= 0.0F) + { + this.stopSound(isound); + } + else + { + this.sndSystem.setVolume(s, f); + } + } + } + } + } + + /** + * Cleans up the Sound System + */ + public void unloadSoundSystem() + { + if (this.loaded) + { + this.stopAllSounds(); + this.sndSystem.cleanup(); + this.loaded = false; + } + } + + /** + * Stops all currently playing sounds + */ + public void stopAllSounds() + { + if (this.loaded) + { + for (String s : this.playingSounds.keySet()) + { + this.sndSystem.stop(s); + } + + this.pausedChannels.clear(); //Forge: MC-35856 Fixed paused sounds repeating when switching worlds + this.playingSounds.clear(); + this.delayedSounds.clear(); + this.tickableSounds.clear(); + this.categorySounds.clear(); + this.playingSoundsStopTime.clear(); + } + } + + public void addListener(ISoundEventListener listener) + { + this.listeners.add(listener); + } + + public void removeListener(ISoundEventListener listener) + { + this.listeners.remove(listener); + } + + public void updateAllSounds() + { + ++this.playTime; + + for (ITickableSound itickablesound : this.tickableSounds) + { + itickablesound.update(); + + if (itickablesound.isDonePlaying()) + { + this.stopSound(itickablesound); + } + else + { + String s = this.invPlayingSounds.get(itickablesound); + this.sndSystem.setVolume(s, this.getClampedVolume(itickablesound)); + this.sndSystem.setPitch(s, this.getClampedPitch(itickablesound)); + this.sndSystem.setPosition(s, itickablesound.getXPosF(), itickablesound.getYPosF(), itickablesound.getZPosF()); + } + } + + Iterator> iterator = this.playingSounds.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + String s1 = entry.getKey(); + ISound isound = entry.getValue(); + + if (!this.sndSystem.playing(s1)) + { + int i = ((Integer)this.playingSoundsStopTime.get(s1)).intValue(); + + if (i <= this.playTime) + { + int j = isound.getRepeatDelay(); + + if (isound.canRepeat() && j > 0) + { + this.delayedSounds.put(isound, Integer.valueOf(this.playTime + j)); + } + + iterator.remove(); + LOGGER.debug(LOG_MARKER, "Removed channel {} because it's not playing anymore", (Object)s1); + this.sndSystem.removeSource(s1); + this.playingSoundsStopTime.remove(s1); + + try + { + this.categorySounds.remove(isound.getCategory(), s1); + } + catch (RuntimeException var8) + { + ; + } + + if (isound instanceof ITickableSound) + { + this.tickableSounds.remove(isound); + } + } + } + } + + Iterator> iterator1 = this.delayedSounds.entrySet().iterator(); + + while (iterator1.hasNext()) + { + Entry entry1 = (Entry)iterator1.next(); + + if (this.playTime >= ((Integer)entry1.getValue()).intValue()) + { + ISound isound1 = entry1.getKey(); + + if (isound1 instanceof ITickableSound) + { + ((ITickableSound)isound1).update(); + } + + this.playSound(isound1); + iterator1.remove(); + } + } + } + + /** + * Returns true if the sound is playing or still within time + */ + public boolean isSoundPlaying(ISound sound) + { + if (!this.loaded) + { + return false; + } + else + { + String s = this.invPlayingSounds.get(sound); + + if (s == null) + { + return false; + } + else + { + return this.sndSystem.playing(s) || this.playingSoundsStopTime.containsKey(s) && ((Integer)this.playingSoundsStopTime.get(s)).intValue() <= this.playTime; + } + } + } + + public void stopSound(ISound sound) + { + if (this.loaded) + { + String s = this.invPlayingSounds.get(sound); + + if (s != null) + { + this.sndSystem.stop(s); + } + } + } + + public void playSound(ISound p_sound) + { + if (this.loaded) + { + p_sound = net.minecraftforge.client.ForgeHooksClient.playSound(this, p_sound); + if (p_sound == null) return; + + SoundEventAccessor soundeventaccessor = p_sound.createAccessor(this.sndHandler); + ResourceLocation resourcelocation = p_sound.getSoundLocation(); + + if (soundeventaccessor == null) + { + if (UNABLE_TO_PLAY.add(resourcelocation)) + { + LOGGER.warn(LOG_MARKER, "Unable to play unknown soundEvent: {}", (Object)resourcelocation); + } + } + else + { + if (!this.listeners.isEmpty()) + { + for (ISoundEventListener isoundeventlistener : this.listeners) + { + isoundeventlistener.soundPlay(p_sound, soundeventaccessor); + } + } + + if (this.sndSystem.getMasterVolume() <= 0.0F) + { + LOGGER.debug(LOG_MARKER, "Skipped playing soundEvent: {}, master volume was zero", (Object)resourcelocation); + } + else + { + Sound sound = p_sound.getSound(); + + if (sound == SoundHandler.MISSING_SOUND) + { + if (UNABLE_TO_PLAY.add(resourcelocation)) + { + LOGGER.warn(LOG_MARKER, "Unable to play empty soundEvent: {}", (Object)resourcelocation); + } + } + else + { + float f3 = p_sound.getVolume(); + float f = 16.0F; + + if (f3 > 1.0F) + { + f *= f3; + } + + SoundCategory soundcategory = p_sound.getCategory(); + float f1 = this.getClampedVolume(p_sound); + float f2 = this.getClampedPitch(p_sound); + + if (f1 == 0.0F) + { + LOGGER.debug(LOG_MARKER, "Skipped playing sound {}, volume was zero.", (Object)sound.getSoundLocation()); + } + else + { + boolean flag = p_sound.canRepeat() && p_sound.getRepeatDelay() == 0; + String s = MathHelper.getRandomUUID(ThreadLocalRandom.current()).toString(); + ResourceLocation resourcelocation1 = sound.getSoundAsOggLocation(); + + if (sound.isStreaming()) + { + this.sndSystem.newStreamingSource(false, s, getURLForSoundResource(resourcelocation1), resourcelocation1.toString(), flag, p_sound.getXPosF(), p_sound.getYPosF(), p_sound.getZPosF(), p_sound.getAttenuationType().getTypeInt(), f); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.sound.PlayStreamingSourceEvent(this, p_sound, s)); + } + else + { + this.sndSystem.newSource(false, s, getURLForSoundResource(resourcelocation1), resourcelocation1.toString(), flag, p_sound.getXPosF(), p_sound.getYPosF(), p_sound.getZPosF(), p_sound.getAttenuationType().getTypeInt(), f); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.sound.PlaySoundSourceEvent(this, p_sound, s)); + } + + LOGGER.debug(LOG_MARKER, "Playing sound {} for event {} as channel {}", sound.getSoundLocation(), resourcelocation, s); + this.sndSystem.setPitch(s, f2); + this.sndSystem.setVolume(s, f1); + this.sndSystem.play(s); + this.playingSoundsStopTime.put(s, Integer.valueOf(this.playTime + 20)); + this.playingSounds.put(s, p_sound); + this.categorySounds.put(soundcategory, s); + + if (p_sound instanceof ITickableSound) + { + this.tickableSounds.add((ITickableSound)p_sound); + } + } + } + } + } + } + } + + private float getClampedPitch(ISound soundIn) + { + return MathHelper.clamp(soundIn.getPitch(), 0.5F, 2.0F); + } + + private float getClampedVolume(ISound soundIn) + { + return MathHelper.clamp(soundIn.getVolume() * this.getVolume(soundIn.getCategory()), 0.0F, 1.0F); + } + + /** + * Pauses all currently playing sounds + */ + public void pauseAllSounds() + { + for (Entry entry : this.playingSounds.entrySet()) + { + String s = entry.getKey(); + boolean flag = this.isSoundPlaying(entry.getValue()); + + if (flag) + { + LOGGER.debug(LOG_MARKER, "Pausing channel {}", (Object)s); + this.sndSystem.pause(s); + this.pausedChannels.add(s); + } + } + } + + /** + * Resumes playing all currently playing sounds (after pauseAllSounds) + */ + public void resumeAllSounds() + { + for (String s : this.pausedChannels) + { + LOGGER.debug(LOG_MARKER, "Resuming channel {}", (Object)s); + this.sndSystem.play(s); + } + + this.pausedChannels.clear(); + } + + /** + * Adds a sound to play in n tick + */ + public void playDelayedSound(ISound sound, int delay) + { + this.delayedSounds.put(sound, Integer.valueOf(this.playTime + delay)); + } + + private static URL getURLForSoundResource(final ResourceLocation p_148612_0_) + { + String s = String.format("%s:%s:%s", "mcsounddomain", p_148612_0_.getResourceDomain(), p_148612_0_.getResourcePath()); + URLStreamHandler urlstreamhandler = new URLStreamHandler() + { + protected URLConnection openConnection(URL p_openConnection_1_) + { + return new URLConnection(p_openConnection_1_) + { + public void connect() throws IOException + { + } + public InputStream getInputStream() throws IOException + { + return Minecraft.getMinecraft().getResourceManager().getResource(p_148612_0_).getInputStream(); + } + }; + } + }; + + try + { + return new URL((URL)null, s, urlstreamhandler); + } + catch (MalformedURLException var4) + { + throw new Error("TODO: Sanely handle url exception! :D"); + } + } + + /** + * Sets the listener of sounds + */ + public void setListener(EntityPlayer player, float p_148615_2_) + { + setListener((net.minecraft.entity.Entity) player, p_148615_2_); + } + + public void setListener(net.minecraft.entity.Entity player, float p_148615_2_) + { + if (this.loaded && player != null) + { + float f = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * p_148615_2_; + float f1 = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * p_148615_2_; + double d0 = player.prevPosX + (player.posX - player.prevPosX) * (double)p_148615_2_; + double d1 = player.prevPosY + (player.posY - player.prevPosY) * (double)p_148615_2_ + (double)player.getEyeHeight(); + double d2 = player.prevPosZ + (player.posZ - player.prevPosZ) * (double)p_148615_2_; + float f2 = MathHelper.cos((f1 + 90.0F) * 0.017453292F); + float f3 = MathHelper.sin((f1 + 90.0F) * 0.017453292F); + float f4 = MathHelper.cos(-f * 0.017453292F); + float f5 = MathHelper.sin(-f * 0.017453292F); + float f6 = MathHelper.cos((-f + 90.0F) * 0.017453292F); + float f7 = MathHelper.sin((-f + 90.0F) * 0.017453292F); + float f8 = f2 * f4; + float f9 = f3 * f4; + float f10 = f2 * f6; + float f11 = f3 * f6; + this.sndSystem.setListenerPosition((float)d0, (float)d1, (float)d2); + this.sndSystem.setListenerOrientation(f8, f5, f9, f10, f7, f11); + } + } + + public void stop(String p_189567_1_, SoundCategory p_189567_2_) + { + if (p_189567_2_ != null) + { + for (String s : this.categorySounds.get(p_189567_2_)) + { + ISound isound = this.playingSounds.get(s); + + if (p_189567_1_.isEmpty()) + { + this.stopSound(isound); + } + else if (isound.getSoundLocation().equals(new ResourceLocation(p_189567_1_))) + { + this.stopSound(isound); + } + } + } + else if (p_189567_1_.isEmpty()) + { + this.stopAllSounds(); + } + else + { + for (ISound isound1 : this.playingSounds.values()) + { + if (isound1.getSoundLocation().equals(new ResourceLocation(p_189567_1_))) + { + this.stopSound(isound1); + } + } + } + } + + @SideOnly(Side.CLIENT) + class SoundSystemStarterThread extends SoundSystem + { + private SoundSystemStarterThread() + { + } + + public boolean playing(String p_playing_1_) + { + synchronized (SoundSystemConfig.THREAD_SYNC) + { + if (this.soundLibrary == null) + { + return false; + } + else + { + Source source = (Source)this.soundLibrary.getSources().get(p_playing_1_); + + if (source == null) + { + return false; + } + else + { + return source.playing() || source.paused() || source.preLoad; + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundRegistry.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundRegistry.java new file mode 100644 index 0000000..3e11d26 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/SoundRegistry.java @@ -0,0 +1,37 @@ +package net.minecraft.client.audio; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.RegistrySimple; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SoundRegistry extends RegistrySimple +{ + /** Contains all registered sound */ + private Map soundRegistry; + + /** + * Creates the Map we will use to map keys to their registered values. + */ + protected Map createUnderlyingMap() + { + this.soundRegistry = Maps.newHashMap(); + return this.soundRegistry; + } + + public void add(SoundEventAccessor accessor) + { + this.putObject(accessor.getLocation(), accessor); + } + + /** + * Reset the underlying sound map (Called on resource manager reload) + */ + public void clearMap() + { + this.soundRegistry.clear(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/audio/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/audio/package-info.java new file mode 100644 index 0000000..a221da3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/audio/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.audio; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/entity/AbstractClientPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/client/entity/AbstractClientPlayer.java new file mode 100644 index 0000000..573d057 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/entity/AbstractClientPlayer.java @@ -0,0 +1,175 @@ +package net.minecraft.client.entity; + +import com.mojang.authlib.GameProfile; +import java.io.File; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.client.renderer.ImageBufferDownload; +import net.minecraft.client.renderer.ThreadDownloadImageData; +import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class AbstractClientPlayer extends EntityPlayer +{ + private NetworkPlayerInfo playerInfo; + public float rotateElytraX; + public float rotateElytraY; + public float rotateElytraZ; + + public AbstractClientPlayer(World worldIn, GameProfile playerProfile) + { + super(worldIn, playerProfile); + } + + /** + * Returns true if the player is in spectator mode. + */ + public boolean isSpectator() + { + NetworkPlayerInfo networkplayerinfo = Minecraft.getMinecraft().getConnection().getPlayerInfo(this.getGameProfile().getId()); + return networkplayerinfo != null && networkplayerinfo.getGameType() == GameType.SPECTATOR; + } + + public boolean isCreative() + { + NetworkPlayerInfo networkplayerinfo = Minecraft.getMinecraft().getConnection().getPlayerInfo(this.getGameProfile().getId()); + return networkplayerinfo != null && networkplayerinfo.getGameType() == GameType.CREATIVE; + } + + /** + * Checks if this instance of AbstractClientPlayer has any associated player data. + */ + public boolean hasPlayerInfo() + { + return this.getPlayerInfo() != null; + } + + @Nullable + protected NetworkPlayerInfo getPlayerInfo() + { + if (this.playerInfo == null) + { + this.playerInfo = Minecraft.getMinecraft().getConnection().getPlayerInfo(this.getUniqueID()); + } + + return this.playerInfo; + } + + /** + * Returns true if the player has an associated skin. + */ + public boolean hasSkin() + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + return networkplayerinfo != null && networkplayerinfo.hasLocationSkin(); + } + + /** + * Returns true if the player instance has an associated skin. + */ + public ResourceLocation getLocationSkin() + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + return networkplayerinfo == null ? DefaultPlayerSkin.getDefaultSkin(this.getUniqueID()) : networkplayerinfo.getLocationSkin(); + } + + @Nullable + public ResourceLocation getLocationCape() + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + return networkplayerinfo == null ? null : networkplayerinfo.getLocationCape(); + } + + public boolean isPlayerInfoSet() + { + return this.getPlayerInfo() != null; + } + + /** + * Gets the special Elytra texture for the player. + */ + @Nullable + public ResourceLocation getLocationElytra() + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + return networkplayerinfo == null ? null : networkplayerinfo.getLocationElytra(); + } + + public static ThreadDownloadImageData getDownloadImageSkin(ResourceLocation resourceLocationIn, String username) + { + TextureManager texturemanager = Minecraft.getMinecraft().getTextureManager(); + ITextureObject itextureobject = texturemanager.getTexture(resourceLocationIn); + + if (itextureobject == null) + { + itextureobject = new ThreadDownloadImageData((File)null, String.format("http://skins.minecraft.net/MinecraftSkins/%s.png", StringUtils.stripControlCodes(username)), DefaultPlayerSkin.getDefaultSkin(getOfflineUUID(username)), new ImageBufferDownload()); + texturemanager.loadTexture(resourceLocationIn, itextureobject); + } + + return (ThreadDownloadImageData)itextureobject; + } + + /** + * Returns true if the username has an associated skin. + */ + public static ResourceLocation getLocationSkin(String username) + { + return new ResourceLocation("skins/" + StringUtils.stripControlCodes(username)); + } + + public String getSkinType() + { + NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo(); + return networkplayerinfo == null ? DefaultPlayerSkin.getSkinType(this.getUniqueID()) : networkplayerinfo.getSkinType(); + } + + public float getFovModifier() + { + float f = 1.0F; + + if (this.capabilities.isFlying) + { + f *= 1.1F; + } + + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + f = (float)((double)f * ((iattributeinstance.getAttributeValue() / (double)this.capabilities.getWalkSpeed() + 1.0D) / 2.0D)); + + if (this.capabilities.getWalkSpeed() == 0.0F || Float.isNaN(f) || Float.isInfinite(f)) + { + f = 1.0F; + } + + if (this.isHandActive() && this.getActiveItemStack().getItem() == Items.BOW) + { + int i = this.getItemInUseMaxCount(); + float f1 = (float)i / 20.0F; + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + else + { + f1 = f1 * f1; + } + + f *= 1.0F - f1 * 0.15F; + } + + return net.minecraftforge.client.ForgeHooksClient.getOffsetFOV(this, f); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/entity/EntityOtherPlayerMP.java b/build/tmp/recompileMc/sources/net/minecraft/client/entity/EntityOtherPlayerMP.java new file mode 100644 index 0000000..58c9e0f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/entity/EntityOtherPlayerMP.java @@ -0,0 +1,171 @@ +package net.minecraft.client.entity; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.Minecraft; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EntityOtherPlayerMP extends AbstractClientPlayer +{ + private int otherPlayerMPPosRotationIncrements; + private double otherPlayerMPX; + private double otherPlayerMPY; + private double otherPlayerMPZ; + private double otherPlayerMPYaw; + private double otherPlayerMPPitch; + + public EntityOtherPlayerMP(World worldIn, GameProfile gameProfileIn) + { + super(worldIn, gameProfileIn); + this.stepHeight = 1.0F; + this.noClip = true; + this.renderOffsetY = 0.25F; + } + + /** + * Checks if the entity is in range to render. + */ + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength() * 10.0D; + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * getRenderDistanceWeight(); + return distance < d0 * d0; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, source, amount); + return true; + } + + /** + * Set the position and rotation values directly without any clamping. + */ + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.otherPlayerMPX = x; + this.otherPlayerMPY = y; + this.otherPlayerMPZ = z; + this.otherPlayerMPYaw = (double)yaw; + this.otherPlayerMPPitch = (double)pitch; + this.otherPlayerMPPosRotationIncrements = posRotationIncrements; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.renderOffsetY = 0.0F; + super.onUpdate(); + this.prevLimbSwingAmount = this.limbSwingAmount; + double d0 = this.posX - this.prevPosX; + double d1 = this.posZ - this.prevPosZ; + float f = MathHelper.sqrt(d0 * d0 + d1 * d1) * 4.0F; + + if (f > 1.0F) + { + f = 1.0F; + } + + this.limbSwingAmount += (f - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.otherPlayerMPPosRotationIncrements > 0) + { + double d0 = this.posX + (this.otherPlayerMPX - this.posX) / (double)this.otherPlayerMPPosRotationIncrements; + double d1 = this.posY + (this.otherPlayerMPY - this.posY) / (double)this.otherPlayerMPPosRotationIncrements; + double d2 = this.posZ + (this.otherPlayerMPZ - this.posZ) / (double)this.otherPlayerMPPosRotationIncrements; + double d3; + + for (d3 = this.otherPlayerMPYaw - (double)this.rotationYaw; d3 < -180.0D; d3 += 360.0D) + { + ; + } + + while (d3 >= 180.0D) + { + d3 -= 360.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.otherPlayerMPPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.otherPlayerMPPitch - (double)this.rotationPitch) / (double)this.otherPlayerMPPosRotationIncrements); + --this.otherPlayerMPPosRotationIncrements; + this.setPosition(d0, d1, d2); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + + this.prevCameraYaw = this.cameraYaw; + this.updateArmSwingProgress(); + float f1 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + float f = (float)Math.atan(-this.motionY * 0.20000000298023224D) * 15.0F; + + if (f1 > 0.1F) + { + f1 = 0.1F; + } + + if (!this.onGround || this.getHealth() <= 0.0F) + { + f1 = 0.0F; + } + + if (this.onGround || this.getHealth() <= 0.0F) + { + f = 0.0F; + } + + this.cameraYaw += (f1 - this.cameraYaw) * 0.4F; + this.cameraPitch += (f - this.cameraPitch) * 0.8F; + this.world.profiler.startSection("push"); + this.collideWithNearbyEntities(); + this.world.profiler.endSection(); + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(component); + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return false; + } + + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, return + * the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return new BlockPos(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/entity/EntityPlayerSP.java b/build/tmp/recompileMc/sources/net/minecraft/client/entity/EntityPlayerSP.java new file mode 100644 index 0000000..9e23bdb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/entity/EntityPlayerSP.java @@ -0,0 +1,1354 @@ +package net.minecraft.client.entity; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ElytraSound; +import net.minecraft.client.audio.MovingSoundMinecartRiding; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiCommandBlock; +import net.minecraft.client.gui.GuiEnchantment; +import net.minecraft.client.gui.GuiHopper; +import net.minecraft.client.gui.GuiMerchant; +import net.minecraft.client.gui.GuiRepair; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiScreenBook; +import net.minecraft.client.gui.inventory.GuiBeacon; +import net.minecraft.client.gui.inventory.GuiBrewingStand; +import net.minecraft.client.gui.inventory.GuiChest; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiCrafting; +import net.minecraft.client.gui.inventory.GuiDispenser; +import net.minecraft.client.gui.inventory.GuiEditCommandBlockMinecart; +import net.minecraft.client.gui.inventory.GuiEditSign; +import net.minecraft.client.gui.inventory.GuiEditStructure; +import net.minecraft.client.gui.inventory.GuiFurnace; +import net.minecraft.client.gui.inventory.GuiScreenHorseInventory; +import net.minecraft.client.gui.inventory.GuiShulkerBox; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IJumpingMount; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemElytra; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.play.client.CPacketAnimation; +import net.minecraft.network.play.client.CPacketChatMessage; +import net.minecraft.network.play.client.CPacketClientStatus; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.network.play.client.CPacketEntityAction; +import net.minecraft.network.play.client.CPacketInput; +import net.minecraft.network.play.client.CPacketPlayer; +import net.minecraft.network.play.client.CPacketPlayerAbilities; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.network.play.client.CPacketRecipeInfo; +import net.minecraft.network.play.client.CPacketVehicleMove; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.stats.RecipeBook; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatisticsManager; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.MovementInput; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec2f; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IInteractionObject; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EntityPlayerSP extends AbstractClientPlayer +{ + public final NetHandlerPlayClient connection; + private final StatisticsManager statWriter; + public RecipeBook recipeBook; + private int permissionLevel = 0; + /** + * The last X position which was transmitted to the server, used to determine when the X position changes and needs + * to be re-trasmitted + */ + private double lastReportedPosX; + /** + * The last Y position which was transmitted to the server, used to determine when the Y position changes and needs + * to be re-transmitted + */ + private double lastReportedPosY; + /** + * The last Z position which was transmitted to the server, used to determine when the Z position changes and needs + * to be re-transmitted + */ + private double lastReportedPosZ; + /** + * The last yaw value which was transmitted to the server, used to determine when the yaw changes and needs to be + * re-transmitted + */ + private float lastReportedYaw; + /** + * The last pitch value which was transmitted to the server, used to determine when the pitch changes and needs to + * be re-transmitted + */ + private float lastReportedPitch; + private boolean prevOnGround; + /** the last sneaking state sent to the server */ + private boolean serverSneakState; + /** the last sprinting state sent to the server */ + private boolean serverSprintState; + /** + * Reset to 0 every time position is sent to the server, used to send periodic updates every 20 ticks even when the + * player is not moving. + */ + private int positionUpdateTicks; + private boolean hasValidHealth; + private String serverBrand; + public MovementInput movementInput; + protected Minecraft mc; + /** + * Used to tell if the player pressed forward twice. If this is at 0 and it's pressed (And they are allowed to + * sprint, aka enough food on the ground etc) it sets this to 7. If it's pressed and it's greater than 0 enable + * sprinting. + */ + protected int sprintToggleTimer; + /** Ticks left before sprinting is disabled. */ + public int sprintingTicksLeft; + public float renderArmYaw; + public float renderArmPitch; + public float prevRenderArmYaw; + public float prevRenderArmPitch; + private int horseJumpPowerCounter; + private float horseJumpPower; + /** The amount of time an entity has been in a Portal */ + public float timeInPortal; + /** The amount of time an entity has been in a Portal the previous tick */ + public float prevTimeInPortal; + private boolean handActive; + private EnumHand activeHand; + private boolean rowingBoat; + private boolean autoJumpEnabled = true; + private int autoJumpTime; + private boolean wasFallFlying; + + public EntityPlayerSP(Minecraft p_i47378_1_, World p_i47378_2_, NetHandlerPlayClient p_i47378_3_, StatisticsManager p_i47378_4_, RecipeBook p_i47378_5_) + { + super(p_i47378_2_, p_i47378_3_.getGameProfile()); + this.connection = p_i47378_3_; + this.statWriter = p_i47378_4_; + this.recipeBook = p_i47378_5_; + this.mc = p_i47378_1_; + this.dimension = 0; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, source, amount); + return false; + } + + /** + * Heal living entity (param: amount of half-hearts) + */ + public void heal(float healAmount) + { + } + + public boolean startRiding(Entity entityIn, boolean force) + { + if (!super.startRiding(entityIn, force)) + { + return false; + } + else + { + if (entityIn instanceof EntityMinecart) + { + this.mc.getSoundHandler().playSound(new MovingSoundMinecartRiding(this, (EntityMinecart)entityIn)); + } + + if (entityIn instanceof EntityBoat) + { + this.prevRotationYaw = entityIn.rotationYaw; + this.rotationYaw = entityIn.rotationYaw; + this.setRotationYawHead(entityIn.rotationYaw); + } + + return true; + } + } + + /** + * Dismounts this entity from the entity it is riding. + */ + public void dismountRidingEntity() + { + super.dismountRidingEntity(); + this.rowingBoat = false; + } + + /** + * interpolated look vector + */ + public Vec3d getLook(float partialTicks) + { + return this.getVectorForRotation(this.rotationPitch, this.rotationYaw); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (this.world.isBlockLoaded(new BlockPos(this.posX, 0.0D, this.posZ))) + { + super.onUpdate(); + + if (this.isRiding()) + { + this.connection.sendPacket(new CPacketPlayer.Rotation(this.rotationYaw, this.rotationPitch, this.onGround)); + this.connection.sendPacket(new CPacketInput(this.moveStrafing, this.moveForward, this.movementInput.jump, this.movementInput.sneak)); + Entity entity = this.getLowestRidingEntity(); + + if (entity != this && entity.canPassengerSteer()) + { + this.connection.sendPacket(new CPacketVehicleMove(entity)); + } + } + else + { + this.onUpdateWalkingPlayer(); + } + } + } + + /** + * called every tick when the player is on foot. Performs all the things that normally happen during movement. + */ + private void onUpdateWalkingPlayer() + { + boolean flag = this.isSprinting(); + + if (flag != this.serverSprintState) + { + if (flag) + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.START_SPRINTING)); + } + else + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.STOP_SPRINTING)); + } + + this.serverSprintState = flag; + } + + boolean flag1 = this.isSneaking(); + + if (flag1 != this.serverSneakState) + { + if (flag1) + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.START_SNEAKING)); + } + else + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.STOP_SNEAKING)); + } + + this.serverSneakState = flag1; + } + + if (this.isCurrentViewEntity()) + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + double d0 = this.posX - this.lastReportedPosX; + double d1 = axisalignedbb.minY - this.lastReportedPosY; + double d2 = this.posZ - this.lastReportedPosZ; + double d3 = (double)(this.rotationYaw - this.lastReportedYaw); + double d4 = (double)(this.rotationPitch - this.lastReportedPitch); + ++this.positionUpdateTicks; + boolean flag2 = d0 * d0 + d1 * d1 + d2 * d2 > 9.0E-4D || this.positionUpdateTicks >= 20; + boolean flag3 = d3 != 0.0D || d4 != 0.0D; + + if (this.isRiding()) + { + this.connection.sendPacket(new CPacketPlayer.PositionRotation(this.motionX, -999.0D, this.motionZ, this.rotationYaw, this.rotationPitch, this.onGround)); + flag2 = false; + } + else if (flag2 && flag3) + { + this.connection.sendPacket(new CPacketPlayer.PositionRotation(this.posX, axisalignedbb.minY, this.posZ, this.rotationYaw, this.rotationPitch, this.onGround)); + } + else if (flag2) + { + this.connection.sendPacket(new CPacketPlayer.Position(this.posX, axisalignedbb.minY, this.posZ, this.onGround)); + } + else if (flag3) + { + this.connection.sendPacket(new CPacketPlayer.Rotation(this.rotationYaw, this.rotationPitch, this.onGround)); + } + else if (this.prevOnGround != this.onGround) + { + this.connection.sendPacket(new CPacketPlayer(this.onGround)); + } + + if (flag2) + { + this.lastReportedPosX = this.posX; + this.lastReportedPosY = axisalignedbb.minY; + this.lastReportedPosZ = this.posZ; + this.positionUpdateTicks = 0; + } + + if (flag3) + { + this.lastReportedYaw = this.rotationYaw; + this.lastReportedPitch = this.rotationPitch; + } + + this.prevOnGround = this.onGround; + this.autoJumpEnabled = this.mc.gameSettings.autoJump; + } + } + + /** + * Drop one item out of the currently selected stack if {@code dropAll} is false. If {@code dropItem} is true the + * entire stack is dropped. + */ + @Nullable + public EntityItem dropItem(boolean dropAll) + { + CPacketPlayerDigging.Action cpacketplayerdigging$action = dropAll ? CPacketPlayerDigging.Action.DROP_ALL_ITEMS : CPacketPlayerDigging.Action.DROP_ITEM; + this.connection.sendPacket(new CPacketPlayerDigging(cpacketplayerdigging$action, BlockPos.ORIGIN, EnumFacing.DOWN)); + return null; + } + + public ItemStack dropItemAndGetStack(EntityItem p_184816_1_) + { + return ItemStack.EMPTY; + } + + /** + * Sends a chat message from the player. + */ + public void sendChatMessage(String message) + { + this.connection.sendPacket(new CPacketChatMessage(message)); + } + + public void swingArm(EnumHand hand) + { + super.swingArm(hand); + this.connection.sendPacket(new CPacketAnimation(hand)); + } + + public void respawnPlayer() + { + this.connection.sendPacket(new CPacketClientStatus(CPacketClientStatus.State.PERFORM_RESPAWN)); + } + + /** + * Deals damage to the entity. This will take the armor of the entity into consideration before damaging the health + * bar. + */ + protected void damageEntity(DamageSource damageSrc, float damageAmount) + { + if (!this.isEntityInvulnerable(damageSrc)) + { + this.setHealth(this.getHealth() - damageAmount); + } + } + + /** + * set current crafting inventory back to the 2x2 square + */ + public void closeScreen() + { + this.connection.sendPacket(new CPacketCloseWindow(this.openContainer.windowId)); + this.closeScreenAndDropStack(); + } + + public void closeScreenAndDropStack() + { + this.inventory.setItemStack(ItemStack.EMPTY); + super.closeScreen(); + this.mc.displayGuiScreen((GuiScreen)null); + } + + /** + * Updates health locally. + */ + public void setPlayerSPHealth(float health) + { + if (this.hasValidHealth) + { + float f = this.getHealth() - health; + + if (f <= 0.0F) + { + this.setHealth(health); + + if (f < 0.0F) + { + this.hurtResistantTime = this.maxHurtResistantTime / 2; + } + } + else + { + this.lastDamage = f; + this.setHealth(this.getHealth()); + this.hurtResistantTime = this.maxHurtResistantTime; + this.damageEntity(DamageSource.GENERIC, f); + this.maxHurtTime = 10; + this.hurtTime = this.maxHurtTime; + } + } + else + { + this.setHealth(health); + this.hasValidHealth = true; + } + } + + /** + * Adds a value to a statistic field. + */ + public void addStat(StatBase stat, int amount) + { + if (stat != null) + { + if (stat.isIndependent) + { + super.addStat(stat, amount); + } + } + } + + /** + * Sends the player's abilities to the server (if there is one). + */ + public void sendPlayerAbilities() + { + this.connection.sendPacket(new CPacketPlayerAbilities(this.capabilities)); + } + + /** + * returns true if this is an EntityPlayerSP, or the logged in player. + */ + public boolean isUser() + { + return true; + } + + protected void sendHorseJump() + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.START_RIDING_JUMP, MathHelper.floor(this.getHorseJumpPower() * 100.0F))); + } + + public void sendHorseInventory() + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.OPEN_INVENTORY)); + } + + /** + * Sets the brand of the currently connected server. Server brand information is sent over the {@code MC|Brand} + * plugin channel, and is used to identify modded servers in crash reports. + */ + public void setServerBrand(String brand) + { + this.serverBrand = brand; + } + + /** + * Gets the brand of the currently connected server. May be null if the server hasn't yet sent brand information. + * Server brand information is sent over the {@code MC|Brand} plugin channel, and is used to identify modded servers + * in crash reports. + */ + public String getServerBrand() + { + return this.serverBrand; + } + + public StatisticsManager getStatFileWriter() + { + return this.statWriter; + } + + public RecipeBook getRecipeBook() + { + return this.recipeBook; + } + + public void removeRecipeHighlight(IRecipe p_193103_1_) + { + if (this.recipeBook.isNew(p_193103_1_)) + { + this.recipeBook.markSeen(p_193103_1_); + this.connection.sendPacket(new CPacketRecipeInfo(p_193103_1_)); + } + } + + public int getPermissionLevel() + { + return this.permissionLevel; + } + + public void setPermissionLevel(int p_184839_1_) + { + this.permissionLevel = p_184839_1_; + } + + public void sendStatusMessage(ITextComponent chatComponent, boolean actionBar) + { + if (actionBar) + { + this.mc.ingameGUI.setOverlayMessage(chatComponent, false); + } + else + { + this.mc.ingameGUI.getChatGUI().printChatMessage(chatComponent); + } + } + + private boolean isHeadspaceFree(BlockPos pos, int height) + { + for (int y = 0; y < height; y++) + { + if (!isOpenBlockSpace(pos.add(0, y, 0))) return false; + } + return true; + } + + protected boolean pushOutOfBlocks(double x, double y, double z) + { + if (this.noClip) + { + return false; + } + else + { + BlockPos blockpos = new BlockPos(x, y, z); + double d0 = x - (double)blockpos.getX(); + double d1 = z - (double)blockpos.getZ(); + + int entHeight = Math.max((int)Math.ceil(this.height), 1); + + boolean inTranslucentBlock = !this.isHeadspaceFree(blockpos, entHeight); + + if (inTranslucentBlock) + { + int i = -1; + double d2 = 9999.0D; + + if (this.isHeadspaceFree(blockpos.west(), entHeight) && d0 < d2) + { + d2 = d0; + i = 0; + } + + if (this.isHeadspaceFree(blockpos.east(), entHeight) && 1.0D - d0 < d2) + { + d2 = 1.0D - d0; + i = 1; + } + + if (this.isHeadspaceFree(blockpos.north(), entHeight) && d1 < d2) + { + d2 = d1; + i = 4; + } + + if (this.isHeadspaceFree(blockpos.south(), entHeight) && 1.0D - d1 < d2) + { + d2 = 1.0D - d1; + i = 5; + } + + float f = 0.1F; + + if (i == 0) + { + this.motionX = -0.10000000149011612D; + } + + if (i == 1) + { + this.motionX = 0.10000000149011612D; + } + + if (i == 4) + { + this.motionZ = -0.10000000149011612D; + } + + if (i == 5) + { + this.motionZ = 0.10000000149011612D; + } + } + + return false; + } + } + + /** + * Returns true if the block at the given BlockPos and the block above it are NOT full cubes. + */ + private boolean isOpenBlockSpace(BlockPos pos) + { + IBlockState iblockstate = world.getBlockState(pos); + return !iblockstate.getBlock().isNormalCube(iblockstate, world, pos); + } + + /** + * Set sprinting switch for Entity. + */ + public void setSprinting(boolean sprinting) + { + super.setSprinting(sprinting); + this.sprintingTicksLeft = 0; + } + + /** + * Sets the current XP, total XP, and level number. + */ + public void setXPStats(float currentXP, int maxXP, int level) + { + this.experience = currentXP; + this.experienceTotal = maxXP; + this.experienceLevel = level; + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + this.mc.ingameGUI.getChatGUI().printChatMessage(component); + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return permLevel <= this.getPermissionLevel(); + } + + /** + * Handler for {@link World#setEntityState} + */ + public void handleStatusUpdate(byte id) + { + if (id >= 24 && id <= 28) + { + this.setPermissionLevel(id - 24); + } + else + { + super.handleStatusUpdate(id); + } + } + + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, return + * the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return new BlockPos(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D); + } + + public void playSound(SoundEvent soundIn, float volume, float pitch) + { + net.minecraftforge.event.entity.PlaySoundAtEntityEvent event = net.minecraftforge.event.ForgeEventFactory.onPlaySoundAtEntity(this, soundIn, this.getSoundCategory(), volume, pitch); + if (event.isCanceled() || event.getSound() == null) return; + soundIn = event.getSound(); + volume = event.getVolume(); + pitch = event.getPitch(); + + this.world.playSound(this.posX, this.posY, this.posZ, soundIn, event.getCategory(), volume, pitch, false); + } + + /** + * Returns whether the entity is in a server world + */ + public boolean isServerWorld() + { + return true; + } + + public void setActiveHand(EnumHand hand) + { + ItemStack itemstack = this.getHeldItem(hand); + + if (!itemstack.isEmpty() && !this.isHandActive()) + { + super.setActiveHand(hand); + this.handActive = true; + this.activeHand = hand; + } + } + + public boolean isHandActive() + { + return this.handActive; + } + + public void resetActiveHand() + { + super.resetActiveHand(); + this.handActive = false; + } + + public EnumHand getActiveHand() + { + return this.activeHand; + } + + public void notifyDataManagerChange(DataParameter key) + { + super.notifyDataManagerChange(key); + + if (HAND_STATES.equals(key)) + { + boolean flag = (((Byte)this.dataManager.get(HAND_STATES)).byteValue() & 1) > 0; + EnumHand enumhand = (((Byte)this.dataManager.get(HAND_STATES)).byteValue() & 2) > 0 ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND; + + if (flag && !this.handActive) + { + this.setActiveHand(enumhand); + } + else if (!flag && this.handActive) + { + this.resetActiveHand(); + } + } + + if (FLAGS.equals(key) && this.isElytraFlying() && !this.wasFallFlying) + { + this.mc.getSoundHandler().playSound(new ElytraSound(this)); + } + } + + public boolean isRidingHorse() + { + Entity entity = this.getRidingEntity(); + return this.isRiding() && entity instanceof IJumpingMount && ((IJumpingMount)entity).canJump(); + } + + public float getHorseJumpPower() + { + return this.horseJumpPower; + } + + public void openEditSign(TileEntitySign signTile) + { + this.mc.displayGuiScreen(new GuiEditSign(signTile)); + } + + public void displayGuiEditCommandCart(CommandBlockBaseLogic commandBlock) + { + this.mc.displayGuiScreen(new GuiEditCommandBlockMinecart(commandBlock)); + } + + public void displayGuiCommandBlock(TileEntityCommandBlock commandBlock) + { + this.mc.displayGuiScreen(new GuiCommandBlock(commandBlock)); + } + + public void openEditStructure(TileEntityStructure structure) + { + this.mc.displayGuiScreen(new GuiEditStructure(structure)); + } + + public void openBook(ItemStack stack, EnumHand hand) + { + Item item = stack.getItem(); + + if (item == Items.WRITABLE_BOOK) + { + this.mc.displayGuiScreen(new GuiScreenBook(this, stack, true)); + } + } + + /** + * Displays the GUI for interacting with a chest inventory. + */ + public void displayGUIChest(IInventory chestInventory) + { + String s = chestInventory instanceof IInteractionObject ? ((IInteractionObject)chestInventory).getGuiID() : "minecraft:container"; + + if ("minecraft:chest".equals(s)) + { + this.mc.displayGuiScreen(new GuiChest(this.inventory, chestInventory)); + } + else if ("minecraft:hopper".equals(s)) + { + this.mc.displayGuiScreen(new GuiHopper(this.inventory, chestInventory)); + } + else if ("minecraft:furnace".equals(s)) + { + this.mc.displayGuiScreen(new GuiFurnace(this.inventory, chestInventory)); + } + else if ("minecraft:brewing_stand".equals(s)) + { + this.mc.displayGuiScreen(new GuiBrewingStand(this.inventory, chestInventory)); + } + else if ("minecraft:beacon".equals(s)) + { + this.mc.displayGuiScreen(new GuiBeacon(this.inventory, chestInventory)); + } + else if (!"minecraft:dispenser".equals(s) && !"minecraft:dropper".equals(s)) + { + if ("minecraft:shulker_box".equals(s)) + { + this.mc.displayGuiScreen(new GuiShulkerBox(this.inventory, chestInventory)); + } + else + { + this.mc.displayGuiScreen(new GuiChest(this.inventory, chestInventory)); + } + } + else + { + this.mc.displayGuiScreen(new GuiDispenser(this.inventory, chestInventory)); + } + } + + public void openGuiHorseInventory(AbstractHorse horse, IInventory inventoryIn) + { + this.mc.displayGuiScreen(new GuiScreenHorseInventory(this.inventory, inventoryIn, horse)); + } + + public void displayGui(IInteractionObject guiOwner) + { + String s = guiOwner.getGuiID(); + + if ("minecraft:crafting_table".equals(s)) + { + this.mc.displayGuiScreen(new GuiCrafting(this.inventory, this.world)); + } + else if ("minecraft:enchanting_table".equals(s)) + { + this.mc.displayGuiScreen(new GuiEnchantment(this.inventory, this.world, guiOwner)); + } + else if ("minecraft:anvil".equals(s)) + { + this.mc.displayGuiScreen(new GuiRepair(this.inventory, this.world)); + } + } + + public void displayVillagerTradeGui(IMerchant villager) + { + this.mc.displayGuiScreen(new GuiMerchant(this.inventory, villager, this.world)); + } + + /** + * Called when the entity is dealt a critical hit. + */ + public void onCriticalHit(Entity entityHit) + { + this.mc.effectRenderer.emitParticleAtEntity(entityHit, EnumParticleTypes.CRIT); + } + + public void onEnchantmentCritical(Entity entityHit) + { + this.mc.effectRenderer.emitParticleAtEntity(entityHit, EnumParticleTypes.CRIT_MAGIC); + } + + /** + * Returns if this entity is sneaking. + */ + public boolean isSneaking() + { + boolean flag = this.movementInput != null && this.movementInput.sneak; + return flag && !this.sleeping; + } + + public void updateEntityActionState() + { + super.updateEntityActionState(); + + if (this.isCurrentViewEntity()) + { + this.moveStrafing = this.movementInput.moveStrafe; + this.moveForward = this.movementInput.moveForward; + this.isJumping = this.movementInput.jump; + this.prevRenderArmYaw = this.renderArmYaw; + this.prevRenderArmPitch = this.renderArmPitch; + this.renderArmPitch = (float)((double)this.renderArmPitch + (double)(this.rotationPitch - this.renderArmPitch) * 0.5D); + this.renderArmYaw = (float)((double)this.renderArmYaw + (double)(this.rotationYaw - this.renderArmYaw) * 0.5D); + } + } + + protected boolean isCurrentViewEntity() + { + return this.mc.getRenderViewEntity() == this; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + ++this.sprintingTicksLeft; + + if (this.sprintToggleTimer > 0) + { + --this.sprintToggleTimer; + } + + this.prevTimeInPortal = this.timeInPortal; + + if (this.inPortal) + { + if (this.mc.currentScreen != null && !this.mc.currentScreen.doesGuiPauseGame()) + { + if (this.mc.currentScreen instanceof GuiContainer) + { + this.closeScreen(); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } + + if (this.timeInPortal == 0.0F) + { + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_PORTAL_TRIGGER, this.rand.nextFloat() * 0.4F + 0.8F)); + } + + this.timeInPortal += 0.0125F; + + if (this.timeInPortal >= 1.0F) + { + this.timeInPortal = 1.0F; + } + + this.inPortal = false; + } + else if (this.isPotionActive(MobEffects.NAUSEA) && this.getActivePotionEffect(MobEffects.NAUSEA).getDuration() > 60) + { + this.timeInPortal += 0.006666667F; + + if (this.timeInPortal > 1.0F) + { + this.timeInPortal = 1.0F; + } + } + else + { + if (this.timeInPortal > 0.0F) + { + this.timeInPortal -= 0.05F; + } + + if (this.timeInPortal < 0.0F) + { + this.timeInPortal = 0.0F; + } + } + + if (this.timeUntilPortal > 0) + { + --this.timeUntilPortal; + } + + boolean flag = this.movementInput.jump; + boolean flag1 = this.movementInput.sneak; + float f = 0.8F; + boolean flag2 = this.movementInput.moveForward >= 0.8F; + this.movementInput.updatePlayerMoveState(); + net.minecraftforge.client.ForgeHooksClient.onInputUpdate(this, this.movementInput); + this.mc.getTutorial().handleMovement(this.movementInput); + + if (this.isHandActive() && !this.isRiding()) + { + this.movementInput.moveStrafe *= 0.2F; + this.movementInput.moveForward *= 0.2F; + this.sprintToggleTimer = 0; + } + + boolean flag3 = false; + + if (this.autoJumpTime > 0) + { + --this.autoJumpTime; + flag3 = true; + this.movementInput.jump = true; + } + + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + net.minecraftforge.client.event.PlayerSPPushOutOfBlocksEvent event = new net.minecraftforge.client.event.PlayerSPPushOutOfBlocksEvent(this, axisalignedbb); + if(!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) { axisalignedbb = event.getEntityBoundingBox(); + this.pushOutOfBlocks(this.posX - (double)this.width * 0.35D, axisalignedbb.minY + 0.5D, this.posZ + (double)this.width * 0.35D); + this.pushOutOfBlocks(this.posX - (double)this.width * 0.35D, axisalignedbb.minY + 0.5D, this.posZ - (double)this.width * 0.35D); + this.pushOutOfBlocks(this.posX + (double)this.width * 0.35D, axisalignedbb.minY + 0.5D, this.posZ - (double)this.width * 0.35D); + this.pushOutOfBlocks(this.posX + (double)this.width * 0.35D, axisalignedbb.minY + 0.5D, this.posZ + (double)this.width * 0.35D); + } + boolean flag4 = (float)this.getFoodStats().getFoodLevel() > 6.0F || this.capabilities.allowFlying; + + if (this.onGround && !flag1 && !flag2 && this.movementInput.moveForward >= 0.8F && !this.isSprinting() && flag4 && !this.isHandActive() && !this.isPotionActive(MobEffects.BLINDNESS)) + { + if (this.sprintToggleTimer <= 0 && !this.mc.gameSettings.keyBindSprint.isKeyDown()) + { + this.sprintToggleTimer = 7; + } + else + { + this.setSprinting(true); + } + } + + if (!this.isSprinting() && this.movementInput.moveForward >= 0.8F && flag4 && !this.isHandActive() && !this.isPotionActive(MobEffects.BLINDNESS) && this.mc.gameSettings.keyBindSprint.isKeyDown()) + { + this.setSprinting(true); + } + + if (this.isSprinting() && (this.movementInput.moveForward < 0.8F || this.collidedHorizontally || !flag4)) + { + this.setSprinting(false); + } + + if (this.capabilities.allowFlying) + { + if (this.mc.playerController.isSpectatorMode()) + { + if (!this.capabilities.isFlying) + { + this.capabilities.isFlying = true; + this.sendPlayerAbilities(); + } + } + else if (!flag && this.movementInput.jump && !flag3) + { + if (this.flyToggleTimer == 0) + { + this.flyToggleTimer = 7; + } + else + { + this.capabilities.isFlying = !this.capabilities.isFlying; + this.sendPlayerAbilities(); + this.flyToggleTimer = 0; + } + } + } + + if (this.movementInput.jump && !flag && !this.onGround && this.motionY < 0.0D && !this.isElytraFlying() && !this.capabilities.isFlying) + { + ItemStack itemstack = this.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + + if (itemstack.getItem() == Items.ELYTRA && ItemElytra.isUsable(itemstack)) + { + this.connection.sendPacket(new CPacketEntityAction(this, CPacketEntityAction.Action.START_FALL_FLYING)); + } + } + + this.wasFallFlying = this.isElytraFlying(); + + if (this.capabilities.isFlying && this.isCurrentViewEntity()) + { + if (this.movementInput.sneak) + { + this.movementInput.moveStrafe = (float)((double)this.movementInput.moveStrafe / 0.3D); + this.movementInput.moveForward = (float)((double)this.movementInput.moveForward / 0.3D); + this.motionY -= (double)(this.capabilities.getFlySpeed() * 3.0F); + } + + if (this.movementInput.jump) + { + this.motionY += (double)(this.capabilities.getFlySpeed() * 3.0F); + } + } + + if (this.isRidingHorse()) + { + IJumpingMount ijumpingmount = (IJumpingMount)this.getRidingEntity(); + + if (this.horseJumpPowerCounter < 0) + { + ++this.horseJumpPowerCounter; + + if (this.horseJumpPowerCounter == 0) + { + this.horseJumpPower = 0.0F; + } + } + + if (flag && !this.movementInput.jump) + { + this.horseJumpPowerCounter = -10; + ijumpingmount.setJumpPower(MathHelper.floor(this.getHorseJumpPower() * 100.0F)); + this.sendHorseJump(); + } + else if (!flag && this.movementInput.jump) + { + this.horseJumpPowerCounter = 0; + this.horseJumpPower = 0.0F; + } + else if (flag) + { + ++this.horseJumpPowerCounter; + + if (this.horseJumpPowerCounter < 10) + { + this.horseJumpPower = (float)this.horseJumpPowerCounter * 0.1F; + } + else + { + this.horseJumpPower = 0.8F + 2.0F / (float)(this.horseJumpPowerCounter - 9) * 0.1F; + } + } + } + else + { + this.horseJumpPower = 0.0F; + } + + super.onLivingUpdate(); + + if (this.onGround && this.capabilities.isFlying && !this.mc.playerController.isSpectatorMode()) + { + this.capabilities.isFlying = false; + this.sendPlayerAbilities(); + } + } + + /** + * Handles updating while riding another entity + */ + public void updateRidden() + { + super.updateRidden(); + this.rowingBoat = false; + + if (this.getRidingEntity() instanceof EntityBoat) + { + EntityBoat entityboat = (EntityBoat)this.getRidingEntity(); + entityboat.updateInputs(this.movementInput.leftKeyDown, this.movementInput.rightKeyDown, this.movementInput.forwardKeyDown, this.movementInput.backKeyDown); + this.rowingBoat |= this.movementInput.leftKeyDown || this.movementInput.rightKeyDown || this.movementInput.forwardKeyDown || this.movementInput.backKeyDown; + } + } + + public boolean isRowingBoat() + { + return this.rowingBoat; + } + + /** + * Removes the given potion effect from the active potion map and returns it. Does not call cleanup callbacks for + * the end of the potion effect. + */ + @Nullable + public PotionEffect removeActivePotionEffect(@Nullable Potion potioneffectin) + { + if (potioneffectin == MobEffects.NAUSEA) + { + this.prevTimeInPortal = 0.0F; + this.timeInPortal = 0.0F; + } + + return super.removeActivePotionEffect(potioneffectin); + } + + /** + * Tries to move the entity towards the specified location. + */ + public void move(MoverType type, double x, double y, double z) + { + double d0 = this.posX; + double d1 = this.posZ; + super.move(type, x, y, z); + this.updateAutoJump((float)(this.posX - d0), (float)(this.posZ - d1)); + } + + public boolean isAutoJumpEnabled() + { + return this.autoJumpEnabled; + } + + protected void updateAutoJump(float p_189810_1_, float p_189810_2_) + { + if (this.isAutoJumpEnabled()) + { + if (this.autoJumpTime <= 0 && this.onGround && !this.isSneaking() && !this.isRiding()) + { + Vec2f vec2f = this.movementInput.getMoveVector(); + + if (vec2f.x != 0.0F || vec2f.y != 0.0F) + { + Vec3d vec3d = new Vec3d(this.posX, this.getEntityBoundingBox().minY, this.posZ); + double d0 = this.posX + (double)p_189810_1_; + double d1 = this.posZ + (double)p_189810_2_; + Vec3d vec3d1 = new Vec3d(d0, this.getEntityBoundingBox().minY, d1); + Vec3d vec3d2 = new Vec3d((double)p_189810_1_, 0.0D, (double)p_189810_2_); + float f = this.getAIMoveSpeed(); + float f1 = (float)vec3d2.lengthSquared(); + + if (f1 <= 0.001F) + { + float f2 = f * vec2f.x; + float f3 = f * vec2f.y; + float f4 = MathHelper.sin(this.rotationYaw * 0.017453292F); + float f5 = MathHelper.cos(this.rotationYaw * 0.017453292F); + vec3d2 = new Vec3d((double)(f2 * f5 - f3 * f4), vec3d2.y, (double)(f3 * f5 + f2 * f4)); + f1 = (float)vec3d2.lengthSquared(); + + if (f1 <= 0.001F) + { + return; + } + } + + float f12 = (float)MathHelper.fastInvSqrt((double)f1); + Vec3d vec3d12 = vec3d2.scale((double)f12); + Vec3d vec3d13 = this.getForward(); + float f13 = (float)(vec3d13.x * vec3d12.x + vec3d13.z * vec3d12.z); + + if (f13 >= -0.15F) + { + BlockPos blockpos = new BlockPos(this.posX, this.getEntityBoundingBox().maxY, this.posZ); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getCollisionBoundingBox(this.world, blockpos) == null) + { + blockpos = blockpos.up(); + IBlockState iblockstate1 = this.world.getBlockState(blockpos); + + if (iblockstate1.getCollisionBoundingBox(this.world, blockpos) == null) + { + float f6 = 7.0F; + float f7 = 1.2F; + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + f7 += (float)(this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.75F; + } + + float f8 = Math.max(f * 7.0F, 1.0F / f12); + Vec3d vec3d4 = vec3d1.add(vec3d12.scale((double)f8)); + float f9 = this.width; + float f10 = this.height; + AxisAlignedBB axisalignedbb = (new AxisAlignedBB(vec3d, vec3d4.addVector(0.0D, (double)f10, 0.0D))).grow((double)f9, 0.0D, (double)f9); + Vec3d lvt_19_1_ = vec3d.addVector(0.0D, 0.5099999904632568D, 0.0D); + vec3d4 = vec3d4.addVector(0.0D, 0.5099999904632568D, 0.0D); + Vec3d vec3d5 = vec3d12.crossProduct(new Vec3d(0.0D, 1.0D, 0.0D)); + Vec3d vec3d6 = vec3d5.scale((double)(f9 * 0.5F)); + Vec3d vec3d7 = lvt_19_1_.subtract(vec3d6); + Vec3d vec3d8 = vec3d4.subtract(vec3d6); + Vec3d vec3d9 = lvt_19_1_.add(vec3d6); + Vec3d vec3d10 = vec3d4.add(vec3d6); + List list = this.world.getCollisionBoxes(this, axisalignedbb); + + if (!list.isEmpty()) + { + ; + } + + float f11 = Float.MIN_VALUE; + label86: + + for (AxisAlignedBB axisalignedbb2 : list) + { + if (axisalignedbb2.intersects(vec3d7, vec3d8) || axisalignedbb2.intersects(vec3d9, vec3d10)) + { + f11 = (float)axisalignedbb2.maxY; + Vec3d vec3d11 = axisalignedbb2.getCenter(); + BlockPos blockpos1 = new BlockPos(vec3d11); + int i = 1; + + while (true) + { + if ((float)i >= f7) + { + break label86; + } + + BlockPos blockpos2 = blockpos1.up(i); + IBlockState iblockstate2 = this.world.getBlockState(blockpos2); + AxisAlignedBB axisalignedbb1; + + if ((axisalignedbb1 = iblockstate2.getCollisionBoundingBox(this.world, blockpos2)) != null) + { + f11 = (float)axisalignedbb1.maxY + (float)blockpos2.getY(); + + if ((double)f11 - this.getEntityBoundingBox().minY > (double)f7) + { + return; + } + } + + if (i > 1) + { + blockpos = blockpos.up(); + IBlockState iblockstate3 = this.world.getBlockState(blockpos); + + if (iblockstate3.getCollisionBoundingBox(this.world, blockpos) != null) + { + return; + } + } + + ++i; + } + } + } + + if (f11 != Float.MIN_VALUE) + { + float f14 = (float)((double)f11 - this.getEntityBoundingBox().minY); + + if (f14 > 0.5F && f14 <= f7) + { + this.autoJumpTime = 1; + } + } + } + } + } + } + } + } + } + + public void updateSyncFields(EntityPlayerSP old) + { + this.lastReportedPosX = old.lastReportedPosX; + this.lastReportedPosY = old.lastReportedPosY; + this.lastReportedPosZ = old.lastReportedPosZ; + this.lastReportedYaw = old.lastReportedYaw; + this.lastReportedPitch = old.lastReportedPitch; + this.prevOnGround = old.prevOnGround; + this.serverSneakState = old.serverSneakState; + this.serverSprintState = old.serverSprintState; + this.positionUpdateTicks = old.positionUpdateTicks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/entity/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/entity/package-info.java new file mode 100644 index 0000000..3d1d2d2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/entity/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.entity; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/BossInfoClient.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/BossInfoClient.java new file mode 100644 index 0000000..3363899 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/BossInfoClient.java @@ -0,0 +1,60 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.play.server.SPacketUpdateBossInfo; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BossInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BossInfoClient extends BossInfo +{ + protected float rawPercent; + protected long percentSetTime; + + public BossInfoClient(SPacketUpdateBossInfo packetIn) + { + super(packetIn.getUniqueId(), packetIn.getName(), packetIn.getColor(), packetIn.getOverlay()); + this.rawPercent = packetIn.getPercent(); + this.percent = packetIn.getPercent(); + this.percentSetTime = Minecraft.getSystemTime(); + this.setDarkenSky(packetIn.shouldDarkenSky()); + this.setPlayEndBossMusic(packetIn.shouldPlayEndBossMusic()); + this.setCreateFog(packetIn.shouldCreateFog()); + } + + public void setPercent(float percentIn) + { + this.percent = this.getPercent(); + this.rawPercent = percentIn; + this.percentSetTime = Minecraft.getSystemTime(); + } + + public float getPercent() + { + long i = Minecraft.getSystemTime() - this.percentSetTime; + float f = MathHelper.clamp((float)i / 100.0F, 0.0F, 1.0F); + return this.percent + (this.rawPercent - this.percent) * f; + } + + public void updateFromPacket(SPacketUpdateBossInfo packetIn) + { + switch (packetIn.getOperation()) + { + case UPDATE_NAME: + this.setName(packetIn.getName()); + break; + case UPDATE_PCT: + this.setPercent(packetIn.getPercent()); + break; + case UPDATE_STYLE: + this.setColor(packetIn.getColor()); + this.setOverlay(packetIn.getOverlay()); + break; + case UPDATE_PROPERTIES: + this.setDarkenSky(packetIn.shouldDarkenSky()); + this.setPlayEndBossMusic(packetIn.shouldPlayEndBossMusic()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ChatLine.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ChatLine.java new file mode 100644 index 0000000..22fc22b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ChatLine.java @@ -0,0 +1,37 @@ +package net.minecraft.client.gui; + +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ChatLine +{ + /** GUI Update Counter value this Line was created at */ + private final int updateCounterCreated; + private final ITextComponent lineString; + /** int value to refer to existing Chat Lines, can be 0 which means unreferrable */ + private final int chatLineID; + + public ChatLine(int updateCounterCreatedIn, ITextComponent lineStringIn, int chatLineIDIn) + { + this.lineString = lineStringIn; + this.updateCounterCreated = updateCounterCreatedIn; + this.chatLineID = chatLineIDIn; + } + + public ITextComponent getChatComponent() + { + return this.lineString; + } + + public int getUpdatedCounter() + { + return this.updateCounterCreated; + } + + public int getChatLineID() + { + return this.chatLineID; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/FontRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/FontRenderer.java new file mode 100644 index 0000000..dabf5e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/FontRenderer.java @@ -0,0 +1,1020 @@ +package net.minecraft.client.gui; + +import com.ibm.icu.text.ArabicShaping; +import com.ibm.icu.text.ArabicShapingException; +import com.ibm.icu.text.Bidi; +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; + +@SideOnly(Side.CLIENT) +public class FontRenderer implements IResourceManagerReloadListener +{ + private static final ResourceLocation[] UNICODE_PAGE_LOCATIONS = new ResourceLocation[256]; + /** Array of width of all the characters in default.png */ + protected final int[] charWidth = new int[256]; + /** the height in pixels of default text */ + public int FONT_HEIGHT = 9; + public Random fontRandom = new Random(); + /** Array of the start/end column (in upper/lower nibble) for every glyph in the /font directory. */ + protected final byte[] glyphWidth = new byte[65536]; + /** + * Array of RGB triplets defining the 16 standard chat colors followed by 16 darker version of the same colors for + * drop shadows. + */ + private final int[] colorCode = new int[32]; + protected final ResourceLocation locationFontTexture; + /** The RenderEngine used to load and setup glyph textures. */ + private final TextureManager renderEngine; + /** Current X coordinate at which to draw the next character. */ + protected float posX; + /** Current Y coordinate at which to draw the next character. */ + protected float posY; + /** If true, strings should be rendered with Unicode fonts instead of the default.png font */ + private boolean unicodeFlag; + /** If true, the Unicode Bidirectional Algorithm should be run before rendering any string. */ + private boolean bidiFlag; + /** Used to specify new red value for the current color. */ + private float red; + /** Used to specify new blue value for the current color. */ + private float blue; + /** Used to specify new green value for the current color. */ + private float green; + /** Used to speify new alpha value for the current color. */ + private float alpha; + /** Text color of the currently rendering string. */ + private int textColor; + /** Set if the "k" style (random) is active in currently rendering string */ + private boolean randomStyle; + /** Set if the "l" style (bold) is active in currently rendering string */ + private boolean boldStyle; + /** Set if the "o" style (italic) is active in currently rendering string */ + private boolean italicStyle; + /** Set if the "n" style (underlined) is active in currently rendering string */ + private boolean underlineStyle; + /** Set if the "m" style (strikethrough) is active in currently rendering string */ + private boolean strikethroughStyle; + + public FontRenderer(GameSettings gameSettingsIn, ResourceLocation location, TextureManager textureManagerIn, boolean unicode) + { + this.locationFontTexture = location; + this.renderEngine = textureManagerIn; + this.unicodeFlag = unicode; + bindTexture(this.locationFontTexture); + + for (int i = 0; i < 32; ++i) + { + int j = (i >> 3 & 1) * 85; + int k = (i >> 2 & 1) * 170 + j; + int l = (i >> 1 & 1) * 170 + j; + int i1 = (i >> 0 & 1) * 170 + j; + + if (i == 6) + { + k += 85; + } + + if (gameSettingsIn.anaglyph) + { + int j1 = (k * 30 + l * 59 + i1 * 11) / 100; + int k1 = (k * 30 + l * 70) / 100; + int l1 = (k * 30 + i1 * 70) / 100; + k = j1; + l = k1; + i1 = l1; + } + + if (i >= 16) + { + k /= 4; + l /= 4; + i1 /= 4; + } + + this.colorCode[i] = (k & 255) << 16 | (l & 255) << 8 | i1 & 255; + } + + this.readGlyphSizes(); + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.readFontTexture(); + this.readGlyphSizes(); + } + + private void readFontTexture() + { + IResource iresource = null; + BufferedImage bufferedimage; + + try + { + iresource = getResource(this.locationFontTexture); + bufferedimage = TextureUtil.readBufferedImage(iresource.getInputStream()); + } + catch (IOException ioexception) + { + throw new RuntimeException(ioexception); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + int lvt_3_2_ = bufferedimage.getWidth(); + int lvt_4_1_ = bufferedimage.getHeight(); + int[] lvt_5_1_ = new int[lvt_3_2_ * lvt_4_1_]; + bufferedimage.getRGB(0, 0, lvt_3_2_, lvt_4_1_, lvt_5_1_, 0, lvt_3_2_); + int lvt_6_1_ = lvt_4_1_ / 16; + int lvt_7_1_ = lvt_3_2_ / 16; + boolean lvt_8_1_ = true; + float lvt_9_1_ = 8.0F / (float)lvt_7_1_; + + for (int lvt_10_1_ = 0; lvt_10_1_ < 256; ++lvt_10_1_) + { + int j1 = lvt_10_1_ % 16; + int k1 = lvt_10_1_ / 16; + + if (lvt_10_1_ == 32) + { + this.charWidth[lvt_10_1_] = 4; + } + + int l1; + + for (l1 = lvt_7_1_ - 1; l1 >= 0; --l1) + { + int i2 = j1 * lvt_7_1_ + l1; + boolean flag1 = true; + + for (int j2 = 0; j2 < lvt_6_1_ && flag1; ++j2) + { + int k2 = (k1 * lvt_7_1_ + j2) * lvt_3_2_; + + if ((lvt_5_1_[i2 + k2] >> 24 & 255) != 0) + { + flag1 = false; + } + } + + if (!flag1) + { + break; + } + } + + ++l1; + this.charWidth[lvt_10_1_] = (int)(0.5D + (double)((float)l1 * lvt_9_1_)) + 1; + } + } + + private void readGlyphSizes() + { + IResource iresource = null; + + try + { + iresource = getResource(new ResourceLocation("font/glyph_sizes.bin")); + iresource.getInputStream().read(this.glyphWidth); + } + catch (IOException ioexception) + { + throw new RuntimeException(ioexception); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + } + + /** + * Render the given char + */ + private float renderChar(char ch, boolean italic) + { + if (ch == 160) return 4.0F; // forge: display nbsp as space. MC-2595 + if (ch == ' ') + { + return 4.0F; + } + else + { + int i = "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".indexOf(ch); + return i != -1 && !this.unicodeFlag ? this.renderDefaultChar(i, italic) : this.renderUnicodeChar(ch, italic); + } + } + + /** + * Render a single character with the default.png font at current (posX,posY) location... + */ + protected float renderDefaultChar(int ch, boolean italic) + { + int i = ch % 16 * 8; + int j = ch / 16 * 8; + int k = italic ? 1 : 0; + bindTexture(this.locationFontTexture); + int l = this.charWidth[ch]; + float f = (float)l - 0.01F; + GlStateManager.glBegin(5); + GlStateManager.glTexCoord2f((float)i / 128.0F, (float)j / 128.0F); + GlStateManager.glVertex3f(this.posX + (float)k, this.posY, 0.0F); + GlStateManager.glTexCoord2f((float)i / 128.0F, ((float)j + 7.99F) / 128.0F); + GlStateManager.glVertex3f(this.posX - (float)k, this.posY + 7.99F, 0.0F); + GlStateManager.glTexCoord2f(((float)i + f - 1.0F) / 128.0F, (float)j / 128.0F); + GlStateManager.glVertex3f(this.posX + f - 1.0F + (float)k, this.posY, 0.0F); + GlStateManager.glTexCoord2f(((float)i + f - 1.0F) / 128.0F, ((float)j + 7.99F) / 128.0F); + GlStateManager.glVertex3f(this.posX + f - 1.0F - (float)k, this.posY + 7.99F, 0.0F); + GlStateManager.glEnd(); + return (float)l; + } + + private ResourceLocation getUnicodePageLocation(int page) + { + if (UNICODE_PAGE_LOCATIONS[page] == null) + { + UNICODE_PAGE_LOCATIONS[page] = new ResourceLocation(String.format("textures/font/unicode_page_%02x.png", page)); + } + + return UNICODE_PAGE_LOCATIONS[page]; + } + + /** + * Load one of the /font/glyph_XX.png into a new GL texture and store the texture ID in glyphTextureName array. + */ + private void loadGlyphTexture(int page) + { + bindTexture(this.getUnicodePageLocation(page)); + } + + /** + * Render a single Unicode character at current (posX,posY) location using one of the /font/glyph_XX.png files... + */ + protected float renderUnicodeChar(char ch, boolean italic) + { + int i = this.glyphWidth[ch] & 255; + + if (i == 0) + { + return 0.0F; + } + else + { + int j = ch / 256; + this.loadGlyphTexture(j); + int k = i >>> 4; + int l = i & 15; + float f = (float)k; + float f1 = (float)(l + 1); + float f2 = (float)(ch % 16 * 16) + f; + float f3 = (float)((ch & 255) / 16 * 16); + float f4 = f1 - f - 0.02F; + float f5 = italic ? 1.0F : 0.0F; + GlStateManager.glBegin(5); + GlStateManager.glTexCoord2f(f2 / 256.0F, f3 / 256.0F); + GlStateManager.glVertex3f(this.posX + f5, this.posY, 0.0F); + GlStateManager.glTexCoord2f(f2 / 256.0F, (f3 + 15.98F) / 256.0F); + GlStateManager.glVertex3f(this.posX - f5, this.posY + 7.99F, 0.0F); + GlStateManager.glTexCoord2f((f2 + f4) / 256.0F, f3 / 256.0F); + GlStateManager.glVertex3f(this.posX + f4 / 2.0F + f5, this.posY, 0.0F); + GlStateManager.glTexCoord2f((f2 + f4) / 256.0F, (f3 + 15.98F) / 256.0F); + GlStateManager.glVertex3f(this.posX + f4 / 2.0F - f5, this.posY + 7.99F, 0.0F); + GlStateManager.glEnd(); + return (f1 - f) / 2.0F + 1.0F; + } + } + + /** + * Draws the specified string with a shadow. + */ + public int drawStringWithShadow(String text, float x, float y, int color) + { + return this.drawString(text, x, y, color, true); + } + + /** + * Draws the specified string. + */ + public int drawString(String text, int x, int y, int color) + { + return this.drawString(text, (float)x, (float)y, color, false); + } + + /** + * Draws the specified string. + */ + public int drawString(String text, float x, float y, int color, boolean dropShadow) + { + enableAlpha(); + this.resetStyles(); + int i; + + if (dropShadow) + { + i = this.renderString(text, x + 1.0F, y + 1.0F, color, true); + i = Math.max(i, this.renderString(text, x, y, color, false)); + } + else + { + i = this.renderString(text, x, y, color, false); + } + + return i; + } + + /** + * Apply Unicode Bidirectional Algorithm to string and return a new possibly reordered string for visual rendering. + */ + private String bidiReorder(String text) + { + try + { + Bidi bidi = new Bidi((new ArabicShaping(8)).shape(text), 127); + bidi.setReorderingMode(0); + return bidi.writeReordered(2); + } + catch (ArabicShapingException var3) + { + return text; + } + } + + /** + * Reset all style flag fields in the class to false; called at the start of string rendering + */ + private void resetStyles() + { + this.randomStyle = false; + this.boldStyle = false; + this.italicStyle = false; + this.underlineStyle = false; + this.strikethroughStyle = false; + } + + /** + * Render a single line string at the current (posX,posY) and update posX + */ + private void renderStringAtPos(String text, boolean shadow) + { + for (int i = 0; i < text.length(); ++i) + { + char c0 = text.charAt(i); + + if (c0 == 167 && i + 1 < text.length()) + { + int i1 = "0123456789abcdefklmnor".indexOf(String.valueOf(text.charAt(i + 1)).toLowerCase(Locale.ROOT).charAt(0)); + + if (i1 < 16) + { + this.randomStyle = false; + this.boldStyle = false; + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; + + if (i1 < 0 || i1 > 15) + { + i1 = 15; + } + + if (shadow) + { + i1 += 16; + } + + int j1 = this.colorCode[i1]; + this.textColor = j1; + setColor((float)(j1 >> 16) / 255.0F, (float)(j1 >> 8 & 255) / 255.0F, (float)(j1 & 255) / 255.0F, this.alpha); + } + else if (i1 == 16) + { + this.randomStyle = true; + } + else if (i1 == 17) + { + this.boldStyle = true; + } + else if (i1 == 18) + { + this.strikethroughStyle = true; + } + else if (i1 == 19) + { + this.underlineStyle = true; + } + else if (i1 == 20) + { + this.italicStyle = true; + } + else if (i1 == 21) + { + this.randomStyle = false; + this.boldStyle = false; + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; + setColor(this.red, this.blue, this.green, this.alpha); + } + + ++i; + } + else + { + int j = "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".indexOf(c0); + + if (this.randomStyle && j != -1) + { + int k = this.getCharWidth(c0); + char c1; + + while (true) + { + j = this.fontRandom.nextInt("\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".length()); + c1 = "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".charAt(j); + + if (k == this.getCharWidth(c1)) + { + break; + } + } + + c0 = c1; + } + + float f1 = j == -1 || this.unicodeFlag ? 0.5f : 1f; + boolean flag = (c0 == 0 || j == -1 || this.unicodeFlag) && shadow; + + if (flag) + { + this.posX -= f1; + this.posY -= f1; + } + + float f = this.renderChar(c0, this.italicStyle); + + if (flag) + { + this.posX += f1; + this.posY += f1; + } + + if (this.boldStyle) + { + this.posX += f1; + + if (flag) + { + this.posX -= f1; + this.posY -= f1; + } + + this.renderChar(c0, this.italicStyle); + this.posX -= f1; + + if (flag) + { + this.posX += f1; + this.posY += f1; + } + + ++f; + } + doDraw(f); + } + } + } + + protected void doDraw(float f) + { + { + { + + if (this.strikethroughStyle) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.disableTexture2D(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION); + bufferbuilder.pos((double)this.posX, (double)(this.posY + (float)(this.FONT_HEIGHT / 2)), 0.0D).endVertex(); + bufferbuilder.pos((double)(this.posX + f), (double)(this.posY + (float)(this.FONT_HEIGHT / 2)), 0.0D).endVertex(); + bufferbuilder.pos((double)(this.posX + f), (double)(this.posY + (float)(this.FONT_HEIGHT / 2) - 1.0F), 0.0D).endVertex(); + bufferbuilder.pos((double)this.posX, (double)(this.posY + (float)(this.FONT_HEIGHT / 2) - 1.0F), 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + } + + if (this.underlineStyle) + { + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder bufferbuilder1 = tessellator1.getBuffer(); + GlStateManager.disableTexture2D(); + bufferbuilder1.begin(7, DefaultVertexFormats.POSITION); + int l = this.underlineStyle ? -1 : 0; + bufferbuilder1.pos((double)(this.posX + (float)l), (double)(this.posY + (float)this.FONT_HEIGHT), 0.0D).endVertex(); + bufferbuilder1.pos((double)(this.posX + f), (double)(this.posY + (float)this.FONT_HEIGHT), 0.0D).endVertex(); + bufferbuilder1.pos((double)(this.posX + f), (double)(this.posY + (float)this.FONT_HEIGHT - 1.0F), 0.0D).endVertex(); + bufferbuilder1.pos((double)(this.posX + (float)l), (double)(this.posY + (float)this.FONT_HEIGHT - 1.0F), 0.0D).endVertex(); + tessellator1.draw(); + GlStateManager.enableTexture2D(); + } + + this.posX += (float)((int)f); + } + } + } + + /** + * Render string either left or right aligned depending on bidiFlag + */ + private int renderStringAligned(String text, int x, int y, int width, int color, boolean dropShadow) + { + if (this.bidiFlag) + { + int i = this.getStringWidth(this.bidiReorder(text)); + x = x + width - i; + } + + return this.renderString(text, (float)x, (float)y, color, dropShadow); + } + + /** + * Render single line string by setting GL color, current (posX,posY), and calling renderStringAtPos() + */ + private int renderString(String text, float x, float y, int color, boolean dropShadow) + { + if (text == null) + { + return 0; + } + else + { + if (this.bidiFlag) + { + text = this.bidiReorder(text); + } + + if ((color & -67108864) == 0) + { + color |= -16777216; + } + + if (dropShadow) + { + color = (color & 16579836) >> 2 | color & -16777216; + } + + this.red = (float)(color >> 16 & 255) / 255.0F; + this.blue = (float)(color >> 8 & 255) / 255.0F; + this.green = (float)(color & 255) / 255.0F; + this.alpha = (float)(color >> 24 & 255) / 255.0F; + setColor(this.red, this.blue, this.green, this.alpha); + this.posX = x; + this.posY = y; + this.renderStringAtPos(text, dropShadow); + return (int)this.posX; + } + } + + /** + * Returns the width of this string. Equivalent of FontMetrics.stringWidth(String s). + */ + public int getStringWidth(String text) + { + if (text == null) + { + return 0; + } + else + { + int i = 0; + boolean flag = false; + + for (int j = 0; j < text.length(); ++j) + { + char c0 = text.charAt(j); + int k = this.getCharWidth(c0); + + if (k < 0 && j < text.length() - 1) + { + ++j; + c0 = text.charAt(j); + + if (c0 != 'l' && c0 != 'L') + { + if (c0 == 'r' || c0 == 'R') + { + flag = false; + } + } + else + { + flag = true; + } + + k = 0; + } + + i += k; + + if (flag && k > 0) + { + ++i; + } + } + + return i; + } + } + + /** + * Returns the width of this character as rendered. + */ + public int getCharWidth(char character) + { + if (character == 160) return 4; // forge: display nbsp as space. MC-2595 + if (character == 167) + { + return -1; + } + else if (character == ' ') + { + return 4; + } + else + { + int i = "\u00c0\u00c1\u00c2\u00c8\u00ca\u00cb\u00cd\u00d3\u00d4\u00d5\u00da\u00df\u00e3\u00f5\u011f\u0130\u0131\u0152\u0153\u015e\u015f\u0174\u0175\u017e\u0207\u0000\u0000\u0000\u0000\u0000\u0000\u0000 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0000\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580\u03b1\u03b2\u0393\u03c0\u03a3\u03c3\u03bc\u03c4\u03a6\u0398\u03a9\u03b4\u221e\u2205\u2208\u2229\u2261\u00b1\u2265\u2264\u2320\u2321\u00f7\u2248\u00b0\u2219\u00b7\u221a\u207f\u00b2\u25a0\u0000".indexOf(character); + + if (character > 0 && i != -1 && !this.unicodeFlag) + { + return this.charWidth[i]; + } + else if (this.glyphWidth[character] != 0) + { + int j = this.glyphWidth[character] & 255; + int k = j >>> 4; + int l = j & 15; + ++l; + return (l - k) / 2 + 1; + } + else + { + return 0; + } + } + } + + /** + * Trims a string to fit a specified Width. + */ + public String trimStringToWidth(String text, int width) + { + return this.trimStringToWidth(text, width, false); + } + + /** + * Trims a string to a specified width, optionally starting from the end and working backwards. + *

Samples:

+ * (Assuming that {@link #getCharWidth(char)} returns 6 for all of the characters in + * 0123456789 on the current resource pack) + * + * + * + * + * + * + * + * + * + * + * + * + *
InputReturns
trimStringToWidth("0123456789", 1, false)""
trimStringToWidth("0123456789", 6, false)"0"
trimStringToWidth("0123456789", 29, false)"0123"
trimStringToWidth("0123456789", 30, false)"01234"
trimStringToWidth("0123456789", 9001, false)"0123456789"
trimStringToWidth("0123456789", 1, true)""
trimStringToWidth("0123456789", 6, true)"9"
trimStringToWidth("0123456789", 29, true)"6789"
trimStringToWidth("0123456789", 30, true)"56789"
trimStringToWidth("0123456789", 9001, true)"0123456789"
+ */ + public String trimStringToWidth(String text, int width, boolean reverse) + { + StringBuilder stringbuilder = new StringBuilder(); + int i = 0; + int j = reverse ? text.length() - 1 : 0; + int k = reverse ? -1 : 1; + boolean flag = false; + boolean flag1 = false; + + for (int l = j; l >= 0 && l < text.length() && i < width; l += k) + { + char c0 = text.charAt(l); + int i1 = this.getCharWidth(c0); + + if (flag) + { + flag = false; + + if (c0 != 'l' && c0 != 'L') + { + if (c0 == 'r' || c0 == 'R') + { + flag1 = false; + } + } + else + { + flag1 = true; + } + } + else if (i1 < 0) + { + flag = true; + } + else + { + i += i1; + + if (flag1) + { + ++i; + } + } + + if (i > width) + { + break; + } + + if (reverse) + { + stringbuilder.insert(0, c0); + } + else + { + stringbuilder.append(c0); + } + } + + return stringbuilder.toString(); + } + + /** + * Remove all newline characters from the end of the string + */ + private String trimStringNewline(String text) + { + while (text != null && text.endsWith("\n")) + { + text = text.substring(0, text.length() - 1); + } + + return text; + } + + /** + * Splits and draws a String with wordwrap (maximum length is parameter k) + */ + public void drawSplitString(String str, int x, int y, int wrapWidth, int textColor) + { + this.resetStyles(); + this.textColor = textColor; + str = this.trimStringNewline(str); + this.renderSplitString(str, x, y, wrapWidth, false); + } + + /** + * Perform actual work of rendering a multi-line string with wordwrap and with darker drop shadow color if flag is + * set + */ + private void renderSplitString(String str, int x, int y, int wrapWidth, boolean addShadow) + { + for (String s : this.listFormattedStringToWidth(str, wrapWidth)) + { + this.renderStringAligned(s, x, y, wrapWidth, this.textColor, addShadow); + y += this.FONT_HEIGHT; + } + } + + /** + * Returns the height (in pixels) of the given string if it is wordwrapped to the given max width. + */ + public int getWordWrappedHeight(String str, int maxLength) + { + return this.FONT_HEIGHT * this.listFormattedStringToWidth(str, maxLength).size(); + } + + /** + * Set unicodeFlag controlling whether strings should be rendered with Unicode fonts instead of the default.png + * font. + */ + public void setUnicodeFlag(boolean unicodeFlagIn) + { + this.unicodeFlag = unicodeFlagIn; + } + + /** + * Get unicodeFlag controlling whether strings should be rendered with Unicode fonts instead of the default.png + * font. + */ + public boolean getUnicodeFlag() + { + return this.unicodeFlag; + } + + /** + * Set bidiFlag to control if the Unicode Bidirectional Algorithm should be run before rendering any string. + */ + public void setBidiFlag(boolean bidiFlagIn) + { + this.bidiFlag = bidiFlagIn; + } + + /** + * Breaks a string into a list of pieces where the width of each line is always less than or equal to the provided + * width. Formatting codes will be preserved between lines. + */ + public List listFormattedStringToWidth(String str, int wrapWidth) + { + return Arrays.asList(this.wrapFormattedStringToWidth(str, wrapWidth).split("\n")); + } + + /** + * Inserts newline and formatting into a string to wrap it within the specified width. + */ + String wrapFormattedStringToWidth(String str, int wrapWidth) + { + int i = this.sizeStringToWidth(str, wrapWidth); + + if (str.length() <= i) + { + return str; + } + else + { + String s = str.substring(0, i); + char c0 = str.charAt(i); + boolean flag = c0 == ' ' || c0 == '\n'; + String s1 = getFormatFromString(s) + str.substring(i + (flag ? 1 : 0)); + return s + "\n" + this.wrapFormattedStringToWidth(s1, wrapWidth); + } + } + + /** + * Determines how many characters from the string will fit into the specified width. + */ + private int sizeStringToWidth(String str, int wrapWidth) + { + int i = str.length(); + int j = 0; + int k = 0; + int l = -1; + + for (boolean flag = false; k < i; ++k) + { + char c0 = str.charAt(k); + + switch (c0) + { + case '\n': + --k; + break; + case ' ': + l = k; + default: + j += this.getCharWidth(c0); + + if (flag) + { + ++j; + } + + break; + case '\u00a7': + + if (k < i - 1) + { + ++k; + char c1 = str.charAt(k); + + if (c1 != 'l' && c1 != 'L') + { + if (c1 == 'r' || c1 == 'R' || isFormatColor(c1)) + { + flag = false; + } + } + else + { + flag = true; + } + } + } + + if (c0 == '\n') + { + ++k; + l = k; + break; + } + + if (j > wrapWidth) + { + break; + } + } + + return k != i && l != -1 && l < k ? l : k; + } + + /** + * Checks if the char code is a hexadecimal character, used to set colour. + */ + private static boolean isFormatColor(char colorChar) + { + return colorChar >= '0' && colorChar <= '9' || colorChar >= 'a' && colorChar <= 'f' || colorChar >= 'A' && colorChar <= 'F'; + } + + /** + * Checks if the char code is O-K...lLrRk-o... used to set special formatting. + */ + private static boolean isFormatSpecial(char formatChar) + { + return formatChar >= 'k' && formatChar <= 'o' || formatChar >= 'K' && formatChar <= 'O' || formatChar == 'r' || formatChar == 'R'; + } + + /** + * Digests a string for nonprinting formatting characters then returns a string containing only that formatting. + */ + public static String getFormatFromString(String text) + { + String s = ""; + int i = -1; + int j = text.length(); + + while ((i = text.indexOf(167, i + 1)) != -1) + { + if (i < j - 1) + { + char c0 = text.charAt(i + 1); + + if (isFormatColor(c0)) + { + s = "\u00a7" + c0; + } + else if (isFormatSpecial(c0)) + { + s = s + "\u00a7" + c0; + } + } + } + + return s; + } + + /** + * Get bidiFlag that controls if the Unicode Bidirectional Algorithm should be run before rendering any string + */ + public boolean getBidiFlag() + { + return this.bidiFlag; + } + + protected void setColor(float r, float g, float b, float a) + { + GlStateManager.color(r,g,b,a); + } + + protected void enableAlpha() + { + GlStateManager.enableAlpha(); + } + + protected void bindTexture(ResourceLocation location) + { + renderEngine.bindTexture(location); + } + + protected IResource getResource(ResourceLocation location) throws IOException + { + return Minecraft.getMinecraft().getResourceManager().getResource(location); + } + + public int getColorCode(char character) + { + int i = "0123456789abcdef".indexOf(character); + return i >= 0 && i < this.colorCode.length ? this.colorCode[i] : -1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/Gui.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/Gui.java new file mode 100644 index 0000000..9317560 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/Gui.java @@ -0,0 +1,220 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Gui +{ + public static final ResourceLocation OPTIONS_BACKGROUND = new ResourceLocation("textures/gui/options_background.png"); + public static final ResourceLocation STAT_ICONS = new ResourceLocation("textures/gui/container/stats_icons.png"); + public static final ResourceLocation ICONS = new ResourceLocation("textures/gui/icons.png"); + protected float zLevel; + + /** + * Draws a thin horizontal line between two points. + */ + protected void drawHorizontalLine(int startX, int endX, int y, int color) + { + if (endX < startX) + { + int i = startX; + startX = endX; + endX = i; + } + + drawRect(startX, y, endX + 1, y + 1, color); + } + + /** + * Draw a 1 pixel wide vertical line. Args : x, y1, y2, color + */ + protected void drawVerticalLine(int x, int startY, int endY, int color) + { + if (endY < startY) + { + int i = startY; + startY = endY; + endY = i; + } + + drawRect(x, startY + 1, x + 1, endY, color); + } + + /** + * Draws a solid color rectangle with the specified coordinates and color. + */ + public static void drawRect(int left, int top, int right, int bottom, int color) + { + if (left < right) + { + int i = left; + left = right; + right = i; + } + + if (top < bottom) + { + int j = top; + top = bottom; + bottom = j; + } + + float f3 = (float)(color >> 24 & 255) / 255.0F; + float f = (float)(color >> 16 & 255) / 255.0F; + float f1 = (float)(color >> 8 & 255) / 255.0F; + float f2 = (float)(color & 255) / 255.0F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.enableBlend(); + GlStateManager.disableTexture2D(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color(f, f1, f2, f3); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION); + bufferbuilder.pos((double)left, (double)bottom, 0.0D).endVertex(); + bufferbuilder.pos((double)right, (double)bottom, 0.0D).endVertex(); + bufferbuilder.pos((double)right, (double)top, 0.0D).endVertex(); + bufferbuilder.pos((double)left, (double)top, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } + + /** + * Draws a rectangle with a vertical gradient between the specified colors (ARGB format). Args : x1, y1, x2, y2, + * topColor, bottomColor + */ + protected void drawGradientRect(int left, int top, int right, int bottom, int startColor, int endColor) + { + float f = (float)(startColor >> 24 & 255) / 255.0F; + float f1 = (float)(startColor >> 16 & 255) / 255.0F; + float f2 = (float)(startColor >> 8 & 255) / 255.0F; + float f3 = (float)(startColor & 255) / 255.0F; + float f4 = (float)(endColor >> 24 & 255) / 255.0F; + float f5 = (float)(endColor >> 16 & 255) / 255.0F; + float f6 = (float)(endColor >> 8 & 255) / 255.0F; + float f7 = (float)(endColor & 255) / 255.0F; + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.shadeModel(7425); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos((double)right, (double)top, (double)this.zLevel).color(f1, f2, f3, f).endVertex(); + bufferbuilder.pos((double)left, (double)top, (double)this.zLevel).color(f1, f2, f3, f).endVertex(); + bufferbuilder.pos((double)left, (double)bottom, (double)this.zLevel).color(f5, f6, f7, f4).endVertex(); + bufferbuilder.pos((double)right, (double)bottom, (double)this.zLevel).color(f5, f6, f7, f4).endVertex(); + tessellator.draw(); + GlStateManager.shadeModel(7424); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + } + + /** + * Renders the specified text to the screen, center-aligned. Args : renderer, string, x, y, color + */ + public void drawCenteredString(FontRenderer fontRendererIn, String text, int x, int y, int color) + { + fontRendererIn.drawStringWithShadow(text, (float)(x - fontRendererIn.getStringWidth(text) / 2), (float)y, color); + } + + /** + * Renders the specified text to the screen. Args : renderer, string, x, y, color + */ + public void drawString(FontRenderer fontRendererIn, String text, int x, int y, int color) + { + fontRendererIn.drawStringWithShadow(text, (float)x, (float)y, color); + } + + /** + * Draws a textured rectangle at the current z-value. + */ + public void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) + { + float f = 0.00390625F; + float f1 = 0.00390625F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(x + 0), (double)(y + height), (double)this.zLevel).tex((double)((float)(textureX + 0) * 0.00390625F), (double)((float)(textureY + height) * 0.00390625F)).endVertex(); + bufferbuilder.pos((double)(x + width), (double)(y + height), (double)this.zLevel).tex((double)((float)(textureX + width) * 0.00390625F), (double)((float)(textureY + height) * 0.00390625F)).endVertex(); + bufferbuilder.pos((double)(x + width), (double)(y + 0), (double)this.zLevel).tex((double)((float)(textureX + width) * 0.00390625F), (double)((float)(textureY + 0) * 0.00390625F)).endVertex(); + bufferbuilder.pos((double)(x + 0), (double)(y + 0), (double)this.zLevel).tex((double)((float)(textureX + 0) * 0.00390625F), (double)((float)(textureY + 0) * 0.00390625F)).endVertex(); + tessellator.draw(); + } + + /** + * Draws a textured rectangle using the texture currently bound to the TextureManager + */ + public void drawTexturedModalRect(float xCoord, float yCoord, int minU, int minV, int maxU, int maxV) + { + float f = 0.00390625F; + float f1 = 0.00390625F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(xCoord + 0.0F), (double)(yCoord + (float)maxV), (double)this.zLevel).tex((double)((float)(minU + 0) * 0.00390625F), (double)((float)(minV + maxV) * 0.00390625F)).endVertex(); + bufferbuilder.pos((double)(xCoord + (float)maxU), (double)(yCoord + (float)maxV), (double)this.zLevel).tex((double)((float)(minU + maxU) * 0.00390625F), (double)((float)(minV + maxV) * 0.00390625F)).endVertex(); + bufferbuilder.pos((double)(xCoord + (float)maxU), (double)(yCoord + 0.0F), (double)this.zLevel).tex((double)((float)(minU + maxU) * 0.00390625F), (double)((float)(minV + 0) * 0.00390625F)).endVertex(); + bufferbuilder.pos((double)(xCoord + 0.0F), (double)(yCoord + 0.0F), (double)this.zLevel).tex((double)((float)(minU + 0) * 0.00390625F), (double)((float)(minV + 0) * 0.00390625F)).endVertex(); + tessellator.draw(); + } + + /** + * Draws a texture rectangle using the texture currently bound to the TextureManager + */ + public void drawTexturedModalRect(int xCoord, int yCoord, TextureAtlasSprite textureSprite, int widthIn, int heightIn) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(xCoord + 0), (double)(yCoord + heightIn), (double)this.zLevel).tex((double)textureSprite.getMinU(), (double)textureSprite.getMaxV()).endVertex(); + bufferbuilder.pos((double)(xCoord + widthIn), (double)(yCoord + heightIn), (double)this.zLevel).tex((double)textureSprite.getMaxU(), (double)textureSprite.getMaxV()).endVertex(); + bufferbuilder.pos((double)(xCoord + widthIn), (double)(yCoord + 0), (double)this.zLevel).tex((double)textureSprite.getMaxU(), (double)textureSprite.getMinV()).endVertex(); + bufferbuilder.pos((double)(xCoord + 0), (double)(yCoord + 0), (double)this.zLevel).tex((double)textureSprite.getMinU(), (double)textureSprite.getMinV()).endVertex(); + tessellator.draw(); + } + + /** + * Draws a textured rectangle at z = 0. Args: x, y, u, v, width, height, textureWidth, textureHeight + */ + public static void drawModalRectWithCustomSizedTexture(int x, int y, float u, float v, int width, int height, float textureWidth, float textureHeight) + { + float f = 1.0F / textureWidth; + float f1 = 1.0F / textureHeight; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)x, (double)(y + height), 0.0D).tex((double)(u * f), (double)((v + (float)height) * f1)).endVertex(); + bufferbuilder.pos((double)(x + width), (double)(y + height), 0.0D).tex((double)((u + (float)width) * f), (double)((v + (float)height) * f1)).endVertex(); + bufferbuilder.pos((double)(x + width), (double)y, 0.0D).tex((double)((u + (float)width) * f), (double)(v * f1)).endVertex(); + bufferbuilder.pos((double)x, (double)y, 0.0D).tex((double)(u * f), (double)(v * f1)).endVertex(); + tessellator.draw(); + } + + /** + * Draws a scaled, textured, tiled modal rect at z = 0. This method isn't used anywhere in vanilla code. + */ + public static void drawScaledCustomSizeModalRect(int x, int y, float u, float v, int uWidth, int vHeight, int width, int height, float tileWidth, float tileHeight) + { + float f = 1.0F / tileWidth; + float f1 = 1.0F / tileHeight; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)x, (double)(y + height), 0.0D).tex((double)(u * f), (double)((v + (float)vHeight) * f1)).endVertex(); + bufferbuilder.pos((double)(x + width), (double)(y + height), 0.0D).tex((double)((u + (float)uWidth) * f), (double)((v + (float)vHeight) * f1)).endVertex(); + bufferbuilder.pos((double)(x + width), (double)y, 0.0D).tex((double)((u + (float)uWidth) * f), (double)(v * f1)).endVertex(); + bufferbuilder.pos((double)x, (double)y, 0.0D).tex((double)(u * f), (double)(v * f1)).endVertex(); + tessellator.draw(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiBossOverlay.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiBossOverlay.java new file mode 100644 index 0000000..b4daffa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiBossOverlay.java @@ -0,0 +1,147 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.network.play.server.SPacketUpdateBossInfo; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.BossInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiBossOverlay extends Gui +{ + private static final ResourceLocation GUI_BARS_TEXTURES = new ResourceLocation("textures/gui/bars.png"); + private final Minecraft client; + private final Map mapBossInfos = Maps.newLinkedHashMap(); + + public GuiBossOverlay(Minecraft clientIn) + { + this.client = clientIn; + } + + public void renderBossHealth() + { + if (!this.mapBossInfos.isEmpty()) + { + ScaledResolution scaledresolution = new ScaledResolution(this.client); + int i = scaledresolution.getScaledWidth(); + int j = 12; + + for (BossInfoClient bossinfoclient : this.mapBossInfos.values()) + { + int k = i / 2 - 91; + net.minecraftforge.client.event.RenderGameOverlayEvent.BossInfo event = + net.minecraftforge.client.ForgeHooksClient.bossBarRenderPre(scaledresolution, bossinfoclient, k, j, 10 + this.client.fontRenderer.FONT_HEIGHT); + if (!event.isCanceled()) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.client.getTextureManager().bindTexture(GUI_BARS_TEXTURES); + this.render(k, j, bossinfoclient); + String s = bossinfoclient.getName().getFormattedText(); + this.client.fontRenderer.drawStringWithShadow(s, (float)(i / 2 - this.client.fontRenderer.getStringWidth(s) / 2), (float)(j - 9), 16777215); + } + j += event.getIncrement(); + + net.minecraftforge.client.ForgeHooksClient.bossBarRenderPost(scaledresolution); + if (j >= scaledresolution.getScaledHeight() / 3) + { + break; + } + } + } + } + + private void render(int x, int y, BossInfo info) + { + this.drawTexturedModalRect(x, y, 0, info.getColor().ordinal() * 5 * 2, 182, 5); + + if (info.getOverlay() != BossInfo.Overlay.PROGRESS) + { + this.drawTexturedModalRect(x, y, 0, 80 + (info.getOverlay().ordinal() - 1) * 5 * 2, 182, 5); + } + + int i = (int)(info.getPercent() * 183.0F); + + if (i > 0) + { + this.drawTexturedModalRect(x, y, 0, info.getColor().ordinal() * 5 * 2 + 5, i, 5); + + if (info.getOverlay() != BossInfo.Overlay.PROGRESS) + { + this.drawTexturedModalRect(x, y, 0, 80 + (info.getOverlay().ordinal() - 1) * 5 * 2 + 5, i, 5); + } + } + } + + public void read(SPacketUpdateBossInfo packetIn) + { + if (packetIn.getOperation() == SPacketUpdateBossInfo.Operation.ADD) + { + this.mapBossInfos.put(packetIn.getUniqueId(), new BossInfoClient(packetIn)); + } + else if (packetIn.getOperation() == SPacketUpdateBossInfo.Operation.REMOVE) + { + this.mapBossInfos.remove(packetIn.getUniqueId()); + } + else + { + ((BossInfoClient)this.mapBossInfos.get(packetIn.getUniqueId())).updateFromPacket(packetIn); + } + } + + public void clearBossInfos() + { + this.mapBossInfos.clear(); + } + + public boolean shouldPlayEndBossMusic() + { + if (!this.mapBossInfos.isEmpty()) + { + for (BossInfo bossinfo : this.mapBossInfos.values()) + { + if (bossinfo.shouldPlayEndBossMusic()) + { + return true; + } + } + } + + return false; + } + + public boolean shouldDarkenSky() + { + if (!this.mapBossInfos.isEmpty()) + { + for (BossInfo bossinfo : this.mapBossInfos.values()) + { + if (bossinfo.shouldDarkenSky()) + { + return true; + } + } + } + + return false; + } + + public boolean shouldCreateFog() + { + if (!this.mapBossInfos.isEmpty()) + { + for (BossInfo bossinfo : this.mapBossInfos.values()) + { + if (bossinfo.shouldCreateFog()) + { + return true; + } + } + } + + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButton.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButton.java new file mode 100644 index 0000000..35554f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButton.java @@ -0,0 +1,160 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButton extends Gui +{ + protected static final ResourceLocation BUTTON_TEXTURES = new ResourceLocation("textures/gui/widgets.png"); + /** Button width in pixels */ + public int width; + /** Button height in pixels */ + public int height; + /** The x position of this control. */ + public int x; + /** The y position of this control. */ + public int y; + /** The string displayed on this control. */ + public String displayString; + public int id; + /** True if this control is enabled, false to disable. */ + public boolean enabled; + /** Hides the button completely if false. */ + public boolean visible; + protected boolean hovered; + public int packedFGColour; //FML + + public GuiButton(int buttonId, int x, int y, String buttonText) + { + this(buttonId, x, y, 200, 20, buttonText); + } + + public GuiButton(int buttonId, int x, int y, int widthIn, int heightIn, String buttonText) + { + this.width = 200; + this.height = 20; + this.enabled = true; + this.visible = true; + this.id = buttonId; + this.x = x; + this.y = y; + this.width = widthIn; + this.height = heightIn; + this.displayString = buttonText; + } + + /** + * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over + * this button. + */ + protected int getHoverState(boolean mouseOver) + { + int i = 1; + + if (!this.enabled) + { + i = 0; + } + else if (mouseOver) + { + i = 2; + } + + return i; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + FontRenderer fontrenderer = mc.fontRenderer; + mc.getTextureManager().bindTexture(BUTTON_TEXTURES); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + int i = this.getHoverState(this.hovered); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + this.drawTexturedModalRect(this.x, this.y, 0, 46 + i * 20, this.width / 2, this.height); + this.drawTexturedModalRect(this.x + this.width / 2, this.y, 200 - this.width / 2, 46 + i * 20, this.width / 2, this.height); + this.mouseDragged(mc, mouseX, mouseY); + int j = 14737632; + + if (packedFGColour != 0) + { + j = packedFGColour; + } + else + if (!this.enabled) + { + j = 10526880; + } + else if (this.hovered) + { + j = 16777120; + } + + this.drawCenteredString(fontrenderer, this.displayString, this.x + this.width / 2, this.y + (this.height - 8) / 2, j); + } + } + + /** + * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e). + */ + protected void mouseDragged(Minecraft mc, int mouseX, int mouseY) + { + } + + /** + * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e). + */ + public void mouseReleased(int mouseX, int mouseY) + { + } + + /** + * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent + * e). + */ + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + return this.enabled && this.visible && mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + } + + /** + * Whether the mouse cursor is currently over the button. + */ + public boolean isMouseOver() + { + return this.hovered; + } + + public void drawButtonForegroundLayer(int mouseX, int mouseY) + { + } + + public void playPressSound(SoundHandler soundHandlerIn) + { + soundHandlerIn.playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + } + + public int getButtonWidth() + { + return this.width; + } + + public void setWidth(int width) + { + this.width = width; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonImage.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonImage.java new file mode 100644 index 0000000..9570d45 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonImage.java @@ -0,0 +1,54 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButtonImage extends GuiButton +{ + private final ResourceLocation resourceLocation; + private final int xTexStart; + private final int yTexStart; + private final int yDiffText; + + public GuiButtonImage(int p_i47392_1_, int p_i47392_2_, int p_i47392_3_, int p_i47392_4_, int p_i47392_5_, int p_i47392_6_, int p_i47392_7_, int p_i47392_8_, ResourceLocation p_i47392_9_) + { + super(p_i47392_1_, p_i47392_2_, p_i47392_3_, p_i47392_4_, p_i47392_5_, ""); + this.xTexStart = p_i47392_6_; + this.yTexStart = p_i47392_7_; + this.yDiffText = p_i47392_8_; + this.resourceLocation = p_i47392_9_; + } + + public void setPosition(int p_191746_1_, int p_191746_2_) + { + this.x = p_191746_1_; + this.y = p_191746_2_; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + mc.getTextureManager().bindTexture(this.resourceLocation); + GlStateManager.disableDepth(); + int i = this.xTexStart; + int j = this.yTexStart; + + if (this.hovered) + { + j += this.yDiffText; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, this.width, this.height); + GlStateManager.enableDepth(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonLanguage.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonLanguage.java new file mode 100644 index 0000000..bbaac32 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonLanguage.java @@ -0,0 +1,36 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButtonLanguage extends GuiButton +{ + public GuiButtonLanguage(int buttonID, int xPos, int yPos) + { + super(buttonID, xPos, yPos, 20, 20, ""); + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + mc.getTextureManager().bindTexture(GuiButton.BUTTON_TEXTURES); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + int i = 106; + + if (flag) + { + i += this.height; + } + + this.drawTexturedModalRect(this.x, this.y, 0, i, this.width, this.height); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonRealmsProxy.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonRealmsProxy.java new file mode 100644 index 0000000..700235e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonRealmsProxy.java @@ -0,0 +1,108 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.realms.RealmsButton; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButtonRealmsProxy extends GuiButton +{ + private final RealmsButton realmsButton; + + public GuiButtonRealmsProxy(RealmsButton realmsButtonIn, int buttonId, int x, int y, String text) + { + super(buttonId, x, y, text); + this.realmsButton = realmsButtonIn; + } + + public GuiButtonRealmsProxy(RealmsButton realmsButtonIn, int buttonId, int x, int y, String text, int widthIn, int heightIn) + { + super(buttonId, x, y, widthIn, heightIn, text); + this.realmsButton = realmsButtonIn; + } + + public int getId() + { + return this.id; + } + + public boolean getEnabled() + { + return this.enabled; + } + + public void setEnabled(boolean isEnabled) + { + this.enabled = isEnabled; + } + + public void setText(String text) + { + super.displayString = text; + } + + public int getButtonWidth() + { + return super.getButtonWidth(); + } + + public int getPositionY() + { + return this.y; + } + + /** + * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent + * e). + */ + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + if (super.mousePressed(mc, mouseX, mouseY)) + { + this.realmsButton.clicked(mouseX, mouseY); + } + + return super.mousePressed(mc, mouseX, mouseY); + } + + /** + * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e). + */ + public void mouseReleased(int mouseX, int mouseY) + { + this.realmsButton.released(mouseX, mouseY); + } + + /** + * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e). + */ + public void mouseDragged(Minecraft mc, int mouseX, int mouseY) + { + this.realmsButton.renderBg(mouseX, mouseY); + } + + public RealmsButton getRealmsButton() + { + return this.realmsButton; + } + + /** + * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over + * this button. + */ + public int getHoverState(boolean mouseOver) + { + return this.realmsButton.getYImage(mouseOver); + } + + public int getYImage(boolean p_154312_1_) + { + return super.getHoverState(p_154312_1_); + } + + public int getHeight() + { + return this.height; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonToggle.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonToggle.java new file mode 100644 index 0000000..e70f8e4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiButtonToggle.java @@ -0,0 +1,77 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButtonToggle extends GuiButton +{ + protected ResourceLocation resourceLocation; + protected boolean stateTriggered; + protected int xTexStart; + protected int yTexStart; + protected int xDiffTex; + protected int yDiffTex; + + public GuiButtonToggle(int buttonId, int xIn, int yIn, int widthIn, int heightIn, boolean buttonText) + { + super(buttonId, xIn, yIn, widthIn, heightIn, ""); + this.stateTriggered = buttonText; + } + + public void initTextureValues(int xTexStartIn, int yTexStartIn, int xDiffTexIn, int yDiffTexIn, ResourceLocation resourceLocationIn) + { + this.xTexStart = xTexStartIn; + this.yTexStart = yTexStartIn; + this.xDiffTex = xDiffTexIn; + this.yDiffTex = yDiffTexIn; + this.resourceLocation = resourceLocationIn; + } + + public void setStateTriggered(boolean p_191753_1_) + { + this.stateTriggered = p_191753_1_; + } + + public boolean isStateTriggered() + { + return this.stateTriggered; + } + + public void setPosition(int p_191752_1_, int p_191752_2_) + { + this.x = p_191752_1_; + this.y = p_191752_2_; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + mc.getTextureManager().bindTexture(this.resourceLocation); + GlStateManager.disableDepth(); + int i = this.xTexStart; + int j = this.yTexStart; + + if (this.stateTriggered) + { + i += this.xDiffTex; + } + + if (this.hovered) + { + j += this.yDiffTex; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, this.width, this.height); + GlStateManager.enableDepth(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiChat.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiChat.java new file mode 100644 index 0000000..a0bada9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiChat.java @@ -0,0 +1,312 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ITabCompleter; +import net.minecraft.util.TabCompleter; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public class GuiChat extends GuiScreen implements ITabCompleter +{ + private static final Logger LOGGER = LogManager.getLogger(); + private String historyBuffer = ""; + /** + * keeps position of which chat message you will select when you press up, (does not increase for duplicated + * messages sent immediately after each other) + */ + private int sentHistoryCursor = -1; + private TabCompleter tabCompleter; + /** Chat entry field */ + protected GuiTextField inputField; + /** is the text that appears when you press the chat key and the input box appears pre-filled */ + private String defaultInputFieldText = ""; + + public GuiChat() + { + } + + public GuiChat(String defaultText) + { + this.defaultInputFieldText = defaultText; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.sentHistoryCursor = this.mc.ingameGUI.getChatGUI().getSentMessages().size(); + this.inputField = new GuiTextField(0, this.fontRenderer, 4, this.height - 12, this.width - 4, 12); + this.inputField.setMaxStringLength(256); + this.inputField.setEnableBackgroundDrawing(false); + this.inputField.setFocused(true); + this.inputField.setText(this.defaultInputFieldText); + this.inputField.setCanLoseFocus(false); + this.tabCompleter = new GuiChat.ChatTabCompleter(this.inputField); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + this.mc.ingameGUI.getChatGUI().resetScroll(); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.inputField.updateCursorCounter(); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + this.tabCompleter.resetRequested(); + + if (keyCode == 15) + { + this.tabCompleter.complete(); + } + else + { + this.tabCompleter.resetDidComplete(); + } + + if (keyCode == 1) + { + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (keyCode != 28 && keyCode != 156) + { + if (keyCode == 200) + { + this.getSentHistory(-1); + } + else if (keyCode == 208) + { + this.getSentHistory(1); + } + else if (keyCode == 201) + { + this.mc.ingameGUI.getChatGUI().scroll(this.mc.ingameGUI.getChatGUI().getLineCount() - 1); + } + else if (keyCode == 209) + { + this.mc.ingameGUI.getChatGUI().scroll(-this.mc.ingameGUI.getChatGUI().getLineCount() + 1); + } + else + { + this.inputField.textboxKeyTyped(typedChar, keyCode); + } + } + else + { + String s = this.inputField.getText().trim(); + + if (!s.isEmpty()) + { + this.sendChatMessage(s); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + int i = Mouse.getEventDWheel(); + + if (i != 0) + { + if (i > 1) + { + i = 1; + } + + if (i < -1) + { + i = -1; + } + + if (!isShiftKeyDown()) + { + i *= 7; + } + + this.mc.ingameGUI.getChatGUI().scroll(i); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (mouseButton == 0) + { + ITextComponent itextcomponent = this.mc.ingameGUI.getChatGUI().getChatComponent(Mouse.getX(), Mouse.getY()); + + if (itextcomponent != null && this.handleComponentClick(itextcomponent)) + { + return; + } + } + + this.inputField.mouseClicked(mouseX, mouseY, mouseButton); + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Sets the text of the chat + */ + protected void setText(String newChatText, boolean shouldOverwrite) + { + if (shouldOverwrite) + { + this.inputField.setText(newChatText); + } + else + { + this.inputField.writeText(newChatText); + } + } + + /** + * input is relative and is applied directly to the sentHistoryCursor so -1 is the previous message, 1 is the next + * message from the current cursor position + */ + public void getSentHistory(int msgPos) + { + int i = this.sentHistoryCursor + msgPos; + int j = this.mc.ingameGUI.getChatGUI().getSentMessages().size(); + i = MathHelper.clamp(i, 0, j); + + if (i != this.sentHistoryCursor) + { + if (i == j) + { + this.sentHistoryCursor = j; + this.inputField.setText(this.historyBuffer); + } + else + { + if (this.sentHistoryCursor == j) + { + this.historyBuffer = this.inputField.getText(); + } + + this.inputField.setText((String)this.mc.ingameGUI.getChatGUI().getSentMessages().get(i)); + this.sentHistoryCursor = i; + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + drawRect(2, this.height - 14, this.width - 2, this.height - 2, Integer.MIN_VALUE); + this.inputField.drawTextBox(); + ITextComponent itextcomponent = this.mc.ingameGUI.getChatGUI().getChatComponent(Mouse.getX(), Mouse.getY()); + + if (itextcomponent != null && itextcomponent.getStyle().getHoverEvent() != null) + { + this.handleComponentHover(itextcomponent, mouseX, mouseY); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return false; + } + + /** + * Sets the list of tab completions, as long as they were previously requested. + */ + public void setCompletions(String... newCompletions) + { + this.tabCompleter.setCompletions(newCompletions); + } + + @SideOnly(Side.CLIENT) + public static class ChatTabCompleter extends TabCompleter + { + /** The instance of the Minecraft client */ + private final Minecraft client = Minecraft.getMinecraft(); + + public ChatTabCompleter(GuiTextField p_i46749_1_) + { + super(p_i46749_1_, false); + } + + /** + * Called when tab key pressed. If it's the first time we tried to complete this string, we ask the server + * for completions. When the server responds, this method gets called again (via setCompletions). + */ + public void complete() + { + super.complete(); + + if (this.completions.size() > 1) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (String s : this.completions) + { + if (stringbuilder.length() > 0) + { + stringbuilder.append(", "); + } + + stringbuilder.append(s); + } + + this.client.ingameGUI.getChatGUI().printChatMessageWithOptionalDeletion(new TextComponentString(stringbuilder.toString()), 1); + } + } + + @Nullable + public BlockPos getTargetBlockPos() + { + BlockPos blockpos = null; + + if (this.client.objectMouseOver != null && this.client.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK) + { + blockpos = this.client.objectMouseOver.getBlockPos(); + } + + return blockpos; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.java new file mode 100644 index 0000000..425e7cf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiClickableScrolledSelectionListProxy.java @@ -0,0 +1,120 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.realms.RealmsClickableScrolledSelectionList; +import net.minecraft.realms.Tezzelator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public class GuiClickableScrolledSelectionListProxy extends GuiSlot +{ + private final RealmsClickableScrolledSelectionList proxy; + + public GuiClickableScrolledSelectionListProxy(RealmsClickableScrolledSelectionList selectionList, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn) + { + super(Minecraft.getMinecraft(), widthIn, heightIn, topIn, bottomIn, slotHeightIn); + this.proxy = selectionList; + } + + protected int getSize() + { + return this.proxy.getItemCount(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + this.proxy.selectItem(slotIndex, isDoubleClick, mouseX, mouseY); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return this.proxy.isSelectedItem(slotIndex); + } + + protected void drawBackground() + { + this.proxy.renderBackground(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + this.proxy.renderItem(slotIndex, xPos, yPos, heightIn, mouseXIn, mouseYIn); + } + + public int width() + { + return this.width; + } + + public int mouseY() + { + return this.mouseY; + } + + public int mouseX() + { + return this.mouseX; + } + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.proxy.getMaxPosition(); + } + + protected int getScrollBarX() + { + return this.proxy.getScrollbarPosition(); + } + + public void handleMouseInput() + { + super.handleMouseInput(); + + if (this.scrollMultiplier > 0.0F && Mouse.getEventButtonState()) + { + this.proxy.customMouseEvent(this.top, this.bottom, this.headerPadding, this.amountScrolled, this.slotHeight); + } + } + + public void renderSelected(int p_178043_1_, int p_178043_2_, int p_178043_3_, Tezzelator p_178043_4_) + { + this.proxy.renderSelected(p_178043_1_, p_178043_2_, p_178043_3_, p_178043_4_); + } + + /** + * Draws the selection box around the selected slot element. + */ + protected void drawSelectionBox(int insideLeft, int insideTop, int mouseXIn, int mouseYIn, float partialTicks) + { + int i = this.getSize(); + + for (int j = 0; j < i; ++j) + { + int k = insideTop + j * this.slotHeight + this.headerPadding; + int l = this.slotHeight - 4; + + if (k > this.bottom || k + l < this.top) + { + this.updateItemPos(j, insideLeft, k, partialTicks); + } + + if (this.showSelectionBox && this.isSelected(j)) + { + this.renderSelected(this.width, k, l, Tezzelator.instance); + } + + this.drawSlot(j, insideLeft, k, l, mouseXIn, mouseYIn, partialTicks); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCommandBlock.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCommandBlock.java new file mode 100644 index 0000000..a12860b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCommandBlock.java @@ -0,0 +1,322 @@ +package net.minecraft.client.gui; + +import io.netty.buffer.Unpooled; +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.util.ITabCompleter; +import net.minecraft.util.TabCompleter; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiCommandBlock extends GuiScreen implements ITabCompleter +{ + /** Text field containing the command block's command. */ + private GuiTextField commandTextField; + private GuiTextField previousOutputTextField; + private final TileEntityCommandBlock commandBlock; + /** "Done" button for the GUI. */ + private GuiButton doneBtn; + private GuiButton cancelBtn; + private GuiButton outputBtn; + private GuiButton modeBtn; + private GuiButton conditionalBtn; + private GuiButton autoExecBtn; + private boolean trackOutput; + private TileEntityCommandBlock.Mode commandBlockMode = TileEntityCommandBlock.Mode.REDSTONE; + private TabCompleter tabCompleter; + private boolean conditional; + private boolean automatic; + + public GuiCommandBlock(TileEntityCommandBlock commandBlockIn) + { + this.commandBlock = commandBlockIn; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.commandTextField.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + final CommandBlockBaseLogic commandblockbaselogic = this.commandBlock.getCommandBlockLogic(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.doneBtn = this.addButton(new GuiButton(0, this.width / 2 - 4 - 150, this.height / 4 + 120 + 12, 150, 20, I18n.format("gui.done"))); + this.cancelBtn = this.addButton(new GuiButton(1, this.width / 2 + 4, this.height / 4 + 120 + 12, 150, 20, I18n.format("gui.cancel"))); + this.outputBtn = this.addButton(new GuiButton(4, this.width / 2 + 150 - 20, 135, 20, 20, "O")); + this.modeBtn = this.addButton(new GuiButton(5, this.width / 2 - 50 - 100 - 4, 165, 100, 20, I18n.format("advMode.mode.sequence"))); + this.conditionalBtn = this.addButton(new GuiButton(6, this.width / 2 - 50, 165, 100, 20, I18n.format("advMode.mode.unconditional"))); + this.autoExecBtn = this.addButton(new GuiButton(7, this.width / 2 + 50 + 4, 165, 100, 20, I18n.format("advMode.mode.redstoneTriggered"))); + this.commandTextField = new GuiTextField(2, this.fontRenderer, this.width / 2 - 150, 50, 300, 20); + this.commandTextField.setMaxStringLength(32500); + this.commandTextField.setFocused(true); + this.previousOutputTextField = new GuiTextField(3, this.fontRenderer, this.width / 2 - 150, 135, 276, 20); + this.previousOutputTextField.setMaxStringLength(32500); + this.previousOutputTextField.setEnabled(false); + this.previousOutputTextField.setText("-"); + this.doneBtn.enabled = false; + this.outputBtn.enabled = false; + this.modeBtn.enabled = false; + this.conditionalBtn.enabled = false; + this.autoExecBtn.enabled = false; + this.tabCompleter = new TabCompleter(this.commandTextField, true) + { + @Nullable + public BlockPos getTargetBlockPos() + { + return commandblockbaselogic.getPosition(); + } + }; + } + + public void updateGui() + { + CommandBlockBaseLogic commandblockbaselogic = this.commandBlock.getCommandBlockLogic(); + this.commandTextField.setText(commandblockbaselogic.getCommand()); + this.trackOutput = commandblockbaselogic.shouldTrackOutput(); + this.commandBlockMode = this.commandBlock.getMode(); + this.conditional = this.commandBlock.isConditional(); + this.automatic = this.commandBlock.isAuto(); + this.updateCmdOutput(); + this.updateMode(); + this.updateConditional(); + this.updateAutoExec(); + this.doneBtn.enabled = true; + this.outputBtn.enabled = true; + this.modeBtn.enabled = true; + this.conditionalBtn.enabled = true; + this.autoExecBtn.enabled = true; + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + CommandBlockBaseLogic commandblockbaselogic = this.commandBlock.getCommandBlockLogic(); + + if (button.id == 1) + { + commandblockbaselogic.setTrackOutput(this.trackOutput); + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == 0) + { + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + commandblockbaselogic.fillInInfo(packetbuffer); + packetbuffer.writeString(this.commandTextField.getText()); + packetbuffer.writeBoolean(commandblockbaselogic.shouldTrackOutput()); + packetbuffer.writeString(this.commandBlockMode.name()); + packetbuffer.writeBoolean(this.conditional); + packetbuffer.writeBoolean(this.automatic); + this.mc.getConnection().sendPacket(new CPacketCustomPayload("MC|AutoCmd", packetbuffer)); + + if (!commandblockbaselogic.shouldTrackOutput()) + { + commandblockbaselogic.setLastOutput((ITextComponent)null); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == 4) + { + commandblockbaselogic.setTrackOutput(!commandblockbaselogic.shouldTrackOutput()); + this.updateCmdOutput(); + } + else if (button.id == 5) + { + this.nextMode(); + this.updateMode(); + } + else if (button.id == 6) + { + this.conditional = !this.conditional; + this.updateConditional(); + } + else if (button.id == 7) + { + this.automatic = !this.automatic; + this.updateAutoExec(); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + this.tabCompleter.resetRequested(); + + if (keyCode == 15) + { + this.tabCompleter.complete(); + } + else + { + this.tabCompleter.resetDidComplete(); + } + + this.commandTextField.textboxKeyTyped(typedChar, keyCode); + this.previousOutputTextField.textboxKeyTyped(typedChar, keyCode); + + if (keyCode != 28 && keyCode != 156) + { + if (keyCode == 1) + { + this.actionPerformed(this.cancelBtn); + } + } + else + { + this.actionPerformed(this.doneBtn); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.commandTextField.mouseClicked(mouseX, mouseY, mouseButton); + this.previousOutputTextField.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("advMode.setCommand"), this.width / 2, 20, 16777215); + this.drawString(this.fontRenderer, I18n.format("advMode.command"), this.width / 2 - 150, 40, 10526880); + this.commandTextField.drawTextBox(); + int i = 75; + int j = 0; + this.drawString(this.fontRenderer, I18n.format("advMode.nearestPlayer"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.randomPlayer"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.allPlayers"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.allEntities"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.self"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + + if (!this.previousOutputTextField.getText().isEmpty()) + { + i = i + j * this.fontRenderer.FONT_HEIGHT + 1; + this.drawString(this.fontRenderer, I18n.format("advMode.previousOutput"), this.width / 2 - 150, i + 4, 10526880); + this.previousOutputTextField.drawTextBox(); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + private void updateCmdOutput() + { + CommandBlockBaseLogic commandblockbaselogic = this.commandBlock.getCommandBlockLogic(); + + if (commandblockbaselogic.shouldTrackOutput()) + { + this.outputBtn.displayString = "O"; + + if (commandblockbaselogic.getLastOutput() != null) + { + this.previousOutputTextField.setText(commandblockbaselogic.getLastOutput().getUnformattedText()); + } + } + else + { + this.outputBtn.displayString = "X"; + this.previousOutputTextField.setText("-"); + } + } + + private void updateMode() + { + switch (this.commandBlockMode) + { + case SEQUENCE: + this.modeBtn.displayString = I18n.format("advMode.mode.sequence"); + break; + case AUTO: + this.modeBtn.displayString = I18n.format("advMode.mode.auto"); + break; + case REDSTONE: + this.modeBtn.displayString = I18n.format("advMode.mode.redstone"); + } + } + + private void nextMode() + { + switch (this.commandBlockMode) + { + case SEQUENCE: + this.commandBlockMode = TileEntityCommandBlock.Mode.AUTO; + break; + case AUTO: + this.commandBlockMode = TileEntityCommandBlock.Mode.REDSTONE; + break; + case REDSTONE: + this.commandBlockMode = TileEntityCommandBlock.Mode.SEQUENCE; + } + } + + private void updateConditional() + { + if (this.conditional) + { + this.conditionalBtn.displayString = I18n.format("advMode.mode.conditional"); + } + else + { + this.conditionalBtn.displayString = I18n.format("advMode.mode.unconditional"); + } + } + + private void updateAutoExec() + { + if (this.automatic) + { + this.autoExecBtn.displayString = I18n.format("advMode.mode.autoexec.bat"); + } + else + { + this.autoExecBtn.displayString = I18n.format("advMode.mode.redstoneTriggered"); + } + } + + /** + * Sets the list of tab completions, as long as they were previously requested. + */ + public void setCompletions(String... newCompletions) + { + this.tabCompleter.setCompletions(newCompletions); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiConfirmOpenLink.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiConfirmOpenLink.java new file mode 100644 index 0000000..7370a8f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiConfirmOpenLink.java @@ -0,0 +1,79 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiConfirmOpenLink extends GuiYesNo +{ + /** Text to warn players from opening unsafe links. */ + private final String openLinkWarning; + /** Label for the Copy to Clipboard button. */ + private final String copyLinkButtonText; + private final String linkText; + private boolean showSecurityWarning = true; + + public GuiConfirmOpenLink(GuiYesNoCallback parentScreenIn, String linkTextIn, int parentButtonClickedIdIn, boolean trusted) + { + super(parentScreenIn, I18n.format(trusted ? "chat.link.confirmTrusted" : "chat.link.confirm"), linkTextIn, parentButtonClickedIdIn); + this.confirmButtonText = I18n.format(trusted ? "chat.link.open" : "gui.yes"); + this.cancelButtonText = I18n.format(trusted ? "gui.cancel" : "gui.no"); + this.copyLinkButtonText = I18n.format("chat.copy"); + this.openLinkWarning = I18n.format("chat.link.warning"); + this.linkText = linkTextIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 50 - 105, this.height / 6 + 96, 100, 20, this.confirmButtonText)); + this.buttonList.add(new GuiButton(2, this.width / 2 - 50, this.height / 6 + 96, 100, 20, this.copyLinkButtonText)); + this.buttonList.add(new GuiButton(1, this.width / 2 - 50 + 105, this.height / 6 + 96, 100, 20, this.cancelButtonText)); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 2) + { + this.copyLinkToClipboard(); + } + + this.parentScreen.confirmClicked(button.id == 0, this.parentButtonClickedId); + } + + /** + * Copies the link to the system clipboard. + */ + public void copyLinkToClipboard() + { + setClipboardString(this.linkText); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.showSecurityWarning) + { + this.drawCenteredString(this.fontRenderer, this.openLinkWarning, this.width / 2, 110, 16764108); + } + } + + public void disableSecurityWarning() + { + this.showSecurityWarning = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiControls.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiControls.java new file mode 100644 index 0000000..c9a1df7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiControls.java @@ -0,0 +1,179 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiControls extends GuiScreen +{ + private static final GameSettings.Options[] OPTIONS_ARR = new GameSettings.Options[] {GameSettings.Options.INVERT_MOUSE, GameSettings.Options.SENSITIVITY, GameSettings.Options.TOUCHSCREEN, GameSettings.Options.AUTO_JUMP}; + /** A reference to the screen object that created this. Used for navigating between screens. */ + private final GuiScreen parentScreen; + protected String screenTitle = "Controls"; + /** Reference to the GameSettings object. */ + private final GameSettings options; + /** The ID of the button that has been pressed. */ + public KeyBinding buttonId; + public long time; + private GuiKeyBindingList keyBindingList; + private GuiButton buttonReset; + + public GuiControls(GuiScreen screen, GameSettings settings) + { + this.parentScreen = screen; + this.options = settings; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.keyBindingList = new GuiKeyBindingList(this, this.mc); + this.buttonList.add(new GuiButton(200, this.width / 2 - 155 + 160, this.height - 29, 150, 20, I18n.format("gui.done"))); + this.buttonReset = this.addButton(new GuiButton(201, this.width / 2 - 155, this.height - 29, 150, 20, I18n.format("controls.resetAll"))); + this.screenTitle = I18n.format("controls.title"); + int i = 0; + + for (GameSettings.Options gamesettings$options : OPTIONS_ARR) + { + if (gamesettings$options.isFloat()) + { + this.buttonList.add(new GuiOptionSlider(gamesettings$options.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, 18 + 24 * (i >> 1), gamesettings$options)); + } + else + { + this.buttonList.add(new GuiOptionButton(gamesettings$options.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, 18 + 24 * (i >> 1), gamesettings$options, this.options.getKeyBinding(gamesettings$options))); + } + + ++i; + } + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.keyBindingList.handleMouseInput(); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 200) + { + this.mc.displayGuiScreen(this.parentScreen); + } + else if (button.id == 201) + { + for (KeyBinding keybinding : this.mc.gameSettings.keyBindings) + { + keybinding.setToDefault(); + } + + KeyBinding.resetKeyBindingArrayAndHash(); + } + else if (button.id < 100 && button instanceof GuiOptionButton) + { + this.options.setOptionValue(((GuiOptionButton)button).getOption(), 1); + button.displayString = this.options.getKeyBinding(GameSettings.Options.byOrdinal(button.id)); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (this.buttonId != null) + { + this.buttonId.setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier.getActiveModifier(), -100 + mouseButton); + this.options.setOptionKeyBinding(this.buttonId, -100 + mouseButton); + this.buttonId = null; + KeyBinding.resetKeyBindingArrayAndHash(); + } + else if (mouseButton != 0 || !this.keyBindingList.mouseClicked(mouseX, mouseY, mouseButton)) + { + super.mouseClicked(mouseX, mouseY, mouseButton); + } + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + if (state != 0 || !this.keyBindingList.mouseReleased(mouseX, mouseY, state)) + { + super.mouseReleased(mouseX, mouseY, state); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.buttonId != null) + { + if (keyCode == 1) + { + this.buttonId.setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier.NONE, 0); + this.options.setOptionKeyBinding(this.buttonId, 0); + } + else if (keyCode != 0) + { + this.buttonId.setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier.getActiveModifier(), keyCode); + this.options.setOptionKeyBinding(this.buttonId, keyCode); + } + else if (typedChar > 0) + { + this.buttonId.setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier.getActiveModifier(), typedChar + 256); + this.options.setOptionKeyBinding(this.buttonId, typedChar + 256); + } + + if (!net.minecraftforge.client.settings.KeyModifier.isKeyCodeModifier(keyCode)) + this.buttonId = null; + this.time = Minecraft.getSystemTime(); + KeyBinding.resetKeyBindingArrayAndHash(); + } + else + { + super.keyTyped(typedChar, keyCode); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.keyBindingList.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 8, 16777215); + boolean flag = false; + + for (KeyBinding keybinding : this.options.keyBindings) + { + if (!keybinding.isSetToDefaultValue()) + { + flag = true; + break; + } + } + + this.buttonReset.enabled = flag; + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCreateFlatWorld.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCreateFlatWorld.java new file mode 100644 index 0000000..5662912 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCreateFlatWorld.java @@ -0,0 +1,296 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.gen.FlatGeneratorInfo; +import net.minecraft.world.gen.FlatLayerInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiCreateFlatWorld extends GuiScreen +{ + private final GuiCreateWorld createWorldGui; + private FlatGeneratorInfo generatorInfo = FlatGeneratorInfo.getDefaultFlatGenerator(); + /** The title given to the flat world currently in creation */ + private String flatWorldTitle; + /** The text used to identify the material for a layer */ + private String materialText; + /** The text used to identify the height of a layer */ + private String heightText; + private GuiCreateFlatWorld.Details createFlatWorldListSlotGui; + /** The (unused and permenantly hidden) add layer button */ + private GuiButton addLayerButton; + /** The (unused and permenantly hidden) edit layer button */ + private GuiButton editLayerButton; + /** The remove layer button */ + private GuiButton removeLayerButton; + + public GuiCreateFlatWorld(GuiCreateWorld createWorldGuiIn, String preset) + { + this.createWorldGui = createWorldGuiIn; + this.setPreset(preset); + } + + /** + * Gets the superflat preset in the text format described on the Superflat article on the Minecraft Wiki + */ + public String getPreset() + { + return this.generatorInfo.toString(); + } + + /** + * Sets the superflat preset. Invalid or null values will result in the default superflat preset being used. + */ + public void setPreset(String preset) + { + this.generatorInfo = FlatGeneratorInfo.createFlatGeneratorFromString(preset); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + this.flatWorldTitle = I18n.format("createWorld.customize.flat.title"); + this.materialText = I18n.format("createWorld.customize.flat.tile"); + this.heightText = I18n.format("createWorld.customize.flat.height"); + this.createFlatWorldListSlotGui = new GuiCreateFlatWorld.Details(); + this.addLayerButton = this.addButton(new GuiButton(2, this.width / 2 - 154, this.height - 52, 100, 20, I18n.format("createWorld.customize.flat.addLayer") + " (NYI)")); + this.editLayerButton = this.addButton(new GuiButton(3, this.width / 2 - 50, this.height - 52, 100, 20, I18n.format("createWorld.customize.flat.editLayer") + " (NYI)")); + this.removeLayerButton = this.addButton(new GuiButton(4, this.width / 2 - 155, this.height - 52, 150, 20, I18n.format("createWorld.customize.flat.removeLayer"))); + this.buttonList.add(new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, I18n.format("gui.done"))); + this.buttonList.add(new GuiButton(5, this.width / 2 + 5, this.height - 52, 150, 20, I18n.format("createWorld.customize.presets"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, I18n.format("gui.cancel"))); + this.addLayerButton.visible = false; + this.editLayerButton.visible = false; + this.generatorInfo.updateLayers(); + this.onLayersChanged(); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.createFlatWorldListSlotGui.handleMouseInput(); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + int i = this.generatorInfo.getFlatLayers().size() - this.createFlatWorldListSlotGui.selectedLayer - 1; + + if (button.id == 1) + { + this.mc.displayGuiScreen(this.createWorldGui); + } + else if (button.id == 0) + { + this.createWorldGui.chunkProviderSettingsJson = this.getPreset(); + this.mc.displayGuiScreen(this.createWorldGui); + } + else if (button.id == 5) + { + this.mc.displayGuiScreen(new GuiFlatPresets(this)); + } + else if (button.id == 4 && this.hasSelectedLayer()) + { + this.generatorInfo.getFlatLayers().remove(i); + this.createFlatWorldListSlotGui.selectedLayer = Math.min(this.createFlatWorldListSlotGui.selectedLayer, this.generatorInfo.getFlatLayers().size() - 1); + } + + this.generatorInfo.updateLayers(); + this.onLayersChanged(); + } + + /** + * Would update whether or not the edit and remove buttons are enabled, but is currently disabled and always + * disables the buttons (which are invisible anyways) + */ + public void onLayersChanged() + { + boolean flag = this.hasSelectedLayer(); + this.removeLayerButton.enabled = flag; + this.editLayerButton.enabled = flag; + this.editLayerButton.enabled = false; + this.addLayerButton.enabled = false; + } + + /** + * Returns whether there is a valid layer selection + */ + private boolean hasSelectedLayer() + { + return this.createFlatWorldListSlotGui.selectedLayer > -1 && this.createFlatWorldListSlotGui.selectedLayer < this.generatorInfo.getFlatLayers().size(); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.createFlatWorldListSlotGui.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.flatWorldTitle, this.width / 2, 8, 16777215); + int i = this.width / 2 - 92 - 16; + this.drawString(this.fontRenderer, this.materialText, i, 32, 16777215); + this.drawString(this.fontRenderer, this.heightText, i + 2 + 213 - this.fontRenderer.getStringWidth(this.heightText), 32, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @SideOnly(Side.CLIENT) + class Details extends GuiSlot + { + /** + * The currently selected layer; -1 if there is no selection. This is in the order that it is displayed on- + * screen, with the topmost layer having index 0. + */ + public int selectedLayer = -1; + + public Details() + { + super(GuiCreateFlatWorld.this.mc, GuiCreateFlatWorld.this.width, GuiCreateFlatWorld.this.height, 43, GuiCreateFlatWorld.this.height - 60, 24); + } + + /** + * Draws an item with a background at the given coordinates. The item and its background are 20 pixels tall/wide + * (though only the inner 18x18 is actually drawn on) + */ + private void drawItem(int x, int z, ItemStack itemToDraw) + { + this.drawItemBackground(x + 1, z + 1); + GlStateManager.enableRescaleNormal(); + + if (!itemToDraw.isEmpty()) + { + RenderHelper.enableGUIStandardItemLighting(); + GuiCreateFlatWorld.this.itemRender.renderItemIntoGUI(itemToDraw, x + 2, z + 2); + RenderHelper.disableStandardItemLighting(); + } + + GlStateManager.disableRescaleNormal(); + } + + /** + * Draws the background icon for an item, with the indented texture from stats.png + */ + private void drawItemBackground(int x, int y) + { + this.drawItemBackground(x, y, 0, 0); + } + + /** + * Draws the background icon for an item, using a texture from stats.png with the given coords + */ + private void drawItemBackground(int x, int z, int textureX, int textureY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(Gui.STAT_ICONS); + float f = 0.0078125F; + float f1 = 0.0078125F; + int i = 18; + int j = 18; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(x + 0), (double)(z + 18), (double)GuiCreateFlatWorld.this.zLevel).tex((double)((float)(textureX + 0) * 0.0078125F), (double)((float)(textureY + 18) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(x + 18), (double)(z + 18), (double)GuiCreateFlatWorld.this.zLevel).tex((double)((float)(textureX + 18) * 0.0078125F), (double)((float)(textureY + 18) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(x + 18), (double)(z + 0), (double)GuiCreateFlatWorld.this.zLevel).tex((double)((float)(textureX + 18) * 0.0078125F), (double)((float)(textureY + 0) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(x + 0), (double)(z + 0), (double)GuiCreateFlatWorld.this.zLevel).tex((double)((float)(textureX + 0) * 0.0078125F), (double)((float)(textureY + 0) * 0.0078125F)).endVertex(); + tessellator.draw(); + } + + protected int getSize() + { + return GuiCreateFlatWorld.this.generatorInfo.getFlatLayers().size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + this.selectedLayer = slotIndex; + GuiCreateFlatWorld.this.onLayersChanged(); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return slotIndex == this.selectedLayer; + } + + protected void drawBackground() + { + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + FlatLayerInfo flatlayerinfo = (FlatLayerInfo)GuiCreateFlatWorld.this.generatorInfo.getFlatLayers().get(GuiCreateFlatWorld.this.generatorInfo.getFlatLayers().size() - slotIndex - 1); + IBlockState iblockstate = flatlayerinfo.getLayerMaterial(); + Block block = iblockstate.getBlock(); + Item item = Item.getItemFromBlock(block); + + if (item == Items.AIR) + { + if (block != Blocks.WATER && block != Blocks.FLOWING_WATER) + { + if (block == Blocks.LAVA || block == Blocks.FLOWING_LAVA) + { + item = Items.LAVA_BUCKET; + } + } + else + { + item = Items.WATER_BUCKET; + } + } + + ItemStack itemstack = new ItemStack(item, 1, item.getHasSubtypes() ? block.getMetaFromState(iblockstate) : 0); + String s = item.getItemStackDisplayName(itemstack); + this.drawItem(xPos, yPos, itemstack); + GuiCreateFlatWorld.this.fontRenderer.drawString(s, xPos + 18 + 5, yPos + 3, 16777215); + String s1; + + if (slotIndex == 0) + { + s1 = I18n.format("createWorld.customize.flat.layer.top", flatlayerinfo.getLayerCount()); + } + else if (slotIndex == GuiCreateFlatWorld.this.generatorInfo.getFlatLayers().size() - 1) + { + s1 = I18n.format("createWorld.customize.flat.layer.bottom", flatlayerinfo.getLayerCount()); + } + else + { + s1 = I18n.format("createWorld.customize.flat.layer", flatlayerinfo.getLayerCount()); + } + + GuiCreateFlatWorld.this.fontRenderer.drawString(s1, xPos + 2 + 213 - GuiCreateFlatWorld.this.fontRenderer.getStringWidth(s1), yPos + 3, 16777215); + } + + protected int getScrollBarX() + { + return this.width - 70; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCreateWorld.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCreateWorld.java new file mode 100644 index 0000000..4133514 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCreateWorld.java @@ -0,0 +1,547 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import java.util.Random; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiCreateWorld extends GuiScreen +{ + private final GuiScreen parentScreen; + private GuiTextField worldNameField; + private GuiTextField worldSeedField; + private String saveDirName; + private String gameMode = "survival"; + /** Used to save away the game mode when the current "debug" world type is chosen (forcing it to spectator mode) */ + private String savedGameMode; + private boolean generateStructuresEnabled = true; + /** If cheats are allowed */ + private boolean allowCheats; + /** + * User explicitly clicked "Allow Cheats" at some point + * Prevents value changes due to changing game mode + */ + private boolean allowCheatsWasSetByUser; + private boolean bonusChestEnabled; + /** Set to true when "hardcore" is the currently-selected gamemode */ + private boolean hardCoreMode; + private boolean alreadyGenerated; + private boolean inMoreWorldOptionsDisplay; + private GuiButton btnGameMode; + private GuiButton btnMoreOptions; + private GuiButton btnMapFeatures; + private GuiButton btnBonusItems; + private GuiButton btnMapType; + private GuiButton btnAllowCommands; + private GuiButton btnCustomizeType; + private String gameModeDesc1; + private String gameModeDesc2; + private String worldSeed; + private String worldName; + private int selectedIndex; + public String chunkProviderSettingsJson = ""; + /** These filenames are known to be restricted on one or more OS's. */ + private static final String[] DISALLOWED_FILENAMES = new String[] {"CON", "COM", "PRN", "AUX", "CLOCK$", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"}; + + public GuiCreateWorld(GuiScreen p_i46320_1_) + { + this.parentScreen = p_i46320_1_; + this.worldSeed = ""; + this.worldName = I18n.format("selectWorld.newWorld"); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.worldNameField.updateCursorCounter(); + this.worldSeedField.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, I18n.format("selectWorld.create"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, I18n.format("gui.cancel"))); + this.btnGameMode = this.addButton(new GuiButton(2, this.width / 2 - 75, 115, 150, 20, I18n.format("selectWorld.gameMode"))); + this.btnMoreOptions = this.addButton(new GuiButton(3, this.width / 2 - 75, 187, 150, 20, I18n.format("selectWorld.moreWorldOptions"))); + this.btnMapFeatures = this.addButton(new GuiButton(4, this.width / 2 - 155, 100, 150, 20, I18n.format("selectWorld.mapFeatures"))); + this.btnMapFeatures.visible = false; + this.btnBonusItems = this.addButton(new GuiButton(7, this.width / 2 + 5, 151, 150, 20, I18n.format("selectWorld.bonusItems"))); + this.btnBonusItems.visible = false; + this.btnMapType = this.addButton(new GuiButton(5, this.width / 2 + 5, 100, 150, 20, I18n.format("selectWorld.mapType"))); + this.btnMapType.visible = false; + this.btnAllowCommands = this.addButton(new GuiButton(6, this.width / 2 - 155, 151, 150, 20, I18n.format("selectWorld.allowCommands"))); + this.btnAllowCommands.visible = false; + this.btnCustomizeType = this.addButton(new GuiButton(8, this.width / 2 + 5, 120, 150, 20, I18n.format("selectWorld.customizeType"))); + this.btnCustomizeType.visible = false; + this.worldNameField = new GuiTextField(9, this.fontRenderer, this.width / 2 - 100, 60, 200, 20); + this.worldNameField.setFocused(true); + this.worldNameField.setText(this.worldName); + this.worldSeedField = new GuiTextField(10, this.fontRenderer, this.width / 2 - 100, 60, 200, 20); + this.worldSeedField.setText(this.worldSeed); + this.showMoreWorldOptions(this.inMoreWorldOptionsDisplay); + this.calcSaveDirName(); + this.updateDisplayState(); + } + + /** + * Determine a save-directory name from the world name + */ + private void calcSaveDirName() + { + this.saveDirName = this.worldNameField.getText().trim(); + + for (char c0 : ChatAllowedCharacters.ILLEGAL_FILE_CHARACTERS) + { + this.saveDirName = this.saveDirName.replace(c0, '_'); + } + + if (StringUtils.isEmpty(this.saveDirName)) + { + this.saveDirName = "World"; + } + + this.saveDirName = getUncollidingSaveDirName(this.mc.getSaveLoader(), this.saveDirName); + } + + /** + * Sets displayed GUI elements according to the current settings state + */ + private void updateDisplayState() + { + this.btnGameMode.displayString = I18n.format("selectWorld.gameMode") + ": " + I18n.format("selectWorld.gameMode." + this.gameMode); + this.gameModeDesc1 = I18n.format("selectWorld.gameMode." + this.gameMode + ".line1"); + this.gameModeDesc2 = I18n.format("selectWorld.gameMode." + this.gameMode + ".line2"); + this.btnMapFeatures.displayString = I18n.format("selectWorld.mapFeatures") + " "; + + if (this.generateStructuresEnabled) + { + this.btnMapFeatures.displayString = this.btnMapFeatures.displayString + I18n.format("options.on"); + } + else + { + this.btnMapFeatures.displayString = this.btnMapFeatures.displayString + I18n.format("options.off"); + } + + this.btnBonusItems.displayString = I18n.format("selectWorld.bonusItems") + " "; + + if (this.bonusChestEnabled && !this.hardCoreMode) + { + this.btnBonusItems.displayString = this.btnBonusItems.displayString + I18n.format("options.on"); + } + else + { + this.btnBonusItems.displayString = this.btnBonusItems.displayString + I18n.format("options.off"); + } + + this.btnMapType.displayString = I18n.format("selectWorld.mapType") + " " + I18n.format(WorldType.WORLD_TYPES[this.selectedIndex].getTranslationKey()); + this.btnAllowCommands.displayString = I18n.format("selectWorld.allowCommands") + " "; + + if (this.allowCheats && !this.hardCoreMode) + { + this.btnAllowCommands.displayString = this.btnAllowCommands.displayString + I18n.format("options.on"); + } + else + { + this.btnAllowCommands.displayString = this.btnAllowCommands.displayString + I18n.format("options.off"); + } + } + + /** + * Ensures that a proposed directory name doesn't collide with existing names. + * Returns the name, possibly modified to avoid collisions. + */ + public static String getUncollidingSaveDirName(ISaveFormat saveLoader, String name) + { + name = name.replaceAll("[\\./\"]", "_"); + + for (String s : DISALLOWED_FILENAMES) + { + if (name.equalsIgnoreCase(s)) + { + name = "_" + name + "_"; + } + } + + while (saveLoader.getWorldInfo(name) != null) + { + name = name + "-"; + } + + return name; + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 1) + { + this.mc.displayGuiScreen(this.parentScreen); + } + else if (button.id == 0) + { + this.mc.displayGuiScreen((GuiScreen)null); + + if (this.alreadyGenerated) + { + return; + } + + this.alreadyGenerated = true; + long i = (new Random()).nextLong(); + String s = this.worldSeedField.getText(); + + if (!StringUtils.isEmpty(s)) + { + try + { + long j = Long.parseLong(s); + + if (j != 0L) + { + i = j; + } + } + catch (NumberFormatException var7) + { + i = (long)s.hashCode(); + } + } + + WorldType.WORLD_TYPES[this.selectedIndex].onGUICreateWorldPress(); + + WorldSettings worldsettings = new WorldSettings(i, GameType.getByName(this.gameMode), this.generateStructuresEnabled, this.hardCoreMode, WorldType.WORLD_TYPES[this.selectedIndex]); + worldsettings.setGeneratorOptions(this.chunkProviderSettingsJson); + + if (this.bonusChestEnabled && !this.hardCoreMode) + { + worldsettings.enableBonusChest(); + } + + if (this.allowCheats && !this.hardCoreMode) + { + worldsettings.enableCommands(); + } + + this.mc.launchIntegratedServer(this.saveDirName, this.worldNameField.getText().trim(), worldsettings); + } + else if (button.id == 3) + { + this.toggleMoreWorldOptions(); + } + else if (button.id == 2) + { + if ("survival".equals(this.gameMode)) + { + if (!this.allowCheatsWasSetByUser) + { + this.allowCheats = false; + } + + this.hardCoreMode = false; + this.gameMode = "hardcore"; + this.hardCoreMode = true; + this.btnAllowCommands.enabled = false; + this.btnBonusItems.enabled = false; + this.updateDisplayState(); + } + else if ("hardcore".equals(this.gameMode)) + { + if (!this.allowCheatsWasSetByUser) + { + this.allowCheats = true; + } + + this.hardCoreMode = false; + this.gameMode = "creative"; + this.updateDisplayState(); + this.hardCoreMode = false; + this.btnAllowCommands.enabled = true; + this.btnBonusItems.enabled = true; + } + else + { + if (!this.allowCheatsWasSetByUser) + { + this.allowCheats = false; + } + + this.gameMode = "survival"; + this.updateDisplayState(); + this.btnAllowCommands.enabled = true; + this.btnBonusItems.enabled = true; + this.hardCoreMode = false; + } + + this.updateDisplayState(); + } + else if (button.id == 4) + { + this.generateStructuresEnabled = !this.generateStructuresEnabled; + this.updateDisplayState(); + } + else if (button.id == 7) + { + this.bonusChestEnabled = !this.bonusChestEnabled; + this.updateDisplayState(); + } + else if (button.id == 5) + { + ++this.selectedIndex; + + if (this.selectedIndex >= WorldType.WORLD_TYPES.length) + { + this.selectedIndex = 0; + } + + while (!this.canSelectCurWorldType()) + { + ++this.selectedIndex; + + if (this.selectedIndex >= WorldType.WORLD_TYPES.length) + { + this.selectedIndex = 0; + } + } + + this.chunkProviderSettingsJson = ""; + this.updateDisplayState(); + this.showMoreWorldOptions(this.inMoreWorldOptionsDisplay); + } + else if (button.id == 6) + { + this.allowCheatsWasSetByUser = true; + this.allowCheats = !this.allowCheats; + this.updateDisplayState(); + } + else if (button.id == 8) + { + WorldType.WORLD_TYPES[this.selectedIndex].onCustomizeButton(mc, this); + } + } + } + + /** + * Returns whether the currently-selected world type is actually acceptable for selection + * Used to hide the "debug" world type unless the shift key is depressed. + */ + private boolean canSelectCurWorldType() + { + WorldType worldtype = WorldType.WORLD_TYPES[this.selectedIndex]; + + if (worldtype != null && worldtype.canBeCreated()) + { + return worldtype == WorldType.DEBUG_ALL_BLOCK_STATES ? isShiftKeyDown() : true; + } + else + { + return false; + } + } + + /** + * Toggles between initial world-creation display, and "more options" display. + * Called when user clicks "More World Options..." or "Done" (same button, different labels depending on current + * display). + */ + private void toggleMoreWorldOptions() + { + this.showMoreWorldOptions(!this.inMoreWorldOptionsDisplay); + } + + /** + * Shows additional world-creation options if toggle is true, otherwise shows main world-creation elements + */ + private void showMoreWorldOptions(boolean toggle) + { + this.inMoreWorldOptionsDisplay = toggle; + + if (WorldType.WORLD_TYPES[this.selectedIndex] == WorldType.DEBUG_ALL_BLOCK_STATES) + { + this.btnGameMode.visible = !this.inMoreWorldOptionsDisplay; + this.btnGameMode.enabled = false; + + if (this.savedGameMode == null) + { + this.savedGameMode = this.gameMode; + } + + this.gameMode = "spectator"; + this.btnMapFeatures.visible = false; + this.btnBonusItems.visible = false; + this.btnMapType.visible = this.inMoreWorldOptionsDisplay; + this.btnAllowCommands.visible = false; + this.btnCustomizeType.visible = false; + } + else + { + this.btnGameMode.visible = !this.inMoreWorldOptionsDisplay; + this.btnGameMode.enabled = true; + + if (this.savedGameMode != null) + { + this.gameMode = this.savedGameMode; + this.savedGameMode = null; + } + + this.btnMapFeatures.visible = this.inMoreWorldOptionsDisplay && WorldType.WORLD_TYPES[this.selectedIndex] != WorldType.CUSTOMIZED; + this.btnBonusItems.visible = this.inMoreWorldOptionsDisplay; + this.btnMapType.visible = this.inMoreWorldOptionsDisplay; + this.btnAllowCommands.visible = this.inMoreWorldOptionsDisplay; + this.btnCustomizeType.visible = this.inMoreWorldOptionsDisplay && WorldType.WORLD_TYPES[this.selectedIndex].isCustomizable(); + } + + this.updateDisplayState(); + + if (this.inMoreWorldOptionsDisplay) + { + this.btnMoreOptions.displayString = I18n.format("gui.done"); + } + else + { + this.btnMoreOptions.displayString = I18n.format("selectWorld.moreWorldOptions"); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.worldNameField.isFocused() && !this.inMoreWorldOptionsDisplay) + { + this.worldNameField.textboxKeyTyped(typedChar, keyCode); + this.worldName = this.worldNameField.getText(); + } + else if (this.worldSeedField.isFocused() && this.inMoreWorldOptionsDisplay) + { + this.worldSeedField.textboxKeyTyped(typedChar, keyCode); + this.worldSeed = this.worldSeedField.getText(); + } + + if (keyCode == 28 || keyCode == 156) + { + this.actionPerformed(this.buttonList.get(0)); + } + + (this.buttonList.get(0)).enabled = !this.worldNameField.getText().isEmpty(); + this.calcSaveDirName(); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + + if (this.inMoreWorldOptionsDisplay) + { + this.worldSeedField.mouseClicked(mouseX, mouseY, mouseButton); + } + else + { + this.worldNameField.mouseClicked(mouseX, mouseY, mouseButton); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("selectWorld.create"), this.width / 2, 20, -1); + + if (this.inMoreWorldOptionsDisplay) + { + this.drawString(this.fontRenderer, I18n.format("selectWorld.enterSeed"), this.width / 2 - 100, 47, -6250336); + this.drawString(this.fontRenderer, I18n.format("selectWorld.seedInfo"), this.width / 2 - 100, 85, -6250336); + + if (this.btnMapFeatures.visible) + { + this.drawString(this.fontRenderer, I18n.format("selectWorld.mapFeatures.info"), this.width / 2 - 150, 122, -6250336); + } + + if (this.btnAllowCommands.visible) + { + this.drawString(this.fontRenderer, I18n.format("selectWorld.allowCommands.info"), this.width / 2 - 150, 172, -6250336); + } + + this.worldSeedField.drawTextBox(); + + if (WorldType.WORLD_TYPES[this.selectedIndex].hasInfoNotice()) + { + this.fontRenderer.drawSplitString(I18n.format(WorldType.WORLD_TYPES[this.selectedIndex].getInfoTranslationKey()), this.btnMapType.x + 2, this.btnMapType.y + 22, this.btnMapType.getButtonWidth(), 10526880); + } + } + else + { + this.drawString(this.fontRenderer, I18n.format("selectWorld.enterName"), this.width / 2 - 100, 47, -6250336); + this.drawString(this.fontRenderer, I18n.format("selectWorld.resultFolder") + " " + this.saveDirName, this.width / 2 - 100, 85, -6250336); + this.worldNameField.drawTextBox(); + this.drawString(this.fontRenderer, this.gameModeDesc1, this.width / 2 - 100, 137, -6250336); + this.drawString(this.fontRenderer, this.gameModeDesc2, this.width / 2 - 100, 149, -6250336); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Set the initial values of a new world to create, from the values from an existing world. + * + * Called after construction when a user selects the "Recreate" button. + */ + public void recreateFromExistingWorld(WorldInfo original) + { + this.worldName = I18n.format("selectWorld.newWorld.copyOf", original.getWorldName()); + this.worldSeed = original.getSeed() + ""; + this.selectedIndex = original.getTerrainType().getId(); + this.chunkProviderSettingsJson = original.getGeneratorOptions(); + this.generateStructuresEnabled = original.isMapFeaturesEnabled(); + this.allowCheats = original.areCommandsAllowed(); + + if (original.isHardcoreModeEnabled()) + { + this.gameMode = "hardcore"; + } + else if (original.getGameType().isSurvivalOrAdventure()) + { + this.gameMode = "survival"; + } + else if (original.getGameType().isCreative()) + { + this.gameMode = "creative"; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCustomizeSkin.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCustomizeSkin.java new file mode 100644 index 0000000..7fb76b0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCustomizeSkin.java @@ -0,0 +1,127 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiCustomizeSkin extends GuiScreen +{ + /** The parent GUI for this GUI */ + private final GuiScreen parentScreen; + /** The title of the GUI. */ + private String title; + + public GuiCustomizeSkin(GuiScreen parentScreenIn) + { + this.parentScreen = parentScreenIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + int i = 0; + this.title = I18n.format("options.skinCustomisation.title"); + + for (EnumPlayerModelParts enumplayermodelparts : EnumPlayerModelParts.values()) + { + this.buttonList.add(new GuiCustomizeSkin.ButtonPart(enumplayermodelparts.getPartId(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 + 24 * (i >> 1), 150, 20, enumplayermodelparts)); + ++i; + } + + this.buttonList.add(new GuiOptionButton(199, this.width / 2 - 155 + i % 2 * 160, this.height / 6 + 24 * (i >> 1), GameSettings.Options.MAIN_HAND, this.mc.gameSettings.getKeyBinding(GameSettings.Options.MAIN_HAND))); + ++i; + + if (i % 2 == 1) + { + ++i; + } + + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 24 * (i >> 1), I18n.format("gui.done"))); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.mc.gameSettings.saveOptions(); + } + + super.keyTyped(typedChar, keyCode); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 200) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentScreen); + } + else if (button.id == 199) + { + this.mc.gameSettings.setOptionValue(GameSettings.Options.MAIN_HAND, 1); + button.displayString = this.mc.gameSettings.getKeyBinding(GameSettings.Options.MAIN_HAND); + this.mc.gameSettings.sendSettingsToServer(); + } + else if (button instanceof GuiCustomizeSkin.ButtonPart) + { + EnumPlayerModelParts enumplayermodelparts = ((GuiCustomizeSkin.ButtonPart)button).playerModelParts; + this.mc.gameSettings.switchModelPartEnabled(enumplayermodelparts); + button.displayString = this.getMessage(enumplayermodelparts); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 20, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + private String getMessage(EnumPlayerModelParts playerModelParts) + { + String s; + + if (this.mc.gameSettings.getModelParts().contains(playerModelParts)) + { + s = I18n.format("options.on"); + } + else + { + s = I18n.format("options.off"); + } + + return playerModelParts.getName().getFormattedText() + ": " + s; + } + + @SideOnly(Side.CLIENT) + class ButtonPart extends GuiButton + { + private final EnumPlayerModelParts playerModelParts; + + private ButtonPart(int p_i45514_2_, int p_i45514_3_, int p_i45514_4_, int p_i45514_5_, int p_i45514_6_, EnumPlayerModelParts playerModelParts) + { + super(p_i45514_2_, p_i45514_3_, p_i45514_4_, p_i45514_5_, p_i45514_6_, GuiCustomizeSkin.this.getMessage(playerModelParts)); + this.playerModelParts = playerModelParts; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCustomizeWorldScreen.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCustomizeWorldScreen.java new file mode 100644 index 0000000..03b7e18 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiCustomizeWorldScreen.java @@ -0,0 +1,926 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Predicate; +import com.google.common.primitives.Floats; +import java.io.IOException; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.init.Biomes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.ChunkGeneratorSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiCustomizeWorldScreen extends GuiScreen implements GuiSlider.FormatHelper, GuiPageButtonList.GuiResponder +{ + private final GuiCreateWorld parent; + protected String title = "Customize World Settings"; + protected String subtitle = "Page 1 of 3"; + protected String pageTitle = "Basic Settings"; + protected String[] pageNames = new String[4]; + private GuiPageButtonList list; + private GuiButton done; + private GuiButton randomize; + private GuiButton defaults; + private GuiButton previousPage; + private GuiButton nextPage; + private GuiButton confirm; + private GuiButton cancel; + private GuiButton presets; + private boolean settingsModified; + private int confirmMode; + private boolean confirmDismissed; + private final Predicate numberFilter = new Predicate() + { + public boolean apply(@Nullable String p_apply_1_) + { + Float f = Floats.tryParse(p_apply_1_); + return p_apply_1_.isEmpty() || f != null && Floats.isFinite(f.floatValue()) && f.floatValue() >= 0.0F; + } + }; + private final ChunkGeneratorSettings.Factory defaultSettings = new ChunkGeneratorSettings.Factory(); + private ChunkGeneratorSettings.Factory settings; + /** A Random instance for this world customization */ + private final Random random = new Random(); + + public GuiCustomizeWorldScreen(GuiScreen parentIn, String p_i45521_2_) + { + this.parent = (GuiCreateWorld)parentIn; + this.loadValues(p_i45521_2_); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + int i = 0; + int j = 0; + + if (this.list != null) + { + i = this.list.getPage(); + j = this.list.getAmountScrolled(); + } + + this.title = I18n.format("options.customizeTitle"); + this.buttonList.clear(); + this.previousPage = this.addButton(new GuiButton(302, 20, 5, 80, 20, I18n.format("createWorld.customize.custom.prev"))); + this.nextPage = this.addButton(new GuiButton(303, this.width - 100, 5, 80, 20, I18n.format("createWorld.customize.custom.next"))); + this.defaults = this.addButton(new GuiButton(304, this.width / 2 - 187, this.height - 27, 90, 20, I18n.format("createWorld.customize.custom.defaults"))); + this.randomize = this.addButton(new GuiButton(301, this.width / 2 - 92, this.height - 27, 90, 20, I18n.format("createWorld.customize.custom.randomize"))); + this.presets = this.addButton(new GuiButton(305, this.width / 2 + 3, this.height - 27, 90, 20, I18n.format("createWorld.customize.custom.presets"))); + this.done = this.addButton(new GuiButton(300, this.width / 2 + 98, this.height - 27, 90, 20, I18n.format("gui.done"))); + this.defaults.enabled = this.settingsModified; + this.confirm = new GuiButton(306, this.width / 2 - 55, 160, 50, 20, I18n.format("gui.yes")); + this.confirm.visible = false; + this.buttonList.add(this.confirm); + this.cancel = new GuiButton(307, this.width / 2 + 5, 160, 50, 20, I18n.format("gui.no")); + this.cancel.visible = false; + this.buttonList.add(this.cancel); + + if (this.confirmMode != 0) + { + this.confirm.visible = true; + this.cancel.visible = true; + } + + this.createPagedList(); + + if (i != 0) + { + this.list.setPage(i); + this.list.scrollBy(j); + this.updatePageControls(); + } + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.list.handleMouseInput(); + } + + private void createPagedList() + { + GuiPageButtonList.GuiListEntry[] aguipagebuttonlist$guilistentry = new GuiPageButtonList.GuiListEntry[] {new GuiPageButtonList.GuiSlideEntry(160, I18n.format("createWorld.customize.custom.seaLevel"), true, this, 1.0F, 255.0F, (float)this.settings.seaLevel), new GuiPageButtonList.GuiButtonEntry(148, I18n.format("createWorld.customize.custom.useCaves"), true, this.settings.useCaves), new GuiPageButtonList.GuiButtonEntry(150, I18n.format("createWorld.customize.custom.useStrongholds"), true, this.settings.useStrongholds), new GuiPageButtonList.GuiButtonEntry(151, I18n.format("createWorld.customize.custom.useVillages"), true, this.settings.useVillages), new GuiPageButtonList.GuiButtonEntry(152, I18n.format("createWorld.customize.custom.useMineShafts"), true, this.settings.useMineShafts), new GuiPageButtonList.GuiButtonEntry(153, I18n.format("createWorld.customize.custom.useTemples"), true, this.settings.useTemples), new GuiPageButtonList.GuiButtonEntry(210, I18n.format("createWorld.customize.custom.useMonuments"), true, this.settings.useMonuments), new GuiPageButtonList.GuiButtonEntry(211, I18n.format("createWorld.customize.custom.useMansions"), true, this.settings.useMansions), new GuiPageButtonList.GuiButtonEntry(154, I18n.format("createWorld.customize.custom.useRavines"), true, this.settings.useRavines), new GuiPageButtonList.GuiButtonEntry(149, I18n.format("createWorld.customize.custom.useDungeons"), true, this.settings.useDungeons), new GuiPageButtonList.GuiSlideEntry(157, I18n.format("createWorld.customize.custom.dungeonChance"), true, this, 1.0F, 100.0F, (float)this.settings.dungeonChance), new GuiPageButtonList.GuiButtonEntry(155, I18n.format("createWorld.customize.custom.useWaterLakes"), true, this.settings.useWaterLakes), new GuiPageButtonList.GuiSlideEntry(158, I18n.format("createWorld.customize.custom.waterLakeChance"), true, this, 1.0F, 100.0F, (float)this.settings.waterLakeChance), new GuiPageButtonList.GuiButtonEntry(156, I18n.format("createWorld.customize.custom.useLavaLakes"), true, this.settings.useLavaLakes), new GuiPageButtonList.GuiSlideEntry(159, I18n.format("createWorld.customize.custom.lavaLakeChance"), true, this, 10.0F, 100.0F, (float)this.settings.lavaLakeChance), new GuiPageButtonList.GuiButtonEntry(161, I18n.format("createWorld.customize.custom.useLavaOceans"), true, this.settings.useLavaOceans), new GuiPageButtonList.GuiSlideEntry(162, I18n.format("createWorld.customize.custom.fixedBiome"), true, this, -1.0F, 37.0F, (float)this.settings.fixedBiome), new GuiPageButtonList.GuiSlideEntry(163, I18n.format("createWorld.customize.custom.biomeSize"), true, this, 1.0F, 8.0F, (float)this.settings.biomeSize), new GuiPageButtonList.GuiSlideEntry(164, I18n.format("createWorld.customize.custom.riverSize"), true, this, 1.0F, 5.0F, (float)this.settings.riverSize)}; + GuiPageButtonList.GuiListEntry[] aguipagebuttonlist$guilistentry1 = new GuiPageButtonList.GuiListEntry[] {new GuiPageButtonList.GuiLabelEntry(416, I18n.format("tile.dirt.name"), false), null, new GuiPageButtonList.GuiSlideEntry(165, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.dirtSize), new GuiPageButtonList.GuiSlideEntry(166, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.dirtCount), new GuiPageButtonList.GuiSlideEntry(167, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.dirtMinHeight), new GuiPageButtonList.GuiSlideEntry(168, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.dirtMaxHeight), new GuiPageButtonList.GuiLabelEntry(417, I18n.format("tile.gravel.name"), false), null, new GuiPageButtonList.GuiSlideEntry(169, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.gravelSize), new GuiPageButtonList.GuiSlideEntry(170, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.gravelCount), new GuiPageButtonList.GuiSlideEntry(171, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.gravelMinHeight), new GuiPageButtonList.GuiSlideEntry(172, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.gravelMaxHeight), new GuiPageButtonList.GuiLabelEntry(418, I18n.format("tile.stone.granite.name"), false), null, new GuiPageButtonList.GuiSlideEntry(173, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.graniteSize), new GuiPageButtonList.GuiSlideEntry(174, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.graniteCount), new GuiPageButtonList.GuiSlideEntry(175, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.graniteMinHeight), new GuiPageButtonList.GuiSlideEntry(176, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.graniteMaxHeight), new GuiPageButtonList.GuiLabelEntry(419, I18n.format("tile.stone.diorite.name"), false), null, new GuiPageButtonList.GuiSlideEntry(177, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.dioriteSize), new GuiPageButtonList.GuiSlideEntry(178, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.dioriteCount), new GuiPageButtonList.GuiSlideEntry(179, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.dioriteMinHeight), new GuiPageButtonList.GuiSlideEntry(180, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.dioriteMaxHeight), new GuiPageButtonList.GuiLabelEntry(420, I18n.format("tile.stone.andesite.name"), false), null, new GuiPageButtonList.GuiSlideEntry(181, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.andesiteSize), new GuiPageButtonList.GuiSlideEntry(182, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.andesiteCount), new GuiPageButtonList.GuiSlideEntry(183, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.andesiteMinHeight), new GuiPageButtonList.GuiSlideEntry(184, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.andesiteMaxHeight), new GuiPageButtonList.GuiLabelEntry(421, I18n.format("tile.oreCoal.name"), false), null, new GuiPageButtonList.GuiSlideEntry(185, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.coalSize), new GuiPageButtonList.GuiSlideEntry(186, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.coalCount), new GuiPageButtonList.GuiSlideEntry(187, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.coalMinHeight), new GuiPageButtonList.GuiSlideEntry(189, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.coalMaxHeight), new GuiPageButtonList.GuiLabelEntry(422, I18n.format("tile.oreIron.name"), false), null, new GuiPageButtonList.GuiSlideEntry(190, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.ironSize), new GuiPageButtonList.GuiSlideEntry(191, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.ironCount), new GuiPageButtonList.GuiSlideEntry(192, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.ironMinHeight), new GuiPageButtonList.GuiSlideEntry(193, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.ironMaxHeight), new GuiPageButtonList.GuiLabelEntry(423, I18n.format("tile.oreGold.name"), false), null, new GuiPageButtonList.GuiSlideEntry(194, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.goldSize), new GuiPageButtonList.GuiSlideEntry(195, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.goldCount), new GuiPageButtonList.GuiSlideEntry(196, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.goldMinHeight), new GuiPageButtonList.GuiSlideEntry(197, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.goldMaxHeight), new GuiPageButtonList.GuiLabelEntry(424, I18n.format("tile.oreRedstone.name"), false), null, new GuiPageButtonList.GuiSlideEntry(198, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.redstoneSize), new GuiPageButtonList.GuiSlideEntry(199, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.redstoneCount), new GuiPageButtonList.GuiSlideEntry(200, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.redstoneMinHeight), new GuiPageButtonList.GuiSlideEntry(201, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.redstoneMaxHeight), new GuiPageButtonList.GuiLabelEntry(425, I18n.format("tile.oreDiamond.name"), false), null, new GuiPageButtonList.GuiSlideEntry(202, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.diamondSize), new GuiPageButtonList.GuiSlideEntry(203, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.diamondCount), new GuiPageButtonList.GuiSlideEntry(204, I18n.format("createWorld.customize.custom.minHeight"), false, this, 0.0F, 255.0F, (float)this.settings.diamondMinHeight), new GuiPageButtonList.GuiSlideEntry(205, I18n.format("createWorld.customize.custom.maxHeight"), false, this, 0.0F, 255.0F, (float)this.settings.diamondMaxHeight), new GuiPageButtonList.GuiLabelEntry(426, I18n.format("tile.oreLapis.name"), false), null, new GuiPageButtonList.GuiSlideEntry(206, I18n.format("createWorld.customize.custom.size"), false, this, 1.0F, 50.0F, (float)this.settings.lapisSize), new GuiPageButtonList.GuiSlideEntry(207, I18n.format("createWorld.customize.custom.count"), false, this, 0.0F, 40.0F, (float)this.settings.lapisCount), new GuiPageButtonList.GuiSlideEntry(208, I18n.format("createWorld.customize.custom.center"), false, this, 0.0F, 255.0F, (float)this.settings.lapisCenterHeight), new GuiPageButtonList.GuiSlideEntry(209, I18n.format("createWorld.customize.custom.spread"), false, this, 0.0F, 255.0F, (float)this.settings.lapisSpread)}; + GuiPageButtonList.GuiListEntry[] aguipagebuttonlist$guilistentry2 = new GuiPageButtonList.GuiListEntry[] {new GuiPageButtonList.GuiSlideEntry(100, I18n.format("createWorld.customize.custom.mainNoiseScaleX"), false, this, 1.0F, 5000.0F, this.settings.mainNoiseScaleX), new GuiPageButtonList.GuiSlideEntry(101, I18n.format("createWorld.customize.custom.mainNoiseScaleY"), false, this, 1.0F, 5000.0F, this.settings.mainNoiseScaleY), new GuiPageButtonList.GuiSlideEntry(102, I18n.format("createWorld.customize.custom.mainNoiseScaleZ"), false, this, 1.0F, 5000.0F, this.settings.mainNoiseScaleZ), new GuiPageButtonList.GuiSlideEntry(103, I18n.format("createWorld.customize.custom.depthNoiseScaleX"), false, this, 1.0F, 2000.0F, this.settings.depthNoiseScaleX), new GuiPageButtonList.GuiSlideEntry(104, I18n.format("createWorld.customize.custom.depthNoiseScaleZ"), false, this, 1.0F, 2000.0F, this.settings.depthNoiseScaleZ), new GuiPageButtonList.GuiSlideEntry(105, I18n.format("createWorld.customize.custom.depthNoiseScaleExponent"), false, this, 0.01F, 20.0F, this.settings.depthNoiseScaleExponent), new GuiPageButtonList.GuiSlideEntry(106, I18n.format("createWorld.customize.custom.baseSize"), false, this, 1.0F, 25.0F, this.settings.baseSize), new GuiPageButtonList.GuiSlideEntry(107, I18n.format("createWorld.customize.custom.coordinateScale"), false, this, 1.0F, 6000.0F, this.settings.coordinateScale), new GuiPageButtonList.GuiSlideEntry(108, I18n.format("createWorld.customize.custom.heightScale"), false, this, 1.0F, 6000.0F, this.settings.heightScale), new GuiPageButtonList.GuiSlideEntry(109, I18n.format("createWorld.customize.custom.stretchY"), false, this, 0.01F, 50.0F, this.settings.stretchY), new GuiPageButtonList.GuiSlideEntry(110, I18n.format("createWorld.customize.custom.upperLimitScale"), false, this, 1.0F, 5000.0F, this.settings.upperLimitScale), new GuiPageButtonList.GuiSlideEntry(111, I18n.format("createWorld.customize.custom.lowerLimitScale"), false, this, 1.0F, 5000.0F, this.settings.lowerLimitScale), new GuiPageButtonList.GuiSlideEntry(112, I18n.format("createWorld.customize.custom.biomeDepthWeight"), false, this, 1.0F, 20.0F, this.settings.biomeDepthWeight), new GuiPageButtonList.GuiSlideEntry(113, I18n.format("createWorld.customize.custom.biomeDepthOffset"), false, this, 0.0F, 20.0F, this.settings.biomeDepthOffset), new GuiPageButtonList.GuiSlideEntry(114, I18n.format("createWorld.customize.custom.biomeScaleWeight"), false, this, 1.0F, 20.0F, this.settings.biomeScaleWeight), new GuiPageButtonList.GuiSlideEntry(115, I18n.format("createWorld.customize.custom.biomeScaleOffset"), false, this, 0.0F, 20.0F, this.settings.biomeScaleOffset)}; + GuiPageButtonList.GuiListEntry[] aguipagebuttonlist$guilistentry3 = new GuiPageButtonList.GuiListEntry[] {new GuiPageButtonList.GuiLabelEntry(400, I18n.format("createWorld.customize.custom.mainNoiseScaleX") + ":", false), new GuiPageButtonList.EditBoxEntry(132, String.format("%5.3f", this.settings.mainNoiseScaleX), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(401, I18n.format("createWorld.customize.custom.mainNoiseScaleY") + ":", false), new GuiPageButtonList.EditBoxEntry(133, String.format("%5.3f", this.settings.mainNoiseScaleY), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(402, I18n.format("createWorld.customize.custom.mainNoiseScaleZ") + ":", false), new GuiPageButtonList.EditBoxEntry(134, String.format("%5.3f", this.settings.mainNoiseScaleZ), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(403, I18n.format("createWorld.customize.custom.depthNoiseScaleX") + ":", false), new GuiPageButtonList.EditBoxEntry(135, String.format("%5.3f", this.settings.depthNoiseScaleX), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(404, I18n.format("createWorld.customize.custom.depthNoiseScaleZ") + ":", false), new GuiPageButtonList.EditBoxEntry(136, String.format("%5.3f", this.settings.depthNoiseScaleZ), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(405, I18n.format("createWorld.customize.custom.depthNoiseScaleExponent") + ":", false), new GuiPageButtonList.EditBoxEntry(137, String.format("%2.3f", this.settings.depthNoiseScaleExponent), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(406, I18n.format("createWorld.customize.custom.baseSize") + ":", false), new GuiPageButtonList.EditBoxEntry(138, String.format("%2.3f", this.settings.baseSize), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(407, I18n.format("createWorld.customize.custom.coordinateScale") + ":", false), new GuiPageButtonList.EditBoxEntry(139, String.format("%5.3f", this.settings.coordinateScale), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(408, I18n.format("createWorld.customize.custom.heightScale") + ":", false), new GuiPageButtonList.EditBoxEntry(140, String.format("%5.3f", this.settings.heightScale), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(409, I18n.format("createWorld.customize.custom.stretchY") + ":", false), new GuiPageButtonList.EditBoxEntry(141, String.format("%2.3f", this.settings.stretchY), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(410, I18n.format("createWorld.customize.custom.upperLimitScale") + ":", false), new GuiPageButtonList.EditBoxEntry(142, String.format("%5.3f", this.settings.upperLimitScale), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(411, I18n.format("createWorld.customize.custom.lowerLimitScale") + ":", false), new GuiPageButtonList.EditBoxEntry(143, String.format("%5.3f", this.settings.lowerLimitScale), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(412, I18n.format("createWorld.customize.custom.biomeDepthWeight") + ":", false), new GuiPageButtonList.EditBoxEntry(144, String.format("%2.3f", this.settings.biomeDepthWeight), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(413, I18n.format("createWorld.customize.custom.biomeDepthOffset") + ":", false), new GuiPageButtonList.EditBoxEntry(145, String.format("%2.3f", this.settings.biomeDepthOffset), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(414, I18n.format("createWorld.customize.custom.biomeScaleWeight") + ":", false), new GuiPageButtonList.EditBoxEntry(146, String.format("%2.3f", this.settings.biomeScaleWeight), false, this.numberFilter), new GuiPageButtonList.GuiLabelEntry(415, I18n.format("createWorld.customize.custom.biomeScaleOffset") + ":", false), new GuiPageButtonList.EditBoxEntry(147, String.format("%2.3f", this.settings.biomeScaleOffset), false, this.numberFilter)}; + this.list = new GuiPageButtonList(this.mc, this.width, this.height, 32, this.height - 32, 25, this, new GuiPageButtonList.GuiListEntry[][] {aguipagebuttonlist$guilistentry, aguipagebuttonlist$guilistentry1, aguipagebuttonlist$guilistentry2, aguipagebuttonlist$guilistentry3}); + + for (int i = 0; i < 4; ++i) + { + this.pageNames[i] = I18n.format("createWorld.customize.custom.page" + i); + } + + this.updatePageControls(); + } + + public String saveValues() + { + return this.settings.toString().replace("\n", ""); + } + + public void loadValues(String p_175324_1_) + { + if (p_175324_1_ != null && !p_175324_1_.isEmpty()) + { + this.settings = ChunkGeneratorSettings.Factory.jsonToFactory(p_175324_1_); + } + else + { + this.settings = new ChunkGeneratorSettings.Factory(); + } + } + + public void setEntryValue(int id, String value) + { + float f = 0.0F; + + try + { + f = Float.parseFloat(value); + } + catch (NumberFormatException var5) + { + ; + } + + float f1 = 0.0F; + + switch (id) + { + case 132: + this.settings.mainNoiseScaleX = MathHelper.clamp(f, 1.0F, 5000.0F); + f1 = this.settings.mainNoiseScaleX; + break; + case 133: + this.settings.mainNoiseScaleY = MathHelper.clamp(f, 1.0F, 5000.0F); + f1 = this.settings.mainNoiseScaleY; + break; + case 134: + this.settings.mainNoiseScaleZ = MathHelper.clamp(f, 1.0F, 5000.0F); + f1 = this.settings.mainNoiseScaleZ; + break; + case 135: + this.settings.depthNoiseScaleX = MathHelper.clamp(f, 1.0F, 2000.0F); + f1 = this.settings.depthNoiseScaleX; + break; + case 136: + this.settings.depthNoiseScaleZ = MathHelper.clamp(f, 1.0F, 2000.0F); + f1 = this.settings.depthNoiseScaleZ; + break; + case 137: + this.settings.depthNoiseScaleExponent = MathHelper.clamp(f, 0.01F, 20.0F); + f1 = this.settings.depthNoiseScaleExponent; + break; + case 138: + this.settings.baseSize = MathHelper.clamp(f, 1.0F, 25.0F); + f1 = this.settings.baseSize; + break; + case 139: + this.settings.coordinateScale = MathHelper.clamp(f, 1.0F, 6000.0F); + f1 = this.settings.coordinateScale; + break; + case 140: + this.settings.heightScale = MathHelper.clamp(f, 1.0F, 6000.0F); + f1 = this.settings.heightScale; + break; + case 141: + this.settings.stretchY = MathHelper.clamp(f, 0.01F, 50.0F); + f1 = this.settings.stretchY; + break; + case 142: + this.settings.upperLimitScale = MathHelper.clamp(f, 1.0F, 5000.0F); + f1 = this.settings.upperLimitScale; + break; + case 143: + this.settings.lowerLimitScale = MathHelper.clamp(f, 1.0F, 5000.0F); + f1 = this.settings.lowerLimitScale; + break; + case 144: + this.settings.biomeDepthWeight = MathHelper.clamp(f, 1.0F, 20.0F); + f1 = this.settings.biomeDepthWeight; + break; + case 145: + this.settings.biomeDepthOffset = MathHelper.clamp(f, 0.0F, 20.0F); + f1 = this.settings.biomeDepthOffset; + break; + case 146: + this.settings.biomeScaleWeight = MathHelper.clamp(f, 1.0F, 20.0F); + f1 = this.settings.biomeScaleWeight; + break; + case 147: + this.settings.biomeScaleOffset = MathHelper.clamp(f, 0.0F, 20.0F); + f1 = this.settings.biomeScaleOffset; + } + + if (f1 != f && f != 0.0F) + { + ((GuiTextField)this.list.getComponent(id)).setText(this.getFormattedValue(id, f1)); + } + + ((GuiSlider)this.list.getComponent(id - 132 + 100)).setSliderValue(f1, false); + + if (!this.settings.equals(this.defaultSettings)) + { + this.setSettingsModified(true); + } + } + + private void setSettingsModified(boolean modified) + { + this.settingsModified = modified; + this.defaults.enabled = modified; + } + + public String getText(int id, String name, float value) + { + return name + ": " + this.getFormattedValue(id, value); + } + + private String getFormattedValue(int p_175330_1_, float p_175330_2_) + { + switch (p_175330_1_) + { + case 100: + case 101: + case 102: + case 103: + case 104: + case 107: + case 108: + case 110: + case 111: + case 132: + case 133: + case 134: + case 135: + case 136: + case 139: + case 140: + case 142: + case 143: + return String.format("%5.3f", p_175330_2_); + case 105: + case 106: + case 109: + case 112: + case 113: + case 114: + case 115: + case 137: + case 138: + case 141: + case 144: + case 145: + case 146: + case 147: + return String.format("%2.3f", p_175330_2_); + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 157: + case 158: + case 159: + case 160: + case 161: + default: + return String.format("%d", (int)p_175330_2_); + case 162: + + if (p_175330_2_ < 0.0F) + { + return I18n.format("gui.all"); + } + else if ((int)p_175330_2_ >= Biome.getIdForBiome(Biomes.HELL)) + { + Biome biome1 = Biome.getBiomeForId((int)p_175330_2_ + 2); + return biome1 != null ? biome1.getBiomeName() : "?"; + } + else + { + Biome biome = Biome.getBiomeForId((int)p_175330_2_); + return biome != null ? biome.getBiomeName() : "?"; + } + } + } + + public void setEntryValue(int id, boolean value) + { + switch (id) + { + case 148: + this.settings.useCaves = value; + break; + case 149: + this.settings.useDungeons = value; + break; + case 150: + this.settings.useStrongholds = value; + break; + case 151: + this.settings.useVillages = value; + break; + case 152: + this.settings.useMineShafts = value; + break; + case 153: + this.settings.useTemples = value; + break; + case 154: + this.settings.useRavines = value; + break; + case 155: + this.settings.useWaterLakes = value; + break; + case 156: + this.settings.useLavaLakes = value; + break; + case 161: + this.settings.useLavaOceans = value; + break; + case 210: + this.settings.useMonuments = value; + break; + case 211: + this.settings.useMansions = value; + } + + if (!this.settings.equals(this.defaultSettings)) + { + this.setSettingsModified(true); + } + } + + public void setEntryValue(int id, float value) + { + switch (id) + { + case 100: + this.settings.mainNoiseScaleX = value; + break; + case 101: + this.settings.mainNoiseScaleY = value; + break; + case 102: + this.settings.mainNoiseScaleZ = value; + break; + case 103: + this.settings.depthNoiseScaleX = value; + break; + case 104: + this.settings.depthNoiseScaleZ = value; + break; + case 105: + this.settings.depthNoiseScaleExponent = value; + break; + case 106: + this.settings.baseSize = value; + break; + case 107: + this.settings.coordinateScale = value; + break; + case 108: + this.settings.heightScale = value; + break; + case 109: + this.settings.stretchY = value; + break; + case 110: + this.settings.upperLimitScale = value; + break; + case 111: + this.settings.lowerLimitScale = value; + break; + case 112: + this.settings.biomeDepthWeight = value; + break; + case 113: + this.settings.biomeDepthOffset = value; + break; + case 114: + this.settings.biomeScaleWeight = value; + break; + case 115: + this.settings.biomeScaleOffset = value; + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 138: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 146: + case 147: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 161: + case 188: + default: + break; + case 157: + this.settings.dungeonChance = (int)value; + break; + case 158: + this.settings.waterLakeChance = (int)value; + break; + case 159: + this.settings.lavaLakeChance = (int)value; + break; + case 160: + this.settings.seaLevel = (int)value; + break; + case 162: + this.settings.fixedBiome = (int)value; + break; + case 163: + this.settings.biomeSize = (int)value; + break; + case 164: + this.settings.riverSize = (int)value; + break; + case 165: + this.settings.dirtSize = (int)value; + break; + case 166: + this.settings.dirtCount = (int)value; + break; + case 167: + this.settings.dirtMinHeight = (int)value; + break; + case 168: + this.settings.dirtMaxHeight = (int)value; + break; + case 169: + this.settings.gravelSize = (int)value; + break; + case 170: + this.settings.gravelCount = (int)value; + break; + case 171: + this.settings.gravelMinHeight = (int)value; + break; + case 172: + this.settings.gravelMaxHeight = (int)value; + break; + case 173: + this.settings.graniteSize = (int)value; + break; + case 174: + this.settings.graniteCount = (int)value; + break; + case 175: + this.settings.graniteMinHeight = (int)value; + break; + case 176: + this.settings.graniteMaxHeight = (int)value; + break; + case 177: + this.settings.dioriteSize = (int)value; + break; + case 178: + this.settings.dioriteCount = (int)value; + break; + case 179: + this.settings.dioriteMinHeight = (int)value; + break; + case 180: + this.settings.dioriteMaxHeight = (int)value; + break; + case 181: + this.settings.andesiteSize = (int)value; + break; + case 182: + this.settings.andesiteCount = (int)value; + break; + case 183: + this.settings.andesiteMinHeight = (int)value; + break; + case 184: + this.settings.andesiteMaxHeight = (int)value; + break; + case 185: + this.settings.coalSize = (int)value; + break; + case 186: + this.settings.coalCount = (int)value; + break; + case 187: + this.settings.coalMinHeight = (int)value; + break; + case 189: + this.settings.coalMaxHeight = (int)value; + break; + case 190: + this.settings.ironSize = (int)value; + break; + case 191: + this.settings.ironCount = (int)value; + break; + case 192: + this.settings.ironMinHeight = (int)value; + break; + case 193: + this.settings.ironMaxHeight = (int)value; + break; + case 194: + this.settings.goldSize = (int)value; + break; + case 195: + this.settings.goldCount = (int)value; + break; + case 196: + this.settings.goldMinHeight = (int)value; + break; + case 197: + this.settings.goldMaxHeight = (int)value; + break; + case 198: + this.settings.redstoneSize = (int)value; + break; + case 199: + this.settings.redstoneCount = (int)value; + break; + case 200: + this.settings.redstoneMinHeight = (int)value; + break; + case 201: + this.settings.redstoneMaxHeight = (int)value; + break; + case 202: + this.settings.diamondSize = (int)value; + break; + case 203: + this.settings.diamondCount = (int)value; + break; + case 204: + this.settings.diamondMinHeight = (int)value; + break; + case 205: + this.settings.diamondMaxHeight = (int)value; + break; + case 206: + this.settings.lapisSize = (int)value; + break; + case 207: + this.settings.lapisCount = (int)value; + break; + case 208: + this.settings.lapisCenterHeight = (int)value; + break; + case 209: + this.settings.lapisSpread = (int)value; + } + + if (id >= 100 && id < 116) + { + Gui gui = this.list.getComponent(id - 100 + 132); + + if (gui != null) + { + ((GuiTextField)gui).setText(this.getFormattedValue(id, value)); + } + } + + if (!this.settings.equals(this.defaultSettings)) + { + this.setSettingsModified(true); + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + switch (button.id) + { + case 300: + this.parent.chunkProviderSettingsJson = this.settings.toString(); + this.mc.displayGuiScreen(this.parent); + break; + case 301: + + for (int i = 0; i < this.list.getSize(); ++i) + { + GuiPageButtonList.GuiEntry guipagebuttonlist$guientry = this.list.getListEntry(i); + Gui gui = guipagebuttonlist$guientry.getComponent1(); + + if (gui instanceof GuiButton) + { + GuiButton guibutton = (GuiButton)gui; + + if (guibutton instanceof GuiSlider) + { + float f = ((GuiSlider)guibutton).getSliderPosition() * (0.75F + this.random.nextFloat() * 0.5F) + (this.random.nextFloat() * 0.1F - 0.05F); + ((GuiSlider)guibutton).setSliderPosition(MathHelper.clamp(f, 0.0F, 1.0F)); + } + else if (guibutton instanceof GuiListButton) + { + ((GuiListButton)guibutton).setValue(this.random.nextBoolean()); + } + } + + Gui gui1 = guipagebuttonlist$guientry.getComponent2(); + + if (gui1 instanceof GuiButton) + { + GuiButton guibutton1 = (GuiButton)gui1; + + if (guibutton1 instanceof GuiSlider) + { + float f1 = ((GuiSlider)guibutton1).getSliderPosition() * (0.75F + this.random.nextFloat() * 0.5F) + (this.random.nextFloat() * 0.1F - 0.05F); + ((GuiSlider)guibutton1).setSliderPosition(MathHelper.clamp(f1, 0.0F, 1.0F)); + } + else if (guibutton1 instanceof GuiListButton) + { + ((GuiListButton)guibutton1).setValue(this.random.nextBoolean()); + } + } + } + + return; + case 302: + this.list.previousPage(); + this.updatePageControls(); + break; + case 303: + this.list.nextPage(); + this.updatePageControls(); + break; + case 304: + + if (this.settingsModified) + { + this.enterConfirmation(304); + } + + break; + case 305: + this.mc.displayGuiScreen(new GuiScreenCustomizePresets(this)); + break; + case 306: + this.exitConfirmation(); + break; + case 307: + this.confirmMode = 0; + this.exitConfirmation(); + } + } + } + + private void restoreDefaults() + { + this.settings.setDefaults(); + this.createPagedList(); + this.setSettingsModified(false); + } + + private void enterConfirmation(int confirmModeIn) + { + this.confirmMode = confirmModeIn; + this.setConfirmationControls(true); + } + + private void exitConfirmation() throws IOException + { + switch (this.confirmMode) + { + case 300: + this.actionPerformed((GuiListButton)this.list.getComponent(300)); + break; + case 304: + this.restoreDefaults(); + } + + this.confirmMode = 0; + this.confirmDismissed = true; + this.setConfirmationControls(false); + } + + private void setConfirmationControls(boolean visible) + { + this.confirm.visible = visible; + this.cancel.visible = visible; + this.randomize.enabled = !visible; + this.done.enabled = !visible; + this.previousPage.enabled = !visible; + this.nextPage.enabled = !visible; + this.defaults.enabled = this.settingsModified && !visible; + this.presets.enabled = !visible; + this.list.setActive(!visible); + } + + private void updatePageControls() + { + this.previousPage.enabled = this.list.getPage() != 0; + this.nextPage.enabled = this.list.getPage() != this.list.getPageCount() - 1; + this.subtitle = I18n.format("book.pageIndicator", this.list.getPage() + 1, this.list.getPageCount()); + this.pageTitle = this.pageNames[this.list.getPage()]; + this.randomize.enabled = this.list.getPage() != this.list.getPageCount() - 1; + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + super.keyTyped(typedChar, keyCode); + + if (this.confirmMode == 0) + { + switch (keyCode) + { + case 200: + this.modifyFocusValue(1.0F); + break; + case 208: + this.modifyFocusValue(-1.0F); + break; + default: + this.list.onKeyPressed(typedChar, keyCode); + } + } + } + + private void modifyFocusValue(float p_175327_1_) + { + Gui gui = this.list.getFocusedControl(); + + if (gui instanceof GuiTextField) + { + float f = p_175327_1_; + + if (GuiScreen.isShiftKeyDown()) + { + f = p_175327_1_ * 0.1F; + + if (GuiScreen.isCtrlKeyDown()) + { + f *= 0.1F; + } + } + else if (GuiScreen.isCtrlKeyDown()) + { + f = p_175327_1_ * 10.0F; + + if (GuiScreen.isAltKeyDown()) + { + f *= 10.0F; + } + } + + GuiTextField guitextfield = (GuiTextField)gui; + Float f1 = Floats.tryParse(guitextfield.getText()); + + if (f1 != null) + { + f1 = f1.floatValue() + f; + int i = guitextfield.getId(); + String s = this.getFormattedValue(guitextfield.getId(), f1.floatValue()); + guitextfield.setText(s); + this.setEntryValue(i, s); + } + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + + if (this.confirmMode == 0 && !this.confirmDismissed) + { + this.list.mouseClicked(mouseX, mouseY, mouseButton); + } + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + super.mouseReleased(mouseX, mouseY, state); + + if (this.confirmDismissed) + { + this.confirmDismissed = false; + } + else if (this.confirmMode == 0) + { + this.list.mouseReleased(mouseX, mouseY, state); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.list.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 2, 16777215); + this.drawCenteredString(this.fontRenderer, this.subtitle, this.width / 2, 12, 16777215); + this.drawCenteredString(this.fontRenderer, this.pageTitle, this.width / 2, 22, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.confirmMode != 0) + { + drawRect(0, 0, this.width, this.height, Integer.MIN_VALUE); + this.drawHorizontalLine(this.width / 2 - 91, this.width / 2 + 90, 99, -2039584); + this.drawHorizontalLine(this.width / 2 - 91, this.width / 2 + 90, 185, -6250336); + this.drawVerticalLine(this.width / 2 - 91, 99, 185, -2039584); + this.drawVerticalLine(this.width / 2 + 90, 99, 185, -6250336); + float f = 85.0F; + float f1 = 180.0F; + GlStateManager.disableLighting(); + GlStateManager.disableFog(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.mc.getTextureManager().bindTexture(OPTIONS_BACKGROUND); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f2 = 32.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)(this.width / 2 - 90), 185.0D, 0.0D).tex(0.0D, 2.65625D).color(64, 64, 64, 64).endVertex(); + bufferbuilder.pos((double)(this.width / 2 + 90), 185.0D, 0.0D).tex(5.625D, 2.65625D).color(64, 64, 64, 64).endVertex(); + bufferbuilder.pos((double)(this.width / 2 + 90), 100.0D, 0.0D).tex(5.625D, 0.0D).color(64, 64, 64, 64).endVertex(); + bufferbuilder.pos((double)(this.width / 2 - 90), 100.0D, 0.0D).tex(0.0D, 0.0D).color(64, 64, 64, 64).endVertex(); + tessellator.draw(); + this.drawCenteredString(this.fontRenderer, I18n.format("createWorld.customize.custom.confirmTitle"), this.width / 2, 105, 16777215); + this.drawCenteredString(this.fontRenderer, I18n.format("createWorld.customize.custom.confirm1"), this.width / 2, 125, 16777215); + this.drawCenteredString(this.fontRenderer, I18n.format("createWorld.customize.custom.confirm2"), this.width / 2, 135, 16777215); + this.confirm.drawButton(this.mc, mouseX, mouseY, partialTicks); + this.cancel.drawButton(this.mc, mouseX, mouseY, partialTicks); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiDisconnected.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiDisconnected.java new file mode 100644 index 0000000..01b56cd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiDisconnected.java @@ -0,0 +1,77 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import java.util.List; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiDisconnected extends GuiScreen +{ + private final String reason; + private final ITextComponent message; + private List multilineMessage; + private final GuiScreen parentScreen; + private int textHeight; + + public GuiDisconnected(GuiScreen screen, String reasonLocalizationKey, ITextComponent chatComp) + { + this.parentScreen = screen; + this.reason = I18n.format(reasonLocalizationKey); + this.message = chatComp; + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + this.multilineMessage = this.fontRenderer.listFormattedStringToWidth(this.message.getFormattedText(), this.width - 50); + this.textHeight = this.multilineMessage.size() * this.fontRenderer.FONT_HEIGHT; + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, Math.min(this.height / 2 + this.textHeight / 2 + this.fontRenderer.FONT_HEIGHT, this.height - 30), I18n.format("gui.toMenu"))); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 0) + { + this.mc.displayGuiScreen(this.parentScreen); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.reason, this.width / 2, this.height / 2 - this.textHeight / 2 - this.fontRenderer.FONT_HEIGHT * 2, 11184810); + int i = this.height / 2 - this.textHeight / 2; + + if (this.multilineMessage != null) + { + for (String s : this.multilineMessage) + { + this.drawCenteredString(this.fontRenderer, s, this.width / 2, i, 16777215); + i += this.fontRenderer.FONT_HEIGHT; + } + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiDownloadTerrain.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiDownloadTerrain.java new file mode 100644 index 0000000..3d927fb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiDownloadTerrain.java @@ -0,0 +1,36 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiDownloadTerrain extends GuiScreen +{ + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawBackground(0); + this.drawCenteredString(this.fontRenderer, I18n.format("multiplayer.downloadingTerrain"), this.width / 2, this.height / 2 - 50, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiEnchantment.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiEnchantment.java new file mode 100644 index 0000000..2d5d0b6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiEnchantment.java @@ -0,0 +1,340 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import java.util.Random; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.model.ModelBook; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerEnchantment; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnchantmentNameParts; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.IWorldNameable; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.glu.Project; + +@SideOnly(Side.CLIENT) +public class GuiEnchantment extends GuiContainer +{ + /** The ResourceLocation containing the Enchantment GUI texture location */ + private static final ResourceLocation ENCHANTMENT_TABLE_GUI_TEXTURE = new ResourceLocation("textures/gui/container/enchanting_table.png"); + /** The ResourceLocation containing the texture for the Book rendered above the enchantment table */ + private static final ResourceLocation ENCHANTMENT_TABLE_BOOK_TEXTURE = new ResourceLocation("textures/entity/enchanting_table_book.png"); + /** The ModelBook instance used for rendering the book on the Enchantment table */ + private static final ModelBook MODEL_BOOK = new ModelBook(); + /** The player inventory currently bound to this GuiEnchantment instance. */ + private final InventoryPlayer playerInventory; + /** A Random instance for use with the enchantment gui */ + private final Random random = new Random(); + private final ContainerEnchantment container; + public int ticks; + public float flip; + public float oFlip; + public float flipT; + public float flipA; + public float open; + public float oOpen; + private ItemStack last = ItemStack.EMPTY; + private final IWorldNameable nameable; + + public GuiEnchantment(InventoryPlayer inventory, World worldIn, IWorldNameable nameable) + { + super(new ContainerEnchantment(inventory, worldIn)); + this.playerInventory = inventory; + this.container = (ContainerEnchantment)this.inventorySlots; + this.nameable = nameable; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.nameable.getDisplayName().getUnformattedText(), 12, 5, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + this.tickBook(); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + + for (int k = 0; k < 3; ++k) + { + int l = mouseX - (i + 60); + int i1 = mouseY - (j + 14 + 19 * k); + + if (l >= 0 && i1 >= 0 && l < 108 && i1 < 19 && this.container.enchantItem(this.mc.player, k)) + { + this.mc.playerController.sendEnchantPacket(this.container.windowId, k); + } + } + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(ENCHANTMENT_TABLE_GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + GlStateManager.pushMatrix(); + GlStateManager.matrixMode(5889); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + GlStateManager.viewport((scaledresolution.getScaledWidth() - 320) / 2 * scaledresolution.getScaleFactor(), (scaledresolution.getScaledHeight() - 240) / 2 * scaledresolution.getScaleFactor(), 320 * scaledresolution.getScaleFactor(), 240 * scaledresolution.getScaleFactor()); + GlStateManager.translate(-0.34F, 0.23F, 0.0F); + Project.gluPerspective(90.0F, 1.3333334F, 9.0F, 80.0F); + float f = 1.0F; + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.translate(0.0F, 3.3F, -16.0F); + GlStateManager.scale(1.0F, 1.0F, 1.0F); + float f1 = 5.0F; + GlStateManager.scale(5.0F, 5.0F, 5.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + this.mc.getTextureManager().bindTexture(ENCHANTMENT_TABLE_BOOK_TEXTURE); + GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F); + float f2 = this.oOpen + (this.open - this.oOpen) * partialTicks; + GlStateManager.translate((1.0F - f2) * 0.2F, (1.0F - f2) * 0.1F, (1.0F - f2) * 0.25F); + GlStateManager.rotate(-(1.0F - f2) * 90.0F - 90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + float f3 = this.oFlip + (this.flip - this.oFlip) * partialTicks + 0.25F; + float f4 = this.oFlip + (this.flip - this.oFlip) * partialTicks + 0.75F; + f3 = (f3 - (float)MathHelper.fastFloor((double)f3)) * 1.6F - 0.3F; + f4 = (f4 - (float)MathHelper.fastFloor((double)f4)) * 1.6F - 0.3F; + + if (f3 < 0.0F) + { + f3 = 0.0F; + } + + if (f4 < 0.0F) + { + f4 = 0.0F; + } + + if (f3 > 1.0F) + { + f3 = 1.0F; + } + + if (f4 > 1.0F) + { + f4 = 1.0F; + } + + GlStateManager.enableRescaleNormal(); + MODEL_BOOK.render((Entity)null, 0.0F, f3, f4, f2, 0.0F, 0.0625F); + GlStateManager.disableRescaleNormal(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.matrixMode(5889); + GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + EnchantmentNameParts.getInstance().reseedRandomGenerator((long)this.container.xpSeed); + int k = this.container.getLapisAmount(); + + for (int l = 0; l < 3; ++l) + { + int i1 = i + 60; + int j1 = i1 + 20; + this.zLevel = 0.0F; + this.mc.getTextureManager().bindTexture(ENCHANTMENT_TABLE_GUI_TEXTURE); + int k1 = this.container.enchantLevels[l]; + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if (k1 == 0) + { + this.drawTexturedModalRect(i1, j + 14 + 19 * l, 0, 185, 108, 19); + } + else + { + String s = "" + k1; + int l1 = 86 - this.fontRenderer.getStringWidth(s); + String s1 = EnchantmentNameParts.getInstance().generateNewRandomName(this.fontRenderer, l1); + FontRenderer fontrenderer = this.mc.standardGalacticFontRenderer; + int i2 = 6839882; + + if (((k < l + 1 || this.mc.player.experienceLevel < k1) && !this.mc.player.capabilities.isCreativeMode) || this.container.enchantClue[l] == -1) // Forge: render buttons as disabled when enchantable but enchantability not met on lower levels + { + this.drawTexturedModalRect(i1, j + 14 + 19 * l, 0, 185, 108, 19); + this.drawTexturedModalRect(i1 + 1, j + 15 + 19 * l, 16 * l, 239, 16, 16); + fontrenderer.drawSplitString(s1, j1, j + 16 + 19 * l, l1, (i2 & 16711422) >> 1); + i2 = 4226832; + } + else + { + int j2 = mouseX - (i + 60); + int k2 = mouseY - (j + 14 + 19 * l); + + if (j2 >= 0 && k2 >= 0 && j2 < 108 && k2 < 19) + { + this.drawTexturedModalRect(i1, j + 14 + 19 * l, 0, 204, 108, 19); + i2 = 16777088; + } + else + { + this.drawTexturedModalRect(i1, j + 14 + 19 * l, 0, 166, 108, 19); + } + + this.drawTexturedModalRect(i1 + 1, j + 15 + 19 * l, 16 * l, 223, 16, 16); + fontrenderer.drawSplitString(s1, j1, j + 16 + 19 * l, l1, i2); + i2 = 8453920; + } + + fontrenderer = this.mc.fontRenderer; + fontrenderer.drawStringWithShadow(s, (float)(j1 + 86 - fontrenderer.getStringWidth(s)), (float)(j + 16 + 19 * l + 7), i2); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + partialTicks = this.mc.getTickLength(); + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + boolean flag = this.mc.player.capabilities.isCreativeMode; + int i = this.container.getLapisAmount(); + + for (int j = 0; j < 3; ++j) + { + int k = this.container.enchantLevels[j]; + Enchantment enchantment = Enchantment.getEnchantmentByID(this.container.enchantClue[j]); + int l = this.container.worldClue[j]; + int i1 = j + 1; + + if (this.isPointInRegion(60, 14 + 19 * j, 108, 17, mouseX, mouseY) && k > 0) + { + List list = Lists.newArrayList(); + list.add("" + TextFormatting.WHITE + TextFormatting.ITALIC + I18n.format("container.enchant.clue", enchantment == null ? "" : enchantment.getTranslatedName(l))); + + if(enchantment == null) java.util.Collections.addAll(list, "", TextFormatting.RED + I18n.format("forge.container.enchant.limitedEnchantability")); else + if (!flag) + { + list.add(""); + + if (this.mc.player.experienceLevel < k) + { + list.add(TextFormatting.RED + I18n.format("container.enchant.level.requirement", this.container.enchantLevels[j])); + } + else + { + String s; + + if (i1 == 1) + { + s = I18n.format("container.enchant.lapis.one"); + } + else + { + s = I18n.format("container.enchant.lapis.many", i1); + } + + TextFormatting textformatting = i >= i1 ? TextFormatting.GRAY : TextFormatting.RED; + list.add(textformatting + "" + s); + + if (i1 == 1) + { + s = I18n.format("container.enchant.level.one"); + } + else + { + s = I18n.format("container.enchant.level.many", i1); + } + + list.add(TextFormatting.GRAY + "" + s); + } + } + + this.drawHoveringText(list, mouseX, mouseY); + break; + } + } + } + + public void tickBook() + { + ItemStack itemstack = this.inventorySlots.getSlot(0).getStack(); + + if (!ItemStack.areItemStacksEqual(itemstack, this.last)) + { + this.last = itemstack; + + while (true) + { + this.flipT += (float)(this.random.nextInt(4) - this.random.nextInt(4)); + + if (this.flip > this.flipT + 1.0F || this.flip < this.flipT - 1.0F) + { + break; + } + } + } + + ++this.ticks; + this.oFlip = this.flip; + this.oOpen = this.open; + boolean flag = false; + + for (int i = 0; i < 3; ++i) + { + if (this.container.enchantLevels[i] != 0) + { + flag = true; + } + } + + if (flag) + { + this.open += 0.2F; + } + else + { + this.open -= 0.2F; + } + + this.open = MathHelper.clamp(this.open, 0.0F, 1.0F); + float f1 = (this.flipT - this.flip) * 0.4F; + float f = 0.2F; + f1 = MathHelper.clamp(f1, -0.2F, 0.2F); + this.flipA += (f1 - this.flipA) * 0.9F; + this.flip += this.flipA; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiErrorScreen.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiErrorScreen.java new file mode 100644 index 0000000..9e4d01d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiErrorScreen.java @@ -0,0 +1,56 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiErrorScreen extends GuiScreen +{ + private final String title; + private final String message; + + public GuiErrorScreen(String titleIn, String messageIn) + { + this.title = titleIn; + this.message = messageIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, 140, I18n.format("gui.cancel"))); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawGradientRect(0, 0, this.width, this.height, -12574688, -11530224); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 90, 16777215); + this.drawCenteredString(this.fontRenderer, this.message, this.width / 2, 110, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + this.mc.displayGuiScreen((GuiScreen)null); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiFlatPresets.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiFlatPresets.java new file mode 100644 index 0000000..8ab12e3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiFlatPresets.java @@ -0,0 +1,285 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.init.Biomes; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.FlatGeneratorInfo; +import net.minecraft.world.gen.FlatLayerInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiFlatPresets extends GuiScreen +{ + private static final List FLAT_WORLD_PRESETS = Lists.newArrayList(); + /** The parent GUI */ + private final GuiCreateFlatWorld parentScreen; + private String presetsTitle; + private String presetsShare; + private String listText; + private GuiFlatPresets.ListSlot list; + private GuiButton btnSelect; + private GuiTextField export; + + public GuiFlatPresets(GuiCreateFlatWorld p_i46318_1_) + { + this.parentScreen = p_i46318_1_; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.presetsTitle = I18n.format("createWorld.customize.presets.title"); + this.presetsShare = I18n.format("createWorld.customize.presets.share"); + this.listText = I18n.format("createWorld.customize.presets.list"); + this.export = new GuiTextField(2, this.fontRenderer, 50, 40, this.width - 100, 20); + this.list = new GuiFlatPresets.ListSlot(); + this.export.setMaxStringLength(1230); + this.export.setText(this.parentScreen.getPreset()); + this.btnSelect = this.addButton(new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, I18n.format("createWorld.customize.presets.select"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, I18n.format("gui.cancel"))); + this.updateButtonValidity(); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.list.handleMouseInput(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + this.export.mouseClicked(mouseX, mouseY, mouseButton); + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (!this.export.textboxKeyTyped(typedChar, keyCode)) + { + super.keyTyped(typedChar, keyCode); + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 0 && this.hasValidSelection()) + { + this.parentScreen.setPreset(this.export.getText()); + this.mc.displayGuiScreen(this.parentScreen); + } + else if (button.id == 1) + { + this.mc.displayGuiScreen(this.parentScreen); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.list.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.presetsTitle, this.width / 2, 8, 16777215); + this.drawString(this.fontRenderer, this.presetsShare, 50, 30, 10526880); + this.drawString(this.fontRenderer, this.listText, 50, 70, 10526880); + this.export.drawTextBox(); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.export.updateCursorCounter(); + super.updateScreen(); + } + + public void updateButtonValidity() + { + this.btnSelect.enabled = this.hasValidSelection(); + } + + private boolean hasValidSelection() + { + return this.list.selected > -1 && this.list.selected < FLAT_WORLD_PRESETS.size() || this.export.getText().length() > 1; + } + + private static void registerPreset(String name, Item icon, Biome biome, List features, FlatLayerInfo... layers) + { + registerPreset(name, icon, 0, biome, features, layers); + } + + private static void registerPreset(String name, Item icon, int iconMetadata, Biome biome, List features, FlatLayerInfo... layers) + { + FlatGeneratorInfo flatgeneratorinfo = new FlatGeneratorInfo(); + + for (int i = layers.length - 1; i >= 0; --i) + { + flatgeneratorinfo.getFlatLayers().add(layers[i]); + } + + flatgeneratorinfo.setBiome(Biome.getIdForBiome(biome)); + flatgeneratorinfo.updateLayers(); + + for (String s : features) + { + flatgeneratorinfo.getWorldFeatures().put(s, Maps.newHashMap()); + } + + FLAT_WORLD_PRESETS.add(new GuiFlatPresets.LayerItem(icon, iconMetadata, name, flatgeneratorinfo.toString())); + } + + static + { + registerPreset(I18n.format("createWorld.customize.preset.classic_flat"), Item.getItemFromBlock(Blocks.GRASS), Biomes.PLAINS, Arrays.asList("village"), new FlatLayerInfo(1, Blocks.GRASS), new FlatLayerInfo(2, Blocks.DIRT), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.tunnelers_dream"), Item.getItemFromBlock(Blocks.STONE), Biomes.EXTREME_HILLS, Arrays.asList("biome_1", "dungeon", "decoration", "stronghold", "mineshaft"), new FlatLayerInfo(1, Blocks.GRASS), new FlatLayerInfo(5, Blocks.DIRT), new FlatLayerInfo(230, Blocks.STONE), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.water_world"), Items.WATER_BUCKET, Biomes.DEEP_OCEAN, Arrays.asList("biome_1", "oceanmonument"), new FlatLayerInfo(90, Blocks.WATER), new FlatLayerInfo(5, Blocks.SAND), new FlatLayerInfo(5, Blocks.DIRT), new FlatLayerInfo(5, Blocks.STONE), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.overworld"), Item.getItemFromBlock(Blocks.TALLGRASS), BlockTallGrass.EnumType.GRASS.getMeta(), Biomes.PLAINS, Arrays.asList("village", "biome_1", "decoration", "stronghold", "mineshaft", "dungeon", "lake", "lava_lake"), new FlatLayerInfo(1, Blocks.GRASS), new FlatLayerInfo(3, Blocks.DIRT), new FlatLayerInfo(59, Blocks.STONE), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.snowy_kingdom"), Item.getItemFromBlock(Blocks.SNOW_LAYER), Biomes.ICE_PLAINS, Arrays.asList("village", "biome_1"), new FlatLayerInfo(1, Blocks.SNOW_LAYER), new FlatLayerInfo(1, Blocks.GRASS), new FlatLayerInfo(3, Blocks.DIRT), new FlatLayerInfo(59, Blocks.STONE), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.bottomless_pit"), Items.FEATHER, Biomes.PLAINS, Arrays.asList("village", "biome_1"), new FlatLayerInfo(1, Blocks.GRASS), new FlatLayerInfo(3, Blocks.DIRT), new FlatLayerInfo(2, Blocks.COBBLESTONE)); + registerPreset(I18n.format("createWorld.customize.preset.desert"), Item.getItemFromBlock(Blocks.SAND), Biomes.DESERT, Arrays.asList("village", "biome_1", "decoration", "stronghold", "mineshaft", "dungeon"), new FlatLayerInfo(8, Blocks.SAND), new FlatLayerInfo(52, Blocks.SANDSTONE), new FlatLayerInfo(3, Blocks.STONE), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.redstone_ready"), Items.REDSTONE, Biomes.DESERT, Collections.emptyList(), new FlatLayerInfo(52, Blocks.SANDSTONE), new FlatLayerInfo(3, Blocks.STONE), new FlatLayerInfo(1, Blocks.BEDROCK)); + registerPreset(I18n.format("createWorld.customize.preset.the_void"), Item.getItemFromBlock(Blocks.BARRIER), Biomes.VOID, Arrays.asList("decoration"), new FlatLayerInfo(1, Blocks.AIR)); + } + + @SideOnly(Side.CLIENT) + static class LayerItem + { + public Item icon; + public int iconMetadata; + public String name; + public String generatorInfo; + + public LayerItem(Item iconIn, int iconMetadataIn, String nameIn, String generatorInfoIn) + { + this.icon = iconIn; + this.iconMetadata = iconMetadataIn; + this.name = nameIn; + this.generatorInfo = generatorInfoIn; + } + } + + @SideOnly(Side.CLIENT) + class ListSlot extends GuiSlot + { + public int selected = -1; + + public ListSlot() + { + super(GuiFlatPresets.this.mc, GuiFlatPresets.this.width, GuiFlatPresets.this.height, 80, GuiFlatPresets.this.height - 37, 24); + } + + private void renderIcon(int p_178054_1_, int p_178054_2_, Item icon, int iconMetadata) + { + this.blitSlotBg(p_178054_1_ + 1, p_178054_2_ + 1); + GlStateManager.enableRescaleNormal(); + RenderHelper.enableGUIStandardItemLighting(); + GuiFlatPresets.this.itemRender.renderItemIntoGUI(new ItemStack(icon, 1, icon.getHasSubtypes() ? iconMetadata : 0), p_178054_1_ + 2, p_178054_2_ + 2); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + } + + private void blitSlotBg(int p_148173_1_, int p_148173_2_) + { + this.blitSlotIcon(p_148173_1_, p_148173_2_, 0, 0); + } + + private void blitSlotIcon(int p_148171_1_, int p_148171_2_, int p_148171_3_, int p_148171_4_) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(Gui.STAT_ICONS); + float f = 0.0078125F; + float f1 = 0.0078125F; + int i = 18; + int j = 18; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(p_148171_1_ + 0), (double)(p_148171_2_ + 18), (double)GuiFlatPresets.this.zLevel).tex((double)((float)(p_148171_3_ + 0) * 0.0078125F), (double)((float)(p_148171_4_ + 18) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(p_148171_1_ + 18), (double)(p_148171_2_ + 18), (double)GuiFlatPresets.this.zLevel).tex((double)((float)(p_148171_3_ + 18) * 0.0078125F), (double)((float)(p_148171_4_ + 18) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(p_148171_1_ + 18), (double)(p_148171_2_ + 0), (double)GuiFlatPresets.this.zLevel).tex((double)((float)(p_148171_3_ + 18) * 0.0078125F), (double)((float)(p_148171_4_ + 0) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(p_148171_1_ + 0), (double)(p_148171_2_ + 0), (double)GuiFlatPresets.this.zLevel).tex((double)((float)(p_148171_3_ + 0) * 0.0078125F), (double)((float)(p_148171_4_ + 0) * 0.0078125F)).endVertex(); + tessellator.draw(); + } + + protected int getSize() + { + return GuiFlatPresets.FLAT_WORLD_PRESETS.size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + this.selected = slotIndex; + GuiFlatPresets.this.updateButtonValidity(); + GuiFlatPresets.this.export.setText((GuiFlatPresets.FLAT_WORLD_PRESETS.get(GuiFlatPresets.this.list.selected)).generatorInfo); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return slotIndex == this.selected; + } + + protected void drawBackground() + { + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + GuiFlatPresets.LayerItem guiflatpresets$layeritem = GuiFlatPresets.FLAT_WORLD_PRESETS.get(slotIndex); + this.renderIcon(xPos, yPos, guiflatpresets$layeritem.icon, guiflatpresets$layeritem.iconMetadata); + GuiFlatPresets.this.fontRenderer.drawString(guiflatpresets$layeritem.name, xPos + 18 + 5, yPos + 6, 16777215); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiGameOver.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiGameOver.java new file mode 100644 index 0000000..d6adcbc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiGameOver.java @@ -0,0 +1,200 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiGameOver extends GuiScreen +{ + /** The integer value containing the number of ticks that have passed since the player's death */ + private int enableButtonsTimer; + private final ITextComponent causeOfDeath; + + public GuiGameOver(@Nullable ITextComponent causeOfDeathIn) + { + this.causeOfDeath = causeOfDeathIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + this.enableButtonsTimer = 0; + + if (this.mc.world.getWorldInfo().isHardcoreModeEnabled()) + { + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 72, I18n.format("deathScreen.spectate"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, I18n.format("deathScreen." + (this.mc.isIntegratedServerRunning() ? "deleteWorld" : "leaveServer")))); + } + else + { + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 72, I18n.format("deathScreen.respawn"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, I18n.format("deathScreen.titleScreen"))); + + if (this.mc.getSession() == null) + { + (this.buttonList.get(1)).enabled = false; + } + } + + for (GuiButton guibutton : this.buttonList) + { + guibutton.enabled = false; + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + switch (button.id) + { + case 0: + this.mc.player.respawnPlayer(); + this.mc.displayGuiScreen((GuiScreen)null); + break; + case 1: + + if (this.mc.world.getWorldInfo().isHardcoreModeEnabled()) + { + this.mc.displayGuiScreen(new GuiMainMenu()); + } + else + { + GuiYesNo guiyesno = new GuiYesNo(this, I18n.format("deathScreen.quit.confirm"), "", I18n.format("deathScreen.titleScreen"), I18n.format("deathScreen.respawn"), 0); + this.mc.displayGuiScreen(guiyesno); + guiyesno.setButtonDelay(20); + } + } + } + + public void confirmClicked(boolean result, int id) + { + if (result) + { + if (this.mc.world != null) + { + this.mc.world.sendQuittingDisconnectingPacket(); + } + + this.mc.loadWorld((WorldClient)null); + this.mc.displayGuiScreen(new GuiMainMenu()); + } + else + { + this.mc.player.respawnPlayer(); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + boolean flag = this.mc.world.getWorldInfo().isHardcoreModeEnabled(); + this.drawGradientRect(0, 0, this.width, this.height, 1615855616, -1602211792); + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 2.0F); + this.drawCenteredString(this.fontRenderer, I18n.format(flag ? "deathScreen.title.hardcore" : "deathScreen.title"), this.width / 2 / 2, 30, 16777215); + GlStateManager.popMatrix(); + + if (this.causeOfDeath != null) + { + this.drawCenteredString(this.fontRenderer, this.causeOfDeath.getFormattedText(), this.width / 2, 85, 16777215); + } + + this.drawCenteredString(this.fontRenderer, I18n.format("deathScreen.score") + ": " + TextFormatting.YELLOW + this.mc.player.getScore(), this.width / 2, 100, 16777215); + + if (this.causeOfDeath != null && mouseY > 85 && mouseY < 85 + this.fontRenderer.FONT_HEIGHT) + { + ITextComponent itextcomponent = this.getClickedComponentAt(mouseX); + + if (itextcomponent != null && itextcomponent.getStyle().getHoverEvent() != null) + { + this.handleComponentHover(itextcomponent, mouseX, mouseY); + } + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @Nullable + public ITextComponent getClickedComponentAt(int p_184870_1_) + { + if (this.causeOfDeath == null) + { + return null; + } + else + { + int i = this.mc.fontRenderer.getStringWidth(this.causeOfDeath.getFormattedText()); + int j = this.width / 2 - i / 2; + int k = this.width / 2 + i / 2; + int l = j; + + if (p_184870_1_ >= j && p_184870_1_ <= k) + { + for (ITextComponent itextcomponent : this.causeOfDeath) + { + l += this.mc.fontRenderer.getStringWidth(GuiUtilRenderComponents.removeTextColorsIfConfigured(itextcomponent.getUnformattedComponentText(), false)); + + if (l > p_184870_1_) + { + return itextcomponent; + } + } + + return null; + } + else + { + return null; + } + } + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return false; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + ++this.enableButtonsTimer; + + if (this.enableButtonsTimer == 20) + { + for (GuiButton guibutton : this.buttonList) + { + guibutton.enabled = true; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiHopper.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiHopper.java new file mode 100644 index 0000000..81b06f8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiHopper.java @@ -0,0 +1,62 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerHopper; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiHopper extends GuiContainer +{ + /** The ResourceLocation containing the gui texture for the hopper */ + private static final ResourceLocation HOPPER_GUI_TEXTURE = new ResourceLocation("textures/gui/container/hopper.png"); + /** The player inventory currently bound to this GUI instance */ + private final IInventory playerInventory; + /** The hopper inventory bound to this GUI instance */ + private final IInventory hopperInventory; + + public GuiHopper(InventoryPlayer playerInv, IInventory hopperInv) + { + super(new ContainerHopper(playerInv, hopperInv, Minecraft.getMinecraft().player)); + this.playerInventory = playerInv; + this.hopperInventory = hopperInv; + this.allowUserInput = false; + this.ySize = 133; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.hopperInventory.getDisplayName().getUnformattedText(), 8, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(HOPPER_GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiIngame.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiIngame.java new file mode 100644 index 0000000..83d2676 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiIngame.java @@ -0,0 +1,1353 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.chat.IChatListener; +import net.minecraft.client.gui.chat.NarratorChatListener; +import net.minecraft.client.gui.chat.NormalChatListener; +import net.minecraft.client.gui.chat.OverlayChatListener; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.FoodStats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.border.WorldBorder; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiIngame extends Gui +{ + protected static final ResourceLocation VIGNETTE_TEX_PATH = new ResourceLocation("textures/misc/vignette.png"); + protected static final ResourceLocation WIDGETS_TEX_PATH = new ResourceLocation("textures/gui/widgets.png"); + protected static final ResourceLocation PUMPKIN_BLUR_TEX_PATH = new ResourceLocation("textures/misc/pumpkinblur.png"); + protected final Random rand = new Random(); + protected final Minecraft mc; + protected final RenderItem itemRenderer; + /** ChatGUI instance that retains all previous chat data */ + protected final GuiNewChat persistantChatGUI; + protected int updateCounter; + /** The string specifying which record music is playing */ + protected String overlayMessage = ""; + /** How many ticks the record playing message will be displayed */ + protected int overlayMessageTime; + protected boolean animateOverlayMessageColor; + /** Previous frame vignette brightness (slowly changes by 1% each frame) */ + public float prevVignetteBrightness = 1.0F; + /** Remaining ticks the item highlight should be visible */ + protected int remainingHighlightTicks; + /** The ItemStack that is currently being highlighted */ + protected ItemStack highlightingItemStack = ItemStack.EMPTY; + protected final GuiOverlayDebug overlayDebug; + protected final GuiSubtitleOverlay overlaySubtitle; + /** The spectator GUI for this in-game GUI instance */ + protected final GuiSpectator spectatorGui; + protected final GuiPlayerTabOverlay overlayPlayerList; + protected final GuiBossOverlay overlayBoss; + /** A timer for the current title and subtitle displayed */ + protected int titlesTimer; + /** The current title displayed */ + protected String displayedTitle = ""; + /** The current sub-title displayed */ + protected String displayedSubTitle = ""; + /** The time that the title take to fade in */ + protected int titleFadeIn; + /** The time that the title is display */ + protected int titleDisplayTime; + /** The time that the title take to fade out */ + protected int titleFadeOut; + protected int playerHealth; + protected int lastPlayerHealth; + /** The last recorded system time */ + protected long lastSystemTime; + /** Used with updateCounter to make the heart bar flash */ + protected long healthUpdateCounter; + protected final Map> chatListeners = Maps.>newHashMap(); + + public GuiIngame(Minecraft mcIn) + { + this.mc = mcIn; + this.itemRenderer = mcIn.getRenderItem(); + this.overlayDebug = new GuiOverlayDebug(mcIn); + this.spectatorGui = new GuiSpectator(mcIn); + this.persistantChatGUI = new GuiNewChat(mcIn); + this.overlayPlayerList = new GuiPlayerTabOverlay(mcIn, this); + this.overlayBoss = new GuiBossOverlay(mcIn); + this.overlaySubtitle = new GuiSubtitleOverlay(mcIn); + + for (ChatType chattype : ChatType.values()) + { + this.chatListeners.put(chattype, Lists.newArrayList()); + } + + IChatListener ichatlistener = NarratorChatListener.INSTANCE; + (this.chatListeners.get(ChatType.CHAT)).add(new NormalChatListener(mcIn)); + (this.chatListeners.get(ChatType.CHAT)).add(ichatlistener); + (this.chatListeners.get(ChatType.SYSTEM)).add(new NormalChatListener(mcIn)); + (this.chatListeners.get(ChatType.SYSTEM)).add(ichatlistener); + (this.chatListeners.get(ChatType.GAME_INFO)).add(new OverlayChatListener(mcIn)); + this.setDefaultTitlesTimes(); + } + + /** + * Set the differents times for the titles to their default values + */ + public void setDefaultTitlesTimes() + { + this.titleFadeIn = 10; + this.titleDisplayTime = 70; + this.titleFadeOut = 20; + } + + public void renderGameOverlay(float partialTicks) + { + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int i = scaledresolution.getScaledWidth(); + int j = scaledresolution.getScaledHeight(); + FontRenderer fontrenderer = this.getFontRenderer(); + GlStateManager.enableBlend(); + + if (Minecraft.isFancyGraphicsEnabled()) + { + this.renderVignette(this.mc.player.getBrightness(), scaledresolution); + } + else + { + GlStateManager.enableDepth(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } + + ItemStack itemstack = this.mc.player.inventory.armorItemInSlot(3); + + if (this.mc.gameSettings.thirdPersonView == 0 && itemstack.getItem() == Item.getItemFromBlock(Blocks.PUMPKIN)) + { + this.renderPumpkinOverlay(scaledresolution); + } + + if (!this.mc.player.isPotionActive(MobEffects.NAUSEA)) + { + float f = this.mc.player.prevTimeInPortal + (this.mc.player.timeInPortal - this.mc.player.prevTimeInPortal) * partialTicks; + + if (f > 0.0F) + { + this.renderPortal(f, scaledresolution); + } + } + + if (this.mc.playerController.isSpectator()) + { + this.spectatorGui.renderTooltip(scaledresolution, partialTicks); + } + else + { + this.renderHotbar(scaledresolution, partialTicks); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(ICONS); + GlStateManager.enableBlend(); + this.renderAttackIndicator(partialTicks, scaledresolution); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.mc.mcProfiler.startSection("bossHealth"); + this.overlayBoss.renderBossHealth(); + this.mc.mcProfiler.endSection(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(ICONS); + + if (this.mc.playerController.shouldDrawHUD()) + { + this.renderPlayerStats(scaledresolution); + } + + this.renderMountHealth(scaledresolution); + GlStateManager.disableBlend(); + + if (this.mc.player.getSleepTimer() > 0) + { + this.mc.mcProfiler.startSection("sleep"); + GlStateManager.disableDepth(); + GlStateManager.disableAlpha(); + int j1 = this.mc.player.getSleepTimer(); + float f1 = (float)j1 / 100.0F; + + if (f1 > 1.0F) + { + f1 = 1.0F - (float)(j1 - 100) / 10.0F; + } + + int k = (int)(220.0F * f1) << 24 | 1052704; + drawRect(0, 0, i, j, k); + GlStateManager.enableAlpha(); + GlStateManager.enableDepth(); + this.mc.mcProfiler.endSection(); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int k1 = i / 2 - 91; + + if (this.mc.player.isRidingHorse()) + { + this.renderHorseJumpBar(scaledresolution, k1); + } + else if (this.mc.playerController.gameIsSurvivalOrAdventure()) + { + this.renderExpBar(scaledresolution, k1); + } + + if (this.mc.gameSettings.heldItemTooltips && !this.mc.playerController.isSpectator()) + { + this.renderSelectedItem(scaledresolution); + } + else if (this.mc.player.isSpectator()) + { + this.spectatorGui.renderSelectedItem(scaledresolution); + } + + if (this.mc.isDemo()) + { + this.renderDemo(scaledresolution); + } + + this.renderPotionEffects(scaledresolution); + + if (this.mc.gameSettings.showDebugInfo) + { + this.overlayDebug.renderDebugInfo(scaledresolution); + } + + if (this.overlayMessageTime > 0) + { + this.mc.mcProfiler.startSection("overlayMessage"); + float f2 = (float)this.overlayMessageTime - partialTicks; + int l1 = (int)(f2 * 255.0F / 20.0F); + + if (l1 > 255) + { + l1 = 255; + } + + if (l1 > 8) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(i / 2), (float)(j - 68), 0.0F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + int l = 16777215; + + if (this.animateOverlayMessageColor) + { + l = MathHelper.hsvToRGB(f2 / 50.0F, 0.7F, 0.6F) & 16777215; + } + + fontrenderer.drawString(this.overlayMessage, -fontrenderer.getStringWidth(this.overlayMessage) / 2, -4, l + (l1 << 24 & -16777216)); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + + this.mc.mcProfiler.endSection(); + } + + this.overlaySubtitle.renderSubtitles(scaledresolution); + + if (this.titlesTimer > 0) + { + this.mc.mcProfiler.startSection("titleAndSubtitle"); + float f3 = (float)this.titlesTimer - partialTicks; + int i2 = 255; + + if (this.titlesTimer > this.titleFadeOut + this.titleDisplayTime) + { + float f4 = (float)(this.titleFadeIn + this.titleDisplayTime + this.titleFadeOut) - f3; + i2 = (int)(f4 * 255.0F / (float)this.titleFadeIn); + } + + if (this.titlesTimer <= this.titleFadeOut) + { + i2 = (int)(f3 * 255.0F / (float)this.titleFadeOut); + } + + i2 = MathHelper.clamp(i2, 0, 255); + + if (i2 > 8) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(i / 2), (float)(j / 2), 0.0F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 4.0F, 4.0F); + int j2 = i2 << 24 & -16777216; + fontrenderer.drawString(this.displayedTitle, (float)(-fontrenderer.getStringWidth(this.displayedTitle) / 2), -10.0F, 16777215 | j2, true); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 2.0F); + fontrenderer.drawString(this.displayedSubTitle, (float)(-fontrenderer.getStringWidth(this.displayedSubTitle) / 2), 5.0F, 16777215 | j2, true); + GlStateManager.popMatrix(); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + + this.mc.mcProfiler.endSection(); + } + + Scoreboard scoreboard = this.mc.world.getScoreboard(); + ScoreObjective scoreobjective = null; + ScorePlayerTeam scoreplayerteam = scoreboard.getPlayersTeam(this.mc.player.getName()); + + if (scoreplayerteam != null) + { + int i1 = scoreplayerteam.getColor().getColorIndex(); + + if (i1 >= 0) + { + scoreobjective = scoreboard.getObjectiveInDisplaySlot(3 + i1); + } + } + + ScoreObjective scoreobjective1 = scoreobjective != null ? scoreobjective : scoreboard.getObjectiveInDisplaySlot(1); + + if (scoreobjective1 != null) + { + this.renderScoreboard(scoreobjective1, scaledresolution); + } + + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.disableAlpha(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, (float)(j - 48), 0.0F); + this.mc.mcProfiler.startSection("chat"); + this.persistantChatGUI.drawChat(this.updateCounter); + this.mc.mcProfiler.endSection(); + GlStateManager.popMatrix(); + scoreobjective1 = scoreboard.getObjectiveInDisplaySlot(0); + + if (!this.mc.gameSettings.keyBindPlayerList.isKeyDown() || this.mc.isIntegratedServerRunning() && this.mc.player.connection.getPlayerInfoMap().size() <= 1 && scoreobjective1 == null) + { + this.overlayPlayerList.updatePlayerList(false); + } + else + { + this.overlayPlayerList.updatePlayerList(true); + this.overlayPlayerList.renderPlayerlist(i, scoreboard, scoreobjective1); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + GlStateManager.enableAlpha(); + } + + protected void renderAttackIndicator(float p_184045_1_, ScaledResolution p_184045_2_) + { + GameSettings gamesettings = this.mc.gameSettings; + + if (gamesettings.thirdPersonView == 0) + { + if (this.mc.playerController.isSpectator() && this.mc.pointedEntity == null) + { + RayTraceResult raytraceresult = this.mc.objectMouseOver; + + if (raytraceresult == null || raytraceresult.typeOfHit != RayTraceResult.Type.BLOCK) + { + return; + } + + BlockPos blockpos = raytraceresult.getBlockPos(); + + net.minecraft.block.state.IBlockState state = this.mc.world.getBlockState(blockpos); + if (!state.getBlock().hasTileEntity(state) || !(this.mc.world.getTileEntity(blockpos) instanceof IInventory)) + { + return; + } + } + + int l = p_184045_2_.getScaledWidth(); + int i1 = p_184045_2_.getScaledHeight(); + + if (gamesettings.showDebugInfo && !gamesettings.hideGUI && !this.mc.player.hasReducedDebug() && !gamesettings.reducedDebugInfo) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(l / 2), (float)(i1 / 2), this.zLevel); + Entity entity = this.mc.getRenderViewEntity(); + GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * p_184045_1_, -1.0F, 0.0F, 0.0F); + GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * p_184045_1_, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(-1.0F, -1.0F, -1.0F); + OpenGlHelper.renderDirections(10); + GlStateManager.popMatrix(); + } + else + { + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.ONE_MINUS_DST_COLOR, GlStateManager.DestFactor.ONE_MINUS_SRC_COLOR, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.enableAlpha(); + this.drawTexturedModalRect(l / 2 - 7, i1 / 2 - 7, 0, 0, 16, 16); + + if (this.mc.gameSettings.attackIndicator == 1) + { + float f = this.mc.player.getCooledAttackStrength(0.0F); + boolean flag = false; + + if (this.mc.pointedEntity != null && this.mc.pointedEntity instanceof EntityLivingBase && f >= 1.0F) + { + flag = this.mc.player.getCooldownPeriod() > 5.0F; + flag = flag & ((EntityLivingBase)this.mc.pointedEntity).isEntityAlive(); + } + + int i = i1 / 2 - 7 + 16; + int j = l / 2 - 8; + + if (flag) + { + this.drawTexturedModalRect(j, i, 68, 94, 16, 16); + } + else if (f < 1.0F) + { + int k = (int)(f * 17.0F); + this.drawTexturedModalRect(j, i, 36, 94, 16, 4); + this.drawTexturedModalRect(j, i, 52, 94, k, 4); + } + } + } + } + } + + protected void renderPotionEffects(ScaledResolution resolution) + { + Collection collection = this.mc.player.getActivePotionEffects(); + + if (!collection.isEmpty()) + { + this.mc.getTextureManager().bindTexture(GuiContainer.INVENTORY_BACKGROUND); + GlStateManager.enableBlend(); + int i = 0; + int j = 0; + + for (PotionEffect potioneffect : Ordering.natural().reverse().sortedCopy(collection)) + { + Potion potion = potioneffect.getPotion(); + + if (!potion.shouldRenderHUD(potioneffect)) continue; + // Rebind in case previous renderHUDEffect changed texture + this.mc.getTextureManager().bindTexture(GuiContainer.INVENTORY_BACKGROUND); + if (potioneffect.doesShowParticles()) + { + int k = resolution.getScaledWidth(); + int l = 1; + + if (this.mc.isDemo()) + { + l += 15; + } + + int i1 = potion.getStatusIconIndex(); + + if (potion.isBeneficial()) + { + ++i; + k = k - 25 * i; + } + else + { + ++j; + k = k - 25 * j; + l += 26; + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f = 1.0F; + + if (potioneffect.getIsAmbient()) + { + this.drawTexturedModalRect(k, l, 165, 166, 24, 24); + } + else + { + this.drawTexturedModalRect(k, l, 141, 166, 24, 24); + + if (potioneffect.getDuration() <= 200) + { + int j1 = 10 - potioneffect.getDuration() / 20; + f = MathHelper.clamp((float)potioneffect.getDuration() / 10.0F / 5.0F * 0.5F, 0.0F, 0.5F) + MathHelper.cos((float)potioneffect.getDuration() * (float)Math.PI / 5.0F) * MathHelper.clamp((float)j1 / 10.0F * 0.25F, 0.0F, 0.25F); + } + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, f); + // FORGE - Move status icon check down from above so renderHUDEffect will still be called without a status icon + if (potion.hasStatusIcon()) + this.drawTexturedModalRect(k + 3, l + 3, i1 % 8 * 18, 198 + i1 / 8 * 18, 18, 18); + potion.renderHUDEffect(k, l, potioneffect, mc, f); + } + } + } + } + + protected void renderHotbar(ScaledResolution sr, float partialTicks) + { + if (this.mc.getRenderViewEntity() instanceof EntityPlayer) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(WIDGETS_TEX_PATH); + EntityPlayer entityplayer = (EntityPlayer)this.mc.getRenderViewEntity(); + ItemStack itemstack = entityplayer.getHeldItemOffhand(); + EnumHandSide enumhandside = entityplayer.getPrimaryHand().opposite(); + int i = sr.getScaledWidth() / 2; + float f = this.zLevel; + int j = 182; + int k = 91; + this.zLevel = -90.0F; + this.drawTexturedModalRect(i - 91, sr.getScaledHeight() - 22, 0, 0, 182, 22); + this.drawTexturedModalRect(i - 91 - 1 + entityplayer.inventory.currentItem * 20, sr.getScaledHeight() - 22 - 1, 0, 22, 24, 22); + + if (!itemstack.isEmpty()) + { + if (enumhandside == EnumHandSide.LEFT) + { + this.drawTexturedModalRect(i - 91 - 29, sr.getScaledHeight() - 23, 24, 22, 29, 24); + } + else + { + this.drawTexturedModalRect(i + 91, sr.getScaledHeight() - 23, 53, 22, 29, 24); + } + } + + this.zLevel = f; + GlStateManager.enableRescaleNormal(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderHelper.enableGUIStandardItemLighting(); + + for (int l = 0; l < 9; ++l) + { + int i1 = i - 90 + l * 20 + 2; + int j1 = sr.getScaledHeight() - 16 - 3; + this.renderHotbarItem(i1, j1, partialTicks, entityplayer, entityplayer.inventory.mainInventory.get(l)); + } + + if (!itemstack.isEmpty()) + { + int l1 = sr.getScaledHeight() - 16 - 3; + + if (enumhandside == EnumHandSide.LEFT) + { + this.renderHotbarItem(i - 91 - 26, l1, partialTicks, entityplayer, itemstack); + } + else + { + this.renderHotbarItem(i + 91 + 10, l1, partialTicks, entityplayer, itemstack); + } + } + + if (this.mc.gameSettings.attackIndicator == 2) + { + float f1 = this.mc.player.getCooledAttackStrength(0.0F); + + if (f1 < 1.0F) + { + int i2 = sr.getScaledHeight() - 20; + int j2 = i + 91 + 6; + + if (enumhandside == EnumHandSide.RIGHT) + { + j2 = i - 91 - 22; + } + + this.mc.getTextureManager().bindTexture(Gui.ICONS); + int k1 = (int)(f1 * 19.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(j2, i2, 0, 94, 18, 18); + this.drawTexturedModalRect(j2, i2 + 18 - k1, 18, 112 - k1, 18, k1); + } + } + + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.disableBlend(); + } + } + + public void renderHorseJumpBar(ScaledResolution scaledRes, int x) + { + this.mc.mcProfiler.startSection("jumpBar"); + this.mc.getTextureManager().bindTexture(Gui.ICONS); + float f = this.mc.player.getHorseJumpPower(); + int i = 182; + int j = (int)(f * 183.0F); + int k = scaledRes.getScaledHeight() - 32 + 3; + this.drawTexturedModalRect(x, k, 0, 84, 182, 5); + + if (j > 0) + { + this.drawTexturedModalRect(x, k, 0, 89, j, 5); + } + + this.mc.mcProfiler.endSection(); + } + + public void renderExpBar(ScaledResolution scaledRes, int x) + { + this.mc.mcProfiler.startSection("expBar"); + this.mc.getTextureManager().bindTexture(Gui.ICONS); + int i = this.mc.player.xpBarCap(); + + if (i > 0) + { + int j = 182; + int k = (int)(this.mc.player.experience * 183.0F); + int l = scaledRes.getScaledHeight() - 32 + 3; + this.drawTexturedModalRect(x, l, 0, 64, 182, 5); + + if (k > 0) + { + this.drawTexturedModalRect(x, l, 0, 69, k, 5); + } + } + + this.mc.mcProfiler.endSection(); + + if (this.mc.player.experienceLevel > 0) + { + this.mc.mcProfiler.startSection("expLevel"); + String s = "" + this.mc.player.experienceLevel; + int i1 = (scaledRes.getScaledWidth() - this.getFontRenderer().getStringWidth(s)) / 2; + int j1 = scaledRes.getScaledHeight() - 31 - 4; + this.getFontRenderer().drawString(s, i1 + 1, j1, 0); + this.getFontRenderer().drawString(s, i1 - 1, j1, 0); + this.getFontRenderer().drawString(s, i1, j1 + 1, 0); + this.getFontRenderer().drawString(s, i1, j1 - 1, 0); + this.getFontRenderer().drawString(s, i1, j1, 8453920); + this.mc.mcProfiler.endSection(); + } + } + + public void renderSelectedItem(ScaledResolution scaledRes) + { + this.mc.mcProfiler.startSection("selectedItemName"); + + if (this.remainingHighlightTicks > 0 && !this.highlightingItemStack.isEmpty()) + { + String s = this.highlightingItemStack.getDisplayName(); + + if (this.highlightingItemStack.hasDisplayName()) + { + s = TextFormatting.ITALIC + s; + } + + int i = (scaledRes.getScaledWidth() - this.getFontRenderer().getStringWidth(s)) / 2; + int j = scaledRes.getScaledHeight() - 59; + + if (!this.mc.playerController.shouldDrawHUD()) + { + j += 14; + } + + int k = (int)((float)this.remainingHighlightTicks * 256.0F / 10.0F); + + if (k > 255) + { + k = 255; + } + + if (k > 0) + { + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.getFontRenderer().drawStringWithShadow(s, (float)i, (float)j, 16777215 + (k << 24)); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + } + + this.mc.mcProfiler.endSection(); + } + + public void renderDemo(ScaledResolution scaledRes) + { + this.mc.mcProfiler.startSection("demo"); + String s; + + if (this.mc.world.getTotalWorldTime() >= 120500L) + { + s = I18n.format("demo.demoExpired"); + } + else + { + s = I18n.format("demo.remainingTime", StringUtils.ticksToElapsedTime((int)(120500L - this.mc.world.getTotalWorldTime()))); + } + + int i = this.getFontRenderer().getStringWidth(s); + this.getFontRenderer().drawStringWithShadow(s, (float)(scaledRes.getScaledWidth() - i - 10), 5.0F, 16777215); + this.mc.mcProfiler.endSection(); + } + + protected void renderScoreboard(ScoreObjective objective, ScaledResolution scaledRes) + { + Scoreboard scoreboard = objective.getScoreboard(); + Collection collection = scoreboard.getSortedScores(objective); + List list = Lists.newArrayList(Iterables.filter(collection, new Predicate() + { + public boolean apply(@Nullable Score p_apply_1_) + { + return p_apply_1_.getPlayerName() != null && !p_apply_1_.getPlayerName().startsWith("#"); + } + })); + + if (list.size() > 15) + { + collection = Lists.newArrayList(Iterables.skip(list, collection.size() - 15)); + } + else + { + collection = list; + } + + int i = this.getFontRenderer().getStringWidth(objective.getDisplayName()); + + for (Score score : collection) + { + ScorePlayerTeam scoreplayerteam = scoreboard.getPlayersTeam(score.getPlayerName()); + String s = ScorePlayerTeam.formatPlayerName(scoreplayerteam, score.getPlayerName()) + ": " + TextFormatting.RED + score.getScorePoints(); + i = Math.max(i, this.getFontRenderer().getStringWidth(s)); + } + + int i1 = collection.size() * this.getFontRenderer().FONT_HEIGHT; + int j1 = scaledRes.getScaledHeight() / 2 + i1 / 3; + int k1 = 3; + int l1 = scaledRes.getScaledWidth() - i - 3; + int j = 0; + + for (Score score1 : collection) + { + ++j; + ScorePlayerTeam scoreplayerteam1 = scoreboard.getPlayersTeam(score1.getPlayerName()); + String s1 = ScorePlayerTeam.formatPlayerName(scoreplayerteam1, score1.getPlayerName()); + String s2 = TextFormatting.RED + "" + score1.getScorePoints(); + int k = j1 - j * this.getFontRenderer().FONT_HEIGHT; + int l = scaledRes.getScaledWidth() - 3 + 2; + drawRect(l1 - 2, k, l, k + this.getFontRenderer().FONT_HEIGHT, 1342177280); + this.getFontRenderer().drawString(s1, l1, k, 553648127); + this.getFontRenderer().drawString(s2, l - this.getFontRenderer().getStringWidth(s2), k, 553648127); + + if (j == collection.size()) + { + String s3 = objective.getDisplayName(); + drawRect(l1 - 2, k - this.getFontRenderer().FONT_HEIGHT - 1, l, k - 1, 1610612736); + drawRect(l1 - 2, k - 1, l, k, 1342177280); + this.getFontRenderer().drawString(s3, l1 + i / 2 - this.getFontRenderer().getStringWidth(s3) / 2, k - this.getFontRenderer().FONT_HEIGHT, 553648127); + } + } + } + + protected void renderPlayerStats(ScaledResolution scaledRes) + { + if (this.mc.getRenderViewEntity() instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)this.mc.getRenderViewEntity(); + int i = MathHelper.ceil(entityplayer.getHealth()); + boolean flag = this.healthUpdateCounter > (long)this.updateCounter && (this.healthUpdateCounter - (long)this.updateCounter) / 3L % 2L == 1L; + + if (i < this.playerHealth && entityplayer.hurtResistantTime > 0) + { + this.lastSystemTime = Minecraft.getSystemTime(); + this.healthUpdateCounter = (long)(this.updateCounter + 20); + } + else if (i > this.playerHealth && entityplayer.hurtResistantTime > 0) + { + this.lastSystemTime = Minecraft.getSystemTime(); + this.healthUpdateCounter = (long)(this.updateCounter + 10); + } + + if (Minecraft.getSystemTime() - this.lastSystemTime > 1000L) + { + this.playerHealth = i; + this.lastPlayerHealth = i; + this.lastSystemTime = Minecraft.getSystemTime(); + } + + this.playerHealth = i; + int j = this.lastPlayerHealth; + this.rand.setSeed((long)(this.updateCounter * 312871)); + FoodStats foodstats = entityplayer.getFoodStats(); + int k = foodstats.getFoodLevel(); + IAttributeInstance iattributeinstance = entityplayer.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH); + int l = scaledRes.getScaledWidth() / 2 - 91; + int i1 = scaledRes.getScaledWidth() / 2 + 91; + int j1 = scaledRes.getScaledHeight() - 39; + float f = (float)iattributeinstance.getAttributeValue(); + int k1 = MathHelper.ceil(entityplayer.getAbsorptionAmount()); + int l1 = MathHelper.ceil((f + (float)k1) / 2.0F / 10.0F); + int i2 = Math.max(10 - (l1 - 2), 3); + int j2 = j1 - (l1 - 1) * i2 - 10; + int k2 = j1 - 10; + int l2 = k1; + int i3 = entityplayer.getTotalArmorValue(); + int j3 = -1; + + if (entityplayer.isPotionActive(MobEffects.REGENERATION)) + { + j3 = this.updateCounter % MathHelper.ceil(f + 5.0F); + } + + this.mc.mcProfiler.startSection("armor"); + + for (int k3 = 0; k3 < 10; ++k3) + { + if (i3 > 0) + { + int l3 = l + k3 * 8; + + if (k3 * 2 + 1 < i3) + { + this.drawTexturedModalRect(l3, j2, 34, 9, 9, 9); + } + + if (k3 * 2 + 1 == i3) + { + this.drawTexturedModalRect(l3, j2, 25, 9, 9, 9); + } + + if (k3 * 2 + 1 > i3) + { + this.drawTexturedModalRect(l3, j2, 16, 9, 9, 9); + } + } + } + + this.mc.mcProfiler.endStartSection("health"); + + for (int j5 = MathHelper.ceil((f + (float)k1) / 2.0F) - 1; j5 >= 0; --j5) + { + int k5 = 16; + + if (entityplayer.isPotionActive(MobEffects.POISON)) + { + k5 += 36; + } + else if (entityplayer.isPotionActive(MobEffects.WITHER)) + { + k5 += 72; + } + + int i4 = 0; + + if (flag) + { + i4 = 1; + } + + int j4 = MathHelper.ceil((float)(j5 + 1) / 10.0F) - 1; + int k4 = l + j5 % 10 * 8; + int l4 = j1 - j4 * i2; + + if (i <= 4) + { + l4 += this.rand.nextInt(2); + } + + if (l2 <= 0 && j5 == j3) + { + l4 -= 2; + } + + int i5 = 0; + + if (entityplayer.world.getWorldInfo().isHardcoreModeEnabled()) + { + i5 = 5; + } + + this.drawTexturedModalRect(k4, l4, 16 + i4 * 9, 9 * i5, 9, 9); + + if (flag) + { + if (j5 * 2 + 1 < j) + { + this.drawTexturedModalRect(k4, l4, k5 + 54, 9 * i5, 9, 9); + } + + if (j5 * 2 + 1 == j) + { + this.drawTexturedModalRect(k4, l4, k5 + 63, 9 * i5, 9, 9); + } + } + + if (l2 > 0) + { + if (l2 == k1 && k1 % 2 == 1) + { + this.drawTexturedModalRect(k4, l4, k5 + 153, 9 * i5, 9, 9); + --l2; + } + else + { + this.drawTexturedModalRect(k4, l4, k5 + 144, 9 * i5, 9, 9); + l2 -= 2; + } + } + else + { + if (j5 * 2 + 1 < i) + { + this.drawTexturedModalRect(k4, l4, k5 + 36, 9 * i5, 9, 9); + } + + if (j5 * 2 + 1 == i) + { + this.drawTexturedModalRect(k4, l4, k5 + 45, 9 * i5, 9, 9); + } + } + } + + Entity entity = entityplayer.getRidingEntity(); + + if (entity == null || !(entity instanceof EntityLivingBase)) + { + this.mc.mcProfiler.endStartSection("food"); + + for (int l5 = 0; l5 < 10; ++l5) + { + int j6 = j1; + int l6 = 16; + int j7 = 0; + + if (entityplayer.isPotionActive(MobEffects.HUNGER)) + { + l6 += 36; + j7 = 13; + } + + if (entityplayer.getFoodStats().getSaturationLevel() <= 0.0F && this.updateCounter % (k * 3 + 1) == 0) + { + j6 = j1 + (this.rand.nextInt(3) - 1); + } + + int l7 = i1 - l5 * 8 - 9; + this.drawTexturedModalRect(l7, j6, 16 + j7 * 9, 27, 9, 9); + + if (l5 * 2 + 1 < k) + { + this.drawTexturedModalRect(l7, j6, l6 + 36, 27, 9, 9); + } + + if (l5 * 2 + 1 == k) + { + this.drawTexturedModalRect(l7, j6, l6 + 45, 27, 9, 9); + } + } + } + + this.mc.mcProfiler.endStartSection("air"); + + if (entityplayer.isInsideOfMaterial(Material.WATER)) + { + int i6 = this.mc.player.getAir(); + int k6 = MathHelper.ceil((double)(i6 - 2) * 10.0D / 300.0D); + int i7 = MathHelper.ceil((double)i6 * 10.0D / 300.0D) - k6; + + for (int k7 = 0; k7 < k6 + i7; ++k7) + { + if (k7 < k6) + { + this.drawTexturedModalRect(i1 - k7 * 8 - 9, k2, 16, 18, 9, 9); + } + else + { + this.drawTexturedModalRect(i1 - k7 * 8 - 9, k2, 25, 18, 9, 9); + } + } + } + + this.mc.mcProfiler.endSection(); + } + } + + protected void renderMountHealth(ScaledResolution p_184047_1_) + { + if (this.mc.getRenderViewEntity() instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)this.mc.getRenderViewEntity(); + Entity entity = entityplayer.getRidingEntity(); + + if (entity instanceof EntityLivingBase) + { + this.mc.mcProfiler.endStartSection("mountHealth"); + EntityLivingBase entitylivingbase = (EntityLivingBase)entity; + int i = (int)Math.ceil((double)entitylivingbase.getHealth()); + float f = entitylivingbase.getMaxHealth(); + int j = (int)(f + 0.5F) / 2; + + if (j > 30) + { + j = 30; + } + + int k = p_184047_1_.getScaledHeight() - 39; + int l = p_184047_1_.getScaledWidth() / 2 + 91; + int i1 = k; + int j1 = 0; + + for (boolean flag = false; j > 0; j1 += 20) + { + int k1 = Math.min(j, 10); + j -= k1; + + for (int l1 = 0; l1 < k1; ++l1) + { + int i2 = 52; + int j2 = 0; + int k2 = l - l1 * 8 - 9; + this.drawTexturedModalRect(k2, i1, 52 + j2 * 9, 9, 9, 9); + + if (l1 * 2 + 1 + j1 < i) + { + this.drawTexturedModalRect(k2, i1, 88, 9, 9, 9); + } + + if (l1 * 2 + 1 + j1 == i) + { + this.drawTexturedModalRect(k2, i1, 97, 9, 9, 9); + } + } + + i1 -= 10; + } + } + } + } + + protected void renderPumpkinOverlay(ScaledResolution scaledRes) + { + GlStateManager.disableDepth(); + GlStateManager.depthMask(false); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableAlpha(); + this.mc.getTextureManager().bindTexture(PUMPKIN_BLUR_TEX_PATH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(0.0D, (double)scaledRes.getScaledHeight(), -90.0D).tex(0.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)scaledRes.getScaledWidth(), (double)scaledRes.getScaledHeight(), -90.0D).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)scaledRes.getScaledWidth(), 0.0D, -90.0D).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, -90.0D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.depthMask(true); + GlStateManager.enableDepth(); + GlStateManager.enableAlpha(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + + /** + * Renders a Vignette arount the entire screen that changes with light level. + */ + protected void renderVignette(float lightLevel, ScaledResolution scaledRes) + { + lightLevel = 1.0F - lightLevel; + lightLevel = MathHelper.clamp(lightLevel, 0.0F, 1.0F); + WorldBorder worldborder = this.mc.world.getWorldBorder(); + float f = (float)worldborder.getClosestDistance(this.mc.player); + double d0 = Math.min(worldborder.getResizeSpeed() * (double)worldborder.getWarningTime() * 1000.0D, Math.abs(worldborder.getTargetSize() - worldborder.getDiameter())); + double d1 = Math.max((double)worldborder.getWarningDistance(), d0); + + if ((double)f < d1) + { + f = 1.0F - (float)((double)f / d1); + } + else + { + f = 0.0F; + } + + this.prevVignetteBrightness = (float)((double)this.prevVignetteBrightness + (double)(lightLevel - this.prevVignetteBrightness) * 0.01D); + GlStateManager.disableDepth(); + GlStateManager.depthMask(false); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE_MINUS_SRC_COLOR, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + + if (f > 0.0F) + { + GlStateManager.color(0.0F, f, f, 1.0F); + } + else + { + GlStateManager.color(this.prevVignetteBrightness, this.prevVignetteBrightness, this.prevVignetteBrightness, 1.0F); + } + + this.mc.getTextureManager().bindTexture(VIGNETTE_TEX_PATH); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(0.0D, (double)scaledRes.getScaledHeight(), -90.0D).tex(0.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)scaledRes.getScaledWidth(), (double)scaledRes.getScaledHeight(), -90.0D).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)scaledRes.getScaledWidth(), 0.0D, -90.0D).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, -90.0D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.depthMask(true); + GlStateManager.enableDepth(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } + + protected void renderPortal(float timeInPortal, ScaledResolution scaledRes) + { + if (timeInPortal < 1.0F) + { + timeInPortal = timeInPortal * timeInPortal; + timeInPortal = timeInPortal * timeInPortal; + timeInPortal = timeInPortal * 0.8F + 0.2F; + } + + GlStateManager.disableAlpha(); + GlStateManager.disableDepth(); + GlStateManager.depthMask(false); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color(1.0F, 1.0F, 1.0F, timeInPortal); + this.mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + TextureAtlasSprite textureatlassprite = this.mc.getBlockRendererDispatcher().getBlockModelShapes().getTexture(Blocks.PORTAL.getDefaultState()); + float f = textureatlassprite.getMinU(); + float f1 = textureatlassprite.getMinV(); + float f2 = textureatlassprite.getMaxU(); + float f3 = textureatlassprite.getMaxV(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(0.0D, (double)scaledRes.getScaledHeight(), -90.0D).tex((double)f, (double)f3).endVertex(); + bufferbuilder.pos((double)scaledRes.getScaledWidth(), (double)scaledRes.getScaledHeight(), -90.0D).tex((double)f2, (double)f3).endVertex(); + bufferbuilder.pos((double)scaledRes.getScaledWidth(), 0.0D, -90.0D).tex((double)f2, (double)f1).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, -90.0D).tex((double)f, (double)f1).endVertex(); + tessellator.draw(); + GlStateManager.depthMask(true); + GlStateManager.enableDepth(); + GlStateManager.enableAlpha(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + + protected void renderHotbarItem(int p_184044_1_, int p_184044_2_, float p_184044_3_, EntityPlayer player, ItemStack stack) + { + if (!stack.isEmpty()) + { + float f = (float)stack.getAnimationsToGo() - p_184044_3_; + + if (f > 0.0F) + { + GlStateManager.pushMatrix(); + float f1 = 1.0F + f / 5.0F; + GlStateManager.translate((float)(p_184044_1_ + 8), (float)(p_184044_2_ + 12), 0.0F); + GlStateManager.scale(1.0F / f1, (f1 + 1.0F) / 2.0F, 1.0F); + GlStateManager.translate((float)(-(p_184044_1_ + 8)), (float)(-(p_184044_2_ + 12)), 0.0F); + } + + this.itemRenderer.renderItemAndEffectIntoGUI(player, stack, p_184044_1_, p_184044_2_); + + if (f > 0.0F) + { + GlStateManager.popMatrix(); + } + + this.itemRenderer.renderItemOverlays(this.mc.fontRenderer, stack, p_184044_1_, p_184044_2_); + } + } + + /** + * The update tick for the ingame UI + */ + public void updateTick() + { + if (this.overlayMessageTime > 0) + { + --this.overlayMessageTime; + } + + if (this.titlesTimer > 0) + { + --this.titlesTimer; + + if (this.titlesTimer <= 0) + { + this.displayedTitle = ""; + this.displayedSubTitle = ""; + } + } + + ++this.updateCounter; + + if (this.mc.player != null) + { + ItemStack itemstack = this.mc.player.inventory.getCurrentItem(); + + if (itemstack.isEmpty()) + { + this.remainingHighlightTicks = 0; + } + else if (!this.highlightingItemStack.isEmpty() && itemstack.getItem() == this.highlightingItemStack.getItem() && ItemStack.areItemStackTagsEqual(itemstack, this.highlightingItemStack) && (itemstack.isItemStackDamageable() || itemstack.getMetadata() == this.highlightingItemStack.getMetadata())) + { + if (this.remainingHighlightTicks > 0) + { + --this.remainingHighlightTicks; + } + } + else + { + this.remainingHighlightTicks = 40; + } + + this.highlightingItemStack = itemstack; + } + } + + public void setRecordPlayingMessage(String recordName) + { + this.setOverlayMessage(I18n.format("record.nowPlaying", recordName), true); + } + + public void setOverlayMessage(String message, boolean animateColor) + { + this.overlayMessage = message; + this.overlayMessageTime = 60; + this.animateOverlayMessageColor = animateColor; + } + + public void displayTitle(String title, String subTitle, int timeFadeIn, int displayTime, int timeFadeOut) + { + if (title == null && subTitle == null && timeFadeIn < 0 && displayTime < 0 && timeFadeOut < 0) + { + this.displayedTitle = ""; + this.displayedSubTitle = ""; + this.titlesTimer = 0; + } + else if (title != null) + { + this.displayedTitle = title; + this.titlesTimer = this.titleFadeIn + this.titleDisplayTime + this.titleFadeOut; + } + else if (subTitle != null) + { + this.displayedSubTitle = subTitle; + } + else + { + if (timeFadeIn >= 0) + { + this.titleFadeIn = timeFadeIn; + } + + if (displayTime >= 0) + { + this.titleDisplayTime = displayTime; + } + + if (timeFadeOut >= 0) + { + this.titleFadeOut = timeFadeOut; + } + + if (this.titlesTimer > 0) + { + this.titlesTimer = this.titleFadeIn + this.titleDisplayTime + this.titleFadeOut; + } + } + } + + public void setOverlayMessage(ITextComponent component, boolean animateColor) + { + this.setOverlayMessage(component.getUnformattedText(), animateColor); + } + + /** + * Forwards the given chat message to all listeners. + */ + public void addChatMessage(ChatType chatTypeIn, ITextComponent message) + { + for (IChatListener ichatlistener : this.chatListeners.get(chatTypeIn)) + { + ichatlistener.say(chatTypeIn, message); + } + } + + /** + * returns a pointer to the persistant Chat GUI, containing all previous chat messages and such + */ + public GuiNewChat getChatGUI() + { + return this.persistantChatGUI; + } + + public int getUpdateCounter() + { + return this.updateCounter; + } + + public FontRenderer getFontRenderer() + { + return this.mc.fontRenderer; + } + + public GuiSpectator getSpectatorGui() + { + return this.spectatorGui; + } + + public GuiPlayerTabOverlay getTabList() + { + return this.overlayPlayerList; + } + + /** + * Reset the GuiPlayerTabOverlay's message header and footer + */ + public void resetPlayersOverlayFooterHeader() + { + this.overlayPlayerList.resetFooterHeader(); + this.overlayBoss.clearBossInfos(); + this.mc.getToastGui().clear(); + } + + /** + * Accessor for the GuiBossOverlay + */ + public GuiBossOverlay getBossOverlay() + { + return this.overlayBoss; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiIngameMenu.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiIngameMenu.java new file mode 100644 index 0000000..7cd6896 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiIngameMenu.java @@ -0,0 +1,118 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.gui.achievement.GuiStats; +import net.minecraft.client.gui.advancements.GuiScreenAdvancements; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.resources.I18n; +import net.minecraft.realms.RealmsBridge; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiIngameMenu extends GuiScreen +{ + private int saveStep; + private int visibleTime; + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.saveStep = 0; + this.buttonList.clear(); + int i = -16; + int j = 98; + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + -16, I18n.format("menu.returnToMenu"))); + + if (!this.mc.isIntegratedServerRunning()) + { + (this.buttonList.get(0)).displayString = I18n.format("menu.disconnect"); + } + + this.buttonList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24 + -16, I18n.format("menu.returnToGame"))); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + -16, 98, 20, I18n.format("menu.options"))); + this.buttonList.add(new GuiButton(12, this.width / 2 + 2, this.height / 4 + 96 + i, 98, 20, I18n.format("fml.menu.modoptions"))); + GuiButton guibutton = this.addButton(new GuiButton(7, this.width / 2 - 100, this.height / 4 + 72 + -16, 200, 20, I18n.format("menu.shareToLan", new Object[0]))); + guibutton.enabled = this.mc.isSingleplayer() && !this.mc.getIntegratedServer().getPublic(); + this.buttonList.add(new GuiButton(5, this.width / 2 - 100, this.height / 4 + 48 + -16, 98, 20, I18n.format("gui.advancements"))); + this.buttonList.add(new GuiButton(6, this.width / 2 + 2, this.height / 4 + 48 + -16, 98, 20, I18n.format("gui.stats"))); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + switch (button.id) + { + case 0: + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + break; + case 1: + boolean flag = this.mc.isIntegratedServerRunning(); + boolean flag1 = this.mc.isConnectedToRealms(); + button.enabled = false; + this.mc.world.sendQuittingDisconnectingPacket(); + this.mc.loadWorld((WorldClient)null); + + if (flag) + { + this.mc.displayGuiScreen(new GuiMainMenu()); + } + else if (flag1) + { + RealmsBridge realmsbridge = new RealmsBridge(); + realmsbridge.switchToRealms(new GuiMainMenu()); + } + else + { + this.mc.displayGuiScreen(new GuiMultiplayer(new GuiMainMenu())); + } + + case 2: + case 3: + default: + break; + case 4: + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + break; + case 5: + if (this.mc.player != null) + this.mc.displayGuiScreen(new GuiScreenAdvancements(this.mc.player.connection.getAdvancementManager())); + break; + case 6: + if (this.mc.player != null) + this.mc.displayGuiScreen(new GuiStats(this, this.mc.player.getStatFileWriter())); + break; + case 7: + this.mc.displayGuiScreen(new GuiShareToLan(this)); + break; + case 12: + net.minecraftforge.fml.client.FMLClientHandler.instance().showInGameModOptions(this); + break; + } + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + ++this.visibleTime; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("menu.game"), this.width / 2, 40, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiKeyBindingList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiKeyBindingList.java new file mode 100644 index 0000000..676702d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiKeyBindingList.java @@ -0,0 +1,210 @@ +package net.minecraft.client.gui; + +import java.util.Arrays; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.KeyBinding; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.ArrayUtils; + +@SideOnly(Side.CLIENT) +public class GuiKeyBindingList extends GuiListExtended +{ + private final GuiControls controlsScreen; + private final Minecraft mc; + private final GuiListExtended.IGuiListEntry[] listEntries; + private int maxListLabelWidth; + + public GuiKeyBindingList(GuiControls controls, Minecraft mcIn) + { + super(mcIn, controls.width + 45, controls.height, 63, controls.height - 32, 20); + this.controlsScreen = controls; + this.mc = mcIn; + KeyBinding[] akeybinding = (KeyBinding[])ArrayUtils.clone(mcIn.gameSettings.keyBindings); + this.listEntries = new GuiListExtended.IGuiListEntry[akeybinding.length + KeyBinding.getKeybinds().size()]; + Arrays.sort((Object[])akeybinding); + int i = 0; + String s = null; + + for (KeyBinding keybinding : akeybinding) + { + String s1 = keybinding.getKeyCategory(); + + if (!s1.equals(s)) + { + s = s1; + this.listEntries[i++] = new GuiKeyBindingList.CategoryEntry(s1); + } + + int j = mcIn.fontRenderer.getStringWidth(I18n.format(keybinding.getKeyDescription())); + + if (j > this.maxListLabelWidth) + { + this.maxListLabelWidth = j; + } + + this.listEntries[i++] = new GuiKeyBindingList.KeyEntry(keybinding); + } + } + + protected int getSize() + { + return this.listEntries.length; + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public GuiListExtended.IGuiListEntry getListEntry(int index) + { + return this.listEntries[index]; + } + + protected int getScrollBarX() + { + return super.getScrollBarX() + 35; + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return super.getListWidth() + 32; + } + + @SideOnly(Side.CLIENT) + public class CategoryEntry implements GuiListExtended.IGuiListEntry + { + private final String labelText; + private final int labelWidth; + + public CategoryEntry(String name) + { + this.labelText = I18n.format(name); + this.labelWidth = GuiKeyBindingList.this.mc.fontRenderer.getStringWidth(this.labelText); + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + GuiKeyBindingList.this.mc.fontRenderer.drawString(this.labelText, GuiKeyBindingList.this.mc.currentScreen.width / 2 - this.labelWidth / 2, y + slotHeight - GuiKeyBindingList.this.mc.fontRenderer.FONT_HEIGHT - 1, 16777215); + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + return false; + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + } + + @SideOnly(Side.CLIENT) + public class KeyEntry implements GuiListExtended.IGuiListEntry + { + /** The keybinding specified for this KeyEntry */ + private final KeyBinding keybinding; + /** The localized key description for this KeyEntry */ + private final String keyDesc; + private final GuiButton btnChangeKeyBinding; + private final GuiButton btnReset; + + private KeyEntry(KeyBinding name) + { + this.keybinding = name; + this.keyDesc = I18n.format(name.getKeyDescription()); + this.btnChangeKeyBinding = new GuiButton(0, 0, 0, 95, 20, I18n.format(name.getKeyDescription())); + this.btnReset = new GuiButton(0, 0, 0, 50, 20, I18n.format("controls.reset")); + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + boolean flag = GuiKeyBindingList.this.controlsScreen.buttonId == this.keybinding; + GuiKeyBindingList.this.mc.fontRenderer.drawString(this.keyDesc, x + 90 - GuiKeyBindingList.this.maxListLabelWidth, y + slotHeight / 2 - GuiKeyBindingList.this.mc.fontRenderer.FONT_HEIGHT / 2, 16777215); + this.btnReset.x = x + 210; + this.btnReset.y = y; + this.btnReset.enabled = !this.keybinding.isSetToDefaultValue(); + this.btnReset.drawButton(GuiKeyBindingList.this.mc, mouseX, mouseY, partialTicks); + this.btnChangeKeyBinding.x = x + 105; + this.btnChangeKeyBinding.y = y; + this.btnChangeKeyBinding.displayString = this.keybinding.getDisplayName(); + boolean flag1 = false; + boolean keyCodeModifierConflict = true; // less severe form of conflict, like SHIFT conflicting with SHIFT+G + + if (this.keybinding.getKeyCode() != 0) + { + for (KeyBinding keybinding : GuiKeyBindingList.this.mc.gameSettings.keyBindings) + { + if (keybinding != this.keybinding && keybinding.conflicts(this.keybinding)) + { + flag1 = true; + keyCodeModifierConflict &= keybinding.hasKeyCodeModifierConflict(this.keybinding); + } + } + } + + if (flag) + { + this.btnChangeKeyBinding.displayString = TextFormatting.WHITE + "> " + TextFormatting.YELLOW + this.btnChangeKeyBinding.displayString + TextFormatting.WHITE + " <"; + } + else if (flag1) + { + this.btnChangeKeyBinding.displayString = (keyCodeModifierConflict ? TextFormatting.GOLD : TextFormatting.RED) + this.btnChangeKeyBinding.displayString; + } + + this.btnChangeKeyBinding.drawButton(GuiKeyBindingList.this.mc, mouseX, mouseY, partialTicks); + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + if (this.btnChangeKeyBinding.mousePressed(GuiKeyBindingList.this.mc, mouseX, mouseY)) + { + GuiKeyBindingList.this.controlsScreen.buttonId = this.keybinding; + return true; + } + else if (this.btnReset.mousePressed(GuiKeyBindingList.this.mc, mouseX, mouseY)) + { + this.keybinding.setToDefault(); + GuiKeyBindingList.this.mc.gameSettings.setOptionKeyBinding(this.keybinding, this.keybinding.getKeyCodeDefault()); + KeyBinding.resetKeyBindingArrayAndHash(); + return true; + } + else + { + return false; + } + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + this.btnChangeKeyBinding.mouseReleased(x, y); + this.btnReset.mouseReleased(x, y); + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLabel.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLabel.java new file mode 100644 index 0000000..0245752 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLabel.java @@ -0,0 +1,101 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiLabel extends Gui +{ + protected int width = 200; + protected int height = 20; + public int x; + public int y; + private final List labels; + public int id; + private boolean centered; + public boolean visible = true; + private boolean labelBgEnabled; + private final int textColor; + private int backColor; + private int ulColor; + private int brColor; + private final FontRenderer fontRenderer; + private int border; + + public GuiLabel(FontRenderer fontRendererObj, int p_i45540_2_, int p_i45540_3_, int p_i45540_4_, int p_i45540_5_, int p_i45540_6_, int p_i45540_7_) + { + this.fontRenderer = fontRendererObj; + this.id = p_i45540_2_; + this.x = p_i45540_3_; + this.y = p_i45540_4_; + this.width = p_i45540_5_; + this.height = p_i45540_6_; + this.labels = Lists.newArrayList(); + this.centered = false; + this.labelBgEnabled = false; + this.textColor = p_i45540_7_; + this.backColor = -1; + this.ulColor = -1; + this.brColor = -1; + this.border = 0; + } + + public void addLine(String p_175202_1_) + { + this.labels.add(I18n.format(p_175202_1_)); + } + + /** + * Sets the Label to be centered + */ + public GuiLabel setCentered() + { + this.centered = true; + return this; + } + + public void drawLabel(Minecraft mc, int mouseX, int mouseY) + { + if (this.visible) + { + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.drawLabelBackground(mc, mouseX, mouseY); + int i = this.y + this.height / 2 + this.border / 2; + int j = i - this.labels.size() * 10 / 2; + + for (int k = 0; k < this.labels.size(); ++k) + { + if (this.centered) + { + this.drawCenteredString(this.fontRenderer, this.labels.get(k), this.x + this.width / 2, j + k * 10, this.textColor); + } + else + { + this.drawString(this.fontRenderer, this.labels.get(k), this.x, j + k * 10, this.textColor); + } + } + } + } + + protected void drawLabelBackground(Minecraft mcIn, int p_146160_2_, int p_146160_3_) + { + if (this.labelBgEnabled) + { + int i = this.width + this.border * 2; + int j = this.height + this.border * 2; + int k = this.x - this.border; + int l = this.y - this.border; + drawRect(k, l, k + i, l + j, this.backColor); + this.drawHorizontalLine(k, k + i, l, this.ulColor); + this.drawHorizontalLine(k, k + i, l + j, this.brColor); + this.drawVerticalLine(k, l, l + j, this.ulColor); + this.drawVerticalLine(k + i, l, l + j, this.brColor); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLanguage.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLanguage.java new file mode 100644 index 0000000..ab01659 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLanguage.java @@ -0,0 +1,171 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.Map; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.Language; +import net.minecraft.client.resources.LanguageManager; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiLanguage extends GuiScreen +{ + /** The parent Gui screen */ + protected GuiScreen parentScreen; + /** The List GuiSlot object reference. */ + private GuiLanguage.List list; + /** Reference to the GameSettings object. */ + private final GameSettings game_settings_3; + /** Reference to the LanguageManager object. */ + private final LanguageManager languageManager; + /** A button which allows the user to determine if the Unicode font should be forced. */ + private GuiOptionButton forceUnicodeFontBtn; + /** The button to confirm the current settings. */ + private GuiOptionButton confirmSettingsBtn; + + public GuiLanguage(GuiScreen screen, GameSettings gameSettingsObj, LanguageManager manager) + { + this.parentScreen = screen; + this.game_settings_3 = gameSettingsObj; + this.languageManager = manager; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.forceUnicodeFontBtn = (GuiOptionButton)this.addButton(new GuiOptionButton(100, this.width / 2 - 155, this.height - 38, GameSettings.Options.FORCE_UNICODE_FONT, this.game_settings_3.getKeyBinding(GameSettings.Options.FORCE_UNICODE_FONT))); + this.confirmSettingsBtn = (GuiOptionButton)this.addButton(new GuiOptionButton(6, this.width / 2 - 155 + 160, this.height - 38, I18n.format("gui.done"))); + this.list = new GuiLanguage.List(this.mc); + this.list.registerScrollButtons(7, 8); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.list.handleMouseInput(); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + switch (button.id) + { + case 5: + break; + case 6: + this.mc.displayGuiScreen(this.parentScreen); + break; + case 100: + + if (button instanceof GuiOptionButton) + { + this.game_settings_3.setOptionValue(((GuiOptionButton)button).getOption(), 1); + button.displayString = this.game_settings_3.getKeyBinding(GameSettings.Options.FORCE_UNICODE_FONT); + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int i = scaledresolution.getScaledWidth(); + int j = scaledresolution.getScaledHeight(); + this.setWorldAndResolution(this.mc, i, j); + } + + break; + default: + this.list.actionPerformed(button); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.list.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, I18n.format("options.language"), this.width / 2, 16, 16777215); + this.drawCenteredString(this.fontRenderer, "(" + I18n.format("options.languageWarning") + ")", this.width / 2, this.height - 56, 8421504); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @SideOnly(Side.CLIENT) + class List extends GuiSlot + { + /** A list containing the many different locale language codes. */ + private final java.util.List langCodeList = Lists.newArrayList(); + /** The map containing the Locale-Language pairs. */ + private final Map languageMap = Maps.newHashMap(); + + public List(Minecraft mcIn) + { + super(mcIn, GuiLanguage.this.width, GuiLanguage.this.height, 32, GuiLanguage.this.height - 65 + 4, 18); + + for (Language language : GuiLanguage.this.languageManager.getLanguages()) + { + this.languageMap.put(language.getLanguageCode(), language); + this.langCodeList.add(language.getLanguageCode()); + } + } + + protected int getSize() + { + return this.langCodeList.size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + Language language = this.languageMap.get(this.langCodeList.get(slotIndex)); + GuiLanguage.this.languageManager.setCurrentLanguage(language); + GuiLanguage.this.game_settings_3.language = language.getLanguageCode(); + net.minecraftforge.fml.client.FMLClientHandler.instance().refreshResources(net.minecraftforge.client.resource.VanillaResourceType.LANGUAGES); + GuiLanguage.this.fontRenderer.setUnicodeFlag(GuiLanguage.this.languageManager.isCurrentLocaleUnicode() || GuiLanguage.this.game_settings_3.forceUnicodeFont); + GuiLanguage.this.fontRenderer.setBidiFlag(GuiLanguage.this.languageManager.isCurrentLanguageBidirectional()); + GuiLanguage.this.confirmSettingsBtn.displayString = I18n.format("gui.done"); + GuiLanguage.this.forceUnicodeFontBtn.displayString = GuiLanguage.this.game_settings_3.getKeyBinding(GameSettings.Options.FORCE_UNICODE_FONT); + GuiLanguage.this.game_settings_3.saveOptions(); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return ((String)this.langCodeList.get(slotIndex)).equals(GuiLanguage.this.languageManager.getCurrentLanguage().getLanguageCode()); + } + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.getSize() * 18; + } + + protected void drawBackground() + { + GuiLanguage.this.drawDefaultBackground(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + GuiLanguage.this.fontRenderer.setBidiFlag(true); + GuiLanguage.this.drawCenteredString(GuiLanguage.this.fontRenderer, ((Language)this.languageMap.get(this.langCodeList.get(slotIndex))).toString(), this.width / 2, yPos + 1, 16777215); + GuiLanguage.this.fontRenderer.setBidiFlag(GuiLanguage.this.languageManager.getCurrentLanguage().isBidirectional()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListButton.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListButton.java new file mode 100644 index 0000000..b0efe7e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListButton.java @@ -0,0 +1,59 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiListButton extends GuiButton +{ + private boolean value; + /** The localization string used by this control. */ + private final String localizationStr; + /** The GuiResponder Object reference. */ + private final GuiPageButtonList.GuiResponder guiResponder; + + public GuiListButton(GuiPageButtonList.GuiResponder responder, int buttonId, int x, int y, String localizationStrIn, boolean valueIn) + { + super(buttonId, x, y, 150, 20, ""); + this.localizationStr = localizationStrIn; + this.value = valueIn; + this.displayString = this.buildDisplayString(); + this.guiResponder = responder; + } + + /** + * Builds the localized display string for this GuiListButton + */ + private String buildDisplayString() + { + return I18n.format(this.localizationStr) + ": " + I18n.format(this.value ? "gui.yes" : "gui.no"); + } + + public void setValue(boolean valueIn) + { + this.value = valueIn; + this.displayString = this.buildDisplayString(); + this.guiResponder.setEntryValue(this.id, valueIn); + } + + /** + * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent + * e). + */ + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + if (super.mousePressed(mc, mouseX, mouseY)) + { + this.value = !this.value; + this.displayString = this.buildDisplayString(); + this.guiResponder.setEntryValue(this.id, this.value); + return true; + } + else + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListExtended.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListExtended.java new file mode 100644 index 0000000..c0a07bd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListExtended.java @@ -0,0 +1,106 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class GuiListExtended extends GuiSlot +{ + public GuiListExtended(Minecraft mcIn, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn) + { + super(mcIn, widthIn, heightIn, topIn, bottomIn, slotHeightIn); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return false; + } + + protected void drawBackground() + { + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + this.getListEntry(slotIndex).drawEntry(slotIndex, xPos, yPos, this.getListWidth(), heightIn, mouseXIn, mouseYIn, this.isMouseYWithinSlotBounds(mouseYIn) && this.getSlotIndexFromScreenCoords(mouseXIn, mouseYIn) == slotIndex, partialTicks); + } + + protected void updateItemPos(int entryID, int insideLeft, int yPos, float partialTicks) + { + this.getListEntry(entryID).updatePosition(entryID, insideLeft, yPos, partialTicks); + } + + public boolean mouseClicked(int mouseX, int mouseY, int mouseEvent) + { + if (this.isMouseYWithinSlotBounds(mouseY)) + { + int i = this.getSlotIndexFromScreenCoords(mouseX, mouseY); + + if (i >= 0) + { + int j = this.left + this.width / 2 - this.getListWidth() / 2 + 2; + int k = this.top + 4 - this.getAmountScrolled() + i * this.slotHeight + this.headerPadding; + int l = mouseX - j; + int i1 = mouseY - k; + + if (this.getListEntry(i).mousePressed(i, mouseX, mouseY, mouseEvent, l, i1)) + { + this.setEnabled(false); + return true; + } + } + } + + return false; + } + + public boolean mouseReleased(int x, int y, int mouseEvent) + { + for (int i = 0; i < this.getSize(); ++i) + { + int j = this.left + this.width / 2 - this.getListWidth() / 2 + 2; + int k = this.top + 4 - this.getAmountScrolled() + i * this.slotHeight + this.headerPadding; + int l = x - j; + int i1 = y - k; + this.getListEntry(i).mouseReleased(i, x, y, mouseEvent, l, i1); + } + + this.setEnabled(true); + return false; + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public abstract GuiListExtended.IGuiListEntry getListEntry(int index); + + @SideOnly(Side.CLIENT) + public interface IGuiListEntry + { + void updatePosition(int slotIndex, int x, int y, float partialTicks); + + void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks); + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY); + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListWorldSelection.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListWorldSelection.java new file mode 100644 index 0000000..2c41909 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListWorldSelection.java @@ -0,0 +1,107 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.AnvilConverterException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.WorldSummary; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiListWorldSelection extends GuiListExtended +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final GuiWorldSelection worldSelection; + private final List entries = Lists.newArrayList(); + /** Index to the currently selected world */ + private int selectedIdx = -1; + + public GuiListWorldSelection(GuiWorldSelection p_i46590_1_, Minecraft clientIn, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn) + { + super(clientIn, widthIn, heightIn, topIn, bottomIn, slotHeightIn); + this.worldSelection = p_i46590_1_; + this.refreshList(); + } + + public void refreshList() + { + ISaveFormat isaveformat = this.mc.getSaveLoader(); + List list; + + try + { + list = isaveformat.getSaveList(); + } + catch (AnvilConverterException anvilconverterexception) + { + LOGGER.error("Couldn't load level list", (Throwable)anvilconverterexception); + this.mc.displayGuiScreen(new GuiErrorScreen(I18n.format("selectWorld.unable_to_load"), anvilconverterexception.getMessage())); + return; + } + + Collections.sort(list); + + for (WorldSummary worldsummary : list) + { + this.entries.add(new GuiListWorldSelectionEntry(this, worldsummary, this.mc.getSaveLoader())); + } + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public GuiListWorldSelectionEntry getListEntry(int index) + { + return this.entries.get(index); + } + + protected int getSize() + { + return this.entries.size(); + } + + protected int getScrollBarX() + { + return super.getScrollBarX() + 20; + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return super.getListWidth() + 50; + } + + public void selectWorld(int idx) + { + this.selectedIdx = idx; + this.worldSelection.selectWorld(this.getSelectedWorld()); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return slotIndex == this.selectedIdx; + } + + @Nullable + public GuiListWorldSelectionEntry getSelectedWorld() + { + return this.selectedIdx >= 0 && this.selectedIdx < this.getSize() ? this.getListEntry(this.selectedIdx) : null; + } + + public GuiWorldSelection getGuiWorldSelection() + { + return this.worldSelection; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListWorldSelectionEntry.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListWorldSelectionEntry.java new file mode 100644 index 0000000..775ebae --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiListWorldSelectionEntry.java @@ -0,0 +1,304 @@ +package net.minecraft.client.gui; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.resources.I18n; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.ISaveHandler; +import net.minecraft.world.storage.WorldInfo; +import net.minecraft.world.storage.WorldSummary; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiListWorldSelectionEntry implements GuiListExtended.IGuiListEntry +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final DateFormat DATE_FORMAT = new SimpleDateFormat(); + private static final ResourceLocation ICON_MISSING = new ResourceLocation("textures/misc/unknown_server.png"); + private static final ResourceLocation ICON_OVERLAY_LOCATION = new ResourceLocation("textures/gui/world_selection.png"); + private final Minecraft client; + private final GuiWorldSelection worldSelScreen; + private final WorldSummary worldSummary; + private final ResourceLocation iconLocation; + private final GuiListWorldSelection containingListSel; + private File iconFile; + private DynamicTexture icon; + private long lastClickTime; + + public GuiListWorldSelectionEntry(GuiListWorldSelection listWorldSelIn, WorldSummary worldSummaryIn, ISaveFormat saveFormat) + { + this.containingListSel = listWorldSelIn; + this.worldSelScreen = listWorldSelIn.getGuiWorldSelection(); + this.worldSummary = worldSummaryIn; + this.client = Minecraft.getMinecraft(); + this.iconLocation = new ResourceLocation("worlds/" + worldSummaryIn.getFileName() + "/icon"); + this.iconFile = saveFormat.getFile(worldSummaryIn.getFileName(), "icon.png"); + + if (!this.iconFile.isFile()) + { + this.iconFile = null; + } + + this.loadServerIcon(); + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + String s = this.worldSummary.getDisplayName(); + String s1 = this.worldSummary.getFileName() + " (" + DATE_FORMAT.format(new Date(this.worldSummary.getLastTimePlayed())) + ")"; + String s2 = ""; + + if (StringUtils.isEmpty(s)) + { + s = I18n.format("selectWorld.world") + " " + (slotIndex + 1); + } + + if (this.worldSummary.requiresConversion()) + { + s2 = I18n.format("selectWorld.conversion") + " " + s2; + } + else + { + s2 = I18n.format("gameMode." + this.worldSummary.getEnumGameType().getName()); + + if (this.worldSummary.isHardcoreModeEnabled()) + { + s2 = TextFormatting.DARK_RED + I18n.format("gameMode.hardcore") + TextFormatting.RESET; + } + + if (this.worldSummary.getCheatsEnabled()) + { + s2 = s2 + ", " + I18n.format("selectWorld.cheats"); + } + + String s3 = this.worldSummary.getVersionName(); + + if (this.worldSummary.markVersionInList()) + { + if (this.worldSummary.askToOpenWorld()) + { + s2 = s2 + ", " + I18n.format("selectWorld.version") + " " + TextFormatting.RED + s3 + TextFormatting.RESET; + } + else + { + s2 = s2 + ", " + I18n.format("selectWorld.version") + " " + TextFormatting.ITALIC + s3 + TextFormatting.RESET; + } + } + else + { + s2 = s2 + ", " + I18n.format("selectWorld.version") + " " + s3; + } + } + + this.client.fontRenderer.drawString(s, x + 32 + 3, y + 1, 16777215); + this.client.fontRenderer.drawString(s1, x + 32 + 3, y + this.client.fontRenderer.FONT_HEIGHT + 3, 8421504); + this.client.fontRenderer.drawString(s2, x + 32 + 3, y + this.client.fontRenderer.FONT_HEIGHT + this.client.fontRenderer.FONT_HEIGHT + 3, 8421504); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.client.getTextureManager().bindTexture(this.icon != null ? this.iconLocation : ICON_MISSING); + GlStateManager.enableBlend(); + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, 32, 32, 32.0F, 32.0F); + GlStateManager.disableBlend(); + + if (this.client.gameSettings.touchscreen || isSelected) + { + this.client.getTextureManager().bindTexture(ICON_OVERLAY_LOCATION); + Gui.drawRect(x, y, x + 32, y + 32, -1601138544); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int j = mouseX - x; + int i = j < 32 ? 32 : 0; + + if (this.worldSummary.markVersionInList()) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 32.0F, (float)i, 32, 32, 256.0F, 256.0F); + + if (this.worldSummary.askToOpenWorld()) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 96.0F, (float)i, 32, 32, 256.0F, 256.0F); + + if (j < 32) + { + this.worldSelScreen.setVersionTooltip(TextFormatting.RED + I18n.format("selectWorld.tooltip.fromNewerVersion1") + "\n" + TextFormatting.RED + I18n.format("selectWorld.tooltip.fromNewerVersion2")); + } + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 64.0F, (float)i, 32, 32, 256.0F, 256.0F); + + if (j < 32) + { + this.worldSelScreen.setVersionTooltip(TextFormatting.GOLD + I18n.format("selectWorld.tooltip.snapshot1") + "\n" + TextFormatting.GOLD + I18n.format("selectWorld.tooltip.snapshot2")); + } + } + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, (float)i, 32, 32, 256.0F, 256.0F); + } + } + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + this.containingListSel.selectWorld(slotIndex); + + if (relativeX <= 32 && relativeX < 32) + { + this.joinWorld(); + return true; + } + else if (Minecraft.getSystemTime() - this.lastClickTime < 250L) + { + this.joinWorld(); + return true; + } + else + { + this.lastClickTime = Minecraft.getSystemTime(); + return false; + } + } + + public void joinWorld() + { + if (this.worldSummary.askToOpenWorld()) + { + this.client.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() + { + public void confirmClicked(boolean result, int id) + { + if (result) + { + GuiListWorldSelectionEntry.this.loadWorld(); + } + else + { + GuiListWorldSelectionEntry.this.client.displayGuiScreen(GuiListWorldSelectionEntry.this.worldSelScreen); + } + } + }, I18n.format("selectWorld.versionQuestion"), I18n.format("selectWorld.versionWarning", this.worldSummary.getVersionName()), I18n.format("selectWorld.versionJoinButton"), I18n.format("gui.cancel"), 0)); + } + else + { + this.loadWorld(); + } + } + + public void deleteWorld() + { + this.client.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() + { + public void confirmClicked(boolean result, int id) + { + if (result) + { + GuiListWorldSelectionEntry.this.client.displayGuiScreen(new GuiScreenWorking()); + ISaveFormat isaveformat = GuiListWorldSelectionEntry.this.client.getSaveLoader(); + isaveformat.flushCache(); + isaveformat.deleteWorldDirectory(GuiListWorldSelectionEntry.this.worldSummary.getFileName()); + GuiListWorldSelectionEntry.this.containingListSel.refreshList(); + } + + GuiListWorldSelectionEntry.this.client.displayGuiScreen(GuiListWorldSelectionEntry.this.worldSelScreen); + } + }, I18n.format("selectWorld.deleteQuestion"), "'" + this.worldSummary.getDisplayName() + "' " + I18n.format("selectWorld.deleteWarning"), I18n.format("selectWorld.deleteButton"), I18n.format("gui.cancel"), 0)); + } + + public void editWorld() + { + this.client.displayGuiScreen(new GuiWorldEdit(this.worldSelScreen, this.worldSummary.getFileName())); + } + + public void recreateWorld() + { + this.client.displayGuiScreen(new GuiScreenWorking()); + GuiCreateWorld guicreateworld = new GuiCreateWorld(this.worldSelScreen); + ISaveHandler isavehandler = this.client.getSaveLoader().getSaveLoader(this.worldSummary.getFileName(), false); + WorldInfo worldinfo = isavehandler.loadWorldInfo(); + isavehandler.flush(); + + if (worldinfo != null) + { + guicreateworld.recreateFromExistingWorld(worldinfo); + this.client.displayGuiScreen(guicreateworld); + } + } + + private void loadWorld() + { + this.client.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + + if (this.client.getSaveLoader().canLoadWorld(this.worldSummary.getFileName())) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().tryLoadExistingWorld(worldSelScreen, this.worldSummary); + } + } + + private void loadServerIcon() + { + boolean flag = this.iconFile != null && this.iconFile.isFile(); + + if (flag) + { + BufferedImage bufferedimage; + + try + { + bufferedimage = ImageIO.read(this.iconFile); + Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide"); + Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high"); + } + catch (Throwable throwable) + { + LOGGER.error("Invalid icon for world {}", this.worldSummary.getFileName(), throwable); + this.iconFile = null; + return; + } + + if (this.icon == null) + { + this.icon = new DynamicTexture(bufferedimage.getWidth(), bufferedimage.getHeight()); + this.client.getTextureManager().loadTexture(this.iconLocation, this.icon); + } + + bufferedimage.getRGB(0, 0, bufferedimage.getWidth(), bufferedimage.getHeight(), this.icon.getTextureData(), 0, bufferedimage.getWidth()); + this.icon.updateDynamicTexture(); + } + else if (!flag) + { + this.client.getTextureManager().deleteTexture(this.iconLocation); + this.icon = null; + } + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLockIconButton.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLockIconButton.java new file mode 100644 index 0000000..c72c143 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiLockIconButton.java @@ -0,0 +1,101 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiLockIconButton extends GuiButton +{ + private boolean locked; + + public GuiLockIconButton(int buttonId, int x, int y) + { + super(buttonId, x, y, 20, 20, ""); + } + + public boolean isLocked() + { + return this.locked; + } + + public void setLocked(boolean lockedIn) + { + this.locked = lockedIn; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + mc.getTextureManager().bindTexture(GuiButton.BUTTON_TEXTURES); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + GuiLockIconButton.Icon guilockiconbutton$icon; + + if (this.locked) + { + if (!this.enabled) + { + guilockiconbutton$icon = GuiLockIconButton.Icon.LOCKED_DISABLED; + } + else if (flag) + { + guilockiconbutton$icon = GuiLockIconButton.Icon.LOCKED_HOVER; + } + else + { + guilockiconbutton$icon = GuiLockIconButton.Icon.LOCKED; + } + } + else if (!this.enabled) + { + guilockiconbutton$icon = GuiLockIconButton.Icon.UNLOCKED_DISABLED; + } + else if (flag) + { + guilockiconbutton$icon = GuiLockIconButton.Icon.UNLOCKED_HOVER; + } + else + { + guilockiconbutton$icon = GuiLockIconButton.Icon.UNLOCKED; + } + + this.drawTexturedModalRect(this.x, this.y, guilockiconbutton$icon.getX(), guilockiconbutton$icon.getY(), this.width, this.height); + } + } + + @SideOnly(Side.CLIENT) + static enum Icon + { + LOCKED(0, 146), + LOCKED_HOVER(0, 166), + LOCKED_DISABLED(0, 186), + UNLOCKED(20, 146), + UNLOCKED_HOVER(20, 166), + UNLOCKED_DISABLED(20, 186); + + private final int x; + private final int y; + + private Icon(int xIn, int yIn) + { + this.x = xIn; + this.y = yIn; + } + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMainMenu.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMainMenu.java new file mode 100644 index 0000000..4a314a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMainMenu.java @@ -0,0 +1,668 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.Runnables; +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URI; +import java.nio.charset.StandardCharsets; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.realms.RealmsBridge; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.WorldServerDemo; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GLContext; +import org.lwjgl.util.glu.Project; + +@SideOnly(Side.CLIENT) +public class GuiMainMenu extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Random RANDOM = new Random(); + /** + * A random number between 0.0 and 1.0, used to determine if the title screen says Minceraft instead of Minecraft. Set during + * construction; if the value is less than .0001, then Minceraft is displayed. + */ + private final float minceraftRoll; + /** The splash message. */ + private String splashText; + private GuiButton buttonResetDemo; + /** Timer used to rotate the panorama, increases every tick. */ + private float panoramaTimer; + /** Texture allocated for the current viewport of the main menu's panorama background. */ + private DynamicTexture viewportTexture; + /** The Object object utilized as a thread lock when performing non thread-safe operations */ + private final Object threadLock = new Object(); + public static final String MORE_INFO_TEXT = "Please click " + TextFormatting.UNDERLINE + "here" + TextFormatting.RESET + " for more information."; + /** Width of openGLWarning2 */ + private int openGLWarning2Width; + /** Width of openGLWarning1 */ + private int openGLWarning1Width; + /** Left x coordinate of the OpenGL warning */ + private int openGLWarningX1; + /** Top y coordinate of the OpenGL warning */ + private int openGLWarningY1; + /** Right x coordinate of the OpenGL warning */ + private int openGLWarningX2; + /** Bottom y coordinate of the OpenGL warning */ + private int openGLWarningY2; + /** OpenGL graphics card warning. */ + private String openGLWarning1; + /** OpenGL graphics card warning. */ + private String openGLWarning2; + /** Link to the Mojang Support about minimum requirements */ + private String openGLWarningLink; + private static final ResourceLocation SPLASH_TEXTS = new ResourceLocation("texts/splashes.txt"); + private static final ResourceLocation MINECRAFT_TITLE_TEXTURES = new ResourceLocation("textures/gui/title/minecraft.png"); + private static final ResourceLocation field_194400_H = new ResourceLocation("textures/gui/title/edition.png"); + /** An array of all the paths to the panorama pictures. */ + private static final ResourceLocation[] TITLE_PANORAMA_PATHS = new ResourceLocation[] {new ResourceLocation("textures/gui/title/background/panorama_0.png"), new ResourceLocation("textures/gui/title/background/panorama_1.png"), new ResourceLocation("textures/gui/title/background/panorama_2.png"), new ResourceLocation("textures/gui/title/background/panorama_3.png"), new ResourceLocation("textures/gui/title/background/panorama_4.png"), new ResourceLocation("textures/gui/title/background/panorama_5.png")}; + private ResourceLocation backgroundTexture; + /** Minecraft Realms button. */ + private GuiButton realmsButton; + /** Has the check for a realms notification screen been performed? */ + private boolean hasCheckedForRealmsNotification; + /** + * A screen generated by realms for notifications; drawn in adition to the main menu (buttons and such from both are + * drawn at the same time). May be null. + */ + private GuiScreen realmsNotification; + private int widthCopyright; + private int widthCopyrightRest; + private GuiButton modButton; + private net.minecraftforge.client.gui.NotificationModUpdateScreen modUpdateNotification; + + public GuiMainMenu() + { + this.openGLWarning2 = MORE_INFO_TEXT; + this.splashText = "missingno"; + IResource iresource = null; + + try + { + List list = Lists.newArrayList(); + iresource = Minecraft.getMinecraft().getResourceManager().getResource(SPLASH_TEXTS); + BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(iresource.getInputStream(), StandardCharsets.UTF_8)); + String s; + + while ((s = bufferedreader.readLine()) != null) + { + s = s.trim(); + + if (!s.isEmpty()) + { + list.add(s); + } + } + + if (!list.isEmpty()) + { + while (true) + { + this.splashText = list.get(RANDOM.nextInt(list.size())); + + if (this.splashText.hashCode() != 125780783) + { + break; + } + } + } + } + catch (IOException var8) + { + ; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + this.minceraftRoll = RANDOM.nextFloat(); + this.openGLWarning1 = ""; + + if (!GLContext.getCapabilities().OpenGL20 && !OpenGlHelper.areShadersSupported()) + { + this.openGLWarning1 = I18n.format("title.oldgl1"); + this.openGLWarning2 = I18n.format("title.oldgl2"); + this.openGLWarningLink = "https://help.mojang.com/customer/portal/articles/325948?ref=game"; + } + } + + /** + * Is there currently a realms notification screen, and are realms notifications enabled? + */ + private boolean areRealmsNotificationsEnabled() + { + return Minecraft.getMinecraft().gameSettings.getOptionOrdinalValue(GameSettings.Options.REALMS_NOTIFICATIONS) && this.realmsNotification != null; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + if (this.areRealmsNotificationsEnabled()) + { + this.realmsNotification.updateScreen(); + } + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return false; + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.viewportTexture = new DynamicTexture(256, 256); + this.backgroundTexture = this.mc.getTextureManager().getDynamicTextureLocation("background", this.viewportTexture); + this.widthCopyright = this.fontRenderer.getStringWidth("Copyright Mojang AB. Do not distribute!"); + this.widthCopyrightRest = this.width - this.widthCopyright - 2; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + + if (calendar.get(2) + 1 == 12 && calendar.get(5) == 24) + { + this.splashText = "Merry X-mas!"; + } + else if (calendar.get(2) + 1 == 1 && calendar.get(5) == 1) + { + this.splashText = "Happy new year!"; + } + else if (calendar.get(2) + 1 == 10 && calendar.get(5) == 31) + { + this.splashText = "OOoooOOOoooo! Spooky!"; + } + + int i = 24; + int j = this.height / 4 + 48; + + if (this.mc.isDemo()) + { + this.addDemoButtons(j, 24); + } + else + { + this.addSingleplayerMultiplayerButtons(j, 24); + } + + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, j + 72 + 12, 98, 20, I18n.format("menu.options"))); + this.buttonList.add(new GuiButton(4, this.width / 2 + 2, j + 72 + 12, 98, 20, I18n.format("menu.quit"))); + this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, j + 72 + 12)); + + synchronized (this.threadLock) + { + this.openGLWarning1Width = this.fontRenderer.getStringWidth(this.openGLWarning1); + this.openGLWarning2Width = this.fontRenderer.getStringWidth(this.openGLWarning2); + int k = Math.max(this.openGLWarning1Width, this.openGLWarning2Width); + this.openGLWarningX1 = (this.width - k) / 2; + this.openGLWarningY1 = (this.buttonList.get(0)).y - 24; + this.openGLWarningX2 = this.openGLWarningX1 + k; + this.openGLWarningY2 = this.openGLWarningY1 + 24; + } + + this.mc.setConnectedToRealms(false); + + if (Minecraft.getMinecraft().gameSettings.getOptionOrdinalValue(GameSettings.Options.REALMS_NOTIFICATIONS) && !this.hasCheckedForRealmsNotification) + { + RealmsBridge realmsbridge = new RealmsBridge(); + this.realmsNotification = realmsbridge.getNotificationScreen(this); + this.hasCheckedForRealmsNotification = true; + } + + if (this.areRealmsNotificationsEnabled()) + { + this.realmsNotification.setGuiSize(this.width, this.height); + this.realmsNotification.initGui(); + } + modUpdateNotification = net.minecraftforge.client.gui.NotificationModUpdateScreen.init(this, modButton); + } + + /** + * Adds Singleplayer and Multiplayer buttons on Main Menu for players who have bought the game. + */ + private void addSingleplayerMultiplayerButtons(int p_73969_1_, int p_73969_2_) + { + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, p_73969_1_, I18n.format("menu.singleplayer"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 1, I18n.format("menu.multiplayer"))); + this.realmsButton = this.addButton(new GuiButton(14, this.width / 2 + 2, p_73969_1_ + p_73969_2_ * 2, 98, 20, I18n.format("menu.online").replace("Minecraft", "").trim())); + this.buttonList.add(modButton = new GuiButton(6, this.width / 2 - 100, p_73969_1_ + p_73969_2_ * 2, 98, 20, I18n.format("fml.menu.mods"))); + } + + /** + * Adds Demo buttons on Main Menu for players who are playing Demo. + */ + private void addDemoButtons(int p_73972_1_, int p_73972_2_) + { + this.buttonList.add(new GuiButton(11, this.width / 2 - 100, p_73972_1_, I18n.format("menu.playdemo"))); + this.buttonResetDemo = this.addButton(new GuiButton(12, this.width / 2 - 100, p_73972_1_ + p_73972_2_ * 1, I18n.format("menu.resetdemo"))); + ISaveFormat isaveformat = this.mc.getSaveLoader(); + WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World"); + + if (worldinfo == null) + { + this.buttonResetDemo.enabled = false; + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 0) + { + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + } + + if (button.id == 5) + { + this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings, this.mc.getLanguageManager())); + } + + if (button.id == 1) + { + this.mc.displayGuiScreen(new GuiWorldSelection(this)); + } + + if (button.id == 2) + { + this.mc.displayGuiScreen(new GuiMultiplayer(this)); + } + + if (button.id == 14 && this.realmsButton.visible) + { + this.switchToRealms(); + } + + if (button.id == 4) + { + this.mc.shutdown(); + } + + if (button.id == 6) + { + this.mc.displayGuiScreen(new net.minecraftforge.fml.client.GuiModList(this)); + } + + if (button.id == 11) + { + this.mc.launchIntegratedServer("Demo_World", "Demo_World", WorldServerDemo.DEMO_WORLD_SETTINGS); + } + + if (button.id == 12) + { + ISaveFormat isaveformat = this.mc.getSaveLoader(); + WorldInfo worldinfo = isaveformat.getWorldInfo("Demo_World"); + + if (worldinfo != null) + { + this.mc.displayGuiScreen(new GuiYesNo(this, I18n.format("selectWorld.deleteQuestion"), "'" + worldinfo.getWorldName() + "' " + I18n.format("selectWorld.deleteWarning"), I18n.format("selectWorld.deleteButton"), I18n.format("gui.cancel"), 12)); + } + } + } + + private void switchToRealms() + { + RealmsBridge realmsbridge = new RealmsBridge(); + realmsbridge.switchToRealms(this); + } + + public void confirmClicked(boolean result, int id) + { + if (result && id == 12) + { + ISaveFormat isaveformat = this.mc.getSaveLoader(); + isaveformat.flushCache(); + isaveformat.deleteWorldDirectory("Demo_World"); + this.mc.displayGuiScreen(this); + } + else if (id == 12) + { + this.mc.displayGuiScreen(this); + } + else if (id == 13) + { + if (result) + { + try + { + Class oclass = Class.forName("java.awt.Desktop"); + Object object = oclass.getMethod("getDesktop").invoke((Object)null); + oclass.getMethod("browse", URI.class).invoke(object, new URI(this.openGLWarningLink)); + } + catch (Throwable throwable) + { + LOGGER.error("Couldn't open link", throwable); + } + } + + this.mc.displayGuiScreen(this); + } + } + + /** + * Draws the main menu panorama + */ + private void drawPanorama(int mouseX, int mouseY, float partialTicks) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.matrixMode(5889); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + Project.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); + GlStateManager.matrixMode(5888); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.disableCull(); + GlStateManager.depthMask(false); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + int i = 8; + + for (int j = 0; j < 64; ++j) + { + GlStateManager.pushMatrix(); + float f = ((float)(j % 8) / 8.0F - 0.5F) / 64.0F; + float f1 = ((float)(j / 8) / 8.0F - 0.5F) / 64.0F; + float f2 = 0.0F; + GlStateManager.translate(f, f1, 0.0F); + GlStateManager.rotate(MathHelper.sin(this.panoramaTimer / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-this.panoramaTimer * 0.1F, 0.0F, 1.0F, 0.0F); + + for (int k = 0; k < 6; ++k) + { + GlStateManager.pushMatrix(); + + if (k == 1) + { + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + } + + if (k == 2) + { + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + } + + if (k == 3) + { + GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); + } + + if (k == 4) + { + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + } + + if (k == 5) + { + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + } + + this.mc.getTextureManager().bindTexture(TITLE_PANORAMA_PATHS[k]); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + int l = 255 / (j + 1); + float f3 = 0.0F; + bufferbuilder.pos(-1.0D, -1.0D, 1.0D).tex(0.0D, 0.0D).color(255, 255, 255, l).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, 1.0D).tex(1.0D, 0.0D).color(255, 255, 255, l).endVertex(); + bufferbuilder.pos(1.0D, 1.0D, 1.0D).tex(1.0D, 1.0D).color(255, 255, 255, l).endVertex(); + bufferbuilder.pos(-1.0D, 1.0D, 1.0D).tex(0.0D, 1.0D).color(255, 255, 255, l).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + } + + GlStateManager.popMatrix(); + GlStateManager.colorMask(true, true, true, false); + } + + bufferbuilder.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.colorMask(true, true, true, true); + GlStateManager.matrixMode(5889); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + GlStateManager.popMatrix(); + GlStateManager.depthMask(true); + GlStateManager.enableCull(); + GlStateManager.enableDepth(); + } + + /** + * Rotate and blurs the skybox view in the main menu + */ + private void rotateAndBlurSkybox() + { + this.mc.getTextureManager().bindTexture(this.backgroundTexture); + GlStateManager.glTexParameteri(3553, 10241, 9729); + GlStateManager.glTexParameteri(3553, 10240, 9729); + GlStateManager.glCopyTexSubImage2D(3553, 0, 0, 0, 0, 0, 256, 256); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.colorMask(true, true, true, false); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + GlStateManager.disableAlpha(); + int i = 3; + + for (int j = 0; j < 3; ++j) + { + float f = 1.0F / (float)(j + 1); + int k = this.width; + int l = this.height; + float f1 = (float)(j - 1) / 256.0F; + bufferbuilder.pos((double)k, (double)l, (double)this.zLevel).tex((double)(0.0F + f1), 1.0D).color(1.0F, 1.0F, 1.0F, f).endVertex(); + bufferbuilder.pos((double)k, 0.0D, (double)this.zLevel).tex((double)(1.0F + f1), 1.0D).color(1.0F, 1.0F, 1.0F, f).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)this.zLevel).tex((double)(1.0F + f1), 0.0D).color(1.0F, 1.0F, 1.0F, f).endVertex(); + bufferbuilder.pos(0.0D, (double)l, (double)this.zLevel).tex((double)(0.0F + f1), 0.0D).color(1.0F, 1.0F, 1.0F, f).endVertex(); + } + + tessellator.draw(); + GlStateManager.enableAlpha(); + GlStateManager.colorMask(true, true, true, true); + } + + /** + * Renders the skybox in the main menu + */ + private void renderSkybox(int mouseX, int mouseY, float partialTicks) + { + this.mc.getFramebuffer().unbindFramebuffer(); + GlStateManager.viewport(0, 0, 256, 256); + this.drawPanorama(mouseX, mouseY, partialTicks); + this.rotateAndBlurSkybox(); + this.rotateAndBlurSkybox(); + this.rotateAndBlurSkybox(); + this.rotateAndBlurSkybox(); + this.rotateAndBlurSkybox(); + this.rotateAndBlurSkybox(); + this.rotateAndBlurSkybox(); + this.mc.getFramebuffer().bindFramebuffer(true); + GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + float f = 120.0F / (float)(this.width > this.height ? this.width : this.height); + float f1 = (float)this.height * f / 256.0F; + float f2 = (float)this.width * f / 256.0F; + int i = this.width; + int j = this.height; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)j, (double)this.zLevel).tex((double)(0.5F - f1), (double)(0.5F + f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)i, (double)j, (double)this.zLevel).tex((double)(0.5F - f1), (double)(0.5F - f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)i, 0.0D, (double)this.zLevel).tex((double)(0.5F + f1), (double)(0.5F - f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)this.zLevel).tex((double)(0.5F + f1), (double)(0.5F + f2)).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + tessellator.draw(); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.panoramaTimer += partialTicks; + GlStateManager.disableAlpha(); + this.renderSkybox(mouseX, mouseY, partialTicks); + GlStateManager.enableAlpha(); + int i = 274; + int j = this.width / 2 - 137; + int k = 30; + this.drawGradientRect(0, 0, this.width, this.height, -2130706433, 16777215); + this.drawGradientRect(0, 0, this.width, this.height, 0, Integer.MIN_VALUE); + this.mc.getTextureManager().bindTexture(MINECRAFT_TITLE_TEXTURES); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if ((double)this.minceraftRoll < 1.0E-4D) + { + this.drawTexturedModalRect(j + 0, 30, 0, 0, 99, 44); + this.drawTexturedModalRect(j + 99, 30, 129, 0, 27, 44); + this.drawTexturedModalRect(j + 99 + 26, 30, 126, 0, 3, 44); + this.drawTexturedModalRect(j + 99 + 26 + 3, 30, 99, 0, 26, 44); + this.drawTexturedModalRect(j + 155, 30, 0, 45, 155, 44); + } + else + { + this.drawTexturedModalRect(j + 0, 30, 0, 0, 155, 44); + this.drawTexturedModalRect(j + 155, 30, 0, 45, 155, 44); + } + + this.mc.getTextureManager().bindTexture(field_194400_H); + drawModalRectWithCustomSizedTexture(j + 88, 67, 0.0F, 0.0F, 98, 14, 128.0F, 16.0F); + + this.splashText = net.minecraftforge.client.ForgeHooksClient.renderMainMenu(this, this.fontRenderer, this.width, this.height, this.splashText); + + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(this.width / 2 + 90), 70.0F, 0.0F); + GlStateManager.rotate(-20.0F, 0.0F, 0.0F, 1.0F); + float f = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * ((float)Math.PI * 2F)) * 0.1F); + f = f * 100.0F / (float)(this.fontRenderer.getStringWidth(this.splashText) + 32); + GlStateManager.scale(f, f, f); + this.drawCenteredString(this.fontRenderer, this.splashText, 0, -8, -256); + GlStateManager.popMatrix(); + String s = "Minecraft 1.12.2"; + + if (this.mc.isDemo()) + { + s = s + " Demo"; + } + else + { + s = s + ("release".equalsIgnoreCase(this.mc.getVersionType()) ? "" : "/" + this.mc.getVersionType()); + } + + java.util.List brandings = com.google.common.collect.Lists.reverse(net.minecraftforge.fml.common.FMLCommonHandler.instance().getBrandings(true)); + for (int brdline = 0; brdline < brandings.size(); brdline++) + { + String brd = brandings.get(brdline); + if (!com.google.common.base.Strings.isNullOrEmpty(brd)) + { + this.drawString(this.fontRenderer, brd, 2, this.height - ( 10 + brdline * (this.fontRenderer.FONT_HEIGHT + 1)), 16777215); + } + } + + this.drawString(this.fontRenderer, "Copyright Mojang AB. Do not distribute!", this.widthCopyrightRest, this.height - 10, -1); + + if (mouseX > this.widthCopyrightRest && mouseX < this.widthCopyrightRest + this.widthCopyright && mouseY > this.height - 10 && mouseY < this.height && Mouse.isInsideWindow()) + { + drawRect(this.widthCopyrightRest, this.height - 1, this.widthCopyrightRest + this.widthCopyright, this.height, -1); + } + + if (this.openGLWarning1 != null && !this.openGLWarning1.isEmpty()) + { + drawRect(this.openGLWarningX1 - 2, this.openGLWarningY1 - 2, this.openGLWarningX2 + 2, this.openGLWarningY2 - 1, 1428160512); + this.drawString(this.fontRenderer, this.openGLWarning1, this.openGLWarningX1, this.openGLWarningY1, -1); + this.drawString(this.fontRenderer, this.openGLWarning2, (this.width - this.openGLWarning2Width) / 2, (this.buttonList.get(0)).y - 12, -1); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.areRealmsNotificationsEnabled()) + { + this.realmsNotification.drawScreen(mouseX, mouseY, partialTicks); + } + modUpdateNotification.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + + synchronized (this.threadLock) + { + if (!this.openGLWarning1.isEmpty() && !StringUtils.isNullOrEmpty(this.openGLWarningLink) && mouseX >= this.openGLWarningX1 && mouseX <= this.openGLWarningX2 && mouseY >= this.openGLWarningY1 && mouseY <= this.openGLWarningY2) + { + GuiConfirmOpenLink guiconfirmopenlink = new GuiConfirmOpenLink(this, this.openGLWarningLink, 13, true); + guiconfirmopenlink.disableSecurityWarning(); + this.mc.displayGuiScreen(guiconfirmopenlink); + } + } + + if (this.areRealmsNotificationsEnabled()) + { + this.realmsNotification.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (mouseX > this.widthCopyrightRest && mouseX < this.widthCopyrightRest + this.widthCopyright && mouseY > this.height - 10 && mouseY < this.height) + { + this.mc.displayGuiScreen(new GuiWinGame(false, Runnables.doNothing())); + } + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + if (this.realmsNotification != null) + { + this.realmsNotification.onGuiClosed(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMemoryErrorScreen.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMemoryErrorScreen.java new file mode 100644 index 0000000..4fae75a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMemoryErrorScreen.java @@ -0,0 +1,62 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiMemoryErrorScreen extends GuiScreen +{ + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + this.buttonList.add(new GuiOptionButton(0, this.width / 2 - 155, this.height / 4 + 120 + 12, I18n.format("gui.toTitle"))); + this.buttonList.add(new GuiOptionButton(1, this.width / 2 - 155 + 160, this.height / 4 + 120 + 12, I18n.format("menu.quit"))); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 0) + { + this.mc.displayGuiScreen(new GuiMainMenu()); + } + else if (button.id == 1) + { + this.mc.shutdown(); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, "Out of memory!", this.width / 2, this.height / 4 - 60 + 20, 16777215); + this.drawString(this.fontRenderer, "Minecraft has run out of memory.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 0, 10526880); + this.drawString(this.fontRenderer, "This could be caused by a bug in the game or by the", this.width / 2 - 140, this.height / 4 - 60 + 60 + 18, 10526880); + this.drawString(this.fontRenderer, "Java Virtual Machine not being allocated enough", this.width / 2 - 140, this.height / 4 - 60 + 60 + 27, 10526880); + this.drawString(this.fontRenderer, "memory.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 36, 10526880); + this.drawString(this.fontRenderer, "To prevent level corruption, the current game has quit.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 54, 10526880); + this.drawString(this.fontRenderer, "We've tried to free up enough memory to let you go back to", this.width / 2 - 140, this.height / 4 - 60 + 60 + 63, 10526880); + this.drawString(this.fontRenderer, "the main menu and back to playing, but this may not have worked.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 72, 10526880); + this.drawString(this.fontRenderer, "Please restart the game if you see this message again.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 81, 10526880); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMerchant.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMerchant.java new file mode 100644 index 0000000..27ecca6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMerchant.java @@ -0,0 +1,276 @@ +package net.minecraft.client.gui; + +import io.netty.buffer.Unpooled; +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerMerchant; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiMerchant extends GuiContainer +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The GUI texture for the villager merchant GUI. */ + private static final ResourceLocation MERCHANT_GUI_TEXTURE = new ResourceLocation("textures/gui/container/villager.png"); + /** The current IMerchant instance in use for this specific merchant. */ + private final IMerchant merchant; + /** The button which proceeds to the next available merchant recipe. */ + private GuiMerchant.MerchantButton nextButton; + /** Returns to the previous Merchant recipe if one is applicable. */ + private GuiMerchant.MerchantButton previousButton; + /** The integer value corresponding to the currently selected merchant recipe. */ + private int selectedMerchantRecipe; + /** The chat component utilized by this GuiMerchant instance. */ + private final ITextComponent chatComponent; + + public GuiMerchant(InventoryPlayer p_i45500_1_, IMerchant p_i45500_2_, World worldIn) + { + super(new ContainerMerchant(p_i45500_1_, p_i45500_2_, worldIn)); + this.merchant = p_i45500_2_; + this.chatComponent = p_i45500_2_.getDisplayName(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.nextButton = (GuiMerchant.MerchantButton)this.addButton(new GuiMerchant.MerchantButton(1, i + 120 + 27, j + 24 - 1, true)); + this.previousButton = (GuiMerchant.MerchantButton)this.addButton(new GuiMerchant.MerchantButton(2, i + 36 - 19, j + 24 - 1, false)); + this.nextButton.enabled = false; + this.previousButton.enabled = false; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + String s = this.chatComponent.getUnformattedText(); + this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752); + this.fontRenderer.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.mc.player); + + if (merchantrecipelist != null) + { + this.nextButton.enabled = this.selectedMerchantRecipe < merchantrecipelist.size() - 1; + this.previousButton.enabled = this.selectedMerchantRecipe > 0; + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + boolean flag = false; + + if (button == this.nextButton) + { + ++this.selectedMerchantRecipe; + MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.mc.player); + + if (merchantrecipelist != null && this.selectedMerchantRecipe >= merchantrecipelist.size()) + { + this.selectedMerchantRecipe = merchantrecipelist.size() - 1; + } + + flag = true; + } + else if (button == this.previousButton) + { + --this.selectedMerchantRecipe; + + if (this.selectedMerchantRecipe < 0) + { + this.selectedMerchantRecipe = 0; + } + + flag = true; + } + + if (flag) + { + ((ContainerMerchant)this.inventorySlots).setCurrentRecipeIndex(this.selectedMerchantRecipe); + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeInt(this.selectedMerchantRecipe); + this.mc.getConnection().sendPacket(new CPacketCustomPayload("MC|TrSel", packetbuffer)); + } + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(MERCHANT_GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.mc.player); + + if (merchantrecipelist != null && !merchantrecipelist.isEmpty()) + { + int k = this.selectedMerchantRecipe; + + if (k < 0 || k >= merchantrecipelist.size()) + { + return; + } + + MerchantRecipe merchantrecipe = (MerchantRecipe)merchantrecipelist.get(k); + + if (merchantrecipe.isRecipeDisabled()) + { + this.mc.getTextureManager().bindTexture(MERCHANT_GUI_TEXTURE); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + this.drawTexturedModalRect(this.guiLeft + 83, this.guiTop + 21, 212, 0, 28, 21); + this.drawTexturedModalRect(this.guiLeft + 83, this.guiTop + 51, 212, 0, 28, 21); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.mc.player); + + if (merchantrecipelist != null && !merchantrecipelist.isEmpty()) + { + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + int k = this.selectedMerchantRecipe; + MerchantRecipe merchantrecipe = (MerchantRecipe)merchantrecipelist.get(k); + ItemStack itemstack = merchantrecipe.getItemToBuy(); + ItemStack itemstack1 = merchantrecipe.getSecondItemToBuy(); + ItemStack itemstack2 = merchantrecipe.getItemToSell(); + GlStateManager.pushMatrix(); + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.disableLighting(); + GlStateManager.enableRescaleNormal(); + GlStateManager.enableColorMaterial(); + GlStateManager.enableLighting(); + this.itemRender.zLevel = 100.0F; + this.itemRender.renderItemAndEffectIntoGUI(itemstack, i + 36, j + 24); + this.itemRender.renderItemOverlays(this.fontRenderer, itemstack, i + 36, j + 24); + + if (!itemstack1.isEmpty()) + { + this.itemRender.renderItemAndEffectIntoGUI(itemstack1, i + 62, j + 24); + this.itemRender.renderItemOverlays(this.fontRenderer, itemstack1, i + 62, j + 24); + } + + this.itemRender.renderItemAndEffectIntoGUI(itemstack2, i + 120, j + 24); + this.itemRender.renderItemOverlays(this.fontRenderer, itemstack2, i + 120, j + 24); + this.itemRender.zLevel = 0.0F; + GlStateManager.disableLighting(); + + if (this.isPointInRegion(36, 24, 16, 16, mouseX, mouseY) && !itemstack.isEmpty()) + { + this.renderToolTip(itemstack, mouseX, mouseY); + } + else if (!itemstack1.isEmpty() && this.isPointInRegion(62, 24, 16, 16, mouseX, mouseY) && !itemstack1.isEmpty()) + { + this.renderToolTip(itemstack1, mouseX, mouseY); + } + else if (!itemstack2.isEmpty() && this.isPointInRegion(120, 24, 16, 16, mouseX, mouseY) && !itemstack2.isEmpty()) + { + this.renderToolTip(itemstack2, mouseX, mouseY); + } + else if (merchantrecipe.isRecipeDisabled() && (this.isPointInRegion(83, 21, 28, 21, mouseX, mouseY) || this.isPointInRegion(83, 51, 28, 21, mouseX, mouseY))) + { + this.drawHoveringText(I18n.format("merchant.deprecated"), mouseX, mouseY); + } + + GlStateManager.popMatrix(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + RenderHelper.enableStandardItemLighting(); + } + + this.renderHoveredToolTip(mouseX, mouseY); + } + + public IMerchant getMerchant() + { + return this.merchant; + } + + @SideOnly(Side.CLIENT) + static class MerchantButton extends GuiButton + { + private final boolean forward; + + public MerchantButton(int buttonID, int x, int y, boolean p_i1095_4_) + { + super(buttonID, x, y, 12, 19, ""); + this.forward = p_i1095_4_; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + mc.getTextureManager().bindTexture(GuiMerchant.MERCHANT_GUI_TEXTURE); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + int i = 0; + int j = 176; + + if (!this.enabled) + { + j += this.width * 2; + } + else if (flag) + { + j += this.width; + } + + if (!this.forward) + { + i += this.height; + } + + this.drawTexturedModalRect(this.x, this.y, j, i, this.width, this.height); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMultiplayer.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMultiplayer.java new file mode 100644 index 0000000..c7b8658 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiMultiplayer.java @@ -0,0 +1,494 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import net.minecraft.client.multiplayer.GuiConnecting; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.multiplayer.ServerList; +import net.minecraft.client.network.LanServerDetector; +import net.minecraft.client.network.LanServerInfo; +import net.minecraft.client.network.ServerPinger; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiMultiplayer extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final ServerPinger oldServerPinger = new ServerPinger(); + private final GuiScreen parentScreen; + private ServerSelectionList serverListSelector; + private ServerList savedServerList; + private GuiButton btnEditServer; + private GuiButton btnSelectServer; + private GuiButton btnDeleteServer; + private boolean deletingServer; + private boolean addingServer; + private boolean editingServer; + private boolean directConnect; + /** The text to be displayed when the player's cursor hovers over a server listing. */ + private String hoveringText; + private ServerData selectedServer; + private LanServerDetector.LanServerList lanServerList; + private LanServerDetector.ThreadLanServerFind lanServerDetector; + private boolean initialized; + + public GuiMultiplayer(GuiScreen parentScreen) + { + this.parentScreen = parentScreen; + net.minecraftforge.fml.client.FMLClientHandler.instance().setupServerList(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + + if (this.initialized) + { + this.serverListSelector.setDimensions(this.width, this.height, 32, this.height - 64); + } + else + { + this.initialized = true; + this.savedServerList = new ServerList(this.mc); + this.savedServerList.loadServerList(); + this.lanServerList = new LanServerDetector.LanServerList(); + + try + { + this.lanServerDetector = new LanServerDetector.ThreadLanServerFind(this.lanServerList); + this.lanServerDetector.start(); + } + catch (Exception exception) + { + LOGGER.warn("Unable to start LAN server detection: {}", (Object)exception.getMessage()); + } + + this.serverListSelector = new ServerSelectionList(this, this.mc, this.width, this.height, 32, this.height - 64, 36); + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + + this.createButtons(); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.serverListSelector.handleMouseInput(); + } + + public void createButtons() + { + this.btnEditServer = this.addButton(new GuiButton(7, this.width / 2 - 154, this.height - 28, 70, 20, I18n.format("selectServer.edit"))); + this.btnDeleteServer = this.addButton(new GuiButton(2, this.width / 2 - 74, this.height - 28, 70, 20, I18n.format("selectServer.delete"))); + this.btnSelectServer = this.addButton(new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, I18n.format("selectServer.select"))); + this.buttonList.add(new GuiButton(4, this.width / 2 - 50, this.height - 52, 100, 20, I18n.format("selectServer.direct"))); + this.buttonList.add(new GuiButton(3, this.width / 2 + 4 + 50, this.height - 52, 100, 20, I18n.format("selectServer.add"))); + this.buttonList.add(new GuiButton(8, this.width / 2 + 4, this.height - 28, 70, 20, I18n.format("selectServer.refresh"))); + this.buttonList.add(new GuiButton(0, this.width / 2 + 4 + 76, this.height - 28, 75, 20, I18n.format("gui.cancel"))); + this.selectServer(this.serverListSelector.getSelected()); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + + if (this.lanServerList.getWasUpdated()) + { + List list = this.lanServerList.getLanServers(); + this.lanServerList.setWasNotUpdated(); + this.serverListSelector.updateNetworkServers(list); + } + + this.oldServerPinger.pingPendingNetworks(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + + if (this.lanServerDetector != null) + { + this.lanServerDetector.interrupt(); + this.lanServerDetector = null; + } + + this.oldServerPinger.clearPendingNetworks(); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + GuiListExtended.IGuiListEntry guilistextended$iguilistentry = this.serverListSelector.getSelected() < 0 ? null : this.serverListSelector.getListEntry(this.serverListSelector.getSelected()); + + if (button.id == 2 && guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + String s4 = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData().serverName; + + if (s4 != null) + { + this.deletingServer = true; + String s = I18n.format("selectServer.deleteQuestion"); + String s1 = "'" + s4 + "' " + I18n.format("selectServer.deleteWarning"); + String s2 = I18n.format("selectServer.deleteButton"); + String s3 = I18n.format("gui.cancel"); + GuiYesNo guiyesno = new GuiYesNo(this, s, s1, s2, s3, this.serverListSelector.getSelected()); + this.mc.displayGuiScreen(guiyesno); + } + } + else if (button.id == 1) + { + this.connectToSelected(); + } + else if (button.id == 4) + { + this.directConnect = true; + this.selectedServer = new ServerData(I18n.format("selectServer.defaultName"), "", false); + this.mc.displayGuiScreen(new GuiScreenServerList(this, this.selectedServer)); + } + else if (button.id == 3) + { + this.addingServer = true; + this.selectedServer = new ServerData(I18n.format("selectServer.defaultName"), "", false); + this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.selectedServer)); + } + else if (button.id == 7 && guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + this.editingServer = true; + ServerData serverdata = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData(); + this.selectedServer = new ServerData(serverdata.serverName, serverdata.serverIP, false); + this.selectedServer.copyFrom(serverdata); + this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.selectedServer)); + } + else if (button.id == 0) + { + this.mc.displayGuiScreen(this.parentScreen); + } + else if (button.id == 8) + { + this.refreshServerList(); + } + } + } + + private void refreshServerList() + { + this.mc.displayGuiScreen(new GuiMultiplayer(this.parentScreen)); + } + + public void confirmClicked(boolean result, int id) + { + GuiListExtended.IGuiListEntry guilistextended$iguilistentry = this.serverListSelector.getSelected() < 0 ? null : this.serverListSelector.getListEntry(this.serverListSelector.getSelected()); + + if (this.deletingServer) + { + this.deletingServer = false; + + if (result && guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + this.savedServerList.removeServerData(this.serverListSelector.getSelected()); + this.savedServerList.saveServerList(); + this.serverListSelector.setSelectedSlotIndex(-1); + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + + this.mc.displayGuiScreen(this); + } + else if (this.directConnect) + { + this.directConnect = false; + + if (result) + { + this.connectToServer(this.selectedServer); + } + else + { + this.mc.displayGuiScreen(this); + } + } + else if (this.addingServer) + { + this.addingServer = false; + + if (result) + { + this.savedServerList.addServerData(this.selectedServer); + this.savedServerList.saveServerList(); + this.serverListSelector.setSelectedSlotIndex(-1); + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + + this.mc.displayGuiScreen(this); + } + else if (this.editingServer) + { + this.editingServer = false; + + if (result && guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + ServerData serverdata = ((ServerListEntryNormal)guilistextended$iguilistentry).getServerData(); + serverdata.serverName = this.selectedServer.serverName; + serverdata.serverIP = this.selectedServer.serverIP; + serverdata.copyFrom(this.selectedServer); + this.savedServerList.saveServerList(); + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + + this.mc.displayGuiScreen(this); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + int i = this.serverListSelector.getSelected(); + GuiListExtended.IGuiListEntry guilistextended$iguilistentry = i < 0 ? null : this.serverListSelector.getListEntry(i); + + if (keyCode == 63) + { + this.refreshServerList(); + } + else + { + if (i >= 0) + { + if (keyCode == 200) + { + if (isShiftKeyDown()) + { + if (i > 0 && guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + this.savedServerList.swapServers(i, i - 1); + this.selectServer(this.serverListSelector.getSelected() - 1); + this.serverListSelector.scrollBy(-this.serverListSelector.getSlotHeight()); + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + } + else if (i > 0) + { + this.selectServer(this.serverListSelector.getSelected() - 1); + this.serverListSelector.scrollBy(-this.serverListSelector.getSlotHeight()); + + if (this.serverListSelector.getListEntry(this.serverListSelector.getSelected()) instanceof ServerListEntryLanScan) + { + if (this.serverListSelector.getSelected() > 0) + { + this.selectServer(this.serverListSelector.getSize() - 1); + this.serverListSelector.scrollBy(-this.serverListSelector.getSlotHeight()); + } + else + { + this.selectServer(-1); + } + } + } + else + { + this.selectServer(-1); + } + } + else if (keyCode == 208) + { + if (isShiftKeyDown()) + { + if (i < this.savedServerList.countServers() - 1) + { + this.savedServerList.swapServers(i, i + 1); + this.selectServer(i + 1); + this.serverListSelector.scrollBy(this.serverListSelector.getSlotHeight()); + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + } + else if (i < this.serverListSelector.getSize()) + { + this.selectServer(this.serverListSelector.getSelected() + 1); + this.serverListSelector.scrollBy(this.serverListSelector.getSlotHeight()); + + if (this.serverListSelector.getListEntry(this.serverListSelector.getSelected()) instanceof ServerListEntryLanScan) + { + if (this.serverListSelector.getSelected() < this.serverListSelector.getSize() - 1) + { + this.selectServer(this.serverListSelector.getSize() + 1); + this.serverListSelector.scrollBy(this.serverListSelector.getSlotHeight()); + } + else + { + this.selectServer(-1); + } + } + } + else + { + this.selectServer(-1); + } + } + else if (keyCode != 28 && keyCode != 156) + { + super.keyTyped(typedChar, keyCode); + } + else + { + this.actionPerformed(this.buttonList.get(2)); + } + } + else + { + super.keyTyped(typedChar, keyCode); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.hoveringText = null; + this.drawDefaultBackground(); + this.serverListSelector.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, I18n.format("multiplayer.title"), this.width / 2, 20, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.hoveringText != null) + { + this.drawHoveringText(Lists.newArrayList(Splitter.on("\n").split(this.hoveringText)), mouseX, mouseY); + } + } + + public void connectToSelected() + { + GuiListExtended.IGuiListEntry guilistextended$iguilistentry = this.serverListSelector.getSelected() < 0 ? null : this.serverListSelector.getListEntry(this.serverListSelector.getSelected()); + + if (guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + this.connectToServer(((ServerListEntryNormal)guilistextended$iguilistentry).getServerData()); + } + else if (guilistextended$iguilistentry instanceof ServerListEntryLanDetected) + { + LanServerInfo lanserverinfo = ((ServerListEntryLanDetected)guilistextended$iguilistentry).getServerData(); + this.connectToServer(new ServerData(lanserverinfo.getServerMotd(), lanserverinfo.getServerIpPort(), true)); + } + } + + private void connectToServer(ServerData server) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().connectToServer(this, server); + } + + public void selectServer(int index) + { + this.serverListSelector.setSelectedSlotIndex(index); + GuiListExtended.IGuiListEntry guilistextended$iguilistentry = index < 0 ? null : this.serverListSelector.getListEntry(index); + this.btnSelectServer.enabled = false; + this.btnEditServer.enabled = false; + this.btnDeleteServer.enabled = false; + + if (guilistextended$iguilistentry != null && !(guilistextended$iguilistentry instanceof ServerListEntryLanScan)) + { + this.btnSelectServer.enabled = true; + + if (guilistextended$iguilistentry instanceof ServerListEntryNormal) + { + this.btnEditServer.enabled = true; + this.btnDeleteServer.enabled = true; + } + } + } + + public ServerPinger getOldServerPinger() + { + return this.oldServerPinger; + } + + public void setHoveringText(String p_146793_1_) + { + this.hoveringText = p_146793_1_; + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.serverListSelector.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + super.mouseReleased(mouseX, mouseY, state); + this.serverListSelector.mouseReleased(mouseX, mouseY, state); + } + + public ServerList getServerList() + { + return this.savedServerList; + } + + public boolean canMoveUp(ServerListEntryNormal p_175392_1_, int p_175392_2_) + { + return p_175392_2_ > 0; + } + + public boolean canMoveDown(ServerListEntryNormal p_175394_1_, int p_175394_2_) + { + return p_175394_2_ < this.savedServerList.countServers() - 1; + } + + public void moveServerUp(ServerListEntryNormal p_175391_1_, int p_175391_2_, boolean p_175391_3_) + { + int i = p_175391_3_ ? 0 : p_175391_2_ - 1; + this.savedServerList.swapServers(p_175391_2_, i); + + if (this.serverListSelector.getSelected() == p_175391_2_) + { + this.selectServer(i); + } + + this.serverListSelector.updateOnlineServers(this.savedServerList); + } + + public void moveServerDown(ServerListEntryNormal p_175393_1_, int p_175393_2_, boolean p_175393_3_) + { + int i = p_175393_3_ ? this.savedServerList.countServers() - 1 : p_175393_2_ + 1; + this.savedServerList.swapServers(p_175393_2_, i); + + if (this.serverListSelector.getSelected() == p_175393_2_) + { + this.selectServer(i); + } + + this.serverListSelector.updateOnlineServers(this.savedServerList); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiNewChat.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiNewChat.java new file mode 100644 index 0000000..3c5f484 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiNewChat.java @@ -0,0 +1,386 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiNewChat extends Gui +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Minecraft mc; + /** A list of messages previously sent through the chat GUI */ + private final List sentMessages = Lists.newArrayList(); + /** Chat lines to be displayed in the chat box */ + private final List chatLines = Lists.newArrayList(); + /** List of the ChatLines currently drawn */ + private final List drawnChatLines = Lists.newArrayList(); + private int scrollPos; + private boolean isScrolled; + + public GuiNewChat(Minecraft mcIn) + { + this.mc = mcIn; + } + + public void drawChat(int updateCounter) + { + if (this.mc.gameSettings.chatVisibility != EntityPlayer.EnumChatVisibility.HIDDEN) + { + int i = this.getLineCount(); + int j = this.drawnChatLines.size(); + float f = this.mc.gameSettings.chatOpacity * 0.9F + 0.1F; + + if (j > 0) + { + boolean flag = false; + + if (this.getChatOpen()) + { + flag = true; + } + + float f1 = this.getChatScale(); + int k = MathHelper.ceil((float)this.getChatWidth() / f1); + GlStateManager.pushMatrix(); + GlStateManager.translate(2.0F, 8.0F, 0.0F); + GlStateManager.scale(f1, f1, 1.0F); + int l = 0; + + for (int i1 = 0; i1 + this.scrollPos < this.drawnChatLines.size() && i1 < i; ++i1) + { + ChatLine chatline = this.drawnChatLines.get(i1 + this.scrollPos); + + if (chatline != null) + { + int j1 = updateCounter - chatline.getUpdatedCounter(); + + if (j1 < 200 || flag) + { + double d0 = (double)j1 / 200.0D; + d0 = 1.0D - d0; + d0 = d0 * 10.0D; + d0 = MathHelper.clamp(d0, 0.0D, 1.0D); + d0 = d0 * d0; + int l1 = (int)(255.0D * d0); + + if (flag) + { + l1 = 255; + } + + l1 = (int)((float)l1 * f); + ++l; + + if (l1 > 3) + { + int i2 = 0; + int j2 = -i1 * 9; + drawRect(-2, j2 - 9, 0 + k + 4, j2, l1 / 2 << 24); + String s = chatline.getChatComponent().getFormattedText(); + GlStateManager.enableBlend(); + this.mc.fontRenderer.drawStringWithShadow(s, 0.0F, (float)(j2 - 8), 16777215 + (l1 << 24)); + GlStateManager.disableAlpha(); + GlStateManager.disableBlend(); + } + } + } + } + + if (flag) + { + int k2 = this.mc.fontRenderer.FONT_HEIGHT; + GlStateManager.translate(-3.0F, 0.0F, 0.0F); + int l2 = j * k2 + j; + int i3 = l * k2 + l; + int j3 = this.scrollPos * i3 / j; + int k1 = i3 * i3 / l2; + + if (l2 != i3) + { + int k3 = j3 > 0 ? 170 : 96; + int l3 = this.isScrolled ? 13382451 : 3355562; + drawRect(0, -j3, 2, -j3 - k1, l3 + (k3 << 24)); + drawRect(2, -j3, 1, -j3 - k1, 13421772 + (k3 << 24)); + } + } + + GlStateManager.popMatrix(); + } + } + } + + /** + * Clears the chat. + */ + public void clearChatMessages(boolean p_146231_1_) + { + this.drawnChatLines.clear(); + this.chatLines.clear(); + + if (p_146231_1_) + { + this.sentMessages.clear(); + } + } + + public void printChatMessage(ITextComponent chatComponent) + { + this.printChatMessageWithOptionalDeletion(chatComponent, 0); + } + + /** + * prints the ChatComponent to Chat. If the ID is not 0, deletes an existing Chat Line of that ID from the GUI + */ + public void printChatMessageWithOptionalDeletion(ITextComponent chatComponent, int chatLineId) + { + this.setChatLine(chatComponent, chatLineId, this.mc.ingameGUI.getUpdateCounter(), false); + LOGGER.info("[CHAT] {}", (Object)chatComponent.getUnformattedText().replaceAll("\r", "\\\\r").replaceAll("\n", "\\\\n")); + } + + private void setChatLine(ITextComponent chatComponent, int chatLineId, int updateCounter, boolean displayOnly) + { + if (chatLineId != 0) + { + this.deleteChatLine(chatLineId); + } + + int i = MathHelper.floor((float)this.getChatWidth() / this.getChatScale()); + List list = GuiUtilRenderComponents.splitText(chatComponent, i, this.mc.fontRenderer, false, false); + boolean flag = this.getChatOpen(); + + for (ITextComponent itextcomponent : list) + { + if (flag && this.scrollPos > 0) + { + this.isScrolled = true; + this.scroll(1); + } + + this.drawnChatLines.add(0, new ChatLine(updateCounter, itextcomponent, chatLineId)); + } + + while (this.drawnChatLines.size() > 100) + { + this.drawnChatLines.remove(this.drawnChatLines.size() - 1); + } + + if (!displayOnly) + { + this.chatLines.add(0, new ChatLine(updateCounter, chatComponent, chatLineId)); + + while (this.chatLines.size() > 100) + { + this.chatLines.remove(this.chatLines.size() - 1); + } + } + } + + public void refreshChat() + { + this.drawnChatLines.clear(); + this.resetScroll(); + + for (int i = this.chatLines.size() - 1; i >= 0; --i) + { + ChatLine chatline = this.chatLines.get(i); + this.setChatLine(chatline.getChatComponent(), chatline.getChatLineID(), chatline.getUpdatedCounter(), true); + } + } + + /** + * Gets the list of messages previously sent through the chat GUI + */ + public List getSentMessages() + { + return this.sentMessages; + } + + /** + * Adds this string to the list of sent messages, for recall using the up/down arrow keys + */ + public void addToSentMessages(String message) + { + if (this.sentMessages.isEmpty() || !((String)this.sentMessages.get(this.sentMessages.size() - 1)).equals(message)) + { + this.sentMessages.add(message); + } + } + + /** + * Resets the chat scroll (executed when the GUI is closed, among others) + */ + public void resetScroll() + { + this.scrollPos = 0; + this.isScrolled = false; + } + + /** + * Scrolls the chat by the given number of lines. + */ + public void scroll(int amount) + { + this.scrollPos += amount; + int i = this.drawnChatLines.size(); + + if (this.scrollPos > i - this.getLineCount()) + { + this.scrollPos = i - this.getLineCount(); + } + + if (this.scrollPos <= 0) + { + this.scrollPos = 0; + this.isScrolled = false; + } + } + + /** + * Gets the chat component under the mouse + */ + @Nullable + public ITextComponent getChatComponent(int mouseX, int mouseY) + { + if (!this.getChatOpen()) + { + return null; + } + else + { + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int i = scaledresolution.getScaleFactor(); + float f = this.getChatScale(); + int j = mouseX / i - 2; + int k = mouseY / i - 40; + j = MathHelper.floor((float)j / f); + k = MathHelper.floor((float)k / f); + + if (j >= 0 && k >= 0) + { + int l = Math.min(this.getLineCount(), this.drawnChatLines.size()); + + if (j <= MathHelper.floor((float)this.getChatWidth() / this.getChatScale()) && k < this.mc.fontRenderer.FONT_HEIGHT * l + l) + { + int i1 = k / this.mc.fontRenderer.FONT_HEIGHT + this.scrollPos; + + if (i1 >= 0 && i1 < this.drawnChatLines.size()) + { + ChatLine chatline = this.drawnChatLines.get(i1); + int j1 = 0; + + for (ITextComponent itextcomponent : chatline.getChatComponent()) + { + if (itextcomponent instanceof TextComponentString) + { + j1 += this.mc.fontRenderer.getStringWidth(GuiUtilRenderComponents.removeTextColorsIfConfigured(((TextComponentString)itextcomponent).getText(), false)); + + if (j1 > j) + { + return itextcomponent; + } + } + } + } + + return null; + } + else + { + return null; + } + } + else + { + return null; + } + } + } + + /** + * Returns true if the chat GUI is open + */ + public boolean getChatOpen() + { + return this.mc.currentScreen instanceof GuiChat; + } + + /** + * finds and deletes a Chat line by ID + */ + public void deleteChatLine(int id) + { + Iterator iterator = this.drawnChatLines.iterator(); + + while (iterator.hasNext()) + { + ChatLine chatline = iterator.next(); + + if (chatline.getChatLineID() == id) + { + iterator.remove(); + } + } + + iterator = this.chatLines.iterator(); + + while (iterator.hasNext()) + { + ChatLine chatline1 = iterator.next(); + + if (chatline1.getChatLineID() == id) + { + iterator.remove(); + break; + } + } + } + + public int getChatWidth() + { + return calculateChatboxWidth(this.mc.gameSettings.chatWidth); + } + + public int getChatHeight() + { + return calculateChatboxHeight(this.getChatOpen() ? this.mc.gameSettings.chatHeightFocused : this.mc.gameSettings.chatHeightUnfocused); + } + + /** + * Returns the chatscale from mc.gameSettings.chatScale + */ + public float getChatScale() + { + return this.mc.gameSettings.chatScale; + } + + public static int calculateChatboxWidth(float scale) + { + int i = 320; + int j = 40; + return MathHelper.floor(scale * 280.0F + 40.0F); + } + + public static int calculateChatboxHeight(float scale) + { + int i = 180; + int j = 20; + return MathHelper.floor(scale * 160.0F + 20.0F); + } + + public int getLineCount() + { + return this.getChatHeight() / 9; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionButton.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionButton.java new file mode 100644 index 0000000..f87fe07 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionButton.java @@ -0,0 +1,27 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiOptionButton extends GuiButton +{ + private final GameSettings.Options enumOptions; + + public GuiOptionButton(int p_i45011_1_, int p_i45011_2_, int p_i45011_3_, String p_i45011_4_) + { + this(p_i45011_1_, p_i45011_2_, p_i45011_3_, (GameSettings.Options)null, p_i45011_4_); + } + + public GuiOptionButton(int p_i45013_1_, int p_i45013_2_, int p_i45013_3_, GameSettings.Options p_i45013_4_, String p_i45013_5_) + { + super(p_i45013_1_, p_i45013_2_, p_i45013_3_, 150, 20, p_i45013_5_); + this.enumOptions = p_i45013_4_; + } + + public GameSettings.Options getOption() + { + return this.enumOptions; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionSlider.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionSlider.java new file mode 100644 index 0000000..098638f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionSlider.java @@ -0,0 +1,97 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiOptionSlider extends GuiButton +{ + private float sliderValue; + public boolean dragging; + private final GameSettings.Options options; + private final float minValue; + private final float maxValue; + + public GuiOptionSlider(int buttonId, int x, int y, GameSettings.Options optionIn) + { + this(buttonId, x, y, optionIn, 0.0F, 1.0F); + } + + public GuiOptionSlider(int buttonId, int x, int y, GameSettings.Options optionIn, float minValueIn, float maxValue) + { + super(buttonId, x, y, 150, 20, ""); + this.sliderValue = 1.0F; + this.options = optionIn; + this.minValue = minValueIn; + this.maxValue = maxValue; + Minecraft minecraft = Minecraft.getMinecraft(); + this.sliderValue = optionIn.normalizeValue(minecraft.gameSettings.getOptionFloatValue(optionIn)); + this.displayString = minecraft.gameSettings.getKeyBinding(optionIn); + } + + /** + * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over + * this button. + */ + protected int getHoverState(boolean mouseOver) + { + return 0; + } + + /** + * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e). + */ + protected void mouseDragged(Minecraft mc, int mouseX, int mouseY) + { + if (this.visible) + { + if (this.dragging) + { + this.sliderValue = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8); + this.sliderValue = MathHelper.clamp(this.sliderValue, 0.0F, 1.0F); + float f = this.options.denormalizeValue(this.sliderValue); + mc.gameSettings.setOptionFloatValue(this.options, f); + this.sliderValue = this.options.normalizeValue(f); + this.displayString = mc.gameSettings.getKeyBinding(this.options); + } + + mc.getTextureManager().bindTexture(BUTTON_TEXTURES); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.x + (int)(this.sliderValue * (float)(this.width - 8)), this.y, 0, 66, 4, 20); + this.drawTexturedModalRect(this.x + (int)(this.sliderValue * (float)(this.width - 8)) + 4, this.y, 196, 66, 4, 20); + } + } + + /** + * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent + * e). + */ + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + if (super.mousePressed(mc, mouseX, mouseY)) + { + this.sliderValue = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8); + this.sliderValue = MathHelper.clamp(this.sliderValue, 0.0F, 1.0F); + mc.gameSettings.setOptionFloatValue(this.options, this.options.denormalizeValue(this.sliderValue)); + this.displayString = mc.gameSettings.getKeyBinding(this.options); + this.dragging = true; + return true; + } + else + { + return false; + } + } + + /** + * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e). + */ + public void mouseReleased(int mouseX, int mouseY) + { + this.dragging = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptions.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptions.java new file mode 100644 index 0000000..832abb8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptions.java @@ -0,0 +1,216 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.EnumDifficulty; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiOptions extends GuiScreen +{ + private static final GameSettings.Options[] SCREEN_OPTIONS = new GameSettings.Options[] {GameSettings.Options.FOV}; + private final GuiScreen lastScreen; + /** Reference to the GameSettings object. */ + private final GameSettings settings; + private GuiButton difficultyButton; + private GuiLockIconButton lockButton; + protected String title = "Options"; + + public GuiOptions(GuiScreen p_i1046_1_, GameSettings p_i1046_2_) + { + this.lastScreen = p_i1046_1_; + this.settings = p_i1046_2_; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.title = I18n.format("options.title"); + int i = 0; + + for (GameSettings.Options gamesettings$options : SCREEN_OPTIONS) + { + if (gamesettings$options.isFloat()) + { + this.buttonList.add(new GuiOptionSlider(gamesettings$options.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), gamesettings$options)); + } + else + { + GuiOptionButton guioptionbutton = new GuiOptionButton(gamesettings$options.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), gamesettings$options, this.settings.getKeyBinding(gamesettings$options)); + this.buttonList.add(guioptionbutton); + } + + ++i; + } + + if (this.mc.world != null) + { + EnumDifficulty enumdifficulty = this.mc.world.getDifficulty(); + this.difficultyButton = new GuiButton(108, this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), 150, 20, this.getDifficultyText(enumdifficulty)); + this.buttonList.add(this.difficultyButton); + + if (this.mc.isSingleplayer() && !this.mc.world.getWorldInfo().isHardcoreModeEnabled()) + { + this.difficultyButton.setWidth(this.difficultyButton.getButtonWidth() - 20); + this.lockButton = new GuiLockIconButton(109, this.difficultyButton.x + this.difficultyButton.getButtonWidth(), this.difficultyButton.y); + this.buttonList.add(this.lockButton); + this.lockButton.setLocked(this.mc.world.getWorldInfo().isDifficultyLocked()); + this.lockButton.enabled = !this.lockButton.isLocked(); + this.difficultyButton.enabled = !this.lockButton.isLocked(); + } + else + { + this.difficultyButton.enabled = false; + } + } + else + { + this.buttonList.add(new GuiOptionButton(GameSettings.Options.REALMS_NOTIFICATIONS.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), GameSettings.Options.REALMS_NOTIFICATIONS, this.settings.getKeyBinding(GameSettings.Options.REALMS_NOTIFICATIONS))); + } + + this.buttonList.add(new GuiButton(110, this.width / 2 - 155, this.height / 6 + 48 - 6, 150, 20, I18n.format("options.skinCustomisation"))); + this.buttonList.add(new GuiButton(106, this.width / 2 + 5, this.height / 6 + 48 - 6, 150, 20, I18n.format("options.sounds"))); + this.buttonList.add(new GuiButton(101, this.width / 2 - 155, this.height / 6 + 72 - 6, 150, 20, I18n.format("options.video"))); + this.buttonList.add(new GuiButton(100, this.width / 2 + 5, this.height / 6 + 72 - 6, 150, 20, I18n.format("options.controls"))); + this.buttonList.add(new GuiButton(102, this.width / 2 - 155, this.height / 6 + 96 - 6, 150, 20, I18n.format("options.language"))); + this.buttonList.add(new GuiButton(103, this.width / 2 + 5, this.height / 6 + 96 - 6, 150, 20, I18n.format("options.chat.title"))); + this.buttonList.add(new GuiButton(105, this.width / 2 - 155, this.height / 6 + 120 - 6, 150, 20, I18n.format("options.resourcepack"))); + this.buttonList.add(new GuiButton(104, this.width / 2 + 5, this.height / 6 + 120 - 6, 150, 20, I18n.format("options.snooper.view"))); + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, I18n.format("gui.done"))); + } + + public String getDifficultyText(EnumDifficulty p_175355_1_) + { + ITextComponent itextcomponent = new TextComponentString(""); + itextcomponent.appendSibling(new TextComponentTranslation("options.difficulty", new Object[0])); + itextcomponent.appendText(": "); + itextcomponent.appendSibling(new TextComponentTranslation(p_175355_1_.getDifficultyResourceKey(), new Object[0])); + return itextcomponent.getFormattedText(); + } + + public void confirmClicked(boolean result, int id) + { + this.mc.displayGuiScreen(this); + + if (id == 109 && result && this.mc.world != null) + { + this.mc.world.getWorldInfo().setDifficultyLocked(true); + this.lockButton.setLocked(true); + this.lockButton.enabled = false; + this.difficultyButton.enabled = false; + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.mc.gameSettings.saveOptions(); + } + + super.keyTyped(typedChar, keyCode); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id < 100 && button instanceof GuiOptionButton) + { + GameSettings.Options gamesettings$options = ((GuiOptionButton)button).getOption(); + this.settings.setOptionValue(gamesettings$options, 1); + button.displayString = this.settings.getKeyBinding(GameSettings.Options.byOrdinal(button.id)); + } + + if (button.id == 108) + { + this.mc.world.getWorldInfo().setDifficulty(EnumDifficulty.getDifficultyEnum(this.mc.world.getDifficulty().getDifficultyId() + 1)); + this.difficultyButton.displayString = this.getDifficultyText(this.mc.world.getDifficulty()); + } + + if (button.id == 109) + { + this.mc.displayGuiScreen(new GuiYesNo(this, (new TextComponentTranslation("difficulty.lock.title", new Object[0])).getFormattedText(), (new TextComponentTranslation("difficulty.lock.question", new Object[] {new TextComponentTranslation(this.mc.world.getWorldInfo().getDifficulty().getDifficultyResourceKey(), new Object[0])})).getFormattedText(), 109)); + } + + if (button.id == 110) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiCustomizeSkin(this)); + } + + if (button.id == 101) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiVideoSettings(this, this.settings)); + } + + if (button.id == 100) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiControls(this, this.settings)); + } + + if (button.id == 102) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiLanguage(this, this.settings, this.mc.getLanguageManager())); + } + + if (button.id == 103) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new ScreenChatOptions(this, this.settings)); + } + + if (button.id == 104) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiSnooper(this, this.settings)); + } + + if (button.id == 200) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.lastScreen); + } + + if (button.id == 105) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiScreenResourcePacks(this)); + } + + if (button.id == 106) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiScreenOptionsSounds(this, this.settings)); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 15, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionsRowList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionsRowList.java new file mode 100644 index 0000000..5ea8e7f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOptionsRowList.java @@ -0,0 +1,149 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiOptionsRowList extends GuiListExtended +{ + private final List options = Lists.newArrayList(); + + public GuiOptionsRowList(Minecraft mcIn, int p_i45015_2_, int p_i45015_3_, int p_i45015_4_, int p_i45015_5_, int p_i45015_6_, GameSettings.Options... p_i45015_7_) + { + super(mcIn, p_i45015_2_, p_i45015_3_, p_i45015_4_, p_i45015_5_, p_i45015_6_); + this.centerListVertically = false; + + for (int i = 0; i < p_i45015_7_.length; i += 2) + { + GameSettings.Options gamesettings$options = p_i45015_7_[i]; + GameSettings.Options gamesettings$options1 = i < p_i45015_7_.length - 1 ? p_i45015_7_[i + 1] : null; + GuiButton guibutton = this.createButton(mcIn, p_i45015_2_ / 2 - 155, 0, gamesettings$options); + GuiButton guibutton1 = this.createButton(mcIn, p_i45015_2_ / 2 - 155 + 160, 0, gamesettings$options1); + this.options.add(new GuiOptionsRowList.Row(guibutton, guibutton1)); + } + } + + private GuiButton createButton(Minecraft mcIn, int p_148182_2_, int p_148182_3_, GameSettings.Options options) + { + if (options == null) + { + return null; + } + else + { + int i = options.getOrdinal(); + return (GuiButton)(options.isFloat() ? new GuiOptionSlider(i, p_148182_2_, p_148182_3_, options) : new GuiOptionButton(i, p_148182_2_, p_148182_3_, options, mcIn.gameSettings.getKeyBinding(options))); + } + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public GuiOptionsRowList.Row getListEntry(int index) + { + return this.options.get(index); + } + + protected int getSize() + { + return this.options.size(); + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return 400; + } + + protected int getScrollBarX() + { + return super.getScrollBarX() + 32; + } + + @SideOnly(Side.CLIENT) + public static class Row implements GuiListExtended.IGuiListEntry + { + private final Minecraft client = Minecraft.getMinecraft(); + private final GuiButton buttonA; + private final GuiButton buttonB; + + public Row(GuiButton buttonAIn, GuiButton buttonBIn) + { + this.buttonA = buttonAIn; + this.buttonB = buttonBIn; + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + if (this.buttonA != null) + { + this.buttonA.y = y; + this.buttonA.drawButton(this.client, mouseX, mouseY, partialTicks); + } + + if (this.buttonB != null) + { + this.buttonB.y = y; + this.buttonB.drawButton(this.client, mouseX, mouseY, partialTicks); + } + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry + * was clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + if (this.buttonA.mousePressed(this.client, mouseX, mouseY)) + { + if (this.buttonA instanceof GuiOptionButton) + { + this.client.gameSettings.setOptionValue(((GuiOptionButton)this.buttonA).getOption(), 1); + this.buttonA.displayString = this.client.gameSettings.getKeyBinding(GameSettings.Options.byOrdinal(this.buttonA.id)); + } + + return true; + } + else if (this.buttonB != null && this.buttonB.mousePressed(this.client, mouseX, mouseY)) + { + if (this.buttonB instanceof GuiOptionButton) + { + this.client.gameSettings.setOptionValue(((GuiOptionButton)this.buttonB).getOption(), 1); + this.buttonB.displayString = this.client.gameSettings.getKeyBinding(GameSettings.Options.byOrdinal(this.buttonB.id)); + } + + return true; + } + else + { + return false; + } + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + if (this.buttonA != null) + { + this.buttonA.mouseReleased(x, y); + } + + if (this.buttonB != null) + { + this.buttonB.mouseReleased(x, y); + } + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOverlayDebug.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOverlayDebug.java new file mode 100644 index 0000000..4f7c785 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiOverlayDebug.java @@ -0,0 +1,303 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Strings; +import com.google.common.collect.Lists; +import com.google.common.collect.UnmodifiableIterator; +import java.util.List; +import java.util.Map.Entry; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.ClientBrandRetriever; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.FrameTimer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.WorldType; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.Display; + +@SideOnly(Side.CLIENT) +public class GuiOverlayDebug extends Gui +{ + private final Minecraft mc; + private final FontRenderer fontRenderer; + + public GuiOverlayDebug(Minecraft mc) + { + this.mc = mc; + this.fontRenderer = mc.fontRenderer; + } + + public void renderDebugInfo(ScaledResolution scaledResolutionIn) + { + this.mc.mcProfiler.startSection("debug"); + GlStateManager.pushMatrix(); + this.renderDebugInfoLeft(); + this.renderDebugInfoRight(scaledResolutionIn); + GlStateManager.popMatrix(); + + if (this.mc.gameSettings.showLagometer) + { + this.renderLagometer(); + } + + this.mc.mcProfiler.endSection(); + } + + protected void renderDebugInfoLeft() + { + List list = this.call(); + list.add(""); + list.add("Debug: Pie [shift]: " + (this.mc.gameSettings.showDebugProfilerChart ? "visible" : "hidden") + " FPS [alt]: " + (this.mc.gameSettings.showLagometer ? "visible" : "hidden")); + list.add("For help: press F3 + Q"); + + for (int i = 0; i < list.size(); ++i) + { + String s = list.get(i); + + if (!Strings.isNullOrEmpty(s)) + { + int j = this.fontRenderer.FONT_HEIGHT; + int k = this.fontRenderer.getStringWidth(s); + int l = 2; + int i1 = 2 + j * i; + drawRect(1, i1 - 1, 2 + k + 1, i1 + j - 1, -1873784752); + this.fontRenderer.drawString(s, 2, i1, 14737632); + } + } + } + + protected void renderDebugInfoRight(ScaledResolution scaledRes) + { + List list = this.getDebugInfoRight(); + + for (int i = 0; i < list.size(); ++i) + { + String s = list.get(i); + + if (!Strings.isNullOrEmpty(s)) + { + int j = this.fontRenderer.FONT_HEIGHT; + int k = this.fontRenderer.getStringWidth(s); + int l = scaledRes.getScaledWidth() - 2 - k; + int i1 = 2 + j * i; + drawRect(l - 1, i1 - 1, l + k + 1, i1 + j - 1, -1873784752); + this.fontRenderer.drawString(s, l, i1, 14737632); + } + } + } + + @SuppressWarnings("incomplete-switch") + protected List call() + { + BlockPos blockpos = new BlockPos(this.mc.getRenderViewEntity().posX, this.mc.getRenderViewEntity().getEntityBoundingBox().minY, this.mc.getRenderViewEntity().posZ); + + if (this.mc.isReducedDebug()) + { + return Lists.newArrayList("Minecraft 1.12.2 (" + this.mc.getVersion() + "/" + ClientBrandRetriever.getClientModName() + ")", this.mc.debug, this.mc.renderGlobal.getDebugInfoRenders(), this.mc.renderGlobal.getDebugInfoEntities(), "P: " + this.mc.effectRenderer.getStatistics() + ". T: " + this.mc.world.getDebugLoadedEntities(), this.mc.world.getProviderName(), "", String.format("Chunk-relative: %d %d %d", blockpos.getX() & 15, blockpos.getY() & 15, blockpos.getZ() & 15)); + } + else + { + Entity entity = this.mc.getRenderViewEntity(); + EnumFacing enumfacing = entity.getHorizontalFacing(); + String s = "Invalid"; + + switch (enumfacing) + { + case NORTH: + s = "Towards negative Z"; + break; + case SOUTH: + s = "Towards positive Z"; + break; + case WEST: + s = "Towards negative X"; + break; + case EAST: + s = "Towards positive X"; + } + + List list = Lists.newArrayList("Minecraft 1.12.2 (" + this.mc.getVersion() + "/" + ClientBrandRetriever.getClientModName() + ("release".equalsIgnoreCase(this.mc.getVersionType()) ? "" : "/" + this.mc.getVersionType()) + ")", this.mc.debug, this.mc.renderGlobal.getDebugInfoRenders(), this.mc.renderGlobal.getDebugInfoEntities(), "P: " + this.mc.effectRenderer.getStatistics() + ". T: " + this.mc.world.getDebugLoadedEntities(), this.mc.world.getProviderName(), "", String.format("XYZ: %.3f / %.5f / %.3f", this.mc.getRenderViewEntity().posX, this.mc.getRenderViewEntity().getEntityBoundingBox().minY, this.mc.getRenderViewEntity().posZ), String.format("Block: %d %d %d", blockpos.getX(), blockpos.getY(), blockpos.getZ()), String.format("Chunk: %d %d %d in %d %d %d", blockpos.getX() & 15, blockpos.getY() & 15, blockpos.getZ() & 15, blockpos.getX() >> 4, blockpos.getY() >> 4, blockpos.getZ() >> 4), String.format("Facing: %s (%s) (%.1f / %.1f)", enumfacing, s, MathHelper.wrapDegrees(entity.rotationYaw), MathHelper.wrapDegrees(entity.rotationPitch))); + + if (this.mc.world != null) + { + Chunk chunk = this.mc.world.getChunkFromBlockCoords(blockpos); + + if (this.mc.world.isBlockLoaded(blockpos) && blockpos.getY() >= 0 && blockpos.getY() < 256) + { + if (!chunk.isEmpty()) + { + list.add("Biome: " + chunk.getBiome(blockpos, this.mc.world.getBiomeProvider()).getBiomeName()); + list.add("Light: " + chunk.getLightSubtracted(blockpos, 0) + " (" + chunk.getLightFor(EnumSkyBlock.SKY, blockpos) + " sky, " + chunk.getLightFor(EnumSkyBlock.BLOCK, blockpos) + " block)"); + DifficultyInstance difficultyinstance = this.mc.world.getDifficultyForLocation(blockpos); + + if (this.mc.isIntegratedServerRunning() && this.mc.getIntegratedServer() != null) + { + EntityPlayerMP entityplayermp = this.mc.getIntegratedServer().getPlayerList().getPlayerByUUID(this.mc.player.getUniqueID()); + + if (entityplayermp != null) + { + difficultyinstance = entityplayermp.world.getDifficultyForLocation(new BlockPos(entityplayermp)); + } + } + + list.add(String.format("Local Difficulty: %.2f // %.2f (Day %d)", difficultyinstance.getAdditionalDifficulty(), difficultyinstance.getClampedAdditionalDifficulty(), this.mc.world.getWorldTime() / 24000L)); + } + else + { + list.add("Waiting for chunk..."); + } + } + else + { + list.add("Outside of world..."); + } + } + + if (this.mc.entityRenderer != null && this.mc.entityRenderer.isShaderActive()) + { + list.add("Shader: " + this.mc.entityRenderer.getShaderGroup().getShaderGroupName()); + } + + if (this.mc.objectMouseOver != null && this.mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK && this.mc.objectMouseOver.getBlockPos() != null) + { + BlockPos blockpos1 = this.mc.objectMouseOver.getBlockPos(); + list.add(String.format("Looking at: %d %d %d", blockpos1.getX(), blockpos1.getY(), blockpos1.getZ())); + } + + return list; + } + } + + protected > List getDebugInfoRight() + { + long i = Runtime.getRuntime().maxMemory(); + long j = Runtime.getRuntime().totalMemory(); + long k = Runtime.getRuntime().freeMemory(); + long l = j - k; + List list = Lists.newArrayList(String.format("Java: %s %dbit", System.getProperty("java.version"), this.mc.isJava64bit() ? 64 : 32), String.format("Mem: % 2d%% %03d/%03dMB", l * 100L / i, bytesToMb(l), bytesToMb(i)), String.format("Allocated: % 2d%% %03dMB", j * 100L / i, bytesToMb(j)), "", String.format("CPU: %s", OpenGlHelper.getCpu()), "", String.format("Display: %dx%d (%s)", Display.getWidth(), Display.getHeight(), GlStateManager.glGetString(7936)), GlStateManager.glGetString(7937), GlStateManager.glGetString(7938)); + + list.add(""); + list.addAll(net.minecraftforge.fml.common.FMLCommonHandler.instance().getBrandings(false)); + + if (this.mc.isReducedDebug()) + { + return list; + } + else + { + if (this.mc.objectMouseOver != null && this.mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK && this.mc.objectMouseOver.getBlockPos() != null) + { + BlockPos blockpos = this.mc.objectMouseOver.getBlockPos(); + IBlockState iblockstate = this.mc.world.getBlockState(blockpos); + + if (this.mc.world.getWorldType() != WorldType.DEBUG_ALL_BLOCK_STATES) + { + iblockstate = iblockstate.getActualState(this.mc.world, blockpos); + } + + list.add(""); + list.add(String.valueOf(Block.REGISTRY.getNameForObject(iblockstate.getBlock()))); + IProperty iproperty; + String s; + + for (UnmodifiableIterator unmodifiableiterator = iblockstate.getProperties().entrySet().iterator(); unmodifiableiterator.hasNext(); list.add(iproperty.getName() + ": " + s)) + { + Entry < IProperty, Comparable> entry = (Entry)unmodifiableiterator.next(); + iproperty = (IProperty)entry.getKey(); + T t = (T)entry.getValue(); + s = iproperty.getName(t); + + if (Boolean.TRUE.equals(t)) + { + s = TextFormatting.GREEN + s; + } + else if (Boolean.FALSE.equals(t)) + { + s = TextFormatting.RED + s; + } + } + } + + return list; + } + } + + public void renderLagometer() + { + GlStateManager.disableDepth(); + FrameTimer frametimer = this.mc.getFrameTimer(); + int i = frametimer.getLastIndex(); + int j = frametimer.getIndex(); + long[] along = frametimer.getFrames(); + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int k = i; + int l = 0; + drawRect(0, scaledresolution.getScaledHeight() - 60, 240, scaledresolution.getScaledHeight(), -1873784752); + + while (k != j) + { + int i1 = frametimer.getLagometerValue(along[k], 30); + int j1 = this.getFrameColor(MathHelper.clamp(i1, 0, 60), 0, 30, 60); + this.drawVerticalLine(l, scaledresolution.getScaledHeight(), scaledresolution.getScaledHeight() - i1, j1); + ++l; + k = frametimer.parseIndex(k + 1); + } + + drawRect(1, scaledresolution.getScaledHeight() - 30 + 1, 14, scaledresolution.getScaledHeight() - 30 + 10, -1873784752); + this.fontRenderer.drawString("60", 2, scaledresolution.getScaledHeight() - 30 + 2, 14737632); + this.drawHorizontalLine(0, 239, scaledresolution.getScaledHeight() - 30, -1); + drawRect(1, scaledresolution.getScaledHeight() - 60 + 1, 14, scaledresolution.getScaledHeight() - 60 + 10, -1873784752); + this.fontRenderer.drawString("30", 2, scaledresolution.getScaledHeight() - 60 + 2, 14737632); + this.drawHorizontalLine(0, 239, scaledresolution.getScaledHeight() - 60, -1); + this.drawHorizontalLine(0, 239, scaledresolution.getScaledHeight() - 1, -1); + this.drawVerticalLine(0, scaledresolution.getScaledHeight() - 60, scaledresolution.getScaledHeight(), -1); + this.drawVerticalLine(239, scaledresolution.getScaledHeight() - 60, scaledresolution.getScaledHeight(), -1); + + if (this.mc.gameSettings.limitFramerate <= 120) + { + this.drawHorizontalLine(0, 239, scaledresolution.getScaledHeight() - 60 + this.mc.gameSettings.limitFramerate / 2, -16711681); + } + + GlStateManager.enableDepth(); + } + + private int getFrameColor(int p_181552_1_, int p_181552_2_, int p_181552_3_, int p_181552_4_) + { + return p_181552_1_ < p_181552_3_ ? this.blendColors(-16711936, -256, (float)p_181552_1_ / (float)p_181552_3_) : this.blendColors(-256, -65536, (float)(p_181552_1_ - p_181552_3_) / (float)(p_181552_4_ - p_181552_3_)); + } + + private int blendColors(int p_181553_1_, int p_181553_2_, float p_181553_3_) + { + int i = p_181553_1_ >> 24 & 255; + int j = p_181553_1_ >> 16 & 255; + int k = p_181553_1_ >> 8 & 255; + int l = p_181553_1_ & 255; + int i1 = p_181553_2_ >> 24 & 255; + int j1 = p_181553_2_ >> 16 & 255; + int k1 = p_181553_2_ >> 8 & 255; + int l1 = p_181553_2_ & 255; + int i2 = MathHelper.clamp((int)((float)i + (float)(i1 - i) * p_181553_3_), 0, 255); + int j2 = MathHelper.clamp((int)((float)j + (float)(j1 - j) * p_181553_3_), 0, 255); + int k2 = MathHelper.clamp((int)((float)k + (float)(k1 - k) * p_181553_3_), 0, 255); + int l2 = MathHelper.clamp((int)((float)l + (float)(l1 - l) * p_181553_3_), 0, 255); + return i2 << 24 | j2 << 16 | k2 << 8 | l2; + } + + private static long bytesToMb(long bytes) + { + return bytes / 1024L / 1024L; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiPageButtonList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiPageButtonList.java new file mode 100644 index 0000000..4e6b22a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiPageButtonList.java @@ -0,0 +1,664 @@ +package net.minecraft.client.gui; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.util.IntHashMap; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiPageButtonList extends GuiListExtended +{ + private final List entries = Lists.newArrayList(); + private final IntHashMap componentMap = new IntHashMap(); + private final List editBoxes = Lists.newArrayList(); + private final GuiPageButtonList.GuiListEntry[][] pages; + private int page; + private final GuiPageButtonList.GuiResponder responder; + private Gui focusedControl; + + public GuiPageButtonList(Minecraft mcIn, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn, GuiPageButtonList.GuiResponder p_i45536_7_, GuiPageButtonList.GuiListEntry[]... p_i45536_8_) + { + super(mcIn, widthIn, heightIn, topIn, bottomIn, slotHeightIn); + this.responder = p_i45536_7_; + this.pages = p_i45536_8_; + this.centerListVertically = false; + this.populateComponents(); + this.populateEntries(); + } + + private void populateComponents() + { + for (GuiPageButtonList.GuiListEntry[] aguipagebuttonlist$guilistentry : this.pages) + { + for (int i = 0; i < aguipagebuttonlist$guilistentry.length; i += 2) + { + GuiPageButtonList.GuiListEntry guipagebuttonlist$guilistentry = aguipagebuttonlist$guilistentry[i]; + GuiPageButtonList.GuiListEntry guipagebuttonlist$guilistentry1 = i < aguipagebuttonlist$guilistentry.length - 1 ? aguipagebuttonlist$guilistentry[i + 1] : null; + Gui gui = this.createEntry(guipagebuttonlist$guilistentry, 0, guipagebuttonlist$guilistentry1 == null); + Gui gui1 = this.createEntry(guipagebuttonlist$guilistentry1, 160, guipagebuttonlist$guilistentry == null); + GuiPageButtonList.GuiEntry guipagebuttonlist$guientry = new GuiPageButtonList.GuiEntry(gui, gui1); + this.entries.add(guipagebuttonlist$guientry); + + if (guipagebuttonlist$guilistentry != null && gui != null) + { + this.componentMap.addKey(guipagebuttonlist$guilistentry.getId(), gui); + + if (gui instanceof GuiTextField) + { + this.editBoxes.add((GuiTextField)gui); + } + } + + if (guipagebuttonlist$guilistentry1 != null && gui1 != null) + { + this.componentMap.addKey(guipagebuttonlist$guilistentry1.getId(), gui1); + + if (gui1 instanceof GuiTextField) + { + this.editBoxes.add((GuiTextField)gui1); + } + } + } + } + } + + private void populateEntries() + { + this.entries.clear(); + + for (int i = 0; i < this.pages[this.page].length; i += 2) + { + GuiPageButtonList.GuiListEntry guipagebuttonlist$guilistentry = this.pages[this.page][i]; + GuiPageButtonList.GuiListEntry guipagebuttonlist$guilistentry1 = i < this.pages[this.page].length - 1 ? this.pages[this.page][i + 1] : null; + Gui gui = this.componentMap.lookup(guipagebuttonlist$guilistentry.getId()); + Gui gui1 = guipagebuttonlist$guilistentry1 != null ? (Gui)this.componentMap.lookup(guipagebuttonlist$guilistentry1.getId()) : null; + GuiPageButtonList.GuiEntry guipagebuttonlist$guientry = new GuiPageButtonList.GuiEntry(gui, gui1); + this.entries.add(guipagebuttonlist$guientry); + } + } + + public void setPage(int p_181156_1_) + { + if (p_181156_1_ != this.page) + { + int i = this.page; + this.page = p_181156_1_; + this.populateEntries(); + this.markVisibility(i, p_181156_1_); + this.amountScrolled = 0.0F; + } + } + + public int getPage() + { + return this.page; + } + + public int getPageCount() + { + return this.pages.length; + } + + public Gui getFocusedControl() + { + return this.focusedControl; + } + + public void previousPage() + { + if (this.page > 0) + { + this.setPage(this.page - 1); + } + } + + public void nextPage() + { + if (this.page < this.pages.length - 1) + { + this.setPage(this.page + 1); + } + } + + public Gui getComponent(int p_178061_1_) + { + return this.componentMap.lookup(p_178061_1_); + } + + private void markVisibility(int p_178060_1_, int p_178060_2_) + { + for (GuiPageButtonList.GuiListEntry guipagebuttonlist$guilistentry : this.pages[p_178060_1_]) + { + if (guipagebuttonlist$guilistentry != null) + { + this.setComponentVisibility(this.componentMap.lookup(guipagebuttonlist$guilistentry.getId()), false); + } + } + + for (GuiPageButtonList.GuiListEntry guipagebuttonlist$guilistentry1 : this.pages[p_178060_2_]) + { + if (guipagebuttonlist$guilistentry1 != null) + { + this.setComponentVisibility(this.componentMap.lookup(guipagebuttonlist$guilistentry1.getId()), true); + } + } + } + + private void setComponentVisibility(Gui p_178066_1_, boolean p_178066_2_) + { + if (p_178066_1_ instanceof GuiButton) + { + ((GuiButton)p_178066_1_).visible = p_178066_2_; + } + else if (p_178066_1_ instanceof GuiTextField) + { + ((GuiTextField)p_178066_1_).setVisible(p_178066_2_); + } + else if (p_178066_1_ instanceof GuiLabel) + { + ((GuiLabel)p_178066_1_).visible = p_178066_2_; + } + } + + @Nullable + private Gui createEntry(@Nullable GuiPageButtonList.GuiListEntry p_178058_1_, int p_178058_2_, boolean p_178058_3_) + { + if (p_178058_1_ instanceof GuiPageButtonList.GuiSlideEntry) + { + return this.createSlider(this.width / 2 - 155 + p_178058_2_, 0, (GuiPageButtonList.GuiSlideEntry)p_178058_1_); + } + else if (p_178058_1_ instanceof GuiPageButtonList.GuiButtonEntry) + { + return this.createButton(this.width / 2 - 155 + p_178058_2_, 0, (GuiPageButtonList.GuiButtonEntry)p_178058_1_); + } + else if (p_178058_1_ instanceof GuiPageButtonList.EditBoxEntry) + { + return this.createTextField(this.width / 2 - 155 + p_178058_2_, 0, (GuiPageButtonList.EditBoxEntry)p_178058_1_); + } + else + { + return p_178058_1_ instanceof GuiPageButtonList.GuiLabelEntry ? this.createLabel(this.width / 2 - 155 + p_178058_2_, 0, (GuiPageButtonList.GuiLabelEntry)p_178058_1_, p_178058_3_) : null; + } + } + + public void setActive(boolean p_181155_1_) + { + for (GuiPageButtonList.GuiEntry guipagebuttonlist$guientry : this.entries) + { + if (guipagebuttonlist$guientry.component1 instanceof GuiButton) + { + ((GuiButton)guipagebuttonlist$guientry.component1).enabled = p_181155_1_; + } + + if (guipagebuttonlist$guientry.component2 instanceof GuiButton) + { + ((GuiButton)guipagebuttonlist$guientry.component2).enabled = p_181155_1_; + } + } + } + + public boolean mouseClicked(int mouseX, int mouseY, int mouseEvent) + { + boolean flag = super.mouseClicked(mouseX, mouseY, mouseEvent); + int i = this.getSlotIndexFromScreenCoords(mouseX, mouseY); + + if (i >= 0) + { + GuiPageButtonList.GuiEntry guipagebuttonlist$guientry = this.getListEntry(i); + + if (this.focusedControl != guipagebuttonlist$guientry.focusedControl && this.focusedControl != null && this.focusedControl instanceof GuiTextField) + { + ((GuiTextField)this.focusedControl).setFocused(false); + } + + this.focusedControl = guipagebuttonlist$guientry.focusedControl; + } + + return flag; + } + + private GuiSlider createSlider(int p_178067_1_, int p_178067_2_, GuiPageButtonList.GuiSlideEntry p_178067_3_) + { + GuiSlider guislider = new GuiSlider(this.responder, p_178067_3_.getId(), p_178067_1_, p_178067_2_, p_178067_3_.getCaption(), p_178067_3_.getMinValue(), p_178067_3_.getMaxValue(), p_178067_3_.getInitalValue(), p_178067_3_.getFormatter()); + guislider.visible = p_178067_3_.shouldStartVisible(); + return guislider; + } + + private GuiListButton createButton(int p_178065_1_, int p_178065_2_, GuiPageButtonList.GuiButtonEntry p_178065_3_) + { + GuiListButton guilistbutton = new GuiListButton(this.responder, p_178065_3_.getId(), p_178065_1_, p_178065_2_, p_178065_3_.getCaption(), p_178065_3_.getInitialValue()); + guilistbutton.visible = p_178065_3_.shouldStartVisible(); + return guilistbutton; + } + + private GuiTextField createTextField(int p_178068_1_, int p_178068_2_, GuiPageButtonList.EditBoxEntry p_178068_3_) + { + GuiTextField guitextfield = new GuiTextField(p_178068_3_.getId(), this.mc.fontRenderer, p_178068_1_, p_178068_2_, 150, 20); + guitextfield.setText(p_178068_3_.getCaption()); + guitextfield.setGuiResponder(this.responder); + guitextfield.setVisible(p_178068_3_.shouldStartVisible()); + guitextfield.setValidator(p_178068_3_.getFilter()); + return guitextfield; + } + + private GuiLabel createLabel(int p_178063_1_, int p_178063_2_, GuiPageButtonList.GuiLabelEntry p_178063_3_, boolean p_178063_4_) + { + GuiLabel guilabel; + + if (p_178063_4_) + { + guilabel = new GuiLabel(this.mc.fontRenderer, p_178063_3_.getId(), p_178063_1_, p_178063_2_, this.width - p_178063_1_ * 2, 20, -1); + } + else + { + guilabel = new GuiLabel(this.mc.fontRenderer, p_178063_3_.getId(), p_178063_1_, p_178063_2_, 150, 20, -1); + } + + guilabel.visible = p_178063_3_.shouldStartVisible(); + guilabel.addLine(p_178063_3_.getCaption()); + guilabel.setCentered(); + return guilabel; + } + + public void onKeyPressed(char p_178062_1_, int p_178062_2_) + { + if (this.focusedControl instanceof GuiTextField) + { + GuiTextField guitextfield = (GuiTextField)this.focusedControl; + + if (!GuiScreen.isKeyComboCtrlV(p_178062_2_)) + { + if (p_178062_2_ == 15) + { + guitextfield.setFocused(false); + int k = this.editBoxes.indexOf(this.focusedControl); + + if (GuiScreen.isShiftKeyDown()) + { + if (k == 0) + { + k = this.editBoxes.size() - 1; + } + else + { + --k; + } + } + else if (k == this.editBoxes.size() - 1) + { + k = 0; + } + else + { + ++k; + } + + this.focusedControl = this.editBoxes.get(k); + guitextfield = (GuiTextField)this.focusedControl; + guitextfield.setFocused(true); + int l = guitextfield.y + this.slotHeight; + int i1 = guitextfield.y; + + if (l > this.bottom) + { + this.amountScrolled += (float)(l - this.bottom); + } + else if (i1 < this.top) + { + this.amountScrolled = (float)i1; + } + } + else + { + guitextfield.textboxKeyTyped(p_178062_1_, p_178062_2_); + } + } + else + { + String s = GuiScreen.getClipboardString(); + String[] astring = s.split(";"); + int i = this.editBoxes.indexOf(this.focusedControl); + int j = i; + + for (String s1 : astring) + { + GuiTextField guitextfield1 = this.editBoxes.get(j); + guitextfield1.setText(s1); + guitextfield1.setResponderEntryValue(guitextfield1.getId(), s1); + + if (j == this.editBoxes.size() - 1) + { + j = 0; + } + else + { + ++j; + } + + if (j == i) + { + break; + } + } + } + } + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public GuiPageButtonList.GuiEntry getListEntry(int index) + { + return this.entries.get(index); + } + + public int getSize() + { + return this.entries.size(); + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return 400; + } + + protected int getScrollBarX() + { + return super.getScrollBarX() + 32; + } + + @SideOnly(Side.CLIENT) + public static class EditBoxEntry extends GuiPageButtonList.GuiListEntry + { + private final Predicate filter; + + public EditBoxEntry(int p_i45534_1_, String p_i45534_2_, boolean p_i45534_3_, Predicate p_i45534_4_) + { + super(p_i45534_1_, p_i45534_2_, p_i45534_3_); + this.filter = (Predicate)MoreObjects.firstNonNull(p_i45534_4_, Predicates.alwaysTrue()); + } + + public Predicate getFilter() + { + return this.filter; + } + } + + @SideOnly(Side.CLIENT) + public static class GuiButtonEntry extends GuiPageButtonList.GuiListEntry + { + private final boolean initialValue; + + public GuiButtonEntry(int p_i45535_1_, String p_i45535_2_, boolean p_i45535_3_, boolean p_i45535_4_) + { + super(p_i45535_1_, p_i45535_2_, p_i45535_3_); + this.initialValue = p_i45535_4_; + } + + public boolean getInitialValue() + { + return this.initialValue; + } + } + + @SideOnly(Side.CLIENT) + public static class GuiEntry implements GuiListExtended.IGuiListEntry + { + private final Minecraft client = Minecraft.getMinecraft(); + private final Gui component1; + private final Gui component2; + private Gui focusedControl; + + public GuiEntry(@Nullable Gui p_i45533_1_, @Nullable Gui p_i45533_2_) + { + this.component1 = p_i45533_1_; + this.component2 = p_i45533_2_; + } + + public Gui getComponent1() + { + return this.component1; + } + + public Gui getComponent2() + { + return this.component2; + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + this.renderComponent(this.component1, y, mouseX, mouseY, false, partialTicks); + this.renderComponent(this.component2, y, mouseX, mouseY, false, partialTicks); + } + + private void renderComponent(Gui p_192636_1_, int p_192636_2_, int p_192636_3_, int p_192636_4_, boolean p_192636_5_, float p_192636_6_) + { + if (p_192636_1_ != null) + { + if (p_192636_1_ instanceof GuiButton) + { + this.renderButton((GuiButton)p_192636_1_, p_192636_2_, p_192636_3_, p_192636_4_, p_192636_5_, p_192636_6_); + } + else if (p_192636_1_ instanceof GuiTextField) + { + this.renderTextField((GuiTextField)p_192636_1_, p_192636_2_, p_192636_5_); + } + else if (p_192636_1_ instanceof GuiLabel) + { + this.renderLabel((GuiLabel)p_192636_1_, p_192636_2_, p_192636_3_, p_192636_4_, p_192636_5_); + } + } + } + + private void renderButton(GuiButton p_192635_1_, int p_192635_2_, int p_192635_3_, int p_192635_4_, boolean p_192635_5_, float p_192635_6_) + { + p_192635_1_.y = p_192635_2_; + + if (!p_192635_5_) + { + p_192635_1_.drawButton(this.client, p_192635_3_, p_192635_4_, p_192635_6_); + } + } + + private void renderTextField(GuiTextField p_178027_1_, int p_178027_2_, boolean p_178027_3_) + { + p_178027_1_.y = p_178027_2_; + + if (!p_178027_3_) + { + p_178027_1_.drawTextBox(); + } + } + + private void renderLabel(GuiLabel p_178025_1_, int p_178025_2_, int p_178025_3_, int p_178025_4_, boolean p_178025_5_) + { + p_178025_1_.y = p_178025_2_; + + if (!p_178025_5_) + { + p_178025_1_.drawLabel(this.client, p_178025_3_, p_178025_4_); + } + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + this.renderComponent(this.component1, y, 0, 0, true, partialTicks); + this.renderComponent(this.component2, y, 0, 0, true, partialTicks); + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry + * was clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + boolean flag = this.clickComponent(this.component1, mouseX, mouseY, mouseEvent); + boolean flag1 = this.clickComponent(this.component2, mouseX, mouseY, mouseEvent); + return flag || flag1; + } + + private boolean clickComponent(Gui p_178026_1_, int p_178026_2_, int p_178026_3_, int p_178026_4_) + { + if (p_178026_1_ == null) + { + return false; + } + else if (p_178026_1_ instanceof GuiButton) + { + return this.clickButton((GuiButton)p_178026_1_, p_178026_2_, p_178026_3_, p_178026_4_); + } + else + { + if (p_178026_1_ instanceof GuiTextField) + { + this.clickTextField((GuiTextField)p_178026_1_, p_178026_2_, p_178026_3_, p_178026_4_); + } + + return false; + } + } + + private boolean clickButton(GuiButton p_178023_1_, int p_178023_2_, int p_178023_3_, int p_178023_4_) + { + boolean flag = p_178023_1_.mousePressed(this.client, p_178023_2_, p_178023_3_); + + if (flag) + { + this.focusedControl = p_178023_1_; + } + + return flag; + } + + private void clickTextField(GuiTextField p_178018_1_, int p_178018_2_, int p_178018_3_, int p_178018_4_) + { + p_178018_1_.mouseClicked(p_178018_2_, p_178018_3_, p_178018_4_); + + if (p_178018_1_.isFocused()) + { + this.focusedControl = p_178018_1_; + } + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + this.releaseComponent(this.component1, x, y, mouseEvent); + this.releaseComponent(this.component2, x, y, mouseEvent); + } + + private void releaseComponent(Gui p_178016_1_, int p_178016_2_, int p_178016_3_, int p_178016_4_) + { + if (p_178016_1_ != null) + { + if (p_178016_1_ instanceof GuiButton) + { + this.releaseButton((GuiButton)p_178016_1_, p_178016_2_, p_178016_3_, p_178016_4_); + } + } + } + + private void releaseButton(GuiButton p_178019_1_, int p_178019_2_, int p_178019_3_, int p_178019_4_) + { + p_178019_1_.mouseReleased(p_178019_2_, p_178019_3_); + } + } + + @SideOnly(Side.CLIENT) + public static class GuiLabelEntry extends GuiPageButtonList.GuiListEntry + { + public GuiLabelEntry(int p_i45532_1_, String p_i45532_2_, boolean p_i45532_3_) + { + super(p_i45532_1_, p_i45532_2_, p_i45532_3_); + } + } + + @SideOnly(Side.CLIENT) + public static class GuiListEntry + { + private final int id; + private final String caption; + private final boolean startVisible; + + public GuiListEntry(int p_i45531_1_, String p_i45531_2_, boolean p_i45531_3_) + { + this.id = p_i45531_1_; + this.caption = p_i45531_2_; + this.startVisible = p_i45531_3_; + } + + public int getId() + { + return this.id; + } + + public String getCaption() + { + return this.caption; + } + + public boolean shouldStartVisible() + { + return this.startVisible; + } + } + + @SideOnly(Side.CLIENT) + public interface GuiResponder + { + void setEntryValue(int id, boolean value); + + void setEntryValue(int id, float value); + + void setEntryValue(int id, String value); + } + + @SideOnly(Side.CLIENT) + public static class GuiSlideEntry extends GuiPageButtonList.GuiListEntry + { + private final GuiSlider.FormatHelper formatter; + private final float minValue; + private final float maxValue; + private final float initialValue; + + public GuiSlideEntry(int p_i45530_1_, String p_i45530_2_, boolean p_i45530_3_, GuiSlider.FormatHelper p_i45530_4_, float p_i45530_5_, float p_i45530_6_, float p_i45530_7_) + { + super(p_i45530_1_, p_i45530_2_, p_i45530_3_); + this.formatter = p_i45530_4_; + this.minValue = p_i45530_5_; + this.maxValue = p_i45530_6_; + this.initialValue = p_i45530_7_; + } + + public GuiSlider.FormatHelper getFormatter() + { + return this.formatter; + } + + public float getMinValue() + { + return this.minValue; + } + + public float getMaxValue() + { + return this.maxValue; + } + + public float getInitalValue() + { + return this.initialValue; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiPlayerTabOverlay.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiPlayerTabOverlay.java new file mode 100644 index 0000000..b1e8f8f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiPlayerTabOverlay.java @@ -0,0 +1,401 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import com.mojang.authlib.GameProfile; +import java.util.Comparator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiPlayerTabOverlay extends Gui +{ + private static final Ordering ENTRY_ORDERING = Ordering.from(new GuiPlayerTabOverlay.PlayerComparator()); + private final Minecraft mc; + private final GuiIngame guiIngame; + private ITextComponent footer; + private ITextComponent header; + /** The last time the playerlist was opened (went from not being renderd, to being rendered) */ + private long lastTimeOpened; + /** Weither or not the playerlist is currently being rendered */ + private boolean isBeingRendered; + + public GuiPlayerTabOverlay(Minecraft mcIn, GuiIngame guiIngameIn) + { + this.mc = mcIn; + this.guiIngame = guiIngameIn; + } + + /** + * Returns the name that should be renderd for the player supplied + */ + public String getPlayerName(NetworkPlayerInfo networkPlayerInfoIn) + { + return networkPlayerInfoIn.getDisplayName() != null ? networkPlayerInfoIn.getDisplayName().getFormattedText() : ScorePlayerTeam.formatPlayerName(networkPlayerInfoIn.getPlayerTeam(), networkPlayerInfoIn.getGameProfile().getName()); + } + + /** + * Called by GuiIngame to update the information stored in the playerlist, does not actually render the list, + * however. + */ + public void updatePlayerList(boolean willBeRendered) + { + if (willBeRendered && !this.isBeingRendered) + { + this.lastTimeOpened = Minecraft.getSystemTime(); + } + + this.isBeingRendered = willBeRendered; + } + + /** + * Renders the playerlist, its background, headers and footers. + */ + public void renderPlayerlist(int width, Scoreboard scoreboardIn, @Nullable ScoreObjective scoreObjectiveIn) + { + NetHandlerPlayClient nethandlerplayclient = this.mc.player.connection; + List list = ENTRY_ORDERING.sortedCopy(nethandlerplayclient.getPlayerInfoMap()); + int i = 0; + int j = 0; + + for (NetworkPlayerInfo networkplayerinfo : list) + { + int k = this.mc.fontRenderer.getStringWidth(this.getPlayerName(networkplayerinfo)); + i = Math.max(i, k); + + if (scoreObjectiveIn != null && scoreObjectiveIn.getRenderType() != IScoreCriteria.EnumRenderType.HEARTS) + { + k = this.mc.fontRenderer.getStringWidth(" " + scoreboardIn.getOrCreateScore(networkplayerinfo.getGameProfile().getName(), scoreObjectiveIn).getScorePoints()); + j = Math.max(j, k); + } + } + + list = list.subList(0, Math.min(list.size(), 80)); + int l3 = list.size(); + int i4 = l3; + int j4; + + for (j4 = 1; i4 > 20; i4 = (l3 + j4 - 1) / j4) + { + ++j4; + } + + boolean flag = this.mc.isIntegratedServerRunning() || this.mc.getConnection().getNetworkManager().isEncrypted(); + int l; + + if (scoreObjectiveIn != null) + { + if (scoreObjectiveIn.getRenderType() == IScoreCriteria.EnumRenderType.HEARTS) + { + l = 90; + } + else + { + l = j; + } + } + else + { + l = 0; + } + + int i1 = Math.min(j4 * ((flag ? 9 : 0) + i + l + 13), width - 50) / j4; + int j1 = width / 2 - (i1 * j4 + (j4 - 1) * 5) / 2; + int k1 = 10; + int l1 = i1 * j4 + (j4 - 1) * 5; + List list1 = null; + + if (this.header != null) + { + list1 = this.mc.fontRenderer.listFormattedStringToWidth(this.header.getFormattedText(), width - 50); + + for (String s : list1) + { + l1 = Math.max(l1, this.mc.fontRenderer.getStringWidth(s)); + } + } + + List list2 = null; + + if (this.footer != null) + { + list2 = this.mc.fontRenderer.listFormattedStringToWidth(this.footer.getFormattedText(), width - 50); + + for (String s1 : list2) + { + l1 = Math.max(l1, this.mc.fontRenderer.getStringWidth(s1)); + } + } + + if (list1 != null) + { + drawRect(width / 2 - l1 / 2 - 1, k1 - 1, width / 2 + l1 / 2 + 1, k1 + list1.size() * this.mc.fontRenderer.FONT_HEIGHT, Integer.MIN_VALUE); + + for (String s2 : list1) + { + int i2 = this.mc.fontRenderer.getStringWidth(s2); + this.mc.fontRenderer.drawStringWithShadow(s2, (float)(width / 2 - i2 / 2), (float)k1, -1); + k1 += this.mc.fontRenderer.FONT_HEIGHT; + } + + ++k1; + } + + drawRect(width / 2 - l1 / 2 - 1, k1 - 1, width / 2 + l1 / 2 + 1, k1 + i4 * 9, Integer.MIN_VALUE); + + for (int k4 = 0; k4 < l3; ++k4) + { + int l4 = k4 / i4; + int i5 = k4 % i4; + int j2 = j1 + l4 * i1 + l4 * 5; + int k2 = k1 + i5 * 9; + drawRect(j2, k2, j2 + i1, k2 + 8, 553648127); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableAlpha(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + + if (k4 < list.size()) + { + NetworkPlayerInfo networkplayerinfo1 = list.get(k4); + GameProfile gameprofile = networkplayerinfo1.getGameProfile(); + + if (flag) + { + EntityPlayer entityplayer = this.mc.world.getPlayerEntityByUUID(gameprofile.getId()); + boolean flag1 = entityplayer != null && entityplayer.isWearing(EnumPlayerModelParts.CAPE) && ("Dinnerbone".equals(gameprofile.getName()) || "Grumm".equals(gameprofile.getName())); + this.mc.getTextureManager().bindTexture(networkplayerinfo1.getLocationSkin()); + int l2 = 8 + (flag1 ? 8 : 0); + int i3 = 8 * (flag1 ? -1 : 1); + Gui.drawScaledCustomSizeModalRect(j2, k2, 8.0F, (float)l2, 8, i3, 8, 8, 64.0F, 64.0F); + + if (entityplayer != null && entityplayer.isWearing(EnumPlayerModelParts.HAT)) + { + int j3 = 8 + (flag1 ? 8 : 0); + int k3 = 8 * (flag1 ? -1 : 1); + Gui.drawScaledCustomSizeModalRect(j2, k2, 40.0F, (float)j3, 8, k3, 8, 8, 64.0F, 64.0F); + } + + j2 += 9; + } + + String s4 = this.getPlayerName(networkplayerinfo1); + + if (networkplayerinfo1.getGameType() == GameType.SPECTATOR) + { + this.mc.fontRenderer.drawStringWithShadow(TextFormatting.ITALIC + s4, (float)j2, (float)k2, -1862270977); + } + else + { + this.mc.fontRenderer.drawStringWithShadow(s4, (float)j2, (float)k2, -1); + } + + if (scoreObjectiveIn != null && networkplayerinfo1.getGameType() != GameType.SPECTATOR) + { + int k5 = j2 + i + 1; + int l5 = k5 + l; + + if (l5 - k5 > 5) + { + this.drawScoreboardValues(scoreObjectiveIn, k2, gameprofile.getName(), k5, l5, networkplayerinfo1); + } + } + + this.drawPing(i1, j2 - (flag ? 9 : 0), k2, networkplayerinfo1); + } + } + + if (list2 != null) + { + k1 = k1 + i4 * 9 + 1; + drawRect(width / 2 - l1 / 2 - 1, k1 - 1, width / 2 + l1 / 2 + 1, k1 + list2.size() * this.mc.fontRenderer.FONT_HEIGHT, Integer.MIN_VALUE); + + for (String s3 : list2) + { + int j5 = this.mc.fontRenderer.getStringWidth(s3); + this.mc.fontRenderer.drawStringWithShadow(s3, (float)(width / 2 - j5 / 2), (float)k1, -1); + k1 += this.mc.fontRenderer.FONT_HEIGHT; + } + } + } + + protected void drawPing(int p_175245_1_, int p_175245_2_, int p_175245_3_, NetworkPlayerInfo networkPlayerInfoIn) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(ICONS); + int i = 0; + int j; + + if (networkPlayerInfoIn.getResponseTime() < 0) + { + j = 5; + } + else if (networkPlayerInfoIn.getResponseTime() < 150) + { + j = 0; + } + else if (networkPlayerInfoIn.getResponseTime() < 300) + { + j = 1; + } + else if (networkPlayerInfoIn.getResponseTime() < 600) + { + j = 2; + } + else if (networkPlayerInfoIn.getResponseTime() < 1000) + { + j = 3; + } + else + { + j = 4; + } + + this.zLevel += 100.0F; + this.drawTexturedModalRect(p_175245_2_ + p_175245_1_ - 11, p_175245_3_, 0, 176 + j * 8, 10, 8); + this.zLevel -= 100.0F; + } + + private void drawScoreboardValues(ScoreObjective objective, int p_175247_2_, String name, int p_175247_4_, int p_175247_5_, NetworkPlayerInfo info) + { + int i = objective.getScoreboard().getOrCreateScore(name, objective).getScorePoints(); + + if (objective.getRenderType() == IScoreCriteria.EnumRenderType.HEARTS) + { + this.mc.getTextureManager().bindTexture(ICONS); + + if (this.lastTimeOpened == info.getRenderVisibilityId()) + { + if (i < info.getLastHealth()) + { + info.setLastHealthTime(Minecraft.getSystemTime()); + info.setHealthBlinkTime((long)(this.guiIngame.getUpdateCounter() + 20)); + } + else if (i > info.getLastHealth()) + { + info.setLastHealthTime(Minecraft.getSystemTime()); + info.setHealthBlinkTime((long)(this.guiIngame.getUpdateCounter() + 10)); + } + } + + if (Minecraft.getSystemTime() - info.getLastHealthTime() > 1000L || this.lastTimeOpened != info.getRenderVisibilityId()) + { + info.setLastHealth(i); + info.setDisplayHealth(i); + info.setLastHealthTime(Minecraft.getSystemTime()); + } + + info.setRenderVisibilityId(this.lastTimeOpened); + info.setLastHealth(i); + int j = MathHelper.ceil((float)Math.max(i, info.getDisplayHealth()) / 2.0F); + int k = Math.max(MathHelper.ceil((float)(i / 2)), Math.max(MathHelper.ceil((float)(info.getDisplayHealth() / 2)), 10)); + boolean flag = info.getHealthBlinkTime() > (long)this.guiIngame.getUpdateCounter() && (info.getHealthBlinkTime() - (long)this.guiIngame.getUpdateCounter()) / 3L % 2L == 1L; + + if (j > 0) + { + float f = Math.min((float)(p_175247_5_ - p_175247_4_ - 4) / (float)k, 9.0F); + + if (f > 3.0F) + { + for (int l = j; l < k; ++l) + { + this.drawTexturedModalRect((float)p_175247_4_ + (float)l * f, (float)p_175247_2_, flag ? 25 : 16, 0, 9, 9); + } + + for (int j1 = 0; j1 < j; ++j1) + { + this.drawTexturedModalRect((float)p_175247_4_ + (float)j1 * f, (float)p_175247_2_, flag ? 25 : 16, 0, 9, 9); + + if (flag) + { + if (j1 * 2 + 1 < info.getDisplayHealth()) + { + this.drawTexturedModalRect((float)p_175247_4_ + (float)j1 * f, (float)p_175247_2_, 70, 0, 9, 9); + } + + if (j1 * 2 + 1 == info.getDisplayHealth()) + { + this.drawTexturedModalRect((float)p_175247_4_ + (float)j1 * f, (float)p_175247_2_, 79, 0, 9, 9); + } + } + + if (j1 * 2 + 1 < i) + { + this.drawTexturedModalRect((float)p_175247_4_ + (float)j1 * f, (float)p_175247_2_, j1 >= 10 ? 160 : 52, 0, 9, 9); + } + + if (j1 * 2 + 1 == i) + { + this.drawTexturedModalRect((float)p_175247_4_ + (float)j1 * f, (float)p_175247_2_, j1 >= 10 ? 169 : 61, 0, 9, 9); + } + } + } + else + { + float f1 = MathHelper.clamp((float)i / 20.0F, 0.0F, 1.0F); + int i1 = (int)((1.0F - f1) * 255.0F) << 16 | (int)(f1 * 255.0F) << 8; + String s = "" + (float)i / 2.0F; + + if (p_175247_5_ - this.mc.fontRenderer.getStringWidth(s + "hp") >= p_175247_4_) + { + s = s + "hp"; + } + + this.mc.fontRenderer.drawStringWithShadow(s, (float)((p_175247_5_ + p_175247_4_) / 2 - this.mc.fontRenderer.getStringWidth(s) / 2), (float)p_175247_2_, i1); + } + } + } + else + { + String s1 = TextFormatting.YELLOW + "" + i; + this.mc.fontRenderer.drawStringWithShadow(s1, (float)(p_175247_5_ - this.mc.fontRenderer.getStringWidth(s1)), (float)p_175247_2_, 16777215); + } + } + + public void setFooter(@Nullable ITextComponent footerIn) + { + this.footer = footerIn; + } + + public void setHeader(@Nullable ITextComponent headerIn) + { + this.header = headerIn; + } + + public void resetFooterHeader() + { + this.header = null; + this.footer = null; + } + + @SideOnly(Side.CLIENT) + static class PlayerComparator implements Comparator + { + private PlayerComparator() + { + } + + public int compare(NetworkPlayerInfo p_compare_1_, NetworkPlayerInfo p_compare_2_) + { + ScorePlayerTeam scoreplayerteam = p_compare_1_.getPlayerTeam(); + ScorePlayerTeam scoreplayerteam1 = p_compare_2_.getPlayerTeam(); + return ComparisonChain.start().compareTrueFirst(p_compare_1_.getGameType() != GameType.SPECTATOR, p_compare_2_.getGameType() != GameType.SPECTATOR).compare(scoreplayerteam != null ? scoreplayerteam.getName() : "", scoreplayerteam1 != null ? scoreplayerteam1.getName() : "").compare(p_compare_1_.getGameProfile().getName(), p_compare_2_.getGameProfile().getName()).result(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiRepair.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiRepair.java new file mode 100644 index 0000000..6055bb4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiRepair.java @@ -0,0 +1,231 @@ +package net.minecraft.client.gui; + +import io.netty.buffer.Unpooled; +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerRepair; +import net.minecraft.inventory.IContainerListener; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiRepair extends GuiContainer implements IContainerListener +{ + private static final ResourceLocation ANVIL_RESOURCE = new ResourceLocation("textures/gui/container/anvil.png"); + private final ContainerRepair anvil; + private GuiTextField nameField; + private final InventoryPlayer playerInventory; + + public GuiRepair(InventoryPlayer inventoryIn, World worldIn) + { + super(new ContainerRepair(inventoryIn, worldIn, Minecraft.getMinecraft().player)); + this.playerInventory = inventoryIn; + this.anvil = (ContainerRepair)this.inventorySlots; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + Keyboard.enableRepeatEvents(true); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.nameField = new GuiTextField(0, this.fontRenderer, i + 62, j + 24, 103, 12); + this.nameField.setTextColor(-1); + this.nameField.setDisabledTextColour(-1); + this.nameField.setEnableBackgroundDrawing(false); + this.nameField.setMaxStringLength(35); + this.inventorySlots.removeListener(this); + this.inventorySlots.addListener(this); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + super.onGuiClosed(); + Keyboard.enableRepeatEvents(false); + this.inventorySlots.removeListener(this); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + GlStateManager.disableLighting(); + GlStateManager.disableBlend(); + this.fontRenderer.drawString(I18n.format("container.repair"), 60, 6, 4210752); + + if (this.anvil.maximumCost > 0) + { + int i = 8453920; + boolean flag = true; + String s = I18n.format("container.repair.cost", this.anvil.maximumCost); + + if (this.anvil.maximumCost >= 40 && !this.mc.player.capabilities.isCreativeMode) + { + s = I18n.format("container.repair.expensive"); + i = 16736352; + } + else if (!this.anvil.getSlot(2).getHasStack()) + { + flag = false; + } + else if (!this.anvil.getSlot(2).canTakeStack(this.playerInventory.player)) + { + i = 16736352; + } + + if (flag) + { + int j = -16777216 | (i & 16579836) >> 2 | i & -16777216; + int k = this.xSize - 8 - this.fontRenderer.getStringWidth(s); + int l = 67; + + if (this.fontRenderer.getUnicodeFlag()) + { + drawRect(k - 3, 65, this.xSize - 7, 77, -16777216); + drawRect(k - 2, 66, this.xSize - 8, 76, -12895429); + } + else + { + this.fontRenderer.drawString(s, k, 68, j); + this.fontRenderer.drawString(s, k + 1, 67, j); + this.fontRenderer.drawString(s, k + 1, 68, j); + } + + this.fontRenderer.drawString(s, k, 67, i); + } + } + + GlStateManager.enableLighting(); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.nameField.textboxKeyTyped(typedChar, keyCode)) + { + this.renameItem(); + } + else + { + super.keyTyped(typedChar, keyCode); + } + } + + private void renameItem() + { + String s = this.nameField.getText(); + Slot slot = this.anvil.getSlot(0); + + if (slot != null && slot.getHasStack() && !slot.getStack().hasDisplayName() && s.equals(slot.getStack().getDisplayName())) + { + s = ""; + } + + this.anvil.updateItemName(s); + this.mc.player.connection.sendPacket(new CPacketCustomPayload("MC|ItemName", (new PacketBuffer(Unpooled.buffer())).writeString(s))); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.nameField.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + GlStateManager.disableLighting(); + GlStateManager.disableBlend(); + this.nameField.drawTextBox(); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(ANVIL_RESOURCE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(i + 59, j + 20, 0, this.ySize + (this.anvil.getSlot(0).getHasStack() ? 0 : 16), 110, 16); + + if ((this.anvil.getSlot(0).getHasStack() || this.anvil.getSlot(1).getHasStack()) && !this.anvil.getSlot(2).getHasStack()) + { + this.drawTexturedModalRect(i + 99, j + 45, this.xSize, 0, 28, 21); + } + } + + /** + * update the crafting window inventory with the items in the list + */ + public void sendAllContents(Container containerToSend, NonNullList itemsList) + { + this.sendSlotContents(containerToSend, 0, containerToSend.getSlot(0).getStack()); + } + + /** + * Sends the contents of an inventory slot to the client-side Container. This doesn't have to match the actual + * contents of that slot. + */ + public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) + { + if (slotInd == 0) + { + this.nameField.setText(stack.isEmpty() ? "" : stack.getDisplayName()); + this.nameField.setEnabled(!stack.isEmpty()); + + if (!stack.isEmpty()) + { + this.renameItem(); + } + } + } + + /** + * Sends two ints to the client-side Container. Used for furnace burning time, smelting progress, brewing progress, + * and enchanting level. Normally the first int identifies which variable to update, and the second contains the new + * value. Both are truncated to shorts in non-local SMP. + */ + public void sendWindowProperty(Container containerIn, int varToUpdate, int newValue) + { + } + + public void sendAllWindowProperties(Container containerIn, IInventory inventory) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackAvailable.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackAvailable.java new file mode 100644 index 0000000..62f5f4f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackAvailable.java @@ -0,0 +1,22 @@ +package net.minecraft.client.gui; + +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.ResourcePackListEntry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiResourcePackAvailable extends GuiResourcePackList +{ + public GuiResourcePackAvailable(Minecraft mcIn, int p_i45054_2_, int p_i45054_3_, List p_i45054_4_) + { + super(mcIn, p_i45054_2_, p_i45054_3_, p_i45054_4_); + } + + protected String getListHeader() + { + return I18n.format("resourcePack.available.title"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackList.java new file mode 100644 index 0000000..097e412 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackList.java @@ -0,0 +1,67 @@ +package net.minecraft.client.gui; + +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.resources.ResourcePackListEntry; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class GuiResourcePackList extends GuiListExtended +{ + protected final Minecraft mc; + protected final List resourcePackEntries; + + public GuiResourcePackList(Minecraft mcIn, int p_i45055_2_, int p_i45055_3_, List p_i45055_4_) + { + super(mcIn, p_i45055_2_, p_i45055_3_, 32, p_i45055_3_ - 55 + 4, 36); + this.mc = mcIn; + this.resourcePackEntries = p_i45055_4_; + this.centerListVertically = false; + this.setHasListHeader(true, (int)((float)mcIn.fontRenderer.FONT_HEIGHT * 1.5F)); + } + + /** + * Handles drawing a list's header row. + */ + protected void drawListHeader(int insideLeft, int insideTop, Tessellator tessellatorIn) + { + String s = TextFormatting.UNDERLINE + "" + TextFormatting.BOLD + this.getListHeader(); + this.mc.fontRenderer.drawString(s, insideLeft + this.width / 2 - this.mc.fontRenderer.getStringWidth(s) / 2, Math.min(this.top + 3, insideTop), 16777215); + } + + protected abstract String getListHeader(); + + public List getList() + { + return this.resourcePackEntries; + } + + protected int getSize() + { + return this.getList().size(); + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public ResourcePackListEntry getListEntry(int index) + { + return (ResourcePackListEntry)this.getList().get(index); + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return this.width; + } + + protected int getScrollBarX() + { + return this.right - 6; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackSelected.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackSelected.java new file mode 100644 index 0000000..5d21ded --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiResourcePackSelected.java @@ -0,0 +1,22 @@ +package net.minecraft.client.gui; + +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.ResourcePackListEntry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiResourcePackSelected extends GuiResourcePackList +{ + public GuiResourcePackSelected(Minecraft mcIn, int p_i45056_2_, int p_i45056_3_, List p_i45056_4_) + { + super(mcIn, p_i45056_2_, p_i45056_3_, p_i45056_4_); + } + + protected String getListHeader() + { + return I18n.format("resourcePack.selected.title"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreen.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreen.java new file mode 100644 index 0000000..2993d8e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreen.java @@ -0,0 +1,795 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.awt.Toolkit; +import java.awt.datatransfer.ClipboardOwner; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public abstract class GuiScreen extends Gui implements GuiYesNoCallback +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Set PROTOCOLS = Sets.newHashSet("http", "https"); + private static final Splitter NEWLINE_SPLITTER = Splitter.on('\n'); + /** Reference to the Minecraft object. */ + public Minecraft mc; + /** Holds a instance of RenderItem, used to draw the achievement icons on screen (is based on ItemStack) */ + protected RenderItem itemRender; + /** The width of the screen object. */ + public int width; + /** The height of the screen object. */ + public int height; + /** A list of all the buttons in this container. */ + protected List buttonList = Lists.newArrayList(); + /** A list of all the labels in this container. */ + protected List labelList = Lists.newArrayList(); + public boolean allowUserInput; + /** The FontRenderer used by GuiScreen */ + protected FontRenderer fontRenderer; + /** The button that was just pressed. */ + protected GuiButton selectedButton; + private int eventButton; + private long lastMouseEvent; + /** Tracks the number of fingers currently on the screen. Prevents subsequent fingers registering as clicks. */ + private int touchValue; + private URI clickedLinkURI; + private boolean focused; + protected boolean keyHandled, mouseHandled; // Forge: allow canceling key and mouse Post events from handleMouseInput and handleKeyboardInput + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + for (int i = 0; i < this.buttonList.size(); ++i) + { + ((GuiButton)this.buttonList.get(i)).drawButton(this.mc, mouseX, mouseY, partialTicks); + } + + for (int j = 0; j < this.labelList.size(); ++j) + { + ((GuiLabel)this.labelList.get(j)).drawLabel(this.mc, mouseX, mouseY); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.mc.displayGuiScreen((GuiScreen)null); + + if (this.mc.currentScreen == null) + { + this.mc.setIngameFocus(); + } + } + } + + /** + * Adds a control to this GUI's button list. Any type that subclasses button may be added (particularly, GuiSlider, + * but not text fields). + * + * @return The control passed in. + * + * @param buttonIn The control to add + */ + protected T addButton(T buttonIn) + { + this.buttonList.add(buttonIn); + return buttonIn; + } + + /** + * Returns a string stored in the system clipboard. + */ + public static String getClipboardString() + { + try + { + Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents((Object)null); + + if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) + { + return (String)transferable.getTransferData(DataFlavor.stringFlavor); + } + } + catch (Exception var1) + { + ; + } + + return ""; + } + + /** + * Stores the given string in the system clipboard + */ + public static void setClipboardString(String copyText) + { + if (!StringUtils.isEmpty(copyText)) + { + try + { + StringSelection stringselection = new StringSelection(copyText); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringselection, (ClipboardOwner)null); + } + catch (Exception var2) + { + ; + } + } + } + + protected void renderToolTip(ItemStack stack, int x, int y) + { + FontRenderer font = stack.getItem().getFontRenderer(stack); + net.minecraftforge.fml.client.config.GuiUtils.preItemToolTip(stack); + this.drawHoveringText(this.getItemToolTip(stack), x, y, (font == null ? fontRenderer : font)); + net.minecraftforge.fml.client.config.GuiUtils.postItemToolTip(); + } + + public List getItemToolTip(ItemStack p_191927_1_) + { + List list = p_191927_1_.getTooltip(this.mc.player, this.mc.gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); + + for (int i = 0; i < list.size(); ++i) + { + if (i == 0) + { + list.set(i, p_191927_1_.getRarity().rarityColor + (String)list.get(i)); + } + else + { + list.set(i, TextFormatting.GRAY + (String)list.get(i)); + } + } + + return list; + } + + /** + * Draws the given text as a tooltip. + */ + public void drawHoveringText(String text, int x, int y) + { + this.drawHoveringText(Arrays.asList(text), x, y); + } + + public void setFocused(boolean hasFocusedControlIn) + { + this.focused = hasFocusedControlIn; + } + + public boolean isFocused() + { + return this.focused; + } + + /** + * Draws a List of strings as a tooltip. Every entry is drawn on a seperate line. + */ + public void drawHoveringText(List textLines, int x, int y) + { + drawHoveringText(textLines, x, y, fontRenderer); + } + + protected void drawHoveringText(List textLines, int x, int y, FontRenderer font) + { + net.minecraftforge.fml.client.config.GuiUtils.drawHoveringText(textLines, x, y, width, height, -1, font); + if (false && !textLines.isEmpty()) + { + GlStateManager.disableRescaleNormal(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + int i = 0; + + for (String s : textLines) + { + int j = this.fontRenderer.getStringWidth(s); + + if (j > i) + { + i = j; + } + } + + int l1 = x + 12; + int i2 = y - 12; + int k = 8; + + if (textLines.size() > 1) + { + k += 2 + (textLines.size() - 1) * 10; + } + + if (l1 + i > this.width) + { + l1 -= 28 + i; + } + + if (i2 + k + 6 > this.height) + { + i2 = this.height - k - 6; + } + + this.zLevel = 300.0F; + this.itemRender.zLevel = 300.0F; + int l = -267386864; + this.drawGradientRect(l1 - 3, i2 - 4, l1 + i + 3, i2 - 3, -267386864, -267386864); + this.drawGradientRect(l1 - 3, i2 + k + 3, l1 + i + 3, i2 + k + 4, -267386864, -267386864); + this.drawGradientRect(l1 - 3, i2 - 3, l1 + i + 3, i2 + k + 3, -267386864, -267386864); + this.drawGradientRect(l1 - 4, i2 - 3, l1 - 3, i2 + k + 3, -267386864, -267386864); + this.drawGradientRect(l1 + i + 3, i2 - 3, l1 + i + 4, i2 + k + 3, -267386864, -267386864); + int i1 = 1347420415; + int j1 = 1344798847; + this.drawGradientRect(l1 - 3, i2 - 3 + 1, l1 - 3 + 1, i2 + k + 3 - 1, 1347420415, 1344798847); + this.drawGradientRect(l1 + i + 2, i2 - 3 + 1, l1 + i + 3, i2 + k + 3 - 1, 1347420415, 1344798847); + this.drawGradientRect(l1 - 3, i2 - 3, l1 + i + 3, i2 - 3 + 1, 1347420415, 1347420415); + this.drawGradientRect(l1 - 3, i2 + k + 2, l1 + i + 3, i2 + k + 3, 1344798847, 1344798847); + + for (int k1 = 0; k1 < textLines.size(); ++k1) + { + String s1 = textLines.get(k1); + this.fontRenderer.drawStringWithShadow(s1, (float)l1, (float)i2, -1); + + if (k1 == 0) + { + i2 += 2; + } + + i2 += 10; + } + + this.zLevel = 0.0F; + this.itemRender.zLevel = 0.0F; + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.enableRescaleNormal(); + } + } + + /** + * Draws the hover event specified by the given chat component + */ + protected void handleComponentHover(ITextComponent component, int x, int y) + { + if (component != null && component.getStyle().getHoverEvent() != null) + { + HoverEvent hoverevent = component.getStyle().getHoverEvent(); + + if (hoverevent.getAction() == HoverEvent.Action.SHOW_ITEM) + { + ItemStack itemstack = ItemStack.EMPTY; + + try + { + NBTBase nbtbase = JsonToNBT.getTagFromJson(hoverevent.getValue().getUnformattedText()); + + if (nbtbase instanceof NBTTagCompound) + { + itemstack = new ItemStack((NBTTagCompound)nbtbase); + } + } + catch (NBTException var9) + { + ; + } + + if (itemstack.isEmpty()) + { + this.drawHoveringText(TextFormatting.RED + "Invalid Item!", x, y); + } + else + { + this.renderToolTip(itemstack, x, y); + } + } + else if (hoverevent.getAction() == HoverEvent.Action.SHOW_ENTITY) + { + if (this.mc.gameSettings.advancedItemTooltips) + { + try + { + NBTTagCompound nbttagcompound = JsonToNBT.getTagFromJson(hoverevent.getValue().getUnformattedText()); + List list = Lists.newArrayList(); + list.add(nbttagcompound.getString("name")); + + if (nbttagcompound.hasKey("type", 8)) + { + String s = nbttagcompound.getString("type"); + list.add("Type: " + s); + } + + list.add(nbttagcompound.getString("id")); + this.drawHoveringText(list, x, y); + } + catch (NBTException var8) + { + this.drawHoveringText(TextFormatting.RED + "Invalid Entity!", x, y); + } + } + } + else if (hoverevent.getAction() == HoverEvent.Action.SHOW_TEXT) + { + this.drawHoveringText(this.mc.fontRenderer.listFormattedStringToWidth(hoverevent.getValue().getFormattedText(), Math.max(this.width / 2, 200)), x, y); + } + + GlStateManager.disableLighting(); + } + } + + /** + * Sets the text of the chat + */ + protected void setText(String newChatText, boolean shouldOverwrite) + { + } + + /** + * Executes the click event specified by the given chat component + */ + public boolean handleComponentClick(ITextComponent component) + { + if (component == null) + { + return false; + } + else + { + ClickEvent clickevent = component.getStyle().getClickEvent(); + + if (isShiftKeyDown()) + { + if (component.getStyle().getInsertion() != null) + { + this.setText(component.getStyle().getInsertion(), false); + } + } + else if (clickevent != null) + { + if (clickevent.getAction() == ClickEvent.Action.OPEN_URL) + { + if (!this.mc.gameSettings.chatLinks) + { + return false; + } + + try + { + URI uri = new URI(clickevent.getValue()); + String s = uri.getScheme(); + + if (s == null) + { + throw new URISyntaxException(clickevent.getValue(), "Missing protocol"); + } + + if (!PROTOCOLS.contains(s.toLowerCase(Locale.ROOT))) + { + throw new URISyntaxException(clickevent.getValue(), "Unsupported protocol: " + s.toLowerCase(Locale.ROOT)); + } + + if (this.mc.gameSettings.chatLinksPrompt) + { + this.clickedLinkURI = uri; + this.mc.displayGuiScreen(new GuiConfirmOpenLink(this, clickevent.getValue(), 31102009, false)); + } + else + { + this.openWebLink(uri); + } + } + catch (URISyntaxException urisyntaxexception) + { + LOGGER.error("Can't open url for {}", clickevent, urisyntaxexception); + } + } + else if (clickevent.getAction() == ClickEvent.Action.OPEN_FILE) + { + URI uri1 = (new File(clickevent.getValue())).toURI(); + this.openWebLink(uri1); + } + else if (clickevent.getAction() == ClickEvent.Action.SUGGEST_COMMAND) + { + this.setText(clickevent.getValue(), true); + } + else if (clickevent.getAction() == ClickEvent.Action.RUN_COMMAND) + { + this.sendChatMessage(clickevent.getValue(), false); + } + else + { + LOGGER.error("Don't know how to handle {}", (Object)clickevent); + } + + return true; + } + + return false; + } + } + + /** + * Used to add chat messages to the client's GuiChat. + */ + public void sendChatMessage(String msg) + { + this.sendChatMessage(msg, true); + } + + public void sendChatMessage(String msg, boolean addToChat) + { + msg = net.minecraftforge.event.ForgeEventFactory.onClientSendMessage(msg); + if (msg.isEmpty()) return; + if (addToChat) + { + this.mc.ingameGUI.getChatGUI().addToSentMessages(msg); + } + if (net.minecraftforge.client.ClientCommandHandler.instance.executeCommand(mc.player, msg) != 0) return; + + this.mc.player.sendChatMessage(msg); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (mouseButton == 0) + { + for (int i = 0; i < this.buttonList.size(); ++i) + { + GuiButton guibutton = this.buttonList.get(i); + + if (guibutton.mousePressed(this.mc, mouseX, mouseY)) + { + net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent.Pre event = new net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent.Pre(this, guibutton, this.buttonList); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) + break; + guibutton = event.getButton(); + this.selectedButton = guibutton; + guibutton.playPressSound(this.mc.getSoundHandler()); + this.actionPerformed(guibutton); + if (this.equals(this.mc.currentScreen)) + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.ActionPerformedEvent.Post(this, event.getButton(), this.buttonList)); + } + } + } + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + if (this.selectedButton != null && state == 0) + { + this.selectedButton.mouseReleased(mouseX, mouseY); + this.selectedButton = null; + } + } + + /** + * Called when a mouse button is pressed and the mouse is moved around. Parameters are : mouseX, mouseY, + * lastButtonClicked & timeSinceMouseClick. + */ + protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) + { + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + } + + /** + * Causes the screen to lay out its subcomponents again. This is the equivalent of the Java call + * Container.validate() + */ + public void setWorldAndResolution(Minecraft mc, int width, int height) + { + this.mc = mc; + this.itemRender = mc.getRenderItem(); + this.fontRenderer = mc.fontRenderer; + this.width = width; + this.height = height; + if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent.Pre(this, this.buttonList))) + { + this.buttonList.clear(); + this.initGui(); + } + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent.Post(this, this.buttonList)); + } + + /** + * Set the gui to the specified width and height + */ + public void setGuiSize(int w, int h) + { + this.width = w; + this.height = h; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + } + + /** + * Delegates mouse and keyboard input. + */ + public void handleInput() throws IOException + { + if (Mouse.isCreated()) + { + while (Mouse.next()) + { + this.mouseHandled = false; + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Pre(this))) continue; + this.handleMouseInput(); + if (this.equals(this.mc.currentScreen) && !this.mouseHandled) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.MouseInputEvent.Post(this)); + } + } + + if (Keyboard.isCreated()) + { + while (Keyboard.next()) + { + this.keyHandled = false; + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Pre(this))) continue; + this.handleKeyboardInput(); + if (this.equals(this.mc.currentScreen) && !this.keyHandled) net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent.Post(this)); + } + } + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + int i = Mouse.getEventX() * this.width / this.mc.displayWidth; + int j = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + int k = Mouse.getEventButton(); + + if (Mouse.getEventButtonState()) + { + if (this.mc.gameSettings.touchscreen && this.touchValue++ > 0) + { + return; + } + + this.eventButton = k; + this.lastMouseEvent = Minecraft.getSystemTime(); + this.mouseClicked(i, j, this.eventButton); + } + else if (k != -1) + { + if (this.mc.gameSettings.touchscreen && --this.touchValue > 0) + { + return; + } + + this.eventButton = -1; + this.mouseReleased(i, j, k); + } + else if (this.eventButton != -1 && this.lastMouseEvent > 0L) + { + long l = Minecraft.getSystemTime() - this.lastMouseEvent; + this.mouseClickMove(i, j, this.eventButton, l); + } + } + + /** + * Handles keyboard input. + */ + public void handleKeyboardInput() throws IOException + { + char c0 = Keyboard.getEventCharacter(); + + if (Keyboard.getEventKey() == 0 && c0 >= ' ' || Keyboard.getEventKeyState()) + { + this.keyTyped(c0, Keyboard.getEventKey()); + } + + this.mc.dispatchKeypresses(); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + } + + /** + * Draws either a gradient over the background screen (when it exists) or a flat gradient over background.png + */ + public void drawDefaultBackground() + { + this.drawWorldBackground(0); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.BackgroundDrawnEvent(this)); + } + + public void drawWorldBackground(int tint) + { + if (this.mc.world != null) + { + this.drawGradientRect(0, 0, this.width, this.height, -1072689136, -804253680); + } + else + { + this.drawBackground(tint); + } + } + + /** + * Draws the background (i is always 0 as of 1.2.2) + */ + public void drawBackground(int tint) + { + GlStateManager.disableLighting(); + GlStateManager.disableFog(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.mc.getTextureManager().bindTexture(OPTIONS_BACKGROUND); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f = 32.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)this.height, 0.0D).tex(0.0D, (double)((float)this.height / 32.0F + (float)tint)).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos((double)this.width, (double)this.height, 0.0D).tex((double)((float)this.width / 32.0F), (double)((float)this.height / 32.0F + (float)tint)).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos((double)this.width, 0.0D, 0.0D).tex((double)((float)this.width / 32.0F), (double)tint).color(64, 64, 64, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).tex(0.0D, (double)tint).color(64, 64, 64, 255).endVertex(); + tessellator.draw(); + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return true; + } + + public void confirmClicked(boolean result, int id) + { + if (id == 31102009) + { + if (result) + { + this.openWebLink(this.clickedLinkURI); + } + + this.clickedLinkURI = null; + this.mc.displayGuiScreen(this); + } + } + + private void openWebLink(URI url) + { + try + { + Class oclass = Class.forName("java.awt.Desktop"); + Object object = oclass.getMethod("getDesktop").invoke((Object)null); + oclass.getMethod("browse", URI.class).invoke(object, url); + } + catch (Throwable throwable1) + { + Throwable throwable = throwable1.getCause(); + LOGGER.error("Couldn't open link: {}", (Object)(throwable == null ? "" : throwable.getMessage())); + } + } + + /** + * Returns true if either windows ctrl key is down or if either mac meta key is down + */ + public static boolean isCtrlKeyDown() + { + if (Minecraft.IS_RUNNING_ON_MAC) + { + return Keyboard.isKeyDown(219) || Keyboard.isKeyDown(220); + } + else + { + return Keyboard.isKeyDown(29) || Keyboard.isKeyDown(157); + } + } + + /** + * Returns true if either shift key is down + */ + public static boolean isShiftKeyDown() + { + return Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54); + } + + /** + * Returns true if either alt key is down + */ + public static boolean isAltKeyDown() + { + return Keyboard.isKeyDown(56) || Keyboard.isKeyDown(184); + } + + public static boolean isKeyComboCtrlX(int keyID) + { + return keyID == 45 && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown(); + } + + public static boolean isKeyComboCtrlV(int keyID) + { + return keyID == 47 && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown(); + } + + public static boolean isKeyComboCtrlC(int keyID) + { + return keyID == 46 && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown(); + } + + public static boolean isKeyComboCtrlA(int keyID) + { + return keyID == 30 && isCtrlKeyDown() && !isShiftKeyDown() && !isAltKeyDown(); + } + + /** + * Called when the GUI is resized in order to update the world and the resolution + */ + public void onResize(Minecraft mcIn, int w, int h) + { + this.setWorldAndResolution(mcIn, w, h); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenAddServer.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenAddServer.java new file mode 100644 index 0000000..7d340d8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenAddServer.java @@ -0,0 +1,169 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Predicate; +import java.io.IOException; +import java.net.IDN; +import javax.annotation.Nullable; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.StringUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiScreenAddServer extends GuiScreen +{ + private final GuiScreen parentScreen; + private final ServerData serverData; + private GuiTextField serverIPField; + private GuiTextField serverNameField; + private GuiButton serverResourcePacks; + private final Predicate addressFilter = new Predicate() + { + public boolean apply(@Nullable String p_apply_1_) + { + if (StringUtils.isNullOrEmpty(p_apply_1_)) + { + return true; + } + else + { + String[] astring = p_apply_1_.split(":"); + + if (astring.length == 0) + { + return true; + } + else + { + try + { + String s = IDN.toASCII(astring[0]); + return true; + } + catch (IllegalArgumentException var4) + { + return false; + } + } + } + } + }; + + public GuiScreenAddServer(GuiScreen parentScreenIn, ServerData serverDataIn) + { + this.parentScreen = parentScreenIn; + this.serverData = serverDataIn; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.serverNameField.updateCursorCounter(); + this.serverIPField.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 18, I18n.format("addServer.add"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 18, I18n.format("gui.cancel"))); + this.serverResourcePacks = this.addButton(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 72, I18n.format("addServer.resourcePack") + ": " + this.serverData.getResourceMode().getMotd().getFormattedText())); + this.serverNameField = new GuiTextField(0, this.fontRenderer, this.width / 2 - 100, 66, 200, 20); + this.serverNameField.setFocused(true); + this.serverNameField.setText(this.serverData.serverName); + this.serverIPField = new GuiTextField(1, this.fontRenderer, this.width / 2 - 100, 106, 200, 20); + this.serverIPField.setMaxStringLength(128); + this.serverIPField.setText(this.serverData.serverIP); + this.serverIPField.setValidator(this.addressFilter); + (this.buttonList.get(0)).enabled = !this.serverIPField.getText().isEmpty() && this.serverIPField.getText().split(":").length > 0 && !this.serverNameField.getText().isEmpty(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 2) + { + this.serverData.setResourceMode(ServerData.ServerResourceMode.values()[(this.serverData.getResourceMode().ordinal() + 1) % ServerData.ServerResourceMode.values().length]); + this.serverResourcePacks.displayString = I18n.format("addServer.resourcePack") + ": " + this.serverData.getResourceMode().getMotd().getFormattedText(); + } + else if (button.id == 1) + { + this.parentScreen.confirmClicked(false, 0); + } + else if (button.id == 0) + { + this.serverData.serverName = this.serverNameField.getText(); + this.serverData.serverIP = this.serverIPField.getText(); + this.parentScreen.confirmClicked(true, 0); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + this.serverNameField.textboxKeyTyped(typedChar, keyCode); + this.serverIPField.textboxKeyTyped(typedChar, keyCode); + + if (keyCode == 15) + { + this.serverNameField.setFocused(!this.serverNameField.isFocused()); + this.serverIPField.setFocused(!this.serverIPField.isFocused()); + } + + if (keyCode == 28 || keyCode == 156) + { + this.actionPerformed(this.buttonList.get(0)); + } + + (this.buttonList.get(0)).enabled = !this.serverIPField.getText().isEmpty() && this.serverIPField.getText().split(":").length > 0 && !this.serverNameField.getText().isEmpty(); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.serverIPField.mouseClicked(mouseX, mouseY, mouseButton); + this.serverNameField.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("addServer.title"), this.width / 2, 17, 16777215); + this.drawString(this.fontRenderer, I18n.format("addServer.enterName"), this.width / 2 - 100, 53, 10526880); + this.drawString(this.fontRenderer, I18n.format("addServer.enterIp"), this.width / 2 - 100, 94, 10526880); + this.serverNameField.drawTextBox(); + this.serverIPField.drawTextBox(); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenBook.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenBook.java new file mode 100644 index 0000000..1cb2be5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenBook.java @@ -0,0 +1,657 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import com.google.gson.JsonParseException; +import io.netty.buffer.Unpooled; +import java.io.IOException; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemWrittenBook; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiScreenBook extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation BOOK_GUI_TEXTURES = new ResourceLocation("textures/gui/book.png"); + /** The player editing the book */ + private final EntityPlayer editingPlayer; + private final ItemStack book; + /** Whether the book is signed or can still be edited */ + private final boolean bookIsUnsigned; + /** Whether the book's title or contents has been modified since being opened */ + private boolean bookIsModified; + /** Determines if the signing screen is open */ + private boolean bookGettingSigned; + /** Update ticks since the gui was opened */ + private int updateCount; + private final int bookImageWidth = 192; + private final int bookImageHeight = 192; + private int bookTotalPages = 1; + private int currPage; + private NBTTagList bookPages; + private String bookTitle = ""; + private List cachedComponents; + private int cachedPage = -1; + private GuiScreenBook.NextPageButton buttonNextPage; + private GuiScreenBook.NextPageButton buttonPreviousPage; + private GuiButton buttonDone; + /** The GuiButton to sign this book. */ + private GuiButton buttonSign; + private GuiButton buttonFinalize; + private GuiButton buttonCancel; + + public GuiScreenBook(EntityPlayer player, ItemStack book, boolean isUnsigned) + { + this.editingPlayer = player; + this.book = book; + this.bookIsUnsigned = isUnsigned; + + if (book.hasTagCompound()) + { + NBTTagCompound nbttagcompound = book.getTagCompound(); + this.bookPages = nbttagcompound.getTagList("pages", 8).copy(); + this.bookTotalPages = this.bookPages.tagCount(); + + if (this.bookTotalPages < 1) + { + this.bookPages.appendTag(new NBTTagString("")); // Forge: fix MC-1685 + this.bookTotalPages = 1; + } + } + + if (this.bookPages == null && isUnsigned) + { + this.bookPages = new NBTTagList(); + this.bookPages.appendTag(new NBTTagString("")); + this.bookTotalPages = 1; + } + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + ++this.updateCount; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + + if (this.bookIsUnsigned) + { + this.buttonSign = this.addButton(new GuiButton(3, this.width / 2 - 100, 196, 98, 20, I18n.format("book.signButton"))); + this.buttonDone = this.addButton(new GuiButton(0, this.width / 2 + 2, 196, 98, 20, I18n.format("gui.done"))); + this.buttonFinalize = this.addButton(new GuiButton(5, this.width / 2 - 100, 196, 98, 20, I18n.format("book.finalizeButton"))); + this.buttonCancel = this.addButton(new GuiButton(4, this.width / 2 + 2, 196, 98, 20, I18n.format("gui.cancel"))); + } + else + { + this.buttonDone = this.addButton(new GuiButton(0, this.width / 2 - 100, 196, 200, 20, I18n.format("gui.done"))); + } + + int i = (this.width - 192) / 2; + int j = 2; + this.buttonNextPage = (GuiScreenBook.NextPageButton)this.addButton(new GuiScreenBook.NextPageButton(1, i + 120, 156, true)); + this.buttonPreviousPage = (GuiScreenBook.NextPageButton)this.addButton(new GuiScreenBook.NextPageButton(2, i + 38, 156, false)); + this.updateButtons(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + private void updateButtons() + { + this.buttonNextPage.visible = !this.bookGettingSigned && (this.currPage < this.bookTotalPages - 1 || this.bookIsUnsigned); + this.buttonPreviousPage.visible = !this.bookGettingSigned && this.currPage > 0; + this.buttonDone.visible = !this.bookIsUnsigned || !this.bookGettingSigned; + + if (this.bookIsUnsigned) + { + this.buttonSign.visible = !this.bookGettingSigned; + this.buttonCancel.visible = this.bookGettingSigned; + this.buttonFinalize.visible = this.bookGettingSigned; + this.buttonFinalize.enabled = !this.bookTitle.trim().isEmpty(); + } + } + + private void sendBookToServer(boolean publish) throws IOException + { + if (this.bookIsUnsigned && this.bookIsModified) + { + if (this.bookPages != null) + { + while (this.bookPages.tagCount() > 1) + { + String s = this.bookPages.getStringTagAt(this.bookPages.tagCount() - 1); + + if (!s.isEmpty()) + { + break; + } + + this.bookPages.removeTag(this.bookPages.tagCount() - 1); + } + + if (this.book.hasTagCompound()) + { + NBTTagCompound nbttagcompound = this.book.getTagCompound(); + nbttagcompound.setTag("pages", this.bookPages); + } + else + { + this.book.setTagInfo("pages", this.bookPages); + } + + String s1 = "MC|BEdit"; + + if (publish) + { + s1 = "MC|BSign"; + this.book.setTagInfo("author", new NBTTagString(this.editingPlayer.getName())); + this.book.setTagInfo("title", new NBTTagString(this.bookTitle.trim())); + } + + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeItemStack(this.book); + this.mc.getConnection().sendPacket(new CPacketCustomPayload(s1, packetbuffer)); + } + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 0) + { + this.mc.displayGuiScreen((GuiScreen)null); + this.sendBookToServer(false); + } + else if (button.id == 3 && this.bookIsUnsigned) + { + this.bookGettingSigned = true; + } + else if (button.id == 1) + { + if (this.currPage < this.bookTotalPages - 1) + { + ++this.currPage; + } + else if (this.bookIsUnsigned) + { + this.addNewPage(); + + if (this.currPage < this.bookTotalPages - 1) + { + ++this.currPage; + } + } + } + else if (button.id == 2) + { + if (this.currPage > 0) + { + --this.currPage; + } + } + else if (button.id == 5 && this.bookGettingSigned) + { + this.sendBookToServer(true); + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == 4 && this.bookGettingSigned) + { + this.bookGettingSigned = false; + } + + this.updateButtons(); + } + } + + private void addNewPage() + { + if (this.bookPages != null && this.bookPages.tagCount() < 50) + { + this.bookPages.appendTag(new NBTTagString("")); + ++this.bookTotalPages; + this.bookIsModified = true; + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + super.keyTyped(typedChar, keyCode); + + if (this.bookIsUnsigned) + { + if (this.bookGettingSigned) + { + this.keyTypedInTitle(typedChar, keyCode); + } + else + { + this.keyTypedInBook(typedChar, keyCode); + } + } + } + + /** + * Processes keystrokes when editing the text of a book + */ + private void keyTypedInBook(char typedChar, int keyCode) + { + if (GuiScreen.isKeyComboCtrlV(keyCode)) + { + this.pageInsertIntoCurrent(GuiScreen.getClipboardString()); + } + else + { + switch (keyCode) + { + case 14: + String s = this.pageGetCurrent(); + + if (!s.isEmpty()) + { + this.pageSetCurrent(s.substring(0, s.length() - 1)); + } + + return; + case 28: + case 156: + this.pageInsertIntoCurrent("\n"); + return; + default: + + if (ChatAllowedCharacters.isAllowedCharacter(typedChar)) + { + this.pageInsertIntoCurrent(Character.toString(typedChar)); + } + } + } + } + + /** + * Processes keystrokes when editing the title of a book + */ + private void keyTypedInTitle(char typedChar, int keyCode) throws IOException + { + switch (keyCode) + { + case 14: + + if (!this.bookTitle.isEmpty()) + { + this.bookTitle = this.bookTitle.substring(0, this.bookTitle.length() - 1); + this.updateButtons(); + } + + return; + case 28: + case 156: + + if (!this.bookTitle.isEmpty()) + { + this.sendBookToServer(true); + this.mc.displayGuiScreen((GuiScreen)null); + } + + return; + default: + + if (this.bookTitle.length() < 16 && ChatAllowedCharacters.isAllowedCharacter(typedChar)) + { + this.bookTitle = this.bookTitle + Character.toString(typedChar); + this.updateButtons(); + this.bookIsModified = true; + } + } + } + + /** + * Returns the entire text of the current page as determined by currPage + */ + private String pageGetCurrent() + { + return this.bookPages != null && this.currPage >= 0 && this.currPage < this.bookPages.tagCount() ? this.bookPages.getStringTagAt(this.currPage) : ""; + } + + /** + * Sets the text of the current page as determined by currPage + */ + private void pageSetCurrent(String p_146457_1_) + { + if (this.bookPages != null && this.currPage >= 0 && this.currPage < this.bookPages.tagCount()) + { + this.bookPages.set(this.currPage, new NBTTagString(p_146457_1_)); + this.bookIsModified = true; + } + } + + /** + * Processes any text getting inserted into the current page, enforcing the page size limit + */ + private void pageInsertIntoCurrent(String p_146459_1_) + { + String s = this.pageGetCurrent(); + String s1 = s + p_146459_1_; + int i = this.fontRenderer.getWordWrappedHeight(s1 + "" + TextFormatting.BLACK + "_", 118); + + if (i <= 128 && s1.length() < 256) + { + this.pageSetCurrent(s1); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(BOOK_GUI_TEXTURES); + int i = (this.width - 192) / 2; + int j = 2; + this.drawTexturedModalRect(i, 2, 0, 0, 192, 192); + + if (this.bookGettingSigned) + { + String s = this.bookTitle; + + if (this.bookIsUnsigned) + { + if (this.updateCount / 6 % 2 == 0) + { + s = s + "" + TextFormatting.BLACK + "_"; + } + else + { + s = s + "" + TextFormatting.GRAY + "_"; + } + } + + String s1 = I18n.format("book.editTitle"); + int k = this.fontRenderer.getStringWidth(s1); + this.fontRenderer.drawString(s1, i + 36 + (116 - k) / 2, 34, 0); + int l = this.fontRenderer.getStringWidth(s); + this.fontRenderer.drawString(s, i + 36 + (116 - l) / 2, 50, 0); + String s2 = I18n.format("book.byAuthor", this.editingPlayer.getName()); + int i1 = this.fontRenderer.getStringWidth(s2); + this.fontRenderer.drawString(TextFormatting.DARK_GRAY + s2, i + 36 + (116 - i1) / 2, 60, 0); + String s3 = I18n.format("book.finalizeWarning"); + this.fontRenderer.drawSplitString(s3, i + 36, 82, 116, 0); + } + else + { + String s4 = I18n.format("book.pageIndicator", this.currPage + 1, this.bookTotalPages); + String s5 = ""; + + if (this.bookPages != null && this.currPage >= 0 && this.currPage < this.bookPages.tagCount()) + { + s5 = this.bookPages.getStringTagAt(this.currPage); + } + + if (this.bookIsUnsigned) + { + if (this.fontRenderer.getBidiFlag()) + { + s5 = s5 + "_"; + } + else if (this.updateCount / 6 % 2 == 0) + { + s5 = s5 + "" + TextFormatting.BLACK + "_"; + } + else + { + s5 = s5 + "" + TextFormatting.GRAY + "_"; + } + } + else if (this.cachedPage != this.currPage) + { + if (ItemWrittenBook.validBookTagContents(this.book.getTagCompound())) + { + try + { + ITextComponent itextcomponent = ITextComponent.Serializer.jsonToComponent(s5); + this.cachedComponents = itextcomponent != null ? GuiUtilRenderComponents.splitText(itextcomponent, 116, this.fontRenderer, true, true) : null; + } + catch (JsonParseException var13) + { + this.cachedComponents = null; + } + } + else + { + TextComponentString textcomponentstring = new TextComponentString(TextFormatting.DARK_RED + "* Invalid book tag *"); + this.cachedComponents = Lists.newArrayList(textcomponentstring); + } + + this.cachedPage = this.currPage; + } + + int j1 = this.fontRenderer.getStringWidth(s4); + this.fontRenderer.drawString(s4, i - j1 + 192 - 44, 18, 0); + + if (this.cachedComponents == null) + { + this.fontRenderer.drawSplitString(s5, i + 36, 34, 116, 0); + } + else + { + int k1 = Math.min(128 / this.fontRenderer.FONT_HEIGHT, this.cachedComponents.size()); + + for (int l1 = 0; l1 < k1; ++l1) + { + ITextComponent itextcomponent2 = this.cachedComponents.get(l1); + this.fontRenderer.drawString(itextcomponent2.getUnformattedText(), i + 36, 34 + l1 * this.fontRenderer.FONT_HEIGHT, 0); + } + + ITextComponent itextcomponent1 = this.getClickedComponentAt(mouseX, mouseY); + + if (itextcomponent1 != null) + { + this.handleComponentHover(itextcomponent1, mouseX, mouseY); + } + } + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (mouseButton == 0) + { + ITextComponent itextcomponent = this.getClickedComponentAt(mouseX, mouseY); + + if (itextcomponent != null && this.handleComponentClick(itextcomponent)) + { + return; + } + } + + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Executes the click event specified by the given chat component + */ + public boolean handleComponentClick(ITextComponent component) + { + ClickEvent clickevent = component.getStyle().getClickEvent(); + + if (clickevent == null) + { + return false; + } + else if (clickevent.getAction() == ClickEvent.Action.CHANGE_PAGE) + { + String s = clickevent.getValue(); + + try + { + int i = Integer.parseInt(s) - 1; + + if (i >= 0 && i < this.bookTotalPages && i != this.currPage) + { + this.currPage = i; + this.updateButtons(); + return true; + } + } + catch (Throwable var5) + { + ; + } + + return false; + } + else + { + boolean flag = super.handleComponentClick(component); + + if (flag && clickevent.getAction() == ClickEvent.Action.RUN_COMMAND) + { + this.mc.displayGuiScreen((GuiScreen)null); + } + + return flag; + } + } + + @Nullable + public ITextComponent getClickedComponentAt(int p_175385_1_, int p_175385_2_) + { + if (this.cachedComponents == null) + { + return null; + } + else + { + int i = p_175385_1_ - (this.width - 192) / 2 - 36; + int j = p_175385_2_ - 2 - 16 - 16; + + if (i >= 0 && j >= 0) + { + int k = Math.min(128 / this.fontRenderer.FONT_HEIGHT, this.cachedComponents.size()); + + if (i <= 116 && j < this.mc.fontRenderer.FONT_HEIGHT * k + k) + { + int l = j / this.mc.fontRenderer.FONT_HEIGHT; + + if (l >= 0 && l < this.cachedComponents.size()) + { + ITextComponent itextcomponent = this.cachedComponents.get(l); + int i1 = 0; + + for (ITextComponent itextcomponent1 : itextcomponent) + { + if (itextcomponent1 instanceof TextComponentString) + { + i1 += this.mc.fontRenderer.getStringWidth(((TextComponentString)itextcomponent1).getText()); + + if (i1 > i) + { + return itextcomponent1; + } + } + } + } + + return null; + } + else + { + return null; + } + } + else + { + return null; + } + } + } + + @SideOnly(Side.CLIENT) + static class NextPageButton extends GuiButton + { + private final boolean isForward; + + public NextPageButton(int buttonId, int x, int y, boolean isForwardIn) + { + super(buttonId, x, y, 23, 13, ""); + this.isForward = isForwardIn; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + boolean flag = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.getTextureManager().bindTexture(GuiScreenBook.BOOK_GUI_TEXTURES); + int i = 0; + int j = 192; + + if (flag) + { + i += 23; + } + + if (!this.isForward) + { + j += 13; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, 23, 13); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenCustomizePresets.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenCustomizePresets.java new file mode 100644 index 0000000..2f2a9e1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenCustomizePresets.java @@ -0,0 +1,246 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.gen.ChunkGeneratorSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiScreenCustomizePresets extends GuiScreen +{ + private static final List PRESETS = Lists.newArrayList(); + private GuiScreenCustomizePresets.ListPreset list; + private GuiButton select; + private GuiTextField export; + private final GuiCustomizeWorldScreen parent; + protected String title = "Customize World Presets"; + private String shareText; + private String listText; + + public GuiScreenCustomizePresets(GuiCustomizeWorldScreen parentIn) + { + this.parent = parentIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.title = I18n.format("createWorld.customize.custom.presets.title"); + this.shareText = I18n.format("createWorld.customize.presets.share"); + this.listText = I18n.format("createWorld.customize.presets.list"); + this.export = new GuiTextField(2, this.fontRenderer, 50, 40, this.width - 100, 20); + this.list = new GuiScreenCustomizePresets.ListPreset(); + this.export.setMaxStringLength(2000); + this.export.setText(this.parent.saveValues()); + this.select = this.addButton(new GuiButton(0, this.width / 2 - 102, this.height - 27, 100, 20, I18n.format("createWorld.customize.presets.select"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 3, this.height - 27, 100, 20, I18n.format("gui.cancel"))); + this.updateButtonValidity(); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.list.handleMouseInput(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + this.export.mouseClicked(mouseX, mouseY, mouseButton); + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (!this.export.textboxKeyTyped(typedChar, keyCode)) + { + super.keyTyped(typedChar, keyCode); + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + switch (button.id) + { + case 0: + this.parent.loadValues(this.export.getText()); + this.mc.displayGuiScreen(this.parent); + break; + case 1: + this.mc.displayGuiScreen(this.parent); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.list.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 8, 16777215); + this.drawString(this.fontRenderer, this.shareText, 50, 30, 10526880); + this.drawString(this.fontRenderer, this.listText, 50, 70, 10526880); + this.export.drawTextBox(); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.export.updateCursorCounter(); + super.updateScreen(); + } + + public void updateButtonValidity() + { + this.select.enabled = this.hasValidSelection(); + } + + private boolean hasValidSelection() + { + return this.list.selected > -1 && this.list.selected < PRESETS.size() || this.export.getText().length() > 1; + } + + static + { + ChunkGeneratorSettings.Factory chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{ \"coordinateScale\":684.412, \"heightScale\":684.412, \"upperLimitScale\":512.0, \"lowerLimitScale\":512.0, \"depthNoiseScaleX\":200.0, \"depthNoiseScaleZ\":200.0, \"depthNoiseScaleExponent\":0.5, \"mainNoiseScaleX\":5000.0, \"mainNoiseScaleY\":1000.0, \"mainNoiseScaleZ\":5000.0, \"baseSize\":8.5, \"stretchY\":8.0, \"biomeDepthWeight\":2.0, \"biomeDepthOffset\":0.5, \"biomeScaleWeight\":2.0, \"biomeScaleOffset\":0.375, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":false, \"seaLevel\":255 }"); + ResourceLocation resourcelocation = new ResourceLocation("textures/gui/presets/water.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.waterWorld"), resourcelocation, chunkgeneratorsettings$factory)); + chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{\"coordinateScale\":3000.0, \"heightScale\":6000.0, \"upperLimitScale\":250.0, \"lowerLimitScale\":512.0, \"depthNoiseScaleX\":200.0, \"depthNoiseScaleZ\":200.0, \"depthNoiseScaleExponent\":0.5, \"mainNoiseScaleX\":80.0, \"mainNoiseScaleY\":160.0, \"mainNoiseScaleZ\":80.0, \"baseSize\":8.5, \"stretchY\":10.0, \"biomeDepthWeight\":1.0, \"biomeDepthOffset\":0.0, \"biomeScaleWeight\":1.0, \"biomeScaleOffset\":0.0, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":false, \"seaLevel\":63 }"); + resourcelocation = new ResourceLocation("textures/gui/presets/isles.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.isleLand"), resourcelocation, chunkgeneratorsettings$factory)); + chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{\"coordinateScale\":684.412, \"heightScale\":684.412, \"upperLimitScale\":512.0, \"lowerLimitScale\":512.0, \"depthNoiseScaleX\":200.0, \"depthNoiseScaleZ\":200.0, \"depthNoiseScaleExponent\":0.5, \"mainNoiseScaleX\":5000.0, \"mainNoiseScaleY\":1000.0, \"mainNoiseScaleZ\":5000.0, \"baseSize\":8.5, \"stretchY\":5.0, \"biomeDepthWeight\":2.0, \"biomeDepthOffset\":1.0, \"biomeScaleWeight\":4.0, \"biomeScaleOffset\":1.0, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":false, \"seaLevel\":63 }"); + resourcelocation = new ResourceLocation("textures/gui/presets/delight.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.caveDelight"), resourcelocation, chunkgeneratorsettings$factory)); + chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{\"coordinateScale\":738.41864, \"heightScale\":157.69133, \"upperLimitScale\":801.4267, \"lowerLimitScale\":1254.1643, \"depthNoiseScaleX\":374.93652, \"depthNoiseScaleZ\":288.65228, \"depthNoiseScaleExponent\":1.2092624, \"mainNoiseScaleX\":1355.9908, \"mainNoiseScaleY\":745.5343, \"mainNoiseScaleZ\":1183.464, \"baseSize\":1.8758626, \"stretchY\":1.7137525, \"biomeDepthWeight\":1.7553768, \"biomeDepthOffset\":3.4701107, \"biomeScaleWeight\":1.0, \"biomeScaleOffset\":2.535211, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":false, \"seaLevel\":63 }"); + resourcelocation = new ResourceLocation("textures/gui/presets/madness.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.mountains"), resourcelocation, chunkgeneratorsettings$factory)); + chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{\"coordinateScale\":684.412, \"heightScale\":684.412, \"upperLimitScale\":512.0, \"lowerLimitScale\":512.0, \"depthNoiseScaleX\":200.0, \"depthNoiseScaleZ\":200.0, \"depthNoiseScaleExponent\":0.5, \"mainNoiseScaleX\":1000.0, \"mainNoiseScaleY\":3000.0, \"mainNoiseScaleZ\":1000.0, \"baseSize\":8.5, \"stretchY\":10.0, \"biomeDepthWeight\":1.0, \"biomeDepthOffset\":0.0, \"biomeScaleWeight\":1.0, \"biomeScaleOffset\":0.0, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":false, \"seaLevel\":20 }"); + resourcelocation = new ResourceLocation("textures/gui/presets/drought.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.drought"), resourcelocation, chunkgeneratorsettings$factory)); + chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{\"coordinateScale\":684.412, \"heightScale\":684.412, \"upperLimitScale\":2.0, \"lowerLimitScale\":64.0, \"depthNoiseScaleX\":200.0, \"depthNoiseScaleZ\":200.0, \"depthNoiseScaleExponent\":0.5, \"mainNoiseScaleX\":80.0, \"mainNoiseScaleY\":160.0, \"mainNoiseScaleZ\":80.0, \"baseSize\":8.5, \"stretchY\":12.0, \"biomeDepthWeight\":1.0, \"biomeDepthOffset\":0.0, \"biomeScaleWeight\":1.0, \"biomeScaleOffset\":0.0, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":false, \"seaLevel\":6 }"); + resourcelocation = new ResourceLocation("textures/gui/presets/chaos.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.caveChaos"), resourcelocation, chunkgeneratorsettings$factory)); + chunkgeneratorsettings$factory = ChunkGeneratorSettings.Factory.jsonToFactory("{\"coordinateScale\":684.412, \"heightScale\":684.412, \"upperLimitScale\":512.0, \"lowerLimitScale\":512.0, \"depthNoiseScaleX\":200.0, \"depthNoiseScaleZ\":200.0, \"depthNoiseScaleExponent\":0.5, \"mainNoiseScaleX\":80.0, \"mainNoiseScaleY\":160.0, \"mainNoiseScaleZ\":80.0, \"baseSize\":8.5, \"stretchY\":12.0, \"biomeDepthWeight\":1.0, \"biomeDepthOffset\":0.0, \"biomeScaleWeight\":1.0, \"biomeScaleOffset\":0.0, \"useCaves\":true, \"useDungeons\":true, \"dungeonChance\":8, \"useStrongholds\":true, \"useVillages\":true, \"useMineShafts\":true, \"useTemples\":true, \"useRavines\":true, \"useWaterLakes\":true, \"waterLakeChance\":4, \"useLavaLakes\":true, \"lavaLakeChance\":80, \"useLavaOceans\":true, \"seaLevel\":40 }"); + resourcelocation = new ResourceLocation("textures/gui/presets/luck.png"); + PRESETS.add(new GuiScreenCustomizePresets.Info(I18n.format("createWorld.customize.custom.preset.goodLuck"), resourcelocation, chunkgeneratorsettings$factory)); + } + + @SideOnly(Side.CLIENT) + static class Info + { + public String name; + public ResourceLocation texture; + public ChunkGeneratorSettings.Factory settings; + + public Info(String nameIn, ResourceLocation textureIn, ChunkGeneratorSettings.Factory settingsIn) + { + this.name = nameIn; + this.texture = textureIn; + this.settings = settingsIn; + } + } + + @SideOnly(Side.CLIENT) + class ListPreset extends GuiSlot + { + public int selected = -1; + + public ListPreset() + { + super(GuiScreenCustomizePresets.this.mc, GuiScreenCustomizePresets.this.width, GuiScreenCustomizePresets.this.height, 80, GuiScreenCustomizePresets.this.height - 32, 38); + } + + protected int getSize() + { + return GuiScreenCustomizePresets.PRESETS.size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + this.selected = slotIndex; + GuiScreenCustomizePresets.this.updateButtonValidity(); + GuiScreenCustomizePresets.this.export.setText((GuiScreenCustomizePresets.PRESETS.get(GuiScreenCustomizePresets.this.list.selected)).settings.toString()); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return slotIndex == this.selected; + } + + protected void drawBackground() + { + } + + private void blitIcon(int p_178051_1_, int p_178051_2_, ResourceLocation texture) + { + int i = p_178051_1_ + 5; + GuiScreenCustomizePresets.this.drawHorizontalLine(i - 1, i + 32, p_178051_2_ - 1, -2039584); + GuiScreenCustomizePresets.this.drawHorizontalLine(i - 1, i + 32, p_178051_2_ + 32, -6250336); + GuiScreenCustomizePresets.this.drawVerticalLine(i - 1, p_178051_2_ - 1, p_178051_2_ + 32, -2039584); + GuiScreenCustomizePresets.this.drawVerticalLine(i + 32, p_178051_2_ - 1, p_178051_2_ + 32, -6250336); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(texture); + int j = 32; + int k = 32; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(i + 0), (double)(p_178051_2_ + 32), 0.0D).tex(0.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)(i + 32), (double)(p_178051_2_ + 32), 0.0D).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)(i + 32), (double)(p_178051_2_ + 0), 0.0D).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos((double)(i + 0), (double)(p_178051_2_ + 0), 0.0D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + GuiScreenCustomizePresets.Info guiscreencustomizepresets$info = GuiScreenCustomizePresets.PRESETS.get(slotIndex); + this.blitIcon(xPos, yPos, guiscreencustomizepresets$info.texture); + GuiScreenCustomizePresets.this.fontRenderer.drawString(guiscreencustomizepresets$info.name, xPos + 32 + 10, yPos + 14, 16777215); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenDemo.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenDemo.java new file mode 100644 index 0000000..6ef5133 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenDemo.java @@ -0,0 +1,91 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import java.net.URI; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiScreenDemo extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation DEMO_BACKGROUND_LOCATION = new ResourceLocation("textures/gui/demo_background.png"); + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + int i = -16; + this.buttonList.add(new GuiButton(1, this.width / 2 - 116, this.height / 2 + 62 + -16, 114, 20, I18n.format("demo.help.buy"))); + this.buttonList.add(new GuiButton(2, this.width / 2 + 2, this.height / 2 + 62 + -16, 114, 20, I18n.format("demo.help.later"))); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + switch (button.id) + { + case 1: + button.enabled = false; + + try + { + Class oclass = Class.forName("java.awt.Desktop"); + Object object = oclass.getMethod("getDesktop").invoke((Object)null); + oclass.getMethod("browse", URI.class).invoke(object, new URI("http://www.minecraft.net/store?source=demo")); + } + catch (Throwable throwable) + { + LOGGER.error("Couldn't open link", throwable); + } + + break; + case 2: + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + } + + /** + * Draws either a gradient over the background screen (when it exists) or a flat gradient over background.png + */ + public void drawDefaultBackground() + { + super.drawDefaultBackground(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(DEMO_BACKGROUND_LOCATION); + int i = (this.width - 248) / 2; + int j = (this.height - 166) / 2; + this.drawTexturedModalRect(i, j, 0, 0, 248, 166); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + int i = (this.width - 248) / 2 + 10; + int j = (this.height - 166) / 2 + 8; + this.fontRenderer.drawString(I18n.format("demo.help.title"), i, j, 2039583); + j = j + 12; + GameSettings gamesettings = this.mc.gameSettings; + this.fontRenderer.drawString(I18n.format("demo.help.movementShort", gamesettings.keyBindForward.getDisplayName(), gamesettings.keyBindLeft.getDisplayName(), gamesettings.keyBindBack.getDisplayName(), gamesettings.keyBindRight.getDisplayName()), i, j, 5197647); + this.fontRenderer.drawString(I18n.format("demo.help.movementMouse"), i, j + 12, 5197647); + this.fontRenderer.drawString(I18n.format("demo.help.jump", gamesettings.keyBindJump.getDisplayName()), i, j + 24, 5197647); + this.fontRenderer.drawString(I18n.format("demo.help.inventory", gamesettings.keyBindInventory.getDisplayName()), i, j + 36, 5197647); + this.fontRenderer.drawSplitString(I18n.format("demo.help.fullWrapped"), i, j + 68, 218, 2039583); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenOptionsSounds.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenOptionsSounds.java new file mode 100644 index 0000000..efe554c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenOptionsSounds.java @@ -0,0 +1,197 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiScreenOptionsSounds extends GuiScreen +{ + private final GuiScreen parent; + /** Reference to the GameSettings object. */ + private final GameSettings game_settings_4; + protected String title = "Options"; + private String offDisplayString; + + public GuiScreenOptionsSounds(GuiScreen parentIn, GameSettings settingsIn) + { + this.parent = parentIn; + this.game_settings_4 = settingsIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.title = I18n.format("options.sounds.title"); + this.offDisplayString = I18n.format("options.off"); + int i = 0; + this.buttonList.add(new GuiScreenOptionsSounds.Button(SoundCategory.MASTER.ordinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), SoundCategory.MASTER, true)); + i = i + 2; + + for (SoundCategory soundcategory : SoundCategory.values()) + { + if (soundcategory != SoundCategory.MASTER) + { + this.buttonList.add(new GuiScreenOptionsSounds.Button(soundcategory.ordinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 - 12 + 24 * (i >> 1), soundcategory, false)); + ++i; + } + } + + int j = this.width / 2 - 75; + int k = this.height / 6 - 12; + ++i; + this.buttonList.add(new GuiOptionButton(201, j, k + 24 * (i >> 1), GameSettings.Options.SHOW_SUBTITLES, this.game_settings_4.getKeyBinding(GameSettings.Options.SHOW_SUBTITLES))); + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, I18n.format("gui.done"))); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.mc.gameSettings.saveOptions(); + } + + super.keyTyped(typedChar, keyCode); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 200) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parent); + } + else if (button.id == 201) + { + this.mc.gameSettings.setOptionValue(GameSettings.Options.SHOW_SUBTITLES, 1); + button.displayString = this.mc.gameSettings.getKeyBinding(GameSettings.Options.SHOW_SUBTITLES); + this.mc.gameSettings.saveOptions(); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 15, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + protected String getDisplayString(SoundCategory category) + { + float f = this.game_settings_4.getSoundLevel(category); + return f == 0.0F ? this.offDisplayString : (int)(f * 100.0F) + "%"; + } + + @SideOnly(Side.CLIENT) + class Button extends GuiButton + { + private final SoundCategory category; + private final String categoryName; + public float volume = 1.0F; + public boolean pressed; + + public Button(int buttonId, int x, int y, SoundCategory categoryIn, boolean master) + { + super(buttonId, x, y, master ? 310 : 150, 20, ""); + this.category = categoryIn; + this.categoryName = I18n.format("soundCategory." + categoryIn.getName()); + this.displayString = this.categoryName + ": " + GuiScreenOptionsSounds.this.getDisplayString(categoryIn); + this.volume = GuiScreenOptionsSounds.this.game_settings_4.getSoundLevel(categoryIn); + } + + /** + * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering + * over this button. + */ + protected int getHoverState(boolean mouseOver) + { + return 0; + } + + /** + * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e). + */ + protected void mouseDragged(Minecraft mc, int mouseX, int mouseY) + { + if (this.visible) + { + if (this.pressed) + { + this.volume = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8); + this.volume = MathHelper.clamp(this.volume, 0.0F, 1.0F); + mc.gameSettings.setSoundLevel(this.category, this.volume); + mc.gameSettings.saveOptions(); + this.displayString = this.categoryName + ": " + GuiScreenOptionsSounds.this.getDisplayString(this.category); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.x + (int)(this.volume * (float)(this.width - 8)), this.y, 0, 66, 4, 20); + this.drawTexturedModalRect(this.x + (int)(this.volume * (float)(this.width - 8)) + 4, this.y, 196, 66, 4, 20); + } + } + + /** + * Returns true if the mouse has been pressed on this control. Equivalent of + * MouseListener.mousePressed(MouseEvent e). + */ + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + if (super.mousePressed(mc, mouseX, mouseY)) + { + this.volume = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8); + this.volume = MathHelper.clamp(this.volume, 0.0F, 1.0F); + mc.gameSettings.setSoundLevel(this.category, this.volume); + mc.gameSettings.saveOptions(); + this.displayString = this.categoryName + ": " + GuiScreenOptionsSounds.this.getDisplayString(this.category); + this.pressed = true; + return true; + } + else + { + return false; + } + } + + public void playPressSound(SoundHandler soundHandlerIn) + { + } + + /** + * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e). + */ + public void mouseReleased(int mouseX, int mouseY) + { + if (this.pressed) + { + GuiScreenOptionsSounds.this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + } + + this.pressed = false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenRealmsProxy.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenRealmsProxy.java new file mode 100644 index 0000000..4e1a58e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenRealmsProxy.java @@ -0,0 +1,254 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import net.minecraft.item.ItemStack; +import net.minecraft.realms.RealmsButton; +import net.minecraft.realms.RealmsScreen; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiScreenRealmsProxy extends GuiScreen +{ + private final RealmsScreen proxy; + + public GuiScreenRealmsProxy(RealmsScreen proxyIn) + { + this.proxy = proxyIn; + this.buttonList = Collections.synchronizedList(Lists.newArrayList()); + } + + public RealmsScreen getProxy() + { + return this.proxy; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.proxy.init(); + super.initGui(); + } + + public void drawCenteredString(String text, int x, int y, int color) + { + super.drawCenteredString(this.fontRenderer, text, x, y, color); + } + + public void drawString(String text, int x, int y, int color, boolean p_154322_5_) + { + if (p_154322_5_) + { + super.drawString(this.fontRenderer, text, x, y, color); + } + else + { + this.fontRenderer.drawString(text, x, y, color); + } + } + + /** + * Draws a textured rectangle at the current z-value. + */ + public void drawTexturedModalRect(int x, int y, int textureX, int textureY, int width, int height) + { + this.proxy.blit(x, y, textureX, textureY, width, height); + super.drawTexturedModalRect(x, y, textureX, textureY, width, height); + } + + /** + * Draws a rectangle with a vertical gradient between the specified colors (ARGB format). Args : x1, y1, x2, y2, + * topColor, bottomColor + */ + public void drawGradientRect(int left, int top, int right, int bottom, int startColor, int endColor) + { + super.drawGradientRect(left, top, right, bottom, startColor, endColor); + } + + /** + * Draws either a gradient over the background screen (when it exists) or a flat gradient over background.png + */ + public void drawDefaultBackground() + { + super.drawDefaultBackground(); + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return super.doesGuiPauseGame(); + } + + public void drawWorldBackground(int tint) + { + super.drawWorldBackground(tint); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.proxy.render(mouseX, mouseY, partialTicks); + } + + public void renderToolTip(ItemStack stack, int x, int y) + { + super.renderToolTip(stack, x, y); + } + + /** + * Draws the given text as a tooltip. + */ + public void drawHoveringText(String text, int x, int y) + { + super.drawHoveringText(text, x, y); + } + + /** + * Draws a List of strings as a tooltip. Every entry is drawn on a seperate line. + */ + public void drawHoveringText(List textLines, int x, int y) + { + super.drawHoveringText(textLines, x, y); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.proxy.tick(); + super.updateScreen(); + } + + public int getFontHeight() + { + return this.fontRenderer.FONT_HEIGHT; + } + + public int getStringWidth(String text) + { + return this.fontRenderer.getStringWidth(text); + } + + public void fontDrawShadow(String text, int x, int y, int color) + { + this.fontRenderer.drawStringWithShadow(text, (float)x, (float)y, color); + } + + public List fontSplit(String text, int wrapWidth) + { + return this.fontRenderer.listFormattedStringToWidth(text, wrapWidth); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + public final void actionPerformed(GuiButton button) throws IOException + { + this.proxy.buttonClicked(((GuiButtonRealmsProxy)button).getRealmsButton()); + } + + public void buttonsClear() + { + this.buttonList.clear(); + } + + public void buttonsAdd(RealmsButton button) + { + this.buttonList.add(button.getProxy()); + } + + public List buttons() + { + List list = Lists.newArrayListWithExpectedSize(this.buttonList.size()); + + for (GuiButton guibutton : this.buttonList) + { + list.add(((GuiButtonRealmsProxy)guibutton).getRealmsButton()); + } + + return list; + } + + public void buttonsRemove(RealmsButton button) + { + this.buttonList.remove(button.getProxy()); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + public void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + this.proxy.mouseClicked(mouseX, mouseY, mouseButton); + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + this.proxy.mouseEvent(); + super.handleMouseInput(); + } + + /** + * Handles keyboard input. + */ + public void handleKeyboardInput() throws IOException + { + this.proxy.keyboardEvent(); + super.handleKeyboardInput(); + } + + /** + * Called when a mouse button is released. + */ + public void mouseReleased(int mouseX, int mouseY, int state) + { + this.proxy.mouseReleased(mouseX, mouseY, state); + } + + /** + * Called when a mouse button is pressed and the mouse is moved around. Parameters are : mouseX, mouseY, + * lastButtonClicked & timeSinceMouseClick. + */ + public void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) + { + this.proxy.mouseDragged(mouseX, mouseY, clickedMouseButton, timeSinceLastClick); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + public void keyTyped(char typedChar, int keyCode) throws IOException + { + this.proxy.keyPressed(typedChar, keyCode); + } + + public void confirmClicked(boolean result, int id) + { + this.proxy.confirmResult(result, id); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + this.proxy.removed(); + super.onGuiClosed(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenResourcePacks.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenResourcePacks.java new file mode 100644 index 0000000..ff562b4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenResourcePacks.java @@ -0,0 +1,211 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.ResourcePackListEntry; +import net.minecraft.client.resources.ResourcePackListEntryDefault; +import net.minecraft.client.resources.ResourcePackListEntryFound; +import net.minecraft.client.resources.ResourcePackListEntryServer; +import net.minecraft.client.resources.ResourcePackRepository; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiScreenResourcePacks extends GuiScreen +{ + private final GuiScreen parentScreen; + /** List of available resource packs */ + private List availableResourcePacks; + /** List of selected resource packs */ + private List selectedResourcePacks; + /** List component that contains the available resource packs */ + private GuiResourcePackAvailable availableResourcePacksList; + /** List component that contains the selected resource packs */ + private GuiResourcePackSelected selectedResourcePacksList; + private boolean changed; + + public GuiScreenResourcePacks(GuiScreen parentScreenIn) + { + this.parentScreen = parentScreenIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.add(new GuiOptionButton(2, this.width / 2 - 154, this.height - 48, I18n.format("resourcePack.openFolder"))); + this.buttonList.add(new GuiOptionButton(1, this.width / 2 + 4, this.height - 48, I18n.format("gui.done"))); + + if (!this.changed) + { + this.availableResourcePacks = Lists.newArrayList(); + this.selectedResourcePacks = Lists.newArrayList(); + ResourcePackRepository resourcepackrepository = this.mc.getResourcePackRepository(); + resourcepackrepository.updateRepositoryEntriesAll(); + List list = Lists.newArrayList(resourcepackrepository.getRepositoryEntriesAll()); + list.removeAll(resourcepackrepository.getRepositoryEntries()); + + for (ResourcePackRepository.Entry resourcepackrepository$entry : list) + { + this.availableResourcePacks.add(new ResourcePackListEntryFound(this, resourcepackrepository$entry)); + } + + ResourcePackRepository.Entry resourcepackrepository$entry2 = resourcepackrepository.getResourcePackEntry(); + + if (resourcepackrepository$entry2 != null) + { + this.selectedResourcePacks.add(new ResourcePackListEntryServer(this, resourcepackrepository.getServerResourcePack())); + } + + for (ResourcePackRepository.Entry resourcepackrepository$entry1 : Lists.reverse(resourcepackrepository.getRepositoryEntries())) + { + this.selectedResourcePacks.add(new ResourcePackListEntryFound(this, resourcepackrepository$entry1)); + } + + this.selectedResourcePacks.add(new ResourcePackListEntryDefault(this)); + } + + this.availableResourcePacksList = new GuiResourcePackAvailable(this.mc, 200, this.height, this.availableResourcePacks); + this.availableResourcePacksList.setSlotXBoundsFromLeft(this.width / 2 - 4 - 200); + this.availableResourcePacksList.registerScrollButtons(7, 8); + this.selectedResourcePacksList = new GuiResourcePackSelected(this.mc, 200, this.height, this.selectedResourcePacks); + this.selectedResourcePacksList.setSlotXBoundsFromLeft(this.width / 2 + 4); + this.selectedResourcePacksList.registerScrollButtons(7, 8); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.selectedResourcePacksList.handleMouseInput(); + this.availableResourcePacksList.handleMouseInput(); + } + + public boolean hasResourcePackEntry(ResourcePackListEntry resourcePackEntry) + { + return this.selectedResourcePacks.contains(resourcePackEntry); + } + + /** + * Returns the list containing the resource pack entry, returns the selected list if it is selected, otherwise + * returns the available list + */ + public List getListContaining(ResourcePackListEntry resourcePackEntry) + { + return this.hasResourcePackEntry(resourcePackEntry) ? this.selectedResourcePacks : this.availableResourcePacks; + } + + /** + * Returns a list containing the available resource packs + */ + public List getAvailableResourcePacks() + { + return this.availableResourcePacks; + } + + /** + * Returns a list containing the selected resource packs + */ + public List getSelectedResourcePacks() + { + return this.selectedResourcePacks; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 2) + { + File file1 = this.mc.getResourcePackRepository().getDirResourcepacks(); + OpenGlHelper.openFile(file1); + } + else if (button.id == 1) + { + if (this.changed) + { + List list = Lists.newArrayList(); + + for (ResourcePackListEntry resourcepacklistentry : this.selectedResourcePacks) + { + if (resourcepacklistentry instanceof ResourcePackListEntryFound) + { + list.add(((ResourcePackListEntryFound)resourcepacklistentry).getResourcePackEntry()); + } + } + + Collections.reverse(list); + this.mc.getResourcePackRepository().setRepositories(list); + this.mc.gameSettings.resourcePacks.clear(); + this.mc.gameSettings.incompatibleResourcePacks.clear(); + + for (ResourcePackRepository.Entry resourcepackrepository$entry : list) + { + this.mc.gameSettings.resourcePacks.add(resourcepackrepository$entry.getResourcePackName()); + + if (resourcepackrepository$entry.getPackFormat() != 3) + { + this.mc.gameSettings.incompatibleResourcePacks.add(resourcepackrepository$entry.getResourcePackName()); + } + } + + this.mc.gameSettings.saveOptions(); + this.mc.refreshResources(); + } + + this.mc.displayGuiScreen(this.parentScreen); + } + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.availableResourcePacksList.mouseClicked(mouseX, mouseY, mouseButton); + this.selectedResourcePacksList.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + super.mouseReleased(mouseX, mouseY, state); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawBackground(0); + this.availableResourcePacksList.drawScreen(mouseX, mouseY, partialTicks); + this.selectedResourcePacksList.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, I18n.format("resourcePack.title"), this.width / 2, 16, 16777215); + this.drawCenteredString(this.fontRenderer, I18n.format("resourcePack.folderInfo"), this.width / 2 - 77, this.height - 26, 8421504); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Marks the selected resource packs list as changed to trigger a resource reload when the screen is closed + */ + public void markChanged() + { + this.changed = true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenServerList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenServerList.java new file mode 100644 index 0000000..094df2c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenServerList.java @@ -0,0 +1,113 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiScreenServerList extends GuiScreen +{ + private final GuiScreen lastScreen; + private final ServerData serverData; + private GuiTextField ipEdit; + + public GuiScreenServerList(GuiScreen lastScreenIn, ServerData serverDataIn) + { + this.lastScreen = lastScreenIn; + this.serverData = serverDataIn; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.ipEdit.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, I18n.format("selectServer.select"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, I18n.format("gui.cancel"))); + this.ipEdit = new GuiTextField(2, this.fontRenderer, this.width / 2 - 100, 116, 200, 20); + this.ipEdit.setMaxStringLength(128); + this.ipEdit.setFocused(true); + this.ipEdit.setText(this.mc.gameSettings.lastServer); + (this.buttonList.get(0)).enabled = !this.ipEdit.getText().isEmpty() && this.ipEdit.getText().split(":").length > 0; + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + this.mc.gameSettings.lastServer = this.ipEdit.getText(); + this.mc.gameSettings.saveOptions(); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 1) + { + this.lastScreen.confirmClicked(false, 0); + } + else if (button.id == 0) + { + this.serverData.serverIP = this.ipEdit.getText(); + this.lastScreen.confirmClicked(true, 0); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.ipEdit.textboxKeyTyped(typedChar, keyCode)) + { + (this.buttonList.get(0)).enabled = !this.ipEdit.getText().isEmpty() && this.ipEdit.getText().split(":").length > 0; + } + else if (keyCode == 28 || keyCode == 156) + { + this.actionPerformed(this.buttonList.get(0)); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.ipEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("selectServer.direct"), this.width / 2, 20, 16777215); + this.drawString(this.fontRenderer, I18n.format("addServer.enterIp"), this.width / 2 - 100, 100, 10526880); + this.ipEdit.drawTextBox(); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenWorking.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenWorking.java new file mode 100644 index 0000000..bd38470 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiScreenWorking.java @@ -0,0 +1,75 @@ +package net.minecraft.client.gui; + +import net.minecraft.util.IProgressUpdate; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiScreenWorking extends GuiScreen implements IProgressUpdate +{ + private String title = ""; + private String stage = ""; + private int progress; + private boolean doneWorking; + + /** + * Shows the 'Saving level' string. + */ + public void displaySavingString(String message) + { + this.resetProgressAndMessage(message); + } + + /** + * this string, followed by "working..." and then the "% complete" are the 3 lines shown. This resets progress to 0, + * and the WorkingString to "working...". + */ + public void resetProgressAndMessage(String message) + { + this.title = message; + this.displayLoadingString("Working..."); + } + + /** + * Displays a string on the loading screen supposed to indicate what is being done currently. + */ + public void displayLoadingString(String message) + { + this.stage = message; + this.setLoadingProgress(0); + } + + /** + * Updates the progress bar on the loading screen to the specified amount. + */ + public void setLoadingProgress(int progress) + { + this.progress = progress; + } + + public void setDoneWorking() + { + this.doneWorking = true; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + if (this.doneWorking) + { + if (!this.mc.isConnectedToRealms()) + { + this.mc.displayGuiScreen((GuiScreen)null); + } + } + else + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 70, 16777215); + this.drawCenteredString(this.fontRenderer, this.stage + " " + this.progress + "%", this.width / 2, 90, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiShareToLan.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiShareToLan.java new file mode 100644 index 0000000..00c9628 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiShareToLan.java @@ -0,0 +1,119 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiShareToLan extends GuiScreen +{ + private final GuiScreen lastScreen; + private GuiButton allowCheatsButton; + private GuiButton gameModeButton; + private String gameMode = "survival"; + private boolean allowCheats; + + public GuiShareToLan(GuiScreen lastScreenIn) + { + this.lastScreen = lastScreenIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + this.buttonList.add(new GuiButton(101, this.width / 2 - 155, this.height - 28, 150, 20, I18n.format("lanServer.start"))); + this.buttonList.add(new GuiButton(102, this.width / 2 + 5, this.height - 28, 150, 20, I18n.format("gui.cancel"))); + this.gameModeButton = this.addButton(new GuiButton(104, this.width / 2 - 155, 100, 150, 20, I18n.format("selectWorld.gameMode"))); + this.allowCheatsButton = this.addButton(new GuiButton(103, this.width / 2 + 5, 100, 150, 20, I18n.format("selectWorld.allowCommands"))); + this.updateDisplayNames(); + } + + private void updateDisplayNames() + { + this.gameModeButton.displayString = I18n.format("selectWorld.gameMode") + ": " + I18n.format("selectWorld.gameMode." + this.gameMode); + this.allowCheatsButton.displayString = I18n.format("selectWorld.allowCommands") + " "; + + if (this.allowCheats) + { + this.allowCheatsButton.displayString = this.allowCheatsButton.displayString + I18n.format("options.on"); + } + else + { + this.allowCheatsButton.displayString = this.allowCheatsButton.displayString + I18n.format("options.off"); + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 102) + { + this.mc.displayGuiScreen(this.lastScreen); + } + else if (button.id == 104) + { + if ("spectator".equals(this.gameMode)) + { + this.gameMode = "creative"; + } + else if ("creative".equals(this.gameMode)) + { + this.gameMode = "adventure"; + } + else if ("adventure".equals(this.gameMode)) + { + this.gameMode = "survival"; + } + else + { + this.gameMode = "spectator"; + } + + this.updateDisplayNames(); + } + else if (button.id == 103) + { + this.allowCheats = !this.allowCheats; + this.updateDisplayNames(); + } + else if (button.id == 101) + { + this.mc.displayGuiScreen((GuiScreen)null); + String s = this.mc.getIntegratedServer().shareToLAN(GameType.getByName(this.gameMode), this.allowCheats); + ITextComponent itextcomponent; + + if (s != null) + { + itextcomponent = new TextComponentTranslation("commands.publish.started", new Object[] {s}); + } + else + { + itextcomponent = new TextComponentString("commands.publish.failed"); + } + + this.mc.ingameGUI.getChatGUI().printChatMessage(itextcomponent); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("lanServer.title"), this.width / 2, 50, 16777215); + this.drawCenteredString(this.fontRenderer, I18n.format("lanServer.otherPlayers"), this.width / 2, 82, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.java new file mode 100644 index 0000000..77c1e69 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSimpleScrolledSelectionListProxy.java @@ -0,0 +1,159 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.realms.RealmsSimpleScrolledSelectionList; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSimpleScrolledSelectionListProxy extends GuiSlot +{ + private final RealmsSimpleScrolledSelectionList realmsScrolledSelectionList; + + public GuiSimpleScrolledSelectionListProxy(RealmsSimpleScrolledSelectionList realmsScrolledSelectionListIn, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn) + { + super(Minecraft.getMinecraft(), widthIn, heightIn, topIn, bottomIn, slotHeightIn); + this.realmsScrolledSelectionList = realmsScrolledSelectionListIn; + } + + protected int getSize() + { + return this.realmsScrolledSelectionList.getItemCount(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + this.realmsScrolledSelectionList.selectItem(slotIndex, isDoubleClick, mouseX, mouseY); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return this.realmsScrolledSelectionList.isSelectedItem(slotIndex); + } + + protected void drawBackground() + { + this.realmsScrolledSelectionList.renderBackground(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + this.realmsScrolledSelectionList.renderItem(slotIndex, xPos, yPos, heightIn, mouseXIn, mouseYIn); + } + + public int getWidth() + { + return this.width; + } + + public int getMouseY() + { + return this.mouseY; + } + + public int getMouseX() + { + return this.mouseX; + } + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.realmsScrolledSelectionList.getMaxPosition(); + } + + protected int getScrollBarX() + { + return this.realmsScrolledSelectionList.getScrollbarPosition(); + } + + public void handleMouseInput() + { + super.handleMouseInput(); + } + + public void drawScreen(int mouseXIn, int mouseYIn, float partialTicks) + { + if (this.visible) + { + this.mouseX = mouseXIn; + this.mouseY = mouseYIn; + this.drawBackground(); + int i = this.getScrollBarX(); + int j = i + 6; + this.bindAmountScrolled(); + GlStateManager.disableLighting(); + GlStateManager.disableFog(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + int k = this.left + this.width / 2 - this.getListWidth() / 2 + 2; + int l = this.top + 4 - (int)this.amountScrolled; + + if (this.hasListHeader) + { + this.drawListHeader(k, l, tessellator); + } + + this.drawSelectionBox(k, l, mouseXIn, mouseYIn, partialTicks); + GlStateManager.disableDepth(); + this.overlayBackground(0, this.top, 255, 255); + this.overlayBackground(this.bottom, this.height, 255, 255); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); + GlStateManager.disableAlpha(); + GlStateManager.shadeModel(7425); + GlStateManager.disableTexture2D(); + int i1 = this.getMaxScroll(); + + if (i1 > 0) + { + int j1 = (this.bottom - this.top) * (this.bottom - this.top) / this.getContentHeight(); + j1 = MathHelper.clamp(j1, 32, this.bottom - this.top - 8); + int k1 = (int)this.amountScrolled * (this.bottom - this.top - j1) / i1 + this.top; + + if (k1 < this.top) + { + k1 = this.top; + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)j, (double)this.bottom, 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)j, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)i, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)(k1 + j1), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j, (double)(k1 + j1), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j, (double)k1, 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)i, (double)k1, 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)(k1 + j1 - 1), 0.0D).tex(0.0D, 1.0D).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)(j - 1), (double)(k1 + j1 - 1), 0.0D).tex(1.0D, 1.0D).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)(j - 1), (double)k1, 0.0D).tex(1.0D, 0.0D).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)i, (double)k1, 0.0D).tex(0.0D, 0.0D).color(192, 192, 192, 255).endVertex(); + tessellator.draw(); + } + + this.renderDecorations(mouseXIn, mouseYIn); + GlStateManager.enableTexture2D(); + GlStateManager.shadeModel(7424); + GlStateManager.enableAlpha(); + GlStateManager.disableBlend(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSleepMP.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSleepMP.java new file mode 100644 index 0000000..f133ca9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSleepMP.java @@ -0,0 +1,71 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.play.client.CPacketEntityAction; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSleepMP extends GuiChat +{ + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height - 40, I18n.format("multiplayer.stopSleeping"))); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.wakeFromSleep(); + } + else if (keyCode != 28 && keyCode != 156) + { + super.keyTyped(typedChar, keyCode); + } + else + { + String s = this.inputField.getText().trim(); + + if (!s.isEmpty()) + { + this.sendChatMessage(s); // Forge: fix vanilla not adding messages to the sent list while sleeping + } + + this.inputField.setText(""); + this.mc.ingameGUI.getChatGUI().resetScroll(); + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 1) + { + this.wakeFromSleep(); + } + else + { + super.actionPerformed(button); + } + } + + private void wakeFromSleep() + { + NetHandlerPlayClient nethandlerplayclient = this.mc.player.connection; + nethandlerplayclient.sendPacket(new CPacketEntityAction(this.mc.player, CPacketEntityAction.Action.STOP_SLEEPING)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlider.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlider.java new file mode 100644 index 0000000..6d33b26 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlider.java @@ -0,0 +1,167 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSlider extends GuiButton +{ + private float sliderPosition = 1.0F; + public boolean isMouseDown; + private final String name; + private final float min; + private final float max; + private final GuiPageButtonList.GuiResponder responder; + private GuiSlider.FormatHelper formatHelper; + + public GuiSlider(GuiPageButtonList.GuiResponder guiResponder, int idIn, int x, int y, String nameIn, float minIn, float maxIn, float defaultValue, GuiSlider.FormatHelper formatter) + { + super(idIn, x, y, 150, 20, ""); + this.name = nameIn; + this.min = minIn; + this.max = maxIn; + this.sliderPosition = (defaultValue - minIn) / (maxIn - minIn); + this.formatHelper = formatter; + this.responder = guiResponder; + this.displayString = this.getDisplayString(); + } + + /** + * Gets the value of the slider. + * @return A value that will under normal circumstances be between the slider's {@link #min} and {@link #max} + * values, unless it was manually set out of that range. + */ + public float getSliderValue() + { + return this.min + (this.max - this.min) * this.sliderPosition; + } + + /** + * Sets the slider's value, optionally notifying the associated {@linkplain GuiPageButtonList.GuiResponder + * responder} of the change. + */ + public void setSliderValue(float value, boolean notifyResponder) + { + this.sliderPosition = (value - this.min) / (this.max - this.min); + this.displayString = this.getDisplayString(); + + if (notifyResponder) + { + this.responder.setEntryValue(this.id, this.getSliderValue()); + } + } + + /** + * Gets the slider's position. + * @return The position of the slider, which will under normal circumstances be between 0 and 1, unless it was + * manually set out of that range. + */ + public float getSliderPosition() + { + return this.sliderPosition; + } + + private String getDisplayString() + { + return this.formatHelper == null ? I18n.format(this.name) + ": " + this.getSliderValue() : this.formatHelper.getText(this.id, I18n.format(this.name), this.getSliderValue()); + } + + /** + * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over + * this button. + */ + protected int getHoverState(boolean mouseOver) + { + return 0; + } + + /** + * Fired when the mouse button is dragged. Equivalent of MouseListener.mouseDragged(MouseEvent e). + */ + protected void mouseDragged(Minecraft mc, int mouseX, int mouseY) + { + if (this.visible) + { + if (this.isMouseDown) + { + this.sliderPosition = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8); + + if (this.sliderPosition < 0.0F) + { + this.sliderPosition = 0.0F; + } + + if (this.sliderPosition > 1.0F) + { + this.sliderPosition = 1.0F; + } + + this.displayString = this.getDisplayString(); + this.responder.setEntryValue(this.id, this.getSliderValue()); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.x + (int)(this.sliderPosition * (float)(this.width - 8)), this.y, 0, 66, 4, 20); + this.drawTexturedModalRect(this.x + (int)(this.sliderPosition * (float)(this.width - 8)) + 4, this.y, 196, 66, 4, 20); + } + } + + /** + * Sets the position of the slider and notifies the associated {@linkplain GuiPageButtonList.GuiResponder responder} + * of the change + */ + public void setSliderPosition(float position) + { + this.sliderPosition = position; + this.displayString = this.getDisplayString(); + this.responder.setEntryValue(this.id, this.getSliderValue()); + } + + /** + * Returns true if the mouse has been pressed on this control. Equivalent of MouseListener.mousePressed(MouseEvent + * e). + */ + public boolean mousePressed(Minecraft mc, int mouseX, int mouseY) + { + if (super.mousePressed(mc, mouseX, mouseY)) + { + this.sliderPosition = (float)(mouseX - (this.x + 4)) / (float)(this.width - 8); + + if (this.sliderPosition < 0.0F) + { + this.sliderPosition = 0.0F; + } + + if (this.sliderPosition > 1.0F) + { + this.sliderPosition = 1.0F; + } + + this.displayString = this.getDisplayString(); + this.responder.setEntryValue(this.id, this.getSliderValue()); + this.isMouseDown = true; + return true; + } + else + { + return false; + } + } + + /** + * Fired when the mouse button is released. Equivalent of MouseListener.mouseReleased(MouseEvent e). + */ + public void mouseReleased(int mouseX, int mouseY) + { + this.isMouseDown = false; + } + + @SideOnly(Side.CLIENT) + public interface FormatHelper + { + String getText(int id, String name, float value); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlot.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlot.java new file mode 100644 index 0000000..a4c473c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlot.java @@ -0,0 +1,522 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public abstract class GuiSlot +{ + protected final Minecraft mc; + public int width; + public int height; + /** The top of the slot container. Affects the overlays and scrolling. */ + public int top; + /** The bottom of the slot container. Affects the overlays and scrolling. */ + public int bottom; + public int right; + public int left; + /** The height of a slot. */ + public final int slotHeight; + /** The buttonID of the button used to scroll up */ + private int scrollUpButtonID; + /** The buttonID of the button used to scroll down */ + private int scrollDownButtonID; + protected int mouseX; + protected int mouseY; + protected boolean centerListVertically = true; + /** Where the mouse was in the window when you first clicked to scroll */ + protected int initialClickY = -2; + /** + * What to multiply the amount you moved your mouse by (used for slowing down scrolling when over the items and not + * on the scroll bar) + */ + protected float scrollMultiplier; + /** How far down this slot has been scrolled */ + protected float amountScrolled; + /** The element in the list that was selected */ + protected int selectedElement = -1; + /** The time when this button was last clicked. */ + protected long lastClicked; + protected boolean visible = true; + /** Set to true if a selected element in this gui will show an outline box */ + protected boolean showSelectionBox = true; + protected boolean hasListHeader; + public int headerPadding; + private boolean enabled = true; + + public GuiSlot(Minecraft mcIn, int width, int height, int topIn, int bottomIn, int slotHeightIn) + { + this.mc = mcIn; + this.width = width; + this.height = height; + this.top = topIn; + this.bottom = bottomIn; + this.slotHeight = slotHeightIn; + this.left = 0; + this.right = width; + } + + public void setDimensions(int widthIn, int heightIn, int topIn, int bottomIn) + { + this.width = widthIn; + this.height = heightIn; + this.top = topIn; + this.bottom = bottomIn; + this.left = 0; + this.right = widthIn; + } + + public void setShowSelectionBox(boolean showSelectionBoxIn) + { + this.showSelectionBox = showSelectionBoxIn; + } + + /** + * Sets hasListHeader and headerHeight. Params: hasListHeader, headerHeight. If hasListHeader is false headerHeight + * is set to 0. + */ + protected void setHasListHeader(boolean hasListHeaderIn, int headerPaddingIn) + { + this.hasListHeader = hasListHeaderIn; + this.headerPadding = headerPaddingIn; + + if (!hasListHeaderIn) + { + this.headerPadding = 0; + } + } + + protected abstract int getSize(); + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected abstract void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY); + + /** + * Returns true if the element passed in is currently selected + */ + protected abstract boolean isSelected(int slotIndex); + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.getSize() * this.slotHeight + this.headerPadding; + } + + protected abstract void drawBackground(); + + protected void updateItemPos(int entryID, int insideLeft, int yPos, float partialTicks) + { + } + + protected abstract void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks); + + /** + * Handles drawing a list's header row. + */ + protected void drawListHeader(int insideLeft, int insideTop, Tessellator tessellatorIn) + { + } + + protected void clickedHeader(int p_148132_1_, int p_148132_2_) + { + } + + protected void renderDecorations(int mouseXIn, int mouseYIn) + { + } + + public int getSlotIndexFromScreenCoords(int posX, int posY) + { + int i = this.left + this.width / 2 - this.getListWidth() / 2; + int j = this.left + this.width / 2 + this.getListWidth() / 2; + int k = posY - this.top - this.headerPadding + (int)this.amountScrolled - 4; + int l = k / this.slotHeight; + return posX < this.getScrollBarX() && posX >= i && posX <= j && l >= 0 && k >= 0 && l < this.getSize() ? l : -1; + } + + /** + * Registers the IDs that can be used for the scrollbar's up/down buttons. + */ + public void registerScrollButtons(int scrollUpButtonIDIn, int scrollDownButtonIDIn) + { + this.scrollUpButtonID = scrollUpButtonIDIn; + this.scrollDownButtonID = scrollDownButtonIDIn; + } + + /** + * Stop the thing from scrolling out of bounds + */ + protected void bindAmountScrolled() + { + this.amountScrolled = MathHelper.clamp(this.amountScrolled, 0.0F, (float)this.getMaxScroll()); + } + + public int getMaxScroll() + { + return Math.max(0, this.getContentHeight() - (this.bottom - this.top - 4)); + } + + /** + * Returns the amountScrolled field as an integer. + */ + public int getAmountScrolled() + { + return (int)this.amountScrolled; + } + + public boolean isMouseYWithinSlotBounds(int p_148141_1_) + { + return p_148141_1_ >= this.top && p_148141_1_ <= this.bottom && this.mouseX >= this.left && this.mouseX <= this.right; + } + + /** + * Scrolls the slot by the given amount. A positive value scrolls down, and a negative value scrolls up. + */ + public void scrollBy(int amount) + { + this.amountScrolled += (float)amount; + this.bindAmountScrolled(); + this.initialClickY = -2; + } + + public void actionPerformed(GuiButton button) + { + if (button.enabled) + { + if (button.id == this.scrollUpButtonID) + { + this.amountScrolled -= (float)(this.slotHeight * 2 / 3); + this.initialClickY = -2; + this.bindAmountScrolled(); + } + else if (button.id == this.scrollDownButtonID) + { + this.amountScrolled += (float)(this.slotHeight * 2 / 3); + this.initialClickY = -2; + this.bindAmountScrolled(); + } + } + } + + public void drawScreen(int mouseXIn, int mouseYIn, float partialTicks) + { + if (this.visible) + { + this.mouseX = mouseXIn; + this.mouseY = mouseYIn; + this.drawBackground(); + int i = this.getScrollBarX(); + int j = i + 6; + this.bindAmountScrolled(); + GlStateManager.disableLighting(); + GlStateManager.disableFog(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + // Forge: background rendering moved into separate method. + this.drawContainerBackground(tessellator); + int k = this.left + this.width / 2 - this.getListWidth() / 2 + 2; + int l = this.top + 4 - (int)this.amountScrolled; + + if (this.hasListHeader) + { + this.drawListHeader(k, l, tessellator); + } + + this.drawSelectionBox(k, l, mouseXIn, mouseYIn, partialTicks); + GlStateManager.disableDepth(); + this.overlayBackground(0, this.top, 255, 255); + this.overlayBackground(this.bottom, this.height, 255, 255); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); + GlStateManager.disableAlpha(); + GlStateManager.shadeModel(7425); + GlStateManager.disableTexture2D(); + int i1 = 4; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)this.left, (double)(this.top + 4), 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 0).endVertex(); + bufferbuilder.pos((double)this.right, (double)(this.top + 4), 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 0).endVertex(); + bufferbuilder.pos((double)this.right, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)this.left, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)this.left, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)this.right, (double)this.bottom, 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)this.right, (double)(this.bottom - 4), 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 0).endVertex(); + bufferbuilder.pos((double)this.left, (double)(this.bottom - 4), 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 0).endVertex(); + tessellator.draw(); + int j1 = this.getMaxScroll(); + + if (j1 > 0) + { + int k1 = (this.bottom - this.top) * (this.bottom - this.top) / this.getContentHeight(); + k1 = MathHelper.clamp(k1, 32, this.bottom - this.top - 8); + int l1 = (int)this.amountScrolled * (this.bottom - this.top - k1) / j1 + this.top; + + if (l1 < this.top) + { + l1 = this.top; + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)this.bottom, 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)j, (double)this.bottom, 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)j, (double)this.top, 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)i, (double)this.top, 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)(l1 + k1), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j, (double)(l1 + k1), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j, (double)l1, 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)i, (double)l1, 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + tessellator.draw(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i, (double)(l1 + k1 - 1), 0.0D).tex(0.0D, 1.0D).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)(j - 1), (double)(l1 + k1 - 1), 0.0D).tex(1.0D, 1.0D).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)(j - 1), (double)l1, 0.0D).tex(1.0D, 0.0D).color(192, 192, 192, 255).endVertex(); + bufferbuilder.pos((double)i, (double)l1, 0.0D).tex(0.0D, 0.0D).color(192, 192, 192, 255).endVertex(); + tessellator.draw(); + } + + this.renderDecorations(mouseXIn, mouseYIn); + GlStateManager.enableTexture2D(); + GlStateManager.shadeModel(7424); + GlStateManager.enableAlpha(); + GlStateManager.disableBlend(); + } + } + + public void handleMouseInput() + { + if (this.isMouseYWithinSlotBounds(this.mouseY)) + { + if (Mouse.getEventButton() == 0 && Mouse.getEventButtonState() && this.mouseY >= this.top && this.mouseY <= this.bottom) + { + int i = (this.width - this.getListWidth()) / 2; + int j = (this.width + this.getListWidth()) / 2; + int k = this.mouseY - this.top - this.headerPadding + (int)this.amountScrolled - 4; + int l = k / this.slotHeight; + + if (l < this.getSize() && this.mouseX >= i && this.mouseX <= j && l >= 0 && k >= 0) + { + this.elementClicked(l, false, this.mouseX, this.mouseY); + this.selectedElement = l; + } + else if (this.mouseX >= i && this.mouseX <= j && k < 0) + { + this.clickedHeader(this.mouseX - i, this.mouseY - this.top + (int)this.amountScrolled - 4); + } + } + + if (Mouse.isButtonDown(0) && this.getEnabled()) + { + if (this.initialClickY == -1) + { + boolean flag1 = true; + + if (this.mouseY >= this.top && this.mouseY <= this.bottom) + { + int j2 = (this.width - this.getListWidth()) / 2; + int k2 = (this.width + this.getListWidth()) / 2; + int l2 = this.mouseY - this.top - this.headerPadding + (int)this.amountScrolled - 4; + int i1 = l2 / this.slotHeight; + + if (i1 < this.getSize() && this.mouseX >= j2 && this.mouseX <= k2 && i1 >= 0 && l2 >= 0) + { + boolean flag = i1 == this.selectedElement && Minecraft.getSystemTime() - this.lastClicked < 250L; + this.elementClicked(i1, flag, this.mouseX, this.mouseY); + this.selectedElement = i1; + this.lastClicked = Minecraft.getSystemTime(); + } + else if (this.mouseX >= j2 && this.mouseX <= k2 && l2 < 0) + { + this.clickedHeader(this.mouseX - j2, this.mouseY - this.top + (int)this.amountScrolled - 4); + flag1 = false; + } + + int i3 = this.getScrollBarX(); + int j1 = i3 + 6; + + if (this.mouseX >= i3 && this.mouseX <= j1) + { + this.scrollMultiplier = -1.0F; + int k1 = this.getMaxScroll(); + + if (k1 < 1) + { + k1 = 1; + } + + int l1 = (int)((float)((this.bottom - this.top) * (this.bottom - this.top)) / (float)this.getContentHeight()); + l1 = MathHelper.clamp(l1, 32, this.bottom - this.top - 8); + this.scrollMultiplier /= (float)(this.bottom - this.top - l1) / (float)k1; + } + else + { + this.scrollMultiplier = 1.0F; + } + + if (flag1) + { + this.initialClickY = this.mouseY; + } + else + { + this.initialClickY = -2; + } + } + else + { + this.initialClickY = -2; + } + } + else if (this.initialClickY >= 0) + { + this.amountScrolled -= (float)(this.mouseY - this.initialClickY) * this.scrollMultiplier; + this.initialClickY = this.mouseY; + } + } + else + { + this.initialClickY = -1; + } + + int i2 = Mouse.getEventDWheel(); + + if (i2 != 0) + { + if (i2 > 0) + { + i2 = -1; + } + else if (i2 < 0) + { + i2 = 1; + } + + this.amountScrolled += (float)(i2 * this.slotHeight / 2); + } + } + } + + public void setEnabled(boolean enabledIn) + { + this.enabled = enabledIn; + } + + public boolean getEnabled() + { + return this.enabled; + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return 220; + } + + /** + * Draws the selection box around the selected slot element. + */ + protected void drawSelectionBox(int insideLeft, int insideTop, int mouseXIn, int mouseYIn, float partialTicks) + { + int i = this.getSize(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + for (int j = 0; j < i; ++j) + { + int k = insideTop + j * this.slotHeight + this.headerPadding; + int l = this.slotHeight - 4; + + if (k > this.bottom || k + l < this.top) + { + this.updateItemPos(j, insideLeft, k, partialTicks); + } + + if (this.showSelectionBox && this.isSelected(j)) + { + int i1 = this.left + (this.width / 2 - this.getListWidth() / 2); + int j1 = this.left + this.width / 2 + this.getListWidth() / 2; + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableTexture2D(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)i1, (double)(k + l + 2), 0.0D).tex(0.0D, 1.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j1, (double)(k + l + 2), 0.0D).tex(1.0D, 1.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)j1, (double)(k - 2), 0.0D).tex(1.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)i1, (double)(k - 2), 0.0D).tex(0.0D, 0.0D).color(128, 128, 128, 255).endVertex(); + bufferbuilder.pos((double)(i1 + 1), (double)(k + l + 1), 0.0D).tex(0.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)(j1 - 1), (double)(k + l + 1), 0.0D).tex(1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)(j1 - 1), (double)(k - 1), 0.0D).tex(1.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)(i1 + 1), (double)(k - 1), 0.0D).tex(0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + } + + this.drawSlot(j, insideLeft, k, l, mouseXIn, mouseYIn, partialTicks); + } + } + + protected int getScrollBarX() + { + return this.width / 2 + 124; + } + + /** + * Overlays the background to hide scrolled items + */ + protected void overlayBackground(int startY, int endY, int startAlpha, int endAlpha) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.mc.getTextureManager().bindTexture(Gui.OPTIONS_BACKGROUND); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f = 32.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos((double)this.left, (double)endY, 0.0D).tex(0.0D, (double)((float)endY / 32.0F)).color(64, 64, 64, endAlpha).endVertex(); + bufferbuilder.pos((double)(this.left + this.width), (double)endY, 0.0D).tex((double)((float)this.width / 32.0F), (double)((float)endY / 32.0F)).color(64, 64, 64, endAlpha).endVertex(); + bufferbuilder.pos((double)(this.left + this.width), (double)startY, 0.0D).tex((double)((float)this.width / 32.0F), (double)((float)startY / 32.0F)).color(64, 64, 64, startAlpha).endVertex(); + bufferbuilder.pos((double)this.left, (double)startY, 0.0D).tex(0.0D, (double)((float)startY / 32.0F)).color(64, 64, 64, startAlpha).endVertex(); + tessellator.draw(); + } + + /** + * Sets the left and right bounds of the slot. Param is the left bound, right is calculated as left + width. + */ + public void setSlotXBoundsFromLeft(int leftIn) + { + this.left = leftIn; + this.right = leftIn + this.width; + } + + public int getSlotHeight() + { + return this.slotHeight; + } + + protected void drawContainerBackground(Tessellator tessellator) + { + BufferBuilder buffer = tessellator.getBuffer(); + this.mc.getTextureManager().bindTexture(Gui.OPTIONS_BACKGROUND); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f = 32.0F; + buffer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + buffer.pos((double)this.left, (double)this.bottom, 0.0D).tex((double)((float)this.left / f), (double)((float)(this.bottom + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex(); + buffer.pos((double)this.right, (double)this.bottom, 0.0D).tex((double)((float)this.right / f), (double)((float)(this.bottom + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex(); + buffer.pos((double)this.right, (double)this.top, 0.0D).tex((double)((float)this.right / f), (double)((float)(this.top + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex(); + buffer.pos((double)this.left, (double)this.top, 0.0D).tex((double)((float)this.left / f), (double)((float)(this.top + (int)this.amountScrolled) / f)).color(32, 32, 32, 255).endVertex(); + tessellator.draw(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlotRealmsProxy.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlotRealmsProxy.java new file mode 100644 index 0000000..1e08acd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSlotRealmsProxy.java @@ -0,0 +1,82 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.realms.RealmsScrolledSelectionList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSlotRealmsProxy extends GuiSlot +{ + private final RealmsScrolledSelectionList selectionList; + + public GuiSlotRealmsProxy(RealmsScrolledSelectionList selectionListIn, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn) + { + super(Minecraft.getMinecraft(), widthIn, heightIn, topIn, bottomIn, slotHeightIn); + this.selectionList = selectionListIn; + } + + protected int getSize() + { + return this.selectionList.getItemCount(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + this.selectionList.selectItem(slotIndex, isDoubleClick, mouseX, mouseY); + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return this.selectionList.isSelectedItem(slotIndex); + } + + protected void drawBackground() + { + this.selectionList.renderBackground(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + this.selectionList.renderItem(slotIndex, xPos, yPos, heightIn, mouseXIn, mouseYIn); + } + + public int getWidth() + { + return this.width; + } + + public int getMouseY() + { + return this.mouseY; + } + + public int getMouseX() + { + return this.mouseX; + } + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.selectionList.getMaxPosition(); + } + + protected int getScrollBarX() + { + return this.selectionList.getScrollbarPosition(); + } + + public void handleMouseInput() + { + super.handleMouseInput(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSnooper.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSnooper.java new file mode 100644 index 0000000..2405b6c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSnooper.java @@ -0,0 +1,164 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.TreeMap; +import java.util.Map.Entry; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSnooper extends GuiScreen +{ + private final GuiScreen lastScreen; + /** Reference to the GameSettings object. */ + private final GameSettings game_settings_2; + private final java.util.List keys = Lists.newArrayList(); + private final java.util.List values = Lists.newArrayList(); + private String title; + private String[] desc; + private GuiSnooper.List list; + private GuiButton toggleButton; + + public GuiSnooper(GuiScreen p_i1061_1_, GameSettings p_i1061_2_) + { + this.lastScreen = p_i1061_1_; + this.game_settings_2 = p_i1061_2_; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.title = I18n.format("options.snooper.title"); + String s = I18n.format("options.snooper.desc"); + java.util.List list = Lists.newArrayList(); + + for (String s1 : this.fontRenderer.listFormattedStringToWidth(s, this.width - 30)) + { + list.add(s1); + } + + this.desc = (String[])list.toArray(new String[list.size()]); + this.keys.clear(); + this.values.clear(); + this.toggleButton = this.addButton(new GuiButton(1, this.width / 2 - 152, this.height - 30, 150, 20, this.game_settings_2.getKeyBinding(GameSettings.Options.SNOOPER_ENABLED))); + this.buttonList.add(new GuiButton(2, this.width / 2 + 2, this.height - 30, 150, 20, I18n.format("gui.done"))); + boolean flag = this.mc.getIntegratedServer() != null && this.mc.getIntegratedServer().getPlayerUsageSnooper() != null; + + for (Entry entry : (new TreeMap(this.mc.getPlayerUsageSnooper().getCurrentStats())).entrySet()) + { + this.keys.add((flag ? "C " : "") + (String)entry.getKey()); + this.values.add(this.fontRenderer.trimStringToWidth(entry.getValue(), this.width - 220)); + } + + if (flag) + { + for (Entry entry1 : (new TreeMap(this.mc.getIntegratedServer().getPlayerUsageSnooper().getCurrentStats())).entrySet()) + { + this.keys.add("S " + (String)entry1.getKey()); + this.values.add(this.fontRenderer.trimStringToWidth(entry1.getValue(), this.width - 220)); + } + } + + this.list = new GuiSnooper.List(); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.list.handleMouseInput(); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 2) + { + this.game_settings_2.saveOptions(); + this.game_settings_2.saveOptions(); + this.mc.displayGuiScreen(this.lastScreen); + } + + if (button.id == 1) + { + this.game_settings_2.setOptionValue(GameSettings.Options.SNOOPER_ENABLED, 1); + this.toggleButton.displayString = this.game_settings_2.getKeyBinding(GameSettings.Options.SNOOPER_ENABLED); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.list.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 8, 16777215); + int i = 22; + + for (String s : this.desc) + { + this.drawCenteredString(this.fontRenderer, s, this.width / 2, i, 8421504); + i += this.fontRenderer.FONT_HEIGHT; + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + @SideOnly(Side.CLIENT) + class List extends GuiSlot + { + public List() + { + super(GuiSnooper.this.mc, GuiSnooper.this.width, GuiSnooper.this.height, 80, GuiSnooper.this.height - 40, GuiSnooper.this.fontRenderer.FONT_HEIGHT + 1); + } + + protected int getSize() + { + return GuiSnooper.this.keys.size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return false; + } + + protected void drawBackground() + { + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + GuiSnooper.this.fontRenderer.drawString(GuiSnooper.this.keys.get(slotIndex), 10, yPos, 16777215); + GuiSnooper.this.fontRenderer.drawString(GuiSnooper.this.values.get(slotIndex), 230, yPos, 16777215); + } + + protected int getScrollBarX() + { + return this.width - 10; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSpectator.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSpectator.java new file mode 100644 index 0000000..37a6ee9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSpectator.java @@ -0,0 +1,189 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.spectator.ISpectatorMenuObject; +import net.minecraft.client.gui.spectator.ISpectatorMenuRecipient; +import net.minecraft.client.gui.spectator.SpectatorMenu; +import net.minecraft.client.gui.spectator.categories.SpectatorDetails; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSpectator extends Gui implements ISpectatorMenuRecipient +{ + private static final ResourceLocation WIDGETS = new ResourceLocation("textures/gui/widgets.png"); + public static final ResourceLocation SPECTATOR_WIDGETS = new ResourceLocation("textures/gui/spectator_widgets.png"); + private final Minecraft mc; + private long lastSelectionTime; + private SpectatorMenu menu; + + public GuiSpectator(Minecraft mcIn) + { + this.mc = mcIn; + } + + public void onHotbarSelected(int p_175260_1_) + { + this.lastSelectionTime = Minecraft.getSystemTime(); + + if (this.menu != null) + { + this.menu.selectSlot(p_175260_1_); + } + else + { + this.menu = new SpectatorMenu(this); + } + } + + private float getHotbarAlpha() + { + long i = this.lastSelectionTime - Minecraft.getSystemTime() + 5000L; + return MathHelper.clamp((float)i / 2000.0F, 0.0F, 1.0F); + } + + public void renderTooltip(ScaledResolution p_175264_1_, float p_175264_2_) + { + if (this.menu != null) + { + float f = this.getHotbarAlpha(); + + if (f <= 0.0F) + { + this.menu.exit(); + } + else + { + int i = p_175264_1_.getScaledWidth() / 2; + float f1 = this.zLevel; + this.zLevel = -90.0F; + float f2 = (float)p_175264_1_.getScaledHeight() - 22.0F * f; + SpectatorDetails spectatordetails = this.menu.getCurrentPage(); + this.renderPage(p_175264_1_, f, i, f2, spectatordetails); + this.zLevel = f1; + } + } + } + + protected void renderPage(ScaledResolution p_175258_1_, float p_175258_2_, int p_175258_3_, float p_175258_4_, SpectatorDetails p_175258_5_) + { + GlStateManager.enableRescaleNormal(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color(1.0F, 1.0F, 1.0F, p_175258_2_); + this.mc.getTextureManager().bindTexture(WIDGETS); + this.drawTexturedModalRect((float)(p_175258_3_ - 91), p_175258_4_, 0, 0, 182, 22); + + if (p_175258_5_.getSelectedSlot() >= 0) + { + this.drawTexturedModalRect((float)(p_175258_3_ - 91 - 1 + p_175258_5_.getSelectedSlot() * 20), p_175258_4_ - 1.0F, 0, 22, 24, 22); + } + + RenderHelper.enableGUIStandardItemLighting(); + + for (int i = 0; i < 9; ++i) + { + this.renderSlot(i, p_175258_1_.getScaledWidth() / 2 - 90 + i * 20 + 2, p_175258_4_ + 3.0F, p_175258_2_, p_175258_5_.getObject(i)); + } + + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.disableBlend(); + } + + private void renderSlot(int p_175266_1_, int p_175266_2_, float p_175266_3_, float p_175266_4_, ISpectatorMenuObject p_175266_5_) + { + this.mc.getTextureManager().bindTexture(SPECTATOR_WIDGETS); + + if (p_175266_5_ != SpectatorMenu.EMPTY_SLOT) + { + int i = (int)(p_175266_4_ * 255.0F); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)p_175266_2_, p_175266_3_, 0.0F); + float f = p_175266_5_.isEnabled() ? 1.0F : 0.25F; + GlStateManager.color(f, f, f, p_175266_4_); + p_175266_5_.renderIcon(f, i); + GlStateManager.popMatrix(); + String s = String.valueOf(this.mc.gameSettings.keyBindsHotbar[p_175266_1_].getDisplayName()); + + if (i > 3 && p_175266_5_.isEnabled()) + { + this.mc.fontRenderer.drawStringWithShadow(s, (float)(p_175266_2_ + 19 - 2 - this.mc.fontRenderer.getStringWidth(s)), p_175266_3_ + 6.0F + 3.0F, 16777215 + (i << 24)); + } + } + } + + public void renderSelectedItem(ScaledResolution p_175263_1_) + { + int i = (int)(this.getHotbarAlpha() * 255.0F); + + if (i > 3 && this.menu != null) + { + ISpectatorMenuObject ispectatormenuobject = this.menu.getSelectedItem(); + String s = ispectatormenuobject == SpectatorMenu.EMPTY_SLOT ? this.menu.getSelectedCategory().getPrompt().getFormattedText() : ispectatormenuobject.getSpectatorName().getFormattedText(); + + if (s != null) + { + int j = (p_175263_1_.getScaledWidth() - this.mc.fontRenderer.getStringWidth(s)) / 2; + int k = p_175263_1_.getScaledHeight() - 35; + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.mc.fontRenderer.drawStringWithShadow(s, (float)j, (float)k, 16777215 + (i << 24)); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + } + } + + public void onSpectatorMenuClosed(SpectatorMenu menu) + { + this.menu = null; + this.lastSelectionTime = 0L; + } + + public boolean isMenuActive() + { + return this.menu != null; + } + + public void onMouseScroll(int p_175259_1_) + { + int i; + + for (i = this.menu.getSelectedSlot() + p_175259_1_; i >= 0 && i <= 8 && (this.menu.getItem(i) == SpectatorMenu.EMPTY_SLOT || !this.menu.getItem(i).isEnabled()); i += p_175259_1_) + { + ; + } + + if (i >= 0 && i <= 8) + { + this.menu.selectSlot(i); + this.lastSelectionTime = Minecraft.getSystemTime(); + } + } + + public void onMiddleClick() + { + this.lastSelectionTime = Minecraft.getSystemTime(); + + if (this.isMenuActive()) + { + int i = this.menu.getSelectedSlot(); + + if (i != -1) + { + this.menu.selectSlot(i); + } + } + else + { + this.menu = new SpectatorMenu(this); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSubtitleOverlay.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSubtitleOverlay.java new file mode 100644 index 0000000..9ca2865 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiSubtitleOverlay.java @@ -0,0 +1,170 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.ISoundEventListener; +import net.minecraft.client.audio.SoundEventAccessor; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiSubtitleOverlay extends Gui implements ISoundEventListener +{ + private final Minecraft client; + private final List subtitles = Lists.newArrayList(); + private boolean enabled; + + public GuiSubtitleOverlay(Minecraft clientIn) + { + this.client = clientIn; + } + + public void renderSubtitles(ScaledResolution resolution) + { + if (!this.enabled && this.client.gameSettings.showSubtitles) + { + this.client.getSoundHandler().addListener(this); + this.enabled = true; + } + else if (this.enabled && !this.client.gameSettings.showSubtitles) + { + this.client.getSoundHandler().removeListener(this); + this.enabled = false; + } + + if (this.enabled && !this.subtitles.isEmpty()) + { + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + Vec3d vec3d = new Vec3d(this.client.player.posX, this.client.player.posY + (double)this.client.player.getEyeHeight(), this.client.player.posZ); + Vec3d vec3d1 = (new Vec3d(0.0D, 0.0D, -1.0D)).rotatePitch(-this.client.player.rotationPitch * 0.017453292F).rotateYaw(-this.client.player.rotationYaw * 0.017453292F); + Vec3d vec3d2 = (new Vec3d(0.0D, 1.0D, 0.0D)).rotatePitch(-this.client.player.rotationPitch * 0.017453292F).rotateYaw(-this.client.player.rotationYaw * 0.017453292F); + Vec3d vec3d3 = vec3d1.crossProduct(vec3d2); + int i = 0; + int j = 0; + Iterator iterator = this.subtitles.iterator(); + + while (iterator.hasNext()) + { + GuiSubtitleOverlay.Subtitle guisubtitleoverlay$subtitle = iterator.next(); + + if (guisubtitleoverlay$subtitle.getStartTime() + 3000L <= Minecraft.getSystemTime()) + { + iterator.remove(); + } + else + { + j = Math.max(j, this.client.fontRenderer.getStringWidth(guisubtitleoverlay$subtitle.getString())); + } + } + + j = j + this.client.fontRenderer.getStringWidth("<") + this.client.fontRenderer.getStringWidth(" ") + this.client.fontRenderer.getStringWidth(">") + this.client.fontRenderer.getStringWidth(" "); + + for (GuiSubtitleOverlay.Subtitle guisubtitleoverlay$subtitle1 : this.subtitles) + { + int k = 255; + String s = guisubtitleoverlay$subtitle1.getString(); + Vec3d vec3d4 = guisubtitleoverlay$subtitle1.getLocation().subtract(vec3d).normalize(); + double d0 = -vec3d3.dotProduct(vec3d4); + double d1 = -vec3d1.dotProduct(vec3d4); + boolean flag = d1 > 0.5D; + int l = j / 2; + int i1 = this.client.fontRenderer.FONT_HEIGHT; + int j1 = i1 / 2; + float f = 1.0F; + int k1 = this.client.fontRenderer.getStringWidth(s); + int l1 = MathHelper.floor(MathHelper.clampedLerp(255.0D, 75.0D, (double)((float)(Minecraft.getSystemTime() - guisubtitleoverlay$subtitle1.getStartTime()) / 3000.0F))); + int i2 = l1 << 16 | l1 << 8 | l1; + GlStateManager.pushMatrix(); + GlStateManager.translate((float)resolution.getScaledWidth() - (float)l * 1.0F - 2.0F, (float)(resolution.getScaledHeight() - 30) - (float)(i * (i1 + 1)) * 1.0F, 0.0F); + GlStateManager.scale(1.0F, 1.0F, 1.0F); + drawRect(-l - 1, -j1 - 1, l + 1, j1 + 1, -872415232); + GlStateManager.enableBlend(); + + if (!flag) + { + if (d0 > 0.0D) + { + this.client.fontRenderer.drawString(">", l - this.client.fontRenderer.getStringWidth(">"), -j1, i2 + -16777216); + } + else if (d0 < 0.0D) + { + this.client.fontRenderer.drawString("<", -l, -j1, i2 + -16777216); + } + } + + this.client.fontRenderer.drawString(s, -k1 / 2, -j1, i2 + -16777216); + GlStateManager.popMatrix(); + ++i; + } + + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + } + + public void soundPlay(ISound soundIn, SoundEventAccessor accessor) + { + if (accessor.getSubtitle() != null) + { + String s = accessor.getSubtitle().getFormattedText(); + + if (!this.subtitles.isEmpty()) + { + for (GuiSubtitleOverlay.Subtitle guisubtitleoverlay$subtitle : this.subtitles) + { + if (guisubtitleoverlay$subtitle.getString().equals(s)) + { + guisubtitleoverlay$subtitle.refresh(new Vec3d((double)soundIn.getXPosF(), (double)soundIn.getYPosF(), (double)soundIn.getZPosF())); + return; + } + } + } + + this.subtitles.add(new GuiSubtitleOverlay.Subtitle(s, new Vec3d((double)soundIn.getXPosF(), (double)soundIn.getYPosF(), (double)soundIn.getZPosF()))); + } + } + + @SideOnly(Side.CLIENT) + public class Subtitle + { + private final String subtitle; + private long startTime; + private Vec3d location; + + public Subtitle(String subtitleIn, Vec3d locationIn) + { + this.subtitle = subtitleIn; + this.location = locationIn; + this.startTime = Minecraft.getSystemTime(); + } + + public String getString() + { + return this.subtitle; + } + + public long getStartTime() + { + return this.startTime; + } + + public Vec3d getLocation() + { + return this.location; + } + + public void refresh(Vec3d locationIn) + { + this.location = locationIn; + this.startTime = Minecraft.getSystemTime(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiTextField.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiTextField.java new file mode 100644 index 0000000..7d22f3b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiTextField.java @@ -0,0 +1,830 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiTextField extends Gui +{ + private final int id; + private final FontRenderer fontRenderer; + public int x; + public int y; + /** The width of this text field. */ + public int width; + public int height; + /** Has the current text being edited on the textbox. */ + private String text = ""; + private int maxStringLength = 32; + private int cursorCounter; + private boolean enableBackgroundDrawing = true; + /** if true the textbox can lose focus by clicking elsewhere on the screen */ + private boolean canLoseFocus = true; + /** If this value is true along with isEnabled, keyTyped will process the keys. */ + private boolean isFocused; + /** If this value is true along with isFocused, keyTyped will process the keys. */ + private boolean isEnabled = true; + /** The current character index that should be used as start of the rendered text. */ + private int lineScrollOffset; + private int cursorPosition; + /** other selection position, maybe the same as the cursor */ + private int selectionEnd; + private int enabledColor = 14737632; + private int disabledColor = 7368816; + /** True if this textbox is visible */ + private boolean visible = true; + private GuiPageButtonList.GuiResponder guiResponder; + /** Called to check if the text is valid */ + private Predicate validator = Predicates.alwaysTrue(); + + public GuiTextField(int componentId, FontRenderer fontrendererObj, int x, int y, int par5Width, int par6Height) + { + this.id = componentId; + this.fontRenderer = fontrendererObj; + this.x = x; + this.y = y; + this.width = par5Width; + this.height = par6Height; + } + + /** + * Sets the GuiResponder associated with this text box. + */ + public void setGuiResponder(GuiPageButtonList.GuiResponder guiResponderIn) + { + this.guiResponder = guiResponderIn; + } + + /** + * Increments the cursor counter + */ + public void updateCursorCounter() + { + ++this.cursorCounter; + } + + /** + * Sets the text of the textbox, and moves the cursor to the end. + */ + public void setText(String textIn) + { + if (this.validator.apply(textIn)) + { + if (textIn.length() > this.maxStringLength) + { + this.text = textIn.substring(0, this.maxStringLength); + } + else + { + this.text = textIn; + } + + this.setCursorPositionEnd(); + } + } + + /** + * Returns the contents of the textbox + */ + public String getText() + { + return this.text; + } + + /** + * returns the text between the cursor and selectionEnd + */ + public String getSelectedText() + { + int i = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd; + int j = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition; + return this.text.substring(i, j); + } + + public void setValidator(Predicate theValidator) + { + this.validator = theValidator; + } + + /** + * Adds the given text after the cursor, or replaces the currently selected text if there is a selection. + */ + public void writeText(String textToWrite) + { + String s = ""; + String s1 = ChatAllowedCharacters.filterAllowedCharacters(textToWrite); + int i = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd; + int j = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition; + int k = this.maxStringLength - this.text.length() - (i - j); + + if (!this.text.isEmpty()) + { + s = s + this.text.substring(0, i); + } + + int l; + + if (k < s1.length()) + { + s = s + s1.substring(0, k); + l = k; + } + else + { + s = s + s1; + l = s1.length(); + } + + if (!this.text.isEmpty() && j < this.text.length()) + { + s = s + this.text.substring(j); + } + + if (this.validator.apply(s)) + { + this.text = s; + this.moveCursorBy(i - this.selectionEnd + l); + this.setResponderEntryValue(this.id, this.text); + } + } + + /** + * Notifies this text box's {@linkplain GuiPageButtonList.GuiResponder responder} that the text has changed. + */ + public void setResponderEntryValue(int idIn, String textIn) + { + if (this.guiResponder != null) + { + this.guiResponder.setEntryValue(idIn, textIn); + } + } + + /** + * Deletes the given number of words from the current cursor's position, unless there is currently a selection, in + * which case the selection is deleted instead. + */ + public void deleteWords(int num) + { + if (!this.text.isEmpty()) + { + if (this.selectionEnd != this.cursorPosition) + { + this.writeText(""); + } + else + { + this.deleteFromCursor(this.getNthWordFromCursor(num) - this.cursorPosition); + } + } + } + + /** + * Deletes the given number of characters from the current cursor's position, unless there is currently a selection, + * in which case the selection is deleted instead. + */ + public void deleteFromCursor(int num) + { + if (!this.text.isEmpty()) + { + if (this.selectionEnd != this.cursorPosition) + { + this.writeText(""); + } + else + { + boolean flag = num < 0; + int i = flag ? this.cursorPosition + num : this.cursorPosition; + int j = flag ? this.cursorPosition : this.cursorPosition + num; + String s = ""; + + if (i >= 0) + { + s = this.text.substring(0, i); + } + + if (j < this.text.length()) + { + s = s + this.text.substring(j); + } + + if (this.validator.apply(s)) + { + this.text = s; + + if (flag) + { + this.moveCursorBy(num); + } + + this.setResponderEntryValue(this.id, this.text); + } + } + } + } + + public int getId() + { + return this.id; + } + + /** + * Gets the starting index of the word at the specified number of words away from the cursor position. + */ + public int getNthWordFromCursor(int numWords) + { + return this.getNthWordFromPos(numWords, this.getCursorPosition()); + } + + /** + * Gets the starting index of the word at a distance of the specified number of words away from the given position. + */ + public int getNthWordFromPos(int n, int pos) + { + return this.getNthWordFromPosWS(n, pos, true); + } + + /** + * Like getNthWordFromPos (which wraps this), but adds option for skipping consecutive spaces + */ + public int getNthWordFromPosWS(int n, int pos, boolean skipWs) + { + int i = pos; + boolean flag = n < 0; + int j = Math.abs(n); + + for (int k = 0; k < j; ++k) + { + if (!flag) + { + int l = this.text.length(); + i = this.text.indexOf(32, i); + + if (i == -1) + { + i = l; + } + else + { + while (skipWs && i < l && this.text.charAt(i) == ' ') + { + ++i; + } + } + } + else + { + while (skipWs && i > 0 && this.text.charAt(i - 1) == ' ') + { + --i; + } + + while (i > 0 && this.text.charAt(i - 1) != ' ') + { + --i; + } + } + } + + return i; + } + + /** + * Moves the text cursor by a specified number of characters and clears the selection + */ + public void moveCursorBy(int num) + { + this.setCursorPosition(this.selectionEnd + num); + } + + /** + * Sets the current position of the cursor. + */ + public void setCursorPosition(int pos) + { + this.cursorPosition = pos; + int i = this.text.length(); + this.cursorPosition = MathHelper.clamp(this.cursorPosition, 0, i); + this.setSelectionPos(this.cursorPosition); + } + + /** + * Moves the cursor to the very start of this text box. + */ + public void setCursorPositionZero() + { + this.setCursorPosition(0); + } + + /** + * Moves the cursor to the very end of this text box. + */ + public void setCursorPositionEnd() + { + this.setCursorPosition(this.text.length()); + } + + /** + * Call this method from your GuiScreen to process the keys into the textbox + */ + public boolean textboxKeyTyped(char typedChar, int keyCode) + { + if (!this.isFocused) + { + return false; + } + else if (GuiScreen.isKeyComboCtrlA(keyCode)) + { + this.setCursorPositionEnd(); + this.setSelectionPos(0); + return true; + } + else if (GuiScreen.isKeyComboCtrlC(keyCode)) + { + GuiScreen.setClipboardString(this.getSelectedText()); + return true; + } + else if (GuiScreen.isKeyComboCtrlV(keyCode)) + { + if (this.isEnabled) + { + this.writeText(GuiScreen.getClipboardString()); + } + + return true; + } + else if (GuiScreen.isKeyComboCtrlX(keyCode)) + { + GuiScreen.setClipboardString(this.getSelectedText()); + + if (this.isEnabled) + { + this.writeText(""); + } + + return true; + } + else + { + switch (keyCode) + { + case 14: + + if (GuiScreen.isCtrlKeyDown()) + { + if (this.isEnabled) + { + this.deleteWords(-1); + } + } + else if (this.isEnabled) + { + this.deleteFromCursor(-1); + } + + return true; + case 199: + + if (GuiScreen.isShiftKeyDown()) + { + this.setSelectionPos(0); + } + else + { + this.setCursorPositionZero(); + } + + return true; + case 203: + + if (GuiScreen.isShiftKeyDown()) + { + if (GuiScreen.isCtrlKeyDown()) + { + this.setSelectionPos(this.getNthWordFromPos(-1, this.getSelectionEnd())); + } + else + { + this.setSelectionPos(this.getSelectionEnd() - 1); + } + } + else if (GuiScreen.isCtrlKeyDown()) + { + this.setCursorPosition(this.getNthWordFromCursor(-1)); + } + else + { + this.moveCursorBy(-1); + } + + return true; + case 205: + + if (GuiScreen.isShiftKeyDown()) + { + if (GuiScreen.isCtrlKeyDown()) + { + this.setSelectionPos(this.getNthWordFromPos(1, this.getSelectionEnd())); + } + else + { + this.setSelectionPos(this.getSelectionEnd() + 1); + } + } + else if (GuiScreen.isCtrlKeyDown()) + { + this.setCursorPosition(this.getNthWordFromCursor(1)); + } + else + { + this.moveCursorBy(1); + } + + return true; + case 207: + + if (GuiScreen.isShiftKeyDown()) + { + this.setSelectionPos(this.text.length()); + } + else + { + this.setCursorPositionEnd(); + } + + return true; + case 211: + + if (GuiScreen.isCtrlKeyDown()) + { + if (this.isEnabled) + { + this.deleteWords(1); + } + } + else if (this.isEnabled) + { + this.deleteFromCursor(1); + } + + return true; + default: + + if (ChatAllowedCharacters.isAllowedCharacter(typedChar)) + { + if (this.isEnabled) + { + this.writeText(Character.toString(typedChar)); + } + + return true; + } + else + { + return false; + } + } + } + } + + /** + * Called when mouse is clicked, regardless as to whether it is over this button or not. + */ + public boolean mouseClicked(int mouseX, int mouseY, int mouseButton) + { + boolean flag = mouseX >= this.x && mouseX < this.x + this.width && mouseY >= this.y && mouseY < this.y + this.height; + + if (this.canLoseFocus) + { + this.setFocused(flag); + } + + if (this.isFocused && flag && mouseButton == 0) + { + int i = mouseX - this.x; + + if (this.enableBackgroundDrawing) + { + i -= 4; + } + + String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth()); + this.setCursorPosition(this.fontRenderer.trimStringToWidth(s, i).length() + this.lineScrollOffset); + return true; + } + else + { + return false; + } + } + + /** + * Draws the textbox + */ + public void drawTextBox() + { + if (this.getVisible()) + { + if (this.getEnableBackgroundDrawing()) + { + drawRect(this.x - 1, this.y - 1, this.x + this.width + 1, this.y + this.height + 1, -6250336); + drawRect(this.x, this.y, this.x + this.width, this.y + this.height, -16777216); + } + + int i = this.isEnabled ? this.enabledColor : this.disabledColor; + int j = this.cursorPosition - this.lineScrollOffset; + int k = this.selectionEnd - this.lineScrollOffset; + String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth()); + boolean flag = j >= 0 && j <= s.length(); + boolean flag1 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && flag; + int l = this.enableBackgroundDrawing ? this.x + 4 : this.x; + int i1 = this.enableBackgroundDrawing ? this.y + (this.height - 8) / 2 : this.y; + int j1 = l; + + if (k > s.length()) + { + k = s.length(); + } + + if (!s.isEmpty()) + { + String s1 = flag ? s.substring(0, j) : s; + j1 = this.fontRenderer.drawStringWithShadow(s1, (float)l, (float)i1, i); + } + + boolean flag2 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength(); + int k1 = j1; + + if (!flag) + { + k1 = j > 0 ? l + this.width : l; + } + else if (flag2) + { + k1 = j1 - 1; + --j1; + } + + if (!s.isEmpty() && flag && j < s.length()) + { + j1 = this.fontRenderer.drawStringWithShadow(s.substring(j), (float)j1, (float)i1, i); + } + + if (flag1) + { + if (flag2) + { + Gui.drawRect(k1, i1 - 1, k1 + 1, i1 + 1 + this.fontRenderer.FONT_HEIGHT, -3092272); + } + else + { + this.fontRenderer.drawStringWithShadow("_", (float)k1, (float)i1, i); + } + } + + if (k != j) + { + int l1 = l + this.fontRenderer.getStringWidth(s.substring(0, k)); + this.drawSelectionBox(k1, i1 - 1, l1 - 1, i1 + 1 + this.fontRenderer.FONT_HEIGHT); + } + } + } + + /** + * Draws the blue selection box. + */ + private void drawSelectionBox(int startX, int startY, int endX, int endY) + { + if (startX < endX) + { + int i = startX; + startX = endX; + endX = i; + } + + if (startY < endY) + { + int j = startY; + startY = endY; + endY = j; + } + + if (endX > this.x + this.width) + { + endX = this.x + this.width; + } + + if (startX > this.x + this.width) + { + startX = this.x + this.width; + } + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.color(0.0F, 0.0F, 255.0F, 255.0F); + GlStateManager.disableTexture2D(); + GlStateManager.enableColorLogic(); + GlStateManager.colorLogicOp(GlStateManager.LogicOp.OR_REVERSE); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION); + bufferbuilder.pos((double)startX, (double)endY, 0.0D).endVertex(); + bufferbuilder.pos((double)endX, (double)endY, 0.0D).endVertex(); + bufferbuilder.pos((double)endX, (double)startY, 0.0D).endVertex(); + bufferbuilder.pos((double)startX, (double)startY, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.disableColorLogic(); + GlStateManager.enableTexture2D(); + } + + /** + * Sets the maximum length for the text in this text box. If the current text is longer than this length, the + * current text will be trimmed. + */ + public void setMaxStringLength(int length) + { + this.maxStringLength = length; + + if (this.text.length() > length) + { + this.text = this.text.substring(0, length); + } + } + + /** + * returns the maximum number of character that can be contained in this textbox + */ + public int getMaxStringLength() + { + return this.maxStringLength; + } + + /** + * returns the current position of the cursor + */ + public int getCursorPosition() + { + return this.cursorPosition; + } + + /** + * Gets whether the background and outline of this text box should be drawn (true if so). + */ + public boolean getEnableBackgroundDrawing() + { + return this.enableBackgroundDrawing; + } + + /** + * Sets whether or not the background and outline of this text box should be drawn. + */ + public void setEnableBackgroundDrawing(boolean enableBackgroundDrawingIn) + { + this.enableBackgroundDrawing = enableBackgroundDrawingIn; + } + + /** + * Sets the color to use when drawing this text box's text. A different color is used if this text box is disabled. + */ + public void setTextColor(int color) + { + this.enabledColor = color; + } + + /** + * Sets the color to use for text in this text box when this text box is disabled. + */ + public void setDisabledTextColour(int color) + { + this.disabledColor = color; + } + + /** + * Sets focus to this gui element + */ + public void setFocused(boolean isFocusedIn) + { + if (isFocusedIn && !this.isFocused) + { + this.cursorCounter = 0; + } + + this.isFocused = isFocusedIn; + + if (Minecraft.getMinecraft().currentScreen != null) + { + Minecraft.getMinecraft().currentScreen.setFocused(isFocusedIn); + } + } + + /** + * Getter for the focused field + */ + public boolean isFocused() + { + return this.isFocused; + } + + /** + * Sets whether this text box is enabled. Disabled text boxes cannot be typed in. + */ + public void setEnabled(boolean enabled) + { + this.isEnabled = enabled; + } + + /** + * the side of the selection that is not the cursor, may be the same as the cursor + */ + public int getSelectionEnd() + { + return this.selectionEnd; + } + + /** + * returns the width of the textbox depending on if background drawing is enabled + */ + public int getWidth() + { + return this.getEnableBackgroundDrawing() ? this.width - 8 : this.width; + } + + /** + * Sets the position of the selection anchor (the selection anchor and the cursor position mark the edges of the + * selection). If the anchor is set beyond the bounds of the current text, it will be put back inside. + */ + public void setSelectionPos(int position) + { + int i = this.text.length(); + + if (position > i) + { + position = i; + } + + if (position < 0) + { + position = 0; + } + + this.selectionEnd = position; + + if (this.fontRenderer != null) + { + if (this.lineScrollOffset > i) + { + this.lineScrollOffset = i; + } + + int j = this.getWidth(); + String s = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), j); + int k = s.length() + this.lineScrollOffset; + + if (position == this.lineScrollOffset) + { + this.lineScrollOffset -= this.fontRenderer.trimStringToWidth(this.text, j, true).length(); + } + + if (position > k) + { + this.lineScrollOffset += position - k; + } + else if (position <= this.lineScrollOffset) + { + this.lineScrollOffset -= this.lineScrollOffset - position; + } + + this.lineScrollOffset = MathHelper.clamp(this.lineScrollOffset, 0, i); + } + } + + /** + * Sets whether this text box loses focus when something other than it is clicked. + */ + public void setCanLoseFocus(boolean canLoseFocusIn) + { + this.canLoseFocus = canLoseFocusIn; + } + + /** + * returns true if this textbox is visible + */ + public boolean getVisible() + { + return this.visible; + } + + /** + * Sets whether or not this textbox is visible + */ + public void setVisible(boolean isVisible) + { + this.visible = isVisible; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiUtilRenderComponents.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiUtilRenderComponents.java new file mode 100644 index 0000000..4de1d5e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiUtilRenderComponents.java @@ -0,0 +1,110 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiUtilRenderComponents +{ + public static String removeTextColorsIfConfigured(String text, boolean forceColor) + { + return !forceColor && !Minecraft.getMinecraft().gameSettings.chatColours ? TextFormatting.getTextWithoutFormattingCodes(text) : text; + } + + public static List splitText(ITextComponent textComponent, int maxTextLenght, FontRenderer fontRendererIn, boolean p_178908_3_, boolean forceTextColor) + { + int i = 0; + ITextComponent itextcomponent = new TextComponentString(""); + List list = Lists.newArrayList(); + List list1 = Lists.newArrayList(textComponent); + + for (int j = 0; j < list1.size(); ++j) + { + ITextComponent itextcomponent1 = list1.get(j); + String s = itextcomponent1.getUnformattedComponentText(); + boolean flag = false; + + if (s.contains("\n")) + { + int k = s.indexOf(10); + String s1 = s.substring(k + 1); + s = s.substring(0, k + 1); + ITextComponent itextcomponent2 = new TextComponentString(s1); + itextcomponent2.setStyle(itextcomponent1.getStyle().createShallowCopy()); + list1.add(j + 1, itextcomponent2); + flag = true; + } + + String s4 = removeTextColorsIfConfigured(itextcomponent1.getStyle().getFormattingCode() + s, forceTextColor); + String s5 = s4.endsWith("\n") ? s4.substring(0, s4.length() - 1) : s4; + int i1 = fontRendererIn.getStringWidth(s5); + TextComponentString textcomponentstring = new TextComponentString(s5); + textcomponentstring.setStyle(itextcomponent1.getStyle().createShallowCopy()); + + if (i + i1 > maxTextLenght) + { + String s2 = fontRendererIn.trimStringToWidth(s4, maxTextLenght - i, false); + String s3 = s2.length() < s4.length() ? s4.substring(s2.length()) : null; + + if (s3 != null && !s3.isEmpty()) + { + int l = s2.lastIndexOf(32); + + if (l >= 0 && fontRendererIn.getStringWidth(s4.substring(0, l)) > 0) + { + s2 = s4.substring(0, l); + + if (p_178908_3_) + { + ++l; + } + + s3 = s4.substring(l); + } + else if (i > 0 && !s4.contains(" ")) + { + s2 = ""; + s3 = s4; + } + + s3 = FontRenderer.getFormatFromString(s2) + s3; //Forge: Fix chat formatting not surviving line wrapping. + + TextComponentString textcomponentstring1 = new TextComponentString(s3); + textcomponentstring1.setStyle(itextcomponent1.getStyle().createShallowCopy()); + list1.add(j + 1, textcomponentstring1); + } + + i1 = fontRendererIn.getStringWidth(s2); + textcomponentstring = new TextComponentString(s2); + textcomponentstring.setStyle(itextcomponent1.getStyle().createShallowCopy()); + flag = true; + } + + if (i + i1 <= maxTextLenght) + { + i += i1; + itextcomponent.appendSibling(textcomponentstring); + } + else + { + flag = true; + } + + if (flag) + { + list.add(itextcomponent); + i = 0; + itextcomponent = new TextComponentString(""); + } + } + + list.add(itextcomponent); + return list; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiVideoSettings.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiVideoSettings.java new file mode 100644 index 0000000..5e607f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiVideoSettings.java @@ -0,0 +1,155 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiVideoSettings extends GuiScreen +{ + private final GuiScreen parentGuiScreen; + protected String screenTitle = "Video Settings"; + private final GameSettings guiGameSettings; + private GuiListExtended optionsRowList; + /** An array of all of GameSettings.Options's video options. */ + private static final GameSettings.Options[] VIDEO_OPTIONS = new GameSettings.Options[] {GameSettings.Options.GRAPHICS, GameSettings.Options.RENDER_DISTANCE, GameSettings.Options.AMBIENT_OCCLUSION, GameSettings.Options.FRAMERATE_LIMIT, GameSettings.Options.ANAGLYPH, GameSettings.Options.VIEW_BOBBING, GameSettings.Options.GUI_SCALE, GameSettings.Options.ATTACK_INDICATOR, GameSettings.Options.GAMMA, GameSettings.Options.RENDER_CLOUDS, GameSettings.Options.PARTICLES, GameSettings.Options.USE_FULLSCREEN, GameSettings.Options.ENABLE_VSYNC, GameSettings.Options.MIPMAP_LEVELS, GameSettings.Options.USE_VBO, GameSettings.Options.ENTITY_SHADOWS}; + + public GuiVideoSettings(GuiScreen parentScreenIn, GameSettings gameSettingsIn) + { + this.parentGuiScreen = parentScreenIn; + this.guiGameSettings = gameSettingsIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.screenTitle = I18n.format("options.videoTitle"); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height - 27, I18n.format("gui.done"))); + + if (OpenGlHelper.vboSupported) + { + this.optionsRowList = new GuiOptionsRowList(this.mc, this.width, this.height, 32, this.height - 32, 25, VIDEO_OPTIONS); + } + else + { + GameSettings.Options[] agamesettings$options = new GameSettings.Options[VIDEO_OPTIONS.length - 1]; + int i = 0; + + for (GameSettings.Options gamesettings$options : VIDEO_OPTIONS) + { + if (gamesettings$options == GameSettings.Options.USE_VBO) + { + break; + } + + agamesettings$options[i] = gamesettings$options; + ++i; + } + + this.optionsRowList = new GuiOptionsRowList(this.mc, this.width, this.height, 32, this.height - 32, 25, agamesettings$options); + } + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.optionsRowList.handleMouseInput(); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.mc.gameSettings.saveOptions(); + } + + super.keyTyped(typedChar, keyCode); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 200) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentGuiScreen); + } + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + int i = this.guiGameSettings.guiScale; + super.mouseClicked(mouseX, mouseY, mouseButton); + this.optionsRowList.mouseClicked(mouseX, mouseY, mouseButton); + + if (this.guiGameSettings.guiScale != i) + { + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int j = scaledresolution.getScaledWidth(); + int k = scaledresolution.getScaledHeight(); + this.setWorldAndResolution(this.mc, j, k); + } + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + int i = this.guiGameSettings.guiScale; + super.mouseReleased(mouseX, mouseY, state); + this.optionsRowList.mouseReleased(mouseX, mouseY, state); + + if (this.guiGameSettings.guiScale != i) + { + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int j = scaledresolution.getScaledWidth(); + int k = scaledresolution.getScaledHeight(); + this.setWorldAndResolution(this.mc, j, k); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.optionsRowList.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 5, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + // FORGE: fix for MC-64581 very laggy mipmap slider + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + @Override + public void onGuiClosed() + { + super.onGuiClosed(); + this.mc.gameSettings.onGuiClosed(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWinGame.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWinGame.java new file mode 100644 index 0000000..21f98e9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWinGame.java @@ -0,0 +1,268 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Random; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.IResource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiWinGame extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation MINECRAFT_LOGO = new ResourceLocation("textures/gui/title/minecraft.png"); + private static final ResourceLocation field_194401_g = new ResourceLocation("textures/gui/title/edition.png"); + private static final ResourceLocation VIGNETTE_TEXTURE = new ResourceLocation("textures/misc/vignette.png"); + private final boolean poem; + private final Runnable onFinished; + private float time; + private List lines; + private int totalScrollLength; + private float scrollSpeed = 0.5F; + + public GuiWinGame(boolean poemIn, Runnable onFinishedIn) + { + this.poem = poemIn; + this.onFinished = onFinishedIn; + + if (!poemIn) + { + this.scrollSpeed = 0.75F; + } + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.mc.getMusicTicker().update(); + this.mc.getSoundHandler().update(); + float f = (float)(this.totalScrollLength + this.height + this.height + 24) / this.scrollSpeed; + + if (this.time > f) + { + this.sendRespawnPacket(); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.sendRespawnPacket(); + } + } + + private void sendRespawnPacket() + { + this.onFinished.run(); + this.mc.displayGuiScreen((GuiScreen)null); + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return true; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + if (this.lines == null) + { + this.lines = Lists.newArrayList(); + IResource iresource = null; + + try + { + String s = "" + TextFormatting.WHITE + TextFormatting.OBFUSCATED + TextFormatting.GREEN + TextFormatting.AQUA; + int i = 274; + + if (this.poem) + { + iresource = this.mc.getResourceManager().getResource(new ResourceLocation("texts/end.txt")); + InputStream inputstream = iresource.getInputStream(); + BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream, StandardCharsets.UTF_8)); + Random random = new Random(8124371L); + String s1; + + while ((s1 = bufferedreader.readLine()) != null) + { + String s2; + String s3; + + for (s1 = s1.replaceAll("PLAYERNAME", this.mc.getSession().getUsername()); s1.contains(s); s1 = s2 + TextFormatting.WHITE + TextFormatting.OBFUSCATED + "XXXXXXXX".substring(0, random.nextInt(4) + 3) + s3) + { + int j = s1.indexOf(s); + s2 = s1.substring(0, j); + s3 = s1.substring(j + s.length()); + } + + this.lines.addAll(this.mc.fontRenderer.listFormattedStringToWidth(s1, 274)); + this.lines.add(""); + } + + inputstream.close(); + + for (int k = 0; k < 8; ++k) + { + this.lines.add(""); + } + } + + InputStream inputstream1 = this.mc.getResourceManager().getResource(new ResourceLocation("texts/credits.txt")).getInputStream(); + BufferedReader bufferedreader1 = new BufferedReader(new InputStreamReader(inputstream1, StandardCharsets.UTF_8)); + String s4; + + while ((s4 = bufferedreader1.readLine()) != null) + { + s4 = s4.replaceAll("PLAYERNAME", this.mc.getSession().getUsername()); + s4 = s4.replaceAll("\t", " "); + this.lines.addAll(this.mc.fontRenderer.listFormattedStringToWidth(s4, 274)); + this.lines.add(""); + } + + inputstream1.close(); + this.totalScrollLength = this.lines.size() * 12; + } + catch (Exception exception) + { + LOGGER.error("Couldn't load credits", (Throwable)exception); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + } + } + + private void drawWinGameScreen(int p_146575_1_, int p_146575_2_, float p_146575_3_) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.mc.getTextureManager().bindTexture(Gui.OPTIONS_BACKGROUND); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + int i = this.width; + float f = -this.time * 0.5F * this.scrollSpeed; + float f1 = (float)this.height - this.time * 0.5F * this.scrollSpeed; + float f2 = 0.015625F; + float f3 = this.time * 0.02F; + float f4 = (float)(this.totalScrollLength + this.height + this.height + 24) / this.scrollSpeed; + float f5 = (f4 - 20.0F - this.time) * 0.005F; + + if (f5 < f3) + { + f3 = f5; + } + + if (f3 > 1.0F) + { + f3 = 1.0F; + } + + f3 = f3 * f3; + f3 = f3 * 96.0F / 255.0F; + bufferbuilder.pos(0.0D, (double)this.height, (double)this.zLevel).tex(0.0D, (double)(f * 0.015625F)).color(f3, f3, f3, 1.0F).endVertex(); + bufferbuilder.pos((double)i, (double)this.height, (double)this.zLevel).tex((double)((float)i * 0.015625F), (double)(f * 0.015625F)).color(f3, f3, f3, 1.0F).endVertex(); + bufferbuilder.pos((double)i, 0.0D, (double)this.zLevel).tex((double)((float)i * 0.015625F), (double)(f1 * 0.015625F)).color(f3, f3, f3, 1.0F).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)this.zLevel).tex(0.0D, (double)(f1 * 0.015625F)).color(f3, f3, f3, 1.0F).endVertex(); + tessellator.draw(); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawWinGameScreen(mouseX, mouseY, partialTicks); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + int i = 274; + int j = this.width / 2 - 137; + int k = this.height + 50; + this.time += partialTicks; + float f = -this.time * this.scrollSpeed; + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, f, 0.0F); + this.mc.getTextureManager().bindTexture(MINECRAFT_LOGO); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableAlpha(); + this.drawTexturedModalRect(j, k, 0, 0, 155, 44); + this.drawTexturedModalRect(j + 155, k, 0, 45, 155, 44); + this.mc.getTextureManager().bindTexture(field_194401_g); + drawModalRectWithCustomSizedTexture(j + 88, k + 37, 0.0F, 0.0F, 98, 14, 128.0F, 16.0F); + GlStateManager.disableAlpha(); + int l = k + 100; + + for (int i1 = 0; i1 < this.lines.size(); ++i1) + { + if (i1 == this.lines.size() - 1) + { + float f1 = (float)l + f - (float)(this.height / 2 - 6); + + if (f1 < 0.0F) + { + GlStateManager.translate(0.0F, -f1, 0.0F); + } + } + + if ((float)l + f + 12.0F + 8.0F > 0.0F && (float)l + f < (float)this.height) + { + String s = this.lines.get(i1); + + if (s.startsWith("[C]")) + { + this.fontRenderer.drawStringWithShadow(s.substring(3), (float)(j + (274 - this.fontRenderer.getStringWidth(s.substring(3))) / 2), (float)l, 16777215); + } + else + { + this.fontRenderer.fontRandom.setSeed((long)((float)((long)i1 * 4238972211L) + this.time / 4.0F)); + this.fontRenderer.drawStringWithShadow(s, (float)j, (float)l, 16777215); + } + } + + l += 12; + } + + GlStateManager.popMatrix(); + this.mc.getTextureManager().bindTexture(VIGNETTE_TEXTURE); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE_MINUS_SRC_COLOR); + int j1 = this.width; + int k1 = this.height; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)k1, (double)this.zLevel).tex(0.0D, 1.0D).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)j1, (double)k1, (double)this.zLevel).tex(1.0D, 1.0D).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)j1, 0.0D, (double)this.zLevel).tex(1.0D, 0.0D).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)this.zLevel).tex(0.0D, 0.0D).color(1.0F, 1.0F, 1.0F, 1.0F).endVertex(); + tessellator.draw(); + GlStateManager.disableBlend(); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWorldEdit.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWorldEdit.java new file mode 100644 index 0000000..1aa435e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWorldEdit.java @@ -0,0 +1,129 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.FileUtils; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiWorldEdit extends GuiScreen +{ + private final GuiScreen lastScreen; + private GuiTextField nameEdit; + private final String worldId; + + public GuiWorldEdit(GuiScreen p_i46593_1_, String p_i46593_2_) + { + this.lastScreen = p_i46593_1_; + this.worldId = p_i46593_2_; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.nameEdit.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + GuiButton guibutton = this.addButton(new GuiButton(3, this.width / 2 - 100, this.height / 4 + 24 + 12, I18n.format("selectWorld.edit.resetIcon"))); + this.buttonList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 48 + 12, I18n.format("selectWorld.edit.openFolder"))); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, I18n.format("selectWorld.edit.save"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, I18n.format("gui.cancel"))); + guibutton.enabled = this.mc.getSaveLoader().getFile(this.worldId, "icon.png").isFile(); + ISaveFormat isaveformat = this.mc.getSaveLoader(); + WorldInfo worldinfo = isaveformat.getWorldInfo(this.worldId); + String s = worldinfo == null ? "" : worldinfo.getWorldName(); + this.nameEdit = new GuiTextField(2, this.fontRenderer, this.width / 2 - 100, 60, 200, 20); + this.nameEdit.setFocused(true); + this.nameEdit.setText(s); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 1) + { + this.mc.displayGuiScreen(this.lastScreen); + } + else if (button.id == 0) + { + ISaveFormat isaveformat = this.mc.getSaveLoader(); + isaveformat.renameWorld(this.worldId, this.nameEdit.getText().trim()); + this.mc.displayGuiScreen(this.lastScreen); + } + else if (button.id == 3) + { + ISaveFormat isaveformat1 = this.mc.getSaveLoader(); + FileUtils.deleteQuietly(isaveformat1.getFile(this.worldId, "icon.png")); + button.enabled = false; + } + else if (button.id == 4) + { + ISaveFormat isaveformat2 = this.mc.getSaveLoader(); + OpenGlHelper.openFile(isaveformat2.getFile(this.worldId, "icon.png").getParentFile()); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + this.nameEdit.textboxKeyTyped(typedChar, keyCode); + (this.buttonList.get(2)).enabled = !this.nameEdit.getText().trim().isEmpty(); + + if (keyCode == 28 || keyCode == 156) + { + this.actionPerformed(this.buttonList.get(2)); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.nameEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("selectWorld.edit.title"), this.width / 2, 20, 16777215); + this.drawString(this.fontRenderer, I18n.format("selectWorld.enterName"), this.width / 2 - 100, 47, 10526880); + this.nameEdit.drawTextBox(); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWorldSelection.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWorldSelection.java new file mode 100644 index 0000000..a6b2575 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiWorldSelection.java @@ -0,0 +1,162 @@ +package net.minecraft.client.gui; + +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiWorldSelection extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The screen to return to when this closes (always Main Menu). */ + protected GuiScreen prevScreen; + protected String title = "Select world"; + /** Tooltip displayed a world whose version is different from this client's */ + private String worldVersTooltip; + private GuiButton deleteButton; + private GuiButton selectButton; + private GuiButton renameButton; + private GuiButton copyButton; + private GuiListWorldSelection selectionList; + + public GuiWorldSelection(GuiScreen screenIn) + { + this.prevScreen = screenIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.title = I18n.format("selectWorld.title"); + this.selectionList = new GuiListWorldSelection(this, this.mc, this.width, this.height, 32, this.height - 64, 36); + this.postInit(); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + this.selectionList.handleMouseInput(); + } + + public void postInit() + { + this.selectButton = this.addButton(new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, I18n.format("selectWorld.select"))); + this.addButton(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, I18n.format("selectWorld.create"))); + this.renameButton = this.addButton(new GuiButton(4, this.width / 2 - 154, this.height - 28, 72, 20, I18n.format("selectWorld.edit"))); + this.deleteButton = this.addButton(new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, I18n.format("selectWorld.delete"))); + this.copyButton = this.addButton(new GuiButton(5, this.width / 2 + 4, this.height - 28, 72, 20, I18n.format("selectWorld.recreate"))); + this.addButton(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, I18n.format("gui.cancel"))); + this.selectButton.enabled = false; + this.deleteButton.enabled = false; + this.renameButton.enabled = false; + this.copyButton.enabled = false; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + GuiListWorldSelectionEntry guilistworldselectionentry = this.selectionList.getSelectedWorld(); + + if (button.id == 2) + { + if (guilistworldselectionentry != null) + { + guilistworldselectionentry.deleteWorld(); + } + } + else if (button.id == 1) + { + if (guilistworldselectionentry != null) + { + guilistworldselectionentry.joinWorld(); + } + } + else if (button.id == 3) + { + this.mc.displayGuiScreen(new GuiCreateWorld(this)); + } + else if (button.id == 4) + { + if (guilistworldselectionentry != null) + { + guilistworldselectionentry.editWorld(); + } + } + else if (button.id == 0) + { + this.mc.displayGuiScreen(this.prevScreen); + } + else if (button.id == 5 && guilistworldselectionentry != null) + { + guilistworldselectionentry.recreateWorld(); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.worldVersTooltip = null; + this.selectionList.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 20, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.worldVersTooltip != null) + { + this.drawHoveringText(Lists.newArrayList(Splitter.on("\n").split(this.worldVersTooltip)), mouseX, mouseY); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.selectionList.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + super.mouseReleased(mouseX, mouseY, state); + this.selectionList.mouseReleased(mouseX, mouseY, state); + } + + /** + * Called back by selectionList when we call its drawScreen method, from ours. + */ + public void setVersionTooltip(String p_184861_1_) + { + this.worldVersTooltip = p_184861_1_; + } + + public void selectWorld(@Nullable GuiListWorldSelectionEntry entry) + { + boolean flag = entry != null; + this.selectButton.enabled = flag; + this.deleteButton.enabled = flag; + this.renameButton.enabled = flag; + this.copyButton.enabled = flag; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiYesNo.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiYesNo.java new file mode 100644 index 0000000..18943fd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiYesNo.java @@ -0,0 +1,111 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiYesNo extends GuiScreen +{ + /** A reference to the screen object that created this. Used for navigating between screens. */ + protected GuiYesNoCallback parentScreen; + protected String messageLine1; + private final String messageLine2; + private final List listLines = Lists.newArrayList(); + /** The text shown for the first button in GuiYesNo */ + protected String confirmButtonText; + /** The text shown for the second button in GuiYesNo */ + protected String cancelButtonText; + protected int parentButtonClickedId; + private int ticksUntilEnable; + + public GuiYesNo(GuiYesNoCallback parentScreenIn, String messageLine1In, String messageLine2In, int parentButtonClickedIdIn) + { + this.parentScreen = parentScreenIn; + this.messageLine1 = messageLine1In; + this.messageLine2 = messageLine2In; + this.parentButtonClickedId = parentButtonClickedIdIn; + this.confirmButtonText = I18n.format("gui.yes"); + this.cancelButtonText = I18n.format("gui.no"); + } + + public GuiYesNo(GuiYesNoCallback parentScreenIn, String messageLine1In, String messageLine2In, String confirmButtonTextIn, String cancelButtonTextIn, int parentButtonClickedIdIn) + { + this.parentScreen = parentScreenIn; + this.messageLine1 = messageLine1In; + this.messageLine2 = messageLine2In; + this.confirmButtonText = confirmButtonTextIn; + this.cancelButtonText = cancelButtonTextIn; + this.parentButtonClickedId = parentButtonClickedIdIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.add(new GuiOptionButton(0, this.width / 2 - 155, this.height / 6 + 96, this.confirmButtonText)); + this.buttonList.add(new GuiOptionButton(1, this.width / 2 - 155 + 160, this.height / 6 + 96, this.cancelButtonText)); + this.listLines.clear(); + this.listLines.addAll(this.fontRenderer.listFormattedStringToWidth(this.messageLine2, this.width - 50)); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + this.parentScreen.confirmClicked(button.id == 0, this.parentButtonClickedId); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.messageLine1, this.width / 2, 70, 16777215); + int i = 90; + + for (String s : this.listLines) + { + this.drawCenteredString(this.fontRenderer, s, this.width / 2, i, 16777215); + i += this.fontRenderer.FONT_HEIGHT; + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Sets the number of ticks to wait before enabling the buttons. + */ + public void setButtonDelay(int ticksUntilEnableIn) + { + this.ticksUntilEnable = ticksUntilEnableIn; + + for (GuiButton guibutton : this.buttonList) + { + guibutton.enabled = false; + } + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + + if (--this.ticksUntilEnable == 0) + { + for (GuiButton guibutton : this.buttonList) + { + guibutton.enabled = true; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiYesNoCallback.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiYesNoCallback.java new file mode 100644 index 0000000..203ec53 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/GuiYesNoCallback.java @@ -0,0 +1,10 @@ +package net.minecraft.client.gui; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface GuiYesNoCallback +{ + void confirmClicked(boolean result, int id); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/IProgressMeter.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/IProgressMeter.java new file mode 100644 index 0000000..a0cd09f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/IProgressMeter.java @@ -0,0 +1,12 @@ +package net.minecraft.client.gui; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IProgressMeter +{ + String[] LOADING_STRINGS = new String[] {"oooooo", "Oooooo", "oOoooo", "ooOooo", "oooOoo", "ooooOo", "oooooO"}; + + void onStatsUpdated(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/MapItemRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/MapItemRenderer.java new file mode 100644 index 0000000..da30187 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/MapItemRenderer.java @@ -0,0 +1,187 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.material.MapColor; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.storage.MapData; +import net.minecraft.world.storage.MapDecoration; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MapItemRenderer +{ + private static final ResourceLocation TEXTURE_MAP_ICONS = new ResourceLocation("textures/map/map_icons.png"); + private final TextureManager textureManager; + private final Map loadedMaps = Maps.newHashMap(); + + public MapItemRenderer(TextureManager textureManagerIn) + { + this.textureManager = textureManagerIn; + } + + /** + * Updates a map texture + */ + public void updateMapTexture(MapData mapdataIn) + { + this.getMapRendererInstance(mapdataIn).updateMapTexture(); + } + + public void renderMap(MapData mapdataIn, boolean noOverlayRendering) + { + this.getMapRendererInstance(mapdataIn).render(noOverlayRendering); + } + + /** + * Returns {@link net.minecraft.client.gui.MapItemRenderer.Instance MapItemRenderer.Instance} with given map data + */ + private MapItemRenderer.Instance getMapRendererInstance(MapData mapdataIn) + { + MapItemRenderer.Instance mapitemrenderer$instance = this.loadedMaps.get(mapdataIn.mapName); + + if (mapitemrenderer$instance == null) + { + mapitemrenderer$instance = new MapItemRenderer.Instance(mapdataIn); + this.loadedMaps.put(mapdataIn.mapName, mapitemrenderer$instance); + } + + return mapitemrenderer$instance; + } + + @Nullable + public MapItemRenderer.Instance getMapInstanceIfExists(String p_191205_1_) + { + return this.loadedMaps.get(p_191205_1_); + } + + /** + * Clears the currently loaded maps and removes their corresponding textures + */ + public void clearLoadedMaps() + { + for (MapItemRenderer.Instance mapitemrenderer$instance : this.loadedMaps.values()) + { + this.textureManager.deleteTexture(mapitemrenderer$instance.location); + } + + this.loadedMaps.clear(); + } + + @Nullable + public MapData getData(@Nullable MapItemRenderer.Instance p_191207_1_) + { + return p_191207_1_ != null ? p_191207_1_.mapData : null; + } + + @SideOnly(Side.CLIENT) + class Instance + { + private final MapData mapData; + private final DynamicTexture mapTexture; + private final ResourceLocation location; + private final int[] mapTextureData; + + private Instance(MapData mapdataIn) + { + this.mapData = mapdataIn; + this.mapTexture = new DynamicTexture(128, 128); + this.mapTextureData = this.mapTexture.getTextureData(); + this.location = MapItemRenderer.this.textureManager.getDynamicTextureLocation("map/" + mapdataIn.mapName, this.mapTexture); + + for (int i = 0; i < this.mapTextureData.length; ++i) + { + this.mapTextureData[i] = 0; + } + } + + /** + * Updates a map {@link net.minecraft.client.gui.MapItemRenderer.Instance#mapTexture texture} + */ + private void updateMapTexture() + { + for (int i = 0; i < 16384; ++i) + { + int j = this.mapData.colors[i] & 255; + + if (j / 4 == 0) + { + this.mapTextureData[i] = (i + i / 128 & 1) * 8 + 16 << 24; + } + else + { + this.mapTextureData[i] = MapColor.COLORS[j / 4].getMapColor(j & 3); + } + } + + this.mapTexture.updateDynamicTexture(); + } + + /** + * Renders map and players to it + */ + private void render(boolean noOverlayRendering) + { + int i = 0; + int j = 0; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f = 0.0F; + MapItemRenderer.this.textureManager.bindTexture(this.location); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); + GlStateManager.disableAlpha(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(0.0D, 128.0D, -0.009999999776482582D).tex(0.0D, 1.0D).endVertex(); + bufferbuilder.pos(128.0D, 128.0D, -0.009999999776482582D).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos(128.0D, 0.0D, -0.009999999776482582D).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, -0.009999999776482582D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + GlStateManager.enableAlpha(); + GlStateManager.disableBlend(); + MapItemRenderer.this.textureManager.bindTexture(MapItemRenderer.TEXTURE_MAP_ICONS); + int k = 0; + + for (MapDecoration mapdecoration : this.mapData.mapDecorations.values()) + { + if (!noOverlayRendering || mapdecoration.renderOnFrame()) + { + if (mapdecoration.render(k)) { k++; continue; } + MapItemRenderer.this.textureManager.bindTexture(MapItemRenderer.TEXTURE_MAP_ICONS); // Rebind in case custom render changes it + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F + (float)mapdecoration.getX() / 2.0F + 64.0F, 0.0F + (float)mapdecoration.getY() / 2.0F + 64.0F, -0.02F); + GlStateManager.rotate((float)(mapdecoration.getRotation() * 360) / 16.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.scale(4.0F, 4.0F, 3.0F); + GlStateManager.translate(-0.125F, 0.125F, 0.0F); + byte b0 = mapdecoration.getImage(); + float f1 = (float)(b0 % 4 + 0) / 4.0F; + float f2 = (float)(b0 / 4 + 0) / 4.0F; + float f3 = (float)(b0 % 4 + 1) / 4.0F; + float f4 = (float)(b0 / 4 + 1) / 4.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + float f5 = -0.001F; + bufferbuilder.pos(-1.0D, 1.0D, (double)((float)k * -0.001F)).tex((double)f1, (double)f2).endVertex(); + bufferbuilder.pos(1.0D, 1.0D, (double)((float)k * -0.001F)).tex((double)f3, (double)f2).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, (double)((float)k * -0.001F)).tex((double)f3, (double)f4).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, (double)((float)k * -0.001F)).tex((double)f1, (double)f4).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + ++k; + } + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, -0.04F); + GlStateManager.scale(1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ScaledResolution.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ScaledResolution.java new file mode 100644 index 0000000..8c6d351 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ScaledResolution.java @@ -0,0 +1,70 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ScaledResolution +{ + private final double scaledWidthD; + private final double scaledHeightD; + private int scaledWidth; + private int scaledHeight; + private int scaleFactor; + + public ScaledResolution(Minecraft minecraftClient) + { + this.scaledWidth = minecraftClient.displayWidth; + this.scaledHeight = minecraftClient.displayHeight; + this.scaleFactor = 1; + boolean flag = minecraftClient.isUnicode(); + int i = minecraftClient.gameSettings.guiScale; + + if (i == 0) + { + i = 1000; + } + + while (this.scaleFactor < i && this.scaledWidth / (this.scaleFactor + 1) >= 320 && this.scaledHeight / (this.scaleFactor + 1) >= 240) + { + ++this.scaleFactor; + } + + if (flag && this.scaleFactor % 2 != 0 && this.scaleFactor != 1) + { + --this.scaleFactor; + } + + this.scaledWidthD = (double)this.scaledWidth / (double)this.scaleFactor; + this.scaledHeightD = (double)this.scaledHeight / (double)this.scaleFactor; + this.scaledWidth = MathHelper.ceil(this.scaledWidthD); + this.scaledHeight = MathHelper.ceil(this.scaledHeightD); + } + + public int getScaledWidth() + { + return this.scaledWidth; + } + + public int getScaledHeight() + { + return this.scaledHeight; + } + + public double getScaledWidth_double() + { + return this.scaledWidthD; + } + + public double getScaledHeight_double() + { + return this.scaledHeightD; + } + + public int getScaleFactor() + { + return this.scaleFactor; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ScreenChatOptions.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ScreenChatOptions.java new file mode 100644 index 0000000..29abe1c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ScreenChatOptions.java @@ -0,0 +1,107 @@ +package net.minecraft.client.gui; + +import java.io.IOException; +import net.minecraft.client.gui.chat.NarratorChatListener; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ScreenChatOptions extends GuiScreen +{ + private static final GameSettings.Options[] CHAT_OPTIONS = new GameSettings.Options[] {GameSettings.Options.CHAT_VISIBILITY, GameSettings.Options.CHAT_COLOR, GameSettings.Options.CHAT_LINKS, GameSettings.Options.CHAT_OPACITY, GameSettings.Options.CHAT_LINKS_PROMPT, GameSettings.Options.CHAT_SCALE, GameSettings.Options.CHAT_HEIGHT_FOCUSED, GameSettings.Options.CHAT_HEIGHT_UNFOCUSED, GameSettings.Options.CHAT_WIDTH, GameSettings.Options.REDUCED_DEBUG_INFO, GameSettings.Options.NARRATOR}; + private final GuiScreen parentScreen; + private final GameSettings game_settings; + private String chatTitle; + private GuiOptionButton narratorButton; + + public ScreenChatOptions(GuiScreen parentScreenIn, GameSettings gameSettingsIn) + { + this.parentScreen = parentScreenIn; + this.game_settings = gameSettingsIn; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.chatTitle = I18n.format("options.chat.title"); + int i = 0; + + for (GameSettings.Options gamesettings$options : CHAT_OPTIONS) + { + if (gamesettings$options.isFloat()) + { + this.buttonList.add(new GuiOptionSlider(gamesettings$options.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 + 24 * (i >> 1), gamesettings$options)); + } + else + { + GuiOptionButton guioptionbutton = new GuiOptionButton(gamesettings$options.getOrdinal(), this.width / 2 - 155 + i % 2 * 160, this.height / 6 + 24 * (i >> 1), gamesettings$options, this.game_settings.getKeyBinding(gamesettings$options)); + this.buttonList.add(guioptionbutton); + + if (gamesettings$options == GameSettings.Options.NARRATOR) + { + this.narratorButton = guioptionbutton; + guioptionbutton.enabled = NarratorChatListener.INSTANCE.isActive(); + } + } + + ++i; + } + + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 144, I18n.format("gui.done"))); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1) + { + this.mc.gameSettings.saveOptions(); + } + + super.keyTyped(typedChar, keyCode); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id < 100 && button instanceof GuiOptionButton) + { + this.game_settings.setOptionValue(((GuiOptionButton)button).getOption(), 1); + button.displayString = this.game_settings.getKeyBinding(GameSettings.Options.byOrdinal(button.id)); + } + + if (button.id == 200) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentScreen); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.chatTitle, this.width / 2, 20, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + public void updateNarratorButton() + { + this.narratorButton.displayString = this.game_settings.getKeyBinding(GameSettings.Options.byOrdinal(this.narratorButton.id)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryLanDetected.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryLanDetected.java new file mode 100644 index 0000000..0df661a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryLanDetected.java @@ -0,0 +1,71 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.LanServerInfo; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ServerListEntryLanDetected implements GuiListExtended.IGuiListEntry +{ + private final GuiMultiplayer screen; + protected final Minecraft mc; + protected final LanServerInfo serverData; + private long lastClickTime; + + protected ServerListEntryLanDetected(GuiMultiplayer p_i47141_1_, LanServerInfo p_i47141_2_) + { + this.screen = p_i47141_1_; + this.serverData = p_i47141_2_; + this.mc = Minecraft.getMinecraft(); + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + this.mc.fontRenderer.drawString(I18n.format("lanServer.title"), x + 32 + 3, y + 1, 16777215); + this.mc.fontRenderer.drawString(this.serverData.getServerMotd(), x + 32 + 3, y + 12, 8421504); + + if (this.mc.gameSettings.hideServerAddress) + { + this.mc.fontRenderer.drawString(I18n.format("selectServer.hiddenAddress"), x + 32 + 3, y + 12 + 11, 3158064); + } + else + { + this.mc.fontRenderer.drawString(this.serverData.getServerIpPort(), x + 32 + 3, y + 12 + 11, 3158064); + } + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + this.screen.selectServer(slotIndex); + + if (Minecraft.getSystemTime() - this.lastClickTime < 250L) + { + this.screen.connectToSelected(); + } + + this.lastClickTime = Minecraft.getSystemTime(); + return false; + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + } + + public LanServerInfo getServerData() + { + return this.serverData; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryLanScan.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryLanScan.java new file mode 100644 index 0000000..a8d4eb0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryLanScan.java @@ -0,0 +1,55 @@ +package net.minecraft.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ServerListEntryLanScan implements GuiListExtended.IGuiListEntry +{ + private final Minecraft mc = Minecraft.getMinecraft(); + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + int i = y + slotHeight / 2 - this.mc.fontRenderer.FONT_HEIGHT / 2; + this.mc.fontRenderer.drawString(I18n.format("lanServer.scanning"), this.mc.currentScreen.width / 2 - this.mc.fontRenderer.getStringWidth(I18n.format("lanServer.scanning")) / 2, i, 16777215); + String s; + + switch ((int)(Minecraft.getSystemTime() / 300L % 4L)) + { + case 0: + default: + s = "O o o"; + break; + case 1: + case 3: + s = "o O o"; + break; + case 2: + s = "o o O"; + } + + this.mc.fontRenderer.drawString(s, this.mc.currentScreen.width / 2 - this.mc.fontRenderer.getStringWidth(s) / 2, i + this.mc.fontRenderer.FONT_HEIGHT, 8421504); + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + return false; + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryNormal.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryNormal.java new file mode 100644 index 0000000..a063a8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerListEntryNormal.java @@ -0,0 +1,358 @@ +package net.minecraft.client.gui; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufInputStream; +import io.netty.buffer.Unpooled; +import io.netty.handler.codec.base64.Base64; +import java.awt.image.BufferedImage; +import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ServerListEntryNormal implements GuiListExtended.IGuiListEntry +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ThreadPoolExecutor EXECUTOR = new ScheduledThreadPoolExecutor(5, (new ThreadFactoryBuilder()).setNameFormat("Server Pinger #%d").setDaemon(true).build()); + private static final ResourceLocation UNKNOWN_SERVER = new ResourceLocation("textures/misc/unknown_server.png"); + private static final ResourceLocation SERVER_SELECTION_BUTTONS = new ResourceLocation("textures/gui/server_selection.png"); + private final GuiMultiplayer owner; + private final Minecraft mc; + private final ServerData server; + private final ResourceLocation serverIcon; + private String lastIconB64; + private DynamicTexture icon; + private long lastClickTime; + + protected ServerListEntryNormal(GuiMultiplayer ownerIn, ServerData serverIn) + { + this.owner = ownerIn; + this.server = serverIn; + this.mc = Minecraft.getMinecraft(); + this.serverIcon = new ResourceLocation("servers/" + serverIn.serverIP + "/icon"); + this.icon = (DynamicTexture)this.mc.getTextureManager().getTexture(this.serverIcon); + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + if (!this.server.pinged) + { + this.server.pinged = true; + this.server.pingToServer = -2L; + this.server.serverMOTD = ""; + this.server.populationInfo = ""; + EXECUTOR.submit(new Runnable() + { + public void run() + { + try + { + ServerListEntryNormal.this.owner.getOldServerPinger().ping(ServerListEntryNormal.this.server); + } + catch (UnknownHostException var2) + { + ServerListEntryNormal.this.server.pingToServer = -1L; + ServerListEntryNormal.this.server.serverMOTD = TextFormatting.DARK_RED + I18n.format("multiplayer.status.cannot_resolve"); + } + catch (Exception var3) + { + ServerListEntryNormal.this.server.pingToServer = -1L; + ServerListEntryNormal.this.server.serverMOTD = TextFormatting.DARK_RED + I18n.format("multiplayer.status.cannot_connect"); + } + } + }); + } + + boolean flag = this.server.version > 340; + boolean flag1 = this.server.version < 340; + boolean flag2 = flag || flag1; + this.mc.fontRenderer.drawString(this.server.serverName, x + 32 + 3, y + 1, 16777215); + List list = this.mc.fontRenderer.listFormattedStringToWidth(net.minecraftforge.fml.client.FMLClientHandler.instance().fixDescription(this.server.serverMOTD), listWidth - 32 - 2); + + for (int i = 0; i < Math.min(list.size(), 2); ++i) + { + this.mc.fontRenderer.drawString(list.get(i), x + 32 + 3, y + 12 + this.mc.fontRenderer.FONT_HEIGHT * i, 8421504); + } + + String s2 = flag2 ? TextFormatting.DARK_RED + this.server.gameVersion : this.server.populationInfo; + int j = this.mc.fontRenderer.getStringWidth(s2); + this.mc.fontRenderer.drawString(s2, x + listWidth - j - 15 - 2, y + 1, 8421504); + int k = 0; + String s = null; + int l; + String s1; + + if (flag2) + { + l = 5; + s1 = I18n.format(flag ? "multiplayer.status.client_out_of_date" : "multiplayer.status.server_out_of_date"); + s = this.server.playerList; + } + else if (this.server.pinged && this.server.pingToServer != -2L) + { + if (this.server.pingToServer < 0L) + { + l = 5; + } + else if (this.server.pingToServer < 150L) + { + l = 0; + } + else if (this.server.pingToServer < 300L) + { + l = 1; + } + else if (this.server.pingToServer < 600L) + { + l = 2; + } + else if (this.server.pingToServer < 1000L) + { + l = 3; + } + else + { + l = 4; + } + + if (this.server.pingToServer < 0L) + { + s1 = I18n.format("multiplayer.status.no_connection"); + } + else + { + s1 = this.server.pingToServer + "ms"; + s = this.server.playerList; + } + } + else + { + k = 1; + l = (int)(Minecraft.getSystemTime() / 100L + (long)(slotIndex * 2) & 7L); + + if (l > 4) + { + l = 8 - l; + } + + s1 = I18n.format("multiplayer.status.pinging"); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(Gui.ICONS); + Gui.drawModalRectWithCustomSizedTexture(x + listWidth - 15, y, (float)(k * 10), (float)(176 + l * 8), 10, 8, 256.0F, 256.0F); + + if (this.server.getBase64EncodedIconData() != null && !this.server.getBase64EncodedIconData().equals(this.lastIconB64)) + { + this.lastIconB64 = this.server.getBase64EncodedIconData(); + this.prepareServerIcon(); + this.owner.getServerList().saveServerList(); + } + + if (this.icon != null) + { + this.drawTextureAt(x, y, this.serverIcon); + } + else + { + this.drawTextureAt(x, y, UNKNOWN_SERVER); + } + + int i1 = mouseX - x; + int j1 = mouseY - y; + + String tooltip = net.minecraftforge.fml.client.FMLClientHandler.instance().enhanceServerListEntry(this, this.server, x, listWidth, y, i1, j1); + if (tooltip != null) + { + this.owner.setHoveringText(tooltip); + } else + if (i1 >= listWidth - 15 && i1 <= listWidth - 5 && j1 >= 0 && j1 <= 8) + { + this.owner.setHoveringText(s1); + } + else if (i1 >= listWidth - j - 15 - 2 && i1 <= listWidth - 15 - 2 && j1 >= 0 && j1 <= 8) + { + this.owner.setHoveringText(s); + } + + if (this.mc.gameSettings.touchscreen || isSelected) + { + this.mc.getTextureManager().bindTexture(SERVER_SELECTION_BUTTONS); + Gui.drawRect(x, y, x + 32, y + 32, -1601138544); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int k1 = mouseX - x; + int l1 = mouseY - y; + + if (this.canJoin()) + { + if (k1 < 32 && k1 > 16) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + + if (this.owner.canMoveUp(this, slotIndex)) + { + if (k1 < 16 && l1 < 16) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 96.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 96.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + + if (this.owner.canMoveDown(this, slotIndex)) + { + if (k1 < 16 && l1 > 16) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 64.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 64.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + } + } + + protected void drawTextureAt(int p_178012_1_, int p_178012_2_, ResourceLocation p_178012_3_) + { + this.mc.getTextureManager().bindTexture(p_178012_3_); + GlStateManager.enableBlend(); + Gui.drawModalRectWithCustomSizedTexture(p_178012_1_, p_178012_2_, 0.0F, 0.0F, 32, 32, 32.0F, 32.0F); + GlStateManager.disableBlend(); + } + + private boolean canJoin() + { + return true; + } + + private void prepareServerIcon() + { + if (this.server.getBase64EncodedIconData() == null) + { + this.mc.getTextureManager().deleteTexture(this.serverIcon); + this.icon = null; + } + else + { + ByteBuf bytebuf = Unpooled.copiedBuffer((CharSequence)this.server.getBase64EncodedIconData(), StandardCharsets.UTF_8); + ByteBuf bytebuf1 = null; + BufferedImage bufferedimage; + label99: + { + try + { + bytebuf1 = Base64.decode(bytebuf); + bufferedimage = TextureUtil.readBufferedImage(new ByteBufInputStream(bytebuf1)); + Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide"); + Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high"); + break label99; + } + catch (Throwable throwable) + { + LOGGER.error("Invalid icon for server {} ({})", this.server.serverName, this.server.serverIP, throwable); + this.server.setBase64EncodedIconData((String)null); + } + finally + { + bytebuf.release(); + + if (bytebuf1 != null) + { + bytebuf1.release(); + } + } + + return; + } + + if (this.icon == null) + { + this.icon = new DynamicTexture(bufferedimage.getWidth(), bufferedimage.getHeight()); + this.mc.getTextureManager().loadTexture(this.serverIcon, this.icon); + } + + bufferedimage.getRGB(0, 0, bufferedimage.getWidth(), bufferedimage.getHeight(), this.icon.getTextureData(), 0, bufferedimage.getWidth()); + this.icon.updateDynamicTexture(); + } + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + if (relativeX <= 32) + { + if (relativeX < 32 && relativeX > 16 && this.canJoin()) + { + this.owner.selectServer(slotIndex); + this.owner.connectToSelected(); + return true; + } + + if (relativeX < 16 && relativeY < 16 && this.owner.canMoveUp(this, slotIndex)) + { + this.owner.moveServerUp(this, slotIndex, GuiScreen.isShiftKeyDown()); + return true; + } + + if (relativeX < 16 && relativeY > 16 && this.owner.canMoveDown(this, slotIndex)) + { + this.owner.moveServerDown(this, slotIndex, GuiScreen.isShiftKeyDown()); + return true; + } + } + + this.owner.selectServer(slotIndex); + + if (Minecraft.getSystemTime() - this.lastClickTime < 250L) + { + this.owner.connectToSelected(); + } + + this.lastClickTime = Minecraft.getSystemTime(); + return false; + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + } + + public ServerData getServerData() + { + return this.server; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerSelectionList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerSelectionList.java new file mode 100644 index 0000000..7f8e4fd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/ServerSelectionList.java @@ -0,0 +1,106 @@ +package net.minecraft.client.gui; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ServerList; +import net.minecraft.client.network.LanServerInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ServerSelectionList extends GuiListExtended +{ + private final GuiMultiplayer owner; + private final List serverListInternet = Lists.newArrayList(); + private final List serverListLan = Lists.newArrayList(); + private final GuiListExtended.IGuiListEntry lanScanEntry = new ServerListEntryLanScan(); + private int selectedSlotIndex = -1; + + public ServerSelectionList(GuiMultiplayer ownerIn, Minecraft mcIn, int widthIn, int heightIn, int topIn, int bottomIn, int slotHeightIn) + { + super(mcIn, widthIn, heightIn, topIn, bottomIn, slotHeightIn); + this.owner = ownerIn; + } + + /** + * Gets the IGuiListEntry object for the given index + */ + public GuiListExtended.IGuiListEntry getListEntry(int index) + { + if (index < this.serverListInternet.size()) + { + return this.serverListInternet.get(index); + } + else + { + index = index - this.serverListInternet.size(); + + if (index == 0) + { + return this.lanScanEntry; + } + else + { + --index; + return this.serverListLan.get(index); + } + } + } + + protected int getSize() + { + return this.serverListInternet.size() + 1 + this.serverListLan.size(); + } + + public void setSelectedSlotIndex(int selectedSlotIndexIn) + { + this.selectedSlotIndex = selectedSlotIndexIn; + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return slotIndex == this.selectedSlotIndex; + } + + public int getSelected() + { + return this.selectedSlotIndex; + } + + public void updateOnlineServers(ServerList p_148195_1_) + { + this.serverListInternet.clear(); + + for (int i = 0; i < p_148195_1_.countServers(); ++i) + { + this.serverListInternet.add(new ServerListEntryNormal(this.owner, p_148195_1_.getServerData(i))); + } + } + + public void updateNetworkServers(List p_148194_1_) + { + this.serverListLan.clear(); + + for (LanServerInfo lanserverinfo : p_148194_1_) + { + this.serverListLan.add(new ServerListEntryLanDetected(this.owner, lanserverinfo)); + } + } + + protected int getScrollBarX() + { + return super.getScrollBarX() + 30; + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return super.getListWidth() + 85; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/achievement/GuiStats.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/achievement/GuiStats.java new file mode 100644 index 0000000..2b995b9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/achievement/GuiStats.java @@ -0,0 +1,1023 @@ +package net.minecraft.client.gui.achievement; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiSlot; +import net.minecraft.client.gui.IProgressMeter; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.EntityList; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.network.play.client.CPacketClientStatus; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatCrafting; +import net.minecraft.stats.StatList; +import net.minecraft.stats.StatisticsManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public class GuiStats extends GuiScreen implements IProgressMeter +{ + protected GuiScreen parentScreen; + protected String screenTitle = "Select world"; + private GuiStats.StatsGeneral generalStats; + private GuiStats.StatsItem itemStats; + private GuiStats.StatsBlock blockStats; + private GuiStats.StatsMobsList mobStats; + private final StatisticsManager stats; + private GuiSlot displaySlot; + /** When true, the game will be paused when the gui is shown */ + private boolean doesGuiPauseGame = true; + + public GuiStats(GuiScreen parent, StatisticsManager manager) + { + this.parentScreen = parent; + this.stats = manager; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.screenTitle = I18n.format("gui.stats"); + this.doesGuiPauseGame = true; + this.mc.getConnection().sendPacket(new CPacketClientStatus(CPacketClientStatus.State.REQUEST_STATS)); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + + if (this.displaySlot != null) + { + this.displaySlot.handleMouseInput(); + } + } + + public void initLists() + { + this.generalStats = new GuiStats.StatsGeneral(this.mc); + this.generalStats.registerScrollButtons(1, 1); + this.itemStats = new GuiStats.StatsItem(this.mc); + this.itemStats.registerScrollButtons(1, 1); + this.blockStats = new GuiStats.StatsBlock(this.mc); + this.blockStats.registerScrollButtons(1, 1); + this.mobStats = new GuiStats.StatsMobsList(this.mc); + this.mobStats.registerScrollButtons(1, 1); + } + + public void initButtons() + { + this.buttonList.add(new GuiButton(0, this.width / 2 + 4, this.height - 28, 150, 20, I18n.format("gui.done"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 160, this.height - 52, 80, 20, I18n.format("stat.generalButton"))); + GuiButton guibutton = this.addButton(new GuiButton(2, this.width / 2 - 80, this.height - 52, 80, 20, I18n.format("stat.blocksButton"))); + GuiButton guibutton1 = this.addButton(new GuiButton(3, this.width / 2, this.height - 52, 80, 20, I18n.format("stat.itemsButton"))); + GuiButton guibutton2 = this.addButton(new GuiButton(4, this.width / 2 + 80, this.height - 52, 80, 20, I18n.format("stat.mobsButton"))); + + if (this.blockStats.getSize() == 0) + { + guibutton.enabled = false; + } + + if (this.itemStats.getSize() == 0) + { + guibutton1.enabled = false; + } + + if (this.mobStats.getSize() == 0) + { + guibutton2.enabled = false; + } + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 0) + { + this.mc.displayGuiScreen(this.parentScreen); + } + else if (button.id == 1) + { + this.displaySlot = this.generalStats; + } + else if (button.id == 3) + { + this.displaySlot = this.itemStats; + } + else if (button.id == 2) + { + this.displaySlot = this.blockStats; + } + else if (button.id == 4) + { + this.displaySlot = this.mobStats; + } + else + { + this.displaySlot.actionPerformed(button); + } + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + if (this.doesGuiPauseGame) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("multiplayer.downloadingStats"), this.width / 2, this.height / 2, 16777215); + this.drawCenteredString(this.fontRenderer, LOADING_STRINGS[(int)(Minecraft.getSystemTime() / 150L % (long)LOADING_STRINGS.length)], this.width / 2, this.height / 2 + this.fontRenderer.FONT_HEIGHT * 2, 16777215); + } + else + { + this.displaySlot.drawScreen(mouseX, mouseY, partialTicks); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + super.drawScreen(mouseX, mouseY, partialTicks); + } + } + + public void onStatsUpdated() + { + if (this.doesGuiPauseGame) + { + this.initLists(); + this.initButtons(); + this.displaySlot = this.generalStats; + this.doesGuiPauseGame = false; + } + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return !this.doesGuiPauseGame; + } + + private void drawStatsScreen(int x, int y, Item itemIn) + { + this.drawButtonBackground(x + 1, y + 1); + GlStateManager.enableRescaleNormal(); + RenderHelper.enableGUIStandardItemLighting(); + this.itemRender.renderItemIntoGUI(itemIn.getDefaultInstance(), x + 2, y + 2); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + } + + /** + * Draws a gray box that serves as a button background. + */ + private void drawButtonBackground(int x, int y) + { + this.drawSprite(x, y, 0, 0); + } + + /** + * Draws a sprite from assets/textures/gui/container/stats_icons.png + */ + private void drawSprite(int x, int y, int u, int v) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(STAT_ICONS); + float f = 0.0078125F; + float f1 = 0.0078125F; + int i = 18; + int j = 18; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(x + 0), (double)(y + 18), (double)this.zLevel).tex((double)((float)(u + 0) * 0.0078125F), (double)((float)(v + 18) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(x + 18), (double)(y + 18), (double)this.zLevel).tex((double)((float)(u + 18) * 0.0078125F), (double)((float)(v + 18) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(x + 18), (double)(y + 0), (double)this.zLevel).tex((double)((float)(u + 18) * 0.0078125F), (double)((float)(v + 0) * 0.0078125F)).endVertex(); + bufferbuilder.pos((double)(x + 0), (double)(y + 0), (double)this.zLevel).tex((double)((float)(u + 0) * 0.0078125F), (double)((float)(v + 0) * 0.0078125F)).endVertex(); + tessellator.draw(); + } + + @SideOnly(Side.CLIENT) + abstract class Stats extends GuiSlot + { + protected int headerPressed = -1; + protected List statsHolder; + protected Comparator statSorter; + protected int sortColumn = -1; + protected int sortOrder; + + protected Stats(Minecraft p_i47550_2_) + { + super(p_i47550_2_, GuiStats.this.width, GuiStats.this.height, 32, GuiStats.this.height - 64, 20); + this.setShowSelectionBox(false); + this.setHasListHeader(true, 20); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return false; + } + + /** + * Gets the width of the list + */ + public int getListWidth() + { + return 375; + } + + protected int getScrollBarX() + { + return this.width / 2 + 140; + } + + protected void drawBackground() + { + GuiStats.this.drawDefaultBackground(); + } + + /** + * Handles drawing a list's header row. + */ + protected void drawListHeader(int insideLeft, int insideTop, Tessellator tessellatorIn) + { + if (!Mouse.isButtonDown(0)) + { + this.headerPressed = -1; + } + + if (this.headerPressed == 0) + { + GuiStats.this.drawSprite(insideLeft + 115 - 18, insideTop + 1, 0, 0); + } + else + { + GuiStats.this.drawSprite(insideLeft + 115 - 18, insideTop + 1, 0, 18); + } + + if (this.headerPressed == 1) + { + GuiStats.this.drawSprite(insideLeft + 165 - 18, insideTop + 1, 0, 0); + } + else + { + GuiStats.this.drawSprite(insideLeft + 165 - 18, insideTop + 1, 0, 18); + } + + if (this.headerPressed == 2) + { + GuiStats.this.drawSprite(insideLeft + 215 - 18, insideTop + 1, 0, 0); + } + else + { + GuiStats.this.drawSprite(insideLeft + 215 - 18, insideTop + 1, 0, 18); + } + + if (this.headerPressed == 3) + { + GuiStats.this.drawSprite(insideLeft + 265 - 18, insideTop + 1, 0, 0); + } + else + { + GuiStats.this.drawSprite(insideLeft + 265 - 18, insideTop + 1, 0, 18); + } + + if (this.headerPressed == 4) + { + GuiStats.this.drawSprite(insideLeft + 315 - 18, insideTop + 1, 0, 0); + } + else + { + GuiStats.this.drawSprite(insideLeft + 315 - 18, insideTop + 1, 0, 18); + } + + if (this.sortColumn != -1) + { + int i = 79; + int j = 18; + + if (this.sortColumn == 1) + { + i = 129; + } + else if (this.sortColumn == 2) + { + i = 179; + } + else if (this.sortColumn == 3) + { + i = 229; + } + else if (this.sortColumn == 4) + { + i = 279; + } + + if (this.sortOrder == 1) + { + j = 36; + } + + GuiStats.this.drawSprite(insideLeft + i, insideTop + 1, j, 0); + } + } + + protected void clickedHeader(int p_148132_1_, int p_148132_2_) + { + this.headerPressed = -1; + + if (p_148132_1_ >= 79 && p_148132_1_ < 115) + { + this.headerPressed = 0; + } + else if (p_148132_1_ >= 129 && p_148132_1_ < 165) + { + this.headerPressed = 1; + } + else if (p_148132_1_ >= 179 && p_148132_1_ < 215) + { + this.headerPressed = 2; + } + else if (p_148132_1_ >= 229 && p_148132_1_ < 265) + { + this.headerPressed = 3; + } + else if (p_148132_1_ >= 279 && p_148132_1_ < 315) + { + this.headerPressed = 4; + } + + if (this.headerPressed >= 0) + { + this.sortByColumn(this.headerPressed); + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + } + } + + protected final int getSize() + { + return this.statsHolder.size(); + } + + protected final StatCrafting getSlotStat(int p_148211_1_) + { + return this.statsHolder.get(p_148211_1_); + } + + protected abstract String getHeaderDescriptionId(int p_148210_1_); + + protected void renderStat(StatBase p_148209_1_, int p_148209_2_, int p_148209_3_, boolean p_148209_4_) + { + if (p_148209_1_ != null) + { + String s = p_148209_1_.format(GuiStats.this.stats.readStat(p_148209_1_)); + GuiStats.this.drawString(GuiStats.this.fontRenderer, s, p_148209_2_ - GuiStats.this.fontRenderer.getStringWidth(s), p_148209_3_ + 5, p_148209_4_ ? 16777215 : 9474192); + } + else + { + String s1 = "-"; + GuiStats.this.drawString(GuiStats.this.fontRenderer, "-", p_148209_2_ - GuiStats.this.fontRenderer.getStringWidth("-"), p_148209_3_ + 5, p_148209_4_ ? 16777215 : 9474192); + } + } + + protected void renderDecorations(int mouseXIn, int mouseYIn) + { + if (mouseYIn >= this.top && mouseYIn <= this.bottom) + { + int i = this.getSlotIndexFromScreenCoords(mouseXIn, mouseYIn); + int j = (this.width - this.getListWidth()) / 2; + + if (i >= 0) + { + if (mouseXIn < j + 40 || mouseXIn > j + 40 + 20) + { + return; + } + + StatCrafting statcrafting = this.getSlotStat(i); + this.renderMouseHoverToolTip(statcrafting, mouseXIn, mouseYIn); + } + else + { + String s; + + if (mouseXIn >= j + 115 - 18 && mouseXIn <= j + 115) + { + s = this.getHeaderDescriptionId(0); + } + else if (mouseXIn >= j + 165 - 18 && mouseXIn <= j + 165) + { + s = this.getHeaderDescriptionId(1); + } + else if (mouseXIn >= j + 215 - 18 && mouseXIn <= j + 215) + { + s = this.getHeaderDescriptionId(2); + } + else if (mouseXIn >= j + 265 - 18 && mouseXIn <= j + 265) + { + s = this.getHeaderDescriptionId(3); + } + else + { + if (mouseXIn < j + 315 - 18 || mouseXIn > j + 315) + { + return; + } + + s = this.getHeaderDescriptionId(4); + } + + s = ("" + I18n.format(s)).trim(); + + if (!s.isEmpty()) + { + int k = mouseXIn + 12; + int l = mouseYIn - 12; + int i1 = GuiStats.this.fontRenderer.getStringWidth(s); + GuiStats.this.drawGradientRect(k - 3, l - 3, k + i1 + 3, l + 8 + 3, -1073741824, -1073741824); + GuiStats.this.fontRenderer.drawStringWithShadow(s, (float)k, (float)l, -1); + } + } + } + } + + protected void renderMouseHoverToolTip(StatCrafting p_148213_1_, int p_148213_2_, int p_148213_3_) + { + if (p_148213_1_ != null) + { + Item item = p_148213_1_.getItem(); + ItemStack itemstack = new ItemStack(item); + String s = itemstack.getUnlocalizedName(); + String s1 = ("" + I18n.format(s + ".name")).trim(); + + if (!s1.isEmpty()) + { + int i = p_148213_2_ + 12; + int j = p_148213_3_ - 12; + int k = GuiStats.this.fontRenderer.getStringWidth(s1); + GuiStats.this.drawGradientRect(i - 3, j - 3, i + k + 3, j + 8 + 3, -1073741824, -1073741824); + GuiStats.this.fontRenderer.drawStringWithShadow(s1, (float)i, (float)j, -1); + } + } + } + + protected void sortByColumn(int p_148212_1_) + { + if (p_148212_1_ != this.sortColumn) + { + this.sortColumn = p_148212_1_; + this.sortOrder = -1; + } + else if (this.sortOrder == -1) + { + this.sortOrder = 1; + } + else + { + this.sortColumn = -1; + this.sortOrder = 0; + } + + Collections.sort(this.statsHolder, this.statSorter); + } + } + + @SideOnly(Side.CLIENT) + class StatsBlock extends GuiStats.Stats + { + public StatsBlock(Minecraft p_i47554_2_) + { + super(p_i47554_2_); + this.statsHolder = Lists.newArrayList(); + + for (StatCrafting statcrafting : StatList.MINE_BLOCK_STATS) + { + boolean flag = false; + Item item = statcrafting.getItem(); + + if (GuiStats.this.stats.readStat(statcrafting) > 0) + { + flag = true; + } + else if (StatList.getObjectUseStats(item) != null && GuiStats.this.stats.readStat(StatList.getObjectUseStats(item)) > 0) + { + flag = true; + } + else if (StatList.getCraftStats(item) != null && GuiStats.this.stats.readStat(StatList.getCraftStats(item)) > 0) + { + flag = true; + } + else if (StatList.getObjectsPickedUpStats(item) != null && GuiStats.this.stats.readStat(StatList.getObjectsPickedUpStats(item)) > 0) + { + flag = true; + } + else if (StatList.getDroppedObjectStats(item) != null && GuiStats.this.stats.readStat(StatList.getDroppedObjectStats(item)) > 0) + { + flag = true; + } + + if (flag) + { + this.statsHolder.add(statcrafting); + } + } + + this.statSorter = new Comparator() + { + public int compare(StatCrafting p_compare_1_, StatCrafting p_compare_2_) + { + Item item1 = p_compare_1_.getItem(); + Item item2 = p_compare_2_.getItem(); + StatBase statbase = null; + StatBase statbase1 = null; + + if (StatsBlock.this.sortColumn == 2) + { + statbase = StatList.getBlockStats(Block.getBlockFromItem(item1)); + statbase1 = StatList.getBlockStats(Block.getBlockFromItem(item2)); + } + else if (StatsBlock.this.sortColumn == 0) + { + statbase = StatList.getCraftStats(item1); + statbase1 = StatList.getCraftStats(item2); + } + else if (StatsBlock.this.sortColumn == 1) + { + statbase = StatList.getObjectUseStats(item1); + statbase1 = StatList.getObjectUseStats(item2); + } + else if (StatsBlock.this.sortColumn == 3) + { + statbase = StatList.getObjectsPickedUpStats(item1); + statbase1 = StatList.getObjectsPickedUpStats(item2); + } + else if (StatsBlock.this.sortColumn == 4) + { + statbase = StatList.getDroppedObjectStats(item1); + statbase1 = StatList.getDroppedObjectStats(item2); + } + + if (statbase != null || statbase1 != null) + { + if (statbase == null) + { + return 1; + } + + if (statbase1 == null) + { + return -1; + } + + int i = GuiStats.this.stats.readStat(statbase); + int j = GuiStats.this.stats.readStat(statbase1); + + if (i != j) + { + return (i - j) * StatsBlock.this.sortOrder; + } + } + + return Item.getIdFromItem(item1) - Item.getIdFromItem(item2); + } + }; + } + + /** + * Handles drawing a list's header row. + */ + protected void drawListHeader(int insideLeft, int insideTop, Tessellator tessellatorIn) + { + super.drawListHeader(insideLeft, insideTop, tessellatorIn); + + if (this.headerPressed == 0) + { + GuiStats.this.drawSprite(insideLeft + 115 - 18 + 1, insideTop + 1 + 1, 18, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 115 - 18, insideTop + 1, 18, 18); + } + + if (this.headerPressed == 1) + { + GuiStats.this.drawSprite(insideLeft + 165 - 18 + 1, insideTop + 1 + 1, 36, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 165 - 18, insideTop + 1, 36, 18); + } + + if (this.headerPressed == 2) + { + GuiStats.this.drawSprite(insideLeft + 215 - 18 + 1, insideTop + 1 + 1, 54, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 215 - 18, insideTop + 1, 54, 18); + } + + if (this.headerPressed == 3) + { + GuiStats.this.drawSprite(insideLeft + 265 - 18 + 1, insideTop + 1 + 1, 90, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 265 - 18, insideTop + 1, 90, 18); + } + + if (this.headerPressed == 4) + { + GuiStats.this.drawSprite(insideLeft + 315 - 18 + 1, insideTop + 1 + 1, 108, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 315 - 18, insideTop + 1, 108, 18); + } + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + StatCrafting statcrafting = this.getSlotStat(slotIndex); + Item item = statcrafting.getItem(); + GuiStats.this.drawStatsScreen(xPos + 40, yPos, item); + this.renderStat(StatList.getCraftStats(item), xPos + 115, yPos, slotIndex % 2 == 0); + this.renderStat(StatList.getObjectUseStats(item), xPos + 165, yPos, slotIndex % 2 == 0); + this.renderStat(statcrafting, xPos + 215, yPos, slotIndex % 2 == 0); + this.renderStat(StatList.getObjectsPickedUpStats(item), xPos + 265, yPos, slotIndex % 2 == 0); + this.renderStat(StatList.getDroppedObjectStats(item), xPos + 315, yPos, slotIndex % 2 == 0); + } + + protected String getHeaderDescriptionId(int p_148210_1_) + { + if (p_148210_1_ == 0) + { + return "stat.crafted"; + } + else if (p_148210_1_ == 1) + { + return "stat.used"; + } + else if (p_148210_1_ == 3) + { + return "stat.pickup"; + } + else + { + return p_148210_1_ == 4 ? "stat.dropped" : "stat.mined"; + } + } + } + + @SideOnly(Side.CLIENT) + class StatsGeneral extends GuiSlot + { + public StatsGeneral(Minecraft mcIn) + { + super(mcIn, GuiStats.this.width, GuiStats.this.height, 32, GuiStats.this.height - 64, 10); + this.setShowSelectionBox(false); + } + + protected int getSize() + { + return StatList.BASIC_STATS.size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return false; + } + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.getSize() * 10; + } + + protected void drawBackground() + { + GuiStats.this.drawDefaultBackground(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + StatBase statbase = StatList.BASIC_STATS.get(slotIndex); + GuiStats.this.drawString(GuiStats.this.fontRenderer, statbase.getStatName().getUnformattedText(), xPos + 2, yPos + 1, slotIndex % 2 == 0 ? 16777215 : 9474192); + String s = statbase.format(GuiStats.this.stats.readStat(statbase)); + GuiStats.this.drawString(GuiStats.this.fontRenderer, s, xPos + 2 + 213 - GuiStats.this.fontRenderer.getStringWidth(s), yPos + 1, slotIndex % 2 == 0 ? 16777215 : 9474192); + } + } + + @SideOnly(Side.CLIENT) + class StatsItem extends GuiStats.Stats + { + public StatsItem(Minecraft mcIn) + { + super(mcIn); + this.statsHolder = Lists.newArrayList(); + + for (StatCrafting statcrafting : StatList.USE_ITEM_STATS) + { + boolean flag = false; + Item item = statcrafting.getItem(); + + if (GuiStats.this.stats.readStat(statcrafting) > 0) + { + flag = true; + } + else if (StatList.getObjectBreakStats(item) != null && GuiStats.this.stats.readStat(StatList.getObjectBreakStats(item)) > 0) + { + flag = true; + } + else if (StatList.getCraftStats(item) != null && GuiStats.this.stats.readStat(StatList.getCraftStats(item)) > 0) + { + flag = true; + } + else if (StatList.getObjectsPickedUpStats(item) != null && GuiStats.this.stats.readStat(StatList.getObjectsPickedUpStats(item)) > 0) + { + flag = true; + } + else if (StatList.getDroppedObjectStats(item) != null && GuiStats.this.stats.readStat(StatList.getDroppedObjectStats(item)) > 0) + { + flag = true; + } + + if (flag) + { + this.statsHolder.add(statcrafting); + } + } + + this.statSorter = new Comparator() + { + public int compare(StatCrafting p_compare_1_, StatCrafting p_compare_2_) + { + Item item1 = p_compare_1_.getItem(); + Item item2 = p_compare_2_.getItem(); + int i = Item.getIdFromItem(item1); + int j = Item.getIdFromItem(item2); + StatBase statbase = null; + StatBase statbase1 = null; + + if (StatsItem.this.sortColumn == 0) + { + statbase = StatList.getObjectBreakStats(item1); + statbase1 = StatList.getObjectBreakStats(item2); + } + else if (StatsItem.this.sortColumn == 1) + { + statbase = StatList.getCraftStats(item1); + statbase1 = StatList.getCraftStats(item2); + } + else if (StatsItem.this.sortColumn == 2) + { + statbase = StatList.getObjectUseStats(item1); + statbase1 = StatList.getObjectUseStats(item2); + } + else if (StatsItem.this.sortColumn == 3) + { + statbase = StatList.getObjectsPickedUpStats(item1); + statbase1 = StatList.getObjectsPickedUpStats(item2); + } + else if (StatsItem.this.sortColumn == 4) + { + statbase = StatList.getDroppedObjectStats(item1); + statbase1 = StatList.getDroppedObjectStats(item2); + } + + if (statbase != null || statbase1 != null) + { + if (statbase == null) + { + return 1; + } + + if (statbase1 == null) + { + return -1; + } + + int k = GuiStats.this.stats.readStat(statbase); + int l = GuiStats.this.stats.readStat(statbase1); + + if (k != l) + { + return (k - l) * StatsItem.this.sortOrder; + } + } + + return i - j; + } + }; + } + + /** + * Handles drawing a list's header row. + */ + protected void drawListHeader(int insideLeft, int insideTop, Tessellator tessellatorIn) + { + super.drawListHeader(insideLeft, insideTop, tessellatorIn); + + if (this.headerPressed == 0) + { + GuiStats.this.drawSprite(insideLeft + 115 - 18 + 1, insideTop + 1 + 1, 72, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 115 - 18, insideTop + 1, 72, 18); + } + + if (this.headerPressed == 1) + { + GuiStats.this.drawSprite(insideLeft + 165 - 18 + 1, insideTop + 1 + 1, 18, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 165 - 18, insideTop + 1, 18, 18); + } + + if (this.headerPressed == 2) + { + GuiStats.this.drawSprite(insideLeft + 215 - 18 + 1, insideTop + 1 + 1, 36, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 215 - 18, insideTop + 1, 36, 18); + } + + if (this.headerPressed == 3) + { + GuiStats.this.drawSprite(insideLeft + 265 - 18 + 1, insideTop + 1 + 1, 90, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 265 - 18, insideTop + 1, 90, 18); + } + + if (this.headerPressed == 4) + { + GuiStats.this.drawSprite(insideLeft + 315 - 18 + 1, insideTop + 1 + 1, 108, 18); + } + else + { + GuiStats.this.drawSprite(insideLeft + 315 - 18, insideTop + 1, 108, 18); + } + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + StatCrafting statcrafting = this.getSlotStat(slotIndex); + Item item = statcrafting.getItem(); + GuiStats.this.drawStatsScreen(xPos + 40, yPos, item); + this.renderStat(StatList.getObjectBreakStats(item), xPos + 115, yPos, slotIndex % 2 == 0); + this.renderStat(StatList.getCraftStats(item), xPos + 165, yPos, slotIndex % 2 == 0); + this.renderStat(statcrafting, xPos + 215, yPos, slotIndex % 2 == 0); + this.renderStat(StatList.getObjectsPickedUpStats(item), xPos + 265, yPos, slotIndex % 2 == 0); + this.renderStat(StatList.getDroppedObjectStats(item), xPos + 315, yPos, slotIndex % 2 == 0); + } + + protected String getHeaderDescriptionId(int p_148210_1_) + { + if (p_148210_1_ == 1) + { + return "stat.crafted"; + } + else if (p_148210_1_ == 2) + { + return "stat.used"; + } + else if (p_148210_1_ == 3) + { + return "stat.pickup"; + } + else + { + return p_148210_1_ == 4 ? "stat.dropped" : "stat.depleted"; + } + } + } + + @SideOnly(Side.CLIENT) + class StatsMobsList extends GuiSlot + { + private final List mobs = Lists.newArrayList(); + + public StatsMobsList(Minecraft mcIn) + { + super(mcIn, GuiStats.this.width, GuiStats.this.height, 32, GuiStats.this.height - 64, GuiStats.this.fontRenderer.FONT_HEIGHT * 4); + this.setShowSelectionBox(false); + + for (EntityList.EntityEggInfo entitylist$entityegginfo : EntityList.ENTITY_EGGS.values()) + { + if (GuiStats.this.stats.readStat(entitylist$entityegginfo.killEntityStat) > 0 || GuiStats.this.stats.readStat(entitylist$entityegginfo.entityKilledByStat) > 0) + { + this.mobs.add(entitylist$entityegginfo); + } + } + } + + protected int getSize() + { + return this.mobs.size(); + } + + /** + * The element in the slot that was clicked, boolean for whether it was double clicked or not + */ + protected void elementClicked(int slotIndex, boolean isDoubleClick, int mouseX, int mouseY) + { + } + + /** + * Returns true if the element passed in is currently selected + */ + protected boolean isSelected(int slotIndex) + { + return false; + } + + /** + * Return the height of the content being scrolled + */ + protected int getContentHeight() + { + return this.getSize() * GuiStats.this.fontRenderer.FONT_HEIGHT * 4; + } + + protected void drawBackground() + { + GuiStats.this.drawDefaultBackground(); + } + + protected void drawSlot(int slotIndex, int xPos, int yPos, int heightIn, int mouseXIn, int mouseYIn, float partialTicks) + { + EntityList.EntityEggInfo entitylist$entityegginfo = this.mobs.get(slotIndex); + String s = I18n.format("entity." + EntityList.getTranslationName(entitylist$entityegginfo.spawnedID) + ".name"); + int i = GuiStats.this.stats.readStat(entitylist$entityegginfo.killEntityStat); + int j = GuiStats.this.stats.readStat(entitylist$entityegginfo.entityKilledByStat); + String s1 = I18n.format("stat.entityKills", i, s); + String s2 = I18n.format("stat.entityKilledBy", s, j); + + if (i == 0) + { + s1 = I18n.format("stat.entityKills.none", s); + } + + if (j == 0) + { + s2 = I18n.format("stat.entityKilledBy.none", s); + } + + GuiStats.this.drawString(GuiStats.this.fontRenderer, s, xPos + 2 - 10, yPos + 1, 16777215); + GuiStats.this.drawString(GuiStats.this.fontRenderer, s1, xPos + 2, yPos + 1 + GuiStats.this.fontRenderer.FONT_HEIGHT, i == 0 ? 6316128 : 9474192); + GuiStats.this.drawString(GuiStats.this.fontRenderer, s2, xPos + 2, yPos + 1 + GuiStats.this.fontRenderer.FONT_HEIGHT * 2, j == 0 ? 6316128 : 9474192); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/achievement/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/achievement/package-info.java new file mode 100644 index 0000000..a3c05d5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/achievement/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.achievement; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/AdvancementState.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/AdvancementState.java new file mode 100644 index 0000000..fa113fb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/AdvancementState.java @@ -0,0 +1,23 @@ +package net.minecraft.client.gui.advancements; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public enum AdvancementState +{ + OBTAINED(0), + UNOBTAINED(1); + + private final int id; + + private AdvancementState(int id) + { + this.id = id; + } + + public int getId() + { + return this.id; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/AdvancementTabType.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/AdvancementTabType.java new file mode 100644 index 0000000..9bd2d1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/AdvancementTabType.java @@ -0,0 +1,136 @@ +package net.minecraft.client.gui.advancements; + +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +enum AdvancementTabType +{ + ABOVE(0, 0, 28, 32, 8), + BELOW(84, 0, 28, 32, 8), + LEFT(0, 64, 32, 28, 5), + RIGHT(96, 64, 32, 28, 5); + + public static final int MAX_TABS; + private final int textureX; + private final int textureY; + private final int width; + private final int height; + private final int max; + + private AdvancementTabType(int p_i47386_3_, int p_i47386_4_, int widthIn, int heightIn, int p_i47386_7_) + { + this.textureX = p_i47386_3_; + this.textureY = p_i47386_4_; + this.width = widthIn; + this.height = heightIn; + this.max = p_i47386_7_; + } + + public int getMax() + { + return this.max; + } + + public void draw(Gui guiIn, int x, int y, boolean p_192651_4_, int p_192651_5_) + { + int i = this.textureX; + + if (p_192651_5_ > 0) + { + i += this.width; + } + + if (p_192651_5_ == this.max - 1) + { + i += this.width; + } + + int j = p_192651_4_ ? this.textureY + this.height : this.textureY; + guiIn.drawTexturedModalRect(x + this.getX(p_192651_5_), y + this.getY(p_192651_5_), i, j, this.width, this.height); + } + + public void drawIcon(int p_192652_1_, int p_192652_2_, int p_192652_3_, RenderItem renderItemIn, ItemStack stack) + { + int i = p_192652_1_ + this.getX(p_192652_3_); + int j = p_192652_2_ + this.getY(p_192652_3_); + + switch (this) + { + case ABOVE: + i += 6; + j += 9; + break; + case BELOW: + i += 6; + j += 6; + break; + case LEFT: + i += 10; + j += 5; + break; + case RIGHT: + i += 6; + j += 5; + } + + renderItemIn.renderItemAndEffectIntoGUI((EntityLivingBase)null, stack, i, j); + } + + public int getX(int p_192648_1_) + { + switch (this) + { + case ABOVE: + return (this.width + 4) * p_192648_1_; + case BELOW: + return (this.width + 4) * p_192648_1_; + case LEFT: + return -this.width + 4; + case RIGHT: + return 248; + default: + throw new UnsupportedOperationException("Don't know what this tab type is!" + this); + } + } + + public int getY(int p_192653_1_) + { + switch (this) + { + case ABOVE: + return -this.height + 4; + case BELOW: + return 136; + case LEFT: + return this.height * p_192653_1_; + case RIGHT: + return this.height * p_192653_1_; + default: + throw new UnsupportedOperationException("Don't know what this tab type is!" + this); + } + } + + public boolean isMouseOver(int p_192654_1_, int p_192654_2_, int p_192654_3_, int p_192654_4_, int p_192654_5_) + { + int i = p_192654_1_ + this.getX(p_192654_3_); + int j = p_192654_2_ + this.getY(p_192654_3_); + return p_192654_4_ > i && p_192654_4_ < i + this.width && p_192654_5_ > j && p_192654_5_ < j + this.height; + } + + static + { + int i = 0; + + for (AdvancementTabType advancementtabtype : values()) + { + i += advancementtabtype.max; + } + + MAX_TABS = i; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiAdvancement.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiAdvancement.java new file mode 100644 index 0000000..b337d9d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiAdvancement.java @@ -0,0 +1,386 @@ +package net.minecraft.client.gui.advancements; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.advancements.DisplayInfo; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiAdvancement extends Gui +{ + private static final ResourceLocation WIDGETS = new ResourceLocation("textures/gui/advancements/widgets.png"); + private static final Pattern PATTERN = Pattern.compile("(.+) \\S+"); + private final GuiAdvancementTab guiAdvancementTab; + private final Advancement advancement; + private final DisplayInfo displayInfo; + private final String title; + private final int width; + private final List description; + private final Minecraft minecraft; + private GuiAdvancement parent; + private final List children = Lists.newArrayList(); + private AdvancementProgress advancementProgress; + private final int x; + private final int y; + + public GuiAdvancement(GuiAdvancementTab p_i47385_1_, Minecraft p_i47385_2_, Advancement p_i47385_3_, DisplayInfo p_i47385_4_) + { + this.guiAdvancementTab = p_i47385_1_; + this.advancement = p_i47385_3_; + this.displayInfo = p_i47385_4_; + this.minecraft = p_i47385_2_; + this.title = p_i47385_2_.fontRenderer.trimStringToWidth(p_i47385_4_.getTitle().getFormattedText(), 163); + this.x = MathHelper.floor(p_i47385_4_.getX() * 28.0F); + this.y = MathHelper.floor(p_i47385_4_.getY() * 27.0F); + int i = p_i47385_3_.getRequirementCount(); + int j = String.valueOf(i).length(); + int k = i > 1 ? p_i47385_2_.fontRenderer.getStringWidth(" ") + p_i47385_2_.fontRenderer.getStringWidth("0") * j * 2 + p_i47385_2_.fontRenderer.getStringWidth("/") : 0; + int l = 29 + p_i47385_2_.fontRenderer.getStringWidth(this.title) + k; + String s = p_i47385_4_.getDescription().getFormattedText(); + this.description = this.findOptimalLines(s, l); + + for (String s1 : this.description) + { + l = Math.max(l, p_i47385_2_.fontRenderer.getStringWidth(s1)); + } + + this.width = l + 3 + 5; + } + + private List findOptimalLines(String p_192995_1_, int p_192995_2_) + { + if (p_192995_1_.isEmpty()) + { + return Collections.emptyList(); + } + else + { + List list = this.minecraft.fontRenderer.listFormattedStringToWidth(p_192995_1_, p_192995_2_); + + if (list.size() < 2) + { + return list; + } + else + { + String s = list.get(0); + String s1 = list.get(1); + int i = this.minecraft.fontRenderer.getStringWidth(s + ' ' + s1.split(" ")[0]); + + if (i - p_192995_2_ <= 10) + { + return this.minecraft.fontRenderer.listFormattedStringToWidth(p_192995_1_, i); + } + else + { + Matcher matcher = PATTERN.matcher(s); + + if (matcher.matches()) + { + int j = this.minecraft.fontRenderer.getStringWidth(matcher.group(1)); + + if (p_192995_2_ - j <= 10) + { + return this.minecraft.fontRenderer.listFormattedStringToWidth(p_192995_1_, j); + } + } + + return list; + } + } + } + } + + @Nullable + private GuiAdvancement getFirstVisibleParent(Advancement advancementIn) + { + while (true) + { + advancementIn = advancementIn.getParent(); + + if (advancementIn == null || advancementIn.getDisplay() != null) + { + break; + } + } + + if (advancementIn != null && advancementIn.getDisplay() != null) + { + return this.guiAdvancementTab.getAdvancementGui(advancementIn); + } + else + { + return null; + } + } + + public void drawConnectivity(int p_191819_1_, int p_191819_2_, boolean p_191819_3_) + { + if (this.parent != null) + { + int i = p_191819_1_ + this.parent.x + 13; + int j = p_191819_1_ + this.parent.x + 26 + 4; + int k = p_191819_2_ + this.parent.y + 13; + int l = p_191819_1_ + this.x + 13; + int i1 = p_191819_2_ + this.y + 13; + int j1 = p_191819_3_ ? -16777216 : -1; + + if (p_191819_3_) + { + this.drawHorizontalLine(j, i, k - 1, j1); + this.drawHorizontalLine(j + 1, i, k, j1); + this.drawHorizontalLine(j, i, k + 1, j1); + this.drawHorizontalLine(l, j - 1, i1 - 1, j1); + this.drawHorizontalLine(l, j - 1, i1, j1); + this.drawHorizontalLine(l, j - 1, i1 + 1, j1); + this.drawVerticalLine(j - 1, i1, k, j1); + this.drawVerticalLine(j + 1, i1, k, j1); + } + else + { + this.drawHorizontalLine(j, i, k, j1); + this.drawHorizontalLine(l, j, i1, j1); + this.drawVerticalLine(j, i1, k, j1); + } + } + + for (GuiAdvancement guiadvancement : this.children) + { + guiadvancement.drawConnectivity(p_191819_1_, p_191819_2_, p_191819_3_); + } + } + + public void draw(int p_191817_1_, int p_191817_2_) + { + if (!this.displayInfo.isHidden() || this.advancementProgress != null && this.advancementProgress.isDone()) + { + float f = this.advancementProgress == null ? 0.0F : this.advancementProgress.getPercent(); + AdvancementState advancementstate; + + if (f >= 1.0F) + { + advancementstate = AdvancementState.OBTAINED; + } + else + { + advancementstate = AdvancementState.UNOBTAINED; + } + + this.minecraft.getTextureManager().bindTexture(WIDGETS); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableBlend(); + this.drawTexturedModalRect(p_191817_1_ + this.x + 3, p_191817_2_ + this.y, this.displayInfo.getFrame().getIcon(), 128 + advancementstate.getId() * 26, 26, 26); + RenderHelper.enableGUIStandardItemLighting(); + this.minecraft.getRenderItem().renderItemAndEffectIntoGUI((EntityLivingBase)null, this.displayInfo.getIcon(), p_191817_1_ + this.x + 8, p_191817_2_ + this.y + 5); + } + + for (GuiAdvancement guiadvancement : this.children) + { + guiadvancement.draw(p_191817_1_, p_191817_2_); + } + } + + public void getAdvancementProgress(AdvancementProgress advancementProgressIn) + { + this.advancementProgress = advancementProgressIn; + } + + public void addGuiAdvancement(GuiAdvancement guiAdvancementIn) + { + this.children.add(guiAdvancementIn); + } + + public void drawHover(int p_191821_1_, int p_191821_2_, float p_191821_3_, int p_191821_4_, int p_191821_5_) + { + boolean flag = p_191821_4_ + p_191821_1_ + this.x + this.width + 26 >= this.guiAdvancementTab.getScreen().width; + String s = this.advancementProgress == null ? null : this.advancementProgress.getProgressText(); + int i = s == null ? 0 : this.minecraft.fontRenderer.getStringWidth(s); + boolean flag1 = 113 - p_191821_2_ - this.y - 26 <= 6 + this.description.size() * this.minecraft.fontRenderer.FONT_HEIGHT; + float f = this.advancementProgress == null ? 0.0F : this.advancementProgress.getPercent(); + int j = MathHelper.floor(f * (float)this.width); + AdvancementState advancementstate; + AdvancementState advancementstate1; + AdvancementState advancementstate2; + + if (f >= 1.0F) + { + j = this.width / 2; + advancementstate = AdvancementState.OBTAINED; + advancementstate1 = AdvancementState.OBTAINED; + advancementstate2 = AdvancementState.OBTAINED; + } + else if (j < 2) + { + j = this.width / 2; + advancementstate = AdvancementState.UNOBTAINED; + advancementstate1 = AdvancementState.UNOBTAINED; + advancementstate2 = AdvancementState.UNOBTAINED; + } + else if (j > this.width - 2) + { + j = this.width / 2; + advancementstate = AdvancementState.OBTAINED; + advancementstate1 = AdvancementState.OBTAINED; + advancementstate2 = AdvancementState.UNOBTAINED; + } + else + { + advancementstate = AdvancementState.OBTAINED; + advancementstate1 = AdvancementState.UNOBTAINED; + advancementstate2 = AdvancementState.UNOBTAINED; + } + + int k = this.width - j; + this.minecraft.getTextureManager().bindTexture(WIDGETS); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableBlend(); + int l = p_191821_2_ + this.y; + int i1; + + if (flag) + { + i1 = p_191821_1_ + this.x - this.width + 26 + 6; + } + else + { + i1 = p_191821_1_ + this.x; + } + + int j1 = 32 + this.description.size() * this.minecraft.fontRenderer.FONT_HEIGHT; + + if (!this.description.isEmpty()) + { + if (flag1) + { + this.render9Sprite(i1, l + 26 - j1, this.width, j1, 10, 200, 26, 0, 52); + } + else + { + this.render9Sprite(i1, l, this.width, j1, 10, 200, 26, 0, 52); + } + } + + this.drawTexturedModalRect(i1, l, 0, advancementstate.getId() * 26, j, 26); + this.drawTexturedModalRect(i1 + j, l, 200 - k, advancementstate1.getId() * 26, k, 26); + this.drawTexturedModalRect(p_191821_1_ + this.x + 3, p_191821_2_ + this.y, this.displayInfo.getFrame().getIcon(), 128 + advancementstate2.getId() * 26, 26, 26); + + if (flag) + { + this.minecraft.fontRenderer.drawString(this.title, (float)(i1 + 5), (float)(p_191821_2_ + this.y + 9), -1, true); + + if (s != null) + { + this.minecraft.fontRenderer.drawString(s, (float)(p_191821_1_ + this.x - i), (float)(p_191821_2_ + this.y + 9), -1, true); + } + } + else + { + this.minecraft.fontRenderer.drawString(this.title, (float)(p_191821_1_ + this.x + 32), (float)(p_191821_2_ + this.y + 9), -1, true); + + if (s != null) + { + this.minecraft.fontRenderer.drawString(s, (float)(p_191821_1_ + this.x + this.width - i - 5), (float)(p_191821_2_ + this.y + 9), -1, true); + } + } + + if (flag1) + { + for (int k1 = 0; k1 < this.description.size(); ++k1) + { + this.minecraft.fontRenderer.drawString(this.description.get(k1), (float)(i1 + 5), (float)(l + 26 - j1 + 7 + k1 * this.minecraft.fontRenderer.FONT_HEIGHT), -5592406, false); + } + } + else + { + for (int l1 = 0; l1 < this.description.size(); ++l1) + { + this.minecraft.fontRenderer.drawString(this.description.get(l1), (float)(i1 + 5), (float)(p_191821_2_ + this.y + 9 + 17 + l1 * this.minecraft.fontRenderer.FONT_HEIGHT), -5592406, false); + } + } + + RenderHelper.enableGUIStandardItemLighting(); + this.minecraft.getRenderItem().renderItemAndEffectIntoGUI((EntityLivingBase)null, this.displayInfo.getIcon(), p_191821_1_ + this.x + 8, p_191821_2_ + this.y + 5); + } + + protected void render9Sprite(int p_192994_1_, int p_192994_2_, int p_192994_3_, int p_192994_4_, int p_192994_5_, int p_192994_6_, int p_192994_7_, int p_192994_8_, int p_192994_9_) + { + this.drawTexturedModalRect(p_192994_1_, p_192994_2_, p_192994_8_, p_192994_9_, p_192994_5_, p_192994_5_); + this.renderRepeating(p_192994_1_ + p_192994_5_, p_192994_2_, p_192994_3_ - p_192994_5_ - p_192994_5_, p_192994_5_, p_192994_8_ + p_192994_5_, p_192994_9_, p_192994_6_ - p_192994_5_ - p_192994_5_, p_192994_7_); + this.drawTexturedModalRect(p_192994_1_ + p_192994_3_ - p_192994_5_, p_192994_2_, p_192994_8_ + p_192994_6_ - p_192994_5_, p_192994_9_, p_192994_5_, p_192994_5_); + this.drawTexturedModalRect(p_192994_1_, p_192994_2_ + p_192994_4_ - p_192994_5_, p_192994_8_, p_192994_9_ + p_192994_7_ - p_192994_5_, p_192994_5_, p_192994_5_); + this.renderRepeating(p_192994_1_ + p_192994_5_, p_192994_2_ + p_192994_4_ - p_192994_5_, p_192994_3_ - p_192994_5_ - p_192994_5_, p_192994_5_, p_192994_8_ + p_192994_5_, p_192994_9_ + p_192994_7_ - p_192994_5_, p_192994_6_ - p_192994_5_ - p_192994_5_, p_192994_7_); + this.drawTexturedModalRect(p_192994_1_ + p_192994_3_ - p_192994_5_, p_192994_2_ + p_192994_4_ - p_192994_5_, p_192994_8_ + p_192994_6_ - p_192994_5_, p_192994_9_ + p_192994_7_ - p_192994_5_, p_192994_5_, p_192994_5_); + this.renderRepeating(p_192994_1_, p_192994_2_ + p_192994_5_, p_192994_5_, p_192994_4_ - p_192994_5_ - p_192994_5_, p_192994_8_, p_192994_9_ + p_192994_5_, p_192994_6_, p_192994_7_ - p_192994_5_ - p_192994_5_); + this.renderRepeating(p_192994_1_ + p_192994_5_, p_192994_2_ + p_192994_5_, p_192994_3_ - p_192994_5_ - p_192994_5_, p_192994_4_ - p_192994_5_ - p_192994_5_, p_192994_8_ + p_192994_5_, p_192994_9_ + p_192994_5_, p_192994_6_ - p_192994_5_ - p_192994_5_, p_192994_7_ - p_192994_5_ - p_192994_5_); + this.renderRepeating(p_192994_1_ + p_192994_3_ - p_192994_5_, p_192994_2_ + p_192994_5_, p_192994_5_, p_192994_4_ - p_192994_5_ - p_192994_5_, p_192994_8_ + p_192994_6_ - p_192994_5_, p_192994_9_ + p_192994_5_, p_192994_6_, p_192994_7_ - p_192994_5_ - p_192994_5_); + } + + protected void renderRepeating(int p_192993_1_, int p_192993_2_, int p_192993_3_, int p_192993_4_, int p_192993_5_, int p_192993_6_, int p_192993_7_, int p_192993_8_) + { + for (int i = 0; i < p_192993_3_; i += p_192993_7_) + { + int j = p_192993_1_ + i; + int k = Math.min(p_192993_7_, p_192993_3_ - i); + + for (int l = 0; l < p_192993_4_; l += p_192993_8_) + { + int i1 = p_192993_2_ + l; + int j1 = Math.min(p_192993_8_, p_192993_4_ - l); + this.drawTexturedModalRect(j, i1, p_192993_5_, p_192993_6_, k, j1); + } + } + } + + public boolean isMouseOver(int p_191816_1_, int p_191816_2_, int p_191816_3_, int p_191816_4_) + { + if (!this.displayInfo.isHidden() || this.advancementProgress != null && this.advancementProgress.isDone()) + { + int i = p_191816_1_ + this.x; + int j = i + 26; + int k = p_191816_2_ + this.y; + int l = k + 26; + return p_191816_3_ >= i && p_191816_3_ <= j && p_191816_4_ >= k && p_191816_4_ <= l; + } + else + { + return false; + } + } + + public void attachToParent() + { + if (this.parent == null && this.advancement.getParent() != null) + { + this.parent = this.getFirstVisibleParent(this.advancement); + + if (this.parent != null) + { + this.parent.addGuiAdvancement(this); + } + } + } + + public int getY() + { + return this.y; + } + + public int getX() + { + return this.x; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiAdvancementTab.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiAdvancementTab.java new file mode 100644 index 0000000..f66b031 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiAdvancementTab.java @@ -0,0 +1,239 @@ +package net.minecraft.client.gui.advancements; + +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.DisplayInfo; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiAdvancementTab extends Gui +{ + private final Minecraft minecraft; + private final GuiScreenAdvancements screen; + private final AdvancementTabType type; + private final int index; + private final Advancement advancement; + private final DisplayInfo display; + private final ItemStack icon; + private final String title; + private final GuiAdvancement root; + private final Map guis = Maps.newLinkedHashMap(); + private int scrollX; + private int scrollY; + private int minX = Integer.MAX_VALUE; + private int minY = Integer.MAX_VALUE; + private int maxX = Integer.MIN_VALUE; + private int maxY = Integer.MIN_VALUE; + private float fade; + private boolean centered; + private int page; + + public GuiAdvancementTab(Minecraft p_i47589_1_, GuiScreenAdvancements p_i47589_2_, AdvancementTabType p_i47589_3_, int p_i47589_4_, Advancement p_i47589_5_, DisplayInfo p_i47589_6_) + { + this.minecraft = p_i47589_1_; + this.screen = p_i47589_2_; + this.type = p_i47589_3_; + this.index = p_i47589_4_; + this.advancement = p_i47589_5_; + this.display = p_i47589_6_; + this.icon = p_i47589_6_.getIcon(); + this.title = p_i47589_6_.getTitle().getFormattedText(); + this.root = new GuiAdvancement(this, p_i47589_1_, p_i47589_5_, p_i47589_6_); + this.addGuiAdvancement(this.root, p_i47589_5_); + } + + public Advancement getAdvancement() + { + return this.advancement; + } + + public String getTitle() + { + return this.title; + } + + public void drawTab(int p_191798_1_, int p_191798_2_, boolean p_191798_3_) + { + this.type.draw(this, p_191798_1_, p_191798_2_, p_191798_3_, this.index); + } + + public void drawIcon(int p_191796_1_, int p_191796_2_, RenderItem p_191796_3_) + { + this.type.drawIcon(p_191796_1_, p_191796_2_, this.index, p_191796_3_, this.icon); + } + + public void drawContents() + { + if (!this.centered) + { + this.scrollX = 117 - (this.maxX + this.minX) / 2; + this.scrollY = 56 - (this.maxY + this.minY) / 2; + this.centered = true; + } + + GlStateManager.depthFunc(518); + drawRect(0, 0, 234, 113, -16777216); + GlStateManager.depthFunc(515); + ResourceLocation resourcelocation = this.display.getBackground(); + + if (resourcelocation != null) + { + this.minecraft.getTextureManager().bindTexture(resourcelocation); + } + else + { + this.minecraft.getTextureManager().bindTexture(TextureManager.RESOURCE_LOCATION_EMPTY); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int i = this.scrollX % 16; + int j = this.scrollY % 16; + + for (int k = -1; k <= 15; ++k) + { + for (int l = -1; l <= 8; ++l) + { + drawModalRectWithCustomSizedTexture(i + 16 * k, j + 16 * l, 0.0F, 0.0F, 16, 16, 16.0F, 16.0F); + } + } + + this.root.drawConnectivity(this.scrollX, this.scrollY, true); + this.root.drawConnectivity(this.scrollX, this.scrollY, false); + this.root.draw(this.scrollX, this.scrollY); + } + + public void drawToolTips(int p_192991_1_, int p_192991_2_, int p_192991_3_, int p_192991_4_) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 200.0F); + drawRect(0, 0, 234, 113, MathHelper.floor(this.fade * 255.0F) << 24); + boolean flag = false; + + if (p_192991_1_ > 0 && p_192991_1_ < 234 && p_192991_2_ > 0 && p_192991_2_ < 113) + { + for (GuiAdvancement guiadvancement : this.guis.values()) + { + if (guiadvancement.isMouseOver(this.scrollX, this.scrollY, p_192991_1_, p_192991_2_)) + { + flag = true; + guiadvancement.drawHover(this.scrollX, this.scrollY, this.fade, p_192991_3_, p_192991_4_); + break; + } + } + } + + GlStateManager.popMatrix(); + + if (flag) + { + this.fade = MathHelper.clamp(this.fade + 0.02F, 0.0F, 0.3F); + } + else + { + this.fade = MathHelper.clamp(this.fade - 0.04F, 0.0F, 1.0F); + } + } + + public boolean isMouseOver(int p_191793_1_, int p_191793_2_, int p_191793_3_, int p_191793_4_) + { + return this.type.isMouseOver(p_191793_1_, p_191793_2_, this.index, p_191793_3_, p_191793_4_); + } + + @Nullable + public static GuiAdvancementTab create(Minecraft p_193936_0_, GuiScreenAdvancements p_193936_1_, int p_193936_2_, Advancement p_193936_3_) + { + if (p_193936_3_.getDisplay() == null) + { + return null; + } + else + { + for (AdvancementTabType advancementtabtype : AdvancementTabType.values()) + { + if ((p_193936_2_ % AdvancementTabType.MAX_TABS) < advancementtabtype.getMax()) + { + return new GuiAdvancementTab(p_193936_0_, p_193936_1_, advancementtabtype, p_193936_2_ % AdvancementTabType.MAX_TABS, p_193936_2_ / AdvancementTabType.MAX_TABS, p_193936_3_, p_193936_3_.getDisplay()); + } + + p_193936_2_ -= advancementtabtype.getMax(); + } + + return null; + } + } + + public void scroll(int p_191797_1_, int p_191797_2_) + { + if (this.maxX - this.minX > 234) + { + this.scrollX = MathHelper.clamp(this.scrollX + p_191797_1_, -(this.maxX - 234), 0); + } + + if (this.maxY - this.minY > 113) + { + this.scrollY = MathHelper.clamp(this.scrollY + p_191797_2_, -(this.maxY - 113), 0); + } + } + + public void addAdvancement(Advancement p_191800_1_) + { + if (p_191800_1_.getDisplay() != null) + { + GuiAdvancement guiadvancement = new GuiAdvancement(this, this.minecraft, p_191800_1_, p_191800_1_.getDisplay()); + this.addGuiAdvancement(guiadvancement, p_191800_1_); + } + } + + private void addGuiAdvancement(GuiAdvancement p_193937_1_, Advancement p_193937_2_) + { + this.guis.put(p_193937_2_, p_193937_1_); + int i = p_193937_1_.getX(); + int j = i + 28; + int k = p_193937_1_.getY(); + int l = k + 27; + this.minX = Math.min(this.minX, i); + this.maxX = Math.max(this.maxX, j); + this.minY = Math.min(this.minY, k); + this.maxY = Math.max(this.maxY, l); + + for (GuiAdvancement guiadvancement : this.guis.values()) + { + guiadvancement.attachToParent(); + } + } + + @Nullable + public GuiAdvancement getAdvancementGui(Advancement p_191794_1_) + { + return this.guis.get(p_191794_1_); + } + + public GuiScreenAdvancements getScreen() + { + return this.screen; + } + + /* ======================================== FORGE START =====================================*/ + public int getPage() + { + return this.page; + } + + public GuiAdvancementTab(Minecraft p_i47589_1_, GuiScreenAdvancements p_i47589_2_, AdvancementTabType p_i47589_3_, int p_i47589_4_, int page, Advancement p_i47589_5_, DisplayInfo p_i47589_6_) + { + this(p_i47589_1_, p_i47589_2_, p_i47589_3_, p_i47589_4_, p_i47589_5_, p_i47589_6_); + this.page = page; + } + /* ======================================== FORGE END =====================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiScreenAdvancements.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiScreenAdvancements.java new file mode 100644 index 0000000..5c64b39 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/GuiScreenAdvancements.java @@ -0,0 +1,324 @@ +package net.minecraft.client.gui.advancements; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.multiplayer.ClientAdvancementManager; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.play.client.CPacketSeenAdvancements; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public class GuiScreenAdvancements extends GuiScreen implements ClientAdvancementManager.IListener +{ + private static final ResourceLocation WINDOW = new ResourceLocation("textures/gui/advancements/window.png"); + private static final ResourceLocation TABS = new ResourceLocation("textures/gui/advancements/tabs.png"); + private final ClientAdvancementManager clientAdvancementManager; + private final Map tabs = Maps.newLinkedHashMap(); + private GuiAdvancementTab selectedTab; + private int scrollMouseX; + private int scrollMouseY; + private boolean isScrolling; + private static int tabPage, maxPages; + + public GuiScreenAdvancements(ClientAdvancementManager p_i47383_1_) + { + this.clientAdvancementManager = p_i47383_1_; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.tabs.clear(); + this.selectedTab = null; + this.clientAdvancementManager.setListener(this); + + if (this.selectedTab == null && !this.tabs.isEmpty()) + { + this.clientAdvancementManager.setSelectedTab(((GuiAdvancementTab)this.tabs.values().iterator().next()).getAdvancement(), true); + } + else + { + this.clientAdvancementManager.setSelectedTab(this.selectedTab == null ? null : this.selectedTab.getAdvancement(), true); + } + if (this.tabs.size() > AdvancementTabType.MAX_TABS) + { + int guiLeft = (this.width - 252) / 2; + int guiTop = (this.height - 140) / 2; + this.buttonList.add(new net.minecraft.client.gui.GuiButton(101, guiLeft, guiTop - 50, 20, 20, "<")); + this.buttonList.add(new net.minecraft.client.gui.GuiButton(102, guiLeft + 252 - 20, guiTop - 50, 20, 20, ">")); + maxPages = this.tabs.size() / AdvancementTabType.MAX_TABS; + } + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + this.clientAdvancementManager.setListener((ClientAdvancementManager.IListener)null); + NetHandlerPlayClient nethandlerplayclient = this.mc.getConnection(); + + if (nethandlerplayclient != null) + { + nethandlerplayclient.sendPacket(CPacketSeenAdvancements.closedScreen()); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (mouseButton == 0) + { + int i = (this.width - 252) / 2; + int j = (this.height - 140) / 2; + + for (GuiAdvancementTab guiadvancementtab : this.tabs.values()) + { + if (guiadvancementtab.getPage() == tabPage && guiadvancementtab.isMouseOver(i, j, mouseX, mouseY)) + { + this.clientAdvancementManager.setSelectedTab(guiadvancementtab.getAdvancement(), true); + break; + } + } + } + + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == this.mc.gameSettings.keyBindAdvancements.getKeyCode()) + { + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + else + { + super.keyTyped(typedChar, keyCode); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + int i = (this.width - 252) / 2; + int j = (this.height - 140) / 2; + + if (Mouse.isButtonDown(0)) + { + if (!this.isScrolling) + { + this.isScrolling = true; + } + else if (this.selectedTab != null) + { + this.selectedTab.scroll(mouseX - this.scrollMouseX, mouseY - this.scrollMouseY); + } + + this.scrollMouseX = mouseX; + this.scrollMouseY = mouseY; + } + else + { + this.isScrolling = false; + } + + this.drawDefaultBackground(); + this.renderInside(mouseX, mouseY, i, j); + this.renderWindow(i, j); + super.drawScreen(mouseX, mouseY, partialTicks); + if (maxPages != 0) + { + String page = String.format("%d / %d", tabPage + 1, maxPages + 1); + int width = this.fontRenderer.getStringWidth(page); + GlStateManager.disableLighting(); + this.fontRenderer.drawStringWithShadow(page, i + (252 / 2) - (width / 2), j - 44, -1); + } + this.renderToolTips(mouseX, mouseY, i, j); + } + + private void renderInside(int p_191936_1_, int p_191936_2_, int p_191936_3_, int p_191936_4_) + { + GuiAdvancementTab guiadvancementtab = this.selectedTab; + + if (guiadvancementtab == null) + { + drawRect(p_191936_3_ + 9, p_191936_4_ + 18, p_191936_3_ + 9 + 234, p_191936_4_ + 18 + 113, -16777216); + String s = I18n.format("advancements.empty"); + int i = this.fontRenderer.getStringWidth(s); + this.fontRenderer.drawString(s, p_191936_3_ + 9 + 117 - i / 2, p_191936_4_ + 18 + 56 - this.fontRenderer.FONT_HEIGHT / 2, -1); + this.fontRenderer.drawString(":(", p_191936_3_ + 9 + 117 - this.fontRenderer.getStringWidth(":(") / 2, p_191936_4_ + 18 + 113 - this.fontRenderer.FONT_HEIGHT, -1); + } + else + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(p_191936_3_ + 9), (float)(p_191936_4_ + 18), -400.0F); + GlStateManager.enableDepth(); + guiadvancementtab.drawContents(); + GlStateManager.popMatrix(); + GlStateManager.depthFunc(515); + GlStateManager.disableDepth(); + } + } + + public void renderWindow(int p_191934_1_, int p_191934_2_) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableBlend(); + RenderHelper.disableStandardItemLighting(); + this.mc.getTextureManager().bindTexture(WINDOW); + this.drawTexturedModalRect(p_191934_1_, p_191934_2_, 0, 0, 252, 140); + + if (this.tabs.size() > 1) + { + this.mc.getTextureManager().bindTexture(TABS); + + for (GuiAdvancementTab guiadvancementtab : this.tabs.values()) + { + if(guiadvancementtab.getPage() == tabPage) + guiadvancementtab.drawTab(p_191934_1_, p_191934_2_, guiadvancementtab == this.selectedTab); + } + + GlStateManager.enableRescaleNormal(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderHelper.enableGUIStandardItemLighting(); + + for (GuiAdvancementTab guiadvancementtab1 : this.tabs.values()) + { + if(guiadvancementtab1.getPage() == tabPage) + guiadvancementtab1.drawIcon(p_191934_1_, p_191934_2_, this.itemRender); + } + + GlStateManager.disableBlend(); + } + + this.fontRenderer.drawString(I18n.format("gui.advancements"), p_191934_1_ + 8, p_191934_2_ + 6, 4210752); + } + + private void renderToolTips(int p_191937_1_, int p_191937_2_, int p_191937_3_, int p_191937_4_) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if (this.selectedTab != null) + { + GlStateManager.pushMatrix(); + GlStateManager.enableDepth(); + GlStateManager.translate((float)(p_191937_3_ + 9), (float)(p_191937_4_ + 18), 400.0F); + this.selectedTab.drawToolTips(p_191937_1_ - p_191937_3_ - 9, p_191937_2_ - p_191937_4_ - 18, p_191937_3_, p_191937_4_); + GlStateManager.disableDepth(); + GlStateManager.popMatrix(); + } + + if (this.tabs.size() > 1) + { + for (GuiAdvancementTab guiadvancementtab : this.tabs.values()) + { + if (guiadvancementtab.getPage() == tabPage && guiadvancementtab.isMouseOver(p_191937_3_, p_191937_4_, p_191937_1_, p_191937_2_)) + { + this.drawHoveringText(guiadvancementtab.getTitle(), p_191937_1_, p_191937_2_); + } + } + } + } + + public void rootAdvancementAdded(Advancement advancementIn) + { + GuiAdvancementTab guiadvancementtab = GuiAdvancementTab.create(this.mc, this, this.tabs.size(), advancementIn); + + if (guiadvancementtab != null) + { + this.tabs.put(advancementIn, guiadvancementtab); + } + } + + public void rootAdvancementRemoved(Advancement advancementIn) + { + } + + public void nonRootAdvancementAdded(Advancement advancementIn) + { + GuiAdvancementTab guiadvancementtab = this.getTab(advancementIn); + + if (guiadvancementtab != null) + { + guiadvancementtab.addAdvancement(advancementIn); + } + } + + public void nonRootAdvancementRemoved(Advancement advancementIn) + { + } + + public void onUpdateAdvancementProgress(Advancement p_191933_1_, AdvancementProgress p_191933_2_) + { + GuiAdvancement guiadvancement = this.getAdvancementGui(p_191933_1_); + + if (guiadvancement != null) + { + guiadvancement.getAdvancementProgress(p_191933_2_); + } + } + + public void setSelectedTab(@Nullable Advancement p_193982_1_) + { + this.selectedTab = this.tabs.get(p_193982_1_); + } + + public void advancementsCleared() + { + this.tabs.clear(); + this.selectedTab = null; + } + + @Nullable + public GuiAdvancement getAdvancementGui(Advancement p_191938_1_) + { + GuiAdvancementTab guiadvancementtab = this.getTab(p_191938_1_); + return guiadvancementtab == null ? null : guiadvancementtab.getAdvancementGui(p_191938_1_); + } + + @Nullable + private GuiAdvancementTab getTab(Advancement p_191935_1_) + { + while (p_191935_1_.getParent() != null) + { + p_191935_1_ = p_191935_1_.getParent(); + } + + return this.tabs.get(p_191935_1_); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + @Override + protected void actionPerformed(net.minecraft.client.gui.GuiButton button) throws IOException + { + if(button.id == 101) + tabPage = Math.max(tabPage - 1, 0); + else if(button.id == 102) + tabPage = Math.min(tabPage + 1, maxPages); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/package-info.java new file mode 100644 index 0000000..2b1d1f3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/advancements/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.advancements; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/IChatListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/IChatListener.java new file mode 100644 index 0000000..5d55cc7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/IChatListener.java @@ -0,0 +1,19 @@ +package net.minecraft.client.gui.chat; + +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IChatListener +{ + /** + * Called whenever this listener receives a chat message, if this listener is registered to the given type in {@link + * net.minecraft.client.gui.GuiIngame#chatListeners chatListeners} + * + * @param chatTypeIn The type of chat message + * @param message The chat message. + */ + void say(ChatType chatTypeIn, ITextComponent message); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/NarratorChatListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/NarratorChatListener.java new file mode 100644 index 0000000..02d0552 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/NarratorChatListener.java @@ -0,0 +1,79 @@ +package net.minecraft.client.gui.chat; + +import com.mojang.text2speech.Narrator; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.toasts.GuiToast; +import net.minecraft.client.gui.toasts.SystemToast; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class NarratorChatListener implements IChatListener +{ + public static final NarratorChatListener INSTANCE = new NarratorChatListener(); + private final Narrator narrator = Narrator.getNarrator(); + + /** + * Called whenever this listener receives a chat message, if this listener is registered to the given type in {@link + * net.minecraft.client.gui.GuiIngame#chatListeners chatListeners} + * + * @param chatTypeIn The type of chat message + * @param message The chat message. + */ + public void say(ChatType chatTypeIn, ITextComponent message) + { + int i = Minecraft.getMinecraft().gameSettings.narrator; + + if (i != 0 && this.narrator.active()) + { + if (i == 1 || i == 2 && chatTypeIn == ChatType.CHAT || i == 3 && chatTypeIn == ChatType.SYSTEM) + { + if (message instanceof TextComponentTranslation && "chat.type.text".equals(((TextComponentTranslation)message).getKey())) + { + this.narrator.say((new TextComponentTranslation("chat.type.text.narrate", ((TextComponentTranslation)message).getFormatArgs())).getUnformattedText()); + } + else + { + this.narrator.say(message.getUnformattedText()); + } + } + } + } + + public void announceMode(int p_193641_1_) + { + this.narrator.clear(); + this.narrator.say((new TextComponentTranslation("options.narrator", new Object[0])).getUnformattedText() + " : " + (new TextComponentTranslation(GameSettings.NARRATOR_MODES[p_193641_1_], new Object[0])).getUnformattedText()); + GuiToast guitoast = Minecraft.getMinecraft().getToastGui(); + + if (this.narrator.active()) + { + if (p_193641_1_ == 0) + { + SystemToast.addOrUpdate(guitoast, SystemToast.Type.NARRATOR_TOGGLE, new TextComponentTranslation("narrator.toast.disabled", new Object[0]), (ITextComponent)null); + } + else + { + SystemToast.addOrUpdate(guitoast, SystemToast.Type.NARRATOR_TOGGLE, new TextComponentTranslation("narrator.toast.enabled", new Object[0]), new TextComponentTranslation(GameSettings.NARRATOR_MODES[p_193641_1_], new Object[0])); + } + } + else + { + SystemToast.addOrUpdate(guitoast, SystemToast.Type.NARRATOR_TOGGLE, new TextComponentTranslation("narrator.toast.disabled", new Object[0]), new TextComponentTranslation("options.narrator.notavailable", new Object[0])); + } + } + + public boolean isActive() + { + return this.narrator.active(); + } + + public void clear() + { + this.narrator.clear(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/NormalChatListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/NormalChatListener.java new file mode 100644 index 0000000..c26ed0b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/NormalChatListener.java @@ -0,0 +1,30 @@ +package net.minecraft.client.gui.chat; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class NormalChatListener implements IChatListener +{ + private final Minecraft mc; + + public NormalChatListener(Minecraft p_i47393_1_) + { + this.mc = p_i47393_1_; + } + + /** + * Called whenever this listener receives a chat message, if this listener is registered to the given type in {@link + * net.minecraft.client.gui.GuiIngame#chatListeners chatListeners} + * + * @param chatTypeIn The type of chat message + * @param message The chat message. + */ + public void say(ChatType chatTypeIn, ITextComponent message) + { + this.mc.ingameGUI.getChatGUI().printChatMessage(message); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/OverlayChatListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/OverlayChatListener.java new file mode 100644 index 0000000..ba1e7b8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/OverlayChatListener.java @@ -0,0 +1,30 @@ +package net.minecraft.client.gui.chat; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OverlayChatListener implements IChatListener +{ + private final Minecraft mc; + + public OverlayChatListener(Minecraft minecraftIn) + { + this.mc = minecraftIn; + } + + /** + * Called whenever this listener receives a chat message, if this listener is registered to the given type in {@link + * net.minecraft.client.gui.GuiIngame#chatListeners chatListeners} + * + * @param chatTypeIn The type of chat message + * @param message The chat message. + */ + public void say(ChatType chatTypeIn, ITextComponent message) + { + this.mc.ingameGUI.setOverlayMessage(message, false); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/package-info.java new file mode 100644 index 0000000..62c513d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/chat/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.chat; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/CreativeCrafting.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/CreativeCrafting.java new file mode 100644 index 0000000..d42f0b7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/CreativeCrafting.java @@ -0,0 +1,50 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.Minecraft; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IContainerListener; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class CreativeCrafting implements IContainerListener +{ + private final Minecraft mc; + + public CreativeCrafting(Minecraft mc) + { + this.mc = mc; + } + + /** + * update the crafting window inventory with the items in the list + */ + public void sendAllContents(Container containerToSend, NonNullList itemsList) + { + } + + /** + * Sends the contents of an inventory slot to the client-side Container. This doesn't have to match the actual + * contents of that slot. + */ + public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) + { + this.mc.playerController.sendSlotPacket(stack, slotInd); + } + + /** + * Sends two ints to the client-side Container. Used for furnace burning time, smelting progress, brewing progress, + * and enchanting level. Normally the first int identifies which variable to update, and the second contains the new + * value. Both are truncated to shorts in non-local SMP. + */ + public void sendWindowProperty(Container containerIn, int varToUpdate, int newValue) + { + } + + public void sendAllWindowProperties(Container containerIn, IInventory inventory) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiBeacon.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiBeacon.java new file mode 100644 index 0000000..86da4e0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiBeacon.java @@ -0,0 +1,347 @@ +package net.minecraft.client.gui.inventory; + +import io.netty.buffer.Unpooled; +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.ContainerBeacon; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.potion.Potion; +import net.minecraft.tileentity.TileEntityBeacon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiBeacon extends GuiContainer +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation BEACON_GUI_TEXTURES = new ResourceLocation("textures/gui/container/beacon.png"); + private final IInventory tileBeacon; + private GuiBeacon.ConfirmButton beaconConfirmButton; + private boolean buttonsNotDrawn; + + public GuiBeacon(InventoryPlayer playerInventory, IInventory tileBeaconIn) + { + super(new ContainerBeacon(playerInventory, tileBeaconIn)); + this.tileBeacon = tileBeaconIn; + this.xSize = 230; + this.ySize = 219; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.beaconConfirmButton = new GuiBeacon.ConfirmButton(-1, this.guiLeft + 164, this.guiTop + 107); + this.buttonList.add(this.beaconConfirmButton); + this.buttonList.add(new GuiBeacon.CancelButton(-2, this.guiLeft + 190, this.guiTop + 107)); + this.buttonsNotDrawn = true; + this.beaconConfirmButton.enabled = false; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + int i = this.tileBeacon.getField(0); + Potion potion = Potion.getPotionById(this.tileBeacon.getField(1)); + Potion potion1 = Potion.getPotionById(this.tileBeacon.getField(2)); + + if (this.buttonsNotDrawn && i >= 0) + { + this.buttonsNotDrawn = false; + int j = 100; + + for (int k = 0; k <= 2; ++k) + { + int l = TileEntityBeacon.EFFECTS_LIST[k].length; + int i1 = l * 22 + (l - 1) * 2; + + for (int j1 = 0; j1 < l; ++j1) + { + Potion potion2 = TileEntityBeacon.EFFECTS_LIST[k][j1]; + GuiBeacon.PowerButton guibeacon$powerbutton = new GuiBeacon.PowerButton(j++, this.guiLeft + 76 + j1 * 24 - i1 / 2, this.guiTop + 22 + k * 25, potion2, k); + this.buttonList.add(guibeacon$powerbutton); + + if (k >= i) + { + guibeacon$powerbutton.enabled = false; + } + else if (potion2 == potion) + { + guibeacon$powerbutton.setSelected(true); + } + } + } + + int k1 = 3; + int l1 = TileEntityBeacon.EFFECTS_LIST[3].length + 1; + int i2 = l1 * 22 + (l1 - 1) * 2; + + for (int j2 = 0; j2 < l1 - 1; ++j2) + { + Potion potion3 = TileEntityBeacon.EFFECTS_LIST[3][j2]; + GuiBeacon.PowerButton guibeacon$powerbutton2 = new GuiBeacon.PowerButton(j++, this.guiLeft + 167 + j2 * 24 - i2 / 2, this.guiTop + 47, potion3, 3); + this.buttonList.add(guibeacon$powerbutton2); + + if (3 >= i) + { + guibeacon$powerbutton2.enabled = false; + } + else if (potion3 == potion1) + { + guibeacon$powerbutton2.setSelected(true); + } + } + + if (potion != null) + { + GuiBeacon.PowerButton guibeacon$powerbutton1 = new GuiBeacon.PowerButton(j++, this.guiLeft + 167 + (l1 - 1) * 24 - i2 / 2, this.guiTop + 47, potion, 3); + this.buttonList.add(guibeacon$powerbutton1); + + if (3 >= i) + { + guibeacon$powerbutton1.enabled = false; + } + else if (potion == potion1) + { + guibeacon$powerbutton1.setSelected(true); + } + } + } + + this.beaconConfirmButton.enabled = !this.tileBeacon.getStackInSlot(0).isEmpty() && potion != null; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == -2) + { + this.mc.player.connection.sendPacket(new CPacketCloseWindow(this.mc.player.openContainer.windowId)); + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == -1) + { + String s = "MC|Beacon"; + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeInt(this.tileBeacon.getField(1)); + packetbuffer.writeInt(this.tileBeacon.getField(2)); + this.mc.getConnection().sendPacket(new CPacketCustomPayload("MC|Beacon", packetbuffer)); + this.mc.player.connection.sendPacket(new CPacketCloseWindow(this.mc.player.openContainer.windowId)); + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button instanceof GuiBeacon.PowerButton) + { + GuiBeacon.PowerButton guibeacon$powerbutton = (GuiBeacon.PowerButton)button; + + if (guibeacon$powerbutton.isSelected()) + { + return; + } + + int i = Potion.getIdFromPotion(guibeacon$powerbutton.effect); + + if (guibeacon$powerbutton.tier < 3) + { + this.tileBeacon.setField(1, i); + } + else + { + this.tileBeacon.setField(2, i); + } + + this.buttonList.clear(); + this.initGui(); + this.updateScreen(); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + RenderHelper.disableStandardItemLighting(); + this.drawCenteredString(this.fontRenderer, I18n.format("tile.beacon.primary"), 62, 10, 14737632); + this.drawCenteredString(this.fontRenderer, I18n.format("tile.beacon.secondary"), 169, 10, 14737632); + + for (GuiButton guibutton : this.buttonList) + { + if (guibutton.isMouseOver()) + { + guibutton.drawButtonForegroundLayer(mouseX - this.guiLeft, mouseY - this.guiTop); + break; + } + } + + RenderHelper.enableGUIStandardItemLighting(); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(BEACON_GUI_TEXTURES); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + this.itemRender.zLevel = 100.0F; + this.itemRender.renderItemAndEffectIntoGUI(new ItemStack(Items.EMERALD), i + 42, j + 109); + this.itemRender.renderItemAndEffectIntoGUI(new ItemStack(Items.DIAMOND), i + 42 + 22, j + 109); + this.itemRender.renderItemAndEffectIntoGUI(new ItemStack(Items.GOLD_INGOT), i + 42 + 44, j + 109); + this.itemRender.renderItemAndEffectIntoGUI(new ItemStack(Items.IRON_INGOT), i + 42 + 66, j + 109); + this.itemRender.zLevel = 0.0F; + } + + @SideOnly(Side.CLIENT) + static class Button extends GuiButton + { + private final ResourceLocation iconTexture; + private final int iconX; + private final int iconY; + private boolean selected; + + protected Button(int buttonId, int x, int y, ResourceLocation iconTextureIn, int iconXIn, int iconYIn) + { + super(buttonId, x, y, 22, 22, ""); + this.iconTexture = iconTextureIn; + this.iconX = iconXIn; + this.iconY = iconYIn; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + mc.getTextureManager().bindTexture(GuiBeacon.BEACON_GUI_TEXTURES); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + int i = 219; + int j = 0; + + if (!this.enabled) + { + j += this.width * 2; + } + else if (this.selected) + { + j += this.width * 1; + } + else if (this.hovered) + { + j += this.width * 3; + } + + this.drawTexturedModalRect(this.x, this.y, j, 219, this.width, this.height); + + if (!GuiBeacon.BEACON_GUI_TEXTURES.equals(this.iconTexture)) + { + mc.getTextureManager().bindTexture(this.iconTexture); + } + + this.drawTexturedModalRect(this.x + 2, this.y + 2, this.iconX, this.iconY, 18, 18); + } + } + + public boolean isSelected() + { + return this.selected; + } + + public void setSelected(boolean selectedIn) + { + this.selected = selectedIn; + } + } + + @SideOnly(Side.CLIENT) + class CancelButton extends GuiBeacon.Button + { + public CancelButton(int buttonId, int x, int y) + { + super(buttonId, x, y, GuiBeacon.BEACON_GUI_TEXTURES, 112, 220); + } + + public void drawButtonForegroundLayer(int mouseX, int mouseY) + { + GuiBeacon.this.drawHoveringText(I18n.format("gui.cancel"), mouseX, mouseY); + } + } + + @SideOnly(Side.CLIENT) + class ConfirmButton extends GuiBeacon.Button + { + public ConfirmButton(int buttonId, int x, int y) + { + super(buttonId, x, y, GuiBeacon.BEACON_GUI_TEXTURES, 90, 220); + } + + public void drawButtonForegroundLayer(int mouseX, int mouseY) + { + GuiBeacon.this.drawHoveringText(I18n.format("gui.done"), mouseX, mouseY); + } + } + + @SideOnly(Side.CLIENT) + class PowerButton extends GuiBeacon.Button + { + private final Potion effect; + private final int tier; + + public PowerButton(int buttonId, int x, int y, Potion effectIn, int tierIn) + { + super(buttonId, x, y, GuiContainer.INVENTORY_BACKGROUND, effectIn.getStatusIconIndex() % 8 * 18, 198 + effectIn.getStatusIconIndex() / 8 * 18); + this.effect = effectIn; + this.tier = tierIn; + } + + public void drawButtonForegroundLayer(int mouseX, int mouseY) + { + String s = I18n.format(this.effect.getName()); + + if (this.tier >= 3 && this.effect != MobEffects.REGENERATION) + { + s = s + " II"; + } + + GuiBeacon.this.drawHoveringText(s, mouseX, mouseY); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiBrewingStand.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiBrewingStand.java new file mode 100644 index 0000000..fdb9a57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiBrewingStand.java @@ -0,0 +1,85 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerBrewingStand; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiBrewingStand extends GuiContainer +{ + private static final ResourceLocation BREWING_STAND_GUI_TEXTURES = new ResourceLocation("textures/gui/container/brewing_stand.png"); + private static final int[] BUBBLELENGTHS = new int[] {29, 24, 20, 16, 11, 6, 0}; + /** The player inventory bound to this GUI. */ + private final InventoryPlayer playerInventory; + private final IInventory tileBrewingStand; + + public GuiBrewingStand(InventoryPlayer playerInv, IInventory p_i45506_2_) + { + super(new ContainerBrewingStand(playerInv, p_i45506_2_)); + this.playerInventory = playerInv; + this.tileBrewingStand = p_i45506_2_; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + String s = this.tileBrewingStand.getDisplayName().getUnformattedText(); + this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(BREWING_STAND_GUI_TEXTURES); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + int k = this.tileBrewingStand.getField(1); + int l = MathHelper.clamp((18 * k + 20 - 1) / 20, 0, 18); + + if (l > 0) + { + this.drawTexturedModalRect(i + 60, j + 44, 176, 29, l, 4); + } + + int i1 = this.tileBrewingStand.getField(0); + + if (i1 > 0) + { + int j1 = (int)(28.0F * (1.0F - (float)i1 / 400.0F)); + + if (j1 > 0) + { + this.drawTexturedModalRect(i + 97, j + 16, 176, 0, 9, j1); + } + + j1 = BUBBLELENGTHS[i1 / 2 % 7]; + + if (j1 > 0) + { + this.drawTexturedModalRect(i + 63, j + 14 + 29 - j1, 185, 29 - j1, 12, j1); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiChest.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiChest.java new file mode 100644 index 0000000..ba19b40 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiChest.java @@ -0,0 +1,64 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiChest extends GuiContainer +{ + /** The ResourceLocation containing the chest GUI texture. */ + private static final ResourceLocation CHEST_GUI_TEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); + private final IInventory upperChestInventory; + private final IInventory lowerChestInventory; + /** window height is calculated with these values; the more rows, the heigher */ + private final int inventoryRows; + + public GuiChest(IInventory upperInv, IInventory lowerInv) + { + super(new ContainerChest(upperInv, lowerInv, Minecraft.getMinecraft().player)); + this.upperChestInventory = upperInv; + this.lowerChestInventory = lowerInv; + this.allowUserInput = false; + int i = 222; + int j = 114; + this.inventoryRows = lowerInv.getSizeInventory() / 9; + this.ySize = 114 + this.inventoryRows * 18; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.lowerChestInventory.getDisplayName().getUnformattedText(), 8, 6, 4210752); + this.fontRenderer.drawString(this.upperChestInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.inventoryRows * 18 + 17); + this.drawTexturedModalRect(i, j + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiContainer.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiContainer.java new file mode 100644 index 0000000..d1c2c8f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiContainer.java @@ -0,0 +1,789 @@ +package net.minecraft.client.gui.inventory; + +import com.google.common.collect.Sets; +import java.io.IOException; +import java.util.Set; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public abstract class GuiContainer extends GuiScreen +{ + /** The location of the inventory background texture */ + public static final ResourceLocation INVENTORY_BACKGROUND = new ResourceLocation("textures/gui/container/inventory.png"); + /** The X size of the inventory window in pixels. */ + protected int xSize = 176; + /** The Y size of the inventory window in pixels. */ + protected int ySize = 166; + /** A list of the players inventory slots */ + public Container inventorySlots; + /** Starting X position for the Gui. Inconsistent use for Gui backgrounds. */ + protected int guiLeft; + /** Starting Y position for the Gui. Inconsistent use for Gui backgrounds. */ + protected int guiTop; + /** holds the slot currently hovered */ + private Slot hoveredSlot; + /** Used when touchscreen is enabled. */ + private Slot clickedSlot; + /** Used when touchscreen is enabled. */ + private boolean isRightMouseClick; + /** Used when touchscreen is enabled */ + private ItemStack draggedStack = ItemStack.EMPTY; + private int touchUpX; + private int touchUpY; + private Slot returningStackDestSlot; + private long returningStackTime; + /** Used when touchscreen is enabled */ + private ItemStack returningStack = ItemStack.EMPTY; + private Slot currentDragTargetSlot; + private long dragItemDropDelay; + protected final Set dragSplittingSlots = Sets.newHashSet(); + protected boolean dragSplitting; + private int dragSplittingLimit; + private int dragSplittingButton; + private boolean ignoreMouseUp; + private int dragSplittingRemnant; + private long lastClickTime; + private Slot lastClickSlot; + private int lastClickButton; + private boolean doubleClick; + private ItemStack shiftClickedSlot = ItemStack.EMPTY; + + public GuiContainer(Container inventorySlotsIn) + { + this.inventorySlots = inventorySlotsIn; + this.ignoreMouseUp = true; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.mc.player.openContainer = this.inventorySlots; + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + int i = this.guiLeft; + int j = this.guiTop; + this.drawGuiContainerBackgroundLayer(partialTicks, mouseX, mouseY); + GlStateManager.disableRescaleNormal(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + super.drawScreen(mouseX, mouseY, partialTicks); + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)i, (float)j, 0.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableRescaleNormal(); + this.hoveredSlot = null; + int k = 240; + int l = 240; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + for (int i1 = 0; i1 < this.inventorySlots.inventorySlots.size(); ++i1) + { + Slot slot = this.inventorySlots.inventorySlots.get(i1); + + if (slot.isEnabled()) + { + this.drawSlot(slot); + } + + if (this.isMouseOverSlot(slot, mouseX, mouseY) && slot.isEnabled()) + { + this.hoveredSlot = slot; + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + int j1 = slot.xPos; + int k1 = slot.yPos; + GlStateManager.colorMask(true, true, true, false); + this.drawGradientRect(j1, k1, j1 + 16, k1 + 16, -2130706433, -2130706433); + GlStateManager.colorMask(true, true, true, true); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + } + } + + RenderHelper.disableStandardItemLighting(); + this.drawGuiContainerForegroundLayer(mouseX, mouseY); + RenderHelper.enableGUIStandardItemLighting(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiContainerEvent.DrawForeground(this, mouseX, mouseY)); + InventoryPlayer inventoryplayer = this.mc.player.inventory; + ItemStack itemstack = this.draggedStack.isEmpty() ? inventoryplayer.getItemStack() : this.draggedStack; + + if (!itemstack.isEmpty()) + { + int j2 = 8; + int k2 = this.draggedStack.isEmpty() ? 8 : 16; + String s = null; + + if (!this.draggedStack.isEmpty() && this.isRightMouseClick) + { + itemstack = itemstack.copy(); + itemstack.setCount(MathHelper.ceil((float)itemstack.getCount() / 2.0F)); + } + else if (this.dragSplitting && this.dragSplittingSlots.size() > 1) + { + itemstack = itemstack.copy(); + itemstack.setCount(this.dragSplittingRemnant); + + if (itemstack.isEmpty()) + { + s = "" + TextFormatting.YELLOW + "0"; + } + } + + this.drawItemStack(itemstack, mouseX - i - 8, mouseY - j - k2, s); + } + + if (!this.returningStack.isEmpty()) + { + float f = (float)(Minecraft.getSystemTime() - this.returningStackTime) / 100.0F; + + if (f >= 1.0F) + { + f = 1.0F; + this.returningStack = ItemStack.EMPTY; + } + + int l2 = this.returningStackDestSlot.xPos - this.touchUpX; + int i3 = this.returningStackDestSlot.yPos - this.touchUpY; + int l1 = this.touchUpX + (int)((float)l2 * f); + int i2 = this.touchUpY + (int)((float)i3 * f); + this.drawItemStack(this.returningStack, l1, i2, (String)null); + } + + GlStateManager.popMatrix(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + RenderHelper.enableStandardItemLighting(); + } + + protected void renderHoveredToolTip(int p_191948_1_, int p_191948_2_) + { + if (this.mc.player.inventory.getItemStack().isEmpty() && this.hoveredSlot != null && this.hoveredSlot.getHasStack()) + { + this.renderToolTip(this.hoveredSlot.getStack(), p_191948_1_, p_191948_2_); + } + } + + /** + * Draws an ItemStack. + * + * The z index is increased by 32 (and not decreased afterwards), and the item is then rendered at z=200. + */ + private void drawItemStack(ItemStack stack, int x, int y, String altText) + { + GlStateManager.translate(0.0F, 0.0F, 32.0F); + this.zLevel = 200.0F; + this.itemRender.zLevel = 200.0F; + net.minecraft.client.gui.FontRenderer font = stack.getItem().getFontRenderer(stack); + if (font == null) font = fontRenderer; + this.itemRender.renderItemAndEffectIntoGUI(stack, x, y); + this.itemRender.renderItemOverlayIntoGUI(font, stack, x, y - (this.draggedStack.isEmpty() ? 0 : 8), altText); + this.zLevel = 0.0F; + this.itemRender.zLevel = 0.0F; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected abstract void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY); + + /** + * Draws the given slot: any item in it, the slot's background, the hovered highlight, etc. + */ + private void drawSlot(Slot slotIn) + { + int i = slotIn.xPos; + int j = slotIn.yPos; + ItemStack itemstack = slotIn.getStack(); + boolean flag = false; + boolean flag1 = slotIn == this.clickedSlot && !this.draggedStack.isEmpty() && !this.isRightMouseClick; + ItemStack itemstack1 = this.mc.player.inventory.getItemStack(); + String s = null; + + if (slotIn == this.clickedSlot && !this.draggedStack.isEmpty() && this.isRightMouseClick && !itemstack.isEmpty()) + { + itemstack = itemstack.copy(); + itemstack.setCount(itemstack.getCount() / 2); + } + else if (this.dragSplitting && this.dragSplittingSlots.contains(slotIn) && !itemstack1.isEmpty()) + { + if (this.dragSplittingSlots.size() == 1) + { + return; + } + + if (Container.canAddItemToSlot(slotIn, itemstack1, true) && this.inventorySlots.canDragIntoSlot(slotIn)) + { + itemstack = itemstack1.copy(); + flag = true; + Container.computeStackSize(this.dragSplittingSlots, this.dragSplittingLimit, itemstack, slotIn.getStack().isEmpty() ? 0 : slotIn.getStack().getCount()); + int k = Math.min(itemstack.getMaxStackSize(), slotIn.getItemStackLimit(itemstack)); + + if (itemstack.getCount() > k) + { + s = TextFormatting.YELLOW.toString() + k; + itemstack.setCount(k); + } + } + else + { + this.dragSplittingSlots.remove(slotIn); + this.updateDragSplitting(); + } + } + + this.zLevel = 100.0F; + this.itemRender.zLevel = 100.0F; + + if (itemstack.isEmpty() && slotIn.isEnabled()) + { + TextureAtlasSprite textureatlassprite = slotIn.getBackgroundSprite(); + + if (textureatlassprite != null) + { + GlStateManager.disableLighting(); + this.mc.getTextureManager().bindTexture(slotIn.getBackgroundLocation()); + this.drawTexturedModalRect(i, j, textureatlassprite, 16, 16); + GlStateManager.enableLighting(); + flag1 = true; + } + } + + if (!flag1) + { + if (flag) + { + drawRect(i, j, i + 16, j + 16, -2130706433); + } + + GlStateManager.enableDepth(); + this.itemRender.renderItemAndEffectIntoGUI(this.mc.player, itemstack, i, j); + this.itemRender.renderItemOverlayIntoGUI(this.fontRenderer, itemstack, i, j, s); + } + + this.itemRender.zLevel = 0.0F; + this.zLevel = 0.0F; + } + + private void updateDragSplitting() + { + ItemStack itemstack = this.mc.player.inventory.getItemStack(); + + if (!itemstack.isEmpty() && this.dragSplitting) + { + if (this.dragSplittingLimit == 2) + { + this.dragSplittingRemnant = itemstack.getMaxStackSize(); + } + else + { + this.dragSplittingRemnant = itemstack.getCount(); + + for (Slot slot : this.dragSplittingSlots) + { + ItemStack itemstack1 = itemstack.copy(); + ItemStack itemstack2 = slot.getStack(); + int i = itemstack2.isEmpty() ? 0 : itemstack2.getCount(); + Container.computeStackSize(this.dragSplittingSlots, this.dragSplittingLimit, itemstack1, i); + int j = Math.min(itemstack1.getMaxStackSize(), slot.getItemStackLimit(itemstack1)); + + if (itemstack1.getCount() > j) + { + itemstack1.setCount(j); + } + + this.dragSplittingRemnant -= itemstack1.getCount() - i; + } + } + } + } + + /** + * Returns the slot at the given coordinates or null if there is none. + */ + private Slot getSlotAtPosition(int x, int y) + { + for (int i = 0; i < this.inventorySlots.inventorySlots.size(); ++i) + { + Slot slot = this.inventorySlots.inventorySlots.get(i); + + if (this.isMouseOverSlot(slot, x, y) && slot.isEnabled()) + { + return slot; + } + } + + return null; + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + boolean flag = this.mc.gameSettings.keyBindPickBlock.isActiveAndMatches(mouseButton - 100); + Slot slot = this.getSlotAtPosition(mouseX, mouseY); + long i = Minecraft.getSystemTime(); + this.doubleClick = this.lastClickSlot == slot && i - this.lastClickTime < 250L && this.lastClickButton == mouseButton; + this.ignoreMouseUp = false; + + if (mouseButton == 0 || mouseButton == 1 || flag) + { + int j = this.guiLeft; + int k = this.guiTop; + boolean flag1 = this.hasClickedOutside(mouseX, mouseY, j, k); + if (slot != null) flag1 = false; // Forge, prevent dropping of items through slots outside of GUI boundaries + int l = -1; + + if (slot != null) + { + l = slot.slotNumber; + } + + if (flag1) + { + l = -999; + } + + if (this.mc.gameSettings.touchscreen && flag1 && this.mc.player.inventory.getItemStack().isEmpty()) + { + this.mc.displayGuiScreen((GuiScreen)null); + return; + } + + if (l != -1) + { + if (this.mc.gameSettings.touchscreen) + { + if (slot != null && slot.getHasStack()) + { + this.clickedSlot = slot; + this.draggedStack = ItemStack.EMPTY; + this.isRightMouseClick = mouseButton == 1; + } + else + { + this.clickedSlot = null; + } + } + else if (!this.dragSplitting) + { + if (this.mc.player.inventory.getItemStack().isEmpty()) + { + if (this.mc.gameSettings.keyBindPickBlock.isActiveAndMatches(mouseButton - 100)) + { + this.handleMouseClick(slot, l, mouseButton, ClickType.CLONE); + } + else + { + boolean flag2 = l != -999 && (Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54)); + ClickType clicktype = ClickType.PICKUP; + + if (flag2) + { + this.shiftClickedSlot = slot != null && slot.getHasStack() ? slot.getStack().copy() : ItemStack.EMPTY; + clicktype = ClickType.QUICK_MOVE; + } + else if (l == -999) + { + clicktype = ClickType.THROW; + } + + this.handleMouseClick(slot, l, mouseButton, clicktype); + } + + this.ignoreMouseUp = true; + } + else + { + this.dragSplitting = true; + this.dragSplittingButton = mouseButton; + this.dragSplittingSlots.clear(); + + if (mouseButton == 0) + { + this.dragSplittingLimit = 0; + } + else if (mouseButton == 1) + { + this.dragSplittingLimit = 1; + } + else if (this.mc.gameSettings.keyBindPickBlock.isActiveAndMatches(mouseButton - 100)) + { + this.dragSplittingLimit = 2; + } + } + } + } + } + + this.lastClickSlot = slot; + this.lastClickTime = i; + this.lastClickButton = mouseButton; + } + + protected boolean hasClickedOutside(int p_193983_1_, int p_193983_2_, int p_193983_3_, int p_193983_4_) + { + return p_193983_1_ < p_193983_3_ || p_193983_2_ < p_193983_4_ || p_193983_1_ >= p_193983_3_ + this.xSize || p_193983_2_ >= p_193983_4_ + this.ySize; + } + + /** + * Called when a mouse button is pressed and the mouse is moved around. Parameters are : mouseX, mouseY, + * lastButtonClicked & timeSinceMouseClick. + */ + protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) + { + Slot slot = this.getSlotAtPosition(mouseX, mouseY); + ItemStack itemstack = this.mc.player.inventory.getItemStack(); + + if (this.clickedSlot != null && this.mc.gameSettings.touchscreen) + { + if (clickedMouseButton == 0 || clickedMouseButton == 1) + { + if (this.draggedStack.isEmpty()) + { + if (slot != this.clickedSlot && !this.clickedSlot.getStack().isEmpty()) + { + this.draggedStack = this.clickedSlot.getStack().copy(); + } + } + else if (this.draggedStack.getCount() > 1 && slot != null && Container.canAddItemToSlot(slot, this.draggedStack, false)) + { + long i = Minecraft.getSystemTime(); + + if (this.currentDragTargetSlot == slot) + { + if (i - this.dragItemDropDelay > 500L) + { + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, 0, ClickType.PICKUP); + this.handleMouseClick(slot, slot.slotNumber, 1, ClickType.PICKUP); + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, 0, ClickType.PICKUP); + this.dragItemDropDelay = i + 750L; + this.draggedStack.shrink(1); + } + } + else + { + this.currentDragTargetSlot = slot; + this.dragItemDropDelay = i; + } + } + } + } + else if (this.dragSplitting && slot != null && !itemstack.isEmpty() && (itemstack.getCount() > this.dragSplittingSlots.size() || this.dragSplittingLimit == 2) && Container.canAddItemToSlot(slot, itemstack, true) && slot.isItemValid(itemstack) && this.inventorySlots.canDragIntoSlot(slot)) + { + this.dragSplittingSlots.add(slot); + this.updateDragSplitting(); + } + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + super.mouseReleased(mouseX, mouseY, state); //Forge, Call parent to release buttons + Slot slot = this.getSlotAtPosition(mouseX, mouseY); + int i = this.guiLeft; + int j = this.guiTop; + boolean flag = this.hasClickedOutside(mouseX, mouseY, i, j); + if (slot != null) flag = false; // Forge, prevent dropping of items through slots outside of GUI boundaries + int k = -1; + + if (slot != null) + { + k = slot.slotNumber; + } + + if (flag) + { + k = -999; + } + + if (this.doubleClick && slot != null && state == 0 && this.inventorySlots.canMergeSlot(ItemStack.EMPTY, slot)) + { + if (isShiftKeyDown()) + { + if (!this.shiftClickedSlot.isEmpty()) + { + for (Slot slot2 : this.inventorySlots.inventorySlots) + { + if (slot2 != null && slot2.canTakeStack(this.mc.player) && slot2.getHasStack() && slot2.isSameInventory(slot) && Container.canAddItemToSlot(slot2, this.shiftClickedSlot, true)) + { + this.handleMouseClick(slot2, slot2.slotNumber, state, ClickType.QUICK_MOVE); + } + } + } + } + else + { + this.handleMouseClick(slot, k, state, ClickType.PICKUP_ALL); + } + + this.doubleClick = false; + this.lastClickTime = 0L; + } + else + { + if (this.dragSplitting && this.dragSplittingButton != state) + { + this.dragSplitting = false; + this.dragSplittingSlots.clear(); + this.ignoreMouseUp = true; + return; + } + + if (this.ignoreMouseUp) + { + this.ignoreMouseUp = false; + return; + } + + if (this.clickedSlot != null && this.mc.gameSettings.touchscreen) + { + if (state == 0 || state == 1) + { + if (this.draggedStack.isEmpty() && slot != this.clickedSlot) + { + this.draggedStack = this.clickedSlot.getStack(); + } + + boolean flag2 = Container.canAddItemToSlot(slot, this.draggedStack, false); + + if (k != -1 && !this.draggedStack.isEmpty() && flag2) + { + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, state, ClickType.PICKUP); + this.handleMouseClick(slot, k, 0, ClickType.PICKUP); + + if (this.mc.player.inventory.getItemStack().isEmpty()) + { + this.returningStack = ItemStack.EMPTY; + } + else + { + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, state, ClickType.PICKUP); + this.touchUpX = mouseX - i; + this.touchUpY = mouseY - j; + this.returningStackDestSlot = this.clickedSlot; + this.returningStack = this.draggedStack; + this.returningStackTime = Minecraft.getSystemTime(); + } + } + else if (!this.draggedStack.isEmpty()) + { + this.touchUpX = mouseX - i; + this.touchUpY = mouseY - j; + this.returningStackDestSlot = this.clickedSlot; + this.returningStack = this.draggedStack; + this.returningStackTime = Minecraft.getSystemTime(); + } + + this.draggedStack = ItemStack.EMPTY; + this.clickedSlot = null; + } + } + else if (this.dragSplitting && !this.dragSplittingSlots.isEmpty()) + { + this.handleMouseClick((Slot)null, -999, Container.getQuickcraftMask(0, this.dragSplittingLimit), ClickType.QUICK_CRAFT); + + for (Slot slot1 : this.dragSplittingSlots) + { + this.handleMouseClick(slot1, slot1.slotNumber, Container.getQuickcraftMask(1, this.dragSplittingLimit), ClickType.QUICK_CRAFT); + } + + this.handleMouseClick((Slot)null, -999, Container.getQuickcraftMask(2, this.dragSplittingLimit), ClickType.QUICK_CRAFT); + } + else if (!this.mc.player.inventory.getItemStack().isEmpty()) + { + if (this.mc.gameSettings.keyBindPickBlock.isActiveAndMatches(state - 100)) + { + this.handleMouseClick(slot, k, state, ClickType.CLONE); + } + else + { + boolean flag1 = k != -999 && (Keyboard.isKeyDown(42) || Keyboard.isKeyDown(54)); + + if (flag1) + { + this.shiftClickedSlot = slot != null && slot.getHasStack() ? slot.getStack().copy() : ItemStack.EMPTY; + } + + this.handleMouseClick(slot, k, state, flag1 ? ClickType.QUICK_MOVE : ClickType.PICKUP); + } + } + } + + if (this.mc.player.inventory.getItemStack().isEmpty()) + { + this.lastClickTime = 0L; + } + + this.dragSplitting = false; + } + + /** + * Returns whether the mouse is over the given slot. + */ + private boolean isMouseOverSlot(Slot slotIn, int mouseX, int mouseY) + { + return this.isPointInRegion(slotIn.xPos, slotIn.yPos, 16, 16, mouseX, mouseY); + } + + /** + * Test if the 2D point is in a rectangle (relative to the GUI). Args : rectX, rectY, rectWidth, rectHeight, pointX, + * pointY + */ + protected boolean isPointInRegion(int rectX, int rectY, int rectWidth, int rectHeight, int pointX, int pointY) + { + int i = this.guiLeft; + int j = this.guiTop; + pointX = pointX - i; + pointY = pointY - j; + return pointX >= rectX - 1 && pointX < rectX + rectWidth + 1 && pointY >= rectY - 1 && pointY < rectY + rectHeight + 1; + } + + /** + * Called when the mouse is clicked over a slot or outside the gui. + */ + protected void handleMouseClick(Slot slotIn, int slotId, int mouseButton, ClickType type) + { + if (slotIn != null) + { + slotId = slotIn.slotNumber; + } + + this.mc.playerController.windowClick(this.inventorySlots.windowId, slotId, mouseButton, type, this.mc.player); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 1 || this.mc.gameSettings.keyBindInventory.isActiveAndMatches(keyCode)) + { + this.mc.player.closeScreen(); + } + + this.checkHotbarKeys(keyCode); + + if (this.hoveredSlot != null && this.hoveredSlot.getHasStack()) + { + if (this.mc.gameSettings.keyBindPickBlock.isActiveAndMatches(keyCode)) + { + this.handleMouseClick(this.hoveredSlot, this.hoveredSlot.slotNumber, 0, ClickType.CLONE); + } + else if (this.mc.gameSettings.keyBindDrop.isActiveAndMatches(keyCode)) + { + this.handleMouseClick(this.hoveredSlot, this.hoveredSlot.slotNumber, isCtrlKeyDown() ? 1 : 0, ClickType.THROW); + } + } + } + + /** + * Checks whether a hotbar key (to swap the hovered item with an item in the hotbar) has been pressed. If so, it + * swaps the given items. + * Returns true if a hotbar key was pressed. + */ + protected boolean checkHotbarKeys(int keyCode) + { + if (this.mc.player.inventory.getItemStack().isEmpty() && this.hoveredSlot != null) + { + for (int i = 0; i < 9; ++i) + { + if (this.mc.gameSettings.keyBindsHotbar[i].isActiveAndMatches(keyCode)) + { + this.handleMouseClick(this.hoveredSlot, this.hoveredSlot.slotNumber, i, ClickType.SWAP); + return true; + } + } + } + + return false; + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + if (this.mc.player != null) + { + this.inventorySlots.onContainerClosed(this.mc.player); + } + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return false; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + + if (!this.mc.player.isEntityAlive() || this.mc.player.isDead) + { + this.mc.player.closeScreen(); + } + } + + /* ======================================== FORGE START =====================================*/ + + /** + * Returns the slot that is currently displayed under the mouse. + */ + @javax.annotation.Nullable + public Slot getSlotUnderMouse() { return this.hoveredSlot; } + public int getGuiLeft() { return guiLeft; } + public int getGuiTop() { return guiTop; } + public int getXSize() { return xSize; } + public int getYSize() { return ySize; } + + /* ======================================== FORGE END =====================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiContainerCreative.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiContainerCreative.java new file mode 100644 index 0000000..936e003 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiContainerCreative.java @@ -0,0 +1,1321 @@ +package net.minecraft.client.gui.inventory; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.gui.achievement.GuiStats; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.InventoryEffectRenderer; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.CreativeSettings; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.settings.HotbarSnapshot; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.client.util.SearchTreeManager; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +@SideOnly(Side.CLIENT) +public class GuiContainerCreative extends InventoryEffectRenderer +{ + /** The location of the creative inventory tabs texture */ + private static final ResourceLocation CREATIVE_INVENTORY_TABS = new ResourceLocation("textures/gui/container/creative_inventory/tabs.png"); + private static final InventoryBasic basicInventory = new InventoryBasic("tmp", true, 45); + /** Currently selected creative inventory tab index. */ + private static int selectedTabIndex = CreativeTabs.BUILDING_BLOCKS.getTabIndex(); + /** Amount scrolled in Creative mode inventory (0 = top, 1 = bottom) */ + private float currentScroll; + /** True if the scrollbar is being dragged */ + private boolean isScrolling; + /** True if the left mouse button was held down last time drawScreen was called. */ + private boolean wasClicking; + private GuiTextField searchField; + private List originalSlots; + private Slot destroyItemSlot; + private boolean clearSearch; + private CreativeCrafting listener; + private static int tabPage = 0; + private int maxPages = 0; + + public GuiContainerCreative(EntityPlayer player) + { + super(new GuiContainerCreative.ContainerCreative(player)); + player.openContainer = this.inventorySlots; + this.allowUserInput = true; + this.ySize = 136; + this.xSize = 195; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + if (!this.mc.playerController.isInCreativeMode()) + { + this.mc.displayGuiScreen(new GuiInventory(this.mc.player)); + } + } + + /** + * Called when the mouse is clicked over a slot or outside the gui. + */ + protected void handleMouseClick(@Nullable Slot slotIn, int slotId, int mouseButton, ClickType type) + { + this.clearSearch = true; + boolean flag = type == ClickType.QUICK_MOVE; + type = slotId == -999 && type == ClickType.PICKUP ? ClickType.THROW : type; + + if (slotIn == null && selectedTabIndex != CreativeTabs.INVENTORY.getTabIndex() && type != ClickType.QUICK_CRAFT) + { + InventoryPlayer inventoryplayer1 = this.mc.player.inventory; + + if (!inventoryplayer1.getItemStack().isEmpty()) + { + if (mouseButton == 0) + { + this.mc.player.dropItem(inventoryplayer1.getItemStack(), true); + this.mc.playerController.sendPacketDropItem(inventoryplayer1.getItemStack()); + inventoryplayer1.setItemStack(ItemStack.EMPTY); + } + + if (mouseButton == 1) + { + ItemStack itemstack6 = inventoryplayer1.getItemStack().splitStack(1); + this.mc.player.dropItem(itemstack6, true); + this.mc.playerController.sendPacketDropItem(itemstack6); + } + } + } + else + { + if (slotIn != null && !slotIn.canTakeStack(this.mc.player)) + { + return; + } + + if (slotIn == this.destroyItemSlot && flag) + { + for (int j = 0; j < this.mc.player.inventoryContainer.getInventory().size(); ++j) + { + this.mc.playerController.sendSlotPacket(ItemStack.EMPTY, j); + } + } + else if (selectedTabIndex == CreativeTabs.INVENTORY.getTabIndex()) + { + if (slotIn == this.destroyItemSlot) + { + this.mc.player.inventory.setItemStack(ItemStack.EMPTY); + } + else if (type == ClickType.THROW && slotIn != null && slotIn.getHasStack()) + { + ItemStack itemstack = slotIn.decrStackSize(mouseButton == 0 ? 1 : slotIn.getStack().getMaxStackSize()); + ItemStack itemstack1 = slotIn.getStack(); + this.mc.player.dropItem(itemstack, true); + this.mc.playerController.sendPacketDropItem(itemstack); + this.mc.playerController.sendSlotPacket(itemstack1, ((GuiContainerCreative.CreativeSlot)slotIn).slot.slotNumber); + } + else if (type == ClickType.THROW && !this.mc.player.inventory.getItemStack().isEmpty()) + { + this.mc.player.dropItem(this.mc.player.inventory.getItemStack(), true); + this.mc.playerController.sendPacketDropItem(this.mc.player.inventory.getItemStack()); + this.mc.player.inventory.setItemStack(ItemStack.EMPTY); + } + else + { + this.mc.player.inventoryContainer.slotClick(slotIn == null ? slotId : ((GuiContainerCreative.CreativeSlot)slotIn).slot.slotNumber, mouseButton, type, this.mc.player); + this.mc.player.inventoryContainer.detectAndSendChanges(); + } + } + else if (type != ClickType.QUICK_CRAFT && slotIn.inventory == basicInventory) + { + InventoryPlayer inventoryplayer = this.mc.player.inventory; + ItemStack itemstack5 = inventoryplayer.getItemStack(); + ItemStack itemstack7 = slotIn.getStack(); + + if (type == ClickType.SWAP) + { + if (!itemstack7.isEmpty() && mouseButton >= 0 && mouseButton < 9) + { + ItemStack itemstack10 = itemstack7.copy(); + itemstack10.setCount(itemstack10.getMaxStackSize()); + this.mc.player.inventory.setInventorySlotContents(mouseButton, itemstack10); + this.mc.player.inventoryContainer.detectAndSendChanges(); + } + + return; + } + + if (type == ClickType.CLONE) + { + if (inventoryplayer.getItemStack().isEmpty() && slotIn.getHasStack()) + { + ItemStack itemstack9 = slotIn.getStack().copy(); + itemstack9.setCount(itemstack9.getMaxStackSize()); + inventoryplayer.setItemStack(itemstack9); + } + + return; + } + + if (type == ClickType.THROW) + { + if (!itemstack7.isEmpty()) + { + ItemStack itemstack8 = itemstack7.copy(); + itemstack8.setCount(mouseButton == 0 ? 1 : itemstack8.getMaxStackSize()); + this.mc.player.dropItem(itemstack8, true); + this.mc.playerController.sendPacketDropItem(itemstack8); + } + + return; + } + + if (!itemstack5.isEmpty() && !itemstack7.isEmpty() && itemstack5.isItemEqual(itemstack7) && ItemStack.areItemStackTagsEqual(itemstack5, itemstack7)) + { + if (mouseButton == 0) + { + if (flag) + { + itemstack5.setCount(itemstack5.getMaxStackSize()); + } + else if (itemstack5.getCount() < itemstack5.getMaxStackSize()) + { + itemstack5.grow(1); + } + } + else + { + itemstack5.shrink(1); + } + } + else if (!itemstack7.isEmpty() && itemstack5.isEmpty()) + { + inventoryplayer.setItemStack(itemstack7.copy()); + itemstack5 = inventoryplayer.getItemStack(); + + if (flag) + { + itemstack5.setCount(itemstack5.getMaxStackSize()); + } + } + else if (mouseButton == 0) + { + inventoryplayer.setItemStack(ItemStack.EMPTY); + } + else + { + inventoryplayer.getItemStack().shrink(1); + } + } + else if (this.inventorySlots != null) + { + ItemStack itemstack3 = slotIn == null ? ItemStack.EMPTY : this.inventorySlots.getSlot(slotIn.slotNumber).getStack(); + this.inventorySlots.slotClick(slotIn == null ? slotId : slotIn.slotNumber, mouseButton, type, this.mc.player); + + if (Container.getDragEvent(mouseButton) == 2) + { + for (int k = 0; k < 9; ++k) + { + this.mc.playerController.sendSlotPacket(this.inventorySlots.getSlot(45 + k).getStack(), 36 + k); + } + } + else if (slotIn != null) + { + ItemStack itemstack4 = this.inventorySlots.getSlot(slotIn.slotNumber).getStack(); + this.mc.playerController.sendSlotPacket(itemstack4, slotIn.slotNumber - this.inventorySlots.inventorySlots.size() + 9 + 36); + int i = 45 + mouseButton; + + if (type == ClickType.SWAP) + { + this.mc.playerController.sendSlotPacket(itemstack3, i - this.inventorySlots.inventorySlots.size() + 9 + 36); + } + else if (type == ClickType.THROW && !itemstack3.isEmpty()) + { + ItemStack itemstack2 = itemstack3.copy(); + itemstack2.setCount(mouseButton == 0 ? 1 : itemstack2.getMaxStackSize()); + this.mc.player.dropItem(itemstack2, true); + this.mc.playerController.sendPacketDropItem(itemstack2); + } + + this.mc.player.inventoryContainer.detectAndSendChanges(); + } + } + } + } + + protected void updateActivePotionEffects() + { + int i = this.guiLeft; + super.updateActivePotionEffects(); + + if (this.searchField != null && this.guiLeft != i) + { + this.searchField.x = this.guiLeft + 82; + } + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + if (this.mc.playerController.isInCreativeMode()) + { + super.initGui(); + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.searchField = new GuiTextField(0, this.fontRenderer, this.guiLeft + 82, this.guiTop + 6, 80, this.fontRenderer.FONT_HEIGHT); + this.searchField.setMaxStringLength(50); + this.searchField.setEnableBackgroundDrawing(false); + this.searchField.setVisible(false); + this.searchField.setTextColor(16777215); + int i = selectedTabIndex; + selectedTabIndex = -1; + this.setCurrentCreativeTab(CreativeTabs.CREATIVE_TAB_ARRAY[i]); + this.listener = new CreativeCrafting(this.mc); + this.mc.player.inventoryContainer.addListener(this.listener); + int tabCount = CreativeTabs.CREATIVE_TAB_ARRAY.length; + if (tabCount > 12) + { + buttonList.add(new GuiButton(101, guiLeft, guiTop - 50, 20, 20, "<")); + buttonList.add(new GuiButton(102, guiLeft + xSize - 20, guiTop - 50, 20, 20, ">")); + maxPages = (int) Math.ceil((tabCount - 12) / 10D); + } + } + else + { + this.mc.displayGuiScreen(new GuiInventory(this.mc.player)); + } + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + super.onGuiClosed(); + + if (this.mc.player != null && this.mc.player.inventory != null) + { + this.mc.player.inventoryContainer.removeListener(this.listener); + } + + Keyboard.enableRepeatEvents(false); + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (!CreativeTabs.CREATIVE_TAB_ARRAY[selectedTabIndex].hasSearchBar()) + { + if (GameSettings.isKeyDown(this.mc.gameSettings.keyBindChat)) + { + this.setCurrentCreativeTab(CreativeTabs.SEARCH); + } + else + { + super.keyTyped(typedChar, keyCode); + } + } + else + { + if (this.clearSearch) + { + this.clearSearch = false; + this.searchField.setText(""); + } + + if (!this.checkHotbarKeys(keyCode)) + { + if (this.searchField.textboxKeyTyped(typedChar, keyCode)) + { + this.updateCreativeSearch(); + } + else + { + super.keyTyped(typedChar, keyCode); + } + } + } + } + + private void updateCreativeSearch() + { + GuiContainerCreative.ContainerCreative guicontainercreative$containercreative = (GuiContainerCreative.ContainerCreative)this.inventorySlots; + guicontainercreative$containercreative.itemList.clear(); + + CreativeTabs tab = CreativeTabs.CREATIVE_TAB_ARRAY[selectedTabIndex]; + if (tab.hasSearchBar() && tab != CreativeTabs.SEARCH) + { + tab.displayAllRelevantItems(guicontainercreative$containercreative.itemList); + if (!this.searchField.getText().isEmpty()) + { + //TODO: Make this a SearchTree not a manual search + String search = this.searchField.getText().toLowerCase(Locale.ROOT); + java.util.Iterator itr = guicontainercreative$containercreative.itemList.iterator(); + while (itr.hasNext()) { + ItemStack stack = itr.next(); + boolean matches = false; + for (String line : stack.getTooltip(this.mc.player, this.mc.gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL)) + { + if (TextFormatting.getTextWithoutFormattingCodes(line).toLowerCase(Locale.ROOT).contains(search)) { + matches = true; + break; + } + } + if (!matches) + itr.remove(); + } + } + this.currentScroll = 0.0F; + guicontainercreative$containercreative.scrollTo(0.0F); + return; + } + + if (this.searchField.getText().isEmpty()) + { + for (Item item : Item.REGISTRY) + { + item.getSubItems(CreativeTabs.SEARCH, guicontainercreative$containercreative.itemList); + } + } + else + { + guicontainercreative$containercreative.itemList.addAll(this.mc.getSearchTree(SearchTreeManager.ITEMS).search(this.searchField.getText().toLowerCase(Locale.ROOT))); + } + + this.currentScroll = 0.0F; + guicontainercreative$containercreative.scrollTo(0.0F); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + CreativeTabs creativetabs = CreativeTabs.CREATIVE_TAB_ARRAY[selectedTabIndex]; + + if (creativetabs != null && creativetabs.drawInForegroundOfTab()) + { + GlStateManager.disableBlend(); + this.fontRenderer.drawString(I18n.format(creativetabs.getTranslatedTabLabel()), 8, 6, 4210752); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (mouseButton == 0) + { + int i = mouseX - this.guiLeft; + int j = mouseY - this.guiTop; + + for (CreativeTabs creativetabs : CreativeTabs.CREATIVE_TAB_ARRAY) + { + if (this.isMouseOverTab(creativetabs, i, j)) + { + return; + } + } + } + + super.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + if (state == 0) + { + int i = mouseX - this.guiLeft; + int j = mouseY - this.guiTop; + + for (CreativeTabs creativetabs : CreativeTabs.CREATIVE_TAB_ARRAY) + { + if (creativetabs != null && this.isMouseOverTab(creativetabs, i, j)) + { + this.setCurrentCreativeTab(creativetabs); + return; + } + } + } + + super.mouseReleased(mouseX, mouseY, state); + } + + /** + * returns (if you are not on the inventoryTab) and (the flag isn't set) and (you have more than 1 page of items) + */ + private boolean needsScrollBars() + { + if (CreativeTabs.CREATIVE_TAB_ARRAY[selectedTabIndex] == null) return false; + return selectedTabIndex != CreativeTabs.INVENTORY.getTabIndex() && CreativeTabs.CREATIVE_TAB_ARRAY[selectedTabIndex].shouldHidePlayerInventory() && ((GuiContainerCreative.ContainerCreative)this.inventorySlots).canScroll(); + } + + /** + * Sets the current creative tab, restructuring the GUI as needed. + */ + private void setCurrentCreativeTab(CreativeTabs tab) + { + if (tab == null) return; + int i = selectedTabIndex; + selectedTabIndex = tab.getTabIndex(); + GuiContainerCreative.ContainerCreative guicontainercreative$containercreative = (GuiContainerCreative.ContainerCreative)this.inventorySlots; + this.dragSplittingSlots.clear(); + guicontainercreative$containercreative.itemList.clear(); + + if (tab == CreativeTabs.HOTBAR) + { + for (int j = 0; j < 9; ++j) + { + HotbarSnapshot hotbarsnapshot = this.mc.creativeSettings.getHotbarSnapshot(j); + + if (hotbarsnapshot.isEmpty()) + { + for (int k = 0; k < 9; ++k) + { + if (k == j) + { + ItemStack itemstack = new ItemStack(Items.PAPER); + itemstack.getOrCreateSubCompound("CustomCreativeLock"); + String s = GameSettings.getKeyDisplayString(this.mc.gameSettings.keyBindsHotbar[j].getKeyCode()); + String s1 = GameSettings.getKeyDisplayString(this.mc.gameSettings.keyBindSaveToolbar.getKeyCode()); + itemstack.setStackDisplayName((new TextComponentTranslation("inventory.hotbarInfo", new Object[] {s1, s})).getUnformattedText()); + guicontainercreative$containercreative.itemList.add(itemstack); + } + else + { + guicontainercreative$containercreative.itemList.add(ItemStack.EMPTY); + } + } + } + else + { + guicontainercreative$containercreative.itemList.addAll(hotbarsnapshot); + } + } + } + else if (tab != CreativeTabs.SEARCH) + { + tab.displayAllRelevantItems(guicontainercreative$containercreative.itemList); + } + + if (tab == CreativeTabs.INVENTORY) + { + Container container = this.mc.player.inventoryContainer; + + if (this.originalSlots == null) + { + this.originalSlots = guicontainercreative$containercreative.inventorySlots; + } + + guicontainercreative$containercreative.inventorySlots = Lists.newArrayList(); + + for (int l = 0; l < container.inventorySlots.size(); ++l) + { + Slot slot = new GuiContainerCreative.CreativeSlot(container.inventorySlots.get(l), l); + guicontainercreative$containercreative.inventorySlots.add(slot); + + if (l >= 5 && l < 9) + { + int j1 = l - 5; + int l1 = j1 / 2; + int j2 = j1 % 2; + slot.xPos = 54 + l1 * 54; + slot.yPos = 6 + j2 * 27; + } + else if (l >= 0 && l < 5) + { + slot.xPos = -2000; + slot.yPos = -2000; + } + else if (l == 45) + { + slot.xPos = 35; + slot.yPos = 20; + } + else if (l < container.inventorySlots.size()) + { + int i1 = l - 9; + int k1 = i1 % 9; + int i2 = i1 / 9; + slot.xPos = 9 + k1 * 18; + + if (l >= 36) + { + slot.yPos = 112; + } + else + { + slot.yPos = 54 + i2 * 18; + } + } + } + + this.destroyItemSlot = new Slot(basicInventory, 0, 173, 112); + guicontainercreative$containercreative.inventorySlots.add(this.destroyItemSlot); + } + else if (i == CreativeTabs.INVENTORY.getTabIndex()) + { + guicontainercreative$containercreative.inventorySlots = this.originalSlots; + this.originalSlots = null; + } + + if (this.searchField != null) + { + if (tab.hasSearchBar()) + { + this.searchField.setVisible(true); + this.searchField.setCanLoseFocus(false); + this.searchField.setFocused(true); + this.searchField.setText(""); + this.searchField.width = tab.getSearchbarWidth(); + this.searchField.x = this.guiLeft + (82 /*default left*/ + 89 /*default width*/) - this.searchField.width; + this.updateCreativeSearch(); + } + else + { + this.searchField.setVisible(false); + this.searchField.setCanLoseFocus(true); + this.searchField.setFocused(false); + } + } + + this.currentScroll = 0.0F; + guicontainercreative$containercreative.scrollTo(0.0F); + } + + /** + * Handles mouse input. + */ + public void handleMouseInput() throws IOException + { + super.handleMouseInput(); + int i = Mouse.getEventDWheel(); + + if (i != 0 && this.needsScrollBars()) + { + int j = (((GuiContainerCreative.ContainerCreative)this.inventorySlots).itemList.size() + 9 - 1) / 9 - 5; + + if (i > 0) + { + i = 1; + } + + if (i < 0) + { + i = -1; + } + + this.currentScroll = (float)((double)this.currentScroll - (double)i / (double)j); + this.currentScroll = MathHelper.clamp(this.currentScroll, 0.0F, 1.0F); + ((GuiContainerCreative.ContainerCreative)this.inventorySlots).scrollTo(this.currentScroll); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + boolean flag = Mouse.isButtonDown(0); + int i = this.guiLeft; + int j = this.guiTop; + int k = i + 175; + int l = j + 18; + int i1 = k + 14; + int j1 = l + 112; + + if (!this.wasClicking && flag && mouseX >= k && mouseY >= l && mouseX < i1 && mouseY < j1) + { + this.isScrolling = this.needsScrollBars(); + } + + if (!flag) + { + this.isScrolling = false; + } + + this.wasClicking = flag; + + if (this.isScrolling) + { + this.currentScroll = ((float)(mouseY - l) - 7.5F) / ((float)(j1 - l) - 15.0F); + this.currentScroll = MathHelper.clamp(this.currentScroll, 0.0F, 1.0F); + ((GuiContainerCreative.ContainerCreative)this.inventorySlots).scrollTo(this.currentScroll); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + + int start = tabPage * 10; + int end = Math.min(CreativeTabs.CREATIVE_TAB_ARRAY.length, ((tabPage + 1) * 10) + 2); + if (tabPage != 0) start += 2; + boolean rendered = false; + + for (CreativeTabs creativetabs : java.util.Arrays.copyOfRange(CreativeTabs.CREATIVE_TAB_ARRAY,start,end)) + { + if (creativetabs == null) continue; + if (this.renderCreativeInventoryHoveringText(creativetabs, mouseX, mouseY)) + { + rendered = true; + break; + } + } + + if (!rendered && !renderCreativeInventoryHoveringText(CreativeTabs.SEARCH, mouseX, mouseY)) + { + renderCreativeInventoryHoveringText(CreativeTabs.INVENTORY, mouseX, mouseY); + } + + if (this.destroyItemSlot != null && selectedTabIndex == CreativeTabs.INVENTORY.getTabIndex() && this.isPointInRegion(this.destroyItemSlot.xPos, this.destroyItemSlot.yPos, 16, 16, mouseX, mouseY)) + { + this.drawHoveringText(I18n.format("inventory.binSlot"), mouseX, mouseY); + } + + if (maxPages != 0) + { + String page = String.format("%d / %d", tabPage + 1, maxPages + 1); + int width = fontRenderer.getStringWidth(page); + GlStateManager.disableLighting(); + this.zLevel = 300.0F; + itemRender.zLevel = 300.0F; + fontRenderer.drawString(page, guiLeft + (xSize / 2) - (width / 2), guiTop - 44, -1); + this.zLevel = 0.0F; + itemRender.zLevel = 0.0F; + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + this.renderHoveredToolTip(mouseX, mouseY); + } + + protected void renderToolTip(ItemStack stack, int x, int y) + { + if (selectedTabIndex == CreativeTabs.SEARCH.getTabIndex()) + { + List list = stack.getTooltip(this.mc.player, this.mc.gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL); + CreativeTabs creativetabs = stack.getItem().getCreativeTab(); + + if (creativetabs == null && stack.getItem() == Items.ENCHANTED_BOOK) + { + Map map = EnchantmentHelper.getEnchantments(stack); + + if (map.size() == 1) + { + Enchantment enchantment = map.keySet().iterator().next(); + + for (CreativeTabs creativetabs1 : CreativeTabs.CREATIVE_TAB_ARRAY) + { + if (creativetabs1.hasRelevantEnchantmentType(enchantment.type)) + { + creativetabs = creativetabs1; + break; + } + } + } + } + + if (creativetabs != null) + { + list.add(1, "" + TextFormatting.BOLD + TextFormatting.BLUE + I18n.format(creativetabs.getTranslatedTabLabel())); + } + + for (int i = 0; i < list.size(); ++i) + { + if (i == 0) + { + list.set(i, stack.getRarity().rarityColor + (String)list.get(i)); + } + else + { + list.set(i, TextFormatting.GRAY + (String)list.get(i)); + } + } + + net.minecraft.client.gui.FontRenderer font = stack.getItem().getFontRenderer(stack); + net.minecraftforge.fml.client.config.GuiUtils.preItemToolTip(stack); + this.drawHoveringText(list, x, y, (font == null ? fontRenderer : font)); + net.minecraftforge.fml.client.config.GuiUtils.postItemToolTip(); + } + else + { + super.renderToolTip(stack, x, y); + } + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + RenderHelper.enableGUIStandardItemLighting(); + CreativeTabs creativetabs = CreativeTabs.CREATIVE_TAB_ARRAY[selectedTabIndex]; + + int start = tabPage * 10; + int end = Math.min(CreativeTabs.CREATIVE_TAB_ARRAY.length, ((tabPage + 1) * 10 + 2)); + if (tabPage != 0) start += 2; + + for (CreativeTabs creativetabs1 : java.util.Arrays.copyOfRange(CreativeTabs.CREATIVE_TAB_ARRAY,start,end)) + { + this.mc.getTextureManager().bindTexture(CREATIVE_INVENTORY_TABS); + + if (creativetabs1 == null) continue; + if (creativetabs1.getTabIndex() != selectedTabIndex) + { + this.drawTab(creativetabs1); + } + } + + if (tabPage != 0) + { + if (creativetabs != CreativeTabs.SEARCH) + { + this.mc.getTextureManager().bindTexture(CREATIVE_INVENTORY_TABS); + drawTab(CreativeTabs.SEARCH); + } + if (creativetabs != CreativeTabs.INVENTORY) + { + this.mc.getTextureManager().bindTexture(CREATIVE_INVENTORY_TABS); + drawTab(CreativeTabs.INVENTORY); + } + } + + this.mc.getTextureManager().bindTexture(creativetabs.getBackgroundImage()); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + this.searchField.drawTextBox(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int i = this.guiLeft + 175; + int j = this.guiTop + 18; + int k = j + 112; + this.mc.getTextureManager().bindTexture(CREATIVE_INVENTORY_TABS); + + if (creativetabs.shouldHidePlayerInventory()) + { + this.drawTexturedModalRect(i, j + (int)((float)(k - j - 17) * this.currentScroll), 232 + (this.needsScrollBars() ? 0 : 12), 0, 12, 15); + } + + if (creativetabs == null || creativetabs.getTabPage() != tabPage) + { + if (creativetabs != CreativeTabs.SEARCH && creativetabs != CreativeTabs.INVENTORY) + { + return; + } + } + + this.drawTab(creativetabs); + + if (creativetabs == CreativeTabs.INVENTORY) + { + GuiInventory.drawEntityOnScreen(this.guiLeft + 88, this.guiTop + 45, 20, (float)(this.guiLeft + 88 - mouseX), (float)(this.guiTop + 45 - 30 - mouseY), this.mc.player); + } + } + + /** + * Checks if the mouse is over the given tab. Returns true if so. + */ + protected boolean isMouseOverTab(CreativeTabs tab, int mouseX, int mouseY) + { + if (tab.getTabPage() != tabPage) + { + if (tab != CreativeTabs.SEARCH && tab != CreativeTabs.INVENTORY) + { + return false; + } + } + + int i = tab.getTabColumn(); + int j = 28 * i; + int k = 0; + + if (tab.isAlignedRight()) + { + j = this.xSize - 28 * (6 - i) + 2; + } + else if (i > 0) + { + j += i; + } + + if (tab.isTabInFirstRow()) + { + k = k - 32; + } + else + { + k = k + this.ySize; + } + + return mouseX >= j && mouseX <= j + 28 && mouseY >= k && mouseY <= k + 32; + } + + /** + * Renders the creative inventory hovering text if mouse is over it. Returns true if did render or false otherwise. + * Params: current creative tab to be checked, current mouse x position, current mouse y position. + */ + protected boolean renderCreativeInventoryHoveringText(CreativeTabs tab, int mouseX, int mouseY) + { + int i = tab.getTabColumn(); + int j = 28 * i; + int k = 0; + + if (tab.isAlignedRight()) + { + j = this.xSize - 28 * (6 - i) + 2; + } + else if (i > 0) + { + j += i; + } + + if (tab.isTabInFirstRow()) + { + k = k - 32; + } + else + { + k = k + this.ySize; + } + + if (this.isPointInRegion(j + 3, k + 3, 23, 27, mouseX, mouseY)) + { + this.drawHoveringText(I18n.format(tab.getTranslatedTabLabel()), mouseX, mouseY); + return true; + } + else + { + return false; + } + } + + /** + * Draws the given tab and its background, deciding whether to highlight the tab or not based off of the selected + * index. + */ + protected void drawTab(CreativeTabs tab) + { + boolean flag = tab.getTabIndex() == selectedTabIndex; + boolean flag1 = tab.isTabInFirstRow(); + int i = tab.getTabColumn(); + int j = i * 28; + int k = 0; + int l = this.guiLeft + 28 * i; + int i1 = this.guiTop; + int j1 = 32; + + if (flag) + { + k += 32; + } + + if (tab.isAlignedRight()) + { + l = this.guiLeft + this.xSize - 28 * (6 - i); + } + else if (i > 0) + { + l += i; + } + + if (flag1) + { + i1 = i1 - 28; + } + else + { + k += 64; + i1 = i1 + (this.ySize - 4); + } + + GlStateManager.disableLighting(); + GlStateManager.color(1F, 1F, 1F); //Forge: Reset color in case Items change it. + GlStateManager.enableBlend(); //Forge: Make sure blend is enabled else tabs show a white border. + this.drawTexturedModalRect(l, i1, j, k, 28, 32); + this.zLevel = 100.0F; + this.itemRender.zLevel = 100.0F; + l = l + 6; + i1 = i1 + 8 + (flag1 ? 1 : -1); + GlStateManager.enableLighting(); + GlStateManager.enableRescaleNormal(); + ItemStack itemstack = tab.getIconItemStack(); + this.itemRender.renderItemAndEffectIntoGUI(itemstack, l, i1); + this.itemRender.renderItemOverlays(this.fontRenderer, itemstack, l, i1); + GlStateManager.disableLighting(); + this.itemRender.zLevel = 0.0F; + this.zLevel = 0.0F; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 1) + { + this.mc.displayGuiScreen(new GuiStats(this, this.mc.player.getStatFileWriter())); + } + + if (button.id == 101) + { + tabPage = Math.max(tabPage - 1, 0); + } + else if (button.id == 102) + { + tabPage = Math.min(tabPage + 1, maxPages); + } + } + + /** + * Returns the index of the currently selected tab. + */ + public int getSelectedTabIndex() + { + return selectedTabIndex; + } + + public static void handleHotbarSnapshots(Minecraft p_192044_0_, int p_192044_1_, boolean p_192044_2_, boolean p_192044_3_) + { + EntityPlayerSP entityplayersp = p_192044_0_.player; + CreativeSettings creativesettings = p_192044_0_.creativeSettings; + HotbarSnapshot hotbarsnapshot = creativesettings.getHotbarSnapshot(p_192044_1_); + + if (p_192044_2_) + { + for (int i = 0; i < InventoryPlayer.getHotbarSize(); ++i) + { + ItemStack itemstack = ((ItemStack)hotbarsnapshot.get(i)).copy(); + entityplayersp.inventory.setInventorySlotContents(i, itemstack); + p_192044_0_.playerController.sendSlotPacket(itemstack, 36 + i); + } + + entityplayersp.inventoryContainer.detectAndSendChanges(); + } + else if (p_192044_3_) + { + for (int j = 0; j < InventoryPlayer.getHotbarSize(); ++j) + { + hotbarsnapshot.set(j, entityplayersp.inventory.getStackInSlot(j).copy()); + } + + String s = GameSettings.getKeyDisplayString(p_192044_0_.gameSettings.keyBindsHotbar[p_192044_1_].getKeyCode()); + String s1 = GameSettings.getKeyDisplayString(p_192044_0_.gameSettings.keyBindLoadToolbar.getKeyCode()); + p_192044_0_.ingameGUI.setOverlayMessage(new TextComponentTranslation("inventory.hotbarSaved", new Object[] {s1, s}), false); + creativesettings.write(); + } + } + + @SideOnly(Side.CLIENT) + public static class ContainerCreative extends Container + { + /** the list of items in this container */ + public NonNullList itemList = NonNullList.create(); + + public ContainerCreative(EntityPlayer player) + { + InventoryPlayer inventoryplayer = player.inventory; + + for (int i = 0; i < 5; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new GuiContainerCreative.LockedSlot(GuiContainerCreative.basicInventory, i * 9 + j, 9 + j * 18, 18 + i * 18)); + } + } + + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(inventoryplayer, k, 9 + k * 18, 112)); + } + + this.scrollTo(0.0F); + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return true; + } + + /** + * Updates the gui slots ItemStack's based on scroll position. + */ + public void scrollTo(float pos) + { + int i = (this.itemList.size() + 9 - 1) / 9 - 5; + int j = (int)((double)(pos * (float)i) + 0.5D); + + if (j < 0) + { + j = 0; + } + + for (int k = 0; k < 5; ++k) + { + for (int l = 0; l < 9; ++l) + { + int i1 = l + (k + j) * 9; + + if (i1 >= 0 && i1 < this.itemList.size()) + { + GuiContainerCreative.basicInventory.setInventorySlotContents(l + k * 9, this.itemList.get(i1)); + } + else + { + GuiContainerCreative.basicInventory.setInventorySlotContents(l + k * 9, ItemStack.EMPTY); + } + } + } + } + + public boolean canScroll() + { + return this.itemList.size() > 45; + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the + * player inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + if (index >= this.inventorySlots.size() - 9 && index < this.inventorySlots.size()) + { + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + slot.putStack(ItemStack.EMPTY); + } + } + + return ItemStack.EMPTY; + } + + /** + * Called to determine if the current slot is valid for the stack merging (double-click) code. The stack + * passed in is null for the initial slot that was double-clicked. + */ + public boolean canMergeSlot(ItemStack stack, Slot slotIn) + { + return slotIn.yPos > 90; + } + + /** + * Returns true if the player can "drag-spilt" items into this slot,. returns true by default. Called to + * check if the slot can be added to a list of Slots to split the held ItemStack across. + */ + public boolean canDragIntoSlot(Slot slotIn) + { + return slotIn.inventory instanceof InventoryPlayer || slotIn.yPos > 90 && slotIn.xPos <= 162; + } + } + + @SideOnly(Side.CLIENT) + class CreativeSlot extends Slot + { + private final Slot slot; + + public CreativeSlot(Slot p_i46313_2_, int index) + { + super(p_i46313_2_.inventory, index, 0, 0); + this.slot = p_i46313_2_; + } + + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + this.slot.onTake(thePlayer, stack); + return stack; + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return this.slot.isItemValid(stack); + } + + /** + * Helper fnct to get the stack in the slot. + */ + public ItemStack getStack() + { + return this.slot.getStack(); + } + + /** + * Returns if this slot contains a stack. + */ + public boolean getHasStack() + { + return this.slot.getHasStack(); + } + + /** + * Helper method to put a stack in the slot. + */ + public void putStack(ItemStack stack) + { + this.slot.putStack(stack); + } + + /** + * Called when the stack in a Slot changes + */ + public void onSlotChanged() + { + this.slot.onSlotChanged(); + } + + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in the + * case of armor slots) + */ + public int getSlotStackLimit() + { + return this.slot.getSlotStackLimit(); + } + + public int getItemStackLimit(ItemStack stack) + { + return this.slot.getItemStackLimit(stack); + } + + @Nullable + public String getSlotTexture() + { + return this.slot.getSlotTexture(); + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int amount) + { + return this.slot.decrStackSize(amount); + } + + /** + * returns true if the slot exists in the given inventory and location + */ + public boolean isHere(IInventory inv, int slotIn) + { + return this.slot.isHere(inv, slotIn); + } + + /** + * Actualy only call when we want to render the white square effect over the slots. Return always True, except + * for the armor slot of the Donkey/Mule (we can't interact with the Undead and Skeleton horses) + */ + public boolean isEnabled() + { + return this.slot.isEnabled(); + } + + /** + * Return whether this slot's stack can be taken from this slot. + */ + public boolean canTakeStack(EntityPlayer playerIn) + { + return this.slot.canTakeStack(playerIn); + } + + /*========================================= FORGE START =====================================*/ + public net.minecraft.util.ResourceLocation getBackgroundLocation() + { + return this.slot.getBackgroundLocation(); + } + + public void setBackgroundLocation(net.minecraft.util.ResourceLocation texture) + { + this.slot.setBackgroundLocation(texture); + } + + public void setBackgroundName(@Nullable String name) + { + this.slot.setBackgroundName(name); + } + + @Nullable + public net.minecraft.client.renderer.texture.TextureAtlasSprite getBackgroundSprite() + { + return this.slot.getBackgroundSprite(); + } + + public int getSlotIndex() + { + return this.slot.getSlotIndex(); + } + + public boolean isSameInventory(Slot other) + { + return this.slot.isSameInventory(other); + } + /*========================================= FORGE END =====================================*/ + } + + @SideOnly(Side.CLIENT) + static class LockedSlot extends Slot + { + public LockedSlot(IInventory p_i47453_1_, int p_i47453_2_, int p_i47453_3_, int p_i47453_4_) + { + super(p_i47453_1_, p_i47453_2_, p_i47453_3_, p_i47453_4_); + } + + /** + * Return whether this slot's stack can be taken from this slot. + */ + public boolean canTakeStack(EntityPlayer playerIn) + { + if (super.canTakeStack(playerIn) && this.getHasStack()) + { + return this.getStack().getSubCompound("CustomCreativeLock") == null; + } + else + { + return !this.getHasStack(); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiCrafting.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiCrafting.java new file mode 100644 index 0000000..d2f5262 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiCrafting.java @@ -0,0 +1,188 @@ +package net.minecraft.client.gui.inventory; + +import java.io.IOException; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiButtonImage; +import net.minecraft.client.gui.recipebook.GuiRecipeBook; +import net.minecraft.client.gui.recipebook.IRecipeShownListener; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.ContainerWorkbench; +import net.minecraft.inventory.Slot; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiCrafting extends GuiContainer implements IRecipeShownListener +{ + private static final ResourceLocation CRAFTING_TABLE_GUI_TEXTURES = new ResourceLocation("textures/gui/container/crafting_table.png"); + private GuiButtonImage recipeButton; + private final GuiRecipeBook recipeBookGui; + private boolean widthTooNarrow; + + public GuiCrafting(InventoryPlayer playerInv, World worldIn) + { + this(playerInv, worldIn, BlockPos.ORIGIN); + } + + public GuiCrafting(InventoryPlayer playerInv, World worldIn, BlockPos blockPosition) + { + super(new ContainerWorkbench(playerInv, worldIn, blockPosition)); + this.recipeBookGui = new GuiRecipeBook(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.widthTooNarrow = this.width < 379; + this.recipeBookGui.func_194303_a(this.width, this.height, this.mc, this.widthTooNarrow, ((ContainerWorkbench)this.inventorySlots).craftMatrix); + this.guiLeft = this.recipeBookGui.updateScreenPosition(this.widthTooNarrow, this.width, this.xSize); + this.recipeButton = new GuiButtonImage(10, this.guiLeft + 5, this.height / 2 - 49, 20, 18, 0, 168, 19, CRAFTING_TABLE_GUI_TEXTURES); + this.buttonList.add(this.recipeButton); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + super.updateScreen(); + this.recipeBookGui.tick(); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + + if (this.recipeBookGui.isVisible() && this.widthTooNarrow) + { + this.drawGuiContainerBackgroundLayer(partialTicks, mouseX, mouseY); + this.recipeBookGui.render(mouseX, mouseY, partialTicks); + } + else + { + this.recipeBookGui.render(mouseX, mouseY, partialTicks); + super.drawScreen(mouseX, mouseY, partialTicks); + this.recipeBookGui.renderGhostRecipe(this.guiLeft, this.guiTop, true, partialTicks); + } + + this.renderHoveredToolTip(mouseX, mouseY); + this.recipeBookGui.renderTooltip(this.guiLeft, this.guiTop, mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(I18n.format("container.crafting"), 28, 6, 4210752); + this.fontRenderer.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(CRAFTING_TABLE_GUI_TEXTURES); + int i = this.guiLeft; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + } + + /** + * Test if the 2D point is in a rectangle (relative to the GUI). Args : rectX, rectY, rectWidth, rectHeight, pointX, + * pointY + */ + protected boolean isPointInRegion(int rectX, int rectY, int rectWidth, int rectHeight, int pointX, int pointY) + { + return (!this.widthTooNarrow || !this.recipeBookGui.isVisible()) && super.isPointInRegion(rectX, rectY, rectWidth, rectHeight, pointX, pointY); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (!this.recipeBookGui.mouseClicked(mouseX, mouseY, mouseButton)) + { + if (!this.widthTooNarrow || !this.recipeBookGui.isVisible()) + { + super.mouseClicked(mouseX, mouseY, mouseButton); + } + } + } + + protected boolean hasClickedOutside(int p_193983_1_, int p_193983_2_, int p_193983_3_, int p_193983_4_) + { + boolean flag = p_193983_1_ < p_193983_3_ || p_193983_2_ < p_193983_4_ || p_193983_1_ >= p_193983_3_ + this.xSize || p_193983_2_ >= p_193983_4_ + this.ySize; + return this.recipeBookGui.hasClickedOutside(p_193983_1_, p_193983_2_, this.guiLeft, this.guiTop, this.xSize, this.ySize) && flag; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 10) + { + this.recipeBookGui.initVisuals(this.widthTooNarrow, ((ContainerWorkbench)this.inventorySlots).craftMatrix); + this.recipeBookGui.toggleVisibility(); + this.guiLeft = this.recipeBookGui.updateScreenPosition(this.widthTooNarrow, this.width, this.xSize); + this.recipeButton.setPosition(this.guiLeft + 5, this.height / 2 - 49); + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (!this.recipeBookGui.keyPressed(typedChar, keyCode)) + { + super.keyTyped(typedChar, keyCode); + } + } + + /** + * Called when the mouse is clicked over a slot or outside the gui. + */ + protected void handleMouseClick(Slot slotIn, int slotId, int mouseButton, ClickType type) + { + super.handleMouseClick(slotIn, slotId, mouseButton, type); + this.recipeBookGui.slotClicked(slotIn); + } + + public void recipesUpdated() + { + this.recipeBookGui.recipesUpdated(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + this.recipeBookGui.removed(); + super.onGuiClosed(); + } + + public GuiRecipeBook func_194310_f() + { + return this.recipeBookGui; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiDispenser.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiDispenser.java new file mode 100644 index 0000000..bc1786a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiDispenser.java @@ -0,0 +1,58 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerDispenser; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiDispenser extends GuiContainer +{ + private static final ResourceLocation DISPENSER_GUI_TEXTURES = new ResourceLocation("textures/gui/container/dispenser.png"); + /** The player inventory bound to this GUI. */ + private final InventoryPlayer playerInventory; + /** The inventory contained within the corresponding Dispenser. */ + public IInventory dispenserInventory; + + public GuiDispenser(InventoryPlayer playerInv, IInventory dispenserInv) + { + super(new ContainerDispenser(playerInv, dispenserInv)); + this.playerInventory = playerInv; + this.dispenserInventory = dispenserInv; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + String s = this.dispenserInventory.getDisplayName().getUnformattedText(); + this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(DISPENSER_GUI_TEXTURES); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.java new file mode 100644 index 0000000..61b919c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditCommandBlockMinecart.java @@ -0,0 +1,218 @@ +package net.minecraft.client.gui.inventory; + +import io.netty.buffer.Unpooled; +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.util.ITabCompleter; +import net.minecraft.util.TabCompleter; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiEditCommandBlockMinecart extends GuiScreen implements ITabCompleter +{ + private GuiTextField commandField; + private GuiTextField previousEdit; + private final CommandBlockBaseLogic commandBlockLogic; + private GuiButton doneButton; + private GuiButton cancelButton; + private GuiButton outputButton; + private boolean trackOutput; + private TabCompleter tabCompleter; + + public GuiEditCommandBlockMinecart(CommandBlockBaseLogic p_i46595_1_) + { + this.commandBlockLogic = p_i46595_1_; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.commandField.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.doneButton = this.addButton(new GuiButton(0, this.width / 2 - 4 - 150, this.height / 4 + 120 + 12, 150, 20, I18n.format("gui.done"))); + this.cancelButton = this.addButton(new GuiButton(1, this.width / 2 + 4, this.height / 4 + 120 + 12, 150, 20, I18n.format("gui.cancel"))); + this.outputButton = this.addButton(new GuiButton(4, this.width / 2 + 150 - 20, 150, 20, 20, "O")); + this.commandField = new GuiTextField(2, this.fontRenderer, this.width / 2 - 150, 50, 300, 20); + this.commandField.setMaxStringLength(32500); + this.commandField.setFocused(true); + this.commandField.setText(this.commandBlockLogic.getCommand()); + this.previousEdit = new GuiTextField(3, this.fontRenderer, this.width / 2 - 150, 150, 276, 20); + this.previousEdit.setMaxStringLength(32500); + this.previousEdit.setEnabled(false); + this.previousEdit.setText("-"); + this.trackOutput = this.commandBlockLogic.shouldTrackOutput(); + this.updateCommandOutput(); + this.doneButton.enabled = !this.commandField.getText().trim().isEmpty(); + this.tabCompleter = new TabCompleter(this.commandField, true) + { + @Nullable + public BlockPos getTargetBlockPos() + { + return GuiEditCommandBlockMinecart.this.commandBlockLogic.getPosition(); + } + }; + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 1) + { + this.commandBlockLogic.setTrackOutput(this.trackOutput); + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == 0) + { + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeByte(this.commandBlockLogic.getCommandBlockType()); + this.commandBlockLogic.fillInInfo(packetbuffer); + packetbuffer.writeString(this.commandField.getText()); + packetbuffer.writeBoolean(this.commandBlockLogic.shouldTrackOutput()); + this.mc.getConnection().sendPacket(new CPacketCustomPayload("MC|AdvCmd", packetbuffer)); + + if (!this.commandBlockLogic.shouldTrackOutput()) + { + this.commandBlockLogic.setLastOutput((ITextComponent)null); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == 4) + { + this.commandBlockLogic.setTrackOutput(!this.commandBlockLogic.shouldTrackOutput()); + this.updateCommandOutput(); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + this.tabCompleter.resetRequested(); + + if (keyCode == 15) + { + this.tabCompleter.complete(); + } + else + { + this.tabCompleter.resetDidComplete(); + } + + this.commandField.textboxKeyTyped(typedChar, keyCode); + this.previousEdit.textboxKeyTyped(typedChar, keyCode); + this.doneButton.enabled = !this.commandField.getText().trim().isEmpty(); + + if (keyCode != 28 && keyCode != 156) + { + if (keyCode == 1) + { + this.actionPerformed(this.cancelButton); + } + } + else + { + this.actionPerformed(this.doneButton); + } + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + this.commandField.mouseClicked(mouseX, mouseY, mouseButton); + this.previousEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("advMode.setCommand"), this.width / 2, 20, 16777215); + this.drawString(this.fontRenderer, I18n.format("advMode.command"), this.width / 2 - 150, 40, 10526880); + this.commandField.drawTextBox(); + int i = 75; + int j = 0; + this.drawString(this.fontRenderer, I18n.format("advMode.nearestPlayer"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.randomPlayer"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.allPlayers"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.allEntities"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + this.drawString(this.fontRenderer, I18n.format("advMode.self"), this.width / 2 - 140, i + j++ * this.fontRenderer.FONT_HEIGHT, 10526880); + + if (!this.previousEdit.getText().isEmpty()) + { + i = i + j * this.fontRenderer.FONT_HEIGHT + 20; + this.drawString(this.fontRenderer, I18n.format("advMode.previousOutput"), this.width / 2 - 150, i, 10526880); + this.previousEdit.drawTextBox(); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } + + private void updateCommandOutput() + { + if (this.commandBlockLogic.shouldTrackOutput()) + { + this.outputButton.displayString = "O"; + + if (this.commandBlockLogic.getLastOutput() != null) + { + this.previousEdit.setText(this.commandBlockLogic.getLastOutput().getUnformattedText()); + } + } + else + { + this.outputButton.displayString = "X"; + this.previousEdit.setText("-"); + } + } + + /** + * Sets the list of tab completions, as long as they were previously requested. + */ + public void setCompletions(String... newCompletions) + { + this.tabCompleter.setCompletions(newCompletions); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditSign.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditSign.java new file mode 100644 index 0000000..5228be3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditSign.java @@ -0,0 +1,179 @@ +package net.minecraft.client.gui.inventory; + +import java.io.IOException; +import net.minecraft.block.Block; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.resources.I18n; +import net.minecraft.init.Blocks; +import net.minecraft.network.play.client.CPacketUpdateSign; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiEditSign extends GuiScreen +{ + /** Reference to the sign object. */ + private final TileEntitySign tileSign; + /** Counts the number of screen updates. */ + private int updateCounter; + /** The index of the line that is being edited. */ + private int editLine; + /** "Done" button for the GUI. */ + private GuiButton doneBtn; + + public GuiEditSign(TileEntitySign teSign) + { + this.tileSign = teSign; + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.doneBtn = this.addButton(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120, I18n.format("gui.done"))); + this.tileSign.setEditable(false); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + NetHandlerPlayClient nethandlerplayclient = this.mc.getConnection(); + + if (nethandlerplayclient != null) + { + nethandlerplayclient.sendPacket(new CPacketUpdateSign(this.tileSign.getPos(), this.tileSign.signText)); + } + + this.tileSign.setEditable(true); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + ++this.updateCounter; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 0) + { + this.tileSign.markDirty(); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (keyCode == 200) + { + this.editLine = this.editLine - 1 & 3; + } + + if (keyCode == 208 || keyCode == 28 || keyCode == 156) + { + this.editLine = this.editLine + 1 & 3; + } + + String s = this.tileSign.signText[this.editLine].getUnformattedText(); + + if (keyCode == 14 && !s.isEmpty()) + { + s = s.substring(0, s.length() - 1); + } + + if (ChatAllowedCharacters.isAllowedCharacter(typedChar) && this.fontRenderer.getStringWidth(s + typedChar) <= 90) + { + s = s + typedChar; + } + + this.tileSign.signText[this.editLine] = new TextComponentString(s); + + if (keyCode == 1) + { + this.actionPerformed(this.doneBtn); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, I18n.format("sign.edit"), this.width / 2, 40, 16777215); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(this.width / 2), 0.0F, 50.0F); + float f = 93.75F; + GlStateManager.scale(-93.75F, -93.75F, -93.75F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + Block block = this.tileSign.getBlockType(); + + if (block == Blocks.STANDING_SIGN) + { + float f1 = (float)(this.tileSign.getBlockMetadata() * 360) / 16.0F; + GlStateManager.rotate(f1, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, -1.0625F, 0.0F); + } + else + { + int i = this.tileSign.getBlockMetadata(); + float f2 = 0.0F; + + if (i == 2) + { + f2 = 180.0F; + } + + if (i == 4) + { + f2 = 90.0F; + } + + if (i == 5) + { + f2 = -90.0F; + } + + GlStateManager.rotate(f2, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, -1.0625F, 0.0F); + } + + if (this.updateCounter / 6 % 2 == 0) + { + this.tileSign.lineBeingEdited = this.editLine; + } + + TileEntityRendererDispatcher.instance.render(this.tileSign, -0.5D, -0.75D, -0.5D, 0.0F); + this.tileSign.lineBeingEdited = -1; + GlStateManager.popMatrix(); + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditStructure.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditStructure.java new file mode 100644 index 0000000..49448a8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiEditStructure.java @@ -0,0 +1,771 @@ +package net.minecraft.client.gui.inventory; + +import com.google.common.collect.Lists; +import io.netty.buffer.Unpooled; +import java.io.IOException; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.List; +import java.util.Locale; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiEditStructure extends GuiScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final int[] LEGAL_KEY_CODES = new int[] {203, 205, 14, 211, 199, 207}; + private final TileEntityStructure tileStructure; + private Mirror mirror = Mirror.NONE; + private Rotation rotation = Rotation.NONE; + private TileEntityStructure.Mode mode = TileEntityStructure.Mode.DATA; + private boolean ignoreEntities; + private boolean showAir; + private boolean showBoundingBox; + private GuiTextField nameEdit; + private GuiTextField posXEdit; + private GuiTextField posYEdit; + private GuiTextField posZEdit; + private GuiTextField sizeXEdit; + private GuiTextField sizeYEdit; + private GuiTextField sizeZEdit; + private GuiTextField integrityEdit; + private GuiTextField seedEdit; + private GuiTextField dataEdit; + private GuiButton doneButton; + private GuiButton cancelButton; + private GuiButton saveButton; + private GuiButton loadButton; + private GuiButton rotateZeroDegreesButton; + private GuiButton rotateNinetyDegreesButton; + private GuiButton rotate180DegreesButton; + private GuiButton rotate270DegressButton; + private GuiButton modeButton; + private GuiButton detectSizeButton; + private GuiButton showEntitiesButton; + private GuiButton mirrorButton; + private GuiButton showAirButton; + private GuiButton showBoundingBoxButton; + private final List tabOrder = Lists.newArrayList(); + private final DecimalFormat decimalFormat = new DecimalFormat("0.0###"); + + public GuiEditStructure(TileEntityStructure p_i47142_1_) + { + this.tileStructure = p_i47142_1_; + this.decimalFormat.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + this.nameEdit.updateCursorCounter(); + this.posXEdit.updateCursorCounter(); + this.posYEdit.updateCursorCounter(); + this.posZEdit.updateCursorCounter(); + this.sizeXEdit.updateCursorCounter(); + this.sizeYEdit.updateCursorCounter(); + this.sizeZEdit.updateCursorCounter(); + this.integrityEdit.updateCursorCounter(); + this.seedEdit.updateCursorCounter(); + this.dataEdit.updateCursorCounter(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.doneButton = this.addButton(new GuiButton(0, this.width / 2 - 4 - 150, 210, 150, 20, I18n.format("gui.done"))); + this.cancelButton = this.addButton(new GuiButton(1, this.width / 2 + 4, 210, 150, 20, I18n.format("gui.cancel"))); + this.saveButton = this.addButton(new GuiButton(9, this.width / 2 + 4 + 100, 185, 50, 20, I18n.format("structure_block.button.save"))); + this.loadButton = this.addButton(new GuiButton(10, this.width / 2 + 4 + 100, 185, 50, 20, I18n.format("structure_block.button.load"))); + this.modeButton = this.addButton(new GuiButton(18, this.width / 2 - 4 - 150, 185, 50, 20, "MODE")); + this.detectSizeButton = this.addButton(new GuiButton(19, this.width / 2 + 4 + 100, 120, 50, 20, I18n.format("structure_block.button.detect_size"))); + this.showEntitiesButton = this.addButton(new GuiButton(20, this.width / 2 + 4 + 100, 160, 50, 20, "ENTITIES")); + this.mirrorButton = this.addButton(new GuiButton(21, this.width / 2 - 20, 185, 40, 20, "MIRROR")); + this.showAirButton = this.addButton(new GuiButton(22, this.width / 2 + 4 + 100, 80, 50, 20, "SHOWAIR")); + this.showBoundingBoxButton = this.addButton(new GuiButton(23, this.width / 2 + 4 + 100, 80, 50, 20, "SHOWBB")); + this.rotateZeroDegreesButton = this.addButton(new GuiButton(11, this.width / 2 - 1 - 40 - 1 - 40 - 20, 185, 40, 20, "0")); + this.rotateNinetyDegreesButton = this.addButton(new GuiButton(12, this.width / 2 - 1 - 40 - 20, 185, 40, 20, "90")); + this.rotate180DegreesButton = this.addButton(new GuiButton(13, this.width / 2 + 1 + 20, 185, 40, 20, "180")); + this.rotate270DegressButton = this.addButton(new GuiButton(14, this.width / 2 + 1 + 40 + 1 + 20, 185, 40, 20, "270")); + this.nameEdit = new GuiTextField(2, this.fontRenderer, this.width / 2 - 152, 40, 300, 20); + this.nameEdit.setMaxStringLength(64); + this.nameEdit.setText(this.tileStructure.getName()); + this.tabOrder.add(this.nameEdit); + BlockPos blockpos = this.tileStructure.getPosition(); + this.posXEdit = new GuiTextField(3, this.fontRenderer, this.width / 2 - 152, 80, 80, 20); + this.posXEdit.setMaxStringLength(15); + this.posXEdit.setText(Integer.toString(blockpos.getX())); + this.tabOrder.add(this.posXEdit); + this.posYEdit = new GuiTextField(4, this.fontRenderer, this.width / 2 - 72, 80, 80, 20); + this.posYEdit.setMaxStringLength(15); + this.posYEdit.setText(Integer.toString(blockpos.getY())); + this.tabOrder.add(this.posYEdit); + this.posZEdit = new GuiTextField(5, this.fontRenderer, this.width / 2 + 8, 80, 80, 20); + this.posZEdit.setMaxStringLength(15); + this.posZEdit.setText(Integer.toString(blockpos.getZ())); + this.tabOrder.add(this.posZEdit); + BlockPos blockpos1 = this.tileStructure.getStructureSize(); + this.sizeXEdit = new GuiTextField(6, this.fontRenderer, this.width / 2 - 152, 120, 80, 20); + this.sizeXEdit.setMaxStringLength(15); + this.sizeXEdit.setText(Integer.toString(blockpos1.getX())); + this.tabOrder.add(this.sizeXEdit); + this.sizeYEdit = new GuiTextField(7, this.fontRenderer, this.width / 2 - 72, 120, 80, 20); + this.sizeYEdit.setMaxStringLength(15); + this.sizeYEdit.setText(Integer.toString(blockpos1.getY())); + this.tabOrder.add(this.sizeYEdit); + this.sizeZEdit = new GuiTextField(8, this.fontRenderer, this.width / 2 + 8, 120, 80, 20); + this.sizeZEdit.setMaxStringLength(15); + this.sizeZEdit.setText(Integer.toString(blockpos1.getZ())); + this.tabOrder.add(this.sizeZEdit); + this.integrityEdit = new GuiTextField(15, this.fontRenderer, this.width / 2 - 152, 120, 80, 20); + this.integrityEdit.setMaxStringLength(15); + this.integrityEdit.setText(this.decimalFormat.format((double)this.tileStructure.getIntegrity())); + this.tabOrder.add(this.integrityEdit); + this.seedEdit = new GuiTextField(16, this.fontRenderer, this.width / 2 - 72, 120, 80, 20); + this.seedEdit.setMaxStringLength(31); + this.seedEdit.setText(Long.toString(this.tileStructure.getSeed())); + this.tabOrder.add(this.seedEdit); + this.dataEdit = new GuiTextField(17, this.fontRenderer, this.width / 2 - 152, 120, 240, 20); + this.dataEdit.setMaxStringLength(128); + this.dataEdit.setText(this.tileStructure.getMetadata()); + this.tabOrder.add(this.dataEdit); + this.mirror = this.tileStructure.getMirror(); + this.updateMirrorButton(); + this.rotation = this.tileStructure.getRotation(); + this.updateDirectionButtons(); + this.mode = this.tileStructure.getMode(); + this.updateMode(); + this.ignoreEntities = this.tileStructure.ignoresEntities(); + this.updateEntitiesButton(); + this.showAir = this.tileStructure.showsAir(); + this.updateToggleAirButton(); + this.showBoundingBox = this.tileStructure.showsBoundingBox(); + this.updateToggleBoundingBox(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + Keyboard.enableRepeatEvents(false); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.enabled) + { + if (button.id == 1) + { + this.tileStructure.setMirror(this.mirror); + this.tileStructure.setRotation(this.rotation); + this.tileStructure.setMode(this.mode); + this.tileStructure.setIgnoresEntities(this.ignoreEntities); + this.tileStructure.setShowAir(this.showAir); + this.tileStructure.setShowBoundingBox(this.showBoundingBox); + this.mc.displayGuiScreen((GuiScreen)null); + } + else if (button.id == 0) + { + if (this.sendToServer(1)) + { + this.mc.displayGuiScreen((GuiScreen)null); + } + } + else if (button.id == 9) + { + if (this.tileStructure.getMode() == TileEntityStructure.Mode.SAVE) + { + this.sendToServer(2); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + else if (button.id == 10) + { + if (this.tileStructure.getMode() == TileEntityStructure.Mode.LOAD) + { + this.sendToServer(3); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + else if (button.id == 11) + { + this.tileStructure.setRotation(Rotation.NONE); + this.updateDirectionButtons(); + } + else if (button.id == 12) + { + this.tileStructure.setRotation(Rotation.CLOCKWISE_90); + this.updateDirectionButtons(); + } + else if (button.id == 13) + { + this.tileStructure.setRotation(Rotation.CLOCKWISE_180); + this.updateDirectionButtons(); + } + else if (button.id == 14) + { + this.tileStructure.setRotation(Rotation.COUNTERCLOCKWISE_90); + this.updateDirectionButtons(); + } + else if (button.id == 18) + { + this.tileStructure.nextMode(); + this.updateMode(); + } + else if (button.id == 19) + { + if (this.tileStructure.getMode() == TileEntityStructure.Mode.SAVE) + { + this.sendToServer(4); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + else if (button.id == 20) + { + this.tileStructure.setIgnoresEntities(!this.tileStructure.ignoresEntities()); + this.updateEntitiesButton(); + } + else if (button.id == 22) + { + this.tileStructure.setShowAir(!this.tileStructure.showsAir()); + this.updateToggleAirButton(); + } + else if (button.id == 23) + { + this.tileStructure.setShowBoundingBox(!this.tileStructure.showsBoundingBox()); + this.updateToggleBoundingBox(); + } + else if (button.id == 21) + { + switch (this.tileStructure.getMirror()) + { + case NONE: + this.tileStructure.setMirror(Mirror.LEFT_RIGHT); + break; + case LEFT_RIGHT: + this.tileStructure.setMirror(Mirror.FRONT_BACK); + break; + case FRONT_BACK: + this.tileStructure.setMirror(Mirror.NONE); + } + + this.updateMirrorButton(); + } + } + } + + private void updateEntitiesButton() + { + boolean flag = !this.tileStructure.ignoresEntities(); + + if (flag) + { + this.showEntitiesButton.displayString = I18n.format("options.on"); + } + else + { + this.showEntitiesButton.displayString = I18n.format("options.off"); + } + } + + private void updateToggleAirButton() + { + boolean flag = this.tileStructure.showsAir(); + + if (flag) + { + this.showAirButton.displayString = I18n.format("options.on"); + } + else + { + this.showAirButton.displayString = I18n.format("options.off"); + } + } + + private void updateToggleBoundingBox() + { + boolean flag = this.tileStructure.showsBoundingBox(); + + if (flag) + { + this.showBoundingBoxButton.displayString = I18n.format("options.on"); + } + else + { + this.showBoundingBoxButton.displayString = I18n.format("options.off"); + } + } + + private void updateMirrorButton() + { + Mirror mirror = this.tileStructure.getMirror(); + + switch (mirror) + { + case NONE: + this.mirrorButton.displayString = "|"; + break; + case LEFT_RIGHT: + this.mirrorButton.displayString = "< >"; + break; + case FRONT_BACK: + this.mirrorButton.displayString = "^ v"; + } + } + + private void updateDirectionButtons() + { + this.rotateZeroDegreesButton.enabled = true; + this.rotateNinetyDegreesButton.enabled = true; + this.rotate180DegreesButton.enabled = true; + this.rotate270DegressButton.enabled = true; + + switch (this.tileStructure.getRotation()) + { + case NONE: + this.rotateZeroDegreesButton.enabled = false; + break; + case CLOCKWISE_180: + this.rotate180DegreesButton.enabled = false; + break; + case COUNTERCLOCKWISE_90: + this.rotate270DegressButton.enabled = false; + break; + case CLOCKWISE_90: + this.rotateNinetyDegreesButton.enabled = false; + } + } + + private void updateMode() + { + this.nameEdit.setFocused(false); + this.posXEdit.setFocused(false); + this.posYEdit.setFocused(false); + this.posZEdit.setFocused(false); + this.sizeXEdit.setFocused(false); + this.sizeYEdit.setFocused(false); + this.sizeZEdit.setFocused(false); + this.integrityEdit.setFocused(false); + this.seedEdit.setFocused(false); + this.dataEdit.setFocused(false); + this.nameEdit.setVisible(false); + this.nameEdit.setFocused(false); + this.posXEdit.setVisible(false); + this.posYEdit.setVisible(false); + this.posZEdit.setVisible(false); + this.sizeXEdit.setVisible(false); + this.sizeYEdit.setVisible(false); + this.sizeZEdit.setVisible(false); + this.integrityEdit.setVisible(false); + this.seedEdit.setVisible(false); + this.dataEdit.setVisible(false); + this.saveButton.visible = false; + this.loadButton.visible = false; + this.detectSizeButton.visible = false; + this.showEntitiesButton.visible = false; + this.mirrorButton.visible = false; + this.rotateZeroDegreesButton.visible = false; + this.rotateNinetyDegreesButton.visible = false; + this.rotate180DegreesButton.visible = false; + this.rotate270DegressButton.visible = false; + this.showAirButton.visible = false; + this.showBoundingBoxButton.visible = false; + + switch (this.tileStructure.getMode()) + { + case SAVE: + this.nameEdit.setVisible(true); + this.nameEdit.setFocused(true); + this.posXEdit.setVisible(true); + this.posYEdit.setVisible(true); + this.posZEdit.setVisible(true); + this.sizeXEdit.setVisible(true); + this.sizeYEdit.setVisible(true); + this.sizeZEdit.setVisible(true); + this.saveButton.visible = true; + this.detectSizeButton.visible = true; + this.showEntitiesButton.visible = true; + this.showAirButton.visible = true; + break; + case LOAD: + this.nameEdit.setVisible(true); + this.nameEdit.setFocused(true); + this.posXEdit.setVisible(true); + this.posYEdit.setVisible(true); + this.posZEdit.setVisible(true); + this.integrityEdit.setVisible(true); + this.seedEdit.setVisible(true); + this.loadButton.visible = true; + this.showEntitiesButton.visible = true; + this.mirrorButton.visible = true; + this.rotateZeroDegreesButton.visible = true; + this.rotateNinetyDegreesButton.visible = true; + this.rotate180DegreesButton.visible = true; + this.rotate270DegressButton.visible = true; + this.showBoundingBoxButton.visible = true; + this.updateDirectionButtons(); + break; + case CORNER: + this.nameEdit.setVisible(true); + this.nameEdit.setFocused(true); + break; + case DATA: + this.dataEdit.setVisible(true); + this.dataEdit.setFocused(true); + } + + this.modeButton.displayString = I18n.format("structure_block.mode." + this.tileStructure.getMode().getName()); + } + + private boolean sendToServer(int p_189820_1_) + { + try + { + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + this.tileStructure.writeCoordinates(packetbuffer); + packetbuffer.writeByte(p_189820_1_); + packetbuffer.writeString(this.tileStructure.getMode().toString()); + packetbuffer.writeString(this.nameEdit.getText()); + packetbuffer.writeInt(this.parseCoordinate(this.posXEdit.getText())); + packetbuffer.writeInt(this.parseCoordinate(this.posYEdit.getText())); + packetbuffer.writeInt(this.parseCoordinate(this.posZEdit.getText())); + packetbuffer.writeInt(this.parseCoordinate(this.sizeXEdit.getText())); + packetbuffer.writeInt(this.parseCoordinate(this.sizeYEdit.getText())); + packetbuffer.writeInt(this.parseCoordinate(this.sizeZEdit.getText())); + packetbuffer.writeString(this.tileStructure.getMirror().toString()); + packetbuffer.writeString(this.tileStructure.getRotation().toString()); + packetbuffer.writeString(this.dataEdit.getText()); + packetbuffer.writeBoolean(this.tileStructure.ignoresEntities()); + packetbuffer.writeBoolean(this.tileStructure.showsAir()); + packetbuffer.writeBoolean(this.tileStructure.showsBoundingBox()); + packetbuffer.writeFloat(this.parseIntegrity(this.integrityEdit.getText())); + packetbuffer.writeVarLong(this.parseSeed(this.seedEdit.getText())); + this.mc.getConnection().sendPacket(new CPacketCustomPayload("MC|Struct", packetbuffer)); + return true; + } + catch (Exception exception) + { + LOGGER.warn("Could not send structure block info", (Throwable)exception); + return false; + } + } + + private long parseSeed(String p_189821_1_) + { + try + { + return Long.valueOf(p_189821_1_).longValue(); + } + catch (NumberFormatException var3) + { + return 0L; + } + } + + private float parseIntegrity(String p_189819_1_) + { + try + { + return Float.valueOf(p_189819_1_).floatValue(); + } + catch (NumberFormatException var3) + { + return 1.0F; + } + } + + private int parseCoordinate(String p_189817_1_) + { + try + { + return Integer.parseInt(p_189817_1_); + } + catch (NumberFormatException var3) + { + return 0; + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (this.nameEdit.getVisible() && isValidCharacterForName(typedChar, keyCode)) + { + this.nameEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.posXEdit.getVisible()) + { + this.posXEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.posYEdit.getVisible()) + { + this.posYEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.posZEdit.getVisible()) + { + this.posZEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.sizeXEdit.getVisible()) + { + this.sizeXEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.sizeYEdit.getVisible()) + { + this.sizeYEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.sizeZEdit.getVisible()) + { + this.sizeZEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.integrityEdit.getVisible()) + { + this.integrityEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.seedEdit.getVisible()) + { + this.seedEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (this.dataEdit.getVisible()) + { + this.dataEdit.textboxKeyTyped(typedChar, keyCode); + } + + if (keyCode == 15) + { + GuiTextField guitextfield = null; + GuiTextField guitextfield1 = null; + + for (GuiTextField guitextfield2 : this.tabOrder) + { + if (guitextfield != null && guitextfield2.getVisible()) + { + guitextfield1 = guitextfield2; + break; + } + + if (guitextfield2.isFocused() && guitextfield2.getVisible()) + { + guitextfield = guitextfield2; + } + } + + if (guitextfield != null && guitextfield1 == null) + { + for (GuiTextField guitextfield3 : this.tabOrder) + { + if (guitextfield3.getVisible() && guitextfield3 != guitextfield) + { + guitextfield1 = guitextfield3; + break; + } + } + } + + if (guitextfield1 != null && guitextfield1 != guitextfield) + { + guitextfield.setFocused(false); + guitextfield1.setFocused(true); + } + } + + if (keyCode != 28 && keyCode != 156) + { + if (keyCode == 1) + { + this.actionPerformed(this.cancelButton); + } + } + else + { + this.actionPerformed(this.doneButton); + } + } + + private static boolean isValidCharacterForName(char p_190301_0_, int p_190301_1_) + { + boolean flag = true; + + for (int i : LEGAL_KEY_CODES) + { + if (i == p_190301_1_) + { + return true; + } + } + + for (char c0 : ChatAllowedCharacters.ILLEGAL_STRUCTURE_CHARACTERS) + { + if (c0 == p_190301_0_) + { + flag = false; + break; + } + } + + return flag; + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + super.mouseClicked(mouseX, mouseY, mouseButton); + + if (this.nameEdit.getVisible()) + { + this.nameEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.posXEdit.getVisible()) + { + this.posXEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.posYEdit.getVisible()) + { + this.posYEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.posZEdit.getVisible()) + { + this.posZEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.sizeXEdit.getVisible()) + { + this.sizeXEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.sizeYEdit.getVisible()) + { + this.sizeYEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.sizeZEdit.getVisible()) + { + this.sizeZEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.integrityEdit.getVisible()) + { + this.integrityEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.seedEdit.getVisible()) + { + this.seedEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + + if (this.dataEdit.getVisible()) + { + this.dataEdit.mouseClicked(mouseX, mouseY, mouseButton); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + TileEntityStructure.Mode tileentitystructure$mode = this.tileStructure.getMode(); + this.drawCenteredString(this.fontRenderer, I18n.format("tile.structureBlock.name"), this.width / 2, 10, 16777215); + + if (tileentitystructure$mode != TileEntityStructure.Mode.DATA) + { + this.drawString(this.fontRenderer, I18n.format("structure_block.structure_name"), this.width / 2 - 153, 30, 10526880); + this.nameEdit.drawTextBox(); + } + + if (tileentitystructure$mode == TileEntityStructure.Mode.LOAD || tileentitystructure$mode == TileEntityStructure.Mode.SAVE) + { + this.drawString(this.fontRenderer, I18n.format("structure_block.position"), this.width / 2 - 153, 70, 10526880); + this.posXEdit.drawTextBox(); + this.posYEdit.drawTextBox(); + this.posZEdit.drawTextBox(); + String s = I18n.format("structure_block.include_entities"); + int i = this.fontRenderer.getStringWidth(s); + this.drawString(this.fontRenderer, s, this.width / 2 + 154 - i, 150, 10526880); + } + + if (tileentitystructure$mode == TileEntityStructure.Mode.SAVE) + { + this.drawString(this.fontRenderer, I18n.format("structure_block.size"), this.width / 2 - 153, 110, 10526880); + this.sizeXEdit.drawTextBox(); + this.sizeYEdit.drawTextBox(); + this.sizeZEdit.drawTextBox(); + String s2 = I18n.format("structure_block.detect_size"); + int k = this.fontRenderer.getStringWidth(s2); + this.drawString(this.fontRenderer, s2, this.width / 2 + 154 - k, 110, 10526880); + String s1 = I18n.format("structure_block.show_air"); + int j = this.fontRenderer.getStringWidth(s1); + this.drawString(this.fontRenderer, s1, this.width / 2 + 154 - j, 70, 10526880); + } + + if (tileentitystructure$mode == TileEntityStructure.Mode.LOAD) + { + this.drawString(this.fontRenderer, I18n.format("structure_block.integrity"), this.width / 2 - 153, 110, 10526880); + this.integrityEdit.drawTextBox(); + this.seedEdit.drawTextBox(); + String s3 = I18n.format("structure_block.show_boundingbox"); + int l = this.fontRenderer.getStringWidth(s3); + this.drawString(this.fontRenderer, s3, this.width / 2 + 154 - l, 70, 10526880); + } + + if (tileentitystructure$mode == TileEntityStructure.Mode.DATA) + { + this.drawString(this.fontRenderer, I18n.format("structure_block.custom_data"), this.width / 2 - 153, 110, 10526880); + this.dataEdit.drawTextBox(); + } + + String s4 = "structure_block.mode_info." + tileentitystructure$mode.getName(); + this.drawString(this.fontRenderer, I18n.format(s4), this.width / 2 - 153, 174, 10526880); + super.drawScreen(mouseX, mouseY, partialTicks); + } + + /** + * Returns true if this GUI should pause the game when it is displayed in single-player + */ + public boolean doesGuiPauseGame() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiFurnace.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiFurnace.java new file mode 100644 index 0000000..463d9c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiFurnace.java @@ -0,0 +1,86 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerFurnace; +import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiFurnace extends GuiContainer +{ + private static final ResourceLocation FURNACE_GUI_TEXTURES = new ResourceLocation("textures/gui/container/furnace.png"); + /** The player inventory bound to this GUI. */ + private final InventoryPlayer playerInventory; + private final IInventory tileFurnace; + + public GuiFurnace(InventoryPlayer playerInv, IInventory furnaceInv) + { + super(new ContainerFurnace(playerInv, furnaceInv)); + this.playerInventory = playerInv; + this.tileFurnace = furnaceInv; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + String s = this.tileFurnace.getDisplayName().getUnformattedText(); + this.fontRenderer.drawString(s, this.xSize / 2 - this.fontRenderer.getStringWidth(s) / 2, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(FURNACE_GUI_TEXTURES); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + + if (TileEntityFurnace.isBurning(this.tileFurnace)) + { + int k = this.getBurnLeftScaled(13); + this.drawTexturedModalRect(i + 56, j + 36 + 12 - k, 176, 12 - k, 14, k + 1); + } + + int l = this.getCookProgressScaled(24); + this.drawTexturedModalRect(i + 79, j + 34, 176, 14, l + 1, 16); + } + + private int getCookProgressScaled(int pixels) + { + int i = this.tileFurnace.getField(2); + int j = this.tileFurnace.getField(3); + return j != 0 && i != 0 ? i * pixels / j : 0; + } + + private int getBurnLeftScaled(int pixels) + { + int i = this.tileFurnace.getField(1); + + if (i == 0) + { + i = 200; + } + + return this.tileFurnace.getField(0) * pixels / i; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiInventory.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiInventory.java new file mode 100644 index 0000000..8c70648 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiInventory.java @@ -0,0 +1,266 @@ +package net.minecraft.client.gui.inventory; + +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiButtonImage; +import net.minecraft.client.gui.recipebook.GuiRecipeBook; +import net.minecraft.client.gui.recipebook.IRecipeShownListener; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.InventoryEffectRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.inventory.Slot; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiInventory extends InventoryEffectRenderer implements IRecipeShownListener +{ + /** The old x position of the mouse pointer */ + private float oldMouseX; + /** The old y position of the mouse pointer */ + private float oldMouseY; + private GuiButtonImage recipeButton; + private final GuiRecipeBook recipeBookGui = new GuiRecipeBook(); + private boolean widthTooNarrow; + private boolean buttonClicked; + + public GuiInventory(EntityPlayer player) + { + super(player.inventoryContainer); + this.allowUserInput = true; + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + if (this.mc.playerController.isInCreativeMode()) + { + this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.player)); + } + + this.recipeBookGui.tick(); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + + if (this.mc.playerController.isInCreativeMode()) + { + this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.player)); + } + else + { + super.initGui(); + } + + this.widthTooNarrow = this.width < 379; + this.recipeBookGui.func_194303_a(this.width, this.height, this.mc, this.widthTooNarrow, ((ContainerPlayer)this.inventorySlots).craftMatrix); + this.guiLeft = this.recipeBookGui.updateScreenPosition(this.widthTooNarrow, this.width, this.xSize); + this.recipeButton = new GuiButtonImage(10, this.guiLeft + 104, this.height / 2 - 22, 20, 18, 178, 0, 19, INVENTORY_BACKGROUND); + this.buttonList.add(this.recipeButton); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(I18n.format("container.crafting"), 97, 8, 4210752); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.hasActivePotionEffects = !this.recipeBookGui.isVisible(); + + if (this.recipeBookGui.isVisible() && this.widthTooNarrow) + { + this.drawGuiContainerBackgroundLayer(partialTicks, mouseX, mouseY); + this.recipeBookGui.render(mouseX, mouseY, partialTicks); + } + else + { + this.recipeBookGui.render(mouseX, mouseY, partialTicks); + super.drawScreen(mouseX, mouseY, partialTicks); + this.recipeBookGui.renderGhostRecipe(this.guiLeft, this.guiTop, false, partialTicks); + } + + this.renderHoveredToolTip(mouseX, mouseY); + this.recipeBookGui.renderTooltip(this.guiLeft, this.guiTop, mouseX, mouseY); + this.oldMouseX = (float)mouseX; + this.oldMouseY = (float)mouseY; + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(INVENTORY_BACKGROUND); + int i = this.guiLeft; + int j = this.guiTop; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + drawEntityOnScreen(i + 51, j + 75, 30, (float)(i + 51) - this.oldMouseX, (float)(j + 75 - 50) - this.oldMouseY, this.mc.player); + } + + /** + * Draws an entity on the screen looking toward the cursor. + */ + public static void drawEntityOnScreen(int posX, int posY, int scale, float mouseX, float mouseY, EntityLivingBase ent) + { + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)posX, (float)posY, 50.0F); + GlStateManager.scale((float)(-scale), (float)scale, (float)scale); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f = ent.renderYawOffset; + float f1 = ent.rotationYaw; + float f2 = ent.rotationPitch; + float f3 = ent.prevRotationYawHead; + float f4 = ent.rotationYawHead; + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); + ent.renderYawOffset = (float)Math.atan((double)(mouseX / 40.0F)) * 20.0F; + ent.rotationYaw = (float)Math.atan((double)(mouseX / 40.0F)) * 40.0F; + ent.rotationPitch = -((float)Math.atan((double)(mouseY / 40.0F))) * 20.0F; + ent.rotationYawHead = ent.rotationYaw; + ent.prevRotationYawHead = ent.rotationYaw; + GlStateManager.translate(0.0F, 0.0F, 0.0F); + RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); + rendermanager.setPlayerViewY(180.0F); + rendermanager.setRenderShadow(false); + rendermanager.renderEntity(ent, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F, false); + rendermanager.setRenderShadow(true); + ent.renderYawOffset = f; + ent.rotationYaw = f1; + ent.rotationPitch = f2; + ent.prevRotationYawHead = f3; + ent.rotationYawHead = f4; + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + /** + * Test if the 2D point is in a rectangle (relative to the GUI). Args : rectX, rectY, rectWidth, rectHeight, pointX, + * pointY + */ + protected boolean isPointInRegion(int rectX, int rectY, int rectWidth, int rectHeight, int pointX, int pointY) + { + return (!this.widthTooNarrow || !this.recipeBookGui.isVisible()) && super.isPointInRegion(rectX, rectY, rectWidth, rectHeight, pointX, pointY); + } + + /** + * Called when the mouse is clicked. Args : mouseX, mouseY, clickedButton + */ + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException + { + if (!this.recipeBookGui.mouseClicked(mouseX, mouseY, mouseButton)) + { + if (!this.widthTooNarrow || !this.recipeBookGui.isVisible()) + { + super.mouseClicked(mouseX, mouseY, mouseButton); + } + } + } + + /** + * Called when a mouse button is released. + */ + protected void mouseReleased(int mouseX, int mouseY, int state) + { + if (this.buttonClicked) + { + this.buttonClicked = false; + } + else + { + super.mouseReleased(mouseX, mouseY, state); + } + } + + protected boolean hasClickedOutside(int p_193983_1_, int p_193983_2_, int p_193983_3_, int p_193983_4_) + { + boolean flag = p_193983_1_ < p_193983_3_ || p_193983_2_ < p_193983_4_ || p_193983_1_ >= p_193983_3_ + this.xSize || p_193983_2_ >= p_193983_4_ + this.ySize; + return this.recipeBookGui.hasClickedOutside(p_193983_1_, p_193983_2_, this.guiLeft, this.guiTop, this.xSize, this.ySize) && flag; + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 10) + { + this.recipeBookGui.initVisuals(this.widthTooNarrow, ((ContainerPlayer)this.inventorySlots).craftMatrix); + this.recipeBookGui.toggleVisibility(); + this.guiLeft = this.recipeBookGui.updateScreenPosition(this.widthTooNarrow, this.width, this.xSize); + this.recipeButton.setPosition(this.guiLeft + 104, this.height / 2 - 22); + this.buttonClicked = true; + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + if (!this.recipeBookGui.keyPressed(typedChar, keyCode)) + { + super.keyTyped(typedChar, keyCode); + } + } + + /** + * Called when the mouse is clicked over a slot or outside the gui. + */ + protected void handleMouseClick(Slot slotIn, int slotId, int mouseButton, ClickType type) + { + super.handleMouseClick(slotIn, slotId, mouseButton, type); + this.recipeBookGui.slotClicked(slotIn); + } + + public void recipesUpdated() + { + this.recipeBookGui.recipesUpdated(); + } + + /** + * Called when the screen is unloaded. Used to disable keyboard repeat events + */ + public void onGuiClosed() + { + this.recipeBookGui.removed(); + super.onGuiClosed(); + } + + public GuiRecipeBook func_194310_f() + { + return this.recipeBookGui; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java new file mode 100644 index 0000000..e35d3e1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiScreenHorseInventory.java @@ -0,0 +1,99 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.passive.AbstractChestHorse; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.inventory.ContainerHorseInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiScreenHorseInventory extends GuiContainer +{ + private static final ResourceLocation HORSE_GUI_TEXTURES = new ResourceLocation("textures/gui/container/horse.png"); + /** The player inventory bound to this GUI. */ + private final IInventory playerInventory; + /** The horse inventory bound to this GUI. */ + private final IInventory horseInventory; + /** The EntityHorse whose inventory is currently being accessed. */ + private final AbstractHorse horseEntity; + /** The mouse x-position recorded during the last rendered frame. */ + private float mousePosx; + /** The mouse y-position recorded during the last renderered frame. */ + private float mousePosY; + + public GuiScreenHorseInventory(IInventory playerInv, IInventory horseInv, AbstractHorse horse) + { + super(new ContainerHorseInventory(playerInv, horseInv, horse, Minecraft.getMinecraft().player)); + this.playerInventory = playerInv; + this.horseInventory = horseInv; + this.horseEntity = horse; + this.allowUserInput = false; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.horseInventory.getDisplayName().getUnformattedText(), 8, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(HORSE_GUI_TEXTURES); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + + if (this.horseEntity instanceof AbstractChestHorse) + { + AbstractChestHorse abstractchesthorse = (AbstractChestHorse)this.horseEntity; + + if (abstractchesthorse.hasChest()) + { + this.drawTexturedModalRect(i + 79, j + 17, 0, this.ySize, abstractchesthorse.getInventoryColumns() * 18, 54); + } + } + + if (this.horseEntity.canBeSaddled()) + { + this.drawTexturedModalRect(i + 7, j + 35 - 18, 18, this.ySize + 54, 18, 18); + } + + if (this.horseEntity.wearsArmor()) + { + if (this.horseEntity instanceof EntityLlama) + { + this.drawTexturedModalRect(i + 7, j + 35, 36, this.ySize + 54, 18, 18); + } + else + { + this.drawTexturedModalRect(i + 7, j + 35, 0, this.ySize + 54, 18, 18); + } + } + + GuiInventory.drawEntityOnScreen(i + 51, j + 60, 17, (float)(i + 51) - this.mousePosx, (float)(j + 75 - 50) - this.mousePosY, this.horseEntity); + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + this.mousePosx = (float)mouseX; + this.mousePosY = (float)mouseY; + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiShulkerBox.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiShulkerBox.java new file mode 100644 index 0000000..d349ccb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/GuiShulkerBox.java @@ -0,0 +1,57 @@ +package net.minecraft.client.gui.inventory; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ContainerShulkerBox; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiShulkerBox extends GuiContainer +{ + private static final ResourceLocation GUI_TEXTURE = new ResourceLocation("textures/gui/container/shulker_box.png"); + private final IInventory inventory; + private final InventoryPlayer playerInventory; + + public GuiShulkerBox(InventoryPlayer p_i47233_1_, IInventory p_i47233_2_) + { + super(new ContainerShulkerBox(p_i47233_1_, p_i47233_2_, Minecraft.getMinecraft().player)); + this.playerInventory = p_i47233_1_; + this.inventory = p_i47233_2_; + ++this.ySize; + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + this.fontRenderer.drawString(this.inventory.getDisplayName().getUnformattedText(), 8, 6, 4210752); + this.fontRenderer.drawString(this.playerInventory.getDisplayName().getUnformattedText(), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draws the background layer of this container (behind the items). + */ + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(GUI_TEXTURE); + int i = (this.width - this.xSize) / 2; + int j = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(i, j, 0, 0, this.xSize, this.ySize); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/package-info.java new file mode 100644 index 0000000..03ee200 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/inventory/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.inventory; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/package-info.java new file mode 100644 index 0000000..f8fd76c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GhostRecipe.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GhostRecipe.java new file mode 100644 index 0000000..39e7594 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GhostRecipe.java @@ -0,0 +1,133 @@ +package net.minecraft.client.gui.recipebook; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GhostRecipe +{ + private IRecipe recipe; + private final List ingredients = Lists.newArrayList(); + private float time; + + public void clear() + { + this.recipe = null; + this.ingredients.clear(); + this.time = 0.0F; + } + + public void addIngredient(Ingredient p_194187_1_, int p_194187_2_, int p_194187_3_) + { + this.ingredients.add(new GhostRecipe.GhostIngredient(p_194187_1_, p_194187_2_, p_194187_3_)); + } + + public GhostRecipe.GhostIngredient get(int p_192681_1_) + { + return this.ingredients.get(p_192681_1_); + } + + public int size() + { + return this.ingredients.size(); + } + + @Nullable + public IRecipe getRecipe() + { + return this.recipe; + } + + public void setRecipe(IRecipe p_192685_1_) + { + this.recipe = p_192685_1_; + } + + public void render(Minecraft p_194188_1_, int p_194188_2_, int p_194188_3_, boolean p_194188_4_, float p_194188_5_) + { + if (!GuiScreen.isCtrlKeyDown()) + { + this.time += p_194188_5_; + } + + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.disableLighting(); + + for (int i = 0; i < this.ingredients.size(); ++i) + { + GhostRecipe.GhostIngredient ghostrecipe$ghostingredient = this.ingredients.get(i); + int j = ghostrecipe$ghostingredient.getX() + p_194188_2_; + int k = ghostrecipe$ghostingredient.getY() + p_194188_3_; + + if (i == 0 && p_194188_4_) + { + Gui.drawRect(j - 4, k - 4, j + 20, k + 20, 822018048); + } + else + { + Gui.drawRect(j, k, j + 16, k + 16, 822018048); + } + + GlStateManager.disableLighting(); + ItemStack itemstack = ghostrecipe$ghostingredient.getItem(); + RenderItem renderitem = p_194188_1_.getRenderItem(); + renderitem.renderItemAndEffectIntoGUI(p_194188_1_.player, itemstack, j, k); + GlStateManager.depthFunc(516); + Gui.drawRect(j, k, j + 16, k + 16, 822083583); + GlStateManager.depthFunc(515); + + if (i == 0) + { + renderitem.renderItemOverlays(p_194188_1_.fontRenderer, itemstack, j, k); + } + + GlStateManager.enableLighting(); + } + + RenderHelper.disableStandardItemLighting(); + } + + @SideOnly(Side.CLIENT) + public class GhostIngredient + { + private final Ingredient ingredient; + private final int x; + private final int y; + + public GhostIngredient(Ingredient p_i47604_2_, int p_i47604_3_, int p_i47604_4_) + { + this.ingredient = p_i47604_2_; + this.x = p_i47604_3_; + this.y = p_i47604_4_; + } + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + + public ItemStack getItem() + { + ItemStack[] aitemstack = this.ingredient.getMatchingStacks(); + return aitemstack[MathHelper.floor(GhostRecipe.this.time / 30.0F) % aitemstack.length]; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiButtonRecipe.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiButtonRecipe.java new file mode 100644 index 0000000..a202594 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiButtonRecipe.java @@ -0,0 +1,167 @@ +package net.minecraft.client.gui.recipebook; + +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.stats.RecipeBook; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButtonRecipe extends GuiButton +{ + private static final ResourceLocation RECIPE_BOOK = new ResourceLocation("textures/gui/recipe_book.png"); + private RecipeBook book; + private RecipeList list; + private float time; + private float animationTime; + private int currentIndex; + + public GuiButtonRecipe() + { + super(0, 0, 0, 25, 25, ""); + } + + public void init(RecipeList p_193928_1_, RecipeBookPage p_193928_2_, RecipeBook p_193928_3_) + { + this.list = p_193928_1_; + this.book = p_193928_3_; + List list = p_193928_1_.getRecipes(p_193928_3_.isFilteringCraftable()); + + for (IRecipe irecipe : list) + { + if (p_193928_3_.isNew(irecipe)) + { + p_193928_2_.recipesShown(list); + this.animationTime = 15.0F; + break; + } + } + } + + public RecipeList getList() + { + return this.list; + } + + public void setPosition(int p_191770_1_, int p_191770_2_) + { + this.x = p_191770_1_; + this.y = p_191770_2_; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + if (!GuiScreen.isCtrlKeyDown()) + { + this.time += partialTicks; + } + + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + RenderHelper.enableGUIStandardItemLighting(); + mc.getTextureManager().bindTexture(RECIPE_BOOK); + GlStateManager.disableLighting(); + int i = 29; + + if (!this.list.containsCraftableRecipes()) + { + i += 25; + } + + int j = 206; + + if (this.list.getRecipes(this.book.isFilteringCraftable()).size() > 1) + { + j += 25; + } + + boolean flag = this.animationTime > 0.0F; + + if (flag) + { + float f = 1.0F + 0.1F * (float)Math.sin((double)(this.animationTime / 15.0F * (float)Math.PI)); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(this.x + 8), (float)(this.y + 12), 0.0F); + GlStateManager.scale(f, f, 1.0F); + GlStateManager.translate((float)(-(this.x + 8)), (float)(-(this.y + 12)), 0.0F); + this.animationTime -= partialTicks; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, this.width, this.height); + List list = this.getOrderedRecipes(); + this.currentIndex = MathHelper.floor(this.time / 30.0F) % list.size(); + ItemStack itemstack = ((IRecipe)list.get(this.currentIndex)).getRecipeOutput(); + int k = 4; + + if (this.list.hasSingleResultItem() && this.getOrderedRecipes().size() > 1) + { + mc.getRenderItem().renderItemAndEffectIntoGUI(itemstack, this.x + k + 1, this.y + k + 1); + --k; + } + + mc.getRenderItem().renderItemAndEffectIntoGUI(itemstack, this.x + k, this.y + k); + + if (flag) + { + GlStateManager.popMatrix(); + } + + GlStateManager.enableLighting(); + RenderHelper.disableStandardItemLighting(); + } + } + + private List getOrderedRecipes() + { + List list = this.list.getDisplayRecipes(true); + + if (!this.book.isFilteringCraftable()) + { + list.addAll(this.list.getDisplayRecipes(false)); + } + + return list; + } + + public boolean isOnlyOption() + { + return this.getOrderedRecipes().size() == 1; + } + + public IRecipe getRecipe() + { + List list = this.getOrderedRecipes(); + return list.get(this.currentIndex); + } + + public List getToolTipText(GuiScreen p_191772_1_) + { + ItemStack itemstack = ((IRecipe)this.getOrderedRecipes().get(this.currentIndex)).getRecipeOutput(); + List list = p_191772_1_.getItemToolTip(itemstack); + + if (this.list.getRecipes(this.book.isFilteringCraftable()).size() > 1) + { + list.add(I18n.format("gui.recipebook.moreRecipes")); + } + + return list; + } + + public int getButtonWidth() + { + return 25; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.java new file mode 100644 index 0000000..5bbaf45 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiButtonRecipeTab.java @@ -0,0 +1,157 @@ +package net.minecraft.client.gui.recipebook; + +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButtonToggle; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.util.RecipeBookClient; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.stats.RecipeBook; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiButtonRecipeTab extends GuiButtonToggle +{ + private final CreativeTabs category; + private float animationTime; + + public GuiButtonRecipeTab(int p_i47588_1_, CreativeTabs p_i47588_2_) + { + super(p_i47588_1_, 0, 0, 35, 27, false); + this.category = p_i47588_2_; + this.initTextureValues(153, 2, 35, 0, GuiRecipeBook.RECIPE_BOOK); + } + + public void startAnimation(Minecraft p_193918_1_) + { + RecipeBook recipebook = p_193918_1_.player.getRecipeBook(); + label21: + + for (RecipeList recipelist : RecipeBookClient.RECIPES_BY_TAB.get(this.category)) + { + Iterator iterator = recipelist.getRecipes(recipebook.isFilteringCraftable()).iterator(); + + while (true) + { + if (!iterator.hasNext()) + { + continue label21; + } + + IRecipe irecipe = (IRecipe)iterator.next(); + + if (recipebook.isNew(irecipe)) + { + break; + } + } + + this.animationTime = 15.0F; + return; + } + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + if (this.visible) + { + if (this.animationTime > 0.0F) + { + float f = 1.0F + 0.1F * (float)Math.sin((double)(this.animationTime / 15.0F * (float)Math.PI)); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(this.x + 8), (float)(this.y + 12), 0.0F); + GlStateManager.scale(1.0F, f, 1.0F); + GlStateManager.translate((float)(-(this.x + 8)), (float)(-(this.y + 12)), 0.0F); + } + + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + mc.getTextureManager().bindTexture(this.resourceLocation); + GlStateManager.disableDepth(); + int k = this.xTexStart; + int i = this.yTexStart; + + if (this.stateTriggered) + { + k += this.xDiffTex; + } + + if (this.hovered) + { + i += this.yDiffTex; + } + + int j = this.x; + + if (this.stateTriggered) + { + j -= 2; + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(j, this.y, k, i, this.width, this.height); + GlStateManager.enableDepth(); + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.disableLighting(); + this.renderIcon(mc.getRenderItem()); + GlStateManager.enableLighting(); + RenderHelper.disableStandardItemLighting(); + + if (this.animationTime > 0.0F) + { + GlStateManager.popMatrix(); + this.animationTime -= partialTicks; + } + } + } + + private void renderIcon(RenderItem p_193920_1_) + { + ItemStack itemstack = this.category.getIconItemStack(); + + if (this.category == CreativeTabs.TOOLS) + { + p_193920_1_.renderItemAndEffectIntoGUI(itemstack, this.x + 3, this.y + 5); + p_193920_1_.renderItemAndEffectIntoGUI(CreativeTabs.COMBAT.getIconItemStack(), this.x + 14, this.y + 5); + } + else if (this.category == CreativeTabs.MISC) + { + p_193920_1_.renderItemAndEffectIntoGUI(itemstack, this.x + 3, this.y + 5); + p_193920_1_.renderItemAndEffectIntoGUI(CreativeTabs.FOOD.getIconItemStack(), this.x + 14, this.y + 5); + } + else + { + p_193920_1_.renderItemAndEffectIntoGUI(itemstack, this.x + 9, this.y + 5); + } + } + + public CreativeTabs getCategory() + { + return this.category; + } + + public boolean updateVisibility() + { + List list = (List)RecipeBookClient.RECIPES_BY_TAB.get(this.category); + this.visible = false; + + for (RecipeList recipelist : list) + { + if (recipelist.isNotEmpty() && recipelist.containsValidRecipes()) + { + this.visible = true; + break; + } + } + + return this.visible; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiRecipeBook.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiRecipeBook.java new file mode 100644 index 0000000..677a12f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiRecipeBook.java @@ -0,0 +1,532 @@ +package net.minecraft.client.gui.recipebook; + +import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet; +import it.unimi.dsi.fastutil.objects.ObjectSet; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.function.Consumer; +import java.util.function.Predicate; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButtonToggle; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.resources.Language; +import net.minecraft.client.resources.LanguageManager; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.RecipeBookClient; +import net.minecraft.client.util.RecipeItemHelper; +import net.minecraft.client.util.SearchTreeManager; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.network.play.client.CPacketRecipeInfo; +import net.minecraft.stats.RecipeBook; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class GuiRecipeBook extends Gui implements IRecipeUpdateListener +{ + protected static final ResourceLocation RECIPE_BOOK = new ResourceLocation("textures/gui/recipe_book.png"); + private int xOffset; + private int width; + private int height; + private final GhostRecipe ghostRecipe = new GhostRecipe(); + private final List recipeTabs = Lists.newArrayList(new GuiButtonRecipeTab(0, CreativeTabs.SEARCH), new GuiButtonRecipeTab(0, CreativeTabs.TOOLS), new GuiButtonRecipeTab(0, CreativeTabs.BUILDING_BLOCKS), new GuiButtonRecipeTab(0, CreativeTabs.MISC), new GuiButtonRecipeTab(0, CreativeTabs.REDSTONE)); + private GuiButtonRecipeTab currentTab; + /** This button toggles between showing all recipes and showing only craftable recipes */ + private GuiButtonToggle toggleRecipesBtn; + private InventoryCrafting craftingSlots; + private Minecraft mc; + private GuiTextField searchBar; + private String lastSearch = ""; + private RecipeBook recipeBook; + private final RecipeBookPage recipeBookPage = new RecipeBookPage(); + private RecipeItemHelper stackedContents = new RecipeItemHelper(); + private int timesInventoryChanged; + + public void func_194303_a(int p_194303_1_, int p_194303_2_, Minecraft p_194303_3_, boolean p_194303_4_, InventoryCrafting p_194303_5_) + { + this.mc = p_194303_3_; + this.width = p_194303_1_; + this.height = p_194303_2_; + this.craftingSlots = p_194303_5_; + this.recipeBook = p_194303_3_.player.getRecipeBook(); + this.timesInventoryChanged = p_194303_3_.player.inventory.getTimesChanged(); + this.currentTab = this.recipeTabs.get(0); + this.currentTab.setStateTriggered(true); + + if (this.isVisible()) + { + this.initVisuals(p_194303_4_, p_194303_5_); + } + + Keyboard.enableRepeatEvents(true); + } + + public void initVisuals(boolean p_193014_1_, InventoryCrafting p_193014_2_) + { + this.xOffset = p_193014_1_ ? 0 : 86; + int i = (this.width - 147) / 2 - this.xOffset; + int j = (this.height - 166) / 2; + this.stackedContents.clear(); + this.mc.player.inventory.fillStackedContents(this.stackedContents, false); + p_193014_2_.fillStackedContents(this.stackedContents); + this.searchBar = new GuiTextField(0, this.mc.fontRenderer, i + 25, j + 14, 80, this.mc.fontRenderer.FONT_HEIGHT + 5); + this.searchBar.setMaxStringLength(50); + this.searchBar.setEnableBackgroundDrawing(false); + this.searchBar.setVisible(true); + this.searchBar.setTextColor(16777215); + this.recipeBookPage.init(this.mc, i, j); + this.recipeBookPage.addListener(this); + this.toggleRecipesBtn = new GuiButtonToggle(0, i + 110, j + 12, 26, 16, this.recipeBook.isFilteringCraftable()); + this.toggleRecipesBtn.initTextureValues(152, 41, 28, 18, RECIPE_BOOK); + this.updateCollections(false); + this.updateTabs(); + } + + public void removed() + { + Keyboard.enableRepeatEvents(false); + } + + public int updateScreenPosition(boolean p_193011_1_, int p_193011_2_, int p_193011_3_) + { + int i; + + if (this.isVisible() && !p_193011_1_) + { + i = 177 + (p_193011_2_ - p_193011_3_ - 200) / 2; + } + else + { + i = (p_193011_2_ - p_193011_3_) / 2; + } + + return i; + } + + public void toggleVisibility() + { + this.setVisible(!this.isVisible()); + } + + public boolean isVisible() + { + return this.recipeBook.isGuiOpen(); + } + + private void setVisible(boolean p_193006_1_) + { + this.recipeBook.setGuiOpen(p_193006_1_); + + if (!p_193006_1_) + { + this.recipeBookPage.setInvisible(); + } + + this.sendUpdateSettings(); + } + + public void slotClicked(@Nullable Slot slotIn) + { + if (slotIn != null && slotIn.slotNumber <= 9) + { + this.ghostRecipe.clear(); + + if (this.isVisible()) + { + this.updateStackedContents(); + } + } + } + + private void updateCollections(boolean p_193003_1_) + { + List list = (List)RecipeBookClient.RECIPES_BY_TAB.get(this.currentTab.getCategory()); + list.forEach((p_193944_1_) -> + { + p_193944_1_.canCraft(this.stackedContents, this.craftingSlots.getWidth(), this.craftingSlots.getHeight(), this.recipeBook); + }); + List list1 = Lists.newArrayList(list); + list1.removeIf((p_193952_0_) -> + { + return !p_193952_0_.isNotEmpty(); + }); + list1.removeIf((p_193953_0_) -> + { + return !p_193953_0_.containsValidRecipes(); + }); + String s = this.searchBar.getText(); + + if (!s.isEmpty()) + { + ObjectSet objectset = new ObjectLinkedOpenHashSet(this.mc.getSearchTree(SearchTreeManager.RECIPES).search(s.toLowerCase(Locale.ROOT))); + list1.removeIf((p_193947_1_) -> + { + return !objectset.contains(p_193947_1_); + }); + } + + if (this.recipeBook.isFilteringCraftable()) + { + list1.removeIf((p_193958_0_) -> + { + return !p_193958_0_.containsCraftableRecipes(); + }); + } + + this.recipeBookPage.updateLists(list1, p_193003_1_); + } + + private void updateTabs() + { + int i = (this.width - 147) / 2 - this.xOffset - 30; + int j = (this.height - 166) / 2 + 3; + int k = 27; + int l = 0; + + for (GuiButtonRecipeTab guibuttonrecipetab : this.recipeTabs) + { + CreativeTabs creativetabs = guibuttonrecipetab.getCategory(); + + if (creativetabs == CreativeTabs.SEARCH) + { + guibuttonrecipetab.visible = true; + guibuttonrecipetab.setPosition(i, j + 27 * l++); + } + else if (guibuttonrecipetab.updateVisibility()) + { + guibuttonrecipetab.setPosition(i, j + 27 * l++); + guibuttonrecipetab.startAnimation(this.mc); + } + } + } + + public void tick() + { + if (this.isVisible()) + { + if (this.timesInventoryChanged != this.mc.player.inventory.getTimesChanged()) + { + this.updateStackedContents(); + this.timesInventoryChanged = this.mc.player.inventory.getTimesChanged(); + } + } + } + + private void updateStackedContents() + { + this.stackedContents.clear(); + this.mc.player.inventory.fillStackedContents(this.stackedContents, false); + this.craftingSlots.fillStackedContents(this.stackedContents); + this.updateCollections(false); + } + + public void render(int mouseX, int mouseY, float partialTicks) + { + if (this.isVisible()) + { + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.disableLighting(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 100.0F); + this.mc.getTextureManager().bindTexture(RECIPE_BOOK); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int i = (this.width - 147) / 2 - this.xOffset; + int j = (this.height - 166) / 2; + this.drawTexturedModalRect(i, j, 1, 1, 147, 166); + this.searchBar.drawTextBox(); + RenderHelper.disableStandardItemLighting(); + + for (GuiButtonRecipeTab guibuttonrecipetab : this.recipeTabs) + { + guibuttonrecipetab.drawButton(this.mc, mouseX, mouseY, partialTicks); + } + + this.toggleRecipesBtn.drawButton(this.mc, mouseX, mouseY, partialTicks); + this.recipeBookPage.render(i, j, mouseX, mouseY, partialTicks); + GlStateManager.popMatrix(); + } + } + + public void renderTooltip(int p_191876_1_, int p_191876_2_, int p_191876_3_, int p_191876_4_) + { + if (this.isVisible()) + { + this.recipeBookPage.renderTooltip(p_191876_3_, p_191876_4_); + + if (this.toggleRecipesBtn.isMouseOver()) + { + String s1 = I18n.format(this.toggleRecipesBtn.isStateTriggered() ? "gui.recipebook.toggleRecipes.craftable" : "gui.recipebook.toggleRecipes.all"); + + if (this.mc.currentScreen != null) + { + this.mc.currentScreen.drawHoveringText(s1, p_191876_3_, p_191876_4_); + } + } + + this.renderGhostRecipeTooltip(p_191876_1_, p_191876_2_, p_191876_3_, p_191876_4_); + } + } + + private void renderGhostRecipeTooltip(int p_193015_1_, int p_193015_2_, int p_193015_3_, int p_193015_4_) + { + ItemStack itemstack = null; + + for (int i = 0; i < this.ghostRecipe.size(); ++i) + { + GhostRecipe.GhostIngredient ghostrecipe$ghostingredient = this.ghostRecipe.get(i); + int j = ghostrecipe$ghostingredient.getX() + p_193015_1_; + int k = ghostrecipe$ghostingredient.getY() + p_193015_2_; + + if (p_193015_3_ >= j && p_193015_4_ >= k && p_193015_3_ < j + 16 && p_193015_4_ < k + 16) + { + itemstack = ghostrecipe$ghostingredient.getItem(); + } + } + + if (itemstack != null && this.mc.currentScreen != null) + { + this.mc.currentScreen.drawHoveringText(this.mc.currentScreen.getItemToolTip(itemstack), p_193015_3_, p_193015_4_); + } + } + + public void renderGhostRecipe(int p_191864_1_, int p_191864_2_, boolean p_191864_3_, float p_191864_4_) + { + this.ghostRecipe.render(this.mc, p_191864_1_, p_191864_2_, p_191864_3_, p_191864_4_); + } + + public boolean mouseClicked(int p_191862_1_, int p_191862_2_, int p_191862_3_) + { + if (this.isVisible() && !this.mc.player.isSpectator()) + { + if (this.recipeBookPage.mouseClicked(p_191862_1_, p_191862_2_, p_191862_3_, (this.width - 147) / 2 - this.xOffset, (this.height - 166) / 2, 147, 166)) + { + IRecipe irecipe = this.recipeBookPage.getLastClickedRecipe(); + RecipeList recipelist = this.recipeBookPage.getLastClickedRecipeList(); + + if (irecipe != null && recipelist != null) + { + if (!recipelist.isCraftable(irecipe) && this.ghostRecipe.getRecipe() == irecipe) + { + return false; + } + + this.ghostRecipe.clear(); + this.mc.playerController.func_194338_a(this.mc.player.openContainer.windowId, irecipe, GuiScreen.isShiftKeyDown(), this.mc.player); + + if (!this.isOffsetNextToMainGUI() && p_191862_3_ == 0) + { + this.setVisible(false); + } + } + + return true; + } + else if (p_191862_3_ != 0) + { + return false; + } + else if (this.searchBar.mouseClicked(p_191862_1_, p_191862_2_, p_191862_3_)) + { + return true; + } + else if (this.toggleRecipesBtn.mousePressed(this.mc, p_191862_1_, p_191862_2_)) + { + boolean flag = !this.recipeBook.isFilteringCraftable(); + this.recipeBook.setFilteringCraftable(flag); + this.toggleRecipesBtn.setStateTriggered(flag); + this.toggleRecipesBtn.playPressSound(this.mc.getSoundHandler()); + this.sendUpdateSettings(); + this.updateCollections(false); + return true; + } + else + { + for (GuiButtonRecipeTab guibuttonrecipetab : this.recipeTabs) + { + if (guibuttonrecipetab.mousePressed(this.mc, p_191862_1_, p_191862_2_)) + { + if (this.currentTab != guibuttonrecipetab) + { + guibuttonrecipetab.playPressSound(this.mc.getSoundHandler()); + this.currentTab.setStateTriggered(false); + this.currentTab = guibuttonrecipetab; + this.currentTab.setStateTriggered(true); + this.updateCollections(true); + } + + return true; + } + } + + return false; + } + } + else + { + return false; + } + } + + public boolean hasClickedOutside(int p_193955_1_, int p_193955_2_, int p_193955_3_, int p_193955_4_, int p_193955_5_, int p_193955_6_) + { + if (!this.isVisible()) + { + return true; + } + else + { + boolean flag = p_193955_1_ < p_193955_3_ || p_193955_2_ < p_193955_4_ || p_193955_1_ >= p_193955_3_ + p_193955_5_ || p_193955_2_ >= p_193955_4_ + p_193955_6_; + boolean flag1 = p_193955_3_ - 147 < p_193955_1_ && p_193955_1_ < p_193955_3_ && p_193955_4_ < p_193955_2_ && p_193955_2_ < p_193955_4_ + p_193955_6_; + return flag && !flag1 && !this.currentTab.mousePressed(this.mc, p_193955_1_, p_193955_2_); + } + } + + public boolean keyPressed(char typedChar, int keycode) + { + if (this.isVisible() && !this.mc.player.isSpectator()) + { + if (keycode == 1 && !this.isOffsetNextToMainGUI()) + { + this.setVisible(false); + return true; + } + else + { + if (GameSettings.isKeyDown(this.mc.gameSettings.keyBindChat) && !this.searchBar.isFocused()) + { + this.searchBar.setFocused(true); + } + else if (this.searchBar.textboxKeyTyped(typedChar, keycode)) + { + String s1 = this.searchBar.getText().toLowerCase(Locale.ROOT); + this.pirateRecipe(s1); + + if (!s1.equals(this.lastSearch)) + { + this.updateCollections(false); + this.lastSearch = s1; + } + + return true; + } + + return false; + } + } + else + { + return false; + } + } + + /** + * "Check if we should activate the pirate speak easter egg" + * + * @param text 'if equal to "excitedze", activate the easter egg' + */ + private void pirateRecipe(String text) + { + if ("excitedze".equals(text)) + { + LanguageManager languagemanager = this.mc.getLanguageManager(); + Language language = languagemanager.getLanguage("en_pt"); + + if (languagemanager.getCurrentLanguage().compareTo(language) == 0) + { + return; + } + + languagemanager.setCurrentLanguage(language); + this.mc.gameSettings.language = language.getLanguageCode(); + net.minecraftforge.fml.client.FMLClientHandler.instance().refreshResources(net.minecraftforge.client.resource.VanillaResourceType.LANGUAGES); + this.mc.fontRenderer.setUnicodeFlag(this.mc.getLanguageManager().isCurrentLocaleUnicode() || this.mc.gameSettings.forceUnicodeFont); + this.mc.fontRenderer.setBidiFlag(languagemanager.isCurrentLanguageBidirectional()); + this.mc.gameSettings.saveOptions(); + } + } + + private boolean isOffsetNextToMainGUI() + { + return this.xOffset == 86; + } + + public void recipesUpdated() + { + this.updateTabs(); + + if (this.isVisible()) + { + this.updateCollections(false); + } + } + + public void recipesShown(List recipes) + { + for (IRecipe irecipe : recipes) + { + this.mc.player.removeRecipeHighlight(irecipe); + } + } + + public void setupGhostRecipe(IRecipe p_193951_1_, List p_193951_2_) + { + ItemStack itemstack = p_193951_1_.getRecipeOutput(); + this.ghostRecipe.setRecipe(p_193951_1_); + this.ghostRecipe.addIngredient(Ingredient.fromStacks(itemstack), (p_193951_2_.get(0)).xPos, (p_193951_2_.get(0)).yPos); + int i = this.craftingSlots.getWidth(); + int j = this.craftingSlots.getHeight(); + int k = p_193951_1_ instanceof net.minecraftforge.common.crafting.IShapedRecipe ? ((net.minecraftforge.common.crafting.IShapedRecipe)p_193951_1_).getRecipeWidth() : i; + int l = 1; + Iterator iterator = p_193951_1_.getIngredients().iterator(); + + for (int i1 = 0; i1 < j; ++i1) + { + for (int j1 = 0; j1 < k; ++j1) + { + if (!iterator.hasNext()) + { + return; + } + + Ingredient ingredient = iterator.next(); + + if (ingredient != Ingredient.EMPTY) + { + Slot slot = p_193951_2_.get(l); + this.ghostRecipe.addIngredient(ingredient, slot.xPos, slot.yPos); + } + + ++l; + } + + if (k < i) + { + l += i - k; + } + } + } + + private void sendUpdateSettings() + { + if (this.mc.getConnection() != null) + { + this.mc.getConnection().sendPacket(new CPacketRecipeInfo(this.isVisible(), this.recipeBook.isFilteringCraftable())); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiRecipeOverlay.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiRecipeOverlay.java new file mode 100644 index 0000000..d86edde --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/GuiRecipeOverlay.java @@ -0,0 +1,276 @@ +package net.minecraft.client.gui.recipebook; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.stats.RecipeBook; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiRecipeOverlay extends Gui +{ + private static final ResourceLocation RECIPE_BOOK_TEXTURE = new ResourceLocation("textures/gui/recipe_book.png"); + private final List buttonList = Lists.newArrayList(); + private boolean visible; + private int x; + private int y; + private Minecraft mc; + private RecipeList recipeList; + private IRecipe lastRecipeClicked; + private float time; + + public void init(Minecraft mcIn, RecipeList recipeListIn, int p_191845_3_, int p_191845_4_, int p_191845_5_, int p_191845_6_, float p_191845_7_, RecipeBook p_191845_8_) + { + this.mc = mcIn; + this.recipeList = recipeListIn; + boolean flag = p_191845_8_.isFilteringCraftable(); + List list = recipeListIn.getDisplayRecipes(true); + List list1 = flag ? Collections.emptyList() : recipeListIn.getDisplayRecipes(false); + int i = list.size(); + int j = i + list1.size(); + int k = j <= 16 ? 4 : 5; + int l = (int)Math.ceil((double)((float)j / (float)k)); + this.x = p_191845_3_; + this.y = p_191845_4_; + int i1 = 25; + float f = (float)(this.x + Math.min(j, k) * 25); + float f1 = (float)(p_191845_5_ + 50); + + if (f > f1) + { + this.x = (int)((float)this.x - p_191845_7_ * (float)((int)((f - f1) / p_191845_7_))); + } + + float f2 = (float)(this.y + l * 25); + float f3 = (float)(p_191845_6_ + 50); + + if (f2 > f3) + { + this.y = (int)((float)this.y - p_191845_7_ * (float)MathHelper.ceil((f2 - f3) / p_191845_7_)); + } + + float f4 = (float)this.y; + float f5 = (float)(p_191845_6_ - 100); + + if (f4 < f5) + { + this.y = (int)((float)this.y - p_191845_7_ * (float)MathHelper.ceil((f4 - f5) / p_191845_7_)); + } + + this.visible = true; + this.buttonList.clear(); + + for (int j1 = 0; j1 < j; ++j1) + { + boolean flag1 = j1 < i; + this.buttonList.add(new GuiRecipeOverlay.Button(this.x + 4 + 25 * (j1 % k), this.y + 5 + 25 * (j1 / k), flag1 ? (IRecipe)list.get(j1) : (IRecipe)list1.get(j1 - i), flag1)); + } + + this.lastRecipeClicked = null; + } + + public RecipeList getRecipeList() + { + return this.recipeList; + } + + public IRecipe getLastRecipeClicked() + { + return this.lastRecipeClicked; + } + + public boolean buttonClicked(int p_193968_1_, int p_193968_2_, int p_193968_3_) + { + if (p_193968_3_ != 0) + { + return false; + } + else + { + for (GuiRecipeOverlay.Button guirecipeoverlay$button : this.buttonList) + { + if (guirecipeoverlay$button.mousePressed(this.mc, p_193968_1_, p_193968_2_)) + { + this.lastRecipeClicked = guirecipeoverlay$button.recipe; + return true; + } + } + + return false; + } + } + + public void render(int p_191842_1_, int p_191842_2_, float p_191842_3_) + { + if (this.visible) + { + this.time += p_191842_3_; + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.enableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(RECIPE_BOOK_TEXTURE); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 170.0F); + int i = this.buttonList.size() <= 16 ? 4 : 5; + int j = Math.min(this.buttonList.size(), i); + int k = MathHelper.ceil((float)this.buttonList.size() / (float)i); + int l = 24; + int i1 = 4; + int j1 = 82; + int k1 = 208; + this.nineInchSprite(j, k, 24, 4, 82, 208); + GlStateManager.disableBlend(); + RenderHelper.disableStandardItemLighting(); + + for (GuiRecipeOverlay.Button guirecipeoverlay$button : this.buttonList) + { + guirecipeoverlay$button.drawButton(this.mc, p_191842_1_, p_191842_2_, p_191842_3_); + } + + GlStateManager.popMatrix(); + } + } + + private void nineInchSprite(int p_191846_1_, int p_191846_2_, int p_191846_3_, int p_191846_4_, int p_191846_5_, int p_191846_6_) + { + this.drawTexturedModalRect(this.x, this.y, p_191846_5_, p_191846_6_, p_191846_4_, p_191846_4_); + this.drawTexturedModalRect(this.x + p_191846_4_ * 2 + p_191846_1_ * p_191846_3_, this.y, p_191846_5_ + p_191846_3_ + p_191846_4_, p_191846_6_, p_191846_4_, p_191846_4_); + this.drawTexturedModalRect(this.x, this.y + p_191846_4_ * 2 + p_191846_2_ * p_191846_3_, p_191846_5_, p_191846_6_ + p_191846_3_ + p_191846_4_, p_191846_4_, p_191846_4_); + this.drawTexturedModalRect(this.x + p_191846_4_ * 2 + p_191846_1_ * p_191846_3_, this.y + p_191846_4_ * 2 + p_191846_2_ * p_191846_3_, p_191846_5_ + p_191846_3_ + p_191846_4_, p_191846_6_ + p_191846_3_ + p_191846_4_, p_191846_4_, p_191846_4_); + + for (int i = 0; i < p_191846_1_; ++i) + { + this.drawTexturedModalRect(this.x + p_191846_4_ + i * p_191846_3_, this.y, p_191846_5_ + p_191846_4_, p_191846_6_, p_191846_3_, p_191846_4_); + this.drawTexturedModalRect(this.x + p_191846_4_ + (i + 1) * p_191846_3_, this.y, p_191846_5_ + p_191846_4_, p_191846_6_, p_191846_4_, p_191846_4_); + + for (int j = 0; j < p_191846_2_; ++j) + { + if (i == 0) + { + this.drawTexturedModalRect(this.x, this.y + p_191846_4_ + j * p_191846_3_, p_191846_5_, p_191846_6_ + p_191846_4_, p_191846_4_, p_191846_3_); + this.drawTexturedModalRect(this.x, this.y + p_191846_4_ + (j + 1) * p_191846_3_, p_191846_5_, p_191846_6_ + p_191846_4_, p_191846_4_, p_191846_4_); + } + + this.drawTexturedModalRect(this.x + p_191846_4_ + i * p_191846_3_, this.y + p_191846_4_ + j * p_191846_3_, p_191846_5_ + p_191846_4_, p_191846_6_ + p_191846_4_, p_191846_3_, p_191846_3_); + this.drawTexturedModalRect(this.x + p_191846_4_ + (i + 1) * p_191846_3_, this.y + p_191846_4_ + j * p_191846_3_, p_191846_5_ + p_191846_4_, p_191846_6_ + p_191846_4_, p_191846_4_, p_191846_3_); + this.drawTexturedModalRect(this.x + p_191846_4_ + i * p_191846_3_, this.y + p_191846_4_ + (j + 1) * p_191846_3_, p_191846_5_ + p_191846_4_, p_191846_6_ + p_191846_4_, p_191846_3_, p_191846_4_); + this.drawTexturedModalRect(this.x + p_191846_4_ + (i + 1) * p_191846_3_ - 1, this.y + p_191846_4_ + (j + 1) * p_191846_3_ - 1, p_191846_5_ + p_191846_4_, p_191846_6_ + p_191846_4_, p_191846_4_ + 1, p_191846_4_ + 1); + + if (i == p_191846_1_ - 1) + { + this.drawTexturedModalRect(this.x + p_191846_4_ * 2 + p_191846_1_ * p_191846_3_, this.y + p_191846_4_ + j * p_191846_3_, p_191846_5_ + p_191846_3_ + p_191846_4_, p_191846_6_ + p_191846_4_, p_191846_4_, p_191846_3_); + this.drawTexturedModalRect(this.x + p_191846_4_ * 2 + p_191846_1_ * p_191846_3_, this.y + p_191846_4_ + (j + 1) * p_191846_3_, p_191846_5_ + p_191846_3_ + p_191846_4_, p_191846_6_ + p_191846_4_, p_191846_4_, p_191846_4_); + } + } + + this.drawTexturedModalRect(this.x + p_191846_4_ + i * p_191846_3_, this.y + p_191846_4_ * 2 + p_191846_2_ * p_191846_3_, p_191846_5_ + p_191846_4_, p_191846_6_ + p_191846_3_ + p_191846_4_, p_191846_3_, p_191846_4_); + this.drawTexturedModalRect(this.x + p_191846_4_ + (i + 1) * p_191846_3_, this.y + p_191846_4_ * 2 + p_191846_2_ * p_191846_3_, p_191846_5_ + p_191846_4_, p_191846_6_ + p_191846_3_ + p_191846_4_, p_191846_4_, p_191846_4_); + } + } + + public void setVisible(boolean p_192999_1_) + { + this.visible = p_192999_1_; + } + + public boolean isVisible() + { + return this.visible; + } + + @SideOnly(Side.CLIENT) + class Button extends GuiButton + { + private final IRecipe recipe; + private final boolean isCraftable; + + public Button(int p_i47594_2_, int p_i47594_3_, IRecipe p_i47594_4_, boolean p_i47594_5_) + { + super(0, p_i47594_2_, p_i47594_3_, ""); + this.width = 24; + this.height = 24; + this.recipe = p_i47594_4_; + this.isCraftable = p_i47594_5_; + } + + /** + * Draws this button to the screen. + */ + public void drawButton(Minecraft mc, int mouseX, int mouseY, float partialTicks) + { + RenderHelper.enableGUIStandardItemLighting(); + GlStateManager.enableAlpha(); + mc.getTextureManager().bindTexture(GuiRecipeOverlay.RECIPE_BOOK_TEXTURE); + this.hovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; + int i = 152; + + if (!this.isCraftable) + { + i += 26; + } + + int j = 78; + + if (this.hovered) + { + j += 26; + } + + this.drawTexturedModalRect(this.x, this.y, i, j, this.width, this.height); + int k = 3; + int l = 3; + + if (this.recipe instanceof net.minecraftforge.common.crafting.IShapedRecipe) + { + net.minecraftforge.common.crafting.IShapedRecipe shapedrecipes = (net.minecraftforge.common.crafting.IShapedRecipe)this.recipe; + k = shapedrecipes.getRecipeWidth(); + l = shapedrecipes.getRecipeHeight(); + } + + Iterator iterator = this.recipe.getIngredients().iterator(); + + for (int i1 = 0; i1 < l; ++i1) + { + int j1 = 3 + i1 * 7; + + for (int k1 = 0; k1 < k; ++k1) + { + if (iterator.hasNext()) + { + ItemStack[] aitemstack = ((Ingredient)iterator.next()).getMatchingStacks(); + + if (aitemstack.length != 0) + { + int l1 = 3 + k1 * 7; + GlStateManager.pushMatrix(); + float f = 0.42F; + int i2 = (int)((float)(this.x + l1) / 0.42F - 3.0F); + int j2 = (int)((float)(this.y + j1) / 0.42F - 3.0F); + GlStateManager.scale(0.42F, 0.42F, 1.0F); + GlStateManager.enableLighting(); + mc.getRenderItem().renderItemAndEffectIntoGUI(aitemstack[MathHelper.floor(GuiRecipeOverlay.this.time / 30.0F) % aitemstack.length], i2, j2); + GlStateManager.disableLighting(); + GlStateManager.popMatrix(); + } + } + } + } + + GlStateManager.disableAlpha(); + RenderHelper.disableStandardItemLighting(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/IRecipeShownListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/IRecipeShownListener.java new file mode 100644 index 0000000..5dd4ffe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/IRecipeShownListener.java @@ -0,0 +1,12 @@ +package net.minecraft.client.gui.recipebook; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IRecipeShownListener +{ + void recipesUpdated(); + + GuiRecipeBook func_194310_f(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/IRecipeUpdateListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/IRecipeUpdateListener.java new file mode 100644 index 0000000..a456cdc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/IRecipeUpdateListener.java @@ -0,0 +1,12 @@ +package net.minecraft.client.gui.recipebook; + +import java.util.List; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IRecipeUpdateListener +{ + void recipesShown(List recipes); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/RecipeBookPage.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/RecipeBookPage.java new file mode 100644 index 0000000..d7a5add --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/RecipeBookPage.java @@ -0,0 +1,221 @@ +package net.minecraft.client.gui.recipebook; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButtonToggle; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.stats.RecipeBook; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RecipeBookPage +{ + private List buttons = Lists.newArrayListWithCapacity(20); + private GuiButtonRecipe hoveredButton; + private GuiRecipeOverlay overlay = new GuiRecipeOverlay(); + private Minecraft minecraft; + private List listeners = Lists.newArrayList(); + private List recipeLists; + private GuiButtonToggle forwardButton; + private GuiButtonToggle backButton; + private int totalPages; + private int currentPage; + private RecipeBook recipeBook; + private IRecipe lastClickedRecipe; + private RecipeList lastClickedRecipeList; + + public RecipeBookPage() + { + for (int i = 0; i < 20; ++i) + { + this.buttons.add(new GuiButtonRecipe()); + } + } + + public void init(Minecraft p_194194_1_, int p_194194_2_, int p_194194_3_) + { + this.minecraft = p_194194_1_; + this.recipeBook = p_194194_1_.player.getRecipeBook(); + + for (int i = 0; i < this.buttons.size(); ++i) + { + ((GuiButtonRecipe)this.buttons.get(i)).setPosition(p_194194_2_ + 11 + 25 * (i % 5), p_194194_3_ + 31 + 25 * (i / 5)); + } + + this.forwardButton = new GuiButtonToggle(0, p_194194_2_ + 93, p_194194_3_ + 137, 12, 17, false); + this.forwardButton.initTextureValues(1, 208, 13, 18, GuiRecipeBook.RECIPE_BOOK); + this.backButton = new GuiButtonToggle(0, p_194194_2_ + 38, p_194194_3_ + 137, 12, 17, true); + this.backButton.initTextureValues(1, 208, 13, 18, GuiRecipeBook.RECIPE_BOOK); + } + + public void addListener(GuiRecipeBook p_193732_1_) + { + this.listeners.remove(p_193732_1_); + this.listeners.add(p_193732_1_); + } + + public void updateLists(List p_194192_1_, boolean p_194192_2_) + { + this.recipeLists = p_194192_1_; + this.totalPages = (int)Math.ceil((double)p_194192_1_.size() / 20.0D); + + if (this.totalPages <= this.currentPage || p_194192_2_) + { + this.currentPage = 0; + } + + this.updateButtonsForPage(); + } + + private void updateButtonsForPage() + { + int i = 20 * this.currentPage; + + for (int j = 0; j < this.buttons.size(); ++j) + { + GuiButtonRecipe guibuttonrecipe = this.buttons.get(j); + + if (i + j < this.recipeLists.size()) + { + RecipeList recipelist = this.recipeLists.get(i + j); + guibuttonrecipe.init(recipelist, this, this.recipeBook); + guibuttonrecipe.visible = true; + } + else + { + guibuttonrecipe.visible = false; + } + } + + this.updateArrowButtons(); + } + + private void updateArrowButtons() + { + this.forwardButton.visible = this.totalPages > 1 && this.currentPage < this.totalPages - 1; + this.backButton.visible = this.totalPages > 1 && this.currentPage > 0; + } + + public void render(int p_194191_1_, int p_194191_2_, int p_194191_3_, int p_194191_4_, float p_194191_5_) + { + if (this.totalPages > 1) + { + String s = this.currentPage + 1 + "/" + this.totalPages; + int i = this.minecraft.fontRenderer.getStringWidth(s); + this.minecraft.fontRenderer.drawString(s, p_194191_1_ - i / 2 + 73, p_194191_2_ + 141, -1); + } + + RenderHelper.disableStandardItemLighting(); + this.hoveredButton = null; + + for (GuiButtonRecipe guibuttonrecipe : this.buttons) + { + guibuttonrecipe.drawButton(this.minecraft, p_194191_3_, p_194191_4_, p_194191_5_); + + if (guibuttonrecipe.visible && guibuttonrecipe.isMouseOver()) + { + this.hoveredButton = guibuttonrecipe; + } + } + + this.backButton.drawButton(this.minecraft, p_194191_3_, p_194191_4_, p_194191_5_); + this.forwardButton.drawButton(this.minecraft, p_194191_3_, p_194191_4_, p_194191_5_); + this.overlay.render(p_194191_3_, p_194191_4_, p_194191_5_); + } + + public void renderTooltip(int p_193721_1_, int p_193721_2_) + { + if (this.minecraft.currentScreen != null && this.hoveredButton != null && !this.overlay.isVisible()) + { + this.minecraft.currentScreen.drawHoveringText(this.hoveredButton.getToolTipText(this.minecraft.currentScreen), p_193721_1_, p_193721_2_); + } + } + + @Nullable + public IRecipe getLastClickedRecipe() + { + return this.lastClickedRecipe; + } + + @Nullable + public RecipeList getLastClickedRecipeList() + { + return this.lastClickedRecipeList; + } + + public void setInvisible() + { + this.overlay.setVisible(false); + } + + public boolean mouseClicked(int p_194196_1_, int p_194196_2_, int p_194196_3_, int p_194196_4_, int p_194196_5_, int p_194196_6_, int p_194196_7_) + { + this.lastClickedRecipe = null; + this.lastClickedRecipeList = null; + + if (this.overlay.isVisible()) + { + if (this.overlay.buttonClicked(p_194196_1_, p_194196_2_, p_194196_3_)) + { + this.lastClickedRecipe = this.overlay.getLastRecipeClicked(); + this.lastClickedRecipeList = this.overlay.getRecipeList(); + } + else + { + this.overlay.setVisible(false); + } + + return true; + } + else if (this.forwardButton.mousePressed(this.minecraft, p_194196_1_, p_194196_2_) && p_194196_3_ == 0) + { + this.forwardButton.playPressSound(this.minecraft.getSoundHandler()); + ++this.currentPage; + this.updateButtonsForPage(); + return true; + } + else if (this.backButton.mousePressed(this.minecraft, p_194196_1_, p_194196_2_) && p_194196_3_ == 0) + { + this.backButton.playPressSound(this.minecraft.getSoundHandler()); + --this.currentPage; + this.updateButtonsForPage(); + return true; + } + else + { + for (GuiButtonRecipe guibuttonrecipe : this.buttons) + { + if (guibuttonrecipe.mousePressed(this.minecraft, p_194196_1_, p_194196_2_)) + { + guibuttonrecipe.playPressSound(this.minecraft.getSoundHandler()); + + if (p_194196_3_ == 0) + { + this.lastClickedRecipe = guibuttonrecipe.getRecipe(); + this.lastClickedRecipeList = guibuttonrecipe.getList(); + } + else if (!this.overlay.isVisible() && !guibuttonrecipe.isOnlyOption()) + { + this.overlay.init(this.minecraft, guibuttonrecipe.getList(), guibuttonrecipe.x, guibuttonrecipe.y, p_194196_4_ + p_194196_6_ / 2, p_194196_5_ + 13 + p_194196_7_ / 2, (float)guibuttonrecipe.getButtonWidth(), this.recipeBook); + } + + return true; + } + } + + return false; + } + } + + public void recipesShown(List p_194195_1_) + { + for (IRecipeUpdateListener irecipeupdatelistener : this.listeners) + { + irecipeupdatelistener.recipesShown(p_194195_1_); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/RecipeList.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/RecipeList.java new file mode 100644 index 0000000..b446261 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/RecipeList.java @@ -0,0 +1,116 @@ +package net.minecraft.client.gui.recipebook; + +import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.IntList; +import java.util.BitSet; +import java.util.List; +import net.minecraft.client.util.RecipeItemHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.stats.RecipeBook; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RecipeList +{ + private List recipes = Lists.newArrayList(); + private final BitSet craftable = new BitSet(); + private final BitSet canFit = new BitSet(); + private final BitSet inBook = new BitSet(); + private boolean singleResultItem = true; + + /** + * Checks if recipebook is not empty + */ + public boolean isNotEmpty() + { + return !this.inBook.isEmpty(); + } + + public void updateKnownRecipes(RecipeBook book) + { + for (int i = 0; i < this.recipes.size(); ++i) + { + this.inBook.set(i, book.isUnlocked(this.recipes.get(i))); + } + } + + public void canCraft(RecipeItemHelper handler, int width, int height, RecipeBook book) + { + for (int i = 0; i < this.recipes.size(); ++i) + { + IRecipe irecipe = this.recipes.get(i); + boolean flag = irecipe.canFit(width, height) && book.isUnlocked(irecipe); + this.canFit.set(i, flag); + this.craftable.set(i, flag && handler.canCraft(irecipe, (IntList)null)); + } + } + + public boolean isCraftable(IRecipe recipe) + { + return this.craftable.get(this.recipes.indexOf(recipe)); + } + + public boolean containsCraftableRecipes() + { + return !this.craftable.isEmpty(); + } + + public boolean containsValidRecipes() + { + return !this.canFit.isEmpty(); + } + + public List getRecipes() + { + return this.recipes; + } + + public List getRecipes(boolean p_194208_1_) + { + List list = Lists.newArrayList(); + + for (int i = this.inBook.nextSetBit(0); i >= 0; i = this.inBook.nextSetBit(i + 1)) + { + if ((p_194208_1_ ? this.craftable : this.canFit).get(i)) + { + list.add(this.recipes.get(i)); + } + } + + return list; + } + + public List getDisplayRecipes(boolean onlyCraftable) + { + List list = Lists.newArrayList(); + + for (int i = this.inBook.nextSetBit(0); i >= 0; i = this.inBook.nextSetBit(i + 1)) + { + if (this.canFit.get(i) && this.craftable.get(i) == onlyCraftable) + { + list.add(this.recipes.get(i)); + } + } + + return list; + } + + public void add(IRecipe recipe) + { + this.recipes.add(recipe); + + if (this.singleResultItem) + { + ItemStack itemstack = ((IRecipe)this.recipes.get(0)).getRecipeOutput(); + ItemStack itemstack1 = recipe.getRecipeOutput(); + this.singleResultItem = ItemStack.areItemsEqual(itemstack, itemstack1) && ItemStack.areItemStackTagsEqual(itemstack, itemstack1); + } + } + + public boolean hasSingleResultItem() + { + return this.singleResultItem; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/package-info.java new file mode 100644 index 0000000..716a9ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/recipebook/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.recipebook; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java new file mode 100644 index 0000000..b092268 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/BaseSpectatorGroup.java @@ -0,0 +1,32 @@ +package net.minecraft.client.gui.spectator; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.gui.spectator.categories.TeleportToPlayer; +import net.minecraft.client.gui.spectator.categories.TeleportToTeam; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BaseSpectatorGroup implements ISpectatorMenuView +{ + private final List items = Lists.newArrayList(); + + public BaseSpectatorGroup() + { + this.items.add(new TeleportToPlayer()); + this.items.add(new TeleportToTeam()); + } + + public List getItems() + { + return this.items; + } + + public ITextComponent getPrompt() + { + return new TextComponentTranslation("spectatorMenu.root.prompt", new Object[0]); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java new file mode 100644 index 0000000..c9928b7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuObject.java @@ -0,0 +1,17 @@ +package net.minecraft.client.gui.spectator; + +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISpectatorMenuObject +{ + void selectItem(SpectatorMenu menu); + + ITextComponent getSpectatorName(); + + void renderIcon(float brightness, int alpha); + + boolean isEnabled(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java new file mode 100644 index 0000000..fa0ca55 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuRecipient.java @@ -0,0 +1,10 @@ +package net.minecraft.client.gui.spectator; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISpectatorMenuRecipient +{ + void onSpectatorMenuClosed(SpectatorMenu menu); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuView.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuView.java new file mode 100644 index 0000000..7082f88 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/ISpectatorMenuView.java @@ -0,0 +1,14 @@ +package net.minecraft.client.gui.spectator; + +import java.util.List; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISpectatorMenuView +{ + List getItems(); + + ITextComponent getPrompt(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/PlayerMenuObject.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/PlayerMenuObject.java new file mode 100644 index 0000000..9ef1d78 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/PlayerMenuObject.java @@ -0,0 +1,50 @@ +package net.minecraft.client.gui.spectator; + +import com.mojang.authlib.GameProfile; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.network.play.client.CPacketSpectate; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class PlayerMenuObject implements ISpectatorMenuObject +{ + private final GameProfile profile; + private final ResourceLocation resourceLocation; + + public PlayerMenuObject(GameProfile profileIn) + { + this.profile = profileIn; + this.resourceLocation = AbstractClientPlayer.getLocationSkin(profileIn.getName()); + AbstractClientPlayer.getDownloadImageSkin(this.resourceLocation, profileIn.getName()); + } + + public void selectItem(SpectatorMenu menu) + { + Minecraft.getMinecraft().getConnection().sendPacket(new CPacketSpectate(this.profile.getId())); + } + + public ITextComponent getSpectatorName() + { + return new TextComponentString(this.profile.getName()); + } + + public void renderIcon(float brightness, int alpha) + { + Minecraft.getMinecraft().getTextureManager().bindTexture(this.resourceLocation); + GlStateManager.color(1.0F, 1.0F, 1.0F, (float)alpha / 255.0F); + Gui.drawScaledCustomSizeModalRect(2, 2, 8.0F, 8.0F, 8, 8, 12, 12, 64.0F, 64.0F); + Gui.drawScaledCustomSizeModalRect(2, 2, 40.0F, 8.0F, 8, 8, 12, 12, 64.0F, 64.0F); + } + + public boolean isEnabled() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/SpectatorMenu.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/SpectatorMenu.java new file mode 100644 index 0000000..9677544 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/SpectatorMenu.java @@ -0,0 +1,205 @@ +package net.minecraft.client.gui.spectator; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiSpectator; +import net.minecraft.client.gui.spectator.categories.SpectatorDetails; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SpectatorMenu +{ + private static final ISpectatorMenuObject CLOSE_ITEM = new SpectatorMenu.EndSpectatorObject(); + private static final ISpectatorMenuObject SCROLL_LEFT = new SpectatorMenu.MoveMenuObject(-1, true); + private static final ISpectatorMenuObject SCROLL_RIGHT_ENABLED = new SpectatorMenu.MoveMenuObject(1, true); + private static final ISpectatorMenuObject SCROLL_RIGHT_DISABLED = new SpectatorMenu.MoveMenuObject(1, false); + public static final ISpectatorMenuObject EMPTY_SLOT = new ISpectatorMenuObject() + { + public void selectItem(SpectatorMenu menu) + { + } + public ITextComponent getSpectatorName() + { + return new TextComponentString(""); + } + public void renderIcon(float brightness, int alpha) + { + } + public boolean isEnabled() + { + return false; + } + }; + private final ISpectatorMenuRecipient listener; + private final List previousCategories = Lists.newArrayList(); + private ISpectatorMenuView category = new BaseSpectatorGroup(); + private int selectedSlot = -1; + private int page; + + public SpectatorMenu(ISpectatorMenuRecipient menu) + { + this.listener = menu; + } + + public ISpectatorMenuObject getItem(int index) + { + int i = index + this.page * 6; + + if (this.page > 0 && index == 0) + { + return SCROLL_LEFT; + } + else if (index == 7) + { + return i < this.category.getItems().size() ? SCROLL_RIGHT_ENABLED : SCROLL_RIGHT_DISABLED; + } + else if (index == 8) + { + return CLOSE_ITEM; + } + else + { + return i >= 0 && i < this.category.getItems().size() ? (ISpectatorMenuObject)MoreObjects.firstNonNull(this.category.getItems().get(i), EMPTY_SLOT) : EMPTY_SLOT; + } + } + + public List getItems() + { + List list = Lists.newArrayList(); + + for (int i = 0; i <= 8; ++i) + { + list.add(this.getItem(i)); + } + + return list; + } + + public ISpectatorMenuObject getSelectedItem() + { + return this.getItem(this.selectedSlot); + } + + public ISpectatorMenuView getSelectedCategory() + { + return this.category; + } + + public void selectSlot(int slotIn) + { + ISpectatorMenuObject ispectatormenuobject = this.getItem(slotIn); + + if (ispectatormenuobject != EMPTY_SLOT) + { + if (this.selectedSlot == slotIn && ispectatormenuobject.isEnabled()) + { + ispectatormenuobject.selectItem(this); + } + else + { + this.selectedSlot = slotIn; + } + } + } + + public void exit() + { + this.listener.onSpectatorMenuClosed(this); + } + + public int getSelectedSlot() + { + return this.selectedSlot; + } + + public void selectCategory(ISpectatorMenuView menuView) + { + this.previousCategories.add(this.getCurrentPage()); + this.category = menuView; + this.selectedSlot = -1; + this.page = 0; + } + + public SpectatorDetails getCurrentPage() + { + return new SpectatorDetails(this.category, this.getItems(), this.selectedSlot); + } + + @SideOnly(Side.CLIENT) + static class EndSpectatorObject implements ISpectatorMenuObject + { + private EndSpectatorObject() + { + } + + public void selectItem(SpectatorMenu menu) + { + menu.exit(); + } + + public ITextComponent getSpectatorName() + { + return new TextComponentTranslation("spectatorMenu.close", new Object[0]); + } + + public void renderIcon(float brightness, int alpha) + { + Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.SPECTATOR_WIDGETS); + Gui.drawModalRectWithCustomSizedTexture(0, 0, 128.0F, 0.0F, 16, 16, 256.0F, 256.0F); + } + + public boolean isEnabled() + { + return true; + } + } + + @SideOnly(Side.CLIENT) + static class MoveMenuObject implements ISpectatorMenuObject + { + private final int direction; + private final boolean enabled; + + public MoveMenuObject(int p_i45495_1_, boolean p_i45495_2_) + { + this.direction = p_i45495_1_; + this.enabled = p_i45495_2_; + } + + public void selectItem(SpectatorMenu menu) + { + menu.page = menu.page + this.direction; + } + + public ITextComponent getSpectatorName() + { + return this.direction < 0 ? new TextComponentTranslation("spectatorMenu.previous_page", new Object[0]) : new TextComponentTranslation("spectatorMenu.next_page", new Object[0]); + } + + public void renderIcon(float brightness, int alpha) + { + Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.SPECTATOR_WIDGETS); + + if (this.direction < 0) + { + Gui.drawModalRectWithCustomSizedTexture(0, 0, 144.0F, 0.0F, 16, 16, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(0, 0, 160.0F, 0.0F, 16, 16, 256.0F, 256.0F); + } + } + + public boolean isEnabled() + { + return this.enabled; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java new file mode 100644 index 0000000..490b8e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/SpectatorDetails.java @@ -0,0 +1,34 @@ +package net.minecraft.client.gui.spectator.categories; + +import com.google.common.base.MoreObjects; +import java.util.List; +import net.minecraft.client.gui.spectator.ISpectatorMenuObject; +import net.minecraft.client.gui.spectator.ISpectatorMenuView; +import net.minecraft.client.gui.spectator.SpectatorMenu; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SpectatorDetails +{ + private final ISpectatorMenuView category; + private final List items; + private final int selectedSlot; + + public SpectatorDetails(ISpectatorMenuView categoryIn, List itemsIn, int selectedIndex) + { + this.category = categoryIn; + this.items = itemsIn; + this.selectedSlot = selectedIndex; + } + + public ISpectatorMenuObject getObject(int index) + { + return index >= 0 && index < this.items.size() ? (ISpectatorMenuObject)MoreObjects.firstNonNull(this.items.get(index), SpectatorMenu.EMPTY_SLOT) : SpectatorMenu.EMPTY_SLOT; + } + + public int getSelectedSlot() + { + return this.selectedSlot; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java new file mode 100644 index 0000000..3a6be17 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/TeleportToPlayer.java @@ -0,0 +1,83 @@ +package net.minecraft.client.gui.spectator.categories; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiSpectator; +import net.minecraft.client.gui.spectator.ISpectatorMenuObject; +import net.minecraft.client.gui.spectator.ISpectatorMenuView; +import net.minecraft.client.gui.spectator.PlayerMenuObject; +import net.minecraft.client.gui.spectator.SpectatorMenu; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TeleportToPlayer implements ISpectatorMenuView, ISpectatorMenuObject +{ + private static final Ordering PROFILE_ORDER = Ordering.from(new Comparator() + { + public int compare(NetworkPlayerInfo p_compare_1_, NetworkPlayerInfo p_compare_2_) + { + return ComparisonChain.start().compare(p_compare_1_.getGameProfile().getId(), p_compare_2_.getGameProfile().getId()).result(); + } + }); + private final List items; + + public TeleportToPlayer() + { + this(PROFILE_ORDER.sortedCopy(Minecraft.getMinecraft().getConnection().getPlayerInfoMap())); + } + + public TeleportToPlayer(Collection profiles) + { + this.items = Lists.newArrayList(); + + for (NetworkPlayerInfo networkplayerinfo : PROFILE_ORDER.sortedCopy(profiles)) + { + if (networkplayerinfo.getGameType() != GameType.SPECTATOR) + { + this.items.add(new PlayerMenuObject(networkplayerinfo.getGameProfile())); + } + } + } + + public List getItems() + { + return this.items; + } + + public ITextComponent getPrompt() + { + return new TextComponentTranslation("spectatorMenu.teleport.prompt", new Object[0]); + } + + public void selectItem(SpectatorMenu menu) + { + menu.selectCategory(this); + } + + public ITextComponent getSpectatorName() + { + return new TextComponentTranslation("spectatorMenu.teleport", new Object[0]); + } + + public void renderIcon(float brightness, int alpha) + { + Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.SPECTATOR_WIDGETS); + Gui.drawModalRectWithCustomSizedTexture(0, 0, 0.0F, 0.0F, 16, 16, 256.0F, 256.0F); + } + + public boolean isEnabled() + { + return !this.items.isEmpty(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java new file mode 100644 index 0000000..87ec10c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/TeleportToTeam.java @@ -0,0 +1,153 @@ +package net.minecraft.client.gui.spectator.categories; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiSpectator; +import net.minecraft.client.gui.spectator.ISpectatorMenuObject; +import net.minecraft.client.gui.spectator.ISpectatorMenuView; +import net.minecraft.client.gui.spectator.SpectatorMenu; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TeleportToTeam implements ISpectatorMenuView, ISpectatorMenuObject +{ + private final List items = Lists.newArrayList(); + + public TeleportToTeam() + { + Minecraft minecraft = Minecraft.getMinecraft(); + + for (ScorePlayerTeam scoreplayerteam : minecraft.world.getScoreboard().getTeams()) + { + this.items.add(new TeleportToTeam.TeamSelectionObject(scoreplayerteam)); + } + } + + public List getItems() + { + return this.items; + } + + public ITextComponent getPrompt() + { + return new TextComponentTranslation("spectatorMenu.team_teleport.prompt", new Object[0]); + } + + public void selectItem(SpectatorMenu menu) + { + menu.selectCategory(this); + } + + public ITextComponent getSpectatorName() + { + return new TextComponentTranslation("spectatorMenu.team_teleport", new Object[0]); + } + + public void renderIcon(float brightness, int alpha) + { + Minecraft.getMinecraft().getTextureManager().bindTexture(GuiSpectator.SPECTATOR_WIDGETS); + Gui.drawModalRectWithCustomSizedTexture(0, 0, 16.0F, 0.0F, 16, 16, 256.0F, 256.0F); + } + + public boolean isEnabled() + { + for (ISpectatorMenuObject ispectatormenuobject : this.items) + { + if (ispectatormenuobject.isEnabled()) + { + return true; + } + } + + return false; + } + + @SideOnly(Side.CLIENT) + class TeamSelectionObject implements ISpectatorMenuObject + { + private final ScorePlayerTeam team; + private final ResourceLocation location; + private final List players; + + public TeamSelectionObject(ScorePlayerTeam teamIn) + { + this.team = teamIn; + this.players = Lists.newArrayList(); + + for (String s : teamIn.getMembershipCollection()) + { + NetworkPlayerInfo networkplayerinfo = Minecraft.getMinecraft().getConnection().getPlayerInfo(s); + + if (networkplayerinfo != null) + { + this.players.add(networkplayerinfo); + } + } + + if (this.players.isEmpty()) + { + this.location = DefaultPlayerSkin.getDefaultSkinLegacy(); + } + else + { + String s1 = ((NetworkPlayerInfo)this.players.get((new Random()).nextInt(this.players.size()))).getGameProfile().getName(); + this.location = AbstractClientPlayer.getLocationSkin(s1); + AbstractClientPlayer.getDownloadImageSkin(this.location, s1); + } + } + + public void selectItem(SpectatorMenu menu) + { + menu.selectCategory(new TeleportToPlayer(this.players)); + } + + public ITextComponent getSpectatorName() + { + return new TextComponentString(this.team.getDisplayName()); + } + + public void renderIcon(float brightness, int alpha) + { + int i = -1; + String s = FontRenderer.getFormatFromString(this.team.getPrefix()); + + if (s.length() >= 2) + { + i = Minecraft.getMinecraft().fontRenderer.getColorCode(s.charAt(1)); + } + + if (i >= 0) + { + float f = (float)(i >> 16 & 255) / 255.0F; + float f1 = (float)(i >> 8 & 255) / 255.0F; + float f2 = (float)(i & 255) / 255.0F; + Gui.drawRect(1, 1, 15, 15, MathHelper.rgb(f * brightness, f1 * brightness, f2 * brightness) | alpha << 24); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(this.location); + GlStateManager.color(brightness, brightness, brightness, (float)alpha / 255.0F); + Gui.drawScaledCustomSizeModalRect(2, 2, 8.0F, 8.0F, 8, 8, 12, 12, 64.0F, 64.0F); + Gui.drawScaledCustomSizeModalRect(2, 2, 40.0F, 8.0F, 8, 8, 12, 12, 64.0F, 64.0F); + } + + public boolean isEnabled() + { + return !this.players.isEmpty(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/package-info.java new file mode 100644 index 0000000..f67ef55 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/categories/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.spectator.categories; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/package-info.java new file mode 100644 index 0000000..c7cca23 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/spectator/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.spectator; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/AdvancementToast.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/AdvancementToast.java new file mode 100644 index 0000000..24c6c4c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/AdvancementToast.java @@ -0,0 +1,87 @@ +package net.minecraft.client.gui.toasts; + +import java.util.List; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.DisplayInfo; +import net.minecraft.advancements.FrameType; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class AdvancementToast implements IToast +{ + private final Advancement advancement; + private boolean hasPlayedSound = false; + + public AdvancementToast(Advancement advancementIn) + { + this.advancement = advancementIn; + } + + public IToast.Visibility draw(GuiToast toastGui, long delta) + { + toastGui.getMinecraft().getTextureManager().bindTexture(TEXTURE_TOASTS); + GlStateManager.color(1.0F, 1.0F, 1.0F); + DisplayInfo displayinfo = this.advancement.getDisplay(); + toastGui.drawTexturedModalRect(0, 0, 0, 0, 160, 32); + + if (displayinfo != null) + { + List list = toastGui.getMinecraft().fontRenderer.listFormattedStringToWidth(displayinfo.getTitle().getFormattedText(), 125); + int i = displayinfo.getFrame() == FrameType.CHALLENGE ? 16746751 : 16776960; + + if (list.size() == 1) + { + toastGui.getMinecraft().fontRenderer.drawString(I18n.format("advancements.toast." + displayinfo.getFrame().getName()), 30, 7, i | -16777216); + toastGui.getMinecraft().fontRenderer.drawString(displayinfo.getTitle().getFormattedText(), 30, 18, -1); + } + else + { + int j = 1500; + float f = 300.0F; + + if (delta < 1500L) + { + int k = MathHelper.floor(MathHelper.clamp((float)(1500L - delta) / 300.0F, 0.0F, 1.0F) * 255.0F) << 24 | 67108864; + toastGui.getMinecraft().fontRenderer.drawString(I18n.format("advancements.toast." + displayinfo.getFrame().getName()), 30, 11, i | k); + } + else + { + int i1 = MathHelper.floor(MathHelper.clamp((float)(delta - 1500L) / 300.0F, 0.0F, 1.0F) * 252.0F) << 24 | 67108864; + int l = 16 - list.size() * toastGui.getMinecraft().fontRenderer.FONT_HEIGHT / 2; + + for (String s : list) + { + toastGui.getMinecraft().fontRenderer.drawString(s, 30, l, 16777215 | i1); + l += toastGui.getMinecraft().fontRenderer.FONT_HEIGHT; + } + } + } + + if (!this.hasPlayedSound && delta > 0L) + { + this.hasPlayedSound = true; + + if (displayinfo.getFrame() == FrameType.CHALLENGE) + { + toastGui.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getRecord(SoundEvents.UI_TOAST_CHALLENGE_COMPLETE, 1.0F, 1.0F)); + } + } + + RenderHelper.enableGUIStandardItemLighting(); + toastGui.getMinecraft().getRenderItem().renderItemAndEffectIntoGUI((EntityLivingBase)null, displayinfo.getIcon(), 8, 8); + return delta >= 5000L ? IToast.Visibility.HIDE : IToast.Visibility.SHOW; + } + else + { + return IToast.Visibility.HIDE; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/GuiToast.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/GuiToast.java new file mode 100644 index 0000000..961effa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/GuiToast.java @@ -0,0 +1,147 @@ +package net.minecraft.client.gui.toasts; + +import com.google.common.collect.Queues; +import java.util.Arrays; +import java.util.Deque; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiToast extends Gui +{ + private final Minecraft mc; + private final GuiToast.ToastInstance[] visible = new GuiToast.ToastInstance[5]; + private final Deque toastsQueue = Queues.newArrayDeque(); + + public GuiToast(Minecraft mcIn) + { + this.mc = mcIn; + } + + public void drawToast(ScaledResolution resolution) + { + if (!this.mc.gameSettings.hideGUI) + { + RenderHelper.disableStandardItemLighting(); + + for (int i = 0; i < this.visible.length; ++i) + { + GuiToast.ToastInstance toastinstance = this.visible[i]; + + if (toastinstance != null && toastinstance.render(resolution.getScaledWidth(), i)) + { + this.visible[i] = null; + } + + if (this.visible[i] == null && !this.toastsQueue.isEmpty()) + { + this.visible[i] = new GuiToast.ToastInstance(this.toastsQueue.removeFirst()); + } + } + } + } + + @Nullable + public T getToast(Class p_192990_1_, Object p_192990_2_) + { + for (GuiToast.ToastInstance toastinstance : this.visible) + { + if (toastinstance != null && p_192990_1_.isAssignableFrom(toastinstance.getToast().getClass()) && toastinstance.getToast().getType().equals(p_192990_2_)) + { + return (T)toastinstance.getToast(); + } + } + + for (IToast itoast : this.toastsQueue) + { + if (p_192990_1_.isAssignableFrom(itoast.getClass()) && itoast.getType().equals(p_192990_2_)) + { + return (T)itoast; + } + } + + return (T)null; + } + + public void clear() + { + Arrays.fill(this.visible, (Object)null); + this.toastsQueue.clear(); + } + + public void add(IToast toastIn) + { + this.toastsQueue.add(toastIn); + } + + public Minecraft getMinecraft() + { + return this.mc; + } + + @SideOnly(Side.CLIENT) + class ToastInstance + { + private final T toast; + private long animationTime; + private long visibleTime; + private IToast.Visibility visibility; + + private ToastInstance(T toastIn) + { + this.animationTime = -1L; + this.visibleTime = -1L; + this.visibility = IToast.Visibility.SHOW; + this.toast = toastIn; + } + + public T getToast() + { + return this.toast; + } + + private float getVisibility(long p_193686_1_) + { + float f = MathHelper.clamp((float)(p_193686_1_ - this.animationTime) / 600.0F, 0.0F, 1.0F); + f = f * f; + return this.visibility == IToast.Visibility.HIDE ? 1.0F - f : f; + } + + public boolean render(int p_193684_1_, int p_193684_2_) + { + long i = Minecraft.getSystemTime(); + + if (this.animationTime == -1L) + { + this.animationTime = i; + this.visibility.playSound(GuiToast.this.mc.getSoundHandler()); + } + + if (this.visibility == IToast.Visibility.SHOW && i - this.animationTime <= 600L) + { + this.visibleTime = i; + } + + GlStateManager.pushMatrix(); + GlStateManager.translate((float)p_193684_1_ - 160.0F * this.getVisibility(i), (float)(p_193684_2_ * 32), (float)(500 + p_193684_2_)); + IToast.Visibility itoast$visibility = this.toast.draw(GuiToast.this, i - this.visibleTime); + GlStateManager.popMatrix(); + + if (itoast$visibility != this.visibility) + { + this.animationTime = i - (long)((int)((1.0F - this.getVisibility(i)) * 600.0F)); + this.visibility = itoast$visibility; + this.visibility.playSound(GuiToast.this.mc.getSoundHandler()); + } + + return this.visibility == IToast.Visibility.HIDE && i - this.animationTime > 600L; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/IToast.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/IToast.java new file mode 100644 index 0000000..7f50a78 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/IToast.java @@ -0,0 +1,42 @@ +package net.minecraft.client.gui.toasts; + +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.audio.SoundHandler; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IToast +{ + ResourceLocation TEXTURE_TOASTS = new ResourceLocation("textures/gui/toasts.png"); + Object NO_TOKEN = new Object(); + + IToast.Visibility draw(GuiToast toastGui, long delta); + +default Object getType() + { + return NO_TOKEN; + } + + @SideOnly(Side.CLIENT) + public static enum Visibility + { + SHOW(SoundEvents.UI_TOAST_IN), + HIDE(SoundEvents.UI_TOAST_OUT); + + private final SoundEvent sound; + + private Visibility(SoundEvent soundIn) + { + this.sound = soundIn; + } + + public void playSound(SoundHandler handler) + { + handler.playSound(PositionedSoundRecord.getRecord(this.sound, 1.0F, 1.0F)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/RecipeToast.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/RecipeToast.java new file mode 100644 index 0000000..8259fb3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/RecipeToast.java @@ -0,0 +1,72 @@ +package net.minecraft.client.gui.toasts; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RecipeToast implements IToast +{ + private final List recipesOutputs = Lists.newArrayList(); + private long firstDrawTime; + private boolean hasNewOutputs; + + public RecipeToast(ItemStack p_i47489_1_) + { + this.recipesOutputs.add(p_i47489_1_); + } + + public IToast.Visibility draw(GuiToast toastGui, long delta) + { + if (this.hasNewOutputs) + { + this.firstDrawTime = delta; + this.hasNewOutputs = false; + } + + if (this.recipesOutputs.isEmpty()) + { + return IToast.Visibility.HIDE; + } + else + { + toastGui.getMinecraft().getTextureManager().bindTexture(TEXTURE_TOASTS); + GlStateManager.color(1.0F, 1.0F, 1.0F); + toastGui.drawTexturedModalRect(0, 0, 0, 32, 160, 32); + toastGui.getMinecraft().fontRenderer.drawString(I18n.format("recipe.toast.title"), 30, 7, -11534256); + toastGui.getMinecraft().fontRenderer.drawString(I18n.format("recipe.toast.description"), 30, 18, -16777216); + RenderHelper.enableGUIStandardItemLighting(); + toastGui.getMinecraft().getRenderItem().renderItemAndEffectIntoGUI((EntityLivingBase)null, this.recipesOutputs.get((int)(delta * (long)this.recipesOutputs.size() / 5000L % (long)this.recipesOutputs.size())), 8, 8); //Forge: fix math so that it doesn't divide by 0 when there are more than 5000 recipes + return delta - this.firstDrawTime >= 5000L ? IToast.Visibility.HIDE : IToast.Visibility.SHOW; + } + } + + public void addRecipeOutput(ItemStack output) + { + if (this.recipesOutputs.add(output)) + { + this.hasNewOutputs = true; + } + } + + public static void addOrUpdate(GuiToast p_193665_0_, IRecipe p_193665_1_) + { + RecipeToast recipetoast = (RecipeToast)p_193665_0_.getToast(RecipeToast.class, NO_TOKEN); + + if (recipetoast == null) + { + p_193665_0_.add(new RecipeToast(p_193665_1_.getRecipeOutput())); + } + else + { + recipetoast.addRecipeOutput(p_193665_1_.getRecipeOutput()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/SystemToast.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/SystemToast.java new file mode 100644 index 0000000..cdd0518 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/SystemToast.java @@ -0,0 +1,82 @@ +package net.minecraft.client.gui.toasts; + +import javax.annotation.Nullable; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SystemToast implements IToast +{ + private final SystemToast.Type type; + private String title; + private String subtitle; + private long firstDrawTime; + private boolean newDisplay; + + public SystemToast(SystemToast.Type typeIn, ITextComponent titleComponent, @Nullable ITextComponent subtitleComponent) + { + this.type = typeIn; + this.title = titleComponent.getUnformattedText(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getUnformattedText(); + } + + public IToast.Visibility draw(GuiToast toastGui, long delta) + { + if (this.newDisplay) + { + this.firstDrawTime = delta; + this.newDisplay = false; + } + + toastGui.getMinecraft().getTextureManager().bindTexture(TEXTURE_TOASTS); + GlStateManager.color(1.0F, 1.0F, 1.0F); + toastGui.drawTexturedModalRect(0, 0, 0, 64, 160, 32); + + if (this.subtitle == null) + { + toastGui.getMinecraft().fontRenderer.drawString(this.title, 18, 12, -256); + } + else + { + toastGui.getMinecraft().fontRenderer.drawString(this.title, 18, 7, -256); + toastGui.getMinecraft().fontRenderer.drawString(this.subtitle, 18, 18, -1); + } + + return delta - this.firstDrawTime < 5000L ? IToast.Visibility.SHOW : IToast.Visibility.HIDE; + } + + public void setDisplayedText(ITextComponent titleComponent, @Nullable ITextComponent subtitleComponent) + { + this.title = titleComponent.getUnformattedText(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getUnformattedText(); + this.newDisplay = true; + } + + public SystemToast.Type getType() + { + return this.type; + } + + public static void addOrUpdate(GuiToast p_193657_0_, SystemToast.Type p_193657_1_, ITextComponent p_193657_2_, @Nullable ITextComponent p_193657_3_) + { + SystemToast systemtoast = (SystemToast)p_193657_0_.getToast(SystemToast.class, p_193657_1_); + + if (systemtoast == null) + { + p_193657_0_.add(new SystemToast(p_193657_1_, p_193657_2_, p_193657_3_)); + } + else + { + systemtoast.setDisplayedText(p_193657_2_, p_193657_3_); + } + } + + @SideOnly(Side.CLIENT) + public static enum Type + { + TUTORIAL_HINT, + NARRATOR_TOGGLE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/TutorialToast.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/TutorialToast.java new file mode 100644 index 0000000..5539a7e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/TutorialToast.java @@ -0,0 +1,109 @@ +package net.minecraft.client.gui.toasts; + +import javax.annotation.Nullable; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TutorialToast implements IToast +{ + private final TutorialToast.Icons icon; + private final String title; + private final String subtitle; + private IToast.Visibility visibility = IToast.Visibility.SHOW; + private long lastDelta; + private float displayedProgress; + private float currentProgress; + private final boolean hasProgressBar; + + public TutorialToast(TutorialToast.Icons iconIn, ITextComponent titleComponent, @Nullable ITextComponent subtitleComponent, boolean drawProgressBar) + { + this.icon = iconIn; + this.title = titleComponent.getFormattedText(); + this.subtitle = subtitleComponent == null ? null : subtitleComponent.getFormattedText(); + this.hasProgressBar = drawProgressBar; + } + + public IToast.Visibility draw(GuiToast toastGui, long delta) + { + toastGui.getMinecraft().getTextureManager().bindTexture(TEXTURE_TOASTS); + GlStateManager.color(1.0F, 1.0F, 1.0F); + toastGui.drawTexturedModalRect(0, 0, 0, 96, 160, 32); + this.icon.draw(toastGui, 6, 6); + + if (this.subtitle == null) + { + toastGui.getMinecraft().fontRenderer.drawString(this.title, 30, 12, -11534256); + } + else + { + toastGui.getMinecraft().fontRenderer.drawString(this.title, 30, 7, -11534256); + toastGui.getMinecraft().fontRenderer.drawString(this.subtitle, 30, 18, -16777216); + } + + if (this.hasProgressBar) + { + Gui.drawRect(3, 28, 157, 29, -1); + float f = (float)MathHelper.clampedLerp((double)this.displayedProgress, (double)this.currentProgress, (double)((float)(delta - this.lastDelta) / 100.0F)); + int i; + + if (this.currentProgress >= this.displayedProgress) + { + i = -16755456; + } + else + { + i = -11206656; + } + + Gui.drawRect(3, 28, (int)(3.0F + 154.0F * f), 29, i); + this.displayedProgress = f; + this.lastDelta = delta; + } + + return this.visibility; + } + + public void hide() + { + this.visibility = IToast.Visibility.HIDE; + } + + public void setProgress(float progress) + { + this.currentProgress = progress; + } + + @SideOnly(Side.CLIENT) + public static enum Icons + { + MOVEMENT_KEYS(0, 0), + MOUSE(1, 0), + TREE(2, 0), + RECIPE_BOOK(0, 1), + WOODEN_PLANKS(1, 1); + + private final int column; + private final int row; + + private Icons(int columnIn, int rowIn) + { + this.column = columnIn; + this.row = rowIn; + } + + /** + * Draws the icon at the specified position in the specified Gui + */ + public void draw(Gui guiIn, int x, int y) + { + GlStateManager.enableBlend(); + guiIn.drawTexturedModalRect(x, y, 176 + this.column * 20, this.row * 20, 20, 20); + GlStateManager.enableBlend(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/package-info.java new file mode 100644 index 0000000..3adf336 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/gui/toasts/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.gui.toasts; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/main/GameConfiguration.java b/build/tmp/recompileMc/sources/net/minecraft/client/main/GameConfiguration.java new file mode 100644 index 0000000..ab73357 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/main/GameConfiguration.java @@ -0,0 +1,115 @@ +package net.minecraft.client.main; + +import com.mojang.authlib.properties.PropertyMap; +import java.io.File; +import java.net.Proxy; +import javax.annotation.Nullable; +import net.minecraft.client.resources.ResourceIndex; +import net.minecraft.client.resources.ResourceIndexFolder; +import net.minecraft.util.Session; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GameConfiguration +{ + public final GameConfiguration.UserInformation userInfo; + public final GameConfiguration.DisplayInformation displayInfo; + public final GameConfiguration.FolderInformation folderInfo; + public final GameConfiguration.GameInformation gameInfo; + public final GameConfiguration.ServerInformation serverInfo; + + public GameConfiguration(GameConfiguration.UserInformation userInfoIn, GameConfiguration.DisplayInformation displayInfoIn, GameConfiguration.FolderInformation folderInfoIn, GameConfiguration.GameInformation gameInfoIn, GameConfiguration.ServerInformation serverInfoIn) + { + this.userInfo = userInfoIn; + this.displayInfo = displayInfoIn; + this.folderInfo = folderInfoIn; + this.gameInfo = gameInfoIn; + this.serverInfo = serverInfoIn; + } + + @SideOnly(Side.CLIENT) + public static class DisplayInformation + { + public final int width; + public final int height; + public final boolean fullscreen; + public final boolean checkGlErrors; + + public DisplayInformation(int widthIn, int heightIn, boolean fullscreenIn, boolean checkGlErrorsIn) + { + this.width = widthIn; + this.height = heightIn; + this.fullscreen = fullscreenIn; + this.checkGlErrors = checkGlErrorsIn; + } + } + + @SideOnly(Side.CLIENT) + public static class FolderInformation + { + public final File mcDataDir; + public final File resourcePacksDir; + public final File assetsDir; + public final String assetIndex; + + public FolderInformation(File mcDataDirIn, File resourcePacksDirIn, File assetsDirIn, @Nullable String assetIndexIn) + { + this.mcDataDir = mcDataDirIn; + this.resourcePacksDir = resourcePacksDirIn; + this.assetsDir = assetsDirIn; + this.assetIndex = assetIndexIn; + } + + public ResourceIndex getAssetsIndex() + { + return (ResourceIndex)(this.assetIndex == null ? new ResourceIndexFolder(this.assetsDir) : new ResourceIndex(this.assetsDir, this.assetIndex)); + } + } + + @SideOnly(Side.CLIENT) + public static class GameInformation + { + public final boolean isDemo; + public final String version; + /** Defaults to "release" */ + public final String versionType; + + public GameInformation(boolean demo, String versionIn, String versionTypeIn) + { + this.isDemo = demo; + this.version = versionIn; + this.versionType = versionTypeIn; + } + } + + @SideOnly(Side.CLIENT) + public static class ServerInformation + { + public final String serverName; + public final int serverPort; + + public ServerInformation(String serverNameIn, int serverPortIn) + { + this.serverName = serverNameIn; + this.serverPort = serverPortIn; + } + } + + @SideOnly(Side.CLIENT) + public static class UserInformation + { + public final Session session; + public final PropertyMap userProperties; + public final PropertyMap profileProperties; + public final Proxy proxy; + + public UserInformation(Session sessionIn, PropertyMap userPropertiesIn, PropertyMap profilePropertiesIn, Proxy proxyIn) + { + this.session = sessionIn; + this.userProperties = userPropertiesIn; + this.profileProperties = profilePropertiesIn; + this.proxy = proxyIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/main/Main.java b/build/tmp/recompileMc/sources/net/minecraft/client/main/Main.java new file mode 100644 index 0000000..74df7bb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/main/Main.java @@ -0,0 +1,128 @@ +package net.minecraft.client.main; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.mojang.authlib.properties.PropertyMap; +import com.mojang.authlib.properties.PropertyMap.Serializer; +import java.io.File; +import java.net.Authenticator; +import java.net.InetSocketAddress; +import java.net.PasswordAuthentication; +import java.net.Proxy; +import java.net.Proxy.Type; +import java.util.List; +import joptsimple.OptionParser; +import joptsimple.OptionSet; +import joptsimple.OptionSpec; +import net.minecraft.client.Minecraft; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.Session; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Main +{ + public static void main(String[] p_main_0_) + { + OptionParser optionparser = new OptionParser(); + optionparser.allowsUnrecognizedOptions(); + optionparser.accepts("demo"); + optionparser.accepts("fullscreen"); + optionparser.accepts("checkGlErrors"); + OptionSpec optionspec = optionparser.accepts("server").withRequiredArg(); + OptionSpec optionspec1 = optionparser.accepts("port").withRequiredArg().ofType(Integer.class).defaultsTo(Integer.valueOf(25565)); + OptionSpec optionspec2 = optionparser.accepts("gameDir").withRequiredArg().ofType(File.class).defaultsTo(new File(".")); + OptionSpec optionspec3 = optionparser.accepts("assetsDir").withRequiredArg().ofType(File.class); + OptionSpec optionspec4 = optionparser.accepts("resourcePackDir").withRequiredArg().ofType(File.class); + OptionSpec optionspec5 = optionparser.accepts("proxyHost").withRequiredArg(); + OptionSpec optionspec6 = optionparser.accepts("proxyPort").withRequiredArg().defaultsTo("8080").ofType(Integer.class); + OptionSpec optionspec7 = optionparser.accepts("proxyUser").withRequiredArg(); + OptionSpec optionspec8 = optionparser.accepts("proxyPass").withRequiredArg(); + OptionSpec optionspec9 = optionparser.accepts("username").withRequiredArg().defaultsTo("Player" + Minecraft.getSystemTime() % 1000L); + OptionSpec optionspec10 = optionparser.accepts("uuid").withRequiredArg(); + OptionSpec optionspec11 = optionparser.accepts("accessToken").withRequiredArg().required(); + OptionSpec optionspec12 = optionparser.accepts("version").withRequiredArg().required(); + OptionSpec optionspec13 = optionparser.accepts("width").withRequiredArg().ofType(Integer.class).defaultsTo(Integer.valueOf(854)); + OptionSpec optionspec14 = optionparser.accepts("height").withRequiredArg().ofType(Integer.class).defaultsTo(Integer.valueOf(480)); + OptionSpec optionspec15 = optionparser.accepts("userProperties").withRequiredArg().defaultsTo("{}"); + OptionSpec optionspec16 = optionparser.accepts("profileProperties").withRequiredArg().defaultsTo("{}"); + OptionSpec optionspec17 = optionparser.accepts("assetIndex").withRequiredArg(); + OptionSpec optionspec18 = optionparser.accepts("userType").withRequiredArg().defaultsTo("legacy"); + OptionSpec optionspec19 = optionparser.accepts("versionType").withRequiredArg().defaultsTo("release"); + OptionSpec optionspec20 = optionparser.nonOptions(); + OptionSet optionset = optionparser.parse(p_main_0_); + List list = optionset.valuesOf(optionspec20); + + if (!list.isEmpty()) + { + System.out.println("Completely ignored arguments: " + list); + } + + String s = (String)optionset.valueOf(optionspec5); + Proxy proxy = Proxy.NO_PROXY; + + if (s != null) + { + try + { + proxy = new Proxy(Type.SOCKS, new InetSocketAddress(s, ((Integer)optionset.valueOf(optionspec6)).intValue())); + } + catch (Exception var48) + { + ; + } + } + + final String s1 = (String)optionset.valueOf(optionspec7); + final String s2 = (String)optionset.valueOf(optionspec8); + + if (!proxy.equals(Proxy.NO_PROXY) && isNullOrEmpty(s1) && isNullOrEmpty(s2)) + { + Authenticator.setDefault(new Authenticator() + { + protected PasswordAuthentication getPasswordAuthentication() + { + return new PasswordAuthentication(s1, s2.toCharArray()); + } + }); + } + + int i = ((Integer)optionset.valueOf(optionspec13)).intValue(); + int j = ((Integer)optionset.valueOf(optionspec14)).intValue(); + boolean flag = optionset.has("fullscreen"); + boolean flag1 = optionset.has("checkGlErrors"); + boolean flag2 = optionset.has("demo"); + String s3 = (String)optionset.valueOf(optionspec12); + Gson gson = (new GsonBuilder()).registerTypeAdapter(PropertyMap.class, new Serializer()).create(); + PropertyMap propertymap = (PropertyMap)JsonUtils.gsonDeserialize(gson, (String)optionset.valueOf(optionspec15), PropertyMap.class); + PropertyMap propertymap1 = (PropertyMap)JsonUtils.gsonDeserialize(gson, (String)optionset.valueOf(optionspec16), PropertyMap.class); + String s4 = (String)optionset.valueOf(optionspec19); + File file1 = (File)optionset.valueOf(optionspec2); + File file2 = optionset.has(optionspec3) ? (File)optionset.valueOf(optionspec3) : new File(file1, "assets/"); + File file3 = optionset.has(optionspec4) ? (File)optionset.valueOf(optionspec4) : new File(file1, "resourcepacks/"); + String s5 = optionset.has(optionspec10) ? (String)optionspec10.value(optionset) : (String)optionspec9.value(optionset); + String s6 = optionset.has(optionspec17) ? (String)optionspec17.value(optionset) : null; + String s7 = (String)optionset.valueOf(optionspec); + Integer integer = (Integer)optionset.valueOf(optionspec1); + Session session = new Session(optionspec9.value(optionset), s5, optionspec11.value(optionset), optionspec18.value(optionset)); + GameConfiguration gameconfiguration = new GameConfiguration(new GameConfiguration.UserInformation(session, propertymap, propertymap1, proxy), new GameConfiguration.DisplayInformation(i, j, flag, flag1), new GameConfiguration.FolderInformation(file1, file3, file2, s6), new GameConfiguration.GameInformation(flag2, s3, s4), new GameConfiguration.ServerInformation(s7, integer.intValue())); + Runtime.getRuntime().addShutdownHook(new Thread("Client Shutdown Thread") + { + public void run() + { + Minecraft.stopIntegratedServer(); + } + }); + Thread.currentThread().setName("Client thread"); + (new Minecraft(gameconfiguration)).run(); + } + + /** + * Returns whether a string is either null or empty. + */ + private static boolean isNullOrEmpty(String str) + { + return str != null && !str.isEmpty(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/main/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/main/package-info.java new file mode 100644 index 0000000..fbc9b8b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/main/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.main; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/IMultipassModel.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/IMultipassModel.java new file mode 100644 index 0000000..a7d74de --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/IMultipassModel.java @@ -0,0 +1,11 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IMultipassModel +{ + void renderMultipass(Entity p_187054_1_, float p_187054_2_, float p_187054_3_, float p_187054_4_, float p_187054_5_, float p_187054_6_, float scale); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelArmorStand.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelArmorStand.java new file mode 100644 index 0000000..3b9d025 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelArmorStand.java @@ -0,0 +1,136 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.util.EnumHandSide; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelArmorStand extends ModelArmorStandArmor +{ + public ModelRenderer standRightSide; + public ModelRenderer standLeftSide; + public ModelRenderer standWaist; + public ModelRenderer standBase; + + public ModelArmorStand() + { + this(0.0F); + } + + public ModelArmorStand(float modelSize) + { + super(modelSize, 64, 64); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-1.0F, -7.0F, -1.0F, 2, 7, 2, modelSize); + this.bipedHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedBody = new ModelRenderer(this, 0, 26); + this.bipedBody.addBox(-6.0F, 0.0F, -1.5F, 12, 3, 3, modelSize); + this.bipedBody.setRotationPoint(0.0F, 0.0F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 24, 0); + this.bipedRightArm.addBox(-2.0F, -2.0F, -1.0F, 2, 12, 2, modelSize); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 32, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(0.0F, -2.0F, -1.0F, 2, 12, 2, modelSize); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 8, 0); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 11, 2, modelSize); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 40, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 11, 2, modelSize); + this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F, 0.0F); + this.standRightSide = new ModelRenderer(this, 16, 0); + this.standRightSide.addBox(-3.0F, 3.0F, -1.0F, 2, 7, 2, modelSize); + this.standRightSide.setRotationPoint(0.0F, 0.0F, 0.0F); + this.standRightSide.showModel = true; + this.standLeftSide = new ModelRenderer(this, 48, 16); + this.standLeftSide.addBox(1.0F, 3.0F, -1.0F, 2, 7, 2, modelSize); + this.standLeftSide.setRotationPoint(0.0F, 0.0F, 0.0F); + this.standWaist = new ModelRenderer(this, 0, 48); + this.standWaist.addBox(-4.0F, 10.0F, -1.0F, 8, 2, 2, modelSize); + this.standWaist.setRotationPoint(0.0F, 0.0F, 0.0F); + this.standBase = new ModelRenderer(this, 0, 32); + this.standBase.addBox(-6.0F, 11.0F, -6.0F, 12, 1, 12, modelSize); + this.standBase.setRotationPoint(0.0F, 12.0F, 0.0F); + this.bipedHeadwear.showModel = false; + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + + if (entityIn instanceof EntityArmorStand) + { + EntityArmorStand entityarmorstand = (EntityArmorStand)entityIn; + this.bipedLeftArm.showModel = entityarmorstand.getShowArms(); + this.bipedRightArm.showModel = entityarmorstand.getShowArms(); + this.standBase.showModel = !entityarmorstand.hasNoBasePlate(); + this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F, 0.0F); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F, 0.0F); + this.standRightSide.rotateAngleX = 0.017453292F * entityarmorstand.getBodyRotation().getX(); + this.standRightSide.rotateAngleY = 0.017453292F * entityarmorstand.getBodyRotation().getY(); + this.standRightSide.rotateAngleZ = 0.017453292F * entityarmorstand.getBodyRotation().getZ(); + this.standLeftSide.rotateAngleX = 0.017453292F * entityarmorstand.getBodyRotation().getX(); + this.standLeftSide.rotateAngleY = 0.017453292F * entityarmorstand.getBodyRotation().getY(); + this.standLeftSide.rotateAngleZ = 0.017453292F * entityarmorstand.getBodyRotation().getZ(); + this.standWaist.rotateAngleX = 0.017453292F * entityarmorstand.getBodyRotation().getX(); + this.standWaist.rotateAngleY = 0.017453292F * entityarmorstand.getBodyRotation().getY(); + this.standWaist.rotateAngleZ = 0.017453292F * entityarmorstand.getBodyRotation().getZ(); + this.standBase.rotateAngleX = 0.0F; + this.standBase.rotateAngleY = 0.017453292F * -entityIn.rotationYaw; + this.standBase.rotateAngleZ = 0.0F; + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.pushMatrix(); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.standRightSide.render(scale); + this.standLeftSide.render(scale); + this.standWaist.render(scale); + this.standBase.render(scale); + } + else + { + if (entityIn.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + + this.standRightSide.render(scale); + this.standLeftSide.render(scale); + this.standWaist.render(scale); + this.standBase.render(scale); + } + + GlStateManager.popMatrix(); + } + + public void postRenderArm(float scale, EnumHandSide side) + { + ModelRenderer modelrenderer = this.getArmForSide(side); + boolean flag = modelrenderer.showModel; + modelrenderer.showModel = true; + super.postRenderArm(scale, side); + modelrenderer.showModel = flag; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelArmorStandArmor.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelArmorStandArmor.java new file mode 100644 index 0000000..e14cd72 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelArmorStandArmor.java @@ -0,0 +1,60 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelArmorStandArmor extends ModelBiped +{ + public ModelArmorStandArmor() + { + this(0.0F); + } + + public ModelArmorStandArmor(float modelSize) + { + this(modelSize, 64, 32); + } + + protected ModelArmorStandArmor(float modelSize, int textureWidthIn, int textureHeightIn) + { + super(modelSize, 0.0F, textureWidthIn, textureHeightIn); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + if (entityIn instanceof EntityArmorStand) + { + EntityArmorStand entityarmorstand = (EntityArmorStand)entityIn; + this.bipedHead.rotateAngleX = 0.017453292F * entityarmorstand.getHeadRotation().getX(); + this.bipedHead.rotateAngleY = 0.017453292F * entityarmorstand.getHeadRotation().getY(); + this.bipedHead.rotateAngleZ = 0.017453292F * entityarmorstand.getHeadRotation().getZ(); + this.bipedHead.setRotationPoint(0.0F, 1.0F, 0.0F); + this.bipedBody.rotateAngleX = 0.017453292F * entityarmorstand.getBodyRotation().getX(); + this.bipedBody.rotateAngleY = 0.017453292F * entityarmorstand.getBodyRotation().getY(); + this.bipedBody.rotateAngleZ = 0.017453292F * entityarmorstand.getBodyRotation().getZ(); + this.bipedLeftArm.rotateAngleX = 0.017453292F * entityarmorstand.getLeftArmRotation().getX(); + this.bipedLeftArm.rotateAngleY = 0.017453292F * entityarmorstand.getLeftArmRotation().getY(); + this.bipedLeftArm.rotateAngleZ = 0.017453292F * entityarmorstand.getLeftArmRotation().getZ(); + this.bipedRightArm.rotateAngleX = 0.017453292F * entityarmorstand.getRightArmRotation().getX(); + this.bipedRightArm.rotateAngleY = 0.017453292F * entityarmorstand.getRightArmRotation().getY(); + this.bipedRightArm.rotateAngleZ = 0.017453292F * entityarmorstand.getRightArmRotation().getZ(); + this.bipedLeftLeg.rotateAngleX = 0.017453292F * entityarmorstand.getLeftLegRotation().getX(); + this.bipedLeftLeg.rotateAngleY = 0.017453292F * entityarmorstand.getLeftLegRotation().getY(); + this.bipedLeftLeg.rotateAngleZ = 0.017453292F * entityarmorstand.getLeftLegRotation().getZ(); + this.bipedLeftLeg.setRotationPoint(1.9F, 11.0F, 0.0F); + this.bipedRightLeg.rotateAngleX = 0.017453292F * entityarmorstand.getRightLegRotation().getX(); + this.bipedRightLeg.rotateAngleY = 0.017453292F * entityarmorstand.getRightLegRotation().getY(); + this.bipedRightLeg.rotateAngleZ = 0.017453292F * entityarmorstand.getRightLegRotation().getZ(); + this.bipedRightLeg.setRotationPoint(-1.9F, 11.0F, 0.0F); + copyModelAngles(this.bipedHead, this.bipedHeadwear); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBanner.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBanner.java new file mode 100644 index 0000000..373a8db --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBanner.java @@ -0,0 +1,35 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBanner extends ModelBase +{ + public ModelRenderer bannerSlate; + public ModelRenderer bannerStand; + public ModelRenderer bannerTop; + + public ModelBanner() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.bannerSlate = new ModelRenderer(this, 0, 0); + this.bannerSlate.addBox(-10.0F, 0.0F, -2.0F, 20, 40, 1, 0.0F); + this.bannerStand = new ModelRenderer(this, 44, 0); + this.bannerStand.addBox(-1.0F, -30.0F, -1.0F, 2, 42, 2, 0.0F); + this.bannerTop = new ModelRenderer(this, 0, 42); + this.bannerTop.addBox(-10.0F, -32.0F, -1.0F, 20, 2, 2, 0.0F); + } + + /** + * Renders the banner model in. + */ + public void renderBanner() + { + this.bannerSlate.rotationPointY = -32.0F; + this.bannerSlate.render(0.0625F); + this.bannerStand.render(0.0625F); + this.bannerTop.render(0.0625F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBase.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBase.java new file mode 100644 index 0000000..75e12d6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBase.java @@ -0,0 +1,84 @@ +package net.minecraft.client.model; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import java.util.Random; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class ModelBase +{ + public float swingProgress; + public boolean isRiding; + public boolean isChild = true; + /** This is a list of all the boxes (ModelRenderer.class) in the current model. */ + public List boxList = Lists.newArrayList(); + /** A mapping for all texture offsets */ + private final Map modelTextureMap = Maps.newHashMap(); + public int textureWidth = 64; + public int textureHeight = 32; + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + } + + public ModelRenderer getRandomModelBox(Random rand) + { + return this.boxList.get(rand.nextInt(this.boxList.size())); + } + + protected void setTextureOffset(String partName, int x, int y) + { + this.modelTextureMap.put(partName, new TextureOffset(x, y)); + } + + public TextureOffset getTextureOffset(String partName) + { + return this.modelTextureMap.get(partName); + } + + /** + * Copies the angles from one object to another. This is used when objects should stay aligned with each other, like + * the hair over a players head. + */ + public static void copyModelAngles(ModelRenderer source, ModelRenderer dest) + { + dest.rotateAngleX = source.rotateAngleX; + dest.rotateAngleY = source.rotateAngleY; + dest.rotateAngleZ = source.rotateAngleZ; + dest.rotationPointX = source.rotationPointX; + dest.rotationPointY = source.rotationPointY; + dest.rotationPointZ = source.rotationPointZ; + } + + public void setModelAttributes(ModelBase model) + { + this.swingProgress = model.swingProgress; + this.isRiding = model.isRiding; + this.isChild = model.isChild; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBat.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBat.java new file mode 100644 index 0000000..77e7702 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBat.java @@ -0,0 +1,107 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBat extends ModelBase +{ + private final ModelRenderer batHead; + /** The body box of the bat model. */ + private final ModelRenderer batBody; + /** The inner right wing box of the bat model. */ + private final ModelRenderer batRightWing; + /** The inner left wing box of the bat model. */ + private final ModelRenderer batLeftWing; + /** The outer right wing box of the bat model. */ + private final ModelRenderer batOuterRightWing; + /** The outer left wing box of the bat model. */ + private final ModelRenderer batOuterLeftWing; + + public ModelBat() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.batHead = new ModelRenderer(this, 0, 0); + this.batHead.addBox(-3.0F, -3.0F, -3.0F, 6, 6, 6); + ModelRenderer modelrenderer = new ModelRenderer(this, 24, 0); + modelrenderer.addBox(-4.0F, -6.0F, -2.0F, 3, 4, 1); + this.batHead.addChild(modelrenderer); + ModelRenderer modelrenderer1 = new ModelRenderer(this, 24, 0); + modelrenderer1.mirror = true; + modelrenderer1.addBox(1.0F, -6.0F, -2.0F, 3, 4, 1); + this.batHead.addChild(modelrenderer1); + this.batBody = new ModelRenderer(this, 0, 16); + this.batBody.addBox(-3.0F, 4.0F, -3.0F, 6, 12, 6); + this.batBody.setTextureOffset(0, 34).addBox(-5.0F, 16.0F, 0.0F, 10, 6, 1); + this.batRightWing = new ModelRenderer(this, 42, 0); + this.batRightWing.addBox(-12.0F, 1.0F, 1.5F, 10, 16, 1); + this.batOuterRightWing = new ModelRenderer(this, 24, 16); + this.batOuterRightWing.setRotationPoint(-12.0F, 1.0F, 1.5F); + this.batOuterRightWing.addBox(-8.0F, 1.0F, 0.0F, 8, 12, 1); + this.batLeftWing = new ModelRenderer(this, 42, 0); + this.batLeftWing.mirror = true; + this.batLeftWing.addBox(2.0F, 1.0F, 1.5F, 10, 16, 1); + this.batOuterLeftWing = new ModelRenderer(this, 24, 16); + this.batOuterLeftWing.mirror = true; + this.batOuterLeftWing.setRotationPoint(12.0F, 1.0F, 1.5F); + this.batOuterLeftWing.addBox(0.0F, 1.0F, 0.0F, 8, 12, 1); + this.batBody.addChild(this.batRightWing); + this.batBody.addChild(this.batLeftWing); + this.batRightWing.addChild(this.batOuterRightWing); + this.batLeftWing.addChild(this.batOuterLeftWing); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.batHead.render(scale); + this.batBody.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + if (((EntityBat)entityIn).getIsBatHanging()) + { + this.batHead.rotateAngleX = headPitch * 0.017453292F; + this.batHead.rotateAngleY = (float)Math.PI - netHeadYaw * 0.017453292F; + this.batHead.rotateAngleZ = (float)Math.PI; + this.batHead.setRotationPoint(0.0F, -2.0F, 0.0F); + this.batRightWing.setRotationPoint(-3.0F, 0.0F, 3.0F); + this.batLeftWing.setRotationPoint(3.0F, 0.0F, 3.0F); + this.batBody.rotateAngleX = (float)Math.PI; + this.batRightWing.rotateAngleX = -0.15707964F; + this.batRightWing.rotateAngleY = -((float)Math.PI * 2F / 5F); + this.batOuterRightWing.rotateAngleY = -1.7278761F; + this.batLeftWing.rotateAngleX = this.batRightWing.rotateAngleX; + this.batLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY; + this.batOuterLeftWing.rotateAngleY = -this.batOuterRightWing.rotateAngleY; + } + else + { + this.batHead.rotateAngleX = headPitch * 0.017453292F; + this.batHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.batHead.rotateAngleZ = 0.0F; + this.batHead.setRotationPoint(0.0F, 0.0F, 0.0F); + this.batRightWing.setRotationPoint(0.0F, 0.0F, 0.0F); + this.batLeftWing.setRotationPoint(0.0F, 0.0F, 0.0F); + this.batBody.rotateAngleX = ((float)Math.PI / 4F) + MathHelper.cos(ageInTicks * 0.1F) * 0.15F; + this.batBody.rotateAngleY = 0.0F; + this.batRightWing.rotateAngleY = MathHelper.cos(ageInTicks * 1.3F) * (float)Math.PI * 0.25F; + this.batLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY; + this.batOuterRightWing.rotateAngleY = this.batRightWing.rotateAngleY * 0.5F; + this.batOuterLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY * 0.5F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBed.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBed.java new file mode 100644 index 0000000..fb918e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBed.java @@ -0,0 +1,63 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBed extends ModelBase +{ + public ModelRenderer headPiece; + public ModelRenderer footPiece; + public ModelRenderer[] legs = new ModelRenderer[4]; + + public ModelBed() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.headPiece = new ModelRenderer(this, 0, 0); + this.headPiece.addBox(0.0F, 0.0F, 0.0F, 16, 16, 6, 0.0F); + this.footPiece = new ModelRenderer(this, 0, 22); + this.footPiece.addBox(0.0F, 0.0F, 0.0F, 16, 16, 6, 0.0F); + this.legs[0] = new ModelRenderer(this, 50, 0); + this.legs[1] = new ModelRenderer(this, 50, 6); + this.legs[2] = new ModelRenderer(this, 50, 12); + this.legs[3] = new ModelRenderer(this, 50, 18); + this.legs[0].addBox(0.0F, 6.0F, -16.0F, 3, 3, 3); + this.legs[1].addBox(0.0F, 6.0F, 0.0F, 3, 3, 3); + this.legs[2].addBox(-16.0F, 6.0F, -16.0F, 3, 3, 3); + this.legs[3].addBox(-16.0F, 6.0F, 0.0F, 3, 3, 3); + this.legs[0].rotateAngleX = ((float)Math.PI / 2F); + this.legs[1].rotateAngleX = ((float)Math.PI / 2F); + this.legs[2].rotateAngleX = ((float)Math.PI / 2F); + this.legs[3].rotateAngleX = ((float)Math.PI / 2F); + this.legs[0].rotateAngleZ = 0.0F; + this.legs[1].rotateAngleZ = ((float)Math.PI / 2F); + this.legs[2].rotateAngleZ = ((float)Math.PI * 3F / 2F); + this.legs[3].rotateAngleZ = (float)Math.PI; + } + + public int getModelVersion() + { + return 51; + } + + public void render() + { + this.headPiece.render(0.0625F); + this.footPiece.render(0.0625F); + this.legs[0].render(0.0625F); + this.legs[1].render(0.0625F); + this.legs[2].render(0.0625F); + this.legs[3].render(0.0625F); + } + + public void preparePiece(boolean p_193769_1_) + { + this.headPiece.showModel = p_193769_1_; + this.footPiece.showModel = !p_193769_1_; + this.legs[0].showModel = !p_193769_1_; + this.legs[1].showModel = p_193769_1_; + this.legs[2].showModel = !p_193769_1_; + this.legs[3].showModel = p_193769_1_; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBiped.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBiped.java new file mode 100644 index 0000000..541e98e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBiped.java @@ -0,0 +1,339 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBiped extends ModelBase +{ + public ModelRenderer bipedHead; + /** The Biped's Headwear. Used for the outer layer of player skins. */ + public ModelRenderer bipedHeadwear; + public ModelRenderer bipedBody; + /** The Biped's Right Arm */ + public ModelRenderer bipedRightArm; + /** The Biped's Left Arm */ + public ModelRenderer bipedLeftArm; + /** The Biped's Right Leg */ + public ModelRenderer bipedRightLeg; + /** The Biped's Left Leg */ + public ModelRenderer bipedLeftLeg; + public ModelBiped.ArmPose leftArmPose; + public ModelBiped.ArmPose rightArmPose; + public boolean isSneak; + + public ModelBiped() + { + this(0.0F); + } + + public ModelBiped(float modelSize) + { + this(modelSize, 0.0F, 64, 32); + } + + public ModelBiped(float modelSize, float p_i1149_2_, int textureWidthIn, int textureHeightIn) + { + this.leftArmPose = ModelBiped.ArmPose.EMPTY; + this.rightArmPose = ModelBiped.ArmPose.EMPTY; + this.textureWidth = textureWidthIn; + this.textureHeight = textureHeightIn; + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, modelSize); + this.bipedHead.setRotationPoint(0.0F, 0.0F + p_i1149_2_, 0.0F); + this.bipedHeadwear = new ModelRenderer(this, 32, 0); + this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, modelSize + 0.5F); + this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + p_i1149_2_, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, modelSize); + this.bipedBody.setRotationPoint(0.0F, 0.0F + p_i1149_2_, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, modelSize); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + p_i1149_2_, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, modelSize); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + p_i1149_2_, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F + p_i1149_2_, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize); + this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F + p_i1149_2_, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + GlStateManager.pushMatrix(); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.scale(0.75F, 0.75F, 0.75F); + GlStateManager.translate(0.0F, 16.0F * scale, 0.0F); + this.bipedHead.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.bipedBody.render(scale); + this.bipedRightArm.render(scale); + this.bipedLeftArm.render(scale); + this.bipedRightLeg.render(scale); + this.bipedLeftLeg.render(scale); + this.bipedHeadwear.render(scale); + } + else + { + if (entityIn.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + + this.bipedHead.render(scale); + this.bipedBody.render(scale); + this.bipedRightArm.render(scale); + this.bipedLeftArm.render(scale); + this.bipedRightLeg.render(scale); + this.bipedLeftLeg.render(scale); + this.bipedHeadwear.render(scale); + } + + GlStateManager.popMatrix(); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + @SuppressWarnings("incomplete-switch") + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + boolean flag = entityIn instanceof EntityLivingBase && ((EntityLivingBase)entityIn).getTicksElytraFlying() > 4; + this.bipedHead.rotateAngleY = netHeadYaw * 0.017453292F; + + if (flag) + { + this.bipedHead.rotateAngleX = -((float)Math.PI / 4F); + } + else + { + this.bipedHead.rotateAngleX = headPitch * 0.017453292F; + } + + this.bipedBody.rotateAngleY = 0.0F; + this.bipedRightArm.rotationPointZ = 0.0F; + this.bipedRightArm.rotationPointX = -5.0F; + this.bipedLeftArm.rotationPointZ = 0.0F; + this.bipedLeftArm.rotationPointX = 5.0F; + float f = 1.0F; + + if (flag) + { + f = (float)(entityIn.motionX * entityIn.motionX + entityIn.motionY * entityIn.motionY + entityIn.motionZ * entityIn.motionZ); + f = f / 0.2F; + f = f * f * f; + } + + if (f < 1.0F) + { + f = 1.0F; + } + + this.bipedRightArm.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 2.0F * limbSwingAmount * 0.5F / f; + this.bipedLeftArm.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 2.0F * limbSwingAmount * 0.5F / f; + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount / f; + this.bipedLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount / f; + this.bipedRightLeg.rotateAngleY = 0.0F; + this.bipedLeftLeg.rotateAngleY = 0.0F; + this.bipedRightLeg.rotateAngleZ = 0.0F; + this.bipedLeftLeg.rotateAngleZ = 0.0F; + + if (this.isRiding) + { + this.bipedRightArm.rotateAngleX += -((float)Math.PI / 5F); + this.bipedLeftArm.rotateAngleX += -((float)Math.PI / 5F); + this.bipedRightLeg.rotateAngleX = -1.4137167F; + this.bipedRightLeg.rotateAngleY = ((float)Math.PI / 10F); + this.bipedRightLeg.rotateAngleZ = 0.07853982F; + this.bipedLeftLeg.rotateAngleX = -1.4137167F; + this.bipedLeftLeg.rotateAngleY = -((float)Math.PI / 10F); + this.bipedLeftLeg.rotateAngleZ = -0.07853982F; + } + + this.bipedRightArm.rotateAngleY = 0.0F; + this.bipedRightArm.rotateAngleZ = 0.0F; + + switch (this.leftArmPose) + { + case EMPTY: + this.bipedLeftArm.rotateAngleY = 0.0F; + break; + case BLOCK: + this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - 0.9424779F; + this.bipedLeftArm.rotateAngleY = 0.5235988F; + break; + case ITEM: + this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - ((float)Math.PI / 10F); + this.bipedLeftArm.rotateAngleY = 0.0F; + } + + switch (this.rightArmPose) + { + case EMPTY: + this.bipedRightArm.rotateAngleY = 0.0F; + break; + case BLOCK: + this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - 0.9424779F; + this.bipedRightArm.rotateAngleY = -0.5235988F; + break; + case ITEM: + this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - ((float)Math.PI / 10F); + this.bipedRightArm.rotateAngleY = 0.0F; + } + + if (this.swingProgress > 0.0F) + { + EnumHandSide enumhandside = this.getMainHand(entityIn); + ModelRenderer modelrenderer = this.getArmForSide(enumhandside); + float f1 = this.swingProgress; + this.bipedBody.rotateAngleY = MathHelper.sin(MathHelper.sqrt(f1) * ((float)Math.PI * 2F)) * 0.2F; + + if (enumhandside == EnumHandSide.LEFT) + { + this.bipedBody.rotateAngleY *= -1.0F; + } + + this.bipedRightArm.rotationPointZ = MathHelper.sin(this.bipedBody.rotateAngleY) * 5.0F; + this.bipedRightArm.rotationPointX = -MathHelper.cos(this.bipedBody.rotateAngleY) * 5.0F; + this.bipedLeftArm.rotationPointZ = -MathHelper.sin(this.bipedBody.rotateAngleY) * 5.0F; + this.bipedLeftArm.rotationPointX = MathHelper.cos(this.bipedBody.rotateAngleY) * 5.0F; + this.bipedRightArm.rotateAngleY += this.bipedBody.rotateAngleY; + this.bipedLeftArm.rotateAngleY += this.bipedBody.rotateAngleY; + this.bipedLeftArm.rotateAngleX += this.bipedBody.rotateAngleY; + f1 = 1.0F - this.swingProgress; + f1 = f1 * f1; + f1 = f1 * f1; + f1 = 1.0F - f1; + float f2 = MathHelper.sin(f1 * (float)Math.PI); + float f3 = MathHelper.sin(this.swingProgress * (float)Math.PI) * -(this.bipedHead.rotateAngleX - 0.7F) * 0.75F; + modelrenderer.rotateAngleX = (float)((double)modelrenderer.rotateAngleX - ((double)f2 * 1.2D + (double)f3)); + modelrenderer.rotateAngleY += this.bipedBody.rotateAngleY * 2.0F; + modelrenderer.rotateAngleZ += MathHelper.sin(this.swingProgress * (float)Math.PI) * -0.4F; + } + + if (this.isSneak) + { + this.bipedBody.rotateAngleX = 0.5F; + this.bipedRightArm.rotateAngleX += 0.4F; + this.bipedLeftArm.rotateAngleX += 0.4F; + this.bipedRightLeg.rotationPointZ = 4.0F; + this.bipedLeftLeg.rotationPointZ = 4.0F; + this.bipedRightLeg.rotationPointY = 9.0F; + this.bipedLeftLeg.rotationPointY = 9.0F; + this.bipedHead.rotationPointY = 1.0F; + } + else + { + this.bipedBody.rotateAngleX = 0.0F; + this.bipedRightLeg.rotationPointZ = 0.1F; + this.bipedLeftLeg.rotationPointZ = 0.1F; + this.bipedRightLeg.rotationPointY = 12.0F; + this.bipedLeftLeg.rotationPointY = 12.0F; + this.bipedHead.rotationPointY = 0.0F; + } + + this.bipedRightArm.rotateAngleZ += MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + + if (this.rightArmPose == ModelBiped.ArmPose.BOW_AND_ARROW) + { + this.bipedRightArm.rotateAngleY = -0.1F + this.bipedHead.rotateAngleY; + this.bipedLeftArm.rotateAngleY = 0.1F + this.bipedHead.rotateAngleY + 0.4F; + this.bipedRightArm.rotateAngleX = -((float)Math.PI / 2F) + this.bipedHead.rotateAngleX; + this.bipedLeftArm.rotateAngleX = -((float)Math.PI / 2F) + this.bipedHead.rotateAngleX; + } + else if (this.leftArmPose == ModelBiped.ArmPose.BOW_AND_ARROW) + { + this.bipedRightArm.rotateAngleY = -0.1F + this.bipedHead.rotateAngleY - 0.4F; + this.bipedLeftArm.rotateAngleY = 0.1F + this.bipedHead.rotateAngleY; + this.bipedRightArm.rotateAngleX = -((float)Math.PI / 2F) + this.bipedHead.rotateAngleX; + this.bipedLeftArm.rotateAngleX = -((float)Math.PI / 2F) + this.bipedHead.rotateAngleX; + } + + copyModelAngles(this.bipedHead, this.bipedHeadwear); + } + + public void setModelAttributes(ModelBase model) + { + super.setModelAttributes(model); + + if (model instanceof ModelBiped) + { + ModelBiped modelbiped = (ModelBiped)model; + this.leftArmPose = modelbiped.leftArmPose; + this.rightArmPose = modelbiped.rightArmPose; + this.isSneak = modelbiped.isSneak; + } + } + + public void setVisible(boolean visible) + { + this.bipedHead.showModel = visible; + this.bipedHeadwear.showModel = visible; + this.bipedBody.showModel = visible; + this.bipedRightArm.showModel = visible; + this.bipedLeftArm.showModel = visible; + this.bipedRightLeg.showModel = visible; + this.bipedLeftLeg.showModel = visible; + } + + public void postRenderArm(float scale, EnumHandSide side) + { + this.getArmForSide(side).postRender(scale); + } + + protected ModelRenderer getArmForSide(EnumHandSide side) + { + return side == EnumHandSide.LEFT ? this.bipedLeftArm : this.bipedRightArm; + } + + protected EnumHandSide getMainHand(Entity entityIn) + { + if (entityIn instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)entityIn; + EnumHandSide enumhandside = entitylivingbase.getPrimaryHand(); + return entitylivingbase.swingingHand == EnumHand.MAIN_HAND ? enumhandside : enumhandside.opposite(); + } + else + { + return EnumHandSide.RIGHT; + } + } + + @SideOnly(Side.CLIENT) + public static enum ArmPose + { + EMPTY, + ITEM, + BLOCK, + BOW_AND_ARROW; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBlaze.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBlaze.java new file mode 100644 index 0000000..c5f32ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBlaze.java @@ -0,0 +1,81 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBlaze extends ModelBase +{ + /** The sticks that fly around the Blaze. */ + private final ModelRenderer[] blazeSticks = new ModelRenderer[12]; + private final ModelRenderer blazeHead; + + public ModelBlaze() + { + for (int i = 0; i < this.blazeSticks.length; ++i) + { + this.blazeSticks[i] = new ModelRenderer(this, 0, 16); + this.blazeSticks[i].addBox(0.0F, 0.0F, 0.0F, 2, 8, 2); + } + + this.blazeHead = new ModelRenderer(this, 0, 0); + this.blazeHead.addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.blazeHead.render(scale); + + for (ModelRenderer modelrenderer : this.blazeSticks) + { + modelrenderer.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + float f = ageInTicks * (float)Math.PI * -0.1F; + + for (int i = 0; i < 4; ++i) + { + this.blazeSticks[i].rotationPointY = -2.0F + MathHelper.cos(((float)(i * 2) + ageInTicks) * 0.25F); + this.blazeSticks[i].rotationPointX = MathHelper.cos(f) * 9.0F; + this.blazeSticks[i].rotationPointZ = MathHelper.sin(f) * 9.0F; + ++f; + } + + f = ((float)Math.PI / 4F) + ageInTicks * (float)Math.PI * 0.03F; + + for (int j = 4; j < 8; ++j) + { + this.blazeSticks[j].rotationPointY = 2.0F + MathHelper.cos(((float)(j * 2) + ageInTicks) * 0.25F); + this.blazeSticks[j].rotationPointX = MathHelper.cos(f) * 7.0F; + this.blazeSticks[j].rotationPointZ = MathHelper.sin(f) * 7.0F; + ++f; + } + + f = 0.47123894F + ageInTicks * (float)Math.PI * -0.05F; + + for (int k = 8; k < 12; ++k) + { + this.blazeSticks[k].rotationPointY = 11.0F + MathHelper.cos(((float)k * 1.5F + ageInTicks) * 0.5F); + this.blazeSticks[k].rotationPointX = MathHelper.cos(f) * 5.0F; + this.blazeSticks[k].rotationPointZ = MathHelper.sin(f) * 5.0F; + ++f; + } + + this.blazeHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.blazeHead.rotateAngleX = headPitch * 0.017453292F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBoat.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBoat.java new file mode 100644 index 0000000..b8ed295 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBoat.java @@ -0,0 +1,116 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBoat extends ModelBase implements IMultipassModel +{ + public ModelRenderer[] boatSides = new ModelRenderer[5]; + public ModelRenderer[] paddles = new ModelRenderer[2]; + /** + * An invisible layer that is rendered to make it seem like there's no water in the boat. + * + * @see https://redd.it/3qufgo + * @see https://bugs.mojang.com/browse/MC-47636 + */ + public ModelRenderer noWater; + private final int patchList = GLAllocation.generateDisplayLists(1); + + public ModelBoat() + { + this.boatSides[0] = (new ModelRenderer(this, 0, 0)).setTextureSize(128, 64); + this.boatSides[1] = (new ModelRenderer(this, 0, 19)).setTextureSize(128, 64); + this.boatSides[2] = (new ModelRenderer(this, 0, 27)).setTextureSize(128, 64); + this.boatSides[3] = (new ModelRenderer(this, 0, 35)).setTextureSize(128, 64); + this.boatSides[4] = (new ModelRenderer(this, 0, 43)).setTextureSize(128, 64); + int i = 32; + int j = 6; + int k = 20; + int l = 4; + int i1 = 28; + this.boatSides[0].addBox(-14.0F, -9.0F, -3.0F, 28, 16, 3, 0.0F); + this.boatSides[0].setRotationPoint(0.0F, 3.0F, 1.0F); + this.boatSides[1].addBox(-13.0F, -7.0F, -1.0F, 18, 6, 2, 0.0F); + this.boatSides[1].setRotationPoint(-15.0F, 4.0F, 4.0F); + this.boatSides[2].addBox(-8.0F, -7.0F, -1.0F, 16, 6, 2, 0.0F); + this.boatSides[2].setRotationPoint(15.0F, 4.0F, 0.0F); + this.boatSides[3].addBox(-14.0F, -7.0F, -1.0F, 28, 6, 2, 0.0F); + this.boatSides[3].setRotationPoint(0.0F, 4.0F, -9.0F); + this.boatSides[4].addBox(-14.0F, -7.0F, -1.0F, 28, 6, 2, 0.0F); + this.boatSides[4].setRotationPoint(0.0F, 4.0F, 9.0F); + this.boatSides[0].rotateAngleX = ((float)Math.PI / 2F); + this.boatSides[1].rotateAngleY = ((float)Math.PI * 3F / 2F); + this.boatSides[2].rotateAngleY = ((float)Math.PI / 2F); + this.boatSides[3].rotateAngleY = (float)Math.PI; + this.paddles[0] = this.makePaddle(true); + this.paddles[0].setRotationPoint(3.0F, -5.0F, 9.0F); + this.paddles[1] = this.makePaddle(false); + this.paddles[1].setRotationPoint(3.0F, -5.0F, -9.0F); + this.paddles[1].rotateAngleY = (float)Math.PI; + this.paddles[0].rotateAngleZ = 0.19634955F; + this.paddles[1].rotateAngleZ = 0.19634955F; + this.noWater = (new ModelRenderer(this, 0, 0)).setTextureSize(128, 64); + this.noWater.addBox(-14.0F, -9.0F, -3.0F, 28, 16, 3, 0.0F); + this.noWater.setRotationPoint(0.0F, -3.0F, 1.0F); + this.noWater.rotateAngleX = ((float)Math.PI / 2F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + EntityBoat entityboat = (EntityBoat)entityIn; + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + for (int i = 0; i < 5; ++i) + { + this.boatSides[i].render(scale); + } + + this.renderPaddle(entityboat, 0, scale, limbSwing); + this.renderPaddle(entityboat, 1, scale, limbSwing); + } + + public void renderMultipass(Entity p_187054_1_, float p_187054_2_, float p_187054_3_, float p_187054_4_, float p_187054_5_, float p_187054_6_, float scale) + { + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.colorMask(false, false, false, false); + this.noWater.render(scale); + GlStateManager.colorMask(true, true, true, true); + } + + protected ModelRenderer makePaddle(boolean p_187056_1_) + { + ModelRenderer modelrenderer = (new ModelRenderer(this, 62, p_187056_1_ ? 0 : 20)).setTextureSize(128, 64); + int i = 20; + int j = 7; + int k = 6; + float f = -5.0F; + modelrenderer.addBox(-1.0F, 0.0F, -5.0F, 2, 2, 18); + modelrenderer.addBox(p_187056_1_ ? -1.001F : 0.001F, -3.0F, 8.0F, 1, 6, 7); + return modelrenderer; + } + + protected void renderPaddle(EntityBoat boat, int paddle, float scale, float limbSwing) + { + float f = boat.getRowingTime(paddle, limbSwing); + ModelRenderer modelrenderer = this.paddles[paddle]; + modelrenderer.rotateAngleX = (float)MathHelper.clampedLerp(-1.0471975803375244D, -0.2617993950843811D, (double)((MathHelper.sin(-f) + 1.0F) / 2.0F)); + modelrenderer.rotateAngleY = (float)MathHelper.clampedLerp(-(Math.PI / 4D), (Math.PI / 4D), (double)((MathHelper.sin(-f + 1.0F) + 1.0F) / 2.0F)); + + if (paddle == 1) + { + modelrenderer.rotateAngleY = (float)Math.PI - modelrenderer.rotateAngleY; + } + + modelrenderer.render(scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBook.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBook.java new file mode 100644 index 0000000..7520788 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBook.java @@ -0,0 +1,67 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBook extends ModelBase +{ + /** Right cover renderer (when facing the book) */ + public ModelRenderer coverRight = (new ModelRenderer(this)).setTextureOffset(0, 0).addBox(-6.0F, -5.0F, 0.0F, 6, 10, 0); + /** Left cover renderer (when facing the book) */ + public ModelRenderer coverLeft = (new ModelRenderer(this)).setTextureOffset(16, 0).addBox(0.0F, -5.0F, 0.0F, 6, 10, 0); + /** The right pages renderer (when facing the book) */ + public ModelRenderer pagesRight = (new ModelRenderer(this)).setTextureOffset(0, 10).addBox(0.0F, -4.0F, -0.99F, 5, 8, 1); + /** The left pages renderer (when facing the book) */ + public ModelRenderer pagesLeft = (new ModelRenderer(this)).setTextureOffset(12, 10).addBox(0.0F, -4.0F, -0.01F, 5, 8, 1); + /** Right cover renderer (when facing the book) */ + public ModelRenderer flippingPageRight = (new ModelRenderer(this)).setTextureOffset(24, 10).addBox(0.0F, -4.0F, 0.0F, 5, 8, 0); + /** Right cover renderer (when facing the book) */ + public ModelRenderer flippingPageLeft = (new ModelRenderer(this)).setTextureOffset(24, 10).addBox(0.0F, -4.0F, 0.0F, 5, 8, 0); + /** The renderer of spine of the book */ + public ModelRenderer bookSpine = (new ModelRenderer(this)).setTextureOffset(12, 0).addBox(-1.0F, -5.0F, 0.0F, 2, 10, 0); + + public ModelBook() + { + this.coverRight.setRotationPoint(0.0F, 0.0F, -1.0F); + this.coverLeft.setRotationPoint(0.0F, 0.0F, 1.0F); + this.bookSpine.rotateAngleY = ((float)Math.PI / 2F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.coverRight.render(scale); + this.coverLeft.render(scale); + this.bookSpine.render(scale); + this.pagesRight.render(scale); + this.pagesLeft.render(scale); + this.flippingPageRight.render(scale); + this.flippingPageLeft.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + float f = (MathHelper.sin(limbSwing * 0.02F) * 0.1F + 1.25F) * netHeadYaw; + this.coverRight.rotateAngleY = (float)Math.PI + f; + this.coverLeft.rotateAngleY = -f; + this.pagesRight.rotateAngleY = f; + this.pagesLeft.rotateAngleY = -f; + this.flippingPageRight.rotateAngleY = f - f * 2.0F * limbSwingAmount; + this.flippingPageLeft.rotateAngleY = f - f * 2.0F * ageInTicks; + this.pagesRight.rotationPointX = MathHelper.sin(f); + this.pagesLeft.rotationPointX = MathHelper.sin(f); + this.flippingPageRight.rotationPointX = MathHelper.sin(f); + this.flippingPageLeft.rotationPointX = MathHelper.sin(f); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBox.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBox.java new file mode 100644 index 0000000..1137b54 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelBox.java @@ -0,0 +1,105 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ModelBox +{ + /** The (x,y,z) vertex positions and (u,v) texture coordinates for each of the 8 points on a cube */ + private final PositionTextureVertex[] vertexPositions; + /** An array of 6 TexturedQuads, one for each face of a cube */ + private final TexturedQuad[] quadList; + /** X vertex coordinate of lower box corner */ + public final float posX1; + /** Y vertex coordinate of lower box corner */ + public final float posY1; + /** Z vertex coordinate of lower box corner */ + public final float posZ1; + /** X vertex coordinate of upper box corner */ + public final float posX2; + /** Y vertex coordinate of upper box corner */ + public final float posY2; + /** Z vertex coordinate of upper box corner */ + public final float posZ2; + public String boxName; + + public ModelBox(ModelRenderer renderer, int texU, int texV, float x, float y, float z, int dx, int dy, int dz, float delta) + { + this(renderer, texU, texV, x, y, z, dx, dy, dz, delta, renderer.mirror); + } + + public ModelBox(ModelRenderer renderer, int texU, int texV, float x, float y, float z, int dx, int dy, int dz, float delta, boolean mirror) + { + this.posX1 = x; + this.posY1 = y; + this.posZ1 = z; + this.posX2 = x + (float)dx; + this.posY2 = y + (float)dy; + this.posZ2 = z + (float)dz; + this.vertexPositions = new PositionTextureVertex[8]; + this.quadList = new TexturedQuad[6]; + float f = x + (float)dx; + float f1 = y + (float)dy; + float f2 = z + (float)dz; + x = x - delta; + y = y - delta; + z = z - delta; + f = f + delta; + f1 = f1 + delta; + f2 = f2 + delta; + + if (mirror) + { + float f3 = f; + f = x; + x = f3; + } + + PositionTextureVertex positiontexturevertex7 = new PositionTextureVertex(x, y, z, 0.0F, 0.0F); + PositionTextureVertex positiontexturevertex = new PositionTextureVertex(f, y, z, 0.0F, 8.0F); + PositionTextureVertex positiontexturevertex1 = new PositionTextureVertex(f, f1, z, 8.0F, 8.0F); + PositionTextureVertex positiontexturevertex2 = new PositionTextureVertex(x, f1, z, 8.0F, 0.0F); + PositionTextureVertex positiontexturevertex3 = new PositionTextureVertex(x, y, f2, 0.0F, 0.0F); + PositionTextureVertex positiontexturevertex4 = new PositionTextureVertex(f, y, f2, 0.0F, 8.0F); + PositionTextureVertex positiontexturevertex5 = new PositionTextureVertex(f, f1, f2, 8.0F, 8.0F); + PositionTextureVertex positiontexturevertex6 = new PositionTextureVertex(x, f1, f2, 8.0F, 0.0F); + this.vertexPositions[0] = positiontexturevertex7; + this.vertexPositions[1] = positiontexturevertex; + this.vertexPositions[2] = positiontexturevertex1; + this.vertexPositions[3] = positiontexturevertex2; + this.vertexPositions[4] = positiontexturevertex3; + this.vertexPositions[5] = positiontexturevertex4; + this.vertexPositions[6] = positiontexturevertex5; + this.vertexPositions[7] = positiontexturevertex6; + this.quadList[0] = new TexturedQuad(new PositionTextureVertex[] {positiontexturevertex4, positiontexturevertex, positiontexturevertex1, positiontexturevertex5}, texU + dz + dx, texV + dz, texU + dz + dx + dz, texV + dz + dy, renderer.textureWidth, renderer.textureHeight); + this.quadList[1] = new TexturedQuad(new PositionTextureVertex[] {positiontexturevertex7, positiontexturevertex3, positiontexturevertex6, positiontexturevertex2}, texU, texV + dz, texU + dz, texV + dz + dy, renderer.textureWidth, renderer.textureHeight); + this.quadList[2] = new TexturedQuad(new PositionTextureVertex[] {positiontexturevertex4, positiontexturevertex3, positiontexturevertex7, positiontexturevertex}, texU + dz, texV, texU + dz + dx, texV + dz, renderer.textureWidth, renderer.textureHeight); + this.quadList[3] = new TexturedQuad(new PositionTextureVertex[] {positiontexturevertex1, positiontexturevertex2, positiontexturevertex6, positiontexturevertex5}, texU + dz + dx, texV + dz, texU + dz + dx + dx, texV, renderer.textureWidth, renderer.textureHeight); + this.quadList[4] = new TexturedQuad(new PositionTextureVertex[] {positiontexturevertex, positiontexturevertex7, positiontexturevertex2, positiontexturevertex1}, texU + dz, texV + dz, texU + dz + dx, texV + dz + dy, renderer.textureWidth, renderer.textureHeight); + this.quadList[5] = new TexturedQuad(new PositionTextureVertex[] {positiontexturevertex3, positiontexturevertex4, positiontexturevertex5, positiontexturevertex6}, texU + dz + dx + dz, texV + dz, texU + dz + dx + dz + dx, texV + dz + dy, renderer.textureWidth, renderer.textureHeight); + + if (mirror) + { + for (TexturedQuad texturedquad : this.quadList) + { + texturedquad.flipFace(); + } + } + } + + @SideOnly(Side.CLIENT) + public void render(BufferBuilder renderer, float scale) + { + for (TexturedQuad texturedquad : this.quadList) + { + texturedquad.draw(renderer, scale); + } + } + + public ModelBox setBoxName(String name) + { + this.boxName = name; + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelChest.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelChest.java new file mode 100644 index 0000000..7d2ae9c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelChest.java @@ -0,0 +1,44 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelChest extends ModelBase +{ + /** The chest lid in the chest's model. */ + public ModelRenderer chestLid = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64); + /** The model of the bottom of the chest. */ + public ModelRenderer chestBelow; + /** The chest's knob in the chest model. */ + public ModelRenderer chestKnob; + + public ModelChest() + { + this.chestLid.addBox(0.0F, -5.0F, -14.0F, 14, 5, 14, 0.0F); + this.chestLid.rotationPointX = 1.0F; + this.chestLid.rotationPointY = 7.0F; + this.chestLid.rotationPointZ = 15.0F; + this.chestKnob = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64); + this.chestKnob.addBox(-1.0F, -2.0F, -15.0F, 2, 4, 1, 0.0F); + this.chestKnob.rotationPointX = 8.0F; + this.chestKnob.rotationPointY = 7.0F; + this.chestKnob.rotationPointZ = 15.0F; + this.chestBelow = (new ModelRenderer(this, 0, 19)).setTextureSize(64, 64); + this.chestBelow.addBox(0.0F, 0.0F, 0.0F, 14, 10, 14, 0.0F); + this.chestBelow.rotationPointX = 1.0F; + this.chestBelow.rotationPointY = 6.0F; + this.chestBelow.rotationPointZ = 1.0F; + } + + /** + * This method renders out all parts of the chest model. + */ + public void renderAll() + { + this.chestKnob.rotateAngleX = this.chestLid.rotateAngleX; + this.chestLid.render(0.0625F); + this.chestKnob.render(0.0625F); + this.chestBelow.render(0.0625F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelChicken.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelChicken.java new file mode 100644 index 0000000..b5b966d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelChicken.java @@ -0,0 +1,108 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelChicken extends ModelBase +{ + public ModelRenderer head; + public ModelRenderer body; + public ModelRenderer rightLeg; + public ModelRenderer leftLeg; + public ModelRenderer rightWing; + public ModelRenderer leftWing; + public ModelRenderer bill; + public ModelRenderer chin; + + public ModelChicken() + { + int i = 16; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-2.0F, -6.0F, -2.0F, 4, 6, 3, 0.0F); + this.head.setRotationPoint(0.0F, 15.0F, -4.0F); + this.bill = new ModelRenderer(this, 14, 0); + this.bill.addBox(-2.0F, -4.0F, -4.0F, 4, 2, 2, 0.0F); + this.bill.setRotationPoint(0.0F, 15.0F, -4.0F); + this.chin = new ModelRenderer(this, 14, 4); + this.chin.addBox(-1.0F, -2.0F, -3.0F, 2, 2, 2, 0.0F); + this.chin.setRotationPoint(0.0F, 15.0F, -4.0F); + this.body = new ModelRenderer(this, 0, 9); + this.body.addBox(-3.0F, -4.0F, -3.0F, 6, 8, 6, 0.0F); + this.body.setRotationPoint(0.0F, 16.0F, 0.0F); + this.rightLeg = new ModelRenderer(this, 26, 0); + this.rightLeg.addBox(-1.0F, 0.0F, -3.0F, 3, 5, 3); + this.rightLeg.setRotationPoint(-2.0F, 19.0F, 1.0F); + this.leftLeg = new ModelRenderer(this, 26, 0); + this.leftLeg.addBox(-1.0F, 0.0F, -3.0F, 3, 5, 3); + this.leftLeg.setRotationPoint(1.0F, 19.0F, 1.0F); + this.rightWing = new ModelRenderer(this, 24, 13); + this.rightWing.addBox(0.0F, 0.0F, -3.0F, 1, 4, 6); + this.rightWing.setRotationPoint(-4.0F, 13.0F, 0.0F); + this.leftWing = new ModelRenderer(this, 24, 13); + this.leftWing.addBox(-1.0F, 0.0F, -3.0F, 1, 4, 6); + this.leftWing.setRotationPoint(4.0F, 13.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 5.0F * scale, 2.0F * scale); + this.head.render(scale); + this.bill.render(scale); + this.chin.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.body.render(scale); + this.rightLeg.render(scale); + this.leftLeg.render(scale); + this.rightWing.render(scale); + this.leftWing.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.head.render(scale); + this.bill.render(scale); + this.chin.render(scale); + this.body.render(scale); + this.rightLeg.render(scale); + this.leftLeg.render(scale); + this.rightWing.render(scale); + this.leftWing.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.head.rotateAngleX = headPitch * 0.017453292F; + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.bill.rotateAngleX = this.head.rotateAngleX; + this.bill.rotateAngleY = this.head.rotateAngleY; + this.chin.rotateAngleX = this.head.rotateAngleX; + this.chin.rotateAngleY = this.head.rotateAngleY; + this.body.rotateAngleX = ((float)Math.PI / 2F); + this.rightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + this.leftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.rightWing.rotateAngleZ = ageInTicks; + this.leftWing.rotateAngleZ = -ageInTicks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelCow.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelCow.java new file mode 100644 index 0000000..2207b9a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelCow.java @@ -0,0 +1,31 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelCow extends ModelQuadruped +{ + public ModelCow() + { + super(12, 0.0F); + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-4.0F, -4.0F, -6.0F, 8, 8, 6, 0.0F); + this.head.setRotationPoint(0.0F, 4.0F, -8.0F); + this.head.setTextureOffset(22, 0).addBox(-5.0F, -5.0F, -4.0F, 1, 3, 1, 0.0F); + this.head.setTextureOffset(22, 0).addBox(4.0F, -5.0F, -4.0F, 1, 3, 1, 0.0F); + this.body = new ModelRenderer(this, 18, 4); + this.body.addBox(-6.0F, -10.0F, -7.0F, 12, 18, 10, 0.0F); + this.body.setRotationPoint(0.0F, 5.0F, 2.0F); + this.body.setTextureOffset(52, 0).addBox(-2.0F, 2.0F, -8.0F, 4, 6, 1); + --this.leg1.rotationPointX; + ++this.leg2.rotationPointX; + this.leg1.rotationPointZ += 0.0F; + this.leg2.rotationPointZ += 0.0F; + --this.leg3.rotationPointX; + ++this.leg4.rotationPointX; + --this.leg3.rotationPointZ; + --this.leg4.rotationPointZ; + this.childZOffset += 2.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelCreeper.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelCreeper.java new file mode 100644 index 0000000..d9d1f9d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelCreeper.java @@ -0,0 +1,78 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelCreeper extends ModelBase +{ + public ModelRenderer head; + public ModelRenderer creeperArmor; + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + public ModelCreeper() + { + this(0.0F); + } + + public ModelCreeper(float p_i46366_1_) + { + int i = 6; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, p_i46366_1_); + this.head.setRotationPoint(0.0F, 6.0F, 0.0F); + this.creeperArmor = new ModelRenderer(this, 32, 0); + this.creeperArmor.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, p_i46366_1_ + 0.5F); + this.creeperArmor.setRotationPoint(0.0F, 6.0F, 0.0F); + this.body = new ModelRenderer(this, 16, 16); + this.body.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, p_i46366_1_); + this.body.setRotationPoint(0.0F, 6.0F, 0.0F); + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, p_i46366_1_); + this.leg1.setRotationPoint(-2.0F, 18.0F, 4.0F); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, p_i46366_1_); + this.leg2.setRotationPoint(2.0F, 18.0F, 4.0F); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, p_i46366_1_); + this.leg3.setRotationPoint(-2.0F, 18.0F, -4.0F); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, p_i46366_1_); + this.leg4.setRotationPoint(2.0F, 18.0F, -4.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.head.render(scale); + this.body.render(scale); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.head.rotateAngleX = headPitch * 0.017453292F; + this.leg1.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + this.leg2.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.leg3.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.leg4.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelDragon.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelDragon.java new file mode 100644 index 0000000..91e5aff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelDragon.java @@ -0,0 +1,254 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelDragon extends ModelBase +{ + /** The head Model renderer of the dragon */ + private final ModelRenderer head; + /** The spine Model renderer of the dragon */ + private final ModelRenderer spine; + /** The jaw Model renderer of the dragon */ + private final ModelRenderer jaw; + /** The body Model renderer of the dragon */ + private final ModelRenderer body; + /** The rear leg Model renderer of the dragon */ + private final ModelRenderer rearLeg; + /** The front leg Model renderer of the dragon */ + private final ModelRenderer frontLeg; + /** The rear leg tip Model renderer of the dragon */ + private final ModelRenderer rearLegTip; + /** The front leg tip Model renderer of the dragon */ + private final ModelRenderer frontLegTip; + /** The rear foot Model renderer of the dragon */ + private final ModelRenderer rearFoot; + /** The front foot Model renderer of the dragon */ + private final ModelRenderer frontFoot; + /** The wing Model renderer of the dragon */ + private final ModelRenderer wing; + /** The wing tip Model renderer of the dragon */ + private final ModelRenderer wingTip; + private float partialTicks; + + public ModelDragon(float p_i46360_1_) + { + this.textureWidth = 256; + this.textureHeight = 256; + this.setTextureOffset("body.body", 0, 0); + this.setTextureOffset("wing.skin", -56, 88); + this.setTextureOffset("wingtip.skin", -56, 144); + this.setTextureOffset("rearleg.main", 0, 0); + this.setTextureOffset("rearfoot.main", 112, 0); + this.setTextureOffset("rearlegtip.main", 196, 0); + this.setTextureOffset("head.upperhead", 112, 30); + this.setTextureOffset("wing.bone", 112, 88); + this.setTextureOffset("head.upperlip", 176, 44); + this.setTextureOffset("jaw.jaw", 176, 65); + this.setTextureOffset("frontleg.main", 112, 104); + this.setTextureOffset("wingtip.bone", 112, 136); + this.setTextureOffset("frontfoot.main", 144, 104); + this.setTextureOffset("neck.box", 192, 104); + this.setTextureOffset("frontlegtip.main", 226, 138); + this.setTextureOffset("body.scale", 220, 53); + this.setTextureOffset("head.scale", 0, 0); + this.setTextureOffset("neck.scale", 48, 0); + this.setTextureOffset("head.nostril", 112, 0); + float f = -16.0F; + this.head = new ModelRenderer(this, "head"); + this.head.addBox("upperlip", -6.0F, -1.0F, -24.0F, 12, 5, 16); + this.head.addBox("upperhead", -8.0F, -8.0F, -10.0F, 16, 16, 16); + this.head.mirror = true; + this.head.addBox("scale", -5.0F, -12.0F, -4.0F, 2, 4, 6); + this.head.addBox("nostril", -5.0F, -3.0F, -22.0F, 2, 2, 4); + this.head.mirror = false; + this.head.addBox("scale", 3.0F, -12.0F, -4.0F, 2, 4, 6); + this.head.addBox("nostril", 3.0F, -3.0F, -22.0F, 2, 2, 4); + this.jaw = new ModelRenderer(this, "jaw"); + this.jaw.setRotationPoint(0.0F, 4.0F, -8.0F); + this.jaw.addBox("jaw", -6.0F, 0.0F, -16.0F, 12, 4, 16); + this.head.addChild(this.jaw); + this.spine = new ModelRenderer(this, "neck"); + this.spine.addBox("box", -5.0F, -5.0F, -5.0F, 10, 10, 10); + this.spine.addBox("scale", -1.0F, -9.0F, -3.0F, 2, 4, 6); + this.body = new ModelRenderer(this, "body"); + this.body.setRotationPoint(0.0F, 4.0F, 8.0F); + this.body.addBox("body", -12.0F, 0.0F, -16.0F, 24, 24, 64); + this.body.addBox("scale", -1.0F, -6.0F, -10.0F, 2, 6, 12); + this.body.addBox("scale", -1.0F, -6.0F, 10.0F, 2, 6, 12); + this.body.addBox("scale", -1.0F, -6.0F, 30.0F, 2, 6, 12); + this.wing = new ModelRenderer(this, "wing"); + this.wing.setRotationPoint(-12.0F, 5.0F, 2.0F); + this.wing.addBox("bone", -56.0F, -4.0F, -4.0F, 56, 8, 8); + this.wing.addBox("skin", -56.0F, 0.0F, 2.0F, 56, 0, 56); + this.wingTip = new ModelRenderer(this, "wingtip"); + this.wingTip.setRotationPoint(-56.0F, 0.0F, 0.0F); + this.wingTip.addBox("bone", -56.0F, -2.0F, -2.0F, 56, 4, 4); + this.wingTip.addBox("skin", -56.0F, 0.0F, 2.0F, 56, 0, 56); + this.wing.addChild(this.wingTip); + this.frontLeg = new ModelRenderer(this, "frontleg"); + this.frontLeg.setRotationPoint(-12.0F, 20.0F, 2.0F); + this.frontLeg.addBox("main", -4.0F, -4.0F, -4.0F, 8, 24, 8); + this.frontLegTip = new ModelRenderer(this, "frontlegtip"); + this.frontLegTip.setRotationPoint(0.0F, 20.0F, -1.0F); + this.frontLegTip.addBox("main", -3.0F, -1.0F, -3.0F, 6, 24, 6); + this.frontLeg.addChild(this.frontLegTip); + this.frontFoot = new ModelRenderer(this, "frontfoot"); + this.frontFoot.setRotationPoint(0.0F, 23.0F, 0.0F); + this.frontFoot.addBox("main", -4.0F, 0.0F, -12.0F, 8, 4, 16); + this.frontLegTip.addChild(this.frontFoot); + this.rearLeg = new ModelRenderer(this, "rearleg"); + this.rearLeg.setRotationPoint(-16.0F, 16.0F, 42.0F); + this.rearLeg.addBox("main", -8.0F, -4.0F, -8.0F, 16, 32, 16); + this.rearLegTip = new ModelRenderer(this, "rearlegtip"); + this.rearLegTip.setRotationPoint(0.0F, 32.0F, -4.0F); + this.rearLegTip.addBox("main", -6.0F, -2.0F, 0.0F, 12, 32, 12); + this.rearLeg.addChild(this.rearLegTip); + this.rearFoot = new ModelRenderer(this, "rearfoot"); + this.rearFoot.setRotationPoint(0.0F, 31.0F, 4.0F); + this.rearFoot.addBox("main", -9.0F, 0.0F, -20.0F, 18, 6, 24); + this.rearLegTip.addChild(this.rearFoot); + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + this.partialTicks = partialTickTime; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + GlStateManager.pushMatrix(); + EntityDragon entitydragon = (EntityDragon)entityIn; + float f = entitydragon.prevAnimTime + (entitydragon.animTime - entitydragon.prevAnimTime) * this.partialTicks; + this.jaw.rotateAngleX = (float)(Math.sin((double)(f * ((float)Math.PI * 2F))) + 1.0D) * 0.2F; + float f1 = (float)(Math.sin((double)(f * ((float)Math.PI * 2F) - 1.0F)) + 1.0D); + f1 = (f1 * f1 + f1 * 2.0F) * 0.05F; + GlStateManager.translate(0.0F, f1 - 2.0F, -3.0F); + GlStateManager.rotate(f1 * 2.0F, 1.0F, 0.0F, 0.0F); + float f2 = -30.0F; + float f4 = 0.0F; + float f5 = 1.5F; + double[] adouble = entitydragon.getMovementOffsets(6, this.partialTicks); + float f6 = this.updateRotations(entitydragon.getMovementOffsets(5, this.partialTicks)[0] - entitydragon.getMovementOffsets(10, this.partialTicks)[0]); + float f7 = this.updateRotations(entitydragon.getMovementOffsets(5, this.partialTicks)[0] + (double)(f6 / 2.0F)); + float f8 = f * ((float)Math.PI * 2F); + f2 = 20.0F; + float f3 = -12.0F; + + for (int i = 0; i < 5; ++i) + { + double[] adouble1 = entitydragon.getMovementOffsets(5 - i, this.partialTicks); + float f9 = (float)Math.cos((double)((float)i * 0.45F + f8)) * 0.15F; + this.spine.rotateAngleY = this.updateRotations(adouble1[0] - adouble[0]) * 0.017453292F * 1.5F; + this.spine.rotateAngleX = f9 + entitydragon.getHeadPartYOffset(i, adouble, adouble1) * 0.017453292F * 1.5F * 5.0F; + this.spine.rotateAngleZ = -this.updateRotations(adouble1[0] - (double)f7) * 0.017453292F * 1.5F; + this.spine.rotationPointY = f2; + this.spine.rotationPointZ = f3; + this.spine.rotationPointX = f4; + f2 = (float)((double)f2 + Math.sin((double)this.spine.rotateAngleX) * 10.0D); + f3 = (float)((double)f3 - Math.cos((double)this.spine.rotateAngleY) * Math.cos((double)this.spine.rotateAngleX) * 10.0D); + f4 = (float)((double)f4 - Math.sin((double)this.spine.rotateAngleY) * Math.cos((double)this.spine.rotateAngleX) * 10.0D); + this.spine.render(scale); + } + + this.head.rotationPointY = f2; + this.head.rotationPointZ = f3; + this.head.rotationPointX = f4; + double[] adouble2 = entitydragon.getMovementOffsets(0, this.partialTicks); + this.head.rotateAngleY = this.updateRotations(adouble2[0] - adouble[0]) * 0.017453292F; + this.head.rotateAngleX = this.updateRotations((double)entitydragon.getHeadPartYOffset(6, adouble, adouble2)) * 0.017453292F * 1.5F * 5.0F; + this.head.rotateAngleZ = -this.updateRotations(adouble2[0] - (double)f7) * 0.017453292F; + this.head.render(scale); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-f6 * 1.5F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, -1.0F, 0.0F); + this.body.rotateAngleZ = 0.0F; + this.body.render(scale); + + for (int j = 0; j < 2; ++j) + { + GlStateManager.enableCull(); + float f11 = f * ((float)Math.PI * 2F); + this.wing.rotateAngleX = 0.125F - (float)Math.cos((double)f11) * 0.2F; + this.wing.rotateAngleY = 0.25F; + this.wing.rotateAngleZ = (float)(Math.sin((double)f11) + 0.125D) * 0.8F; + this.wingTip.rotateAngleZ = -((float)(Math.sin((double)(f11 + 2.0F)) + 0.5D)) * 0.75F; + this.rearLeg.rotateAngleX = 1.0F + f1 * 0.1F; + this.rearLegTip.rotateAngleX = 0.5F + f1 * 0.1F; + this.rearFoot.rotateAngleX = 0.75F + f1 * 0.1F; + this.frontLeg.rotateAngleX = 1.3F + f1 * 0.1F; + this.frontLegTip.rotateAngleX = -0.5F - f1 * 0.1F; + this.frontFoot.rotateAngleX = 0.75F + f1 * 0.1F; + this.wing.render(scale); + this.frontLeg.render(scale); + this.rearLeg.render(scale); + GlStateManager.scale(-1.0F, 1.0F, 1.0F); + + if (j == 0) + { + GlStateManager.cullFace(GlStateManager.CullFace.FRONT); + } + } + + GlStateManager.popMatrix(); + GlStateManager.cullFace(GlStateManager.CullFace.BACK); + GlStateManager.disableCull(); + float f10 = -((float)Math.sin((double)(f * ((float)Math.PI * 2F)))) * 0.0F; + f8 = f * ((float)Math.PI * 2F); + f2 = 10.0F; + f3 = 60.0F; + f4 = 0.0F; + adouble = entitydragon.getMovementOffsets(11, this.partialTicks); + + for (int k = 0; k < 12; ++k) + { + adouble2 = entitydragon.getMovementOffsets(12 + k, this.partialTicks); + f10 = (float)((double)f10 + Math.sin((double)((float)k * 0.45F + f8)) * 0.05000000074505806D); + this.spine.rotateAngleY = (this.updateRotations(adouble2[0] - adouble[0]) * 1.5F + 180.0F) * 0.017453292F; + this.spine.rotateAngleX = f10 + (float)(adouble2[1] - adouble[1]) * 0.017453292F * 1.5F * 5.0F; + this.spine.rotateAngleZ = this.updateRotations(adouble2[0] - (double)f7) * 0.017453292F * 1.5F; + this.spine.rotationPointY = f2; + this.spine.rotationPointZ = f3; + this.spine.rotationPointX = f4; + f2 = (float)((double)f2 + Math.sin((double)this.spine.rotateAngleX) * 10.0D); + f3 = (float)((double)f3 - Math.cos((double)this.spine.rotateAngleY) * Math.cos((double)this.spine.rotateAngleX) * 10.0D); + f4 = (float)((double)f4 - Math.sin((double)this.spine.rotateAngleY) * Math.cos((double)this.spine.rotateAngleX) * 10.0D); + this.spine.render(scale); + } + + GlStateManager.popMatrix(); + } + + /** + * Updates the rotations in the parameters for rotations greater than 180 degrees or less than -180 degrees. It adds + * or subtracts 360 degrees, so that the appearance is the same, although the numbers are then simplified to range - + * 180 to 180 + */ + private float updateRotations(double p_78214_1_) + { + while (p_78214_1_ >= 180.0D) + { + p_78214_1_ -= 360.0D; + } + + while (p_78214_1_ < -180.0D) + { + p_78214_1_ += 360.0D; + } + + return (float)p_78214_1_; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelDragonHead.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelDragonHead.java new file mode 100644 index 0000000..31e6f50 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelDragonHead.java @@ -0,0 +1,65 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelDragonHead extends ModelBase +{ + private final ModelRenderer head; + private final ModelRenderer jaw; + + public ModelDragonHead(float p_i46588_1_) + { + this.textureWidth = 256; + this.textureHeight = 256; + this.setTextureOffset("body.body", 0, 0); + this.setTextureOffset("wing.skin", -56, 88); + this.setTextureOffset("wingtip.skin", -56, 144); + this.setTextureOffset("rearleg.main", 0, 0); + this.setTextureOffset("rearfoot.main", 112, 0); + this.setTextureOffset("rearlegtip.main", 196, 0); + this.setTextureOffset("head.upperhead", 112, 30); + this.setTextureOffset("wing.bone", 112, 88); + this.setTextureOffset("head.upperlip", 176, 44); + this.setTextureOffset("jaw.jaw", 176, 65); + this.setTextureOffset("frontleg.main", 112, 104); + this.setTextureOffset("wingtip.bone", 112, 136); + this.setTextureOffset("frontfoot.main", 144, 104); + this.setTextureOffset("neck.box", 192, 104); + this.setTextureOffset("frontlegtip.main", 226, 138); + this.setTextureOffset("body.scale", 220, 53); + this.setTextureOffset("head.scale", 0, 0); + this.setTextureOffset("neck.scale", 48, 0); + this.setTextureOffset("head.nostril", 112, 0); + float f = -16.0F; + this.head = new ModelRenderer(this, "head"); + this.head.addBox("upperlip", -6.0F, -1.0F, -24.0F, 12, 5, 16); + this.head.addBox("upperhead", -8.0F, -8.0F, -10.0F, 16, 16, 16); + this.head.mirror = true; + this.head.addBox("scale", -5.0F, -12.0F, -4.0F, 2, 4, 6); + this.head.addBox("nostril", -5.0F, -3.0F, -22.0F, 2, 2, 4); + this.head.mirror = false; + this.head.addBox("scale", 3.0F, -12.0F, -4.0F, 2, 4, 6); + this.head.addBox("nostril", 3.0F, -3.0F, -22.0F, 2, 2, 4); + this.jaw = new ModelRenderer(this, "jaw"); + this.jaw.setRotationPoint(0.0F, 4.0F, -8.0F); + this.jaw.addBox("jaw", -6.0F, 0.0F, -16.0F, 12, 4, 16); + this.head.addChild(this.jaw); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.jaw.rotateAngleX = (float)(Math.sin((double)(limbSwing * (float)Math.PI * 0.2F)) + 1.0D) * 0.2F; + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.head.rotateAngleX = headPitch * 0.017453292F; + GlStateManager.translate(0.0F, -0.374375F, 0.0F); + GlStateManager.scale(0.75F, 0.75F, 0.75F); + this.head.render(scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelElytra.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelElytra.java new file mode 100644 index 0000000..ad4bc95 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelElytra.java @@ -0,0 +1,109 @@ +package net.minecraft.client.model; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelElytra extends ModelBase +{ + private final ModelRenderer rightWing; + private final ModelRenderer leftWing = new ModelRenderer(this, 22, 0); + + public ModelElytra() + { + this.leftWing.addBox(-10.0F, 0.0F, 0.0F, 10, 20, 2, 1.0F); + this.rightWing = new ModelRenderer(this, 22, 0); + this.rightWing.mirror = true; + this.rightWing.addBox(0.0F, 0.0F, 0.0F, 10, 20, 2, 1.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + GlStateManager.disableRescaleNormal(); + GlStateManager.disableCull(); + + if (entityIn instanceof EntityLivingBase && ((EntityLivingBase)entityIn).isChild()) + { + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 1.5F, -0.1F); + this.leftWing.render(scale); + this.rightWing.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.leftWing.render(scale); + this.rightWing.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + float f = 0.2617994F; + float f1 = -0.2617994F; + float f2 = 0.0F; + float f3 = 0.0F; + + if (entityIn instanceof EntityLivingBase && ((EntityLivingBase)entityIn).isElytraFlying()) + { + float f4 = 1.0F; + + if (entityIn.motionY < 0.0D) + { + Vec3d vec3d = (new Vec3d(entityIn.motionX, entityIn.motionY, entityIn.motionZ)).normalize(); + f4 = 1.0F - (float)Math.pow(-vec3d.y, 1.5D); + } + + f = f4 * 0.34906584F + (1.0F - f4) * f; + f1 = f4 * -((float)Math.PI / 2F) + (1.0F - f4) * f1; + } + else if (entityIn.isSneaking()) + { + f = ((float)Math.PI * 2F / 9F); + f1 = -((float)Math.PI / 4F); + f2 = 3.0F; + f3 = 0.08726646F; + } + + this.leftWing.rotationPointX = 5.0F; + this.leftWing.rotationPointY = f2; + + if (entityIn instanceof AbstractClientPlayer) + { + AbstractClientPlayer abstractclientplayer = (AbstractClientPlayer)entityIn; + abstractclientplayer.rotateElytraX = (float)((double)abstractclientplayer.rotateElytraX + (double)(f - abstractclientplayer.rotateElytraX) * 0.1D); + abstractclientplayer.rotateElytraY = (float)((double)abstractclientplayer.rotateElytraY + (double)(f3 - abstractclientplayer.rotateElytraY) * 0.1D); + abstractclientplayer.rotateElytraZ = (float)((double)abstractclientplayer.rotateElytraZ + (double)(f1 - abstractclientplayer.rotateElytraZ) * 0.1D); + this.leftWing.rotateAngleX = abstractclientplayer.rotateElytraX; + this.leftWing.rotateAngleY = abstractclientplayer.rotateElytraY; + this.leftWing.rotateAngleZ = abstractclientplayer.rotateElytraZ; + } + else + { + this.leftWing.rotateAngleX = f; + this.leftWing.rotateAngleZ = f1; + this.leftWing.rotateAngleY = f3; + } + + this.rightWing.rotationPointX = -this.leftWing.rotationPointX; + this.rightWing.rotateAngleY = -this.leftWing.rotateAngleY; + this.rightWing.rotationPointY = this.leftWing.rotationPointY; + this.rightWing.rotateAngleX = this.leftWing.rotateAngleX; + this.rightWing.rotateAngleZ = -this.leftWing.rotateAngleZ; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderCrystal.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderCrystal.java new file mode 100644 index 0000000..6f1332a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderCrystal.java @@ -0,0 +1,60 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelEnderCrystal extends ModelBase +{ + /** The cube model for the Ender Crystal. */ + private final ModelRenderer cube; + /** The glass model for the Ender Crystal. */ + private final ModelRenderer glass = new ModelRenderer(this, "glass"); + /** The base model for the Ender Crystal. */ + private ModelRenderer base; + + public ModelEnderCrystal(float p_i1170_1_, boolean renderBase) + { + this.glass.setTextureOffset(0, 0).addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8); + this.cube = new ModelRenderer(this, "cube"); + this.cube.setTextureOffset(32, 0).addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8); + + if (renderBase) + { + this.base = new ModelRenderer(this, "base"); + this.base.setTextureOffset(0, 16).addBox(-6.0F, 0.0F, -6.0F, 12, 4, 12); + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + GlStateManager.pushMatrix(); + GlStateManager.scale(2.0F, 2.0F, 2.0F); + GlStateManager.translate(0.0F, -0.5F, 0.0F); + + if (this.base != null) + { + this.base.render(scale); + } + + GlStateManager.rotate(limbSwingAmount, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, 0.8F + ageInTicks, 0.0F); + GlStateManager.rotate(60.0F, 0.7071F, 0.0F, 0.7071F); + this.glass.render(scale); + float f = 0.875F; + GlStateManager.scale(0.875F, 0.875F, 0.875F); + GlStateManager.rotate(60.0F, 0.7071F, 0.0F, 0.7071F); + GlStateManager.rotate(limbSwingAmount, 0.0F, 1.0F, 0.0F); + this.glass.render(scale); + GlStateManager.scale(0.875F, 0.875F, 0.875F); + GlStateManager.rotate(60.0F, 0.7071F, 0.0F, 0.7071F); + GlStateManager.rotate(limbSwingAmount, 0.0F, 1.0F, 0.0F); + this.cube.render(scale); + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderMite.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderMite.java new file mode 100644 index 0000000..0ed8f96 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderMite.java @@ -0,0 +1,60 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelEnderMite extends ModelBase +{ + private static final int[][] BODY_SIZES = new int[][] {{4, 3, 2}, {6, 4, 5}, {3, 3, 1}, {1, 2, 1}}; + private static final int[][] BODY_TEXS = new int[][] {{0, 0}, {0, 5}, {0, 14}, {0, 18}}; + private static final int BODY_COUNT = BODY_SIZES.length; + private final ModelRenderer[] bodyParts; + + public ModelEnderMite() + { + this.bodyParts = new ModelRenderer[BODY_COUNT]; + float f = -3.5F; + + for (int i = 0; i < this.bodyParts.length; ++i) + { + this.bodyParts[i] = new ModelRenderer(this, BODY_TEXS[i][0], BODY_TEXS[i][1]); + this.bodyParts[i].addBox((float)BODY_SIZES[i][0] * -0.5F, 0.0F, (float)BODY_SIZES[i][2] * -0.5F, BODY_SIZES[i][0], BODY_SIZES[i][1], BODY_SIZES[i][2]); + this.bodyParts[i].setRotationPoint(0.0F, (float)(24 - BODY_SIZES[i][1]), f); + + if (i < this.bodyParts.length - 1) + { + f += (float)(BODY_SIZES[i][2] + BODY_SIZES[i + 1][2]) * 0.5F; + } + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + for (ModelRenderer modelrenderer : this.bodyParts) + { + modelrenderer.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + for (int i = 0; i < this.bodyParts.length; ++i) + { + this.bodyParts[i].rotateAngleY = MathHelper.cos(ageInTicks * 0.9F + (float)i * 0.15F * (float)Math.PI) * (float)Math.PI * 0.01F * (float)(1 + Math.abs(i - 2)); + this.bodyParts[i].rotationPointX = MathHelper.sin(ageInTicks * 0.9F + (float)i * 0.15F * (float)Math.PI) * (float)Math.PI * 0.1F * (float)Math.abs(i - 2); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderman.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderman.java new file mode 100644 index 0000000..21e69ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEnderman.java @@ -0,0 +1,131 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelEnderman extends ModelBiped +{ + /** Is the enderman carrying a block? */ + public boolean isCarrying; + /** Is the enderman attacking an entity? */ + public boolean isAttacking; + + public ModelEnderman(float scale) + { + super(0.0F, -14.0F, 64, 32); + float f = -14.0F; + this.bipedHeadwear = new ModelRenderer(this, 0, 16); + this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, scale - 0.5F); + this.bipedHeadwear.setRotationPoint(0.0F, -14.0F, 0.0F); + this.bipedBody = new ModelRenderer(this, 32, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, scale); + this.bipedBody.setRotationPoint(0.0F, -14.0F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 56, 0); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, scale); + this.bipedRightArm.setRotationPoint(-3.0F, -12.0F, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 56, 0); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, scale); + this.bipedLeftArm.setRotationPoint(5.0F, -12.0F, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 56, 0); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, scale); + this.bipedRightLeg.setRotationPoint(-2.0F, -2.0F, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 56, 0); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, scale); + this.bipedLeftLeg.setRotationPoint(2.0F, -2.0F, 0.0F); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.bipedHead.showModel = true; + float f = -14.0F; + this.bipedBody.rotateAngleX = 0.0F; + this.bipedBody.rotationPointY = -14.0F; + this.bipedBody.rotationPointZ = -0.0F; + this.bipedRightLeg.rotateAngleX -= 0.0F; + this.bipedLeftLeg.rotateAngleX -= 0.0F; + this.bipedRightArm.rotateAngleX = (float)((double)this.bipedRightArm.rotateAngleX * 0.5D); + this.bipedLeftArm.rotateAngleX = (float)((double)this.bipedLeftArm.rotateAngleX * 0.5D); + this.bipedRightLeg.rotateAngleX = (float)((double)this.bipedRightLeg.rotateAngleX * 0.5D); + this.bipedLeftLeg.rotateAngleX = (float)((double)this.bipedLeftLeg.rotateAngleX * 0.5D); + float f1 = 0.4F; + + if (this.bipedRightArm.rotateAngleX > 0.4F) + { + this.bipedRightArm.rotateAngleX = 0.4F; + } + + if (this.bipedLeftArm.rotateAngleX > 0.4F) + { + this.bipedLeftArm.rotateAngleX = 0.4F; + } + + if (this.bipedRightArm.rotateAngleX < -0.4F) + { + this.bipedRightArm.rotateAngleX = -0.4F; + } + + if (this.bipedLeftArm.rotateAngleX < -0.4F) + { + this.bipedLeftArm.rotateAngleX = -0.4F; + } + + if (this.bipedRightLeg.rotateAngleX > 0.4F) + { + this.bipedRightLeg.rotateAngleX = 0.4F; + } + + if (this.bipedLeftLeg.rotateAngleX > 0.4F) + { + this.bipedLeftLeg.rotateAngleX = 0.4F; + } + + if (this.bipedRightLeg.rotateAngleX < -0.4F) + { + this.bipedRightLeg.rotateAngleX = -0.4F; + } + + if (this.bipedLeftLeg.rotateAngleX < -0.4F) + { + this.bipedLeftLeg.rotateAngleX = -0.4F; + } + + if (this.isCarrying) + { + this.bipedRightArm.rotateAngleX = -0.5F; + this.bipedLeftArm.rotateAngleX = -0.5F; + this.bipedRightArm.rotateAngleZ = 0.05F; + this.bipedLeftArm.rotateAngleZ = -0.05F; + } + + this.bipedRightArm.rotationPointZ = 0.0F; + this.bipedLeftArm.rotationPointZ = 0.0F; + this.bipedRightLeg.rotationPointZ = 0.0F; + this.bipedLeftLeg.rotationPointZ = 0.0F; + this.bipedRightLeg.rotationPointY = -5.0F; + this.bipedLeftLeg.rotationPointY = -5.0F; + this.bipedHead.rotationPointZ = -0.0F; + this.bipedHead.rotationPointY = -13.0F; + this.bipedHeadwear.rotationPointX = this.bipedHead.rotationPointX; + this.bipedHeadwear.rotationPointY = this.bipedHead.rotationPointY; + this.bipedHeadwear.rotationPointZ = this.bipedHead.rotationPointZ; + this.bipedHeadwear.rotateAngleX = this.bipedHead.rotateAngleX; + this.bipedHeadwear.rotateAngleY = this.bipedHead.rotateAngleY; + this.bipedHeadwear.rotateAngleZ = this.bipedHead.rotateAngleZ; + + if (this.isAttacking) + { + float f2 = 1.0F; + this.bipedHead.rotationPointY -= 5.0F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEvokerFangs.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEvokerFangs.java new file mode 100644 index 0000000..7d3530e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelEvokerFangs.java @@ -0,0 +1,51 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelEvokerFangs extends ModelBase +{ + private final ModelRenderer base = new ModelRenderer(this, 0, 0); + private final ModelRenderer upperJaw; + private final ModelRenderer lowerJaw; + + public ModelEvokerFangs() + { + this.base.setRotationPoint(-5.0F, 22.0F, -5.0F); + this.base.addBox(0.0F, 0.0F, 0.0F, 10, 12, 10); + this.upperJaw = new ModelRenderer(this, 40, 0); + this.upperJaw.setRotationPoint(1.5F, 22.0F, -4.0F); + this.upperJaw.addBox(0.0F, 0.0F, 0.0F, 4, 14, 8); + this.lowerJaw = new ModelRenderer(this, 40, 0); + this.lowerJaw.setRotationPoint(-1.5F, 22.0F, 4.0F); + this.lowerJaw.addBox(0.0F, 0.0F, 0.0F, 4, 14, 8); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + float f = limbSwing * 2.0F; + + if (f > 1.0F) + { + f = 1.0F; + } + + f = 1.0F - f * f * f; + this.upperJaw.rotateAngleZ = (float)Math.PI - f * 0.35F * (float)Math.PI; + this.lowerJaw.rotateAngleZ = (float)Math.PI + f * 0.35F * (float)Math.PI; + this.lowerJaw.rotateAngleY = (float)Math.PI; + float f1 = (limbSwing + MathHelper.sin(limbSwing * 2.7F)) * 0.6F * 12.0F; + this.upperJaw.rotationPointY = 24.0F - f1; + this.lowerJaw.rotationPointY = this.upperJaw.rotationPointY; + this.base.rotationPointY = this.upperJaw.rotationPointY; + this.base.render(scale); + this.upperJaw.render(scale); + this.lowerJaw.render(scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelGhast.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelGhast.java new file mode 100644 index 0000000..cef27ee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelGhast.java @@ -0,0 +1,67 @@ +package net.minecraft.client.model; + +import java.util.Random; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelGhast extends ModelBase +{ + ModelRenderer body; + ModelRenderer[] tentacles = new ModelRenderer[9]; + + public ModelGhast() + { + int i = -16; + this.body = new ModelRenderer(this, 0, 0); + this.body.addBox(-8.0F, -8.0F, -8.0F, 16, 16, 16); + this.body.rotationPointY += 8.0F; + Random random = new Random(1660L); + + for (int j = 0; j < this.tentacles.length; ++j) + { + this.tentacles[j] = new ModelRenderer(this, 0, 0); + float f = (((float)(j % 3) - (float)(j / 3 % 2) * 0.5F + 0.25F) / 2.0F * 2.0F - 1.0F) * 5.0F; + float f1 = ((float)(j / 3) / 2.0F * 2.0F - 1.0F) * 5.0F; + int k = random.nextInt(7) + 8; + this.tentacles[j].addBox(-1.0F, 0.0F, -1.0F, 2, k, 2); + this.tentacles[j].rotationPointX = f; + this.tentacles[j].rotationPointZ = f1; + this.tentacles[j].rotationPointY = 15.0F; + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + for (int i = 0; i < this.tentacles.length; ++i) + { + this.tentacles[i].rotateAngleX = 0.2F * MathHelper.sin(ageInTicks * 0.3F + (float)i) + 0.4F; + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.6F, 0.0F); + this.body.render(scale); + + for (ModelRenderer modelrenderer : this.tentacles) + { + modelrenderer.render(scale); + } + + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelGuardian.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelGuardian.java new file mode 100644 index 0000000..af36df9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelGuardian.java @@ -0,0 +1,134 @@ +package net.minecraft.client.model; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelGuardian extends ModelBase +{ + private final ModelRenderer guardianBody; + private final ModelRenderer guardianEye; + private final ModelRenderer[] guardianSpines; + private final ModelRenderer[] guardianTail; + + public ModelGuardian() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.guardianSpines = new ModelRenderer[12]; + this.guardianBody = new ModelRenderer(this); + this.guardianBody.setTextureOffset(0, 0).addBox(-6.0F, 10.0F, -8.0F, 12, 12, 16); + this.guardianBody.setTextureOffset(0, 28).addBox(-8.0F, 10.0F, -6.0F, 2, 12, 12); + this.guardianBody.setTextureOffset(0, 28).addBox(6.0F, 10.0F, -6.0F, 2, 12, 12, true); + this.guardianBody.setTextureOffset(16, 40).addBox(-6.0F, 8.0F, -6.0F, 12, 2, 12); + this.guardianBody.setTextureOffset(16, 40).addBox(-6.0F, 22.0F, -6.0F, 12, 2, 12); + + for (int i = 0; i < this.guardianSpines.length; ++i) + { + this.guardianSpines[i] = new ModelRenderer(this, 0, 0); + this.guardianSpines[i].addBox(-1.0F, -4.5F, -1.0F, 2, 9, 2); + this.guardianBody.addChild(this.guardianSpines[i]); + } + + this.guardianEye = new ModelRenderer(this, 8, 0); + this.guardianEye.addBox(-1.0F, 15.0F, 0.0F, 2, 2, 1); + this.guardianBody.addChild(this.guardianEye); + this.guardianTail = new ModelRenderer[3]; + this.guardianTail[0] = new ModelRenderer(this, 40, 0); + this.guardianTail[0].addBox(-2.0F, 14.0F, 7.0F, 4, 4, 8); + this.guardianTail[1] = new ModelRenderer(this, 0, 54); + this.guardianTail[1].addBox(0.0F, 14.0F, 0.0F, 3, 3, 7); + this.guardianTail[2] = new ModelRenderer(this); + this.guardianTail[2].setTextureOffset(41, 32).addBox(0.0F, 14.0F, 0.0F, 2, 2, 6); + this.guardianTail[2].setTextureOffset(25, 19).addBox(1.0F, 10.5F, 3.0F, 1, 9, 9); + this.guardianBody.addChild(this.guardianTail[0]); + this.guardianTail[0].addChild(this.guardianTail[1]); + this.guardianTail[1].addChild(this.guardianTail[2]); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.guardianBody.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + EntityGuardian entityguardian = (EntityGuardian)entityIn; + float f = ageInTicks - (float)entityguardian.ticksExisted; + this.guardianBody.rotateAngleY = netHeadYaw * 0.017453292F; + this.guardianBody.rotateAngleX = headPitch * 0.017453292F; + float[] afloat = new float[] {1.75F, 0.25F, 0.0F, 0.0F, 0.5F, 0.5F, 0.5F, 0.5F, 1.25F, 0.75F, 0.0F, 0.0F}; + float[] afloat1 = new float[] {0.0F, 0.0F, 0.0F, 0.0F, 0.25F, 1.75F, 1.25F, 0.75F, 0.0F, 0.0F, 0.0F, 0.0F}; + float[] afloat2 = new float[] {0.0F, 0.0F, 0.25F, 1.75F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.75F, 1.25F}; + float[] afloat3 = new float[] {0.0F, 0.0F, 8.0F, -8.0F, -8.0F, 8.0F, 8.0F, -8.0F, 0.0F, 0.0F, 8.0F, -8.0F}; + float[] afloat4 = new float[] { -8.0F, -8.0F, -8.0F, -8.0F, 0.0F, 0.0F, 0.0F, 0.0F, 8.0F, 8.0F, 8.0F, 8.0F}; + float[] afloat5 = new float[] {8.0F, -8.0F, 0.0F, 0.0F, -8.0F, -8.0F, 8.0F, 8.0F, 8.0F, -8.0F, 0.0F, 0.0F}; + float f1 = (1.0F - entityguardian.getSpikesAnimation(f)) * 0.55F; + + for (int i = 0; i < 12; ++i) + { + this.guardianSpines[i].rotateAngleX = (float)Math.PI * afloat[i]; + this.guardianSpines[i].rotateAngleY = (float)Math.PI * afloat1[i]; + this.guardianSpines[i].rotateAngleZ = (float)Math.PI * afloat2[i]; + this.guardianSpines[i].rotationPointX = afloat3[i] * (1.0F + MathHelper.cos(ageInTicks * 1.5F + (float)i) * 0.01F - f1); + this.guardianSpines[i].rotationPointY = 16.0F + afloat4[i] * (1.0F + MathHelper.cos(ageInTicks * 1.5F + (float)i) * 0.01F - f1); + this.guardianSpines[i].rotationPointZ = afloat5[i] * (1.0F + MathHelper.cos(ageInTicks * 1.5F + (float)i) * 0.01F - f1); + } + + this.guardianEye.rotationPointZ = -8.25F; + Entity entity = Minecraft.getMinecraft().getRenderViewEntity(); + + if (entityguardian.hasTargetedEntity()) + { + entity = entityguardian.getTargetedEntity(); + } + + if (entity != null) + { + Vec3d vec3d = entity.getPositionEyes(0.0F); + Vec3d vec3d1 = entityIn.getPositionEyes(0.0F); + double d0 = vec3d.y - vec3d1.y; + + if (d0 > 0.0D) + { + this.guardianEye.rotationPointY = 0.0F; + } + else + { + this.guardianEye.rotationPointY = 1.0F; + } + + Vec3d vec3d2 = entityIn.getLook(0.0F); + vec3d2 = new Vec3d(vec3d2.x, 0.0D, vec3d2.z); + Vec3d vec3d3 = (new Vec3d(vec3d1.x - vec3d.x, 0.0D, vec3d1.z - vec3d.z)).normalize().rotateYaw(((float)Math.PI / 2F)); + double d1 = vec3d2.dotProduct(vec3d3); + this.guardianEye.rotationPointX = MathHelper.sqrt((float)Math.abs(d1)) * 2.0F * (float)Math.signum(d1); + } + + this.guardianEye.showModel = true; + float f2 = entityguardian.getTailAnimation(f); + this.guardianTail[0].rotateAngleY = MathHelper.sin(f2) * (float)Math.PI * 0.05F; + this.guardianTail[1].rotateAngleY = MathHelper.sin(f2) * (float)Math.PI * 0.1F; + this.guardianTail[1].rotationPointX = -1.5F; + this.guardianTail[1].rotationPointY = 0.5F; + this.guardianTail[1].rotationPointZ = 14.0F; + this.guardianTail[2].rotateAngleY = MathHelper.sin(f2) * (float)Math.PI * 0.15F; + this.guardianTail[2].rotationPointX = 0.5F; + this.guardianTail[2].rotationPointY = 0.5F; + this.guardianTail[2].rotationPointZ = 6.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelHorse.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelHorse.java new file mode 100644 index 0000000..eca242c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelHorse.java @@ -0,0 +1,558 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.AbstractChestHorse; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelHorse extends ModelBase +{ + private final ModelRenderer head; + private final ModelRenderer upperMouth; + private final ModelRenderer lowerMouth; + private final ModelRenderer horseLeftEar; + private final ModelRenderer horseRightEar; + /** The left ear box for the mule model. */ + private final ModelRenderer muleLeftEar; + /** The right ear box for the mule model. */ + private final ModelRenderer muleRightEar; + private final ModelRenderer neck; + /** The box for the horse's ropes on its face. */ + private final ModelRenderer horseFaceRopes; + private final ModelRenderer mane; + private final ModelRenderer body; + private final ModelRenderer tailBase; + private final ModelRenderer tailMiddle; + private final ModelRenderer tailTip; + private final ModelRenderer backLeftLeg; + private final ModelRenderer backLeftShin; + private final ModelRenderer backLeftHoof; + private final ModelRenderer backRightLeg; + private final ModelRenderer backRightShin; + private final ModelRenderer backRightHoof; + private final ModelRenderer frontLeftLeg; + private final ModelRenderer frontLeftShin; + private final ModelRenderer frontLeftHoof; + private final ModelRenderer frontRightLeg; + private final ModelRenderer frontRightShin; + private final ModelRenderer frontRightHoof; + /** The left chest box on the mule model. */ + private final ModelRenderer muleLeftChest; + /** The right chest box on the mule model. */ + private final ModelRenderer muleRightChest; + private final ModelRenderer horseSaddleBottom; + private final ModelRenderer horseSaddleFront; + private final ModelRenderer horseSaddleBack; + private final ModelRenderer horseLeftSaddleRope; + private final ModelRenderer horseLeftSaddleMetal; + private final ModelRenderer horseRightSaddleRope; + private final ModelRenderer horseRightSaddleMetal; + /** The left metal connected to the horse's face ropes. */ + private final ModelRenderer horseLeftFaceMetal; + /** The right metal connected to the horse's face ropes. */ + private final ModelRenderer horseRightFaceMetal; + private final ModelRenderer horseLeftRein; + private final ModelRenderer horseRightRein; + + public ModelHorse() + { + this.textureWidth = 128; + this.textureHeight = 128; + this.body = new ModelRenderer(this, 0, 34); + this.body.addBox(-5.0F, -8.0F, -19.0F, 10, 10, 24); + this.body.setRotationPoint(0.0F, 11.0F, 9.0F); + this.tailBase = new ModelRenderer(this, 44, 0); + this.tailBase.addBox(-1.0F, -1.0F, 0.0F, 2, 2, 3); + this.tailBase.setRotationPoint(0.0F, 3.0F, 14.0F); + this.tailBase.rotateAngleX = -1.134464F; + this.tailMiddle = new ModelRenderer(this, 38, 7); + this.tailMiddle.addBox(-1.5F, -2.0F, 3.0F, 3, 4, 7); + this.tailMiddle.setRotationPoint(0.0F, 3.0F, 14.0F); + this.tailMiddle.rotateAngleX = -1.134464F; + this.tailTip = new ModelRenderer(this, 24, 3); + this.tailTip.addBox(-1.5F, -4.5F, 9.0F, 3, 4, 7); + this.tailTip.setRotationPoint(0.0F, 3.0F, 14.0F); + this.tailTip.rotateAngleX = -1.3962634F; + this.backLeftLeg = new ModelRenderer(this, 78, 29); + this.backLeftLeg.addBox(-2.5F, -2.0F, -2.5F, 4, 9, 5); + this.backLeftLeg.setRotationPoint(4.0F, 9.0F, 11.0F); + this.backLeftShin = new ModelRenderer(this, 78, 43); + this.backLeftShin.addBox(-2.0F, 0.0F, -1.5F, 3, 5, 3); + this.backLeftShin.setRotationPoint(4.0F, 16.0F, 11.0F); + this.backLeftHoof = new ModelRenderer(this, 78, 51); + this.backLeftHoof.addBox(-2.5F, 5.1F, -2.0F, 4, 3, 4); + this.backLeftHoof.setRotationPoint(4.0F, 16.0F, 11.0F); + this.backRightLeg = new ModelRenderer(this, 96, 29); + this.backRightLeg.addBox(-1.5F, -2.0F, -2.5F, 4, 9, 5); + this.backRightLeg.setRotationPoint(-4.0F, 9.0F, 11.0F); + this.backRightShin = new ModelRenderer(this, 96, 43); + this.backRightShin.addBox(-1.0F, 0.0F, -1.5F, 3, 5, 3); + this.backRightShin.setRotationPoint(-4.0F, 16.0F, 11.0F); + this.backRightHoof = new ModelRenderer(this, 96, 51); + this.backRightHoof.addBox(-1.5F, 5.1F, -2.0F, 4, 3, 4); + this.backRightHoof.setRotationPoint(-4.0F, 16.0F, 11.0F); + this.frontLeftLeg = new ModelRenderer(this, 44, 29); + this.frontLeftLeg.addBox(-1.9F, -1.0F, -2.1F, 3, 8, 4); + this.frontLeftLeg.setRotationPoint(4.0F, 9.0F, -8.0F); + this.frontLeftShin = new ModelRenderer(this, 44, 41); + this.frontLeftShin.addBox(-1.9F, 0.0F, -1.6F, 3, 5, 3); + this.frontLeftShin.setRotationPoint(4.0F, 16.0F, -8.0F); + this.frontLeftHoof = new ModelRenderer(this, 44, 51); + this.frontLeftHoof.addBox(-2.4F, 5.1F, -2.1F, 4, 3, 4); + this.frontLeftHoof.setRotationPoint(4.0F, 16.0F, -8.0F); + this.frontRightLeg = new ModelRenderer(this, 60, 29); + this.frontRightLeg.addBox(-1.1F, -1.0F, -2.1F, 3, 8, 4); + this.frontRightLeg.setRotationPoint(-4.0F, 9.0F, -8.0F); + this.frontRightShin = new ModelRenderer(this, 60, 41); + this.frontRightShin.addBox(-1.1F, 0.0F, -1.6F, 3, 5, 3); + this.frontRightShin.setRotationPoint(-4.0F, 16.0F, -8.0F); + this.frontRightHoof = new ModelRenderer(this, 60, 51); + this.frontRightHoof.addBox(-1.6F, 5.1F, -2.1F, 4, 3, 4); + this.frontRightHoof.setRotationPoint(-4.0F, 16.0F, -8.0F); + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-2.5F, -10.0F, -1.5F, 5, 5, 7); + this.head.setRotationPoint(0.0F, 4.0F, -10.0F); + this.head.rotateAngleX = 0.5235988F; + this.upperMouth = new ModelRenderer(this, 24, 18); + this.upperMouth.addBox(-2.0F, -10.0F, -7.0F, 4, 3, 6); + this.upperMouth.setRotationPoint(0.0F, 3.95F, -10.0F); + this.upperMouth.rotateAngleX = 0.5235988F; + this.lowerMouth = new ModelRenderer(this, 24, 27); + this.lowerMouth.addBox(-2.0F, -7.0F, -6.5F, 4, 2, 5); + this.lowerMouth.setRotationPoint(0.0F, 4.0F, -10.0F); + this.lowerMouth.rotateAngleX = 0.5235988F; + this.head.addChild(this.upperMouth); + this.head.addChild(this.lowerMouth); + this.horseLeftEar = new ModelRenderer(this, 0, 0); + this.horseLeftEar.addBox(0.45F, -12.0F, 4.0F, 2, 3, 1); + this.horseLeftEar.setRotationPoint(0.0F, 4.0F, -10.0F); + this.horseLeftEar.rotateAngleX = 0.5235988F; + this.horseRightEar = new ModelRenderer(this, 0, 0); + this.horseRightEar.addBox(-2.45F, -12.0F, 4.0F, 2, 3, 1); + this.horseRightEar.setRotationPoint(0.0F, 4.0F, -10.0F); + this.horseRightEar.rotateAngleX = 0.5235988F; + this.muleLeftEar = new ModelRenderer(this, 0, 12); + this.muleLeftEar.addBox(-2.0F, -16.0F, 4.0F, 2, 7, 1); + this.muleLeftEar.setRotationPoint(0.0F, 4.0F, -10.0F); + this.muleLeftEar.rotateAngleX = 0.5235988F; + this.muleLeftEar.rotateAngleZ = 0.2617994F; + this.muleRightEar = new ModelRenderer(this, 0, 12); + this.muleRightEar.addBox(0.0F, -16.0F, 4.0F, 2, 7, 1); + this.muleRightEar.setRotationPoint(0.0F, 4.0F, -10.0F); + this.muleRightEar.rotateAngleX = 0.5235988F; + this.muleRightEar.rotateAngleZ = -0.2617994F; + this.neck = new ModelRenderer(this, 0, 12); + this.neck.addBox(-2.05F, -9.8F, -2.0F, 4, 14, 8); + this.neck.setRotationPoint(0.0F, 4.0F, -10.0F); + this.neck.rotateAngleX = 0.5235988F; + this.muleLeftChest = new ModelRenderer(this, 0, 34); + this.muleLeftChest.addBox(-3.0F, 0.0F, 0.0F, 8, 8, 3); + this.muleLeftChest.setRotationPoint(-7.5F, 3.0F, 10.0F); + this.muleLeftChest.rotateAngleY = ((float)Math.PI / 2F); + this.muleRightChest = new ModelRenderer(this, 0, 47); + this.muleRightChest.addBox(-3.0F, 0.0F, 0.0F, 8, 8, 3); + this.muleRightChest.setRotationPoint(4.5F, 3.0F, 10.0F); + this.muleRightChest.rotateAngleY = ((float)Math.PI / 2F); + this.horseSaddleBottom = new ModelRenderer(this, 80, 0); + this.horseSaddleBottom.addBox(-5.0F, 0.0F, -3.0F, 10, 1, 8); + this.horseSaddleBottom.setRotationPoint(0.0F, 2.0F, 2.0F); + this.horseSaddleFront = new ModelRenderer(this, 106, 9); + this.horseSaddleFront.addBox(-1.5F, -1.0F, -3.0F, 3, 1, 2); + this.horseSaddleFront.setRotationPoint(0.0F, 2.0F, 2.0F); + this.horseSaddleBack = new ModelRenderer(this, 80, 9); + this.horseSaddleBack.addBox(-4.0F, -1.0F, 3.0F, 8, 1, 2); + this.horseSaddleBack.setRotationPoint(0.0F, 2.0F, 2.0F); + this.horseLeftSaddleMetal = new ModelRenderer(this, 74, 0); + this.horseLeftSaddleMetal.addBox(-0.5F, 6.0F, -1.0F, 1, 2, 2); + this.horseLeftSaddleMetal.setRotationPoint(5.0F, 3.0F, 2.0F); + this.horseLeftSaddleRope = new ModelRenderer(this, 70, 0); + this.horseLeftSaddleRope.addBox(-0.5F, 0.0F, -0.5F, 1, 6, 1); + this.horseLeftSaddleRope.setRotationPoint(5.0F, 3.0F, 2.0F); + this.horseRightSaddleMetal = new ModelRenderer(this, 74, 4); + this.horseRightSaddleMetal.addBox(-0.5F, 6.0F, -1.0F, 1, 2, 2); + this.horseRightSaddleMetal.setRotationPoint(-5.0F, 3.0F, 2.0F); + this.horseRightSaddleRope = new ModelRenderer(this, 80, 0); + this.horseRightSaddleRope.addBox(-0.5F, 0.0F, -0.5F, 1, 6, 1); + this.horseRightSaddleRope.setRotationPoint(-5.0F, 3.0F, 2.0F); + this.horseLeftFaceMetal = new ModelRenderer(this, 74, 13); + this.horseLeftFaceMetal.addBox(1.5F, -8.0F, -4.0F, 1, 2, 2); + this.horseLeftFaceMetal.setRotationPoint(0.0F, 4.0F, -10.0F); + this.horseLeftFaceMetal.rotateAngleX = 0.5235988F; + this.horseRightFaceMetal = new ModelRenderer(this, 74, 13); + this.horseRightFaceMetal.addBox(-2.5F, -8.0F, -4.0F, 1, 2, 2); + this.horseRightFaceMetal.setRotationPoint(0.0F, 4.0F, -10.0F); + this.horseRightFaceMetal.rotateAngleX = 0.5235988F; + this.horseLeftRein = new ModelRenderer(this, 44, 10); + this.horseLeftRein.addBox(2.6F, -6.0F, -6.0F, 0, 3, 16); + this.horseLeftRein.setRotationPoint(0.0F, 4.0F, -10.0F); + this.horseRightRein = new ModelRenderer(this, 44, 5); + this.horseRightRein.addBox(-2.6F, -6.0F, -6.0F, 0, 3, 16); + this.horseRightRein.setRotationPoint(0.0F, 4.0F, -10.0F); + this.mane = new ModelRenderer(this, 58, 0); + this.mane.addBox(-1.0F, -11.5F, 5.0F, 2, 16, 4); + this.mane.setRotationPoint(0.0F, 4.0F, -10.0F); + this.mane.rotateAngleX = 0.5235988F; + this.horseFaceRopes = new ModelRenderer(this, 80, 12); + this.horseFaceRopes.addBox(-2.5F, -10.1F, -7.0F, 5, 5, 12, 0.2F); + this.horseFaceRopes.setRotationPoint(0.0F, 4.0F, -10.0F); + this.horseFaceRopes.rotateAngleX = 0.5235988F; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + AbstractHorse abstracthorse = (AbstractHorse)entityIn; + float f = abstracthorse.getGrassEatingAmount(0.0F); + boolean flag = abstracthorse.isChild(); + boolean flag1 = !flag && abstracthorse.isHorseSaddled(); + boolean flag2 = abstracthorse instanceof AbstractChestHorse; + boolean flag3 = !flag && flag2 && ((AbstractChestHorse)abstracthorse).hasChest(); + float f1 = abstracthorse.getHorseSize(); + boolean flag4 = abstracthorse.isBeingRidden(); + + if (flag1) + { + this.horseFaceRopes.render(scale); + this.horseSaddleBottom.render(scale); + this.horseSaddleFront.render(scale); + this.horseSaddleBack.render(scale); + this.horseLeftSaddleRope.render(scale); + this.horseLeftSaddleMetal.render(scale); + this.horseRightSaddleRope.render(scale); + this.horseRightSaddleMetal.render(scale); + this.horseLeftFaceMetal.render(scale); + this.horseRightFaceMetal.render(scale); + + if (flag4) + { + this.horseLeftRein.render(scale); + this.horseRightRein.render(scale); + } + } + + if (flag) + { + GlStateManager.pushMatrix(); + GlStateManager.scale(f1, 0.5F + f1 * 0.5F, f1); + GlStateManager.translate(0.0F, 0.95F * (1.0F - f1), 0.0F); + } + + this.backLeftLeg.render(scale); + this.backLeftShin.render(scale); + this.backLeftHoof.render(scale); + this.backRightLeg.render(scale); + this.backRightShin.render(scale); + this.backRightHoof.render(scale); + this.frontLeftLeg.render(scale); + this.frontLeftShin.render(scale); + this.frontLeftHoof.render(scale); + this.frontRightLeg.render(scale); + this.frontRightShin.render(scale); + this.frontRightHoof.render(scale); + + if (flag) + { + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(f1, f1, f1); + GlStateManager.translate(0.0F, 1.35F * (1.0F - f1), 0.0F); + } + + this.body.render(scale); + this.tailBase.render(scale); + this.tailMiddle.render(scale); + this.tailTip.render(scale); + this.neck.render(scale); + this.mane.render(scale); + + if (flag) + { + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + float f2 = 0.5F + f1 * f1 * 0.5F; + GlStateManager.scale(f2, f2, f2); + + if (f <= 0.0F) + { + GlStateManager.translate(0.0F, 1.35F * (1.0F - f1), 0.0F); + } + else + { + GlStateManager.translate(0.0F, 0.9F * (1.0F - f1) * f + 1.35F * (1.0F - f1) * (1.0F - f), 0.15F * (1.0F - f1) * f); + } + } + + if (flag2) + { + this.muleLeftEar.render(scale); + this.muleRightEar.render(scale); + } + else + { + this.horseLeftEar.render(scale); + this.horseRightEar.render(scale); + } + + this.head.render(scale); + + if (flag) + { + GlStateManager.popMatrix(); + } + + if (flag3) + { + this.muleLeftChest.render(scale); + this.muleRightChest.render(scale); + } + } + + /** + * Fixes and offsets a rotation in the ModelHorse class. + */ + private float updateHorseRotation(float p_110683_1_, float p_110683_2_, float p_110683_3_) + { + float f; + + for (f = p_110683_2_ - p_110683_1_; f < -180.0F; f += 360.0F) + { + ; + } + + while (f >= 180.0F) + { + f -= 360.0F; + } + + return p_110683_1_ + p_110683_3_ * f; + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + super.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTickTime); + float f = this.updateHorseRotation(entitylivingbaseIn.prevRenderYawOffset, entitylivingbaseIn.renderYawOffset, partialTickTime); + float f1 = this.updateHorseRotation(entitylivingbaseIn.prevRotationYawHead, entitylivingbaseIn.rotationYawHead, partialTickTime); + float f2 = entitylivingbaseIn.prevRotationPitch + (entitylivingbaseIn.rotationPitch - entitylivingbaseIn.prevRotationPitch) * partialTickTime; + float f3 = f1 - f; + float f4 = f2 * 0.017453292F; + + if (f3 > 20.0F) + { + f3 = 20.0F; + } + + if (f3 < -20.0F) + { + f3 = -20.0F; + } + + if (limbSwingAmount > 0.2F) + { + f4 += MathHelper.cos(limbSwing * 0.4F) * 0.15F * limbSwingAmount; + } + + AbstractHorse abstracthorse = (AbstractHorse)entitylivingbaseIn; + float f5 = abstracthorse.getGrassEatingAmount(partialTickTime); + float f6 = abstracthorse.getRearingAmount(partialTickTime); + float f7 = 1.0F - f6; + float f8 = abstracthorse.getMouthOpennessAngle(partialTickTime); + boolean flag = abstracthorse.tailCounter != 0; + boolean flag1 = abstracthorse.isHorseSaddled(); + boolean flag2 = abstracthorse.isBeingRidden(); + float f9 = (float)entitylivingbaseIn.ticksExisted + partialTickTime; + float f10 = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI); + float f11 = f10 * 0.8F * limbSwingAmount; + this.head.rotationPointY = 4.0F; + this.head.rotationPointZ = -10.0F; + this.tailBase.rotationPointY = 3.0F; + this.tailMiddle.rotationPointZ = 14.0F; + this.muleRightChest.rotationPointY = 3.0F; + this.muleRightChest.rotationPointZ = 10.0F; + this.body.rotateAngleX = 0.0F; + this.head.rotateAngleX = 0.5235988F + f4; + this.head.rotateAngleY = f3 * 0.017453292F; + this.head.rotateAngleX = f6 * (0.2617994F + f4) + f5 * 2.1816616F + (1.0F - Math.max(f6, f5)) * this.head.rotateAngleX; + this.head.rotateAngleY = f6 * f3 * 0.017453292F + (1.0F - Math.max(f6, f5)) * this.head.rotateAngleY; + this.head.rotationPointY = f6 * -6.0F + f5 * 11.0F + (1.0F - Math.max(f6, f5)) * this.head.rotationPointY; + this.head.rotationPointZ = f6 * -1.0F + f5 * -10.0F + (1.0F - Math.max(f6, f5)) * this.head.rotationPointZ; + this.tailBase.rotationPointY = f6 * 9.0F + f7 * this.tailBase.rotationPointY; + this.tailMiddle.rotationPointZ = f6 * 18.0F + f7 * this.tailMiddle.rotationPointZ; + this.muleRightChest.rotationPointY = f6 * 5.5F + f7 * this.muleRightChest.rotationPointY; + this.muleRightChest.rotationPointZ = f6 * 15.0F + f7 * this.muleRightChest.rotationPointZ; + this.body.rotateAngleX = f6 * -((float)Math.PI / 4F) + f7 * this.body.rotateAngleX; + this.horseLeftEar.rotationPointY = this.head.rotationPointY; + this.horseRightEar.rotationPointY = this.head.rotationPointY; + this.muleLeftEar.rotationPointY = this.head.rotationPointY; + this.muleRightEar.rotationPointY = this.head.rotationPointY; + this.neck.rotationPointY = this.head.rotationPointY; + this.upperMouth.rotationPointY = 0.02F; + this.lowerMouth.rotationPointY = 0.0F; + this.mane.rotationPointY = this.head.rotationPointY; + this.horseLeftEar.rotationPointZ = this.head.rotationPointZ; + this.horseRightEar.rotationPointZ = this.head.rotationPointZ; + this.muleLeftEar.rotationPointZ = this.head.rotationPointZ; + this.muleRightEar.rotationPointZ = this.head.rotationPointZ; + this.neck.rotationPointZ = this.head.rotationPointZ; + this.upperMouth.rotationPointZ = 0.02F - f8; + this.lowerMouth.rotationPointZ = f8; + this.mane.rotationPointZ = this.head.rotationPointZ; + this.horseLeftEar.rotateAngleX = this.head.rotateAngleX; + this.horseRightEar.rotateAngleX = this.head.rotateAngleX; + this.muleLeftEar.rotateAngleX = this.head.rotateAngleX; + this.muleRightEar.rotateAngleX = this.head.rotateAngleX; + this.neck.rotateAngleX = this.head.rotateAngleX; + this.upperMouth.rotateAngleX = -0.09424778F * f8; + this.lowerMouth.rotateAngleX = 0.15707964F * f8; + this.mane.rotateAngleX = this.head.rotateAngleX; + this.horseLeftEar.rotateAngleY = this.head.rotateAngleY; + this.horseRightEar.rotateAngleY = this.head.rotateAngleY; + this.muleLeftEar.rotateAngleY = this.head.rotateAngleY; + this.muleRightEar.rotateAngleY = this.head.rotateAngleY; + this.neck.rotateAngleY = this.head.rotateAngleY; + this.upperMouth.rotateAngleY = 0.0F; + this.lowerMouth.rotateAngleY = 0.0F; + this.mane.rotateAngleY = this.head.rotateAngleY; + this.muleLeftChest.rotateAngleX = f11 / 5.0F; + this.muleRightChest.rotateAngleX = -f11 / 5.0F; + float f12 = 0.2617994F * f6; + float f13 = MathHelper.cos(f9 * 0.6F + (float)Math.PI); + this.frontLeftLeg.rotationPointY = -2.0F * f6 + 9.0F * f7; + this.frontLeftLeg.rotationPointZ = -2.0F * f6 + -8.0F * f7; + this.frontRightLeg.rotationPointY = this.frontLeftLeg.rotationPointY; + this.frontRightLeg.rotationPointZ = this.frontLeftLeg.rotationPointZ; + this.backLeftShin.rotationPointY = this.backLeftLeg.rotationPointY + MathHelper.sin(((float)Math.PI / 2F) + f12 + f7 * -f10 * 0.5F * limbSwingAmount) * 7.0F; + this.backLeftShin.rotationPointZ = this.backLeftLeg.rotationPointZ + MathHelper.cos(-((float)Math.PI / 2F) + f12 + f7 * -f10 * 0.5F * limbSwingAmount) * 7.0F; + this.backRightShin.rotationPointY = this.backRightLeg.rotationPointY + MathHelper.sin(((float)Math.PI / 2F) + f12 + f7 * f10 * 0.5F * limbSwingAmount) * 7.0F; + this.backRightShin.rotationPointZ = this.backRightLeg.rotationPointZ + MathHelper.cos(-((float)Math.PI / 2F) + f12 + f7 * f10 * 0.5F * limbSwingAmount) * 7.0F; + float f14 = (-1.0471976F + f13) * f6 + f11 * f7; + float f15 = (-1.0471976F - f13) * f6 + -f11 * f7; + this.frontLeftShin.rotationPointY = this.frontLeftLeg.rotationPointY + MathHelper.sin(((float)Math.PI / 2F) + f14) * 7.0F; + this.frontLeftShin.rotationPointZ = this.frontLeftLeg.rotationPointZ + MathHelper.cos(-((float)Math.PI / 2F) + f14) * 7.0F; + this.frontRightShin.rotationPointY = this.frontRightLeg.rotationPointY + MathHelper.sin(((float)Math.PI / 2F) + f15) * 7.0F; + this.frontRightShin.rotationPointZ = this.frontRightLeg.rotationPointZ + MathHelper.cos(-((float)Math.PI / 2F) + f15) * 7.0F; + this.backLeftLeg.rotateAngleX = f12 + -f10 * 0.5F * limbSwingAmount * f7; + this.backLeftShin.rotateAngleX = -0.08726646F * f6 + (-f10 * 0.5F * limbSwingAmount - Math.max(0.0F, f10 * 0.5F * limbSwingAmount)) * f7; + this.backLeftHoof.rotateAngleX = this.backLeftShin.rotateAngleX; + this.backRightLeg.rotateAngleX = f12 + f10 * 0.5F * limbSwingAmount * f7; + this.backRightShin.rotateAngleX = -0.08726646F * f6 + (f10 * 0.5F * limbSwingAmount - Math.max(0.0F, -f10 * 0.5F * limbSwingAmount)) * f7; + this.backRightHoof.rotateAngleX = this.backRightShin.rotateAngleX; + this.frontLeftLeg.rotateAngleX = f14; + this.frontLeftShin.rotateAngleX = (this.frontLeftLeg.rotateAngleX + (float)Math.PI * Math.max(0.0F, 0.2F + f13 * 0.2F)) * f6 + (f11 + Math.max(0.0F, f10 * 0.5F * limbSwingAmount)) * f7; + this.frontLeftHoof.rotateAngleX = this.frontLeftShin.rotateAngleX; + this.frontRightLeg.rotateAngleX = f15; + this.frontRightShin.rotateAngleX = (this.frontRightLeg.rotateAngleX + (float)Math.PI * Math.max(0.0F, 0.2F - f13 * 0.2F)) * f6 + (-f11 + Math.max(0.0F, -f10 * 0.5F * limbSwingAmount)) * f7; + this.frontRightHoof.rotateAngleX = this.frontRightShin.rotateAngleX; + this.backLeftHoof.rotationPointY = this.backLeftShin.rotationPointY; + this.backLeftHoof.rotationPointZ = this.backLeftShin.rotationPointZ; + this.backRightHoof.rotationPointY = this.backRightShin.rotationPointY; + this.backRightHoof.rotationPointZ = this.backRightShin.rotationPointZ; + this.frontLeftHoof.rotationPointY = this.frontLeftShin.rotationPointY; + this.frontLeftHoof.rotationPointZ = this.frontLeftShin.rotationPointZ; + this.frontRightHoof.rotationPointY = this.frontRightShin.rotationPointY; + this.frontRightHoof.rotationPointZ = this.frontRightShin.rotationPointZ; + + if (flag1) + { + this.horseSaddleBottom.rotationPointY = f6 * 0.5F + f7 * 2.0F; + this.horseSaddleBottom.rotationPointZ = f6 * 11.0F + f7 * 2.0F; + this.horseSaddleFront.rotationPointY = this.horseSaddleBottom.rotationPointY; + this.horseSaddleBack.rotationPointY = this.horseSaddleBottom.rotationPointY; + this.horseLeftSaddleRope.rotationPointY = this.horseSaddleBottom.rotationPointY; + this.horseRightSaddleRope.rotationPointY = this.horseSaddleBottom.rotationPointY; + this.horseLeftSaddleMetal.rotationPointY = this.horseSaddleBottom.rotationPointY; + this.horseRightSaddleMetal.rotationPointY = this.horseSaddleBottom.rotationPointY; + this.muleLeftChest.rotationPointY = this.muleRightChest.rotationPointY; + this.horseSaddleFront.rotationPointZ = this.horseSaddleBottom.rotationPointZ; + this.horseSaddleBack.rotationPointZ = this.horseSaddleBottom.rotationPointZ; + this.horseLeftSaddleRope.rotationPointZ = this.horseSaddleBottom.rotationPointZ; + this.horseRightSaddleRope.rotationPointZ = this.horseSaddleBottom.rotationPointZ; + this.horseLeftSaddleMetal.rotationPointZ = this.horseSaddleBottom.rotationPointZ; + this.horseRightSaddleMetal.rotationPointZ = this.horseSaddleBottom.rotationPointZ; + this.muleLeftChest.rotationPointZ = this.muleRightChest.rotationPointZ; + this.horseSaddleBottom.rotateAngleX = this.body.rotateAngleX; + this.horseSaddleFront.rotateAngleX = this.body.rotateAngleX; + this.horseSaddleBack.rotateAngleX = this.body.rotateAngleX; + this.horseLeftRein.rotationPointY = this.head.rotationPointY; + this.horseRightRein.rotationPointY = this.head.rotationPointY; + this.horseFaceRopes.rotationPointY = this.head.rotationPointY; + this.horseLeftFaceMetal.rotationPointY = this.head.rotationPointY; + this.horseRightFaceMetal.rotationPointY = this.head.rotationPointY; + this.horseLeftRein.rotationPointZ = this.head.rotationPointZ; + this.horseRightRein.rotationPointZ = this.head.rotationPointZ; + this.horseFaceRopes.rotationPointZ = this.head.rotationPointZ; + this.horseLeftFaceMetal.rotationPointZ = this.head.rotationPointZ; + this.horseRightFaceMetal.rotationPointZ = this.head.rotationPointZ; + this.horseLeftRein.rotateAngleX = f4; + this.horseRightRein.rotateAngleX = f4; + this.horseFaceRopes.rotateAngleX = this.head.rotateAngleX; + this.horseLeftFaceMetal.rotateAngleX = this.head.rotateAngleX; + this.horseRightFaceMetal.rotateAngleX = this.head.rotateAngleX; + this.horseFaceRopes.rotateAngleY = this.head.rotateAngleY; + this.horseLeftFaceMetal.rotateAngleY = this.head.rotateAngleY; + this.horseLeftRein.rotateAngleY = this.head.rotateAngleY; + this.horseRightFaceMetal.rotateAngleY = this.head.rotateAngleY; + this.horseRightRein.rotateAngleY = this.head.rotateAngleY; + + if (flag2) + { + this.horseLeftSaddleRope.rotateAngleX = -1.0471976F; + this.horseLeftSaddleMetal.rotateAngleX = -1.0471976F; + this.horseRightSaddleRope.rotateAngleX = -1.0471976F; + this.horseRightSaddleMetal.rotateAngleX = -1.0471976F; + this.horseLeftSaddleRope.rotateAngleZ = 0.0F; + this.horseLeftSaddleMetal.rotateAngleZ = 0.0F; + this.horseRightSaddleRope.rotateAngleZ = 0.0F; + this.horseRightSaddleMetal.rotateAngleZ = 0.0F; + } + else + { + this.horseLeftSaddleRope.rotateAngleX = f11 / 3.0F; + this.horseLeftSaddleMetal.rotateAngleX = f11 / 3.0F; + this.horseRightSaddleRope.rotateAngleX = f11 / 3.0F; + this.horseRightSaddleMetal.rotateAngleX = f11 / 3.0F; + this.horseLeftSaddleRope.rotateAngleZ = f11 / 5.0F; + this.horseLeftSaddleMetal.rotateAngleZ = f11 / 5.0F; + this.horseRightSaddleRope.rotateAngleZ = -f11 / 5.0F; + this.horseRightSaddleMetal.rotateAngleZ = -f11 / 5.0F; + } + } + + f12 = -1.3089969F + limbSwingAmount * 1.5F; + + if (f12 > 0.0F) + { + f12 = 0.0F; + } + + if (flag) + { + this.tailBase.rotateAngleY = MathHelper.cos(f9 * 0.7F); + f12 = 0.0F; + } + else + { + this.tailBase.rotateAngleY = 0.0F; + } + + this.tailMiddle.rotateAngleY = this.tailBase.rotateAngleY; + this.tailTip.rotateAngleY = this.tailBase.rotateAngleY; + this.tailMiddle.rotationPointY = this.tailBase.rotationPointY; + this.tailTip.rotationPointY = this.tailBase.rotationPointY; + this.tailMiddle.rotationPointZ = this.tailBase.rotationPointZ; + this.tailTip.rotationPointZ = this.tailBase.rotationPointZ; + this.tailBase.rotateAngleX = f12; + this.tailMiddle.rotateAngleX = f12; + this.tailTip.rotateAngleX = -0.2617994F + f12; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelHumanoidHead.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelHumanoidHead.java new file mode 100644 index 0000000..360d763 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelHumanoidHead.java @@ -0,0 +1,39 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelHumanoidHead extends ModelSkeletonHead +{ + private final ModelRenderer head = new ModelRenderer(this, 32, 0); + + public ModelHumanoidHead() + { + super(0, 0, 64, 64); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.25F); + this.head.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.head.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.head.rotateAngleY = this.skeletonHead.rotateAngleY; + this.head.rotateAngleX = this.skeletonHead.rotateAngleX; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelIllager.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelIllager.java new file mode 100644 index 0000000..a81c28b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelIllager.java @@ -0,0 +1,162 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.AbstractIllager; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelIllager extends ModelBase +{ + public ModelRenderer head; + public ModelRenderer hat; + public ModelRenderer body; + public ModelRenderer arms; + public ModelRenderer leg0; + public ModelRenderer leg1; + public ModelRenderer nose; + public ModelRenderer rightArm; + public ModelRenderer leftArm; + + public ModelIllager(float scaleFactor, float p_i47227_2_, int textureWidthIn, int textureHeightIn) + { + this.head = (new ModelRenderer(this)).setTextureSize(textureWidthIn, textureHeightIn); + this.head.setRotationPoint(0.0F, 0.0F + p_i47227_2_, 0.0F); + this.head.setTextureOffset(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, scaleFactor); + this.hat = (new ModelRenderer(this, 32, 0)).setTextureSize(textureWidthIn, textureHeightIn); + this.hat.addBox(-4.0F, -10.0F, -4.0F, 8, 12, 8, scaleFactor + 0.45F); + this.head.addChild(this.hat); + this.hat.showModel = false; + this.nose = (new ModelRenderer(this)).setTextureSize(textureWidthIn, textureHeightIn); + this.nose.setRotationPoint(0.0F, p_i47227_2_ - 2.0F, 0.0F); + this.nose.setTextureOffset(24, 0).addBox(-1.0F, -1.0F, -6.0F, 2, 4, 2, scaleFactor); + this.head.addChild(this.nose); + this.body = (new ModelRenderer(this)).setTextureSize(textureWidthIn, textureHeightIn); + this.body.setRotationPoint(0.0F, 0.0F + p_i47227_2_, 0.0F); + this.body.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, scaleFactor); + this.body.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8, 18, 6, scaleFactor + 0.5F); + this.arms = (new ModelRenderer(this)).setTextureSize(textureWidthIn, textureHeightIn); + this.arms.setRotationPoint(0.0F, 0.0F + p_i47227_2_ + 2.0F, 0.0F); + this.arms.setTextureOffset(44, 22).addBox(-8.0F, -2.0F, -2.0F, 4, 8, 4, scaleFactor); + ModelRenderer modelrenderer = (new ModelRenderer(this, 44, 22)).setTextureSize(textureWidthIn, textureHeightIn); + modelrenderer.mirror = true; + modelrenderer.addBox(4.0F, -2.0F, -2.0F, 4, 8, 4, scaleFactor); + this.arms.addChild(modelrenderer); + this.arms.setTextureOffset(40, 38).addBox(-4.0F, 2.0F, -2.0F, 8, 4, 4, scaleFactor); + this.leg0 = (new ModelRenderer(this, 0, 22)).setTextureSize(textureWidthIn, textureHeightIn); + this.leg0.setRotationPoint(-2.0F, 12.0F + p_i47227_2_, 0.0F); + this.leg0.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, scaleFactor); + this.leg1 = (new ModelRenderer(this, 0, 22)).setTextureSize(textureWidthIn, textureHeightIn); + this.leg1.mirror = true; + this.leg1.setRotationPoint(2.0F, 12.0F + p_i47227_2_, 0.0F); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, scaleFactor); + this.rightArm = (new ModelRenderer(this, 40, 46)).setTextureSize(textureWidthIn, textureHeightIn); + this.rightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, scaleFactor); + this.rightArm.setRotationPoint(-5.0F, 2.0F + p_i47227_2_, 0.0F); + this.leftArm = (new ModelRenderer(this, 40, 46)).setTextureSize(textureWidthIn, textureHeightIn); + this.leftArm.mirror = true; + this.leftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, scaleFactor); + this.leftArm.setRotationPoint(5.0F, 2.0F + p_i47227_2_, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.head.render(scale); + this.body.render(scale); + this.leg0.render(scale); + this.leg1.render(scale); + AbstractIllager abstractillager = (AbstractIllager)entityIn; + + if (abstractillager.getArmPose() == AbstractIllager.IllagerArmPose.CROSSED) + { + this.arms.render(scale); + } + else + { + this.rightArm.render(scale); + this.leftArm.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.head.rotateAngleX = headPitch * 0.017453292F; + this.arms.rotationPointY = 3.0F; + this.arms.rotationPointZ = -1.0F; + this.arms.rotateAngleX = -0.75F; + this.leg0.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount * 0.5F; + this.leg1.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount * 0.5F; + this.leg0.rotateAngleY = 0.0F; + this.leg1.rotateAngleY = 0.0F; + AbstractIllager.IllagerArmPose abstractillager$illagerarmpose = ((AbstractIllager)entityIn).getArmPose(); + + if (abstractillager$illagerarmpose == AbstractIllager.IllagerArmPose.ATTACKING) + { + float f = MathHelper.sin(this.swingProgress * (float)Math.PI); + float f1 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float)Math.PI); + this.rightArm.rotateAngleZ = 0.0F; + this.leftArm.rotateAngleZ = 0.0F; + this.rightArm.rotateAngleY = 0.15707964F; + this.leftArm.rotateAngleY = -0.15707964F; + + if (((EntityLivingBase)entityIn).getPrimaryHand() == EnumHandSide.RIGHT) + { + this.rightArm.rotateAngleX = -1.8849558F + MathHelper.cos(ageInTicks * 0.09F) * 0.15F; + this.leftArm.rotateAngleX = -0.0F + MathHelper.cos(ageInTicks * 0.19F) * 0.5F; + this.rightArm.rotateAngleX += f * 2.2F - f1 * 0.4F; + this.leftArm.rotateAngleX += f * 1.2F - f1 * 0.4F; + } + else + { + this.rightArm.rotateAngleX = -0.0F + MathHelper.cos(ageInTicks * 0.19F) * 0.5F; + this.leftArm.rotateAngleX = -1.8849558F + MathHelper.cos(ageInTicks * 0.09F) * 0.15F; + this.rightArm.rotateAngleX += f * 1.2F - f1 * 0.4F; + this.leftArm.rotateAngleX += f * 2.2F - f1 * 0.4F; + } + + this.rightArm.rotateAngleZ += MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.leftArm.rotateAngleZ -= MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.rightArm.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + this.leftArm.rotateAngleX -= MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + } + else if (abstractillager$illagerarmpose == AbstractIllager.IllagerArmPose.SPELLCASTING) + { + this.rightArm.rotationPointZ = 0.0F; + this.rightArm.rotationPointX = -5.0F; + this.leftArm.rotationPointZ = 0.0F; + this.leftArm.rotationPointX = 5.0F; + this.rightArm.rotateAngleX = MathHelper.cos(ageInTicks * 0.6662F) * 0.25F; + this.leftArm.rotateAngleX = MathHelper.cos(ageInTicks * 0.6662F) * 0.25F; + this.rightArm.rotateAngleZ = 2.3561945F; + this.leftArm.rotateAngleZ = -2.3561945F; + this.rightArm.rotateAngleY = 0.0F; + this.leftArm.rotateAngleY = 0.0F; + } + else if (abstractillager$illagerarmpose == AbstractIllager.IllagerArmPose.BOW_AND_ARROW) + { + this.rightArm.rotateAngleY = -0.1F + this.head.rotateAngleY; + this.rightArm.rotateAngleX = -((float)Math.PI / 2F) + this.head.rotateAngleX; + this.leftArm.rotateAngleX = -0.9424779F + this.head.rotateAngleX; + this.leftArm.rotateAngleY = this.head.rotateAngleY - 0.4F; + this.leftArm.rotateAngleZ = ((float)Math.PI / 2F); + } + } + + public ModelRenderer getArm(EnumHandSide p_191216_1_) + { + return p_191216_1_ == EnumHandSide.LEFT ? this.leftArm : this.rightArm; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelIronGolem.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelIronGolem.java new file mode 100644 index 0000000..21f034b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelIronGolem.java @@ -0,0 +1,126 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelIronGolem extends ModelBase +{ + /** The head model for the iron golem. */ + public ModelRenderer ironGolemHead; + /** The body model for the iron golem. */ + public ModelRenderer ironGolemBody; + /** The right arm model for the iron golem. */ + public ModelRenderer ironGolemRightArm; + /** The left arm model for the iron golem. */ + public ModelRenderer ironGolemLeftArm; + /** The left leg model for the Iron Golem. */ + public ModelRenderer ironGolemLeftLeg; + /** The right leg model for the Iron Golem. */ + public ModelRenderer ironGolemRightLeg; + + public ModelIronGolem() + { + this(0.0F); + } + + public ModelIronGolem(float p_i1161_1_) + { + this(p_i1161_1_, -7.0F); + } + + public ModelIronGolem(float p_i46362_1_, float p_i46362_2_) + { + int i = 128; + int j = 128; + this.ironGolemHead = (new ModelRenderer(this)).setTextureSize(128, 128); + this.ironGolemHead.setRotationPoint(0.0F, 0.0F + p_i46362_2_, -2.0F); + this.ironGolemHead.setTextureOffset(0, 0).addBox(-4.0F, -12.0F, -5.5F, 8, 10, 8, p_i46362_1_); + this.ironGolemHead.setTextureOffset(24, 0).addBox(-1.0F, -5.0F, -7.5F, 2, 4, 2, p_i46362_1_); + this.ironGolemBody = (new ModelRenderer(this)).setTextureSize(128, 128); + this.ironGolemBody.setRotationPoint(0.0F, 0.0F + p_i46362_2_, 0.0F); + this.ironGolemBody.setTextureOffset(0, 40).addBox(-9.0F, -2.0F, -6.0F, 18, 12, 11, p_i46362_1_); + this.ironGolemBody.setTextureOffset(0, 70).addBox(-4.5F, 10.0F, -3.0F, 9, 5, 6, p_i46362_1_ + 0.5F); + this.ironGolemRightArm = (new ModelRenderer(this)).setTextureSize(128, 128); + this.ironGolemRightArm.setRotationPoint(0.0F, -7.0F, 0.0F); + this.ironGolemRightArm.setTextureOffset(60, 21).addBox(-13.0F, -2.5F, -3.0F, 4, 30, 6, p_i46362_1_); + this.ironGolemLeftArm = (new ModelRenderer(this)).setTextureSize(128, 128); + this.ironGolemLeftArm.setRotationPoint(0.0F, -7.0F, 0.0F); + this.ironGolemLeftArm.setTextureOffset(60, 58).addBox(9.0F, -2.5F, -3.0F, 4, 30, 6, p_i46362_1_); + this.ironGolemLeftLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(128, 128); + this.ironGolemLeftLeg.setRotationPoint(-4.0F, 18.0F + p_i46362_2_, 0.0F); + this.ironGolemLeftLeg.setTextureOffset(37, 0).addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, p_i46362_1_); + this.ironGolemRightLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(128, 128); + this.ironGolemRightLeg.mirror = true; + this.ironGolemRightLeg.setTextureOffset(60, 0).setRotationPoint(5.0F, 18.0F + p_i46362_2_, 0.0F); + this.ironGolemRightLeg.addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, p_i46362_1_); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.ironGolemHead.render(scale); + this.ironGolemBody.render(scale); + this.ironGolemLeftLeg.render(scale); + this.ironGolemRightLeg.render(scale); + this.ironGolemRightArm.render(scale); + this.ironGolemLeftArm.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.ironGolemHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.ironGolemHead.rotateAngleX = headPitch * 0.017453292F; + this.ironGolemLeftLeg.rotateAngleX = -1.5F * this.triangleWave(limbSwing, 13.0F) * limbSwingAmount; + this.ironGolemRightLeg.rotateAngleX = 1.5F * this.triangleWave(limbSwing, 13.0F) * limbSwingAmount; + this.ironGolemLeftLeg.rotateAngleY = 0.0F; + this.ironGolemRightLeg.rotateAngleY = 0.0F; + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + EntityIronGolem entityirongolem = (EntityIronGolem)entitylivingbaseIn; + int i = entityirongolem.getAttackTimer(); + + if (i > 0) + { + this.ironGolemRightArm.rotateAngleX = -2.0F + 1.5F * this.triangleWave((float)i - partialTickTime, 10.0F); + this.ironGolemLeftArm.rotateAngleX = -2.0F + 1.5F * this.triangleWave((float)i - partialTickTime, 10.0F); + } + else + { + int j = entityirongolem.getHoldRoseTick(); + + if (j > 0) + { + this.ironGolemRightArm.rotateAngleX = -0.8F + 0.025F * this.triangleWave((float)j, 70.0F); + this.ironGolemLeftArm.rotateAngleX = 0.0F; + } + else + { + this.ironGolemRightArm.rotateAngleX = (-0.2F + 1.5F * this.triangleWave(limbSwing, 13.0F)) * limbSwingAmount; + this.ironGolemLeftArm.rotateAngleX = (-0.2F - 1.5F * this.triangleWave(limbSwing, 13.0F)) * limbSwingAmount; + } + } + } + + private float triangleWave(float p_78172_1_, float p_78172_2_) + { + return (Math.abs(p_78172_1_ % p_78172_2_ - p_78172_2_ * 0.5F) - p_78172_2_ * 0.25F) / (p_78172_2_ * 0.25F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLargeChest.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLargeChest.java new file mode 100644 index 0000000..14c72cb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLargeChest.java @@ -0,0 +1,27 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelLargeChest extends ModelChest +{ + public ModelLargeChest() + { + this.chestLid = (new ModelRenderer(this, 0, 0)).setTextureSize(128, 64); + this.chestLid.addBox(0.0F, -5.0F, -14.0F, 30, 5, 14, 0.0F); + this.chestLid.rotationPointX = 1.0F; + this.chestLid.rotationPointY = 7.0F; + this.chestLid.rotationPointZ = 15.0F; + this.chestKnob = (new ModelRenderer(this, 0, 0)).setTextureSize(128, 64); + this.chestKnob.addBox(-1.0F, -2.0F, -15.0F, 2, 4, 1, 0.0F); + this.chestKnob.rotationPointX = 16.0F; + this.chestKnob.rotationPointY = 7.0F; + this.chestKnob.rotationPointZ = 15.0F; + this.chestBelow = (new ModelRenderer(this, 0, 19)).setTextureSize(128, 64); + this.chestBelow.addBox(0.0F, 0.0F, 0.0F, 30, 10, 14, 0.0F); + this.chestBelow.rotationPointX = 1.0F; + this.chestBelow.rotationPointY = 6.0F; + this.chestBelow.rotationPointZ = 1.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLeashKnot.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLeashKnot.java new file mode 100644 index 0000000..990d9f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLeashKnot.java @@ -0,0 +1,46 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelLeashKnot extends ModelBase +{ + public ModelRenderer knotRenderer; + + public ModelLeashKnot() + { + this(0, 0, 32, 32); + } + + public ModelLeashKnot(int p_i46365_1_, int p_i46365_2_, int p_i46365_3_, int p_i46365_4_) + { + this.textureWidth = p_i46365_3_; + this.textureHeight = p_i46365_4_; + this.knotRenderer = new ModelRenderer(this, p_i46365_1_, p_i46365_2_); + this.knotRenderer.addBox(-3.0F, -6.0F, -3.0F, 6, 8, 6, 0.0F); + this.knotRenderer.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.knotRenderer.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.knotRenderer.rotateAngleY = netHeadYaw * 0.017453292F; + this.knotRenderer.rotateAngleX = headPitch * 0.017453292F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLlama.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLlama.java new file mode 100644 index 0000000..8b1a3e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLlama.java @@ -0,0 +1,114 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.AbstractChestHorse; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelLlama extends ModelQuadruped +{ + private final ModelRenderer chest1; + private final ModelRenderer chest2; + + public ModelLlama(float p_i47226_1_) + { + super(15, p_i47226_1_); + this.textureWidth = 128; + this.textureHeight = 64; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-2.0F, -14.0F, -10.0F, 4, 4, 9, p_i47226_1_); + this.head.setRotationPoint(0.0F, 7.0F, -6.0F); + this.head.setTextureOffset(0, 14).addBox(-4.0F, -16.0F, -6.0F, 8, 18, 6, p_i47226_1_); + this.head.setTextureOffset(17, 0).addBox(-4.0F, -19.0F, -4.0F, 3, 3, 2, p_i47226_1_); + this.head.setTextureOffset(17, 0).addBox(1.0F, -19.0F, -4.0F, 3, 3, 2, p_i47226_1_); + this.body = new ModelRenderer(this, 29, 0); + this.body.addBox(-6.0F, -10.0F, -7.0F, 12, 18, 10, p_i47226_1_); + this.body.setRotationPoint(0.0F, 5.0F, 2.0F); + this.chest1 = new ModelRenderer(this, 45, 28); + this.chest1.addBox(-3.0F, 0.0F, 0.0F, 8, 8, 3, p_i47226_1_); + this.chest1.setRotationPoint(-8.5F, 3.0F, 3.0F); + this.chest1.rotateAngleY = ((float)Math.PI / 2F); + this.chest2 = new ModelRenderer(this, 45, 41); + this.chest2.addBox(-3.0F, 0.0F, 0.0F, 8, 8, 3, p_i47226_1_); + this.chest2.setRotationPoint(5.5F, 3.0F, 3.0F); + this.chest2.rotateAngleY = ((float)Math.PI / 2F); + int i = 4; + int j = 14; + this.leg1 = new ModelRenderer(this, 29, 29); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 14, 4, p_i47226_1_); + this.leg1.setRotationPoint(-2.5F, 10.0F, 6.0F); + this.leg2 = new ModelRenderer(this, 29, 29); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 14, 4, p_i47226_1_); + this.leg2.setRotationPoint(2.5F, 10.0F, 6.0F); + this.leg3 = new ModelRenderer(this, 29, 29); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 14, 4, p_i47226_1_); + this.leg3.setRotationPoint(-2.5F, 10.0F, -4.0F); + this.leg4 = new ModelRenderer(this, 29, 29); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 14, 4, p_i47226_1_); + this.leg4.setRotationPoint(2.5F, 10.0F, -4.0F); + --this.leg1.rotationPointX; + ++this.leg2.rotationPointX; + this.leg1.rotationPointZ += 0.0F; + this.leg2.rotationPointZ += 0.0F; + --this.leg3.rotationPointX; + ++this.leg4.rotationPointX; + --this.leg3.rotationPointZ; + --this.leg4.rotationPointZ; + this.childZOffset += 2.0F; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + AbstractChestHorse abstractchesthorse = (AbstractChestHorse)entityIn; + boolean flag = !abstractchesthorse.isChild() && abstractchesthorse.hasChest(); + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, this.childYOffset * scale, this.childZOffset * scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + float f1 = 0.7F; + GlStateManager.scale(0.71428573F, 0.64935064F, 0.7936508F); + GlStateManager.translate(0.0F, 21.0F * scale, 0.22F); + this.head.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + float f2 = 1.1F; + GlStateManager.scale(0.625F, 0.45454544F, 0.45454544F); + GlStateManager.translate(0.0F, 33.0F * scale, 0.0F); + this.body.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.45454544F, 0.41322312F, 0.45454544F); + GlStateManager.translate(0.0F, 33.0F * scale, 0.0F); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.head.render(scale); + this.body.render(scale); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + } + + if (flag) + { + this.chest1.render(scale); + this.chest2.render(scale); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLlamaSpit.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLlamaSpit.java new file mode 100644 index 0000000..7865b55 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelLlamaSpit.java @@ -0,0 +1,39 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelLlamaSpit extends ModelBase +{ + private final ModelRenderer main; + + public ModelLlamaSpit() + { + this(0.0F); + } + + public ModelLlamaSpit(float p_i47225_1_) + { + this.main = new ModelRenderer(this); + int i = 2; + this.main.setTextureOffset(0, 0).addBox(-4.0F, 0.0F, 0.0F, 2, 2, 2, p_i47225_1_); + this.main.setTextureOffset(0, 0).addBox(0.0F, -4.0F, 0.0F, 2, 2, 2, p_i47225_1_); + this.main.setTextureOffset(0, 0).addBox(0.0F, 0.0F, -4.0F, 2, 2, 2, p_i47225_1_); + this.main.setTextureOffset(0, 0).addBox(0.0F, 0.0F, 0.0F, 2, 2, 2, p_i47225_1_); + this.main.setTextureOffset(0, 0).addBox(2.0F, 0.0F, 0.0F, 2, 2, 2, p_i47225_1_); + this.main.setTextureOffset(0, 0).addBox(0.0F, 2.0F, 0.0F, 2, 2, 2, p_i47225_1_); + this.main.setTextureOffset(0, 0).addBox(0.0F, 0.0F, 2.0F, 2, 2, 2, p_i47225_1_); + this.main.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.main.render(scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelMagmaCube.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelMagmaCube.java new file mode 100644 index 0000000..3f200ad --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelMagmaCube.java @@ -0,0 +1,74 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelMagmaCube extends ModelBase +{ + ModelRenderer[] segments = new ModelRenderer[8]; + ModelRenderer core; + + public ModelMagmaCube() + { + for (int i = 0; i < this.segments.length; ++i) + { + int j = 0; + int k = i; + + if (i == 2) + { + j = 24; + k = 10; + } + else if (i == 3) + { + j = 24; + k = 19; + } + + this.segments[i] = new ModelRenderer(this, j, k); + this.segments[i].addBox(-4.0F, (float)(16 + i), -4.0F, 8, 1, 8); + } + + this.core = new ModelRenderer(this, 0, 16); + this.core.addBox(-2.0F, 18.0F, -2.0F, 4, 4, 4); + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + EntityMagmaCube entitymagmacube = (EntityMagmaCube)entitylivingbaseIn; + float f = entitymagmacube.prevSquishFactor + (entitymagmacube.squishFactor - entitymagmacube.prevSquishFactor) * partialTickTime; + + if (f < 0.0F) + { + f = 0.0F; + } + + for (int i = 0; i < this.segments.length; ++i) + { + this.segments[i].rotationPointY = (float)(-(4 - i)) * f * 1.7F; + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.core.render(scale); + + for (ModelRenderer modelrenderer : this.segments) + { + modelrenderer.render(scale); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelMinecart.java new file mode 100644 index 0000000..dc04f4e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelMinecart.java @@ -0,0 +1,55 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelMinecart extends ModelBase +{ + public ModelRenderer[] sideModels = new ModelRenderer[7]; + + public ModelMinecart() + { + this.sideModels[0] = new ModelRenderer(this, 0, 10); + this.sideModels[1] = new ModelRenderer(this, 0, 0); + this.sideModels[2] = new ModelRenderer(this, 0, 0); + this.sideModels[3] = new ModelRenderer(this, 0, 0); + this.sideModels[4] = new ModelRenderer(this, 0, 0); + this.sideModels[5] = new ModelRenderer(this, 44, 10); + int i = 20; + int j = 8; + int k = 16; + int l = 4; + this.sideModels[0].addBox(-10.0F, -8.0F, -1.0F, 20, 16, 2, 0.0F); + this.sideModels[0].setRotationPoint(0.0F, 4.0F, 0.0F); + this.sideModels[5].addBox(-9.0F, -7.0F, -1.0F, 18, 14, 1, 0.0F); + this.sideModels[5].setRotationPoint(0.0F, 4.0F, 0.0F); + this.sideModels[1].addBox(-8.0F, -9.0F, -1.0F, 16, 8, 2, 0.0F); + this.sideModels[1].setRotationPoint(-9.0F, 4.0F, 0.0F); + this.sideModels[2].addBox(-8.0F, -9.0F, -1.0F, 16, 8, 2, 0.0F); + this.sideModels[2].setRotationPoint(9.0F, 4.0F, 0.0F); + this.sideModels[3].addBox(-8.0F, -9.0F, -1.0F, 16, 8, 2, 0.0F); + this.sideModels[3].setRotationPoint(0.0F, 4.0F, -7.0F); + this.sideModels[4].addBox(-8.0F, -9.0F, -1.0F, 16, 8, 2, 0.0F); + this.sideModels[4].setRotationPoint(0.0F, 4.0F, 7.0F); + this.sideModels[0].rotateAngleX = ((float)Math.PI / 2F); + this.sideModels[1].rotateAngleY = ((float)Math.PI * 3F / 2F); + this.sideModels[2].rotateAngleY = ((float)Math.PI / 2F); + this.sideModels[3].rotateAngleY = (float)Math.PI; + this.sideModels[5].rotateAngleX = -((float)Math.PI / 2F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.sideModels[5].rotationPointY = 4.0F - ageInTicks; + + for (int i = 0; i < 6; ++i) + { + this.sideModels[i].render(scale); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelOcelot.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelOcelot.java new file mode 100644 index 0000000..914993e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelOcelot.java @@ -0,0 +1,225 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelOcelot extends ModelBase +{ + /** The back left leg model for the Ocelot. */ + private final ModelRenderer ocelotBackLeftLeg; + /** The back right leg model for the Ocelot. */ + private final ModelRenderer ocelotBackRightLeg; + /** The front left leg model for the Ocelot. */ + private final ModelRenderer ocelotFrontLeftLeg; + /** The front right leg model for the Ocelot. */ + private final ModelRenderer ocelotFrontRightLeg; + /** The tail model for the Ocelot. */ + private final ModelRenderer ocelotTail; + /** The second part of tail model for the Ocelot. */ + private final ModelRenderer ocelotTail2; + /** The head model for the Ocelot. */ + private final ModelRenderer ocelotHead; + /** The body model for the Ocelot. */ + private final ModelRenderer ocelotBody; + private int state = 1; + + public ModelOcelot() + { + this.setTextureOffset("head.main", 0, 0); + this.setTextureOffset("head.nose", 0, 24); + this.setTextureOffset("head.ear1", 0, 10); + this.setTextureOffset("head.ear2", 6, 10); + this.ocelotHead = new ModelRenderer(this, "head"); + this.ocelotHead.addBox("main", -2.5F, -2.0F, -3.0F, 5, 4, 5); + this.ocelotHead.addBox("nose", -1.5F, 0.0F, -4.0F, 3, 2, 2); + this.ocelotHead.addBox("ear1", -2.0F, -3.0F, 0.0F, 1, 1, 2); + this.ocelotHead.addBox("ear2", 1.0F, -3.0F, 0.0F, 1, 1, 2); + this.ocelotHead.setRotationPoint(0.0F, 15.0F, -9.0F); + this.ocelotBody = new ModelRenderer(this, 20, 0); + this.ocelotBody.addBox(-2.0F, 3.0F, -8.0F, 4, 16, 6, 0.0F); + this.ocelotBody.setRotationPoint(0.0F, 12.0F, -10.0F); + this.ocelotTail = new ModelRenderer(this, 0, 15); + this.ocelotTail.addBox(-0.5F, 0.0F, 0.0F, 1, 8, 1); + this.ocelotTail.rotateAngleX = 0.9F; + this.ocelotTail.setRotationPoint(0.0F, 15.0F, 8.0F); + this.ocelotTail2 = new ModelRenderer(this, 4, 15); + this.ocelotTail2.addBox(-0.5F, 0.0F, 0.0F, 1, 8, 1); + this.ocelotTail2.setRotationPoint(0.0F, 20.0F, 14.0F); + this.ocelotBackLeftLeg = new ModelRenderer(this, 8, 13); + this.ocelotBackLeftLeg.addBox(-1.0F, 0.0F, 1.0F, 2, 6, 2); + this.ocelotBackLeftLeg.setRotationPoint(1.1F, 18.0F, 5.0F); + this.ocelotBackRightLeg = new ModelRenderer(this, 8, 13); + this.ocelotBackRightLeg.addBox(-1.0F, 0.0F, 1.0F, 2, 6, 2); + this.ocelotBackRightLeg.setRotationPoint(-1.1F, 18.0F, 5.0F); + this.ocelotFrontLeftLeg = new ModelRenderer(this, 40, 0); + this.ocelotFrontLeftLeg.addBox(-1.0F, 0.0F, 0.0F, 2, 10, 2); + this.ocelotFrontLeftLeg.setRotationPoint(1.2F, 13.8F, -5.0F); + this.ocelotFrontRightLeg = new ModelRenderer(this, 40, 0); + this.ocelotFrontRightLeg.addBox(-1.0F, 0.0F, 0.0F, 2, 10, 2); + this.ocelotFrontRightLeg.setRotationPoint(-1.2F, 13.8F, -5.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.pushMatrix(); + GlStateManager.scale(0.75F, 0.75F, 0.75F); + GlStateManager.translate(0.0F, 10.0F * scale, 4.0F * scale); + this.ocelotHead.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.ocelotBody.render(scale); + this.ocelotBackLeftLeg.render(scale); + this.ocelotBackRightLeg.render(scale); + this.ocelotFrontLeftLeg.render(scale); + this.ocelotFrontRightLeg.render(scale); + this.ocelotTail.render(scale); + this.ocelotTail2.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.ocelotHead.render(scale); + this.ocelotBody.render(scale); + this.ocelotTail.render(scale); + this.ocelotTail2.render(scale); + this.ocelotBackLeftLeg.render(scale); + this.ocelotBackRightLeg.render(scale); + this.ocelotFrontLeftLeg.render(scale); + this.ocelotFrontRightLeg.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.ocelotHead.rotateAngleX = headPitch * 0.017453292F; + this.ocelotHead.rotateAngleY = netHeadYaw * 0.017453292F; + + if (this.state != 3) + { + this.ocelotBody.rotateAngleX = ((float)Math.PI / 2F); + + if (this.state == 2) + { + this.ocelotBackLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * limbSwingAmount; + this.ocelotBackRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + 0.3F) * limbSwingAmount; + this.ocelotFrontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI + 0.3F) * limbSwingAmount; + this.ocelotFrontRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * limbSwingAmount; + this.ocelotTail2.rotateAngleX = 1.7278761F + ((float)Math.PI / 10F) * MathHelper.cos(limbSwing) * limbSwingAmount; + } + else + { + this.ocelotBackLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * limbSwingAmount; + this.ocelotBackRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * limbSwingAmount; + this.ocelotFrontLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * limbSwingAmount; + this.ocelotFrontRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * limbSwingAmount; + + if (this.state == 1) + { + this.ocelotTail2.rotateAngleX = 1.7278761F + ((float)Math.PI / 4F) * MathHelper.cos(limbSwing) * limbSwingAmount; + } + else + { + this.ocelotTail2.rotateAngleX = 1.7278761F + 0.47123894F * MathHelper.cos(limbSwing) * limbSwingAmount; + } + } + } + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + EntityOcelot entityocelot = (EntityOcelot)entitylivingbaseIn; + this.ocelotBody.rotationPointY = 12.0F; + this.ocelotBody.rotationPointZ = -10.0F; + this.ocelotHead.rotationPointY = 15.0F; + this.ocelotHead.rotationPointZ = -9.0F; + this.ocelotTail.rotationPointY = 15.0F; + this.ocelotTail.rotationPointZ = 8.0F; + this.ocelotTail2.rotationPointY = 20.0F; + this.ocelotTail2.rotationPointZ = 14.0F; + this.ocelotFrontLeftLeg.rotationPointY = 13.8F; + this.ocelotFrontLeftLeg.rotationPointZ = -5.0F; + this.ocelotFrontRightLeg.rotationPointY = 13.8F; + this.ocelotFrontRightLeg.rotationPointZ = -5.0F; + this.ocelotBackLeftLeg.rotationPointY = 18.0F; + this.ocelotBackLeftLeg.rotationPointZ = 5.0F; + this.ocelotBackRightLeg.rotationPointY = 18.0F; + this.ocelotBackRightLeg.rotationPointZ = 5.0F; + this.ocelotTail.rotateAngleX = 0.9F; + + if (entityocelot.isSneaking()) + { + ++this.ocelotBody.rotationPointY; + this.ocelotHead.rotationPointY += 2.0F; + ++this.ocelotTail.rotationPointY; + this.ocelotTail2.rotationPointY += -4.0F; + this.ocelotTail2.rotationPointZ += 2.0F; + this.ocelotTail.rotateAngleX = ((float)Math.PI / 2F); + this.ocelotTail2.rotateAngleX = ((float)Math.PI / 2F); + this.state = 0; + } + else if (entityocelot.isSprinting()) + { + this.ocelotTail2.rotationPointY = this.ocelotTail.rotationPointY; + this.ocelotTail2.rotationPointZ += 2.0F; + this.ocelotTail.rotateAngleX = ((float)Math.PI / 2F); + this.ocelotTail2.rotateAngleX = ((float)Math.PI / 2F); + this.state = 2; + } + else if (entityocelot.isSitting()) + { + this.ocelotBody.rotateAngleX = ((float)Math.PI / 4F); + this.ocelotBody.rotationPointY += -4.0F; + this.ocelotBody.rotationPointZ += 5.0F; + this.ocelotHead.rotationPointY += -3.3F; + ++this.ocelotHead.rotationPointZ; + this.ocelotTail.rotationPointY += 8.0F; + this.ocelotTail.rotationPointZ += -2.0F; + this.ocelotTail2.rotationPointY += 2.0F; + this.ocelotTail2.rotationPointZ += -0.8F; + this.ocelotTail.rotateAngleX = 1.7278761F; + this.ocelotTail2.rotateAngleX = 2.670354F; + this.ocelotFrontLeftLeg.rotateAngleX = -0.15707964F; + this.ocelotFrontLeftLeg.rotationPointY = 15.8F; + this.ocelotFrontLeftLeg.rotationPointZ = -7.0F; + this.ocelotFrontRightLeg.rotateAngleX = -0.15707964F; + this.ocelotFrontRightLeg.rotationPointY = 15.8F; + this.ocelotFrontRightLeg.rotationPointZ = -7.0F; + this.ocelotBackLeftLeg.rotateAngleX = -((float)Math.PI / 2F); + this.ocelotBackLeftLeg.rotationPointY = 21.0F; + this.ocelotBackLeftLeg.rotationPointZ = 1.0F; + this.ocelotBackRightLeg.rotateAngleX = -((float)Math.PI / 2F); + this.ocelotBackRightLeg.rotationPointY = 21.0F; + this.ocelotBackRightLeg.rotationPointZ = 1.0F; + this.state = 3; + } + else + { + this.state = 1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelParrot.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelParrot.java new file mode 100644 index 0000000..41710ee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelParrot.java @@ -0,0 +1,215 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelParrot extends ModelBase +{ + ModelRenderer body; + ModelRenderer tail; + ModelRenderer wingLeft; + ModelRenderer wingRight; + ModelRenderer head; + ModelRenderer head2; + ModelRenderer beak1; + ModelRenderer beak2; + ModelRenderer feather; + ModelRenderer legLeft; + ModelRenderer legRight; + private ModelParrot.State state = ModelParrot.State.STANDING; + + public ModelParrot() + { + this.textureWidth = 32; + this.textureHeight = 32; + this.body = new ModelRenderer(this, 2, 8); + this.body.addBox(-1.5F, 0.0F, -1.5F, 3, 6, 3); + this.body.setRotationPoint(0.0F, 16.5F, -3.0F); + this.tail = new ModelRenderer(this, 22, 1); + this.tail.addBox(-1.5F, -1.0F, -1.0F, 3, 4, 1); + this.tail.setRotationPoint(0.0F, 21.07F, 1.16F); + this.wingLeft = new ModelRenderer(this, 19, 8); + this.wingLeft.addBox(-0.5F, 0.0F, -1.5F, 1, 5, 3); + this.wingLeft.setRotationPoint(1.5F, 16.94F, -2.76F); + this.wingRight = new ModelRenderer(this, 19, 8); + this.wingRight.addBox(-0.5F, 0.0F, -1.5F, 1, 5, 3); + this.wingRight.setRotationPoint(-1.5F, 16.94F, -2.76F); + this.head = new ModelRenderer(this, 2, 2); + this.head.addBox(-1.0F, -1.5F, -1.0F, 2, 3, 2); + this.head.setRotationPoint(0.0F, 15.69F, -2.76F); + this.head2 = new ModelRenderer(this, 10, 0); + this.head2.addBox(-1.0F, -0.5F, -2.0F, 2, 1, 4); + this.head2.setRotationPoint(0.0F, -2.0F, -1.0F); + this.head.addChild(this.head2); + this.beak1 = new ModelRenderer(this, 11, 7); + this.beak1.addBox(-0.5F, -1.0F, -0.5F, 1, 2, 1); + this.beak1.setRotationPoint(0.0F, -0.5F, -1.5F); + this.head.addChild(this.beak1); + this.beak2 = new ModelRenderer(this, 16, 7); + this.beak2.addBox(-0.5F, 0.0F, -0.5F, 1, 2, 1); + this.beak2.setRotationPoint(0.0F, -1.75F, -2.45F); + this.head.addChild(this.beak2); + this.feather = new ModelRenderer(this, 2, 18); + this.feather.addBox(0.0F, -4.0F, -2.0F, 0, 5, 4); + this.feather.setRotationPoint(0.0F, -2.15F, 0.15F); + this.head.addChild(this.feather); + this.legLeft = new ModelRenderer(this, 14, 18); + this.legLeft.addBox(-0.5F, 0.0F, -0.5F, 1, 2, 1); + this.legLeft.setRotationPoint(1.0F, 22.0F, -1.05F); + this.legRight = new ModelRenderer(this, 14, 18); + this.legRight.addBox(-0.5F, 0.0F, -0.5F, 1, 2, 1); + this.legRight.setRotationPoint(-1.0F, 22.0F, -1.05F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.body.render(scale); + this.wingLeft.render(scale); + this.wingRight.render(scale); + this.tail.render(scale); + this.head.render(scale); + this.legLeft.render(scale); + this.legRight.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + float f = ageInTicks * 0.3F; + this.head.rotateAngleX = headPitch * 0.017453292F; + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.head.rotateAngleZ = 0.0F; + this.head.rotationPointX = 0.0F; + this.body.rotationPointX = 0.0F; + this.tail.rotationPointX = 0.0F; + this.wingRight.rotationPointX = -1.5F; + this.wingLeft.rotationPointX = 1.5F; + + if (this.state != ModelParrot.State.FLYING) + { + if (this.state == ModelParrot.State.SITTING) + { + return; + } + + if (this.state == ModelParrot.State.PARTY) + { + float f1 = MathHelper.cos((float)entityIn.ticksExisted); + float f2 = MathHelper.sin((float)entityIn.ticksExisted); + this.head.rotationPointX = f1; + this.head.rotationPointY = 15.69F + f2; + this.head.rotateAngleX = 0.0F; + this.head.rotateAngleY = 0.0F; + this.head.rotateAngleZ = MathHelper.sin((float)entityIn.ticksExisted) * 0.4F; + this.body.rotationPointX = f1; + this.body.rotationPointY = 16.5F + f2; + this.wingLeft.rotateAngleZ = -0.0873F - ageInTicks; + this.wingLeft.rotationPointX = 1.5F + f1; + this.wingLeft.rotationPointY = 16.94F + f2; + this.wingRight.rotateAngleZ = 0.0873F + ageInTicks; + this.wingRight.rotationPointX = -1.5F + f1; + this.wingRight.rotationPointY = 16.94F + f2; + this.tail.rotationPointX = f1; + this.tail.rotationPointY = 21.07F + f2; + return; + } + + this.legLeft.rotateAngleX += MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + this.legRight.rotateAngleX += MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + } + + this.head.rotationPointY = 15.69F + f; + this.tail.rotateAngleX = 1.015F + MathHelper.cos(limbSwing * 0.6662F) * 0.3F * limbSwingAmount; + this.tail.rotationPointY = 21.07F + f; + this.body.rotationPointY = 16.5F + f; + this.wingLeft.rotateAngleZ = -0.0873F - ageInTicks; + this.wingLeft.rotationPointY = 16.94F + f; + this.wingRight.rotateAngleZ = 0.0873F + ageInTicks; + this.wingRight.rotationPointY = 16.94F + f; + this.legLeft.rotationPointY = 22.0F + f; + this.legRight.rotationPointY = 22.0F + f; + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + this.feather.rotateAngleX = -0.2214F; + this.body.rotateAngleX = 0.4937F; + this.wingLeft.rotateAngleX = -((float)Math.PI * 2F / 9F); + this.wingLeft.rotateAngleY = -(float)Math.PI; + this.wingRight.rotateAngleX = -((float)Math.PI * 2F / 9F); + this.wingRight.rotateAngleY = -(float)Math.PI; + this.legLeft.rotateAngleX = -0.0299F; + this.legRight.rotateAngleX = -0.0299F; + this.legLeft.rotationPointY = 22.0F; + this.legRight.rotationPointY = 22.0F; + + if (entitylivingbaseIn instanceof EntityParrot) + { + EntityParrot entityparrot = (EntityParrot)entitylivingbaseIn; + + if (entityparrot.isPartying()) + { + this.legLeft.rotateAngleZ = -0.34906584F; + this.legRight.rotateAngleZ = 0.34906584F; + this.state = ModelParrot.State.PARTY; + return; + } + + if (entityparrot.isSitting()) + { + float f = 1.9F; + this.head.rotationPointY = 17.59F; + this.tail.rotateAngleX = 1.5388988F; + this.tail.rotationPointY = 22.97F; + this.body.rotationPointY = 18.4F; + this.wingLeft.rotateAngleZ = -0.0873F; + this.wingLeft.rotationPointY = 18.84F; + this.wingRight.rotateAngleZ = 0.0873F; + this.wingRight.rotationPointY = 18.84F; + ++this.legLeft.rotationPointY; + ++this.legRight.rotationPointY; + ++this.legLeft.rotateAngleX; + ++this.legRight.rotateAngleX; + this.state = ModelParrot.State.SITTING; + } + else if (entityparrot.isFlying()) + { + this.legLeft.rotateAngleX += ((float)Math.PI * 2F / 9F); + this.legRight.rotateAngleX += ((float)Math.PI * 2F / 9F); + this.state = ModelParrot.State.FLYING; + } + else + { + this.state = ModelParrot.State.STANDING; + } + + this.legLeft.rotateAngleZ = 0.0F; + this.legRight.rotateAngleZ = 0.0F; + } + } + + @SideOnly(Side.CLIENT) + static enum State + { + FLYING, + STANDING, + SITTING, + PARTY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPig.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPig.java new file mode 100644 index 0000000..a438340 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPig.java @@ -0,0 +1,20 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelPig extends ModelQuadruped +{ + public ModelPig() + { + this(0.0F); + } + + public ModelPig(float scale) + { + super(6, scale); + this.head.setTextureOffset(16, 16).addBox(-2.0F, 0.0F, -9.0F, 4, 3, 1, scale); + this.childYOffset = 4.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPlayer.java new file mode 100644 index 0000000..7abf65d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPlayer.java @@ -0,0 +1,174 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumHandSide; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelPlayer extends ModelBiped +{ + public ModelRenderer bipedLeftArmwear; + public ModelRenderer bipedRightArmwear; + public ModelRenderer bipedLeftLegwear; + public ModelRenderer bipedRightLegwear; + public ModelRenderer bipedBodyWear; + private final ModelRenderer bipedCape; + private final ModelRenderer bipedDeadmau5Head; + private final boolean smallArms; + + public ModelPlayer(float modelSize, boolean smallArmsIn) + { + super(modelSize, 0.0F, 64, 64); + this.smallArms = smallArmsIn; + this.bipedDeadmau5Head = new ModelRenderer(this, 24, 0); + this.bipedDeadmau5Head.addBox(-3.0F, -6.0F, -1.0F, 6, 6, 1, modelSize); + this.bipedCape = new ModelRenderer(this, 0, 0); + this.bipedCape.setTextureSize(64, 32); + this.bipedCape.addBox(-5.0F, 0.0F, -1.0F, 10, 16, 1, modelSize); + + if (smallArmsIn) + { + this.bipedLeftArm = new ModelRenderer(this, 32, 48); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 3, 12, 4, modelSize); + this.bipedLeftArm.setRotationPoint(5.0F, 2.5F, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-2.0F, -2.0F, -2.0F, 3, 12, 4, modelSize); + this.bipedRightArm.setRotationPoint(-5.0F, 2.5F, 0.0F); + this.bipedLeftArmwear = new ModelRenderer(this, 48, 48); + this.bipedLeftArmwear.addBox(-1.0F, -2.0F, -2.0F, 3, 12, 4, modelSize + 0.25F); + this.bipedLeftArmwear.setRotationPoint(5.0F, 2.5F, 0.0F); + this.bipedRightArmwear = new ModelRenderer(this, 40, 32); + this.bipedRightArmwear.addBox(-2.0F, -2.0F, -2.0F, 3, 12, 4, modelSize + 0.25F); + this.bipedRightArmwear.setRotationPoint(-5.0F, 2.5F, 10.0F); + } + else + { + this.bipedLeftArm = new ModelRenderer(this, 32, 48); + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, modelSize); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedLeftArmwear = new ModelRenderer(this, 48, 48); + this.bipedLeftArmwear.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, modelSize + 0.25F); + this.bipedLeftArmwear.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightArmwear = new ModelRenderer(this, 40, 32); + this.bipedRightArmwear.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, modelSize + 0.25F); + this.bipedRightArmwear.setRotationPoint(-5.0F, 2.0F, 10.0F); + } + + this.bipedLeftLeg = new ModelRenderer(this, 16, 48); + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize); + this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F, 0.0F); + this.bipedLeftLegwear = new ModelRenderer(this, 0, 48); + this.bipedLeftLegwear.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize + 0.25F); + this.bipedLeftLegwear.setRotationPoint(1.9F, 12.0F, 0.0F); + this.bipedRightLegwear = new ModelRenderer(this, 0, 32); + this.bipedRightLegwear.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize + 0.25F); + this.bipedRightLegwear.setRotationPoint(-1.9F, 12.0F, 0.0F); + this.bipedBodyWear = new ModelRenderer(this, 16, 32); + this.bipedBodyWear.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, modelSize + 0.25F); + this.bipedBodyWear.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.pushMatrix(); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.bipedLeftLegwear.render(scale); + this.bipedRightLegwear.render(scale); + this.bipedLeftArmwear.render(scale); + this.bipedRightArmwear.render(scale); + this.bipedBodyWear.render(scale); + } + else + { + if (entityIn.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + + this.bipedLeftLegwear.render(scale); + this.bipedRightLegwear.render(scale); + this.bipedLeftArmwear.render(scale); + this.bipedRightArmwear.render(scale); + this.bipedBodyWear.render(scale); + } + + GlStateManager.popMatrix(); + } + + public void renderDeadmau5Head(float scale) + { + copyModelAngles(this.bipedHead, this.bipedDeadmau5Head); + this.bipedDeadmau5Head.rotationPointX = 0.0F; + this.bipedDeadmau5Head.rotationPointY = 0.0F; + this.bipedDeadmau5Head.render(scale); + } + + public void renderCape(float scale) + { + this.bipedCape.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + copyModelAngles(this.bipedLeftLeg, this.bipedLeftLegwear); + copyModelAngles(this.bipedRightLeg, this.bipedRightLegwear); + copyModelAngles(this.bipedLeftArm, this.bipedLeftArmwear); + copyModelAngles(this.bipedRightArm, this.bipedRightArmwear); + copyModelAngles(this.bipedBody, this.bipedBodyWear); + + if (entityIn.isSneaking()) + { + this.bipedCape.rotationPointY = 2.0F; + } + else + { + this.bipedCape.rotationPointY = 0.0F; + } + } + + public void setVisible(boolean visible) + { + super.setVisible(visible); + this.bipedLeftArmwear.showModel = visible; + this.bipedRightArmwear.showModel = visible; + this.bipedLeftLegwear.showModel = visible; + this.bipedRightLegwear.showModel = visible; + this.bipedBodyWear.showModel = visible; + this.bipedCape.showModel = visible; + this.bipedDeadmau5Head.showModel = visible; + } + + public void postRenderArm(float scale, EnumHandSide side) + { + ModelRenderer modelrenderer = this.getArmForSide(side); + + if (this.smallArms) + { + float f = 0.5F * (float)(side == EnumHandSide.RIGHT ? 1 : -1); + modelrenderer.rotationPointX += f; + modelrenderer.postRender(scale); + modelrenderer.rotationPointX -= f; + } + else + { + modelrenderer.postRender(scale); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPolarBear.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPolarBear.java new file mode 100644 index 0000000..352a96c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelPolarBear.java @@ -0,0 +1,115 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityPolarBear; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelPolarBear extends ModelQuadruped +{ + public ModelPolarBear() + { + super(12, 0.0F); + this.textureWidth = 128; + this.textureHeight = 64; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-3.5F, -3.0F, -3.0F, 7, 7, 7, 0.0F); + this.head.setRotationPoint(0.0F, 10.0F, -16.0F); + this.head.setTextureOffset(0, 44).addBox(-2.5F, 1.0F, -6.0F, 5, 3, 3, 0.0F); + this.head.setTextureOffset(26, 0).addBox(-4.5F, -4.0F, -1.0F, 2, 2, 1, 0.0F); + ModelRenderer modelrenderer = this.head.setTextureOffset(26, 0); + modelrenderer.mirror = true; + modelrenderer.addBox(2.5F, -4.0F, -1.0F, 2, 2, 1, 0.0F); + this.body = new ModelRenderer(this); + this.body.setTextureOffset(0, 19).addBox(-5.0F, -13.0F, -7.0F, 14, 14, 11, 0.0F); + this.body.setTextureOffset(39, 0).addBox(-4.0F, -25.0F, -7.0F, 12, 12, 10, 0.0F); + this.body.setRotationPoint(-2.0F, 9.0F, 12.0F); + int i = 10; + this.leg1 = new ModelRenderer(this, 50, 22); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 10, 8, 0.0F); + this.leg1.setRotationPoint(-3.5F, 14.0F, 6.0F); + this.leg2 = new ModelRenderer(this, 50, 22); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 10, 8, 0.0F); + this.leg2.setRotationPoint(3.5F, 14.0F, 6.0F); + this.leg3 = new ModelRenderer(this, 50, 40); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 10, 6, 0.0F); + this.leg3.setRotationPoint(-2.5F, 14.0F, -7.0F); + this.leg4 = new ModelRenderer(this, 50, 40); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 10, 6, 0.0F); + this.leg4.setRotationPoint(2.5F, 14.0F, -7.0F); + --this.leg1.rotationPointX; + ++this.leg2.rotationPointX; + this.leg1.rotationPointZ += 0.0F; + this.leg2.rotationPointZ += 0.0F; + --this.leg3.rotationPointX; + ++this.leg4.rotationPointX; + --this.leg3.rotationPointZ; + --this.leg4.rotationPointZ; + this.childZOffset += 2.0F; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + this.childYOffset = 16.0F; + this.childZOffset = 4.0F; + GlStateManager.pushMatrix(); + GlStateManager.scale(0.6666667F, 0.6666667F, 0.6666667F); + GlStateManager.translate(0.0F, this.childYOffset * scale, this.childZOffset * scale); + this.head.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.body.render(scale); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.head.render(scale); + this.body.render(scale); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + float f = ageInTicks - (float)entityIn.ticksExisted; + float f1 = ((EntityPolarBear)entityIn).getStandingAnimationScale(f); + f1 = f1 * f1; + float f2 = 1.0F - f1; + this.body.rotateAngleX = ((float)Math.PI / 2F) - f1 * (float)Math.PI * 0.35F; + this.body.rotationPointY = 9.0F * f2 + 11.0F * f1; + this.leg3.rotationPointY = 14.0F * f2 + -6.0F * f1; + this.leg3.rotationPointZ = -8.0F * f2 + -4.0F * f1; + this.leg3.rotateAngleX -= f1 * (float)Math.PI * 0.45F; + this.leg4.rotationPointY = this.leg3.rotationPointY; + this.leg4.rotationPointZ = this.leg3.rotationPointZ; + this.leg4.rotateAngleX -= f1 * (float)Math.PI * 0.45F; + this.head.rotationPointY = 10.0F * f2 + -12.0F * f1; + this.head.rotationPointZ = -16.0F * f2 + -3.0F * f1; + this.head.rotateAngleX += f1 * (float)Math.PI * 0.15F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelQuadruped.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelQuadruped.java new file mode 100644 index 0000000..935811d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelQuadruped.java @@ -0,0 +1,92 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelQuadruped extends ModelBase +{ + public ModelRenderer head = new ModelRenderer(this, 0, 0); + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + protected float childYOffset = 8.0F; + protected float childZOffset = 4.0F; + + public ModelQuadruped(int height, float scale) + { + this.head.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, scale); + this.head.setRotationPoint(0.0F, (float)(18 - height), -6.0F); + this.body = new ModelRenderer(this, 28, 8); + this.body.addBox(-5.0F, -10.0F, -7.0F, 10, 16, 8, scale); + this.body.setRotationPoint(0.0F, (float)(17 - height), 2.0F); + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, height, 4, scale); + this.leg1.setRotationPoint(-3.0F, (float)(24 - height), 7.0F); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, height, 4, scale); + this.leg2.setRotationPoint(3.0F, (float)(24 - height), 7.0F); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, height, 4, scale); + this.leg3.setRotationPoint(-3.0F, (float)(24 - height), -5.0F); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, height, 4, scale); + this.leg4.setRotationPoint(3.0F, (float)(24 - height), -5.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, this.childYOffset * scale, this.childZOffset * scale); + this.head.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.body.render(scale); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.head.render(scale); + this.body.render(scale); + this.leg1.render(scale); + this.leg2.render(scale); + this.leg3.render(scale); + this.leg4.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.head.rotateAngleX = headPitch * 0.017453292F; + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.body.rotateAngleX = ((float)Math.PI / 2F); + this.leg1.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + this.leg2.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.leg3.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.leg4.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelRabbit.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelRabbit.java new file mode 100644 index 0000000..2457c9e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelRabbit.java @@ -0,0 +1,202 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelRabbit extends ModelBase +{ + /** The Rabbit's Left Foot */ + private final ModelRenderer rabbitLeftFoot; + /** The Rabbit's Right Foot */ + private final ModelRenderer rabbitRightFoot; + /** The Rabbit's Left Thigh */ + private final ModelRenderer rabbitLeftThigh; + /** The Rabbit's Right Thigh */ + private final ModelRenderer rabbitRightThigh; + /** The Rabbit's Body */ + private final ModelRenderer rabbitBody; + /** The Rabbit's Left Arm */ + private final ModelRenderer rabbitLeftArm; + /** The Rabbit's Right Arm */ + private final ModelRenderer rabbitRightArm; + /** The Rabbit's Head */ + private final ModelRenderer rabbitHead; + /** The Rabbit's Right Ear */ + private final ModelRenderer rabbitRightEar; + /** The Rabbit's Left Ear */ + private final ModelRenderer rabbitLeftEar; + /** The Rabbit's Tail */ + private final ModelRenderer rabbitTail; + /** The Rabbit's Nose */ + private final ModelRenderer rabbitNose; + private float jumpRotation; + + public ModelRabbit() + { + this.setTextureOffset("head.main", 0, 0); + this.setTextureOffset("head.nose", 0, 24); + this.setTextureOffset("head.ear1", 0, 10); + this.setTextureOffset("head.ear2", 6, 10); + this.rabbitLeftFoot = new ModelRenderer(this, 26, 24); + this.rabbitLeftFoot.addBox(-1.0F, 5.5F, -3.7F, 2, 1, 7); + this.rabbitLeftFoot.setRotationPoint(3.0F, 17.5F, 3.7F); + this.rabbitLeftFoot.mirror = true; + this.setRotationOffset(this.rabbitLeftFoot, 0.0F, 0.0F, 0.0F); + this.rabbitRightFoot = new ModelRenderer(this, 8, 24); + this.rabbitRightFoot.addBox(-1.0F, 5.5F, -3.7F, 2, 1, 7); + this.rabbitRightFoot.setRotationPoint(-3.0F, 17.5F, 3.7F); + this.rabbitRightFoot.mirror = true; + this.setRotationOffset(this.rabbitRightFoot, 0.0F, 0.0F, 0.0F); + this.rabbitLeftThigh = new ModelRenderer(this, 30, 15); + this.rabbitLeftThigh.addBox(-1.0F, 0.0F, 0.0F, 2, 4, 5); + this.rabbitLeftThigh.setRotationPoint(3.0F, 17.5F, 3.7F); + this.rabbitLeftThigh.mirror = true; + this.setRotationOffset(this.rabbitLeftThigh, -0.34906584F, 0.0F, 0.0F); + this.rabbitRightThigh = new ModelRenderer(this, 16, 15); + this.rabbitRightThigh.addBox(-1.0F, 0.0F, 0.0F, 2, 4, 5); + this.rabbitRightThigh.setRotationPoint(-3.0F, 17.5F, 3.7F); + this.rabbitRightThigh.mirror = true; + this.setRotationOffset(this.rabbitRightThigh, -0.34906584F, 0.0F, 0.0F); + this.rabbitBody = new ModelRenderer(this, 0, 0); + this.rabbitBody.addBox(-3.0F, -2.0F, -10.0F, 6, 5, 10); + this.rabbitBody.setRotationPoint(0.0F, 19.0F, 8.0F); + this.rabbitBody.mirror = true; + this.setRotationOffset(this.rabbitBody, -0.34906584F, 0.0F, 0.0F); + this.rabbitLeftArm = new ModelRenderer(this, 8, 15); + this.rabbitLeftArm.addBox(-1.0F, 0.0F, -1.0F, 2, 7, 2); + this.rabbitLeftArm.setRotationPoint(3.0F, 17.0F, -1.0F); + this.rabbitLeftArm.mirror = true; + this.setRotationOffset(this.rabbitLeftArm, -0.17453292F, 0.0F, 0.0F); + this.rabbitRightArm = new ModelRenderer(this, 0, 15); + this.rabbitRightArm.addBox(-1.0F, 0.0F, -1.0F, 2, 7, 2); + this.rabbitRightArm.setRotationPoint(-3.0F, 17.0F, -1.0F); + this.rabbitRightArm.mirror = true; + this.setRotationOffset(this.rabbitRightArm, -0.17453292F, 0.0F, 0.0F); + this.rabbitHead = new ModelRenderer(this, 32, 0); + this.rabbitHead.addBox(-2.5F, -4.0F, -5.0F, 5, 4, 5); + this.rabbitHead.setRotationPoint(0.0F, 16.0F, -1.0F); + this.rabbitHead.mirror = true; + this.setRotationOffset(this.rabbitHead, 0.0F, 0.0F, 0.0F); + this.rabbitRightEar = new ModelRenderer(this, 52, 0); + this.rabbitRightEar.addBox(-2.5F, -9.0F, -1.0F, 2, 5, 1); + this.rabbitRightEar.setRotationPoint(0.0F, 16.0F, -1.0F); + this.rabbitRightEar.mirror = true; + this.setRotationOffset(this.rabbitRightEar, 0.0F, -0.2617994F, 0.0F); + this.rabbitLeftEar = new ModelRenderer(this, 58, 0); + this.rabbitLeftEar.addBox(0.5F, -9.0F, -1.0F, 2, 5, 1); + this.rabbitLeftEar.setRotationPoint(0.0F, 16.0F, -1.0F); + this.rabbitLeftEar.mirror = true; + this.setRotationOffset(this.rabbitLeftEar, 0.0F, 0.2617994F, 0.0F); + this.rabbitTail = new ModelRenderer(this, 52, 6); + this.rabbitTail.addBox(-1.5F, -1.5F, 0.0F, 3, 3, 2); + this.rabbitTail.setRotationPoint(0.0F, 20.0F, 7.0F); + this.rabbitTail.mirror = true; + this.setRotationOffset(this.rabbitTail, -0.3490659F, 0.0F, 0.0F); + this.rabbitNose = new ModelRenderer(this, 32, 9); + this.rabbitNose.addBox(-0.5F, -2.5F, -5.5F, 1, 1, 1); + this.rabbitNose.setRotationPoint(0.0F, 16.0F, -1.0F); + this.rabbitNose.mirror = true; + this.setRotationOffset(this.rabbitNose, 0.0F, 0.0F, 0.0F); + } + + private void setRotationOffset(ModelRenderer renderer, float x, float y, float z) + { + renderer.rotateAngleX = x; + renderer.rotateAngleY = y; + renderer.rotateAngleZ = z; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 1.5F; + GlStateManager.pushMatrix(); + GlStateManager.scale(0.56666666F, 0.56666666F, 0.56666666F); + GlStateManager.translate(0.0F, 22.0F * scale, 2.0F * scale); + this.rabbitHead.render(scale); + this.rabbitLeftEar.render(scale); + this.rabbitRightEar.render(scale); + this.rabbitNose.render(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.4F, 0.4F, 0.4F); + GlStateManager.translate(0.0F, 36.0F * scale, 0.0F); + this.rabbitLeftFoot.render(scale); + this.rabbitRightFoot.render(scale); + this.rabbitLeftThigh.render(scale); + this.rabbitRightThigh.render(scale); + this.rabbitBody.render(scale); + this.rabbitLeftArm.render(scale); + this.rabbitRightArm.render(scale); + this.rabbitTail.render(scale); + GlStateManager.popMatrix(); + } + else + { + GlStateManager.pushMatrix(); + GlStateManager.scale(0.6F, 0.6F, 0.6F); + GlStateManager.translate(0.0F, 16.0F * scale, 0.0F); + this.rabbitLeftFoot.render(scale); + this.rabbitRightFoot.render(scale); + this.rabbitLeftThigh.render(scale); + this.rabbitRightThigh.render(scale); + this.rabbitBody.render(scale); + this.rabbitLeftArm.render(scale); + this.rabbitRightArm.render(scale); + this.rabbitHead.render(scale); + this.rabbitRightEar.render(scale); + this.rabbitLeftEar.render(scale); + this.rabbitTail.render(scale); + this.rabbitNose.render(scale); + GlStateManager.popMatrix(); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + float f = ageInTicks - (float)entityIn.ticksExisted; + EntityRabbit entityrabbit = (EntityRabbit)entityIn; + this.rabbitNose.rotateAngleX = headPitch * 0.017453292F; + this.rabbitHead.rotateAngleX = headPitch * 0.017453292F; + this.rabbitRightEar.rotateAngleX = headPitch * 0.017453292F; + this.rabbitLeftEar.rotateAngleX = headPitch * 0.017453292F; + this.rabbitNose.rotateAngleY = netHeadYaw * 0.017453292F; + this.rabbitHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.rabbitRightEar.rotateAngleY = this.rabbitNose.rotateAngleY - 0.2617994F; + this.rabbitLeftEar.rotateAngleY = this.rabbitNose.rotateAngleY + 0.2617994F; + this.jumpRotation = MathHelper.sin(entityrabbit.setJumpCompletion(f) * (float)Math.PI); + this.rabbitLeftThigh.rotateAngleX = (this.jumpRotation * 50.0F - 21.0F) * 0.017453292F; + this.rabbitRightThigh.rotateAngleX = (this.jumpRotation * 50.0F - 21.0F) * 0.017453292F; + this.rabbitLeftFoot.rotateAngleX = this.jumpRotation * 50.0F * 0.017453292F; + this.rabbitRightFoot.rotateAngleX = this.jumpRotation * 50.0F * 0.017453292F; + this.rabbitLeftArm.rotateAngleX = (this.jumpRotation * -40.0F - 11.0F) * 0.017453292F; + this.rabbitRightArm.rotateAngleX = (this.jumpRotation * -40.0F - 11.0F) * 0.017453292F; + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + super.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTickTime); + this.jumpRotation = MathHelper.sin(((EntityRabbit)entitylivingbaseIn).setJumpCompletion(partialTickTime) * (float)Math.PI); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelRenderer.java new file mode 100644 index 0000000..8a39dfe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelRenderer.java @@ -0,0 +1,313 @@ +package net.minecraft.client.model; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ModelRenderer +{ + /** The size of the texture file's width in pixels. */ + public float textureWidth; + /** The size of the texture file's height in pixels. */ + public float textureHeight; + /** The X offset into the texture used for displaying this model */ + private int textureOffsetX; + /** The Y offset into the texture used for displaying this model */ + private int textureOffsetY; + public float rotationPointX; + public float rotationPointY; + public float rotationPointZ; + public float rotateAngleX; + public float rotateAngleY; + public float rotateAngleZ; + private boolean compiled; + /** The GL display list rendered by the Tessellator for this model */ + private int displayList; + public boolean mirror; + public boolean showModel; + /** Hides the model. */ + public boolean isHidden; + public List cubeList; + public List childModels; + public final String boxName; + private final ModelBase baseModel; + public float offsetX; + public float offsetY; + public float offsetZ; + + public ModelRenderer(ModelBase model, String boxNameIn) + { + this.textureWidth = 64.0F; + this.textureHeight = 32.0F; + this.showModel = true; + this.cubeList = Lists.newArrayList(); + this.baseModel = model; + model.boxList.add(this); + this.boxName = boxNameIn; + this.setTextureSize(model.textureWidth, model.textureHeight); + } + + public ModelRenderer(ModelBase model) + { + this(model, (String)null); + } + + public ModelRenderer(ModelBase model, int texOffX, int texOffY) + { + this(model); + this.setTextureOffset(texOffX, texOffY); + } + + /** + * Sets the current box's rotation points and rotation angles to another box. + */ + public void addChild(ModelRenderer renderer) + { + if (this.childModels == null) + { + this.childModels = Lists.newArrayList(); + } + + this.childModels.add(renderer); + } + + public ModelRenderer setTextureOffset(int x, int y) + { + this.textureOffsetX = x; + this.textureOffsetY = y; + return this; + } + + public ModelRenderer addBox(String partName, float offX, float offY, float offZ, int width, int height, int depth) + { + partName = this.boxName + "." + partName; + TextureOffset textureoffset = this.baseModel.getTextureOffset(partName); + this.setTextureOffset(textureoffset.textureOffsetX, textureoffset.textureOffsetY); + this.cubeList.add((new ModelBox(this, this.textureOffsetX, this.textureOffsetY, offX, offY, offZ, width, height, depth, 0.0F)).setBoxName(partName)); + return this; + } + + public ModelRenderer addBox(float offX, float offY, float offZ, int width, int height, int depth) + { + this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, offX, offY, offZ, width, height, depth, 0.0F)); + return this; + } + + public ModelRenderer addBox(float offX, float offY, float offZ, int width, int height, int depth, boolean mirrored) + { + this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, offX, offY, offZ, width, height, depth, 0.0F, mirrored)); + return this; + } + + /** + * Creates a textured box. + */ + public void addBox(float offX, float offY, float offZ, int width, int height, int depth, float scaleFactor) + { + this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, offX, offY, offZ, width, height, depth, scaleFactor)); + } + + public void setRotationPoint(float rotationPointXIn, float rotationPointYIn, float rotationPointZIn) + { + this.rotationPointX = rotationPointXIn; + this.rotationPointY = rotationPointYIn; + this.rotationPointZ = rotationPointZIn; + } + + @SideOnly(Side.CLIENT) + public void render(float scale) + { + if (!this.isHidden) + { + if (this.showModel) + { + if (!this.compiled) + { + this.compileDisplayList(scale); + } + + GlStateManager.translate(this.offsetX, this.offsetY, this.offsetZ); + + if (this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F) + { + if (this.rotationPointX == 0.0F && this.rotationPointY == 0.0F && this.rotationPointZ == 0.0F) + { + GlStateManager.callList(this.displayList); + + if (this.childModels != null) + { + for (int k = 0; k < this.childModels.size(); ++k) + { + ((ModelRenderer)this.childModels.get(k)).render(scale); + } + } + } + else + { + GlStateManager.translate(this.rotationPointX * scale, this.rotationPointY * scale, this.rotationPointZ * scale); + GlStateManager.callList(this.displayList); + + if (this.childModels != null) + { + for (int j = 0; j < this.childModels.size(); ++j) + { + ((ModelRenderer)this.childModels.get(j)).render(scale); + } + } + + GlStateManager.translate(-this.rotationPointX * scale, -this.rotationPointY * scale, -this.rotationPointZ * scale); + } + } + else + { + GlStateManager.pushMatrix(); + GlStateManager.translate(this.rotationPointX * scale, this.rotationPointY * scale, this.rotationPointZ * scale); + + if (this.rotateAngleZ != 0.0F) + { + GlStateManager.rotate(this.rotateAngleZ * (180F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } + + if (this.rotateAngleY != 0.0F) + { + GlStateManager.rotate(this.rotateAngleY * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + if (this.rotateAngleX != 0.0F) + { + GlStateManager.rotate(this.rotateAngleX * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } + + GlStateManager.callList(this.displayList); + + if (this.childModels != null) + { + for (int i = 0; i < this.childModels.size(); ++i) + { + ((ModelRenderer)this.childModels.get(i)).render(scale); + } + } + + GlStateManager.popMatrix(); + } + + GlStateManager.translate(-this.offsetX, -this.offsetY, -this.offsetZ); + } + } + } + + @SideOnly(Side.CLIENT) + public void renderWithRotation(float scale) + { + if (!this.isHidden) + { + if (this.showModel) + { + if (!this.compiled) + { + this.compileDisplayList(scale); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(this.rotationPointX * scale, this.rotationPointY * scale, this.rotationPointZ * scale); + + if (this.rotateAngleY != 0.0F) + { + GlStateManager.rotate(this.rotateAngleY * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + if (this.rotateAngleX != 0.0F) + { + GlStateManager.rotate(this.rotateAngleX * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } + + if (this.rotateAngleZ != 0.0F) + { + GlStateManager.rotate(this.rotateAngleZ * (180F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } + + GlStateManager.callList(this.displayList); + GlStateManager.popMatrix(); + } + } + } + + /** + * Allows the changing of Angles after a box has been rendered + */ + @SideOnly(Side.CLIENT) + public void postRender(float scale) + { + if (!this.isHidden) + { + if (this.showModel) + { + if (!this.compiled) + { + this.compileDisplayList(scale); + } + + if (this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F) + { + if (this.rotationPointX != 0.0F || this.rotationPointY != 0.0F || this.rotationPointZ != 0.0F) + { + GlStateManager.translate(this.rotationPointX * scale, this.rotationPointY * scale, this.rotationPointZ * scale); + } + } + else + { + GlStateManager.translate(this.rotationPointX * scale, this.rotationPointY * scale, this.rotationPointZ * scale); + + if (this.rotateAngleZ != 0.0F) + { + GlStateManager.rotate(this.rotateAngleZ * (180F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } + + if (this.rotateAngleY != 0.0F) + { + GlStateManager.rotate(this.rotateAngleY * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + if (this.rotateAngleX != 0.0F) + { + GlStateManager.rotate(this.rotateAngleX * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } + } + } + } + } + + /** + * Compiles a GL display list for this model + */ + @SideOnly(Side.CLIENT) + private void compileDisplayList(float scale) + { + this.displayList = GLAllocation.generateDisplayLists(1); + GlStateManager.glNewList(this.displayList, 4864); + BufferBuilder bufferbuilder = Tessellator.getInstance().getBuffer(); + + for (int i = 0; i < this.cubeList.size(); ++i) + { + ((ModelBox)this.cubeList.get(i)).render(bufferbuilder, scale); + } + + GlStateManager.glEndList(); + this.compiled = true; + } + + /** + * Returns the model renderer with the new texture parameters. + */ + public ModelRenderer setTextureSize(int textureWidthIn, int textureHeightIn) + { + this.textureWidth = (float)textureWidthIn; + this.textureHeight = (float)textureHeightIn; + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSheep1.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSheep1.java new file mode 100644 index 0000000..ae2f258 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSheep1.java @@ -0,0 +1,59 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSheep1 extends ModelQuadruped +{ + private float headRotationAngleX; + + public ModelSheep1() + { + super(12, 0.0F); + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-3.0F, -4.0F, -4.0F, 6, 6, 6, 0.6F); + this.head.setRotationPoint(0.0F, 6.0F, -8.0F); + this.body = new ModelRenderer(this, 28, 8); + this.body.addBox(-4.0F, -10.0F, -7.0F, 8, 16, 6, 1.75F); + this.body.setRotationPoint(0.0F, 5.0F, 2.0F); + float f = 0.5F; + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F); + this.leg1.setRotationPoint(-3.0F, 12.0F, 7.0F); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F); + this.leg2.setRotationPoint(3.0F, 12.0F, 7.0F); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F); + this.leg3.setRotationPoint(-3.0F, 12.0F, -5.0F); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, 0.5F); + this.leg4.setRotationPoint(3.0F, 12.0F, -5.0F); + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + super.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTickTime); + this.head.rotationPointY = 6.0F + ((EntitySheep)entitylivingbaseIn).getHeadRotationPointY(partialTickTime) * 9.0F; + this.headRotationAngleX = ((EntitySheep)entitylivingbaseIn).getHeadRotationAngleX(partialTickTime); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.head.rotateAngleX = this.headRotationAngleX; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSheep2.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSheep2.java new file mode 100644 index 0000000..2a4b895 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSheep2.java @@ -0,0 +1,46 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSheep2 extends ModelQuadruped +{ + private float headRotationAngleX; + + public ModelSheep2() + { + super(12, 0.0F); + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-3.0F, -4.0F, -6.0F, 6, 6, 8, 0.0F); + this.head.setRotationPoint(0.0F, 6.0F, -8.0F); + this.body = new ModelRenderer(this, 28, 8); + this.body.addBox(-4.0F, -10.0F, -7.0F, 8, 16, 6, 0.0F); + this.body.setRotationPoint(0.0F, 5.0F, 2.0F); + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + super.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTickTime); + this.head.rotationPointY = 6.0F + ((EntitySheep)entitylivingbaseIn).getHeadRotationPointY(partialTickTime) * 9.0F; + this.headRotationAngleX = ((EntitySheep)entitylivingbaseIn).getHeadRotationAngleX(partialTickTime); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.head.rotateAngleX = this.headRotationAngleX; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShield.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShield.java new file mode 100644 index 0000000..1de8719 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShield.java @@ -0,0 +1,27 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelShield extends ModelBase +{ + public ModelRenderer plate; + public ModelRenderer handle; + + public ModelShield() + { + this.textureWidth = 64; + this.textureHeight = 64; + this.plate = new ModelRenderer(this, 0, 0); + this.plate.addBox(-6.0F, -11.0F, -2.0F, 12, 22, 1, 0.0F); + this.handle = new ModelRenderer(this, 26, 0); + this.handle.addBox(-1.0F, -3.0F, -1.0F, 2, 6, 6, 0.0F); + } + + public void render() + { + this.plate.render(0.0625F); + this.handle.render(0.0625F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShulker.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShulker.java new file mode 100644 index 0000000..d5d3631 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShulker.java @@ -0,0 +1,72 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityShulker; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelShulker extends ModelBase +{ + public final ModelRenderer base; + public final ModelRenderer lid; + public ModelRenderer head; + + public ModelShulker() + { + this.textureHeight = 64; + this.textureWidth = 64; + this.lid = new ModelRenderer(this); + this.base = new ModelRenderer(this); + this.head = new ModelRenderer(this); + this.lid.setTextureOffset(0, 0).addBox(-8.0F, -16.0F, -8.0F, 16, 12, 16); + this.lid.setRotationPoint(0.0F, 24.0F, 0.0F); + this.base.setTextureOffset(0, 28).addBox(-8.0F, -8.0F, -8.0F, 16, 8, 16); + this.base.setRotationPoint(0.0F, 24.0F, 0.0F); + this.head.setTextureOffset(0, 52).addBox(-3.0F, 0.0F, -3.0F, 6, 6, 6); + this.head.setRotationPoint(0.0F, 12.0F, 0.0F); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + EntityShulker entityshulker = (EntityShulker)entityIn; + float f = ageInTicks - (float)entityshulker.ticksExisted; + float f1 = (0.5F + entityshulker.getClientPeekAmount(f)) * (float)Math.PI; + float f2 = -1.0F + MathHelper.sin(f1); + float f3 = 0.0F; + + if (f1 > (float)Math.PI) + { + f3 = MathHelper.sin(ageInTicks * 0.1F) * 0.7F; + } + + this.lid.setRotationPoint(0.0F, 16.0F + MathHelper.sin(f1) * 8.0F + f3, 0.0F); + + if (entityshulker.getClientPeekAmount(f) > 0.3F) + { + this.lid.rotateAngleY = f2 * f2 * f2 * f2 * (float)Math.PI * 0.125F; + } + else + { + this.lid.rotateAngleY = 0.0F; + } + + this.head.rotateAngleX = headPitch * 0.017453292F; + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.base.render(scale); + this.lid.render(scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShulkerBullet.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShulkerBullet.java new file mode 100644 index 0000000..8dbb89b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelShulkerBullet.java @@ -0,0 +1,43 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelShulkerBullet extends ModelBase +{ + public ModelRenderer renderer; + + public ModelShulkerBullet() + { + this.textureWidth = 64; + this.textureHeight = 32; + this.renderer = new ModelRenderer(this); + this.renderer.setTextureOffset(0, 0).addBox(-4.0F, -4.0F, -1.0F, 8, 8, 2, 0.0F); + this.renderer.setTextureOffset(0, 10).addBox(-1.0F, -4.0F, -4.0F, 2, 8, 8, 0.0F); + this.renderer.setTextureOffset(20, 0).addBox(-4.0F, -1.0F, -4.0F, 8, 2, 8, 0.0F); + this.renderer.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.renderer.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.renderer.rotateAngleY = netHeadYaw * 0.017453292F; + this.renderer.rotateAngleX = headPitch * 0.017453292F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSign.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSign.java new file mode 100644 index 0000000..6acfca9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSign.java @@ -0,0 +1,29 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSign extends ModelBase +{ + /** The board on a sign that has the writing on it. */ + public ModelRenderer signBoard = new ModelRenderer(this, 0, 0); + /** The stick a sign stands on. */ + public ModelRenderer signStick; + + public ModelSign() + { + this.signBoard.addBox(-12.0F, -14.0F, -1.0F, 24, 12, 2, 0.0F); + this.signStick = new ModelRenderer(this, 0, 14); + this.signStick.addBox(-1.0F, -2.0F, -1.0F, 2, 14, 2, 0.0F); + } + + /** + * Renders the sign model through TileEntitySignRenderer + */ + public void renderSign() + { + this.signBoard.render(0.0625F); + this.signStick.render(0.0625F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSilverfish.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSilverfish.java new file mode 100644 index 0000000..bf1c230 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSilverfish.java @@ -0,0 +1,87 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSilverfish extends ModelBase +{ + /** The body parts of the silverfish's model. */ + private final ModelRenderer[] silverfishBodyParts = new ModelRenderer[7]; + /** The wings (dust-looking sprites) on the silverfish's model. */ + private final ModelRenderer[] silverfishWings; + private final float[] zPlacement = new float[7]; + /** The widths, heights, and lengths for the silverfish model boxes. */ + private static final int[][] SILVERFISH_BOX_LENGTH = new int[][] {{3, 2, 2}, {4, 3, 2}, {6, 4, 3}, {3, 3, 3}, {2, 2, 3}, {2, 1, 2}, {1, 1, 2}}; + /** The texture positions for the silverfish's model's boxes. */ + private static final int[][] SILVERFISH_TEXTURE_POSITIONS = new int[][] {{0, 0}, {0, 4}, {0, 9}, {0, 16}, {0, 22}, {11, 0}, {13, 4}}; + + public ModelSilverfish() + { + float f = -3.5F; + + for (int i = 0; i < this.silverfishBodyParts.length; ++i) + { + this.silverfishBodyParts[i] = new ModelRenderer(this, SILVERFISH_TEXTURE_POSITIONS[i][0], SILVERFISH_TEXTURE_POSITIONS[i][1]); + this.silverfishBodyParts[i].addBox((float)SILVERFISH_BOX_LENGTH[i][0] * -0.5F, 0.0F, (float)SILVERFISH_BOX_LENGTH[i][2] * -0.5F, SILVERFISH_BOX_LENGTH[i][0], SILVERFISH_BOX_LENGTH[i][1], SILVERFISH_BOX_LENGTH[i][2]); + this.silverfishBodyParts[i].setRotationPoint(0.0F, (float)(24 - SILVERFISH_BOX_LENGTH[i][1]), f); + this.zPlacement[i] = f; + + if (i < this.silverfishBodyParts.length - 1) + { + f += (float)(SILVERFISH_BOX_LENGTH[i][2] + SILVERFISH_BOX_LENGTH[i + 1][2]) * 0.5F; + } + } + + this.silverfishWings = new ModelRenderer[3]; + this.silverfishWings[0] = new ModelRenderer(this, 20, 0); + this.silverfishWings[0].addBox(-5.0F, 0.0F, (float)SILVERFISH_BOX_LENGTH[2][2] * -0.5F, 10, 8, SILVERFISH_BOX_LENGTH[2][2]); + this.silverfishWings[0].setRotationPoint(0.0F, 16.0F, this.zPlacement[2]); + this.silverfishWings[1] = new ModelRenderer(this, 20, 11); + this.silverfishWings[1].addBox(-3.0F, 0.0F, (float)SILVERFISH_BOX_LENGTH[4][2] * -0.5F, 6, 4, SILVERFISH_BOX_LENGTH[4][2]); + this.silverfishWings[1].setRotationPoint(0.0F, 20.0F, this.zPlacement[4]); + this.silverfishWings[2] = new ModelRenderer(this, 20, 18); + this.silverfishWings[2].addBox(-3.0F, 0.0F, (float)SILVERFISH_BOX_LENGTH[4][2] * -0.5F, 6, 5, SILVERFISH_BOX_LENGTH[1][2]); + this.silverfishWings[2].setRotationPoint(0.0F, 19.0F, this.zPlacement[1]); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + for (ModelRenderer modelrenderer : this.silverfishBodyParts) + { + modelrenderer.render(scale); + } + + for (ModelRenderer modelrenderer1 : this.silverfishWings) + { + modelrenderer1.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + for (int i = 0; i < this.silverfishBodyParts.length; ++i) + { + this.silverfishBodyParts[i].rotateAngleY = MathHelper.cos(ageInTicks * 0.9F + (float)i * 0.15F * (float)Math.PI) * (float)Math.PI * 0.05F * (float)(1 + Math.abs(i - 2)); + this.silverfishBodyParts[i].rotationPointX = MathHelper.sin(ageInTicks * 0.9F + (float)i * 0.15F * (float)Math.PI) * (float)Math.PI * 0.2F * (float)Math.abs(i - 2); + } + + this.silverfishWings[0].rotateAngleY = this.silverfishBodyParts[2].rotateAngleY; + this.silverfishWings[1].rotateAngleY = this.silverfishBodyParts[4].rotateAngleY; + this.silverfishWings[1].rotationPointX = this.silverfishBodyParts[4].rotationPointX; + this.silverfishWings[2].rotateAngleY = this.silverfishBodyParts[1].rotateAngleY; + this.silverfishWings[2].rotationPointX = this.silverfishBodyParts[1].rotationPointX; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSkeleton.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSkeleton.java new file mode 100644 index 0000000..72eb012 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSkeleton.java @@ -0,0 +1,108 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.AbstractSkeleton; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSkeleton extends ModelBiped +{ + public ModelSkeleton() + { + this(0.0F, false); + } + + public ModelSkeleton(float modelSize, boolean p_i46303_2_) + { + super(modelSize, 0.0F, 64, 32); + + if (!p_i46303_2_) + { + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, modelSize); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 40, 16); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, modelSize); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, modelSize); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F, 0.0F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 12, 2, modelSize); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F, 0.0F); + } + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + this.rightArmPose = ModelBiped.ArmPose.EMPTY; + this.leftArmPose = ModelBiped.ArmPose.EMPTY; + ItemStack itemstack = entitylivingbaseIn.getHeldItem(EnumHand.MAIN_HAND); + + if (itemstack.getItem() == Items.BOW && ((AbstractSkeleton)entitylivingbaseIn).isSwingingArms()) + { + if (entitylivingbaseIn.getPrimaryHand() == EnumHandSide.RIGHT) + { + this.rightArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + } + else + { + this.leftArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + } + } + + super.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTickTime); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + ItemStack itemstack = ((EntityLivingBase)entityIn).getHeldItemMainhand(); + AbstractSkeleton abstractskeleton = (AbstractSkeleton)entityIn; + + if (abstractskeleton.isSwingingArms() && (itemstack.isEmpty() || itemstack.getItem() != Items.BOW)) + { + float f = MathHelper.sin(this.swingProgress * (float)Math.PI); + float f1 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - f * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - f * 0.6F; + this.bipedRightArm.rotateAngleX = -((float)Math.PI / 2F); + this.bipedLeftArm.rotateAngleX = -((float)Math.PI / 2F); + this.bipedRightArm.rotateAngleX -= f * 1.2F - f1 * 0.4F; + this.bipedLeftArm.rotateAngleX -= f * 1.2F - f1 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + } + } + + public void postRenderArm(float scale, EnumHandSide side) + { + float f = side == EnumHandSide.RIGHT ? 1.0F : -1.0F; + ModelRenderer modelrenderer = this.getArmForSide(side); + modelrenderer.rotationPointX += f; + modelrenderer.postRender(scale); + modelrenderer.rotationPointX -= f; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSkeletonHead.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSkeletonHead.java new file mode 100644 index 0000000..4f38ae1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSkeletonHead.java @@ -0,0 +1,46 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSkeletonHead extends ModelBase +{ + public ModelRenderer skeletonHead; + + public ModelSkeletonHead() + { + this(0, 35, 64, 64); + } + + public ModelSkeletonHead(int p_i1155_1_, int p_i1155_2_, int p_i1155_3_, int p_i1155_4_) + { + this.textureWidth = p_i1155_3_; + this.textureHeight = p_i1155_4_; + this.skeletonHead = new ModelRenderer(this, p_i1155_1_, p_i1155_2_); + this.skeletonHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F); + this.skeletonHead.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.skeletonHead.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.skeletonHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.skeletonHead.rotateAngleX = headPitch * 0.017453292F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSlime.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSlime.java new file mode 100644 index 0000000..23ce62c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSlime.java @@ -0,0 +1,56 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSlime extends ModelBase +{ + /** The slime's bodies, both the inside box and the outside box */ + ModelRenderer slimeBodies; + /** The slime's right eye */ + ModelRenderer slimeRightEye; + /** The slime's left eye */ + ModelRenderer slimeLeftEye; + /** The slime's mouth */ + ModelRenderer slimeMouth; + + public ModelSlime(int p_i1157_1_) + { + if (p_i1157_1_ > 0) + { + this.slimeBodies = new ModelRenderer(this, 0, p_i1157_1_); + this.slimeBodies.addBox(-3.0F, 17.0F, -3.0F, 6, 6, 6); + this.slimeRightEye = new ModelRenderer(this, 32, 0); + this.slimeRightEye.addBox(-3.25F, 18.0F, -3.5F, 2, 2, 2); + this.slimeLeftEye = new ModelRenderer(this, 32, 4); + this.slimeLeftEye.addBox(1.25F, 18.0F, -3.5F, 2, 2, 2); + this.slimeMouth = new ModelRenderer(this, 32, 8); + this.slimeMouth.addBox(0.0F, 21.0F, -3.5F, 1, 1, 1); + } + else + { + this.slimeBodies = new ModelRenderer(this, 0, p_i1157_1_); + this.slimeBodies.addBox(-4.0F, 16.0F, -4.0F, 8, 8, 8); + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + GlStateManager.translate(0.0F, 0.001F, 0.0F); + this.slimeBodies.render(scale); + + if (this.slimeRightEye != null) + { + this.slimeRightEye.render(scale); + this.slimeLeftEye.render(scale); + this.slimeMouth.render(scale); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSnowMan.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSnowMan.java new file mode 100644 index 0000000..ac0755e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSnowMan.java @@ -0,0 +1,73 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSnowMan extends ModelBase +{ + public ModelRenderer body; + public ModelRenderer bottomBody; + public ModelRenderer head; + public ModelRenderer rightHand; + public ModelRenderer leftHand; + + public ModelSnowMan() + { + float f = 4.0F; + float f1 = 0.0F; + this.head = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, -0.5F); + this.head.setRotationPoint(0.0F, 4.0F, 0.0F); + this.rightHand = (new ModelRenderer(this, 32, 0)).setTextureSize(64, 64); + this.rightHand.addBox(-1.0F, 0.0F, -1.0F, 12, 2, 2, -0.5F); + this.rightHand.setRotationPoint(0.0F, 6.0F, 0.0F); + this.leftHand = (new ModelRenderer(this, 32, 0)).setTextureSize(64, 64); + this.leftHand.addBox(-1.0F, 0.0F, -1.0F, 12, 2, 2, -0.5F); + this.leftHand.setRotationPoint(0.0F, 6.0F, 0.0F); + this.body = (new ModelRenderer(this, 0, 16)).setTextureSize(64, 64); + this.body.addBox(-5.0F, -10.0F, -5.0F, 10, 10, 10, -0.5F); + this.body.setRotationPoint(0.0F, 13.0F, 0.0F); + this.bottomBody = (new ModelRenderer(this, 0, 36)).setTextureSize(64, 64); + this.bottomBody.addBox(-6.0F, -12.0F, -6.0F, 12, 12, 12, -0.5F); + this.bottomBody.setRotationPoint(0.0F, 24.0F, 0.0F); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.head.rotateAngleY = netHeadYaw * 0.017453292F; + this.head.rotateAngleX = headPitch * 0.017453292F; + this.body.rotateAngleY = netHeadYaw * 0.017453292F * 0.25F; + float f = MathHelper.sin(this.body.rotateAngleY); + float f1 = MathHelper.cos(this.body.rotateAngleY); + this.rightHand.rotateAngleZ = 1.0F; + this.leftHand.rotateAngleZ = -1.0F; + this.rightHand.rotateAngleY = 0.0F + this.body.rotateAngleY; + this.leftHand.rotateAngleY = (float)Math.PI + this.body.rotateAngleY; + this.rightHand.rotationPointX = f1 * 5.0F; + this.rightHand.rotationPointZ = -f * 5.0F; + this.leftHand.rotationPointX = -f1 * 5.0F; + this.leftHand.rotationPointZ = f * 5.0F; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.body.render(scale); + this.bottomBody.render(scale); + this.head.render(scale); + this.rightHand.render(scale); + this.leftHand.render(scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSpider.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSpider.java new file mode 100644 index 0000000..c2b4a28 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSpider.java @@ -0,0 +1,145 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSpider extends ModelBase +{ + /** The spider's head box */ + public ModelRenderer spiderHead; + /** The spider's neck box */ + public ModelRenderer spiderNeck; + /** The spider's body box */ + public ModelRenderer spiderBody; + /** Spider's first leg */ + public ModelRenderer spiderLeg1; + /** Spider's second leg */ + public ModelRenderer spiderLeg2; + /** Spider's third leg */ + public ModelRenderer spiderLeg3; + /** Spider's fourth leg */ + public ModelRenderer spiderLeg4; + /** Spider's fifth leg */ + public ModelRenderer spiderLeg5; + /** Spider's sixth leg */ + public ModelRenderer spiderLeg6; + /** Spider's seventh leg */ + public ModelRenderer spiderLeg7; + /** Spider's eight leg */ + public ModelRenderer spiderLeg8; + + public ModelSpider() + { + float f = 0.0F; + int i = 15; + this.spiderHead = new ModelRenderer(this, 32, 4); + this.spiderHead.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, 0.0F); + this.spiderHead.setRotationPoint(0.0F, 15.0F, -3.0F); + this.spiderNeck = new ModelRenderer(this, 0, 0); + this.spiderNeck.addBox(-3.0F, -3.0F, -3.0F, 6, 6, 6, 0.0F); + this.spiderNeck.setRotationPoint(0.0F, 15.0F, 0.0F); + this.spiderBody = new ModelRenderer(this, 0, 12); + this.spiderBody.addBox(-5.0F, -4.0F, -6.0F, 10, 8, 12, 0.0F); + this.spiderBody.setRotationPoint(0.0F, 15.0F, 9.0F); + this.spiderLeg1 = new ModelRenderer(this, 18, 0); + this.spiderLeg1.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg1.setRotationPoint(-4.0F, 15.0F, 2.0F); + this.spiderLeg2 = new ModelRenderer(this, 18, 0); + this.spiderLeg2.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg2.setRotationPoint(4.0F, 15.0F, 2.0F); + this.spiderLeg3 = new ModelRenderer(this, 18, 0); + this.spiderLeg3.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg3.setRotationPoint(-4.0F, 15.0F, 1.0F); + this.spiderLeg4 = new ModelRenderer(this, 18, 0); + this.spiderLeg4.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg4.setRotationPoint(4.0F, 15.0F, 1.0F); + this.spiderLeg5 = new ModelRenderer(this, 18, 0); + this.spiderLeg5.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg5.setRotationPoint(-4.0F, 15.0F, 0.0F); + this.spiderLeg6 = new ModelRenderer(this, 18, 0); + this.spiderLeg6.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg6.setRotationPoint(4.0F, 15.0F, 0.0F); + this.spiderLeg7 = new ModelRenderer(this, 18, 0); + this.spiderLeg7.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg7.setRotationPoint(-4.0F, 15.0F, -1.0F); + this.spiderLeg8 = new ModelRenderer(this, 18, 0); + this.spiderLeg8.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, 0.0F); + this.spiderLeg8.setRotationPoint(4.0F, 15.0F, -1.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.spiderHead.render(scale); + this.spiderNeck.render(scale); + this.spiderBody.render(scale); + this.spiderLeg1.render(scale); + this.spiderLeg2.render(scale); + this.spiderLeg3.render(scale); + this.spiderLeg4.render(scale); + this.spiderLeg5.render(scale); + this.spiderLeg6.render(scale); + this.spiderLeg7.render(scale); + this.spiderLeg8.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.spiderHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.spiderHead.rotateAngleX = headPitch * 0.017453292F; + float f = ((float)Math.PI / 4F); + this.spiderLeg1.rotateAngleZ = -((float)Math.PI / 4F); + this.spiderLeg2.rotateAngleZ = ((float)Math.PI / 4F); + this.spiderLeg3.rotateAngleZ = -0.58119464F; + this.spiderLeg4.rotateAngleZ = 0.58119464F; + this.spiderLeg5.rotateAngleZ = -0.58119464F; + this.spiderLeg6.rotateAngleZ = 0.58119464F; + this.spiderLeg7.rotateAngleZ = -((float)Math.PI / 4F); + this.spiderLeg8.rotateAngleZ = ((float)Math.PI / 4F); + float f1 = -0.0F; + float f2 = 0.3926991F; + this.spiderLeg1.rotateAngleY = ((float)Math.PI / 4F); + this.spiderLeg2.rotateAngleY = -((float)Math.PI / 4F); + this.spiderLeg3.rotateAngleY = 0.3926991F; + this.spiderLeg4.rotateAngleY = -0.3926991F; + this.spiderLeg5.rotateAngleY = -0.3926991F; + this.spiderLeg6.rotateAngleY = 0.3926991F; + this.spiderLeg7.rotateAngleY = -((float)Math.PI / 4F); + this.spiderLeg8.rotateAngleY = ((float)Math.PI / 4F); + float f3 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + 0.0F) * 0.4F) * limbSwingAmount; + float f4 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + (float)Math.PI) * 0.4F) * limbSwingAmount; + float f5 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + ((float)Math.PI / 2F)) * 0.4F) * limbSwingAmount; + float f6 = -(MathHelper.cos(limbSwing * 0.6662F * 2.0F + ((float)Math.PI * 3F / 2F)) * 0.4F) * limbSwingAmount; + float f7 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + 0.0F) * 0.4F) * limbSwingAmount; + float f8 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + (float)Math.PI) * 0.4F) * limbSwingAmount; + float f9 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + ((float)Math.PI / 2F)) * 0.4F) * limbSwingAmount; + float f10 = Math.abs(MathHelper.sin(limbSwing * 0.6662F + ((float)Math.PI * 3F / 2F)) * 0.4F) * limbSwingAmount; + this.spiderLeg1.rotateAngleY += f3; + this.spiderLeg2.rotateAngleY += -f3; + this.spiderLeg3.rotateAngleY += f4; + this.spiderLeg4.rotateAngleY += -f4; + this.spiderLeg5.rotateAngleY += f5; + this.spiderLeg6.rotateAngleY += -f5; + this.spiderLeg7.rotateAngleY += f6; + this.spiderLeg8.rotateAngleY += -f6; + this.spiderLeg1.rotateAngleZ += f7; + this.spiderLeg2.rotateAngleZ += -f7; + this.spiderLeg3.rotateAngleZ += f8; + this.spiderLeg4.rotateAngleZ += -f8; + this.spiderLeg5.rotateAngleZ += f9; + this.spiderLeg6.rotateAngleZ += -f9; + this.spiderLeg7.rotateAngleZ += f10; + this.spiderLeg8.rotateAngleZ += -f10; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSquid.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSquid.java new file mode 100644 index 0000000..e764949 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelSquid.java @@ -0,0 +1,63 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelSquid extends ModelBase +{ + /** The squid's body */ + ModelRenderer squidBody; + /** The squid's tentacles */ + ModelRenderer[] squidTentacles = new ModelRenderer[8]; + + public ModelSquid() + { + int i = -16; + this.squidBody = new ModelRenderer(this, 0, 0); + this.squidBody.addBox(-6.0F, -8.0F, -6.0F, 12, 16, 12); + this.squidBody.rotationPointY += 8.0F; + + for (int j = 0; j < this.squidTentacles.length; ++j) + { + this.squidTentacles[j] = new ModelRenderer(this, 48, 0); + double d0 = (double)j * Math.PI * 2.0D / (double)this.squidTentacles.length; + float f = (float)Math.cos(d0) * 5.0F; + float f1 = (float)Math.sin(d0) * 5.0F; + this.squidTentacles[j].addBox(-1.0F, 0.0F, -1.0F, 2, 18, 2); + this.squidTentacles[j].rotationPointX = f; + this.squidTentacles[j].rotationPointZ = f1; + this.squidTentacles[j].rotationPointY = 15.0F; + d0 = (double)j * Math.PI * -2.0D / (double)this.squidTentacles.length + (Math.PI / 2D); + this.squidTentacles[j].rotateAngleY = (float)d0; + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + for (ModelRenderer modelrenderer : this.squidTentacles) + { + modelrenderer.rotateAngleX = ageInTicks; + } + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.squidBody.render(scale); + + for (ModelRenderer modelrenderer : this.squidTentacles) + { + modelrenderer.render(scale); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelVex.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelVex.java new file mode 100644 index 0000000..eba8a63 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelVex.java @@ -0,0 +1,85 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelVex extends ModelBiped +{ + protected ModelRenderer leftWing; + protected ModelRenderer rightWing; + + public ModelVex() + { + this(0.0F); + } + + public ModelVex(float p_i47224_1_) + { + super(p_i47224_1_, 0.0F, 64, 64); + this.bipedLeftLeg.showModel = false; + this.bipedHeadwear.showModel = false; + this.bipedRightLeg = new ModelRenderer(this, 32, 0); + this.bipedRightLeg.addBox(-1.0F, -1.0F, -2.0F, 6, 10, 4, 0.0F); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F, 0.0F); + this.rightWing = new ModelRenderer(this, 0, 32); + this.rightWing.addBox(-20.0F, 0.0F, 0.0F, 20, 12, 1); + this.leftWing = new ModelRenderer(this, 0, 32); + this.leftWing.mirror = true; + this.leftWing.addBox(0.0F, 0.0F, 0.0F, 20, 12, 1); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.rightWing.render(scale); + this.leftWing.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + EntityVex entityvex = (EntityVex)entityIn; + + if (entityvex.isCharging()) + { + if (entityvex.getPrimaryHand() == EnumHandSide.RIGHT) + { + this.bipedRightArm.rotateAngleX = 3.7699115F; + } + else + { + this.bipedLeftArm.rotateAngleX = 3.7699115F; + } + } + + this.bipedRightLeg.rotateAngleX += ((float)Math.PI / 5F); + this.rightWing.rotationPointZ = 2.0F; + this.leftWing.rotationPointZ = 2.0F; + this.rightWing.rotationPointY = 1.0F; + this.leftWing.rotationPointY = 1.0F; + this.rightWing.rotateAngleY = 0.47123894F + MathHelper.cos(ageInTicks * 0.8F) * (float)Math.PI * 0.05F; + this.leftWing.rotateAngleY = -this.rightWing.rotateAngleY; + this.leftWing.rotateAngleZ = -0.47123894F; + this.leftWing.rotateAngleX = 0.47123894F; + this.rightWing.rotateAngleX = 0.47123894F; + this.rightWing.rotateAngleZ = 0.47123894F; + } + + public int getModelVersion() + { + return 23; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelVillager.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelVillager.java new file mode 100644 index 0000000..7e5abb1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelVillager.java @@ -0,0 +1,85 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelVillager extends ModelBase +{ + /** The head box of the VillagerModel */ + public ModelRenderer villagerHead; + /** The body of the VillagerModel */ + public ModelRenderer villagerBody; + /** The arms of the VillagerModel */ + public ModelRenderer villagerArms; + /** The right leg of the VillagerModel */ + public ModelRenderer rightVillagerLeg; + /** The left leg of the VillagerModel */ + public ModelRenderer leftVillagerLeg; + public ModelRenderer villagerNose; + + public ModelVillager(float scale) + { + this(scale, 0.0F, 64, 64); + } + + public ModelVillager(float scale, float p_i1164_2_, int width, int height) + { + this.villagerHead = (new ModelRenderer(this)).setTextureSize(width, height); + this.villagerHead.setRotationPoint(0.0F, 0.0F + p_i1164_2_, 0.0F); + this.villagerHead.setTextureOffset(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, scale); + this.villagerNose = (new ModelRenderer(this)).setTextureSize(width, height); + this.villagerNose.setRotationPoint(0.0F, p_i1164_2_ - 2.0F, 0.0F); + this.villagerNose.setTextureOffset(24, 0).addBox(-1.0F, -1.0F, -6.0F, 2, 4, 2, scale); + this.villagerHead.addChild(this.villagerNose); + this.villagerBody = (new ModelRenderer(this)).setTextureSize(width, height); + this.villagerBody.setRotationPoint(0.0F, 0.0F + p_i1164_2_, 0.0F); + this.villagerBody.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, scale); + this.villagerBody.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8, 18, 6, scale + 0.5F); + this.villagerArms = (new ModelRenderer(this)).setTextureSize(width, height); + this.villagerArms.setRotationPoint(0.0F, 0.0F + p_i1164_2_ + 2.0F, 0.0F); + this.villagerArms.setTextureOffset(44, 22).addBox(-8.0F, -2.0F, -2.0F, 4, 8, 4, scale); + this.villagerArms.setTextureOffset(44, 22).addBox(4.0F, -2.0F, -2.0F, 4, 8, 4, scale); + this.villagerArms.setTextureOffset(40, 38).addBox(-4.0F, 2.0F, -2.0F, 8, 4, 4, scale); + this.rightVillagerLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(width, height); + this.rightVillagerLeg.setRotationPoint(-2.0F, 12.0F + p_i1164_2_, 0.0F); + this.rightVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, scale); + this.leftVillagerLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(width, height); + this.leftVillagerLeg.mirror = true; + this.leftVillagerLeg.setRotationPoint(2.0F, 12.0F + p_i1164_2_, 0.0F); + this.leftVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, scale); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + this.villagerHead.render(scale); + this.villagerBody.render(scale); + this.rightVillagerLeg.render(scale); + this.leftVillagerLeg.render(scale); + this.villagerArms.render(scale); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + this.villagerHead.rotateAngleY = netHeadYaw * 0.017453292F; + this.villagerHead.rotateAngleX = headPitch * 0.017453292F; + this.villagerArms.rotationPointY = 3.0F; + this.villagerArms.rotationPointZ = -1.0F; + this.villagerArms.rotateAngleX = -0.75F; + this.rightVillagerLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount * 0.5F; + this.leftVillagerLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount * 0.5F; + this.rightVillagerLeg.rotateAngleY = 0.0F; + this.leftVillagerLeg.rotateAngleY = 0.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWitch.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWitch.java new file mode 100644 index 0000000..294f5c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWitch.java @@ -0,0 +1,68 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelWitch extends ModelVillager +{ + public boolean holdingItem; + private final ModelRenderer mole = (new ModelRenderer(this)).setTextureSize(64, 128); + private final ModelRenderer witchHat; + + public ModelWitch(float scale) + { + super(scale, 0.0F, 64, 128); + this.mole.setRotationPoint(0.0F, -2.0F, 0.0F); + this.mole.setTextureOffset(0, 0).addBox(0.0F, 3.0F, -6.75F, 1, 1, 1, -0.25F); + this.villagerNose.addChild(this.mole); + this.witchHat = (new ModelRenderer(this)).setTextureSize(64, 128); + this.witchHat.setRotationPoint(-5.0F, -10.03125F, -5.0F); + this.witchHat.setTextureOffset(0, 64).addBox(0.0F, 0.0F, 0.0F, 10, 2, 10); + this.villagerHead.addChild(this.witchHat); + ModelRenderer modelrenderer = (new ModelRenderer(this)).setTextureSize(64, 128); + modelrenderer.setRotationPoint(1.75F, -4.0F, 2.0F); + modelrenderer.setTextureOffset(0, 76).addBox(0.0F, 0.0F, 0.0F, 7, 4, 7); + modelrenderer.rotateAngleX = -0.05235988F; + modelrenderer.rotateAngleZ = 0.02617994F; + this.witchHat.addChild(modelrenderer); + ModelRenderer modelrenderer1 = (new ModelRenderer(this)).setTextureSize(64, 128); + modelrenderer1.setRotationPoint(1.75F, -4.0F, 2.0F); + modelrenderer1.setTextureOffset(0, 87).addBox(0.0F, 0.0F, 0.0F, 4, 4, 4); + modelrenderer1.rotateAngleX = -0.10471976F; + modelrenderer1.rotateAngleZ = 0.05235988F; + modelrenderer.addChild(modelrenderer1); + ModelRenderer modelrenderer2 = (new ModelRenderer(this)).setTextureSize(64, 128); + modelrenderer2.setRotationPoint(1.75F, -2.0F, 2.0F); + modelrenderer2.setTextureOffset(0, 95).addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.25F); + modelrenderer2.rotateAngleX = -0.20943952F; + modelrenderer2.rotateAngleZ = 0.10471976F; + modelrenderer1.addChild(modelrenderer2); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.villagerNose.offsetX = 0.0F; + this.villagerNose.offsetY = 0.0F; + this.villagerNose.offsetZ = 0.0F; + float f = 0.01F * (float)(entityIn.getEntityId() % 10); + this.villagerNose.rotateAngleX = MathHelper.sin((float)entityIn.ticksExisted * f) * 4.5F * 0.017453292F; + this.villagerNose.rotateAngleY = 0.0F; + this.villagerNose.rotateAngleZ = MathHelper.cos((float)entityIn.ticksExisted * f) * 2.5F * 0.017453292F; + + if (this.holdingItem) + { + this.villagerNose.rotateAngleX = -0.9F; + this.villagerNose.offsetZ = -0.09375F; + this.villagerNose.offsetY = 0.1875F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWither.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWither.java new file mode 100644 index 0000000..4b07008 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWither.java @@ -0,0 +1,91 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelWither extends ModelBase +{ + private final ModelRenderer[] upperBodyParts; + private final ModelRenderer[] heads; + + public ModelWither(float p_i46302_1_) + { + this.textureWidth = 64; + this.textureHeight = 64; + this.upperBodyParts = new ModelRenderer[3]; + this.upperBodyParts[0] = new ModelRenderer(this, 0, 16); + this.upperBodyParts[0].addBox(-10.0F, 3.9F, -0.5F, 20, 3, 3, p_i46302_1_); + this.upperBodyParts[1] = (new ModelRenderer(this)).setTextureSize(this.textureWidth, this.textureHeight); + this.upperBodyParts[1].setRotationPoint(-2.0F, 6.9F, -0.5F); + this.upperBodyParts[1].setTextureOffset(0, 22).addBox(0.0F, 0.0F, 0.0F, 3, 10, 3, p_i46302_1_); + this.upperBodyParts[1].setTextureOffset(24, 22).addBox(-4.0F, 1.5F, 0.5F, 11, 2, 2, p_i46302_1_); + this.upperBodyParts[1].setTextureOffset(24, 22).addBox(-4.0F, 4.0F, 0.5F, 11, 2, 2, p_i46302_1_); + this.upperBodyParts[1].setTextureOffset(24, 22).addBox(-4.0F, 6.5F, 0.5F, 11, 2, 2, p_i46302_1_); + this.upperBodyParts[2] = new ModelRenderer(this, 12, 22); + this.upperBodyParts[2].addBox(0.0F, 0.0F, 0.0F, 3, 6, 3, p_i46302_1_); + this.heads = new ModelRenderer[3]; + this.heads[0] = new ModelRenderer(this, 0, 0); + this.heads[0].addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8, p_i46302_1_); + this.heads[1] = new ModelRenderer(this, 32, 0); + this.heads[1].addBox(-4.0F, -4.0F, -4.0F, 6, 6, 6, p_i46302_1_); + this.heads[1].rotationPointX = -8.0F; + this.heads[1].rotationPointY = 4.0F; + this.heads[2] = new ModelRenderer(this, 32, 0); + this.heads[2].addBox(-4.0F, -4.0F, -4.0F, 6, 6, 6, p_i46302_1_); + this.heads[2].rotationPointX = 10.0F; + this.heads[2].rotationPointY = 4.0F; + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + for (ModelRenderer modelrenderer : this.heads) + { + modelrenderer.render(scale); + } + + for (ModelRenderer modelrenderer1 : this.upperBodyParts) + { + modelrenderer1.render(scale); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + float f = MathHelper.cos(ageInTicks * 0.1F); + this.upperBodyParts[1].rotateAngleX = (0.065F + 0.05F * f) * (float)Math.PI; + this.upperBodyParts[2].setRotationPoint(-2.0F, 6.9F + MathHelper.cos(this.upperBodyParts[1].rotateAngleX) * 10.0F, -0.5F + MathHelper.sin(this.upperBodyParts[1].rotateAngleX) * 10.0F); + this.upperBodyParts[2].rotateAngleX = (0.265F + 0.1F * f) * (float)Math.PI; + this.heads[0].rotateAngleY = netHeadYaw * 0.017453292F; + this.heads[0].rotateAngleX = headPitch * 0.017453292F; + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + EntityWither entitywither = (EntityWither)entitylivingbaseIn; + + for (int i = 1; i < 3; ++i) + { + this.heads[i].rotateAngleY = (entitywither.getHeadYRotation(i - 1) - entitylivingbaseIn.renderYawOffset) * 0.017453292F; + this.heads[i].rotateAngleX = entitywither.getHeadXRotation(i - 1) * 0.017453292F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWolf.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWolf.java new file mode 100644 index 0000000..ea5fada --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelWolf.java @@ -0,0 +1,173 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelWolf extends ModelBase +{ + /** main box for the wolf head */ + public ModelRenderer wolfHeadMain; + /** The wolf's body */ + public ModelRenderer wolfBody; + /** Wolf'se first leg */ + public ModelRenderer wolfLeg1; + /** Wolf's second leg */ + public ModelRenderer wolfLeg2; + /** Wolf's third leg */ + public ModelRenderer wolfLeg3; + /** Wolf's fourth leg */ + public ModelRenderer wolfLeg4; + /** The wolf's tail */ + ModelRenderer wolfTail; + /** The wolf's mane */ + ModelRenderer wolfMane; + + public ModelWolf() + { + float f = 0.0F; + float f1 = 13.5F; + this.wolfHeadMain = new ModelRenderer(this, 0, 0); + this.wolfHeadMain.addBox(-2.0F, -3.0F, -2.0F, 6, 6, 4, 0.0F); + this.wolfHeadMain.setRotationPoint(-1.0F, 13.5F, -7.0F); + this.wolfBody = new ModelRenderer(this, 18, 14); + this.wolfBody.addBox(-3.0F, -2.0F, -3.0F, 6, 9, 6, 0.0F); + this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F); + this.wolfMane = new ModelRenderer(this, 21, 0); + this.wolfMane.addBox(-3.0F, -3.0F, -3.0F, 8, 6, 7, 0.0F); + this.wolfMane.setRotationPoint(-1.0F, 14.0F, 2.0F); + this.wolfLeg1 = new ModelRenderer(this, 0, 18); + this.wolfLeg1.addBox(0.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F); + this.wolfLeg2 = new ModelRenderer(this, 0, 18); + this.wolfLeg2.addBox(0.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F); + this.wolfLeg3 = new ModelRenderer(this, 0, 18); + this.wolfLeg3.addBox(0.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F); + this.wolfLeg4 = new ModelRenderer(this, 0, 18); + this.wolfLeg4.addBox(0.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F); + this.wolfTail = new ModelRenderer(this, 9, 18); + this.wolfTail.addBox(0.0F, 0.0F, -1.0F, 2, 8, 2, 0.0F); + this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F); + this.wolfHeadMain.setTextureOffset(16, 14).addBox(-2.0F, -5.0F, 0.0F, 2, 2, 1, 0.0F); + this.wolfHeadMain.setTextureOffset(16, 14).addBox(2.0F, -5.0F, 0.0F, 2, 2, 1, 0.0F); + this.wolfHeadMain.setTextureOffset(0, 10).addBox(-0.5F, 0.0F, -5.0F, 3, 3, 4, 0.0F); + } + + /** + * Sets the models various rotation angles then renders the model. + */ + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + super.render(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); + + if (this.isChild) + { + float f = 2.0F; + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 5.0F * scale, 2.0F * scale); + this.wolfHeadMain.renderWithRotation(scale); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.wolfBody.render(scale); + this.wolfLeg1.render(scale); + this.wolfLeg2.render(scale); + this.wolfLeg3.render(scale); + this.wolfLeg4.render(scale); + this.wolfTail.renderWithRotation(scale); + this.wolfMane.render(scale); + GlStateManager.popMatrix(); + } + else + { + this.wolfHeadMain.renderWithRotation(scale); + this.wolfBody.render(scale); + this.wolfLeg1.render(scale); + this.wolfLeg2.render(scale); + this.wolfLeg3.render(scale); + this.wolfLeg4.render(scale); + this.wolfTail.renderWithRotation(scale); + this.wolfMane.render(scale); + } + } + + /** + * Used for easily adding entity-dependent animations. The second and third float params here are the same second + * and third as in the setRotationAngles method. + */ + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime) + { + EntityWolf entitywolf = (EntityWolf)entitylivingbaseIn; + + if (entitywolf.isAngry()) + { + this.wolfTail.rotateAngleY = 0.0F; + } + else + { + this.wolfTail.rotateAngleY = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + } + + if (entitywolf.isSitting()) + { + this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F); + this.wolfMane.rotateAngleX = ((float)Math.PI * 2F / 5F); + this.wolfMane.rotateAngleY = 0.0F; + this.wolfBody.setRotationPoint(0.0F, 18.0F, 0.0F); + this.wolfBody.rotateAngleX = ((float)Math.PI / 4F); + this.wolfTail.setRotationPoint(-1.0F, 21.0F, 6.0F); + this.wolfLeg1.setRotationPoint(-2.5F, 22.0F, 2.0F); + this.wolfLeg1.rotateAngleX = ((float)Math.PI * 3F / 2F); + this.wolfLeg2.setRotationPoint(0.5F, 22.0F, 2.0F); + this.wolfLeg2.rotateAngleX = ((float)Math.PI * 3F / 2F); + this.wolfLeg3.rotateAngleX = 5.811947F; + this.wolfLeg3.setRotationPoint(-2.49F, 17.0F, -4.0F); + this.wolfLeg4.rotateAngleX = 5.811947F; + this.wolfLeg4.setRotationPoint(0.51F, 17.0F, -4.0F); + } + else + { + this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F); + this.wolfBody.rotateAngleX = ((float)Math.PI / 2F); + this.wolfMane.setRotationPoint(-1.0F, 14.0F, -3.0F); + this.wolfMane.rotateAngleX = this.wolfBody.rotateAngleX; + this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F); + this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F); + this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F); + this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F); + this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F); + this.wolfLeg1.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + this.wolfLeg2.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.wolfLeg3.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount; + this.wolfLeg4.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount; + } + + this.wolfHeadMain.rotateAngleZ = entitywolf.getInterestedAngle(partialTickTime) + entitywolf.getShakeAngle(partialTickTime, 0.0F); + this.wolfMane.rotateAngleZ = entitywolf.getShakeAngle(partialTickTime, -0.08F); + this.wolfBody.rotateAngleZ = entitywolf.getShakeAngle(partialTickTime, -0.16F); + this.wolfTail.rotateAngleZ = entitywolf.getShakeAngle(partialTickTime, -0.2F); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + this.wolfHeadMain.rotateAngleX = headPitch * 0.017453292F; + this.wolfHeadMain.rotateAngleY = netHeadYaw * 0.017453292F; + this.wolfTail.rotateAngleX = ageInTicks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelZombie.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelZombie.java new file mode 100644 index 0000000..1ad7c56 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelZombie.java @@ -0,0 +1,47 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelZombie extends ModelBiped +{ + public ModelZombie() + { + this(0.0F, false); + } + + public ModelZombie(float modelSize, boolean p_i1168_2_) + { + super(modelSize, 0.0F, 64, p_i1168_2_ ? 32 : 64); + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + boolean flag = entityIn instanceof EntityZombie && ((EntityZombie)entityIn).isArmsRaised(); + float f = MathHelper.sin(this.swingProgress * (float)Math.PI); + float f1 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - f * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - f * 0.6F; + float f2 = -(float)Math.PI / (flag ? 1.5F : 2.25F); + this.bipedRightArm.rotateAngleX = f2; + this.bipedLeftArm.rotateAngleX = f2; + this.bipedRightArm.rotateAngleX += f * 1.2F - f1 * 0.4F; + this.bipedLeftArm.rotateAngleX += f * 1.2F - f1 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelZombieVillager.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelZombieVillager.java new file mode 100644 index 0000000..a05d3da --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/ModelZombieVillager.java @@ -0,0 +1,89 @@ +package net.minecraft.client.model; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelZombieVillager extends ModelBiped +{ + public ModelZombieVillager() + { + this(0.0F, 0.0F, false); + } + + public ModelZombieVillager(float p_i1165_1_, float p_i1165_2_, boolean p_i1165_3_) + { + super(p_i1165_1_, 0.0F, 64, p_i1165_3_ ? 32 : 64); + + if (p_i1165_3_) + { + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -10.0F, -4.0F, 8, 8, 8, p_i1165_1_); + this.bipedHead.setRotationPoint(0.0F, 0.0F + p_i1165_2_, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.setRotationPoint(0.0F, 0.0F + p_i1165_2_, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, p_i1165_1_ + 0.1F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + p_i1165_2_, 0.0F); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, p_i1165_1_ + 0.1F); + this.bipedLeftLeg = new ModelRenderer(this, 0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + p_i1165_2_, 0.0F); + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, p_i1165_1_ + 0.1F); + } + else + { + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.setRotationPoint(0.0F, p_i1165_2_, 0.0F); + this.bipedHead.setTextureOffset(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, p_i1165_1_); + this.bipedHead.setTextureOffset(24, 0).addBox(-1.0F, -3.0F, -6.0F, 2, 4, 2, p_i1165_1_); + this.bipedBody = new ModelRenderer(this, 16, 20); + this.bipedBody.setRotationPoint(0.0F, 0.0F + p_i1165_2_, 0.0F); + this.bipedBody.addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, p_i1165_1_); + this.bipedBody.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8, 18, 6, p_i1165_1_ + 0.05F); + this.bipedRightArm = new ModelRenderer(this, 44, 38); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, p_i1165_1_); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + p_i1165_2_, 0.0F); + this.bipedLeftArm = new ModelRenderer(this, 44, 38); + this.bipedLeftArm.mirror = true; + this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, p_i1165_1_); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + p_i1165_2_, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 22); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + p_i1165_2_, 0.0F); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, p_i1165_1_); + this.bipedLeftLeg = new ModelRenderer(this, 0, 22); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + p_i1165_2_, 0.0F); + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, p_i1165_1_); + } + } + + /** + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and forth) and par2 represents how + * "far" arms and legs can swing at most. + */ + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn) + { + super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn); + EntityZombie entityzombie = (EntityZombie)entityIn; + float f = MathHelper.sin(this.swingProgress * (float)Math.PI); + float f1 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - f * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - f * 0.6F; + float f2 = -(float)Math.PI / (entityzombie.isArmsRaised() ? 1.5F : 2.25F); + this.bipedRightArm.rotateAngleX = f2; + this.bipedLeftArm.rotateAngleX = f2; + this.bipedRightArm.rotateAngleX += f * 1.2F - f1 * 0.4F; + this.bipedLeftArm.rotateAngleX += f * 1.2F - f1 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/PositionTextureVertex.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/PositionTextureVertex.java new file mode 100644 index 0000000..d877c8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/PositionTextureVertex.java @@ -0,0 +1,34 @@ +package net.minecraft.client.model; + +import net.minecraft.util.math.Vec3d; + +public class PositionTextureVertex +{ + public Vec3d vector3D; + public float texturePositionX; + public float texturePositionY; + + public PositionTextureVertex(float p_i1158_1_, float p_i1158_2_, float p_i1158_3_, float p_i1158_4_, float p_i1158_5_) + { + this(new Vec3d((double)p_i1158_1_, (double)p_i1158_2_, (double)p_i1158_3_), p_i1158_4_, p_i1158_5_); + } + + public PositionTextureVertex setTexturePosition(float p_78240_1_, float p_78240_2_) + { + return new PositionTextureVertex(this, p_78240_1_, p_78240_2_); + } + + public PositionTextureVertex(PositionTextureVertex textureVertex, float texturePositionXIn, float texturePositionYIn) + { + this.vector3D = textureVertex.vector3D; + this.texturePositionX = texturePositionXIn; + this.texturePositionY = texturePositionYIn; + } + + public PositionTextureVertex(Vec3d p_i47091_1_, float p_i47091_2_, float p_i47091_3_) + { + this.vector3D = p_i47091_1_; + this.texturePositionX = p_i47091_2_; + this.texturePositionY = p_i47091_3_; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/TextureOffset.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/TextureOffset.java new file mode 100644 index 0000000..fe255a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/TextureOffset.java @@ -0,0 +1,19 @@ +package net.minecraft.client.model; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureOffset +{ + /** The x coordinate offset of the texture */ + public final int textureOffsetX; + /** The y coordinate offset of the texture */ + public final int textureOffsetY; + + public TextureOffset(int textureOffsetXIn, int textureOffsetYIn) + { + this.textureOffsetX = textureOffsetXIn; + this.textureOffsetY = textureOffsetYIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/TexturedQuad.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/TexturedQuad.java new file mode 100644 index 0000000..d959d50 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/TexturedQuad.java @@ -0,0 +1,76 @@ +package net.minecraft.client.model; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TexturedQuad +{ + public PositionTextureVertex[] vertexPositions; + public int nVertices; + private boolean invertNormal; + + public TexturedQuad(PositionTextureVertex[] vertices) + { + this.vertexPositions = vertices; + this.nVertices = vertices.length; + } + + public TexturedQuad(PositionTextureVertex[] vertices, int texcoordU1, int texcoordV1, int texcoordU2, int texcoordV2, float textureWidth, float textureHeight) + { + this(vertices); + float f = 0.0F / textureWidth; + float f1 = 0.0F / textureHeight; + vertices[0] = vertices[0].setTexturePosition((float)texcoordU2 / textureWidth - f, (float)texcoordV1 / textureHeight + f1); + vertices[1] = vertices[1].setTexturePosition((float)texcoordU1 / textureWidth + f, (float)texcoordV1 / textureHeight + f1); + vertices[2] = vertices[2].setTexturePosition((float)texcoordU1 / textureWidth + f, (float)texcoordV2 / textureHeight - f1); + vertices[3] = vertices[3].setTexturePosition((float)texcoordU2 / textureWidth - f, (float)texcoordV2 / textureHeight - f1); + } + + public void flipFace() + { + PositionTextureVertex[] apositiontexturevertex = new PositionTextureVertex[this.vertexPositions.length]; + + for (int i = 0; i < this.vertexPositions.length; ++i) + { + apositiontexturevertex[i] = this.vertexPositions[this.vertexPositions.length - i - 1]; + } + + this.vertexPositions = apositiontexturevertex; + } + + /** + * Draw this primitve. This is typically called only once as the generated drawing instructions are saved by the + * renderer and reused later. + */ + @SideOnly(Side.CLIENT) + public void draw(BufferBuilder renderer, float scale) + { + Vec3d vec3d = this.vertexPositions[1].vector3D.subtractReverse(this.vertexPositions[0].vector3D); + Vec3d vec3d1 = this.vertexPositions[1].vector3D.subtractReverse(this.vertexPositions[2].vector3D); + Vec3d vec3d2 = vec3d1.crossProduct(vec3d).normalize(); + float f = (float)vec3d2.x; + float f1 = (float)vec3d2.y; + float f2 = (float)vec3d2.z; + + if (this.invertNormal) + { + f = -f; + f1 = -f1; + f2 = -f2; + } + + renderer.begin(7, DefaultVertexFormats.OLDMODEL_POSITION_TEX_NORMAL); + + for (int i = 0; i < 4; ++i) + { + PositionTextureVertex positiontexturevertex = this.vertexPositions[i]; + renderer.pos(positiontexturevertex.vector3D.x * (double)scale, positiontexturevertex.vector3D.y * (double)scale, positiontexturevertex.vector3D.z * (double)scale).tex((double)positiontexturevertex.texturePositionX, (double)positiontexturevertex.texturePositionY).normal(f, f1, f2).endVertex(); + } + + Tessellator.getInstance().draw(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/model/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/model/package-info.java new file mode 100644 index 0000000..89569b1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/model/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.model; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ChunkProviderClient.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ChunkProviderClient.java new file mode 100644 index 0000000..1680cad --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ChunkProviderClient.java @@ -0,0 +1,120 @@ +package net.minecraft.client.multiplayer; + +import com.google.common.base.MoreObjects; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectIterator; +import javax.annotation.Nullable; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.EmptyChunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ChunkProviderClient implements IChunkProvider +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** + * The completely empty chunk used by ChunkProviderClient when chunkMapping doesn't contain the requested + * coordinates. + */ + private final Chunk blankChunk; + /** The mapping between ChunkCoordinates and Chunks that ChunkProviderClient maintains. */ + private final Long2ObjectMap chunkMapping = new Long2ObjectOpenHashMap(8192) + { + protected void rehash(int p_rehash_1_) + { + if (p_rehash_1_ > this.key.length) + { + super.rehash(p_rehash_1_); + } + } + }; + /** Reference to the World object. */ + private final World world; + + public ChunkProviderClient(World worldIn) + { + this.blankChunk = new EmptyChunk(worldIn, 0, 0); + this.world = worldIn; + } + + /** + * Unload chunk from ChunkProviderClient's hashmap. Called in response to a Packet50PreChunk with its mode field set + * to false + */ + public void unloadChunk(int x, int z) + { + Chunk chunk = this.provideChunk(x, z); + + if (!chunk.isEmpty()) + { + chunk.onUnload(); + } + + this.chunkMapping.remove(ChunkPos.asLong(x, z)); + } + + @Nullable + public Chunk getLoadedChunk(int x, int z) + { + return (Chunk)this.chunkMapping.get(ChunkPos.asLong(x, z)); + } + + /** + * loads or generates the chunk at the chunk location specified + */ + public Chunk loadChunk(int chunkX, int chunkZ) + { + Chunk chunk = new Chunk(this.world, chunkX, chunkZ); + this.chunkMapping.put(ChunkPos.asLong(chunkX, chunkZ), chunk); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkEvent.Load(chunk)); + chunk.markLoaded(true); + return chunk; + } + + public Chunk provideChunk(int x, int z) + { + return (Chunk)MoreObjects.firstNonNull(this.getLoadedChunk(x, z), this.blankChunk); + } + + /** + * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk. + */ + public boolean tick() + { + long i = System.currentTimeMillis(); + ObjectIterator objectiterator = this.chunkMapping.values().iterator(); + + while (objectiterator.hasNext()) + { + Chunk chunk = (Chunk)objectiterator.next(); + chunk.onTick(System.currentTimeMillis() - i > 5L); + } + + if (System.currentTimeMillis() - i > 100L) + { + LOGGER.info("Warning: Clientside chunk ticking took {} ms", (long)(System.currentTimeMillis() - i)); + } + + return false; + } + + /** + * Converts the instance data to a readable string. + */ + public String makeString() + { + return "MultiplayerChunkCache: " + this.chunkMapping.size() + ", " + this.chunkMapping.size(); + } + + public boolean isChunkGeneratedAt(int x, int z) + { + return this.chunkMapping.containsKey(ChunkPos.asLong(x, z)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ClientAdvancementManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ClientAdvancementManager.java new file mode 100644 index 0000000..90330e9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ClientAdvancementManager.java @@ -0,0 +1,124 @@ +package net.minecraft.client.multiplayer; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementList; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.toasts.AdvancementToast; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.network.play.client.CPacketSeenAdvancements; +import net.minecraft.network.play.server.SPacketAdvancementInfo; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ClientAdvancementManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Minecraft mc; + private final AdvancementList advancementList = new AdvancementList(); + private final Map advancementToProgress = Maps.newHashMap(); + @Nullable + private ClientAdvancementManager.IListener listener; + @Nullable + private Advancement selectedTab; + + public ClientAdvancementManager(Minecraft p_i47380_1_) + { + this.mc = p_i47380_1_; + } + + public void read(SPacketAdvancementInfo p_192799_1_) + { + if (p_192799_1_.isFirstSync()) + { + this.advancementList.clear(); + this.advancementToProgress.clear(); + } + + this.advancementList.removeAll(p_192799_1_.getAdvancementsToRemove()); + this.advancementList.loadAdvancements(p_192799_1_.getAdvancementsToAdd()); + + for (Entry entry : p_192799_1_.getProgressUpdates().entrySet()) + { + Advancement advancement = this.advancementList.getAdvancement(entry.getKey()); + + if (advancement != null) + { + AdvancementProgress advancementprogress = entry.getValue(); + advancementprogress.update(advancement.getCriteria(), advancement.getRequirements()); + this.advancementToProgress.put(advancement, advancementprogress); + + if (this.listener != null) + { + this.listener.onUpdateAdvancementProgress(advancement, advancementprogress); + } + + if (!p_192799_1_.isFirstSync() && advancementprogress.isDone() && advancement.getDisplay() != null && advancement.getDisplay().shouldShowToast()) + { + this.mc.getToastGui().add(new AdvancementToast(advancement)); + } + } + else + { + LOGGER.warn("Server informed client about progress for unknown advancement " + entry.getKey()); + } + } + } + + public AdvancementList getAdvancementList() + { + return this.advancementList; + } + + public void setSelectedTab(@Nullable Advancement p_194230_1_, boolean tellServer) + { + NetHandlerPlayClient nethandlerplayclient = this.mc.getConnection(); + + if (nethandlerplayclient != null && p_194230_1_ != null && tellServer) + { + nethandlerplayclient.sendPacket(CPacketSeenAdvancements.openedTab(p_194230_1_)); + } + + if (this.selectedTab != p_194230_1_) + { + this.selectedTab = p_194230_1_; + + if (this.listener != null) + { + this.listener.setSelectedTab(p_194230_1_); + } + } + } + + public void setListener(@Nullable ClientAdvancementManager.IListener p_192798_1_) + { + this.listener = p_192798_1_; + this.advancementList.setListener(p_192798_1_); + + if (p_192798_1_ != null) + { + for (Entry entry : this.advancementToProgress.entrySet()) + { + p_192798_1_.onUpdateAdvancementProgress(entry.getKey(), entry.getValue()); + } + + p_192798_1_.setSelectedTab(this.selectedTab); + } + } + + @SideOnly(Side.CLIENT) + public interface IListener extends AdvancementList.Listener + { + void onUpdateAdvancementProgress(Advancement p_191933_1_, AdvancementProgress p_191933_2_); + + void setSelectedTab(@Nullable Advancement p_193982_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/GuiConnecting.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/GuiConnecting.java new file mode 100644 index 0000000..d8448a6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/GuiConnecting.java @@ -0,0 +1,177 @@ +package net.minecraft.client.multiplayer; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiDisconnected; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.network.NetHandlerLoginClient; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.login.client.CPacketLoginStart; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class GuiConnecting extends GuiScreen +{ + private static final AtomicInteger CONNECTION_ID = new AtomicInteger(0); + private static final Logger LOGGER = LogManager.getLogger(); + private NetworkManager networkManager; + private boolean cancel; + private final GuiScreen previousGuiScreen; + + public GuiConnecting(GuiScreen parent, Minecraft mcIn, ServerData serverDataIn) + { + this.mc = mcIn; + this.previousGuiScreen = parent; + ServerAddress serveraddress = ServerAddress.fromString(serverDataIn.serverIP); + mcIn.loadWorld((WorldClient)null); + mcIn.setServerData(serverDataIn); + this.connect(serveraddress.getIP(), serveraddress.getPort()); + } + + public GuiConnecting(GuiScreen parent, Minecraft mcIn, String hostName, int port) + { + this.mc = mcIn; + this.previousGuiScreen = parent; + mcIn.loadWorld((WorldClient)null); + this.connect(hostName, port); + } + + private void connect(final String ip, final int port) + { + LOGGER.info("Connecting to {}, {}", ip, Integer.valueOf(port)); + (new Thread("Server Connector #" + CONNECTION_ID.incrementAndGet()) + { + public void run() + { + InetAddress inetaddress = null; + + try + { + if (GuiConnecting.this.cancel) + { + return; + } + + inetaddress = InetAddress.getByName(ip); + GuiConnecting.this.networkManager = NetworkManager.createNetworkManagerAndConnect(inetaddress, port, GuiConnecting.this.mc.gameSettings.isUsingNativeTransport()); + GuiConnecting.this.networkManager.setNetHandler(new NetHandlerLoginClient(GuiConnecting.this.networkManager, GuiConnecting.this.mc, GuiConnecting.this.previousGuiScreen)); + GuiConnecting.this.networkManager.sendPacket(new C00Handshake(ip, port, EnumConnectionState.LOGIN, true)); + GuiConnecting.this.networkManager.sendPacket(new CPacketLoginStart(GuiConnecting.this.mc.getSession().getProfile())); + } + catch (UnknownHostException unknownhostexception) + { + if (GuiConnecting.this.cancel) + { + return; + } + + GuiConnecting.LOGGER.error("Couldn't connect to server", (Throwable)unknownhostexception); + GuiConnecting.this.mc.displayGuiScreen(new GuiDisconnected(GuiConnecting.this.previousGuiScreen, "connect.failed", new TextComponentTranslation("disconnect.genericReason", new Object[] {"Unknown host"}))); + } + catch (Exception exception) + { + if (GuiConnecting.this.cancel) + { + return; + } + + GuiConnecting.LOGGER.error("Couldn't connect to server", (Throwable)exception); + String s = exception.toString(); + + if (inetaddress != null) + { + String s1 = inetaddress + ":" + port; + s = s.replaceAll(s1, ""); + } + + GuiConnecting.this.mc.displayGuiScreen(new GuiDisconnected(GuiConnecting.this.previousGuiScreen, "connect.failed", new TextComponentTranslation("disconnect.genericReason", new Object[] {s}))); + } + } + }).start(); + } + + /** + * Called from the main game loop to update the screen. + */ + public void updateScreen() + { + if (this.networkManager != null) + { + if (this.networkManager.isChannelOpen()) + { + this.networkManager.processReceivedPackets(); + } + else + { + this.networkManager.checkDisconnected(); + } + } + } + + /** + * Fired when a key is typed (except F11 which toggles full screen). This is the equivalent of + * KeyListener.keyTyped(KeyEvent e). Args : character (character on the key), keyCode (lwjgl Keyboard key code) + */ + protected void keyTyped(char typedChar, int keyCode) throws IOException + { + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, I18n.format("gui.cancel"))); + } + + /** + * Called by the controls from the buttonList when activated. (Mouse pressed for buttons) + */ + protected void actionPerformed(GuiButton button) throws IOException + { + if (button.id == 0) + { + this.cancel = true; + + if (this.networkManager != null) + { + this.networkManager.closeChannel(new TextComponentString("Aborted")); + } + + this.mc.displayGuiScreen(this.previousGuiScreen); + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + + if (this.networkManager == null) + { + this.drawCenteredString(this.fontRenderer, I18n.format("connect.connecting"), this.width / 2, this.height / 2 - 50, 16777215); + } + else + { + this.drawCenteredString(this.fontRenderer, I18n.format("connect.authorizing"), this.width / 2, this.height / 2 - 50, 16777215); + } + + super.drawScreen(mouseX, mouseY, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/PlayerControllerMP.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/PlayerControllerMP.java new file mode 100644 index 0000000..0015c18 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/PlayerControllerMP.java @@ -0,0 +1,717 @@ +package net.minecraft.client.multiplayer; + +import io.netty.buffer.Unpooled; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCommandBlock; +import net.minecraft.block.BlockStructure; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.ClickType; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketClickWindow; +import net.minecraft.network.play.client.CPacketCreativeInventoryAction; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.network.play.client.CPacketEnchantItem; +import net.minecraft.network.play.client.CPacketHeldItemChange; +import net.minecraft.network.play.client.CPacketPlaceRecipe; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.network.play.client.CPacketPlayerTryUseItem; +import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; +import net.minecraft.network.play.client.CPacketUseEntity; +import net.minecraft.stats.RecipeBook; +import net.minecraft.stats.StatisticsManager; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class PlayerControllerMP +{ + /** The Minecraft instance. */ + private final Minecraft mc; + private final NetHandlerPlayClient connection; + private BlockPos currentBlock = new BlockPos(-1, -1, -1); + /** The Item currently being used to destroy a block */ + private ItemStack currentItemHittingBlock = ItemStack.EMPTY; + /** Current block damage (MP) */ + private float curBlockDamageMP; + /** Tick counter, when it hits 4 it resets back to 0 and plays the step sound */ + private float stepSoundTickCounter; + /** Delays the first damage on the block after the first click on the block */ + private int blockHitDelay; + /** Tells if the player is hitting a block */ + private boolean isHittingBlock; + /** Current game type for the player */ + private GameType currentGameType = GameType.SURVIVAL; + /** Index of the current item held by the player in the inventory hotbar */ + private int currentPlayerItem; + + public PlayerControllerMP(Minecraft mcIn, NetHandlerPlayClient netHandler) + { + this.mc = mcIn; + this.connection = netHandler; + } + + public static void clickBlockCreative(Minecraft mcIn, PlayerControllerMP playerController, BlockPos pos, EnumFacing facing) + { + if (!mcIn.world.extinguishFire(mcIn.player, pos, facing)) + { + playerController.onPlayerDestroyBlock(pos); + } + } + + /** + * Sets player capabilities depending on current gametype. params: player + */ + public void setPlayerCapabilities(EntityPlayer player) + { + this.currentGameType.configurePlayerCapabilities(player.capabilities); + } + + /** + * None + */ + public boolean isSpectator() + { + return this.currentGameType == GameType.SPECTATOR; + } + + /** + * Sets the game type for the player. + */ + public void setGameType(GameType type) + { + this.currentGameType = type; + this.currentGameType.configurePlayerCapabilities(this.mc.player.capabilities); + } + + /** + * Flips the player around. + */ + public void flipPlayer(EntityPlayer playerIn) + { + playerIn.rotationYaw = -180.0F; + } + + public boolean shouldDrawHUD() + { + return this.currentGameType.isSurvivalOrAdventure(); + } + + public boolean onPlayerDestroyBlock(BlockPos pos) + { + if (this.currentGameType.hasLimitedInteractions()) + { + if (this.currentGameType == GameType.SPECTATOR) + { + return false; + } + + if (!this.mc.player.isAllowEdit()) + { + ItemStack itemstack = this.mc.player.getHeldItemMainhand(); + + if (itemstack.isEmpty()) + { + return false; + } + + if (!itemstack.canDestroy(this.mc.world.getBlockState(pos).getBlock())) + { + return false; + } + } + } + + ItemStack stack = mc.player.getHeldItemMainhand(); + if (!stack.isEmpty() && stack.getItem().onBlockStartBreak(stack, pos, mc.player)) + { + return false; + } + + if (this.currentGameType.isCreative() && !stack.isEmpty() && !stack.getItem().canDestroyBlockInCreative(mc.world, pos, stack, mc.player)) + { + return false; + } + else + { + World world = this.mc.world; + IBlockState iblockstate = world.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if ((block instanceof BlockCommandBlock || block instanceof BlockStructure) && !this.mc.player.canUseCommandBlock()) + { + return false; + } + else if (iblockstate.getMaterial() == Material.AIR) + { + return false; + } + else + { + world.playEvent(2001, pos, Block.getStateId(iblockstate)); + + this.currentBlock = new BlockPos(this.currentBlock.getX(), -1, this.currentBlock.getZ()); + + if (!this.currentGameType.isCreative()) + { + ItemStack itemstack1 = this.mc.player.getHeldItemMainhand(); + ItemStack copyBeforeUse = itemstack1.copy(); + + if (!itemstack1.isEmpty()) + { + itemstack1.onBlockDestroyed(world, iblockstate, pos, this.mc.player); + + if (itemstack1.isEmpty()) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this.mc.player, copyBeforeUse, EnumHand.MAIN_HAND); + this.mc.player.setHeldItem(EnumHand.MAIN_HAND, ItemStack.EMPTY); + } + } + } + + boolean flag = block.removedByPlayer(iblockstate, world, pos, mc.player, false); + + if (flag) + { + block.onBlockDestroyedByPlayer(world, pos, iblockstate); + } + return flag; + } + } + } + + /** + * Called when the player is hitting a block with an item. + */ + public boolean clickBlock(BlockPos loc, EnumFacing face) + { + if (this.currentGameType.hasLimitedInteractions()) + { + if (this.currentGameType == GameType.SPECTATOR) + { + return false; + } + + if (!this.mc.player.isAllowEdit()) + { + ItemStack itemstack = this.mc.player.getHeldItemMainhand(); + + if (itemstack.isEmpty()) + { + return false; + } + + if (!itemstack.canDestroy(this.mc.world.getBlockState(loc).getBlock())) + { + return false; + } + } + } + + if (!this.mc.world.getWorldBorder().contains(loc)) + { + return false; + } + else + { + if (this.currentGameType.isCreative()) + { + this.mc.getTutorial().onHitBlock(this.mc.world, loc, this.mc.world.getBlockState(loc), 1.0F); + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.START_DESTROY_BLOCK, loc, face)); + if (!net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.mc.player, loc, face, net.minecraftforge.common.ForgeHooks.rayTraceEyeHitVec(this.mc.player, getBlockReachDistance() + 1)).isCanceled()) + clickBlockCreative(this.mc, this, loc, face); + this.blockHitDelay = 5; + } + else if (!this.isHittingBlock || !this.isHittingPosition(loc)) + { + if (this.isHittingBlock) + { + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.ABORT_DESTROY_BLOCK, this.currentBlock, face)); + } + net.minecraftforge.event.entity.player.PlayerInteractEvent.LeftClickBlock event = net.minecraftforge.common.ForgeHooks.onLeftClickBlock(this.mc.player, loc, face, net.minecraftforge.common.ForgeHooks.rayTraceEyeHitVec(this.mc.player, getBlockReachDistance() + 1)); + + IBlockState iblockstate = this.mc.world.getBlockState(loc); + this.mc.getTutorial().onHitBlock(this.mc.world, loc, iblockstate, 0.0F); + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.START_DESTROY_BLOCK, loc, face)); + boolean flag = iblockstate.getMaterial() != Material.AIR; + + if (flag && this.curBlockDamageMP == 0.0F) + { + if (event.getUseBlock() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + iblockstate.getBlock().onBlockClicked(this.mc.world, loc, this.mc.player); + } + + if (event.getUseItem() == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) return true; + if (flag && iblockstate.getPlayerRelativeBlockHardness(this.mc.player, this.mc.player.world, loc) >= 1.0F) + { + this.onPlayerDestroyBlock(loc); + } + else + { + this.isHittingBlock = true; + this.currentBlock = loc; + this.currentItemHittingBlock = this.mc.player.getHeldItemMainhand(); + this.curBlockDamageMP = 0.0F; + this.stepSoundTickCounter = 0.0F; + this.mc.world.sendBlockBreakProgress(this.mc.player.getEntityId(), this.currentBlock, (int)(this.curBlockDamageMP * 10.0F) - 1); + } + } + + return true; + } + } + + /** + * Resets current block damage + */ + public void resetBlockRemoving() + { + if (this.isHittingBlock) + { + this.mc.getTutorial().onHitBlock(this.mc.world, this.currentBlock, this.mc.world.getBlockState(this.currentBlock), -1.0F); + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.ABORT_DESTROY_BLOCK, this.currentBlock, EnumFacing.DOWN)); + this.isHittingBlock = false; + this.curBlockDamageMP = 0.0F; + this.mc.world.sendBlockBreakProgress(this.mc.player.getEntityId(), this.currentBlock, -1); + this.mc.player.resetCooldown(); + } + } + + public boolean onPlayerDamageBlock(BlockPos posBlock, EnumFacing directionFacing) + { + this.syncCurrentPlayItem(); + + if (this.blockHitDelay > 0) + { + --this.blockHitDelay; + return true; + } + else if (this.currentGameType.isCreative() && this.mc.world.getWorldBorder().contains(posBlock)) + { + this.blockHitDelay = 5; + this.mc.getTutorial().onHitBlock(this.mc.world, posBlock, this.mc.world.getBlockState(posBlock), 1.0F); + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.START_DESTROY_BLOCK, posBlock, directionFacing)); + clickBlockCreative(this.mc, this, posBlock, directionFacing); + return true; + } + else if (this.isHittingPosition(posBlock)) + { + IBlockState iblockstate = this.mc.world.getBlockState(posBlock); + Block block = iblockstate.getBlock(); + + if (iblockstate.getMaterial() == Material.AIR) + { + this.isHittingBlock = false; + return false; + } + else + { + this.curBlockDamageMP += iblockstate.getPlayerRelativeBlockHardness(this.mc.player, this.mc.player.world, posBlock); + + if (this.stepSoundTickCounter % 4.0F == 0.0F) + { + SoundType soundtype = block.getSoundType(iblockstate, mc.world, posBlock, mc.player); + this.mc.getSoundHandler().playSound(new PositionedSoundRecord(soundtype.getHitSound(), SoundCategory.NEUTRAL, (soundtype.getVolume() + 1.0F) / 8.0F, soundtype.getPitch() * 0.5F, posBlock)); + } + + ++this.stepSoundTickCounter; + this.mc.getTutorial().onHitBlock(this.mc.world, posBlock, iblockstate, MathHelper.clamp(this.curBlockDamageMP, 0.0F, 1.0F)); + + if (this.curBlockDamageMP >= 1.0F) + { + this.isHittingBlock = false; + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, posBlock, directionFacing)); + this.onPlayerDestroyBlock(posBlock); + this.curBlockDamageMP = 0.0F; + this.stepSoundTickCounter = 0.0F; + this.blockHitDelay = 5; + } + + this.mc.world.sendBlockBreakProgress(this.mc.player.getEntityId(), this.currentBlock, (int)(this.curBlockDamageMP * 10.0F) - 1); + return true; + } + } + else + { + return this.clickBlock(posBlock, directionFacing); + } + } + + /** + * player reach distance = 4F + */ + public float getBlockReachDistance() + { + float attrib = (float) mc.player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(); + return this.currentGameType.isCreative() ? attrib : attrib - 0.5F; + } + + public void updateController() + { + this.syncCurrentPlayItem(); + + if (this.connection.getNetworkManager().isChannelOpen()) + { + this.connection.getNetworkManager().processReceivedPackets(); + } + else + { + this.connection.getNetworkManager().checkDisconnected(); + } + } + + private boolean isHittingPosition(BlockPos pos) + { + ItemStack itemstack = this.mc.player.getHeldItemMainhand(); + boolean flag = this.currentItemHittingBlock.isEmpty() && itemstack.isEmpty(); + + if (!this.currentItemHittingBlock.isEmpty() && !itemstack.isEmpty()) + { + flag = !net.minecraftforge.client.ForgeHooksClient.shouldCauseBlockBreakReset(this.currentItemHittingBlock, itemstack); + } + + return pos.equals(this.currentBlock) && flag; + } + + /** + * Syncs the current player item with the server + */ + private void syncCurrentPlayItem() + { + int i = this.mc.player.inventory.currentItem; + + if (i != this.currentPlayerItem) + { + this.currentPlayerItem = i; + this.connection.sendPacket(new CPacketHeldItemChange(this.currentPlayerItem)); + } + } + + public EnumActionResult processRightClickBlock(EntityPlayerSP player, WorldClient worldIn, BlockPos pos, EnumFacing direction, Vec3d vec, EnumHand hand) + { + this.syncCurrentPlayItem(); + ItemStack itemstack = player.getHeldItem(hand); + float f = (float)(vec.x - (double)pos.getX()); + float f1 = (float)(vec.y - (double)pos.getY()); + float f2 = (float)(vec.z - (double)pos.getZ()); + boolean flag = false; + + if (!this.mc.world.getWorldBorder().contains(pos)) + { + return EnumActionResult.FAIL; + } + else + { + net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock event = net.minecraftforge.common.ForgeHooks + .onRightClickBlock(player, hand, pos, direction, net.minecraftforge.common.ForgeHooks.rayTraceEyeHitVec(player, getBlockReachDistance() + 1)); + if (event.isCanceled()) + { + // Give the server a chance to fire event as well. That way server event is not dependant on client event. + this.connection.sendPacket(new CPacketPlayerTryUseItemOnBlock(pos, direction, hand, f, f1, f2)); + return event.getCancellationResult(); + } + EnumActionResult result = EnumActionResult.PASS; + + if (this.currentGameType != GameType.SPECTATOR) + { + EnumActionResult ret = itemstack.onItemUseFirst(player, worldIn, pos, hand, direction, f, f1, f2); + if (ret != EnumActionResult.PASS) + { + // The server needs to process the item use as well. Otherwise onItemUseFirst won't ever be called on the server without causing weird bugs + this.connection.sendPacket(new CPacketPlayerTryUseItemOnBlock(pos, direction, hand, f, f1, f2)); + return ret; + } + + IBlockState iblockstate = worldIn.getBlockState(pos); + boolean bypass = player.getHeldItemMainhand().doesSneakBypassUse(worldIn, pos, player) && player.getHeldItemOffhand().doesSneakBypassUse(worldIn, pos, player); + + if ((!player.isSneaking() || bypass || event.getUseBlock() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW)) + { + if (event.getUseBlock() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + flag = iblockstate.getBlock().onBlockActivated(worldIn, pos, iblockstate, player, hand, direction, f, f1, f2); + if (flag) result = EnumActionResult.SUCCESS; + } + + if (!flag && itemstack.getItem() instanceof ItemBlock) + { + ItemBlock itemblock = (ItemBlock)itemstack.getItem(); + + if (!itemblock.canPlaceBlockOnSide(worldIn, pos, direction, player, itemstack)) + { + return EnumActionResult.FAIL; + } + } + } + + this.connection.sendPacket(new CPacketPlayerTryUseItemOnBlock(pos, direction, hand, f, f1, f2)); + + if (!flag && this.currentGameType != GameType.SPECTATOR || event.getUseItem() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) + { + if (itemstack.isEmpty()) + { + return EnumActionResult.PASS; + } + else if (player.getCooldownTracker().hasCooldown(itemstack.getItem())) + { + return EnumActionResult.PASS; + } + else + { + if (itemstack.getItem() instanceof ItemBlock && !player.canUseCommandBlock()) + { + Block block = ((ItemBlock)itemstack.getItem()).getBlock(); + + if (block instanceof BlockCommandBlock || block instanceof BlockStructure) + { + return EnumActionResult.FAIL; + } + } + + if (this.currentGameType.isCreative()) + { + int i = itemstack.getMetadata(); + int j = itemstack.getCount(); + if (event.getUseItem() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) { + EnumActionResult enumactionresult = itemstack.onItemUse(player, worldIn, pos, hand, direction, f, f1, f2); + itemstack.setItemDamage(i); + itemstack.setCount(j); + return enumactionresult; + } else return result; + } + else + { + ItemStack copyForUse = itemstack.copy(); + if (event.getUseItem() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + result = itemstack.onItemUse(player, worldIn, pos, hand, direction, f, f1, f2); + if (itemstack.isEmpty()) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, copyForUse, hand); + return result; + } + } + } + else + { + return EnumActionResult.SUCCESS; + } + } + } + + public EnumActionResult processRightClick(EntityPlayer player, World worldIn, EnumHand hand) + { + if (this.currentGameType == GameType.SPECTATOR) + { + return EnumActionResult.PASS; + } + else + { + this.syncCurrentPlayItem(); + this.connection.sendPacket(new CPacketPlayerTryUseItem(hand)); + ItemStack itemstack = player.getHeldItem(hand); + + if (player.getCooldownTracker().hasCooldown(itemstack.getItem())) + { + return EnumActionResult.PASS; + } + else + { + EnumActionResult cancelResult = net.minecraftforge.common.ForgeHooks.onItemRightClick(player, hand); + if (cancelResult != null) return cancelResult; + int i = itemstack.getCount(); + ActionResult actionresult = itemstack.useItemRightClick(worldIn, player, hand); + ItemStack itemstack1 = actionresult.getResult(); + + if (itemstack1 != itemstack || itemstack1.getCount() != i) + { + player.setHeldItem(hand, itemstack1); + if (itemstack1.isEmpty()) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, itemstack, hand); + } + } + + return actionresult.getType(); + } + } + } + + public EntityPlayerSP createPlayer(World p_192830_1_, StatisticsManager p_192830_2_, RecipeBook p_192830_3_) + { + return new EntityPlayerSP(this.mc, p_192830_1_, this.connection, p_192830_2_, p_192830_3_); + } + + /** + * Attacks an entity + */ + public void attackEntity(EntityPlayer playerIn, Entity targetEntity) + { + this.syncCurrentPlayItem(); + this.connection.sendPacket(new CPacketUseEntity(targetEntity)); + + if (this.currentGameType != GameType.SPECTATOR) + { + playerIn.attackTargetEntityWithCurrentItem(targetEntity); + playerIn.resetCooldown(); + } + } + + /** + * Handles right clicking an entity, sends a packet to the server. + */ + public EnumActionResult interactWithEntity(EntityPlayer player, Entity target, EnumHand hand) + { + this.syncCurrentPlayItem(); + this.connection.sendPacket(new CPacketUseEntity(target, hand)); + return this.currentGameType == GameType.SPECTATOR ? EnumActionResult.PASS : player.interactOn(target, hand); + } + + /** + * Handles right clicking an entity from the entities side, sends a packet to the server. + */ + public EnumActionResult interactWithEntity(EntityPlayer player, Entity target, RayTraceResult ray, EnumHand hand) + { + this.syncCurrentPlayItem(); + Vec3d vec3d = new Vec3d(ray.hitVec.x - target.posX, ray.hitVec.y - target.posY, ray.hitVec.z - target.posZ); + this.connection.sendPacket(new CPacketUseEntity(target, hand, vec3d)); + if (this.currentGameType == GameType.SPECTATOR) return EnumActionResult.PASS; // don't fire for spectators to match non-specific EntityInteract + EnumActionResult cancelResult = net.minecraftforge.common.ForgeHooks.onInteractEntityAt(player, target, ray, hand); + if(cancelResult != null) return cancelResult; + return this.currentGameType == GameType.SPECTATOR ? EnumActionResult.PASS : target.applyPlayerInteraction(player, vec3d, hand); + } + + /** + * Handles slot clicks, sends a packet to the server. + */ + public ItemStack windowClick(int windowId, int slotId, int mouseButton, ClickType type, EntityPlayer player) + { + short short1 = player.openContainer.getNextTransactionID(player.inventory); + ItemStack itemstack = player.openContainer.slotClick(slotId, mouseButton, type, player); + this.connection.sendPacket(new CPacketClickWindow(windowId, slotId, mouseButton, type, itemstack, short1)); + return itemstack; + } + + public void func_194338_a(int p_194338_1_, IRecipe p_194338_2_, boolean p_194338_3_, EntityPlayer p_194338_4_) + { + this.connection.sendPacket(new CPacketPlaceRecipe(p_194338_1_, p_194338_2_, p_194338_3_)); + } + + /** + * GuiEnchantment uses this during multiplayer to tell PlayerControllerMP to send a packet indicating the + * enchantment action the player has taken. + */ + public void sendEnchantPacket(int windowID, int button) + { + this.connection.sendPacket(new CPacketEnchantItem(windowID, button)); + } + + /** + * Used in PlayerControllerMP to update the server with an ItemStack in a slot. + */ + public void sendSlotPacket(ItemStack itemStackIn, int slotId) + { + if (this.currentGameType.isCreative()) + { + this.connection.sendPacket(new CPacketCreativeInventoryAction(slotId, itemStackIn)); + } + } + + /** + * Sends a Packet107 to the server to drop the item on the ground + */ + public void sendPacketDropItem(ItemStack itemStackIn) + { + if (this.currentGameType.isCreative() && !itemStackIn.isEmpty()) + { + this.connection.sendPacket(new CPacketCreativeInventoryAction(-1, itemStackIn)); + } + } + + public void onStoppedUsingItem(EntityPlayer playerIn) + { + this.syncCurrentPlayItem(); + this.connection.sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.RELEASE_USE_ITEM, BlockPos.ORIGIN, EnumFacing.DOWN)); + playerIn.stopActiveHand(); + } + + public boolean gameIsSurvivalOrAdventure() + { + return this.currentGameType.isSurvivalOrAdventure(); + } + + /** + * Checks if the player is not creative, used for checking if it should break a block instantly + */ + public boolean isNotCreative() + { + return !this.currentGameType.isCreative(); + } + + /** + * returns true if player is in creative mode + */ + public boolean isInCreativeMode() + { + return this.currentGameType.isCreative(); + } + + /** + * true for hitting entities far away. + */ + public boolean extendedReach() + { + return this.currentGameType.isCreative(); + } + + /** + * Checks if the player is riding a horse, used to chose the GUI to open + */ + public boolean isRidingHorse() + { + return this.mc.player.isRiding() && this.mc.player.getRidingEntity() instanceof AbstractHorse; + } + + public boolean isSpectatorMode() + { + return this.currentGameType == GameType.SPECTATOR; + } + + public GameType getCurrentGameType() + { + return this.currentGameType; + } + + /** + * Return isHittingBlock + */ + public boolean getIsHittingBlock() + { + return this.isHittingBlock; + } + + public void pickItem(int index) + { + this.connection.sendPacket(new CPacketCustomPayload("MC|PickItem", (new PacketBuffer(Unpooled.buffer())).writeVarInt(index))); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerAddress.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerAddress.java new file mode 100644 index 0000000..d23b28b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerAddress.java @@ -0,0 +1,125 @@ +package net.minecraft.client.multiplayer; + +import java.net.IDN; +import java.util.Hashtable; +import javax.naming.directory.Attributes; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ServerAddress +{ + private final String ipAddress; + private final int serverPort; + + private ServerAddress(String address, int port) + { + this.ipAddress = address; + this.serverPort = port; + } + + public String getIP() + { + try + { + return IDN.toASCII(this.ipAddress); + } + catch (IllegalArgumentException var2) + { + return ""; + } + } + + public int getPort() + { + return this.serverPort; + } + + public static ServerAddress fromString(String addrString) + { + if (addrString == null) + { + return null; + } + else + { + String[] astring = addrString.split(":"); + + if (addrString.startsWith("[")) + { + int i = addrString.indexOf("]"); + + if (i > 0) + { + String s = addrString.substring(1, i); + String s1 = addrString.substring(i + 1).trim(); + + if (s1.startsWith(":") && !s1.isEmpty()) + { + s1 = s1.substring(1); + astring = new String[] {s, s1}; + } + else + { + astring = new String[] {s}; + } + } + } + + if (astring.length > 2) + { + astring = new String[] {addrString}; + } + + String s2 = astring[0]; + int j = astring.length > 1 ? getInt(astring[1], 25565) : 25565; + + if (j == 25565) + { + String[] astring1 = getServerAddress(s2); + s2 = astring1[0]; + j = getInt(astring1[1], 25565); + } + + return new ServerAddress(s2, j); + } + } + + /** + * Returns a server's address and port for the specified hostname, looking up the SRV record if possible + */ + private static String[] getServerAddress(String p_78863_0_) + { + try + { + String s = "com.sun.jndi.dns.DnsContextFactory"; + Class.forName("com.sun.jndi.dns.DnsContextFactory"); + Hashtable hashtable = new Hashtable(); + hashtable.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); + hashtable.put("java.naming.provider.url", "dns:"); + hashtable.put("com.sun.jndi.dns.timeout.retries", "1"); + DirContext dircontext = new InitialDirContext(hashtable); + Attributes attributes = dircontext.getAttributes("_minecraft._tcp." + p_78863_0_, new String[] {"SRV"}); + String[] astring = attributes.get("srv").get().toString().split(" ", 4); + return new String[] {astring[3], astring[2]}; + } + catch (Throwable var6) + { + return new String[] {p_78863_0_, Integer.toString(25565)}; + } + } + + private static int getInt(String value, int defaultValue) + { + try + { + return Integer.parseInt(value.trim()); + } + catch (Exception var3) + { + return defaultValue; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerData.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerData.java new file mode 100644 index 0000000..e413977 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerData.java @@ -0,0 +1,159 @@ +package net.minecraft.client.multiplayer; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ServerData +{ + public String serverName; + public String serverIP; + /** + * the string indicating number of players on and capacity of the server that is shown on the server browser (i.e. + * "5/20" meaning 5 slots used out of 20 slots total) + */ + public String populationInfo; + /** + * (better variable name would be 'hostname') server name as displayed in the server browser's second line (grey + * text) + */ + public String serverMOTD; + /** last server ping that showed up in the server browser */ + public long pingToServer; + public int version = 340; + /** Game version for this server. */ + public String gameVersion = "1.12.2"; + public boolean pinged; + public String playerList; + private ServerData.ServerResourceMode resourceMode = ServerData.ServerResourceMode.PROMPT; + private String serverIcon; + /** True if the server is a LAN server */ + private boolean lanServer; + + public ServerData(String name, String ip, boolean isLan) + { + this.serverName = name; + this.serverIP = ip; + this.lanServer = isLan; + } + + /** + * Returns an NBTTagCompound with the server's name, IP and maybe acceptTextures. + */ + public NBTTagCompound getNBTCompound() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("name", this.serverName); + nbttagcompound.setString("ip", this.serverIP); + + if (this.serverIcon != null) + { + nbttagcompound.setString("icon", this.serverIcon); + } + + if (this.resourceMode == ServerData.ServerResourceMode.ENABLED) + { + nbttagcompound.setBoolean("acceptTextures", true); + } + else if (this.resourceMode == ServerData.ServerResourceMode.DISABLED) + { + nbttagcompound.setBoolean("acceptTextures", false); + } + + return nbttagcompound; + } + + public ServerData.ServerResourceMode getResourceMode() + { + return this.resourceMode; + } + + public void setResourceMode(ServerData.ServerResourceMode mode) + { + this.resourceMode = mode; + } + + /** + * Takes an NBTTagCompound with 'name' and 'ip' keys, returns a ServerData instance. + */ + public static ServerData getServerDataFromNBTCompound(NBTTagCompound nbtCompound) + { + ServerData serverdata = new ServerData(nbtCompound.getString("name"), nbtCompound.getString("ip"), false); + + if (nbtCompound.hasKey("icon", 8)) + { + serverdata.setBase64EncodedIconData(nbtCompound.getString("icon")); + } + + if (nbtCompound.hasKey("acceptTextures", 1)) + { + if (nbtCompound.getBoolean("acceptTextures")) + { + serverdata.setResourceMode(ServerData.ServerResourceMode.ENABLED); + } + else + { + serverdata.setResourceMode(ServerData.ServerResourceMode.DISABLED); + } + } + else + { + serverdata.setResourceMode(ServerData.ServerResourceMode.PROMPT); + } + + return serverdata; + } + + /** + * Returns the base-64 encoded representation of the server's icon, or null if not available + */ + public String getBase64EncodedIconData() + { + return this.serverIcon; + } + + public void setBase64EncodedIconData(String icon) + { + this.serverIcon = icon; + } + + /** + * Return true if the server is a LAN server + */ + public boolean isOnLAN() + { + return this.lanServer; + } + + public void copyFrom(ServerData serverDataIn) + { + this.serverIP = serverDataIn.serverIP; + this.serverName = serverDataIn.serverName; + this.setResourceMode(serverDataIn.getResourceMode()); + this.serverIcon = serverDataIn.serverIcon; + this.lanServer = serverDataIn.lanServer; + } + + @SideOnly(Side.CLIENT) + public static enum ServerResourceMode + { + ENABLED("enabled"), + DISABLED("disabled"), + PROMPT("prompt"); + + private final ITextComponent motd; + + private ServerResourceMode(String name) + { + this.motd = new TextComponentTranslation("addServer.resourcePack." + name, new Object[0]); + } + + public ITextComponent getMotd() + { + return this.motd; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerList.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerList.java new file mode 100644 index 0000000..4435df9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ServerList.java @@ -0,0 +1,150 @@ +package net.minecraft.client.multiplayer; + +import com.google.common.collect.Lists; +import java.io.File; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ServerList +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The Minecraft instance. */ + private final Minecraft mc; + /** List of ServerData instances. */ + private final List servers = Lists.newArrayList(); + + public ServerList(Minecraft mcIn) + { + this.mc = mcIn; + this.loadServerList(); + } + + /** + * Loads a list of servers from servers.dat, by running ServerData.getServerDataFromNBTCompound on each NBT compound + * found in the "servers" tag list. + */ + public void loadServerList() + { + try + { + this.servers.clear(); + NBTTagCompound nbttagcompound = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat")); + + if (nbttagcompound == null) + { + return; + } + + NBTTagList nbttaglist = nbttagcompound.getTagList("servers", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + this.servers.add(ServerData.getServerDataFromNBTCompound(nbttaglist.getCompoundTagAt(i))); + } + } + catch (Exception exception) + { + LOGGER.error("Couldn't load server list", (Throwable)exception); + } + } + + /** + * Runs getNBTCompound on each ServerData instance, puts everything into a "servers" NBT list and writes it to + * servers.dat. + */ + public void saveServerList() + { + try + { + NBTTagList nbttaglist = new NBTTagList(); + + for (ServerData serverdata : this.servers) + { + nbttaglist.appendTag(serverdata.getNBTCompound()); + } + + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setTag("servers", nbttaglist); + CompressedStreamTools.safeWrite(nbttagcompound, new File(this.mc.mcDataDir, "servers.dat")); + } + catch (Exception exception) + { + LOGGER.error("Couldn't save server list", (Throwable)exception); + } + } + + /** + * Gets the ServerData instance stored for the given index in the list. + */ + public ServerData getServerData(int index) + { + return this.servers.get(index); + } + + /** + * Removes the ServerData instance stored for the given index in the list. + */ + public void removeServerData(int index) + { + this.servers.remove(index); + } + + /** + * Adds the given ServerData instance to the list. + */ + public void addServerData(ServerData server) + { + this.servers.add(server); + } + + /** + * Counts the number of ServerData instances in the list. + */ + public int countServers() + { + return this.servers.size(); + } + + /** + * Takes two list indexes, and swaps their order around. + */ + public void swapServers(int pos1, int pos2) + { + ServerData serverdata = this.getServerData(pos1); + this.servers.set(pos1, this.getServerData(pos2)); + this.servers.set(pos2, serverdata); + this.saveServerList(); + } + + public void set(int index, ServerData server) + { + this.servers.set(index, server); + } + + public static void saveSingleServer(ServerData server) + { + ServerList serverlist = new ServerList(Minecraft.getMinecraft()); + serverlist.loadServerList(); + + for (int i = 0; i < serverlist.countServers(); ++i) + { + ServerData serverdata = serverlist.getServerData(i); + + if (serverdata.serverName.equals(server.serverName) && serverdata.serverIP.equals(server.serverIP)) + { + serverlist.set(i, server); + break; + } + } + + serverlist.saveServerList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ThreadLanServerPing.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ThreadLanServerPing.java new file mode 100644 index 0000000..b25f09e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/ThreadLanServerPing.java @@ -0,0 +1,122 @@ +package net.minecraft.client.multiplayer; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.atomic.AtomicInteger; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ThreadLanServerPing extends Thread +{ + private static final AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0); + private static final Logger LOGGER = LogManager.getLogger(); + private final String motd; + /** The socket we're using to send packets on. */ + private final DatagramSocket socket; + private boolean isStopping = true; + private final String address; + + public ThreadLanServerPing(String p_i1321_1_, String p_i1321_2_) throws IOException + { + super("LanServerPinger #" + UNIQUE_THREAD_ID.incrementAndGet()); + this.motd = p_i1321_1_; + this.address = p_i1321_2_; + this.setDaemon(true); + this.socket = new DatagramSocket(); + } + + public void run() + { + String s = getPingResponse(this.motd, this.address); + byte[] abyte = s.getBytes(StandardCharsets.UTF_8); + + while (!this.isInterrupted() && this.isStopping) + { + try + { + InetAddress inetaddress = InetAddress.getByName("224.0.2.60"); + DatagramPacket datagrampacket = new DatagramPacket(abyte, abyte.length, inetaddress, 4445); + this.socket.send(datagrampacket); + } + catch (IOException ioexception) + { + LOGGER.warn("LanServerPinger: {}", (Object)ioexception.getMessage()); + break; + } + + try + { + sleep(1500L); + } + catch (InterruptedException var5) + { + ; + } + } + } + + public void interrupt() + { + super.interrupt(); + this.isStopping = false; + } + + public static String getPingResponse(String p_77525_0_, String p_77525_1_) + { + return "[MOTD]" + p_77525_0_ + "[/MOTD][AD]" + p_77525_1_ + "[/AD]"; + } + + public static String getMotdFromPingResponse(String p_77524_0_) + { + int i = p_77524_0_.indexOf("[MOTD]"); + + if (i < 0) + { + return "missing no"; + } + else + { + int j = p_77524_0_.indexOf("[/MOTD]", i + "[MOTD]".length()); + return j < i ? "missing no" : p_77524_0_.substring(i + "[MOTD]".length(), j); + } + } + + public static String getAdFromPingResponse(String p_77523_0_) + { + int i = p_77523_0_.indexOf("[/MOTD]"); + + if (i < 0) + { + return null; + } + else + { + int j = p_77523_0_.indexOf("[/MOTD]", i + "[/MOTD]".length()); + + if (j >= 0) + { + return null; + } + else + { + int k = p_77523_0_.indexOf("[AD]", i + "[/MOTD]".length()); + + if (k < 0) + { + return null; + } + else + { + int l = p_77523_0_.indexOf("[/AD]", k + "[AD]".length()); + return l < k ? null : p_77523_0_.substring(k + "[AD]".length(), l); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/WorldClient.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/WorldClient.java new file mode 100644 index 0000000..6101bd6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/WorldClient.java @@ -0,0 +1,562 @@ +package net.minecraft.client.multiplayer; + +import com.google.common.collect.Sets; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MovingSoundMinecart; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.client.particle.ParticleFirework; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.profiler.Profiler; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.DimensionType; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.storage.SaveDataMemoryStorage; +import net.minecraft.world.storage.SaveHandlerMP; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class WorldClient extends World +{ + /** The packets that need to be sent to the server. */ + private final NetHandlerPlayClient connection; + /** The ChunkProviderClient instance */ + private ChunkProviderClient clientChunkProvider; + /** Contains all entities for this client, both spawned and non-spawned. */ + private final Set entityList = Sets.newHashSet(); + /** + * Contains all entities for this client that were not spawned due to a non-present chunk. The game will attempt to + * spawn up to 10 pending entities with each subsequent tick until the spawn queue is empty. + */ + private final Set entitySpawnQueue = Sets.newHashSet(); + private final Minecraft mc = Minecraft.getMinecraft(); + private final Set previousActiveChunkSet = Sets.newHashSet(); + private int ambienceTicks; + protected Set visibleChunks; + + public WorldClient(NetHandlerPlayClient netHandler, WorldSettings settings, int dimension, EnumDifficulty difficulty, Profiler profilerIn) + { + super(new SaveHandlerMP(), new WorldInfo(settings, "MpServer"), net.minecraftforge.common.DimensionManager.createProviderFor(dimension), profilerIn, true); + this.ambienceTicks = this.rand.nextInt(12000); + this.visibleChunks = Sets.newHashSet(); + this.connection = netHandler; + this.getWorldInfo().setDifficulty(difficulty); + this.provider.setWorld(this); + this.setSpawnPoint(new BlockPos(8, 64, 8)); //Forge: Moved below registerWorld to prevent NPE in our redirect. + this.chunkProvider = this.createChunkProvider(); + this.mapStorage = new SaveDataMemoryStorage(); + this.calculateInitialSkylight(); + this.calculateInitialWeather(); + this.initCapabilities(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(this)); + } + + /** + * Runs a single tick for the world + */ + public void tick() + { + super.tick(); + this.setTotalWorldTime(this.getTotalWorldTime() + 1L); + + if (this.getGameRules().getBoolean("doDaylightCycle")) + { + this.setWorldTime(this.getWorldTime() + 1L); + } + + this.profiler.startSection("reEntryProcessing"); + + for (int i = 0; i < 10 && !this.entitySpawnQueue.isEmpty(); ++i) + { + Entity entity = this.entitySpawnQueue.iterator().next(); + this.entitySpawnQueue.remove(entity); + + if (!this.loadedEntityList.contains(entity)) + { + this.spawnEntity(entity); + } + } + + this.profiler.endStartSection("chunkCache"); + this.clientChunkProvider.tick(); + this.profiler.endStartSection("blocks"); + this.updateBlocks(); + this.profiler.endSection(); + } + + /** + * Invalidates an AABB region of blocks from the receive queue, in the event that the block has been modified + * client-side in the intervening 80 receive ticks. + */ + public void invalidateBlockReceiveRegion(int x1, int y1, int z1, int x2, int y2, int z2) + { + } + + /** + * Creates the chunk provider for this world. Called in the constructor. Retrieves provider from worldProvider? + */ + protected IChunkProvider createChunkProvider() + { + this.clientChunkProvider = new ChunkProviderClient(this); + return this.clientChunkProvider; + } + + protected boolean isChunkLoaded(int x, int z, boolean allowEmpty) + { + return allowEmpty || !this.getChunkProvider().provideChunk(x, z).isEmpty(); + } + + protected void refreshVisibleChunks() + { + this.visibleChunks.clear(); + int i = this.mc.gameSettings.renderDistanceChunks; + this.profiler.startSection("buildList"); + int j = MathHelper.floor(this.mc.player.posX / 16.0D); + int k = MathHelper.floor(this.mc.player.posZ / 16.0D); + + for (int l = -i; l <= i; ++l) + { + for (int i1 = -i; i1 <= i; ++i1) + { + this.visibleChunks.add(new ChunkPos(l + j, i1 + k)); + } + } + + this.profiler.endSection(); + } + + protected void updateBlocks() + { + this.refreshVisibleChunks(); + + if (this.ambienceTicks > 0) + { + --this.ambienceTicks; + } + + this.previousActiveChunkSet.retainAll(this.visibleChunks); + + if (this.previousActiveChunkSet.size() == this.visibleChunks.size()) + { + this.previousActiveChunkSet.clear(); + } + + int i = 0; + + for (ChunkPos chunkpos : this.visibleChunks) + { + if (!this.previousActiveChunkSet.contains(chunkpos)) + { + int j = chunkpos.x * 16; + int k = chunkpos.z * 16; + this.profiler.startSection("getChunk"); + Chunk chunk = this.getChunkFromChunkCoords(chunkpos.x, chunkpos.z); + this.playMoodSoundAndCheckLight(j, k, chunk); + this.profiler.endSection(); + this.previousActiveChunkSet.add(chunkpos); + ++i; + + if (i >= 10) + { + return; + } + } + } + } + + public void doPreChunk(int chunkX, int chunkZ, boolean loadChunk) + { + if (loadChunk) + { + this.clientChunkProvider.loadChunk(chunkX, chunkZ); + } + else + { + this.clientChunkProvider.unloadChunk(chunkX, chunkZ); + this.markBlockRangeForRenderUpdate(chunkX * 16, 0, chunkZ * 16, chunkX * 16 + 15, 256, chunkZ * 16 + 15); + } + } + + /** + * Called when an entity is spawned in the world. This includes players. + */ + public boolean spawnEntity(Entity entityIn) + { + boolean flag = super.spawnEntity(entityIn); + this.entityList.add(entityIn); + + if (flag) + { + if (entityIn instanceof EntityMinecart) + { + this.mc.getSoundHandler().playSound(new MovingSoundMinecart((EntityMinecart)entityIn)); + } + } + else + { + this.entitySpawnQueue.add(entityIn); + } + + return flag; + } + + /** + * Schedule the entity for removal during the next tick. Marks the entity dead in anticipation. + */ + public void removeEntity(Entity entityIn) + { + super.removeEntity(entityIn); + this.entityList.remove(entityIn); + } + + public void onEntityAdded(Entity entityIn) + { + super.onEntityAdded(entityIn); + + if (this.entitySpawnQueue.contains(entityIn)) + { + this.entitySpawnQueue.remove(entityIn); + } + } + + public void onEntityRemoved(Entity entityIn) + { + super.onEntityRemoved(entityIn); + + if (this.entityList.contains(entityIn)) + { + if (entityIn.isEntityAlive()) + { + this.entitySpawnQueue.add(entityIn); + } + else + { + this.entityList.remove(entityIn); + } + } + } + + /** + * Add an ID to Entity mapping to entityHashSet + */ + public void addEntityToWorld(int entityID, Entity entityToSpawn) + { + Entity entity = this.getEntityByID(entityID); + + if (entity != null) + { + this.removeEntity(entity); + } + + this.entityList.add(entityToSpawn); + entityToSpawn.setEntityId(entityID); + + if (!this.spawnEntity(entityToSpawn)) + { + this.entitySpawnQueue.add(entityToSpawn); + } + + this.entitiesById.addKey(entityID, entityToSpawn); + } + + /** + * Returns the Entity with the given ID, or null if it doesn't exist in this World. + */ + @Nullable + public Entity getEntityByID(int id) + { + return (Entity)(id == this.mc.player.getEntityId() ? this.mc.player : super.getEntityByID(id)); + } + + public Entity removeEntityFromWorld(int entityID) + { + Entity entity = this.entitiesById.removeObject(entityID); + + if (entity != null) + { + this.entityList.remove(entity); + this.removeEntity(entity); + } + + return entity; + } + + @Deprecated + public boolean invalidateRegionAndSetBlock(BlockPos pos, IBlockState state) + { + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + this.invalidateBlockReceiveRegion(i, j, k, i, j, k); + return super.setBlockState(pos, state, 3); + } + + /** + * If on MP, sends a quitting packet. + */ + public void sendQuittingDisconnectingPacket() + { + this.connection.getNetworkManager().closeChannel(new TextComponentString("Quitting")); + } + + /** + * Updates all weather states. + */ + protected void updateWeather() + { + } + + protected void playMoodSoundAndCheckLight(int p_147467_1_, int p_147467_2_, Chunk chunkIn) + { + super.playMoodSoundAndCheckLight(p_147467_1_, p_147467_2_, chunkIn); + + if (this.ambienceTicks == 0) + { + this.updateLCG = this.updateLCG * 3 + 1013904223; + int i = this.updateLCG >> 2; + int j = i & 15; + int k = i >> 8 & 15; + int l = i >> 16 & 255; + BlockPos blockpos = new BlockPos(j + p_147467_1_, l, k + p_147467_2_); + IBlockState iblockstate = chunkIn.getBlockState(blockpos); + j = j + p_147467_1_; + k = k + p_147467_2_; + + if (iblockstate.getMaterial() == Material.AIR && this.getLight(blockpos) <= this.rand.nextInt(8) && this.getLightFor(EnumSkyBlock.SKY, blockpos) <= 0) + { + double d0 = this.mc.player.getDistanceSq((double)j + 0.5D, (double)l + 0.5D, (double)k + 0.5D); + + if (this.mc.player != null && d0 > 4.0D && d0 < 256.0D) + { + this.playSound((double)j + 0.5D, (double)l + 0.5D, (double)k + 0.5D, SoundEvents.AMBIENT_CAVE, SoundCategory.AMBIENT, 0.7F, 0.8F + this.rand.nextFloat() * 0.2F, false); + this.ambienceTicks = this.rand.nextInt(12000) + 6000; + } + } + } + } + + public void doVoidFogParticles(int posX, int posY, int posZ) + { + int i = 32; + Random random = new Random(); + ItemStack itemstack = this.mc.player.getHeldItemMainhand(); + boolean flag = this.mc.playerController.getCurrentGameType() == GameType.CREATIVE && !itemstack.isEmpty() && itemstack.getItem() == Item.getItemFromBlock(Blocks.BARRIER); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int j = 0; j < 667; ++j) + { + this.showBarrierParticles(posX, posY, posZ, 16, random, flag, blockpos$mutableblockpos); + this.showBarrierParticles(posX, posY, posZ, 32, random, flag, blockpos$mutableblockpos); + } + } + + public void showBarrierParticles(int x, int y, int z, int offset, Random random, boolean holdingBarrier, BlockPos.MutableBlockPos pos) + { + int i = x + this.rand.nextInt(offset) - this.rand.nextInt(offset); + int j = y + this.rand.nextInt(offset) - this.rand.nextInt(offset); + int k = z + this.rand.nextInt(offset) - this.rand.nextInt(offset); + pos.setPos(i, j, k); + IBlockState iblockstate = this.getBlockState(pos); + iblockstate.getBlock().randomDisplayTick(iblockstate, this, pos, random); + + if (holdingBarrier && iblockstate.getBlock() == Blocks.BARRIER) + { + this.spawnParticle(EnumParticleTypes.BARRIER, (double)((float)i + 0.5F), (double)((float)j + 0.5F), (double)((float)k + 0.5F), 0.0D, 0.0D, 0.0D, new int[0]); + } + } + + /** + * also releases skins. + */ + public void removeAllEntities() + { + this.loadedEntityList.removeAll(this.unloadedEntityList); + + for (int i = 0; i < this.unloadedEntityList.size(); ++i) + { + Entity entity = this.unloadedEntityList.get(i); + int j = entity.chunkCoordX; + int k = entity.chunkCoordZ; + + if (entity.addedToChunk && this.isChunkLoaded(j, k, true)) + { + this.getChunkFromChunkCoords(j, k).removeEntity(entity); + } + } + + for (int i1 = 0; i1 < this.unloadedEntityList.size(); ++i1) + { + this.onEntityRemoved(this.unloadedEntityList.get(i1)); + } + + this.unloadedEntityList.clear(); + + for (int j1 = 0; j1 < this.loadedEntityList.size(); ++j1) + { + Entity entity1 = this.loadedEntityList.get(j1); + Entity entity2 = entity1.getRidingEntity(); + + if (entity2 != null) + { + if (!entity2.isDead && entity2.isPassenger(entity1)) + { + continue; + } + + entity1.dismountRidingEntity(); + } + + if (entity1.isDead) + { + int k1 = entity1.chunkCoordX; + int l = entity1.chunkCoordZ; + + if (entity1.addedToChunk && this.isChunkLoaded(k1, l, true)) + { + this.getChunkFromChunkCoords(k1, l).removeEntity(entity1); + } + + this.loadedEntityList.remove(j1--); + this.onEntityRemoved(entity1); + } + } + } + + /** + * Adds some basic stats of the world to the given crash report. + */ + public CrashReportCategory addWorldInfoToCrashReport(CrashReport report) + { + CrashReportCategory crashreportcategory = super.addWorldInfoToCrashReport(report); + crashreportcategory.addDetail("Forced entities", new ICrashReportDetail() + { + public String call() + { + return WorldClient.this.entityList.size() + " total; " + WorldClient.this.entityList; + } + }); + crashreportcategory.addDetail("Retry entities", new ICrashReportDetail() + { + public String call() + { + return WorldClient.this.entitySpawnQueue.size() + " total; " + WorldClient.this.entitySpawnQueue; + } + }); + crashreportcategory.addDetail("Server brand", new ICrashReportDetail() + { + public String call() throws Exception + { + return WorldClient.this.mc.player.getServerBrand(); + } + }); + crashreportcategory.addDetail("Server type", new ICrashReportDetail() + { + public String call() throws Exception + { + return WorldClient.this.mc.getIntegratedServer() == null ? "Non-integrated multiplayer server" : "Integrated singleplayer server"; + } + }); + return crashreportcategory; + } + + public void playSound(@Nullable EntityPlayer player, double x, double y, double z, SoundEvent soundIn, SoundCategory category, float volume, float pitch) + { + if (player == this.mc.player) + { + this.playSound(x, y, z, soundIn, category, volume, pitch, false); + } + } + + public void playSound(BlockPos pos, SoundEvent soundIn, SoundCategory category, float volume, float pitch, boolean distanceDelay) + { + this.playSound((double)pos.getX() + 0.5D, (double)pos.getY() + 0.5D, (double)pos.getZ() + 0.5D, soundIn, category, volume, pitch, distanceDelay); + } + + public void playSound(double x, double y, double z, SoundEvent soundIn, SoundCategory category, float volume, float pitch, boolean distanceDelay) + { + double d0 = this.mc.getRenderViewEntity().getDistanceSq(x, y, z); + PositionedSoundRecord positionedsoundrecord = new PositionedSoundRecord(soundIn, category, volume, pitch, (float)x, (float)y, (float)z); + + if (distanceDelay && d0 > 100.0D) + { + double d1 = Math.sqrt(d0) / 40.0D; + this.mc.getSoundHandler().playDelayedSound(positionedsoundrecord, (int)(d1 * 20.0D)); + } + else + { + this.mc.getSoundHandler().playSound(positionedsoundrecord); + } + } + + public void makeFireworks(double x, double y, double z, double motionX, double motionY, double motionZ, @Nullable NBTTagCompound compound) + { + this.mc.effectRenderer.addEffect(new ParticleFirework.Starter(this, x, y, z, motionX, motionY, motionZ, this.mc.effectRenderer, compound)); + } + + public void sendPacketToServer(Packet packetIn) + { + this.connection.sendPacket(packetIn); + } + + public void setWorldScoreboard(Scoreboard scoreboardIn) + { + this.worldScoreboard = scoreboardIn; + } + + /** + * Sets the world time. + */ + public void setWorldTime(long time) + { + if (time < 0L) + { + time = -time; + this.getGameRules().setOrCreateGameRule("doDaylightCycle", "false"); + } + else + { + this.getGameRules().setOrCreateGameRule("doDaylightCycle", "true"); + } + + super.setWorldTime(time); + } + + /** + * gets the world's chunk provider + */ + public ChunkProviderClient getChunkProvider() + { + return (ChunkProviderClient)super.getChunkProvider(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/package-info.java new file mode 100644 index 0000000..047569b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/multiplayer/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.multiplayer; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/LanServerDetector.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/LanServerDetector.java new file mode 100644 index 0000000..b347792 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/LanServerDetector.java @@ -0,0 +1,135 @@ +package net.minecraft.client.network; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; +import java.net.SocketTimeoutException; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import net.minecraft.client.multiplayer.ThreadLanServerPing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class LanServerDetector +{ + private static final AtomicInteger ATOMIC_COUNTER = new AtomicInteger(0); + private static final Logger LOGGER = LogManager.getLogger(); + + @SideOnly(Side.CLIENT) + public static class LanServerList + { + private final List listOfLanServers = Lists.newArrayList(); + boolean wasUpdated; + + public synchronized boolean getWasUpdated() + { + return this.wasUpdated; + } + + public synchronized void setWasNotUpdated() + { + this.wasUpdated = false; + } + + public synchronized List getLanServers() + { + return Collections.unmodifiableList(this.listOfLanServers); + } + + public synchronized void addServer(String pingResponse, InetAddress ipAddress) + { + String s = ThreadLanServerPing.getMotdFromPingResponse(pingResponse); + String s1 = ThreadLanServerPing.getAdFromPingResponse(pingResponse); + + if (s1 != null) + { + s1 = ipAddress.getHostAddress() + ":" + s1; + boolean flag = false; + + for (LanServerInfo lanserverinfo : this.listOfLanServers) + { + if (lanserverinfo.getServerIpPort().equals(s1)) + { + lanserverinfo.updateLastSeen(); + flag = true; + break; + } + } + + if (!flag) + { + this.listOfLanServers.add(new LanServerInfo(s, s1)); + this.wasUpdated = true; + } + } + } + } + + @SideOnly(Side.CLIENT) + public static class ThreadLanServerFind extends Thread + { + /** The LanServerList */ + private final LanServerDetector.LanServerList localServerList; + /** InetAddress for 224.0.2.60 */ + private final InetAddress broadcastAddress; + /** The socket we're using to receive packets on. */ + private final MulticastSocket socket; + + public ThreadLanServerFind(LanServerDetector.LanServerList list) throws IOException + { + super("LanServerDetector #" + LanServerDetector.ATOMIC_COUNTER.incrementAndGet()); + this.localServerList = list; + this.setDaemon(true); + this.socket = new MulticastSocket(4445); + this.broadcastAddress = InetAddress.getByName("224.0.2.60"); + this.socket.setSoTimeout(5000); + this.socket.joinGroup(this.broadcastAddress); + } + + public void run() + { + byte[] abyte = new byte[1024]; + + while (!this.isInterrupted()) + { + DatagramPacket datagrampacket = new DatagramPacket(abyte, abyte.length); + + try + { + this.socket.receive(datagrampacket); + } + catch (SocketTimeoutException var5) + { + continue; + } + catch (IOException ioexception) + { + LanServerDetector.LOGGER.error("Couldn't ping server", (Throwable)ioexception); + break; + } + + String s = new String(datagrampacket.getData(), datagrampacket.getOffset(), datagrampacket.getLength(), StandardCharsets.UTF_8); + LanServerDetector.LOGGER.debug("{}: {}", datagrampacket.getAddress(), s); + this.localServerList.addServer(s, datagrampacket.getAddress()); + } + + try + { + this.socket.leaveGroup(this.broadcastAddress); + } + catch (IOException var4) + { + ; + } + + this.socket.close(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/LanServerInfo.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/LanServerInfo.java new file mode 100644 index 0000000..9850c07 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/LanServerInfo.java @@ -0,0 +1,39 @@ +package net.minecraft.client.network; + +import net.minecraft.client.Minecraft; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LanServerInfo +{ + private final String lanServerMotd; + private final String lanServerIpPort; + /** Last time this LanServer was seen. */ + private long timeLastSeen; + + public LanServerInfo(String p_i47130_1_, String p_i47130_2_) + { + this.lanServerMotd = p_i47130_1_; + this.lanServerIpPort = p_i47130_2_; + this.timeLastSeen = Minecraft.getSystemTime(); + } + + public String getServerMotd() + { + return this.lanServerMotd; + } + + public String getServerIpPort() + { + return this.lanServerIpPort; + } + + /** + * Updates the time this LanServer was last seen. + */ + public void updateLastSeen() + { + this.timeLastSeen = Minecraft.getSystemTime(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerHandshakeMemory.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerHandshakeMemory.java new file mode 100644 index 0000000..4aa4a89 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerHandshakeMemory.java @@ -0,0 +1,42 @@ +package net.minecraft.client.network; + +import net.minecraft.network.NetworkManager; +import net.minecraft.network.handshake.INetHandlerHandshakeServer; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.NetHandlerLoginServer; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class NetHandlerHandshakeMemory implements INetHandlerHandshakeServer +{ + private final MinecraftServer mcServer; + private final NetworkManager networkManager; + + public NetHandlerHandshakeMemory(MinecraftServer mcServerIn, NetworkManager networkManagerIn) + { + this.mcServer = mcServerIn; + this.networkManager = networkManagerIn; + } + + /** + * There are two recognized intentions for initiating a handshake: logging in and acquiring server status. The + * NetworkManager's protocol will be reconfigured according to the specified intention, although a login-intention + * must pass a versioncheck or receive a disconnect otherwise + */ + public void processHandshake(C00Handshake packetIn) + { + if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerHandshake(packetIn, this.networkManager)) return; + this.networkManager.setConnectionState(packetIn.getRequestedState()); + this.networkManager.setNetHandler(new NetHandlerLoginServer(this.mcServer, this.networkManager)); + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerLoginClient.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerLoginClient.java new file mode 100644 index 0000000..1712339 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerLoginClient.java @@ -0,0 +1,144 @@ +package net.minecraft.client.network; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.exceptions.AuthenticationException; +import com.mojang.authlib.exceptions.AuthenticationUnavailableException; +import com.mojang.authlib.exceptions.InvalidCredentialsException; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; +import java.math.BigInteger; +import java.security.PublicKey; +import javax.annotation.Nullable; +import javax.crypto.SecretKey; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiDisconnected; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiScreenRealmsProxy; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.login.INetHandlerLoginClient; +import net.minecraft.network.login.client.CPacketEncryptionResponse; +import net.minecraft.network.login.server.SPacketDisconnect; +import net.minecraft.network.login.server.SPacketEnableCompression; +import net.minecraft.network.login.server.SPacketEncryptionRequest; +import net.minecraft.network.login.server.SPacketLoginSuccess; +import net.minecraft.realms.DisconnectedRealmsScreen; +import net.minecraft.util.CryptManager; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class NetHandlerLoginClient implements INetHandlerLoginClient +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Minecraft mc; + @Nullable + private final GuiScreen previousGuiScreen; + private final NetworkManager networkManager; + private GameProfile gameProfile; + + public NetHandlerLoginClient(NetworkManager networkManagerIn, Minecraft mcIn, @Nullable GuiScreen previousScreenIn) + { + this.networkManager = networkManagerIn; + this.mc = mcIn; + this.previousGuiScreen = previousScreenIn; + } + + public void handleEncryptionRequest(SPacketEncryptionRequest packetIn) + { + final SecretKey secretkey = CryptManager.createNewSharedKey(); + String s = packetIn.getServerId(); + PublicKey publickey = packetIn.getPublicKey(); + String s1 = (new BigInteger(CryptManager.getServerIdHash(s, publickey, secretkey))).toString(16); + + if (this.mc.getCurrentServerData() != null && this.mc.getCurrentServerData().isOnLAN()) + { + try + { + this.getSessionService().joinServer(this.mc.getSession().getProfile(), this.mc.getSession().getToken(), s1); + } + catch (AuthenticationException var10) + { + LOGGER.warn("Couldn't connect to auth servers but will continue to join LAN"); + } + } + else + { + try + { + this.getSessionService().joinServer(this.mc.getSession().getProfile(), this.mc.getSession().getToken(), s1); + } + catch (AuthenticationUnavailableException var7) + { + this.networkManager.closeChannel(new TextComponentTranslation("disconnect.loginFailedInfo", new Object[] {new TextComponentTranslation("disconnect.loginFailedInfo.serversUnavailable", new Object[0])})); + return; + } + catch (InvalidCredentialsException var8) + { + this.networkManager.closeChannel(new TextComponentTranslation("disconnect.loginFailedInfo", new Object[] {new TextComponentTranslation("disconnect.loginFailedInfo.invalidSession", new Object[0])})); + return; + } + catch (AuthenticationException authenticationexception) + { + this.networkManager.closeChannel(new TextComponentTranslation("disconnect.loginFailedInfo", new Object[] {authenticationexception.getMessage()})); + return; + } + } + + this.networkManager.sendPacket(new CPacketEncryptionResponse(secretkey, publickey, packetIn.getVerifyToken()), new GenericFutureListener < Future > () + { + public void operationComplete(Future p_operationComplete_1_) throws Exception + { + NetHandlerLoginClient.this.networkManager.enableEncryption(secretkey); + } + }); + } + + private MinecraftSessionService getSessionService() + { + return this.mc.getSessionService(); + } + + public void handleLoginSuccess(SPacketLoginSuccess packetIn) + { + this.gameProfile = packetIn.getProfile(); + this.networkManager.setConnectionState(EnumConnectionState.PLAY); + NetHandlerPlayClient nhpc = new NetHandlerPlayClient(this.mc, this.previousGuiScreen, this.networkManager, this.gameProfile); + this.networkManager.setNetHandler(nhpc); + net.minecraftforge.fml.client.FMLClientHandler.instance().setPlayClient(nhpc); + net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlClientHandshake(this.networkManager); + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + if (this.previousGuiScreen != null && this.previousGuiScreen instanceof GuiScreenRealmsProxy) + { + this.mc.displayGuiScreen((new DisconnectedRealmsScreen(((GuiScreenRealmsProxy)this.previousGuiScreen).getProxy(), "connect.failed", reason)).getProxy()); + } + else + { + this.mc.displayGuiScreen(new GuiDisconnected(this.previousGuiScreen, "connect.failed", reason)); + } + } + + public void handleDisconnect(SPacketDisconnect packetIn) + { + this.networkManager.closeChannel(packetIn.getReason()); + } + + public void handleEnableCompression(SPacketEnableCompression packetIn) + { + if (!this.networkManager.isLocalChannel()) + { + this.networkManager.setCompressionThreshold(packetIn.getCompressionThreshold()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerPlayClient.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerPlayClient.java new file mode 100644 index 0000000..245eda5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetHandlerPlayClient.java @@ -0,0 +1,2359 @@ +package net.minecraft.client.network; + +import com.google.common.collect.Maps; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.mojang.authlib.GameProfile; +import io.netty.buffer.Unpooled; +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; +import java.util.Map.Entry; +import java.util.function.Consumer; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.block.Block; +import net.minecraft.client.ClientBrandRetriever; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.GuardianSound; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.entity.EntityOtherPlayerMP; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiCommandBlock; +import net.minecraft.client.gui.GuiDisconnected; +import net.minecraft.client.gui.GuiDownloadTerrain; +import net.minecraft.client.gui.GuiGameOver; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.gui.GuiMerchant; +import net.minecraft.client.gui.GuiMultiplayer; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiScreenBook; +import net.minecraft.client.gui.GuiScreenDemo; +import net.minecraft.client.gui.GuiScreenRealmsProxy; +import net.minecraft.client.gui.GuiWinGame; +import net.minecraft.client.gui.GuiYesNo; +import net.minecraft.client.gui.GuiYesNoCallback; +import net.minecraft.client.gui.IProgressMeter; +import net.minecraft.client.gui.MapItemRenderer; +import net.minecraft.client.gui.inventory.GuiContainerCreative; +import net.minecraft.client.gui.recipebook.GuiRecipeBook; +import net.minecraft.client.gui.recipebook.IRecipeShownListener; +import net.minecraft.client.gui.toasts.RecipeToast; +import net.minecraft.client.multiplayer.ClientAdvancementManager; +import net.minecraft.client.multiplayer.PlayerControllerMP; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.multiplayer.ServerList; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.ParticleItemPickup; +import net.minecraft.client.player.inventory.ContainerLocalMenu; +import net.minecraft.client.player.inventory.LocalBlockIntercommunication; +import net.minecraft.client.renderer.debug.DebugRendererNeighborsUpdate; +import net.minecraft.client.renderer.debug.DebugRendererPathfinding; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.client.util.RecipeBookClient; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.EntityLeashKnot; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EntityTracker; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.NpcMerchant; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.ai.attributes.RangedAttribute; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.entity.projectile.EntityLargeFireball; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerHorseChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.PacketThreadUtil; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.network.play.client.CPacketClientStatus; +import net.minecraft.network.play.client.CPacketConfirmTeleport; +import net.minecraft.network.play.client.CPacketConfirmTransaction; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.network.play.client.CPacketKeepAlive; +import net.minecraft.network.play.client.CPacketPlayer; +import net.minecraft.network.play.client.CPacketResourcePackStatus; +import net.minecraft.network.play.client.CPacketVehicleMove; +import net.minecraft.network.play.server.SPacketAdvancementInfo; +import net.minecraft.network.play.server.SPacketAnimation; +import net.minecraft.network.play.server.SPacketBlockAction; +import net.minecraft.network.play.server.SPacketBlockBreakAnim; +import net.minecraft.network.play.server.SPacketBlockChange; +import net.minecraft.network.play.server.SPacketCamera; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.network.play.server.SPacketChat; +import net.minecraft.network.play.server.SPacketChunkData; +import net.minecraft.network.play.server.SPacketCloseWindow; +import net.minecraft.network.play.server.SPacketCollectItem; +import net.minecraft.network.play.server.SPacketCombatEvent; +import net.minecraft.network.play.server.SPacketConfirmTransaction; +import net.minecraft.network.play.server.SPacketCooldown; +import net.minecraft.network.play.server.SPacketCustomPayload; +import net.minecraft.network.play.server.SPacketCustomSound; +import net.minecraft.network.play.server.SPacketDestroyEntities; +import net.minecraft.network.play.server.SPacketDisconnect; +import net.minecraft.network.play.server.SPacketDisplayObjective; +import net.minecraft.network.play.server.SPacketEffect; +import net.minecraft.network.play.server.SPacketEntity; +import net.minecraft.network.play.server.SPacketEntityAttach; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketEntityEquipment; +import net.minecraft.network.play.server.SPacketEntityHeadLook; +import net.minecraft.network.play.server.SPacketEntityMetadata; +import net.minecraft.network.play.server.SPacketEntityProperties; +import net.minecraft.network.play.server.SPacketEntityStatus; +import net.minecraft.network.play.server.SPacketEntityTeleport; +import net.minecraft.network.play.server.SPacketEntityVelocity; +import net.minecraft.network.play.server.SPacketExplosion; +import net.minecraft.network.play.server.SPacketHeldItemChange; +import net.minecraft.network.play.server.SPacketJoinGame; +import net.minecraft.network.play.server.SPacketKeepAlive; +import net.minecraft.network.play.server.SPacketMaps; +import net.minecraft.network.play.server.SPacketMoveVehicle; +import net.minecraft.network.play.server.SPacketMultiBlockChange; +import net.minecraft.network.play.server.SPacketOpenWindow; +import net.minecraft.network.play.server.SPacketParticles; +import net.minecraft.network.play.server.SPacketPlaceGhostRecipe; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketPlayerListHeaderFooter; +import net.minecraft.network.play.server.SPacketPlayerListItem; +import net.minecraft.network.play.server.SPacketPlayerPosLook; +import net.minecraft.network.play.server.SPacketRecipeBook; +import net.minecraft.network.play.server.SPacketRemoveEntityEffect; +import net.minecraft.network.play.server.SPacketResourcePackSend; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketScoreboardObjective; +import net.minecraft.network.play.server.SPacketSelectAdvancementsTab; +import net.minecraft.network.play.server.SPacketServerDifficulty; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.network.play.server.SPacketSetPassengers; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.network.play.server.SPacketSignEditorOpen; +import net.minecraft.network.play.server.SPacketSoundEffect; +import net.minecraft.network.play.server.SPacketSpawnExperienceOrb; +import net.minecraft.network.play.server.SPacketSpawnGlobalEntity; +import net.minecraft.network.play.server.SPacketSpawnMob; +import net.minecraft.network.play.server.SPacketSpawnObject; +import net.minecraft.network.play.server.SPacketSpawnPainting; +import net.minecraft.network.play.server.SPacketSpawnPlayer; +import net.minecraft.network.play.server.SPacketSpawnPosition; +import net.minecraft.network.play.server.SPacketStatistics; +import net.minecraft.network.play.server.SPacketTabComplete; +import net.minecraft.network.play.server.SPacketTeams; +import net.minecraft.network.play.server.SPacketTimeUpdate; +import net.minecraft.network.play.server.SPacketTitle; +import net.minecraft.network.play.server.SPacketUnloadChunk; +import net.minecraft.network.play.server.SPacketUpdateBossInfo; +import net.minecraft.network.play.server.SPacketUpdateHealth; +import net.minecraft.network.play.server.SPacketUpdateScore; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.network.play.server.SPacketUseBed; +import net.minecraft.network.play.server.SPacketWindowItems; +import net.minecraft.network.play.server.SPacketWindowProperty; +import net.minecraft.network.play.server.SPacketWorldBorder; +import net.minecraft.pathfinding.Path; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.realms.DisconnectedRealmsScreen; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.Team; +import net.minecraft.stats.RecipeBook; +import net.minecraft.stats.StatBase; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.tileentity.TileEntityBeacon; +import net.minecraft.tileentity.TileEntityBed; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.tileentity.TileEntityEndGateway; +import net.minecraft.tileentity.TileEntityFlowerPot; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ITabCompleter; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.world.Explosion; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class NetHandlerPlayClient implements INetHandlerPlayClient +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** + * The NetworkManager instance used to communicate with the server, used to respond to various packets (primarilly + * movement and plugin channel related ones) and check the status of the network connection externally + */ + private final NetworkManager netManager; + private final GameProfile profile; + /** + * Seems to be either null (integrated server) or an instance of either GuiMultiplayer (when connecting to a server) + * or GuiScreenReamlsTOS (when connecting to MCO server) + */ + private final GuiScreen guiScreenServer; + /** Reference to the Minecraft instance, which many handler methods operate on */ + private Minecraft gameController; + /** Reference to the current ClientWorld instance, which many handler methods operate on */ + private WorldClient clientWorldController; + /** + * True if the client has finished downloading terrain and may spawn. Set upon receipt of S08PacketPlayerPosLook, + * reset upon respawning + */ + private boolean doneLoadingTerrain; + /** A mapping from player names to their respective GuiPlayerInfo (specifies the clients response time to the server) */ + private final Map playerInfoMap = Maps.newHashMap(); + public int currentServerMaxPlayers = 20; + private boolean hasStatistics; + private final ClientAdvancementManager advancementManager; + /** + * Just an ordinary random number generator, used to randomize audio pitch of item/orb pickup and randomize both + * particlespawn offset and velocity + */ + private final Random avRandomizer = new Random(); + + public NetHandlerPlayClient(Minecraft mcIn, GuiScreen p_i46300_2_, NetworkManager networkManagerIn, GameProfile profileIn) + { + this.gameController = mcIn; + this.guiScreenServer = p_i46300_2_; + this.netManager = networkManagerIn; + this.profile = profileIn; + this.advancementManager = new ClientAdvancementManager(mcIn); + } + + /** + * Clears the WorldClient instance associated with this NetHandlerPlayClient + */ + public void cleanup() + { + this.clientWorldController = null; + } + + /** + * Registers some server properties (gametype,hardcore-mode,terraintype,difficulty,player limit), creates a new + * WorldClient and sets the player initial dimension + */ + public void handleJoinGame(SPacketJoinGame packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.playerController = new PlayerControllerMP(this.gameController, this); + this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.getGameType(), false, packetIn.isHardcoreMode(), packetIn.getWorldType()), net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.get(getNetworkManager()).getOverrideDimension(packetIn), packetIn.getDifficulty(), this.gameController.mcProfiler); + this.gameController.gameSettings.difficulty = packetIn.getDifficulty(); + this.gameController.loadWorld(this.clientWorldController); + this.gameController.player.dimension = packetIn.getDimension(); + this.gameController.displayGuiScreen(new GuiDownloadTerrain()); + this.gameController.player.setEntityId(packetIn.getPlayerId()); + this.currentServerMaxPlayers = packetIn.getMaxPlayers(); + this.gameController.player.setReducedDebug(packetIn.isReducedDebugInfo()); + this.gameController.playerController.setGameType(packetIn.getGameType()); + this.gameController.gameSettings.sendSettingsToServer(); + this.netManager.sendPacket(new CPacketCustomPayload("MC|Brand", (new PacketBuffer(Unpooled.buffer())).writeString(ClientBrandRetriever.getClientModName()))); + } + + /** + * Spawns an instance of the objecttype indicated by the packet and sets its position and momentum + */ + public void handleSpawnObject(SPacketSpawnObject packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + Entity entity = null; + + if (packetIn.getType() == 10) + { + entity = EntityMinecart.create(this.clientWorldController, d0, d1, d2, EntityMinecart.Type.getById(packetIn.getData())); + } + else if (packetIn.getType() == 90) + { + Entity entity1 = this.clientWorldController.getEntityByID(packetIn.getData()); + + if (entity1 instanceof EntityPlayer) + { + entity = new EntityFishHook(this.clientWorldController, (EntityPlayer)entity1, d0, d1, d2); + } + + packetIn.setData(0); + } + else if (packetIn.getType() == 60) + { + entity = new EntityTippedArrow(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 91) + { + entity = new EntitySpectralArrow(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 61) + { + entity = new EntitySnowball(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 68) + { + entity = new EntityLlamaSpit(this.clientWorldController, d0, d1, d2, (double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + } + else if (packetIn.getType() == 71) + { + entity = new EntityItemFrame(this.clientWorldController, new BlockPos(d0, d1, d2), EnumFacing.getHorizontal(packetIn.getData())); + packetIn.setData(0); + } + else if (packetIn.getType() == 77) + { + entity = new EntityLeashKnot(this.clientWorldController, new BlockPos(MathHelper.floor(d0), MathHelper.floor(d1), MathHelper.floor(d2))); + packetIn.setData(0); + } + else if (packetIn.getType() == 65) + { + entity = new EntityEnderPearl(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 72) + { + entity = new EntityEnderEye(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 76) + { + entity = new EntityFireworkRocket(this.clientWorldController, d0, d1, d2, ItemStack.EMPTY); + } + else if (packetIn.getType() == 63) + { + entity = new EntityLargeFireball(this.clientWorldController, d0, d1, d2, (double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + packetIn.setData(0); + } + else if (packetIn.getType() == 93) + { + entity = new EntityDragonFireball(this.clientWorldController, d0, d1, d2, (double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + packetIn.setData(0); + } + else if (packetIn.getType() == 64) + { + entity = new EntitySmallFireball(this.clientWorldController, d0, d1, d2, (double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + packetIn.setData(0); + } + else if (packetIn.getType() == 66) + { + entity = new EntityWitherSkull(this.clientWorldController, d0, d1, d2, (double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + packetIn.setData(0); + } + else if (packetIn.getType() == 67) + { + entity = new EntityShulkerBullet(this.clientWorldController, d0, d1, d2, (double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + packetIn.setData(0); + } + else if (packetIn.getType() == 62) + { + entity = new EntityEgg(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 79) + { + entity = new EntityEvokerFangs(this.clientWorldController, d0, d1, d2, 0.0F, 0, (EntityLivingBase)null); + } + else if (packetIn.getType() == 73) + { + entity = new EntityPotion(this.clientWorldController, d0, d1, d2, ItemStack.EMPTY); + packetIn.setData(0); + } + else if (packetIn.getType() == 75) + { + entity = new EntityExpBottle(this.clientWorldController, d0, d1, d2); + packetIn.setData(0); + } + else if (packetIn.getType() == 1) + { + entity = new EntityBoat(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 50) + { + entity = new EntityTNTPrimed(this.clientWorldController, d0, d1, d2, (EntityLivingBase)null); + } + else if (packetIn.getType() == 78) + { + entity = new EntityArmorStand(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 51) + { + entity = new EntityEnderCrystal(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 2) + { + entity = new EntityItem(this.clientWorldController, d0, d1, d2); + } + else if (packetIn.getType() == 70) + { + entity = new EntityFallingBlock(this.clientWorldController, d0, d1, d2, Block.getStateById(packetIn.getData() & 65535)); + packetIn.setData(0); + } + else if (packetIn.getType() == 3) + { + entity = new EntityAreaEffectCloud(this.clientWorldController, d0, d1, d2); + } + + if (entity != null) + { + EntityTracker.updateServerPosition(entity, d0, d1, d2); + entity.rotationPitch = (float)(packetIn.getPitch() * 360) / 256.0F; + entity.rotationYaw = (float)(packetIn.getYaw() * 360) / 256.0F; + Entity[] aentity = entity.getParts(); + + if (aentity != null) + { + int i = packetIn.getEntityID() - entity.getEntityId(); + + for (Entity entity2 : aentity) + { + entity2.setEntityId(entity2.getEntityId() + i); + } + } + + entity.setEntityId(packetIn.getEntityID()); + entity.setUniqueId(packetIn.getUniqueId()); + this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), entity); + + if (packetIn.getData() > 0) + { + if (packetIn.getType() == 60 || packetIn.getType() == 91) + { + Entity entity3 = this.clientWorldController.getEntityByID(packetIn.getData() - 1); + + if (entity3 instanceof EntityLivingBase && entity instanceof EntityArrow) + { + ((EntityArrow)entity).shootingEntity = entity3; + } + } + + entity.setVelocity((double)packetIn.getSpeedX() / 8000.0D, (double)packetIn.getSpeedY() / 8000.0D, (double)packetIn.getSpeedZ() / 8000.0D); + } + } + } + + /** + * Spawns an experience orb and sets its value (amount of XP) + */ + public void handleSpawnExperienceOrb(SPacketSpawnExperienceOrb packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + Entity entity = new EntityXPOrb(this.clientWorldController, d0, d1, d2, packetIn.getXPValue()); + EntityTracker.updateServerPosition(entity, d0, d1, d2); + entity.rotationYaw = 0.0F; + entity.rotationPitch = 0.0F; + entity.setEntityId(packetIn.getEntityID()); + this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), entity); + } + + /** + * Handles globally visible entities. Used in vanilla for lightning bolts + */ + public void handleSpawnGlobalEntity(SPacketSpawnGlobalEntity packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + Entity entity = null; + + if (packetIn.getType() == 1) + { + entity = new EntityLightningBolt(this.clientWorldController, d0, d1, d2, false); + } + + if (entity != null) + { + EntityTracker.updateServerPosition(entity, d0, d1, d2); + entity.rotationYaw = 0.0F; + entity.rotationPitch = 0.0F; + entity.setEntityId(packetIn.getEntityId()); + this.clientWorldController.addWeatherEffect(entity); + } + } + + /** + * Handles the spawning of a painting object + */ + public void handleSpawnPainting(SPacketSpawnPainting packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPainting entitypainting = new EntityPainting(this.clientWorldController, packetIn.getPosition(), packetIn.getFacing(), packetIn.getTitle()); + entitypainting.setUniqueId(packetIn.getUniqueId()); + this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), entitypainting); + } + + /** + * Sets the velocity of the specified entity to the specified value + */ + public void handleEntityVelocity(SPacketEntityVelocity packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityID()); + + if (entity != null) + { + entity.setVelocity((double)packetIn.getMotionX() / 8000.0D, (double)packetIn.getMotionY() / 8000.0D, (double)packetIn.getMotionZ() / 8000.0D); + } + } + + /** + * Invoked when the server registers new proximate objects in your watchlist or when objects in your watchlist have + * changed -> Registers any changes locally + */ + public void handleEntityMetadata(SPacketEntityMetadata packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + + if (entity != null && packetIn.getDataManagerEntries() != null) + { + entity.getDataManager().setEntryValues(packetIn.getDataManagerEntries()); + } + } + + /** + * Handles the creation of a nearby player entity, sets the position and held item + */ + public void handleSpawnPlayer(SPacketSpawnPlayer packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + float f = (float)(packetIn.getYaw() * 360) / 256.0F; + float f1 = (float)(packetIn.getPitch() * 360) / 256.0F; + EntityOtherPlayerMP entityotherplayermp = new EntityOtherPlayerMP(this.gameController.world, this.getPlayerInfo(packetIn.getUniqueId()).getGameProfile()); + entityotherplayermp.prevPosX = d0; + entityotherplayermp.lastTickPosX = d0; + entityotherplayermp.prevPosY = d1; + entityotherplayermp.lastTickPosY = d1; + entityotherplayermp.prevPosZ = d2; + entityotherplayermp.lastTickPosZ = d2; + EntityTracker.updateServerPosition(entityotherplayermp, d0, d1, d2); + entityotherplayermp.setPositionAndRotation(d0, d1, d2, f, f1); + this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), entityotherplayermp); + List < EntityDataManager.DataEntry> list = packetIn.getDataManagerEntries(); + + if (list != null) + { + entityotherplayermp.getDataManager().setEntryValues(list); + } + } + + /** + * Updates an entity's position and rotation as specified by the packet + */ + public void handleEntityTeleport(SPacketEntityTeleport packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + + if (entity != null) + { + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + EntityTracker.updateServerPosition(entity, d0, d1, d2); + + if (!entity.canPassengerSteer()) + { + float f = (float)(packetIn.getYaw() * 360) / 256.0F; + float f1 = (float)(packetIn.getPitch() * 360) / 256.0F; + + if (Math.abs(entity.posX - d0) < 0.03125D && Math.abs(entity.posY - d1) < 0.015625D && Math.abs(entity.posZ - d2) < 0.03125D) + { + entity.setPositionAndRotationDirect(entity.posX, entity.posY, entity.posZ, f, f1, 0, true); + } + else + { + entity.setPositionAndRotationDirect(d0, d1, d2, f, f1, 3, true); + } + + entity.onGround = packetIn.getOnGround(); + } + } + } + + /** + * Updates which hotbar slot of the player is currently selected + */ + public void handleHeldItemChange(SPacketHeldItemChange packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (InventoryPlayer.isHotbar(packetIn.getHeldItemHotbarIndex())) + { + this.gameController.player.inventory.currentItem = packetIn.getHeldItemHotbarIndex(); + } + } + + /** + * Updates the specified entity's position by the specified relative moment and absolute rotation. Note that + * subclassing of the packet allows for the specification of a subset of this data (e.g. only rel. position, abs. + * rotation or both). + */ + public void handleEntityMovement(SPacketEntity packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = packetIn.getEntity(this.clientWorldController); + + if (entity != null) + { + entity.serverPosX += (long)packetIn.getX(); + entity.serverPosY += (long)packetIn.getY(); + entity.serverPosZ += (long)packetIn.getZ(); + double d0 = (double)entity.serverPosX / 4096.0D; + double d1 = (double)entity.serverPosY / 4096.0D; + double d2 = (double)entity.serverPosZ / 4096.0D; + + if (!entity.canPassengerSteer()) + { + float f = packetIn.isRotating() ? (float)(packetIn.getYaw() * 360) / 256.0F : entity.rotationYaw; + float f1 = packetIn.isRotating() ? (float)(packetIn.getPitch() * 360) / 256.0F : entity.rotationPitch; + entity.setPositionAndRotationDirect(d0, d1, d2, f, f1, 3, false); + entity.onGround = packetIn.getOnGround(); + } + } + } + + /** + * Updates the direction in which the specified entity is looking, normally this head rotation is independent of the + * rotation of the entity itself + */ + public void handleEntityHeadLook(SPacketEntityHeadLook packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = packetIn.getEntity(this.clientWorldController); + + if (entity != null) + { + float f = (float)(packetIn.getYaw() * 360) / 256.0F; + entity.setRotationYawHead(f); + } + } + + /** + * Locally eliminates the entities. Invoked by the server when the items are in fact destroyed, or the player is no + * longer registered as required to monitor them. The latter happens when distance between the player and item + * increases beyond a certain treshold (typically the viewing distance) + */ + public void handleDestroyEntities(SPacketDestroyEntities packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + for (int i = 0; i < packetIn.getEntityIDs().length; ++i) + { + this.clientWorldController.removeEntityFromWorld(packetIn.getEntityIDs()[i]); + } + } + + public void handlePlayerPosLook(SPacketPlayerPosLook packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayer entityplayer = this.gameController.player; + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + float f = packetIn.getYaw(); + float f1 = packetIn.getPitch(); + + if (packetIn.getFlags().contains(SPacketPlayerPosLook.EnumFlags.X)) + { + d0 += entityplayer.posX; + } + else + { + entityplayer.motionX = 0.0D; + } + + if (packetIn.getFlags().contains(SPacketPlayerPosLook.EnumFlags.Y)) + { + d1 += entityplayer.posY; + } + else + { + entityplayer.motionY = 0.0D; + } + + if (packetIn.getFlags().contains(SPacketPlayerPosLook.EnumFlags.Z)) + { + d2 += entityplayer.posZ; + } + else + { + entityplayer.motionZ = 0.0D; + } + + if (packetIn.getFlags().contains(SPacketPlayerPosLook.EnumFlags.X_ROT)) + { + f1 += entityplayer.rotationPitch; + } + + if (packetIn.getFlags().contains(SPacketPlayerPosLook.EnumFlags.Y_ROT)) + { + f += entityplayer.rotationYaw; + } + + entityplayer.setPositionAndRotation(d0, d1, d2, f, f1); + this.netManager.sendPacket(new CPacketConfirmTeleport(packetIn.getTeleportId())); + this.netManager.sendPacket(new CPacketPlayer.PositionRotation(entityplayer.posX, entityplayer.getEntityBoundingBox().minY, entityplayer.posZ, entityplayer.rotationYaw, entityplayer.rotationPitch, false)); + + if (!this.doneLoadingTerrain) + { + this.gameController.player.prevPosX = this.gameController.player.posX; + this.gameController.player.prevPosY = this.gameController.player.posY; + this.gameController.player.prevPosZ = this.gameController.player.posZ; + this.doneLoadingTerrain = true; + this.gameController.displayGuiScreen((GuiScreen)null); + } + } + + /** + * Received from the servers PlayerManager if between 1 and 64 blocks in a chunk are changed. If only one block + * requires an update, the server sends S23PacketBlockChange and if 64 or more blocks are changed, the server sends + * S21PacketChunkData + */ + public void handleMultiBlockChange(SPacketMultiBlockChange packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + for (SPacketMultiBlockChange.BlockUpdateData spacketmultiblockchange$blockupdatedata : packetIn.getChangedBlocks()) + { + this.clientWorldController.invalidateRegionAndSetBlock(spacketmultiblockchange$blockupdatedata.getPos(), spacketmultiblockchange$blockupdatedata.getBlockState()); + } + } + + /** + * Updates the specified chunk with the supplied data, marks it for re-rendering and lighting recalculation + */ + public void handleChunkData(SPacketChunkData packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (packetIn.isFullChunk()) + { + this.clientWorldController.doPreChunk(packetIn.getChunkX(), packetIn.getChunkZ(), true); + } + + this.clientWorldController.invalidateBlockReceiveRegion(packetIn.getChunkX() << 4, 0, packetIn.getChunkZ() << 4, (packetIn.getChunkX() << 4) + 15, 256, (packetIn.getChunkZ() << 4) + 15); + Chunk chunk = this.clientWorldController.getChunkFromChunkCoords(packetIn.getChunkX(), packetIn.getChunkZ()); + chunk.read(packetIn.getReadBuffer(), packetIn.getExtractedSize(), packetIn.isFullChunk()); + this.clientWorldController.markBlockRangeForRenderUpdate(packetIn.getChunkX() << 4, 0, packetIn.getChunkZ() << 4, (packetIn.getChunkX() << 4) + 15, 256, (packetIn.getChunkZ() << 4) + 15); + + if (!packetIn.isFullChunk() || this.clientWorldController.provider.shouldClientCheckLighting()) + { + chunk.resetRelightChecks(); + } + + for (NBTTagCompound nbttagcompound : packetIn.getTileEntityTags()) + { + BlockPos blockpos = new BlockPos(nbttagcompound.getInteger("x"), nbttagcompound.getInteger("y"), nbttagcompound.getInteger("z")); + TileEntity tileentity = this.clientWorldController.getTileEntity(blockpos); + + if (tileentity != null) + { + tileentity.handleUpdateTag(nbttagcompound); + } + } + } + + public void processChunkUnload(SPacketUnloadChunk packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.clientWorldController.doPreChunk(packetIn.getX(), packetIn.getZ(), false); + } + + /** + * Updates the block and metadata and generates a blockupdate (and notify the clients) + */ + public void handleBlockChange(SPacketBlockChange packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.clientWorldController.invalidateRegionAndSetBlock(packetIn.getBlockPosition(), packetIn.getBlockState()); + } + + /** + * Closes the network channel + */ + public void handleDisconnect(SPacketDisconnect packetIn) + { + this.netManager.closeChannel(packetIn.getReason()); + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + this.gameController.loadWorld((WorldClient)null); + + if (this.guiScreenServer != null) + { + if (this.guiScreenServer instanceof GuiScreenRealmsProxy) + { + this.gameController.displayGuiScreen((new DisconnectedRealmsScreen(((GuiScreenRealmsProxy)this.guiScreenServer).getProxy(), "disconnect.lost", reason)).getProxy()); + } + else + { + this.gameController.displayGuiScreen(new GuiDisconnected(this.guiScreenServer, "disconnect.lost", reason)); + } + } + else + { + this.gameController.displayGuiScreen(new GuiDisconnected(new GuiMultiplayer(new GuiMainMenu()), "disconnect.lost", reason)); + } + } + + public void sendPacket(Packet packetIn) + { + this.netManager.sendPacket(packetIn); + } + + public void handleCollectItem(SPacketCollectItem packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getCollectedItemEntityID()); + EntityLivingBase entitylivingbase = (EntityLivingBase)this.clientWorldController.getEntityByID(packetIn.getEntityID()); + + if (entitylivingbase == null) + { + entitylivingbase = this.gameController.player; + } + + if (entity != null) + { + if (entity instanceof EntityXPOrb) + { + this.clientWorldController.playSound(entity.posX, entity.posY, entity.posZ, SoundEvents.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.PLAYERS, 0.1F, (this.avRandomizer.nextFloat() - this.avRandomizer.nextFloat()) * 0.35F + 0.9F, false); + } + else + { + this.clientWorldController.playSound(entity.posX, entity.posY, entity.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, (this.avRandomizer.nextFloat() - this.avRandomizer.nextFloat()) * 1.4F + 2.0F, false); + } + + if (entity instanceof EntityItem) + { + ((EntityItem)entity).getItem().setCount(packetIn.getAmount()); + } + + this.gameController.effectRenderer.addEffect(new ParticleItemPickup(this.clientWorldController, entity, entitylivingbase, 0.5F)); + this.clientWorldController.removeEntityFromWorld(packetIn.getCollectedItemEntityID()); + } + } + + /** + * Prints a chatmessage in the chat GUI + */ + public void handleChat(SPacketChat packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + net.minecraft.util.text.ITextComponent message = net.minecraftforge.event.ForgeEventFactory.onClientChat(packetIn.getType(), packetIn.getChatComponent()); + if (message == null) return; + this.gameController.ingameGUI.addChatMessage(packetIn.getType(), message); + } + + /** + * Renders a specified animation: Waking up a player, a living entity swinging its currently held item, being hurt + * or receiving a critical hit by normal or magical means + */ + public void handleAnimation(SPacketAnimation packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityID()); + + if (entity != null) + { + if (packetIn.getAnimationType() == 0) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)entity; + entitylivingbase.swingArm(EnumHand.MAIN_HAND); + } + else if (packetIn.getAnimationType() == 3) + { + EntityLivingBase entitylivingbase1 = (EntityLivingBase)entity; + entitylivingbase1.swingArm(EnumHand.OFF_HAND); + } + else if (packetIn.getAnimationType() == 1) + { + entity.performHurtAnimation(); + } + else if (packetIn.getAnimationType() == 2) + { + EntityPlayer entityplayer = (EntityPlayer)entity; + entityplayer.wakeUpPlayer(false, false, false); + } + else if (packetIn.getAnimationType() == 4) + { + this.gameController.effectRenderer.emitParticleAtEntity(entity, EnumParticleTypes.CRIT); + } + else if (packetIn.getAnimationType() == 5) + { + this.gameController.effectRenderer.emitParticleAtEntity(entity, EnumParticleTypes.CRIT_MAGIC); + } + } + } + + /** + * Retrieves the player identified by the packet, puts him to sleep if possible (and flags whether all players are + * asleep) + */ + public void handleUseBed(SPacketUseBed packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + packetIn.getPlayer(this.clientWorldController).trySleep(packetIn.getBedPosition()); + } + + /** + * Spawns the mob entity at the specified location, with the specified rotation, momentum and type. Updates the + * entities Datawatchers with the entity metadata specified in the packet + */ + public void handleSpawnMob(SPacketSpawnMob packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + double d0 = packetIn.getX(); + double d1 = packetIn.getY(); + double d2 = packetIn.getZ(); + float f = (float)(packetIn.getYaw() * 360) / 256.0F; + float f1 = (float)(packetIn.getPitch() * 360) / 256.0F; + EntityLivingBase entitylivingbase = (EntityLivingBase)EntityList.createEntityByID(packetIn.getEntityType(), this.gameController.world); + + if (entitylivingbase != null) + { + EntityTracker.updateServerPosition(entitylivingbase, d0, d1, d2); + entitylivingbase.renderYawOffset = (float)(packetIn.getHeadPitch() * 360) / 256.0F; + entitylivingbase.rotationYawHead = (float)(packetIn.getHeadPitch() * 360) / 256.0F; + Entity[] aentity = entitylivingbase.getParts(); + + if (aentity != null) + { + int i = packetIn.getEntityID() - entitylivingbase.getEntityId(); + + for (Entity entity : aentity) + { + entity.setEntityId(entity.getEntityId() + i); + } + } + + entitylivingbase.setEntityId(packetIn.getEntityID()); + entitylivingbase.setUniqueId(packetIn.getUniqueId()); + entitylivingbase.setPositionAndRotation(d0, d1, d2, f, f1); + entitylivingbase.motionX = (double)((float)packetIn.getVelocityX() / 8000.0F); + entitylivingbase.motionY = (double)((float)packetIn.getVelocityY() / 8000.0F); + entitylivingbase.motionZ = (double)((float)packetIn.getVelocityZ() / 8000.0F); + this.clientWorldController.addEntityToWorld(packetIn.getEntityID(), entitylivingbase); + List < EntityDataManager.DataEntry> list = packetIn.getDataManagerEntries(); + + if (list != null) + { + entitylivingbase.getDataManager().setEntryValues(list); + } + } + else + { + LOGGER.warn("Skipping Entity with id {}", (int)packetIn.getEntityType()); + } + } + + public void handleTimeUpdate(SPacketTimeUpdate packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.world.setTotalWorldTime(packetIn.getTotalWorldTime()); + this.gameController.world.setWorldTime(packetIn.getWorldTime()); + } + + public void handleSpawnPosition(SPacketSpawnPosition packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.player.setSpawnPoint(packetIn.getSpawnPos(), true); + this.gameController.world.getWorldInfo().setSpawn(packetIn.getSpawnPos()); + } + + public void handleSetPassengers(SPacketSetPassengers packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + + if (entity == null) + { + LOGGER.warn("Received passengers for unknown entity"); + } + else + { + boolean flag = entity.isRidingOrBeingRiddenBy(this.gameController.player); + entity.removePassengers(); + + for (int i : packetIn.getPassengerIds()) + { + Entity entity1 = this.clientWorldController.getEntityByID(i); + + if (entity1 != null) + { + entity1.startRiding(entity, true); + + if (entity1 == this.gameController.player && !flag) + { + this.gameController.ingameGUI.setOverlayMessage(I18n.format("mount.onboard", this.gameController.gameSettings.keyBindSneak.getDisplayName()), false); + } + } + } + } + } + + public void handleEntityAttach(SPacketEntityAttach packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + Entity entity1 = this.clientWorldController.getEntityByID(packetIn.getVehicleEntityId()); + + if (entity instanceof EntityLiving) + { + if (entity1 != null) + { + ((EntityLiving)entity).setLeashHolder(entity1, false); + } + else + { + ((EntityLiving)entity).clearLeashed(false, false); + } + } + } + + /** + * Invokes the entities' handleUpdateHealth method which is implemented in LivingBase (hurt/death), + * MinecartMobSpawner (spawn delay), FireworkRocket & MinecartTNT (explosion), IronGolem (throwing,...), Witch + * (spawn particles), Zombie (villager transformation), Animal (breeding mode particles), Horse (breeding/smoke + * particles), Sheep (...), Tameable (...), Villager (particles for breeding mode, angry and happy), Wolf (...) + */ + public void handleEntityStatus(SPacketEntityStatus packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = packetIn.getEntity(this.clientWorldController); + + if (entity != null) + { + if (packetIn.getOpCode() == 21) + { + this.gameController.getSoundHandler().playSound(new GuardianSound((EntityGuardian)entity)); + } + else if (packetIn.getOpCode() == 35) + { + int i = 40; + this.gameController.effectRenderer.emitParticleAtEntity(entity, EnumParticleTypes.TOTEM, 30); + this.clientWorldController.playSound(entity.posX, entity.posY, entity.posZ, SoundEvents.ITEM_TOTEM_USE, entity.getSoundCategory(), 1.0F, 1.0F, false); + + if (entity == this.gameController.player) + { + this.gameController.entityRenderer.displayItemActivation(new ItemStack(Items.TOTEM_OF_UNDYING)); + } + } + else + { + entity.handleStatusUpdate(packetIn.getOpCode()); + } + } + } + + public void handleUpdateHealth(SPacketUpdateHealth packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.player.setPlayerSPHealth(packetIn.getHealth()); + this.gameController.player.getFoodStats().setFoodLevel(packetIn.getFoodLevel()); + this.gameController.player.getFoodStats().setFoodSaturationLevel(packetIn.getSaturationLevel()); + } + + public void handleSetExperience(SPacketSetExperience packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.player.setXPStats(packetIn.getExperienceBar(), packetIn.getTotalExperience(), packetIn.getLevel()); + } + + public void handleRespawn(SPacketRespawn packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (packetIn.getDimensionID() != this.gameController.player.dimension) + { + this.doneLoadingTerrain = false; + Scoreboard scoreboard = this.clientWorldController.getScoreboard(); + this.clientWorldController = new WorldClient(this, new WorldSettings(0L, packetIn.getGameType(), false, this.gameController.world.getWorldInfo().isHardcoreModeEnabled(), packetIn.getWorldType()), packetIn.getDimensionID(), packetIn.getDifficulty(), this.gameController.mcProfiler); + this.clientWorldController.setWorldScoreboard(scoreboard); + this.gameController.loadWorld(this.clientWorldController); + this.gameController.player.dimension = packetIn.getDimensionID(); + this.gameController.displayGuiScreen(new GuiDownloadTerrain()); + } + + this.gameController.setDimensionAndSpawnPlayer(packetIn.getDimensionID()); + this.gameController.playerController.setGameType(packetIn.getGameType()); + } + + /** + * Initiates a new explosion (sound, particles, drop spawn) for the affected blocks indicated by the packet. + */ + public void handleExplosion(SPacketExplosion packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Explosion explosion = new Explosion(this.gameController.world, (Entity)null, packetIn.getX(), packetIn.getY(), packetIn.getZ(), packetIn.getStrength(), packetIn.getAffectedBlockPositions()); + explosion.doExplosionB(true); + this.gameController.player.motionX += (double)packetIn.getMotionX(); + this.gameController.player.motionY += (double)packetIn.getMotionY(); + this.gameController.player.motionZ += (double)packetIn.getMotionZ(); + } + + /** + * Displays a GUI by ID. In order starting from id 0: Chest, Workbench, Furnace, Dispenser, Enchanting table, + * Brewing stand, Villager merchant, Beacon, Anvil, Hopper, Dropper, Horse + */ + public void handleOpenWindow(SPacketOpenWindow packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayerSP entityplayersp = this.gameController.player; + + if ("minecraft:container".equals(packetIn.getGuiId())) + { + entityplayersp.displayGUIChest(new InventoryBasic(packetIn.getWindowTitle(), packetIn.getSlotCount())); + entityplayersp.openContainer.windowId = packetIn.getWindowId(); + } + else if ("minecraft:villager".equals(packetIn.getGuiId())) + { + entityplayersp.displayVillagerTradeGui(new NpcMerchant(entityplayersp, packetIn.getWindowTitle())); + entityplayersp.openContainer.windowId = packetIn.getWindowId(); + } + else if ("EntityHorse".equals(packetIn.getGuiId())) + { + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + + if (entity instanceof AbstractHorse) + { + entityplayersp.openGuiHorseInventory((AbstractHorse)entity, new ContainerHorseChest(packetIn.getWindowTitle(), packetIn.getSlotCount())); + entityplayersp.openContainer.windowId = packetIn.getWindowId(); + } + } + else if (!packetIn.hasSlots()) + { + entityplayersp.displayGui(new LocalBlockIntercommunication(packetIn.getGuiId(), packetIn.getWindowTitle())); + entityplayersp.openContainer.windowId = packetIn.getWindowId(); + } + else + { + IInventory iinventory = new ContainerLocalMenu(packetIn.getGuiId(), packetIn.getWindowTitle(), packetIn.getSlotCount()); + entityplayersp.displayGUIChest(iinventory); + entityplayersp.openContainer.windowId = packetIn.getWindowId(); + } + } + + /** + * Handles pickin up an ItemStack or dropping one in your inventory or an open (non-creative) container + */ + public void handleSetSlot(SPacketSetSlot packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayer entityplayer = this.gameController.player; + ItemStack itemstack = packetIn.getStack(); + int i = packetIn.getSlot(); + this.gameController.getTutorial().handleSetSlot(itemstack); + + if (packetIn.getWindowId() == -1) + { + entityplayer.inventory.setItemStack(itemstack); + } + else if (packetIn.getWindowId() == -2) + { + entityplayer.inventory.setInventorySlotContents(i, itemstack); + } + else + { + boolean flag = false; + + if (this.gameController.currentScreen instanceof GuiContainerCreative) + { + GuiContainerCreative guicontainercreative = (GuiContainerCreative)this.gameController.currentScreen; + flag = guicontainercreative.getSelectedTabIndex() != CreativeTabs.INVENTORY.getTabIndex(); + } + + if (packetIn.getWindowId() == 0 && packetIn.getSlot() >= 36 && i < 45) + { + if (!itemstack.isEmpty()) + { + ItemStack itemstack1 = entityplayer.inventoryContainer.getSlot(i).getStack(); + + if (itemstack1.isEmpty() || itemstack1.getCount() < itemstack.getCount()) + { + itemstack.setAnimationsToGo(5); + } + } + + entityplayer.inventoryContainer.putStackInSlot(i, itemstack); + } + else if (packetIn.getWindowId() == entityplayer.openContainer.windowId && (packetIn.getWindowId() != 0 || !flag)) + { + entityplayer.openContainer.putStackInSlot(i, itemstack); + } + } + } + + /** + * Verifies that the server and client are synchronized with respect to the inventory/container opened by the player + * and confirms if it is the case. + */ + public void handleConfirmTransaction(SPacketConfirmTransaction packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Container container = null; + EntityPlayer entityplayer = this.gameController.player; + + if (packetIn.getWindowId() == 0) + { + container = entityplayer.inventoryContainer; + } + else if (packetIn.getWindowId() == entityplayer.openContainer.windowId) + { + container = entityplayer.openContainer; + } + + if (container != null && !packetIn.wasAccepted()) + { + this.sendPacket(new CPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); + } + } + + /** + * Handles the placement of a specified ItemStack in a specified container/inventory slot + */ + public void handleWindowItems(SPacketWindowItems packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayer entityplayer = this.gameController.player; + + if (packetIn.getWindowId() == 0) + { + entityplayer.inventoryContainer.setAll(packetIn.getItemStacks()); + } + else if (packetIn.getWindowId() == entityplayer.openContainer.windowId) + { + entityplayer.openContainer.setAll(packetIn.getItemStacks()); + } + } + + /** + * Creates a sign in the specified location if it didn't exist and opens the GUI to edit its text + */ + public void handleSignEditorOpen(SPacketSignEditorOpen packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + TileEntity tileentity = this.clientWorldController.getTileEntity(packetIn.getSignPosition()); + + if (!(tileentity instanceof TileEntitySign)) + { + tileentity = new TileEntitySign(); + tileentity.setWorld(this.clientWorldController); + tileentity.setPos(packetIn.getSignPosition()); + } + + this.gameController.player.openEditSign((TileEntitySign)tileentity); + } + + /** + * Updates the NBTTagCompound metadata of instances of the following entitytypes: Mob spawners, command blocks, + * beacons, skulls, flowerpot + */ + public void handleUpdateTileEntity(SPacketUpdateTileEntity packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (this.gameController.world.isBlockLoaded(packetIn.getPos())) + { + TileEntity tileentity = this.gameController.world.getTileEntity(packetIn.getPos()); + int i = packetIn.getTileEntityType(); + boolean flag = i == 2 && tileentity instanceof TileEntityCommandBlock; + + if (i == 1 && tileentity instanceof TileEntityMobSpawner || flag || i == 3 && tileentity instanceof TileEntityBeacon || i == 4 && tileentity instanceof TileEntitySkull || i == 5 && tileentity instanceof TileEntityFlowerPot || i == 6 && tileentity instanceof TileEntityBanner || i == 7 && tileentity instanceof TileEntityStructure || i == 8 && tileentity instanceof TileEntityEndGateway || i == 9 && tileentity instanceof TileEntitySign || i == 10 && tileentity instanceof TileEntityShulkerBox || i == 11 && tileentity instanceof TileEntityBed) + { + tileentity.readFromNBT(packetIn.getNbtCompound()); + } + else + { + if(tileentity == null) + { + LOGGER.error("Received invalid update packet for null tile entity at {} with data: {}", packetIn.getPos(), packetIn.getNbtCompound()); + return; + } + tileentity.onDataPacket(netManager, packetIn); + } + + if (flag && this.gameController.currentScreen instanceof GuiCommandBlock) + { + ((GuiCommandBlock)this.gameController.currentScreen).updateGui(); + } + } + } + + /** + * Sets the progressbar of the opened window to the specified value + */ + public void handleWindowProperty(SPacketWindowProperty packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayer entityplayer = this.gameController.player; + + if (entityplayer.openContainer != null && entityplayer.openContainer.windowId == packetIn.getWindowId()) + { + entityplayer.openContainer.updateProgressBar(packetIn.getProperty(), packetIn.getValue()); + } + } + + public void handleEntityEquipment(SPacketEntityEquipment packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityID()); + + if (entity != null) + { + entity.setItemStackToSlot(packetIn.getEquipmentSlot(), packetIn.getItemStack()); + } + } + + /** + * Resets the ItemStack held in hand and closes the window that is opened + */ + public void handleCloseWindow(SPacketCloseWindow packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.player.closeScreenAndDropStack(); + } + + /** + * Triggers Block.onBlockEventReceived, which is implemented in BlockPistonBase for extension/retraction, BlockNote + * for setting the instrument (including audiovisual feedback) and in BlockContainer to set the number of players + * accessing a (Ender)Chest + */ + public void handleBlockAction(SPacketBlockAction packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.world.addBlockEvent(packetIn.getBlockPosition(), packetIn.getBlockType(), packetIn.getData1(), packetIn.getData2()); + } + + /** + * Updates all registered IWorldAccess instances with destroyBlockInWorldPartially + */ + public void handleBlockBreakAnim(SPacketBlockBreakAnim packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.world.sendBlockBreakProgress(packetIn.getBreakerId(), packetIn.getPosition(), packetIn.getProgress()); + } + + public void handleChangeGameState(SPacketChangeGameState packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayer entityplayer = this.gameController.player; + int i = packetIn.getGameState(); + float f = packetIn.getValue(); + int j = MathHelper.floor(f + 0.5F); + + if (i >= 0 && i < SPacketChangeGameState.MESSAGE_NAMES.length && SPacketChangeGameState.MESSAGE_NAMES[i] != null) + { + entityplayer.sendStatusMessage(new TextComponentTranslation(SPacketChangeGameState.MESSAGE_NAMES[i], new Object[0]), false); + } + + if (i == 1) + { + this.clientWorldController.getWorldInfo().setRaining(true); + this.clientWorldController.setRainStrength(0.0F); + } + else if (i == 2) + { + this.clientWorldController.getWorldInfo().setRaining(false); + this.clientWorldController.setRainStrength(1.0F); + } + else if (i == 3) + { + this.gameController.playerController.setGameType(GameType.getByID(j)); + } + else if (i == 4) + { + if (j == 0) + { + this.gameController.player.connection.sendPacket(new CPacketClientStatus(CPacketClientStatus.State.PERFORM_RESPAWN)); + this.gameController.displayGuiScreen(new GuiDownloadTerrain()); + } + else if (j == 1) + { + this.gameController.displayGuiScreen(new GuiWinGame(true, () -> + { + this.gameController.player.connection.sendPacket(new CPacketClientStatus(CPacketClientStatus.State.PERFORM_RESPAWN)); + })); + } + } + else if (i == 5) + { + GameSettings gamesettings = this.gameController.gameSettings; + + if (f == 0.0F) + { + this.gameController.displayGuiScreen(new GuiScreenDemo()); + } + else if (f == 101.0F) + { + this.gameController.ingameGUI.getChatGUI().printChatMessage(new TextComponentTranslation("demo.help.movement", new Object[] {gamesettings.keyBindForward.getDisplayName(), gamesettings.keyBindLeft.getDisplayName(), gamesettings.keyBindBack.getDisplayName(), gamesettings.keyBindRight.getDisplayName()})); + } + else if (f == 102.0F) + { + this.gameController.ingameGUI.getChatGUI().printChatMessage(new TextComponentTranslation("demo.help.jump", new Object[] {gamesettings.keyBindJump.getDisplayName()})); + } + else if (f == 103.0F) + { + this.gameController.ingameGUI.getChatGUI().printChatMessage(new TextComponentTranslation("demo.help.inventory", new Object[] {gamesettings.keyBindInventory.getDisplayName()})); + } + } + else if (i == 6) + { + this.clientWorldController.playSound(entityplayer, entityplayer.posX, entityplayer.posY + (double)entityplayer.getEyeHeight(), entityplayer.posZ, SoundEvents.ENTITY_ARROW_HIT_PLAYER, SoundCategory.PLAYERS, 0.18F, 0.45F); + } + else if (i == 7) + { + this.clientWorldController.setRainStrength(f); + } + else if (i == 8) + { + this.clientWorldController.setThunderStrength(f); + } + else if (i == 10) + { + this.clientWorldController.spawnParticle(EnumParticleTypes.MOB_APPEARANCE, entityplayer.posX, entityplayer.posY, entityplayer.posZ, 0.0D, 0.0D, 0.0D, new int[0]); + this.clientWorldController.playSound(entityplayer, entityplayer.posX, entityplayer.posY, entityplayer.posZ, SoundEvents.ENTITY_ELDER_GUARDIAN_CURSE, SoundCategory.HOSTILE, 1.0F, 1.0F); + } + } + + /** + * Updates the worlds MapStorage with the specified MapData for the specified map-identifier and invokes a + * MapItemRenderer for it + */ + public void handleMaps(SPacketMaps packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + MapItemRenderer mapitemrenderer = this.gameController.entityRenderer.getMapItemRenderer(); + MapData mapdata = ItemMap.loadMapData(packetIn.getMapId(), this.gameController.world); + + if (mapdata == null) + { + String s = "map_" + packetIn.getMapId(); + mapdata = new MapData(s); + + if (mapitemrenderer.getMapInstanceIfExists(s) != null) + { + MapData mapdata1 = mapitemrenderer.getData(mapitemrenderer.getMapInstanceIfExists(s)); + + if (mapdata1 != null) + { + mapdata = mapdata1; + } + } + + this.gameController.world.setData(s, mapdata); + } + + packetIn.setMapdataTo(mapdata); + mapitemrenderer.updateMapTexture(mapdata); + } + + public void handleEffect(SPacketEffect packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (packetIn.isSoundServerwide()) + { + this.gameController.world.playBroadcastSound(packetIn.getSoundType(), packetIn.getSoundPos(), packetIn.getSoundData()); + } + else + { + this.gameController.world.playEvent(packetIn.getSoundType(), packetIn.getSoundPos(), packetIn.getSoundData()); + } + } + + public void handleAdvancementInfo(SPacketAdvancementInfo packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.advancementManager.read(packetIn); + } + + public void handleSelectAdvancementsTab(SPacketSelectAdvancementsTab packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + ResourceLocation resourcelocation = packetIn.getTab(); + + if (resourcelocation == null) + { + this.advancementManager.setSelectedTab((Advancement)null, false); + } + else + { + Advancement advancement = this.advancementManager.getAdvancementList().getAdvancement(resourcelocation); + this.advancementManager.setSelectedTab(advancement, false); + } + } + + /** + * Updates the players statistics or achievements + */ + public void handleStatistics(SPacketStatistics packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + for (Entry entry : packetIn.getStatisticMap().entrySet()) + { + StatBase statbase = entry.getKey(); + int k = ((Integer)entry.getValue()).intValue(); + this.gameController.player.getStatFileWriter().unlockAchievement(this.gameController.player, statbase, k); + } + + this.hasStatistics = true; + + if (this.gameController.currentScreen instanceof IProgressMeter) + { + ((IProgressMeter)this.gameController.currentScreen).onStatsUpdated(); + } + } + + public void handleRecipeBook(SPacketRecipeBook packetIn) + { + RecipeBook recipebook; + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + recipebook = this.gameController.player.getRecipeBook(); + recipebook.setGuiOpen(packetIn.isGuiOpen()); + recipebook.setFilteringCraftable(packetIn.isFilteringCraftable()); + SPacketRecipeBook.State spacketrecipebook$state = packetIn.getState(); + label21: + + switch (spacketrecipebook$state) + { + case REMOVE: + Iterator iterator = packetIn.getRecipes().iterator(); + + while (true) + { + if (!iterator.hasNext()) + { + break label21; + } + + IRecipe irecipe = (IRecipe)iterator.next(); + recipebook.lock(irecipe); + } + + case INIT: + packetIn.getRecipes().forEach(recipebook::unlock); + packetIn.getDisplayedRecipes().forEach(recipebook::markNew); + break; + case ADD: + packetIn.getRecipes().forEach((p_194025_2_) -> + { + recipebook.unlock(p_194025_2_); + recipebook.markNew(p_194025_2_); + RecipeToast.addOrUpdate(this.gameController.getToastGui(), p_194025_2_); + }); + } + + RecipeBookClient.ALL_RECIPES.forEach((p_194023_1_) -> + { + p_194023_1_.updateKnownRecipes(recipebook); + }); + + if (this.gameController.currentScreen instanceof IRecipeShownListener) + { + ((IRecipeShownListener)this.gameController.currentScreen).recipesUpdated(); + } + } + + public void handleEntityEffect(SPacketEntityEffect packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + + if (entity instanceof EntityLivingBase) + { + Potion potion = Potion.getPotionById(packetIn.getEffectId() & 0xFF); + + if (potion != null) + { + PotionEffect potioneffect = new PotionEffect(potion, packetIn.getDuration(), packetIn.getAmplifier(), packetIn.getIsAmbient(), packetIn.doesShowParticles()); + potioneffect.setPotionDurationMax(packetIn.isMaxDuration()); + ((EntityLivingBase)entity).addPotionEffect(potioneffect); + } + } + } + + public void handleCombatEvent(SPacketCombatEvent packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (packetIn.eventType == SPacketCombatEvent.Event.ENTITY_DIED) + { + Entity entity = this.clientWorldController.getEntityByID(packetIn.playerId); + + if (entity == this.gameController.player) + { + this.gameController.displayGuiScreen(new GuiGameOver(packetIn.deathMessage)); + } + } + } + + public void handleServerDifficulty(SPacketServerDifficulty packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.world.getWorldInfo().setDifficulty(packetIn.getDifficulty()); + this.gameController.world.getWorldInfo().setDifficultyLocked(packetIn.isDifficultyLocked()); + } + + public void handleCamera(SPacketCamera packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = packetIn.getEntity(this.clientWorldController); + + if (entity != null) + { + this.gameController.setRenderViewEntity(entity); + } + } + + public void handleWorldBorder(SPacketWorldBorder packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + packetIn.apply(this.clientWorldController.getWorldBorder()); + } + + @SuppressWarnings("incomplete-switch") + public void handleTitle(SPacketTitle packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + SPacketTitle.Type spackettitle$type = packetIn.getType(); + String s = null; + String s1 = null; + String s2 = packetIn.getMessage() != null ? packetIn.getMessage().getFormattedText() : ""; + + switch (spackettitle$type) + { + case TITLE: + s = s2; + break; + case SUBTITLE: + s1 = s2; + break; + case ACTIONBAR: + this.gameController.ingameGUI.setOverlayMessage(s2, false); + return; + case RESET: + this.gameController.ingameGUI.displayTitle("", "", -1, -1, -1); + this.gameController.ingameGUI.setDefaultTitlesTimes(); + return; + } + + this.gameController.ingameGUI.displayTitle(s, s1, packetIn.getFadeInTime(), packetIn.getDisplayTime(), packetIn.getFadeOutTime()); + } + + public void handlePlayerListHeaderFooter(SPacketPlayerListHeaderFooter packetIn) + { + this.gameController.ingameGUI.getTabList().setHeader(packetIn.getHeader().getFormattedText().isEmpty() ? null : packetIn.getHeader()); + this.gameController.ingameGUI.getTabList().setFooter(packetIn.getFooter().getFormattedText().isEmpty() ? null : packetIn.getFooter()); + } + + public void handleRemoveEntityEffect(SPacketRemoveEntityEffect packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = packetIn.getEntity(this.clientWorldController); + + if (entity instanceof EntityLivingBase) + { + ((EntityLivingBase)entity).removeActivePotionEffect(packetIn.getPotion()); + } + } + + @SuppressWarnings("incomplete-switch") + public void handlePlayerListItem(SPacketPlayerListItem packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + for (SPacketPlayerListItem.AddPlayerData spacketplayerlistitem$addplayerdata : packetIn.getEntries()) + { + if (packetIn.getAction() == SPacketPlayerListItem.Action.REMOVE_PLAYER) + { + this.playerInfoMap.remove(spacketplayerlistitem$addplayerdata.getProfile().getId()); + } + else + { + NetworkPlayerInfo networkplayerinfo = this.playerInfoMap.get(spacketplayerlistitem$addplayerdata.getProfile().getId()); + + if (packetIn.getAction() == SPacketPlayerListItem.Action.ADD_PLAYER) + { + networkplayerinfo = new NetworkPlayerInfo(spacketplayerlistitem$addplayerdata); + this.playerInfoMap.put(networkplayerinfo.getGameProfile().getId(), networkplayerinfo); + } + + if (networkplayerinfo != null) + { + switch (packetIn.getAction()) + { + case ADD_PLAYER: + networkplayerinfo.setGameType(spacketplayerlistitem$addplayerdata.getGameMode()); + networkplayerinfo.setResponseTime(spacketplayerlistitem$addplayerdata.getPing()); + break; + case UPDATE_GAME_MODE: + networkplayerinfo.setGameType(spacketplayerlistitem$addplayerdata.getGameMode()); + break; + case UPDATE_LATENCY: + networkplayerinfo.setResponseTime(spacketplayerlistitem$addplayerdata.getPing()); + break; + case UPDATE_DISPLAY_NAME: + networkplayerinfo.setDisplayName(spacketplayerlistitem$addplayerdata.getDisplayName()); + } + } + } + } + } + + public void handleKeepAlive(SPacketKeepAlive packetIn) + { + this.sendPacket(new CPacketKeepAlive(packetIn.getId())); + } + + public void handlePlayerAbilities(SPacketPlayerAbilities packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + EntityPlayer entityplayer1 = this.gameController.player; + entityplayer1.capabilities.isFlying = packetIn.isFlying(); + entityplayer1.capabilities.isCreativeMode = packetIn.isCreativeMode(); + entityplayer1.capabilities.disableDamage = packetIn.isInvulnerable(); + entityplayer1.capabilities.allowFlying = packetIn.isAllowFlying(); + entityplayer1.capabilities.setFlySpeed(packetIn.getFlySpeed()); + entityplayer1.capabilities.setPlayerWalkSpeed(packetIn.getWalkSpeed()); + } + + /** + * Displays the available command-completion options the server knows of + */ + public void handleTabComplete(SPacketTabComplete packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + String[] astring = packetIn.getMatches(); + Arrays.sort((Object[])astring); + + if (this.gameController.currentScreen instanceof ITabCompleter) + { + ((ITabCompleter)this.gameController.currentScreen).setCompletions(astring); + } + } + + public void handleSoundEffect(SPacketSoundEffect packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.world.playSound(this.gameController.player, packetIn.getX(), packetIn.getY(), packetIn.getZ(), packetIn.getSound(), packetIn.getCategory(), packetIn.getVolume(), packetIn.getPitch()); + } + + public void handleCustomSound(SPacketCustomSound packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.getSoundHandler().playSound(new PositionedSoundRecord(new ResourceLocation(packetIn.getSoundName()), packetIn.getCategory(), packetIn.getVolume(), packetIn.getPitch(), false, 0, ISound.AttenuationType.LINEAR, (float)packetIn.getX(), (float)packetIn.getY(), (float)packetIn.getZ())); + } + + public void handleResourcePack(SPacketResourcePackSend packetIn) + { + final String s = packetIn.getURL(); + final String s1 = packetIn.getHash(); + + if (this.validateResourcePackUrl(s)) + { + if (s.startsWith("level://")) + { + try + { + String s2 = URLDecoder.decode(s.substring("level://".length()), StandardCharsets.UTF_8.toString()); + File file1 = new File(this.gameController.mcDataDir, "saves"); + File file2 = new File(file1, s2); + + if (file2.isFile()) + { + this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.ACCEPTED)); + Futures.addCallback(this.gameController.getResourcePackRepository().setServerResourcePack(file2), this.createDownloadCallback()); + return; + } + } + catch (UnsupportedEncodingException var7) + { + ; + } + + this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.FAILED_DOWNLOAD)); + } + else + { + ServerData serverdata = this.gameController.getCurrentServerData(); + + if (serverdata != null && serverdata.getResourceMode() == ServerData.ServerResourceMode.ENABLED) + { + this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.ACCEPTED)); + Futures.addCallback(this.gameController.getResourcePackRepository().downloadResourcePack(s, s1), this.createDownloadCallback()); + } + else if (serverdata != null && serverdata.getResourceMode() != ServerData.ServerResourceMode.PROMPT) + { + this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.DECLINED)); + } + else + { + this.gameController.addScheduledTask(new Runnable() + { + public void run() + { + NetHandlerPlayClient.this.gameController.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() + { + public void confirmClicked(boolean result, int id) + { + NetHandlerPlayClient.this.gameController = Minecraft.getMinecraft(); + ServerData serverdata1 = NetHandlerPlayClient.this.gameController.getCurrentServerData(); + + if (result) + { + if (serverdata1 != null) + { + serverdata1.setResourceMode(ServerData.ServerResourceMode.ENABLED); + } + + NetHandlerPlayClient.this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.ACCEPTED)); + Futures.addCallback(NetHandlerPlayClient.this.gameController.getResourcePackRepository().downloadResourcePack(s, s1), NetHandlerPlayClient.this.createDownloadCallback()); + } + else + { + if (serverdata1 != null) + { + serverdata1.setResourceMode(ServerData.ServerResourceMode.DISABLED); + } + + NetHandlerPlayClient.this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.DECLINED)); + } + + ServerList.saveSingleServer(serverdata1); + NetHandlerPlayClient.this.gameController.displayGuiScreen((GuiScreen)null); + } + }, I18n.format("multiplayer.texturePrompt.line1"), I18n.format("multiplayer.texturePrompt.line2"), 0)); + } + }); + } + } + } + } + + private boolean validateResourcePackUrl(String url) + { + try + { + URI uri = new URI(url); + String s = uri.getScheme(); + boolean flag = "level".equals(s); + + if (!"http".equals(s) && !"https".equals(s) && !flag) + { + throw new URISyntaxException(url, "Wrong protocol"); + } + else if (!flag || !url.contains("..") && url.endsWith("/resources.zip")) + { + return true; + } + else + { + throw new URISyntaxException(url, "Invalid levelstorage resourcepack path"); + } + } + catch (URISyntaxException var5) + { + this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.FAILED_DOWNLOAD)); + return false; + } + } + + private FutureCallback createDownloadCallback() + { + return new FutureCallback() + { + public void onSuccess(@Nullable Object p_onSuccess_1_) + { + NetHandlerPlayClient.this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.SUCCESSFULLY_LOADED)); + } + public void onFailure(Throwable p_onFailure_1_) + { + NetHandlerPlayClient.this.netManager.sendPacket(new CPacketResourcePackStatus(CPacketResourcePackStatus.Action.FAILED_DOWNLOAD)); + } + }; + } + + public void handleUpdateBossInfo(SPacketUpdateBossInfo packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + this.gameController.ingameGUI.getBossOverlay().read(packetIn); + } + + public void handleCooldown(SPacketCooldown packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (packetIn.getTicks() == 0) + { + this.gameController.player.getCooldownTracker().removeCooldown(packetIn.getItem()); + } + else + { + this.gameController.player.getCooldownTracker().setCooldown(packetIn.getItem(), packetIn.getTicks()); + } + } + + public void handleMoveVehicle(SPacketMoveVehicle packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.gameController.player.getLowestRidingEntity(); + + if (entity != this.gameController.player && entity.canPassengerSteer()) + { + entity.setPositionAndRotation(packetIn.getX(), packetIn.getY(), packetIn.getZ(), packetIn.getYaw(), packetIn.getPitch()); + this.netManager.sendPacket(new CPacketVehicleMove(entity)); + } + } + + /** + * Handles packets that have room for a channel specification. Vanilla implemented channels are "MC|TrList" to + * acquire a MerchantRecipeList trades for a villager merchant, "MC|Brand" which sets the server brand? on the + * player instance and finally "MC|RPack" which the server uses to communicate the identifier of the default server + * resourcepack for the client to load. + */ + public void handleCustomPayload(SPacketCustomPayload packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if ("MC|TrList".equals(packetIn.getChannelName())) + { + PacketBuffer packetbuffer = packetIn.getBufferData(); + + try + { + int k = packetbuffer.readInt(); + GuiScreen guiscreen = this.gameController.currentScreen; + + if (guiscreen != null && guiscreen instanceof GuiMerchant && k == this.gameController.player.openContainer.windowId) + { + IMerchant imerchant = ((GuiMerchant)guiscreen).getMerchant(); + MerchantRecipeList merchantrecipelist = MerchantRecipeList.readFromBuf(packetbuffer); + imerchant.setRecipes(merchantrecipelist); + } + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't load trade info", (Throwable)ioexception); + } + finally + { + if (false) // Forge: let packet handle releasing buffer + packetbuffer.release(); + } + } + else if ("MC|Brand".equals(packetIn.getChannelName())) + { + this.gameController.player.setServerBrand(packetIn.getBufferData().readString(32767)); + } + else if ("MC|BOpen".equals(packetIn.getChannelName())) + { + EnumHand enumhand = (EnumHand)packetIn.getBufferData().readEnumValue(EnumHand.class); + ItemStack itemstack = enumhand == EnumHand.OFF_HAND ? this.gameController.player.getHeldItemOffhand() : this.gameController.player.getHeldItemMainhand(); + + if (itemstack.getItem() == Items.WRITTEN_BOOK) + { + this.gameController.displayGuiScreen(new GuiScreenBook(this.gameController.player, itemstack, false)); + } + } + else if ("MC|DebugPath".equals(packetIn.getChannelName())) + { + PacketBuffer packetbuffer1 = packetIn.getBufferData(); + int l = packetbuffer1.readInt(); + float f1 = packetbuffer1.readFloat(); + Path path = Path.read(packetbuffer1); + ((DebugRendererPathfinding)this.gameController.debugRenderer.pathfinding).addPath(l, path, f1); + } + else if ("MC|DebugNeighborsUpdate".equals(packetIn.getChannelName())) + { + PacketBuffer packetbuffer2 = packetIn.getBufferData(); + long i1 = packetbuffer2.readVarLong(); + BlockPos blockpos = packetbuffer2.readBlockPos(); + ((DebugRendererNeighborsUpdate)this.gameController.debugRenderer.neighborsUpdate).addUpdate(i1, blockpos); + } + else if ("MC|StopSound".equals(packetIn.getChannelName())) + { + PacketBuffer packetbuffer3 = packetIn.getBufferData(); + String s = packetbuffer3.readString(32767); + String s1 = packetbuffer3.readString(256); + this.gameController.getSoundHandler().stop(s1, SoundCategory.getByName(s)); + } + } + + /** + * May create a scoreboard objective, remove an objective from the scoreboard or update an objectives' displayname + */ + public void handleScoreboardObjective(SPacketScoreboardObjective packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Scoreboard scoreboard = this.clientWorldController.getScoreboard(); + + if (packetIn.getAction() == 0) + { + ScoreObjective scoreobjective = scoreboard.addScoreObjective(packetIn.getObjectiveName(), IScoreCriteria.DUMMY); + scoreobjective.setDisplayName(packetIn.getObjectiveValue()); + scoreobjective.setRenderType(packetIn.getRenderType()); + } + else + { + ScoreObjective scoreobjective1 = scoreboard.getObjective(packetIn.getObjectiveName()); + + if (packetIn.getAction() == 1) + { + scoreboard.removeObjective(scoreobjective1); + } + else if (packetIn.getAction() == 2) + { + scoreobjective1.setDisplayName(packetIn.getObjectiveValue()); + scoreobjective1.setRenderType(packetIn.getRenderType()); + } + } + } + + /** + * Either updates the score with a specified value or removes the score for an objective + */ + public void handleUpdateScore(SPacketUpdateScore packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Scoreboard scoreboard = this.clientWorldController.getScoreboard(); + ScoreObjective scoreobjective = scoreboard.getObjective(packetIn.getObjectiveName()); + + if (packetIn.getScoreAction() == SPacketUpdateScore.Action.CHANGE) + { + Score score = scoreboard.getOrCreateScore(packetIn.getPlayerName(), scoreobjective); + score.setScorePoints(packetIn.getScoreValue()); + } + else if (packetIn.getScoreAction() == SPacketUpdateScore.Action.REMOVE) + { + if (StringUtils.isNullOrEmpty(packetIn.getObjectiveName())) + { + scoreboard.removeObjectiveFromEntity(packetIn.getPlayerName(), (ScoreObjective)null); + } + else if (scoreobjective != null) + { + scoreboard.removeObjectiveFromEntity(packetIn.getPlayerName(), scoreobjective); + } + } + } + + /** + * Removes or sets the ScoreObjective to be displayed at a particular scoreboard position (list, sidebar, below + * name) + */ + public void handleDisplayObjective(SPacketDisplayObjective packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Scoreboard scoreboard = this.clientWorldController.getScoreboard(); + + if (packetIn.getName().isEmpty()) + { + scoreboard.setObjectiveInDisplaySlot(packetIn.getPosition(), (ScoreObjective)null); + } + else + { + ScoreObjective scoreobjective = scoreboard.getObjective(packetIn.getName()); + scoreboard.setObjectiveInDisplaySlot(packetIn.getPosition(), scoreobjective); + } + } + + /** + * Updates a team managed by the scoreboard: Create/Remove the team registration, Register/Remove the player-team- + * memberships, Set team displayname/prefix/suffix and/or whether friendly fire is enabled + */ + public void handleTeams(SPacketTeams packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Scoreboard scoreboard = this.clientWorldController.getScoreboard(); + ScorePlayerTeam scoreplayerteam; + + if (packetIn.getAction() == 0) + { + scoreplayerteam = scoreboard.createTeam(packetIn.getName()); + } + else + { + scoreplayerteam = scoreboard.getTeam(packetIn.getName()); + } + + if (packetIn.getAction() == 0 || packetIn.getAction() == 2) + { + scoreplayerteam.setDisplayName(packetIn.getDisplayName()); + scoreplayerteam.setPrefix(packetIn.getPrefix()); + scoreplayerteam.setSuffix(packetIn.getSuffix()); + scoreplayerteam.setColor(TextFormatting.fromColorIndex(packetIn.getColor())); + scoreplayerteam.setFriendlyFlags(packetIn.getFriendlyFlags()); + Team.EnumVisible team$enumvisible = Team.EnumVisible.getByName(packetIn.getNameTagVisibility()); + + if (team$enumvisible != null) + { + scoreplayerteam.setNameTagVisibility(team$enumvisible); + } + + Team.CollisionRule team$collisionrule = Team.CollisionRule.getByName(packetIn.getCollisionRule()); + + if (team$collisionrule != null) + { + scoreplayerteam.setCollisionRule(team$collisionrule); + } + } + + if (packetIn.getAction() == 0 || packetIn.getAction() == 3) + { + for (String s : packetIn.getPlayers()) + { + scoreboard.addPlayerToTeam(s, packetIn.getName()); + } + } + + if (packetIn.getAction() == 4) + { + for (String s1 : packetIn.getPlayers()) + { + scoreboard.removePlayerFromTeam(s1, scoreplayerteam); + } + } + + if (packetIn.getAction() == 1) + { + scoreboard.removeTeam(scoreplayerteam); + } + } + + /** + * Spawns a specified number of particles at the specified location with a randomized displacement according to + * specified bounds + */ + public void handleParticles(SPacketParticles packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + + if (packetIn.getParticleCount() == 0) + { + double d0 = (double)(packetIn.getParticleSpeed() * packetIn.getXOffset()); + double d2 = (double)(packetIn.getParticleSpeed() * packetIn.getYOffset()); + double d4 = (double)(packetIn.getParticleSpeed() * packetIn.getZOffset()); + + try + { + this.clientWorldController.spawnParticle(packetIn.getParticleType(), packetIn.isLongDistance(), packetIn.getXCoordinate(), packetIn.getYCoordinate(), packetIn.getZCoordinate(), d0, d2, d4, packetIn.getParticleArgs()); + } + catch (Throwable var17) + { + LOGGER.warn("Could not spawn particle effect {}", (Object)packetIn.getParticleType()); + } + } + else + { + for (int k = 0; k < packetIn.getParticleCount(); ++k) + { + double d1 = this.avRandomizer.nextGaussian() * (double)packetIn.getXOffset(); + double d3 = this.avRandomizer.nextGaussian() * (double)packetIn.getYOffset(); + double d5 = this.avRandomizer.nextGaussian() * (double)packetIn.getZOffset(); + double d6 = this.avRandomizer.nextGaussian() * (double)packetIn.getParticleSpeed(); + double d7 = this.avRandomizer.nextGaussian() * (double)packetIn.getParticleSpeed(); + double d8 = this.avRandomizer.nextGaussian() * (double)packetIn.getParticleSpeed(); + + try + { + this.clientWorldController.spawnParticle(packetIn.getParticleType(), packetIn.isLongDistance(), packetIn.getXCoordinate() + d1, packetIn.getYCoordinate() + d3, packetIn.getZCoordinate() + d5, d6, d7, d8, packetIn.getParticleArgs()); + } + catch (Throwable var16) + { + LOGGER.warn("Could not spawn particle effect {}", (Object)packetIn.getParticleType()); + return; + } + } + } + } + + /** + * Updates en entity's attributes and their respective modifiers, which are used for speed bonusses (player + * sprinting, animals fleeing, baby speed), weapon/tool attackDamage, hostiles followRange randomization, zombie + * maxHealth and knockback resistance as well as reinforcement spawning chance. + */ + public void handleEntityProperties(SPacketEntityProperties packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController); + Entity entity = this.clientWorldController.getEntityByID(packetIn.getEntityId()); + + if (entity != null) + { + if (!(entity instanceof EntityLivingBase)) + { + throw new IllegalStateException("Server tried to update attributes of a non-living entity (actually: " + entity + ")"); + } + else + { + AbstractAttributeMap abstractattributemap = ((EntityLivingBase)entity).getAttributeMap(); + + for (SPacketEntityProperties.Snapshot spacketentityproperties$snapshot : packetIn.getSnapshots()) + { + IAttributeInstance iattributeinstance = abstractattributemap.getAttributeInstanceByName(spacketentityproperties$snapshot.getName()); + + if (iattributeinstance == null) + { + iattributeinstance = abstractattributemap.registerAttribute(new RangedAttribute((IAttribute)null, spacketentityproperties$snapshot.getName(), 0.0D, 2.2250738585072014E-308D, Double.MAX_VALUE)); + } + + iattributeinstance.setBaseValue(spacketentityproperties$snapshot.getBaseValue()); + iattributeinstance.removeAllModifiers(); + + for (AttributeModifier attributemodifier : spacketentityproperties$snapshot.getModifiers()) + { + iattributeinstance.applyModifier(attributemodifier); + } + } + } + } + } + + public void func_194307_a(SPacketPlaceGhostRecipe p_194307_1_) + { + PacketThreadUtil.checkThreadAndEnqueue(p_194307_1_, this, this.gameController); + Container container = this.gameController.player.openContainer; + + if (container.windowId == p_194307_1_.func_194313_b() && container.getCanCraft(this.gameController.player)) + { + if (this.gameController.currentScreen instanceof IRecipeShownListener) + { + GuiRecipeBook guirecipebook = ((IRecipeShownListener)this.gameController.currentScreen).func_194310_f(); + guirecipebook.setupGhostRecipe(p_194307_1_.func_194311_a(), container.inventorySlots); + } + } + } + + /** + * Returns this the NetworkManager instance registered with this NetworkHandlerPlayClient + */ + public NetworkManager getNetworkManager() + { + return this.netManager; + } + + public Collection getPlayerInfoMap() + { + return this.playerInfoMap.values(); + } + + public NetworkPlayerInfo getPlayerInfo(UUID uniqueId) + { + return this.playerInfoMap.get(uniqueId); + } + + /** + * Gets the client's description information about another player on the server. + */ + @Nullable + public NetworkPlayerInfo getPlayerInfo(String name) + { + for (NetworkPlayerInfo networkplayerinfo : this.playerInfoMap.values()) + { + if (networkplayerinfo.getGameProfile().getName().equals(name)) + { + return networkplayerinfo; + } + } + + return null; + } + + public GameProfile getGameProfile() + { + return this.profile; + } + + public ClientAdvancementManager getAdvancementManager() + { + return this.advancementManager; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/NetworkPlayerInfo.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetworkPlayerInfo.java new file mode 100644 index 0000000..96bbccf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/NetworkPlayerInfo.java @@ -0,0 +1,215 @@ +package net.minecraft.client.network; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.Maps; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.network.play.server.SPacketPlayerListItem; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class NetworkPlayerInfo +{ + /** The GameProfile for the player represented by this NetworkPlayerInfo instance */ + private final GameProfile gameProfile; + Map playerTextures = Maps.newEnumMap(Type.class); + private GameType gameType; + /** Player response time to server in milliseconds */ + private int responseTime; + private boolean playerTexturesLoaded; + private String skinType; + /** When this is non-null, it is displayed instead of the player's real name */ + private ITextComponent displayName; + private int lastHealth; + private int displayHealth; + private long lastHealthTime; + private long healthBlinkTime; + private long renderVisibilityId; + + public NetworkPlayerInfo(GameProfile profile) + { + this.gameProfile = profile; + } + + public NetworkPlayerInfo(SPacketPlayerListItem.AddPlayerData entry) + { + this.gameProfile = entry.getProfile(); + this.gameType = entry.getGameMode(); + this.responseTime = entry.getPing(); + this.displayName = entry.getDisplayName(); + } + + /** + * Returns the GameProfile for the player represented by this NetworkPlayerInfo instance + */ + public GameProfile getGameProfile() + { + return this.gameProfile; + } + + public GameType getGameType() + { + return this.gameType; + } + + protected void setGameType(GameType gameMode) + { + this.gameType = gameMode; + } + + public int getResponseTime() + { + return this.responseTime; + } + + protected void setResponseTime(int latency) + { + this.responseTime = latency; + } + + public boolean hasLocationSkin() + { + return this.getLocationSkin() != null; + } + + public String getSkinType() + { + return this.skinType == null ? DefaultPlayerSkin.getSkinType(this.gameProfile.getId()) : this.skinType; + } + + public ResourceLocation getLocationSkin() + { + this.loadPlayerTextures(); + return (ResourceLocation)MoreObjects.firstNonNull(this.playerTextures.get(Type.SKIN), DefaultPlayerSkin.getDefaultSkin(this.gameProfile.getId())); + } + + @Nullable + public ResourceLocation getLocationCape() + { + this.loadPlayerTextures(); + return this.playerTextures.get(Type.CAPE); + } + + /** + * Gets the special Elytra texture for the player. + */ + @Nullable + public ResourceLocation getLocationElytra() + { + this.loadPlayerTextures(); + return this.playerTextures.get(Type.ELYTRA); + } + + @Nullable + public ScorePlayerTeam getPlayerTeam() + { + return Minecraft.getMinecraft().world.getScoreboard().getPlayersTeam(this.getGameProfile().getName()); + } + + protected void loadPlayerTextures() + { + synchronized (this) + { + if (!this.playerTexturesLoaded) + { + this.playerTexturesLoaded = true; + Minecraft.getMinecraft().getSkinManager().loadProfileTextures(this.gameProfile, new SkinManager.SkinAvailableCallback() + { + public void skinAvailable(Type typeIn, ResourceLocation location, MinecraftProfileTexture profileTexture) + { + switch (typeIn) + { + case SKIN: + NetworkPlayerInfo.this.playerTextures.put(Type.SKIN, location); + NetworkPlayerInfo.this.skinType = profileTexture.getMetadata("model"); + + if (NetworkPlayerInfo.this.skinType == null) + { + NetworkPlayerInfo.this.skinType = "default"; + } + + break; + case CAPE: + NetworkPlayerInfo.this.playerTextures.put(Type.CAPE, location); + break; + case ELYTRA: + NetworkPlayerInfo.this.playerTextures.put(Type.ELYTRA, location); + } + } + }, true); + } + } + } + + public void setDisplayName(@Nullable ITextComponent displayNameIn) + { + this.displayName = displayNameIn; + } + + @Nullable + public ITextComponent getDisplayName() + { + return this.displayName; + } + + public int getLastHealth() + { + return this.lastHealth; + } + + public void setLastHealth(int p_178836_1_) + { + this.lastHealth = p_178836_1_; + } + + public int getDisplayHealth() + { + return this.displayHealth; + } + + public void setDisplayHealth(int p_178857_1_) + { + this.displayHealth = p_178857_1_; + } + + public long getLastHealthTime() + { + return this.lastHealthTime; + } + + public void setLastHealthTime(long p_178846_1_) + { + this.lastHealthTime = p_178846_1_; + } + + public long getHealthBlinkTime() + { + return this.healthBlinkTime; + } + + public void setHealthBlinkTime(long p_178844_1_) + { + this.healthBlinkTime = p_178844_1_; + } + + public long getRenderVisibilityId() + { + return this.renderVisibilityId; + } + + public void setRenderVisibilityId(long p_178843_1_) + { + this.renderVisibilityId = p_178843_1_; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/ServerPinger.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/ServerPinger.java new file mode 100644 index 0000000..cbdc8f7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/ServerPinger.java @@ -0,0 +1,322 @@ +package net.minecraft.client.network; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.channel.socket.nio.NioSocketChannel; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ServerAddress; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.resources.I18n; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.ServerStatusResponse; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.status.INetHandlerStatusClient; +import net.minecraft.network.status.client.CPacketPing; +import net.minecraft.network.status.client.CPacketServerQuery; +import net.minecraft.network.status.server.SPacketPong; +import net.minecraft.network.status.server.SPacketServerInfo; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ServerPinger +{ + private static final Splitter PING_RESPONSE_SPLITTER = Splitter.on('\u0000').limit(6); + private static final Logger LOGGER = LogManager.getLogger(); + /** A list of NetworkManagers that have pending pings */ + private final List pingDestinations = Collections.synchronizedList(Lists.newArrayList()); + + public void ping(final ServerData server) throws UnknownHostException + { + ServerAddress serveraddress = ServerAddress.fromString(server.serverIP); + final NetworkManager networkmanager = NetworkManager.createNetworkManagerAndConnect(InetAddress.getByName(serveraddress.getIP()), serveraddress.getPort(), false); + this.pingDestinations.add(networkmanager); + server.serverMOTD = I18n.format("multiplayer.status.pinging"); + server.pingToServer = -1L; + server.playerList = null; + networkmanager.setNetHandler(new INetHandlerStatusClient() + { + private boolean successful; + private boolean receivedStatus; + private long pingSentAt; + public void handleServerInfo(SPacketServerInfo packetIn) + { + if (this.receivedStatus) + { + networkmanager.closeChannel(new TextComponentTranslation("multiplayer.status.unrequested", new Object[0])); + } + else + { + this.receivedStatus = true; + ServerStatusResponse serverstatusresponse = packetIn.getResponse(); + + if (serverstatusresponse.getServerDescription() != null) + { + server.serverMOTD = serverstatusresponse.getServerDescription().getFormattedText(); + } + else + { + server.serverMOTD = ""; + } + + if (serverstatusresponse.getVersion() != null) + { + server.gameVersion = serverstatusresponse.getVersion().getName(); + server.version = serverstatusresponse.getVersion().getProtocol(); + } + else + { + server.gameVersion = I18n.format("multiplayer.status.old"); + server.version = 0; + } + + if (serverstatusresponse.getPlayers() != null) + { + server.populationInfo = TextFormatting.GRAY + "" + serverstatusresponse.getPlayers().getOnlinePlayerCount() + "" + TextFormatting.DARK_GRAY + "/" + TextFormatting.GRAY + serverstatusresponse.getPlayers().getMaxPlayers(); + + if (ArrayUtils.isNotEmpty(serverstatusresponse.getPlayers().getPlayers())) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (GameProfile gameprofile : serverstatusresponse.getPlayers().getPlayers()) + { + if (stringbuilder.length() > 0) + { + stringbuilder.append("\n"); + } + + stringbuilder.append(gameprofile.getName()); + } + + if (serverstatusresponse.getPlayers().getPlayers().length < serverstatusresponse.getPlayers().getOnlinePlayerCount()) + { + if (stringbuilder.length() > 0) + { + stringbuilder.append("\n"); + } + + stringbuilder.append(I18n.format("multiplayer.status.and_more", serverstatusresponse.getPlayers().getOnlinePlayerCount() - serverstatusresponse.getPlayers().getPlayers().length)); + } + + server.playerList = stringbuilder.toString(); + } + } + else + { + server.populationInfo = TextFormatting.DARK_GRAY + I18n.format("multiplayer.status.unknown"); + } + + if (serverstatusresponse.getFavicon() != null) + { + String s = serverstatusresponse.getFavicon(); + + if (s.startsWith("data:image/png;base64,")) + { + server.setBase64EncodedIconData(s.substring("data:image/png;base64,".length())); + } + else + { + ServerPinger.LOGGER.error("Invalid server icon (unknown format)"); + } + } + else + { + server.setBase64EncodedIconData((String)null); + } + + net.minecraftforge.fml.client.FMLClientHandler.instance().bindServerListData(server, serverstatusresponse); + this.pingSentAt = Minecraft.getSystemTime(); + networkmanager.sendPacket(new CPacketPing(this.pingSentAt)); + this.successful = true; + } + } + public void handlePong(SPacketPong packetIn) + { + long i = this.pingSentAt; + long j = Minecraft.getSystemTime(); + server.pingToServer = j - i; + networkmanager.closeChannel(new TextComponentString("Finished")); + } + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + if (!this.successful) + { + ServerPinger.LOGGER.error("Can't ping {}: {}", server.serverIP, reason.getUnformattedText()); + server.serverMOTD = TextFormatting.DARK_RED + I18n.format("multiplayer.status.cannot_connect"); + server.populationInfo = ""; + ServerPinger.this.tryCompatibilityPing(server); + } + } + }); + + try + { + networkmanager.sendPacket(new C00Handshake(serveraddress.getIP(), serveraddress.getPort(), EnumConnectionState.STATUS, true)); + networkmanager.sendPacket(new CPacketServerQuery()); + } + catch (Throwable throwable) + { + LOGGER.error(throwable); + } + } + + private void tryCompatibilityPing(final ServerData server) + { + final ServerAddress serveraddress = ServerAddress.fromString(server.serverIP); + ((Bootstrap)((Bootstrap)((Bootstrap)(new Bootstrap()).group(NetworkManager.CLIENT_NIO_EVENTLOOP.getValue())).handler(new ChannelInitializer() + { + protected void initChannel(Channel p_initChannel_1_) throws Exception + { + try + { + p_initChannel_1_.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(true)); + } + catch (ChannelException var3) + { + ; + } + + p_initChannel_1_.pipeline().addLast(new SimpleChannelInboundHandler() + { + public void channelActive(ChannelHandlerContext p_channelActive_1_) throws Exception + { + super.channelActive(p_channelActive_1_); + ByteBuf bytebuf = Unpooled.buffer(); + + try + { + bytebuf.writeByte(254); + bytebuf.writeByte(1); + bytebuf.writeByte(250); + char[] achar = "MC|PingHost".toCharArray(); + bytebuf.writeShort(achar.length); + + for (char c0 : achar) + { + bytebuf.writeChar(c0); + } + + bytebuf.writeShort(7 + 2 * serveraddress.getIP().length()); + bytebuf.writeByte(127); + achar = serveraddress.getIP().toCharArray(); + bytebuf.writeShort(achar.length); + + for (char c1 : achar) + { + bytebuf.writeChar(c1); + } + + bytebuf.writeInt(serveraddress.getPort()); + p_channelActive_1_.channel().writeAndFlush(bytebuf).addListener(ChannelFutureListener.CLOSE_ON_FAILURE); + } + finally + { + bytebuf.release(); + } + } + protected void channelRead0(ChannelHandlerContext p_channelRead0_1_, ByteBuf p_channelRead0_2_) throws Exception + { + short short1 = p_channelRead0_2_.readUnsignedByte(); + + if (short1 == 255) + { + String s = new String(p_channelRead0_2_.readBytes(p_channelRead0_2_.readShort() * 2).array(), StandardCharsets.UTF_16BE); + String[] astring = (String[])Iterables.toArray(ServerPinger.PING_RESPONSE_SPLITTER.split(s), String.class); + + if ("\u00a71".equals(astring[0])) + { + int i = MathHelper.getInt(astring[1], 0); + String s1 = astring[2]; + String s2 = astring[3]; + int j = MathHelper.getInt(astring[4], -1); + int k = MathHelper.getInt(astring[5], -1); + server.version = -1; + server.gameVersion = s1; + server.serverMOTD = s2; + server.populationInfo = TextFormatting.GRAY + "" + j + "" + TextFormatting.DARK_GRAY + "/" + TextFormatting.GRAY + k; + } + } + + p_channelRead0_1_.close(); + } + public void exceptionCaught(ChannelHandlerContext p_exceptionCaught_1_, Throwable p_exceptionCaught_2_) throws Exception + { + p_exceptionCaught_1_.close(); + } + }); + } + })).channel(NioSocketChannel.class)).connect(serveraddress.getIP(), serveraddress.getPort()); + } + + public void pingPendingNetworks() + { + synchronized (this.pingDestinations) + { + Iterator iterator = this.pingDestinations.iterator(); + + while (iterator.hasNext()) + { + NetworkManager networkmanager = iterator.next(); + + if (networkmanager.isChannelOpen()) + { + networkmanager.processReceivedPackets(); + } + else + { + iterator.remove(); + networkmanager.checkDisconnected(); + } + } + } + } + + public void clearPendingNetworks() + { + synchronized (this.pingDestinations) + { + Iterator iterator = this.pingDestinations.iterator(); + + while (iterator.hasNext()) + { + NetworkManager networkmanager = iterator.next(); + + if (networkmanager.isChannelOpen()) + { + iterator.remove(); + networkmanager.closeChannel(new TextComponentTranslation("multiplayer.status.cancelled", new Object[0])); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/network/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/network/package-info.java new file mode 100644 index 0000000..77f0203 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/network/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.network; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/package-info.java new file mode 100644 index 0000000..8dc8195 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/Barrier.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/Barrier.java new file mode 100644 index 0000000..f75b34f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/Barrier.java @@ -0,0 +1,68 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Barrier extends Particle +{ + protected Barrier(World worldIn, double p_i46286_2_, double p_i46286_4_, double p_i46286_6_, Item p_i46286_8_) + { + super(worldIn, p_i46286_2_, p_i46286_4_, p_i46286_6_, 0.0D, 0.0D, 0.0D); + this.setParticleTexture(Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getParticleIcon(p_i46286_8_)); + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.particleGravity = 0.0F; + this.particleMaxAge = 80; + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 1; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = this.particleTexture.getMinU(); + float f1 = this.particleTexture.getMaxU(); + float f2 = this.particleTexture.getMinV(); + float f3 = this.particleTexture.getMaxV(); + float f4 = 0.5F; + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + int i = this.getBrightnessForRender(partialTicks); + int j = i >> 16 & 65535; + int k = i & 65535; + buffer.pos((double)(f5 - rotationX * 0.5F - rotationXY * 0.5F), (double)(f6 - rotationZ * 0.5F), (double)(f7 - rotationYZ * 0.5F - rotationXZ * 0.5F)).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 - rotationX * 0.5F + rotationXY * 0.5F), (double)(f6 + rotationZ * 0.5F), (double)(f7 - rotationYZ * 0.5F + rotationXZ * 0.5F)).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * 0.5F + rotationXY * 0.5F), (double)(f6 + rotationZ * 0.5F), (double)(f7 + rotationYZ * 0.5F + rotationXZ * 0.5F)).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * 0.5F - rotationXY * 0.5F), (double)(f6 - rotationZ * 0.5F), (double)(f7 + rotationYZ * 0.5F - rotationXZ * 0.5F)).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new Barrier(worldIn, xCoordIn, yCoordIn, zCoordIn, Item.getItemFromBlock(Blocks.BARRIER)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/IParticleFactory.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/IParticleFactory.java new file mode 100644 index 0000000..337158d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/IParticleFactory.java @@ -0,0 +1,13 @@ +package net.minecraft.client.particle; + +import javax.annotation.Nullable; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IParticleFactory +{ + @Nullable + Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/Particle.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/Particle.java new file mode 100644 index 0000000..9caca25 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/Particle.java @@ -0,0 +1,390 @@ +package net.minecraft.client.particle; + +import java.util.List; +import java.util.Random; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Particle +{ + private static final AxisAlignedBB EMPTY_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + protected World world; + protected double prevPosX; + protected double prevPosY; + protected double prevPosZ; + protected double posX; + protected double posY; + protected double posZ; + protected double motionX; + protected double motionY; + protected double motionZ; + private AxisAlignedBB boundingBox; + protected boolean onGround; + /** Determines if particle to block collision is to be used */ + protected boolean canCollide; + protected boolean isExpired; + protected float width; + protected float height; + protected Random rand; + protected int particleTextureIndexX; + protected int particleTextureIndexY; + protected float particleTextureJitterX; + protected float particleTextureJitterY; + protected int particleAge; + protected int particleMaxAge; + protected float particleScale; + protected float particleGravity; + /** The red amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0. */ + protected float particleRed; + /** The green amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0. */ + protected float particleGreen; + /** The blue amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0. */ + protected float particleBlue; + /** Particle alpha */ + protected float particleAlpha; + protected TextureAtlasSprite particleTexture; + /** The amount the particle will be rotated in rendering. */ + protected float particleAngle; + /** The particle angle from the last tick. Appears to be used for calculating the rendered angle with partial ticks. */ + protected float prevParticleAngle; + public static double interpPosX; + public static double interpPosY; + public static double interpPosZ; + public static Vec3d cameraViewDir; + + protected Particle(World worldIn, double posXIn, double posYIn, double posZIn) + { + this.boundingBox = EMPTY_AABB; + this.width = 0.6F; + this.height = 1.8F; + this.rand = new Random(); + this.particleAlpha = 1.0F; + this.world = worldIn; + this.setSize(0.2F, 0.2F); + this.setPosition(posXIn, posYIn, posZIn); + this.prevPosX = posXIn; + this.prevPosY = posYIn; + this.prevPosZ = posZIn; + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.particleTextureJitterX = this.rand.nextFloat() * 3.0F; + this.particleTextureJitterY = this.rand.nextFloat() * 3.0F; + this.particleScale = (this.rand.nextFloat() * 0.5F + 0.5F) * 2.0F; + this.particleMaxAge = (int)(4.0F / (this.rand.nextFloat() * 0.9F + 0.1F)); + this.particleAge = 0; + this.canCollide = true; + } + + public Particle(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + this(worldIn, xCoordIn, yCoordIn, zCoordIn); + this.motionX = xSpeedIn + (Math.random() * 2.0D - 1.0D) * 0.4000000059604645D; + this.motionY = ySpeedIn + (Math.random() * 2.0D - 1.0D) * 0.4000000059604645D; + this.motionZ = zSpeedIn + (Math.random() * 2.0D - 1.0D) * 0.4000000059604645D; + float f = (float)(Math.random() + Math.random() + 1.0D) * 0.15F; + float f1 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.motionX = this.motionX / (double)f1 * (double)f * 0.4000000059604645D; + this.motionY = this.motionY / (double)f1 * (double)f * 0.4000000059604645D + 0.10000000149011612D; + this.motionZ = this.motionZ / (double)f1 * (double)f * 0.4000000059604645D; + } + + public Particle multiplyVelocity(float multiplier) + { + this.motionX *= (double)multiplier; + this.motionY = (this.motionY - 0.10000000149011612D) * (double)multiplier + 0.10000000149011612D; + this.motionZ *= (double)multiplier; + return this; + } + + public Particle multipleParticleScaleBy(float scale) + { + this.setSize(0.2F * scale, 0.2F * scale); + this.particleScale *= scale; + return this; + } + + public void setRBGColorF(float particleRedIn, float particleGreenIn, float particleBlueIn) + { + this.particleRed = particleRedIn; + this.particleGreen = particleGreenIn; + this.particleBlue = particleBlueIn; + } + + /** + * Sets the particle alpha (float) + */ + public void setAlphaF(float alpha) + { + this.particleAlpha = alpha; + } + + public boolean shouldDisableDepth() + { + return false; + } + + public float getRedColorF() + { + return this.particleRed; + } + + public float getGreenColorF() + { + return this.particleGreen; + } + + public float getBlueColorF() + { + return this.particleBlue; + } + + public void setMaxAge(int p_187114_1_) + { + this.particleMaxAge = p_187114_1_; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.motionY -= 0.04D * (double)this.particleGravity; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = (float)this.particleTextureIndexX / 16.0F; + float f1 = f + 0.0624375F; + float f2 = (float)this.particleTextureIndexY / 16.0F; + float f3 = f2 + 0.0624375F; + float f4 = 0.1F * this.particleScale; + + if (this.particleTexture != null) + { + f = this.particleTexture.getMinU(); + f1 = this.particleTexture.getMaxU(); + f2 = this.particleTexture.getMinV(); + f3 = this.particleTexture.getMaxV(); + } + + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + int i = this.getBrightnessForRender(partialTicks); + int j = i >> 16 & 65535; + int k = i & 65535; + Vec3d[] avec3d = new Vec3d[] {new Vec3d((double)(-rotationX * f4 - rotationXY * f4), (double)(-rotationZ * f4), (double)(-rotationYZ * f4 - rotationXZ * f4)), new Vec3d((double)(-rotationX * f4 + rotationXY * f4), (double)(rotationZ * f4), (double)(-rotationYZ * f4 + rotationXZ * f4)), new Vec3d((double)(rotationX * f4 + rotationXY * f4), (double)(rotationZ * f4), (double)(rotationYZ * f4 + rotationXZ * f4)), new Vec3d((double)(rotationX * f4 - rotationXY * f4), (double)(-rotationZ * f4), (double)(rotationYZ * f4 - rotationXZ * f4))}; + + if (this.particleAngle != 0.0F) + { + float f8 = this.particleAngle + (this.particleAngle - this.prevParticleAngle) * partialTicks; + float f9 = MathHelper.cos(f8 * 0.5F); + float f10 = MathHelper.sin(f8 * 0.5F) * (float)cameraViewDir.x; + float f11 = MathHelper.sin(f8 * 0.5F) * (float)cameraViewDir.y; + float f12 = MathHelper.sin(f8 * 0.5F) * (float)cameraViewDir.z; + Vec3d vec3d = new Vec3d((double)f10, (double)f11, (double)f12); + + for (int l = 0; l < 4; ++l) + { + avec3d[l] = vec3d.scale(2.0D * avec3d[l].dotProduct(vec3d)).add(avec3d[l].scale((double)(f9 * f9) - vec3d.dotProduct(vec3d))).add(vec3d.crossProduct(avec3d[l]).scale((double)(2.0F * f9))); + } + } + + buffer.pos((double)f5 + avec3d[0].x, (double)f6 + avec3d[0].y, (double)f7 + avec3d[0].z).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + buffer.pos((double)f5 + avec3d[1].x, (double)f6 + avec3d[1].y, (double)f7 + avec3d[1].z).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + buffer.pos((double)f5 + avec3d[2].x, (double)f6 + avec3d[2].y, (double)f7 + avec3d[2].z).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + buffer.pos((double)f5 + avec3d[3].x, (double)f6 + avec3d[3].y, (double)f7 + avec3d[3].z).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 0; + } + + /** + * Sets the texture used by the particle. + */ + public void setParticleTexture(TextureAtlasSprite texture) + { + int i = this.getFXLayer(); + + if (i == 1) + { + this.particleTexture = texture; + } + else + { + throw new RuntimeException("Invalid call to Particle.setTex, use coordinate methods"); + } + } + + /** + * Public method to set private field particleTextureIndex. + */ + public void setParticleTextureIndex(int particleTextureIndex) + { + if (this.getFXLayer() != 0) + { + throw new RuntimeException("Invalid call to Particle.setMiscTex"); + } + else + { + this.particleTextureIndexX = particleTextureIndex % 16; + this.particleTextureIndexY = particleTextureIndex / 16; + } + } + + public void nextTextureIndexX() + { + ++this.particleTextureIndexX; + } + + public String toString() + { + return this.getClass().getSimpleName() + ", Pos (" + this.posX + "," + this.posY + "," + this.posZ + "), RGBA (" + this.particleRed + "," + this.particleGreen + "," + this.particleBlue + "," + this.particleAlpha + "), Age " + this.particleAge; + } + + /** + * Called to indicate that this particle effect has expired and should be discontinued. + */ + public void setExpired() + { + this.isExpired = true; + } + + protected void setSize(float p_187115_1_, float p_187115_2_) + { + if (p_187115_1_ != this.width || p_187115_2_ != this.height) + { + this.width = p_187115_1_; + this.height = p_187115_2_; + // FORGE: Fix MC-12269 - Glitchy movement when setSize is called without setPosition + setPosition(posX, posY, posZ); + } + } + + public void setPosition(double p_187109_1_, double p_187109_3_, double p_187109_5_) + { + this.posX = p_187109_1_; + this.posY = p_187109_3_; + this.posZ = p_187109_5_; + float f = this.width / 2.0F; + float f1 = this.height; + this.setBoundingBox(new AxisAlignedBB(p_187109_1_ - (double)f, p_187109_3_, p_187109_5_ - (double)f, p_187109_1_ + (double)f, p_187109_3_ + (double)f1, p_187109_5_ + (double)f)); + } + + public void move(double x, double y, double z) + { + double d0 = y; + double origX = x; + double origZ = z; + + if (this.canCollide) + { + List list = this.world.getCollisionBoxes((Entity)null, this.getBoundingBox().expand(x, y, z)); + + for (AxisAlignedBB axisalignedbb : list) + { + y = axisalignedbb.calculateYOffset(this.getBoundingBox(), y); + } + + this.setBoundingBox(this.getBoundingBox().offset(0.0D, y, 0.0D)); + + for (AxisAlignedBB axisalignedbb1 : list) + { + x = axisalignedbb1.calculateXOffset(this.getBoundingBox(), x); + } + + this.setBoundingBox(this.getBoundingBox().offset(x, 0.0D, 0.0D)); + + for (AxisAlignedBB axisalignedbb2 : list) + { + z = axisalignedbb2.calculateZOffset(this.getBoundingBox(), z); + } + + this.setBoundingBox(this.getBoundingBox().offset(0.0D, 0.0D, z)); + } + else + { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + } + + this.resetPositionToBB(); + this.onGround = d0 != y && d0 < 0.0D; + + if (origX != x) + { + this.motionX = 0.0D; + } + + if (origZ != z) + { + this.motionZ = 0.0D; + } + } + + protected void resetPositionToBB() + { + AxisAlignedBB axisalignedbb = this.getBoundingBox(); + this.posX = (axisalignedbb.minX + axisalignedbb.maxX) / 2.0D; + this.posY = axisalignedbb.minY; + this.posZ = (axisalignedbb.minZ + axisalignedbb.maxZ) / 2.0D; + } + + public int getBrightnessForRender(float p_189214_1_) + { + BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); + return this.world.isBlockLoaded(blockpos) ? this.world.getCombinedLight(blockpos, 0) : 0; + } + + /** + * Returns true if this effect has not yet expired. "I feel happy! I feel happy!" + */ + public boolean isAlive() + { + return !this.isExpired; + } + + public AxisAlignedBB getBoundingBox() + { + return this.boundingBox; + } + + public void setBoundingBox(AxisAlignedBB bb) + { + this.boundingBox = bb; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBlockDust.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBlockDust.java new file mode 100644 index 0000000..e7daa87 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBlockDust.java @@ -0,0 +1,32 @@ +package net.minecraft.client.particle; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleBlockDust extends ParticleDigging +{ + protected ParticleBlockDust(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, IBlockState state) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, state); + this.motionX = xSpeedIn; + this.motionY = ySpeedIn; + this.motionZ = zSpeedIn; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + @Nullable + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + IBlockState iblockstate = Block.getStateById(p_178902_15_[0]); + return iblockstate.getRenderType() == EnumBlockRenderType.INVISIBLE ? null : (new ParticleBlockDust(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, iblockstate)).init(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBreaking.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBreaking.java new file mode 100644 index 0000000..1969934 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBreaking.java @@ -0,0 +1,110 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleBreaking extends Particle +{ + protected ParticleBreaking(World worldIn, double posXIn, double posYIn, double posZIn, Item itemIn) + { + this(worldIn, posXIn, posYIn, posZIn, itemIn, 0); + } + + protected ParticleBreaking(World worldIn, double posXIn, double posYIn, double posZIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, Item itemIn, int meta) + { + this(worldIn, posXIn, posYIn, posZIn, itemIn, meta); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += xSpeedIn; + this.motionY += ySpeedIn; + this.motionZ += zSpeedIn; + } + + protected ParticleBreaking(World worldIn, double posXIn, double posYIn, double posZIn, Item itemIn, int meta) + { + super(worldIn, posXIn, posYIn, posZIn, 0.0D, 0.0D, 0.0D); + this.setParticleTexture(Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getParticleIcon(itemIn, meta)); + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.particleGravity = Blocks.SNOW.blockParticleGravity; + this.particleScale /= 2.0F; + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 1; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleTextureIndexX + this.particleTextureJitterX / 4.0F) / 16.0F; + float f1 = f + 0.015609375F; + float f2 = ((float)this.particleTextureIndexY + this.particleTextureJitterY / 4.0F) / 16.0F; + float f3 = f2 + 0.015609375F; + float f4 = 0.1F * this.particleScale; + + if (this.particleTexture != null) + { + f = this.particleTexture.getInterpolatedU((double)(this.particleTextureJitterX / 4.0F * 16.0F)); + f1 = this.particleTexture.getInterpolatedU((double)((this.particleTextureJitterX + 1.0F) / 4.0F * 16.0F)); + f2 = this.particleTexture.getInterpolatedV((double)(this.particleTextureJitterY / 4.0F * 16.0F)); + f3 = this.particleTexture.getInterpolatedV((double)((this.particleTextureJitterY + 1.0F) / 4.0F * 16.0F)); + } + + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + int i = this.getBrightnessForRender(partialTicks); + int j = i >> 16 & 65535; + int k = i & 65535; + buffer.pos((double)(f5 - rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 - rotationYZ * f4 - rotationXZ * f4)).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 - rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 - rotationYZ * f4 + rotationXZ * f4)).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 + rotationYZ * f4 + rotationXZ * f4)).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 + rotationYZ * f4 - rotationXZ * f4)).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + int i = p_178902_15_.length > 1 ? p_178902_15_[1] : 0; + return new ParticleBreaking(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, Item.getItemById(p_178902_15_[0]), i); + } + } + + @SideOnly(Side.CLIENT) + public static class SlimeFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleBreaking(worldIn, xCoordIn, yCoordIn, zCoordIn, Items.SLIME_BALL); + } + } + + @SideOnly(Side.CLIENT) + public static class SnowballFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleBreaking(worldIn, xCoordIn, yCoordIn, zCoordIn, Items.SNOWBALL); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBubble.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBubble.java new file mode 100644 index 0000000..ebec542 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleBubble.java @@ -0,0 +1,57 @@ +package net.minecraft.client.particle; + +import net.minecraft.block.material.Material; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleBubble extends Particle +{ + protected ParticleBubble(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.setParticleTextureIndex(32); + this.setSize(0.02F, 0.02F); + this.particleScale *= this.rand.nextFloat() * 0.6F + 0.2F; + this.motionX = xSpeedIn * 0.20000000298023224D + (Math.random() * 2.0D - 1.0D) * 0.019999999552965164D; + this.motionY = ySpeedIn * 0.20000000298023224D + (Math.random() * 2.0D - 1.0D) * 0.019999999552965164D; + this.motionZ = zSpeedIn * 0.20000000298023224D + (Math.random() * 2.0D - 1.0D) * 0.019999999552965164D; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY += 0.002D; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.8500000238418579D; + this.motionY *= 0.8500000238418579D; + this.motionZ *= 0.8500000238418579D; + + if (this.world.getBlockState(new BlockPos(this.posX, this.posY, this.posZ)).getMaterial() != Material.WATER) + { + this.setExpired(); + } + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleBubble(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleCloud.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleCloud.java new file mode 100644 index 0000000..a7bb3f5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleCloud.java @@ -0,0 +1,94 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleCloud extends Particle +{ + float oSize; + + protected ParticleCloud(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i1221_8_, double p_i1221_10_, double p_i1221_12_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + float f = 2.5F; + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += p_i1221_8_; + this.motionY += p_i1221_10_; + this.motionZ += p_i1221_12_; + float f1 = 1.0F - (float)(Math.random() * 0.30000001192092896D); + this.particleRed = f1; + this.particleGreen = f1; + this.particleBlue = f1; + this.particleScale *= 0.75F; + this.particleScale *= 2.5F; + this.oSize = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.3D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * 2.5F); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.oSize * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + EntityPlayer entityplayer = this.world.getClosestPlayer(this.posX, this.posY, this.posZ, 2.0D, false); + + if (entityplayer != null) + { + AxisAlignedBB axisalignedbb = entityplayer.getEntityBoundingBox(); + + if (this.posY > axisalignedbb.minY) + { + this.posY += (axisalignedbb.minY - this.posY) * 0.2D; + this.motionY += (entityplayer.motionY - this.motionY) * 0.2D; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleCloud(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleCrit.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleCrit.java new file mode 100644 index 0000000..a3d7388 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleCrit.java @@ -0,0 +1,111 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleCrit extends Particle +{ + float oSize; + + protected ParticleCrit(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i46284_8_, double p_i46284_10_, double p_i46284_12_) + { + this(worldIn, xCoordIn, yCoordIn, zCoordIn, p_i46284_8_, p_i46284_10_, p_i46284_12_, 1.0F); + } + + protected ParticleCrit(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i46285_8_, double p_i46285_10_, double p_i46285_12_, float p_i46285_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += p_i46285_8_ * 0.4D; + this.motionY += p_i46285_10_ * 0.4D; + this.motionZ += p_i46285_12_ * 0.4D; + float f = (float)(Math.random() * 0.30000001192092896D + 0.6000000238418579D); + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.particleScale *= 0.75F; + this.particleScale *= p_i46285_14_; + this.oSize = this.particleScale; + this.particleMaxAge = (int)(6.0D / (Math.random() * 0.8D + 0.6D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * p_i46285_14_); + this.setParticleTextureIndex(65); + this.onUpdate(); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.oSize * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.particleGreen = (float)((double)this.particleGreen * 0.96D); + this.particleBlue = (float)((double)this.particleBlue * 0.9D); + this.motionX *= 0.699999988079071D; + this.motionY *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + this.motionY -= 0.019999999552965164D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class DamageIndicatorFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleCrit(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn + 1.0D, zSpeedIn, 1.0F); + particle.setMaxAge(20); + particle.setParticleTextureIndex(67); + return particle; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleCrit(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } + + @SideOnly(Side.CLIENT) + public static class MagicFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleCrit(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + particle.setRBGColorF(particle.getRedColorF() * 0.3F, particle.getGreenColorF() * 0.8F, particle.getBlueColorF()); + particle.nextTextureIndexX(); + return particle; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDigging.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDigging.java new file mode 100644 index 0000000..356dc92 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDigging.java @@ -0,0 +1,136 @@ +package net.minecraft.client.particle; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleDigging extends Particle +{ + private final IBlockState sourceState; + private BlockPos sourcePos; + + protected ParticleDigging(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, IBlockState state) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.sourceState = state; + this.setParticleTexture(Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelShapes().getTexture(state)); + this.particleGravity = state.getBlock().blockParticleGravity; + this.particleRed = 0.6F; + this.particleGreen = 0.6F; + this.particleBlue = 0.6F; + this.particleScale /= 2.0F; + } + + /** + * Sets the position of the block that this particle came from. Used for calculating texture and color multiplier. + */ + public ParticleDigging setBlockPos(BlockPos pos) + { + this.sourcePos = pos; + + if (this.sourceState.getBlock() == Blocks.GRASS) + { + return this; + } + else + { + this.multiplyColor(pos); + return this; + } + } + + public ParticleDigging init() + { + this.sourcePos = new BlockPos(this.posX, this.posY, this.posZ); + Block block = this.sourceState.getBlock(); + + if (block == Blocks.GRASS) + { + return this; + } + else + { + this.multiplyColor(this.sourcePos); + return this; + } + } + + protected void multiplyColor(@Nullable BlockPos p_187154_1_) + { + int i = Minecraft.getMinecraft().getBlockColors().colorMultiplier(this.sourceState, this.world, p_187154_1_, 0); + this.particleRed *= (float)(i >> 16 & 255) / 255.0F; + this.particleGreen *= (float)(i >> 8 & 255) / 255.0F; + this.particleBlue *= (float)(i & 255) / 255.0F; + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 1; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleTextureIndexX + this.particleTextureJitterX / 4.0F) / 16.0F; + float f1 = f + 0.015609375F; + float f2 = ((float)this.particleTextureIndexY + this.particleTextureJitterY / 4.0F) / 16.0F; + float f3 = f2 + 0.015609375F; + float f4 = 0.1F * this.particleScale; + + if (this.particleTexture != null) + { + f = this.particleTexture.getInterpolatedU((double)(this.particleTextureJitterX / 4.0F * 16.0F)); + f1 = this.particleTexture.getInterpolatedU((double)((this.particleTextureJitterX + 1.0F) / 4.0F * 16.0F)); + f2 = this.particleTexture.getInterpolatedV((double)(this.particleTextureJitterY / 4.0F * 16.0F)); + f3 = this.particleTexture.getInterpolatedV((double)((this.particleTextureJitterY + 1.0F) / 4.0F * 16.0F)); + } + + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + int i = this.getBrightnessForRender(partialTicks); + int j = i >> 16 & 65535; + int k = i & 65535; + buffer.pos((double)(f5 - rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 - rotationYZ * f4 - rotationXZ * f4)).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 - rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 - rotationYZ * f4 + rotationXZ * f4)).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 + rotationYZ * f4 + rotationXZ * f4)).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 + rotationYZ * f4 - rotationXZ * f4)).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(j, k).endVertex(); + } + + public int getBrightnessForRender(float p_189214_1_) + { + int i = super.getBrightnessForRender(p_189214_1_); + int j = 0; + + if (this.world.isBlockLoaded(this.sourcePos)) + { + j = this.world.getCombinedLight(this.sourcePos, 0); + } + + return i == 0 ? j : i; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return (new ParticleDigging(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, Block.getStateById(p_178902_15_[0]))).init(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDragonBreath.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDragonBreath.java new file mode 100644 index 0000000..d470930 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDragonBreath.java @@ -0,0 +1,91 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleDragonBreath extends Particle +{ + private final float oSize; + private boolean hasHitGround; + + protected ParticleDragonBreath(World worldIn, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) + { + super(worldIn, x, y, z, xSpeed, ySpeed, zSpeed); + this.motionX = xSpeed; + this.motionY = ySpeed; + this.motionZ = zSpeed; + this.particleRed = MathHelper.nextFloat(this.rand, 0.7176471F, 0.8745098F); + this.particleGreen = MathHelper.nextFloat(this.rand, 0.0F, 0.0F); + this.particleBlue = MathHelper.nextFloat(this.rand, 0.8235294F, 0.9764706F); + this.particleScale *= 0.75F; + this.oSize = this.particleScale; + this.particleMaxAge = (int)(20.0D / ((double)this.rand.nextFloat() * 0.8D + 0.2D)); + this.hasHitGround = false; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + else + { + this.setParticleTextureIndex(3 * this.particleAge / this.particleMaxAge + 5); + + if (this.onGround) + { + this.motionY = 0.0D; + this.hasHitGround = true; + } + + if (this.hasHitGround) + { + this.motionY += 0.002D; + } + + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.hasHitGround) + { + this.motionY *= 0.9599999785423279D; + } + } + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + this.particleScale = this.oSize * MathHelper.clamp(((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F, 0.0F, 1.0F); + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleDragonBreath(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDrip.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDrip.java new file mode 100644 index 0000000..fc8bf4e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleDrip.java @@ -0,0 +1,155 @@ +package net.minecraft.client.particle; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleDrip extends Particle +{ + /** the material type for dropped items/blocks */ + private final Material materialType; + /** The height of the current bob */ + private int bobTimer; + + protected ParticleDrip(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, Material p_i1203_8_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + + if (p_i1203_8_ == Material.WATER) + { + this.particleRed = 0.0F; + this.particleGreen = 0.0F; + this.particleBlue = 1.0F; + } + else + { + this.particleRed = 1.0F; + this.particleGreen = 0.0F; + this.particleBlue = 0.0F; + } + + this.setParticleTextureIndex(113); + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.materialType = p_i1203_8_; + this.bobTimer = 40; + this.particleMaxAge = (int)(64.0D / (Math.random() * 0.8D + 0.2D)); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + public int getBrightnessForRender(float p_189214_1_) + { + return this.materialType == Material.WATER ? super.getBrightnessForRender(p_189214_1_) : 257; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.materialType == Material.WATER) + { + this.particleRed = 0.2F; + this.particleGreen = 0.3F; + this.particleBlue = 1.0F; + } + else + { + this.particleRed = 1.0F; + this.particleGreen = 16.0F / (float)(40 - this.bobTimer + 16); + this.particleBlue = 4.0F / (float)(40 - this.bobTimer + 8); + } + + this.motionY -= (double)this.particleGravity; + + if (this.bobTimer-- > 0) + { + this.motionX *= 0.02D; + this.motionY *= 0.02D; + this.motionZ *= 0.02D; + this.setParticleTextureIndex(113); + } + else + { + this.setParticleTextureIndex(112); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + + if (this.onGround) + { + if (this.materialType == Material.WATER) + { + this.setExpired(); + this.world.spawnParticle(EnumParticleTypes.WATER_SPLASH, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } + else + { + this.setParticleTextureIndex(114); + } + + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + + BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); + IBlockState iblockstate = this.world.getBlockState(blockpos); + Material material = iblockstate.getMaterial(); + + if (material.isLiquid() || material.isSolid()) + { + double d0 = 0.0D; + + if (iblockstate.getBlock() instanceof BlockLiquid) + { + d0 = (double)BlockLiquid.getLiquidHeightPercent(((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue()); + } + + double d1 = (double)(MathHelper.floor(this.posY) + 1) - d0; + + if (this.posY < d1) + { + this.setExpired(); + } + } + } + + @SideOnly(Side.CLIENT) + public static class LavaFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleDrip(worldIn, xCoordIn, yCoordIn, zCoordIn, Material.LAVA); + } + } + + @SideOnly(Side.CLIENT) + public static class WaterFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleDrip(worldIn, xCoordIn, yCoordIn, zCoordIn, Material.WATER); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEmitter.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEmitter.java new file mode 100644 index 0000000..f8bdf93 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEmitter.java @@ -0,0 +1,72 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleEmitter extends Particle +{ + private final Entity attachedEntity; + private int age; + private final int lifetime; + private final EnumParticleTypes particleTypes; + + public ParticleEmitter(World worldIn, Entity p_i46279_2_, EnumParticleTypes particleTypesIn) + { + this(worldIn, p_i46279_2_, particleTypesIn, 3); + } + + public ParticleEmitter(World p_i47219_1_, Entity p_i47219_2_, EnumParticleTypes p_i47219_3_, int p_i47219_4_) + { + super(p_i47219_1_, p_i47219_2_.posX, p_i47219_2_.getEntityBoundingBox().minY + (double)(p_i47219_2_.height / 2.0F), p_i47219_2_.posZ, p_i47219_2_.motionX, p_i47219_2_.motionY, p_i47219_2_.motionZ); + this.attachedEntity = p_i47219_2_; + this.lifetime = p_i47219_4_; + this.particleTypes = p_i47219_3_; + this.onUpdate(); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + } + + public void onUpdate() + { + for (int i = 0; i < 16; ++i) + { + double d0 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + + if (d0 * d0 + d1 * d1 + d2 * d2 <= 1.0D) + { + double d3 = this.attachedEntity.posX + d0 * (double)this.attachedEntity.width / 4.0D; + double d4 = this.attachedEntity.getEntityBoundingBox().minY + (double)(this.attachedEntity.height / 2.0F) + d1 * (double)this.attachedEntity.height / 4.0D; + double d5 = this.attachedEntity.posZ + d2 * (double)this.attachedEntity.width / 4.0D; + this.world.spawnParticle(this.particleTypes, false, d3, d4, d5, d0, d1 + 0.2D, d2); + } + } + + ++this.age; + + if (this.age >= this.lifetime) + { + this.setExpired(); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEnchantmentTable.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEnchantmentTable.java new file mode 100644 index 0000000..45c96df --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEnchantmentTable.java @@ -0,0 +1,92 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleEnchantmentTable extends Particle +{ + private final float oSize; + private final double coordX; + private final double coordY; + private final double coordZ; + + protected ParticleEnchantmentTable(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.motionX = xSpeedIn; + this.motionY = ySpeedIn; + this.motionZ = zSpeedIn; + this.coordX = xCoordIn; + this.coordY = yCoordIn; + this.coordZ = zCoordIn; + this.prevPosX = xCoordIn + xSpeedIn; + this.prevPosY = yCoordIn + ySpeedIn; + this.prevPosZ = zCoordIn + zSpeedIn; + this.posX = this.prevPosX; + this.posY = this.prevPosY; + this.posZ = this.prevPosZ; + float f = this.rand.nextFloat() * 0.6F + 0.4F; + this.particleScale = this.rand.nextFloat() * 0.5F + 0.2F; + this.oSize = this.particleScale; + this.particleRed = 0.9F * f; + this.particleGreen = 0.9F * f; + this.particleBlue = f; + this.particleMaxAge = (int)(Math.random() * 10.0D) + 30; + this.setParticleTextureIndex((int)(Math.random() * 26.0D + 1.0D + 224.0D)); + } + + public void move(double x, double y, double z) + { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + + public int getBrightnessForRender(float p_189214_1_) + { + int i = super.getBrightnessForRender(p_189214_1_); + float f = (float)this.particleAge / (float)this.particleMaxAge; + f = f * f; + f = f * f; + int j = i & 255; + int k = i >> 16 & 255; + k = k + (int)(f * 15.0F * 16.0F); + + if (k > 240) + { + k = 240; + } + + return j | k << 16; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float f = (float)this.particleAge / (float)this.particleMaxAge; + f = 1.0F - f; + float f1 = 1.0F - f; + f1 = f1 * f1; + f1 = f1 * f1; + this.posX = this.coordX + this.motionX * (double)f; + this.posY = this.coordY + this.motionY * (double)f - (double)(f1 * 1.2F); + this.posZ = this.coordZ + this.motionZ * (double)f; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + } + + @SideOnly(Side.CLIENT) + public static class EnchantmentTable implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleEnchantmentTable(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEndRod.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEndRod.java new file mode 100644 index 0000000..395a7ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleEndRod.java @@ -0,0 +1,35 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleEndRod extends ParticleSimpleAnimated +{ + public ParticleEndRod(World p_i46580_1_, double p_i46580_2_, double p_i46580_4_, double p_i46580_6_, double p_i46580_8_, double p_i46580_10_, double p_i46580_12_) + { + super(p_i46580_1_, p_i46580_2_, p_i46580_4_, p_i46580_6_, 176, 8, -5.0E-4F); + this.motionX = p_i46580_8_; + this.motionY = p_i46580_10_; + this.motionZ = p_i46580_12_; + this.particleScale *= 0.75F; + this.particleMaxAge = 60 + this.rand.nextInt(12); + this.setColorFade(15916745); + } + + public void move(double x, double y, double z) + { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleEndRod(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosion.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosion.java new file mode 100644 index 0000000..6446268 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosion.java @@ -0,0 +1,57 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleExplosion extends Particle +{ + protected ParticleExplosion(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.motionX = xSpeedIn + (Math.random() * 2.0D - 1.0D) * 0.05000000074505806D; + this.motionY = ySpeedIn + (Math.random() * 2.0D - 1.0D) * 0.05000000074505806D; + this.motionZ = zSpeedIn + (Math.random() * 2.0D - 1.0D) * 0.05000000074505806D; + float f = this.rand.nextFloat() * 0.3F + 0.7F; + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.particleScale = this.rand.nextFloat() * this.rand.nextFloat() * 6.0F + 1.0F; + this.particleMaxAge = (int)(16.0D / ((double)this.rand.nextFloat() * 0.8D + 0.2D)) + 2; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.8999999761581421D; + this.motionY *= 0.8999999761581421D; + this.motionZ *= 0.8999999761581421D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleExplosion(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosionHuge.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosionHuge.java new file mode 100644 index 0000000..e9d55ac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosionHuge.java @@ -0,0 +1,64 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleExplosionHuge extends Particle +{ + private int timeSinceStart; + /** the maximum time for the explosion */ + private final int maximumTime = 8; + + protected ParticleExplosionHuge(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i1214_8_, double p_i1214_10_, double p_i1214_12_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + } + + public void onUpdate() + { + for (int i = 0; i < 6; ++i) + { + double d0 = this.posX + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; + double d1 = this.posY + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; + double d2 = this.posZ + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, d0, d1, d2, (double)((float)this.timeSinceStart / (float)this.maximumTime), 0.0D, 0.0D); + } + + ++this.timeSinceStart; + + if (this.timeSinceStart == this.maximumTime) + { + this.setExpired(); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 1; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleExplosionHuge(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosionLarge.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosionLarge.java new file mode 100644 index 0000000..bbee07e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleExplosionLarge.java @@ -0,0 +1,106 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleExplosionLarge extends Particle +{ + private static final ResourceLocation EXPLOSION_TEXTURE = new ResourceLocation("textures/entity/explosion.png"); + private static final VertexFormat VERTEX_FORMAT = (new VertexFormat()).addElement(DefaultVertexFormats.POSITION_3F).addElement(DefaultVertexFormats.TEX_2F).addElement(DefaultVertexFormats.COLOR_4UB).addElement(DefaultVertexFormats.TEX_2S).addElement(DefaultVertexFormats.NORMAL_3B).addElement(DefaultVertexFormats.PADDING_1B); + private int life; + private final int lifeTime; + /** The Rendering Engine. */ + private final TextureManager textureManager; + private final float size; + + protected ParticleExplosionLarge(TextureManager textureManagerIn, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i1213_9_, double p_i1213_11_, double p_i1213_13_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.textureManager = textureManagerIn; + this.lifeTime = 6 + this.rand.nextInt(4); + float f = this.rand.nextFloat() * 0.6F + 0.4F; + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.size = 1.0F - (float)p_i1213_9_ * 0.5F; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + int i = (int)(((float)this.life + partialTicks) * 15.0F / (float)this.lifeTime); + + if (i <= 15) + { + this.textureManager.bindTexture(EXPLOSION_TEXTURE); + float f = (float)(i % 4) / 4.0F; + float f1 = f + 0.24975F; + float f2 = (float)(i / 4) / 4.0F; + float f3 = f2 + 0.24975F; + float f4 = 2.0F * this.size; + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + RenderHelper.disableStandardItemLighting(); + buffer.begin(7, VERTEX_FORMAT); + buffer.pos((double)(f5 - rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 - rotationYZ * f4 - rotationXZ * f4)).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + buffer.pos((double)(f5 - rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 - rotationYZ * f4 + rotationXZ * f4)).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 + rotationYZ * f4 + rotationXZ * f4)).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 + rotationYZ * f4 - rotationXZ * f4)).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + Tessellator.getInstance().draw(); + GlStateManager.enableLighting(); + } + } + + public int getBrightnessForRender(float p_189214_1_) + { + return 61680; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.life; + + if (this.life == this.lifeTime) + { + this.setExpired(); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 3; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleExplosionLarge(Minecraft.getMinecraft().getTextureManager(), worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFallingDust.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFallingDust.java new file mode 100644 index 0000000..d75f274 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFallingDust.java @@ -0,0 +1,107 @@ +package net.minecraft.client.particle; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFalling; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleFallingDust extends Particle +{ + float oSize; + final float rotSpeed; + + protected ParticleFallingDust(World p_i47135_1_, double p_i47135_2_, double p_i47135_4_, double p_i47135_6_, float p_i47135_8_, float p_i47135_9_, float p_i47135_10_) + { + super(p_i47135_1_, p_i47135_2_, p_i47135_4_, p_i47135_6_, 0.0D, 0.0D, 0.0D); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.particleRed = p_i47135_8_; + this.particleGreen = p_i47135_9_; + this.particleBlue = p_i47135_10_; + float f = 0.9F; + this.particleScale *= 0.75F; + this.particleScale *= 0.9F; + this.oSize = this.particleScale; + this.particleMaxAge = (int)(32.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * 0.9F); + this.rotSpeed = ((float)Math.random() - 0.5F) * 0.1F; + this.particleAngle = (float)Math.random() * ((float)Math.PI * 2F); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.oSize * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.prevParticleAngle = this.particleAngle; + this.particleAngle += (float)Math.PI * this.rotSpeed * 2.0F; + + if (this.onGround) + { + this.prevParticleAngle = this.particleAngle = 0.0F; + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + this.motionY -= 0.003000000026077032D; + this.motionY = Math.max(this.motionY, -0.14000000059604645D); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + @Nullable + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + IBlockState iblockstate = Block.getStateById(p_178902_15_[0]); + + if (iblockstate.getBlock() != Blocks.AIR && iblockstate.getRenderType() == EnumBlockRenderType.INVISIBLE) + { + return null; + } + else + { + int i = Minecraft.getMinecraft().getBlockColors().getColor(iblockstate, worldIn, new BlockPos(xCoordIn, yCoordIn, zCoordIn)); + + if (iblockstate.getBlock() instanceof BlockFalling) + { + i = ((BlockFalling)iblockstate.getBlock()).getDustColor(iblockstate); + } + + float f = (float)(i >> 16 & 255) / 255.0F; + float f1 = (float)(i >> 8 & 255) / 255.0F; + float f2 = (float)(i & 255) / 255.0F; + return new ParticleFallingDust(worldIn, xCoordIn, yCoordIn, zCoordIn, f, f1, f2); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFirework.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFirework.java new file mode 100644 index 0000000..d03e1f6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFirework.java @@ -0,0 +1,411 @@ +package net.minecraft.client.particle; + +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemDye; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleFirework +{ + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + ParticleFirework.Spark particlefirework$spark = new ParticleFirework.Spark(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, Minecraft.getMinecraft().effectRenderer); + particlefirework$spark.setAlphaF(0.99F); + return particlefirework$spark; + } + } + + @SideOnly(Side.CLIENT) + public static class Overlay extends Particle + { + protected Overlay(World p_i46466_1_, double p_i46466_2_, double p_i46466_4_, double p_i46466_6_) + { + super(p_i46466_1_, p_i46466_2_, p_i46466_4_, p_i46466_6_); + this.particleMaxAge = 4; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = 0.25F; + float f1 = 0.5F; + float f2 = 0.125F; + float f3 = 0.375F; + float f4 = 7.1F * MathHelper.sin(((float)this.particleAge + partialTicks - 1.0F) * 0.25F * (float)Math.PI); + this.setAlphaF(0.6F - ((float)this.particleAge + partialTicks - 1.0F) * 0.25F * 0.5F); + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + int i = this.getBrightnessForRender(partialTicks); + int j = i >> 16 & 65535; + int k = i & 65535; + buffer.pos((double)(f5 - rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 - rotationYZ * f4 - rotationXZ * f4)).tex(0.5D, 0.375D).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 - rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 - rotationYZ * f4 + rotationXZ * f4)).tex(0.5D, 0.125D).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4), (double)(f7 + rotationYZ * f4 + rotationXZ * f4)).tex(0.25D, 0.125D).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4), (double)(f7 + rotationYZ * f4 - rotationXZ * f4)).tex(0.25D, 0.375D).color(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha).lightmap(j, k).endVertex(); + } + } + + @SideOnly(Side.CLIENT) + public static class Spark extends ParticleSimpleAnimated + { + private boolean trail; + private boolean twinkle; + private final ParticleManager effectRenderer; + private float fadeColourRed; + private float fadeColourGreen; + private float fadeColourBlue; + private boolean hasFadeColour; + + public Spark(World p_i46465_1_, double p_i46465_2_, double p_i46465_4_, double p_i46465_6_, double p_i46465_8_, double p_i46465_10_, double p_i46465_12_, ParticleManager p_i46465_14_) + { + super(p_i46465_1_, p_i46465_2_, p_i46465_4_, p_i46465_6_, 160, 8, -0.004F); + this.motionX = p_i46465_8_; + this.motionY = p_i46465_10_; + this.motionZ = p_i46465_12_; + this.effectRenderer = p_i46465_14_; + this.particleScale *= 0.75F; + this.particleMaxAge = 48 + this.rand.nextInt(12); + } + + public void setTrail(boolean trailIn) + { + this.trail = trailIn; + } + + public void setTwinkle(boolean twinkleIn) + { + this.twinkle = twinkleIn; + } + + public boolean shouldDisableDepth() + { + return true; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + if (!this.twinkle || this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0) + { + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + } + + public void onUpdate() + { + super.onUpdate(); + + if (this.trail && this.particleAge < this.particleMaxAge / 2 && (this.particleAge + this.particleMaxAge) % 2 == 0) + { + ParticleFirework.Spark particlefirework$spark = new ParticleFirework.Spark(this.world, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D, this.effectRenderer); + particlefirework$spark.setAlphaF(0.99F); + particlefirework$spark.setRBGColorF(this.particleRed, this.particleGreen, this.particleBlue); + particlefirework$spark.particleAge = particlefirework$spark.particleMaxAge / 2; + + if (this.hasFadeColour) + { + particlefirework$spark.hasFadeColour = true; + particlefirework$spark.fadeColourRed = this.fadeColourRed; + particlefirework$spark.fadeColourGreen = this.fadeColourGreen; + particlefirework$spark.fadeColourBlue = this.fadeColourBlue; + } + + particlefirework$spark.twinkle = this.twinkle; + this.effectRenderer.addEffect(particlefirework$spark); + } + } + } + + @SideOnly(Side.CLIENT) + public static class Starter extends Particle + { + private int fireworkAge; + private final ParticleManager manager; + private NBTTagList fireworkExplosions; + boolean twinkle; + + public Starter(World p_i46464_1_, double p_i46464_2_, double p_i46464_4_, double p_i46464_6_, double p_i46464_8_, double p_i46464_10_, double p_i46464_12_, ParticleManager p_i46464_14_, @Nullable NBTTagCompound p_i46464_15_) + { + super(p_i46464_1_, p_i46464_2_, p_i46464_4_, p_i46464_6_, 0.0D, 0.0D, 0.0D); + this.motionX = p_i46464_8_; + this.motionY = p_i46464_10_; + this.motionZ = p_i46464_12_; + this.manager = p_i46464_14_; + this.particleMaxAge = 8; + + if (p_i46464_15_ != null) + { + this.fireworkExplosions = p_i46464_15_.getTagList("Explosions", 10); + + if (this.fireworkExplosions.hasNoTags()) + { + this.fireworkExplosions = null; + } + else + { + this.particleMaxAge = this.fireworkExplosions.tagCount() * 2 - 1; + + for (int i = 0; i < this.fireworkExplosions.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = this.fireworkExplosions.getCompoundTagAt(i); + + if (nbttagcompound.getBoolean("Flicker")) + { + this.twinkle = true; + this.particleMaxAge += 15; + break; + } + } + } + } + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + } + + public void onUpdate() + { + if (this.fireworkAge == 0 && this.fireworkExplosions != null) + { + boolean flag = this.isFarFromCamera(); + boolean flag1 = false; + + if (this.fireworkExplosions.tagCount() >= 3) + { + flag1 = true; + } + else + { + for (int i = 0; i < this.fireworkExplosions.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = this.fireworkExplosions.getCompoundTagAt(i); + + if (nbttagcompound.getByte("Type") == 1) + { + flag1 = true; + break; + } + } + } + + SoundEvent soundevent1; + + if (flag1) + { + soundevent1 = flag ? SoundEvents.ENTITY_FIREWORK_LARGE_BLAST_FAR : SoundEvents.ENTITY_FIREWORK_LARGE_BLAST; + } + else + { + soundevent1 = flag ? SoundEvents.ENTITY_FIREWORK_BLAST_FAR : SoundEvents.ENTITY_FIREWORK_BLAST; + } + + this.world.playSound(this.posX, this.posY, this.posZ, soundevent1, SoundCategory.AMBIENT, 20.0F, 0.95F + this.rand.nextFloat() * 0.1F, true); + } + + if (this.fireworkAge % 2 == 0 && this.fireworkExplosions != null && this.fireworkAge / 2 < this.fireworkExplosions.tagCount()) + { + int k = this.fireworkAge / 2; + NBTTagCompound nbttagcompound1 = this.fireworkExplosions.getCompoundTagAt(k); + int l = nbttagcompound1.getByte("Type"); + boolean flag4 = nbttagcompound1.getBoolean("Trail"); + boolean flag2 = nbttagcompound1.getBoolean("Flicker"); + int[] aint = nbttagcompound1.getIntArray("Colors"); + int[] aint1 = nbttagcompound1.getIntArray("FadeColors"); + + if (aint.length == 0) + { + aint = new int[] {ItemDye.DYE_COLORS[0]}; + } + + if (l == 1) + { + this.createBall(0.5D, 4, aint, aint1, flag4, flag2); + } + else if (l == 2) + { + this.createShaped(0.5D, new double[][] {{0.0D, 1.0D}, {0.3455D, 0.309D}, {0.9511D, 0.309D}, {0.3795918367346939D, -0.12653061224489795D}, {0.6122448979591837D, -0.8040816326530612D}, {0.0D, -0.35918367346938773D}}, aint, aint1, flag4, flag2, false); + } + else if (l == 3) + { + this.createShaped(0.5D, new double[][] {{0.0D, 0.2D}, {0.2D, 0.2D}, {0.2D, 0.6D}, {0.6D, 0.6D}, {0.6D, 0.2D}, {0.2D, 0.2D}, {0.2D, 0.0D}, {0.4D, 0.0D}, {0.4D, -0.6D}, {0.2D, -0.6D}, {0.2D, -0.4D}, {0.0D, -0.4D}}, aint, aint1, flag4, flag2, true); + } + else if (l == 4) + { + this.createBurst(aint, aint1, flag4, flag2); + } + else + { + this.createBall(0.25D, 2, aint, aint1, flag4, flag2); + } + + int j = aint[0]; + float f = (float)((j & 16711680) >> 16) / 255.0F; + float f1 = (float)((j & 65280) >> 8) / 255.0F; + float f2 = (float)((j & 255) >> 0) / 255.0F; + ParticleFirework.Overlay particlefirework$overlay = new ParticleFirework.Overlay(this.world, this.posX, this.posY, this.posZ); + particlefirework$overlay.setRBGColorF(f, f1, f2); + this.manager.addEffect(particlefirework$overlay); + } + + ++this.fireworkAge; + + if (this.fireworkAge > this.particleMaxAge) + { + if (this.twinkle) + { + boolean flag3 = this.isFarFromCamera(); + SoundEvent soundevent = flag3 ? SoundEvents.ENTITY_FIREWORK_TWINKLE_FAR : SoundEvents.ENTITY_FIREWORK_TWINKLE; + this.world.playSound(this.posX, this.posY, this.posZ, soundevent, SoundCategory.AMBIENT, 20.0F, 0.9F + this.rand.nextFloat() * 0.15F, true); + } + + this.setExpired(); + } + } + + private boolean isFarFromCamera() + { + Minecraft minecraft = Minecraft.getMinecraft(); + return minecraft == null || minecraft.getRenderViewEntity() == null || minecraft.getRenderViewEntity().getDistanceSq(this.posX, this.posY, this.posZ) >= 256.0D; + } + + /** + * Creates a single particle. + */ + private void createParticle(double p_92034_1_, double p_92034_3_, double p_92034_5_, double p_92034_7_, double p_92034_9_, double p_92034_11_, int[] p_92034_13_, int[] p_92034_14_, boolean p_92034_15_, boolean p_92034_16_) + { + ParticleFirework.Spark particlefirework$spark = new ParticleFirework.Spark(this.world, p_92034_1_, p_92034_3_, p_92034_5_, p_92034_7_, p_92034_9_, p_92034_11_, this.manager); + particlefirework$spark.setAlphaF(0.99F); + particlefirework$spark.setTrail(p_92034_15_); + particlefirework$spark.setTwinkle(p_92034_16_); + int i = this.rand.nextInt(p_92034_13_.length); + particlefirework$spark.setColor(p_92034_13_[i]); + + if (p_92034_14_ != null && p_92034_14_.length > 0) + { + particlefirework$spark.setColorFade(p_92034_14_[this.rand.nextInt(p_92034_14_.length)]); + } + + this.manager.addEffect(particlefirework$spark); + } + + /** + * Creates a small ball or large ball type explosion effect. + */ + private void createBall(double speed, int size, int[] colours, int[] fadeColours, boolean trail, boolean twinkleIn) + { + double d0 = this.posX; + double d1 = this.posY; + double d2 = this.posZ; + + for (int i = -size; i <= size; ++i) + { + for (int j = -size; j <= size; ++j) + { + for (int k = -size; k <= size; ++k) + { + double d3 = (double)j + (this.rand.nextDouble() - this.rand.nextDouble()) * 0.5D; + double d4 = (double)i + (this.rand.nextDouble() - this.rand.nextDouble()) * 0.5D; + double d5 = (double)k + (this.rand.nextDouble() - this.rand.nextDouble()) * 0.5D; + double d6 = (double)MathHelper.sqrt(d3 * d3 + d4 * d4 + d5 * d5) / speed + this.rand.nextGaussian() * 0.05D; + this.createParticle(d0, d1, d2, d3 / d6, d4 / d6, d5 / d6, colours, fadeColours, trail, twinkleIn); + + if (i != -size && i != size && j != -size && j != size) + { + k += size * 2 - 1; + } + } + } + } + } + + /** + * Creates a creeper-shaped or star-shaped explosion. + */ + private void createShaped(double speed, double[][] shape, int[] colours, int[] fadeColours, boolean trail, boolean twinkleIn, boolean p_92038_8_) + { + double d0 = shape[0][0]; + double d1 = shape[0][1]; + this.createParticle(this.posX, this.posY, this.posZ, d0 * speed, d1 * speed, 0.0D, colours, fadeColours, trail, twinkleIn); + float f = this.rand.nextFloat() * (float)Math.PI; + double d2 = p_92038_8_ ? 0.034D : 0.34D; + + for (int i = 0; i < 3; ++i) + { + double d3 = (double)f + (double)((float)i * (float)Math.PI) * d2; + double d4 = d0; + double d5 = d1; + + for (int j = 1; j < shape.length; ++j) + { + double d6 = shape[j][0]; + double d7 = shape[j][1]; + + for (double d8 = 0.25D; d8 <= 1.0D; d8 += 0.25D) + { + double d9 = (d4 + (d6 - d4) * d8) * speed; + double d10 = (d5 + (d7 - d5) * d8) * speed; + double d11 = d9 * Math.sin(d3); + d9 = d9 * Math.cos(d3); + + for (double d12 = -1.0D; d12 <= 1.0D; d12 += 2.0D) + { + this.createParticle(this.posX, this.posY, this.posZ, d9 * d12, d10, d11 * d12, colours, fadeColours, trail, twinkleIn); + } + } + + d4 = d6; + d5 = d7; + } + } + } + + /** + * Creates a burst type explosion effect. + */ + private void createBurst(int[] colours, int[] fadeColours, boolean trail, boolean twinkleIn) + { + double d0 = this.rand.nextGaussian() * 0.05D; + double d1 = this.rand.nextGaussian() * 0.05D; + + for (int i = 0; i < 70; ++i) + { + double d2 = this.motionX * 0.5D + this.rand.nextGaussian() * 0.15D + d0; + double d3 = this.motionZ * 0.5D + this.rand.nextGaussian() * 0.15D + d1; + double d4 = this.motionY * 0.5D + this.rand.nextDouble() * 0.5D; + this.createParticle(this.posX, this.posY, this.posZ, d2, d4, d3, colours, fadeColours, trail, twinkleIn); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite + * sheet, 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 0; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFlame.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFlame.java new file mode 100644 index 0000000..dce7491 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFlame.java @@ -0,0 +1,97 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleFlame extends Particle +{ + /** the scale of the flame FX */ + private final float flameScale; + + protected ParticleFlame(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.motionX = this.motionX * 0.009999999776482582D + xSpeedIn; + this.motionY = this.motionY * 0.009999999776482582D + ySpeedIn; + this.motionZ = this.motionZ * 0.009999999776482582D + zSpeedIn; + this.posX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.05F); + this.posY += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.05F); + this.posZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.05F); + this.flameScale = this.particleScale; + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)) + 4; + this.setParticleTextureIndex(48); + } + + public void move(double x, double y, double z) + { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge; + this.particleScale = this.flameScale * (1.0F - f * f * 0.5F); + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public int getBrightnessForRender(float p_189214_1_) + { + float f = ((float)this.particleAge + p_189214_1_) / (float)this.particleMaxAge; + f = MathHelper.clamp(f, 0.0F, 1.0F); + int i = super.getBrightnessForRender(p_189214_1_); + int j = i & 255; + int k = i >> 16 & 255; + j = j + (int)(f * 15.0F * 16.0F); + + if (j > 240) + { + j = 240; + } + + return j | k << 16; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleFlame(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFootStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFootStep.java new file mode 100644 index 0000000..a39adc3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleFootStep.java @@ -0,0 +1,95 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleFootStep extends Particle +{ + private static final ResourceLocation FOOTPRINT_TEXTURE = new ResourceLocation("textures/particle/footprint.png"); + private int footstepAge; + private final int footstepMaxAge; + private final TextureManager currentFootSteps; + + protected ParticleFootStep(TextureManager currentFootStepsIn, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.currentFootSteps = currentFootStepsIn; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.footstepMaxAge = 200; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.footstepAge + partialTicks) / (float)this.footstepMaxAge; + f = f * f; + float f1 = 2.0F - f * 2.0F; + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + + f1 = f1 * 0.2F; + GlStateManager.disableLighting(); + float f2 = 0.125F; + float f3 = (float)(this.posX - interpPosX); + float f4 = (float)(this.posY - interpPosY); + float f5 = (float)(this.posZ - interpPosZ); + float f6 = this.world.getLightBrightness(new BlockPos(this.posX, this.posY, this.posZ)); + this.currentFootSteps.bindTexture(FOOTPRINT_TEXTURE); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + buffer.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + buffer.pos((double)(f3 - 0.125F), (double)f4, (double)(f5 + 0.125F)).tex(0.0D, 1.0D).color(f6, f6, f6, f1).endVertex(); + buffer.pos((double)(f3 + 0.125F), (double)f4, (double)(f5 + 0.125F)).tex(1.0D, 1.0D).color(f6, f6, f6, f1).endVertex(); + buffer.pos((double)(f3 + 0.125F), (double)f4, (double)(f5 - 0.125F)).tex(1.0D, 0.0D).color(f6, f6, f6, f1).endVertex(); + buffer.pos((double)(f3 - 0.125F), (double)f4, (double)(f5 - 0.125F)).tex(0.0D, 0.0D).color(f6, f6, f6, f1).endVertex(); + Tessellator.getInstance().draw(); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + } + + public void onUpdate() + { + ++this.footstepAge; + + if (this.footstepAge == this.footstepMaxAge) + { + this.setExpired(); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 3; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleFootStep(Minecraft.getMinecraft().getTextureManager(), worldIn, xCoordIn, yCoordIn, zCoordIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleHeart.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleHeart.java new file mode 100644 index 0000000..79308d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleHeart.java @@ -0,0 +1,95 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleHeart extends Particle +{ + float particleScaleOverTime; + + protected ParticleHeart(World worldIn, double p_i1211_2_, double p_i1211_4_, double p_i1211_6_, double p_i1211_8_, double p_i1211_10_, double p_i1211_12_) + { + this(worldIn, p_i1211_2_, p_i1211_4_, p_i1211_6_, p_i1211_8_, p_i1211_10_, p_i1211_12_, 2.0F); + } + + protected ParticleHeart(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i46354_8_, double p_i46354_10_, double p_i46354_12_, float scale) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.009999999776482582D; + this.motionY *= 0.009999999776482582D; + this.motionZ *= 0.009999999776482582D; + this.motionY += 0.1D; + this.particleScale *= 0.75F; + this.particleScale *= scale; + this.particleScaleOverTime = this.particleScale; + this.particleMaxAge = 16; + this.setParticleTextureIndex(80); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.particleScaleOverTime * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.8600000143051147D; + this.motionY *= 0.8600000143051147D; + this.motionZ *= 0.8600000143051147D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class AngryVillagerFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleHeart(worldIn, xCoordIn, yCoordIn + 0.5D, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + particle.setParticleTextureIndex(81); + particle.setRBGColorF(1.0F, 1.0F, 1.0F); + return particle; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleHeart(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleItemPickup.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleItemPickup.java new file mode 100644 index 0000000..cfe6ec1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleItemPickup.java @@ -0,0 +1,78 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleItemPickup extends Particle +{ + private final Entity item; + private final Entity target; + private int age; + private final int maxAge; + private final float yOffset; + private final RenderManager renderManager = Minecraft.getMinecraft().getRenderManager(); + + public ParticleItemPickup(World worldIn, Entity p_i1233_2_, Entity p_i1233_3_, float p_i1233_4_) + { + super(worldIn, p_i1233_2_.posX, p_i1233_2_.posY, p_i1233_2_.posZ, p_i1233_2_.motionX, p_i1233_2_.motionY, p_i1233_2_.motionZ); + this.item = p_i1233_2_; + this.target = p_i1233_3_; + this.maxAge = 3; + this.yOffset = p_i1233_4_; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.age + partialTicks) / (float)this.maxAge; + f = f * f; + double d0 = this.item.posX; + double d1 = this.item.posY; + double d2 = this.item.posZ; + double d3 = this.target.lastTickPosX + (this.target.posX - this.target.lastTickPosX) * (double)partialTicks; + double d4 = this.target.lastTickPosY + (this.target.posY - this.target.lastTickPosY) * (double)partialTicks + (double)this.yOffset; + double d5 = this.target.lastTickPosZ + (this.target.posZ - this.target.lastTickPosZ) * (double)partialTicks; + double d6 = d0 + (d3 - d0) * (double)f; + double d7 = d1 + (d4 - d1) * (double)f; + double d8 = d2 + (d5 - d2) * (double)f; + int i = this.getBrightnessForRender(partialTicks); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + d6 = d6 - interpPosX; + d7 = d7 - interpPosY; + d8 = d8 - interpPosZ; + GlStateManager.enableLighting(); + this.renderManager.renderEntity(this.item, d6, d7, d8, this.item.rotationYaw, partialTicks, false); + } + + public void onUpdate() + { + ++this.age; + + if (this.age == this.maxAge) + { + this.setExpired(); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleLava.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleLava.java new file mode 100644 index 0000000..5bac416 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleLava.java @@ -0,0 +1,88 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleLava extends Particle +{ + private final float lavaParticleScale; + + protected ParticleLava(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.800000011920929D; + this.motionY *= 0.800000011920929D; + this.motionZ *= 0.800000011920929D; + this.motionY = (double)(this.rand.nextFloat() * 0.4F + 0.05F); + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.particleScale *= this.rand.nextFloat() * 2.0F + 0.2F; + this.lavaParticleScale = this.particleScale; + this.particleMaxAge = (int)(16.0D / (Math.random() * 0.8D + 0.2D)); + this.setParticleTextureIndex(49); + } + + public int getBrightnessForRender(float p_189214_1_) + { + int i = super.getBrightnessForRender(p_189214_1_); + int j = 240; + int k = i >> 16 & 255; + return 240 | k << 16; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge; + this.particleScale = this.lavaParticleScale * (1.0F - f * f); + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + float f = (float)this.particleAge / (float)this.particleMaxAge; + + if (this.rand.nextFloat() > f) + { + this.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, this.posX, this.posY, this.posZ, this.motionX, this.motionY, this.motionZ); + } + + this.motionY -= 0.03D; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9990000128746033D; + this.motionY *= 0.9990000128746033D; + this.motionZ *= 0.9990000128746033D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleLava(worldIn, xCoordIn, yCoordIn, zCoordIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleManager.java new file mode 100644 index 0000000..fbbf9db --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleManager.java @@ -0,0 +1,517 @@ +package net.minecraft.client.particle; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; +import java.util.ArrayDeque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleManager +{ + private static final ResourceLocation PARTICLE_TEXTURES = new ResourceLocation("textures/particle/particles.png"); + /** Reference to the World object. */ + protected World world; + private final ArrayDeque[][] fxLayers = new ArrayDeque[4][]; + private final Queue particleEmitters = Queues.newArrayDeque(); + private final TextureManager renderer; + /** RNG. */ + private final Random rand = new Random(); + private final Map particleTypes = Maps.newHashMap(); + private final Queue queue = Queues.newArrayDeque(); + + public ParticleManager(World worldIn, TextureManager rendererIn) + { + this.world = worldIn; + this.renderer = rendererIn; + + for (int i = 0; i < 4; ++i) + { + this.fxLayers[i] = new ArrayDeque[2]; + + for (int j = 0; j < 2; ++j) + { + this.fxLayers[i][j] = Queues.newArrayDeque(); + } + } + + this.registerVanillaParticles(); + } + + private void registerVanillaParticles() + { + this.registerParticle(EnumParticleTypes.EXPLOSION_NORMAL.getParticleID(), new ParticleExplosion.Factory()); + this.registerParticle(EnumParticleTypes.SPIT.getParticleID(), new ParticleSpit.Factory()); + this.registerParticle(EnumParticleTypes.WATER_BUBBLE.getParticleID(), new ParticleBubble.Factory()); + this.registerParticle(EnumParticleTypes.WATER_SPLASH.getParticleID(), new ParticleSplash.Factory()); + this.registerParticle(EnumParticleTypes.WATER_WAKE.getParticleID(), new ParticleWaterWake.Factory()); + this.registerParticle(EnumParticleTypes.WATER_DROP.getParticleID(), new ParticleRain.Factory()); + this.registerParticle(EnumParticleTypes.SUSPENDED.getParticleID(), new ParticleSuspend.Factory()); + this.registerParticle(EnumParticleTypes.SUSPENDED_DEPTH.getParticleID(), new ParticleSuspendedTown.Factory()); + this.registerParticle(EnumParticleTypes.CRIT.getParticleID(), new ParticleCrit.Factory()); + this.registerParticle(EnumParticleTypes.CRIT_MAGIC.getParticleID(), new ParticleCrit.MagicFactory()); + this.registerParticle(EnumParticleTypes.SMOKE_NORMAL.getParticleID(), new ParticleSmokeNormal.Factory()); + this.registerParticle(EnumParticleTypes.SMOKE_LARGE.getParticleID(), new ParticleSmokeLarge.Factory()); + this.registerParticle(EnumParticleTypes.SPELL.getParticleID(), new ParticleSpell.Factory()); + this.registerParticle(EnumParticleTypes.SPELL_INSTANT.getParticleID(), new ParticleSpell.InstantFactory()); + this.registerParticle(EnumParticleTypes.SPELL_MOB.getParticleID(), new ParticleSpell.MobFactory()); + this.registerParticle(EnumParticleTypes.SPELL_MOB_AMBIENT.getParticleID(), new ParticleSpell.AmbientMobFactory()); + this.registerParticle(EnumParticleTypes.SPELL_WITCH.getParticleID(), new ParticleSpell.WitchFactory()); + this.registerParticle(EnumParticleTypes.DRIP_WATER.getParticleID(), new ParticleDrip.WaterFactory()); + this.registerParticle(EnumParticleTypes.DRIP_LAVA.getParticleID(), new ParticleDrip.LavaFactory()); + this.registerParticle(EnumParticleTypes.VILLAGER_ANGRY.getParticleID(), new ParticleHeart.AngryVillagerFactory()); + this.registerParticle(EnumParticleTypes.VILLAGER_HAPPY.getParticleID(), new ParticleSuspendedTown.HappyVillagerFactory()); + this.registerParticle(EnumParticleTypes.TOWN_AURA.getParticleID(), new ParticleSuspendedTown.Factory()); + this.registerParticle(EnumParticleTypes.NOTE.getParticleID(), new ParticleNote.Factory()); + this.registerParticle(EnumParticleTypes.PORTAL.getParticleID(), new ParticlePortal.Factory()); + this.registerParticle(EnumParticleTypes.ENCHANTMENT_TABLE.getParticleID(), new ParticleEnchantmentTable.EnchantmentTable()); + this.registerParticle(EnumParticleTypes.FLAME.getParticleID(), new ParticleFlame.Factory()); + this.registerParticle(EnumParticleTypes.LAVA.getParticleID(), new ParticleLava.Factory()); + this.registerParticle(EnumParticleTypes.FOOTSTEP.getParticleID(), new ParticleFootStep.Factory()); + this.registerParticle(EnumParticleTypes.CLOUD.getParticleID(), new ParticleCloud.Factory()); + this.registerParticle(EnumParticleTypes.REDSTONE.getParticleID(), new ParticleRedstone.Factory()); + this.registerParticle(EnumParticleTypes.FALLING_DUST.getParticleID(), new ParticleFallingDust.Factory()); + this.registerParticle(EnumParticleTypes.SNOWBALL.getParticleID(), new ParticleBreaking.SnowballFactory()); + this.registerParticle(EnumParticleTypes.SNOW_SHOVEL.getParticleID(), new ParticleSnowShovel.Factory()); + this.registerParticle(EnumParticleTypes.SLIME.getParticleID(), new ParticleBreaking.SlimeFactory()); + this.registerParticle(EnumParticleTypes.HEART.getParticleID(), new ParticleHeart.Factory()); + this.registerParticle(EnumParticleTypes.BARRIER.getParticleID(), new Barrier.Factory()); + this.registerParticle(EnumParticleTypes.ITEM_CRACK.getParticleID(), new ParticleBreaking.Factory()); + this.registerParticle(EnumParticleTypes.BLOCK_CRACK.getParticleID(), new ParticleDigging.Factory()); + this.registerParticle(EnumParticleTypes.BLOCK_DUST.getParticleID(), new ParticleBlockDust.Factory()); + this.registerParticle(EnumParticleTypes.EXPLOSION_HUGE.getParticleID(), new ParticleExplosionHuge.Factory()); + this.registerParticle(EnumParticleTypes.EXPLOSION_LARGE.getParticleID(), new ParticleExplosionLarge.Factory()); + this.registerParticle(EnumParticleTypes.FIREWORKS_SPARK.getParticleID(), new ParticleFirework.Factory()); + this.registerParticle(EnumParticleTypes.MOB_APPEARANCE.getParticleID(), new ParticleMobAppearance.Factory()); + this.registerParticle(EnumParticleTypes.DRAGON_BREATH.getParticleID(), new ParticleDragonBreath.Factory()); + this.registerParticle(EnumParticleTypes.END_ROD.getParticleID(), new ParticleEndRod.Factory()); + this.registerParticle(EnumParticleTypes.DAMAGE_INDICATOR.getParticleID(), new ParticleCrit.DamageIndicatorFactory()); + this.registerParticle(EnumParticleTypes.SWEEP_ATTACK.getParticleID(), new ParticleSweepAttack.Factory()); + this.registerParticle(EnumParticleTypes.TOTEM.getParticleID(), new ParticleTotem.Factory()); + } + + public void registerParticle(int id, IParticleFactory particleFactory) + { + this.particleTypes.put(Integer.valueOf(id), particleFactory); + } + + public void emitParticleAtEntity(Entity entityIn, EnumParticleTypes particleTypes) + { + this.particleEmitters.add(new ParticleEmitter(this.world, entityIn, particleTypes)); + } + + public void emitParticleAtEntity(Entity p_191271_1_, EnumParticleTypes p_191271_2_, int p_191271_3_) + { + this.particleEmitters.add(new ParticleEmitter(this.world, p_191271_1_, p_191271_2_, p_191271_3_)); + } + + /** + * Spawns the relevant particle according to the particle id. + */ + @Nullable + public Particle spawnEffectParticle(int particleId, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + IParticleFactory iparticlefactory = this.particleTypes.get(Integer.valueOf(particleId)); + + if (iparticlefactory != null) + { + Particle particle = iparticlefactory.createParticle(particleId, this.world, xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + + if (particle != null) + { + this.addEffect(particle); + return particle; + } + } + + return null; + } + + public void addEffect(Particle effect) + { + if (effect == null) return; //Forge: Prevent modders from being bad and adding nulls causing untraceable NPEs. + this.queue.add(effect); + } + + public void updateEffects() + { + for (int i = 0; i < 4; ++i) + { + this.updateEffectLayer(i); + } + + if (!this.particleEmitters.isEmpty()) + { + List list = Lists.newArrayList(); + + for (ParticleEmitter particleemitter : this.particleEmitters) + { + particleemitter.onUpdate(); + + if (!particleemitter.isAlive()) + { + list.add(particleemitter); + } + } + + this.particleEmitters.removeAll(list); + } + + if (!this.queue.isEmpty()) + { + for (Particle particle = this.queue.poll(); particle != null; particle = this.queue.poll()) + { + int j = particle.getFXLayer(); + int k = particle.shouldDisableDepth() ? 0 : 1; + + if (this.fxLayers[j][k].size() >= 16384) + { + this.fxLayers[j][k].removeFirst(); + } + + this.fxLayers[j][k].add(particle); + } + } + } + + private void updateEffectLayer(int layer) + { + this.world.profiler.startSection(String.valueOf(layer)); + + for (int i = 0; i < 2; ++i) + { + this.world.profiler.startSection(String.valueOf(i)); + this.tickParticleList(this.fxLayers[layer][i]); + this.world.profiler.endSection(); + } + + this.world.profiler.endSection(); + } + + private void tickParticleList(Queue p_187240_1_) + { + if (!p_187240_1_.isEmpty()) + { + Iterator iterator = p_187240_1_.iterator(); + + while (iterator.hasNext()) + { + Particle particle = iterator.next(); + this.tickParticle(particle); + + if (!particle.isAlive()) + { + iterator.remove(); + } + } + } + } + + private void tickParticle(final Particle particle) + { + try + { + particle.onUpdate(); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Ticking Particle"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Particle being ticked"); + final int i = particle.getFXLayer(); + crashreportcategory.addDetail("Particle", new ICrashReportDetail() + { + public String call() throws Exception + { + return particle.toString(); + } + }); + crashreportcategory.addDetail("Particle Type", new ICrashReportDetail() + { + public String call() throws Exception + { + if (i == 0) + { + return "MISC_TEXTURE"; + } + else if (i == 1) + { + return "TERRAIN_TEXTURE"; + } + else + { + return i == 3 ? "ENTITY_PARTICLE_TEXTURE" : "Unknown - " + i; + } + } + }); + throw new ReportedException(crashreport); + } + } + + /** + * Renders all current particles. Args player, partialTickTime + */ + public void renderParticles(Entity entityIn, float partialTicks) + { + float f = ActiveRenderInfo.getRotationX(); + float f1 = ActiveRenderInfo.getRotationZ(); + float f2 = ActiveRenderInfo.getRotationYZ(); + float f3 = ActiveRenderInfo.getRotationXY(); + float f4 = ActiveRenderInfo.getRotationXZ(); + Particle.interpPosX = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; + Particle.interpPosY = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; + Particle.interpPosZ = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; + Particle.cameraViewDir = entityIn.getLook(partialTicks); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.alphaFunc(516, 0.003921569F); + + for (int i_nf = 0; i_nf < 3; ++i_nf) + { + final int i = i_nf; + + for (int j = 0; j < 2; ++j) + { + if (!this.fxLayers[i][j].isEmpty()) + { + switch (j) + { + case 0: + GlStateManager.depthMask(false); + break; + case 1: + GlStateManager.depthMask(true); + } + + switch (i) + { + case 0: + default: + this.renderer.bindTexture(PARTICLE_TEXTURES); + break; + case 1: + this.renderer.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + + for (final Particle particle : this.fxLayers[i][j]) + { + try + { + particle.renderParticle(bufferbuilder, entityIn, partialTicks, f, f4, f1, f2, f3); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering Particle"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Particle being rendered"); + crashreportcategory.addDetail("Particle", new ICrashReportDetail() + { + public String call() throws Exception + { + return particle.toString(); + } + }); + crashreportcategory.addDetail("Particle Type", new ICrashReportDetail() + { + public String call() throws Exception + { + if (i == 0) + { + return "MISC_TEXTURE"; + } + else if (i == 1) + { + return "TERRAIN_TEXTURE"; + } + else + { + return i == 3 ? "ENTITY_PARTICLE_TEXTURE" : "Unknown - " + i; + } + } + }); + throw new ReportedException(crashreport); + } + } + + tessellator.draw(); + } + } + } + + GlStateManager.depthMask(true); + GlStateManager.disableBlend(); + GlStateManager.alphaFunc(516, 0.1F); + } + + public void renderLitParticles(Entity entityIn, float partialTick) + { + float f = 0.017453292F; + float f1 = MathHelper.cos(entityIn.rotationYaw * 0.017453292F); + float f2 = MathHelper.sin(entityIn.rotationYaw * 0.017453292F); + float f3 = -f2 * MathHelper.sin(entityIn.rotationPitch * 0.017453292F); + float f4 = f1 * MathHelper.sin(entityIn.rotationPitch * 0.017453292F); + float f5 = MathHelper.cos(entityIn.rotationPitch * 0.017453292F); + + for (int i = 0; i < 2; ++i) + { + Queue queue = this.fxLayers[3][i]; + + if (!queue.isEmpty()) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + for (Particle particle : queue) + { + particle.renderParticle(bufferbuilder, entityIn, partialTick, f1, f5, f2, f3, f4); + } + } + } + } + + public void clearEffects(@Nullable World worldIn) + { + this.world = worldIn; + + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 2; ++j) + { + this.fxLayers[i][j].clear(); + } + } + + this.particleEmitters.clear(); + } + + public void addBlockDestroyEffects(BlockPos pos, IBlockState state) + { + if (!state.getBlock().isAir(state, this.world, pos) && !state.getBlock().addDestroyEffects(world, pos, this)) + { + state = state.getActualState(this.world, pos); + int i = 4; + + for (int j = 0; j < 4; ++j) + { + for (int k = 0; k < 4; ++k) + { + for (int l = 0; l < 4; ++l) + { + double d0 = ((double)j + 0.5D) / 4.0D; + double d1 = ((double)k + 0.5D) / 4.0D; + double d2 = ((double)l + 0.5D) / 4.0D; + this.addEffect((new ParticleDigging(this.world, (double)pos.getX() + d0, (double)pos.getY() + d1, (double)pos.getZ() + d2, d0 - 0.5D, d1 - 0.5D, d2 - 0.5D, state)).setBlockPos(pos)); + } + } + } + } + } + + /** + * Adds block hit particles for the specified block + */ + public void addBlockHitEffects(BlockPos pos, EnumFacing side) + { + IBlockState iblockstate = this.world.getBlockState(pos); + + if (iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE) + { + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + float f = 0.1F; + AxisAlignedBB axisalignedbb = iblockstate.getBoundingBox(this.world, pos); + double d0 = (double)i + this.rand.nextDouble() * (axisalignedbb.maxX - axisalignedbb.minX - 0.20000000298023224D) + 0.10000000149011612D + axisalignedbb.minX; + double d1 = (double)j + this.rand.nextDouble() * (axisalignedbb.maxY - axisalignedbb.minY - 0.20000000298023224D) + 0.10000000149011612D + axisalignedbb.minY; + double d2 = (double)k + this.rand.nextDouble() * (axisalignedbb.maxZ - axisalignedbb.minZ - 0.20000000298023224D) + 0.10000000149011612D + axisalignedbb.minZ; + + if (side == EnumFacing.DOWN) + { + d1 = (double)j + axisalignedbb.minY - 0.10000000149011612D; + } + + if (side == EnumFacing.UP) + { + d1 = (double)j + axisalignedbb.maxY + 0.10000000149011612D; + } + + if (side == EnumFacing.NORTH) + { + d2 = (double)k + axisalignedbb.minZ - 0.10000000149011612D; + } + + if (side == EnumFacing.SOUTH) + { + d2 = (double)k + axisalignedbb.maxZ + 0.10000000149011612D; + } + + if (side == EnumFacing.WEST) + { + d0 = (double)i + axisalignedbb.minX - 0.10000000149011612D; + } + + if (side == EnumFacing.EAST) + { + d0 = (double)i + axisalignedbb.maxX + 0.10000000149011612D; + } + + this.addEffect((new ParticleDigging(this.world, d0, d1, d2, 0.0D, 0.0D, 0.0D, iblockstate)).setBlockPos(pos).multiplyVelocity(0.2F).multipleParticleScaleBy(0.6F)); + } + } + + public String getStatistics() + { + int i = 0; + + for (int j = 0; j < 4; ++j) + { + for (int k = 0; k < 2; ++k) + { + i += this.fxLayers[j][k].size(); + } + } + + return "" + i; + } + + public void addBlockHitEffects(BlockPos pos, net.minecraft.util.math.RayTraceResult target) + { + IBlockState state = world.getBlockState(pos); + if (state != null && !state.getBlock().addHitEffects(state, world, target, this)) + { + addBlockHitEffects(pos, target.sideHit); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleMobAppearance.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleMobAppearance.java new file mode 100644 index 0000000..4e424ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleMobAppearance.java @@ -0,0 +1,98 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityElderGuardian; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleMobAppearance extends Particle +{ + private EntityLivingBase entity; + + protected ParticleMobAppearance(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.particleGravity = 0.0F; + this.particleMaxAge = 30; + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 3; + } + + public void onUpdate() + { + super.onUpdate(); + + if (this.entity == null) + { + EntityElderGuardian entityelderguardian = new EntityElderGuardian(this.world); + entityelderguardian.setGhost(); + this.entity = entityelderguardian; + } + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + if (this.entity != null) + { + RenderManager rendermanager = Minecraft.getMinecraft().getRenderManager(); + rendermanager.setRenderPosition(Particle.interpPosX, Particle.interpPosY, Particle.interpPosZ); + float f = 0.42553192F; + float f1 = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge; + GlStateManager.depthMask(true); + GlStateManager.enableBlend(); + GlStateManager.enableDepth(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + float f2 = 240.0F; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + GlStateManager.pushMatrix(); + float f3 = 0.05F + 0.5F * MathHelper.sin(f1 * (float)Math.PI); + GlStateManager.color(1.0F, 1.0F, 1.0F, f3); + GlStateManager.translate(0.0F, 1.8F, 0.0F); + GlStateManager.rotate(180.0F - entityIn.rotationYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(60.0F - 150.0F * f1 - entityIn.rotationPitch, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, -0.4F, -1.5F); + GlStateManager.scale(0.42553192F, 0.42553192F, 0.42553192F); + this.entity.rotationYaw = 0.0F; + this.entity.rotationYawHead = 0.0F; + this.entity.prevRotationYaw = 0.0F; + this.entity.prevRotationYawHead = 0.0F; + rendermanager.renderEntity(this.entity, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks, false); + GlStateManager.popMatrix(); + GlStateManager.enableDepth(); + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleMobAppearance(worldIn, xCoordIn, yCoordIn, zCoordIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleNote.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleNote.java new file mode 100644 index 0000000..8b81b40 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleNote.java @@ -0,0 +1,86 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleNote extends Particle +{ + float noteParticleScale; + + protected ParticleNote(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i46353_8_, double p_i46353_10_, double p_i46353_12_) + { + this(worldIn, xCoordIn, yCoordIn, zCoordIn, p_i46353_8_, p_i46353_10_, p_i46353_12_, 2.0F); + } + + protected ParticleNote(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i1217_8_, double p_i1217_10_, double p_i1217_12_, float p_i1217_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.009999999776482582D; + this.motionY *= 0.009999999776482582D; + this.motionZ *= 0.009999999776482582D; + this.motionY += 0.2D; + this.particleRed = MathHelper.sin(((float)p_i1217_8_ + 0.0F) * ((float)Math.PI * 2F)) * 0.65F + 0.35F; + this.particleGreen = MathHelper.sin(((float)p_i1217_8_ + 0.33333334F) * ((float)Math.PI * 2F)) * 0.65F + 0.35F; + this.particleBlue = MathHelper.sin(((float)p_i1217_8_ + 0.6666667F) * ((float)Math.PI * 2F)) * 0.65F + 0.35F; + this.particleScale *= 0.75F; + this.particleScale *= p_i1217_14_; + this.noteParticleScale = this.particleScale; + this.particleMaxAge = 6; + this.setParticleTextureIndex(64); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.noteParticleScale * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.6600000262260437D; + this.motionY *= 0.6600000262260437D; + this.motionZ *= 0.6600000262260437D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleNote(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticlePortal.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticlePortal.java new file mode 100644 index 0000000..59004c5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticlePortal.java @@ -0,0 +1,102 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticlePortal extends Particle +{ + private final float portalParticleScale; + private final double portalPosX; + private final double portalPosY; + private final double portalPosZ; + + protected ParticlePortal(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.motionX = xSpeedIn; + this.motionY = ySpeedIn; + this.motionZ = zSpeedIn; + this.posX = xCoordIn; + this.posY = yCoordIn; + this.posZ = zCoordIn; + this.portalPosX = this.posX; + this.portalPosY = this.posY; + this.portalPosZ = this.posZ; + float f = this.rand.nextFloat() * 0.6F + 0.4F; + this.particleScale = this.rand.nextFloat() * 0.2F + 0.5F; + this.portalParticleScale = this.particleScale; + this.particleRed = f * 0.9F; + this.particleGreen = f * 0.3F; + this.particleBlue = f; + this.particleMaxAge = (int)(Math.random() * 10.0D) + 40; + this.setParticleTextureIndex((int)(Math.random() * 8.0D)); + } + + public void move(double x, double y, double z) + { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge; + f = 1.0F - f; + f = f * f; + f = 1.0F - f; + this.particleScale = this.portalParticleScale * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public int getBrightnessForRender(float p_189214_1_) + { + int i = super.getBrightnessForRender(p_189214_1_); + float f = (float)this.particleAge / (float)this.particleMaxAge; + f = f * f; + f = f * f; + int j = i & 255; + int k = i >> 16 & 255; + k = k + (int)(f * 15.0F * 16.0F); + + if (k > 240) + { + k = 240; + } + + return j | k << 16; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float f = (float)this.particleAge / (float)this.particleMaxAge; + float f1 = -f + f * f * 2.0F; + float f2 = 1.0F - f1; + this.posX = this.portalPosX + this.motionX * (double)f2; + this.posY = this.portalPosY + this.motionY * (double)f2 + (double)(1.0F - f); + this.posZ = this.portalPosZ + this.motionZ * (double)f2; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticlePortal(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleRain.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleRain.java new file mode 100644 index 0000000..b30dc8a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleRain.java @@ -0,0 +1,91 @@ +package net.minecraft.client.particle; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleRain extends Particle +{ + protected ParticleRain(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.30000001192092896D; + this.motionY = Math.random() * 0.20000000298023224D + 0.10000000149011612D; + this.motionZ *= 0.30000001192092896D; + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.setParticleTextureIndex(19 + this.rand.nextInt(4)); + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)this.particleGravity; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + + if (this.onGround) + { + if (Math.random() < 0.5D) + { + this.setExpired(); + } + + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + + BlockPos blockpos = new BlockPos(this.posX, this.posY, this.posZ); + IBlockState iblockstate = this.world.getBlockState(blockpos); + Material material = iblockstate.getMaterial(); + + if (material.isLiquid() || material.isSolid()) + { + double d0; + + if (iblockstate.getBlock() instanceof BlockLiquid) + { + d0 = (double)(1.0F - BlockLiquid.getLiquidHeightPercent(((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue())); + } + else + { + d0 = iblockstate.getBoundingBox(this.world, blockpos).maxY; + } + + double d1 = (double)MathHelper.floor(this.posY) + d0; + + if (this.posY < d1) + { + this.setExpired(); + } + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleRain(worldIn, xCoordIn, yCoordIn, zCoordIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleRedstone.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleRedstone.java new file mode 100644 index 0000000..09f037f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleRedstone.java @@ -0,0 +1,93 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleRedstone extends Particle +{ + float reddustParticleScale; + + protected ParticleRedstone(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, float p_i46349_8_, float p_i46349_9_, float p_i46349_10_) + { + this(worldIn, xCoordIn, yCoordIn, zCoordIn, 1.0F, p_i46349_8_, p_i46349_9_, p_i46349_10_); + } + + protected ParticleRedstone(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, float scale, float red, float green, float blue) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + + if (red == 0.0F) + { + red = 1.0F; + } + + float f = (float)Math.random() * 0.4F + 0.6F; + this.particleRed = ((float)(Math.random() * 0.20000000298023224D) + 0.8F) * red * f; + this.particleGreen = ((float)(Math.random() * 0.20000000298023224D) + 0.8F) * green * f; + this.particleBlue = ((float)(Math.random() * 0.20000000298023224D) + 0.8F) * blue * f; + this.particleScale *= 0.75F; + this.particleScale *= scale; + this.reddustParticleScale = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * scale); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.reddustParticleScale * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleRedstone(worldIn, xCoordIn, yCoordIn, zCoordIn, (float)xSpeedIn, (float)ySpeedIn, (float)zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSimpleAnimated.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSimpleAnimated.java new file mode 100644 index 0000000..dac6d16 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSimpleAnimated.java @@ -0,0 +1,108 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSimpleAnimated extends Particle +{ + /** + * The base texture index. The texture index starts at this + (numAgingFrames - 1), and works its way down to this + * number as the particle decays. + */ + private final int textureIdx; + /** How many different textures there are to progress through as the particle decays */ + private final int numAgingFrames; + /** Added to the ySpeed every tick. Usually a small (thousandths), negative value. */ + private final float yAccel; + private float baseAirFriction = 0.91F; + /** The red value to drift toward */ + private float fadeTargetRed; + /** The green value to drift toward */ + private float fadeTargetGreen; + /** The blue value to drift toward */ + private float fadeTargetBlue; + /** True if setColorFade has been called */ + private boolean fadingColor; + + public ParticleSimpleAnimated(World worldIn, double x, double y, double z, int textureIdxIn, int numFrames, float yAccelIn) + { + super(worldIn, x, y, z); + this.textureIdx = textureIdxIn; + this.numAgingFrames = numFrames; + this.yAccel = yAccelIn; + } + + public void setColor(int p_187146_1_) + { + float f = (float)((p_187146_1_ & 16711680) >> 16) / 255.0F; + float f1 = (float)((p_187146_1_ & 65280) >> 8) / 255.0F; + float f2 = (float)((p_187146_1_ & 255) >> 0) / 255.0F; + float f3 = 1.0F; + this.setRBGColorF(f * 1.0F, f1 * 1.0F, f2 * 1.0F); + } + + /** + * sets a color for the particle to drift toward (20% closer each tick, never actually getting very close) + */ + public void setColorFade(int rgb) + { + this.fadeTargetRed = (float)((rgb & 16711680) >> 16) / 255.0F; + this.fadeTargetGreen = (float)((rgb & 65280) >> 8) / 255.0F; + this.fadeTargetBlue = (float)((rgb & 255) >> 0) / 255.0F; + this.fadingColor = true; + } + + public boolean shouldDisableDepth() + { + return true; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + if (this.particleAge > this.particleMaxAge / 2) + { + this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge); + + if (this.fadingColor) + { + this.particleRed += (this.fadeTargetRed - this.particleRed) * 0.2F; + this.particleGreen += (this.fadeTargetGreen - this.particleGreen) * 0.2F; + this.particleBlue += (this.fadeTargetBlue - this.particleBlue) * 0.2F; + } + } + + this.setParticleTextureIndex(this.textureIdx + (this.numAgingFrames - 1 - this.particleAge * this.numAgingFrames / this.particleMaxAge)); + this.motionY += (double)this.yAccel; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)this.baseAirFriction; + this.motionY *= (double)this.baseAirFriction; + this.motionZ *= (double)this.baseAirFriction; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + public int getBrightnessForRender(float p_189214_1_) + { + return 15728880; + } + + protected void setBaseAirFriction(float p_191238_1_) + { + this.baseAirFriction = p_191238_1_; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSmokeLarge.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSmokeLarge.java new file mode 100644 index 0000000..3b77f6c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSmokeLarge.java @@ -0,0 +1,23 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSmokeLarge extends ParticleSmokeNormal +{ + protected ParticleSmokeLarge(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i1201_8_, double p_i1201_10_, double p_i1201_12_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, p_i1201_8_, p_i1201_10_, p_i1201_12_, 2.5F); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSmokeLarge(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSmokeNormal.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSmokeNormal.java new file mode 100644 index 0000000..0b453b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSmokeNormal.java @@ -0,0 +1,91 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSmokeNormal extends Particle +{ + float smokeParticleScale; + + private ParticleSmokeNormal(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i46347_8_, double p_i46347_10_, double p_i46347_12_) + { + this(worldIn, xCoordIn, yCoordIn, zCoordIn, p_i46347_8_, p_i46347_10_, p_i46347_12_, 1.0F); + } + + protected ParticleSmokeNormal(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i46348_8_, double p_i46348_10_, double p_i46348_12_, float p_i46348_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += p_i46348_8_; + this.motionY += p_i46348_10_; + this.motionZ += p_i46348_12_; + float f = (float)(Math.random() * 0.30000001192092896D); + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.particleScale *= 0.75F; + this.particleScale *= p_i46348_14_; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * p_i46348_14_); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.smokeParticleScale * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSmokeNormal(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSnowShovel.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSnowShovel.java new file mode 100644 index 0000000..ca5a1d6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSnowShovel.java @@ -0,0 +1,84 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSnowShovel extends Particle +{ + float snowDigParticleScale; + + protected ParticleSnowShovel(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + this(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn, 1.0F); + } + + protected ParticleSnowShovel(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, float p_i1228_14_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.motionX *= 0.10000000149011612D; + this.motionY *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + this.motionX += xSpeedIn; + this.motionY += ySpeedIn; + this.motionZ += zSpeedIn; + float f = 1.0F - (float)(Math.random() * 0.30000001192092896D); + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.particleScale *= 0.75F; + this.particleScale *= p_i1228_14_; + this.snowDigParticleScale = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * p_i1228_14_); + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + float f = ((float)this.particleAge + partialTicks) / (float)this.particleMaxAge * 32.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + this.particleScale = this.snowDigParticleScale * f; + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY -= 0.03D; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9900000095367432D; + this.motionY *= 0.9900000095367432D; + this.motionZ *= 0.9900000095367432D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSnowShovel(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSpell.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSpell.java new file mode 100644 index 0000000..795e4dc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSpell.java @@ -0,0 +1,130 @@ +package net.minecraft.client.particle; + +import java.util.Random; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSpell extends Particle +{ + private static final Random RANDOM = new Random(); + /** Base spell texture index */ + private int baseSpellTextureIndex = 128; + + protected ParticleSpell(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i1229_8_, double ySpeed, double p_i1229_12_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.5D - RANDOM.nextDouble(), ySpeed, 0.5D - RANDOM.nextDouble()); + this.motionY *= 0.20000000298023224D; + + if (p_i1229_8_ == 0.0D && p_i1229_12_ == 0.0D) + { + this.motionX *= 0.10000000149011612D; + this.motionZ *= 0.10000000149011612D; + } + + this.particleScale *= 0.75F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + } + + public boolean shouldDisableDepth() + { + return true; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) + { + this.setExpired(); + } + + this.setParticleTextureIndex(this.baseSpellTextureIndex + (7 - this.particleAge * 8 / this.particleMaxAge)); + this.motionY += 0.004D; + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) + { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + } + } + + /** + * Sets the base spell texture index + */ + public void setBaseSpellTextureIndex(int baseSpellTextureIndexIn) + { + this.baseSpellTextureIndex = baseSpellTextureIndexIn; + } + + @SideOnly(Side.CLIENT) + public static class AmbientMobFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleSpell(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + particle.setAlphaF(0.15F); + particle.setRBGColorF((float)xSpeedIn, (float)ySpeedIn, (float)zSpeedIn); + return particle; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSpell(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } + + @SideOnly(Side.CLIENT) + public static class InstantFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleSpell(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + ((ParticleSpell)particle).setBaseSpellTextureIndex(144); + return particle; + } + } + + @SideOnly(Side.CLIENT) + public static class MobFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleSpell(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + particle.setRBGColorF((float)xSpeedIn, (float)ySpeedIn, (float)zSpeedIn); + return particle; + } + } + + @SideOnly(Side.CLIENT) + public static class WitchFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleSpell(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + ((ParticleSpell)particle).setBaseSpellTextureIndex(144); + float f = worldIn.rand.nextFloat() * 0.5F + 0.35F; + particle.setRBGColorF(1.0F * f, 0.0F * f, 1.0F * f); + return particle; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSpit.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSpit.java new file mode 100644 index 0000000..b9852f8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSpit.java @@ -0,0 +1,30 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSpit extends ParticleExplosion +{ + protected ParticleSpit(World p_i47221_1_, double p_i47221_2_, double p_i47221_4_, double p_i47221_6_, double p_i47221_8_, double p_i47221_10_, double p_i47221_12_) + { + super(p_i47221_1_, p_i47221_2_, p_i47221_4_, p_i47221_6_, p_i47221_8_, p_i47221_10_, p_i47221_12_); + this.particleGravity = 0.5F; + } + + public void onUpdate() + { + super.onUpdate(); + this.motionY -= 0.004D + 0.04D * (double)this.particleGravity; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSpit(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSplash.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSplash.java new file mode 100644 index 0000000..f510561 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSplash.java @@ -0,0 +1,32 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSplash extends ParticleRain +{ + protected ParticleSplash(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn); + this.particleGravity = 0.04F; + this.nextTextureIndexX(); + + if (ySpeedIn == 0.0D && (xSpeedIn != 0.0D || zSpeedIn != 0.0D)) + { + this.motionX = xSpeedIn; + this.motionY = ySpeedIn + 0.1D; + this.motionZ = zSpeedIn; + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSplash(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSuspend.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSuspend.java new file mode 100644 index 0000000..243e8fc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSuspend.java @@ -0,0 +1,53 @@ +package net.minecraft.client.particle; + +import net.minecraft.block.material.Material; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSuspend extends Particle +{ + protected ParticleSuspend(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn) + { + super(worldIn, xCoordIn, yCoordIn - 0.125D, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + this.particleRed = 0.4F; + this.particleGreen = 0.4F; + this.particleBlue = 0.7F; + this.setParticleTextureIndex(0); + this.setSize(0.01F, 0.01F); + this.particleScale *= this.rand.nextFloat() * 0.6F + 0.2F; + this.motionX = xSpeedIn * 0.0D; + this.motionY = ySpeedIn * 0.0D; + this.motionZ = zSpeedIn * 0.0D; + this.particleMaxAge = (int)(16.0D / (Math.random() * 0.8D + 0.2D)); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.move(this.motionX, this.motionY, this.motionZ); + + if (this.world.getBlockState(new BlockPos(this.posX, this.posY, this.posZ)).getMaterial() != Material.WATER) + { + this.setExpired(); + } + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSuspend(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSuspendedTown.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSuspendedTown.java new file mode 100644 index 0000000..ed590ea --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSuspendedTown.java @@ -0,0 +1,68 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSuspendedTown extends Particle +{ + protected ParticleSuspendedTown(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double speedIn) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, speedIn); + float f = this.rand.nextFloat() * 0.1F + 0.2F; + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.setParticleTextureIndex(0); + this.setSize(0.02F, 0.02F); + this.particleScale *= this.rand.nextFloat() * 0.6F + 0.5F; + this.motionX *= 0.019999999552965164D; + this.motionY *= 0.019999999552965164D; + this.motionZ *= 0.019999999552965164D; + this.particleMaxAge = (int)(20.0D / (Math.random() * 0.8D + 0.2D)); + } + + public void move(double x, double y, double z) + { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.99D; + this.motionY *= 0.99D; + this.motionZ *= 0.99D; + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSuspendedTown(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } + + @SideOnly(Side.CLIENT) + public static class HappyVillagerFactory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + Particle particle = new ParticleSuspendedTown(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + particle.setParticleTextureIndex(82); + particle.setRBGColorF(1.0F, 1.0F, 1.0F); + return particle; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSweepAttack.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSweepAttack.java new file mode 100644 index 0000000..1d14ae8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleSweepAttack.java @@ -0,0 +1,105 @@ +package net.minecraft.client.particle; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleSweepAttack extends Particle +{ + private static final ResourceLocation SWEEP_TEXTURE = new ResourceLocation("textures/entity/sweep.png"); + private static final VertexFormat VERTEX_FORMAT = (new VertexFormat()).addElement(DefaultVertexFormats.POSITION_3F).addElement(DefaultVertexFormats.TEX_2F).addElement(DefaultVertexFormats.COLOR_4UB).addElement(DefaultVertexFormats.TEX_2S).addElement(DefaultVertexFormats.NORMAL_3B).addElement(DefaultVertexFormats.PADDING_1B); + private int life; + private final int lifeTime; + private final TextureManager textureManager; + private final float size; + + protected ParticleSweepAttack(TextureManager textureManagerIn, World worldIn, double x, double y, double z, double p_i46582_9_, double p_i46582_11_, double p_i46582_13_) + { + super(worldIn, x, y, z, 0.0D, 0.0D, 0.0D); + this.textureManager = textureManagerIn; + this.lifeTime = 4; + float f = this.rand.nextFloat() * 0.6F + 0.4F; + this.particleRed = f; + this.particleGreen = f; + this.particleBlue = f; + this.size = 1.0F - (float)p_i46582_9_ * 0.5F; + } + + /** + * Renders the particle + */ + public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) + { + int i = (int)(((float)this.life + partialTicks) * 3.0F / (float)this.lifeTime); + + if (i <= 7) + { + this.textureManager.bindTexture(SWEEP_TEXTURE); + float f = (float)(i % 4) / 4.0F; + float f1 = f + 0.24975F; + float f2 = (float)(i / 2) / 2.0F; + float f3 = f2 + 0.4995F; + float f4 = 1.0F * this.size; + float f5 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks - interpPosX); + float f6 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks - interpPosY); + float f7 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks - interpPosZ); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + RenderHelper.disableStandardItemLighting(); + buffer.begin(7, VERTEX_FORMAT); + buffer.pos((double)(f5 - rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4 * 0.5F), (double)(f7 - rotationYZ * f4 - rotationXZ * f4)).tex((double)f1, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + buffer.pos((double)(f5 - rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4 * 0.5F), (double)(f7 - rotationYZ * f4 + rotationXZ * f4)).tex((double)f1, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 + rotationXY * f4), (double)(f6 + rotationZ * f4 * 0.5F), (double)(f7 + rotationYZ * f4 + rotationXZ * f4)).tex((double)f, (double)f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + buffer.pos((double)(f5 + rotationX * f4 - rotationXY * f4), (double)(f6 - rotationZ * f4 * 0.5F), (double)(f7 + rotationYZ * f4 - rotationXZ * f4)).tex((double)f, (double)f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F).lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + Tessellator.getInstance().draw(); + GlStateManager.enableLighting(); + } + } + + public int getBrightnessForRender(float p_189214_1_) + { + return 61680; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.life; + + if (this.life == this.lifeTime) + { + this.setExpired(); + } + } + + /** + * Retrieve what effect layer (what texture) the particle should be rendered with. 0 for the particle sprite sheet, + * 1 for the main Texture atlas, and 3 for a custom texture + */ + public int getFXLayer() + { + return 3; + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleSweepAttack(Minecraft.getMinecraft().getTextureManager(), worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleTotem.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleTotem.java new file mode 100644 index 0000000..a43c457 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleTotem.java @@ -0,0 +1,39 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleTotem extends ParticleSimpleAnimated +{ + public ParticleTotem(World p_i47220_1_, double p_i47220_2_, double p_i47220_4_, double p_i47220_6_, double p_i47220_8_, double p_i47220_10_, double p_i47220_12_) + { + super(p_i47220_1_, p_i47220_2_, p_i47220_4_, p_i47220_6_, 176, 8, -0.05F); + this.motionX = p_i47220_8_; + this.motionY = p_i47220_10_; + this.motionZ = p_i47220_12_; + this.particleScale *= 0.75F; + this.particleMaxAge = 60 + this.rand.nextInt(12); + + if (this.rand.nextInt(4) == 0) + { + this.setRBGColorF(0.6F + this.rand.nextFloat() * 0.2F, 0.6F + this.rand.nextFloat() * 0.3F, this.rand.nextFloat() * 0.2F); + } + else + { + this.setRBGColorF(0.1F + this.rand.nextFloat() * 0.2F, 0.4F + this.rand.nextFloat() * 0.3F, this.rand.nextFloat() * 0.2F); + } + + this.setBaseAirFriction(0.6F); + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleTotem(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleWaterWake.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleWaterWake.java new file mode 100644 index 0000000..32e6c02 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/ParticleWaterWake.java @@ -0,0 +1,57 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ParticleWaterWake extends Particle +{ + protected ParticleWaterWake(World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double p_i45073_8_, double p_i45073_10_, double p_i45073_12_) + { + super(worldIn, xCoordIn, yCoordIn, zCoordIn, 0.0D, 0.0D, 0.0D); + this.motionX *= 0.30000001192092896D; + this.motionY = Math.random() * 0.20000000298023224D + 0.10000000149011612D; + this.motionZ *= 0.30000001192092896D; + this.particleRed = 1.0F; + this.particleGreen = 1.0F; + this.particleBlue = 1.0F; + this.setParticleTextureIndex(19); + this.setSize(0.01F, 0.01F); + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleGravity = 0.0F; + this.motionX = p_i45073_8_; + this.motionY = p_i45073_10_; + this.motionZ = p_i45073_12_; + } + + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)this.particleGravity; + this.move(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + int i = 60 - this.particleMaxAge; + float f = (float)i * 0.001F; + this.setSize(f, f); + this.setParticleTextureIndex(19 + i % 4); + + if (this.particleMaxAge-- <= 0) + { + this.setExpired(); + } + } + + @SideOnly(Side.CLIENT) + public static class Factory implements IParticleFactory + { + public Particle createParticle(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) + { + return new ParticleWaterWake(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/particle/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/particle/package-info.java new file mode 100644 index 0000000..ec2b099 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/particle/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.particle; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/ContainerLocalMenu.java b/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/ContainerLocalMenu.java new file mode 100644 index 0000000..c437867 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/ContainerLocalMenu.java @@ -0,0 +1,65 @@ +package net.minecraft.client.player.inventory; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.LockCode; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ContainerLocalMenu extends InventoryBasic implements ILockableContainer +{ + private final String guiID; + private final Map dataValues = Maps.newHashMap(); + + public ContainerLocalMenu(String id, ITextComponent title, int slotCount) + { + super(title, slotCount); + this.guiID = id; + } + + public int getField(int id) + { + return this.dataValues.containsKey(Integer.valueOf(id)) ? ((Integer)this.dataValues.get(Integer.valueOf(id))).intValue() : 0; + } + + public void setField(int id, int value) + { + this.dataValues.put(Integer.valueOf(id), Integer.valueOf(value)); + } + + public int getFieldCount() + { + return this.dataValues.size(); + } + + public boolean isLocked() + { + return false; + } + + public void setLockCode(LockCode code) + { + } + + public LockCode getLockCode() + { + return LockCode.EMPTY_CODE; + } + + public String getGuiID() + { + return this.guiID; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + throw new UnsupportedOperationException(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java b/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java new file mode 100644 index 0000000..a940b81 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/LocalBlockIntercommunication.java @@ -0,0 +1,56 @@ +package net.minecraft.client.player.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.IInteractionObject; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LocalBlockIntercommunication implements IInteractionObject +{ + private final String guiID; + private final ITextComponent displayName; + + public LocalBlockIntercommunication(String guiIdIn, ITextComponent displayNameIn) + { + this.guiID = guiIdIn; + this.displayName = displayNameIn; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + throw new UnsupportedOperationException(); + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.displayName.getUnformattedText(); + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return true; + } + + public String getGuiID() + { + return this.guiID; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return this.displayName; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/package-info.java new file mode 100644 index 0000000..275107e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/player/inventory/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.player.inventory; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ActiveRenderInfo.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ActiveRenderInfo.java new file mode 100644 index 0000000..f23843f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ActiveRenderInfo.java @@ -0,0 +1,138 @@ +package net.minecraft.client.renderer; + +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.glu.GLU; + +@SideOnly(Side.CLIENT) +public class ActiveRenderInfo +{ + /** The current GL viewport */ + private static final IntBuffer VIEWPORT = GLAllocation.createDirectIntBuffer(16); + /** The current GL modelview matrix */ + private static final FloatBuffer MODELVIEW = GLAllocation.createDirectFloatBuffer(16); + /** The current GL projection matrix */ + private static final FloatBuffer PROJECTION = GLAllocation.createDirectFloatBuffer(16); + /** The computed view object coordinates */ + private static final FloatBuffer OBJECTCOORDS = GLAllocation.createDirectFloatBuffer(3); + private static Vec3d position = new Vec3d(0.0D, 0.0D, 0.0D); + /** The X component of the entity's yaw rotation */ + private static float rotationX; + /** The combined X and Z components of the entity's pitch rotation */ + private static float rotationXZ; + /** The Z component of the entity's yaw rotation */ + private static float rotationZ; + /** The Y component (scaled along the Z axis) of the entity's pitch rotation */ + private static float rotationYZ; + /** The Y component (scaled along the X axis) of the entity's pitch rotation */ + private static float rotationXY; + + /** + * Updates the current render info and camera location based on entity look angles and 1st/3rd person view mode + */ + public static void updateRenderInfo(EntityPlayer entityplayerIn, boolean p_74583_1_) + { + updateRenderInfo((Entity) entityplayerIn, p_74583_1_); + } + + public static void updateRenderInfo(Entity entityplayerIn, boolean p_74583_1_) + { + GlStateManager.getFloat(2982, MODELVIEW); + GlStateManager.getFloat(2983, PROJECTION); + GlStateManager.glGetInteger(2978, VIEWPORT); + float f = (float)((VIEWPORT.get(0) + VIEWPORT.get(2)) / 2); + float f1 = (float)((VIEWPORT.get(1) + VIEWPORT.get(3)) / 2); + GLU.gluUnProject(f, f1, 0.0F, MODELVIEW, PROJECTION, VIEWPORT, OBJECTCOORDS); + position = new Vec3d((double)OBJECTCOORDS.get(0), (double)OBJECTCOORDS.get(1), (double)OBJECTCOORDS.get(2)); + int i = p_74583_1_ ? 1 : 0; + float f2 = entityplayerIn.rotationPitch; + float f3 = entityplayerIn.rotationYaw; + rotationX = MathHelper.cos(f3 * 0.017453292F) * (float)(1 - i * 2); + rotationZ = MathHelper.sin(f3 * 0.017453292F) * (float)(1 - i * 2); + rotationYZ = -rotationZ * MathHelper.sin(f2 * 0.017453292F) * (float)(1 - i * 2); + rotationXY = rotationX * MathHelper.sin(f2 * 0.017453292F) * (float)(1 - i * 2); + rotationXZ = MathHelper.cos(f2 * 0.017453292F); + } + + public static Vec3d projectViewFromEntity(Entity entityIn, double p_178806_1_) + { + double d0 = entityIn.prevPosX + (entityIn.posX - entityIn.prevPosX) * p_178806_1_; + double d1 = entityIn.prevPosY + (entityIn.posY - entityIn.prevPosY) * p_178806_1_; + double d2 = entityIn.prevPosZ + (entityIn.posZ - entityIn.prevPosZ) * p_178806_1_; + double d3 = d0 + position.x; + double d4 = d1 + position.y; + double d5 = d2 + position.z; + return new Vec3d(d3, d4, d5); + } + + public static IBlockState getBlockStateAtEntityViewpoint(World worldIn, Entity entityIn, float p_186703_2_) + { + Vec3d vec3d = projectViewFromEntity(entityIn, (double)p_186703_2_); + BlockPos blockpos = new BlockPos(vec3d); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getMaterial().isLiquid()) + { + float f = 0.0F; + + if (iblockstate.getBlock() instanceof BlockLiquid) + { + f = BlockLiquid.getLiquidHeightPercent(((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue()) - 0.11111111F; + } + + float f1 = (float)(blockpos.getY() + 1) - f; + + if (vec3d.y >= (double)f1) + { + iblockstate = worldIn.getBlockState(blockpos.up()); + } + } + + return iblockstate.getBlock().getStateAtViewpoint(iblockstate, worldIn, blockpos, vec3d); + } + + public static float getRotationX() + { + return rotationX; + } + + public static float getRotationXZ() + { + return rotationXZ; + } + + public static float getRotationZ() + { + return rotationZ; + } + + public static float getRotationYZ() + { + return rotationYZ; + } + + public static float getRotationXY() + { + return rotationXY; + } + + /* ======================================== FORGE START =====================================*/ + + /** + * Vector from render view entity position (corrected for partialTickTime) to the middle of screen + */ + public static Vec3d getCameraPosition() + { + return position; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BannerTextures.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BannerTextures.java new file mode 100644 index 0000000..46f90b2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BannerTextures.java @@ -0,0 +1,111 @@ +package net.minecraft.client.renderer; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.LayeredColorMaskTexture; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.tileentity.BannerPattern; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BannerTextures +{ + /** An array of all the banner patterns that are being currently rendered */ + public static final BannerTextures.Cache BANNER_DESIGNS = new BannerTextures.Cache("B", new ResourceLocation("textures/entity/banner_base.png"), "textures/entity/banner/"); + /** An array of all the shield patterns that are being currently rendered */ + public static final BannerTextures.Cache SHIELD_DESIGNS = new BannerTextures.Cache("S", new ResourceLocation("textures/entity/shield_base.png"), "textures/entity/shield/"); + public static final ResourceLocation SHIELD_BASE_TEXTURE = new ResourceLocation("textures/entity/shield_base_nopattern.png"); + public static final ResourceLocation BANNER_BASE_TEXTURE = new ResourceLocation("textures/entity/banner/base.png"); + + @SideOnly(Side.CLIENT) + public static class Cache + { + private final Map cacheMap = Maps.newLinkedHashMap(); + private final ResourceLocation cacheResourceLocation; + private final String cacheResourceBase; + private final String cacheId; + + public Cache(String id, ResourceLocation baseResource, String resourcePath) + { + this.cacheId = id; + this.cacheResourceLocation = baseResource; + this.cacheResourceBase = resourcePath; + } + + @Nullable + public ResourceLocation getResourceLocation(String id, List patternList, List colorList) + { + if (id.isEmpty()) + { + return null; + } + else + { + id = this.cacheId + id; + BannerTextures.CacheEntry bannertextures$cacheentry = this.cacheMap.get(id); + + if (bannertextures$cacheentry == null) + { + if (this.cacheMap.size() >= 256 && !this.freeCacheSlot()) + { + return BannerTextures.BANNER_BASE_TEXTURE; + } + + List list = Lists.newArrayList(); + + for (BannerPattern bannerpattern : patternList) + { + list.add(this.cacheResourceBase + bannerpattern.getFileName() + ".png"); + } + + bannertextures$cacheentry = new BannerTextures.CacheEntry(); + bannertextures$cacheentry.textureLocation = new ResourceLocation(id); + Minecraft.getMinecraft().getTextureManager().loadTexture(bannertextures$cacheentry.textureLocation, new LayeredColorMaskTexture(this.cacheResourceLocation, list, colorList)); + this.cacheMap.put(id, bannertextures$cacheentry); + } + + bannertextures$cacheentry.lastUseMillis = System.currentTimeMillis(); + return bannertextures$cacheentry.textureLocation; + } + } + + private boolean freeCacheSlot() + { + long i = System.currentTimeMillis(); + Iterator iterator = this.cacheMap.keySet().iterator(); + + while (iterator.hasNext()) + { + String s = iterator.next(); + BannerTextures.CacheEntry bannertextures$cacheentry = this.cacheMap.get(s); + + if (i - bannertextures$cacheentry.lastUseMillis > 5000L) + { + Minecraft.getMinecraft().getTextureManager().deleteTexture(bannertextures$cacheentry.textureLocation); + iterator.remove(); + return true; + } + } + + return this.cacheMap.size() < 256; + } + } + + @SideOnly(Side.CLIENT) + static class CacheEntry + { + public long lastUseMillis; + public ResourceLocation textureLocation; + + private CacheEntry() + { + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockFluidRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockFluidRenderer.java new file mode 100644 index 0000000..58ce43c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockFluidRenderer.java @@ -0,0 +1,315 @@ +package net.minecraft.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.color.BlockColors; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockFluidRenderer +{ + private final BlockColors blockColors; + private final TextureAtlasSprite[] atlasSpritesLava = new TextureAtlasSprite[2]; + private final TextureAtlasSprite[] atlasSpritesWater = new TextureAtlasSprite[2]; + private TextureAtlasSprite atlasSpriteWaterOverlay; + + public BlockFluidRenderer(BlockColors blockColorsIn) + { + this.blockColors = blockColorsIn; + this.initAtlasSprites(); + } + + protected void initAtlasSprites() + { + TextureMap texturemap = Minecraft.getMinecraft().getTextureMapBlocks(); + this.atlasSpritesLava[0] = texturemap.getAtlasSprite("minecraft:blocks/lava_still"); + this.atlasSpritesLava[1] = texturemap.getAtlasSprite("minecraft:blocks/lava_flow"); + this.atlasSpritesWater[0] = texturemap.getAtlasSprite("minecraft:blocks/water_still"); + this.atlasSpritesWater[1] = texturemap.getAtlasSprite("minecraft:blocks/water_flow"); + this.atlasSpriteWaterOverlay = texturemap.getAtlasSprite("minecraft:blocks/water_overlay"); + } + + public boolean renderFluid(IBlockAccess blockAccess, IBlockState blockStateIn, BlockPos blockPosIn, BufferBuilder bufferBuilderIn) + { + BlockLiquid blockliquid = (BlockLiquid)blockStateIn.getBlock(); + boolean flag = blockStateIn.getMaterial() == Material.LAVA; + TextureAtlasSprite[] atextureatlassprite = flag ? this.atlasSpritesLava : this.atlasSpritesWater; + int i = this.blockColors.colorMultiplier(blockStateIn, blockAccess, blockPosIn, 0); + float f = (float)(i >> 16 & 255) / 255.0F; + float f1 = (float)(i >> 8 & 255) / 255.0F; + float f2 = (float)(i & 255) / 255.0F; + boolean flag1 = blockStateIn.shouldSideBeRendered(blockAccess, blockPosIn, EnumFacing.UP); + boolean flag2 = blockStateIn.shouldSideBeRendered(blockAccess, blockPosIn, EnumFacing.DOWN); + boolean[] aboolean = new boolean[] {blockStateIn.shouldSideBeRendered(blockAccess, blockPosIn, EnumFacing.NORTH), blockStateIn.shouldSideBeRendered(blockAccess, blockPosIn, EnumFacing.SOUTH), blockStateIn.shouldSideBeRendered(blockAccess, blockPosIn, EnumFacing.WEST), blockStateIn.shouldSideBeRendered(blockAccess, blockPosIn, EnumFacing.EAST)}; + + if (!flag1 && !flag2 && !aboolean[0] && !aboolean[1] && !aboolean[2] && !aboolean[3]) + { + return false; + } + else + { + boolean flag3 = false; + float f3 = 0.5F; + float f4 = 1.0F; + float f5 = 0.8F; + float f6 = 0.6F; + Material material = blockStateIn.getMaterial(); + float f7 = this.getFluidHeight(blockAccess, blockPosIn, material); + float f8 = this.getFluidHeight(blockAccess, blockPosIn.south(), material); + float f9 = this.getFluidHeight(blockAccess, blockPosIn.east().south(), material); + float f10 = this.getFluidHeight(blockAccess, blockPosIn.east(), material); + double d0 = (double)blockPosIn.getX(); + double d1 = (double)blockPosIn.getY(); + double d2 = (double)blockPosIn.getZ(); + float f11 = 0.001F; + + if (flag1) + { + flag3 = true; + float f12 = BlockLiquid.getSlopeAngle(blockAccess, blockPosIn, material, blockStateIn); + TextureAtlasSprite textureatlassprite = f12 > -999.0F ? atextureatlassprite[1] : atextureatlassprite[0]; + f7 -= 0.001F; + f8 -= 0.001F; + f9 -= 0.001F; + f10 -= 0.001F; + float f13; + float f14; + float f15; + float f16; + float f17; + float f18; + float f19; + float f20; + + if (f12 < -999.0F) + { + f13 = textureatlassprite.getInterpolatedU(0.0D); + f17 = textureatlassprite.getInterpolatedV(0.0D); + f14 = f13; + f18 = textureatlassprite.getInterpolatedV(16.0D); + f15 = textureatlassprite.getInterpolatedU(16.0D); + f19 = f18; + f16 = f15; + f20 = f17; + } + else + { + float f21 = MathHelper.sin(f12) * 0.25F; + float f22 = MathHelper.cos(f12) * 0.25F; + float f23 = 8.0F; + f13 = textureatlassprite.getInterpolatedU((double)(8.0F + (-f22 - f21) * 16.0F)); + f17 = textureatlassprite.getInterpolatedV((double)(8.0F + (-f22 + f21) * 16.0F)); + f14 = textureatlassprite.getInterpolatedU((double)(8.0F + (-f22 + f21) * 16.0F)); + f18 = textureatlassprite.getInterpolatedV((double)(8.0F + (f22 + f21) * 16.0F)); + f15 = textureatlassprite.getInterpolatedU((double)(8.0F + (f22 + f21) * 16.0F)); + f19 = textureatlassprite.getInterpolatedV((double)(8.0F + (f22 - f21) * 16.0F)); + f16 = textureatlassprite.getInterpolatedU((double)(8.0F + (f22 - f21) * 16.0F)); + f20 = textureatlassprite.getInterpolatedV((double)(8.0F + (-f22 - f21) * 16.0F)); + } + + int k2 = blockStateIn.getPackedLightmapCoords(blockAccess, blockPosIn); + int l2 = k2 >> 16 & 65535; + int i3 = k2 & 65535; + float f24 = 1.0F * f; + float f25 = 1.0F * f1; + float f26 = 1.0F * f2; + bufferBuilderIn.pos(d0 + 0.0D, d1 + (double)f7, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f13, (double)f17).lightmap(l2, i3).endVertex(); + bufferBuilderIn.pos(d0 + 0.0D, d1 + (double)f8, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f14, (double)f18).lightmap(l2, i3).endVertex(); + bufferBuilderIn.pos(d0 + 1.0D, d1 + (double)f9, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f15, (double)f19).lightmap(l2, i3).endVertex(); + bufferBuilderIn.pos(d0 + 1.0D, d1 + (double)f10, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f16, (double)f20).lightmap(l2, i3).endVertex(); + + if (blockliquid.shouldRenderSides(blockAccess, blockPosIn.up())) + { + bufferBuilderIn.pos(d0 + 0.0D, d1 + (double)f7, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f13, (double)f17).lightmap(l2, i3).endVertex(); + bufferBuilderIn.pos(d0 + 1.0D, d1 + (double)f10, d2 + 0.0D).color(f24, f25, f26, 1.0F).tex((double)f16, (double)f20).lightmap(l2, i3).endVertex(); + bufferBuilderIn.pos(d0 + 1.0D, d1 + (double)f9, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f15, (double)f19).lightmap(l2, i3).endVertex(); + bufferBuilderIn.pos(d0 + 0.0D, d1 + (double)f8, d2 + 1.0D).color(f24, f25, f26, 1.0F).tex((double)f14, (double)f18).lightmap(l2, i3).endVertex(); + } + } + + if (flag2) + { + float f35 = atextureatlassprite[0].getMinU(); + float f36 = atextureatlassprite[0].getMaxU(); + float f37 = atextureatlassprite[0].getMinV(); + float f38 = atextureatlassprite[0].getMaxV(); + int l1 = blockStateIn.getPackedLightmapCoords(blockAccess, blockPosIn.down()); + int i2 = l1 >> 16 & 65535; + int j2 = l1 & 65535; + bufferBuilderIn.pos(d0, d1, d2 + 1.0D).color(0.5F, 0.5F, 0.5F, 1.0F).tex((double)f35, (double)f38).lightmap(i2, j2).endVertex(); + bufferBuilderIn.pos(d0, d1, d2).color(0.5F, 0.5F, 0.5F, 1.0F).tex((double)f35, (double)f37).lightmap(i2, j2).endVertex(); + bufferBuilderIn.pos(d0 + 1.0D, d1, d2).color(0.5F, 0.5F, 0.5F, 1.0F).tex((double)f36, (double)f37).lightmap(i2, j2).endVertex(); + bufferBuilderIn.pos(d0 + 1.0D, d1, d2 + 1.0D).color(0.5F, 0.5F, 0.5F, 1.0F).tex((double)f36, (double)f38).lightmap(i2, j2).endVertex(); + flag3 = true; + } + + for (int i1 = 0; i1 < 4; ++i1) + { + int j1 = 0; + int k1 = 0; + + if (i1 == 0) + { + --k1; + } + + if (i1 == 1) + { + ++k1; + } + + if (i1 == 2) + { + --j1; + } + + if (i1 == 3) + { + ++j1; + } + + BlockPos blockpos = blockPosIn.add(j1, 0, k1); + TextureAtlasSprite textureatlassprite1 = atextureatlassprite[1]; + + if (!flag) + { + IBlockState state = blockAccess.getBlockState(blockpos); + + if (state.getBlockFaceShape(blockAccess, blockpos, EnumFacing.VALUES[i1+2].getOpposite()) == net.minecraft.block.state.BlockFaceShape.SOLID) + { + textureatlassprite1 = this.atlasSpriteWaterOverlay; + } + } + + if (aboolean[i1]) + { + float f39; + float f40; + double d3; + double d4; + double d5; + double d6; + + if (i1 == 0) + { + f39 = f7; + f40 = f10; + d3 = d0; + d5 = d0 + 1.0D; + d4 = d2 + 0.0010000000474974513D; + d6 = d2 + 0.0010000000474974513D; + } + else if (i1 == 1) + { + f39 = f9; + f40 = f8; + d3 = d0 + 1.0D; + d5 = d0; + d4 = d2 + 1.0D - 0.0010000000474974513D; + d6 = d2 + 1.0D - 0.0010000000474974513D; + } + else if (i1 == 2) + { + f39 = f8; + f40 = f7; + d3 = d0 + 0.0010000000474974513D; + d5 = d0 + 0.0010000000474974513D; + d4 = d2 + 1.0D; + d6 = d2; + } + else + { + f39 = f10; + f40 = f9; + d3 = d0 + 1.0D - 0.0010000000474974513D; + d5 = d0 + 1.0D - 0.0010000000474974513D; + d4 = d2; + d6 = d2 + 1.0D; + } + + flag3 = true; + float f41 = textureatlassprite1.getInterpolatedU(0.0D); + float f27 = textureatlassprite1.getInterpolatedU(8.0D); + float f28 = textureatlassprite1.getInterpolatedV((double)((1.0F - f39) * 16.0F * 0.5F)); + float f29 = textureatlassprite1.getInterpolatedV((double)((1.0F - f40) * 16.0F * 0.5F)); + float f30 = textureatlassprite1.getInterpolatedV(8.0D); + int j = blockStateIn.getPackedLightmapCoords(blockAccess, blockpos); + int k = j >> 16 & 65535; + int l = j & 65535; + float f31 = i1 < 2 ? 0.8F : 0.6F; + float f32 = 1.0F * f31 * f; + float f33 = 1.0F * f31 * f1; + float f34 = 1.0F * f31 * f2; + bufferBuilderIn.pos(d3, d1 + (double)f39, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f28).lightmap(k, l).endVertex(); + bufferBuilderIn.pos(d5, d1 + (double)f40, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f29).lightmap(k, l).endVertex(); + bufferBuilderIn.pos(d5, d1 + 0.0D, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f30).lightmap(k, l).endVertex(); + bufferBuilderIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f30).lightmap(k, l).endVertex(); + + if (textureatlassprite1 != this.atlasSpriteWaterOverlay) + { + bufferBuilderIn.pos(d3, d1 + 0.0D, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f30).lightmap(k, l).endVertex(); + bufferBuilderIn.pos(d5, d1 + 0.0D, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f30).lightmap(k, l).endVertex(); + bufferBuilderIn.pos(d5, d1 + (double)f40, d6).color(f32, f33, f34, 1.0F).tex((double)f27, (double)f29).lightmap(k, l).endVertex(); + bufferBuilderIn.pos(d3, d1 + (double)f39, d4).color(f32, f33, f34, 1.0F).tex((double)f41, (double)f28).lightmap(k, l).endVertex(); + } + } + } + + return flag3; + } + } + + private float getFluidHeight(IBlockAccess blockAccess, BlockPos blockPosIn, Material blockMaterial) + { + int i = 0; + float f = 0.0F; + + for (int j = 0; j < 4; ++j) + { + BlockPos blockpos = blockPosIn.add(-(j & 1), 0, -(j >> 1 & 1)); + + if (blockAccess.getBlockState(blockpos.up()).getMaterial() == blockMaterial) + { + return 1.0F; + } + + IBlockState iblockstate = blockAccess.getBlockState(blockpos); + Material material = iblockstate.getMaterial(); + + if (material != blockMaterial) + { + if (!material.isSolid()) + { + ++f; + ++i; + } + } + else + { + int k = ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue(); + + if (k >= 8 || k == 0) + { + f += BlockLiquid.getLiquidHeightPercent(k) * 10.0F; + i += 10; + } + + f += BlockLiquid.getLiquidHeightPercent(k); + ++i; + } + } + + return 1.0F - f / (float)i; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockModelRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockModelRenderer.java new file mode 100644 index 0000000..07b5d11 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockModelRenderer.java @@ -0,0 +1,656 @@ +package net.minecraft.client.renderer; + +import java.util.BitSet; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.color.BlockColors; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockModelRenderer +{ + private final BlockColors blockColors; + + public BlockModelRenderer(BlockColors blockColorsIn) + { + this.blockColors = blockColorsIn; + } + + public boolean renderModel(IBlockAccess blockAccessIn, IBakedModel modelIn, IBlockState blockStateIn, BlockPos blockPosIn, BufferBuilder buffer, boolean checkSides) + { + return this.renderModel(blockAccessIn, modelIn, blockStateIn, blockPosIn, buffer, checkSides, MathHelper.getPositionRandom(blockPosIn)); + } + + public boolean renderModel(IBlockAccess worldIn, IBakedModel modelIn, IBlockState stateIn, BlockPos posIn, BufferBuilder buffer, boolean checkSides, long rand) + { + boolean flag = Minecraft.isAmbientOcclusionEnabled() && stateIn.getLightValue(worldIn, posIn) == 0 && modelIn.isAmbientOcclusion(stateIn); + + try + { + return flag ? this.renderModelSmooth(worldIn, modelIn, stateIn, posIn, buffer, checkSides, rand) : this.renderModelFlat(worldIn, modelIn, stateIn, posIn, buffer, checkSides, rand); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Tesselating block model"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Block model being tesselated"); + CrashReportCategory.addBlockInfo(crashreportcategory, posIn, stateIn); + crashreportcategory.addCrashSection("Using AO", Boolean.valueOf(flag)); + throw new ReportedException(crashreport); + } + } + + public boolean renderModelSmooth(IBlockAccess worldIn, IBakedModel modelIn, IBlockState stateIn, BlockPos posIn, BufferBuilder buffer, boolean checkSides, long rand) + { + boolean flag = false; + float[] afloat = new float[EnumFacing.values().length * 2]; + BitSet bitset = new BitSet(3); + BlockModelRenderer.AmbientOcclusionFace blockmodelrenderer$ambientocclusionface = new BlockModelRenderer.AmbientOcclusionFace(); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + List list = modelIn.getQuads(stateIn, enumfacing, rand); + + if (!list.isEmpty() && (!checkSides || stateIn.shouldSideBeRendered(worldIn, posIn, enumfacing))) + { + this.renderQuadsSmooth(worldIn, stateIn, posIn, buffer, list, afloat, bitset, blockmodelrenderer$ambientocclusionface); + flag = true; + } + } + + List list1 = modelIn.getQuads(stateIn, (EnumFacing)null, rand); + + if (!list1.isEmpty()) + { + this.renderQuadsSmooth(worldIn, stateIn, posIn, buffer, list1, afloat, bitset, blockmodelrenderer$ambientocclusionface); + flag = true; + } + + return flag; + } + + public boolean renderModelFlat(IBlockAccess worldIn, IBakedModel modelIn, IBlockState stateIn, BlockPos posIn, BufferBuilder buffer, boolean checkSides, long rand) + { + boolean flag = false; + BitSet bitset = new BitSet(3); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + List list = modelIn.getQuads(stateIn, enumfacing, rand); + + if (!list.isEmpty() && (!checkSides || stateIn.shouldSideBeRendered(worldIn, posIn, enumfacing))) + { + int i = stateIn.getPackedLightmapCoords(worldIn, posIn.offset(enumfacing)); + this.renderQuadsFlat(worldIn, stateIn, posIn, i, false, buffer, list, bitset); + flag = true; + } + } + + List list1 = modelIn.getQuads(stateIn, (EnumFacing)null, rand); + + if (!list1.isEmpty()) + { + this.renderQuadsFlat(worldIn, stateIn, posIn, -1, true, buffer, list1, bitset); + flag = true; + } + + return flag; + } + + private void renderQuadsSmooth(IBlockAccess blockAccessIn, IBlockState stateIn, BlockPos posIn, BufferBuilder buffer, List list, float[] quadBounds, BitSet bitSet, BlockModelRenderer.AmbientOcclusionFace aoFace) + { + Vec3d vec3d = stateIn.getOffset(blockAccessIn, posIn); + double d0 = (double)posIn.getX() + vec3d.x; + double d1 = (double)posIn.getY() + vec3d.y; + double d2 = (double)posIn.getZ() + vec3d.z; + int i = 0; + + for (int j = list.size(); i < j; ++i) + { + BakedQuad bakedquad = list.get(i); + this.fillQuadBounds(stateIn, bakedquad.getVertexData(), bakedquad.getFace(), quadBounds, bitSet); + aoFace.updateVertexBrightness(blockAccessIn, stateIn, posIn, bakedquad.getFace(), quadBounds, bitSet); + buffer.addVertexData(bakedquad.getVertexData()); + buffer.putBrightness4(aoFace.vertexBrightness[0], aoFace.vertexBrightness[1], aoFace.vertexBrightness[2], aoFace.vertexBrightness[3]); + if(bakedquad.shouldApplyDiffuseLighting()) + { + float diffuse = net.minecraftforge.client.model.pipeline.LightUtil.diffuseLight(bakedquad.getFace()); + aoFace.vertexColorMultiplier[0] *= diffuse; + aoFace.vertexColorMultiplier[1] *= diffuse; + aoFace.vertexColorMultiplier[2] *= diffuse; + aoFace.vertexColorMultiplier[3] *= diffuse; + } + if (bakedquad.hasTintIndex()) + { + int k = this.blockColors.colorMultiplier(stateIn, blockAccessIn, posIn, bakedquad.getTintIndex()); + + if (EntityRenderer.anaglyphEnable) + { + k = TextureUtil.anaglyphColor(k); + } + + float f = (float)(k >> 16 & 255) / 255.0F; + float f1 = (float)(k >> 8 & 255) / 255.0F; + float f2 = (float)(k & 255) / 255.0F; + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[0] * f, aoFace.vertexColorMultiplier[0] * f1, aoFace.vertexColorMultiplier[0] * f2, 4); + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[1] * f, aoFace.vertexColorMultiplier[1] * f1, aoFace.vertexColorMultiplier[1] * f2, 3); + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[2] * f, aoFace.vertexColorMultiplier[2] * f1, aoFace.vertexColorMultiplier[2] * f2, 2); + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[3] * f, aoFace.vertexColorMultiplier[3] * f1, aoFace.vertexColorMultiplier[3] * f2, 1); + } + else + { + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[0], aoFace.vertexColorMultiplier[0], aoFace.vertexColorMultiplier[0], 4); + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[1], aoFace.vertexColorMultiplier[1], aoFace.vertexColorMultiplier[1], 3); + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[2], aoFace.vertexColorMultiplier[2], aoFace.vertexColorMultiplier[2], 2); + buffer.putColorMultiplier(aoFace.vertexColorMultiplier[3], aoFace.vertexColorMultiplier[3], aoFace.vertexColorMultiplier[3], 1); + } + + buffer.putPosition(d0, d1, d2); + } + } + + private void fillQuadBounds(IBlockState stateIn, int[] vertexData, EnumFacing face, @Nullable float[] quadBounds, BitSet boundsFlags) + { + float f = 32.0F; + float f1 = 32.0F; + float f2 = 32.0F; + float f3 = -32.0F; + float f4 = -32.0F; + float f5 = -32.0F; + + for (int i = 0; i < 4; ++i) + { + float f6 = Float.intBitsToFloat(vertexData[i * 7]); + float f7 = Float.intBitsToFloat(vertexData[i * 7 + 1]); + float f8 = Float.intBitsToFloat(vertexData[i * 7 + 2]); + f = Math.min(f, f6); + f1 = Math.min(f1, f7); + f2 = Math.min(f2, f8); + f3 = Math.max(f3, f6); + f4 = Math.max(f4, f7); + f5 = Math.max(f5, f8); + } + + if (quadBounds != null) + { + quadBounds[EnumFacing.WEST.getIndex()] = f; + quadBounds[EnumFacing.EAST.getIndex()] = f3; + quadBounds[EnumFacing.DOWN.getIndex()] = f1; + quadBounds[EnumFacing.UP.getIndex()] = f4; + quadBounds[EnumFacing.NORTH.getIndex()] = f2; + quadBounds[EnumFacing.SOUTH.getIndex()] = f5; + int j = EnumFacing.values().length; + quadBounds[EnumFacing.WEST.getIndex() + j] = 1.0F - f; + quadBounds[EnumFacing.EAST.getIndex() + j] = 1.0F - f3; + quadBounds[EnumFacing.DOWN.getIndex() + j] = 1.0F - f1; + quadBounds[EnumFacing.UP.getIndex() + j] = 1.0F - f4; + quadBounds[EnumFacing.NORTH.getIndex() + j] = 1.0F - f2; + quadBounds[EnumFacing.SOUTH.getIndex() + j] = 1.0F - f5; + } + + float f9 = 1.0E-4F; + float f10 = 0.9999F; + + switch (face) + { + case DOWN: + boundsFlags.set(1, f >= 1.0E-4F || f2 >= 1.0E-4F || f3 <= 0.9999F || f5 <= 0.9999F); + boundsFlags.set(0, (f1 < 1.0E-4F || stateIn.isFullCube()) && f1 == f4); + break; + case UP: + boundsFlags.set(1, f >= 1.0E-4F || f2 >= 1.0E-4F || f3 <= 0.9999F || f5 <= 0.9999F); + boundsFlags.set(0, (f4 > 0.9999F || stateIn.isFullCube()) && f1 == f4); + break; + case NORTH: + boundsFlags.set(1, f >= 1.0E-4F || f1 >= 1.0E-4F || f3 <= 0.9999F || f4 <= 0.9999F); + boundsFlags.set(0, (f2 < 1.0E-4F || stateIn.isFullCube()) && f2 == f5); + break; + case SOUTH: + boundsFlags.set(1, f >= 1.0E-4F || f1 >= 1.0E-4F || f3 <= 0.9999F || f4 <= 0.9999F); + boundsFlags.set(0, (f5 > 0.9999F || stateIn.isFullCube()) && f2 == f5); + break; + case WEST: + boundsFlags.set(1, f1 >= 1.0E-4F || f2 >= 1.0E-4F || f4 <= 0.9999F || f5 <= 0.9999F); + boundsFlags.set(0, (f < 1.0E-4F || stateIn.isFullCube()) && f == f3); + break; + case EAST: + boundsFlags.set(1, f1 >= 1.0E-4F || f2 >= 1.0E-4F || f4 <= 0.9999F || f5 <= 0.9999F); + boundsFlags.set(0, (f3 > 0.9999F || stateIn.isFullCube()) && f == f3); + } + } + + private void renderQuadsFlat(IBlockAccess blockAccessIn, IBlockState stateIn, BlockPos posIn, int brightnessIn, boolean ownBrightness, BufferBuilder buffer, List list, BitSet bitSet) + { + Vec3d vec3d = stateIn.getOffset(blockAccessIn, posIn); + double d0 = (double)posIn.getX() + vec3d.x; + double d1 = (double)posIn.getY() + vec3d.y; + double d2 = (double)posIn.getZ() + vec3d.z; + int i = 0; + + for (int j = list.size(); i < j; ++i) + { + BakedQuad bakedquad = list.get(i); + + if (ownBrightness) + { + this.fillQuadBounds(stateIn, bakedquad.getVertexData(), bakedquad.getFace(), (float[])null, bitSet); + BlockPos blockpos = bitSet.get(0) ? posIn.offset(bakedquad.getFace()) : posIn; + brightnessIn = stateIn.getPackedLightmapCoords(blockAccessIn, blockpos); + } + + buffer.addVertexData(bakedquad.getVertexData()); + buffer.putBrightness4(brightnessIn, brightnessIn, brightnessIn, brightnessIn); + + if (bakedquad.hasTintIndex()) + { + int k = this.blockColors.colorMultiplier(stateIn, blockAccessIn, posIn, bakedquad.getTintIndex()); + + if (EntityRenderer.anaglyphEnable) + { + k = TextureUtil.anaglyphColor(k); + } + + float f = (float)(k >> 16 & 255) / 255.0F; + float f1 = (float)(k >> 8 & 255) / 255.0F; + float f2 = (float)(k & 255) / 255.0F; + if(bakedquad.shouldApplyDiffuseLighting()) + { + float diffuse = net.minecraftforge.client.model.pipeline.LightUtil.diffuseLight(bakedquad.getFace()); + f *= diffuse; + f1 *= diffuse; + f2 *= diffuse; + } + buffer.putColorMultiplier(f, f1, f2, 4); + buffer.putColorMultiplier(f, f1, f2, 3); + buffer.putColorMultiplier(f, f1, f2, 2); + buffer.putColorMultiplier(f, f1, f2, 1); + } + else if(bakedquad.shouldApplyDiffuseLighting()) + { + float diffuse = net.minecraftforge.client.model.pipeline.LightUtil.diffuseLight(bakedquad.getFace()); + buffer.putColorMultiplier(diffuse, diffuse, diffuse, 4); + buffer.putColorMultiplier(diffuse, diffuse, diffuse, 3); + buffer.putColorMultiplier(diffuse, diffuse, diffuse, 2); + buffer.putColorMultiplier(diffuse, diffuse, diffuse, 1); + } + + buffer.putPosition(d0, d1, d2); + } + } + + public void renderModelBrightnessColor(IBakedModel bakedModel, float p_178262_2_, float red, float green, float blue) + { + this.renderModelBrightnessColor((IBlockState)null, bakedModel, p_178262_2_, red, green, blue); + } + + public void renderModelBrightnessColor(IBlockState state, IBakedModel p_187495_2_, float p_187495_3_, float p_187495_4_, float p_187495_5_, float p_187495_6_) + { + for (EnumFacing enumfacing : EnumFacing.values()) + { + this.renderModelBrightnessColorQuads(p_187495_3_, p_187495_4_, p_187495_5_, p_187495_6_, p_187495_2_.getQuads(state, enumfacing, 0L)); + } + + this.renderModelBrightnessColorQuads(p_187495_3_, p_187495_4_, p_187495_5_, p_187495_6_, p_187495_2_.getQuads(state, (EnumFacing)null, 0L)); + } + + public void renderModelBrightness(IBakedModel model, IBlockState state, float brightness, boolean p_178266_4_) + { + Block block = state.getBlock(); + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + int i = this.blockColors.colorMultiplier(state, (IBlockAccess)null, (BlockPos)null, 0); + + if (EntityRenderer.anaglyphEnable) + { + i = TextureUtil.anaglyphColor(i); + } + + float f = (float)(i >> 16 & 255) / 255.0F; + float f1 = (float)(i >> 8 & 255) / 255.0F; + float f2 = (float)(i & 255) / 255.0F; + + if (!p_178266_4_) + { + GlStateManager.color(brightness, brightness, brightness, 1.0F); + } + + this.renderModelBrightnessColor(state, model, brightness, f, f1, f2); + } + + private void renderModelBrightnessColorQuads(float brightness, float red, float green, float blue, List listQuads) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + int i = 0; + + for (int j = listQuads.size(); i < j; ++i) + { + BakedQuad bakedquad = listQuads.get(i); + bufferbuilder.begin(7, DefaultVertexFormats.ITEM); + bufferbuilder.addVertexData(bakedquad.getVertexData()); + + if (bakedquad.hasTintIndex()) + { + bufferbuilder.putColorRGB_F4(red * brightness, green * brightness, blue * brightness); + } + else + { + bufferbuilder.putColorRGB_F4(brightness, brightness, brightness); + } + + Vec3i vec3i = bakedquad.getFace().getDirectionVec(); + bufferbuilder.putNormal((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ()); + tessellator.draw(); + } + } + + @SideOnly(Side.CLIENT) + class AmbientOcclusionFace + { + private final float[] vertexColorMultiplier = new float[4]; + private final int[] vertexBrightness = new int[4]; + + public void updateVertexBrightness(IBlockAccess worldIn, IBlockState state, BlockPos centerPos, EnumFacing direction, float[] faceShape, BitSet shapeState) + { + BlockPos blockpos = shapeState.get(0) ? centerPos.offset(direction) : centerPos; + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + BlockModelRenderer.EnumNeighborInfo blockmodelrenderer$enumneighborinfo = BlockModelRenderer.EnumNeighborInfo.getNeighbourInfo(direction); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos1 = BlockPos.PooledMutableBlockPos.retain(blockpos).move(blockmodelrenderer$enumneighborinfo.corners[0]); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos2 = BlockPos.PooledMutableBlockPos.retain(blockpos).move(blockmodelrenderer$enumneighborinfo.corners[1]); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos3 = BlockPos.PooledMutableBlockPos.retain(blockpos).move(blockmodelrenderer$enumneighborinfo.corners[2]); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos4 = BlockPos.PooledMutableBlockPos.retain(blockpos).move(blockmodelrenderer$enumneighborinfo.corners[3]); + int i = state.getPackedLightmapCoords(worldIn, blockpos$pooledmutableblockpos1); + int j = state.getPackedLightmapCoords(worldIn, blockpos$pooledmutableblockpos2); + int k = state.getPackedLightmapCoords(worldIn, blockpos$pooledmutableblockpos3); + int l = state.getPackedLightmapCoords(worldIn, blockpos$pooledmutableblockpos4); + float f = worldIn.getBlockState(blockpos$pooledmutableblockpos1).getAmbientOcclusionLightValue(); + float f1 = worldIn.getBlockState(blockpos$pooledmutableblockpos2).getAmbientOcclusionLightValue(); + float f2 = worldIn.getBlockState(blockpos$pooledmutableblockpos3).getAmbientOcclusionLightValue(); + float f3 = worldIn.getBlockState(blockpos$pooledmutableblockpos4).getAmbientOcclusionLightValue(); + boolean flag = worldIn.getBlockState(blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos1).move(direction)).isTranslucent(); + boolean flag1 = worldIn.getBlockState(blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos2).move(direction)).isTranslucent(); + boolean flag2 = worldIn.getBlockState(blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos3).move(direction)).isTranslucent(); + boolean flag3 = worldIn.getBlockState(blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos4).move(direction)).isTranslucent(); + float f4; + int i1; + + if (!flag2 && !flag) + { + f4 = f; + i1 = i; + } + else + { + BlockPos blockpos1 = blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos1).move(blockmodelrenderer$enumneighborinfo.corners[2]); + f4 = worldIn.getBlockState(blockpos1).getAmbientOcclusionLightValue(); + i1 = state.getPackedLightmapCoords(worldIn, blockpos1); + } + + float f5; + int j1; + + if (!flag3 && !flag) + { + f5 = f; + j1 = i; + } + else + { + BlockPos blockpos2 = blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos1).move(blockmodelrenderer$enumneighborinfo.corners[3]); + f5 = worldIn.getBlockState(blockpos2).getAmbientOcclusionLightValue(); + j1 = state.getPackedLightmapCoords(worldIn, blockpos2); + } + + float f6; + int k1; + + if (!flag2 && !flag1) + { + f6 = f1; + k1 = j; + } + else + { + BlockPos blockpos3 = blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos2).move(blockmodelrenderer$enumneighborinfo.corners[2]); + f6 = worldIn.getBlockState(blockpos3).getAmbientOcclusionLightValue(); + k1 = state.getPackedLightmapCoords(worldIn, blockpos3); + } + + float f7; + int l1; + + if (!flag3 && !flag1) + { + f7 = f1; + l1 = j; + } + else + { + BlockPos blockpos4 = blockpos$pooledmutableblockpos.setPos(blockpos$pooledmutableblockpos2).move(blockmodelrenderer$enumneighborinfo.corners[3]); + f7 = worldIn.getBlockState(blockpos4).getAmbientOcclusionLightValue(); + l1 = state.getPackedLightmapCoords(worldIn, blockpos4); + } + + int i3 = state.getPackedLightmapCoords(worldIn, centerPos); + + if (shapeState.get(0) || !worldIn.getBlockState(centerPos.offset(direction)).isOpaqueCube()) + { + i3 = state.getPackedLightmapCoords(worldIn, centerPos.offset(direction)); + } + + float f8 = shapeState.get(0) ? worldIn.getBlockState(blockpos).getAmbientOcclusionLightValue() : worldIn.getBlockState(centerPos).getAmbientOcclusionLightValue(); + BlockModelRenderer.VertexTranslations blockmodelrenderer$vertextranslations = BlockModelRenderer.VertexTranslations.getVertexTranslations(direction); + blockpos$pooledmutableblockpos.release(); + blockpos$pooledmutableblockpos1.release(); + blockpos$pooledmutableblockpos2.release(); + blockpos$pooledmutableblockpos3.release(); + blockpos$pooledmutableblockpos4.release(); + + if (shapeState.get(1) && blockmodelrenderer$enumneighborinfo.doNonCubicWeight) + { + float f29 = (f3 + f + f5 + f8) * 0.25F; + float f30 = (f2 + f + f4 + f8) * 0.25F; + float f31 = (f2 + f1 + f6 + f8) * 0.25F; + float f32 = (f3 + f1 + f7 + f8) * 0.25F; + float f13 = faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[0].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[1].shape]; + float f14 = faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[2].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[3].shape]; + float f15 = faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[4].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[5].shape]; + float f16 = faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[6].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert0Weights[7].shape]; + float f17 = faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[0].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[1].shape]; + float f18 = faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[2].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[3].shape]; + float f19 = faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[4].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[5].shape]; + float f20 = faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[6].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert1Weights[7].shape]; + float f21 = faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[0].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[1].shape]; + float f22 = faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[2].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[3].shape]; + float f23 = faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[4].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[5].shape]; + float f24 = faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[6].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert2Weights[7].shape]; + float f25 = faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[0].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[1].shape]; + float f26 = faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[2].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[3].shape]; + float f27 = faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[4].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[5].shape]; + float f28 = faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[6].shape] * faceShape[blockmodelrenderer$enumneighborinfo.vert3Weights[7].shape]; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert0] = f29 * f13 + f30 * f14 + f31 * f15 + f32 * f16; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert1] = f29 * f17 + f30 * f18 + f31 * f19 + f32 * f20; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert2] = f29 * f21 + f30 * f22 + f31 * f23 + f32 * f24; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert3] = f29 * f25 + f30 * f26 + f31 * f27 + f32 * f28; + int i2 = this.getAoBrightness(l, i, j1, i3); + int j2 = this.getAoBrightness(k, i, i1, i3); + int k2 = this.getAoBrightness(k, j, k1, i3); + int l2 = this.getAoBrightness(l, j, l1, i3); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert0] = this.getVertexBrightness(i2, j2, k2, l2, f13, f14, f15, f16); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert1] = this.getVertexBrightness(i2, j2, k2, l2, f17, f18, f19, f20); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert2] = this.getVertexBrightness(i2, j2, k2, l2, f21, f22, f23, f24); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert3] = this.getVertexBrightness(i2, j2, k2, l2, f25, f26, f27, f28); + } + else + { + float f9 = (f3 + f + f5 + f8) * 0.25F; + float f10 = (f2 + f + f4 + f8) * 0.25F; + float f11 = (f2 + f1 + f6 + f8) * 0.25F; + float f12 = (f3 + f1 + f7 + f8) * 0.25F; + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert0] = this.getAoBrightness(l, i, j1, i3); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert1] = this.getAoBrightness(k, i, i1, i3); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert2] = this.getAoBrightness(k, j, k1, i3); + this.vertexBrightness[blockmodelrenderer$vertextranslations.vert3] = this.getAoBrightness(l, j, l1, i3); + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert0] = f9; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert1] = f10; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert2] = f11; + this.vertexColorMultiplier[blockmodelrenderer$vertextranslations.vert3] = f12; + } + } + + /** + * Get ambient occlusion brightness + */ + private int getAoBrightness(int br1, int br2, int br3, int br4) + { + if (br1 == 0) + { + br1 = br4; + } + + if (br2 == 0) + { + br2 = br4; + } + + if (br3 == 0) + { + br3 = br4; + } + + return br1 + br2 + br3 + br4 >> 2 & 16711935; + } + + private int getVertexBrightness(int p_178203_1_, int p_178203_2_, int p_178203_3_, int p_178203_4_, float p_178203_5_, float p_178203_6_, float p_178203_7_, float p_178203_8_) + { + int i = (int)((float)(p_178203_1_ >> 16 & 255) * p_178203_5_ + (float)(p_178203_2_ >> 16 & 255) * p_178203_6_ + (float)(p_178203_3_ >> 16 & 255) * p_178203_7_ + (float)(p_178203_4_ >> 16 & 255) * p_178203_8_) & 255; + int j = (int)((float)(p_178203_1_ & 255) * p_178203_5_ + (float)(p_178203_2_ & 255) * p_178203_6_ + (float)(p_178203_3_ & 255) * p_178203_7_ + (float)(p_178203_4_ & 255) * p_178203_8_) & 255; + return i << 16 | j; + } + } + + @SideOnly(Side.CLIENT) + public static enum EnumNeighborInfo + { + DOWN(new EnumFacing[]{EnumFacing.WEST, EnumFacing.EAST, EnumFacing.NORTH, EnumFacing.SOUTH}, 0.5F, true, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.SOUTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.SOUTH}), + UP(new EnumFacing[]{EnumFacing.EAST, EnumFacing.WEST, EnumFacing.NORTH, EnumFacing.SOUTH}, 1.0F, true, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.SOUTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.SOUTH}), + NORTH(new EnumFacing[]{EnumFacing.UP, EnumFacing.DOWN, EnumFacing.EAST, EnumFacing.WEST}, 0.8F, true, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_WEST}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_EAST}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_EAST}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_WEST}), + SOUTH(new EnumFacing[]{EnumFacing.WEST, EnumFacing.EAST, EnumFacing.DOWN, EnumFacing.UP}, 0.8F, true, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.WEST}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_WEST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.WEST, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.WEST}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.EAST}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_EAST, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.EAST, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.EAST}), + WEST(new EnumFacing[]{EnumFacing.UP, EnumFacing.DOWN, EnumFacing.NORTH, EnumFacing.SOUTH}, 0.6F, true, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.SOUTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.SOUTH}), + EAST(new EnumFacing[]{EnumFacing.DOWN, EnumFacing.UP, EnumFacing.NORTH, EnumFacing.SOUTH}, 0.6F, true, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.SOUTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.FLIP_DOWN, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.DOWN, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.NORTH, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_NORTH, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.NORTH}, new BlockModelRenderer.Orientation[]{BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.SOUTH, BlockModelRenderer.Orientation.FLIP_UP, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.FLIP_SOUTH, BlockModelRenderer.Orientation.UP, BlockModelRenderer.Orientation.SOUTH}); + + private final EnumFacing[] corners; + private final float shadeWeight; + private final boolean doNonCubicWeight; + private final BlockModelRenderer.Orientation[] vert0Weights; + private final BlockModelRenderer.Orientation[] vert1Weights; + private final BlockModelRenderer.Orientation[] vert2Weights; + private final BlockModelRenderer.Orientation[] vert3Weights; + private static final BlockModelRenderer.EnumNeighborInfo[] VALUES = new BlockModelRenderer.EnumNeighborInfo[6]; + + private EnumNeighborInfo(EnumFacing[] p_i46236_3_, float p_i46236_4_, boolean p_i46236_5_, BlockModelRenderer.Orientation[] p_i46236_6_, BlockModelRenderer.Orientation[] p_i46236_7_, BlockModelRenderer.Orientation[] p_i46236_8_, BlockModelRenderer.Orientation[] p_i46236_9_) + { + this.corners = p_i46236_3_; + this.shadeWeight = p_i46236_4_; + this.doNonCubicWeight = p_i46236_5_; + this.vert0Weights = p_i46236_6_; + this.vert1Weights = p_i46236_7_; + this.vert2Weights = p_i46236_8_; + this.vert3Weights = p_i46236_9_; + } + + public static BlockModelRenderer.EnumNeighborInfo getNeighbourInfo(EnumFacing p_178273_0_) + { + return VALUES[p_178273_0_.getIndex()]; + } + + static + { + VALUES[EnumFacing.DOWN.getIndex()] = DOWN; + VALUES[EnumFacing.UP.getIndex()] = UP; + VALUES[EnumFacing.NORTH.getIndex()] = NORTH; + VALUES[EnumFacing.SOUTH.getIndex()] = SOUTH; + VALUES[EnumFacing.WEST.getIndex()] = WEST; + VALUES[EnumFacing.EAST.getIndex()] = EAST; + } + } + + @SideOnly(Side.CLIENT) + public static enum Orientation + { + DOWN(EnumFacing.DOWN, false), + UP(EnumFacing.UP, false), + NORTH(EnumFacing.NORTH, false), + SOUTH(EnumFacing.SOUTH, false), + WEST(EnumFacing.WEST, false), + EAST(EnumFacing.EAST, false), + FLIP_DOWN(EnumFacing.DOWN, true), + FLIP_UP(EnumFacing.UP, true), + FLIP_NORTH(EnumFacing.NORTH, true), + FLIP_SOUTH(EnumFacing.SOUTH, true), + FLIP_WEST(EnumFacing.WEST, true), + FLIP_EAST(EnumFacing.EAST, true); + + private final int shape; + + private Orientation(EnumFacing p_i46233_3_, boolean p_i46233_4_) + { + this.shape = p_i46233_3_.getIndex() + (p_i46233_4_ ? EnumFacing.values().length : 0); + } + } + + @SideOnly(Side.CLIENT) + static enum VertexTranslations + { + DOWN(0, 1, 2, 3), + UP(2, 3, 0, 1), + NORTH(3, 0, 1, 2), + SOUTH(0, 1, 2, 3), + WEST(3, 0, 1, 2), + EAST(1, 2, 3, 0); + + private final int vert0; + private final int vert1; + private final int vert2; + private final int vert3; + private static final BlockModelRenderer.VertexTranslations[] VALUES = new BlockModelRenderer.VertexTranslations[6]; + + private VertexTranslations(int p_i46234_3_, int p_i46234_4_, int p_i46234_5_, int p_i46234_6_) + { + this.vert0 = p_i46234_3_; + this.vert1 = p_i46234_4_; + this.vert2 = p_i46234_5_; + this.vert3 = p_i46234_6_; + } + + public static BlockModelRenderer.VertexTranslations getVertexTranslations(EnumFacing p_178184_0_) + { + return VALUES[p_178184_0_.getIndex()]; + } + + static + { + VALUES[EnumFacing.DOWN.getIndex()] = DOWN; + VALUES[EnumFacing.UP.getIndex()] = UP; + VALUES[EnumFacing.NORTH.getIndex()] = NORTH; + VALUES[EnumFacing.SOUTH.getIndex()] = SOUTH; + VALUES[EnumFacing.WEST.getIndex()] = WEST; + VALUES[EnumFacing.EAST.getIndex()] = EAST; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockModelShapes.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockModelShapes.java new file mode 100644 index 0000000..daa14ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockModelShapes.java @@ -0,0 +1,396 @@ +package net.minecraft.client.renderer; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCactus; +import net.minecraft.block.BlockColored; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockDropper; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockFire; +import net.minecraft.block.BlockFlowerPot; +import net.minecraft.block.BlockHopper; +import net.minecraft.block.BlockJukebox; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockNewLeaf; +import net.minecraft.block.BlockNewLog; +import net.minecraft.block.BlockOldLeaf; +import net.minecraft.block.BlockOldLog; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockPrismarine; +import net.minecraft.block.BlockQuartz; +import net.minecraft.block.BlockRedSandstone; +import net.minecraft.block.BlockRedstoneWire; +import net.minecraft.block.BlockReed; +import net.minecraft.block.BlockSand; +import net.minecraft.block.BlockSandStone; +import net.minecraft.block.BlockSapling; +import net.minecraft.block.BlockSilverfish; +import net.minecraft.block.BlockStem; +import net.minecraft.block.BlockStone; +import net.minecraft.block.BlockStoneBrick; +import net.minecraft.block.BlockStoneSlab; +import net.minecraft.block.BlockStoneSlabNew; +import net.minecraft.block.BlockTNT; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.BlockTripWire; +import net.minecraft.block.BlockWall; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.block.statemap.BlockStateMapper; +import net.minecraft.client.renderer.block.statemap.IStateMapper; +import net.minecraft.client.renderer.block.statemap.StateMap; +import net.minecraft.client.renderer.block.statemap.StateMapperBase; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockModelShapes +{ + private final Map bakedModelStore = Maps.newIdentityHashMap(); + private final BlockStateMapper blockStateMapper = new BlockStateMapper(); + private final ModelManager modelManager; + + public BlockModelShapes(ModelManager manager) + { + this.modelManager = manager; + this.registerAllBlocks(); + } + + public BlockStateMapper getBlockStateMapper() + { + return this.blockStateMapper; + } + + public TextureAtlasSprite getTexture(IBlockState state) + { + Block block = state.getBlock(); + IBakedModel ibakedmodel = this.getModelForState(state); + + if (ibakedmodel == null || ibakedmodel == this.modelManager.getMissingModel()) + { + if (block == Blocks.WALL_SIGN || block == Blocks.STANDING_SIGN || block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST || block == Blocks.STANDING_BANNER || block == Blocks.WALL_BANNER || block == Blocks.BED) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/planks_oak"); + } + + if (block == Blocks.ENDER_CHEST) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/obsidian"); + } + + if (block == Blocks.FLOWING_LAVA || block == Blocks.LAVA) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/lava_still"); + } + + if (block == Blocks.FLOWING_WATER || block == Blocks.WATER) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/water_still"); + } + + if (block == Blocks.SKULL) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/soul_sand"); + } + + if (block == Blocks.BARRIER) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:items/barrier"); + } + + if (block == Blocks.STRUCTURE_VOID) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:items/structure_void"); + } + + if (block == Blocks.WHITE_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_white"); + } + + if (block == Blocks.ORANGE_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_orange"); + } + + if (block == Blocks.MAGENTA_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_magenta"); + } + + if (block == Blocks.LIGHT_BLUE_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_light_blue"); + } + + if (block == Blocks.YELLOW_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_yellow"); + } + + if (block == Blocks.LIME_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_lime"); + } + + if (block == Blocks.PINK_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_pink"); + } + + if (block == Blocks.GRAY_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_gray"); + } + + if (block == Blocks.SILVER_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_silver"); + } + + if (block == Blocks.CYAN_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_cyan"); + } + + if (block == Blocks.PURPLE_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_purple"); + } + + if (block == Blocks.BLUE_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_blue"); + } + + if (block == Blocks.BROWN_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_brown"); + } + + if (block == Blocks.GREEN_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_green"); + } + + if (block == Blocks.RED_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_red"); + } + + if (block == Blocks.BLACK_SHULKER_BOX) + { + return this.modelManager.getTextureMap().getAtlasSprite("minecraft:blocks/shulker_top_black"); + } + } + + if (ibakedmodel == null) + { + ibakedmodel = this.modelManager.getMissingModel(); + } + + return ibakedmodel.getParticleTexture(); + } + + public IBakedModel getModelForState(IBlockState state) + { + IBakedModel ibakedmodel = this.bakedModelStore.get(state); + + if (ibakedmodel == null) + { + ibakedmodel = this.modelManager.getMissingModel(); + } + + return ibakedmodel; + } + + public ModelManager getModelManager() + { + return this.modelManager; + } + + public void reloadModels() + { + this.bakedModelStore.clear(); + + for (Entry entry : this.blockStateMapper.putAllStateModelLocations().entrySet()) + { + this.bakedModelStore.put(entry.getKey(), this.modelManager.getModel(entry.getValue())); + } + } + + public void registerBlockWithStateMapper(Block assoc, IStateMapper stateMapper) + { + this.blockStateMapper.registerBlockStateMapper(assoc, stateMapper); + } + + public void registerBuiltInBlocks(Block... builtIns) + { + this.blockStateMapper.registerBuiltInBlocks(builtIns); + } + + private void registerAllBlocks() + { + this.registerBuiltInBlocks(Blocks.AIR, Blocks.FLOWING_WATER, Blocks.WATER, Blocks.FLOWING_LAVA, Blocks.LAVA, Blocks.PISTON_EXTENSION, Blocks.CHEST, Blocks.ENDER_CHEST, Blocks.TRAPPED_CHEST, Blocks.STANDING_SIGN, Blocks.SKULL, Blocks.END_PORTAL, Blocks.BARRIER, Blocks.WALL_SIGN, Blocks.WALL_BANNER, Blocks.STANDING_BANNER, Blocks.END_GATEWAY, Blocks.STRUCTURE_VOID, Blocks.WHITE_SHULKER_BOX, Blocks.ORANGE_SHULKER_BOX, Blocks.MAGENTA_SHULKER_BOX, Blocks.LIGHT_BLUE_SHULKER_BOX, Blocks.YELLOW_SHULKER_BOX, Blocks.LIME_SHULKER_BOX, Blocks.PINK_SHULKER_BOX, Blocks.GRAY_SHULKER_BOX, Blocks.SILVER_SHULKER_BOX, Blocks.CYAN_SHULKER_BOX, Blocks.PURPLE_SHULKER_BOX, Blocks.BLUE_SHULKER_BOX, Blocks.BROWN_SHULKER_BOX, Blocks.GREEN_SHULKER_BOX, Blocks.RED_SHULKER_BOX, Blocks.BLACK_SHULKER_BOX, Blocks.BED); + this.registerBlockWithStateMapper(Blocks.STONE, (new StateMap.Builder()).withName(BlockStone.VARIANT).build()); + this.registerBlockWithStateMapper(Blocks.PRISMARINE, (new StateMap.Builder()).withName(BlockPrismarine.VARIANT).build()); + this.registerBlockWithStateMapper(Blocks.LEAVES, (new StateMap.Builder()).withName(BlockOldLeaf.VARIANT).withSuffix("_leaves").ignore(BlockLeaves.CHECK_DECAY, BlockLeaves.DECAYABLE).build()); + this.registerBlockWithStateMapper(Blocks.LEAVES2, (new StateMap.Builder()).withName(BlockNewLeaf.VARIANT).withSuffix("_leaves").ignore(BlockLeaves.CHECK_DECAY, BlockLeaves.DECAYABLE).build()); + this.registerBlockWithStateMapper(Blocks.CACTUS, (new StateMap.Builder()).ignore(BlockCactus.AGE).build()); + this.registerBlockWithStateMapper(Blocks.REEDS, (new StateMap.Builder()).ignore(BlockReed.AGE).build()); + this.registerBlockWithStateMapper(Blocks.JUKEBOX, (new StateMap.Builder()).ignore(BlockJukebox.HAS_RECORD).build()); + this.registerBlockWithStateMapper(Blocks.COBBLESTONE_WALL, (new StateMap.Builder()).withName(BlockWall.VARIANT).withSuffix("_wall").build()); + this.registerBlockWithStateMapper(Blocks.DOUBLE_PLANT, (new StateMap.Builder()).withName(BlockDoublePlant.VARIANT).ignore(BlockDoublePlant.FACING).build()); + this.registerBlockWithStateMapper(Blocks.OAK_FENCE_GATE, (new StateMap.Builder()).ignore(BlockFenceGate.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.SPRUCE_FENCE_GATE, (new StateMap.Builder()).ignore(BlockFenceGate.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.BIRCH_FENCE_GATE, (new StateMap.Builder()).ignore(BlockFenceGate.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.JUNGLE_FENCE_GATE, (new StateMap.Builder()).ignore(BlockFenceGate.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.DARK_OAK_FENCE_GATE, (new StateMap.Builder()).ignore(BlockFenceGate.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.ACACIA_FENCE_GATE, (new StateMap.Builder()).ignore(BlockFenceGate.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.TRIPWIRE, (new StateMap.Builder()).ignore(BlockTripWire.DISARMED, BlockTripWire.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.DOUBLE_WOODEN_SLAB, (new StateMap.Builder()).withName(BlockPlanks.VARIANT).withSuffix("_double_slab").build()); + this.registerBlockWithStateMapper(Blocks.WOODEN_SLAB, (new StateMap.Builder()).withName(BlockPlanks.VARIANT).withSuffix("_slab").build()); + this.registerBlockWithStateMapper(Blocks.TNT, (new StateMap.Builder()).ignore(BlockTNT.EXPLODE).build()); + this.registerBlockWithStateMapper(Blocks.FIRE, (new StateMap.Builder()).ignore(BlockFire.AGE).build()); + this.registerBlockWithStateMapper(Blocks.REDSTONE_WIRE, (new StateMap.Builder()).ignore(BlockRedstoneWire.POWER).build()); + this.registerBlockWithStateMapper(Blocks.OAK_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.SPRUCE_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.BIRCH_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.JUNGLE_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.ACACIA_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.DARK_OAK_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.IRON_DOOR, (new StateMap.Builder()).ignore(BlockDoor.POWERED).build()); + this.registerBlockWithStateMapper(Blocks.WOOL, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_wool").build()); + this.registerBlockWithStateMapper(Blocks.CARPET, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_carpet").build()); + this.registerBlockWithStateMapper(Blocks.STAINED_HARDENED_CLAY, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_stained_hardened_clay").build()); + this.registerBlockWithStateMapper(Blocks.STAINED_GLASS_PANE, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_stained_glass_pane").build()); + this.registerBlockWithStateMapper(Blocks.STAINED_GLASS, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_stained_glass").build()); + this.registerBlockWithStateMapper(Blocks.SANDSTONE, (new StateMap.Builder()).withName(BlockSandStone.TYPE).build()); + this.registerBlockWithStateMapper(Blocks.RED_SANDSTONE, (new StateMap.Builder()).withName(BlockRedSandstone.TYPE).build()); + this.registerBlockWithStateMapper(Blocks.TALLGRASS, (new StateMap.Builder()).withName(BlockTallGrass.TYPE).build()); + this.registerBlockWithStateMapper(Blocks.YELLOW_FLOWER, (new StateMap.Builder()).withName(Blocks.YELLOW_FLOWER.getTypeProperty()).build()); + this.registerBlockWithStateMapper(Blocks.RED_FLOWER, (new StateMap.Builder()).withName(Blocks.RED_FLOWER.getTypeProperty()).build()); + this.registerBlockWithStateMapper(Blocks.STONE_SLAB, (new StateMap.Builder()).withName(BlockStoneSlab.VARIANT).withSuffix("_slab").build()); + this.registerBlockWithStateMapper(Blocks.STONE_SLAB2, (new StateMap.Builder()).withName(BlockStoneSlabNew.VARIANT).withSuffix("_slab").build()); + this.registerBlockWithStateMapper(Blocks.MONSTER_EGG, (new StateMap.Builder()).withName(BlockSilverfish.VARIANT).withSuffix("_monster_egg").build()); + this.registerBlockWithStateMapper(Blocks.STONEBRICK, (new StateMap.Builder()).withName(BlockStoneBrick.VARIANT).build()); + this.registerBlockWithStateMapper(Blocks.DISPENSER, (new StateMap.Builder()).ignore(BlockDispenser.TRIGGERED).build()); + this.registerBlockWithStateMapper(Blocks.DROPPER, (new StateMap.Builder()).ignore(BlockDropper.TRIGGERED).build()); + this.registerBlockWithStateMapper(Blocks.LOG, (new StateMap.Builder()).withName(BlockOldLog.VARIANT).withSuffix("_log").build()); + this.registerBlockWithStateMapper(Blocks.LOG2, (new StateMap.Builder()).withName(BlockNewLog.VARIANT).withSuffix("_log").build()); + this.registerBlockWithStateMapper(Blocks.PLANKS, (new StateMap.Builder()).withName(BlockPlanks.VARIANT).withSuffix("_planks").build()); + this.registerBlockWithStateMapper(Blocks.SAPLING, (new StateMap.Builder()).withName(BlockSapling.TYPE).withSuffix("_sapling").build()); + this.registerBlockWithStateMapper(Blocks.SAND, (new StateMap.Builder()).withName(BlockSand.VARIANT).build()); + this.registerBlockWithStateMapper(Blocks.HOPPER, (new StateMap.Builder()).ignore(BlockHopper.ENABLED).build()); + this.registerBlockWithStateMapper(Blocks.FLOWER_POT, (new StateMap.Builder()).ignore(BlockFlowerPot.LEGACY_DATA).build()); + this.registerBlockWithStateMapper(Blocks.CONCRETE, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_concrete").build()); + this.registerBlockWithStateMapper(Blocks.CONCRETE_POWDER, (new StateMap.Builder()).withName(BlockColored.COLOR).withSuffix("_concrete_powder").build()); + this.registerBlockWithStateMapper(Blocks.QUARTZ_BLOCK, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + BlockQuartz.EnumType blockquartz$enumtype = (BlockQuartz.EnumType)state.getValue(BlockQuartz.VARIANT); + + switch (blockquartz$enumtype) + { + case DEFAULT: + default: + return new ModelResourceLocation("quartz_block", "normal"); + case CHISELED: + return new ModelResourceLocation("chiseled_quartz_block", "normal"); + case LINES_Y: + return new ModelResourceLocation("quartz_column", "axis=y"); + case LINES_X: + return new ModelResourceLocation("quartz_column", "axis=x"); + case LINES_Z: + return new ModelResourceLocation("quartz_column", "axis=z"); + } + } + }); + this.registerBlockWithStateMapper(Blocks.DEADBUSH, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return new ModelResourceLocation("dead_bush", "normal"); + } + }); + this.registerBlockWithStateMapper(Blocks.PUMPKIN_STEM, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newLinkedHashMap(state.getProperties()); + + if (state.getValue(BlockStem.FACING) != EnumFacing.UP) + { + map.remove(BlockStem.AGE); + } + + return new ModelResourceLocation(Block.REGISTRY.getNameForObject(state.getBlock()), this.getPropertyString(map)); + } + }); + this.registerBlockWithStateMapper(Blocks.MELON_STEM, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newLinkedHashMap(state.getProperties()); + + if (state.getValue(BlockStem.FACING) != EnumFacing.UP) + { + map.remove(BlockStem.AGE); + } + + return new ModelResourceLocation(Block.REGISTRY.getNameForObject(state.getBlock()), this.getPropertyString(map)); + } + }); + this.registerBlockWithStateMapper(Blocks.DIRT, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newLinkedHashMap(state.getProperties()); + String s = BlockDirt.VARIANT.getName((BlockDirt.DirtType)map.remove(BlockDirt.VARIANT)); + + if (BlockDirt.DirtType.PODZOL != state.getValue(BlockDirt.VARIANT)) + { + map.remove(BlockDirt.SNOWY); + } + + return new ModelResourceLocation(s, this.getPropertyString(map)); + } + }); + this.registerBlockWithStateMapper(Blocks.DOUBLE_STONE_SLAB, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newLinkedHashMap(state.getProperties()); + String s = BlockStoneSlab.VARIANT.getName((BlockStoneSlab.EnumType)map.remove(BlockStoneSlab.VARIANT)); + map.remove(BlockStoneSlab.SEAMLESS); + String s1 = ((Boolean)state.getValue(BlockStoneSlab.SEAMLESS)).booleanValue() ? "all" : "normal"; + return new ModelResourceLocation(s + "_double_slab", s1); + } + }); + this.registerBlockWithStateMapper(Blocks.DOUBLE_STONE_SLAB2, new StateMapperBase() + { + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newLinkedHashMap(state.getProperties()); + String s = BlockStoneSlabNew.VARIANT.getName((BlockStoneSlabNew.EnumType)map.remove(BlockStoneSlabNew.VARIANT)); + map.remove(BlockStoneSlab.SEAMLESS); + String s1 = ((Boolean)state.getValue(BlockStoneSlabNew.SEAMLESS)).booleanValue() ? "all" : "normal"; + return new ModelResourceLocation(s + "_double_slab", s1); + } + }); + net.minecraftforge.client.model.ModelLoader.onRegisterAllBlocks(this); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockRendererDispatcher.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockRendererDispatcher.java new file mode 100644 index 0000000..6e329c5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BlockRendererDispatcher.java @@ -0,0 +1,133 @@ +package net.minecraft.client.renderer; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.SimpleBakedModel; +import net.minecraft.client.renderer.color.BlockColors; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.WorldType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockRendererDispatcher implements IResourceManagerReloadListener +{ + private final BlockModelShapes blockModelShapes; + private final BlockModelRenderer blockModelRenderer; + private final ChestRenderer chestRenderer = new ChestRenderer(); + private final BlockFluidRenderer fluidRenderer; + + public BlockRendererDispatcher(BlockModelShapes p_i46577_1_, BlockColors p_i46577_2_) + { + this.blockModelShapes = p_i46577_1_; + this.blockModelRenderer = new net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer(p_i46577_2_); + this.fluidRenderer = new BlockFluidRenderer(p_i46577_2_); + } + + public BlockModelShapes getBlockModelShapes() + { + return this.blockModelShapes; + } + + public void renderBlockDamage(IBlockState state, BlockPos pos, TextureAtlasSprite texture, IBlockAccess blockAccess) + { + if (state.getRenderType() == EnumBlockRenderType.MODEL) + { + state = state.getActualState(blockAccess, pos); + IBakedModel ibakedmodel = this.blockModelShapes.getModelForState(state); + IBakedModel ibakedmodel1 = net.minecraftforge.client.ForgeHooksClient.getDamageModel(ibakedmodel, texture, state, blockAccess, pos); + this.blockModelRenderer.renderModel(blockAccess, ibakedmodel1, state, pos, Tessellator.getInstance().getBuffer(), true); + } + } + + public boolean renderBlock(IBlockState state, BlockPos pos, IBlockAccess blockAccess, BufferBuilder bufferBuilderIn) + { + try + { + EnumBlockRenderType enumblockrendertype = state.getRenderType(); + + if (enumblockrendertype == EnumBlockRenderType.INVISIBLE) + { + return false; + } + else + { + if (blockAccess.getWorldType() != WorldType.DEBUG_ALL_BLOCK_STATES) + { + try + { + state = state.getActualState(blockAccess, pos); + } + catch (Exception var8) + { + ; + } + } + + switch (enumblockrendertype) + { + case MODEL: + IBakedModel model = this.getModelForState(state); + state = state.getBlock().getExtendedState(state, blockAccess, pos); + return this.blockModelRenderer.renderModel(blockAccess, model, state, pos, bufferBuilderIn, true); + case ENTITYBLOCK_ANIMATED: + return false; + case LIQUID: + return this.fluidRenderer.renderFluid(blockAccess, state, pos, bufferBuilderIn); + default: + return false; + } + } + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Tesselating block in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being tesselated"); + CrashReportCategory.addBlockInfo(crashreportcategory, pos, state.getBlock(), state.getBlock().getMetaFromState(state)); + throw new ReportedException(crashreport); + } + } + + public BlockModelRenderer getBlockModelRenderer() + { + return this.blockModelRenderer; + } + + public IBakedModel getModelForState(IBlockState state) + { + return this.blockModelShapes.getModelForState(state); + } + + @SuppressWarnings("incomplete-switch") + public void renderBlockBrightness(IBlockState state, float brightness) + { + EnumBlockRenderType enumblockrendertype = state.getRenderType(); + + if (enumblockrendertype != EnumBlockRenderType.INVISIBLE) + { + switch (enumblockrendertype) + { + case MODEL: + IBakedModel ibakedmodel = this.getModelForState(state); + this.blockModelRenderer.renderModelBrightness(ibakedmodel, state, brightness, true); + break; + case ENTITYBLOCK_ANIMATED: + this.chestRenderer.renderChestBrightness(state.getBlock(), brightness); + case LIQUID: + } + } + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.fluidRenderer.initAtlasSprites(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BufferBuilder.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BufferBuilder.java new file mode 100644 index 0000000..8b84f84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/BufferBuilder.java @@ -0,0 +1,648 @@ +package net.minecraft.client.renderer; + +import com.google.common.primitives.Floats; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.ShortBuffer; +import java.util.Arrays; +import java.util.BitSet; +import java.util.Comparator; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class BufferBuilder +{ + private static final Logger LOGGER = LogManager.getLogger(); + private ByteBuffer byteBuffer; + private IntBuffer rawIntBuffer; + private ShortBuffer rawShortBuffer; + private FloatBuffer rawFloatBuffer; + private int vertexCount; + private VertexFormatElement vertexFormatElement; + private int vertexFormatIndex; + /** None */ + private boolean noColor; + private int drawMode; + private double xOffset; + private double yOffset; + private double zOffset; + private VertexFormat vertexFormat; + private boolean isDrawing; + + public BufferBuilder(int bufferSizeIn) + { + this.byteBuffer = GLAllocation.createDirectByteBuffer(bufferSizeIn * 4); + this.rawIntBuffer = this.byteBuffer.asIntBuffer(); + this.rawShortBuffer = this.byteBuffer.asShortBuffer(); + this.rawFloatBuffer = this.byteBuffer.asFloatBuffer(); + } + + private void growBuffer(int p_181670_1_) + { + if (MathHelper.roundUp(p_181670_1_, 4) / 4 > this.rawIntBuffer.remaining() || this.vertexCount * this.vertexFormat.getNextOffset() + p_181670_1_ > this.byteBuffer.capacity()) + { + int i = this.byteBuffer.capacity(); + int j = i + MathHelper.roundUp(p_181670_1_, 2097152); + LOGGER.debug("Needed to grow BufferBuilder buffer: Old size {} bytes, new size {} bytes.", Integer.valueOf(i), Integer.valueOf(j)); + int k = this.rawIntBuffer.position(); + ByteBuffer bytebuffer = GLAllocation.createDirectByteBuffer(j); + this.byteBuffer.position(0); + bytebuffer.put(this.byteBuffer); + bytebuffer.rewind(); + this.byteBuffer = bytebuffer; + this.rawFloatBuffer = this.byteBuffer.asFloatBuffer().asReadOnlyBuffer(); + this.rawIntBuffer = this.byteBuffer.asIntBuffer(); + this.rawIntBuffer.position(k); + this.rawShortBuffer = this.byteBuffer.asShortBuffer(); + this.rawShortBuffer.position(k << 1); + } + } + + public void sortVertexData(float p_181674_1_, float p_181674_2_, float p_181674_3_) + { + int i = this.vertexCount / 4; + final float[] afloat = new float[i]; + + for (int j = 0; j < i; ++j) + { + afloat[j] = getDistanceSq(this.rawFloatBuffer, (float)((double)p_181674_1_ + this.xOffset), (float)((double)p_181674_2_ + this.yOffset), (float)((double)p_181674_3_ + this.zOffset), this.vertexFormat.getIntegerSize(), j * this.vertexFormat.getNextOffset()); + } + + Integer[] ainteger = new Integer[i]; + + for (int k = 0; k < ainteger.length; ++k) + { + ainteger[k] = k; + } + + Arrays.sort(ainteger, new Comparator() + { + public int compare(Integer p_compare_1_, Integer p_compare_2_) + { + return Floats.compare(afloat[p_compare_2_.intValue()], afloat[p_compare_1_.intValue()]); + } + }); + BitSet bitset = new BitSet(); + int l = this.vertexFormat.getNextOffset(); + int[] aint = new int[l]; + + for (int i1 = bitset.nextClearBit(0); i1 < ainteger.length; i1 = bitset.nextClearBit(i1 + 1)) + { + int j1 = ainteger[i1].intValue(); + + if (j1 != i1) + { + this.rawIntBuffer.limit(j1 * l + l); + this.rawIntBuffer.position(j1 * l); + this.rawIntBuffer.get(aint); + int k1 = j1; + + for (int l1 = ainteger[j1].intValue(); k1 != i1; l1 = ainteger[l1].intValue()) + { + this.rawIntBuffer.limit(l1 * l + l); + this.rawIntBuffer.position(l1 * l); + IntBuffer intbuffer = this.rawIntBuffer.slice(); + this.rawIntBuffer.limit(k1 * l + l); + this.rawIntBuffer.position(k1 * l); + this.rawIntBuffer.put(intbuffer); + bitset.set(k1); + k1 = l1; + } + + this.rawIntBuffer.limit(i1 * l + l); + this.rawIntBuffer.position(i1 * l); + this.rawIntBuffer.put(aint); + } + + bitset.set(i1); + } + this.rawIntBuffer.limit(this.rawIntBuffer.capacity()); + this.rawIntBuffer.position(this.getBufferSize()); + } + + public BufferBuilder.State getVertexState() + { + this.rawIntBuffer.rewind(); + int i = this.getBufferSize(); + this.rawIntBuffer.limit(i); + int[] aint = new int[i]; + this.rawIntBuffer.get(aint); + this.rawIntBuffer.limit(this.rawIntBuffer.capacity()); + this.rawIntBuffer.position(i); + return new BufferBuilder.State(aint, new VertexFormat(this.vertexFormat)); + } + + private int getBufferSize() + { + return this.vertexCount * this.vertexFormat.getIntegerSize(); + } + + private static float getDistanceSq(FloatBuffer p_181665_0_, float p_181665_1_, float p_181665_2_, float p_181665_3_, int p_181665_4_, int p_181665_5_) + { + float f = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 0 + 0); + float f1 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 0 + 1); + float f2 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 0 + 2); + float f3 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 1 + 0); + float f4 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 1 + 1); + float f5 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 1 + 2); + float f6 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 2 + 0); + float f7 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 2 + 1); + float f8 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 2 + 2); + float f9 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 3 + 0); + float f10 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 3 + 1); + float f11 = p_181665_0_.get(p_181665_5_ + p_181665_4_ * 3 + 2); + float f12 = (f + f3 + f6 + f9) * 0.25F - p_181665_1_; + float f13 = (f1 + f4 + f7 + f10) * 0.25F - p_181665_2_; + float f14 = (f2 + f5 + f8 + f11) * 0.25F - p_181665_3_; + return f12 * f12 + f13 * f13 + f14 * f14; + } + + public void setVertexState(BufferBuilder.State state) + { + this.rawIntBuffer.clear(); + this.growBuffer(state.getRawBuffer().length * 4); + this.rawIntBuffer.put(state.getRawBuffer()); + this.vertexCount = state.getVertexCount(); + this.vertexFormat = new VertexFormat(state.getVertexFormat()); + } + + public void reset() + { + this.vertexCount = 0; + this.vertexFormatElement = null; + this.vertexFormatIndex = 0; + } + + public void begin(int glMode, VertexFormat format) + { + if (this.isDrawing) + { + throw new IllegalStateException("Already building!"); + } + else + { + this.isDrawing = true; + this.reset(); + this.drawMode = glMode; + this.vertexFormat = format; + this.vertexFormatElement = format.getElement(this.vertexFormatIndex); + this.noColor = false; + this.byteBuffer.limit(this.byteBuffer.capacity()); + } + } + + public BufferBuilder tex(double u, double v) + { + int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex); + + switch (this.vertexFormatElement.getType()) + { + case FLOAT: + this.byteBuffer.putFloat(i, (float)u); + this.byteBuffer.putFloat(i + 4, (float)v); + break; + case UINT: + case INT: + this.byteBuffer.putInt(i, (int)u); + this.byteBuffer.putInt(i + 4, (int)v); + break; + case USHORT: + case SHORT: + this.byteBuffer.putShort(i, (short)((int)v)); + this.byteBuffer.putShort(i + 2, (short)((int)u)); + break; + case UBYTE: + case BYTE: + this.byteBuffer.put(i, (byte)((int)v)); + this.byteBuffer.put(i + 1, (byte)((int)u)); + } + + this.nextVertexFormatIndex(); + return this; + } + + public BufferBuilder lightmap(int p_187314_1_, int p_187314_2_) + { + int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex); + + switch (this.vertexFormatElement.getType()) + { + case FLOAT: + this.byteBuffer.putFloat(i, (float)p_187314_1_); + this.byteBuffer.putFloat(i + 4, (float)p_187314_2_); + break; + case UINT: + case INT: + this.byteBuffer.putInt(i, p_187314_1_); + this.byteBuffer.putInt(i + 4, p_187314_2_); + break; + case USHORT: + case SHORT: + this.byteBuffer.putShort(i, (short)p_187314_2_); + this.byteBuffer.putShort(i + 2, (short)p_187314_1_); + break; + case UBYTE: + case BYTE: + this.byteBuffer.put(i, (byte)p_187314_2_); + this.byteBuffer.put(i + 1, (byte)p_187314_1_); + } + + this.nextVertexFormatIndex(); + return this; + } + + public void putBrightness4(int p_178962_1_, int p_178962_2_, int p_178962_3_, int p_178962_4_) + { + int i = (this.vertexCount - 4) * this.vertexFormat.getIntegerSize() + this.vertexFormat.getUvOffsetById(1) / 4; + int j = this.vertexFormat.getNextOffset() >> 2; + this.rawIntBuffer.put(i, p_178962_1_); + this.rawIntBuffer.put(i + j, p_178962_2_); + this.rawIntBuffer.put(i + j * 2, p_178962_3_); + this.rawIntBuffer.put(i + j * 3, p_178962_4_); + } + + public void putPosition(double x, double y, double z) + { + int i = this.vertexFormat.getIntegerSize(); + int j = (this.vertexCount - 4) * i; + + for (int k = 0; k < 4; ++k) + { + int l = j + k * i; + int i1 = l + 1; + int j1 = i1 + 1; + this.rawIntBuffer.put(l, Float.floatToRawIntBits((float)(x + this.xOffset) + Float.intBitsToFloat(this.rawIntBuffer.get(l)))); + this.rawIntBuffer.put(i1, Float.floatToRawIntBits((float)(y + this.yOffset) + Float.intBitsToFloat(this.rawIntBuffer.get(i1)))); + this.rawIntBuffer.put(j1, Float.floatToRawIntBits((float)(z + this.zOffset) + Float.intBitsToFloat(this.rawIntBuffer.get(j1)))); + } + } + + /** + * Gets the position into the vertex data buffer at which the given vertex's color data can be found, in {@code + * int}s. + */ + public int getColorIndex(int vertexIndex) + { + return ((this.vertexCount - vertexIndex) * this.vertexFormat.getNextOffset() + this.vertexFormat.getColorOffset()) / 4; + } + + /** + * Modify the color data of the given vertex with the given multipliers. + */ + public void putColorMultiplier(float red, float green, float blue, int vertexIndex) + { + int i = this.getColorIndex(vertexIndex); + int j = -1; + + if (!this.noColor) + { + j = this.rawIntBuffer.get(i); + + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) + { + int k = (int)((float)(j & 255) * red); + int l = (int)((float)(j >> 8 & 255) * green); + int i1 = (int)((float)(j >> 16 & 255) * blue); + j = j & -16777216; + j = j | i1 << 16 | l << 8 | k; + } + else + { + int j1 = (int)((float)(j >> 24 & 255) * red); + int k1 = (int)((float)(j >> 16 & 255) * green); + int l1 = (int)((float)(j >> 8 & 255) * blue); + j = j & 255; + j = j | j1 << 24 | k1 << 16 | l1 << 8; + } + } + + this.rawIntBuffer.put(i, j); + } + + private void putColor(int argb, int vertexIndex) + { + int i = this.getColorIndex(vertexIndex); + int j = argb >> 16 & 255; + int k = argb >> 8 & 255; + int l = argb & 255; + this.putColorRGBA(i, j, k, l); + } + + public void putColorRGB_F(float red, float green, float blue, int vertexIndex) + { + int i = this.getColorIndex(vertexIndex); + int j = MathHelper.clamp((int)(red * 255.0F), 0, 255); + int k = MathHelper.clamp((int)(green * 255.0F), 0, 255); + int l = MathHelper.clamp((int)(blue * 255.0F), 0, 255); + this.putColorRGBA(i, j, k, l); + } + + /** + * Write the given color data of 4 bytes at the given index into the vertex data buffer, accounting for system + * endianness. + */ + public void putColorRGBA(int index, int red, int green, int blue) + { + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) + { + this.rawIntBuffer.put(index, -16777216 | blue << 16 | green << 8 | red); + } + else + { + this.rawIntBuffer.put(index, red << 24 | green << 16 | blue << 8 | 255); + } + } + + /** + * Disables color processing. + */ + public void noColor() + { + this.noColor = true; + } + + public BufferBuilder color(float red, float green, float blue, float alpha) + { + return this.color((int)(red * 255.0F), (int)(green * 255.0F), (int)(blue * 255.0F), (int)(alpha * 255.0F)); + } + + public BufferBuilder color(int red, int green, int blue, int alpha) + { + if (this.noColor) + { + return this; + } + else + { + int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex); + + switch (this.vertexFormatElement.getType()) + { + case FLOAT: + this.byteBuffer.putFloat(i, (float)red / 255.0F); + this.byteBuffer.putFloat(i + 4, (float)green / 255.0F); + this.byteBuffer.putFloat(i + 8, (float)blue / 255.0F); + this.byteBuffer.putFloat(i + 12, (float)alpha / 255.0F); + break; + case UINT: + case INT: + this.byteBuffer.putFloat(i, (float)red); + this.byteBuffer.putFloat(i + 4, (float)green); + this.byteBuffer.putFloat(i + 8, (float)blue); + this.byteBuffer.putFloat(i + 12, (float)alpha); + break; + case USHORT: + case SHORT: + this.byteBuffer.putShort(i, (short)red); + this.byteBuffer.putShort(i + 2, (short)green); + this.byteBuffer.putShort(i + 4, (short)blue); + this.byteBuffer.putShort(i + 6, (short)alpha); + break; + case UBYTE: + case BYTE: + + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) + { + this.byteBuffer.put(i, (byte)red); + this.byteBuffer.put(i + 1, (byte)green); + this.byteBuffer.put(i + 2, (byte)blue); + this.byteBuffer.put(i + 3, (byte)alpha); + } + else + { + this.byteBuffer.put(i, (byte)alpha); + this.byteBuffer.put(i + 1, (byte)blue); + this.byteBuffer.put(i + 2, (byte)green); + this.byteBuffer.put(i + 3, (byte)red); + } + } + + this.nextVertexFormatIndex(); + return this; + } + } + + public void addVertexData(int[] vertexData) + { + this.growBuffer(vertexData.length * 4 + this.vertexFormat.getNextOffset());//Forge, fix MC-122110 + this.rawIntBuffer.position(this.getBufferSize()); + this.rawIntBuffer.put(vertexData); + this.vertexCount += vertexData.length / this.vertexFormat.getIntegerSize(); + } + + public void endVertex() + { + ++this.vertexCount; + this.growBuffer(this.vertexFormat.getNextOffset()); + } + + public BufferBuilder pos(double x, double y, double z) + { + int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex); + + switch (this.vertexFormatElement.getType()) + { + case FLOAT: + this.byteBuffer.putFloat(i, (float)(x + this.xOffset)); + this.byteBuffer.putFloat(i + 4, (float)(y + this.yOffset)); + this.byteBuffer.putFloat(i + 8, (float)(z + this.zOffset)); + break; + case UINT: + case INT: + this.byteBuffer.putInt(i, Float.floatToRawIntBits((float)(x + this.xOffset))); + this.byteBuffer.putInt(i + 4, Float.floatToRawIntBits((float)(y + this.yOffset))); + this.byteBuffer.putInt(i + 8, Float.floatToRawIntBits((float)(z + this.zOffset))); + break; + case USHORT: + case SHORT: + this.byteBuffer.putShort(i, (short)((int)(x + this.xOffset))); + this.byteBuffer.putShort(i + 2, (short)((int)(y + this.yOffset))); + this.byteBuffer.putShort(i + 4, (short)((int)(z + this.zOffset))); + break; + case UBYTE: + case BYTE: + this.byteBuffer.put(i, (byte)((int)(x + this.xOffset))); + this.byteBuffer.put(i + 1, (byte)((int)(y + this.yOffset))); + this.byteBuffer.put(i + 2, (byte)((int)(z + this.zOffset))); + } + + this.nextVertexFormatIndex(); + return this; + } + + public void putNormal(float x, float y, float z) + { + int i = (byte)((int)(x * 127.0F)) & 255; + int j = (byte)((int)(y * 127.0F)) & 255; + int k = (byte)((int)(z * 127.0F)) & 255; + int l = i | j << 8 | k << 16; + int i1 = this.vertexFormat.getNextOffset() >> 2; + int j1 = (this.vertexCount - 4) * i1 + this.vertexFormat.getNormalOffset() / 4; + this.rawIntBuffer.put(j1, l); + this.rawIntBuffer.put(j1 + i1, l); + this.rawIntBuffer.put(j1 + i1 * 2, l); + this.rawIntBuffer.put(j1 + i1 * 3, l); + } + + private void nextVertexFormatIndex() + { + ++this.vertexFormatIndex; + this.vertexFormatIndex %= this.vertexFormat.getElementCount(); + this.vertexFormatElement = this.vertexFormat.getElement(this.vertexFormatIndex); + + if (this.vertexFormatElement.getUsage() == VertexFormatElement.EnumUsage.PADDING) + { + this.nextVertexFormatIndex(); + } + } + + public BufferBuilder normal(float x, float y, float z) + { + int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex); + + switch (this.vertexFormatElement.getType()) + { + case FLOAT: + this.byteBuffer.putFloat(i, x); + this.byteBuffer.putFloat(i + 4, y); + this.byteBuffer.putFloat(i + 8, z); + break; + case UINT: + case INT: + this.byteBuffer.putInt(i, (int)x); + this.byteBuffer.putInt(i + 4, (int)y); + this.byteBuffer.putInt(i + 8, (int)z); + break; + case USHORT: + case SHORT: + this.byteBuffer.putShort(i, (short)((int)(x * 32767) & 65535)); + this.byteBuffer.putShort(i + 2, (short)((int)(y * 32767) & 65535)); + this.byteBuffer.putShort(i + 4, (short)((int)(z * 32767) & 65535)); + break; + case UBYTE: + case BYTE: + this.byteBuffer.put(i, (byte)((int)(x * 127) & 255)); + this.byteBuffer.put(i + 1, (byte)((int)(y * 127) & 255)); + this.byteBuffer.put(i + 2, (byte)((int)(z * 127) & 255)); + } + + this.nextVertexFormatIndex(); + return this; + } + + public void setTranslation(double x, double y, double z) + { + this.xOffset = x; + this.yOffset = y; + this.zOffset = z; + } + + public void finishDrawing() + { + if (!this.isDrawing) + { + throw new IllegalStateException("Not building!"); + } + else + { + this.isDrawing = false; + this.byteBuffer.position(0); + this.byteBuffer.limit(this.getBufferSize() * 4); + } + } + + public ByteBuffer getByteBuffer() + { + return this.byteBuffer; + } + + public VertexFormat getVertexFormat() + { + return this.vertexFormat; + } + + public int getVertexCount() + { + return this.vertexCount; + } + + public int getDrawMode() + { + return this.drawMode; + } + + public void putColor4(int argb) + { + for (int i = 0; i < 4; ++i) + { + this.putColor(argb, i + 1); + } + } + + public void putColorRGB_F4(float red, float green, float blue) + { + for (int i = 0; i < 4; ++i) + { + this.putColorRGB_F(red, green, blue, i + 1); + } + } + + @SideOnly(Side.CLIENT) + public class State + { + private final int[] stateRawBuffer; + private final VertexFormat stateVertexFormat; + + public State(int[] buffer, VertexFormat format) + { + this.stateRawBuffer = buffer; + this.stateVertexFormat = format; + } + + public int[] getRawBuffer() + { + return this.stateRawBuffer; + } + + public int getVertexCount() + { + return this.stateRawBuffer.length / this.stateVertexFormat.getIntegerSize(); + } + + public VertexFormat getVertexFormat() + { + return this.stateVertexFormat; + } + } + + + //For some unknown reason Mojang changed the vanilla function to hardcode alpha as 255.... So lets re-add the parameter -.- + public void putColorRGBA(int index, int red, int green, int blue, int alpha) + { + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) + this.rawIntBuffer.put(index, alpha << 24 | blue << 16 | green << 8 | red); + else + this.rawIntBuffer.put(index, red << 24 | green << 16 | blue << 8 | alpha); + } + + public boolean isColorDisabled() + { + return this.noColor; + } + + public void putBulkData(ByteBuffer buffer) + { + growBuffer(buffer.limit() + this.vertexFormat.getNextOffset()); + this.byteBuffer.position(this.vertexCount * this.vertexFormat.getNextOffset()); + this.byteBuffer.put(buffer); + this.vertexCount += buffer.limit() / this.vertexFormat.getNextOffset(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ChestRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ChestRenderer.java new file mode 100644 index 0000000..6884758 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ChestRenderer.java @@ -0,0 +1,19 @@ +package net.minecraft.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ChestRenderer +{ + public void renderChestBrightness(Block blockIn, float color) + { + GlStateManager.color(color, color, color, 1.0F); + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + ItemStack stack = new ItemStack(blockIn); + stack.getItem().getTileEntityItemStackRenderer().renderByItem(stack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ChunkRenderContainer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ChunkRenderContainer.java new file mode 100644 index 0000000..d3ced4b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ChunkRenderContainer.java @@ -0,0 +1,41 @@ +package net.minecraft.client.renderer; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class ChunkRenderContainer +{ + private double viewEntityX; + private double viewEntityY; + private double viewEntityZ; + protected List renderChunks = Lists.newArrayListWithCapacity(17424); + protected boolean initialized; + + public void initialize(double viewEntityXIn, double viewEntityYIn, double viewEntityZIn) + { + this.initialized = true; + this.renderChunks.clear(); + this.viewEntityX = viewEntityXIn; + this.viewEntityY = viewEntityYIn; + this.viewEntityZ = viewEntityZIn; + } + + public void preRenderChunk(RenderChunk renderChunkIn) + { + BlockPos blockpos = renderChunkIn.getPosition(); + GlStateManager.translate((float)((double)blockpos.getX() - this.viewEntityX), (float)((double)blockpos.getY() - this.viewEntityY), (float)((double)blockpos.getZ() - this.viewEntityZ)); + } + + public void addRenderChunk(RenderChunk renderChunkIn, BlockRenderLayer layer) + { + this.renderChunks.add(renderChunkIn); + } + + public abstract void renderChunkLayer(BlockRenderLayer layer); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/DestroyBlockProgress.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/DestroyBlockProgress.java new file mode 100644 index 0000000..09c8436 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/DestroyBlockProgress.java @@ -0,0 +1,66 @@ +package net.minecraft.client.renderer; + +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DestroyBlockProgress +{ + /** + * entity ID of the player associated with this partially destroyed Block. Used to identify the Blocks in the client + * Renderer, max 1 per player on a server + */ + private final int miningPlayerEntId; + private final BlockPos position; + /** damage ranges from 1 to 10. -1 causes the client to delete the partial block renderer. */ + private int partialBlockProgress; + /** keeps track of how many ticks this PartiallyDestroyedBlock already exists */ + private int createdAtCloudUpdateTick; + + public DestroyBlockProgress(int miningPlayerEntIdIn, BlockPos positionIn) + { + this.miningPlayerEntId = miningPlayerEntIdIn; + this.position = positionIn; + } + + public BlockPos getPosition() + { + return this.position; + } + + /** + * inserts damage value into this partially destroyed Block. -1 causes client renderer to delete it, otherwise + * ranges from 1 to 10 + */ + public void setPartialBlockDamage(int damage) + { + if (damage > 10) + { + damage = 10; + } + + this.partialBlockProgress = damage; + } + + public int getPartialBlockDamage() + { + return this.partialBlockProgress; + } + + /** + * saves the current Cloud update tick into the PartiallyDestroyedBlock + */ + public void setCloudUpdateTick(int createdAtCloudUpdateTickIn) + { + this.createdAtCloudUpdateTick = createdAtCloudUpdateTickIn; + } + + /** + * retrieves the 'date' at which the PartiallyDestroyedBlock was created + */ + public int getCreationCloudUpdateTick() + { + return this.createdAtCloudUpdateTick; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/EntityRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/EntityRenderer.java new file mode 100644 index 0000000..784157a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/EntityRenderer.java @@ -0,0 +1,2172 @@ +package net.minecraft.client.renderer; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.gson.JsonSyntaxException; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.IOException; +import java.nio.FloatBuffer; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBed; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.MapItemRenderer; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.particle.ParticleManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.culling.ClippingHelperImpl; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.client.shader.ShaderGroup; +import net.minecraft.client.shader.ShaderLinkHelper; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.MouseFilter; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.ScreenShotHelper; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GLContext; +import org.lwjgl.util.glu.Project; + +@SideOnly(Side.CLIENT) +public class EntityRenderer implements IResourceManagerReloadListener +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation RAIN_TEXTURES = new ResourceLocation("textures/environment/rain.png"); + private static final ResourceLocation SNOW_TEXTURES = new ResourceLocation("textures/environment/snow.png"); + public static boolean anaglyphEnable; + /** Anaglyph field (0=R, 1=GB) */ + public static int anaglyphField; + /** A reference to the Minecraft object. */ + private final Minecraft mc; + private final IResourceManager resourceManager; + private final Random random = new Random(); + private float farPlaneDistance; + public final ItemRenderer itemRenderer; + private final MapItemRenderer mapItemRenderer; + /** Entity renderer update count */ + private int rendererUpdateCount; + /** Pointed entity */ + private Entity pointedEntity; + private final MouseFilter mouseFilterXAxis = new MouseFilter(); + private final MouseFilter mouseFilterYAxis = new MouseFilter(); + private final float thirdPersonDistance = 4.0F; + /** Previous third person distance */ + private float thirdPersonDistancePrev = 4.0F; + /** Smooth cam yaw */ + private float smoothCamYaw; + /** Smooth cam pitch */ + private float smoothCamPitch; + /** Smooth cam filter X */ + private float smoothCamFilterX; + /** Smooth cam filter Y */ + private float smoothCamFilterY; + /** Smooth cam partial ticks */ + private float smoothCamPartialTicks; + /** FOV modifier hand */ + private float fovModifierHand; + /** FOV modifier hand prev */ + private float fovModifierHandPrev; + private float bossColorModifier; + private float bossColorModifierPrev; + /** Cloud fog mode */ + private boolean cloudFog; + private boolean renderHand = true; + private boolean drawBlockOutline = true; + private long timeWorldIcon; + /** Previous frame time in milliseconds */ + private long prevFrameTime = Minecraft.getSystemTime(); + /** End time of last render (ns) */ + private long renderEndNanoTime; + /** The texture id of the blocklight/skylight texture used for lighting effects */ + private final DynamicTexture lightmapTexture; + /** Colors computed in updateLightmap() and loaded into the lightmap emptyTexture */ + private final int[] lightmapColors; + private final ResourceLocation locationLightMap; + /** Is set, updateCameraAndRender() calls updateLightmap(); set by updateTorchFlicker() */ + private boolean lightmapUpdateNeeded; + /** Torch flicker X */ + private float torchFlickerX; + private float torchFlickerDX; + /** Rain sound counter */ + private int rainSoundCounter; + private final float[] rainXCoords = new float[1024]; + private final float[] rainYCoords = new float[1024]; + /** Fog color buffer */ + private final FloatBuffer fogColorBuffer = GLAllocation.createDirectFloatBuffer(16); + private float fogColorRed; + private float fogColorGreen; + private float fogColorBlue; + /** Fog color 2 */ + private float fogColor2; + /** Fog color 1 */ + private float fogColor1; + private int debugViewDirection; + private boolean debugView; + private double cameraZoom = 1.0D; + private double cameraYaw; + private double cameraPitch; + private ItemStack itemActivationItem; + private int itemActivationTicks; + private float itemActivationOffX; + private float itemActivationOffY; + private ShaderGroup shaderGroup; + private static final ResourceLocation[] SHADERS_TEXTURES = new ResourceLocation[] {new ResourceLocation("shaders/post/notch.json"), new ResourceLocation("shaders/post/fxaa.json"), new ResourceLocation("shaders/post/art.json"), new ResourceLocation("shaders/post/bumpy.json"), new ResourceLocation("shaders/post/blobs2.json"), new ResourceLocation("shaders/post/pencil.json"), new ResourceLocation("shaders/post/color_convolve.json"), new ResourceLocation("shaders/post/deconverge.json"), new ResourceLocation("shaders/post/flip.json"), new ResourceLocation("shaders/post/invert.json"), new ResourceLocation("shaders/post/ntsc.json"), new ResourceLocation("shaders/post/outline.json"), new ResourceLocation("shaders/post/phosphor.json"), new ResourceLocation("shaders/post/scan_pincushion.json"), new ResourceLocation("shaders/post/sobel.json"), new ResourceLocation("shaders/post/bits.json"), new ResourceLocation("shaders/post/desaturate.json"), new ResourceLocation("shaders/post/green.json"), new ResourceLocation("shaders/post/blur.json"), new ResourceLocation("shaders/post/wobble.json"), new ResourceLocation("shaders/post/blobs.json"), new ResourceLocation("shaders/post/antialias.json"), new ResourceLocation("shaders/post/creeper.json"), new ResourceLocation("shaders/post/spider.json")}; + public static final int SHADER_COUNT = SHADERS_TEXTURES.length; + private int shaderIndex; + private boolean useShader; + private int frameCount; + + public EntityRenderer(Minecraft mcIn, IResourceManager resourceManagerIn) + { + this.shaderIndex = SHADER_COUNT; + this.mc = mcIn; + this.resourceManager = resourceManagerIn; + this.itemRenderer = mcIn.getItemRenderer(); + this.mapItemRenderer = new MapItemRenderer(mcIn.getTextureManager()); + this.lightmapTexture = new DynamicTexture(16, 16); + this.locationLightMap = mcIn.getTextureManager().getDynamicTextureLocation("lightMap", this.lightmapTexture); + this.lightmapColors = this.lightmapTexture.getTextureData(); + this.shaderGroup = null; + + for (int i = 0; i < 32; ++i) + { + for (int j = 0; j < 32; ++j) + { + float f = (float)(j - 16); + float f1 = (float)(i - 16); + float f2 = MathHelper.sqrt(f * f + f1 * f1); + this.rainXCoords[i << 5 | j] = -f1 / f2; + this.rainYCoords[i << 5 | j] = f / f2; + } + } + } + + public boolean isShaderActive() + { + return OpenGlHelper.shadersSupported && this.shaderGroup != null; + } + + public void stopUseShader() + { + if (this.shaderGroup != null) + { + this.shaderGroup.deleteShaderGroup(); + } + + this.shaderGroup = null; + this.shaderIndex = SHADER_COUNT; + } + + public void switchUseShader() + { + this.useShader = !this.useShader; + } + + /** + * What shader to use when spectating this entity + */ + public void loadEntityShader(@Nullable Entity entityIn) + { + if (OpenGlHelper.shadersSupported) + { + if (this.shaderGroup != null) + { + this.shaderGroup.deleteShaderGroup(); + } + + this.shaderGroup = null; + + if (entityIn instanceof EntityCreeper) + { + this.loadShader(new ResourceLocation("shaders/post/creeper.json")); + } + else if (entityIn instanceof EntitySpider) + { + this.loadShader(new ResourceLocation("shaders/post/spider.json")); + } + else if (entityIn instanceof EntityEnderman) + { + this.loadShader(new ResourceLocation("shaders/post/invert.json")); + } + else net.minecraftforge.client.ForgeHooksClient.loadEntityShader(entityIn, this); + } + } + + public void loadShader(ResourceLocation resourceLocationIn) + { + try + { + this.shaderGroup = new ShaderGroup(this.mc.getTextureManager(), this.resourceManager, this.mc.getFramebuffer(), resourceLocationIn); + this.shaderGroup.createBindFramebuffers(this.mc.displayWidth, this.mc.displayHeight); + this.useShader = true; + } + catch (IOException ioexception) + { + LOGGER.warn("Failed to load shader: {}", resourceLocationIn, ioexception); + this.shaderIndex = SHADER_COUNT; + this.useShader = false; + } + catch (JsonSyntaxException jsonsyntaxexception) + { + LOGGER.warn("Failed to load shader: {}", resourceLocationIn, jsonsyntaxexception); + this.shaderIndex = SHADER_COUNT; + this.useShader = false; + } + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + if (this.shaderGroup != null) + { + this.shaderGroup.deleteShaderGroup(); + } + + this.shaderGroup = null; + + if (this.shaderIndex == SHADER_COUNT) + { + this.loadEntityShader(this.mc.getRenderViewEntity()); + } + else + { + this.loadShader(SHADERS_TEXTURES[this.shaderIndex]); + } + } + + /** + * Updates the entity renderer + */ + public void updateRenderer() + { + if (OpenGlHelper.shadersSupported && ShaderLinkHelper.getStaticShaderLinkHelper() == null) + { + ShaderLinkHelper.setNewStaticShaderLinkHelper(); + } + + this.updateFovModifierHand(); + this.updateTorchFlicker(); + this.fogColor2 = this.fogColor1; + this.thirdPersonDistancePrev = 4.0F; + + if (this.mc.gameSettings.smoothCamera) + { + float f = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F; + float f1 = f * f * f * 8.0F; + this.smoothCamFilterX = this.mouseFilterXAxis.smooth(this.smoothCamYaw, 0.05F * f1); + this.smoothCamFilterY = this.mouseFilterYAxis.smooth(this.smoothCamPitch, 0.05F * f1); + this.smoothCamPartialTicks = 0.0F; + this.smoothCamYaw = 0.0F; + this.smoothCamPitch = 0.0F; + } + else + { + this.smoothCamFilterX = 0.0F; + this.smoothCamFilterY = 0.0F; + this.mouseFilterXAxis.reset(); + this.mouseFilterYAxis.reset(); + } + + if (this.mc.getRenderViewEntity() == null) + { + this.mc.setRenderViewEntity(this.mc.player); + } + + float f3 = this.mc.world.getLightBrightness(new BlockPos(this.mc.getRenderViewEntity().getPositionEyes(1F))); // Forge: fix MC-51150 + float f4 = (float)this.mc.gameSettings.renderDistanceChunks / 32.0F; + float f2 = f3 * (1.0F - f4) + f4; + this.fogColor1 += (f2 - this.fogColor1) * 0.1F; + ++this.rendererUpdateCount; + this.itemRenderer.updateEquippedItem(); + this.addRainParticles(); + this.bossColorModifierPrev = this.bossColorModifier; + + if (this.mc.ingameGUI.getBossOverlay().shouldDarkenSky()) + { + this.bossColorModifier += 0.05F; + + if (this.bossColorModifier > 1.0F) + { + this.bossColorModifier = 1.0F; + } + } + else if (this.bossColorModifier > 0.0F) + { + this.bossColorModifier -= 0.0125F; + } + + if (this.itemActivationTicks > 0) + { + --this.itemActivationTicks; + + if (this.itemActivationTicks == 0) + { + this.itemActivationItem = null; + } + } + } + + public ShaderGroup getShaderGroup() + { + return this.shaderGroup; + } + + public void updateShaderGroupSize(int width, int height) + { + if (OpenGlHelper.shadersSupported) + { + if (this.shaderGroup != null) + { + this.shaderGroup.createBindFramebuffers(width, height); + } + + this.mc.renderGlobal.createBindEntityOutlineFbs(width, height); + } + } + + /** + * Gets the block or object that is being moused over. + */ + public void getMouseOver(float partialTicks) + { + Entity entity = this.mc.getRenderViewEntity(); + + if (entity != null) + { + if (this.mc.world != null) + { + this.mc.mcProfiler.startSection("pick"); + this.mc.pointedEntity = null; + double d0 = (double)this.mc.playerController.getBlockReachDistance(); + this.mc.objectMouseOver = entity.rayTrace(d0, partialTicks); + Vec3d vec3d = entity.getPositionEyes(partialTicks); + boolean flag = false; + int i = 3; + double d1 = d0; + + if (this.mc.playerController.extendedReach()) + { + d1 = 6.0D; + d0 = d1; + } + else + { + if (d0 > 3.0D) + { + flag = true; + } + } + + if (this.mc.objectMouseOver != null) + { + d1 = this.mc.objectMouseOver.hitVec.distanceTo(vec3d); + } + + Vec3d vec3d1 = entity.getLook(1.0F); + Vec3d vec3d2 = vec3d.addVector(vec3d1.x * d0, vec3d1.y * d0, vec3d1.z * d0); + this.pointedEntity = null; + Vec3d vec3d3 = null; + float f = 1.0F; + List list = this.mc.world.getEntitiesInAABBexcluding(entity, entity.getEntityBoundingBox().expand(vec3d1.x * d0, vec3d1.y * d0, vec3d1.z * d0).grow(1.0D, 1.0D, 1.0D), Predicates.and(EntitySelectors.NOT_SPECTATING, new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.canBeCollidedWith(); + } + })); + double d2 = d1; + + for (int j = 0; j < list.size(); ++j) + { + Entity entity1 = list.get(j); + AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow((double)entity1.getCollisionBorderSize()); + RayTraceResult raytraceresult = axisalignedbb.calculateIntercept(vec3d, vec3d2); + + if (axisalignedbb.contains(vec3d)) + { + if (d2 >= 0.0D) + { + this.pointedEntity = entity1; + vec3d3 = raytraceresult == null ? vec3d : raytraceresult.hitVec; + d2 = 0.0D; + } + } + else if (raytraceresult != null) + { + double d3 = vec3d.distanceTo(raytraceresult.hitVec); + + if (d3 < d2 || d2 == 0.0D) + { + if (entity1.getLowestRidingEntity() == entity.getLowestRidingEntity() && !entity1.canRiderInteract()) + { + if (d2 == 0.0D) + { + this.pointedEntity = entity1; + vec3d3 = raytraceresult.hitVec; + } + } + else + { + this.pointedEntity = entity1; + vec3d3 = raytraceresult.hitVec; + d2 = d3; + } + } + } + } + + if (this.pointedEntity != null && flag && vec3d.distanceTo(vec3d3) > 3.0D) + { + this.pointedEntity = null; + this.mc.objectMouseOver = new RayTraceResult(RayTraceResult.Type.MISS, vec3d3, (EnumFacing)null, new BlockPos(vec3d3)); + } + + if (this.pointedEntity != null && (d2 < d1 || this.mc.objectMouseOver == null)) + { + this.mc.objectMouseOver = new RayTraceResult(this.pointedEntity, vec3d3); + + if (this.pointedEntity instanceof EntityLivingBase || this.pointedEntity instanceof EntityItemFrame) + { + this.mc.pointedEntity = this.pointedEntity; + } + } + + this.mc.mcProfiler.endSection(); + } + } + } + + /** + * Update FOV modifier hand + */ + private void updateFovModifierHand() + { + float f = 1.0F; + + if (this.mc.getRenderViewEntity() instanceof AbstractClientPlayer) + { + AbstractClientPlayer abstractclientplayer = (AbstractClientPlayer)this.mc.getRenderViewEntity(); + f = abstractclientplayer.getFovModifier(); + } + + this.fovModifierHandPrev = this.fovModifierHand; + this.fovModifierHand += (f - this.fovModifierHand) * 0.5F; + + if (this.fovModifierHand > 1.5F) + { + this.fovModifierHand = 1.5F; + } + + if (this.fovModifierHand < 0.1F) + { + this.fovModifierHand = 0.1F; + } + } + + /** + * Changes the field of view of the player depending on if they are underwater or not + */ + private float getFOVModifier(float partialTicks, boolean useFOVSetting) + { + if (this.debugView) + { + return 90.0F; + } + else + { + Entity entity = this.mc.getRenderViewEntity(); + float f = 70.0F; + + if (useFOVSetting) + { + f = this.mc.gameSettings.fovSetting; + f = f * (this.fovModifierHandPrev + (this.fovModifierHand - this.fovModifierHandPrev) * partialTicks); + } + + if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).getHealth() <= 0.0F) + { + float f1 = (float)((EntityLivingBase)entity).deathTime + partialTicks; + f /= (1.0F - 500.0F / (f1 + 500.0F)) * 2.0F + 1.0F; + } + + IBlockState iblockstate = ActiveRenderInfo.getBlockStateAtEntityViewpoint(this.mc.world, entity, partialTicks); + + if (iblockstate.getMaterial() == Material.WATER) + { + f = f * 60.0F / 70.0F; + } + + return net.minecraftforge.client.ForgeHooksClient.getFOVModifier(this, entity, iblockstate, partialTicks, f); + } + } + + private void hurtCameraEffect(float partialTicks) + { + if (this.mc.getRenderViewEntity() instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)this.mc.getRenderViewEntity(); + float f = (float)entitylivingbase.hurtTime - partialTicks; + + if (entitylivingbase.getHealth() <= 0.0F) + { + float f1 = (float)entitylivingbase.deathTime + partialTicks; + GlStateManager.rotate(40.0F - 8000.0F / (f1 + 200.0F), 0.0F, 0.0F, 1.0F); + } + + if (f < 0.0F) + { + return; + } + + f = f / (float)entitylivingbase.maxHurtTime; + f = MathHelper.sin(f * f * f * f * (float)Math.PI); + float f2 = entitylivingbase.attackedAtYaw; + GlStateManager.rotate(-f2, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-f * 14.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(f2, 0.0F, 1.0F, 0.0F); + } + } + + /** + * Updates the bobbing render effect of the player. + */ + private void applyBobbing(float partialTicks) + { + if (this.mc.getRenderViewEntity() instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)this.mc.getRenderViewEntity(); + float f = entityplayer.distanceWalkedModified - entityplayer.prevDistanceWalkedModified; + float f1 = -(entityplayer.distanceWalkedModified + f * partialTicks); + float f2 = entityplayer.prevCameraYaw + (entityplayer.cameraYaw - entityplayer.prevCameraYaw) * partialTicks; + float f3 = entityplayer.prevCameraPitch + (entityplayer.cameraPitch - entityplayer.prevCameraPitch) * partialTicks; + GlStateManager.translate(MathHelper.sin(f1 * (float)Math.PI) * f2 * 0.5F, -Math.abs(MathHelper.cos(f1 * (float)Math.PI) * f2), 0.0F); + GlStateManager.rotate(MathHelper.sin(f1 * (float)Math.PI) * f2 * 3.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(Math.abs(MathHelper.cos(f1 * (float)Math.PI - 0.2F) * f2) * 5.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f3, 1.0F, 0.0F, 0.0F); + } + } + + /** + * sets up player's eye (or camera in third person mode) + */ + private void orientCamera(float partialTicks) + { + Entity entity = this.mc.getRenderViewEntity(); + float f = entity.getEyeHeight(); + double d0 = entity.prevPosX + (entity.posX - entity.prevPosX) * (double)partialTicks; + double d1 = entity.prevPosY + (entity.posY - entity.prevPosY) * (double)partialTicks + (double)f; + double d2 = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)partialTicks; + + if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPlayerSleeping()) + { + f = (float)((double)f + 1.0D); + GlStateManager.translate(0.0F, 0.3F, 0.0F); + + if (!this.mc.gameSettings.debugCamEnable) + { + BlockPos blockpos = new BlockPos(entity); + IBlockState iblockstate = this.mc.world.getBlockState(blockpos); + net.minecraftforge.client.ForgeHooksClient.orientBedCamera(this.mc.world, blockpos, iblockstate, entity); + + GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks + 180.0F, 0.0F, -1.0F, 0.0F); + GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks, -1.0F, 0.0F, 0.0F); + } + } + else if (this.mc.gameSettings.thirdPersonView > 0) + { + double d3 = (double)(this.thirdPersonDistancePrev + (4.0F - this.thirdPersonDistancePrev) * partialTicks); + + if (this.mc.gameSettings.debugCamEnable) + { + GlStateManager.translate(0.0F, 0.0F, (float)(-d3)); + } + else + { + float f1 = entity.rotationYaw; + float f2 = entity.rotationPitch; + + if (this.mc.gameSettings.thirdPersonView == 2) + { + f2 += 180.0F; + } + + double d4 = (double)(-MathHelper.sin(f1 * 0.017453292F) * MathHelper.cos(f2 * 0.017453292F)) * d3; + double d5 = (double)(MathHelper.cos(f1 * 0.017453292F) * MathHelper.cos(f2 * 0.017453292F)) * d3; + double d6 = (double)(-MathHelper.sin(f2 * 0.017453292F)) * d3; + + for (int i = 0; i < 8; ++i) + { + float f3 = (float)((i & 1) * 2 - 1); + float f4 = (float)((i >> 1 & 1) * 2 - 1); + float f5 = (float)((i >> 2 & 1) * 2 - 1); + f3 = f3 * 0.1F; + f4 = f4 * 0.1F; + f5 = f5 * 0.1F; + RayTraceResult raytraceresult = this.mc.world.rayTraceBlocks(new Vec3d(d0 + (double)f3, d1 + (double)f4, d2 + (double)f5), new Vec3d(d0 - d4 + (double)f3 + (double)f5, d1 - d6 + (double)f4, d2 - d5 + (double)f5)); + + if (raytraceresult != null) + { + double d7 = raytraceresult.hitVec.distanceTo(new Vec3d(d0, d1, d2)); + + if (d7 < d3) + { + d3 = d7; + } + } + } + + if (this.mc.gameSettings.thirdPersonView == 2) + { + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + } + + GlStateManager.rotate(entity.rotationPitch - f2, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(entity.rotationYaw - f1, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, (float)(-d3)); + GlStateManager.rotate(f1 - entity.rotationYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f2 - entity.rotationPitch, 1.0F, 0.0F, 0.0F); + } + } + else + { + GlStateManager.translate(0.0F, 0.0F, 0.05F); + } + + if (!this.mc.gameSettings.debugCamEnable) + { + float yaw = entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks + 180.0F; + float pitch = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float roll = 0.0F; + if (entity instanceof EntityAnimal) + { + EntityAnimal entityanimal = (EntityAnimal)entity; + yaw = entityanimal.prevRotationYawHead + (entityanimal.rotationYawHead - entityanimal.prevRotationYawHead) * partialTicks + 180.0F; + } + IBlockState state = ActiveRenderInfo.getBlockStateAtEntityViewpoint(this.mc.world, entity, partialTicks); + net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup event = new net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup(this, entity, state, partialTicks, yaw, pitch, roll); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); + GlStateManager.rotate(event.getRoll(), 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(event.getPitch(), 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(event.getYaw(), 0.0F, 1.0F, 0.0F); + } + + GlStateManager.translate(0.0F, -f, 0.0F); + d0 = entity.prevPosX + (entity.posX - entity.prevPosX) * (double)partialTicks; + d1 = entity.prevPosY + (entity.posY - entity.prevPosY) * (double)partialTicks + (double)f; + d2 = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)partialTicks; + this.cloudFog = this.mc.renderGlobal.hasCloudFog(d0, d1, d2, partialTicks); + } + + /** + * sets up projection, view effects, camera position/rotation + */ + private void setupCameraTransform(float partialTicks, int pass) + { + this.farPlaneDistance = (float)(this.mc.gameSettings.renderDistanceChunks * 16); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + float f = 0.07F; + + if (this.mc.gameSettings.anaglyph) + { + GlStateManager.translate((float)(-(pass * 2 - 1)) * 0.07F, 0.0F, 0.0F); + } + + if (this.cameraZoom != 1.0D) + { + GlStateManager.translate((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F); + GlStateManager.scale(this.cameraZoom, this.cameraZoom, 1.0D); + } + + Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * MathHelper.SQRT_2); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + + if (this.mc.gameSettings.anaglyph) + { + GlStateManager.translate((float)(pass * 2 - 1) * 0.1F, 0.0F, 0.0F); + } + + this.hurtCameraEffect(partialTicks); + + if (this.mc.gameSettings.viewBobbing) + { + this.applyBobbing(partialTicks); + } + + float f1 = this.mc.player.prevTimeInPortal + (this.mc.player.timeInPortal - this.mc.player.prevTimeInPortal) * partialTicks; + + if (f1 > 0.0F) + { + int i = 20; + + if (this.mc.player.isPotionActive(MobEffects.NAUSEA)) + { + i = 7; + } + + float f2 = 5.0F / (f1 * f1 + 5.0F) - f1 * 0.04F; + f2 = f2 * f2; + GlStateManager.rotate(((float)this.rendererUpdateCount + partialTicks) * (float)i, 0.0F, 1.0F, 1.0F); + GlStateManager.scale(1.0F / f2, 1.0F, 1.0F); + GlStateManager.rotate(-((float)this.rendererUpdateCount + partialTicks) * (float)i, 0.0F, 1.0F, 1.0F); + } + + this.orientCamera(partialTicks); + + if (this.debugView) + { + switch (this.debugViewDirection) + { + case 0: + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + break; + case 1: + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + break; + case 2: + GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); + break; + case 3: + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + break; + case 4: + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + } + } + } + + /** + * Render player hand + */ + private void renderHand(float partialTicks, int pass) + { + if (!this.debugView) + { + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + float f = 0.07F; + + if (this.mc.gameSettings.anaglyph) + { + GlStateManager.translate((float)(-(pass * 2 - 1)) * 0.07F, 0.0F, 0.0F); + } + + Project.gluPerspective(this.getFOVModifier(partialTicks, false), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + + if (this.mc.gameSettings.anaglyph) + { + GlStateManager.translate((float)(pass * 2 - 1) * 0.1F, 0.0F, 0.0F); + } + + GlStateManager.pushMatrix(); + this.hurtCameraEffect(partialTicks); + + if (this.mc.gameSettings.viewBobbing) + { + this.applyBobbing(partialTicks); + } + + boolean flag = this.mc.getRenderViewEntity() instanceof EntityLivingBase && ((EntityLivingBase)this.mc.getRenderViewEntity()).isPlayerSleeping(); + + if (!net.minecraftforge.client.ForgeHooksClient.renderFirstPersonHand(mc.renderGlobal, partialTicks, pass)) + if (this.mc.gameSettings.thirdPersonView == 0 && !flag && !this.mc.gameSettings.hideGUI && !this.mc.playerController.isSpectator()) + { + this.enableLightmap(); + this.itemRenderer.renderItemInFirstPerson(partialTicks); + this.disableLightmap(); + } + + GlStateManager.popMatrix(); + + if (this.mc.gameSettings.thirdPersonView == 0 && !flag) + { + this.itemRenderer.renderOverlays(partialTicks); + this.hurtCameraEffect(partialTicks); + } + + if (this.mc.gameSettings.viewBobbing) + { + this.applyBobbing(partialTicks); + } + } + } + + public void disableLightmap() + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + public void enableLightmap() + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = 0.00390625F; + GlStateManager.scale(0.00390625F, 0.00390625F, 0.00390625F); + GlStateManager.translate(8.0F, 8.0F, 8.0F); + GlStateManager.matrixMode(5888); + this.mc.getTextureManager().bindTexture(this.locationLightMap); + GlStateManager.glTexParameteri(3553, 10241, 9729); + GlStateManager.glTexParameteri(3553, 10240, 9729); + GlStateManager.glTexParameteri(3553, 10242, 10496); + GlStateManager.glTexParameteri(3553, 10243, 10496); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + /** + * Recompute a random value that is applied to block color in updateLightmap() + */ + private void updateTorchFlicker() + { + this.torchFlickerDX = (float)((double)this.torchFlickerDX + (Math.random() - Math.random()) * Math.random() * Math.random()); + this.torchFlickerDX = (float)((double)this.torchFlickerDX * 0.9D); + this.torchFlickerX += this.torchFlickerDX - this.torchFlickerX; + this.lightmapUpdateNeeded = true; + } + + private void updateLightmap(float partialTicks) + { + if (this.lightmapUpdateNeeded) + { + this.mc.mcProfiler.startSection("lightTex"); + World world = this.mc.world; + + if (world != null) + { + float f = world.getSunBrightness(1.0F); + float f1 = f * 0.95F + 0.05F; + + for (int i = 0; i < 256; ++i) + { + float f2 = world.provider.getLightBrightnessTable()[i / 16] * f1; + float f3 = world.provider.getLightBrightnessTable()[i % 16] * (this.torchFlickerX * 0.1F + 1.5F); + + if (world.getLastLightningBolt() > 0) + { + f2 = world.provider.getLightBrightnessTable()[i / 16]; + } + + float f4 = f2 * (f * 0.65F + 0.35F); + float f5 = f2 * (f * 0.65F + 0.35F); + float f6 = f3 * ((f3 * 0.6F + 0.4F) * 0.6F + 0.4F); + float f7 = f3 * (f3 * f3 * 0.6F + 0.4F); + float f8 = f4 + f3; + float f9 = f5 + f6; + float f10 = f2 + f7; + f8 = f8 * 0.96F + 0.03F; + f9 = f9 * 0.96F + 0.03F; + f10 = f10 * 0.96F + 0.03F; + + if (this.bossColorModifier > 0.0F) + { + float f11 = this.bossColorModifierPrev + (this.bossColorModifier - this.bossColorModifierPrev) * partialTicks; + f8 = f8 * (1.0F - f11) + f8 * 0.7F * f11; + f9 = f9 * (1.0F - f11) + f9 * 0.6F * f11; + f10 = f10 * (1.0F - f11) + f10 * 0.6F * f11; + } + + if (world.provider.getDimensionType().getId() == 1) + { + f8 = 0.22F + f3 * 0.75F; + f9 = 0.28F + f6 * 0.75F; + f10 = 0.25F + f7 * 0.75F; + } + + float[] colors = {f8, f9, f10}; + world.provider.getLightmapColors(partialTicks, f, f2, f3, colors); + f8 = colors[0]; f9 = colors[1]; f10 = colors[2]; + + // Forge: fix MC-58177 + f8 = MathHelper.clamp(f8, 0f, 1f); + f9 = MathHelper.clamp(f9, 0f, 1f); + f10 = MathHelper.clamp(f10, 0f, 1f); + + if (this.mc.player.isPotionActive(MobEffects.NIGHT_VISION)) + { + float f15 = this.getNightVisionBrightness(this.mc.player, partialTicks); + float f12 = 1.0F / f8; + + if (f12 > 1.0F / f9) + { + f12 = 1.0F / f9; + } + + if (f12 > 1.0F / f10) + { + f12 = 1.0F / f10; + } + + f8 = f8 * (1.0F - f15) + f8 * f12 * f15; + f9 = f9 * (1.0F - f15) + f9 * f12 * f15; + f10 = f10 * (1.0F - f15) + f10 * f12 * f15; + } + + if (f8 > 1.0F) + { + f8 = 1.0F; + } + + if (f9 > 1.0F) + { + f9 = 1.0F; + } + + if (f10 > 1.0F) + { + f10 = 1.0F; + } + + float f16 = this.mc.gameSettings.gammaSetting; + float f17 = 1.0F - f8; + float f13 = 1.0F - f9; + float f14 = 1.0F - f10; + f17 = 1.0F - f17 * f17 * f17 * f17; + f13 = 1.0F - f13 * f13 * f13 * f13; + f14 = 1.0F - f14 * f14 * f14 * f14; + f8 = f8 * (1.0F - f16) + f17 * f16; + f9 = f9 * (1.0F - f16) + f13 * f16; + f10 = f10 * (1.0F - f16) + f14 * f16; + f8 = f8 * 0.96F + 0.03F; + f9 = f9 * 0.96F + 0.03F; + f10 = f10 * 0.96F + 0.03F; + + if (f8 > 1.0F) + { + f8 = 1.0F; + } + + if (f9 > 1.0F) + { + f9 = 1.0F; + } + + if (f10 > 1.0F) + { + f10 = 1.0F; + } + + if (f8 < 0.0F) + { + f8 = 0.0F; + } + + if (f9 < 0.0F) + { + f9 = 0.0F; + } + + if (f10 < 0.0F) + { + f10 = 0.0F; + } + + int j = 255; + int k = (int)(f8 * 255.0F); + int l = (int)(f9 * 255.0F); + int i1 = (int)(f10 * 255.0F); + this.lightmapColors[i] = -16777216 | k << 16 | l << 8 | i1; + } + + this.lightmapTexture.updateDynamicTexture(); + this.lightmapUpdateNeeded = false; + this.mc.mcProfiler.endSection(); + } + } + } + + private float getNightVisionBrightness(EntityLivingBase entitylivingbaseIn, float partialTicks) + { + int i = entitylivingbaseIn.getActivePotionEffect(MobEffects.NIGHT_VISION).getDuration(); + return i > 200 ? 1.0F : 0.7F + MathHelper.sin(((float)i - partialTicks) * (float)Math.PI * 0.2F) * 0.3F; + } + + public void updateCameraAndRender(float partialTicks, long nanoTime) + { + boolean flag = Display.isActive(); + + if (!flag && this.mc.gameSettings.pauseOnLostFocus && (!this.mc.gameSettings.touchscreen || !Mouse.isButtonDown(1))) + { + if (Minecraft.getSystemTime() - this.prevFrameTime > 500L) + { + this.mc.displayInGameMenu(); + } + } + else + { + this.prevFrameTime = Minecraft.getSystemTime(); + } + + this.mc.mcProfiler.startSection("mouse"); + + if (flag && Minecraft.IS_RUNNING_ON_MAC && this.mc.inGameHasFocus && !Mouse.isInsideWindow()) + { + Mouse.setGrabbed(false); + Mouse.setCursorPosition(Display.getWidth() / 2, Display.getHeight() / 2 - 20); + Mouse.setGrabbed(true); + } + + if (this.mc.inGameHasFocus && flag) + { + this.mc.mouseHelper.mouseXYChange(); + this.mc.getTutorial().handleMouse(this.mc.mouseHelper); + float f = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F; + float f1 = f * f * f * 8.0F; + float f2 = (float)this.mc.mouseHelper.deltaX * f1; + float f3 = (float)this.mc.mouseHelper.deltaY * f1; + int i = 1; + + if (this.mc.gameSettings.invertMouse) + { + i = -1; + } + + if (this.mc.gameSettings.smoothCamera) + { + this.smoothCamYaw += f2; + this.smoothCamPitch += f3; + float f4 = partialTicks - this.smoothCamPartialTicks; + this.smoothCamPartialTicks = partialTicks; + f2 = this.smoothCamFilterX * f4; + f3 = this.smoothCamFilterY * f4; + this.mc.player.turn(f2, f3 * (float)i); + } + else + { + this.smoothCamYaw = 0.0F; + this.smoothCamPitch = 0.0F; + this.mc.player.turn(f2, f3 * (float)i); + } + } + + this.mc.mcProfiler.endSection(); + + if (!this.mc.skipRenderWorld) + { + anaglyphEnable = this.mc.gameSettings.anaglyph; + final ScaledResolution scaledresolution = new ScaledResolution(this.mc); + int i1 = scaledresolution.getScaledWidth(); + int j1 = scaledresolution.getScaledHeight(); + final int k1 = Mouse.getX() * i1 / this.mc.displayWidth; + final int l1 = j1 - Mouse.getY() * j1 / this.mc.displayHeight - 1; + int i2 = this.mc.gameSettings.limitFramerate; + + if (this.mc.world != null) + { + this.mc.mcProfiler.startSection("level"); + int j = Math.min(Minecraft.getDebugFPS(), i2); + j = Math.max(j, 60); + long k = System.nanoTime() - nanoTime; + long l = Math.max((long)(1000000000 / j / 4) - k, 0L); + this.renderWorld(partialTicks, System.nanoTime() + l); + + if (this.mc.isSingleplayer() && this.timeWorldIcon < Minecraft.getSystemTime() - 1000L) + { + this.timeWorldIcon = Minecraft.getSystemTime(); + + if (!this.mc.getIntegratedServer().isWorldIconSet()) + { + this.createWorldIcon(); + } + } + + if (OpenGlHelper.shadersSupported) + { + this.mc.renderGlobal.renderEntityOutlineFramebuffer(); + + if (this.shaderGroup != null && this.useShader) + { + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + this.shaderGroup.render(partialTicks); + GlStateManager.popMatrix(); + } + + this.mc.getFramebuffer().bindFramebuffer(true); + } + + this.renderEndNanoTime = System.nanoTime(); + this.mc.mcProfiler.endStartSection("gui"); + + if (!this.mc.gameSettings.hideGUI || this.mc.currentScreen != null) + { + GlStateManager.alphaFunc(516, 0.1F); + this.setupOverlayRendering(); + this.renderItemActivation(i1, j1, partialTicks); + this.mc.ingameGUI.renderGameOverlay(partialTicks); + } + + this.mc.mcProfiler.endSection(); + } + else + { + GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + this.setupOverlayRendering(); + this.renderEndNanoTime = System.nanoTime(); + // Forge: Fix MC-112292 + net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.instance.renderEngine = this.mc.getTextureManager(); + // Forge: also fix rendering text before entering world (not part of MC-112292, but the same reason) + net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher.instance.fontRenderer = this.mc.fontRenderer; + } + + if (this.mc.currentScreen != null) + { + GlStateManager.clear(256); + + try + { + net.minecraftforge.client.ForgeHooksClient.drawScreen(this.mc.currentScreen, k1, l1, this.mc.getTickLength()); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering screen"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Screen render details"); + crashreportcategory.addDetail("Screen name", new ICrashReportDetail() + { + public String call() throws Exception + { + return EntityRenderer.this.mc.currentScreen.getClass().getCanonicalName(); + } + }); + crashreportcategory.addDetail("Mouse location", new ICrashReportDetail() + { + public String call() throws Exception + { + return String.format("Scaled: (%d, %d). Absolute: (%d, %d)", k1, l1, Mouse.getX(), Mouse.getY()); + } + }); + crashreportcategory.addDetail("Screen size", new ICrashReportDetail() + { + public String call() throws Exception + { + return String.format("Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %d", scaledresolution.getScaledWidth(), scaledresolution.getScaledHeight(), EntityRenderer.this.mc.displayWidth, EntityRenderer.this.mc.displayHeight, scaledresolution.getScaleFactor()); + } + }); + throw new ReportedException(crashreport); + } + } + } + } + + private void createWorldIcon() + { + if (this.mc.renderGlobal.getRenderedChunks() > 10 && this.mc.renderGlobal.hasNoChunkUpdates() && !this.mc.getIntegratedServer().isWorldIconSet()) + { + BufferedImage bufferedimage = ScreenShotHelper.createScreenshot(this.mc.displayWidth, this.mc.displayHeight, this.mc.getFramebuffer()); + int i = bufferedimage.getWidth(); + int j = bufferedimage.getHeight(); + int k = 0; + int l = 0; + + if (i > j) + { + k = (i - j) / 2; + i = j; + } + else + { + l = (j - i) / 2; + } + + try + { + BufferedImage bufferedimage1 = new BufferedImage(64, 64, 1); + Graphics graphics = bufferedimage1.createGraphics(); + graphics.drawImage(bufferedimage, 0, 0, 64, 64, k, l, k + i, l + i, (ImageObserver)null); + graphics.dispose(); + ImageIO.write(bufferedimage1, "png", this.mc.getIntegratedServer().getWorldIconFile()); + } + catch (IOException ioexception) + { + LOGGER.warn("Couldn't save auto screenshot", (Throwable)ioexception); + } + } + } + + public void renderStreamIndicator(float partialTicks) + { + this.setupOverlayRendering(); + } + + private boolean isDrawBlockOutline() + { + if (!this.drawBlockOutline) + { + return false; + } + else + { + Entity entity = this.mc.getRenderViewEntity(); + boolean flag = entity instanceof EntityPlayer && !this.mc.gameSettings.hideGUI; + + if (flag && !((EntityPlayer)entity).capabilities.allowEdit) + { + ItemStack itemstack = ((EntityPlayer)entity).getHeldItemMainhand(); + + if (this.mc.objectMouseOver != null && this.mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = this.mc.objectMouseOver.getBlockPos(); + Block block = this.mc.world.getBlockState(blockpos).getBlock(); + + if (this.mc.playerController.getCurrentGameType() == GameType.SPECTATOR) + { + flag = block.hasTileEntity(this.mc.world.getBlockState(blockpos)) && this.mc.world.getTileEntity(blockpos) instanceof IInventory; + } + else + { + flag = !itemstack.isEmpty() && (itemstack.canDestroy(block) || itemstack.canPlaceOn(block)); + } + } + } + + return flag; + } + } + + public void renderWorld(float partialTicks, long finishTimeNano) + { + this.updateLightmap(partialTicks); + + if (this.mc.getRenderViewEntity() == null) + { + this.mc.setRenderViewEntity(this.mc.player); + } + + this.getMouseOver(partialTicks); + GlStateManager.enableDepth(); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(516, 0.5F); + this.mc.mcProfiler.startSection("center"); + + if (this.mc.gameSettings.anaglyph) + { + anaglyphField = 0; + GlStateManager.colorMask(false, true, true, false); + this.renderWorldPass(0, partialTicks, finishTimeNano); + anaglyphField = 1; + GlStateManager.colorMask(true, false, false, false); + this.renderWorldPass(1, partialTicks, finishTimeNano); + GlStateManager.colorMask(true, true, true, false); + } + else + { + this.renderWorldPass(2, partialTicks, finishTimeNano); + } + + this.mc.mcProfiler.endSection(); + } + + private void renderWorldPass(int pass, float partialTicks, long finishTimeNano) + { + RenderGlobal renderglobal = this.mc.renderGlobal; + ParticleManager particlemanager = this.mc.effectRenderer; + boolean flag = this.isDrawBlockOutline(); + GlStateManager.enableCull(); + this.mc.mcProfiler.endStartSection("clear"); + GlStateManager.viewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + this.updateFogColor(partialTicks); + GlStateManager.clear(16640); + this.mc.mcProfiler.endStartSection("camera"); + this.setupCameraTransform(partialTicks, pass); + ActiveRenderInfo.updateRenderInfo(this.mc.getRenderViewEntity(), this.mc.gameSettings.thirdPersonView == 2); //Forge: MC-46445 Spectator mode particles and sounds computed from where you have been before + this.mc.mcProfiler.endStartSection("frustum"); + ClippingHelperImpl.getInstance(); + this.mc.mcProfiler.endStartSection("culling"); + ICamera icamera = new Frustum(); + Entity entity = this.mc.getRenderViewEntity(); + double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks; + double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks; + double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks; + icamera.setPosition(d0, d1, d2); + + if (this.mc.gameSettings.renderDistanceChunks >= 4) + { + this.setupFog(-1, partialTicks); + this.mc.mcProfiler.endStartSection("sky"); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); + GlStateManager.matrixMode(5888); + renderglobal.renderSky(partialTicks, pass); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * MathHelper.SQRT_2); + GlStateManager.matrixMode(5888); + } + + this.setupFog(0, partialTicks); + GlStateManager.shadeModel(7425); + + if (entity.posY + (double)entity.getEyeHeight() < 128.0D) + { + this.renderCloudsCheck(renderglobal, partialTicks, pass, d0, d1, d2); + } + + this.mc.mcProfiler.endStartSection("prepareterrain"); + this.setupFog(0, partialTicks); + this.mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + RenderHelper.disableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("terrain_setup"); + renderglobal.setupTerrain(entity, (double)partialTicks, icamera, this.frameCount++, this.mc.player.isSpectator()); + + if (pass == 0 || pass == 2) + { + this.mc.mcProfiler.endStartSection("updatechunks"); + this.mc.renderGlobal.updateChunks(finishTimeNano); + } + + this.mc.mcProfiler.endStartSection("terrain"); + GlStateManager.matrixMode(5888); + GlStateManager.pushMatrix(); + GlStateManager.disableAlpha(); + renderglobal.renderBlockLayer(BlockRenderLayer.SOLID, (double)partialTicks, pass, entity); + GlStateManager.enableAlpha(); + this.mc.getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, this.mc.gameSettings.mipmapLevels > 0); // FORGE: fix flickering leaves when mods mess up the blurMipmap settings + renderglobal.renderBlockLayer(BlockRenderLayer.CUTOUT_MIPPED, (double)partialTicks, pass, entity); + this.mc.getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).restoreLastBlurMipmap(); + this.mc.getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false); + renderglobal.renderBlockLayer(BlockRenderLayer.CUTOUT, (double)partialTicks, pass, entity); + this.mc.getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).restoreLastBlurMipmap(); + GlStateManager.shadeModel(7424); + GlStateManager.alphaFunc(516, 0.1F); + + if (!this.debugView) + { + GlStateManager.matrixMode(5888); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + RenderHelper.enableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("entities"); + net.minecraftforge.client.ForgeHooksClient.setRenderPass(0); + renderglobal.renderEntities(entity, icamera, partialTicks); + net.minecraftforge.client.ForgeHooksClient.setRenderPass(0); + RenderHelper.disableStandardItemLighting(); + this.disableLightmap(); + } + + GlStateManager.matrixMode(5888); + GlStateManager.popMatrix(); + + if (flag && this.mc.objectMouseOver != null && !entity.isInsideOfMaterial(Material.WATER)) + { + EntityPlayer entityplayer = (EntityPlayer)entity; + GlStateManager.disableAlpha(); + this.mc.mcProfiler.endStartSection("outline"); + if (!net.minecraftforge.client.ForgeHooksClient.onDrawBlockHighlight(renderglobal, entityplayer, mc.objectMouseOver, 0, partialTicks)) + renderglobal.drawSelectionBox(entityplayer, this.mc.objectMouseOver, 0, partialTicks); + GlStateManager.enableAlpha(); + } + + if (this.mc.debugRenderer.shouldRender()) + { + this.mc.debugRenderer.renderDebug(partialTicks, finishTimeNano); + } + + this.mc.mcProfiler.endStartSection("destroyProgress"); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.mc.getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false); + renderglobal.drawBlockDamageTexture(Tessellator.getInstance(), Tessellator.getInstance().getBuffer(), entity, partialTicks); + this.mc.getTextureManager().getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).restoreLastBlurMipmap(); + GlStateManager.disableBlend(); + + if (!this.debugView) + { + this.enableLightmap(); + this.mc.mcProfiler.endStartSection("litParticles"); + particlemanager.renderLitParticles(entity, partialTicks); + RenderHelper.disableStandardItemLighting(); + this.setupFog(0, partialTicks); + this.mc.mcProfiler.endStartSection("particles"); + particlemanager.renderParticles(entity, partialTicks); + this.disableLightmap(); + } + + GlStateManager.depthMask(false); + GlStateManager.enableCull(); + this.mc.mcProfiler.endStartSection("weather"); + this.renderRainSnow(partialTicks); + GlStateManager.depthMask(true); + renderglobal.renderWorldBorder(entity, partialTicks); + GlStateManager.disableBlend(); + GlStateManager.enableCull(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.alphaFunc(516, 0.1F); + this.setupFog(0, partialTicks); + GlStateManager.enableBlend(); + GlStateManager.depthMask(false); + this.mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + GlStateManager.shadeModel(7425); + this.mc.mcProfiler.endStartSection("translucent"); + renderglobal.renderBlockLayer(BlockRenderLayer.TRANSLUCENT, (double)partialTicks, pass, entity); + if (!this.debugView) //Only render if render pass 0 happens as well. + { + RenderHelper.enableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("entities"); + net.minecraftforge.client.ForgeHooksClient.setRenderPass(1); + renderglobal.renderEntities(entity, icamera, partialTicks); + // restore blending function changed by RenderGlobal.preRenderDamagedBlocks + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + net.minecraftforge.client.ForgeHooksClient.setRenderPass(-1); + RenderHelper.disableStandardItemLighting(); + } + GlStateManager.shadeModel(7424); + GlStateManager.depthMask(true); + GlStateManager.enableCull(); + GlStateManager.disableBlend(); + GlStateManager.disableFog(); + + if (entity.posY + (double)entity.getEyeHeight() >= 128.0D) + { + this.mc.mcProfiler.endStartSection("aboveClouds"); + this.renderCloudsCheck(renderglobal, partialTicks, pass, d0, d1, d2); + } + + this.mc.mcProfiler.endStartSection("forge_render_last"); + net.minecraftforge.client.ForgeHooksClient.dispatchRenderLast(renderglobal, partialTicks); + + this.mc.mcProfiler.endStartSection("hand"); + + if (this.renderHand) + { + GlStateManager.clear(256); + this.renderHand(partialTicks, pass); + } + } + + private void renderCloudsCheck(RenderGlobal renderGlobalIn, float partialTicks, int pass, double x, double y, double z) + { + if (this.mc.gameSettings.shouldRenderClouds() != 0) + { + this.mc.mcProfiler.endStartSection("clouds"); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 4.0F); + GlStateManager.matrixMode(5888); + GlStateManager.pushMatrix(); + this.setupFog(0, partialTicks); + renderGlobalIn.renderClouds(partialTicks, pass, x, y, z); + GlStateManager.disableFog(); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + Project.gluPerspective(this.getFOVModifier(partialTicks, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * MathHelper.SQRT_2); + GlStateManager.matrixMode(5888); + } + } + + private void addRainParticles() + { + float f = this.mc.world.getRainStrength(1.0F); + + if (!this.mc.gameSettings.fancyGraphics) + { + f /= 2.0F; + } + + if (f != 0.0F) + { + this.random.setSeed((long)this.rendererUpdateCount * 312987231L); + Entity entity = this.mc.getRenderViewEntity(); + World world = this.mc.world; + BlockPos blockpos = new BlockPos(entity); + int i = 10; + double d0 = 0.0D; + double d1 = 0.0D; + double d2 = 0.0D; + int j = 0; + int k = (int)(100.0F * f * f); + + if (this.mc.gameSettings.particleSetting == 1) + { + k >>= 1; + } + else if (this.mc.gameSettings.particleSetting == 2) + { + k = 0; + } + + for (int l = 0; l < k; ++l) + { + BlockPos blockpos1 = world.getPrecipitationHeight(blockpos.add(this.random.nextInt(10) - this.random.nextInt(10), 0, this.random.nextInt(10) - this.random.nextInt(10))); + Biome biome = world.getBiome(blockpos1); + BlockPos blockpos2 = blockpos1.down(); + IBlockState iblockstate = world.getBlockState(blockpos2); + + if (blockpos1.getY() <= blockpos.getY() + 10 && blockpos1.getY() >= blockpos.getY() - 10 && biome.canRain() && biome.getTemperature(blockpos1) >= 0.15F) + { + double d3 = this.random.nextDouble(); + double d4 = this.random.nextDouble(); + AxisAlignedBB axisalignedbb = iblockstate.getBoundingBox(world, blockpos2); + + if (iblockstate.getMaterial() != Material.LAVA && iblockstate.getBlock() != Blocks.MAGMA) + { + if (iblockstate.getMaterial() != Material.AIR) + { + ++j; + + if (this.random.nextInt(j) == 0) + { + d0 = (double)blockpos2.getX() + d3; + d1 = (double)((float)blockpos2.getY() + 0.1F) + axisalignedbb.maxY - 1.0D; + d2 = (double)blockpos2.getZ() + d4; + } + + this.mc.world.spawnParticle(EnumParticleTypes.WATER_DROP, (double)blockpos2.getX() + d3, (double)((float)blockpos2.getY() + 0.1F) + axisalignedbb.maxY, (double)blockpos2.getZ() + d4, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + else + { + this.mc.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, (double)blockpos1.getX() + d3, (double)((float)blockpos1.getY() + 0.1F) - axisalignedbb.minY, (double)blockpos1.getZ() + d4, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + } + + if (j > 0 && this.random.nextInt(3) < this.rainSoundCounter++) + { + this.rainSoundCounter = 0; + + if (d1 > (double)(blockpos.getY() + 1) && world.getPrecipitationHeight(blockpos).getY() > MathHelper.floor((float)blockpos.getY())) + { + this.mc.world.playSound(d0, d1, d2, SoundEvents.WEATHER_RAIN_ABOVE, SoundCategory.WEATHER, 0.1F, 0.5F, false); + } + else + { + this.mc.world.playSound(d0, d1, d2, SoundEvents.WEATHER_RAIN, SoundCategory.WEATHER, 0.2F, 1.0F, false); + } + } + } + } + + /** + * Render rain and snow + */ + protected void renderRainSnow(float partialTicks) + { + net.minecraftforge.client.IRenderHandler renderer = this.mc.world.provider.getWeatherRenderer(); + if (renderer != null) + { + renderer.render(partialTicks, this.mc.world, mc); + return; + } + + float f = this.mc.world.getRainStrength(partialTicks); + + if (f > 0.0F) + { + this.enableLightmap(); + Entity entity = this.mc.getRenderViewEntity(); + World world = this.mc.world; + int i = MathHelper.floor(entity.posX); + int j = MathHelper.floor(entity.posY); + int k = MathHelper.floor(entity.posZ); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.disableCull(); + GlStateManager.glNormal3f(0.0F, 1.0F, 0.0F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.alphaFunc(516, 0.1F); + double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks; + double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks; + double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks; + int l = MathHelper.floor(d1); + int i1 = 5; + + if (this.mc.gameSettings.fancyGraphics) + { + i1 = 10; + } + + int j1 = -1; + float f1 = (float)this.rendererUpdateCount + partialTicks; + bufferbuilder.setTranslation(-d0, -d1, -d2); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int k1 = k - i1; k1 <= k + i1; ++k1) + { + for (int l1 = i - i1; l1 <= i + i1; ++l1) + { + int i2 = (k1 - k + 16) * 32 + l1 - i + 16; + double d3 = (double)this.rainXCoords[i2] * 0.5D; + double d4 = (double)this.rainYCoords[i2] * 0.5D; + blockpos$mutableblockpos.setPos(l1, 0, k1); + Biome biome = world.getBiome(blockpos$mutableblockpos); + + if (biome.canRain() || biome.getEnableSnow()) + { + int j2 = world.getPrecipitationHeight(blockpos$mutableblockpos).getY(); + int k2 = j - i1; + int l2 = j + i1; + + if (k2 < j2) + { + k2 = j2; + } + + if (l2 < j2) + { + l2 = j2; + } + + int i3 = j2; + + if (j2 < l) + { + i3 = l; + } + + if (k2 != l2) + { + this.random.setSeed((long)(l1 * l1 * 3121 + l1 * 45238971 ^ k1 * k1 * 418711 + k1 * 13761)); + blockpos$mutableblockpos.setPos(l1, k2, k1); + float f2 = biome.getTemperature(blockpos$mutableblockpos); + + if (world.getBiomeProvider().getTemperatureAtHeight(f2, j2) >= 0.15F) + { + if (j1 != 0) + { + if (j1 >= 0) + { + tessellator.draw(); + } + + j1 = 0; + this.mc.getTextureManager().bindTexture(RAIN_TEXTURES); + bufferbuilder.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + } + + double d5 = -((double)(this.rendererUpdateCount + l1 * l1 * 3121 + l1 * 45238971 + k1 * k1 * 418711 + k1 * 13761 & 31) + (double)partialTicks) / 32.0D * (3.0D + this.random.nextDouble()); + double d6 = (double)((float)l1 + 0.5F) - entity.posX; + double d7 = (double)((float)k1 + 0.5F) - entity.posZ; + float f3 = MathHelper.sqrt(d6 * d6 + d7 * d7) / (float)i1; + float f4 = ((1.0F - f3 * f3) * 0.5F + 0.5F) * f; + blockpos$mutableblockpos.setPos(l1, i3, k1); + int j3 = world.getCombinedLight(blockpos$mutableblockpos, 0); + int k3 = j3 >> 16 & 65535; + int l3 = j3 & 65535; + bufferbuilder.pos((double)l1 - d3 + 0.5D, (double)l2, (double)k1 - d4 + 0.5D).tex(0.0D, (double)k2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f4).lightmap(k3, l3).endVertex(); + bufferbuilder.pos((double)l1 + d3 + 0.5D, (double)l2, (double)k1 + d4 + 0.5D).tex(1.0D, (double)k2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f4).lightmap(k3, l3).endVertex(); + bufferbuilder.pos((double)l1 + d3 + 0.5D, (double)k2, (double)k1 + d4 + 0.5D).tex(1.0D, (double)l2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f4).lightmap(k3, l3).endVertex(); + bufferbuilder.pos((double)l1 - d3 + 0.5D, (double)k2, (double)k1 - d4 + 0.5D).tex(0.0D, (double)l2 * 0.25D + d5).color(1.0F, 1.0F, 1.0F, f4).lightmap(k3, l3).endVertex(); + } + else + { + if (j1 != 1) + { + if (j1 >= 0) + { + tessellator.draw(); + } + + j1 = 1; + this.mc.getTextureManager().bindTexture(SNOW_TEXTURES); + bufferbuilder.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + } + + double d8 = (double)(-((float)(this.rendererUpdateCount & 511) + partialTicks) / 512.0F); + double d9 = this.random.nextDouble() + (double)f1 * 0.01D * (double)((float)this.random.nextGaussian()); + double d10 = this.random.nextDouble() + (double)(f1 * (float)this.random.nextGaussian()) * 0.001D; + double d11 = (double)((float)l1 + 0.5F) - entity.posX; + double d12 = (double)((float)k1 + 0.5F) - entity.posZ; + float f6 = MathHelper.sqrt(d11 * d11 + d12 * d12) / (float)i1; + float f5 = ((1.0F - f6 * f6) * 0.3F + 0.5F) * f; + blockpos$mutableblockpos.setPos(l1, i3, k1); + int i4 = (world.getCombinedLight(blockpos$mutableblockpos, 0) * 3 + 15728880) / 4; + int j4 = i4 >> 16 & 65535; + int k4 = i4 & 65535; + bufferbuilder.pos((double)l1 - d3 + 0.5D, (double)l2, (double)k1 - d4 + 0.5D).tex(0.0D + d9, (double)k2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f5).lightmap(j4, k4).endVertex(); + bufferbuilder.pos((double)l1 + d3 + 0.5D, (double)l2, (double)k1 + d4 + 0.5D).tex(1.0D + d9, (double)k2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f5).lightmap(j4, k4).endVertex(); + bufferbuilder.pos((double)l1 + d3 + 0.5D, (double)k2, (double)k1 + d4 + 0.5D).tex(1.0D + d9, (double)l2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f5).lightmap(j4, k4).endVertex(); + bufferbuilder.pos((double)l1 - d3 + 0.5D, (double)k2, (double)k1 - d4 + 0.5D).tex(0.0D + d9, (double)l2 * 0.25D + d8 + d10).color(1.0F, 1.0F, 1.0F, f5).lightmap(j4, k4).endVertex(); + } + } + } + } + } + + if (j1 >= 0) + { + tessellator.draw(); + } + + bufferbuilder.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.enableCull(); + GlStateManager.disableBlend(); + GlStateManager.alphaFunc(516, 0.1F); + this.disableLightmap(); + } + } + + /** + * Setup orthogonal projection for rendering GUI screen overlays + */ + public void setupOverlayRendering() + { + ScaledResolution scaledresolution = new ScaledResolution(this.mc); + GlStateManager.clear(256); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, scaledresolution.getScaledWidth_double(), scaledresolution.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + } + + /** + * calculates fog and calls glClearColor + */ + private void updateFogColor(float partialTicks) + { + World world = this.mc.world; + Entity entity = this.mc.getRenderViewEntity(); + float f = 0.25F + 0.75F * (float)this.mc.gameSettings.renderDistanceChunks / 32.0F; + f = 1.0F - (float)Math.pow((double)f, 0.25D); + Vec3d vec3d = world.getSkyColor(this.mc.getRenderViewEntity(), partialTicks); + float f1 = (float)vec3d.x; + float f2 = (float)vec3d.y; + float f3 = (float)vec3d.z; + Vec3d vec3d1 = world.getFogColor(partialTicks); + this.fogColorRed = (float)vec3d1.x; + this.fogColorGreen = (float)vec3d1.y; + this.fogColorBlue = (float)vec3d1.z; + + if (this.mc.gameSettings.renderDistanceChunks >= 4) + { + double d0 = MathHelper.sin(world.getCelestialAngleRadians(partialTicks)) > 0.0F ? -1.0D : 1.0D; + Vec3d vec3d2 = new Vec3d(d0, 0.0D, 0.0D); + float f5 = (float)entity.getLook(partialTicks).dotProduct(vec3d2); + + if (f5 < 0.0F) + { + f5 = 0.0F; + } + + if (f5 > 0.0F) + { + float[] afloat = world.provider.calcSunriseSunsetColors(world.getCelestialAngle(partialTicks), partialTicks); + + if (afloat != null) + { + f5 = f5 * afloat[3]; + this.fogColorRed = this.fogColorRed * (1.0F - f5) + afloat[0] * f5; + this.fogColorGreen = this.fogColorGreen * (1.0F - f5) + afloat[1] * f5; + this.fogColorBlue = this.fogColorBlue * (1.0F - f5) + afloat[2] * f5; + } + } + } + + this.fogColorRed += (f1 - this.fogColorRed) * f; + this.fogColorGreen += (f2 - this.fogColorGreen) * f; + this.fogColorBlue += (f3 - this.fogColorBlue) * f; + float f8 = world.getRainStrength(partialTicks); + + if (f8 > 0.0F) + { + float f4 = 1.0F - f8 * 0.5F; + float f10 = 1.0F - f8 * 0.4F; + this.fogColorRed *= f4; + this.fogColorGreen *= f4; + this.fogColorBlue *= f10; + } + + float f9 = world.getThunderStrength(partialTicks); + + if (f9 > 0.0F) + { + float f11 = 1.0F - f9 * 0.5F; + this.fogColorRed *= f11; + this.fogColorGreen *= f11; + this.fogColorBlue *= f11; + } + + IBlockState iblockstate = ActiveRenderInfo.getBlockStateAtEntityViewpoint(this.mc.world, entity, partialTicks); + + if (this.cloudFog) + { + Vec3d vec3d3 = world.getCloudColour(partialTicks); + this.fogColorRed = (float)vec3d3.x; + this.fogColorGreen = (float)vec3d3.y; + this.fogColorBlue = (float)vec3d3.z; + } + else + { + //Forge Moved to Block. + Vec3d viewport = ActiveRenderInfo.projectViewFromEntity(entity, partialTicks); + BlockPos viewportPos = new BlockPos(viewport); + IBlockState viewportState = this.mc.world.getBlockState(viewportPos); + Vec3d inMaterialColor = viewportState.getBlock().getFogColor(this.mc.world, viewportPos, viewportState, entity, new Vec3d(fogColorRed, fogColorGreen, fogColorBlue), partialTicks); + this.fogColorRed = (float)inMaterialColor.x; + this.fogColorGreen = (float)inMaterialColor.y; + this.fogColorBlue = (float)inMaterialColor.z; + } + + float f13 = this.fogColor2 + (this.fogColor1 - this.fogColor2) * partialTicks; + this.fogColorRed *= f13; + this.fogColorGreen *= f13; + this.fogColorBlue *= f13; + double d1 = (entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks) * world.provider.getVoidFogYFactor(); + + if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(MobEffects.BLINDNESS)) + { + int i = ((EntityLivingBase)entity).getActivePotionEffect(MobEffects.BLINDNESS).getDuration(); + + if (i < 20) + { + d1 *= (double)(1.0F - (float)i / 20.0F); + } + else + { + d1 = 0.0D; + } + } + + if (d1 < 1.0D) + { + if (d1 < 0.0D) + { + d1 = 0.0D; + } + + d1 = d1 * d1; + this.fogColorRed = (float)((double)this.fogColorRed * d1); + this.fogColorGreen = (float)((double)this.fogColorGreen * d1); + this.fogColorBlue = (float)((double)this.fogColorBlue * d1); + } + + if (this.bossColorModifier > 0.0F) + { + float f14 = this.bossColorModifierPrev + (this.bossColorModifier - this.bossColorModifierPrev) * partialTicks; + this.fogColorRed = this.fogColorRed * (1.0F - f14) + this.fogColorRed * 0.7F * f14; + this.fogColorGreen = this.fogColorGreen * (1.0F - f14) + this.fogColorGreen * 0.6F * f14; + this.fogColorBlue = this.fogColorBlue * (1.0F - f14) + this.fogColorBlue * 0.6F * f14; + } + + if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(MobEffects.NIGHT_VISION)) + { + float f15 = this.getNightVisionBrightness((EntityLivingBase)entity, partialTicks); + float f6 = 1.0F / this.fogColorRed; + + if (f6 > 1.0F / this.fogColorGreen) + { + f6 = 1.0F / this.fogColorGreen; + } + + if (f6 > 1.0F / this.fogColorBlue) + { + f6 = 1.0F / this.fogColorBlue; + } + + // Forge: fix MC-4647 and MC-10480 + if (Float.isInfinite(f6)) f6 = Math.nextAfter(f6, 0.0); + + this.fogColorRed = this.fogColorRed * (1.0F - f15) + this.fogColorRed * f6 * f15; + this.fogColorGreen = this.fogColorGreen * (1.0F - f15) + this.fogColorGreen * f6 * f15; + this.fogColorBlue = this.fogColorBlue * (1.0F - f15) + this.fogColorBlue * f6 * f15; + } + + if (this.mc.gameSettings.anaglyph) + { + float f16 = (this.fogColorRed * 30.0F + this.fogColorGreen * 59.0F + this.fogColorBlue * 11.0F) / 100.0F; + float f17 = (this.fogColorRed * 30.0F + this.fogColorGreen * 70.0F) / 100.0F; + float f7 = (this.fogColorRed * 30.0F + this.fogColorBlue * 70.0F) / 100.0F; + this.fogColorRed = f16; + this.fogColorGreen = f17; + this.fogColorBlue = f7; + } + + net.minecraftforge.client.event.EntityViewRenderEvent.FogColors event = new net.minecraftforge.client.event.EntityViewRenderEvent.FogColors(this, entity, iblockstate, partialTicks, this.fogColorRed, this.fogColorGreen, this.fogColorBlue); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); + + this.fogColorRed = event.getRed(); + this.fogColorGreen = event.getGreen(); + this.fogColorBlue = event.getBlue(); + + GlStateManager.clearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F); + } + + /** + * Sets up the fog to be rendered. If the arg passed in is -1 the fog starts at 0 and goes to 80% of far plane + * distance and is used for sky rendering. + */ + private void setupFog(int startCoords, float partialTicks) + { + Entity entity = this.mc.getRenderViewEntity(); + this.setupFogColor(false); + GlStateManager.glNormal3f(0.0F, -1.0F, 0.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + IBlockState iblockstate = ActiveRenderInfo.getBlockStateAtEntityViewpoint(this.mc.world, entity, partialTicks); + float hook = net.minecraftforge.client.ForgeHooksClient.getFogDensity(this, entity, iblockstate, partialTicks, 0.1F); + if (hook >= 0) GlStateManager.setFogDensity(hook); + else + if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(MobEffects.BLINDNESS)) + { + float f1 = 5.0F; + int i = ((EntityLivingBase)entity).getActivePotionEffect(MobEffects.BLINDNESS).getDuration(); + + if (i < 20) + { + f1 = 5.0F + (this.farPlaneDistance - 5.0F) * (1.0F - (float)i / 20.0F); + } + + GlStateManager.setFog(GlStateManager.FogMode.LINEAR); + + if (startCoords == -1) + { + GlStateManager.setFogStart(0.0F); + GlStateManager.setFogEnd(f1 * 0.8F); + } + else + { + GlStateManager.setFogStart(f1 * 0.25F); + GlStateManager.setFogEnd(f1); + } + + if (GLContext.getCapabilities().GL_NV_fog_distance) + { + GlStateManager.glFogi(34138, 34139); + } + } + else if (this.cloudFog) + { + GlStateManager.setFog(GlStateManager.FogMode.EXP); + GlStateManager.setFogDensity(0.1F); + } + else if (iblockstate.getMaterial() == Material.WATER) + { + GlStateManager.setFog(GlStateManager.FogMode.EXP); + + if (entity instanceof EntityLivingBase) + { + if (((EntityLivingBase)entity).isPotionActive(MobEffects.WATER_BREATHING)) + { + GlStateManager.setFogDensity(0.01F); + } + else + { + GlStateManager.setFogDensity(0.1F - (float)EnchantmentHelper.getRespirationModifier((EntityLivingBase)entity) * 0.03F); + } + } + else + { + GlStateManager.setFogDensity(0.1F); + } + } + else if (iblockstate.getMaterial() == Material.LAVA) + { + GlStateManager.setFog(GlStateManager.FogMode.EXP); + GlStateManager.setFogDensity(2.0F); + } + else + { + float f = this.farPlaneDistance; + GlStateManager.setFog(GlStateManager.FogMode.LINEAR); + + if (startCoords == -1) + { + GlStateManager.setFogStart(0.0F); + GlStateManager.setFogEnd(f); + } + else + { + GlStateManager.setFogStart(f * 0.75F); + GlStateManager.setFogEnd(f); + } + + if (GLContext.getCapabilities().GL_NV_fog_distance) + { + GlStateManager.glFogi(34138, 34139); + } + + if (this.mc.world.provider.doesXZShowFog((int)entity.posX, (int)entity.posZ) || this.mc.ingameGUI.getBossOverlay().shouldCreateFog()) + { + GlStateManager.setFogStart(f * 0.05F); + GlStateManager.setFogEnd(Math.min(f, 192.0F) * 0.5F); + } + net.minecraftforge.client.ForgeHooksClient.onFogRender(this, entity, iblockstate, partialTicks, startCoords, f); + } + + GlStateManager.enableColorMaterial(); + GlStateManager.enableFog(); + GlStateManager.colorMaterial(1028, 4608); + } + + public void setupFogColor(boolean black) + { + if (black) + { + GlStateManager.glFog(2918, this.setFogColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + } + else + { + GlStateManager.glFog(2918, this.setFogColorBuffer(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 1.0F)); + } + } + + /** + * Update and return fogColorBuffer with the RGBA values passed as arguments + */ + private FloatBuffer setFogColorBuffer(float red, float green, float blue, float alpha) + { + this.fogColorBuffer.clear(); + this.fogColorBuffer.put(red).put(green).put(blue).put(alpha); + this.fogColorBuffer.flip(); + return this.fogColorBuffer; + } + + public void resetData() + { + this.itemActivationItem = null; + this.mapItemRenderer.clearLoadedMaps(); + } + + public MapItemRenderer getMapItemRenderer() + { + return this.mapItemRenderer; + } + + public static void drawNameplate(FontRenderer fontRendererIn, String str, float x, float y, float z, int verticalShift, float viewerYaw, float viewerPitch, boolean isThirdPersonFrontal, boolean isSneaking) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, z); + GlStateManager.glNormal3f(0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-viewerYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(isThirdPersonFrontal ? -1 : 1) * viewerPitch, 1.0F, 0.0F, 0.0F); + GlStateManager.scale(-0.025F, -0.025F, 0.025F); + GlStateManager.disableLighting(); + GlStateManager.depthMask(false); + + if (!isSneaking) + { + GlStateManager.disableDepth(); + } + + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + int i = fontRendererIn.getStringWidth(str) / 2; + GlStateManager.disableTexture2D(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos((double)(-i - 1), (double)(-1 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + bufferbuilder.pos((double)(-i - 1), (double)(8 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + bufferbuilder.pos((double)(i + 1), (double)(8 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + bufferbuilder.pos((double)(i + 1), (double)(-1 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + + if (!isSneaking) + { + fontRendererIn.drawString(str, -fontRendererIn.getStringWidth(str) / 2, verticalShift, 553648127); + GlStateManager.enableDepth(); + } + + GlStateManager.depthMask(true); + fontRendererIn.drawString(str, -fontRendererIn.getStringWidth(str) / 2, verticalShift, isSneaking ? 553648127 : -1); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + + public void displayItemActivation(ItemStack stack) + { + this.itemActivationItem = stack; + this.itemActivationTicks = 40; + this.itemActivationOffX = this.random.nextFloat() * 2.0F - 1.0F; + this.itemActivationOffY = this.random.nextFloat() * 2.0F - 1.0F; + } + + private void renderItemActivation(int p_190563_1_, int p_190563_2_, float p_190563_3_) + { + if (this.itemActivationItem != null && this.itemActivationTicks > 0) + { + int i = 40 - this.itemActivationTicks; + float f = ((float)i + p_190563_3_) / 40.0F; + float f1 = f * f; + float f2 = f * f1; + float f3 = 10.25F * f2 * f1 + -24.95F * f1 * f1 + 25.5F * f2 + -13.8F * f1 + 4.0F * f; + float f4 = f3 * (float)Math.PI; + float f5 = this.itemActivationOffX * (float)(p_190563_1_ / 4); + float f6 = this.itemActivationOffY * (float)(p_190563_2_ / 4); + GlStateManager.enableAlpha(); + GlStateManager.pushMatrix(); + GlStateManager.pushAttrib(); + GlStateManager.enableDepth(); + GlStateManager.disableCull(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.translate((float)(p_190563_1_ / 2) + f5 * MathHelper.abs(MathHelper.sin(f4 * 2.0F)), (float)(p_190563_2_ / 2) + f6 * MathHelper.abs(MathHelper.sin(f4 * 2.0F)), -50.0F); + float f7 = 50.0F + 175.0F * MathHelper.sin(f4); + GlStateManager.scale(f7, -f7, f7); + GlStateManager.rotate(900.0F * MathHelper.abs(MathHelper.sin(f4)), 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(6.0F * MathHelper.cos(f * 8.0F), 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(6.0F * MathHelper.cos(f * 8.0F), 0.0F, 0.0F, 1.0F); + this.mc.getRenderItem().renderItem(this.itemActivationItem, ItemCameraTransforms.TransformType.FIXED); + GlStateManager.popAttrib(); + GlStateManager.popMatrix(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.enableCull(); + GlStateManager.disableDepth(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/EnumFaceDirection.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/EnumFaceDirection.java new file mode 100644 index 0000000..c89a0ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/EnumFaceDirection.java @@ -0,0 +1,70 @@ +package net.minecraft.client.renderer; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public enum EnumFaceDirection +{ + DOWN(new EnumFaceDirection.VertexInformation[]{new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX)}), + UP(new EnumFaceDirection.VertexInformation[]{new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.NORTH_INDEX)}), + NORTH(new EnumFaceDirection.VertexInformation[]{new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.NORTH_INDEX)}), + SOUTH(new EnumFaceDirection.VertexInformation[]{new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX)}), + WEST(new EnumFaceDirection.VertexInformation[]{new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.WEST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX)}), + EAST(new EnumFaceDirection.VertexInformation[]{new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.SOUTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.DOWN_INDEX, EnumFaceDirection.Constants.NORTH_INDEX), new EnumFaceDirection.VertexInformation(EnumFaceDirection.Constants.EAST_INDEX, EnumFaceDirection.Constants.UP_INDEX, EnumFaceDirection.Constants.NORTH_INDEX)}); + + private static final EnumFaceDirection[] FACINGS = new EnumFaceDirection[6]; + private final EnumFaceDirection.VertexInformation[] vertexInfos; + + public static EnumFaceDirection getFacing(EnumFacing facing) + { + return FACINGS[facing.getIndex()]; + } + + private EnumFaceDirection(EnumFaceDirection.VertexInformation[] vertexInfosIn) + { + this.vertexInfos = vertexInfosIn; + } + + public EnumFaceDirection.VertexInformation getVertexInformation(int index) + { + return this.vertexInfos[index]; + } + + static + { + FACINGS[EnumFaceDirection.Constants.DOWN_INDEX] = DOWN; + FACINGS[EnumFaceDirection.Constants.UP_INDEX] = UP; + FACINGS[EnumFaceDirection.Constants.NORTH_INDEX] = NORTH; + FACINGS[EnumFaceDirection.Constants.SOUTH_INDEX] = SOUTH; + FACINGS[EnumFaceDirection.Constants.WEST_INDEX] = WEST; + FACINGS[EnumFaceDirection.Constants.EAST_INDEX] = EAST; + } + + @SideOnly(Side.CLIENT) + public static final class Constants + { + public static final int SOUTH_INDEX = EnumFacing.SOUTH.getIndex(); + public static final int UP_INDEX = EnumFacing.UP.getIndex(); + public static final int EAST_INDEX = EnumFacing.EAST.getIndex(); + public static final int NORTH_INDEX = EnumFacing.NORTH.getIndex(); + public static final int DOWN_INDEX = EnumFacing.DOWN.getIndex(); + public static final int WEST_INDEX = EnumFacing.WEST.getIndex(); + } + + @SideOnly(Side.CLIENT) + public static class VertexInformation + { + public final int xIndex; + public final int yIndex; + public final int zIndex; + + private VertexInformation(int xIndexIn, int yIndexIn, int zIndexIn) + { + this.xIndex = xIndexIn; + this.yIndex = yIndexIn; + this.zIndex = zIndexIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/GLAllocation.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/GLAllocation.java new file mode 100644 index 0000000..09ddad2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/GLAllocation.java @@ -0,0 +1,74 @@ +package net.minecraft.client.renderer; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.glu.GLU; + +@SideOnly(Side.CLIENT) +public class GLAllocation +{ + + /** + * Generates the specified number of display lists and returns the first index. + */ + public static synchronized int generateDisplayLists(int range) + { + int i = GlStateManager.glGenLists(range); + + if (i == 0) + { + int j = GlStateManager.glGetError(); + String s = "No error code reported"; + + if (j != 0) + { + s = GLU.gluErrorString(j); + } + + throw new IllegalStateException("glGenLists returned an ID of 0 for a count of " + range + ", GL error (" + j + "): " + s); + } + else + { + return i; + } + } + + public static synchronized void deleteDisplayLists(int list, int range) + { + GlStateManager.glDeleteLists(list, range); + } + + public static synchronized void deleteDisplayLists(int list) + { + deleteDisplayLists(list, 1); + } + + /** + * Creates and returns a direct byte buffer with the specified capacity. Applies native ordering to speed up access. + */ + public static synchronized ByteBuffer createDirectByteBuffer(int capacity) + { + return ByteBuffer.allocateDirect(capacity).order(ByteOrder.nativeOrder()); + } + + /** + * Creates and returns a direct int buffer with the specified capacity. Applies native ordering to speed up access. + */ + public static IntBuffer createDirectIntBuffer(int capacity) + { + return createDirectByteBuffer(capacity << 2).asIntBuffer(); + } + + /** + * Creates and returns a direct float buffer with the specified capacity. Applies native ordering to speed up + * access. + */ + public static FloatBuffer createDirectFloatBuffer(int capacity) + { + return createDirectByteBuffer(capacity << 2).asFloatBuffer(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/GlStateManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/GlStateManager.java new file mode 100644 index 0000000..a6ddc20 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/GlStateManager.java @@ -0,0 +1,1438 @@ +package net.minecraft.client.renderer; + +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL15; +import org.lwjgl.opengl.GL13; +import org.lwjgl.opengl.GL12; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GLContext; +import org.lwjgl.util.vector.Quaternion; + +@SideOnly(Side.CLIENT) +public class GlStateManager +{ + private static final FloatBuffer BUF_FLOAT_16 = BufferUtils.createFloatBuffer(16); + private static final FloatBuffer BUF_FLOAT_4 = BufferUtils.createFloatBuffer(4); + private static final GlStateManager.AlphaState alphaState = new GlStateManager.AlphaState(); + private static final GlStateManager.BooleanState lightingState = new GlStateManager.BooleanState(2896); + private static final GlStateManager.BooleanState[] lightState = new GlStateManager.BooleanState[8]; + private static final GlStateManager.ColorMaterialState colorMaterialState; + private static final GlStateManager.BlendState blendState; + private static final GlStateManager.DepthState depthState; + private static final GlStateManager.FogState fogState; + private static final GlStateManager.CullState cullState; + private static final GlStateManager.PolygonOffsetState polygonOffsetState; + private static final GlStateManager.ColorLogicState colorLogicState; + private static final GlStateManager.TexGenState texGenState; + private static final GlStateManager.ClearState clearState; + private static final GlStateManager.StencilState stencilState; + private static final GlStateManager.BooleanState normalizeState; + private static int activeTextureUnit; + private static final GlStateManager.TextureState[] textureState; + private static int activeShadeModel; + private static final GlStateManager.BooleanState rescaleNormalState; + private static final GlStateManager.ColorMask colorMaskState; + private static final GlStateManager.Color colorState; + + /** + * Do not use (see MinecraftForge issue #1637) + */ + public static void pushAttrib() + { + GL11.glPushAttrib(8256); + } + + /** + * Do not use (see MinecraftForge issue #1637) + */ + public static void popAttrib() + { + GL11.glPopAttrib(); + } + + public static void disableAlpha() + { + alphaState.alphaTest.setDisabled(); + } + + public static void enableAlpha() + { + alphaState.alphaTest.setEnabled(); + } + + public static void alphaFunc(int func, float ref) + { + if (func != alphaState.func || ref != alphaState.ref) + { + alphaState.func = func; + alphaState.ref = ref; + GL11.glAlphaFunc(func, ref); + } + } + + public static void enableLighting() + { + lightingState.setEnabled(); + } + + public static void disableLighting() + { + lightingState.setDisabled(); + } + + public static void enableLight(int light) + { + lightState[light].setEnabled(); + } + + public static void disableLight(int light) + { + lightState[light].setDisabled(); + } + + public static void enableColorMaterial() + { + colorMaterialState.colorMaterial.setEnabled(); + } + + public static void disableColorMaterial() + { + colorMaterialState.colorMaterial.setDisabled(); + } + + public static void colorMaterial(int face, int mode) + { + if (face != colorMaterialState.face || mode != colorMaterialState.mode) + { + colorMaterialState.face = face; + colorMaterialState.mode = mode; + GL11.glColorMaterial(face, mode); + } + } + + public static void glLight(int light, int pname, FloatBuffer params) + { + GL11.glLight(light, pname, params); + } + + public static void glLightModel(int pname, FloatBuffer params) + { + GL11.glLightModel(pname, params); + } + + public static void glNormal3f(float nx, float ny, float nz) + { + GL11.glNormal3f(nx, ny, nz); + } + + public static void disableDepth() + { + depthState.depthTest.setDisabled(); + } + + public static void enableDepth() + { + depthState.depthTest.setEnabled(); + } + + public static void depthFunc(int depthFunc) + { + if (depthFunc != depthState.depthFunc) + { + depthState.depthFunc = depthFunc; + GL11.glDepthFunc(depthFunc); + } + } + + public static void depthMask(boolean flagIn) + { + if (flagIn != depthState.maskEnabled) + { + depthState.maskEnabled = flagIn; + GL11.glDepthMask(flagIn); + } + } + + public static void disableBlend() + { + blendState.blend.setDisabled(); + } + + public static void enableBlend() + { + blendState.blend.setEnabled(); + } + + public static void blendFunc(GlStateManager.SourceFactor srcFactor, GlStateManager.DestFactor dstFactor) + { + blendFunc(srcFactor.factor, dstFactor.factor); + } + + public static void blendFunc(int srcFactor, int dstFactor) + { + if (srcFactor != blendState.srcFactor || dstFactor != blendState.dstFactor) + { + blendState.srcFactor = srcFactor; + blendState.dstFactor = dstFactor; + GL11.glBlendFunc(srcFactor, dstFactor); + } + } + + public static void tryBlendFuncSeparate(GlStateManager.SourceFactor srcFactor, GlStateManager.DestFactor dstFactor, GlStateManager.SourceFactor srcFactorAlpha, GlStateManager.DestFactor dstFactorAlpha) + { + tryBlendFuncSeparate(srcFactor.factor, dstFactor.factor, srcFactorAlpha.factor, dstFactorAlpha.factor); + } + + public static void tryBlendFuncSeparate(int srcFactor, int dstFactor, int srcFactorAlpha, int dstFactorAlpha) + { + if (srcFactor != blendState.srcFactor || dstFactor != blendState.dstFactor || srcFactorAlpha != blendState.srcFactorAlpha || dstFactorAlpha != blendState.dstFactorAlpha) + { + blendState.srcFactor = srcFactor; + blendState.dstFactor = dstFactor; + blendState.srcFactorAlpha = srcFactorAlpha; + blendState.dstFactorAlpha = dstFactorAlpha; + OpenGlHelper.glBlendFunc(srcFactor, dstFactor, srcFactorAlpha, dstFactorAlpha); + } + } + + public static void glBlendEquation(int blendEquation) + { + GL14.glBlendEquation(blendEquation); + } + + public static void enableOutlineMode(int color) + { + BUF_FLOAT_4.put(0, (float)(color >> 16 & 255) / 255.0F); + BUF_FLOAT_4.put(1, (float)(color >> 8 & 255) / 255.0F); + BUF_FLOAT_4.put(2, (float)(color >> 0 & 255) / 255.0F); + BUF_FLOAT_4.put(3, (float)(color >> 24 & 255) / 255.0F); + glTexEnv(8960, 8705, BUF_FLOAT_4); + glTexEnvi(8960, 8704, 34160); + glTexEnvi(8960, 34161, 7681); + glTexEnvi(8960, 34176, 34166); + glTexEnvi(8960, 34192, 768); + glTexEnvi(8960, 34162, 7681); + glTexEnvi(8960, 34184, 5890); + glTexEnvi(8960, 34200, 770); + } + + public static void disableOutlineMode() + { + glTexEnvi(8960, 8704, 8448); + glTexEnvi(8960, 34161, 8448); + glTexEnvi(8960, 34162, 8448); + glTexEnvi(8960, 34176, 5890); + glTexEnvi(8960, 34184, 5890); + glTexEnvi(8960, 34192, 768); + glTexEnvi(8960, 34200, 770); + } + + public static void enableFog() + { + fogState.fog.setEnabled(); + } + + public static void disableFog() + { + fogState.fog.setDisabled(); + } + + public static void setFog(GlStateManager.FogMode fogMode) + { + setFog(fogMode.capabilityId); + } + + private static void setFog(int param) + { + if (param != fogState.mode) + { + fogState.mode = param; + GL11.glFogi(GL11.GL_FOG_MODE, param); + } + } + + public static void setFogDensity(float param) + { + if (param != fogState.density) + { + fogState.density = param; + GL11.glFogf(GL11.GL_FOG_DENSITY, param); + } + } + + public static void setFogStart(float param) + { + if (param != fogState.start) + { + fogState.start = param; + GL11.glFogf(GL11.GL_FOG_START, param); + } + } + + public static void setFogEnd(float param) + { + if (param != fogState.end) + { + fogState.end = param; + GL11.glFogf(GL11.GL_FOG_END, param); + } + } + + public static void glFog(int pname, FloatBuffer param) + { + GL11.glFog(pname, param); + } + + public static void glFogi(int pname, int param) + { + GL11.glFogi(pname, param); + } + + public static void enableCull() + { + cullState.cullFace.setEnabled(); + } + + public static void disableCull() + { + cullState.cullFace.setDisabled(); + } + + public static void cullFace(GlStateManager.CullFace cullFace) + { + cullFace(cullFace.mode); + } + + private static void cullFace(int mode) + { + if (mode != cullState.mode) + { + cullState.mode = mode; + GL11.glCullFace(mode); + } + } + + public static void glPolygonMode(int face, int mode) + { + GL11.glPolygonMode(face, mode); + } + + public static void enablePolygonOffset() + { + polygonOffsetState.polygonOffsetFill.setEnabled(); + } + + public static void disablePolygonOffset() + { + polygonOffsetState.polygonOffsetFill.setDisabled(); + } + + public static void doPolygonOffset(float factor, float units) + { + if (factor != polygonOffsetState.factor || units != polygonOffsetState.units) + { + polygonOffsetState.factor = factor; + polygonOffsetState.units = units; + GL11.glPolygonOffset(factor, units); + } + } + + public static void enableColorLogic() + { + colorLogicState.colorLogicOp.setEnabled(); + } + + public static void disableColorLogic() + { + colorLogicState.colorLogicOp.setDisabled(); + } + + public static void colorLogicOp(GlStateManager.LogicOp logicOperation) + { + colorLogicOp(logicOperation.opcode); + } + + public static void colorLogicOp(int opcode) + { + if (opcode != colorLogicState.opcode) + { + colorLogicState.opcode = opcode; + GL11.glLogicOp(opcode); + } + } + + public static void enableTexGenCoord(GlStateManager.TexGen texGen) + { + texGenCoord(texGen).textureGen.setEnabled(); + } + + public static void disableTexGenCoord(GlStateManager.TexGen texGen) + { + texGenCoord(texGen).textureGen.setDisabled(); + } + + public static void texGen(GlStateManager.TexGen texGen, int param) + { + GlStateManager.TexGenCoord glstatemanager$texgencoord = texGenCoord(texGen); + + if (param != glstatemanager$texgencoord.param) + { + glstatemanager$texgencoord.param = param; + GL11.glTexGeni(glstatemanager$texgencoord.coord, GL11.GL_TEXTURE_GEN_MODE, param); + } + } + + public static void texGen(GlStateManager.TexGen texGen, int pname, FloatBuffer params) + { + GL11.glTexGen(texGenCoord(texGen).coord, pname, params); + } + + private static GlStateManager.TexGenCoord texGenCoord(GlStateManager.TexGen texGen) + { + switch (texGen) + { + case S: + return texGenState.s; + case T: + return texGenState.t; + case R: + return texGenState.r; + case Q: + return texGenState.q; + default: + return texGenState.s; + } + } + + public static void setActiveTexture(int texture) + { + if (activeTextureUnit != texture - OpenGlHelper.defaultTexUnit) + { + activeTextureUnit = texture - OpenGlHelper.defaultTexUnit; + OpenGlHelper.setActiveTexture(texture); + } + } + + public static void enableTexture2D() + { + textureState[activeTextureUnit].texture2DState.setEnabled(); + } + + public static void disableTexture2D() + { + textureState[activeTextureUnit].texture2DState.setDisabled(); + } + + public static void glTexEnv(int target, int parameterName, FloatBuffer parameters) + { + GL11.glTexEnv(target, parameterName, parameters); + } + + public static void glTexEnvi(int target, int parameterName, int parameter) + { + GL11.glTexEnvi(target, parameterName, parameter); + } + + public static void glTexEnvf(int target, int parameterName, float parameter) + { + GL11.glTexEnvf(target, parameterName, parameter); + } + + public static void glTexParameterf(int target, int parameterName, float parameter) + { + GL11.glTexParameterf(target, parameterName, parameter); + } + + public static void glTexParameteri(int target, int parameterName, int parameter) + { + GL11.glTexParameteri(target, parameterName, parameter); + } + + public static int glGetTexLevelParameteri(int target, int level, int parameterName) + { + return GL11.glGetTexLevelParameteri(target, level, parameterName); + } + + public static int generateTexture() + { + return GL11.glGenTextures(); + } + + public static void deleteTexture(int texture) + { + GL11.glDeleteTextures(texture); + + for (GlStateManager.TextureState glstatemanager$texturestate : textureState) + { + if (glstatemanager$texturestate.textureName == texture) + { + glstatemanager$texturestate.textureName = -1; + } + } + } + + public static void bindTexture(int texture) + { + if (texture != textureState[activeTextureUnit].textureName) + { + textureState[activeTextureUnit].textureName = texture; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture); + } + } + + public static void glTexImage2D(int target, int level, int internalFormat, int width, int height, int border, int format, int type, @Nullable IntBuffer pixels) + { + GL11.glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels); + } + + public static void glTexSubImage2D(int target, int level, int xOffset, int yOffset, int width, int height, int format, int type, IntBuffer pixels) + { + GL11.glTexSubImage2D(target, level, xOffset, yOffset, width, height, format, type, pixels); + } + + public static void glCopyTexSubImage2D(int target, int level, int xOffset, int yOffset, int x, int y, int width, int height) + { + GL11.glCopyTexSubImage2D(target, level, xOffset, yOffset, x, y, width, height); + } + + public static void glGetTexImage(int target, int level, int format, int type, IntBuffer pixels) + { + GL11.glGetTexImage(target, level, format, type, pixels); + } + + public static void enableNormalize() + { + normalizeState.setEnabled(); + } + + public static void disableNormalize() + { + normalizeState.setDisabled(); + } + + public static void shadeModel(int mode) + { + if (mode != activeShadeModel) + { + activeShadeModel = mode; + GL11.glShadeModel(mode); + } + } + + public static void enableRescaleNormal() + { + rescaleNormalState.setEnabled(); + } + + public static void disableRescaleNormal() + { + rescaleNormalState.setDisabled(); + } + + public static void viewport(int x, int y, int width, int height) + { + GL11.glViewport(x, y, width, height); + } + + public static void colorMask(boolean red, boolean green, boolean blue, boolean alpha) + { + if (red != colorMaskState.red || green != colorMaskState.green || blue != colorMaskState.blue || alpha != colorMaskState.alpha) + { + colorMaskState.red = red; + colorMaskState.green = green; + colorMaskState.blue = blue; + colorMaskState.alpha = alpha; + GL11.glColorMask(red, green, blue, alpha); + } + } + + public static void clearDepth(double depth) + { + if (depth != clearState.depth) + { + clearState.depth = depth; + GL11.glClearDepth(depth); + } + } + + public static void clearColor(float red, float green, float blue, float alpha) + { + if (red != clearState.color.red || green != clearState.color.green || blue != clearState.color.blue || alpha != clearState.color.alpha) + { + clearState.color.red = red; + clearState.color.green = green; + clearState.color.blue = blue; + clearState.color.alpha = alpha; + GL11.glClearColor(red, green, blue, alpha); + } + } + + public static void clear(int mask) + { + GL11.glClear(mask); + } + + public static void matrixMode(int mode) + { + GL11.glMatrixMode(mode); + } + + public static void loadIdentity() + { + GL11.glLoadIdentity(); + } + + public static void pushMatrix() + { + GL11.glPushMatrix(); + } + + public static void popMatrix() + { + GL11.glPopMatrix(); + } + + public static void getFloat(int pname, FloatBuffer params) + { + GL11.glGetFloat(pname, params); + } + + public static void ortho(double left, double right, double bottom, double top, double zNear, double zFar) + { + GL11.glOrtho(left, right, bottom, top, zNear, zFar); + } + + public static void rotate(float angle, float x, float y, float z) + { + GL11.glRotatef(angle, x, y, z); + } + + public static void scale(float x, float y, float z) + { + GL11.glScalef(x, y, z); + } + + public static void scale(double x, double y, double z) + { + GL11.glScaled(x, y, z); + } + + public static void translate(float x, float y, float z) + { + GL11.glTranslatef(x, y, z); + } + + public static void translate(double x, double y, double z) + { + GL11.glTranslated(x, y, z); + } + + public static void multMatrix(FloatBuffer matrix) + { + GL11.glMultMatrix(matrix); + } + + public static void rotate(Quaternion quaternionIn) + { + multMatrix(quatToGlMatrix(BUF_FLOAT_16, quaternionIn)); + } + + public static FloatBuffer quatToGlMatrix(FloatBuffer buffer, Quaternion quaternionIn) + { + buffer.clear(); + float f = quaternionIn.x * quaternionIn.x; + float f1 = quaternionIn.x * quaternionIn.y; + float f2 = quaternionIn.x * quaternionIn.z; + float f3 = quaternionIn.x * quaternionIn.w; + float f4 = quaternionIn.y * quaternionIn.y; + float f5 = quaternionIn.y * quaternionIn.z; + float f6 = quaternionIn.y * quaternionIn.w; + float f7 = quaternionIn.z * quaternionIn.z; + float f8 = quaternionIn.z * quaternionIn.w; + buffer.put(1.0F - 2.0F * (f4 + f7)); + buffer.put(2.0F * (f1 + f8)); + buffer.put(2.0F * (f2 - f6)); + buffer.put(0.0F); + buffer.put(2.0F * (f1 - f8)); + buffer.put(1.0F - 2.0F * (f + f7)); + buffer.put(2.0F * (f5 + f3)); + buffer.put(0.0F); + buffer.put(2.0F * (f2 + f6)); + buffer.put(2.0F * (f5 - f3)); + buffer.put(1.0F - 2.0F * (f + f4)); + buffer.put(0.0F); + buffer.put(0.0F); + buffer.put(0.0F); + buffer.put(0.0F); + buffer.put(1.0F); + buffer.rewind(); + return buffer; + } + + public static void color(float colorRed, float colorGreen, float colorBlue, float colorAlpha) + { + if (colorRed != colorState.red || colorGreen != colorState.green || colorBlue != colorState.blue || colorAlpha != colorState.alpha) + { + colorState.red = colorRed; + colorState.green = colorGreen; + colorState.blue = colorBlue; + colorState.alpha = colorAlpha; + GL11.glColor4f(colorRed, colorGreen, colorBlue, colorAlpha); + } + } + + public static void color(float colorRed, float colorGreen, float colorBlue) + { + color(colorRed, colorGreen, colorBlue, 1.0F); + } + + public static void glTexCoord2f(float sCoord, float tCoord) + { + GL11.glTexCoord2f(sCoord, tCoord); + } + + public static void glVertex3f(float x, float y, float z) + { + GL11.glVertex3f(x, y, z); + } + + public static void resetColor() + { + colorState.red = -1.0F; + colorState.green = -1.0F; + colorState.blue = -1.0F; + colorState.alpha = -1.0F; + } + + public static void glNormalPointer(int type, int stride, ByteBuffer buffer) + { + GL11.glNormalPointer(type, stride, buffer); + } + + public static void glTexCoordPointer(int size, int type, int stride, int buffer_offset) + { + GL11.glTexCoordPointer(size, type, stride, (long)buffer_offset); + } + + public static void glTexCoordPointer(int size, int type, int stride, ByteBuffer buffer) + { + GL11.glTexCoordPointer(size, type, stride, buffer); + } + + public static void glVertexPointer(int size, int type, int stride, int buffer_offset) + { + GL11.glVertexPointer(size, type, stride, (long)buffer_offset); + } + + public static void glVertexPointer(int size, int type, int stride, ByteBuffer buffer) + { + GL11.glVertexPointer(size, type, stride, buffer); + } + + public static void glColorPointer(int size, int type, int stride, int buffer_offset) + { + GL11.glColorPointer(size, type, stride, (long)buffer_offset); + } + + public static void glColorPointer(int size, int type, int stride, ByteBuffer buffer) + { + GL11.glColorPointer(size, type, stride, buffer); + } + + public static void glDisableClientState(int cap) + { + GL11.glDisableClientState(cap); + } + + public static void glEnableClientState(int cap) + { + GL11.glEnableClientState(cap); + } + + public static void glBegin(int mode) + { + GL11.glBegin(mode); + } + + public static void glEnd() + { + GL11.glEnd(); + } + + public static void glDrawArrays(int mode, int first, int count) + { + GL11.glDrawArrays(mode, first, count); + } + + public static void glLineWidth(float width) + { + GL11.glLineWidth(width); + } + + public static void callList(int list) + { + GL11.glCallList(list); + } + + public static void glDeleteLists(int list, int range) + { + GL11.glDeleteLists(list, range); + } + + public static void glNewList(int list, int mode) + { + GL11.glNewList(list, mode); + } + + public static void glEndList() + { + GL11.glEndList(); + } + + public static int glGenLists(int range) + { + return GL11.glGenLists(range); + } + + public static void glPixelStorei(int parameterName, int param) + { + GL11.glPixelStorei(parameterName, param); + } + + public static void glReadPixels(int x, int y, int width, int height, int format, int type, IntBuffer pixels) + { + GL11.glReadPixels(x, y, width, height, format, type, pixels); + } + + public static int glGetError() + { + return GL11.glGetError(); + } + + public static String glGetString(int name) + { + return GL11.glGetString(name); + } + + public static void glGetInteger(int parameterName, IntBuffer parameters) + { + GL11.glGetInteger(parameterName, parameters); + } + + public static int glGetInteger(int parameterName) + { + return GL11.glGetInteger(parameterName); + } + + public static void enableBlendProfile(GlStateManager.Profile p_187408_0_) + { + p_187408_0_.apply(); + } + + public static void disableBlendProfile(GlStateManager.Profile p_187440_0_) + { + p_187440_0_.clean(); + } + + static + { + for (int i = 0; i < 8; ++i) + { + lightState[i] = new GlStateManager.BooleanState(16384 + i); + } + + colorMaterialState = new GlStateManager.ColorMaterialState(); + blendState = new GlStateManager.BlendState(); + depthState = new GlStateManager.DepthState(); + fogState = new GlStateManager.FogState(); + cullState = new GlStateManager.CullState(); + polygonOffsetState = new GlStateManager.PolygonOffsetState(); + colorLogicState = new GlStateManager.ColorLogicState(); + texGenState = new GlStateManager.TexGenState(); + clearState = new GlStateManager.ClearState(); + stencilState = new GlStateManager.StencilState(); + normalizeState = new GlStateManager.BooleanState(2977); + textureState = new GlStateManager.TextureState[8]; + + for (int j = 0; j < 8; ++j) + { + textureState[j] = new GlStateManager.TextureState(); + } + + activeShadeModel = 7425; + rescaleNormalState = new GlStateManager.BooleanState(32826); + colorMaskState = new GlStateManager.ColorMask(); + colorState = new GlStateManager.Color(); + } + + @SideOnly(Side.CLIENT) + static class AlphaState + { + public GlStateManager.BooleanState alphaTest; + public int func; + public float ref; + + private AlphaState() + { + this.alphaTest = new GlStateManager.BooleanState(3008); + this.func = 519; + this.ref = -1.0F; + } + } + + @SideOnly(Side.CLIENT) + static class BlendState + { + public GlStateManager.BooleanState blend; + public int srcFactor; + public int dstFactor; + public int srcFactorAlpha; + public int dstFactorAlpha; + + private BlendState() + { + this.blend = new GlStateManager.BooleanState(3042); + this.srcFactor = 1; + this.dstFactor = 0; + this.srcFactorAlpha = 1; + this.dstFactorAlpha = 0; + } + } + + @SideOnly(Side.CLIENT) + static class BooleanState + { + private final int capability; + private boolean currentState; + + public BooleanState(int capabilityIn) + { + this.capability = capabilityIn; + } + + public void setDisabled() + { + this.setState(false); + } + + public void setEnabled() + { + this.setState(true); + } + + public void setState(boolean state) + { + if (state != this.currentState) + { + this.currentState = state; + + if (state) + { + GL11.glEnable(this.capability); + } + else + { + GL11.glDisable(this.capability); + } + } + } + } + + @SideOnly(Side.CLIENT) + static class ClearState + { + public double depth; + public GlStateManager.Color color; + + private ClearState() + { + this.depth = 1.0D; + this.color = new GlStateManager.Color(0.0F, 0.0F, 0.0F, 0.0F); + } + } + + @SideOnly(Side.CLIENT) + static class Color + { + public float red; + public float green; + public float blue; + public float alpha; + + public Color() + { + this(1.0F, 1.0F, 1.0F, 1.0F); + } + + public Color(float redIn, float greenIn, float blueIn, float alphaIn) + { + this.red = 1.0F; + this.green = 1.0F; + this.blue = 1.0F; + this.alpha = 1.0F; + this.red = redIn; + this.green = greenIn; + this.blue = blueIn; + this.alpha = alphaIn; + } + } + + @SideOnly(Side.CLIENT) + static class ColorLogicState + { + public GlStateManager.BooleanState colorLogicOp; + public int opcode; + + private ColorLogicState() + { + this.colorLogicOp = new GlStateManager.BooleanState(3058); + this.opcode = 5379; + } + } + + @SideOnly(Side.CLIENT) + static class ColorMask + { + public boolean red; + public boolean green; + public boolean blue; + public boolean alpha; + + private ColorMask() + { + this.red = true; + this.green = true; + this.blue = true; + this.alpha = true; + } + } + + @SideOnly(Side.CLIENT) + static class ColorMaterialState + { + public GlStateManager.BooleanState colorMaterial; + public int face; + public int mode; + + private ColorMaterialState() + { + this.colorMaterial = new GlStateManager.BooleanState(2903); + this.face = 1032; + this.mode = 5634; + } + } + + @SideOnly(Side.CLIENT) + public static enum CullFace + { + FRONT(1028), + BACK(1029), + FRONT_AND_BACK(1032); + + public final int mode; + + private CullFace(int modeIn) + { + this.mode = modeIn; + } + } + + @SideOnly(Side.CLIENT) + static class CullState + { + public GlStateManager.BooleanState cullFace; + public int mode; + + private CullState() + { + this.cullFace = new GlStateManager.BooleanState(2884); + this.mode = 1029; + } + } + + @SideOnly(Side.CLIENT) + static class DepthState + { + public GlStateManager.BooleanState depthTest; + public boolean maskEnabled; + public int depthFunc; + + private DepthState() + { + this.depthTest = new GlStateManager.BooleanState(2929); + this.maskEnabled = true; + this.depthFunc = 513; + } + } + + @SideOnly(Side.CLIENT) + public static enum DestFactor + { + CONSTANT_ALPHA(32771), + CONSTANT_COLOR(32769), + DST_ALPHA(772), + DST_COLOR(774), + ONE(1), + ONE_MINUS_CONSTANT_ALPHA(32772), + ONE_MINUS_CONSTANT_COLOR(32770), + ONE_MINUS_DST_ALPHA(773), + ONE_MINUS_DST_COLOR(775), + ONE_MINUS_SRC_ALPHA(771), + ONE_MINUS_SRC_COLOR(769), + SRC_ALPHA(770), + SRC_COLOR(768), + ZERO(0); + + public final int factor; + + private DestFactor(int factorIn) + { + this.factor = factorIn; + } + } + + @SideOnly(Side.CLIENT) + public static enum FogMode + { + LINEAR(9729), + EXP(2048), + EXP2(2049); + + /** The capability ID of this {@link FogMode} */ + public final int capabilityId; + + private FogMode(int capabilityIn) + { + this.capabilityId = capabilityIn; + } + } + + @SideOnly(Side.CLIENT) + static class FogState + { + public GlStateManager.BooleanState fog; + public int mode; + public float density; + public float start; + public float end; + + private FogState() + { + this.fog = new GlStateManager.BooleanState(2912); + this.mode = 2048; + this.density = 1.0F; + this.end = 1.0F; + } + } + + @SideOnly(Side.CLIENT) + public static enum LogicOp + { + AND(5377), + AND_INVERTED(5380), + AND_REVERSE(5378), + CLEAR(5376), + COPY(5379), + COPY_INVERTED(5388), + EQUIV(5385), + INVERT(5386), + NAND(5390), + NOOP(5381), + NOR(5384), + OR(5383), + OR_INVERTED(5389), + OR_REVERSE(5387), + SET(5391), + XOR(5382); + + public final int opcode; + + private LogicOp(int opcodeIn) + { + this.opcode = opcodeIn; + } + } + + @SideOnly(Side.CLIENT) + static class PolygonOffsetState + { + public GlStateManager.BooleanState polygonOffsetFill; + public GlStateManager.BooleanState polygonOffsetLine; + public float factor; + public float units; + + private PolygonOffsetState() + { + this.polygonOffsetFill = new GlStateManager.BooleanState(32823); + this.polygonOffsetLine = new GlStateManager.BooleanState(10754); + } + } + + @SideOnly(Side.CLIENT) + public static enum Profile + { + DEFAULT { + public void apply() + { + GlStateManager.disableAlpha(); + GlStateManager.alphaFunc(519, 0.0F); + GlStateManager.disableLighting(); + GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, RenderHelper.setColorBuffer(0.2F, 0.2F, 0.2F, 1.0F)); + + for (int i = 0; i < 8; ++i) + { + GlStateManager.disableLight(i); + GL11.glLight(GL11.GL_LIGHT0 + i, GL11.GL_AMBIENT, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GL11.glLight(GL11.GL_LIGHT0 + i, GL11.GL_POSITION, RenderHelper.setColorBuffer(0.0F, 0.0F, 1.0F, 0.0F)); + + if (i == 0) + { + GL11.glLight(GL11.GL_LIGHT0 + i, GL11.GL_DIFFUSE, RenderHelper.setColorBuffer(1.0F, 1.0F, 1.0F, 1.0F)); + GL11.glLight(GL11.GL_LIGHT0 + i, GL11.GL_SPECULAR, RenderHelper.setColorBuffer(1.0F, 1.0F, 1.0F, 1.0F)); + } + else + { + GL11.glLight(GL11.GL_LIGHT0 + i, GL11.GL_DIFFUSE, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GL11.glLight(GL11.GL_LIGHT0 + i, GL11.GL_SPECULAR, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + } + } + + GlStateManager.disableColorMaterial(); + GlStateManager.colorMaterial(1032, 5634); + GlStateManager.disableDepth(); + GlStateManager.depthFunc(513); + GlStateManager.depthMask(true); + GlStateManager.disableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GL14.glBlendEquation(GL14.GL_FUNC_ADD); + GlStateManager.disableFog(); + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GlStateManager.setFogDensity(1.0F); + GlStateManager.setFogStart(0.0F); + GlStateManager.setFogEnd(1.0F); + GL11.glFog(GL11.GL_FOG_COLOR, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); + + if (GLContext.getCapabilities().GL_NV_fog_distance) + { + GL11.glFogi(GL11.GL_FOG_MODE, 34140); + } + + GlStateManager.doPolygonOffset(0.0F, 0.0F); + GlStateManager.disableColorLogic(); + GlStateManager.colorLogicOp(5379); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.S); + GlStateManager.texGen(GlStateManager.TexGen.S, 9216); + GlStateManager.texGen(GlStateManager.TexGen.S, 9474, RenderHelper.setColorBuffer(1.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.texGen(GlStateManager.TexGen.S, 9217, RenderHelper.setColorBuffer(1.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.T); + GlStateManager.texGen(GlStateManager.TexGen.T, 9216); + GlStateManager.texGen(GlStateManager.TexGen.T, 9474, RenderHelper.setColorBuffer(0.0F, 1.0F, 0.0F, 0.0F)); + GlStateManager.texGen(GlStateManager.TexGen.T, 9217, RenderHelper.setColorBuffer(0.0F, 1.0F, 0.0F, 0.0F)); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.R); + GlStateManager.texGen(GlStateManager.TexGen.R, 9216); + GlStateManager.texGen(GlStateManager.TexGen.R, 9474, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.texGen(GlStateManager.TexGen.R, 9217, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.Q); + GlStateManager.texGen(GlStateManager.TexGen.Q, 9216); + GlStateManager.texGen(GlStateManager.TexGen.Q, 9474, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.texGen(GlStateManager.TexGen.Q, 9217, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.setActiveTexture(0); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST_MIPMAP_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LEVEL, 1000); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MAX_LOD, 1000); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL12.GL_TEXTURE_MIN_LOD, -1000); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL14.GL_TEXTURE_LOD_BIAS, 0.0F); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE); + GL11.glTexEnv(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_COLOR, RenderHelper.setColorBuffer(0.0F, 0.0F, 0.0F, 0.0F)); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_COMBINE_RGB, GL11.GL_MODULATE); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_COMBINE_ALPHA, GL11.GL_MODULATE); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL15.GL_SRC0_RGB, GL11.GL_TEXTURE); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL15.GL_SRC1_RGB, GL13.GL_PREVIOUS); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL15.GL_SRC2_RGB, GL13.GL_CONSTANT); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL15.GL_SRC0_ALPHA, GL11.GL_TEXTURE); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL15.GL_SRC1_ALPHA, GL13.GL_PREVIOUS); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL15.GL_SRC2_ALPHA, GL13.GL_CONSTANT); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND0_RGB, GL11.GL_SRC_COLOR); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND1_RGB, GL11.GL_SRC_COLOR); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND2_RGB, GL11.GL_SRC_ALPHA); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND0_ALPHA, GL11.GL_SRC_ALPHA); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND1_ALPHA, GL11.GL_SRC_ALPHA); + GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL13.GL_OPERAND2_ALPHA, GL11.GL_SRC_ALPHA); + GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL13.GL_RGB_SCALE, 1.0F); + GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_ALPHA_SCALE, 1.0F); + GlStateManager.disableNormalize(); + GlStateManager.shadeModel(7425); + GlStateManager.disableRescaleNormal(); + GlStateManager.colorMask(true, true, true, true); + GlStateManager.clearDepth(1.0D); + GL11.glLineWidth(1.0F); + GL11.glNormal3f(0.0F, 0.0F, 1.0F); + GL11.glPolygonMode(GL11.GL_FRONT, GL11.GL_FILL); + GL11.glPolygonMode(GL11.GL_BACK, GL11.GL_FILL); + } + + public void clean() + { + } + }, + PLAYER_SKIN { + public void apply() + { + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + } + + public void clean() + { + GlStateManager.disableBlend(); + } + }, + TRANSPARENT_MODEL { + public void apply() + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 0.15F); + GlStateManager.depthMask(false); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.alphaFunc(516, 0.003921569F); + } + + public void clean() + { + GlStateManager.disableBlend(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.depthMask(true); + } + }; + + private Profile() + { + } + + public abstract void apply(); + + public abstract void clean(); + } + + @SideOnly(Side.CLIENT) + public static enum SourceFactor + { + CONSTANT_ALPHA(32771), + CONSTANT_COLOR(32769), + DST_ALPHA(772), + DST_COLOR(774), + ONE(1), + ONE_MINUS_CONSTANT_ALPHA(32772), + ONE_MINUS_CONSTANT_COLOR(32770), + ONE_MINUS_DST_ALPHA(773), + ONE_MINUS_DST_COLOR(775), + ONE_MINUS_SRC_ALPHA(771), + ONE_MINUS_SRC_COLOR(769), + SRC_ALPHA(770), + SRC_ALPHA_SATURATE(776), + SRC_COLOR(768), + ZERO(0); + + public final int factor; + + private SourceFactor(int factorIn) + { + this.factor = factorIn; + } + } + + @SideOnly(Side.CLIENT) + static class StencilFunc + { + public int func; + public int mask; + + private StencilFunc() + { + this.func = 519; + this.mask = -1; + } + } + + @SideOnly(Side.CLIENT) + static class StencilState + { + public GlStateManager.StencilFunc func; + public int mask; + public int fail; + public int zfail; + public int zpass; + + private StencilState() + { + this.func = new GlStateManager.StencilFunc(); + this.mask = -1; + this.fail = 7680; + this.zfail = 7680; + this.zpass = 7680; + } + } + + @SideOnly(Side.CLIENT) + public static enum TexGen + { + S, + T, + R, + Q; + } + + @SideOnly(Side.CLIENT) + static class TexGenCoord + { + public GlStateManager.BooleanState textureGen; + public int coord; + public int param = -1; + + public TexGenCoord(int coordIn, int capabilityIn) + { + this.coord = coordIn; + this.textureGen = new GlStateManager.BooleanState(capabilityIn); + } + } + + @SideOnly(Side.CLIENT) + static class TexGenState + { + public GlStateManager.TexGenCoord s; + public GlStateManager.TexGenCoord t; + public GlStateManager.TexGenCoord r; + public GlStateManager.TexGenCoord q; + + private TexGenState() + { + this.s = new GlStateManager.TexGenCoord(8192, 3168); + this.t = new GlStateManager.TexGenCoord(8193, 3169); + this.r = new GlStateManager.TexGenCoord(8194, 3170); + this.q = new GlStateManager.TexGenCoord(8195, 3171); + } + } + + @SideOnly(Side.CLIENT) + static class TextureState + { + public GlStateManager.BooleanState texture2DState; + public int textureName; + + private TextureState() + { + this.texture2DState = new GlStateManager.BooleanState(3553); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/IImageBuffer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/IImageBuffer.java new file mode 100644 index 0000000..9a8c71c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/IImageBuffer.java @@ -0,0 +1,13 @@ +package net.minecraft.client.renderer; + +import java.awt.image.BufferedImage; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IImageBuffer +{ + BufferedImage parseUserSkin(BufferedImage image); + + void skinAvailable(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ImageBufferDownload.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ImageBufferDownload.java new file mode 100644 index 0000000..4818095 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ImageBufferDownload.java @@ -0,0 +1,109 @@ +package net.minecraft.client.renderer; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.awt.image.ImageObserver; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ImageBufferDownload implements IImageBuffer +{ + private int[] imageData; + private int imageWidth; + private int imageHeight; + + @Nullable + public BufferedImage parseUserSkin(BufferedImage image) + { + if (image == null) + { + return null; + } + else + { + this.imageWidth = 64; + this.imageHeight = 64; + BufferedImage bufferedimage = new BufferedImage(this.imageWidth, this.imageHeight, 2); + Graphics graphics = bufferedimage.getGraphics(); + graphics.drawImage(image, 0, 0, (ImageObserver)null); + boolean flag = image.getHeight() == 32; + + if (flag) + { + graphics.setColor(new Color(0, 0, 0, 0)); + graphics.fillRect(0, 32, 64, 32); + graphics.drawImage(bufferedimage, 24, 48, 20, 52, 4, 16, 8, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 28, 48, 24, 52, 8, 16, 12, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 20, 52, 16, 64, 8, 20, 12, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 24, 52, 20, 64, 4, 20, 8, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 28, 52, 24, 64, 0, 20, 4, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 32, 52, 28, 64, 12, 20, 16, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 40, 48, 36, 52, 44, 16, 48, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 44, 48, 40, 52, 48, 16, 52, 20, (ImageObserver)null); + graphics.drawImage(bufferedimage, 36, 52, 32, 64, 48, 20, 52, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 40, 52, 36, 64, 44, 20, 48, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 44, 52, 40, 64, 40, 20, 44, 32, (ImageObserver)null); + graphics.drawImage(bufferedimage, 48, 52, 44, 64, 52, 20, 56, 32, (ImageObserver)null); + } + + graphics.dispose(); + this.imageData = ((DataBufferInt)bufferedimage.getRaster().getDataBuffer()).getData(); + this.setAreaOpaque(0, 0, 32, 16); + + if (flag) + { + this.setAreaTransparent(32, 0, 64, 32); + } + + this.setAreaOpaque(0, 16, 64, 32); + this.setAreaOpaque(16, 48, 48, 64); + return bufferedimage; + } + } + + public void skinAvailable() + { + } + + private void setAreaTransparent(int x, int y, int width, int height) + { + for (int i = x; i < width; ++i) + { + for (int j = y; j < height; ++j) + { + int k = this.imageData[i + j * this.imageWidth]; + + if ((k >> 24 & 255) < 128) + { + return; + } + } + } + + for (int l = x; l < width; ++l) + { + for (int i1 = y; i1 < height; ++i1) + { + this.imageData[l + i1 * this.imageWidth] &= 16777215; + } + } + } + + /** + * Makes the given area of the image opaque + */ + private void setAreaOpaque(int x, int y, int width, int height) + { + for (int i = x; i < width; ++i) + { + for (int j = y; j < height; ++j) + { + this.imageData[i + j * this.imageWidth] |= -16777216; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/InventoryEffectRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/InventoryEffectRenderer.java new file mode 100644 index 0000000..da3741d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/InventoryEffectRenderer.java @@ -0,0 +1,126 @@ +package net.minecraft.client.renderer; + +import com.google.common.collect.Ordering; +import java.util.Collection; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class InventoryEffectRenderer extends GuiContainer +{ + /** True if there is some potion effect to display */ + protected boolean hasActivePotionEffects; + + public InventoryEffectRenderer(Container inventorySlotsIn) + { + super(inventorySlotsIn); + } + + /** + * Adds the buttons (and other controls) to the screen in question. Called when the GUI is displayed and when the + * window resizes, the buttonList is cleared beforehand. + */ + public void initGui() + { + super.initGui(); + this.updateActivePotionEffects(); + } + + protected void updateActivePotionEffects() + { + boolean hasVisibleEffect = false; + for(PotionEffect potioneffect : this.mc.player.getActivePotionEffects()) { + Potion potion = potioneffect.getPotion(); + if(potion.shouldRender(potioneffect)) { hasVisibleEffect = true; break; } + } + if (this.mc.player.getActivePotionEffects().isEmpty() || !hasVisibleEffect) + { + this.guiLeft = (this.width - this.xSize) / 2; + this.hasActivePotionEffects = false; + } + else + { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.GuiScreenEvent.PotionShiftEvent(this))) this.guiLeft = (this.width - this.xSize) / 2; else + this.guiLeft = 160 + (this.width - this.xSize - 200) / 2; + this.hasActivePotionEffects = true; + } + } + + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + super.drawScreen(mouseX, mouseY, partialTicks); + + if (this.hasActivePotionEffects) + { + this.drawActivePotionEffects(); + } + } + + /** + * Display the potion effects list + */ + private void drawActivePotionEffects() + { + int i = this.guiLeft - 124; + int j = this.guiTop; + int k = 166; + Collection collection = this.mc.player.getActivePotionEffects(); + + if (!collection.isEmpty()) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + int l = 33; + + if (collection.size() > 5) + { + l = 132 / (collection.size() - 1); + } + + for (PotionEffect potioneffect : Ordering.natural().sortedCopy(collection)) + { + Potion potion = potioneffect.getPotion(); + if(!potion.shouldRender(potioneffect)) continue; + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(INVENTORY_BACKGROUND); + this.drawTexturedModalRect(i, j, 0, 166, 140, 32); + + if (potion.hasStatusIcon()) + { + int i1 = potion.getStatusIconIndex(); + this.drawTexturedModalRect(i + 6, j + 7, 0 + i1 % 8 * 18, 198 + i1 / 8 * 18, 18, 18); + } + + potion.renderInventoryEffect(i, j, potioneffect, mc); + if (!potion.shouldRenderInvText(potioneffect)) { j += l; continue; } + String s1 = I18n.format(potion.getName()); + + if (potioneffect.getAmplifier() == 1) + { + s1 = s1 + " " + I18n.format("enchantment.level.2"); + } + else if (potioneffect.getAmplifier() == 2) + { + s1 = s1 + " " + I18n.format("enchantment.level.3"); + } + else if (potioneffect.getAmplifier() == 3) + { + s1 = s1 + " " + I18n.format("enchantment.level.4"); + } + + this.fontRenderer.drawStringWithShadow(s1, (float)(i + 10 + 18), (float)(j + 6), 16777215); + String s = Potion.getPotionDurationString(potioneffect, 1.0F); + this.fontRenderer.drawStringWithShadow(s, (float)(i + 10 + 18), (float)(j + 6 + 10), 8355711); + j += l; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemMeshDefinition.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemMeshDefinition.java new file mode 100644 index 0000000..93dae39 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemMeshDefinition.java @@ -0,0 +1,12 @@ +package net.minecraft.client.renderer; + +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ItemMeshDefinition +{ + ModelResourceLocation getModelLocation(ItemStack stack); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemModelMesher.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemModelMesher.java new file mode 100644 index 0000000..e04c7e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemModelMesher.java @@ -0,0 +1,105 @@ +package net.minecraft.client.renderer; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ItemModelMesher +{ + private final Map simpleShapes = Maps.newHashMap(); + private final Map simpleShapesCache = Maps.newHashMap(); + protected final Map shapers = Maps.newHashMap(); + private final ModelManager modelManager; + + public ItemModelMesher(ModelManager modelManager) + { + this.modelManager = modelManager; + } + + public TextureAtlasSprite getParticleIcon(Item item) + { + return this.getParticleIcon(item, 0); + } + + public TextureAtlasSprite getParticleIcon(Item item, int meta) + { + ItemStack stack = new ItemStack(item, 1, meta); + IBakedModel model = this.getItemModel(stack); + return model.getOverrides().handleItemState(model, stack, null, null).getParticleTexture(); + } + + public IBakedModel getItemModel(ItemStack stack) + { + Item item = stack.getItem(); + IBakedModel ibakedmodel = this.getItemModel(item, this.getMetadata(stack)); + + if (ibakedmodel == null) + { + ItemMeshDefinition itemmeshdefinition = this.shapers.get(item); + + if (itemmeshdefinition != null) + { + ibakedmodel = this.modelManager.getModel(itemmeshdefinition.getModelLocation(stack)); + } + } + + if (ibakedmodel == null) + { + ibakedmodel = this.modelManager.getMissingModel(); + } + + return ibakedmodel; + } + + protected int getMetadata(ItemStack stack) + { + return stack.getMaxDamage() > 0 ? 0 : stack.getMetadata(); + } + + @Nullable + protected IBakedModel getItemModel(Item item, int meta) + { + return this.simpleShapesCache.get(Integer.valueOf(this.getIndex(item, meta))); + } + + private int getIndex(Item item, int meta) + { + return Item.getIdFromItem(item) << 16 | meta; + } + + public void register(Item item, int meta, ModelResourceLocation location) + { + this.simpleShapes.put(Integer.valueOf(this.getIndex(item, meta)), location); + this.simpleShapesCache.put(Integer.valueOf(this.getIndex(item, meta)), this.modelManager.getModel(location)); + } + + public void register(Item item, ItemMeshDefinition definition) + { + this.shapers.put(item, definition); + } + + public ModelManager getModelManager() + { + return this.modelManager; + } + + public void rebuildCache() + { + this.simpleShapesCache.clear(); + + for (Entry entry : this.simpleShapes.entrySet()) + { + this.simpleShapesCache.put(entry.getKey(), this.modelManager.getModel(entry.getValue())); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemRenderer.java new file mode 100644 index 0000000..3f91282 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ItemRenderer.java @@ -0,0 +1,660 @@ +package net.minecraft.client.renderer; + +import com.google.common.base.MoreObjects; +import java.util.Objects; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ItemRenderer +{ + private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png"); + private static final ResourceLocation RES_UNDERWATER_OVERLAY = new ResourceLocation("textures/misc/underwater.png"); + /** A reference to the Minecraft object. */ + private final Minecraft mc; + private ItemStack itemStackMainHand = ItemStack.EMPTY; + private ItemStack itemStackOffHand = ItemStack.EMPTY; + private float equippedProgressMainHand; + private float prevEquippedProgressMainHand; + private float equippedProgressOffHand; + private float prevEquippedProgressOffHand; + private final RenderManager renderManager; + private final RenderItem itemRenderer; + + public ItemRenderer(Minecraft mcIn) + { + this.mc = mcIn; + this.renderManager = mcIn.getRenderManager(); + this.itemRenderer = mcIn.getRenderItem(); + } + + public void renderItem(EntityLivingBase entityIn, ItemStack heldStack, ItemCameraTransforms.TransformType transform) + { + this.renderItemSide(entityIn, heldStack, transform, false); + } + + public void renderItemSide(EntityLivingBase entitylivingbaseIn, ItemStack heldStack, ItemCameraTransforms.TransformType transform, boolean leftHanded) + { + if (!heldStack.isEmpty()) + { + Item item = heldStack.getItem(); + Block block = Block.getBlockFromItem(item); + GlStateManager.pushMatrix(); + boolean flag = this.itemRenderer.shouldRenderItemIn3D(heldStack) && block.getBlockLayer() == BlockRenderLayer.TRANSLUCENT; + + if (flag) + { + GlStateManager.depthMask(false); + } + + this.itemRenderer.renderItem(heldStack, entitylivingbaseIn, transform, leftHanded); + + if (flag) + { + GlStateManager.depthMask(true); + } + + GlStateManager.popMatrix(); + } + } + + /** + * Rotate the render around X and Y + */ + private void rotateArroundXAndY(float angle, float angleY) + { + GlStateManager.pushMatrix(); + GlStateManager.rotate(angle, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(angleY, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GlStateManager.popMatrix(); + } + + private void setLightmap() + { + AbstractClientPlayer abstractclientplayer = this.mc.player; + int i = this.mc.world.getCombinedLight(new BlockPos(abstractclientplayer.posX, abstractclientplayer.posY + (double)abstractclientplayer.getEyeHeight(), abstractclientplayer.posZ), 0); + float f = (float)(i & 65535); + float f1 = (float)(i >> 16); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, f, f1); + } + + private void rotateArm(float p_187458_1_) + { + EntityPlayerSP entityplayersp = this.mc.player; + float f = entityplayersp.prevRenderArmPitch + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * p_187458_1_; + float f1 = entityplayersp.prevRenderArmYaw + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * p_187458_1_; + GlStateManager.rotate((entityplayersp.rotationPitch - f) * 0.1F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate((entityplayersp.rotationYaw - f1) * 0.1F, 0.0F, 1.0F, 0.0F); + } + + /** + * Return the angle to render the Map + */ + private float getMapAngleFromPitch(float pitch) + { + float f = 1.0F - pitch / 45.0F + 0.1F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + f = -MathHelper.cos(f * (float)Math.PI) * 0.5F + 0.5F; + return f; + } + + private void renderArms() + { + if (!this.mc.player.isInvisible()) + { + GlStateManager.disableCull(); + GlStateManager.pushMatrix(); + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + this.renderArm(EnumHandSide.RIGHT); + this.renderArm(EnumHandSide.LEFT); + GlStateManager.popMatrix(); + GlStateManager.enableCull(); + } + } + + private void renderArm(EnumHandSide p_187455_1_) + { + this.mc.getTextureManager().bindTexture(this.mc.player.getLocationSkin()); + Render render = this.renderManager.getEntityRenderObject(this.mc.player); + RenderPlayer renderplayer = (RenderPlayer)render; + GlStateManager.pushMatrix(); + float f = p_187455_1_ == EnumHandSide.RIGHT ? 1.0F : -1.0F; + GlStateManager.rotate(92.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f * -41.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(f * 0.3F, -1.1F, 0.45F); + + if (p_187455_1_ == EnumHandSide.RIGHT) + { + renderplayer.renderRightArm(this.mc.player); + } + else + { + renderplayer.renderLeftArm(this.mc.player); + } + + GlStateManager.popMatrix(); + } + + private void renderMapFirstPersonSide(float p_187465_1_, EnumHandSide hand, float p_187465_3_, ItemStack stack) + { + float f = hand == EnumHandSide.RIGHT ? 1.0F : -1.0F; + GlStateManager.translate(f * 0.125F, -0.125F, 0.0F); + + if (!this.mc.player.isInvisible()) + { + GlStateManager.pushMatrix(); + GlStateManager.rotate(f * 10.0F, 0.0F, 0.0F, 1.0F); + this.renderArmFirstPerson(p_187465_1_, p_187465_3_, hand); + GlStateManager.popMatrix(); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(f * 0.51F, -0.08F + p_187465_1_ * -1.2F, -0.75F); + float f1 = MathHelper.sqrt(p_187465_3_); + float f2 = MathHelper.sin(f1 * (float)Math.PI); + float f3 = -0.5F * f2; + float f4 = 0.4F * MathHelper.sin(f1 * ((float)Math.PI * 2F)); + float f5 = -0.3F * MathHelper.sin(p_187465_3_ * (float)Math.PI); + GlStateManager.translate(f * f3, f4 - 0.3F * f2, f5); + GlStateManager.rotate(f2 * -45.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f * f2 * -30.0F, 0.0F, 1.0F, 0.0F); + this.renderMapFirstPerson(stack); + GlStateManager.popMatrix(); + } + + private void renderMapFirstPerson(float p_187463_1_, float p_187463_2_, float p_187463_3_) + { + float f = MathHelper.sqrt(p_187463_3_); + float f1 = -0.2F * MathHelper.sin(p_187463_3_ * (float)Math.PI); + float f2 = -0.4F * MathHelper.sin(f * (float)Math.PI); + GlStateManager.translate(0.0F, -f1 / 2.0F, f2); + float f3 = this.getMapAngleFromPitch(p_187463_1_); + GlStateManager.translate(0.0F, 0.04F + p_187463_2_ * -1.2F + f3 * -0.5F, -0.72F); + GlStateManager.rotate(f3 * -85.0F, 1.0F, 0.0F, 0.0F); + this.renderArms(); + float f4 = MathHelper.sin(f * (float)Math.PI); + GlStateManager.rotate(f4 * 20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.scale(2.0F, 2.0F, 2.0F); + this.renderMapFirstPerson(this.itemStackMainHand); + } + + private void renderMapFirstPerson(ItemStack stack) + { + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.scale(0.38F, 0.38F, 0.38F); + GlStateManager.disableLighting(); + this.mc.getTextureManager().bindTexture(RES_MAP_BACKGROUND); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.translate(-0.5F, -0.5F, 0.0F); + GlStateManager.scale(0.0078125F, 0.0078125F, 0.0078125F); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-7.0D, 135.0D, 0.0D).tex(0.0D, 1.0D).endVertex(); + bufferbuilder.pos(135.0D, 135.0D, 0.0D).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos(135.0D, -7.0D, 0.0D).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos(-7.0D, -7.0D, 0.0D).tex(0.0D, 0.0D).endVertex(); + tessellator.draw(); + MapData mapdata = ((net.minecraft.item.ItemMap) stack.getItem()).getMapData(stack, this.mc.world); + + if (mapdata != null) + { + this.mc.entityRenderer.getMapItemRenderer().renderMap(mapdata, false); + } + + GlStateManager.enableLighting(); + } + + private void renderArmFirstPerson(float p_187456_1_, float p_187456_2_, EnumHandSide p_187456_3_) + { + boolean flag = p_187456_3_ != EnumHandSide.LEFT; + float f = flag ? 1.0F : -1.0F; + float f1 = MathHelper.sqrt(p_187456_2_); + float f2 = -0.3F * MathHelper.sin(f1 * (float)Math.PI); + float f3 = 0.4F * MathHelper.sin(f1 * ((float)Math.PI * 2F)); + float f4 = -0.4F * MathHelper.sin(p_187456_2_ * (float)Math.PI); + GlStateManager.translate(f * (f2 + 0.64000005F), f3 + -0.6F + p_187456_1_ * -0.6F, f4 + -0.71999997F); + GlStateManager.rotate(f * 45.0F, 0.0F, 1.0F, 0.0F); + float f5 = MathHelper.sin(p_187456_2_ * p_187456_2_ * (float)Math.PI); + float f6 = MathHelper.sin(f1 * (float)Math.PI); + GlStateManager.rotate(f * f6 * 70.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f * f5 * -20.0F, 0.0F, 0.0F, 1.0F); + AbstractClientPlayer abstractclientplayer = this.mc.player; + this.mc.getTextureManager().bindTexture(abstractclientplayer.getLocationSkin()); + GlStateManager.translate(f * -1.0F, 3.6F, 3.5F); + GlStateManager.rotate(f * 120.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(200.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f * -135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(f * 5.6F, 0.0F, 0.0F); + RenderPlayer renderplayer = (RenderPlayer)this.renderManager.getEntityRenderObject(abstractclientplayer); + GlStateManager.disableCull(); + + if (flag) + { + renderplayer.renderRightArm(abstractclientplayer); + } + else + { + renderplayer.renderLeftArm(abstractclientplayer); + } + + GlStateManager.enableCull(); + } + + private void transformEatFirstPerson(float p_187454_1_, EnumHandSide hand, ItemStack stack) + { + float f = (float)this.mc.player.getItemInUseCount() - p_187454_1_ + 1.0F; + float f1 = f / (float)stack.getMaxItemUseDuration(); + + if (f1 < 0.8F) + { + float f2 = MathHelper.abs(MathHelper.cos(f / 4.0F * (float)Math.PI) * 0.1F); + GlStateManager.translate(0.0F, f2, 0.0F); + } + + float f3 = 1.0F - (float)Math.pow((double)f1, 27.0D); + int i = hand == EnumHandSide.RIGHT ? 1 : -1; + GlStateManager.translate(f3 * 0.6F * (float)i, f3 * -0.5F, f3 * 0.0F); + GlStateManager.rotate((float)i * f3 * 90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f3 * 10.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate((float)i * f3 * 30.0F, 0.0F, 0.0F, 1.0F); + } + + private void transformFirstPerson(EnumHandSide hand, float p_187453_2_) + { + int i = hand == EnumHandSide.RIGHT ? 1 : -1; + float f = MathHelper.sin(p_187453_2_ * p_187453_2_ * (float)Math.PI); + GlStateManager.rotate((float)i * (45.0F + f * -20.0F), 0.0F, 1.0F, 0.0F); + float f1 = MathHelper.sin(MathHelper.sqrt(p_187453_2_) * (float)Math.PI); + GlStateManager.rotate((float)i * f1 * -20.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(f1 * -80.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate((float)i * -45.0F, 0.0F, 1.0F, 0.0F); + } + + private void transformSideFirstPerson(EnumHandSide hand, float p_187459_2_) + { + int i = hand == EnumHandSide.RIGHT ? 1 : -1; + GlStateManager.translate((float)i * 0.56F, -0.52F + p_187459_2_ * -0.6F, -0.72F); + } + + /** + * Renders the active item in the player's hand when in first person mode. + */ + public void renderItemInFirstPerson(float partialTicks) + { + AbstractClientPlayer abstractclientplayer = this.mc.player; + float f = abstractclientplayer.getSwingProgress(partialTicks); + EnumHand enumhand = (EnumHand)MoreObjects.firstNonNull(abstractclientplayer.swingingHand, EnumHand.MAIN_HAND); + float f1 = abstractclientplayer.prevRotationPitch + (abstractclientplayer.rotationPitch - abstractclientplayer.prevRotationPitch) * partialTicks; + float f2 = abstractclientplayer.prevRotationYaw + (abstractclientplayer.rotationYaw - abstractclientplayer.prevRotationYaw) * partialTicks; + boolean flag = true; + boolean flag1 = true; + + if (abstractclientplayer.isHandActive()) + { + ItemStack itemstack = abstractclientplayer.getActiveItemStack(); + + if (!itemstack.isEmpty() && itemstack.getItem() == Items.BOW) //Forge: Data watcher can desync and cause this to NPE... + { + EnumHand enumhand1 = abstractclientplayer.getActiveHand(); + flag = enumhand1 == EnumHand.MAIN_HAND; + flag1 = !flag; + } + } + + this.rotateArroundXAndY(f1, f2); + this.setLightmap(); + this.rotateArm(partialTicks); + GlStateManager.enableRescaleNormal(); + + if (flag) + { + float f3 = enumhand == EnumHand.MAIN_HAND ? f : 0.0F; + float f5 = 1.0F - (this.prevEquippedProgressMainHand + (this.equippedProgressMainHand - this.prevEquippedProgressMainHand) * partialTicks); + if(!net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonHand(EnumHand.MAIN_HAND, partialTicks, f1, f3, f5, this.itemStackMainHand)) + this.renderItemInFirstPerson(abstractclientplayer, partialTicks, f1, EnumHand.MAIN_HAND, f3, this.itemStackMainHand, f5); + } + + if (flag1) + { + float f4 = enumhand == EnumHand.OFF_HAND ? f : 0.0F; + float f6 = 1.0F - (this.prevEquippedProgressOffHand + (this.equippedProgressOffHand - this.prevEquippedProgressOffHand) * partialTicks); + if(!net.minecraftforge.client.ForgeHooksClient.renderSpecificFirstPersonHand(EnumHand.OFF_HAND, partialTicks, f1, f4, f6, this.itemStackOffHand)) + this.renderItemInFirstPerson(abstractclientplayer, partialTicks, f1, EnumHand.OFF_HAND, f4, this.itemStackOffHand, f6); + } + + GlStateManager.disableRescaleNormal(); + RenderHelper.disableStandardItemLighting(); + } + + public void renderItemInFirstPerson(AbstractClientPlayer player, float p_187457_2_, float p_187457_3_, EnumHand hand, float p_187457_5_, ItemStack stack, float p_187457_7_) + { + boolean flag = hand == EnumHand.MAIN_HAND; + EnumHandSide enumhandside = flag ? player.getPrimaryHand() : player.getPrimaryHand().opposite(); + GlStateManager.pushMatrix(); + + if (stack.isEmpty()) + { + if (flag && !player.isInvisible()) + { + this.renderArmFirstPerson(p_187457_7_, p_187457_5_, enumhandside); + } + } + else if (stack.getItem() instanceof net.minecraft.item.ItemMap) + { + if (flag && this.itemStackOffHand.isEmpty()) + { + this.renderMapFirstPerson(p_187457_3_, p_187457_7_, p_187457_5_); + } + else + { + this.renderMapFirstPersonSide(p_187457_7_, enumhandside, p_187457_5_, stack); + } + } + else + { + boolean flag1 = enumhandside == EnumHandSide.RIGHT; + + if (player.isHandActive() && player.getItemInUseCount() > 0 && player.getActiveHand() == hand) + { + int j = flag1 ? 1 : -1; + + switch (stack.getItemUseAction()) + { + case NONE: + this.transformSideFirstPerson(enumhandside, p_187457_7_); + break; + case EAT: + case DRINK: + this.transformEatFirstPerson(p_187457_2_, enumhandside, stack); + this.transformSideFirstPerson(enumhandside, p_187457_7_); + break; + case BLOCK: + this.transformSideFirstPerson(enumhandside, p_187457_7_); + break; + case BOW: + this.transformSideFirstPerson(enumhandside, p_187457_7_); + GlStateManager.translate((float)j * -0.2785682F, 0.18344387F, 0.15731531F); + GlStateManager.rotate(-13.935F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate((float)j * 35.3F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)j * -9.785F, 0.0F, 0.0F, 1.0F); + float f5 = (float)stack.getMaxItemUseDuration() - ((float)this.mc.player.getItemInUseCount() - p_187457_2_ + 1.0F); + float f6 = f5 / 20.0F; + f6 = (f6 * f6 + f6 * 2.0F) / 3.0F; + + if (f6 > 1.0F) + { + f6 = 1.0F; + } + + if (f6 > 0.1F) + { + float f7 = MathHelper.sin((f5 - 0.1F) * 1.3F); + float f3 = f6 - 0.1F; + float f4 = f7 * f3; + GlStateManager.translate(f4 * 0.0F, f4 * 0.004F, f4 * 0.0F); + } + + GlStateManager.translate(f6 * 0.0F, f6 * 0.0F, f6 * 0.04F); + GlStateManager.scale(1.0F, 1.0F, 1.0F + f6 * 0.2F); + GlStateManager.rotate((float)j * 45.0F, 0.0F, -1.0F, 0.0F); + } + } + else + { + float f = -0.4F * MathHelper.sin(MathHelper.sqrt(p_187457_5_) * (float)Math.PI); + float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt(p_187457_5_) * ((float)Math.PI * 2F)); + float f2 = -0.2F * MathHelper.sin(p_187457_5_ * (float)Math.PI); + int i = flag1 ? 1 : -1; + GlStateManager.translate((float)i * f, f1, f2); + this.transformSideFirstPerson(enumhandside, p_187457_7_); + this.transformFirstPerson(enumhandside, p_187457_5_); + } + + this.renderItemSide(player, stack, flag1 ? ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND : ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, !flag1); + } + + GlStateManager.popMatrix(); + } + + /** + * Renders the overlays. + */ + public void renderOverlays(float partialTicks) + { + GlStateManager.disableAlpha(); + + if (this.mc.player.isEntityInsideOpaqueBlock()) + { + IBlockState iblockstate = this.mc.world.getBlockState(new BlockPos(this.mc.player)); + BlockPos overlayPos = new BlockPos(this.mc.player); + EntityPlayer entityplayer = this.mc.player; + + for (int i = 0; i < 8; ++i) + { + double d0 = entityplayer.posX + (double)(((float)((i >> 0) % 2) - 0.5F) * entityplayer.width * 0.8F); + double d1 = entityplayer.posY + (double)(((float)((i >> 1) % 2) - 0.5F) * 0.1F); + double d2 = entityplayer.posZ + (double)(((float)((i >> 2) % 2) - 0.5F) * entityplayer.width * 0.8F); + BlockPos blockpos = new BlockPos(d0, d1 + (double)entityplayer.getEyeHeight(), d2); + IBlockState iblockstate1 = this.mc.world.getBlockState(blockpos); + + if (iblockstate1.causesSuffocation()) + { + iblockstate = iblockstate1; + overlayPos = blockpos; + } + } + + if (iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE) + { + if (!net.minecraftforge.event.ForgeEventFactory.renderBlockOverlay(mc.player, partialTicks, net.minecraftforge.client.event.RenderBlockOverlayEvent.OverlayType.BLOCK, iblockstate, overlayPos)) + this.renderBlockInHand(this.mc.getBlockRendererDispatcher().getBlockModelShapes().getTexture(iblockstate)); + } + } + + if (!this.mc.player.isSpectator()) + { + if (this.mc.player.isInsideOfMaterial(Material.WATER)) + { + if (!net.minecraftforge.event.ForgeEventFactory.renderWaterOverlay(mc.player, partialTicks)) + this.renderWaterOverlayTexture(partialTicks); + } + + if (this.mc.player.isBurning()) + { + if (!net.minecraftforge.event.ForgeEventFactory.renderFireOverlay(mc.player, partialTicks)) + this.renderFireInFirstPerson(); + } + } + + GlStateManager.enableAlpha(); + } + + /** + * Render the block in the player's hand + */ + private void renderBlockInHand(TextureAtlasSprite sprite) + { + this.mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f = 0.1F; + GlStateManager.color(0.1F, 0.1F, 0.1F, 0.5F); + GlStateManager.pushMatrix(); + float f1 = -1.0F; + float f2 = 1.0F; + float f3 = -1.0F; + float f4 = 1.0F; + float f5 = -0.5F; + float f6 = sprite.getMinU(); + float f7 = sprite.getMaxU(); + float f8 = sprite.getMinV(); + float f9 = sprite.getMaxV(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-1.0D, -1.0D, -0.5D).tex((double)f7, (double)f9).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, -0.5D).tex((double)f6, (double)f9).endVertex(); + bufferbuilder.pos(1.0D, 1.0D, -0.5D).tex((double)f6, (double)f8).endVertex(); + bufferbuilder.pos(-1.0D, 1.0D, -0.5D).tex((double)f7, (double)f8).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + + /** + * Renders a texture that warps around based on the direction the player is looking. Texture needs to be bound + * before being called. Used for the water overlay. + */ + private void renderWaterOverlayTexture(float partialTicks) + { + this.mc.getTextureManager().bindTexture(RES_UNDERWATER_OVERLAY); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f = this.mc.player.getBrightness(); + GlStateManager.color(f, f, f, 0.5F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.pushMatrix(); + float f1 = 4.0F; + float f2 = -1.0F; + float f3 = 1.0F; + float f4 = -1.0F; + float f5 = 1.0F; + float f6 = -0.5F; + float f7 = -this.mc.player.rotationYaw / 64.0F; + float f8 = this.mc.player.rotationPitch / 64.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-1.0D, -1.0D, -0.5D).tex((double)(4.0F + f7), (double)(4.0F + f8)).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, -0.5D).tex((double)(0.0F + f7), (double)(4.0F + f8)).endVertex(); + bufferbuilder.pos(1.0D, 1.0D, -0.5D).tex((double)(0.0F + f7), (double)(0.0F + f8)).endVertex(); + bufferbuilder.pos(-1.0D, 1.0D, -0.5D).tex((double)(4.0F + f7), (double)(0.0F + f8)).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + } + + /** + * Renders the fire on the screen for first person mode. Arg: partialTickTime + */ + private void renderFireInFirstPerson() + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 0.9F); + GlStateManager.depthFunc(519); + GlStateManager.depthMask(false); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + float f = 1.0F; + + for (int i = 0; i < 2; ++i) + { + GlStateManager.pushMatrix(); + TextureAtlasSprite textureatlassprite = this.mc.getTextureMapBlocks().getAtlasSprite("minecraft:blocks/fire_layer_1"); + this.mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + float f1 = textureatlassprite.getMinU(); + float f2 = textureatlassprite.getMaxU(); + float f3 = textureatlassprite.getMinV(); + float f4 = textureatlassprite.getMaxV(); + float f5 = -0.5F; + float f6 = 0.5F; + float f7 = -0.5F; + float f8 = 0.5F; + float f9 = -0.5F; + GlStateManager.translate((float)(-(i * 2 - 1)) * 0.24F, -0.3F, 0.0F); + GlStateManager.rotate((float)(i * 2 - 1) * 10.0F, 0.0F, 1.0F, 0.0F); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-0.5D, -0.5D, -0.5D).tex((double)f2, (double)f4).endVertex(); + bufferbuilder.pos(0.5D, -0.5D, -0.5D).tex((double)f1, (double)f4).endVertex(); + bufferbuilder.pos(0.5D, 0.5D, -0.5D).tex((double)f1, (double)f3).endVertex(); + bufferbuilder.pos(-0.5D, 0.5D, -0.5D).tex((double)f2, (double)f3).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.depthMask(true); + GlStateManager.depthFunc(515); + } + + public void updateEquippedItem() + { + this.prevEquippedProgressMainHand = this.equippedProgressMainHand; + this.prevEquippedProgressOffHand = this.equippedProgressOffHand; + EntityPlayerSP entityplayersp = this.mc.player; + ItemStack itemstack = entityplayersp.getHeldItemMainhand(); + ItemStack itemstack1 = entityplayersp.getHeldItemOffhand(); + + if (entityplayersp.isRowingBoat()) + { + this.equippedProgressMainHand = MathHelper.clamp(this.equippedProgressMainHand - 0.4F, 0.0F, 1.0F); + this.equippedProgressOffHand = MathHelper.clamp(this.equippedProgressOffHand - 0.4F, 0.0F, 1.0F); + } + else + { + float f = entityplayersp.getCooledAttackStrength(1.0F); + + boolean requipM = net.minecraftforge.client.ForgeHooksClient.shouldCauseReequipAnimation(this.itemStackMainHand, itemstack, entityplayersp.inventory.currentItem); + boolean requipO = net.minecraftforge.client.ForgeHooksClient.shouldCauseReequipAnimation(this.itemStackOffHand, itemstack1, -1); + + if (!requipM && !Objects.equals(this.itemStackMainHand, itemstack)) + this.itemStackMainHand = itemstack; + if (!requipM && !Objects.equals(this.itemStackOffHand, itemstack1)) + this.itemStackOffHand = itemstack1; + + this.equippedProgressMainHand += MathHelper.clamp((!requipM ? f * f * f : 0.0F) - this.equippedProgressMainHand, -0.4F, 0.4F); + this.equippedProgressOffHand += MathHelper.clamp((float)(!requipO ? 1 : 0) - this.equippedProgressOffHand, -0.4F, 0.4F); + } + + if (this.equippedProgressMainHand < 0.1F) + { + this.itemStackMainHand = itemstack; + } + + if (this.equippedProgressOffHand < 0.1F) + { + this.itemStackOffHand = itemstack1; + } + } + + public void resetEquippedProgress(EnumHand hand) + { + if (hand == EnumHand.MAIN_HAND) + { + this.equippedProgressMainHand = 0.0F; + } + else + { + this.equippedProgressOffHand = 0.0F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Matrix4f.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Matrix4f.java new file mode 100644 index 0000000..a191cfb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Matrix4f.java @@ -0,0 +1,48 @@ +package net.minecraft.client.renderer; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Matrix4f extends org.lwjgl.util.vector.Matrix4f +{ + public Matrix4f(float[] matrix) + { + this.m00 = matrix[0]; + this.m01 = matrix[1]; + this.m02 = matrix[2]; + this.m03 = matrix[3]; + this.m10 = matrix[4]; + this.m11 = matrix[5]; + this.m12 = matrix[6]; + this.m13 = matrix[7]; + this.m20 = matrix[8]; + this.m21 = matrix[9]; + this.m22 = matrix[10]; + this.m23 = matrix[11]; + this.m30 = matrix[12]; + this.m31 = matrix[13]; + this.m32 = matrix[14]; + this.m33 = matrix[15]; + } + + public Matrix4f() + { + this.m00 = 0.0F; + this.m01 = 0.0F; + this.m02 = 0.0F; + this.m03 = 0.0F; + this.m10 = 0.0F; + this.m11 = 0.0F; + this.m12 = 0.0F; + this.m13 = 0.0F; + this.m20 = 0.0F; + this.m21 = 0.0F; + this.m22 = 0.0F; + this.m23 = 0.0F; + this.m30 = 0.0F; + this.m31 = 0.0F; + this.m32 = 0.0F; + this.m33 = 0.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/OpenGlHelper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/OpenGlHelper.java new file mode 100644 index 0000000..ca704c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/OpenGlHelper.java @@ -0,0 +1,1013 @@ +package net.minecraft.client.renderer; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.Locale; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.Util; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.Sys; +import org.lwjgl.opengl.ARBFramebufferObject; +import org.lwjgl.opengl.ARBMultitexture; +import org.lwjgl.opengl.ARBShaderObjects; +import org.lwjgl.opengl.ARBVertexBufferObject; +import org.lwjgl.opengl.ARBVertexShader; +import org.lwjgl.opengl.ContextCapabilities; +import org.lwjgl.opengl.EXTBlendFuncSeparate; +import org.lwjgl.opengl.EXTFramebufferObject; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL13; +import org.lwjgl.opengl.GL14; +import org.lwjgl.opengl.GL15; +import org.lwjgl.opengl.GL20; +import org.lwjgl.opengl.GL30; +import org.lwjgl.opengl.GLContext; +import oshi.SystemInfo; +import oshi.hardware.Processor; + +@SideOnly(Side.CLIENT) +public class OpenGlHelper +{ + /** The logger used by {@link OpenGlHelper} in the event of an error */ + private static final Logger LOGGER = LogManager.getLogger(); + public static boolean nvidia; + public static boolean ati; + public static int GL_FRAMEBUFFER; + public static int GL_RENDERBUFFER; + public static int GL_COLOR_ATTACHMENT0; + public static int GL_DEPTH_ATTACHMENT; + public static int GL_FRAMEBUFFER_COMPLETE; + public static int GL_FB_INCOMPLETE_ATTACHMENT; + public static int GL_FB_INCOMPLETE_MISS_ATTACH; + public static int GL_FB_INCOMPLETE_DRAW_BUFFER; + public static int GL_FB_INCOMPLETE_READ_BUFFER; + private static OpenGlHelper.FboMode framebufferType; + public static boolean framebufferSupported; + private static boolean shadersAvailable; + private static boolean arbShaders; + public static int GL_LINK_STATUS; + public static int GL_COMPILE_STATUS; + public static int GL_VERTEX_SHADER; + public static int GL_FRAGMENT_SHADER; + private static boolean arbMultitexture; + /** + * An OpenGL constant corresponding to GL_TEXTURE0, used when setting data pertaining to auxiliary OpenGL texture + * units. + */ + public static int defaultTexUnit; + /** + * An OpenGL constant corresponding to GL_TEXTURE1, used when setting data pertaining to auxiliary OpenGL texture + * units. + */ + public static int lightmapTexUnit; + public static int GL_TEXTURE2; + private static boolean arbTextureEnvCombine; + public static int GL_COMBINE; + public static int GL_INTERPOLATE; + public static int GL_PRIMARY_COLOR; + public static int GL_CONSTANT; + public static int GL_PREVIOUS; + public static int GL_COMBINE_RGB; + public static int GL_SOURCE0_RGB; + public static int GL_SOURCE1_RGB; + public static int GL_SOURCE2_RGB; + public static int GL_OPERAND0_RGB; + public static int GL_OPERAND1_RGB; + public static int GL_OPERAND2_RGB; + public static int GL_COMBINE_ALPHA; + public static int GL_SOURCE0_ALPHA; + public static int GL_SOURCE1_ALPHA; + public static int GL_SOURCE2_ALPHA; + public static int GL_OPERAND0_ALPHA; + public static int GL_OPERAND1_ALPHA; + public static int GL_OPERAND2_ALPHA; + private static boolean openGL14; + public static boolean extBlendFuncSeparate; + public static boolean openGL21; + public static boolean shadersSupported; + private static String logText = ""; + private static String cpu; + public static boolean vboSupported; + public static boolean vboSupportedAti; + private static boolean arbVbo; + public static int GL_ARRAY_BUFFER; + public static int GL_STATIC_DRAW; + + /* Stores the last values sent into setLightmapTextureCoords */ + public static float lastBrightnessX = 0.0f; + public static float lastBrightnessY = 0.0f; + + /** + * Initializes the texture constants to be used when rendering lightmap values + */ + public static void initializeTextures() + { + ContextCapabilities contextcapabilities = GLContext.getCapabilities(); + arbMultitexture = contextcapabilities.GL_ARB_multitexture && !contextcapabilities.OpenGL13; + arbTextureEnvCombine = contextcapabilities.GL_ARB_texture_env_combine && !contextcapabilities.OpenGL13; + + if (arbMultitexture) + { + logText = logText + "Using ARB_multitexture.\n"; + defaultTexUnit = 33984; + lightmapTexUnit = 33985; + GL_TEXTURE2 = 33986; + } + else + { + logText = logText + "Using GL 1.3 multitexturing.\n"; + defaultTexUnit = 33984; + lightmapTexUnit = 33985; + GL_TEXTURE2 = 33986; + } + + if (arbTextureEnvCombine) + { + logText = logText + "Using ARB_texture_env_combine.\n"; + GL_COMBINE = 34160; + GL_INTERPOLATE = 34165; + GL_PRIMARY_COLOR = 34167; + GL_CONSTANT = 34166; + GL_PREVIOUS = 34168; + GL_COMBINE_RGB = 34161; + GL_SOURCE0_RGB = 34176; + GL_SOURCE1_RGB = 34177; + GL_SOURCE2_RGB = 34178; + GL_OPERAND0_RGB = 34192; + GL_OPERAND1_RGB = 34193; + GL_OPERAND2_RGB = 34194; + GL_COMBINE_ALPHA = 34162; + GL_SOURCE0_ALPHA = 34184; + GL_SOURCE1_ALPHA = 34185; + GL_SOURCE2_ALPHA = 34186; + GL_OPERAND0_ALPHA = 34200; + GL_OPERAND1_ALPHA = 34201; + GL_OPERAND2_ALPHA = 34202; + } + else + { + logText = logText + "Using GL 1.3 texture combiners.\n"; + GL_COMBINE = 34160; + GL_INTERPOLATE = 34165; + GL_PRIMARY_COLOR = 34167; + GL_CONSTANT = 34166; + GL_PREVIOUS = 34168; + GL_COMBINE_RGB = 34161; + GL_SOURCE0_RGB = 34176; + GL_SOURCE1_RGB = 34177; + GL_SOURCE2_RGB = 34178; + GL_OPERAND0_RGB = 34192; + GL_OPERAND1_RGB = 34193; + GL_OPERAND2_RGB = 34194; + GL_COMBINE_ALPHA = 34162; + GL_SOURCE0_ALPHA = 34184; + GL_SOURCE1_ALPHA = 34185; + GL_SOURCE2_ALPHA = 34186; + GL_OPERAND0_ALPHA = 34200; + GL_OPERAND1_ALPHA = 34201; + GL_OPERAND2_ALPHA = 34202; + } + + extBlendFuncSeparate = contextcapabilities.GL_EXT_blend_func_separate && !contextcapabilities.OpenGL14; + openGL14 = contextcapabilities.OpenGL14 || contextcapabilities.GL_EXT_blend_func_separate; + framebufferSupported = openGL14 && (contextcapabilities.GL_ARB_framebuffer_object || contextcapabilities.GL_EXT_framebuffer_object || contextcapabilities.OpenGL30); + + if (framebufferSupported) + { + logText = logText + "Using framebuffer objects because "; + + if (contextcapabilities.OpenGL30) + { + logText = logText + "OpenGL 3.0 is supported and separate blending is supported.\n"; + framebufferType = OpenGlHelper.FboMode.BASE; + GL_FRAMEBUFFER = 36160; + GL_RENDERBUFFER = 36161; + GL_COLOR_ATTACHMENT0 = 36064; + GL_DEPTH_ATTACHMENT = 36096; + GL_FRAMEBUFFER_COMPLETE = 36053; + GL_FB_INCOMPLETE_ATTACHMENT = 36054; + GL_FB_INCOMPLETE_MISS_ATTACH = 36055; + GL_FB_INCOMPLETE_DRAW_BUFFER = 36059; + GL_FB_INCOMPLETE_READ_BUFFER = 36060; + } + else if (contextcapabilities.GL_ARB_framebuffer_object) + { + logText = logText + "ARB_framebuffer_object is supported and separate blending is supported.\n"; + framebufferType = OpenGlHelper.FboMode.ARB; + GL_FRAMEBUFFER = 36160; + GL_RENDERBUFFER = 36161; + GL_COLOR_ATTACHMENT0 = 36064; + GL_DEPTH_ATTACHMENT = 36096; + GL_FRAMEBUFFER_COMPLETE = 36053; + GL_FB_INCOMPLETE_MISS_ATTACH = 36055; + GL_FB_INCOMPLETE_ATTACHMENT = 36054; + GL_FB_INCOMPLETE_DRAW_BUFFER = 36059; + GL_FB_INCOMPLETE_READ_BUFFER = 36060; + } + else if (contextcapabilities.GL_EXT_framebuffer_object) + { + logText = logText + "EXT_framebuffer_object is supported.\n"; + framebufferType = OpenGlHelper.FboMode.EXT; + GL_FRAMEBUFFER = 36160; + GL_RENDERBUFFER = 36161; + GL_COLOR_ATTACHMENT0 = 36064; + GL_DEPTH_ATTACHMENT = 36096; + GL_FRAMEBUFFER_COMPLETE = 36053; + GL_FB_INCOMPLETE_MISS_ATTACH = 36055; + GL_FB_INCOMPLETE_ATTACHMENT = 36054; + GL_FB_INCOMPLETE_DRAW_BUFFER = 36059; + GL_FB_INCOMPLETE_READ_BUFFER = 36060; + } + } + else + { + logText = logText + "Not using framebuffer objects because "; + logText = logText + "OpenGL 1.4 is " + (contextcapabilities.OpenGL14 ? "" : "not ") + "supported, "; + logText = logText + "EXT_blend_func_separate is " + (contextcapabilities.GL_EXT_blend_func_separate ? "" : "not ") + "supported, "; + logText = logText + "OpenGL 3.0 is " + (contextcapabilities.OpenGL30 ? "" : "not ") + "supported, "; + logText = logText + "ARB_framebuffer_object is " + (contextcapabilities.GL_ARB_framebuffer_object ? "" : "not ") + "supported, and "; + logText = logText + "EXT_framebuffer_object is " + (contextcapabilities.GL_EXT_framebuffer_object ? "" : "not ") + "supported.\n"; + } + + openGL21 = contextcapabilities.OpenGL21; + shadersAvailable = openGL21 || contextcapabilities.GL_ARB_vertex_shader && contextcapabilities.GL_ARB_fragment_shader && contextcapabilities.GL_ARB_shader_objects; + logText = logText + "Shaders are " + (shadersAvailable ? "" : "not ") + "available because "; + + if (shadersAvailable) + { + if (contextcapabilities.OpenGL21) + { + logText = logText + "OpenGL 2.1 is supported.\n"; + arbShaders = false; + GL_LINK_STATUS = 35714; + GL_COMPILE_STATUS = 35713; + GL_VERTEX_SHADER = 35633; + GL_FRAGMENT_SHADER = 35632; + } + else + { + logText = logText + "ARB_shader_objects, ARB_vertex_shader, and ARB_fragment_shader are supported.\n"; + arbShaders = true; + GL_LINK_STATUS = 35714; + GL_COMPILE_STATUS = 35713; + GL_VERTEX_SHADER = 35633; + GL_FRAGMENT_SHADER = 35632; + } + } + else + { + logText = logText + "OpenGL 2.1 is " + (contextcapabilities.OpenGL21 ? "" : "not ") + "supported, "; + logText = logText + "ARB_shader_objects is " + (contextcapabilities.GL_ARB_shader_objects ? "" : "not ") + "supported, "; + logText = logText + "ARB_vertex_shader is " + (contextcapabilities.GL_ARB_vertex_shader ? "" : "not ") + "supported, and "; + logText = logText + "ARB_fragment_shader is " + (contextcapabilities.GL_ARB_fragment_shader ? "" : "not ") + "supported.\n"; + } + + shadersSupported = framebufferSupported && shadersAvailable; + String s = GL11.glGetString(GL11.GL_VENDOR).toLowerCase(Locale.ROOT); + nvidia = s.contains("nvidia"); + arbVbo = !contextcapabilities.OpenGL15 && contextcapabilities.GL_ARB_vertex_buffer_object; + vboSupported = contextcapabilities.OpenGL15 || arbVbo; + logText = logText + "VBOs are " + (vboSupported ? "" : "not ") + "available because "; + + if (vboSupported) + { + if (arbVbo) + { + logText = logText + "ARB_vertex_buffer_object is supported.\n"; + GL_STATIC_DRAW = 35044; + GL_ARRAY_BUFFER = 34962; + } + else + { + logText = logText + "OpenGL 1.5 is supported.\n"; + GL_STATIC_DRAW = 35044; + GL_ARRAY_BUFFER = 34962; + } + } + + ati = s.contains("ati"); + + if (ati) + { + if (vboSupported) + { + vboSupportedAti = true; + } + else + { + GameSettings.Options.RENDER_DISTANCE.setValueMax(16.0F); + } + } + + try + { + Processor[] aprocessor = (new SystemInfo()).getHardware().getProcessors(); + cpu = String.format("%dx %s", aprocessor.length, aprocessor[0]).replaceAll("\\s+", " "); + } + catch (Throwable var3) + { + ; + } + } + + public static boolean areShadersSupported() + { + return shadersSupported; + } + + public static String getLogText() + { + return logText; + } + + public static int glGetProgrami(int program, int pname) + { + return arbShaders ? ARBShaderObjects.glGetObjectParameteriARB(program, pname) : GL20.glGetProgrami(program, pname); + } + + public static void glAttachShader(int program, int shaderIn) + { + if (arbShaders) + { + ARBShaderObjects.glAttachObjectARB(program, shaderIn); + } + else + { + GL20.glAttachShader(program, shaderIn); + } + } + + public static void glDeleteShader(int shaderIn) + { + if (arbShaders) + { + ARBShaderObjects.glDeleteObjectARB(shaderIn); + } + else + { + GL20.glDeleteShader(shaderIn); + } + } + + /** + * creates a shader with the given mode and returns the GL id. params: mode + */ + public static int glCreateShader(int type) + { + return arbShaders ? ARBShaderObjects.glCreateShaderObjectARB(type) : GL20.glCreateShader(type); + } + + public static void glShaderSource(int shaderIn, ByteBuffer string) + { + if (arbShaders) + { + ARBShaderObjects.glShaderSourceARB(shaderIn, string); + } + else + { + GL20.glShaderSource(shaderIn, string); + } + } + + public static void glCompileShader(int shaderIn) + { + if (arbShaders) + { + ARBShaderObjects.glCompileShaderARB(shaderIn); + } + else + { + GL20.glCompileShader(shaderIn); + } + } + + public static int glGetShaderi(int shaderIn, int pname) + { + return arbShaders ? ARBShaderObjects.glGetObjectParameteriARB(shaderIn, pname) : GL20.glGetShaderi(shaderIn, pname); + } + + public static String glGetShaderInfoLog(int shaderIn, int maxLength) + { + return arbShaders ? ARBShaderObjects.glGetInfoLogARB(shaderIn, maxLength) : GL20.glGetShaderInfoLog(shaderIn, maxLength); + } + + public static String glGetProgramInfoLog(int program, int maxLength) + { + return arbShaders ? ARBShaderObjects.glGetInfoLogARB(program, maxLength) : GL20.glGetProgramInfoLog(program, maxLength); + } + + public static void glUseProgram(int program) + { + if (arbShaders) + { + ARBShaderObjects.glUseProgramObjectARB(program); + } + else + { + GL20.glUseProgram(program); + } + } + + public static int glCreateProgram() + { + return arbShaders ? ARBShaderObjects.glCreateProgramObjectARB() : GL20.glCreateProgram(); + } + + public static void glDeleteProgram(int program) + { + if (arbShaders) + { + ARBShaderObjects.glDeleteObjectARB(program); + } + else + { + GL20.glDeleteProgram(program); + } + } + + public static void glLinkProgram(int program) + { + if (arbShaders) + { + ARBShaderObjects.glLinkProgramARB(program); + } + else + { + GL20.glLinkProgram(program); + } + } + + public static int glGetUniformLocation(int programObj, CharSequence name) + { + return arbShaders ? ARBShaderObjects.glGetUniformLocationARB(programObj, name) : GL20.glGetUniformLocation(programObj, name); + } + + public static void glUniform1(int location, IntBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform1ARB(location, values); + } + else + { + GL20.glUniform1(location, values); + } + } + + public static void glUniform1i(int location, int v0) + { + if (arbShaders) + { + ARBShaderObjects.glUniform1iARB(location, v0); + } + else + { + GL20.glUniform1i(location, v0); + } + } + + public static void glUniform1(int location, FloatBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform1ARB(location, values); + } + else + { + GL20.glUniform1(location, values); + } + } + + public static void glUniform2(int location, IntBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform2ARB(location, values); + } + else + { + GL20.glUniform2(location, values); + } + } + + public static void glUniform2(int location, FloatBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform2ARB(location, values); + } + else + { + GL20.glUniform2(location, values); + } + } + + public static void glUniform3(int location, IntBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform3ARB(location, values); + } + else + { + GL20.glUniform3(location, values); + } + } + + public static void glUniform3(int location, FloatBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform3ARB(location, values); + } + else + { + GL20.glUniform3(location, values); + } + } + + public static void glUniform4(int location, IntBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform4ARB(location, values); + } + else + { + GL20.glUniform4(location, values); + } + } + + public static void glUniform4(int location, FloatBuffer values) + { + if (arbShaders) + { + ARBShaderObjects.glUniform4ARB(location, values); + } + else + { + GL20.glUniform4(location, values); + } + } + + public static void glUniformMatrix2(int location, boolean transpose, FloatBuffer matrices) + { + if (arbShaders) + { + ARBShaderObjects.glUniformMatrix2ARB(location, transpose, matrices); + } + else + { + GL20.glUniformMatrix2(location, transpose, matrices); + } + } + + public static void glUniformMatrix3(int location, boolean transpose, FloatBuffer matrices) + { + if (arbShaders) + { + ARBShaderObjects.glUniformMatrix3ARB(location, transpose, matrices); + } + else + { + GL20.glUniformMatrix3(location, transpose, matrices); + } + } + + public static void glUniformMatrix4(int location, boolean transpose, FloatBuffer matrices) + { + if (arbShaders) + { + ARBShaderObjects.glUniformMatrix4ARB(location, transpose, matrices); + } + else + { + GL20.glUniformMatrix4(location, transpose, matrices); + } + } + + public static int glGetAttribLocation(int program, CharSequence name) + { + return arbShaders ? ARBVertexShader.glGetAttribLocationARB(program, name) : GL20.glGetAttribLocation(program, name); + } + + public static int glGenBuffers() + { + return arbVbo ? ARBVertexBufferObject.glGenBuffersARB() : GL15.glGenBuffers(); + } + + public static void glBindBuffer(int target, int buffer) + { + if (arbVbo) + { + ARBVertexBufferObject.glBindBufferARB(target, buffer); + } + else + { + GL15.glBindBuffer(target, buffer); + } + } + + public static void glBufferData(int target, ByteBuffer data, int usage) + { + if (arbVbo) + { + ARBVertexBufferObject.glBufferDataARB(target, data, usage); + } + else + { + GL15.glBufferData(target, data, usage); + } + } + + public static void glDeleteBuffers(int buffer) + { + if (arbVbo) + { + ARBVertexBufferObject.glDeleteBuffersARB(buffer); + } + else + { + GL15.glDeleteBuffers(buffer); + } + } + + public static boolean useVbo() + { + return vboSupported && Minecraft.getMinecraft().gameSettings.useVbo; + } + + public static void glBindFramebuffer(int target, int framebufferIn) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glBindFramebuffer(target, framebufferIn); + break; + case ARB: + ARBFramebufferObject.glBindFramebuffer(target, framebufferIn); + break; + case EXT: + EXTFramebufferObject.glBindFramebufferEXT(target, framebufferIn); + } + } + } + + public static void glBindRenderbuffer(int target, int renderbuffer) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glBindRenderbuffer(target, renderbuffer); + break; + case ARB: + ARBFramebufferObject.glBindRenderbuffer(target, renderbuffer); + break; + case EXT: + EXTFramebufferObject.glBindRenderbufferEXT(target, renderbuffer); + } + } + } + + public static void glDeleteRenderbuffers(int renderbuffer) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glDeleteRenderbuffers(renderbuffer); + break; + case ARB: + ARBFramebufferObject.glDeleteRenderbuffers(renderbuffer); + break; + case EXT: + EXTFramebufferObject.glDeleteRenderbuffersEXT(renderbuffer); + } + } + } + + public static void glDeleteFramebuffers(int framebufferIn) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glDeleteFramebuffers(framebufferIn); + break; + case ARB: + ARBFramebufferObject.glDeleteFramebuffers(framebufferIn); + break; + case EXT: + EXTFramebufferObject.glDeleteFramebuffersEXT(framebufferIn); + } + } + } + + /** + * Calls the appropriate glGenFramebuffers method and returns the newly created fbo, or returns -1 if not supported. + */ + public static int glGenFramebuffers() + { + if (!framebufferSupported) + { + return -1; + } + else + { + switch (framebufferType) + { + case BASE: + return GL30.glGenFramebuffers(); + case ARB: + return ARBFramebufferObject.glGenFramebuffers(); + case EXT: + return EXTFramebufferObject.glGenFramebuffersEXT(); + default: + return -1; + } + } + } + + public static int glGenRenderbuffers() + { + if (!framebufferSupported) + { + return -1; + } + else + { + switch (framebufferType) + { + case BASE: + return GL30.glGenRenderbuffers(); + case ARB: + return ARBFramebufferObject.glGenRenderbuffers(); + case EXT: + return EXTFramebufferObject.glGenRenderbuffersEXT(); + default: + return -1; + } + } + } + + public static void glRenderbufferStorage(int target, int internalFormat, int width, int height) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glRenderbufferStorage(target, internalFormat, width, height); + break; + case ARB: + ARBFramebufferObject.glRenderbufferStorage(target, internalFormat, width, height); + break; + case EXT: + EXTFramebufferObject.glRenderbufferStorageEXT(target, internalFormat, width, height); + } + } + } + + public static void glFramebufferRenderbuffer(int target, int attachment, int renderBufferTarget, int renderBuffer) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glFramebufferRenderbuffer(target, attachment, renderBufferTarget, renderBuffer); + break; + case ARB: + ARBFramebufferObject.glFramebufferRenderbuffer(target, attachment, renderBufferTarget, renderBuffer); + break; + case EXT: + EXTFramebufferObject.glFramebufferRenderbufferEXT(target, attachment, renderBufferTarget, renderBuffer); + } + } + } + + public static int glCheckFramebufferStatus(int target) + { + if (!framebufferSupported) + { + return -1; + } + else + { + switch (framebufferType) + { + case BASE: + return GL30.glCheckFramebufferStatus(target); + case ARB: + return ARBFramebufferObject.glCheckFramebufferStatus(target); + case EXT: + return EXTFramebufferObject.glCheckFramebufferStatusEXT(target); + default: + return -1; + } + } + } + + public static void glFramebufferTexture2D(int target, int attachment, int textarget, int texture, int level) + { + if (framebufferSupported) + { + switch (framebufferType) + { + case BASE: + GL30.glFramebufferTexture2D(target, attachment, textarget, texture, level); + break; + case ARB: + ARBFramebufferObject.glFramebufferTexture2D(target, attachment, textarget, texture, level); + break; + case EXT: + EXTFramebufferObject.glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); + } + } + } + + /** + * Sets the current lightmap texture to the specified OpenGL constant + */ + public static void setActiveTexture(int texture) + { + if (arbMultitexture) + { + ARBMultitexture.glActiveTextureARB(texture); + } + else + { + GL13.glActiveTexture(texture); + } + } + + /** + * Sets the current lightmap texture to the specified OpenGL constant + */ + public static void setClientActiveTexture(int texture) + { + if (arbMultitexture) + { + ARBMultitexture.glClientActiveTextureARB(texture); + } + else + { + GL13.glClientActiveTexture(texture); + } + } + + /** + * Sets the current coordinates of the given lightmap texture + */ + public static void setLightmapTextureCoords(int target, float p_77475_1_, float t) + { + if (arbMultitexture) + { + ARBMultitexture.glMultiTexCoord2fARB(target, p_77475_1_, t); + } + else + { + GL13.glMultiTexCoord2f(target, p_77475_1_, t); + } + + if (target == lightmapTexUnit) + { + lastBrightnessX = p_77475_1_; + lastBrightnessY = t; + } + } + + public static void glBlendFunc(int sFactorRGB, int dFactorRGB, int sfactorAlpha, int dfactorAlpha) + { + if (openGL14) + { + if (extBlendFuncSeparate) + { + EXTBlendFuncSeparate.glBlendFuncSeparateEXT(sFactorRGB, dFactorRGB, sfactorAlpha, dfactorAlpha); + } + else + { + GL14.glBlendFuncSeparate(sFactorRGB, dFactorRGB, sfactorAlpha, dfactorAlpha); + } + } + else + { + GL11.glBlendFunc(sFactorRGB, dFactorRGB); + } + } + + public static boolean isFramebufferEnabled() + { + return framebufferSupported && Minecraft.getMinecraft().gameSettings.fboEnable; + } + + public static String getCpu() + { + return cpu == null ? "" : cpu; + } + + public static void renderDirections(int p_188785_0_) + { + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GL11.glLineWidth(4.0F); + bufferbuilder.begin(1, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)p_188785_0_, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, (double)p_188785_0_, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)p_188785_0_).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + GL11.glLineWidth(2.0F); + bufferbuilder.begin(1, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(255, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)p_188785_0_, 0.0D, 0.0D).color(255, 0, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(0, 255, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, (double)p_188785_0_, 0.0D).color(0, 255, 0, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(127, 127, 255, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, (double)p_188785_0_).color(127, 127, 255, 255).endVertex(); + tessellator.draw(); + GL11.glLineWidth(1.0F); + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + } + + public static void openFile(File fileIn) + { + String s = fileIn.getAbsolutePath(); + + if (Util.getOSType() == Util.EnumOS.OSX) + { + try + { + LOGGER.info(s); + Runtime.getRuntime().exec(new String[] {"/usr/bin/open", s}); + return; + } + catch (IOException ioexception1) + { + LOGGER.error("Couldn't open file", (Throwable)ioexception1); + } + } + else if (Util.getOSType() == Util.EnumOS.WINDOWS) + { + String s1 = String.format("cmd.exe /C start \"Open file\" \"%s\"", s); + + try + { + Runtime.getRuntime().exec(s1); + return; + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't open file", (Throwable)ioexception); + } + } + + boolean flag = false; + + try + { + Class oclass = Class.forName("java.awt.Desktop"); + Object object = oclass.getMethod("getDesktop").invoke((Object)null); + oclass.getMethod("browse", URI.class).invoke(object, fileIn.toURI()); + } + catch (Throwable throwable) + { + LOGGER.error("Couldn't open link", throwable); + flag = true; + } + + if (flag) + { + LOGGER.info("Opening via system class!"); + Sys.openURL("file://" + s); + } + } + + @SideOnly(Side.CLIENT) + static enum FboMode + { + BASE, + ARB, + EXT; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RegionRenderCacheBuilder.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RegionRenderCacheBuilder.java new file mode 100644 index 0000000..de0b14b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RegionRenderCacheBuilder.java @@ -0,0 +1,29 @@ +package net.minecraft.client.renderer; + +import net.minecraft.util.BlockRenderLayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RegionRenderCacheBuilder +{ + private final BufferBuilder[] worldRenderers = new BufferBuilder[BlockRenderLayer.values().length]; + + public RegionRenderCacheBuilder() + { + this.worldRenderers[BlockRenderLayer.SOLID.ordinal()] = new BufferBuilder(2097152); + this.worldRenderers[BlockRenderLayer.CUTOUT.ordinal()] = new BufferBuilder(131072); + this.worldRenderers[BlockRenderLayer.CUTOUT_MIPPED.ordinal()] = new BufferBuilder(131072); + this.worldRenderers[BlockRenderLayer.TRANSLUCENT.ordinal()] = new BufferBuilder(262144); + } + + public BufferBuilder getWorldRendererByLayer(BlockRenderLayer layer) + { + return this.worldRenderers[layer.ordinal()]; + } + + public BufferBuilder getWorldRendererByLayerId(int id) + { + return this.worldRenderers[id]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderGlobal.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderGlobal.java new file mode 100644 index 0000000..ef98f03 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderGlobal.java @@ -0,0 +1,2644 @@ +package net.minecraft.client.renderer; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; +import com.google.common.collect.Sets; +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.block.BlockEnderChest; +import net.minecraft.block.BlockSign; +import net.minecraft.block.BlockSkull; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.ISound; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher; +import net.minecraft.client.renderer.chunk.CompiledChunk; +import net.minecraft.client.renderer.chunk.IRenderChunkFactory; +import net.minecraft.client.renderer.chunk.ListChunkFactory; +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.renderer.chunk.VboChunkFactory; +import net.minecraft.client.renderer.chunk.VisGraph; +import net.minecraft.client.renderer.culling.ClippingHelper; +import net.minecraft.client.renderer.culling.ClippingHelperImpl; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.client.shader.ShaderGroup; +import net.minecraft.client.shader.ShaderLinkHelper; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemRecord; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.ClassInheritanceMultiMap; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IWorldEventListener; +import net.minecraft.world.World; +import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.util.vector.Vector3f; +import org.lwjgl.util.vector.Vector4f; + +@SideOnly(Side.CLIENT) +public class RenderGlobal implements IWorldEventListener, IResourceManagerReloadListener +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ResourceLocation MOON_PHASES_TEXTURES = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation SUN_TEXTURES = new ResourceLocation("textures/environment/sun.png"); + private static final ResourceLocation CLOUDS_TEXTURES = new ResourceLocation("textures/environment/clouds.png"); + private static final ResourceLocation END_SKY_TEXTURES = new ResourceLocation("textures/environment/end_sky.png"); + private static final ResourceLocation FORCEFIELD_TEXTURES = new ResourceLocation("textures/misc/forcefield.png"); + /** A reference to the Minecraft object. */ + private final Minecraft mc; + /** The RenderEngine instance used by RenderGlobal */ + private final TextureManager renderEngine; + private final RenderManager renderManager; + private WorldClient world; + private Set chunksToUpdate = Sets.newLinkedHashSet(); + /** List of OpenGL lists for the current render pass */ + private List renderInfos = Lists.newArrayListWithCapacity(69696); + /** Global tile entities, always rendered (beacon, end teleporter, structures) */ + private final Set setTileEntities = Sets.newHashSet(); + private ViewFrustum viewFrustum; + /** The star GL Call list */ + private int starGLCallList = -1; + /** OpenGL sky list */ + private int glSkyList = -1; + /** OpenGL sky list 2 */ + private int glSkyList2 = -1; + private final VertexFormat vertexBufferFormat; + private VertexBuffer starVBO; + private VertexBuffer skyVBO; + private VertexBuffer sky2VBO; + /** counts the cloud render updates. Used with mod to stagger some updates */ + private int cloudTickCounter; + /** + * Stores blocks currently being broken. Key is entity ID of the thing doing the breaking. Value is a + * DestroyBlockProgress + */ + private final Map damagedBlocks = Maps.newHashMap(); + /** Currently playing sounds. Type: HashMap */ + private final Map mapSoundPositions = Maps.newHashMap(); + private final TextureAtlasSprite[] destroyBlockIcons = new TextureAtlasSprite[10]; + private Framebuffer entityOutlineFramebuffer; + /** Stores the shader group for the entity_outline shader */ + private ShaderGroup entityOutlineShader; + private double frustumUpdatePosX = Double.MIN_VALUE; + private double frustumUpdatePosY = Double.MIN_VALUE; + private double frustumUpdatePosZ = Double.MIN_VALUE; + private int frustumUpdatePosChunkX = Integer.MIN_VALUE; + private int frustumUpdatePosChunkY = Integer.MIN_VALUE; + private int frustumUpdatePosChunkZ = Integer.MIN_VALUE; + private double lastViewEntityX = Double.MIN_VALUE; + private double lastViewEntityY = Double.MIN_VALUE; + private double lastViewEntityZ = Double.MIN_VALUE; + private double lastViewEntityPitch = Double.MIN_VALUE; + private double lastViewEntityYaw = Double.MIN_VALUE; + private ChunkRenderDispatcher renderDispatcher; + private ChunkRenderContainer renderContainer; + private int renderDistanceChunks = -1; + /** Render entities startup counter (init value=2) */ + private int renderEntitiesStartupCounter = 2; + /** Count entities total */ + private int countEntitiesTotal; + /** Count entities rendered */ + private int countEntitiesRendered; + /** Count entities hidden */ + private int countEntitiesHidden; + private boolean debugFixTerrainFrustum; + private ClippingHelper debugFixedClippingHelper; + private final Vector4f[] debugTerrainMatrix = new Vector4f[8]; + private final Vector3d debugTerrainFrustumPosition = new Vector3d(); + private boolean vboEnabled; + IRenderChunkFactory renderChunkFactory; + private double prevRenderSortX; + private double prevRenderSortY; + private double prevRenderSortZ; + private boolean displayListEntitiesDirty = true; + private boolean entityOutlinesRendered; + private final Set setLightUpdates = Sets.newHashSet(); + + public RenderGlobal(Minecraft mcIn) + { + this.mc = mcIn; + this.renderManager = mcIn.getRenderManager(); + this.renderEngine = mcIn.getTextureManager(); + this.renderEngine.bindTexture(FORCEFIELD_TEXTURES); + GlStateManager.glTexParameteri(3553, 10242, 10497); + GlStateManager.glTexParameteri(3553, 10243, 10497); + GlStateManager.bindTexture(0); + this.updateDestroyBlockIcons(); + this.vboEnabled = OpenGlHelper.useVbo(); + + if (this.vboEnabled) + { + this.renderContainer = new VboRenderList(); + this.renderChunkFactory = new VboChunkFactory(); + } + else + { + this.renderContainer = new RenderList(); + this.renderChunkFactory = new ListChunkFactory(); + } + + this.vertexBufferFormat = new VertexFormat(); + this.vertexBufferFormat.addElement(new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.POSITION, 3)); + this.generateStars(); + this.generateSky(); + this.generateSky2(); + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.updateDestroyBlockIcons(); + } + + private void updateDestroyBlockIcons() + { + TextureMap texturemap = this.mc.getTextureMapBlocks(); + + for (int i = 0; i < this.destroyBlockIcons.length; ++i) + { + this.destroyBlockIcons[i] = texturemap.getAtlasSprite("minecraft:blocks/destroy_stage_" + i); + } + } + + /** + * Creates the entity outline shader to be stored in RenderGlobal.entityOutlineShader + */ + public void makeEntityOutlineShader() + { + if (OpenGlHelper.shadersSupported) + { + if (ShaderLinkHelper.getStaticShaderLinkHelper() == null) + { + ShaderLinkHelper.setNewStaticShaderLinkHelper(); + } + + ResourceLocation resourcelocation = new ResourceLocation("shaders/post/entity_outline.json"); + + try + { + this.entityOutlineShader = new ShaderGroup(this.mc.getTextureManager(), this.mc.getResourceManager(), this.mc.getFramebuffer(), resourcelocation); + this.entityOutlineShader.createBindFramebuffers(this.mc.displayWidth, this.mc.displayHeight); + this.entityOutlineFramebuffer = this.entityOutlineShader.getFramebufferRaw("final"); + } + catch (IOException ioexception) + { + LOGGER.warn("Failed to load shader: {}", resourcelocation, ioexception); + this.entityOutlineShader = null; + this.entityOutlineFramebuffer = null; + } + catch (JsonSyntaxException jsonsyntaxexception) + { + LOGGER.warn("Failed to load shader: {}", resourcelocation, jsonsyntaxexception); + this.entityOutlineShader = null; + this.entityOutlineFramebuffer = null; + } + } + else + { + this.entityOutlineShader = null; + this.entityOutlineFramebuffer = null; + } + } + + public void renderEntityOutlineFramebuffer() + { + if (this.isRenderEntityOutlines()) + { + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); + this.entityOutlineFramebuffer.framebufferRenderExt(this.mc.displayWidth, this.mc.displayHeight, false); + GlStateManager.disableBlend(); + } + } + + protected boolean isRenderEntityOutlines() + { + return this.entityOutlineFramebuffer != null && this.entityOutlineShader != null && this.mc.player != null; + } + + private void generateSky2() + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + if (this.sky2VBO != null) + { + this.sky2VBO.deleteGlBuffers(); + } + + if (this.glSkyList2 >= 0) + { + GLAllocation.deleteDisplayLists(this.glSkyList2); + this.glSkyList2 = -1; + } + + if (this.vboEnabled) + { + this.sky2VBO = new VertexBuffer(this.vertexBufferFormat); + this.renderSky(bufferbuilder, -16.0F, true); + bufferbuilder.finishDrawing(); + bufferbuilder.reset(); + this.sky2VBO.bufferData(bufferbuilder.getByteBuffer()); + } + else + { + this.glSkyList2 = GLAllocation.generateDisplayLists(1); + GlStateManager.glNewList(this.glSkyList2, 4864); + this.renderSky(bufferbuilder, -16.0F, true); + tessellator.draw(); + GlStateManager.glEndList(); + } + } + + private void generateSky() + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + if (this.skyVBO != null) + { + this.skyVBO.deleteGlBuffers(); + } + + if (this.glSkyList >= 0) + { + GLAllocation.deleteDisplayLists(this.glSkyList); + this.glSkyList = -1; + } + + if (this.vboEnabled) + { + this.skyVBO = new VertexBuffer(this.vertexBufferFormat); + this.renderSky(bufferbuilder, 16.0F, false); + bufferbuilder.finishDrawing(); + bufferbuilder.reset(); + this.skyVBO.bufferData(bufferbuilder.getByteBuffer()); + } + else + { + this.glSkyList = GLAllocation.generateDisplayLists(1); + GlStateManager.glNewList(this.glSkyList, 4864); + this.renderSky(bufferbuilder, 16.0F, false); + tessellator.draw(); + GlStateManager.glEndList(); + } + } + + private void renderSky(BufferBuilder bufferBuilderIn, float posY, boolean reverseX) + { + int i = 64; + int j = 6; + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + + for (int k = -384; k <= 384; k += 64) + { + for (int l = -384; l <= 384; l += 64) + { + float f = (float)k; + float f1 = (float)(k + 64); + + if (reverseX) + { + f1 = (float)k; + f = (float)(k + 64); + } + + bufferBuilderIn.pos((double)f, (double)posY, (double)l).endVertex(); + bufferBuilderIn.pos((double)f1, (double)posY, (double)l).endVertex(); + bufferBuilderIn.pos((double)f1, (double)posY, (double)(l + 64)).endVertex(); + bufferBuilderIn.pos((double)f, (double)posY, (double)(l + 64)).endVertex(); + } + } + } + + private void generateStars() + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + if (this.starVBO != null) + { + this.starVBO.deleteGlBuffers(); + } + + if (this.starGLCallList >= 0) + { + GLAllocation.deleteDisplayLists(this.starGLCallList); + this.starGLCallList = -1; + } + + if (this.vboEnabled) + { + this.starVBO = new VertexBuffer(this.vertexBufferFormat); + this.renderStars(bufferbuilder); + bufferbuilder.finishDrawing(); + bufferbuilder.reset(); + this.starVBO.bufferData(bufferbuilder.getByteBuffer()); + } + else + { + this.starGLCallList = GLAllocation.generateDisplayLists(1); + GlStateManager.pushMatrix(); + GlStateManager.glNewList(this.starGLCallList, 4864); + this.renderStars(bufferbuilder); + tessellator.draw(); + GlStateManager.glEndList(); + GlStateManager.popMatrix(); + } + } + + private void renderStars(BufferBuilder bufferBuilderIn) + { + Random random = new Random(10842L); + bufferBuilderIn.begin(7, DefaultVertexFormats.POSITION); + + for (int i = 0; i < 1500; ++i) + { + double d0 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d1 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d2 = (double)(random.nextFloat() * 2.0F - 1.0F); + double d3 = (double)(0.15F + random.nextFloat() * 0.1F); + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + + if (d4 < 1.0D && d4 > 0.01D) + { + d4 = 1.0D / Math.sqrt(d4); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = d0 * 100.0D; + double d6 = d1 * 100.0D; + double d7 = d2 * 100.0D; + double d8 = Math.atan2(d0, d2); + double d9 = Math.sin(d8); + double d10 = Math.cos(d8); + double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); + double d12 = Math.sin(d11); + double d13 = Math.cos(d11); + double d14 = random.nextDouble() * Math.PI * 2.0D; + double d15 = Math.sin(d14); + double d16 = Math.cos(d14); + + for (int j = 0; j < 4; ++j) + { + double d17 = 0.0D; + double d18 = (double)((j & 2) - 1) * d3; + double d19 = (double)((j + 1 & 2) - 1) * d3; + double d20 = 0.0D; + double d21 = d18 * d16 - d19 * d15; + double d22 = d19 * d16 + d18 * d15; + double d23 = d21 * d12 + 0.0D * d13; + double d24 = 0.0D * d12 - d21 * d13; + double d25 = d24 * d9 - d22 * d10; + double d26 = d22 * d9 + d24 * d10; + bufferBuilderIn.pos(d5 + d25, d6 + d23, d7 + d26).endVertex(); + } + } + } + } + + /** + * set null to clear + */ + public void setWorldAndLoadRenderers(@Nullable WorldClient worldClientIn) + { + if (this.world != null) + { + this.world.removeEventListener(this); + } + + this.frustumUpdatePosX = Double.MIN_VALUE; + this.frustumUpdatePosY = Double.MIN_VALUE; + this.frustumUpdatePosZ = Double.MIN_VALUE; + this.frustumUpdatePosChunkX = Integer.MIN_VALUE; + this.frustumUpdatePosChunkY = Integer.MIN_VALUE; + this.frustumUpdatePosChunkZ = Integer.MIN_VALUE; + this.renderManager.setWorld(worldClientIn); + this.world = worldClientIn; + + if (worldClientIn != null) + { + worldClientIn.addEventListener(this); + this.loadRenderers(); + } + else + { + this.chunksToUpdate.clear(); + this.renderInfos.clear(); + + if (this.viewFrustum != null) + { + this.viewFrustum.deleteGlResources(); + this.viewFrustum = null; + } + + if (this.renderDispatcher != null) + { + this.renderDispatcher.stopWorkerThreads(); + } + + this.renderDispatcher = null; + } + } + + /** + * Loads all the renderers and sets up the basic settings usage + */ + public void loadRenderers() + { + if (this.world != null) + { + if (this.renderDispatcher == null) + { + this.renderDispatcher = new ChunkRenderDispatcher(); + } + + this.displayListEntitiesDirty = true; + Blocks.LEAVES.setGraphicsLevel(this.mc.gameSettings.fancyGraphics); + Blocks.LEAVES2.setGraphicsLevel(this.mc.gameSettings.fancyGraphics); + this.renderDistanceChunks = this.mc.gameSettings.renderDistanceChunks; + boolean flag = this.vboEnabled; + this.vboEnabled = OpenGlHelper.useVbo(); + + if (flag && !this.vboEnabled) + { + this.renderContainer = new RenderList(); + this.renderChunkFactory = new ListChunkFactory(); + } + else if (!flag && this.vboEnabled) + { + this.renderContainer = new VboRenderList(); + this.renderChunkFactory = new VboChunkFactory(); + } + + if (flag != this.vboEnabled) + { + this.generateStars(); + this.generateSky(); + this.generateSky2(); + } + + if (this.viewFrustum != null) + { + this.viewFrustum.deleteGlResources(); + } + + this.stopChunkUpdates(); + + synchronized (this.setTileEntities) + { + this.setTileEntities.clear(); + } + + this.viewFrustum = new ViewFrustum(this.world, this.mc.gameSettings.renderDistanceChunks, this, this.renderChunkFactory); + + if (this.world != null) + { + Entity entity = this.mc.getRenderViewEntity(); + + if (entity != null) + { + this.viewFrustum.updateChunkPositions(entity.posX, entity.posZ); + } + } + + this.renderEntitiesStartupCounter = 2; + } + } + + protected void stopChunkUpdates() + { + this.chunksToUpdate.clear(); + this.renderDispatcher.stopChunkUpdates(); + } + + public void createBindEntityOutlineFbs(int width, int height) + { + if (OpenGlHelper.shadersSupported) + { + if (this.entityOutlineShader != null) + { + this.entityOutlineShader.createBindFramebuffers(width, height); + } + } + } + + public void renderEntities(Entity renderViewEntity, ICamera camera, float partialTicks) + { + int pass = net.minecraftforge.client.MinecraftForgeClient.getRenderPass(); + if (this.renderEntitiesStartupCounter > 0) + { + if (pass > 0) return; + --this.renderEntitiesStartupCounter; + } + else + { + double d0 = renderViewEntity.prevPosX + (renderViewEntity.posX - renderViewEntity.prevPosX) * (double)partialTicks; + double d1 = renderViewEntity.prevPosY + (renderViewEntity.posY - renderViewEntity.prevPosY) * (double)partialTicks; + double d2 = renderViewEntity.prevPosZ + (renderViewEntity.posZ - renderViewEntity.prevPosZ) * (double)partialTicks; + this.world.profiler.startSection("prepare"); + TileEntityRendererDispatcher.instance.prepare(this.world, this.mc.getTextureManager(), this.mc.fontRenderer, this.mc.getRenderViewEntity(), this.mc.objectMouseOver, partialTicks); + this.renderManager.cacheActiveRenderInfo(this.world, this.mc.fontRenderer, this.mc.getRenderViewEntity(), this.mc.pointedEntity, this.mc.gameSettings, partialTicks); + if(pass == 0) + { + this.countEntitiesTotal = 0; + this.countEntitiesRendered = 0; + this.countEntitiesHidden = 0; + } + Entity entity = this.mc.getRenderViewEntity(); + double d3 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks; + double d4 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks; + double d5 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks; + TileEntityRendererDispatcher.staticPlayerX = d3; + TileEntityRendererDispatcher.staticPlayerY = d4; + TileEntityRendererDispatcher.staticPlayerZ = d5; + this.renderManager.setRenderPosition(d3, d4, d5); + this.mc.entityRenderer.enableLightmap(); + this.world.profiler.endStartSection("global"); + List list = this.world.getLoadedEntityList(); + if (pass == 0) + { + this.countEntitiesTotal = list.size(); + } + + for (int i = 0; i < this.world.weatherEffects.size(); ++i) + { + Entity entity1 = this.world.weatherEffects.get(i); + if (!entity1.shouldRenderInPass(pass)) continue; + ++this.countEntitiesRendered; + + if (entity1.isInRangeToRender3d(d0, d1, d2)) + { + this.renderManager.renderEntityStatic(entity1, partialTicks, false); + } + } + + this.world.profiler.endStartSection("entities"); + List list1 = Lists.newArrayList(); + List list2 = Lists.newArrayList(); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + for (RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation : this.renderInfos) + { + Chunk chunk = this.world.getChunkFromBlockCoords(renderglobal$containerlocalrenderinformation.renderChunk.getPosition()); + ClassInheritanceMultiMap classinheritancemultimap = chunk.getEntityLists()[renderglobal$containerlocalrenderinformation.renderChunk.getPosition().getY() / 16]; + + if (!classinheritancemultimap.isEmpty()) + { + for (Entity entity2 : classinheritancemultimap) + { + if(!entity2.shouldRenderInPass(pass)) continue; + boolean flag = this.renderManager.shouldRender(entity2, camera, d0, d1, d2) || entity2.isRidingOrBeingRiddenBy(this.mc.player); + + if (flag) + { + boolean flag1 = this.mc.getRenderViewEntity() instanceof EntityLivingBase ? ((EntityLivingBase)this.mc.getRenderViewEntity()).isPlayerSleeping() : false; + + if ((entity2 != this.mc.getRenderViewEntity() || this.mc.gameSettings.thirdPersonView != 0 || flag1) && (entity2.posY < 0.0D || entity2.posY >= 256.0D || this.world.isBlockLoaded(blockpos$pooledmutableblockpos.setPos(entity2)))) + { + ++this.countEntitiesRendered; + this.renderManager.renderEntityStatic(entity2, partialTicks, false); + + if (this.isOutlineActive(entity2, entity, camera)) + { + list1.add(entity2); + } + + if (this.renderManager.isRenderMultipass(entity2)) + { + list2.add(entity2); + } + } + } + } + } + } + + blockpos$pooledmutableblockpos.release(); + + if (!list2.isEmpty()) + { + for (Entity entity3 : list2) + { + this.renderManager.renderMultipass(entity3, partialTicks); + } + } + + if(pass == 0) + if (this.isRenderEntityOutlines() && (!list1.isEmpty() || this.entityOutlinesRendered)) + { + this.world.profiler.endStartSection("entityOutlines"); + this.entityOutlineFramebuffer.framebufferClear(); + this.entityOutlinesRendered = !list1.isEmpty(); + + if (!list1.isEmpty()) + { + GlStateManager.depthFunc(519); + GlStateManager.disableFog(); + this.entityOutlineFramebuffer.bindFramebuffer(false); + RenderHelper.disableStandardItemLighting(); + this.renderManager.setRenderOutlines(true); + + for (int j = 0; j < list1.size(); ++j) + { + this.renderManager.renderEntityStatic(list1.get(j), partialTicks, false); + } + + this.renderManager.setRenderOutlines(false); + RenderHelper.enableStandardItemLighting(); + GlStateManager.depthMask(false); + this.entityOutlineShader.render(partialTicks); + GlStateManager.enableLighting(); + GlStateManager.depthMask(true); + GlStateManager.enableFog(); + GlStateManager.enableBlend(); + GlStateManager.enableColorMaterial(); + GlStateManager.depthFunc(515); + GlStateManager.enableDepth(); + GlStateManager.enableAlpha(); + } + + this.mc.getFramebuffer().bindFramebuffer(false); + } + + this.world.profiler.endStartSection("blockentities"); + RenderHelper.enableStandardItemLighting(); + + TileEntityRendererDispatcher.instance.preDrawBatch(); + for (RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation1 : this.renderInfos) + { + List list3 = renderglobal$containerlocalrenderinformation1.renderChunk.getCompiledChunk().getTileEntities(); + + if (!list3.isEmpty()) + { + for (TileEntity tileentity2 : list3) + { + if (!tileentity2.shouldRenderInPass(pass) || !camera.isBoundingBoxInFrustum(tileentity2.getRenderBoundingBox())) continue; + TileEntityRendererDispatcher.instance.render(tileentity2, partialTicks, -1); + } + } + } + + synchronized (this.setTileEntities) + { + for (TileEntity tileentity : this.setTileEntities) + { + if (!tileentity.shouldRenderInPass(pass) || !camera.isBoundingBoxInFrustum(tileentity.getRenderBoundingBox())) continue; + TileEntityRendererDispatcher.instance.render(tileentity, partialTicks, -1); + } + } + TileEntityRendererDispatcher.instance.drawBatch(pass); + + this.preRenderDamagedBlocks(); + + for (DestroyBlockProgress destroyblockprogress : this.damagedBlocks.values()) + { + BlockPos blockpos = destroyblockprogress.getPosition(); + + if (this.world.getBlockState(blockpos).getBlock().hasTileEntity()) + { + TileEntity tileentity1 = this.world.getTileEntity(blockpos); + + if (tileentity1 instanceof TileEntityChest) + { + TileEntityChest tileentitychest = (TileEntityChest)tileentity1; + + if (tileentitychest.adjacentChestXNeg != null) + { + blockpos = blockpos.offset(EnumFacing.WEST); + tileentity1 = this.world.getTileEntity(blockpos); + } + else if (tileentitychest.adjacentChestZNeg != null) + { + blockpos = blockpos.offset(EnumFacing.NORTH); + tileentity1 = this.world.getTileEntity(blockpos); + } + } + + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (tileentity1 != null && iblockstate.hasCustomBreakingProgress()) + { + TileEntityRendererDispatcher.instance.render(tileentity1, partialTicks, destroyblockprogress.getPartialBlockDamage()); + } + } + } + + this.postRenderDamagedBlocks(); + this.mc.entityRenderer.disableLightmap(); + this.mc.mcProfiler.endSection(); + } + } + + /** + * Checks if the given entity should have an outline rendered. + */ + private boolean isOutlineActive(Entity entityIn, Entity viewer, ICamera camera) + { + boolean flag = viewer instanceof EntityLivingBase && ((EntityLivingBase)viewer).isPlayerSleeping(); + + if (entityIn == viewer && this.mc.gameSettings.thirdPersonView == 0 && !flag) + { + return false; + } + else if (entityIn.isGlowing()) + { + return true; + } + else if (this.mc.player.isSpectator() && this.mc.gameSettings.keyBindSpectatorOutlines.isKeyDown() && entityIn instanceof EntityPlayer) + { + return entityIn.ignoreFrustumCheck || camera.isBoundingBoxInFrustum(entityIn.getEntityBoundingBox()) || entityIn.isRidingOrBeingRiddenBy(this.mc.player); + } + else + { + return false; + } + } + + /** + * Gets the render info for use on the Debug screen + */ + public String getDebugInfoRenders() + { + int i = this.viewFrustum.renderChunks.length; + int j = this.getRenderedChunks(); + return String.format("C: %d/%d %sD: %d, L: %d, %s", j, i, this.mc.renderChunksMany ? "(s) " : "", this.renderDistanceChunks, this.setLightUpdates.size(), this.renderDispatcher == null ? "null" : this.renderDispatcher.getDebugInfo()); + } + + protected int getRenderedChunks() + { + int i = 0; + + for (RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation : this.renderInfos) + { + CompiledChunk compiledchunk = renderglobal$containerlocalrenderinformation.renderChunk.compiledChunk; + + if (compiledchunk != CompiledChunk.DUMMY && !compiledchunk.isEmpty()) + { + ++i; + } + } + + return i; + } + + /** + * Gets the entities info for use on the Debug screen + */ + public String getDebugInfoEntities() + { + return "E: " + this.countEntitiesRendered + "/" + this.countEntitiesTotal + ", B: " + this.countEntitiesHidden; + } + + public void setupTerrain(Entity viewEntity, double partialTicks, ICamera camera, int frameCount, boolean playerSpectator) + { + if (this.mc.gameSettings.renderDistanceChunks != this.renderDistanceChunks) + { + this.loadRenderers(); + } + + this.world.profiler.startSection("camera"); + double d0 = viewEntity.posX - this.frustumUpdatePosX; + double d1 = viewEntity.posY - this.frustumUpdatePosY; + double d2 = viewEntity.posZ - this.frustumUpdatePosZ; + + if (this.frustumUpdatePosChunkX != viewEntity.chunkCoordX || this.frustumUpdatePosChunkY != viewEntity.chunkCoordY || this.frustumUpdatePosChunkZ != viewEntity.chunkCoordZ || d0 * d0 + d1 * d1 + d2 * d2 > 16.0D) + { + this.frustumUpdatePosX = viewEntity.posX; + this.frustumUpdatePosY = viewEntity.posY; + this.frustumUpdatePosZ = viewEntity.posZ; + this.frustumUpdatePosChunkX = viewEntity.chunkCoordX; + this.frustumUpdatePosChunkY = viewEntity.chunkCoordY; + this.frustumUpdatePosChunkZ = viewEntity.chunkCoordZ; + this.viewFrustum.updateChunkPositions(viewEntity.posX, viewEntity.posZ); + } + + this.world.profiler.endStartSection("renderlistcamera"); + double d3 = viewEntity.lastTickPosX + (viewEntity.posX - viewEntity.lastTickPosX) * partialTicks; + double d4 = viewEntity.lastTickPosY + (viewEntity.posY - viewEntity.lastTickPosY) * partialTicks; + double d5 = viewEntity.lastTickPosZ + (viewEntity.posZ - viewEntity.lastTickPosZ) * partialTicks; + this.renderContainer.initialize(d3, d4, d5); + this.world.profiler.endStartSection("cull"); + + if (this.debugFixedClippingHelper != null) + { + Frustum frustum = new Frustum(this.debugFixedClippingHelper); + frustum.setPosition(this.debugTerrainFrustumPosition.x, this.debugTerrainFrustumPosition.y, this.debugTerrainFrustumPosition.z); + camera = frustum; + } + + this.mc.mcProfiler.endStartSection("culling"); + BlockPos blockpos1 = new BlockPos(d3, d4 + (double)viewEntity.getEyeHeight(), d5); + RenderChunk renderchunk = this.viewFrustum.getRenderChunk(blockpos1); + BlockPos blockpos = new BlockPos(MathHelper.floor(d3 / 16.0D) * 16, MathHelper.floor(d4 / 16.0D) * 16, MathHelper.floor(d5 / 16.0D) * 16); + this.displayListEntitiesDirty = this.displayListEntitiesDirty || !this.chunksToUpdate.isEmpty() || viewEntity.posX != this.lastViewEntityX || viewEntity.posY != this.lastViewEntityY || viewEntity.posZ != this.lastViewEntityZ || (double)viewEntity.rotationPitch != this.lastViewEntityPitch || (double)viewEntity.rotationYaw != this.lastViewEntityYaw; + this.lastViewEntityX = viewEntity.posX; + this.lastViewEntityY = viewEntity.posY; + this.lastViewEntityZ = viewEntity.posZ; + this.lastViewEntityPitch = (double)viewEntity.rotationPitch; + this.lastViewEntityYaw = (double)viewEntity.rotationYaw; + boolean flag = this.debugFixedClippingHelper != null; + this.mc.mcProfiler.endStartSection("update"); + + if (!flag && this.displayListEntitiesDirty) + { + this.displayListEntitiesDirty = false; + this.renderInfos = Lists.newArrayList(); + Queue queue = Queues.newArrayDeque(); + Entity.setRenderDistanceWeight(MathHelper.clamp((double)this.mc.gameSettings.renderDistanceChunks / 8.0D, 1.0D, 2.5D)); + boolean flag1 = this.mc.renderChunksMany; + + if (renderchunk != null) + { + boolean flag2 = false; + RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation3 = new RenderGlobal.ContainerLocalRenderInformation(renderchunk, (EnumFacing)null, 0); + Set set1 = this.getVisibleFacings(blockpos1); + + if (set1.size() == 1) + { + Vector3f vector3f = this.getViewVector(viewEntity, partialTicks); + EnumFacing enumfacing = EnumFacing.getFacingFromVector(vector3f.x, vector3f.y, vector3f.z).getOpposite(); + set1.remove(enumfacing); + } + + if (set1.isEmpty()) + { + flag2 = true; + } + + if (flag2 && !playerSpectator) + { + this.renderInfos.add(renderglobal$containerlocalrenderinformation3); + } + else + { + if (playerSpectator && this.world.getBlockState(blockpos1).isOpaqueCube()) + { + flag1 = false; + } + + renderchunk.setFrameIndex(frameCount); + queue.add(renderglobal$containerlocalrenderinformation3); + } + } + else + { + int i = blockpos1.getY() > 0 ? 248 : 8; + + for (int j = -this.renderDistanceChunks; j <= this.renderDistanceChunks; ++j) + { + for (int k = -this.renderDistanceChunks; k <= this.renderDistanceChunks; ++k) + { + RenderChunk renderchunk1 = this.viewFrustum.getRenderChunk(new BlockPos((j << 4) + 8, i, (k << 4) + 8)); + + if (renderchunk1 != null && camera.isBoundingBoxInFrustum(renderchunk1.boundingBox.expand(0.0, blockpos1.getY() > 0 ? Double.POSITIVE_INFINITY : Double.NEGATIVE_INFINITY, 0.0))) // Forge: fix MC-73139 + { + renderchunk1.setFrameIndex(frameCount); + queue.add(new RenderGlobal.ContainerLocalRenderInformation(renderchunk1, (EnumFacing)null, 0)); + } + } + } + } + + this.mc.mcProfiler.startSection("iteration"); + + while (!queue.isEmpty()) + { + RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation1 = queue.poll(); + RenderChunk renderchunk3 = renderglobal$containerlocalrenderinformation1.renderChunk; + EnumFacing enumfacing2 = renderglobal$containerlocalrenderinformation1.facing; + this.renderInfos.add(renderglobal$containerlocalrenderinformation1); + + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + RenderChunk renderchunk2 = this.getRenderChunkOffset(blockpos, renderchunk3, enumfacing1); + + if ((!flag1 || !renderglobal$containerlocalrenderinformation1.hasDirection(enumfacing1.getOpposite())) && (!flag1 || enumfacing2 == null || renderchunk3.getCompiledChunk().isVisible(enumfacing2.getOpposite(), enumfacing1)) && renderchunk2 != null && renderchunk2.setFrameIndex(frameCount) && camera.isBoundingBoxInFrustum(renderchunk2.boundingBox)) + { + RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation = new RenderGlobal.ContainerLocalRenderInformation(renderchunk2, enumfacing1, renderglobal$containerlocalrenderinformation1.counter + 1); + renderglobal$containerlocalrenderinformation.setDirection(renderglobal$containerlocalrenderinformation1.setFacing, enumfacing1); + queue.add(renderglobal$containerlocalrenderinformation); + } + } + } + + this.mc.mcProfiler.endSection(); + } + + this.mc.mcProfiler.endStartSection("captureFrustum"); + + if (this.debugFixTerrainFrustum) + { + this.fixTerrainFrustum(d3, d4, d5); + this.debugFixTerrainFrustum = false; + } + + this.mc.mcProfiler.endStartSection("rebuildNear"); + Set set = this.chunksToUpdate; + this.chunksToUpdate = Sets.newLinkedHashSet(); + + for (RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation2 : this.renderInfos) + { + RenderChunk renderchunk4 = renderglobal$containerlocalrenderinformation2.renderChunk; + + if (renderchunk4.needsUpdate() || set.contains(renderchunk4)) + { + this.displayListEntitiesDirty = true; + BlockPos blockpos2 = renderchunk4.getPosition().add(8, 8, 8); + boolean flag3 = blockpos2.distanceSq(blockpos1) < 768.0D; + + if (net.minecraftforge.common.ForgeModContainer.alwaysSetupTerrainOffThread || (!renderchunk4.needsImmediateUpdate() && !flag3)) + { + this.chunksToUpdate.add(renderchunk4); + } + else + { + this.mc.mcProfiler.startSection("build near"); + this.renderDispatcher.updateChunkNow(renderchunk4); + renderchunk4.clearNeedsUpdate(); + this.mc.mcProfiler.endSection(); + } + } + } + + this.chunksToUpdate.addAll(set); + this.mc.mcProfiler.endSection(); + } + + private Set getVisibleFacings(BlockPos pos) + { + VisGraph visgraph = new VisGraph(); + BlockPos blockpos = new BlockPos(pos.getX() >> 4 << 4, pos.getY() >> 4 << 4, pos.getZ() >> 4 << 4); + Chunk chunk = this.world.getChunkFromBlockCoords(blockpos); + + for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos.add(15, 15, 15))) + { + if (chunk.getBlockState(blockpos$mutableblockpos).isOpaqueCube()) + { + visgraph.setOpaqueCube(blockpos$mutableblockpos); + } + } + + return visgraph.getVisibleFacings(pos); + } + + /** + * Returns RenderChunk offset from given RenderChunk in given direction, or null if it can't be seen by player at + * given BlockPos. + */ + @Nullable + private RenderChunk getRenderChunkOffset(BlockPos playerPos, RenderChunk renderChunkBase, EnumFacing facing) + { + BlockPos blockpos = renderChunkBase.getBlockPosOffset16(facing); + + if (MathHelper.abs(playerPos.getX() - blockpos.getX()) > this.renderDistanceChunks * 16) + { + return null; + } + else if (blockpos.getY() >= 0 && blockpos.getY() < 256) + { + return MathHelper.abs(playerPos.getZ() - blockpos.getZ()) > this.renderDistanceChunks * 16 ? null : this.viewFrustum.getRenderChunk(blockpos); + } + else + { + return null; + } + } + + private void fixTerrainFrustum(double x, double y, double z) + { + this.debugFixedClippingHelper = new ClippingHelperImpl(); + ((ClippingHelperImpl)this.debugFixedClippingHelper).init(); + Matrix4f matrix4f = new Matrix4f(this.debugFixedClippingHelper.modelviewMatrix); + matrix4f.transpose(); + Matrix4f matrix4f1 = new Matrix4f(this.debugFixedClippingHelper.projectionMatrix); + matrix4f1.transpose(); + Matrix4f matrix4f2 = new Matrix4f(); + Matrix4f.mul(matrix4f1, matrix4f, matrix4f2); + matrix4f2.invert(); + this.debugTerrainFrustumPosition.x = x; + this.debugTerrainFrustumPosition.y = y; + this.debugTerrainFrustumPosition.z = z; + this.debugTerrainMatrix[0] = new Vector4f(-1.0F, -1.0F, -1.0F, 1.0F); + this.debugTerrainMatrix[1] = new Vector4f(1.0F, -1.0F, -1.0F, 1.0F); + this.debugTerrainMatrix[2] = new Vector4f(1.0F, 1.0F, -1.0F, 1.0F); + this.debugTerrainMatrix[3] = new Vector4f(-1.0F, 1.0F, -1.0F, 1.0F); + this.debugTerrainMatrix[4] = new Vector4f(-1.0F, -1.0F, 1.0F, 1.0F); + this.debugTerrainMatrix[5] = new Vector4f(1.0F, -1.0F, 1.0F, 1.0F); + this.debugTerrainMatrix[6] = new Vector4f(1.0F, 1.0F, 1.0F, 1.0F); + this.debugTerrainMatrix[7] = new Vector4f(-1.0F, 1.0F, 1.0F, 1.0F); + + for (int i = 0; i < 8; ++i) + { + Matrix4f.transform(matrix4f2, this.debugTerrainMatrix[i], this.debugTerrainMatrix[i]); + this.debugTerrainMatrix[i].x /= this.debugTerrainMatrix[i].w; + this.debugTerrainMatrix[i].y /= this.debugTerrainMatrix[i].w; + this.debugTerrainMatrix[i].z /= this.debugTerrainMatrix[i].w; + this.debugTerrainMatrix[i].w = 1.0F; + } + } + + protected Vector3f getViewVector(Entity entityIn, double partialTicks) + { + float f = (float)((double)entityIn.prevRotationPitch + (double)(entityIn.rotationPitch - entityIn.prevRotationPitch) * partialTicks); + float f1 = (float)((double)entityIn.prevRotationYaw + (double)(entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks); + + if (Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) + { + f += 180.0F; + } + + float f2 = MathHelper.cos(-f1 * 0.017453292F - (float)Math.PI); + float f3 = MathHelper.sin(-f1 * 0.017453292F - (float)Math.PI); + float f4 = -MathHelper.cos(-f * 0.017453292F); + float f5 = MathHelper.sin(-f * 0.017453292F); + return new Vector3f(f3 * f4, f5, f2 * f4); + } + + public int renderBlockLayer(BlockRenderLayer blockLayerIn, double partialTicks, int pass, Entity entityIn) + { + RenderHelper.disableStandardItemLighting(); + + if (blockLayerIn == BlockRenderLayer.TRANSLUCENT) + { + this.mc.mcProfiler.startSection("translucent_sort"); + double d0 = entityIn.posX - this.prevRenderSortX; + double d1 = entityIn.posY - this.prevRenderSortY; + double d2 = entityIn.posZ - this.prevRenderSortZ; + + if (d0 * d0 + d1 * d1 + d2 * d2 > 1.0D) + { + this.prevRenderSortX = entityIn.posX; + this.prevRenderSortY = entityIn.posY; + this.prevRenderSortZ = entityIn.posZ; + int k = 0; + + for (RenderGlobal.ContainerLocalRenderInformation renderglobal$containerlocalrenderinformation : this.renderInfos) + { + if (renderglobal$containerlocalrenderinformation.renderChunk.compiledChunk.isLayerStarted(blockLayerIn) && k++ < 15) + { + this.renderDispatcher.updateTransparencyLater(renderglobal$containerlocalrenderinformation.renderChunk); + } + } + } + + this.mc.mcProfiler.endSection(); + } + + this.mc.mcProfiler.startSection("filterempty"); + int l = 0; + boolean flag = blockLayerIn == BlockRenderLayer.TRANSLUCENT; + int i1 = flag ? this.renderInfos.size() - 1 : 0; + int i = flag ? -1 : this.renderInfos.size(); + int j1 = flag ? -1 : 1; + + for (int j = i1; j != i; j += j1) + { + RenderChunk renderchunk = (this.renderInfos.get(j)).renderChunk; + + if (!renderchunk.getCompiledChunk().isLayerEmpty(blockLayerIn)) + { + ++l; + this.renderContainer.addRenderChunk(renderchunk, blockLayerIn); + } + } + + this.mc.mcProfiler.func_194339_b(() -> + { + return "render_" + blockLayerIn; + }); + this.renderBlockLayer(blockLayerIn); + this.mc.mcProfiler.endSection(); + return l; + } + + @SuppressWarnings("incomplete-switch") + private void renderBlockLayer(BlockRenderLayer blockLayerIn) + { + this.mc.entityRenderer.enableLightmap(); + + if (OpenGlHelper.useVbo()) + { + GlStateManager.glEnableClientState(32884); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.glEnableClientState(32888); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.glEnableClientState(32888); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.glEnableClientState(32886); + } + + this.renderContainer.renderChunkLayer(blockLayerIn); + + if (OpenGlHelper.useVbo()) + { + for (VertexFormatElement vertexformatelement : DefaultVertexFormats.BLOCK.getElements()) + { + VertexFormatElement.EnumUsage vertexformatelement$enumusage = vertexformatelement.getUsage(); + int k1 = vertexformatelement.getIndex(); + + switch (vertexformatelement$enumusage) + { + case POSITION: + GlStateManager.glDisableClientState(32884); + break; + case UV: + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit + k1); + GlStateManager.glDisableClientState(32888); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); + break; + case COLOR: + GlStateManager.glDisableClientState(32886); + GlStateManager.resetColor(); + } + } + } + + this.mc.entityRenderer.disableLightmap(); + } + + private void cleanupDamagedBlocks(Iterator iteratorIn) + { + while (iteratorIn.hasNext()) + { + DestroyBlockProgress destroyblockprogress = iteratorIn.next(); + int k1 = destroyblockprogress.getCreationCloudUpdateTick(); + + if (this.cloudTickCounter - k1 > 400) + { + iteratorIn.remove(); + } + } + } + + public void updateClouds() + { + ++this.cloudTickCounter; + + if (this.cloudTickCounter % 20 == 0) + { + this.cleanupDamagedBlocks(this.damagedBlocks.values().iterator()); + } + + if (!this.setLightUpdates.isEmpty() && !this.renderDispatcher.hasNoFreeRenderBuilders() && this.chunksToUpdate.isEmpty()) + { + Iterator iterator = this.setLightUpdates.iterator(); + + while (iterator.hasNext()) + { + BlockPos blockpos = iterator.next(); + iterator.remove(); + int k1 = blockpos.getX(); + int l1 = blockpos.getY(); + int i2 = blockpos.getZ(); + this.markBlocksForUpdate(k1 - 1, l1 - 1, i2 - 1, k1 + 1, l1 + 1, i2 + 1, false); + } + } + } + + private void renderSkyEnd() + { + GlStateManager.disableFog(); + GlStateManager.disableAlpha(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderHelper.disableStandardItemLighting(); + GlStateManager.depthMask(false); + this.renderEngine.bindTexture(END_SKY_TEXTURES); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + for (int k1 = 0; k1 < 6; ++k1) + { + GlStateManager.pushMatrix(); + + if (k1 == 1) + { + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + } + + if (k1 == 2) + { + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + } + + if (k1 == 3) + { + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + } + + if (k1 == 4) + { + GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); + } + + if (k1 == 5) + { + GlStateManager.rotate(-90.0F, 0.0F, 0.0F, 1.0F); + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(-100.0D, -100.0D, -100.0D).tex(0.0D, 0.0D).color(40, 40, 40, 255).endVertex(); + bufferbuilder.pos(-100.0D, -100.0D, 100.0D).tex(0.0D, 16.0D).color(40, 40, 40, 255).endVertex(); + bufferbuilder.pos(100.0D, -100.0D, 100.0D).tex(16.0D, 16.0D).color(40, 40, 40, 255).endVertex(); + bufferbuilder.pos(100.0D, -100.0D, -100.0D).tex(16.0D, 0.0D).color(40, 40, 40, 255).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + } + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.enableAlpha(); + } + + public void renderSky(float partialTicks, int pass) + { + net.minecraftforge.client.IRenderHandler renderer = this.world.provider.getSkyRenderer(); + if (renderer != null) + { + renderer.render(partialTicks, world, mc); + return; + } + + if (this.mc.world.provider.getDimensionType().getId() == 1) + { + this.renderSkyEnd(); + } + else if (this.mc.world.provider.isSurfaceWorld()) + { + GlStateManager.disableTexture2D(); + Vec3d vec3d = this.world.getSkyColor(this.mc.getRenderViewEntity(), partialTicks); + float f = (float)vec3d.x; + float f1 = (float)vec3d.y; + float f2 = (float)vec3d.z; + + if (pass != 2) + { + float f3 = (f * 30.0F + f1 * 59.0F + f2 * 11.0F) / 100.0F; + float f4 = (f * 30.0F + f1 * 70.0F) / 100.0F; + float f5 = (f * 30.0F + f2 * 70.0F) / 100.0F; + f = f3; + f1 = f4; + f2 = f5; + } + + GlStateManager.color(f, f1, f2); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.depthMask(false); + GlStateManager.enableFog(); + GlStateManager.color(f, f1, f2); + + if (this.vboEnabled) + { + this.skyVBO.bindBuffer(); + GlStateManager.glEnableClientState(32884); + GlStateManager.glVertexPointer(3, 5126, 12, 0); + this.skyVBO.drawArrays(7); + this.skyVBO.unbindBuffer(); + GlStateManager.glDisableClientState(32884); + } + else + { + GlStateManager.callList(this.glSkyList); + } + + GlStateManager.disableFog(); + GlStateManager.disableAlpha(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + RenderHelper.disableStandardItemLighting(); + float[] afloat = this.world.provider.calcSunriseSunsetColors(this.world.getCelestialAngle(partialTicks), partialTicks); + + if (afloat != null) + { + GlStateManager.disableTexture2D(); + GlStateManager.shadeModel(7425); + GlStateManager.pushMatrix(); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(MathHelper.sin(this.world.getCelestialAngleRadians(partialTicks)) < 0.0F ? 180.0F : 0.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); + float f6 = afloat[0]; + float f7 = afloat[1]; + float f8 = afloat[2]; + + if (pass != 2) + { + float f9 = (f6 * 30.0F + f7 * 59.0F + f8 * 11.0F) / 100.0F; + float f10 = (f6 * 30.0F + f7 * 70.0F) / 100.0F; + float f11 = (f6 * 30.0F + f8 * 70.0F) / 100.0F; + f6 = f9; + f7 = f10; + f8 = f11; + } + + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(0.0D, 100.0D, 0.0D).color(f6, f7, f8, afloat[3]).endVertex(); + int l1 = 16; + + for (int j2 = 0; j2 <= 16; ++j2) + { + float f21 = (float)j2 * ((float)Math.PI * 2F) / 16.0F; + float f12 = MathHelper.sin(f21); + float f13 = MathHelper.cos(f21); + bufferbuilder.pos((double)(f12 * 120.0F), (double)(f13 * 120.0F), (double)(-f13 * 40.0F * afloat[3])).color(afloat[0], afloat[1], afloat[2], 0.0F).endVertex(); + } + + tessellator.draw(); + GlStateManager.popMatrix(); + GlStateManager.shadeModel(7424); + } + + GlStateManager.enableTexture2D(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.pushMatrix(); + float f16 = 1.0F - this.world.getRainStrength(partialTicks); + GlStateManager.color(1.0F, 1.0F, 1.0F, f16); + GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(this.world.getCelestialAngle(partialTicks) * 360.0F, 1.0F, 0.0F, 0.0F); + float f17 = 30.0F; + this.renderEngine.bindTexture(SUN_TEXTURES); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(-f17), 100.0D, (double)(-f17)).tex(0.0D, 0.0D).endVertex(); + bufferbuilder.pos((double)f17, 100.0D, (double)(-f17)).tex(1.0D, 0.0D).endVertex(); + bufferbuilder.pos((double)f17, 100.0D, (double)f17).tex(1.0D, 1.0D).endVertex(); + bufferbuilder.pos((double)(-f17), 100.0D, (double)f17).tex(0.0D, 1.0D).endVertex(); + tessellator.draw(); + f17 = 20.0F; + this.renderEngine.bindTexture(MOON_PHASES_TEXTURES); + int k1 = this.world.getMoonPhase(); + int i2 = k1 % 4; + int k2 = k1 / 4 % 2; + float f22 = (float)(i2 + 0) / 4.0F; + float f23 = (float)(k2 + 0) / 2.0F; + float f24 = (float)(i2 + 1) / 4.0F; + float f14 = (float)(k2 + 1) / 2.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos((double)(-f17), -100.0D, (double)f17).tex((double)f24, (double)f14).endVertex(); + bufferbuilder.pos((double)f17, -100.0D, (double)f17).tex((double)f22, (double)f14).endVertex(); + bufferbuilder.pos((double)f17, -100.0D, (double)(-f17)).tex((double)f22, (double)f23).endVertex(); + bufferbuilder.pos((double)(-f17), -100.0D, (double)(-f17)).tex((double)f24, (double)f23).endVertex(); + tessellator.draw(); + GlStateManager.disableTexture2D(); + float f15 = this.world.getStarBrightness(partialTicks) * f16; + + if (f15 > 0.0F) + { + GlStateManager.color(f15, f15, f15, f15); + + if (this.vboEnabled) + { + this.starVBO.bindBuffer(); + GlStateManager.glEnableClientState(32884); + GlStateManager.glVertexPointer(3, 5126, 12, 0); + this.starVBO.drawArrays(7); + this.starVBO.unbindBuffer(); + GlStateManager.glDisableClientState(32884); + } + else + { + GlStateManager.callList(this.starGLCallList); + } + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableFog(); + GlStateManager.popMatrix(); + GlStateManager.disableTexture2D(); + GlStateManager.color(0.0F, 0.0F, 0.0F); + double d3 = this.mc.player.getPositionEyes(partialTicks).y - this.world.getHorizon(); + + if (d3 < 0.0D) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 12.0F, 0.0F); + + if (this.vboEnabled) + { + this.sky2VBO.bindBuffer(); + GlStateManager.glEnableClientState(32884); + GlStateManager.glVertexPointer(3, 5126, 12, 0); + this.sky2VBO.drawArrays(7); + this.sky2VBO.unbindBuffer(); + GlStateManager.glDisableClientState(32884); + } + else + { + GlStateManager.callList(this.glSkyList2); + } + + GlStateManager.popMatrix(); + float f18 = 1.0F; + float f19 = -((float)(d3 + 65.0D)); + float f20 = -1.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(-1.0D, (double)f19, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, (double)f19, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, (double)f19, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, (double)f19, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, (double)f19, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, (double)f19, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, (double)f19, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, (double)f19, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(-1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, 1.0D).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos(1.0D, -1.0D, -1.0D).color(0, 0, 0, 255).endVertex(); + tessellator.draw(); + } + + if (this.world.provider.isSkyColored()) + { + GlStateManager.color(f * 0.2F + 0.04F, f1 * 0.2F + 0.04F, f2 * 0.6F + 0.1F); + } + else + { + GlStateManager.color(f, f1, f2); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, -((float)(d3 - 16.0D)), 0.0F); + GlStateManager.callList(this.glSkyList2); + GlStateManager.popMatrix(); + GlStateManager.enableTexture2D(); + GlStateManager.depthMask(true); + } + } + + public void renderClouds(float partialTicks, int pass, double p_180447_3_, double p_180447_5_, double p_180447_7_) + { + if (net.minecraftforge.fml.client.FMLClientHandler.instance().renderClouds(this.cloudTickCounter, partialTicks)) return; + if (this.mc.world.provider.isSurfaceWorld()) + { + if (this.mc.gameSettings.shouldRenderClouds() == 2) + { + this.renderCloudsFancy(partialTicks, pass, p_180447_3_, p_180447_5_, p_180447_7_); + } + else + { + GlStateManager.disableCull(); + int k1 = 32; + int l1 = 8; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.renderEngine.bindTexture(CLOUDS_TEXTURES); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + Vec3d vec3d = this.world.getCloudColour(partialTicks); + float f = (float)vec3d.x; + float f1 = (float)vec3d.y; + float f2 = (float)vec3d.z; + + if (pass != 2) + { + float f3 = (f * 30.0F + f1 * 59.0F + f2 * 11.0F) / 100.0F; + float f4 = (f * 30.0F + f1 * 70.0F) / 100.0F; + float f5 = (f * 30.0F + f2 * 70.0F) / 100.0F; + f = f3; + f1 = f4; + f2 = f5; + } + + float f9 = 4.8828125E-4F; + double d5 = (double)((float)this.cloudTickCounter + partialTicks); + double d3 = p_180447_3_ + d5 * 0.029999999329447746D; + int i2 = MathHelper.floor(d3 / 2048.0D); + int j2 = MathHelper.floor(p_180447_7_ / 2048.0D); + d3 = d3 - (double)(i2 * 2048); + double lvt_22_1_ = p_180447_7_ - (double)(j2 * 2048); + float f6 = this.world.provider.getCloudHeight() - (float)p_180447_5_ + 0.33F; + float f7 = (float)(d3 * 4.8828125E-4D); + float f8 = (float)(lvt_22_1_ * 4.8828125E-4D); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + + for (int k2 = -256; k2 < 256; k2 += 32) + { + for (int l2 = -256; l2 < 256; l2 += 32) + { + bufferbuilder.pos((double)(k2 + 0), (double)f6, (double)(l2 + 32)).tex((double)((float)(k2 + 0) * 4.8828125E-4F + f7), (double)((float)(l2 + 32) * 4.8828125E-4F + f8)).color(f, f1, f2, 0.8F).endVertex(); + bufferbuilder.pos((double)(k2 + 32), (double)f6, (double)(l2 + 32)).tex((double)((float)(k2 + 32) * 4.8828125E-4F + f7), (double)((float)(l2 + 32) * 4.8828125E-4F + f8)).color(f, f1, f2, 0.8F).endVertex(); + bufferbuilder.pos((double)(k2 + 32), (double)f6, (double)(l2 + 0)).tex((double)((float)(k2 + 32) * 4.8828125E-4F + f7), (double)((float)(l2 + 0) * 4.8828125E-4F + f8)).color(f, f1, f2, 0.8F).endVertex(); + bufferbuilder.pos((double)(k2 + 0), (double)f6, (double)(l2 + 0)).tex((double)((float)(k2 + 0) * 4.8828125E-4F + f7), (double)((float)(l2 + 0) * 4.8828125E-4F + f8)).color(f, f1, f2, 0.8F).endVertex(); + } + } + + tessellator.draw(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableCull(); + } + } + } + + /** + * Checks if the given position is to be rendered with cloud fog + */ + public boolean hasCloudFog(double x, double y, double z, float partialTicks) + { + return false; + } + + private void renderCloudsFancy(float partialTicks, int pass, double x, double y, double z) + { + GlStateManager.disableCull(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f = 12.0F; + float f1 = 4.0F; + double d3 = (double)((float)this.cloudTickCounter + partialTicks); + double d4 = (x + d3 * 0.029999999329447746D) / 12.0D; + double d5 = z / 12.0D + 0.33000001311302185D; + float f2 = this.world.provider.getCloudHeight() - (float)y + 0.33F; + int k1 = MathHelper.floor(d4 / 2048.0D); + int l1 = MathHelper.floor(d5 / 2048.0D); + d4 = d4 - (double)(k1 * 2048); + d5 = d5 - (double)(l1 * 2048); + this.renderEngine.bindTexture(CLOUDS_TEXTURES); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + Vec3d vec3d = this.world.getCloudColour(partialTicks); + float f3 = (float)vec3d.x; + float f4 = (float)vec3d.y; + float f5 = (float)vec3d.z; + + if (pass != 2) + { + float f6 = (f3 * 30.0F + f4 * 59.0F + f5 * 11.0F) / 100.0F; + float f7 = (f3 * 30.0F + f4 * 70.0F) / 100.0F; + float f8 = (f3 * 30.0F + f5 * 70.0F) / 100.0F; + f3 = f6; + f4 = f7; + f5 = f8; + } + + float f25 = f3 * 0.9F; + float f26 = f4 * 0.9F; + float f27 = f5 * 0.9F; + float f9 = f3 * 0.7F; + float f10 = f4 * 0.7F; + float f11 = f5 * 0.7F; + float f12 = f3 * 0.8F; + float f13 = f4 * 0.8F; + float f14 = f5 * 0.8F; + float f15 = 0.00390625F; + float f16 = (float)MathHelper.floor(d4) * 0.00390625F; + float f17 = (float)MathHelper.floor(d5) * 0.00390625F; + float f18 = (float)(d4 - (double)MathHelper.floor(d4)); + float f19 = (float)(d5 - (double)MathHelper.floor(d5)); + int i2 = 8; + int j2 = 4; + float f20 = 9.765625E-4F; + GlStateManager.scale(12.0F, 1.0F, 12.0F); + + for (int k2 = 0; k2 < 2; ++k2) + { + if (k2 == 0) + { + GlStateManager.colorMask(false, false, false, false); + } + else + { + switch (pass) + { + case 0: + GlStateManager.colorMask(false, true, true, true); + break; + case 1: + GlStateManager.colorMask(true, false, false, true); + break; + case 2: + GlStateManager.colorMask(true, true, true, true); + } + } + + for (int l2 = -3; l2 <= 4; ++l2) + { + for (int i3 = -3; i3 <= 4; ++i3) + { + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); + float f21 = (float)(l2 * 8); + float f22 = (float)(i3 * 8); + float f23 = f21 - f18; + float f24 = f22 - f19; + + if (f2 > -5.0F) + { + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 0.0F), (double)(f24 + 8.0F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f9, f10, f11, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 0.0F), (double)(f24 + 8.0F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f9, f10, f11, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 0.0F), (double)(f24 + 0.0F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f9, f10, f11, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 0.0F), (double)(f24 + 0.0F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f9, f10, f11, 0.8F).normal(0.0F, -1.0F, 0.0F).endVertex(); + } + + if (f2 <= 5.0F) + { + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 4.0F - 9.765625E-4F), (double)(f24 + 8.0F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f3, f4, f5, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 4.0F - 9.765625E-4F), (double)(f24 + 8.0F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f3, f4, f5, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 4.0F - 9.765625E-4F), (double)(f24 + 0.0F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f3, f4, f5, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 4.0F - 9.765625E-4F), (double)(f24 + 0.0F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f3, f4, f5, 0.8F).normal(0.0F, 1.0F, 0.0F).endVertex(); + } + + if (l2 > -1) + { + for (int j3 = 0; j3 < 8; ++j3) + { + bufferbuilder.pos((double)(f23 + (float)j3 + 0.0F), (double)(f2 + 0.0F), (double)(f24 + 8.0F)).tex((double)((f21 + (float)j3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + (float)j3 + 0.0F), (double)(f2 + 4.0F), (double)(f24 + 8.0F)).tex((double)((f21 + (float)j3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + (float)j3 + 0.0F), (double)(f2 + 4.0F), (double)(f24 + 0.0F)).tex((double)((f21 + (float)j3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + (float)j3 + 0.0F), (double)(f2 + 0.0F), (double)(f24 + 0.0F)).tex((double)((f21 + (float)j3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(-1.0F, 0.0F, 0.0F).endVertex(); + } + } + + if (l2 <= 1) + { + for (int k3 = 0; k3 < 8; ++k3) + { + bufferbuilder.pos((double)(f23 + (float)k3 + 1.0F - 9.765625E-4F), (double)(f2 + 0.0F), (double)(f24 + 8.0F)).tex((double)((f21 + (float)k3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + (float)k3 + 1.0F - 9.765625E-4F), (double)(f2 + 4.0F), (double)(f24 + 8.0F)).tex((double)((f21 + (float)k3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 8.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + (float)k3 + 1.0F - 9.765625E-4F), (double)(f2 + 4.0F), (double)(f24 + 0.0F)).tex((double)((f21 + (float)k3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)(f23 + (float)k3 + 1.0F - 9.765625E-4F), (double)(f2 + 0.0F), (double)(f24 + 0.0F)).tex((double)((f21 + (float)k3 + 0.5F) * 0.00390625F + f16), (double)((f22 + 0.0F) * 0.00390625F + f17)).color(f25, f26, f27, 0.8F).normal(1.0F, 0.0F, 0.0F).endVertex(); + } + } + + if (i3 > -1) + { + for (int l3 = 0; l3 < 8; ++l3) + { + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 4.0F), (double)(f24 + (float)l3 + 0.0F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + (float)l3 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 4.0F), (double)(f24 + (float)l3 + 0.0F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + (float)l3 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 0.0F), (double)(f24 + (float)l3 + 0.0F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + (float)l3 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 0.0F), (double)(f24 + (float)l3 + 0.0F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + (float)l3 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, -1.0F).endVertex(); + } + } + + if (i3 <= 1) + { + for (int i4 = 0; i4 < 8; ++i4) + { + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 4.0F), (double)(f24 + (float)i4 + 1.0F - 9.765625E-4F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + (float)i4 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 4.0F), (double)(f24 + (float)i4 + 1.0F - 9.765625E-4F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + (float)i4 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 8.0F), (double)(f2 + 0.0F), (double)(f24 + (float)i4 + 1.0F - 9.765625E-4F)).tex((double)((f21 + 8.0F) * 0.00390625F + f16), (double)((f22 + (float)i4 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)(f23 + 0.0F), (double)(f2 + 0.0F), (double)(f24 + (float)i4 + 1.0F - 9.765625E-4F)).tex((double)((f21 + 0.0F) * 0.00390625F + f16), (double)((f22 + (float)i4 + 0.5F) * 0.00390625F + f17)).color(f12, f13, f14, 0.8F).normal(0.0F, 0.0F, 1.0F).endVertex(); + } + } + + tessellator.draw(); + } + } + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableCull(); + } + + public void updateChunks(long finishTimeNano) + { + this.displayListEntitiesDirty |= this.renderDispatcher.runChunkUploads(finishTimeNano); + + if (!this.chunksToUpdate.isEmpty()) + { + Iterator iterator = this.chunksToUpdate.iterator(); + + while (iterator.hasNext()) + { + RenderChunk renderchunk1 = iterator.next(); + boolean flag1; + + if (renderchunk1.needsImmediateUpdate()) + { + flag1 = this.renderDispatcher.updateChunkNow(renderchunk1); + } + else + { + flag1 = this.renderDispatcher.updateChunkLater(renderchunk1); + } + + if (!flag1) + { + break; + } + + renderchunk1.clearNeedsUpdate(); + iterator.remove(); + long k1 = finishTimeNano - System.nanoTime(); + + if (k1 < 0L) + { + break; + } + } + } + } + + public void renderWorldBorder(Entity entityIn, float partialTicks) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + WorldBorder worldborder = this.world.getWorldBorder(); + double d3 = (double)(this.mc.gameSettings.renderDistanceChunks * 16); + + if (entityIn.posX >= worldborder.maxX() - d3 || entityIn.posX <= worldborder.minX() + d3 || entityIn.posZ >= worldborder.maxZ() - d3 || entityIn.posZ <= worldborder.minZ() + d3) + { + double d4 = 1.0D - worldborder.getClosestDistance(entityIn) / d3; + d4 = Math.pow(d4, 4.0D); + double d5 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; + double d6 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; + double d7 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.renderEngine.bindTexture(FORCEFIELD_TEXTURES); + GlStateManager.depthMask(false); + GlStateManager.pushMatrix(); + int k1 = worldborder.getStatus().getColor(); + float f = (float)(k1 >> 16 & 255) / 255.0F; + float f1 = (float)(k1 >> 8 & 255) / 255.0F; + float f2 = (float)(k1 & 255) / 255.0F; + GlStateManager.color(f, f1, f2, (float)d4); + GlStateManager.doPolygonOffset(-3.0F, -3.0F); + GlStateManager.enablePolygonOffset(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.enableAlpha(); + GlStateManager.disableCull(); + float f3 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F; + float f4 = 0.0F; + float f5 = 0.0F; + float f6 = 128.0F; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.setTranslation(-d5, -d6, -d7); + double d8 = Math.max((double)MathHelper.floor(d7 - d3), worldborder.minZ()); + double d9 = Math.min((double)MathHelper.ceil(d7 + d3), worldborder.maxZ()); + + if (d5 > worldborder.maxX() - d3) + { + float f7 = 0.0F; + + for (double d10 = d8; d10 < d9; f7 += 0.5F) + { + double d11 = Math.min(1.0D, d9 - d10); + float f8 = (float)d11 * 0.5F; + bufferbuilder.pos(worldborder.maxX(), 256.0D, d10).tex((double)(f3 + f7), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(worldborder.maxX(), 256.0D, d10 + d11).tex((double)(f3 + f8 + f7), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(worldborder.maxX(), 0.0D, d10 + d11).tex((double)(f3 + f8 + f7), (double)(f3 + 128.0F)).endVertex(); + bufferbuilder.pos(worldborder.maxX(), 0.0D, d10).tex((double)(f3 + f7), (double)(f3 + 128.0F)).endVertex(); + ++d10; + } + } + + if (d5 < worldborder.minX() + d3) + { + float f9 = 0.0F; + + for (double d12 = d8; d12 < d9; f9 += 0.5F) + { + double d15 = Math.min(1.0D, d9 - d12); + float f12 = (float)d15 * 0.5F; + bufferbuilder.pos(worldborder.minX(), 256.0D, d12).tex((double)(f3 + f9), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(worldborder.minX(), 256.0D, d12 + d15).tex((double)(f3 + f12 + f9), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(worldborder.minX(), 0.0D, d12 + d15).tex((double)(f3 + f12 + f9), (double)(f3 + 128.0F)).endVertex(); + bufferbuilder.pos(worldborder.minX(), 0.0D, d12).tex((double)(f3 + f9), (double)(f3 + 128.0F)).endVertex(); + ++d12; + } + } + + d8 = Math.max((double)MathHelper.floor(d5 - d3), worldborder.minX()); + d9 = Math.min((double)MathHelper.ceil(d5 + d3), worldborder.maxX()); + + if (d7 > worldborder.maxZ() - d3) + { + float f10 = 0.0F; + + for (double d13 = d8; d13 < d9; f10 += 0.5F) + { + double d16 = Math.min(1.0D, d9 - d13); + float f13 = (float)d16 * 0.5F; + bufferbuilder.pos(d13, 256.0D, worldborder.maxZ()).tex((double)(f3 + f10), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(d13 + d16, 256.0D, worldborder.maxZ()).tex((double)(f3 + f13 + f10), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(d13 + d16, 0.0D, worldborder.maxZ()).tex((double)(f3 + f13 + f10), (double)(f3 + 128.0F)).endVertex(); + bufferbuilder.pos(d13, 0.0D, worldborder.maxZ()).tex((double)(f3 + f10), (double)(f3 + 128.0F)).endVertex(); + ++d13; + } + } + + if (d7 < worldborder.minZ() + d3) + { + float f11 = 0.0F; + + for (double d14 = d8; d14 < d9; f11 += 0.5F) + { + double d17 = Math.min(1.0D, d9 - d14); + float f14 = (float)d17 * 0.5F; + bufferbuilder.pos(d14, 256.0D, worldborder.minZ()).tex((double)(f3 + f11), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(d14 + d17, 256.0D, worldborder.minZ()).tex((double)(f3 + f14 + f11), (double)(f3 + 0.0F)).endVertex(); + bufferbuilder.pos(d14 + d17, 0.0D, worldborder.minZ()).tex((double)(f3 + f14 + f11), (double)(f3 + 128.0F)).endVertex(); + bufferbuilder.pos(d14, 0.0D, worldborder.minZ()).tex((double)(f3 + f11), (double)(f3 + 128.0F)).endVertex(); + ++d14; + } + } + + tessellator.draw(); + bufferbuilder.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.enableCull(); + GlStateManager.disableAlpha(); + GlStateManager.doPolygonOffset(0.0F, 0.0F); + GlStateManager.disablePolygonOffset(); + GlStateManager.enableAlpha(); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + GlStateManager.depthMask(true); + } + } + + private void preRenderDamagedBlocks() + { + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.DST_COLOR, GlStateManager.DestFactor.SRC_COLOR, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.enableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 0.5F); + // FORGE: Fix MC-234 + GlStateManager.doPolygonOffset(-1.0F, -10.0F); + GlStateManager.enablePolygonOffset(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.enableAlpha(); + GlStateManager.pushMatrix(); + } + + private void postRenderDamagedBlocks() + { + GlStateManager.disableAlpha(); + GlStateManager.doPolygonOffset(0.0F, 0.0F); + GlStateManager.disablePolygonOffset(); + GlStateManager.enableAlpha(); + GlStateManager.depthMask(true); + GlStateManager.popMatrix(); + } + + public void drawBlockDamageTexture(Tessellator tessellatorIn, BufferBuilder bufferBuilderIn, Entity entityIn, float partialTicks) + { + double d3 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; + double d4 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; + double d5 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; + + if (!this.damagedBlocks.isEmpty()) + { + this.renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.preRenderDamagedBlocks(); + bufferBuilderIn.begin(7, DefaultVertexFormats.BLOCK); + bufferBuilderIn.setTranslation(-d3, -d4, -d5); + bufferBuilderIn.noColor(); + Iterator iterator = this.damagedBlocks.values().iterator(); + + while (iterator.hasNext()) + { + DestroyBlockProgress destroyblockprogress = iterator.next(); + BlockPos blockpos = destroyblockprogress.getPosition(); + double d6 = (double)blockpos.getX() - d3; + double d7 = (double)blockpos.getY() - d4; + double d8 = (double)blockpos.getZ() - d5; + Block block = this.world.getBlockState(blockpos).getBlock(); + TileEntity te = this.world.getTileEntity(blockpos); + boolean hasBreak = block instanceof BlockChest || block instanceof BlockEnderChest || block instanceof BlockSign || block instanceof BlockSkull; + if (!hasBreak) hasBreak = te != null && te.canRenderBreaking(); + + if (!hasBreak) + { + if (d6 * d6 + d7 * d7 + d8 * d8 > 1024.0D) + { + iterator.remove(); + } + else + { + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getMaterial() != Material.AIR) + { + int k1 = destroyblockprogress.getPartialBlockDamage(); + TextureAtlasSprite textureatlassprite = this.destroyBlockIcons[k1]; + BlockRendererDispatcher blockrendererdispatcher = this.mc.getBlockRendererDispatcher(); + blockrendererdispatcher.renderBlockDamage(iblockstate, blockpos, textureatlassprite, this.world); + } + } + } + } + + tessellatorIn.draw(); + bufferBuilderIn.setTranslation(0.0D, 0.0D, 0.0D); + this.postRenderDamagedBlocks(); + } + } + + /** + * Draws the selection box for the player. + */ + public void drawSelectionBox(EntityPlayer player, RayTraceResult movingObjectPositionIn, int execute, float partialTicks) + { + if (execute == 0 && movingObjectPositionIn.typeOfHit == RayTraceResult.Type.BLOCK) + { + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.glLineWidth(2.0F); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + BlockPos blockpos = movingObjectPositionIn.getBlockPos(); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getMaterial() != Material.AIR && this.world.getWorldBorder().contains(blockpos)) + { + double d3 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double)partialTicks; + double d4 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double)partialTicks; + double d5 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)partialTicks; + drawSelectionBoundingBox(iblockstate.getSelectedBoundingBox(this.world, blockpos).grow(0.0020000000949949026D).offset(-d3, -d4, -d5), 0.0F, 0.0F, 0.0F, 0.4F); + } + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } + } + + public static void drawSelectionBoundingBox(AxisAlignedBB box, float red, float green, float blue, float alpha) + { + drawBoundingBox(box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ, red, green, blue, alpha); + } + + public static void drawBoundingBox(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(3, DefaultVertexFormats.POSITION_COLOR); + drawBoundingBox(bufferbuilder, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + tessellator.draw(); + } + + public static void drawBoundingBox(BufferBuilder buffer, double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) + { + buffer.pos(minX, minY, minZ).color(red, green, blue, 0.0F).endVertex(); + buffer.pos(minX, minY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, minY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, minY, maxZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(minX, minY, maxZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(minX, minY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(minX, maxY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, maxY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, maxY, maxZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(minX, maxY, maxZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(minX, maxY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(minX, maxY, maxZ).color(red, green, blue, 0.0F).endVertex(); + buffer.pos(minX, minY, maxZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, maxY, maxZ).color(red, green, blue, 0.0F).endVertex(); + buffer.pos(maxX, minY, maxZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, maxY, minZ).color(red, green, blue, 0.0F).endVertex(); + buffer.pos(maxX, minY, minZ).color(red, green, blue, alpha).endVertex(); + buffer.pos(maxX, minY, minZ).color(red, green, blue, 0.0F).endVertex(); + } + + public static void renderFilledBox(AxisAlignedBB aabb, float red, float green, float blue, float alpha) + { + renderFilledBox(aabb.minX, aabb.minY, aabb.minZ, aabb.maxX, aabb.maxY, aabb.maxZ, red, green, blue, alpha); + } + + public static void renderFilledBox(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, float red, float green, float blue, float alpha) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + addChainedFilledBoxVertices(bufferbuilder, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha); + tessellator.draw(); + } + + public static void addChainedFilledBoxVertices(BufferBuilder builder, double p_189693_1_, double p_189693_3_, double p_189693_5_, double p_189693_7_, double p_189693_9_, double p_189693_11_, float red, float green, float blue, float alpha) + { + builder.pos(p_189693_1_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_3_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_1_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_5_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + builder.pos(p_189693_7_, p_189693_9_, p_189693_11_).color(red, green, blue, alpha).endVertex(); + } + + private void markBlocksForUpdate(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, boolean updateImmediately) + { + this.viewFrustum.markBlocksForUpdate(minX, minY, minZ, maxX, maxY, maxZ, updateImmediately); + } + + public void notifyBlockUpdate(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState, int flags) + { + int k1 = pos.getX(); + int l1 = pos.getY(); + int i2 = pos.getZ(); + this.markBlocksForUpdate(k1 - 1, l1 - 1, i2 - 1, k1 + 1, l1 + 1, i2 + 1, (flags & 8) != 0); + } + + public void notifyLightSet(BlockPos pos) + { + this.setLightUpdates.add(pos.toImmutable()); + } + + /** + * On the client, re-renders all blocks in this range, inclusive. On the server, does nothing. + */ + public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) + { + this.markBlocksForUpdate(x1 - 1, y1 - 1, z1 - 1, x2 + 1, y2 + 1, z2 + 1, false); + } + + public void playRecord(@Nullable SoundEvent soundIn, BlockPos pos) + { + ISound isound = this.mapSoundPositions.get(pos); + + if (isound != null) + { + this.mc.getSoundHandler().stopSound(isound); + this.mapSoundPositions.remove(pos); + } + + if (soundIn != null) + { + ItemRecord itemrecord = ItemRecord.getBySound(soundIn); + + if (itemrecord != null) + { + this.mc.ingameGUI.setRecordPlayingMessage(itemrecord.getRecordNameLocal()); + } + + ISound positionedsoundrecord = PositionedSoundRecord.getRecordSoundRecord(soundIn, (float)pos.getX(), (float)pos.getY(), (float)pos.getZ()); + this.mapSoundPositions.put(pos, positionedsoundrecord); + this.mc.getSoundHandler().playSound(positionedsoundrecord); + } + + this.setPartying(this.world, pos, soundIn != null); + } + + private void setPartying(World p_193054_1_, BlockPos pos, boolean p_193054_3_) + { + for (EntityLivingBase entitylivingbase : p_193054_1_.getEntitiesWithinAABB(EntityLivingBase.class, (new AxisAlignedBB(pos)).grow(3.0D))) + { + entitylivingbase.setPartying(pos, p_193054_3_); + } + } + + public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) + { + } + + public void spawnParticle(int particleID, boolean ignoreRange, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + this.spawnParticle(particleID, ignoreRange, false, xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + } + + public void spawnParticle(int id, boolean ignoreRange, boolean p_190570_3_, final double x, final double y, final double z, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + try + { + this.spawnParticle0(id, ignoreRange, p_190570_3_, x, y, z, xSpeed, ySpeed, zSpeed, parameters); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Exception while adding particle"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Particle being added"); + crashreportcategory.addCrashSection("ID", Integer.valueOf(id)); + + if (parameters != null) + { + crashreportcategory.addCrashSection("Parameters", parameters); + } + + crashreportcategory.addDetail("Position", new ICrashReportDetail() + { + public String call() throws Exception + { + return CrashReportCategory.getCoordinateInfo(x, y, z); + } + }); + throw new ReportedException(crashreport); + } + } + + private void spawnParticle(EnumParticleTypes particleIn, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + this.spawnParticle(particleIn.getParticleID(), particleIn.getShouldIgnoreRange(), xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + } + + @Nullable + private Particle spawnParticle0(int particleID, boolean ignoreRange, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + return this.spawnParticle0(particleID, ignoreRange, false, xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + } + + @Nullable + private Particle spawnParticle0(int particleID, boolean ignoreRange, boolean minParticles, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + Entity entity = this.mc.getRenderViewEntity(); + + if (this.mc != null && entity != null && this.mc.effectRenderer != null) + { + int k1 = this.calculateParticleLevel(minParticles); + double d3 = entity.posX - xCoord; + double d4 = entity.posY - yCoord; + double d5 = entity.posZ - zCoord; + + if (ignoreRange) + { + return this.mc.effectRenderer.spawnEffectParticle(particleID, xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + } + else if (d3 * d3 + d4 * d4 + d5 * d5 > 1024.0D) + { + return null; + } + else + { + return k1 > 1 ? null : this.mc.effectRenderer.spawnEffectParticle(particleID, xCoord, yCoord, zCoord, xSpeed, ySpeed, zSpeed, parameters); + } + } + else + { + return null; + } + } + + private int calculateParticleLevel(boolean p_190572_1_) + { + int k1 = this.mc.gameSettings.particleSetting; + + if (p_190572_1_ && k1 == 2 && this.world.rand.nextInt(10) == 0) + { + k1 = 1; + } + + if (k1 == 1 && this.world.rand.nextInt(3) == 0) + { + k1 = 2; + } + + return k1; + } + + /** + * Called on all IWorldAccesses when an entity is created or loaded. On client worlds, starts downloading any + * necessary textures. On server worlds, adds the entity to the entity tracker. + */ + public void onEntityAdded(Entity entityIn) + { + } + + /** + * Called on all IWorldAccesses when an entity is unloaded or destroyed. On client worlds, releases any downloaded + * textures. On server worlds, removes the entity from the entity tracker. + */ + public void onEntityRemoved(Entity entityIn) + { + } + + /** + * Deletes all display lists + */ + public void deleteAllDisplayLists() + { + } + + public void broadcastSound(int soundID, BlockPos pos, int data) + { + switch (soundID) + { + case 1023: + case 1028: + case 1038: + Entity entity = this.mc.getRenderViewEntity(); + + if (entity != null) + { + double d3 = (double)pos.getX() - entity.posX; + double d4 = (double)pos.getY() - entity.posY; + double d5 = (double)pos.getZ() - entity.posZ; + double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5); + double d7 = entity.posX; + double d8 = entity.posY; + double d9 = entity.posZ; + + if (d6 > 0.0D) + { + d7 += d3 / d6 * 2.0D; + d8 += d4 / d6 * 2.0D; + d9 += d5 / d6 * 2.0D; + } + + if (soundID == 1023) + { + this.world.playSound(d7, d8, d9, SoundEvents.ENTITY_WITHER_SPAWN, SoundCategory.HOSTILE, 1.0F, 1.0F, false); + } + else if (soundID == 1038) + { + this.world.playSound(d7, d8, d9, SoundEvents.BLOCK_END_PORTAL_SPAWN, SoundCategory.HOSTILE, 1.0F, 1.0F, false); + } + else + { + this.world.playSound(d7, d8, d9, SoundEvents.ENTITY_ENDERDRAGON_DEATH, SoundCategory.HOSTILE, 5.0F, 1.0F, false); + } + } + + default: + } + } + + public void playEvent(EntityPlayer player, int type, BlockPos blockPosIn, int data) + { + Random random = this.world.rand; + + switch (type) + { + case 1000: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_DISPENSER_DISPENSE, SoundCategory.BLOCKS, 1.0F, 1.0F, false); + break; + case 1001: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_DISPENSER_FAIL, SoundCategory.BLOCKS, 1.0F, 1.2F, false); + break; + case 1002: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_DISPENSER_LAUNCH, SoundCategory.BLOCKS, 1.0F, 1.2F, false); + break; + case 1003: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ENDEREYE_LAUNCH, SoundCategory.NEUTRAL, 1.0F, 1.2F, false); + break; + case 1004: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_FIREWORK_SHOOT, SoundCategory.NEUTRAL, 1.0F, 1.2F, false); + break; + case 1005: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_IRON_DOOR_OPEN, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1006: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_WOODEN_DOOR_OPEN, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1007: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1008: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_FENCE_GATE_OPEN, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1009: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (random.nextFloat() - random.nextFloat()) * 0.8F, false); + break; + case 1010: + + if (Item.getItemById(data) instanceof ItemRecord) + { + this.world.playRecord(blockPosIn, ((ItemRecord)Item.getItemById(data)).getSound()); + } + else + { + this.world.playRecord(blockPosIn, (SoundEvent)null); + } + + break; + case 1011: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_IRON_DOOR_CLOSE, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1012: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_WOODEN_DOOR_CLOSE, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1013: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1014: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_FENCE_GATE_CLOSE, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1015: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_GHAST_WARN, SoundCategory.HOSTILE, 10.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1016: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_GHAST_SHOOT, SoundCategory.HOSTILE, 10.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1017: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ENDERDRAGON_SHOOT, SoundCategory.HOSTILE, 10.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1018: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_BLAZE_SHOOT, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1019: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ZOMBIE_ATTACK_DOOR_WOOD, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1020: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ZOMBIE_ATTACK_IRON_DOOR, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1021: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ZOMBIE_BREAK_DOOR_WOOD, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1022: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_WITHER_BREAK_BLOCK, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1024: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_WITHER_SHOOT, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1025: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_BAT_TAKEOFF, SoundCategory.NEUTRAL, 0.05F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1026: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ZOMBIE_INFECT, SoundCategory.HOSTILE, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1027: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ZOMBIE_VILLAGER_CONVERTED, SoundCategory.NEUTRAL, 2.0F, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1029: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_ANVIL_DESTROY, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1030: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_ANVIL_USE, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1031: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_ANVIL_LAND, SoundCategory.BLOCKS, 0.3F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1032: + this.mc.getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.BLOCK_PORTAL_TRAVEL, random.nextFloat() * 0.4F + 0.8F)); + break; + case 1033: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_CHORUS_FLOWER_GROW, SoundCategory.BLOCKS, 1.0F, 1.0F, false); + break; + case 1034: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_CHORUS_FLOWER_DEATH, SoundCategory.BLOCKS, 1.0F, 1.0F, false); + break; + case 1035: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_BREWING_STAND_BREW, SoundCategory.BLOCKS, 1.0F, 1.0F, false); + break; + case 1036: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_IRON_TRAPDOOR_CLOSE, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1037: + this.world.playSound(blockPosIn, SoundEvents.BLOCK_IRON_TRAPDOOR_OPEN, SoundCategory.BLOCKS, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 2000: + int j2 = data % 3 - 1; + int k1 = data / 3 % 3 - 1; + double d11 = (double)blockPosIn.getX() + (double)j2 * 0.6D + 0.5D; + double d13 = (double)blockPosIn.getY() + 0.5D; + double d15 = (double)blockPosIn.getZ() + (double)k1 * 0.6D + 0.5D; + + for (int l2 = 0; l2 < 10; ++l2) + { + double d16 = random.nextDouble() * 0.2D + 0.01D; + double d19 = d11 + (double)j2 * 0.01D + (random.nextDouble() - 0.5D) * (double)k1 * 0.5D; + double d22 = d13 + (random.nextDouble() - 0.5D) * 0.5D; + double d25 = d15 + (double)k1 * 0.01D + (random.nextDouble() - 0.5D) * (double)j2 * 0.5D; + double d27 = (double)j2 * d16 + random.nextGaussian() * 0.01D; + double d29 = -0.03D + random.nextGaussian() * 0.01D; + double d30 = (double)k1 * d16 + random.nextGaussian() * 0.01D; + this.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d19, d22, d25, d27, d29, d30); + } + + return; + case 2001: + Block block = Block.getBlockById(data & 4095); + + if (block.getDefaultState().getMaterial() != Material.AIR) + { + SoundType soundtype = block.getSoundType(Block.getStateById(data), world, blockPosIn, null); + this.world.playSound(blockPosIn, soundtype.getBreakSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F, false); + } + + this.mc.effectRenderer.addBlockDestroyEffects(blockPosIn, block.getStateFromMeta(data >> 12 & 255)); + break; + case 2002: + case 2007: + double d9 = (double)blockPosIn.getX(); + double d10 = (double)blockPosIn.getY(); + double d12 = (double)blockPosIn.getZ(); + + for (int k2 = 0; k2 < 8; ++k2) + { + this.spawnParticle(EnumParticleTypes.ITEM_CRACK, d9, d10, d12, random.nextGaussian() * 0.15D, random.nextDouble() * 0.2D, random.nextGaussian() * 0.15D, Item.getIdFromItem(Items.SPLASH_POTION)); + } + + float f5 = (float)(data >> 16 & 255) / 255.0F; + float f = (float)(data >> 8 & 255) / 255.0F; + float f1 = (float)(data >> 0 & 255) / 255.0F; + EnumParticleTypes enumparticletypes = type == 2007 ? EnumParticleTypes.SPELL_INSTANT : EnumParticleTypes.SPELL; + + for (int j3 = 0; j3 < 100; ++j3) + { + double d18 = random.nextDouble() * 4.0D; + double d21 = random.nextDouble() * Math.PI * 2.0D; + double d24 = Math.cos(d21) * d18; + double d26 = 0.01D + random.nextDouble() * 0.5D; + double d28 = Math.sin(d21) * d18; + Particle particle1 = this.spawnParticle0(enumparticletypes.getParticleID(), enumparticletypes.getShouldIgnoreRange(), d9 + d24 * 0.1D, d10 + 0.3D, d12 + d28 * 0.1D, d24, d26, d28); + + if (particle1 != null) + { + float f4 = 0.75F + random.nextFloat() * 0.25F; + particle1.setRBGColorF(f5 * f4, f * f4, f1 * f4); + particle1.multiplyVelocity((float)d18); + } + } + + this.world.playSound(blockPosIn, SoundEvents.ENTITY_SPLASH_POTION_BREAK, SoundCategory.NEUTRAL, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 2003: + double d3 = (double)blockPosIn.getX() + 0.5D; + double d4 = (double)blockPosIn.getY(); + double d5 = (double)blockPosIn.getZ() + 0.5D; + + for (int l1 = 0; l1 < 8; ++l1) + { + this.spawnParticle(EnumParticleTypes.ITEM_CRACK, d3, d4, d5, random.nextGaussian() * 0.15D, random.nextDouble() * 0.2D, random.nextGaussian() * 0.15D, Item.getIdFromItem(Items.ENDER_EYE)); + } + + for (double d14 = 0.0D; d14 < (Math.PI * 2D); d14 += 0.15707963267948966D) + { + this.spawnParticle(EnumParticleTypes.PORTAL, d3 + Math.cos(d14) * 5.0D, d4 - 0.4D, d5 + Math.sin(d14) * 5.0D, Math.cos(d14) * -5.0D, 0.0D, Math.sin(d14) * -5.0D); + this.spawnParticle(EnumParticleTypes.PORTAL, d3 + Math.cos(d14) * 5.0D, d4 - 0.4D, d5 + Math.sin(d14) * 5.0D, Math.cos(d14) * -7.0D, 0.0D, Math.sin(d14) * -7.0D); + } + + return; + case 2004: + + for (int i3 = 0; i3 < 20; ++i3) + { + double d17 = (double)blockPosIn.getX() + 0.5D + ((double)this.world.rand.nextFloat() - 0.5D) * 2.0D; + double d20 = (double)blockPosIn.getY() + 0.5D + ((double)this.world.rand.nextFloat() - 0.5D) * 2.0D; + double d23 = (double)blockPosIn.getZ() + 0.5D + ((double)this.world.rand.nextFloat() - 0.5D) * 2.0D; + this.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d17, d20, d23, 0.0D, 0.0D, 0.0D, new int[0]); + this.world.spawnParticle(EnumParticleTypes.FLAME, d17, d20, d23, 0.0D, 0.0D, 0.0D, new int[0]); + } + + return; + case 2005: + ItemDye.spawnBonemealParticles(this.world, blockPosIn, data); + break; + case 2006: + + for (int i2 = 0; i2 < 200; ++i2) + { + float f2 = random.nextFloat() * 4.0F; + float f3 = random.nextFloat() * ((float)Math.PI * 2F); + double d6 = (double)(MathHelper.cos(f3) * f2); + double d7 = 0.01D + random.nextDouble() * 0.5D; + double d8 = (double)(MathHelper.sin(f3) * f2); + Particle particle = this.spawnParticle0(EnumParticleTypes.DRAGON_BREATH.getParticleID(), false, (double)blockPosIn.getX() + d6 * 0.1D, (double)blockPosIn.getY() + 0.3D, (double)blockPosIn.getZ() + d8 * 0.1D, d6, d7, d8); + + if (particle != null) + { + particle.multiplyVelocity(f2); + } + } + + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ENDERDRAGON_FIREBALL_EPLD, SoundCategory.HOSTILE, 1.0F, this.world.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 3000: + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_HUGE, true, (double)blockPosIn.getX() + 0.5D, (double)blockPosIn.getY() + 0.5D, (double)blockPosIn.getZ() + 0.5D, 0.0D, 0.0D, 0.0D, new int[0]); + this.world.playSound(blockPosIn, SoundEvents.BLOCK_END_GATEWAY_SPAWN, SoundCategory.BLOCKS, 10.0F, (1.0F + (this.world.rand.nextFloat() - this.world.rand.nextFloat()) * 0.2F) * 0.7F, false); + break; + case 3001: + this.world.playSound(blockPosIn, SoundEvents.ENTITY_ENDERDRAGON_GROWL, SoundCategory.HOSTILE, 64.0F, 0.8F + this.world.rand.nextFloat() * 0.3F, false); + } + } + + public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) + { + if (progress >= 0 && progress < 10) + { + DestroyBlockProgress destroyblockprogress = this.damagedBlocks.get(Integer.valueOf(breakerId)); + + if (destroyblockprogress == null || destroyblockprogress.getPosition().getX() != pos.getX() || destroyblockprogress.getPosition().getY() != pos.getY() || destroyblockprogress.getPosition().getZ() != pos.getZ()) + { + destroyblockprogress = new DestroyBlockProgress(breakerId, pos); + this.damagedBlocks.put(Integer.valueOf(breakerId), destroyblockprogress); + } + + destroyblockprogress.setPartialBlockDamage(progress); + destroyblockprogress.setCloudUpdateTick(this.cloudTickCounter); + } + else + { + this.damagedBlocks.remove(Integer.valueOf(breakerId)); + } + } + + public boolean hasNoChunkUpdates() + { + return this.chunksToUpdate.isEmpty() && this.renderDispatcher.hasChunkUpdates(); + } + + public void setDisplayListEntitiesDirty() + { + this.displayListEntitiesDirty = true; + } + + public void updateTileEntities(Collection tileEntitiesToRemove, Collection tileEntitiesToAdd) + { + synchronized (this.setTileEntities) + { + this.setTileEntities.removeAll(tileEntitiesToRemove); + this.setTileEntities.addAll(tileEntitiesToAdd); + } + } + + @SideOnly(Side.CLIENT) + class ContainerLocalRenderInformation + { + final RenderChunk renderChunk; + final EnumFacing facing; + byte setFacing; + final int counter; + + private ContainerLocalRenderInformation(RenderChunk renderChunkIn, EnumFacing facingIn, @Nullable int counterIn) + { + this.renderChunk = renderChunkIn; + this.facing = facingIn; + this.counter = counterIn; + } + + public void setDirection(byte p_189561_1_, EnumFacing p_189561_2_) + { + this.setFacing = (byte)(this.setFacing | p_189561_1_ | 1 << p_189561_2_.ordinal()); + } + + public boolean hasDirection(EnumFacing p_189560_1_) + { + return (this.setFacing & 1 << p_189560_1_.ordinal()) > 0; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderHelper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderHelper.java new file mode 100644 index 0000000..b025de9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderHelper.java @@ -0,0 +1,81 @@ +package net.minecraft.client.renderer; + +import java.nio.FloatBuffer; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderHelper +{ + /** Float buffer used to set OpenGL material colors */ + private static final FloatBuffer COLOR_BUFFER = GLAllocation.createDirectFloatBuffer(4); + private static final Vec3d LIGHT0_POS = (new Vec3d(0.20000000298023224D, 1.0D, -0.699999988079071D)).normalize(); + private static final Vec3d LIGHT1_POS = (new Vec3d(-0.20000000298023224D, 1.0D, 0.699999988079071D)).normalize(); + + /** + * Disables the OpenGL lighting properties enabled by enableStandardItemLighting + */ + public static void disableStandardItemLighting() + { + GlStateManager.disableLighting(); + GlStateManager.disableLight(0); + GlStateManager.disableLight(1); + GlStateManager.disableColorMaterial(); + } + + /** + * Sets the OpenGL lighting properties to the values used when rendering blocks as items + */ + public static void enableStandardItemLighting() + { + GlStateManager.enableLighting(); + GlStateManager.enableLight(0); + GlStateManager.enableLight(1); + GlStateManager.enableColorMaterial(); + GlStateManager.colorMaterial(1032, 5634); + GlStateManager.glLight(16384, 4611, setColorBuffer(LIGHT0_POS.x, LIGHT0_POS.y, LIGHT0_POS.z, 0.0D)); + float f = 0.6F; + GlStateManager.glLight(16384, 4609, setColorBuffer(0.6F, 0.6F, 0.6F, 1.0F)); + GlStateManager.glLight(16384, 4608, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GlStateManager.glLight(16384, 4610, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GlStateManager.glLight(16385, 4611, setColorBuffer(LIGHT1_POS.x, LIGHT1_POS.y, LIGHT1_POS.z, 0.0D)); + GlStateManager.glLight(16385, 4609, setColorBuffer(0.6F, 0.6F, 0.6F, 1.0F)); + GlStateManager.glLight(16385, 4608, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GlStateManager.glLight(16385, 4610, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GlStateManager.shadeModel(7424); + float f1 = 0.4F; + GlStateManager.glLightModel(2899, setColorBuffer(0.4F, 0.4F, 0.4F, 1.0F)); + } + + /** + * Update and return colorBuffer with the RGBA values passed as arguments + */ + private static FloatBuffer setColorBuffer(double p_74517_0_, double p_74517_2_, double p_74517_4_, double p_74517_6_) + { + return setColorBuffer((float)p_74517_0_, (float)p_74517_2_, (float)p_74517_4_, (float)p_74517_6_); + } + + /** + * Update and return colorBuffer with the RGBA values passed as arguments + */ + public static FloatBuffer setColorBuffer(float p_74521_0_, float p_74521_1_, float p_74521_2_, float p_74521_3_) + { + COLOR_BUFFER.clear(); + COLOR_BUFFER.put(p_74521_0_).put(p_74521_1_).put(p_74521_2_).put(p_74521_3_); + COLOR_BUFFER.flip(); + return COLOR_BUFFER; + } + + /** + * Sets OpenGL lighting for rendering blocks as items inside GUI screens (such as containers). + */ + public static void enableGUIStandardItemLighting() + { + GlStateManager.pushMatrix(); + GlStateManager.rotate(-30.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(165.0F, 1.0F, 0.0F, 0.0F); + enableStandardItemLighting(); + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderItem.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderItem.java new file mode 100644 index 0000000..3b6a0cb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderItem.java @@ -0,0 +1,1108 @@ +package net.minecraft.client.renderer; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockHugeMushroom; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockPrismarine; +import net.minecraft.block.BlockQuartz; +import net.minecraft.block.BlockRedSandstone; +import net.minecraft.block.BlockSand; +import net.minecraft.block.BlockSandStone; +import net.minecraft.block.BlockSilverfish; +import net.minecraft.block.BlockStone; +import net.minecraft.block.BlockStoneBrick; +import net.minecraft.block.BlockStoneSlab; +import net.minecraft.block.BlockStoneSlabNew; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.BlockWall; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemTransformVec3f; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.color.ItemColors; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemFishFood; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3i; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderItem implements IResourceManagerReloadListener +{ + private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + /** False when the renderer is rendering the item's effects into a GUI */ + private boolean notRenderingEffectsInGUI = true; + /** Defines the zLevel of rendering of item on GUI. */ + public float zLevel; + private final ItemModelMesher itemModelMesher; + private final TextureManager textureManager; + private final ItemColors itemColors; + + public RenderItem(TextureManager p_i46552_1_, ModelManager p_i46552_2_, ItemColors p_i46552_3_) + { + this.textureManager = p_i46552_1_; + this.itemModelMesher = new net.minecraftforge.client.ItemModelMesherForge(p_i46552_2_); + this.registerItems(); + this.itemColors = p_i46552_3_; + } + + public ItemModelMesher getItemModelMesher() + { + return this.itemModelMesher; + } + + protected void registerItem(Item itm, int subType, String identifier) + { + this.itemModelMesher.register(itm, subType, new ModelResourceLocation(identifier, "inventory")); + } + + protected void registerBlock(Block blk, int subType, String identifier) + { + this.registerItem(Item.getItemFromBlock(blk), subType, identifier); + } + + private void registerBlock(Block blk, String identifier) + { + this.registerBlock(blk, 0, identifier); + } + + private void registerItem(Item itm, String identifier) + { + this.registerItem(itm, 0, identifier); + } + + private void renderModel(IBakedModel model, ItemStack stack) + { + this.renderModel(model, -1, stack); + } + + private void renderModel(IBakedModel model, int color) + { + this.renderModel(model, color, ItemStack.EMPTY); + } + + private void renderModel(IBakedModel model, int color, ItemStack stack) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.ITEM); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + this.renderQuads(bufferbuilder, model.getQuads((IBlockState)null, enumfacing, 0L), color, stack); + } + + this.renderQuads(bufferbuilder, model.getQuads((IBlockState)null, (EnumFacing)null, 0L), color, stack); + tessellator.draw(); + } + + public void renderItem(ItemStack stack, IBakedModel model) + { + if (!stack.isEmpty()) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(-0.5F, -0.5F, -0.5F); + + if (model.isBuiltInRenderer()) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableRescaleNormal(); + stack.getItem().getTileEntityItemStackRenderer().renderByItem(stack); + } + else + { + this.renderModel(model, stack); + + if (stack.hasEffect()) + { + this.renderEffect(model); + } + } + + GlStateManager.popMatrix(); + } + } + + private void renderEffect(IBakedModel model) + { + GlStateManager.depthMask(false); + GlStateManager.depthFunc(514); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_COLOR, GlStateManager.DestFactor.ONE); + this.textureManager.bindTexture(RES_ITEM_GLINT); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(8.0F, 8.0F, 8.0F); + float f = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F / 8.0F; + GlStateManager.translate(f, 0.0F, 0.0F); + GlStateManager.rotate(-50.0F, 0.0F, 0.0F, 1.0F); + this.renderModel(model, -8372020); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.scale(8.0F, 8.0F, 8.0F); + float f1 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F / 8.0F; + GlStateManager.translate(-f1, 0.0F, 0.0F); + GlStateManager.rotate(10.0F, 0.0F, 0.0F, 1.0F); + this.renderModel(model, -8372020); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.enableLighting(); + GlStateManager.depthFunc(515); + GlStateManager.depthMask(true); + this.textureManager.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + } + + private void putQuadNormal(BufferBuilder renderer, BakedQuad quad) + { + Vec3i vec3i = quad.getFace().getDirectionVec(); + renderer.putNormal((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ()); + } + + private void renderQuad(BufferBuilder renderer, BakedQuad quad, int color) + { + renderer.addVertexData(quad.getVertexData()); + renderer.putColor4(color); + this.putQuadNormal(renderer, quad); + } + + private void renderQuads(BufferBuilder renderer, List quads, int color, ItemStack stack) + { + boolean flag = color == -1 && !stack.isEmpty(); + int i = 0; + + for (int j = quads.size(); i < j; ++i) + { + BakedQuad bakedquad = quads.get(i); + int k = color; + + if (flag && bakedquad.hasTintIndex()) + { + k = this.itemColors.colorMultiplier(stack, bakedquad.getTintIndex()); + + if (EntityRenderer.anaglyphEnable) + { + k = TextureUtil.anaglyphColor(k); + } + + k = k | -16777216; + } + + net.minecraftforge.client.model.pipeline.LightUtil.renderQuadColor(renderer, bakedquad, k); + } + } + + public boolean shouldRenderItemIn3D(ItemStack stack) + { + IBakedModel ibakedmodel = this.itemModelMesher.getItemModel(stack); + return ibakedmodel == null ? false : ibakedmodel.isGui3d(); + } + + public void renderItem(ItemStack stack, ItemCameraTransforms.TransformType cameraTransformType) + { + if (!stack.isEmpty()) + { + IBakedModel ibakedmodel = this.getItemModelWithOverrides(stack, (World)null, (EntityLivingBase)null); + this.renderItemModel(stack, ibakedmodel, cameraTransformType, false); + } + } + + public IBakedModel getItemModelWithOverrides(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entitylivingbaseIn) + { + IBakedModel ibakedmodel = this.itemModelMesher.getItemModel(stack); + return ibakedmodel.getOverrides().handleItemState(ibakedmodel, stack, worldIn, entitylivingbaseIn); + } + + public void renderItem(ItemStack stack, EntityLivingBase entitylivingbaseIn, ItemCameraTransforms.TransformType transform, boolean leftHanded) + { + if (!stack.isEmpty() && entitylivingbaseIn != null) + { + IBakedModel ibakedmodel = this.getItemModelWithOverrides(stack, entitylivingbaseIn.world, entitylivingbaseIn); + this.renderItemModel(stack, ibakedmodel, transform, leftHanded); + } + } + + protected void renderItemModel(ItemStack stack, IBakedModel bakedmodel, ItemCameraTransforms.TransformType transform, boolean leftHanded) + { + if (!stack.isEmpty()) + { + this.textureManager.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.textureManager.getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableRescaleNormal(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.pushMatrix(); + // TODO: check if negative scale is a thing + bakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(bakedmodel, transform, leftHanded); + + this.renderItem(stack, bakedmodel); + GlStateManager.cullFace(GlStateManager.CullFace.BACK); + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + GlStateManager.disableBlend(); + this.textureManager.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.textureManager.getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).restoreLastBlurMipmap(); + } + } + + /** + * Return true if only one scale is negative + */ + private boolean isThereOneNegativeScale(ItemTransformVec3f itemTranformVec) + { + return itemTranformVec.scale.x < 0.0F ^ itemTranformVec.scale.y < 0.0F ^ itemTranformVec.scale.z < 0.0F; + } + + public void renderItemIntoGUI(ItemStack stack, int x, int y) + { + this.renderItemModelIntoGUI(stack, x, y, this.getItemModelWithOverrides(stack, (World)null, (EntityLivingBase)null)); + } + + protected void renderItemModelIntoGUI(ItemStack stack, int x, int y, IBakedModel bakedmodel) + { + GlStateManager.pushMatrix(); + this.textureManager.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.textureManager.getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).setBlurMipmap(false, false); + GlStateManager.enableRescaleNormal(); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.setupGuiTransform(x, y, bakedmodel.isGui3d()); + bakedmodel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(bakedmodel, ItemCameraTransforms.TransformType.GUI, false); + this.renderItem(stack, bakedmodel); + GlStateManager.disableAlpha(); + GlStateManager.disableRescaleNormal(); + GlStateManager.disableLighting(); + GlStateManager.popMatrix(); + this.textureManager.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.textureManager.getTexture(TextureMap.LOCATION_BLOCKS_TEXTURE).restoreLastBlurMipmap(); + } + + private void setupGuiTransform(int xPosition, int yPosition, boolean isGui3d) + { + GlStateManager.translate((float)xPosition, (float)yPosition, 100.0F + this.zLevel); + GlStateManager.translate(8.0F, 8.0F, 0.0F); + GlStateManager.scale(1.0F, -1.0F, 1.0F); + GlStateManager.scale(16.0F, 16.0F, 16.0F); + + if (isGui3d) + { + GlStateManager.enableLighting(); + } + else + { + GlStateManager.disableLighting(); + } + } + + public void renderItemAndEffectIntoGUI(ItemStack stack, int xPosition, int yPosition) + { + this.renderItemAndEffectIntoGUI(Minecraft.getMinecraft().player, stack, xPosition, yPosition); + } + + public void renderItemAndEffectIntoGUI(@Nullable EntityLivingBase p_184391_1_, final ItemStack p_184391_2_, int p_184391_3_, int p_184391_4_) + { + if (!p_184391_2_.isEmpty()) + { + this.zLevel += 50.0F; + + try + { + this.renderItemModelIntoGUI(p_184391_2_, p_184391_3_, p_184391_4_, this.getItemModelWithOverrides(p_184391_2_, (World)null, p_184391_1_)); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering item"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Item being rendered"); + crashreportcategory.addDetail("Item Type", new ICrashReportDetail() + { + public String call() throws Exception + { + return String.valueOf((Object)p_184391_2_.getItem()); + } + }); + crashreportcategory.addDetail("Registry Name", () -> String.valueOf(p_184391_2_.getItem().getRegistryName())); + crashreportcategory.addDetail("Item Aux", new ICrashReportDetail() + { + public String call() throws Exception + { + return String.valueOf(p_184391_2_.getMetadata()); + } + }); + crashreportcategory.addDetail("Item NBT", new ICrashReportDetail() + { + public String call() throws Exception + { + return String.valueOf((Object)p_184391_2_.getTagCompound()); + } + }); + crashreportcategory.addDetail("Item Foil", new ICrashReportDetail() + { + public String call() throws Exception + { + return String.valueOf(p_184391_2_.hasEffect()); + } + }); + throw new ReportedException(crashreport); + } + + this.zLevel -= 50.0F; + } + } + + public void renderItemOverlays(FontRenderer fr, ItemStack stack, int xPosition, int yPosition) + { + this.renderItemOverlayIntoGUI(fr, stack, xPosition, yPosition, (String)null); + } + + /** + * Renders the stack size and/or damage bar for the given ItemStack. + */ + public void renderItemOverlayIntoGUI(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, @Nullable String text) + { + if (!stack.isEmpty()) + { + if (stack.getCount() != 1 || text != null) + { + String s = text == null ? String.valueOf(stack.getCount()) : text; + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + GlStateManager.disableBlend(); + fr.drawStringWithShadow(s, (float)(xPosition + 19 - 2 - fr.getStringWidth(s)), (float)(yPosition + 6 + 3), 16777215); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + // Fixes opaque cooldown overlay a bit lower + // TODO: check if enabled blending still screws things up down the line. + GlStateManager.enableBlend(); + } + + if (stack.getItem().showDurabilityBar(stack)) + { + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + GlStateManager.disableTexture2D(); + GlStateManager.disableAlpha(); + GlStateManager.disableBlend(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + double health = stack.getItem().getDurabilityForDisplay(stack); + int rgbfordisplay = stack.getItem().getRGBDurabilityForDisplay(stack); + int i = Math.round(13.0F - (float)health * 13.0F); + int j = rgbfordisplay; + this.draw(bufferbuilder, xPosition + 2, yPosition + 13, 13, 2, 0, 0, 0, 255); + this.draw(bufferbuilder, xPosition + 2, yPosition + 13, i, 1, j >> 16 & 255, j >> 8 & 255, j & 255, 255); + GlStateManager.enableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + } + + EntityPlayerSP entityplayersp = Minecraft.getMinecraft().player; + float f3 = entityplayersp == null ? 0.0F : entityplayersp.getCooldownTracker().getCooldown(stack.getItem(), Minecraft.getMinecraft().getRenderPartialTicks()); + + if (f3 > 0.0F) + { + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + GlStateManager.disableTexture2D(); + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder bufferbuilder1 = tessellator1.getBuffer(); + this.draw(bufferbuilder1, xPosition, yPosition + MathHelper.floor(16.0F * (1.0F - f3)), 16, MathHelper.ceil(16.0F * f3), 255, 255, 255, 127); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + } + } + } + + /** + * Draw with the WorldRenderer + */ + private void draw(BufferBuilder renderer, int x, int y, int width, int height, int red, int green, int blue, int alpha) + { + renderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + renderer.pos((double)(x + 0), (double)(y + 0), 0.0D).color(red, green, blue, alpha).endVertex(); + renderer.pos((double)(x + 0), (double)(y + height), 0.0D).color(red, green, blue, alpha).endVertex(); + renderer.pos((double)(x + width), (double)(y + height), 0.0D).color(red, green, blue, alpha).endVertex(); + renderer.pos((double)(x + width), (double)(y + 0), 0.0D).color(red, green, blue, alpha).endVertex(); + Tessellator.getInstance().draw(); + } + + private void registerItems() + { + this.registerBlock(Blocks.ANVIL, "anvil_intact"); + this.registerBlock(Blocks.ANVIL, 1, "anvil_slightly_damaged"); + this.registerBlock(Blocks.ANVIL, 2, "anvil_very_damaged"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.BLACK.getMetadata(), "black_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.BLUE.getMetadata(), "blue_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.BROWN.getMetadata(), "brown_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.CYAN.getMetadata(), "cyan_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.GRAY.getMetadata(), "gray_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.GREEN.getMetadata(), "green_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.LIGHT_BLUE.getMetadata(), "light_blue_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.LIME.getMetadata(), "lime_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.MAGENTA.getMetadata(), "magenta_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.ORANGE.getMetadata(), "orange_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.PINK.getMetadata(), "pink_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.PURPLE.getMetadata(), "purple_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.RED.getMetadata(), "red_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.SILVER.getMetadata(), "silver_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.WHITE.getMetadata(), "white_carpet"); + this.registerBlock(Blocks.CARPET, EnumDyeColor.YELLOW.getMetadata(), "yellow_carpet"); + this.registerBlock(Blocks.COBBLESTONE_WALL, BlockWall.EnumType.MOSSY.getMetadata(), "mossy_cobblestone_wall"); + this.registerBlock(Blocks.COBBLESTONE_WALL, BlockWall.EnumType.NORMAL.getMetadata(), "cobblestone_wall"); + this.registerBlock(Blocks.DIRT, BlockDirt.DirtType.COARSE_DIRT.getMetadata(), "coarse_dirt"); + this.registerBlock(Blocks.DIRT, BlockDirt.DirtType.DIRT.getMetadata(), "dirt"); + this.registerBlock(Blocks.DIRT, BlockDirt.DirtType.PODZOL.getMetadata(), "podzol"); + this.registerBlock(Blocks.DOUBLE_PLANT, BlockDoublePlant.EnumPlantType.FERN.getMeta(), "double_fern"); + this.registerBlock(Blocks.DOUBLE_PLANT, BlockDoublePlant.EnumPlantType.GRASS.getMeta(), "double_grass"); + this.registerBlock(Blocks.DOUBLE_PLANT, BlockDoublePlant.EnumPlantType.PAEONIA.getMeta(), "paeonia"); + this.registerBlock(Blocks.DOUBLE_PLANT, BlockDoublePlant.EnumPlantType.ROSE.getMeta(), "double_rose"); + this.registerBlock(Blocks.DOUBLE_PLANT, BlockDoublePlant.EnumPlantType.SUNFLOWER.getMeta(), "sunflower"); + this.registerBlock(Blocks.DOUBLE_PLANT, BlockDoublePlant.EnumPlantType.SYRINGA.getMeta(), "syringa"); + this.registerBlock(Blocks.LEAVES, BlockPlanks.EnumType.BIRCH.getMetadata(), "birch_leaves"); + this.registerBlock(Blocks.LEAVES, BlockPlanks.EnumType.JUNGLE.getMetadata(), "jungle_leaves"); + this.registerBlock(Blocks.LEAVES, BlockPlanks.EnumType.OAK.getMetadata(), "oak_leaves"); + this.registerBlock(Blocks.LEAVES, BlockPlanks.EnumType.SPRUCE.getMetadata(), "spruce_leaves"); + this.registerBlock(Blocks.LEAVES2, BlockPlanks.EnumType.ACACIA.getMetadata() - 4, "acacia_leaves"); + this.registerBlock(Blocks.LEAVES2, BlockPlanks.EnumType.DARK_OAK.getMetadata() - 4, "dark_oak_leaves"); + this.registerBlock(Blocks.LOG, BlockPlanks.EnumType.BIRCH.getMetadata(), "birch_log"); + this.registerBlock(Blocks.LOG, BlockPlanks.EnumType.JUNGLE.getMetadata(), "jungle_log"); + this.registerBlock(Blocks.LOG, BlockPlanks.EnumType.OAK.getMetadata(), "oak_log"); + this.registerBlock(Blocks.LOG, BlockPlanks.EnumType.SPRUCE.getMetadata(), "spruce_log"); + this.registerBlock(Blocks.LOG2, BlockPlanks.EnumType.ACACIA.getMetadata() - 4, "acacia_log"); + this.registerBlock(Blocks.LOG2, BlockPlanks.EnumType.DARK_OAK.getMetadata() - 4, "dark_oak_log"); + this.registerBlock(Blocks.MONSTER_EGG, BlockSilverfish.EnumType.CHISELED_STONEBRICK.getMetadata(), "chiseled_brick_monster_egg"); + this.registerBlock(Blocks.MONSTER_EGG, BlockSilverfish.EnumType.COBBLESTONE.getMetadata(), "cobblestone_monster_egg"); + this.registerBlock(Blocks.MONSTER_EGG, BlockSilverfish.EnumType.CRACKED_STONEBRICK.getMetadata(), "cracked_brick_monster_egg"); + this.registerBlock(Blocks.MONSTER_EGG, BlockSilverfish.EnumType.MOSSY_STONEBRICK.getMetadata(), "mossy_brick_monster_egg"); + this.registerBlock(Blocks.MONSTER_EGG, BlockSilverfish.EnumType.STONE.getMetadata(), "stone_monster_egg"); + this.registerBlock(Blocks.MONSTER_EGG, BlockSilverfish.EnumType.STONEBRICK.getMetadata(), "stone_brick_monster_egg"); + this.registerBlock(Blocks.PLANKS, BlockPlanks.EnumType.ACACIA.getMetadata(), "acacia_planks"); + this.registerBlock(Blocks.PLANKS, BlockPlanks.EnumType.BIRCH.getMetadata(), "birch_planks"); + this.registerBlock(Blocks.PLANKS, BlockPlanks.EnumType.DARK_OAK.getMetadata(), "dark_oak_planks"); + this.registerBlock(Blocks.PLANKS, BlockPlanks.EnumType.JUNGLE.getMetadata(), "jungle_planks"); + this.registerBlock(Blocks.PLANKS, BlockPlanks.EnumType.OAK.getMetadata(), "oak_planks"); + this.registerBlock(Blocks.PLANKS, BlockPlanks.EnumType.SPRUCE.getMetadata(), "spruce_planks"); + this.registerBlock(Blocks.PRISMARINE, BlockPrismarine.EnumType.BRICKS.getMetadata(), "prismarine_bricks"); + this.registerBlock(Blocks.PRISMARINE, BlockPrismarine.EnumType.DARK.getMetadata(), "dark_prismarine"); + this.registerBlock(Blocks.PRISMARINE, BlockPrismarine.EnumType.ROUGH.getMetadata(), "prismarine"); + this.registerBlock(Blocks.QUARTZ_BLOCK, BlockQuartz.EnumType.CHISELED.getMetadata(), "chiseled_quartz_block"); + this.registerBlock(Blocks.QUARTZ_BLOCK, BlockQuartz.EnumType.DEFAULT.getMetadata(), "quartz_block"); + this.registerBlock(Blocks.QUARTZ_BLOCK, BlockQuartz.EnumType.LINES_Y.getMetadata(), "quartz_column"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.ALLIUM.getMeta(), "allium"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.BLUE_ORCHID.getMeta(), "blue_orchid"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.HOUSTONIA.getMeta(), "houstonia"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.ORANGE_TULIP.getMeta(), "orange_tulip"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.OXEYE_DAISY.getMeta(), "oxeye_daisy"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.PINK_TULIP.getMeta(), "pink_tulip"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.POPPY.getMeta(), "poppy"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.RED_TULIP.getMeta(), "red_tulip"); + this.registerBlock(Blocks.RED_FLOWER, BlockFlower.EnumFlowerType.WHITE_TULIP.getMeta(), "white_tulip"); + this.registerBlock(Blocks.SAND, BlockSand.EnumType.RED_SAND.getMetadata(), "red_sand"); + this.registerBlock(Blocks.SAND, BlockSand.EnumType.SAND.getMetadata(), "sand"); + this.registerBlock(Blocks.SANDSTONE, BlockSandStone.EnumType.CHISELED.getMetadata(), "chiseled_sandstone"); + this.registerBlock(Blocks.SANDSTONE, BlockSandStone.EnumType.DEFAULT.getMetadata(), "sandstone"); + this.registerBlock(Blocks.SANDSTONE, BlockSandStone.EnumType.SMOOTH.getMetadata(), "smooth_sandstone"); + this.registerBlock(Blocks.RED_SANDSTONE, BlockRedSandstone.EnumType.CHISELED.getMetadata(), "chiseled_red_sandstone"); + this.registerBlock(Blocks.RED_SANDSTONE, BlockRedSandstone.EnumType.DEFAULT.getMetadata(), "red_sandstone"); + this.registerBlock(Blocks.RED_SANDSTONE, BlockRedSandstone.EnumType.SMOOTH.getMetadata(), "smooth_red_sandstone"); + this.registerBlock(Blocks.SAPLING, BlockPlanks.EnumType.ACACIA.getMetadata(), "acacia_sapling"); + this.registerBlock(Blocks.SAPLING, BlockPlanks.EnumType.BIRCH.getMetadata(), "birch_sapling"); + this.registerBlock(Blocks.SAPLING, BlockPlanks.EnumType.DARK_OAK.getMetadata(), "dark_oak_sapling"); + this.registerBlock(Blocks.SAPLING, BlockPlanks.EnumType.JUNGLE.getMetadata(), "jungle_sapling"); + this.registerBlock(Blocks.SAPLING, BlockPlanks.EnumType.OAK.getMetadata(), "oak_sapling"); + this.registerBlock(Blocks.SAPLING, BlockPlanks.EnumType.SPRUCE.getMetadata(), "spruce_sapling"); + this.registerBlock(Blocks.SPONGE, 0, "sponge"); + this.registerBlock(Blocks.SPONGE, 1, "sponge_wet"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.BLACK.getMetadata(), "black_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.BLUE.getMetadata(), "blue_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.BROWN.getMetadata(), "brown_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.CYAN.getMetadata(), "cyan_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.GRAY.getMetadata(), "gray_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.GREEN.getMetadata(), "green_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.LIGHT_BLUE.getMetadata(), "light_blue_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.LIME.getMetadata(), "lime_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.MAGENTA.getMetadata(), "magenta_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.ORANGE.getMetadata(), "orange_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.PINK.getMetadata(), "pink_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.PURPLE.getMetadata(), "purple_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.RED.getMetadata(), "red_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.SILVER.getMetadata(), "silver_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.WHITE.getMetadata(), "white_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS, EnumDyeColor.YELLOW.getMetadata(), "yellow_stained_glass"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.BLACK.getMetadata(), "black_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.BLUE.getMetadata(), "blue_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.BROWN.getMetadata(), "brown_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.CYAN.getMetadata(), "cyan_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.GRAY.getMetadata(), "gray_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.GREEN.getMetadata(), "green_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.LIGHT_BLUE.getMetadata(), "light_blue_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.LIME.getMetadata(), "lime_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.MAGENTA.getMetadata(), "magenta_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.ORANGE.getMetadata(), "orange_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.PINK.getMetadata(), "pink_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.PURPLE.getMetadata(), "purple_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.RED.getMetadata(), "red_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.SILVER.getMetadata(), "silver_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.WHITE.getMetadata(), "white_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_GLASS_PANE, EnumDyeColor.YELLOW.getMetadata(), "yellow_stained_glass_pane"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.BLACK.getMetadata(), "black_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.BLUE.getMetadata(), "blue_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.BROWN.getMetadata(), "brown_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.CYAN.getMetadata(), "cyan_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.GRAY.getMetadata(), "gray_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.GREEN.getMetadata(), "green_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.LIGHT_BLUE.getMetadata(), "light_blue_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.LIME.getMetadata(), "lime_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.MAGENTA.getMetadata(), "magenta_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.ORANGE.getMetadata(), "orange_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.PINK.getMetadata(), "pink_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.PURPLE.getMetadata(), "purple_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.RED.getMetadata(), "red_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.SILVER.getMetadata(), "silver_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.WHITE.getMetadata(), "white_stained_hardened_clay"); + this.registerBlock(Blocks.STAINED_HARDENED_CLAY, EnumDyeColor.YELLOW.getMetadata(), "yellow_stained_hardened_clay"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.ANDESITE.getMetadata(), "andesite"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.ANDESITE_SMOOTH.getMetadata(), "andesite_smooth"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.DIORITE.getMetadata(), "diorite"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.DIORITE_SMOOTH.getMetadata(), "diorite_smooth"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.GRANITE.getMetadata(), "granite"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.GRANITE_SMOOTH.getMetadata(), "granite_smooth"); + this.registerBlock(Blocks.STONE, BlockStone.EnumType.STONE.getMetadata(), "stone"); + this.registerBlock(Blocks.STONEBRICK, BlockStoneBrick.EnumType.CRACKED.getMetadata(), "cracked_stonebrick"); + this.registerBlock(Blocks.STONEBRICK, BlockStoneBrick.EnumType.DEFAULT.getMetadata(), "stonebrick"); + this.registerBlock(Blocks.STONEBRICK, BlockStoneBrick.EnumType.CHISELED.getMetadata(), "chiseled_stonebrick"); + this.registerBlock(Blocks.STONEBRICK, BlockStoneBrick.EnumType.MOSSY.getMetadata(), "mossy_stonebrick"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.BRICK.getMetadata(), "brick_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.COBBLESTONE.getMetadata(), "cobblestone_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.WOOD.getMetadata(), "old_wood_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.NETHERBRICK.getMetadata(), "nether_brick_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.QUARTZ.getMetadata(), "quartz_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.SAND.getMetadata(), "sandstone_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.SMOOTHBRICK.getMetadata(), "stone_brick_slab"); + this.registerBlock(Blocks.STONE_SLAB, BlockStoneSlab.EnumType.STONE.getMetadata(), "stone_slab"); + this.registerBlock(Blocks.STONE_SLAB2, BlockStoneSlabNew.EnumType.RED_SANDSTONE.getMetadata(), "red_sandstone_slab"); + this.registerBlock(Blocks.TALLGRASS, BlockTallGrass.EnumType.DEAD_BUSH.getMeta(), "dead_bush"); + this.registerBlock(Blocks.TALLGRASS, BlockTallGrass.EnumType.FERN.getMeta(), "fern"); + this.registerBlock(Blocks.TALLGRASS, BlockTallGrass.EnumType.GRASS.getMeta(), "tall_grass"); + this.registerBlock(Blocks.WOODEN_SLAB, BlockPlanks.EnumType.ACACIA.getMetadata(), "acacia_slab"); + this.registerBlock(Blocks.WOODEN_SLAB, BlockPlanks.EnumType.BIRCH.getMetadata(), "birch_slab"); + this.registerBlock(Blocks.WOODEN_SLAB, BlockPlanks.EnumType.DARK_OAK.getMetadata(), "dark_oak_slab"); + this.registerBlock(Blocks.WOODEN_SLAB, BlockPlanks.EnumType.JUNGLE.getMetadata(), "jungle_slab"); + this.registerBlock(Blocks.WOODEN_SLAB, BlockPlanks.EnumType.OAK.getMetadata(), "oak_slab"); + this.registerBlock(Blocks.WOODEN_SLAB, BlockPlanks.EnumType.SPRUCE.getMetadata(), "spruce_slab"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.BLACK.getMetadata(), "black_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.BLUE.getMetadata(), "blue_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.BROWN.getMetadata(), "brown_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.CYAN.getMetadata(), "cyan_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.GRAY.getMetadata(), "gray_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.GREEN.getMetadata(), "green_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.LIGHT_BLUE.getMetadata(), "light_blue_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.LIME.getMetadata(), "lime_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.MAGENTA.getMetadata(), "magenta_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.ORANGE.getMetadata(), "orange_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.PINK.getMetadata(), "pink_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.PURPLE.getMetadata(), "purple_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.RED.getMetadata(), "red_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.SILVER.getMetadata(), "silver_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.WHITE.getMetadata(), "white_wool"); + this.registerBlock(Blocks.WOOL, EnumDyeColor.YELLOW.getMetadata(), "yellow_wool"); + this.registerBlock(Blocks.FARMLAND, "farmland"); + this.registerBlock(Blocks.ACACIA_STAIRS, "acacia_stairs"); + this.registerBlock(Blocks.ACTIVATOR_RAIL, "activator_rail"); + this.registerBlock(Blocks.BEACON, "beacon"); + this.registerBlock(Blocks.BEDROCK, "bedrock"); + this.registerBlock(Blocks.BIRCH_STAIRS, "birch_stairs"); + this.registerBlock(Blocks.BOOKSHELF, "bookshelf"); + this.registerBlock(Blocks.BRICK_BLOCK, "brick_block"); + this.registerBlock(Blocks.BRICK_BLOCK, "brick_block"); + this.registerBlock(Blocks.BRICK_STAIRS, "brick_stairs"); + this.registerBlock(Blocks.BROWN_MUSHROOM, "brown_mushroom"); + this.registerBlock(Blocks.CACTUS, "cactus"); + this.registerBlock(Blocks.CLAY, "clay"); + this.registerBlock(Blocks.COAL_BLOCK, "coal_block"); + this.registerBlock(Blocks.COAL_ORE, "coal_ore"); + this.registerBlock(Blocks.COBBLESTONE, "cobblestone"); + this.registerBlock(Blocks.CRAFTING_TABLE, "crafting_table"); + this.registerBlock(Blocks.DARK_OAK_STAIRS, "dark_oak_stairs"); + this.registerBlock(Blocks.DAYLIGHT_DETECTOR, "daylight_detector"); + this.registerBlock(Blocks.DEADBUSH, "dead_bush"); + this.registerBlock(Blocks.DETECTOR_RAIL, "detector_rail"); + this.registerBlock(Blocks.DIAMOND_BLOCK, "diamond_block"); + this.registerBlock(Blocks.DIAMOND_ORE, "diamond_ore"); + this.registerBlock(Blocks.DISPENSER, "dispenser"); + this.registerBlock(Blocks.DROPPER, "dropper"); + this.registerBlock(Blocks.EMERALD_BLOCK, "emerald_block"); + this.registerBlock(Blocks.EMERALD_ORE, "emerald_ore"); + this.registerBlock(Blocks.ENCHANTING_TABLE, "enchanting_table"); + this.registerBlock(Blocks.END_PORTAL_FRAME, "end_portal_frame"); + this.registerBlock(Blocks.END_STONE, "end_stone"); + this.registerBlock(Blocks.OAK_FENCE, "oak_fence"); + this.registerBlock(Blocks.SPRUCE_FENCE, "spruce_fence"); + this.registerBlock(Blocks.BIRCH_FENCE, "birch_fence"); + this.registerBlock(Blocks.JUNGLE_FENCE, "jungle_fence"); + this.registerBlock(Blocks.DARK_OAK_FENCE, "dark_oak_fence"); + this.registerBlock(Blocks.ACACIA_FENCE, "acacia_fence"); + this.registerBlock(Blocks.OAK_FENCE_GATE, "oak_fence_gate"); + this.registerBlock(Blocks.SPRUCE_FENCE_GATE, "spruce_fence_gate"); + this.registerBlock(Blocks.BIRCH_FENCE_GATE, "birch_fence_gate"); + this.registerBlock(Blocks.JUNGLE_FENCE_GATE, "jungle_fence_gate"); + this.registerBlock(Blocks.DARK_OAK_FENCE_GATE, "dark_oak_fence_gate"); + this.registerBlock(Blocks.ACACIA_FENCE_GATE, "acacia_fence_gate"); + this.registerBlock(Blocks.FURNACE, "furnace"); + this.registerBlock(Blocks.GLASS, "glass"); + this.registerBlock(Blocks.GLASS_PANE, "glass_pane"); + this.registerBlock(Blocks.GLOWSTONE, "glowstone"); + this.registerBlock(Blocks.GOLDEN_RAIL, "golden_rail"); + this.registerBlock(Blocks.GOLD_BLOCK, "gold_block"); + this.registerBlock(Blocks.GOLD_ORE, "gold_ore"); + this.registerBlock(Blocks.GRASS, "grass"); + this.registerBlock(Blocks.GRASS_PATH, "grass_path"); + this.registerBlock(Blocks.GRAVEL, "gravel"); + this.registerBlock(Blocks.HARDENED_CLAY, "hardened_clay"); + this.registerBlock(Blocks.HAY_BLOCK, "hay_block"); + this.registerBlock(Blocks.HEAVY_WEIGHTED_PRESSURE_PLATE, "heavy_weighted_pressure_plate"); + this.registerBlock(Blocks.HOPPER, "hopper"); + this.registerBlock(Blocks.ICE, "ice"); + this.registerBlock(Blocks.IRON_BARS, "iron_bars"); + this.registerBlock(Blocks.IRON_BLOCK, "iron_block"); + this.registerBlock(Blocks.IRON_ORE, "iron_ore"); + this.registerBlock(Blocks.IRON_TRAPDOOR, "iron_trapdoor"); + this.registerBlock(Blocks.JUKEBOX, "jukebox"); + this.registerBlock(Blocks.JUNGLE_STAIRS, "jungle_stairs"); + this.registerBlock(Blocks.LADDER, "ladder"); + this.registerBlock(Blocks.LAPIS_BLOCK, "lapis_block"); + this.registerBlock(Blocks.LAPIS_ORE, "lapis_ore"); + this.registerBlock(Blocks.LEVER, "lever"); + this.registerBlock(Blocks.LIGHT_WEIGHTED_PRESSURE_PLATE, "light_weighted_pressure_plate"); + this.registerBlock(Blocks.LIT_PUMPKIN, "lit_pumpkin"); + this.registerBlock(Blocks.MELON_BLOCK, "melon_block"); + this.registerBlock(Blocks.MOSSY_COBBLESTONE, "mossy_cobblestone"); + this.registerBlock(Blocks.MYCELIUM, "mycelium"); + this.registerBlock(Blocks.NETHERRACK, "netherrack"); + this.registerBlock(Blocks.NETHER_BRICK, "nether_brick"); + this.registerBlock(Blocks.NETHER_BRICK_FENCE, "nether_brick_fence"); + this.registerBlock(Blocks.NETHER_BRICK_STAIRS, "nether_brick_stairs"); + this.registerBlock(Blocks.NOTEBLOCK, "noteblock"); + this.registerBlock(Blocks.OAK_STAIRS, "oak_stairs"); + this.registerBlock(Blocks.OBSIDIAN, "obsidian"); + this.registerBlock(Blocks.PACKED_ICE, "packed_ice"); + this.registerBlock(Blocks.PISTON, "piston"); + this.registerBlock(Blocks.PUMPKIN, "pumpkin"); + this.registerBlock(Blocks.QUARTZ_ORE, "quartz_ore"); + this.registerBlock(Blocks.QUARTZ_STAIRS, "quartz_stairs"); + this.registerBlock(Blocks.RAIL, "rail"); + this.registerBlock(Blocks.REDSTONE_BLOCK, "redstone_block"); + this.registerBlock(Blocks.REDSTONE_LAMP, "redstone_lamp"); + this.registerBlock(Blocks.REDSTONE_ORE, "redstone_ore"); + this.registerBlock(Blocks.REDSTONE_TORCH, "redstone_torch"); + this.registerBlock(Blocks.RED_MUSHROOM, "red_mushroom"); + this.registerBlock(Blocks.SANDSTONE_STAIRS, "sandstone_stairs"); + this.registerBlock(Blocks.RED_SANDSTONE_STAIRS, "red_sandstone_stairs"); + this.registerBlock(Blocks.SEA_LANTERN, "sea_lantern"); + this.registerBlock(Blocks.SLIME_BLOCK, "slime"); + this.registerBlock(Blocks.SNOW, "snow"); + this.registerBlock(Blocks.SNOW_LAYER, "snow_layer"); + this.registerBlock(Blocks.SOUL_SAND, "soul_sand"); + this.registerBlock(Blocks.SPRUCE_STAIRS, "spruce_stairs"); + this.registerBlock(Blocks.STICKY_PISTON, "sticky_piston"); + this.registerBlock(Blocks.STONE_BRICK_STAIRS, "stone_brick_stairs"); + this.registerBlock(Blocks.STONE_BUTTON, "stone_button"); + this.registerBlock(Blocks.STONE_PRESSURE_PLATE, "stone_pressure_plate"); + this.registerBlock(Blocks.STONE_STAIRS, "stone_stairs"); + this.registerBlock(Blocks.TNT, "tnt"); + this.registerBlock(Blocks.TORCH, "torch"); + this.registerBlock(Blocks.TRAPDOOR, "trapdoor"); + this.registerBlock(Blocks.TRIPWIRE_HOOK, "tripwire_hook"); + this.registerBlock(Blocks.VINE, "vine"); + this.registerBlock(Blocks.WATERLILY, "waterlily"); + this.registerBlock(Blocks.WEB, "web"); + this.registerBlock(Blocks.WOODEN_BUTTON, "wooden_button"); + this.registerBlock(Blocks.WOODEN_PRESSURE_PLATE, "wooden_pressure_plate"); + this.registerBlock(Blocks.YELLOW_FLOWER, BlockFlower.EnumFlowerType.DANDELION.getMeta(), "dandelion"); + this.registerBlock(Blocks.END_ROD, "end_rod"); + this.registerBlock(Blocks.CHORUS_PLANT, "chorus_plant"); + this.registerBlock(Blocks.CHORUS_FLOWER, "chorus_flower"); + this.registerBlock(Blocks.PURPUR_BLOCK, "purpur_block"); + this.registerBlock(Blocks.PURPUR_PILLAR, "purpur_pillar"); + this.registerBlock(Blocks.PURPUR_STAIRS, "purpur_stairs"); + this.registerBlock(Blocks.PURPUR_SLAB, "purpur_slab"); + this.registerBlock(Blocks.PURPUR_DOUBLE_SLAB, "purpur_double_slab"); + this.registerBlock(Blocks.END_BRICKS, "end_bricks"); + this.registerBlock(Blocks.MAGMA, "magma"); + this.registerBlock(Blocks.NETHER_WART_BLOCK, "nether_wart_block"); + this.registerBlock(Blocks.RED_NETHER_BRICK, "red_nether_brick"); + this.registerBlock(Blocks.BONE_BLOCK, "bone_block"); + this.registerBlock(Blocks.STRUCTURE_VOID, "structure_void"); + this.registerBlock(Blocks.OBSERVER, "observer"); + this.registerBlock(Blocks.WHITE_SHULKER_BOX, "white_shulker_box"); + this.registerBlock(Blocks.ORANGE_SHULKER_BOX, "orange_shulker_box"); + this.registerBlock(Blocks.MAGENTA_SHULKER_BOX, "magenta_shulker_box"); + this.registerBlock(Blocks.LIGHT_BLUE_SHULKER_BOX, "light_blue_shulker_box"); + this.registerBlock(Blocks.YELLOW_SHULKER_BOX, "yellow_shulker_box"); + this.registerBlock(Blocks.LIME_SHULKER_BOX, "lime_shulker_box"); + this.registerBlock(Blocks.PINK_SHULKER_BOX, "pink_shulker_box"); + this.registerBlock(Blocks.GRAY_SHULKER_BOX, "gray_shulker_box"); + this.registerBlock(Blocks.SILVER_SHULKER_BOX, "silver_shulker_box"); + this.registerBlock(Blocks.CYAN_SHULKER_BOX, "cyan_shulker_box"); + this.registerBlock(Blocks.PURPLE_SHULKER_BOX, "purple_shulker_box"); + this.registerBlock(Blocks.BLUE_SHULKER_BOX, "blue_shulker_box"); + this.registerBlock(Blocks.BROWN_SHULKER_BOX, "brown_shulker_box"); + this.registerBlock(Blocks.GREEN_SHULKER_BOX, "green_shulker_box"); + this.registerBlock(Blocks.RED_SHULKER_BOX, "red_shulker_box"); + this.registerBlock(Blocks.BLACK_SHULKER_BOX, "black_shulker_box"); + this.registerBlock(Blocks.WHITE_GLAZED_TERRACOTTA, "white_glazed_terracotta"); + this.registerBlock(Blocks.ORANGE_GLAZED_TERRACOTTA, "orange_glazed_terracotta"); + this.registerBlock(Blocks.MAGENTA_GLAZED_TERRACOTTA, "magenta_glazed_terracotta"); + this.registerBlock(Blocks.LIGHT_BLUE_GLAZED_TERRACOTTA, "light_blue_glazed_terracotta"); + this.registerBlock(Blocks.YELLOW_GLAZED_TERRACOTTA, "yellow_glazed_terracotta"); + this.registerBlock(Blocks.LIME_GLAZED_TERRACOTTA, "lime_glazed_terracotta"); + this.registerBlock(Blocks.PINK_GLAZED_TERRACOTTA, "pink_glazed_terracotta"); + this.registerBlock(Blocks.GRAY_GLAZED_TERRACOTTA, "gray_glazed_terracotta"); + this.registerBlock(Blocks.SILVER_GLAZED_TERRACOTTA, "silver_glazed_terracotta"); + this.registerBlock(Blocks.CYAN_GLAZED_TERRACOTTA, "cyan_glazed_terracotta"); + this.registerBlock(Blocks.PURPLE_GLAZED_TERRACOTTA, "purple_glazed_terracotta"); + this.registerBlock(Blocks.BLUE_GLAZED_TERRACOTTA, "blue_glazed_terracotta"); + this.registerBlock(Blocks.BROWN_GLAZED_TERRACOTTA, "brown_glazed_terracotta"); + this.registerBlock(Blocks.GREEN_GLAZED_TERRACOTTA, "green_glazed_terracotta"); + this.registerBlock(Blocks.RED_GLAZED_TERRACOTTA, "red_glazed_terracotta"); + this.registerBlock(Blocks.BLACK_GLAZED_TERRACOTTA, "black_glazed_terracotta"); + + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + this.registerBlock(Blocks.CONCRETE, enumdyecolor.getMetadata(), enumdyecolor.getDyeColorName() + "_concrete"); + this.registerBlock(Blocks.CONCRETE_POWDER, enumdyecolor.getMetadata(), enumdyecolor.getDyeColorName() + "_concrete_powder"); + } + + this.registerBlock(Blocks.CHEST, "chest"); + this.registerBlock(Blocks.TRAPPED_CHEST, "trapped_chest"); + this.registerBlock(Blocks.ENDER_CHEST, "ender_chest"); + this.registerItem(Items.IRON_SHOVEL, "iron_shovel"); + this.registerItem(Items.IRON_PICKAXE, "iron_pickaxe"); + this.registerItem(Items.IRON_AXE, "iron_axe"); + this.registerItem(Items.FLINT_AND_STEEL, "flint_and_steel"); + this.registerItem(Items.APPLE, "apple"); + this.registerItem(Items.BOW, "bow"); + this.registerItem(Items.ARROW, "arrow"); + this.registerItem(Items.SPECTRAL_ARROW, "spectral_arrow"); + this.registerItem(Items.TIPPED_ARROW, "tipped_arrow"); + this.registerItem(Items.COAL, 0, "coal"); + this.registerItem(Items.COAL, 1, "charcoal"); + this.registerItem(Items.DIAMOND, "diamond"); + this.registerItem(Items.IRON_INGOT, "iron_ingot"); + this.registerItem(Items.GOLD_INGOT, "gold_ingot"); + this.registerItem(Items.IRON_SWORD, "iron_sword"); + this.registerItem(Items.WOODEN_SWORD, "wooden_sword"); + this.registerItem(Items.WOODEN_SHOVEL, "wooden_shovel"); + this.registerItem(Items.WOODEN_PICKAXE, "wooden_pickaxe"); + this.registerItem(Items.WOODEN_AXE, "wooden_axe"); + this.registerItem(Items.STONE_SWORD, "stone_sword"); + this.registerItem(Items.STONE_SHOVEL, "stone_shovel"); + this.registerItem(Items.STONE_PICKAXE, "stone_pickaxe"); + this.registerItem(Items.STONE_AXE, "stone_axe"); + this.registerItem(Items.DIAMOND_SWORD, "diamond_sword"); + this.registerItem(Items.DIAMOND_SHOVEL, "diamond_shovel"); + this.registerItem(Items.DIAMOND_PICKAXE, "diamond_pickaxe"); + this.registerItem(Items.DIAMOND_AXE, "diamond_axe"); + this.registerItem(Items.STICK, "stick"); + this.registerItem(Items.BOWL, "bowl"); + this.registerItem(Items.MUSHROOM_STEW, "mushroom_stew"); + this.registerItem(Items.GOLDEN_SWORD, "golden_sword"); + this.registerItem(Items.GOLDEN_SHOVEL, "golden_shovel"); + this.registerItem(Items.GOLDEN_PICKAXE, "golden_pickaxe"); + this.registerItem(Items.GOLDEN_AXE, "golden_axe"); + this.registerItem(Items.STRING, "string"); + this.registerItem(Items.FEATHER, "feather"); + this.registerItem(Items.GUNPOWDER, "gunpowder"); + this.registerItem(Items.WOODEN_HOE, "wooden_hoe"); + this.registerItem(Items.STONE_HOE, "stone_hoe"); + this.registerItem(Items.IRON_HOE, "iron_hoe"); + this.registerItem(Items.DIAMOND_HOE, "diamond_hoe"); + this.registerItem(Items.GOLDEN_HOE, "golden_hoe"); + this.registerItem(Items.WHEAT_SEEDS, "wheat_seeds"); + this.registerItem(Items.WHEAT, "wheat"); + this.registerItem(Items.BREAD, "bread"); + this.registerItem(Items.LEATHER_HELMET, "leather_helmet"); + this.registerItem(Items.LEATHER_CHESTPLATE, "leather_chestplate"); + this.registerItem(Items.LEATHER_LEGGINGS, "leather_leggings"); + this.registerItem(Items.LEATHER_BOOTS, "leather_boots"); + this.registerItem(Items.CHAINMAIL_HELMET, "chainmail_helmet"); + this.registerItem(Items.CHAINMAIL_CHESTPLATE, "chainmail_chestplate"); + this.registerItem(Items.CHAINMAIL_LEGGINGS, "chainmail_leggings"); + this.registerItem(Items.CHAINMAIL_BOOTS, "chainmail_boots"); + this.registerItem(Items.IRON_HELMET, "iron_helmet"); + this.registerItem(Items.IRON_CHESTPLATE, "iron_chestplate"); + this.registerItem(Items.IRON_LEGGINGS, "iron_leggings"); + this.registerItem(Items.IRON_BOOTS, "iron_boots"); + this.registerItem(Items.DIAMOND_HELMET, "diamond_helmet"); + this.registerItem(Items.DIAMOND_CHESTPLATE, "diamond_chestplate"); + this.registerItem(Items.DIAMOND_LEGGINGS, "diamond_leggings"); + this.registerItem(Items.DIAMOND_BOOTS, "diamond_boots"); + this.registerItem(Items.GOLDEN_HELMET, "golden_helmet"); + this.registerItem(Items.GOLDEN_CHESTPLATE, "golden_chestplate"); + this.registerItem(Items.GOLDEN_LEGGINGS, "golden_leggings"); + this.registerItem(Items.GOLDEN_BOOTS, "golden_boots"); + this.registerItem(Items.FLINT, "flint"); + this.registerItem(Items.PORKCHOP, "porkchop"); + this.registerItem(Items.COOKED_PORKCHOP, "cooked_porkchop"); + this.registerItem(Items.PAINTING, "painting"); + this.registerItem(Items.GOLDEN_APPLE, "golden_apple"); + this.registerItem(Items.GOLDEN_APPLE, 1, "golden_apple"); + this.registerItem(Items.SIGN, "sign"); + this.registerItem(Items.OAK_DOOR, "oak_door"); + this.registerItem(Items.SPRUCE_DOOR, "spruce_door"); + this.registerItem(Items.BIRCH_DOOR, "birch_door"); + this.registerItem(Items.JUNGLE_DOOR, "jungle_door"); + this.registerItem(Items.ACACIA_DOOR, "acacia_door"); + this.registerItem(Items.DARK_OAK_DOOR, "dark_oak_door"); + this.registerItem(Items.BUCKET, "bucket"); + this.registerItem(Items.WATER_BUCKET, "water_bucket"); + this.registerItem(Items.LAVA_BUCKET, "lava_bucket"); + this.registerItem(Items.MINECART, "minecart"); + this.registerItem(Items.SADDLE, "saddle"); + this.registerItem(Items.IRON_DOOR, "iron_door"); + this.registerItem(Items.REDSTONE, "redstone"); + this.registerItem(Items.SNOWBALL, "snowball"); + this.registerItem(Items.BOAT, "oak_boat"); + this.registerItem(Items.SPRUCE_BOAT, "spruce_boat"); + this.registerItem(Items.BIRCH_BOAT, "birch_boat"); + this.registerItem(Items.JUNGLE_BOAT, "jungle_boat"); + this.registerItem(Items.ACACIA_BOAT, "acacia_boat"); + this.registerItem(Items.DARK_OAK_BOAT, "dark_oak_boat"); + this.registerItem(Items.LEATHER, "leather"); + this.registerItem(Items.MILK_BUCKET, "milk_bucket"); + this.registerItem(Items.BRICK, "brick"); + this.registerItem(Items.CLAY_BALL, "clay_ball"); + this.registerItem(Items.REEDS, "reeds"); + this.registerItem(Items.PAPER, "paper"); + this.registerItem(Items.BOOK, "book"); + this.registerItem(Items.SLIME_BALL, "slime_ball"); + this.registerItem(Items.CHEST_MINECART, "chest_minecart"); + this.registerItem(Items.FURNACE_MINECART, "furnace_minecart"); + this.registerItem(Items.EGG, "egg"); + this.registerItem(Items.COMPASS, "compass"); + this.registerItem(Items.FISHING_ROD, "fishing_rod"); + this.registerItem(Items.CLOCK, "clock"); + this.registerItem(Items.GLOWSTONE_DUST, "glowstone_dust"); + this.registerItem(Items.FISH, ItemFishFood.FishType.COD.getMetadata(), "cod"); + this.registerItem(Items.FISH, ItemFishFood.FishType.SALMON.getMetadata(), "salmon"); + this.registerItem(Items.FISH, ItemFishFood.FishType.CLOWNFISH.getMetadata(), "clownfish"); + this.registerItem(Items.FISH, ItemFishFood.FishType.PUFFERFISH.getMetadata(), "pufferfish"); + this.registerItem(Items.COOKED_FISH, ItemFishFood.FishType.COD.getMetadata(), "cooked_cod"); + this.registerItem(Items.COOKED_FISH, ItemFishFood.FishType.SALMON.getMetadata(), "cooked_salmon"); + this.registerItem(Items.DYE, EnumDyeColor.BLACK.getDyeDamage(), "dye_black"); + this.registerItem(Items.DYE, EnumDyeColor.RED.getDyeDamage(), "dye_red"); + this.registerItem(Items.DYE, EnumDyeColor.GREEN.getDyeDamage(), "dye_green"); + this.registerItem(Items.DYE, EnumDyeColor.BROWN.getDyeDamage(), "dye_brown"); + this.registerItem(Items.DYE, EnumDyeColor.BLUE.getDyeDamage(), "dye_blue"); + this.registerItem(Items.DYE, EnumDyeColor.PURPLE.getDyeDamage(), "dye_purple"); + this.registerItem(Items.DYE, EnumDyeColor.CYAN.getDyeDamage(), "dye_cyan"); + this.registerItem(Items.DYE, EnumDyeColor.SILVER.getDyeDamage(), "dye_silver"); + this.registerItem(Items.DYE, EnumDyeColor.GRAY.getDyeDamage(), "dye_gray"); + this.registerItem(Items.DYE, EnumDyeColor.PINK.getDyeDamage(), "dye_pink"); + this.registerItem(Items.DYE, EnumDyeColor.LIME.getDyeDamage(), "dye_lime"); + this.registerItem(Items.DYE, EnumDyeColor.YELLOW.getDyeDamage(), "dye_yellow"); + this.registerItem(Items.DYE, EnumDyeColor.LIGHT_BLUE.getDyeDamage(), "dye_light_blue"); + this.registerItem(Items.DYE, EnumDyeColor.MAGENTA.getDyeDamage(), "dye_magenta"); + this.registerItem(Items.DYE, EnumDyeColor.ORANGE.getDyeDamage(), "dye_orange"); + this.registerItem(Items.DYE, EnumDyeColor.WHITE.getDyeDamage(), "dye_white"); + this.registerItem(Items.BONE, "bone"); + this.registerItem(Items.SUGAR, "sugar"); + this.registerItem(Items.CAKE, "cake"); + this.registerItem(Items.REPEATER, "repeater"); + this.registerItem(Items.COOKIE, "cookie"); + this.registerItem(Items.SHEARS, "shears"); + this.registerItem(Items.MELON, "melon"); + this.registerItem(Items.PUMPKIN_SEEDS, "pumpkin_seeds"); + this.registerItem(Items.MELON_SEEDS, "melon_seeds"); + this.registerItem(Items.BEEF, "beef"); + this.registerItem(Items.COOKED_BEEF, "cooked_beef"); + this.registerItem(Items.CHICKEN, "chicken"); + this.registerItem(Items.COOKED_CHICKEN, "cooked_chicken"); + this.registerItem(Items.RABBIT, "rabbit"); + this.registerItem(Items.COOKED_RABBIT, "cooked_rabbit"); + this.registerItem(Items.MUTTON, "mutton"); + this.registerItem(Items.COOKED_MUTTON, "cooked_mutton"); + this.registerItem(Items.RABBIT_FOOT, "rabbit_foot"); + this.registerItem(Items.RABBIT_HIDE, "rabbit_hide"); + this.registerItem(Items.RABBIT_STEW, "rabbit_stew"); + this.registerItem(Items.ROTTEN_FLESH, "rotten_flesh"); + this.registerItem(Items.ENDER_PEARL, "ender_pearl"); + this.registerItem(Items.BLAZE_ROD, "blaze_rod"); + this.registerItem(Items.GHAST_TEAR, "ghast_tear"); + this.registerItem(Items.GOLD_NUGGET, "gold_nugget"); + this.registerItem(Items.NETHER_WART, "nether_wart"); + this.registerItem(Items.BEETROOT, "beetroot"); + this.registerItem(Items.BEETROOT_SEEDS, "beetroot_seeds"); + this.registerItem(Items.BEETROOT_SOUP, "beetroot_soup"); + this.registerItem(Items.TOTEM_OF_UNDYING, "totem"); + this.registerItem(Items.POTIONITEM, "bottle_drinkable"); + this.registerItem(Items.SPLASH_POTION, "bottle_splash"); + this.registerItem(Items.LINGERING_POTION, "bottle_lingering"); + this.registerItem(Items.GLASS_BOTTLE, "glass_bottle"); + this.registerItem(Items.DRAGON_BREATH, "dragon_breath"); + this.registerItem(Items.SPIDER_EYE, "spider_eye"); + this.registerItem(Items.FERMENTED_SPIDER_EYE, "fermented_spider_eye"); + this.registerItem(Items.BLAZE_POWDER, "blaze_powder"); + this.registerItem(Items.MAGMA_CREAM, "magma_cream"); + this.registerItem(Items.BREWING_STAND, "brewing_stand"); + this.registerItem(Items.CAULDRON, "cauldron"); + this.registerItem(Items.ENDER_EYE, "ender_eye"); + this.registerItem(Items.SPECKLED_MELON, "speckled_melon"); + this.itemModelMesher.register(Items.SPAWN_EGG, new ItemMeshDefinition() + { + public ModelResourceLocation getModelLocation(ItemStack stack) + { + return new ModelResourceLocation("spawn_egg", "inventory"); + } + }); + this.registerItem(Items.EXPERIENCE_BOTTLE, "experience_bottle"); + this.registerItem(Items.FIRE_CHARGE, "fire_charge"); + this.registerItem(Items.WRITABLE_BOOK, "writable_book"); + this.registerItem(Items.EMERALD, "emerald"); + this.registerItem(Items.ITEM_FRAME, "item_frame"); + this.registerItem(Items.FLOWER_POT, "flower_pot"); + this.registerItem(Items.CARROT, "carrot"); + this.registerItem(Items.POTATO, "potato"); + this.registerItem(Items.BAKED_POTATO, "baked_potato"); + this.registerItem(Items.POISONOUS_POTATO, "poisonous_potato"); + this.registerItem(Items.MAP, "map"); + this.registerItem(Items.GOLDEN_CARROT, "golden_carrot"); + this.registerItem(Items.SKULL, 0, "skull_skeleton"); + this.registerItem(Items.SKULL, 1, "skull_wither"); + this.registerItem(Items.SKULL, 2, "skull_zombie"); + this.registerItem(Items.SKULL, 3, "skull_char"); + this.registerItem(Items.SKULL, 4, "skull_creeper"); + this.registerItem(Items.SKULL, 5, "skull_dragon"); + this.registerItem(Items.CARROT_ON_A_STICK, "carrot_on_a_stick"); + this.registerItem(Items.NETHER_STAR, "nether_star"); + this.registerItem(Items.END_CRYSTAL, "end_crystal"); + this.registerItem(Items.PUMPKIN_PIE, "pumpkin_pie"); + this.registerItem(Items.FIREWORK_CHARGE, "firework_charge"); + this.registerItem(Items.COMPARATOR, "comparator"); + this.registerItem(Items.NETHERBRICK, "netherbrick"); + this.registerItem(Items.QUARTZ, "quartz"); + this.registerItem(Items.TNT_MINECART, "tnt_minecart"); + this.registerItem(Items.HOPPER_MINECART, "hopper_minecart"); + this.registerItem(Items.ARMOR_STAND, "armor_stand"); + this.registerItem(Items.IRON_HORSE_ARMOR, "iron_horse_armor"); + this.registerItem(Items.GOLDEN_HORSE_ARMOR, "golden_horse_armor"); + this.registerItem(Items.DIAMOND_HORSE_ARMOR, "diamond_horse_armor"); + this.registerItem(Items.LEAD, "lead"); + this.registerItem(Items.NAME_TAG, "name_tag"); + this.itemModelMesher.register(Items.BANNER, new ItemMeshDefinition() + { + public ModelResourceLocation getModelLocation(ItemStack stack) + { + return new ModelResourceLocation("banner", "inventory"); + } + }); + this.itemModelMesher.register(Items.BED, new ItemMeshDefinition() + { + public ModelResourceLocation getModelLocation(ItemStack stack) + { + return new ModelResourceLocation("bed", "inventory"); + } + }); + this.itemModelMesher.register(Items.SHIELD, new ItemMeshDefinition() + { + public ModelResourceLocation getModelLocation(ItemStack stack) + { + return new ModelResourceLocation("shield", "inventory"); + } + }); + this.registerItem(Items.ELYTRA, "elytra"); + this.registerItem(Items.CHORUS_FRUIT, "chorus_fruit"); + this.registerItem(Items.CHORUS_FRUIT_POPPED, "chorus_fruit_popped"); + this.registerItem(Items.SHULKER_SHELL, "shulker_shell"); + this.registerItem(Items.IRON_NUGGET, "iron_nugget"); + this.registerItem(Items.RECORD_13, "record_13"); + this.registerItem(Items.RECORD_CAT, "record_cat"); + this.registerItem(Items.RECORD_BLOCKS, "record_blocks"); + this.registerItem(Items.RECORD_CHIRP, "record_chirp"); + this.registerItem(Items.RECORD_FAR, "record_far"); + this.registerItem(Items.RECORD_MALL, "record_mall"); + this.registerItem(Items.RECORD_MELLOHI, "record_mellohi"); + this.registerItem(Items.RECORD_STAL, "record_stal"); + this.registerItem(Items.RECORD_STRAD, "record_strad"); + this.registerItem(Items.RECORD_WARD, "record_ward"); + this.registerItem(Items.RECORD_11, "record_11"); + this.registerItem(Items.RECORD_WAIT, "record_wait"); + this.registerItem(Items.PRISMARINE_SHARD, "prismarine_shard"); + this.registerItem(Items.PRISMARINE_CRYSTALS, "prismarine_crystals"); + this.registerItem(Items.KNOWLEDGE_BOOK, "knowledge_book"); + this.itemModelMesher.register(Items.ENCHANTED_BOOK, new ItemMeshDefinition() + { + public ModelResourceLocation getModelLocation(ItemStack stack) + { + return new ModelResourceLocation("enchanted_book", "inventory"); + } + }); + this.itemModelMesher.register(Items.FILLED_MAP, new ItemMeshDefinition() + { + public ModelResourceLocation getModelLocation(ItemStack stack) + { + return new ModelResourceLocation("filled_map", "inventory"); + } + }); + this.registerBlock(Blocks.COMMAND_BLOCK, "command_block"); + this.registerItem(Items.FIREWORKS, "fireworks"); + this.registerItem(Items.COMMAND_BLOCK_MINECART, "command_block_minecart"); + this.registerBlock(Blocks.BARRIER, "barrier"); + this.registerBlock(Blocks.MOB_SPAWNER, "mob_spawner"); + this.registerItem(Items.WRITTEN_BOOK, "written_book"); + this.registerBlock(Blocks.BROWN_MUSHROOM_BLOCK, BlockHugeMushroom.EnumType.ALL_INSIDE.getMetadata(), "brown_mushroom_block"); + this.registerBlock(Blocks.RED_MUSHROOM_BLOCK, BlockHugeMushroom.EnumType.ALL_INSIDE.getMetadata(), "red_mushroom_block"); + this.registerBlock(Blocks.DRAGON_EGG, "dragon_egg"); + this.registerBlock(Blocks.REPEATING_COMMAND_BLOCK, "repeating_command_block"); + this.registerBlock(Blocks.CHAIN_COMMAND_BLOCK, "chain_command_block"); + this.registerBlock(Blocks.STRUCTURE_BLOCK, TileEntityStructure.Mode.SAVE.getModeId(), "structure_block"); + this.registerBlock(Blocks.STRUCTURE_BLOCK, TileEntityStructure.Mode.LOAD.getModeId(), "structure_block"); + this.registerBlock(Blocks.STRUCTURE_BLOCK, TileEntityStructure.Mode.CORNER.getModeId(), "structure_block"); + this.registerBlock(Blocks.STRUCTURE_BLOCK, TileEntityStructure.Mode.DATA.getModeId(), "structure_block"); + net.minecraftforge.client.model.ModelLoader.onRegisterItems(this.itemModelMesher); + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + this.itemModelMesher.rebuildCache(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderList.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderList.java new file mode 100644 index 0000000..fc898ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/RenderList.java @@ -0,0 +1,29 @@ +package net.minecraft.client.renderer; + +import net.minecraft.client.renderer.chunk.ListedRenderChunk; +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.util.BlockRenderLayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderList extends ChunkRenderContainer +{ + public void renderChunkLayer(BlockRenderLayer layer) + { + if (this.initialized) + { + for (RenderChunk renderchunk : this.renderChunks) + { + ListedRenderChunk listedrenderchunk = (ListedRenderChunk)renderchunk; + GlStateManager.pushMatrix(); + this.preRenderChunk(renderchunk); + GlStateManager.callList(listedrenderchunk.getDisplayList(layer, listedrenderchunk.getCompiledChunk())); + GlStateManager.popMatrix(); + } + + GlStateManager.resetColor(); + this.renderChunks.clear(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/StitcherException.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/StitcherException.java new file mode 100644 index 0000000..585c2c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/StitcherException.java @@ -0,0 +1,17 @@ +package net.minecraft.client.renderer; + +import net.minecraft.client.renderer.texture.Stitcher; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class StitcherException extends RuntimeException +{ + private final Stitcher.Holder holder; + + public StitcherException(Stitcher.Holder holderIn, String message) + { + super(message); + this.holder = holderIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Tessellator.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Tessellator.java new file mode 100644 index 0000000..6ed80dd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Tessellator.java @@ -0,0 +1,37 @@ +package net.minecraft.client.renderer; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Tessellator +{ + private final BufferBuilder buffer; + private final WorldVertexBufferUploader vboUploader = new WorldVertexBufferUploader(); + /** The static instance of the Tessellator. */ + private static final Tessellator INSTANCE = new Tessellator(2097152); + + public static Tessellator getInstance() + { + return INSTANCE; + } + + public Tessellator(int bufferSize) + { + this.buffer = new BufferBuilder(bufferSize); + } + + /** + * Draws the data set up in this tessellator and resets the state to prepare for new drawing. + */ + public void draw() + { + this.buffer.finishDrawing(); + this.vboUploader.draw(this.buffer); + } + + public BufferBuilder getBuffer() + { + return this.buffer; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ThreadDownloadImageData.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ThreadDownloadImageData.java new file mode 100644 index 0000000..c1c58c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ThreadDownloadImageData.java @@ -0,0 +1,170 @@ +package net.minecraft.client.renderer; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.concurrent.atomic.AtomicInteger; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.SimpleTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ThreadDownloadImageData extends SimpleTexture +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final AtomicInteger TEXTURE_DOWNLOADER_THREAD_ID = new AtomicInteger(0); + @Nullable + private final File cacheFile; + private final String imageUrl; + @Nullable + private final IImageBuffer imageBuffer; + @Nullable + private BufferedImage bufferedImage; + @Nullable + private Thread imageThread; + private boolean textureUploaded; + + public ThreadDownloadImageData(@Nullable File cacheFileIn, String imageUrlIn, ResourceLocation textureResourceLocation, @Nullable IImageBuffer imageBufferIn) + { + super(textureResourceLocation); + this.cacheFile = cacheFileIn; + this.imageUrl = imageUrlIn; + this.imageBuffer = imageBufferIn; + } + + private void checkTextureUploaded() + { + if (!this.textureUploaded) + { + if (this.bufferedImage != null) + { + if (this.textureLocation != null) + { + this.deleteGlTexture(); + } + + TextureUtil.uploadTextureImage(super.getGlTextureId(), this.bufferedImage); + this.textureUploaded = true; + } + } + } + + public int getGlTextureId() + { + this.checkTextureUploaded(); + return super.getGlTextureId(); + } + + public void setBufferedImage(BufferedImage bufferedImageIn) + { + this.bufferedImage = bufferedImageIn; + + if (this.imageBuffer != null) + { + this.imageBuffer.skinAvailable(); + } + } + + public void loadTexture(IResourceManager resourceManager) throws IOException + { + if (this.bufferedImage == null && this.textureLocation != null) + { + super.loadTexture(resourceManager); + } + + if (this.imageThread == null) + { + if (this.cacheFile != null && this.cacheFile.isFile()) + { + LOGGER.debug("Loading http texture from local cache ({})", (Object)this.cacheFile); + + try + { + this.bufferedImage = ImageIO.read(this.cacheFile); + + if (this.imageBuffer != null) + { + this.setBufferedImage(this.imageBuffer.parseUserSkin(this.bufferedImage)); + } + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't load skin {}", this.cacheFile, ioexception); + this.loadTextureFromServer(); + } + } + else + { + this.loadTextureFromServer(); + } + } + } + + protected void loadTextureFromServer() + { + this.imageThread = new Thread("Texture Downloader #" + TEXTURE_DOWNLOADER_THREAD_ID.incrementAndGet()) + { + public void run() + { + HttpURLConnection httpurlconnection = null; + ThreadDownloadImageData.LOGGER.debug("Downloading http texture from {} to {}", ThreadDownloadImageData.this.imageUrl, ThreadDownloadImageData.this.cacheFile); + + try + { + httpurlconnection = (HttpURLConnection)(new URL(ThreadDownloadImageData.this.imageUrl)).openConnection(Minecraft.getMinecraft().getProxy()); + httpurlconnection.setDoInput(true); + httpurlconnection.setDoOutput(false); + httpurlconnection.connect(); + + if (httpurlconnection.getResponseCode() / 100 == 2) + { + BufferedImage bufferedimage; + + if (ThreadDownloadImageData.this.cacheFile != null) + { + FileUtils.copyInputStreamToFile(httpurlconnection.getInputStream(), ThreadDownloadImageData.this.cacheFile); + bufferedimage = ImageIO.read(ThreadDownloadImageData.this.cacheFile); + } + else + { + bufferedimage = TextureUtil.readBufferedImage(httpurlconnection.getInputStream()); + } + + if (ThreadDownloadImageData.this.imageBuffer != null) + { + bufferedimage = ThreadDownloadImageData.this.imageBuffer.parseUserSkin(bufferedimage); + } + + ThreadDownloadImageData.this.setBufferedImage(bufferedimage); + return; + } + } + catch (Exception exception) + { + ThreadDownloadImageData.LOGGER.error("Couldn't download http texture", (Throwable)exception); + return; + } + finally + { + if (httpurlconnection != null) + { + httpurlconnection.disconnect(); + } + } + } + }; + this.imageThread.setDaemon(true); + this.imageThread.start(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/VboRenderList.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/VboRenderList.java new file mode 100644 index 0000000..9cccb44 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/VboRenderList.java @@ -0,0 +1,43 @@ +package net.minecraft.client.renderer; + +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.util.BlockRenderLayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class VboRenderList extends ChunkRenderContainer +{ + public void renderChunkLayer(BlockRenderLayer layer) + { + if (this.initialized) + { + for (RenderChunk renderchunk : this.renderChunks) + { + VertexBuffer vertexbuffer = renderchunk.getVertexBufferByLayer(layer.ordinal()); + GlStateManager.pushMatrix(); + this.preRenderChunk(renderchunk); + renderchunk.multModelviewMatrix(); + vertexbuffer.bindBuffer(); + this.setupArrayPointers(); + vertexbuffer.drawArrays(7); + GlStateManager.popMatrix(); + } + + OpenGlHelper.glBindBuffer(OpenGlHelper.GL_ARRAY_BUFFER, 0); + GlStateManager.resetColor(); + this.renderChunks.clear(); + } + } + + private void setupArrayPointers() + { + GlStateManager.glVertexPointer(3, 5126, 28, 0); + GlStateManager.glColorPointer(4, 5121, 28, 12); + GlStateManager.glTexCoordPointer(2, 5126, 28, 16); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.glTexCoordPointer(2, 5122, 28, 24); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Vector3d.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Vector3d.java new file mode 100644 index 0000000..f9c8bce --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/Vector3d.java @@ -0,0 +1,15 @@ +package net.minecraft.client.renderer; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Vector3d +{ + /** The X coordinate */ + public double x; + /** The Y coordinate */ + public double y; + /** The Z coordinate */ + public double z; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/VertexBufferUploader.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/VertexBufferUploader.java new file mode 100644 index 0000000..15dbeb9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/VertexBufferUploader.java @@ -0,0 +1,22 @@ +package net.minecraft.client.renderer; + +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class VertexBufferUploader extends WorldVertexBufferUploader +{ + private VertexBuffer vertexBuffer; + + public void draw(BufferBuilder bufferBuilderIn) + { + bufferBuilderIn.reset(); + this.vertexBuffer.bufferData(bufferBuilderIn.getByteBuffer()); + } + + public void setVertexBuffer(VertexBuffer vertexBufferIn) + { + this.vertexBuffer = vertexBufferIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ViewFrustum.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ViewFrustum.java new file mode 100644 index 0000000..bf66003 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/ViewFrustum.java @@ -0,0 +1,178 @@ +package net.minecraft.client.renderer; + +import javax.annotation.Nullable; +import net.minecraft.client.renderer.chunk.IRenderChunkFactory; +import net.minecraft.client.renderer.chunk.RenderChunk; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ViewFrustum +{ + protected final RenderGlobal renderGlobal; + protected final World world; + protected int countChunksY; + protected int countChunksX; + protected int countChunksZ; + public RenderChunk[] renderChunks; + + public ViewFrustum(World worldIn, int renderDistanceChunks, RenderGlobal renderGlobalIn, IRenderChunkFactory renderChunkFactory) + { + this.renderGlobal = renderGlobalIn; + this.world = worldIn; + this.setCountChunksXYZ(renderDistanceChunks); + this.createRenderChunks(renderChunkFactory); + } + + protected void createRenderChunks(IRenderChunkFactory renderChunkFactory) + { + int i = this.countChunksX * this.countChunksY * this.countChunksZ; + this.renderChunks = new RenderChunk[i]; + int j = 0; + + for (int k = 0; k < this.countChunksX; ++k) + { + for (int l = 0; l < this.countChunksY; ++l) + { + for (int i1 = 0; i1 < this.countChunksZ; ++i1) + { + int j1 = (i1 * this.countChunksY + l) * this.countChunksX + k; + this.renderChunks[j1] = renderChunkFactory.create(this.world, this.renderGlobal, j++); + this.renderChunks[j1].setPosition(k * 16, l * 16, i1 * 16); + } + } + } + } + + public void deleteGlResources() + { + for (RenderChunk renderchunk : this.renderChunks) + { + renderchunk.deleteGlResources(); + } + } + + protected void setCountChunksXYZ(int renderDistanceChunks) + { + int i = renderDistanceChunks * 2 + 1; + this.countChunksX = i; + this.countChunksY = 16; + this.countChunksZ = i; + } + + public void updateChunkPositions(double viewEntityX, double viewEntityZ) + { + int i = MathHelper.floor(viewEntityX) - 8; + int j = MathHelper.floor(viewEntityZ) - 8; + int k = this.countChunksX * 16; + + for (int l = 0; l < this.countChunksX; ++l) + { + int i1 = this.getBaseCoordinate(i, k, l); + + for (int j1 = 0; j1 < this.countChunksZ; ++j1) + { + int k1 = this.getBaseCoordinate(j, k, j1); + + for (int l1 = 0; l1 < this.countChunksY; ++l1) + { + int i2 = l1 * 16; + RenderChunk renderchunk = this.renderChunks[(j1 * this.countChunksY + l1) * this.countChunksX + l]; + renderchunk.setPosition(i1, i2, k1); + } + } + } + } + + private int getBaseCoordinate(int p_178157_1_, int p_178157_2_, int p_178157_3_) + { + int i = p_178157_3_ * 16; + int j = i - p_178157_1_ + p_178157_2_ / 2; + + if (j < 0) + { + j -= p_178157_2_ - 1; + } + + return i - j / p_178157_2_ * p_178157_2_; + } + + public void markBlocksForUpdate(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, boolean updateImmediately) + { + int i = MathHelper.intFloorDiv(minX, 16); + int j = MathHelper.intFloorDiv(minY, 16); + int k = MathHelper.intFloorDiv(minZ, 16); + int l = MathHelper.intFloorDiv(maxX, 16); + int i1 = MathHelper.intFloorDiv(maxY, 16); + int j1 = MathHelper.intFloorDiv(maxZ, 16); + + for (int k1 = i; k1 <= l; ++k1) + { + int l1 = k1 % this.countChunksX; + + if (l1 < 0) + { + l1 += this.countChunksX; + } + + for (int i2 = j; i2 <= i1; ++i2) + { + int j2 = i2 % this.countChunksY; + + if (j2 < 0) + { + j2 += this.countChunksY; + } + + for (int k2 = k; k2 <= j1; ++k2) + { + int l2 = k2 % this.countChunksZ; + + if (l2 < 0) + { + l2 += this.countChunksZ; + } + + int i3 = (l2 * this.countChunksY + j2) * this.countChunksX + l1; + RenderChunk renderchunk = this.renderChunks[i3]; + renderchunk.setNeedsUpdate(updateImmediately); + } + } + } + } + + @Nullable + protected RenderChunk getRenderChunk(BlockPos pos) + { + int i = MathHelper.intFloorDiv(pos.getX(), 16); + int j = MathHelper.intFloorDiv(pos.getY(), 16); + int k = MathHelper.intFloorDiv(pos.getZ(), 16); + + if (j >= 0 && j < this.countChunksY) + { + i = i % this.countChunksX; + + if (i < 0) + { + i += this.countChunksX; + } + + k = k % this.countChunksZ; + + if (k < 0) + { + k += this.countChunksZ; + } + + int l = (k * this.countChunksY + j) * this.countChunksX + i; + return this.renderChunks[l]; + } + else + { + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/WorldVertexBufferUploader.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/WorldVertexBufferUploader.java new file mode 100644 index 0000000..2aab811 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/WorldVertexBufferUploader.java @@ -0,0 +1,50 @@ +package net.minecraft.client.renderer; + +import java.nio.ByteBuffer; +import java.util.List; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class WorldVertexBufferUploader +{ + public void draw(BufferBuilder bufferBuilderIn) + { + if (bufferBuilderIn.getVertexCount() > 0) + { + VertexFormat vertexformat = bufferBuilderIn.getVertexFormat(); + int i = vertexformat.getNextOffset(); + ByteBuffer bytebuffer = bufferBuilderIn.getByteBuffer(); + List list = vertexformat.getElements(); + + for (int j = 0; j < list.size(); ++j) + { + VertexFormatElement vertexformatelement = list.get(j); + VertexFormatElement.EnumUsage vertexformatelement$enumusage = vertexformatelement.getUsage(); + int k = vertexformatelement.getType().getGlConstant(); + int l = vertexformatelement.getIndex(); + bytebuffer.position(vertexformat.getOffset(j)); + + // moved to VertexFormatElement.preDraw + vertexformatelement.getUsage().preDraw(vertexformat, j, i, bytebuffer); + } + + GlStateManager.glDrawArrays(bufferBuilderIn.getDrawMode(), 0, bufferBuilderIn.getVertexCount()); + int i1 = 0; + + for (int j1 = list.size(); i1 < j1; ++i1) + { + VertexFormatElement vertexformatelement1 = list.get(i1); + VertexFormatElement.EnumUsage vertexformatelement$enumusage1 = vertexformatelement1.getUsage(); + int k1 = vertexformatelement1.getIndex(); + + // moved to VertexFormatElement.postDraw + vertexformatelement1.getUsage().postDraw(vertexformat, i1, i, bytebuffer); + } + } + + bufferBuilderIn.reset(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BakedQuad.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BakedQuad.java new file mode 100644 index 0000000..c03a990 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BakedQuad.java @@ -0,0 +1,82 @@ +package net.minecraft.client.renderer.block.model; + +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BakedQuad implements net.minecraftforge.client.model.pipeline.IVertexProducer +{ + /** + * Joined 4 vertex records, each stores packed data according to the VertexFormat of the quad. Vanilla minecraft + * uses DefaultVertexFormats.BLOCK, Forge uses (usually) ITEM, use BakedQuad.getFormat() to get the correct format. + */ + protected final int[] vertexData; + protected final int tintIndex; + protected final EnumFacing face; + protected final TextureAtlasSprite sprite; + + /** + * @deprecated Use constructor with the format argument. + */ + @Deprecated + public BakedQuad(int[] vertexDataIn, int tintIndexIn, EnumFacing faceIn, TextureAtlasSprite spriteIn) + { + this(vertexDataIn, tintIndexIn, faceIn, spriteIn, true, net.minecraft.client.renderer.vertex.DefaultVertexFormats.ITEM); + } + + public BakedQuad(int[] vertexDataIn, int tintIndexIn, EnumFacing faceIn, TextureAtlasSprite spriteIn, boolean applyDiffuseLighting, net.minecraft.client.renderer.vertex.VertexFormat format) + { + this.format = format; + this.applyDiffuseLighting = applyDiffuseLighting; + this.vertexData = vertexDataIn; + this.tintIndex = tintIndexIn; + this.face = faceIn; + this.sprite = spriteIn; + } + + public TextureAtlasSprite getSprite() + { + return this.sprite; + } + + public int[] getVertexData() + { + return this.vertexData; + } + + public boolean hasTintIndex() + { + return this.tintIndex != -1; + } + + public int getTintIndex() + { + return this.tintIndex; + } + + public EnumFacing getFace() + { + return this.face; + } + + protected final net.minecraft.client.renderer.vertex.VertexFormat format; + protected final boolean applyDiffuseLighting; + + @Override + public void pipe(net.minecraftforge.client.model.pipeline.IVertexConsumer consumer) + { + net.minecraftforge.client.model.pipeline.LightUtil.putBakedQuad(consumer, this); + } + + public net.minecraft.client.renderer.vertex.VertexFormat getFormat() + { + return format; + } + + public boolean shouldApplyDiffuseLighting() + { + return applyDiffuseLighting; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BakedQuadRetextured.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BakedQuadRetextured.java new file mode 100644 index 0000000..202b1d0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BakedQuadRetextured.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.block.model; + +import java.util.Arrays; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BakedQuadRetextured extends BakedQuad +{ + private final TextureAtlasSprite texture; + + public BakedQuadRetextured(BakedQuad quad, TextureAtlasSprite textureIn) + { + super(Arrays.copyOf(quad.getVertexData(), quad.getVertexData().length), quad.tintIndex, FaceBakery.getFacingFromVertexData(quad.getVertexData()), quad.getSprite(), quad.applyDiffuseLighting, quad.format); + this.texture = textureIn; + this.remapQuad(); + } + + private void remapQuad() + { + for (int i = 0; i < 4; ++i) + { + int j = format.getIntegerSize() * i; + int uvIndex = format.getUvOffsetById(0) / 4; + this.vertexData[j + uvIndex] = Float.floatToRawIntBits(this.texture.getInterpolatedU((double)this.sprite.getUnInterpolatedU(Float.intBitsToFloat(this.vertexData[j + uvIndex])))); + this.vertexData[j + uvIndex + 1] = Float.floatToRawIntBits(this.texture.getInterpolatedV((double)this.sprite.getUnInterpolatedV(Float.intBitsToFloat(this.vertexData[j + uvIndex + 1])))); + } + } + + @Override + public TextureAtlasSprite getSprite() + { + return texture; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockFaceUV.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockFaceUV.java new file mode 100644 index 0000000..b1e391f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockFaceUV.java @@ -0,0 +1,125 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import javax.annotation.Nullable; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockFaceUV +{ + public float[] uvs; + public final int rotation; + + public BlockFaceUV(@Nullable float[] uvsIn, int rotationIn) + { + this.uvs = uvsIn; + this.rotation = rotationIn; + } + + public float getVertexU(int p_178348_1_) + { + if (this.uvs == null) + { + throw new NullPointerException("uvs"); + } + else + { + int i = this.getVertexRotated(p_178348_1_); + return i != 0 && i != 1 ? this.uvs[2] : this.uvs[0]; + } + } + + public float getVertexV(int p_178346_1_) + { + if (this.uvs == null) + { + throw new NullPointerException("uvs"); + } + else + { + int i = this.getVertexRotated(p_178346_1_); + return i != 0 && i != 3 ? this.uvs[3] : this.uvs[1]; + } + } + + private int getVertexRotated(int p_178347_1_) + { + return (p_178347_1_ + this.rotation / 90) % 4; + } + + public int getVertexRotatedRev(int p_178345_1_) + { + return (p_178345_1_ + (4 - this.rotation / 90)) % 4; + } + + public void setUvs(float[] uvsIn) + { + if (this.uvs == null) + { + this.uvs = uvsIn; + } + } + + @SideOnly(Side.CLIENT) + static class Deserializer implements JsonDeserializer + { + public BlockFaceUV deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + float[] afloat = this.parseUV(jsonobject); + int i = this.parseRotation(jsonobject); + return new BlockFaceUV(afloat, i); + } + + protected int parseRotation(JsonObject object) + { + int i = JsonUtils.getInt(object, "rotation", 0); + + if (i >= 0 && i % 90 == 0 && i / 90 <= 3) + { + return i; + } + else + { + throw new JsonParseException("Invalid rotation " + i + " found, only 0/90/180/270 allowed"); + } + } + + @Nullable + private float[] parseUV(JsonObject object) + { + if (!object.has("uv")) + { + return null; + } + else + { + JsonArray jsonarray = JsonUtils.getJsonArray(object, "uv"); + + if (jsonarray.size() != 4) + { + throw new JsonParseException("Expected 4 uv values, found: " + jsonarray.size()); + } + else + { + float[] afloat = new float[4]; + + for (int i = 0; i < afloat.length; ++i) + { + afloat[i] = JsonUtils.getFloat(jsonarray.get(i), "uv[" + i + "]"); + } + + return afloat; + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPart.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPart.java new file mode 100644 index 0000000..f9ec6c5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPart.java @@ -0,0 +1,231 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Maps; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Vector3f; + +@SideOnly(Side.CLIENT) +public class BlockPart +{ + public final Vector3f positionFrom; + public final Vector3f positionTo; + public final Map mapFaces; + public final BlockPartRotation partRotation; + public final boolean shade; + + public BlockPart(Vector3f positionFromIn, Vector3f positionToIn, Map mapFacesIn, @Nullable BlockPartRotation partRotationIn, boolean shadeIn) + { + this.positionFrom = positionFromIn; + this.positionTo = positionToIn; + this.mapFaces = mapFacesIn; + this.partRotation = partRotationIn; + this.shade = shadeIn; + this.setDefaultUvs(); + } + + private void setDefaultUvs() + { + for (Entry entry : this.mapFaces.entrySet()) + { + float[] afloat = this.getFaceUvs(entry.getKey()); + (entry.getValue()).blockFaceUV.setUvs(afloat); + } + } + + private float[] getFaceUvs(EnumFacing facing) + { + switch (facing) + { + case DOWN: + return new float[] {this.positionFrom.x, 16.0F - this.positionTo.z, this.positionTo.x, 16.0F - this.positionFrom.z}; + case UP: + return new float[] {this.positionFrom.x, this.positionFrom.z, this.positionTo.x, this.positionTo.z}; + case NORTH: + default: + return new float[] {16.0F - this.positionTo.x, 16.0F - this.positionTo.y, 16.0F - this.positionFrom.x, 16.0F - this.positionFrom.y}; + case SOUTH: + return new float[] {this.positionFrom.x, 16.0F - this.positionTo.y, this.positionTo.x, 16.0F - this.positionFrom.y}; + case WEST: + return new float[] {this.positionFrom.z, 16.0F - this.positionTo.y, this.positionTo.z, 16.0F - this.positionFrom.y}; + case EAST: + return new float[] {16.0F - this.positionTo.z, 16.0F - this.positionTo.y, 16.0F - this.positionFrom.z, 16.0F - this.positionFrom.y}; + } + } + + @SideOnly(Side.CLIENT) + static class Deserializer implements JsonDeserializer + { + public BlockPart deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + Vector3f vector3f = this.parsePositionFrom(jsonobject); + Vector3f vector3f1 = this.parsePositionTo(jsonobject); + BlockPartRotation blockpartrotation = this.parseRotation(jsonobject); + Map map = this.parseFacesCheck(p_deserialize_3_, jsonobject); + + if (jsonobject.has("shade") && !JsonUtils.isBoolean(jsonobject, "shade")) + { + throw new JsonParseException("Expected shade to be a Boolean"); + } + else + { + boolean flag = JsonUtils.getBoolean(jsonobject, "shade", true); + return new BlockPart(vector3f, vector3f1, map, blockpartrotation, flag); + } + } + + @Nullable + private BlockPartRotation parseRotation(JsonObject object) + { + BlockPartRotation blockpartrotation = null; + + if (object.has("rotation")) + { + JsonObject jsonobject = JsonUtils.getJsonObject(object, "rotation"); + Vector3f vector3f = this.parsePosition(jsonobject, "origin"); + vector3f.scale(0.0625F); + EnumFacing.Axis enumfacing$axis = this.parseAxis(jsonobject); + float f = this.parseAngle(jsonobject); + boolean flag = JsonUtils.getBoolean(jsonobject, "rescale", false); + blockpartrotation = new BlockPartRotation(vector3f, enumfacing$axis, f, flag); + } + + return blockpartrotation; + } + + private float parseAngle(JsonObject object) + { + float f = JsonUtils.getFloat(object, "angle"); + + if (f != 0.0F && MathHelper.abs(f) != 22.5F && MathHelper.abs(f) != 45.0F) + { + throw new JsonParseException("Invalid rotation " + f + " found, only -45/-22.5/0/22.5/45 allowed"); + } + else + { + return f; + } + } + + private EnumFacing.Axis parseAxis(JsonObject object) + { + String s = JsonUtils.getString(object, "axis"); + EnumFacing.Axis enumfacing$axis = EnumFacing.Axis.byName(s.toLowerCase(Locale.ROOT)); + + if (enumfacing$axis == null) + { + throw new JsonParseException("Invalid rotation axis: " + s); + } + else + { + return enumfacing$axis; + } + } + + private Map parseFacesCheck(JsonDeserializationContext deserializationContext, JsonObject object) + { + Map map = this.parseFaces(deserializationContext, object); + + if (map.isEmpty()) + { + throw new JsonParseException("Expected between 1 and 6 unique faces, got 0"); + } + else + { + return map; + } + } + + private Map parseFaces(JsonDeserializationContext deserializationContext, JsonObject object) + { + Map map = Maps.newEnumMap(EnumFacing.class); + JsonObject jsonobject = JsonUtils.getJsonObject(object, "faces"); + + for (Entry entry : jsonobject.entrySet()) + { + EnumFacing enumfacing = this.parseEnumFacing(entry.getKey()); + map.put(enumfacing, (BlockPartFace)deserializationContext.deserialize(entry.getValue(), BlockPartFace.class)); + } + + return map; + } + + private EnumFacing parseEnumFacing(String name) + { + EnumFacing enumfacing = EnumFacing.byName(name); + + if (enumfacing == null) + { + throw new JsonParseException("Unknown facing: " + name); + } + else + { + return enumfacing; + } + } + + private Vector3f parsePositionTo(JsonObject object) + { + Vector3f vector3f = this.parsePosition(object, "to"); + + if (vector3f.x >= -16.0F && vector3f.y >= -16.0F && vector3f.z >= -16.0F && vector3f.x <= 32.0F && vector3f.y <= 32.0F && vector3f.z <= 32.0F) + { + return vector3f; + } + else + { + throw new JsonParseException("'to' specifier exceeds the allowed boundaries: " + vector3f); + } + } + + private Vector3f parsePositionFrom(JsonObject object) + { + Vector3f vector3f = this.parsePosition(object, "from"); + + if (vector3f.x >= -16.0F && vector3f.y >= -16.0F && vector3f.z >= -16.0F && vector3f.x <= 32.0F && vector3f.y <= 32.0F && vector3f.z <= 32.0F) + { + return vector3f; + } + else + { + throw new JsonParseException("'from' specifier exceeds the allowed boundaries: " + vector3f); + } + } + + private Vector3f parsePosition(JsonObject object, String memberName) + { + JsonArray jsonarray = JsonUtils.getJsonArray(object, memberName); + + if (jsonarray.size() != 3) + { + throw new JsonParseException("Expected 3 " + memberName + " values, found: " + jsonarray.size()); + } + else + { + float[] afloat = new float[3]; + + for (int i = 0; i < afloat.length; ++i) + { + afloat[i] = JsonUtils.getFloat(jsonarray.get(i), memberName + "[" + i + "]"); + } + + return new Vector3f(afloat[0], afloat[1], afloat[2]); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPartFace.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPartFace.java new file mode 100644 index 0000000..871bb73 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPartFace.java @@ -0,0 +1,62 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import javax.annotation.Nullable; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockPartFace +{ + public static final EnumFacing FACING_DEFAULT = null; + public final EnumFacing cullFace; + public final int tintIndex; + public final String texture; + public final BlockFaceUV blockFaceUV; + + public BlockPartFace(@Nullable EnumFacing cullFaceIn, int tintIndexIn, String textureIn, BlockFaceUV blockFaceUVIn) + { + this.cullFace = cullFaceIn; + this.tintIndex = tintIndexIn; + this.texture = textureIn; + this.blockFaceUV = blockFaceUVIn; + } + + @SideOnly(Side.CLIENT) + static class Deserializer implements JsonDeserializer + { + public BlockPartFace deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + EnumFacing enumfacing = this.parseCullFace(jsonobject); + int i = this.parseTintIndex(jsonobject); + String s = this.parseTexture(jsonobject); + BlockFaceUV blockfaceuv = (BlockFaceUV)p_deserialize_3_.deserialize(jsonobject, BlockFaceUV.class); + return new BlockPartFace(enumfacing, i, s, blockfaceuv); + } + + protected int parseTintIndex(JsonObject object) + { + return JsonUtils.getInt(object, "tintindex", -1); + } + + private String parseTexture(JsonObject object) + { + return JsonUtils.getString(object, "texture"); + } + + @Nullable + private EnumFacing parseCullFace(JsonObject object) + { + String s = JsonUtils.getString(object, "cullface", ""); + return EnumFacing.byName(s); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPartRotation.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPartRotation.java new file mode 100644 index 0000000..420ada7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BlockPartRotation.java @@ -0,0 +1,23 @@ +package net.minecraft.client.renderer.block.model; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Vector3f; + +@SideOnly(Side.CLIENT) +public class BlockPartRotation +{ + public final Vector3f origin; + public final EnumFacing.Axis axis; + public final float angle; + public final boolean rescale; + + public BlockPartRotation(Vector3f originIn, EnumFacing.Axis axisIn, float angleIn, boolean rescaleIn) + { + this.origin = originIn; + this.axis = axisIn; + this.angle = angleIn; + this.rescale = rescaleIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BuiltInModel.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BuiltInModel.java new file mode 100644 index 0000000..a00a3df --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/BuiltInModel.java @@ -0,0 +1,58 @@ +package net.minecraft.client.renderer.block.model; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BuiltInModel implements IBakedModel +{ + private final ItemCameraTransforms cameraTransforms; + private final ItemOverrideList overrideList; + + public BuiltInModel(ItemCameraTransforms p_i46537_1_, ItemOverrideList p_i46537_2_) + { + this.cameraTransforms = p_i46537_1_; + this.overrideList = p_i46537_2_; + } + + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) + { + return Collections.emptyList(); + } + + public boolean isAmbientOcclusion() + { + return false; + } + + public boolean isGui3d() + { + return true; + } + + public boolean isBuiltInRenderer() + { + return true; + } + + public TextureAtlasSprite getParticleTexture() + { + return null; + } + + public ItemCameraTransforms getItemCameraTransforms() + { + return this.cameraTransforms; + } + + public ItemOverrideList getOverrides() + { + return this.overrideList; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/FaceBakery.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/FaceBakery.java new file mode 100644 index 0000000..f174b24 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/FaceBakery.java @@ -0,0 +1,490 @@ +package net.minecraft.client.renderer.block.model; + +import javax.annotation.Nullable; +import net.minecraft.client.renderer.EnumFaceDirection; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3i; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Matrix4f; +import org.lwjgl.util.vector.Vector3f; +import org.lwjgl.util.vector.Vector4f; + +@SideOnly(Side.CLIENT) +public class FaceBakery +{ + private static final float SCALE_ROTATION_22_5 = 1.0F / (float)Math.cos(0.39269909262657166D) - 1.0F; + private static final float SCALE_ROTATION_GENERAL = 1.0F / (float)Math.cos((Math.PI / 4D)) - 1.0F; + private static final FaceBakery.Rotation[] UV_ROTATIONS = new FaceBakery.Rotation[ModelRotation.values().length * EnumFacing.values().length]; + private static final FaceBakery.Rotation UV_ROTATION_0 = new FaceBakery.Rotation() + { + BlockFaceUV makeRotatedUV(float p_188007_1_, float p_188007_2_, float p_188007_3_, float p_188007_4_) + { + return new BlockFaceUV(new float[] {p_188007_1_, p_188007_2_, p_188007_3_, p_188007_4_}, 0); + } + }; + private static final FaceBakery.Rotation UV_ROTATION_270 = new FaceBakery.Rotation() + { + BlockFaceUV makeRotatedUV(float p_188007_1_, float p_188007_2_, float p_188007_3_, float p_188007_4_) + { + return new BlockFaceUV(new float[] {p_188007_4_, 16.0F - p_188007_1_, p_188007_2_, 16.0F - p_188007_3_}, 270); + } + }; + private static final FaceBakery.Rotation UV_ROTATION_INVERSE = new FaceBakery.Rotation() + { + BlockFaceUV makeRotatedUV(float p_188007_1_, float p_188007_2_, float p_188007_3_, float p_188007_4_) + { + return new BlockFaceUV(new float[] {16.0F - p_188007_1_, 16.0F - p_188007_2_, 16.0F - p_188007_3_, 16.0F - p_188007_4_}, 0); + } + }; + private static final FaceBakery.Rotation UV_ROTATION_90 = new FaceBakery.Rotation() + { + BlockFaceUV makeRotatedUV(float p_188007_1_, float p_188007_2_, float p_188007_3_, float p_188007_4_) + { + return new BlockFaceUV(new float[] {16.0F - p_188007_2_, p_188007_3_, 16.0F - p_188007_4_, p_188007_1_}, 90); + } + }; + + public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, TextureAtlasSprite sprite, EnumFacing facing, ModelRotation modelRotationIn, @Nullable BlockPartRotation partRotation, boolean uvLocked, boolean shade) + { + return makeBakedQuad(posFrom, posTo, face, sprite, facing, (net.minecraftforge.common.model.ITransformation)modelRotationIn, partRotation, uvLocked, shade); + } + + public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, TextureAtlasSprite sprite, EnumFacing facing, net.minecraftforge.common.model.ITransformation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade) + { + BlockFaceUV blockfaceuv = face.blockFaceUV; + + if (uvLocked) + { + blockfaceuv = net.minecraftforge.client.ForgeHooksClient.applyUVLock(face.blockFaceUV, facing, modelRotationIn); + } + + int[] aint = this.makeQuadVertexData(blockfaceuv, sprite, facing, this.getPositionsDiv16(posFrom, posTo), modelRotationIn, partRotation, false); + EnumFacing enumfacing = getFacingFromVertexData(aint); + + if (partRotation == null) + { + this.applyFacing(aint, enumfacing); + } + + net.minecraftforge.client.ForgeHooksClient.fillNormal(aint, enumfacing); + return new BakedQuad(aint, face.tintIndex, enumfacing, sprite, shade, net.minecraft.client.renderer.vertex.DefaultVertexFormats.ITEM); + } + + private BlockFaceUV applyUVLock(BlockFaceUV p_188010_1_, EnumFacing p_188010_2_, ModelRotation p_188010_3_) + { + return UV_ROTATIONS[getIndex(p_188010_3_, p_188010_2_)].rotateUV(p_188010_1_); + } + + private int[] makeQuadVertexData(BlockFaceUV uvs, TextureAtlasSprite sprite, EnumFacing orientation, float[] p_188012_4_, ModelRotation rotationIn, @Nullable BlockPartRotation partRotation, boolean shade) + { + return makeQuadVertexData(uvs, sprite, orientation, p_188012_4_, (net.minecraftforge.common.model.ITransformation)rotationIn, partRotation, shade); + } + + private int[] makeQuadVertexData(BlockFaceUV uvs, TextureAtlasSprite sprite, EnumFacing orientation, float[] p_188012_4_, net.minecraftforge.common.model.ITransformation rotationIn, BlockPartRotation partRotation, boolean shade) + { + int[] aint = new int[28]; + + for (int i = 0; i < 4; ++i) + { + this.fillVertexData(aint, i, orientation, uvs, p_188012_4_, sprite, rotationIn, partRotation, shade); + } + + return aint; + } + + private int getFaceShadeColor(EnumFacing facing) + { + float f = this.getFaceBrightness(facing); + int i = MathHelper.clamp((int)(f * 255.0F), 0, 255); + return -16777216 | i << 16 | i << 8 | i; + } + + private float getFaceBrightness(EnumFacing facing) + { + switch (facing) + { + case DOWN: + return 0.5F; + case UP: + return 1.0F; + case NORTH: + case SOUTH: + return 0.8F; + case WEST: + case EAST: + return 0.6F; + default: + return 1.0F; + } + } + + private float[] getPositionsDiv16(Vector3f pos1, Vector3f pos2) + { + float[] afloat = new float[EnumFacing.values().length]; + afloat[EnumFaceDirection.Constants.WEST_INDEX] = pos1.x / 16.0F; + afloat[EnumFaceDirection.Constants.DOWN_INDEX] = pos1.y / 16.0F; + afloat[EnumFaceDirection.Constants.NORTH_INDEX] = pos1.z / 16.0F; + afloat[EnumFaceDirection.Constants.EAST_INDEX] = pos2.x / 16.0F; + afloat[EnumFaceDirection.Constants.UP_INDEX] = pos2.y / 16.0F; + afloat[EnumFaceDirection.Constants.SOUTH_INDEX] = pos2.z / 16.0F; + return afloat; + } + + private void fillVertexData(int[] p_188015_1_, int p_188015_2_, EnumFacing p_188015_3_, BlockFaceUV p_188015_4_, float[] p_188015_5_, TextureAtlasSprite p_188015_6_, ModelRotation p_188015_7_, @Nullable BlockPartRotation p_188015_8_, boolean p_188015_9_) + { + fillVertexData(p_188015_1_, p_188015_2_, p_188015_3_, p_188015_4_, p_188015_5_, p_188015_6_, (net.minecraftforge.common.model.ITransformation)p_188015_7_, p_188015_8_, p_188015_9_); + } + + private void fillVertexData(int[] p_188015_1_, int p_188015_2_, EnumFacing p_188015_3_, BlockFaceUV p_188015_4_, float[] p_188015_5_, TextureAtlasSprite p_188015_6_, net.minecraftforge.common.model.ITransformation p_188015_7_, BlockPartRotation p_188015_8_, boolean p_188015_9_) + { + EnumFacing enumfacing = p_188015_7_.rotate(p_188015_3_); + int i = p_188015_9_ ? this.getFaceShadeColor(enumfacing) : -1; + EnumFaceDirection.VertexInformation enumfacedirection$vertexinformation = EnumFaceDirection.getFacing(p_188015_3_).getVertexInformation(p_188015_2_); + Vector3f vector3f = new Vector3f(p_188015_5_[enumfacedirection$vertexinformation.xIndex], p_188015_5_[enumfacedirection$vertexinformation.yIndex], p_188015_5_[enumfacedirection$vertexinformation.zIndex]); + this.rotatePart(vector3f, p_188015_8_); + int j = this.rotateVertex(vector3f, p_188015_3_, p_188015_2_, p_188015_7_); + this.storeVertexData(p_188015_1_, j, p_188015_2_, vector3f, i, p_188015_6_, p_188015_4_); + } + + private void storeVertexData(int[] faceData, int storeIndex, int vertexIndex, Vector3f position, int shadeColor, TextureAtlasSprite sprite, BlockFaceUV faceUV) + { + int i = storeIndex * 7; + faceData[i] = Float.floatToRawIntBits(position.x); + faceData[i + 1] = Float.floatToRawIntBits(position.y); + faceData[i + 2] = Float.floatToRawIntBits(position.z); + faceData[i + 3] = shadeColor; + faceData[i + 4] = Float.floatToRawIntBits(sprite.getInterpolatedU((double)faceUV.getVertexU(vertexIndex) * .999 + faceUV.getVertexU((vertexIndex + 2) % 4) * .001)); + faceData[i + 4 + 1] = Float.floatToRawIntBits(sprite.getInterpolatedV((double)faceUV.getVertexV(vertexIndex) * .999 + faceUV.getVertexV((vertexIndex + 2) % 4) * .001)); + } + + private void rotatePart(Vector3f p_178407_1_, @Nullable BlockPartRotation partRotation) + { + if (partRotation != null) + { + Matrix4f matrix4f = this.getMatrixIdentity(); + Vector3f vector3f = new Vector3f(0.0F, 0.0F, 0.0F); + + switch (partRotation.axis) + { + case X: + Matrix4f.rotate(partRotation.angle * 0.017453292F, new Vector3f(1.0F, 0.0F, 0.0F), matrix4f, matrix4f); + vector3f.set(0.0F, 1.0F, 1.0F); + break; + case Y: + Matrix4f.rotate(partRotation.angle * 0.017453292F, new Vector3f(0.0F, 1.0F, 0.0F), matrix4f, matrix4f); + vector3f.set(1.0F, 0.0F, 1.0F); + break; + case Z: + Matrix4f.rotate(partRotation.angle * 0.017453292F, new Vector3f(0.0F, 0.0F, 1.0F), matrix4f, matrix4f); + vector3f.set(1.0F, 1.0F, 0.0F); + } + + if (partRotation.rescale) + { + if (Math.abs(partRotation.angle) == 22.5F) + { + vector3f.scale(SCALE_ROTATION_22_5); + } + else + { + vector3f.scale(SCALE_ROTATION_GENERAL); + } + + Vector3f.add(vector3f, new Vector3f(1.0F, 1.0F, 1.0F), vector3f); + } + else + { + vector3f.set(1.0F, 1.0F, 1.0F); + } + + this.rotateScale(p_178407_1_, new Vector3f(partRotation.origin), matrix4f, vector3f); + } + } + + public int rotateVertex(Vector3f p_188011_1_, EnumFacing p_188011_2_, int p_188011_3_, ModelRotation p_188011_4_) + { + return rotateVertex(p_188011_1_, p_188011_2_, p_188011_3_, (net.minecraftforge.common.model.ITransformation)p_188011_4_); + } + + public int rotateVertex(Vector3f p_188011_1_, EnumFacing p_188011_2_, int p_188011_3_, net.minecraftforge.common.model.ITransformation p_188011_4_) + { + if (p_188011_4_ == ModelRotation.X0_Y0) + { + return p_188011_3_; + } + else + { + net.minecraftforge.client.ForgeHooksClient.transform(p_188011_1_, p_188011_4_.getMatrix()); + return p_188011_4_.rotate(p_188011_2_, p_188011_3_); + } + } + + private void rotateScale(Vector3f position, Vector3f rotationOrigin, Matrix4f rotationMatrix, Vector3f scale) + { + Vector4f vector4f = new Vector4f(position.x - rotationOrigin.x, position.y - rotationOrigin.y, position.z - rotationOrigin.z, 1.0F); + Matrix4f.transform(rotationMatrix, vector4f, vector4f); + vector4f.x *= scale.x; + vector4f.y *= scale.y; + vector4f.z *= scale.z; + position.set(vector4f.x + rotationOrigin.x, vector4f.y + rotationOrigin.y, vector4f.z + rotationOrigin.z); + } + + private Matrix4f getMatrixIdentity() + { + Matrix4f matrix4f = new Matrix4f(); + matrix4f.setIdentity(); + return matrix4f; + } + + public static EnumFacing getFacingFromVertexData(int[] faceData) + { + Vector3f vector3f = new Vector3f(Float.intBitsToFloat(faceData[0]), Float.intBitsToFloat(faceData[1]), Float.intBitsToFloat(faceData[2])); + Vector3f vector3f1 = new Vector3f(Float.intBitsToFloat(faceData[7]), Float.intBitsToFloat(faceData[8]), Float.intBitsToFloat(faceData[9])); + Vector3f vector3f2 = new Vector3f(Float.intBitsToFloat(faceData[14]), Float.intBitsToFloat(faceData[15]), Float.intBitsToFloat(faceData[16])); + Vector3f vector3f3 = new Vector3f(); + Vector3f vector3f4 = new Vector3f(); + Vector3f vector3f5 = new Vector3f(); + Vector3f.sub(vector3f, vector3f1, vector3f3); + Vector3f.sub(vector3f2, vector3f1, vector3f4); + Vector3f.cross(vector3f4, vector3f3, vector3f5); + float f = (float)Math.sqrt((double)(vector3f5.x * vector3f5.x + vector3f5.y * vector3f5.y + vector3f5.z * vector3f5.z)); + vector3f5.x /= f; + vector3f5.y /= f; + vector3f5.z /= f; + EnumFacing enumfacing = null; + float f1 = 0.0F; + + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + Vec3i vec3i = enumfacing1.getDirectionVec(); + Vector3f vector3f6 = new Vector3f((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ()); + float f2 = Vector3f.dot(vector3f5, vector3f6); + + if (f2 >= 0.0F && f2 > f1) + { + f1 = f2; + enumfacing = enumfacing1; + } + } + + if (enumfacing == null) + { + return EnumFacing.UP; + } + else + { + return enumfacing; + } + } + + private void applyFacing(int[] p_178408_1_, EnumFacing p_178408_2_) + { + int[] aint = new int[p_178408_1_.length]; + System.arraycopy(p_178408_1_, 0, aint, 0, p_178408_1_.length); + float[] afloat = new float[EnumFacing.values().length]; + afloat[EnumFaceDirection.Constants.WEST_INDEX] = 999.0F; + afloat[EnumFaceDirection.Constants.DOWN_INDEX] = 999.0F; + afloat[EnumFaceDirection.Constants.NORTH_INDEX] = 999.0F; + afloat[EnumFaceDirection.Constants.EAST_INDEX] = -999.0F; + afloat[EnumFaceDirection.Constants.UP_INDEX] = -999.0F; + afloat[EnumFaceDirection.Constants.SOUTH_INDEX] = -999.0F; + + for (int i = 0; i < 4; ++i) + { + int j = 7 * i; + float f = Float.intBitsToFloat(aint[j]); + float f1 = Float.intBitsToFloat(aint[j + 1]); + float f2 = Float.intBitsToFloat(aint[j + 2]); + + if (f < afloat[EnumFaceDirection.Constants.WEST_INDEX]) + { + afloat[EnumFaceDirection.Constants.WEST_INDEX] = f; + } + + if (f1 < afloat[EnumFaceDirection.Constants.DOWN_INDEX]) + { + afloat[EnumFaceDirection.Constants.DOWN_INDEX] = f1; + } + + if (f2 < afloat[EnumFaceDirection.Constants.NORTH_INDEX]) + { + afloat[EnumFaceDirection.Constants.NORTH_INDEX] = f2; + } + + if (f > afloat[EnumFaceDirection.Constants.EAST_INDEX]) + { + afloat[EnumFaceDirection.Constants.EAST_INDEX] = f; + } + + if (f1 > afloat[EnumFaceDirection.Constants.UP_INDEX]) + { + afloat[EnumFaceDirection.Constants.UP_INDEX] = f1; + } + + if (f2 > afloat[EnumFaceDirection.Constants.SOUTH_INDEX]) + { + afloat[EnumFaceDirection.Constants.SOUTH_INDEX] = f2; + } + } + + EnumFaceDirection enumfacedirection = EnumFaceDirection.getFacing(p_178408_2_); + + for (int i1 = 0; i1 < 4; ++i1) + { + int j1 = 7 * i1; + EnumFaceDirection.VertexInformation enumfacedirection$vertexinformation = enumfacedirection.getVertexInformation(i1); + float f8 = afloat[enumfacedirection$vertexinformation.xIndex]; + float f3 = afloat[enumfacedirection$vertexinformation.yIndex]; + float f4 = afloat[enumfacedirection$vertexinformation.zIndex]; + p_178408_1_[j1] = Float.floatToRawIntBits(f8); + p_178408_1_[j1 + 1] = Float.floatToRawIntBits(f3); + p_178408_1_[j1 + 2] = Float.floatToRawIntBits(f4); + + for (int k = 0; k < 4; ++k) + { + int l = 7 * k; + float f5 = Float.intBitsToFloat(aint[l]); + float f6 = Float.intBitsToFloat(aint[l + 1]); + float f7 = Float.intBitsToFloat(aint[l + 2]); + + if (MathHelper.epsilonEquals(f8, f5) && MathHelper.epsilonEquals(f3, f6) && MathHelper.epsilonEquals(f4, f7)) + { + p_178408_1_[j1 + 4] = aint[l + 4]; + p_178408_1_[j1 + 4 + 1] = aint[l + 4 + 1]; + } + } + } + } + + private static void addUvRotation(ModelRotation p_188013_0_, EnumFacing p_188013_1_, FaceBakery.Rotation p_188013_2_) + { + UV_ROTATIONS[getIndex(p_188013_0_, p_188013_1_)] = p_188013_2_; + } + + private static int getIndex(ModelRotation p_188014_0_, EnumFacing p_188014_1_) + { + return ModelRotation.values().length * p_188014_1_.ordinal() + p_188014_0_.ordinal(); + } + + static + { + addUvRotation(ModelRotation.X0_Y0, EnumFacing.DOWN, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y0, EnumFacing.EAST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y0, EnumFacing.NORTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y0, EnumFacing.SOUTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y0, EnumFacing.UP, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y0, EnumFacing.WEST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y90, EnumFacing.EAST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y90, EnumFacing.NORTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y90, EnumFacing.SOUTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y90, EnumFacing.WEST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y180, EnumFacing.EAST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y180, EnumFacing.NORTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y180, EnumFacing.SOUTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y180, EnumFacing.WEST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y270, EnumFacing.EAST, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y270, EnumFacing.NORTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y270, EnumFacing.SOUTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y270, EnumFacing.WEST, UV_ROTATION_0); + addUvRotation(ModelRotation.X90_Y0, EnumFacing.DOWN, UV_ROTATION_0); + addUvRotation(ModelRotation.X90_Y0, EnumFacing.SOUTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X90_Y90, EnumFacing.DOWN, UV_ROTATION_0); + addUvRotation(ModelRotation.X90_Y180, EnumFacing.DOWN, UV_ROTATION_0); + addUvRotation(ModelRotation.X90_Y180, EnumFacing.NORTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X90_Y270, EnumFacing.DOWN, UV_ROTATION_0); + addUvRotation(ModelRotation.X180_Y0, EnumFacing.DOWN, UV_ROTATION_0); + addUvRotation(ModelRotation.X180_Y0, EnumFacing.UP, UV_ROTATION_0); + addUvRotation(ModelRotation.X270_Y0, EnumFacing.SOUTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X270_Y0, EnumFacing.UP, UV_ROTATION_0); + addUvRotation(ModelRotation.X270_Y90, EnumFacing.UP, UV_ROTATION_0); + addUvRotation(ModelRotation.X270_Y180, EnumFacing.NORTH, UV_ROTATION_0); + addUvRotation(ModelRotation.X270_Y180, EnumFacing.UP, UV_ROTATION_0); + addUvRotation(ModelRotation.X270_Y270, EnumFacing.UP, UV_ROTATION_0); + addUvRotation(ModelRotation.X0_Y270, EnumFacing.UP, UV_ROTATION_270); + addUvRotation(ModelRotation.X0_Y90, EnumFacing.DOWN, UV_ROTATION_270); + addUvRotation(ModelRotation.X90_Y0, EnumFacing.WEST, UV_ROTATION_270); + addUvRotation(ModelRotation.X90_Y90, EnumFacing.WEST, UV_ROTATION_270); + addUvRotation(ModelRotation.X90_Y180, EnumFacing.WEST, UV_ROTATION_270); + addUvRotation(ModelRotation.X90_Y270, EnumFacing.NORTH, UV_ROTATION_270); + addUvRotation(ModelRotation.X90_Y270, EnumFacing.SOUTH, UV_ROTATION_270); + addUvRotation(ModelRotation.X90_Y270, EnumFacing.WEST, UV_ROTATION_270); + addUvRotation(ModelRotation.X180_Y90, EnumFacing.UP, UV_ROTATION_270); + addUvRotation(ModelRotation.X180_Y270, EnumFacing.DOWN, UV_ROTATION_270); + addUvRotation(ModelRotation.X270_Y0, EnumFacing.EAST, UV_ROTATION_270); + addUvRotation(ModelRotation.X270_Y90, EnumFacing.EAST, UV_ROTATION_270); + addUvRotation(ModelRotation.X270_Y90, EnumFacing.NORTH, UV_ROTATION_270); + addUvRotation(ModelRotation.X270_Y90, EnumFacing.SOUTH, UV_ROTATION_270); + addUvRotation(ModelRotation.X270_Y180, EnumFacing.EAST, UV_ROTATION_270); + addUvRotation(ModelRotation.X270_Y270, EnumFacing.EAST, UV_ROTATION_270); + addUvRotation(ModelRotation.X0_Y180, EnumFacing.DOWN, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X0_Y180, EnumFacing.UP, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X90_Y0, EnumFacing.NORTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X90_Y0, EnumFacing.UP, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X90_Y90, EnumFacing.UP, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X90_Y180, EnumFacing.SOUTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X90_Y180, EnumFacing.UP, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X90_Y270, EnumFacing.UP, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y0, EnumFacing.EAST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y0, EnumFacing.NORTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y0, EnumFacing.SOUTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y0, EnumFacing.WEST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y90, EnumFacing.EAST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y90, EnumFacing.NORTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y90, EnumFacing.SOUTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y90, EnumFacing.WEST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y180, EnumFacing.DOWN, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y180, EnumFacing.EAST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y180, EnumFacing.NORTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y180, EnumFacing.SOUTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y180, EnumFacing.UP, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y180, EnumFacing.WEST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y270, EnumFacing.EAST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y270, EnumFacing.NORTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y270, EnumFacing.SOUTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X180_Y270, EnumFacing.WEST, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X270_Y0, EnumFacing.DOWN, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X270_Y0, EnumFacing.NORTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X270_Y90, EnumFacing.DOWN, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X270_Y180, EnumFacing.DOWN, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X270_Y180, EnumFacing.SOUTH, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X270_Y270, EnumFacing.DOWN, UV_ROTATION_INVERSE); + addUvRotation(ModelRotation.X0_Y90, EnumFacing.UP, UV_ROTATION_90); + addUvRotation(ModelRotation.X0_Y270, EnumFacing.DOWN, UV_ROTATION_90); + addUvRotation(ModelRotation.X90_Y0, EnumFacing.EAST, UV_ROTATION_90); + addUvRotation(ModelRotation.X90_Y90, EnumFacing.EAST, UV_ROTATION_90); + addUvRotation(ModelRotation.X90_Y90, EnumFacing.NORTH, UV_ROTATION_90); + addUvRotation(ModelRotation.X90_Y90, EnumFacing.SOUTH, UV_ROTATION_90); + addUvRotation(ModelRotation.X90_Y180, EnumFacing.EAST, UV_ROTATION_90); + addUvRotation(ModelRotation.X90_Y270, EnumFacing.EAST, UV_ROTATION_90); + addUvRotation(ModelRotation.X270_Y0, EnumFacing.WEST, UV_ROTATION_90); + addUvRotation(ModelRotation.X180_Y90, EnumFacing.DOWN, UV_ROTATION_90); + addUvRotation(ModelRotation.X180_Y270, EnumFacing.UP, UV_ROTATION_90); + addUvRotation(ModelRotation.X270_Y90, EnumFacing.WEST, UV_ROTATION_90); + addUvRotation(ModelRotation.X270_Y180, EnumFacing.WEST, UV_ROTATION_90); + addUvRotation(ModelRotation.X270_Y270, EnumFacing.NORTH, UV_ROTATION_90); + addUvRotation(ModelRotation.X270_Y270, EnumFacing.SOUTH, UV_ROTATION_90); + addUvRotation(ModelRotation.X270_Y270, EnumFacing.WEST, UV_ROTATION_90); + } + + @SideOnly(Side.CLIENT) + abstract static class Rotation + { + private Rotation() + { + } + + public BlockFaceUV rotateUV(BlockFaceUV p_188006_1_) + { + float f = p_188006_1_.getVertexU(p_188006_1_.getVertexRotatedRev(0)); + float f1 = p_188006_1_.getVertexV(p_188006_1_.getVertexRotatedRev(0)); + float f2 = p_188006_1_.getVertexU(p_188006_1_.getVertexRotatedRev(2)); + float f3 = p_188006_1_.getVertexV(p_188006_1_.getVertexRotatedRev(2)); + return this.makeRotatedUV(f, f1, f2, f3); + } + + abstract BlockFaceUV makeRotatedUV(float p_188007_1_, float p_188007_2_, float p_188007_3_, float p_188007_4_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/IBakedModel.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/IBakedModel.java new file mode 100644 index 0000000..308579e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/IBakedModel.java @@ -0,0 +1,38 @@ +package net.minecraft.client.renderer.block.model; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IBakedModel +{ + List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand); + + boolean isAmbientOcclusion(); + + boolean isGui3d(); + + boolean isBuiltInRenderer(); + + TextureAtlasSprite getParticleTexture(); + + @Deprecated + default ItemCameraTransforms getItemCameraTransforms() { return ItemCameraTransforms.DEFAULT; } + + ItemOverrideList getOverrides(); + + default boolean isAmbientOcclusion(IBlockState state) { return isAmbientOcclusion(); } + + /* + * Returns the pair of the model for the given perspective, and the matrix + * that should be applied to the GL state before rendering it (matrix may be null). + */ + default org.apache.commons.lang3.tuple.Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) { + return net.minecraftforge.client.ForgeHooksClient.handlePerspective(this, cameraTransformType); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java new file mode 100644 index 0000000..50a02cc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java @@ -0,0 +1,190 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Quaternion; + +/* + * @deprecated use {@link net.minecraftforge.client.model.IPerspectiveAwareModel} instead + */ +@SideOnly(Side.CLIENT) +public class ItemCameraTransforms +{ + public static final ItemCameraTransforms DEFAULT = new ItemCameraTransforms(); + public static float offsetTranslateX; + public static float offsetTranslateY; + public static float offsetTranslateZ; + public static float offsetRotationX; + public static float offsetRotationY; + public static float offsetRotationZ; + public static float offsetScaleX; + public static float offsetScaleY; + public static float offsetScaleZ; + public final ItemTransformVec3f thirdperson_left; + public final ItemTransformVec3f thirdperson_right; + public final ItemTransformVec3f firstperson_left; + public final ItemTransformVec3f firstperson_right; + public final ItemTransformVec3f head; + public final ItemTransformVec3f gui; + public final ItemTransformVec3f ground; + public final ItemTransformVec3f fixed; + + private ItemCameraTransforms() + { + this(ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT); + } + + @Deprecated + public ItemCameraTransforms(ItemCameraTransforms transforms) + { + this.thirdperson_left = transforms.thirdperson_left; + this.thirdperson_right = transforms.thirdperson_right; + this.firstperson_left = transforms.firstperson_left; + this.firstperson_right = transforms.firstperson_right; + this.head = transforms.head; + this.gui = transforms.gui; + this.ground = transforms.ground; + this.fixed = transforms.fixed; + } + + @Deprecated + public ItemCameraTransforms(ItemTransformVec3f thirdperson_leftIn, ItemTransformVec3f thirdperson_rightIn, ItemTransformVec3f firstperson_leftIn, ItemTransformVec3f firstperson_rightIn, ItemTransformVec3f headIn, ItemTransformVec3f guiIn, ItemTransformVec3f groundIn, ItemTransformVec3f fixedIn) + { + this.thirdperson_left = thirdperson_leftIn; + this.thirdperson_right = thirdperson_rightIn; + this.firstperson_left = firstperson_leftIn; + this.firstperson_right = firstperson_rightIn; + this.head = headIn; + this.gui = guiIn; + this.ground = groundIn; + this.fixed = fixedIn; + } + + public void applyTransform(ItemCameraTransforms.TransformType type) + { + applyTransformSide(this.getTransform(type), false); + } + + public static void applyTransformSide(ItemTransformVec3f vec, boolean leftHand) + { + if (vec != ItemTransformVec3f.DEFAULT) + { + int i = leftHand ? -1 : 1; + GlStateManager.translate((float)i * (offsetTranslateX + vec.translation.x), offsetTranslateY + vec.translation.y, offsetTranslateZ + vec.translation.z); + float f = offsetRotationX + vec.rotation.x; + float f1 = offsetRotationY + vec.rotation.y; + float f2 = offsetRotationZ + vec.rotation.z; + + if (leftHand) + { + f1 = -f1; + f2 = -f2; + } + + GlStateManager.rotate(makeQuaternion(f, f1, f2)); + GlStateManager.scale(offsetScaleX + vec.scale.x, offsetScaleY + vec.scale.y, offsetScaleZ + vec.scale.z); + } + } + + private static Quaternion makeQuaternion(float p_188035_0_, float p_188035_1_, float p_188035_2_) + { + float f = p_188035_0_ * 0.017453292F; + float f1 = p_188035_1_ * 0.017453292F; + float f2 = p_188035_2_ * 0.017453292F; + float f3 = MathHelper.sin(0.5F * f); + float f4 = MathHelper.cos(0.5F * f); + float f5 = MathHelper.sin(0.5F * f1); + float f6 = MathHelper.cos(0.5F * f1); + float f7 = MathHelper.sin(0.5F * f2); + float f8 = MathHelper.cos(0.5F * f2); + return new Quaternion(f3 * f6 * f8 + f4 * f5 * f7, f4 * f5 * f8 - f3 * f6 * f7, f3 * f5 * f8 + f4 * f6 * f7, f4 * f6 * f8 - f3 * f5 * f7); + } + + @Deprecated + public ItemTransformVec3f getTransform(ItemCameraTransforms.TransformType type) + { + switch (type) + { + case THIRD_PERSON_LEFT_HAND: + return this.thirdperson_left; + case THIRD_PERSON_RIGHT_HAND: + return this.thirdperson_right; + case FIRST_PERSON_LEFT_HAND: + return this.firstperson_left; + case FIRST_PERSON_RIGHT_HAND: + return this.firstperson_right; + case HEAD: + return this.head; + case GUI: + return this.gui; + case GROUND: + return this.ground; + case FIXED: + return this.fixed; + default: + return ItemTransformVec3f.DEFAULT; + } + } + + public boolean hasCustomTransform(ItemCameraTransforms.TransformType type) + { + return this.getTransform(type) != ItemTransformVec3f.DEFAULT; + } + + @SideOnly(Side.CLIENT) + static class Deserializer implements JsonDeserializer + { + public ItemCameraTransforms deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + ItemTransformVec3f itemtransformvec3f = this.getTransform(p_deserialize_3_, jsonobject, "thirdperson_righthand"); + ItemTransformVec3f itemtransformvec3f1 = this.getTransform(p_deserialize_3_, jsonobject, "thirdperson_lefthand"); + + if (itemtransformvec3f1 == ItemTransformVec3f.DEFAULT) + { + itemtransformvec3f1 = itemtransformvec3f; + } + + ItemTransformVec3f itemtransformvec3f2 = this.getTransform(p_deserialize_3_, jsonobject, "firstperson_righthand"); + ItemTransformVec3f itemtransformvec3f3 = this.getTransform(p_deserialize_3_, jsonobject, "firstperson_lefthand"); + + if (itemtransformvec3f3 == ItemTransformVec3f.DEFAULT) + { + itemtransformvec3f3 = itemtransformvec3f2; + } + + ItemTransformVec3f itemtransformvec3f4 = this.getTransform(p_deserialize_3_, jsonobject, "head"); + ItemTransformVec3f itemtransformvec3f5 = this.getTransform(p_deserialize_3_, jsonobject, "gui"); + ItemTransformVec3f itemtransformvec3f6 = this.getTransform(p_deserialize_3_, jsonobject, "ground"); + ItemTransformVec3f itemtransformvec3f7 = this.getTransform(p_deserialize_3_, jsonobject, "fixed"); + return new ItemCameraTransforms(itemtransformvec3f1, itemtransformvec3f, itemtransformvec3f3, itemtransformvec3f2, itemtransformvec3f4, itemtransformvec3f5, itemtransformvec3f6, itemtransformvec3f7); + } + + private ItemTransformVec3f getTransform(JsonDeserializationContext p_181683_1_, JsonObject p_181683_2_, String p_181683_3_) + { + return p_181683_2_.has(p_181683_3_) ? (ItemTransformVec3f)p_181683_1_.deserialize(p_181683_2_.get(p_181683_3_), ItemTransformVec3f.class) : ItemTransformVec3f.DEFAULT; + } + } + + @SideOnly(Side.CLIENT) + public static enum TransformType implements net.minecraftforge.common.model.IModelPart + { + NONE, + THIRD_PERSON_LEFT_HAND, + THIRD_PERSON_RIGHT_HAND, + FIRST_PERSON_LEFT_HAND, + FIRST_PERSON_RIGHT_HAND, + HEAD, + GUI, + GROUND, + FIXED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemModelGenerator.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemModelGenerator.java new file mode 100644 index 0000000..ce91cb6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemModelGenerator.java @@ -0,0 +1,338 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Vector3f; + +@SideOnly(Side.CLIENT) +public class ItemModelGenerator +{ + public static final List LAYERS = Lists.newArrayList("layer0", "layer1", "layer2", "layer3", "layer4"); + + @Nullable + public ModelBlock makeItemModel(TextureMap textureMapIn, ModelBlock blockModel) + { + Map map = Maps.newHashMap(); + List list = Lists.newArrayList(); + + for (int i = 0; i < LAYERS.size(); ++i) + { + String s = LAYERS.get(i); + + if (!blockModel.isTexturePresent(s)) + { + break; + } + + String s1 = blockModel.resolveTextureName(s); + map.put(s, s1); + TextureAtlasSprite textureatlassprite = textureMapIn.getAtlasSprite((new ResourceLocation(s1)).toString()); + list.addAll(this.getBlockParts(i, s, textureatlassprite)); + } + + if (list.isEmpty()) + { + return null; + } + else + { + map.put("particle", blockModel.isTexturePresent("particle") ? blockModel.resolveTextureName("particle") : (String)map.get("layer0")); + return new ModelBlock((ResourceLocation)null, list, map, false, false, blockModel.getAllTransforms(), blockModel.getOverrides()); + } + } + + private List getBlockParts(int tintIndex, String p_178394_2_, TextureAtlasSprite p_178394_3_) + { + Map map = Maps.newHashMap(); + map.put(EnumFacing.SOUTH, new BlockPartFace((EnumFacing)null, tintIndex, p_178394_2_, new BlockFaceUV(new float[] {0.0F, 0.0F, 16.0F, 16.0F}, 0))); + map.put(EnumFacing.NORTH, new BlockPartFace((EnumFacing)null, tintIndex, p_178394_2_, new BlockFaceUV(new float[] {16.0F, 0.0F, 0.0F, 16.0F}, 0))); + List list = Lists.newArrayList(); + list.add(new BlockPart(new Vector3f(0.0F, 0.0F, 7.5F), new Vector3f(16.0F, 16.0F, 8.5F), map, (BlockPartRotation)null, true)); + list.addAll(this.getBlockParts(p_178394_3_, p_178394_2_, tintIndex)); + return list; + } + + private List getBlockParts(TextureAtlasSprite p_178397_1_, String p_178397_2_, int p_178397_3_) + { + float f = (float)p_178397_1_.getIconWidth(); + float f1 = (float)p_178397_1_.getIconHeight(); + List list = Lists.newArrayList(); + + for (ItemModelGenerator.Span itemmodelgenerator$span : this.getSpans(p_178397_1_)) + { + float f2 = 0.0F; + float f3 = 0.0F; + float f4 = 0.0F; + float f5 = 0.0F; + float f6 = 0.0F; + float f7 = 0.0F; + float f8 = 0.0F; + float f9 = 0.0F; + float f10 = 0.0F; + float f11 = 0.0F; + float f12 = (float)itemmodelgenerator$span.getMin(); + float f13 = (float)itemmodelgenerator$span.getMax(); + float f14 = (float)itemmodelgenerator$span.getAnchor(); + ItemModelGenerator.SpanFacing itemmodelgenerator$spanfacing = itemmodelgenerator$span.getFacing(); + + switch (itemmodelgenerator$spanfacing) + { + case UP: + f6 = f12; + f2 = f12; + f4 = f7 = f13 + 1.0F; + f8 = f14; + f3 = f14; + f9 = f14; + f5 = f14; + f10 = 16.0F / f; + f11 = 16.0F / (f1 - 1.0F); + break; + case DOWN: + f9 = f14; + f8 = f14; + f6 = f12; + f2 = f12; + f4 = f7 = f13 + 1.0F; + f3 = f14 + 1.0F; + f5 = f14 + 1.0F; + f10 = 16.0F / f; + f11 = 16.0F / (f1 - 1.0F); + break; + case LEFT: + f6 = f14; + f2 = f14; + f7 = f14; + f4 = f14; + f9 = f12; + f3 = f12; + f5 = f8 = f13 + 1.0F; + f10 = 16.0F / (f - 1.0F); + f11 = 16.0F / f1; + break; + case RIGHT: + f7 = f14; + f6 = f14; + f2 = f14 + 1.0F; + f4 = f14 + 1.0F; + f9 = f12; + f3 = f12; + f5 = f8 = f13 + 1.0F; + f10 = 16.0F / (f - 1.0F); + f11 = 16.0F / f1; + } + + float f15 = 16.0F / f; + float f16 = 16.0F / f1; + f2 = f2 * f15; + f4 = f4 * f15; + f3 = f3 * f16; + f5 = f5 * f16; + f3 = 16.0F - f3; + f5 = 16.0F - f5; + f6 = f6 * f10; + f7 = f7 * f10; + f8 = f8 * f11; + f9 = f9 * f11; + Map map = Maps.newHashMap(); + map.put(itemmodelgenerator$spanfacing.getFacing(), new BlockPartFace((EnumFacing)null, p_178397_3_, p_178397_2_, new BlockFaceUV(new float[] {f6, f8, f7, f9}, 0))); + + switch (itemmodelgenerator$spanfacing) + { + case UP: + list.add(new BlockPart(new Vector3f(f2, f3, 7.5F), new Vector3f(f4, f3, 8.5F), map, (BlockPartRotation)null, true)); + break; + case DOWN: + list.add(new BlockPart(new Vector3f(f2, f5, 7.5F), new Vector3f(f4, f5, 8.5F), map, (BlockPartRotation)null, true)); + break; + case LEFT: + list.add(new BlockPart(new Vector3f(f2, f3, 7.5F), new Vector3f(f2, f5, 8.5F), map, (BlockPartRotation)null, true)); + break; + case RIGHT: + list.add(new BlockPart(new Vector3f(f4, f3, 7.5F), new Vector3f(f4, f5, 8.5F), map, (BlockPartRotation)null, true)); + } + } + + return list; + } + + private List getSpans(TextureAtlasSprite p_178393_1_) + { + int i = p_178393_1_.getIconWidth(); + int j = p_178393_1_.getIconHeight(); + List list = Lists.newArrayList(); + + for (int k = 0; k < p_178393_1_.getFrameCount(); ++k) + { + int[] aint = p_178393_1_.getFrameTextureData(k)[0]; + + for (int l = 0; l < j; ++l) + { + for (int i1 = 0; i1 < i; ++i1) + { + boolean flag = !this.isTransparent(aint, i1, l, i, j); + this.checkTransition(ItemModelGenerator.SpanFacing.UP, list, aint, i1, l, i, j, flag); + this.checkTransition(ItemModelGenerator.SpanFacing.DOWN, list, aint, i1, l, i, j, flag); + this.checkTransition(ItemModelGenerator.SpanFacing.LEFT, list, aint, i1, l, i, j, flag); + this.checkTransition(ItemModelGenerator.SpanFacing.RIGHT, list, aint, i1, l, i, j, flag); + } + } + } + + return list; + } + + private void checkTransition(ItemModelGenerator.SpanFacing p_178396_1_, List p_178396_2_, int[] p_178396_3_, int p_178396_4_, int p_178396_5_, int p_178396_6_, int p_178396_7_, boolean p_178396_8_) + { + boolean flag = this.isTransparent(p_178396_3_, p_178396_4_ + p_178396_1_.getXOffset(), p_178396_5_ + p_178396_1_.getYOffset(), p_178396_6_, p_178396_7_) && p_178396_8_; + + if (flag) + { + this.createOrExpandSpan(p_178396_2_, p_178396_1_, p_178396_4_, p_178396_5_); + } + } + + private void createOrExpandSpan(List p_178395_1_, ItemModelGenerator.SpanFacing p_178395_2_, int p_178395_3_, int p_178395_4_) + { + ItemModelGenerator.Span itemmodelgenerator$span = null; + + for (ItemModelGenerator.Span itemmodelgenerator$span1 : p_178395_1_) + { + if (itemmodelgenerator$span1.getFacing() == p_178395_2_) + { + int i = p_178395_2_.isHorizontal() ? p_178395_4_ : p_178395_3_; + + if (itemmodelgenerator$span1.getAnchor() == i) + { + itemmodelgenerator$span = itemmodelgenerator$span1; + break; + } + } + } + + int j = p_178395_2_.isHorizontal() ? p_178395_4_ : p_178395_3_; + int k = p_178395_2_.isHorizontal() ? p_178395_3_ : p_178395_4_; + + if (itemmodelgenerator$span == null) + { + p_178395_1_.add(new ItemModelGenerator.Span(p_178395_2_, k, j)); + } + else + { + itemmodelgenerator$span.expand(k); + } + } + + private boolean isTransparent(int[] p_178391_1_, int p_178391_2_, int p_178391_3_, int p_178391_4_, int p_178391_5_) + { + if (p_178391_2_ >= 0 && p_178391_3_ >= 0 && p_178391_2_ < p_178391_4_ && p_178391_3_ < p_178391_5_) + { + return (p_178391_1_[p_178391_3_ * p_178391_4_ + p_178391_2_] >> 24 & 255) == 0; + } + else + { + return true; + } + } + + @SideOnly(Side.CLIENT) + static class Span + { + private final ItemModelGenerator.SpanFacing spanFacing; + private int min; + private int max; + private final int anchor; + + public Span(ItemModelGenerator.SpanFacing spanFacingIn, int p_i46216_2_, int p_i46216_3_) + { + this.spanFacing = spanFacingIn; + this.min = p_i46216_2_; + this.max = p_i46216_2_; + this.anchor = p_i46216_3_; + } + + public void expand(int p_178382_1_) + { + if (p_178382_1_ < this.min) + { + this.min = p_178382_1_; + } + else if (p_178382_1_ > this.max) + { + this.max = p_178382_1_; + } + } + + public ItemModelGenerator.SpanFacing getFacing() + { + return this.spanFacing; + } + + public int getMin() + { + return this.min; + } + + public int getMax() + { + return this.max; + } + + public int getAnchor() + { + return this.anchor; + } + } + + @SideOnly(Side.CLIENT) + static enum SpanFacing + { + UP(EnumFacing.UP, 0, -1), + DOWN(EnumFacing.DOWN, 0, 1), + LEFT(EnumFacing.EAST, -1, 0), + RIGHT(EnumFacing.WEST, 1, 0); + + private final EnumFacing facing; + private final int xOffset; + private final int yOffset; + + private SpanFacing(EnumFacing facing, int p_i46215_4_, int p_i46215_5_) + { + this.facing = facing; + this.xOffset = p_i46215_4_; + this.yOffset = p_i46215_5_; + } + + /** + * Gets the direction of the block's facing. + */ + public EnumFacing getFacing() + { + return this.facing; + } + + public int getXOffset() + { + return this.xOffset; + } + + public int getYOffset() + { + return this.yOffset; + } + + private boolean isHorizontal() + { + return this == DOWN || this == UP; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemOverride.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemOverride.java new file mode 100644 index 0000000..50fc917 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemOverride.java @@ -0,0 +1,84 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Maps; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.IItemPropertyGetter; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ItemOverride +{ + private final ResourceLocation location; + private final Map mapResourceValues; + + public ItemOverride(ResourceLocation locationIn, Map propertyValues) + { + this.location = locationIn; + this.mapResourceValues = propertyValues; + } + + /** + * Get the location of the target model + */ + public ResourceLocation getLocation() + { + return this.location; + } + + boolean matchesItemStack(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase livingEntity) + { + Item item = stack.getItem(); + + for (Entry entry : this.mapResourceValues.entrySet()) + { + IItemPropertyGetter iitempropertygetter = item.getPropertyGetter(entry.getKey()); + + if (iitempropertygetter == null || iitempropertygetter.apply(stack, worldIn, livingEntity) < ((Float)entry.getValue()).floatValue()) + { + return false; + } + } + + return true; + } + + @SideOnly(Side.CLIENT) + static class Deserializer implements JsonDeserializer + { + public ItemOverride deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + ResourceLocation resourcelocation = new ResourceLocation(JsonUtils.getString(jsonobject, "model")); + Map map = this.makeMapResourceValues(jsonobject); + return new ItemOverride(resourcelocation, map); + } + + protected Map makeMapResourceValues(JsonObject p_188025_1_) + { + Map map = Maps.newLinkedHashMap(); + JsonObject jsonobject = JsonUtils.getJsonObject(p_188025_1_, "predicate"); + + for (Entry entry : jsonobject.entrySet()) + { + map.put(new ResourceLocation(entry.getKey()), Float.valueOf(JsonUtils.getFloat(entry.getValue(), entry.getKey()))); + } + + return map; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemOverrideList.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemOverrideList.java new file mode 100644 index 0000000..9714148 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemOverrideList.java @@ -0,0 +1,66 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ItemOverrideList +{ + public static final ItemOverrideList NONE = new ItemOverrideList(); + private final List overrides = Lists.newArrayList(); + + private ItemOverrideList() + { + } + + public ItemOverrideList(List overridesIn) + { + for (int i = overridesIn.size() - 1; i >= 0; --i) + { + this.overrides.add(overridesIn.get(i)); + } + } + + @Nullable + @Deprecated + public ResourceLocation applyOverride(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + if (!this.overrides.isEmpty()) + { + for (ItemOverride itemoverride : this.overrides) + { + if (itemoverride.matchesItemStack(stack, worldIn, entityIn)) + { + return itemoverride.getLocation(); + } + } + } + + return null; + } + + public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, @Nullable World world, @Nullable EntityLivingBase entity) + { + if (!stack.isEmpty() && stack.getItem().hasCustomProperties()) + { + ResourceLocation location = applyOverride(stack, world, entity); + if (location != null) + { + return net.minecraft.client.Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getModelManager().getModel(net.minecraftforge.client.model.ModelLoader.getInventoryVariant(location.toString())); + } + } + return originalModel; + } + + public com.google.common.collect.ImmutableList getOverrides() + { + return com.google.common.collect.ImmutableList.copyOf(overrides); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java new file mode 100644 index 0000000..dc4fe5e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ItemTransformVec3f.java @@ -0,0 +1,112 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Vector3f; + +/* + * @deprecated use {@link net.minecraftforge.client.model.IModelState} and {@link net.minecraftforge.client.model.TRSRTransformation} + */ +@SideOnly(Side.CLIENT) +@Deprecated +public class ItemTransformVec3f implements net.minecraftforge.common.model.IModelState +{ + public java.util.Optional apply(java.util.Optional part) { return net.minecraftforge.client.ForgeHooksClient.applyTransform(this, part); } + public static final ItemTransformVec3f DEFAULT = new ItemTransformVec3f(new Vector3f(), new Vector3f(), new Vector3f(1.0F, 1.0F, 1.0F)); + public final Vector3f rotation; + public final Vector3f translation; + public final Vector3f scale; + + public ItemTransformVec3f(Vector3f rotation, Vector3f translation, Vector3f scale) + { + this.rotation = new Vector3f(rotation); + this.translation = new Vector3f(translation); + this.scale = new Vector3f(scale); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (this.getClass() != p_equals_1_.getClass()) + { + return false; + } + else + { + ItemTransformVec3f itemtransformvec3f = (ItemTransformVec3f)p_equals_1_; + return this.rotation.equals(itemtransformvec3f.rotation) && this.scale.equals(itemtransformvec3f.scale) && this.translation.equals(itemtransformvec3f.translation); + } + } + + public int hashCode() + { + int i = this.rotation.hashCode(); + i = 31 * i + this.translation.hashCode(); + i = 31 * i + this.scale.hashCode(); + return i; + } + + @SideOnly(Side.CLIENT) + static class Deserializer implements JsonDeserializer + { + private static final Vector3f ROTATION_DEFAULT = new Vector3f(0.0F, 0.0F, 0.0F); + private static final Vector3f TRANSLATION_DEFAULT = new Vector3f(0.0F, 0.0F, 0.0F); + private static final Vector3f SCALE_DEFAULT = new Vector3f(1.0F, 1.0F, 1.0F); + + public ItemTransformVec3f deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + Vector3f vector3f = this.parseVector3f(jsonobject, "rotation", ROTATION_DEFAULT); + Vector3f vector3f1 = this.parseVector3f(jsonobject, "translation", TRANSLATION_DEFAULT); + vector3f1.scale(0.0625F); + vector3f1.x = MathHelper.clamp(vector3f1.x, -5.0F, 5.0F); + vector3f1.y = MathHelper.clamp(vector3f1.y, -5.0F, 5.0F); + vector3f1.z = MathHelper.clamp(vector3f1.z, -5.0F, 5.0F); + Vector3f vector3f2 = this.parseVector3f(jsonobject, "scale", SCALE_DEFAULT); + vector3f2.x = MathHelper.clamp(vector3f2.x, -4.0F, 4.0F); + vector3f2.y = MathHelper.clamp(vector3f2.y, -4.0F, 4.0F); + vector3f2.z = MathHelper.clamp(vector3f2.z, -4.0F, 4.0F); + return new ItemTransformVec3f(vector3f, vector3f1, vector3f2); + } + + private Vector3f parseVector3f(JsonObject jsonObject, String key, Vector3f defaultValue) + { + if (!jsonObject.has(key)) + { + return defaultValue; + } + else + { + JsonArray jsonarray = JsonUtils.getJsonArray(jsonObject, key); + + if (jsonarray.size() != 3) + { + throw new JsonParseException("Expected 3 " + key + " values, found: " + jsonarray.size()); + } + else + { + float[] afloat = new float[3]; + + for (int i = 0; i < afloat.length; ++i) + { + afloat[i] = JsonUtils.getFloat(jsonarray.get(i), key + "[" + i + "]"); + } + + return new Vector3f(afloat[0], afloat[1], afloat[2]); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBakery.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBakery.java new file mode 100644 index 0000000..c6bea6d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBakery.java @@ -0,0 +1,964 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; +import com.google.common.collect.Sets; +import java.io.Closeable; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Deque; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.BlockModelShapes; +import net.minecraft.client.renderer.block.model.multipart.Multipart; +import net.minecraft.client.renderer.block.model.multipart.Selector; +import net.minecraft.client.renderer.block.statemap.BlockStateMapper; +import net.minecraft.client.renderer.texture.ITextureMapPopulator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.IRegistry; +import net.minecraft.util.registry.RegistrySimple; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ModelBakery +{ + protected static final Set LOCATIONS_BUILTIN_TEXTURES = Sets.newHashSet(new ResourceLocation("blocks/water_flow"), new ResourceLocation("blocks/water_still"), new ResourceLocation("blocks/lava_flow"), new ResourceLocation("blocks/lava_still"), new ResourceLocation("blocks/water_overlay"), new ResourceLocation("blocks/destroy_stage_0"), new ResourceLocation("blocks/destroy_stage_1"), new ResourceLocation("blocks/destroy_stage_2"), new ResourceLocation("blocks/destroy_stage_3"), new ResourceLocation("blocks/destroy_stage_4"), new ResourceLocation("blocks/destroy_stage_5"), new ResourceLocation("blocks/destroy_stage_6"), new ResourceLocation("blocks/destroy_stage_7"), new ResourceLocation("blocks/destroy_stage_8"), new ResourceLocation("blocks/destroy_stage_9"), new ResourceLocation("items/empty_armor_slot_helmet"), new ResourceLocation("items/empty_armor_slot_chestplate"), new ResourceLocation("items/empty_armor_slot_leggings"), new ResourceLocation("items/empty_armor_slot_boots"), new ResourceLocation("items/empty_armor_slot_shield"), new ResourceLocation("blocks/shulker_top_white"), new ResourceLocation("blocks/shulker_top_orange"), new ResourceLocation("blocks/shulker_top_magenta"), new ResourceLocation("blocks/shulker_top_light_blue"), new ResourceLocation("blocks/shulker_top_yellow"), new ResourceLocation("blocks/shulker_top_lime"), new ResourceLocation("blocks/shulker_top_pink"), new ResourceLocation("blocks/shulker_top_gray"), new ResourceLocation("blocks/shulker_top_silver"), new ResourceLocation("blocks/shulker_top_cyan"), new ResourceLocation("blocks/shulker_top_purple"), new ResourceLocation("blocks/shulker_top_blue"), new ResourceLocation("blocks/shulker_top_brown"), new ResourceLocation("blocks/shulker_top_green"), new ResourceLocation("blocks/shulker_top_red"), new ResourceLocation("blocks/shulker_top_black")); + private static final Logger LOGGER = LogManager.getLogger(); + public static final ModelResourceLocation MODEL_MISSING = new ModelResourceLocation("builtin/missing", "missing"); + private static final String MISSING_MODEL_MESH = "{ 'textures': { 'particle': 'missingno', 'missingno': 'missingno' }, 'elements': [ { 'from': [ 0, 0, 0 ], 'to': [ 16, 16, 16 ], 'faces': { 'down': { 'uv': [ 0, 0, 16, 16 ], 'cullface': 'down', 'texture': '#missingno' }, 'up': { 'uv': [ 0, 0, 16, 16 ], 'cullface': 'up', 'texture': '#missingno' }, 'north': { 'uv': [ 0, 0, 16, 16 ], 'cullface': 'north', 'texture': '#missingno' }, 'south': { 'uv': [ 0, 0, 16, 16 ], 'cullface': 'south', 'texture': '#missingno' }, 'west': { 'uv': [ 0, 0, 16, 16 ], 'cullface': 'west', 'texture': '#missingno' }, 'east': { 'uv': [ 0, 0, 16, 16 ], 'cullface': 'east', 'texture': '#missingno' } } } ]}".replaceAll("'", "\""); + private static final Map BUILT_IN_MODELS = Maps.newHashMap(); + private static final Joiner JOINER = Joiner.on(" -> "); + protected final IResourceManager resourceManager; + protected final Map sprites = Maps.newHashMap(); + private final Map models = Maps.newLinkedHashMap(); + private final Map variants = Maps.newLinkedHashMap(); + private final Map> multipartVariantMap = Maps.>newLinkedHashMap(); + protected final TextureMap textureMap; + protected final BlockModelShapes blockModelShapes; + private final FaceBakery faceBakery = new FaceBakery(); + private final ItemModelGenerator itemModelGenerator = new ItemModelGenerator(); + protected final RegistrySimple bakedRegistry = new RegistrySimple(); + private static final String EMPTY_MODEL_RAW = "{ 'elements': [ { 'from': [0, 0, 0], 'to': [16, 16, 16], 'faces': { 'down': {'uv': [0, 0, 16, 16], 'texture': '' } } } ]}".replaceAll("'", "\""); + protected static final ModelBlock MODEL_GENERATED = ModelBlock.deserialize(EMPTY_MODEL_RAW); + protected static final ModelBlock MODEL_ENTITY = ModelBlock.deserialize(EMPTY_MODEL_RAW); + private final Map itemLocations = Maps.newLinkedHashMap(); + private final Map blockDefinitions = Maps.newHashMap(); + private final Map> variantNames = Maps.>newIdentityHashMap(); + + public ModelBakery(IResourceManager resourceManagerIn, TextureMap textureMapIn, BlockModelShapes blockModelShapesIn) + { + this.resourceManager = resourceManagerIn; + this.textureMap = textureMapIn; + this.blockModelShapes = blockModelShapesIn; + } + + public IRegistry setupModelRegistry() + { + this.loadBlocks(); + this.loadVariantItemModels(); + this.loadModelsCheck(); + this.loadSprites(); + this.makeItemModels(); + this.bakeBlockModels(); + this.bakeItemModels(); + return this.bakedRegistry; + } + + protected void loadBlocks() + { + BlockStateMapper blockstatemapper = this.blockModelShapes.getBlockStateMapper(); + + for (Block block : Block.REGISTRY) + { + for (final ResourceLocation resourcelocation : blockstatemapper.getBlockstateLocations(block)) + { + try + { + loadBlock(blockstatemapper, block, resourcelocation); + } + catch (Exception exception) + { + LOGGER.warn((String)("Unable to load definition " + resourcelocation), (Throwable)exception); + } + } + } + } + + protected void loadBlock(BlockStateMapper blockstatemapper, Block block, final ResourceLocation resourcelocation) + { + { + { + { + ModelBlockDefinition modelblockdefinition = this.getModelBlockDefinition(resourcelocation); + Map map = blockstatemapper.getVariants(block); + + if (modelblockdefinition.hasMultipartData()) + { + Collection collection = Sets.newHashSet(map.values()); + modelblockdefinition.getMultipartData().setStateContainer(block.getBlockState()); + Collection collection1 = (Collection)this.multipartVariantMap.get(modelblockdefinition); + + if (collection1 == null) + { + collection1 = Lists.newArrayList(); + } + + collection1.addAll(Lists.newArrayList(Iterables.filter(collection, new Predicate() + { + public boolean apply(@Nullable ModelResourceLocation p_apply_1_) + { + return resourcelocation.equals(p_apply_1_); + } + }))); + registerMultipartVariant(modelblockdefinition, collection1); + } + + for (Entry entry : map.entrySet()) + { + ModelResourceLocation modelresourcelocation = entry.getValue(); + + if (resourcelocation.equals(modelresourcelocation)) + { + try + { + registerVariant(modelblockdefinition, modelresourcelocation); + } + catch (RuntimeException var12) + { + if (!modelblockdefinition.hasMultipartData()) + { + LOGGER.warn("Unable to load variant: " + modelresourcelocation.getVariant() + " from " + modelresourcelocation, var12); + } + } + } + } + } + } + } + } + + protected void loadVariantItemModels() + { + this.variants.put(MODEL_MISSING, new VariantList(Lists.newArrayList(new Variant(new ResourceLocation(MODEL_MISSING.getResourcePath()), ModelRotation.X0_Y0, false, 1)))); + this.loadStaticModels(); + this.loadVariantModels(); + this.loadMultipartVariantModels(); + this.loadItemModels(); + } + + private void loadStaticModels() + { + ResourceLocation resourcelocation = new ResourceLocation("item_frame"); + ModelBlockDefinition modelblockdefinition = this.getModelBlockDefinition(resourcelocation); + this.registerVariant(modelblockdefinition, new ModelResourceLocation(resourcelocation, "normal")); + this.registerVariant(modelblockdefinition, new ModelResourceLocation(resourcelocation, "map")); + } + + protected void registerVariant(ModelBlockDefinition blockstateDefinition, ModelResourceLocation location) + { + try + { + this.variants.put(location, blockstateDefinition.getVariant(location.getVariant())); + } + catch (RuntimeException var4) + { + if (!blockstateDefinition.hasMultipartData()) + { + LOGGER.warn("Unable to load variant: {} from {}", location.getVariant(), location); + } + } + } + + protected ModelBlockDefinition getModelBlockDefinition(ResourceLocation location) + { + ResourceLocation resourcelocation = this.getBlockstateLocation(location); + ModelBlockDefinition modelblockdefinition = this.blockDefinitions.get(resourcelocation); + + if (modelblockdefinition == null) + { + modelblockdefinition = this.loadMultipartMBD(location, resourcelocation); + this.blockDefinitions.put(resourcelocation, modelblockdefinition); + } + + return modelblockdefinition; + } + + private ModelBlockDefinition loadMultipartMBD(ResourceLocation location, ResourceLocation fileIn) + { + List list = Lists.newArrayList(); + + try + { + for (IResource iresource : this.resourceManager.getAllResources(fileIn)) + { + list.add(this.loadModelBlockDefinition(location, iresource)); + } + } + catch (IOException ioexception) + { + throw new RuntimeException("Encountered an exception when loading model definition of model " + fileIn, ioexception); + } + + return new ModelBlockDefinition(list); + } + + private ModelBlockDefinition loadModelBlockDefinition(ResourceLocation location, IResource resource) + { + InputStream inputstream = null; + ModelBlockDefinition lvt_4_1_; + + try + { + inputstream = resource.getInputStream(); + lvt_4_1_ = ModelBlockDefinition.parseFromReader(new InputStreamReader(inputstream, StandardCharsets.UTF_8), location); + } + catch (Exception exception) + { + throw new RuntimeException("Encountered an exception when loading model definition of '" + location + "' from: '" + resource.getResourceLocation() + "' in resourcepack: '" + resource.getResourcePackName() + "'", exception); + } + finally + { + IOUtils.closeQuietly(inputstream); + } + + return lvt_4_1_; + } + + private ResourceLocation getBlockstateLocation(ResourceLocation location) + { + return new ResourceLocation(location.getResourceDomain(), "blockstates/" + location.getResourcePath() + ".json"); + } + + protected void loadVariantModels() + { + for (Entry entry : this.variants.entrySet()) + { + this.loadVariantList(entry.getKey(), entry.getValue()); + } + } + + protected void loadMultipartVariantModels() + { + for (Entry> entry : this.multipartVariantMap.entrySet()) + { + ModelResourceLocation modelresourcelocation = (ModelResourceLocation)(entry.getValue()).iterator().next(); + + for (VariantList variantlist : (entry.getKey()).getMultipartVariants()) + { + this.loadVariantList(modelresourcelocation, variantlist); + } + } + } + + protected void loadVariantList(ModelResourceLocation p_188638_1_, VariantList p_188638_2_) + { + for (Variant variant : p_188638_2_.getVariantList()) + { + ResourceLocation resourcelocation = variant.getModelLocation(); + + if (this.models.get(resourcelocation) == null) + { + try + { + this.models.put(resourcelocation, this.loadModel(resourcelocation)); + } + catch (Exception exception) + { + LOGGER.warn("Unable to load block model: '{}' for variant: '{}': {} ", resourcelocation, p_188638_1_, exception); + } + } + } + } + + protected ModelBlock loadModel(ResourceLocation location) throws IOException + { + Reader reader = null; + IResource iresource = null; + ModelBlock lvt_5_2_; + + try + { + String s = location.getResourcePath(); + + if (!"builtin/generated".equals(s)) + { + if ("builtin/entity".equals(s)) + { + lvt_5_2_ = MODEL_ENTITY; + return lvt_5_2_; + } + + if (s.startsWith("builtin/")) + { + String s2 = s.substring("builtin/".length()); + String s1 = BUILT_IN_MODELS.get(s2); + + if (s1 == null) + { + throw new FileNotFoundException(location.toString()); + } + + reader = new StringReader(s1); + } + else + { + iresource = this.resourceManager.getResource(this.getModelLocation(location)); + reader = new InputStreamReader(iresource.getInputStream(), StandardCharsets.UTF_8); + } + + lvt_5_2_ = ModelBlock.deserialize(reader); + lvt_5_2_.name = location.toString(); + ModelBlock modelblock1 = lvt_5_2_; + return modelblock1; + } + + lvt_5_2_ = MODEL_GENERATED; + } + finally + { + IOUtils.closeQuietly(reader); + IOUtils.closeQuietly((Closeable)iresource); + } + + return lvt_5_2_; + } + + protected ResourceLocation getModelLocation(ResourceLocation location) + { + return new ResourceLocation(location.getResourceDomain(), "models/" + location.getResourcePath() + ".json"); + } + + protected void loadItemModels() + { + this.registerVariantNames(); + + for (Item item : Item.REGISTRY) + { + for (String s : this.getVariantNames(item)) + { + ResourceLocation resourcelocation = this.getItemLocation(s); + ResourceLocation resourcelocation1 = Item.REGISTRY.getNameForObject(item); + this.loadItemModel(s, resourcelocation, resourcelocation1); + + if (item.hasCustomProperties()) + { + ModelBlock modelblock = this.models.get(resourcelocation); + + if (modelblock != null) + { + for (ResourceLocation resourcelocation2 : modelblock.getOverrideLocations()) + { + this.loadItemModel(resourcelocation2.toString(), resourcelocation2, resourcelocation1); + } + } + } + } + } + } + + private void loadItemModel(String variantName, ResourceLocation location, ResourceLocation itemName) + { + this.itemLocations.put(variantName, location); + + if (this.models.get(location) == null) + { + try + { + ModelBlock modelblock = this.loadModel(location); + this.models.put(location, modelblock); + } + catch (Exception exception) + { + LOGGER.warn("Unable to load item model: '{}' for item: '{}'", location, itemName, exception); + } + } + } + + protected void registerVariantNames() + { + this.variantNames.clear(); // FML clear this to prevent double ups. + this.variantNames.put(Item.getItemFromBlock(Blocks.STONE), Lists.newArrayList("stone", "granite", "granite_smooth", "diorite", "diorite_smooth", "andesite", "andesite_smooth")); + this.variantNames.put(Item.getItemFromBlock(Blocks.DIRT), Lists.newArrayList("dirt", "coarse_dirt", "podzol")); + this.variantNames.put(Item.getItemFromBlock(Blocks.PLANKS), Lists.newArrayList("oak_planks", "spruce_planks", "birch_planks", "jungle_planks", "acacia_planks", "dark_oak_planks")); + this.variantNames.put(Item.getItemFromBlock(Blocks.SAPLING), Lists.newArrayList("oak_sapling", "spruce_sapling", "birch_sapling", "jungle_sapling", "acacia_sapling", "dark_oak_sapling")); + this.variantNames.put(Item.getItemFromBlock(Blocks.SAND), Lists.newArrayList("sand", "red_sand")); + this.variantNames.put(Item.getItemFromBlock(Blocks.LOG), Lists.newArrayList("oak_log", "spruce_log", "birch_log", "jungle_log")); + this.variantNames.put(Item.getItemFromBlock(Blocks.LEAVES), Lists.newArrayList("oak_leaves", "spruce_leaves", "birch_leaves", "jungle_leaves")); + this.variantNames.put(Item.getItemFromBlock(Blocks.SPONGE), Lists.newArrayList("sponge", "sponge_wet")); + this.variantNames.put(Item.getItemFromBlock(Blocks.SANDSTONE), Lists.newArrayList("sandstone", "chiseled_sandstone", "smooth_sandstone")); + this.variantNames.put(Item.getItemFromBlock(Blocks.RED_SANDSTONE), Lists.newArrayList("red_sandstone", "chiseled_red_sandstone", "smooth_red_sandstone")); + this.variantNames.put(Item.getItemFromBlock(Blocks.TALLGRASS), Lists.newArrayList("dead_bush", "tall_grass", "fern")); + this.variantNames.put(Item.getItemFromBlock(Blocks.DEADBUSH), Lists.newArrayList("dead_bush")); + this.variantNames.put(Item.getItemFromBlock(Blocks.WOOL), Lists.newArrayList("black_wool", "red_wool", "green_wool", "brown_wool", "blue_wool", "purple_wool", "cyan_wool", "silver_wool", "gray_wool", "pink_wool", "lime_wool", "yellow_wool", "light_blue_wool", "magenta_wool", "orange_wool", "white_wool")); + this.variantNames.put(Item.getItemFromBlock(Blocks.YELLOW_FLOWER), Lists.newArrayList("dandelion")); + this.variantNames.put(Item.getItemFromBlock(Blocks.RED_FLOWER), Lists.newArrayList("poppy", "blue_orchid", "allium", "houstonia", "red_tulip", "orange_tulip", "white_tulip", "pink_tulip", "oxeye_daisy")); + this.variantNames.put(Item.getItemFromBlock(Blocks.STONE_SLAB), Lists.newArrayList("stone_slab", "sandstone_slab", "cobblestone_slab", "brick_slab", "stone_brick_slab", "nether_brick_slab", "quartz_slab")); + this.variantNames.put(Item.getItemFromBlock(Blocks.STONE_SLAB2), Lists.newArrayList("red_sandstone_slab")); + this.variantNames.put(Item.getItemFromBlock(Blocks.STAINED_GLASS), Lists.newArrayList("black_stained_glass", "red_stained_glass", "green_stained_glass", "brown_stained_glass", "blue_stained_glass", "purple_stained_glass", "cyan_stained_glass", "silver_stained_glass", "gray_stained_glass", "pink_stained_glass", "lime_stained_glass", "yellow_stained_glass", "light_blue_stained_glass", "magenta_stained_glass", "orange_stained_glass", "white_stained_glass")); + this.variantNames.put(Item.getItemFromBlock(Blocks.MONSTER_EGG), Lists.newArrayList("stone_monster_egg", "cobblestone_monster_egg", "stone_brick_monster_egg", "mossy_brick_monster_egg", "cracked_brick_monster_egg", "chiseled_brick_monster_egg")); + this.variantNames.put(Item.getItemFromBlock(Blocks.STONEBRICK), Lists.newArrayList("stonebrick", "mossy_stonebrick", "cracked_stonebrick", "chiseled_stonebrick")); + this.variantNames.put(Item.getItemFromBlock(Blocks.WOODEN_SLAB), Lists.newArrayList("oak_slab", "spruce_slab", "birch_slab", "jungle_slab", "acacia_slab", "dark_oak_slab")); + this.variantNames.put(Item.getItemFromBlock(Blocks.COBBLESTONE_WALL), Lists.newArrayList("cobblestone_wall", "mossy_cobblestone_wall")); + this.variantNames.put(Item.getItemFromBlock(Blocks.ANVIL), Lists.newArrayList("anvil_intact", "anvil_slightly_damaged", "anvil_very_damaged")); + this.variantNames.put(Item.getItemFromBlock(Blocks.QUARTZ_BLOCK), Lists.newArrayList("quartz_block", "chiseled_quartz_block", "quartz_column")); + this.variantNames.put(Item.getItemFromBlock(Blocks.STAINED_HARDENED_CLAY), Lists.newArrayList("black_stained_hardened_clay", "red_stained_hardened_clay", "green_stained_hardened_clay", "brown_stained_hardened_clay", "blue_stained_hardened_clay", "purple_stained_hardened_clay", "cyan_stained_hardened_clay", "silver_stained_hardened_clay", "gray_stained_hardened_clay", "pink_stained_hardened_clay", "lime_stained_hardened_clay", "yellow_stained_hardened_clay", "light_blue_stained_hardened_clay", "magenta_stained_hardened_clay", "orange_stained_hardened_clay", "white_stained_hardened_clay")); + this.variantNames.put(Item.getItemFromBlock(Blocks.STAINED_GLASS_PANE), Lists.newArrayList("black_stained_glass_pane", "red_stained_glass_pane", "green_stained_glass_pane", "brown_stained_glass_pane", "blue_stained_glass_pane", "purple_stained_glass_pane", "cyan_stained_glass_pane", "silver_stained_glass_pane", "gray_stained_glass_pane", "pink_stained_glass_pane", "lime_stained_glass_pane", "yellow_stained_glass_pane", "light_blue_stained_glass_pane", "magenta_stained_glass_pane", "orange_stained_glass_pane", "white_stained_glass_pane")); + this.variantNames.put(Item.getItemFromBlock(Blocks.LEAVES2), Lists.newArrayList("acacia_leaves", "dark_oak_leaves")); + this.variantNames.put(Item.getItemFromBlock(Blocks.LOG2), Lists.newArrayList("acacia_log", "dark_oak_log")); + this.variantNames.put(Item.getItemFromBlock(Blocks.PRISMARINE), Lists.newArrayList("prismarine", "prismarine_bricks", "dark_prismarine")); + this.variantNames.put(Item.getItemFromBlock(Blocks.CARPET), Lists.newArrayList("black_carpet", "red_carpet", "green_carpet", "brown_carpet", "blue_carpet", "purple_carpet", "cyan_carpet", "silver_carpet", "gray_carpet", "pink_carpet", "lime_carpet", "yellow_carpet", "light_blue_carpet", "magenta_carpet", "orange_carpet", "white_carpet")); + this.variantNames.put(Item.getItemFromBlock(Blocks.DOUBLE_PLANT), Lists.newArrayList("sunflower", "syringa", "double_grass", "double_fern", "double_rose", "paeonia")); + this.variantNames.put(Items.COAL, Lists.newArrayList("coal", "charcoal")); + this.variantNames.put(Items.FISH, Lists.newArrayList("cod", "salmon", "clownfish", "pufferfish")); + this.variantNames.put(Items.COOKED_FISH, Lists.newArrayList("cooked_cod", "cooked_salmon")); + this.variantNames.put(Items.DYE, Lists.newArrayList("dye_black", "dye_red", "dye_green", "dye_brown", "dye_blue", "dye_purple", "dye_cyan", "dye_silver", "dye_gray", "dye_pink", "dye_lime", "dye_yellow", "dye_light_blue", "dye_magenta", "dye_orange", "dye_white")); + this.variantNames.put(Items.POTIONITEM, Lists.newArrayList("bottle_drinkable")); + this.variantNames.put(Items.SKULL, Lists.newArrayList("skull_skeleton", "skull_wither", "skull_zombie", "skull_char", "skull_creeper", "skull_dragon")); + this.variantNames.put(Items.SPLASH_POTION, Lists.newArrayList("bottle_splash")); + this.variantNames.put(Items.LINGERING_POTION, Lists.newArrayList("bottle_lingering")); + this.variantNames.put(Item.getItemFromBlock(Blocks.CONCRETE), Lists.newArrayList("black_concrete", "red_concrete", "green_concrete", "brown_concrete", "blue_concrete", "purple_concrete", "cyan_concrete", "silver_concrete", "gray_concrete", "pink_concrete", "lime_concrete", "yellow_concrete", "light_blue_concrete", "magenta_concrete", "orange_concrete", "white_concrete")); + this.variantNames.put(Item.getItemFromBlock(Blocks.CONCRETE_POWDER), Lists.newArrayList("black_concrete_powder", "red_concrete_powder", "green_concrete_powder", "brown_concrete_powder", "blue_concrete_powder", "purple_concrete_powder", "cyan_concrete_powder", "silver_concrete_powder", "gray_concrete_powder", "pink_concrete_powder", "lime_concrete_powder", "yellow_concrete_powder", "light_blue_concrete_powder", "magenta_concrete_powder", "orange_concrete_powder", "white_concrete_powder")); + this.variantNames.put(Item.getItemFromBlock(Blocks.AIR), Collections.emptyList()); + this.variantNames.put(Item.getItemFromBlock(Blocks.OAK_FENCE_GATE), Lists.newArrayList("oak_fence_gate")); + this.variantNames.put(Item.getItemFromBlock(Blocks.OAK_FENCE), Lists.newArrayList("oak_fence")); + this.variantNames.put(Items.OAK_DOOR, Lists.newArrayList("oak_door")); + this.variantNames.put(Items.BOAT, Lists.newArrayList("oak_boat")); + this.variantNames.put(Items.TOTEM_OF_UNDYING, Lists.newArrayList("totem")); + for (Entry, Set> e : customVariantNames.entrySet()) + { + this.variantNames.put(e.getKey().get(), Lists.newArrayList(e.getValue().iterator())); + } + } + + protected List getVariantNames(Item stack) + { + List list = (List)this.variantNames.get(stack); + + if (list == null) + { + list = Collections.singletonList(((ResourceLocation)Item.REGISTRY.getNameForObject(stack)).toString()); + } + + return list; + } + + protected ResourceLocation getItemLocation(String location) + { + ResourceLocation resourcelocation = new ResourceLocation(location.replaceAll("#.*", "")); + return new ResourceLocation(resourcelocation.getResourceDomain(), "item/" + resourcelocation.getResourcePath()); + } + + private void bakeBlockModels() + { + for (ModelResourceLocation modelresourcelocation : this.variants.keySet()) + { + IBakedModel ibakedmodel = this.createRandomModelForVariantList(this.variants.get(modelresourcelocation), modelresourcelocation.toString()); + + if (ibakedmodel != null) + { + this.bakedRegistry.putObject(modelresourcelocation, ibakedmodel); + } + } + + for (Entry> entry : this.multipartVariantMap.entrySet()) + { + ModelBlockDefinition modelblockdefinition = entry.getKey(); + Multipart multipart = modelblockdefinition.getMultipartData(); + String s = ((ResourceLocation)Block.REGISTRY.getNameForObject(multipart.getStateContainer().getBlock())).toString(); + MultipartBakedModel.Builder multipartbakedmodel$builder = new MultipartBakedModel.Builder(); + + for (Selector selector : multipart.getSelectors()) + { + IBakedModel ibakedmodel1 = this.createRandomModelForVariantList(selector.getVariantList(), "selector of " + s); + + if (ibakedmodel1 != null) + { + multipartbakedmodel$builder.putModel(selector.getPredicate(multipart.getStateContainer()), ibakedmodel1); + } + } + + IBakedModel ibakedmodel2 = multipartbakedmodel$builder.makeMultipartModel(); + + for (ModelResourceLocation modelresourcelocation1 : entry.getValue()) + { + if (!modelblockdefinition.hasVariant(modelresourcelocation1.getVariant())) + { + this.bakedRegistry.putObject(modelresourcelocation1, ibakedmodel2); + } + } + } + } + + @Nullable + private IBakedModel createRandomModelForVariantList(VariantList variantsIn, String modelLocation) + { + if (variantsIn.getVariantList().isEmpty()) + { + return null; + } + else + { + WeightedBakedModel.Builder weightedbakedmodel$builder = new WeightedBakedModel.Builder(); + int i = 0; + + for (Variant variant : variantsIn.getVariantList()) + { + ModelBlock modelblock = this.models.get(variant.getModelLocation()); + + if (modelblock != null && modelblock.isResolved()) + { + if (modelblock.getElements().isEmpty()) + { + LOGGER.warn("Missing elements for: {}", (Object)modelLocation); + } + else + { + IBakedModel ibakedmodel = this.bakeModel(modelblock, variant.getRotation(), variant.isUvLock()); + + if (ibakedmodel != null) + { + ++i; + weightedbakedmodel$builder.add(ibakedmodel, variant.getWeight()); + } + } + } + else + { + LOGGER.warn("Missing model for: {}", (Object)modelLocation); + } + } + + IBakedModel ibakedmodel1 = null; + + if (i == 0) + { + LOGGER.warn("No weighted models for: {}", (Object)modelLocation); + } + else if (i == 1) + { + ibakedmodel1 = weightedbakedmodel$builder.first(); + } + else + { + ibakedmodel1 = weightedbakedmodel$builder.build(); + } + + return ibakedmodel1; + } + } + + private void bakeItemModels() + { + for (Entry entry : this.itemLocations.entrySet()) + { + ResourceLocation resourcelocation = entry.getValue(); + ModelResourceLocation modelresourcelocation = net.minecraftforge.client.model.ModelLoader.getInventoryVariant(entry.getKey()); + ModelBlock modelblock = this.models.get(resourcelocation); + + if (modelblock != null && modelblock.isResolved()) + { + if (modelblock.getElements().isEmpty()) + { + LOGGER.warn("Missing elements for: {}", (Object)resourcelocation); + } + else if (this.isCustomRenderer(modelblock)) + { + this.bakedRegistry.putObject(modelresourcelocation, new BuiltInModel(modelblock.getAllTransforms(), modelblock.createOverrides())); + } + else + { + IBakedModel ibakedmodel = this.bakeModel(modelblock, ModelRotation.X0_Y0, false); + + if (ibakedmodel != null) + { + this.bakedRegistry.putObject(modelresourcelocation, ibakedmodel); + } + } + } + else + { + LOGGER.warn("Missing model for: {}", (Object)resourcelocation); + } + } + } + + private Set getVariantsTextureLocations() + { + Set set = Sets.newHashSet(); + List list = Lists.newArrayList(this.variants.keySet()); + Collections.sort(list, new Comparator() + { + public int compare(ModelResourceLocation p_compare_1_, ModelResourceLocation p_compare_2_) + { + return p_compare_1_.toString().compareTo(p_compare_2_.toString()); + } + }); + + for (ModelResourceLocation modelresourcelocation : list) + { + VariantList variantlist = this.variants.get(modelresourcelocation); + + for (Variant variant : variantlist.getVariantList()) + { + ModelBlock modelblock = this.models.get(variant.getModelLocation()); + + if (modelblock == null) + { + LOGGER.warn("Missing model for: {}", (Object)modelresourcelocation); + } + else + { + set.addAll(this.getTextureLocations(modelblock)); + } + } + } + + for (ModelBlockDefinition modelblockdefinition : this.multipartVariantMap.keySet()) + { + for (VariantList variantlist1 : modelblockdefinition.getMultipartData().getVariants()) + { + for (Variant variant1 : variantlist1.getVariantList()) + { + ModelBlock modelblock1 = this.models.get(variant1.getModelLocation()); + + if (modelblock1 == null) + { + LOGGER.warn("Missing model for: {}", Block.REGISTRY.getNameForObject(modelblockdefinition.getMultipartData().getStateContainer().getBlock())); + } + else + { + set.addAll(this.getTextureLocations(modelblock1)); + } + } + } + } + + set.addAll(LOCATIONS_BUILTIN_TEXTURES); + return set; + } + + @Nullable + private IBakedModel bakeModel(ModelBlock modelBlockIn, ModelRotation modelRotationIn, boolean uvLocked) + { + return bakeModel(modelBlockIn, (net.minecraftforge.common.model.ITransformation)modelRotationIn, uvLocked); + } + + protected IBakedModel bakeModel(ModelBlock modelBlockIn, net.minecraftforge.common.model.ITransformation modelRotationIn, boolean uvLocked) + { + TextureAtlasSprite textureatlassprite = this.sprites.get(new ResourceLocation(modelBlockIn.resolveTextureName("particle"))); + SimpleBakedModel.Builder simplebakedmodel$builder = (new SimpleBakedModel.Builder(modelBlockIn, modelBlockIn.createOverrides())).setTexture(textureatlassprite); + + if (modelBlockIn.getElements().isEmpty()) + { + return null; + } + else + { + for (BlockPart blockpart : modelBlockIn.getElements()) + { + for (EnumFacing enumfacing : blockpart.mapFaces.keySet()) + { + BlockPartFace blockpartface = blockpart.mapFaces.get(enumfacing); + TextureAtlasSprite textureatlassprite1 = this.sprites.get(new ResourceLocation(modelBlockIn.resolveTextureName(blockpartface.texture))); + + if (blockpartface.cullFace == null || !net.minecraftforge.common.model.TRSRTransformation.isInteger(modelRotationIn.getMatrix())) + { + simplebakedmodel$builder.addGeneralQuad(this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, modelRotationIn, uvLocked)); + } + else + { + simplebakedmodel$builder.addFaceQuad(modelRotationIn.rotate(blockpartface.cullFace), this.makeBakedQuad(blockpart, blockpartface, textureatlassprite1, enumfacing, modelRotationIn, uvLocked)); + } + } + } + + return simplebakedmodel$builder.makeBakedModel(); + } + } + + private BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, ModelRotation p_177589_5_, boolean p_177589_6_) + { + return makeBakedQuad(p_177589_1_, p_177589_2_, p_177589_3_, p_177589_4_, (net.minecraftforge.common.model.ITransformation)p_177589_5_, p_177589_6_); + } + + protected BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, net.minecraftforge.common.model.ITransformation p_177589_5_, boolean p_177589_6_) + { + return this.faceBakery.makeBakedQuad(p_177589_1_.positionFrom, p_177589_1_.positionTo, p_177589_2_, p_177589_3_, p_177589_4_, p_177589_5_, p_177589_1_.partRotation, p_177589_6_, p_177589_1_.shade); + } + + private void loadModelsCheck() + { + this.loadModels(); + + for (ModelBlock modelblock : this.models.values()) + { + modelblock.getParentFromMap(this.models); + } + + ModelBlock.checkModelHierarchy(this.models); + } + + private void loadModels() + { + Deque deque = Queues.newArrayDeque(); + Set set = Sets.newHashSet(); + + for (ResourceLocation resourcelocation : this.models.keySet()) + { + set.add(resourcelocation); + this.addModelParentLocation(deque, set, this.models.get(resourcelocation)); + } + + while (!deque.isEmpty()) + { + ResourceLocation resourcelocation1 = deque.pop(); + + try + { + if (this.models.get(resourcelocation1) != null) + { + continue; + } + + ModelBlock modelblock = this.loadModel(resourcelocation1); + this.models.put(resourcelocation1, modelblock); + this.addModelParentLocation(deque, set, modelblock); + } + catch (Exception exception) + { + LOGGER.warn("In parent chain: {}; unable to load model: '{}'", JOINER.join(this.getParentPath(resourcelocation1)), resourcelocation1, exception); + } + + set.add(resourcelocation1); + } + } + + private void addModelParentLocation(Deque p_188633_1_, Set p_188633_2_, ModelBlock p_188633_3_) + { + ResourceLocation resourcelocation = p_188633_3_.getParentLocation(); + + if (resourcelocation != null && !p_188633_2_.contains(resourcelocation)) + { + p_188633_1_.add(resourcelocation); + } + } + + private List getParentPath(ResourceLocation p_177573_1_) + { + List list = Lists.newArrayList(p_177573_1_); + ResourceLocation resourcelocation = p_177573_1_; + + while ((resourcelocation = this.getParentLocation(resourcelocation)) != null) + { + list.add(0, resourcelocation); + } + + return list; + } + + @Nullable + private ResourceLocation getParentLocation(ResourceLocation p_177576_1_) + { + for (Entry entry : this.models.entrySet()) + { + ModelBlock modelblock = entry.getValue(); + + if (modelblock != null && p_177576_1_.equals(modelblock.getParentLocation())) + { + return entry.getKey(); + } + } + + return null; + } + + protected Set getTextureLocations(ModelBlock p_177585_1_) + { + Set set = Sets.newHashSet(); + + for (BlockPart blockpart : p_177585_1_.getElements()) + { + for (BlockPartFace blockpartface : blockpart.mapFaces.values()) + { + ResourceLocation resourcelocation = new ResourceLocation(p_177585_1_.resolveTextureName(blockpartface.texture)); + set.add(resourcelocation); + } + } + + set.add(new ResourceLocation(p_177585_1_.resolveTextureName("particle"))); + return set; + } + + private void loadSprites() + { + final Set set = this.getVariantsTextureLocations(); + set.addAll(this.getItemsTextureLocations()); + set.remove(TextureMap.LOCATION_MISSING_TEXTURE); + ITextureMapPopulator itexturemappopulator = new ITextureMapPopulator() + { + public void registerSprites(TextureMap textureMapIn) + { + for (ResourceLocation resourcelocation : set) + { + TextureAtlasSprite textureatlassprite = textureMapIn.registerSprite(resourcelocation); + ModelBakery.this.sprites.put(resourcelocation, textureatlassprite); + } + } + }; + this.textureMap.loadSprites(this.resourceManager, itexturemappopulator); + this.sprites.put(new ResourceLocation("missingno"), this.textureMap.getMissingSprite()); + } + + private Set getItemsTextureLocations() + { + Set set = Sets.newHashSet(); + + for (ResourceLocation resourcelocation : this.itemLocations.values()) + { + ModelBlock modelblock = this.models.get(resourcelocation); + + if (modelblock != null) + { + set.add(new ResourceLocation(modelblock.resolveTextureName("particle"))); + + if (this.hasItemModel(modelblock)) + { + for (String s : ItemModelGenerator.LAYERS) + { + set.add(new ResourceLocation(modelblock.resolveTextureName(s))); + } + } + else if (!this.isCustomRenderer(modelblock)) + { + for (BlockPart blockpart : modelblock.getElements()) + { + for (BlockPartFace blockpartface : blockpart.mapFaces.values()) + { + ResourceLocation resourcelocation1 = new ResourceLocation(modelblock.resolveTextureName(blockpartface.texture)); + set.add(resourcelocation1); + } + } + } + } + } + + return set; + } + + protected boolean hasItemModel(@Nullable ModelBlock p_177581_1_) + { + if (p_177581_1_ == null) + { + return false; + } + else + { + return p_177581_1_.getRootModel() == MODEL_GENERATED; + } + } + + protected boolean isCustomRenderer(@Nullable ModelBlock p_177587_1_) + { + if (p_177587_1_ == null) + { + return false; + } + else + { + ModelBlock modelblock = p_177587_1_.getRootModel(); + return modelblock == MODEL_ENTITY; + } + } + + private void makeItemModels() + { + for (ResourceLocation resourcelocation : this.itemLocations.values()) + { + ModelBlock modelblock = this.models.get(resourcelocation); + + if (this.hasItemModel(modelblock)) + { + ModelBlock modelblock1 = this.makeItemModel(modelblock); + + if (modelblock1 != null) + { + modelblock1.name = resourcelocation.toString(); + } + + this.models.put(resourcelocation, modelblock1); + } + else if (this.isCustomRenderer(modelblock)) + { + this.models.put(resourcelocation, modelblock); + } + } + + for (TextureAtlasSprite textureatlassprite : this.sprites.values()) + { + if (!textureatlassprite.hasAnimationMetadata()) + { + textureatlassprite.clearFramesTextureData(); + } + } + } + + protected ModelBlock makeItemModel(ModelBlock p_177582_1_) + { + return this.itemModelGenerator.makeItemModel(this.textureMap, p_177582_1_); + } + + static + { + BUILT_IN_MODELS.put("missing", MISSING_MODEL_MESH); + MODEL_GENERATED.name = "generation marker"; + MODEL_ENTITY.name = "block entity marker"; + } + + protected void registerMultipartVariant(ModelBlockDefinition definition, Collection locations) + { + this.multipartVariantMap.put(definition, locations); + } + + private static Map, Set> customVariantNames = Maps.newHashMap(); + + public static void registerItemVariants(Item item, ResourceLocation... names) + { + if (!customVariantNames.containsKey(item.delegate)) + { + customVariantNames.put(item.delegate, Sets.newHashSet()); + } + for(ResourceLocation name : names) + { + customVariantNames.get(item.delegate).add(name.toString()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBlock.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBlock.java new file mode 100644 index 0000000..b82da13 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBlock.java @@ -0,0 +1,327 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.io.Reader; +import java.io.StringReader; +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ModelBlock +{ + private static final Logger LOGGER = LogManager.getLogger(); + @VisibleForTesting + static final Gson SERIALIZER = (new GsonBuilder()).registerTypeAdapter(ModelBlock.class, new ModelBlock.Deserializer()).registerTypeAdapter(BlockPart.class, new BlockPart.Deserializer()).registerTypeAdapter(BlockPartFace.class, new BlockPartFace.Deserializer()).registerTypeAdapter(BlockFaceUV.class, new BlockFaceUV.Deserializer()).registerTypeAdapter(ItemTransformVec3f.class, new ItemTransformVec3f.Deserializer()).registerTypeAdapter(ItemCameraTransforms.class, new ItemCameraTransforms.Deserializer()).registerTypeAdapter(ItemOverride.class, new ItemOverride.Deserializer()).create(); + private final List elements; + private final boolean gui3d; + public final boolean ambientOcclusion; + private final ItemCameraTransforms cameraTransforms; + private final List overrides; + public String name = ""; + @VisibleForTesting + public final Map textures; + @VisibleForTesting + public ModelBlock parent; + @VisibleForTesting + protected ResourceLocation parentLocation; + + public static ModelBlock deserialize(Reader readerIn) + { + return (ModelBlock)JsonUtils.gsonDeserialize(SERIALIZER, readerIn, ModelBlock.class, false); + } + + public static ModelBlock deserialize(String jsonString) + { + return deserialize(new StringReader(jsonString)); + } + + public ModelBlock(@Nullable ResourceLocation parentLocationIn, List elementsIn, Map texturesIn, boolean ambientOcclusionIn, boolean gui3dIn, ItemCameraTransforms cameraTransformsIn, List overridesIn) + { + this.elements = elementsIn; + this.ambientOcclusion = ambientOcclusionIn; + this.gui3d = gui3dIn; + this.textures = texturesIn; + this.parentLocation = parentLocationIn; + this.cameraTransforms = cameraTransformsIn; + this.overrides = overridesIn; + } + + public List getElements() + { + return this.elements.isEmpty() && this.hasParent() ? this.parent.getElements() : this.elements; + } + + private boolean hasParent() + { + return this.parent != null; + } + + public boolean isAmbientOcclusion() + { + return this.hasParent() ? this.parent.isAmbientOcclusion() : this.ambientOcclusion; + } + + public boolean isGui3d() + { + return this.gui3d; + } + + public boolean isResolved() + { + return this.parentLocation == null || this.parent != null && this.parent.isResolved(); + } + + public void getParentFromMap(Map p_178299_1_) + { + if (this.parentLocation != null) + { + this.parent = p_178299_1_.get(this.parentLocation); + } + } + + public Collection getOverrideLocations() + { + Set set = Sets.newHashSet(); + + for (ItemOverride itemoverride : this.overrides) + { + set.add(itemoverride.getLocation()); + } + + return set; + } + + public List getOverrides() + { + return this.overrides; + } + + public ItemOverrideList createOverrides() + { + return this.overrides.isEmpty() ? ItemOverrideList.NONE : new ItemOverrideList(this.overrides); + } + + public boolean isTexturePresent(String textureName) + { + return !"missingno".equals(this.resolveTextureName(textureName)); + } + + public String resolveTextureName(String textureName) + { + if (!this.startsWithHash(textureName)) + { + textureName = '#' + textureName; + } + + return this.resolveTextureName(textureName, new ModelBlock.Bookkeep(this)); + } + + private String resolveTextureName(String textureName, ModelBlock.Bookkeep p_178302_2_) + { + if (this.startsWithHash(textureName)) + { + if (this == p_178302_2_.modelExt) + { + LOGGER.warn("Unable to resolve texture due to upward reference: {} in {}", textureName, this.name); + return "missingno"; + } + else + { + String s = this.textures.get(textureName.substring(1)); + + if (s == null && this.hasParent()) + { + s = this.parent.resolveTextureName(textureName, p_178302_2_); + } + + p_178302_2_.modelExt = this; + + if (s != null && this.startsWithHash(s)) + { + s = p_178302_2_.model.resolveTextureName(s, p_178302_2_); + } + + return s != null && !this.startsWithHash(s) ? s : "missingno"; + } + } + else + { + return textureName; + } + } + + private boolean startsWithHash(String hash) + { + return hash.charAt(0) == '#'; + } + + @Nullable + public ResourceLocation getParentLocation() + { + return this.parentLocation; + } + + public ModelBlock getRootModel() + { + return this.hasParent() ? this.parent.getRootModel() : this; + } + + public ItemCameraTransforms getAllTransforms() + { + ItemTransformVec3f itemtransformvec3f = this.getTransform(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND); + ItemTransformVec3f itemtransformvec3f1 = this.getTransform(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); + ItemTransformVec3f itemtransformvec3f2 = this.getTransform(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND); + ItemTransformVec3f itemtransformvec3f3 = this.getTransform(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND); + ItemTransformVec3f itemtransformvec3f4 = this.getTransform(ItemCameraTransforms.TransformType.HEAD); + ItemTransformVec3f itemtransformvec3f5 = this.getTransform(ItemCameraTransforms.TransformType.GUI); + ItemTransformVec3f itemtransformvec3f6 = this.getTransform(ItemCameraTransforms.TransformType.GROUND); + ItemTransformVec3f itemtransformvec3f7 = this.getTransform(ItemCameraTransforms.TransformType.FIXED); + return new ItemCameraTransforms(itemtransformvec3f, itemtransformvec3f1, itemtransformvec3f2, itemtransformvec3f3, itemtransformvec3f4, itemtransformvec3f5, itemtransformvec3f6, itemtransformvec3f7); + } + + private ItemTransformVec3f getTransform(ItemCameraTransforms.TransformType type) + { + return this.parent != null && !this.cameraTransforms.hasCustomTransform(type) ? this.parent.getTransform(type) : this.cameraTransforms.getTransform(type); + } + + public static void checkModelHierarchy(Map p_178312_0_) + { + for (ModelBlock modelblock : p_178312_0_.values()) + { + try + { + ModelBlock modelblock1 = modelblock.parent; + + for (ModelBlock modelblock2 = modelblock1.parent; modelblock1 != modelblock2; modelblock2 = modelblock2.parent.parent) + { + modelblock1 = modelblock1.parent; + } + + throw new ModelBlock.LoopException(); + } + catch (NullPointerException var5) + { + ; + } + } + } + + @SideOnly(Side.CLIENT) + static final class Bookkeep + { + public final ModelBlock model; + public ModelBlock modelExt; + + private Bookkeep(ModelBlock modelIn) + { + this.model = modelIn; + } + } + + @SideOnly(Side.CLIENT) + public static class Deserializer implements JsonDeserializer + { + public ModelBlock deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + List list = this.getModelElements(p_deserialize_3_, jsonobject); + String s = this.getParent(jsonobject); + Map map = this.getTextures(jsonobject); + boolean flag = this.getAmbientOcclusionEnabled(jsonobject); + ItemCameraTransforms itemcameratransforms = ItemCameraTransforms.DEFAULT; + + if (jsonobject.has("display")) + { + JsonObject jsonobject1 = JsonUtils.getJsonObject(jsonobject, "display"); + itemcameratransforms = (ItemCameraTransforms)p_deserialize_3_.deserialize(jsonobject1, ItemCameraTransforms.class); + } + + List list1 = this.getItemOverrides(p_deserialize_3_, jsonobject); + ResourceLocation resourcelocation = s.isEmpty() ? null : new ResourceLocation(s); + return new ModelBlock(resourcelocation, list, map, flag, true, itemcameratransforms, list1); + } + + protected List getItemOverrides(JsonDeserializationContext deserializationContext, JsonObject object) + { + List list = Lists.newArrayList(); + + if (object.has("overrides")) + { + for (JsonElement jsonelement : JsonUtils.getJsonArray(object, "overrides")) + { + list.add((ItemOverride)deserializationContext.deserialize(jsonelement, ItemOverride.class)); + } + } + + return list; + } + + private Map getTextures(JsonObject object) + { + Map map = Maps.newHashMap(); + + if (object.has("textures")) + { + JsonObject jsonobject = object.getAsJsonObject("textures"); + + for (Entry entry : jsonobject.entrySet()) + { + map.put(entry.getKey(), ((JsonElement)entry.getValue()).getAsString()); + } + } + + return map; + } + + private String getParent(JsonObject object) + { + return JsonUtils.getString(object, "parent", ""); + } + + protected boolean getAmbientOcclusionEnabled(JsonObject object) + { + return JsonUtils.getBoolean(object, "ambientocclusion", true); + } + + protected List getModelElements(JsonDeserializationContext deserializationContext, JsonObject object) + { + List list = Lists.newArrayList(); + + if (object.has("elements")) + { + for (JsonElement jsonelement : JsonUtils.getJsonArray(object, "elements")) + { + list.add((BlockPart)deserializationContext.deserialize(jsonelement, BlockPart.class)); + } + } + + return list; + } + } + + @SideOnly(Side.CLIENT) + public static class LoopException extends RuntimeException + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java new file mode 100644 index 0000000..5203f65 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelBlockDefinition.java @@ -0,0 +1,195 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.io.Reader; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.block.model.multipart.Multipart; +import net.minecraft.client.renderer.block.model.multipart.Selector; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelBlockDefinition +{ + @VisibleForTesting + static final Gson GSON = (new GsonBuilder()).registerTypeAdapter(ModelBlockDefinition.class, new ModelBlockDefinition.Deserializer()).registerTypeAdapter(Variant.class, new Variant.Deserializer()).registerTypeAdapter(VariantList.class, new VariantList.Deserializer()).registerTypeAdapter(Multipart.class, new Multipart.Deserializer()).registerTypeAdapter(Selector.class, new Selector.Deserializer()).create(); + private final Map mapVariants = Maps.newHashMap(); + private Multipart multipart; + + @Deprecated + public static ModelBlockDefinition parseFromReader(Reader reader) + { + return parseFromReader(reader, null); + } + + public static ModelBlockDefinition parseFromReader(Reader reader, net.minecraft.util.ResourceLocation location) { + return net.minecraftforge.client.model.BlockStateLoader.load(reader, location, GSON); + } + + public ModelBlockDefinition(Map variants, Multipart multipartIn) + { + this.multipart = multipartIn; + this.mapVariants.putAll(variants); + } + + public ModelBlockDefinition(List p_i46222_1_) + { + ModelBlockDefinition modelblockdefinition = null; + + for (ModelBlockDefinition modelblockdefinition1 : p_i46222_1_) + { + if (modelblockdefinition1.hasMultipartData()) + { + this.mapVariants.clear(); + modelblockdefinition = modelblockdefinition1; + } + + this.mapVariants.putAll(modelblockdefinition1.mapVariants); + } + + if (modelblockdefinition != null) + { + this.multipart = modelblockdefinition.multipart; + } + } + + public boolean hasVariant(String p_188000_1_) + { + return this.mapVariants.get(p_188000_1_) != null; + } + + public VariantList getVariant(String p_188004_1_) + { + VariantList variantlist = this.mapVariants.get(p_188004_1_); + + if (variantlist == null) + { + throw new ModelBlockDefinition.MissingVariantException(); + } + else + { + return variantlist; + } + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else + { + if (p_equals_1_ instanceof ModelBlockDefinition) + { + ModelBlockDefinition modelblockdefinition = (ModelBlockDefinition)p_equals_1_; + + if (this.mapVariants.equals(modelblockdefinition.mapVariants)) + { + return this.hasMultipartData() ? this.multipart.equals(modelblockdefinition.multipart) : !modelblockdefinition.hasMultipartData(); + } + } + + return false; + } + } + + public int hashCode() + { + return 31 * this.mapVariants.hashCode() + (this.hasMultipartData() ? this.multipart.hashCode() : 0); + } + + public Set getMultipartVariants() + { + Set set = Sets.newHashSet(this.mapVariants.values()); + + if (this.hasMultipartData()) + { + set.addAll(this.multipart.getVariants()); + } + + return set; + } + + public boolean hasMultipartData() + { + return this.multipart != null; + } + + public Multipart getMultipartData() + { + return this.multipart; + } + + @SideOnly(Side.CLIENT) + public static class Deserializer implements JsonDeserializer + { + public ModelBlockDefinition deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + Map map = this.parseMapVariants(p_deserialize_3_, jsonobject); + Multipart multipart = this.parseMultipart(p_deserialize_3_, jsonobject); + + if (!map.isEmpty() || multipart != null && !multipart.getVariants().isEmpty()) + { + return new ModelBlockDefinition(map, multipart); + } + else + { + throw new JsonParseException("Neither 'variants' nor 'multipart' found"); + } + } + + protected Map parseMapVariants(JsonDeserializationContext deserializationContext, JsonObject object) + { + Map map = Maps.newHashMap(); + + if (object.has("variants")) + { + JsonObject jsonobject = JsonUtils.getJsonObject(object, "variants"); + + for (Entry entry : jsonobject.entrySet()) + { + map.put(entry.getKey(), (VariantList)deserializationContext.deserialize(entry.getValue(), VariantList.class)); + } + } + + return map; + } + + @Nullable + protected Multipart parseMultipart(JsonDeserializationContext deserializationContext, JsonObject object) + { + if (!object.has("multipart")) + { + return null; + } + else + { + JsonArray jsonarray = JsonUtils.getJsonArray(object, "multipart"); + return (Multipart)deserializationContext.deserialize(jsonarray, Multipart.class); + } + } + } + + @SideOnly(Side.CLIENT) + public class MissingVariantException extends RuntimeException + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelManager.java new file mode 100644 index 0000000..bb0cd5b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelManager.java @@ -0,0 +1,61 @@ +package net.minecraft.client.renderer.block.model; + +import net.minecraft.client.renderer.BlockModelShapes; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.util.registry.IRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ModelManager implements IResourceManagerReloadListener +{ + private IRegistry modelRegistry; + private final TextureMap texMap; + private final BlockModelShapes modelProvider; + private IBakedModel defaultModel; + + public ModelManager(TextureMap textures) + { + this.texMap = textures; + this.modelProvider = new BlockModelShapes(this); + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + net.minecraftforge.client.model.ModelLoader modelbakery = new net.minecraftforge.client.model.ModelLoader(resourceManager, this.texMap, this.modelProvider); + this.modelRegistry = modelbakery.setupModelRegistry(); + this.defaultModel = this.modelRegistry.getObject(ModelBakery.MODEL_MISSING); + net.minecraftforge.client.ForgeHooksClient.onModelBake(this, this.modelRegistry, modelbakery); + this.modelProvider.reloadModels(); + } + + public IBakedModel getModel(ModelResourceLocation modelLocation) + { + if (modelLocation == null) + { + return this.defaultModel; + } + else + { + IBakedModel ibakedmodel = this.modelRegistry.getObject(modelLocation); + return ibakedmodel == null ? this.defaultModel : ibakedmodel; + } + } + + public IBakedModel getMissingModel() + { + return this.defaultModel; + } + + public TextureMap getTextureMap() + { + return this.texMap; + } + + public BlockModelShapes getBlockModelShapes() + { + return this.modelProvider; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelResourceLocation.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelResourceLocation.java new file mode 100644 index 0000000..8547c3b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelResourceLocation.java @@ -0,0 +1,83 @@ +package net.minecraft.client.renderer.block.model; + +import java.util.Locale; +import net.minecraft.util.ResourceLocation; +import org.apache.commons.lang3.StringUtils; + +public class ModelResourceLocation extends ResourceLocation +{ + private final String variant; + + protected ModelResourceLocation(int unused, String... resourceName) + { + super(0, resourceName[0], resourceName[1]); + this.variant = StringUtils.isEmpty(resourceName[2]) ? "normal" : resourceName[2].toLowerCase(Locale.ROOT); + } + + public ModelResourceLocation(String pathIn) + { + this(0, parsePathString(pathIn)); + } + + public ModelResourceLocation(ResourceLocation location, String variantIn) + { + this(location.toString(), variantIn); + } + + public ModelResourceLocation(String location, String variantIn) + { + this(0, parsePathString(location + '#' + (variantIn == null ? "normal" : variantIn))); + } + + protected static String[] parsePathString(String pathIn) + { + String[] astring = new String[] {null, pathIn, null}; + int i = pathIn.indexOf(35); + String s = pathIn; + + if (i >= 0) + { + astring[2] = pathIn.substring(i + 1, pathIn.length()); + + if (i > 1) + { + s = pathIn.substring(0, i); + } + } + + System.arraycopy(ResourceLocation.splitObjectName(s), 0, astring, 0, 2); + return astring; + } + + public String getVariant() + { + return this.variant; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ instanceof ModelResourceLocation && super.equals(p_equals_1_)) + { + ModelResourceLocation modelresourcelocation = (ModelResourceLocation)p_equals_1_; + return this.variant.equals(modelresourcelocation.variant); + } + else + { + return false; + } + } + + public int hashCode() + { + return 31 * super.hashCode() + this.variant.hashCode(); + } + + public String toString() + { + return super.toString() + '#' + this.variant; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelRotation.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelRotation.java new file mode 100644 index 0000000..a4f1755 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/ModelRotation.java @@ -0,0 +1,124 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Matrix4f; +import org.lwjgl.util.vector.Vector3f; + +@SideOnly(Side.CLIENT) +public enum ModelRotation implements net.minecraftforge.common.model.IModelState, net.minecraftforge.common.model.ITransformation +{ + X0_Y0(0, 0), + X0_Y90(0, 90), + X0_Y180(0, 180), + X0_Y270(0, 270), + X90_Y0(90, 0), + X90_Y90(90, 90), + X90_Y180(90, 180), + X90_Y270(90, 270), + X180_Y0(180, 0), + X180_Y90(180, 90), + X180_Y180(180, 180), + X180_Y270(180, 270), + X270_Y0(270, 0), + X270_Y90(270, 90), + X270_Y180(270, 180), + X270_Y270(270, 270); + + private static final Map MAP_ROTATIONS = Maps.newHashMap(); + private final int combinedXY; + private final Matrix4f matrix4d; + private final int quartersX; + private final int quartersY; + + private static int combineXY(int p_177521_0_, int p_177521_1_) + { + return p_177521_0_ * 360 + p_177521_1_; + } + + private ModelRotation(int x, int y) + { + this.combinedXY = combineXY(x, y); + this.matrix4d = new Matrix4f(); + Matrix4f matrix4f = new Matrix4f(); + matrix4f.setIdentity(); + Matrix4f.rotate((float)(-x) * 0.017453292F, new Vector3f(1.0F, 0.0F, 0.0F), matrix4f, matrix4f); + this.quartersX = MathHelper.abs(x / 90); + Matrix4f matrix4f1 = new Matrix4f(); + matrix4f1.setIdentity(); + Matrix4f.rotate((float)(-y) * 0.017453292F, new Vector3f(0.0F, 1.0F, 0.0F), matrix4f1, matrix4f1); + this.quartersY = MathHelper.abs(y / 90); + Matrix4f.mul(matrix4f1, matrix4f, this.matrix4d); + } + + public Matrix4f getMatrix4d() + { + return this.matrix4d; + } + + public EnumFacing rotateFace(EnumFacing facing) + { + EnumFacing enumfacing = facing; + + for (int i = 0; i < this.quartersX; ++i) + { + enumfacing = enumfacing.rotateAround(EnumFacing.Axis.X); + } + + if (enumfacing.getAxis() != EnumFacing.Axis.Y) + { + for (int j = 0; j < this.quartersY; ++j) + { + enumfacing = enumfacing.rotateAround(EnumFacing.Axis.Y); + } + } + + return enumfacing; + } + + public int rotateVertex(EnumFacing facing, int vertexIndex) + { + int i = vertexIndex; + + if (facing.getAxis() == EnumFacing.Axis.X) + { + i = (vertexIndex + this.quartersX) % 4; + } + + EnumFacing enumfacing = facing; + + for (int j = 0; j < this.quartersX; ++j) + { + enumfacing = enumfacing.rotateAround(EnumFacing.Axis.X); + } + + if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + i = (i + this.quartersY) % 4; + } + + return i; + } + + public static ModelRotation getModelRotation(int x, int y) + { + return MAP_ROTATIONS.get(Integer.valueOf(combineXY(MathHelper.normalizeAngle(x, 360), MathHelper.normalizeAngle(y, 360)))); + } + + static + { + for (ModelRotation modelrotation : values()) + { + MAP_ROTATIONS.put(Integer.valueOf(modelrotation.combinedXY), modelrotation); + } + } + + public java.util.Optional apply(java.util.Optional part) { return net.minecraftforge.client.ForgeHooksClient.applyTransform(this, part); } + public javax.vecmath.Matrix4f getMatrix() { return net.minecraftforge.common.model.TRSRTransformation.from(this).getMatrix(); } + public EnumFacing rotate(EnumFacing facing) { return rotateFace(facing); } + public int rotate(EnumFacing facing, int vertexIndex) { return rotateVertex(facing, vertexIndex); } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/MultipartBakedModel.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/MultipartBakedModel.java new file mode 100644 index 0000000..6ae95c2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/MultipartBakedModel.java @@ -0,0 +1,100 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MultipartBakedModel implements IBakedModel +{ + private final Map, IBakedModel> selectors; + protected final boolean ambientOcclusion; + protected final boolean gui3D; + protected final TextureAtlasSprite particleTexture; + protected final ItemCameraTransforms cameraTransforms; + protected final ItemOverrideList overrides; + + public MultipartBakedModel(Map, IBakedModel> selectorsIn) + { + this.selectors = selectorsIn; + IBakedModel ibakedmodel = selectorsIn.values().iterator().next(); + this.ambientOcclusion = ibakedmodel.isAmbientOcclusion(); + this.gui3D = ibakedmodel.isGui3d(); + this.particleTexture = ibakedmodel.getParticleTexture(); + this.cameraTransforms = ibakedmodel.getItemCameraTransforms(); + this.overrides = ibakedmodel.getOverrides(); + } + + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) + { + List list = Lists.newArrayList(); + + if (state != null) + { + for (Entry, IBakedModel> entry : this.selectors.entrySet()) + { + if (((Predicate)entry.getKey()).apply(state)) + { + list.addAll((entry.getValue()).getQuads(state, side, rand++)); + } + } + } + + return list; + } + + public boolean isAmbientOcclusion() + { + return this.ambientOcclusion; + } + + public boolean isGui3d() + { + return this.gui3D; + } + + public boolean isBuiltInRenderer() + { + return false; + } + + public TextureAtlasSprite getParticleTexture() + { + return this.particleTexture; + } + + public ItemCameraTransforms getItemCameraTransforms() + { + return this.cameraTransforms; + } + + public ItemOverrideList getOverrides() + { + return this.overrides; + } + + @SideOnly(Side.CLIENT) + public static class Builder + { + private final Map, IBakedModel> builderSelectors = Maps., IBakedModel>newLinkedHashMap(); + + public void putModel(Predicate predicate, IBakedModel model) + { + this.builderSelectors.put(predicate, model); + } + + public IBakedModel makeMultipartModel() + { + return new MultipartBakedModel(this.builderSelectors); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/SimpleBakedModel.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/SimpleBakedModel.java new file mode 100644 index 0000000..9a1b791 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/SimpleBakedModel.java @@ -0,0 +1,165 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SimpleBakedModel implements IBakedModel +{ + protected final List generalQuads; + protected final Map> faceQuads; + protected final boolean ambientOcclusion; + protected final boolean gui3d; + protected final TextureAtlasSprite texture; + protected final ItemCameraTransforms cameraTransforms; + protected final ItemOverrideList itemOverrideList; + + public SimpleBakedModel(List generalQuadsIn, Map> faceQuadsIn, boolean ambientOcclusionIn, boolean gui3dIn, TextureAtlasSprite textureIn, ItemCameraTransforms cameraTransformsIn, ItemOverrideList itemOverrideListIn) + { + this.generalQuads = generalQuadsIn; + this.faceQuads = faceQuadsIn; + this.ambientOcclusion = ambientOcclusionIn; + this.gui3d = gui3dIn; + this.texture = textureIn; + this.cameraTransforms = cameraTransformsIn; + this.itemOverrideList = itemOverrideListIn; + } + + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) + { + return side == null ? this.generalQuads : (List)this.faceQuads.get(side); + } + + public boolean isAmbientOcclusion() + { + return this.ambientOcclusion; + } + + public boolean isGui3d() + { + return this.gui3d; + } + + public boolean isBuiltInRenderer() + { + return false; + } + + public TextureAtlasSprite getParticleTexture() + { + return this.texture; + } + + public ItemCameraTransforms getItemCameraTransforms() + { + return this.cameraTransforms; + } + + public ItemOverrideList getOverrides() + { + return this.itemOverrideList; + } + + @SideOnly(Side.CLIENT) + public static class Builder + { + private final List builderGeneralQuads; + private final Map> builderFaceQuads; + private final ItemOverrideList builderItemOverrideList; + private final boolean builderAmbientOcclusion; + private TextureAtlasSprite builderTexture; + private final boolean builderGui3d; + private final ItemCameraTransforms builderCameraTransforms; + + public Builder(ModelBlock model, ItemOverrideList overrides) + { + this(model.isAmbientOcclusion(), model.isGui3d(), model.getAllTransforms(), overrides); + } + + public Builder(IBlockState state, IBakedModel model, TextureAtlasSprite texture, BlockPos pos) + { + this(model.isAmbientOcclusion(state), model.isGui3d(), model.getItemCameraTransforms(), model.getOverrides()); + this.builderTexture = model.getParticleTexture(); + long i = MathHelper.getPositionRandom(pos); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + this.addFaceQuads(state, model, texture, enumfacing, i); + } + + this.addGeneralQuads(state, model, texture, i); + } + + private Builder(boolean ambientOcclusion, boolean gui3d, ItemCameraTransforms transforms, ItemOverrideList overrides) + { + this.builderGeneralQuads = Lists.newArrayList(); + this.builderFaceQuads = Maps.newEnumMap(EnumFacing.class); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + this.builderFaceQuads.put(enumfacing, Lists.newArrayList()); + } + + this.builderItemOverrideList = overrides; + this.builderAmbientOcclusion = ambientOcclusion; + this.builderGui3d = gui3d; + this.builderCameraTransforms = transforms; + } + + private void addFaceQuads(IBlockState p_188644_1_, IBakedModel p_188644_2_, TextureAtlasSprite p_188644_3_, EnumFacing p_188644_4_, long p_188644_5_) + { + for (BakedQuad bakedquad : p_188644_2_.getQuads(p_188644_1_, p_188644_4_, p_188644_5_)) + { + this.addFaceQuad(p_188644_4_, new BakedQuadRetextured(bakedquad, p_188644_3_)); + } + } + + private void addGeneralQuads(IBlockState p_188645_1_, IBakedModel p_188645_2_, TextureAtlasSprite p_188645_3_, long p_188645_4_) + { + for (BakedQuad bakedquad : p_188645_2_.getQuads(p_188645_1_, (EnumFacing)null, p_188645_4_)) + { + this.addGeneralQuad(new BakedQuadRetextured(bakedquad, p_188645_3_)); + } + } + + public SimpleBakedModel.Builder addFaceQuad(EnumFacing facing, BakedQuad quad) + { + (this.builderFaceQuads.get(facing)).add(quad); + return this; + } + + public SimpleBakedModel.Builder addGeneralQuad(BakedQuad quad) + { + this.builderGeneralQuads.add(quad); + return this; + } + + public SimpleBakedModel.Builder setTexture(TextureAtlasSprite texture) + { + this.builderTexture = texture; + return this; + } + + public IBakedModel makeBakedModel() + { + if (this.builderTexture == null) + { + throw new RuntimeException("Missing particle!"); + } + else + { + return new SimpleBakedModel(this.builderGeneralQuads, this.builderFaceQuads, this.builderAmbientOcclusion, this.builderGui3d, this.builderTexture, this.builderCameraTransforms, this.builderItemOverrideList); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/Variant.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/Variant.java new file mode 100644 index 0000000..d993b2f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/Variant.java @@ -0,0 +1,152 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Variant implements net.minecraftforge.client.model.ISmartVariant +{ + private final ResourceLocation modelLocation; + private final ModelRotation rotation; + private final boolean uvLock; + private final int weight; + + public Variant(ResourceLocation modelLocationIn, ModelRotation rotationIn, boolean uvLockIn, int weightIn) + { + this.modelLocation = modelLocationIn; + this.rotation = rotationIn; + this.uvLock = uvLockIn; + this.weight = weightIn; + } + + public ResourceLocation getModelLocation() + { + return this.modelLocation; + } + + @Deprecated + public ModelRotation getRotation() + { + return this.rotation; + } + + public net.minecraftforge.common.model.IModelState getState() + { + return this.rotation; + } + + public boolean isUvLock() + { + return this.uvLock; + } + + public int getWeight() + { + return this.weight; + } + + public String toString() + { + return "Variant{modelLocation=" + this.modelLocation + ", rotation=" + this.rotation + ", uvLock=" + this.uvLock + ", weight=" + this.weight + '}'; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof Variant)) + { + return false; + } + else + { + Variant variant = (Variant)p_equals_1_; + return this.modelLocation.equals(variant.modelLocation) && this.rotation == variant.rotation && this.uvLock == variant.uvLock && this.weight == variant.weight; + } + } + + public int hashCode() + { + int i = this.modelLocation.hashCode(); + i = 31 * i + this.rotation.hashCode(); + i = 31 * i + Boolean.valueOf(this.uvLock).hashCode(); + i = 31 * i + this.weight; + return i; + } + + @SideOnly(Side.CLIENT) + public static class Deserializer implements JsonDeserializer + { + public Variant deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + String s = this.getStringModel(jsonobject); + ModelRotation modelrotation = this.parseModelRotation(jsonobject); + boolean flag = this.parseUvLock(jsonobject); + int i = this.parseWeight(jsonobject); + return new Variant(this.getResourceLocationBlock(s), modelrotation, flag, i); + } + + private ResourceLocation getResourceLocationBlock(String p_188041_1_) + { + ResourceLocation resourcelocation = new ResourceLocation(p_188041_1_); + resourcelocation = new ResourceLocation(resourcelocation.getResourceDomain(), "block/" + resourcelocation.getResourcePath()); + return resourcelocation; + } + + private boolean parseUvLock(JsonObject json) + { + return JsonUtils.getBoolean(json, "uvlock", false); + } + + protected ModelRotation parseModelRotation(JsonObject json) + { + int i = JsonUtils.getInt(json, "x", 0); + int j = JsonUtils.getInt(json, "y", 0); + ModelRotation modelrotation = ModelRotation.getModelRotation(i, j); + + if (modelrotation == null) + { + throw new JsonParseException("Invalid BlockModelRotation x: " + i + ", y: " + j); + } + else + { + return modelrotation; + } + } + + protected String getStringModel(JsonObject json) + { + return JsonUtils.getString(json, "model"); + } + + protected int parseWeight(JsonObject json) + { + int i = JsonUtils.getInt(json, "weight", 1); + + if (i < 1) + { + throw new JsonParseException("Invalid weight " + i + " found, expected integer >= 1"); + } + else + { + return i; + } + } + } + + public net.minecraftforge.client.model.IModel process(net.minecraftforge.client.model.IModel base) + { + return base.uvlock(isUvLock()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/VariantList.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/VariantList.java new file mode 100644 index 0000000..79d97f6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/VariantList.java @@ -0,0 +1,80 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.List; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class VariantList +{ + private final List variantList; + + public VariantList(List variantListIn) + { + this.variantList = variantListIn; + } + + public List getVariantList() + { + return this.variantList; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ instanceof VariantList) + { + VariantList variantlist = (VariantList)p_equals_1_; + return this.variantList.equals(variantlist.variantList); + } + else + { + return false; + } + } + + public int hashCode() + { + return this.variantList.hashCode(); + } + + @SideOnly(Side.CLIENT) + public static class Deserializer implements JsonDeserializer + { + public VariantList deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + List list = Lists.newArrayList(); + + if (p_deserialize_1_.isJsonArray()) + { + JsonArray jsonarray = p_deserialize_1_.getAsJsonArray(); + + if (jsonarray.size() == 0) + { + throw new JsonParseException("Empty variant array"); + } + + for (JsonElement jsonelement : jsonarray) + { + list.add((Variant)p_deserialize_3_.deserialize(jsonelement, Variant.class)); + } + } + else + { + list.add((Variant)p_deserialize_3_.deserialize(p_deserialize_1_, Variant.class)); + } + + return new VariantList(list); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/WeightedBakedModel.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/WeightedBakedModel.java new file mode 100644 index 0000000..b578ac1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/WeightedBakedModel.java @@ -0,0 +1,115 @@ +package net.minecraft.client.renderer.block.model; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.WeightedRandom; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class WeightedBakedModel implements IBakedModel +{ + private final int totalWeight; + private final List models; + private final IBakedModel baseModel; + + public WeightedBakedModel(List modelsIn) + { + this.models = modelsIn; + this.totalWeight = WeightedRandom.getTotalWeight(modelsIn); + this.baseModel = (modelsIn.get(0)).model; + } + + private IBakedModel getRandomModel(long p_188627_1_) + { + return ((WeightedBakedModel.WeightedModel)WeightedRandom.getRandomItem(this.models, Math.abs((int)p_188627_1_ >> 16) % this.totalWeight)).model; + } + + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) + { + return this.getRandomModel(rand).getQuads(state, side, rand); + } + + public boolean isAmbientOcclusion() + { + return this.baseModel.isAmbientOcclusion(); + } + + public boolean isAmbientOcclusion(IBlockState state) { return this.baseModel.isAmbientOcclusion(state); } + + public boolean isGui3d() + { + return this.baseModel.isGui3d(); + } + + public boolean isBuiltInRenderer() + { + return this.baseModel.isBuiltInRenderer(); + } + + public TextureAtlasSprite getParticleTexture() + { + return this.baseModel.getParticleTexture(); + } + + public ItemCameraTransforms getItemCameraTransforms() + { + return this.baseModel.getItemCameraTransforms(); + } + + public ItemOverrideList getOverrides() + { + return this.baseModel.getOverrides(); + } + + @SideOnly(Side.CLIENT) + public static class Builder + { + private final List listItems = Lists.newArrayList(); + + public WeightedBakedModel.Builder add(IBakedModel model, int weight) + { + this.listItems.add(new WeightedBakedModel.WeightedModel(model, weight)); + return this; + } + + public WeightedBakedModel build() + { + Collections.sort(this.listItems); + return new WeightedBakedModel(this.listItems); + } + + public IBakedModel first() + { + return (this.listItems.get(0)).model; + } + } + + @SideOnly(Side.CLIENT) + static class WeightedModel extends WeightedRandom.Item implements Comparable + { + protected final IBakedModel model; + + public WeightedModel(IBakedModel modelIn, int itemWeightIn) + { + super(itemWeightIn); + this.model = modelIn; + } + + public int compareTo(WeightedBakedModel.WeightedModel p_compareTo_1_) + { + return ComparisonChain.start().compare(p_compareTo_1_.itemWeight, this.itemWeight).result(); + } + + public String toString() + { + return "MyWeighedRandomItem{weight=" + this.itemWeight + ", model=" + this.model + '}'; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionAnd.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionAnd.java new file mode 100644 index 0000000..a9aef26 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionAnd.java @@ -0,0 +1,34 @@ +package net.minecraft.client.renderer.block.model.multipart; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import javax.annotation.Nullable; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ConditionAnd implements ICondition +{ + private final Iterable conditions; + + public ConditionAnd(Iterable conditionsIn) + { + this.conditions = conditionsIn; + } + + public Predicate getPredicate(final BlockStateContainer blockState) + { + return Predicates.and(Iterables.transform(this.conditions, new Function>() + { + @Nullable + public Predicate apply(@Nullable ICondition p_apply_1_) + { + return p_apply_1_ == null ? null : p_apply_1_.getPredicate(blockState); + } + })); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionOr.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionOr.java new file mode 100644 index 0000000..9502dfa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionOr.java @@ -0,0 +1,34 @@ +package net.minecraft.client.renderer.block.model.multipart; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import javax.annotation.Nullable; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ConditionOr implements ICondition +{ + final Iterable conditions; + + public ConditionOr(Iterable conditionsIn) + { + this.conditions = conditionsIn; + } + + public Predicate getPredicate(final BlockStateContainer blockState) + { + return Predicates.or(Iterables.transform(this.conditions, new Function>() + { + @Nullable + public Predicate apply(@Nullable ICondition p_apply_1_) + { + return p_apply_1_ == null ? null : p_apply_1_.getPredicate(blockState); + } + })); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.java new file mode 100644 index 0000000..98720d2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ConditionPropertyValue.java @@ -0,0 +1,104 @@ +package net.minecraft.client.renderer.block.model.multipart; + +import com.google.common.base.Function; +import com.google.common.base.MoreObjects; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ConditionPropertyValue implements ICondition +{ + private static final Splitter SPLITTER = Splitter.on('|').omitEmptyStrings(); + private final String key; + private final String value; + + public ConditionPropertyValue(String keyIn, String valueIn) + { + this.key = keyIn; + this.value = valueIn; + } + + public Predicate getPredicate(BlockStateContainer blockState) + { + final IProperty iproperty = blockState.getProperty(this.key); + + if (iproperty == null) + { + throw new RuntimeException(this.toString() + ": Definition: " + blockState + " has no property: " + this.key); + } + else + { + String s = this.value; + boolean flag = !s.isEmpty() && s.charAt(0) == '!'; + + if (flag) + { + s = s.substring(1); + } + + List list = SPLITTER.splitToList(s); + + if (list.isEmpty()) + { + throw new RuntimeException(this.toString() + ": has an empty value: " + this.value); + } + else + { + Predicate predicate; + + if (list.size() == 1) + { + predicate = this.makePredicate(iproperty, s); + } + else + { + predicate = Predicates.or(Iterables.transform(list, new Function>() + { + @Nullable + public Predicate apply(@Nullable String p_apply_1_) + { + return ConditionPropertyValue.this.makePredicate(iproperty, p_apply_1_); + } + })); + } + + return flag ? Predicates.not(predicate) : predicate; + } + } + } + + private Predicate makePredicate(final IProperty property, String valueIn) + { + final Optional optional = property.parseValue(valueIn); + + if (!optional.isPresent()) + { + throw new RuntimeException(this.toString() + ": has an unknown value: " + this.value); + } + else + { + return new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getValue(property).equals(optional.get()); + } + }; + } + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("key", this.key).add("value", this.value).toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ICondition.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ICondition.java new file mode 100644 index 0000000..cd76911 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/ICondition.java @@ -0,0 +1,41 @@ +package net.minecraft.client.renderer.block.model.multipart; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ICondition +{ + ICondition TRUE = new ICondition() + { + public Predicate getPredicate(BlockStateContainer blockState) + { + return new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return true; + } + }; + } + }; + ICondition FALSE = new ICondition() + { + public Predicate getPredicate(BlockStateContainer blockState) + { + return new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return false; + } + }; + } + }; + + Predicate getPredicate(BlockStateContainer blockState); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/Multipart.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/Multipart.java new file mode 100644 index 0000000..ca788ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/Multipart.java @@ -0,0 +1,108 @@ +package net.minecraft.client.renderer.block.model.multipart; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Set; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.client.renderer.block.model.VariantList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Multipart +{ + private final List selectors; + private BlockStateContainer stateContainer; + + public Multipart(List selectorsIn) + { + this.selectors = selectorsIn; + } + + public List getSelectors() + { + return this.selectors; + } + + public Set getVariants() + { + Set set = Sets.newHashSet(); + + for (Selector selector : this.selectors) + { + set.add(selector.getVariantList()); + } + + return set; + } + + public void setStateContainer(BlockStateContainer stateContainerIn) + { + this.stateContainer = stateContainerIn; + } + + public BlockStateContainer getStateContainer() + { + return this.stateContainer; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else + { + if (p_equals_1_ instanceof Multipart) + { + Multipart multipart = (Multipart)p_equals_1_; + + if (this.selectors.equals(multipart.selectors)) + { + if (this.stateContainer == null) + { + return multipart.stateContainer == null; + } + + return this.stateContainer.equals(multipart.stateContainer); + } + } + + return false; + } + } + + public int hashCode() + { + return 31 * this.selectors.hashCode() + (this.stateContainer == null ? 0 : this.stateContainer.hashCode()); + } + + @SideOnly(Side.CLIENT) + public static class Deserializer implements JsonDeserializer + { + public Multipart deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + return new Multipart(this.getSelectors(p_deserialize_3_, p_deserialize_1_.getAsJsonArray())); + } + + private List getSelectors(JsonDeserializationContext context, JsonArray elements) + { + List list = Lists.newArrayList(); + + for (JsonElement jsonelement : elements) + { + list.add((Selector)context.deserialize(jsonelement, Selector.class)); + } + + return list; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/Selector.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/Selector.java new file mode 100644 index 0000000..dd626e9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/Selector.java @@ -0,0 +1,145 @@ +package net.minecraft.client.renderer.block.model.multipart; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.VariantList; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Selector +{ + private final ICondition condition; + private final VariantList variantList; + + public Selector(ICondition conditionIn, VariantList variantListIn) + { + if (conditionIn == null) + { + throw new IllegalArgumentException("Missing condition for selector"); + } + else if (variantListIn == null) + { + throw new IllegalArgumentException("Missing variant for selector"); + } + else + { + this.condition = conditionIn; + this.variantList = variantListIn; + } + } + + public VariantList getVariantList() + { + return this.variantList; + } + + public Predicate getPredicate(BlockStateContainer state) + { + return this.condition.getPredicate(state); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else + { + if (p_equals_1_ instanceof Selector) + { + Selector selector = (Selector)p_equals_1_; + + if (this.condition.equals(selector.condition)) + { + return this.variantList.equals(selector.variantList); + } + } + + return false; + } + } + + public int hashCode() + { + return 31 * this.condition.hashCode() + this.variantList.hashCode(); + } + + @SideOnly(Side.CLIENT) + public static class Deserializer implements JsonDeserializer + { + private static final Function FUNCTION_OR_AND = new Function() + { + @Nullable + public ICondition apply(@Nullable JsonElement p_apply_1_) + { + return p_apply_1_ == null ? null : Selector.Deserializer.getOrAndCondition(p_apply_1_.getAsJsonObject()); + } + }; + private static final Function, ICondition> FUNCTION_PROPERTY_VALUE = new Function, ICondition>() + { + @Nullable + public ICondition apply(@Nullable Entry p_apply_1_) + { + return p_apply_1_ == null ? null : Selector.Deserializer.makePropertyValue(p_apply_1_); + } + }; + + public Selector deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + return new Selector(this.getWhenCondition(jsonobject), (VariantList)p_deserialize_3_.deserialize(jsonobject.get("apply"), VariantList.class)); + } + + private ICondition getWhenCondition(JsonObject json) + { + return json.has("when") ? getOrAndCondition(JsonUtils.getJsonObject(json, "when")) : ICondition.TRUE; + } + + @VisibleForTesting + static ICondition getOrAndCondition(JsonObject json) + { + Set> set = json.entrySet(); + + if (set.isEmpty()) + { + throw new JsonParseException("No elements found in selector"); + } + else if (set.size() == 1) + { + if (json.has("OR")) + { + return new ConditionOr(Iterables.transform(JsonUtils.getJsonArray(json, "OR"), FUNCTION_OR_AND)); + } + else + { + return (ICondition)(json.has("AND") ? new ConditionAnd(Iterables.transform(JsonUtils.getJsonArray(json, "AND"), FUNCTION_OR_AND)) : makePropertyValue(set.iterator().next())); + } + } + else + { + return new ConditionAnd(Iterables.transform(set, FUNCTION_PROPERTY_VALUE)); + } + } + + private static ConditionPropertyValue makePropertyValue(Entry entry) + { + return new ConditionPropertyValue(entry.getKey(), ((JsonElement)entry.getValue()).getAsString()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/package-info.java new file mode 100644 index 0000000..577e3e5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/multipart/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.block.model.multipart; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/package-info.java new file mode 100644 index 0000000..26ebecc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/model/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.block.model; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java new file mode 100644 index 0000000..fbf1201 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/BlockStateMapper.java @@ -0,0 +1,76 @@ +package net.minecraft.client.renderer.block.statemap; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockStateMapper +{ + private final Map blockStateMap = Maps.newIdentityHashMap(); + private final Set setBuiltInBlocks = Sets.newIdentityHashSet(); + + public void registerBlockStateMapper(Block blockIn, IStateMapper stateMapper) + { + this.blockStateMap.put(blockIn, stateMapper); + } + + public void registerBuiltInBlocks(Block... blockIn) + { + Collections.addAll(this.setBuiltInBlocks, blockIn); + } + + public Map putAllStateModelLocations() + { + Map map = Maps.newIdentityHashMap(); + + for (Block block : Block.REGISTRY) + { + map.putAll(this.getVariants(block)); + } + + return map; + } + + public Set getBlockstateLocations(Block blockIn) + { + if (this.setBuiltInBlocks.contains(blockIn)) + { + return Collections.emptySet(); + } + else + { + IStateMapper istatemapper = this.blockStateMap.get(blockIn); + + if (istatemapper == null) + { + return Collections.singleton(Block.REGISTRY.getNameForObject(blockIn)); + } + else + { + Set set = Sets.newHashSet(); + + for (ModelResourceLocation modelresourcelocation : istatemapper.putStateModelLocations(blockIn).values()) + { + set.add(new ResourceLocation(modelresourcelocation.getResourceDomain(), modelresourcelocation.getResourcePath())); + } + + return set; + } + } + } + + public Map getVariants(Block blockIn) + { + return this.setBuiltInBlocks.contains(blockIn) ? Collections.emptyMap() : ((IStateMapper)MoreObjects.firstNonNull(this.blockStateMap.get(blockIn), new DefaultStateMapper())).putStateModelLocations(blockIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java new file mode 100644 index 0000000..6952f81 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/DefaultStateMapper.java @@ -0,0 +1,16 @@ +package net.minecraft.client.renderer.block.statemap; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DefaultStateMapper extends StateMapperBase +{ + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + return new ModelResourceLocation(Block.REGISTRY.getNameForObject(state.getBlock()), this.getPropertyString(state.getProperties())); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/IStateMapper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/IStateMapper.java new file mode 100644 index 0000000..a6de292 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/IStateMapper.java @@ -0,0 +1,14 @@ +package net.minecraft.client.renderer.block.statemap; + +import java.util.Map; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IStateMapper +{ + Map putStateModelLocations(Block blockIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/StateMap.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/StateMap.java new file mode 100644 index 0000000..9ae4ade --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/StateMap.java @@ -0,0 +1,109 @@ +package net.minecraft.client.renderer.block.statemap; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class StateMap extends StateMapperBase +{ + private final IProperty name; + private final String suffix; + private final List < IProperty> ignored; + + private StateMap(@Nullable IProperty name, @Nullable String suffix, List < IProperty> ignored) + { + this.name = name; + this.suffix = suffix; + this.ignored = ignored; + } + + protected ModelResourceLocation getModelResourceLocation(IBlockState state) + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newLinkedHashMap(state.getProperties()); + String s; + + if (this.name == null) + { + s = ((ResourceLocation)Block.REGISTRY.getNameForObject(state.getBlock())).toString(); + } + else + { + s = String.format("%s:%s", Block.REGISTRY.getNameForObject(state.getBlock()).getResourceDomain(), this.removeName(this.name, map)); + } + + if (this.suffix != null) + { + s = s + this.suffix; + } + + for (IProperty iproperty : this.ignored) + { + map.remove(iproperty); + } + + return new ModelResourceLocation(s, this.getPropertyString(map)); + } + + private > String removeName(IProperty property, Map < IProperty, Comparable> values) + { + return property.getName((T)values.remove(this.name)); + } + + @SideOnly(Side.CLIENT) + public static class Builder + { + private IProperty name; + private String suffix; + private final List < IProperty> ignored = Lists. < IProperty> newArrayList(); + + public StateMap.Builder withName(IProperty builderPropertyIn) + { + this.name = builderPropertyIn; + return this; + } + + public StateMap.Builder withSuffix(String builderSuffixIn) + { + this.suffix = builderSuffixIn; + return this; + } + + /** + * Ignore the listed {@code IProperty}s when building the variant string for the final {@code + * ModelResourceLocation}. It is valid to pass a {@code Block} that does not have one of these {@code + * IProperty}s to the built {@code StateMap}. + * @return {@code this}, for convenience in chaining + * + * @param ignores the {@code IProperty}s to ignore when building a variant string + */ + public StateMap.Builder ignore(IProperty... ignores) + { + Collections.addAll(this.ignored, ignores); + return this; + } + + /** + * Build a new {@code StateMap} with the settings contained in this {@code StateMap.Builder}. The {@code + * StateMap} will work with any {@code Block} that has the required {@code IProperty}s. + * @return a new {@code StateMap} with the settings contained in this {@code StateMap.Builder} + * @see #ignore(IProperty...) + * @see #withName(IProperty) + * @see #withSuffix(String) + */ + public StateMap build() + { + return new StateMap(this.name, this.suffix, this.ignored); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/StateMapperBase.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/StateMapperBase.java new file mode 100644 index 0000000..d66dcf0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/StateMapperBase.java @@ -0,0 +1,63 @@ +package net.minecraft.client.renderer.block.statemap; + +import com.google.common.collect.Maps; +import com.google.common.collect.UnmodifiableIterator; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class StateMapperBase implements IStateMapper +{ + protected Map mapStateModelLocations = Maps.newLinkedHashMap(); + + public String getPropertyString(Map < IProperty, Comparable> values) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (Entry < IProperty, Comparable> entry : values.entrySet()) + { + if (stringbuilder.length() != 0) + { + stringbuilder.append(","); + } + + IProperty iproperty = (IProperty)entry.getKey(); + stringbuilder.append(iproperty.getName()); + stringbuilder.append("="); + stringbuilder.append(this.getPropertyName(iproperty, entry.getValue())); + } + + if (stringbuilder.length() == 0) + { + stringbuilder.append("normal"); + } + + return stringbuilder.toString(); + } + + private > String getPropertyName(IProperty property, Comparable value) + { + return property.getName((T)value); + } + + public Map putStateModelLocations(Block blockIn) + { + UnmodifiableIterator unmodifiableiterator = blockIn.getBlockState().getValidStates().iterator(); + + while (unmodifiableiterator.hasNext()) + { + IBlockState iblockstate = (IBlockState)unmodifiableiterator.next(); + this.mapStateModelLocations.put(iblockstate, this.getModelResourceLocation(iblockstate)); + } + + return this.mapStateModelLocations; + } + + protected abstract ModelResourceLocation getModelResourceLocation(IBlockState state); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/package-info.java new file mode 100644 index 0000000..872bbb4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/block/statemap/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.block.statemap; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java new file mode 100644 index 0000000..d9e25e9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkCompileTaskGenerator.java @@ -0,0 +1,159 @@ +package net.minecraft.client.renderer.chunk; + +import com.google.common.collect.Lists; +import com.google.common.primitives.Doubles; +import java.util.List; +import java.util.concurrent.locks.ReentrantLock; +import net.minecraft.client.renderer.RegionRenderCacheBuilder; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ChunkCompileTaskGenerator implements Comparable +{ + private final RenderChunk renderChunk; + private final ReentrantLock lock = new ReentrantLock(); + private final List listFinishRunnables = Lists.newArrayList(); + private final ChunkCompileTaskGenerator.Type type; + private final double distanceSq; + private RegionRenderCacheBuilder regionRenderCacheBuilder; + private CompiledChunk compiledChunk; + private ChunkCompileTaskGenerator.Status status = ChunkCompileTaskGenerator.Status.PENDING; + private boolean finished; + + public ChunkCompileTaskGenerator(RenderChunk renderChunkIn, ChunkCompileTaskGenerator.Type typeIn, double distanceSqIn) + { + this.renderChunk = renderChunkIn; + this.type = typeIn; + this.distanceSq = distanceSqIn; + } + + public ChunkCompileTaskGenerator.Status getStatus() + { + return this.status; + } + + public RenderChunk getRenderChunk() + { + return this.renderChunk; + } + + public CompiledChunk getCompiledChunk() + { + return this.compiledChunk; + } + + public void setCompiledChunk(CompiledChunk compiledChunkIn) + { + this.compiledChunk = compiledChunkIn; + } + + public RegionRenderCacheBuilder getRegionRenderCacheBuilder() + { + return this.regionRenderCacheBuilder; + } + + public void setRegionRenderCacheBuilder(RegionRenderCacheBuilder regionRenderCacheBuilderIn) + { + this.regionRenderCacheBuilder = regionRenderCacheBuilderIn; + } + + public void setStatus(ChunkCompileTaskGenerator.Status statusIn) + { + this.lock.lock(); + + try + { + this.status = statusIn; + } + finally + { + this.lock.unlock(); + } + } + + public void finish() + { + this.lock.lock(); + + try + { + if (this.type == ChunkCompileTaskGenerator.Type.REBUILD_CHUNK && this.status != ChunkCompileTaskGenerator.Status.DONE) + { + this.renderChunk.setNeedsUpdate(false); + } + + this.finished = true; + this.status = ChunkCompileTaskGenerator.Status.DONE; + + for (Runnable runnable : this.listFinishRunnables) + { + runnable.run(); + } + } + finally + { + this.lock.unlock(); + } + } + + public void addFinishRunnable(Runnable runnable) + { + this.lock.lock(); + + try + { + this.listFinishRunnables.add(runnable); + + if (this.finished) + { + runnable.run(); + } + } + finally + { + this.lock.unlock(); + } + } + + public ReentrantLock getLock() + { + return this.lock; + } + + public ChunkCompileTaskGenerator.Type getType() + { + return this.type; + } + + public boolean isFinished() + { + return this.finished; + } + + public int compareTo(ChunkCompileTaskGenerator p_compareTo_1_) + { + return Doubles.compare(this.distanceSq, p_compareTo_1_.distanceSq); + } + + public double getDistanceSq() + { + return this.distanceSq; + } + + @SideOnly(Side.CLIENT) + public static enum Status + { + PENDING, + COMPILING, + UPLOADING, + DONE; + } + + @SideOnly(Side.CLIENT) + public static enum Type + { + REBUILD_CHUNK, + RESORT_TRANSPARENCY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java new file mode 100644 index 0000000..073d901 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkRenderDispatcher.java @@ -0,0 +1,373 @@ +package net.minecraft.client.renderer.chunk; + +import com.google.common.collect.Lists; +import com.google.common.collect.Queues; +import com.google.common.primitives.Doubles; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.ThreadFactory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RegionRenderCacheBuilder; +import net.minecraft.client.renderer.VertexBufferUploader; +import net.minecraft.client.renderer.WorldVertexBufferUploader; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ChunkRenderDispatcher +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ThreadFactory THREAD_FACTORY = (new ThreadFactoryBuilder()).setNameFormat("Chunk Batcher %d").setDaemon(true).build(); + private final int countRenderBuilders; + private final List listWorkerThreads = Lists.newArrayList(); + private final List listThreadedWorkers = Lists.newArrayList(); + private final PriorityBlockingQueue queueChunkUpdates = Queues.newPriorityBlockingQueue(); + private final BlockingQueue queueFreeRenderBuilders; + private final WorldVertexBufferUploader worldVertexUploader = new WorldVertexBufferUploader(); + private final VertexBufferUploader vertexUploader = new VertexBufferUploader(); + private final Queue queueChunkUploads = Queues.newPriorityQueue(); + private final ChunkRenderWorker renderWorker; + + public ChunkRenderDispatcher() + { + this(-1); + } + + public ChunkRenderDispatcher(int countRenderBuilders) + { + int i = Math.max(1, (int)((double)Runtime.getRuntime().maxMemory() * 0.3D) / 10485760); + int j = Math.max(1, MathHelper.clamp(Runtime.getRuntime().availableProcessors(), 1, i / 5)); + if(countRenderBuilders < 0) countRenderBuilders = MathHelper.clamp(j * 10, 1, i); + this.countRenderBuilders = countRenderBuilders; + + if (j > 1) + { + for (int k = 0; k < j; ++k) + { + ChunkRenderWorker chunkrenderworker = new ChunkRenderWorker(this); + Thread thread = THREAD_FACTORY.newThread(chunkrenderworker); + thread.start(); + this.listThreadedWorkers.add(chunkrenderworker); + this.listWorkerThreads.add(thread); + } + } + + this.queueFreeRenderBuilders = Queues.newArrayBlockingQueue(this.countRenderBuilders); + + for (int l = 0; l < this.countRenderBuilders; ++l) + { + this.queueFreeRenderBuilders.add(new RegionRenderCacheBuilder()); + } + + this.renderWorker = new ChunkRenderWorker(this, new RegionRenderCacheBuilder()); + } + + public String getDebugInfo() + { + return this.listWorkerThreads.isEmpty() ? String.format("pC: %03d, single-threaded", this.queueChunkUpdates.size()) : String.format("pC: %03d, pU: %1d, aB: %1d", this.queueChunkUpdates.size(), this.queueChunkUploads.size(), this.queueFreeRenderBuilders.size()); + } + + public boolean runChunkUploads(long finishTimeNano) + { + boolean flag = false; + + while (true) + { + boolean flag1 = false; + + if (this.listWorkerThreads.isEmpty()) + { + ChunkCompileTaskGenerator chunkcompiletaskgenerator = this.queueChunkUpdates.poll(); + + if (chunkcompiletaskgenerator != null) + { + try + { + this.renderWorker.processTask(chunkcompiletaskgenerator); + flag1 = true; + } + catch (InterruptedException var8) + { + LOGGER.warn("Skipped task due to interrupt"); + } + } + } + + synchronized (this.queueChunkUploads) + { + if (!this.queueChunkUploads.isEmpty()) + { + (this.queueChunkUploads.poll()).uploadTask.run(); + flag1 = true; + flag = true; + } + } + + if (finishTimeNano == 0L || !flag1 || finishTimeNano < System.nanoTime()) + { + break; + } + } + + return flag; + } + + public boolean updateChunkLater(RenderChunk chunkRenderer) + { + chunkRenderer.getLockCompileTask().lock(); + boolean flag1; + + try + { + final ChunkCompileTaskGenerator chunkcompiletaskgenerator = chunkRenderer.makeCompileTaskChunk(); + chunkcompiletaskgenerator.addFinishRunnable(new Runnable() + { + public void run() + { + ChunkRenderDispatcher.this.queueChunkUpdates.remove(chunkcompiletaskgenerator); + } + }); + boolean flag = this.queueChunkUpdates.offer(chunkcompiletaskgenerator); + + if (!flag) + { + chunkcompiletaskgenerator.finish(); + } + + flag1 = flag; + } + finally + { + chunkRenderer.getLockCompileTask().unlock(); + } + + return flag1; + } + + public boolean updateChunkNow(RenderChunk chunkRenderer) + { + chunkRenderer.getLockCompileTask().lock(); + boolean flag; + + try + { + ChunkCompileTaskGenerator chunkcompiletaskgenerator = chunkRenderer.makeCompileTaskChunk(); + + try + { + this.renderWorker.processTask(chunkcompiletaskgenerator); + } + catch (InterruptedException var7) + { + ; + } + + flag = true; + } + finally + { + chunkRenderer.getLockCompileTask().unlock(); + } + + return flag; + } + + public void stopChunkUpdates() + { + this.clearChunkUpdates(); + List list = Lists.newArrayList(); + + while (list.size() != this.countRenderBuilders) + { + this.runChunkUploads(Long.MAX_VALUE); + + try + { + list.add(this.allocateRenderBuilder()); + } + catch (InterruptedException var3) + { + ; + } + } + + this.queueFreeRenderBuilders.addAll(list); + } + + public void freeRenderBuilder(RegionRenderCacheBuilder p_178512_1_) + { + this.queueFreeRenderBuilders.add(p_178512_1_); + } + + public RegionRenderCacheBuilder allocateRenderBuilder() throws InterruptedException + { + return this.queueFreeRenderBuilders.take(); + } + + public ChunkCompileTaskGenerator getNextChunkUpdate() throws InterruptedException + { + return this.queueChunkUpdates.take(); + } + + public boolean updateTransparencyLater(RenderChunk chunkRenderer) + { + chunkRenderer.getLockCompileTask().lock(); + boolean flag; + + try + { + final ChunkCompileTaskGenerator chunkcompiletaskgenerator = chunkRenderer.makeCompileTaskTransparency(); + + if (chunkcompiletaskgenerator == null) + { + flag = true; + return flag; + } + + chunkcompiletaskgenerator.addFinishRunnable(new Runnable() + { + public void run() + { + ChunkRenderDispatcher.this.queueChunkUpdates.remove(chunkcompiletaskgenerator); + } + }); + flag = this.queueChunkUpdates.offer(chunkcompiletaskgenerator); + } + finally + { + chunkRenderer.getLockCompileTask().unlock(); + } + + return flag; + } + + public ListenableFuture uploadChunk(final BlockRenderLayer p_188245_1_, final BufferBuilder p_188245_2_, final RenderChunk p_188245_3_, final CompiledChunk p_188245_4_, final double p_188245_5_) + { + if (Minecraft.getMinecraft().isCallingFromMinecraftThread()) + { + if (OpenGlHelper.useVbo()) + { + this.uploadVertexBuffer(p_188245_2_, p_188245_3_.getVertexBufferByLayer(p_188245_1_.ordinal())); + } + else + { + this.uploadDisplayList(p_188245_2_, ((ListedRenderChunk)p_188245_3_).getDisplayList(p_188245_1_, p_188245_4_), p_188245_3_); + } + + p_188245_2_.setTranslation(0.0D, 0.0D, 0.0D); + return Futures.immediateFuture((Object)null); + } + else + { + ListenableFutureTask listenablefuturetask = ListenableFutureTask.create(new Runnable() + { + public void run() + { + ChunkRenderDispatcher.this.uploadChunk(p_188245_1_, p_188245_2_, p_188245_3_, p_188245_4_, p_188245_5_); + } + }, (Object)null); + + synchronized (this.queueChunkUploads) + { + this.queueChunkUploads.add(new ChunkRenderDispatcher.PendingUpload(listenablefuturetask, p_188245_5_)); + return listenablefuturetask; + } + } + } + + private void uploadDisplayList(BufferBuilder bufferBuilderIn, int list, RenderChunk chunkRenderer) + { + GlStateManager.glNewList(list, 4864); + GlStateManager.pushMatrix(); + chunkRenderer.multModelviewMatrix(); + this.worldVertexUploader.draw(bufferBuilderIn); + GlStateManager.popMatrix(); + GlStateManager.glEndList(); + } + + private void uploadVertexBuffer(BufferBuilder p_178506_1_, VertexBuffer vertexBufferIn) + { + this.vertexUploader.setVertexBuffer(vertexBufferIn); + this.vertexUploader.draw(p_178506_1_); + } + + public void clearChunkUpdates() + { + while (!this.queueChunkUpdates.isEmpty()) + { + ChunkCompileTaskGenerator chunkcompiletaskgenerator = this.queueChunkUpdates.poll(); + + if (chunkcompiletaskgenerator != null) + { + chunkcompiletaskgenerator.finish(); + } + } + } + + public boolean hasChunkUpdates() + { + return this.queueChunkUpdates.isEmpty() && this.queueChunkUploads.isEmpty(); + } + + public void stopWorkerThreads() + { + this.clearChunkUpdates(); + + for (ChunkRenderWorker chunkrenderworker : this.listThreadedWorkers) + { + chunkrenderworker.notifyToStop(); + } + + for (Thread thread : this.listWorkerThreads) + { + try + { + thread.interrupt(); + thread.join(); + } + catch (InterruptedException interruptedexception) + { + LOGGER.warn("Interrupted whilst waiting for worker to die", (Throwable)interruptedexception); + } + } + + this.queueFreeRenderBuilders.clear(); + } + + public boolean hasNoFreeRenderBuilders() + { + return this.queueFreeRenderBuilders.isEmpty(); + } + + @SideOnly(Side.CLIENT) + class PendingUpload implements Comparable + { + private final ListenableFutureTask uploadTask; + private final double distanceSq; + + public PendingUpload(ListenableFutureTask uploadTaskIn, double distanceSqIn) + { + this.uploadTask = uploadTaskIn; + this.distanceSq = distanceSqIn; + } + + public int compareTo(ChunkRenderDispatcher.PendingUpload p_compareTo_1_) + { + return Doubles.compare(this.distanceSq, p_compareTo_1_.distanceSq); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java new file mode 100644 index 0000000..78e93ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ChunkRenderWorker.java @@ -0,0 +1,242 @@ +package net.minecraft.client.renderer.chunk; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CancellationException; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RegionRenderCacheBuilder; +import net.minecraft.crash.CrashReport; +import net.minecraft.entity.Entity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ChunkRenderWorker implements Runnable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final ChunkRenderDispatcher chunkRenderDispatcher; + private final RegionRenderCacheBuilder regionRenderCacheBuilder; + private boolean shouldRun; + + public ChunkRenderWorker(ChunkRenderDispatcher chunkRenderDispatcherIn) + { + this(chunkRenderDispatcherIn, (RegionRenderCacheBuilder)null); + } + + public ChunkRenderWorker(ChunkRenderDispatcher chunkRenderDispatcherIn, @Nullable RegionRenderCacheBuilder regionRenderCacheBuilderIn) + { + this.shouldRun = true; + this.chunkRenderDispatcher = chunkRenderDispatcherIn; + this.regionRenderCacheBuilder = regionRenderCacheBuilderIn; + } + + public void run() + { + while (this.shouldRun) + { + try + { + this.processTask(this.chunkRenderDispatcher.getNextChunkUpdate()); + } + catch (InterruptedException var3) + { + LOGGER.debug("Stopping chunk worker due to interrupt"); + return; + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Batching chunks"); + Minecraft.getMinecraft().crashed(Minecraft.getMinecraft().addGraphicsAndWorldToCrashReport(crashreport)); + return; + } + } + } + + protected void processTask(final ChunkCompileTaskGenerator generator) throws InterruptedException + { + generator.getLock().lock(); + + try + { + if (generator.getStatus() != ChunkCompileTaskGenerator.Status.PENDING) + { + if (!generator.isFinished()) + { + LOGGER.warn("Chunk render task was {} when I expected it to be pending; ignoring task", (Object)generator.getStatus()); + } + + return; + } + + BlockPos blockpos = new BlockPos(Minecraft.getMinecraft().player); + BlockPos blockpos1 = generator.getRenderChunk().getPosition(); + int i = 16; + int j = 8; + int k = 24; + + if (blockpos1.add(8, 8, 8).distanceSq(blockpos) > 576.0D) + { + World world = generator.getRenderChunk().getWorld(); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(blockpos1); + + if (!this.isChunkExisting(blockpos$mutableblockpos.setPos(blockpos1).move(EnumFacing.WEST, 16), world) || !this.isChunkExisting(blockpos$mutableblockpos.setPos(blockpos1).move(EnumFacing.NORTH, 16), world) || !this.isChunkExisting(blockpos$mutableblockpos.setPos(blockpos1).move(EnumFacing.EAST, 16), world) || !this.isChunkExisting(blockpos$mutableblockpos.setPos(blockpos1).move(EnumFacing.SOUTH, 16), world)) + { + return; + } + } + + generator.setStatus(ChunkCompileTaskGenerator.Status.COMPILING); + } + finally + { + generator.getLock().unlock(); + } + + Entity entity = Minecraft.getMinecraft().getRenderViewEntity(); + + if (entity == null) + { + generator.finish(); + } + else + { + generator.setRegionRenderCacheBuilder(this.getRegionRenderCacheBuilder()); + float f = (float)entity.posX; + float f1 = (float)entity.posY + entity.getEyeHeight(); + float f2 = (float)entity.posZ; + ChunkCompileTaskGenerator.Type chunkcompiletaskgenerator$type = generator.getType(); + + if (chunkcompiletaskgenerator$type == ChunkCompileTaskGenerator.Type.REBUILD_CHUNK) + { + generator.getRenderChunk().rebuildChunk(f, f1, f2, generator); + } + else if (chunkcompiletaskgenerator$type == ChunkCompileTaskGenerator.Type.RESORT_TRANSPARENCY) + { + generator.getRenderChunk().resortTransparency(f, f1, f2, generator); + } + + generator.getLock().lock(); + + try + { + if (generator.getStatus() != ChunkCompileTaskGenerator.Status.COMPILING) + { + if (!generator.isFinished()) + { + LOGGER.warn("Chunk render task was {} when I expected it to be compiling; aborting task", (Object)generator.getStatus()); + } + + this.freeRenderBuilder(generator); + return; + } + + generator.setStatus(ChunkCompileTaskGenerator.Status.UPLOADING); + } + finally + { + generator.getLock().unlock(); + } + + final CompiledChunk compiledchunk = generator.getCompiledChunk(); + ArrayList arraylist = Lists.newArrayList(); + + if (chunkcompiletaskgenerator$type == ChunkCompileTaskGenerator.Type.REBUILD_CHUNK) + { + for (BlockRenderLayer blockrenderlayer : BlockRenderLayer.values()) + { + if (compiledchunk.isLayerStarted(blockrenderlayer)) + { + arraylist.add(this.chunkRenderDispatcher.uploadChunk(blockrenderlayer, generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(blockrenderlayer), generator.getRenderChunk(), compiledchunk, generator.getDistanceSq())); + } + } + } + else if (chunkcompiletaskgenerator$type == ChunkCompileTaskGenerator.Type.RESORT_TRANSPARENCY) + { + arraylist.add(this.chunkRenderDispatcher.uploadChunk(BlockRenderLayer.TRANSLUCENT, generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(BlockRenderLayer.TRANSLUCENT), generator.getRenderChunk(), compiledchunk, generator.getDistanceSq())); + } + + final ListenableFuture> listenablefuture = Futures.allAsList(arraylist); + generator.addFinishRunnable(new Runnable() + { + public void run() + { + listenablefuture.cancel(false); + } + }); + Futures.addCallback(listenablefuture, new FutureCallback>() + { + public void onSuccess(@Nullable List p_onSuccess_1_) + { + ChunkRenderWorker.this.freeRenderBuilder(generator); + generator.getLock().lock(); + label49: + { + try + { + if (generator.getStatus() == ChunkCompileTaskGenerator.Status.UPLOADING) + { + generator.setStatus(ChunkCompileTaskGenerator.Status.DONE); + break label49; + } + + if (!generator.isFinished()) + { + ChunkRenderWorker.LOGGER.warn("Chunk render task was {} when I expected it to be uploading; aborting task", (Object)generator.getStatus()); + } + } + finally + { + generator.getLock().unlock(); + } + + return; + } + generator.getRenderChunk().setCompiledChunk(compiledchunk); + } + public void onFailure(Throwable p_onFailure_1_) + { + ChunkRenderWorker.this.freeRenderBuilder(generator); + + if (!(p_onFailure_1_ instanceof CancellationException) && !(p_onFailure_1_ instanceof InterruptedException)) + { + Minecraft.getMinecraft().crashed(CrashReport.makeCrashReport(p_onFailure_1_, "Rendering chunk")); + } + } + }); + } + } + + private boolean isChunkExisting(BlockPos pos, World worldIn) + { + return !worldIn.getChunkFromChunkCoords(pos.getX() >> 4, pos.getZ() >> 4).isEmpty(); + } + + private RegionRenderCacheBuilder getRegionRenderCacheBuilder() throws InterruptedException + { + return this.regionRenderCacheBuilder != null ? this.regionRenderCacheBuilder : this.chunkRenderDispatcher.allocateRenderBuilder(); + } + + private void freeRenderBuilder(ChunkCompileTaskGenerator taskGenerator) + { + if (this.regionRenderCacheBuilder == null) + { + this.chunkRenderDispatcher.freeRenderBuilder(taskGenerator.getRegionRenderCacheBuilder()); + } + } + + public void notifyToStop() + { + this.shouldRun = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/CompiledChunk.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/CompiledChunk.java new file mode 100644 index 0000000..dfd624a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/CompiledChunk.java @@ -0,0 +1,92 @@ +package net.minecraft.client.renderer.chunk; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class CompiledChunk +{ + public static final CompiledChunk DUMMY = new CompiledChunk() + { + protected void setLayerUsed(BlockRenderLayer layer) + { + throw new UnsupportedOperationException(); + } + public void setLayerStarted(BlockRenderLayer layer) + { + throw new UnsupportedOperationException(); + } + public boolean isVisible(EnumFacing facing, EnumFacing facing2) + { + return false; + } + }; + private final boolean[] layersUsed = new boolean[BlockRenderLayer.values().length]; + private final boolean[] layersStarted = new boolean[BlockRenderLayer.values().length]; + private boolean empty = true; + private final List tileEntities = Lists.newArrayList(); + private SetVisibility setVisibility = new SetVisibility(); + private BufferBuilder.State state; + + public boolean isEmpty() + { + return this.empty; + } + + protected void setLayerUsed(BlockRenderLayer layer) + { + this.empty = false; + this.layersUsed[layer.ordinal()] = true; + } + + public boolean isLayerEmpty(BlockRenderLayer layer) + { + return !this.layersUsed[layer.ordinal()]; + } + + public void setLayerStarted(BlockRenderLayer layer) + { + this.layersStarted[layer.ordinal()] = true; + } + + public boolean isLayerStarted(BlockRenderLayer layer) + { + return this.layersStarted[layer.ordinal()]; + } + + public List getTileEntities() + { + return this.tileEntities; + } + + public void addTileEntity(TileEntity tileEntityIn) + { + this.tileEntities.add(tileEntityIn); + } + + public boolean isVisible(EnumFacing facing, EnumFacing facing2) + { + return this.setVisibility.isVisible(facing, facing2); + } + + public void setVisibility(SetVisibility visibility) + { + this.setVisibility = visibility; + } + + public BufferBuilder.State getState() + { + return this.state; + } + + public void setState(BufferBuilder.State stateIn) + { + this.state = stateIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java new file mode 100644 index 0000000..3571f99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/IRenderChunkFactory.java @@ -0,0 +1,12 @@ +package net.minecraft.client.renderer.chunk; + +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IRenderChunkFactory +{ + RenderChunk create(World worldIn, RenderGlobal renderGlobalIn, int index); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ListChunkFactory.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ListChunkFactory.java new file mode 100644 index 0000000..8d08bca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ListChunkFactory.java @@ -0,0 +1,15 @@ +package net.minecraft.client.renderer.chunk; + +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ListChunkFactory implements IRenderChunkFactory +{ + public RenderChunk create(World worldIn, RenderGlobal renderGlobalIn, int index) + { + return new ListedRenderChunk(worldIn, renderGlobalIn, index); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ListedRenderChunk.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ListedRenderChunk.java new file mode 100644 index 0000000..f8f9371 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/ListedRenderChunk.java @@ -0,0 +1,30 @@ +package net.minecraft.client.renderer.chunk; + +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ListedRenderChunk extends RenderChunk +{ + private final int baseDisplayList = GLAllocation.generateDisplayLists(BlockRenderLayer.values().length); + + public ListedRenderChunk(World worldIn, RenderGlobal renderGlobalIn, int index) + { + super(worldIn, renderGlobalIn, index); + } + + public int getDisplayList(BlockRenderLayer layer, CompiledChunk p_178600_2_) + { + return !p_178600_2_.isLayerEmpty(layer) ? this.baseDisplayList + layer.ordinal() : -1; + } + + public void deleteGlResources() + { + super.deleteGlResources(); + GLAllocation.deleteDisplayLists(this.baseDisplayList, BlockRenderLayer.values().length); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/RenderChunk.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/RenderChunk.java new file mode 100644 index 0000000..74e7779 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/RenderChunk.java @@ -0,0 +1,468 @@ +package net.minecraft.client.renderer.chunk; + +import com.google.common.collect.Sets; +import java.nio.FloatBuffer; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.locks.ReentrantLock; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.renderer.vertex.VertexBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ChunkCache; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderChunk +{ + private World world; + private final RenderGlobal renderGlobal; + public static int renderChunksUpdated; + public CompiledChunk compiledChunk = CompiledChunk.DUMMY; + private final ReentrantLock lockCompileTask = new ReentrantLock(); + private final ReentrantLock lockCompiledChunk = new ReentrantLock(); + private ChunkCompileTaskGenerator compileTask; + private final Set setTileEntities = Sets.newHashSet(); + private final int index; + private final FloatBuffer modelviewMatrix = GLAllocation.createDirectFloatBuffer(16); + private final VertexBuffer[] vertexBuffers = new VertexBuffer[BlockRenderLayer.values().length]; + public AxisAlignedBB boundingBox; + private int frameIndex = -1; + private boolean needsUpdate = true; + private final BlockPos.MutableBlockPos position = new BlockPos.MutableBlockPos(-1, -1, -1); + private final BlockPos.MutableBlockPos[] mapEnumFacing = new BlockPos.MutableBlockPos[6]; + private boolean needsImmediateUpdate; + private ChunkCache worldView; + + public RenderChunk(World worldIn, RenderGlobal renderGlobalIn, int indexIn) + { + for (int i = 0; i < this.mapEnumFacing.length; ++i) + { + this.mapEnumFacing[i] = new BlockPos.MutableBlockPos(); + } + + this.world = worldIn; + this.renderGlobal = renderGlobalIn; + this.index = indexIn; + + if (OpenGlHelper.useVbo()) + { + for (int j = 0; j < BlockRenderLayer.values().length; ++j) + { + this.vertexBuffers[j] = new VertexBuffer(DefaultVertexFormats.BLOCK); + } + } + } + + public boolean setFrameIndex(int frameIndexIn) + { + if (this.frameIndex == frameIndexIn) + { + return false; + } + else + { + this.frameIndex = frameIndexIn; + return true; + } + } + + public VertexBuffer getVertexBufferByLayer(int layer) + { + return this.vertexBuffers[layer]; + } + + /** + * Sets the RenderChunk base position + */ + public void setPosition(int x, int y, int z) + { + if (x != this.position.getX() || y != this.position.getY() || z != this.position.getZ()) + { + this.stopCompileTask(); + this.position.setPos(x, y, z); + this.boundingBox = new AxisAlignedBB((double)x, (double)y, (double)z, (double)(x + 16), (double)(y + 16), (double)(z + 16)); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + this.mapEnumFacing[enumfacing.ordinal()].setPos(this.position).move(enumfacing, 16); + } + + this.initModelviewMatrix(); + } + } + + public void resortTransparency(float x, float y, float z, ChunkCompileTaskGenerator generator) + { + CompiledChunk compiledchunk = generator.getCompiledChunk(); + + if (compiledchunk.getState() != null && !compiledchunk.isLayerEmpty(BlockRenderLayer.TRANSLUCENT)) + { + this.preRenderBlocks(generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(BlockRenderLayer.TRANSLUCENT), this.position); + generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(BlockRenderLayer.TRANSLUCENT).setVertexState(compiledchunk.getState()); + this.postRenderBlocks(BlockRenderLayer.TRANSLUCENT, x, y, z, generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(BlockRenderLayer.TRANSLUCENT), compiledchunk); + } + } + + public void rebuildChunk(float x, float y, float z, ChunkCompileTaskGenerator generator) + { + CompiledChunk compiledchunk = new CompiledChunk(); + int i = 1; + BlockPos blockpos = this.position; + BlockPos blockpos1 = blockpos.add(15, 15, 15); + generator.getLock().lock(); + + try + { + if (generator.getStatus() != ChunkCompileTaskGenerator.Status.COMPILING) + { + return; + } + + generator.setCompiledChunk(compiledchunk); + } + finally + { + generator.getLock().unlock(); + } + + VisGraph lvt_9_1_ = new VisGraph(); + HashSet lvt_10_1_ = Sets.newHashSet(); + + if (!this.worldView.isEmpty()) + { + ++renderChunksUpdated; + boolean[] aboolean = new boolean[BlockRenderLayer.values().length]; + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + + for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(blockpos, blockpos1)) + { + IBlockState iblockstate = this.worldView.getBlockState(blockpos$mutableblockpos); + Block block = iblockstate.getBlock(); + + if (iblockstate.isOpaqueCube()) + { + lvt_9_1_.setOpaqueCube(blockpos$mutableblockpos); + } + + if (block.hasTileEntity(iblockstate)) + { + TileEntity tileentity = this.worldView.getTileEntity(blockpos$mutableblockpos, Chunk.EnumCreateEntityType.CHECK); + + if (tileentity != null) + { + TileEntitySpecialRenderer tileentityspecialrenderer = TileEntityRendererDispatcher.instance.getRenderer(tileentity); + + if (tileentityspecialrenderer != null) + { + + if (tileentityspecialrenderer.isGlobalRenderer(tileentity)) + { + lvt_10_1_.add(tileentity); + } + else compiledchunk.addTileEntity(tileentity); // FORGE: Fix MC-112730 + } + } + } + + for(BlockRenderLayer blockrenderlayer1 : BlockRenderLayer.values()) { + if(!block.canRenderInLayer(iblockstate, blockrenderlayer1)) continue; + net.minecraftforge.client.ForgeHooksClient.setRenderLayer(blockrenderlayer1); + int j = blockrenderlayer1.ordinal(); + + if (block.getDefaultState().getRenderType() != EnumBlockRenderType.INVISIBLE) + { + BufferBuilder bufferbuilder = generator.getRegionRenderCacheBuilder().getWorldRendererByLayerId(j); + + if (!compiledchunk.isLayerStarted(blockrenderlayer1)) + { + compiledchunk.setLayerStarted(blockrenderlayer1); + this.preRenderBlocks(bufferbuilder, blockpos); + } + + aboolean[j] |= blockrendererdispatcher.renderBlock(iblockstate, blockpos$mutableblockpos, this.worldView, bufferbuilder); + } + } + net.minecraftforge.client.ForgeHooksClient.setRenderLayer(null); + } + + for (BlockRenderLayer blockrenderlayer : BlockRenderLayer.values()) + { + if (aboolean[blockrenderlayer.ordinal()]) + { + compiledchunk.setLayerUsed(blockrenderlayer); + } + + if (compiledchunk.isLayerStarted(blockrenderlayer)) + { + this.postRenderBlocks(blockrenderlayer, x, y, z, generator.getRegionRenderCacheBuilder().getWorldRendererByLayer(blockrenderlayer), compiledchunk); + } + } + } + + compiledchunk.setVisibility(lvt_9_1_.computeVisibility()); + this.lockCompileTask.lock(); + + try + { + Set set = Sets.newHashSet(lvt_10_1_); + Set set1 = Sets.newHashSet(this.setTileEntities); + set.removeAll(this.setTileEntities); + set1.removeAll(lvt_10_1_); + this.setTileEntities.clear(); + this.setTileEntities.addAll(lvt_10_1_); + this.renderGlobal.updateTileEntities(set1, set); + } + finally + { + this.lockCompileTask.unlock(); + } + } + + protected void finishCompileTask() + { + this.lockCompileTask.lock(); + + try + { + if (this.compileTask != null && this.compileTask.getStatus() != ChunkCompileTaskGenerator.Status.DONE) + { + this.compileTask.finish(); + this.compileTask = null; + } + } + finally + { + this.lockCompileTask.unlock(); + } + } + + public ReentrantLock getLockCompileTask() + { + return this.lockCompileTask; + } + + public ChunkCompileTaskGenerator makeCompileTaskChunk() + { + this.lockCompileTask.lock(); + ChunkCompileTaskGenerator chunkcompiletaskgenerator; + + try + { + this.finishCompileTask(); + this.compileTask = new ChunkCompileTaskGenerator(this, ChunkCompileTaskGenerator.Type.REBUILD_CHUNK, this.getDistanceSq()); + this.rebuildWorldView(); + chunkcompiletaskgenerator = this.compileTask; + } + finally + { + this.lockCompileTask.unlock(); + } + + return chunkcompiletaskgenerator; + } + + private void rebuildWorldView() + { + int i = 1; + ChunkCache cache = createRegionRenderCache(this.world, this.position.add(-1, -1, -1), this.position.add(16, 16, 16), 1); + net.minecraftforge.client.MinecraftForgeClient.onRebuildChunk(this.world, this.position, cache); + this.worldView = cache; + } + + @Nullable + public ChunkCompileTaskGenerator makeCompileTaskTransparency() + { + this.lockCompileTask.lock(); + ChunkCompileTaskGenerator chunkcompiletaskgenerator; + + try + { + if (this.compileTask == null || this.compileTask.getStatus() != ChunkCompileTaskGenerator.Status.PENDING) + { + if (this.compileTask != null && this.compileTask.getStatus() != ChunkCompileTaskGenerator.Status.DONE) + { + this.compileTask.finish(); + this.compileTask = null; + } + + this.compileTask = new ChunkCompileTaskGenerator(this, ChunkCompileTaskGenerator.Type.RESORT_TRANSPARENCY, this.getDistanceSq()); + this.compileTask.setCompiledChunk(this.compiledChunk); + chunkcompiletaskgenerator = this.compileTask; + return chunkcompiletaskgenerator; + } + + chunkcompiletaskgenerator = null; + } + finally + { + this.lockCompileTask.unlock(); + } + + return chunkcompiletaskgenerator; + } + + protected double getDistanceSq() + { + EntityPlayerSP entityplayersp = Minecraft.getMinecraft().player; + double d0 = this.boundingBox.minX + 8.0D - entityplayersp.posX; + double d1 = this.boundingBox.minY + 8.0D - entityplayersp.posY; + double d2 = this.boundingBox.minZ + 8.0D - entityplayersp.posZ; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + private void preRenderBlocks(BufferBuilder bufferBuilderIn, BlockPos pos) + { + bufferBuilderIn.begin(7, DefaultVertexFormats.BLOCK); + bufferBuilderIn.setTranslation((double)(-pos.getX()), (double)(-pos.getY()), (double)(-pos.getZ())); + } + + private void postRenderBlocks(BlockRenderLayer layer, float x, float y, float z, BufferBuilder bufferBuilderIn, CompiledChunk compiledChunkIn) + { + if (layer == BlockRenderLayer.TRANSLUCENT && !compiledChunkIn.isLayerEmpty(layer)) + { + bufferBuilderIn.sortVertexData(x, y, z); + compiledChunkIn.setState(bufferBuilderIn.getVertexState()); + } + + bufferBuilderIn.finishDrawing(); + } + + private void initModelviewMatrix() + { + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + float f = 1.000001F; + GlStateManager.translate(-8.0F, -8.0F, -8.0F); + GlStateManager.scale(1.000001F, 1.000001F, 1.000001F); + GlStateManager.translate(8.0F, 8.0F, 8.0F); + GlStateManager.getFloat(2982, this.modelviewMatrix); + GlStateManager.popMatrix(); + } + + public void multModelviewMatrix() + { + GlStateManager.multMatrix(this.modelviewMatrix); + } + + public CompiledChunk getCompiledChunk() + { + return this.compiledChunk; + } + + public void setCompiledChunk(CompiledChunk compiledChunkIn) + { + this.lockCompiledChunk.lock(); + + try + { + this.compiledChunk = compiledChunkIn; + } + finally + { + this.lockCompiledChunk.unlock(); + } + } + + public void stopCompileTask() + { + this.finishCompileTask(); + this.compiledChunk = CompiledChunk.DUMMY; + } + + public void deleteGlResources() + { + this.stopCompileTask(); + this.world = null; + + for (int i = 0; i < BlockRenderLayer.values().length; ++i) + { + if (this.vertexBuffers[i] != null) + { + this.vertexBuffers[i].deleteGlBuffers(); + } + } + } + + public BlockPos getPosition() + { + return this.position; + } + + public void setNeedsUpdate(boolean immediate) + { + if (this.needsUpdate) + { + immediate |= this.needsImmediateUpdate; + } + + this.needsUpdate = true; + this.needsImmediateUpdate = immediate; + } + + public void clearNeedsUpdate() + { + this.needsUpdate = false; + this.needsImmediateUpdate = false; + } + + public boolean needsUpdate() + { + return this.needsUpdate; + } + + public boolean needsImmediateUpdate() + { + return this.needsUpdate && this.needsImmediateUpdate; + } + + /* ======================================== FORGE START =====================================*/ + /** + * Creates a new RegionRenderCache instance.
+ * Extending classes can change the behavior of the cache, allowing to visually change + * blocks (schematics etc). + * + * @see RegionRenderCache + * @param world The world to cache. + * @param from The starting position of the chunk minus one on each axis. + * @param to The ending position of the chunk plus one on each axis. + * @param subtract Padding used internally by the RegionRenderCache constructor to make + * the cache a 20x20x20 cube, for a total of 8000 states in the cache. + * @return new RegionRenderCache instance + */ + protected ChunkCache createRegionRenderCache(World world, BlockPos from, BlockPos to, int subtract) + { + return new ChunkCache(world, from, to, subtract); + } + /* ========================================= FORGE END ======================================*/ + + public BlockPos getBlockPosOffset16(EnumFacing facing) + { + return this.mapEnumFacing[facing.ordinal()]; + } + + public World getWorld() + { + return this.world; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/SetVisibility.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/SetVisibility.java new file mode 100644 index 0000000..2fea9ea --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/SetVisibility.java @@ -0,0 +1,81 @@ +package net.minecraft.client.renderer.chunk; + +import java.util.BitSet; +import java.util.Set; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SetVisibility +{ + private static final int COUNT_FACES = EnumFacing.values().length; + private final BitSet bitSet; + + public SetVisibility() + { + this.bitSet = new BitSet(COUNT_FACES * COUNT_FACES); + } + + public void setManyVisible(Set facing) + { + for (EnumFacing enumfacing : facing) + { + for (EnumFacing enumfacing1 : facing) + { + this.setVisible(enumfacing, enumfacing1, true); + } + } + } + + public void setVisible(EnumFacing facing, EnumFacing facing2, boolean p_178619_3_) + { + this.bitSet.set(facing.ordinal() + facing2.ordinal() * COUNT_FACES, p_178619_3_); + this.bitSet.set(facing2.ordinal() + facing.ordinal() * COUNT_FACES, p_178619_3_); + } + + public void setAllVisible(boolean visible) + { + this.bitSet.set(0, this.bitSet.size(), visible); + } + + public boolean isVisible(EnumFacing facing, EnumFacing facing2) + { + return this.bitSet.get(facing.ordinal() + facing2.ordinal() * COUNT_FACES); + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append(' '); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + stringbuilder.append(' ').append(enumfacing.toString().toUpperCase().charAt(0)); + } + + stringbuilder.append('\n'); + + for (EnumFacing enumfacing2 : EnumFacing.values()) + { + stringbuilder.append(enumfacing2.toString().toUpperCase().charAt(0)); + + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + if (enumfacing2 == enumfacing1) + { + stringbuilder.append(" "); + } + else + { + boolean flag = this.isVisible(enumfacing2, enumfacing1); + stringbuilder.append(' ').append((char)(flag ? 'Y' : 'n')); + } + } + + stringbuilder.append('\n'); + } + + return stringbuilder.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/VboChunkFactory.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/VboChunkFactory.java new file mode 100644 index 0000000..e61a492 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/VboChunkFactory.java @@ -0,0 +1,15 @@ +package net.minecraft.client.renderer.chunk; + +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class VboChunkFactory implements IRenderChunkFactory +{ + public RenderChunk create(World worldIn, RenderGlobal renderGlobalIn, int index) + { + return new RenderChunk(worldIn, renderGlobalIn, index); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/VisGraph.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/VisGraph.java new file mode 100644 index 0000000..f67a6e5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/VisGraph.java @@ -0,0 +1,211 @@ +package net.minecraft.client.renderer.chunk; + +import com.google.common.collect.Queues; +import java.util.BitSet; +import java.util.EnumSet; +import java.util.Queue; +import java.util.Set; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IntegerCache; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class VisGraph +{ + private static final int DX = (int)Math.pow(16.0D, 0.0D); + private static final int DZ = (int)Math.pow(16.0D, 1.0D); + private static final int DY = (int)Math.pow(16.0D, 2.0D); + private final BitSet bitSet = new BitSet(4096); + private static final int[] INDEX_OF_EDGES = new int[1352]; + private int empty = 4096; + + public void setOpaqueCube(BlockPos pos) + { + this.bitSet.set(getIndex(pos), true); + --this.empty; + } + + private static int getIndex(BlockPos pos) + { + return getIndex(pos.getX() & 15, pos.getY() & 15, pos.getZ() & 15); + } + + private static int getIndex(int x, int y, int z) + { + return x << 0 | y << 8 | z << 4; + } + + public SetVisibility computeVisibility() + { + SetVisibility setvisibility = new SetVisibility(); + + if (4096 - this.empty < 256) + { + setvisibility.setAllVisible(true); + } + else if (this.empty == 0) + { + setvisibility.setAllVisible(false); + } + else + { + for (int i : INDEX_OF_EDGES) + { + if (!this.bitSet.get(i)) + { + setvisibility.setManyVisible(this.floodFill(i)); + } + } + } + + return setvisibility; + } + + public Set getVisibleFacings(BlockPos pos) + { + return this.floodFill(getIndex(pos)); + } + + private Set floodFill(int pos) + { + Set set = EnumSet.noneOf(EnumFacing.class); + Queue queue = Queues.newArrayDeque(); + queue.add(IntegerCache.getInteger(pos)); + this.bitSet.set(pos, true); + + while (!queue.isEmpty()) + { + int i = ((Integer)queue.poll()).intValue(); + this.addEdges(i, set); + + for (EnumFacing enumfacing : EnumFacing.values()) + { + int j = this.getNeighborIndexAtFace(i, enumfacing); + + if (j >= 0 && !this.bitSet.get(j)) + { + this.bitSet.set(j, true); + queue.add(IntegerCache.getInteger(j)); + } + } + } + + return set; + } + + private void addEdges(int pos, Set p_178610_2_) + { + int i = pos >> 0 & 15; + + if (i == 0) + { + p_178610_2_.add(EnumFacing.WEST); + } + else if (i == 15) + { + p_178610_2_.add(EnumFacing.EAST); + } + + int j = pos >> 8 & 15; + + if (j == 0) + { + p_178610_2_.add(EnumFacing.DOWN); + } + else if (j == 15) + { + p_178610_2_.add(EnumFacing.UP); + } + + int k = pos >> 4 & 15; + + if (k == 0) + { + p_178610_2_.add(EnumFacing.NORTH); + } + else if (k == 15) + { + p_178610_2_.add(EnumFacing.SOUTH); + } + } + + private int getNeighborIndexAtFace(int pos, EnumFacing facing) + { + switch (facing) + { + case DOWN: + + if ((pos >> 8 & 15) == 0) + { + return -1; + } + + return pos - DY; + case UP: + + if ((pos >> 8 & 15) == 15) + { + return -1; + } + + return pos + DY; + case NORTH: + + if ((pos >> 4 & 15) == 0) + { + return -1; + } + + return pos - DZ; + case SOUTH: + + if ((pos >> 4 & 15) == 15) + { + return -1; + } + + return pos + DZ; + case WEST: + + if ((pos >> 0 & 15) == 0) + { + return -1; + } + + return pos - DX; + case EAST: + + if ((pos >> 0 & 15) == 15) + { + return -1; + } + + return pos + DX; + default: + return -1; + } + } + + static + { + int i = 0; + int j = 15; + int k = 0; + + for (int l = 0; l < 16; ++l) + { + for (int i1 = 0; i1 < 16; ++i1) + { + for (int j1 = 0; j1 < 16; ++j1) + { + if (l == 0 || l == 15 || i1 == 0 || i1 == 15 || j1 == 0 || j1 == 15) + { + INDEX_OF_EDGES[k++] = getIndex(l, i1, j1); + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/package-info.java new file mode 100644 index 0000000..bcf24f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/chunk/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.chunk; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/BlockColors.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/BlockColors.java new file mode 100644 index 0000000..a001a1f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/BlockColors.java @@ -0,0 +1,197 @@ +package net.minecraft.client.renderer.color; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockOldLeaf; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockRedstoneWire; +import net.minecraft.block.BlockStem; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFlowerPot; +import net.minecraft.util.ObjectIntIdentityMap; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ColorizerFoliage; +import net.minecraft.world.ColorizerGrass; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeColorHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class BlockColors +{ + // FORGE: Use RegistryDelegates as non-Vanilla block ids are not constant + private final java.util.Map, IBlockColor> blockColorMap = com.google.common.collect.Maps.newHashMap(); + + public static BlockColors init() + { + final BlockColors blockcolors = new BlockColors(); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = (BlockDoublePlant.EnumPlantType)state.getValue(BlockDoublePlant.VARIANT); + return worldIn != null && pos != null && (blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.GRASS || blockdoubleplant$enumplanttype == BlockDoublePlant.EnumPlantType.FERN) ? BiomeColorHelper.getGrassColorAtPos(worldIn, state.getValue(BlockDoublePlant.HALF) == BlockDoublePlant.EnumBlockHalf.UPPER ? pos.down() : pos) : -1; + } + }, Blocks.DOUBLE_PLANT); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + if (worldIn != null && pos != null) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityFlowerPot) + { + Item item = ((TileEntityFlowerPot)tileentity).getFlowerPotItem(); + IBlockState iblockstate = Block.getBlockFromItem(item).getDefaultState(); + return blockcolors.colorMultiplier(iblockstate, worldIn, pos, tintIndex); + } + else + { + return -1; + } + } + else + { + return -1; + } + } + }, Blocks.FLOWER_POT); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return worldIn != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(worldIn, pos) : ColorizerGrass.getGrassColor(0.5D, 1.0D); + } + }, Blocks.GRASS); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + BlockPlanks.EnumType blockplanks$enumtype = (BlockPlanks.EnumType)state.getValue(BlockOldLeaf.VARIANT); + + if (blockplanks$enumtype == BlockPlanks.EnumType.SPRUCE) + { + return ColorizerFoliage.getFoliageColorPine(); + } + else if (blockplanks$enumtype == BlockPlanks.EnumType.BIRCH) + { + return ColorizerFoliage.getFoliageColorBirch(); + } + else + { + return worldIn != null && pos != null ? BiomeColorHelper.getFoliageColorAtPos(worldIn, pos) : ColorizerFoliage.getFoliageColorBasic(); + } + } + }, Blocks.LEAVES); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return worldIn != null && pos != null ? BiomeColorHelper.getFoliageColorAtPos(worldIn, pos) : ColorizerFoliage.getFoliageColorBasic(); + } + }, Blocks.LEAVES2); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return worldIn != null && pos != null ? BiomeColorHelper.getWaterColorAtPos(worldIn, pos) : -1; + } + }, Blocks.WATER, Blocks.FLOWING_WATER); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return BlockRedstoneWire.colorMultiplier(((Integer)state.getValue(BlockRedstoneWire.POWER)).intValue()); + } + }, Blocks.REDSTONE_WIRE); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return worldIn != null && pos != null ? BiomeColorHelper.getGrassColorAtPos(worldIn, pos) : -1; + } + }, Blocks.REEDS); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + int i = ((Integer)state.getValue(BlockStem.AGE)).intValue(); + int j = i * 32; + int k = 255 - i * 8; + int l = i * 4; + return j << 16 | k << 8 | l; + } + }, Blocks.MELON_STEM, Blocks.PUMPKIN_STEM); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + if (worldIn != null && pos != null) + { + return BiomeColorHelper.getGrassColorAtPos(worldIn, pos); + } + else + { + return state.getValue(BlockTallGrass.TYPE) == BlockTallGrass.EnumType.DEAD_BUSH ? 16777215 : ColorizerGrass.getGrassColor(0.5D, 1.0D); + } + } + }, Blocks.TALLGRASS); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return worldIn != null && pos != null ? BiomeColorHelper.getFoliageColorAtPos(worldIn, pos) : ColorizerFoliage.getFoliageColorBasic(); + } + }, Blocks.VINE); + blockcolors.registerBlockColorHandler(new IBlockColor() + { + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex) + { + return worldIn != null && pos != null ? 2129968 : 7455580; + } + }, Blocks.WATERLILY); + net.minecraftforge.client.ForgeHooksClient.onBlockColorsInit(blockcolors); + return blockcolors; + } + + public int getColor(IBlockState state, World p_189991_2_, BlockPos p_189991_3_) + { + IBlockColor iblockcolor = this.blockColorMap.get(state.getBlock().delegate); + + if (iblockcolor != null) + { + return iblockcolor.colorMultiplier(state, (IBlockAccess)null, (BlockPos)null, 0); + } + else + { + MapColor mapcolor = state.getMapColor(p_189991_2_, p_189991_3_); + return mapcolor != null ? mapcolor.colorValue : -1; + } + } + + public int colorMultiplier(IBlockState state, @Nullable IBlockAccess blockAccess, @Nullable BlockPos pos, int renderPass) + { + IBlockColor iblockcolor = this.blockColorMap.get(state.getBlock().delegate); + return iblockcolor == null ? -1 : iblockcolor.colorMultiplier(state, blockAccess, pos, renderPass); + } + + public void registerBlockColorHandler(IBlockColor blockColor, Block... blocksIn) + { + for (Block block : blocksIn) + { + if (block == null) throw new IllegalArgumentException("Block registered to block color handler cannot be null!"); + if (block.getRegistryName() == null) throw new IllegalArgumentException("Block must be registered before assigning color handler."); + this.blockColorMap.put(block.delegate, blockColor); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/IBlockColor.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/IBlockColor.java new file mode 100644 index 0000000..cb07bf2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/IBlockColor.java @@ -0,0 +1,14 @@ +package net.minecraft.client.renderer.color; + +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IBlockColor +{ + int colorMultiplier(IBlockState state, @Nullable IBlockAccess worldIn, @Nullable BlockPos pos, int tintIndex); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/IItemColor.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/IItemColor.java new file mode 100644 index 0000000..ef11eba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/IItemColor.java @@ -0,0 +1,11 @@ +package net.minecraft.client.renderer.color; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IItemColor +{ + int colorMultiplier(ItemStack stack, int tintIndex); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/ItemColors.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/ItemColors.java new file mode 100644 index 0000000..0825b6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/ItemColors.java @@ -0,0 +1,170 @@ +package net.minecraft.client.renderer.color; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityList; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemFireworkCharge; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagIntArray; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.ObjectIntIdentityMap; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ColorizerGrass; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ItemColors +{ + // FORGE: Use RegistryDelegates as non-Vanilla item ids are not constant + private final java.util.Map, IItemColor> itemColorMap = com.google.common.collect.Maps.newHashMap(); + + public static ItemColors init(final BlockColors colors) + { + ItemColors itemcolors = new ItemColors(); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + return tintIndex > 0 ? -1 : ((ItemArmor)stack.getItem()).getColor(stack); + } + }, Items.LEATHER_HELMET, Items.LEATHER_CHESTPLATE, Items.LEATHER_LEGGINGS, Items.LEATHER_BOOTS); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + BlockDoublePlant.EnumPlantType blockdoubleplant$enumplanttype = BlockDoublePlant.EnumPlantType.byMetadata(stack.getMetadata()); + return blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.GRASS && blockdoubleplant$enumplanttype != BlockDoublePlant.EnumPlantType.FERN ? -1 : ColorizerGrass.getGrassColor(0.5D, 1.0D); + } + }, Blocks.DOUBLE_PLANT); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + if (tintIndex != 1) + { + return -1; + } + else + { + NBTBase nbtbase = ItemFireworkCharge.getExplosionTag(stack, "Colors"); + + if (!(nbtbase instanceof NBTTagIntArray)) + { + return 9079434; + } + else + { + int[] aint = ((NBTTagIntArray)nbtbase).getIntArray(); + + if (aint.length == 1) + { + return aint[0]; + } + else + { + int i = 0; + int j = 0; + int k = 0; + + for (int l : aint) + { + i += (l & 16711680) >> 16; + j += (l & 65280) >> 8; + k += (l & 255) >> 0; + } + + i = i / aint.length; + j = j / aint.length; + k = k / aint.length; + return i << 16 | j << 8 | k; + } + } + } + } + }, Items.FIREWORK_CHARGE); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + return tintIndex > 0 ? -1 : PotionUtils.getColor(stack); + } + }, Items.POTIONITEM, Items.SPLASH_POTION, Items.LINGERING_POTION); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + EntityList.EntityEggInfo entitylist$entityegginfo = EntityList.ENTITY_EGGS.get(ItemMonsterPlacer.getNamedIdFrom(stack)); + + if (entitylist$entityegginfo == null) + { + return -1; + } + else + { + return tintIndex == 0 ? entitylist$entityegginfo.primaryColor : entitylist$entityegginfo.secondaryColor; + } + } + }, Items.SPAWN_EGG); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + IBlockState iblockstate = ((ItemBlock)stack.getItem()).getBlock().getStateFromMeta(stack.getMetadata()); + return colors.colorMultiplier(iblockstate, (IBlockAccess)null, (BlockPos)null, tintIndex); + } + }, Blocks.GRASS, Blocks.TALLGRASS, Blocks.VINE, Blocks.LEAVES, Blocks.LEAVES2, Blocks.WATERLILY); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + return tintIndex == 0 ? PotionUtils.getColor(stack) : -1; + } + }, Items.TIPPED_ARROW); + itemcolors.registerItemColorHandler(new IItemColor() + { + public int colorMultiplier(ItemStack stack, int tintIndex) + { + return tintIndex == 0 ? -1 : ItemMap.getColor(stack); + } + }, Items.FILLED_MAP); + net.minecraftforge.client.ForgeHooksClient.onItemColorsInit(itemcolors, colors); + return itemcolors; + } + + public int colorMultiplier(ItemStack stack, int tintIndex) + { + IItemColor iitemcolor = this.itemColorMap.get(stack.getItem().delegate); + return iitemcolor == null ? -1 : iitemcolor.colorMultiplier(stack, tintIndex); + } + + public void registerItemColorHandler(IItemColor itemColor, Block... blocksIn) + { + for (Block block : blocksIn) + { + if (block == null) throw new IllegalArgumentException("Block registered to item color handler cannot be null!"); + if (block.getRegistryName() == null) throw new IllegalArgumentException("Block must be registered before assigning color handler."); + this.itemColorMap.put(Item.getItemFromBlock(block).delegate, itemColor); + } + } + + public void registerItemColorHandler(IItemColor itemColor, Item... itemsIn) + { + for (Item item : itemsIn) + { + if (item == null) throw new IllegalArgumentException("Item registered to item color handler cannot be null!"); + if (item.getRegistryName() == null) throw new IllegalArgumentException("Item must be registered before assigning color handler."); + this.itemColorMap.put(item.delegate, itemColor); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/package-info.java new file mode 100644 index 0000000..c7ee7ca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/color/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.color; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ClippingHelper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ClippingHelper.java new file mode 100644 index 0000000..3576814 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ClippingHelper.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.culling; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ClippingHelper +{ + public float[][] frustum = new float[6][4]; + public float[] projectionMatrix = new float[16]; + public float[] modelviewMatrix = new float[16]; + public float[] clippingMatrix = new float[16]; + + private double dot(float[] p_178624_1_, double p_178624_2_, double p_178624_4_, double p_178624_6_) + { + return (double)p_178624_1_[0] * p_178624_2_ + (double)p_178624_1_[1] * p_178624_4_ + (double)p_178624_1_[2] * p_178624_6_ + (double)p_178624_1_[3]; + } + + /** + * Returns true if the box is inside all 6 clipping planes, otherwise returns false. + */ + public boolean isBoxInFrustum(double p_78553_1_, double p_78553_3_, double p_78553_5_, double p_78553_7_, double p_78553_9_, double p_78553_11_) + { + for (int i = 0; i < 6; ++i) + { + float[] afloat = this.frustum[i]; + + if (this.dot(afloat, p_78553_1_, p_78553_3_, p_78553_5_) <= 0.0D && this.dot(afloat, p_78553_7_, p_78553_3_, p_78553_5_) <= 0.0D && this.dot(afloat, p_78553_1_, p_78553_9_, p_78553_5_) <= 0.0D && this.dot(afloat, p_78553_7_, p_78553_9_, p_78553_5_) <= 0.0D && this.dot(afloat, p_78553_1_, p_78553_3_, p_78553_11_) <= 0.0D && this.dot(afloat, p_78553_7_, p_78553_3_, p_78553_11_) <= 0.0D && this.dot(afloat, p_78553_1_, p_78553_9_, p_78553_11_) <= 0.0D && this.dot(afloat, p_78553_7_, p_78553_9_, p_78553_11_) <= 0.0D) + { + return false; + } + } + + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ClippingHelperImpl.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ClippingHelperImpl.java new file mode 100644 index 0000000..3e70b32 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ClippingHelperImpl.java @@ -0,0 +1,102 @@ +package net.minecraft.client.renderer.culling; + +import java.nio.FloatBuffer; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ClippingHelperImpl extends ClippingHelper +{ + private static final ClippingHelperImpl instance = new ClippingHelperImpl(); + private final FloatBuffer projectionMatrixBuffer = GLAllocation.createDirectFloatBuffer(16); + private final FloatBuffer modelviewMatrixBuffer = GLAllocation.createDirectFloatBuffer(16); + private final FloatBuffer floatBuffer16 = GLAllocation.createDirectFloatBuffer(16); + + /** + * Initialises the ClippingHelper object then returns an instance of it. + */ + public static ClippingHelper getInstance() + { + instance.init(); + return instance; + } + + private void normalize(float[] p_180547_1_) + { + float f = MathHelper.sqrt(p_180547_1_[0] * p_180547_1_[0] + p_180547_1_[1] * p_180547_1_[1] + p_180547_1_[2] * p_180547_1_[2]); + p_180547_1_[0] /= f; + p_180547_1_[1] /= f; + p_180547_1_[2] /= f; + p_180547_1_[3] /= f; + } + + public void init() + { + this.projectionMatrixBuffer.clear(); + this.modelviewMatrixBuffer.clear(); + this.floatBuffer16.clear(); + GlStateManager.getFloat(2983, this.projectionMatrixBuffer); + GlStateManager.getFloat(2982, this.modelviewMatrixBuffer); + float[] afloat = this.projectionMatrix; + float[] afloat1 = this.modelviewMatrix; + this.projectionMatrixBuffer.flip().limit(16); + this.projectionMatrixBuffer.get(afloat); + this.modelviewMatrixBuffer.flip().limit(16); + this.modelviewMatrixBuffer.get(afloat1); + this.clippingMatrix[0] = afloat1[0] * afloat[0] + afloat1[1] * afloat[4] + afloat1[2] * afloat[8] + afloat1[3] * afloat[12]; + this.clippingMatrix[1] = afloat1[0] * afloat[1] + afloat1[1] * afloat[5] + afloat1[2] * afloat[9] + afloat1[3] * afloat[13]; + this.clippingMatrix[2] = afloat1[0] * afloat[2] + afloat1[1] * afloat[6] + afloat1[2] * afloat[10] + afloat1[3] * afloat[14]; + this.clippingMatrix[3] = afloat1[0] * afloat[3] + afloat1[1] * afloat[7] + afloat1[2] * afloat[11] + afloat1[3] * afloat[15]; + this.clippingMatrix[4] = afloat1[4] * afloat[0] + afloat1[5] * afloat[4] + afloat1[6] * afloat[8] + afloat1[7] * afloat[12]; + this.clippingMatrix[5] = afloat1[4] * afloat[1] + afloat1[5] * afloat[5] + afloat1[6] * afloat[9] + afloat1[7] * afloat[13]; + this.clippingMatrix[6] = afloat1[4] * afloat[2] + afloat1[5] * afloat[6] + afloat1[6] * afloat[10] + afloat1[7] * afloat[14]; + this.clippingMatrix[7] = afloat1[4] * afloat[3] + afloat1[5] * afloat[7] + afloat1[6] * afloat[11] + afloat1[7] * afloat[15]; + this.clippingMatrix[8] = afloat1[8] * afloat[0] + afloat1[9] * afloat[4] + afloat1[10] * afloat[8] + afloat1[11] * afloat[12]; + this.clippingMatrix[9] = afloat1[8] * afloat[1] + afloat1[9] * afloat[5] + afloat1[10] * afloat[9] + afloat1[11] * afloat[13]; + this.clippingMatrix[10] = afloat1[8] * afloat[2] + afloat1[9] * afloat[6] + afloat1[10] * afloat[10] + afloat1[11] * afloat[14]; + this.clippingMatrix[11] = afloat1[8] * afloat[3] + afloat1[9] * afloat[7] + afloat1[10] * afloat[11] + afloat1[11] * afloat[15]; + this.clippingMatrix[12] = afloat1[12] * afloat[0] + afloat1[13] * afloat[4] + afloat1[14] * afloat[8] + afloat1[15] * afloat[12]; + this.clippingMatrix[13] = afloat1[12] * afloat[1] + afloat1[13] * afloat[5] + afloat1[14] * afloat[9] + afloat1[15] * afloat[13]; + this.clippingMatrix[14] = afloat1[12] * afloat[2] + afloat1[13] * afloat[6] + afloat1[14] * afloat[10] + afloat1[15] * afloat[14]; + this.clippingMatrix[15] = afloat1[12] * afloat[3] + afloat1[13] * afloat[7] + afloat1[14] * afloat[11] + afloat1[15] * afloat[15]; + float[] afloat2 = this.frustum[0]; + afloat2[0] = this.clippingMatrix[3] - this.clippingMatrix[0]; + afloat2[1] = this.clippingMatrix[7] - this.clippingMatrix[4]; + afloat2[2] = this.clippingMatrix[11] - this.clippingMatrix[8]; + afloat2[3] = this.clippingMatrix[15] - this.clippingMatrix[12]; + this.normalize(afloat2); + float[] afloat3 = this.frustum[1]; + afloat3[0] = this.clippingMatrix[3] + this.clippingMatrix[0]; + afloat3[1] = this.clippingMatrix[7] + this.clippingMatrix[4]; + afloat3[2] = this.clippingMatrix[11] + this.clippingMatrix[8]; + afloat3[3] = this.clippingMatrix[15] + this.clippingMatrix[12]; + this.normalize(afloat3); + float[] afloat4 = this.frustum[2]; + afloat4[0] = this.clippingMatrix[3] + this.clippingMatrix[1]; + afloat4[1] = this.clippingMatrix[7] + this.clippingMatrix[5]; + afloat4[2] = this.clippingMatrix[11] + this.clippingMatrix[9]; + afloat4[3] = this.clippingMatrix[15] + this.clippingMatrix[13]; + this.normalize(afloat4); + float[] afloat5 = this.frustum[3]; + afloat5[0] = this.clippingMatrix[3] - this.clippingMatrix[1]; + afloat5[1] = this.clippingMatrix[7] - this.clippingMatrix[5]; + afloat5[2] = this.clippingMatrix[11] - this.clippingMatrix[9]; + afloat5[3] = this.clippingMatrix[15] - this.clippingMatrix[13]; + this.normalize(afloat5); + float[] afloat6 = this.frustum[4]; + afloat6[0] = this.clippingMatrix[3] - this.clippingMatrix[2]; + afloat6[1] = this.clippingMatrix[7] - this.clippingMatrix[6]; + afloat6[2] = this.clippingMatrix[11] - this.clippingMatrix[10]; + afloat6[3] = this.clippingMatrix[15] - this.clippingMatrix[14]; + this.normalize(afloat6); + float[] afloat7 = this.frustum[5]; + afloat7[0] = this.clippingMatrix[3] + this.clippingMatrix[2]; + afloat7[1] = this.clippingMatrix[7] + this.clippingMatrix[6]; + afloat7[2] = this.clippingMatrix[11] + this.clippingMatrix[10]; + afloat7[3] = this.clippingMatrix[15] + this.clippingMatrix[14]; + this.normalize(afloat7); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/Frustum.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/Frustum.java new file mode 100644 index 0000000..75ae0bc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/Frustum.java @@ -0,0 +1,47 @@ +package net.minecraft.client.renderer.culling; + +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Frustum implements ICamera +{ + private final ClippingHelper clippingHelper; + private double x; + private double y; + private double z; + + public Frustum() + { + this(ClippingHelperImpl.getInstance()); + } + + public Frustum(ClippingHelper clippingHelperIn) + { + this.clippingHelper = clippingHelperIn; + } + + public void setPosition(double xIn, double yIn, double zIn) + { + this.x = xIn; + this.y = yIn; + this.z = zIn; + } + + /** + * Calls the clipping helper. Returns true if the box is inside all 6 clipping planes, otherwise returns false. + */ + public boolean isBoxInFrustum(double p_78548_1_, double p_78548_3_, double p_78548_5_, double p_78548_7_, double p_78548_9_, double p_78548_11_) + { + return this.clippingHelper.isBoxInFrustum(p_78548_1_ - this.x, p_78548_3_ - this.y, p_78548_5_ - this.z, p_78548_7_ - this.x, p_78548_9_ - this.y, p_78548_11_ - this.z); + } + + /** + * Returns true if the bounding box is inside all 6 clipping planes, otherwise returns false. + */ + public boolean isBoundingBoxInFrustum(AxisAlignedBB p_78546_1_) + { + return this.isBoxInFrustum(p_78546_1_.minX, p_78546_1_.minY, p_78546_1_.minZ, p_78546_1_.maxX, p_78546_1_.maxY, p_78546_1_.maxZ); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ICamera.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ICamera.java new file mode 100644 index 0000000..fa65efb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/ICamera.java @@ -0,0 +1,16 @@ +package net.minecraft.client.renderer.culling; + +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ICamera +{ + /** + * Returns true if the bounding box is inside all 6 clipping planes, otherwise returns false. + */ + boolean isBoundingBoxInFrustum(AxisAlignedBB p_78546_1_); + + void setPosition(double xIn, double yIn, double zIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/package-info.java new file mode 100644 index 0000000..d8e71d7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/culling/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.culling; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRenderer.java new file mode 100644 index 0000000..f15a01d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRenderer.java @@ -0,0 +1,132 @@ +package net.minecraft.client.renderer.debug; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRenderer +{ + public final DebugRenderer.IDebugRenderer pathfinding; + public final DebugRenderer.IDebugRenderer water; + public final DebugRenderer.IDebugRenderer chunkBorder; + public final DebugRenderer.IDebugRenderer heightMap; + public final DebugRenderer.IDebugRenderer collisionBox; + public final DebugRenderer.IDebugRenderer neighborsUpdate; + public final DebugRenderer.IDebugRenderer solidFace; + private boolean chunkBorderEnabled; + private boolean pathfindingEnabled; + private boolean waterEnabled; + private boolean heightMapEnabled; + private boolean collisionBoxEnabled; + private boolean neighborsUpdateEnabled; + private boolean solidFaceEnabled; + + public DebugRenderer(Minecraft clientIn) + { + this.pathfinding = new DebugRendererPathfinding(clientIn); + this.water = new DebugRendererWater(clientIn); + this.chunkBorder = new DebugRendererChunkBorder(clientIn); + this.heightMap = new DebugRendererHeightMap(clientIn); + this.collisionBox = new DebugRendererCollisionBox(clientIn); + this.neighborsUpdate = new DebugRendererNeighborsUpdate(clientIn); + this.solidFace = new DebugRendererSolidFace(clientIn); + } + + public boolean shouldRender() + { + return this.chunkBorderEnabled || this.pathfindingEnabled || this.waterEnabled || this.heightMapEnabled || this.collisionBoxEnabled || this.neighborsUpdateEnabled || this.solidFaceEnabled; + } + + /** + * Toggles the debug screen's visibility. + */ + public boolean toggleChunkBorders() + { + this.chunkBorderEnabled = !this.chunkBorderEnabled; + return this.chunkBorderEnabled; + } + + public void renderDebug(float partialTicks, long finishTimeNano) + { + if (this.pathfindingEnabled) + { + this.pathfinding.render(partialTicks, finishTimeNano); + } + + if (this.chunkBorderEnabled && !Minecraft.getMinecraft().isReducedDebug()) + { + this.chunkBorder.render(partialTicks, finishTimeNano); + } + + if (this.waterEnabled) + { + this.water.render(partialTicks, finishTimeNano); + } + + if (this.heightMapEnabled) + { + this.heightMap.render(partialTicks, finishTimeNano); + } + + if (this.collisionBoxEnabled) + { + this.collisionBox.render(partialTicks, finishTimeNano); + } + + if (this.neighborsUpdateEnabled) + { + this.neighborsUpdate.render(partialTicks, finishTimeNano); + } + + if (this.solidFaceEnabled) + { + this.solidFace.render(partialTicks, finishTimeNano); + } + } + + public static void renderDebugText(String str, int x, int y, int z, float partialTicks, int color) + { + renderDebugText(str, (double)x + 0.5D, (double)y + 0.5D, (double)z + 0.5D, partialTicks, color); + } + + public static void renderDebugText(String str, double x, double y, double z, float partialTicks, int color) + { + Minecraft minecraft = Minecraft.getMinecraft(); + + if (minecraft.player != null && minecraft.getRenderManager() != null && minecraft.getRenderManager().options != null) + { + FontRenderer fontrenderer = minecraft.fontRenderer; + EntityPlayer entityplayer = minecraft.player; + double d0 = entityplayer.lastTickPosX + (entityplayer.posX - entityplayer.lastTickPosX) * (double)partialTicks; + double d1 = entityplayer.lastTickPosY + (entityplayer.posY - entityplayer.lastTickPosY) * (double)partialTicks; + double d2 = entityplayer.lastTickPosZ + (entityplayer.posZ - entityplayer.lastTickPosZ) * (double)partialTicks; + GlStateManager.pushMatrix(); + GlStateManager.translate((float)(x - d0), (float)(y - d1) + 0.07F, (float)(z - d2)); + GlStateManager.glNormal3f(0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.02F, -0.02F, 0.02F); + RenderManager rendermanager = minecraft.getRenderManager(); + GlStateManager.rotate(-rendermanager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(rendermanager.options.thirdPersonView == 2 ? 1 : -1) * rendermanager.playerViewX, 1.0F, 0.0F, 0.0F); + GlStateManager.disableLighting(); + GlStateManager.enableTexture2D(); + GlStateManager.enableDepth(); + GlStateManager.depthMask(true); + GlStateManager.scale(-1.0F, 1.0F, 1.0F); + fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, 0, color); + GlStateManager.enableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + } + + @SideOnly(Side.CLIENT) + public interface IDebugRenderer + { + void render(float partialTicks, long finishTimeNano); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererChunkBorder.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererChunkBorder.java new file mode 100644 index 0000000..ee1e92b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererChunkBorder.java @@ -0,0 +1,118 @@ +package net.minecraft.client.renderer.debug; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererChunkBorder implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + + public DebugRendererChunkBorder(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void render(float partialTicks, long finishTimeNano) + { + EntityPlayer entityplayer = this.minecraft.player; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + double d0 = entityplayer.lastTickPosX + (entityplayer.posX - entityplayer.lastTickPosX) * (double)partialTicks; + double d1 = entityplayer.lastTickPosY + (entityplayer.posY - entityplayer.lastTickPosY) * (double)partialTicks; + double d2 = entityplayer.lastTickPosZ + (entityplayer.posZ - entityplayer.lastTickPosZ) * (double)partialTicks; + double d3 = 0.0D - d1; + double d4 = 256.0D - d1; + GlStateManager.disableTexture2D(); + GlStateManager.disableBlend(); + double d5 = (double)(entityplayer.chunkCoordX << 4) - d0; + double d6 = (double)(entityplayer.chunkCoordZ << 4) - d2; + GlStateManager.glLineWidth(1.0F); + bufferbuilder.begin(3, DefaultVertexFormats.POSITION_COLOR); + + for (int i = -16; i <= 32; i += 16) + { + for (int j = -16; j <= 32; j += 16) + { + bufferbuilder.pos(d5 + (double)i, d3, d6 + (double)j).color(1.0F, 0.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + (double)i, d3, d6 + (double)j).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder.pos(d5 + (double)i, d4, d6 + (double)j).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder.pos(d5 + (double)i, d4, d6 + (double)j).color(1.0F, 0.0F, 0.0F, 0.0F).endVertex(); + } + } + + for (int k = 2; k < 16; k += 2) + { + bufferbuilder.pos(d5 + (double)k, d3, d6).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d3, d6).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d4, d6).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d4, d6).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d3, d6 + 16.0D).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d3, d6 + 16.0D).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d4, d6 + 16.0D).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + (double)k, d4, d6 + 16.0D).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + } + + for (int l = 2; l < 16; l += 2) + { + bufferbuilder.pos(d5, d3, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5, d3, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d4, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d4, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d3, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d3, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d4, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d4, d6 + (double)l).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + } + + for (int i1 = 0; i1 <= 256; i1 += 2) + { + double d7 = (double)i1 - d1; + bufferbuilder.pos(d5, d7, d6).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5, d7, d6).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d7, d6 + 16.0D).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d7, d6 + 16.0D).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d7, d6).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d7, d6).color(1.0F, 1.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d7, d6).color(1.0F, 1.0F, 0.0F, 0.0F).endVertex(); + } + + tessellator.draw(); + GlStateManager.glLineWidth(2.0F); + bufferbuilder.begin(3, DefaultVertexFormats.POSITION_COLOR); + + for (int j1 = 0; j1 <= 16; j1 += 16) + { + for (int l1 = 0; l1 <= 16; l1 += 16) + { + bufferbuilder.pos(d5 + (double)j1, d3, d6 + (double)l1).color(0.25F, 0.25F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5 + (double)j1, d3, d6 + (double)l1).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + (double)j1, d4, d6 + (double)l1).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + (double)j1, d4, d6 + (double)l1).color(0.25F, 0.25F, 1.0F, 0.0F).endVertex(); + } + } + + for (int k1 = 0; k1 <= 256; k1 += 16) + { + double d8 = (double)k1 - d1; + bufferbuilder.pos(d5, d8, d6).color(0.25F, 0.25F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(d5, d8, d6).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d8, d6 + 16.0D).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d8, d6 + 16.0D).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5 + 16.0D, d8, d6).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d8, d6).color(0.25F, 0.25F, 1.0F, 1.0F).endVertex(); + bufferbuilder.pos(d5, d8, d6).color(0.25F, 0.25F, 1.0F, 0.0F).endVertex(); + } + + tessellator.draw(); + GlStateManager.glLineWidth(1.0F); + GlStateManager.enableBlend(); + GlStateManager.enableTexture2D(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererCollisionBox.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererCollisionBox.java new file mode 100644 index 0000000..3c09ec8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererCollisionBox.java @@ -0,0 +1,50 @@ +package net.minecraft.client.renderer.debug; + +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererCollisionBox implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + private EntityPlayer player; + private double renderPosX; + private double renderPosY; + private double renderPosZ; + + public DebugRendererCollisionBox(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void render(float partialTicks, long finishTimeNano) + { + this.player = this.minecraft.player; + this.renderPosX = this.player.lastTickPosX + (this.player.posX - this.player.lastTickPosX) * (double)partialTicks; + this.renderPosY = this.player.lastTickPosY + (this.player.posY - this.player.lastTickPosY) * (double)partialTicks; + this.renderPosZ = this.player.lastTickPosZ + (this.player.posZ - this.player.lastTickPosZ) * (double)partialTicks; + World world = this.minecraft.player.world; + List list = world.getCollisionBoxes(this.player, this.player.getEntityBoundingBox().grow(6.0D)); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.glLineWidth(2.0F); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + + for (AxisAlignedBB axisalignedbb : list) + { + RenderGlobal.drawSelectionBoundingBox(axisalignedbb.grow(0.002D).offset(-this.renderPosX, -this.renderPosY, -this.renderPosZ), 1.0F, 1.0F, 1.0F, 1.0F); + } + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererHeightMap.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererHeightMap.java new file mode 100644 index 0000000..6a43d75 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererHeightMap.java @@ -0,0 +1,61 @@ +package net.minecraft.client.renderer.debug; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererHeightMap implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + + public DebugRendererHeightMap(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void render(float partialTicks, long finishTimeNano) + { + EntityPlayer entityplayer = this.minecraft.player; + World world = this.minecraft.world; + double d0 = entityplayer.lastTickPosX + (entityplayer.posX - entityplayer.lastTickPosX) * (double)partialTicks; + double d1 = entityplayer.lastTickPosY + (entityplayer.posY - entityplayer.lastTickPosY) * (double)partialTicks; + double d2 = entityplayer.lastTickPosZ + (entityplayer.posZ - entityplayer.lastTickPosZ) * (double)partialTicks; + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.disableTexture2D(); + BlockPos blockpos = new BlockPos(entityplayer.posX, 0.0D, entityplayer.posZ); + Iterable iterable = BlockPos.getAllInBox(blockpos.add(-40, 0, -40), blockpos.add(40, 0, 40)); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + + for (BlockPos blockpos1 : iterable) + { + int i = world.getHeight(blockpos1.getX(), blockpos1.getZ()); + + if (world.getBlockState(blockpos1.add(0, i, 0).down()) == Blocks.AIR.getDefaultState()) + { + RenderGlobal.addChainedFilledBoxVertices(bufferbuilder, (double)((float)blockpos1.getX() + 0.25F) - d0, (double)i - d1, (double)((float)blockpos1.getZ() + 0.25F) - d2, (double)((float)blockpos1.getX() + 0.75F) - d0, (double)i + 0.09375D - d1, (double)((float)blockpos1.getZ() + 0.75F) - d2, 0.0F, 0.0F, 1.0F, 0.5F); + } + else + { + RenderGlobal.addChainedFilledBoxVertices(bufferbuilder, (double)((float)blockpos1.getX() + 0.25F) - d0, (double)i - d1, (double)((float)blockpos1.getZ() + 0.25F) - d2, (double)((float)blockpos1.getX() + 0.75F) - d0, (double)i + 0.09375D - d1, (double)((float)blockpos1.getZ() + 0.75F) - d2, 0.0F, 1.0F, 0.0F, 0.5F); + } + } + + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.java new file mode 100644 index 0000000..4149e0c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererNeighborsUpdate.java @@ -0,0 +1,112 @@ +package net.minecraft.client.renderer.debug; + +import com.google.common.collect.Maps; +import com.google.common.collect.Ordering; +import com.google.common.collect.Sets; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererNeighborsUpdate implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + /** + * A map from world time stamps ({@link World#getTotalWorldTime()}) to a map from block position to number of times + * that block was updated. + */ + private final Map> lastUpdate = Maps.newTreeMap(Ordering.natural().reverse()); + + DebugRendererNeighborsUpdate(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void addUpdate(long worldTime, BlockPos pos) + { + Map map = (Map)this.lastUpdate.get(Long.valueOf(worldTime)); + + if (map == null) + { + map = Maps.newHashMap(); + this.lastUpdate.put(Long.valueOf(worldTime), map); + } + + Integer integer = map.get(pos); + + if (integer == null) + { + integer = Integer.valueOf(0); + } + + map.put(pos, Integer.valueOf(integer.intValue() + 1)); + } + + public void render(float partialTicks, long finishTimeNano) + { + long i = this.minecraft.world.getTotalWorldTime(); + EntityPlayer entityplayer = this.minecraft.player; + double d0 = entityplayer.lastTickPosX + (entityplayer.posX - entityplayer.lastTickPosX) * (double)partialTicks; + double d1 = entityplayer.lastTickPosY + (entityplayer.posY - entityplayer.lastTickPosY) * (double)partialTicks; + double d2 = entityplayer.lastTickPosZ + (entityplayer.posZ - entityplayer.lastTickPosZ) * (double)partialTicks; + World world = this.minecraft.player.world; + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.glLineWidth(2.0F); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + int j = 200; + double d3 = 0.0025D; + Set set = Sets.newHashSet(); + Map map = Maps.newHashMap(); + Iterator>> iterator = this.lastUpdate.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry> entry = (Entry)iterator.next(); + Long olong = entry.getKey(); + Map map1 = (Map)entry.getValue(); + long k = i - olong.longValue(); + + if (k > 200L) + { + iterator.remove(); + } + else + { + for (Entry entry1 : map1.entrySet()) + { + BlockPos blockpos = entry1.getKey(); + Integer integer = entry1.getValue(); + + if (set.add(blockpos)) + { + RenderGlobal.drawSelectionBoundingBox((new AxisAlignedBB(BlockPos.ORIGIN)).grow(0.002D).shrink(0.0025D * (double)k).offset((double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ()).offset(-d0, -d1, -d2), 1.0F, 1.0F, 1.0F, 1.0F); + map.put(blockpos, integer); + } + } + } + } + + for (Entry entry2 : map.entrySet()) + { + BlockPos blockpos1 = entry2.getKey(); + Integer integer1 = entry2.getValue(); + DebugRenderer.renderDebugText(String.valueOf((Object)integer1), blockpos1.getX(), blockpos1.getY(), blockpos1.getZ(), partialTicks, -1); + } + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererPathfinding.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererPathfinding.java new file mode 100644 index 0000000..8185a33 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererPathfinding.java @@ -0,0 +1,161 @@ +package net.minecraft.client.renderer.debug; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererPathfinding implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + private final Map pathMap = Maps.newHashMap(); + private final Map pathMaxDistance = Maps.newHashMap(); + private final Map creationMap = Maps.newHashMap(); + private EntityPlayer player; + private double xo; + private double yo; + private double zo; + + public DebugRendererPathfinding(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void addPath(int eid, Path pathIn, float distance) + { + this.pathMap.put(Integer.valueOf(eid), pathIn); + this.creationMap.put(Integer.valueOf(eid), Long.valueOf(System.currentTimeMillis())); + this.pathMaxDistance.put(Integer.valueOf(eid), Float.valueOf(distance)); + } + + public void render(float partialTicks, long finishTimeNano) + { + if (!this.pathMap.isEmpty()) + { + long i = System.currentTimeMillis(); + this.player = this.minecraft.player; + this.xo = this.player.lastTickPosX + (this.player.posX - this.player.lastTickPosX) * (double)partialTicks; + this.yo = this.player.lastTickPosY + (this.player.posY - this.player.lastTickPosY) * (double)partialTicks; + this.zo = this.player.lastTickPosZ + (this.player.posZ - this.player.lastTickPosZ) * (double)partialTicks; + GlStateManager.pushMatrix(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color(0.0F, 1.0F, 0.0F, 0.75F); + GlStateManager.disableTexture2D(); + GlStateManager.glLineWidth(6.0F); + + for (Integer integer : this.pathMap.keySet()) + { + Path path = this.pathMap.get(integer); + float f = ((Float)this.pathMaxDistance.get(integer)).floatValue(); + this.renderPathLine(partialTicks, path); + PathPoint pathpoint = path.getTarget(); + + if (this.addDistanceToPlayer(pathpoint) <= 40.0F) + { + RenderGlobal.renderFilledBox((new AxisAlignedBB((double)((float)pathpoint.x + 0.25F), (double)((float)pathpoint.y + 0.25F), (double)pathpoint.z + 0.25D, (double)((float)pathpoint.x + 0.75F), (double)((float)pathpoint.y + 0.75F), (double)((float)pathpoint.z + 0.75F))).offset(-this.xo, -this.yo, -this.zo), 0.0F, 1.0F, 0.0F, 0.5F); + + for (int j = 0; j < path.getCurrentPathLength(); ++j) + { + PathPoint pathpoint1 = path.getPathPointFromIndex(j); + + if (this.addDistanceToPlayer(pathpoint1) <= 40.0F) + { + float f1 = j == path.getCurrentPathIndex() ? 1.0F : 0.0F; + float f2 = j == path.getCurrentPathIndex() ? 0.0F : 1.0F; + RenderGlobal.renderFilledBox((new AxisAlignedBB((double)((float)pathpoint1.x + 0.5F - f), (double)((float)pathpoint1.y + 0.01F * (float)j), (double)((float)pathpoint1.z + 0.5F - f), (double)((float)pathpoint1.x + 0.5F + f), (double)((float)pathpoint1.y + 0.25F + 0.01F * (float)j), (double)((float)pathpoint1.z + 0.5F + f))).offset(-this.xo, -this.yo, -this.zo), f1, 0.0F, f2, 0.5F); + } + } + } + } + + for (Integer integer1 : this.pathMap.keySet()) + { + Path path1 = this.pathMap.get(integer1); + + for (PathPoint pathpoint3 : path1.getClosedSet()) + { + if (this.addDistanceToPlayer(pathpoint3) <= 40.0F) + { + DebugRenderer.renderDebugText(String.format("%s", pathpoint3.nodeType), (double)pathpoint3.x + 0.5D, (double)pathpoint3.y + 0.75D, (double)pathpoint3.z + 0.5D, partialTicks, -65536); + DebugRenderer.renderDebugText(String.format("%.2f", pathpoint3.costMalus), (double)pathpoint3.x + 0.5D, (double)pathpoint3.y + 0.25D, (double)pathpoint3.z + 0.5D, partialTicks, -65536); + } + } + + for (PathPoint pathpoint4 : path1.getOpenSet()) + { + if (this.addDistanceToPlayer(pathpoint4) <= 40.0F) + { + DebugRenderer.renderDebugText(String.format("%s", pathpoint4.nodeType), (double)pathpoint4.x + 0.5D, (double)pathpoint4.y + 0.75D, (double)pathpoint4.z + 0.5D, partialTicks, -16776961); + DebugRenderer.renderDebugText(String.format("%.2f", pathpoint4.costMalus), (double)pathpoint4.x + 0.5D, (double)pathpoint4.y + 0.25D, (double)pathpoint4.z + 0.5D, partialTicks, -16776961); + } + } + + for (int k = 0; k < path1.getCurrentPathLength(); ++k) + { + PathPoint pathpoint2 = path1.getPathPointFromIndex(k); + + if (this.addDistanceToPlayer(pathpoint2) <= 40.0F) + { + DebugRenderer.renderDebugText(String.format("%s", pathpoint2.nodeType), (double)pathpoint2.x + 0.5D, (double)pathpoint2.y + 0.75D, (double)pathpoint2.z + 0.5D, partialTicks, -1); + DebugRenderer.renderDebugText(String.format("%.2f", pathpoint2.costMalus), (double)pathpoint2.x + 0.5D, (double)pathpoint2.y + 0.25D, (double)pathpoint2.z + 0.5D, partialTicks, -1); + } + } + } + + for (Integer integer2 : (Integer[])this.creationMap.keySet().toArray(new Integer[0])) + { + if (i - ((Long)this.creationMap.get(integer2)).longValue() > 20000L) + { + this.pathMap.remove(integer2); + this.creationMap.remove(integer2); + } + } + + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + } + + public void renderPathLine(float finishTimeNano, Path pathIn) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(3, DefaultVertexFormats.POSITION_COLOR); + + for (int i = 0; i < pathIn.getCurrentPathLength(); ++i) + { + PathPoint pathpoint = pathIn.getPathPointFromIndex(i); + + if (this.addDistanceToPlayer(pathpoint) <= 40.0F) + { + float f = (float)i / (float)pathIn.getCurrentPathLength() * 0.33F; + int j = i == 0 ? 0 : MathHelper.hsvToRGB(f, 0.9F, 0.9F); + int k = j >> 16 & 255; + int l = j >> 8 & 255; + int i1 = j & 255; + bufferbuilder.pos((double)pathpoint.x - this.xo + 0.5D, (double)pathpoint.y - this.yo + 0.5D, (double)pathpoint.z - this.zo + 0.5D).color(k, l, i1, 255).endVertex(); + } + } + + tessellator.draw(); + } + + private float addDistanceToPlayer(PathPoint point) + { + return (float)(Math.abs((double)point.x - this.player.posX) + Math.abs((double)point.y - this.player.posY) + Math.abs((double)point.z - this.player.posZ)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererSolidFace.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererSolidFace.java new file mode 100644 index 0000000..f0377f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererSolidFace.java @@ -0,0 +1,140 @@ +package net.minecraft.client.renderer.debug; + +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererSolidFace implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + + public DebugRendererSolidFace(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void render(float partialTicks, long finishTimeNano) + { + EntityPlayer entityplayer = this.minecraft.player; + double d0 = entityplayer.lastTickPosX + (entityplayer.posX - entityplayer.lastTickPosX) * (double)partialTicks; + double d1 = entityplayer.lastTickPosY + (entityplayer.posY - entityplayer.lastTickPosY) * (double)partialTicks; + double d2 = entityplayer.lastTickPosZ + (entityplayer.posZ - entityplayer.lastTickPosZ) * (double)partialTicks; + World world = this.minecraft.player.world; + Iterable iterable = BlockPos.getAllInBox(MathHelper.floor(entityplayer.posX - 6.0D), MathHelper.floor(entityplayer.posY - 6.0D), MathHelper.floor(entityplayer.posZ - 6.0D), MathHelper.floor(entityplayer.posX + 6.0D), MathHelper.floor(entityplayer.posY + 6.0D), MathHelper.floor(entityplayer.posZ + 6.0D)); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.glLineWidth(2.0F); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + + for (BlockPos blockpos : iterable) + { + IBlockState iblockstate = world.getBlockState(blockpos); + + if (iblockstate.getBlock() != Blocks.AIR) + { + AxisAlignedBB axisalignedbb = iblockstate.getSelectedBoundingBox(world, blockpos).grow(0.002D).offset(-d0, -d1, -d2); + double d3 = axisalignedbb.minX; + double d4 = axisalignedbb.minY; + double d5 = axisalignedbb.minZ; + double d6 = axisalignedbb.maxX; + double d7 = axisalignedbb.maxY; + double d8 = axisalignedbb.maxZ; + float f = 1.0F; + float f1 = 0.0F; + float f2 = 0.0F; + float f3 = 0.5F; + + if (iblockstate.getBlockFaceShape(world, blockpos, EnumFacing.WEST) == BlockFaceShape.SOLID) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(d3, d4, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder.pos(d3, d4, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder.pos(d3, d7, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder.pos(d3, d7, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + tessellator.draw(); + } + + if (iblockstate.getBlockFaceShape(world, blockpos, EnumFacing.SOUTH) == BlockFaceShape.SOLID) + { + Tessellator tessellator1 = Tessellator.getInstance(); + BufferBuilder bufferbuilder1 = tessellator1.getBuffer(); + bufferbuilder1.begin(5, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder1.pos(d3, d7, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder1.pos(d3, d4, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder1.pos(d6, d7, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder1.pos(d6, d4, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + tessellator1.draw(); + } + + if (iblockstate.getBlockFaceShape(world, blockpos, EnumFacing.EAST) == BlockFaceShape.SOLID) + { + Tessellator tessellator2 = Tessellator.getInstance(); + BufferBuilder bufferbuilder2 = tessellator2.getBuffer(); + bufferbuilder2.begin(5, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder2.pos(d6, d4, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder2.pos(d6, d4, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder2.pos(d6, d7, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder2.pos(d6, d7, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + tessellator2.draw(); + } + + if (iblockstate.getBlockFaceShape(world, blockpos, EnumFacing.NORTH) == BlockFaceShape.SOLID) + { + Tessellator tessellator3 = Tessellator.getInstance(); + BufferBuilder bufferbuilder3 = tessellator3.getBuffer(); + bufferbuilder3.begin(5, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder3.pos(d6, d7, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder3.pos(d6, d4, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder3.pos(d3, d7, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder3.pos(d3, d4, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + tessellator3.draw(); + } + + if (iblockstate.getBlockFaceShape(world, blockpos, EnumFacing.DOWN) == BlockFaceShape.SOLID) + { + Tessellator tessellator4 = Tessellator.getInstance(); + BufferBuilder bufferbuilder4 = tessellator4.getBuffer(); + bufferbuilder4.begin(5, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder4.pos(d3, d4, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder4.pos(d6, d4, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder4.pos(d3, d4, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder4.pos(d6, d4, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + tessellator4.draw(); + } + + if (iblockstate.getBlockFaceShape(world, blockpos, EnumFacing.UP) == BlockFaceShape.SOLID) + { + Tessellator tessellator5 = Tessellator.getInstance(); + BufferBuilder bufferbuilder5 = tessellator5.getBuffer(); + bufferbuilder5.begin(5, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder5.pos(d3, d7, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder5.pos(d3, d7, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder5.pos(d6, d7, d5).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + bufferbuilder5.pos(d6, d7, d8).color(1.0F, 0.0F, 0.0F, 0.5F).endVertex(); + tessellator5.draw(); + } + } + } + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererWater.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererWater.java new file mode 100644 index 0000000..1106351 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/DebugRendererWater.java @@ -0,0 +1,71 @@ +package net.minecraft.client.renderer.debug; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DebugRendererWater implements DebugRenderer.IDebugRenderer +{ + private final Minecraft minecraft; + private EntityPlayer player; + private double xo; + private double yo; + private double zo; + + public DebugRendererWater(Minecraft minecraftIn) + { + this.minecraft = minecraftIn; + } + + public void render(float partialTicks, long finishTimeNano) + { + this.player = this.minecraft.player; + this.xo = this.player.lastTickPosX + (this.player.posX - this.player.lastTickPosX) * (double)partialTicks; + this.yo = this.player.lastTickPosY + (this.player.posY - this.player.lastTickPosY) * (double)partialTicks; + this.zo = this.player.lastTickPosZ + (this.player.posZ - this.player.lastTickPosZ) * (double)partialTicks; + BlockPos blockpos = this.minecraft.player.getPosition(); + World world = this.minecraft.player.world; + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.color(0.0F, 1.0F, 0.0F, 0.75F); + GlStateManager.disableTexture2D(); + GlStateManager.glLineWidth(6.0F); + + for (BlockPos blockpos1 : BlockPos.getAllInBox(blockpos.add(-10, -10, -10), blockpos.add(10, 10, 10))) + { + IBlockState iblockstate = world.getBlockState(blockpos1); + + if (iblockstate.getBlock() == Blocks.WATER || iblockstate.getBlock() == Blocks.FLOWING_WATER) + { + double d0 = (double)BlockLiquid.getLiquidHeight(iblockstate, world, blockpos1); + RenderGlobal.renderFilledBox((new AxisAlignedBB((double)((float)blockpos1.getX() + 0.01F), (double)((float)blockpos1.getY() + 0.01F), (double)((float)blockpos1.getZ() + 0.01F), (double)((float)blockpos1.getX() + 0.99F), d0, (double)((float)blockpos1.getZ() + 0.99F))).offset(-this.xo, -this.yo, -this.zo), 1.0F, 1.0F, 1.0F, 0.2F); + } + } + + for (BlockPos blockpos2 : BlockPos.getAllInBox(blockpos.add(-10, -10, -10), blockpos.add(10, 10, 10))) + { + IBlockState iblockstate1 = world.getBlockState(blockpos2); + + if (iblockstate1.getBlock() == Blocks.WATER || iblockstate1.getBlock() == Blocks.FLOWING_WATER) + { + Integer integer = (Integer)iblockstate1.getValue(BlockLiquid.LEVEL); + double d1 = integer.intValue() > 7 ? 0.9D : 1.0D - 0.11D * (double)integer.intValue(); + String s = iblockstate1.getBlock() == Blocks.FLOWING_WATER ? "f" : "s"; + DebugRenderer.renderDebugText(s + " " + integer, (double)blockpos2.getX() + 0.5D, (double)blockpos2.getY() + d1, (double)blockpos2.getZ() + 0.5D, partialTicks, -16777216); + } + } + + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/package-info.java new file mode 100644 index 0000000..7ec18d2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/debug/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.debug; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/Render.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/Render.java new file mode 100644 index 0000000..c252ae9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/Render.java @@ -0,0 +1,392 @@ +package net.minecraft.client.renderer.entity; + +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class Render +{ + private static final ResourceLocation SHADOW_TEXTURES = new ResourceLocation("textures/misc/shadow.png"); + protected final RenderManager renderManager; + protected float shadowSize; + /** Determines the darkness of the object's shadow. Higher value makes a darker shadow. */ + protected float shadowOpaque = 1.0F; + protected boolean renderOutlines; + + protected Render(RenderManager renderManager) + { + this.renderManager = renderManager; + } + + public void setRenderOutlines(boolean renderOutlinesIn) + { + this.renderOutlines = renderOutlinesIn; + } + + public boolean shouldRender(T livingEntity, ICamera camera, double camX, double camY, double camZ) + { + AxisAlignedBB axisalignedbb = livingEntity.getRenderBoundingBox().grow(0.5D); + + if (axisalignedbb.hasNaN() || axisalignedbb.getAverageEdgeLength() == 0.0D) + { + axisalignedbb = new AxisAlignedBB(livingEntity.posX - 2.0D, livingEntity.posY - 2.0D, livingEntity.posZ - 2.0D, livingEntity.posX + 2.0D, livingEntity.posY + 2.0D, livingEntity.posZ + 2.0D); + } + + return livingEntity.isInRangeToRender3d(camX, camY, camZ) && (livingEntity.ignoreFrustumCheck || camera.isBoundingBoxInFrustum(axisalignedbb)); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (!this.renderOutlines) + { + this.renderName(entity, x, y, z); + } + } + + protected int getTeamColor(T entityIn) + { + int i = 16777215; + ScorePlayerTeam scoreplayerteam = (ScorePlayerTeam)entityIn.getTeam(); + + if (scoreplayerteam != null) + { + String s = FontRenderer.getFormatFromString(scoreplayerteam.getPrefix()); + + if (s.length() >= 2) + { + i = this.getFontRendererFromRenderManager().getColorCode(s.charAt(1)); + } + } + + return i; + } + + protected void renderName(T entity, double x, double y, double z) + { + if (this.canRenderName(entity)) + { + this.renderLivingLabel(entity, entity.getDisplayName().getFormattedText(), x, y, z, 64); + } + } + + protected boolean canRenderName(T entity) + { + return entity.getAlwaysRenderNameTagForRender() && entity.hasCustomName(); + } + + protected void renderEntityName(T entityIn, double x, double y, double z, String name, double distanceSq) + { + this.renderLivingLabel(entityIn, name, x, y, z, 64); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + @Nullable + protected abstract ResourceLocation getEntityTexture(T entity); + + protected boolean bindEntityTexture(T entity) + { + ResourceLocation resourcelocation = this.getEntityTexture(entity); + + if (resourcelocation == null) + { + return false; + } + else + { + this.bindTexture(resourcelocation); + return true; + } + } + + public void bindTexture(ResourceLocation location) + { + this.renderManager.renderEngine.bindTexture(location); + } + + /** + * Renders a layer of fire on top of an entity. + */ + private void renderEntityOnFire(Entity entity, double x, double y, double z, float partialTicks) + { + GlStateManager.disableLighting(); + TextureMap texturemap = Minecraft.getMinecraft().getTextureMapBlocks(); + TextureAtlasSprite textureatlassprite = texturemap.getAtlasSprite("minecraft:blocks/fire_layer_0"); + TextureAtlasSprite textureatlassprite1 = texturemap.getAtlasSprite("minecraft:blocks/fire_layer_1"); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y, (float)z); + float f = entity.width * 1.4F; + GlStateManager.scale(f, f, f); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f1 = 0.5F; + float f2 = 0.0F; + float f3 = entity.height / f; + float f4 = (float)(entity.posY - entity.getEntityBoundingBox().minY); + GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, -0.3F + (float)((int)f3) * 0.02F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f5 = 0.0F; + int i = 0; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + + while (f3 > 0.0F) + { + TextureAtlasSprite textureatlassprite2 = i % 2 == 0 ? textureatlassprite : textureatlassprite1; + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + float f6 = textureatlassprite2.getMinU(); + float f7 = textureatlassprite2.getMinV(); + float f8 = textureatlassprite2.getMaxU(); + float f9 = textureatlassprite2.getMaxV(); + + if (i / 2 % 2 == 0) + { + float f10 = f8; + f8 = f6; + f6 = f10; + } + + bufferbuilder.pos((double)(f1 - 0.0F), (double)(0.0F - f4), (double)f5).tex((double)f8, (double)f9).endVertex(); + bufferbuilder.pos((double)(-f1 - 0.0F), (double)(0.0F - f4), (double)f5).tex((double)f6, (double)f9).endVertex(); + bufferbuilder.pos((double)(-f1 - 0.0F), (double)(1.4F - f4), (double)f5).tex((double)f6, (double)f7).endVertex(); + bufferbuilder.pos((double)(f1 - 0.0F), (double)(1.4F - f4), (double)f5).tex((double)f8, (double)f7).endVertex(); + f3 -= 0.45F; + f4 -= 0.45F; + f1 *= 0.9F; + f5 += 0.03F; + ++i; + } + + tessellator.draw(); + GlStateManager.popMatrix(); + GlStateManager.enableLighting(); + } + + /** + * Renders the entities shadow. + */ + private void renderShadow(Entity entityIn, double x, double y, double z, float shadowAlpha, float partialTicks) + { + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + this.renderManager.renderEngine.bindTexture(SHADOW_TEXTURES); + World world = this.getWorldFromRenderManager(); + GlStateManager.depthMask(false); + float f = this.shadowSize; + + if (entityIn instanceof EntityLiving) + { + EntityLiving entityliving = (EntityLiving)entityIn; + f *= entityliving.getRenderSizeModifier(); + + if (entityliving.isChild()) + { + f *= 0.5F; + } + } + + double d5 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; + double d0 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; + double d1 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; + int i = MathHelper.floor(d5 - (double)f); + int j = MathHelper.floor(d5 + (double)f); + int k = MathHelper.floor(d0 - (double)f); + int l = MathHelper.floor(d0); + int i1 = MathHelper.floor(d1 - (double)f); + int j1 = MathHelper.floor(d1 + (double)f); + double d2 = x - d5; + double d3 = y - d0; + double d4 = z - d1; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + + for (BlockPos blockpos : BlockPos.getAllInBoxMutable(new BlockPos(i, k, i1), new BlockPos(j, l, j1))) + { + IBlockState iblockstate = world.getBlockState(blockpos.down()); + + if (iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE && world.getLightFromNeighbors(blockpos) > 3) + { + this.renderShadowSingle(iblockstate, x, y, z, blockpos, shadowAlpha, f, d2, d3, d4); + } + } + + tessellator.draw(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.depthMask(true); + } + + /** + * Returns the render manager's world object + */ + private World getWorldFromRenderManager() + { + return this.renderManager.world; + } + + private void renderShadowSingle(IBlockState state, double p_188299_2_, double p_188299_4_, double p_188299_6_, BlockPos p_188299_8_, float p_188299_9_, float p_188299_10_, double p_188299_11_, double p_188299_13_, double p_188299_15_) + { + if (state.isFullCube()) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + double d0 = ((double)p_188299_9_ - (p_188299_4_ - ((double)p_188299_8_.getY() + p_188299_13_)) / 2.0D) * 0.5D * (double)this.getWorldFromRenderManager().getLightBrightness(p_188299_8_); + + if (d0 >= 0.0D) + { + if (d0 > 1.0D) + { + d0 = 1.0D; + } + + AxisAlignedBB axisalignedbb = state.getBoundingBox(this.getWorldFromRenderManager(), p_188299_8_); + double d1 = (double)p_188299_8_.getX() + axisalignedbb.minX + p_188299_11_; + double d2 = (double)p_188299_8_.getX() + axisalignedbb.maxX + p_188299_11_; + double d3 = (double)p_188299_8_.getY() + axisalignedbb.minY + p_188299_13_ + 0.015625D; + double d4 = (double)p_188299_8_.getZ() + axisalignedbb.minZ + p_188299_15_; + double d5 = (double)p_188299_8_.getZ() + axisalignedbb.maxZ + p_188299_15_; + float f = (float)((p_188299_2_ - d1) / 2.0D / (double)p_188299_10_ + 0.5D); + float f1 = (float)((p_188299_2_ - d2) / 2.0D / (double)p_188299_10_ + 0.5D); + float f2 = (float)((p_188299_6_ - d4) / 2.0D / (double)p_188299_10_ + 0.5D); + float f3 = (float)((p_188299_6_ - d5) / 2.0D / (double)p_188299_10_ + 0.5D); + bufferbuilder.pos(d1, d3, d4).tex((double)f, (double)f2).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); + bufferbuilder.pos(d1, d3, d5).tex((double)f, (double)f3).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); + bufferbuilder.pos(d2, d3, d5).tex((double)f1, (double)f3).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); + bufferbuilder.pos(d2, d3, d4).tex((double)f1, (double)f2).color(1.0F, 1.0F, 1.0F, (float)d0).endVertex(); + } + } + } + + /** + * Renders a white box with the bounds of the AABB trasnlated by an offset. + */ + public static void renderOffsetAABB(AxisAlignedBB boundingBox, double x, double y, double z) + { + GlStateManager.disableTexture2D(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + bufferbuilder.setTranslation(x, y, z); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_NORMAL); + bufferbuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).normal(1.0F, 0.0F, 0.0F).endVertex(); + tessellator.draw(); + bufferbuilder.setTranslation(0.0D, 0.0D, 0.0D); + GlStateManager.enableTexture2D(); + } + + /** + * Renders the entity's shadow and fire (if its on fire). Args: entity, x, y, z, yaw, partialTickTime + */ + public void doRenderShadowAndFire(Entity entityIn, double x, double y, double z, float yaw, float partialTicks) + { + if (this.renderManager.options != null) + { + if (this.renderManager.options.entityShadows && this.shadowSize > 0.0F && !entityIn.isInvisible() && this.renderManager.isRenderShadow()) + { + double d0 = this.renderManager.getDistanceToCamera(entityIn.posX, entityIn.posY, entityIn.posZ); + float f = (float)((1.0D - d0 / 256.0D) * (double)this.shadowOpaque); + + if (f > 0.0F) + { + this.renderShadow(entityIn, x, y, z, f, partialTicks); + } + } + + if (entityIn.canRenderOnFire() && (!(entityIn instanceof EntityPlayer) || !((EntityPlayer)entityIn).isSpectator())) + { + this.renderEntityOnFire(entityIn, x, y, z, partialTicks); + } + } + } + + /** + * Returns the font renderer from the set render manager + */ + public FontRenderer getFontRendererFromRenderManager() + { + return this.renderManager.getFontRenderer(); + } + + /** + * Renders an entity's name above its head + */ + protected void renderLivingLabel(T entityIn, String str, double x, double y, double z, int maxDistance) + { + double d0 = entityIn.getDistanceSq(this.renderManager.renderViewEntity); + + if (d0 <= (double)(maxDistance * maxDistance)) + { + boolean flag = entityIn.isSneaking(); + float f = this.renderManager.playerViewY; + float f1 = this.renderManager.playerViewX; + boolean flag1 = this.renderManager.options.thirdPersonView == 2; + float f2 = entityIn.height + 0.5F - (flag ? 0.25F : 0.0F); + int i = "deadmau5".equals(str) ? -10 : 0; + EntityRenderer.drawNameplate(this.getFontRendererFromRenderManager(), str, (float)x, (float)y + f2, (float)z, i, f, f1, flag1, flag); + } + } + + public RenderManager getRenderManager() + { + return this.renderManager; + } + + public boolean isMultipass() + { + return false; + } + + public void renderMultipass(T p_188300_1_, double p_188300_2_, double p_188300_4_, double p_188300_6_, float p_188300_8_, float p_188300_9_) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderAbstractHorse.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderAbstractHorse.java new file mode 100644 index 0000000..a0424ae --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderAbstractHorse.java @@ -0,0 +1,57 @@ +package net.minecraft.client.renderer.entity; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.client.model.ModelHorse; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.passive.EntityDonkey; +import net.minecraft.entity.passive.EntityMule; +import net.minecraft.entity.passive.EntitySkeletonHorse; +import net.minecraft.entity.passive.EntityZombieHorse; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderAbstractHorse extends RenderLiving +{ + private static final Map < Class, ResourceLocation > MAP = Maps. < Class, ResourceLocation > newHashMap(); + private final float scale; + + public RenderAbstractHorse(RenderManager p_i47212_1_) + { + this(p_i47212_1_, 1.0F); + } + + public RenderAbstractHorse(RenderManager p_i47213_1_, float p_i47213_2_) + { + super(p_i47213_1_, new ModelHorse(), 0.75F); + this.scale = p_i47213_2_; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(AbstractHorse entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(this.scale, this.scale, this.scale); + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(AbstractHorse entity) + { + return MAP.get(entity.getClass()); + } + + static + { + MAP.put(EntityDonkey.class, new ResourceLocation("textures/entity/horse/donkey.png")); + MAP.put(EntityMule.class, new ResourceLocation("textures/entity/horse/mule.png")); + MAP.put(EntityZombieHorse.class, new ResourceLocation("textures/entity/horse/horse_zombie.png")); + MAP.put(EntitySkeletonHorse.class, new ResourceLocation("textures/entity/horse/horse_skeleton.png")); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderAreaEffectCloud.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderAreaEffectCloud.java new file mode 100644 index 0000000..2830924 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderAreaEffectCloud.java @@ -0,0 +1,25 @@ +package net.minecraft.client.renderer.entity; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderAreaEffectCloud extends Render +{ + public RenderAreaEffectCloud(RenderManager manager) + { + super(manager); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + @Nullable + protected ResourceLocation getEntityTexture(EntityAreaEffectCloud entity) + { + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderArmorStand.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderArmorStand.java new file mode 100644 index 0000000..ed4873a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderArmorStand.java @@ -0,0 +1,85 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelArmorStand; +import net.minecraft.client.model.ModelArmorStandArmor; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.client.renderer.entity.layers.LayerElytra; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderArmorStand extends RenderLivingBase +{ + /** A constant instance of the armor stand texture, wrapped inside a ResourceLocation wrapper. */ + public static final ResourceLocation TEXTURE_ARMOR_STAND = new ResourceLocation("textures/entity/armorstand/wood.png"); + + public RenderArmorStand(RenderManager manager) + { + super(manager, new ModelArmorStand(), 0.0F); + LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) + { + protected void initArmor() + { + this.modelLeggings = new ModelArmorStandArmor(0.5F); + this.modelArmor = new ModelArmorStandArmor(1.0F); + } + }; + this.addLayer(layerbipedarmor); + this.addLayer(new LayerHeldItem(this)); + this.addLayer(new LayerElytra(this)); + this.addLayer(new LayerCustomHead(this.getMainModel().bipedHead)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityArmorStand entity) + { + return TEXTURE_ARMOR_STAND; + } + + public ModelArmorStand getMainModel() + { + return (ModelArmorStand)super.getMainModel(); + } + + protected void applyRotations(EntityArmorStand entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + GlStateManager.rotate(180.0F - rotationYaw, 0.0F, 1.0F, 0.0F); + float f = (float)(entityLiving.world.getTotalWorldTime() - entityLiving.punchCooldown) + partialTicks; + + if (f < 5.0F) + { + GlStateManager.rotate(MathHelper.sin(f / 1.5F * (float)Math.PI) * 3.0F, 0.0F, 1.0F, 0.0F); + } + } + + protected boolean canRenderName(EntityArmorStand entity) + { + return entity.getAlwaysRenderNameTag(); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityArmorStand entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (entity.hasMarker()) + { + this.renderMarker = true; + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + + if (entity.hasMarker()) + { + this.renderMarker = false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderArrow.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderArrow.java new file mode 100644 index 0000000..f37f9da --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderArrow.java @@ -0,0 +1,101 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class RenderArrow extends Render +{ + public RenderArrow(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks) + { + this.bindEntityTexture(entity); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.pushMatrix(); + GlStateManager.disableLighting(); + GlStateManager.translate((float)x, (float)y, (float)z); + GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + int i = 0; + float f = 0.0F; + float f1 = 0.5F; + float f2 = 0.0F; + float f3 = 0.15625F; + float f4 = 0.0F; + float f5 = 0.15625F; + float f6 = 0.15625F; + float f7 = 0.3125F; + float f8 = 0.05625F; + GlStateManager.enableRescaleNormal(); + float f9 = (float)entity.arrowShake - partialTicks; + + if (f9 > 0.0F) + { + float f10 = -MathHelper.sin(f9 * 3.0F) * f9; + GlStateManager.rotate(f10, 0.0F, 0.0F, 1.0F); + } + + GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.scale(0.05625F, 0.05625F, 0.05625F); + GlStateManager.translate(-4.0F, 0.0F, 0.0F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + GlStateManager.glNormal3f(0.05625F, 0.0F, 0.0F); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-7.0D, -2.0D, -2.0D).tex(0.0D, 0.15625D).endVertex(); + bufferbuilder.pos(-7.0D, -2.0D, 2.0D).tex(0.15625D, 0.15625D).endVertex(); + bufferbuilder.pos(-7.0D, 2.0D, 2.0D).tex(0.15625D, 0.3125D).endVertex(); + bufferbuilder.pos(-7.0D, 2.0D, -2.0D).tex(0.0D, 0.3125D).endVertex(); + tessellator.draw(); + GlStateManager.glNormal3f(-0.05625F, 0.0F, 0.0F); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-7.0D, 2.0D, -2.0D).tex(0.0D, 0.15625D).endVertex(); + bufferbuilder.pos(-7.0D, 2.0D, 2.0D).tex(0.15625D, 0.15625D).endVertex(); + bufferbuilder.pos(-7.0D, -2.0D, 2.0D).tex(0.15625D, 0.3125D).endVertex(); + bufferbuilder.pos(-7.0D, -2.0D, -2.0D).tex(0.0D, 0.3125D).endVertex(); + tessellator.draw(); + + for (int j = 0; j < 4; ++j) + { + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.glNormal3f(0.0F, 0.0F, 0.05625F); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX); + bufferbuilder.pos(-8.0D, -2.0D, 0.0D).tex(0.0D, 0.0D).endVertex(); + bufferbuilder.pos(8.0D, -2.0D, 0.0D).tex(0.5D, 0.0D).endVertex(); + bufferbuilder.pos(8.0D, 2.0D, 0.0D).tex(0.5D, 0.15625D).endVertex(); + bufferbuilder.pos(-8.0D, 2.0D, 0.0D).tex(0.0D, 0.15625D).endVertex(); + tessellator.draw(); + } + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.enableLighting(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBat.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBat.java new file mode 100644 index 0000000..f252e5a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBat.java @@ -0,0 +1,50 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelBat; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderBat extends RenderLiving +{ + private static final ResourceLocation BAT_TEXTURES = new ResourceLocation("textures/entity/bat.png"); + + public RenderBat(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelBat(), 0.25F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityBat entity) + { + return BAT_TEXTURES; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityBat entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(0.35F, 0.35F, 0.35F); + } + + protected void applyRotations(EntityBat entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + if (entityLiving.getIsBatHanging()) + { + GlStateManager.translate(0.0F, -0.1F, 0.0F); + } + else + { + GlStateManager.translate(0.0F, MathHelper.cos(p_77043_2_ * 0.3F) * 0.1F, 0.0F); + } + + super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBiped.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBiped.java new file mode 100644 index 0000000..629dbda --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBiped.java @@ -0,0 +1,38 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.client.renderer.entity.layers.LayerElytra; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderBiped extends RenderLiving +{ + private static final ResourceLocation DEFAULT_RES_LOC = new ResourceLocation("textures/entity/steve.png"); + + public RenderBiped(RenderManager renderManagerIn, ModelBiped modelBipedIn, float shadowSize) + { + super(renderManagerIn, modelBipedIn, shadowSize); + this.addLayer(new LayerCustomHead(modelBipedIn.bipedHead)); + this.addLayer(new LayerElytra(this)); + this.addLayer(new LayerHeldItem(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(T entity) + { + return DEFAULT_RES_LOC; + } + + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBlaze.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBlaze.java new file mode 100644 index 0000000..0e2c6dc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBlaze.java @@ -0,0 +1,26 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelBlaze; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderBlaze extends RenderLiving +{ + private static final ResourceLocation BLAZE_TEXTURES = new ResourceLocation("textures/entity/blaze.png"); + + public RenderBlaze(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelBlaze(), 0.5F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityBlaze entity) + { + return BLAZE_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBoat.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBoat.java new file mode 100644 index 0000000..a750990 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderBoat.java @@ -0,0 +1,100 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.IMultipassModel; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBoat; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderBoat extends Render +{ + private static final ResourceLocation[] BOAT_TEXTURES = new ResourceLocation[] {new ResourceLocation("textures/entity/boat/boat_oak.png"), new ResourceLocation("textures/entity/boat/boat_spruce.png"), new ResourceLocation("textures/entity/boat/boat_birch.png"), new ResourceLocation("textures/entity/boat/boat_jungle.png"), new ResourceLocation("textures/entity/boat/boat_acacia.png"), new ResourceLocation("textures/entity/boat/boat_darkoak.png")}; + /** instance of ModelBoat for rendering */ + protected ModelBase modelBoat = new ModelBoat(); + + public RenderBoat(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.5F; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityBoat entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + this.setupTranslation(x, y, z); + this.setupRotation(entity, entityYaw, partialTicks); + this.bindEntityTexture(entity); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + this.modelBoat.render(entity, partialTicks, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + public void setupRotation(EntityBoat p_188311_1_, float p_188311_2_, float p_188311_3_) + { + GlStateManager.rotate(180.0F - p_188311_2_, 0.0F, 1.0F, 0.0F); + float f = (float)p_188311_1_.getTimeSinceHit() - p_188311_3_; + float f1 = p_188311_1_.getDamageTaken() - p_188311_3_; + + if (f1 < 0.0F) + { + f1 = 0.0F; + } + + if (f > 0.0F) + { + GlStateManager.rotate(MathHelper.sin(f) * f * f1 / 10.0F * (float)p_188311_1_.getForwardDirection(), 1.0F, 0.0F, 0.0F); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + } + + public void setupTranslation(double p_188309_1_, double p_188309_3_, double p_188309_5_) + { + GlStateManager.translate((float)p_188309_1_, (float)p_188309_3_ + 0.375F, (float)p_188309_5_); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityBoat entity) + { + return BOAT_TEXTURES[entity.getBoatType().ordinal()]; + } + + public boolean isMultipass() + { + return true; + } + + public void renderMultipass(EntityBoat p_188300_1_, double p_188300_2_, double p_188300_4_, double p_188300_6_, float p_188300_8_, float p_188300_9_) + { + GlStateManager.pushMatrix(); + this.setupTranslation(p_188300_2_, p_188300_4_, p_188300_6_); + this.setupRotation(p_188300_1_, p_188300_8_, p_188300_9_); + this.bindEntityTexture(p_188300_1_); + ((IMultipassModel)this.modelBoat).renderMultipass(p_188300_1_, p_188300_9_, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCaveSpider.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCaveSpider.java new file mode 100644 index 0000000..3397583 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCaveSpider.java @@ -0,0 +1,35 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderCaveSpider extends RenderSpider +{ + private static final ResourceLocation CAVE_SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/cave_spider.png"); + + public RenderCaveSpider(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize *= 0.7F; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityCaveSpider entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(0.7F, 0.7F, 0.7F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityCaveSpider entity) + { + return CAVE_SPIDER_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderChicken.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderChicken.java new file mode 100644 index 0000000..1319a95 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderChicken.java @@ -0,0 +1,37 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelChicken; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderChicken extends RenderLiving +{ + private static final ResourceLocation CHICKEN_TEXTURES = new ResourceLocation("textures/entity/chicken.png"); + + public RenderChicken(RenderManager p_i47211_1_) + { + super(p_i47211_1_, new ModelChicken(), 0.3F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityChicken entity) + { + return CHICKEN_TEXTURES; + } + + /** + * Defines what float the third param in setRotationAngles of ModelBase is + */ + protected float handleRotationFloat(EntityChicken livingBase, float partialTicks) + { + float f = livingBase.oFlap + (livingBase.wingRotation - livingBase.oFlap) * partialTicks; + float f1 = livingBase.oFlapSpeed + (livingBase.destPos - livingBase.oFlapSpeed) * partialTicks; + return (MathHelper.sin(f) + 1.0F) * f1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCow.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCow.java new file mode 100644 index 0000000..7a7a776 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCow.java @@ -0,0 +1,26 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelCow; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderCow extends RenderLiving +{ + private static final ResourceLocation COW_TEXTURES = new ResourceLocation("textures/entity/cow/cow.png"); + + public RenderCow(RenderManager p_i47210_1_) + { + super(p_i47210_1_, new ModelCow(), 0.7F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityCow entity) + { + return COW_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCreeper.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCreeper.java new file mode 100644 index 0000000..d3548ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderCreeper.java @@ -0,0 +1,64 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelCreeper; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerCreeperCharge; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderCreeper extends RenderLiving +{ + private static final ResourceLocation CREEPER_TEXTURES = new ResourceLocation("textures/entity/creeper/creeper.png"); + + public RenderCreeper(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelCreeper(), 0.5F); + this.addLayer(new LayerCreeperCharge(this)); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityCreeper entitylivingbaseIn, float partialTickTime) + { + float f = entitylivingbaseIn.getCreeperFlashIntensity(partialTickTime); + float f1 = 1.0F + MathHelper.sin(f * 100.0F) * f * 0.01F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + f = f * f; + f = f * f; + float f2 = (1.0F + f * 0.4F) * f1; + float f3 = (1.0F + f * 0.1F) / f1; + GlStateManager.scale(f2, f3, f2); + } + + /** + * Gets an RGBA int color multiplier to apply. + */ + protected int getColorMultiplier(EntityCreeper entitylivingbaseIn, float lightBrightness, float partialTickTime) + { + float f = entitylivingbaseIn.getCreeperFlashIntensity(partialTickTime); + + if ((int)(f * 10.0F) % 2 == 0) + { + return 0; + } + else + { + int i = (int)(f * 0.2F * 255.0F); + i = MathHelper.clamp(i, 0, 255); + return i << 24 | 822083583; + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityCreeper entity) + { + return CREEPER_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderDragon.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderDragon.java new file mode 100644 index 0000000..b8c2885 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderDragon.java @@ -0,0 +1,147 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelDragon; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.layers.LayerEnderDragonDeath; +import net.minecraft.client.renderer.entity.layers.LayerEnderDragonEyes; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderDragon extends RenderLiving +{ + public static final ResourceLocation ENDERCRYSTAL_BEAM_TEXTURES = new ResourceLocation("textures/entity/endercrystal/endercrystal_beam.png"); + private static final ResourceLocation DRAGON_EXPLODING_TEXTURES = new ResourceLocation("textures/entity/enderdragon/dragon_exploding.png"); + private static final ResourceLocation DRAGON_TEXTURES = new ResourceLocation("textures/entity/enderdragon/dragon.png"); + + public RenderDragon(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelDragon(0.0F), 0.5F); + this.addLayer(new LayerEnderDragonEyes(this)); + this.addLayer(new LayerEnderDragonDeath()); + } + + protected void applyRotations(EntityDragon entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + float f = (float)entityLiving.getMovementOffsets(7, partialTicks)[0]; + float f1 = (float)(entityLiving.getMovementOffsets(5, partialTicks)[1] - entityLiving.getMovementOffsets(10, partialTicks)[1]); + GlStateManager.rotate(-f, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f1 * 10.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, 0.0F, 1.0F); + + if (entityLiving.deathTime > 0) + { + float f2 = ((float)entityLiving.deathTime + partialTicks - 1.0F) / 20.0F * 1.6F; + f2 = MathHelper.sqrt(f2); + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + GlStateManager.rotate(f2 * this.getDeathMaxRotation(entityLiving), 0.0F, 0.0F, 1.0F); + } + } + + /** + * Renders the model in RenderLiving + */ + protected void renderModel(EntityDragon entitylivingbaseIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor) + { + if (entitylivingbaseIn.deathTicks > 0) + { + float f = (float)entitylivingbaseIn.deathTicks / 200.0F; + GlStateManager.depthFunc(515); + GlStateManager.enableAlpha(); + GlStateManager.alphaFunc(516, f); + this.bindTexture(DRAGON_EXPLODING_TEXTURES); + this.mainModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.depthFunc(514); + } + + this.bindEntityTexture(entitylivingbaseIn); + this.mainModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor); + + if (entitylivingbaseIn.hurtTime > 0) + { + GlStateManager.depthFunc(514); + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.color(1.0F, 0.0F, 0.0F, 0.5F); + this.mainModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + GlStateManager.depthFunc(515); + } + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityDragon entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + + if (entity.healingEnderCrystal != null) + { + this.bindTexture(ENDERCRYSTAL_BEAM_TEXTURES); + float f = MathHelper.sin(((float)entity.healingEnderCrystal.ticksExisted + partialTicks) * 0.2F) / 2.0F + 0.5F; + f = (f * f + f) * 0.2F; + renderCrystalBeams(x, y, z, partialTicks, entity.posX + (entity.prevPosX - entity.posX) * (double)(1.0F - partialTicks), entity.posY + (entity.prevPosY - entity.posY) * (double)(1.0F - partialTicks), entity.posZ + (entity.prevPosZ - entity.posZ) * (double)(1.0F - partialTicks), entity.ticksExisted, entity.healingEnderCrystal.posX, (double)f + entity.healingEnderCrystal.posY, entity.healingEnderCrystal.posZ); + } + } + + public static void renderCrystalBeams(double p_188325_0_, double p_188325_2_, double p_188325_4_, float p_188325_6_, double p_188325_7_, double p_188325_9_, double p_188325_11_, int p_188325_13_, double p_188325_14_, double p_188325_16_, double p_188325_18_) + { + float f = (float)(p_188325_14_ - p_188325_7_); + float f1 = (float)(p_188325_16_ - 1.0D - p_188325_9_); + float f2 = (float)(p_188325_18_ - p_188325_11_); + float f3 = MathHelper.sqrt(f * f + f2 * f2); + float f4 = MathHelper.sqrt(f * f + f1 * f1 + f2 * f2); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)p_188325_0_, (float)p_188325_2_ + 2.0F, (float)p_188325_4_); + GlStateManager.rotate((float)(-Math.atan2((double)f2, (double)f)) * (180F / (float)Math.PI) - 90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(-Math.atan2((double)f3, (double)f1)) * (180F / (float)Math.PI) - 90.0F, 1.0F, 0.0F, 0.0F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableCull(); + GlStateManager.shadeModel(7425); + float f5 = 0.0F - ((float)p_188325_13_ + p_188325_6_) * 0.01F; + float f6 = MathHelper.sqrt(f * f + f1 * f1 + f2 * f2) / 32.0F - ((float)p_188325_13_ + p_188325_6_) * 0.01F; + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_TEX_COLOR); + int i = 8; + + for (int j = 0; j <= 8; ++j) + { + float f7 = MathHelper.sin((float)(j % 8) * ((float)Math.PI * 2F) / 8.0F) * 0.75F; + float f8 = MathHelper.cos((float)(j % 8) * ((float)Math.PI * 2F) / 8.0F) * 0.75F; + float f9 = (float)(j % 8) / 8.0F; + bufferbuilder.pos((double)(f7 * 0.2F), (double)(f8 * 0.2F), 0.0D).tex((double)f9, (double)f5).color(0, 0, 0, 255).endVertex(); + bufferbuilder.pos((double)f7, (double)f8, (double)f4).tex((double)f9, (double)f6).color(255, 255, 255, 255).endVertex(); + } + + tessellator.draw(); + GlStateManager.enableCull(); + GlStateManager.shadeModel(7424); + RenderHelper.enableStandardItemLighting(); + GlStateManager.popMatrix(); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityDragon entity) + { + return DRAGON_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderDragonFireball.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderDragonFireball.java new file mode 100644 index 0000000..705a082 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderDragonFireball.java @@ -0,0 +1,71 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderDragonFireball extends Render +{ + private static final ResourceLocation DRAGON_FIREBALL_TEXTURE = new ResourceLocation("textures/entity/enderdragon/dragon_fireball.png"); + + public RenderDragonFireball(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityDragonFireball entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + this.bindEntityTexture(entity); + GlStateManager.translate((float)x, (float)y, (float)z); + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(2.0F, 2.0F, 2.0F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f = 1.0F; + float f1 = 0.5F; + float f2 = 0.25F; + GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * -this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_NORMAL); + bufferbuilder.pos(-0.5D, -0.25D, 0.0D).tex(0.0D, 1.0D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, -0.25D, 0.0D).tex(1.0D, 1.0D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, 0.75D, 0.0D).tex(1.0D, 0.0D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(-0.5D, 0.75D, 0.0D).tex(0.0D, 0.0D).normal(0.0F, 1.0F, 0.0F).endVertex(); + tessellator.draw(); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityDragonFireball entity) + { + return DRAGON_FIREBALL_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderElderGuardian.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderElderGuardian.java new file mode 100644 index 0000000..0773238 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderElderGuardian.java @@ -0,0 +1,34 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderElderGuardian extends RenderGuardian +{ + private static final ResourceLocation GUARDIAN_ELDER_TEXTURE = new ResourceLocation("textures/entity/guardian_elder.png"); + + public RenderElderGuardian(RenderManager p_i47209_1_) + { + super(p_i47209_1_); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityGuardian entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(2.35F, 2.35F, 2.35F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityGuardian entity) + { + return GUARDIAN_ELDER_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEnderCrystal.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEnderCrystal.java new file mode 100644 index 0000000..857ee3f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEnderCrystal.java @@ -0,0 +1,90 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelEnderCrystal; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEnderCrystal extends Render +{ + private static final ResourceLocation ENDER_CRYSTAL_TEXTURES = new ResourceLocation("textures/entity/endercrystal/endercrystal.png"); + private final ModelBase modelEnderCrystal = new ModelEnderCrystal(0.0F, true); + private final ModelBase modelEnderCrystalNoBase = new ModelEnderCrystal(0.0F, false); + + public RenderEnderCrystal(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.5F; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityEnderCrystal entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float f = (float)entity.innerRotation + partialTicks; + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y, (float)z); + this.bindTexture(ENDER_CRYSTAL_TEXTURES); + float f1 = MathHelper.sin(f * 0.2F) / 2.0F + 0.5F; + f1 = f1 * f1 + f1; + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + if (entity.shouldShowBottom()) + { + this.modelEnderCrystal.render(entity, 0.0F, f * 3.0F, f1 * 0.2F, 0.0F, 0.0F, 0.0625F); + } + else + { + this.modelEnderCrystalNoBase.render(entity, 0.0F, f * 3.0F, f1 * 0.2F, 0.0F, 0.0F, 0.0625F); + } + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + BlockPos blockpos = entity.getBeamTarget(); + + if (blockpos != null) + { + this.bindTexture(RenderDragon.ENDERCRYSTAL_BEAM_TEXTURES); + float f2 = (float)blockpos.getX() + 0.5F; + float f3 = (float)blockpos.getY() + 0.5F; + float f4 = (float)blockpos.getZ() + 0.5F; + double d0 = (double)f2 - entity.posX; + double d1 = (double)f3 - entity.posY; + double d2 = (double)f4 - entity.posZ; + RenderDragon.renderCrystalBeams(x + d0, y - 0.3D + (double)(f1 * 0.4F) + d1, z + d2, partialTicks, (double)f2, (double)f3, (double)f4, entity.innerRotation, entity.posX, entity.posY, entity.posZ); + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityEnderCrystal entity) + { + return ENDER_CRYSTAL_TEXTURES; + } + + public boolean shouldRender(EntityEnderCrystal livingEntity, ICamera camera, double camX, double camY, double camZ) + { + return super.shouldRender(livingEntity, camera, camX, camY, camZ) || livingEntity.getBeamTarget() != null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEnderman.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEnderman.java new file mode 100644 index 0000000..65ca49e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEnderman.java @@ -0,0 +1,58 @@ +package net.minecraft.client.renderer.entity; + +import java.util.Random; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.model.ModelEnderman; +import net.minecraft.client.renderer.entity.layers.LayerEndermanEyes; +import net.minecraft.client.renderer.entity.layers.LayerHeldBlock; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEnderman extends RenderLiving +{ + private static final ResourceLocation ENDERMAN_TEXTURES = new ResourceLocation("textures/entity/enderman/enderman.png"); + private final Random rnd = new Random(); + + public RenderEnderman(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelEnderman(0.0F), 0.5F); + this.addLayer(new LayerEndermanEyes(this)); + this.addLayer(new LayerHeldBlock(this)); + } + + public ModelEnderman getMainModel() + { + return (ModelEnderman)super.getMainModel(); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityEnderman entity, double x, double y, double z, float entityYaw, float partialTicks) + { + IBlockState iblockstate = entity.getHeldBlockState(); + ModelEnderman modelenderman = this.getMainModel(); + modelenderman.isCarrying = iblockstate != null; + modelenderman.isAttacking = entity.isScreaming(); + + if (entity.isScreaming()) + { + double d0 = 0.02D; + x += this.rnd.nextGaussian() * 0.02D; + z += this.rnd.nextGaussian() * 0.02D; + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityEnderman entity) + { + return ENDERMAN_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEndermite.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEndermite.java new file mode 100644 index 0000000..bae2f55 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEndermite.java @@ -0,0 +1,31 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelEnderMite; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEndermite extends RenderLiving +{ + private static final ResourceLocation ENDERMITE_TEXTURES = new ResourceLocation("textures/entity/endermite.png"); + + public RenderEndermite(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelEnderMite(), 0.3F); + } + + protected float getDeathMaxRotation(EntityEndermite entityLivingBaseIn) + { + return 180.0F; + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityEndermite entity) + { + return ENDERMITE_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEntity.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEntity.java new file mode 100644 index 0000000..05a4fe6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEntity.java @@ -0,0 +1,37 @@ +package net.minecraft.client.renderer.entity; + +import javax.annotation.Nullable; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEntity extends Render +{ + public RenderEntity(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(Entity entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + renderOffsetAABB(entity.getEntityBoundingBox(), x - entity.lastTickPosX, y - entity.lastTickPosY, z - entity.lastTickPosZ); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + @Nullable + protected ResourceLocation getEntityTexture(Entity entity) + { + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEntityItem.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEntityItem.java new file mode 100644 index 0000000..d11cc99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEntityItem.java @@ -0,0 +1,209 @@ +package net.minecraft.client.renderer.entity; + +import java.util.Random; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEntityItem extends Render +{ + private final RenderItem itemRenderer; + private final Random random = new Random(); + + public RenderEntityItem(RenderManager renderManagerIn, RenderItem p_i46167_2_) + { + super(renderManagerIn); + this.itemRenderer = p_i46167_2_; + this.shadowSize = 0.15F; + this.shadowOpaque = 0.75F; + } + + private int transformModelCount(EntityItem itemIn, double p_177077_2_, double p_177077_4_, double p_177077_6_, float p_177077_8_, IBakedModel p_177077_9_) + { + ItemStack itemstack = itemIn.getItem(); + Item item = itemstack.getItem(); + + if (item == null) + { + return 0; + } + else + { + boolean flag = p_177077_9_.isGui3d(); + int i = this.getModelCount(itemstack); + float f = 0.25F; + float f1 = shouldBob() ? MathHelper.sin(((float)itemIn.getAge() + p_177077_8_) / 10.0F + itemIn.hoverStart) * 0.1F + 0.1F : 0; + float f2 = p_177077_9_.getItemCameraTransforms().getTransform(ItemCameraTransforms.TransformType.GROUND).scale.y; + GlStateManager.translate((float)p_177077_2_, (float)p_177077_4_ + f1 + 0.25F * f2, (float)p_177077_6_); + + if (flag || this.renderManager.options != null) + { + float f3 = (((float)itemIn.getAge() + p_177077_8_) / 20.0F + itemIn.hoverStart) * (180F / (float)Math.PI); + GlStateManager.rotate(f3, 0.0F, 1.0F, 0.0F); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + return i; + } + } + + protected int getModelCount(ItemStack stack) + { + int i = 1; + + if (stack.getCount() > 48) + { + i = 5; + } + else if (stack.getCount() > 32) + { + i = 4; + } + else if (stack.getCount() > 16) + { + i = 3; + } + else if (stack.getCount() > 1) + { + i = 2; + } + + return i; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityItem entity, double x, double y, double z, float entityYaw, float partialTicks) + { + ItemStack itemstack = entity.getItem(); + int i = itemstack.isEmpty() ? 187 : Item.getIdFromItem(itemstack.getItem()) + itemstack.getMetadata(); + this.random.setSeed((long)i); + boolean flag = false; + + if (this.bindEntityTexture(entity)) + { + this.renderManager.renderEngine.getTexture(this.getEntityTexture(entity)).setBlurMipmap(false, false); + flag = true; + } + + GlStateManager.enableRescaleNormal(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.enableBlend(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.pushMatrix(); + IBakedModel ibakedmodel = this.itemRenderer.getItemModelWithOverrides(itemstack, entity.world, (EntityLivingBase)null); + int j = this.transformModelCount(entity, x, y, z, partialTicks, ibakedmodel); + boolean flag1 = ibakedmodel.isGui3d(); + + if (!flag1) + { + float f3 = -0.0F * (float)(j - 1) * 0.5F; + float f4 = -0.0F * (float)(j - 1) * 0.5F; + float f5 = -0.09375F * (float)(j - 1) * 0.5F; + GlStateManager.translate(f3, f4, f5); + } + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + for (int k = 0; k < j; ++k) + { + if (flag1) + { + GlStateManager.pushMatrix(); + + if (k > 0) + { + float f7 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F; + float f9 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F; + float f6 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F; + GlStateManager.translate(shouldSpreadItems() ? f7 : 0, shouldSpreadItems() ? f9 : 0, f6); + } + + IBakedModel transformedModel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(ibakedmodel, ItemCameraTransforms.TransformType.GROUND, false); + this.itemRenderer.renderItem(itemstack, transformedModel); + GlStateManager.popMatrix(); + } + else + { + GlStateManager.pushMatrix(); + + if (k > 0) + { + float f8 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F; + float f10 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.15F * 0.5F; + GlStateManager.translate(f8, f10, 0.0F); + } + + IBakedModel transformedModel = net.minecraftforge.client.ForgeHooksClient.handleCameraTransforms(ibakedmodel, ItemCameraTransforms.TransformType.GROUND, false); + this.itemRenderer.renderItem(itemstack, transformedModel); + GlStateManager.popMatrix(); + GlStateManager.translate(0.0F, 0.0F, 0.09375F); + } + } + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + GlStateManager.disableBlend(); + this.bindEntityTexture(entity); + + if (flag) + { + this.renderManager.renderEngine.getTexture(this.getEntityTexture(entity)).restoreLastBlurMipmap(); + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityItem entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } + + /*==================================== FORGE START ===========================================*/ + + /** + * Items should spread out when rendered in 3d? + * @return + */ + public boolean shouldSpreadItems() + { + return true; + } + + /** + * Items should have a bob effect + * @return + */ + public boolean shouldBob() + { + return true; + } + /*==================================== FORGE END =============================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEvoker.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEvoker.java new file mode 100644 index 0000000..936cd00 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEvoker.java @@ -0,0 +1,54 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelIllager; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.monster.EntitySpellcasterIllager; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvoker extends RenderLiving +{ + private static final ResourceLocation EVOKER_ILLAGER = new ResourceLocation("textures/entity/illager/evoker.png"); + + public RenderEvoker(RenderManager p_i47207_1_) + { + super(p_i47207_1_, new ModelIllager(0.0F, 0.0F, 64, 64), 0.5F); + this.addLayer(new LayerHeldItem(this) + { + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (((EntitySpellcasterIllager)entitylivingbaseIn).isSpellcasting()) + { + super.doRenderLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + } + protected void translateToHand(EnumHandSide p_191361_1_) + { + ((ModelIllager)this.livingEntityRenderer.getMainModel()).getArm(p_191361_1_).postRender(0.0625F); + } + }); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityMob entity) + { + return EVOKER_ILLAGER; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityMob entitylivingbaseIn, float partialTickTime) + { + float f = 0.9375F; + GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEvokerFangs.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEvokerFangs.java new file mode 100644 index 0000000..57c7308 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderEvokerFangs.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelEvokerFangs; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderEvokerFangs extends Render +{ + private static final ResourceLocation EVOKER_ILLAGER_FANGS = new ResourceLocation("textures/entity/illager/fangs.png"); + private final ModelEvokerFangs model = new ModelEvokerFangs(); + + public RenderEvokerFangs(RenderManager p_i47208_1_) + { + super(p_i47208_1_); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityEvokerFangs entity, double x, double y, double z, float entityYaw, float partialTicks) + { + float f = entity.getAnimationProgress(partialTicks); + + if (f != 0.0F) + { + float f1 = 2.0F; + + if (f > 0.9F) + { + f1 = (float)((double)f1 * ((1.0D - (double)f) / 0.10000000149011612D)); + } + + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + GlStateManager.enableAlpha(); + this.bindEntityTexture(entity); + GlStateManager.translate((float)x, (float)y, (float)z); + GlStateManager.rotate(90.0F - entity.rotationYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(-f1, -f1, f1); + float f2 = 0.03125F; + GlStateManager.translate(0.0F, -0.626F, 0.0F); + this.model.render(entity, f, 0.0F, 0.0F, entity.rotationYaw, entity.rotationPitch, 0.03125F); + GlStateManager.popMatrix(); + GlStateManager.enableCull(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityEvokerFangs entity) + { + return EVOKER_ILLAGER_FANGS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFallingBlock.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFallingBlock.java new file mode 100644 index 0000000..7018177 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFallingBlock.java @@ -0,0 +1,84 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderFallingBlock extends Render +{ + public RenderFallingBlock(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.5F; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityFallingBlock entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (entity.getBlock() != null) + { + IBlockState iblockstate = entity.getBlock(); + + if (iblockstate.getRenderType() == EnumBlockRenderType.MODEL) + { + World world = entity.getWorldObj(); + + if (iblockstate != world.getBlockState(new BlockPos(entity)) && iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE) + { + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + GlStateManager.pushMatrix(); + GlStateManager.disableLighting(); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + bufferbuilder.begin(7, DefaultVertexFormats.BLOCK); + BlockPos blockpos = new BlockPos(entity.posX, entity.getEntityBoundingBox().maxY, entity.posZ); + GlStateManager.translate((float)(x - (double)blockpos.getX() - 0.5D), (float)(y - (double)blockpos.getY()), (float)(z - (double)blockpos.getZ() - 0.5D)); + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + blockrendererdispatcher.getBlockModelRenderer().renderModel(world, blockrendererdispatcher.getModelForState(iblockstate), iblockstate, blockpos, bufferbuilder, false, MathHelper.getPositionRandom(entity.getOrigin())); + tessellator.draw(); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.enableLighting(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + } + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityFallingBlock entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFireball.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFireball.java new file mode 100644 index 0000000..e68cf81 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFireball.java @@ -0,0 +1,81 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.init.Items; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderFireball extends Render +{ + private final float scale; + + public RenderFireball(RenderManager renderManagerIn, float scaleIn) + { + super(renderManagerIn); + this.scale = scaleIn; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityFireball entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + this.bindEntityTexture(entity); + GlStateManager.translate((float)x, (float)y, (float)z); + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(this.scale, this.scale, this.scale); + TextureAtlasSprite textureatlassprite = Minecraft.getMinecraft().getRenderItem().getItemModelMesher().getParticleIcon(Items.FIRE_CHARGE); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + float f = textureatlassprite.getMinU(); + float f1 = textureatlassprite.getMaxU(); + float f2 = textureatlassprite.getMinV(); + float f3 = textureatlassprite.getMaxV(); + float f4 = 1.0F; + float f5 = 0.5F; + float f6 = 0.25F; + GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * -this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_NORMAL); + bufferbuilder.pos(-0.5D, -0.25D, 0.0D).tex((double)f, (double)f3).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, -0.25D, 0.0D).tex((double)f1, (double)f3).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, 0.75D, 0.0D).tex((double)f1, (double)f2).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(-0.5D, 0.75D, 0.0D).tex((double)f, (double)f2).normal(0.0F, 1.0F, 0.0F).endVertex(); + tessellator.draw(); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityFireball entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFish.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFish.java new file mode 100644 index 0000000..7a5e99a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderFish.java @@ -0,0 +1,151 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderFish extends Render +{ + private static final ResourceLocation FISH_PARTICLES = new ResourceLocation("textures/particle/particles.png"); + + public RenderFish(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityFishHook entity, double x, double y, double z, float entityYaw, float partialTicks) + { + EntityPlayer entityplayer = entity.getAngler(); + + if (entityplayer != null && !this.renderOutlines) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y, (float)z); + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + this.bindEntityTexture(entity); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + int i = 1; + int j = 2; + float f = 0.0625F; + float f1 = 0.125F; + float f2 = 0.125F; + float f3 = 0.1875F; + float f4 = 1.0F; + float f5 = 0.5F; + float f6 = 0.5F; + GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * -this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_NORMAL); + bufferbuilder.pos(-0.5D, -0.5D, 0.0D).tex(0.0625D, 0.1875D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, -0.5D, 0.0D).tex(0.125D, 0.1875D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, 0.5D, 0.0D).tex(0.125D, 0.125D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(-0.5D, 0.5D, 0.0D).tex(0.0625D, 0.125D).normal(0.0F, 1.0F, 0.0F).endVertex(); + tessellator.draw(); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + int k = entityplayer.getPrimaryHand() == EnumHandSide.RIGHT ? 1 : -1; + ItemStack itemstack = entityplayer.getHeldItemMainhand(); + + if (!(itemstack.getItem() instanceof net.minecraft.item.ItemFishingRod)) + { + k = -k; + } + + float f7 = entityplayer.getSwingProgress(partialTicks); + float f8 = MathHelper.sin(MathHelper.sqrt(f7) * (float)Math.PI); + float f9 = (entityplayer.prevRenderYawOffset + (entityplayer.renderYawOffset - entityplayer.prevRenderYawOffset) * partialTicks) * 0.017453292F; + double d0 = (double)MathHelper.sin(f9); + double d1 = (double)MathHelper.cos(f9); + double d2 = (double)k * 0.35D; + double d3 = 0.8D; + double d4; + double d5; + double d6; + double d7; + + if ((this.renderManager.options == null || this.renderManager.options.thirdPersonView <= 0) && entityplayer == Minecraft.getMinecraft().player) + { + float f10 = this.renderManager.options.fovSetting; + f10 = f10 / 100.0F; + Vec3d vec3d = new Vec3d((double)k * -0.36D * (double)f10, -0.045D * (double)f10, 0.4D); + vec3d = vec3d.rotatePitch(-(entityplayer.prevRotationPitch + (entityplayer.rotationPitch - entityplayer.prevRotationPitch) * partialTicks) * 0.017453292F); + vec3d = vec3d.rotateYaw(-(entityplayer.prevRotationYaw + (entityplayer.rotationYaw - entityplayer.prevRotationYaw) * partialTicks) * 0.017453292F); + vec3d = vec3d.rotateYaw(f8 * 0.5F); + vec3d = vec3d.rotatePitch(-f8 * 0.7F); + d4 = entityplayer.prevPosX + (entityplayer.posX - entityplayer.prevPosX) * (double)partialTicks + vec3d.x; + d5 = entityplayer.prevPosY + (entityplayer.posY - entityplayer.prevPosY) * (double)partialTicks + vec3d.y; + d6 = entityplayer.prevPosZ + (entityplayer.posZ - entityplayer.prevPosZ) * (double)partialTicks + vec3d.z; + d7 = (double)entityplayer.getEyeHeight(); + } + else + { + d4 = entityplayer.prevPosX + (entityplayer.posX - entityplayer.prevPosX) * (double)partialTicks - d1 * d2 - d0 * 0.8D; + d5 = entityplayer.prevPosY + (double)entityplayer.getEyeHeight() + (entityplayer.posY - entityplayer.prevPosY) * (double)partialTicks - 0.45D; + d6 = entityplayer.prevPosZ + (entityplayer.posZ - entityplayer.prevPosZ) * (double)partialTicks - d0 * d2 + d1 * 0.8D; + d7 = entityplayer.isSneaking() ? -0.1875D : 0.0D; + } + + double d13 = entity.prevPosX + (entity.posX - entity.prevPosX) * (double)partialTicks; + double d8 = entity.prevPosY + (entity.posY - entity.prevPosY) * (double)partialTicks + 0.25D; + double d9 = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * (double)partialTicks; + double d10 = (double)((float)(d4 - d13)); + double d11 = (double)((float)(d5 - d8)) + d7; + double d12 = (double)((float)(d6 - d9)); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + bufferbuilder.begin(3, DefaultVertexFormats.POSITION_COLOR); + int l = 16; + + for (int i1 = 0; i1 <= 16; ++i1) + { + float f11 = (float)i1 / 16.0F; + bufferbuilder.pos(x + d10 * (double)f11, y + d11 * (double)(f11 * f11 + f11) * 0.5D + 0.25D, z + d12 * (double)f11).color(0, 0, 0, 255).endVertex(); + } + + tessellator.draw(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityFishHook entity) + { + return FISH_PARTICLES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGhast.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGhast.java new file mode 100644 index 0000000..9e83261 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGhast.java @@ -0,0 +1,40 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelGhast; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderGhast extends RenderLiving +{ + private static final ResourceLocation GHAST_TEXTURES = new ResourceLocation("textures/entity/ghast/ghast.png"); + private static final ResourceLocation GHAST_SHOOTING_TEXTURES = new ResourceLocation("textures/entity/ghast/ghast_shooting.png"); + + public RenderGhast(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelGhast(), 0.5F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityGhast entity) + { + return entity.isAttacking() ? GHAST_SHOOTING_TEXTURES : GHAST_TEXTURES; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityGhast entitylivingbaseIn, float partialTickTime) + { + float f = 1.0F; + float f1 = 4.5F; + float f2 = 4.5F; + GlStateManager.scale(4.5F, 4.5F, 4.5F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGiantZombie.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGiantZombie.java new file mode 100644 index 0000000..a0b5d38 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGiantZombie.java @@ -0,0 +1,54 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelZombie; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.monster.EntityGiantZombie; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderGiantZombie extends RenderLiving +{ + private static final ResourceLocation ZOMBIE_TEXTURES = new ResourceLocation("textures/entity/zombie/zombie.png"); + /** Scale of the model to use */ + private final float scale; + + public RenderGiantZombie(RenderManager p_i47206_1_, float p_i47206_2_) + { + super(p_i47206_1_, new ModelZombie(), 0.5F * p_i47206_2_); + this.scale = p_i47206_2_; + this.addLayer(new LayerHeldItem(this)); + this.addLayer(new LayerBipedArmor(this) + { + protected void initArmor() + { + this.modelLeggings = new ModelZombie(0.5F, true); + this.modelArmor = new ModelZombie(1.0F, true); + } + }); + } + + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityGiantZombie entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(this.scale, this.scale, this.scale); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityGiantZombie entity) + { + return ZOMBIE_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGuardian.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGuardian.java new file mode 100644 index 0000000..21b0208 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderGuardian.java @@ -0,0 +1,162 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelGuardian; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderGuardian extends RenderLiving +{ + private static final ResourceLocation GUARDIAN_TEXTURE = new ResourceLocation("textures/entity/guardian.png"); + private static final ResourceLocation GUARDIAN_BEAM_TEXTURE = new ResourceLocation("textures/entity/guardian_beam.png"); + + public RenderGuardian(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelGuardian(), 0.5F); + } + + public boolean shouldRender(EntityGuardian livingEntity, ICamera camera, double camX, double camY, double camZ) + { + if (super.shouldRender(livingEntity, camera, camX, camY, camZ)) + { + return true; + } + else + { + if (livingEntity.hasTargetedEntity()) + { + EntityLivingBase entitylivingbase = livingEntity.getTargetedEntity(); + + if (entitylivingbase != null) + { + Vec3d vec3d = this.getPosition(entitylivingbase, (double)entitylivingbase.height * 0.5D, 1.0F); + Vec3d vec3d1 = this.getPosition(livingEntity, (double)livingEntity.getEyeHeight(), 1.0F); + + if (camera.isBoundingBoxInFrustum(new AxisAlignedBB(vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y, vec3d.z))) + { + return true; + } + } + } + + return false; + } + } + + private Vec3d getPosition(EntityLivingBase entityLivingBaseIn, double p_177110_2_, float p_177110_4_) + { + double d0 = entityLivingBaseIn.lastTickPosX + (entityLivingBaseIn.posX - entityLivingBaseIn.lastTickPosX) * (double)p_177110_4_; + double d1 = p_177110_2_ + entityLivingBaseIn.lastTickPosY + (entityLivingBaseIn.posY - entityLivingBaseIn.lastTickPosY) * (double)p_177110_4_; + double d2 = entityLivingBaseIn.lastTickPosZ + (entityLivingBaseIn.posZ - entityLivingBaseIn.lastTickPosZ) * (double)p_177110_4_; + return new Vec3d(d0, d1, d2); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityGuardian entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + EntityLivingBase entitylivingbase = entity.getTargetedEntity(); + + if (entitylivingbase != null) + { + float f = entity.getAttackAnimationScale(partialTicks); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.bindTexture(GUARDIAN_BEAM_TEXTURE); + GlStateManager.glTexParameteri(3553, 10242, 10497); + GlStateManager.glTexParameteri(3553, 10243, 10497); + GlStateManager.disableLighting(); + GlStateManager.disableCull(); + GlStateManager.disableBlend(); + GlStateManager.depthMask(true); + float f1 = 240.0F; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + float f2 = (float)entity.world.getTotalWorldTime() + partialTicks; + float f3 = f2 * 0.5F % 1.0F; + float f4 = entity.getEyeHeight(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y + f4, (float)z); + Vec3d vec3d = this.getPosition(entitylivingbase, (double)entitylivingbase.height * 0.5D, partialTicks); + Vec3d vec3d1 = this.getPosition(entity, (double)f4, partialTicks); + Vec3d vec3d2 = vec3d.subtract(vec3d1); + double d0 = vec3d2.lengthVector() + 1.0D; + vec3d2 = vec3d2.normalize(); + float f5 = (float)Math.acos(vec3d2.y); + float f6 = (float)Math.atan2(vec3d2.z, vec3d2.x); + GlStateManager.rotate((((float)Math.PI / 2F) + -f6) * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f5 * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + int i = 1; + double d1 = (double)f2 * 0.05D * -1.5D; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + float f7 = f * f; + int j = 64 + (int)(f7 * 191.0F); + int k = 32 + (int)(f7 * 191.0F); + int l = 128 - (int)(f7 * 64.0F); + double d2 = 0.2D; + double d3 = 0.282D; + double d4 = 0.0D + Math.cos(d1 + 2.356194490192345D) * 0.282D; + double d5 = 0.0D + Math.sin(d1 + 2.356194490192345D) * 0.282D; + double d6 = 0.0D + Math.cos(d1 + (Math.PI / 4D)) * 0.282D; + double d7 = 0.0D + Math.sin(d1 + (Math.PI / 4D)) * 0.282D; + double d8 = 0.0D + Math.cos(d1 + 3.9269908169872414D) * 0.282D; + double d9 = 0.0D + Math.sin(d1 + 3.9269908169872414D) * 0.282D; + double d10 = 0.0D + Math.cos(d1 + 5.497787143782138D) * 0.282D; + double d11 = 0.0D + Math.sin(d1 + 5.497787143782138D) * 0.282D; + double d12 = 0.0D + Math.cos(d1 + Math.PI) * 0.2D; + double d13 = 0.0D + Math.sin(d1 + Math.PI) * 0.2D; + double d14 = 0.0D + Math.cos(d1 + 0.0D) * 0.2D; + double d15 = 0.0D + Math.sin(d1 + 0.0D) * 0.2D; + double d16 = 0.0D + Math.cos(d1 + (Math.PI / 2D)) * 0.2D; + double d17 = 0.0D + Math.sin(d1 + (Math.PI / 2D)) * 0.2D; + double d18 = 0.0D + Math.cos(d1 + (Math.PI * 3D / 2D)) * 0.2D; + double d19 = 0.0D + Math.sin(d1 + (Math.PI * 3D / 2D)) * 0.2D; + double d20 = 0.0D; + double d21 = 0.4999D; + double d22 = (double)(-1.0F + f3); + double d23 = d0 * 2.5D + d22; + bufferbuilder.pos(d12, d0, d13).tex(0.4999D, d23).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d12, 0.0D, d13).tex(0.4999D, d22).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d14, 0.0D, d15).tex(0.0D, d22).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d14, d0, d15).tex(0.0D, d23).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d16, d0, d17).tex(0.4999D, d23).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d16, 0.0D, d17).tex(0.4999D, d22).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d18, 0.0D, d19).tex(0.0D, d22).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d18, d0, d19).tex(0.0D, d23).color(j, k, l, 255).endVertex(); + double d24 = 0.0D; + + if (entity.ticksExisted % 2 == 0) + { + d24 = 0.5D; + } + + bufferbuilder.pos(d4, d0, d5).tex(0.5D, d24 + 0.5D).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d6, d0, d7).tex(1.0D, d24 + 0.5D).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d10, d0, d11).tex(1.0D, d24).color(j, k, l, 255).endVertex(); + bufferbuilder.pos(d8, d0, d9).tex(0.5D, d24).color(j, k, l, 255).endVertex(); + tessellator.draw(); + GlStateManager.popMatrix(); + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityGuardian entity) + { + return GUARDIAN_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderHorse.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderHorse.java new file mode 100644 index 0000000..c35fb97 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderHorse.java @@ -0,0 +1,40 @@ +package net.minecraft.client.renderer.entity; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelHorse; +import net.minecraft.client.renderer.texture.LayeredTexture; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderHorse extends RenderLiving +{ + private static final Map LAYERED_LOCATION_CACHE = Maps.newHashMap(); + + public RenderHorse(RenderManager p_i47205_1_) + { + super(p_i47205_1_, new ModelHorse(), 0.75F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityHorse entity) + { + String s = entity.getHorseTexture(); + ResourceLocation resourcelocation = LAYERED_LOCATION_CACHE.get(s); + + if (resourcelocation == null) + { + resourcelocation = new ResourceLocation(s); + Minecraft.getMinecraft().getTextureManager().loadTexture(resourcelocation, new LayeredTexture(entity.getVariantTexturePaths())); + LAYERED_LOCATION_CACHE.put(s, resourcelocation); + } + + return resourcelocation; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderHusk.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderHusk.java new file mode 100644 index 0000000..708bdd7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderHusk.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderHusk extends RenderZombie +{ + private static final ResourceLocation HUSK_ZOMBIE_TEXTURES = new ResourceLocation("textures/entity/zombie/husk.png"); + + public RenderHusk(RenderManager p_i47204_1_) + { + super(p_i47204_1_); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityZombie entitylivingbaseIn, float partialTickTime) + { + float f = 1.0625F; + GlStateManager.scale(1.0625F, 1.0625F, 1.0625F); + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityZombie entity) + { + return HUSK_ZOMBIE_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderIllusionIllager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderIllusionIllager.java new file mode 100644 index 0000000..a3496c8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderIllusionIllager.java @@ -0,0 +1,88 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelIllager; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityIllusionIllager; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderIllusionIllager extends RenderLiving +{ + private static final ResourceLocation ILLUSIONIST = new ResourceLocation("textures/entity/illager/illusionist.png"); + + public RenderIllusionIllager(RenderManager p_i47477_1_) + { + super(p_i47477_1_, new ModelIllager(0.0F, 0.0F, 64, 64), 0.5F); + this.addLayer(new LayerHeldItem(this) + { + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (((EntityIllusionIllager)entitylivingbaseIn).isSpellcasting() || ((EntityIllusionIllager)entitylivingbaseIn).isAggressive()) + { + super.doRenderLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + } + protected void translateToHand(EnumHandSide p_191361_1_) + { + ((ModelIllager)this.livingEntityRenderer.getMainModel()).getArm(p_191361_1_).postRender(0.0625F); + } + }); + ((ModelIllager)this.getMainModel()).hat.showModel = true; + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityMob entity) + { + return ILLUSIONIST; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityMob entitylivingbaseIn, float partialTickTime) + { + float f = 0.9375F; + GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityMob entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (entity.isInvisible()) + { + Vec3d[] avec3d = ((EntityIllusionIllager)entity).getRenderLocations(partialTicks); + float f = this.handleRotationFloat(entity, partialTicks); + + for (int i = 0; i < avec3d.length; ++i) + { + super.doRender(entity, x + avec3d[i].x + (double)MathHelper.cos((float)i + f * 0.5F) * 0.025D, y + avec3d[i].y + (double)MathHelper.cos((float)i + f * 0.75F) * 0.0125D, z + avec3d[i].z + (double)MathHelper.cos((float)i + f * 0.7F) * 0.025D, entityYaw, partialTicks); + } + } + else + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + } + + public void renderName(EntityMob entity, double x, double y, double z) + { + super.renderName(entity, x, y, z); + } + + protected boolean isVisible(EntityMob p_193115_1_) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderIronGolem.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderIronGolem.java new file mode 100644 index 0000000..9787785 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderIronGolem.java @@ -0,0 +1,42 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelIronGolem; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerIronGolemFlower; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderIronGolem extends RenderLiving +{ + private static final ResourceLocation IRON_GOLEM_TEXTURES = new ResourceLocation("textures/entity/iron_golem.png"); + + public RenderIronGolem(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelIronGolem(), 0.5F); + this.addLayer(new LayerIronGolemFlower(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityIronGolem entity) + { + return IRON_GOLEM_TEXTURES; + } + + protected void applyRotations(EntityIronGolem entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks); + + if ((double)entityLiving.limbSwingAmount >= 0.01D) + { + float f = 13.0F; + float f1 = entityLiving.limbSwing - entityLiving.limbSwingAmount * (1.0F - partialTicks) + 6.0F; + float f2 = (Math.abs(f1 % 13.0F - 6.5F) - 3.25F) / 3.25F; + GlStateManager.rotate(6.5F * f2, 0.0F, 0.0F, 1.0F); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderItemFrame.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderItemFrame.java new file mode 100644 index 0000000..82cd8e4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderItemFrame.java @@ -0,0 +1,157 @@ +package net.minecraft.client.renderer.entity; + +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ModelManager; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderItemFrame extends Render +{ + private static final ResourceLocation MAP_BACKGROUND_TEXTURES = new ResourceLocation("textures/map/map_background.png"); + private final Minecraft mc = Minecraft.getMinecraft(); + private final ModelResourceLocation itemFrameModel = new ModelResourceLocation("item_frame", "normal"); + private final ModelResourceLocation mapModel = new ModelResourceLocation("item_frame", "map"); + private final RenderItem itemRenderer; + + public RenderItemFrame(RenderManager renderManagerIn, RenderItem itemRendererIn) + { + super(renderManagerIn); + this.itemRenderer = itemRendererIn; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityItemFrame entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + BlockPos blockpos = entity.getHangingPosition(); + double d0 = (double)blockpos.getX() - entity.posX + x; + double d1 = (double)blockpos.getY() - entity.posY + y; + double d2 = (double)blockpos.getZ() - entity.posZ + z; + GlStateManager.translate(d0 + 0.5D, d1 + 0.5D, d2 + 0.5D); + GlStateManager.rotate(180.0F - entity.rotationYaw, 0.0F, 1.0F, 0.0F); + this.renderManager.renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + BlockRendererDispatcher blockrendererdispatcher = this.mc.getBlockRendererDispatcher(); + ModelManager modelmanager = blockrendererdispatcher.getBlockModelShapes().getModelManager(); + IBakedModel ibakedmodel; + + if (entity.getDisplayedItem().getItem() instanceof net.minecraft.item.ItemMap) + { + ibakedmodel = modelmanager.getModel(this.mapModel); + } + else + { + ibakedmodel = modelmanager.getModel(this.itemFrameModel); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(-0.5F, -0.5F, -0.5F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + blockrendererdispatcher.getBlockModelRenderer().renderModelBrightnessColor(ibakedmodel, 1.0F, 1.0F, 1.0F, 1.0F); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + GlStateManager.translate(0.0F, 0.0F, 0.4375F); + this.renderItem(entity); + GlStateManager.popMatrix(); + this.renderName(entity, x + (double)((float)entity.facingDirection.getFrontOffsetX() * 0.3F), y - 0.25D, z + (double)((float)entity.facingDirection.getFrontOffsetZ() * 0.3F)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + @Nullable + protected ResourceLocation getEntityTexture(EntityItemFrame entity) + { + return null; + } + + private void renderItem(EntityItemFrame itemFrame) + { + ItemStack itemstack = itemFrame.getDisplayedItem(); + + if (!itemstack.isEmpty()) + { + GlStateManager.pushMatrix(); + GlStateManager.disableLighting(); + boolean flag = itemstack.getItem() instanceof net.minecraft.item.ItemMap; + int i = flag ? itemFrame.getRotation() % 4 * 2 : itemFrame.getRotation(); + GlStateManager.rotate((float)i * 360.0F / 8.0F, 0.0F, 0.0F, 1.0F); + + net.minecraftforge.client.event.RenderItemInFrameEvent event = new net.minecraftforge.client.event.RenderItemInFrameEvent(itemFrame, this); + if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) + { + if (flag) + { + this.renderManager.renderEngine.bindTexture(MAP_BACKGROUND_TEXTURES); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + float f = 0.0078125F; + GlStateManager.scale(0.0078125F, 0.0078125F, 0.0078125F); + GlStateManager.translate(-64.0F, -64.0F, 0.0F); + MapData mapdata = ((net.minecraft.item.ItemMap) itemstack.getItem()).getMapData(itemstack, itemFrame.world); + GlStateManager.translate(0.0F, 0.0F, -1.0F); + + if (mapdata != null) + { + this.mc.entityRenderer.getMapItemRenderer().renderMap(mapdata, true); + } + } + else + { + GlStateManager.scale(0.5F, 0.5F, 0.5F); + GlStateManager.pushAttrib(); + RenderHelper.enableStandardItemLighting(); + this.itemRenderer.renderItem(itemstack, ItemCameraTransforms.TransformType.FIXED); + RenderHelper.disableStandardItemLighting(); + GlStateManager.popAttrib(); + } + } + + GlStateManager.enableLighting(); + GlStateManager.popMatrix(); + } + } + + protected void renderName(EntityItemFrame entity, double x, double y, double z) + { + if (Minecraft.isGuiEnabled() && !entity.getDisplayedItem().isEmpty() && entity.getDisplayedItem().hasDisplayName() && this.renderManager.pointedEntity == entity) + { + double d0 = entity.getDistanceSq(this.renderManager.renderViewEntity); + float f = entity.isSneaking() ? 32.0F : 64.0F; + + if (d0 < (double)(f * f)) + { + String s = entity.getDisplayedItem().getDisplayName(); + this.renderLivingLabel(entity, s, x, y, z, 64); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLeashKnot.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLeashKnot.java new file mode 100644 index 0000000..90afeb4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLeashKnot.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelLeashKnot; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.EntityLeashKnot; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderLeashKnot extends Render +{ + private static final ResourceLocation LEASH_KNOT_TEXTURES = new ResourceLocation("textures/entity/lead_knot.png"); + private final ModelLeashKnot leashKnotModel = new ModelLeashKnot(); + + public RenderLeashKnot(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityLeashKnot entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + GlStateManager.translate((float)x, (float)y, (float)z); + float f = 0.0625F; + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.enableAlpha(); + this.bindEntityTexture(entity); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + this.leashKnotModel.render(entity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityLeashKnot entity) + { + return LEASH_KNOT_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLightningBolt.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLightningBolt.java new file mode 100644 index 0000000..f44afb9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLightningBolt.java @@ -0,0 +1,154 @@ +package net.minecraft.client.renderer.entity; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderLightningBolt extends Render +{ + public RenderLightningBolt(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityLightningBolt entity, double x, double y, double z, float entityYaw, float partialTicks) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE); + double[] adouble = new double[8]; + double[] adouble1 = new double[8]; + double d0 = 0.0D; + double d1 = 0.0D; + Random random = new Random(entity.boltVertex); + + for (int i = 7; i >= 0; --i) + { + adouble[i] = d0; + adouble1[i] = d1; + d0 += (double)(random.nextInt(11) - 5); + d1 += (double)(random.nextInt(11) - 5); + } + + for (int k1 = 0; k1 < 4; ++k1) + { + Random random1 = new Random(entity.boltVertex); + + for (int j = 0; j < 3; ++j) + { + int k = 7; + int l = 0; + + if (j > 0) + { + k = 7 - j; + } + + if (j > 0) + { + l = k - 2; + } + + double d2 = adouble[k] - d0; + double d3 = adouble1[k] - d1; + + for (int i1 = k; i1 >= l; --i1) + { + double d4 = d2; + double d5 = d3; + + if (j == 0) + { + d2 += (double)(random1.nextInt(11) - 5); + d3 += (double)(random1.nextInt(11) - 5); + } + else + { + d2 += (double)(random1.nextInt(31) - 15); + d3 += (double)(random1.nextInt(31) - 15); + } + + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + float f = 0.5F; + float f1 = 0.45F; + float f2 = 0.45F; + float f3 = 0.5F; + double d6 = 0.1D + (double)k1 * 0.2D; + + if (j == 0) + { + d6 *= (double)i1 * 0.1D + 1.0D; + } + + double d7 = 0.1D + (double)k1 * 0.2D; + + if (j == 0) + { + d7 *= (double)(i1 - 1) * 0.1D + 1.0D; + } + + for (int j1 = 0; j1 < 5; ++j1) + { + double d8 = x + 0.5D - d6; + double d9 = z + 0.5D - d6; + + if (j1 == 1 || j1 == 2) + { + d8 += d6 * 2.0D; + } + + if (j1 == 2 || j1 == 3) + { + d9 += d6 * 2.0D; + } + + double d10 = x + 0.5D - d7; + double d11 = z + 0.5D - d7; + + if (j1 == 1 || j1 == 2) + { + d10 += d7 * 2.0D; + } + + if (j1 == 2 || j1 == 3) + { + d11 += d7 * 2.0D; + } + + bufferbuilder.pos(d10 + d2, y + (double)(i1 * 16), d11 + d3).color(0.45F, 0.45F, 0.5F, 0.3F).endVertex(); + bufferbuilder.pos(d8 + d4, y + (double)((i1 + 1) * 16), d9 + d5).color(0.45F, 0.45F, 0.5F, 0.3F).endVertex(); + } + + tessellator.draw(); + } + } + } + + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + @Nullable + protected ResourceLocation getEntityTexture(EntityLightningBolt entity) + { + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLiving.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLiving.java new file mode 100644 index 0000000..87b318e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLiving.java @@ -0,0 +1,164 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.EntityLiving; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class RenderLiving extends RenderLivingBase +{ + public RenderLiving(RenderManager rendermanagerIn, ModelBase modelbaseIn, float shadowsizeIn) + { + super(rendermanagerIn, modelbaseIn, shadowsizeIn); + } + + protected boolean canRenderName(T entity) + { + return super.canRenderName(entity) && (entity.getAlwaysRenderNameTagForRender() || entity.hasCustomName() && entity == this.renderManager.pointedEntity); + } + + public boolean shouldRender(T livingEntity, ICamera camera, double camX, double camY, double camZ) + { + if (super.shouldRender(livingEntity, camera, camX, camY, camZ)) + { + return true; + } + else if (livingEntity.getLeashed() && livingEntity.getLeashHolder() != null) + { + Entity entity = livingEntity.getLeashHolder(); + return camera.isBoundingBoxInFrustum(entity.getRenderBoundingBox()); + } + else + { + return false; + } + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + + if (!this.renderOutlines) + { + this.renderLeash(entity, x, y, z, entityYaw, partialTicks); + } + } + + public void setLightmap(T entityLivingIn) + { + int i = entityLivingIn.getBrightnessForRender(); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + } + + /** + * Gets the value between start and end according to pct + */ + private double interpolateValue(double start, double end, double pct) + { + return start + (end - start) * pct; + } + + protected void renderLeash(T entityLivingIn, double x, double y, double z, float entityYaw, float partialTicks) + { + Entity entity = entityLivingIn.getLeashHolder(); + + if (entity != null) + { + y = y - (1.6D - (double)entityLivingIn.height) * 0.5D; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + double d0 = this.interpolateValue((double)entity.prevRotationYaw, (double)entity.rotationYaw, (double)(partialTicks * 0.5F)) * 0.01745329238474369D; + double d1 = this.interpolateValue((double)entity.prevRotationPitch, (double)entity.rotationPitch, (double)(partialTicks * 0.5F)) * 0.01745329238474369D; + double d2 = Math.cos(d0); + double d3 = Math.sin(d0); + double d4 = Math.sin(d1); + + if (entity instanceof EntityHanging) + { + d2 = 0.0D; + d3 = 0.0D; + d4 = -1.0D; + } + + double d5 = Math.cos(d1); + double d6 = this.interpolateValue(entity.prevPosX, entity.posX, (double)partialTicks) - d2 * 0.7D - d3 * 0.5D * d5; + double d7 = this.interpolateValue(entity.prevPosY + (double)entity.getEyeHeight() * 0.7D, entity.posY + (double)entity.getEyeHeight() * 0.7D, (double)partialTicks) - d4 * 0.5D - 0.25D; + double d8 = this.interpolateValue(entity.prevPosZ, entity.posZ, (double)partialTicks) - d3 * 0.7D + d2 * 0.5D * d5; + double d9 = this.interpolateValue((double)entityLivingIn.prevRenderYawOffset, (double)entityLivingIn.renderYawOffset, (double)partialTicks) * 0.01745329238474369D + (Math.PI / 2D); + d2 = Math.cos(d9) * (double)entityLivingIn.width * 0.4D; + d3 = Math.sin(d9) * (double)entityLivingIn.width * 0.4D; + double d10 = this.interpolateValue(entityLivingIn.prevPosX, entityLivingIn.posX, (double)partialTicks) + d2; + double d11 = this.interpolateValue(entityLivingIn.prevPosY, entityLivingIn.posY, (double)partialTicks); + double d12 = this.interpolateValue(entityLivingIn.prevPosZ, entityLivingIn.posZ, (double)partialTicks) + d3; + x = x + d2; + z = z + d3; + double d13 = (double)((float)(d6 - d10)); + double d14 = (double)((float)(d7 - d11)); + double d15 = (double)((float)(d8 - d12)); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.disableCull(); + int i = 24; + double d16 = 0.025D; + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + + for (int j = 0; j <= 24; ++j) + { + float f = 0.5F; + float f1 = 0.4F; + float f2 = 0.3F; + + if (j % 2 == 0) + { + f *= 0.7F; + f1 *= 0.7F; + f2 *= 0.7F; + } + + float f3 = (float)j / 24.0F; + bufferbuilder.pos(x + d13 * (double)f3 + 0.0D, y + d14 * (double)(f3 * f3 + f3) * 0.5D + (double)((24.0F - (float)j) / 18.0F + 0.125F), z + d15 * (double)f3).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d13 * (double)f3 + 0.025D, y + d14 * (double)(f3 * f3 + f3) * 0.5D + (double)((24.0F - (float)j) / 18.0F + 0.125F) + 0.025D, z + d15 * (double)f3).color(f, f1, f2, 1.0F).endVertex(); + } + + tessellator.draw(); + bufferbuilder.begin(5, DefaultVertexFormats.POSITION_COLOR); + + for (int k = 0; k <= 24; ++k) + { + float f4 = 0.5F; + float f5 = 0.4F; + float f6 = 0.3F; + + if (k % 2 == 0) + { + f4 *= 0.7F; + f5 *= 0.7F; + f6 *= 0.7F; + } + + float f7 = (float)k / 24.0F; + bufferbuilder.pos(x + d13 * (double)f7 + 0.0D, y + d14 * (double)(f7 * f7 + f7) * 0.5D + (double)((24.0F - (float)k) / 18.0F + 0.125F) + 0.025D, z + d15 * (double)f7).color(f4, f5, f6, 1.0F).endVertex(); + bufferbuilder.pos(x + d13 * (double)f7 + 0.025D, y + d14 * (double)(f7 * f7 + f7) * 0.5D + (double)((24.0F - (float)k) / 18.0F + 0.125F), z + d15 * (double)f7 + 0.025D).color(f4, f5, f6, 1.0F).endVertex(); + } + + tessellator.draw(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + GlStateManager.enableCull(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLivingBase.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLivingBase.java new file mode 100644 index 0000000..e3f8b73 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLivingBase.java @@ -0,0 +1,550 @@ +package net.minecraft.client.renderer.entity; + +import com.google.common.collect.Lists; +import java.nio.FloatBuffer; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.scoreboard.Team; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public abstract class RenderLivingBase extends Render +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final DynamicTexture TEXTURE_BRIGHTNESS = new DynamicTexture(16, 16); + protected ModelBase mainModel; + protected FloatBuffer brightnessBuffer = GLAllocation.createDirectFloatBuffer(4); + protected List> layerRenderers = Lists.>newArrayList(); + protected boolean renderMarker; + + public static float NAME_TAG_RANGE = 64.0f; + public static float NAME_TAG_RANGE_SNEAK = 32.0f; + + public RenderLivingBase(RenderManager renderManagerIn, ModelBase modelBaseIn, float shadowSizeIn) + { + super(renderManagerIn); + this.mainModel = modelBaseIn; + this.shadowSize = shadowSizeIn; + } + + public > boolean addLayer(U layer) + { + return this.layerRenderers.add((LayerRenderer)layer); + } + + public ModelBase getMainModel() + { + return this.mainModel; + } + + /** + * Returns a rotation angle that is inbetween two other rotation angles. par1 and par2 are the angles between which + * to interpolate, par3 is probably a float between 0.0 and 1.0 that tells us where "between" the two angles we are. + * Example: par1 = 30, par2 = 50, par3 = 0.5, then return = 40 + */ + protected float interpolateRotation(float prevYawOffset, float yawOffset, float partialTicks) + { + float f; + + for (f = yawOffset - prevYawOffset; f < -180.0F; f += 360.0F) + { + ; + } + + while (f >= 180.0F) + { + f -= 360.0F; + } + + return prevYawOffset + partialTicks * f; + } + + public void transformHeldFull3DItemLayer() + { + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Pre(entity, this, partialTicks, x, y, z))) return; + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + this.mainModel.swingProgress = this.getSwingProgress(entity, partialTicks); + boolean shouldSit = entity.isRiding() && (entity.getRidingEntity() != null && entity.getRidingEntity().shouldRiderSit()); + this.mainModel.isRiding = shouldSit; + this.mainModel.isChild = entity.isChild(); + + try + { + float f = this.interpolateRotation(entity.prevRenderYawOffset, entity.renderYawOffset, partialTicks); + float f1 = this.interpolateRotation(entity.prevRotationYawHead, entity.rotationYawHead, partialTicks); + float f2 = f1 - f; + + if (shouldSit && entity.getRidingEntity() instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)entity.getRidingEntity(); + f = this.interpolateRotation(entitylivingbase.prevRenderYawOffset, entitylivingbase.renderYawOffset, partialTicks); + f2 = f1 - f; + float f3 = MathHelper.wrapDegrees(f2); + + if (f3 < -85.0F) + { + f3 = -85.0F; + } + + if (f3 >= 85.0F) + { + f3 = 85.0F; + } + + f = f1 - f3; + + if (f3 * f3 > 2500.0F) + { + f += f3 * 0.2F; + } + + f2 = f1 - f; + } + + float f7 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + this.renderLivingAt(entity, x, y, z); + float f8 = this.handleRotationFloat(entity, partialTicks); + this.applyRotations(entity, f8, f, partialTicks); + float f4 = this.prepareScale(entity, partialTicks); + float f5 = 0.0F; + float f6 = 0.0F; + + if (!entity.isRiding()) + { + f5 = entity.prevLimbSwingAmount + (entity.limbSwingAmount - entity.prevLimbSwingAmount) * partialTicks; + f6 = entity.limbSwing - entity.limbSwingAmount * (1.0F - partialTicks); + + if (entity.isChild()) + { + f6 *= 3.0F; + } + + if (f5 > 1.0F) + { + f5 = 1.0F; + } + f2 = f1 - f; // Forge: Fix MC-1207 + } + + GlStateManager.enableAlpha(); + this.mainModel.setLivingAnimations(entity, f6, f5, partialTicks); + this.mainModel.setRotationAngles(f6, f5, f8, f2, f7, f4, entity); + + if (this.renderOutlines) + { + boolean flag1 = this.setScoreTeamColor(entity); + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + + if (!this.renderMarker) + { + this.renderModel(entity, f6, f5, f8, f2, f7, f4); + } + + if (!(entity instanceof EntityPlayer) || !((EntityPlayer)entity).isSpectator()) + { + this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4); + } + + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + + if (flag1) + { + this.unsetScoreTeamColor(); + } + } + else + { + boolean flag = this.setDoRenderBrightness(entity, partialTicks); + this.renderModel(entity, f6, f5, f8, f2, f7, f4); + + if (flag) + { + this.unsetBrightness(); + } + + GlStateManager.depthMask(true); + + if (!(entity instanceof EntityPlayer) || !((EntityPlayer)entity).isSpectator()) + { + this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4); + } + } + + GlStateManager.disableRescaleNormal(); + } + catch (Exception exception) + { + LOGGER.error("Couldn't render entity", (Throwable)exception); + } + + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.enableCull(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Post(entity, this, partialTicks, x, y, z)); + } + + public float prepareScale(T entitylivingbaseIn, float partialTicks) + { + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + this.preRenderCallback(entitylivingbaseIn, partialTicks); + float f = 0.0625F; + GlStateManager.translate(0.0F, -1.501F, 0.0F); + return 0.0625F; + } + + protected boolean setScoreTeamColor(T entityLivingBaseIn) + { + GlStateManager.disableLighting(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.disableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + return true; + } + + protected void unsetScoreTeamColor() + { + GlStateManager.enableLighting(); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + /** + * Renders the model in RenderLiving + */ + protected void renderModel(T entitylivingbaseIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor) + { + boolean flag = this.isVisible(entitylivingbaseIn); + boolean flag1 = !flag && !entitylivingbaseIn.isInvisibleToPlayer(Minecraft.getMinecraft().player); + + if (flag || flag1) + { + if (!this.bindEntityTexture(entitylivingbaseIn)) + { + return; + } + + if (flag1) + { + GlStateManager.enableBlendProfile(GlStateManager.Profile.TRANSPARENT_MODEL); + } + + this.mainModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor); + + if (flag1) + { + GlStateManager.disableBlendProfile(GlStateManager.Profile.TRANSPARENT_MODEL); + } + } + } + + protected boolean isVisible(T p_193115_1_) + { + return !p_193115_1_.isInvisible() || this.renderOutlines; + } + + protected boolean setDoRenderBrightness(T entityLivingBaseIn, float partialTicks) + { + return this.setBrightness(entityLivingBaseIn, partialTicks, true); + } + + protected boolean setBrightness(T entitylivingbaseIn, float partialTicks, boolean combineTextures) + { + float f = entitylivingbaseIn.getBrightness(); + int i = this.getColorMultiplier(entitylivingbaseIn, f, partialTicks); + boolean flag = (i >> 24 & 255) > 0; + boolean flag1 = entitylivingbaseIn.hurtTime > 0 || entitylivingbaseIn.deathTime > 0; + + if (!flag && !flag1) + { + return false; + } + else if (!flag && !combineTextures) + { + return false; + } + else + { + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.defaultTexUnit); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PRIMARY_COLOR); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 7681); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.defaultTexUnit); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, OpenGlHelper.GL_INTERPOLATE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.GL_CONSTANT); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PREVIOUS); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE2_RGB, OpenGlHelper.GL_CONSTANT); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND2_RGB, 770); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 7681); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.GL_PREVIOUS); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770); + this.brightnessBuffer.position(0); + + if (flag1) + { + this.brightnessBuffer.put(1.0F); + this.brightnessBuffer.put(0.0F); + this.brightnessBuffer.put(0.0F); + this.brightnessBuffer.put(0.3F); + } + else + { + float f1 = (float)(i >> 24 & 255) / 255.0F; + float f2 = (float)(i >> 16 & 255) / 255.0F; + float f3 = (float)(i >> 8 & 255) / 255.0F; + float f4 = (float)(i & 255) / 255.0F; + this.brightnessBuffer.put(f2); + this.brightnessBuffer.put(f3); + this.brightnessBuffer.put(f4); + this.brightnessBuffer.put(1.0F - f1); + } + + this.brightnessBuffer.flip(); + GlStateManager.glTexEnv(8960, 8705, this.brightnessBuffer); + GlStateManager.setActiveTexture(OpenGlHelper.GL_TEXTURE2); + GlStateManager.enableTexture2D(); + GlStateManager.bindTexture(TEXTURE_BRIGHTNESS.getGlTextureId()); + GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.GL_PREVIOUS); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.lightmapTexUnit); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 7681); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.GL_PREVIOUS); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + return true; + } + } + + protected void unsetBrightness() + { + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + GlStateManager.enableTexture2D(); + GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, OpenGlHelper.defaultTexUnit); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PRIMARY_COLOR); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, OpenGlHelper.defaultTexUnit); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_ALPHA, OpenGlHelper.GL_PRIMARY_COLOR); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_ALPHA, 770); + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, 5890); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PREVIOUS); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, 5890); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.setActiveTexture(OpenGlHelper.GL_TEXTURE2); + GlStateManager.disableTexture2D(); + GlStateManager.bindTexture(0); + GlStateManager.glTexEnvi(8960, 8704, OpenGlHelper.GL_COMBINE); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_RGB, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND1_RGB, 768); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_RGB, 5890); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE1_RGB, OpenGlHelper.GL_PREVIOUS); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_COMBINE_ALPHA, 8448); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_OPERAND0_ALPHA, 770); + GlStateManager.glTexEnvi(8960, OpenGlHelper.GL_SOURCE0_ALPHA, 5890); + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + /** + * Sets a simple glTranslate on a LivingEntity. + */ + protected void renderLivingAt(T entityLivingBaseIn, double x, double y, double z) + { + GlStateManager.translate((float)x, (float)y, (float)z); + } + + protected void applyRotations(T entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + GlStateManager.rotate(180.0F - rotationYaw, 0.0F, 1.0F, 0.0F); + + if (entityLiving.deathTime > 0) + { + float f = ((float)entityLiving.deathTime + partialTicks - 1.0F) / 20.0F * 1.6F; + f = MathHelper.sqrt(f); + + if (f > 1.0F) + { + f = 1.0F; + } + + GlStateManager.rotate(f * this.getDeathMaxRotation(entityLiving), 0.0F, 0.0F, 1.0F); + } + else + { + String s = TextFormatting.getTextWithoutFormattingCodes(entityLiving.getName()); + + if (s != null && ("Dinnerbone".equals(s) || "Grumm".equals(s)) && (!(entityLiving instanceof EntityPlayer) || ((EntityPlayer)entityLiving).isWearing(EnumPlayerModelParts.CAPE))) + { + GlStateManager.translate(0.0F, entityLiving.height + 0.1F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + } + } + } + + /** + * Returns where in the swing animation the living entity is (from 0 to 1). Args : entity, partialTickTime + */ + protected float getSwingProgress(T livingBase, float partialTickTime) + { + return livingBase.getSwingProgress(partialTickTime); + } + + /** + * Defines what float the third param in setRotationAngles of ModelBase is + */ + protected float handleRotationFloat(T livingBase, float partialTicks) + { + return (float)livingBase.ticksExisted + partialTicks; + } + + protected void renderLayers(T entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scaleIn) + { + for (LayerRenderer layerrenderer : this.layerRenderers) + { + boolean flag = this.setBrightness(entitylivingbaseIn, partialTicks, layerrenderer.shouldCombineTextures()); + layerrenderer.doRenderLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scaleIn); + + if (flag) + { + this.unsetBrightness(); + } + } + } + + protected float getDeathMaxRotation(T entityLivingBaseIn) + { + return 90.0F; + } + + /** + * Gets an RGBA int color multiplier to apply. + */ + protected int getColorMultiplier(T entitylivingbaseIn, float lightBrightness, float partialTickTime) + { + return 0; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(T entitylivingbaseIn, float partialTickTime) + { + } + + public void renderName(T entity, double x, double y, double z) + { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Specials.Pre(entity, this, x, y, z))) return; + if (this.canRenderName(entity)) + { + double d0 = entity.getDistanceSq(this.renderManager.renderViewEntity); + float f = entity.isSneaking() ? NAME_TAG_RANGE_SNEAK : NAME_TAG_RANGE; + + if (d0 < (double)(f * f)) + { + String s = entity.getDisplayName().getFormattedText(); + GlStateManager.alphaFunc(516, 0.1F); + this.renderEntityName(entity, x, y, z, s, d0); + } + } + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderLivingEvent.Specials.Post(entity, this, x, y, z)); + } + + protected boolean canRenderName(T entity) + { + EntityPlayerSP entityplayersp = Minecraft.getMinecraft().player; + boolean flag = !entity.isInvisibleToPlayer(entityplayersp); + + if (entity != entityplayersp) + { + Team team = entity.getTeam(); + Team team1 = entityplayersp.getTeam(); + + if (team != null) + { + Team.EnumVisible team$enumvisible = team.getNameTagVisibility(); + + switch (team$enumvisible) + { + case ALWAYS: + return flag; + case NEVER: + return false; + case HIDE_FOR_OTHER_TEAMS: + return team1 == null ? flag : team.isSameTeam(team1) && (team.getSeeFriendlyInvisiblesEnabled() || flag); + case HIDE_FOR_OWN_TEAM: + return team1 == null ? flag : !team.isSameTeam(team1) && flag; + default: + return true; + } + } + } + + return Minecraft.isGuiEnabled() && entity != this.renderManager.renderViewEntity && flag && !entity.isBeingRidden(); + } + + static + { + int[] aint = TEXTURE_BRIGHTNESS.getTextureData(); + + for (int i = 0; i < 256; ++i) + { + aint[i] = -1; + } + + TEXTURE_BRIGHTNESS.updateDynamicTexture(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLlama.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLlama.java new file mode 100644 index 0000000..4c91007 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLlama.java @@ -0,0 +1,28 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelLlama; +import net.minecraft.client.renderer.entity.layers.LayerLlamaDecor; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderLlama extends RenderLiving +{ + private static final ResourceLocation[] LLAMA_TEXTURES = new ResourceLocation[] {new ResourceLocation("textures/entity/llama/llama_creamy.png"), new ResourceLocation("textures/entity/llama/llama_white.png"), new ResourceLocation("textures/entity/llama/llama_brown.png"), new ResourceLocation("textures/entity/llama/llama_gray.png")}; + + public RenderLlama(RenderManager p_i47203_1_) + { + super(p_i47203_1_, new ModelLlama(0.0F), 0.7F); + this.addLayer(new LayerLlamaDecor(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityLlama entity) + { + return LLAMA_TEXTURES[entity.getVariant()]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLlamaSpit.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLlamaSpit.java new file mode 100644 index 0000000..209897d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderLlamaSpit.java @@ -0,0 +1,57 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelLlamaSpit; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderLlamaSpit extends Render +{ + private static final ResourceLocation LLAMA_SPIT_TEXTURE = new ResourceLocation("textures/entity/llama/spit.png"); + private final ModelLlamaSpit model = new ModelLlamaSpit(); + + public RenderLlamaSpit(RenderManager p_i47202_1_) + { + super(p_i47202_1_); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityLlamaSpit entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y + 0.15F, (float)z); + GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks - 90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks, 0.0F, 0.0F, 1.0F); + this.bindEntityTexture(entity); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + this.model.render(entity, partialTicks, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityLlamaSpit entity) + { + return LLAMA_SPIT_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMagmaCube.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMagmaCube.java new file mode 100644 index 0000000..87ec86d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMagmaCube.java @@ -0,0 +1,38 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelMagmaCube; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderMagmaCube extends RenderLiving +{ + private static final ResourceLocation MAGMA_CUBE_TEXTURES = new ResourceLocation("textures/entity/slime/magmacube.png"); + + public RenderMagmaCube(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelMagmaCube(), 0.25F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityMagmaCube entity) + { + return MAGMA_CUBE_TEXTURES; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityMagmaCube entitylivingbaseIn, float partialTickTime) + { + int i = entitylivingbaseIn.getSlimeSize(); + float f = (entitylivingbaseIn.prevSquishFactor + (entitylivingbaseIn.squishFactor - entitylivingbaseIn.prevSquishFactor) * partialTickTime) / ((float)i * 0.5F + 1.0F); + float f1 = 1.0F / (f + 1.0F); + GlStateManager.scale(f1 * (float)i, 1.0F / f1 * (float)i, f1 * (float)i); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderManager.java new file mode 100644 index 0000000..61cbad4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderManager.java @@ -0,0 +1,548 @@ +package net.minecraft.client.renderer.entity; + +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBed; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.EntityLeashKnot; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityMinecartMobSpawner; +import net.minecraft.entity.item.EntityMinecartTNT; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityElderGuardian; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.monster.EntityEvoker; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.EntityGiantZombie; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.entity.monster.EntityHusk; +import net.minecraft.entity.monster.EntityIllusionIllager; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.monster.EntityPolarBear; +import net.minecraft.entity.monster.EntityShulker; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.monster.EntityStray; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.entity.monster.EntityVindicator; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityWitherSkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityDonkey; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.entity.passive.EntityMule; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntitySkeletonHorse; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.passive.EntityZombieHorse; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.entity.projectile.EntityLargeFireball; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderManager +{ + public final Map < Class , Render > entityRenderMap = Maps. < Class , Render > newHashMap(); + /** lists the various player skin types with their associated Renderer class instances. */ + private final Map skinMap = Maps.newHashMap(); + private final RenderPlayer playerRenderer; + /** Renders fonts */ + private FontRenderer textRenderer; + private double renderPosX; + private double renderPosY; + private double renderPosZ; + public TextureManager renderEngine; + /** Reference to the World object. */ + public World world; + /** RenderManager's field for the renderViewEntity */ + public Entity renderViewEntity; + public Entity pointedEntity; + public float playerViewY; + public float playerViewX; + /** Reference to the GameSettings object. */ + public GameSettings options; + public double viewerPosX; + public double viewerPosY; + public double viewerPosZ; + private boolean renderOutlines; + private boolean renderShadow = true; + /** whether bounding box should be rendered or not */ + private boolean debugBoundingBox; + + public RenderManager(TextureManager renderEngineIn, RenderItem itemRendererIn) + { + this.renderEngine = renderEngineIn; + this.entityRenderMap.put(EntityCaveSpider.class, new RenderCaveSpider(this)); + this.entityRenderMap.put(EntitySpider.class, new RenderSpider(this)); + this.entityRenderMap.put(EntityPig.class, new RenderPig(this)); + this.entityRenderMap.put(EntitySheep.class, new RenderSheep(this)); + this.entityRenderMap.put(EntityCow.class, new RenderCow(this)); + this.entityRenderMap.put(EntityMooshroom.class, new RenderMooshroom(this)); + this.entityRenderMap.put(EntityWolf.class, new RenderWolf(this)); + this.entityRenderMap.put(EntityChicken.class, new RenderChicken(this)); + this.entityRenderMap.put(EntityOcelot.class, new RenderOcelot(this)); + this.entityRenderMap.put(EntityRabbit.class, new RenderRabbit(this)); + this.entityRenderMap.put(EntityParrot.class, new RenderParrot(this)); + this.entityRenderMap.put(EntitySilverfish.class, new RenderSilverfish(this)); + this.entityRenderMap.put(EntityEndermite.class, new RenderEndermite(this)); + this.entityRenderMap.put(EntityCreeper.class, new RenderCreeper(this)); + this.entityRenderMap.put(EntityEnderman.class, new RenderEnderman(this)); + this.entityRenderMap.put(EntitySnowman.class, new RenderSnowMan(this)); + this.entityRenderMap.put(EntitySkeleton.class, new RenderSkeleton(this)); + this.entityRenderMap.put(EntityWitherSkeleton.class, new RenderWitherSkeleton(this)); + this.entityRenderMap.put(EntityStray.class, new RenderStray(this)); + this.entityRenderMap.put(EntityWitch.class, new RenderWitch(this)); + this.entityRenderMap.put(EntityBlaze.class, new RenderBlaze(this)); + this.entityRenderMap.put(EntityPigZombie.class, new RenderPigZombie(this)); + this.entityRenderMap.put(EntityZombie.class, new RenderZombie(this)); + this.entityRenderMap.put(EntityZombieVillager.class, new RenderZombieVillager(this)); + this.entityRenderMap.put(EntityHusk.class, new RenderHusk(this)); + this.entityRenderMap.put(EntitySlime.class, new RenderSlime(this)); + this.entityRenderMap.put(EntityMagmaCube.class, new RenderMagmaCube(this)); + this.entityRenderMap.put(EntityGiantZombie.class, new RenderGiantZombie(this, 6.0F)); + this.entityRenderMap.put(EntityGhast.class, new RenderGhast(this)); + this.entityRenderMap.put(EntitySquid.class, new RenderSquid(this)); + this.entityRenderMap.put(EntityVillager.class, new RenderVillager(this)); + this.entityRenderMap.put(EntityIronGolem.class, new RenderIronGolem(this)); + this.entityRenderMap.put(EntityBat.class, new RenderBat(this)); + this.entityRenderMap.put(EntityGuardian.class, new RenderGuardian(this)); + this.entityRenderMap.put(EntityElderGuardian.class, new RenderElderGuardian(this)); + this.entityRenderMap.put(EntityShulker.class, new RenderShulker(this)); + this.entityRenderMap.put(EntityPolarBear.class, new RenderPolarBear(this)); + this.entityRenderMap.put(EntityEvoker.class, new RenderEvoker(this)); + this.entityRenderMap.put(EntityVindicator.class, new RenderVindicator(this)); + this.entityRenderMap.put(EntityVex.class, new RenderVex(this)); + this.entityRenderMap.put(EntityIllusionIllager.class, new RenderIllusionIllager(this)); + this.entityRenderMap.put(EntityDragon.class, new RenderDragon(this)); + this.entityRenderMap.put(EntityEnderCrystal.class, new RenderEnderCrystal(this)); + this.entityRenderMap.put(EntityWither.class, new RenderWither(this)); + this.entityRenderMap.put(Entity.class, new RenderEntity(this)); + this.entityRenderMap.put(EntityPainting.class, new RenderPainting(this)); + this.entityRenderMap.put(EntityItemFrame.class, new RenderItemFrame(this, itemRendererIn)); + this.entityRenderMap.put(EntityLeashKnot.class, new RenderLeashKnot(this)); + this.entityRenderMap.put(EntityTippedArrow.class, new RenderTippedArrow(this)); + this.entityRenderMap.put(EntitySpectralArrow.class, new RenderSpectralArrow(this)); + this.entityRenderMap.put(EntitySnowball.class, new RenderSnowball(this, Items.SNOWBALL, itemRendererIn)); + this.entityRenderMap.put(EntityEnderPearl.class, new RenderSnowball(this, Items.ENDER_PEARL, itemRendererIn)); + this.entityRenderMap.put(EntityEnderEye.class, new RenderSnowball(this, Items.ENDER_EYE, itemRendererIn)); + this.entityRenderMap.put(EntityEgg.class, new RenderSnowball(this, Items.EGG, itemRendererIn)); + this.entityRenderMap.put(EntityPotion.class, new RenderPotion(this, itemRendererIn)); + this.entityRenderMap.put(EntityExpBottle.class, new RenderSnowball(this, Items.EXPERIENCE_BOTTLE, itemRendererIn)); + this.entityRenderMap.put(EntityFireworkRocket.class, new RenderSnowball(this, Items.FIREWORKS, itemRendererIn)); + this.entityRenderMap.put(EntityLargeFireball.class, new RenderFireball(this, 2.0F)); + this.entityRenderMap.put(EntitySmallFireball.class, new RenderFireball(this, 0.5F)); + this.entityRenderMap.put(EntityDragonFireball.class, new RenderDragonFireball(this)); + this.entityRenderMap.put(EntityWitherSkull.class, new RenderWitherSkull(this)); + this.entityRenderMap.put(EntityShulkerBullet.class, new RenderShulkerBullet(this)); + this.entityRenderMap.put(EntityItem.class, new RenderEntityItem(this, itemRendererIn)); + this.entityRenderMap.put(EntityXPOrb.class, new RenderXPOrb(this)); + this.entityRenderMap.put(EntityTNTPrimed.class, new RenderTNTPrimed(this)); + this.entityRenderMap.put(EntityFallingBlock.class, new RenderFallingBlock(this)); + this.entityRenderMap.put(EntityArmorStand.class, new RenderArmorStand(this)); + this.entityRenderMap.put(EntityEvokerFangs.class, new RenderEvokerFangs(this)); + this.entityRenderMap.put(EntityMinecartTNT.class, new RenderTntMinecart(this)); + this.entityRenderMap.put(EntityMinecartMobSpawner.class, new RenderMinecartMobSpawner(this)); + this.entityRenderMap.put(EntityMinecart.class, new RenderMinecart(this)); + this.entityRenderMap.put(EntityBoat.class, new RenderBoat(this)); + this.entityRenderMap.put(EntityFishHook.class, new RenderFish(this)); + this.entityRenderMap.put(EntityAreaEffectCloud.class, new RenderAreaEffectCloud(this)); + this.entityRenderMap.put(EntityHorse.class, new RenderHorse(this)); + this.entityRenderMap.put(EntitySkeletonHorse.class, new RenderAbstractHorse(this)); + this.entityRenderMap.put(EntityZombieHorse.class, new RenderAbstractHorse(this)); + this.entityRenderMap.put(EntityMule.class, new RenderAbstractHorse(this, 0.92F)); + this.entityRenderMap.put(EntityDonkey.class, new RenderAbstractHorse(this, 0.87F)); + this.entityRenderMap.put(EntityLlama.class, new RenderLlama(this)); + this.entityRenderMap.put(EntityLlamaSpit.class, new RenderLlamaSpit(this)); + this.entityRenderMap.put(EntityLightningBolt.class, new RenderLightningBolt(this)); + this.playerRenderer = new RenderPlayer(this); + this.skinMap.put("default", this.playerRenderer); + this.skinMap.put("slim", new RenderPlayer(this, true)); + net.minecraftforge.fml.client.registry.RenderingRegistry.loadEntityRenderers(this, this.entityRenderMap); + } + + public Map getSkinMap() { + return (Map) java.util.Collections.unmodifiableMap(skinMap); + } + + public void setRenderPosition(double renderPosXIn, double renderPosYIn, double renderPosZIn) + { + this.renderPosX = renderPosXIn; + this.renderPosY = renderPosYIn; + this.renderPosZ = renderPosZIn; + } + + public Render getEntityClassRenderObject(Class entityClass) + { + Render render = (Render)this.entityRenderMap.get(entityClass); + + if (render == null && entityClass != Entity.class) + { + render = this.getEntityClassRenderObject((Class )entityClass.getSuperclass()); + this.entityRenderMap.put(entityClass, render); + } + + return render; + } + + @Nullable + public Render getEntityRenderObject(Entity entityIn) + { + if (entityIn instanceof AbstractClientPlayer) + { + String s = ((AbstractClientPlayer)entityIn).getSkinType(); + RenderPlayer renderplayer = this.skinMap.get(s); + return (Render)(renderplayer != null ? renderplayer : this.playerRenderer); + } + else + { + return this.getEntityClassRenderObject(entityIn.getClass()); + } + } + + public void cacheActiveRenderInfo(World worldIn, FontRenderer textRendererIn, Entity livingPlayerIn, Entity pointedEntityIn, GameSettings optionsIn, float partialTicks) + { + this.world = worldIn; + this.options = optionsIn; + this.renderViewEntity = livingPlayerIn; + this.pointedEntity = pointedEntityIn; + this.textRenderer = textRendererIn; + + if (livingPlayerIn instanceof EntityLivingBase && ((EntityLivingBase)livingPlayerIn).isPlayerSleeping()) + { + IBlockState iblockstate = worldIn.getBlockState(new BlockPos(livingPlayerIn)); + Block block = iblockstate.getBlock(); + + if (block.isBed(iblockstate, worldIn, new BlockPos(livingPlayerIn), (EntityLivingBase)livingPlayerIn)) + { + int i = block.getBedDirection(iblockstate, worldIn, new BlockPos(livingPlayerIn)).getHorizontalIndex(); + this.playerViewY = (float)(i * 90 + 180); + this.playerViewX = 0.0F; + } + } + else + { + this.playerViewY = livingPlayerIn.prevRotationYaw + (livingPlayerIn.rotationYaw - livingPlayerIn.prevRotationYaw) * partialTicks; + this.playerViewX = livingPlayerIn.prevRotationPitch + (livingPlayerIn.rotationPitch - livingPlayerIn.prevRotationPitch) * partialTicks; + } + + if (optionsIn.thirdPersonView == 2) + { + this.playerViewY += 180.0F; + } + + this.viewerPosX = livingPlayerIn.lastTickPosX + (livingPlayerIn.posX - livingPlayerIn.lastTickPosX) * (double)partialTicks; + this.viewerPosY = livingPlayerIn.lastTickPosY + (livingPlayerIn.posY - livingPlayerIn.lastTickPosY) * (double)partialTicks; + this.viewerPosZ = livingPlayerIn.lastTickPosZ + (livingPlayerIn.posZ - livingPlayerIn.lastTickPosZ) * (double)partialTicks; + } + + public void setPlayerViewY(float playerViewYIn) + { + this.playerViewY = playerViewYIn; + } + + public boolean isRenderShadow() + { + return this.renderShadow; + } + + public void setRenderShadow(boolean renderShadowIn) + { + this.renderShadow = renderShadowIn; + } + + public void setDebugBoundingBox(boolean debugBoundingBoxIn) + { + this.debugBoundingBox = debugBoundingBoxIn; + } + + public boolean isDebugBoundingBox() + { + return this.debugBoundingBox; + } + + public boolean isRenderMultipass(Entity p_188390_1_) + { + return this.getEntityRenderObject(p_188390_1_).isMultipass(); + } + + public boolean shouldRender(Entity entityIn, ICamera camera, double camX, double camY, double camZ) + { + Render render = this.getEntityRenderObject(entityIn); + return render != null && render.shouldRender(entityIn, camera, camX, camY, camZ); + } + + public void renderEntityStatic(Entity entityIn, float partialTicks, boolean p_188388_3_) + { + if (entityIn.ticksExisted == 0) + { + entityIn.lastTickPosX = entityIn.posX; + entityIn.lastTickPosY = entityIn.posY; + entityIn.lastTickPosZ = entityIn.posZ; + } + + double d0 = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)partialTicks; + double d1 = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)partialTicks; + double d2 = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)partialTicks; + float f = entityIn.prevRotationYaw + (entityIn.rotationYaw - entityIn.prevRotationYaw) * partialTicks; + int i = entityIn.getBrightnessForRender(); + + if (entityIn.isBurning()) + { + i = 15728880; + } + + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.renderEntity(entityIn, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ, f, partialTicks, p_188388_3_); + } + + public void renderEntity(Entity entityIn, double x, double y, double z, float yaw, float partialTicks, boolean p_188391_10_) + { + Render render = null; + + try + { + render = this.getEntityRenderObject(entityIn); + + if (render != null && this.renderEngine != null) + { + try + { + render.setRenderOutlines(this.renderOutlines); + render.doRender(entityIn, x, y, z, yaw, partialTicks); + } + catch (Throwable throwable1) + { + throw new ReportedException(CrashReport.makeCrashReport(throwable1, "Rendering entity in world")); + } + + try + { + if (!this.renderOutlines) + { + render.doRenderShadowAndFire(entityIn, x, y, z, yaw, partialTicks); + } + } + catch (Throwable throwable2) + { + throw new ReportedException(CrashReport.makeCrashReport(throwable2, "Post-rendering entity in world")); + } + + if (this.debugBoundingBox && !entityIn.isInvisible() && !p_188391_10_ && !Minecraft.getMinecraft().isReducedDebug()) + { + try + { + this.renderDebugBoundingBox(entityIn, x, y, z, yaw, partialTicks); + } + catch (Throwable throwable) + { + throw new ReportedException(CrashReport.makeCrashReport(throwable, "Rendering entity hitbox in world")); + } + } + } + } + catch (Throwable throwable3) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable3, "Rendering entity in world"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity being rendered"); + entityIn.addEntityCrashInfo(crashreportcategory); + CrashReportCategory crashreportcategory1 = crashreport.makeCategory("Renderer details"); + crashreportcategory1.addCrashSection("Assigned renderer", render); + crashreportcategory1.addCrashSection("Location", CrashReportCategory.getCoordinateInfo(x, y, z)); + crashreportcategory1.addCrashSection("Rotation", Float.valueOf(yaw)); + crashreportcategory1.addCrashSection("Delta", Float.valueOf(partialTicks)); + throw new ReportedException(crashreport); + } + } + + public void renderMultipass(Entity p_188389_1_, float p_188389_2_) + { + if (p_188389_1_.ticksExisted == 0) + { + p_188389_1_.lastTickPosX = p_188389_1_.posX; + p_188389_1_.lastTickPosY = p_188389_1_.posY; + p_188389_1_.lastTickPosZ = p_188389_1_.posZ; + } + + double d0 = p_188389_1_.lastTickPosX + (p_188389_1_.posX - p_188389_1_.lastTickPosX) * (double)p_188389_2_; + double d1 = p_188389_1_.lastTickPosY + (p_188389_1_.posY - p_188389_1_.lastTickPosY) * (double)p_188389_2_; + double d2 = p_188389_1_.lastTickPosZ + (p_188389_1_.posZ - p_188389_1_.lastTickPosZ) * (double)p_188389_2_; + float f = p_188389_1_.prevRotationYaw + (p_188389_1_.rotationYaw - p_188389_1_.prevRotationYaw) * p_188389_2_; + int i = p_188389_1_.getBrightnessForRender(); + + if (p_188389_1_.isBurning()) + { + i = 15728880; + } + + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Render render = this.getEntityRenderObject(p_188389_1_); + + if (render != null && this.renderEngine != null) + { + render.renderMultipass(p_188389_1_, d0 - this.renderPosX, d1 - this.renderPosY, d2 - this.renderPosZ, f, p_188389_2_); + } + } + + /** + * Renders the bounding box around an entity when F3+B is pressed + */ + private void renderDebugBoundingBox(Entity entityIn, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.depthMask(false); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.disableCull(); + GlStateManager.disableBlend(); + float f = entityIn.width / 2.0F; + AxisAlignedBB axisalignedbb = entityIn.getEntityBoundingBox(); + RenderGlobal.drawBoundingBox(axisalignedbb.minX - entityIn.posX + x, axisalignedbb.minY - entityIn.posY + y, axisalignedbb.minZ - entityIn.posZ + z, axisalignedbb.maxX - entityIn.posX + x, axisalignedbb.maxY - entityIn.posY + y, axisalignedbb.maxZ - entityIn.posZ + z, 1.0F, 1.0F, 1.0F, 1.0F); + Entity[] aentity = entityIn.getParts(); + + if (aentity != null) + { + for (Entity entity : aentity) + { + double d0 = (entity.posX - entity.prevPosX) * (double)partialTicks; + double d1 = (entity.posY - entity.prevPosY) * (double)partialTicks; + double d2 = (entity.posZ - entity.prevPosZ) * (double)partialTicks; + AxisAlignedBB axisalignedbb1 = entity.getEntityBoundingBox(); + RenderGlobal.drawBoundingBox(axisalignedbb1.minX - this.renderPosX + d0, axisalignedbb1.minY - this.renderPosY + d1, axisalignedbb1.minZ - this.renderPosZ + d2, axisalignedbb1.maxX - this.renderPosX + d0, axisalignedbb1.maxY - this.renderPosY + d1, axisalignedbb1.maxZ - this.renderPosZ + d2, 0.25F, 1.0F, 0.0F, 1.0F); + } + } + + if (entityIn instanceof EntityLivingBase) + { + float f1 = 0.01F; + RenderGlobal.drawBoundingBox(x - (double)f, y + (double)entityIn.getEyeHeight() - 0.009999999776482582D, z - (double)f, x + (double)f, y + (double)entityIn.getEyeHeight() + 0.009999999776482582D, z + (double)f, 1.0F, 0.0F, 0.0F, 1.0F); + } + + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + Vec3d vec3d = entityIn.getLook(partialTicks); + bufferbuilder.begin(3, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(x, y + (double)entityIn.getEyeHeight(), z).color(0, 0, 255, 255).endVertex(); + bufferbuilder.pos(x + vec3d.x * 2.0D, y + (double)entityIn.getEyeHeight() + vec3d.y * 2.0D, z + vec3d.z * 2.0D).color(0, 0, 255, 255).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.enableLighting(); + GlStateManager.enableCull(); + GlStateManager.disableBlend(); + GlStateManager.depthMask(true); + } + + /** + * World sets this RenderManager's worldObj to the world provided + */ + public void setWorld(@Nullable World worldIn) + { + this.world = worldIn; + + if (worldIn == null) + { + this.renderViewEntity = null; + } + } + + public double getDistanceToCamera(double x, double y, double z) + { + double d0 = x - this.viewerPosX; + double d1 = y - this.viewerPosY; + double d2 = z - this.viewerPosZ; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + /** + * Returns the font renderer + */ + public FontRenderer getFontRenderer() + { + return this.textRenderer; + } + + public void setRenderOutlines(boolean renderOutlinesIn) + { + this.renderOutlines = renderOutlinesIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMinecart.java new file mode 100644 index 0000000..362a01e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMinecart.java @@ -0,0 +1,144 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelMinecart; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderMinecart extends Render +{ + private static final ResourceLocation MINECART_TEXTURES = new ResourceLocation("textures/entity/minecart.png"); + /** instance of ModelMinecart for rendering */ + protected ModelBase modelMinecart = new ModelMinecart(); + + public RenderMinecart(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.5F; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + this.bindEntityTexture(entity); + long i = (long)entity.getEntityId() * 493286711L; + i = i * i * 4392167121L + i * 98761L; + float f = (((float)(i >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float f1 = (((float)(i >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float f2 = (((float)(i >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + GlStateManager.translate(f, f1, f2); + double d0 = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * (double)partialTicks; + double d1 = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * (double)partialTicks; + double d2 = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * (double)partialTicks; + double d3 = 0.30000001192092896D; + Vec3d vec3d = entity.getPos(d0, d1, d2); + float f3 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + + if (vec3d != null) + { + Vec3d vec3d1 = entity.getPosOffset(d0, d1, d2, 0.30000001192092896D); + Vec3d vec3d2 = entity.getPosOffset(d0, d1, d2, -0.30000001192092896D); + + if (vec3d1 == null) + { + vec3d1 = vec3d; + } + + if (vec3d2 == null) + { + vec3d2 = vec3d; + } + + x += vec3d.x - d0; + y += (vec3d1.y + vec3d2.y) / 2.0D - d1; + z += vec3d.z - d2; + Vec3d vec3d3 = vec3d2.addVector(-vec3d1.x, -vec3d1.y, -vec3d1.z); + + if (vec3d3.lengthVector() != 0.0D) + { + vec3d3 = vec3d3.normalize(); + entityYaw = (float)(Math.atan2(vec3d3.z, vec3d3.x) * 180.0D / Math.PI); + f3 = (float)(Math.atan(vec3d3.y) * 73.0D); + } + } + + GlStateManager.translate((float)x, (float)y + 0.375F, (float)z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-f3, 0.0F, 0.0F, 1.0F); + float f5 = (float)entity.getRollingAmplitude() - partialTicks; + float f6 = entity.getDamage() - partialTicks; + + if (f6 < 0.0F) + { + f6 = 0.0F; + } + + if (f5 > 0.0F) + { + GlStateManager.rotate(MathHelper.sin(f5) * f5 * f6 / 10.0F * (float)entity.getRollingDirection(), 1.0F, 0.0F, 0.0F); + } + + int j = entity.getDisplayTileOffset(); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + IBlockState iblockstate = entity.getDisplayTile(); + + if (iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE) + { + GlStateManager.pushMatrix(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + float f4 = 0.75F; + GlStateManager.scale(0.75F, 0.75F, 0.75F); + GlStateManager.translate(-0.5F, (float)(j - 8) / 16.0F, 0.5F); + this.renderCartContents(entity, partialTicks, iblockstate); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.bindEntityTexture(entity); + } + + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + this.modelMinecart.render(entity, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(T entity) + { + return MINECART_TEXTURES; + } + + protected void renderCartContents(T p_188319_1_, float partialTicks, IBlockState p_188319_3_) + { + GlStateManager.pushMatrix(); + Minecraft.getMinecraft().getBlockRendererDispatcher().renderBlockBrightness(p_188319_3_, p_188319_1_.getBrightness()); + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java new file mode 100644 index 0000000..03ffa84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMinecartMobSpawner.java @@ -0,0 +1,14 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.entity.item.EntityMinecartMobSpawner; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderMinecartMobSpawner extends RenderMinecart +{ + public RenderMinecartMobSpawner(RenderManager renderManagerIn) + { + super(renderManagerIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMooshroom.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMooshroom.java new file mode 100644 index 0000000..ac9f5d7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderMooshroom.java @@ -0,0 +1,33 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelCow; +import net.minecraft.client.renderer.entity.layers.LayerMooshroomMushroom; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderMooshroom extends RenderLiving +{ + private static final ResourceLocation MOOSHROOM_TEXTURES = new ResourceLocation("textures/entity/cow/mooshroom.png"); + + public RenderMooshroom(RenderManager p_i47200_1_) + { + super(p_i47200_1_, new ModelCow(), 0.7F); + this.addLayer(new LayerMooshroomMushroom(this)); + } + + public ModelCow getMainModel() + { + return (ModelCow)super.getMainModel(); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityMooshroom entity) + { + return MOOSHROOM_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderOcelot.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderOcelot.java new file mode 100644 index 0000000..d069d67 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderOcelot.java @@ -0,0 +1,54 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelOcelot; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderOcelot extends RenderLiving +{ + private static final ResourceLocation BLACK_OCELOT_TEXTURES = new ResourceLocation("textures/entity/cat/black.png"); + private static final ResourceLocation OCELOT_TEXTURES = new ResourceLocation("textures/entity/cat/ocelot.png"); + private static final ResourceLocation RED_OCELOT_TEXTURES = new ResourceLocation("textures/entity/cat/red.png"); + private static final ResourceLocation SIAMESE_OCELOT_TEXTURES = new ResourceLocation("textures/entity/cat/siamese.png"); + + public RenderOcelot(RenderManager p_i47199_1_) + { + super(p_i47199_1_, new ModelOcelot(), 0.4F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityOcelot entity) + { + switch (entity.getTameSkin()) + { + case 0: + default: + return OCELOT_TEXTURES; + case 1: + return BLACK_OCELOT_TEXTURES; + case 2: + return RED_OCELOT_TEXTURES; + case 3: + return SIAMESE_OCELOT_TEXTURES; + } + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityOcelot entitylivingbaseIn, float partialTickTime) + { + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + + if (entitylivingbaseIn.isTamed()) + { + GlStateManager.scale(0.8F, 0.8F, 0.8F); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPainting.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPainting.java new file mode 100644 index 0000000..5b3468b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPainting.java @@ -0,0 +1,163 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderPainting extends Render +{ + private static final ResourceLocation KRISTOFFER_PAINTING_TEXTURE = new ResourceLocation("textures/painting/paintings_kristoffer_zetterstrand.png"); + + public RenderPainting(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityPainting entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, z); + GlStateManager.rotate(180.0F - entityYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.enableRescaleNormal(); + this.bindEntityTexture(entity); + EntityPainting.EnumArt entitypainting$enumart = entity.art; + float f = 0.0625F; + GlStateManager.scale(0.0625F, 0.0625F, 0.0625F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + this.renderPainting(entity, entitypainting$enumart.sizeX, entitypainting$enumart.sizeY, entitypainting$enumart.offsetX, entitypainting$enumart.offsetY); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityPainting entity) + { + return KRISTOFFER_PAINTING_TEXTURE; + } + + private void renderPainting(EntityPainting painting, int width, int height, int textureU, int textureV) + { + float f = (float)(-width) / 2.0F; + float f1 = (float)(-height) / 2.0F; + float f2 = 0.5F; + float f3 = 0.75F; + float f4 = 0.8125F; + float f5 = 0.0F; + float f6 = 0.0625F; + float f7 = 0.75F; + float f8 = 0.8125F; + float f9 = 0.001953125F; + float f10 = 0.001953125F; + float f11 = 0.7519531F; + float f12 = 0.7519531F; + float f13 = 0.0F; + float f14 = 0.0625F; + + for (int i = 0; i < width / 16; ++i) + { + for (int j = 0; j < height / 16; ++j) + { + float f15 = f + (float)((i + 1) * 16); + float f16 = f + (float)(i * 16); + float f17 = f1 + (float)((j + 1) * 16); + float f18 = f1 + (float)(j * 16); + this.setLightmap(painting, (f15 + f16) / 2.0F, (f17 + f18) / 2.0F); + float f19 = (float)(textureU + width - i * 16) / 256.0F; + float f20 = (float)(textureU + width - (i + 1) * 16) / 256.0F; + float f21 = (float)(textureV + height - j * 16) / 256.0F; + float f22 = (float)(textureV + height - (j + 1) * 16) / 256.0F; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_NORMAL); + bufferbuilder.pos((double)f15, (double)f18, -0.5D).tex((double)f20, (double)f21).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f18, -0.5D).tex((double)f19, (double)f21).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f17, -0.5D).tex((double)f19, (double)f22).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f17, -0.5D).tex((double)f20, (double)f22).normal(0.0F, 0.0F, -1.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f17, 0.5D).tex(0.75D, 0.0D).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f17, 0.5D).tex(0.8125D, 0.0D).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f18, 0.5D).tex(0.8125D, 0.0625D).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f18, 0.5D).tex(0.75D, 0.0625D).normal(0.0F, 0.0F, 1.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f17, -0.5D).tex(0.75D, 0.001953125D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f17, -0.5D).tex(0.8125D, 0.001953125D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f17, 0.5D).tex(0.8125D, 0.001953125D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f17, 0.5D).tex(0.75D, 0.001953125D).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f18, 0.5D).tex(0.75D, 0.001953125D).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f18, 0.5D).tex(0.8125D, 0.001953125D).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f18, -0.5D).tex(0.8125D, 0.001953125D).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f18, -0.5D).tex(0.75D, 0.001953125D).normal(0.0F, -1.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f17, 0.5D).tex(0.751953125D, 0.0D).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f18, 0.5D).tex(0.751953125D, 0.0625D).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f18, -0.5D).tex(0.751953125D, 0.0625D).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f15, (double)f17, -0.5D).tex(0.751953125D, 0.0D).normal(-1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f17, -0.5D).tex(0.751953125D, 0.0D).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f18, -0.5D).tex(0.751953125D, 0.0625D).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f18, 0.5D).tex(0.751953125D, 0.0625D).normal(1.0F, 0.0F, 0.0F).endVertex(); + bufferbuilder.pos((double)f16, (double)f17, 0.5D).tex(0.751953125D, 0.0D).normal(1.0F, 0.0F, 0.0F).endVertex(); + tessellator.draw(); + } + } + } + + private void setLightmap(EntityPainting painting, float p_77008_2_, float p_77008_3_) + { + int i = MathHelper.floor(painting.posX); + int j = MathHelper.floor(painting.posY + (double)(p_77008_3_ / 16.0F)); + int k = MathHelper.floor(painting.posZ); + EnumFacing enumfacing = painting.facingDirection; + + if (enumfacing == EnumFacing.NORTH) + { + i = MathHelper.floor(painting.posX + (double)(p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.WEST) + { + k = MathHelper.floor(painting.posZ - (double)(p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.SOUTH) + { + i = MathHelper.floor(painting.posX - (double)(p_77008_2_ / 16.0F)); + } + + if (enumfacing == EnumFacing.EAST) + { + k = MathHelper.floor(painting.posZ + (double)(p_77008_2_ / 16.0F)); + } + + int l = this.renderManager.world.getCombinedLight(new BlockPos(i, j, k), 0); + int i1 = l % 65536; + int j1 = l / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)i1, (float)j1); + GlStateManager.color(1.0F, 1.0F, 1.0F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderParrot.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderParrot.java new file mode 100644 index 0000000..a387364 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderParrot.java @@ -0,0 +1,42 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelParrot; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderParrot extends RenderLiving +{ + public static final ResourceLocation[] PARROT_TEXTURES = new ResourceLocation[] {new ResourceLocation("textures/entity/parrot/parrot_red_blue.png"), new ResourceLocation("textures/entity/parrot/parrot_blue.png"), new ResourceLocation("textures/entity/parrot/parrot_green.png"), new ResourceLocation("textures/entity/parrot/parrot_yellow_blue.png"), new ResourceLocation("textures/entity/parrot/parrot_grey.png")}; + + public RenderParrot(RenderManager p_i47375_1_) + { + super(p_i47375_1_, new ModelParrot(), 0.3F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityParrot entity) + { + return PARROT_TEXTURES[entity.getVariant()]; + } + + /** + * Defines what float the third param in setRotationAngles of ModelBase is + */ + public float handleRotationFloat(EntityParrot livingBase, float partialTicks) + { + return this.getCustomBob(livingBase, partialTicks); + } + + private float getCustomBob(EntityParrot parrot, float p_192861_2_) + { + float f = parrot.oFlap + (parrot.flap - parrot.oFlap) * p_192861_2_; + float f1 = parrot.oFlapSpeed + (parrot.flapSpeed - parrot.oFlapSpeed) * p_192861_2_; + return (MathHelper.sin(f) + 1.0F) * f1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPig.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPig.java new file mode 100644 index 0000000..6c92283 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPig.java @@ -0,0 +1,28 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelPig; +import net.minecraft.client.renderer.entity.layers.LayerSaddle; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderPig extends RenderLiving +{ + private static final ResourceLocation PIG_TEXTURES = new ResourceLocation("textures/entity/pig/pig.png"); + + public RenderPig(RenderManager p_i47198_1_) + { + super(p_i47198_1_, new ModelPig(), 0.7F); + this.addLayer(new LayerSaddle(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityPig entity) + { + return PIG_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPigZombie.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPigZombie.java new file mode 100644 index 0000000..5ec3435 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPigZombie.java @@ -0,0 +1,35 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelZombie; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderPigZombie extends RenderBiped +{ + private static final ResourceLocation ZOMBIE_PIGMAN_TEXTURE = new ResourceLocation("textures/entity/zombie_pigman.png"); + + public RenderPigZombie(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelZombie(), 0.5F); + this.addLayer(new LayerBipedArmor(this) + { + protected void initArmor() + { + this.modelLeggings = new ModelZombie(0.5F, true); + this.modelArmor = new ModelZombie(1.0F, true); + } + }); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityPigZombie entity) + { + return ZOMBIE_PIGMAN_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPlayer.java new file mode 100644 index 0000000..bfea4a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPlayer.java @@ -0,0 +1,279 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerArrow; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerCape; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.client.renderer.entity.layers.LayerDeadmau5Head; +import net.minecraft.client.renderer.entity.layers.LayerElytra; +import net.minecraft.client.renderer.entity.layers.LayerEntityOnShoulder; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderPlayer extends RenderLivingBase +{ + /** this field is used to indicate the 3-pixel wide arms */ + private final boolean smallArms; + + public RenderPlayer(RenderManager renderManager) + { + this(renderManager, false); + } + + public RenderPlayer(RenderManager renderManager, boolean useSmallArms) + { + super(renderManager, new ModelPlayer(0.0F, useSmallArms), 0.5F); + this.smallArms = useSmallArms; + this.addLayer(new LayerBipedArmor(this)); + this.addLayer(new LayerHeldItem(this)); + this.addLayer(new LayerArrow(this)); + this.addLayer(new LayerDeadmau5Head(this)); + this.addLayer(new LayerCape(this)); + this.addLayer(new LayerCustomHead(this.getMainModel().bipedHead)); + this.addLayer(new LayerElytra(this)); + this.addLayer(new LayerEntityOnShoulder(renderManager)); + } + + public ModelPlayer getMainModel() + { + return (ModelPlayer)super.getMainModel(); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(AbstractClientPlayer entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderPlayerEvent.Pre(entity, this, partialTicks, x, y, z))) return; + if (!entity.isUser() || this.renderManager.renderViewEntity == entity) + { + double d0 = y; + + if (entity.isSneaking()) + { + d0 = y - 0.125D; + } + + this.setModelVisibilities(entity); + GlStateManager.enableBlendProfile(GlStateManager.Profile.PLAYER_SKIN); + super.doRender(entity, x, d0, z, entityYaw, partialTicks); + GlStateManager.disableBlendProfile(GlStateManager.Profile.PLAYER_SKIN); + } + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.client.event.RenderPlayerEvent.Post(entity, this, partialTicks, x, y, z)); + } + + private void setModelVisibilities(AbstractClientPlayer clientPlayer) + { + ModelPlayer modelplayer = this.getMainModel(); + + if (clientPlayer.isSpectator()) + { + modelplayer.setVisible(false); + modelplayer.bipedHead.showModel = true; + modelplayer.bipedHeadwear.showModel = true; + } + else + { + ItemStack itemstack = clientPlayer.getHeldItemMainhand(); + ItemStack itemstack1 = clientPlayer.getHeldItemOffhand(); + modelplayer.setVisible(true); + modelplayer.bipedHeadwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.HAT); + modelplayer.bipedBodyWear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.JACKET); + modelplayer.bipedLeftLegwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.LEFT_PANTS_LEG); + modelplayer.bipedRightLegwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.RIGHT_PANTS_LEG); + modelplayer.bipedLeftArmwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.LEFT_SLEEVE); + modelplayer.bipedRightArmwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE); + modelplayer.isSneak = clientPlayer.isSneaking(); + ModelBiped.ArmPose modelbiped$armpose = ModelBiped.ArmPose.EMPTY; + ModelBiped.ArmPose modelbiped$armpose1 = ModelBiped.ArmPose.EMPTY; + + if (!itemstack.isEmpty()) + { + modelbiped$armpose = ModelBiped.ArmPose.ITEM; + + if (clientPlayer.getItemInUseCount() > 0) + { + EnumAction enumaction = itemstack.getItemUseAction(); + + if (enumaction == EnumAction.BLOCK) + { + modelbiped$armpose = ModelBiped.ArmPose.BLOCK; + } + else if (enumaction == EnumAction.BOW) + { + modelbiped$armpose = ModelBiped.ArmPose.BOW_AND_ARROW; + } + } + } + + if (!itemstack1.isEmpty()) + { + modelbiped$armpose1 = ModelBiped.ArmPose.ITEM; + + if (clientPlayer.getItemInUseCount() > 0) + { + EnumAction enumaction1 = itemstack1.getItemUseAction(); + + if (enumaction1 == EnumAction.BLOCK) + { + modelbiped$armpose1 = ModelBiped.ArmPose.BLOCK; + } + // FORGE: fix MC-88356 allow offhand to use bow and arrow animation + else if (enumaction1 == EnumAction.BOW) + { + modelbiped$armpose1 = ModelBiped.ArmPose.BOW_AND_ARROW; + } + } + } + + if (clientPlayer.getPrimaryHand() == EnumHandSide.RIGHT) + { + modelplayer.rightArmPose = modelbiped$armpose; + modelplayer.leftArmPose = modelbiped$armpose1; + } + else + { + modelplayer.rightArmPose = modelbiped$armpose1; + modelplayer.leftArmPose = modelbiped$armpose; + } + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + public ResourceLocation getEntityTexture(AbstractClientPlayer entity) + { + return entity.getLocationSkin(); + } + + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(AbstractClientPlayer entitylivingbaseIn, float partialTickTime) + { + float f = 0.9375F; + GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); + } + + protected void renderEntityName(AbstractClientPlayer entityIn, double x, double y, double z, String name, double distanceSq) + { + if (distanceSq < 100.0D) + { + Scoreboard scoreboard = entityIn.getWorldScoreboard(); + ScoreObjective scoreobjective = scoreboard.getObjectiveInDisplaySlot(2); + + if (scoreobjective != null) + { + Score score = scoreboard.getOrCreateScore(entityIn.getName(), scoreobjective); + this.renderLivingLabel(entityIn, score.getScorePoints() + " " + scoreobjective.getDisplayName(), x, y, z, 64); + y += (double)((float)this.getFontRendererFromRenderManager().FONT_HEIGHT * 1.15F * 0.025F); + } + } + + super.renderEntityName(entityIn, x, y, z, name, distanceSq); + } + + public void renderRightArm(AbstractClientPlayer clientPlayer) + { + float f = 1.0F; + GlStateManager.color(1.0F, 1.0F, 1.0F); + float f1 = 0.0625F; + ModelPlayer modelplayer = this.getMainModel(); + this.setModelVisibilities(clientPlayer); + GlStateManager.enableBlend(); + modelplayer.swingProgress = 0.0F; + modelplayer.isSneak = false; + modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer); + modelplayer.bipedRightArm.rotateAngleX = 0.0F; + modelplayer.bipedRightArm.render(0.0625F); + modelplayer.bipedRightArmwear.rotateAngleX = 0.0F; + modelplayer.bipedRightArmwear.render(0.0625F); + GlStateManager.disableBlend(); + } + + public void renderLeftArm(AbstractClientPlayer clientPlayer) + { + float f = 1.0F; + GlStateManager.color(1.0F, 1.0F, 1.0F); + float f1 = 0.0625F; + ModelPlayer modelplayer = this.getMainModel(); + this.setModelVisibilities(clientPlayer); + GlStateManager.enableBlend(); + modelplayer.isSneak = false; + modelplayer.swingProgress = 0.0F; + modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer); + modelplayer.bipedLeftArm.rotateAngleX = 0.0F; + modelplayer.bipedLeftArm.render(0.0625F); + modelplayer.bipedLeftArmwear.rotateAngleX = 0.0F; + modelplayer.bipedLeftArmwear.render(0.0625F); + GlStateManager.disableBlend(); + } + + /** + * Sets a simple glTranslate on a LivingEntity. + */ + protected void renderLivingAt(AbstractClientPlayer entityLivingBaseIn, double x, double y, double z) + { + if (entityLivingBaseIn.isEntityAlive() && entityLivingBaseIn.isPlayerSleeping()) + { + super.renderLivingAt(entityLivingBaseIn, x + (double)entityLivingBaseIn.renderOffsetX, y + (double)entityLivingBaseIn.renderOffsetY, z + (double)entityLivingBaseIn.renderOffsetZ); + } + else + { + super.renderLivingAt(entityLivingBaseIn, x, y, z); + } + } + + protected void applyRotations(AbstractClientPlayer entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + if (entityLiving.isEntityAlive() && entityLiving.isPlayerSleeping()) + { + GlStateManager.rotate(entityLiving.getBedOrientationInDegrees(), 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(this.getDeathMaxRotation(entityLiving), 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(270.0F, 0.0F, 1.0F, 0.0F); + } + else if (entityLiving.isElytraFlying()) + { + super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks); + float f = (float)entityLiving.getTicksElytraFlying() + partialTicks; + float f1 = MathHelper.clamp(f * f / 100.0F, 0.0F, 1.0F); + GlStateManager.rotate(f1 * (-90.0F - entityLiving.rotationPitch), 1.0F, 0.0F, 0.0F); + Vec3d vec3d = entityLiving.getLook(partialTicks); + double d0 = entityLiving.motionX * entityLiving.motionX + entityLiving.motionZ * entityLiving.motionZ; + double d1 = vec3d.x * vec3d.x + vec3d.z * vec3d.z; + + if (d0 > 0.0D && d1 > 0.0D) + { + double d2 = (entityLiving.motionX * vec3d.x + entityLiving.motionZ * vec3d.z) / (Math.sqrt(d0) * Math.sqrt(d1)); + double d3 = entityLiving.motionX * vec3d.z - entityLiving.motionZ * vec3d.x; + GlStateManager.rotate((float)(Math.signum(d3) * Math.acos(d2)) * 180.0F / (float)Math.PI, 0.0F, 1.0F, 0.0F); + } + } + else + { + super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPolarBear.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPolarBear.java new file mode 100644 index 0000000..2d491f6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPolarBear.java @@ -0,0 +1,44 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelPolarBear; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityPolarBear; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderPolarBear extends RenderLiving +{ + private static final ResourceLocation POLAR_BEAR_TEXTURE = new ResourceLocation("textures/entity/bear/polarbear.png"); + + public RenderPolarBear(RenderManager p_i47197_1_) + { + super(p_i47197_1_, new ModelPolarBear(), 0.7F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityPolarBear entity) + { + return POLAR_BEAR_TEXTURE; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityPolarBear entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityPolarBear entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(1.2F, 1.2F, 1.2F); + super.preRenderCallback(entitylivingbaseIn, partialTickTime); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPotion.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPotion.java new file mode 100644 index 0000000..fd54199 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderPotion.java @@ -0,0 +1,22 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderPotion extends RenderSnowball +{ + public RenderPotion(RenderManager renderManagerIn, RenderItem itemRendererIn) + { + super(renderManagerIn, Items.POTIONITEM, itemRendererIn); + } + + public ItemStack getStackToRender(EntityPotion entityIn) + { + return entityIn.getPotion(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderRabbit.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderRabbit.java new file mode 100644 index 0000000..2158ddc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderRabbit.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelRabbit; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderRabbit extends RenderLiving +{ + private static final ResourceLocation BROWN = new ResourceLocation("textures/entity/rabbit/brown.png"); + private static final ResourceLocation WHITE = new ResourceLocation("textures/entity/rabbit/white.png"); + private static final ResourceLocation BLACK = new ResourceLocation("textures/entity/rabbit/black.png"); + private static final ResourceLocation GOLD = new ResourceLocation("textures/entity/rabbit/gold.png"); + private static final ResourceLocation SALT = new ResourceLocation("textures/entity/rabbit/salt.png"); + private static final ResourceLocation WHITE_SPLOTCHED = new ResourceLocation("textures/entity/rabbit/white_splotched.png"); + private static final ResourceLocation TOAST = new ResourceLocation("textures/entity/rabbit/toast.png"); + private static final ResourceLocation CAERBANNOG = new ResourceLocation("textures/entity/rabbit/caerbannog.png"); + + public RenderRabbit(RenderManager p_i47196_1_) + { + super(p_i47196_1_, new ModelRabbit(), 0.3F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityRabbit entity) + { + String s = TextFormatting.getTextWithoutFormattingCodes(entity.getName()); + + if (s != null && "Toast".equals(s)) + { + return TOAST; + } + else + { + switch (entity.getRabbitType()) + { + case 0: + default: + return BROWN; + case 1: + return WHITE; + case 2: + return BLACK; + case 3: + return WHITE_SPLOTCHED; + case 4: + return GOLD; + case 5: + return SALT; + case 99: + return CAERBANNOG; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSheep.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSheep.java new file mode 100644 index 0000000..1b8d140 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSheep.java @@ -0,0 +1,28 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSheep2; +import net.minecraft.client.renderer.entity.layers.LayerSheepWool; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSheep extends RenderLiving +{ + private static final ResourceLocation SHEARED_SHEEP_TEXTURES = new ResourceLocation("textures/entity/sheep/sheep.png"); + + public RenderSheep(RenderManager p_i47195_1_) + { + super(p_i47195_1_, new ModelSheep2(), 0.7F); + this.addLayer(new LayerSheepWool(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntitySheep entity) + { + return SHEARED_SHEEP_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderShulker.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderShulker.java new file mode 100644 index 0000000..3940fa3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderShulker.java @@ -0,0 +1,187 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.model.ModelShulker; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.entity.monster.EntityShulker; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderShulker extends RenderLiving +{ + public static final ResourceLocation[] SHULKER_ENDERGOLEM_TEXTURE = new ResourceLocation[] {new ResourceLocation("textures/entity/shulker/shulker_white.png"), new ResourceLocation("textures/entity/shulker/shulker_orange.png"), new ResourceLocation("textures/entity/shulker/shulker_magenta.png"), new ResourceLocation("textures/entity/shulker/shulker_light_blue.png"), new ResourceLocation("textures/entity/shulker/shulker_yellow.png"), new ResourceLocation("textures/entity/shulker/shulker_lime.png"), new ResourceLocation("textures/entity/shulker/shulker_pink.png"), new ResourceLocation("textures/entity/shulker/shulker_gray.png"), new ResourceLocation("textures/entity/shulker/shulker_silver.png"), new ResourceLocation("textures/entity/shulker/shulker_cyan.png"), new ResourceLocation("textures/entity/shulker/shulker_purple.png"), new ResourceLocation("textures/entity/shulker/shulker_blue.png"), new ResourceLocation("textures/entity/shulker/shulker_brown.png"), new ResourceLocation("textures/entity/shulker/shulker_green.png"), new ResourceLocation("textures/entity/shulker/shulker_red.png"), new ResourceLocation("textures/entity/shulker/shulker_black.png")}; + + public RenderShulker(RenderManager p_i47194_1_) + { + super(p_i47194_1_, new ModelShulker(), 0.0F); + this.addLayer(new RenderShulker.HeadLayer()); + } + + public ModelShulker getMainModel() + { + return (ModelShulker)super.getMainModel(); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityShulker entity, double x, double y, double z, float entityYaw, float partialTicks) + { + int i = entity.getClientTeleportInterp(); + + if (i > 0 && entity.isAttachedToBlock()) + { + BlockPos blockpos = entity.getAttachmentPos(); + BlockPos blockpos1 = entity.getOldAttachPos(); + double d0 = (double)((float)i - partialTicks) / 6.0D; + d0 = d0 * d0; + double d1 = (double)(blockpos.getX() - blockpos1.getX()) * d0; + double d2 = (double)(blockpos.getY() - blockpos1.getY()) * d0; + double d3 = (double)(blockpos.getZ() - blockpos1.getZ()) * d0; + super.doRender(entity, x - d1, y - d2, z - d3, entityYaw, partialTicks); + } + else + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + } + + public boolean shouldRender(EntityShulker livingEntity, ICamera camera, double camX, double camY, double camZ) + { + if (super.shouldRender(livingEntity, camera, camX, camY, camZ)) + { + return true; + } + else + { + if (livingEntity.getClientTeleportInterp() > 0 && livingEntity.isAttachedToBlock()) + { + BlockPos blockpos = livingEntity.getOldAttachPos(); + BlockPos blockpos1 = livingEntity.getAttachmentPos(); + Vec3d vec3d = new Vec3d((double)blockpos1.getX(), (double)blockpos1.getY(), (double)blockpos1.getZ()); + Vec3d vec3d1 = new Vec3d((double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ()); + + if (camera.isBoundingBoxInFrustum(new AxisAlignedBB(vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y, vec3d.z))) + { + return true; + } + } + + return false; + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityShulker entity) + { + return SHULKER_ENDERGOLEM_TEXTURE[entity.getColor().getMetadata()]; + } + + protected void applyRotations(EntityShulker entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks); + + switch (entityLiving.getAttachmentFacing()) + { + case DOWN: + default: + break; + case EAST: + GlStateManager.translate(0.5F, 0.5F, 0.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); + break; + case WEST: + GlStateManager.translate(-0.5F, 0.5F, 0.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-90.0F, 0.0F, 0.0F, 1.0F); + break; + case NORTH: + GlStateManager.translate(0.0F, 0.5F, -0.5F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + break; + case SOUTH: + GlStateManager.translate(0.0F, 0.5F, 0.5F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + break; + case UP: + GlStateManager.translate(0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + } + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityShulker entitylivingbaseIn, float partialTickTime) + { + float f = 0.999F; + GlStateManager.scale(0.999F, 0.999F, 0.999F); + } + + @SideOnly(Side.CLIENT) + class HeadLayer implements LayerRenderer + { + private HeadLayer() + { + } + + public void doRenderLayer(EntityShulker entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + GlStateManager.pushMatrix(); + + switch (entitylivingbaseIn.getAttachmentFacing()) + { + case DOWN: + default: + break; + case EAST: + GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(1.0F, -1.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + break; + case WEST: + GlStateManager.rotate(-90.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(-1.0F, -1.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + break; + case NORTH: + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, -1.0F, -1.0F); + break; + case SOUTH: + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, -1.0F, 1.0F); + break; + case UP: + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.0F, -2.0F, 0.0F); + } + + ModelRenderer modelrenderer = RenderShulker.this.getMainModel().head; + modelrenderer.rotateAngleY = netHeadYaw * 0.017453292F; + modelrenderer.rotateAngleX = headPitch * 0.017453292F; + RenderShulker.this.bindTexture(RenderShulker.SHULKER_ENDERGOLEM_TEXTURE[entitylivingbaseIn.getColor().getMetadata()]); + modelrenderer.render(scale); + GlStateManager.popMatrix(); + } + + public boolean shouldCombineTextures() + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderShulkerBullet.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderShulkerBullet.java new file mode 100644 index 0000000..e927709 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderShulkerBullet.java @@ -0,0 +1,73 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelShulkerBullet; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderShulkerBullet extends Render +{ + private static final ResourceLocation SHULKER_SPARK_TEXTURE = new ResourceLocation("textures/entity/shulker/spark.png"); + private final ModelShulkerBullet model = new ModelShulkerBullet(); + + public RenderShulkerBullet(RenderManager manager) + { + super(manager); + } + + private float rotLerp(float p_188347_1_, float p_188347_2_, float p_188347_3_) + { + float f; + + for (f = p_188347_2_ - p_188347_1_; f < -180.0F; f += 360.0F) + { + ; + } + + while (f >= 180.0F) + { + f -= 360.0F; + } + + return p_188347_1_ + p_188347_3_ * f; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityShulkerBullet entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + float f = this.rotLerp(entity.prevRotationYaw, entity.rotationYaw, partialTicks); + float f1 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + float f2 = (float)entity.ticksExisted + partialTicks; + GlStateManager.translate((float)x, (float)y + 0.15F, (float)z); + GlStateManager.rotate(MathHelper.sin(f2 * 0.1F) * 180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(MathHelper.cos(f2 * 0.1F) * 180.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(MathHelper.sin(f2 * 0.15F) * 360.0F, 0.0F, 0.0F, 1.0F); + float f3 = 0.03125F; + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + this.bindEntityTexture(entity); + this.model.render(entity, 0.0F, 0.0F, 0.0F, f, f1, 0.03125F); + GlStateManager.enableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 0.5F); + GlStateManager.scale(1.5F, 1.5F, 1.5F); + this.model.render(entity, 0.0F, 0.0F, 0.0F, f, f1, 0.03125F); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityShulkerBullet entity) + { + return SHULKER_SPARK_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSilverfish.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSilverfish.java new file mode 100644 index 0000000..9cd2641 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSilverfish.java @@ -0,0 +1,31 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSilverfish; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSilverfish extends RenderLiving +{ + private static final ResourceLocation SILVERFISH_TEXTURES = new ResourceLocation("textures/entity/silverfish.png"); + + public RenderSilverfish(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelSilverfish(), 0.3F); + } + + protected float getDeathMaxRotation(EntitySilverfish entityLivingBaseIn) + { + return 180.0F; + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntitySilverfish entity) + { + return SILVERFISH_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSkeleton.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSkeleton.java new file mode 100644 index 0000000..9b67ed9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSkeleton.java @@ -0,0 +1,43 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSkeleton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.monster.AbstractSkeleton; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSkeleton extends RenderBiped +{ + private static final ResourceLocation SKELETON_TEXTURES = new ResourceLocation("textures/entity/skeleton/skeleton.png"); + + public RenderSkeleton(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelSkeleton(), 0.5F); + this.addLayer(new LayerHeldItem(this)); + this.addLayer(new LayerBipedArmor(this) + { + protected void initArmor() + { + this.modelLeggings = new ModelSkeleton(0.5F, true); + this.modelArmor = new ModelSkeleton(1.0F, true); + } + }); + } + + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.09375F, 0.1875F, 0.0F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(AbstractSkeleton entity) + { + return SKELETON_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSlime.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSlime.java new file mode 100644 index 0000000..71ccec1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSlime.java @@ -0,0 +1,51 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSlime; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerSlimeGel; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSlime extends RenderLiving +{ + private static final ResourceLocation SLIME_TEXTURES = new ResourceLocation("textures/entity/slime/slime.png"); + + public RenderSlime(RenderManager p_i47193_1_) + { + super(p_i47193_1_, new ModelSlime(16), 0.25F); + this.addLayer(new LayerSlimeGel(this)); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntitySlime entity, double x, double y, double z, float entityYaw, float partialTicks) + { + this.shadowSize = 0.25F * (float)entity.getSlimeSize(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntitySlime entitylivingbaseIn, float partialTickTime) + { + float f = 0.999F; + GlStateManager.scale(0.999F, 0.999F, 0.999F); + float f1 = (float)entitylivingbaseIn.getSlimeSize(); + float f2 = (entitylivingbaseIn.prevSquishFactor + (entitylivingbaseIn.squishFactor - entitylivingbaseIn.prevSquishFactor) * partialTickTime) / (f1 * 0.5F + 1.0F); + float f3 = 1.0F / (f2 + 1.0F); + GlStateManager.scale(f3 * f1, 1.0F / f3 * f1, f3 * f1); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntitySlime entity) + { + return SLIME_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSnowMan.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSnowMan.java new file mode 100644 index 0000000..fb2d055 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSnowMan.java @@ -0,0 +1,33 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSnowMan; +import net.minecraft.client.renderer.entity.layers.LayerSnowmanHead; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSnowMan extends RenderLiving +{ + private static final ResourceLocation SNOW_MAN_TEXTURES = new ResourceLocation("textures/entity/snowman.png"); + + public RenderSnowMan(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelSnowMan(), 0.5F); + this.addLayer(new LayerSnowmanHead(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntitySnowman entity) + { + return SNOW_MAN_TEXTURES; + } + + public ModelSnowMan getMainModel() + { + return (ModelSnowMan)super.getMainModel(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSnowball.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSnowball.java new file mode 100644 index 0000000..a082214 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSnowball.java @@ -0,0 +1,71 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSnowball extends Render +{ + protected final Item item; + private final RenderItem itemRenderer; + + public RenderSnowball(RenderManager renderManagerIn, Item itemIn, RenderItem itemRendererIn) + { + super(renderManagerIn); + this.item = itemIn; + this.itemRenderer = itemRendererIn; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(T entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y, (float)z); + GlStateManager.enableRescaleNormal(); + GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + this.itemRenderer.renderItem(this.getStackToRender(entity), ItemCameraTransforms.TransformType.GROUND); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + public ItemStack getStackToRender(T entityIn) + { + return new ItemStack(this.item); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(Entity entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSpectralArrow.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSpectralArrow.java new file mode 100644 index 0000000..abf96ee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSpectralArrow.java @@ -0,0 +1,25 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSpectralArrow extends RenderArrow +{ + public static final ResourceLocation RES_SPECTRAL_ARROW = new ResourceLocation("textures/entity/projectiles/spectral_arrow.png"); + + public RenderSpectralArrow(RenderManager manager) + { + super(manager); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntitySpectralArrow entity) + { + return RES_SPECTRAL_ARROW; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSpider.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSpider.java new file mode 100644 index 0000000..81706fd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSpider.java @@ -0,0 +1,33 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSpider; +import net.minecraft.client.renderer.entity.layers.LayerSpiderEyes; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSpider extends RenderLiving +{ + private static final ResourceLocation SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/spider.png"); + + public RenderSpider(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelSpider(), 1.0F); + this.addLayer(new LayerSpiderEyes(this)); + } + + protected float getDeathMaxRotation(T entityLivingBaseIn) + { + return 180.0F; + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(T entity) + { + return SPIDER_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSquid.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSquid.java new file mode 100644 index 0000000..d0bf169 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderSquid.java @@ -0,0 +1,46 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSquid; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderSquid extends RenderLiving +{ + private static final ResourceLocation SQUID_TEXTURES = new ResourceLocation("textures/entity/squid.png"); + + public RenderSquid(RenderManager p_i47192_1_) + { + super(p_i47192_1_, new ModelSquid(), 0.7F); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntitySquid entity) + { + return SQUID_TEXTURES; + } + + protected void applyRotations(EntitySquid entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + float f = entityLiving.prevSquidPitch + (entityLiving.squidPitch - entityLiving.prevSquidPitch) * partialTicks; + float f1 = entityLiving.prevSquidYaw + (entityLiving.squidYaw - entityLiving.prevSquidYaw) * partialTicks; + GlStateManager.translate(0.0F, 0.5F, 0.0F); + GlStateManager.rotate(180.0F - rotationYaw, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f1, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, -1.2F, 0.0F); + } + + /** + * Defines what float the third param in setRotationAngles of ModelBase is + */ + protected float handleRotationFloat(EntitySquid livingBase, float partialTicks) + { + return livingBase.lastTentacleAngle + (livingBase.tentacleAngle - livingBase.lastTentacleAngle) * partialTicks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderStray.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderStray.java new file mode 100644 index 0000000..7b9307c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderStray.java @@ -0,0 +1,27 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.entity.layers.LayerStrayClothing; +import net.minecraft.entity.monster.AbstractSkeleton; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderStray extends RenderSkeleton +{ + private static final ResourceLocation STRAY_SKELETON_TEXTURES = new ResourceLocation("textures/entity/skeleton/stray.png"); + + public RenderStray(RenderManager p_i47191_1_) + { + super(p_i47191_1_); + this.addLayer(new LayerStrayClothing(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(AbstractSkeleton entity) + { + return STRAY_SKELETON_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTNTPrimed.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTNTPrimed.java new file mode 100644 index 0000000..03356f5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTNTPrimed.java @@ -0,0 +1,86 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderTNTPrimed extends Render +{ + public RenderTNTPrimed(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.5F; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityTNTPrimed entity, double x, double y, double z, float entityYaw, float partialTicks) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y + 0.5F, (float)z); + + if ((float)entity.getFuse() - partialTicks + 1.0F < 10.0F) + { + float f = 1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 10.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + f = f * f; + f = f * f; + float f1 = 1.0F + f * 0.3F; + GlStateManager.scale(f1, f1, f1); + } + + float f2 = (1.0F - ((float)entity.getFuse() - partialTicks + 1.0F) / 100.0F) * 0.8F; + this.bindEntityTexture(entity); + GlStateManager.rotate(-90.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), entity.getBrightness()); + GlStateManager.translate(0.0F, 0.0F, 1.0F); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), 1.0F); + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + else if (entity.getFuse() / 5 % 2 == 0) + { + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.DST_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, f2); + GlStateManager.doPolygonOffset(-3.0F, -3.0F); + GlStateManager.enablePolygonOffset(); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), 1.0F); + GlStateManager.doPolygonOffset(0.0F, 0.0F); + GlStateManager.disablePolygonOffset(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityTNTPrimed entity) + { + return TextureMap.LOCATION_BLOCKS_TEXTURE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTippedArrow.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTippedArrow.java new file mode 100644 index 0000000..b635e30 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTippedArrow.java @@ -0,0 +1,26 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderTippedArrow extends RenderArrow +{ + public static final ResourceLocation RES_ARROW = new ResourceLocation("textures/entity/projectiles/arrow.png"); + public static final ResourceLocation RES_TIPPED_ARROW = new ResourceLocation("textures/entity/projectiles/tipped_arrow.png"); + + public RenderTippedArrow(RenderManager manager) + { + super(manager); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityTippedArrow entity) + { + return entity.getColor() > 0 ? RES_TIPPED_ARROW : RES_ARROW; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTntMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTntMinecart.java new file mode 100644 index 0000000..7b141d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderTntMinecart.java @@ -0,0 +1,54 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.item.EntityMinecartTNT; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderTntMinecart extends RenderMinecart +{ + public RenderTntMinecart(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + protected void renderCartContents(EntityMinecartTNT p_188319_1_, float partialTicks, IBlockState p_188319_3_) + { + int i = p_188319_1_.getFuseTicks(); + + if (i > -1 && (float)i - partialTicks + 1.0F < 10.0F) + { + float f = 1.0F - ((float)i - partialTicks + 1.0F) / 10.0F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + f = f * f; + f = f * f; + float f1 = 1.0F + f * 0.3F; + GlStateManager.scale(f1, f1, f1); + } + + super.renderCartContents(p_188319_1_, partialTicks, p_188319_3_); + + if (i > -1 && i / 5 % 2 == 0) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.disableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.DST_ALPHA); + GlStateManager.color(1.0F, 1.0F, 1.0F, (1.0F - ((float)i - partialTicks + 1.0F) / 100.0F) * 0.8F); + GlStateManager.pushMatrix(); + blockrendererdispatcher.renderBlockBrightness(Blocks.TNT.getDefaultState(), 1.0F); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVex.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVex.java new file mode 100644 index 0000000..708058c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVex.java @@ -0,0 +1,54 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelVex; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderVex extends RenderBiped +{ + private static final ResourceLocation VEX_TEXTURE = new ResourceLocation("textures/entity/illager/vex.png"); + private static final ResourceLocation VEX_CHARGING_TEXTURE = new ResourceLocation("textures/entity/illager/vex_charging.png"); + private int modelVersion; + + public RenderVex(RenderManager p_i47190_1_) + { + super(p_i47190_1_, new ModelVex(), 0.3F); + this.modelVersion = ((ModelVex)this.mainModel).getModelVersion(); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityVex entity) + { + return entity.isCharging() ? VEX_CHARGING_TEXTURE : VEX_TEXTURE; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityVex entity, double x, double y, double z, float entityYaw, float partialTicks) + { + int i = ((ModelVex)this.mainModel).getModelVersion(); + + if (i != this.modelVersion) + { + this.mainModel = new ModelVex(); + this.modelVersion = i; + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityVex entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(0.4F, 0.4F, 0.4F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVillager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVillager.java new file mode 100644 index 0000000..262483c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVillager.java @@ -0,0 +1,59 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelVillager; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerCustomHead; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderVillager extends RenderLiving +{ + private static final ResourceLocation VILLAGER_TEXTURES = new ResourceLocation("textures/entity/villager/villager.png"); + private static final ResourceLocation FARMER_VILLAGER_TEXTURES = new ResourceLocation("textures/entity/villager/farmer.png"); + private static final ResourceLocation LIBRARIAN_VILLAGER_TEXTURES = new ResourceLocation("textures/entity/villager/librarian.png"); + private static final ResourceLocation PRIEST_VILLAGER_TEXTURES = new ResourceLocation("textures/entity/villager/priest.png"); + private static final ResourceLocation SMITH_VILLAGER_TEXTURES = new ResourceLocation("textures/entity/villager/smith.png"); + private static final ResourceLocation BUTCHER_VILLAGER_TEXTURES = new ResourceLocation("textures/entity/villager/butcher.png"); + + public RenderVillager(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelVillager(0.0F), 0.5F); + this.addLayer(new LayerCustomHead(this.getMainModel().villagerHead)); + } + + public ModelVillager getMainModel() + { + return (ModelVillager)super.getMainModel(); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityVillager entity) + { + return entity.getProfessionForge().getSkin(); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityVillager entitylivingbaseIn, float partialTickTime) + { + float f = 0.9375F; + + if (entitylivingbaseIn.getGrowingAge() < 0) + { + f = (float)((double)f * 0.5D); + this.shadowSize = 0.25F; + } + else + { + this.shadowSize = 0.5F; + } + + GlStateManager.scale(f, f, f); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVindicator.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVindicator.java new file mode 100644 index 0000000..679dee8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderVindicator.java @@ -0,0 +1,62 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelIllager; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerHeldItem; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.monster.EntityVindicator; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderVindicator extends RenderLiving +{ + private static final ResourceLocation VINDICATOR_TEXTURE = new ResourceLocation("textures/entity/illager/vindicator.png"); + + public RenderVindicator(RenderManager p_i47189_1_) + { + super(p_i47189_1_, new ModelIllager(0.0F, 0.0F, 64, 64), 0.5F); + this.addLayer(new LayerHeldItem(this) + { + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (((EntityVindicator)entitylivingbaseIn).isAggressive()) + { + super.doRenderLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + } + protected void translateToHand(EnumHandSide p_191361_1_) + { + ((ModelIllager)this.livingEntityRenderer.getMainModel()).getArm(p_191361_1_).postRender(0.0625F); + } + }); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityMob entity, double x, double y, double z, float entityYaw, float partialTicks) + { + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityMob entity) + { + return VINDICATOR_TEXTURE; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityMob entitylivingbaseIn, float partialTickTime) + { + float f = 0.9375F; + GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitch.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitch.java new file mode 100644 index 0000000..6f04beb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitch.java @@ -0,0 +1,57 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelWitch; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerHeldItemWitch; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWitch extends RenderLiving +{ + private static final ResourceLocation WITCH_TEXTURES = new ResourceLocation("textures/entity/witch.png"); + + public RenderWitch(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelWitch(0.0F), 0.5F); + this.addLayer(new LayerHeldItemWitch(this)); + } + + public ModelWitch getMainModel() + { + return (ModelWitch)super.getMainModel(); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityWitch entity, double x, double y, double z, float entityYaw, float partialTicks) + { + ((ModelWitch)this.mainModel).holdingItem = !entity.getHeldItemMainhand().isEmpty(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityWitch entity) + { + return WITCH_TEXTURES; + } + + public void transformHeldFull3DItemLayer() + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityWitch entitylivingbaseIn, float partialTickTime) + { + float f = 0.9375F; + GlStateManager.scale(0.9375F, 0.9375F, 0.9375F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWither.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWither.java new file mode 100644 index 0000000..b8d7504 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWither.java @@ -0,0 +1,47 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelWither; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerWitherAura; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWither extends RenderLiving +{ + private static final ResourceLocation INVULNERABLE_WITHER_TEXTURES = new ResourceLocation("textures/entity/wither/wither_invulnerable.png"); + private static final ResourceLocation WITHER_TEXTURES = new ResourceLocation("textures/entity/wither/wither.png"); + + public RenderWither(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelWither(0.0F), 1.0F); + this.addLayer(new LayerWitherAura(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityWither entity) + { + int i = entity.getInvulTime(); + return i > 0 && (i > 80 || i / 5 % 2 != 1) ? INVULNERABLE_WITHER_TEXTURES : WITHER_TEXTURES; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(EntityWither entitylivingbaseIn, float partialTickTime) + { + float f = 2.0F; + int i = entitylivingbaseIn.getInvulTime(); + + if (i > 0) + { + f -= ((float)i - partialTickTime) / 220.0F * 0.5F; + } + + GlStateManager.scale(f, f, f); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitherSkeleton.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitherSkeleton.java new file mode 100644 index 0000000..fbea1ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitherSkeleton.java @@ -0,0 +1,34 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.monster.AbstractSkeleton; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWitherSkeleton extends RenderSkeleton +{ + private static final ResourceLocation WITHER_SKELETON_TEXTURES = new ResourceLocation("textures/entity/skeleton/wither_skeleton.png"); + + public RenderWitherSkeleton(RenderManager p_i47188_1_) + { + super(p_i47188_1_); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(AbstractSkeleton entity) + { + return WITHER_SKELETON_TEXTURES; + } + + /** + * Allows the render to do state modifications necessary before the model is rendered. + */ + protected void preRenderCallback(AbstractSkeleton entitylivingbaseIn, float partialTickTime) + { + GlStateManager.scale(1.2F, 1.2F, 1.2F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitherSkull.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitherSkull.java new file mode 100644 index 0000000..cb75372 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWitherSkull.java @@ -0,0 +1,81 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelSkeletonHead; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWitherSkull extends Render +{ + private static final ResourceLocation INVULNERABLE_WITHER_TEXTURES = new ResourceLocation("textures/entity/wither/wither_invulnerable.png"); + private static final ResourceLocation WITHER_TEXTURES = new ResourceLocation("textures/entity/wither/wither.png"); + /** The Skeleton's head model. */ + private final ModelSkeletonHead skeletonHeadModel = new ModelSkeletonHead(); + + public RenderWitherSkull(RenderManager renderManagerIn) + { + super(renderManagerIn); + } + + private float getRenderYaw(float p_82400_1_, float p_82400_2_, float p_82400_3_) + { + float f; + + for (f = p_82400_2_ - p_82400_1_; f < -180.0F; f += 360.0F) + { + ; + } + + while (f >= 180.0F) + { + f -= 360.0F; + } + + return p_82400_1_ + p_82400_3_ * f; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityWitherSkull entity, double x, double y, double z, float entityYaw, float partialTicks) + { + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + float f = this.getRenderYaw(entity.prevRotationYaw, entity.rotationYaw, partialTicks); + float f1 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks; + GlStateManager.translate((float)x, (float)y, (float)z); + float f2 = 0.0625F; + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.enableAlpha(); + this.bindEntityTexture(entity); + + if (this.renderOutlines) + { + GlStateManager.enableColorMaterial(); + GlStateManager.enableOutlineMode(this.getTeamColor(entity)); + } + + this.skeletonHeadModel.render(entity, 0.0F, 0.0F, 0.0F, f, f1, 0.0625F); + + if (this.renderOutlines) + { + GlStateManager.disableOutlineMode(); + GlStateManager.disableColorMaterial(); + } + + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityWitherSkull entity) + { + return entity.isInvulnerable() ? INVULNERABLE_WITHER_TEXTURES : WITHER_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWolf.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWolf.java new file mode 100644 index 0000000..afaf626 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderWolf.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelWolf; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.layers.LayerWolfCollar; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderWolf extends RenderLiving +{ + private static final ResourceLocation WOLF_TEXTURES = new ResourceLocation("textures/entity/wolf/wolf.png"); + private static final ResourceLocation TAMED_WOLF_TEXTURES = new ResourceLocation("textures/entity/wolf/wolf_tame.png"); + private static final ResourceLocation ANRGY_WOLF_TEXTURES = new ResourceLocation("textures/entity/wolf/wolf_angry.png"); + + public RenderWolf(RenderManager p_i47187_1_) + { + super(p_i47187_1_, new ModelWolf(), 0.5F); + this.addLayer(new LayerWolfCollar(this)); + } + + /** + * Defines what float the third param in setRotationAngles of ModelBase is + */ + protected float handleRotationFloat(EntityWolf livingBase, float partialTicks) + { + return livingBase.getTailRotation(); + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityWolf entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (entity.isWolfWet()) + { + float f = entity.getBrightness() * entity.getShadingWhileWet(partialTicks); + GlStateManager.color(f, f, f); + } + + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityWolf entity) + { + if (entity.isTamed()) + { + return TAMED_WOLF_TEXTURES; + } + else + { + return entity.isAngry() ? ANRGY_WOLF_TEXTURES : WOLF_TEXTURES; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderXPOrb.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderXPOrb.java new file mode 100644 index 0000000..6c1b48c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderXPOrb.java @@ -0,0 +1,83 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderXPOrb extends Render +{ + private static final ResourceLocation EXPERIENCE_ORB_TEXTURES = new ResourceLocation("textures/entity/experience_orb.png"); + + public RenderXPOrb(RenderManager renderManagerIn) + { + super(renderManagerIn); + this.shadowSize = 0.15F; + this.shadowOpaque = 0.75F; + } + + /** + * Renders the desired {@code T} type Entity. + */ + public void doRender(EntityXPOrb entity, double x, double y, double z, float entityYaw, float partialTicks) + { + if (!this.renderOutlines) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x, (float)y, (float)z); + this.bindEntityTexture(entity); + RenderHelper.enableStandardItemLighting(); + int i = entity.getTextureByXP(); + float f = (float)(i % 4 * 16 + 0) / 64.0F; + float f1 = (float)(i % 4 * 16 + 16) / 64.0F; + float f2 = (float)(i / 4 * 16 + 0) / 64.0F; + float f3 = (float)(i / 4 * 16 + 16) / 64.0F; + float f4 = 1.0F; + float f5 = 0.5F; + float f6 = 0.25F; + int j = entity.getBrightnessForRender(); + int k = j % 65536; + int l = j / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)k, (float)l); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + float f8 = 255.0F; + float f9 = ((float)entity.xpColor + partialTicks) / 2.0F; + l = (int)((MathHelper.sin(f9 + 0.0F) + 1.0F) * 0.5F * 255.0F); + int i1 = 255; + int j1 = (int)((MathHelper.sin(f9 + 4.1887903F) + 1.0F) * 0.1F * 255.0F); + GlStateManager.translate(0.0F, 0.1F, 0.0F); + GlStateManager.rotate(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float)(this.renderManager.options.thirdPersonView == 2 ? -1 : 1) * -this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + float f7 = 0.3F; + GlStateManager.scale(0.3F, 0.3F, 0.3F); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR_NORMAL); + bufferbuilder.pos(-0.5D, -0.25D, 0.0D).tex((double)f, (double)f3).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, -0.25D, 0.0D).tex((double)f1, (double)f3).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(0.5D, 0.75D, 0.0D).tex((double)f1, (double)f2).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + bufferbuilder.pos(-0.5D, 0.75D, 0.0D).tex((double)f, (double)f2).color(l, 255, j1, 128).normal(0.0F, 1.0F, 0.0F).endVertex(); + tessellator.draw(); + GlStateManager.disableBlend(); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + super.doRender(entity, x, y, z, entityYaw, partialTicks); + } + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityXPOrb entity) + { + return EXPERIENCE_ORB_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderZombie.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderZombie.java new file mode 100644 index 0000000..9fdb7af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderZombie.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelZombie; +import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderZombie extends RenderBiped +{ + private static final ResourceLocation ZOMBIE_TEXTURES = new ResourceLocation("textures/entity/zombie/zombie.png"); + + public RenderZombie(RenderManager renderManagerIn) + { + super(renderManagerIn, new ModelZombie(), 0.5F); + LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) + { + protected void initArmor() + { + this.modelLeggings = new ModelZombie(0.5F, true); + this.modelArmor = new ModelZombie(1.0F, true); + } + }; + this.addLayer(layerbipedarmor); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityZombie entity) + { + return ZOMBIE_TEXTURES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderZombieVillager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderZombieVillager.java new file mode 100644 index 0000000..f3c490b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/RenderZombieVillager.java @@ -0,0 +1,59 @@ +package net.minecraft.client.renderer.entity; + +import net.minecraft.client.model.ModelZombieVillager; +import net.minecraft.client.renderer.entity.layers.LayerVillagerArmor; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RenderZombieVillager extends RenderBiped +{ + private static final ResourceLocation ZOMBIE_VILLAGER_TEXTURES = new ResourceLocation("textures/entity/zombie_villager/zombie_villager.png"); + private static final ResourceLocation ZOMBIE_VILLAGER_FARMER_LOCATION = new ResourceLocation("textures/entity/zombie_villager/zombie_farmer.png"); + private static final ResourceLocation ZOMBIE_VILLAGER_LIBRARIAN_LOC = new ResourceLocation("textures/entity/zombie_villager/zombie_librarian.png"); + private static final ResourceLocation ZOMBIE_VILLAGER_PRIEST_LOCATION = new ResourceLocation("textures/entity/zombie_villager/zombie_priest.png"); + private static final ResourceLocation ZOMBIE_VILLAGER_SMITH_LOCATION = new ResourceLocation("textures/entity/zombie_villager/zombie_smith.png"); + private static final ResourceLocation ZOMBIE_VILLAGER_BUTCHER_LOCATION = new ResourceLocation("textures/entity/zombie_villager/zombie_butcher.png"); + + public RenderZombieVillager(RenderManager p_i47186_1_) + { + super(p_i47186_1_, new ModelZombieVillager(), 0.5F); + this.addLayer(new LayerVillagerArmor(this)); + } + + /** + * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. + */ + protected ResourceLocation getEntityTexture(EntityZombieVillager entity) + { + if (true) return entity.getForgeProfession().getZombieSkin(); + switch (entity.getProfession()) + { + case 0: + return ZOMBIE_VILLAGER_FARMER_LOCATION; + case 1: + return ZOMBIE_VILLAGER_LIBRARIAN_LOC; + case 2: + return ZOMBIE_VILLAGER_PRIEST_LOCATION; + case 3: + return ZOMBIE_VILLAGER_SMITH_LOCATION; + case 4: + return ZOMBIE_VILLAGER_BUTCHER_LOCATION; + case 5: + default: + return ZOMBIE_VILLAGER_TEXTURES; + } + } + + protected void applyRotations(EntityZombieVillager entityLiving, float p_77043_2_, float rotationYaw, float partialTicks) + { + if (entityLiving.isConverting()) + { + rotationYaw += (float)(Math.cos((double)entityLiving.ticksExisted * 3.25D) * Math.PI * 0.25D); + } + + super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java new file mode 100644 index 0000000..ab09a65 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerArmorBase.java @@ -0,0 +1,209 @@ +package net.minecraft.client.renderer.entity.layers; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class LayerArmorBase implements LayerRenderer +{ + protected static final ResourceLocation ENCHANTED_ITEM_GLINT_RES = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + protected T modelLeggings; + protected T modelArmor; + private final RenderLivingBase renderer; + private float alpha = 1.0F; + private float colorR = 1.0F; + private float colorG = 1.0F; + private float colorB = 1.0F; + private boolean skipRenderGlint; + private static final Map ARMOR_TEXTURE_RES_MAP = Maps.newHashMap(); + + public LayerArmorBase(RenderLivingBase rendererIn) + { + this.renderer = rendererIn; + this.initArmor(); + } + + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.CHEST); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.LEGS); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.FEET); + this.renderArmorLayer(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, EntityEquipmentSlot.HEAD); + } + + public boolean shouldCombineTextures() + { + return false; + } + + private void renderArmorLayer(EntityLivingBase entityLivingBaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale, EntityEquipmentSlot slotIn) + { + ItemStack itemstack = entityLivingBaseIn.getItemStackFromSlot(slotIn); + + if (itemstack.getItem() instanceof ItemArmor) + { + ItemArmor itemarmor = (ItemArmor)itemstack.getItem(); + + if (itemarmor.getEquipmentSlot() == slotIn) + { + T t = this.getModelFromSlot(slotIn); + t = getArmorModelHook(entityLivingBaseIn, itemstack, slotIn, t); + t.setModelAttributes(this.renderer.getMainModel()); + t.setLivingAnimations(entityLivingBaseIn, limbSwing, limbSwingAmount, partialTicks); + this.setModelSlotVisible(t, slotIn); + boolean flag = this.isLegSlot(slotIn); + this.renderer.bindTexture(this.getArmorResource(entityLivingBaseIn, itemstack, slotIn, null)); + + { + if (itemarmor.hasOverlay(itemstack)) // Allow this for anything, not only cloth + { + int i = itemarmor.getColor(itemstack); + float f = (float)(i >> 16 & 255) / 255.0F; + float f1 = (float)(i >> 8 & 255) / 255.0F; + float f2 = (float)(i & 255) / 255.0F; + GlStateManager.color(this.colorR * f, this.colorG * f1, this.colorB * f2, this.alpha); + t.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + this.renderer.bindTexture(this.getArmorResource(entityLivingBaseIn, itemstack, slotIn, "overlay")); + } + { // Non-colored + GlStateManager.color(this.colorR, this.colorG, this.colorB, this.alpha); + t.render(entityLivingBaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } // Default + if (!this.skipRenderGlint && itemstack.hasEffect()) + { + renderEnchantedGlint(this.renderer, entityLivingBaseIn, t, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + } + } + } + } + + public T getModelFromSlot(EntityEquipmentSlot slotIn) + { + return (T)(this.isLegSlot(slotIn) ? this.modelLeggings : this.modelArmor); + } + + private boolean isLegSlot(EntityEquipmentSlot slotIn) + { + return slotIn == EntityEquipmentSlot.LEGS; + } + + public static void renderEnchantedGlint(RenderLivingBase p_188364_0_, EntityLivingBase p_188364_1_, ModelBase model, float p_188364_3_, float p_188364_4_, float p_188364_5_, float p_188364_6_, float p_188364_7_, float p_188364_8_, float p_188364_9_) + { + float f = (float)p_188364_1_.ticksExisted + p_188364_5_; + p_188364_0_.bindTexture(ENCHANTED_ITEM_GLINT_RES); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + GlStateManager.enableBlend(); + GlStateManager.depthFunc(514); + GlStateManager.depthMask(false); + float f1 = 0.5F; + GlStateManager.color(0.5F, 0.5F, 0.5F, 1.0F); + + for (int i = 0; i < 2; ++i) + { + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_COLOR, GlStateManager.DestFactor.ONE); + float f2 = 0.76F; + GlStateManager.color(0.38F, 0.19F, 0.608F, 1.0F); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f3 = 0.33333334F; + GlStateManager.scale(0.33333334F, 0.33333334F, 0.33333334F); + GlStateManager.rotate(30.0F - (float)i * 60.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, f * (0.001F + (float)i * 0.003F) * 20.0F, 0.0F); + GlStateManager.matrixMode(5888); + model.render(p_188364_1_, p_188364_3_, p_188364_4_, p_188364_6_, p_188364_7_, p_188364_8_, p_188364_9_); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + } + + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.enableLighting(); + GlStateManager.depthMask(true); + GlStateManager.depthFunc(515); + GlStateManager.disableBlend(); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + } + + @Deprecated //Use the more sensitive version getArmorResource below + private ResourceLocation getArmorResource(ItemArmor armor, boolean p_177181_2_) + { + return this.getArmorResource(armor, p_177181_2_, (String)null); + } + + @Deprecated //Use the more sensitive version getArmorResource below + private ResourceLocation getArmorResource(ItemArmor armor, boolean p_177178_2_, String p_177178_3_) + { + String s = String.format("textures/models/armor/%s_layer_%d%s.png", armor.getArmorMaterial().getName(), p_177178_2_ ? 2 : 1, p_177178_3_ == null ? "" : String.format("_%s", p_177178_3_)); + ResourceLocation resourcelocation = ARMOR_TEXTURE_RES_MAP.get(s); + + if (resourcelocation == null) + { + resourcelocation = new ResourceLocation(s); + ARMOR_TEXTURE_RES_MAP.put(s, resourcelocation); + } + + return resourcelocation; + } + + protected abstract void initArmor(); + + protected abstract void setModelSlotVisible(T p_188359_1_, EntityEquipmentSlot slotIn); + + /*=================================== FORGE START =========================================*/ + + /** + * Hook to allow item-sensitive armor model. for LayerBipedArmor. + */ + protected T getArmorModelHook(EntityLivingBase entity, ItemStack itemStack, EntityEquipmentSlot slot, T model) + { + return model; + } + + /** + * More generic ForgeHook version of the above function, it allows for Items to have more control over what texture they provide. + * + * @param entity Entity wearing the armor + * @param stack ItemStack for the armor + * @param slot Slot ID that the item is in + * @param type Subtype, can be null or "overlay" + * @return ResourceLocation pointing at the armor's texture + */ + public ResourceLocation getArmorResource(net.minecraft.entity.Entity entity, ItemStack stack, EntityEquipmentSlot slot, String type) + { + ItemArmor item = (ItemArmor)stack.getItem(); + String texture = item.getArmorMaterial().getName(); + String domain = "minecraft"; + int idx = texture.indexOf(':'); + if (idx != -1) + { + domain = texture.substring(0, idx); + texture = texture.substring(idx + 1); + } + String s1 = String.format("%s:textures/models/armor/%s_layer_%d%s.png", domain, texture, (isLegSlot(slot) ? 2 : 1), type == null ? "" : String.format("_%s", type)); + + s1 = net.minecraftforge.client.ForgeHooksClient.getArmorTexture(entity, stack, s1, slot, type); + ResourceLocation resourcelocation = (ResourceLocation)ARMOR_TEXTURE_RES_MAP.get(s1); + + if (resourcelocation == null) + { + resourcelocation = new ResourceLocation(s1); + ARMOR_TEXTURE_RES_MAP.put(s1, resourcelocation); + } + + return resourcelocation; + } + /*=================================== FORGE END ===========================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerArrow.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerArrow.java new file mode 100644 index 0000000..c404ab5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerArrow.java @@ -0,0 +1,75 @@ +package net.minecraft.client.renderer.entity.layers; + +import java.util.Random; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerArrow implements LayerRenderer +{ + private final RenderLivingBase renderer; + + public LayerArrow(RenderLivingBase rendererIn) + { + this.renderer = rendererIn; + } + + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + int i = entitylivingbaseIn.getArrowCountInEntity(); + + if (i > 0) + { + Entity entity = new EntityTippedArrow(entitylivingbaseIn.world, entitylivingbaseIn.posX, entitylivingbaseIn.posY, entitylivingbaseIn.posZ); + Random random = new Random((long)entitylivingbaseIn.getEntityId()); + RenderHelper.disableStandardItemLighting(); + + for (int j = 0; j < i; ++j) + { + GlStateManager.pushMatrix(); + ModelRenderer modelrenderer = this.renderer.getMainModel().getRandomModelBox(random); + ModelBox modelbox = modelrenderer.cubeList.get(random.nextInt(modelrenderer.cubeList.size())); + modelrenderer.postRender(0.0625F); + float f = random.nextFloat(); + float f1 = random.nextFloat(); + float f2 = random.nextFloat(); + float f3 = (modelbox.posX1 + (modelbox.posX2 - modelbox.posX1) * f) / 16.0F; + float f4 = (modelbox.posY1 + (modelbox.posY2 - modelbox.posY1) * f1) / 16.0F; + float f5 = (modelbox.posZ1 + (modelbox.posZ2 - modelbox.posZ1) * f2) / 16.0F; + GlStateManager.translate(f3, f4, f5); + f = f * 2.0F - 1.0F; + f1 = f1 * 2.0F - 1.0F; + f2 = f2 * 2.0F - 1.0F; + f = f * -1.0F; + f1 = f1 * -1.0F; + f2 = f2 * -1.0F; + float f6 = MathHelper.sqrt(f * f + f2 * f2); + entity.rotationYaw = (float)(Math.atan2((double)f, (double)f2) * (180D / Math.PI)); + entity.rotationPitch = (float)(Math.atan2((double)f1, (double)f6) * (180D / Math.PI)); + entity.prevRotationYaw = entity.rotationYaw; + entity.prevRotationPitch = entity.rotationPitch; + double d0 = 0.0D; + double d1 = 0.0D; + double d2 = 0.0D; + this.renderer.getRenderManager().renderEntity(entity, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks, false); + GlStateManager.popMatrix(); + } + + RenderHelper.enableStandardItemLighting(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java new file mode 100644 index 0000000..0398357 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerBipedArmor.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerBipedArmor extends LayerArmorBase +{ + public LayerBipedArmor(RenderLivingBase rendererIn) + { + super(rendererIn); + } + + protected void initArmor() + { + this.modelLeggings = new ModelBiped(0.5F); + this.modelArmor = new ModelBiped(1.0F); + } + + @SuppressWarnings("incomplete-switch") + protected void setModelSlotVisible(ModelBiped p_188359_1_, EntityEquipmentSlot slotIn) + { + this.setModelVisible(p_188359_1_); + + switch (slotIn) + { + case HEAD: + p_188359_1_.bipedHead.showModel = true; + p_188359_1_.bipedHeadwear.showModel = true; + break; + case CHEST: + p_188359_1_.bipedBody.showModel = true; + p_188359_1_.bipedRightArm.showModel = true; + p_188359_1_.bipedLeftArm.showModel = true; + break; + case LEGS: + p_188359_1_.bipedBody.showModel = true; + p_188359_1_.bipedRightLeg.showModel = true; + p_188359_1_.bipedLeftLeg.showModel = true; + break; + case FEET: + p_188359_1_.bipedRightLeg.showModel = true; + p_188359_1_.bipedLeftLeg.showModel = true; + } + } + + protected void setModelVisible(ModelBiped model) + { + model.setVisible(false); + } + + @Override + protected ModelBiped getArmorModelHook(net.minecraft.entity.EntityLivingBase entity, net.minecraft.item.ItemStack itemStack, EntityEquipmentSlot slot, ModelBiped model) + { + return net.minecraftforge.client.ForgeHooksClient.getArmorModel(entity, itemStack, slot, model); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCape.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCape.java new file mode 100644 index 0000000..ccabc9a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCape.java @@ -0,0 +1,74 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerCape implements LayerRenderer +{ + private final RenderPlayer playerRenderer; + + public LayerCape(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + } + + public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.hasPlayerInfo() && !entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isWearing(EnumPlayerModelParts.CAPE) && entitylivingbaseIn.getLocationCape() != null) + { + ItemStack itemstack = entitylivingbaseIn.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + + if (itemstack.getItem() != Items.ELYTRA) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.playerRenderer.bindTexture(entitylivingbaseIn.getLocationCape()); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 0.125F); + double d0 = entitylivingbaseIn.prevChasingPosX + (entitylivingbaseIn.chasingPosX - entitylivingbaseIn.prevChasingPosX) * (double)partialTicks - (entitylivingbaseIn.prevPosX + (entitylivingbaseIn.posX - entitylivingbaseIn.prevPosX) * (double)partialTicks); + double d1 = entitylivingbaseIn.prevChasingPosY + (entitylivingbaseIn.chasingPosY - entitylivingbaseIn.prevChasingPosY) * (double)partialTicks - (entitylivingbaseIn.prevPosY + (entitylivingbaseIn.posY - entitylivingbaseIn.prevPosY) * (double)partialTicks); + double d2 = entitylivingbaseIn.prevChasingPosZ + (entitylivingbaseIn.chasingPosZ - entitylivingbaseIn.prevChasingPosZ) * (double)partialTicks - (entitylivingbaseIn.prevPosZ + (entitylivingbaseIn.posZ - entitylivingbaseIn.prevPosZ) * (double)partialTicks); + float f = entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks; + double d3 = (double)MathHelper.sin(f * 0.017453292F); + double d4 = (double)(-MathHelper.cos(f * 0.017453292F)); + float f1 = (float)d1 * 10.0F; + f1 = MathHelper.clamp(f1, -6.0F, 32.0F); + float f2 = (float)(d0 * d3 + d2 * d4) * 100.0F; + float f3 = (float)(d0 * d4 - d2 * d3) * 100.0F; + + if (f2 < 0.0F) + { + f2 = 0.0F; + } + + float f4 = entitylivingbaseIn.prevCameraYaw + (entitylivingbaseIn.cameraYaw - entitylivingbaseIn.prevCameraYaw) * partialTicks; + f1 = f1 + MathHelper.sin((entitylivingbaseIn.prevDistanceWalkedModified + (entitylivingbaseIn.distanceWalkedModified - entitylivingbaseIn.prevDistanceWalkedModified) * partialTicks) * 6.0F) * 32.0F * f4; + + if (entitylivingbaseIn.isSneaking()) + { + f1 += 25.0F; + } + + GlStateManager.rotate(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f3 / 2.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-f3 / 2.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + this.playerRenderer.getMainModel().renderCape(0.0625F); + GlStateManager.popMatrix(); + } + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java new file mode 100644 index 0000000..655e295 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCreeperCharge.java @@ -0,0 +1,58 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelCreeper; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderCreeper; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerCreeperCharge implements LayerRenderer +{ + private static final ResourceLocation LIGHTNING_TEXTURE = new ResourceLocation("textures/entity/creeper/creeper_armor.png"); + private final RenderCreeper creeperRenderer; + private final ModelCreeper creeperModel = new ModelCreeper(2.0F); + + public LayerCreeperCharge(RenderCreeper creeperRendererIn) + { + this.creeperRenderer = creeperRendererIn; + } + + public void doRenderLayer(EntityCreeper entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.getPowered()) + { + boolean flag = entitylivingbaseIn.isInvisible(); + GlStateManager.depthMask(!flag); + this.creeperRenderer.bindTexture(LIGHTNING_TEXTURE); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = (float)entitylivingbaseIn.ticksExisted + partialTicks; + GlStateManager.translate(f * 0.01F, f * 0.01F, 0.0F); + GlStateManager.matrixMode(5888); + GlStateManager.enableBlend(); + float f1 = 0.5F; + GlStateManager.color(0.5F, 0.5F, 0.5F, 1.0F); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); + this.creeperModel.setModelAttributes(this.creeperRenderer.getMainModel()); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + this.creeperModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.depthMask(flag); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java new file mode 100644 index 0000000..5df3fbd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerCustomHead.java @@ -0,0 +1,122 @@ +package net.minecraft.client.renderer.entity.layers; + +import com.mojang.authlib.GameProfile; +import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; + +@SideOnly(Side.CLIENT) +public class LayerCustomHead implements LayerRenderer +{ + private final ModelRenderer modelRenderer; + + public LayerCustomHead(ModelRenderer p_i46120_1_) + { + this.modelRenderer = p_i46120_1_; + } + + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + ItemStack itemstack = entitylivingbaseIn.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + + if (!itemstack.isEmpty()) + { + Item item = itemstack.getItem(); + Minecraft minecraft = Minecraft.getMinecraft(); + GlStateManager.pushMatrix(); + + if (entitylivingbaseIn.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + + boolean flag = entitylivingbaseIn instanceof EntityVillager || entitylivingbaseIn instanceof EntityZombieVillager; + + if (entitylivingbaseIn.isChild() && !(entitylivingbaseIn instanceof EntityVillager)) + { + float f = 2.0F; + float f1 = 1.4F; + GlStateManager.translate(0.0F, 0.5F * scale, 0.0F); + GlStateManager.scale(0.7F, 0.7F, 0.7F); + GlStateManager.translate(0.0F, 16.0F * scale, 0.0F); + } + + this.modelRenderer.postRender(0.0625F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if (item == Items.SKULL) + { + float f2 = 1.1875F; + GlStateManager.scale(1.1875F, -1.1875F, -1.1875F); + + if (flag) + { + GlStateManager.translate(0.0F, 0.0625F, 0.0F); + } + + GameProfile gameprofile = null; + + if (itemstack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = itemstack.getTagCompound(); + + if (nbttagcompound.hasKey("SkullOwner", 10)) + { + gameprofile = NBTUtil.readGameProfileFromNBT(nbttagcompound.getCompoundTag("SkullOwner")); + } + else if (nbttagcompound.hasKey("SkullOwner", 8)) + { + String s = nbttagcompound.getString("SkullOwner"); + + if (!StringUtils.isBlank(s)) + { + gameprofile = TileEntitySkull.updateGameprofile(new GameProfile((UUID)null, s)); + nbttagcompound.setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), gameprofile)); + } + } + } + + TileEntitySkullRenderer.instance.renderSkull(-0.5F, 0.0F, -0.5F, EnumFacing.UP, 180.0F, itemstack.getMetadata(), gameprofile, -1, limbSwing); + } + else if (!(item instanceof ItemArmor) || ((ItemArmor)item).getEquipmentSlot() != EntityEquipmentSlot.HEAD) + { + float f3 = 0.625F; + GlStateManager.translate(0.0F, -0.25F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.625F, -0.625F, -0.625F); + + if (flag) + { + GlStateManager.translate(0.0F, 0.1875F, 0.0F); + } + + minecraft.getItemRenderer().renderItem(entitylivingbaseIn, itemstack, ItemCameraTransforms.TransformType.HEAD); + } + + GlStateManager.popMatrix(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java new file mode 100644 index 0000000..e46cb7d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerDeadmau5Head.java @@ -0,0 +1,48 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerDeadmau5Head implements LayerRenderer +{ + private final RenderPlayer playerRenderer; + + public LayerDeadmau5Head(RenderPlayer playerRendererIn) + { + this.playerRenderer = playerRendererIn; + } + + public void doRenderLayer(AbstractClientPlayer entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if ("deadmau5".equals(entitylivingbaseIn.getName()) && entitylivingbaseIn.hasSkin() && !entitylivingbaseIn.isInvisible()) + { + this.playerRenderer.bindTexture(entitylivingbaseIn.getLocationSkin()); + + for (int i = 0; i < 2; ++i) + { + float f = entitylivingbaseIn.prevRotationYaw + (entitylivingbaseIn.rotationYaw - entitylivingbaseIn.prevRotationYaw) * partialTicks - (entitylivingbaseIn.prevRenderYawOffset + (entitylivingbaseIn.renderYawOffset - entitylivingbaseIn.prevRenderYawOffset) * partialTicks); + float f1 = entitylivingbaseIn.prevRotationPitch + (entitylivingbaseIn.rotationPitch - entitylivingbaseIn.prevRotationPitch) * partialTicks; + GlStateManager.pushMatrix(); + GlStateManager.rotate(f, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f1, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(0.375F * (float)(i * 2 - 1), 0.0F, 0.0F); + GlStateManager.translate(0.0F, -0.375F, 0.0F); + GlStateManager.rotate(-f1, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-f, 0.0F, 1.0F, 0.0F); + float f2 = 1.3333334F; + GlStateManager.scale(1.3333334F, 1.3333334F, 1.3333334F); + this.playerRenderer.getMainModel().renderDeadmau5Head(0.0625F); + GlStateManager.popMatrix(); + } + } + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerElytra.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerElytra.java new file mode 100644 index 0000000..f9dda42 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerElytra.java @@ -0,0 +1,82 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelElytra; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerElytra implements LayerRenderer +{ + /** The basic Elytra texture. */ + private static final ResourceLocation TEXTURE_ELYTRA = new ResourceLocation("textures/entity/elytra.png"); + /** Instance of the player renderer. */ + protected final RenderLivingBase renderPlayer; + /** The model used by the Elytra. */ + private final ModelElytra modelElytra = new ModelElytra(); + + public LayerElytra(RenderLivingBase p_i47185_1_) + { + this.renderPlayer = p_i47185_1_; + } + + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + ItemStack itemstack = entitylivingbaseIn.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + + if (itemstack.getItem() == Items.ELYTRA) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + + if (entitylivingbaseIn instanceof AbstractClientPlayer) + { + AbstractClientPlayer abstractclientplayer = (AbstractClientPlayer)entitylivingbaseIn; + + if (abstractclientplayer.isPlayerInfoSet() && abstractclientplayer.getLocationElytra() != null) + { + this.renderPlayer.bindTexture(abstractclientplayer.getLocationElytra()); + } + else if (abstractclientplayer.hasPlayerInfo() && abstractclientplayer.getLocationCape() != null && abstractclientplayer.isWearing(EnumPlayerModelParts.CAPE)) + { + this.renderPlayer.bindTexture(abstractclientplayer.getLocationCape()); + } + else + { + this.renderPlayer.bindTexture(TEXTURE_ELYTRA); + } + } + else + { + this.renderPlayer.bindTexture(TEXTURE_ELYTRA); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.0F, 0.125F); + this.modelElytra.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entitylivingbaseIn); + this.modelElytra.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + + if (itemstack.isItemEnchanted()) + { + LayerArmorBase.renderEnchantedGlint(this.renderPlayer, entitylivingbaseIn, this.modelElytra, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale); + } + + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java new file mode 100644 index 0000000..3ebe472 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEnderDragonDeath.java @@ -0,0 +1,77 @@ +package net.minecraft.client.renderer.entity.layers; + +import java.util.Random; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEnderDragonDeath implements LayerRenderer +{ + public void doRenderLayer(EntityDragon entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.deathTicks > 0) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + RenderHelper.disableStandardItemLighting(); + float f = ((float)entitylivingbaseIn.deathTicks + partialTicks) / 200.0F; + float f1 = 0.0F; + + if (f > 0.8F) + { + f1 = (f - 0.8F) / 0.2F; + } + + Random random = new Random(432L); + GlStateManager.disableTexture2D(); + GlStateManager.shadeModel(7425); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE); + GlStateManager.disableAlpha(); + GlStateManager.enableCull(); + GlStateManager.depthMask(false); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, -1.0F, -2.0F); + + for (int i = 0; (float)i < (f + f * f) / 2.0F * 60.0F; ++i) + { + GlStateManager.rotate(random.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(random.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(random.nextFloat() * 360.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(random.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(random.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(random.nextFloat() * 360.0F + f * 90.0F, 0.0F, 0.0F, 1.0F); + float f2 = random.nextFloat() * 20.0F + 5.0F + f1 * 10.0F; + float f3 = random.nextFloat() * 2.0F + 1.0F + f1 * 2.0F; + bufferbuilder.begin(6, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).color(255, 255, 255, (int)(255.0F * (1.0F - f1))).endVertex(); + bufferbuilder.pos(-0.866D * (double)f3, (double)f2, (double)(-0.5F * f3)).color(255, 0, 255, 0).endVertex(); + bufferbuilder.pos(0.866D * (double)f3, (double)f2, (double)(-0.5F * f3)).color(255, 0, 255, 0).endVertex(); + bufferbuilder.pos(0.0D, (double)f2, (double)(1.0F * f3)).color(255, 0, 255, 0).endVertex(); + bufferbuilder.pos(-0.866D * (double)f3, (double)f2, (double)(-0.5F * f3)).color(255, 0, 255, 0).endVertex(); + tessellator.draw(); + } + + GlStateManager.popMatrix(); + GlStateManager.depthMask(true); + GlStateManager.disableCull(); + GlStateManager.disableBlend(); + GlStateManager.shadeModel(7424); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableTexture2D(); + GlStateManager.enableAlpha(); + RenderHelper.enableStandardItemLighting(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java new file mode 100644 index 0000000..d4b6126 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEnderDragonEyes.java @@ -0,0 +1,50 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderDragon; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEnderDragonEyes implements LayerRenderer +{ + private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/enderdragon/dragon_eyes.png"); + private final RenderDragon dragonRenderer; + + public LayerEnderDragonEyes(RenderDragon dragonRendererIn) + { + this.dragonRenderer = dragonRendererIn; + } + + public void doRenderLayer(EntityDragon entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.dragonRenderer.bindTexture(TEXTURE); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); + GlStateManager.disableLighting(); + GlStateManager.depthFunc(514); + int i = 61680; + int j = 61680; + int k = 0; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 61680.0F, 0.0F); + GlStateManager.enableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + this.dragonRenderer.getMainModel().render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + this.dragonRenderer.setLightmap(entitylivingbaseIn); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.depthFunc(515); + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java new file mode 100644 index 0000000..9db4ee1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEndermanEyes.java @@ -0,0 +1,50 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderEnderman; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEndermanEyes implements LayerRenderer +{ + private static final ResourceLocation RES_ENDERMAN_EYES = new ResourceLocation("textures/entity/enderman/enderman_eyes.png"); + private final RenderEnderman endermanRenderer; + + public LayerEndermanEyes(RenderEnderman endermanRendererIn) + { + this.endermanRenderer = endermanRendererIn; + } + + public void doRenderLayer(EntityEnderman entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.endermanRenderer.bindTexture(RES_ENDERMAN_EYES); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); + GlStateManager.disableLighting(); + GlStateManager.depthMask(!entitylivingbaseIn.isInvisible()); + int i = 61680; + int j = 61680; + int k = 0; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 61680.0F, 0.0F); + GlStateManager.enableLighting(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + this.endermanRenderer.getMainModel().render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + this.endermanRenderer.setLightmap(entitylivingbaseIn); + GlStateManager.depthMask(true); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.java new file mode 100644 index 0000000..2fa8b81 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerEntityOnShoulder.java @@ -0,0 +1,130 @@ +package net.minecraft.client.renderer.entity.layers; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelParrot; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderParrot; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerEntityOnShoulder implements LayerRenderer +{ + private final RenderManager renderManager; + protected RenderLivingBase leftRenderer; + private ModelBase leftModel; + private ResourceLocation leftResource; + private UUID leftUniqueId; + private Class leftEntityClass; + protected RenderLivingBase rightRenderer; + private ModelBase rightModel; + private ResourceLocation rightResource; + private UUID rightUniqueId; + private Class rightEntityClass; + + public LayerEntityOnShoulder(RenderManager p_i47370_1_) + { + this.renderManager = p_i47370_1_; + } + + public void doRenderLayer(EntityPlayer entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.getLeftShoulderEntity() != null || entitylivingbaseIn.getRightShoulderEntity() != null) + { + GlStateManager.enableRescaleNormal(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + NBTTagCompound nbttagcompound = entitylivingbaseIn.getLeftShoulderEntity(); + + if (!nbttagcompound.hasNoTags()) + { + LayerEntityOnShoulder.DataHolder layerentityonshoulder$dataholder = this.renderEntityOnShoulder(entitylivingbaseIn, this.leftUniqueId, nbttagcompound, this.leftRenderer, this.leftModel, this.leftResource, this.leftEntityClass, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, true); + this.leftUniqueId = layerentityonshoulder$dataholder.entityId; + this.leftRenderer = layerentityonshoulder$dataholder.renderer; + this.leftResource = layerentityonshoulder$dataholder.textureLocation; + this.leftModel = layerentityonshoulder$dataholder.model; + this.leftEntityClass = layerentityonshoulder$dataholder.clazz; + } + + NBTTagCompound nbttagcompound1 = entitylivingbaseIn.getRightShoulderEntity(); + + if (!nbttagcompound1.hasNoTags()) + { + LayerEntityOnShoulder.DataHolder layerentityonshoulder$dataholder1 = this.renderEntityOnShoulder(entitylivingbaseIn, this.rightUniqueId, nbttagcompound1, this.rightRenderer, this.rightModel, this.rightResource, this.rightEntityClass, limbSwing, limbSwingAmount, partialTicks, ageInTicks, netHeadYaw, headPitch, scale, false); + this.rightUniqueId = layerentityonshoulder$dataholder1.entityId; + this.rightRenderer = layerentityonshoulder$dataholder1.renderer; + this.rightResource = layerentityonshoulder$dataholder1.textureLocation; + this.rightModel = layerentityonshoulder$dataholder1.model; + this.rightEntityClass = layerentityonshoulder$dataholder1.clazz; + } + + GlStateManager.disableRescaleNormal(); + } + } + + private LayerEntityOnShoulder.DataHolder renderEntityOnShoulder(EntityPlayer p_192864_1_, @Nullable UUID p_192864_2_, NBTTagCompound p_192864_3_, RenderLivingBase p_192864_4_, ModelBase p_192864_5_, ResourceLocation p_192864_6_, Class p_192864_7_, float p_192864_8_, float p_192864_9_, float p_192864_10_, float p_192864_11_, float p_192864_12_, float p_192864_13_, float p_192864_14_, boolean p_192864_15_) + { + if (p_192864_2_ == null || !p_192864_2_.equals(p_192864_3_.getUniqueId("UUID"))) + { + p_192864_2_ = p_192864_3_.getUniqueId("UUID"); + p_192864_7_ = EntityList.getClassFromName(p_192864_3_.getString("id")); + + if (p_192864_7_ == EntityParrot.class) + { + p_192864_4_ = new RenderParrot(this.renderManager); + p_192864_5_ = new ModelParrot(); + p_192864_6_ = RenderParrot.PARROT_TEXTURES[p_192864_3_.getInteger("Variant")]; + } + } + + p_192864_4_.bindTexture(p_192864_6_); + GlStateManager.pushMatrix(); + float f = p_192864_1_.isSneaking() ? -1.3F : -1.5F; + float f1 = p_192864_15_ ? 0.4F : -0.4F; + GlStateManager.translate(f1, f, 0.0F); + + if (p_192864_7_ == EntityParrot.class) + { + p_192864_11_ = 0.0F; + } + + p_192864_5_.setLivingAnimations(p_192864_1_, p_192864_8_, p_192864_9_, p_192864_10_); + p_192864_5_.setRotationAngles(p_192864_8_, p_192864_9_, p_192864_11_, p_192864_12_, p_192864_13_, p_192864_14_, p_192864_1_); + p_192864_5_.render(p_192864_1_, p_192864_8_, p_192864_9_, p_192864_11_, p_192864_12_, p_192864_13_, p_192864_14_); + GlStateManager.popMatrix(); + return new LayerEntityOnShoulder.DataHolder(p_192864_2_, p_192864_4_, p_192864_5_, p_192864_6_, p_192864_7_); + } + + public boolean shouldCombineTextures() + { + return false; + } + + @SideOnly(Side.CLIENT) + class DataHolder + { + public UUID entityId; + public RenderLivingBase renderer; + public ModelBase model; + public ResourceLocation textureLocation; + public Class clazz; + + public DataHolder(UUID p_i47463_2_, RenderLivingBase p_i47463_3_, ModelBase p_i47463_4_, ResourceLocation p_i47463_5_, Class p_i47463_6_) + { + this.entityId = p_i47463_2_; + this.renderer = p_i47463_3_; + this.model = p_i47463_4_; + this.textureLocation = p_i47463_5_; + this.clazz = p_i47463_6_; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java new file mode 100644 index 0000000..22f37ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldBlock.java @@ -0,0 +1,55 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderEnderman; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldBlock implements LayerRenderer +{ + private final RenderEnderman endermanRenderer; + + public LayerHeldBlock(RenderEnderman endermanRendererIn) + { + this.endermanRenderer = endermanRendererIn; + } + + public void doRenderLayer(EntityEnderman entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + IBlockState iblockstate = entitylivingbaseIn.getHeldBlockState(); + + if (iblockstate != null) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.0F, 0.6875F, -0.75F); + GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.25F, 0.1875F, 0.25F); + float f = 0.5F; + GlStateManager.scale(-0.5F, -0.5F, 0.5F); + int i = entitylivingbaseIn.getBrightnessForRender(); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.endermanRenderer.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + blockrendererdispatcher.renderBlockBrightness(iblockstate, 1.0F); + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java new file mode 100644 index 0000000..81a3861 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java @@ -0,0 +1,77 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHandSide; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItem implements LayerRenderer +{ + protected final RenderLivingBase livingEntityRenderer; + + public LayerHeldItem(RenderLivingBase livingEntityRendererIn) + { + this.livingEntityRenderer = livingEntityRendererIn; + } + + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + boolean flag = entitylivingbaseIn.getPrimaryHand() == EnumHandSide.RIGHT; + ItemStack itemstack = flag ? entitylivingbaseIn.getHeldItemOffhand() : entitylivingbaseIn.getHeldItemMainhand(); + ItemStack itemstack1 = flag ? entitylivingbaseIn.getHeldItemMainhand() : entitylivingbaseIn.getHeldItemOffhand(); + + if (!itemstack.isEmpty() || !itemstack1.isEmpty()) + { + GlStateManager.pushMatrix(); + + if (this.livingEntityRenderer.getMainModel().isChild) + { + float f = 0.5F; + GlStateManager.translate(0.0F, 0.75F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + this.renderHeldItem(entitylivingbaseIn, itemstack1, ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, EnumHandSide.RIGHT); + this.renderHeldItem(entitylivingbaseIn, itemstack, ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, EnumHandSide.LEFT); + GlStateManager.popMatrix(); + } + } + + private void renderHeldItem(EntityLivingBase p_188358_1_, ItemStack p_188358_2_, ItemCameraTransforms.TransformType p_188358_3_, EnumHandSide handSide) + { + if (!p_188358_2_.isEmpty()) + { + GlStateManager.pushMatrix(); + + if (p_188358_1_.isSneaking()) + { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } + // Forge: moved this call down, fixes incorrect offset while sneaking. + this.translateToHand(handSide); + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + boolean flag = handSide == EnumHandSide.LEFT; + GlStateManager.translate((float)(flag ? -1 : 1) / 16.0F, 0.125F, -0.625F); + Minecraft.getMinecraft().getItemRenderer().renderItemSide(p_188358_1_, p_188358_2_, p_188358_3_, flag); + GlStateManager.popMatrix(); + } + } + + protected void translateToHand(EnumHandSide p_191361_1_) + { + ((ModelBiped)this.livingEntityRenderer.getMainModel()).postRenderArm(0.0625F, p_191361_1_); + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java new file mode 100644 index 0000000..5a9fc0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java @@ -0,0 +1,101 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.RenderWitch; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerHeldItemWitch implements LayerRenderer +{ + private final RenderWitch witchRenderer; + + public LayerHeldItemWitch(RenderWitch witchRendererIn) + { + this.witchRenderer = witchRendererIn; + } + + public void doRenderLayer(EntityWitch entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + ItemStack itemstack = entitylivingbaseIn.getHeldItemMainhand(); + + if (!itemstack.isEmpty()) + { + GlStateManager.color(1.0F, 1.0F, 1.0F); + GlStateManager.pushMatrix(); + + if (this.witchRenderer.getMainModel().isChild) + { + GlStateManager.translate(0.0F, 0.625F, 0.0F); + GlStateManager.rotate(-20.0F, -1.0F, 0.0F, 0.0F); + float f = 0.5F; + GlStateManager.scale(0.5F, 0.5F, 0.5F); + } + + this.witchRenderer.getMainModel().villagerNose.postRender(0.0625F); + GlStateManager.translate(-0.0625F, 0.53125F, 0.21875F); + Item item = itemstack.getItem(); + Minecraft minecraft = Minecraft.getMinecraft(); + + if (Block.getBlockFromItem(item).getDefaultState().getRenderType() == EnumBlockRenderType.ENTITYBLOCK_ANIMATED) + { + GlStateManager.translate(0.0F, 0.0625F, -0.25F); + GlStateManager.rotate(30.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-5.0F, 0.0F, 1.0F, 0.0F); + float f1 = 0.375F; + GlStateManager.scale(0.375F, -0.375F, 0.375F); + } + else if (item == Items.BOW) + { + GlStateManager.translate(0.0F, 0.125F, -0.125F); + GlStateManager.rotate(-45.0F, 0.0F, 1.0F, 0.0F); + float f2 = 0.625F; + GlStateManager.scale(0.625F, -0.625F, 0.625F); + GlStateManager.rotate(-100.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-20.0F, 0.0F, 1.0F, 0.0F); + } + else if (item.isFull3D()) + { + if (item.shouldRotateAroundWhenRendering()) + { + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(0.0F, -0.0625F, 0.0F); + } + + this.witchRenderer.transformHeldFull3DItemLayer(); + GlStateManager.translate(0.0625F, -0.125F, 0.0F); + float f3 = 0.625F; + GlStateManager.scale(0.625F, -0.625F, 0.625F); + GlStateManager.rotate(0.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(0.0F, 0.0F, 1.0F, 0.0F); + } + else + { + GlStateManager.translate(0.1875F, 0.1875F, 0.0F); + float f4 = 0.875F; + GlStateManager.scale(0.875F, 0.875F, 0.875F); + GlStateManager.rotate(-20.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate(-60.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-30.0F, 0.0F, 0.0F, 1.0F); + } + + GlStateManager.rotate(-15.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(40.0F, 0.0F, 0.0F, 1.0F); + minecraft.getItemRenderer().renderItem(entitylivingbaseIn, itemstack, ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); + GlStateManager.popMatrix(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java new file mode 100644 index 0000000..529518b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerIronGolemFlower.java @@ -0,0 +1,53 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelIronGolem; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderIronGolem; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.init.Blocks; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerIronGolemFlower implements LayerRenderer +{ + private final RenderIronGolem ironGolemRenderer; + + public LayerIronGolemFlower(RenderIronGolem ironGolemRendererIn) + { + this.ironGolemRenderer = ironGolemRendererIn; + } + + public void doRenderLayer(EntityIronGolem entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.getHoldRoseTick() != 0) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.rotate(5.0F + 180.0F * ((ModelIronGolem)this.ironGolemRenderer.getMainModel()).ironGolemRightArm.rotateAngleX / (float)Math.PI, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.translate(-0.9375F, -0.625F, -0.9375F); + float f = 0.5F; + GlStateManager.scale(0.5F, -0.5F, 0.5F); + int i = entitylivingbaseIn.getBrightnessForRender(); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.ironGolemRenderer.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + blockrendererdispatcher.renderBlockBrightness(Blocks.RED_FLOWER.getDefaultState(), 1.0F); + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.java new file mode 100644 index 0000000..65ad8a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerLlamaDecor.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelLlama; +import net.minecraft.client.renderer.entity.RenderLlama; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerLlamaDecor implements LayerRenderer +{ + private static final ResourceLocation[] LLAMA_DECOR_TEXTURES = new ResourceLocation[] {new ResourceLocation("textures/entity/llama/decor/decor_white.png"), new ResourceLocation("textures/entity/llama/decor/decor_orange.png"), new ResourceLocation("textures/entity/llama/decor/decor_magenta.png"), new ResourceLocation("textures/entity/llama/decor/decor_light_blue.png"), new ResourceLocation("textures/entity/llama/decor/decor_yellow.png"), new ResourceLocation("textures/entity/llama/decor/decor_lime.png"), new ResourceLocation("textures/entity/llama/decor/decor_pink.png"), new ResourceLocation("textures/entity/llama/decor/decor_gray.png"), new ResourceLocation("textures/entity/llama/decor/decor_silver.png"), new ResourceLocation("textures/entity/llama/decor/decor_cyan.png"), new ResourceLocation("textures/entity/llama/decor/decor_purple.png"), new ResourceLocation("textures/entity/llama/decor/decor_blue.png"), new ResourceLocation("textures/entity/llama/decor/decor_brown.png"), new ResourceLocation("textures/entity/llama/decor/decor_green.png"), new ResourceLocation("textures/entity/llama/decor/decor_red.png"), new ResourceLocation("textures/entity/llama/decor/decor_black.png")}; + private final RenderLlama renderer; + private final ModelLlama model = new ModelLlama(0.5F); + + public LayerLlamaDecor(RenderLlama p_i47184_1_) + { + this.renderer = p_i47184_1_; + } + + public void doRenderLayer(EntityLlama entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.hasColor()) + { + this.renderer.bindTexture(LLAMA_DECOR_TEXTURES[entitylivingbaseIn.getColor().getMetadata()]); + this.model.setModelAttributes(this.renderer.getMainModel()); + this.model.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java new file mode 100644 index 0000000..b13433a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerMooshroomMushroom.java @@ -0,0 +1,63 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderMooshroom; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.init.Blocks; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerMooshroomMushroom implements LayerRenderer +{ + private final RenderMooshroom mooshroomRenderer; + + public LayerMooshroomMushroom(RenderMooshroom mooshroomRendererIn) + { + this.mooshroomRenderer = mooshroomRendererIn; + } + + public void doRenderLayer(EntityMooshroom entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (!entitylivingbaseIn.isChild() && !entitylivingbaseIn.isInvisible()) + { + BlockRendererDispatcher blockrendererdispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); + this.mooshroomRenderer.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + GlStateManager.enableCull(); + GlStateManager.cullFace(GlStateManager.CullFace.FRONT); + GlStateManager.pushMatrix(); + GlStateManager.scale(1.0F, -1.0F, 1.0F); + GlStateManager.translate(0.2F, 0.35F, 0.5F); + GlStateManager.rotate(42.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.pushMatrix(); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.RED_MUSHROOM.getDefaultState(), 1.0F); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + GlStateManager.translate(0.1F, 0.0F, -0.6F); + GlStateManager.rotate(42.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.RED_MUSHROOM.getDefaultState(), 1.0F); + GlStateManager.popMatrix(); + GlStateManager.popMatrix(); + GlStateManager.pushMatrix(); + this.mooshroomRenderer.getMainModel().head.postRender(0.0625F); + GlStateManager.scale(1.0F, -1.0F, 1.0F); + GlStateManager.translate(0.0F, 0.7F, -0.2F); + GlStateManager.rotate(12.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.5F, -0.5F, 0.5F); + blockrendererdispatcher.renderBlockBrightness(Blocks.RED_MUSHROOM.getDefaultState(), 1.0F); + GlStateManager.popMatrix(); + GlStateManager.cullFace(GlStateManager.CullFace.BACK); + GlStateManager.disableCull(); + } + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerRenderer.java new file mode 100644 index 0000000..927bad6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerRenderer.java @@ -0,0 +1,13 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface LayerRenderer +{ + void doRenderLayer(E entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale); + + boolean shouldCombineTextures(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSaddle.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSaddle.java new file mode 100644 index 0000000..0102917 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSaddle.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelPig; +import net.minecraft.client.renderer.entity.RenderPig; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerSaddle implements LayerRenderer +{ + private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/pig/pig_saddle.png"); + private final RenderPig pigRenderer; + private final ModelPig pigModel = new ModelPig(0.5F); + + public LayerSaddle(RenderPig pigRendererIn) + { + this.pigRenderer = pigRendererIn; + } + + public void doRenderLayer(EntityPig entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.getSaddled()) + { + this.pigRenderer.bindTexture(TEXTURE); + this.pigModel.setModelAttributes(this.pigRenderer.getMainModel()); + this.pigModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java new file mode 100644 index 0000000..fc3d2ce --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSheepWool.java @@ -0,0 +1,58 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelSheep1; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderSheep; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerSheepWool implements LayerRenderer +{ + private static final ResourceLocation TEXTURE = new ResourceLocation("textures/entity/sheep/sheep_fur.png"); + private final RenderSheep sheepRenderer; + private final ModelSheep1 sheepModel = new ModelSheep1(); + + public LayerSheepWool(RenderSheep sheepRendererIn) + { + this.sheepRenderer = sheepRendererIn; + } + + public void doRenderLayer(EntitySheep entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (!entitylivingbaseIn.getSheared() && !entitylivingbaseIn.isInvisible()) + { + this.sheepRenderer.bindTexture(TEXTURE); + + if (entitylivingbaseIn.hasCustomName() && "jeb_".equals(entitylivingbaseIn.getCustomNameTag())) + { + int i1 = 25; + int i = entitylivingbaseIn.ticksExisted / 25 + entitylivingbaseIn.getEntityId(); + int j = EnumDyeColor.values().length; + int k = i % j; + int l = (i + 1) % j; + float f = ((float)(entitylivingbaseIn.ticksExisted % 25) + partialTicks) / 25.0F; + float[] afloat1 = EntitySheep.getDyeRgb(EnumDyeColor.byMetadata(k)); + float[] afloat2 = EntitySheep.getDyeRgb(EnumDyeColor.byMetadata(l)); + GlStateManager.color(afloat1[0] * (1.0F - f) + afloat2[0] * f, afloat1[1] * (1.0F - f) + afloat2[1] * f, afloat1[2] * (1.0F - f) + afloat2[2] * f); + } + else + { + float[] afloat = EntitySheep.getDyeRgb(entitylivingbaseIn.getFleeceColor()); + GlStateManager.color(afloat[0], afloat[1], afloat[2]); + } + + this.sheepModel.setModelAttributes(this.sheepRenderer.getMainModel()); + this.sheepModel.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks); + this.sheepModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java new file mode 100644 index 0000000..5d89949 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSlimeGel.java @@ -0,0 +1,41 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelSlime; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderSlime; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerSlimeGel implements LayerRenderer +{ + private final RenderSlime slimeRenderer; + private final ModelBase slimeModel = new ModelSlime(0); + + public LayerSlimeGel(RenderSlime slimeRendererIn) + { + this.slimeRenderer = slimeRendererIn; + } + + public void doRenderLayer(EntitySlime entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (!entitylivingbaseIn.isInvisible()) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableNormalize(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + this.slimeModel.setModelAttributes(this.slimeRenderer.getMainModel()); + this.slimeModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + GlStateManager.disableBlend(); + GlStateManager.disableNormalize(); + } + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java new file mode 100644 index 0000000..f216920 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSnowmanHead.java @@ -0,0 +1,42 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.entity.RenderSnowMan; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerSnowmanHead implements LayerRenderer +{ + private final RenderSnowMan snowManRenderer; + + public LayerSnowmanHead(RenderSnowMan snowManRendererIn) + { + this.snowManRenderer = snowManRendererIn; + } + + public void doRenderLayer(EntitySnowman entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (!entitylivingbaseIn.isInvisible() && entitylivingbaseIn.isPumpkinEquipped()) + { + GlStateManager.pushMatrix(); + this.snowManRenderer.getMainModel().head.postRender(0.0625F); + float f = 0.625F; + GlStateManager.translate(0.0F, -0.34375F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.scale(0.625F, -0.625F, -0.625F); + Minecraft.getMinecraft().getItemRenderer().renderItem(entitylivingbaseIn, new ItemStack(Blocks.PUMPKIN, 1), ItemCameraTransforms.TransformType.HEAD); + GlStateManager.popMatrix(); + } + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java new file mode 100644 index 0000000..5b07353 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerSpiderEyes.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.entity.RenderSpider; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerSpiderEyes implements LayerRenderer +{ + private static final ResourceLocation SPIDER_EYES = new ResourceLocation("textures/entity/spider_eyes.png"); + private final RenderSpider spiderRenderer; + + public LayerSpiderEyes(RenderSpider spiderRendererIn) + { + this.spiderRenderer = spiderRendererIn; + } + + public void doRenderLayer(T entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.spiderRenderer.bindTexture(SPIDER_EYES); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); + + if (entitylivingbaseIn.isInvisible()) + { + GlStateManager.depthMask(false); + } + else + { + GlStateManager.depthMask(true); + } + + int i = 61680; + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + this.spiderRenderer.getMainModel().render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + i = entitylivingbaseIn.getBrightnessForRender(); + j = i % 65536; + k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + this.spiderRenderer.setLightmap(entitylivingbaseIn); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerStrayClothing.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerStrayClothing.java new file mode 100644 index 0000000..7c90e9d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerStrayClothing.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelSkeleton; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraft.entity.monster.EntityStray; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerStrayClothing implements LayerRenderer +{ + private static final ResourceLocation STRAY_CLOTHES_TEXTURES = new ResourceLocation("textures/entity/skeleton/stray_overlay.png"); + private final RenderLivingBase renderer; + private final ModelSkeleton layerModel = new ModelSkeleton(0.25F, true); + + public LayerStrayClothing(RenderLivingBase p_i47183_1_) + { + this.renderer = p_i47183_1_; + } + + public void doRenderLayer(EntityStray entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + this.layerModel.setModelAttributes(this.renderer.getMainModel()); + this.layerModel.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.renderer.bindTexture(STRAY_CLOTHES_TEXTURES); + this.layerModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java new file mode 100644 index 0000000..002c600 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerVillagerArmor.java @@ -0,0 +1,21 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.model.ModelZombieVillager; +import net.minecraft.client.renderer.entity.RenderLivingBase; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerVillagerArmor extends LayerBipedArmor +{ + public LayerVillagerArmor(RenderLivingBase rendererIn) + { + super(rendererIn); + } + + protected void initArmor() + { + this.modelLeggings = new ModelZombieVillager(0.5F, 0.0F, true); + this.modelArmor = new ModelZombieVillager(1.0F, 0.0F, true); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java new file mode 100644 index 0000000..cba8f4c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerWitherAura.java @@ -0,0 +1,60 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelWither; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderWither; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerWitherAura implements LayerRenderer +{ + private static final ResourceLocation WITHER_ARMOR = new ResourceLocation("textures/entity/wither/wither_armor.png"); + private final RenderWither witherRenderer; + private final ModelWither witherModel = new ModelWither(0.5F); + + public LayerWitherAura(RenderWither witherRendererIn) + { + this.witherRenderer = witherRendererIn; + } + + public void doRenderLayer(EntityWither entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.isArmored()) + { + GlStateManager.depthMask(!entitylivingbaseIn.isInvisible()); + this.witherRenderer.bindTexture(WITHER_ARMOR); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + float f = (float)entitylivingbaseIn.ticksExisted + partialTicks; + float f1 = MathHelper.cos(f * 0.02F) * 3.0F; + float f2 = f * 0.01F; + GlStateManager.translate(f1, f2, 0.0F); + GlStateManager.matrixMode(5888); + GlStateManager.enableBlend(); + float f3 = 0.5F; + GlStateManager.color(0.5F, 0.5F, 0.5F, 1.0F); + GlStateManager.disableLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); + this.witherModel.setLivingAnimations(entitylivingbaseIn, limbSwing, limbSwingAmount, partialTicks); + this.witherModel.setModelAttributes(this.witherRenderer.getMainModel()); + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + this.witherModel.render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + GlStateManager.matrixMode(5890); + GlStateManager.loadIdentity(); + GlStateManager.matrixMode(5888); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + } + } + + public boolean shouldCombineTextures() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java new file mode 100644 index 0000000..a757429 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/LayerWolfCollar.java @@ -0,0 +1,36 @@ +package net.minecraft.client.renderer.entity.layers; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderWolf; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LayerWolfCollar implements LayerRenderer +{ + private static final ResourceLocation WOLF_COLLAR = new ResourceLocation("textures/entity/wolf/wolf_collar.png"); + private final RenderWolf wolfRenderer; + + public LayerWolfCollar(RenderWolf wolfRendererIn) + { + this.wolfRenderer = wolfRendererIn; + } + + public void doRenderLayer(EntityWolf entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) + { + if (entitylivingbaseIn.isTamed() && !entitylivingbaseIn.isInvisible()) + { + this.wolfRenderer.bindTexture(WOLF_COLLAR); + float[] afloat = entitylivingbaseIn.getCollarColor().getColorComponentValues(); + GlStateManager.color(afloat[0], afloat[1], afloat[2]); + this.wolfRenderer.getMainModel().render(entitylivingbaseIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale); + } + } + + public boolean shouldCombineTextures() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/package-info.java new file mode 100644 index 0000000..0d220da --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/layers/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.entity.layers; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/package-info.java new file mode 100644 index 0000000..7d0587b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/entity/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.entity; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/package-info.java new file mode 100644 index 0000000..d0ff4df --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/AbstractTexture.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/AbstractTexture.java new file mode 100644 index 0000000..0ec6475 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/AbstractTexture.java @@ -0,0 +1,68 @@ +package net.minecraft.client.renderer.texture; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class AbstractTexture implements ITextureObject +{ + protected int glTextureId = -1; + protected boolean blur; + protected boolean mipmap; + protected boolean blurLast; + protected boolean mipmapLast; + + public void setBlurMipmapDirect(boolean blurIn, boolean mipmapIn) + { + this.blur = blurIn; + this.mipmap = mipmapIn; + int i; + int j; + + if (blurIn) + { + i = mipmapIn ? 9987 : 9729; + j = 9729; + } + else + { + i = mipmapIn ? 9986 : 9728; + j = 9728; + } + + GlStateManager.glTexParameteri(3553, 10241, i); + GlStateManager.glTexParameteri(3553, 10240, j); + } + + public void setBlurMipmap(boolean blurIn, boolean mipmapIn) + { + this.blurLast = this.blur; + this.mipmapLast = this.mipmap; + this.setBlurMipmapDirect(blurIn, mipmapIn); + } + + public void restoreLastBlurMipmap() + { + this.setBlurMipmapDirect(this.blurLast, this.mipmapLast); + } + + public int getGlTextureId() + { + if (this.glTextureId == -1) + { + this.glTextureId = TextureUtil.glGenTextures(); + } + + return this.glTextureId; + } + + public void deleteGlTexture() + { + if (this.glTextureId != -1) + { + TextureUtil.deleteTexture(this.glTextureId); + this.glTextureId = -1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/DynamicTexture.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/DynamicTexture.java new file mode 100644 index 0000000..ee4563f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/DynamicTexture.java @@ -0,0 +1,46 @@ +package net.minecraft.client.renderer.texture; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import net.minecraft.client.resources.IResourceManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DynamicTexture extends AbstractTexture +{ + private final int[] dynamicTextureData; + /** width of this icon in pixels */ + private final int width; + /** height of this icon in pixels */ + private final int height; + + public DynamicTexture(BufferedImage bufferedImage) + { + this(bufferedImage.getWidth(), bufferedImage.getHeight()); + bufferedImage.getRGB(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight(), this.dynamicTextureData, 0, bufferedImage.getWidth()); + this.updateDynamicTexture(); + } + + public DynamicTexture(int textureWidth, int textureHeight) + { + this.width = textureWidth; + this.height = textureHeight; + this.dynamicTextureData = new int[textureWidth * textureHeight]; + TextureUtil.allocateTexture(this.getGlTextureId(), textureWidth, textureHeight); + } + + public void loadTexture(IResourceManager resourceManager) throws IOException + { + } + + public void updateDynamicTexture() + { + TextureUtil.uploadTexture(this.getGlTextureId(), this.dynamicTextureData, this.width, this.height); + } + + public int[] getTextureData() + { + return this.dynamicTextureData; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITextureMapPopulator.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITextureMapPopulator.java new file mode 100644 index 0000000..f0272b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITextureMapPopulator.java @@ -0,0 +1,10 @@ +package net.minecraft.client.renderer.texture; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITextureMapPopulator +{ + void registerSprites(TextureMap textureMapIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITextureObject.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITextureObject.java new file mode 100644 index 0000000..97dfc1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITextureObject.java @@ -0,0 +1,18 @@ +package net.minecraft.client.renderer.texture; + +import java.io.IOException; +import net.minecraft.client.resources.IResourceManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITextureObject +{ + void setBlurMipmap(boolean blurIn, boolean mipmapIn); + + void restoreLastBlurMipmap(); + + void loadTexture(IResourceManager resourceManager) throws IOException; + + int getGlTextureId(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITickable.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITickable.java new file mode 100644 index 0000000..6f271e2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITickable.java @@ -0,0 +1,10 @@ +package net.minecraft.client.renderer.texture; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITickable +{ + void tick(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITickableTextureObject.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITickableTextureObject.java new file mode 100644 index 0000000..f359b8a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/ITickableTextureObject.java @@ -0,0 +1,9 @@ +package net.minecraft.client.renderer.texture; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITickableTextureObject extends ITextureObject, ITickable +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java new file mode 100644 index 0000000..35d3fc4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java @@ -0,0 +1,122 @@ +package net.minecraft.client.renderer.texture; + +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.Closeable; +import java.io.IOException; +import java.util.List; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class LayeredColorMaskTexture extends AbstractTexture +{ + /** Access to the Logger, for all your logging needs. */ + private static final Logger LOGGER = LogManager.getLogger(); + /** The location of the texture. */ + private final ResourceLocation textureLocation; + private final List listTextures; + private final List listDyeColors; + + public LayeredColorMaskTexture(ResourceLocation textureLocationIn, List p_i46101_2_, List p_i46101_3_) + { + this.textureLocation = textureLocationIn; + this.listTextures = p_i46101_2_; + this.listDyeColors = p_i46101_3_; + } + + public void loadTexture(IResourceManager resourceManager) throws IOException + { + this.deleteGlTexture(); + IResource iresource = null; + BufferedImage bufferedimage; + label255: + { + try + { + iresource = resourceManager.getResource(this.textureLocation); + BufferedImage bufferedimage1 = TextureUtil.readBufferedImage(iresource.getInputStream()); + int i = bufferedimage1.getType(); + + if (i == 0) + { + i = 6; + } + + bufferedimage = new BufferedImage(bufferedimage1.getWidth(), bufferedimage1.getHeight(), i); + Graphics graphics = bufferedimage.getGraphics(); + graphics.drawImage(bufferedimage1, 0, 0, (ImageObserver)null); + int j = 0; + + while (true) + { + if (j >= 17 || j >= this.listTextures.size() || j >= this.listDyeColors.size()) + { + break label255; + } + + IResource iresource1 = null; + + try + { + String s = this.listTextures.get(j); + int k = ((EnumDyeColor)this.listDyeColors.get(j)).getColorValue(); + + if (s != null) + { + iresource1 = resourceManager.getResource(new ResourceLocation(s)); + BufferedImage bufferedimage2 = TextureUtil.readBufferedImage(iresource1.getInputStream()); + + if (bufferedimage2.getWidth() == bufferedimage.getWidth() && bufferedimage2.getHeight() == bufferedimage.getHeight() && bufferedimage2.getType() == 6) + { + for (int l = 0; l < bufferedimage2.getHeight(); ++l) + { + for (int i1 = 0; i1 < bufferedimage2.getWidth(); ++i1) + { + int j1 = bufferedimage2.getRGB(i1, l); + + if ((j1 & -16777216) != 0) + { + int k1 = (j1 & 16711680) << 8 & -16777216; + int l1 = bufferedimage1.getRGB(i1, l); + int i2 = MathHelper.multiplyColor(l1, k) & 16777215; + bufferedimage2.setRGB(i1, l, k1 | i2); + } + } + } + + bufferedimage.getGraphics().drawImage(bufferedimage2, 0, 0, (ImageObserver)null); + } + } + } + finally + { + IOUtils.closeQuietly((Closeable)iresource1); + } + + ++j; + } + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't load layered image", (Throwable)ioexception); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + return; + } + TextureUtil.uploadTextureImage(this.getGlTextureId(), bufferedimage); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/LayeredTexture.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/LayeredTexture.java new file mode 100644 index 0000000..c7c50c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/LayeredTexture.java @@ -0,0 +1,69 @@ +package net.minecraft.client.renderer.texture; + +import com.google.common.collect.Lists; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.Closeable; +import java.io.IOException; +import java.util.List; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class LayeredTexture extends AbstractTexture +{ + private static final Logger LOGGER = LogManager.getLogger(); + public final List layeredTextureNames; + + public LayeredTexture(String... textureNames) + { + this.layeredTextureNames = Lists.newArrayList(textureNames); + } + + public void loadTexture(IResourceManager resourceManager) throws IOException + { + this.deleteGlTexture(); + BufferedImage bufferedimage = null; + + for (String s : this.layeredTextureNames) + { + IResource iresource = null; + + try + { + if (s != null) + { + iresource = resourceManager.getResource(new ResourceLocation(s)); + BufferedImage bufferedimage1 = TextureUtil.readBufferedImage(iresource.getInputStream()); + + if (bufferedimage == null) + { + bufferedimage = new BufferedImage(bufferedimage1.getWidth(), bufferedimage1.getHeight(), 2); + } + + bufferedimage.getGraphics().drawImage(bufferedimage1, 0, 0, (ImageObserver)null); + } + + continue; + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't load layered image", (Throwable)ioexception); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + return; + } + + TextureUtil.uploadTextureImage(this.getGlTextureId(), bufferedimage); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/PngSizeInfo.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/PngSizeInfo.java new file mode 100644 index 0000000..7f8d761 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/PngSizeInfo.java @@ -0,0 +1,57 @@ +package net.minecraft.client.renderer.texture; + +import java.io.Closeable; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import net.minecraft.client.resources.IResource; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; + +@SideOnly(Side.CLIENT) +public class PngSizeInfo +{ + public final int pngWidth; + public final int pngHeight; + + public PngSizeInfo(InputStream stream) throws IOException + { + DataInputStream datainputstream = new DataInputStream(stream); + + if (datainputstream.readLong() != -8552249625308161526L) + { + throw new IOException("Bad PNG Signature"); + } + else if (datainputstream.readInt() != 13) + { + throw new IOException("Bad length for IHDR chunk!"); + } + else if (datainputstream.readInt() != 1229472850) + { + throw new IOException("Bad type for IHDR chunk!"); + } + else + { + this.pngWidth = datainputstream.readInt(); + this.pngHeight = datainputstream.readInt(); + IOUtils.closeQuietly((InputStream)datainputstream); + } + } + + public static PngSizeInfo makeFromResource(IResource resource) throws IOException + { + PngSizeInfo pngsizeinfo; + + try + { + pngsizeinfo = new PngSizeInfo(resource.getInputStream()); + } + finally + { + IOUtils.closeQuietly((Closeable)resource); + } + + return pngsizeinfo; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/SimpleTexture.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/SimpleTexture.java new file mode 100644 index 0000000..c8eafe7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/SimpleTexture.java @@ -0,0 +1,64 @@ +package net.minecraft.client.renderer.texture; + +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.IOException; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.data.TextureMetadataSection; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class SimpleTexture extends AbstractTexture +{ + private static final Logger LOGGER = LogManager.getLogger(); + protected final ResourceLocation textureLocation; + + public SimpleTexture(ResourceLocation textureResourceLocation) + { + this.textureLocation = textureResourceLocation; + } + + public void loadTexture(IResourceManager resourceManager) throws IOException + { + this.deleteGlTexture(); + IResource iresource = null; + + try + { + iresource = resourceManager.getResource(this.textureLocation); + BufferedImage bufferedimage = TextureUtil.readBufferedImage(iresource.getInputStream()); + boolean flag = false; + boolean flag1 = false; + + if (iresource.hasMetadata()) + { + try + { + TextureMetadataSection texturemetadatasection = (TextureMetadataSection)iresource.getMetadata("texture"); + + if (texturemetadatasection != null) + { + flag = texturemetadatasection.getTextureBlur(); + flag1 = texturemetadatasection.getTextureClamp(); + } + } + catch (RuntimeException runtimeexception) + { + LOGGER.warn("Failed reading metadata of: {}", this.textureLocation, runtimeexception); + } + } + + TextureUtil.uploadTextureImageAllocate(this.getGlTextureId(), bufferedimage, flag, flag1); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/Stitcher.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/Stitcher.java new file mode 100644 index 0000000..376b625 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/Stitcher.java @@ -0,0 +1,413 @@ +package net.minecraft.client.renderer.texture; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import net.minecraft.client.renderer.StitcherException; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Stitcher +{ + private final int mipmapLevelStitcher; + private final Set setStitchHolders = Sets.newHashSetWithExpectedSize(256); + private final List stitchSlots = Lists.newArrayListWithCapacity(256); + private int currentWidth; + private int currentHeight; + private final int maxWidth; + private final int maxHeight; + /** Max size (width or height) of a single tile */ + private final int maxTileDimension; + + public Stitcher(int maxWidthIn, int maxHeightIn, int maxTileDimensionIn, int mipmapLevelStitcherIn) + { + this.mipmapLevelStitcher = mipmapLevelStitcherIn; + this.maxWidth = maxWidthIn; + this.maxHeight = maxHeightIn; + this.maxTileDimension = maxTileDimensionIn; + } + + public int getCurrentWidth() + { + return this.currentWidth; + } + + public int getCurrentHeight() + { + return this.currentHeight; + } + + public void addSprite(TextureAtlasSprite textureAtlas) + { + Stitcher.Holder stitcher$holder = new Stitcher.Holder(textureAtlas, this.mipmapLevelStitcher); + + if (this.maxTileDimension > 0) + { + stitcher$holder.setNewDimension(this.maxTileDimension); + } + + this.setStitchHolders.add(stitcher$holder); + } + + public void doStitch() + { + Stitcher.Holder[] astitcher$holder = (Stitcher.Holder[])this.setStitchHolders.toArray(new Stitcher.Holder[this.setStitchHolders.size()]); + Arrays.sort((Object[])astitcher$holder); + net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Texture stitching", astitcher$holder.length); + + for (Stitcher.Holder stitcher$holder : astitcher$holder) + { + bar.step(stitcher$holder.getAtlasSprite().getIconName()); + if (!this.allocateSlot(stitcher$holder)) + { + String s = String.format("Unable to fit: %s - size: %dx%d - Maybe try a lowerresolution resourcepack?", stitcher$holder.getAtlasSprite().getIconName(), stitcher$holder.getAtlasSprite().getIconWidth(), stitcher$holder.getAtlasSprite().getIconHeight()); + net.minecraftforge.fml.common.FMLLog.log.info(s); + for (Stitcher.Holder h : astitcher$holder) + net.minecraftforge.fml.common.FMLLog.log.info(" {}", h); + throw new StitcherException(stitcher$holder, s); + } + } + + this.currentWidth = MathHelper.smallestEncompassingPowerOfTwo(this.currentWidth); + this.currentHeight = MathHelper.smallestEncompassingPowerOfTwo(this.currentHeight); + net.minecraftforge.fml.common.ProgressManager.pop(bar); + } + + public List getStichSlots() + { + List list = Lists.newArrayList(); + + for (Stitcher.Slot stitcher$slot : this.stitchSlots) + { + stitcher$slot.getAllStitchSlots(list); + } + + List list1 = Lists.newArrayList(); + + for (Stitcher.Slot stitcher$slot1 : list) + { + Stitcher.Holder stitcher$holder = stitcher$slot1.getStitchHolder(); + TextureAtlasSprite textureatlassprite = stitcher$holder.getAtlasSprite(); + textureatlassprite.initSprite(this.currentWidth, this.currentHeight, stitcher$slot1.getOriginX(), stitcher$slot1.getOriginY(), stitcher$holder.isRotated()); + list1.add(textureatlassprite); + } + + return list1; + } + + private static int getMipmapDimension(int p_147969_0_, int p_147969_1_) + { + return (p_147969_0_ >> p_147969_1_) + ((p_147969_0_ & (1 << p_147969_1_) - 1) == 0 ? 0 : 1) << p_147969_1_; + } + + /** + * Attempts to find space for specified tile + */ + private boolean allocateSlot(Stitcher.Holder p_94310_1_) + { + TextureAtlasSprite textureatlassprite = p_94310_1_.getAtlasSprite(); + boolean flag = textureatlassprite.getIconWidth() != textureatlassprite.getIconHeight(); + + for (int i = 0; i < this.stitchSlots.size(); ++i) + { + if (((Stitcher.Slot)this.stitchSlots.get(i)).addSlot(p_94310_1_)) + { + return true; + } + + if (flag) + { + p_94310_1_.rotate(); + + if (((Stitcher.Slot)this.stitchSlots.get(i)).addSlot(p_94310_1_)) + { + return true; + } + + p_94310_1_.rotate(); + } + } + + return this.expandAndAllocateSlot(p_94310_1_); + } + + /** + * Expand stitched texture in order to make space for specified tile + */ + private boolean expandAndAllocateSlot(Stitcher.Holder p_94311_1_) + { + int i = Math.min(p_94311_1_.getWidth(), p_94311_1_.getHeight()); + int j = Math.max(p_94311_1_.getWidth(), p_94311_1_.getHeight()); + int k = MathHelper.smallestEncompassingPowerOfTwo(this.currentWidth); + int l = MathHelper.smallestEncompassingPowerOfTwo(this.currentHeight); + int i1 = MathHelper.smallestEncompassingPowerOfTwo(this.currentWidth + i); + int j1 = MathHelper.smallestEncompassingPowerOfTwo(this.currentHeight + i); + boolean flag1 = i1 <= this.maxWidth; + boolean flag2 = j1 <= this.maxHeight; + + if (!flag1 && !flag2) + { + return false; + } + else + { + boolean flag3 = flag1 && k != i1; + boolean flag4 = flag2 && l != j1; + boolean flag; + + if (flag3 ^ flag4) + { + flag = !flag3 && flag1; //Forge: Fix stitcher not expanding entire height before growing width, and {potentially} growing larger then the max size. + } + else + { + flag = flag1 && k <= l; + } + + Stitcher.Slot stitcher$slot; + + if (flag) + { + if (p_94311_1_.getWidth() > p_94311_1_.getHeight()) + { + p_94311_1_.rotate(); + } + + if (this.currentHeight == 0) + { + this.currentHeight = p_94311_1_.getHeight(); + } + + stitcher$slot = new Stitcher.Slot(this.currentWidth, 0, p_94311_1_.getWidth(), this.currentHeight); + this.currentWidth += p_94311_1_.getWidth(); + } + else + { + stitcher$slot = new Stitcher.Slot(0, this.currentHeight, this.currentWidth, p_94311_1_.getHeight()); + this.currentHeight += p_94311_1_.getHeight(); + } + + stitcher$slot.addSlot(p_94311_1_); + this.stitchSlots.add(stitcher$slot); + return true; + } + } + + @SideOnly(Side.CLIENT) + public static class Holder implements Comparable + { + private final TextureAtlasSprite sprite; + private final int width; + private final int height; + private final int mipmapLevelHolder; + private boolean rotated; + private float scaleFactor = 1.0F; + + public Holder(TextureAtlasSprite theTextureIn, int mipmapLevelHolderIn) + { + this.sprite = theTextureIn; + this.width = theTextureIn.getIconWidth(); + this.height = theTextureIn.getIconHeight(); + this.mipmapLevelHolder = mipmapLevelHolderIn; + this.rotated = Stitcher.getMipmapDimension(this.height, mipmapLevelHolderIn) > Stitcher.getMipmapDimension(this.width, mipmapLevelHolderIn); + } + + public TextureAtlasSprite getAtlasSprite() + { + return this.sprite; + } + + public int getWidth() + { + int i = this.rotated ? this.height : this.width; + return Stitcher.getMipmapDimension((int)((float)i * this.scaleFactor), this.mipmapLevelHolder); + } + + public int getHeight() + { + int i = this.rotated ? this.width : this.height; + return Stitcher.getMipmapDimension((int)((float)i * this.scaleFactor), this.mipmapLevelHolder); + } + + public void rotate() + { + this.rotated = !this.rotated; + } + + public boolean isRotated() + { + return this.rotated; + } + + public void setNewDimension(int p_94196_1_) + { + if (this.width > p_94196_1_ && this.height > p_94196_1_) + { + this.scaleFactor = (float)p_94196_1_ / (float)Math.min(this.width, this.height); + } + } + + public String toString() + { + return "Holder{width=" + this.width + ", height=" + this.height + ", name=" + this.sprite.getIconName() + '}'; + } + + public int compareTo(Stitcher.Holder p_compareTo_1_) + { + int i; + + if (this.getHeight() == p_compareTo_1_.getHeight()) + { + if (this.getWidth() == p_compareTo_1_.getWidth()) + { + if (this.sprite.getIconName() == null) + { + return p_compareTo_1_.sprite.getIconName() == null ? 0 : -1; + } + + return this.sprite.getIconName().compareTo(p_compareTo_1_.sprite.getIconName()); + } + + i = this.getWidth() < p_compareTo_1_.getWidth() ? 1 : -1; + } + else + { + i = this.getHeight() < p_compareTo_1_.getHeight() ? 1 : -1; + } + + return i; + } + } + + @SideOnly(Side.CLIENT) + public static class Slot + { + private final int originX; + private final int originY; + private final int width; + private final int height; + private List subSlots; + private Stitcher.Holder holder; + + public Slot(int originXIn, int originYIn, int widthIn, int heightIn) + { + this.originX = originXIn; + this.originY = originYIn; + this.width = widthIn; + this.height = heightIn; + } + + public Stitcher.Holder getStitchHolder() + { + return this.holder; + } + + public int getOriginX() + { + return this.originX; + } + + public int getOriginY() + { + return this.originY; + } + + public boolean addSlot(Stitcher.Holder holderIn) + { + if (this.holder != null) + { + return false; + } + else + { + int i = holderIn.getWidth(); + int j = holderIn.getHeight(); + + if (i <= this.width && j <= this.height) + { + if (i == this.width && j == this.height) + { + this.holder = holderIn; + return true; + } + else + { + if (this.subSlots == null) + { + this.subSlots = Lists.newArrayListWithCapacity(1); + this.subSlots.add(new Stitcher.Slot(this.originX, this.originY, i, j)); + int k = this.width - i; + int l = this.height - j; + + if (l > 0 && k > 0) + { + int i1 = Math.max(this.height, k); + int j1 = Math.max(this.width, l); + + if (i1 >= j1) + { + this.subSlots.add(new Stitcher.Slot(this.originX, this.originY + j, i, l)); + this.subSlots.add(new Stitcher.Slot(this.originX + i, this.originY, k, this.height)); + } + else + { + this.subSlots.add(new Stitcher.Slot(this.originX + i, this.originY, k, j)); + this.subSlots.add(new Stitcher.Slot(this.originX, this.originY + j, this.width, l)); + } + } + else if (k == 0) + { + this.subSlots.add(new Stitcher.Slot(this.originX, this.originY + j, i, l)); + } + else if (l == 0) + { + this.subSlots.add(new Stitcher.Slot(this.originX + i, this.originY, k, j)); + } + } + + for (Stitcher.Slot stitcher$slot : this.subSlots) + { + if (stitcher$slot.addSlot(holderIn)) + { + return true; + } + } + + return false; + } + } + else + { + return false; + } + } + } + + /** + * Gets the slot and all its subslots + */ + public void getAllStitchSlots(List p_94184_1_) + { + if (this.holder != null) + { + p_94184_1_.add(this); + } + else if (this.subSlots != null) + { + for (Stitcher.Slot stitcher$slot : this.subSlots) + { + stitcher$slot.getAllStitchSlots(p_94184_1_); + } + } + } + + public String toString() + { + return "Slot{originX=" + this.originX + ", originY=" + this.originY + ", width=" + this.width + ", height=" + this.height + ", texture=" + this.holder + ", subSlots=" + this.subSlots + '}'; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureAtlasSprite.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureAtlasSprite.java new file mode 100644 index 0000000..3cae089 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureAtlasSprite.java @@ -0,0 +1,470 @@ +package net.minecraft.client.renderer.texture; + +import com.google.common.collect.Lists; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.data.AnimationFrame; +import net.minecraft.client.resources.data.AnimationMetadataSection; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureAtlasSprite +{ + private final String iconName; + protected List framesTextureData = Lists.newArrayList(); + protected int[][] interpolatedFrameData; + private AnimationMetadataSection animationMetadata; + protected boolean rotated; + protected int originX; + protected int originY; + protected int width; + protected int height; + private float minU; + private float maxU; + private float minV; + private float maxV; + protected int frameCounter; + protected int tickCounter; + + protected TextureAtlasSprite(String spriteName) + { + this.iconName = spriteName; + } + + protected static TextureAtlasSprite makeAtlasSprite(ResourceLocation spriteResourceLocation) + { + return new TextureAtlasSprite(spriteResourceLocation.toString()); + } + + public void initSprite(int inX, int inY, int originInX, int originInY, boolean rotatedIn) + { + this.originX = originInX; + this.originY = originInY; + this.rotated = rotatedIn; + this.minU = (float)originInX / (float)inX; + this.maxU = (float)(originInX + this.width) / (float)inX; + this.minV = (float)originInY / (float)inY; + this.maxV = (float)(originInY + this.height) / (float)inY; + } + + public void copyFrom(TextureAtlasSprite atlasSpirit) + { + this.originX = atlasSpirit.originX; + this.originY = atlasSpirit.originY; + this.width = atlasSpirit.width; + this.height = atlasSpirit.height; + this.rotated = atlasSpirit.rotated; + this.minU = atlasSpirit.minU; + this.maxU = atlasSpirit.maxU; + this.minV = atlasSpirit.minV; + this.maxV = atlasSpirit.maxV; + } + + /** + * Returns the X position of this icon on its texture sheet, in pixels. + */ + public int getOriginX() + { + return this.originX; + } + + /** + * Returns the Y position of this icon on its texture sheet, in pixels. + */ + public int getOriginY() + { + return this.originY; + } + + /** + * Returns the width of the icon, in pixels. + */ + public int getIconWidth() + { + return this.width; + } + + /** + * Returns the height of the icon, in pixels. + */ + public int getIconHeight() + { + return this.height; + } + + /** + * Returns the minimum U coordinate to use when rendering with this icon. + */ + public float getMinU() + { + return this.minU; + } + + /** + * Returns the maximum U coordinate to use when rendering with this icon. + */ + public float getMaxU() + { + return this.maxU; + } + + /** + * Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values. + */ + public float getInterpolatedU(double u) + { + float f = this.maxU - this.minU; + return this.minU + f * (float)u / 16.0F; + } + + /** + * The opposite of getInterpolatedU. Takes the return value of that method and returns the input to it. + */ + public float getUnInterpolatedU(float u) + { + float f = this.maxU - this.minU; + return (u - this.minU) / f * 16.0F; + } + + /** + * Returns the minimum V coordinate to use when rendering with this icon. + */ + public float getMinV() + { + return this.minV; + } + + /** + * Returns the maximum V coordinate to use when rendering with this icon. + */ + public float getMaxV() + { + return this.maxV; + } + + /** + * Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values. + */ + public float getInterpolatedV(double v) + { + float f = this.maxV - this.minV; + return this.minV + f * (float)v / 16.0F; + } + + /** + * The opposite of getInterpolatedV. Takes the return value of that method and returns the input to it. + */ + public float getUnInterpolatedV(float p_188536_1_) + { + float f = this.maxV - this.minV; + return (p_188536_1_ - this.minV) / f * 16.0F; + } + + public String getIconName() + { + return this.iconName; + } + + public void updateAnimation() + { + ++this.tickCounter; + + if (this.tickCounter >= this.animationMetadata.getFrameTimeSingle(this.frameCounter)) + { + int i = this.animationMetadata.getFrameIndex(this.frameCounter); + int j = this.animationMetadata.getFrameCount() == 0 ? this.framesTextureData.size() : this.animationMetadata.getFrameCount(); + this.frameCounter = (this.frameCounter + 1) % j; + this.tickCounter = 0; + int k = this.animationMetadata.getFrameIndex(this.frameCounter); + + if (i != k && k >= 0 && k < this.framesTextureData.size()) + { + TextureUtil.uploadTextureMipmap(this.framesTextureData.get(k), this.width, this.height, this.originX, this.originY, false, false); + } + } + else if (this.animationMetadata.isInterpolate()) + { + this.updateAnimationInterpolated(); + } + } + + private void updateAnimationInterpolated() + { + double d0 = 1.0D - (double)this.tickCounter / (double)this.animationMetadata.getFrameTimeSingle(this.frameCounter); + int i = this.animationMetadata.getFrameIndex(this.frameCounter); + int j = this.animationMetadata.getFrameCount() == 0 ? this.framesTextureData.size() : this.animationMetadata.getFrameCount(); + int k = this.animationMetadata.getFrameIndex((this.frameCounter + 1) % j); + + if (i != k && k >= 0 && k < this.framesTextureData.size()) + { + int[][] aint = this.framesTextureData.get(i); + int[][] aint1 = this.framesTextureData.get(k); + + if (this.interpolatedFrameData == null || this.interpolatedFrameData.length != aint.length) + { + this.interpolatedFrameData = new int[aint.length][]; + } + + for (int l = 0; l < aint.length; ++l) + { + if (this.interpolatedFrameData[l] == null) + { + this.interpolatedFrameData[l] = new int[aint[l].length]; + } + + if (l < aint1.length && aint1[l].length == aint[l].length) + { + for (int i1 = 0; i1 < aint[l].length; ++i1) + { + int j1 = aint[l][i1]; + int k1 = aint1[l][i1]; + int l1 = this.interpolateColor(d0, j1 >> 16 & 255, k1 >> 16 & 255); + int i2 = this.interpolateColor(d0, j1 >> 8 & 255, k1 >> 8 & 255); + int j2 = this.interpolateColor(d0, j1 & 255, k1 & 255); + this.interpolatedFrameData[l][i1] = j1 & -16777216 | l1 << 16 | i2 << 8 | j2; + } + } + } + + TextureUtil.uploadTextureMipmap(this.interpolatedFrameData, this.width, this.height, this.originX, this.originY, false, false); + } + } + + private int interpolateColor(double p_188535_1_, int p_188535_3_, int p_188535_4_) + { + return (int)(p_188535_1_ * (double)p_188535_3_ + (1.0D - p_188535_1_) * (double)p_188535_4_); + } + + public int[][] getFrameTextureData(int index) + { + return this.framesTextureData.get(index); + } + + public int getFrameCount() + { + return this.framesTextureData.size(); + } + + public void setIconWidth(int newWidth) + { + this.width = newWidth; + } + + public void setIconHeight(int newHeight) + { + this.height = newHeight; + } + + public void loadSprite(PngSizeInfo sizeInfo, boolean p_188538_2_) throws IOException + { + this.resetSprite(); + this.width = sizeInfo.pngWidth; + this.height = sizeInfo.pngHeight; + + if (p_188538_2_) + { + this.height = this.width; + } + else if (sizeInfo.pngHeight != sizeInfo.pngWidth) + { + throw new RuntimeException("broken aspect ratio and not an animation"); + } + } + + public void loadSpriteFrames(IResource resource, int mipmaplevels) throws IOException + { + BufferedImage bufferedimage = TextureUtil.readBufferedImage(resource.getInputStream()); + AnimationMetadataSection animationmetadatasection = (AnimationMetadataSection)resource.getMetadata("animation"); + int[][] aint = new int[mipmaplevels][]; + aint[0] = new int[bufferedimage.getWidth() * bufferedimage.getHeight()]; + bufferedimage.getRGB(0, 0, bufferedimage.getWidth(), bufferedimage.getHeight(), aint[0], 0, bufferedimage.getWidth()); + + if (animationmetadatasection == null) + { + this.framesTextureData.add(aint); + } + else + { + int i = bufferedimage.getHeight() / this.width; + + if (animationmetadatasection.getFrameCount() > 0) + { + Iterator lvt_7_1_ = animationmetadatasection.getFrameIndexSet().iterator(); + + while (lvt_7_1_.hasNext()) + { + int j = ((Integer)lvt_7_1_.next()).intValue(); + + if (j >= i) + { + throw new RuntimeException("invalid frameindex " + j); + } + + this.allocateFrameTextureData(j); + this.framesTextureData.set(j, getFrameTextureData(aint, this.width, this.width, j)); + } + + this.animationMetadata = animationmetadatasection; + } + else + { + List list = Lists.newArrayList(); + + for (int k = 0; k < i; ++k) + { + this.framesTextureData.add(getFrameTextureData(aint, this.width, this.width, k)); + list.add(new AnimationFrame(k, -1)); + } + + this.animationMetadata = new AnimationMetadataSection(list, this.width, this.height, animationmetadatasection.getFrameTime(), animationmetadatasection.isInterpolate()); + } + } + } + + public void generateMipmaps(int level) + { + List list = Lists.newArrayList(); + + for (int i = 0; i < this.framesTextureData.size(); ++i) + { + final int[][] aint = this.framesTextureData.get(i); + + if (aint != null) + { + try + { + list.add(TextureUtil.generateMipmapData(level, this.width, aint)); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Generating mipmaps for frame"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Frame being iterated"); + crashreportcategory.addCrashSection("Frame index", Integer.valueOf(i)); + crashreportcategory.addDetail("Frame sizes", new ICrashReportDetail() + { + public String call() throws Exception + { + StringBuilder stringbuilder = new StringBuilder(); + + for (int[] aint1 : aint) + { + if (stringbuilder.length() > 0) + { + stringbuilder.append(", "); + } + + stringbuilder.append(aint1 == null ? "null" : aint1.length); + } + + return stringbuilder.toString(); + } + }); + throw new ReportedException(crashreport); + } + } + } + + this.setFramesTextureData(list); + } + + private void allocateFrameTextureData(int index) + { + if (this.framesTextureData.size() <= index) + { + for (int i = this.framesTextureData.size(); i <= index; ++i) + { + this.framesTextureData.add(null); + } + } + } + + private static int[][] getFrameTextureData(int[][] data, int rows, int columns, int p_147962_3_) + { + int[][] aint = new int[data.length][]; + + for (int i = 0; i < data.length; ++i) + { + int[] aint1 = data[i]; + + if (aint1 != null) + { + aint[i] = new int[(rows >> i) * (columns >> i)]; + System.arraycopy(aint1, p_147962_3_ * aint[i].length, aint[i], 0, aint[i].length); + } + } + + return aint; + } + + public void clearFramesTextureData() + { + this.framesTextureData.clear(); + } + + public boolean hasAnimationMetadata() + { + return this.animationMetadata != null; + } + + public void setFramesTextureData(List newFramesTextureData) + { + this.framesTextureData = newFramesTextureData; + } + + private void resetSprite() + { + this.animationMetadata = null; + this.setFramesTextureData(Lists.newArrayList()); + this.frameCounter = 0; + this.tickCounter = 0; + } + + public String toString() + { + return "TextureAtlasSprite{name='" + this.iconName + '\'' + ", frameCount=" + this.framesTextureData.size() + ", rotated=" + this.rotated + ", x=" + this.originX + ", y=" + this.originY + ", height=" + this.height + ", width=" + this.width + ", u0=" + this.minU + ", u1=" + this.maxU + ", v0=" + this.minV + ", v1=" + this.maxV + '}'; + } + + /*===================================== FORGE START =====================================*/ + /** + * The result of this function determines is the below 'load' function is called, and the + * default vanilla loading code is bypassed completely. + * @param manager Main resource manager + * @param location File resource location + * @return True to use your own custom load code and bypass vanilla loading. + */ + public boolean hasCustomLoader(net.minecraft.client.resources.IResourceManager manager, net.minecraft.util.ResourceLocation location) + { + return false; + } + + /** + * Load the specified resource as this sprite's data. + * Returning false from this function will prevent this icon from being stitched onto the master texture. + * @param manager Main resource manager + * @param location File resource location + * @param textureGetter accessor for dependencies. All of them will be loaded before this one + * @return False to prevent this Icon from being stitched + */ + public boolean load(net.minecraft.client.resources.IResourceManager manager, net.minecraft.util.ResourceLocation location, java.util.function.Function textureGetter) + { + return true; + } + + /** + * @return all textures that should be loaded before this texture. + */ + public java.util.Collection getDependencies() { + return com.google.common.collect.ImmutableList.of(); + } + + /*===================================== FORGE END ======================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureManager.java new file mode 100644 index 0000000..8d7d7af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureManager.java @@ -0,0 +1,167 @@ +package net.minecraft.client.renderer.texture; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class TextureManager implements ITickable, IResourceManagerReloadListener +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final ResourceLocation RESOURCE_LOCATION_EMPTY = new ResourceLocation(""); + private final Map mapTextureObjects = Maps.newHashMap(); + private final List listTickables = Lists.newArrayList(); + private final Map mapTextureCounters = Maps.newHashMap(); + private final IResourceManager resourceManager; + + public TextureManager(IResourceManager resourceManager) + { + this.resourceManager = resourceManager; + } + + public void bindTexture(ResourceLocation resource) + { + ITextureObject itextureobject = this.mapTextureObjects.get(resource); + + if (itextureobject == null) + { + itextureobject = new SimpleTexture(resource); + this.loadTexture(resource, itextureobject); + } + + TextureUtil.bindTexture(itextureobject.getGlTextureId()); + } + + public boolean loadTickableTexture(ResourceLocation textureLocation, ITickableTextureObject textureObj) + { + if (this.loadTexture(textureLocation, textureObj)) + { + this.listTickables.add(textureObj); + return true; + } + else + { + return false; + } + } + + public boolean loadTexture(ResourceLocation textureLocation, ITextureObject textureObj) + { + boolean flag = true; + + try + { + textureObj.loadTexture(this.resourceManager); + } + catch (IOException ioexception) + { + if (textureLocation != RESOURCE_LOCATION_EMPTY) + { + LOGGER.warn("Failed to load texture: {}", textureLocation, ioexception); + } + + textureObj = TextureUtil.MISSING_TEXTURE; + this.mapTextureObjects.put(textureLocation, textureObj); + flag = false; + } + catch (Throwable throwable) + { + final ITextureObject p_110579_2_f = textureObj; + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Registering texture"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Resource location being registered"); + crashreportcategory.addCrashSection("Resource location", textureLocation); + crashreportcategory.addDetail("Texture object class", new ICrashReportDetail() + { + public String call() throws Exception + { + return p_110579_2_f.getClass().getName(); + } + }); + throw new ReportedException(crashreport); + } + + this.mapTextureObjects.put(textureLocation, textureObj); + return flag; + } + + public ITextureObject getTexture(ResourceLocation textureLocation) + { + return this.mapTextureObjects.get(textureLocation); + } + + public ResourceLocation getDynamicTextureLocation(String name, DynamicTexture texture) + { + Integer integer = this.mapTextureCounters.get(name); + + if (integer == null) + { + integer = Integer.valueOf(1); + } + else + { + integer = integer.intValue() + 1; + } + + this.mapTextureCounters.put(name, integer); + ResourceLocation resourcelocation = new ResourceLocation(String.format("dynamic/%s_%d", name, integer)); + this.loadTexture(resourcelocation, texture); + return resourcelocation; + } + + public void tick() + { + for (ITickable itickable : this.listTickables) + { + itickable.tick(); + } + } + + public void deleteTexture(ResourceLocation textureLocation) + { + ITextureObject itextureobject = this.getTexture(textureLocation); + + if (itextureobject != null) + { + this.mapTextureObjects.remove(textureLocation); // Forge: fix MC-98707 + TextureUtil.deleteTexture(itextureobject.getGlTextureId()); + } + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Reloading Texture Manager", this.mapTextureObjects.keySet().size(), true); + Iterator> iterator = this.mapTextureObjects.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + bar.step(entry.getKey().toString()); + ITextureObject itextureobject = entry.getValue(); + + if (itextureobject == TextureUtil.MISSING_TEXTURE) + { + iterator.remove(); + } + else + { + this.loadTexture(entry.getKey(), itextureobject); + } + } + net.minecraftforge.fml.common.ProgressManager.pop(bar); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureMap.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureMap.java new file mode 100644 index 0000000..e15d14a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureMap.java @@ -0,0 +1,442 @@ +package net.minecraft.client.renderer.texture; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.io.Closeable; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.StitcherException; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class TextureMap extends AbstractTexture implements ITickableTextureObject +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final ResourceLocation LOCATION_MISSING_TEXTURE = new ResourceLocation("missingno"); + public static final ResourceLocation LOCATION_BLOCKS_TEXTURE = new ResourceLocation("textures/atlas/blocks.png"); + private final List listAnimatedSprites; + private final Map mapRegisteredSprites; + private final Map mapUploadedSprites; + private final String basePath; + private final ITextureMapPopulator iconCreator; + private int mipmapLevels; + private final TextureAtlasSprite missingImage; + + public TextureMap(String basePathIn) + { + this(basePathIn, (ITextureMapPopulator)null); + } + + public TextureMap(String basePathIn, @Nullable ITextureMapPopulator iconCreatorIn) + { + this(basePathIn, iconCreatorIn, false); + } + + public TextureMap(String basePathIn, boolean skipFirst) + { + this(basePathIn, null, skipFirst); + } + + public TextureMap(String basePathIn, @Nullable ITextureMapPopulator iconCreatorIn, boolean skipFirst) + { + this.listAnimatedSprites = Lists.newArrayList(); + this.mapRegisteredSprites = Maps.newHashMap(); + this.mapUploadedSprites = Maps.newHashMap(); + this.missingImage = new TextureAtlasSprite("missingno"); + this.basePath = basePathIn; + this.iconCreator = iconCreatorIn; + } + + private void initMissingImage() + { + int[] aint = TextureUtil.MISSING_TEXTURE_DATA; + this.missingImage.setIconWidth(16); + this.missingImage.setIconHeight(16); + int[][] aint1 = new int[this.mipmapLevels + 1][]; + aint1[0] = aint; + this.missingImage.setFramesTextureData(Lists.newArrayList(aint1)); + } + + public void loadTexture(IResourceManager resourceManager) throws IOException + { + if (this.iconCreator != null) + { + this.loadSprites(resourceManager, this.iconCreator); + } + } + + public void loadSprites(IResourceManager resourceManager, ITextureMapPopulator iconCreatorIn) + { + this.mapRegisteredSprites.clear(); + net.minecraftforge.client.ForgeHooksClient.onTextureStitchedPre(this); + iconCreatorIn.registerSprites(this); + this.initMissingImage(); + this.deleteGlTexture(); + this.loadTextureAtlas(resourceManager); + } + + public void loadTextureAtlas(IResourceManager resourceManager) + { + int i = Minecraft.getGLMaximumTextureSize(); + Stitcher stitcher = new Stitcher(i, i, 0, this.mipmapLevels); + this.mapUploadedSprites.clear(); + this.listAnimatedSprites.clear(); + int j = Integer.MAX_VALUE; + int k = 1 << this.mipmapLevels; + net.minecraftforge.fml.common.FMLLog.log.info("Max texture size: {}", i); + net.minecraftforge.fml.common.ProgressManager.ProgressBar bar = net.minecraftforge.fml.common.ProgressManager.push("Texture stitching", this.mapRegisteredSprites.size()); + loadedSprites.clear(); + + for (Entry entry : Maps.newHashMap(this.mapRegisteredSprites).entrySet()) + { + final ResourceLocation location = new ResourceLocation(entry.getKey()); + bar.step(location.toString()); + j = loadTexture(stitcher, resourceManager, location, entry.getValue(), bar, j, k); + } + finishLoading(stitcher, bar, j, k); + } + + private int loadTexture(Stitcher stitcher, IResourceManager resourceManager, ResourceLocation location, TextureAtlasSprite textureatlassprite, net.minecraftforge.fml.common.ProgressManager.ProgressBar bar, int j, int k) + { + if (loadedSprites.contains(location)) { + return j; + } + ResourceLocation resourcelocation = this.getResourceLocation(textureatlassprite); + IResource iresource = null; + + for(ResourceLocation loading : loadingSprites) + { + if(location.equals(loading)) + { + final String error = "circular model dependencies, stack: [" + com.google.common.base.Joiner.on(", ").join(loadingSprites) + "]"; + net.minecraftforge.fml.client.FMLClientHandler.instance().trackBrokenTexture(resourcelocation, error); + } + } + loadingSprites.addLast(location); + try + { + for (ResourceLocation dependency : textureatlassprite.getDependencies()) + { + if (!mapRegisteredSprites.containsKey(dependency.toString())) + { + registerSprite(dependency); + } + TextureAtlasSprite depSprite = mapRegisteredSprites.get(dependency.toString()); + j = loadTexture(stitcher, resourceManager, dependency, depSprite, bar, j, k); + } + if (textureatlassprite.hasCustomLoader(resourceManager, resourcelocation)) + { + if (textureatlassprite.load(resourceManager, resourcelocation, l -> mapRegisteredSprites.get(l.toString()))) + { + return j; + } + } + else + try + { + PngSizeInfo pngsizeinfo = PngSizeInfo.makeFromResource(resourceManager.getResource(resourcelocation)); + iresource = resourceManager.getResource(resourcelocation); + boolean flag = iresource.getMetadata("animation") != null; + textureatlassprite.loadSprite(pngsizeinfo, flag); + } + catch (RuntimeException runtimeexception) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().trackBrokenTexture(resourcelocation, runtimeexception.getMessage()); + return j; + } + catch (IOException ioexception) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().trackMissingTexture(resourcelocation); + return j; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + j = Math.min(j, Math.min(textureatlassprite.getIconWidth(), textureatlassprite.getIconHeight())); + int j1 = Math.min(Integer.lowestOneBit(textureatlassprite.getIconWidth()), Integer.lowestOneBit(textureatlassprite.getIconHeight())); + + if (j1 < k) + { + // FORGE: do not lower the mipmap level, just log the problematic textures + LOGGER.warn("Texture {} with size {}x{} will have visual artifacts at mip level {}, it can only support level {}. Please report to the mod author that the texture should be some multiple of 16x16.", resourcelocation, Integer.valueOf(textureatlassprite.getIconWidth()), Integer.valueOf(textureatlassprite.getIconHeight()), Integer.valueOf(MathHelper.log2(k)), Integer.valueOf(MathHelper.log2(j1))); + } + + if (generateMipmaps(resourceManager, textureatlassprite)) + stitcher.addSprite(textureatlassprite); + return j; + } + finally + { + loadingSprites.removeLast(); + loadedSprites.add(location); + } + } + + private void finishLoading(Stitcher stitcher, net.minecraftforge.fml.common.ProgressManager.ProgressBar bar, int j, int k) + { + net.minecraftforge.fml.common.ProgressManager.pop(bar); + int l = Math.min(j, k); + int i1 = MathHelper.log2(l); + + if (false) // FORGE: do not lower the mipmap level + if (i1 < this.mipmapLevels) + { + LOGGER.warn("{}: dropping miplevel from {} to {}, because of minimum power of two: {}", this.basePath, Integer.valueOf(this.mipmapLevels), Integer.valueOf(i1), Integer.valueOf(l)); + this.mipmapLevels = i1; + } + + this.missingImage.generateMipmaps(this.mipmapLevels); + stitcher.addSprite(this.missingImage); + bar = net.minecraftforge.fml.common.ProgressManager.push("Texture creation", 2); + + try + { + bar.step("Stitching"); + stitcher.doStitch(); + } + catch (StitcherException stitcherexception) + { + throw stitcherexception; + } + + LOGGER.info("Created: {}x{} {}-atlas", Integer.valueOf(stitcher.getCurrentWidth()), Integer.valueOf(stitcher.getCurrentHeight()), this.basePath); + bar.step("Allocating GL texture"); + TextureUtil.allocateTextureImpl(this.getGlTextureId(), this.mipmapLevels, stitcher.getCurrentWidth(), stitcher.getCurrentHeight()); + Map map = Maps.newHashMap(this.mapRegisteredSprites); + + net.minecraftforge.fml.common.ProgressManager.pop(bar); + bar = net.minecraftforge.fml.common.ProgressManager.push("Texture mipmap and upload", stitcher.getStichSlots().size()); + + for (TextureAtlasSprite textureatlassprite1 : stitcher.getStichSlots()) + { + bar.step(textureatlassprite1.getIconName()); + { + String s = textureatlassprite1.getIconName(); + map.remove(s); + this.mapUploadedSprites.put(s, textureatlassprite1); + + try + { + TextureUtil.uploadTextureMipmap(textureatlassprite1.getFrameTextureData(0), textureatlassprite1.getIconWidth(), textureatlassprite1.getIconHeight(), textureatlassprite1.getOriginX(), textureatlassprite1.getOriginY(), false, false); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Stitching texture atlas"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Texture being stitched together"); + crashreportcategory.addCrashSection("Atlas path", this.basePath); + crashreportcategory.addCrashSection("Sprite", textureatlassprite1); + throw new ReportedException(crashreport); + } + + if (textureatlassprite1.hasAnimationMetadata()) + { + this.listAnimatedSprites.add(textureatlassprite1); + } + } + } + + for (TextureAtlasSprite textureatlassprite2 : map.values()) + { + textureatlassprite2.copyFrom(this.missingImage); + } + net.minecraftforge.client.ForgeHooksClient.onTextureStitchedPost(this); + net.minecraftforge.fml.common.ProgressManager.pop(bar); + } + + private boolean generateMipmaps(IResourceManager resourceManager, final TextureAtlasSprite texture) + { + ResourceLocation resourcelocation = this.getResourceLocation(texture); + IResource iresource = null; + label62: + { + boolean flag; + if (texture.hasCustomLoader(resourceManager, resourcelocation)) break label62; + try + { + iresource = resourceManager.getResource(resourcelocation); + texture.loadSpriteFrames(iresource, this.mipmapLevels + 1); + break label62; + } + catch (RuntimeException runtimeexception) + { + LOGGER.error("Unable to parse metadata from {}", resourcelocation, runtimeexception); + flag = false; + } + catch (IOException ioexception) + { + LOGGER.error("Using missing texture, unable to load {}", resourcelocation, ioexception); + flag = false; + return flag; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + return flag; + } + + try + { + texture.generateMipmaps(this.mipmapLevels); + return true; + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Applying mipmap"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Sprite being mipmapped"); + crashreportcategory.addDetail("Sprite name", new ICrashReportDetail() + { + public String call() throws Exception + { + return texture.getIconName(); + } + }); + crashreportcategory.addDetail("Sprite size", new ICrashReportDetail() + { + public String call() throws Exception + { + return texture.getIconWidth() + " x " + texture.getIconHeight(); + } + }); + crashreportcategory.addDetail("Sprite frames", new ICrashReportDetail() + { + public String call() throws Exception + { + return texture.getFrameCount() + " frames"; + } + }); + crashreportcategory.addCrashSection("Mipmap levels", Integer.valueOf(this.mipmapLevels)); + throw new ReportedException(crashreport); + } + } + + private ResourceLocation getResourceLocation(TextureAtlasSprite p_184396_1_) + { + ResourceLocation resourcelocation = new ResourceLocation(p_184396_1_.getIconName()); + return new ResourceLocation(resourcelocation.getResourceDomain(), String.format("%s/%s%s", this.basePath, resourcelocation.getResourcePath(), ".png")); + } + + public TextureAtlasSprite getAtlasSprite(String iconName) + { + TextureAtlasSprite textureatlassprite = this.mapUploadedSprites.get(iconName); + + if (textureatlassprite == null) + { + textureatlassprite = this.missingImage; + } + + return textureatlassprite; + } + + public void updateAnimations() + { + TextureUtil.bindTexture(this.getGlTextureId()); + + for (TextureAtlasSprite textureatlassprite : this.listAnimatedSprites) + { + textureatlassprite.updateAnimation(); + } + } + + public TextureAtlasSprite registerSprite(ResourceLocation location) + { + if (location == null) + { + throw new IllegalArgumentException("Location cannot be null!"); + } + else + { + TextureAtlasSprite textureatlassprite = this.mapRegisteredSprites.get(location.toString()); + + if (textureatlassprite == null) + { + textureatlassprite = TextureAtlasSprite.makeAtlasSprite(location); + this.mapRegisteredSprites.put(location.toString(), textureatlassprite); + } + + return textureatlassprite; + } + } + + public void tick() + { + this.updateAnimations(); + } + + public void setMipmapLevels(int mipmapLevelsIn) + { + this.mipmapLevels = mipmapLevelsIn; + } + + public TextureAtlasSprite getMissingSprite() + { + return this.missingImage; + } + + //=================================================================================================== + // Forge Start + //=================================================================================================== + + private final java.util.Deque loadingSprites = new java.util.ArrayDeque<>(); + private final java.util.Set loadedSprites = new java.util.HashSet<>(); + + /** + * Grabs the registered entry for the specified name, returning null if there was not a entry. + * Opposed to registerIcon, this will not instantiate the entry, useful to test if a mapping exists. + * + * @param name The name of the entry to find + * @return The registered entry, null if nothing was registered. + */ + @Nullable + public TextureAtlasSprite getTextureExtry(String name) + { + return mapRegisteredSprites.get(name); + } + + /** + * Adds a texture registry entry to this map for the specified name if one does not already exist. + * Returns false if the map already contains a entry for the specified name. + * + * @param entry Entry instance + * @return True if the entry was added to the map, false otherwise. + */ + public boolean setTextureEntry(TextureAtlasSprite entry) + { + String name = entry.getIconName(); + if (!mapRegisteredSprites.containsKey(name)) + { + mapRegisteredSprites.put(name, entry); + return true; + } + return false; + } + + public String getBasePath() + { + return basePath; + } + + public int getMipmapLevels() + { + return mipmapLevels; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureUtil.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureUtil.java new file mode 100644 index 0000000..1daf9e8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/TextureUtil.java @@ -0,0 +1,411 @@ +package net.minecraft.client.renderer.texture; + +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.nio.IntBuffer; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class TextureUtil +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final IntBuffer DATA_BUFFER = GLAllocation.createDirectIntBuffer(4194304); + public static final DynamicTexture MISSING_TEXTURE = new DynamicTexture(16, 16); + public static final int[] MISSING_TEXTURE_DATA = MISSING_TEXTURE.getTextureData(); + private static final float[] COLOR_GAMMAS; + private static final int[] MIPMAP_BUFFER; + + private static float getColorGamma(int p_188543_0_) + { + return COLOR_GAMMAS[p_188543_0_ & 255]; + } + + public static int glGenTextures() + { + return GlStateManager.generateTexture(); + } + + public static void deleteTexture(int textureId) + { + GlStateManager.deleteTexture(textureId); + } + + public static int uploadTextureImage(int textureId, BufferedImage texture) + { + return uploadTextureImageAllocate(textureId, texture, false, false); + } + + public static void uploadTexture(int textureId, int[] p_110988_1_, int p_110988_2_, int p_110988_3_) + { + bindTexture(textureId); + uploadTextureSub(0, p_110988_1_, p_110988_2_, p_110988_3_, 0, 0, false, false, false); + } + + public static int[][] generateMipmapData(int p_147949_0_, int p_147949_1_, int[][] p_147949_2_) + { + int[][] aint = new int[p_147949_0_ + 1][]; + aint[0] = p_147949_2_[0]; + + if (p_147949_0_ > 0) + { + boolean flag = false; + + for (int i = 0; i < p_147949_2_.length; ++i) + { + if (p_147949_2_[0][i] >> 24 == 0) + { + flag = true; + break; + } + } + + for (int l1 = 1; l1 <= p_147949_0_; ++l1) + { + if (p_147949_2_[l1] != null) + { + aint[l1] = p_147949_2_[l1]; + } + else + { + int[] aint1 = aint[l1 - 1]; + int[] aint2 = new int[aint1.length >> 2]; + int j = p_147949_1_ >> l1; + if (j > 0) { // FORGE: forcing higher mipmap levels on odd textures needs this check + int k = aint2.length / j; + int l = j << 1; + + for (int i1 = 0; i1 < j; ++i1) + { + for (int j1 = 0; j1 < k; ++j1) + { + int k1 = 2 * (i1 + j1 * l); + aint2[i1 + j1 * j] = blendColors(aint1[k1 + 0], aint1[k1 + 1], aint1[k1 + 0 + l], aint1[k1 + 1 + l], flag); + } + } + } // end if (j > 0) + + aint[l1] = aint2; + } + } + } + + return aint; + } + + private static int blendColors(int p_147943_0_, int p_147943_1_, int p_147943_2_, int p_147943_3_, boolean p_147943_4_) + { + if (p_147943_4_) + { + MIPMAP_BUFFER[0] = p_147943_0_; + MIPMAP_BUFFER[1] = p_147943_1_; + MIPMAP_BUFFER[2] = p_147943_2_; + MIPMAP_BUFFER[3] = p_147943_3_; + float f = 0.0F; + float f1 = 0.0F; + float f2 = 0.0F; + float f3 = 0.0F; + + for (int i1 = 0; i1 < 4; ++i1) + { + if (MIPMAP_BUFFER[i1] >> 24 != 0) + { + f += getColorGamma(MIPMAP_BUFFER[i1] >> 24); + f1 += getColorGamma(MIPMAP_BUFFER[i1] >> 16); + f2 += getColorGamma(MIPMAP_BUFFER[i1] >> 8); + f3 += getColorGamma(MIPMAP_BUFFER[i1] >> 0); + } + } + + f = f / 4.0F; + f1 = f1 / 4.0F; + f2 = f2 / 4.0F; + f3 = f3 / 4.0F; + int i2 = (int)(Math.pow((double)f, 0.45454545454545453D) * 255.0D); + int j1 = (int)(Math.pow((double)f1, 0.45454545454545453D) * 255.0D); + int k1 = (int)(Math.pow((double)f2, 0.45454545454545453D) * 255.0D); + int l1 = (int)(Math.pow((double)f3, 0.45454545454545453D) * 255.0D); + + if (i2 < 96) + { + i2 = 0; + } + + return i2 << 24 | j1 << 16 | k1 << 8 | l1; + } + else + { + int i = blendColorComponent(p_147943_0_, p_147943_1_, p_147943_2_, p_147943_3_, 24); + int j = blendColorComponent(p_147943_0_, p_147943_1_, p_147943_2_, p_147943_3_, 16); + int k = blendColorComponent(p_147943_0_, p_147943_1_, p_147943_2_, p_147943_3_, 8); + int l = blendColorComponent(p_147943_0_, p_147943_1_, p_147943_2_, p_147943_3_, 0); + return i << 24 | j << 16 | k << 8 | l; + } + } + + private static int blendColorComponent(int p_147944_0_, int p_147944_1_, int p_147944_2_, int p_147944_3_, int p_147944_4_) + { + float f = getColorGamma(p_147944_0_ >> p_147944_4_); + float f1 = getColorGamma(p_147944_1_ >> p_147944_4_); + float f2 = getColorGamma(p_147944_2_ >> p_147944_4_); + float f3 = getColorGamma(p_147944_3_ >> p_147944_4_); + float f4 = (float)((double)((float)Math.pow((double)(f + f1 + f2 + f3) * 0.25D, 0.45454545454545453D))); + return (int)((double)f4 * 255.0D); + } + + public static void uploadTextureMipmap(int[][] p_147955_0_, int p_147955_1_, int p_147955_2_, int p_147955_3_, int p_147955_4_, boolean p_147955_5_, boolean p_147955_6_) + { + for (int i = 0; i < p_147955_0_.length; ++i) + { + int[] aint = p_147955_0_[i]; + if ((p_147955_1_ >> i <= 0) || (p_147955_2_ >> i <= 0)) break; + uploadTextureSub(i, aint, p_147955_1_ >> i, p_147955_2_ >> i, p_147955_3_ >> i, p_147955_4_ >> i, p_147955_5_, p_147955_6_, p_147955_0_.length > 1); + } + } + + private static void uploadTextureSub(int p_147947_0_, int[] p_147947_1_, int p_147947_2_, int p_147947_3_, int p_147947_4_, int p_147947_5_, boolean p_147947_6_, boolean p_147947_7_, boolean p_147947_8_) + { + int i = 4194304 / p_147947_2_; + setTextureBlurMipmap(p_147947_6_, p_147947_8_); + setTextureClamped(p_147947_7_); + int l; + + for (int j = 0; j < p_147947_2_ * p_147947_3_; j += p_147947_2_ * l) + { + int k = j / p_147947_2_; + l = Math.min(i, p_147947_3_ - k); + int i1 = p_147947_2_ * l; + copyToBufferPos(p_147947_1_, j, i1); + GlStateManager.glTexSubImage2D(3553, p_147947_0_, p_147947_4_, p_147947_5_ + k, p_147947_2_, l, 32993, 33639, DATA_BUFFER); + } + } + + public static int uploadTextureImageAllocate(int textureId, BufferedImage texture, boolean blur, boolean clamp) + { + allocateTexture(textureId, texture.getWidth(), texture.getHeight()); + return uploadTextureImageSub(textureId, texture, 0, 0, blur, clamp); + } + + public static void allocateTexture(int textureId, int width, int height) + { + allocateTextureImpl(textureId, 0, width, height); + } + + public static void allocateTextureImpl(int glTextureId, int mipmapLevels, int width, int height) + { + synchronized (net.minecraftforge.fml.client.SplashProgress.class) + { + deleteTexture(glTextureId); + bindTexture(glTextureId); + } + if (mipmapLevels >= 0) + { + GlStateManager.glTexParameteri(3553, 33085, mipmapLevels); + GlStateManager.glTexParameteri(3553, 33082, 0); + GlStateManager.glTexParameteri(3553, 33083, mipmapLevels); + GlStateManager.glTexParameterf(3553, 34049, 0.0F); + } + + for (int i = 0; i <= mipmapLevels; ++i) + { + GlStateManager.glTexImage2D(3553, i, 6408, width >> i, height >> i, 0, 32993, 33639, (IntBuffer)null); + } + } + + public static int uploadTextureImageSub(int textureId, BufferedImage p_110995_1_, int p_110995_2_, int p_110995_3_, boolean p_110995_4_, boolean p_110995_5_) + { + bindTexture(textureId); + uploadTextureImageSubImpl(p_110995_1_, p_110995_2_, p_110995_3_, p_110995_4_, p_110995_5_); + return textureId; + } + + private static void uploadTextureImageSubImpl(BufferedImage p_110993_0_, int p_110993_1_, int p_110993_2_, boolean p_110993_3_, boolean p_110993_4_) + { + int i = p_110993_0_.getWidth(); + int j = p_110993_0_.getHeight(); + int k = 4194304 / i; + int[] aint = new int[k * i]; + setTextureBlurred(p_110993_3_); + setTextureClamped(p_110993_4_); + + for (int l = 0; l < i * j; l += i * k) + { + int i1 = l / i; + int j1 = Math.min(k, j - i1); + int k1 = i * j1; + p_110993_0_.getRGB(0, i1, i, j1, aint, 0, i); + copyToBuffer(aint, k1); + GlStateManager.glTexSubImage2D(3553, 0, p_110993_1_, p_110993_2_ + i1, i, j1, 32993, 33639, DATA_BUFFER); + } + } + + private static void setTextureClamped(boolean p_110997_0_) + { + if (p_110997_0_) + { + GlStateManager.glTexParameteri(3553, 10242, 10496); + GlStateManager.glTexParameteri(3553, 10243, 10496); + } + else + { + GlStateManager.glTexParameteri(3553, 10242, 10497); + GlStateManager.glTexParameteri(3553, 10243, 10497); + } + } + + private static void setTextureBlurred(boolean p_147951_0_) + { + setTextureBlurMipmap(p_147951_0_, false); + } + + private static void setTextureBlurMipmap(boolean p_147954_0_, boolean p_147954_1_) + { + if (p_147954_0_) + { + GlStateManager.glTexParameteri(3553, 10241, p_147954_1_ ? 9987 : 9729); + GlStateManager.glTexParameteri(3553, 10240, 9729); + } + else + { + GlStateManager.glTexParameteri(3553, 10241, p_147954_1_ ? 9986 : 9728); + GlStateManager.glTexParameteri(3553, 10240, 9728); + } + } + + private static void copyToBuffer(int[] p_110990_0_, int p_110990_1_) + { + copyToBufferPos(p_110990_0_, 0, p_110990_1_); + } + + private static void copyToBufferPos(int[] p_110994_0_, int p_110994_1_, int p_110994_2_) + { + int[] aint = p_110994_0_; + + if (Minecraft.getMinecraft().gameSettings.anaglyph) + { + aint = updateAnaglyph(p_110994_0_); + } + + DATA_BUFFER.clear(); + DATA_BUFFER.put(aint, p_110994_1_, p_110994_2_); + DATA_BUFFER.position(0).limit(p_110994_2_); + } + + static void bindTexture(int p_94277_0_) + { + GlStateManager.bindTexture(p_94277_0_); + } + + public static int[] readImageData(IResourceManager resourceManager, ResourceLocation imageLocation) throws IOException + { + IResource iresource = null; + int[] aint1; + + try + { + iresource = resourceManager.getResource(imageLocation); + BufferedImage bufferedimage = readBufferedImage(iresource.getInputStream()); + int i = bufferedimage.getWidth(); + int j = bufferedimage.getHeight(); + int[] aint = new int[i * j]; + bufferedimage.getRGB(0, 0, i, j, aint, 0, i); + aint1 = aint; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + return aint1; + } + + public static BufferedImage readBufferedImage(InputStream imageStream) throws IOException + { + BufferedImage bufferedimage; + + try + { + bufferedimage = ImageIO.read(imageStream); + } + finally + { + IOUtils.closeQuietly(imageStream); + } + + return bufferedimage; + } + + public static int[] updateAnaglyph(int[] p_110985_0_) + { + int[] aint = new int[p_110985_0_.length]; + + for (int i = 0; i < p_110985_0_.length; ++i) + { + aint[i] = anaglyphColor(p_110985_0_[i]); + } + + return aint; + } + + public static int anaglyphColor(int p_177054_0_) + { + int i = p_177054_0_ >> 24 & 255; + int j = p_177054_0_ >> 16 & 255; + int k = p_177054_0_ >> 8 & 255; + int l = p_177054_0_ & 255; + int i1 = (j * 30 + k * 59 + l * 11) / 100; + int j1 = (j * 30 + k * 70) / 100; + int k1 = (j * 30 + l * 70) / 100; + return i << 24 | i1 << 16 | j1 << 8 | k1; + } + + public static void processPixelValues(int[] p_147953_0_, int p_147953_1_, int p_147953_2_) + { + int[] aint = new int[p_147953_1_]; + int i = p_147953_2_ / 2; + + for (int j = 0; j < i; ++j) + { + System.arraycopy(p_147953_0_, j * p_147953_1_, aint, 0, p_147953_1_); + System.arraycopy(p_147953_0_, (p_147953_2_ - 1 - j) * p_147953_1_, p_147953_0_, j * p_147953_1_, p_147953_1_); + System.arraycopy(aint, 0, p_147953_0_, (p_147953_2_ - 1 - j) * p_147953_1_, p_147953_1_); + } + } + + static + { + int i = -16777216; + int j = -524040; + int[] aint = new int[] { -524040, -524040, -524040, -524040, -524040, -524040, -524040, -524040}; + int[] aint1 = new int[] { -16777216, -16777216, -16777216, -16777216, -16777216, -16777216, -16777216, -16777216}; + int k = aint.length; + + for (int l = 0; l < 16; ++l) + { + System.arraycopy(l < k ? aint : aint1, 0, MISSING_TEXTURE_DATA, 16 * l, k); + System.arraycopy(l < k ? aint1 : aint, 0, MISSING_TEXTURE_DATA, 16 * l + k, k); + } + + MISSING_TEXTURE.updateDynamicTexture(); + COLOR_GAMMAS = new float[256]; + + for (int i1 = 0; i1 < COLOR_GAMMAS.length; ++i1) + { + COLOR_GAMMAS[i1] = (float)Math.pow((double)((float)i1 / 255.0F), 2.2D); + } + + MIPMAP_BUFFER = new int[4]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/package-info.java new file mode 100644 index 0000000..1296bdf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/texture/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.texture; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java new file mode 100644 index 0000000..17fbd19 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBannerRenderer.java @@ -0,0 +1,85 @@ +package net.minecraft.client.renderer.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.client.model.ModelBanner; +import net.minecraft.client.renderer.BannerTextures; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityBannerRenderer extends TileEntitySpecialRenderer +{ + private final ModelBanner bannerModel = new ModelBanner(); + + public void render(TileEntityBanner te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + boolean flag = te.getWorld() != null; + boolean flag1 = !flag || te.getBlockType() == Blocks.STANDING_BANNER; + int i = flag ? te.getBlockMetadata() : 0; + long j = flag ? te.getWorld().getTotalWorldTime() : 0L; + GlStateManager.pushMatrix(); + float f = 0.6666667F; + + if (flag1) + { + GlStateManager.translate((float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F); + float f1 = (float)(i * 360) / 16.0F; + GlStateManager.rotate(-f1, 0.0F, 1.0F, 0.0F); + this.bannerModel.bannerStand.showModel = true; + } + else + { + float f2 = 0.0F; + + if (i == 2) + { + f2 = 180.0F; + } + + if (i == 4) + { + f2 = 90.0F; + } + + if (i == 5) + { + f2 = -90.0F; + } + + GlStateManager.translate((float)x + 0.5F, (float)y - 0.16666667F, (float)z + 0.5F); + GlStateManager.rotate(-f2, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, -0.3125F, -0.4375F); + this.bannerModel.bannerStand.showModel = false; + } + + BlockPos blockpos = te.getPos(); + float f3 = (float)(blockpos.getX() * 7 + blockpos.getY() * 9 + blockpos.getZ() * 13) + (float)j + partialTicks; + this.bannerModel.bannerSlate.rotateAngleX = (-0.0125F + 0.01F * MathHelper.cos(f3 * (float)Math.PI * 0.02F)) * (float)Math.PI; + GlStateManager.enableRescaleNormal(); + ResourceLocation resourcelocation = this.getBannerResourceLocation(te); + + if (resourcelocation != null) + { + this.bindTexture(resourcelocation); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.6666667F, -0.6666667F, -0.6666667F); + this.bannerModel.renderBanner(); + GlStateManager.popMatrix(); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, alpha); + GlStateManager.popMatrix(); + } + + @Nullable + private ResourceLocation getBannerResourceLocation(TileEntityBanner bannerObj) + { + return BannerTextures.BANNER_DESIGNS.getResourceLocation(bannerObj.getPatternResourceLocation(), bannerObj.getPatternList(), bannerObj.getColorList()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.java new file mode 100644 index 0000000..f4c2411 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBeaconRenderer.java @@ -0,0 +1,141 @@ +package net.minecraft.client.renderer.tileentity; + +import java.util.List; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntityBeacon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityBeaconRenderer extends TileEntitySpecialRenderer +{ + public static final ResourceLocation TEXTURE_BEACON_BEAM = new ResourceLocation("textures/entity/beacon_beam.png"); + + public void render(TileEntityBeacon te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + this.renderBeacon(x, y, z, (double)partialTicks, (double)te.shouldBeamRender(), te.getBeamSegments(), (double)te.getWorld().getTotalWorldTime()); + } + + public void renderBeacon(double x, double y, double z, double partialTicks, double textureScale, List beamSegments, double totalWorldTime) + { + GlStateManager.alphaFunc(516, 0.1F); + this.bindTexture(TEXTURE_BEACON_BEAM); + + if (textureScale > 0.0D) + { + GlStateManager.disableFog(); + int i = 0; + + for (int j = 0; j < beamSegments.size(); ++j) + { + TileEntityBeacon.BeamSegment tileentitybeacon$beamsegment = beamSegments.get(j); + renderBeamSegment(x, y, z, partialTicks, textureScale, totalWorldTime, i, tileentitybeacon$beamsegment.getHeight(), tileentitybeacon$beamsegment.getColors()); + i += tileentitybeacon$beamsegment.getHeight(); + } + + GlStateManager.enableFog(); + } + } + + public static void renderBeamSegment(double x, double y, double z, double partialTicks, double textureScale, double totalWorldTime, int yOffset, int height, float[] colors) + { + renderBeamSegment(x, y, z, partialTicks, textureScale, totalWorldTime, yOffset, height, colors, 0.2D, 0.25D); + } + + public static void renderBeamSegment(double x, double y, double z, double partialTicks, double textureScale, double totalWorldTime, int yOffset, int height, float[] colors, double beamRadius, double glowRadius) + { + int i = yOffset + height; + GlStateManager.glTexParameteri(3553, 10242, 10497); + GlStateManager.glTexParameteri(3553, 10243, 10497); + GlStateManager.disableLighting(); + GlStateManager.disableCull(); + GlStateManager.disableBlend(); + GlStateManager.depthMask(true); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + double d0 = totalWorldTime + partialTicks; + double d1 = height < 0 ? d0 : -d0; + double d2 = MathHelper.frac(d1 * 0.2D - (double)MathHelper.floor(d1 * 0.1D)); + float f = colors[0]; + float f1 = colors[1]; + float f2 = colors[2]; + double d3 = d0 * 0.025D * -1.5D; + double d4 = 0.5D + Math.cos(d3 + 2.356194490192345D) * beamRadius; + double d5 = 0.5D + Math.sin(d3 + 2.356194490192345D) * beamRadius; + double d6 = 0.5D + Math.cos(d3 + (Math.PI / 4D)) * beamRadius; + double d7 = 0.5D + Math.sin(d3 + (Math.PI / 4D)) * beamRadius; + double d8 = 0.5D + Math.cos(d3 + 3.9269908169872414D) * beamRadius; + double d9 = 0.5D + Math.sin(d3 + 3.9269908169872414D) * beamRadius; + double d10 = 0.5D + Math.cos(d3 + 5.497787143782138D) * beamRadius; + double d11 = 0.5D + Math.sin(d3 + 5.497787143782138D) * beamRadius; + double d12 = 0.0D; + double d13 = 1.0D; + double d14 = -1.0D + d2; + double d15 = (double)height * textureScale * (0.5D / beamRadius) + d14; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(x + d4, y + (double)i, z + d5).tex(1.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d4, y + (double)yOffset, z + d5).tex(1.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d6, y + (double)yOffset, z + d7).tex(0.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d6, y + (double)i, z + d7).tex(0.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d10, y + (double)i, z + d11).tex(1.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d10, y + (double)yOffset, z + d11).tex(1.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d8, y + (double)yOffset, z + d9).tex(0.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d8, y + (double)i, z + d9).tex(0.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d6, y + (double)i, z + d7).tex(1.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d6, y + (double)yOffset, z + d7).tex(1.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d10, y + (double)yOffset, z + d11).tex(0.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d10, y + (double)i, z + d11).tex(0.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d8, y + (double)i, z + d9).tex(1.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d8, y + (double)yOffset, z + d9).tex(1.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d4, y + (double)yOffset, z + d5).tex(0.0D, d14).color(f, f1, f2, 1.0F).endVertex(); + bufferbuilder.pos(x + d4, y + (double)i, z + d5).tex(0.0D, d15).color(f, f1, f2, 1.0F).endVertex(); + tessellator.draw(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + GlStateManager.depthMask(false); + d3 = 0.5D - glowRadius; + d4 = 0.5D - glowRadius; + d5 = 0.5D + glowRadius; + d6 = 0.5D - glowRadius; + d7 = 0.5D - glowRadius; + d8 = 0.5D + glowRadius; + d9 = 0.5D + glowRadius; + d10 = 0.5D + glowRadius; + d11 = 0.0D; + d12 = 1.0D; + d13 = -1.0D + d2; + d14 = (double)height * textureScale + d13; + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(x + d3, y + (double)i, z + d4).tex(1.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d3, y + (double)yOffset, z + d4).tex(1.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d5, y + (double)yOffset, z + d6).tex(0.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d5, y + (double)i, z + d6).tex(0.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d9, y + (double)i, z + d10).tex(1.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d9, y + (double)yOffset, z + d10).tex(1.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d7, y + (double)yOffset, z + d8).tex(0.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d7, y + (double)i, z + d8).tex(0.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d5, y + (double)i, z + d6).tex(1.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d5, y + (double)yOffset, z + d6).tex(1.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d9, y + (double)yOffset, z + d10).tex(0.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d9, y + (double)i, z + d10).tex(0.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d7, y + (double)i, z + d8).tex(1.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d7, y + (double)yOffset, z + d8).tex(1.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d3, y + (double)yOffset, z + d4).tex(0.0D, d13).color(f, f1, f2, 0.125F).endVertex(); + bufferbuilder.pos(x + d3, y + (double)i, z + d4).tex(0.0D, d14).color(f, f1, f2, 0.125F).endVertex(); + tessellator.draw(); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + GlStateManager.depthMask(true); + } + + public boolean isGlobalRenderer(TileEntityBeacon te) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.java new file mode 100644 index 0000000..422feed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityBedRenderer.java @@ -0,0 +1,126 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.client.model.ModelBed; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.tileentity.TileEntityBed; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityBedRenderer extends TileEntitySpecialRenderer +{ + private static final ResourceLocation[] TEXTURES; + private ModelBed model = new ModelBed(); + private int version; + + public TileEntityBedRenderer() + { + this.version = this.model.getModelVersion(); + } + + public void render(TileEntityBed te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (this.version != this.model.getModelVersion()) + { + this.model = new ModelBed(); + this.version = this.model.getModelVersion(); + } + + boolean flag = te.getWorld() != null; + boolean flag1 = flag ? te.isHeadPiece() : true; + EnumDyeColor enumdyecolor = te != null ? te.getColor() : EnumDyeColor.RED; + int i = flag ? te.getBlockMetadata() & 3 : 0; + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 4.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else + { + ResourceLocation resourcelocation = TEXTURES[enumdyecolor.getMetadata()]; + + if (resourcelocation != null) + { + this.bindTexture(resourcelocation); + } + } + + if (flag) + { + this.renderPiece(flag1, x, y, z, i, alpha); + } + else + { + GlStateManager.pushMatrix(); + this.renderPiece(true, x, y, z, i, alpha); + this.renderPiece(false, x, y, z - 1.0D, i, alpha); + GlStateManager.popMatrix(); + } + + if (destroyStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + } + + private void renderPiece(boolean p_193847_1_, double x, double y, double z, int p_193847_8_, float alpha) + { + this.model.preparePiece(p_193847_1_); + GlStateManager.pushMatrix(); + float f = 0.0F; + float f1 = 0.0F; + float f2 = 0.0F; + + if (p_193847_8_ == EnumFacing.NORTH.getHorizontalIndex()) + { + f = 0.0F; + } + else if (p_193847_8_ == EnumFacing.SOUTH.getHorizontalIndex()) + { + f = 180.0F; + f1 = 1.0F; + f2 = 1.0F; + } + else if (p_193847_8_ == EnumFacing.WEST.getHorizontalIndex()) + { + f = -90.0F; + f2 = 1.0F; + } + else if (p_193847_8_ == EnumFacing.EAST.getHorizontalIndex()) + { + f = 90.0F; + f1 = 1.0F; + } + + GlStateManager.translate((float)x + f1, (float)y + 0.5625F, (float)z + f2); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f, 0.0F, 0.0F, 1.0F); + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + this.model.render(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, alpha); + GlStateManager.popMatrix(); + } + + static + { + EnumDyeColor[] aenumdyecolor = EnumDyeColor.values(); + TEXTURES = new ResourceLocation[aenumdyecolor.length]; + + for (EnumDyeColor enumdyecolor : aenumdyecolor) + { + TEXTURES[enumdyecolor.getMetadata()] = new ResourceLocation("textures/entity/bed/" + enumdyecolor.getDyeColorName() + ".png"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java new file mode 100644 index 0000000..93a80b4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityChestRenderer.java @@ -0,0 +1,202 @@ +package net.minecraft.client.renderer.tileentity; + +import java.util.Calendar; +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.model.ModelLargeChest; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityChestRenderer extends TileEntitySpecialRenderer +{ + private static final ResourceLocation TEXTURE_TRAPPED_DOUBLE = new ResourceLocation("textures/entity/chest/trapped_double.png"); + private static final ResourceLocation TEXTURE_CHRISTMAS_DOUBLE = new ResourceLocation("textures/entity/chest/christmas_double.png"); + private static final ResourceLocation TEXTURE_NORMAL_DOUBLE = new ResourceLocation("textures/entity/chest/normal_double.png"); + private static final ResourceLocation TEXTURE_TRAPPED = new ResourceLocation("textures/entity/chest/trapped.png"); + private static final ResourceLocation TEXTURE_CHRISTMAS = new ResourceLocation("textures/entity/chest/christmas.png"); + private static final ResourceLocation TEXTURE_NORMAL = new ResourceLocation("textures/entity/chest/normal.png"); + private final ModelChest simpleChest = new ModelChest(); + private final ModelChest largeChest = new ModelLargeChest(); + private boolean isChristmas; + + public TileEntityChestRenderer() + { + Calendar calendar = Calendar.getInstance(); + + if (calendar.get(2) + 1 == 12 && calendar.get(5) >= 24 && calendar.get(5) <= 26) + { + this.isChristmas = true; + } + } + + public void render(TileEntityChest te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.enableDepth(); + GlStateManager.depthFunc(515); + GlStateManager.depthMask(true); + int i; + + if (te.hasWorld()) + { + Block block = te.getBlockType(); + i = te.getBlockMetadata(); + + if (block instanceof BlockChest && i == 0) + { + ((BlockChest)block).checkForSurroundingChests(te.getWorld(), te.getPos(), te.getWorld().getBlockState(te.getPos())); + i = te.getBlockMetadata(); + } + + te.checkForAdjacentChests(); + } + else + { + i = 0; + } + + if (te.adjacentChestZNeg == null && te.adjacentChestXNeg == null) + { + ModelChest modelchest; + + if (te.adjacentChestXPos == null && te.adjacentChestZPos == null) + { + modelchest = this.simpleChest; + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 4.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else if (this.isChristmas) + { + this.bindTexture(TEXTURE_CHRISTMAS); + } + else if (te.getChestType() == BlockChest.Type.TRAP) + { + this.bindTexture(TEXTURE_TRAPPED); + } + else + { + this.bindTexture(TEXTURE_NORMAL); + } + } + else + { + modelchest = this.largeChest; + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(8.0F, 4.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else if (this.isChristmas) + { + this.bindTexture(TEXTURE_CHRISTMAS_DOUBLE); + } + else if (te.getChestType() == BlockChest.Type.TRAP) + { + this.bindTexture(TEXTURE_TRAPPED_DOUBLE); + } + else + { + this.bindTexture(TEXTURE_NORMAL_DOUBLE); + } + } + + GlStateManager.pushMatrix(); + GlStateManager.enableRescaleNormal(); + + if (destroyStage < 0) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, alpha); + } + + GlStateManager.translate((float)x, (float)y + 1.0F, (float)z + 1.0F); + GlStateManager.scale(1.0F, -1.0F, -1.0F); + GlStateManager.translate(0.5F, 0.5F, 0.5F); + int j = 0; + + if (i == 2) + { + j = 180; + } + + if (i == 3) + { + j = 0; + } + + if (i == 4) + { + j = 90; + } + + if (i == 5) + { + j = -90; + } + + if (i == 2 && te.adjacentChestXPos != null) + { + GlStateManager.translate(1.0F, 0.0F, 0.0F); + } + + if (i == 5 && te.adjacentChestZPos != null) + { + GlStateManager.translate(0.0F, 0.0F, -1.0F); + } + + GlStateManager.rotate((float)j, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.5F, -0.5F, -0.5F); + float f = te.prevLidAngle + (te.lidAngle - te.prevLidAngle) * partialTicks; + + if (te.adjacentChestZNeg != null) + { + float f1 = te.adjacentChestZNeg.prevLidAngle + (te.adjacentChestZNeg.lidAngle - te.adjacentChestZNeg.prevLidAngle) * partialTicks; + + if (f1 > f) + { + f = f1; + } + } + + if (te.adjacentChestXNeg != null) + { + float f2 = te.adjacentChestXNeg.prevLidAngle + (te.adjacentChestXNeg.lidAngle - te.adjacentChestXNeg.prevLidAngle) * partialTicks; + + if (f2 > f) + { + f = f2; + } + } + + f = 1.0F - f; + f = 1.0F - f * f * f; + modelchest.chestLid.rotateAngleX = -(f * ((float)Math.PI / 2F)); + modelchest.renderAll(); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if (destroyStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.java new file mode 100644 index 0000000..e3e245e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEnchantmentTableRenderer.java @@ -0,0 +1,71 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.client.model.ModelBook; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntityEnchantmentTable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityEnchantmentTableRenderer extends TileEntitySpecialRenderer +{ + /** The texture for the book above the enchantment table. */ + private static final ResourceLocation TEXTURE_BOOK = new ResourceLocation("textures/entity/enchanting_table_book.png"); + private final ModelBook modelBook = new ModelBook(); + + public void render(TileEntityEnchantmentTable te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x + 0.5F, (float)y + 0.75F, (float)z + 0.5F); + float f = (float)te.tickCount + partialTicks; + GlStateManager.translate(0.0F, 0.1F + MathHelper.sin(f * 0.1F) * 0.01F, 0.0F); + float f1; + + for (f1 = te.bookRotation - te.bookRotationPrev; f1 >= (float)Math.PI; f1 -= ((float)Math.PI * 2F)) + { + ; + } + + while (f1 < -(float)Math.PI) + { + f1 += ((float)Math.PI * 2F); + } + + float f2 = te.bookRotationPrev + f1 * partialTicks; + GlStateManager.rotate(-f2 * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(80.0F, 0.0F, 0.0F, 1.0F); + this.bindTexture(TEXTURE_BOOK); + float f3 = te.pageFlipPrev + (te.pageFlip - te.pageFlipPrev) * partialTicks + 0.25F; + float f4 = te.pageFlipPrev + (te.pageFlip - te.pageFlipPrev) * partialTicks + 0.75F; + f3 = (f3 - (float)MathHelper.fastFloor((double)f3)) * 1.6F - 0.3F; + f4 = (f4 - (float)MathHelper.fastFloor((double)f4)) * 1.6F - 0.3F; + + if (f3 < 0.0F) + { + f3 = 0.0F; + } + + if (f4 < 0.0F) + { + f4 = 0.0F; + } + + if (f3 > 1.0F) + { + f3 = 1.0F; + } + + if (f4 > 1.0F) + { + f4 = 1.0F; + } + + float f5 = te.bookSpreadPrev + (te.bookSpread - te.bookSpreadPrev) * partialTicks; + GlStateManager.enableCull(); + this.modelBook.render((Entity)null, f, f3, f4, f5, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.java new file mode 100644 index 0000000..f3f90e8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEndGatewayRenderer.java @@ -0,0 +1,48 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.tileentity.TileEntityEndGateway; +import net.minecraft.tileentity.TileEntityEndPortal; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityEndGatewayRenderer extends TileEntityEndPortalRenderer +{ + private static final ResourceLocation END_GATEWAY_BEAM_TEXTURE = new ResourceLocation("textures/entity/end_gateway_beam.png"); + + public void render(TileEntityEndPortal te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.disableFog(); + TileEntityEndGateway tileentityendgateway = (TileEntityEndGateway)te; + + if (tileentityendgateway.isSpawning() || tileentityendgateway.isCoolingDown()) + { + GlStateManager.alphaFunc(516, 0.1F); + this.bindTexture(END_GATEWAY_BEAM_TEXTURE); + float f = tileentityendgateway.isSpawning() ? tileentityendgateway.getSpawnPercent(partialTicks) : tileentityendgateway.getCooldownPercent(partialTicks); + double d0 = tileentityendgateway.isSpawning() ? 256.0D - y : 50.0D; + f = MathHelper.sin(f * (float)Math.PI); + int i = MathHelper.floor((double)f * d0); + float[] afloat = tileentityendgateway.isSpawning() ? EnumDyeColor.MAGENTA.getColorComponentValues() : EnumDyeColor.PURPLE.getColorComponentValues(); + TileEntityBeaconRenderer.renderBeamSegment(x, y, z, (double)partialTicks, (double)f, (double)tileentityendgateway.getWorld().getTotalWorldTime(), 0, i, afloat, 0.15D, 0.175D); + TileEntityBeaconRenderer.renderBeamSegment(x, y, z, (double)partialTicks, (double)f, (double)tileentityendgateway.getWorld().getTotalWorldTime(), 0, -i, afloat, 0.15D, 0.175D); + } + + super.render(te, x, y, z, partialTicks, destroyStage, alpha); + GlStateManager.enableFog(); + } + + protected int getPasses(double p_191286_1_) + { + return super.getPasses(p_191286_1_) + 1; + } + + protected float getOffset() + { + return 1.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java new file mode 100644 index 0000000..c6646ac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEndPortalRenderer.java @@ -0,0 +1,214 @@ +package net.minecraft.client.renderer.tileentity; + +import java.nio.FloatBuffer; +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.tileentity.TileEntityEndPortal; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityEndPortalRenderer extends TileEntitySpecialRenderer +{ + private static final ResourceLocation END_SKY_TEXTURE = new ResourceLocation("textures/environment/end_sky.png"); + private static final ResourceLocation END_PORTAL_TEXTURE = new ResourceLocation("textures/entity/end_portal.png"); + private static final Random RANDOM = new Random(31100L); + private static final FloatBuffer MODELVIEW = GLAllocation.createDirectFloatBuffer(16); + private static final FloatBuffer PROJECTION = GLAllocation.createDirectFloatBuffer(16); + private final FloatBuffer buffer = GLAllocation.createDirectFloatBuffer(16); + + public void render(TileEntityEndPortal te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.disableLighting(); + RANDOM.setSeed(31100L); + GlStateManager.getFloat(2982, MODELVIEW); + GlStateManager.getFloat(2983, PROJECTION); + double d0 = x * x + y * y + z * z; + int i = this.getPasses(d0); + float f = this.getOffset(); + boolean flag = false; + + for (int j = 0; j < i; ++j) + { + GlStateManager.pushMatrix(); + float f1 = 2.0F / (float)(18 - j); + + if (j == 0) + { + this.bindTexture(END_SKY_TEXTURE); + f1 = 0.15F; + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + } + + if (j >= 1) + { + this.bindTexture(END_PORTAL_TEXTURE); + flag = true; + Minecraft.getMinecraft().entityRenderer.setupFogColor(true); + } + + if (j == 1) + { + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE); + } + + GlStateManager.texGen(GlStateManager.TexGen.S, 9216); + GlStateManager.texGen(GlStateManager.TexGen.T, 9216); + GlStateManager.texGen(GlStateManager.TexGen.R, 9216); + GlStateManager.texGen(GlStateManager.TexGen.S, 9474, this.getBuffer(1.0F, 0.0F, 0.0F, 0.0F)); + GlStateManager.texGen(GlStateManager.TexGen.T, 9474, this.getBuffer(0.0F, 1.0F, 0.0F, 0.0F)); + GlStateManager.texGen(GlStateManager.TexGen.R, 9474, this.getBuffer(0.0F, 0.0F, 1.0F, 0.0F)); + GlStateManager.enableTexGenCoord(GlStateManager.TexGen.S); + GlStateManager.enableTexGenCoord(GlStateManager.TexGen.T); + GlStateManager.enableTexGenCoord(GlStateManager.TexGen.R); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.5F, 0.5F, 0.0F); + GlStateManager.scale(0.5F, 0.5F, 1.0F); + float f2 = (float)(j + 1); + GlStateManager.translate(17.0F / f2, (2.0F + f2 / 1.5F) * ((float)Minecraft.getSystemTime() % 800000.0F / 800000.0F), 0.0F); + GlStateManager.rotate((f2 * f2 * 4321.0F + f2 * 9.0F) * 2.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.scale(4.5F - f2 / 4.0F, 4.5F - f2 / 4.0F, 1.0F); + GlStateManager.multMatrix(PROJECTION); + GlStateManager.multMatrix(MODELVIEW); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + float f3 = (RANDOM.nextFloat() * 0.5F + 0.1F) * f1; + float f4 = (RANDOM.nextFloat() * 0.5F + 0.4F) * f1; + float f5 = (RANDOM.nextFloat() * 0.5F + 0.5F) * f1; + + if (te.shouldRenderFace(EnumFacing.SOUTH)) + { + bufferbuilder.pos(x, y, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y + 1.0D, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y + 1.0D, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + } + + if (te.shouldRenderFace(EnumFacing.NORTH)) + { + bufferbuilder.pos(x, y + 1.0D, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y + 1.0D, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y, z).color(f3, f4, f5, 1.0F).endVertex(); + } + + if (te.shouldRenderFace(EnumFacing.EAST)) + { + bufferbuilder.pos(x + 1.0D, y + 1.0D, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y + 1.0D, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y, z).color(f3, f4, f5, 1.0F).endVertex(); + } + + if (te.shouldRenderFace(EnumFacing.WEST)) + { + bufferbuilder.pos(x, y, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y + 1.0D, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y + 1.0D, z).color(f3, f4, f5, 1.0F).endVertex(); + } + + if (te.shouldRenderFace(EnumFacing.DOWN)) + { + bufferbuilder.pos(x, y, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + } + + if (te.shouldRenderFace(EnumFacing.UP)) + { + bufferbuilder.pos(x, y + (double)f, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y + (double)f, z + 1.0D).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x + 1.0D, y + (double)f, z).color(f3, f4, f5, 1.0F).endVertex(); + bufferbuilder.pos(x, y + (double)f, z).color(f3, f4, f5, 1.0F).endVertex(); + } + + tessellator.draw(); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + this.bindTexture(END_SKY_TEXTURE); + } + + GlStateManager.disableBlend(); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.S); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.T); + GlStateManager.disableTexGenCoord(GlStateManager.TexGen.R); + GlStateManager.enableLighting(); + + if (flag) + { + Minecraft.getMinecraft().entityRenderer.setupFogColor(false); + } + } + + protected int getPasses(double p_191286_1_) + { + int i; + + if (p_191286_1_ > 36864.0D) + { + i = 1; + } + else if (p_191286_1_ > 25600.0D) + { + i = 3; + } + else if (p_191286_1_ > 16384.0D) + { + i = 5; + } + else if (p_191286_1_ > 9216.0D) + { + i = 7; + } + else if (p_191286_1_ > 4096.0D) + { + i = 9; + } + else if (p_191286_1_ > 1024.0D) + { + i = 11; + } + else if (p_191286_1_ > 576.0D) + { + i = 13; + } + else if (p_191286_1_ > 256.0D) + { + i = 14; + } + else + { + i = 15; + } + + return i; + } + + protected float getOffset() + { + return 0.75F; + } + + private FloatBuffer getBuffer(float p_147525_1_, float p_147525_2_, float p_147525_3_, float p_147525_4_) + { + this.buffer.clear(); + this.buffer.put(p_147525_1_).put(p_147525_2_).put(p_147525_3_).put(p_147525_4_); + this.buffer.flip(); + return this.buffer; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.java new file mode 100644 index 0000000..b19fd9c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityEnderChestRenderer.java @@ -0,0 +1,85 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.client.model.ModelChest; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.tileentity.TileEntityEnderChest; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityEnderChestRenderer extends TileEntitySpecialRenderer +{ + private static final ResourceLocation ENDER_CHEST_TEXTURE = new ResourceLocation("textures/entity/chest/ender.png"); + private final ModelChest modelChest = new ModelChest(); + + public void render(TileEntityEnderChest te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + int i = 0; + + if (te.hasWorld()) + { + i = te.getBlockMetadata(); + } + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 4.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else + { + this.bindTexture(ENDER_CHEST_TEXTURE); + } + + GlStateManager.pushMatrix(); + GlStateManager.enableRescaleNormal(); + GlStateManager.color(1.0F, 1.0F, 1.0F, alpha); + GlStateManager.translate((float)x, (float)y + 1.0F, (float)z + 1.0F); + GlStateManager.scale(1.0F, -1.0F, -1.0F); + GlStateManager.translate(0.5F, 0.5F, 0.5F); + int j = 0; + + if (i == 2) + { + j = 180; + } + + if (i == 3) + { + j = 0; + } + + if (i == 4) + { + j = 90; + } + + if (i == 5) + { + j = -90; + } + + GlStateManager.rotate((float)j, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(-0.5F, -0.5F, -0.5F); + float f = te.prevLidAngle + (te.lidAngle - te.prevLidAngle) * partialTicks; + f = 1.0F - f; + f = 1.0F - f * f * f; + this.modelChest.chestLid.rotateAngleX = -(f * ((float)Math.PI / 2F)); + this.modelChest.renderAll(); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if (destroyStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java new file mode 100644 index 0000000..9f0df50 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityItemStackRenderer.java @@ -0,0 +1,137 @@ +package net.minecraft.client.renderer.tileentity; + +import com.mojang.authlib.GameProfile; +import java.util.UUID; +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.block.BlockShulkerBox; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelShield; +import net.minecraft.client.renderer.BannerTextures; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.tileentity.TileEntityBed; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.tileentity.TileEntityEnderChest; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; + +@SideOnly(Side.CLIENT) +public class TileEntityItemStackRenderer +{ + private static final TileEntityShulkerBox[] SHULKER_BOXES = new TileEntityShulkerBox[16]; + public static TileEntityItemStackRenderer instance; + private final TileEntityChest chestBasic = new TileEntityChest(BlockChest.Type.BASIC); + private final TileEntityChest chestTrap = new TileEntityChest(BlockChest.Type.TRAP); + private final TileEntityEnderChest enderChest = new TileEntityEnderChest(); + private final TileEntityBanner banner = new TileEntityBanner(); + private final TileEntityBed bed = new TileEntityBed(); + private final TileEntitySkull skull = new TileEntitySkull(); + private final ModelShield modelShield = new ModelShield(); + + public void renderByItem(ItemStack itemStackIn) + { + this.renderByItem(itemStackIn, 1.0F); + } + + public void renderByItem(ItemStack p_192838_1_, float partialTicks) + { + Item item = p_192838_1_.getItem(); + + if (item == Items.BANNER) + { + this.banner.setItemValues(p_192838_1_, false); + TileEntityRendererDispatcher.instance.render(this.banner, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks); + } + else if (item == Items.BED) + { + this.bed.setItemValues(p_192838_1_); + TileEntityRendererDispatcher.instance.render(this.bed, 0.0D, 0.0D, 0.0D, 0.0F); + } + else if (item == Items.SHIELD) + { + if (p_192838_1_.getSubCompound("BlockEntityTag") != null) + { + this.banner.setItemValues(p_192838_1_, true); + Minecraft.getMinecraft().getTextureManager().bindTexture(BannerTextures.SHIELD_DESIGNS.getResourceLocation(this.banner.getPatternResourceLocation(), this.banner.getPatternList(), this.banner.getColorList())); + } + else + { + Minecraft.getMinecraft().getTextureManager().bindTexture(BannerTextures.SHIELD_BASE_TEXTURE); + } + + GlStateManager.pushMatrix(); + GlStateManager.scale(1.0F, -1.0F, -1.0F); + this.modelShield.render(); + GlStateManager.popMatrix(); + } + else if (item == Items.SKULL) + { + GameProfile gameprofile = null; + + if (p_192838_1_.hasTagCompound()) + { + NBTTagCompound nbttagcompound = p_192838_1_.getTagCompound(); + + if (nbttagcompound.hasKey("SkullOwner", 10)) + { + gameprofile = NBTUtil.readGameProfileFromNBT(nbttagcompound.getCompoundTag("SkullOwner")); + } + else if (nbttagcompound.hasKey("SkullOwner", 8) && !StringUtils.isBlank(nbttagcompound.getString("SkullOwner"))) + { + GameProfile gameprofile1 = new GameProfile((UUID)null, nbttagcompound.getString("SkullOwner")); + gameprofile = TileEntitySkull.updateGameprofile(gameprofile1); + nbttagcompound.removeTag("SkullOwner"); + nbttagcompound.setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), gameprofile)); + } + } + + if (TileEntitySkullRenderer.instance != null) + { + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + TileEntitySkullRenderer.instance.renderSkull(0.0F, 0.0F, 0.0F, EnumFacing.UP, 180.0F, p_192838_1_.getMetadata(), gameprofile, -1, 0.0F); + GlStateManager.enableCull(); + GlStateManager.popMatrix(); + } + } + else if (item == Item.getItemFromBlock(Blocks.ENDER_CHEST)) + { + TileEntityRendererDispatcher.instance.render(this.enderChest, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks); + } + else if (item == Item.getItemFromBlock(Blocks.TRAPPED_CHEST)) + { + TileEntityRendererDispatcher.instance.render(this.chestTrap, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks); + } + else if (Block.getBlockFromItem(item) instanceof BlockShulkerBox) + { + TileEntityRendererDispatcher.instance.render(SHULKER_BOXES[BlockShulkerBox.getColorFromItem(item).getMetadata()], 0.0D, 0.0D, 0.0D, 0.0F, partialTicks); + } + else if (Block.getBlockFromItem(item) != Blocks.CHEST) net.minecraftforge.client.ForgeHooksClient.renderTileItem(p_192838_1_.getItem(), p_192838_1_.getMetadata()); + else + { + TileEntityRendererDispatcher.instance.render(this.chestBasic, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks); + } + } + + static + { + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + SHULKER_BOXES[enumdyecolor.getMetadata()] = new TileEntityShulkerBox(enumdyecolor); + } + + instance = new TileEntityItemStackRenderer(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.java new file mode 100644 index 0000000..88c363b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityMobSpawnerRenderer.java @@ -0,0 +1,48 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.MobSpawnerBaseLogic; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityMobSpawnerRenderer extends TileEntitySpecialRenderer +{ + public void render(TileEntityMobSpawner te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x + 0.5F, (float)y, (float)z + 0.5F); + renderMob(te.getSpawnerBaseLogic(), x, y, z, partialTicks); + GlStateManager.popMatrix(); + } + + /** + * Render the mob inside the mob spawner. + */ + public static void renderMob(MobSpawnerBaseLogic mobSpawnerLogic, double posX, double posY, double posZ, float partialTicks) + { + Entity entity = mobSpawnerLogic.getCachedEntity(); + + if (entity != null) + { + float f = 0.53125F; + float f1 = Math.max(entity.width, entity.height); + + if ((double)f1 > 1.0D) + { + f /= f1; + } + + GlStateManager.translate(0.0F, 0.4F, 0.0F); + GlStateManager.rotate((float)(mobSpawnerLogic.getPrevMobRotation() + (mobSpawnerLogic.getMobRotation() - mobSpawnerLogic.getPrevMobRotation()) * (double)partialTicks) * 10.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, -0.2F, 0.0F); + GlStateManager.rotate(-30.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.scale(f, f, f); + entity.setLocationAndAngles(posX, posY, posZ, 0.0F, 0.0F); + Minecraft.getMinecraft().getRenderManager().renderEntity(entity, 0.0D, 0.0D, 0.0D, 0.0F, partialTicks, false); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.java new file mode 100644 index 0000000..56185ed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityPistonRenderer.java @@ -0,0 +1,88 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockPistonExtension; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BlockRendererDispatcher; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityPiston; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityPistonRenderer extends TileEntitySpecialRenderer +{ + private BlockRendererDispatcher blockRenderer; + + public void render(TileEntityPiston te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); //Forge: Delay this from constructor to allow us to change it later + BlockPos blockpos = te.getPos(); + IBlockState iblockstate = te.getPistonState(); + Block block = iblockstate.getBlock(); + + if (iblockstate.getMaterial() != Material.AIR && te.getProgress(partialTicks) < 1.0F) + { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + this.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + RenderHelper.disableStandardItemLighting(); + GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.enableBlend(); + GlStateManager.disableCull(); + + if (Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(7425); + } + else + { + GlStateManager.shadeModel(7424); + } + + bufferbuilder.begin(7, DefaultVertexFormats.BLOCK); + bufferbuilder.setTranslation(x - (double)blockpos.getX() + (double)te.getOffsetX(partialTicks), y - (double)blockpos.getY() + (double)te.getOffsetY(partialTicks), z - (double)blockpos.getZ() + (double)te.getOffsetZ(partialTicks)); + World world = this.getWorld(); + + if (block == Blocks.PISTON_HEAD && te.getProgress(partialTicks) <= 0.25F) + { + iblockstate = iblockstate.withProperty(BlockPistonExtension.SHORT, Boolean.valueOf(true)); + this.renderStateModel(blockpos, iblockstate, bufferbuilder, world, true); + } + else if (te.shouldPistonHeadBeRendered() && !te.isExtending()) + { + BlockPistonExtension.EnumPistonType blockpistonextension$enumpistontype = block == Blocks.STICKY_PISTON ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT; + IBlockState iblockstate1 = Blocks.PISTON_HEAD.getDefaultState().withProperty(BlockPistonExtension.TYPE, blockpistonextension$enumpistontype).withProperty(BlockPistonExtension.FACING, iblockstate.getValue(BlockPistonBase.FACING)); + iblockstate1 = iblockstate1.withProperty(BlockPistonExtension.SHORT, Boolean.valueOf(te.getProgress(partialTicks) >= 0.5F)); + this.renderStateModel(blockpos, iblockstate1, bufferbuilder, world, true); + bufferbuilder.setTranslation(x - (double)blockpos.getX(), y - (double)blockpos.getY(), z - (double)blockpos.getZ()); + iblockstate = iblockstate.withProperty(BlockPistonBase.EXTENDED, Boolean.valueOf(true)); + this.renderStateModel(blockpos, iblockstate, bufferbuilder, world, true); + } + else + { + this.renderStateModel(blockpos, iblockstate, bufferbuilder, world, false); + } + + bufferbuilder.setTranslation(0.0D, 0.0D, 0.0D); + tessellator.draw(); + RenderHelper.enableStandardItemLighting(); + } + } + + private boolean renderStateModel(BlockPos pos, IBlockState state, BufferBuilder buffer, World p_188186_4_, boolean checkSides) + { + return this.blockRenderer.getBlockModelRenderer().renderModel(p_188186_4_, this.blockRenderer.getModelForState(state), state, pos, buffer, checkSides); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.java new file mode 100644 index 0000000..291b7c9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher.java @@ -0,0 +1,236 @@ +package net.minecraft.client.renderer.tileentity; + +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.model.ModelShulker; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.tileentity.TileEntityBeacon; +import net.minecraft.tileentity.TileEntityBed; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.tileentity.TileEntityEnchantmentTable; +import net.minecraft.tileentity.TileEntityEndGateway; +import net.minecraft.tileentity.TileEntityEndPortal; +import net.minecraft.tileentity.TileEntityEnderChest; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.tileentity.TileEntityPiston; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityRendererDispatcher +{ + public final Map < Class , TileEntitySpecialRenderer > renderers = Maps. < Class , TileEntitySpecialRenderer > newHashMap(); + public static TileEntityRendererDispatcher instance = new TileEntityRendererDispatcher(); + public FontRenderer fontRenderer; + /** The player's current X position (same as playerX) */ + public static double staticPlayerX; + /** The player's current Y position (same as playerY) */ + public static double staticPlayerY; + /** The player's current Z position (same as playerZ) */ + public static double staticPlayerZ; + public TextureManager renderEngine; + public World world; + public Entity entity; + public float entityYaw; + public float entityPitch; + public RayTraceResult cameraHitResult; + public double entityX; + public double entityY; + public double entityZ; + + private TileEntityRendererDispatcher() + { + this.renderers.put(TileEntitySign.class, new TileEntitySignRenderer()); + this.renderers.put(TileEntityMobSpawner.class, new TileEntityMobSpawnerRenderer()); + this.renderers.put(TileEntityPiston.class, new TileEntityPistonRenderer()); + this.renderers.put(TileEntityChest.class, new TileEntityChestRenderer()); + this.renderers.put(TileEntityEnderChest.class, new TileEntityEnderChestRenderer()); + this.renderers.put(TileEntityEnchantmentTable.class, new TileEntityEnchantmentTableRenderer()); + this.renderers.put(TileEntityEndPortal.class, new TileEntityEndPortalRenderer()); + this.renderers.put(TileEntityEndGateway.class, new TileEntityEndGatewayRenderer()); + this.renderers.put(TileEntityBeacon.class, new TileEntityBeaconRenderer()); + this.renderers.put(TileEntitySkull.class, new TileEntitySkullRenderer()); + this.renderers.put(TileEntityBanner.class, new TileEntityBannerRenderer()); + this.renderers.put(TileEntityStructure.class, new TileEntityStructureRenderer()); + this.renderers.put(TileEntityShulkerBox.class, new TileEntityShulkerBoxRenderer(new ModelShulker())); + this.renderers.put(TileEntityBed.class, new TileEntityBedRenderer()); + + for (TileEntitySpecialRenderer tileentityspecialrenderer : this.renderers.values()) + { + tileentityspecialrenderer.setRendererDispatcher(this); + } + } + + public TileEntitySpecialRenderer getRenderer(Class teClass) + { + TileEntitySpecialRenderer tileentityspecialrenderer = (TileEntitySpecialRenderer)this.renderers.get(teClass); + + if (tileentityspecialrenderer == null && teClass != TileEntity.class) + { + tileentityspecialrenderer = this.getRenderer((Class )teClass.getSuperclass()); + this.renderers.put(teClass, tileentityspecialrenderer); + } + + return tileentityspecialrenderer; + } + + @Nullable + public TileEntitySpecialRenderer getRenderer(@Nullable TileEntity tileEntityIn) + { + return tileEntityIn == null || tileEntityIn.isInvalid() ? null : this.getRenderer(tileEntityIn.getClass()); // Forge: fix MC-123363 + } + + public void prepare(World worldIn, TextureManager renderEngineIn, FontRenderer fontRendererIn, Entity entityIn, RayTraceResult cameraHitResultIn, float p_190056_6_) + { + if (this.world != worldIn) + { + this.setWorld(worldIn); + } + + this.renderEngine = renderEngineIn; + this.entity = entityIn; + this.fontRenderer = fontRendererIn; + this.cameraHitResult = cameraHitResultIn; + this.entityYaw = entityIn.prevRotationYaw + (entityIn.rotationYaw - entityIn.prevRotationYaw) * p_190056_6_; + this.entityPitch = entityIn.prevRotationPitch + (entityIn.rotationPitch - entityIn.prevRotationPitch) * p_190056_6_; + this.entityX = entityIn.lastTickPosX + (entityIn.posX - entityIn.lastTickPosX) * (double)p_190056_6_; + this.entityY = entityIn.lastTickPosY + (entityIn.posY - entityIn.lastTickPosY) * (double)p_190056_6_; + this.entityZ = entityIn.lastTickPosZ + (entityIn.posZ - entityIn.lastTickPosZ) * (double)p_190056_6_; + } + + public void render(TileEntity tileentityIn, float partialTicks, int destroyStage) + { + if (tileentityIn.getDistanceSq(this.entityX, this.entityY, this.entityZ) < tileentityIn.getMaxRenderDistanceSquared()) + { + if(!drawingBatch || !tileentityIn.hasFastRenderer()) + { + RenderHelper.enableStandardItemLighting(); + int i = this.world.getCombinedLight(tileentityIn.getPos(), 0); + int j = i % 65536; + int k = i / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)j, (float)k); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + BlockPos blockpos = tileentityIn.getPos(); + this.render(tileentityIn, (double)blockpos.getX() - staticPlayerX, (double)blockpos.getY() - staticPlayerY, (double)blockpos.getZ() - staticPlayerZ, partialTicks, destroyStage, 1.0F); + } + } + + /** + * Render this TileEntity at a given set of coordinates + */ + public void render(TileEntity tileEntityIn, double x, double y, double z, float partialTicks) + { + this.render(tileEntityIn, x, y, z, partialTicks, 1.0F); + } + + public void render(TileEntity p_192855_1_, double p_192855_2_, double p_192855_4_, double p_192855_6_, float p_192855_8_, float p_192855_9_) + { + this.render(p_192855_1_, p_192855_2_, p_192855_4_, p_192855_6_, p_192855_8_, -1, p_192855_9_); + } + + public void render(TileEntity tileEntityIn, double x, double y, double z, float partialTicks, int destroyStage, float p_192854_10_) + { + TileEntitySpecialRenderer tileentityspecialrenderer = this.getRenderer(tileEntityIn); + + if (tileentityspecialrenderer != null) + { + try + { + if(drawingBatch && tileEntityIn.hasFastRenderer()) + tileentityspecialrenderer.renderTileEntityFast(tileEntityIn, x, y, z, partialTicks, destroyStage, p_192854_10_, batchBuffer.getBuffer()); + else + tileentityspecialrenderer.render(tileEntityIn, x, y, z, partialTicks, destroyStage, p_192854_10_); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Rendering Block Entity"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Block Entity Details"); + tileEntityIn.addInfoToCrashReport(crashreportcategory); + throw new ReportedException(crashreport); + } + } + } + + public void setWorld(@Nullable World worldIn) + { + this.world = worldIn; + + if (worldIn == null) + { + this.entity = null; + } + } + + public FontRenderer getFontRenderer() + { + return this.fontRenderer; + } + + /* ======================================== FORGE START =====================================*/ + /** + * Buffer used for batched TESRs + */ + private net.minecraft.client.renderer.Tessellator batchBuffer = new net.minecraft.client.renderer.Tessellator(0x200000); + private boolean drawingBatch = false; + + /** + * Prepare for a batched TESR rendering. + * You probably shouldn't call this manually. + */ + public void preDrawBatch() + { + batchBuffer.getBuffer().begin(org.lwjgl.opengl.GL11.GL_QUADS, net.minecraft.client.renderer.vertex.DefaultVertexFormats.BLOCK); + drawingBatch = true; + } + + /** + * Render all TESRs batched so far. + * You probably shouldn't call this manually. + */ + public void drawBatch(int pass) + { + renderEngine.bindTexture(net.minecraft.client.renderer.texture.TextureMap.LOCATION_BLOCKS_TEXTURE); + net.minecraft.client.renderer.RenderHelper.disableStandardItemLighting(); + GlStateManager.blendFunc(org.lwjgl.opengl.GL11.GL_SRC_ALPHA, org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.enableBlend(); + GlStateManager.disableCull(); + + if (net.minecraft.client.Minecraft.isAmbientOcclusionEnabled()) + { + GlStateManager.shadeModel(org.lwjgl.opengl.GL11.GL_SMOOTH); + } + else + { + GlStateManager.shadeModel(org.lwjgl.opengl.GL11.GL_FLAT); + } + + if(pass > 0) + { + net.minecraft.util.math.Vec3d cameraPos = net.minecraft.client.renderer.ActiveRenderInfo.getCameraPosition(); + batchBuffer.getBuffer().sortVertexData((float)cameraPos.x, (float)cameraPos.y, (float)cameraPos.z); + } + batchBuffer.draw(); + + net.minecraft.client.renderer.RenderHelper.enableStandardItemLighting(); + drawingBatch = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.java new file mode 100644 index 0000000..87849e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityShulkerBoxRenderer.java @@ -0,0 +1,115 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.block.BlockShulkerBox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.model.ModelShulker; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.RenderShulker; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityShulkerBoxRenderer extends TileEntitySpecialRenderer +{ + private final ModelShulker model; + + public TileEntityShulkerBoxRenderer(ModelShulker modelIn) + { + this.model = modelIn; + } + + public void render(TileEntityShulkerBox te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + EnumFacing enumfacing = EnumFacing.UP; + + if (te.hasWorld()) + { + IBlockState iblockstate = this.getWorld().getBlockState(te.getPos()); + + if (iblockstate.getBlock() instanceof BlockShulkerBox) + { + enumfacing = (EnumFacing)iblockstate.getValue(BlockShulkerBox.FACING); + } + } + + GlStateManager.enableDepth(); + GlStateManager.depthFunc(515); + GlStateManager.depthMask(true); + GlStateManager.disableCull(); + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 4.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else + { + this.bindTexture(RenderShulker.SHULKER_ENDERGOLEM_TEXTURE[te.getColor().getMetadata()]); + } + + GlStateManager.pushMatrix(); + GlStateManager.enableRescaleNormal(); + + if (destroyStage < 0) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, alpha); + } + + GlStateManager.translate((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); + GlStateManager.scale(1.0F, -1.0F, -1.0F); + GlStateManager.translate(0.0F, 1.0F, 0.0F); + float f = 0.9995F; + GlStateManager.scale(0.9995F, 0.9995F, 0.9995F); + GlStateManager.translate(0.0F, -1.0F, 0.0F); + + switch (enumfacing) + { + case DOWN: + GlStateManager.translate(0.0F, 2.0F, 0.0F); + GlStateManager.rotate(180.0F, 1.0F, 0.0F, 0.0F); + case UP: + default: + break; + case NORTH: + GlStateManager.translate(0.0F, 1.0F, 1.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + break; + case SOUTH: + GlStateManager.translate(0.0F, 1.0F, -1.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + break; + case WEST: + GlStateManager.translate(-1.0F, 1.0F, 0.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(-90.0F, 0.0F, 0.0F, 1.0F); + break; + case EAST: + GlStateManager.translate(1.0F, 1.0F, 0.0F); + GlStateManager.rotate(90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(90.0F, 0.0F, 0.0F, 1.0F); + } + + this.model.base.render(0.0625F); + GlStateManager.translate(0.0F, -te.getProgress(partialTicks) * 0.5F, 0.0F); + GlStateManager.rotate(270.0F * te.getProgress(partialTicks), 0.0F, 1.0F, 0.0F); + this.model.lid.render(0.0625F); + GlStateManager.enableCull(); + GlStateManager.disableRescaleNormal(); + GlStateManager.popMatrix(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + if (destroyStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java new file mode 100644 index 0000000..77992eb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySignRenderer.java @@ -0,0 +1,123 @@ +package net.minecraft.client.renderer.tileentity; + +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiUtilRenderComponents; +import net.minecraft.client.model.ModelSign; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntitySignRenderer extends TileEntitySpecialRenderer +{ + private static final ResourceLocation SIGN_TEXTURE = new ResourceLocation("textures/entity/sign.png"); + /** The ModelSign instance for use in this renderer */ + private final ModelSign model = new ModelSign(); + + public void render(TileEntitySign te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + Block block = te.getBlockType(); + GlStateManager.pushMatrix(); + float f = 0.6666667F; + + if (block == Blocks.STANDING_SIGN) + { + GlStateManager.translate((float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F); + float f1 = (float)(te.getBlockMetadata() * 360) / 16.0F; + GlStateManager.rotate(-f1, 0.0F, 1.0F, 0.0F); + this.model.signStick.showModel = true; + } + else + { + int k = te.getBlockMetadata(); + float f2 = 0.0F; + + if (k == 2) + { + f2 = 180.0F; + } + + if (k == 4) + { + f2 = 90.0F; + } + + if (k == 5) + { + f2 = -90.0F; + } + + GlStateManager.translate((float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F); + GlStateManager.rotate(-f2, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(0.0F, -0.3125F, -0.4375F); + this.model.signStick.showModel = false; + } + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 2.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else + { + this.bindTexture(SIGN_TEXTURE); + } + + GlStateManager.enableRescaleNormal(); + GlStateManager.pushMatrix(); + GlStateManager.scale(0.6666667F, -0.6666667F, -0.6666667F); + this.model.renderSign(); + GlStateManager.popMatrix(); + FontRenderer fontrenderer = this.getFontRenderer(); + float f3 = 0.010416667F; + GlStateManager.translate(0.0F, 0.33333334F, 0.046666667F); + GlStateManager.scale(0.010416667F, -0.010416667F, 0.010416667F); + GlStateManager.glNormal3f(0.0F, 0.0F, -0.010416667F); + GlStateManager.depthMask(false); + int i = 0; + + if (destroyStage < 0) + { + for (int j = 0; j < te.signText.length; ++j) + { + if (te.signText[j] != null) + { + ITextComponent itextcomponent = te.signText[j]; + List list = GuiUtilRenderComponents.splitText(itextcomponent, 90, fontrenderer, false, true); + String s = list != null && !list.isEmpty() ? ((ITextComponent)list.get(0)).getFormattedText() : ""; + + if (j == te.lineBeingEdited) + { + s = "> " + s + " <"; + fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, j * 10 - te.signText.length * 5, 0); + } + else + { + fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, j * 10 - te.signText.length * 5, 0); + } + } + } + } + + GlStateManager.depthMask(true); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + + if (destroyStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.java new file mode 100644 index 0000000..84cc550 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySkullRenderer.java @@ -0,0 +1,158 @@ +package net.minecraft.client.renderer.tileentity; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import java.util.Map; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelDragonHead; +import net.minecraft.client.model.ModelHumanoidHead; +import net.minecraft.client.model.ModelSkeletonHead; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntitySkullRenderer extends TileEntitySpecialRenderer +{ + private static final ResourceLocation SKELETON_TEXTURES = new ResourceLocation("textures/entity/skeleton/skeleton.png"); + private static final ResourceLocation WITHER_SKELETON_TEXTURES = new ResourceLocation("textures/entity/skeleton/wither_skeleton.png"); + private static final ResourceLocation ZOMBIE_TEXTURES = new ResourceLocation("textures/entity/zombie/zombie.png"); + private static final ResourceLocation CREEPER_TEXTURES = new ResourceLocation("textures/entity/creeper/creeper.png"); + private static final ResourceLocation DRAGON_TEXTURES = new ResourceLocation("textures/entity/enderdragon/dragon.png"); + private final ModelDragonHead dragonHead = new ModelDragonHead(0.0F); + public static TileEntitySkullRenderer instance; + private final ModelSkeletonHead skeletonHead = new ModelSkeletonHead(0, 0, 64, 32); + private final ModelSkeletonHead humanoidHead = new ModelHumanoidHead(); + + public void render(TileEntitySkull te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + EnumFacing enumfacing = EnumFacing.getFront(te.getBlockMetadata() & 7); + float f = te.getAnimationProgress(partialTicks); + this.renderSkull((float)x, (float)y, (float)z, enumfacing, (float)(te.getSkullRotation() * 360) / 16.0F, te.getSkullType(), te.getPlayerProfile(), destroyStage, f); + } + + public void setRendererDispatcher(TileEntityRendererDispatcher rendererDispatcherIn) + { + super.setRendererDispatcher(rendererDispatcherIn); + instance = this; + } + + public void renderSkull(float x, float y, float z, EnumFacing facing, float rotationIn, int skullType, @Nullable GameProfile profile, int destroyStage, float animateTicks) + { + ModelBase modelbase = this.skeletonHead; + + if (destroyStage >= 0) + { + this.bindTexture(DESTROY_STAGES[destroyStage]); + GlStateManager.matrixMode(5890); + GlStateManager.pushMatrix(); + GlStateManager.scale(4.0F, 2.0F, 1.0F); + GlStateManager.translate(0.0625F, 0.0625F, 0.0625F); + GlStateManager.matrixMode(5888); + } + else + { + switch (skullType) + { + case 0: + default: + this.bindTexture(SKELETON_TEXTURES); + break; + case 1: + this.bindTexture(WITHER_SKELETON_TEXTURES); + break; + case 2: + this.bindTexture(ZOMBIE_TEXTURES); + modelbase = this.humanoidHead; + break; + case 3: + modelbase = this.humanoidHead; + ResourceLocation resourcelocation = DefaultPlayerSkin.getDefaultSkinLegacy(); + + if (profile != null) + { + Minecraft minecraft = Minecraft.getMinecraft(); + Map map = minecraft.getSkinManager().loadSkinFromCache(profile); + + if (map.containsKey(Type.SKIN)) + { + resourcelocation = minecraft.getSkinManager().loadSkin(map.get(Type.SKIN), Type.SKIN); + } + else + { + UUID uuid = EntityPlayer.getUUID(profile); + resourcelocation = DefaultPlayerSkin.getDefaultSkin(uuid); + } + } + + this.bindTexture(resourcelocation); + break; + case 4: + this.bindTexture(CREEPER_TEXTURES); + break; + case 5: + this.bindTexture(DRAGON_TEXTURES); + modelbase = this.dragonHead; + } + } + + GlStateManager.pushMatrix(); + GlStateManager.disableCull(); + + if (facing == EnumFacing.UP) + { + GlStateManager.translate(x + 0.5F, y, z + 0.5F); + } + else + { + switch (facing) + { + case NORTH: + GlStateManager.translate(x + 0.5F, y + 0.25F, z + 0.74F); + break; + case SOUTH: + GlStateManager.translate(x + 0.5F, y + 0.25F, z + 0.26F); + rotationIn = 180.0F; + break; + case WEST: + GlStateManager.translate(x + 0.74F, y + 0.25F, z + 0.5F); + rotationIn = 270.0F; + break; + case EAST: + default: + GlStateManager.translate(x + 0.26F, y + 0.25F, z + 0.5F); + rotationIn = 90.0F; + } + } + + float f = 0.0625F; + GlStateManager.enableRescaleNormal(); + GlStateManager.scale(-1.0F, -1.0F, 1.0F); + GlStateManager.enableAlpha(); + + if (skullType == 3) + { + GlStateManager.enableBlendProfile(GlStateManager.Profile.PLAYER_SKIN); + } + + modelbase.render((Entity)null, animateTicks, 0.0F, 0.0F, rotationIn, 0.0F, 0.0625F); + GlStateManager.popMatrix(); + + if (destroyStage >= 0) + { + GlStateManager.matrixMode(5890); + GlStateManager.popMatrix(); + GlStateManager.matrixMode(5888); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.java new file mode 100644 index 0000000..42b9937 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntitySpecialRenderer.java @@ -0,0 +1,99 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class TileEntitySpecialRenderer +{ + protected static final ResourceLocation[] DESTROY_STAGES = new ResourceLocation[] {new ResourceLocation("textures/blocks/destroy_stage_0.png"), new ResourceLocation("textures/blocks/destroy_stage_1.png"), new ResourceLocation("textures/blocks/destroy_stage_2.png"), new ResourceLocation("textures/blocks/destroy_stage_3.png"), new ResourceLocation("textures/blocks/destroy_stage_4.png"), new ResourceLocation("textures/blocks/destroy_stage_5.png"), new ResourceLocation("textures/blocks/destroy_stage_6.png"), new ResourceLocation("textures/blocks/destroy_stage_7.png"), new ResourceLocation("textures/blocks/destroy_stage_8.png"), new ResourceLocation("textures/blocks/destroy_stage_9.png")}; + protected TileEntityRendererDispatcher rendererDispatcher; + + public void render(T te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + ITextComponent itextcomponent = te.getDisplayName(); + + if (itextcomponent != null && this.rendererDispatcher.cameraHitResult != null && te.getPos().equals(this.rendererDispatcher.cameraHitResult.getBlockPos())) + { + this.setLightmapDisabled(true); + this.drawNameplate(te, itextcomponent.getFormattedText(), x, y, z, 12); + this.setLightmapDisabled(false); + } + } + + /** + * Sets whether to use the light map when rendering. Disabling this allows rendering ignoring lighting, which can be + * useful for floating text, e.g. + */ + protected void setLightmapDisabled(boolean disabled) + { + GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit); + + if (disabled) + { + GlStateManager.disableTexture2D(); + } + else + { + GlStateManager.enableTexture2D(); + } + + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + protected void bindTexture(ResourceLocation location) + { + TextureManager texturemanager = this.rendererDispatcher.renderEngine; + + if (texturemanager != null) + { + texturemanager.bindTexture(location); + } + } + + protected World getWorld() + { + return this.rendererDispatcher.world; + } + + public void setRendererDispatcher(TileEntityRendererDispatcher rendererDispatcherIn) + { + this.rendererDispatcher = rendererDispatcherIn; + } + + public FontRenderer getFontRenderer() + { + return this.rendererDispatcher.getFontRenderer(); + } + + public boolean isGlobalRenderer(T te) + { + return false; + } + + public void renderTileEntityFast(T te, double x, double y, double z, float partialTicks, int destroyStage, float partial, net.minecraft.client.renderer.BufferBuilder buffer) {} + + protected void drawNameplate(T te, String str, double x, double y, double z, int maxDistance) + { + Entity entity = this.rendererDispatcher.entity; + double d0 = te.getDistanceSq(entity.posX, entity.posY, entity.posZ); + + if (d0 <= (double)(maxDistance * maxDistance)) + { + float f = this.rendererDispatcher.entityYaw; + float f1 = this.rendererDispatcher.entityPitch; + boolean flag = false; + EntityRenderer.drawNameplate(this.getFontRenderer(), str, (float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F, 0, f, f1, false, false); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.java new file mode 100644 index 0000000..fd0f2d5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/TileEntityStructureRenderer.java @@ -0,0 +1,194 @@ +package net.minecraft.client.renderer.tileentity; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderGlobal; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TileEntityStructureRenderer extends TileEntitySpecialRenderer +{ + public void render(TileEntityStructure te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) + { + if (Minecraft.getMinecraft().player.canUseCommandBlock() || Minecraft.getMinecraft().player.isSpectator()) + { + super.render(te, x, y, z, partialTicks, destroyStage, alpha); + BlockPos blockpos = te.getPosition(); + BlockPos blockpos1 = te.getStructureSize(); + + if (blockpos1.getX() >= 1 && blockpos1.getY() >= 1 && blockpos1.getZ() >= 1) + { + if (te.getMode() == TileEntityStructure.Mode.SAVE || te.getMode() == TileEntityStructure.Mode.LOAD) + { + double d0 = 0.01D; + double d1 = (double)blockpos.getX(); + double d2 = (double)blockpos.getZ(); + double d6 = y + (double)blockpos.getY() - 0.01D; + double d9 = d6 + (double)blockpos1.getY() + 0.02D; + double d3; + double d4; + + switch (te.getMirror()) + { + case LEFT_RIGHT: + d3 = (double)blockpos1.getX() + 0.02D; + d4 = -((double)blockpos1.getZ() + 0.02D); + break; + case FRONT_BACK: + d3 = -((double)blockpos1.getX() + 0.02D); + d4 = (double)blockpos1.getZ() + 0.02D; + break; + default: + d3 = (double)blockpos1.getX() + 0.02D; + d4 = (double)blockpos1.getZ() + 0.02D; + } + + double d5; + double d7; + double d8; + double d10; + + switch (te.getRotation()) + { + case CLOCKWISE_90: + d5 = x + (d4 < 0.0D ? d1 - 0.01D : d1 + 1.0D + 0.01D); + d7 = z + (d3 < 0.0D ? d2 + 1.0D + 0.01D : d2 - 0.01D); + d8 = d5 - d4; + d10 = d7 + d3; + break; + case CLOCKWISE_180: + d5 = x + (d3 < 0.0D ? d1 - 0.01D : d1 + 1.0D + 0.01D); + d7 = z + (d4 < 0.0D ? d2 - 0.01D : d2 + 1.0D + 0.01D); + d8 = d5 - d3; + d10 = d7 - d4; + break; + case COUNTERCLOCKWISE_90: + d5 = x + (d4 < 0.0D ? d1 + 1.0D + 0.01D : d1 - 0.01D); + d7 = z + (d3 < 0.0D ? d2 - 0.01D : d2 + 1.0D + 0.01D); + d8 = d5 + d4; + d10 = d7 - d3; + break; + default: + d5 = x + (d3 < 0.0D ? d1 + 1.0D + 0.01D : d1 - 0.01D); + d7 = z + (d4 < 0.0D ? d2 + 1.0D + 0.01D : d2 - 0.01D); + d8 = d5 + d3; + d10 = d7 + d4; + } + + int i = 255; + int j = 223; + int k = 127; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + GlStateManager.disableFog(); + GlStateManager.disableLighting(); + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); + this.setLightmapDisabled(true); + + if (te.getMode() == TileEntityStructure.Mode.SAVE || te.showsBoundingBox()) + { + this.renderBox(tessellator, bufferbuilder, d5, d6, d7, d8, d9, d10, 255, 223, 127); + } + + if (te.getMode() == TileEntityStructure.Mode.SAVE && te.showsAir()) + { + this.renderInvisibleBlocks(te, x, y, z, blockpos, tessellator, bufferbuilder, true); + this.renderInvisibleBlocks(te, x, y, z, blockpos, tessellator, bufferbuilder, false); + } + + this.setLightmapDisabled(false); + GlStateManager.glLineWidth(1.0F); + GlStateManager.enableLighting(); + GlStateManager.enableTexture2D(); + GlStateManager.enableDepth(); + GlStateManager.depthMask(true); + GlStateManager.enableFog(); + } + } + } + } + + private void renderInvisibleBlocks(TileEntityStructure p_190054_1_, double p_190054_2_, double p_190054_4_, double p_190054_6_, BlockPos p_190054_8_, Tessellator p_190054_9_, BufferBuilder p_190054_10_, boolean p_190054_11_) + { + GlStateManager.glLineWidth(p_190054_11_ ? 3.0F : 1.0F); + p_190054_10_.begin(3, DefaultVertexFormats.POSITION_COLOR); + World world = p_190054_1_.getWorld(); + BlockPos blockpos = p_190054_1_.getPos(); + BlockPos blockpos1 = blockpos.add(p_190054_8_); + + for (BlockPos blockpos2 : BlockPos.getAllInBox(blockpos1, blockpos1.add(p_190054_1_.getStructureSize()).add(-1, -1, -1))) + { + IBlockState iblockstate = world.getBlockState(blockpos2); + boolean flag = iblockstate == Blocks.AIR.getDefaultState(); + boolean flag1 = iblockstate == Blocks.STRUCTURE_VOID.getDefaultState(); + + if (flag || flag1) + { + float f = flag ? 0.05F : 0.0F; + double d0 = (double)((float)(blockpos2.getX() - blockpos.getX()) + 0.45F) + p_190054_2_ - (double)f; + double d1 = (double)((float)(blockpos2.getY() - blockpos.getY()) + 0.45F) + p_190054_4_ - (double)f; + double d2 = (double)((float)(blockpos2.getZ() - blockpos.getZ()) + 0.45F) + p_190054_6_ - (double)f; + double d3 = (double)((float)(blockpos2.getX() - blockpos.getX()) + 0.55F) + p_190054_2_ + (double)f; + double d4 = (double)((float)(blockpos2.getY() - blockpos.getY()) + 0.55F) + p_190054_4_ + (double)f; + double d5 = (double)((float)(blockpos2.getZ() - blockpos.getZ()) + 0.55F) + p_190054_6_ + (double)f; + + if (p_190054_11_) + { + RenderGlobal.drawBoundingBox(p_190054_10_, d0, d1, d2, d3, d4, d5, 0.0F, 0.0F, 0.0F, 1.0F); + } + else if (flag) + { + RenderGlobal.drawBoundingBox(p_190054_10_, d0, d1, d2, d3, d4, d5, 0.5F, 0.5F, 1.0F, 1.0F); + } + else + { + RenderGlobal.drawBoundingBox(p_190054_10_, d0, d1, d2, d3, d4, d5, 1.0F, 0.25F, 0.25F, 1.0F); + } + } + } + + p_190054_9_.draw(); + } + + private void renderBox(Tessellator p_190055_1_, BufferBuilder p_190055_2_, double p_190055_3_, double p_190055_5_, double p_190055_7_, double p_190055_9_, double p_190055_11_, double p_190055_13_, int p_190055_15_, int p_190055_16_, int p_190055_17_) + { + GlStateManager.glLineWidth(2.0F); + p_190055_2_.begin(3, DefaultVertexFormats.POSITION_COLOR); + p_190055_2_.pos(p_190055_3_, p_190055_5_, p_190055_7_).color((float)p_190055_16_, (float)p_190055_16_, (float)p_190055_16_, 0.0F).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_5_, p_190055_7_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_5_, p_190055_7_).color(p_190055_16_, p_190055_17_, p_190055_17_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_5_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_5_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_5_, p_190055_7_).color(p_190055_17_, p_190055_17_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_11_, p_190055_7_).color(p_190055_17_, p_190055_16_, p_190055_17_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_11_, p_190055_7_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_11_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_11_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_11_, p_190055_7_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_11_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_3_, p_190055_5_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_5_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_11_, p_190055_13_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_11_, p_190055_7_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_5_, p_190055_7_).color(p_190055_16_, p_190055_16_, p_190055_16_, p_190055_15_).endVertex(); + p_190055_2_.pos(p_190055_9_, p_190055_5_, p_190055_7_).color((float)p_190055_16_, (float)p_190055_16_, (float)p_190055_16_, 0.0F).endVertex(); + p_190055_1_.draw(); + GlStateManager.glLineWidth(1.0F); + } + + public boolean isGlobalRenderer(TileEntityStructure te) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/package-info.java new file mode 100644 index 0000000..1bc15a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/tileentity/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.tileentity; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java new file mode 100644 index 0000000..9e9f1b4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/DefaultVertexFormats.java @@ -0,0 +1,72 @@ +package net.minecraft.client.renderer.vertex; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DefaultVertexFormats +{ + public static final VertexFormat BLOCK = new VertexFormat(); + public static final VertexFormat ITEM = new VertexFormat(); + public static final VertexFormat OLDMODEL_POSITION_TEX_NORMAL = new VertexFormat(); + public static final VertexFormat PARTICLE_POSITION_TEX_COLOR_LMAP = new VertexFormat(); + public static final VertexFormat POSITION = new VertexFormat(); + public static final VertexFormat POSITION_COLOR = new VertexFormat(); + public static final VertexFormat POSITION_TEX = new VertexFormat(); + public static final VertexFormat POSITION_NORMAL = new VertexFormat(); + public static final VertexFormat POSITION_TEX_COLOR = new VertexFormat(); + public static final VertexFormat POSITION_TEX_NORMAL = new VertexFormat(); + public static final VertexFormat POSITION_TEX_LMAP_COLOR = new VertexFormat(); + public static final VertexFormat POSITION_TEX_COLOR_NORMAL = new VertexFormat(); + public static final VertexFormatElement POSITION_3F = new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.POSITION, 3); + public static final VertexFormatElement COLOR_4UB = new VertexFormatElement(0, VertexFormatElement.EnumType.UBYTE, VertexFormatElement.EnumUsage.COLOR, 4); + public static final VertexFormatElement TEX_2F = new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.UV, 2); + public static final VertexFormatElement TEX_2S = new VertexFormatElement(1, VertexFormatElement.EnumType.SHORT, VertexFormatElement.EnumUsage.UV, 2); + public static final VertexFormatElement NORMAL_3B = new VertexFormatElement(0, VertexFormatElement.EnumType.BYTE, VertexFormatElement.EnumUsage.NORMAL, 3); + public static final VertexFormatElement PADDING_1B = new VertexFormatElement(0, VertexFormatElement.EnumType.BYTE, VertexFormatElement.EnumUsage.PADDING, 1); + + static + { + BLOCK.addElement(POSITION_3F); + BLOCK.addElement(COLOR_4UB); + BLOCK.addElement(TEX_2F); + BLOCK.addElement(TEX_2S); + ITEM.addElement(POSITION_3F); + ITEM.addElement(COLOR_4UB); + ITEM.addElement(TEX_2F); + ITEM.addElement(NORMAL_3B); + ITEM.addElement(PADDING_1B); + OLDMODEL_POSITION_TEX_NORMAL.addElement(POSITION_3F); + OLDMODEL_POSITION_TEX_NORMAL.addElement(TEX_2F); + OLDMODEL_POSITION_TEX_NORMAL.addElement(NORMAL_3B); + OLDMODEL_POSITION_TEX_NORMAL.addElement(PADDING_1B); + PARTICLE_POSITION_TEX_COLOR_LMAP.addElement(POSITION_3F); + PARTICLE_POSITION_TEX_COLOR_LMAP.addElement(TEX_2F); + PARTICLE_POSITION_TEX_COLOR_LMAP.addElement(COLOR_4UB); + PARTICLE_POSITION_TEX_COLOR_LMAP.addElement(TEX_2S); + POSITION.addElement(POSITION_3F); + POSITION_COLOR.addElement(POSITION_3F); + POSITION_COLOR.addElement(COLOR_4UB); + POSITION_TEX.addElement(POSITION_3F); + POSITION_TEX.addElement(TEX_2F); + POSITION_NORMAL.addElement(POSITION_3F); + POSITION_NORMAL.addElement(NORMAL_3B); + POSITION_NORMAL.addElement(PADDING_1B); + POSITION_TEX_COLOR.addElement(POSITION_3F); + POSITION_TEX_COLOR.addElement(TEX_2F); + POSITION_TEX_COLOR.addElement(COLOR_4UB); + POSITION_TEX_NORMAL.addElement(POSITION_3F); + POSITION_TEX_NORMAL.addElement(TEX_2F); + POSITION_TEX_NORMAL.addElement(NORMAL_3B); + POSITION_TEX_NORMAL.addElement(PADDING_1B); + POSITION_TEX_LMAP_COLOR.addElement(POSITION_3F); + POSITION_TEX_LMAP_COLOR.addElement(TEX_2F); + POSITION_TEX_LMAP_COLOR.addElement(TEX_2S); + POSITION_TEX_LMAP_COLOR.addElement(COLOR_4UB); + POSITION_TEX_COLOR_NORMAL.addElement(POSITION_3F); + POSITION_TEX_COLOR_NORMAL.addElement(TEX_2F); + POSITION_TEX_COLOR_NORMAL.addElement(COLOR_4UB); + POSITION_TEX_COLOR_NORMAL.addElement(NORMAL_3B); + POSITION_TEX_COLOR_NORMAL.addElement(PADDING_1B); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexBuffer.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexBuffer.java new file mode 100644 index 0000000..bd3316c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexBuffer.java @@ -0,0 +1,53 @@ +package net.minecraft.client.renderer.vertex; + +import java.nio.ByteBuffer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class VertexBuffer +{ + private int glBufferId; + private final VertexFormat vertexFormat; + private int count; + + public VertexBuffer(VertexFormat vertexFormatIn) + { + this.vertexFormat = vertexFormatIn; + this.glBufferId = OpenGlHelper.glGenBuffers(); + } + + public void bindBuffer() + { + OpenGlHelper.glBindBuffer(OpenGlHelper.GL_ARRAY_BUFFER, this.glBufferId); + } + + public void bufferData(ByteBuffer data) + { + this.bindBuffer(); + OpenGlHelper.glBufferData(OpenGlHelper.GL_ARRAY_BUFFER, data, 35044); + this.unbindBuffer(); + this.count = data.limit() / this.vertexFormat.getNextOffset(); + } + + public void drawArrays(int mode) + { + GlStateManager.glDrawArrays(mode, 0, this.count); + } + + public void unbindBuffer() + { + OpenGlHelper.glBindBuffer(OpenGlHelper.GL_ARRAY_BUFFER, 0); + } + + public void deleteGlBuffers() + { + if (this.glBufferId >= 0) + { + OpenGlHelper.glDeleteBuffers(this.glBufferId); + this.glBufferId = -1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexFormat.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexFormat.java new file mode 100644 index 0000000..5969c83 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexFormat.java @@ -0,0 +1,218 @@ +package net.minecraft.client.renderer.vertex; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class VertexFormat +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final List elements; + private final List offsets; + /** The next available offset in this vertex format */ + private int nextOffset; + private int colorElementOffset; + private final List uvOffsetsById; + private int normalElementOffset; + private int hashCode; + + public VertexFormat(VertexFormat vertexFormatIn) + { + this(); + + for (int i = 0; i < vertexFormatIn.getElementCount(); ++i) + { + this.addElement(vertexFormatIn.getElement(i)); + } + + this.nextOffset = vertexFormatIn.getNextOffset(); + } + + public VertexFormat() + { + this.elements = Lists.newArrayList(); + this.offsets = Lists.newArrayList(); + this.colorElementOffset = -1; + this.uvOffsetsById = Lists.newArrayList(); + this.normalElementOffset = -1; + } + + public void clear() + { + this.elements.clear(); + this.offsets.clear(); + this.colorElementOffset = -1; + this.uvOffsetsById.clear(); + this.normalElementOffset = -1; + this.nextOffset = 0; + this.hashCode = 0; + } + + @SuppressWarnings("incomplete-switch") + public VertexFormat addElement(VertexFormatElement element) + { + if (element.isPositionElement() && this.hasPosition()) + { + LOGGER.warn("VertexFormat error: Trying to add a position VertexFormatElement when one already exists, ignoring."); + return this; + } + else + { + this.elements.add(element); + this.offsets.add(Integer.valueOf(this.nextOffset)); + + switch (element.getUsage()) + { + case NORMAL: + this.normalElementOffset = this.nextOffset; + break; + case COLOR: + this.colorElementOffset = this.nextOffset; + break; + case UV: + this.uvOffsetsById.add(element.getIndex(), Integer.valueOf(this.nextOffset)); + } + + this.nextOffset += element.getSize(); + this.hashCode = 0; + return this; + } + } + + public boolean hasNormal() + { + return this.normalElementOffset >= 0; + } + + public int getNormalOffset() + { + return this.normalElementOffset; + } + + public boolean hasColor() + { + return this.colorElementOffset >= 0; + } + + public int getColorOffset() + { + return this.colorElementOffset; + } + + public boolean hasUvOffset(int id) + { + return this.uvOffsetsById.size() - 1 >= id; + } + + public int getUvOffsetById(int id) + { + return ((Integer)this.uvOffsetsById.get(id)).intValue(); + } + + public String toString() + { + String s = "format: " + this.elements.size() + " elements: "; + + for (int i = 0; i < this.elements.size(); ++i) + { + s = s + ((VertexFormatElement)this.elements.get(i)).toString(); + + if (i != this.elements.size() - 1) + { + s = s + " "; + } + } + + return s; + } + + private boolean hasPosition() + { + int i = 0; + + for (int j = this.elements.size(); i < j; ++i) + { + VertexFormatElement vertexformatelement = this.elements.get(i); + + if (vertexformatelement.isPositionElement()) + { + return true; + } + } + + return false; + } + + public int getIntegerSize() + { + return this.getNextOffset() / 4; + } + + public int getNextOffset() + { + return this.nextOffset; + } + + public List getElements() + { + return this.elements; + } + + public int getElementCount() + { + return this.elements.size(); + } + + public VertexFormatElement getElement(int index) + { + return this.elements.get(index); + } + + public int getOffset(int index) + { + return ((Integer)this.offsets.get(index)).intValue(); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + VertexFormat vertexformat = (VertexFormat)p_equals_1_; + + if (this.nextOffset != vertexformat.nextOffset) + { + return false; + } + else if (!this.elements.equals(vertexformat.elements)) + { + return false; + } + else + { + return this.offsets.equals(vertexformat.offsets); + } + } + else + { + return false; + } + } + + public int hashCode() + { + if (this.hashCode != 0) return this.hashCode; + int i = this.elements.hashCode(); + i = 31 * i + this.offsets.hashCode(); + i = 31 * i + this.nextOffset; + this.hashCode = i; + return i; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexFormatElement.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexFormatElement.java new file mode 100644 index 0000000..0242d72 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/VertexFormatElement.java @@ -0,0 +1,184 @@ +package net.minecraft.client.renderer.vertex; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class VertexFormatElement +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final VertexFormatElement.EnumType type; + private final VertexFormatElement.EnumUsage usage; + private final int index; + private final int elementCount; + + public VertexFormatElement(int indexIn, VertexFormatElement.EnumType typeIn, VertexFormatElement.EnumUsage usageIn, int count) + { + if (this.isFirstOrUV(indexIn, usageIn)) + { + this.usage = usageIn; + } + else + { + LOGGER.warn("Multiple vertex elements of the same type other than UVs are not supported. Forcing type to UV."); + this.usage = VertexFormatElement.EnumUsage.UV; + } + + this.type = typeIn; + this.index = indexIn; + this.elementCount = count; + } + + private final boolean isFirstOrUV(int p_177372_1_, VertexFormatElement.EnumUsage p_177372_2_) + { + return p_177372_1_ == 0 || p_177372_2_ == VertexFormatElement.EnumUsage.UV; + } + + public final VertexFormatElement.EnumType getType() + { + return this.type; + } + + public final VertexFormatElement.EnumUsage getUsage() + { + return this.usage; + } + + public final int getElementCount() + { + return this.elementCount; + } + + public final int getIndex() + { + return this.index; + } + + public String toString() + { + return this.elementCount + "," + this.usage.getDisplayName() + "," + this.type.getDisplayName(); + } + + public final int getSize() + { + return this.type.getSize() * this.elementCount; + } + + public final boolean isPositionElement() + { + return this.usage == VertexFormatElement.EnumUsage.POSITION; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + VertexFormatElement vertexformatelement = (VertexFormatElement)p_equals_1_; + + if (this.elementCount != vertexformatelement.elementCount) + { + return false; + } + else if (this.index != vertexformatelement.index) + { + return false; + } + else if (this.type != vertexformatelement.type) + { + return false; + } + else + { + return this.usage == vertexformatelement.usage; + } + } + else + { + return false; + } + } + + public int hashCode() + { + int i = this.type.hashCode(); + i = 31 * i + this.usage.hashCode(); + i = 31 * i + this.index; + i = 31 * i + this.elementCount; + return i; + } + + @SideOnly(Side.CLIENT) + public static enum EnumType + { + FLOAT(4, "Float", 5126), + UBYTE(1, "Unsigned Byte", 5121), + BYTE(1, "Byte", 5120), + USHORT(2, "Unsigned Short", 5123), + SHORT(2, "Short", 5122), + UINT(4, "Unsigned Int", 5125), + INT(4, "Int", 5124); + + private final int size; + private final String displayName; + private final int glConstant; + + private EnumType(int sizeIn, String displayNameIn, int glConstantIn) + { + this.size = sizeIn; + this.displayName = displayNameIn; + this.glConstant = glConstantIn; + } + + public int getSize() + { + return this.size; + } + + public String getDisplayName() + { + return this.displayName; + } + + public int getGlConstant() + { + return this.glConstant; + } + } + + @SideOnly(Side.CLIENT) + public static enum EnumUsage + { + POSITION("Position"), + NORMAL("Normal"), + COLOR("Vertex Color"), + UV("UV"), + // As of 1.8.8 - unused in vanilla; use GENERIC for now + @Deprecated + MATRIX("Bone Matrix"), + @Deprecated + BLEND_WEIGHT("Blend Weight"), + PADDING("Padding"), + GENERIC("Generic"); + + public void preDraw(VertexFormat format, int element, int stride, java.nio.ByteBuffer buffer) { net.minecraftforge.client.ForgeHooksClient.preDraw(this, format, element, stride, buffer); } + public void postDraw(VertexFormat format, int element, int stride, java.nio.ByteBuffer buffer) { net.minecraftforge.client.ForgeHooksClient.postDraw(this, format, element, stride, buffer); } + + private final String displayName; + + private EnumUsage(String displayNameIn) + { + this.displayName = displayNameIn; + } + + public String getDisplayName() + { + return this.displayName; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/package-info.java new file mode 100644 index 0000000..f80b2b6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/renderer/vertex/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.renderer.vertex; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/AbstractResourcePack.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/AbstractResourcePack.java new file mode 100644 index 0000000..7d5eb40 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/AbstractResourcePack.java @@ -0,0 +1,100 @@ +package net.minecraft.client.resources; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public abstract class AbstractResourcePack implements IResourcePack +{ + private static final Logger LOGGER = LogManager.getLogger(); + protected final File resourcePackFile; + + public AbstractResourcePack(File resourcePackFileIn) + { + this.resourcePackFile = resourcePackFileIn; + } + + private static String locationToName(ResourceLocation location) + { + return String.format("%s/%s/%s", "assets", location.getResourceDomain(), location.getResourcePath()); + } + + protected static String getRelativeName(File p_110595_0_, File p_110595_1_) + { + return p_110595_0_.toURI().relativize(p_110595_1_.toURI()).getPath(); + } + + public InputStream getInputStream(ResourceLocation location) throws IOException + { + return this.getInputStreamByName(locationToName(location)); + } + + public boolean resourceExists(ResourceLocation location) + { + return this.hasResourceName(locationToName(location)); + } + + protected abstract InputStream getInputStreamByName(String name) throws IOException; + + protected abstract boolean hasResourceName(String name); + + protected void logNameNotLowercase(String name) + { + LOGGER.warn("ResourcePack: ignored non-lowercase namespace: {} in {}", name, this.resourcePackFile); + } + + public T getPackMetadata(MetadataSerializer metadataSerializer, String metadataSectionName) throws IOException + { + return (T)readMetadata(metadataSerializer, this.getInputStreamByName("pack.mcmeta"), metadataSectionName); + } + + static T readMetadata(MetadataSerializer metadataSerializer, InputStream p_110596_1_, String sectionName) + { + JsonObject jsonobject = null; + BufferedReader bufferedreader = null; + + try + { + bufferedreader = new BufferedReader(new InputStreamReader(p_110596_1_, StandardCharsets.UTF_8)); + jsonobject = (new JsonParser()).parse(bufferedreader).getAsJsonObject(); + } + catch (RuntimeException runtimeexception) + { + throw new JsonParseException(runtimeexception); + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + + return (T)metadataSerializer.parseMetadataSection(sectionName, jsonobject); + } + + public BufferedImage getPackImage() throws IOException + { + return TextureUtil.readBufferedImage(this.getInputStreamByName("pack.png")); + } + + public String getPackName() + { + return this.resourcePackFile.getName(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/DefaultPlayerSkin.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/DefaultPlayerSkin.java new file mode 100644 index 0000000..fb11788 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/DefaultPlayerSkin.java @@ -0,0 +1,47 @@ +package net.minecraft.client.resources; + +import java.util.UUID; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DefaultPlayerSkin +{ + /** The default skin for the Steve model. */ + private static final ResourceLocation TEXTURE_STEVE = new ResourceLocation("textures/entity/steve.png"); + /** The default skin for the Alex model. */ + private static final ResourceLocation TEXTURE_ALEX = new ResourceLocation("textures/entity/alex.png"); + + /** + * Returns the default skind for versions prior to 1.8, which is always the Steve texture. + */ + public static ResourceLocation getDefaultSkinLegacy() + { + return TEXTURE_STEVE; + } + + /** + * Retrieves the default skin for this player. Depending on the model used this will be Alex or Steve. + */ + public static ResourceLocation getDefaultSkin(UUID playerUUID) + { + return isSlimSkin(playerUUID) ? TEXTURE_ALEX : TEXTURE_STEVE; + } + + /** + * Retrieves the type of skin that a player is using. The Alex model is slim while the Steve model is default. + */ + public static String getSkinType(UUID playerUUID) + { + return isSlimSkin(playerUUID) ? "slim" : "default"; + } + + /** + * Checks if a players skin model is slim or the default. The Alex model is slime while the Steve model is default. + */ + private static boolean isSlimSkin(UUID playerUUID) + { + return (playerUUID.hashCode() & 1) == 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/DefaultResourcePack.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/DefaultResourcePack.java new file mode 100644 index 0000000..0d94d30 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/DefaultResourcePack.java @@ -0,0 +1,114 @@ +package net.minecraft.client.resources; + +import com.google.common.collect.ImmutableSet; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DefaultResourcePack implements IResourcePack +{ + public static final Set DEFAULT_RESOURCE_DOMAINS = ImmutableSet.of("minecraft", "realms"); + private final ResourceIndex resourceIndex; + + public DefaultResourcePack(ResourceIndex resourceIndexIn) + { + this.resourceIndex = resourceIndexIn; + } + + public InputStream getInputStream(ResourceLocation location) throws IOException + { + InputStream inputstream = this.getInputStreamAssets(location); + + if (inputstream != null) + { + return inputstream; + } + else + { + InputStream inputstream1 = this.getResourceStream(location); + + if (inputstream1 != null) + { + return inputstream1; + } + else + { + throw new FileNotFoundException(location.getResourcePath()); + } + } + } + + @Nullable + public InputStream getInputStreamAssets(ResourceLocation location) throws IOException, FileNotFoundException + { + File file1 = this.resourceIndex.getFile(location); + return file1 != null && file1.isFile() ? new FileInputStream(file1) : null; + } + + @Nullable + private InputStream getResourceStream(ResourceLocation location) + { + String s = "/assets/" + location.getResourceDomain() + "/" + location.getResourcePath(); + + try + { + URL url = DefaultResourcePack.class.getResource(s); + return url != null && FolderResourcePack.validatePath(new File(url.getFile()), s) ? DefaultResourcePack.class.getResourceAsStream(s) : null; + } + catch (IOException var4) + { + return DefaultResourcePack.class.getResourceAsStream(s); + } + } + + public boolean resourceExists(ResourceLocation location) + { + return this.getResourceStream(location) != null || this.resourceIndex.isFileExisting(location); + } + + public Set getResourceDomains() + { + return DEFAULT_RESOURCE_DOMAINS; + } + + @Nullable + public T getPackMetadata(MetadataSerializer metadataSerializer, String metadataSectionName) throws IOException + { + try + { + InputStream inputstream = new FileInputStream(this.resourceIndex.getPackMcmeta()); + return (T)AbstractResourcePack.readMetadata(metadataSerializer, inputstream, metadataSectionName); + } + catch (RuntimeException var4) + { + return (T)null; + } + catch (FileNotFoundException var5) + { + return (T)null; + } + } + + public BufferedImage getPackImage() throws IOException + { + return TextureUtil.readBufferedImage(DefaultResourcePack.class.getResourceAsStream("/" + (new ResourceLocation("pack.png")).getResourcePath())); + } + + public String getPackName() + { + return "Default"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/FallbackResourceManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FallbackResourceManager.java new file mode 100644 index 0000000..0b7d45b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FallbackResourceManager.java @@ -0,0 +1,153 @@ +package net.minecraft.client.resources; + +import com.google.common.collect.Lists; +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class FallbackResourceManager implements IResourceManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + protected final List resourcePacks = Lists.newArrayList(); + private final MetadataSerializer frmMetadataSerializer; + + public FallbackResourceManager(MetadataSerializer frmMetadataSerializerIn) + { + this.frmMetadataSerializer = frmMetadataSerializerIn; + } + + public void addResourcePack(IResourcePack resourcePack) + { + this.resourcePacks.add(resourcePack); + } + + public Set getResourceDomains() + { + return Collections.emptySet(); + } + + public IResource getResource(ResourceLocation location) throws IOException + { + this.checkResourcePath(location); + IResourcePack iresourcepack = null; + ResourceLocation resourcelocation = getLocationMcmeta(location); + + for (int i = this.resourcePacks.size() - 1; i >= 0; --i) + { + IResourcePack iresourcepack1 = this.resourcePacks.get(i); + + if (iresourcepack == null && iresourcepack1.resourceExists(resourcelocation)) + { + iresourcepack = iresourcepack1; + } + + if (iresourcepack1.resourceExists(location)) + { + InputStream inputstream = null; + + if (iresourcepack != null) + { + inputstream = this.getInputStream(resourcelocation, iresourcepack); + } + + return new SimpleResource(iresourcepack1.getPackName(), location, this.getInputStream(location, iresourcepack1), inputstream, this.frmMetadataSerializer); + } + } + + throw new FileNotFoundException(location.toString()); + } + + @SuppressWarnings("resource") + protected InputStream getInputStream(ResourceLocation location, IResourcePack resourcePack) throws IOException + { + InputStream inputstream = resourcePack.getInputStream(location); + return (InputStream)(LOGGER.isDebugEnabled() ? new FallbackResourceManager.InputStreamLeakedResourceLogger(inputstream, location, resourcePack.getPackName()) : inputstream); + } + + private void checkResourcePath(ResourceLocation p_188552_1_) throws IOException + { + if (p_188552_1_.getResourcePath().contains("..")) + { + throw new IOException("Invalid relative path to resource: " + p_188552_1_); + } + } + + public List getAllResources(ResourceLocation location) throws IOException + { + this.checkResourcePath(location); + List list = Lists.newArrayList(); + ResourceLocation resourcelocation = getLocationMcmeta(location); + + for (IResourcePack iresourcepack : this.resourcePacks) + { + if (iresourcepack.resourceExists(location)) + { + InputStream inputstream = iresourcepack.resourceExists(resourcelocation) ? this.getInputStream(resourcelocation, iresourcepack) : null; + list.add(new SimpleResource(iresourcepack.getPackName(), location, this.getInputStream(location, iresourcepack), inputstream, this.frmMetadataSerializer)); + } + } + + if (list.isEmpty()) + { + throw new FileNotFoundException(location.toString()); + } + else + { + return list; + } + } + + static ResourceLocation getLocationMcmeta(ResourceLocation location) + { + return new ResourceLocation(location.getResourceDomain(), location.getResourcePath() + ".mcmeta"); + } + + @SideOnly(Side.CLIENT) + static class InputStreamLeakedResourceLogger extends InputStream + { + private final InputStream inputStream; + private final String message; + private boolean isClosed; + + public InputStreamLeakedResourceLogger(InputStream p_i46093_1_, ResourceLocation location, String resourcePack) + { + this.inputStream = p_i46093_1_; + ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(); + (new Exception()).printStackTrace(new PrintStream(bytearrayoutputstream)); + this.message = "Leaked resource: '" + location + "' loaded from pack: '" + resourcePack + "'\n" + bytearrayoutputstream; + } + + public void close() throws IOException + { + this.inputStream.close(); + this.isClosed = true; + } + + protected void finalize() throws Throwable + { + if (!this.isClosed) + { + FallbackResourceManager.LOGGER.warn(this.message); + } + + super.finalize(); + } + + public int read() throws IOException + { + return this.inputStream.read(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/FileResourcePack.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FileResourcePack.java new file mode 100644 index 0000000..5920b4e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FileResourcePack.java @@ -0,0 +1,125 @@ +package net.minecraft.client.resources; + +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.Set; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FileResourcePack extends AbstractResourcePack implements Closeable +{ + public static final Splitter ENTRY_NAME_SPLITTER = Splitter.on('/').omitEmptyStrings().limit(3); + private ZipFile resourcePackZipFile; + + public FileResourcePack(File resourcePackFileIn) + { + super(resourcePackFileIn); + } + + private ZipFile getResourcePackZipFile() throws IOException + { + if (this.resourcePackZipFile == null) + { + this.resourcePackZipFile = new ZipFile(this.resourcePackFile); + } + + return this.resourcePackZipFile; + } + + protected InputStream getInputStreamByName(String name) throws IOException + { + ZipFile zipfile = this.getResourcePackZipFile(); + ZipEntry zipentry = zipfile.getEntry(name); + + if (zipentry == null) + { + throw new ResourcePackFileNotFoundException(this.resourcePackFile, name); + } + else + { + return zipfile.getInputStream(zipentry); + } + } + + public boolean hasResourceName(String name) + { + try + { + return this.getResourcePackZipFile().getEntry(name) != null; + } + catch (IOException var3) + { + return false; + } + } + + public Set getResourceDomains() + { + ZipFile zipfile; + + try + { + zipfile = this.getResourcePackZipFile(); + } + catch (IOException var8) + { + return Collections.emptySet(); + } + + Enumeration enumeration = zipfile.entries(); + Set set = Sets.newHashSet(); + + while (enumeration.hasMoreElements()) + { + ZipEntry zipentry = enumeration.nextElement(); + String s = zipentry.getName(); + + if (s.startsWith("assets/")) + { + List list = Lists.newArrayList(ENTRY_NAME_SPLITTER.split(s)); + + if (list.size() > 1) + { + String s1 = list.get(1); + + if (s1.equals(s1.toLowerCase(java.util.Locale.ROOT))) + { + set.add(s1); + } + else + { + this.logNameNotLowercase(s1); + } + } + } + } + + return set; + } + + protected void finalize() throws Throwable + { + this.close(); + super.finalize(); + } + + public void close() throws IOException + { + if (this.resourcePackZipFile != null) + { + this.resourcePackZipFile.close(); + this.resourcePackZipFile = null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/FolderResourcePack.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FolderResourcePack.java new file mode 100644 index 0000000..16216f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FolderResourcePack.java @@ -0,0 +1,104 @@ +package net.minecraft.client.resources; + +import com.google.common.base.CharMatcher; +import com.google.common.collect.Sets; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.util.Util; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.filefilter.DirectoryFileFilter; + +@SideOnly(Side.CLIENT) +public class FolderResourcePack extends AbstractResourcePack +{ + private static final boolean ON_WINDOWS = Util.getOSType() == Util.EnumOS.WINDOWS; + private static final CharMatcher BACKSLASH_MATCHER = CharMatcher.is('\\'); + + public FolderResourcePack(File resourcePackFileIn) + { + super(resourcePackFileIn); + } + + protected static boolean validatePath(File p_191384_0_, String p_191384_1_) throws IOException + { + String s = p_191384_0_.getCanonicalPath(); + + if (ON_WINDOWS) + { + s = BACKSLASH_MATCHER.replaceFrom(s, '/'); + } + + return s.endsWith(p_191384_1_); + } + + protected InputStream getInputStreamByName(String name) throws IOException + { + File file1 = this.getFile(name); + + if (file1 == null) + { + throw new ResourcePackFileNotFoundException(this.resourcePackFile, name); + } + else + { + return new BufferedInputStream(new FileInputStream(file1)); + } + } + + protected boolean hasResourceName(String name) + { + return this.getFile(name) != null; + } + + @Nullable + private File getFile(String p_191385_1_) + { + try + { + File file1 = new File(this.resourcePackFile, p_191385_1_); + + if (file1.isFile() && validatePath(file1, p_191385_1_)) + { + return file1; + } + } + catch (IOException var3) + { + ; + } + + return null; + } + + public Set getResourceDomains() + { + Set set = Sets.newHashSet(); + File file1 = new File(this.resourcePackFile, "assets/"); + + if (file1.isDirectory()) + { + for (File file2 : file1.listFiles((FileFilter)DirectoryFileFilter.DIRECTORY)) + { + String s = getRelativeName(file1, file2); + + if (s.equals(s.toLowerCase(java.util.Locale.ROOT))) + { + set.add(s.substring(0, s.length() - 1)); + } + else + { + this.logNameNotLowercase(s); + } + } + } + + return set; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/FoliageColorReloadListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FoliageColorReloadListener.java new file mode 100644 index 0000000..e403281 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/FoliageColorReloadListener.java @@ -0,0 +1,26 @@ +package net.minecraft.client.resources; + +import java.io.IOException; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.ColorizerFoliage; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FoliageColorReloadListener implements IResourceManagerReloadListener +{ + private static final ResourceLocation LOC_FOLIAGE_PNG = new ResourceLocation("textures/colormap/foliage.png"); + + public void onResourceManagerReload(IResourceManager resourceManager) + { + try + { + ColorizerFoliage.setFoliageBiomeColorizer(TextureUtil.readImageData(resourceManager, LOC_FOLIAGE_PNG)); + } + catch (IOException var3) + { + ; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/GrassColorReloadListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/GrassColorReloadListener.java new file mode 100644 index 0000000..49b83dd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/GrassColorReloadListener.java @@ -0,0 +1,26 @@ +package net.minecraft.client.resources; + +import java.io.IOException; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.ColorizerGrass; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GrassColorReloadListener implements IResourceManagerReloadListener +{ + private static final ResourceLocation LOC_GRASS_PNG = new ResourceLocation("textures/colormap/grass.png"); + + public void onResourceManagerReload(IResourceManager resourceManager) + { + try + { + ColorizerGrass.setGrassBiomeColorizer(TextureUtil.readImageData(resourceManager, LOC_GRASS_PNG)); + } + catch (IOException var3) + { + ; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/I18n.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/I18n.java new file mode 100644 index 0000000..bf665ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/I18n.java @@ -0,0 +1,28 @@ +package net.minecraft.client.resources; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class I18n +{ + private static Locale i18nLocale; + + static void setLocale(Locale i18nLocaleIn) + { + i18nLocale = i18nLocaleIn; + } + + /** + * Translates the given string and then formats it. Equivilant to String.format(translate(key), parameters). + */ + public static String format(String translateKey, Object... parameters) + { + return i18nLocale.formatMessage(translateKey, parameters); + } + + public static boolean hasKey(String key) + { + return i18nLocale.hasKey(key); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/IReloadableResourceManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IReloadableResourceManager.java new file mode 100644 index 0000000..add3492 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IReloadableResourceManager.java @@ -0,0 +1,13 @@ +package net.minecraft.client.resources; + +import java.util.List; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IReloadableResourceManager extends IResourceManager +{ + void reloadResources(List resourcesPacksList); + + void registerReloadListener(IResourceManagerReloadListener reloadListener); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResource.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResource.java new file mode 100644 index 0000000..2b87f73 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResource.java @@ -0,0 +1,24 @@ +package net.minecraft.client.resources; + +import java.io.Closeable; +import java.io.InputStream; +import javax.annotation.Nullable; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IResource extends Closeable +{ + ResourceLocation getResourceLocation(); + + InputStream getInputStream(); + + boolean hasMetadata(); + + @Nullable + T getMetadata(String sectionName); + + String getResourcePackName(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourceManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourceManager.java new file mode 100644 index 0000000..60210ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourceManager.java @@ -0,0 +1,18 @@ +package net.minecraft.client.resources; + +import java.io.IOException; +import java.util.List; +import java.util.Set; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IResourceManager +{ + Set getResourceDomains(); + + IResource getResource(ResourceLocation location) throws IOException; + + List getAllResources(ResourceLocation location) throws IOException; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourceManagerReloadListener.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourceManagerReloadListener.java new file mode 100644 index 0000000..c633793 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourceManagerReloadListener.java @@ -0,0 +1,15 @@ +package net.minecraft.client.resources; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +/** + * @deprecated Forge: {@link net.minecraftforge.client.resource.ISelectiveResourceReloadListener}, which selectively allows + * individual resource types being reloaded should rather be used where possible. + */ +@Deprecated +@SideOnly(Side.CLIENT) +public interface IResourceManagerReloadListener +{ + void onResourceManagerReload(IResourceManager resourceManager); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourcePack.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourcePack.java new file mode 100644 index 0000000..8a8b712 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/IResourcePack.java @@ -0,0 +1,29 @@ +package net.minecraft.client.resources; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IResourcePack +{ + InputStream getInputStream(ResourceLocation location) throws IOException; + + boolean resourceExists(ResourceLocation location); + + Set getResourceDomains(); + + @Nullable + T getPackMetadata(MetadataSerializer metadataSerializer, String metadataSectionName) throws IOException; + + BufferedImage getPackImage() throws IOException; + + String getPackName(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/Language.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/Language.java new file mode 100644 index 0000000..ecce2de --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/Language.java @@ -0,0 +1,64 @@ +package net.minecraft.client.resources; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Language implements Comparable +{ + private final String languageCode; + private final String region; + private final String name; + private final boolean bidirectional; + + public Language(String languageCodeIn, String regionIn, String nameIn, boolean bidirectionalIn) + { + this.languageCode = languageCodeIn; + this.region = regionIn; + this.name = nameIn; + this.bidirectional = bidirectionalIn; + String[] splitLangCode = languageCode.split("_", 2); + this.javaLocale = new java.util.Locale(splitLangCode[0], splitLangCode[1]); + } + + public String getLanguageCode() + { + return this.languageCode; + } + + public boolean isBidirectional() + { + return this.bidirectional; + } + + public String toString() + { + return String.format("%s (%s)", this.name, this.region); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else + { + return !(p_equals_1_ instanceof Language) ? false : this.languageCode.equals(((Language)p_equals_1_).languageCode); + } + } + + public int hashCode() + { + return this.languageCode.hashCode(); + } + + public int compareTo(Language p_compareTo_1_) + { + return this.languageCode.compareTo(p_compareTo_1_.languageCode); + } + + // Forge: add access to Locale so modders can create correct string and number formatters + private final java.util.Locale javaLocale; + public java.util.Locale getJavaLocale() { return javaLocale; } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/LanguageManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/LanguageManager.java new file mode 100644 index 0000000..40a445e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/LanguageManager.java @@ -0,0 +1,109 @@ +package net.minecraft.client.resources; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.SortedSet; +import net.minecraft.client.resources.data.LanguageMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.text.translation.LanguageMap; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class LanguageManager implements IResourceManagerReloadListener +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final MetadataSerializer metadataSerializer; + private String currentLanguage; + protected static final Locale CURRENT_LOCALE = new Locale(); + private final Map languageMap = Maps.newHashMap(); + + public LanguageManager(MetadataSerializer theMetadataSerializerIn, String currentLanguageIn) + { + this.metadataSerializer = theMetadataSerializerIn; + this.currentLanguage = currentLanguageIn; + I18n.setLocale(CURRENT_LOCALE); + } + + public void parseLanguageMetadata(List resourcesPacks) + { + this.languageMap.clear(); + + for (IResourcePack iresourcepack : resourcesPacks) + { + try + { + LanguageMetadataSection languagemetadatasection = (LanguageMetadataSection)iresourcepack.getPackMetadata(this.metadataSerializer, "language"); + + if (languagemetadatasection != null) + { + for (Language language : languagemetadatasection.getLanguages()) + { + if (!this.languageMap.containsKey(language.getLanguageCode())) + { + this.languageMap.put(language.getLanguageCode(), language); + } + } + } + } + catch (RuntimeException runtimeexception) + { + LOGGER.warn("Unable to parse language metadata section of resourcepack: {}", iresourcepack.getPackName(), runtimeexception); + } + catch (IOException ioexception) + { + LOGGER.warn("Unable to parse language metadata section of resourcepack: {}", iresourcepack.getPackName(), ioexception); + } + } + } + + public void onResourceManagerReload(IResourceManager resourceManager) + { + List list = Lists.newArrayList("en_us"); + + if (!"en_us".equals(this.currentLanguage)) + { + list.add(this.currentLanguage); + } + + CURRENT_LOCALE.loadLocaleDataFiles(resourceManager, list); + LanguageMap.replaceWith(CURRENT_LOCALE.properties); + } + + public boolean isCurrentLocaleUnicode() + { + return CURRENT_LOCALE.isUnicode(); + } + + public boolean isCurrentLanguageBidirectional() + { + return this.getCurrentLanguage() != null && this.getCurrentLanguage().isBidirectional(); + } + + public void setCurrentLanguage(Language currentLanguageIn) + { + this.currentLanguage = currentLanguageIn.getLanguageCode(); + } + + public Language getCurrentLanguage() + { + String s = this.languageMap.containsKey(this.currentLanguage) ? this.currentLanguage : "en_us"; + return this.languageMap.get(s); + } + + public SortedSet getLanguages() + { + return Sets.newTreeSet(this.languageMap.values()); + } + + public Language getLanguage(String p_191960_1_) + { + return this.languageMap.get(p_191960_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/LegacyV2Adapter.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/LegacyV2Adapter.java new file mode 100644 index 0000000..0ac3012 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/LegacyV2Adapter.java @@ -0,0 +1,78 @@ +package net.minecraft.client.resources; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LegacyV2Adapter implements IResourcePack +{ + private final IResourcePack pack; + + public LegacyV2Adapter(IResourcePack packIn) + { + this.pack = packIn; + } + + public InputStream getInputStream(ResourceLocation location) throws IOException + { + return this.pack.getInputStream(this.fudgePath(location)); + } + + private ResourceLocation fudgePath(ResourceLocation p_191382_1_) + { + String s = p_191382_1_.getResourcePath(); + + if (!"lang/swg_de.lang".equals(s) && s.startsWith("lang/") && s.endsWith(".lang")) + { + int i = s.indexOf(95); + + if (i != -1) + { + final String s1 = s.substring(0, i + 1) + s.substring(i + 1, s.indexOf(46, i)).toUpperCase() + ".lang"; + return new ResourceLocation(p_191382_1_.getResourceDomain(), "") + { + public String getResourcePath() + { + return s1; + } + }; + } + } + + return p_191382_1_; + } + + public boolean resourceExists(ResourceLocation location) + { + return this.pack.resourceExists(this.fudgePath(location)); + } + + public Set getResourceDomains() + { + return this.pack.getResourceDomains(); + } + + @Nullable + public T getPackMetadata(MetadataSerializer metadataSerializer, String metadataSectionName) throws IOException + { + return (T)this.pack.getPackMetadata(metadataSerializer, metadataSectionName); + } + + public BufferedImage getPackImage() throws IOException + { + return this.pack.getPackImage(); + } + + public String getPackName() + { + return this.pack.getPackName(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/Locale.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/Locale.java new file mode 100644 index 0000000..96edd49 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/Locale.java @@ -0,0 +1,153 @@ +package net.minecraft.client.resources; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.IllegalFormatException; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; + +@SideOnly(Side.CLIENT) +public class Locale +{ + /** Splits on "=" */ + private static final Splitter SPLITTER = Splitter.on('=').limit(2); + private static final Pattern PATTERN = Pattern.compile("%(\\d+\\$)?[\\d\\.]*[df]"); + Map properties = Maps.newHashMap(); + private boolean unicode; + + /** + * For each domain $D and language $L, attempts to load the resource $D:lang/$L.lang + */ + public synchronized void loadLocaleDataFiles(IResourceManager resourceManager, List languageList) + { + this.properties.clear(); + + for (String s : languageList) + { + String s1 = String.format("lang/%s.lang", s); + + for (String s2 : resourceManager.getResourceDomains()) + { + try + { + this.loadLocaleData(resourceManager.getAllResources(new ResourceLocation(s2, s1))); + } + catch (IOException var9) + { + ; + } + } + } + + this.checkUnicode(); + } + + public boolean isUnicode() + { + return this.unicode; + } + + private void checkUnicode() + { + this.unicode = false; + int i = 0; + int j = 0; + + for (String s : this.properties.values()) + { + int k = s.length(); + j += k; + + for (int l = 0; l < k; ++l) + { + if (s.charAt(l) >= 256) + { + ++i; + } + } + } + + float f = (float)i / (float)j; + this.unicode = (double)f > 0.1D; + } + + /** + * Loads the locale data for the list of resources. + */ + private void loadLocaleData(List resourcesList) throws IOException + { + for (IResource iresource : resourcesList) + { + InputStream inputstream = iresource.getInputStream(); + + try + { + this.loadLocaleData(inputstream); + } + finally + { + IOUtils.closeQuietly(inputstream); + } + } + } + + private void loadLocaleData(InputStream inputStreamIn) throws IOException + { + inputStreamIn = net.minecraftforge.fml.common.FMLCommonHandler.instance().loadLanguage(properties, inputStreamIn); + if (inputStreamIn == null) return; + for (String s : IOUtils.readLines(inputStreamIn, StandardCharsets.UTF_8)) + { + if (!s.isEmpty() && s.charAt(0) != '#') + { + String[] astring = (String[])Iterables.toArray(SPLITTER.split(s), String.class); + + if (astring != null && astring.length == 2) + { + String s1 = astring[0]; + String s2 = PATTERN.matcher(astring[1]).replaceAll("%$1s"); + this.properties.put(s1, s2); + } + } + } + } + + /** + * Returns the translation, or the key itself if the key could not be translated. + */ + private String translateKeyPrivate(String translateKey) + { + String s = this.properties.get(translateKey); + return s == null ? translateKey : s; + } + + /** + * Calls String.format(translateKey(key), params) + */ + public String formatMessage(String translateKey, Object[] parameters) + { + String s = this.translateKeyPrivate(translateKey); + + try + { + return String.format(s, parameters); + } + catch (IllegalFormatException var5) + { + return "Format error: " + s; + } + } + + public boolean hasKey(String key) + { + return this.properties.containsKey(key); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourceIndex.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourceIndex.java new file mode 100644 index 0000000..197a4e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourceIndex.java @@ -0,0 +1,92 @@ +package net.minecraft.client.resources; + +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ResourceIndex +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Map resourceMap = Maps.newHashMap(); + + protected ResourceIndex() + { + } + + public ResourceIndex(File assetsFolder, String indexName) + { + File file1 = new File(assetsFolder, "objects"); + File file2 = new File(assetsFolder, "indexes/" + indexName + ".json"); + BufferedReader bufferedreader = null; + + try + { + bufferedreader = Files.newReader(file2, StandardCharsets.UTF_8); + JsonObject jsonobject = (new JsonParser()).parse(bufferedreader).getAsJsonObject(); + JsonObject jsonobject1 = JsonUtils.getJsonObject(jsonobject, "objects", (JsonObject)null); + + if (jsonobject1 != null) + { + for (Entry entry : jsonobject1.entrySet()) + { + JsonObject jsonobject2 = (JsonObject)entry.getValue(); + String s = entry.getKey(); + String[] astring = s.split("/", 2); + String s1 = astring.length == 1 ? astring[0] : astring[0] + ":" + astring[1]; + String s2 = JsonUtils.getString(jsonobject2, "hash"); + File file3 = new File(file1, s2.substring(0, 2) + "/" + s2); + this.resourceMap.put(s1, file3); + } + } + } + catch (JsonParseException var20) + { + LOGGER.error("Unable to parse resource index file: {}", (Object)file2); + } + catch (FileNotFoundException var21) + { + LOGGER.error("Can't find the resource index file: {}", (Object)file2); + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + } + + @Nullable + public File getFile(ResourceLocation location) + { + String s = location.toString(); + return this.resourceMap.get(s); + } + + public boolean isFileExisting(ResourceLocation location) + { + File file1 = this.getFile(location); + return file1 != null && file1.isFile(); + } + + public File getPackMcmeta() + { + return this.resourceMap.get("pack.mcmeta"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourceIndexFolder.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourceIndexFolder.java new file mode 100644 index 0000000..afb72a1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourceIndexFolder.java @@ -0,0 +1,27 @@ +package net.minecraft.client.resources; + +import java.io.File; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ResourceIndexFolder extends ResourceIndex +{ + private final File baseDir; + + public ResourceIndexFolder(File folder) + { + this.baseDir = folder; + } + + public File getFile(ResourceLocation location) + { + return new File(this.baseDir, location.toString().replace(':', '/')); + } + + public File getPackMcmeta() + { + return new File(this.baseDir, "pack.mcmeta"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackFileNotFoundException.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackFileNotFoundException.java new file mode 100644 index 0000000..694b0e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackFileNotFoundException.java @@ -0,0 +1,15 @@ +package net.minecraft.client.resources; + +import java.io.File; +import java.io.FileNotFoundException; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ResourcePackFileNotFoundException extends FileNotFoundException +{ + public ResourcePackFileNotFoundException(File resourcePack, String fileName) + { + super(String.format("'%s' in ResourcePack '%s'", fileName, resourcePack)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntry.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntry.java new file mode 100644 index 0000000..9412921 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntry.java @@ -0,0 +1,261 @@ +package net.minecraft.client.resources; + +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiListExtended; +import net.minecraft.client.gui.GuiScreenResourcePacks; +import net.minecraft.client.gui.GuiYesNo; +import net.minecraft.client.gui.GuiYesNoCallback; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class ResourcePackListEntry implements GuiListExtended.IGuiListEntry +{ + private static final ResourceLocation RESOURCE_PACKS_TEXTURE = new ResourceLocation("textures/gui/resource_packs.png"); + private static final ITextComponent INCOMPATIBLE = new TextComponentTranslation("resourcePack.incompatible", new Object[0]); + private static final ITextComponent INCOMPATIBLE_OLD = new TextComponentTranslation("resourcePack.incompatible.old", new Object[0]); + private static final ITextComponent INCOMPATIBLE_NEW = new TextComponentTranslation("resourcePack.incompatible.new", new Object[0]); + protected final Minecraft mc; + protected final GuiScreenResourcePacks resourcePacksGUI; + + public ResourcePackListEntry(GuiScreenResourcePacks resourcePacksGUIIn) + { + this.resourcePacksGUI = resourcePacksGUIIn; + this.mc = Minecraft.getMinecraft(); + } + + public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected, float partialTicks) + { + int i = this.getResourcePackFormat(); + + if (i != 3) + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Gui.drawRect(x - 1, y - 1, x + listWidth - 9, y + slotHeight + 1, -8978432); + } + + this.bindResourcePackIcon(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, 32, 32, 32.0F, 32.0F); + String s = this.getResourcePackName(); + String s1 = this.getResourcePackDescription(); + + if (this.showHoverOverlay() && (this.mc.gameSettings.touchscreen || isSelected)) + { + this.mc.getTextureManager().bindTexture(RESOURCE_PACKS_TEXTURE); + Gui.drawRect(x, y, x + 32, y + 32, -1601138544); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + int j = mouseX - x; + int k = mouseY - y; + + if (i < 3) + { + s = INCOMPATIBLE.getFormattedText(); + s1 = INCOMPATIBLE_OLD.getFormattedText(); + } + else if (i > 3) + { + s = INCOMPATIBLE.getFormattedText(); + s1 = INCOMPATIBLE_NEW.getFormattedText(); + } + + if (this.canMoveRight()) + { + if (j < 32) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 0.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + else + { + if (this.canMoveLeft()) + { + if (j < 16) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 32.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 32.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + + if (this.canMoveUp()) + { + if (j < 32 && j > 16 && k < 16) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 96.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 96.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + + if (this.canMoveDown()) + { + if (j < 32 && j > 16 && k > 16) + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 64.0F, 32.0F, 32, 32, 256.0F, 256.0F); + } + else + { + Gui.drawModalRectWithCustomSizedTexture(x, y, 64.0F, 0.0F, 32, 32, 256.0F, 256.0F); + } + } + } + } + + int i1 = this.mc.fontRenderer.getStringWidth(s); + + if (i1 > 157) + { + s = this.mc.fontRenderer.trimStringToWidth(s, 157 - this.mc.fontRenderer.getStringWidth("...")) + "..."; + } + + this.mc.fontRenderer.drawStringWithShadow(s, (float)(x + 32 + 2), (float)(y + 1), 16777215); + List list = this.mc.fontRenderer.listFormattedStringToWidth(s1, 157); + + for (int l = 0; l < 2 && l < list.size(); ++l) + { + this.mc.fontRenderer.drawStringWithShadow(list.get(l), (float)(x + 32 + 2), (float)(y + 12 + 10 * l), 8421504); + } + } + + protected abstract int getResourcePackFormat(); + + protected abstract String getResourcePackDescription(); + + protected abstract String getResourcePackName(); + + protected abstract void bindResourcePackIcon(); + + protected boolean showHoverOverlay() + { + return true; + } + + protected boolean canMoveRight() + { + return !this.resourcePacksGUI.hasResourcePackEntry(this); + } + + protected boolean canMoveLeft() + { + return this.resourcePacksGUI.hasResourcePackEntry(this); + } + + protected boolean canMoveUp() + { + List list = this.resourcePacksGUI.getListContaining(this); + int i = list.indexOf(this); + return i > 0 && ((ResourcePackListEntry)list.get(i - 1)).showHoverOverlay(); + } + + protected boolean canMoveDown() + { + List list = this.resourcePacksGUI.getListContaining(this); + int i = list.indexOf(this); + return i >= 0 && i < list.size() - 1 && ((ResourcePackListEntry)list.get(i + 1)).showHoverOverlay(); + } + + /** + * Called when the mouse is clicked within this entry. Returning true means that something within this entry was + * clicked and the list should not be dragged. + */ + public boolean mousePressed(int slotIndex, int mouseX, int mouseY, int mouseEvent, int relativeX, int relativeY) + { + if (this.showHoverOverlay() && relativeX <= 32) + { + if (this.canMoveRight()) + { + this.resourcePacksGUI.markChanged(); + final int j = ((ResourcePackListEntry)this.resourcePacksGUI.getSelectedResourcePacks().get(0)).isServerPack() ? 1 : 0; + int l = this.getResourcePackFormat(); + + if (l == 3) + { + this.resourcePacksGUI.getListContaining(this).remove(this); + this.resourcePacksGUI.getSelectedResourcePacks().add(j, this); + } + else + { + String s = I18n.format("resourcePack.incompatible.confirm.title"); + String s1 = I18n.format("resourcePack.incompatible.confirm." + (l > 3 ? "new" : "old")); + this.mc.displayGuiScreen(new GuiYesNo(new GuiYesNoCallback() + { + public void confirmClicked(boolean result, int id) + { + List list2 = ResourcePackListEntry.this.resourcePacksGUI.getListContaining(ResourcePackListEntry.this); + ResourcePackListEntry.this.mc.displayGuiScreen(ResourcePackListEntry.this.resourcePacksGUI); + + if (result) + { + list2.remove(ResourcePackListEntry.this); + ResourcePackListEntry.this.resourcePacksGUI.getSelectedResourcePacks().add(j, ResourcePackListEntry.this); + } + } + }, s, s1, 0)); + } + + return true; + } + + if (relativeX < 16 && this.canMoveLeft()) + { + this.resourcePacksGUI.getListContaining(this).remove(this); + this.resourcePacksGUI.getAvailableResourcePacks().add(0, this); + this.resourcePacksGUI.markChanged(); + return true; + } + + if (relativeX > 16 && relativeY < 16 && this.canMoveUp()) + { + List list1 = this.resourcePacksGUI.getListContaining(this); + int k = list1.indexOf(this); + list1.remove(this); + list1.add(k - 1, this); + this.resourcePacksGUI.markChanged(); + return true; + } + + if (relativeX > 16 && relativeY > 16 && this.canMoveDown()) + { + List list = this.resourcePacksGUI.getListContaining(this); + int i = list.indexOf(this); + list.remove(this); + list.add(i + 1, this); + this.resourcePacksGUI.markChanged(); + return true; + } + } + + return false; + } + + public void updatePosition(int slotIndex, int x, int y, float partialTicks) + { + } + + /** + * Fired when the mouse button is released. Arguments: index, x, y, mouseEvent, relativeX, relativeY + */ + public void mouseReleased(int slotIndex, int x, int y, int mouseEvent, int relativeX, int relativeY) + { + } + + public boolean isServerPack() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryDefault.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryDefault.java new file mode 100644 index 0000000..58ca7e2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryDefault.java @@ -0,0 +1,25 @@ +package net.minecraft.client.resources; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreenResourcePacks; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ResourcePackListEntryDefault extends ResourcePackListEntryServer +{ + public ResourcePackListEntryDefault(GuiScreenResourcePacks resourcePacksGUIIn) + { + super(resourcePacksGUIIn, Minecraft.getMinecraft().getResourcePackRepository().rprDefaultResourcePack); + } + + protected String getResourcePackName() + { + return "Default"; + } + + public boolean isServerPack() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryFound.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryFound.java new file mode 100644 index 0000000..72d9398 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryFound.java @@ -0,0 +1,42 @@ +package net.minecraft.client.resources; + +import net.minecraft.client.gui.GuiScreenResourcePacks; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class ResourcePackListEntryFound extends ResourcePackListEntry +{ + private final ResourcePackRepository.Entry resourcePackEntry; + + public ResourcePackListEntryFound(GuiScreenResourcePacks resourcePacksGUIIn, ResourcePackRepository.Entry entry) + { + super(resourcePacksGUIIn); + this.resourcePackEntry = entry; + } + + protected void bindResourcePackIcon() + { + this.resourcePackEntry.bindTexturePackIcon(this.mc.getTextureManager()); + } + + protected int getResourcePackFormat() + { + return this.resourcePackEntry.getPackFormat(); + } + + protected String getResourcePackDescription() + { + return this.resourcePackEntry.getTexturePackDescription(); + } + + protected String getResourcePackName() + { + return this.resourcePackEntry.getResourcePackName(); + } + + public ResourcePackRepository.Entry getResourcePackEntry() + { + return this.resourcePackEntry; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryServer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryServer.java new file mode 100644 index 0000000..35b62e9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackListEntryServer.java @@ -0,0 +1,108 @@ +package net.minecraft.client.resources; + +import com.google.gson.JsonParseException; +import java.io.IOException; +import net.minecraft.client.gui.GuiScreenResourcePacks; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.data.PackMetadataSection; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ResourcePackListEntryServer extends ResourcePackListEntry +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final IResourcePack resourcePack; + private final ResourceLocation resourcePackIcon; + + public ResourcePackListEntryServer(GuiScreenResourcePacks resourcePacksGUIIn, IResourcePack resourcePackIn) + { + super(resourcePacksGUIIn); + this.resourcePack = resourcePackIn; + DynamicTexture dynamictexture; + + try + { + dynamictexture = new DynamicTexture(resourcePackIn.getPackImage()); + } + catch (IOException var5) + { + dynamictexture = TextureUtil.MISSING_TEXTURE; + } + + this.resourcePackIcon = this.mc.getTextureManager().getDynamicTextureLocation("texturepackicon", dynamictexture); + } + + protected int getResourcePackFormat() + { + return 3; + } + + protected String getResourcePackDescription() + { + try + { + PackMetadataSection packmetadatasection = (PackMetadataSection)this.resourcePack.getPackMetadata(this.mc.getResourcePackRepository().rprMetadataSerializer, "pack"); + + if (packmetadatasection != null) + { + return packmetadatasection.getPackDescription().getFormattedText(); + } + } + catch (JsonParseException jsonparseexception) + { + LOGGER.error("Couldn't load metadata info", (Throwable)jsonparseexception); + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't load metadata info", (Throwable)ioexception); + } + + return TextFormatting.RED + "Missing " + "pack.mcmeta" + " :("; + } + + protected boolean canMoveRight() + { + return false; + } + + protected boolean canMoveLeft() + { + return false; + } + + protected boolean canMoveUp() + { + return false; + } + + protected boolean canMoveDown() + { + return false; + } + + protected String getResourcePackName() + { + return "Server"; + } + + protected void bindResourcePackIcon() + { + this.mc.getTextureManager().bindTexture(this.resourcePackIcon); + } + + protected boolean showHoverOverlay() + { + return false; + } + + public boolean isServerPack() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackRepository.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackRepository.java new file mode 100644 index 0000000..c6991bf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/ResourcePackRepository.java @@ -0,0 +1,535 @@ +package net.minecraft.client.resources; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.SettableFuture; +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreenWorking; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.client.resources.data.PackMetadataSection; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.util.HttpUtil; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.comparator.LastModifiedFileComparator; +import org.apache.commons.io.filefilter.IOFileFilter; +import org.apache.commons.io.filefilter.TrueFileFilter; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ResourcePackRepository +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final FileFilter RESOURCE_PACK_FILTER = new FileFilter() + { + public boolean accept(File p_accept_1_) + { + boolean flag = p_accept_1_.isFile() && p_accept_1_.getName().endsWith(".zip"); + boolean flag1 = p_accept_1_.isDirectory() && (new File(p_accept_1_, "pack.mcmeta")).isFile(); + return flag || flag1; + } + }; + private static final Pattern SHA1 = Pattern.compile("^[a-fA-F0-9]{40}$"); + private static final ResourceLocation UNKNOWN_PACK_TEXTURE = new ResourceLocation("textures/misc/unknown_pack.png"); + private final File dirResourcepacks; + public final IResourcePack rprDefaultResourcePack; + private final File dirServerResourcepacks; + public final MetadataSerializer rprMetadataSerializer; + private IResourcePack serverResourcePack; + private final ReentrantLock lock = new ReentrantLock(); + /** ResourcesPack currently beeing downloaded */ + private ListenableFuture downloadingPacks; + private List repositoryEntriesAll = Lists.newArrayList(); + private final List repositoryEntries = Lists.newArrayList(); + + public ResourcePackRepository(File dirResourcepacksIn, File dirServerResourcepacksIn, IResourcePack rprDefaultResourcePackIn, MetadataSerializer rprMetadataSerializerIn, GameSettings settings) + { + this.dirResourcepacks = dirResourcepacksIn; + this.dirServerResourcepacks = dirServerResourcepacksIn; + this.rprDefaultResourcePack = rprDefaultResourcePackIn; + this.rprMetadataSerializer = rprMetadataSerializerIn; + this.fixDirResourcepacks(); + this.updateRepositoryEntriesAll(); + Iterator iterator = settings.resourcePacks.iterator(); + + while (iterator.hasNext()) + { + String s = iterator.next(); + + for (ResourcePackRepository.Entry resourcepackrepository$entry : this.repositoryEntriesAll) + { + if (resourcepackrepository$entry.getResourcePackName().equals(s)) + { + if (resourcepackrepository$entry.getPackFormat() == 3 || settings.incompatibleResourcePacks.contains(resourcepackrepository$entry.getResourcePackName())) + { + this.repositoryEntries.add(resourcepackrepository$entry); + break; + } + + iterator.remove(); + LOGGER.warn("Removed selected resource pack {} because it's no longer compatible", (Object)resourcepackrepository$entry.getResourcePackName()); + } + } + } + } + + public static Map getDownloadHeaders() + { + Map map = Maps.newHashMap(); + map.put("X-Minecraft-Username", Minecraft.getMinecraft().getSession().getUsername()); + map.put("X-Minecraft-UUID", Minecraft.getMinecraft().getSession().getPlayerID()); + map.put("X-Minecraft-Version", "1.12.2"); + return map; + } + + private void fixDirResourcepacks() + { + if (this.dirResourcepacks.exists()) + { + if (!this.dirResourcepacks.isDirectory() && (!this.dirResourcepacks.delete() || !this.dirResourcepacks.mkdirs())) + { + LOGGER.warn("Unable to recreate resourcepack folder, it exists but is not a directory: {}", (Object)this.dirResourcepacks); + } + } + else if (!this.dirResourcepacks.mkdirs()) + { + LOGGER.warn("Unable to create resourcepack folder: {}", (Object)this.dirResourcepacks); + } + } + + private List getResourcePackFiles() + { + return this.dirResourcepacks.isDirectory() ? Arrays.asList(this.dirResourcepacks.listFiles(RESOURCE_PACK_FILTER)) : Collections.emptyList(); + } + + private IResourcePack getResourcePack(File p_191399_1_) + { + IResourcePack iresourcepack; + + if (p_191399_1_.isDirectory()) + { + iresourcepack = new FolderResourcePack(p_191399_1_); + } + else + { + iresourcepack = new FileResourcePack(p_191399_1_); + } + + try + { + PackMetadataSection packmetadatasection = (PackMetadataSection)iresourcepack.getPackMetadata(this.rprMetadataSerializer, "pack"); + + if (packmetadatasection != null && packmetadatasection.getPackFormat() == 2) + { + return new LegacyV2Adapter(iresourcepack); + } + } + catch (Exception var4) + { + ; + } + + return iresourcepack; + } + + public void updateRepositoryEntriesAll() + { + List list = Lists.newArrayList(); + + for (File file1 : this.getResourcePackFiles()) + { + ResourcePackRepository.Entry resourcepackrepository$entry = new ResourcePackRepository.Entry(file1); + + if (this.repositoryEntriesAll.contains(resourcepackrepository$entry)) + { + int i = this.repositoryEntriesAll.indexOf(resourcepackrepository$entry); + + if (i > -1 && i < this.repositoryEntriesAll.size()) + { + list.add(this.repositoryEntriesAll.get(i)); + } + } + else + { + try + { + resourcepackrepository$entry.updateResourcePack(); + list.add(resourcepackrepository$entry); + } + catch (Exception var6) + { + list.remove(resourcepackrepository$entry); + } + } + } + + this.repositoryEntriesAll.removeAll(list); + + for (ResourcePackRepository.Entry resourcepackrepository$entry1 : this.repositoryEntriesAll) + { + resourcepackrepository$entry1.closeResourcePack(); + } + + this.repositoryEntriesAll = list; + } + + @Nullable + public ResourcePackRepository.Entry getResourcePackEntry() + { + if (this.serverResourcePack != null) + { + ResourcePackRepository.Entry resourcepackrepository$entry = new ResourcePackRepository.Entry(this.serverResourcePack); + + try + { + resourcepackrepository$entry.updateResourcePack(); + return resourcepackrepository$entry; + } + catch (IOException var3) + { + ; + } + } + + return null; + } + + public List getRepositoryEntriesAll() + { + return ImmutableList.copyOf(this.repositoryEntriesAll); + } + + public List getRepositoryEntries() + { + return ImmutableList.copyOf(this.repositoryEntries); + } + + public void setRepositories(List repositories) + { + this.repositoryEntries.clear(); + this.repositoryEntries.addAll(repositories); + } + + public File getDirResourcepacks() + { + return this.dirResourcepacks; + } + + public ListenableFuture downloadResourcePack(String url, String hash) + { + String s = DigestUtils.sha1Hex(url); + final String s1 = SHA1.matcher(hash).matches() ? hash : ""; + final File file1 = new File(this.dirServerResourcepacks, s); + this.lock.lock(); + + try + { + this.clearResourcePack(); + + if (file1.exists()) + { + if (this.checkHash(s1, file1)) + { + ListenableFuture listenablefuture1 = this.setServerResourcePack(file1); + return listenablefuture1; + } + + LOGGER.warn("Deleting file {}", (Object)file1); + FileUtils.deleteQuietly(file1); + } + + this.deleteOldServerResourcesPacks(); + final GuiScreenWorking guiscreenworking = new GuiScreenWorking(); + Map map = getDownloadHeaders(); + final Minecraft minecraft = Minecraft.getMinecraft(); + Futures.getUnchecked(minecraft.addScheduledTask(new Runnable() + { + public void run() + { + minecraft.displayGuiScreen(guiscreenworking); + } + })); + final SettableFuture settablefuture = SettableFuture.create(); + this.downloadingPacks = HttpUtil.downloadResourcePack(file1, url, map, 52428800, guiscreenworking, minecraft.getProxy()); + Futures.addCallback(this.downloadingPacks, new FutureCallback() + { + public void onSuccess(@Nullable Object p_onSuccess_1_) + { + if (ResourcePackRepository.this.checkHash(s1, file1)) + { + ResourcePackRepository.this.setServerResourcePack(file1); + settablefuture.set((Object)null); + } + else + { + ResourcePackRepository.LOGGER.warn("Deleting file {}", (Object)file1); + FileUtils.deleteQuietly(file1); + } + } + public void onFailure(Throwable p_onFailure_1_) + { + FileUtils.deleteQuietly(file1); + settablefuture.setException(p_onFailure_1_); + } + }); + ListenableFuture listenablefuture = this.downloadingPacks; + return listenablefuture; + } + finally + { + this.lock.unlock(); + } + } + + private boolean checkHash(String p_190113_1_, File p_190113_2_) + { + try + { + String s = DigestUtils.sha1Hex((InputStream)(new FileInputStream(p_190113_2_))); + + if (p_190113_1_.isEmpty()) + { + LOGGER.info("Found file {} without verification hash", (Object)p_190113_2_); + return true; + } + + if (s.toLowerCase(java.util.Locale.ROOT).equals(p_190113_1_.toLowerCase(java.util.Locale.ROOT))) + { + LOGGER.info("Found file {} matching requested hash {}", p_190113_2_, p_190113_1_); + return true; + } + + LOGGER.warn("File {} had wrong hash (expected {}, found {}).", p_190113_2_, p_190113_1_, s); + } + catch (IOException ioexception) + { + LOGGER.warn("File {} couldn't be hashed.", p_190113_2_, ioexception); + } + + return false; + } + + private boolean validatePack(File p_190112_1_) + { + ResourcePackRepository.Entry resourcepackrepository$entry = new ResourcePackRepository.Entry(p_190112_1_); + + try + { + resourcepackrepository$entry.updateResourcePack(); + return true; + } + catch (Exception exception) + { + LOGGER.warn("Server resourcepack is invalid, ignoring it", (Throwable)exception); + return false; + } + } + + /** + * Keep only the 10 most recent resources packs, delete the others + */ + private void deleteOldServerResourcesPacks() + { + try + { + List list = Lists.newArrayList(FileUtils.listFiles(this.dirServerResourcepacks, TrueFileFilter.TRUE, (IOFileFilter)null)); + Collections.sort(list, LastModifiedFileComparator.LASTMODIFIED_REVERSE); + int i = 0; + + for (File file1 : list) + { + if (i++ >= 10) + { + LOGGER.info("Deleting old server resource pack {}", (Object)file1.getName()); + FileUtils.deleteQuietly(file1); + } + } + } + catch (IllegalArgumentException illegalargumentexception) + { + LOGGER.error("Error while deleting old server resource pack : {}", (Object)illegalargumentexception.getMessage()); + } + } + + public ListenableFuture setServerResourcePack(File resourceFile) + { + if (!this.validatePack(resourceFile)) + { + return Futures.immediateFailedFuture(new RuntimeException("Invalid resourcepack")); + } + else + { + this.serverResourcePack = new FileResourcePack(resourceFile); + return Minecraft.getMinecraft().scheduleResourcesRefresh(); + } + } + + /** + * Getter for the IResourcePack instance associated with this ResourcePackRepository + */ + @Nullable + public IResourcePack getServerResourcePack() + { + return this.serverResourcePack; + } + + public void clearResourcePack() + { + this.lock.lock(); + + try + { + if (this.downloadingPacks != null) + { + this.downloadingPacks.cancel(true); + } + + this.downloadingPacks = null; + + if (this.serverResourcePack != null) + { + this.serverResourcePack = null; + Minecraft.getMinecraft().scheduleResourcesRefresh(); + } + } + finally + { + this.lock.unlock(); + } + } + + @SideOnly(Side.CLIENT) + public class Entry + { + private final IResourcePack reResourcePack; + private PackMetadataSection rePackMetadataSection; + private ResourceLocation locationTexturePackIcon; + + private Entry(File resourcePackFileIn) + { + this(ResourcePackRepository.this.getResourcePack(resourcePackFileIn)); + } + + private Entry(IResourcePack reResourcePackIn) + { + this.reResourcePack = reResourcePackIn; + } + + public void updateResourcePack() throws IOException + { + this.rePackMetadataSection = (PackMetadataSection)this.reResourcePack.getPackMetadata(ResourcePackRepository.this.rprMetadataSerializer, "pack"); + this.closeResourcePack(); + } + + public void bindTexturePackIcon(TextureManager textureManagerIn) + { + BufferedImage bufferedimage = null; + + try + { + bufferedimage = this.reResourcePack.getPackImage(); + } + catch (IOException var5) + { + ; + } + + if (bufferedimage == null) + { + try + { + bufferedimage = TextureUtil.readBufferedImage(Minecraft.getMinecraft().getResourceManager().getResource(ResourcePackRepository.UNKNOWN_PACK_TEXTURE).getInputStream()); + } + catch (IOException ioexception) + { + throw new Error("Couldn't bind resource pack icon", ioexception); + } + } + + if (this.locationTexturePackIcon == null) + { + this.locationTexturePackIcon = textureManagerIn.getDynamicTextureLocation("texturepackicon", new DynamicTexture(bufferedimage)); + } + + textureManagerIn.bindTexture(this.locationTexturePackIcon); + } + + public void closeResourcePack() + { + if (this.reResourcePack instanceof Closeable) + { + IOUtils.closeQuietly((Closeable)this.reResourcePack); + } + } + + public IResourcePack getResourcePack() + { + return this.reResourcePack; + } + + public String getResourcePackName() + { + return this.reResourcePack.getPackName(); + } + + public String getTexturePackDescription() + { + return this.rePackMetadataSection == null ? TextFormatting.RED + "Invalid pack.mcmeta (or missing 'pack' section)" : this.rePackMetadataSection.getPackDescription().getFormattedText(); + } + + public int getPackFormat() + { + return this.rePackMetadataSection == null ? 0 : this.rePackMetadataSection.getPackFormat(); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else + { + return p_equals_1_ instanceof ResourcePackRepository.Entry ? this.toString().equals(p_equals_1_.toString()) : false; + } + } + + public int hashCode() + { + return this.toString().hashCode(); + } + + public String toString() + { + return String.format("%s:%s", this.reResourcePack.getPackName(), this.reResourcePack instanceof FolderResourcePack ? "folder" : "zip"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/SimpleReloadableResourceManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/SimpleReloadableResourceManager.java new file mode 100644 index 0000000..96e6af0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/SimpleReloadableResourceManager.java @@ -0,0 +1,136 @@ +package net.minecraft.client.resources; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class SimpleReloadableResourceManager implements IReloadableResourceManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Joiner JOINER_RESOURCE_PACKS = Joiner.on(", "); + private final Map domainResourceManagers = Maps.newHashMap(); + private final List reloadListeners = Lists.newArrayList(); + private final Set setResourceDomains = Sets.newLinkedHashSet(); + private final MetadataSerializer rmMetadataSerializer; + + public SimpleReloadableResourceManager(MetadataSerializer rmMetadataSerializerIn) + { + this.rmMetadataSerializer = rmMetadataSerializerIn; + } + + public void reloadResourcePack(IResourcePack resourcePack) + { + for (String s : resourcePack.getResourceDomains()) + { + this.setResourceDomains.add(s); + FallbackResourceManager fallbackresourcemanager = this.domainResourceManagers.get(s); + + if (fallbackresourcemanager == null) + { + fallbackresourcemanager = new FallbackResourceManager(this.rmMetadataSerializer); + this.domainResourceManagers.put(s, fallbackresourcemanager); + } + + fallbackresourcemanager.addResourcePack(resourcePack); + } + } + + public Set getResourceDomains() + { + return this.setResourceDomains; + } + + public IResource getResource(ResourceLocation location) throws IOException + { + IResourceManager iresourcemanager = this.domainResourceManagers.get(location.getResourceDomain()); + + if (iresourcemanager != null) + { + return iresourcemanager.getResource(location); + } + else + { + throw new FileNotFoundException(location.toString()); + } + } + + public List getAllResources(ResourceLocation location) throws IOException + { + IResourceManager iresourcemanager = this.domainResourceManagers.get(location.getResourceDomain()); + + if (iresourcemanager != null) + { + return iresourcemanager.getAllResources(location); + } + else + { + throw new FileNotFoundException(location.toString()); + } + } + + private void clearResources() + { + this.domainResourceManagers.clear(); + this.setResourceDomains.clear(); + } + + public void reloadResources(List resourcesPacksList) + { + net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Loading Resources", resourcesPacksList.size()+1, true); + this.clearResources(); + LOGGER.info("Reloading ResourceManager: {}", (Object)JOINER_RESOURCE_PACKS.join(Iterables.transform(resourcesPacksList, new Function() + { + public String apply(@Nullable IResourcePack p_apply_1_) + { + return p_apply_1_ == null ? "" : p_apply_1_.getPackName(); + } + }))); + + for (IResourcePack iresourcepack : resourcesPacksList) + { + resReload.step(iresourcepack.getPackName()); + this.reloadResourcePack(iresourcepack); + } + + resReload.step("Reloading listeners"); + this.notifyReloadListeners(); + net.minecraftforge.fml.common.ProgressManager.pop(resReload); + } + + public void registerReloadListener(IResourceManagerReloadListener reloadListener) + { + net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Loading Resource", 1); + resReload.step(reloadListener.getClass()); + this.reloadListeners.add(reloadListener); + reloadListener.onResourceManagerReload(this); + net.minecraftforge.fml.common.ProgressManager.pop(resReload); + } + + private void notifyReloadListeners() + { + net.minecraftforge.fml.common.ProgressManager.ProgressBar resReload = net.minecraftforge.fml.common.ProgressManager.push("Reloading", this.reloadListeners.size()); + for (IResourceManagerReloadListener iresourcemanagerreloadlistener : this.reloadListeners) + { + resReload.step(iresourcemanagerreloadlistener.getClass()); + if (!net.minecraftforge.client.ForgeHooksClient.shouldUseVanillaReloadableListener(iresourcemanagerreloadlistener)) continue; // Forge: Selective reloading for vanilla listeners + iresourcemanagerreloadlistener.onResourceManagerReload(this); + } + net.minecraftforge.fml.common.ProgressManager.pop(resReload); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/SimpleResource.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/SimpleResource.java new file mode 100644 index 0000000..c05cca7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/SimpleResource.java @@ -0,0 +1,156 @@ +package net.minecraft.client.resources; + +import com.google.common.collect.Maps; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.resources.data.IMetadataSection; +import net.minecraft.client.resources.data.MetadataSerializer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; + +@SideOnly(Side.CLIENT) +public class SimpleResource implements IResource +{ + private final Map mapMetadataSections = Maps.newHashMap(); + private final String resourcePackName; + private final ResourceLocation srResourceLocation; + private final InputStream resourceInputStream; + private final InputStream mcmetaInputStream; + private final MetadataSerializer srMetadataSerializer; + private boolean mcmetaJsonChecked; + private JsonObject mcmetaJson; + + public SimpleResource(String resourcePackNameIn, ResourceLocation srResourceLocationIn, InputStream resourceInputStreamIn, InputStream mcmetaInputStreamIn, MetadataSerializer srMetadataSerializerIn) + { + this.resourcePackName = resourcePackNameIn; + this.srResourceLocation = srResourceLocationIn; + this.resourceInputStream = resourceInputStreamIn; + this.mcmetaInputStream = mcmetaInputStreamIn; + this.srMetadataSerializer = srMetadataSerializerIn; + } + + public ResourceLocation getResourceLocation() + { + return this.srResourceLocation; + } + + public InputStream getInputStream() + { + return this.resourceInputStream; + } + + public boolean hasMetadata() + { + return this.mcmetaInputStream != null; + } + + @Nullable + public T getMetadata(String sectionName) + { + if (!this.hasMetadata()) + { + return (T)null; + } + else + { + if (this.mcmetaJson == null && !this.mcmetaJsonChecked) + { + this.mcmetaJsonChecked = true; + BufferedReader bufferedreader = null; + + try + { + bufferedreader = new BufferedReader(new InputStreamReader(this.mcmetaInputStream, StandardCharsets.UTF_8)); + this.mcmetaJson = (new JsonParser()).parse(bufferedreader).getAsJsonObject(); + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + } + + T t = (T)this.mapMetadataSections.get(sectionName); + + if (t == null) + { + t = this.srMetadataSerializer.parseMetadataSection(sectionName, this.mcmetaJson); + } + + return t; + } + } + + public String getResourcePackName() + { + return this.resourcePackName; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof SimpleResource)) + { + return false; + } + else + { + SimpleResource simpleresource = (SimpleResource)p_equals_1_; + + if (this.srResourceLocation != null) + { + if (!this.srResourceLocation.equals(simpleresource.srResourceLocation)) + { + return false; + } + } + else if (simpleresource.srResourceLocation != null) + { + return false; + } + + if (this.resourcePackName != null) + { + if (!this.resourcePackName.equals(simpleresource.resourcePackName)) + { + return false; + } + } + else if (simpleresource.resourcePackName != null) + { + return false; + } + + return true; + } + } + + public int hashCode() + { + int i = this.resourcePackName != null ? this.resourcePackName.hashCode() : 0; + i = 31 * i + (this.srResourceLocation != null ? this.srResourceLocation.hashCode() : 0); + return i; + } + + public void close() throws IOException + { + this.resourceInputStream.close(); + + if (this.mcmetaInputStream != null) + { + this.mcmetaInputStream.close(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/SkinManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/SkinManager.java new file mode 100644 index 0000000..0535665 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/SkinManager.java @@ -0,0 +1,171 @@ +package net.minecraft.client.resources; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.Maps; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.InsecureTextureException; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; +import java.awt.image.BufferedImage; +import java.io.File; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IImageBuffer; +import net.minecraft.client.renderer.ImageBufferDownload; +import net.minecraft.client.renderer.ThreadDownloadImageData; +import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SkinManager +{ + private static final ExecutorService THREAD_POOL = new ThreadPoolExecutor(0, 2, 1L, TimeUnit.MINUTES, new LinkedBlockingQueue()); + private final TextureManager textureManager; + private final File skinCacheDir; + private final MinecraftSessionService sessionService; + private final LoadingCache> skinCacheLoader; + + public SkinManager(TextureManager textureManagerInstance, File skinCacheDirectory, MinecraftSessionService sessionService) + { + this.textureManager = textureManagerInstance; + this.skinCacheDir = skinCacheDirectory; + this.sessionService = sessionService; + this.skinCacheLoader = CacheBuilder.newBuilder().expireAfterAccess(15L, TimeUnit.SECONDS).>build(new CacheLoader>() + { + public Map load(GameProfile p_load_1_) throws Exception + { + try + { + return Minecraft.getMinecraft().getSessionService().getTextures(p_load_1_, false); + } + catch (Throwable var3) + { + return Maps.newHashMap(); + } + } + }); + } + + /** + * Used in the Skull renderer to fetch a skin. May download the skin if it's not in the cache + */ + public ResourceLocation loadSkin(MinecraftProfileTexture profileTexture, Type textureType) + { + return this.loadSkin(profileTexture, textureType, (SkinManager.SkinAvailableCallback)null); + } + + /** + * May download the skin if its not in the cache, can be passed a SkinManager#SkinAvailableCallback for handling + */ + public ResourceLocation loadSkin(final MinecraftProfileTexture profileTexture, final Type textureType, @Nullable final SkinManager.SkinAvailableCallback skinAvailableCallback) + { + final ResourceLocation resourcelocation = new ResourceLocation("skins/" + profileTexture.getHash()); + ITextureObject itextureobject = this.textureManager.getTexture(resourcelocation); + + if (itextureobject != null) + { + if (skinAvailableCallback != null) + { + skinAvailableCallback.skinAvailable(textureType, resourcelocation, profileTexture); + } + } + else + { + File file1 = new File(this.skinCacheDir, profileTexture.getHash().length() > 2 ? profileTexture.getHash().substring(0, 2) : "xx"); + File file2 = new File(file1, profileTexture.getHash()); + final IImageBuffer iimagebuffer = textureType == Type.SKIN ? new ImageBufferDownload() : null; + ThreadDownloadImageData threaddownloadimagedata = new ThreadDownloadImageData(file2, profileTexture.getUrl(), DefaultPlayerSkin.getDefaultSkinLegacy(), new IImageBuffer() + { + public BufferedImage parseUserSkin(BufferedImage image) + { + if (iimagebuffer != null) + { + image = iimagebuffer.parseUserSkin(image); + } + + return image; + } + public void skinAvailable() + { + if (iimagebuffer != null) + { + iimagebuffer.skinAvailable(); + } + + if (skinAvailableCallback != null) + { + skinAvailableCallback.skinAvailable(textureType, resourcelocation, profileTexture); + } + } + }); + this.textureManager.loadTexture(resourcelocation, threaddownloadimagedata); + } + + return resourcelocation; + } + + public void loadProfileTextures(final GameProfile profile, final SkinManager.SkinAvailableCallback skinAvailableCallback, final boolean requireSecure) + { + THREAD_POOL.submit(new Runnable() + { + public void run() + { + final Map map = Maps.newHashMap(); + + try + { + map.putAll(SkinManager.this.sessionService.getTextures(profile, requireSecure)); + } + catch (InsecureTextureException var3) + { + ; + } + + if (map.isEmpty() && profile.getId().equals(Minecraft.getMinecraft().getSession().getProfile().getId())) + { + profile.getProperties().clear(); + profile.getProperties().putAll(Minecraft.getMinecraft().getProfileProperties()); + map.putAll(SkinManager.this.sessionService.getTextures(profile, false)); + } + + Minecraft.getMinecraft().addScheduledTask(new Runnable() + { + public void run() + { + if (map.containsKey(Type.SKIN)) + { + SkinManager.this.loadSkin(map.get(Type.SKIN), Type.SKIN, skinAvailableCallback); + } + + if (map.containsKey(Type.CAPE)) + { + SkinManager.this.loadSkin(map.get(Type.CAPE), Type.CAPE, skinAvailableCallback); + } + } + }); + } + }); + } + + public Map loadSkinFromCache(GameProfile profile) + { + return (Map)this.skinCacheLoader.getUnchecked(profile); + } + + @SideOnly(Side.CLIENT) + public interface SkinAvailableCallback + { + void skinAvailable(Type typeIn, ResourceLocation location, MinecraftProfileTexture profileTexture); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationFrame.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationFrame.java new file mode 100644 index 0000000..25c4140 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationFrame.java @@ -0,0 +1,37 @@ +package net.minecraft.client.resources.data; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class AnimationFrame +{ + private final int frameIndex; + private final int frameTime; + + public AnimationFrame(int frameIndexIn) + { + this(frameIndexIn, -1); + } + + public AnimationFrame(int frameIndexIn, int frameTimeIn) + { + this.frameIndex = frameIndexIn; + this.frameTime = frameTimeIn; + } + + public boolean hasNoTime() + { + return this.frameTime == -1; + } + + public int getFrameTime() + { + return this.frameTime; + } + + public int getFrameIndex() + { + return this.frameIndex; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationMetadataSection.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationMetadataSection.java new file mode 100644 index 0000000..46bb362 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationMetadataSection.java @@ -0,0 +1,84 @@ +package net.minecraft.client.resources.data; + +import com.google.common.collect.Sets; +import java.util.List; +import java.util.Set; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class AnimationMetadataSection implements IMetadataSection +{ + private final List animationFrames; + private final int frameWidth; + private final int frameHeight; + private final int frameTime; + private final boolean interpolate; + + public AnimationMetadataSection(List animationFramesIn, int frameWidthIn, int frameHeightIn, int frameTimeIn, boolean interpolateIn) + { + this.animationFrames = animationFramesIn; + this.frameWidth = frameWidthIn; + this.frameHeight = frameHeightIn; + this.frameTime = frameTimeIn; + this.interpolate = interpolateIn; + } + + public int getFrameHeight() + { + return this.frameHeight; + } + + public int getFrameWidth() + { + return this.frameWidth; + } + + public int getFrameCount() + { + return this.animationFrames.size(); + } + + public int getFrameTime() + { + return this.frameTime; + } + + public boolean isInterpolate() + { + return this.interpolate; + } + + private AnimationFrame getAnimationFrame(int frame) + { + return this.animationFrames.get(frame); + } + + public int getFrameTimeSingle(int frame) + { + AnimationFrame animationframe = this.getAnimationFrame(frame); + return animationframe.hasNoTime() ? this.frameTime : animationframe.getFrameTime(); + } + + public boolean frameHasTime(int frame) + { + return !((AnimationFrame)this.animationFrames.get(frame)).hasNoTime(); + } + + public int getFrameIndex(int frame) + { + return ((AnimationFrame)this.animationFrames.get(frame)).getFrameIndex(); + } + + public Set getFrameIndexSet() + { + Set set = Sets.newHashSet(); + + for (AnimationFrame animationframe : this.animationFrames) + { + set.add(Integer.valueOf(animationframe.getFrameIndex())); + } + + return set; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java new file mode 100644 index 0000000..3a4b393 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/AnimationMetadataSectionSerializer.java @@ -0,0 +1,146 @@ +package net.minecraft.client.resources.data; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import java.util.List; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; + +@SideOnly(Side.CLIENT) +public class AnimationMetadataSectionSerializer extends BaseMetadataSectionSerializer implements JsonSerializer +{ + public AnimationMetadataSection deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + List list = Lists.newArrayList(); + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "metadata section"); + int i = JsonUtils.getInt(jsonobject, "frametime", 1); + + if (i != 1) + { + Validate.inclusiveBetween(1L, 2147483647L, (long)i, "Invalid default frame time"); + } + + if (jsonobject.has("frames")) + { + try + { + JsonArray jsonarray = JsonUtils.getJsonArray(jsonobject, "frames"); + + for (int j = 0; j < jsonarray.size(); ++j) + { + JsonElement jsonelement = jsonarray.get(j); + AnimationFrame animationframe = this.parseAnimationFrame(j, jsonelement); + + if (animationframe != null) + { + list.add(animationframe); + } + } + } + catch (ClassCastException classcastexception) + { + throw new JsonParseException("Invalid animation->frames: expected array, was " + jsonobject.get("frames"), classcastexception); + } + } + + int k = JsonUtils.getInt(jsonobject, "width", -1); + int l = JsonUtils.getInt(jsonobject, "height", -1); + + if (k != -1) + { + Validate.inclusiveBetween(1L, 2147483647L, (long)k, "Invalid width"); + } + + if (l != -1) + { + Validate.inclusiveBetween(1L, 2147483647L, (long)l, "Invalid height"); + } + + boolean flag = JsonUtils.getBoolean(jsonobject, "interpolate", false); + return new AnimationMetadataSection(list, k, l, i, flag); + } + + private AnimationFrame parseAnimationFrame(int frame, JsonElement element) + { + if (element.isJsonPrimitive()) + { + return new AnimationFrame(JsonUtils.getInt(element, "frames[" + frame + "]")); + } + else if (element.isJsonObject()) + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "frames[" + frame + "]"); + int i = JsonUtils.getInt(jsonobject, "time", -1); + + if (jsonobject.has("time")) + { + Validate.inclusiveBetween(1L, 2147483647L, (long)i, "Invalid frame time"); + } + + int j = JsonUtils.getInt(jsonobject, "index"); + Validate.inclusiveBetween(0L, 2147483647L, (long)j, "Invalid frame index"); + return new AnimationFrame(j, i); + } + else + { + return null; + } + } + + public JsonElement serialize(AnimationMetadataSection p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + jsonobject.addProperty("frametime", Integer.valueOf(p_serialize_1_.getFrameTime())); + + if (p_serialize_1_.getFrameWidth() != -1) + { + jsonobject.addProperty("width", Integer.valueOf(p_serialize_1_.getFrameWidth())); + } + + if (p_serialize_1_.getFrameHeight() != -1) + { + jsonobject.addProperty("height", Integer.valueOf(p_serialize_1_.getFrameHeight())); + } + + if (p_serialize_1_.getFrameCount() > 0) + { + JsonArray jsonarray = new JsonArray(); + + for (int i = 0; i < p_serialize_1_.getFrameCount(); ++i) + { + if (p_serialize_1_.frameHasTime(i)) + { + JsonObject jsonobject1 = new JsonObject(); + jsonobject1.addProperty("index", Integer.valueOf(p_serialize_1_.getFrameIndex(i))); + jsonobject1.addProperty("time", Integer.valueOf(p_serialize_1_.getFrameTimeSingle(i))); + jsonarray.add(jsonobject1); + } + else + { + jsonarray.add(new JsonPrimitive(p_serialize_1_.getFrameIndex(i))); + } + } + + jsonobject.add("frames", jsonarray); + } + + return jsonobject; + } + + /** + * The name of this section type as it appears in JSON. + */ + public String getSectionName() + { + return "animation"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java new file mode 100644 index 0000000..77cefdf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/BaseMetadataSectionSerializer.java @@ -0,0 +1,9 @@ +package net.minecraft.client.resources.data; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class BaseMetadataSectionSerializer implements IMetadataSectionSerializer +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/FontMetadataSection.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/FontMetadataSection.java new file mode 100644 index 0000000..a1e9037 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/FontMetadataSection.java @@ -0,0 +1,19 @@ +package net.minecraft.client.resources.data; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FontMetadataSection implements IMetadataSection +{ + private final float[] charWidths; + private final float[] charLefts; + private final float[] charSpacings; + + public FontMetadataSection(float[] charWidthsIn, float[] charLeftsIn, float[] charSpacingsIn) + { + this.charWidths = charWidthsIn; + this.charLefts = charLeftsIn; + this.charSpacings = charSpacingsIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java new file mode 100644 index 0000000..bcabf26 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/FontMetadataSectionSerializer.java @@ -0,0 +1,85 @@ +package net.minecraft.client.resources.data; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; + +@SideOnly(Side.CLIENT) +public class FontMetadataSectionSerializer extends BaseMetadataSectionSerializer +{ + public FontMetadataSection deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + float[] afloat = new float[256]; + float[] afloat1 = new float[256]; + float[] afloat2 = new float[256]; + float f = 1.0F; + float f1 = 0.0F; + float f2 = 0.0F; + + if (jsonobject.has("characters")) + { + if (!jsonobject.get("characters").isJsonObject()) + { + throw new JsonParseException("Invalid font->characters: expected object, was " + jsonobject.get("characters")); + } + + JsonObject jsonobject1 = jsonobject.getAsJsonObject("characters"); + + if (jsonobject1.has("default")) + { + if (!jsonobject1.get("default").isJsonObject()) + { + throw new JsonParseException("Invalid font->characters->default: expected object, was " + jsonobject1.get("default")); + } + + JsonObject jsonobject2 = jsonobject1.getAsJsonObject("default"); + f = JsonUtils.getFloat(jsonobject2, "width", f); + Validate.inclusiveBetween(0.0D, 3.4028234663852886E38D, (double)f, "Invalid default width"); + f1 = JsonUtils.getFloat(jsonobject2, "spacing", f1); + Validate.inclusiveBetween(0.0D, 3.4028234663852886E38D, (double)f1, "Invalid default spacing"); + f2 = JsonUtils.getFloat(jsonobject2, "left", f1); + Validate.inclusiveBetween(0.0D, 3.4028234663852886E38D, (double)f2, "Invalid default left"); + } + + for (int i = 0; i < 256; ++i) + { + JsonElement jsonelement = jsonobject1.get(Integer.toString(i)); + float f3 = f; + float f4 = f1; + float f5 = f2; + + if (jsonelement != null) + { + JsonObject jsonobject3 = JsonUtils.getJsonObject(jsonelement, "characters[" + i + "]"); + f3 = JsonUtils.getFloat(jsonobject3, "width", f); + Validate.inclusiveBetween(0.0D, 3.4028234663852886E38D, (double)f3, "Invalid width"); + f4 = JsonUtils.getFloat(jsonobject3, "spacing", f1); + Validate.inclusiveBetween(0.0D, 3.4028234663852886E38D, (double)f4, "Invalid spacing"); + f5 = JsonUtils.getFloat(jsonobject3, "left", f2); + Validate.inclusiveBetween(0.0D, 3.4028234663852886E38D, (double)f5, "Invalid left"); + } + + afloat[i] = f3; + afloat1[i] = f4; + afloat2[i] = f5; + } + } + + return new FontMetadataSection(afloat, afloat2, afloat1); + } + + /** + * The name of this section type as it appears in JSON. + */ + public String getSectionName() + { + return "font"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/IMetadataSection.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/IMetadataSection.java new file mode 100644 index 0000000..69cdd32 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/IMetadataSection.java @@ -0,0 +1,9 @@ +package net.minecraft.client.resources.data; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IMetadataSection +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/IMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/IMetadataSectionSerializer.java new file mode 100644 index 0000000..dff98df --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/IMetadataSectionSerializer.java @@ -0,0 +1,14 @@ +package net.minecraft.client.resources.data; + +import com.google.gson.JsonDeserializer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface IMetadataSectionSerializer extends JsonDeserializer +{ + /** + * The name of this section type as it appears in JSON. + */ + String getSectionName(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/LanguageMetadataSection.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/LanguageMetadataSection.java new file mode 100644 index 0000000..e5574d0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/LanguageMetadataSection.java @@ -0,0 +1,22 @@ +package net.minecraft.client.resources.data; + +import java.util.Collection; +import net.minecraft.client.resources.Language; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LanguageMetadataSection implements IMetadataSection +{ + private final Collection languages; + + public LanguageMetadataSection(Collection languagesIn) + { + this.languages = languagesIn; + } + + public Collection getLanguages() + { + return this.languages; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java new file mode 100644 index 0000000..5863ff9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/LanguageMetadataSectionSerializer.java @@ -0,0 +1,64 @@ +package net.minecraft.client.resources.data; + +import com.google.common.collect.Sets; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import java.util.Set; +import java.util.Map.Entry; +import net.minecraft.client.resources.Language; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class LanguageMetadataSectionSerializer extends BaseMetadataSectionSerializer +{ + public LanguageMetadataSection deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + Set set = Sets.newHashSet(); + + for (Entry entry : jsonobject.entrySet()) + { + String s = entry.getKey(); + + if (s.length() > 16) + { + throw new JsonParseException("Invalid language->'" + s + "': language code must not be more than " + 16 + " characters long"); + } + + JsonObject jsonobject1 = JsonUtils.getJsonObject(entry.getValue(), "language"); + String s1 = JsonUtils.getString(jsonobject1, "region"); + String s2 = JsonUtils.getString(jsonobject1, "name"); + boolean flag = JsonUtils.getBoolean(jsonobject1, "bidirectional", false); + + if (s1.isEmpty()) + { + throw new JsonParseException("Invalid language->'" + s + "'->region: empty value"); + } + + if (s2.isEmpty()) + { + throw new JsonParseException("Invalid language->'" + s + "'->name: empty value"); + } + + if (!set.add(new Language(s, s1, s2, flag))) + { + throw new JsonParseException("Duplicate language->'" + s + "' defined"); + } + } + + return new LanguageMetadataSection(set); + } + + /** + * The name of this section type as it appears in JSON. + */ + public String getSectionName() + { + return "language"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/MetadataSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/MetadataSerializer.java new file mode 100644 index 0000000..389fedc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/MetadataSerializer.java @@ -0,0 +1,92 @@ +package net.minecraft.client.resources.data; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import net.minecraft.util.EnumTypeAdapterFactory; +import net.minecraft.util.registry.IRegistry; +import net.minecraft.util.registry.RegistrySimple; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MetadataSerializer +{ + private final IRegistry < String, MetadataSerializer.Registration > metadataSectionSerializerRegistry = new RegistrySimple < String, MetadataSerializer.Registration > (); + private final GsonBuilder gsonBuilder = new GsonBuilder(); + /** Cached Gson instance. Set to null when more sections are registered, and then re-created from the builder. */ + private Gson gson; + + public MetadataSerializer() + { + this.gsonBuilder.registerTypeHierarchyAdapter(ITextComponent.class, new ITextComponent.Serializer()); + this.gsonBuilder.registerTypeHierarchyAdapter(Style.class, new Style.Serializer()); + this.gsonBuilder.registerTypeAdapterFactory(new EnumTypeAdapterFactory()); + } + + public void registerMetadataSectionType(IMetadataSectionSerializer metadataSectionSerializer, Class clazz) + { + this.metadataSectionSerializerRegistry.putObject(metadataSectionSerializer.getSectionName(), new MetadataSerializer.Registration(metadataSectionSerializer, clazz)); + this.gsonBuilder.registerTypeAdapter(clazz, metadataSectionSerializer); + this.gson = null; + } + + public T parseMetadataSection(String sectionName, JsonObject json) + { + if (sectionName == null) + { + throw new IllegalArgumentException("Metadata section name cannot be null"); + } + else if (!json.has(sectionName)) + { + return (T)null; + } + else if (!json.get(sectionName).isJsonObject()) + { + throw new IllegalArgumentException("Invalid metadata for '" + sectionName + "' - expected object, found " + json.get(sectionName)); + } + else + { + MetadataSerializer.Registration registration = (MetadataSerializer.Registration)this.metadataSectionSerializerRegistry.getObject(sectionName); + + if (registration == null) + { + throw new IllegalArgumentException("Don't know how to handle metadata section '" + sectionName + "'"); + } + else + { + return (T)(this.getGson().fromJson(json.getAsJsonObject(sectionName), registration.clazz)); + } + } + } + + /** + * Returns a Gson instance with type adapters registered for metadata sections. + */ + private Gson getGson() + { + if (this.gson == null) + { + this.gson = this.gsonBuilder.create(); + } + + return this.gson; + } + + @SideOnly(Side.CLIENT) + class Registration + { + /** The IMetadataSectionSerializer associated with the class registered */ + final IMetadataSectionSerializer section; + /** The class registered */ + final Class clazz; + + private Registration(IMetadataSectionSerializer metadataSectionSerializer, Class clazzToRegister) + { + this.section = metadataSectionSerializer; + this.clazz = clazzToRegister; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/PackMetadataSection.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/PackMetadataSection.java new file mode 100644 index 0000000..eb4e0fa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/PackMetadataSection.java @@ -0,0 +1,28 @@ +package net.minecraft.client.resources.data; + +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class PackMetadataSection implements IMetadataSection +{ + private final ITextComponent packDescription; + private final int packFormat; + + public PackMetadataSection(ITextComponent packDescriptionIn, int packFormatIn) + { + this.packDescription = packDescriptionIn; + this.packFormat = packFormatIn; + } + + public ITextComponent getPackDescription() + { + return this.packDescription; + } + + public int getPackFormat() + { + return this.packFormat; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java new file mode 100644 index 0000000..0b3a353 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/PackMetadataSectionSerializer.java @@ -0,0 +1,49 @@ +package net.minecraft.client.resources.data; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class PackMetadataSectionSerializer extends BaseMetadataSectionSerializer implements JsonSerializer +{ + public PackMetadataSection deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + ITextComponent itextcomponent = (ITextComponent)p_deserialize_3_.deserialize(jsonobject.get("description"), ITextComponent.class); + + if (itextcomponent == null) + { + throw new JsonParseException("Invalid/missing description!"); + } + else + { + int i = JsonUtils.getInt(jsonobject, "pack_format"); + return new PackMetadataSection(itextcomponent, i); + } + } + + public JsonElement serialize(PackMetadataSection p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + jsonobject.addProperty("pack_format", Integer.valueOf(p_serialize_1_.getPackFormat())); + jsonobject.add("description", p_serialize_3_.serialize(p_serialize_1_.getPackDescription())); + return jsonobject; + } + + /** + * The name of this section type as it appears in JSON. + */ + public String getSectionName() + { + return "pack"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/TextureMetadataSection.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/TextureMetadataSection.java new file mode 100644 index 0000000..d474090 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/TextureMetadataSection.java @@ -0,0 +1,27 @@ +package net.minecraft.client.resources.data; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureMetadataSection implements IMetadataSection +{ + private final boolean textureBlur; + private final boolean textureClamp; + + public TextureMetadataSection(boolean textureBlurIn, boolean textureClampIn) + { + this.textureBlur = textureBlurIn; + this.textureClamp = textureClampIn; + } + + public boolean getTextureBlur() + { + return this.textureBlur; + } + + public boolean getTextureClamp() + { + return this.textureClamp; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java new file mode 100644 index 0000000..59fde89 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/TextureMetadataSectionSerializer.java @@ -0,0 +1,30 @@ +package net.minecraft.client.resources.data; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TextureMetadataSectionSerializer extends BaseMetadataSectionSerializer +{ + public TextureMetadataSection deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + boolean flag = JsonUtils.getBoolean(jsonobject, "blur", false); + boolean flag1 = JsonUtils.getBoolean(jsonobject, "clamp", false); + return new TextureMetadataSection(flag, flag1); + } + + /** + * The name of this section type as it appears in JSON. + */ + public String getSectionName() + { + return "texture"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/package-info.java new file mode 100644 index 0000000..2fef0a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/data/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.resources.data; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/resources/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/resources/package-info.java new file mode 100644 index 0000000..944a2cd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/resources/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.resources; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/settings/CreativeSettings.java b/build/tmp/recompileMc/sources/net/minecraft/client/settings/CreativeSettings.java new file mode 100644 index 0000000..642dd15 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/settings/CreativeSettings.java @@ -0,0 +1,78 @@ +package net.minecraft.client.settings; + +import java.io.File; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class CreativeSettings +{ + private static final Logger LOGGER = LogManager.getLogger(); + protected Minecraft minecraft; + private final File dataFile; + private final HotbarSnapshot[] hotbarSnapshots = new HotbarSnapshot[9]; + + public CreativeSettings(Minecraft minecraftIn, File dataDir) + { + this.minecraft = minecraftIn; + this.dataFile = new File(dataDir, "hotbar.nbt"); + + for (int i = 0; i < 9; ++i) + { + this.hotbarSnapshots[i] = new HotbarSnapshot(); + } + + this.read(); + } + + public void read() + { + try + { + NBTTagCompound nbttagcompound = CompressedStreamTools.read(this.dataFile); + + if (nbttagcompound == null) + { + return; + } + + for (int i = 0; i < 9; ++i) + { + this.hotbarSnapshots[i].fromTag(nbttagcompound.getTagList(String.valueOf(i), 10)); + } + } + catch (Exception exception) + { + LOGGER.error("Failed to load creative mode options", (Throwable)exception); + } + } + + public void write() + { + try + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + for (int i = 0; i < 9; ++i) + { + nbttagcompound.setTag(String.valueOf(i), this.hotbarSnapshots[i].createTag()); + } + + CompressedStreamTools.write(nbttagcompound, this.dataFile); + } + catch (Exception exception) + { + LOGGER.error("Failed to save creative mode options", (Throwable)exception); + } + } + + public HotbarSnapshot getHotbarSnapshot(int p_192563_1_) + { + return this.hotbarSnapshots[p_192563_1_]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/settings/GameSettings.java b/build/tmp/recompileMc/sources/net/minecraft/client/settings/GameSettings.java new file mode 100644 index 0000000..fce4bab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/settings/GameSettings.java @@ -0,0 +1,1537 @@ +package net.minecraft.client.settings; + +import com.google.common.base.Splitter; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiNewChat; +import net.minecraft.client.gui.chat.NarratorChatListener; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.tutorial.TutorialSteps; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.client.CPacketClientSettings; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.EnumDifficulty; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; + +@SideOnly(Side.CLIENT) +public class GameSettings +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Gson GSON = new Gson(); + private static final Type TYPE_LIST_STRING = new ParameterizedType() + { + public Type[] getActualTypeArguments() + { + return new Type[] {String.class}; + } + public Type getRawType() + { + return List.class; + } + public Type getOwnerType() + { + return null; + } + }; + public static final Splitter COLON_SPLITTER = Splitter.on(':'); + /** GUI scale values */ + private static final String[] GUISCALES = new String[] {"options.guiScale.auto", "options.guiScale.small", "options.guiScale.normal", "options.guiScale.large"}; + private static final String[] PARTICLES = new String[] {"options.particles.all", "options.particles.decreased", "options.particles.minimal"}; + private static final String[] AMBIENT_OCCLUSIONS = new String[] {"options.ao.off", "options.ao.min", "options.ao.max"}; + private static final String[] CLOUDS_TYPES = new String[] {"options.off", "options.clouds.fast", "options.clouds.fancy"}; + private static final String[] ATTACK_INDICATORS = new String[] {"options.off", "options.attack.crosshair", "options.attack.hotbar"}; + public static final String[] NARRATOR_MODES = new String[] {"options.narrator.off", "options.narrator.all", "options.narrator.chat", "options.narrator.system"}; + public float mouseSensitivity = 0.5F; + public boolean invertMouse; + public int renderDistanceChunks = -1; + public boolean viewBobbing = true; + public boolean anaglyph; + public boolean fboEnable = true; + public int limitFramerate = 120; + /** Clouds flag */ + public int clouds = 2; + public boolean fancyGraphics = true; + /** Smooth Lighting */ + public int ambientOcclusion = 2; + public List resourcePacks = Lists.newArrayList(); + public List incompatibleResourcePacks = Lists.newArrayList(); + public EntityPlayer.EnumChatVisibility chatVisibility = EntityPlayer.EnumChatVisibility.FULL; + public boolean chatColours = true; + public boolean chatLinks = true; + public boolean chatLinksPrompt = true; + public float chatOpacity = 1.0F; + public boolean snooperEnabled = true; + public boolean fullScreen; + public boolean enableVsync = true; + public boolean useVbo = true; + public boolean reducedDebugInfo; + public boolean hideServerAddress; + /** Whether to show advanced information on item tooltips, toggled by F3+H */ + public boolean advancedItemTooltips; + /** Whether to pause when the game loses focus, toggled by F3+P */ + public boolean pauseOnLostFocus = true; + private final Set setModelParts = Sets.newHashSet(EnumPlayerModelParts.values()); + public boolean touchscreen; + public EnumHandSide mainHand = EnumHandSide.RIGHT; + public int overrideWidth; + public int overrideHeight; + public boolean heldItemTooltips = true; + public float chatScale = 1.0F; + public float chatWidth = 1.0F; + public float chatHeightUnfocused = 0.44366196F; + public float chatHeightFocused = 1.0F; + public int mipmapLevels = 4; + private final Map soundLevels = Maps.newEnumMap(SoundCategory.class); + public boolean useNativeTransport = true; + public boolean entityShadows = true; + public int attackIndicator = 1; + public boolean enableWeakAttacks; + public boolean showSubtitles; + public boolean realmsNotifications = true; + public boolean autoJump = true; + public TutorialSteps tutorialStep = TutorialSteps.MOVEMENT; + public KeyBinding keyBindForward = new KeyBinding("key.forward", 17, "key.categories.movement"); + public KeyBinding keyBindLeft = new KeyBinding("key.left", 30, "key.categories.movement"); + public KeyBinding keyBindBack = new KeyBinding("key.back", 31, "key.categories.movement"); + public KeyBinding keyBindRight = new KeyBinding("key.right", 32, "key.categories.movement"); + public KeyBinding keyBindJump = new KeyBinding("key.jump", 57, "key.categories.movement"); + public KeyBinding keyBindSneak = new KeyBinding("key.sneak", 42, "key.categories.movement"); + public KeyBinding keyBindSprint = new KeyBinding("key.sprint", 29, "key.categories.movement"); + public KeyBinding keyBindInventory = new KeyBinding("key.inventory", 18, "key.categories.inventory"); + public KeyBinding keyBindSwapHands = new KeyBinding("key.swapHands", 33, "key.categories.inventory"); + public KeyBinding keyBindDrop = new KeyBinding("key.drop", 16, "key.categories.inventory"); + public KeyBinding keyBindUseItem = new KeyBinding("key.use", -99, "key.categories.gameplay"); + public KeyBinding keyBindAttack = new KeyBinding("key.attack", -100, "key.categories.gameplay"); + public KeyBinding keyBindPickBlock = new KeyBinding("key.pickItem", -98, "key.categories.gameplay"); + public KeyBinding keyBindChat = new KeyBinding("key.chat", 20, "key.categories.multiplayer"); + public KeyBinding keyBindPlayerList = new KeyBinding("key.playerlist", 15, "key.categories.multiplayer"); + public KeyBinding keyBindCommand = new KeyBinding("key.command", 53, "key.categories.multiplayer"); + public KeyBinding keyBindScreenshot = new KeyBinding("key.screenshot", 60, "key.categories.misc"); + public KeyBinding keyBindTogglePerspective = new KeyBinding("key.togglePerspective", 63, "key.categories.misc"); + public KeyBinding keyBindSmoothCamera = new KeyBinding("key.smoothCamera", 0, "key.categories.misc"); + public KeyBinding keyBindFullscreen = new KeyBinding("key.fullscreen", 87, "key.categories.misc"); + public KeyBinding keyBindSpectatorOutlines = new KeyBinding("key.spectatorOutlines", 0, "key.categories.misc"); + public KeyBinding keyBindAdvancements = new KeyBinding("key.advancements", 38, "key.categories.misc"); + public KeyBinding[] keyBindsHotbar = new KeyBinding[] {new KeyBinding("key.hotbar.1", 2, "key.categories.inventory"), new KeyBinding("key.hotbar.2", 3, "key.categories.inventory"), new KeyBinding("key.hotbar.3", 4, "key.categories.inventory"), new KeyBinding("key.hotbar.4", 5, "key.categories.inventory"), new KeyBinding("key.hotbar.5", 6, "key.categories.inventory"), new KeyBinding("key.hotbar.6", 7, "key.categories.inventory"), new KeyBinding("key.hotbar.7", 8, "key.categories.inventory"), new KeyBinding("key.hotbar.8", 9, "key.categories.inventory"), new KeyBinding("key.hotbar.9", 10, "key.categories.inventory")}; + public KeyBinding keyBindSaveToolbar = new KeyBinding("key.saveToolbarActivator", 46, "key.categories.creative"); + public KeyBinding keyBindLoadToolbar = new KeyBinding("key.loadToolbarActivator", 45, "key.categories.creative"); + public KeyBinding[] keyBindings; + protected Minecraft mc; + private File optionsFile; + public EnumDifficulty difficulty; + public boolean hideGUI; + public int thirdPersonView; + /** true if debug info should be displayed instead of version */ + public boolean showDebugInfo; + public boolean showDebugProfilerChart; + public boolean showLagometer; + /** The lastServer string. */ + public String lastServer; + /** Smooth Camera Toggle */ + public boolean smoothCamera; + public boolean debugCamEnable; + public float fovSetting; + public float gammaSetting; + public float saturation; + /** GUI scale */ + public int guiScale; + /** Determines amount of particles. 0 = All, 1 = Decreased, 2 = Minimal */ + public int particleSetting; + public int narrator; + /** Game settings language */ + public String language; + public boolean forceUnicodeFont; + + public GameSettings(Minecraft mcIn, File mcDataDir) + { + setForgeKeybindProperties(); + this.keyBindings = (KeyBinding[])ArrayUtils.addAll(new KeyBinding[] {this.keyBindAttack, this.keyBindUseItem, this.keyBindForward, this.keyBindLeft, this.keyBindBack, this.keyBindRight, this.keyBindJump, this.keyBindSneak, this.keyBindSprint, this.keyBindDrop, this.keyBindInventory, this.keyBindChat, this.keyBindPlayerList, this.keyBindPickBlock, this.keyBindCommand, this.keyBindScreenshot, this.keyBindTogglePerspective, this.keyBindSmoothCamera, this.keyBindFullscreen, this.keyBindSpectatorOutlines, this.keyBindSwapHands, this.keyBindSaveToolbar, this.keyBindLoadToolbar, this.keyBindAdvancements}, this.keyBindsHotbar); + this.difficulty = EnumDifficulty.NORMAL; + this.lastServer = ""; + this.fovSetting = 70.0F; + this.language = "en_us"; + this.mc = mcIn; + this.optionsFile = new File(mcDataDir, "options.txt"); + + if (mcIn.isJava64bit() && Runtime.getRuntime().maxMemory() >= 1000000000L) + { + GameSettings.Options.RENDER_DISTANCE.setValueMax(32.0F); + } + else + { + GameSettings.Options.RENDER_DISTANCE.setValueMax(16.0F); + } + + this.renderDistanceChunks = mcIn.isJava64bit() ? 12 : 8; + this.loadOptions(); + } + + public GameSettings() + { + setForgeKeybindProperties(); + this.keyBindings = (KeyBinding[])ArrayUtils.addAll(new KeyBinding[] {this.keyBindAttack, this.keyBindUseItem, this.keyBindForward, this.keyBindLeft, this.keyBindBack, this.keyBindRight, this.keyBindJump, this.keyBindSneak, this.keyBindSprint, this.keyBindDrop, this.keyBindInventory, this.keyBindChat, this.keyBindPlayerList, this.keyBindPickBlock, this.keyBindCommand, this.keyBindScreenshot, this.keyBindTogglePerspective, this.keyBindSmoothCamera, this.keyBindFullscreen, this.keyBindSpectatorOutlines, this.keyBindSwapHands, this.keyBindSaveToolbar, this.keyBindLoadToolbar, this.keyBindAdvancements}, this.keyBindsHotbar); + this.difficulty = EnumDifficulty.NORMAL; + this.lastServer = ""; + this.fovSetting = 70.0F; + this.language = "en_us"; + } + + /** + * Gets the display name for a key. + */ + public static String getKeyDisplayString(int key) + { + if (key < 0) + { + switch (key) + { + case -100: + return I18n.format("key.mouse.left"); + case -99: + return I18n.format("key.mouse.right"); + case -98: + return I18n.format("key.mouse.middle"); + default: + return I18n.format("key.mouseButton", key + 101); + } + } + else + { + return key < 256 ? Keyboard.getKeyName(key) : String.format("%c", (char)(key - 256)).toUpperCase(); + } + } + + /** + * Returns whether the specified key binding is currently being pressed. + */ + public static boolean isKeyDown(KeyBinding key) + { + int i = key.getKeyCode(); + + if (i != 0 && i < 256) + { + return i < 0 ? Mouse.isButtonDown(i + 100) : Keyboard.isKeyDown(i); + } + else + { + return false; + } + } + + /** + * Sets a key binding and then saves all settings. + */ + public void setOptionKeyBinding(KeyBinding key, int keyCode) + { + key.setKeyCode(keyCode); + this.saveOptions(); + } + + /** + * If the specified option is controlled by a slider (float value), this will set the float value. + */ + public void setOptionFloatValue(GameSettings.Options settingsOption, float value) + { + if (settingsOption == GameSettings.Options.SENSITIVITY) + { + this.mouseSensitivity = value; + } + + if (settingsOption == GameSettings.Options.FOV) + { + this.fovSetting = value; + } + + if (settingsOption == GameSettings.Options.GAMMA) + { + this.gammaSetting = value; + } + + if (settingsOption == GameSettings.Options.FRAMERATE_LIMIT) + { + this.limitFramerate = (int)value; + } + + if (settingsOption == GameSettings.Options.CHAT_OPACITY) + { + this.chatOpacity = value; + this.mc.ingameGUI.getChatGUI().refreshChat(); + } + + if (settingsOption == GameSettings.Options.CHAT_HEIGHT_FOCUSED) + { + this.chatHeightFocused = value; + this.mc.ingameGUI.getChatGUI().refreshChat(); + } + + if (settingsOption == GameSettings.Options.CHAT_HEIGHT_UNFOCUSED) + { + this.chatHeightUnfocused = value; + this.mc.ingameGUI.getChatGUI().refreshChat(); + } + + if (settingsOption == GameSettings.Options.CHAT_WIDTH) + { + this.chatWidth = value; + this.mc.ingameGUI.getChatGUI().refreshChat(); + } + + if (settingsOption == GameSettings.Options.CHAT_SCALE) + { + this.chatScale = value; + this.mc.ingameGUI.getChatGUI().refreshChat(); + } + + if (settingsOption == GameSettings.Options.MIPMAP_LEVELS) + { + int i = this.mipmapLevels; + this.mipmapLevels = (int)value; + + if ((float)i != value) + { + this.mc.getTextureMapBlocks().setMipmapLevels(this.mipmapLevels); + this.mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + this.mc.getTextureMapBlocks().setBlurMipmapDirect(false, this.mipmapLevels > 0); + this.needsBlockModelRefresh = true; // FORGE: fix for MC-64581 very laggy mipmap slider + } + } + + if (settingsOption == GameSettings.Options.RENDER_DISTANCE) + { + this.renderDistanceChunks = (int)value; + this.mc.renderGlobal.setDisplayListEntitiesDirty(); + } + } + + /** + * For non-float options. Toggles the option on/off, or cycles through the list i.e. render distances. + */ + public void setOptionValue(GameSettings.Options settingsOption, int value) + { + if (settingsOption == GameSettings.Options.RENDER_DISTANCE) + { + this.setOptionFloatValue(settingsOption, MathHelper.clamp((float)(this.renderDistanceChunks + value), settingsOption.getValueMin(), settingsOption.getValueMax())); + } + + if (settingsOption == GameSettings.Options.MAIN_HAND) + { + this.mainHand = this.mainHand.opposite(); + } + + if (settingsOption == GameSettings.Options.INVERT_MOUSE) + { + this.invertMouse = !this.invertMouse; + } + + if (settingsOption == GameSettings.Options.GUI_SCALE) + { + this.guiScale = this.guiScale + value & 3; + } + + if (settingsOption == GameSettings.Options.PARTICLES) + { + this.particleSetting = (this.particleSetting + value) % 3; + } + + if (settingsOption == GameSettings.Options.VIEW_BOBBING) + { + this.viewBobbing = !this.viewBobbing; + } + + if (settingsOption == GameSettings.Options.RENDER_CLOUDS) + { + this.clouds = (this.clouds + value) % 3; + } + + if (settingsOption == GameSettings.Options.FORCE_UNICODE_FONT) + { + this.forceUnicodeFont = !this.forceUnicodeFont; + this.mc.fontRenderer.setUnicodeFlag(this.mc.getLanguageManager().isCurrentLocaleUnicode() || this.forceUnicodeFont); + } + + if (settingsOption == GameSettings.Options.FBO_ENABLE) + { + this.fboEnable = !this.fboEnable; + } + + if (settingsOption == GameSettings.Options.ANAGLYPH) + { + this.anaglyph = !this.anaglyph; + net.minecraftforge.fml.client.FMLClientHandler.instance().refreshResources(net.minecraftforge.client.resource.VanillaResourceType.TEXTURES); + } + + if (settingsOption == GameSettings.Options.GRAPHICS) + { + this.fancyGraphics = !this.fancyGraphics; + this.mc.renderGlobal.loadRenderers(); + } + + if (settingsOption == GameSettings.Options.AMBIENT_OCCLUSION) + { + this.ambientOcclusion = (this.ambientOcclusion + value) % 3; + this.mc.renderGlobal.loadRenderers(); + } + + if (settingsOption == GameSettings.Options.CHAT_VISIBILITY) + { + this.chatVisibility = EntityPlayer.EnumChatVisibility.getEnumChatVisibility((this.chatVisibility.getChatVisibility() + value) % 3); + } + + if (settingsOption == GameSettings.Options.CHAT_COLOR) + { + this.chatColours = !this.chatColours; + } + + if (settingsOption == GameSettings.Options.CHAT_LINKS) + { + this.chatLinks = !this.chatLinks; + } + + if (settingsOption == GameSettings.Options.CHAT_LINKS_PROMPT) + { + this.chatLinksPrompt = !this.chatLinksPrompt; + } + + if (settingsOption == GameSettings.Options.SNOOPER_ENABLED) + { + this.snooperEnabled = !this.snooperEnabled; + } + + if (settingsOption == GameSettings.Options.TOUCHSCREEN) + { + this.touchscreen = !this.touchscreen; + } + + if (settingsOption == GameSettings.Options.USE_FULLSCREEN) + { + this.fullScreen = !this.fullScreen; + + if (this.mc.isFullScreen() != this.fullScreen) + { + this.mc.toggleFullscreen(); + } + } + + if (settingsOption == GameSettings.Options.ENABLE_VSYNC) + { + this.enableVsync = !this.enableVsync; + Display.setVSyncEnabled(this.enableVsync); + } + + if (settingsOption == GameSettings.Options.USE_VBO) + { + this.useVbo = !this.useVbo; + this.mc.renderGlobal.loadRenderers(); + } + + if (settingsOption == GameSettings.Options.REDUCED_DEBUG_INFO) + { + this.reducedDebugInfo = !this.reducedDebugInfo; + } + + if (settingsOption == GameSettings.Options.ENTITY_SHADOWS) + { + this.entityShadows = !this.entityShadows; + } + + if (settingsOption == GameSettings.Options.ATTACK_INDICATOR) + { + this.attackIndicator = (this.attackIndicator + value) % 3; + } + + if (settingsOption == GameSettings.Options.SHOW_SUBTITLES) + { + this.showSubtitles = !this.showSubtitles; + } + + if (settingsOption == GameSettings.Options.REALMS_NOTIFICATIONS) + { + this.realmsNotifications = !this.realmsNotifications; + } + + if (settingsOption == GameSettings.Options.AUTO_JUMP) + { + this.autoJump = !this.autoJump; + } + + if (settingsOption == GameSettings.Options.NARRATOR) + { + if (NarratorChatListener.INSTANCE.isActive()) + { + this.narrator = (this.narrator + value) % NARRATOR_MODES.length; + } + else + { + this.narrator = 0; + } + + NarratorChatListener.INSTANCE.announceMode(this.narrator); + } + + this.saveOptions(); + } + + public float getOptionFloatValue(GameSettings.Options settingOption) + { + if (settingOption == GameSettings.Options.FOV) + { + return this.fovSetting; + } + else if (settingOption == GameSettings.Options.GAMMA) + { + return this.gammaSetting; + } + else if (settingOption == GameSettings.Options.SATURATION) + { + return this.saturation; + } + else if (settingOption == GameSettings.Options.SENSITIVITY) + { + return this.mouseSensitivity; + } + else if (settingOption == GameSettings.Options.CHAT_OPACITY) + { + return this.chatOpacity; + } + else if (settingOption == GameSettings.Options.CHAT_HEIGHT_FOCUSED) + { + return this.chatHeightFocused; + } + else if (settingOption == GameSettings.Options.CHAT_HEIGHT_UNFOCUSED) + { + return this.chatHeightUnfocused; + } + else if (settingOption == GameSettings.Options.CHAT_SCALE) + { + return this.chatScale; + } + else if (settingOption == GameSettings.Options.CHAT_WIDTH) + { + return this.chatWidth; + } + else if (settingOption == GameSettings.Options.FRAMERATE_LIMIT) + { + return (float)this.limitFramerate; + } + else if (settingOption == GameSettings.Options.MIPMAP_LEVELS) + { + return (float)this.mipmapLevels; + } + else + { + return settingOption == GameSettings.Options.RENDER_DISTANCE ? (float)this.renderDistanceChunks : 0.0F; + } + } + + public boolean getOptionOrdinalValue(GameSettings.Options settingOption) + { + switch (settingOption) + { + case INVERT_MOUSE: + return this.invertMouse; + case VIEW_BOBBING: + return this.viewBobbing; + case ANAGLYPH: + return this.anaglyph; + case FBO_ENABLE: + return this.fboEnable; + case CHAT_COLOR: + return this.chatColours; + case CHAT_LINKS: + return this.chatLinks; + case CHAT_LINKS_PROMPT: + return this.chatLinksPrompt; + case SNOOPER_ENABLED: + return this.snooperEnabled; + case USE_FULLSCREEN: + return this.fullScreen; + case ENABLE_VSYNC: + return this.enableVsync; + case USE_VBO: + return this.useVbo; + case TOUCHSCREEN: + return this.touchscreen; + case FORCE_UNICODE_FONT: + return this.forceUnicodeFont; + case REDUCED_DEBUG_INFO: + return this.reducedDebugInfo; + case ENTITY_SHADOWS: + return this.entityShadows; + case SHOW_SUBTITLES: + return this.showSubtitles; + case REALMS_NOTIFICATIONS: + return this.realmsNotifications; + case ENABLE_WEAK_ATTACKS: + return this.enableWeakAttacks; + case AUTO_JUMP: + return this.autoJump; + default: + return false; + } + } + + /** + * Returns the translation of the given index in the given String array. If the index is smaller than 0 or greater + * than/equal to the length of the String array, it is changed to 0. + */ + private static String getTranslation(String[] strArray, int index) + { + if (index < 0 || index >= strArray.length) + { + index = 0; + } + + return I18n.format(strArray[index]); + } + + /** + * Gets a key binding. + */ + public String getKeyBinding(GameSettings.Options settingOption) + { + String s = I18n.format(settingOption.getTranslation()) + ": "; + + if (settingOption.isFloat()) + { + float f1 = this.getOptionFloatValue(settingOption); + float f = settingOption.normalizeValue(f1); + + if (settingOption == GameSettings.Options.SENSITIVITY) + { + if (f == 0.0F) + { + return s + I18n.format("options.sensitivity.min"); + } + else + { + return f == 1.0F ? s + I18n.format("options.sensitivity.max") : s + (int)(f * 200.0F) + "%"; + } + } + else if (settingOption == GameSettings.Options.FOV) + { + if (f1 == 70.0F) + { + return s + I18n.format("options.fov.min"); + } + else + { + return f1 == 110.0F ? s + I18n.format("options.fov.max") : s + (int)f1; + } + } + else if (settingOption == GameSettings.Options.FRAMERATE_LIMIT) + { + return f1 == settingOption.valueMax ? s + I18n.format("options.framerateLimit.max") : s + I18n.format("options.framerate", (int)f1); + } + else if (settingOption == GameSettings.Options.RENDER_CLOUDS) + { + return f1 == settingOption.valueMin ? s + I18n.format("options.cloudHeight.min") : s + ((int)f1 + 128); + } + else if (settingOption == GameSettings.Options.GAMMA) + { + if (f == 0.0F) + { + return s + I18n.format("options.gamma.min"); + } + else + { + return f == 1.0F ? s + I18n.format("options.gamma.max") : s + "+" + (int)(f * 100.0F) + "%"; + } + } + else if (settingOption == GameSettings.Options.SATURATION) + { + return s + (int)(f * 400.0F) + "%"; + } + else if (settingOption == GameSettings.Options.CHAT_OPACITY) + { + return s + (int)(f * 90.0F + 10.0F) + "%"; + } + else if (settingOption == GameSettings.Options.CHAT_HEIGHT_UNFOCUSED) + { + return s + GuiNewChat.calculateChatboxHeight(f) + "px"; + } + else if (settingOption == GameSettings.Options.CHAT_HEIGHT_FOCUSED) + { + return s + GuiNewChat.calculateChatboxHeight(f) + "px"; + } + else if (settingOption == GameSettings.Options.CHAT_WIDTH) + { + return s + GuiNewChat.calculateChatboxWidth(f) + "px"; + } + else if (settingOption == GameSettings.Options.RENDER_DISTANCE) + { + return s + I18n.format("options.chunks", (int)f1); + } + else if (settingOption == GameSettings.Options.MIPMAP_LEVELS) + { + return f1 == 0.0F ? s + I18n.format("options.off") : s + (int)f1; + } + else + { + return f == 0.0F ? s + I18n.format("options.off") : s + (int)(f * 100.0F) + "%"; + } + } + else if (settingOption.isBoolean()) + { + boolean flag = this.getOptionOrdinalValue(settingOption); + return flag ? s + I18n.format("options.on") : s + I18n.format("options.off"); + } + else if (settingOption == GameSettings.Options.MAIN_HAND) + { + return s + this.mainHand; + } + else if (settingOption == GameSettings.Options.GUI_SCALE) + { + return s + getTranslation(GUISCALES, this.guiScale); + } + else if (settingOption == GameSettings.Options.CHAT_VISIBILITY) + { + return s + I18n.format(this.chatVisibility.getResourceKey()); + } + else if (settingOption == GameSettings.Options.PARTICLES) + { + return s + getTranslation(PARTICLES, this.particleSetting); + } + else if (settingOption == GameSettings.Options.AMBIENT_OCCLUSION) + { + return s + getTranslation(AMBIENT_OCCLUSIONS, this.ambientOcclusion); + } + else if (settingOption == GameSettings.Options.RENDER_CLOUDS) + { + return s + getTranslation(CLOUDS_TYPES, this.clouds); + } + else if (settingOption == GameSettings.Options.GRAPHICS) + { + if (this.fancyGraphics) + { + return s + I18n.format("options.graphics.fancy"); + } + else + { + String s1 = "options.graphics.fast"; + return s + I18n.format("options.graphics.fast"); + } + } + else if (settingOption == GameSettings.Options.ATTACK_INDICATOR) + { + return s + getTranslation(ATTACK_INDICATORS, this.attackIndicator); + } + else if (settingOption == GameSettings.Options.NARRATOR) + { + return NarratorChatListener.INSTANCE.isActive() ? s + getTranslation(NARRATOR_MODES, this.narrator) : s + I18n.format("options.narrator.notavailable"); + } + else + { + return s; + } + } + + /** + * Loads the options from the options file. It appears that this has replaced the previous 'loadOptions' + */ + public void loadOptions() + { + try + { + if (!this.optionsFile.exists()) + { + return; + } + + this.soundLevels.clear(); + List list = IOUtils.readLines(new FileInputStream(this.optionsFile)); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + for (String s : list) + { + try + { + Iterator iterator = COLON_SPLITTER.omitEmptyStrings().limit(2).split(s).iterator(); + nbttagcompound.setString(iterator.next(), iterator.next()); + } + catch (Exception var10) + { + LOGGER.warn("Skipping bad option: {}", (Object)s); + } + } + + nbttagcompound = this.dataFix(nbttagcompound); + + for (String s1 : nbttagcompound.getKeySet()) + { + String s2 = nbttagcompound.getString(s1); + + try + { + if ("mouseSensitivity".equals(s1)) + { + this.mouseSensitivity = this.parseFloat(s2); + } + + if ("fov".equals(s1)) + { + this.fovSetting = this.parseFloat(s2) * 40.0F + 70.0F; + } + + if ("gamma".equals(s1)) + { + this.gammaSetting = this.parseFloat(s2); + } + + if ("saturation".equals(s1)) + { + this.saturation = this.parseFloat(s2); + } + + if ("invertYMouse".equals(s1)) + { + this.invertMouse = "true".equals(s2); + } + + if ("renderDistance".equals(s1)) + { + this.renderDistanceChunks = Integer.parseInt(s2); + } + + if ("guiScale".equals(s1)) + { + this.guiScale = Integer.parseInt(s2); + } + + if ("particles".equals(s1)) + { + this.particleSetting = Integer.parseInt(s2); + } + + if ("bobView".equals(s1)) + { + this.viewBobbing = "true".equals(s2); + } + + if ("anaglyph3d".equals(s1)) + { + this.anaglyph = "true".equals(s2); + } + + if ("maxFps".equals(s1)) + { + this.limitFramerate = Integer.parseInt(s2); + } + + if ("fboEnable".equals(s1)) + { + this.fboEnable = "true".equals(s2); + } + + if ("difficulty".equals(s1)) + { + this.difficulty = EnumDifficulty.getDifficultyEnum(Integer.parseInt(s2)); + } + + if ("fancyGraphics".equals(s1)) + { + this.fancyGraphics = "true".equals(s2); + } + + if ("tutorialStep".equals(s1)) + { + this.tutorialStep = TutorialSteps.getTutorial(s2); + } + + if ("ao".equals(s1)) + { + if ("true".equals(s2)) + { + this.ambientOcclusion = 2; + } + else if ("false".equals(s2)) + { + this.ambientOcclusion = 0; + } + else + { + this.ambientOcclusion = Integer.parseInt(s2); + } + } + + if ("renderClouds".equals(s1)) + { + if ("true".equals(s2)) + { + this.clouds = 2; + } + else if ("false".equals(s2)) + { + this.clouds = 0; + } + else if ("fast".equals(s2)) + { + this.clouds = 1; + } + } + + if ("attackIndicator".equals(s1)) + { + if ("0".equals(s2)) + { + this.attackIndicator = 0; + } + else if ("1".equals(s2)) + { + this.attackIndicator = 1; + } + else if ("2".equals(s2)) + { + this.attackIndicator = 2; + } + } + + if ("resourcePacks".equals(s1)) + { + this.resourcePacks = (List)JsonUtils.gsonDeserialize(GSON, s2, TYPE_LIST_STRING); + + if (this.resourcePacks == null) + { + this.resourcePacks = Lists.newArrayList(); + } + } + + if ("incompatibleResourcePacks".equals(s1)) + { + this.incompatibleResourcePacks = (List)JsonUtils.gsonDeserialize(GSON, s2, TYPE_LIST_STRING); + + if (this.incompatibleResourcePacks == null) + { + this.incompatibleResourcePacks = Lists.newArrayList(); + } + } + + if ("lastServer".equals(s1)) + { + this.lastServer = s2; + } + + if ("lang".equals(s1)) + { + this.language = s2; + } + + if ("chatVisibility".equals(s1)) + { + this.chatVisibility = EntityPlayer.EnumChatVisibility.getEnumChatVisibility(Integer.parseInt(s2)); + } + + if ("chatColors".equals(s1)) + { + this.chatColours = "true".equals(s2); + } + + if ("chatLinks".equals(s1)) + { + this.chatLinks = "true".equals(s2); + } + + if ("chatLinksPrompt".equals(s1)) + { + this.chatLinksPrompt = "true".equals(s2); + } + + if ("chatOpacity".equals(s1)) + { + this.chatOpacity = this.parseFloat(s2); + } + + if ("snooperEnabled".equals(s1)) + { + this.snooperEnabled = "true".equals(s2); + } + + if ("fullscreen".equals(s1)) + { + this.fullScreen = "true".equals(s2); + } + + if ("enableVsync".equals(s1)) + { + this.enableVsync = "true".equals(s2); + } + + if ("useVbo".equals(s1)) + { + this.useVbo = "true".equals(s2); + } + + if ("hideServerAddress".equals(s1)) + { + this.hideServerAddress = "true".equals(s2); + } + + if ("advancedItemTooltips".equals(s1)) + { + this.advancedItemTooltips = "true".equals(s2); + } + + if ("pauseOnLostFocus".equals(s1)) + { + this.pauseOnLostFocus = "true".equals(s2); + } + + if ("touchscreen".equals(s1)) + { + this.touchscreen = "true".equals(s2); + } + + if ("overrideHeight".equals(s1)) + { + this.overrideHeight = Integer.parseInt(s2); + } + + if ("overrideWidth".equals(s1)) + { + this.overrideWidth = Integer.parseInt(s2); + } + + if ("heldItemTooltips".equals(s1)) + { + this.heldItemTooltips = "true".equals(s2); + } + + if ("chatHeightFocused".equals(s1)) + { + this.chatHeightFocused = this.parseFloat(s2); + } + + if ("chatHeightUnfocused".equals(s1)) + { + this.chatHeightUnfocused = this.parseFloat(s2); + } + + if ("chatScale".equals(s1)) + { + this.chatScale = this.parseFloat(s2); + } + + if ("chatWidth".equals(s1)) + { + this.chatWidth = this.parseFloat(s2); + } + + if ("mipmapLevels".equals(s1)) + { + this.mipmapLevels = Integer.parseInt(s2); + } + + if ("forceUnicodeFont".equals(s1)) + { + this.forceUnicodeFont = "true".equals(s2); + } + + if ("reducedDebugInfo".equals(s1)) + { + this.reducedDebugInfo = "true".equals(s2); + } + + if ("useNativeTransport".equals(s1)) + { + this.useNativeTransport = "true".equals(s2); + } + + if ("entityShadows".equals(s1)) + { + this.entityShadows = "true".equals(s2); + } + + if ("mainHand".equals(s1)) + { + this.mainHand = "left".equals(s2) ? EnumHandSide.LEFT : EnumHandSide.RIGHT; + } + + if ("showSubtitles".equals(s1)) + { + this.showSubtitles = "true".equals(s2); + } + + if ("realmsNotifications".equals(s1)) + { + this.realmsNotifications = "true".equals(s2); + } + + if ("enableWeakAttacks".equals(s1)) + { + this.enableWeakAttacks = "true".equals(s2); + } + + if ("autoJump".equals(s1)) + { + this.autoJump = "true".equals(s2); + } + + if ("narrator".equals(s1)) + { + this.narrator = Integer.parseInt(s2); + } + + for (KeyBinding keybinding : this.keyBindings) + { + if (s1.equals("key_" + keybinding.getKeyDescription())) + { + if (s2.indexOf(':') != -1) + { + String[] t = s2.split(":"); + keybinding.setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier.valueFromString(t[1]), Integer.parseInt(t[0])); + } else + keybinding.setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier.NONE, Integer.parseInt(s2)); + } + } + + for (SoundCategory soundcategory : SoundCategory.values()) + { + if (s1.equals("soundCategory_" + soundcategory.getName())) + { + this.soundLevels.put(soundcategory, Float.valueOf(this.parseFloat(s2))); + } + } + + for (EnumPlayerModelParts enumplayermodelparts : EnumPlayerModelParts.values()) + { + if (s1.equals("modelPart_" + enumplayermodelparts.getPartName())) + { + this.setModelPartEnabled(enumplayermodelparts, "true".equals(s2)); + } + } + } + catch (Exception var11) + { + LOGGER.warn("Skipping bad option: {}:{}", s1, s2); + } + } + + KeyBinding.resetKeyBindingArrayAndHash(); + } + catch (Exception exception) + { + LOGGER.error("Failed to load options", (Throwable)exception); + } + } + + private NBTTagCompound dataFix(NBTTagCompound p_189988_1_) + { + int i = 0; + + try + { + i = Integer.parseInt(p_189988_1_.getString("version")); + } + catch (RuntimeException var4) + { + ; + } + + return this.mc.getDataFixer().process(FixTypes.OPTIONS, p_189988_1_, i); + } + + /** + * Parses a string into a float. + */ + private float parseFloat(String str) + { + if ("true".equals(str)) + { + return 1.0F; + } + else + { + return "false".equals(str) ? 0.0F : Float.parseFloat(str); + } + } + + /** + * Saves the options to the options file. + */ + public void saveOptions() + { + if (net.minecraftforge.fml.client.FMLClientHandler.instance().isLoading()) return; + PrintWriter printwriter = null; + + try + { + printwriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(this.optionsFile), StandardCharsets.UTF_8)); + printwriter.println("version:1343"); + printwriter.println("invertYMouse:" + this.invertMouse); + printwriter.println("mouseSensitivity:" + this.mouseSensitivity); + printwriter.println("fov:" + (this.fovSetting - 70.0F) / 40.0F); + printwriter.println("gamma:" + this.gammaSetting); + printwriter.println("saturation:" + this.saturation); + printwriter.println("renderDistance:" + this.renderDistanceChunks); + printwriter.println("guiScale:" + this.guiScale); + printwriter.println("particles:" + this.particleSetting); + printwriter.println("bobView:" + this.viewBobbing); + printwriter.println("anaglyph3d:" + this.anaglyph); + printwriter.println("maxFps:" + this.limitFramerate); + printwriter.println("fboEnable:" + this.fboEnable); + printwriter.println("difficulty:" + this.difficulty.getDifficultyId()); + printwriter.println("fancyGraphics:" + this.fancyGraphics); + printwriter.println("ao:" + this.ambientOcclusion); + + switch (this.clouds) + { + case 0: + printwriter.println("renderClouds:false"); + break; + case 1: + printwriter.println("renderClouds:fast"); + break; + case 2: + printwriter.println("renderClouds:true"); + } + + printwriter.println("resourcePacks:" + GSON.toJson(this.resourcePacks)); + printwriter.println("incompatibleResourcePacks:" + GSON.toJson(this.incompatibleResourcePacks)); + printwriter.println("lastServer:" + this.lastServer); + printwriter.println("lang:" + this.language); + printwriter.println("chatVisibility:" + this.chatVisibility.getChatVisibility()); + printwriter.println("chatColors:" + this.chatColours); + printwriter.println("chatLinks:" + this.chatLinks); + printwriter.println("chatLinksPrompt:" + this.chatLinksPrompt); + printwriter.println("chatOpacity:" + this.chatOpacity); + printwriter.println("snooperEnabled:" + this.snooperEnabled); + printwriter.println("fullscreen:" + this.fullScreen); + printwriter.println("enableVsync:" + this.enableVsync); + printwriter.println("useVbo:" + this.useVbo); + printwriter.println("hideServerAddress:" + this.hideServerAddress); + printwriter.println("advancedItemTooltips:" + this.advancedItemTooltips); + printwriter.println("pauseOnLostFocus:" + this.pauseOnLostFocus); + printwriter.println("touchscreen:" + this.touchscreen); + printwriter.println("overrideWidth:" + this.overrideWidth); + printwriter.println("overrideHeight:" + this.overrideHeight); + printwriter.println("heldItemTooltips:" + this.heldItemTooltips); + printwriter.println("chatHeightFocused:" + this.chatHeightFocused); + printwriter.println("chatHeightUnfocused:" + this.chatHeightUnfocused); + printwriter.println("chatScale:" + this.chatScale); + printwriter.println("chatWidth:" + this.chatWidth); + printwriter.println("mipmapLevels:" + this.mipmapLevels); + printwriter.println("forceUnicodeFont:" + this.forceUnicodeFont); + printwriter.println("reducedDebugInfo:" + this.reducedDebugInfo); + printwriter.println("useNativeTransport:" + this.useNativeTransport); + printwriter.println("entityShadows:" + this.entityShadows); + printwriter.println("mainHand:" + (this.mainHand == EnumHandSide.LEFT ? "left" : "right")); + printwriter.println("attackIndicator:" + this.attackIndicator); + printwriter.println("showSubtitles:" + this.showSubtitles); + printwriter.println("realmsNotifications:" + this.realmsNotifications); + printwriter.println("enableWeakAttacks:" + this.enableWeakAttacks); + printwriter.println("autoJump:" + this.autoJump); + printwriter.println("narrator:" + this.narrator); + printwriter.println("tutorialStep:" + this.tutorialStep.getName()); + + for (KeyBinding keybinding : this.keyBindings) + { + String keyString = "key_" + keybinding.getKeyDescription() + ":" + keybinding.getKeyCode(); + printwriter.println(keybinding.getKeyModifier() != net.minecraftforge.client.settings.KeyModifier.NONE ? keyString + ":" + keybinding.getKeyModifier() : keyString); + } + + for (SoundCategory soundcategory : SoundCategory.values()) + { + printwriter.println("soundCategory_" + soundcategory.getName() + ":" + this.getSoundLevel(soundcategory)); + } + + for (EnumPlayerModelParts enumplayermodelparts : EnumPlayerModelParts.values()) + { + printwriter.println("modelPart_" + enumplayermodelparts.getPartName() + ":" + this.setModelParts.contains(enumplayermodelparts)); + } + } + catch (Exception exception) + { + LOGGER.error("Failed to save options", (Throwable)exception); + } + finally + { + IOUtils.closeQuietly((Writer)printwriter); + } + + this.sendSettingsToServer(); + } + + public float getSoundLevel(SoundCategory category) + { + return this.soundLevels.containsKey(category) ? ((Float)this.soundLevels.get(category)).floatValue() : 1.0F; + } + + public void setSoundLevel(SoundCategory category, float volume) + { + this.mc.getSoundHandler().setSoundLevel(category, volume); + this.soundLevels.put(category, Float.valueOf(volume)); + } + + /** + * Send a client info packet with settings information to the server + */ + public void sendSettingsToServer() + { + if (this.mc.player != null) + { + int i = 0; + + for (EnumPlayerModelParts enumplayermodelparts : this.setModelParts) + { + i |= enumplayermodelparts.getPartMask(); + } + + this.mc.player.connection.sendPacket(new CPacketClientSettings(this.language, this.renderDistanceChunks, this.chatVisibility, this.chatColours, i, this.mainHand)); + } + } + + public Set getModelParts() + { + return ImmutableSet.copyOf(this.setModelParts); + } + + public void setModelPartEnabled(EnumPlayerModelParts modelPart, boolean enable) + { + if (enable) + { + this.setModelParts.add(modelPart); + } + else + { + this.setModelParts.remove(modelPart); + } + + this.sendSettingsToServer(); + } + + public void switchModelPartEnabled(EnumPlayerModelParts modelPart) + { + if (this.getModelParts().contains(modelPart)) + { + this.setModelParts.remove(modelPart); + } + else + { + this.setModelParts.add(modelPart); + } + + this.sendSettingsToServer(); + } + + /** + * Return true if the clouds should be rendered + */ + public int shouldRenderClouds() + { + return this.renderDistanceChunks >= 4 ? this.clouds : 0; + } + + /** + * Return true if the client connect to a server using the native transport system + */ + public boolean isUsingNativeTransport() + { + return this.useNativeTransport; + } + + @SideOnly(Side.CLIENT) + public static enum Options + { + INVERT_MOUSE("options.invertMouse", false, true), + SENSITIVITY("options.sensitivity", true, false), + FOV("options.fov", true, false, 30.0F, 110.0F, 1.0F), + GAMMA("options.gamma", true, false), + SATURATION("options.saturation", true, false), + RENDER_DISTANCE("options.renderDistance", true, false, 2.0F, 16.0F, 1.0F), + VIEW_BOBBING("options.viewBobbing", false, true), + ANAGLYPH("options.anaglyph", false, true), + FRAMERATE_LIMIT("options.framerateLimit", true, false, 10.0F, 260.0F, 10.0F), + FBO_ENABLE("options.fboEnable", false, true), + RENDER_CLOUDS("options.renderClouds", false, false), + GRAPHICS("options.graphics", false, false), + AMBIENT_OCCLUSION("options.ao", false, false), + GUI_SCALE("options.guiScale", false, false), + PARTICLES("options.particles", false, false), + CHAT_VISIBILITY("options.chat.visibility", false, false), + CHAT_COLOR("options.chat.color", false, true), + CHAT_LINKS("options.chat.links", false, true), + CHAT_OPACITY("options.chat.opacity", true, false), + CHAT_LINKS_PROMPT("options.chat.links.prompt", false, true), + SNOOPER_ENABLED("options.snooper", false, true), + USE_FULLSCREEN("options.fullscreen", false, true), + ENABLE_VSYNC("options.vsync", false, true), + USE_VBO("options.vbo", false, true), + TOUCHSCREEN("options.touchscreen", false, true), + CHAT_SCALE("options.chat.scale", true, false), + CHAT_WIDTH("options.chat.width", true, false), + CHAT_HEIGHT_FOCUSED("options.chat.height.focused", true, false), + CHAT_HEIGHT_UNFOCUSED("options.chat.height.unfocused", true, false), + MIPMAP_LEVELS("options.mipmapLevels", true, false, 0.0F, 4.0F, 1.0F), + FORCE_UNICODE_FONT("options.forceUnicodeFont", false, true), + REDUCED_DEBUG_INFO("options.reducedDebugInfo", false, true), + ENTITY_SHADOWS("options.entityShadows", false, true), + MAIN_HAND("options.mainHand", false, false), + ATTACK_INDICATOR("options.attackIndicator", false, false), + ENABLE_WEAK_ATTACKS("options.enableWeakAttacks", false, true), + SHOW_SUBTITLES("options.showSubtitles", false, true), + REALMS_NOTIFICATIONS("options.realmsNotifications", false, true), + AUTO_JUMP("options.autoJump", false, true), + NARRATOR("options.narrator", false, false); + + private final boolean isFloat; + private final boolean isBoolean; + private final String translation; + private final float valueStep; + private float valueMin; + private float valueMax; + + public static GameSettings.Options byOrdinal(int ordinal) + { + for (GameSettings.Options gamesettings$options : values()) + { + if (gamesettings$options.getOrdinal() == ordinal) + { + return gamesettings$options; + } + } + + return null; + } + + private Options(String translation, boolean isFloat, boolean isBoolean) + { + this(translation, isFloat, isBoolean, 0.0F, 1.0F, 0.0F); + } + + private Options(String translation, boolean isFloat, boolean isBoolean, float valMin, float valMax, float valStep) + { + this.translation = translation; + this.isFloat = isFloat; + this.isBoolean = isBoolean; + this.valueMin = valMin; + this.valueMax = valMax; + this.valueStep = valStep; + } + + public boolean isFloat() + { + return this.isFloat; + } + + public boolean isBoolean() + { + return this.isBoolean; + } + + public int getOrdinal() + { + return this.ordinal(); + } + + /** + * GameSettings$Options.Options + */ + public String getTranslation() + { + return this.translation; + } + + public float getValueMin() + { + return this.valueMin; + } + + public float getValueMax() + { + return this.valueMax; + } + + public void setValueMax(float value) + { + this.valueMax = value; + } + + public float normalizeValue(float value) + { + return MathHelper.clamp((this.snapToStepClamp(value) - this.valueMin) / (this.valueMax - this.valueMin), 0.0F, 1.0F); + } + + public float denormalizeValue(float value) + { + return this.snapToStepClamp(this.valueMin + (this.valueMax - this.valueMin) * MathHelper.clamp(value, 0.0F, 1.0F)); + } + + public float snapToStepClamp(float value) + { + value = this.snapToStep(value); + return MathHelper.clamp(value, this.valueMin, this.valueMax); + } + + private float snapToStep(float value) + { + if (this.valueStep > 0.0F) + { + value = this.valueStep * (float)Math.round(value / this.valueStep); + } + + return value; + } + } + + /******* Forge Start ***********/ + private void setForgeKeybindProperties() { + net.minecraftforge.client.settings.KeyConflictContext inGame = net.minecraftforge.client.settings.KeyConflictContext.IN_GAME; + keyBindForward.setKeyConflictContext(inGame); + keyBindLeft.setKeyConflictContext(inGame); + keyBindBack.setKeyConflictContext(inGame); + keyBindRight.setKeyConflictContext(inGame); + keyBindJump.setKeyConflictContext(inGame); + keyBindSneak.setKeyConflictContext(inGame); + keyBindSprint.setKeyConflictContext(inGame); + keyBindAttack.setKeyConflictContext(inGame); + keyBindChat.setKeyConflictContext(inGame); + keyBindPlayerList.setKeyConflictContext(inGame); + keyBindCommand.setKeyConflictContext(inGame); + keyBindTogglePerspective.setKeyConflictContext(inGame); + keyBindSmoothCamera.setKeyConflictContext(inGame); + keyBindSwapHands.setKeyConflictContext(inGame); + } + + // FORGE: fix for MC-64581 very laggy mipmap slider + private boolean needsBlockModelRefresh = false; + public void onGuiClosed() + { + if (needsBlockModelRefresh) + { + net.minecraftforge.fml.client.FMLClientHandler.instance().scheduleResourcesRefresh(net.minecraftforge.client.resource.VanillaResourceType.MODELS); + this.needsBlockModelRefresh = false; + } + } + /******* Forge End ***********/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/settings/HotbarSnapshot.java b/build/tmp/recompileMc/sources/net/minecraft/client/settings/HotbarSnapshot.java new file mode 100644 index 0000000..1ead5e0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/settings/HotbarSnapshot.java @@ -0,0 +1,58 @@ +package net.minecraft.client.settings; + +import java.util.ArrayList; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class HotbarSnapshot extends ArrayList +{ + public static final int HOTBAR_SIZE = InventoryPlayer.getHotbarSize(); + + public HotbarSnapshot() + { + this.ensureCapacity(HOTBAR_SIZE); + + for (int i = 0; i < HOTBAR_SIZE; ++i) + { + this.add(ItemStack.EMPTY); + } + } + + public NBTTagList createTag() + { + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < HOTBAR_SIZE; ++i) + { + nbttaglist.appendTag(((ItemStack)this.get(i)).writeToNBT(new NBTTagCompound())); + } + + return nbttaglist; + } + + public void fromTag(NBTTagList p_192833_1_) + { + for (int i = 0; i < HOTBAR_SIZE; ++i) + { + this.set(i, new ItemStack(p_192833_1_.getCompoundTagAt(i))); + } + } + + public boolean isEmpty() + { + for (int i = 0; i < HOTBAR_SIZE; ++i) + { + if (!((ItemStack)this.get(i)).isEmpty()) + { + return false; + } + } + + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/settings/KeyBinding.java b/build/tmp/recompileMc/sources/net/minecraft/client/settings/KeyBinding.java new file mode 100644 index 0000000..e59c311 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/settings/KeyBinding.java @@ -0,0 +1,335 @@ +package net.minecraft.client.settings; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Map; +import java.util.Set; +import java.util.function.Supplier; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.IntHashMap; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Keyboard; + +@SideOnly(Side.CLIENT) +public class KeyBinding implements Comparable +{ + private static final Map KEYBIND_ARRAY = Maps.newHashMap(); + private static final net.minecraftforge.client.settings.KeyBindingMap HASH = new net.minecraftforge.client.settings.KeyBindingMap(); + private static final Set KEYBIND_SET = Sets.newHashSet(); + /** A map that assigns priorities to all categories, for ordering purposes. */ + private static final Map CATEGORY_ORDER = Maps.newHashMap(); + private final String keyDescription; + private final int keyCodeDefault; + private final String keyCategory; + private int keyCode; + /** Is the key held down? */ + private boolean pressed; + private int pressTime; + + public static void onTick(int keyCode) + { + if (keyCode != 0) + { + KeyBinding keybinding = HASH.lookupActive(keyCode); + + if (keybinding != null) + { + ++keybinding.pressTime; + } + } + } + + public static void setKeyBindState(int keyCode, boolean pressed) + { + if (keyCode != 0) + { + for (KeyBinding keybinding : HASH.lookupAll(keyCode)) + + if (keybinding != null) + { + keybinding.pressed = pressed; + } + } + } + + /** + * Completely recalculates whether any keybinds are held, from scratch. + */ + public static void updateKeyBindState() + { + for (KeyBinding keybinding : KEYBIND_ARRAY.values()) + { + try + { + setKeyBindState(keybinding.keyCode, keybinding.keyCode < 256 && Keyboard.isKeyDown(keybinding.keyCode)); + } + catch (IndexOutOfBoundsException var3) + { + ; + } + } + } + + public static void unPressAllKeys() + { + for (KeyBinding keybinding : KEYBIND_ARRAY.values()) + { + keybinding.unpressKey(); + } + } + + public static void resetKeyBindingArrayAndHash() + { + HASH.clearMap(); + + for (KeyBinding keybinding : KEYBIND_ARRAY.values()) + { + HASH.addKey(keybinding.keyCode, keybinding); + } + } + + public static Set getKeybinds() + { + return KEYBIND_SET; + } + + public KeyBinding(String description, int keyCode, String category) + { + this.keyDescription = description; + this.keyCode = keyCode; + this.keyCodeDefault = keyCode; + this.keyCategory = category; + KEYBIND_ARRAY.put(description, this); + HASH.addKey(keyCode, this); + KEYBIND_SET.add(category); + } + + /** + * Returns true if the key is pressed (used for continuous querying). Should be used in tickers. + */ + public boolean isKeyDown() + { + return this.pressed && getKeyConflictContext().isActive() && getKeyModifier().isActive(getKeyConflictContext()); + } + + public String getKeyCategory() + { + return this.keyCategory; + } + + /** + * Returns true on the initial key press. For continuous querying use {@link isKeyDown()}. Should be used in key + * events. + */ + public boolean isPressed() + { + if (this.pressTime == 0) + { + return false; + } + else + { + --this.pressTime; + return true; + } + } + + private void unpressKey() + { + this.pressTime = 0; + this.pressed = false; + } + + public String getKeyDescription() + { + return this.keyDescription; + } + + public int getKeyCodeDefault() + { + return this.keyCodeDefault; + } + + public int getKeyCode() + { + return this.keyCode; + } + + public void setKeyCode(int keyCode) + { + this.keyCode = keyCode; + } + + public int compareTo(KeyBinding p_compareTo_1_) + { + if (this.keyCategory.equals(p_compareTo_1_.keyCategory)) return I18n.format(this.keyDescription).compareTo(I18n.format(p_compareTo_1_.keyDescription)); + Integer tCat = CATEGORY_ORDER.get(this.keyCategory); + Integer oCat = CATEGORY_ORDER.get(p_compareTo_1_.keyCategory); + if (tCat == null && oCat != null) return 1; + if (tCat != null && oCat == null) return -1; + if (tCat == null && oCat == null) return I18n.format(this.keyCategory).compareTo(I18n.format(p_compareTo_1_.keyCategory)); + return tCat.compareTo(oCat); + } + + /****************** Forge Start *****************************/ + private net.minecraftforge.client.settings.KeyModifier keyModifierDefault = net.minecraftforge.client.settings.KeyModifier.NONE; + private net.minecraftforge.client.settings.KeyModifier keyModifier = net.minecraftforge.client.settings.KeyModifier.NONE; + private net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext = net.minecraftforge.client.settings.KeyConflictContext.UNIVERSAL; + + /** + * Convenience constructor for creating KeyBindings with keyConflictContext set. + */ + public KeyBinding(String description, net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext, int keyCode, String category) + { + this(description, keyConflictContext, net.minecraftforge.client.settings.KeyModifier.NONE, keyCode, category); + } + + /** + * Convenience constructor for creating KeyBindings with keyConflictContext and keyModifier set. + */ + public KeyBinding(String description, net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext, net.minecraftforge.client.settings.KeyModifier keyModifier, int keyCode, String category) + { + this.keyDescription = description; + this.keyCode = keyCode; + this.keyCodeDefault = keyCode; + this.keyCategory = category; + this.keyConflictContext = keyConflictContext; + this.keyModifier = keyModifier; + this.keyModifierDefault = keyModifier; + if (this.keyModifier.matches(keyCode)) + { + this.keyModifier = net.minecraftforge.client.settings.KeyModifier.NONE; + } + KEYBIND_ARRAY.put(description, this); + HASH.addKey(keyCode, this); + KEYBIND_SET.add(category); + } + + /** + * Checks that the key conflict context and modifier are active, and that the keyCode matches this binding. + */ + public boolean isActiveAndMatches(int keyCode) + { + return keyCode != 0 && keyCode == this.getKeyCode() && getKeyConflictContext().isActive() && getKeyModifier().isActive(getKeyConflictContext()); + } + + public void setKeyConflictContext(net.minecraftforge.client.settings.IKeyConflictContext keyConflictContext) + { + this.keyConflictContext = keyConflictContext; + } + + public net.minecraftforge.client.settings.IKeyConflictContext getKeyConflictContext() + { + return keyConflictContext; + } + + public net.minecraftforge.client.settings.KeyModifier getKeyModifierDefault() + { + return keyModifierDefault; + } + + public net.minecraftforge.client.settings.KeyModifier getKeyModifier() + { + return keyModifier; + } + + public void setKeyModifierAndCode(net.minecraftforge.client.settings.KeyModifier keyModifier, int keyCode) + { + this.keyCode = keyCode; + if (keyModifier.matches(keyCode)) + { + keyModifier = net.minecraftforge.client.settings.KeyModifier.NONE; + } + HASH.removeKey(this); + this.keyModifier = keyModifier; + HASH.addKey(keyCode, this); + } + + public void setToDefault() + { + setKeyModifierAndCode(getKeyModifierDefault(), getKeyCodeDefault()); + } + + public boolean isSetToDefaultValue() + { + return getKeyCode() == getKeyCodeDefault() && getKeyModifier() == getKeyModifierDefault(); + } + + /** + * Returns true when the other keyBinding conflicts with this one + */ + public boolean conflicts(KeyBinding other) + { + if (getKeyConflictContext().conflicts(other.getKeyConflictContext()) || other.getKeyConflictContext().conflicts(getKeyConflictContext())) + { + net.minecraftforge.client.settings.KeyModifier keyModifier = getKeyModifier(); + net.minecraftforge.client.settings.KeyModifier otherKeyModifier = other.getKeyModifier(); + if (keyModifier.matches(other.getKeyCode()) || otherKeyModifier.matches(getKeyCode())) + { + return true; + } + else if (getKeyCode() == other.getKeyCode()) + { + return keyModifier == otherKeyModifier || + // IN_GAME key contexts have a conflict when at least one modifier is NONE. + // For example: If you hold shift to crouch, you can still press E to open your inventory. This means that a Shift+E hotkey is in conflict with E. + // GUI and other key contexts do not have this limitation. + (getKeyConflictContext().conflicts(net.minecraftforge.client.settings.KeyConflictContext.IN_GAME) && + (keyModifier == net.minecraftforge.client.settings.KeyModifier.NONE || otherKeyModifier == net.minecraftforge.client.settings.KeyModifier.NONE)); + } + } + return false; + } + + /** + * Returns true when one of the bindings' key codes conflicts with the other's modifier. + */ + public boolean hasKeyCodeModifierConflict(KeyBinding other) + { + if (getKeyConflictContext().conflicts(other.getKeyConflictContext()) || other.getKeyConflictContext().conflicts(getKeyConflictContext())) + { + if (getKeyModifier().matches(other.getKeyCode()) || other.getKeyModifier().matches(getKeyCode())) + { + return true; + } + } + return false; + } + + public String getDisplayName() + { + return getKeyModifier().getLocalizedComboName(getKeyCode()); + } + /****************** Forge End *****************************/ + + /** + * Returns a supplier which gets a keybind's current binding (eg, key.forward returns W by + * default), or the keybind's name if no such keybind exists (eg, key.invalid returns + * key.invalid) + * + * @param key The description of the key (eg, key.forward). + */ + public static Supplier getDisplayString(String key) + { + KeyBinding keybinding = KEYBIND_ARRAY.get(key); + return keybinding == null ? () -> + { + return key; + } : () -> + { + return keybinding.getDisplayName(); + }; + } + + static + { + CATEGORY_ORDER.put("key.categories.movement", Integer.valueOf(1)); + CATEGORY_ORDER.put("key.categories.gameplay", Integer.valueOf(2)); + CATEGORY_ORDER.put("key.categories.inventory", Integer.valueOf(3)); + CATEGORY_ORDER.put("key.categories.creative", Integer.valueOf(4)); + CATEGORY_ORDER.put("key.categories.multiplayer", Integer.valueOf(5)); + CATEGORY_ORDER.put("key.categories.ui", Integer.valueOf(6)); + CATEGORY_ORDER.put("key.categories.misc", Integer.valueOf(7)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/settings/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/settings/package-info.java new file mode 100644 index 0000000..ec850ca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/settings/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.settings; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/Framebuffer.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/Framebuffer.java new file mode 100644 index 0000000..16614c1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/Framebuffer.java @@ -0,0 +1,323 @@ +package net.minecraft.client.shader; + +import java.nio.IntBuffer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Framebuffer +{ + public int framebufferTextureWidth; + public int framebufferTextureHeight; + public int framebufferWidth; + public int framebufferHeight; + public boolean useDepth; + public int framebufferObject; + public int framebufferTexture; + public int depthBuffer; + public float[] framebufferColor; + public int framebufferFilter; + + public Framebuffer(int width, int height, boolean useDepthIn) + { + this.useDepth = useDepthIn; + this.framebufferObject = -1; + this.framebufferTexture = -1; + this.depthBuffer = -1; + this.framebufferColor = new float[4]; + this.framebufferColor[0] = 1.0F; + this.framebufferColor[1] = 1.0F; + this.framebufferColor[2] = 1.0F; + this.framebufferColor[3] = 0.0F; + this.createBindFramebuffer(width, height); + } + + public void createBindFramebuffer(int width, int height) + { + if (!OpenGlHelper.isFramebufferEnabled()) + { + this.framebufferWidth = width; + this.framebufferHeight = height; + } + else + { + GlStateManager.enableDepth(); + + if (this.framebufferObject >= 0) + { + this.deleteFramebuffer(); + } + + this.createFramebuffer(width, height); + this.checkFramebufferComplete(); + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, 0); + } + } + + public void deleteFramebuffer() + { + if (OpenGlHelper.isFramebufferEnabled()) + { + this.unbindFramebufferTexture(); + this.unbindFramebuffer(); + + if (this.depthBuffer > -1) + { + OpenGlHelper.glDeleteRenderbuffers(this.depthBuffer); + this.depthBuffer = -1; + } + + if (this.framebufferTexture > -1) + { + TextureUtil.deleteTexture(this.framebufferTexture); + this.framebufferTexture = -1; + } + + if (this.framebufferObject > -1) + { + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, 0); + OpenGlHelper.glDeleteFramebuffers(this.framebufferObject); + this.framebufferObject = -1; + } + } + } + + public void createFramebuffer(int width, int height) + { + this.framebufferWidth = width; + this.framebufferHeight = height; + this.framebufferTextureWidth = width; + this.framebufferTextureHeight = height; + + if (!OpenGlHelper.isFramebufferEnabled()) + { + this.framebufferClear(); + } + else + { + this.framebufferObject = OpenGlHelper.glGenFramebuffers(); + this.framebufferTexture = TextureUtil.glGenTextures(); + + if (this.useDepth) + { + this.depthBuffer = OpenGlHelper.glGenRenderbuffers(); + } + + this.setFramebufferFilter(9728); + GlStateManager.bindTexture(this.framebufferTexture); + GlStateManager.glTexImage2D(3553, 0, 32856, this.framebufferTextureWidth, this.framebufferTextureHeight, 0, 6408, 5121, (IntBuffer)null); + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, this.framebufferObject); + OpenGlHelper.glFramebufferTexture2D(OpenGlHelper.GL_FRAMEBUFFER, OpenGlHelper.GL_COLOR_ATTACHMENT0, 3553, this.framebufferTexture, 0); + + if (this.useDepth) + { + OpenGlHelper.glBindRenderbuffer(OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + if (!this.stencilEnabled) + { + OpenGlHelper.glRenderbufferStorage(OpenGlHelper.GL_RENDERBUFFER, 33190, this.framebufferTextureWidth, this.framebufferTextureHeight); + OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, OpenGlHelper.GL_DEPTH_ATTACHMENT, OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + } + else + { + OpenGlHelper.glRenderbufferStorage(OpenGlHelper.GL_RENDERBUFFER, org.lwjgl.opengl.EXTPackedDepthStencil.GL_DEPTH24_STENCIL8_EXT, this.framebufferTextureWidth, this.framebufferTextureHeight); + OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, org.lwjgl.opengl.EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + OpenGlHelper.glFramebufferRenderbuffer(OpenGlHelper.GL_FRAMEBUFFER, org.lwjgl.opengl.EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, OpenGlHelper.GL_RENDERBUFFER, this.depthBuffer); + } + } + + this.framebufferClear(); + this.unbindFramebufferTexture(); + } + } + + public void setFramebufferFilter(int framebufferFilterIn) + { + if (OpenGlHelper.isFramebufferEnabled()) + { + this.framebufferFilter = framebufferFilterIn; + GlStateManager.bindTexture(this.framebufferTexture); + GlStateManager.glTexParameteri(3553, 10241, framebufferFilterIn); + GlStateManager.glTexParameteri(3553, 10240, framebufferFilterIn); + GlStateManager.glTexParameteri(3553, 10242, 10496); + GlStateManager.glTexParameteri(3553, 10243, 10496); + GlStateManager.bindTexture(0); + } + } + + public void checkFramebufferComplete() + { + int i = OpenGlHelper.glCheckFramebufferStatus(OpenGlHelper.GL_FRAMEBUFFER); + + if (i != OpenGlHelper.GL_FRAMEBUFFER_COMPLETE) + { + if (i == OpenGlHelper.GL_FB_INCOMPLETE_ATTACHMENT) + { + throw new RuntimeException("GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); + } + else if (i == OpenGlHelper.GL_FB_INCOMPLETE_MISS_ATTACH) + { + throw new RuntimeException("GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); + } + else if (i == OpenGlHelper.GL_FB_INCOMPLETE_DRAW_BUFFER) + { + throw new RuntimeException("GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"); + } + else if (i == OpenGlHelper.GL_FB_INCOMPLETE_READ_BUFFER) + { + throw new RuntimeException("GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"); + } + else + { + throw new RuntimeException("glCheckFramebufferStatus returned unknown status:" + i); + } + } + } + + public void bindFramebufferTexture() + { + if (OpenGlHelper.isFramebufferEnabled()) + { + GlStateManager.bindTexture(this.framebufferTexture); + } + } + + public void unbindFramebufferTexture() + { + if (OpenGlHelper.isFramebufferEnabled()) + { + GlStateManager.bindTexture(0); + } + } + + public void bindFramebuffer(boolean p_147610_1_) + { + if (OpenGlHelper.isFramebufferEnabled()) + { + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, this.framebufferObject); + + if (p_147610_1_) + { + GlStateManager.viewport(0, 0, this.framebufferWidth, this.framebufferHeight); + } + } + } + + public void unbindFramebuffer() + { + if (OpenGlHelper.isFramebufferEnabled()) + { + OpenGlHelper.glBindFramebuffer(OpenGlHelper.GL_FRAMEBUFFER, 0); + } + } + + public void setFramebufferColor(float red, float green, float blue, float alpha) + { + this.framebufferColor[0] = red; + this.framebufferColor[1] = green; + this.framebufferColor[2] = blue; + this.framebufferColor[3] = alpha; + } + + public void framebufferRender(int width, int height) + { + this.framebufferRenderExt(width, height, true); + } + + public void framebufferRenderExt(int width, int height, boolean p_178038_3_) + { + if (OpenGlHelper.isFramebufferEnabled()) + { + GlStateManager.colorMask(true, true, true, false); + GlStateManager.disableDepth(); + GlStateManager.depthMask(false); + GlStateManager.matrixMode(5889); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, (double)width, (double)height, 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(5888); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + GlStateManager.viewport(0, 0, width, height); + GlStateManager.enableTexture2D(); + GlStateManager.disableLighting(); + GlStateManager.disableAlpha(); + + if (p_178038_3_) + { + GlStateManager.disableBlend(); + GlStateManager.enableColorMaterial(); + } + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.bindFramebufferTexture(); + float f = (float)width; + float f1 = (float)height; + float f2 = (float)this.framebufferWidth / (float)this.framebufferTextureWidth; + float f3 = (float)this.framebufferHeight / (float)this.framebufferTextureHeight; + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); + bufferbuilder.pos(0.0D, (double)f1, 0.0D).tex(0.0D, 0.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos((double)f, (double)f1, 0.0D).tex((double)f2, 0.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos((double)f, 0.0D, 0.0D).tex((double)f2, (double)f3).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 0.0D).tex(0.0D, (double)f3).color(255, 255, 255, 255).endVertex(); + tessellator.draw(); + this.unbindFramebufferTexture(); + GlStateManager.depthMask(true); + GlStateManager.colorMask(true, true, true, true); + } + } + + public void framebufferClear() + { + this.bindFramebuffer(true); + GlStateManager.clearColor(this.framebufferColor[0], this.framebufferColor[1], this.framebufferColor[2], this.framebufferColor[3]); + int i = 16384; + + if (this.useDepth) + { + GlStateManager.clearDepth(1.0D); + i |= 256; + } + + GlStateManager.clear(i); + this.unbindFramebuffer(); + } + + /*================================ FORGE START ================================================*/ + private boolean stencilEnabled = false; + /** + * Attempts to enabled 8 bits of stencil buffer on this FrameBuffer. + * Modders must call this directly to set things up. + * This is to prevent the default cause where graphics cards do not support stencil bits. + * Modders should check the below 'isStencilEnabled' to check if another modder has already enabled them. + * + * Note: + * As of now the only thing that is checked is if FBOs are supported entirely, in the future + * we may expand to check for errors. + * + * @return True if the FBO was re-initialized with stencil bits. + */ + public boolean enableStencil() + { + if (!OpenGlHelper.isFramebufferEnabled()) return false; + stencilEnabled = true; + this.createBindFramebuffer(framebufferWidth, framebufferHeight); + return true; //TODO: Find a way to detect if this failed? + } + + /** + * Returns wither or not this FBO has been successfully initialized with stencil bits. + * If not, and a modder wishes it to be, they must call enableStencil. + */ + public boolean isStencilEnabled() + { + return this.stencilEnabled; + } + /*================================ FORGE END ================================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/Shader.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/Shader.java new file mode 100644 index 0000000..fc8470c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/Shader.java @@ -0,0 +1,120 @@ +package net.minecraft.client.shader; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.util.JsonException; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Matrix4f; + +@SideOnly(Side.CLIENT) +public class Shader +{ + private final ShaderManager manager; + public final Framebuffer framebufferIn; + public final Framebuffer framebufferOut; + private final List listAuxFramebuffers = Lists.newArrayList(); + private final List listAuxNames = Lists.newArrayList(); + private final List listAuxWidths = Lists.newArrayList(); + private final List listAuxHeights = Lists.newArrayList(); + private Matrix4f projectionMatrix; + + public Shader(IResourceManager resourceManager, String programName, Framebuffer framebufferInIn, Framebuffer framebufferOutIn) throws JsonException, IOException + { + this.manager = new ShaderManager(resourceManager, programName); + this.framebufferIn = framebufferInIn; + this.framebufferOut = framebufferOutIn; + } + + public void deleteShader() + { + this.manager.deleteShader(); + } + + public void addAuxFramebuffer(String auxName, Object auxFramebufferIn, int width, int height) + { + this.listAuxNames.add(this.listAuxNames.size(), auxName); + this.listAuxFramebuffers.add(this.listAuxFramebuffers.size(), auxFramebufferIn); + this.listAuxWidths.add(this.listAuxWidths.size(), Integer.valueOf(width)); + this.listAuxHeights.add(this.listAuxHeights.size(), Integer.valueOf(height)); + } + + private void preRender() + { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableBlend(); + GlStateManager.disableDepth(); + GlStateManager.disableAlpha(); + GlStateManager.disableFog(); + GlStateManager.disableLighting(); + GlStateManager.disableColorMaterial(); + GlStateManager.enableTexture2D(); + GlStateManager.bindTexture(0); + } + + public void setProjectionMatrix(Matrix4f projectionMatrixIn) + { + this.projectionMatrix = projectionMatrixIn; + } + + public void render(float partialTicks) + { + this.preRender(); + this.framebufferIn.unbindFramebuffer(); + float f = (float)this.framebufferOut.framebufferTextureWidth; + float f1 = (float)this.framebufferOut.framebufferTextureHeight; + GlStateManager.viewport(0, 0, (int)f, (int)f1); + this.manager.addSamplerTexture("DiffuseSampler", this.framebufferIn); + + for (int i = 0; i < this.listAuxFramebuffers.size(); ++i) + { + this.manager.addSamplerTexture(this.listAuxNames.get(i), this.listAuxFramebuffers.get(i)); + this.manager.getShaderUniformOrDefault("AuxSize" + i).set((float)((Integer)this.listAuxWidths.get(i)).intValue(), (float)((Integer)this.listAuxHeights.get(i)).intValue()); + } + + this.manager.getShaderUniformOrDefault("ProjMat").set(this.projectionMatrix); + this.manager.getShaderUniformOrDefault("InSize").set((float)this.framebufferIn.framebufferTextureWidth, (float)this.framebufferIn.framebufferTextureHeight); + this.manager.getShaderUniformOrDefault("OutSize").set(f, f1); + this.manager.getShaderUniformOrDefault("Time").set(partialTicks); + Minecraft minecraft = Minecraft.getMinecraft(); + this.manager.getShaderUniformOrDefault("ScreenSize").set((float)minecraft.displayWidth, (float)minecraft.displayHeight); + this.manager.useShader(); + this.framebufferOut.framebufferClear(); + this.framebufferOut.bindFramebuffer(false); + GlStateManager.depthMask(false); + GlStateManager.colorMask(true, true, true, true); + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferbuilder = tessellator.getBuffer(); + bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR); + bufferbuilder.pos(0.0D, (double)f1, 500.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos((double)f, (double)f1, 500.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos((double)f, 0.0D, 500.0D).color(255, 255, 255, 255).endVertex(); + bufferbuilder.pos(0.0D, 0.0D, 500.0D).color(255, 255, 255, 255).endVertex(); + tessellator.draw(); + GlStateManager.depthMask(true); + GlStateManager.colorMask(true, true, true, true); + this.manager.endShader(); + this.framebufferOut.unbindFramebuffer(); + this.framebufferIn.unbindFramebufferTexture(); + + for (Object object : this.listAuxFramebuffers) + { + if (object instanceof Framebuffer) + { + ((Framebuffer)object).unbindFramebufferTexture(); + } + } + } + + public ShaderManager getShaderManager() + { + return this.manager; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderDefault.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderDefault.java new file mode 100644 index 0000000..766dcb1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderDefault.java @@ -0,0 +1,50 @@ +package net.minecraft.client.shader; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.util.vector.Matrix4f; + +@SideOnly(Side.CLIENT) +public class ShaderDefault extends ShaderUniform +{ + public ShaderDefault() + { + super("dummy", 4, 1, (ShaderManager)null); + } + + public void set(float p_148090_1_) + { + } + + public void set(float p_148087_1_, float p_148087_2_) + { + } + + public void set(float p_148095_1_, float p_148095_2_, float p_148095_3_) + { + } + + public void set(float p_148081_1_, float p_148081_2_, float p_148081_3_, float p_148081_4_) + { + } + + public void setSafe(float p_148092_1_, float p_148092_2_, float p_148092_3_, float p_148092_4_) + { + } + + public void set(int p_148083_1_, int p_148083_2_, int p_148083_3_, int p_148083_4_) + { + } + + public void set(float[] p_148097_1_) + { + } + + public void set(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23, float m30, float m31, float m32, float m33) + { + } + + public void set(Matrix4f matrix) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderGroup.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderGroup.java new file mode 100644 index 0000000..65d2e0d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderGroup.java @@ -0,0 +1,418 @@ +package net.minecraft.client.shader; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import java.io.Closeable; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.util.JsonException; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.lwjgl.util.vector.Matrix4f; + +@SideOnly(Side.CLIENT) +public class ShaderGroup +{ + private final Framebuffer mainFramebuffer; + private final IResourceManager resourceManager; + private final String shaderGroupName; + private final List listShaders = Lists.newArrayList(); + private final Map mapFramebuffers = Maps.newHashMap(); + private final List listFramebuffers = Lists.newArrayList(); + private Matrix4f projectionMatrix; + private int mainFramebufferWidth; + private int mainFramebufferHeight; + private float time; + private float lastStamp; + + public ShaderGroup(TextureManager p_i1050_1_, IResourceManager resourceManagerIn, Framebuffer mainFramebufferIn, ResourceLocation p_i1050_4_) throws JsonException, IOException, JsonSyntaxException + { + this.resourceManager = resourceManagerIn; + this.mainFramebuffer = mainFramebufferIn; + this.time = 0.0F; + this.lastStamp = 0.0F; + this.mainFramebufferWidth = mainFramebufferIn.framebufferWidth; + this.mainFramebufferHeight = mainFramebufferIn.framebufferHeight; + this.shaderGroupName = p_i1050_4_.toString(); + this.resetProjectionMatrix(); + this.parseGroup(p_i1050_1_, p_i1050_4_); + } + + public void parseGroup(TextureManager p_152765_1_, ResourceLocation p_152765_2_) throws JsonException, IOException, JsonSyntaxException + { + JsonParser jsonparser = new JsonParser(); + IResource iresource = null; + + try + { + iresource = this.resourceManager.getResource(p_152765_2_); + JsonObject jsonobject = jsonparser.parse(IOUtils.toString(iresource.getInputStream(), StandardCharsets.UTF_8)).getAsJsonObject(); + + if (JsonUtils.isJsonArray(jsonobject, "targets")) + { + JsonArray jsonarray = jsonobject.getAsJsonArray("targets"); + int i = 0; + + for (JsonElement jsonelement : jsonarray) + { + try + { + this.initTarget(jsonelement); + } + catch (Exception exception1) + { + JsonException jsonexception1 = JsonException.forException(exception1); + jsonexception1.prependJsonKey("targets[" + i + "]"); + throw jsonexception1; + } + + ++i; + } + } + + if (JsonUtils.isJsonArray(jsonobject, "passes")) + { + JsonArray jsonarray1 = jsonobject.getAsJsonArray("passes"); + int j = 0; + + for (JsonElement jsonelement1 : jsonarray1) + { + try + { + this.parsePass(p_152765_1_, jsonelement1); + } + catch (Exception exception) + { + JsonException jsonexception2 = JsonException.forException(exception); + jsonexception2.prependJsonKey("passes[" + j + "]"); + throw jsonexception2; + } + + ++j; + } + } + } + catch (Exception exception2) + { + JsonException jsonexception = JsonException.forException(exception2); + jsonexception.setFilenameAndFlush(p_152765_2_.getResourcePath()); + throw jsonexception; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + } + + private void initTarget(JsonElement p_148027_1_) throws JsonException + { + if (JsonUtils.isString(p_148027_1_)) + { + this.addFramebuffer(p_148027_1_.getAsString(), this.mainFramebufferWidth, this.mainFramebufferHeight); + } + else + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_148027_1_, "target"); + String s = JsonUtils.getString(jsonobject, "name"); + int i = JsonUtils.getInt(jsonobject, "width", this.mainFramebufferWidth); + int j = JsonUtils.getInt(jsonobject, "height", this.mainFramebufferHeight); + + if (this.mapFramebuffers.containsKey(s)) + { + throw new JsonException(s + " is already defined"); + } + + this.addFramebuffer(s, i, j); + } + } + + private void parsePass(TextureManager p_152764_1_, JsonElement json) throws JsonException, IOException + { + JsonObject jsonobject = JsonUtils.getJsonObject(json, "pass"); + String s = JsonUtils.getString(jsonobject, "name"); + String s1 = JsonUtils.getString(jsonobject, "intarget"); + String s2 = JsonUtils.getString(jsonobject, "outtarget"); + Framebuffer framebuffer = this.getFramebuffer(s1); + Framebuffer framebuffer1 = this.getFramebuffer(s2); + + if (framebuffer == null) + { + throw new JsonException("Input target '" + s1 + "' does not exist"); + } + else if (framebuffer1 == null) + { + throw new JsonException("Output target '" + s2 + "' does not exist"); + } + else + { + Shader shader = this.addShader(s, framebuffer, framebuffer1); + JsonArray jsonarray = JsonUtils.getJsonArray(jsonobject, "auxtargets", (JsonArray)null); + + if (jsonarray != null) + { + int i = 0; + + for (JsonElement jsonelement : jsonarray) + { + try + { + JsonObject jsonobject1 = JsonUtils.getJsonObject(jsonelement, "auxtarget"); + String s4 = JsonUtils.getString(jsonobject1, "name"); + String s3 = JsonUtils.getString(jsonobject1, "id"); + Framebuffer framebuffer2 = this.getFramebuffer(s3); + + if (framebuffer2 == null) + { + String[] rl = ResourceLocation.splitObjectName(s3); + ResourceLocation resourcelocation = new ResourceLocation(rl[0], "textures/effect/" + rl[1] + ".png"); + IResource iresource = null; + + try + { + iresource = this.resourceManager.getResource(resourcelocation); + } + catch (FileNotFoundException var29) + { + throw new JsonException("Render target or texture '" + s3 + "' does not exist"); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + p_152764_1_.bindTexture(resourcelocation); + ITextureObject lvt_20_2_ = p_152764_1_.getTexture(resourcelocation); + int lvt_21_1_ = JsonUtils.getInt(jsonobject1, "width"); + int lvt_22_1_ = JsonUtils.getInt(jsonobject1, "height"); + boolean lvt_23_1_ = JsonUtils.getBoolean(jsonobject1, "bilinear"); + + if (lvt_23_1_) + { + GlStateManager.glTexParameteri(3553, 10241, 9729); + GlStateManager.glTexParameteri(3553, 10240, 9729); + } + else + { + GlStateManager.glTexParameteri(3553, 10241, 9728); + GlStateManager.glTexParameteri(3553, 10240, 9728); + } + + shader.addAuxFramebuffer(s4, Integer.valueOf(lvt_20_2_.getGlTextureId()), lvt_21_1_, lvt_22_1_); + } + else + { + shader.addAuxFramebuffer(s4, framebuffer2, framebuffer2.framebufferTextureWidth, framebuffer2.framebufferTextureHeight); + } + } + catch (Exception exception1) + { + JsonException jsonexception = JsonException.forException(exception1); + jsonexception.prependJsonKey("auxtargets[" + i + "]"); + throw jsonexception; + } + + ++i; + } + } + + JsonArray jsonarray1 = JsonUtils.getJsonArray(jsonobject, "uniforms", (JsonArray)null); + + if (jsonarray1 != null) + { + int l = 0; + + for (JsonElement jsonelement1 : jsonarray1) + { + try + { + this.initUniform(jsonelement1); + } + catch (Exception exception) + { + JsonException jsonexception1 = JsonException.forException(exception); + jsonexception1.prependJsonKey("uniforms[" + l + "]"); + throw jsonexception1; + } + + ++l; + } + } + } + } + + private void initUniform(JsonElement json) throws JsonException + { + JsonObject jsonobject = JsonUtils.getJsonObject(json, "uniform"); + String s = JsonUtils.getString(jsonobject, "name"); + ShaderUniform shaderuniform = ((Shader)this.listShaders.get(this.listShaders.size() - 1)).getShaderManager().getShaderUniform(s); + + if (shaderuniform == null) + { + throw new JsonException("Uniform '" + s + "' does not exist"); + } + else + { + float[] afloat = new float[4]; + int i = 0; + + for (JsonElement jsonelement : JsonUtils.getJsonArray(jsonobject, "values")) + { + try + { + afloat[i] = JsonUtils.getFloat(jsonelement, "value"); + } + catch (Exception exception) + { + JsonException jsonexception = JsonException.forException(exception); + jsonexception.prependJsonKey("values[" + i + "]"); + throw jsonexception; + } + + ++i; + } + + switch (i) + { + case 0: + default: + break; + case 1: + shaderuniform.set(afloat[0]); + break; + case 2: + shaderuniform.set(afloat[0], afloat[1]); + break; + case 3: + shaderuniform.set(afloat[0], afloat[1], afloat[2]); + break; + case 4: + shaderuniform.set(afloat[0], afloat[1], afloat[2], afloat[3]); + } + } + } + + public Framebuffer getFramebufferRaw(String attributeName) + { + return this.mapFramebuffers.get(attributeName); + } + + public void addFramebuffer(String name, int width, int height) + { + Framebuffer framebuffer = new Framebuffer(width, height, true); + framebuffer.setFramebufferColor(0.0F, 0.0F, 0.0F, 0.0F); + this.mapFramebuffers.put(name, framebuffer); + + if (width == this.mainFramebufferWidth && height == this.mainFramebufferHeight) + { + this.listFramebuffers.add(framebuffer); + } + } + + public void deleteShaderGroup() + { + for (Framebuffer framebuffer : this.mapFramebuffers.values()) + { + framebuffer.deleteFramebuffer(); + } + + for (Shader shader : this.listShaders) + { + shader.deleteShader(); + } + + this.listShaders.clear(); + } + + public Shader addShader(String programName, Framebuffer framebufferIn, Framebuffer framebufferOut) throws JsonException, IOException + { + Shader shader = new Shader(this.resourceManager, programName, framebufferIn, framebufferOut); + this.listShaders.add(this.listShaders.size(), shader); + return shader; + } + + private void resetProjectionMatrix() + { + this.projectionMatrix = new Matrix4f(); + this.projectionMatrix.setIdentity(); + this.projectionMatrix.m00 = 2.0F / (float)this.mainFramebuffer.framebufferTextureWidth; + this.projectionMatrix.m11 = 2.0F / (float)(-this.mainFramebuffer.framebufferTextureHeight); + this.projectionMatrix.m22 = -0.0020001999F; + this.projectionMatrix.m33 = 1.0F; + this.projectionMatrix.m03 = -1.0F; + this.projectionMatrix.m13 = 1.0F; + this.projectionMatrix.m23 = -1.0001999F; + } + + public void createBindFramebuffers(int width, int height) + { + this.mainFramebufferWidth = this.mainFramebuffer.framebufferTextureWidth; + this.mainFramebufferHeight = this.mainFramebuffer.framebufferTextureHeight; + this.resetProjectionMatrix(); + + for (Shader shader : this.listShaders) + { + shader.setProjectionMatrix(this.projectionMatrix); + } + + for (Framebuffer framebuffer : this.listFramebuffers) + { + framebuffer.createBindFramebuffer(width, height); + } + } + + public void render(float partialTicks) + { + if (partialTicks < this.lastStamp) + { + this.time += 1.0F - this.lastStamp; + this.time += partialTicks; + } + else + { + this.time += partialTicks - this.lastStamp; + } + + for (this.lastStamp = partialTicks; this.time > 20.0F; this.time -= 20.0F) + { + ; + } + + for (Shader shader : this.listShaders) + { + shader.render(this.time / 20.0F); + } + } + + public final String getShaderGroupName() + { + return this.shaderGroupName; + } + + private Framebuffer getFramebuffer(String p_148017_1_) + { + if (p_148017_1_ == null) + { + return null; + } + else + { + return p_148017_1_.equals("minecraft:main") ? this.mainFramebuffer : (Framebuffer)this.mapFramebuffers.get(p_148017_1_); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderLinkHelper.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderLinkHelper.java new file mode 100644 index 0000000..2c7cec6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderLinkHelper.java @@ -0,0 +1,61 @@ +package net.minecraft.client.shader; + +import java.io.IOException; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.util.JsonException; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ShaderLinkHelper +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static ShaderLinkHelper staticShaderLinkHelper; + + public static void setNewStaticShaderLinkHelper() + { + staticShaderLinkHelper = new ShaderLinkHelper(); + } + + public static ShaderLinkHelper getStaticShaderLinkHelper() + { + return staticShaderLinkHelper; + } + + public void deleteShader(ShaderManager manager) + { + manager.getFragmentShaderLoader().deleteShader(manager); + manager.getVertexShaderLoader().deleteShader(manager); + OpenGlHelper.glDeleteProgram(manager.getProgram()); + } + + public int createProgram() throws JsonException + { + int i = OpenGlHelper.glCreateProgram(); + + if (i <= 0) + { + throw new JsonException("Could not create shader program (returned program ID " + i + ")"); + } + else + { + return i; + } + } + + public void linkProgram(ShaderManager manager) throws IOException + { + manager.getFragmentShaderLoader().attachShader(manager); + manager.getVertexShaderLoader().attachShader(manager); + OpenGlHelper.glLinkProgram(manager.getProgram()); + int i = OpenGlHelper.glGetProgrami(manager.getProgram(), OpenGlHelper.GL_LINK_STATUS); + + if (i == 0) + { + LOGGER.warn("Error encountered when linking program containing VS {} and FS {}. Log output:", manager.getVertexShaderLoader().getShaderFilename(), manager.getFragmentShaderLoader().getShaderFilename()); + LOGGER.warn(OpenGlHelper.glGetProgramInfoLog(manager.getProgram(), 32768)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderLoader.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderLoader.java new file mode 100644 index 0000000..04d2866 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderLoader.java @@ -0,0 +1,138 @@ +package net.minecraft.client.shader; + +import com.google.common.collect.Maps; +import java.io.BufferedInputStream; +import java.io.Closeable; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Map; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.util.JsonException; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.lwjgl.BufferUtils; + +@SideOnly(Side.CLIENT) +public class ShaderLoader +{ + private final ShaderLoader.ShaderType shaderType; + private final String shaderFilename; + private final int shader; + private int shaderAttachCount; + + private ShaderLoader(ShaderLoader.ShaderType type, int shaderId, String filename) + { + this.shaderType = type; + this.shader = shaderId; + this.shaderFilename = filename; + } + + public void attachShader(ShaderManager manager) + { + ++this.shaderAttachCount; + OpenGlHelper.glAttachShader(manager.getProgram(), this.shader); + } + + public void deleteShader(ShaderManager manager) + { + --this.shaderAttachCount; + + if (this.shaderAttachCount <= 0) + { + OpenGlHelper.glDeleteShader(this.shader); + this.shaderType.getLoadedShaders().remove(this.shaderFilename); + } + } + + public String getShaderFilename() + { + return this.shaderFilename; + } + + public static ShaderLoader loadShader(IResourceManager resourceManager, ShaderLoader.ShaderType type, String filename) throws IOException + { + ShaderLoader shaderloader = (ShaderLoader)type.getLoadedShaders().get(filename); + + if (shaderloader == null) + { + String[] rl = ResourceLocation.splitObjectName(filename); + ResourceLocation resourcelocation = new ResourceLocation(rl[0], "shaders/program/" + rl[1] + type.getShaderExtension()); + IResource iresource = resourceManager.getResource(resourcelocation); + + try + { + byte[] abyte = IOUtils.toByteArray(new BufferedInputStream(iresource.getInputStream())); + ByteBuffer bytebuffer = BufferUtils.createByteBuffer(abyte.length); + bytebuffer.put(abyte); + bytebuffer.position(0); + int i = OpenGlHelper.glCreateShader(type.getShaderMode()); + OpenGlHelper.glShaderSource(i, bytebuffer); + OpenGlHelper.glCompileShader(i); + + if (OpenGlHelper.glGetShaderi(i, OpenGlHelper.GL_COMPILE_STATUS) == 0) + { + String s = StringUtils.trim(OpenGlHelper.glGetShaderInfoLog(i, 32768)); + JsonException jsonexception = new JsonException("Couldn't compile " + type.getShaderName() + " program: " + s); + jsonexception.setFilenameAndFlush(resourcelocation.getResourcePath()); + throw jsonexception; + } + + shaderloader = new ShaderLoader(type, i, filename); + type.getLoadedShaders().put(filename, shaderloader); + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + } + + return shaderloader; + } + + @SideOnly(Side.CLIENT) + public static enum ShaderType + { + VERTEX("vertex", ".vsh", OpenGlHelper.GL_VERTEX_SHADER), + FRAGMENT("fragment", ".fsh", OpenGlHelper.GL_FRAGMENT_SHADER); + + private final String shaderName; + private final String shaderExtension; + private final int shaderMode; + private final Map loadedShaders = Maps.newHashMap(); + + private ShaderType(String shaderNameIn, String shaderExtensionIn, int shaderModeIn) + { + this.shaderName = shaderNameIn; + this.shaderExtension = shaderExtensionIn; + this.shaderMode = shaderModeIn; + } + + public String getShaderName() + { + return this.shaderName; + } + + private String getShaderExtension() + { + return this.shaderExtension; + } + + private int getShaderMode() + { + return this.shaderMode; + } + + /** + * gets a map of loaded shaders for the ShaderType. + */ + private Map getLoadedShaders() + { + return this.loadedShaders; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderManager.java new file mode 100644 index 0000000..04f4af6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderManager.java @@ -0,0 +1,429 @@ +package net.minecraft.client.shader; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.Closeable; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.texture.ITextureObject; +import net.minecraft.client.resources.IResource; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.util.JsonBlendingMode; +import net.minecraft.client.util.JsonException; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class ShaderManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final ShaderDefault DEFAULT_SHADER_UNIFORM = new ShaderDefault(); + private static ShaderManager staticShaderManager; + private static int currentProgram = -1; + private static boolean lastCull = true; + /** maps sampler names to their texture */ + private final Map shaderSamplers = Maps.newHashMap(); + private final List samplerNames = Lists.newArrayList(); + private final List shaderSamplerLocations = Lists.newArrayList(); + private final List shaderUniforms = Lists.newArrayList(); + private final List shaderUniformLocations = Lists.newArrayList(); + private final Map mappedShaderUniforms = Maps.newHashMap(); + private final int program; + private final String programFilename; + private final boolean useFaceCulling; + private boolean isDirty; + private final JsonBlendingMode blendingMode; + private final List attribLocations; + private final List attributes; + private final ShaderLoader vertexShaderLoader; + private final ShaderLoader fragmentShaderLoader; + + public ShaderManager(IResourceManager resourceManager, String programName) throws JsonException, IOException + { + JsonParser jsonparser = new JsonParser(); + String[] rl = ResourceLocation.splitObjectName(programName); + ResourceLocation resourcelocation = new ResourceLocation(rl[0], "shaders/program/" + rl[1] + ".json"); + this.programFilename = programName; + IResource iresource = null; + + try + { + iresource = resourceManager.getResource(resourcelocation); + JsonObject jsonobject = jsonparser.parse(IOUtils.toString(iresource.getInputStream(), StandardCharsets.UTF_8)).getAsJsonObject(); + String s = JsonUtils.getString(jsonobject, "vertex"); + String s1 = JsonUtils.getString(jsonobject, "fragment"); + JsonArray jsonarray = JsonUtils.getJsonArray(jsonobject, "samplers", (JsonArray)null); + + if (jsonarray != null) + { + int i = 0; + + for (JsonElement jsonelement : jsonarray) + { + try + { + this.parseSampler(jsonelement); + } + catch (Exception exception2) + { + JsonException jsonexception1 = JsonException.forException(exception2); + jsonexception1.prependJsonKey("samplers[" + i + "]"); + throw jsonexception1; + } + + ++i; + } + } + + JsonArray jsonarray1 = JsonUtils.getJsonArray(jsonobject, "attributes", (JsonArray)null); + + if (jsonarray1 != null) + { + int j = 0; + this.attribLocations = Lists.newArrayListWithCapacity(jsonarray1.size()); + this.attributes = Lists.newArrayListWithCapacity(jsonarray1.size()); + + for (JsonElement jsonelement1 : jsonarray1) + { + try + { + this.attributes.add(JsonUtils.getString(jsonelement1, "attribute")); + } + catch (Exception exception1) + { + JsonException jsonexception2 = JsonException.forException(exception1); + jsonexception2.prependJsonKey("attributes[" + j + "]"); + throw jsonexception2; + } + + ++j; + } + } + else + { + this.attribLocations = null; + this.attributes = null; + } + + JsonArray jsonarray2 = JsonUtils.getJsonArray(jsonobject, "uniforms", (JsonArray)null); + + if (jsonarray2 != null) + { + int k = 0; + + for (JsonElement jsonelement2 : jsonarray2) + { + try + { + this.parseUniform(jsonelement2); + } + catch (Exception exception) + { + JsonException jsonexception3 = JsonException.forException(exception); + jsonexception3.prependJsonKey("uniforms[" + k + "]"); + throw jsonexception3; + } + + ++k; + } + } + + this.blendingMode = JsonBlendingMode.parseBlendNode(JsonUtils.getJsonObject(jsonobject, "blend", (JsonObject)null)); + this.useFaceCulling = JsonUtils.getBoolean(jsonobject, "cull", true); + this.vertexShaderLoader = ShaderLoader.loadShader(resourceManager, ShaderLoader.ShaderType.VERTEX, s); + this.fragmentShaderLoader = ShaderLoader.loadShader(resourceManager, ShaderLoader.ShaderType.FRAGMENT, s1); + this.program = ShaderLinkHelper.getStaticShaderLinkHelper().createProgram(); + ShaderLinkHelper.getStaticShaderLinkHelper().linkProgram(this); + this.setupUniforms(); + + if (this.attributes != null) + { + for (String s2 : this.attributes) + { + int l = OpenGlHelper.glGetAttribLocation(this.program, s2); + this.attribLocations.add(Integer.valueOf(l)); + } + } + } + catch (Exception exception3) + { + JsonException jsonexception = JsonException.forException(exception3); + jsonexception.setFilenameAndFlush(resourcelocation.getResourcePath()); + throw jsonexception; + } + finally + { + IOUtils.closeQuietly((Closeable)iresource); + } + + this.markDirty(); + } + + public void deleteShader() + { + ShaderLinkHelper.getStaticShaderLinkHelper().deleteShader(this); + } + + public void endShader() + { + OpenGlHelper.glUseProgram(0); + currentProgram = -1; + staticShaderManager = null; + lastCull = true; + + for (int i = 0; i < this.shaderSamplerLocations.size(); ++i) + { + if (this.shaderSamplers.get(this.samplerNames.get(i)) != null) + { + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit + i); + GlStateManager.bindTexture(0); + } + } + } + + public void useShader() + { + this.isDirty = false; + staticShaderManager = this; + this.blendingMode.apply(); + + if (this.program != currentProgram) + { + OpenGlHelper.glUseProgram(this.program); + currentProgram = this.program; + } + + if (this.useFaceCulling) + { + GlStateManager.enableCull(); + } + else + { + GlStateManager.disableCull(); + } + + for (int i = 0; i < this.shaderSamplerLocations.size(); ++i) + { + if (this.shaderSamplers.get(this.samplerNames.get(i)) != null) + { + GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit + i); + GlStateManager.enableTexture2D(); + Object object = this.shaderSamplers.get(this.samplerNames.get(i)); + int j = -1; + + if (object instanceof Framebuffer) + { + j = ((Framebuffer)object).framebufferTexture; + } + else if (object instanceof ITextureObject) + { + j = ((ITextureObject)object).getGlTextureId(); + } + else if (object instanceof Integer) + { + j = ((Integer)object).intValue(); + } + + if (j != -1) + { + GlStateManager.bindTexture(j); + OpenGlHelper.glUniform1i(OpenGlHelper.glGetUniformLocation(this.program, this.samplerNames.get(i)), i); + } + } + } + + for (ShaderUniform shaderuniform : this.shaderUniforms) + { + shaderuniform.upload(); + } + } + + public void markDirty() + { + this.isDirty = true; + } + + /** + * gets a shader uniform for the name given. null if not found. + */ + @Nullable + public ShaderUniform getShaderUniform(String name) + { + return this.mappedShaderUniforms.get(name); + } + + /** + * gets a shader uniform for the name given. if not found, returns a default not-null value + */ + public ShaderUniform getShaderUniformOrDefault(String name) + { + ShaderUniform shaderuniform = this.getShaderUniform(name); + return (ShaderUniform)(shaderuniform == null ? DEFAULT_SHADER_UNIFORM : shaderuniform); + } + + /** + * goes through the parsed uniforms and samplers and connects them to their GL counterparts. + */ + private void setupUniforms() + { + int i = 0; + + for (int j = 0; i < this.samplerNames.size(); ++j) + { + String s = this.samplerNames.get(i); + int k = OpenGlHelper.glGetUniformLocation(this.program, s); + + if (k == -1) + { + LOGGER.warn("Shader {}could not find sampler named {} in the specified shader program.", this.programFilename, s); + this.shaderSamplers.remove(s); + this.samplerNames.remove(j); + --j; + } + else + { + this.shaderSamplerLocations.add(Integer.valueOf(k)); + } + + ++i; + } + + for (ShaderUniform shaderuniform : this.shaderUniforms) + { + String s1 = shaderuniform.getShaderName(); + int l = OpenGlHelper.glGetUniformLocation(this.program, s1); + + if (l == -1) + { + LOGGER.warn("Could not find uniform named {} in the specified shader program.", (Object)s1); + } + else + { + this.shaderUniformLocations.add(Integer.valueOf(l)); + shaderuniform.setUniformLocation(l); + this.mappedShaderUniforms.put(s1, shaderuniform); + } + } + } + + private void parseSampler(JsonElement element) throws JsonException + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "sampler"); + String s = JsonUtils.getString(jsonobject, "name"); + + if (!JsonUtils.isString(jsonobject, "file")) + { + this.shaderSamplers.put(s, (Object)null); + this.samplerNames.add(s); + } + else + { + this.samplerNames.add(s); + } + } + + /** + * adds a shader sampler texture. if it already exists, replaces it. + */ + public void addSamplerTexture(String name, Object samplerTexture) + { + if (this.shaderSamplers.containsKey(name)) + { + this.shaderSamplers.remove(name); + } + + this.shaderSamplers.put(name, samplerTexture); + this.markDirty(); + } + + private void parseUniform(JsonElement element) throws JsonException + { + JsonObject jsonobject = JsonUtils.getJsonObject(element, "uniform"); + String s = JsonUtils.getString(jsonobject, "name"); + int i = ShaderUniform.parseType(JsonUtils.getString(jsonobject, "type")); + int j = JsonUtils.getInt(jsonobject, "count"); + float[] afloat = new float[Math.max(j, 16)]; + JsonArray jsonarray = JsonUtils.getJsonArray(jsonobject, "values"); + + if (jsonarray.size() != j && jsonarray.size() > 1) + { + throw new JsonException("Invalid amount of values specified (expected " + j + ", found " + jsonarray.size() + ")"); + } + else + { + int k = 0; + + for (JsonElement jsonelement : jsonarray) + { + try + { + afloat[k] = JsonUtils.getFloat(jsonelement, "value"); + } + catch (Exception exception) + { + JsonException jsonexception = JsonException.forException(exception); + jsonexception.prependJsonKey("values[" + k + "]"); + throw jsonexception; + } + + ++k; + } + + if (j > 1 && jsonarray.size() == 1) + { + while (k < j) + { + afloat[k] = afloat[0]; + ++k; + } + } + + int l = j > 1 && j <= 4 && i < 8 ? j - 1 : 0; + ShaderUniform shaderuniform = new ShaderUniform(s, i + l, j, this); + + if (i <= 3) + { + shaderuniform.set((int)afloat[0], (int)afloat[1], (int)afloat[2], (int)afloat[3]); + } + else if (i <= 7) + { + shaderuniform.setSafe(afloat[0], afloat[1], afloat[2], afloat[3]); + } + else + { + shaderuniform.set(afloat); + } + + this.shaderUniforms.add(shaderuniform); + } + } + + public ShaderLoader getVertexShaderLoader() + { + return this.vertexShaderLoader; + } + + public ShaderLoader getFragmentShaderLoader() + { + return this.fragmentShaderLoader; + } + + public int getProgram() + { + return this.program; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderUniform.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderUniform.java new file mode 100644 index 0000000..4ed1c82 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/ShaderUniform.java @@ -0,0 +1,315 @@ +package net.minecraft.client.shader; + +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.BufferUtils; +import org.lwjgl.util.vector.Matrix4f; + +@SideOnly(Side.CLIENT) +public class ShaderUniform +{ + private static final Logger LOGGER = LogManager.getLogger(); + private int uniformLocation; + private final int uniformCount; + private final int uniformType; + private final IntBuffer uniformIntBuffer; + private final FloatBuffer uniformFloatBuffer; + private final String shaderName; + private boolean dirty; + private final ShaderManager shaderManager; + + public ShaderUniform(String name, int type, int count, ShaderManager manager) + { + this.shaderName = name; + this.uniformCount = count; + this.uniformType = type; + this.shaderManager = manager; + + if (type <= 3) + { + this.uniformIntBuffer = BufferUtils.createIntBuffer(count); + this.uniformFloatBuffer = null; + } + else + { + this.uniformIntBuffer = null; + this.uniformFloatBuffer = BufferUtils.createFloatBuffer(count); + } + + this.uniformLocation = -1; + this.markDirty(); + } + + private void markDirty() + { + this.dirty = true; + + if (this.shaderManager != null) + { + this.shaderManager.markDirty(); + } + } + + public static int parseType(String typeName) + { + int i = -1; + + if ("int".equals(typeName)) + { + i = 0; + } + else if ("float".equals(typeName)) + { + i = 4; + } + else if (typeName.startsWith("matrix")) + { + if (typeName.endsWith("2x2")) + { + i = 8; + } + else if (typeName.endsWith("3x3")) + { + i = 9; + } + else if (typeName.endsWith("4x4")) + { + i = 10; + } + } + + return i; + } + + public void setUniformLocation(int uniformLocationIn) + { + this.uniformLocation = uniformLocationIn; + } + + public String getShaderName() + { + return this.shaderName; + } + + public void set(float p_148090_1_) + { + this.uniformFloatBuffer.position(0); + this.uniformFloatBuffer.put(0, p_148090_1_); + this.markDirty(); + } + + public void set(float p_148087_1_, float p_148087_2_) + { + this.uniformFloatBuffer.position(0); + this.uniformFloatBuffer.put(0, p_148087_1_); + this.uniformFloatBuffer.put(1, p_148087_2_); + this.markDirty(); + } + + public void set(float p_148095_1_, float p_148095_2_, float p_148095_3_) + { + this.uniformFloatBuffer.position(0); + this.uniformFloatBuffer.put(0, p_148095_1_); + this.uniformFloatBuffer.put(1, p_148095_2_); + this.uniformFloatBuffer.put(2, p_148095_3_); + this.markDirty(); + } + + public void set(float p_148081_1_, float p_148081_2_, float p_148081_3_, float p_148081_4_) + { + this.uniformFloatBuffer.position(0); + this.uniformFloatBuffer.put(p_148081_1_); + this.uniformFloatBuffer.put(p_148081_2_); + this.uniformFloatBuffer.put(p_148081_3_); + this.uniformFloatBuffer.put(p_148081_4_); + this.uniformFloatBuffer.flip(); + this.markDirty(); + } + + public void setSafe(float p_148092_1_, float p_148092_2_, float p_148092_3_, float p_148092_4_) + { + this.uniformFloatBuffer.position(0); + + if (this.uniformType >= 4) + { + this.uniformFloatBuffer.put(0, p_148092_1_); + } + + if (this.uniformType >= 5) + { + this.uniformFloatBuffer.put(1, p_148092_2_); + } + + if (this.uniformType >= 6) + { + this.uniformFloatBuffer.put(2, p_148092_3_); + } + + if (this.uniformType >= 7) + { + this.uniformFloatBuffer.put(3, p_148092_4_); + } + + this.markDirty(); + } + + public void set(int p_148083_1_, int p_148083_2_, int p_148083_3_, int p_148083_4_) + { + this.uniformIntBuffer.position(0); + + if (this.uniformType >= 0) + { + this.uniformIntBuffer.put(0, p_148083_1_); + } + + if (this.uniformType >= 1) + { + this.uniformIntBuffer.put(1, p_148083_2_); + } + + if (this.uniformType >= 2) + { + this.uniformIntBuffer.put(2, p_148083_3_); + } + + if (this.uniformType >= 3) + { + this.uniformIntBuffer.put(3, p_148083_4_); + } + + this.markDirty(); + } + + public void set(float[] p_148097_1_) + { + if (p_148097_1_.length < this.uniformCount) + { + LOGGER.warn("Uniform.set called with a too-small value array (expected {}, got {}). Ignoring.", Integer.valueOf(this.uniformCount), Integer.valueOf(p_148097_1_.length)); + } + else + { + this.uniformFloatBuffer.position(0); + this.uniformFloatBuffer.put(p_148097_1_); + this.uniformFloatBuffer.position(0); + this.markDirty(); + } + } + + public void set(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23, float m30, float m31, float m32, float m33) + { + this.uniformFloatBuffer.position(0); + this.uniformFloatBuffer.put(0, m00); + this.uniformFloatBuffer.put(1, m01); + this.uniformFloatBuffer.put(2, m02); + this.uniformFloatBuffer.put(3, m03); + this.uniformFloatBuffer.put(4, m10); + this.uniformFloatBuffer.put(5, m11); + this.uniformFloatBuffer.put(6, m12); + this.uniformFloatBuffer.put(7, m13); + this.uniformFloatBuffer.put(8, m20); + this.uniformFloatBuffer.put(9, m21); + this.uniformFloatBuffer.put(10, m22); + this.uniformFloatBuffer.put(11, m23); + this.uniformFloatBuffer.put(12, m30); + this.uniformFloatBuffer.put(13, m31); + this.uniformFloatBuffer.put(14, m32); + this.uniformFloatBuffer.put(15, m33); + this.markDirty(); + } + + public void set(Matrix4f matrix) + { + this.set(matrix.m00, matrix.m01, matrix.m02, matrix.m03, matrix.m10, matrix.m11, matrix.m12, matrix.m13, matrix.m20, matrix.m21, matrix.m22, matrix.m23, matrix.m30, matrix.m31, matrix.m32, matrix.m33); + } + + public void upload() + { + if (!this.dirty) + { + ; + } + + this.dirty = false; + + if (this.uniformType <= 3) + { + this.uploadInt(); + } + else if (this.uniformType <= 7) + { + this.uploadFloat(); + } + else + { + if (this.uniformType > 10) + { + LOGGER.warn("Uniform.upload called, but type value ({}) is not a valid type. Ignoring.", (int)this.uniformType); + return; + } + + this.uploadFloatMatrix(); + } + } + + private void uploadInt() + { + switch (this.uniformType) + { + case 0: + OpenGlHelper.glUniform1(this.uniformLocation, this.uniformIntBuffer); + break; + case 1: + OpenGlHelper.glUniform2(this.uniformLocation, this.uniformIntBuffer); + break; + case 2: + OpenGlHelper.glUniform3(this.uniformLocation, this.uniformIntBuffer); + break; + case 3: + OpenGlHelper.glUniform4(this.uniformLocation, this.uniformIntBuffer); + break; + default: + LOGGER.warn("Uniform.upload called, but count value ({}) is not in the range of 1 to 4. Ignoring.", (int)this.uniformCount); + } + } + + private void uploadFloat() + { + switch (this.uniformType) + { + case 4: + OpenGlHelper.glUniform1(this.uniformLocation, this.uniformFloatBuffer); + break; + case 5: + OpenGlHelper.glUniform2(this.uniformLocation, this.uniformFloatBuffer); + break; + case 6: + OpenGlHelper.glUniform3(this.uniformLocation, this.uniformFloatBuffer); + break; + case 7: + OpenGlHelper.glUniform4(this.uniformLocation, this.uniformFloatBuffer); + break; + default: + LOGGER.warn("Uniform.upload called, but count value ({}) is not in the range of 1 to 4. Ignoring.", (int)this.uniformCount); + } + } + + private void uploadFloatMatrix() + { + switch (this.uniformType) + { + case 8: + OpenGlHelper.glUniformMatrix2(this.uniformLocation, true, this.uniformFloatBuffer); + break; + case 9: + OpenGlHelper.glUniformMatrix3(this.uniformLocation, true, this.uniformFloatBuffer); + break; + case 10: + OpenGlHelper.glUniformMatrix4(this.uniformLocation, true, this.uniformFloatBuffer); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/shader/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/shader/package-info.java new file mode 100644 index 0000000..95a2f4b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/shader/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.shader; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/CompletedTutorialStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/CompletedTutorialStep.java new file mode 100644 index 0000000..c17111f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/CompletedTutorialStep.java @@ -0,0 +1,15 @@ +package net.minecraft.client.tutorial; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class CompletedTutorialStep implements ITutorialStep +{ + private final Tutorial tutorial; + + public CompletedTutorialStep(Tutorial tutorial) + { + this.tutorial = tutorial; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/CraftPlanksStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/CraftPlanksStep.java new file mode 100644 index 0000000..b475ae4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/CraftPlanksStep.java @@ -0,0 +1,100 @@ +package net.minecraft.client.tutorial; + +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.toasts.TutorialToast; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class CraftPlanksStep implements ITutorialStep +{ + private static final ITextComponent TITLE = new TextComponentTranslation("tutorial.craft_planks.title", new Object[0]); + private static final ITextComponent DESCRIPTION = new TextComponentTranslation("tutorial.craft_planks.description", new Object[0]); + private final Tutorial tutorial; + private TutorialToast toast; + private int timeWaiting; + + public CraftPlanksStep(Tutorial tutorial) + { + this.tutorial = tutorial; + } + + public void update() + { + ++this.timeWaiting; + + if (this.tutorial.getGameType() != GameType.SURVIVAL) + { + this.tutorial.setStep(TutorialSteps.NONE); + } + else + { + if (this.timeWaiting == 1) + { + EntityPlayerSP entityplayersp = this.tutorial.getMinecraft().player; + + if (entityplayersp != null) + { + if (entityplayersp.inventory.hasItemStack(new ItemStack(Blocks.PLANKS))) + { + this.tutorial.setStep(TutorialSteps.NONE); + return; + } + + if (didPlayerCraftedPlanks(entityplayersp)) + { + this.tutorial.setStep(TutorialSteps.NONE); + return; + } + } + } + + if (this.timeWaiting >= 1200 && this.toast == null) + { + this.toast = new TutorialToast(TutorialToast.Icons.WOODEN_PLANKS, TITLE, DESCRIPTION, false); + this.tutorial.getMinecraft().getToastGui().add(this.toast); + } + } + } + + public void onStop() + { + if (this.toast != null) + { + this.toast.hide(); + this.toast = null; + } + } + + /** + * Called when the player pick up an ItemStack + * + * @param stack The ItemStack + */ + public void handleSetSlot(ItemStack stack) + { + if (stack.getItem() == Item.getItemFromBlock(Blocks.PLANKS)) + { + this.tutorial.setStep(TutorialSteps.NONE); + } + } + + /** + * Indicates if the players crafted at least one time planks. + * + * @param player The player + */ + public static boolean didPlayerCraftedPlanks(EntityPlayerSP player) + { + StatBase statbase = StatList.getCraftStats(Item.getItemFromBlock(Blocks.PLANKS)); + return statbase != null && player.getStatFileWriter().readStat(statbase) > 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/FindTreeStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/FindTreeStep.java new file mode 100644 index 0000000..e9572e3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/FindTreeStep.java @@ -0,0 +1,137 @@ +package net.minecraft.client.tutorial; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.toasts.TutorialToast; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatList; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FindTreeStep implements ITutorialStep +{ + private static final Set TREE_BLOCKS = Sets.newHashSet(Blocks.LOG, Blocks.LOG2, Blocks.LEAVES, Blocks.LEAVES2); + private static final ITextComponent TITLE = new TextComponentTranslation("tutorial.find_tree.title", new Object[0]); + private static final ITextComponent DESCRIPTION = new TextComponentTranslation("tutorial.find_tree.description", new Object[0]); + private final Tutorial tutorial; + private TutorialToast toast; + private int timeWaiting; + + public FindTreeStep(Tutorial tutorial) + { + this.tutorial = tutorial; + } + + public void update() + { + ++this.timeWaiting; + + if (this.tutorial.getGameType() != GameType.SURVIVAL) + { + this.tutorial.setStep(TutorialSteps.NONE); + } + else + { + if (this.timeWaiting == 1) + { + EntityPlayerSP entityplayersp = this.tutorial.getMinecraft().player; + + if (entityplayersp != null) + { + for (Block block : TREE_BLOCKS) + { + if (entityplayersp.inventory.hasItemStack(new ItemStack(block))) + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + return; + } + } + + if (hasPunchedTreesPreviously(entityplayersp)) + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + return; + } + } + } + + if (this.timeWaiting >= 6000 && this.toast == null) + { + this.toast = new TutorialToast(TutorialToast.Icons.TREE, TITLE, DESCRIPTION, false); + this.tutorial.getMinecraft().getToastGui().add(this.toast); + } + } + } + + public void onStop() + { + if (this.toast != null) + { + this.toast.hide(); + this.toast = null; + } + } + + /** + * Handles blocks and entities hovering + * + * @param worldIn The world on the client side, can be null + * @param result The result of the ray trace + */ + public void onMouseHover(WorldClient worldIn, RayTraceResult result) + { + if (result.typeOfHit == RayTraceResult.Type.BLOCK && result.getBlockPos() != null) + { + IBlockState iblockstate = worldIn.getBlockState(result.getBlockPos()); + + if (TREE_BLOCKS.contains(iblockstate.getBlock())) + { + this.tutorial.setStep(TutorialSteps.PUNCH_TREE); + } + } + } + + /** + * Called when the player pick up an ItemStack + * + * @param stack The ItemStack + */ + public void handleSetSlot(ItemStack stack) + { + for (Block block : TREE_BLOCKS) + { + if (stack.getItem() == Item.getItemFromBlock(block)) + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + return; + } + } + } + + public static boolean hasPunchedTreesPreviously(EntityPlayerSP p_194070_0_) + { + for (Block block : TREE_BLOCKS) + { + StatBase statbase = StatList.getBlockStats(block); + + if (statbase != null && p_194070_0_.getStatFileWriter().readStat(statbase) > 0) + { + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/ITutorialStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/ITutorialStep.java new file mode 100644 index 0000000..8da623b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/ITutorialStep.java @@ -0,0 +1,47 @@ +package net.minecraft.client.tutorial; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MouseHelper; +import net.minecraft.util.MovementInput; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITutorialStep +{ +default void onStop() + { + } + +default void update() + { + } + +default void handleMovement(MovementInput input) + { + } + +default void handleMouse(MouseHelper mouseHelperIn) + { + } + +default void onMouseHover(WorldClient worldIn, RayTraceResult result) + { + } + +default void onHitBlock(WorldClient worldIn, BlockPos pos, IBlockState state, float diggingStage) + { + } + +default void openInventory() + { + } + +default void handleSetSlot(ItemStack stack) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/MovementStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/MovementStep.java new file mode 100644 index 0000000..81a0e46 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/MovementStep.java @@ -0,0 +1,151 @@ +package net.minecraft.client.tutorial; + +import net.minecraft.client.gui.toasts.TutorialToast; +import net.minecraft.util.MouseHelper; +import net.minecraft.util.MovementInput; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MovementStep implements ITutorialStep +{ + private static final ITextComponent MOVE_TITLE = new TextComponentTranslation("tutorial.move.title", new Object[] {Tutorial.createKeybindComponent("forward"), Tutorial.createKeybindComponent("left"), Tutorial.createKeybindComponent("back"), Tutorial.createKeybindComponent("right")}); + private static final ITextComponent MOVE_DESCRIPTION = new TextComponentTranslation("tutorial.move.description", new Object[] {Tutorial.createKeybindComponent("jump")}); + private static final ITextComponent LOOK_TITLE = new TextComponentTranslation("tutorial.look.title", new Object[0]); + private static final ITextComponent LOOK_DESCRIPTION = new TextComponentTranslation("tutorial.look.description", new Object[0]); + private final Tutorial tutorial; + private TutorialToast moveToast; + private TutorialToast lookToast; + private int timeWaiting; + private int timeMoved; + private int timeLooked; + private boolean moved; + private boolean turned; + private int moveCompleted = -1; + private int lookCompleted = -1; + + public MovementStep(Tutorial tutorial) + { + this.tutorial = tutorial; + } + + public void update() + { + ++this.timeWaiting; + + if (this.moved) + { + ++this.timeMoved; + this.moved = false; + } + + if (this.turned) + { + ++this.timeLooked; + this.turned = false; + } + + if (this.moveCompleted == -1 && this.timeMoved > 40) + { + if (this.moveToast != null) + { + this.moveToast.hide(); + this.moveToast = null; + } + + this.moveCompleted = this.timeWaiting; + } + + if (this.lookCompleted == -1 && this.timeLooked > 40) + { + if (this.lookToast != null) + { + this.lookToast.hide(); + this.lookToast = null; + } + + this.lookCompleted = this.timeWaiting; + } + + if (this.moveCompleted != -1 && this.lookCompleted != -1) + { + if (this.tutorial.getGameType() == GameType.SURVIVAL) + { + this.tutorial.setStep(TutorialSteps.FIND_TREE); + } + else + { + this.tutorial.setStep(TutorialSteps.NONE); + } + } + + if (this.moveToast != null) + { + this.moveToast.setProgress((float)this.timeMoved / 40.0F); + } + + if (this.lookToast != null) + { + this.lookToast.setProgress((float)this.timeLooked / 40.0F); + } + + if (this.timeWaiting >= 100) + { + if (this.moveCompleted == -1 && this.moveToast == null) + { + this.moveToast = new TutorialToast(TutorialToast.Icons.MOVEMENT_KEYS, MOVE_TITLE, MOVE_DESCRIPTION, true); + this.tutorial.getMinecraft().getToastGui().add(this.moveToast); + } + else if (this.moveCompleted != -1 && this.timeWaiting - this.moveCompleted >= 20 && this.lookCompleted == -1 && this.lookToast == null) + { + this.lookToast = new TutorialToast(TutorialToast.Icons.MOUSE, LOOK_TITLE, LOOK_DESCRIPTION, true); + this.tutorial.getMinecraft().getToastGui().add(this.lookToast); + } + } + } + + public void onStop() + { + if (this.moveToast != null) + { + this.moveToast.hide(); + this.moveToast = null; + } + + if (this.lookToast != null) + { + this.lookToast.hide(); + this.lookToast = null; + } + } + + /** + * Handles the player movement + * + * @param input The movement inputs of the player + */ + public void handleMovement(MovementInput input) + { + if (input.forwardKeyDown || input.backKeyDown || input.leftKeyDown || input.rightKeyDown || input.jump) + { + this.moved = true; + } + } + + /** + * Handles mouse mouvement + * + * @param mouseHelperIn A MouseHelper providing you informations about the player mouse + */ + public void handleMouse(MouseHelper mouseHelperIn) + { + if ((double)MathHelper.abs(mouseHelperIn.deltaX) > 0.01D || (double)MathHelper.abs(mouseHelperIn.deltaY) > 0.01D) + { + this.turned = true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/OpenInventoryStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/OpenInventoryStep.java new file mode 100644 index 0000000..7ea50ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/OpenInventoryStep.java @@ -0,0 +1,58 @@ +package net.minecraft.client.tutorial; + +import net.minecraft.client.gui.toasts.TutorialToast; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class OpenInventoryStep implements ITutorialStep +{ + private static final ITextComponent TITLE = new TextComponentTranslation("tutorial.open_inventory.title", new Object[0]); + private static final ITextComponent DESCRIPTION = new TextComponentTranslation("tutorial.open_inventory.description", new Object[] {Tutorial.createKeybindComponent("inventory")}); + private final Tutorial tutorial; + private TutorialToast toast; + private int timeWaiting; + + public OpenInventoryStep(Tutorial tutorial) + { + this.tutorial = tutorial; + } + + public void update() + { + ++this.timeWaiting; + + if (this.tutorial.getGameType() != GameType.SURVIVAL) + { + this.tutorial.setStep(TutorialSteps.NONE); + } + else + { + if (this.timeWaiting >= 600 && this.toast == null) + { + this.toast = new TutorialToast(TutorialToast.Icons.RECIPE_BOOK, TITLE, DESCRIPTION, false); + this.tutorial.getMinecraft().getToastGui().add(this.toast); + } + } + } + + public void onStop() + { + if (this.toast != null) + { + this.toast.hide(); + this.toast = null; + } + } + + /** + * Called when the player opens his inventory + */ + public void openInventory() + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/PunchTreeStep.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/PunchTreeStep.java new file mode 100644 index 0000000..e4d4bc6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/PunchTreeStep.java @@ -0,0 +1,136 @@ +package net.minecraft.client.tutorial; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.toasts.TutorialToast; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class PunchTreeStep implements ITutorialStep +{ + private static final Set LOG_BLOCKS = Sets.newHashSet(Blocks.LOG, Blocks.LOG2); + private static final ITextComponent TITLE = new TextComponentTranslation("tutorial.punch_tree.title", new Object[0]); + private static final ITextComponent DESCRIPTION = new TextComponentTranslation("tutorial.punch_tree.description", new Object[] {Tutorial.createKeybindComponent("attack")}); + private final Tutorial tutorial; + private TutorialToast toast; + private int timeWaiting; + private int resetCount; + + public PunchTreeStep(Tutorial tutorial) + { + this.tutorial = tutorial; + } + + public void update() + { + ++this.timeWaiting; + + if (this.tutorial.getGameType() != GameType.SURVIVAL) + { + this.tutorial.setStep(TutorialSteps.NONE); + } + else + { + if (this.timeWaiting == 1) + { + EntityPlayerSP entityplayersp = this.tutorial.getMinecraft().player; + + if (entityplayersp != null) + { + for (Block block : LOG_BLOCKS) + { + if (entityplayersp.inventory.hasItemStack(new ItemStack(block))) + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + return; + } + } + + if (FindTreeStep.hasPunchedTreesPreviously(entityplayersp)) + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + return; + } + } + } + + if ((this.timeWaiting >= 600 || this.resetCount > 3) && this.toast == null) + { + this.toast = new TutorialToast(TutorialToast.Icons.TREE, TITLE, DESCRIPTION, true); + this.tutorial.getMinecraft().getToastGui().add(this.toast); + } + } + } + + public void onStop() + { + if (this.toast != null) + { + this.toast.hide(); + this.toast = null; + } + } + + /** + * Called when a player hits block to destroy it. + * + * @param worldIn The world the player is in + * @param pos The block position + * @param state The block state + * @param diggingStage The amount of digging, 1.0 means the block is totally digged, -1.0 means the player stopped + */ + public void onHitBlock(WorldClient worldIn, BlockPos pos, IBlockState state, float diggingStage) + { + boolean flag = LOG_BLOCKS.contains(state.getBlock()); + + if (flag && diggingStage > 0.0F) + { + if (this.toast != null) + { + this.toast.setProgress(diggingStage); + } + + if (diggingStage >= 1.0F) + { + this.tutorial.setStep(TutorialSteps.OPEN_INVENTORY); + } + } + else if (this.toast != null) + { + this.toast.setProgress(0.0F); + } + else if (flag) + { + ++this.resetCount; + } + } + + /** + * Called when the player pick up an ItemStack + * + * @param stack The ItemStack + */ + public void handleSetSlot(ItemStack stack) + { + for (Block block : LOG_BLOCKS) + { + if (stack.getItem() == Item.getItemFromBlock(block)) + { + this.tutorial.setStep(TutorialSteps.CRAFT_PLANKS); + return; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/Tutorial.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/Tutorial.java new file mode 100644 index 0000000..874b755 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/Tutorial.java @@ -0,0 +1,158 @@ +package net.minecraft.client.tutorial; + +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MouseHelper; +import net.minecraft.util.MovementInput; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentKeybind; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Tutorial +{ + private final Minecraft minecraft; + @Nullable + private ITutorialStep tutorialStep; + + public Tutorial(Minecraft minecraft) + { + this.minecraft = minecraft; + } + + public void handleMovement(MovementInput p_193293_1_) + { + if (this.tutorialStep != null) + { + this.tutorialStep.handleMovement(p_193293_1_); + } + } + + public void handleMouse(MouseHelper p_193299_1_) + { + if (this.tutorialStep != null) + { + this.tutorialStep.handleMouse(p_193299_1_); + } + } + + public void onMouseHover(@Nullable WorldClient worldIn, @Nullable RayTraceResult result) + { + if (this.tutorialStep != null && result != null && worldIn != null) + { + this.tutorialStep.onMouseHover(worldIn, result); + } + } + + public void onHitBlock(WorldClient worldIn, BlockPos pos, IBlockState state, float diggingStage) + { + if (this.tutorialStep != null) + { + this.tutorialStep.onHitBlock(worldIn, pos, state, diggingStage); + } + } + + /** + * Called when the player opens his inventory + */ + public void openInventory() + { + if (this.tutorialStep != null) + { + this.tutorialStep.openInventory(); + } + } + + /** + * Called when the player pick up an ItemStack + * + * @param stack The ItemStack + */ + public void handleSetSlot(ItemStack stack) + { + if (this.tutorialStep != null) + { + this.tutorialStep.handleSetSlot(stack); + } + } + + public void stop() + { + if (this.tutorialStep != null) + { + this.tutorialStep.onStop(); + this.tutorialStep = null; + } + } + + /** + * Reloads the tutorial step from the game settings + */ + public void reload() + { + if (this.tutorialStep != null) + { + this.stop(); + } + + this.tutorialStep = this.minecraft.gameSettings.tutorialStep.create(this); + } + + public void update() + { + if (this.tutorialStep != null) + { + if (this.minecraft.world != null) + { + this.tutorialStep.update(); + } + else + { + this.stop(); + } + } + else if (this.minecraft.world != null) + { + this.reload(); + } + } + + /** + * Sets a new step to the tutorial + */ + public void setStep(TutorialSteps step) + { + this.minecraft.gameSettings.tutorialStep = step; + this.minecraft.gameSettings.saveOptions(); + + if (this.tutorialStep != null) + { + this.tutorialStep.onStop(); + this.tutorialStep = step.create(this); + } + } + + public Minecraft getMinecraft() + { + return this.minecraft; + } + + public GameType getGameType() + { + return this.minecraft.playerController == null ? GameType.NOT_SET : this.minecraft.playerController.getCurrentGameType(); + } + + public static ITextComponent createKeybindComponent(String keybind) + { + TextComponentKeybind textcomponentkeybind = new TextComponentKeybind("key." + keybind); + textcomponentkeybind.getStyle().setBold(Boolean.valueOf(true)); + return textcomponentkeybind; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/TutorialSteps.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/TutorialSteps.java new file mode 100644 index 0000000..0b259de --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/TutorialSteps.java @@ -0,0 +1,48 @@ +package net.minecraft.client.tutorial; + +import java.util.function.Function; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public enum TutorialSteps +{ + MOVEMENT("movement", MovementStep::new), + FIND_TREE("find_tree", FindTreeStep::new), + PUNCH_TREE("punch_tree", PunchTreeStep::new), + OPEN_INVENTORY("open_inventory", OpenInventoryStep::new), + CRAFT_PLANKS("craft_planks", CraftPlanksStep::new), + NONE("none", CompletedTutorialStep::new); + + private final String name; + private final Function < Tutorial, ? extends ITutorialStep > tutorial; + + private TutorialSteps(String nameIn, Function constructor) + { + this.name = nameIn; + this.tutorial = constructor; + } + + public ITutorialStep create(Tutorial tutorial) + { + return this.tutorial.apply(tutorial); + } + + public String getName() + { + return this.name; + } + + public static TutorialSteps getTutorial(String tutorialName) + { + for (TutorialSteps tutorialsteps : values()) + { + if (tutorialsteps.name.equals(tutorialName)) + { + return tutorialsteps; + } + } + + return NONE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/package-info.java new file mode 100644 index 0000000..7a81c56 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/tutorial/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.tutorial; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/ISearchTree.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/ISearchTree.java new file mode 100644 index 0000000..7c547c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/ISearchTree.java @@ -0,0 +1,22 @@ +package net.minecraft.client.util; + +import java.util.List; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ISearchTree +{ + /** + * Searches this search tree for the given text. + *

+ * If the query does not contain a :, then only {@link #byName} is searched; if it does contain a + * colon, both {@link #byName} and {@link #byId} are searched and the results are merged using a {@link + * MergingIterator}. + * @return A list of all matching items in this search tree. + * + * @param searchText The text to search for. Must be normalized with toLowerCase(Locale.ROOT) before + * calling this method. + */ + List search(String searchText); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/ITooltipFlag.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/ITooltipFlag.java new file mode 100644 index 0000000..203c61e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/ITooltipFlag.java @@ -0,0 +1,29 @@ +package net.minecraft.client.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITooltipFlag +{ + boolean isAdvanced(); + + @SideOnly(Side.CLIENT) + public static enum TooltipFlags implements ITooltipFlag + { + NORMAL(false), + ADVANCED(true); + + final boolean isAdvanced; + + private TooltipFlags(boolean advanced) + { + this.isAdvanced = advanced; + } + + public boolean isAdvanced() + { + return this.isAdvanced; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/JsonBlendingMode.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/JsonBlendingMode.java new file mode 100644 index 0000000..64aa0e4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/JsonBlendingMode.java @@ -0,0 +1,303 @@ +package net.minecraft.client.util; + +import com.google.gson.JsonObject; +import java.util.Locale; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class JsonBlendingMode +{ + private static JsonBlendingMode lastApplied; + private final int srcColorFactor; + private final int srcAlphaFactor; + private final int destColorFactor; + private final int destAlphaFactor; + private final int blendFunction; + private final boolean separateBlend; + private final boolean opaque; + + private JsonBlendingMode(boolean separateBlendIn, boolean opaqueIn, int srcColorFactorIn, int destColorFactorIn, int srcAlphaFactorIn, int destAlphaFactorIn, int blendFunctionIn) + { + this.separateBlend = separateBlendIn; + this.srcColorFactor = srcColorFactorIn; + this.destColorFactor = destColorFactorIn; + this.srcAlphaFactor = srcAlphaFactorIn; + this.destAlphaFactor = destAlphaFactorIn; + this.opaque = opaqueIn; + this.blendFunction = blendFunctionIn; + } + + public JsonBlendingMode() + { + this(false, true, 1, 0, 1, 0, 32774); + } + + public JsonBlendingMode(int srcFactor, int dstFactor, int blendFunctionIn) + { + this(false, false, srcFactor, dstFactor, srcFactor, dstFactor, blendFunctionIn); + } + + public JsonBlendingMode(int srcColorFactorIn, int destColorFactorIn, int srcAlphaFactorIn, int destAlphaFactorIn, int blendFunctionIn) + { + this(true, false, srcColorFactorIn, destColorFactorIn, srcAlphaFactorIn, destAlphaFactorIn, blendFunctionIn); + } + + public void apply() + { + if (!this.equals(lastApplied)) + { + if (lastApplied == null || this.opaque != lastApplied.isOpaque()) + { + lastApplied = this; + + if (this.opaque) + { + GlStateManager.disableBlend(); + return; + } + + GlStateManager.enableBlend(); + } + + GlStateManager.glBlendEquation(this.blendFunction); + + if (this.separateBlend) + { + GlStateManager.tryBlendFuncSeparate(this.srcColorFactor, this.destColorFactor, this.srcAlphaFactor, this.destAlphaFactor); + } + else + { + GlStateManager.blendFunc(this.srcColorFactor, this.destColorFactor); + } + } + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof JsonBlendingMode)) + { + return false; + } + else + { + JsonBlendingMode jsonblendingmode = (JsonBlendingMode)p_equals_1_; + + if (this.blendFunction != jsonblendingmode.blendFunction) + { + return false; + } + else if (this.destAlphaFactor != jsonblendingmode.destAlphaFactor) + { + return false; + } + else if (this.destColorFactor != jsonblendingmode.destColorFactor) + { + return false; + } + else if (this.opaque != jsonblendingmode.opaque) + { + return false; + } + else if (this.separateBlend != jsonblendingmode.separateBlend) + { + return false; + } + else if (this.srcAlphaFactor != jsonblendingmode.srcAlphaFactor) + { + return false; + } + else + { + return this.srcColorFactor == jsonblendingmode.srcColorFactor; + } + } + } + + public int hashCode() + { + int i = this.srcColorFactor; + i = 31 * i + this.srcAlphaFactor; + i = 31 * i + this.destColorFactor; + i = 31 * i + this.destAlphaFactor; + i = 31 * i + this.blendFunction; + i = 31 * i + (this.separateBlend ? 1 : 0); + i = 31 * i + (this.opaque ? 1 : 0); + return i; + } + + public boolean isOpaque() + { + return this.opaque; + } + + public static JsonBlendingMode parseBlendNode(JsonObject json) + { + if (json == null) + { + return new JsonBlendingMode(); + } + else + { + int i = 32774; + int j = 1; + int k = 0; + int l = 1; + int i1 = 0; + boolean flag = true; + boolean flag1 = false; + + if (JsonUtils.isString(json, "func")) + { + i = stringToBlendFunction(json.get("func").getAsString()); + + if (i != 32774) + { + flag = false; + } + } + + if (JsonUtils.isString(json, "srcrgb")) + { + j = stringToBlendFactor(json.get("srcrgb").getAsString()); + + if (j != 1) + { + flag = false; + } + } + + if (JsonUtils.isString(json, "dstrgb")) + { + k = stringToBlendFactor(json.get("dstrgb").getAsString()); + + if (k != 0) + { + flag = false; + } + } + + if (JsonUtils.isString(json, "srcalpha")) + { + l = stringToBlendFactor(json.get("srcalpha").getAsString()); + + if (l != 1) + { + flag = false; + } + + flag1 = true; + } + + if (JsonUtils.isString(json, "dstalpha")) + { + i1 = stringToBlendFactor(json.get("dstalpha").getAsString()); + + if (i1 != 0) + { + flag = false; + } + + flag1 = true; + } + + if (flag) + { + return new JsonBlendingMode(); + } + else + { + return flag1 ? new JsonBlendingMode(j, k, l, i1, i) : new JsonBlendingMode(j, k, i); + } + } + } + + /** + * Converts a blend function name to an id, returning add (32774) if not recognized. + */ + private static int stringToBlendFunction(String funcName) + { + String s = funcName.trim().toLowerCase(Locale.ROOT); + + if ("add".equals(s)) + { + return 32774; + } + else if ("subtract".equals(s)) + { + return 32778; + } + else if ("reversesubtract".equals(s)) + { + return 32779; + } + else if ("reverse_subtract".equals(s)) + { + return 32779; + } + else if ("min".equals(s)) + { + return 32775; + } + else + { + return "max".equals(s) ? 32776 : 32774; + } + } + + private static int stringToBlendFactor(String factorName) + { + String s = factorName.trim().toLowerCase(Locale.ROOT); + s = s.replaceAll("_", ""); + s = s.replaceAll("one", "1"); + s = s.replaceAll("zero", "0"); + s = s.replaceAll("minus", "-"); + + if ("0".equals(s)) + { + return 0; + } + else if ("1".equals(s)) + { + return 1; + } + else if ("srccolor".equals(s)) + { + return 768; + } + else if ("1-srccolor".equals(s)) + { + return 769; + } + else if ("dstcolor".equals(s)) + { + return 774; + } + else if ("1-dstcolor".equals(s)) + { + return 775; + } + else if ("srcalpha".equals(s)) + { + return 770; + } + else if ("1-srcalpha".equals(s)) + { + return 771; + } + else if ("dstalpha".equals(s)) + { + return 772; + } + else + { + return "1-dstalpha".equals(s) ? 773 : -1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/JsonException.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/JsonException.java new file mode 100644 index 0000000..868887a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/JsonException.java @@ -0,0 +1,98 @@ +package net.minecraft.client.util; + +import com.google.common.collect.Lists; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.List; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; + +@SideOnly(Side.CLIENT) +public class JsonException extends IOException +{ + private final List entries = Lists.newArrayList(); + private final String message; + + public JsonException(String messageIn) + { + this.entries.add(new JsonException.Entry()); + this.message = messageIn; + } + + public JsonException(String messageIn, Throwable cause) + { + super(cause); + this.entries.add(new JsonException.Entry()); + this.message = messageIn; + } + + public void prependJsonKey(String key) + { + ((JsonException.Entry)this.entries.get(0)).addJsonKey(key); + } + + public void setFilenameAndFlush(String filenameIn) + { + (this.entries.get(0)).filename = filenameIn; + this.entries.add(0, new JsonException.Entry()); + } + + public String getMessage() + { + return "Invalid " + this.entries.get(this.entries.size() - 1) + ": " + this.message; + } + + public static JsonException forException(Exception exception) + { + if (exception instanceof JsonException) + { + return (JsonException)exception; + } + else + { + String s = exception.getMessage(); + + if (exception instanceof FileNotFoundException) + { + s = "File not found"; + } + + return new JsonException(s, exception); + } + } + + @SideOnly(Side.CLIENT) + public static class Entry + { + private String filename; + private final List jsonKeys; + + private Entry() + { + this.jsonKeys = Lists.newArrayList(); + } + + private void addJsonKey(String key) + { + this.jsonKeys.add(0, key); + } + + public String getJsonKeys() + { + return StringUtils.join((Iterable)this.jsonKeys, "->"); + } + + public String toString() + { + if (this.filename != null) + { + return this.jsonKeys.isEmpty() ? this.filename : this.filename + " " + this.getJsonKeys(); + } + else + { + return this.jsonKeys.isEmpty() ? "(Unknown file)" : "(Unknown file) " + this.getJsonKeys(); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/RecipeBookClient.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/RecipeBookClient.java new file mode 100644 index 0000000..848a3f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/RecipeBookClient.java @@ -0,0 +1,94 @@ +package net.minecraft.client.util; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Table; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import net.minecraft.client.gui.recipebook.RecipeList; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.stats.RecipeBook; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RecipeBookClient extends RecipeBook +{ + public static final Map> RECIPES_BY_TAB = Maps.>newHashMap(); + public static final List ALL_RECIPES = Lists.newArrayList(); + + private static RecipeList newRecipeList(CreativeTabs p_194082_0_) + { + RecipeList recipelist = new RecipeList(); + ALL_RECIPES.add(recipelist); + (RECIPES_BY_TAB.computeIfAbsent(p_194082_0_, (p_194085_0_) -> + { + return new ArrayList(); + })).add(recipelist); + (RECIPES_BY_TAB.computeIfAbsent(CreativeTabs.SEARCH, (p_194083_0_) -> + { + return new ArrayList(); + })).add(recipelist); + return recipelist; + } + + private static CreativeTabs getItemStackTab(ItemStack p_194084_0_) + { + CreativeTabs creativetabs = p_194084_0_.getItem().getCreativeTab(); + + if (creativetabs != CreativeTabs.BUILDING_BLOCKS && creativetabs != CreativeTabs.TOOLS && creativetabs != CreativeTabs.REDSTONE) + { + return creativetabs == CreativeTabs.COMBAT ? CreativeTabs.TOOLS : CreativeTabs.MISC; + } + else + { + return creativetabs; + } + } + + static + { + rebuildTable(); + } + + public static void rebuildTable() + { + RECIPES_BY_TAB.clear(); + ALL_RECIPES.clear(); + + Table table = HashBasedTable.create(); + + for (IRecipe irecipe : CraftingManager.REGISTRY) + { + if (!irecipe.isDynamic()) + { + CreativeTabs creativetabs = getItemStackTab(irecipe.getRecipeOutput()); + String s = irecipe.getGroup(); + RecipeList recipelist1; + + if (s.isEmpty()) + { + recipelist1 = newRecipeList(creativetabs); + } + else + { + recipelist1 = table.get(creativetabs, s); + + if (recipelist1 == null) + { + recipelist1 = newRecipeList(creativetabs); + table.put(creativetabs, s, recipelist1); + } + } + + recipelist1.add(irecipe); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/RecipeItemHelper.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/RecipeItemHelper.java new file mode 100644 index 0000000..4959e23 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/RecipeItemHelper.java @@ -0,0 +1,384 @@ +package net.minecraft.client.util; + +import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import it.unimi.dsi.fastutil.ints.IntAVLTreeSet; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntCollection; +import it.unimi.dsi.fastutil.ints.IntIterator; +import it.unimi.dsi.fastutil.ints.IntList; +import it.unimi.dsi.fastutil.ints.IntListIterator; +import java.util.BitSet; +import java.util.List; +import java.util.function.Predicate; +import javax.annotation.Nullable; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; + +public class RecipeItemHelper +{ + /** Map from {@link #pack} packed ids to counts */ + public final Int2IntMap itemToCount = new Int2IntOpenHashMap(); + + public void accountStack(ItemStack stack) + { + this.accountStack(stack, -1); + } + + public void accountStack(ItemStack stack, int forceCount) + { + if (!stack.isEmpty() && !stack.isItemDamaged() && !stack.isItemEnchanted() && !stack.hasDisplayName()) + { + int i = pack(stack); + int j = forceCount == -1 ? stack.getCount() : forceCount; + this.increment(i, j); + } + } + + public static int pack(ItemStack stack) + { + Item item = stack.getItem(); + int i = item.getHasSubtypes() ? stack.getMetadata() : 0; + return Item.REGISTRY.getIDForObject(item) << 16 | i & 65535; + } + + public boolean containsItem(int p_194120_1_) + { + return this.itemToCount.get(p_194120_1_) > 0; + } + + public int tryTake(int p_194122_1_, int maximum) + { + int i = this.itemToCount.get(p_194122_1_); + + if (i >= maximum) + { + this.itemToCount.put(p_194122_1_, i - maximum); + return p_194122_1_; + } + else + { + return 0; + } + } + + private void increment(int p_194117_1_, int amount) + { + this.itemToCount.put(p_194117_1_, this.itemToCount.get(p_194117_1_) + amount); + } + + public boolean canCraft(IRecipe recipe, @Nullable IntList p_194116_2_) + { + return this.canCraft(recipe, p_194116_2_, 1); + } + + public boolean canCraft(IRecipe recipe, @Nullable IntList p_194118_2_, int p_194118_3_) + { + return (new RecipeItemHelper.RecipePicker(recipe)).tryPick(p_194118_3_, p_194118_2_); + } + + public int getBiggestCraftableStack(IRecipe recipe, @Nullable IntList p_194114_2_) + { + return this.getBiggestCraftableStack(recipe, Integer.MAX_VALUE, p_194114_2_); + } + + public int getBiggestCraftableStack(IRecipe recipe, int p_194121_2_, @Nullable IntList p_194121_3_) + { + return (new RecipeItemHelper.RecipePicker(recipe)).tryPickAll(p_194121_2_, p_194121_3_); + } + + public static ItemStack unpack(int p_194115_0_) + { + return p_194115_0_ == 0 ? ItemStack.EMPTY : new ItemStack(Item.getItemById(p_194115_0_ >> 16 & 65535), 1, p_194115_0_ & 65535); + } + + public void clear() + { + this.itemToCount.clear(); + } + + class RecipePicker + { + private final IRecipe recipe; + private final List ingredients = Lists.newArrayList(); + private final int ingredientCount; + private final int[] possessedIngredientStacks; + private final int possessedIngredientStackCount; + private final BitSet data; + private IntList path = new IntArrayList(); + + public RecipePicker(IRecipe p_i47608_2_) + { + this.recipe = p_i47608_2_; + this.ingredients.addAll(p_i47608_2_.getIngredients()); + this.ingredients.removeIf((p_194103_0_) -> + { + return p_194103_0_ == Ingredient.EMPTY; + }); + this.ingredientCount = this.ingredients.size(); + this.possessedIngredientStacks = this.getUniqueAvailIngredientItems(); + this.possessedIngredientStackCount = this.possessedIngredientStacks.length; + this.data = new BitSet(this.ingredientCount + this.possessedIngredientStackCount + this.ingredientCount + this.ingredientCount * this.possessedIngredientStackCount); + + for (int i = 0; i < this.ingredients.size(); ++i) + { + IntList intlist = ((Ingredient)this.ingredients.get(i)).getValidItemStacksPacked(); + + for (int j = 0; j < this.possessedIngredientStackCount; ++j) + { + if (intlist.contains(this.possessedIngredientStacks[j])) + { + this.data.set(this.getIndex(true, j, i)); + } + } + } + } + + public boolean tryPick(int p_194092_1_, @Nullable IntList listIn) + { + if (p_194092_1_ <= 0) + { + return true; + } + else + { + int k; + + for (k = 0; this.dfs(p_194092_1_); ++k) + { + RecipeItemHelper.this.tryTake(this.possessedIngredientStacks[this.path.getInt(0)], p_194092_1_); + int l = this.path.size() - 1; + this.setSatisfied(this.path.getInt(l)); + + for (int i1 = 0; i1 < l; ++i1) + { + this.toggleResidual((i1 & 1) == 0, ((Integer)this.path.get(i1)).intValue(), ((Integer)this.path.get(i1 + 1)).intValue()); + } + + this.path.clear(); + this.data.clear(0, this.ingredientCount + this.possessedIngredientStackCount); + } + + boolean flag = k == this.ingredientCount; + boolean flag1 = flag && listIn != null; + + if (flag1) + { + listIn.clear(); + } + + this.data.clear(0, this.ingredientCount + this.possessedIngredientStackCount + this.ingredientCount); + int j1 = 0; + List list = this.recipe.getIngredients(); + + for (int k1 = 0; k1 < list.size(); ++k1) + { + if (flag1 && list.get(k1) == Ingredient.EMPTY) + { + listIn.add(0); + } + else + { + for (int l1 = 0; l1 < this.possessedIngredientStackCount; ++l1) + { + if (this.hasResidual(false, j1, l1)) + { + this.toggleResidual(true, l1, j1); + RecipeItemHelper.this.increment(this.possessedIngredientStacks[l1], p_194092_1_); + + if (flag1) + { + listIn.add(this.possessedIngredientStacks[l1]); + } + } + } + + ++j1; + } + } + + return flag; + } + } + + private int[] getUniqueAvailIngredientItems() + { + IntCollection intcollection = new IntAVLTreeSet(); + + for (Ingredient ingredient : this.ingredients) + { + intcollection.addAll(ingredient.getValidItemStacksPacked()); + } + + IntIterator intiterator = intcollection.iterator(); + + while (intiterator.hasNext()) + { + if (!RecipeItemHelper.this.containsItem(intiterator.nextInt())) + { + intiterator.remove(); + } + } + + return intcollection.toIntArray(); + } + + private boolean dfs(int p_194098_1_) + { + int k = this.possessedIngredientStackCount; + + for (int l = 0; l < k; ++l) + { + if (RecipeItemHelper.this.itemToCount.get(this.possessedIngredientStacks[l]) >= p_194098_1_) + { + this.visit(false, l); + + while (!this.path.isEmpty()) + { + int i1 = this.path.size(); + boolean flag = (i1 & 1) == 1; + int j1 = this.path.getInt(i1 - 1); + + if (!flag && !this.isSatisfied(j1)) + { + break; + } + + int k1 = flag ? this.ingredientCount : k; + + for (int l1 = 0; l1 < k1; ++l1) + { + if (!this.hasVisited(flag, l1) && this.hasConnection(flag, j1, l1) && this.hasResidual(flag, j1, l1)) + { + this.visit(flag, l1); + break; + } + } + + int i2 = this.path.size(); + + if (i2 == i1) + { + this.path.removeInt(i2 - 1); + } + } + + if (!this.path.isEmpty()) + { + return true; + } + } + } + + return false; + } + + private boolean isSatisfied(int p_194091_1_) + { + return this.data.get(this.getSatisfiedIndex(p_194091_1_)); + } + + private void setSatisfied(int p_194096_1_) + { + this.data.set(this.getSatisfiedIndex(p_194096_1_)); + } + + private int getSatisfiedIndex(int p_194094_1_) + { + return this.ingredientCount + this.possessedIngredientStackCount + p_194094_1_; + } + + private boolean hasConnection(boolean p_194093_1_, int p_194093_2_, int p_194093_3_) + { + return this.data.get(this.getIndex(p_194093_1_, p_194093_2_, p_194093_3_)); + } + + private boolean hasResidual(boolean p_194100_1_, int p_194100_2_, int p_194100_3_) + { + return p_194100_1_ != this.data.get(1 + this.getIndex(p_194100_1_, p_194100_2_, p_194100_3_)); + } + + private void toggleResidual(boolean p_194089_1_, int p_194089_2_, int p_194089_3_) + { + this.data.flip(1 + this.getIndex(p_194089_1_, p_194089_2_, p_194089_3_)); + } + + private int getIndex(boolean p_194095_1_, int p_194095_2_, int p_194095_3_) + { + int k = p_194095_1_ ? p_194095_2_ * this.ingredientCount + p_194095_3_ : p_194095_3_ * this.ingredientCount + p_194095_2_; + return this.ingredientCount + this.possessedIngredientStackCount + this.ingredientCount + 2 * k; + } + + private void visit(boolean p_194088_1_, int p_194088_2_) + { + this.data.set(this.getVisitedIndex(p_194088_1_, p_194088_2_)); + this.path.add(p_194088_2_); + } + + private boolean hasVisited(boolean p_194101_1_, int p_194101_2_) + { + return this.data.get(this.getVisitedIndex(p_194101_1_, p_194101_2_)); + } + + private int getVisitedIndex(boolean p_194099_1_, int p_194099_2_) + { + return (p_194099_1_ ? 0 : this.ingredientCount) + p_194099_2_; + } + + public int tryPickAll(int p_194102_1_, @Nullable IntList list) + { + int k = 0; + int l = Math.min(p_194102_1_, this.getMinIngredientCount()) + 1; + + while (true) + { + int i1 = (k + l) / 2; + + if (this.tryPick(i1, (IntList)null)) + { + if (l - k <= 1) + { + if (i1 > 0) + { + this.tryPick(i1, list); + } + + return i1; + } + + k = i1; + } + else + { + l = i1; + } + } + } + + private int getMinIngredientCount() + { + int k = Integer.MAX_VALUE; + + for (Ingredient ingredient : this.ingredients) + { + int l = 0; + int i1; + + for (IntListIterator intlistiterator = ingredient.getValidItemStacksPacked().iterator(); intlistiterator.hasNext(); l = Math.max(l, RecipeItemHelper.this.itemToCount.get(i1))) + { + i1 = ((Integer)intlistiterator.next()).intValue(); + } + + if (k > 0) + { + k = Math.min(k, l); + } + } + + return k; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/SearchTree.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/SearchTree.java new file mode 100644 index 0000000..ac9fa72 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/SearchTree.java @@ -0,0 +1,194 @@ +package net.minecraft.client.util; + +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.Lists; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.function.Consumer; +import java.util.function.Function; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SearchTree implements ISearchTree +{ + /** A {@link SuffixArray} that contains values keyed by the ID (as produced by {@link #idFunc}). */ + protected SuffixArray byId = new SuffixArray(); + /** A {@link SuffixArray} that contains values keyed by the name (as produced by {@link #nameFunc}). */ + protected SuffixArray byName = new SuffixArray(); + /** + * A function that takes a T and returns a list of Strings describing it normally. + *

+ * For both items and recipes, this is implemented via {@link net.minecraft.item.ItemStack#getTooltip() + * ItemStack.getTooltip} (with NORMAL tooltip flags), with formatting codes stripped, text trimmed, and empty lines + * removed. + * + * The result does not need to be corrected for + */ + private final Function> nameFunc; + /** + * A function that takes a T and returns a list of {@link ResourceLocation}s describing it. + *

+ * For both items and recipes, this is implemented via Item.REGISTRY.getNameForObject. (In the case of + * registries, it is applied to all results) + */ + private final Function> idFunc; + /** All entries in the search tree. */ + private final List contents = Lists.newArrayList(); + /** Maps each entry in the search tree to a locally unique, increasing number (staring at 0). */ + private Object2IntMap numericContents = new Object2IntOpenHashMap(); + + public SearchTree(Function> nameFuncIn, Function> idFuncIn) + { + this.nameFunc = nameFuncIn; + this.idFunc = idFuncIn; + } + + /** + * Recalculates the contents of this search tree, reapplying {@link #nameFunc} and {@link #idFunc}. Should be called + * whenever resources are reloaded (e.g. language changes). + */ + public void recalculate() + { + this.byId = new SuffixArray(); + this.byName = new SuffixArray(); + + for (T t : this.contents) + { + this.index(t); + } + + this.byId.generate(); + this.byName.generate(); + } + + /** + * Adds the given item to the search tree. + * + * @param element The element to add + */ + public void add(T element) + { + this.numericContents.put(element, this.contents.size()); + this.contents.add(element); + this.index(element); + } + + /** + * Directly puts the given item into {@link #byId} and {@link #byName}, applying {@link #nameFunc} and {@link + * idFunc}. + * + * @param element The element to add + */ + private void index(T element) + { + (this.idFunc.apply(element)).forEach((p_194039_2_) -> + { + this.byName.add(element, p_194039_2_.toString().toLowerCase(Locale.ROOT)); + }); + (this.nameFunc.apply(element)).forEach((p_194041_2_) -> + { + this.byId.add(element, p_194041_2_.toLowerCase(Locale.ROOT)); + }); + } + + /** + * Searches this search tree for the given text. + *

+ * If the query does not contain a :, then only {@link #byName} is searched; if it does contain a + * colon, both {@link #byName} and {@link #byId} are searched and the results are merged using a {@link + * MergingIterator}. + * @return A list of all matching items in this search tree. + * + * @param searchText The text to search for. Must be normalized with toLowerCase(Locale.ROOT) before + * calling this method. + */ + public List search(String searchText) + { + List list = this.byId.search(searchText); + + if (searchText.indexOf(58) < 0) + { + return list; + } + else + { + List list1 = this.byName.search(searchText); + return (List)(list1.isEmpty() ? list : Lists.newArrayList(new SearchTree.MergingIterator(list.iterator(), list1.iterator(), this.numericContents))); + } + } + + @SideOnly(Side.CLIENT) + static class MergingIterator extends AbstractIterator + { + private final Iterator leftItr; + private final Iterator rightItr; + /** + * A mapping of objects to unique numeric IDs, used to sort the list. + *

+ * Since there's no good place to document how this class works, it basically just interleaves two iterators + * together, choosing the entry that has the lower numeric ID in this map. + */ + private final Object2IntMap numbers; + /** Current element from {@link #leftItr} */ + private T left; + /** Current element from {@link #rightItr} */ + private T right; + + public MergingIterator(Iterator leftIn, Iterator rightIn, Object2IntMap numbersIn) + { + this.leftItr = leftIn; + this.rightItr = rightIn; + this.numbers = numbersIn; + this.left = (T)(leftIn.hasNext() ? leftIn.next() : null); + this.right = (T)(rightIn.hasNext() ? rightIn.next() : null); + } + + protected T computeNext() + { + if (this.left == null && this.right == null) + { + return (T)this.endOfData(); + } + else + { + int i; + + if (this.left == this.right) + { + i = 0; + } + else if (this.left == null) + { + i = 1; + } + else if (this.right == null) + { + i = -1; + } + else + { + i = Integer.compare(this.numbers.getInt(this.left), this.numbers.getInt(this.right)); + } + + T t = (T)(i <= 0 ? this.left : this.right); + + if (i <= 0) + { + this.left = (T)(this.leftItr.hasNext() ? this.leftItr.next() : null); + } + + if (i >= 0) + { + this.right = (T)(this.rightItr.hasNext() ? this.rightItr.next() : null); + } + + return t; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/SearchTreeManager.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/SearchTreeManager.java new file mode 100644 index 0000000..f2da0dd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/SearchTreeManager.java @@ -0,0 +1,46 @@ +package net.minecraft.client.util; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.client.gui.recipebook.RecipeList; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class SearchTreeManager implements IResourceManagerReloadListener +{ + /** The item search tree, used for the creative inventory's search tab */ + public static final SearchTreeManager.Key ITEMS = new SearchTreeManager.Key(); + /** The recipe search tree, used for the recipe book */ + public static final SearchTreeManager.Key RECIPES = new SearchTreeManager.Key(); + private final Map < SearchTreeManager.Key, SearchTree> trees = Maps. < SearchTreeManager.Key, SearchTree> newHashMap(); + + public void onResourceManagerReload(IResourceManager resourceManager) + { + for (SearchTree searchtree : this.trees.values()) + { + searchtree.recalculate(); + } + } + + public void register(SearchTreeManager.Key key, SearchTree searchTreeIn) + { + this.trees.put(key, searchTreeIn); + } + + /** + * Gets the {@link ISearchTree} for the given search tree key, returning null if no such tree exists. + */ + public ISearchTree get(SearchTreeManager.Key key) + { + return (ISearchTree)this.trees.get(key); + } + + @SideOnly(Side.CLIENT) + public static class Key + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/SuffixArray.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/SuffixArray.java new file mode 100644 index 0000000..0705117 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/SuffixArray.java @@ -0,0 +1,288 @@ +package net.minecraft.client.util; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import it.unimi.dsi.fastutil.Arrays; +import it.unimi.dsi.fastutil.Swapper; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntComparator; +import it.unimi.dsi.fastutil.ints.IntList; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class SuffixArray +{ + /** + * A debug property (SuffixArray.printComparisons) that can be specified in the JVM arguments, that + * causes debug printing of comparisons as they happen. + */ + private static final boolean DEBUG_PRINT_COMPARISONS = Boolean.parseBoolean(System.getProperty("SuffixArray.printComparisons", "false")); + /** + * A debug property (SuffixArray.printArray) that can be specified in the JVM arguments, that causes + * the full array to be printed ({@link #printArray()}) after calling {@link #generate()} + */ + private static final boolean DEBUG_PRINT_ARRAY = Boolean.parseBoolean(System.getProperty("SuffixArray.printArray", "false")); + private static final Logger LOGGER = LogManager.getLogger(); + protected final List list = Lists.newArrayList(); + private final IntList chars = new IntArrayList(); + private final IntList wordStarts = new IntArrayList(); + private IntList suffixToT = new IntArrayList(); + private IntList offsets = new IntArrayList(); + private int maxStringLength; + + public void add(T p_194057_1_, String p_194057_2_) + { + this.maxStringLength = Math.max(this.maxStringLength, p_194057_2_.length()); + int i = this.list.size(); + this.list.add(p_194057_1_); + this.wordStarts.add(this.chars.size()); + + for (int j = 0; j < p_194057_2_.length(); ++j) + { + this.suffixToT.add(i); + this.offsets.add(j); + this.chars.add(p_194057_2_.charAt(j)); + } + + this.suffixToT.add(i); + this.offsets.add(p_194057_2_.length()); + this.chars.add(-1); + } + + public void generate() + { + int i = this.chars.size(); + int[] aint = new int[i]; + final int[] aint1 = new int[i]; + final int[] aint2 = new int[i]; + int[] aint3 = new int[i]; + IntComparator intcomparator = new IntComparator() + { + public int compare(int p_compare_1_, int p_compare_2_) + { + return aint1[p_compare_1_] == aint1[p_compare_2_] ? Integer.compare(aint2[p_compare_1_], aint2[p_compare_2_]) : Integer.compare(aint1[p_compare_1_], aint1[p_compare_2_]); + } + public int compare(Integer p_compare_1_, Integer p_compare_2_) + { + return this.compare(p_compare_1_.intValue(), p_compare_2_.intValue()); + } + }; + Swapper swapper = (p_194054_3_, p_194054_4_) -> + { + + if (p_194054_3_ != p_194054_4_) + { + int i2 = aint1[p_194054_3_]; + aint1[p_194054_3_] = aint1[p_194054_4_]; + aint1[p_194054_4_] = i2; + i2 = aint2[p_194054_3_]; + aint2[p_194054_3_] = aint2[p_194054_4_]; + aint2[p_194054_4_] = i2; + i2 = aint3[p_194054_3_]; + aint3[p_194054_3_] = aint3[p_194054_4_]; + aint3[p_194054_4_] = i2; + } + }; + + for (int j = 0; j < i; ++j) + { + aint[j] = this.chars.getInt(j); + } + + int k1 = 1; + + for (int k = Math.min(i, this.maxStringLength); k1 * 2 < k; k1 *= 2) + { + for (int l = 0; l < i; aint3[l] = l++) + { + aint1[l] = aint[l]; + aint2[l] = l + k1 < i ? aint[l + k1] : -2; + } + + Arrays.quickSort(0, i, intcomparator, swapper); + + for (int l1 = 0; l1 < i; ++l1) + { + if (l1 > 0 && aint1[l1] == aint1[l1 - 1] && aint2[l1] == aint2[l1 - 1]) + { + aint[aint3[l1]] = aint[aint3[l1 - 1]]; + } + else + { + aint[aint3[l1]] = l1; + } + } + } + + IntList intlist1 = this.suffixToT; + IntList intlist = this.offsets; + this.suffixToT = new IntArrayList(intlist1.size()); + this.offsets = new IntArrayList(intlist.size()); + + for (int i1 = 0; i1 < i; ++i1) + { + int j1 = aint3[i1]; + this.suffixToT.add(intlist1.getInt(j1)); + this.offsets.add(intlist.getInt(j1)); + } + + if (DEBUG_PRINT_ARRAY) + { + this.printArray(); + } + } + + /** + * Prints the entire array to the logger, on debug level + */ + private void printArray() + { + for (int i2 = 0; i2 < this.suffixToT.size(); ++i2) + { + LOGGER.debug("{} {}", Integer.valueOf(i2), this.getString(i2)); + } + + LOGGER.debug(""); + } + + private String getString(int p_194059_1_) + { + int i2 = this.offsets.getInt(p_194059_1_); + int j2 = this.wordStarts.getInt(this.suffixToT.getInt(p_194059_1_)); + StringBuilder stringbuilder = new StringBuilder(); + + for (int k2 = 0; j2 + k2 < this.chars.size(); ++k2) + { + if (k2 == i2) + { + stringbuilder.append('^'); + } + + int l2 = ((Integer)this.chars.get(j2 + k2)).intValue(); + + if (l2 == -1) + { + break; + } + + stringbuilder.append((char)l2); + } + + return stringbuilder.toString(); + } + + private int compare(String p_194056_1_, int p_194056_2_) + { + int i2 = this.wordStarts.getInt(this.suffixToT.getInt(p_194056_2_)); + int j2 = this.offsets.getInt(p_194056_2_); + + for (int k2 = 0; k2 < p_194056_1_.length(); ++k2) + { + int l2 = this.chars.getInt(i2 + j2 + k2); + + if (l2 == -1) + { + return 1; + } + + char c0 = p_194056_1_.charAt(k2); + char c1 = (char)l2; + + if (c0 < c1) + { + return -1; + } + + if (c0 > c1) + { + return 1; + } + } + + return 0; + } + + public List search(String p_194055_1_) + { + int i2 = this.suffixToT.size(); + int j2 = 0; + int k2 = i2; + + while (j2 < k2) + { + int l2 = j2 + (k2 - j2) / 2; + int i3 = this.compare(p_194055_1_, l2); + + if (DEBUG_PRINT_COMPARISONS) + { + LOGGER.debug("comparing lower \"{}\" with {} \"{}\": {}", p_194055_1_, Integer.valueOf(l2), this.getString(l2), Integer.valueOf(i3)); + } + + if (i3 > 0) + { + j2 = l2 + 1; + } + else + { + k2 = l2; + } + } + + if (j2 >= 0 && j2 < i2) + { + int i4 = j2; + k2 = i2; + + while (j2 < k2) + { + int j4 = j2 + (k2 - j2) / 2; + int j3 = this.compare(p_194055_1_, j4); + + if (DEBUG_PRINT_COMPARISONS) + { + LOGGER.debug("comparing upper \"{}\" with {} \"{}\": {}", p_194055_1_, Integer.valueOf(j4), this.getString(j4), Integer.valueOf(j3)); + } + + if (j3 >= 0) + { + j2 = j4 + 1; + } + else + { + k2 = j4; + } + } + + int k4 = j2; + IntSet intset = new IntOpenHashSet(); + + for (int k3 = i4; k3 < k4; ++k3) + { + intset.add(this.suffixToT.getInt(k3)); + } + + int[] aint4 = intset.toIntArray(); + java.util.Arrays.sort(aint4); + Set set = Sets.newLinkedHashSet(); + + for (int l3 : aint4) + { + set.add(this.list.get(l3)); + } + + return Lists.newArrayList(set); + } + else + { + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/client/util/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/client/util/package-info.java new file mode 100644 index 0000000..ed4a6cd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/client/util/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.client.util; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/AdvancementCommand.java b/build/tmp/recompileMc/sources/net/minecraft/command/AdvancementCommand.java new file mode 100644 index 0000000..3e51b1b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/AdvancementCommand.java @@ -0,0 +1,491 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.advancements.CriterionProgress; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; + +public class AdvancementCommand extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "advancement"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.advancement.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.advancement.usage", new Object[0]); + } + else + { + AdvancementCommand.ActionType advancementcommand$actiontype = AdvancementCommand.ActionType.byName(args[0]); + + if (advancementcommand$actiontype != null) + { + if (args.length < 3) + { + throw advancementcommand$actiontype.wrongUsage(); + } + + EntityPlayerMP entityplayermp = getPlayer(server, sender, args[1]); + AdvancementCommand.Mode advancementcommand$mode = AdvancementCommand.Mode.byName(args[2]); + + if (advancementcommand$mode == null) + { + throw advancementcommand$actiontype.wrongUsage(); + } + + this.perform(server, sender, args, entityplayermp, advancementcommand$actiontype, advancementcommand$mode); + } + else + { + if (!"test".equals(args[0])) + { + throw new WrongUsageException("commands.advancement.usage", new Object[0]); + } + + if (args.length == 3) + { + this.testAdvancement(sender, getPlayer(server, sender, args[1]), findAdvancement(server, args[2])); + } + else + { + if (args.length != 4) + { + throw new WrongUsageException("commands.advancement.test.usage", new Object[0]); + } + + this.testCriterion(sender, getPlayer(server, sender, args[1]), findAdvancement(server, args[2]), args[3]); + } + } + } + } + + private void perform(MinecraftServer server, ICommandSender sender, String[] args, EntityPlayerMP player, AdvancementCommand.ActionType p_193516_5_, AdvancementCommand.Mode p_193516_6_) throws CommandException + { + if (p_193516_6_ == AdvancementCommand.Mode.EVERYTHING) + { + if (args.length == 3) + { + int j = p_193516_5_.perform(player, server.getAdvancementManager().getAdvancements()); + + if (j == 0) + { + throw p_193516_6_.fail(p_193516_5_, player.getName()); + } + else + { + p_193516_6_.success(sender, this, p_193516_5_, player.getName(), j); + } + } + else + { + throw p_193516_6_.usage(p_193516_5_); + } + } + else if (args.length < 4) + { + throw p_193516_6_.usage(p_193516_5_); + } + else + { + Advancement advancement = findAdvancement(server, args[3]); + + if (p_193516_6_ == AdvancementCommand.Mode.ONLY && args.length == 5) + { + String s = args[4]; + + if (!advancement.getCriteria().keySet().contains(s)) + { + throw new CommandException("commands.advancement.criterionNotFound", new Object[] {advancement.getId(), args[4]}); + } + + if (!p_193516_5_.performCriterion(player, advancement, s)) + { + throw new CommandException(p_193516_5_.baseTranslationKey + ".criterion.failed", new Object[] {advancement.getId(), player.getName(), s}); + } + + notifyCommandListener(sender, this, p_193516_5_.baseTranslationKey + ".criterion.success", new Object[] {advancement.getId(), player.getName(), s}); + } + else + { + if (args.length != 4) + { + throw p_193516_6_.usage(p_193516_5_); + } + + List list = this.getAdvancements(advancement, p_193516_6_); + int i = p_193516_5_.perform(player, list); + + if (i == 0) + { + throw p_193516_6_.fail(p_193516_5_, advancement.getId(), player.getName()); + } + + p_193516_6_.success(sender, this, p_193516_5_, advancement.getId(), player.getName(), i); + } + } + } + + private void addChildren(Advancement p_193515_1_, List p_193515_2_) + { + for (Advancement advancement : p_193515_1_.getChildren()) + { + p_193515_2_.add(advancement); + this.addChildren(advancement, p_193515_2_); + } + } + + private List getAdvancements(Advancement p_193514_1_, AdvancementCommand.Mode p_193514_2_) + { + List list = Lists.newArrayList(); + + if (p_193514_2_.parents) + { + for (Advancement advancement = p_193514_1_.getParent(); advancement != null; advancement = advancement.getParent()) + { + list.add(advancement); + } + } + + list.add(p_193514_1_); + + if (p_193514_2_.children) + { + this.addChildren(p_193514_1_, list); + } + + return list; + } + + private void testCriterion(ICommandSender p_192554_1_, EntityPlayerMP p_192554_2_, Advancement p_192554_3_, String p_192554_4_) throws CommandException + { + PlayerAdvancements playeradvancements = p_192554_2_.getAdvancements(); + CriterionProgress criterionprogress = playeradvancements.getProgress(p_192554_3_).getCriterionProgress(p_192554_4_); + + if (criterionprogress == null) + { + throw new CommandException("commands.advancement.criterionNotFound", new Object[] {p_192554_3_.getId(), p_192554_4_}); + } + else if (!criterionprogress.isObtained()) + { + throw new CommandException("commands.advancement.test.criterion.notDone", new Object[] {p_192554_2_.getName(), p_192554_3_.getId(), p_192554_4_}); + } + else + { + notifyCommandListener(p_192554_1_, this, "commands.advancement.test.criterion.success", new Object[] {p_192554_2_.getName(), p_192554_3_.getId(), p_192554_4_}); + } + } + + private void testAdvancement(ICommandSender p_192552_1_, EntityPlayerMP p_192552_2_, Advancement p_192552_3_) throws CommandException + { + AdvancementProgress advancementprogress = p_192552_2_.getAdvancements().getProgress(p_192552_3_); + + if (!advancementprogress.isDone()) + { + throw new CommandException("commands.advancement.test.advancement.notDone", new Object[] {p_192552_2_.getName(), p_192552_3_.getId()}); + } + else + { + notifyCommandListener(p_192552_1_, this, "commands.advancement.test.advancement.success", new Object[] {p_192552_2_.getName(), p_192552_3_.getId()}); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"grant", "revoke", "test"}); + } + else + { + AdvancementCommand.ActionType advancementcommand$actiontype = AdvancementCommand.ActionType.byName(args[0]); + + if (advancementcommand$actiontype != null) + { + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, AdvancementCommand.Mode.NAMES); + } + + AdvancementCommand.Mode advancementcommand$mode = AdvancementCommand.Mode.byName(args[2]); + + if (advancementcommand$mode != null && advancementcommand$mode != AdvancementCommand.Mode.EVERYTHING) + { + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, this.getAdvancementNames(server)); + } + + if (args.length == 5 && advancementcommand$mode == AdvancementCommand.Mode.ONLY) + { + Advancement advancement = server.getAdvancementManager().getAdvancement(new ResourceLocation(args[3])); + + if (advancement != null) + { + return getListOfStringsMatchingLastWord(args, advancement.getCriteria().keySet()); + } + } + } + } + + if ("test".equals(args[0])) + { + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getAdvancementNames(server)); + } + + if (args.length == 4) + { + Advancement advancement1 = server.getAdvancementManager().getAdvancement(new ResourceLocation(args[2])); + + if (advancement1 != null) + { + return getListOfStringsMatchingLastWord(args, advancement1.getCriteria().keySet()); + } + } + } + + return Collections.emptyList(); + } + } + + private List getAdvancementNames(MinecraftServer server) + { + List list = Lists.newArrayList(); + + for (Advancement advancement : server.getAdvancementManager().getAdvancements()) + { + list.add(advancement.getId()); + } + + return list; + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return args.length > 1 && ("grant".equals(args[0]) || "revoke".equals(args[0]) || "test".equals(args[0])) && index == 1; + } + + public static Advancement findAdvancement(MinecraftServer server, String id) throws CommandException + { + Advancement advancement = server.getAdvancementManager().getAdvancement(new ResourceLocation(id)); + + if (advancement == null) + { + throw new CommandException("commands.advancement.advancementNotFound", new Object[] {id}); + } + else + { + return advancement; + } + } + + static enum ActionType + { + GRANT("grant") + { + protected boolean perform(EntityPlayerMP p_193537_1_, Advancement p_193537_2_) + { + AdvancementProgress advancementprogress = p_193537_1_.getAdvancements().getProgress(p_193537_2_); + + if (advancementprogress.isDone()) + { + return false; + } + else + { + for (String s : advancementprogress.getRemaningCriteria()) + { + p_193537_1_.getAdvancements().grantCriterion(p_193537_2_, s); + } + + return true; + } + } + protected boolean performCriterion(EntityPlayerMP p_193535_1_, Advancement p_193535_2_, String p_193535_3_) + { + return p_193535_1_.getAdvancements().grantCriterion(p_193535_2_, p_193535_3_); + } + }, + REVOKE("revoke") + { + protected boolean perform(EntityPlayerMP p_193537_1_, Advancement p_193537_2_) + { + AdvancementProgress advancementprogress = p_193537_1_.getAdvancements().getProgress(p_193537_2_); + + if (!advancementprogress.hasProgress()) + { + return false; + } + else + { + for (String s : advancementprogress.getCompletedCriteria()) + { + p_193537_1_.getAdvancements().revokeCriterion(p_193537_2_, s); + } + + return true; + } + } + protected boolean performCriterion(EntityPlayerMP p_193535_1_, Advancement p_193535_2_, String p_193535_3_) + { + return p_193535_1_.getAdvancements().revokeCriterion(p_193535_2_, p_193535_3_); + } + }; + + final String name; + final String baseTranslationKey; + + private ActionType(String nameIn) + { + this.name = nameIn; + this.baseTranslationKey = "commands.advancement." + nameIn; + } + + @Nullable + static AdvancementCommand.ActionType byName(String nameIn) + { + for (AdvancementCommand.ActionType advancementcommand$actiontype : values()) + { + if (advancementcommand$actiontype.name.equals(nameIn)) + { + return advancementcommand$actiontype; + } + } + + return null; + } + + CommandException wrongUsage() + { + return new CommandException(this.baseTranslationKey + ".usage", new Object[0]); + } + + public int perform(EntityPlayerMP p_193532_1_, Iterable p_193532_2_) + { + int i = 0; + + for (Advancement advancement : p_193532_2_) + { + if (this.perform(p_193532_1_, advancement)) + { + ++i; + } + } + + return i; + } + + protected abstract boolean perform(EntityPlayerMP p_193537_1_, Advancement p_193537_2_); + + protected abstract boolean performCriterion(EntityPlayerMP p_193535_1_, Advancement p_193535_2_, String p_193535_3_); + } + + static enum Mode + { + ONLY("only", false, false), + THROUGH("through", true, true), + FROM("from", false, true), + UNTIL("until", true, false), + EVERYTHING("everything", true, true); + + static final String[] NAMES = new String[values().length]; + final String name; + final boolean parents; + final boolean children; + + private Mode(String p_i47556_3_, boolean p_i47556_4_, boolean p_i47556_5_) + { + this.name = p_i47556_3_; + this.parents = p_i47556_4_; + this.children = p_i47556_5_; + } + + CommandException fail(AdvancementCommand.ActionType p_193543_1_, Object... p_193543_2_) + { + return new CommandException(p_193543_1_.baseTranslationKey + "." + this.name + ".failed", p_193543_2_); + } + + CommandException usage(AdvancementCommand.ActionType p_193544_1_) + { + return new CommandException(p_193544_1_.baseTranslationKey + "." + this.name + ".usage", new Object[0]); + } + + void success(ICommandSender sender, AdvancementCommand p_193546_2_, AdvancementCommand.ActionType type, Object... args) + { + CommandBase.notifyCommandListener(sender, p_193546_2_, type.baseTranslationKey + "." + this.name + ".success", args); + } + + @Nullable + static AdvancementCommand.Mode byName(String nameIn) + { + for (AdvancementCommand.Mode advancementcommand$mode : values()) + { + if (advancementcommand$mode.name.equals(nameIn)) + { + return advancementcommand$mode; + } + } + + return null; + } + + static + { + for (int i = 0; i < values().length; ++i) + { + NAMES[i] = values()[i].name; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandBase.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandBase.java new file mode 100644 index 0000000..cfe6ad3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandBase.java @@ -0,0 +1,986 @@ +package net.minecraft.command; + +import com.google.common.base.Functions; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.primitives.Doubles; +import com.google.gson.JsonParseException; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import org.apache.commons.lang3.exception.ExceptionUtils; + +public abstract class CommandBase implements ICommand +{ + private static ICommandListener commandListener; + private static final Splitter COMMA_SPLITTER = Splitter.on(','); + private static final Splitter EQUAL_SPLITTER = Splitter.on('=').limit(2); + + /** + * Convert a JsonParseException into a user-friendly exception + */ + protected static SyntaxErrorException toSyntaxException(JsonParseException e) + { + Throwable throwable = ExceptionUtils.getRootCause(e); + String s = ""; + + if (throwable != null) + { + s = throwable.getMessage(); + + if (s.contains("setLenient")) + { + s = s.substring(s.indexOf("to accept ") + 10); + } + } + + return new SyntaxErrorException("commands.tellraw.jsonException", new Object[] {s}); + } + + public static NBTTagCompound entityToNBT(Entity theEntity) + { + NBTTagCompound nbttagcompound = theEntity.writeToNBT(new NBTTagCompound()); + + if (theEntity instanceof EntityPlayer) + { + ItemStack itemstack = ((EntityPlayer)theEntity).inventory.getCurrentItem(); + + if (!itemstack.isEmpty()) + { + nbttagcompound.setTag("SelectedItem", itemstack.writeToNBT(new NBTTagCompound())); + } + } + + return nbttagcompound; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 4; + } + + /** + * Get a list of aliases for this command. Never return null! + */ + public List getAliases() + { + return Collections.emptyList(); + } + + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return sender.canUseCommand(this.getRequiredPermissionLevel(), this.getName()); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return Collections.emptyList(); + } + + public static int parseInt(String input) throws NumberInvalidException + { + try + { + return Integer.parseInt(input); + } + catch (NumberFormatException var2) + { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); + } + } + + public static int parseInt(String input, int min) throws NumberInvalidException + { + return parseInt(input, min, Integer.MAX_VALUE); + } + + public static int parseInt(String input, int min, int max) throws NumberInvalidException + { + int i = parseInt(input); + + if (i < min) + { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {i, min}); + } + else if (i > max) + { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {i, max}); + } + else + { + return i; + } + } + + public static long parseLong(String input) throws NumberInvalidException + { + try + { + return Long.parseLong(input); + } + catch (NumberFormatException var2) + { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); + } + } + + public static long parseLong(String input, long min, long max) throws NumberInvalidException + { + long i = parseLong(input); + + if (i < min) + { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {i, min}); + } + else if (i > max) + { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {i, max}); + } + else + { + return i; + } + } + + public static BlockPos parseBlockPos(ICommandSender sender, String[] args, int startIndex, boolean centerBlock) throws NumberInvalidException + { + BlockPos blockpos = sender.getPosition(); + return new BlockPos(parseDouble((double)blockpos.getX(), args[startIndex], -30000000, 30000000, centerBlock), parseDouble((double)blockpos.getY(), args[startIndex + 1], 0, 256, false), parseDouble((double)blockpos.getZ(), args[startIndex + 2], -30000000, 30000000, centerBlock)); + } + + public static double parseDouble(String input) throws NumberInvalidException + { + try + { + double d0 = Double.parseDouble(input); + + if (!Doubles.isFinite(d0)) + { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); + } + else + { + return d0; + } + } + catch (NumberFormatException var3) + { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {input}); + } + } + + public static double parseDouble(String input, double min) throws NumberInvalidException + { + return parseDouble(input, min, Double.MAX_VALUE); + } + + public static double parseDouble(String input, double min, double max) throws NumberInvalidException + { + double d0 = parseDouble(input); + + if (d0 < min) + { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {String.format("%.2f", d0), String.format("%.2f", min)}); + } + else if (d0 > max) + { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {String.format("%.2f", d0), String.format("%.2f", max)}); + } + else + { + return d0; + } + } + + public static boolean parseBoolean(String input) throws CommandException + { + if (!"true".equals(input) && !"1".equals(input)) + { + if (!"false".equals(input) && !"0".equals(input)) + { + throw new CommandException("commands.generic.boolean.invalid", new Object[] {input}); + } + else + { + return false; + } + } + else + { + return true; + } + } + + /** + * Returns the given ICommandSender as a EntityPlayer or throw an exception. + */ + public static EntityPlayerMP getCommandSenderAsPlayer(ICommandSender sender) throws PlayerNotFoundException + { + if (sender instanceof EntityPlayerMP) + { + return (EntityPlayerMP)sender; + } + else + { + throw new PlayerNotFoundException("commands.generic.player.unspecified"); + } + } + + public static List getPlayers(MinecraftServer p_193513_0_, ICommandSender p_193513_1_, String p_193513_2_) throws CommandException + { + List list = EntitySelector.getPlayers(p_193513_1_, p_193513_2_); + return (List)(list.isEmpty() ? Lists.newArrayList(getPlayer(p_193513_0_, (EntityPlayerMP)null, p_193513_2_)) : list); + } + + public static EntityPlayerMP getPlayer(MinecraftServer server, ICommandSender sender, String target) throws PlayerNotFoundException, CommandException + { + return getPlayer(server, EntitySelector.matchOnePlayer(sender, target), target); + } + + private static EntityPlayerMP getPlayer(MinecraftServer p_193512_0_, @Nullable EntityPlayerMP p_193512_1_, String p_193512_2_) throws CommandException + { + if (p_193512_1_ == null) + { + try + { + p_193512_1_ = p_193512_0_.getPlayerList().getPlayerByUUID(UUID.fromString(p_193512_2_)); + } + catch (IllegalArgumentException var4) + { + ; + } + } + + if (p_193512_1_ == null) + { + p_193512_1_ = p_193512_0_.getPlayerList().getPlayerByUsername(p_193512_2_); + } + + if (p_193512_1_ == null) + { + throw new PlayerNotFoundException("commands.generic.player.notFound", new Object[] {p_193512_2_}); + } + else + { + return p_193512_1_; + } + } + + public static Entity getEntity(MinecraftServer server, ICommandSender sender, String target) throws EntityNotFoundException, CommandException + { + return getEntity(server, sender, target, Entity.class); + } + + public static T getEntity(MinecraftServer server, ICommandSender sender, String target, Class targetClass) throws EntityNotFoundException, CommandException + { + Entity entity = EntitySelector.matchOneEntity(sender, target, targetClass); + + if (entity == null) + { + entity = server.getPlayerList().getPlayerByUsername(target); + } + + if (entity == null) + { + try + { + UUID uuid = UUID.fromString(target); + entity = server.getEntityFromUuid(uuid); + + if (entity == null) + { + entity = server.getPlayerList().getPlayerByUUID(uuid); + } + } + catch (IllegalArgumentException var6) + { + if (target.split("-").length == 5) + { + throw new EntityNotFoundException("commands.generic.entity.invalidUuid", new Object[] {target}); + } + } + } + + if (entity != null && targetClass.isAssignableFrom(entity.getClass())) + { + return (T)entity; + } + else + { + throw new EntityNotFoundException(target); + } + } + + public static List getEntityList(MinecraftServer server, ICommandSender sender, String target) throws EntityNotFoundException, CommandException + { + return (List)(EntitySelector.isSelector(target) ? EntitySelector.matchEntities(sender, target, Entity.class) : Lists.newArrayList(getEntity(server, sender, target))); + } + + public static String getPlayerName(MinecraftServer server, ICommandSender sender, String target) throws PlayerNotFoundException, CommandException + { + try + { + return getPlayer(server, sender, target).getName(); + } + catch (CommandException commandexception) + { + if (EntitySelector.isSelector(target)) + { + throw commandexception; + } + else + { + return target; + } + } + } + + public static String getEntityName(MinecraftServer server, ICommandSender sender, String target) throws EntityNotFoundException, CommandException + { + try + { + return getPlayer(server, sender, target).getName(); + } + catch (PlayerNotFoundException var6) + { + try + { + return getEntity(server, sender, target).getCachedUniqueIdString(); + } + catch (EntityNotFoundException entitynotfoundexception) + { + if (EntitySelector.isSelector(target)) + { + throw entitynotfoundexception; + } + else + { + return target; + } + } + } + } + + public static ITextComponent getChatComponentFromNthArg(ICommandSender sender, String[] args, int index) throws CommandException, PlayerNotFoundException + { + return getChatComponentFromNthArg(sender, args, index, false); + } + + public static ITextComponent getChatComponentFromNthArg(ICommandSender sender, String[] args, int index, boolean p_147176_3_) throws PlayerNotFoundException, CommandException + { + ITextComponent itextcomponent = new TextComponentString(""); + + for (int i = index; i < args.length; ++i) + { + if (i > index) + { + itextcomponent.appendText(" "); + } + + ITextComponent itextcomponent1 = net.minecraftforge.common.ForgeHooks.newChatWithLinks(args[i]); // Forge: links for messages + + if (p_147176_3_) + { + ITextComponent itextcomponent2 = EntitySelector.matchEntitiesToTextComponent(sender, args[i]); + + if (itextcomponent2 == null) + { + if (EntitySelector.isSelector(args[i])) + { + throw new PlayerNotFoundException("commands.generic.selector.notFound", new Object[] {args[i]}); + } + } + else + { + itextcomponent1 = itextcomponent2; + } + } + + itextcomponent.appendSibling(itextcomponent1); + } + + return itextcomponent; + } + + /** + * Builds a string starting at startPos + */ + public static String buildString(String[] args, int startPos) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (int i = startPos; i < args.length; ++i) + { + if (i > startPos) + { + stringbuilder.append(" "); + } + + String s = args[i]; + stringbuilder.append(s); + } + + return stringbuilder.toString(); + } + + public static CommandBase.CoordinateArg parseCoordinate(double base, String selectorArg, boolean centerBlock) throws NumberInvalidException + { + return parseCoordinate(base, selectorArg, -30000000, 30000000, centerBlock); + } + + public static CommandBase.CoordinateArg parseCoordinate(double base, String selectorArg, int min, int max, boolean centerBlock) throws NumberInvalidException + { + boolean flag = selectorArg.startsWith("~"); + + if (flag && Double.isNaN(base)) + { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {base}); + } + else + { + double d0 = 0.0D; + + if (!flag || selectorArg.length() > 1) + { + boolean flag1 = selectorArg.contains("."); + + if (flag) + { + selectorArg = selectorArg.substring(1); + } + + d0 += parseDouble(selectorArg); + + if (!flag1 && !flag && centerBlock) + { + d0 += 0.5D; + } + } + + double d1 = d0 + (flag ? base : 0.0D); + + if (min != 0 || max != 0) + { + if (d1 < (double)min) + { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {String.format("%.2f", d1), min}); + } + + if (d1 > (double)max) + { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {String.format("%.2f", d1), max}); + } + } + + return new CommandBase.CoordinateArg(d1, d0, flag); + } + } + + public static double parseDouble(double base, String input, boolean centerBlock) throws NumberInvalidException + { + return parseDouble(base, input, -30000000, 30000000, centerBlock); + } + + public static double parseDouble(double base, String input, int min, int max, boolean centerBlock) throws NumberInvalidException + { + boolean flag = input.startsWith("~"); + + if (flag && Double.isNaN(base)) + { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[] {base}); + } + else + { + double d0 = flag ? base : 0.0D; + + if (!flag || input.length() > 1) + { + boolean flag1 = input.contains("."); + + if (flag) + { + input = input.substring(1); + } + + d0 += parseDouble(input); + + if (!flag1 && !flag && centerBlock) + { + d0 += 0.5D; + } + } + + if (min != 0 || max != 0) + { + if (d0 < (double)min) + { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {String.format("%.2f", d0), min}); + } + + if (d0 > (double)max) + { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {String.format("%.2f", d0), max}); + } + } + + return d0; + } + } + + /** + * Gets the Item specified by the given text string. First checks the item registry, then tries by parsing the + * string as an integer ID (deprecated). Warns the sender if we matched by parsing the ID. Throws if the item + * wasn't found. Returns the item if it was found. + */ + public static Item getItemByText(ICommandSender sender, String id) throws NumberInvalidException + { + ResourceLocation resourcelocation = new ResourceLocation(id); + Item item = Item.REGISTRY.getObject(resourcelocation); + + if (item == null) + { + throw new NumberInvalidException("commands.give.item.notFound", new Object[] {resourcelocation}); + } + else + { + return item; + } + } + + /** + * Gets the Block specified by the given text string. First checks the block registry, then tries by parsing the + * string as an integer ID (deprecated). Warns the sender if we matched by parsing the ID. Throws if the block + * wasn't found. Returns the block if it was found. + */ + public static Block getBlockByText(ICommandSender sender, String id) throws NumberInvalidException + { + ResourceLocation resourcelocation = new ResourceLocation(id); + + if (!Block.REGISTRY.containsKey(resourcelocation)) + { + throw new NumberInvalidException("commands.give.block.notFound", new Object[] {resourcelocation}); + } + else + { + return Block.REGISTRY.getObject(resourcelocation); + } + } + + public static IBlockState convertArgToBlockState(Block p_190794_0_, String p_190794_1_) throws NumberInvalidException, InvalidBlockStateException + { + try + { + int i = Integer.parseInt(p_190794_1_); + + if (i < 0) + { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[] {i, Integer.valueOf(0)}); + } + else if (i > 15) + { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[] {i, Integer.valueOf(15)}); + } + else + { + return p_190794_0_.getStateFromMeta(Integer.parseInt(p_190794_1_)); + } + } + catch (RuntimeException var7) + { + try + { + Map < IProperty, Comparable> map = getBlockStatePropertyValueMap(p_190794_0_, p_190794_1_); + IBlockState iblockstate = p_190794_0_.getDefaultState(); + + for (Entry < IProperty, Comparable> entry : map.entrySet()) + { + iblockstate = getBlockState(iblockstate, entry.getKey(), entry.getValue()); + } + + return iblockstate; + } + catch (RuntimeException var6) + { + throw new InvalidBlockStateException("commands.generic.blockstate.invalid", new Object[] {p_190794_1_, Block.REGISTRY.getNameForObject(p_190794_0_)}); + } + } + } + + private static > IBlockState getBlockState(IBlockState p_190793_0_, IProperty p_190793_1_, Comparable p_190793_2_) + { + return p_190793_0_.withProperty(p_190793_1_, (T)p_190793_2_); + } + + public static Predicate convertArgToBlockStatePredicate(final Block p_190791_0_, String p_190791_1_) throws InvalidBlockStateException + { + if (!"*".equals(p_190791_1_) && !"-1".equals(p_190791_1_)) + { + try + { + final int i = Integer.parseInt(p_190791_1_); + return new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + return i == p_apply_1_.getBlock().getMetaFromState(p_apply_1_); + } + }; + } + catch (RuntimeException var3) + { + final Map < IProperty, Comparable> map = getBlockStatePropertyValueMap(p_190791_0_, p_190791_1_); + return new Predicate() + { + public boolean apply(@Nullable IBlockState p_apply_1_) + { + if (p_apply_1_ != null && p_190791_0_ == p_apply_1_.getBlock()) + { + for (Entry < IProperty, Comparable> entry : map.entrySet()) + { + if (!p_apply_1_.getValue(entry.getKey()).equals(entry.getValue())) + { + return false; + } + } + + return true; + } + else + { + return false; + } + } + }; + } + } + else + { + return Predicates.alwaysTrue(); + } + } + + private static Map < IProperty, Comparable> getBlockStatePropertyValueMap(Block p_190795_0_, String p_190795_1_) throws InvalidBlockStateException + { + Map < IProperty, Comparable> map = Maps. < IProperty, Comparable> newHashMap(); + + if ("default".equals(p_190795_1_)) + { + return p_190795_0_.getDefaultState().getProperties(); + } + else + { + BlockStateContainer blockstatecontainer = p_190795_0_.getBlockState(); + Iterator iterator = COMMA_SPLITTER.split(p_190795_1_).iterator(); + + while (true) + { + if (!iterator.hasNext()) + { + return map; + } + + String s = (String)iterator.next(); + Iterator iterator1 = EQUAL_SPLITTER.split(s).iterator(); + + if (!iterator1.hasNext()) + { + break; + } + + IProperty iproperty = blockstatecontainer.getProperty(iterator1.next()); + + if (iproperty == null || !iterator1.hasNext()) + { + break; + } + + Comparable comparable = getValueHelper(iproperty, iterator1.next()); + + if (comparable == null) + { + break; + } + + map.put(iproperty, comparable); + } + + throw new InvalidBlockStateException("commands.generic.blockstate.invalid", new Object[] {p_190795_1_, Block.REGISTRY.getNameForObject(p_190795_0_)}); + } + } + + @Nullable + private static > T getValueHelper(IProperty p_190792_0_, String p_190792_1_) + { + return (T)(p_190792_0_.parseValue(p_190792_1_).orNull()); + } + + /** + * Creates a linguistic series joining the input objects together. Examples: 1) {} --> "", 2) {"Steve"} --> + * "Steve", 3) {"Steve", "Phil"} --> "Steve and Phil", 4) {"Steve", "Phil", "Mark"} --> "Steve, Phil and Mark" + */ + public static String joinNiceString(Object[] elements) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (int i = 0; i < elements.length; ++i) + { + String s = elements[i].toString(); + + if (i > 0) + { + if (i == elements.length - 1) + { + stringbuilder.append(" and "); + } + else + { + stringbuilder.append(", "); + } + } + + stringbuilder.append(s); + } + + return stringbuilder.toString(); + } + + public static ITextComponent join(List components) + { + ITextComponent itextcomponent = new TextComponentString(""); + + for (int i = 0; i < components.size(); ++i) + { + if (i > 0) + { + if (i == components.size() - 1) + { + itextcomponent.appendText(" and "); + } + else if (i > 0) + { + itextcomponent.appendText(", "); + } + } + + itextcomponent.appendSibling(components.get(i)); + } + + return itextcomponent; + } + + /** + * Creates a linguistic series joining together the elements of the given collection. Examples: 1) {} --> "", 2) + * {"Steve"} --> "Steve", 3) {"Steve", "Phil"} --> "Steve and Phil", 4) {"Steve", "Phil", "Mark"} --> "Steve, Phil + * and Mark" + */ + public static String joinNiceStringFromCollection(Collection strings) + { + return joinNiceString(strings.toArray(new String[strings.size()])); + } + + public static List getTabCompletionCoordinate(String[] inputArgs, int index, @Nullable BlockPos pos) + { + if (pos == null) + { + return Lists.newArrayList("~"); + } + else + { + int i = inputArgs.length - 1; + String s; + + if (i == index) + { + s = Integer.toString(pos.getX()); + } + else if (i == index + 1) + { + s = Integer.toString(pos.getY()); + } + else + { + if (i != index + 2) + { + return Collections.emptyList(); + } + + s = Integer.toString(pos.getZ()); + } + + return Lists.newArrayList(s); + } + } + + public static List getTabCompletionCoordinateXZ(String[] inputArgs, int index, @Nullable BlockPos lookedPos) + { + if (lookedPos == null) + { + return Lists.newArrayList("~"); + } + else + { + int i = inputArgs.length - 1; + String s; + + if (i == index) + { + s = Integer.toString(lookedPos.getX()); + } + else + { + if (i != index + 1) + { + return Collections.emptyList(); + } + + s = Integer.toString(lookedPos.getZ()); + } + + return Lists.newArrayList(s); + } + } + + /** + * Returns true if the given substring is exactly equal to the start of the given string (case insensitive). + */ + public static boolean doesStringStartWith(String original, String region) + { + return region.regionMatches(true, 0, original, 0, original.length()); + } + + /** + * Returns a List of strings (chosen from the given strings) which the last word in the given string array is a + * beginning-match for. (Tab completion). + */ + public static List getListOfStringsMatchingLastWord(String[] args, String... possibilities) + { + return getListOfStringsMatchingLastWord(args, Arrays.asList(possibilities)); + } + + public static List getListOfStringsMatchingLastWord(String[] inputArgs, Collection possibleCompletions) + { + String s = inputArgs[inputArgs.length - 1]; + List list = Lists.newArrayList(); + + if (!possibleCompletions.isEmpty()) + { + for (String s1 : Iterables.transform(possibleCompletions, Functions.toStringFunction())) + { + if (doesStringStartWith(s, s1)) + { + list.add(s1); + } + } + + if (list.isEmpty()) + { + for (Object object : possibleCompletions) + { + if (object instanceof ResourceLocation && doesStringStartWith(s, ((ResourceLocation)object).getResourcePath())) + { + list.add(String.valueOf(object)); + } + } + } + } + + return list; + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return false; + } + + public static void notifyCommandListener(ICommandSender sender, ICommand command, String translationKey, Object... translationArgs) + { + notifyCommandListener(sender, command, 0, translationKey, translationArgs); + } + + public static void notifyCommandListener(ICommandSender sender, ICommand command, int flags, String translationKey, Object... translationArgs) + { + if (commandListener != null) + { + commandListener.notifyListener(sender, command, flags, translationKey, translationArgs); + } + } + + /** + * Sets the command listener responsable for notifying server operators when asked to by commands + */ + public static void setCommandListener(ICommandListener listener) + { + commandListener = listener; + } + + public int compareTo(ICommand p_compareTo_1_) + { + return this.getName().compareTo(p_compareTo_1_.getName()); + } + + public static class CoordinateArg + { + private final double result; + private final double amount; + private final boolean isRelative; + + protected CoordinateArg(double resultIn, double amountIn, boolean relative) + { + this.result = resultIn; + this.amount = amountIn; + this.isRelative = relative; + } + + public double getResult() + { + return this.result; + } + + public double getAmount() + { + return this.amount; + } + + public boolean isRelative() + { + return this.isRelative; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandBlockData.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandBlockData.java new file mode 100644 index 0000000..e93f0a6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandBlockData.java @@ -0,0 +1,113 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CommandBlockData extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "blockdata"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.blockdata.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 4) + { + throw new WrongUsageException("commands.blockdata.usage", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 0, false); + World world = sender.getEntityWorld(); + + if (!world.isBlockLoaded(blockpos)) + { + throw new CommandException("commands.blockdata.outOfWorld", new Object[0]); + } + else + { + IBlockState iblockstate = world.getBlockState(blockpos); + TileEntity tileentity = world.getTileEntity(blockpos); + + if (tileentity == null) + { + throw new CommandException("commands.blockdata.notValid", new Object[0]); + } + else + { + NBTTagCompound nbttagcompound = tileentity.writeToNBT(new NBTTagCompound()); + NBTTagCompound nbttagcompound1 = nbttagcompound.copy(); + NBTTagCompound nbttagcompound2; + + try + { + nbttagcompound2 = JsonToNBT.getTagFromJson(buildString(args, 3)); + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.blockdata.tagError", new Object[] {nbtexception.getMessage()}); + } + + nbttagcompound.merge(nbttagcompound2); + nbttagcompound.setInteger("x", blockpos.getX()); + nbttagcompound.setInteger("y", blockpos.getY()); + nbttagcompound.setInteger("z", blockpos.getZ()); + + if (nbttagcompound.equals(nbttagcompound1)) + { + throw new CommandException("commands.blockdata.failed", new Object[] {nbttagcompound.toString()}); + } + else + { + tileentity.readFromNBT(nbttagcompound); + tileentity.markDirty(); + world.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 3); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 1); + notifyCommandListener(sender, this, "commands.blockdata.success", new Object[] {nbttagcompound.toString()}); + } + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length > 0 && args.length <= 3 ? getTabCompletionCoordinate(args, 0, targetPos) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandClearInventory.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandClearInventory.java new file mode 100644 index 0000000..5b43d0e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandClearInventory.java @@ -0,0 +1,120 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandClearInventory extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "clear"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.clear.usage"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + EntityPlayerMP entityplayermp = args.length == 0 ? getCommandSenderAsPlayer(sender) : getPlayer(server, sender, args[0]); + Item item = args.length >= 2 ? getItemByText(sender, args[1]) : null; + int i = args.length >= 3 ? parseInt(args[2], -1) : -1; + int j = args.length >= 4 ? parseInt(args[3], -1) : -1; + NBTTagCompound nbttagcompound = null; + + if (args.length >= 5) + { + try + { + nbttagcompound = JsonToNBT.getTagFromJson(buildString(args, 4)); + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.clear.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + if (args.length >= 2 && item == null) + { + throw new CommandException("commands.clear.failure", new Object[] {entityplayermp.getName()}); + } + else + { + int k = entityplayermp.inventory.clearMatchingItems(item, i, j, nbttagcompound); + entityplayermp.inventoryContainer.detectAndSendChanges(); + + if (!entityplayermp.capabilities.isCreativeMode) + { + entityplayermp.updateHeldItem(); + } + + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, k); + + if (k == 0) + { + throw new CommandException("commands.clear.failure", new Object[] {entityplayermp.getName()}); + } + else + { + if (j == 0) + { + sender.sendMessage(new TextComponentTranslation("commands.clear.testing", new Object[] {entityplayermp.getName(), k})); + } + else + { + notifyCommandListener(sender, this, "commands.clear.success", new Object[] {entityplayermp.getName(), k}); + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, Item.REGISTRY.getKeys()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandClone.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandClone.java new file mode 100644 index 0000000..916f66f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandClone.java @@ -0,0 +1,309 @@ +package net.minecraft.command; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.Deque; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.NextTickListEntry; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class CommandClone extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "clone"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.clone.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 9) + { + throw new WrongUsageException("commands.clone.usage", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 0, false); + BlockPos blockpos1 = parseBlockPos(sender, args, 3, false); + BlockPos blockpos2 = parseBlockPos(sender, args, 6, false); + StructureBoundingBox structureboundingbox = new StructureBoundingBox(blockpos, blockpos1); + StructureBoundingBox structureboundingbox1 = new StructureBoundingBox(blockpos2, blockpos2.add(structureboundingbox.getLength())); + int i = structureboundingbox.getXSize() * structureboundingbox.getYSize() * structureboundingbox.getZSize(); + + if (i > 32768) + { + throw new CommandException("commands.clone.tooManyBlocks", new Object[] {i, Integer.valueOf(32768)}); + } + else + { + boolean flag = false; + Block block = null; + Predicate predicate = null; + + if ((args.length < 11 || !"force".equals(args[10]) && !"move".equals(args[10])) && structureboundingbox.intersectsWith(structureboundingbox1)) + { + throw new CommandException("commands.clone.noOverlap", new Object[0]); + } + else + { + if (args.length >= 11 && "move".equals(args[10])) + { + flag = true; + } + + if (structureboundingbox.minY >= 0 && structureboundingbox.maxY < 256 && structureboundingbox1.minY >= 0 && structureboundingbox1.maxY < 256) + { + World world = sender.getEntityWorld(); + + if (world.isAreaLoaded(structureboundingbox) && world.isAreaLoaded(structureboundingbox1)) + { + boolean flag1 = false; + + if (args.length >= 10) + { + if ("masked".equals(args[9])) + { + flag1 = true; + } + else if ("filtered".equals(args[9])) + { + if (args.length < 12) + { + throw new WrongUsageException("commands.clone.usage", new Object[0]); + } + + block = getBlockByText(sender, args[11]); + + if (args.length >= 13) + { + predicate = convertArgToBlockStatePredicate(block, args[12]); + } + } + } + + List list = Lists.newArrayList(); + List list1 = Lists.newArrayList(); + List list2 = Lists.newArrayList(); + Deque deque = Lists.newLinkedList(); + BlockPos blockpos3 = new BlockPos(structureboundingbox1.minX - structureboundingbox.minX, structureboundingbox1.minY - structureboundingbox.minY, structureboundingbox1.minZ - structureboundingbox.minZ); + + for (int j = structureboundingbox.minZ; j <= structureboundingbox.maxZ; ++j) + { + for (int k = structureboundingbox.minY; k <= structureboundingbox.maxY; ++k) + { + for (int l = structureboundingbox.minX; l <= structureboundingbox.maxX; ++l) + { + BlockPos blockpos4 = new BlockPos(l, k, j); + BlockPos blockpos5 = blockpos4.add(blockpos3); + IBlockState iblockstate = world.getBlockState(blockpos4); + + if ((!flag1 || iblockstate.getBlock() != Blocks.AIR) && (block == null || iblockstate.getBlock() == block && (predicate == null || predicate.apply(iblockstate)))) + { + TileEntity tileentity = world.getTileEntity(blockpos4); + + if (tileentity != null) + { + NBTTagCompound nbttagcompound = tileentity.writeToNBT(new NBTTagCompound()); + list1.add(new CommandClone.StaticCloneData(blockpos5, iblockstate, nbttagcompound)); + deque.addLast(blockpos4); + } + else if (!iblockstate.isFullBlock() && !iblockstate.isFullCube()) + { + list2.add(new CommandClone.StaticCloneData(blockpos5, iblockstate, (NBTTagCompound)null)); + deque.addFirst(blockpos4); + } + else + { + list.add(new CommandClone.StaticCloneData(blockpos5, iblockstate, (NBTTagCompound)null)); + deque.addLast(blockpos4); + } + } + } + } + } + + if (flag) + { + for (BlockPos blockpos6 : deque) + { + TileEntity tileentity1 = world.getTileEntity(blockpos6); + + if (tileentity1 instanceof IInventory) + { + ((IInventory)tileentity1).clear(); + } + + world.setBlockState(blockpos6, Blocks.BARRIER.getDefaultState(), 2); + } + + for (BlockPos blockpos7 : deque) + { + world.setBlockState(blockpos7, Blocks.AIR.getDefaultState(), 3); + } + } + + List list3 = Lists.newArrayList(); + list3.addAll(list); + list3.addAll(list1); + list3.addAll(list2); + List list4 = Lists.reverse(list3); + + for (CommandClone.StaticCloneData commandclone$staticclonedata : list4) + { + TileEntity tileentity2 = world.getTileEntity(commandclone$staticclonedata.pos); + + if (tileentity2 instanceof IInventory) + { + ((IInventory)tileentity2).clear(); + } + + world.setBlockState(commandclone$staticclonedata.pos, Blocks.BARRIER.getDefaultState(), 2); + } + + i = 0; + + for (CommandClone.StaticCloneData commandclone$staticclonedata1 : list3) + { + if (world.setBlockState(commandclone$staticclonedata1.pos, commandclone$staticclonedata1.blockState, 2)) + { + ++i; + } + } + + for (CommandClone.StaticCloneData commandclone$staticclonedata2 : list1) + { + TileEntity tileentity3 = world.getTileEntity(commandclone$staticclonedata2.pos); + + if (commandclone$staticclonedata2.nbt != null && tileentity3 != null) + { + commandclone$staticclonedata2.nbt.setInteger("x", commandclone$staticclonedata2.pos.getX()); + commandclone$staticclonedata2.nbt.setInteger("y", commandclone$staticclonedata2.pos.getY()); + commandclone$staticclonedata2.nbt.setInteger("z", commandclone$staticclonedata2.pos.getZ()); + tileentity3.readFromNBT(commandclone$staticclonedata2.nbt); + tileentity3.markDirty(); + } + + world.setBlockState(commandclone$staticclonedata2.pos, commandclone$staticclonedata2.blockState, 2); + } + + for (CommandClone.StaticCloneData commandclone$staticclonedata3 : list4) + { + world.notifyNeighborsRespectDebug(commandclone$staticclonedata3.pos, commandclone$staticclonedata3.blockState.getBlock(), false); + } + + List list5 = world.getPendingBlockUpdates(structureboundingbox, false); + + if (list5 != null) + { + for (NextTickListEntry nextticklistentry : list5) + { + if (structureboundingbox.isVecInside(nextticklistentry.position)) + { + BlockPos blockpos8 = nextticklistentry.position.add(blockpos3); + world.scheduleBlockUpdate(blockpos8, nextticklistentry.getBlock(), (int)(nextticklistentry.scheduledTime - world.getWorldInfo().getWorldTotalTime()), nextticklistentry.priority); + } + } + } + + if (i <= 0) + { + throw new CommandException("commands.clone.failed", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, i); + notifyCommandListener(sender, this, "commands.clone.success", new Object[] {i}); + } + } + else + { + throw new CommandException("commands.clone.outOfWorld", new Object[0]); + } + } + else + { + throw new CommandException("commands.clone.outOfWorld", new Object[0]); + } + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length > 0 && args.length <= 3) + { + return getTabCompletionCoordinate(args, 0, targetPos); + } + else if (args.length > 3 && args.length <= 6) + { + return getTabCompletionCoordinate(args, 3, targetPos); + } + else if (args.length > 6 && args.length <= 9) + { + return getTabCompletionCoordinate(args, 6, targetPos); + } + else if (args.length == 10) + { + return getListOfStringsMatchingLastWord(args, new String[] {"replace", "masked", "filtered"}); + } + else if (args.length == 11) + { + return getListOfStringsMatchingLastWord(args, new String[] {"normal", "force", "move"}); + } + else + { + return args.length == 12 && "filtered".equals(args[9]) ? getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()) : Collections.emptyList(); + } + } + + static class StaticCloneData + { + public final BlockPos pos; + public final IBlockState blockState; + public final NBTTagCompound nbt; + + public StaticCloneData(BlockPos posIn, IBlockState stateIn, NBTTagCompound compoundIn) + { + this.pos = posIn; + this.blockState = stateIn; + this.nbt = compoundIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandCompare.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandCompare.java new file mode 100644 index 0000000..3676e18 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandCompare.java @@ -0,0 +1,174 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; + +public class CommandCompare extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "testforblocks"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.compare.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 9) + { + throw new WrongUsageException("commands.compare.usage", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 0, false); + BlockPos blockpos1 = parseBlockPos(sender, args, 3, false); + BlockPos blockpos2 = parseBlockPos(sender, args, 6, false); + StructureBoundingBox structureboundingbox = new StructureBoundingBox(blockpos, blockpos1); + StructureBoundingBox structureboundingbox1 = new StructureBoundingBox(blockpos2, blockpos2.add(structureboundingbox.getLength())); + int i = structureboundingbox.getXSize() * structureboundingbox.getYSize() * structureboundingbox.getZSize(); + + if (i > 524288) + { + throw new CommandException("commands.compare.tooManyBlocks", new Object[] {i, 524288}); + } + else if (structureboundingbox.minY >= 0 && structureboundingbox.maxY < 256 && structureboundingbox1.minY >= 0 && structureboundingbox1.maxY < 256) + { + World world = sender.getEntityWorld(); + + if (world.isAreaLoaded(structureboundingbox) && world.isAreaLoaded(structureboundingbox1)) + { + boolean flag = false; + + if (args.length > 9 && "masked".equals(args[9])) + { + flag = true; + } + + i = 0; + BlockPos blockpos3 = new BlockPos(structureboundingbox1.minX - structureboundingbox.minX, structureboundingbox1.minY - structureboundingbox.minY, structureboundingbox1.minZ - structureboundingbox.minZ); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos.MutableBlockPos blockpos$mutableblockpos1 = new BlockPos.MutableBlockPos(); + + for (int j = structureboundingbox.minZ; j <= structureboundingbox.maxZ; ++j) + { + for (int k = structureboundingbox.minY; k <= structureboundingbox.maxY; ++k) + { + for (int l = structureboundingbox.minX; l <= structureboundingbox.maxX; ++l) + { + blockpos$mutableblockpos.setPos(l, k, j); + blockpos$mutableblockpos1.setPos(l + blockpos3.getX(), k + blockpos3.getY(), j + blockpos3.getZ()); + boolean flag1 = false; + IBlockState iblockstate = world.getBlockState(blockpos$mutableblockpos); + + if (!flag || iblockstate.getBlock() != Blocks.AIR) + { + if (iblockstate == world.getBlockState(blockpos$mutableblockpos1)) + { + TileEntity tileentity = world.getTileEntity(blockpos$mutableblockpos); + TileEntity tileentity1 = world.getTileEntity(blockpos$mutableblockpos1); + + if (tileentity != null && tileentity1 != null) + { + NBTTagCompound nbttagcompound = tileentity.writeToNBT(new NBTTagCompound()); + nbttagcompound.removeTag("x"); + nbttagcompound.removeTag("y"); + nbttagcompound.removeTag("z"); + NBTTagCompound nbttagcompound1 = tileentity1.writeToNBT(new NBTTagCompound()); + nbttagcompound1.removeTag("x"); + nbttagcompound1.removeTag("y"); + nbttagcompound1.removeTag("z"); + + if (!nbttagcompound.equals(nbttagcompound1)) + { + flag1 = true; + } + } + else if (tileentity != null) + { + flag1 = true; + } + } + else + { + flag1 = true; + } + + ++i; + + if (flag1) + { + throw new CommandException("commands.compare.failed", new Object[0]); + } + } + } + } + } + + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, i); + notifyCommandListener(sender, this, "commands.compare.success", new Object[] {i}); + } + else + { + throw new CommandException("commands.compare.outOfWorld", new Object[0]); + } + } + else + { + throw new CommandException("commands.compare.outOfWorld", new Object[0]); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length > 0 && args.length <= 3) + { + return getTabCompletionCoordinate(args, 0, targetPos); + } + else if (args.length > 3 && args.length <= 6) + { + return getTabCompletionCoordinate(args, 3, targetPos); + } + else if (args.length > 6 && args.length <= 9) + { + return getTabCompletionCoordinate(args, 6, targetPos); + } + else + { + return args.length == 10 ? getListOfStringsMatchingLastWord(args, new String[] {"masked", "all"}) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandDebug.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandDebug.java new file mode 100644 index 0000000..6bf023f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandDebug.java @@ -0,0 +1,197 @@ +package net.minecraft.command; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.profiler.Profiler; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CommandDebug extends CommandBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The time (in milliseconds) that profiling was started */ + private long profileStartTime; + /** The tick number that profiling was started on */ + private int profileStartTick; + + /** + * Gets the name of the command + */ + public String getName() + { + return "debug"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.debug.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.debug.usage", new Object[0]); + } + else + { + if ("start".equals(args[0])) + { + if (args.length != 1) + { + throw new WrongUsageException("commands.debug.usage", new Object[0]); + } + + notifyCommandListener(sender, this, "commands.debug.start", new Object[0]); + server.enableProfiling(); + this.profileStartTime = MinecraftServer.getCurrentTimeMillis(); + this.profileStartTick = server.getTickCounter(); + } + else + { + if (!"stop".equals(args[0])) + { + throw new WrongUsageException("commands.debug.usage", new Object[0]); + } + + if (args.length != 1) + { + throw new WrongUsageException("commands.debug.usage", new Object[0]); + } + + if (!server.profiler.profilingEnabled) + { + throw new CommandException("commands.debug.notStarted", new Object[0]); + } + + long i = MinecraftServer.getCurrentTimeMillis(); + int j = server.getTickCounter(); + long k = i - this.profileStartTime; + int l = j - this.profileStartTick; + this.saveProfilerResults(k, l, server); + server.profiler.profilingEnabled = false; + notifyCommandListener(sender, this, "commands.debug.stop", new Object[] {String.format("%.2f", (float)k / 1000.0F), l}); + } + } + } + + private void saveProfilerResults(long timeSpan, int tickSpan, MinecraftServer server) + { + File file1 = new File(server.getFile("debug"), "profile-results-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + ".txt"); + file1.getParentFile().mkdirs(); + Writer writer = null; + + try + { + writer = new OutputStreamWriter(new FileOutputStream(file1), StandardCharsets.UTF_8); + writer.write(this.getProfilerResults(timeSpan, tickSpan, server)); + } + catch (Throwable throwable) + { + LOGGER.error("Could not save profiler results to {}", file1, throwable); + } + finally + { + IOUtils.closeQuietly(writer); + } + } + + private String getProfilerResults(long timeSpan, int tickSpan, MinecraftServer server) + { + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append("---- Minecraft Profiler Results ----\n"); + stringbuilder.append("// "); + stringbuilder.append(getWittyComment()); + stringbuilder.append("\n\n"); + stringbuilder.append("Time span: ").append(timeSpan).append(" ms\n"); + stringbuilder.append("Tick span: ").append(tickSpan).append(" ticks\n"); + stringbuilder.append("// This is approximately ").append(String.format("%.2f", (float)tickSpan / ((float)timeSpan / 1000.0F))).append(" ticks per second. It should be ").append((int)20).append(" ticks per second\n\n"); + stringbuilder.append("--- BEGIN PROFILE DUMP ---\n\n"); + this.appendProfilerResults(0, "root", stringbuilder, server); + stringbuilder.append("--- END PROFILE DUMP ---\n\n"); + return stringbuilder.toString(); + } + + private void appendProfilerResults(int depth, String sectionName, StringBuilder builder, MinecraftServer server) + { + List list = server.profiler.getProfilingData(sectionName); + + if (list != null && list.size() >= 3) + { + for (int i = 1; i < list.size(); ++i) + { + Profiler.Result profiler$result = list.get(i); + builder.append(String.format("[%02d] ", depth)); + + for (int j = 0; j < depth; ++j) + { + builder.append("| "); + } + + builder.append(profiler$result.profilerName).append(" - ").append(String.format("%.2f", profiler$result.usePercentage)).append("%/").append(String.format("%.2f", profiler$result.totalUsePercentage)).append("%\n"); + + if (!"unspecified".equals(profiler$result.profilerName)) + { + try + { + this.appendProfilerResults(depth + 1, sectionName + "." + profiler$result.profilerName, builder, server); + } + catch (Exception exception) + { + builder.append("[[ EXCEPTION ").append((Object)exception).append(" ]]"); + } + } + } + } + } + + /** + * Get a random witty comment + */ + private static String getWittyComment() + { + String[] astring = new String[] {"Shiny numbers!", "Am I not running fast enough? :(", "I'm working as hard as I can!", "Will I ever be good enough for you? :(", "Speedy. Zoooooom!", "Hello world", "40% better than a crash report.", "Now with extra numbers", "Now with less numbers", "Now with the same numbers", "You should add flames to things, it makes them go faster!", "Do you feel the need for... optimization?", "*cracks redstone whip*", "Maybe if you treated it better then it'll have more motivation to work faster! Poor server."}; + + try + { + return astring[(int)(System.nanoTime() % (long)astring.length)]; + } + catch (Throwable var2) + { + return "Witty comment unavailable :("; + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, new String[] {"start", "stop"}) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandDefaultGameMode.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandDefaultGameMode.java new file mode 100644 index 0000000..bf9170e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandDefaultGameMode.java @@ -0,0 +1,59 @@ +package net.minecraft.command; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; + +public class CommandDefaultGameMode extends CommandGameMode +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "defaultgamemode"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.defaultgamemode.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length <= 0) + { + throw new WrongUsageException("commands.defaultgamemode.usage", new Object[0]); + } + else + { + GameType gametype = this.getGameModeFromCommand(sender, args[0]); + this.setDefaultGameType(gametype, server); + notifyCommandListener(sender, this, "commands.defaultgamemode.success", new Object[] {new TextComponentTranslation("gameMode." + gametype.getName(), new Object[0])}); + } + } + + /** + * Set the default game type for the server. Also propogate the changes to all players if the server is set to force + * game mode + */ + protected void setDefaultGameType(GameType gameType, MinecraftServer server) + { + server.setGameType(gameType); + + if (server.getForceGamemode()) + { + for (EntityPlayerMP entityplayermp : server.getPlayerList().getPlayers()) + { + entityplayermp.setGameType(gameType); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandDifficulty.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandDifficulty.java new file mode 100644 index 0000000..d8dbb3d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandDifficulty.java @@ -0,0 +1,87 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.EnumDifficulty; + +public class CommandDifficulty extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "difficulty"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.difficulty.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length <= 0) + { + throw new WrongUsageException("commands.difficulty.usage", new Object[0]); + } + else + { + EnumDifficulty enumdifficulty = this.getDifficultyFromCommand(args[0]); + server.setDifficultyForAllWorlds(enumdifficulty); + notifyCommandListener(sender, this, "commands.difficulty.success", new Object[] {new TextComponentTranslation(enumdifficulty.getDifficultyResourceKey(), new Object[0])}); + } + } + + protected EnumDifficulty getDifficultyFromCommand(String difficultyString) throws CommandException, NumberInvalidException + { + if (!"peaceful".equalsIgnoreCase(difficultyString) && !"p".equalsIgnoreCase(difficultyString)) + { + if (!"easy".equalsIgnoreCase(difficultyString) && !"e".equalsIgnoreCase(difficultyString)) + { + if (!"normal".equalsIgnoreCase(difficultyString) && !"n".equalsIgnoreCase(difficultyString)) + { + return !"hard".equalsIgnoreCase(difficultyString) && !"h".equalsIgnoreCase(difficultyString) ? EnumDifficulty.getDifficultyEnum(parseInt(difficultyString, 0, 3)) : EnumDifficulty.HARD; + } + else + { + return EnumDifficulty.NORMAL; + } + } + else + { + return EnumDifficulty.EASY; + } + } + else + { + return EnumDifficulty.PEACEFUL; + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, new String[] {"peaceful", "easy", "normal", "hard"}) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandEffect.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandEffect.java new file mode 100644 index 0000000..f4b0c7a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandEffect.java @@ -0,0 +1,163 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandEffect extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "effect"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.effect.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.effect.usage", new Object[0]); + } + else + { + EntityLivingBase entitylivingbase = (EntityLivingBase)getEntity(server, sender, args[0], EntityLivingBase.class); + + if ("clear".equals(args[1])) + { + if (entitylivingbase.getActivePotionEffects().isEmpty()) + { + throw new CommandException("commands.effect.failure.notActive.all", new Object[] {entitylivingbase.getName()}); + } + else + { + entitylivingbase.clearActivePotions(); + notifyCommandListener(sender, this, "commands.effect.success.removed.all", new Object[] {entitylivingbase.getName()}); + } + } + else + { + Potion potion; + + try + { + potion = Potion.getPotionById(parseInt(args[1], 1)); + } + catch (NumberInvalidException var11) + { + potion = Potion.getPotionFromResourceLocation(args[1]); + } + + if (potion == null) + { + throw new NumberInvalidException("commands.effect.notFound", new Object[] {args[1]}); + } + else + { + int i = 600; + int j = 30; + int k = 0; + + if (args.length >= 3) + { + j = parseInt(args[2], 0, 1000000); + + if (potion.isInstant()) + { + i = j; + } + else + { + i = j * 20; + } + } + else if (potion.isInstant()) + { + i = 1; + } + + if (args.length >= 4) + { + k = parseInt(args[3], 0, 255); + } + + boolean flag = true; + + if (args.length >= 5 && "true".equalsIgnoreCase(args[4])) + { + flag = false; + } + + if (j > 0) + { + PotionEffect potioneffect = new PotionEffect(potion, i, k, false, flag); + entitylivingbase.addPotionEffect(potioneffect); + notifyCommandListener(sender, this, "commands.effect.success", new Object[] {new TextComponentTranslation(potioneffect.getEffectName(), new Object[0]), Potion.getIdFromPotion(potion), k, entitylivingbase.getName(), j}); + } + else if (entitylivingbase.isPotionActive(potion)) + { + entitylivingbase.removePotionEffect(potion); + notifyCommandListener(sender, this, "commands.effect.success.removed", new Object[] {new TextComponentTranslation(potion.getName(), new Object[0]), entitylivingbase.getName()}); + } + else + { + throw new CommandException("commands.effect.failure.notActive", new Object[] {new TextComponentTranslation(potion.getName(), new Object[0]), entitylivingbase.getName()}); + } + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, Potion.REGISTRY.getKeys()); + } + else + { + return args.length == 5 ? getListOfStringsMatchingLastWord(args, new String[] {"true", "false"}) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandEnchant.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandEnchant.java new file mode 100644 index 0000000..26bd492 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandEnchant.java @@ -0,0 +1,137 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandEnchant extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "enchant"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.enchant.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.enchant.usage", new Object[0]); + } + else + { + EntityLivingBase entitylivingbase = (EntityLivingBase)getEntity(server, sender, args[0], EntityLivingBase.class); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, 0); + Enchantment enchantment; + + try + { + enchantment = Enchantment.getEnchantmentByID(parseInt(args[1], 0)); + } + catch (NumberInvalidException var12) + { + enchantment = Enchantment.getEnchantmentByLocation(args[1]); + } + + if (enchantment == null) + { + throw new NumberInvalidException("commands.enchant.notFound", new Object[] {args[1]}); + } + else + { + int i = 1; + ItemStack itemstack = entitylivingbase.getHeldItemMainhand(); + + if (itemstack.isEmpty()) + { + throw new CommandException("commands.enchant.noItem", new Object[0]); + } + else if (!enchantment.canApply(itemstack)) + { + throw new CommandException("commands.enchant.cantEnchant", new Object[0]); + } + else + { + if (args.length >= 3) + { + i = parseInt(args[2], enchantment.getMinLevel(), enchantment.getMaxLevel()); + } + + if (itemstack.hasTagCompound()) + { + NBTTagList nbttaglist = itemstack.getEnchantmentTagList(); + + for (int j = 0; j < nbttaglist.tagCount(); ++j) + { + int k = nbttaglist.getCompoundTagAt(j).getShort("id"); + + if (Enchantment.getEnchantmentByID(k) != null) + { + Enchantment enchantment1 = Enchantment.getEnchantmentByID(k); + + if (!enchantment.isCompatibleWith(enchantment1)) + { + throw new CommandException("commands.enchant.cantCombine", new Object[] {enchantment.getTranslatedName(i), enchantment1.getTranslatedName(nbttaglist.getCompoundTagAt(j).getShort("lvl"))}); + } + } + } + } + + itemstack.addEnchantment(enchantment, i); + notifyCommandListener(sender, this, "commands.enchant.success", new Object[0]); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, 1); + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, Enchantment.REGISTRY.getKeys()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandEntityData.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandEntityData.java new file mode 100644 index 0000000..8a86890 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandEntityData.java @@ -0,0 +1,93 @@ +package net.minecraft.command; + +import java.util.UUID; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; + +public class CommandEntityData extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "entitydata"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.entitydata.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.entitydata.usage", new Object[0]); + } + else + { + Entity entity = getEntity(server, sender, args[0]); + + if (entity instanceof EntityPlayer) + { + throw new CommandException("commands.entitydata.noPlayers", new Object[] {entity.getDisplayName()}); + } + else + { + NBTTagCompound nbttagcompound = entityToNBT(entity); + NBTTagCompound nbttagcompound1 = nbttagcompound.copy(); + NBTTagCompound nbttagcompound2; + + try + { + nbttagcompound2 = JsonToNBT.getTagFromJson(buildString(args, 1)); + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.entitydata.tagError", new Object[] {nbtexception.getMessage()}); + } + + UUID uuid = entity.getUniqueID(); + nbttagcompound.merge(nbttagcompound2); + entity.setUniqueId(uuid); + + if (nbttagcompound.equals(nbttagcompound1)) + { + throw new CommandException("commands.entitydata.failed", new Object[] {nbttagcompound.toString()}); + } + else + { + entity.readFromNBT(nbttagcompound); + notifyCommandListener(sender, this, "commands.entitydata.success", new Object[] {nbttagcompound.toString()}); + } + } + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandException.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandException.java new file mode 100644 index 0000000..8af02c2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandException.java @@ -0,0 +1,22 @@ +package net.minecraft.command; + +public class CommandException extends Exception +{ + private final Object[] errorObjects; + + public CommandException(String message, Object... objects) + { + super(message); + this.errorObjects = objects; + } + + public Object[] getErrorObjects() + { + return this.errorObjects; + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandExecuteAt.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandExecuteAt.java new file mode 100644 index 0000000..b97bcc3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandExecuteAt.java @@ -0,0 +1,137 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class CommandExecuteAt extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "execute"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.execute.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 5) + { + throw new WrongUsageException("commands.execute.usage", new Object[0]); + } + else + { + Entity entity = getEntity(server, sender, args[0], Entity.class); + double d0 = parseDouble(entity.posX, args[1], false); + double d1 = parseDouble(entity.posY, args[2], false); + double d2 = parseDouble(entity.posZ, args[3], false); + new BlockPos(d0, d1, d2); + int i = 4; + + if ("detect".equals(args[4]) && args.length > 10) + { + World world = entity.getEntityWorld(); + double d3 = parseDouble(d0, args[5], false); + double d4 = parseDouble(d1, args[6], false); + double d5 = parseDouble(d2, args[7], false); + Block block = getBlockByText(sender, args[8]); + BlockPos blockpos = new BlockPos(d3, d4, d5); + + if (!world.isBlockLoaded(blockpos)) + { + throw new CommandException("commands.execute.failed", new Object[] {"detect", entity.getName()}); + } + + IBlockState iblockstate = world.getBlockState(blockpos); + + if (iblockstate.getBlock() != block) + { + throw new CommandException("commands.execute.failed", new Object[] {"detect", entity.getName()}); + } + + if (!CommandBase.convertArgToBlockStatePredicate(block, args[9]).apply(iblockstate)) + { + throw new CommandException("commands.execute.failed", new Object[] {"detect", entity.getName()}); + } + + i = 10; + } + + String s = buildString(args, i); + ICommandSender icommandsender = CommandSenderWrapper.create(sender).withEntity(entity, new Vec3d(d0, d1, d2)).withSendCommandFeedback(server.worlds[0].getGameRules().getBoolean("commandBlockOutput")); + ICommandManager icommandmanager = server.getCommandManager(); + + try + { + int j = icommandmanager.executeCommand(icommandsender, s); + + if (j < 1) + { + throw new CommandException("commands.execute.allInvocationsFailed", new Object[] {s}); + } + } + catch (Throwable var23) + { + throw new CommandException("commands.execute.failed", new Object[] {s, entity.getName()}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else if (args.length > 1 && args.length <= 4) + { + return getTabCompletionCoordinate(args, 1, targetPos); + } + else if (args.length > 5 && args.length <= 8 && "detect".equals(args[4])) + { + return getTabCompletionCoordinate(args, 5, targetPos); + } + else + { + return args.length == 9 && "detect".equals(args[4]) ? getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandFill.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandFill.java new file mode 100644 index 0000000..76a27e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandFill.java @@ -0,0 +1,238 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CommandFill extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "fill"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.fill.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 7) + { + throw new WrongUsageException("commands.fill.usage", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 0, false); + BlockPos blockpos1 = parseBlockPos(sender, args, 3, false); + Block block = CommandBase.getBlockByText(sender, args[6]); + IBlockState iblockstate; + + if (args.length >= 8) + { + iblockstate = convertArgToBlockState(block, args[7]); + } + else + { + iblockstate = block.getDefaultState(); + } + + BlockPos blockpos2 = new BlockPos(Math.min(blockpos.getX(), blockpos1.getX()), Math.min(blockpos.getY(), blockpos1.getY()), Math.min(blockpos.getZ(), blockpos1.getZ())); + BlockPos blockpos3 = new BlockPos(Math.max(blockpos.getX(), blockpos1.getX()), Math.max(blockpos.getY(), blockpos1.getY()), Math.max(blockpos.getZ(), blockpos1.getZ())); + int i = (blockpos3.getX() - blockpos2.getX() + 1) * (blockpos3.getY() - blockpos2.getY() + 1) * (blockpos3.getZ() - blockpos2.getZ() + 1); + + if (i > 32768) + { + throw new CommandException("commands.fill.tooManyBlocks", new Object[] {i, Integer.valueOf(32768)}); + } + else if (blockpos2.getY() >= 0 && blockpos3.getY() < 256) + { + World world = sender.getEntityWorld(); + + for (int j = blockpos2.getZ(); j <= blockpos3.getZ(); j += 16) + { + for (int k = blockpos2.getX(); k <= blockpos3.getX(); k += 16) + { + if (!world.isBlockLoaded(new BlockPos(k, blockpos3.getY() - blockpos2.getY(), j))) + { + throw new CommandException("commands.fill.outOfWorld", new Object[0]); + } + } + } + + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (args.length >= 10 && block.hasTileEntity(iblockstate)) + { + String s = buildString(args, 9); + + try + { + nbttagcompound = JsonToNBT.getTagFromJson(s); + flag = true; + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.fill.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + List list = Lists.newArrayList(); + i = 0; + + for (int l = blockpos2.getZ(); l <= blockpos3.getZ(); ++l) + { + for (int i1 = blockpos2.getY(); i1 <= blockpos3.getY(); ++i1) + { + for (int j1 = blockpos2.getX(); j1 <= blockpos3.getX(); ++j1) + { + BlockPos blockpos4 = new BlockPos(j1, i1, l); + + if (args.length >= 9) + { + if (!"outline".equals(args[8]) && !"hollow".equals(args[8])) + { + if ("destroy".equals(args[8])) + { + world.destroyBlock(blockpos4, true); + } + else if ("keep".equals(args[8])) + { + if (!world.isAirBlock(blockpos4)) + { + continue; + } + } + else if ("replace".equals(args[8]) && !block.hasTileEntity(iblockstate) && args.length > 9) + { + Block block1 = CommandBase.getBlockByText(sender, args[9]); + + if (world.getBlockState(blockpos4).getBlock() != block1 || args.length > 10 && !"-1".equals(args[10]) && !"*".equals(args[10]) && !CommandBase.convertArgToBlockStatePredicate(block1, args[10]).apply(world.getBlockState(blockpos4))) + { + continue; + } + } + } + else if (j1 != blockpos2.getX() && j1 != blockpos3.getX() && i1 != blockpos2.getY() && i1 != blockpos3.getY() && l != blockpos2.getZ() && l != blockpos3.getZ()) + { + if ("hollow".equals(args[8])) + { + world.setBlockState(blockpos4, Blocks.AIR.getDefaultState(), 2); + list.add(blockpos4); + } + + continue; + } + } + + TileEntity tileentity1 = world.getTileEntity(blockpos4); + + if (tileentity1 != null && tileentity1 instanceof IInventory) + { + ((IInventory)tileentity1).clear(); + } + + if (world.setBlockState(blockpos4, iblockstate, 2)) + { + list.add(blockpos4); + ++i; + + if (flag) + { + TileEntity tileentity = world.getTileEntity(blockpos4); + + if (tileentity != null) + { + nbttagcompound.setInteger("x", blockpos4.getX()); + nbttagcompound.setInteger("y", blockpos4.getY()); + nbttagcompound.setInteger("z", blockpos4.getZ()); + tileentity.readFromNBT(nbttagcompound); + } + } + } + } + } + } + + for (BlockPos blockpos5 : list) + { + Block block2 = world.getBlockState(blockpos5).getBlock(); + world.notifyNeighborsRespectDebug(blockpos5, block2, false); + } + + if (i <= 0) + { + throw new CommandException("commands.fill.failed", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, i); + notifyCommandListener(sender, this, "commands.fill.success", new Object[] {i}); + } + } + else + { + throw new CommandException("commands.fill.outOfWorld", new Object[0]); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length > 0 && args.length <= 3) + { + return getTabCompletionCoordinate(args, 0, targetPos); + } + else if (args.length > 3 && args.length <= 6) + { + return getTabCompletionCoordinate(args, 3, targetPos); + } + else if (args.length == 7) + { + return getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()); + } + else if (args.length == 9) + { + return getListOfStringsMatchingLastWord(args, new String[] {"replace", "destroy", "keep", "hollow", "outline"}); + } + else + { + return args.length == 10 && "replace".equals(args[8]) ? getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandFunction.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandFunction.java new file mode 100644 index 0000000..627a790 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandFunction.java @@ -0,0 +1,116 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; + +public class CommandFunction extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "function"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.function.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length != 1 && args.length != 3) + { + throw new WrongUsageException("commands.function.usage", new Object[0]); + } + else + { + ResourceLocation resourcelocation = new ResourceLocation(args[0]); + FunctionObject functionobject = server.getFunctionManager().getFunction(resourcelocation); + + if (functionobject == null) + { + throw new CommandException("commands.function.unknown", new Object[] {resourcelocation}); + } + else + { + if (args.length == 3) + { + String s = args[1]; + boolean flag; + + if ("if".equals(s)) + { + flag = true; + } + else + { + if (!"unless".equals(s)) + { + throw new WrongUsageException("commands.function.usage", new Object[0]); + } + + flag = false; + } + + boolean flag1 = false; + + try + { + flag1 = !getEntityList(server, sender, args[2]).isEmpty(); + } + catch (EntityNotFoundException var10) + { + ; + } + + if (flag != flag1) + { + throw new CommandException("commands.function.skipped", new Object[] {resourcelocation}); + } + } + + int i = server.getFunctionManager().execute(functionobject, CommandSenderWrapper.create(sender).computePositionVector().withPermissionLevel(2).withSendCommandFeedback(false)); + notifyCommandListener(sender, this, "commands.function.success", new Object[] {resourcelocation, i}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getFunctionManager().getFunctions().keySet()); + } + else if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, new String[] {"if", "unless"}); + } + else + { + return args.length == 3 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandGameMode.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandGameMode.java new file mode 100644 index 0000000..7db1e10 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandGameMode.java @@ -0,0 +1,103 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldSettings; + +public class CommandGameMode extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "gamemode"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.gamemode.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length <= 0) + { + throw new WrongUsageException("commands.gamemode.usage", new Object[0]); + } + else + { + GameType gametype = this.getGameModeFromCommand(sender, args[0]); + EntityPlayer entityplayer = args.length >= 2 ? getPlayer(server, sender, args[1]) : getCommandSenderAsPlayer(sender); + entityplayer.setGameType(gametype); + ITextComponent itextcomponent = new TextComponentTranslation("gameMode." + gametype.getName(), new Object[0]); + + if (sender.getEntityWorld().getGameRules().getBoolean("sendCommandFeedback")) + { + entityplayer.sendMessage(new TextComponentTranslation("gameMode.changed", new Object[] {itextcomponent})); + } + + if (entityplayer == sender) + { + notifyCommandListener(sender, this, 1, "commands.gamemode.success.self", new Object[] {itextcomponent}); + } + else + { + notifyCommandListener(sender, this, 1, "commands.gamemode.success.other", new Object[] {entityplayer.getName(), itextcomponent}); + } + } + } + + /** + * Gets the Game Mode specified in the command. + */ + protected GameType getGameModeFromCommand(ICommandSender sender, String gameModeString) throws CommandException, NumberInvalidException + { + GameType gametype = GameType.parseGameTypeWithDefault(gameModeString, GameType.NOT_SET); + return gametype == GameType.NOT_SET ? WorldSettings.getGameTypeById(parseInt(gameModeString, 0, GameType.values().length - 2)) : gametype; + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"survival", "creative", "adventure", "spectator"}); + } + else + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandGameRule.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandGameRule.java new file mode 100644 index 0000000..4b8bce1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandGameRule.java @@ -0,0 +1,127 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketEntityStatus; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.GameRules; + +public class CommandGameRule extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "gamerule"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.gamerule.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + GameRules gamerules = this.getOverWorldGameRules(server); + String s = args.length > 0 ? args[0] : ""; + String s1 = args.length > 1 ? buildString(args, 1) : ""; + + switch (args.length) + { + case 0: + sender.sendMessage(new TextComponentString(joinNiceString(gamerules.getRules()))); + break; + case 1: + + if (!gamerules.hasRule(s)) + { + throw new CommandException("commands.gamerule.norule", new Object[] {s}); + } + + String s2 = gamerules.getString(s); + sender.sendMessage((new TextComponentString(s)).appendText(" = ").appendText(s2)); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, gamerules.getInt(s)); + break; + default: + + if (gamerules.areSameType(s, GameRules.ValueType.BOOLEAN_VALUE) && !"true".equals(s1) && !"false".equals(s1)) + { + throw new CommandException("commands.generic.boolean.invalid", new Object[] {s1}); + } + + gamerules.setOrCreateGameRule(s, s1); + notifyGameRuleChange(gamerules, s, server); + notifyCommandListener(sender, this, "commands.gamerule.success", new Object[] {s, s1}); + } + } + + public static void notifyGameRuleChange(GameRules rules, String p_184898_1_, MinecraftServer server) + { + if ("reducedDebugInfo".equals(p_184898_1_)) + { + byte b0 = (byte)(rules.getBoolean(p_184898_1_) ? 22 : 23); + + for (EntityPlayerMP entityplayermp : server.getPlayerList().getPlayers()) + { + entityplayermp.connection.sendPacket(new SPacketEntityStatus(entityplayermp, b0)); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, this.getOverWorldGameRules(server).getRules()); + } + else + { + if (args.length == 2) + { + GameRules gamerules = this.getOverWorldGameRules(server); + + if (gamerules.areSameType(args[0], GameRules.ValueType.BOOLEAN_VALUE)) + { + return getListOfStringsMatchingLastWord(args, new String[] {"true", "false"}); + } + + if (gamerules.areSameType(args[0], GameRules.ValueType.FUNCTION)) + { + return getListOfStringsMatchingLastWord(args, server.getFunctionManager().getFunctions().keySet()); + } + } + + return Collections.emptyList(); + } + } + + /** + * Get the game rules for the overworld + */ + private GameRules getOverWorldGameRules(MinecraftServer server) + { + return server.getWorld(0).getGameRules(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandGive.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandGive.java new file mode 100644 index 0000000..290cd77 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandGive.java @@ -0,0 +1,131 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; + +public class CommandGive extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "give"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.give.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.give.usage", new Object[0]); + } + else + { + EntityPlayer entityplayer = getPlayer(server, sender, args[0]); + Item item = getItemByText(sender, args[1]); + int i = args.length >= 3 ? parseInt(args[2], 1, item.getItemStackLimit()) : 1; + int j = args.length >= 4 ? parseInt(args[3]) : 0; + ItemStack itemstack = new ItemStack(item, i, j); + + if (args.length >= 5) + { + String s = buildString(args, 4); + + try + { + itemstack.setTagCompound(JsonToNBT.getTagFromJson(s)); + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.give.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + boolean flag = entityplayer.inventory.addItemStackToInventory(itemstack); + + if (flag) + { + entityplayer.world.playSound((EntityPlayer)null, entityplayer.posX, entityplayer.posY, entityplayer.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, ((entityplayer.getRNG().nextFloat() - entityplayer.getRNG().nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityplayer.inventoryContainer.detectAndSendChanges(); + } + + if (flag && itemstack.isEmpty()) + { + itemstack.setCount(1); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, i); + EntityItem entityitem1 = entityplayer.dropItem(itemstack, false); + + if (entityitem1 != null) + { + entityitem1.makeFakeItem(); + } + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, i - itemstack.getCount()); + EntityItem entityitem = entityplayer.dropItem(itemstack, false); + + if (entityitem != null) + { + entityitem.setNoPickupDelay(); + entityitem.setOwner(entityplayer.getName()); + } + } + + notifyCommandListener(sender, this, "commands.give.success", new Object[] {itemstack.getTextComponent(), i, entityplayer.getName()}); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, Item.REGISTRY.getKeys()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandHandler.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandHandler.java new file mode 100644 index 0000000..1f42714 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandHandler.java @@ -0,0 +1,273 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class CommandHandler implements ICommandManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** Map of Strings to the ICommand objects they represent */ + private final Map commandMap = Maps.newHashMap(); + /** The set of ICommand objects currently loaded. */ + private final Set commandSet = Sets.newHashSet(); + + /** + * Attempt to execute a command. This method should return the number of times that the command was executed. If the + * command does not exist or if the player does not have permission, 0 will be returned. A number greater than 1 can + * be returned if a player selector is used. + */ + public int executeCommand(ICommandSender sender, String rawCommand) + { + rawCommand = rawCommand.trim(); + + if (rawCommand.startsWith("/")) + { + rawCommand = rawCommand.substring(1); + } + + String[] astring = rawCommand.split(" "); + String s = astring[0]; + astring = dropFirstString(astring); + ICommand icommand = this.commandMap.get(s); + int i = 0; + + try + { + int j = this.getUsernameIndex(icommand, astring); + + if (icommand == null) + { + TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation("commands.generic.notFound", new Object[0]); + textcomponenttranslation1.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation1); + } + else if (icommand.checkPermission(this.getServer(), sender)) + { + net.minecraftforge.event.CommandEvent event = new net.minecraftforge.event.CommandEvent(icommand, sender, astring); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) + { + if (event.getException() != null) + { + com.google.common.base.Throwables.throwIfUnchecked(event.getException()); + } + return 1; + } + if (event.getParameters() != null) astring = event.getParameters(); + + if (j > -1) + { + List list = EntitySelector.matchEntities(sender, astring[j], Entity.class); + String s1 = astring[j]; + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, list.size()); + + if (list.isEmpty()) + { + throw new PlayerNotFoundException("commands.generic.selector.notFound", new Object[] {astring[j]}); + } + + for (Entity entity : list) + { + astring[j] = entity.getCachedUniqueIdString(); + + if (this.tryExecute(sender, astring, icommand, rawCommand)) + { + ++i; + } + } + + astring[j] = s1; + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, 1); + + if (this.tryExecute(sender, astring, icommand, rawCommand)) + { + ++i; + } + } + } + else + { + TextComponentTranslation textcomponenttranslation2 = new TextComponentTranslation("commands.generic.permission", new Object[0]); + textcomponenttranslation2.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation2); + } + } + catch (CommandException commandexception) + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation(commandexception.getMessage(), commandexception.getErrorObjects()); + textcomponenttranslation.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation); + } + + sender.setCommandStat(CommandResultStats.Type.SUCCESS_COUNT, i); + return i; + } + + protected boolean tryExecute(ICommandSender sender, String[] args, ICommand command, String input) + { + try + { + command.execute(this.getServer(), sender, args); + return true; + } + catch (WrongUsageException wrongusageexception) + { + TextComponentTranslation textcomponenttranslation2 = new TextComponentTranslation("commands.generic.usage", new Object[] {new TextComponentTranslation(wrongusageexception.getMessage(), wrongusageexception.getErrorObjects())}); + textcomponenttranslation2.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation2); + } + catch (CommandException commandexception) + { + TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation(commandexception.getMessage(), commandexception.getErrorObjects()); + textcomponenttranslation1.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation1); + } + catch (Throwable throwable) + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.generic.exception", new Object[0]); + textcomponenttranslation.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation); + LOGGER.warn("Couldn't process command: " + input, throwable); + } + + return false; + } + + protected abstract MinecraftServer getServer(); + + /** + * adds the command and any aliases it has to the internal map of available commands + */ + public ICommand registerCommand(ICommand command) + { + this.commandMap.put(command.getName(), command); + this.commandSet.add(command); + + for (String s : command.getAliases()) + { + ICommand icommand = this.commandMap.get(s); + + if (icommand == null || !icommand.getName().equals(s)) + { + this.commandMap.put(s, command); + } + } + + return command; + } + + /** + * creates a new array and sets elements 0..n-2 to be 0..n-1 of the input (n elements) + */ + private static String[] dropFirstString(String[] input) + { + String[] astring = new String[input.length - 1]; + System.arraycopy(input, 1, astring, 0, input.length - 1); + return astring; + } + + /** + * Get a list of possible completion options for when the TAB key is pressed. This can be a list of commands if no + * command is specified or a partial command is specified. It could also be a list of arguments for the command that + * is specified. + */ + public List getTabCompletions(ICommandSender sender, String input, @Nullable BlockPos pos) + { + String[] astring = input.split(" ", -1); + String s = astring[0]; + + if (astring.length == 1) + { + List list = Lists.newArrayList(); + + for (Entry entry : this.commandMap.entrySet()) + { + if (CommandBase.doesStringStartWith(s, entry.getKey()) && ((ICommand)entry.getValue()).checkPermission(this.getServer(), sender)) + { + list.add(entry.getKey()); + } + } + + return list; + } + else + { + if (astring.length > 1) + { + ICommand icommand = this.commandMap.get(s); + + if (icommand != null && icommand.checkPermission(this.getServer(), sender)) + { + return icommand.getTabCompletions(this.getServer(), sender, dropFirstString(astring), pos); + } + } + + return Collections.emptyList(); + } + } + + /** + * Get a list of commands that the given command sender has access to execute. + */ + public List getPossibleCommands(ICommandSender sender) + { + List list = Lists.newArrayList(); + + for (ICommand icommand : this.commandSet) + { + if (icommand.checkPermission(this.getServer(), sender)) + { + list.add(icommand); + } + } + + return list; + } + + /** + * Get a Map of all the name to command pairs stored in this command manager. + */ + public Map getCommands() + { + return this.commandMap; + } + + /** + * Return a command's first parameter index containing a valid username. + */ + private int getUsernameIndex(ICommand command, String[] args) throws CommandException + { + if (command == null) + { + return -1; + } + else + { + for (int i = 0; i < args.length; ++i) + { + if (command.isUsernameIndex(args, i) && EntitySelector.matchesMultiplePlayers(args[i])) + { + return i; + } + } + + return -1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandHelp.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandHelp.java new file mode 100644 index 0000000..bbd5e02 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandHelp.java @@ -0,0 +1,143 @@ +package net.minecraft.command; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.ClickEvent; + +public class CommandHelp extends CommandBase +{ + private static final String[] SEARGE_SAYS = new String[] {"Yolo", "Ask for help on twitter", "/deop @p", "Scoreboard deleted, commands blocked", "Contact helpdesk for help", "/testfornoob @p", "/trigger warning", "Oh my god, it's full of stats", "/kill @p[name=!Searge]", "Have you tried turning it off and on again?", "Sorry, no help today"}; + private final Random rand = new Random(); + + /** + * Gets the name of the command + */ + public String getName() + { + return "help"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 0; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.help.usage"; + } + + /** + * Get a list of aliases for this command. Never return null! + */ + public List getAliases() + { + return Arrays.asList("?"); + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (sender instanceof CommandBlockBaseLogic) + { + sender.sendMessage((new TextComponentString("Searge says: ")).appendText(SEARGE_SAYS[this.rand.nextInt(SEARGE_SAYS.length) % SEARGE_SAYS.length])); + } + else + { + List list = this.getSortedPossibleCommands(sender, server); + int i = 7; + int j = (list.size() - 1) / 7; + int k = 0; + + try + { + k = args.length == 0 ? 0 : parseInt(args[0], 1, j + 1) - 1; + } + catch (NumberInvalidException numberinvalidexception) + { + Map map = this.getCommandMap(server); + ICommand icommand = map.get(args[0]); + + if (icommand != null) + { + throw new WrongUsageException(icommand.getUsage(sender), new Object[0]); + } + + if (MathHelper.getInt(args[0], -1) == -1 && MathHelper.getInt(args[0], -2) == -2) + { + throw new CommandNotFoundException(); + } + + throw numberinvalidexception; + } + + int l = Math.min((k + 1) * 7, list.size()); + TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation("commands.help.header", new Object[] {k + 1, j + 1}); + textcomponenttranslation1.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation1); + + for (int i1 = k * 7; i1 < l; ++i1) + { + ICommand icommand1 = list.get(i1); + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation(icommand1.getUsage(sender), new Object[0]); + textcomponenttranslation.getStyle().setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/" + icommand1.getName() + " ")); + sender.sendMessage(textcomponenttranslation); + } + + if (k == 0) + { + TextComponentTranslation textcomponenttranslation2 = new TextComponentTranslation("commands.help.footer", new Object[0]); + textcomponenttranslation2.getStyle().setColor(TextFormatting.GREEN); + sender.sendMessage(textcomponenttranslation2); + } + } + } + + protected List getSortedPossibleCommands(ICommandSender sender, MinecraftServer server) + { + List list = server.getCommandManager().getPossibleCommands(sender); + Collections.sort(list); + return list; + } + + protected Map getCommandMap(MinecraftServer server) + { + return server.getCommandManager().getCommands(); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + Set set = this.getCommandMap(server).keySet(); + return getListOfStringsMatchingLastWord(args, (String[])set.toArray(new String[set.size()])); + } + else + { + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandKill.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandKill.java new file mode 100644 index 0000000..dbcee96 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandKill.java @@ -0,0 +1,71 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandKill extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "kill"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.kill.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length == 0) + { + EntityPlayer entityplayer = getCommandSenderAsPlayer(sender); + entityplayer.onKillCommand(); + notifyCommandListener(sender, this, "commands.kill.successful", new Object[] {entityplayer.getDisplayName()}); + } + else + { + Entity entity = getEntity(server, sender, args[0]); + entity.onKillCommand(); + notifyCommandListener(sender, this, "commands.kill.successful", new Object[] {entity.getDisplayName()}); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandLocate.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandLocate.java new file mode 100644 index 0000000..d74c1db --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandLocate.java @@ -0,0 +1,68 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandLocate extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "locate"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.locate.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length != 1) + { + throw new WrongUsageException("commands.locate.usage", new Object[0]); + } + else + { + String s = args[0]; + BlockPos blockpos = sender.getEntityWorld().findNearestStructure(s, sender.getPosition(), false); + + if (blockpos != null) + { + sender.sendMessage(new TextComponentTranslation("commands.locate.success", new Object[] {s, blockpos.getX(), blockpos.getZ()})); + } + else + { + throw new CommandException("commands.locate.failure", new Object[] {s}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, new String[] {"Stronghold", "Monument", "Village", "Mansion", "EndCity", "Fortress", "Temple", "Mineshaft"}) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandNotFoundException.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandNotFoundException.java new file mode 100644 index 0000000..a441f20 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandNotFoundException.java @@ -0,0 +1,19 @@ +package net.minecraft.command; + +public class CommandNotFoundException extends CommandException +{ + public CommandNotFoundException() + { + this("commands.generic.notFound"); + } + + public CommandNotFoundException(String message, Object... args) + { + super(message, args); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandParticle.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandParticle.java new file mode 100644 index 0000000..2dd87d4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandParticle.java @@ -0,0 +1,162 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class CommandParticle extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "particle"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.particle.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 8) + { + throw new WrongUsageException("commands.particle.usage", new Object[0]); + } + else + { + boolean flag = false; + EnumParticleTypes enumparticletypes = EnumParticleTypes.getByName(args[0]); + + if (enumparticletypes == null) + { + throw new CommandException("commands.particle.notFound", new Object[] {args[0]}); + } + else + { + String s = args[0]; + Vec3d vec3d = sender.getPositionVector(); + double d0 = (double)((float)parseDouble(vec3d.x, args[1], true)); + double d1 = (double)((float)parseDouble(vec3d.y, args[2], true)); + double d2 = (double)((float)parseDouble(vec3d.z, args[3], true)); + double d3 = (double)((float)parseDouble(args[4])); + double d4 = (double)((float)parseDouble(args[5])); + double d5 = (double)((float)parseDouble(args[6])); + double d6 = (double)((float)parseDouble(args[7])); + int i = 0; + + if (args.length > 8) + { + i = parseInt(args[8], 0); + } + + boolean flag1 = false; + + if (args.length > 9 && "force".equals(args[9])) + { + flag1 = true; + } + + EntityPlayerMP entityplayermp; + + if (args.length > 10) + { + entityplayermp = getPlayer(server, sender, args[10]); + } + else + { + entityplayermp = null; + } + + int[] aint = new int[enumparticletypes.getArgumentCount()]; + + for (int j = 0; j < aint.length; ++j) + { + if (args.length > 11 + j) + { + try + { + aint[j] = Integer.parseInt(args[11 + j]); + } + catch (NumberFormatException var28) + { + throw new CommandException("commands.particle.invalidParam", new Object[] {args[11 + j]}); + } + } + } + + World world = sender.getEntityWorld(); + + if (world instanceof WorldServer) + { + WorldServer worldserver = (WorldServer)world; + + if (entityplayermp == null) + { + worldserver.spawnParticle(enumparticletypes, flag1, d0, d1, d2, i, d3, d4, d5, d6, aint); + } + else + { + worldserver.spawnParticle(entityplayermp, enumparticletypes, flag1, d0, d1, d2, i, d3, d4, d5, d6, aint); + } + + notifyCommandListener(sender, this, "commands.particle.success", new Object[] {s, Math.max(i, 1)}); + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, EnumParticleTypes.getParticleNames()); + } + else if (args.length > 1 && args.length <= 4) + { + return getTabCompletionCoordinate(args, 1, targetPos); + } + else if (args.length == 10) + { + return getListOfStringsMatchingLastWord(args, new String[] {"normal", "force"}); + } + else + { + return args.length == 11 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 10; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandPlaySound.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandPlaySound.java new file mode 100644 index 0000000..08d0f57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandPlaySound.java @@ -0,0 +1,131 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketCustomSound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class CommandPlaySound extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "playsound"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.playsound.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException(this.getUsage(sender), new Object[0]); + } + else + { + int i = 0; + String s = args[i++]; + String s1 = args[i++]; + SoundCategory soundcategory = SoundCategory.getByName(s1); + + if (soundcategory == null) + { + throw new CommandException("commands.playsound.unknownSoundSource", new Object[] {s1}); + } + else + { + EntityPlayerMP entityplayermp = getPlayer(server, sender, args[i++]); + Vec3d vec3d = sender.getPositionVector(); + double d0 = args.length > i ? parseDouble(vec3d.x, args[i++], true) : vec3d.x; + double d1 = args.length > i ? parseDouble(vec3d.y, args[i++], 0, 0, false) : vec3d.y; + double d2 = args.length > i ? parseDouble(vec3d.z, args[i++], true) : vec3d.z; + double d3 = args.length > i ? parseDouble(args[i++], 0.0D, 3.4028234663852886E38D) : 1.0D; + double d4 = args.length > i ? parseDouble(args[i++], 0.0D, 2.0D) : 1.0D; + double d5 = args.length > i ? parseDouble(args[i], 0.0D, 1.0D) : 0.0D; + double d6 = d3 > 1.0D ? d3 * 16.0D : 16.0D; + double d7 = entityplayermp.getDistance(d0, d1, d2); + + if (d7 > d6) + { + if (d5 <= 0.0D) + { + throw new CommandException("commands.playsound.playerTooFar", new Object[] {entityplayermp.getName()}); + } + + double d8 = d0 - entityplayermp.posX; + double d9 = d1 - entityplayermp.posY; + double d10 = d2 - entityplayermp.posZ; + double d11 = Math.sqrt(d8 * d8 + d9 * d9 + d10 * d10); + + if (d11 > 0.0D) + { + d0 = entityplayermp.posX + d8 / d11 * 2.0D; + d1 = entityplayermp.posY + d9 / d11 * 2.0D; + d2 = entityplayermp.posZ + d10 / d11 * 2.0D; + } + + d3 = d5; + } + + entityplayermp.connection.sendPacket(new SPacketCustomSound(s, soundcategory, d0, d1, d2, (float)d3, (float)d4)); + notifyCommandListener(sender, this, "commands.playsound.success", new Object[] {s, entityplayermp.getName()}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, SoundEvent.REGISTRY.getKeys()); + } + else if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, SoundCategory.getSoundCategoryNames()); + } + else if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length > 3 && args.length <= 6 ? getTabCompletionCoordinate(args, 3, targetPos) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandReload.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandReload.java new file mode 100644 index 0000000..cc2fdee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandReload.java @@ -0,0 +1,46 @@ +package net.minecraft.command; + +import net.minecraft.server.MinecraftServer; + +public class CommandReload extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "reload"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.reload.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 0) + { + throw new WrongUsageException("commands.reload.usage", new Object[0]); + } + else + { + server.reload(); + notifyCommandListener(sender, this, "commands.reload.success", new Object[0]); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandReplaceItem.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandReplaceItem.java new file mode 100644 index 0000000..bcbc1cb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandReplaceItem.java @@ -0,0 +1,271 @@ +package net.minecraft.command; + +import com.google.common.collect.Maps; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CommandReplaceItem extends CommandBase +{ + private static final Map SHORTCUTS = Maps.newHashMap(); + + /** + * Gets the name of the command + */ + public String getName() + { + return "replaceitem"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.replaceitem.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.replaceitem.usage", new Object[0]); + } + else + { + boolean flag; + + if ("entity".equals(args[0])) + { + flag = false; + } + else + { + if (!"block".equals(args[0])) + { + throw new WrongUsageException("commands.replaceitem.usage", new Object[0]); + } + + flag = true; + } + + int i; + + if (flag) + { + if (args.length < 6) + { + throw new WrongUsageException("commands.replaceitem.block.usage", new Object[0]); + } + + i = 4; + } + else + { + if (args.length < 4) + { + throw new WrongUsageException("commands.replaceitem.entity.usage", new Object[0]); + } + + i = 2; + } + + String s = args[i]; + int j = this.getSlotForShortcut(args[i++]); + Item item; + + try + { + item = getItemByText(sender, args[i]); + } + catch (NumberInvalidException numberinvalidexception) + { + if (Block.getBlockFromName(args[i]) != Blocks.AIR) + { + throw numberinvalidexception; + } + + item = null; + } + + ++i; + int k = args.length > i ? parseInt(args[i++], 1, item.getItemStackLimit()) : 1; + int l = args.length > i ? parseInt(args[i++]) : 0; + ItemStack itemstack = new ItemStack(item, k, l); + + if (args.length > i) + { + String s1 = buildString(args, i); + + try + { + itemstack.setTagCompound(JsonToNBT.getTagFromJson(s1)); + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.replaceitem.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + if (flag) + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 1, false); + World world = sender.getEntityWorld(); + TileEntity tileentity = world.getTileEntity(blockpos); + + if (tileentity == null || !(tileentity instanceof IInventory)) + { + throw new CommandException("commands.replaceitem.noContainer", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + + IInventory iinventory = (IInventory)tileentity; + + if (j >= 0 && j < iinventory.getSizeInventory()) + { + iinventory.setInventorySlotContents(j, itemstack); + } + } + else + { + Entity entity = getEntity(server, sender, args[1]); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, 0); + + if (entity instanceof EntityPlayer) + { + ((EntityPlayer)entity).inventoryContainer.detectAndSendChanges(); + } + + if (!entity.replaceItemInInventory(j, itemstack)) + { + throw new CommandException("commands.replaceitem.failed", new Object[] {s, k, itemstack.isEmpty() ? "Air" : itemstack.getTextComponent()}); + } + + if (entity instanceof EntityPlayer) + { + ((EntityPlayer)entity).inventoryContainer.detectAndSendChanges(); + } + } + + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ITEMS, k); + notifyCommandListener(sender, this, "commands.replaceitem.success", new Object[] {s, k, itemstack.isEmpty() ? "Air" : itemstack.getTextComponent()}); + } + } + + private int getSlotForShortcut(String shortcut) throws CommandException + { + if (!SHORTCUTS.containsKey(shortcut)) + { + throw new CommandException("commands.generic.parameter.invalid", new Object[] {shortcut}); + } + else + { + return ((Integer)SHORTCUTS.get(shortcut)).intValue(); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"entity", "block"}); + } + else if (args.length == 2 && "entity".equals(args[0])) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else if (args.length >= 2 && args.length <= 4 && "block".equals(args[0])) + { + return getTabCompletionCoordinate(args, 1, targetPos); + } + else if ((args.length != 3 || !"entity".equals(args[0])) && (args.length != 5 || !"block".equals(args[0]))) + { + return (args.length != 4 || !"entity".equals(args[0])) && (args.length != 6 || !"block".equals(args[0])) ? Collections.emptyList() : getListOfStringsMatchingLastWord(args, Item.REGISTRY.getKeys()); + } + else + { + return getListOfStringsMatchingLastWord(args, SHORTCUTS.keySet()); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return args.length > 0 && "entity".equals(args[0]) && index == 1; + } + + static + { + for (int i = 0; i < 54; ++i) + { + SHORTCUTS.put("slot.container." + i, Integer.valueOf(i)); + } + + for (int j = 0; j < 9; ++j) + { + SHORTCUTS.put("slot.hotbar." + j, Integer.valueOf(j)); + } + + for (int k = 0; k < 27; ++k) + { + SHORTCUTS.put("slot.inventory." + k, Integer.valueOf(9 + k)); + } + + for (int l = 0; l < 27; ++l) + { + SHORTCUTS.put("slot.enderchest." + l, Integer.valueOf(200 + l)); + } + + for (int i1 = 0; i1 < 8; ++i1) + { + SHORTCUTS.put("slot.villager." + i1, Integer.valueOf(300 + i1)); + } + + for (int j1 = 0; j1 < 15; ++j1) + { + SHORTCUTS.put("slot.horse." + j1, Integer.valueOf(500 + j1)); + } + + SHORTCUTS.put("slot.weapon", Integer.valueOf(98)); + SHORTCUTS.put("slot.weapon.mainhand", Integer.valueOf(98)); + SHORTCUTS.put("slot.weapon.offhand", Integer.valueOf(99)); + SHORTCUTS.put("slot.armor.head", Integer.valueOf(100 + EntityEquipmentSlot.HEAD.getIndex())); + SHORTCUTS.put("slot.armor.chest", Integer.valueOf(100 + EntityEquipmentSlot.CHEST.getIndex())); + SHORTCUTS.put("slot.armor.legs", Integer.valueOf(100 + EntityEquipmentSlot.LEGS.getIndex())); + SHORTCUTS.put("slot.armor.feet", Integer.valueOf(100 + EntityEquipmentSlot.FEET.getIndex())); + SHORTCUTS.put("slot.horse.saddle", Integer.valueOf(400)); + SHORTCUTS.put("slot.horse.armor", Integer.valueOf(401)); + SHORTCUTS.put("slot.horse.chest", Integer.valueOf(499)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandResultStats.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandResultStats.java new file mode 100644 index 0000000..ebc1122 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandResultStats.java @@ -0,0 +1,319 @@ +package net.minecraft.command; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; + +public class CommandResultStats +{ + /** The number of result command result types that are possible. */ + private static final int NUM_RESULT_TYPES = CommandResultStats.Type.values().length; + private static final String[] STRING_RESULT_TYPES = new String[NUM_RESULT_TYPES]; + /** List of entityID who set a stat, username for a player, UUID for all entities */ + private String[] entitiesID; + /** List of all the Objectives names */ + private String[] objectives; + + public CommandResultStats() + { + this.entitiesID = STRING_RESULT_TYPES; + this.objectives = STRING_RESULT_TYPES; + } + + public void setCommandStatForSender(MinecraftServer server, final ICommandSender sender, CommandResultStats.Type typeIn, int p_184932_4_) + { + String s = this.entitiesID[typeIn.getTypeID()]; + + if (s != null) + { + ICommandSender icommandsender = new ICommandSender() + { + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return sender.getName(); + } + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return sender.getDisplayName(); + } + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + sender.sendMessage(component); + } + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return true; + } + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the + * world, return the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return sender.getPosition(); + } + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, + * return 0.0D, 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return sender.getPositionVector(); + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the + * world, return the overworld + */ + public World getEntityWorld() + { + return sender.getEntityWorld(); + } + /** + * Returns the entity associated with the command sender. MAY BE NULL! + */ + public Entity getCommandSenderEntity() + { + return sender.getCommandSenderEntity(); + } + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return sender.sendCommandFeedback(); + } + public void setCommandStat(CommandResultStats.Type type, int amount) + { + sender.setCommandStat(type, amount); + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return sender.getServer(); + } + }; + String s1; + + try + { + s1 = CommandBase.getEntityName(server, icommandsender, s); + } + catch (CommandException var12) + { + return; + } + + String s2 = this.objectives[typeIn.getTypeID()]; + + if (s2 != null) + { + Scoreboard scoreboard = sender.getEntityWorld().getScoreboard(); + ScoreObjective scoreobjective = scoreboard.getObjective(s2); + + if (scoreobjective != null) + { + if (scoreboard.entityHasObjective(s1, scoreobjective)) + { + Score score = scoreboard.getOrCreateScore(s1, scoreobjective); + score.setScorePoints(p_184932_4_); + } + } + } + } + } + + public void readStatsFromNBT(NBTTagCompound tagcompound) + { + if (tagcompound.hasKey("CommandStats", 10)) + { + NBTTagCompound nbttagcompound = tagcompound.getCompoundTag("CommandStats"); + + for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values()) + { + String s = commandresultstats$type.getTypeName() + "Name"; + String s1 = commandresultstats$type.getTypeName() + "Objective"; + + if (nbttagcompound.hasKey(s, 8) && nbttagcompound.hasKey(s1, 8)) + { + String s2 = nbttagcompound.getString(s); + String s3 = nbttagcompound.getString(s1); + setScoreBoardStat(this, commandresultstats$type, s2, s3); + } + } + } + } + + public void writeStatsToNBT(NBTTagCompound tagcompound) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values()) + { + String s = this.entitiesID[commandresultstats$type.getTypeID()]; + String s1 = this.objectives[commandresultstats$type.getTypeID()]; + + if (s != null && s1 != null) + { + nbttagcompound.setString(commandresultstats$type.getTypeName() + "Name", s); + nbttagcompound.setString(commandresultstats$type.getTypeName() + "Objective", s1); + } + } + + if (!nbttagcompound.hasNoTags()) + { + tagcompound.setTag("CommandStats", nbttagcompound); + } + } + + /** + * Set a stat in the scoreboard + */ + public static void setScoreBoardStat(CommandResultStats stats, CommandResultStats.Type resultType, @Nullable String entityID, @Nullable String objectiveName) + { + if (entityID != null && !entityID.isEmpty() && objectiveName != null && !objectiveName.isEmpty()) + { + if (stats.entitiesID == STRING_RESULT_TYPES || stats.objectives == STRING_RESULT_TYPES) + { + stats.entitiesID = new String[NUM_RESULT_TYPES]; + stats.objectives = new String[NUM_RESULT_TYPES]; + } + + stats.entitiesID[resultType.getTypeID()] = entityID; + stats.objectives[resultType.getTypeID()] = objectiveName; + } + else + { + removeScoreBoardStat(stats, resultType); + } + } + + /** + * Remove a stat from the scoreboard + */ + private static void removeScoreBoardStat(CommandResultStats resultStatsIn, CommandResultStats.Type resultTypeIn) + { + if (resultStatsIn.entitiesID != STRING_RESULT_TYPES && resultStatsIn.objectives != STRING_RESULT_TYPES) + { + resultStatsIn.entitiesID[resultTypeIn.getTypeID()] = null; + resultStatsIn.objectives[resultTypeIn.getTypeID()] = null; + boolean flag = true; + + for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values()) + { + if (resultStatsIn.entitiesID[commandresultstats$type.getTypeID()] != null && resultStatsIn.objectives[commandresultstats$type.getTypeID()] != null) + { + flag = false; + break; + } + } + + if (flag) + { + resultStatsIn.entitiesID = STRING_RESULT_TYPES; + resultStatsIn.objectives = STRING_RESULT_TYPES; + } + } + } + + /** + * Add all stats in the CommandResultStats + */ + public void addAllStats(CommandResultStats resultStatsIn) + { + for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values()) + { + setScoreBoardStat(this, commandresultstats$type, resultStatsIn.entitiesID[commandresultstats$type.getTypeID()], resultStatsIn.objectives[commandresultstats$type.getTypeID()]); + } + } + + public static enum Type + { + SUCCESS_COUNT(0, "SuccessCount"), + AFFECTED_BLOCKS(1, "AffectedBlocks"), + AFFECTED_ENTITIES(2, "AffectedEntities"), + AFFECTED_ITEMS(3, "AffectedItems"), + QUERY_RESULT(4, "QueryResult"); + + /** The integer ID of the Result Type. */ + final int typeID; + /** The string representation of the type. */ + final String typeName; + + private Type(int id, String name) + { + this.typeID = id; + this.typeName = name; + } + + /** + * Retrieves the integer ID of the result type. + */ + public int getTypeID() + { + return this.typeID; + } + + /** + * Retrieves the name of the type. + */ + public String getTypeName() + { + return this.typeName; + } + + /** + * Returns the names of all possible Result Types. + */ + public static String[] getTypeNames() + { + String[] astring = new String[values().length]; + int i = 0; + + for (CommandResultStats.Type commandresultstats$type : values()) + { + astring[i++] = commandresultstats$type.getTypeName(); + } + + return astring; + } + + /** + * Retrieves the Type indicated by the supplied name string. + */ + @Nullable + public static CommandResultStats.Type getTypeByName(String name) + { + for (CommandResultStats.Type commandresultstats$type : values()) + { + if (commandresultstats$type.getTypeName().equals(name)) + { + return commandresultstats$type; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandSenderWrapper.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSenderWrapper.java new file mode 100644 index 0000000..29203f5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSenderWrapper.java @@ -0,0 +1,174 @@ +package net.minecraft.command; + +import java.util.Objects; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; + +public class CommandSenderWrapper implements ICommandSender +{ + private final ICommandSender delegate; + @Nullable + private final Vec3d positionVector; + @Nullable + private final BlockPos position; + @Nullable + private final Integer permissionLevel; + @Nullable + private final Entity entity; + @Nullable + private final Boolean sendCommandFeedback; + + public CommandSenderWrapper(ICommandSender delegateIn, @Nullable Vec3d positionVectorIn, @Nullable BlockPos positionIn, @Nullable Integer permissionLevelIn, @Nullable Entity entityIn, @Nullable Boolean sendCommandFeedbackIn) + { + this.delegate = delegateIn; + this.positionVector = positionVectorIn; + this.position = positionIn; + this.permissionLevel = permissionLevelIn; + this.entity = entityIn; + this.sendCommandFeedback = sendCommandFeedbackIn; + } + + public static CommandSenderWrapper create(ICommandSender sender) + { + return sender instanceof CommandSenderWrapper ? (CommandSenderWrapper)sender : new CommandSenderWrapper(sender, (Vec3d)null, (BlockPos)null, (Integer)null, (Entity)null, (Boolean)null); + } + + public CommandSenderWrapper withEntity(Entity entityIn, Vec3d p_193997_2_) + { + return this.entity == entityIn && Objects.equals(this.positionVector, p_193997_2_) ? this : new CommandSenderWrapper(this.delegate, p_193997_2_, new BlockPos(p_193997_2_), this.permissionLevel, entityIn, this.sendCommandFeedback); + } + + public CommandSenderWrapper withPermissionLevel(int level) + { + return this.permissionLevel != null && this.permissionLevel.intValue() <= level ? this : new CommandSenderWrapper(this.delegate, this.positionVector, this.position, level, this.entity, this.sendCommandFeedback); + } + + public CommandSenderWrapper withSendCommandFeedback(boolean sendCommandFeedbackIn) + { + return this.sendCommandFeedback == null || this.sendCommandFeedback.booleanValue() && !sendCommandFeedbackIn ? new CommandSenderWrapper(this.delegate, this.positionVector, this.position, this.permissionLevel, this.entity, sendCommandFeedbackIn) : this; + } + + public CommandSenderWrapper computePositionVector() + { + return this.positionVector != null ? this : new CommandSenderWrapper(this.delegate, this.getPositionVector(), this.getPosition(), this.permissionLevel, this.entity, this.sendCommandFeedback); + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.entity != null ? this.entity.getName() : this.delegate.getName(); + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return this.entity != null ? this.entity.getDisplayName() : this.delegate.getDisplayName(); + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + if (this.sendCommandFeedback == null || this.sendCommandFeedback.booleanValue()) + { + this.delegate.sendMessage(component); + } + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return this.permissionLevel != null && this.permissionLevel.intValue() < permLevel ? false : this.delegate.canUseCommand(permLevel, commandName); + } + + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, return + * the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + if (this.position != null) + { + return this.position; + } + else + { + return this.entity != null ? this.entity.getPosition() : this.delegate.getPosition(); + } + } + + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, return 0.0D, + * 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + if (this.positionVector != null) + { + return this.positionVector; + } + else + { + return this.entity != null ? this.entity.getPositionVector() : this.delegate.getPositionVector(); + } + } + + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, return + * the overworld + */ + public World getEntityWorld() + { + return this.entity != null ? this.entity.getEntityWorld() : this.delegate.getEntityWorld(); + } + + /** + * Returns the entity associated with the command sender. MAY BE NULL! + */ + @Nullable + public Entity getCommandSenderEntity() + { + return this.entity != null ? this.entity.getCommandSenderEntity() : this.delegate.getCommandSenderEntity(); + } + + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return this.sendCommandFeedback != null ? this.sendCommandFeedback.booleanValue() : this.delegate.sendCommandFeedback(); + } + + public void setCommandStat(CommandResultStats.Type type, int amount) + { + if (this.entity != null) + { + this.entity.setCommandStat(type, amount); + } + else + { + this.delegate.setCommandStat(type, amount); + } + } + + /** + * Get the Minecraft server instance + */ + @Nullable + public MinecraftServer getServer() + { + return this.delegate.getServer(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandServerKick.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandServerKick.java new file mode 100644 index 0000000..259ee78 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandServerKick.java @@ -0,0 +1,79 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandServerKick extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "kick"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.kick.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 0 && args[0].length() > 1) + { + EntityPlayerMP entityplayermp = server.getPlayerList().getPlayerByUsername(args[0]); + + if (entityplayermp == null) + { + throw new PlayerNotFoundException("commands.generic.player.notFound", new Object[] {args[0]}); + } + else + { + if (args.length >= 2) + { + ITextComponent itextcomponent = getChatComponentFromNthArg(sender, args, 1); + entityplayermp.connection.disconnect(itextcomponent); + notifyCommandListener(sender, this, "commands.kick.success.reason", new Object[] {entityplayermp.getName(), itextcomponent.getUnformattedText()}); + } + else + { + entityplayermp.connection.disconnect(new TextComponentTranslation("multiplayer.disconnect.kicked", new Object[0])); + notifyCommandListener(sender, this, "commands.kick.success", new Object[] {entityplayermp.getName()}); + } + } + } + else + { + throw new WrongUsageException("commands.kick.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length >= 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandSetPlayerTimeout.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSetPlayerTimeout.java new file mode 100644 index 0000000..c0cecd6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSetPlayerTimeout.java @@ -0,0 +1,47 @@ +package net.minecraft.command; + +import net.minecraft.server.MinecraftServer; + +public class CommandSetPlayerTimeout extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "setidletimeout"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.setidletimeout.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length != 1) + { + throw new WrongUsageException("commands.setidletimeout.usage", new Object[0]); + } + else + { + int i = parseInt(args[0], 0); + server.setPlayerIdleTimeout(i); + notifyCommandListener(sender, this, "commands.setidletimeout.success", new Object[] {i}); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandSetSpawnpoint.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSetSpawnpoint.java new file mode 100644 index 0000000..a7d0bdf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSetSpawnpoint.java @@ -0,0 +1,80 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandSetSpawnpoint extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "spawnpoint"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.spawnpoint.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 1 && args.length < 4) + { + throw new WrongUsageException("commands.spawnpoint.usage", new Object[0]); + } + else + { + EntityPlayerMP entityplayermp = args.length > 0 ? getPlayer(server, sender, args[0]) : getCommandSenderAsPlayer(sender); + BlockPos blockpos = args.length > 3 ? parseBlockPos(sender, args, 1, true) : entityplayermp.getPosition(); + + if (entityplayermp.world != null) + { + entityplayermp.setSpawnPoint(blockpos, true); + notifyCommandListener(sender, this, "commands.spawnpoint.success", new Object[] {entityplayermp.getName(), blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length > 1 && args.length <= 4 ? getTabCompletionCoordinate(args, 1, targetPos) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandShowSeed.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandShowSeed.java new file mode 100644 index 0000000..1990fb6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandShowSeed.java @@ -0,0 +1,50 @@ +package net.minecraft.command; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +public class CommandShowSeed extends CommandBase +{ + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return server.isSinglePlayer() || super.checkPermission(server, sender); + } + + /** + * Gets the name of the command + */ + public String getName() + { + return "seed"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.seed.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + World world = (World)(sender instanceof EntityPlayer ? ((EntityPlayer)sender).world : server.getWorld(0)); + sender.sendMessage(new TextComponentTranslation("commands.seed.success", new Object[] {world.getSeed()})); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandSpreadPlayers.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSpreadPlayers.java new file mode 100644 index 0000000..6d7d791 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandSpreadPlayers.java @@ -0,0 +1,407 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.scoreboard.Team; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +public class CommandSpreadPlayers extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "spreadplayers"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.spreadplayers.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 6) + { + throw new WrongUsageException("commands.spreadplayers.usage", new Object[0]); + } + else + { + int i = 0; + BlockPos blockpos = sender.getPosition(); + double d0 = parseDouble((double)blockpos.getX(), args[i++], true); + double d1 = parseDouble((double)blockpos.getZ(), args[i++], true); + double d2 = parseDouble(args[i++], 0.0D); + double d3 = parseDouble(args[i++], d2 + 1.0D); + boolean flag = parseBoolean(args[i++]); + List list = Lists.newArrayList(); + + while (i < args.length) + { + String s = args[i++]; + + if (EntitySelector.isSelector(s)) + { + List list1 = EntitySelector.matchEntities(sender, s, Entity.class); + + if (list1.isEmpty()) + { + throw new EntityNotFoundException("commands.generic.selector.notFound", new Object[] {s}); + } + + list.addAll(list1); + } + else + { + EntityPlayer entityplayer = server.getPlayerList().getPlayerByUsername(s); + + if (entityplayer == null) + { + throw new PlayerNotFoundException("commands.generic.player.notFound", new Object[] {s}); + } + + list.add(entityplayer); + } + } + + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, list.size()); + + if (list.isEmpty()) + { + throw new EntityNotFoundException("commands.spreadplayers.noop"); + } + else + { + sender.sendMessage(new TextComponentTranslation("commands.spreadplayers.spreading." + (flag ? "teams" : "players"), new Object[] {list.size(), d3, d0, d1, d2})); + this.spread(sender, list, new CommandSpreadPlayers.Position(d0, d1), d2, d3, (list.get(0)).world, flag); + } + } + } + + private void spread(ICommandSender sender, List p_110669_2_, CommandSpreadPlayers.Position pos, double spreadDistance, double maxRange, World worldIn, boolean respectTeams) throws CommandException + { + Random random = new Random(); + double d0 = pos.x - maxRange; + double d1 = pos.z - maxRange; + double d2 = pos.x + maxRange; + double d3 = pos.z + maxRange; + CommandSpreadPlayers.Position[] acommandspreadplayers$position = this.createInitialPositions(random, respectTeams ? this.getNumberOfTeams(p_110669_2_) : p_110669_2_.size(), d0, d1, d2, d3); + int i = this.spreadPositions(pos, spreadDistance, worldIn, random, d0, d1, d2, d3, acommandspreadplayers$position, respectTeams); + double d4 = this.setPlayerPositions(p_110669_2_, worldIn, acommandspreadplayers$position, respectTeams); + notifyCommandListener(sender, this, "commands.spreadplayers.success." + (respectTeams ? "teams" : "players"), new Object[] {acommandspreadplayers$position.length, pos.x, pos.z}); + + if (acommandspreadplayers$position.length > 1) + { + sender.sendMessage(new TextComponentTranslation("commands.spreadplayers.info." + (respectTeams ? "teams" : "players"), new Object[] {String.format("%.2f", d4), i})); + } + } + + private int getNumberOfTeams(List p_110667_1_) + { + Set set = Sets.newHashSet(); + + for (Entity entity : p_110667_1_) + { + if (entity instanceof EntityPlayer) + { + set.add(entity.getTeam()); + } + else + { + set.add(null); + } + } + + return set.size(); + } + + private int spreadPositions(CommandSpreadPlayers.Position p_110668_1_, double p_110668_2_, World worldIn, Random random, double minX, double minZ, double maxX, double maxZ, CommandSpreadPlayers.Position[] p_110668_14_, boolean respectTeams) throws CommandException + { + boolean flag = true; + double d0 = 3.4028234663852886E38D; + int i; + + for (i = 0; i < 10000 && flag; ++i) + { + flag = false; + d0 = 3.4028234663852886E38D; + + for (int j = 0; j < p_110668_14_.length; ++j) + { + CommandSpreadPlayers.Position commandspreadplayers$position = p_110668_14_[j]; + int k = 0; + CommandSpreadPlayers.Position commandspreadplayers$position1 = new CommandSpreadPlayers.Position(); + + for (int l = 0; l < p_110668_14_.length; ++l) + { + if (j != l) + { + CommandSpreadPlayers.Position commandspreadplayers$position2 = p_110668_14_[l]; + double d1 = commandspreadplayers$position.dist(commandspreadplayers$position2); + d0 = Math.min(d1, d0); + + if (d1 < p_110668_2_) + { + ++k; + commandspreadplayers$position1.x += commandspreadplayers$position2.x - commandspreadplayers$position.x; + commandspreadplayers$position1.z += commandspreadplayers$position2.z - commandspreadplayers$position.z; + } + } + } + + if (k > 0) + { + commandspreadplayers$position1.x /= (double)k; + commandspreadplayers$position1.z /= (double)k; + double d2 = (double)commandspreadplayers$position1.getLength(); + + if (d2 > 0.0D) + { + commandspreadplayers$position1.normalize(); + commandspreadplayers$position.moveAway(commandspreadplayers$position1); + } + else + { + commandspreadplayers$position.randomize(random, minX, minZ, maxX, maxZ); + } + + flag = true; + } + + if (commandspreadplayers$position.clamp(minX, minZ, maxX, maxZ)) + { + flag = true; + } + } + + if (!flag) + { + for (CommandSpreadPlayers.Position commandspreadplayers$position3 : p_110668_14_) + { + if (!commandspreadplayers$position3.isSafe(worldIn)) + { + commandspreadplayers$position3.randomize(random, minX, minZ, maxX, maxZ); + flag = true; + } + } + } + } + + if (i >= 10000) + { + throw new CommandException("commands.spreadplayers.failure." + (respectTeams ? "teams" : "players"), new Object[] {p_110668_14_.length, p_110668_1_.x, p_110668_1_.z, String.format("%.2f", d0)}); + } + else + { + return i; + } + } + + private double setPlayerPositions(List p_110671_1_, World worldIn, CommandSpreadPlayers.Position[] p_110671_3_, boolean p_110671_4_) + { + double d0 = 0.0D; + int i = 0; + Map map = Maps.newHashMap(); + + for (int j = 0; j < p_110671_1_.size(); ++j) + { + Entity entity = p_110671_1_.get(j); + CommandSpreadPlayers.Position commandspreadplayers$position; + + if (p_110671_4_) + { + Team team = entity instanceof EntityPlayer ? entity.getTeam() : null; + + if (!map.containsKey(team)) + { + map.put(team, p_110671_3_[i++]); + } + + commandspreadplayers$position = map.get(team); + } + else + { + commandspreadplayers$position = p_110671_3_[i++]; + } + + entity.setPositionAndUpdate((double)((float)MathHelper.floor(commandspreadplayers$position.x) + 0.5F), (double)commandspreadplayers$position.getSpawnY(worldIn), (double)MathHelper.floor(commandspreadplayers$position.z) + 0.5D); + double d2 = Double.MAX_VALUE; + + for (CommandSpreadPlayers.Position commandspreadplayers$position1 : p_110671_3_) + { + if (commandspreadplayers$position != commandspreadplayers$position1) + { + double d1 = commandspreadplayers$position.dist(commandspreadplayers$position1); + d2 = Math.min(d1, d2); + } + } + + d0 += d2; + } + + d0 = d0 / (double)p_110671_1_.size(); + return d0; + } + + private CommandSpreadPlayers.Position[] createInitialPositions(Random p_110670_1_, int p_110670_2_, double p_110670_3_, double p_110670_5_, double p_110670_7_, double p_110670_9_) + { + CommandSpreadPlayers.Position[] acommandspreadplayers$position = new CommandSpreadPlayers.Position[p_110670_2_]; + + for (int i = 0; i < acommandspreadplayers$position.length; ++i) + { + CommandSpreadPlayers.Position commandspreadplayers$position = new CommandSpreadPlayers.Position(); + commandspreadplayers$position.randomize(p_110670_1_, p_110670_3_, p_110670_5_, p_110670_7_, p_110670_9_); + acommandspreadplayers$position[i] = commandspreadplayers$position; + } + + return acommandspreadplayers$position; + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length >= 1 && args.length <= 2 ? getTabCompletionCoordinateXZ(args, 0, targetPos) : Collections.emptyList(); + } + + static class Position + { + double x; + double z; + + Position() + { + } + + Position(double xIn, double zIn) + { + this.x = xIn; + this.z = zIn; + } + + double dist(CommandSpreadPlayers.Position pos) + { + double d0 = this.x - pos.x; + double d1 = this.z - pos.z; + return Math.sqrt(d0 * d0 + d1 * d1); + } + + void normalize() + { + double d0 = (double)this.getLength(); + this.x /= d0; + this.z /= d0; + } + + float getLength() + { + return MathHelper.sqrt(this.x * this.x + this.z * this.z); + } + + public void moveAway(CommandSpreadPlayers.Position pos) + { + this.x -= pos.x; + this.z -= pos.z; + } + + public boolean clamp(double p_111093_1_, double p_111093_3_, double p_111093_5_, double p_111093_7_) + { + boolean flag = false; + + if (this.x < p_111093_1_) + { + this.x = p_111093_1_; + flag = true; + } + else if (this.x > p_111093_5_) + { + this.x = p_111093_5_; + flag = true; + } + + if (this.z < p_111093_3_) + { + this.z = p_111093_3_; + flag = true; + } + else if (this.z > p_111093_7_) + { + this.z = p_111093_7_; + flag = true; + } + + return flag; + } + + public int getSpawnY(World worldIn) + { + BlockPos blockpos = new BlockPos(this.x, 256.0D, this.z); + + while (blockpos.getY() > 0) + { + blockpos = blockpos.down(); + + if (worldIn.getBlockState(blockpos).getMaterial() != Material.AIR) + { + return blockpos.getY() + 1; + } + } + + return 257; + } + + public boolean isSafe(World worldIn) + { + BlockPos blockpos = new BlockPos(this.x, 256.0D, this.z); + + while (blockpos.getY() > 0) + { + blockpos = blockpos.down(); + Material material = worldIn.getBlockState(blockpos).getMaterial(); + + if (material != Material.AIR) + { + return !material.isLiquid() && material != Material.FIRE; + } + } + + return false; + } + + public void randomize(Random rand, double p_111097_2_, double p_111097_4_, double p_111097_6_, double p_111097_8_) + { + this.x = MathHelper.nextDouble(rand, p_111097_2_, p_111097_6_); + this.z = MathHelper.nextDouble(rand, p_111097_4_, p_111097_8_); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandStats.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandStats.java new file mode 100644 index 0000000..d888483 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandStats.java @@ -0,0 +1,250 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CommandStats extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "stats"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.stats.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.stats.usage", new Object[0]); + } + else + { + boolean flag; + + if ("entity".equals(args[0])) + { + flag = false; + } + else + { + if (!"block".equals(args[0])) + { + throw new WrongUsageException("commands.stats.usage", new Object[0]); + } + + flag = true; + } + + int i; + + if (flag) + { + if (args.length < 5) + { + throw new WrongUsageException("commands.stats.block.usage", new Object[0]); + } + + i = 4; + } + else + { + if (args.length < 3) + { + throw new WrongUsageException("commands.stats.entity.usage", new Object[0]); + } + + i = 2; + } + + String s = args[i++]; + + if ("set".equals(s)) + { + if (args.length < i + 3) + { + if (i == 5) + { + throw new WrongUsageException("commands.stats.block.set.usage", new Object[0]); + } + + throw new WrongUsageException("commands.stats.entity.set.usage", new Object[0]); + } + } + else + { + if (!"clear".equals(s)) + { + throw new WrongUsageException("commands.stats.usage", new Object[0]); + } + + if (args.length < i + 1) + { + if (i == 5) + { + throw new WrongUsageException("commands.stats.block.clear.usage", new Object[0]); + } + + throw new WrongUsageException("commands.stats.entity.clear.usage", new Object[0]); + } + } + + CommandResultStats.Type commandresultstats$type = CommandResultStats.Type.getTypeByName(args[i++]); + + if (commandresultstats$type == null) + { + throw new CommandException("commands.stats.failed", new Object[0]); + } + else + { + World world = sender.getEntityWorld(); + CommandResultStats commandresultstats; + + if (flag) + { + BlockPos blockpos = parseBlockPos(sender, args, 1, false); + TileEntity tileentity = world.getTileEntity(blockpos); + + if (tileentity == null) + { + throw new CommandException("commands.stats.noCompatibleBlock", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + + if (tileentity instanceof TileEntityCommandBlock) + { + commandresultstats = ((TileEntityCommandBlock)tileentity).getCommandResultStats(); + } + else + { + if (!(tileentity instanceof TileEntitySign)) + { + throw new CommandException("commands.stats.noCompatibleBlock", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + + commandresultstats = ((TileEntitySign)tileentity).getStats(); + } + } + else + { + Entity entity = getEntity(server, sender, args[1]); + commandresultstats = entity.getCommandStats(); + } + + if ("set".equals(s)) + { + String s1 = args[i++]; + String s2 = args[i]; + + if (s1.isEmpty() || s2.isEmpty()) + { + throw new CommandException("commands.stats.failed", new Object[0]); + } + + CommandResultStats.setScoreBoardStat(commandresultstats, commandresultstats$type, s1, s2); + notifyCommandListener(sender, this, "commands.stats.success", new Object[] {commandresultstats$type.getTypeName(), s2, s1}); + } + else if ("clear".equals(s)) + { + CommandResultStats.setScoreBoardStat(commandresultstats, commandresultstats$type, (String)null, (String)null); + notifyCommandListener(sender, this, "commands.stats.cleared", new Object[] {commandresultstats$type.getTypeName()}); + } + + if (flag) + { + BlockPos blockpos1 = parseBlockPos(sender, args, 1, false); + TileEntity tileentity1 = world.getTileEntity(blockpos1); + tileentity1.markDirty(); + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"entity", "block"}); + } + else if (args.length == 2 && "entity".equals(args[0])) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else if (args.length >= 2 && args.length <= 4 && "block".equals(args[0])) + { + return getTabCompletionCoordinate(args, 1, targetPos); + } + else if ((args.length != 3 || !"entity".equals(args[0])) && (args.length != 5 || !"block".equals(args[0]))) + { + if ((args.length != 4 || !"entity".equals(args[0])) && (args.length != 6 || !"block".equals(args[0]))) + { + return (args.length != 6 || !"entity".equals(args[0])) && (args.length != 8 || !"block".equals(args[0])) ? Collections.emptyList() : getListOfStringsMatchingLastWord(args, this.getObjectiveNames(server)); + } + else + { + return getListOfStringsMatchingLastWord(args, CommandResultStats.Type.getTypeNames()); + } + } + else + { + return getListOfStringsMatchingLastWord(args, new String[] {"set", "clear"}); + } + } + + protected List getObjectiveNames(MinecraftServer server) + { + Collection collection = server.getWorld(0).getScoreboard().getScoreObjectives(); + List list = Lists.newArrayList(); + + for (ScoreObjective scoreobjective : collection) + { + if (!scoreobjective.getCriteria().isReadOnly()) + { + list.add(scoreobjective.getName()); + } + } + + return list; + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return args.length > 0 && "entity".equals(args[0]) && index == 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandStopSound.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandStopSound.java new file mode 100644 index 0000000..609d487 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandStopSound.java @@ -0,0 +1,121 @@ +package net.minecraft.command; + +import io.netty.buffer.Unpooled; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.SPacketCustomPayload; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; + +public class CommandStopSound extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "stopsound"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.stopsound.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length >= 1 && args.length <= 3) + { + int i = 0; + EntityPlayerMP entityplayermp = getPlayer(server, sender, args[i++]); + String s = ""; + String s1 = ""; + + if (args.length >= 2) + { + String s2 = args[i++]; + SoundCategory soundcategory = SoundCategory.getByName(s2); + + if (soundcategory == null) + { + throw new CommandException("commands.stopsound.unknownSoundSource", new Object[] {s2}); + } + + s = soundcategory.getName(); + } + + if (args.length == 3) + { + s1 = args[i++]; + } + + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeString(s); + packetbuffer.writeString(s1); + entityplayermp.connection.sendPacket(new SPacketCustomPayload("MC|StopSound", packetbuffer)); + + if (s.isEmpty() && s1.isEmpty()) + { + notifyCommandListener(sender, this, "commands.stopsound.success.all", new Object[] {entityplayermp.getName()}); + } + else if (s1.isEmpty()) + { + notifyCommandListener(sender, this, "commands.stopsound.success.soundSource", new Object[] {s, entityplayermp.getName()}); + } + else + { + notifyCommandListener(sender, this, "commands.stopsound.success.individualSound", new Object[] {s1, s, entityplayermp.getName()}); + } + } + else + { + throw new WrongUsageException(this.getUsage(sender), new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, SoundCategory.getSoundCategoryNames()); + } + else + { + return args.length == 3 ? getListOfStringsMatchingLastWord(args, SoundEvent.REGISTRY.getKeys()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandTP.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTP.java new file mode 100644 index 0000000..8a8ac6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTP.java @@ -0,0 +1,195 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketPlayerPosLook; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +public class CommandTP extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "tp"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.tp.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.tp.usage", new Object[0]); + } + else + { + int i = 0; + Entity entity; + + if (args.length != 2 && args.length != 4 && args.length != 6) + { + entity = getCommandSenderAsPlayer(sender); + } + else + { + entity = getEntity(server, sender, args[0]); + i = 1; + } + + if (args.length != 1 && args.length != 2) + { + if (args.length < i + 3) + { + throw new WrongUsageException("commands.tp.usage", new Object[0]); + } + else if (entity.world != null) + { + int j = 4096; + int k = i + 1; + CommandBase.CoordinateArg commandbase$coordinatearg = parseCoordinate(entity.posX, args[i], true); + CommandBase.CoordinateArg commandbase$coordinatearg1 = parseCoordinate(entity.posY, args[k++], -4096, 4096, false); + CommandBase.CoordinateArg commandbase$coordinatearg2 = parseCoordinate(entity.posZ, args[k++], true); + CommandBase.CoordinateArg commandbase$coordinatearg3 = parseCoordinate((double)entity.rotationYaw, args.length > k ? args[k++] : "~", false); + CommandBase.CoordinateArg commandbase$coordinatearg4 = parseCoordinate((double)entity.rotationPitch, args.length > k ? args[k] : "~", false); + teleportEntityToCoordinates(entity, commandbase$coordinatearg, commandbase$coordinatearg1, commandbase$coordinatearg2, commandbase$coordinatearg3, commandbase$coordinatearg4); + notifyCommandListener(sender, this, "commands.tp.success.coordinates", new Object[] {entity.getName(), commandbase$coordinatearg.getResult(), commandbase$coordinatearg1.getResult(), commandbase$coordinatearg2.getResult()}); + } + } + else + { + Entity entity1 = getEntity(server, sender, args[args.length - 1]); + + if (entity1.world != entity.world) + { + throw new CommandException("commands.tp.notSameDimension", new Object[0]); + } + else + { + entity.dismountRidingEntity(); + + if (entity instanceof EntityPlayerMP) + { + ((EntityPlayerMP)entity).connection.setPlayerLocation(entity1.posX, entity1.posY, entity1.posZ, entity1.rotationYaw, entity1.rotationPitch); + } + else + { + entity.setLocationAndAngles(entity1.posX, entity1.posY, entity1.posZ, entity1.rotationYaw, entity1.rotationPitch); + } + + notifyCommandListener(sender, this, "commands.tp.success", new Object[] {entity.getName(), entity1.getName()}); + } + } + } + } + + /** + * Teleports an entity to the specified coordinates + */ + private static void teleportEntityToCoordinates(Entity teleportingEntity, CommandBase.CoordinateArg argX, CommandBase.CoordinateArg argY, CommandBase.CoordinateArg argZ, CommandBase.CoordinateArg argYaw, CommandBase.CoordinateArg argPitch) + { + if (teleportingEntity instanceof EntityPlayerMP) + { + Set set = EnumSet.noneOf(SPacketPlayerPosLook.EnumFlags.class); + + if (argX.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.X); + } + + if (argY.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.Y); + } + + if (argZ.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.Z); + } + + if (argPitch.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.X_ROT); + } + + if (argYaw.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.Y_ROT); + } + + float f = (float)argYaw.getAmount(); + + if (!argYaw.isRelative()) + { + f = MathHelper.wrapDegrees(f); + } + + float f1 = (float)argPitch.getAmount(); + + if (!argPitch.isRelative()) + { + f1 = MathHelper.wrapDegrees(f1); + } + + teleportingEntity.dismountRidingEntity(); + ((EntityPlayerMP)teleportingEntity).connection.setPlayerLocation(argX.getAmount(), argY.getAmount(), argZ.getAmount(), f, f1, set); + teleportingEntity.setRotationYawHead(f); + } + else + { + float f2 = (float)MathHelper.wrapDegrees(argYaw.getResult()); + float f3 = (float)MathHelper.wrapDegrees(argPitch.getResult()); + f3 = MathHelper.clamp(f3, -90.0F, 90.0F); + teleportingEntity.setLocationAndAngles(argX.getResult(), argY.getResult(), argZ.getResult(), f2, f3); + teleportingEntity.setRotationYawHead(f2); + } + + if (!(teleportingEntity instanceof EntityLivingBase) || !((EntityLivingBase)teleportingEntity).isElytraFlying()) + { + teleportingEntity.motionY = 0.0D; + teleportingEntity.onGround = true; + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length != 1 && args.length != 2 ? Collections.emptyList() : getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandTime.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTime.java new file mode 100644 index 0000000..ab2b93a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTime.java @@ -0,0 +1,139 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldServer; + +public class CommandTime extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "time"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.time.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 1) + { + if ("set".equals(args[0])) + { + int i1; + + if ("day".equals(args[1])) + { + i1 = 1000; + } + else if ("night".equals(args[1])) + { + i1 = 13000; + } + else + { + i1 = parseInt(args[1], 0); + } + + this.setAllWorldTimes(server, i1); + notifyCommandListener(sender, this, "commands.time.set", new Object[] {i1}); + return; + } + + if ("add".equals(args[0])) + { + int l = parseInt(args[1], 0); + this.incrementAllWorldTimes(server, l); + notifyCommandListener(sender, this, "commands.time.added", new Object[] {l}); + return; + } + + if ("query".equals(args[0])) + { + if ("daytime".equals(args[1])) + { + int k = (int)(sender.getEntityWorld().getWorldTime() % 24000L); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, k); + notifyCommandListener(sender, this, "commands.time.query", new Object[] {k}); + return; + } + + if ("day".equals(args[1])) + { + int j = (int)(sender.getEntityWorld().getWorldTime() / 24000L % 2147483647L); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, j); + notifyCommandListener(sender, this, "commands.time.query", new Object[] {j}); + return; + } + + if ("gametime".equals(args[1])) + { + int i = (int)(sender.getEntityWorld().getTotalWorldTime() % 2147483647L); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, i); + notifyCommandListener(sender, this, "commands.time.query", new Object[] {i}); + return; + } + } + } + + throw new WrongUsageException("commands.time.usage", new Object[0]); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"set", "add", "query"}); + } + else if (args.length == 2 && "set".equals(args[0])) + { + return getListOfStringsMatchingLastWord(args, new String[] {"day", "night"}); + } + else + { + return args.length == 2 && "query".equals(args[0]) ? getListOfStringsMatchingLastWord(args, new String[] {"daytime", "gametime", "day"}) : Collections.emptyList(); + } + } + + protected void setAllWorldTimes(MinecraftServer server, int time) + { + for (int i = 0; i < server.worlds.length; ++i) + { + server.worlds[i].setWorldTime((long)time); + } + } + + protected void incrementAllWorldTimes(MinecraftServer server, int amount) + { + for (int i = 0; i < server.worlds.length; ++i) + { + WorldServer worldserver = server.worlds[i]; + worldserver.setWorldTime(worldserver.getWorldTime() + (long)amount); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandTitle.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTitle.java new file mode 100644 index 0000000..a91ad0d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTitle.java @@ -0,0 +1,150 @@ +package net.minecraft.command; + +import com.google.gson.JsonParseException; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketTitle; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CommandTitle extends CommandBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + + /** + * Gets the name of the command + */ + public String getName() + { + return "title"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.title.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.title.usage", new Object[0]); + } + else + { + if (args.length < 3) + { + if ("title".equals(args[1]) || "subtitle".equals(args[1]) || "actionbar".equals(args[1])) + { + throw new WrongUsageException("commands.title.usage.title", new Object[0]); + } + + if ("times".equals(args[1])) + { + throw new WrongUsageException("commands.title.usage.times", new Object[0]); + } + } + + EntityPlayerMP entityplayermp = getPlayer(server, sender, args[0]); + SPacketTitle.Type spackettitle$type = SPacketTitle.Type.byName(args[1]); + + if (spackettitle$type != SPacketTitle.Type.CLEAR && spackettitle$type != SPacketTitle.Type.RESET) + { + if (spackettitle$type == SPacketTitle.Type.TIMES) + { + if (args.length != 5) + { + throw new WrongUsageException("commands.title.usage", new Object[0]); + } + else + { + int i = parseInt(args[2]); + int j = parseInt(args[3]); + int k = parseInt(args[4]); + SPacketTitle spackettitle2 = new SPacketTitle(i, j, k); + entityplayermp.connection.sendPacket(spackettitle2); + notifyCommandListener(sender, this, "commands.title.success", new Object[0]); + } + } + else if (args.length < 3) + { + throw new WrongUsageException("commands.title.usage", new Object[0]); + } + else + { + String s = buildString(args, 2); + ITextComponent itextcomponent; + + try + { + itextcomponent = ITextComponent.Serializer.jsonToComponent(s); + } + catch (JsonParseException jsonparseexception) + { + /** + * Convert a JsonParseException into a user-friendly exception + */ + throw toSyntaxException(jsonparseexception); + } + + SPacketTitle spackettitle1 = new SPacketTitle(spackettitle$type, TextComponentUtils.processComponent(sender, itextcomponent, entityplayermp)); + entityplayermp.connection.sendPacket(spackettitle1); + notifyCommandListener(sender, this, "commands.title.success", new Object[0]); + } + } + else if (args.length != 2) + { + throw new WrongUsageException("commands.title.usage", new Object[0]); + } + else + { + SPacketTitle spackettitle = new SPacketTitle(spackettitle$type, (ITextComponent)null); + entityplayermp.connection.sendPacket(spackettitle); + notifyCommandListener(sender, this, "commands.title.success", new Object[0]); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, SPacketTitle.Type.getNames()) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandToggleDownfall.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandToggleDownfall.java new file mode 100644 index 0000000..ab117a2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandToggleDownfall.java @@ -0,0 +1,46 @@ +package net.minecraft.command; + +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.storage.WorldInfo; + +public class CommandToggleDownfall extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "toggledownfall"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.downfall.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + this.toggleRainfall(server); + notifyCommandListener(sender, this, "commands.downfall.success", new Object[0]); + } + + protected void toggleRainfall(MinecraftServer server) + { + WorldInfo worldinfo = server.worlds[0].getWorldInfo(); + worldinfo.setRaining(!worldinfo.isRaining()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandTrigger.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTrigger.java new file mode 100644 index 0000000..a34d267 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandTrigger.java @@ -0,0 +1,147 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandTrigger extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "trigger"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 0; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.trigger.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 3) + { + throw new WrongUsageException("commands.trigger.usage", new Object[0]); + } + else + { + EntityPlayerMP entityplayermp; + + if (sender instanceof EntityPlayerMP) + { + entityplayermp = (EntityPlayerMP)sender; + } + else + { + Entity entity = sender.getCommandSenderEntity(); + + if (!(entity instanceof EntityPlayerMP)) + { + throw new CommandException("commands.trigger.invalidPlayer", new Object[0]); + } + + entityplayermp = (EntityPlayerMP)entity; + } + + Scoreboard scoreboard = server.getWorld(0).getScoreboard(); + ScoreObjective scoreobjective = scoreboard.getObjective(args[0]); + + if (scoreobjective != null && scoreobjective.getCriteria() == IScoreCriteria.TRIGGER) + { + int i = parseInt(args[2]); + + if (!scoreboard.entityHasObjective(entityplayermp.getName(), scoreobjective)) + { + throw new CommandException("commands.trigger.invalidObjective", new Object[] {args[0]}); + } + else + { + Score score = scoreboard.getOrCreateScore(entityplayermp.getName(), scoreobjective); + + if (score.isLocked()) + { + throw new CommandException("commands.trigger.disabled", new Object[] {args[0]}); + } + else + { + if ("set".equals(args[1])) + { + score.setScorePoints(i); + } + else + { + if (!"add".equals(args[1])) + { + throw new CommandException("commands.trigger.invalidMode", new Object[] {args[1]}); + } + + score.increaseScore(i); + } + + score.setLocked(true); + + if (entityplayermp.interactionManager.isCreative()) + { + notifyCommandListener(sender, this, "commands.trigger.success", new Object[] {args[0], args[1], args[2]}); + } + } + } + } + else + { + throw new CommandException("commands.trigger.invalidObjective", new Object[] {args[0]}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + Scoreboard scoreboard = server.getWorld(0).getScoreboard(); + List list = Lists.newArrayList(); + + for (ScoreObjective scoreobjective : scoreboard.getScoreObjectives()) + { + if (scoreobjective.getCriteria() == IScoreCriteria.TRIGGER) + { + list.add(scoreobjective.getName()); + } + } + + return getListOfStringsMatchingLastWord(args, (String[])list.toArray(new String[list.size()])); + } + else + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, new String[] {"add", "set"}) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandWeather.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandWeather.java new file mode 100644 index 0000000..01a8b53 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandWeather.java @@ -0,0 +1,101 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.WorldInfo; + +public class CommandWeather extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "weather"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.weather.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length >= 1 && args.length <= 2) + { + int i = (300 + (new Random()).nextInt(600)) * 20; + + if (args.length >= 2) + { + i = parseInt(args[1], 1, 1000000) * 20; + } + + World world = server.worlds[0]; + WorldInfo worldinfo = world.getWorldInfo(); + + if ("clear".equalsIgnoreCase(args[0])) + { + worldinfo.setCleanWeatherTime(i); + worldinfo.setRainTime(0); + worldinfo.setThunderTime(0); + worldinfo.setRaining(false); + worldinfo.setThundering(false); + notifyCommandListener(sender, this, "commands.weather.clear", new Object[0]); + } + else if ("rain".equalsIgnoreCase(args[0])) + { + worldinfo.setCleanWeatherTime(0); + worldinfo.setRainTime(i); + worldinfo.setThunderTime(i); + worldinfo.setRaining(true); + worldinfo.setThundering(false); + notifyCommandListener(sender, this, "commands.weather.rain", new Object[0]); + } + else + { + if (!"thunder".equalsIgnoreCase(args[0])) + { + throw new WrongUsageException("commands.weather.usage", new Object[0]); + } + + worldinfo.setCleanWeatherTime(0); + worldinfo.setRainTime(i); + worldinfo.setThunderTime(i); + worldinfo.setRaining(true); + worldinfo.setThundering(true); + notifyCommandListener(sender, this, "commands.weather.thunder", new Object[0]); + } + } + else + { + throw new WrongUsageException("commands.weather.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, new String[] {"clear", "rain", "thunder"}) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandWorldBorder.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandWorldBorder.java new file mode 100644 index 0000000..9d39e75 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandWorldBorder.java @@ -0,0 +1,229 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.border.WorldBorder; + +public class CommandWorldBorder extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "worldborder"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.worldborder.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.worldborder.usage", new Object[0]); + } + else + { + WorldBorder worldborder = this.getWorldBorder(server); + + if ("set".equals(args[0])) + { + if (args.length != 2 && args.length != 3) + { + throw new WrongUsageException("commands.worldborder.set.usage", new Object[0]); + } + + double d0 = worldborder.getTargetSize(); + double d2 = parseDouble(args[1], 1.0D, 6.0E7D); + long i = args.length > 2 ? parseLong(args[2], 0L, 9223372036854775L) * 1000L : 0L; + + if (i > 0L) + { + worldborder.setTransition(d0, d2, i); + + if (d0 > d2) + { + notifyCommandListener(sender, this, "commands.worldborder.setSlowly.shrink.success", new Object[] {String.format("%.1f", d2), String.format("%.1f", d0), Long.toString(i / 1000L)}); + } + else + { + notifyCommandListener(sender, this, "commands.worldborder.setSlowly.grow.success", new Object[] {String.format("%.1f", d2), String.format("%.1f", d0), Long.toString(i / 1000L)}); + } + } + else + { + worldborder.setTransition(d2); + notifyCommandListener(sender, this, "commands.worldborder.set.success", new Object[] {String.format("%.1f", d2), String.format("%.1f", d0)}); + } + } + else if ("add".equals(args[0])) + { + if (args.length != 2 && args.length != 3) + { + throw new WrongUsageException("commands.worldborder.add.usage", new Object[0]); + } + + double d4 = worldborder.getDiameter(); + double d8 = d4 + parseDouble(args[1], -d4, 6.0E7D - d4); + long j1 = worldborder.getTimeUntilTarget() + (args.length > 2 ? parseLong(args[2], 0L, 9223372036854775L) * 1000L : 0L); + + if (j1 > 0L) + { + worldborder.setTransition(d4, d8, j1); + + if (d4 > d8) + { + notifyCommandListener(sender, this, "commands.worldborder.setSlowly.shrink.success", new Object[] {String.format("%.1f", d8), String.format("%.1f", d4), Long.toString(j1 / 1000L)}); + } + else + { + notifyCommandListener(sender, this, "commands.worldborder.setSlowly.grow.success", new Object[] {String.format("%.1f", d8), String.format("%.1f", d4), Long.toString(j1 / 1000L)}); + } + } + else + { + worldborder.setTransition(d8); + notifyCommandListener(sender, this, "commands.worldborder.set.success", new Object[] {String.format("%.1f", d8), String.format("%.1f", d4)}); + } + } + else if ("center".equals(args[0])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.worldborder.center.usage", new Object[0]); + } + + BlockPos blockpos = sender.getPosition(); + double d1 = parseDouble((double)blockpos.getX() + 0.5D, args[1], true); + double d3 = parseDouble((double)blockpos.getZ() + 0.5D, args[2], true); + worldborder.setCenter(d1, d3); + notifyCommandListener(sender, this, "commands.worldborder.center.success", new Object[] {d1, d3}); + } + else if ("damage".equals(args[0])) + { + if (args.length < 2) + { + throw new WrongUsageException("commands.worldborder.damage.usage", new Object[0]); + } + + if ("buffer".equals(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.worldborder.damage.buffer.usage", new Object[0]); + } + + double d5 = parseDouble(args[2], 0.0D); + double d9 = worldborder.getDamageBuffer(); + worldborder.setDamageBuffer(d5); + notifyCommandListener(sender, this, "commands.worldborder.damage.buffer.success", new Object[] {String.format("%.1f", d5), String.format("%.1f", d9)}); + } + else if ("amount".equals(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.worldborder.damage.amount.usage", new Object[0]); + } + + double d6 = parseDouble(args[2], 0.0D); + double d10 = worldborder.getDamageAmount(); + worldborder.setDamageAmount(d6); + notifyCommandListener(sender, this, "commands.worldborder.damage.amount.success", new Object[] {String.format("%.2f", d6), String.format("%.2f", d10)}); + } + } + else if ("warning".equals(args[0])) + { + if (args.length < 2) + { + throw new WrongUsageException("commands.worldborder.warning.usage", new Object[0]); + } + + if ("time".equals(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.worldborder.warning.time.usage", new Object[0]); + } + + int j = parseInt(args[2], 0); + int l = worldborder.getWarningTime(); + worldborder.setWarningTime(j); + notifyCommandListener(sender, this, "commands.worldborder.warning.time.success", new Object[] {j, l}); + } + else if ("distance".equals(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.worldborder.warning.distance.usage", new Object[0]); + } + + int k = parseInt(args[2], 0); + int i1 = worldborder.getWarningDistance(); + worldborder.setWarningDistance(k); + notifyCommandListener(sender, this, "commands.worldborder.warning.distance.success", new Object[] {k, i1}); + } + } + else + { + if (!"get".equals(args[0])) + { + throw new WrongUsageException("commands.worldborder.usage", new Object[0]); + } + + double d7 = worldborder.getDiameter(); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, MathHelper.floor(d7 + 0.5D)); + sender.sendMessage(new TextComponentTranslation("commands.worldborder.get.success", new Object[] {String.format("%.0f", d7)})); + } + } + } + + protected WorldBorder getWorldBorder(MinecraftServer server) + { + return server.worlds[0].getWorldBorder(); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"set", "center", "damage", "warning", "add", "get"}); + } + else if (args.length == 2 && "damage".equals(args[0])) + { + return getListOfStringsMatchingLastWord(args, new String[] {"buffer", "amount"}); + } + else if (args.length >= 2 && args.length <= 3 && "center".equals(args[0])) + { + return getTabCompletionCoordinateXZ(args, 1, targetPos); + } + else + { + return args.length == 2 && "warning".equals(args[0]) ? getListOfStringsMatchingLastWord(args, new String[] {"time", "distance"}) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/CommandXP.java b/build/tmp/recompileMc/sources/net/minecraft/command/CommandXP.java new file mode 100644 index 0000000..00e2c1e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/CommandXP.java @@ -0,0 +1,110 @@ +package net.minecraft.command; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandXP extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "xp"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.xp.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length <= 0) + { + throw new WrongUsageException("commands.xp.usage", new Object[0]); + } + else + { + String s = args[0]; + boolean flag = s.endsWith("l") || s.endsWith("L"); + + if (flag && s.length() > 1) + { + s = s.substring(0, s.length() - 1); + } + + int i = parseInt(s); + boolean flag1 = i < 0; + + if (flag1) + { + i *= -1; + } + + EntityPlayer entityplayer = args.length > 1 ? getPlayer(server, sender, args[1]) : getCommandSenderAsPlayer(sender); + + if (flag) + { + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, entityplayer.experienceLevel); + + if (flag1) + { + entityplayer.addExperienceLevel(-i); + notifyCommandListener(sender, this, "commands.xp.success.negative.levels", new Object[] {i, entityplayer.getName()}); + } + else + { + entityplayer.addExperienceLevel(i); + notifyCommandListener(sender, this, "commands.xp.success.levels", new Object[] {i, entityplayer.getName()}); + } + } + else + { + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, entityplayer.experienceTotal); + + if (flag1) + { + throw new CommandException("commands.xp.failure.widthdrawXp", new Object[0]); + } + + entityplayer.addExperience(i); + notifyCommandListener(sender, this, "commands.xp.success", new Object[] {i, entityplayer.getName()}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 2 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/EntityNotFoundException.java b/build/tmp/recompileMc/sources/net/minecraft/command/EntityNotFoundException.java new file mode 100644 index 0000000..94d8ad5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/EntityNotFoundException.java @@ -0,0 +1,19 @@ +package net.minecraft.command; + +public class EntityNotFoundException extends CommandException +{ + public EntityNotFoundException(String p_i47332_1_) + { + this("commands.generic.entity.notFound", p_i47332_1_); + } + + public EntityNotFoundException(String message, Object... args) + { + super(message, args); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/EntitySelector.java b/build/tmp/recompileMc/sources/net/minecraft/command/EntitySelector.java new file mode 100644 index 0000000..0999f48 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/EntitySelector.java @@ -0,0 +1,885 @@ +package net.minecraft.command; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.base.Splitter; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.Team; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.GameType; +import net.minecraft.world.World; + +public class EntitySelector +{ + /** This matches the at-tokens introduced for command blocks, including their arguments, if any. */ + private static final Pattern TOKEN_PATTERN = Pattern.compile("^@([pares])(?:\\[([^ ]*)\\])?$"); + private static final Splitter COMMA_SPLITTER = Splitter.on(',').omitEmptyStrings(); + private static final Splitter EQUAL_SPLITTER = Splitter.on('=').limit(2); + private static final Set VALID_ARGUMENTS = Sets.newHashSet(); + private static final String ARGUMENT_RANGE_MAX = addArgument("r"); + private static final String ARGUMENT_RANGE_MIN = addArgument("rm"); + private static final String ARGUMENT_LEVEL_MAX = addArgument("l"); + private static final String ARGUMENT_LEVEL_MIN = addArgument("lm"); + private static final String ARGUMENT_COORDINATE_X = addArgument("x"); + private static final String ARGUMENT_COORDINATE_Y = addArgument("y"); + private static final String ARGUMENT_COORDINATE_Z = addArgument("z"); + private static final String ARGUMENT_DELTA_X = addArgument("dx"); + private static final String ARGUMENT_DELTA_Y = addArgument("dy"); + private static final String ARGUMENT_DELTA_Z = addArgument("dz"); + private static final String ARGUMENT_ROTX_MAX = addArgument("rx"); + private static final String ARGUMENT_ROTX_MIN = addArgument("rxm"); + private static final String ARGUMENT_ROTY_MAX = addArgument("ry"); + private static final String ARGUMENT_ROTY_MIN = addArgument("rym"); + private static final String ARGUMENT_COUNT = addArgument("c"); + private static final String ARGUMENT_MODE = addArgument("m"); + private static final String ARGUMENT_TEAM_NAME = addArgument("team"); + private static final String ARGUMENT_PLAYER_NAME = addArgument("name"); + private static final String ARGUMENT_ENTITY_TYPE = addArgument("type"); + private static final String ARGUMENT_ENTITY_TAG = addArgument("tag"); + private static final Predicate IS_VALID_ARGUMENT = new Predicate() + { + public boolean apply(@Nullable String p_apply_1_) + { + return p_apply_1_ != null && (EntitySelector.VALID_ARGUMENTS.contains(p_apply_1_) || p_apply_1_.length() > "score_".length() && p_apply_1_.startsWith("score_")); + } + }; + /** + * A set of arguments that will change the selector's world list to the sender's world instead of all the worlds + * when present + */ + private static final Set WORLD_BINDING_ARGS = Sets.newHashSet(ARGUMENT_COORDINATE_X, ARGUMENT_COORDINATE_Y, ARGUMENT_COORDINATE_Z, ARGUMENT_DELTA_X, ARGUMENT_DELTA_Y, ARGUMENT_DELTA_Z, ARGUMENT_RANGE_MIN, ARGUMENT_RANGE_MAX); + + public static String addArgument(String argument) + { + VALID_ARGUMENTS.add(argument); + return argument; + } + + /** + * Returns the one player that matches the given at-token. Returns null if more than one player matches. + */ + @Nullable + public static EntityPlayerMP matchOnePlayer(ICommandSender sender, String token) throws CommandException + { + return (EntityPlayerMP)matchOneEntity(sender, token, EntityPlayerMP.class); + } + + public static List getPlayers(ICommandSender sender, String token) throws CommandException + { + return matchEntities(sender, token, EntityPlayerMP.class); + } + + /** + * Returns one entity of the given class that matches the given at-token. Returns null if more than one entity + * matches. + */ + @Nullable + public static T matchOneEntity(ICommandSender sender, String token, Class targetClass) throws CommandException + { + List list = matchEntities(sender, token, targetClass); + return (T)(list.size() == 1 ? (Entity)list.get(0) : null); + } + + @Nullable + public static ITextComponent matchEntitiesToTextComponent(ICommandSender sender, String token) throws CommandException + { + List list = matchEntities(sender, token, Entity.class); + + if (list.isEmpty()) + { + return null; + } + else + { + List list1 = Lists.newArrayList(); + + for (Entity entity : list) + { + list1.add(entity.getDisplayName()); + } + + return CommandBase.join(list1); + } + } + + /** + * Returns all entities of the given class that matches the given at-token in a list. + */ + public static List matchEntities(ICommandSender sender, String token, Class targetClass) throws CommandException + { + return net.minecraftforge.common.command.SelectorHandlerManager.matchEntities(sender, token, targetClass); + } + + public static List matchEntitiesDefault(ICommandSender sender, String token, Class targetClass) throws CommandException + { + Matcher matcher = TOKEN_PATTERN.matcher(token); + + if (matcher.matches() && sender.canUseCommand(1, "@")) + { + Map map = getArgumentMap(matcher.group(2)); + + if (!isEntityTypeValid(sender, map)) + { + return Collections.emptyList(); + } + else + { + String s = matcher.group(1); + BlockPos blockpos = getBlockPosFromArguments(map, sender.getPosition()); + Vec3d vec3d = getPosFromArguments(map, sender.getPositionVector()); + List list = getWorlds(sender, map); + List list1 = Lists.newArrayList(); + + for (World world : list) + { + if (world != null) + { + List> list2 = Lists.>newArrayList(); + list2.addAll(getTypePredicates(map, s)); + list2.addAll(getXpLevelPredicates(map)); + list2.addAll(getGamemodePredicates(map)); + list2.addAll(getTeamPredicates(map)); + list2.addAll(getScorePredicates(sender, map)); + list2.addAll(getNamePredicates(map)); + list2.addAll(getTagPredicates(map)); + list2.addAll(getRadiusPredicates(map, vec3d)); + list2.addAll(getRotationsPredicates(map)); + list2.addAll(net.minecraftforge.fml.common.registry.GameRegistry.createEntitySelectors(map, s, sender, vec3d)); + + if ("s".equalsIgnoreCase(s)) + { + Entity entity = sender.getCommandSenderEntity(); + + if (entity != null && targetClass.isAssignableFrom(entity.getClass())) + { + if (map.containsKey(ARGUMENT_DELTA_X) || map.containsKey(ARGUMENT_DELTA_Y) || map.containsKey(ARGUMENT_DELTA_Z)) + { + int i = getInt(map, ARGUMENT_DELTA_X, 0); + int j = getInt(map, ARGUMENT_DELTA_Y, 0); + int k = getInt(map, ARGUMENT_DELTA_Z, 0); + AxisAlignedBB axisalignedbb = getAABB(blockpos, i, j, k); + + if (!axisalignedbb.intersects(entity.getEntityBoundingBox())) + { + return Collections.emptyList(); + } + } + + for (Predicate predicate : list2) + { + if (!predicate.apply(entity)) + { + return Collections.emptyList(); + } + } + + return Lists.newArrayList((T)entity); + } + + return Collections.emptyList(); + } + + list1.addAll(filterResults(map, targetClass, list2, s, world, blockpos)); + } + } + + return getEntitiesFromPredicates(list1, map, sender, targetClass, s, vec3d); + } + } + else + { + return Collections.emptyList(); + } + } + + /** + * Returns the worlds to match the entities in for the specified command sender and token. This returns the sender's + * world if the selector specifies a location or all currently loaded worlds on the server if not. + */ + private static List getWorlds(ICommandSender sender, Map argumentMap) + { + List list = Lists.newArrayList(); + + if (hasArgument(argumentMap)) + { + list.add(sender.getEntityWorld()); + } + else + { + Collections.addAll(list, sender.getServer().worlds); + } + + return list; + } + + /** + * Checks to make sure that the specified type is valid + */ + private static boolean isEntityTypeValid(ICommandSender commandSender, Map params) + { + String s = getArgument(params, ARGUMENT_ENTITY_TYPE); + + if (s == null) + { + return true; + } + else + { + ResourceLocation resourcelocation = new ResourceLocation(s.startsWith("!") ? s.substring(1) : s); + + if (EntityList.isRegistered(resourcelocation)) + { + return true; + } + else + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.generic.entity.invalidType", new Object[] {resourcelocation}); + textcomponenttranslation.getStyle().setColor(TextFormatting.RED); + commandSender.sendMessage(textcomponenttranslation); + return false; + } + } + } + + private static List> getTypePredicates(Map params, String type) + { + String s = getArgument(params, ARGUMENT_ENTITY_TYPE); + + if (s == null || !type.equals("e") && !type.equals("r") && !type.equals("s")) + { + return !type.equals("e") && !type.equals("s") ? Collections.singletonList(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof EntityPlayer; + } + }) : Collections.emptyList(); + } + else + { + final boolean flag = s.startsWith("!"); + final ResourceLocation resourcelocation = new ResourceLocation(flag ? s.substring(1) : s); + return Collections.singletonList(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return EntityList.isMatchingName(p_apply_1_, resourcelocation) != flag; + } + }); + } + } + + private static List> getXpLevelPredicates(Map params) + { + List> list = Lists.>newArrayList(); + final int i = getInt(params, ARGUMENT_LEVEL_MIN, -1); + final int j = getInt(params, ARGUMENT_LEVEL_MAX, -1); + + if (i > -1 || j > -1) + { + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (!(p_apply_1_ instanceof EntityPlayerMP)) + { + return false; + } + else + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)p_apply_1_; + return (i <= -1 || entityplayermp.experienceLevel >= i) && (j <= -1 || entityplayermp.experienceLevel <= j); + } + } + }); + } + + return list; + } + + private static List> getGamemodePredicates(Map params) + { + List> list = Lists.>newArrayList(); + String s = getArgument(params, ARGUMENT_MODE); + + if (s == null) + { + return list; + } + else + { + final boolean flag = s.startsWith("!"); + + if (flag) + { + s = s.substring(1); + } + + GameType gametype; + + try + { + int i = Integer.parseInt(s); + gametype = GameType.parseGameTypeWithDefault(i, GameType.NOT_SET); + } + catch (Throwable var6) + { + gametype = GameType.parseGameTypeWithDefault(s, GameType.NOT_SET); + } + + final GameType type = gametype; + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (!(p_apply_1_ instanceof EntityPlayerMP)) + { + return false; + } + else + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)p_apply_1_; + GameType gametype1 = entityplayermp.interactionManager.getGameType(); + return flag ? gametype1 != type : gametype1 == type; + } + } + }); + return list; + } + } + + private static List> getTeamPredicates(Map params) + { + List> list = Lists.>newArrayList(); + String s = getArgument(params, ARGUMENT_TEAM_NAME); + final boolean flag = s != null && s.startsWith("!"); + + if (flag) + { + s = s.substring(1); + } + + if (s != null) + { + final String s_f_ = s; + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (!(p_apply_1_ instanceof EntityLivingBase)) + { + return false; + } + else + { + EntityLivingBase entitylivingbase = (EntityLivingBase)p_apply_1_; + Team team = entitylivingbase.getTeam(); + String s1 = team == null ? "" : team.getName(); + return s1.equals(s_f_) != flag; + } + } + }); + } + + return list; + } + + private static List> getScorePredicates(final ICommandSender sender, Map params) + { + final Map map = getScoreMap(params); + return (List>)(map.isEmpty() ? Collections.emptyList() : Lists.newArrayList(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else + { + Scoreboard scoreboard = sender.getServer().getWorld(0).getScoreboard(); + + for (Entry entry : map.entrySet()) + { + String s = entry.getKey(); + boolean flag = false; + + if (s.endsWith("_min") && s.length() > 4) + { + flag = true; + s = s.substring(0, s.length() - 4); + } + + ScoreObjective scoreobjective = scoreboard.getObjective(s); + + if (scoreobjective == null) + { + return false; + } + + String s1 = p_apply_1_ instanceof EntityPlayerMP ? p_apply_1_.getName() : p_apply_1_.getCachedUniqueIdString(); + + if (!scoreboard.entityHasObjective(s1, scoreobjective)) + { + return false; + } + + Score score = scoreboard.getOrCreateScore(s1, scoreobjective); + int i = score.getScorePoints(); + + if (i < ((Integer)entry.getValue()).intValue() && flag) + { + return false; + } + + if (i > ((Integer)entry.getValue()).intValue() && !flag) + { + return false; + } + } + + return true; + } + } + })); + } + + private static List> getNamePredicates(Map params) + { + List> list = Lists.>newArrayList(); + String s = getArgument(params, ARGUMENT_PLAYER_NAME); + final boolean flag = s != null && s.startsWith("!"); + + if (flag) + { + s = s.substring(1); + } + + if (s != null) + { + final String s_f_ = s; + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getName().equals(s_f_) != flag; + } + }); + } + + return list; + } + + private static List> getTagPredicates(Map params) + { + List> list = Lists.>newArrayList(); + String s = getArgument(params, ARGUMENT_ENTITY_TAG); + final boolean flag = s != null && s.startsWith("!"); + + if (flag) + { + s = s.substring(1); + } + + if (s != null) + { + final String s_f_ = s; + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else if ("".equals(s_f_)) + { + return p_apply_1_.getTags().isEmpty() != flag; + } + else + { + return p_apply_1_.getTags().contains(s_f_) != flag; + } + } + }); + } + + return list; + } + + private static List> getRadiusPredicates(Map params, final Vec3d pos) + { + double d0 = (double)getInt(params, ARGUMENT_RANGE_MIN, -1); + double d1 = (double)getInt(params, ARGUMENT_RANGE_MAX, -1); + final boolean flag = d0 < -0.5D; + final boolean flag1 = d1 < -0.5D; + + if (flag && flag1) + { + return Collections.>emptyList(); + } + else + { + double d2 = Math.max(d0, 1.0E-4D); + final double d3 = d2 * d2; + double d4 = Math.max(d1, 1.0E-4D); + final double d5 = d4 * d4; + return Lists.newArrayList(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else + { + double d6 = pos.squareDistanceTo(p_apply_1_.posX, p_apply_1_.posY, p_apply_1_.posZ); + return (flag || d6 >= d3) && (flag1 || d6 <= d5); + } + } + }); + } + } + + private static List> getRotationsPredicates(Map params) + { + List> list = Lists.>newArrayList(); + + if (params.containsKey(ARGUMENT_ROTY_MIN) || params.containsKey(ARGUMENT_ROTY_MAX)) + { + final int i = MathHelper.wrapDegrees(getInt(params, ARGUMENT_ROTY_MIN, 0)); + final int j = MathHelper.wrapDegrees(getInt(params, ARGUMENT_ROTY_MAX, 359)); + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else + { + int i1 = MathHelper.wrapDegrees(MathHelper.floor(p_apply_1_.rotationYaw)); + + if (i > j) + { + return i1 >= i || i1 <= j; + } + else + { + return i1 >= i && i1 <= j; + } + } + } + }); + } + + if (params.containsKey(ARGUMENT_ROTX_MIN) || params.containsKey(ARGUMENT_ROTX_MAX)) + { + final int k = MathHelper.wrapDegrees(getInt(params, ARGUMENT_ROTX_MIN, 0)); + final int l = MathHelper.wrapDegrees(getInt(params, ARGUMENT_ROTX_MAX, 359)); + list.add(new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else + { + int i1 = MathHelper.wrapDegrees(MathHelper.floor(p_apply_1_.rotationPitch)); + + if (k > l) + { + return i1 >= k || i1 <= l; + } + else + { + return i1 >= k && i1 <= l; + } + } + } + }); + } + + return list; + } + + /** + * Filters the results based on the paramaters of the selector + */ + private static List filterResults(Map params, Class entityClass, List> inputList, String type, World worldIn, BlockPos position) + { + List list = Lists.newArrayList(); + String s = getArgument(params, ARGUMENT_ENTITY_TYPE); + s = s != null && s.startsWith("!") ? s.substring(1) : s; + boolean flag = !type.equals("e"); + boolean flag1 = type.equals("r") && s != null; + int i = getInt(params, ARGUMENT_DELTA_X, 0); + int j = getInt(params, ARGUMENT_DELTA_Y, 0); + int k = getInt(params, ARGUMENT_DELTA_Z, 0); + int l = getInt(params, ARGUMENT_RANGE_MAX, -1); + Predicate predicate = Predicates.and(inputList); + Predicate predicate1 = Predicates.and(EntitySelectors.IS_ALIVE, predicate); + + if (!params.containsKey(ARGUMENT_DELTA_X) && !params.containsKey(ARGUMENT_DELTA_Y) && !params.containsKey(ARGUMENT_DELTA_Z)) + { + if (l >= 0) + { + AxisAlignedBB axisalignedbb1 = new AxisAlignedBB((double)(position.getX() - l), (double)(position.getY() - l), (double)(position.getZ() - l), (double)(position.getX() + l + 1), (double)(position.getY() + l + 1), (double)(position.getZ() + l + 1)); + + if (flag && !flag1) + { + list.addAll(worldIn.getPlayers(entityClass, predicate1)); + } + else + { + list.addAll(worldIn.getEntitiesWithinAABB(entityClass, axisalignedbb1, predicate1)); + } + } + else if (type.equals("a")) + { + list.addAll(worldIn.getPlayers(entityClass, predicate)); + } + else if (!type.equals("p") && (!type.equals("r") || flag1)) + { + list.addAll(worldIn.getEntities(entityClass, predicate1)); + } + else + { + list.addAll(worldIn.getPlayers(entityClass, predicate1)); + } + } + else + { + final AxisAlignedBB axisalignedbb = getAABB(position, i, j, k); + + if (flag && !flag1) + { + Predicate predicate2 = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ != null && axisalignedbb.intersects(p_apply_1_.getEntityBoundingBox()); + } + }; + list.addAll(worldIn.getPlayers(entityClass, Predicates.and(predicate1, predicate2))); + } + else + { + list.addAll(worldIn.getEntitiesWithinAABB(entityClass, axisalignedbb, predicate1)); + } + } + + return list; + } + + private static List getEntitiesFromPredicates(List matchingEntities, Map params, ICommandSender sender, Class targetClass, String type, final Vec3d pos) + { + int i = getInt(params, ARGUMENT_COUNT, !type.equals("a") && !type.equals("e") ? 1 : 0); + + if (!type.equals("p") && !type.equals("a") && !type.equals("e")) + { + if (type.equals("r")) + { + Collections.shuffle(matchingEntities); + } + } + else + { + Collections.sort(matchingEntities, new Comparator() + { + public int compare(Entity p_compare_1_, Entity p_compare_2_) + { + return ComparisonChain.start().compare(p_compare_1_.getDistanceSq(pos.x, pos.y, pos.z), p_compare_2_.getDistanceSq(pos.x, pos.y, pos.z)).result(); + } + }); + } + + Entity entity = sender.getCommandSenderEntity(); + + if (entity != null && targetClass.isAssignableFrom(entity.getClass()) && i == 1 && matchingEntities.contains(entity) && !"r".equals(type)) + { + matchingEntities = Lists.newArrayList((T)entity); + } + + if (i != 0) + { + if (i < 0) + { + Collections.reverse(matchingEntities); + } + + matchingEntities = matchingEntities.subList(0, Math.min(Math.abs(i), matchingEntities.size())); + } + + return matchingEntities; + } + + private static AxisAlignedBB getAABB(BlockPos pos, int x, int y, int z) + { + boolean flag = x < 0; + boolean flag1 = y < 0; + boolean flag2 = z < 0; + int i = pos.getX() + (flag ? x : 0); + int j = pos.getY() + (flag1 ? y : 0); + int k = pos.getZ() + (flag2 ? z : 0); + int l = pos.getX() + (flag ? 0 : x) + 1; + int i1 = pos.getY() + (flag1 ? 0 : y) + 1; + int j1 = pos.getZ() + (flag2 ? 0 : z) + 1; + return new AxisAlignedBB((double)i, (double)j, (double)k, (double)l, (double)i1, (double)j1); + } + + private static BlockPos getBlockPosFromArguments(Map params, BlockPos pos) + { + return new BlockPos(getInt(params, ARGUMENT_COORDINATE_X, pos.getX()), getInt(params, ARGUMENT_COORDINATE_Y, pos.getY()), getInt(params, ARGUMENT_COORDINATE_Z, pos.getZ())); + } + + private static Vec3d getPosFromArguments(Map params, Vec3d pos) + { + return new Vec3d(getCoordinate(params, ARGUMENT_COORDINATE_X, pos.x, true), getCoordinate(params, ARGUMENT_COORDINATE_Y, pos.y, false), getCoordinate(params, ARGUMENT_COORDINATE_Z, pos.z, true)); + } + + private static double getCoordinate(Map params, String key, double defaultD, boolean offset) + { + return params.containsKey(key) ? (double)MathHelper.getInt(params.get(key), MathHelper.floor(defaultD)) + (offset ? 0.5D : 0.0D) : defaultD; + } + + private static boolean hasArgument(Map params) + { + for (String s : WORLD_BINDING_ARGS) + { + if (params.containsKey(s)) + { + return true; + } + } + + return false; + } + + private static int getInt(Map params, String key, int defaultI) + { + return params.containsKey(key) ? MathHelper.getInt(params.get(key), defaultI) : defaultI; + } + + @Nullable + private static String getArgument(Map params, String key) + { + return params.get(key); + } + + public static Map getScoreMap(Map params) + { + Map map = Maps.newHashMap(); + + for (String s : params.keySet()) + { + if (s.startsWith("score_") && s.length() > "score_".length()) + { + map.put(s.substring("score_".length()), Integer.valueOf(MathHelper.getInt(params.get(s), 1))); + } + } + + return map; + } + + /** + * Returns whether the given pattern can match more than one player. + */ + public static boolean matchesMultiplePlayers(String selectorStr) throws CommandException + { + return net.minecraftforge.common.command.SelectorHandlerManager.matchesMultiplePlayers(selectorStr); + } + + public static boolean matchesMultiplePlayersDefault(String selectorStr) throws CommandException + { + Matcher matcher = TOKEN_PATTERN.matcher(selectorStr); + + if (!matcher.matches()) + { + return false; + } + else + { + Map map = getArgumentMap(matcher.group(2)); + String s = matcher.group(1); + int i = !"a".equals(s) && !"e".equals(s) ? 1 : 0; + return getInt(map, ARGUMENT_COUNT, i) != 1; + } + } + + /** + * Returns whether the given string represents a selector. + */ + public static boolean isSelector(String selectorStr) + { + return net.minecraftforge.common.command.SelectorHandlerManager.isSelector(selectorStr); + } + + public static boolean isSelectorDefault(String selectorStr) + { + return TOKEN_PATTERN.matcher(selectorStr).matches(); + } + + /** + * Parses the given argument string, turning it into a HashMap<String, String> of name->value. + */ + private static Map getArgumentMap(@Nullable String argumentString) throws CommandException + { + Map map = Maps.newHashMap(); + + if (argumentString == null) + { + return map; + } + else + { + for (String s : COMMA_SPLITTER.split(argumentString)) + { + Iterator iterator = EQUAL_SPLITTER.split(s).iterator(); + String s1 = iterator.next(); + + if (!IS_VALID_ARGUMENT.apply(s1)) + { + throw new CommandException("commands.generic.selector_argument", new Object[] {s}); + } + + map.put(s1, iterator.hasNext() ? (String)iterator.next() : ""); + } + + return map; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/FunctionObject.java b/build/tmp/recompileMc/sources/net/minecraft/command/FunctionObject.java new file mode 100644 index 0000000..f7d8caf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/FunctionObject.java @@ -0,0 +1,159 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import java.util.ArrayDeque; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.advancements.FunctionManager; +import net.minecraft.util.ResourceLocation; + +public class FunctionObject +{ + private final FunctionObject.Entry[] entries; + + public FunctionObject(FunctionObject.Entry[] entriesIn) + { + this.entries = entriesIn; + } + + public FunctionObject.Entry[] getEntries() + { + return this.entries; + } + + /** + * Create a Function from the given function definition. + */ + public static FunctionObject create(FunctionManager functionManagerIn, List commands) + { + List list = Lists.newArrayListWithCapacity(commands.size()); + + for (String s : commands) + { + s = s.trim(); + + if (!s.startsWith("#") && !s.isEmpty()) + { + String[] astring = s.split(" ", 2); + String s1 = astring[0]; + + if (!functionManagerIn.getCommandManager().getCommands().containsKey(s1)) + { + if (s1.startsWith("//")) + { + throw new IllegalArgumentException("Unknown or invalid command '" + s1 + "' (if you intended to make a comment, use '#' not '//')"); + } + + if (s1.startsWith("/") && s1.length() > 1) + { + throw new IllegalArgumentException("Unknown or invalid command '" + s1 + "' (did you mean '" + s1.substring(1) + "'? Do not use a preceding forwards slash.)"); + } + + throw new IllegalArgumentException("Unknown or invalid command '" + s1 + "'"); + } + + list.add(new FunctionObject.CommandEntry(s)); + } + } + + return new FunctionObject((FunctionObject.Entry[])list.toArray(new FunctionObject.Entry[list.size()])); + } + + public static class CacheableFunction + { + public static final FunctionObject.CacheableFunction EMPTY = new FunctionObject.CacheableFunction((ResourceLocation)null); + @Nullable + private final ResourceLocation id; + private boolean isValid; + private FunctionObject function; + + public CacheableFunction(@Nullable ResourceLocation idIn) + { + this.id = idIn; + } + + public CacheableFunction(FunctionObject functionIn) + { + this.id = null; + this.function = functionIn; + } + + @Nullable + public FunctionObject get(FunctionManager functionManagerIn) + { + if (!this.isValid) + { + if (this.id != null) + { + this.function = functionManagerIn.getFunction(this.id); + } + + this.isValid = true; + } + + return this.function; + } + + public String toString() + { + return String.valueOf((Object)this.id); + } + } + + public static class CommandEntry implements FunctionObject.Entry + { + private final String command; + + public CommandEntry(String p_i47534_1_) + { + this.command = p_i47534_1_; + } + + public void execute(FunctionManager functionManagerIn, ICommandSender sender, ArrayDeque commandQueue, int maxCommandChainLength) + { + functionManagerIn.getCommandManager().executeCommand(sender, this.command); + } + + public String toString() + { + return "/" + this.command; + } + } + + public interface Entry + { + void execute(FunctionManager functionManagerIn, ICommandSender sender, ArrayDeque commandQueue, int maxCommandChainLength); + } + + public static class FunctionEntry implements FunctionObject.Entry + { + private final FunctionObject.CacheableFunction function; + + public FunctionEntry(FunctionObject functionIn) + { + this.function = new FunctionObject.CacheableFunction(functionIn); + } + + public void execute(FunctionManager functionManagerIn, ICommandSender sender, ArrayDeque commandQueue, int maxCommandChainLength) + { + FunctionObject functionobject = this.function.get(functionManagerIn); + + if (functionobject != null) + { + FunctionObject.Entry[] afunctionobject$entry = functionobject.getEntries(); + int i = maxCommandChainLength - commandQueue.size(); + int j = Math.min(afunctionobject$entry.length, i); + + for (int k = j - 1; k >= 0; --k) + { + commandQueue.addFirst(new FunctionManager.QueuedCommand(functionManagerIn, sender, afunctionobject$entry[k])); + } + } + } + + public String toString() + { + return "/function " + this.function; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/ICommand.java b/build/tmp/recompileMc/sources/net/minecraft/command/ICommand.java new file mode 100644 index 0000000..faca5fb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/ICommand.java @@ -0,0 +1,44 @@ +package net.minecraft.command; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public interface ICommand extends Comparable +{ + /** + * Gets the name of the command + */ + String getName(); + + /** + * Gets the usage string for the command. + */ + String getUsage(ICommandSender sender); + + /** + * Get a list of aliases for this command. Never return null! + */ + List getAliases(); + + /** + * Callback for when the command is executed + */ + void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException; + + /** + * Check if the given ICommandSender has permission to execute this command + */ + boolean checkPermission(MinecraftServer server, ICommandSender sender); + + /** + * Get a list of options for when the user presses the TAB key + */ + List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos); + + /** + * Return whether the specified command parameter index is a username parameter. + */ + boolean isUsernameIndex(String[] args, int index); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/ICommandListener.java b/build/tmp/recompileMc/sources/net/minecraft/command/ICommandListener.java new file mode 100644 index 0000000..2220c0d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/ICommandListener.java @@ -0,0 +1,9 @@ +package net.minecraft.command; + +public interface ICommandListener +{ + /** + * Send an informative message to the server operators + */ + void notifyListener(ICommandSender sender, ICommand command, int flags, String translationKey, Object... translationArgs); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/ICommandManager.java b/build/tmp/recompileMc/sources/net/minecraft/command/ICommandManager.java new file mode 100644 index 0000000..fe17527 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/ICommandManager.java @@ -0,0 +1,33 @@ +package net.minecraft.command; + +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.util.math.BlockPos; + +public interface ICommandManager +{ + /** + * Attempt to execute a command. This method should return the number of times that the command was executed. If the + * command does not exist or if the player does not have permission, 0 will be returned. A number greater than 1 can + * be returned if a player selector is used. + */ + int executeCommand(ICommandSender sender, String rawCommand); + + /** + * Get a list of possible completion options for when the TAB key is pressed. This can be a list of commands if no + * command is specified or a partial command is specified. It could also be a list of arguments for the command that + * is specified. + */ + List getTabCompletions(ICommandSender sender, String input, @Nullable BlockPos pos); + + /** + * Get a list of commands that the given command sender has access to execute. + */ + List getPossibleCommands(ICommandSender sender); + + /** + * Get a Map of all the name to command pairs stored in this command manager. + */ + Map getCommands(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/ICommandSender.java b/build/tmp/recompileMc/sources/net/minecraft/command/ICommandSender.java new file mode 100644 index 0000000..ce4a5eb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/ICommandSender.java @@ -0,0 +1,69 @@ +package net.minecraft.command; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; + +public interface ICommandSender +{ + /** + * Get the name of this object. For players this returns their username + */ + String getName(); + +default ITextComponent getDisplayName() + { + return new TextComponentString(this.getName()); + } + +default void sendMessage(ITextComponent component) + { + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + boolean canUseCommand(int permLevel, String commandName); + +default BlockPos getPosition() + { + return BlockPos.ORIGIN; + } + +default Vec3d getPositionVector() + { + return Vec3d.ZERO; + } + + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, return + * the overworld + */ + World getEntityWorld(); + + @Nullable +default Entity getCommandSenderEntity() + { + return null; + } + +default boolean sendCommandFeedback() + { + return false; + } + +default void setCommandStat(CommandResultStats.Type type, int amount) + { + } + + /** + * Get the Minecraft server instance + */ + @Nullable + MinecraftServer getServer(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/InvalidBlockStateException.java b/build/tmp/recompileMc/sources/net/minecraft/command/InvalidBlockStateException.java new file mode 100644 index 0000000..e56c8b3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/InvalidBlockStateException.java @@ -0,0 +1,19 @@ +package net.minecraft.command; + +public class InvalidBlockStateException extends CommandException +{ + public InvalidBlockStateException() + { + this("commands.generic.blockstate.invalid"); + } + + public InvalidBlockStateException(String message, Object... objects) + { + super(message, objects); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/NumberInvalidException.java b/build/tmp/recompileMc/sources/net/minecraft/command/NumberInvalidException.java new file mode 100644 index 0000000..022b697 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/NumberInvalidException.java @@ -0,0 +1,19 @@ +package net.minecraft.command; + +public class NumberInvalidException extends CommandException +{ + public NumberInvalidException() + { + this("commands.generic.num.invalid"); + } + + public NumberInvalidException(String message, Object... replacements) + { + super(message, replacements); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/PlayerNotFoundException.java b/build/tmp/recompileMc/sources/net/minecraft/command/PlayerNotFoundException.java new file mode 100644 index 0000000..8646799 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/PlayerNotFoundException.java @@ -0,0 +1,19 @@ +package net.minecraft.command; + +public class PlayerNotFoundException extends CommandException +{ + public PlayerNotFoundException(String message) + { + super(message); + } + + public PlayerNotFoundException(String message, Object... replacements) + { + super(message, replacements); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/RecipeCommand.java b/build/tmp/recompileMc/sources/net/minecraft/command/RecipeCommand.java new file mode 100644 index 0000000..5d02ad7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/RecipeCommand.java @@ -0,0 +1,136 @@ +package net.minecraft.command; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; + +public class RecipeCommand extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "recipe"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.recipe.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.recipe.usage", new Object[0]); + } + else + { + boolean flag = "give".equalsIgnoreCase(args[0]); + boolean flag1 = "take".equalsIgnoreCase(args[0]); + + if (!flag && !flag1) + { + throw new WrongUsageException("commands.recipe.usage", new Object[0]); + } + else + { + for (EntityPlayerMP entityplayermp : getPlayers(server, sender, args[1])) + { + if ("*".equals(args[2])) + { + if (flag) + { + entityplayermp.unlockRecipes(this.getRecipes()); + notifyCommandListener(sender, this, "commands.recipe.give.success.all", new Object[] {entityplayermp.getName()}); + } + else + { + entityplayermp.resetRecipes(this.getRecipes()); + notifyCommandListener(sender, this, "commands.recipe.take.success.all", new Object[] {entityplayermp.getName()}); + } + } + else + { + IRecipe irecipe = CraftingManager.getRecipe(new ResourceLocation(args[2])); + + if (irecipe == null) + { + throw new CommandException("commands.recipe.unknownrecipe", new Object[] {args[2]}); + } + + if (irecipe.isDynamic()) + { + throw new CommandException("commands.recipe.unsupported", new Object[] {args[2]}); + } + + List list = Lists.newArrayList(irecipe); + + if (flag == entityplayermp.getRecipeBook().isUnlocked(irecipe)) + { + String s = flag ? "commands.recipe.alreadyHave" : "commands.recipe.dontHave"; + throw new CommandException(s, new Object[] {entityplayermp.getName(), irecipe.getRecipeOutput().getDisplayName()}); + } + + if (flag) + { + entityplayermp.unlockRecipes(list); + notifyCommandListener(sender, this, "commands.recipe.give.success.one", new Object[] {entityplayermp.getName(), irecipe.getRecipeOutput().getDisplayName()}); + } + else + { + entityplayermp.resetRecipes(list); + notifyCommandListener(sender, this, "commands.recipe.take.success.one", new Object[] {irecipe.getRecipeOutput().getDisplayName(), entityplayermp.getName()}); + } + } + } + } + } + } + + private List getRecipes() + { + return Lists.newArrayList(CraftingManager.REGISTRY); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"give", "take"}); + } + else if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length == 3 ? getListOfStringsMatchingLastWord(args, CraftingManager.REGISTRY.getKeys()) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/ServerCommandManager.java b/build/tmp/recompileMc/sources/net/minecraft/command/ServerCommandManager.java new file mode 100644 index 0000000..09f441c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/ServerCommandManager.java @@ -0,0 +1,175 @@ +package net.minecraft.command; + +import net.minecraft.command.server.CommandBanIp; +import net.minecraft.command.server.CommandBanPlayer; +import net.minecraft.command.server.CommandBroadcast; +import net.minecraft.command.server.CommandDeOp; +import net.minecraft.command.server.CommandEmote; +import net.minecraft.command.server.CommandListBans; +import net.minecraft.command.server.CommandListPlayers; +import net.minecraft.command.server.CommandMessage; +import net.minecraft.command.server.CommandMessageRaw; +import net.minecraft.command.server.CommandOp; +import net.minecraft.command.server.CommandPardonIp; +import net.minecraft.command.server.CommandPardonPlayer; +import net.minecraft.command.server.CommandPublishLocalServer; +import net.minecraft.command.server.CommandSaveAll; +import net.minecraft.command.server.CommandSaveOff; +import net.minecraft.command.server.CommandSaveOn; +import net.minecraft.command.server.CommandScoreboard; +import net.minecraft.command.server.CommandSetBlock; +import net.minecraft.command.server.CommandSetDefaultSpawnpoint; +import net.minecraft.command.server.CommandStop; +import net.minecraft.command.server.CommandSummon; +import net.minecraft.command.server.CommandTeleport; +import net.minecraft.command.server.CommandTestFor; +import net.minecraft.command.server.CommandTestForBlock; +import net.minecraft.command.server.CommandWhitelist; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.rcon.RConConsoleSource; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; + +public class ServerCommandManager extends CommandHandler implements ICommandListener +{ + private final MinecraftServer server; + + public ServerCommandManager(MinecraftServer serverIn) + { + this.server = serverIn; + this.registerCommand(new CommandTime()); + this.registerCommand(new CommandGameMode()); + this.registerCommand(new CommandDifficulty()); + this.registerCommand(new CommandDefaultGameMode()); + this.registerCommand(new CommandKill()); + this.registerCommand(new CommandToggleDownfall()); + this.registerCommand(new CommandWeather()); + this.registerCommand(new CommandXP()); + this.registerCommand(new CommandTP()); + this.registerCommand(new CommandTeleport()); + this.registerCommand(new CommandGive()); + this.registerCommand(new CommandReplaceItem()); + this.registerCommand(new CommandStats()); + this.registerCommand(new CommandEffect()); + this.registerCommand(new CommandEnchant()); + this.registerCommand(new CommandParticle()); + this.registerCommand(new CommandEmote()); + this.registerCommand(new CommandShowSeed()); + this.registerCommand(new CommandHelp()); + this.registerCommand(new CommandDebug()); + this.registerCommand(new CommandMessage()); + this.registerCommand(new CommandBroadcast()); + this.registerCommand(new CommandSetSpawnpoint()); + this.registerCommand(new CommandSetDefaultSpawnpoint()); + this.registerCommand(new CommandGameRule()); + this.registerCommand(new CommandClearInventory()); + this.registerCommand(new CommandTestFor()); + this.registerCommand(new CommandSpreadPlayers()); + this.registerCommand(new CommandPlaySound()); + this.registerCommand(new CommandScoreboard()); + this.registerCommand(new CommandExecuteAt()); + this.registerCommand(new CommandTrigger()); + this.registerCommand(new AdvancementCommand()); + this.registerCommand(new RecipeCommand()); + this.registerCommand(new CommandSummon()); + this.registerCommand(new CommandSetBlock()); + this.registerCommand(new CommandFill()); + this.registerCommand(new CommandClone()); + this.registerCommand(new CommandCompare()); + this.registerCommand(new CommandBlockData()); + this.registerCommand(new CommandTestForBlock()); + this.registerCommand(new CommandMessageRaw()); + this.registerCommand(new CommandWorldBorder()); + this.registerCommand(new CommandTitle()); + this.registerCommand(new CommandEntityData()); + this.registerCommand(new CommandStopSound()); + this.registerCommand(new CommandLocate()); + this.registerCommand(new CommandReload()); + this.registerCommand(new CommandFunction()); + + if (serverIn.isDedicatedServer()) + { + this.registerCommand(new CommandOp()); + this.registerCommand(new CommandDeOp()); + this.registerCommand(new CommandStop()); + this.registerCommand(new CommandSaveAll()); + this.registerCommand(new CommandSaveOff()); + this.registerCommand(new CommandSaveOn()); + this.registerCommand(new CommandBanIp()); + this.registerCommand(new CommandPardonIp()); + this.registerCommand(new CommandBanPlayer()); + this.registerCommand(new CommandListBans()); + this.registerCommand(new CommandPardonPlayer()); + this.registerCommand(new CommandServerKick()); + this.registerCommand(new CommandListPlayers()); + this.registerCommand(new CommandWhitelist()); + this.registerCommand(new CommandSetPlayerTimeout()); + } + else + { + this.registerCommand(new CommandPublishLocalServer()); + } + + CommandBase.setCommandListener(this); + } + + /** + * Send an informative message to the server operators + */ + public void notifyListener(ICommandSender sender, ICommand command, int flags, String translationKey, Object... translationArgs) + { + boolean flag = true; + MinecraftServer minecraftserver = this.server; + + if (!sender.sendCommandFeedback()) + { + flag = false; + } + + ITextComponent itextcomponent = new TextComponentTranslation("chat.type.admin", new Object[] {sender.getName(), new TextComponentTranslation(translationKey, translationArgs)}); + itextcomponent.getStyle().setColor(TextFormatting.GRAY); + itextcomponent.getStyle().setItalic(Boolean.valueOf(true)); + + if (flag) + { + for (EntityPlayer entityplayer : minecraftserver.getPlayerList().getPlayers()) + { + if (entityplayer != sender && minecraftserver.getPlayerList().canSendCommands(entityplayer.getGameProfile()) && command.checkPermission(this.server, sender)) + { + boolean flag1 = sender instanceof MinecraftServer && this.server.shouldBroadcastConsoleToOps(); + boolean flag2 = sender instanceof RConConsoleSource && this.server.shouldBroadcastRconToOps(); + + if (flag1 || flag2 || !(sender instanceof RConConsoleSource) && !(sender instanceof MinecraftServer)) + { + entityplayer.sendMessage(itextcomponent); + } + } + } + } + + if (sender != minecraftserver && minecraftserver.worlds[0].getGameRules().getBoolean("logAdminCommands")) + { + minecraftserver.sendMessage(itextcomponent); + } + + boolean flag3 = minecraftserver.worlds[0].getGameRules().getBoolean("sendCommandFeedback"); + + if (sender instanceof CommandBlockBaseLogic) + { + flag3 = ((CommandBlockBaseLogic)sender).shouldTrackOutput(); + } + + if ((flags & 1) != 1 && flag3 || sender instanceof MinecraftServer) + { + sender.sendMessage(new TextComponentTranslation(translationKey, translationArgs)); + } + } + + protected MinecraftServer getServer() + { + return this.server; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/SyntaxErrorException.java b/build/tmp/recompileMc/sources/net/minecraft/command/SyntaxErrorException.java new file mode 100644 index 0000000..1dc1e49 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/SyntaxErrorException.java @@ -0,0 +1,19 @@ +package net.minecraft.command; + +public class SyntaxErrorException extends CommandException +{ + public SyntaxErrorException() + { + this("commands.generic.snytax"); + } + + public SyntaxErrorException(String message, Object... replacements) + { + super(message, replacements); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/WrongUsageException.java b/build/tmp/recompileMc/sources/net/minecraft/command/WrongUsageException.java new file mode 100644 index 0000000..b2b5a78 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/WrongUsageException.java @@ -0,0 +1,14 @@ +package net.minecraft.command; + +public class WrongUsageException extends SyntaxErrorException +{ + public WrongUsageException(String message, Object... replacements) + { + super(message, replacements); + } + + public synchronized Throwable fillInStackTrace() + { + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/command/package-info.java new file mode 100644 index 0000000..095cf9d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.command; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBanIp.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBanIp.java new file mode 100644 index 0000000..b84bc08 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBanIp.java @@ -0,0 +1,121 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.UserListIPBansEntry; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandBanIp extends CommandBase +{ + /** A regex that matches ip addresses */ + public static final Pattern IP_PATTERN = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); + + /** + * Gets the name of the command + */ + public String getName() + { + return "ban-ip"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return server.getPlayerList().getBannedIPs().isLanServer() && super.checkPermission(server, sender); + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.banip.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length >= 1 && args[0].length() > 1) + { + ITextComponent itextcomponent = args.length >= 2 ? getChatComponentFromNthArg(sender, args, 1) : null; + Matcher matcher = IP_PATTERN.matcher(args[0]); + + if (matcher.matches()) + { + this.banIp(server, sender, args[0], itextcomponent == null ? null : itextcomponent.getUnformattedText()); + } + else + { + EntityPlayerMP entityplayermp = server.getPlayerList().getPlayerByUsername(args[0]); + + if (entityplayermp == null) + { + throw new PlayerNotFoundException("commands.banip.invalid"); + } + + this.banIp(server, sender, entityplayermp.getPlayerIP(), itextcomponent == null ? null : itextcomponent.getUnformattedText()); + } + } + else + { + throw new WrongUsageException("commands.banip.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } + + protected void banIp(MinecraftServer server, ICommandSender sender, String ipAddress, @Nullable String banReason) + { + UserListIPBansEntry userlistipbansentry = new UserListIPBansEntry(ipAddress, (Date)null, sender.getName(), (Date)null, banReason); + server.getPlayerList().getBannedIPs().addEntry(userlistipbansentry); + List list = server.getPlayerList().getPlayersMatchingAddress(ipAddress); + String[] astring = new String[list.size()]; + int i = 0; + + for (EntityPlayerMP entityplayermp : list) + { + entityplayermp.connection.disconnect(new TextComponentTranslation("multiplayer.disconnect.ip_banned", new Object[0])); + astring[i++] = entityplayermp.getName(); + } + + if (list.isEmpty()) + { + notifyCommandListener(sender, this, "commands.banip.success", new Object[] {ipAddress}); + } + else + { + notifyCommandListener(sender, this, "commands.banip.success.players", new Object[] {ipAddress, joinNiceString(astring)}); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBanPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBanPlayer.java new file mode 100644 index 0000000..c68c019 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBanPlayer.java @@ -0,0 +1,99 @@ +package net.minecraft.command.server; + +import com.mojang.authlib.GameProfile; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.UserListBansEntry; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandBanPlayer extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "ban"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.ban.usage"; + } + + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return server.getPlayerList().getBannedPlayers().isLanServer() && super.checkPermission(server, sender); + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length >= 1 && args[0].length() > 0) + { + GameProfile gameprofile = server.getPlayerProfileCache().getGameProfileForUsername(args[0]); + + if (gameprofile == null) + { + throw new CommandException("commands.ban.failed", new Object[] {args[0]}); + } + else + { + String s = null; + + if (args.length >= 2) + { + s = getChatComponentFromNthArg(sender, args, 1).getUnformattedText(); + } + + UserListBansEntry userlistbansentry = new UserListBansEntry(gameprofile, (Date)null, sender.getName(), (Date)null, s); + server.getPlayerList().getBannedPlayers().addEntry(userlistbansentry); + EntityPlayerMP entityplayermp = server.getPlayerList().getPlayerByUsername(args[0]); + + if (entityplayermp != null) + { + entityplayermp.connection.disconnect(new TextComponentTranslation("multiplayer.disconnect.banned", new Object[0])); + } + + notifyCommandListener(sender, this, "commands.ban.success", new Object[] {args[0]}); + } + } + else + { + throw new WrongUsageException("commands.ban.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length >= 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBroadcast.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBroadcast.java new file mode 100644 index 0000000..ba692c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandBroadcast.java @@ -0,0 +1,64 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandBroadcast extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "say"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 1; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.say.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length > 0 && args[0].length() > 0) + { + ITextComponent itextcomponent = getChatComponentFromNthArg(sender, args, 0, true); + server.getPlayerList().sendMessage(new TextComponentTranslation("chat.type.announcement", new Object[] {sender.getDisplayName(), itextcomponent})); + } + else + { + throw new WrongUsageException("commands.say.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length >= 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandDeOp.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandDeOp.java new file mode 100644 index 0000000..b85e25d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandDeOp.java @@ -0,0 +1,72 @@ +package net.minecraft.command.server; + +import com.mojang.authlib.GameProfile; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandDeOp extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "deop"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.deop.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length == 1 && args[0].length() > 0) + { + GameProfile gameprofile = server.getPlayerList().getOppedPlayers().getGameProfileFromName(args[0]); + + if (gameprofile == null) + { + throw new CommandException("commands.deop.failed", new Object[] {args[0]}); + } + else + { + server.getPlayerList().removeOp(gameprofile); + notifyCommandListener(sender, this, "commands.deop.success", new Object[] {args[0]}); + } + } + else + { + throw new WrongUsageException("commands.deop.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getPlayerList().getOppedPlayerNames()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandEmote.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandEmote.java new file mode 100644 index 0000000..f5f8a52 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandEmote.java @@ -0,0 +1,64 @@ +package net.minecraft.command.server; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandEmote extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "me"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 0; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.me.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length <= 0) + { + throw new WrongUsageException("commands.me.usage", new Object[0]); + } + else + { + ITextComponent itextcomponent = getChatComponentFromNthArg(sender, args, 0, !(sender instanceof EntityPlayer)); + server.getPlayerList().sendMessage(new TextComponentTranslation("chat.type.emote", new Object[] {sender.getDisplayName(), itextcomponent})); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandListBans.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandListBans.java new file mode 100644 index 0000000..85fbede --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandListBans.java @@ -0,0 +1,72 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandListBans extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "banlist"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return (server.getPlayerList().getBannedIPs().isLanServer() || server.getPlayerList().getBannedPlayers().isLanServer()) && super.checkPermission(server, sender); + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.banlist.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length >= 1 && "ips".equalsIgnoreCase(args[0])) + { + sender.sendMessage(new TextComponentTranslation("commands.banlist.ips", new Object[] {server.getPlayerList().getBannedIPs().getKeys().length})); + sender.sendMessage(new TextComponentString(joinNiceString(server.getPlayerList().getBannedIPs().getKeys()))); + } + else + { + sender.sendMessage(new TextComponentTranslation("commands.banlist.players", new Object[] {server.getPlayerList().getBannedPlayers().getKeys().length})); + sender.sendMessage(new TextComponentString(joinNiceString(server.getPlayerList().getBannedPlayers().getKeys()))); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, new String[] {"players", "ips"}) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandListPlayers.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandListPlayers.java new file mode 100644 index 0000000..9e8b695 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandListPlayers.java @@ -0,0 +1,47 @@ +package net.minecraft.command.server; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandListPlayers extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "list"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 0; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.players.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + int i = server.getCurrentPlayerCount(); + sender.sendMessage(new TextComponentTranslation("commands.players.list", new Object[] {i, server.getMaxPlayers()})); + sender.sendMessage(new TextComponentString(server.getPlayerList().getFormattedListOfPlayers(args.length > 0 && "uuids".equalsIgnoreCase(args[0])))); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, i); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandMessage.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandMessage.java new file mode 100644 index 0000000..6263356 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandMessage.java @@ -0,0 +1,97 @@ +package net.minecraft.command.server; + +import java.util.Arrays; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.PlayerNotFoundException; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; + +public class CommandMessage extends CommandBase +{ + /** + * Get a list of aliases for this command. Never return null! + */ + public List getAliases() + { + return Arrays.asList("w", "msg"); + } + + /** + * Gets the name of the command + */ + public String getName() + { + return "tell"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 0; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.message.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.message.usage", new Object[0]); + } + else + { + EntityPlayer entityplayer = getPlayer(server, sender, args[0]); + + if (entityplayer == sender) + { + throw new PlayerNotFoundException("commands.message.sameTarget"); + } + else + { + ITextComponent itextcomponent = getChatComponentFromNthArg(sender, args, 1, !(sender instanceof EntityPlayer)); + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.message.display.incoming", new Object[] {sender.getDisplayName(), itextcomponent.createCopy()}); + TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation("commands.message.display.outgoing", new Object[] {entityplayer.getDisplayName(), itextcomponent.createCopy()}); + textcomponenttranslation.getStyle().setColor(TextFormatting.GRAY).setItalic(Boolean.valueOf(true)); + textcomponenttranslation1.getStyle().setColor(TextFormatting.GRAY).setItalic(Boolean.valueOf(true)); + entityplayer.sendMessage(textcomponenttranslation); + sender.sendMessage(textcomponenttranslation1); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandMessageRaw.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandMessageRaw.java new file mode 100644 index 0000000..9fb3563 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandMessageRaw.java @@ -0,0 +1,87 @@ +package net.minecraft.command.server; + +import com.google.gson.JsonParseException; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentUtils; + +public class CommandMessageRaw extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "tellraw"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.tellraw.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 2) + { + throw new WrongUsageException("commands.tellraw.usage", new Object[0]); + } + else + { + EntityPlayer entityplayer = getPlayer(server, sender, args[0]); + String s = buildString(args, 1); + + try + { + ITextComponent itextcomponent = ITextComponent.Serializer.jsonToComponent(s); + entityplayer.sendMessage(TextComponentUtils.processComponent(sender, itextcomponent, entityplayer)); + } + catch (JsonParseException jsonparseexception) + { + /** + * Convert a JsonParseException into a user-friendly exception + */ + throw toSyntaxException(jsonparseexception); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandOp.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandOp.java new file mode 100644 index 0000000..1b0a232 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandOp.java @@ -0,0 +1,91 @@ +package net.minecraft.command.server; + +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandOp extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "op"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.op.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length == 1 && args[0].length() > 0) + { + GameProfile gameprofile = server.getPlayerProfileCache().getGameProfileForUsername(args[0]); + + if (gameprofile == null) + { + throw new CommandException("commands.op.failed", new Object[] {args[0]}); + } + else + { + server.getPlayerList().addOp(gameprofile); + notifyCommandListener(sender, this, "commands.op.success", new Object[] {args[0]}); + } + } + else + { + throw new WrongUsageException("commands.op.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + String s = args[args.length - 1]; + List list = Lists.newArrayList(); + + for (GameProfile gameprofile : server.getOnlinePlayerProfiles()) + { + if (!server.getPlayerList().canSendCommands(gameprofile) && doesStringStartWith(s, gameprofile.getName())) + { + list.add(gameprofile.getName()); + } + } + + return list; + } + else + { + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPardonIp.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPardonIp.java new file mode 100644 index 0000000..61c2060 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPardonIp.java @@ -0,0 +1,81 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.SyntaxErrorException; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandPardonIp extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "pardon-ip"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return server.getPlayerList().getBannedIPs().isLanServer() && super.checkPermission(server, sender); + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.unbanip.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length == 1 && args[0].length() > 1) + { + Matcher matcher = CommandBanIp.IP_PATTERN.matcher(args[0]); + + if (matcher.matches()) + { + server.getPlayerList().getBannedIPs().removeEntry(args[0]); + notifyCommandListener(sender, this, "commands.unbanip.success", new Object[] {args[0]}); + } + else + { + throw new SyntaxErrorException("commands.unbanip.invalid", new Object[0]); + } + } + else + { + throw new WrongUsageException("commands.unbanip.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getPlayerList().getBannedIPs().getKeys()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPardonPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPardonPlayer.java new file mode 100644 index 0000000..08e7076 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPardonPlayer.java @@ -0,0 +1,80 @@ +package net.minecraft.command.server; + +import com.mojang.authlib.GameProfile; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandPardonPlayer extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "pardon"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.unban.usage"; + } + + /** + * Check if the given ICommandSender has permission to execute this command + */ + public boolean checkPermission(MinecraftServer server, ICommandSender sender) + { + return server.getPlayerList().getBannedPlayers().isLanServer() && super.checkPermission(server, sender); + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length == 1 && args[0].length() > 0) + { + GameProfile gameprofile = server.getPlayerList().getBannedPlayers().getBannedProfile(args[0]); + + if (gameprofile == null) + { + throw new CommandException("commands.unban.failed", new Object[] {args[0]}); + } + else + { + server.getPlayerList().getBannedPlayers().removeEntry(gameprofile); + notifyCommandListener(sender, this, "commands.unban.success", new Object[] {args[0]}); + } + } + else + { + throw new WrongUsageException("commands.unban.usage", new Object[0]); + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getPlayerList().getBannedPlayers().getKeys()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPublishLocalServer.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPublishLocalServer.java new file mode 100644 index 0000000..b89fcad --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandPublishLocalServer.java @@ -0,0 +1,43 @@ +package net.minecraft.command.server; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.GameType; + +public class CommandPublishLocalServer extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "publish"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.publish.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + String s = server.shareToLAN(GameType.SURVIVAL, false); + + if (s != null) + { + notifyCommandListener(sender, this, "commands.publish.started", new Object[] {s}); + } + else + { + notifyCommandListener(sender, this, "commands.publish.failed", new Object[0]); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveAll.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveAll.java new file mode 100644 index 0000000..db071b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveAll.java @@ -0,0 +1,95 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.IProgressUpdate; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.MinecraftException; +import net.minecraft.world.WorldServer; + +public class CommandSaveAll extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "save-all"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.save.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + sender.sendMessage(new TextComponentTranslation("commands.save.start", new Object[0])); + + if (server.getPlayerList() != null) + { + server.getPlayerList().saveAllPlayerData(); + } + + try + { + for (int i = 0; i < server.worlds.length; ++i) + { + if (server.worlds[i] != null) + { + WorldServer worldserver = server.worlds[i]; + boolean flag = worldserver.disableLevelSaving; + worldserver.disableLevelSaving = false; + worldserver.saveAllChunks(true, (IProgressUpdate)null); + worldserver.disableLevelSaving = flag; + } + } + + if (args.length > 0 && "flush".equals(args[0])) + { + sender.sendMessage(new TextComponentTranslation("commands.save.flushStart", new Object[0])); + + for (int j = 0; j < server.worlds.length; ++j) + { + if (server.worlds[j] != null) + { + WorldServer worldserver1 = server.worlds[j]; + boolean flag1 = worldserver1.disableLevelSaving; + worldserver1.disableLevelSaving = false; + worldserver1.flushToDisk(); + worldserver1.disableLevelSaving = flag1; + } + } + + sender.sendMessage(new TextComponentTranslation("commands.save.flushEnd", new Object[0])); + } + } + catch (MinecraftException minecraftexception) + { + notifyCommandListener(sender, this, "commands.save.failed", new Object[] {minecraftexception.getMessage()}); + return; + } + + notifyCommandListener(sender, this, "commands.save.success", new Object[0]); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, new String[] {"flush"}) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveOff.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveOff.java new file mode 100644 index 0000000..e25b75f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveOff.java @@ -0,0 +1,57 @@ +package net.minecraft.command.server; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.WorldServer; + +public class CommandSaveOff extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "save-off"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.save-off.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + boolean flag = false; + + for (int i = 0; i < server.worlds.length; ++i) + { + if (server.worlds[i] != null) + { + WorldServer worldserver = server.worlds[i]; + + if (!worldserver.disableLevelSaving) + { + worldserver.disableLevelSaving = true; + flag = true; + } + } + } + + if (flag) + { + notifyCommandListener(sender, this, "commands.save.disabled", new Object[0]); + } + else + { + throw new CommandException("commands.save-off.alreadyOff", new Object[0]); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveOn.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveOn.java new file mode 100644 index 0000000..accc776 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSaveOn.java @@ -0,0 +1,57 @@ +package net.minecraft.command.server; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.WorldServer; + +public class CommandSaveOn extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "save-on"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.save-on.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + boolean flag = false; + + for (int i = 0; i < server.worlds.length; ++i) + { + if (server.worlds[i] != null) + { + WorldServer worldserver = server.worlds[i]; + + if (worldserver.disableLevelSaving) + { + worldserver.disableLevelSaving = false; + flag = true; + } + } + } + + if (flag) + { + notifyCommandListener(sender, this, "commands.save.enabled", new Object[0]); + } + else + { + throw new CommandException("commands.save-on.alreadyOn", new Object[0]); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandScoreboard.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandScoreboard.java new file mode 100644 index 0000000..85a42b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandScoreboard.java @@ -0,0 +1,1493 @@ +package net.minecraft.command.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.EntitySelector; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.SyntaxErrorException; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.Team; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; + +public class CommandScoreboard extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "scoreboard"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.scoreboard.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (!this.handleUserWildcards(server, sender, args)) + { + if (args.length < 1) + { + throw new WrongUsageException("commands.scoreboard.usage", new Object[0]); + } + else + { + if ("objectives".equalsIgnoreCase(args[0])) + { + if (args.length == 1) + { + throw new WrongUsageException("commands.scoreboard.objectives.usage", new Object[0]); + } + + if ("list".equalsIgnoreCase(args[1])) + { + this.listObjectives(sender, server); + } + else if ("add".equalsIgnoreCase(args[1])) + { + if (args.length < 4) + { + throw new WrongUsageException("commands.scoreboard.objectives.add.usage", new Object[0]); + } + + this.addObjective(sender, args, 2, server); + } + else if ("remove".equalsIgnoreCase(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.scoreboard.objectives.remove.usage", new Object[0]); + } + + this.removeObjective(sender, args[2], server); + } + else + { + if (!"setdisplay".equalsIgnoreCase(args[1])) + { + throw new WrongUsageException("commands.scoreboard.objectives.usage", new Object[0]); + } + + if (args.length != 3 && args.length != 4) + { + throw new WrongUsageException("commands.scoreboard.objectives.setdisplay.usage", new Object[0]); + } + + this.setDisplayObjective(sender, args, 2, server); + } + } + else if ("players".equalsIgnoreCase(args[0])) + { + if (args.length == 1) + { + throw new WrongUsageException("commands.scoreboard.players.usage", new Object[0]); + } + + if ("list".equalsIgnoreCase(args[1])) + { + if (args.length > 3) + { + throw new WrongUsageException("commands.scoreboard.players.list.usage", new Object[0]); + } + + this.listPlayers(sender, args, 2, server); + } + else if ("add".equalsIgnoreCase(args[1])) + { + if (args.length < 5) + { + throw new WrongUsageException("commands.scoreboard.players.add.usage", new Object[0]); + } + + this.addPlayerScore(sender, args, 2, server); + } + else if ("remove".equalsIgnoreCase(args[1])) + { + if (args.length < 5) + { + throw new WrongUsageException("commands.scoreboard.players.remove.usage", new Object[0]); + } + + this.addPlayerScore(sender, args, 2, server); + } + else if ("set".equalsIgnoreCase(args[1])) + { + if (args.length < 5) + { + throw new WrongUsageException("commands.scoreboard.players.set.usage", new Object[0]); + } + + this.addPlayerScore(sender, args, 2, server); + } + else if ("reset".equalsIgnoreCase(args[1])) + { + if (args.length != 3 && args.length != 4) + { + throw new WrongUsageException("commands.scoreboard.players.reset.usage", new Object[0]); + } + + this.resetPlayerScore(sender, args, 2, server); + } + else if ("enable".equalsIgnoreCase(args[1])) + { + if (args.length != 4) + { + throw new WrongUsageException("commands.scoreboard.players.enable.usage", new Object[0]); + } + + this.enablePlayerTrigger(sender, args, 2, server); + } + else if ("test".equalsIgnoreCase(args[1])) + { + if (args.length != 5 && args.length != 6) + { + throw new WrongUsageException("commands.scoreboard.players.test.usage", new Object[0]); + } + + this.testPlayerScore(sender, args, 2, server); + } + else if ("operation".equalsIgnoreCase(args[1])) + { + if (args.length != 7) + { + throw new WrongUsageException("commands.scoreboard.players.operation.usage", new Object[0]); + } + + this.applyPlayerOperation(sender, args, 2, server); + } + else + { + if (!"tag".equalsIgnoreCase(args[1])) + { + throw new WrongUsageException("commands.scoreboard.players.usage", new Object[0]); + } + + if (args.length < 4) + { + throw new WrongUsageException("commands.scoreboard.players.tag.usage", new Object[0]); + } + + this.applyPlayerTag(server, sender, args, 2); + } + } + else + { + if (!"teams".equalsIgnoreCase(args[0])) + { + throw new WrongUsageException("commands.scoreboard.usage", new Object[0]); + } + + if (args.length == 1) + { + throw new WrongUsageException("commands.scoreboard.teams.usage", new Object[0]); + } + + if ("list".equalsIgnoreCase(args[1])) + { + if (args.length > 3) + { + throw new WrongUsageException("commands.scoreboard.teams.list.usage", new Object[0]); + } + + this.listTeams(sender, args, 2, server); + } + else if ("add".equalsIgnoreCase(args[1])) + { + if (args.length < 3) + { + throw new WrongUsageException("commands.scoreboard.teams.add.usage", new Object[0]); + } + + this.addTeam(sender, args, 2, server); + } + else if ("remove".equalsIgnoreCase(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.scoreboard.teams.remove.usage", new Object[0]); + } + + this.removeTeam(sender, args, 2, server); + } + else if ("empty".equalsIgnoreCase(args[1])) + { + if (args.length != 3) + { + throw new WrongUsageException("commands.scoreboard.teams.empty.usage", new Object[0]); + } + + this.emptyTeam(sender, args, 2, server); + } + else if ("join".equalsIgnoreCase(args[1])) + { + if (args.length < 4 && (args.length != 3 || !(sender instanceof EntityPlayer))) + { + throw new WrongUsageException("commands.scoreboard.teams.join.usage", new Object[0]); + } + + this.joinTeam(sender, args, 2, server); + } + else if ("leave".equalsIgnoreCase(args[1])) + { + if (args.length < 3 && !(sender instanceof EntityPlayer)) + { + throw new WrongUsageException("commands.scoreboard.teams.leave.usage", new Object[0]); + } + + this.leaveTeam(sender, args, 2, server); + } + else + { + if (!"option".equalsIgnoreCase(args[1])) + { + throw new WrongUsageException("commands.scoreboard.teams.usage", new Object[0]); + } + + if (args.length != 4 && args.length != 5) + { + throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); + } + + this.setTeamOption(sender, args, 2, server); + } + } + } + } + } + + private boolean handleUserWildcards(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + int i = -1; + + for (int j = 0; j < args.length; ++j) + { + if (this.isUsernameIndex(args, j) && "*".equals(args[j])) + { + if (i >= 0) + { + throw new CommandException("commands.scoreboard.noMultiWildcard", new Object[0]); + } + + i = j; + } + } + + if (i < 0) + { + return false; + } + else + { + List list1 = Lists.newArrayList(this.getScoreboard(server).getObjectiveNames()); + String s = args[i]; + List list = Lists.newArrayList(); + + for (String s1 : list1) + { + args[i] = s1; + + try + { + this.execute(server, sender, args); + list.add(s1); + } + catch (CommandException commandexception) + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation(commandexception.getMessage(), commandexception.getErrorObjects()); + textcomponenttranslation.getStyle().setColor(TextFormatting.RED); + sender.sendMessage(textcomponenttranslation); + } + } + + args[i] = s; + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, list.size()); + + if (list.isEmpty()) + { + throw new WrongUsageException("commands.scoreboard.allMatchesFailed", new Object[0]); + } + else + { + return true; + } + } + } + + protected Scoreboard getScoreboard(MinecraftServer server) + { + return server.getWorld(0).getScoreboard(); + } + + protected ScoreObjective convertToObjective(String name, boolean forWrite, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + ScoreObjective scoreobjective = scoreboard.getObjective(name); + + if (scoreobjective == null) + { + throw new CommandException("commands.scoreboard.objectiveNotFound", new Object[] {name}); + } + else if (forWrite && scoreobjective.getCriteria().isReadOnly()) + { + throw new CommandException("commands.scoreboard.objectiveReadOnly", new Object[] {name}); + } + else + { + return scoreobjective; + } + } + + protected ScorePlayerTeam convertToTeam(String name, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + ScorePlayerTeam scoreplayerteam = scoreboard.getTeam(name); + + if (scoreplayerteam == null) + { + throw new CommandException("commands.scoreboard.teamNotFound", new Object[] {name}); + } + else + { + return scoreplayerteam; + } + } + + protected void addObjective(ICommandSender sender, String[] commandArgs, int argStartIndex, MinecraftServer server) throws CommandException + { + String s = commandArgs[argStartIndex++]; + String s1 = commandArgs[argStartIndex++]; + Scoreboard scoreboard = this.getScoreboard(server); + IScoreCriteria iscorecriteria = IScoreCriteria.INSTANCES.get(s1); + + if (iscorecriteria == null) + { + throw new WrongUsageException("commands.scoreboard.objectives.add.wrongType", new Object[] {s1}); + } + else if (scoreboard.getObjective(s) != null) + { + throw new CommandException("commands.scoreboard.objectives.add.alreadyExists", new Object[] {s}); + } + else if (s.length() > 16) + { + throw new SyntaxErrorException("commands.scoreboard.objectives.add.tooLong", new Object[] {s, Integer.valueOf(16)}); + } + else if (s.isEmpty()) + { + throw new WrongUsageException("commands.scoreboard.objectives.add.usage", new Object[0]); + } + else + { + if (commandArgs.length > argStartIndex) + { + String s2 = getChatComponentFromNthArg(sender, commandArgs, argStartIndex).getUnformattedText(); + + if (s2.length() > 32) + { + throw new SyntaxErrorException("commands.scoreboard.objectives.add.displayTooLong", new Object[] {s2, Integer.valueOf(32)}); + } + + if (s2.isEmpty()) + { + scoreboard.addScoreObjective(s, iscorecriteria); + } + else + { + scoreboard.addScoreObjective(s, iscorecriteria).setDisplayName(s2); + } + } + else + { + scoreboard.addScoreObjective(s, iscorecriteria); + } + + notifyCommandListener(sender, this, "commands.scoreboard.objectives.add.success", new Object[] {s}); + } + } + + protected void addTeam(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + String s = args[startIndex++]; + Scoreboard scoreboard = this.getScoreboard(server); + + if (scoreboard.getTeam(s) != null) + { + throw new CommandException("commands.scoreboard.teams.add.alreadyExists", new Object[] {s}); + } + else if (s.length() > 16) + { + throw new SyntaxErrorException("commands.scoreboard.teams.add.tooLong", new Object[] {s, Integer.valueOf(16)}); + } + else if (s.isEmpty()) + { + throw new WrongUsageException("commands.scoreboard.teams.add.usage", new Object[0]); + } + else + { + if (args.length > startIndex) + { + String s1 = getChatComponentFromNthArg(sender, args, startIndex).getUnformattedText(); + + if (s1.length() > 32) + { + throw new SyntaxErrorException("commands.scoreboard.teams.add.displayTooLong", new Object[] {s1, Integer.valueOf(32)}); + } + + if (s1.isEmpty()) + { + scoreboard.createTeam(s); + } + else + { + scoreboard.createTeam(s).setDisplayName(s1); + } + } + else + { + scoreboard.createTeam(s); + } + + notifyCommandListener(sender, this, "commands.scoreboard.teams.add.success", new Object[] {s}); + } + } + + protected void setTeamOption(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + ScorePlayerTeam scoreplayerteam = this.convertToTeam(args[startIndex++], server); + + if (scoreplayerteam != null) + { + String s = args[startIndex++].toLowerCase(Locale.ROOT); + + if (!"color".equalsIgnoreCase(s) && !"friendlyfire".equalsIgnoreCase(s) && !"seeFriendlyInvisibles".equalsIgnoreCase(s) && !"nametagVisibility".equalsIgnoreCase(s) && !"deathMessageVisibility".equalsIgnoreCase(s) && !"collisionRule".equalsIgnoreCase(s)) + { + throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); + } + else if (args.length == 4) + { + if ("color".equalsIgnoreCase(s)) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceStringFromCollection(TextFormatting.getValidValues(true, false))}); + } + else if (!"friendlyfire".equalsIgnoreCase(s) && !"seeFriendlyInvisibles".equalsIgnoreCase(s)) + { + if (!"nametagVisibility".equalsIgnoreCase(s) && !"deathMessageVisibility".equalsIgnoreCase(s)) + { + if ("collisionRule".equalsIgnoreCase(s)) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceString(Team.CollisionRule.getNames())}); + } + else + { + throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); + } + } + else + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceString(Team.EnumVisible.getNames())}); + } + } + else + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceStringFromCollection(Arrays.asList("true", "false"))}); + } + } + else + { + String s1 = args[startIndex]; + + if ("color".equalsIgnoreCase(s)) + { + TextFormatting textformatting = TextFormatting.getValueByName(s1); + + if (textformatting == null || textformatting.isFancyStyling()) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceStringFromCollection(TextFormatting.getValidValues(true, false))}); + } + + scoreplayerteam.setColor(textformatting); + scoreplayerteam.setPrefix(textformatting.toString()); + scoreplayerteam.setSuffix(TextFormatting.RESET.toString()); + } + else if ("friendlyfire".equalsIgnoreCase(s)) + { + if (!"true".equalsIgnoreCase(s1) && !"false".equalsIgnoreCase(s1)) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceStringFromCollection(Arrays.asList("true", "false"))}); + } + + scoreplayerteam.setAllowFriendlyFire("true".equalsIgnoreCase(s1)); + } + else if ("seeFriendlyInvisibles".equalsIgnoreCase(s)) + { + if (!"true".equalsIgnoreCase(s1) && !"false".equalsIgnoreCase(s1)) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceStringFromCollection(Arrays.asList("true", "false"))}); + } + + scoreplayerteam.setSeeFriendlyInvisiblesEnabled("true".equalsIgnoreCase(s1)); + } + else if ("nametagVisibility".equalsIgnoreCase(s)) + { + Team.EnumVisible team$enumvisible = Team.EnumVisible.getByName(s1); + + if (team$enumvisible == null) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceString(Team.EnumVisible.getNames())}); + } + + scoreplayerteam.setNameTagVisibility(team$enumvisible); + } + else if ("deathMessageVisibility".equalsIgnoreCase(s)) + { + Team.EnumVisible team$enumvisible1 = Team.EnumVisible.getByName(s1); + + if (team$enumvisible1 == null) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceString(Team.EnumVisible.getNames())}); + } + + scoreplayerteam.setDeathMessageVisibility(team$enumvisible1); + } + else if ("collisionRule".equalsIgnoreCase(s)) + { + Team.CollisionRule team$collisionrule = Team.CollisionRule.getByName(s1); + + if (team$collisionrule == null) + { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[] {s, joinNiceString(Team.CollisionRule.getNames())}); + } + + scoreplayerteam.setCollisionRule(team$collisionrule); + } + + notifyCommandListener(sender, this, "commands.scoreboard.teams.option.success", new Object[] {s, scoreplayerteam.getName(), s1}); + } + } + } + + protected void removeTeam(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + ScorePlayerTeam scoreplayerteam = this.convertToTeam(args[startIndex], server); + + if (scoreplayerteam != null) + { + scoreboard.removeTeam(scoreplayerteam); + notifyCommandListener(sender, this, "commands.scoreboard.teams.remove.success", new Object[] {scoreplayerteam.getName()}); + } + } + + protected void listTeams(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + + if (args.length > startIndex) + { + ScorePlayerTeam scoreplayerteam = this.convertToTeam(args[startIndex], server); + + if (scoreplayerteam == null) + { + return; + } + + Collection collection = scoreplayerteam.getMembershipCollection(); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, collection.size()); + + if (collection.isEmpty()) + { + throw new CommandException("commands.scoreboard.teams.list.player.empty", new Object[] {scoreplayerteam.getName()}); + } + + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.scoreboard.teams.list.player.count", new Object[] {collection.size(), scoreplayerteam.getName()}); + textcomponenttranslation.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation); + sender.sendMessage(new TextComponentString(joinNiceString(collection.toArray()))); + } + else + { + Collection collection1 = scoreboard.getTeams(); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, collection1.size()); + + if (collection1.isEmpty()) + { + throw new CommandException("commands.scoreboard.teams.list.empty", new Object[0]); + } + + TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation("commands.scoreboard.teams.list.count", new Object[] {collection1.size()}); + textcomponenttranslation1.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation1); + + for (ScorePlayerTeam scoreplayerteam1 : collection1) + { + sender.sendMessage(new TextComponentTranslation("commands.scoreboard.teams.list.entry", new Object[] {scoreplayerteam1.getName(), scoreplayerteam1.getDisplayName(), scoreplayerteam1.getMembershipCollection().size()})); + } + } + } + + protected void joinTeam(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + String s = args[startIndex++]; + Set set = Sets.newHashSet(); + Set set1 = Sets.newHashSet(); + + if (sender instanceof EntityPlayer && startIndex == args.length) + { + String s4 = getCommandSenderAsPlayer(sender).getName(); + + if (scoreboard.addPlayerToTeam(s4, s)) + { + set.add(s4); + } + else + { + set1.add(s4); + } + } + else + { + while (startIndex < args.length) + { + String s1 = args[startIndex++]; + + if (EntitySelector.isSelector(s1)) + { + for (Entity entity : getEntityList(server, sender, s1)) + { + String s3 = getEntityName(server, sender, entity.getCachedUniqueIdString()); + + if (scoreboard.addPlayerToTeam(s3, s)) + { + set.add(s3); + } + else + { + set1.add(s3); + } + } + } + else + { + String s2 = getEntityName(server, sender, s1); + + if (scoreboard.addPlayerToTeam(s2, s)) + { + set.add(s2); + } + else + { + set1.add(s2); + } + } + } + } + + if (!set.isEmpty()) + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, set.size()); + notifyCommandListener(sender, this, "commands.scoreboard.teams.join.success", new Object[] {set.size(), s, joinNiceString(set.toArray(new String[set.size()]))}); + } + + if (!set1.isEmpty()) + { + throw new CommandException("commands.scoreboard.teams.join.failure", new Object[] {set1.size(), s, joinNiceString(set1.toArray(new String[set1.size()]))}); + } + } + + protected void leaveTeam(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + Set set = Sets.newHashSet(); + Set set1 = Sets.newHashSet(); + + if (sender instanceof EntityPlayer && startIndex == args.length) + { + String s3 = getCommandSenderAsPlayer(sender).getName(); + + if (scoreboard.removePlayerFromTeams(s3)) + { + set.add(s3); + } + else + { + set1.add(s3); + } + } + else + { + while (startIndex < args.length) + { + String s = args[startIndex++]; + + if (EntitySelector.isSelector(s)) + { + for (Entity entity : getEntityList(server, sender, s)) + { + String s2 = getEntityName(server, sender, entity.getCachedUniqueIdString()); + + if (scoreboard.removePlayerFromTeams(s2)) + { + set.add(s2); + } + else + { + set1.add(s2); + } + } + } + else + { + String s1 = getEntityName(server, sender, s); + + if (scoreboard.removePlayerFromTeams(s1)) + { + set.add(s1); + } + else + { + set1.add(s1); + } + } + } + } + + if (!set.isEmpty()) + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, set.size()); + notifyCommandListener(sender, this, "commands.scoreboard.teams.leave.success", new Object[] {set.size(), joinNiceString(set.toArray(new String[set.size()]))}); + } + + if (!set1.isEmpty()) + { + throw new CommandException("commands.scoreboard.teams.leave.failure", new Object[] {set1.size(), joinNiceString(set1.toArray(new String[set1.size()]))}); + } + } + + protected void emptyTeam(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + ScorePlayerTeam scoreplayerteam = this.convertToTeam(args[startIndex], server); + + if (scoreplayerteam != null) + { + Collection collection = Lists.newArrayList(scoreplayerteam.getMembershipCollection()); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_ENTITIES, collection.size()); + + if (collection.isEmpty()) + { + throw new CommandException("commands.scoreboard.teams.empty.alreadyEmpty", new Object[] {scoreplayerteam.getName()}); + } + else + { + for (String s : collection) + { + scoreboard.removePlayerFromTeam(s, scoreplayerteam); + } + + notifyCommandListener(sender, this, "commands.scoreboard.teams.empty.success", new Object[] {collection.size(), scoreplayerteam.getName()}); + } + } + } + + protected void removeObjective(ICommandSender sender, String name, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + ScoreObjective scoreobjective = this.convertToObjective(name, false, server); + scoreboard.removeObjective(scoreobjective); + notifyCommandListener(sender, this, "commands.scoreboard.objectives.remove.success", new Object[] {name}); + } + + protected void listObjectives(ICommandSender sender, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + Collection collection = scoreboard.getScoreObjectives(); + + if (collection.isEmpty()) + { + throw new CommandException("commands.scoreboard.objectives.list.empty", new Object[0]); + } + else + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.scoreboard.objectives.list.count", new Object[] {collection.size()}); + textcomponenttranslation.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation); + + for (ScoreObjective scoreobjective : collection) + { + sender.sendMessage(new TextComponentTranslation("commands.scoreboard.objectives.list.entry", new Object[] {scoreobjective.getName(), scoreobjective.getDisplayName(), scoreobjective.getCriteria().getName()})); + } + } + } + + protected void setDisplayObjective(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + String s = args[startIndex++]; + int i = Scoreboard.getObjectiveDisplaySlotNumber(s); + ScoreObjective scoreobjective = null; + + if (args.length == 4) + { + scoreobjective = this.convertToObjective(args[startIndex], false, server); + } + + if (i < 0) + { + throw new CommandException("commands.scoreboard.objectives.setdisplay.invalidSlot", new Object[] {s}); + } + else + { + scoreboard.setObjectiveInDisplaySlot(i, scoreobjective); + + if (scoreobjective != null) + { + notifyCommandListener(sender, this, "commands.scoreboard.objectives.setdisplay.successSet", new Object[] {Scoreboard.getObjectiveDisplaySlot(i), scoreobjective.getName()}); + } + else + { + notifyCommandListener(sender, this, "commands.scoreboard.objectives.setdisplay.successCleared", new Object[] {Scoreboard.getObjectiveDisplaySlot(i)}); + } + } + } + + protected void listPlayers(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + + if (args.length > startIndex) + { + String s = getEntityName(server, sender, args[startIndex]); + Map map = scoreboard.getObjectivesForEntity(s); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, map.size()); + + if (map.isEmpty()) + { + throw new CommandException("commands.scoreboard.players.list.player.empty", new Object[] {s}); + } + + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.scoreboard.players.list.player.count", new Object[] {map.size(), s}); + textcomponenttranslation.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation); + + for (Score score : map.values()) + { + sender.sendMessage(new TextComponentTranslation("commands.scoreboard.players.list.player.entry", new Object[] {score.getScorePoints(), score.getObjective().getDisplayName(), score.getObjective().getName()})); + } + } + else + { + Collection collection = scoreboard.getObjectiveNames(); + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, collection.size()); + + if (collection.isEmpty()) + { + throw new CommandException("commands.scoreboard.players.list.empty", new Object[0]); + } + + TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation("commands.scoreboard.players.list.count", new Object[] {collection.size()}); + textcomponenttranslation1.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation1); + sender.sendMessage(new TextComponentString(joinNiceString(collection.toArray()))); + } + } + + protected void addPlayerScore(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + String s = args[startIndex - 1]; + int i = startIndex; + String s1 = getEntityName(server, sender, args[startIndex++]); + + if (s1.length() > 40) + { + throw new SyntaxErrorException("commands.scoreboard.players.name.tooLong", new Object[] {s1, Integer.valueOf(40)}); + } + else + { + ScoreObjective scoreobjective = this.convertToObjective(args[startIndex++], true, server); + int j = "set".equalsIgnoreCase(s) ? parseInt(args[startIndex++]) : parseInt(args[startIndex++], 0); + + if (args.length > startIndex) + { + Entity entity = getEntity(server, sender, args[i]); + + try + { + NBTTagCompound nbttagcompound = JsonToNBT.getTagFromJson(buildString(args, startIndex)); + NBTTagCompound nbttagcompound1 = entityToNBT(entity); + + if (!NBTUtil.areNBTEquals(nbttagcompound, nbttagcompound1, true)) + { + throw new CommandException("commands.scoreboard.players.set.tagMismatch", new Object[] {s1}); + } + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.scoreboard.players.set.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + Scoreboard scoreboard = this.getScoreboard(server); + Score score = scoreboard.getOrCreateScore(s1, scoreobjective); + + if ("set".equalsIgnoreCase(s)) + { + score.setScorePoints(j); + } + else if ("add".equalsIgnoreCase(s)) + { + score.increaseScore(j); + } + else + { + score.decreaseScore(j); + } + + notifyCommandListener(sender, this, "commands.scoreboard.players.set.success", new Object[] {scoreobjective.getName(), s1, score.getScorePoints()}); + } + } + + protected void resetPlayerScore(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + String s = getEntityName(server, sender, args[startIndex++]); + + if (args.length > startIndex) + { + ScoreObjective scoreobjective = this.convertToObjective(args[startIndex++], false, server); + scoreboard.removeObjectiveFromEntity(s, scoreobjective); + notifyCommandListener(sender, this, "commands.scoreboard.players.resetscore.success", new Object[] {scoreobjective.getName(), s}); + } + else + { + scoreboard.removeObjectiveFromEntity(s, (ScoreObjective)null); + notifyCommandListener(sender, this, "commands.scoreboard.players.reset.success", new Object[] {s}); + } + } + + protected void enablePlayerTrigger(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + String s = getPlayerName(server, sender, args[startIndex++]); + + if (s.length() > 40) + { + throw new SyntaxErrorException("commands.scoreboard.players.name.tooLong", new Object[] {s, Integer.valueOf(40)}); + } + else + { + ScoreObjective scoreobjective = this.convertToObjective(args[startIndex], false, server); + + if (scoreobjective.getCriteria() != IScoreCriteria.TRIGGER) + { + throw new CommandException("commands.scoreboard.players.enable.noTrigger", new Object[] {scoreobjective.getName()}); + } + else + { + Score score = scoreboard.getOrCreateScore(s, scoreobjective); + score.setLocked(false); + notifyCommandListener(sender, this, "commands.scoreboard.players.enable.success", new Object[] {scoreobjective.getName(), s}); + } + } + } + + protected void testPlayerScore(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + String s = getEntityName(server, sender, args[startIndex++]); + + if (s.length() > 40) + { + throw new SyntaxErrorException("commands.scoreboard.players.name.tooLong", new Object[] {s, Integer.valueOf(40)}); + } + else + { + ScoreObjective scoreobjective = this.convertToObjective(args[startIndex++], false, server); + + if (!scoreboard.entityHasObjective(s, scoreobjective)) + { + throw new CommandException("commands.scoreboard.players.test.notFound", new Object[] {scoreobjective.getName(), s}); + } + else + { + int i = args[startIndex].equals("*") ? Integer.MIN_VALUE : parseInt(args[startIndex]); + ++startIndex; + int j = startIndex < args.length && !args[startIndex].equals("*") ? parseInt(args[startIndex], i) : Integer.MAX_VALUE; + Score score = scoreboard.getOrCreateScore(s, scoreobjective); + + if (score.getScorePoints() >= i && score.getScorePoints() <= j) + { + notifyCommandListener(sender, this, "commands.scoreboard.players.test.success", new Object[] {score.getScorePoints(), i, j}); + } + else + { + throw new CommandException("commands.scoreboard.players.test.failed", new Object[] {score.getScorePoints(), i, j}); + } + } + } + } + + protected void applyPlayerOperation(ICommandSender sender, String[] args, int startIndex, MinecraftServer server) throws CommandException + { + Scoreboard scoreboard = this.getScoreboard(server); + String s = getEntityName(server, sender, args[startIndex++]); + ScoreObjective scoreobjective = this.convertToObjective(args[startIndex++], true, server); + String s1 = args[startIndex++]; + String s2 = getEntityName(server, sender, args[startIndex++]); + ScoreObjective scoreobjective1 = this.convertToObjective(args[startIndex], false, server); + + if (s.length() > 40) + { + throw new SyntaxErrorException("commands.scoreboard.players.name.tooLong", new Object[] {s, Integer.valueOf(40)}); + } + else if (s2.length() > 40) + { + throw new SyntaxErrorException("commands.scoreboard.players.name.tooLong", new Object[] {s2, Integer.valueOf(40)}); + } + else + { + Score score = scoreboard.getOrCreateScore(s, scoreobjective); + + if (!scoreboard.entityHasObjective(s2, scoreobjective1)) + { + throw new CommandException("commands.scoreboard.players.operation.notFound", new Object[] {scoreobjective1.getName(), s2}); + } + else + { + Score score1 = scoreboard.getOrCreateScore(s2, scoreobjective1); + + if ("+=".equals(s1)) + { + score.setScorePoints(score.getScorePoints() + score1.getScorePoints()); + } + else if ("-=".equals(s1)) + { + score.setScorePoints(score.getScorePoints() - score1.getScorePoints()); + } + else if ("*=".equals(s1)) + { + score.setScorePoints(score.getScorePoints() * score1.getScorePoints()); + } + else if ("/=".equals(s1)) + { + if (score1.getScorePoints() != 0) + { + score.setScorePoints(score.getScorePoints() / score1.getScorePoints()); + } + } + else if ("%=".equals(s1)) + { + if (score1.getScorePoints() != 0) + { + score.setScorePoints(score.getScorePoints() % score1.getScorePoints()); + } + } + else if ("=".equals(s1)) + { + score.setScorePoints(score1.getScorePoints()); + } + else if ("<".equals(s1)) + { + score.setScorePoints(Math.min(score.getScorePoints(), score1.getScorePoints())); + } + else if (">".equals(s1)) + { + score.setScorePoints(Math.max(score.getScorePoints(), score1.getScorePoints())); + } + else + { + if (!"><".equals(s1)) + { + throw new CommandException("commands.scoreboard.players.operation.invalidOperation", new Object[] {s1}); + } + + int i = score.getScorePoints(); + score.setScorePoints(score1.getScorePoints()); + score1.setScorePoints(i); + } + + notifyCommandListener(sender, this, "commands.scoreboard.players.operation.success", new Object[0]); + } + } + } + + protected void applyPlayerTag(MinecraftServer server, ICommandSender sender, String[] args, int startIndex) throws CommandException + { + String s = getEntityName(server, sender, args[startIndex]); + Entity entity = getEntity(server, sender, args[startIndex++]); + String s1 = args[startIndex++]; + Set set = entity.getTags(); + + if ("list".equals(s1)) + { + if (!set.isEmpty()) + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("commands.scoreboard.players.tag.list", new Object[] {s}); + textcomponenttranslation.getStyle().setColor(TextFormatting.DARK_GREEN); + sender.sendMessage(textcomponenttranslation); + sender.sendMessage(new TextComponentString(joinNiceString(set.toArray()))); + } + + sender.setCommandStat(CommandResultStats.Type.QUERY_RESULT, set.size()); + } + else if (args.length < 5) + { + throw new WrongUsageException("commands.scoreboard.players.tag.usage", new Object[0]); + } + else + { + String s2 = args[startIndex++]; + + if (args.length > startIndex) + { + try + { + NBTTagCompound nbttagcompound = JsonToNBT.getTagFromJson(buildString(args, startIndex)); + NBTTagCompound nbttagcompound1 = entityToNBT(entity); + + if (!NBTUtil.areNBTEquals(nbttagcompound, nbttagcompound1, true)) + { + throw new CommandException("commands.scoreboard.players.tag.tagMismatch", new Object[] {s}); + } + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.scoreboard.players.tag.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + if ("add".equals(s1)) + { + if (!entity.addTag(s2)) + { + throw new CommandException("commands.scoreboard.players.tag.tooMany", new Object[] {Integer.valueOf(1024)}); + } + + notifyCommandListener(sender, this, "commands.scoreboard.players.tag.success.add", new Object[] {s2}); + } + else + { + if (!"remove".equals(s1)) + { + throw new WrongUsageException("commands.scoreboard.players.tag.usage", new Object[0]); + } + + if (!entity.removeTag(s2)) + { + throw new CommandException("commands.scoreboard.players.tag.notFound", new Object[] {s2}); + } + + notifyCommandListener(sender, this, "commands.scoreboard.players.tag.success.remove", new Object[] {s2}); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"objectives", "players", "teams"}); + } + else + { + if ("objectives".equalsIgnoreCase(args[0])) + { + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, new String[] {"list", "add", "remove", "setdisplay"}); + } + + if ("add".equalsIgnoreCase(args[1])) + { + if (args.length == 4) + { + Set set = IScoreCriteria.INSTANCES.keySet(); + return getListOfStringsMatchingLastWord(args, set); + } + } + else if ("remove".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getObjectiveNames(false, server)); + } + } + else if ("setdisplay".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, Scoreboard.getDisplaySlotStrings()); + } + + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, this.getObjectiveNames(false, server)); + } + } + } + else if ("players".equalsIgnoreCase(args[0])) + { + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, new String[] {"set", "add", "remove", "reset", "list", "enable", "test", "operation", "tag"}); + } + + if (!"set".equalsIgnoreCase(args[1]) && !"add".equalsIgnoreCase(args[1]) && !"remove".equalsIgnoreCase(args[1]) && !"reset".equalsIgnoreCase(args[1])) + { + if ("enable".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, this.getTriggerNames(server)); + } + } + else if (!"list".equalsIgnoreCase(args[1]) && !"test".equalsIgnoreCase(args[1])) + { + if ("operation".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getScoreboard(server).getObjectiveNames()); + } + + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, this.getObjectiveNames(true, server)); + } + + if (args.length == 5) + { + return getListOfStringsMatchingLastWord(args, new String[] {"+=", "-=", "*=", "/=", "%=", "=", "<", ">", "><"}); + } + + if (args.length == 6) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + if (args.length == 7) + { + return getListOfStringsMatchingLastWord(args, this.getObjectiveNames(false, server)); + } + } + else if ("tag".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getScoreboard(server).getObjectiveNames()); + } + + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, new String[] {"add", "remove", "list"}); + } + } + } + else + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getScoreboard(server).getObjectiveNames()); + } + + if (args.length == 4 && "test".equalsIgnoreCase(args[1])) + { + return getListOfStringsMatchingLastWord(args, this.getObjectiveNames(false, server)); + } + } + } + else + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, this.getObjectiveNames(true, server)); + } + } + } + else if ("teams".equalsIgnoreCase(args[0])) + { + if (args.length == 2) + { + return getListOfStringsMatchingLastWord(args, new String[] {"add", "remove", "join", "leave", "empty", "list", "option"}); + } + + if ("join".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getScoreboard(server).getTeamNames()); + } + + if (args.length >= 4) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + } + else + { + if ("leave".equalsIgnoreCase(args[1])) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + + if (!"empty".equalsIgnoreCase(args[1]) && !"list".equalsIgnoreCase(args[1]) && !"remove".equalsIgnoreCase(args[1])) + { + if ("option".equalsIgnoreCase(args[1])) + { + if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getScoreboard(server).getTeamNames()); + } + + if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, new String[] {"color", "friendlyfire", "seeFriendlyInvisibles", "nametagVisibility", "deathMessageVisibility", "collisionRule"}); + } + + if (args.length == 5) + { + if ("color".equalsIgnoreCase(args[3])) + { + return getListOfStringsMatchingLastWord(args, TextFormatting.getValidValues(true, false)); + } + + if ("nametagVisibility".equalsIgnoreCase(args[3]) || "deathMessageVisibility".equalsIgnoreCase(args[3])) + { + return getListOfStringsMatchingLastWord(args, Team.EnumVisible.getNames()); + } + + if ("collisionRule".equalsIgnoreCase(args[3])) + { + return getListOfStringsMatchingLastWord(args, Team.CollisionRule.getNames()); + } + + if ("friendlyfire".equalsIgnoreCase(args[3]) || "seeFriendlyInvisibles".equalsIgnoreCase(args[3])) + { + return getListOfStringsMatchingLastWord(args, new String[] {"true", "false"}); + } + } + } + } + else if (args.length == 3) + { + return getListOfStringsMatchingLastWord(args, this.getScoreboard(server).getTeamNames()); + } + } + } + + return Collections.emptyList(); + } + } + + protected List getObjectiveNames(boolean writableOnly, MinecraftServer server) + { + Collection collection = this.getScoreboard(server).getScoreObjectives(); + List list = Lists.newArrayList(); + + for (ScoreObjective scoreobjective : collection) + { + if (!writableOnly || !scoreobjective.getCriteria().isReadOnly()) + { + list.add(scoreobjective.getName()); + } + } + + return list; + } + + protected List getTriggerNames(MinecraftServer server) + { + Collection collection = this.getScoreboard(server).getScoreObjectives(); + List list = Lists.newArrayList(); + + for (ScoreObjective scoreobjective : collection) + { + if (scoreobjective.getCriteria() == IScoreCriteria.TRIGGER) + { + list.add(scoreobjective.getName()); + } + } + + return list; + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + if (!"players".equalsIgnoreCase(args[0])) + { + if ("teams".equalsIgnoreCase(args[0])) + { + return index == 2; + } + else + { + return false; + } + } + else if (args.length > 1 && "operation".equalsIgnoreCase(args[1])) + { + return index == 2 || index == 5; + } + else + { + return index == 2; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSetBlock.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSetBlock.java new file mode 100644 index 0000000..a4ce7a2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSetBlock.java @@ -0,0 +1,170 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CommandSetBlock extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "setblock"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.setblock.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 4) + { + throw new WrongUsageException("commands.setblock.usage", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 0, false); + Block block = CommandBase.getBlockByText(sender, args[3]); + IBlockState iblockstate; + + if (args.length >= 5) + { + iblockstate = convertArgToBlockState(block, args[4]); + } + else + { + iblockstate = block.getDefaultState(); + } + + World world = sender.getEntityWorld(); + + if (!world.isBlockLoaded(blockpos)) + { + throw new CommandException("commands.setblock.outOfWorld", new Object[0]); + } + else + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (args.length >= 7 && block.hasTileEntity(iblockstate)) + { + String s = buildString(args, 6); + + try + { + nbttagcompound = JsonToNBT.getTagFromJson(s); + flag = true; + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.setblock.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + if (args.length >= 6) + { + if ("destroy".equals(args[5])) + { + world.destroyBlock(blockpos, true); + + if (block == Blocks.AIR) + { + notifyCommandListener(sender, this, "commands.setblock.success", new Object[0]); + return; + } + } + else if ("keep".equals(args[5]) && !world.isAirBlock(blockpos)) + { + throw new CommandException("commands.setblock.noChange", new Object[0]); + } + } + + TileEntity tileentity1 = world.getTileEntity(blockpos); + + if (tileentity1 != null && tileentity1 instanceof IInventory) + { + ((IInventory)tileentity1).clear(); + } + + if (!world.setBlockState(blockpos, iblockstate, 2)) + { + throw new CommandException("commands.setblock.noChange", new Object[0]); + } + else + { + if (flag) + { + TileEntity tileentity = world.getTileEntity(blockpos); + + if (tileentity != null) + { + nbttagcompound.setInteger("x", blockpos.getX()); + nbttagcompound.setInteger("y", blockpos.getY()); + nbttagcompound.setInteger("z", blockpos.getZ()); + tileentity.readFromNBT(nbttagcompound); + } + } + + world.notifyNeighborsRespectDebug(blockpos, iblockstate.getBlock(), false); + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 1); + notifyCommandListener(sender, this, "commands.setblock.success", new Object[0]); + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length > 0 && args.length <= 3) + { + return getTabCompletionCoordinate(args, 0, targetPos); + } + else if (args.length == 4) + { + return getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()); + } + else + { + return args.length == 6 ? getListOfStringsMatchingLastWord(args, new String[] {"replace", "destroy", "keep"}) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java new file mode 100644 index 0000000..a3760b0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSetDefaultSpawnpoint.java @@ -0,0 +1,73 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.network.play.server.SPacketSpawnPosition; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandSetDefaultSpawnpoint extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "setworldspawn"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.setworldspawn.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + BlockPos blockpos; + + if (args.length == 0) + { + blockpos = getCommandSenderAsPlayer(sender).getPosition(); + } + else + { + if (args.length != 3 || sender.getEntityWorld() == null) + { + throw new WrongUsageException("commands.setworldspawn.usage", new Object[0]); + } + + blockpos = parseBlockPos(sender, args, 0, true); + } + + sender.getEntityWorld().setSpawnPoint(blockpos); + server.getPlayerList().sendPacketToAllPlayers(new SPacketSpawnPosition(blockpos)); + notifyCommandListener(sender, this, "commands.setworldspawn.success", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length > 0 && args.length <= 3 ? getTabCompletionCoordinate(args, 0, targetPos) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandStop.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandStop.java new file mode 100644 index 0000000..86ffdb6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandStop.java @@ -0,0 +1,38 @@ +package net.minecraft.command.server; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; + +public class CommandStop extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "stop"; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.stop.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (server.worlds != null) + { + notifyCommandListener(sender, this, "commands.stop.start", new Object[0]); + } + + server.initiateShutdown(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSummon.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSummon.java new file mode 100644 index 0000000..f191569 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandSummon.java @@ -0,0 +1,144 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.chunk.storage.AnvilChunkLoader; + +public class CommandSummon extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "summon"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.summon.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.summon.usage", new Object[0]); + } + else + { + String s = args[0]; + BlockPos blockpos = sender.getPosition(); + Vec3d vec3d = sender.getPositionVector(); + double d0 = vec3d.x; + double d1 = vec3d.y; + double d2 = vec3d.z; + + if (args.length >= 4) + { + d0 = parseDouble(d0, args[1], true); + d1 = parseDouble(d1, args[2], false); + d2 = parseDouble(d2, args[3], true); + blockpos = new BlockPos(d0, d1, d2); + } + + World world = sender.getEntityWorld(); + + if (!world.isBlockLoaded(blockpos)) + { + throw new CommandException("commands.summon.outOfWorld", new Object[0]); + } + else if (EntityList.LIGHTNING_BOLT.equals(new ResourceLocation(s))) + { + world.addWeatherEffect(new EntityLightningBolt(world, d0, d1, d2, false)); + notifyCommandListener(sender, this, "commands.summon.success", new Object[0]); + } + else + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (args.length >= 5) + { + String s1 = buildString(args, 4); + + try + { + nbttagcompound = JsonToNBT.getTagFromJson(s1); + flag = true; + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.summon.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + nbttagcompound.setString("id", s); + Entity entity = AnvilChunkLoader.readWorldEntityPos(nbttagcompound, world, d0, d1, d2, true); + + if (entity == null) + { + throw new CommandException("commands.summon.failed", new Object[0]); + } + else + { + entity.setLocationAndAngles(d0, d1, d2, entity.rotationYaw, entity.rotationPitch); + + if (!flag && entity instanceof EntityLiving) + { + ((EntityLiving)entity).onInitialSpawn(world.getDifficultyForLocation(new BlockPos(entity)), (IEntityLivingData)null); + } + + notifyCommandListener(sender, this, "commands.summon.success", new Object[0]); + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, EntityList.getEntityNameList()); + } + else + { + return args.length > 1 && args.length <= 4 ? getTabCompletionCoordinate(args, 1, targetPos) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTeleport.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTeleport.java new file mode 100644 index 0000000..16b2d15 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTeleport.java @@ -0,0 +1,152 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketPlayerPosLook; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class CommandTeleport extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "teleport"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.teleport.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 4) + { + throw new WrongUsageException("commands.teleport.usage", new Object[0]); + } + else + { + Entity entity = getEntity(server, sender, args[0]); + + if (entity.world != null) + { + int i = 4096; + Vec3d vec3d = sender.getPositionVector(); + int j = 1; + CommandBase.CoordinateArg commandbase$coordinatearg = parseCoordinate(vec3d.x, args[j++], true); + CommandBase.CoordinateArg commandbase$coordinatearg1 = parseCoordinate(vec3d.y, args[j++], -4096, 4096, false); + CommandBase.CoordinateArg commandbase$coordinatearg2 = parseCoordinate(vec3d.z, args[j++], true); + Entity entity1 = sender.getCommandSenderEntity() == null ? entity : sender.getCommandSenderEntity(); + CommandBase.CoordinateArg commandbase$coordinatearg3 = parseCoordinate(args.length > j ? (double)entity1.rotationYaw : (double)entity.rotationYaw, args.length > j ? args[j] : "~", false); + ++j; + CommandBase.CoordinateArg commandbase$coordinatearg4 = parseCoordinate(args.length > j ? (double)entity1.rotationPitch : (double)entity.rotationPitch, args.length > j ? args[j] : "~", false); + doTeleport(entity, commandbase$coordinatearg, commandbase$coordinatearg1, commandbase$coordinatearg2, commandbase$coordinatearg3, commandbase$coordinatearg4); + notifyCommandListener(sender, this, "commands.teleport.success.coordinates", new Object[] {entity.getName(), commandbase$coordinatearg.getResult(), commandbase$coordinatearg1.getResult(), commandbase$coordinatearg2.getResult()}); + } + } + } + + /** + * Perform the actual teleport + * + * @param teleportingEntity the entity being teleported + */ + private static void doTeleport(Entity teleportingEntity, CommandBase.CoordinateArg argX, CommandBase.CoordinateArg argY, CommandBase.CoordinateArg argZ, CommandBase.CoordinateArg argYaw, CommandBase.CoordinateArg argPitch) + { + if (teleportingEntity instanceof EntityPlayerMP) + { + Set set = EnumSet.noneOf(SPacketPlayerPosLook.EnumFlags.class); + float f = (float)argYaw.getAmount(); + + if (argYaw.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.Y_ROT); + } + else + { + f = MathHelper.wrapDegrees(f); + } + + float f1 = (float)argPitch.getAmount(); + + if (argPitch.isRelative()) + { + set.add(SPacketPlayerPosLook.EnumFlags.X_ROT); + } + else + { + f1 = MathHelper.wrapDegrees(f1); + } + + teleportingEntity.dismountRidingEntity(); + ((EntityPlayerMP)teleportingEntity).connection.setPlayerLocation(argX.getResult(), argY.getResult(), argZ.getResult(), f, f1, set); + teleportingEntity.setRotationYawHead(f); + } + else + { + float f2 = (float)MathHelper.wrapDegrees(argYaw.getResult()); + float f3 = (float)MathHelper.wrapDegrees(argPitch.getResult()); + f3 = MathHelper.clamp(f3, -90.0F, 90.0F); + teleportingEntity.setLocationAndAngles(argX.getResult(), argY.getResult(), argZ.getResult(), f2, f3); + teleportingEntity.setRotationYawHead(f2); + } + + if (!(teleportingEntity instanceof EntityLivingBase) || !((EntityLivingBase)teleportingEntity).isElytraFlying()) + { + teleportingEntity.motionY = 0.0D; + teleportingEntity.onGround = true; + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()); + } + else + { + return args.length > 1 && args.length <= 4 ? getTabCompletionCoordinate(args, 1, targetPos) : Collections.emptyList(); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTestFor.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTestFor.java new file mode 100644 index 0000000..3ce13a6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTestFor.java @@ -0,0 +1,99 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; + +public class CommandTestFor extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "testfor"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.testfor.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.testfor.usage", new Object[0]); + } + else + { + Entity entity = getEntity(server, sender, args[0]); + NBTTagCompound nbttagcompound = null; + + if (args.length >= 2) + { + try + { + nbttagcompound = JsonToNBT.getTagFromJson(buildString(args, 1)); + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.testfor.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + if (nbttagcompound != null) + { + NBTTagCompound nbttagcompound1 = entityToNBT(entity); + + if (!NBTUtil.areNBTEquals(nbttagcompound, nbttagcompound1, true)) + { + throw new CommandException("commands.testfor.failure", new Object[] {entity.getName()}); + } + } + + notifyCommandListener(sender, this, "commands.testfor.success", new Object[] {entity.getName()}); + } + } + + /** + * Return whether the specified command parameter index is a username parameter. + */ + public boolean isUsernameIndex(String[] args, int index) + { + return index == 0; + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + return args.length == 1 ? getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames()) : Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTestForBlock.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTestForBlock.java new file mode 100644 index 0000000..fd6a27e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandTestForBlock.java @@ -0,0 +1,156 @@ +package net.minecraft.command.server; + +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.NumberInvalidException; +import net.minecraft.command.WrongUsageException; +import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.NBTException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class CommandTestForBlock extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "testforblock"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 2; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.testforblock.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 4) + { + throw new WrongUsageException("commands.testforblock.usage", new Object[0]); + } + else + { + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0); + BlockPos blockpos = parseBlockPos(sender, args, 0, false); + Block block = getBlockByText(sender, args[3]); + + if (block == null) + { + throw new NumberInvalidException("commands.setblock.notFound", new Object[] {args[3]}); + } + else + { + World world = sender.getEntityWorld(); + + if (!world.isBlockLoaded(blockpos)) + { + throw new CommandException("commands.testforblock.outOfWorld", new Object[0]); + } + else + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (args.length >= 6 && block.hasTileEntity()) + { + String s = buildString(args, 5); + + try + { + nbttagcompound = JsonToNBT.getTagFromJson(s); + flag = true; + } + catch (NBTException nbtexception) + { + throw new CommandException("commands.setblock.tagError", new Object[] {nbtexception.getMessage()}); + } + } + + IBlockState iblockstate = world.getBlockState(blockpos); + Block block1 = iblockstate.getBlock(); + + if (block1 != block) + { + throw new CommandException("commands.testforblock.failed.tile", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ(), block1.getLocalizedName(), block.getLocalizedName()}); + } + else if (args.length >= 5 && !CommandBase.convertArgToBlockStatePredicate(block, args[4]).apply(iblockstate)) + { + try + { + int i = iblockstate.getBlock().getMetaFromState(iblockstate); + throw new CommandException("commands.testforblock.failed.data", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ(), i, Integer.parseInt(args[4])}); + } + catch (NumberFormatException var13) + { + throw new CommandException("commands.testforblock.failed.data", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ(), iblockstate.toString(), args[4]}); + } + } + else + { + if (flag) + { + TileEntity tileentity = world.getTileEntity(blockpos); + + if (tileentity == null) + { + throw new CommandException("commands.testforblock.failed.tileEntity", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + + NBTTagCompound nbttagcompound1 = tileentity.writeToNBT(new NBTTagCompound()); + + if (!NBTUtil.areNBTEquals(nbttagcompound, nbttagcompound1, true)) + { + throw new CommandException("commands.testforblock.failed.nbt", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + } + + sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 1); + notifyCommandListener(sender, this, "commands.testforblock.success", new Object[] {blockpos.getX(), blockpos.getY(), blockpos.getZ()}); + } + } + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length > 0 && args.length <= 3) + { + return getTabCompletionCoordinate(args, 0, targetPos); + } + else + { + return args.length == 4 ? getListOfStringsMatchingLastWord(args, Block.REGISTRY.getKeys()) : Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandWhitelist.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandWhitelist.java new file mode 100644 index 0000000..922b52a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/CommandWhitelist.java @@ -0,0 +1,138 @@ +package net.minecraft.command.server; + +import com.mojang.authlib.GameProfile; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.WrongUsageException; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class CommandWhitelist extends CommandBase +{ + /** + * Gets the name of the command + */ + public String getName() + { + return "whitelist"; + } + + /** + * Return the required permission level for this command. + */ + public int getRequiredPermissionLevel() + { + return 3; + } + + /** + * Gets the usage string for the command. + */ + public String getUsage(ICommandSender sender) + { + return "commands.whitelist.usage"; + } + + /** + * Callback for when the command is executed + */ + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if (args.length < 1) + { + throw new WrongUsageException("commands.whitelist.usage", new Object[0]); + } + else + { + if ("on".equals(args[0])) + { + server.getPlayerList().setWhiteListEnabled(true); + notifyCommandListener(sender, this, "commands.whitelist.enabled", new Object[0]); + } + else if ("off".equals(args[0])) + { + server.getPlayerList().setWhiteListEnabled(false); + notifyCommandListener(sender, this, "commands.whitelist.disabled", new Object[0]); + } + else if ("list".equals(args[0])) + { + sender.sendMessage(new TextComponentTranslation("commands.whitelist.list", new Object[] {server.getPlayerList().getWhitelistedPlayerNames().length, server.getPlayerList().getAvailablePlayerDat().length})); + String[] astring = server.getPlayerList().getWhitelistedPlayerNames(); + sender.sendMessage(new TextComponentString(joinNiceString(astring))); + } + else if ("add".equals(args[0])) + { + if (args.length < 2) + { + throw new WrongUsageException("commands.whitelist.add.usage", new Object[0]); + } + + GameProfile gameprofile = server.getPlayerProfileCache().getGameProfileForUsername(args[1]); + + if (gameprofile == null) + { + throw new CommandException("commands.whitelist.add.failed", new Object[] {args[1]}); + } + + server.getPlayerList().addWhitelistedPlayer(gameprofile); + notifyCommandListener(sender, this, "commands.whitelist.add.success", new Object[] {args[1]}); + } + else if ("remove".equals(args[0])) + { + if (args.length < 2) + { + throw new WrongUsageException("commands.whitelist.remove.usage", new Object[0]); + } + + GameProfile gameprofile1 = server.getPlayerList().getWhitelistedPlayers().getByName(args[1]); + + if (gameprofile1 == null) + { + throw new CommandException("commands.whitelist.remove.failed", new Object[] {args[1]}); + } + + server.getPlayerList().removePlayerFromWhitelist(gameprofile1); + notifyCommandListener(sender, this, "commands.whitelist.remove.success", new Object[] {args[1]}); + } + else if ("reload".equals(args[0])) + { + server.getPlayerList().reloadWhitelist(); + notifyCommandListener(sender, this, "commands.whitelist.reloaded", new Object[0]); + } + } + } + + /** + * Get a list of options for when the user presses the TAB key + */ + public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) + { + if (args.length == 1) + { + return getListOfStringsMatchingLastWord(args, new String[] {"on", "off", "list", "add", "remove", "reload"}); + } + else + { + if (args.length == 2) + { + if ("remove".equals(args[0])) + { + return getListOfStringsMatchingLastWord(args, server.getPlayerList().getWhitelistedPlayerNames()); + } + + if ("add".equals(args[0])) + { + return getListOfStringsMatchingLastWord(args, server.getPlayerProfileCache().getUsernames()); + } + } + + return Collections.emptyList(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/command/server/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/command/server/package-info.java new file mode 100644 index 0000000..52d6ebc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/command/server/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.command.server; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/crash/CrashReport.java b/build/tmp/recompileMc/sources/net/minecraft/crash/CrashReport.java new file mode 100644 index 0000000..691cae7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/crash/CrashReport.java @@ -0,0 +1,408 @@ +package net.minecraft.crash; + +import com.google.common.collect.Lists; +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import net.minecraft.util.ReportedException; +import net.minecraft.world.gen.layer.IntCache; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CrashReport +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** Description of the crash report. */ + private final String description; + /** The Throwable that is the "cause" for this crash and Crash Report. */ + private final Throwable cause; + /** Category of crash */ + private final CrashReportCategory systemDetailsCategory = new CrashReportCategory(this, "System Details"); + /** Holds the keys and values of all crash report sections. */ + private final List crashReportSections = Lists.newArrayList(); + /** File of crash report. */ + private File crashReportFile; + /** Is true when the current category is the first in the crash report */ + private boolean firstCategoryInCrashReport = true; + private StackTraceElement[] stacktrace = new StackTraceElement[0]; + + public CrashReport(String descriptionIn, Throwable causeThrowable) + { + this.description = descriptionIn; + this.cause = causeThrowable; + this.populateEnvironment(); + } + + /** + * Populates this crash report with initial information about the running server and operating system / java + * environment + */ + private void populateEnvironment() + { + this.systemDetailsCategory.addDetail("Minecraft Version", new ICrashReportDetail() + { + public String call() + { + return "1.12.2"; + } + }); + this.systemDetailsCategory.addDetail("Operating System", new ICrashReportDetail() + { + public String call() + { + return System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version"); + } + }); + this.systemDetailsCategory.addDetail("Java Version", new ICrashReportDetail() + { + public String call() + { + return System.getProperty("java.version") + ", " + System.getProperty("java.vendor"); + } + }); + this.systemDetailsCategory.addDetail("Java VM Version", new ICrashReportDetail() + { + public String call() + { + return System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor"); + } + }); + this.systemDetailsCategory.addDetail("Memory", new ICrashReportDetail() + { + public String call() + { + Runtime runtime = Runtime.getRuntime(); + long i = runtime.maxMemory(); + long j = runtime.totalMemory(); + long k = runtime.freeMemory(); + long l = i / 1024L / 1024L; + long i1 = j / 1024L / 1024L; + long j1 = k / 1024L / 1024L; + return k + " bytes (" + j1 + " MB) / " + j + " bytes (" + i1 + " MB) up to " + i + " bytes (" + l + " MB)"; + } + }); + this.systemDetailsCategory.addDetail("JVM Flags", new ICrashReportDetail() + { + public String call() + { + RuntimeMXBean runtimemxbean = ManagementFactory.getRuntimeMXBean(); + List list = runtimemxbean.getInputArguments(); + int i = 0; + StringBuilder stringbuilder = new StringBuilder(); + + for (String s : list) + { + if (s.startsWith("-X")) + { + if (i++ > 0) + { + stringbuilder.append(" "); + } + + stringbuilder.append(s); + } + } + + return String.format("%d total; %s", i, stringbuilder.toString()); + } + }); + this.systemDetailsCategory.addDetail("IntCache", new ICrashReportDetail() + { + public String call() throws Exception + { + return IntCache.getCacheSizes(); + } + }); + net.minecraftforge.fml.common.FMLCommonHandler.instance().enhanceCrashReport(this, this.systemDetailsCategory); + } + + /** + * Returns the description of the Crash Report. + */ + public String getDescription() + { + return this.description; + } + + /** + * Returns the Throwable object that is the cause for the crash and Crash Report. + */ + public Throwable getCrashCause() + { + return this.cause; + } + + /** + * Gets the various sections of the crash report into the given StringBuilder + */ + public void getSectionsInStringBuilder(StringBuilder builder) + { + if ((this.stacktrace == null || this.stacktrace.length <= 0) && !this.crashReportSections.isEmpty()) + { + this.stacktrace = (StackTraceElement[])ArrayUtils.subarray(((CrashReportCategory)this.crashReportSections.get(0)).getStackTrace(), 0, 1); + } + + if (this.stacktrace != null && this.stacktrace.length > 0) + { + builder.append("-- Head --\n"); + builder.append("Thread: ").append(Thread.currentThread().getName()).append("\n"); + builder.append("Stacktrace:\n"); + + for (StackTraceElement stacktraceelement : this.stacktrace) + { + builder.append("\t").append("at ").append((Object)stacktraceelement); + builder.append("\n"); + } + + builder.append("\n"); + } + + for (CrashReportCategory crashreportcategory : this.crashReportSections) + { + crashreportcategory.appendToStringBuilder(builder); + builder.append("\n\n"); + } + + this.systemDetailsCategory.appendToStringBuilder(builder); + } + + /** + * Gets the stack trace of the Throwable that caused this crash report, or if that fails, the cause .toString(). + */ + public String getCauseStackTraceOrString() + { + StringWriter stringwriter = null; + PrintWriter printwriter = null; + Throwable throwable = this.cause; + + if (throwable.getMessage() == null) + { + if (throwable instanceof NullPointerException) + { + throwable = new NullPointerException(this.description); + } + else if (throwable instanceof StackOverflowError) + { + throwable = new StackOverflowError(this.description); + } + else if (throwable instanceof OutOfMemoryError) + { + throwable = new OutOfMemoryError(this.description); + } + + throwable.setStackTrace(this.cause.getStackTrace()); + } + + String s = throwable.toString(); + + try + { + stringwriter = new StringWriter(); + printwriter = new PrintWriter(stringwriter); + throwable.printStackTrace(printwriter); + s = stringwriter.toString(); + } + finally + { + IOUtils.closeQuietly((Writer)stringwriter); + IOUtils.closeQuietly((Writer)printwriter); + } + + return s; + } + + /** + * Gets the complete report with headers, stack trace, and different sections as a string. + */ + public String getCompleteReport() + { + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append("---- Minecraft Crash Report ----\n"); + net.minecraftforge.fml.common.asm.transformers.BlamingTransformer.onCrash(stringbuilder); + net.minecraftforge.fml.relauncher.CoreModManager.onCrash(stringbuilder); + stringbuilder.append("// "); + stringbuilder.append(getWittyComment()); + stringbuilder.append("\n\n"); + stringbuilder.append("Time: "); + stringbuilder.append((new SimpleDateFormat()).format(new Date())); + stringbuilder.append("\n"); + stringbuilder.append("Description: "); + stringbuilder.append(this.description); + stringbuilder.append("\n\n"); + stringbuilder.append(this.getCauseStackTraceOrString()); + stringbuilder.append("\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n"); + + for (int i = 0; i < 87; ++i) + { + stringbuilder.append("-"); + } + + stringbuilder.append("\n\n"); + this.getSectionsInStringBuilder(stringbuilder); + return stringbuilder.toString(); + } + + /** + * Gets the file this crash report is saved into. + */ + @SideOnly(Side.CLIENT) + public File getFile() + { + return this.crashReportFile; + } + + /** + * Saves this CrashReport to the given file and returns a value indicating whether we were successful at doing so. + */ + public boolean saveToFile(File toFile) + { + if (this.crashReportFile != null) + { + return false; + } + else + { + if (toFile.getParentFile() != null) + { + toFile.getParentFile().mkdirs(); + } + + Writer writer = null; + boolean flag1; + + try + { + writer = new OutputStreamWriter(new FileOutputStream(toFile), StandardCharsets.UTF_8); + writer.write(this.getCompleteReport()); + this.crashReportFile = toFile; + boolean lvt_3_1_ = true; + return lvt_3_1_; + } + catch (Throwable throwable) + { + LOGGER.error("Could not save crash report to {}", toFile, throwable); + flag1 = false; + } + finally + { + IOUtils.closeQuietly(writer); + } + + return flag1; + } + } + + public CrashReportCategory getCategory() + { + return this.systemDetailsCategory; + } + + /** + * Creates a CrashReportCategory + */ + public CrashReportCategory makeCategory(String name) + { + return this.makeCategoryDepth(name, 1); + } + + /** + * Creates a CrashReportCategory for the given stack trace depth + */ + public CrashReportCategory makeCategoryDepth(String categoryName, int stacktraceLength) + { + CrashReportCategory crashreportcategory = new CrashReportCategory(this, categoryName); + + if (this.firstCategoryInCrashReport) + { + int i = crashreportcategory.getPrunedStackTrace(stacktraceLength); + StackTraceElement[] astacktraceelement = this.cause.getStackTrace(); + StackTraceElement stacktraceelement = null; + StackTraceElement stacktraceelement1 = null; + int j = astacktraceelement.length - i; + + if (j < 0) + { + System.out.println("Negative index in crash report handler (" + astacktraceelement.length + "/" + i + ")"); + } + + if (astacktraceelement != null && 0 <= j && j < astacktraceelement.length) + { + stacktraceelement = astacktraceelement[j]; + + if (astacktraceelement.length + 1 - i < astacktraceelement.length) + { + stacktraceelement1 = astacktraceelement[astacktraceelement.length + 1 - i]; + } + } + + this.firstCategoryInCrashReport = crashreportcategory.firstTwoElementsOfStackTraceMatch(stacktraceelement, stacktraceelement1); + + if (i > 0 && !this.crashReportSections.isEmpty()) + { + CrashReportCategory crashreportcategory1 = this.crashReportSections.get(this.crashReportSections.size() - 1); + crashreportcategory1.trimStackTraceEntriesFromBottom(i); + } + else if (astacktraceelement != null && astacktraceelement.length >= i && 0 <= j && j < astacktraceelement.length) + { + this.stacktrace = new StackTraceElement[j]; + System.arraycopy(astacktraceelement, 0, this.stacktrace, 0, this.stacktrace.length); + } + else + { + this.firstCategoryInCrashReport = false; + } + } + + this.crashReportSections.add(crashreportcategory); + return crashreportcategory; + } + + /** + * Gets a random witty comment for inclusion in this CrashReport + */ + private static String getWittyComment() + { + String[] astring = new String[] {"Who set us up the TNT?", "Everything's going to plan. No, really, that was supposed to happen.", "Uh... Did I do that?", "Oops.", "Why did you do that?", "I feel sad now :(", "My bad.", "I'm sorry, Dave.", "I let you down. Sorry :(", "On the bright side, I bought you a teddy bear!", "Daisy, daisy...", "Oh - I know what I did wrong!", "Hey, that tickles! Hehehe!", "I blame Dinnerbone.", "You should try our sister game, Minceraft!", "Don't be sad. I'll do better next time, I promise!", "Don't be sad, have a hug! <3", "I just don't know what went wrong :(", "Shall we play a game?", "Quite honestly, I wouldn't worry myself about that.", "I bet Cylons wouldn't have this problem.", "Sorry :(", "Surprise! Haha. Well, this is awkward.", "Would you like a cupcake?", "Hi. I'm Minecraft, and I'm a crashaholic.", "Ooh. Shiny.", "This doesn't make any sense!", "Why is it breaking :(", "Don't do that.", "Ouch. That hurt :(", "You're mean.", "This is a token for 1 free hug. Redeem at your nearest Mojangsta: [~~HUG~~]", "There are four lights!", "But it works on my machine."}; + + try + { + return astring[(int)(System.nanoTime() % (long)astring.length)]; + } + catch (Throwable var2) + { + return "Witty comment unavailable :("; + } + } + + /** + * Creates a crash report for the exception + */ + public static CrashReport makeCrashReport(Throwable causeIn, String descriptionIn) + { + CrashReport crashreport; + + if (causeIn instanceof ReportedException) + { + crashreport = ((ReportedException)causeIn).getCrashReport(); + } + else + { + crashreport = new CrashReport(descriptionIn, causeIn); + } + + return crashreport; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/crash/CrashReportCategory.java b/build/tmp/recompileMc/sources/net/minecraft/crash/CrashReportCategory.java new file mode 100644 index 0000000..d3874c9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/crash/CrashReportCategory.java @@ -0,0 +1,317 @@ +package net.minecraft.crash; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CrashReportCategory +{ + private final CrashReport crashReport; + private final String name; + private final List children = Lists.newArrayList(); + private StackTraceElement[] stackTrace = new StackTraceElement[0]; + + public CrashReportCategory(CrashReport report, String name) + { + this.crashReport = report; + this.name = name; + } + + @SideOnly(Side.CLIENT) + public static String getCoordinateInfo(double x, double y, double z) + { + return String.format("%.2f,%.2f,%.2f - %s", x, y, z, getCoordinateInfo(new BlockPos(x, y, z))); + } + + public static String getCoordinateInfo(BlockPos pos) + { + return getCoordinateInfo(pos.getX(), pos.getY(), pos.getZ()); + } + + public static String getCoordinateInfo(int x, int y, int z) + { + StringBuilder stringbuilder = new StringBuilder(); + + try + { + stringbuilder.append(String.format("World: (%d,%d,%d)", x, y, z)); + } + catch (Throwable var16) + { + stringbuilder.append("(Error finding world loc)"); + } + + stringbuilder.append(", "); + + try + { + int i = x >> 4; + int j = z >> 4; + int k = x & 15; + int l = y >> 4; + int i1 = z & 15; + int j1 = i << 4; + int k1 = j << 4; + int l1 = (i + 1 << 4) - 1; + int i2 = (j + 1 << 4) - 1; + stringbuilder.append(String.format("Chunk: (at %d,%d,%d in %d,%d; contains blocks %d,0,%d to %d,255,%d)", k, l, i1, i, j, j1, k1, l1, i2)); + } + catch (Throwable var15) + { + stringbuilder.append("(Error finding chunk loc)"); + } + + stringbuilder.append(", "); + + try + { + int k2 = x >> 9; + int l2 = z >> 9; + int i3 = k2 << 5; + int j3 = l2 << 5; + int k3 = (k2 + 1 << 5) - 1; + int l3 = (l2 + 1 << 5) - 1; + int i4 = k2 << 9; + int j4 = l2 << 9; + int k4 = (k2 + 1 << 9) - 1; + int j2 = (l2 + 1 << 9) - 1; + stringbuilder.append(String.format("Region: (%d,%d; contains chunks %d,%d to %d,%d, blocks %d,0,%d to %d,255,%d)", k2, l2, i3, j3, k3, l3, i4, j4, k4, j2)); + } + catch (Throwable var14) + { + stringbuilder.append("(Error finding world loc)"); + } + + return stringbuilder.toString(); + } + + /** + * Adds an additional section to this crash report category, resolved by calling the given callable. + * + * If the given callable throws an exception, a detail containing that exception will be created instead. + */ + public void addDetail(String nameIn, ICrashReportDetail detail) + { + try + { + this.addCrashSection(nameIn, detail.call()); + } + catch (Throwable throwable) + { + this.addCrashSectionThrowable(nameIn, throwable); + } + } + + /** + * Adds a Crashreport section with the given name with the given value (convered .toString()) + */ + public void addCrashSection(String sectionName, Object value) + { + this.children.add(new CrashReportCategory.Entry(sectionName, value)); + } + + /** + * Adds a Crashreport section with the given name with the given Throwable + */ + public void addCrashSectionThrowable(String sectionName, Throwable throwable) + { + this.addCrashSection(sectionName, throwable); + } + + /** + * Resets our stack trace according to the current trace, pruning the deepest 3 entries. The parameter indicates + * how many additional deepest entries to prune. Returns the number of entries in the resulting pruned stack trace. + */ + public int getPrunedStackTrace(int size) + { + StackTraceElement[] astacktraceelement = Thread.currentThread().getStackTrace(); + + if (astacktraceelement.length <= 0) + { + return 0; + } + else + { + int len = astacktraceelement.length - 3 - size; + // Really Mojang, Still, god damn... + if (len <= 0) len = astacktraceelement.length; + this.stackTrace = new StackTraceElement[len]; + System.arraycopy(astacktraceelement, astacktraceelement.length - len, this.stackTrace, 0, this.stackTrace.length); + return this.stackTrace.length; + } + } + + /** + * Do the deepest two elements of our saved stack trace match the given elements, in order from the deepest? + */ + public boolean firstTwoElementsOfStackTraceMatch(StackTraceElement s1, StackTraceElement s2) + { + if (this.stackTrace.length != 0 && s1 != null) + { + StackTraceElement stacktraceelement = this.stackTrace[0]; + + if (stacktraceelement.isNativeMethod() == s1.isNativeMethod() && stacktraceelement.getClassName().equals(s1.getClassName()) && stacktraceelement.getFileName().equals(s1.getFileName()) && stacktraceelement.getMethodName().equals(s1.getMethodName())) + { + if (s2 != null != this.stackTrace.length > 1) + { + return false; + } + else if (s2 != null && !this.stackTrace[1].equals(s2)) + { + return false; + } + else + { + this.stackTrace[0] = s1; + return true; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * Removes the given number entries from the bottom of the stack trace. + */ + public void trimStackTraceEntriesFromBottom(int amount) + { + StackTraceElement[] astacktraceelement = new StackTraceElement[this.stackTrace.length - amount]; + System.arraycopy(this.stackTrace, 0, astacktraceelement, 0, astacktraceelement.length); + this.stackTrace = astacktraceelement; + } + + public void appendToStringBuilder(StringBuilder builder) + { + builder.append("-- ").append(this.name).append(" --\n"); + builder.append("Details:"); + + for (CrashReportCategory.Entry crashreportcategory$entry : this.children) + { + builder.append("\n\t"); + builder.append(crashreportcategory$entry.getKey()); + builder.append(": "); + builder.append(crashreportcategory$entry.getValue()); + } + + if (this.stackTrace != null && this.stackTrace.length > 0) + { + builder.append("\nStacktrace:"); + + for (StackTraceElement stacktraceelement : this.stackTrace) + { + builder.append("\n\tat "); + builder.append((Object)stacktraceelement); + } + } + } + + public StackTraceElement[] getStackTrace() + { + return this.stackTrace; + } + + public static void addBlockInfo(CrashReportCategory category, final BlockPos pos, final Block blockIn, final int blockData) + { + final int i = Block.getIdFromBlock(blockIn); + category.addDetail("Block type", new ICrashReportDetail() + { + public String call() throws Exception + { + try + { + return String.format("ID #%d (%s // %s // %s)", i, blockIn.getUnlocalizedName(), blockIn.getClass().getName(), blockIn.getRegistryName()); + } + catch (Throwable var2) + { + return "ID #" + i; + } + } + }); + category.addDetail("Block data value", new ICrashReportDetail() + { + public String call() throws Exception + { + if (blockData < 0) + { + return "Unknown? (Got " + blockData + ")"; + } + else + { + String s = String.format("%4s", Integer.toBinaryString(blockData)).replace(" ", "0"); + return String.format("%1$d / 0x%1$X / 0b%2$s", blockData, s); + } + } + }); + category.addDetail("Block location", new ICrashReportDetail() + { + public String call() throws Exception + { + return CrashReportCategory.getCoordinateInfo(pos); + } + }); + } + + public static void addBlockInfo(CrashReportCategory category, final BlockPos pos, final IBlockState state) + { + category.addDetail("Block", new ICrashReportDetail() + { + public String call() throws Exception + { + return state.toString(); + } + }); + category.addDetail("Block location", new ICrashReportDetail() + { + public String call() throws Exception + { + return CrashReportCategory.getCoordinateInfo(pos); + } + }); + } + + static class Entry + { + private final String key; + private final String value; + + public Entry(String key, Object value) + { + this.key = key; + + if (value == null) + { + this.value = "~~NULL~~"; + } + else if (value instanceof Throwable) + { + Throwable throwable = (Throwable)value; + this.value = "~~ERROR~~ " + throwable.getClass().getSimpleName() + ": " + throwable.getMessage(); + } + else + { + this.value = value.toString(); + } + } + + public String getKey() + { + return this.key; + } + + public String getValue() + { + return this.value; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/crash/ICrashReportDetail.java b/build/tmp/recompileMc/sources/net/minecraft/crash/ICrashReportDetail.java new file mode 100644 index 0000000..262e394 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/crash/ICrashReportDetail.java @@ -0,0 +1,7 @@ +package net.minecraft.crash; + +import java.util.concurrent.Callable; + +public interface ICrashReportDetail extends Callable +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/crash/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/crash/package-info.java new file mode 100644 index 0000000..54423ef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/crash/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.crash; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/creativetab/CreativeTabs.java b/build/tmp/recompileMc/sources/net/minecraft/creativetab/CreativeTabs.java new file mode 100644 index 0000000..800a726 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/creativetab/CreativeTabs.java @@ -0,0 +1,349 @@ +package net.minecraft.creativetab; + +import javax.annotation.Nullable; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.enchantment.EnumEnchantmentType; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class CreativeTabs +{ + public static CreativeTabs[] CREATIVE_TAB_ARRAY = new CreativeTabs[12]; + public static final CreativeTabs BUILDING_BLOCKS = new CreativeTabs(0, "buildingBlocks") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Item.getItemFromBlock(Blocks.BRICK_BLOCK)); + } + }; + public static final CreativeTabs DECORATIONS = new CreativeTabs(1, "decorations") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Item.getItemFromBlock(Blocks.DOUBLE_PLANT), 1, BlockDoublePlant.EnumPlantType.PAEONIA.getMeta()); + } + }; + public static final CreativeTabs REDSTONE = new CreativeTabs(2, "redstone") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Items.REDSTONE); + } + }; + public static final CreativeTabs TRANSPORTATION = new CreativeTabs(3, "transportation") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Item.getItemFromBlock(Blocks.GOLDEN_RAIL)); + } + }; + public static final CreativeTabs MISC = new CreativeTabs(6, "misc") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Items.LAVA_BUCKET); + } + }; + public static final CreativeTabs SEARCH = (new CreativeTabs(5, "search") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Items.COMPASS); + } + }).setBackgroundImageName("item_search.png"); + public static final CreativeTabs FOOD = new CreativeTabs(7, "food") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Items.APPLE); + } + }; + public static final CreativeTabs TOOLS = (new CreativeTabs(8, "tools") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Items.IRON_AXE); + } + }).setRelevantEnchantmentTypes(new EnumEnchantmentType[] {EnumEnchantmentType.ALL, EnumEnchantmentType.DIGGER, EnumEnchantmentType.FISHING_ROD, EnumEnchantmentType.BREAKABLE}); + public static final CreativeTabs COMBAT = (new CreativeTabs(9, "combat") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Items.GOLDEN_SWORD); + } + }).setRelevantEnchantmentTypes(new EnumEnchantmentType[] {EnumEnchantmentType.ALL, EnumEnchantmentType.ARMOR, EnumEnchantmentType.ARMOR_FEET, EnumEnchantmentType.ARMOR_HEAD, EnumEnchantmentType.ARMOR_LEGS, EnumEnchantmentType.ARMOR_CHEST, EnumEnchantmentType.BOW, EnumEnchantmentType.WEAPON, EnumEnchantmentType.WEARABLE, EnumEnchantmentType.BREAKABLE}); + public static final CreativeTabs BREWING = new CreativeTabs(10, "brewing") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER); + } + }; + public static final CreativeTabs MATERIALS = MISC; + public static final CreativeTabs HOTBAR = new CreativeTabs(4, "hotbar") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Blocks.BOOKSHELF); + } + /** + * only shows items which have tabToDisplayOn == this + */ + @SideOnly(Side.CLIENT) + public void displayAllRelevantItems(NonNullList p_78018_1_) + { + throw new RuntimeException("Implement exception client-side."); + } + @SideOnly(Side.CLIENT) + public boolean isAlignedRight() + { + return true; + } + }; + public static final CreativeTabs INVENTORY = (new CreativeTabs(11, "inventory") + { + @SideOnly(Side.CLIENT) + public ItemStack getTabIconItem() + { + return new ItemStack(Item.getItemFromBlock(Blocks.CHEST)); + } + }).setBackgroundImageName("inventory.png").setNoScrollbar().setNoTitle(); + private final int tabIndex; + public final String tabLabel; + /** Texture to use. */ + private String backgroundTexture = "items.png"; + private boolean hasScrollbar = true; + /** Whether to draw the title in the foreground of the creative GUI */ + private boolean drawTitle = true; + private EnumEnchantmentType[] enchantmentTypes = new EnumEnchantmentType[0]; + private ItemStack iconItemStack; + + public CreativeTabs(String label) + { + this(getNextID(), label); + } + + public CreativeTabs(int index, String label) + { + if (index >= CREATIVE_TAB_ARRAY.length) + { + CreativeTabs[] tmp = new CreativeTabs[index + 1]; + for (int x = 0; x < CREATIVE_TAB_ARRAY.length; x++) + { + tmp[x] = CREATIVE_TAB_ARRAY[x]; + } + CREATIVE_TAB_ARRAY = tmp; + } + this.tabIndex = index; + this.tabLabel = label; + this.iconItemStack = ItemStack.EMPTY; + CREATIVE_TAB_ARRAY[index] = this; + } + + @SideOnly(Side.CLIENT) + public int getTabIndex() + { + return this.tabIndex; + } + + public CreativeTabs setBackgroundImageName(String texture) + { + this.backgroundTexture = texture; + return this; + } + + @SideOnly(Side.CLIENT) + public String getTabLabel() + { + return this.tabLabel; + } + + /** + * Gets the translated Label. + */ + @SideOnly(Side.CLIENT) + public String getTranslatedTabLabel() + { + return "itemGroup." + this.getTabLabel(); + } + + @SideOnly(Side.CLIENT) + public ItemStack getIconItemStack() + { + if (this.iconItemStack.isEmpty()) + { + this.iconItemStack = this.getTabIconItem(); + } + + return this.iconItemStack; + } + + @SideOnly(Side.CLIENT) + public abstract ItemStack getTabIconItem(); + + @SideOnly(Side.CLIENT) + public String getBackgroundImageName() + { + return this.backgroundTexture; + } + + @SideOnly(Side.CLIENT) + public boolean drawInForegroundOfTab() + { + return this.drawTitle; + } + + public CreativeTabs setNoTitle() + { + this.drawTitle = false; + return this; + } + + @SideOnly(Side.CLIENT) + public boolean shouldHidePlayerInventory() + { + return this.hasScrollbar; + } + + public CreativeTabs setNoScrollbar() + { + this.hasScrollbar = false; + return this; + } + + /** + * returns index % 6 + */ + @SideOnly(Side.CLIENT) + public int getTabColumn() + { + if (tabIndex > 11) + { + return ((tabIndex - 12) % 10) % 5; + } + return this.tabIndex % 6; + } + + /** + * returns tabIndex < 6 + */ + @SideOnly(Side.CLIENT) + public boolean isTabInFirstRow() + { + if (tabIndex > 11) + { + return ((tabIndex - 12) % 10) < 5; + } + return this.tabIndex < 6; + } + + @SideOnly(Side.CLIENT) + public boolean isAlignedRight() + { + return this.getTabColumn() == 5; + } + + /** + * Returns the enchantment types relevant to this tab + */ + public EnumEnchantmentType[] getRelevantEnchantmentTypes() + { + return this.enchantmentTypes; + } + + /** + * Sets the enchantment types for populating this tab with enchanting books + */ + public CreativeTabs setRelevantEnchantmentTypes(EnumEnchantmentType... types) + { + this.enchantmentTypes = types; + return this; + } + + public boolean hasRelevantEnchantmentType(@Nullable EnumEnchantmentType enchantmentType) + { + if (enchantmentType != null) + { + for (EnumEnchantmentType enumenchantmenttype : this.enchantmentTypes) + { + if (enumenchantmenttype == enchantmentType) + { + return true; + } + } + } + + return false; + } + + /** + * only shows items which have tabToDisplayOn == this + */ + @SideOnly(Side.CLIENT) + public void displayAllRelevantItems(NonNullList p_78018_1_) + { + for (Item item : Item.REGISTRY) + { + item.getSubItems(this, p_78018_1_); + } + } + + public int getTabPage() + { + if (tabIndex > 11) + { + return ((tabIndex - 12) / 10) + 1; + } + return 0; + } + + public static int getNextID() + { + return CREATIVE_TAB_ARRAY.length; + } + + /** + * Determines if the search bar should be shown for this tab. + * + * @return True to show the bar + */ + public boolean hasSearchBar() + { + return tabIndex == CreativeTabs.SEARCH.tabIndex; + } + + /** + * Gets the width of the search bar of the creative tab, use this if your + * creative tab name overflows together with a custom texture. + * + * @return The width of the search bar, 89 by default + */ + public int getSearchbarWidth() + { + return 89; + } + + @SideOnly(Side.CLIENT) + public net.minecraft.util.ResourceLocation getBackgroundImage() + { + return new net.minecraft.util.ResourceLocation("textures/gui/container/creative_inventory/tab_" + this.getBackgroundImageName()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/creativetab/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/creativetab/package-info.java new file mode 100644 index 0000000..529716f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/creativetab/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.creativetab; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java new file mode 100644 index 0000000..2427dfa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/BehaviorDefaultDispenseItem.java @@ -0,0 +1,80 @@ +package net.minecraft.dispenser; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +public class BehaviorDefaultDispenseItem implements IBehaviorDispenseItem +{ + /** + * Dispenses the specified ItemStack from a dispenser. + */ + public final ItemStack dispense(IBlockSource source, ItemStack stack) + { + ItemStack itemstack = this.dispenseStack(source, stack); + this.playDispenseSound(source); + this.spawnDispenseParticles(source, (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + return itemstack; + } + + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + IPosition iposition = BlockDispenser.getDispensePosition(source); + ItemStack itemstack = stack.splitStack(1); + doDispense(source.getWorld(), itemstack, 6, enumfacing, iposition); + return stack; + } + + public static void doDispense(World worldIn, ItemStack stack, int speed, EnumFacing facing, IPosition position) + { + double d0 = position.getX(); + double d1 = position.getY(); + double d2 = position.getZ(); + + if (facing.getAxis() == EnumFacing.Axis.Y) + { + d1 = d1 - 0.125D; + } + else + { + d1 = d1 - 0.15625D; + } + + EntityItem entityitem = new EntityItem(worldIn, d0, d1, d2, stack); + double d3 = worldIn.rand.nextDouble() * 0.1D + 0.2D; + entityitem.motionX = (double)facing.getFrontOffsetX() * d3; + entityitem.motionY = 0.20000000298023224D; + entityitem.motionZ = (double)facing.getFrontOffsetZ() * d3; + entityitem.motionX += worldIn.rand.nextGaussian() * 0.007499999832361937D * (double)speed; + entityitem.motionY += worldIn.rand.nextGaussian() * 0.007499999832361937D * (double)speed; + entityitem.motionZ += worldIn.rand.nextGaussian() * 0.007499999832361937D * (double)speed; + worldIn.spawnEntity(entityitem); + } + + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(1000, source.getBlockPos(), 0); + } + + /** + * Order clients to display dispense particles from the specified block and facing. + */ + protected void spawnDispenseParticles(IBlockSource source, EnumFacing facingIn) + { + source.getWorld().playEvent(2000, source.getBlockPos(), this.getWorldEventDataFrom(facingIn)); + } + + private int getWorldEventDataFrom(EnumFacing facingIn) + { + return facingIn.getFrontOffsetX() + 1 + (facingIn.getFrontOffsetZ() + 1) * 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/BehaviorProjectileDispense.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/BehaviorProjectileDispense.java new file mode 100644 index 0000000..507d885 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/BehaviorProjectileDispense.java @@ -0,0 +1,49 @@ +package net.minecraft.dispenser; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IProjectile; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; + +public abstract class BehaviorProjectileDispense extends BehaviorDefaultDispenseItem +{ + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + IPosition iposition = BlockDispenser.getDispensePosition(source); + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + IProjectile iprojectile = this.getProjectileEntity(world, iposition, stack); + iprojectile.shoot((double)enumfacing.getFrontOffsetX(), (double)((float)enumfacing.getFrontOffsetY() + 0.1F), (double)enumfacing.getFrontOffsetZ(), this.getProjectileVelocity(), this.getProjectileInaccuracy()); + world.spawnEntity((Entity)iprojectile); + stack.shrink(1); + return stack; + } + + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(1002, source.getBlockPos(), 0); + } + + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected abstract IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn); + + protected float getProjectileInaccuracy() + { + return 6.0F; + } + + protected float getProjectileVelocity() + { + return 1.1F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/IBehaviorDispenseItem.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/IBehaviorDispenseItem.java new file mode 100644 index 0000000..35a144a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/IBehaviorDispenseItem.java @@ -0,0 +1,22 @@ +package net.minecraft.dispenser; + +import net.minecraft.item.ItemStack; + +public interface IBehaviorDispenseItem +{ + IBehaviorDispenseItem DEFAULT_BEHAVIOR = new IBehaviorDispenseItem() + { + /** + * Dispenses the specified ItemStack from a dispenser. + */ + public ItemStack dispense(IBlockSource source, ItemStack stack) + { + return stack; + } + }; + + /** + * Dispenses the specified ItemStack from a dispenser. + */ + ItemStack dispense(IBlockSource source, ItemStack stack); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/IBlockSource.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/IBlockSource.java new file mode 100644 index 0000000..4676041 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/IBlockSource.java @@ -0,0 +1,24 @@ +package net.minecraft.dispenser; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; + +public interface IBlockSource extends ILocatableSource +{ + double getX(); + + double getY(); + + double getZ(); + + BlockPos getBlockPos(); + + /** + * Gets the block state of this position and returns it. + * @return Block state in this position + */ + IBlockState getBlockState(); + + T getBlockTileEntity(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/ILocatableSource.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/ILocatableSource.java new file mode 100644 index 0000000..ce7bf95 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/ILocatableSource.java @@ -0,0 +1,5 @@ +package net.minecraft.dispenser; + +public interface ILocatableSource extends ILocation +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/ILocation.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/ILocation.java new file mode 100644 index 0000000..0a09078 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/ILocation.java @@ -0,0 +1,8 @@ +package net.minecraft.dispenser; + +import net.minecraft.world.World; + +public interface ILocation extends IPosition +{ + World getWorld(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/IPosition.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/IPosition.java new file mode 100644 index 0000000..b6602d3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/IPosition.java @@ -0,0 +1,10 @@ +package net.minecraft.dispenser; + +public interface IPosition +{ + double getX(); + + double getY(); + + double getZ(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/PositionImpl.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/PositionImpl.java new file mode 100644 index 0000000..82fda2e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/PositionImpl.java @@ -0,0 +1,30 @@ +package net.minecraft.dispenser; + +public class PositionImpl implements IPosition +{ + protected final double x; + protected final double y; + protected final double z; + + public PositionImpl(double xCoord, double yCoord, double zCoord) + { + this.x = xCoord; + this.y = yCoord; + this.z = zCoord; + } + + public double getX() + { + return this.x; + } + + public double getY() + { + return this.y; + } + + public double getZ() + { + return this.z; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/dispenser/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/dispenser/package-info.java new file mode 100644 index 0000000..20edae5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/dispenser/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.dispenser; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/Enchantment.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/Enchantment.java new file mode 100644 index 0000000..191008d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/Enchantment.java @@ -0,0 +1,299 @@ +package net.minecraft.enchantment; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.translation.I18n; + +public abstract class Enchantment extends net.minecraftforge.registries.IForgeRegistryEntry.Impl +{ + public static final RegistryNamespaced REGISTRY = net.minecraftforge.registries.GameData.getWrapper(Enchantment.class); + /** Where this enchantment has an effect, e.g. offhand, pants */ + private final EntityEquipmentSlot[] applicableEquipmentTypes; + private final Enchantment.Rarity rarity; + /** The EnumEnchantmentType given to this Enchantment. */ + @Nullable + public EnumEnchantmentType type; + /** Used in localisation and stats. */ + protected String name; + + /** + * Gets an Enchantment from the registry, based on a numeric ID. + */ + @Nullable + public static Enchantment getEnchantmentByID(int id) + { + return REGISTRY.getObjectById(id); + } + + /** + * Gets the numeric ID for the passed enchantment. + */ + public static int getEnchantmentID(Enchantment enchantmentIn) + { + return REGISTRY.getIDForObject(enchantmentIn); + } + + /** + * Retrieves an enchantment by using its location name. + */ + @Nullable + public static Enchantment getEnchantmentByLocation(String location) + { + return REGISTRY.getObject(new ResourceLocation(location)); + } + + protected Enchantment(Enchantment.Rarity rarityIn, EnumEnchantmentType typeIn, EntityEquipmentSlot[] slots) + { + this.rarity = rarityIn; + this.type = typeIn; + this.applicableEquipmentTypes = slots; + } + + /** + * Gets list of all the entity's currently equipped gear that this enchantment can go on + */ + public List getEntityEquipment(EntityLivingBase entityIn) + { + List list = Lists.newArrayList(); + + for (EntityEquipmentSlot entityequipmentslot : this.applicableEquipmentTypes) + { + ItemStack itemstack = entityIn.getItemStackFromSlot(entityequipmentslot); + + if (!itemstack.isEmpty()) + { + list.add(itemstack); + } + } + + return list; + } + + /** + * Retrieves the weight value of an Enchantment. This weight value is used within vanilla to determine how rare an + * enchantment is. + */ + public Enchantment.Rarity getRarity() + { + return this.rarity; + } + + /** + * Returns the minimum level that the enchantment can have. + */ + public int getMinLevel() + { + return 1; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 1 + enchantmentLevel * 10; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 5; + } + + /** + * Calculates the damage protection of the enchantment based on level and damage source passed. + */ + public int calcModifierDamage(int level, DamageSource source) + { + return 0; + } + + /** + * Calculates the additional damage that will be dealt by an item with this enchantment. This alternative to + * calcModifierDamage is sensitive to the targets EnumCreatureAttribute. + */ + public float calcDamageByCreature(int level, EnumCreatureAttribute creatureType) + { + return 0.0F; + } + + public final boolean isCompatibleWith(Enchantment p_191560_1_) + { + return this.canApplyTogether(p_191560_1_) && p_191560_1_.canApplyTogether(this); + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + protected boolean canApplyTogether(Enchantment ench) + { + return this != ench; + } + + /** + * Sets the enchantment name + */ + public Enchantment setName(String enchName) + { + this.name = enchName; + return this; + } + + /** + * Return the name of key in translation table of this enchantment. + */ + public String getName() + { + return "enchantment." + this.name; + } + + /** + * Returns the correct traslated name of the enchantment and the level in roman numbers. + */ + public String getTranslatedName(int level) + { + String s = I18n.translateToLocal(this.getName()); + + if (this.isCurse()) + { + s = TextFormatting.RED + s; + } + + return level == 1 && this.getMaxLevel() == 1 ? s : s + " " + I18n.translateToLocal("enchantment.level." + level); + } + + /** + * Determines if this enchantment can be applied to a specific ItemStack. + */ + public boolean canApply(ItemStack stack) + { + return canApplyAtEnchantingTable(stack); + } + + /** + * Called whenever a mob is damaged with an item that has this enchantment on it. + */ + public void onEntityDamaged(EntityLivingBase user, Entity target, int level) + { + } + + /** + * Whenever an entity that has this enchantment on one of its associated items is damaged this method will be + * called. + */ + public void onUserHurt(EntityLivingBase user, Entity attacker, int level) + { + } + + public boolean isTreasureEnchantment() + { + return false; + } + + public boolean isCurse() + { + return false; + } + + /** + * This applies specifically to applying at the enchanting table. The other method {@link #canApply(ItemStack)} + * applies for all possible enchantments. + * @param stack + * @return + */ + public boolean canApplyAtEnchantingTable(ItemStack stack) + { + return stack.getItem().canApplyAtEnchantingTable(stack, this); + } + + /** + * Is this enchantment allowed to be enchanted on books via Enchantment Table + * @return false to disable the vanilla feature + */ + public boolean isAllowedOnBooks() + { + return true; + } + + /** + * Registers all of the vanilla enchantments. + */ + public static void registerEnchantments() + { + EntityEquipmentSlot[] aentityequipmentslot = new EntityEquipmentSlot[] {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + REGISTRY.register(0, new ResourceLocation("protection"), new EnchantmentProtection(Enchantment.Rarity.COMMON, EnchantmentProtection.Type.ALL, aentityequipmentslot)); + REGISTRY.register(1, new ResourceLocation("fire_protection"), new EnchantmentProtection(Enchantment.Rarity.UNCOMMON, EnchantmentProtection.Type.FIRE, aentityequipmentslot)); + REGISTRY.register(2, new ResourceLocation("feather_falling"), new EnchantmentProtection(Enchantment.Rarity.UNCOMMON, EnchantmentProtection.Type.FALL, aentityequipmentslot)); + REGISTRY.register(3, new ResourceLocation("blast_protection"), new EnchantmentProtection(Enchantment.Rarity.RARE, EnchantmentProtection.Type.EXPLOSION, aentityequipmentslot)); + REGISTRY.register(4, new ResourceLocation("projectile_protection"), new EnchantmentProtection(Enchantment.Rarity.UNCOMMON, EnchantmentProtection.Type.PROJECTILE, aentityequipmentslot)); + REGISTRY.register(5, new ResourceLocation("respiration"), new EnchantmentOxygen(Enchantment.Rarity.RARE, aentityequipmentslot)); + REGISTRY.register(6, new ResourceLocation("aqua_affinity"), new EnchantmentWaterWorker(Enchantment.Rarity.RARE, aentityequipmentslot)); + REGISTRY.register(7, new ResourceLocation("thorns"), new EnchantmentThorns(Enchantment.Rarity.VERY_RARE, aentityequipmentslot)); + REGISTRY.register(8, new ResourceLocation("depth_strider"), new EnchantmentWaterWalker(Enchantment.Rarity.RARE, aentityequipmentslot)); + REGISTRY.register(9, new ResourceLocation("frost_walker"), new EnchantmentFrostWalker(Enchantment.Rarity.RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.FEET})); + REGISTRY.register(10, new ResourceLocation("binding_curse"), new EnchantmentBindingCurse(Enchantment.Rarity.VERY_RARE, aentityequipmentslot)); + REGISTRY.register(16, new ResourceLocation("sharpness"), new EnchantmentDamage(Enchantment.Rarity.COMMON, 0, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(17, new ResourceLocation("smite"), new EnchantmentDamage(Enchantment.Rarity.UNCOMMON, 1, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(18, new ResourceLocation("bane_of_arthropods"), new EnchantmentDamage(Enchantment.Rarity.UNCOMMON, 2, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(19, new ResourceLocation("knockback"), new EnchantmentKnockback(Enchantment.Rarity.UNCOMMON, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(20, new ResourceLocation("fire_aspect"), new EnchantmentFireAspect(Enchantment.Rarity.RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(21, new ResourceLocation("looting"), new EnchantmentLootBonus(Enchantment.Rarity.RARE, EnumEnchantmentType.WEAPON, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(22, new ResourceLocation("sweeping"), new EnchantmentSweepingEdge(Enchantment.Rarity.RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(32, new ResourceLocation("efficiency"), new EnchantmentDigging(Enchantment.Rarity.COMMON, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(33, new ResourceLocation("silk_touch"), new EnchantmentUntouching(Enchantment.Rarity.VERY_RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(34, new ResourceLocation("unbreaking"), new EnchantmentDurability(Enchantment.Rarity.UNCOMMON, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(35, new ResourceLocation("fortune"), new EnchantmentLootBonus(Enchantment.Rarity.RARE, EnumEnchantmentType.DIGGER, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(48, new ResourceLocation("power"), new EnchantmentArrowDamage(Enchantment.Rarity.COMMON, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(49, new ResourceLocation("punch"), new EnchantmentArrowKnockback(Enchantment.Rarity.RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(50, new ResourceLocation("flame"), new EnchantmentArrowFire(Enchantment.Rarity.RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(51, new ResourceLocation("infinity"), new EnchantmentArrowInfinite(Enchantment.Rarity.VERY_RARE, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(61, new ResourceLocation("luck_of_the_sea"), new EnchantmentLootBonus(Enchantment.Rarity.RARE, EnumEnchantmentType.FISHING_ROD, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(62, new ResourceLocation("lure"), new EnchantmentFishingSpeed(Enchantment.Rarity.RARE, EnumEnchantmentType.FISHING_ROD, new EntityEquipmentSlot[] {EntityEquipmentSlot.MAINHAND})); + REGISTRY.register(70, new ResourceLocation("mending"), new EnchantmentMending(Enchantment.Rarity.RARE, EntityEquipmentSlot.values())); + REGISTRY.register(71, new ResourceLocation("vanishing_curse"), new EnchantmentVanishingCurse(Enchantment.Rarity.VERY_RARE, EntityEquipmentSlot.values())); + } + + public static enum Rarity + { + COMMON(10), + UNCOMMON(5), + RARE(2), + VERY_RARE(1); + + /** The weight of the Rarity. */ + private final int weight; + + private Rarity(int rarityWeight) + { + this.weight = rarityWeight; + } + + /** + * Retrieves the weight of Rarity. + */ + public int getWeight() + { + return this.weight; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowDamage.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowDamage.java new file mode 100644 index 0000000..6dac347 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowDamage.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentArrowDamage extends Enchantment +{ + public EnchantmentArrowDamage(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.BOW, slots); + this.setName("arrowDamage"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 1 + (enchantmentLevel - 1) * 10; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 15; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 5; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowFire.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowFire.java new file mode 100644 index 0000000..7f69e83 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowFire.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentArrowFire extends Enchantment +{ + public EnchantmentArrowFire(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.BOW, slots); + this.setName("arrowFire"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 20; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowInfinite.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowInfinite.java new file mode 100644 index 0000000..ccbf446 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowInfinite.java @@ -0,0 +1,44 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentArrowInfinite extends Enchantment +{ + public EnchantmentArrowInfinite(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.BOW, slots); + this.setName("arrowInfinite"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 20; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + return ench instanceof EnchantmentMending ? false : super.canApplyTogether(ench); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowKnockback.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowKnockback.java new file mode 100644 index 0000000..6b92e75 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentArrowKnockback.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentArrowKnockback extends Enchantment +{ + public EnchantmentArrowKnockback(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.BOW, slots); + this.setName("arrowKnockback"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 12 + (enchantmentLevel - 1) * 20; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 25; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentBindingCurse.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentBindingCurse.java new file mode 100644 index 0000000..2f1ccab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentBindingCurse.java @@ -0,0 +1,46 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentBindingCurse extends Enchantment +{ + public EnchantmentBindingCurse(Enchantment.Rarity p_i47254_1_, EntityEquipmentSlot... p_i47254_2_) + { + super(p_i47254_1_, EnumEnchantmentType.WEARABLE, p_i47254_2_); + this.setName("binding_curse"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 25; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } + + public boolean isTreasureEnchantment() + { + return true; + } + + public boolean isCurse() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDamage.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDamage.java new file mode 100644 index 0000000..621f1a0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDamage.java @@ -0,0 +1,115 @@ +package net.minecraft.enchantment; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemAxe; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; + +public class EnchantmentDamage extends Enchantment +{ + /** None */ + private static final String[] DAMAGE_NAMES = new String[] {"all", "undead", "arthropods"}; + /** Holds the base factor of enchantability needed to be able to use the enchant. */ + private static final int[] MIN_COST = new int[] {1, 5, 5}; + /** None */ + private static final int[] LEVEL_COST = new int[] {11, 8, 8}; + /** None */ + private static final int[] LEVEL_COST_SPAN = new int[] {20, 20, 20}; + /** Defines the type of damage of the enchantment, 0 = all, 1 = undead, 3 = arthropods */ + public final int damageType; + + public EnchantmentDamage(Enchantment.Rarity rarityIn, int damageTypeIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.WEAPON, slots); + this.damageType = damageTypeIn; + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return MIN_COST[this.damageType] + (enchantmentLevel - 1) * LEVEL_COST[this.damageType]; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + LEVEL_COST_SPAN[this.damageType]; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 5; + } + + /** + * Calculates the additional damage that will be dealt by an item with this enchantment. This alternative to + * calcModifierDamage is sensitive to the targets EnumCreatureAttribute. + */ + public float calcDamageByCreature(int level, EnumCreatureAttribute creatureType) + { + if (this.damageType == 0) + { + return 1.0F + (float)Math.max(0, level - 1) * 0.5F; + } + else if (this.damageType == 1 && creatureType == EnumCreatureAttribute.UNDEAD) + { + return (float)level * 2.5F; + } + else + { + return this.damageType == 2 && creatureType == EnumCreatureAttribute.ARTHROPOD ? (float)level * 2.5F : 0.0F; + } + } + + /** + * Return the name of key in translation table of this enchantment. + */ + public String getName() + { + return "enchantment.damage." + DAMAGE_NAMES[this.damageType]; + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + return !(ench instanceof EnchantmentDamage); + } + + /** + * Determines if this enchantment can be applied to a specific ItemStack. + */ + public boolean canApply(ItemStack stack) + { + return stack.getItem() instanceof ItemAxe ? true : super.canApply(stack); + } + + /** + * Called whenever a mob is damaged with an item that has this enchantment on it. + */ + public void onEntityDamaged(EntityLivingBase user, Entity target, int level) + { + if (target instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)target; + + if (this.damageType == 2 && entitylivingbase.getCreatureAttribute() == EnumCreatureAttribute.ARTHROPOD) + { + int i = 20 + user.getRNG().nextInt(10 * level); + entitylivingbase.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, i, 3)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentData.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentData.java new file mode 100644 index 0000000..727fe54 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentData.java @@ -0,0 +1,18 @@ +package net.minecraft.enchantment; + +import net.minecraft.util.WeightedRandom; + +public class EnchantmentData extends WeightedRandom.Item +{ + /** Enchantment object associated with this EnchantmentData */ + public final Enchantment enchantment; + /** Enchantment level associated with this EnchantmentData */ + public final int enchantmentLevel; + + public EnchantmentData(Enchantment enchantmentObj, int enchLevel) + { + super(enchantmentObj.getRarity().getWeight()); + this.enchantment = enchantmentObj; + this.enchantmentLevel = enchLevel; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDigging.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDigging.java new file mode 100644 index 0000000..cf57f95 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDigging.java @@ -0,0 +1,46 @@ +package net.minecraft.enchantment; + +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; + +public class EnchantmentDigging extends Enchantment +{ + protected EnchantmentDigging(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.DIGGER, slots); + this.setName("digging"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 1 + 10 * (enchantmentLevel - 1); + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 5; + } + + /** + * Determines if this enchantment can be applied to a specific ItemStack. + */ + public boolean canApply(ItemStack stack) + { + return stack.getItem() == Items.SHEARS ? true : super.canApply(stack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDurability.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDurability.java new file mode 100644 index 0000000..97d6a3e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentDurability.java @@ -0,0 +1,64 @@ +package net.minecraft.enchantment; + +import java.util.Random; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +public class EnchantmentDurability extends Enchantment +{ + protected EnchantmentDurability(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.BREAKABLE, slots); + this.setName("durability"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 5 + (enchantmentLevel - 1) * 8; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } + + /** + * Determines if this enchantment can be applied to a specific ItemStack. + */ + public boolean canApply(ItemStack stack) + { + return stack.isItemStackDamageable() ? true : super.canApply(stack); + } + + /** + * Used by ItemStack.attemptDamageItem. Randomly determines if a point of damage should be negated using the + * enchantment level (par1). If the ItemStack is Armor then there is a flat 60% chance for damage to be negated no + * matter the enchantment level, otherwise there is a 1-(par/1) chance for damage to be negated. + */ + public static boolean negateDamage(ItemStack stack, int level, Random rand) + { + if (stack.getItem() instanceof ItemArmor && rand.nextFloat() < 0.6F) + { + return false; + } + else + { + return rand.nextInt(level + 1) > 0; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFireAspect.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFireAspect.java new file mode 100644 index 0000000..b1bc169 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFireAspect.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentFireAspect extends Enchantment +{ + protected EnchantmentFireAspect(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.WEAPON, slots); + this.setName("fire"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 10 + 20 * (enchantmentLevel - 1); + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFishingSpeed.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFishingSpeed.java new file mode 100644 index 0000000..1fa2fe6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFishingSpeed.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentFishingSpeed extends Enchantment +{ + protected EnchantmentFishingSpeed(Enchantment.Rarity rarityIn, EnumEnchantmentType typeIn, EntityEquipmentSlot... slots) + { + super(rarityIn, typeIn, slots); + this.setName("fishingSpeed"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 15 + (enchantmentLevel - 1) * 9; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFrostWalker.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFrostWalker.java new file mode 100644 index 0000000..70fda01 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentFrostWalker.java @@ -0,0 +1,89 @@ +package net.minecraft.enchantment; + +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class EnchantmentFrostWalker extends Enchantment +{ + public EnchantmentFrostWalker(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.ARMOR_FEET, slots); + this.setName("frostWalker"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return enchantmentLevel * 10; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 15; + } + + public boolean isTreasureEnchantment() + { + return true; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 2; + } + + public static void freezeNearby(EntityLivingBase living, World worldIn, BlockPos pos, int level) + { + if (living.onGround) + { + float f = (float)Math.min(16, 2 + level); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(0, 0, 0); + + for (BlockPos.MutableBlockPos blockpos$mutableblockpos1 : BlockPos.getAllInBoxMutable(pos.add((double)(-f), -1.0D, (double)(-f)), pos.add((double)f, -1.0D, (double)f))) + { + if (blockpos$mutableblockpos1.distanceSqToCenter(living.posX, living.posY, living.posZ) <= (double)(f * f)) + { + blockpos$mutableblockpos.setPos(blockpos$mutableblockpos1.getX(), blockpos$mutableblockpos1.getY() + 1, blockpos$mutableblockpos1.getZ()); + IBlockState iblockstate = worldIn.getBlockState(blockpos$mutableblockpos); + + if (iblockstate.getMaterial() == Material.AIR) + { + IBlockState iblockstate1 = worldIn.getBlockState(blockpos$mutableblockpos1); + + if (iblockstate1.getMaterial() == Material.WATER && (iblockstate1.getBlock() == net.minecraft.init.Blocks.WATER || iblockstate1.getBlock() == net.minecraft.init.Blocks.FLOWING_WATER) && ((Integer)iblockstate1.getValue(BlockLiquid.LEVEL)).intValue() == 0 && worldIn.mayPlace(Blocks.FROSTED_ICE, blockpos$mutableblockpos1, false, EnumFacing.DOWN, (Entity)null)) + { + worldIn.setBlockState(blockpos$mutableblockpos1, Blocks.FROSTED_ICE.getDefaultState()); + worldIn.scheduleUpdate(blockpos$mutableblockpos1.toImmutable(), Blocks.FROSTED_ICE, MathHelper.getInt(living.getRNG(), 60, 120)); + } + } + } + } + } + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + return super.canApplyTogether(ench) && ench != Enchantments.DEPTH_STRIDER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentHelper.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentHelper.java new file mode 100644 index 0000000..f8d3afe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentHelper.java @@ -0,0 +1,572 @@ +package net.minecraft.enchantment; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemEnchantedBook; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.Util; +import net.minecraft.util.WeightedRandom; +import net.minecraft.util.math.MathHelper; + +public class EnchantmentHelper +{ + /** Used to calculate the extra armor of enchantments on armors equipped on player. */ + private static final EnchantmentHelper.ModifierDamage ENCHANTMENT_MODIFIER_DAMAGE = new EnchantmentHelper.ModifierDamage(); + /** Used to calculate the (magic) extra damage done by enchantments on current equipped item of player. */ + private static final EnchantmentHelper.ModifierLiving ENCHANTMENT_MODIFIER_LIVING = new EnchantmentHelper.ModifierLiving(); + private static final EnchantmentHelper.HurtIterator ENCHANTMENT_ITERATOR_HURT = new EnchantmentHelper.HurtIterator(); + private static final EnchantmentHelper.DamageIterator ENCHANTMENT_ITERATOR_DAMAGE = new EnchantmentHelper.DamageIterator(); + + /** + * Returns the level of enchantment on the ItemStack passed. + */ + public static int getEnchantmentLevel(Enchantment enchID, ItemStack stack) + { + if (stack.isEmpty()) + { + return 0; + } + else + { + NBTTagList nbttaglist = stack.getEnchantmentTagList(); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + Enchantment enchantment = Enchantment.getEnchantmentByID(nbttagcompound.getShort("id")); + int j = nbttagcompound.getShort("lvl"); + + if (enchantment == enchID) + { + return j; + } + } + + return 0; + } + } + + /** + * Return the enchantments for the specified stack. + */ + public static Map getEnchantments(ItemStack stack) + { + Map map = Maps.newLinkedHashMap(); + NBTTagList nbttaglist = stack.getItem() == Items.ENCHANTED_BOOK ? ItemEnchantedBook.getEnchantments(stack) : stack.getEnchantmentTagList(); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + Enchantment enchantment = Enchantment.getEnchantmentByID(nbttagcompound.getShort("id")); + int j = nbttagcompound.getShort("lvl"); + map.put(enchantment, Integer.valueOf(j)); + } + + return map; + } + + /** + * Set the enchantments for the specified stack. + */ + public static void setEnchantments(Map enchMap, ItemStack stack) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (Entry entry : enchMap.entrySet()) + { + Enchantment enchantment = entry.getKey(); + + if (enchantment != null) + { + int i = ((Integer)entry.getValue()).intValue(); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setShort("id", (short)Enchantment.getEnchantmentID(enchantment)); + nbttagcompound.setShort("lvl", (short)i); + nbttaglist.appendTag(nbttagcompound); + + if (stack.getItem() == Items.ENCHANTED_BOOK) + { + ItemEnchantedBook.addEnchantment(stack, new EnchantmentData(enchantment, i)); + } + } + } + + if (nbttaglist.hasNoTags()) + { + if (stack.hasTagCompound()) + { + stack.getTagCompound().removeTag("ench"); + } + } + else if (stack.getItem() != Items.ENCHANTED_BOOK) + { + stack.setTagInfo("ench", nbttaglist); + } + } + + /** + * Executes the enchantment modifier on the ItemStack passed. + */ + private static void applyEnchantmentModifier(EnchantmentHelper.IModifier modifier, ItemStack stack) + { + if (!stack.isEmpty()) + { + NBTTagList nbttaglist = stack.getEnchantmentTagList(); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + int j = nbttaglist.getCompoundTagAt(i).getShort("id"); + int k = nbttaglist.getCompoundTagAt(i).getShort("lvl"); + + if (Enchantment.getEnchantmentByID(j) != null) + { + modifier.calculateModifier(Enchantment.getEnchantmentByID(j), k); + } + } + } + } + + /** + * Executes the enchantment modifier on the array of ItemStack passed. + */ + private static void applyEnchantmentModifierArray(EnchantmentHelper.IModifier modifier, Iterable stacks) + { + for (ItemStack itemstack : stacks) + { + applyEnchantmentModifier(modifier, itemstack); + } + } + + /** + * Returns the modifier of protection enchantments on armors equipped on player. + */ + public static int getEnchantmentModifierDamage(Iterable stacks, DamageSource source) + { + ENCHANTMENT_MODIFIER_DAMAGE.damageModifier = 0; + ENCHANTMENT_MODIFIER_DAMAGE.source = source; + applyEnchantmentModifierArray(ENCHANTMENT_MODIFIER_DAMAGE, stacks); + ENCHANTMENT_MODIFIER_DAMAGE.source = null; //Forge Fix memory leaks: https://bugs.mojang.com/browse/MC-128547 + return ENCHANTMENT_MODIFIER_DAMAGE.damageModifier; + } + + public static float getModifierForCreature(ItemStack stack, EnumCreatureAttribute creatureAttribute) + { + ENCHANTMENT_MODIFIER_LIVING.livingModifier = 0.0F; + ENCHANTMENT_MODIFIER_LIVING.entityLiving = creatureAttribute; + applyEnchantmentModifier(ENCHANTMENT_MODIFIER_LIVING, stack); + return ENCHANTMENT_MODIFIER_LIVING.livingModifier; + } + + public static float getSweepingDamageRatio(EntityLivingBase p_191527_0_) + { + int i = getMaxEnchantmentLevel(Enchantments.SWEEPING, p_191527_0_); + return i > 0 ? EnchantmentSweepingEdge.getSweepingDamageRatio(i) : 0.0F; + } + + public static void applyThornEnchantments(EntityLivingBase p_151384_0_, Entity p_151384_1_) + { + ENCHANTMENT_ITERATOR_HURT.attacker = p_151384_1_; + ENCHANTMENT_ITERATOR_HURT.user = p_151384_0_; + + if (p_151384_0_ != null) + { + applyEnchantmentModifierArray(ENCHANTMENT_ITERATOR_HURT, p_151384_0_.getEquipmentAndArmor()); + } + + if (p_151384_1_ instanceof EntityPlayer) + { + applyEnchantmentModifier(ENCHANTMENT_ITERATOR_HURT, p_151384_0_.getHeldItemMainhand()); + } + + ENCHANTMENT_ITERATOR_HURT.attacker = null; //Forge Fix memory leaks: https://bugs.mojang.com/browse/MC-128547 + ENCHANTMENT_ITERATOR_HURT.user = null; + } + + public static void applyArthropodEnchantments(EntityLivingBase p_151385_0_, Entity p_151385_1_) + { + ENCHANTMENT_ITERATOR_DAMAGE.user = p_151385_0_; + ENCHANTMENT_ITERATOR_DAMAGE.target = p_151385_1_; + + if (p_151385_0_ != null) + { + applyEnchantmentModifierArray(ENCHANTMENT_ITERATOR_DAMAGE, p_151385_0_.getEquipmentAndArmor()); + } + + if (p_151385_0_ instanceof EntityPlayer) + { + applyEnchantmentModifier(ENCHANTMENT_ITERATOR_DAMAGE, p_151385_0_.getHeldItemMainhand()); + } + + ENCHANTMENT_ITERATOR_DAMAGE.user = null; //Forge Fix memory leaks: https://bugs.mojang.com/browse/MC-128547 + ENCHANTMENT_ITERATOR_DAMAGE.target = null; + } + + public static int getMaxEnchantmentLevel(Enchantment p_185284_0_, EntityLivingBase p_185284_1_) + { + Iterable iterable = p_185284_0_.getEntityEquipment(p_185284_1_); + + if (iterable == null) + { + return 0; + } + else + { + int i = 0; + + for (ItemStack itemstack : iterable) + { + int j = getEnchantmentLevel(p_185284_0_, itemstack); + + if (j > i) + { + i = j; + } + } + + return i; + } + } + + /** + * Returns the Knockback modifier of the enchantment on the players held item. + */ + public static int getKnockbackModifier(EntityLivingBase player) + { + return getMaxEnchantmentLevel(Enchantments.KNOCKBACK, player); + } + + /** + * Returns the fire aspect modifier of the players held item. + */ + public static int getFireAspectModifier(EntityLivingBase player) + { + return getMaxEnchantmentLevel(Enchantments.FIRE_ASPECT, player); + } + + public static int getRespirationModifier(EntityLivingBase p_185292_0_) + { + return getMaxEnchantmentLevel(Enchantments.RESPIRATION, p_185292_0_); + } + + public static int getDepthStriderModifier(EntityLivingBase p_185294_0_) + { + return getMaxEnchantmentLevel(Enchantments.DEPTH_STRIDER, p_185294_0_); + } + + public static int getEfficiencyModifier(EntityLivingBase p_185293_0_) + { + return getMaxEnchantmentLevel(Enchantments.EFFICIENCY, p_185293_0_); + } + + public static int getFishingLuckBonus(ItemStack p_191529_0_) + { + return getEnchantmentLevel(Enchantments.LUCK_OF_THE_SEA, p_191529_0_); + } + + public static int getFishingSpeedBonus(ItemStack p_191528_0_) + { + return getEnchantmentLevel(Enchantments.LURE, p_191528_0_); + } + + public static int getLootingModifier(EntityLivingBase p_185283_0_) + { + return getMaxEnchantmentLevel(Enchantments.LOOTING, p_185283_0_); + } + + public static boolean getAquaAffinityModifier(EntityLivingBase p_185287_0_) + { + return getMaxEnchantmentLevel(Enchantments.AQUA_AFFINITY, p_185287_0_) > 0; + } + + /** + * Checks if the player has any armor enchanted with the frost walker enchantment. + * @return If player has equipment with frost walker + */ + public static boolean hasFrostWalkerEnchantment(EntityLivingBase player) + { + return getMaxEnchantmentLevel(Enchantments.FROST_WALKER, player) > 0; + } + + public static boolean hasBindingCurse(ItemStack p_190938_0_) + { + return getEnchantmentLevel(Enchantments.BINDING_CURSE, p_190938_0_) > 0; + } + + public static boolean hasVanishingCurse(ItemStack p_190939_0_) + { + return getEnchantmentLevel(Enchantments.VANISHING_CURSE, p_190939_0_) > 0; + } + + public static ItemStack getEnchantedItem(Enchantment p_92099_0_, EntityLivingBase p_92099_1_) + { + List list = p_92099_0_.getEntityEquipment(p_92099_1_); + + if (list.isEmpty()) + { + return ItemStack.EMPTY; + } + else + { + List list1 = Lists.newArrayList(); + + for (ItemStack itemstack : list) + { + if (!itemstack.isEmpty() && getEnchantmentLevel(p_92099_0_, itemstack) > 0) + { + list1.add(itemstack); + } + } + + return list1.isEmpty() ? ItemStack.EMPTY : (ItemStack)list1.get(p_92099_1_.getRNG().nextInt(list1.size())); + } + } + + /** + * Returns the enchantability of itemstack, using a separate calculation for each enchantNum (0, 1 or 2), cutting to + * the max enchantability power of the table, which is locked to a max of 15. + */ + public static int calcItemStackEnchantability(Random rand, int enchantNum, int power, ItemStack stack) + { + Item item = stack.getItem(); + int i = item.getItemEnchantability(stack); + + if (i <= 0) + { + return 0; + } + else + { + if (power > 15) + { + power = 15; + } + + int j = rand.nextInt(8) + 1 + (power >> 1) + rand.nextInt(power + 1); + + if (enchantNum == 0) + { + return Math.max(j / 3, 1); + } + else + { + return enchantNum == 1 ? j * 2 / 3 + 1 : Math.max(j, power * 2); + } + } + } + + /** + * Applys a random enchantment to the specified item. + */ + public static ItemStack addRandomEnchantment(Random random, ItemStack stack, int level, boolean allowTreasure) + { + List list = buildEnchantmentList(random, stack, level, allowTreasure); + boolean flag = stack.getItem() == Items.BOOK; + + if (flag) + { + stack = new ItemStack(Items.ENCHANTED_BOOK); + } + + for (EnchantmentData enchantmentdata : list) + { + if (flag) + { + ItemEnchantedBook.addEnchantment(stack, enchantmentdata); + } + else + { + stack.addEnchantment(enchantmentdata.enchantment, enchantmentdata.enchantmentLevel); + } + } + + return stack; + } + + /** + * Create a list of random EnchantmentData (enchantments) that can be added together to the ItemStack, the 3rd + * parameter is the total enchantability level. + */ + public static List buildEnchantmentList(Random randomIn, ItemStack itemStackIn, int level, boolean allowTreasure) + { + List list = Lists.newArrayList(); + Item item = itemStackIn.getItem(); + int i = item.getItemEnchantability(itemStackIn); + + if (i <= 0) + { + return list; + } + else + { + level = level + 1 + randomIn.nextInt(i / 4 + 1) + randomIn.nextInt(i / 4 + 1); + float f = (randomIn.nextFloat() + randomIn.nextFloat() - 1.0F) * 0.15F; + level = MathHelper.clamp(Math.round((float)level + (float)level * f), 1, Integer.MAX_VALUE); + List list1 = getEnchantmentDatas(level, itemStackIn, allowTreasure); + + if (!list1.isEmpty()) + { + list.add(WeightedRandom.getRandomItem(randomIn, list1)); + + while (randomIn.nextInt(50) <= level) + { + removeIncompatible(list1, (EnchantmentData)Util.getLastElement(list)); + + if (list1.isEmpty()) + { + break; + } + + list.add(WeightedRandom.getRandomItem(randomIn, list1)); + level /= 2; + } + } + + return list; + } + } + + public static void removeIncompatible(List p_185282_0_, EnchantmentData p_185282_1_) + { + Iterator iterator = p_185282_0_.iterator(); + + while (iterator.hasNext()) + { + if (!p_185282_1_.enchantment.isCompatibleWith((iterator.next()).enchantment)) + { + iterator.remove(); + } + } + } + + public static List getEnchantmentDatas(int p_185291_0_, ItemStack p_185291_1_, boolean allowTreasure) + { + List list = Lists.newArrayList(); + Item item = p_185291_1_.getItem(); + boolean flag = p_185291_1_.getItem() == Items.BOOK; + + for (Enchantment enchantment : Enchantment.REGISTRY) + { + if ((!enchantment.isTreasureEnchantment() || allowTreasure) && (enchantment.canApplyAtEnchantingTable(p_185291_1_) || (flag && enchantment.isAllowedOnBooks()))) + { + for (int i = enchantment.getMaxLevel(); i > enchantment.getMinLevel() - 1; --i) + { + if (p_185291_0_ >= enchantment.getMinEnchantability(i) && p_185291_0_ <= enchantment.getMaxEnchantability(i)) + { + list.add(new EnchantmentData(enchantment, i)); + break; + } + } + } + } + + return list; + } + + static final class DamageIterator implements EnchantmentHelper.IModifier + { + /** The user of the enchantment */ + public EntityLivingBase user; + /** The target entity being damaged */ + public Entity target; + + private DamageIterator() + { + } + + /** + * Generic method use to calculate modifiers of offensive or defensive enchantment values. + */ + public void calculateModifier(Enchantment enchantmentIn, int enchantmentLevel) + { + enchantmentIn.onEntityDamaged(this.user, this.target, enchantmentLevel); + } + } + + static final class HurtIterator implements EnchantmentHelper.IModifier + { + /** The user of the enchantment */ + public EntityLivingBase user; + /** The attacker of the user with the enchantment */ + public Entity attacker; + + private HurtIterator() + { + } + + /** + * Generic method use to calculate modifiers of offensive or defensive enchantment values. + */ + public void calculateModifier(Enchantment enchantmentIn, int enchantmentLevel) + { + enchantmentIn.onUserHurt(this.user, this.attacker, enchantmentLevel); + } + } + + interface IModifier + { + /** + * Generic method use to calculate modifiers of offensive or defensive enchantment values. + */ + void calculateModifier(Enchantment enchantmentIn, int enchantmentLevel); + } + + static final class ModifierDamage implements EnchantmentHelper.IModifier + { + /** + * Used to calculate the damage modifier (extra armor) on enchantments that the player have on equipped + * armors. + */ + public int damageModifier; + /** + * Used as parameter to calculate the damage modifier (extra armor) on enchantments that the player have on + * equipped armors. + */ + public DamageSource source; + + private ModifierDamage() + { + } + + /** + * Generic method use to calculate modifiers of offensive or defensive enchantment values. + */ + public void calculateModifier(Enchantment enchantmentIn, int enchantmentLevel) + { + this.damageModifier += enchantmentIn.calcModifierDamage(enchantmentLevel, this.source); + } + } + + static final class ModifierLiving implements EnchantmentHelper.IModifier + { + /** Used to calculate the (magic) extra damage based on enchantments of current equipped player item. */ + public float livingModifier; + public EnumCreatureAttribute entityLiving; + + private ModifierLiving() + { + } + + /** + * Generic method use to calculate modifiers of offensive or defensive enchantment values. + */ + public void calculateModifier(Enchantment enchantmentIn, int enchantmentLevel) + { + this.livingModifier += enchantmentIn.calcDamageByCreature(enchantmentLevel, this.entityLiving); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentKnockback.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentKnockback.java new file mode 100644 index 0000000..c4371f3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentKnockback.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentKnockback extends Enchantment +{ + protected EnchantmentKnockback(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.WEAPON, slots); + this.setName("knockback"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 5 + 20 * (enchantmentLevel - 1); + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentLootBonus.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentLootBonus.java new file mode 100644 index 0000000..2cbc3e4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentLootBonus.java @@ -0,0 +1,57 @@ +package net.minecraft.enchantment; + +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentLootBonus extends Enchantment +{ + protected EnchantmentLootBonus(Enchantment.Rarity rarityIn, EnumEnchantmentType typeIn, EntityEquipmentSlot... slots) + { + super(rarityIn, typeIn, slots); + + if (typeIn == EnumEnchantmentType.DIGGER) + { + this.setName("lootBonusDigger"); + } + else if (typeIn == EnumEnchantmentType.FISHING_ROD) + { + this.setName("lootBonusFishing"); + } + else + { + this.setName("lootBonus"); + } + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 15 + (enchantmentLevel - 1) * 9; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + return super.canApplyTogether(ench) && ench != Enchantments.SILK_TOUCH; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentMending.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentMending.java new file mode 100644 index 0000000..fc43a6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentMending.java @@ -0,0 +1,41 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentMending extends Enchantment +{ + public EnchantmentMending(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.BREAKABLE, slots); + this.setName("mending"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return enchantmentLevel * 25; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 50; + } + + public boolean isTreasureEnchantment() + { + return true; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentOxygen.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentOxygen.java new file mode 100644 index 0000000..5a9a928 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentOxygen.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentOxygen extends Enchantment +{ + public EnchantmentOxygen(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.ARMOR_HEAD, slots); + this.setName("oxygen"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 10 * enchantmentLevel; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 30; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentProtection.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentProtection.java new file mode 100644 index 0000000..50377d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentProtection.java @@ -0,0 +1,178 @@ +package net.minecraft.enchantment; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.MathHelper; + +public class EnchantmentProtection extends Enchantment +{ + /** + * Defines the type of protection of the enchantment, 0 = all, 1 = fire, 2 = fall (feather fall), 3 = explosion and + * 4 = projectile. + */ + public final EnchantmentProtection.Type protectionType; + + public EnchantmentProtection(Enchantment.Rarity rarityIn, EnchantmentProtection.Type protectionTypeIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.ARMOR, slots); + this.protectionType = protectionTypeIn; + + if (protectionTypeIn == EnchantmentProtection.Type.FALL) + { + this.type = EnumEnchantmentType.ARMOR_FEET; + } + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return this.protectionType.getMinimalEnchantability() + (enchantmentLevel - 1) * this.protectionType.getEnchantIncreasePerLevel(); + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + this.protectionType.getEnchantIncreasePerLevel(); + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 4; + } + + /** + * Calculates the damage protection of the enchantment based on level and damage source passed. + */ + public int calcModifierDamage(int level, DamageSource source) + { + if (source.canHarmInCreative()) + { + return 0; + } + else if (this.protectionType == EnchantmentProtection.Type.ALL) + { + return level; + } + else if (this.protectionType == EnchantmentProtection.Type.FIRE && source.isFireDamage()) + { + return level * 2; + } + else if (this.protectionType == EnchantmentProtection.Type.FALL && source == DamageSource.FALL) + { + return level * 3; + } + else if (this.protectionType == EnchantmentProtection.Type.EXPLOSION && source.isExplosion()) + { + return level * 2; + } + else + { + return this.protectionType == EnchantmentProtection.Type.PROJECTILE && source.isProjectile() ? level * 2 : 0; + } + } + + /** + * Return the name of key in translation table of this enchantment. + */ + public String getName() + { + return "enchantment.protect." + this.protectionType.getTypeName(); + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + if (ench instanceof EnchantmentProtection) + { + EnchantmentProtection enchantmentprotection = (EnchantmentProtection)ench; + + if (this.protectionType == enchantmentprotection.protectionType) + { + return false; + } + else + { + return this.protectionType == EnchantmentProtection.Type.FALL || enchantmentprotection.protectionType == EnchantmentProtection.Type.FALL; + } + } + else + { + return super.canApplyTogether(ench); + } + } + + /** + * Gets the amount of ticks an entity should be set fire, adjusted for fire protection. + */ + public static int getFireTimeForEntity(EntityLivingBase p_92093_0_, int p_92093_1_) + { + int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FIRE_PROTECTION, p_92093_0_); + + if (i > 0) + { + p_92093_1_ -= MathHelper.floor((float)p_92093_1_ * (float)i * 0.15F); + } + + return p_92093_1_; + } + + public static double getBlastDamageReduction(EntityLivingBase entityLivingBaseIn, double damage) + { + int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.BLAST_PROTECTION, entityLivingBaseIn); + + if (i > 0) + { + damage -= (double)MathHelper.floor(damage * (double)((float)i * 0.15F)); + } + + return damage; + } + + public static enum Type + { + ALL("all", 1, 11, 20), + FIRE("fire", 10, 8, 12), + FALL("fall", 5, 6, 10), + EXPLOSION("explosion", 5, 8, 12), + PROJECTILE("projectile", 3, 6, 15); + + private final String typeName; + private final int minEnchantability; + private final int levelCost; + private final int levelCostSpan; + + private Type(String name, int minimal, int perLevelEnchantability, int p_i47051_6_) + { + this.typeName = name; + this.minEnchantability = minimal; + this.levelCost = perLevelEnchantability; + this.levelCostSpan = p_i47051_6_; + } + + public String getTypeName() + { + return this.typeName; + } + + public int getMinimalEnchantability() + { + return this.minEnchantability; + } + + public int getEnchantIncreasePerLevel() + { + return this.levelCost; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentSweepingEdge.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentSweepingEdge.java new file mode 100644 index 0000000..f731095 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentSweepingEdge.java @@ -0,0 +1,48 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentSweepingEdge extends Enchantment +{ + public EnchantmentSweepingEdge(Enchantment.Rarity p_i47366_1_, EntityEquipmentSlot... p_i47366_2_) + { + super(p_i47366_1_, EnumEnchantmentType.WEAPON, p_i47366_2_); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 5 + (enchantmentLevel - 1) * 9; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 15; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } + + public static float getSweepingDamageRatio(int p_191526_0_) + { + return 1.0F - 1.0F / (float)(p_191526_0_ + 1); + } + + /** + * Return the name of key in translation table of this enchantment. + */ + public String getName() + { + return "enchantment.sweeping"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentThorns.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentThorns.java new file mode 100644 index 0000000..f255700 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentThorns.java @@ -0,0 +1,116 @@ +package net.minecraft.enchantment; + +import java.util.Random; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; + +public class EnchantmentThorns extends Enchantment +{ + public EnchantmentThorns(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.ARMOR_CHEST, slots); + this.setName("thorns"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 10 + 20 * (enchantmentLevel - 1); + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } + + /** + * Determines if this enchantment can be applied to a specific ItemStack. + */ + public boolean canApply(ItemStack stack) + { + return stack.getItem() instanceof ItemArmor ? true : super.canApply(stack); + } + + /** + * Whenever an entity that has this enchantment on one of its associated items is damaged this method will be + * called. + */ + public void onUserHurt(EntityLivingBase user, Entity attacker, int level) + { + Random random = user.getRNG(); + ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantments.THORNS, user); + + if (shouldHit(level, random)) + { + if (attacker != null) + { + attacker.attackEntityFrom(DamageSource.causeThornsDamage(user), (float)getDamage(level, random)); + } + + if (!itemstack.isEmpty()) + { + damageArmor(itemstack, 3, user); + } + } + else if (!itemstack.isEmpty()) + { + damageArmor(itemstack, 1, user); + } + } + + public static boolean shouldHit(int level, Random rnd) + { + if (level <= 0) + { + return false; + } + else + { + return rnd.nextFloat() < 0.15F * (float)level; + } + } + + public static int getDamage(int level, Random rnd) + { + return level > 10 ? level - 10 : 1 + rnd.nextInt(4); + } + + private void damageArmor(ItemStack stack, int amount, EntityLivingBase entity) + { + int slot = -1; + int x = 0; + for (ItemStack i : entity.getArmorInventoryList()) + { + if (i == stack){ + slot = x; + break; + } + x++; + } + if (slot == -1 || !(stack.getItem() instanceof net.minecraftforge.common.ISpecialArmor)) + { + stack.damageItem(1, entity); + return; + } + net.minecraftforge.common.ISpecialArmor armor = (net.minecraftforge.common.ISpecialArmor)stack.getItem(); + armor.damageArmor(entity, stack, DamageSource.causeThornsDamage(entity), amount, slot); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentUntouching.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentUntouching.java new file mode 100644 index 0000000..f0e3ee0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentUntouching.java @@ -0,0 +1,45 @@ +package net.minecraft.enchantment; + +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentUntouching extends Enchantment +{ + protected EnchantmentUntouching(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.DIGGER, slots); + this.setName("untouching"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 15; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return super.getMinEnchantability(enchantmentLevel) + 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + return super.canApplyTogether(ench) && ench != Enchantments.FORTUNE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentVanishingCurse.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentVanishingCurse.java new file mode 100644 index 0000000..ee8236f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentVanishingCurse.java @@ -0,0 +1,46 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentVanishingCurse extends Enchantment +{ + public EnchantmentVanishingCurse(Enchantment.Rarity p_i47252_1_, EntityEquipmentSlot... p_i47252_2_) + { + super(p_i47252_1_, EnumEnchantmentType.ALL, p_i47252_2_); + this.setName("vanishing_curse"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 25; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return 50; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } + + public boolean isTreasureEnchantment() + { + return true; + } + + public boolean isCurse() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentWaterWalker.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentWaterWalker.java new file mode 100644 index 0000000..07e765d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentWaterWalker.java @@ -0,0 +1,45 @@ +package net.minecraft.enchantment; + +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentWaterWalker extends Enchantment +{ + public EnchantmentWaterWalker(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.ARMOR_FEET, slots); + this.setName("waterWalker"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return enchantmentLevel * 10; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 15; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 3; + } + + /** + * Determines if the enchantment passed can be applyied together with this enchantment. + */ + public boolean canApplyTogether(Enchantment ench) + { + return super.canApplyTogether(ench) && ench != Enchantments.FROST_WALKER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentWaterWorker.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentWaterWorker.java new file mode 100644 index 0000000..51f364c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnchantmentWaterWorker.java @@ -0,0 +1,36 @@ +package net.minecraft.enchantment; + +import net.minecraft.inventory.EntityEquipmentSlot; + +public class EnchantmentWaterWorker extends Enchantment +{ + public EnchantmentWaterWorker(Enchantment.Rarity rarityIn, EntityEquipmentSlot... slots) + { + super(rarityIn, EnumEnchantmentType.ARMOR_HEAD, slots); + this.setName("waterWorker"); + } + + /** + * Returns the minimal value of enchantability needed on the enchantment level passed. + */ + public int getMinEnchantability(int enchantmentLevel) + { + return 1; + } + + /** + * Returns the maximum value of enchantability nedded on the enchantment level passed. + */ + public int getMaxEnchantability(int enchantmentLevel) + { + return this.getMinEnchantability(enchantmentLevel) + 40; + } + + /** + * Returns the maximum level that the enchantment can have. + */ + public int getMaxLevel() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnumEnchantmentType.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnumEnchantmentType.java new file mode 100644 index 0000000..388c80b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/EnumEnchantmentType.java @@ -0,0 +1,151 @@ +package net.minecraft.enchantment; + +import net.minecraft.block.BlockPumpkin; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemElytra; +import net.minecraft.item.ItemFishingRod; +import net.minecraft.item.ItemSkull; +import net.minecraft.item.ItemSword; +import net.minecraft.item.ItemTool; + +public enum EnumEnchantmentType +{ + ALL { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + for (EnumEnchantmentType enumenchantmenttype : EnumEnchantmentType.values()) + { + if (enumenchantmenttype != EnumEnchantmentType.ALL && enumenchantmenttype.canEnchantItem(itemIn)) + { + return true; + } + } + + return false; + } + }, + ARMOR { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemArmor; + } + }, + ARMOR_FEET { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemArmor && ((ItemArmor)itemIn).armorType == EntityEquipmentSlot.FEET; + } + }, + ARMOR_LEGS { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemArmor && ((ItemArmor)itemIn).armorType == EntityEquipmentSlot.LEGS; + } + }, + ARMOR_CHEST { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemArmor && ((ItemArmor)itemIn).armorType == EntityEquipmentSlot.CHEST; + } + }, + ARMOR_HEAD { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemArmor && ((ItemArmor)itemIn).armorType == EntityEquipmentSlot.HEAD; + } + }, + WEAPON { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemSword; + } + }, + DIGGER { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemTool; + } + }, + FISHING_ROD { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemFishingRod; + } + }, + BREAKABLE { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn.isDamageable(); + } + }, + BOW { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return itemIn instanceof ItemBow; + } + }, + WEARABLE { + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + boolean flag = itemIn instanceof ItemBlock && ((ItemBlock)itemIn).getBlock() instanceof BlockPumpkin; + return itemIn instanceof ItemArmor || itemIn instanceof ItemElytra || itemIn instanceof ItemSkull || flag; + } + }; + + private EnumEnchantmentType() + { + } + + private com.google.common.base.Predicate delegate = null; + private EnumEnchantmentType(com.google.common.base.Predicate delegate) + { + this.delegate = delegate; + } + /** + * Return true if the item passed can be enchanted by a enchantment of this type. + */ + public boolean canEnchantItem(Item itemIn) + { + return this.delegate == null ? false : this.delegate.apply(itemIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/enchantment/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/enchantment/package-info.java new file mode 100644 index 0000000..7b494d1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/enchantment/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.enchantment; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/Entity.java b/build/tmp/recompileMc/sources/net/minecraft/entity/Entity.java new file mode 100644 index 0000000..911a6ea --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/Entity.java @@ -0,0 +1,3761 @@ +package net.minecraft.entity; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockWall; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockPattern; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.ICommandSender; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.EnchantmentProtection; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagDouble; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Team; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.Mirror; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec2f; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.event.HoverEvent; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.Explosion; +import net.minecraft.world.Teleporter; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class Entity implements ICommandSender, net.minecraftforge.common.capabilities.ICapabilitySerializable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final List EMPTY_EQUIPMENT = Collections.emptyList(); + private static final AxisAlignedBB ZERO_AABB = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + private static double renderDistanceWeight = 1.0D; + private static int nextEntityID; + private int entityId; + /** + * Blocks entities from spawning when they do their AABB check to make sure the spot is clear of entities that can + * prevent spawning. + */ + public boolean preventEntitySpawning; + /** List of entities that are riding this entity */ + private final List riddenByEntities; + protected int rideCooldown; + private Entity ridingEntity; + public boolean forceSpawn; + /** Reference to the World object. */ + public World world; + public double prevPosX; + public double prevPosY; + public double prevPosZ; + /** X position of this entity, located at the center of its bounding box. */ + public double posX; + /** Y position of this entity, located at the bottom of its bounding box (its feet) */ + public double posY; + /** Z position of this entity, located at the center of its bounding box. */ + public double posZ; + /** Entity motion X */ + public double motionX; + /** Entity motion Y */ + public double motionY; + /** Entity motion Z */ + public double motionZ; + /** Entity rotation Yaw */ + public float rotationYaw; + /** Entity rotation Pitch */ + public float rotationPitch; + public float prevRotationYaw; + public float prevRotationPitch; + /** Axis aligned bounding box. */ + private AxisAlignedBB boundingBox; + public boolean onGround; + /** True if after a move this entity has collided with something on X- or Z-axis */ + public boolean collidedHorizontally; + /** True if after a move this entity has collided with something on Y-axis */ + public boolean collidedVertically; + /** True if after a move this entity has collided with something either vertically or horizontally */ + public boolean collided; + /** If true, an {@link SPacketEntityVelocity} will be sent updating this entity's velocity. */ + public boolean velocityChanged; + protected boolean isInWeb; + private boolean isOutsideBorder; + /** gets set by setEntityDead, so this must be the flag whether an Entity is dead (inactive may be better term) */ + public boolean isDead; + /** How wide this entity is considered to be */ + public float width; + /** How high this entity is considered to be */ + public float height; + /** The previous ticks distance walked multiplied by 0.6 */ + public float prevDistanceWalkedModified; + /** The distance walked multiplied by 0.6 */ + public float distanceWalkedModified; + public float distanceWalkedOnStepModified; + public float fallDistance; + /** The distance that has to be exceeded in order to triger a new step sound and an onEntityWalking event on a block */ + private int nextStepDistance; + private float nextFlap; + /** The entity's X coordinate at the previous tick, used to calculate position during rendering routines */ + public double lastTickPosX; + /** The entity's Y coordinate at the previous tick, used to calculate position during rendering routines */ + public double lastTickPosY; + /** The entity's Z coordinate at the previous tick, used to calculate position during rendering routines */ + public double lastTickPosZ; + /** + * How high this entity can step up when running into a block to try to get over it (currently make note the entity + * will always step up this amount and not just the amount needed) + */ + public float stepHeight; + /** Whether this entity won't clip with collision or not (make note it won't disable gravity) */ + public boolean noClip; + /** Reduces the velocity applied by entity collisions by the specified percent. */ + public float entityCollisionReduction; + protected Random rand; + /** How many ticks has this entity had ran since being alive */ + public int ticksExisted; + private int fire; + /** Whether this entity is currently inside of water (if it handles water movement that is) */ + protected boolean inWater; + /** Remaining time an entity will be "immune" to further damage after being hurt. */ + public int hurtResistantTime; + protected boolean firstUpdate; + protected boolean isImmuneToFire; + protected EntityDataManager dataManager; + protected static final DataParameter FLAGS = EntityDataManager.createKey(Entity.class, DataSerializers.BYTE); + private static final DataParameter AIR = EntityDataManager.createKey(Entity.class, DataSerializers.VARINT); + private static final DataParameter CUSTOM_NAME = EntityDataManager.createKey(Entity.class, DataSerializers.STRING); + private static final DataParameter CUSTOM_NAME_VISIBLE = EntityDataManager.createKey(Entity.class, DataSerializers.BOOLEAN); + private static final DataParameter SILENT = EntityDataManager.createKey(Entity.class, DataSerializers.BOOLEAN); + private static final DataParameter NO_GRAVITY = EntityDataManager.createKey(Entity.class, DataSerializers.BOOLEAN); + /** Has this entity been added to the chunk its within */ + public boolean addedToChunk; + public int chunkCoordX; + public int chunkCoordY; + public int chunkCoordZ; + @SideOnly(Side.CLIENT) + public long serverPosX; + @SideOnly(Side.CLIENT) + public long serverPosY; + @SideOnly(Side.CLIENT) + public long serverPosZ; + /** + * Render entity even if it is outside the camera frustum. Only true in EntityFish for now. Used in RenderGlobal: + * render if ignoreFrustumCheck or in frustum. + */ + public boolean ignoreFrustumCheck; + public boolean isAirBorne; + public int timeUntilPortal; + /** Whether the entity is inside a Portal */ + protected boolean inPortal; + protected int portalCounter; + /** Which dimension the player is in (-1 = the Nether, 0 = normal world) */ + public int dimension; + /** The position of the last portal the entity was in */ + protected BlockPos lastPortalPos; + /** A horizontal vector related to the position of the last portal the entity was in */ + protected Vec3d lastPortalVec; + /** A direction related to the position of the last portal the entity was in */ + protected EnumFacing teleportDirection; + private boolean invulnerable; + protected UUID entityUniqueID; + protected String cachedUniqueIdString; + /** The command result statistics for this Entity. */ + private final CommandResultStats cmdResultStats; + protected boolean glowing; + private final Set tags; + private boolean isPositionDirty; + private final double[] pistonDeltas; + private long pistonDeltasGameTime; + /** + * Setting this to true will prevent the world from calling {@link #onUpdate()} for this entity. + */ + public boolean updateBlocked; + + public Entity(World worldIn) + { + this.entityId = nextEntityID++; + this.riddenByEntities = Lists.newArrayList(); + this.boundingBox = ZERO_AABB; + this.width = 0.6F; + this.height = 1.8F; + this.nextStepDistance = 1; + this.nextFlap = 1.0F; + this.rand = new Random(); + this.fire = -this.getFireImmuneTicks(); + this.firstUpdate = true; + this.entityUniqueID = MathHelper.getRandomUUID(this.rand); + this.cachedUniqueIdString = this.entityUniqueID.toString(); + this.cmdResultStats = new CommandResultStats(); + this.tags = Sets.newHashSet(); + this.pistonDeltas = new double[] {0.0D, 0.0D, 0.0D}; + this.world = worldIn; + this.setPosition(0.0D, 0.0D, 0.0D); + + if (worldIn != null) + { + this.dimension = worldIn.provider.getDimension(); + } + + this.dataManager = new EntityDataManager(this); + this.dataManager.register(FLAGS, Byte.valueOf((byte)0)); + this.dataManager.register(AIR, Integer.valueOf(300)); + this.dataManager.register(CUSTOM_NAME_VISIBLE, Boolean.valueOf(false)); + this.dataManager.register(CUSTOM_NAME, ""); + this.dataManager.register(SILENT, Boolean.valueOf(false)); + this.dataManager.register(NO_GRAVITY, Boolean.valueOf(false)); + this.entityInit(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityEvent.EntityConstructing(this)); + capabilities = net.minecraftforge.event.ForgeEventFactory.gatherCapabilities(this); + } + + /** Forge: Used to store custom data for each entity. */ + private NBTTagCompound customEntityData; + public boolean captureDrops = false; + public java.util.ArrayList capturedDrops = new java.util.ArrayList(); + private net.minecraftforge.common.capabilities.CapabilityDispatcher capabilities; + + public int getEntityId() + { + return this.entityId; + } + + public void setEntityId(int id) + { + this.entityId = id; + } + + public Set getTags() + { + return this.tags; + } + + public boolean addTag(String tag) + { + if (this.tags.size() >= 1024) + { + return false; + } + else + { + this.tags.add(tag); + return true; + } + } + + public boolean removeTag(String tag) + { + return this.tags.remove(tag); + } + + /** + * Called by the /kill command. + */ + public void onKillCommand() + { + this.setDead(); + } + + protected abstract void entityInit(); + + public EntityDataManager getDataManager() + { + return this.dataManager; + } + + public boolean equals(Object p_equals_1_) + { + if (p_equals_1_ instanceof Entity) + { + return ((Entity)p_equals_1_).entityId == this.entityId; + } + else + { + return false; + } + } + + public int hashCode() + { + return this.entityId; + } + + /** + * Keeps moving the entity up so it isn't colliding with blocks and other requirements for this entity to be spawned + * (only actually used on players though its also on Entity) + */ + @SideOnly(Side.CLIENT) + protected void preparePlayerToSpawn() + { + if (this.world != null) + { + while (this.posY > 0.0D && this.posY < 256.0D) + { + this.setPosition(this.posX, this.posY, this.posZ); + + if (this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty()) + { + break; + } + + ++this.posY; + } + + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.rotationPitch = 0.0F; + } + } + + /** + * Will get destroyed next tick. + */ + public void setDead() + { + this.isDead = true; + } + + /** + * Sets whether this entity should drop its items when setDead() is called. This applies to container minecarts. + */ + public void setDropItemsWhenDead(boolean dropWhenDead) + { + } + + /** + * Sets the width and height of the entity. + */ + protected void setSize(float width, float height) + { + if (width != this.width || height != this.height) + { + float f = this.width; + this.width = width; + this.height = height; + + if (this.width < f) + { + double d0 = (double)width / 2.0D; + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - d0, this.posY, this.posZ - d0, this.posX + d0, this.posY + (double)this.height, this.posZ + d0)); + return; + } + + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + this.setEntityBoundingBox(new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, axisalignedbb.minX + (double)this.width, axisalignedbb.minY + (double)this.height, axisalignedbb.minZ + (double)this.width)); + + if (this.width > f && !this.firstUpdate && !this.world.isRemote) + { + this.move(MoverType.SELF, (double)(f - this.width), 0.0D, (double)(f - this.width)); + } + } + } + + /** + * Sets the rotation of the entity. + */ + protected void setRotation(float yaw, float pitch) + { + this.rotationYaw = yaw % 360.0F; + this.rotationPitch = pitch % 360.0F; + } + + /** + * Sets the x,y,z of the entity from the given parameters. Also seems to set up a bounding box. + */ + public void setPosition(double x, double y, double z) + { + this.posX = x; + this.posY = y; + this.posZ = z; + float f = this.width / 2.0F; + float f1 = this.height; + this.setEntityBoundingBox(new AxisAlignedBB(x - (double)f, y, z - (double)f, x + (double)f, y + (double)f1, z + (double)f)); + } + + /** + * Adds 15% to the entity's yaw and subtracts 15% from the pitch. Clamps pitch from -90 to 90. Both arguments in + * degrees. + */ + @SideOnly(Side.CLIENT) + public void turn(float yaw, float pitch) + { + float f = this.rotationPitch; + float f1 = this.rotationYaw; + this.rotationYaw = (float)((double)this.rotationYaw + (double)yaw * 0.15D); + this.rotationPitch = (float)((double)this.rotationPitch - (double)pitch * 0.15D); + this.rotationPitch = MathHelper.clamp(this.rotationPitch, -90.0F, 90.0F); + this.prevRotationPitch += this.rotationPitch - f; + this.prevRotationYaw += this.rotationYaw - f1; + + if (this.ridingEntity != null) + { + this.ridingEntity.applyOrientationToEntity(this); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (!this.world.isRemote) + { + this.setFlag(6, this.isGlowing()); + } + + this.onEntityUpdate(); + } + + /** + * Gets called every tick from main Entity class + */ + public void onEntityUpdate() + { + this.world.profiler.startSection("entityBaseTick"); + + if (this.isRiding() && this.getRidingEntity().isDead) + { + this.dismountRidingEntity(); + } + + if (this.rideCooldown > 0) + { + --this.rideCooldown; + } + + this.prevDistanceWalkedModified = this.distanceWalkedModified; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + + if (!this.world.isRemote && this.world instanceof WorldServer) + { + this.world.profiler.startSection("portal"); + + if (this.inPortal) + { + MinecraftServer minecraftserver = this.world.getMinecraftServer(); + + if (minecraftserver.getAllowNether()) + { + if (!this.isRiding()) + { + int i = this.getMaxInPortalTime(); + + if (this.portalCounter++ >= i) + { + this.portalCounter = i; + this.timeUntilPortal = this.getPortalCooldown(); + int j; + + if (this.world.provider.getDimensionType().getId() == -1) + { + j = 0; + } + else + { + j = -1; + } + + this.changeDimension(j); + } + } + + this.inPortal = false; + } + } + else + { + if (this.portalCounter > 0) + { + this.portalCounter -= 4; + } + + if (this.portalCounter < 0) + { + this.portalCounter = 0; + } + } + + this.decrementTimeUntilPortal(); + this.world.profiler.endSection(); + } + + this.spawnRunningParticles(); + this.handleWaterMovement(); + + if (this.world.isRemote) + { + this.extinguish(); + } + else if (this.fire > 0) + { + if (this.isImmuneToFire) + { + this.fire -= 4; + + if (this.fire < 0) + { + this.extinguish(); + } + } + else + { + if (this.fire % 20 == 0) + { + this.attackEntityFrom(DamageSource.ON_FIRE, 1.0F); + } + + --this.fire; + } + } + + if (this.isInLava()) + { + this.setOnFireFromLava(); + this.fallDistance *= 0.5F; + } + + if (this.posY < -64.0D) + { + this.outOfWorld(); + } + + if (!this.world.isRemote) + { + this.setFlag(0, this.fire > 0); + } + + this.firstUpdate = false; + this.world.profiler.endSection(); + } + + /** + * Decrements the counter for the remaining time until the entity may use a portal again. + */ + protected void decrementTimeUntilPortal() + { + if (this.timeUntilPortal > 0) + { + --this.timeUntilPortal; + } + } + + /** + * Return the amount of time this entity should stay in a portal before being transported. + */ + public int getMaxInPortalTime() + { + return 1; + } + + /** + * Called whenever the entity is walking inside of lava. + */ + protected void setOnFireFromLava() + { + if (!this.isImmuneToFire) + { + this.attackEntityFrom(DamageSource.LAVA, 4.0F); + this.setFire(15); + } + } + + /** + * Sets entity to burn for x amount of seconds, cannot lower amount of existing fire. + */ + public void setFire(int seconds) + { + int i = seconds * 20; + + if (this instanceof EntityLivingBase) + { + i = EnchantmentProtection.getFireTimeForEntity((EntityLivingBase)this, i); + } + + if (this.fire < i) + { + this.fire = i; + } + } + + /** + * Removes fire from entity. + */ + public void extinguish() + { + this.fire = 0; + } + + /** + * sets the dead flag. Used when you fall off the bottom of the world. + */ + protected void outOfWorld() + { + this.setDead(); + } + + /** + * Checks if the offset position from the entity's current position is inside of a liquid. + */ + public boolean isOffsetPositionInLiquid(double x, double y, double z) + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox().offset(x, y, z); + return this.isLiquidPresentInAABB(axisalignedbb); + } + + /** + * Determines if a liquid is present within the specified AxisAlignedBB. + */ + private boolean isLiquidPresentInAABB(AxisAlignedBB bb) + { + return this.world.getCollisionBoxes(this, bb).isEmpty() && !this.world.containsAnyLiquid(bb); + } + + /** + * Tries to move the entity towards the specified location. + */ + public void move(MoverType type, double x, double y, double z) + { + if (this.noClip) + { + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + else + { + if (type == MoverType.PISTON) + { + long i = this.world.getTotalWorldTime(); + + if (i != this.pistonDeltasGameTime) + { + Arrays.fill(this.pistonDeltas, 0.0D); + this.pistonDeltasGameTime = i; + } + + if (x != 0.0D) + { + int j = EnumFacing.Axis.X.ordinal(); + double d0 = MathHelper.clamp(x + this.pistonDeltas[j], -0.51D, 0.51D); + x = d0 - this.pistonDeltas[j]; + this.pistonDeltas[j] = d0; + + if (Math.abs(x) <= 9.999999747378752E-6D) + { + return; + } + } + else if (y != 0.0D) + { + int l4 = EnumFacing.Axis.Y.ordinal(); + double d12 = MathHelper.clamp(y + this.pistonDeltas[l4], -0.51D, 0.51D); + y = d12 - this.pistonDeltas[l4]; + this.pistonDeltas[l4] = d12; + + if (Math.abs(y) <= 9.999999747378752E-6D) + { + return; + } + } + else + { + if (z == 0.0D) + { + return; + } + + int i5 = EnumFacing.Axis.Z.ordinal(); + double d13 = MathHelper.clamp(z + this.pistonDeltas[i5], -0.51D, 0.51D); + z = d13 - this.pistonDeltas[i5]; + this.pistonDeltas[i5] = d13; + + if (Math.abs(z) <= 9.999999747378752E-6D) + { + return; + } + } + } + + this.world.profiler.startSection("move"); + double d10 = this.posX; + double d11 = this.posY; + double d1 = this.posZ; + + if (this.isInWeb) + { + this.isInWeb = false; + x *= 0.25D; + y *= 0.05000000074505806D; + z *= 0.25D; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + double d2 = x; + double d3 = y; + double d4 = z; + + if ((type == MoverType.SELF || type == MoverType.PLAYER) && this.onGround && this.isSneaking() && this instanceof EntityPlayer) + { + for (double d5 = 0.05D; x != 0.0D && this.world.getCollisionBoxes(this, this.getEntityBoundingBox().offset(x, (double)(-this.stepHeight), 0.0D)).isEmpty(); d2 = x) + { + if (x < 0.05D && x >= -0.05D) + { + x = 0.0D; + } + else if (x > 0.0D) + { + x -= 0.05D; + } + else + { + x += 0.05D; + } + } + + for (; z != 0.0D && this.world.getCollisionBoxes(this, this.getEntityBoundingBox().offset(0.0D, (double)(-this.stepHeight), z)).isEmpty(); d4 = z) + { + if (z < 0.05D && z >= -0.05D) + { + z = 0.0D; + } + else if (z > 0.0D) + { + z -= 0.05D; + } + else + { + z += 0.05D; + } + } + + for (; x != 0.0D && z != 0.0D && this.world.getCollisionBoxes(this, this.getEntityBoundingBox().offset(x, (double)(-this.stepHeight), z)).isEmpty(); d4 = z) + { + if (x < 0.05D && x >= -0.05D) + { + x = 0.0D; + } + else if (x > 0.0D) + { + x -= 0.05D; + } + else + { + x += 0.05D; + } + + d2 = x; + + if (z < 0.05D && z >= -0.05D) + { + z = 0.0D; + } + else if (z > 0.0D) + { + z -= 0.05D; + } + else + { + z += 0.05D; + } + } + } + + List list1 = this.world.getCollisionBoxes(this, this.getEntityBoundingBox().expand(x, y, z)); + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + + if (y != 0.0D) + { + int k = 0; + + for (int l = list1.size(); k < l; ++k) + { + y = ((AxisAlignedBB)list1.get(k)).calculateYOffset(this.getEntityBoundingBox(), y); + } + + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, y, 0.0D)); + } + + if (x != 0.0D) + { + int j5 = 0; + + for (int l5 = list1.size(); j5 < l5; ++j5) + { + x = ((AxisAlignedBB)list1.get(j5)).calculateXOffset(this.getEntityBoundingBox(), x); + } + + if (x != 0.0D) + { + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, 0.0D, 0.0D)); + } + } + + if (z != 0.0D) + { + int k5 = 0; + + for (int i6 = list1.size(); k5 < i6; ++k5) + { + z = ((AxisAlignedBB)list1.get(k5)).calculateZOffset(this.getEntityBoundingBox(), z); + } + + if (z != 0.0D) + { + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, 0.0D, z)); + } + } + + boolean flag = this.onGround || d3 != y && d3 < 0.0D; + + if (this.stepHeight > 0.0F && flag && (d2 != x || d4 != z)) + { + double d14 = x; + double d6 = y; + double d7 = z; + AxisAlignedBB axisalignedbb1 = this.getEntityBoundingBox(); + this.setEntityBoundingBox(axisalignedbb); + y = (double)this.stepHeight; + List list = this.world.getCollisionBoxes(this, this.getEntityBoundingBox().expand(d2, y, d4)); + AxisAlignedBB axisalignedbb2 = this.getEntityBoundingBox(); + AxisAlignedBB axisalignedbb3 = axisalignedbb2.expand(d2, 0.0D, d4); + double d8 = y; + int j1 = 0; + + for (int k1 = list.size(); j1 < k1; ++j1) + { + d8 = ((AxisAlignedBB)list.get(j1)).calculateYOffset(axisalignedbb3, d8); + } + + axisalignedbb2 = axisalignedbb2.offset(0.0D, d8, 0.0D); + double d18 = d2; + int l1 = 0; + + for (int i2 = list.size(); l1 < i2; ++l1) + { + d18 = ((AxisAlignedBB)list.get(l1)).calculateXOffset(axisalignedbb2, d18); + } + + axisalignedbb2 = axisalignedbb2.offset(d18, 0.0D, 0.0D); + double d19 = d4; + int j2 = 0; + + for (int k2 = list.size(); j2 < k2; ++j2) + { + d19 = ((AxisAlignedBB)list.get(j2)).calculateZOffset(axisalignedbb2, d19); + } + + axisalignedbb2 = axisalignedbb2.offset(0.0D, 0.0D, d19); + AxisAlignedBB axisalignedbb4 = this.getEntityBoundingBox(); + double d20 = y; + int l2 = 0; + + for (int i3 = list.size(); l2 < i3; ++l2) + { + d20 = ((AxisAlignedBB)list.get(l2)).calculateYOffset(axisalignedbb4, d20); + } + + axisalignedbb4 = axisalignedbb4.offset(0.0D, d20, 0.0D); + double d21 = d2; + int j3 = 0; + + for (int k3 = list.size(); j3 < k3; ++j3) + { + d21 = ((AxisAlignedBB)list.get(j3)).calculateXOffset(axisalignedbb4, d21); + } + + axisalignedbb4 = axisalignedbb4.offset(d21, 0.0D, 0.0D); + double d22 = d4; + int l3 = 0; + + for (int i4 = list.size(); l3 < i4; ++l3) + { + d22 = ((AxisAlignedBB)list.get(l3)).calculateZOffset(axisalignedbb4, d22); + } + + axisalignedbb4 = axisalignedbb4.offset(0.0D, 0.0D, d22); + double d23 = d18 * d18 + d19 * d19; + double d9 = d21 * d21 + d22 * d22; + + if (d23 > d9) + { + x = d18; + z = d19; + y = -d8; + this.setEntityBoundingBox(axisalignedbb2); + } + else + { + x = d21; + z = d22; + y = -d20; + this.setEntityBoundingBox(axisalignedbb4); + } + + int j4 = 0; + + for (int k4 = list.size(); j4 < k4; ++j4) + { + y = ((AxisAlignedBB)list.get(j4)).calculateYOffset(this.getEntityBoundingBox(), y); + } + + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(0.0D, y, 0.0D)); + + if (d14 * d14 + d7 * d7 >= x * x + z * z) + { + x = d14; + y = d6; + z = d7; + this.setEntityBoundingBox(axisalignedbb1); + } + } + + this.world.profiler.endSection(); + this.world.profiler.startSection("rest"); + this.resetPositionToBB(); + this.collidedHorizontally = d2 != x || d4 != z; + this.collidedVertically = d3 != y; + this.onGround = this.collidedVertically && d3 < 0.0D; + this.collided = this.collidedHorizontally || this.collidedVertically; + int j6 = MathHelper.floor(this.posX); + int i1 = MathHelper.floor(this.posY - 0.20000000298023224D); + int k6 = MathHelper.floor(this.posZ); + BlockPos blockpos = new BlockPos(j6, i1, k6); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getMaterial() == Material.AIR) + { + BlockPos blockpos1 = blockpos.down(); + IBlockState iblockstate1 = this.world.getBlockState(blockpos1); + Block block1 = iblockstate1.getBlock(); + + if (block1 instanceof BlockFence || block1 instanceof BlockWall || block1 instanceof BlockFenceGate) + { + iblockstate = iblockstate1; + blockpos = blockpos1; + } + } + + this.updateFallState(y, this.onGround, iblockstate, blockpos); + + if (d2 != x) + { + this.motionX = 0.0D; + } + + if (d4 != z) + { + this.motionZ = 0.0D; + } + + Block block = iblockstate.getBlock(); + + if (d3 != y) + { + block.onLanded(this.world, this); + } + + if (this.canTriggerWalking() && (!this.onGround || !this.isSneaking() || !(this instanceof EntityPlayer)) && !this.isRiding()) + { + double d15 = this.posX - d10; + double d16 = this.posY - d11; + double d17 = this.posZ - d1; + + if (block != Blocks.LADDER) + { + d16 = 0.0D; + } + + if (block != null && this.onGround) + { + block.onEntityWalk(this.world, blockpos, this); + } + + this.distanceWalkedModified = (float)((double)this.distanceWalkedModified + (double)MathHelper.sqrt(d15 * d15 + d17 * d17) * 0.6D); + this.distanceWalkedOnStepModified = (float)((double)this.distanceWalkedOnStepModified + (double)MathHelper.sqrt(d15 * d15 + d16 * d16 + d17 * d17) * 0.6D); + + if (this.distanceWalkedOnStepModified > (float)this.nextStepDistance && iblockstate.getMaterial() != Material.AIR) + { + this.nextStepDistance = (int)this.distanceWalkedOnStepModified + 1; + + if (this.isInWater()) + { + Entity entity = this.isBeingRidden() && this.getControllingPassenger() != null ? this.getControllingPassenger() : this; + float f = entity == this ? 0.35F : 0.4F; + float f1 = MathHelper.sqrt(entity.motionX * entity.motionX * 0.20000000298023224D + entity.motionY * entity.motionY + entity.motionZ * entity.motionZ * 0.20000000298023224D) * f; + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + + this.playSound(this.getSwimSound(), f1, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + } + else + { + this.playStepSound(blockpos, block); + } + } + else if (this.distanceWalkedOnStepModified > this.nextFlap && this.makeFlySound() && iblockstate.getMaterial() == Material.AIR) + { + this.nextFlap = this.playFlySound(this.distanceWalkedOnStepModified); + } + } + + try + { + this.doBlockCollisions(); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Checking entity block collision"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity being checked for collision"); + this.addEntityCrashInfo(crashreportcategory); + throw new ReportedException(crashreport); + } + + boolean flag1 = this.isWet(); + + if (this.world.isFlammableWithin(this.getEntityBoundingBox().shrink(0.001D))) + { + this.dealFireDamage(1); + + if (!flag1) + { + ++this.fire; + + if (this.fire == 0) + { + this.setFire(8); + } + } + } + else if (this.fire <= 0) + { + this.fire = -this.getFireImmuneTicks(); + } + + if (flag1 && this.isBurning()) + { + this.playSound(SoundEvents.ENTITY_GENERIC_EXTINGUISH_FIRE, 0.7F, 1.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + this.fire = -this.getFireImmuneTicks(); + } + + this.world.profiler.endSection(); + } + } + + /** + * Resets the entity's position to the center (planar) and bottom (vertical) points of its bounding box. + */ + public void resetPositionToBB() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + this.posX = (axisalignedbb.minX + axisalignedbb.maxX) / 2.0D; + this.posY = axisalignedbb.minY; + this.posZ = (axisalignedbb.minZ + axisalignedbb.maxZ) / 2.0D; + } + + protected SoundEvent getSwimSound() + { + return SoundEvents.ENTITY_GENERIC_SWIM; + } + + protected SoundEvent getSplashSound() + { + return SoundEvents.ENTITY_GENERIC_SPLASH; + } + + protected void doBlockCollisions() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(axisalignedbb.minX + 0.001D, axisalignedbb.minY + 0.001D, axisalignedbb.minZ + 0.001D); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos1 = BlockPos.PooledMutableBlockPos.retain(axisalignedbb.maxX - 0.001D, axisalignedbb.maxY - 0.001D, axisalignedbb.maxZ - 0.001D); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos2 = BlockPos.PooledMutableBlockPos.retain(); + + if (this.world.isAreaLoaded(blockpos$pooledmutableblockpos, blockpos$pooledmutableblockpos1)) + { + for (int i = blockpos$pooledmutableblockpos.getX(); i <= blockpos$pooledmutableblockpos1.getX(); ++i) + { + for (int j = blockpos$pooledmutableblockpos.getY(); j <= blockpos$pooledmutableblockpos1.getY(); ++j) + { + for (int k = blockpos$pooledmutableblockpos.getZ(); k <= blockpos$pooledmutableblockpos1.getZ(); ++k) + { + blockpos$pooledmutableblockpos2.setPos(i, j, k); + IBlockState iblockstate = this.world.getBlockState(blockpos$pooledmutableblockpos2); + + try + { + iblockstate.getBlock().onEntityCollidedWithBlock(this.world, blockpos$pooledmutableblockpos2, iblockstate, this); + this.onInsideBlock(iblockstate); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Colliding entity with block"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Block being collided with"); + CrashReportCategory.addBlockInfo(crashreportcategory, blockpos$pooledmutableblockpos2, iblockstate); + throw new ReportedException(crashreport); + } + } + } + } + } + + blockpos$pooledmutableblockpos.release(); + blockpos$pooledmutableblockpos1.release(); + blockpos$pooledmutableblockpos2.release(); + } + + protected void onInsideBlock(IBlockState p_191955_1_) + { + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + SoundType soundtype = blockIn.getSoundType(world.getBlockState(pos), world, pos, this); + + if (this.world.getBlockState(pos.up()).getBlock() == Blocks.SNOW_LAYER) + { + soundtype = Blocks.SNOW_LAYER.getSoundType(); + this.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch()); + } + else if (!blockIn.getDefaultState().getMaterial().isLiquid()) + { + this.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch()); + } + } + + protected float playFlySound(float p_191954_1_) + { + return 0.0F; + } + + protected boolean makeFlySound() + { + return false; + } + + public void playSound(SoundEvent soundIn, float volume, float pitch) + { + if (!this.isSilent()) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, soundIn, this.getSoundCategory(), volume, pitch); + } + } + + /** + * @return True if this entity will not play sounds + */ + public boolean isSilent() + { + return ((Boolean)this.dataManager.get(SILENT)).booleanValue(); + } + + /** + * When set to true the entity will not play sounds. + */ + public void setSilent(boolean isSilent) + { + this.dataManager.set(SILENT, Boolean.valueOf(isSilent)); + } + + public boolean hasNoGravity() + { + return ((Boolean)this.dataManager.get(NO_GRAVITY)).booleanValue(); + } + + public void setNoGravity(boolean noGravity) + { + this.dataManager.set(NO_GRAVITY, Boolean.valueOf(noGravity)); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return true; + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + if (onGroundIn) + { + if (this.fallDistance > 0.0F) + { + state.getBlock().onFallenUpon(this.world, pos, this, this.fallDistance); + } + + this.fallDistance = 0.0F; + } + else if (y < 0.0D) + { + this.fallDistance = (float)((double)this.fallDistance - y); + } + } + + /** + * Returns the solid collision bounding box for this entity. Used to make (e.g.) boats solid. Return null if + * this entity is not solid. + * + * For general purposes, use {@link #width} and {@link #height}. + * + * @see getEntityBoundingBox + */ + @Nullable + public AxisAlignedBB getCollisionBoundingBox() + { + return null; + } + + /** + * Will deal the specified amount of fire damage to the entity if the entity isn't immune to fire damage. + */ + protected void dealFireDamage(int amount) + { + if (!this.isImmuneToFire) + { + this.attackEntityFrom(DamageSource.IN_FIRE, (float)amount); + } + } + + public final boolean isImmuneToFire() + { + return this.isImmuneToFire; + } + + public void fall(float distance, float damageMultiplier) + { + if (this.isBeingRidden()) + { + for (Entity entity : this.getPassengers()) + { + entity.fall(distance, damageMultiplier); + } + } + } + + /** + * Checks if this entity is either in water or on an open air block in rain (used in wolves). + */ + public boolean isWet() + { + if (this.inWater) + { + return true; + } + else + { + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(this.posX, this.posY, this.posZ); + + if (!this.world.isRainingAt(blockpos$pooledmutableblockpos) && !this.world.isRainingAt(blockpos$pooledmutableblockpos.setPos(this.posX, this.posY + (double)this.height, this.posZ))) + { + blockpos$pooledmutableblockpos.release(); + return false; + } + else + { + blockpos$pooledmutableblockpos.release(); + return true; + } + } + } + + /** + * Checks if this entity is inside water (if inWater field is true as a result of handleWaterMovement() returning + * true) + */ + public boolean isInWater() + { + return this.inWater; + } + + public boolean isOverWater() + { + return this.world.handleMaterialAcceleration(this.getEntityBoundingBox().grow(0.0D, -20.0D, 0.0D).shrink(0.001D), Material.WATER, this); + } + + /** + * Returns if this entity is in water and will end up adding the waters velocity to the entity + */ + public boolean handleWaterMovement() + { + if (this.getRidingEntity() instanceof EntityBoat) + { + this.inWater = false; + } + else if (this.world.handleMaterialAcceleration(this.getEntityBoundingBox().grow(0.0D, -0.4000000059604645D, 0.0D).shrink(0.001D), Material.WATER, this)) + { + if (!this.inWater && !this.firstUpdate) + { + this.doWaterSplashEffect(); + } + + this.fallDistance = 0.0F; + this.inWater = true; + this.extinguish(); + } + else + { + this.inWater = false; + } + + return this.inWater; + } + + /** + * Plays the {@link #getSplashSound() splash sound}, and the {@link ParticleType#WATER_BUBBLE} and {@link + * ParticleType#WATER_SPLASH} particles. + */ + protected void doWaterSplashEffect() + { + Entity entity = this.isBeingRidden() && this.getControllingPassenger() != null ? this.getControllingPassenger() : this; + float f = entity == this ? 0.2F : 0.9F; + float f1 = MathHelper.sqrt(entity.motionX * entity.motionX * 0.20000000298023224D + entity.motionY * entity.motionY + entity.motionZ * entity.motionZ * 0.20000000298023224D) * f; + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + + this.playSound(this.getSplashSound(), f1, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + float f2 = (float)MathHelper.floor(this.getEntityBoundingBox().minY); + + for (int i = 0; (float)i < 1.0F + this.width * 20.0F; ++i) + { + float f3 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + float f4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX + (double)f3, (double)(f2 + 1.0F), this.posZ + (double)f4, this.motionX, this.motionY - (double)(this.rand.nextFloat() * 0.2F), this.motionZ); + } + + for (int j = 0; (float)j < 1.0F + this.width * 20.0F; ++j) + { + float f5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + float f6 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.world.spawnParticle(EnumParticleTypes.WATER_SPLASH, this.posX + (double)f5, (double)(f2 + 1.0F), this.posZ + (double)f6, this.motionX, this.motionY, this.motionZ); + } + } + + /** + * Attempts to create sprinting particles if the entity is sprinting and not in water. + */ + public void spawnRunningParticles() + { + if (this.isSprinting() && !this.isInWater()) + { + this.createRunningParticles(); + } + } + + protected void createRunningParticles() + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.posY - 0.20000000298023224D); + int k = MathHelper.floor(this.posZ); + BlockPos blockpos = new BlockPos(i, j, k); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if(!iblockstate.getBlock().addRunningEffects(iblockstate, world, blockpos, this)) + if (iblockstate.getRenderType() != EnumBlockRenderType.INVISIBLE) + { + this.world.spawnParticle(EnumParticleTypes.BLOCK_CRACK, this.posX + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, this.getEntityBoundingBox().minY + 0.1D, this.posZ + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, -this.motionX * 4.0D, 1.5D, -this.motionZ * 4.0D, Block.getStateId(iblockstate)); + } + } + + /** + * Checks if the current block the entity is within of the specified material type + */ + public boolean isInsideOfMaterial(Material materialIn) + { + if (this.getRidingEntity() instanceof EntityBoat) + { + return false; + } + else + { + double d0 = this.posY + (double)this.getEyeHeight(); + BlockPos blockpos = new BlockPos(this.posX, d0, this.posZ); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + Boolean result = iblockstate.getBlock().isEntityInsideMaterial(this.world, blockpos, iblockstate, this, d0, materialIn, true); + if (result != null) return result; + + if (iblockstate.getMaterial() == materialIn) + { + return net.minecraftforge.common.ForgeHooks.isInsideOfMaterial(materialIn, this, blockpos); + } + else + { + return false; + } + } + } + + public boolean isInLava() + { + return this.world.isMaterialInBB(this.getEntityBoundingBox().grow(-0.10000000149011612D, -0.4000000059604645D, -0.10000000149011612D), Material.LAVA); + } + + public void moveRelative(float strafe, float up, float forward, float friction) + { + float f = strafe * strafe + up * up + forward * forward; + + if (f >= 1.0E-4F) + { + f = MathHelper.sqrt(f); + + if (f < 1.0F) + { + f = 1.0F; + } + + f = friction / f; + strafe = strafe * f; + up = up * f; + forward = forward * f; + float f1 = MathHelper.sin(this.rotationYaw * 0.017453292F); + float f2 = MathHelper.cos(this.rotationYaw * 0.017453292F); + this.motionX += (double)(strafe * f2 - forward * f1); + this.motionY += (double)up; + this.motionZ += (double)(forward * f2 + strafe * f1); + } + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(this.posX), 0, MathHelper.floor(this.posZ)); + + if (this.world.isBlockLoaded(blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setY(MathHelper.floor(this.posY + (double)this.getEyeHeight())); + return this.world.getCombinedLight(blockpos$mutableblockpos, 0); + } + else + { + return 0; + } + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(this.posX), 0, MathHelper.floor(this.posZ)); + + if (this.world.isBlockLoaded(blockpos$mutableblockpos)) + { + blockpos$mutableblockpos.setY(MathHelper.floor(this.posY + (double)this.getEyeHeight())); + return this.world.getLightBrightness(blockpos$mutableblockpos); + } + else + { + return 0.0F; + } + } + + /** + * Sets the reference to the World object. + */ + public void setWorld(World worldIn) + { + this.world = worldIn; + } + + /** + * Sets position and rotation, clamping and wrapping params to valid values. Used by network code. + */ + public void setPositionAndRotation(double x, double y, double z, float yaw, float pitch) + { + this.posX = MathHelper.clamp(x, -3.0E7D, 3.0E7D); + this.posY = y; + this.posZ = MathHelper.clamp(z, -3.0E7D, 3.0E7D); + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + pitch = MathHelper.clamp(pitch, -90.0F, 90.0F); + this.rotationYaw = yaw; + this.rotationPitch = pitch; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + double d0 = (double)(this.prevRotationYaw - yaw); + + if (d0 < -180.0D) + { + this.prevRotationYaw += 360.0F; + } + + if (d0 >= 180.0D) + { + this.prevRotationYaw -= 360.0F; + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(yaw, pitch); + } + + public void moveToBlockPosAndAngles(BlockPos pos, float rotationYawIn, float rotationPitchIn) + { + this.setLocationAndAngles((double)pos.getX() + 0.5D, (double)pos.getY(), (double)pos.getZ() + 0.5D, rotationYawIn, rotationPitchIn); + } + + /** + * Sets the location and Yaw/Pitch of an entity in the world + */ + public void setLocationAndAngles(double x, double y, double z, float yaw, float pitch) + { + this.posX = x; + this.posY = y; + this.posZ = z; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + this.rotationYaw = yaw; + this.rotationPitch = pitch; + this.setPosition(this.posX, this.posY, this.posZ); + } + + /** + * Returns the distance to the entity. + */ + public float getDistance(Entity entityIn) + { + float f = (float)(this.posX - entityIn.posX); + float f1 = (float)(this.posY - entityIn.posY); + float f2 = (float)(this.posZ - entityIn.posZ); + return MathHelper.sqrt(f * f + f1 * f1 + f2 * f2); + } + + /** + * Gets the squared distance to the position. + */ + public double getDistanceSq(double x, double y, double z) + { + double d0 = this.posX - x; + double d1 = this.posY - y; + double d2 = this.posZ - z; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + public double getDistanceSq(BlockPos pos) + { + return pos.distanceSq(this.posX, this.posY, this.posZ); + } + + public double getDistanceSqToCenter(BlockPos pos) + { + return pos.distanceSqToCenter(this.posX, this.posY, this.posZ); + } + + /** + * Gets the distance to the position. + */ + public double getDistance(double x, double y, double z) + { + double d0 = this.posX - x; + double d1 = this.posY - y; + double d2 = this.posZ - z; + return (double)MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + } + + /** + * Returns the squared distance to the entity. + */ + public double getDistanceSq(Entity entityIn) + { + double d0 = this.posX - entityIn.posX; + double d1 = this.posY - entityIn.posY; + double d2 = this.posZ - entityIn.posZ; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + /** + * Called by a player entity when they collide with an entity + */ + public void onCollideWithPlayer(EntityPlayer entityIn) + { + } + + /** + * Applies a velocity to the entities, to push them away from eachother. + */ + public void applyEntityCollision(Entity entityIn) + { + if (!this.isRidingSameEntity(entityIn)) + { + if (!entityIn.noClip && !this.noClip) + { + double d0 = entityIn.posX - this.posX; + double d1 = entityIn.posZ - this.posZ; + double d2 = MathHelper.absMax(d0, d1); + + if (d2 >= 0.009999999776482582D) + { + d2 = (double)MathHelper.sqrt(d2); + d0 = d0 / d2; + d1 = d1 / d2; + double d3 = 1.0D / d2; + + if (d3 > 1.0D) + { + d3 = 1.0D; + } + + d0 = d0 * d3; + d1 = d1 * d3; + d0 = d0 * 0.05000000074505806D; + d1 = d1 * 0.05000000074505806D; + d0 = d0 * (double)(1.0F - this.entityCollisionReduction); + d1 = d1 * (double)(1.0F - this.entityCollisionReduction); + + if (!this.isBeingRidden()) + { + this.addVelocity(-d0, 0.0D, -d1); + } + + if (!entityIn.isBeingRidden()) + { + entityIn.addVelocity(d0, 0.0D, d1); + } + } + } + } + } + + /** + * Adds to the current velocity of the entity, and sets {@link #isAirBorne} to true. + */ + public void addVelocity(double x, double y, double z) + { + this.motionX += x; + this.motionY += y; + this.motionZ += z; + this.isAirBorne = true; + } + + /** + * Marks this entity's velocity as changed, so that it can be re-synced with the client later + */ + protected void markVelocityChanged() + { + this.velocityChanged = true; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + this.markVelocityChanged(); + return false; + } + } + + /** + * interpolated look vector + */ + public Vec3d getLook(float partialTicks) + { + if (partialTicks == 1.0F) + { + return this.getVectorForRotation(this.rotationPitch, this.rotationYaw); + } + else + { + float f = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * partialTicks; + float f1 = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * partialTicks; + return this.getVectorForRotation(f, f1); + } + } + + /** + * Creates a Vec3 using the pitch and yaw of the entities rotation. + */ + protected final Vec3d getVectorForRotation(float pitch, float yaw) + { + float f = MathHelper.cos(-yaw * 0.017453292F - (float)Math.PI); + float f1 = MathHelper.sin(-yaw * 0.017453292F - (float)Math.PI); + float f2 = -MathHelper.cos(-pitch * 0.017453292F); + float f3 = MathHelper.sin(-pitch * 0.017453292F); + return new Vec3d((double)(f1 * f2), (double)f3, (double)(f * f2)); + } + + public Vec3d getPositionEyes(float partialTicks) + { + if (partialTicks == 1.0F) + { + return new Vec3d(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ); + } + else + { + double d0 = this.prevPosX + (this.posX - this.prevPosX) * (double)partialTicks; + double d1 = this.prevPosY + (this.posY - this.prevPosY) * (double)partialTicks + (double)this.getEyeHeight(); + double d2 = this.prevPosZ + (this.posZ - this.prevPosZ) * (double)partialTicks; + return new Vec3d(d0, d1, d2); + } + } + + @Nullable + @SideOnly(Side.CLIENT) + public RayTraceResult rayTrace(double blockReachDistance, float partialTicks) + { + Vec3d vec3d = this.getPositionEyes(partialTicks); + Vec3d vec3d1 = this.getLook(partialTicks); + Vec3d vec3d2 = vec3d.addVector(vec3d1.x * blockReachDistance, vec3d1.y * blockReachDistance, vec3d1.z * blockReachDistance); + return this.world.rayTraceBlocks(vec3d, vec3d2, false, false, true); + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return false; + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return false; + } + + public void awardKillScore(Entity p_191956_1_, int p_191956_2_, DamageSource p_191956_3_) + { + if (p_191956_1_ instanceof EntityPlayerMP) + { + CriteriaTriggers.ENTITY_KILLED_PLAYER.trigger((EntityPlayerMP)p_191956_1_, this, p_191956_3_); + } + } + + @SideOnly(Side.CLIENT) + public boolean isInRangeToRender3d(double x, double y, double z) + { + double d0 = this.posX - x; + double d1 = this.posY - y; + double d2 = this.posZ - z; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + return this.isInRangeToRenderDist(d3); + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength(); + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * renderDistanceWeight; + return distance < d0 * d0; + } + + /** + * Attempts to write this Entity to the given NBTTagCompound. Returns false if the entity is dead or its string + * representation is null. In this event, the given NBTTagCompound is not modified. + * + * Similar to writeToNBTOptional, but does not check whether this Entity is a passenger of another. + */ + public boolean writeToNBTAtomically(NBTTagCompound compound) + { + String s = this.getEntityString(); + + if (!this.isDead && s != null) + { + compound.setString("id", s); + this.writeToNBT(compound); + return true; + } + else + { + return false; + } + } + + /** + * Either write this entity to the NBT tag given and return true, or return false without doing anything. If this + * returns false the entity is not saved on disk. Riding entities return false here as they are saved with their + * mount. + */ + public boolean writeToNBTOptional(NBTTagCompound compound) + { + String s = this.getEntityString(); + + if (!this.isDead && s != null && !this.isRiding()) + { + compound.setString("id", s); + this.writeToNBT(compound); + return true; + } + else + { + return false; + } + } + + public static void registerFixes(DataFixer fixer) + { + fixer.registerWalker(FixTypes.ENTITY, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if (compound.hasKey("Passengers", 9)) + { + NBTTagList nbttaglist = compound.getTagList("Passengers", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + nbttaglist.set(i, fixer.process(FixTypes.ENTITY, nbttaglist.getCompoundTagAt(i), versionIn)); + } + } + + return compound; + } + }); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + try + { + compound.setTag("Pos", this.newDoubleNBTList(this.posX, this.posY, this.posZ)); + compound.setTag("Motion", this.newDoubleNBTList(this.motionX, this.motionY, this.motionZ)); + compound.setTag("Rotation", this.newFloatNBTList(this.rotationYaw, this.rotationPitch)); + compound.setFloat("FallDistance", this.fallDistance); + compound.setShort("Fire", (short)this.fire); + compound.setShort("Air", (short)this.getAir()); + compound.setBoolean("OnGround", this.onGround); + compound.setInteger("Dimension", this.dimension); + compound.setBoolean("Invulnerable", this.invulnerable); + compound.setInteger("PortalCooldown", this.timeUntilPortal); + compound.setUniqueId("UUID", this.getUniqueID()); + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.getCustomNameTag()); + } + + if (this.getAlwaysRenderNameTag()) + { + compound.setBoolean("CustomNameVisible", this.getAlwaysRenderNameTag()); + } + + this.cmdResultStats.writeStatsToNBT(compound); + + if (this.isSilent()) + { + compound.setBoolean("Silent", this.isSilent()); + } + + if (this.hasNoGravity()) + { + compound.setBoolean("NoGravity", this.hasNoGravity()); + } + + if (this.glowing) + { + compound.setBoolean("Glowing", this.glowing); + } + compound.setBoolean("UpdateBlocked", updateBlocked); + + if (!this.tags.isEmpty()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (String s : this.tags) + { + nbttaglist.appendTag(new NBTTagString(s)); + } + + compound.setTag("Tags", nbttaglist); + } + + if (customEntityData != null) compound.setTag("ForgeData", customEntityData); + if (this.capabilities != null) compound.setTag("ForgeCaps", this.capabilities.serializeNBT()); + + this.writeEntityToNBT(compound); + + if (this.isBeingRidden()) + { + NBTTagList nbttaglist1 = new NBTTagList(); + + for (Entity entity : this.getPassengers()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + if (entity.writeToNBTAtomically(nbttagcompound)) + { + nbttaglist1.appendTag(nbttagcompound); + } + } + + if (!nbttaglist1.hasNoTags()) + { + compound.setTag("Passengers", nbttaglist1); + } + } + + return compound; + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Saving entity NBT"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity being saved"); + this.addEntityCrashInfo(crashreportcategory); + throw new ReportedException(crashreport); + } + } + + /** + * Reads the entity from NBT (calls an abstract helper method to read specialized data) + */ + public void readFromNBT(NBTTagCompound compound) + { + try + { + NBTTagList nbttaglist = compound.getTagList("Pos", 6); + NBTTagList nbttaglist2 = compound.getTagList("Motion", 6); + NBTTagList nbttaglist3 = compound.getTagList("Rotation", 5); + this.motionX = nbttaglist2.getDoubleAt(0); + this.motionY = nbttaglist2.getDoubleAt(1); + this.motionZ = nbttaglist2.getDoubleAt(2); + + if (Math.abs(this.motionX) > 10.0D) + { + this.motionX = 0.0D; + } + + if (Math.abs(this.motionY) > 10.0D) + { + this.motionY = 0.0D; + } + + if (Math.abs(this.motionZ) > 10.0D) + { + this.motionZ = 0.0D; + } + + this.posX = nbttaglist.getDoubleAt(0); + this.posY = nbttaglist.getDoubleAt(1); + this.posZ = nbttaglist.getDoubleAt(2); + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.rotationYaw = nbttaglist3.getFloatAt(0); + this.rotationPitch = nbttaglist3.getFloatAt(1); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + this.setRotationYawHead(this.rotationYaw); + this.setRenderYawOffset(this.rotationYaw); + this.fallDistance = compound.getFloat("FallDistance"); + this.fire = compound.getShort("Fire"); + this.setAir(compound.getShort("Air")); + this.onGround = compound.getBoolean("OnGround"); + + if (compound.hasKey("Dimension")) + { + this.dimension = compound.getInteger("Dimension"); + } + + this.invulnerable = compound.getBoolean("Invulnerable"); + this.timeUntilPortal = compound.getInteger("PortalCooldown"); + + if (compound.hasUniqueId("UUID")) + { + this.entityUniqueID = compound.getUniqueId("UUID"); + this.cachedUniqueIdString = this.entityUniqueID.toString(); + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(this.rotationYaw, this.rotationPitch); + + if (compound.hasKey("CustomName", 8)) + { + this.setCustomNameTag(compound.getString("CustomName")); + } + + this.setAlwaysRenderNameTag(compound.getBoolean("CustomNameVisible")); + this.cmdResultStats.readStatsFromNBT(compound); + this.setSilent(compound.getBoolean("Silent")); + this.setNoGravity(compound.getBoolean("NoGravity")); + this.setGlowing(compound.getBoolean("Glowing")); + updateBlocked = compound.getBoolean("UpdateBlocked"); + + if (compound.hasKey("ForgeData")) customEntityData = compound.getCompoundTag("ForgeData"); + if (this.capabilities != null && compound.hasKey("ForgeCaps")) this.capabilities.deserializeNBT(compound.getCompoundTag("ForgeCaps")); + + if (compound.hasKey("Tags", 9)) + { + this.tags.clear(); + NBTTagList nbttaglist1 = compound.getTagList("Tags", 8); + int i = Math.min(nbttaglist1.tagCount(), 1024); + + for (int j = 0; j < i; ++j) + { + this.tags.add(nbttaglist1.getStringTagAt(j)); + } + } + + this.readEntityFromNBT(compound); + + if (this.shouldSetPosAfterLoading()) + { + this.setPosition(this.posX, this.posY, this.posZ); + } + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Loading entity NBT"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity being loaded"); + this.addEntityCrashInfo(crashreportcategory); + throw new ReportedException(crashreport); + } + } + + protected boolean shouldSetPosAfterLoading() + { + return true; + } + + /** + * Returns the string that identifies this Entity's class + */ + @Nullable + protected final String getEntityString() + { + ResourceLocation resourcelocation = EntityList.getKey(this); + return resourcelocation == null ? null : resourcelocation.toString(); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected abstract void readEntityFromNBT(NBTTagCompound compound); + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected abstract void writeEntityToNBT(NBTTagCompound compound); + + /** + * creates a NBT list from the array of doubles passed to this function + */ + protected NBTTagList newDoubleNBTList(double... numbers) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (double d0 : numbers) + { + nbttaglist.appendTag(new NBTTagDouble(d0)); + } + + return nbttaglist; + } + + /** + * Returns a new NBTTagList filled with the specified floats + */ + protected NBTTagList newFloatNBTList(float... numbers) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (float f : numbers) + { + nbttaglist.appendTag(new NBTTagFloat(f)); + } + + return nbttaglist; + } + + @Nullable + public EntityItem dropItem(Item itemIn, int size) + { + return this.dropItemWithOffset(itemIn, size, 0.0F); + } + + @Nullable + public EntityItem dropItemWithOffset(Item itemIn, int size, float offsetY) + { + return this.entityDropItem(new ItemStack(itemIn, size, 0), offsetY); + } + + /** + * Drops an item at the position of the entity. + */ + @Nullable + public EntityItem entityDropItem(ItemStack stack, float offsetY) + { + if (stack.isEmpty()) + { + return null; + } + else + { + EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY + (double)offsetY, this.posZ, stack); + entityitem.setDefaultPickupDelay(); + if (captureDrops) + this.capturedDrops.add(entityitem); + else + this.world.spawnEntity(entityitem); + return entityitem; + } + } + + /** + * Checks whether target entity is alive. + */ + public boolean isEntityAlive() + { + return !this.isDead; + } + + /** + * Checks if this entity is inside of an opaque block + */ + public boolean isEntityInsideOpaqueBlock() + { + if (this.noClip) + { + return false; + } + else + { + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + for (int i = 0; i < 8; ++i) + { + int j = MathHelper.floor(this.posY + (double)(((float)((i >> 0) % 2) - 0.5F) * 0.1F) + (double)this.getEyeHeight()); + int k = MathHelper.floor(this.posX + (double)(((float)((i >> 1) % 2) - 0.5F) * this.width * 0.8F)); + int l = MathHelper.floor(this.posZ + (double)(((float)((i >> 2) % 2) - 0.5F) * this.width * 0.8F)); + + if (blockpos$pooledmutableblockpos.getX() != k || blockpos$pooledmutableblockpos.getY() != j || blockpos$pooledmutableblockpos.getZ() != l) + { + blockpos$pooledmutableblockpos.setPos(k, j, l); + + if (this.world.getBlockState(blockpos$pooledmutableblockpos).causesSuffocation()) + { + blockpos$pooledmutableblockpos.release(); + return true; + } + } + } + + blockpos$pooledmutableblockpos.release(); + return false; + } + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + return false; + } + + /** + * Returns a boundingBox used to collide the entity with other entities and blocks. This enables the entity to be + * pushable on contact, like boats or minecarts. + */ + @Nullable + public AxisAlignedBB getCollisionBox(Entity entityIn) + { + return null; + } + + /** + * Handles updating while riding another entity + */ + public void updateRidden() + { + Entity entity = this.getRidingEntity(); + + if (this.isRiding() && entity.isDead) + { + this.dismountRidingEntity(); + } + else + { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + if(!updateBlocked) + this.onUpdate(); + + if (this.isRiding()) + { + entity.updatePassenger(this); + } + } + } + + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + passenger.setPosition(this.posX, this.posY + this.getMountedYOffset() + passenger.getYOffset(), this.posZ); + } + } + + /** + * Applies this entity's orientation (pitch/yaw) to another entity. Used to update passenger orientation. + */ + @SideOnly(Side.CLIENT) + public void applyOrientationToEntity(Entity entityToUpdate) + { + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return 0.0D; + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return (double)this.height * 0.75D; + } + + public boolean startRiding(Entity entityIn) + { + return this.startRiding(entityIn, false); + } + + public boolean startRiding(Entity entityIn, boolean force) + { + for (Entity entity = entityIn; entity.ridingEntity != null; entity = entity.ridingEntity) + { + if (entity.ridingEntity == this) + { + return false; + } + } + + if (!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, entityIn, true)) return false; + if (force || this.canBeRidden(entityIn) && entityIn.canFitPassenger(this)) + { + if (this.isRiding()) + { + this.dismountRidingEntity(); + } + + this.ridingEntity = entityIn; + this.ridingEntity.addPassenger(this); + return true; + } + else + { + return false; + } + } + + protected boolean canBeRidden(Entity entityIn) + { + return this.rideCooldown <= 0; + } + + /** + * Dismounts all entities riding this entity from this entity. + */ + public void removePassengers() + { + for (int i = this.riddenByEntities.size() - 1; i >= 0; --i) + { + ((Entity)this.riddenByEntities.get(i)).dismountRidingEntity(); + } + } + + /** + * Dismounts this entity from the entity it is riding. + */ + public void dismountRidingEntity() + { + if (this.ridingEntity != null) + { + Entity entity = this.ridingEntity; + if (!net.minecraftforge.event.ForgeEventFactory.canMountEntity(this, entity, false)) return; + this.ridingEntity = null; + entity.removePassenger(this); + } + } + + protected void addPassenger(Entity passenger) + { + if (passenger.getRidingEntity() != this) + { + throw new IllegalStateException("Use x.startRiding(y), not y.addPassenger(x)"); + } + else + { + if (!this.world.isRemote && passenger instanceof EntityPlayer && !(this.getControllingPassenger() instanceof EntityPlayer)) + { + this.riddenByEntities.add(0, passenger); + } + else + { + this.riddenByEntities.add(passenger); + } + } + } + + protected void removePassenger(Entity passenger) + { + if (passenger.getRidingEntity() == this) + { + throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)"); + } + else + { + this.riddenByEntities.remove(passenger); + passenger.rideCooldown = 60; + } + } + + protected boolean canFitPassenger(Entity passenger) + { + return this.getPassengers().size() < 1; + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + } + + public float getCollisionBorderSize() + { + return 0.0F; + } + + /** + * returns a (normalized) vector of where this entity is looking + */ + public Vec3d getLookVec() + { + return this.getVectorForRotation(this.rotationPitch, this.rotationYaw); + } + + /** + * returns the Entity's pitch and yaw as a Vec2f + */ + @SideOnly(Side.CLIENT) + public Vec2f getPitchYaw() + { + return new Vec2f(this.rotationPitch, this.rotationYaw); + } + + @SideOnly(Side.CLIENT) + public Vec3d getForward() + { + return Vec3d.fromPitchYawVector(this.getPitchYaw()); + } + + /** + * Marks the entity as being inside a portal, activating teleportation logic in onEntityUpdate() in the following + * tick(s). + */ + public void setPortal(BlockPos pos) + { + if (this.timeUntilPortal > 0) + { + this.timeUntilPortal = this.getPortalCooldown(); + } + else + { + if (!this.world.isRemote && !pos.equals(this.lastPortalPos)) + { + this.lastPortalPos = new BlockPos(pos); + BlockPattern.PatternHelper blockpattern$patternhelper = Blocks.PORTAL.createPatternHelper(this.world, this.lastPortalPos); + double d0 = blockpattern$patternhelper.getForwards().getAxis() == EnumFacing.Axis.X ? (double)blockpattern$patternhelper.getFrontTopLeft().getZ() : (double)blockpattern$patternhelper.getFrontTopLeft().getX(); + double d1 = blockpattern$patternhelper.getForwards().getAxis() == EnumFacing.Axis.X ? this.posZ : this.posX; + d1 = Math.abs(MathHelper.pct(d1 - (double)(blockpattern$patternhelper.getForwards().rotateY().getAxisDirection() == EnumFacing.AxisDirection.NEGATIVE ? 1 : 0), d0, d0 - (double)blockpattern$patternhelper.getWidth())); + double d2 = MathHelper.pct(this.posY - 1.0D, (double)blockpattern$patternhelper.getFrontTopLeft().getY(), (double)(blockpattern$patternhelper.getFrontTopLeft().getY() - blockpattern$patternhelper.getHeight())); + this.lastPortalVec = new Vec3d(d1, d2, 0.0D); + this.teleportDirection = blockpattern$patternhelper.getForwards(); + } + + this.inPortal = true; + } + } + + /** + * Return the amount of cooldown before this entity can use a portal again. + */ + public int getPortalCooldown() + { + return 300; + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + } + + /** + * Setups the entity to do the hurt animation. Only used by packets in multiplayer. + */ + @SideOnly(Side.CLIENT) + public void performHurtAnimation() + { + } + + public Iterable getHeldEquipment() + { + return EMPTY_EQUIPMENT; + } + + public Iterable getArmorInventoryList() + { + return EMPTY_EQUIPMENT; + } + + public Iterable getEquipmentAndArmor() + { + return Iterables.concat(this.getHeldEquipment(), this.getArmorInventoryList()); + } + + public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) + { + } + + /** + * Returns true if the entity is on fire. Used by render to add the fire effect on rendering. + */ + public boolean isBurning() + { + boolean flag = this.world != null && this.world.isRemote; + return !this.isImmuneToFire && (this.fire > 0 || flag && this.getFlag(0)); + } + + public boolean isRiding() + { + return this.getRidingEntity() != null; + } + + /** + * If at least 1 entity is riding this one + */ + public boolean isBeingRidden() + { + return !this.getPassengers().isEmpty(); + } + + /** + * Returns if this entity is sneaking. + */ + public boolean isSneaking() + { + return this.getFlag(1); + } + + /** + * Sets the sneaking flag. + */ + public void setSneaking(boolean sneaking) + { + this.setFlag(1, sneaking); + } + + /** + * Get if the Entity is sprinting. + */ + public boolean isSprinting() + { + return this.getFlag(3); + } + + /** + * Set sprinting switch for Entity. + */ + public void setSprinting(boolean sprinting) + { + this.setFlag(3, sprinting); + } + + public boolean isGlowing() + { + return this.glowing || this.world.isRemote && this.getFlag(6); + } + + public void setGlowing(boolean glowingIn) + { + this.glowing = glowingIn; + + if (!this.world.isRemote) + { + this.setFlag(6, this.glowing); + } + } + + public boolean isInvisible() + { + return this.getFlag(5); + } + + /** + * Only used by renderer in EntityLivingBase subclasses. + * Determines if an entity is visible or not to a specfic player, if the entity is normally invisible. + * For EntityLivingBase subclasses, returning false when invisible will render the entity semitransparent. + */ + @SideOnly(Side.CLIENT) + public boolean isInvisibleToPlayer(EntityPlayer player) + { + if (player.isSpectator()) + { + return false; + } + else + { + Team team = this.getTeam(); + return team != null && player != null && player.getTeam() == team && team.getSeeFriendlyInvisiblesEnabled() ? false : this.isInvisible(); + } + } + + @Nullable + public Team getTeam() + { + return this.world.getScoreboard().getPlayersTeam(this.getCachedUniqueIdString()); + } + + /** + * Returns whether this Entity is on the same team as the given Entity. + */ + public boolean isOnSameTeam(Entity entityIn) + { + return this.isOnScoreboardTeam(entityIn.getTeam()); + } + + /** + * Returns whether this Entity is on the given scoreboard team. + */ + public boolean isOnScoreboardTeam(Team teamIn) + { + return this.getTeam() != null ? this.getTeam().isSameTeam(teamIn) : false; + } + + public void setInvisible(boolean invisible) + { + this.setFlag(5, invisible); + } + + /** + * Returns true if the flag is active for the entity. Known flags: 0: burning; 1: sneaking; 2: unused; 3: sprinting; + * 4: unused; 5: invisible; 6: glowing; 7: elytra flying + */ + protected boolean getFlag(int flag) + { + return (((Byte)this.dataManager.get(FLAGS)).byteValue() & 1 << flag) != 0; + } + + /** + * Enable or disable a entity flag, see getEntityFlag to read the know flags. + */ + protected void setFlag(int flag, boolean set) + { + byte b0 = ((Byte)this.dataManager.get(FLAGS)).byteValue(); + + if (set) + { + this.dataManager.set(FLAGS, Byte.valueOf((byte)(b0 | 1 << flag))); + } + else + { + this.dataManager.set(FLAGS, Byte.valueOf((byte)(b0 & ~(1 << flag)))); + } + } + + public int getAir() + { + return ((Integer)this.dataManager.get(AIR)).intValue(); + } + + public void setAir(int air) + { + this.dataManager.set(AIR, Integer.valueOf(air)); + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + this.attackEntityFrom(DamageSource.LIGHTNING_BOLT, 5.0F); + ++this.fire; + + if (this.fire == 0) + { + this.setFire(8); + } + } + + /** + * This method gets called when the entity kills another one. + */ + public void onKillEntity(EntityLivingBase entityLivingIn) + { + } + + protected boolean pushOutOfBlocks(double x, double y, double z) + { + BlockPos blockpos = new BlockPos(x, y, z); + double d0 = x - (double)blockpos.getX(); + double d1 = y - (double)blockpos.getY(); + double d2 = z - (double)blockpos.getZ(); + + if (!this.world.collidesWithAnyBlock(this.getEntityBoundingBox())) + { + return false; + } + else + { + EnumFacing enumfacing = EnumFacing.UP; + double d3 = Double.MAX_VALUE; + + if (!this.world.isBlockFullCube(blockpos.west()) && d0 < d3) + { + d3 = d0; + enumfacing = EnumFacing.WEST; + } + + if (!this.world.isBlockFullCube(blockpos.east()) && 1.0D - d0 < d3) + { + d3 = 1.0D - d0; + enumfacing = EnumFacing.EAST; + } + + if (!this.world.isBlockFullCube(blockpos.north()) && d2 < d3) + { + d3 = d2; + enumfacing = EnumFacing.NORTH; + } + + if (!this.world.isBlockFullCube(blockpos.south()) && 1.0D - d2 < d3) + { + d3 = 1.0D - d2; + enumfacing = EnumFacing.SOUTH; + } + + if (!this.world.isBlockFullCube(blockpos.up()) && 1.0D - d1 < d3) + { + d3 = 1.0D - d1; + enumfacing = EnumFacing.UP; + } + + float f = this.rand.nextFloat() * 0.2F + 0.1F; + float f1 = (float)enumfacing.getAxisDirection().getOffset(); + + if (enumfacing.getAxis() == EnumFacing.Axis.X) + { + this.motionX = (double)(f1 * f); + this.motionY *= 0.75D; + this.motionZ *= 0.75D; + } + else if (enumfacing.getAxis() == EnumFacing.Axis.Y) + { + this.motionX *= 0.75D; + this.motionY = (double)(f1 * f); + this.motionZ *= 0.75D; + } + else if (enumfacing.getAxis() == EnumFacing.Axis.Z) + { + this.motionX *= 0.75D; + this.motionY *= 0.75D; + this.motionZ = (double)(f1 * f); + } + + return true; + } + } + + /** + * Sets the Entity inside a web block. + */ + public void setInWeb() + { + this.isInWeb = true; + this.fallDistance = 0.0F; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + if (this.hasCustomName()) + { + return this.getCustomNameTag(); + } + else + { + String s = EntityList.getEntityString(this); + + if (s == null) + { + s = "generic"; + } + + return I18n.translateToLocal("entity." + s + ".name"); + } + } + + /** + * Return the Entity parts making up this Entity (currently only for dragons) + */ + @Nullable + public Entity[] getParts() + { + return null; + } + + /** + * Returns true if Entity argument is equal to this Entity + */ + public boolean isEntityEqual(Entity entityIn) + { + return this == entityIn; + } + + public float getRotationYawHead() + { + return 0.0F; + } + + /** + * Sets the head's yaw rotation of the entity. + */ + public void setRotationYawHead(float rotation) + { + } + + /** + * Set the render yaw offset + */ + public void setRenderYawOffset(float offset) + { + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return true; + } + + /** + * Called when a player attacks an entity. If this returns true the attack will not happen. + */ + public boolean hitByEntity(Entity entityIn) + { + return false; + } + + public String toString() + { + return String.format("%s['%s'/%d, l='%s', x=%.2f, y=%.2f, z=%.2f]", this.getClass().getSimpleName(), this.getName(), this.entityId, this.world == null ? "~NULL~" : this.world.getWorldInfo().getWorldName(), this.posX, this.posY, this.posZ); + } + + /** + * Returns whether this Entity is invulnerable to the given DamageSource. + */ + public boolean isEntityInvulnerable(DamageSource source) + { + return this.invulnerable && source != DamageSource.OUT_OF_WORLD && !source.isCreativePlayer(); + } + + public boolean getIsInvulnerable() + { + return this.invulnerable; + } + + /** + * Sets whether this Entity is invulnerable. + */ + public void setEntityInvulnerable(boolean isInvulnerable) + { + this.invulnerable = isInvulnerable; + } + + /** + * Sets this entity's location and angles to the location and angles of the passed in entity. + */ + public void copyLocationAndAnglesFrom(Entity entityIn) + { + this.setLocationAndAngles(entityIn.posX, entityIn.posY, entityIn.posZ, entityIn.rotationYaw, entityIn.rotationPitch); + } + + /** + * Prepares this entity in new dimension by copying NBT data from entity in old dimension + */ + private void copyDataFromOld(Entity entityIn) + { + NBTTagCompound nbttagcompound = entityIn.writeToNBT(new NBTTagCompound()); + nbttagcompound.removeTag("Dimension"); + this.readFromNBT(nbttagcompound); + this.timeUntilPortal = entityIn.timeUntilPortal; + this.lastPortalPos = entityIn.lastPortalPos; + this.lastPortalVec = entityIn.lastPortalVec; + this.teleportDirection = entityIn.teleportDirection; + } + + @Nullable + public Entity changeDimension(int dimensionIn) + { + if (this.world.isRemote || this.isDead) return null; + return changeDimension(dimensionIn, this.getServer().getWorld(dimensionIn).getDefaultTeleporter()); + } + + @Nullable // Forge: Entities that require custom handling should override this method, not the other + public Entity changeDimension(int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + if (!this.world.isRemote && !this.isDead) + { + if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension(this, dimensionIn)) return null; + this.world.profiler.startSection("changeDimension"); + MinecraftServer minecraftserver = this.getServer(); + int i = this.dimension; + WorldServer worldserver = minecraftserver.getWorld(i); + WorldServer worldserver1 = minecraftserver.getWorld(dimensionIn); + this.dimension = dimensionIn; + + if (i == 1 && dimensionIn == 1 && teleporter.isVanilla()) + { + worldserver1 = minecraftserver.getWorld(0); + this.dimension = 0; + } + + this.world.removeEntity(this); + this.isDead = false; + this.world.profiler.startSection("reposition"); + BlockPos blockpos; + + if (dimensionIn == 1 && teleporter.isVanilla()) + { + blockpos = worldserver1.getSpawnCoordinate(); + } + else + { + double moveFactor = worldserver.provider.getMovementFactor() / worldserver1.provider.getMovementFactor(); + double d0 = MathHelper.clamp(this.posX * moveFactor, worldserver1.getWorldBorder().minX() + 16.0D, worldserver1.getWorldBorder().maxX() - 16.0D); + double d1 = MathHelper.clamp(this.posZ * moveFactor, worldserver1.getWorldBorder().minZ() + 16.0D, worldserver1.getWorldBorder().maxZ() - 16.0D); + double d2 = 8.0D; + + if (false && dimensionIn == -1) + { + d0 = MathHelper.clamp(d0 / 8.0D, worldserver1.getWorldBorder().minX() + 16.0D, worldserver1.getWorldBorder().maxX() - 16.0D); + d1 = MathHelper.clamp(d1 / 8.0D, worldserver1.getWorldBorder().minZ() + 16.0D, worldserver1.getWorldBorder().maxZ() - 16.0D); + } + else if (false && dimensionIn == 0) + { + d0 = MathHelper.clamp(d0 * 8.0D, worldserver1.getWorldBorder().minX() + 16.0D, worldserver1.getWorldBorder().maxX() - 16.0D); + d1 = MathHelper.clamp(d1 * 8.0D, worldserver1.getWorldBorder().minZ() + 16.0D, worldserver1.getWorldBorder().maxZ() - 16.0D); + } + + d0 = (double)MathHelper.clamp((int)d0, -29999872, 29999872); + d1 = (double)MathHelper.clamp((int)d1, -29999872, 29999872); + float f = this.rotationYaw; + this.setLocationAndAngles(d0, this.posY, d1, 90.0F, 0.0F); + teleporter.placeEntity(worldserver1, this, f); + blockpos = new BlockPos(this); + } + + worldserver.updateEntityWithOptionalForce(this, false); + this.world.profiler.endStartSection("reloading"); + Entity entity = EntityList.newEntity(this.getClass(), worldserver1); + + if (entity != null) + { + entity.copyDataFromOld(this); + + if (i == 1 && dimensionIn == 1 && teleporter.isVanilla()) + { + BlockPos blockpos1 = worldserver1.getTopSolidOrLiquidBlock(worldserver1.getSpawnPoint()); + entity.moveToBlockPosAndAngles(blockpos1, entity.rotationYaw, entity.rotationPitch); + } + else + { + entity.moveToBlockPosAndAngles(blockpos, entity.rotationYaw, entity.rotationPitch); + } + + boolean flag = entity.forceSpawn; + entity.forceSpawn = true; + worldserver1.spawnEntity(entity); + entity.forceSpawn = flag; + worldserver1.updateEntityWithOptionalForce(entity, false); + } + + this.isDead = true; + this.world.profiler.endSection(); + worldserver.resetUpdateEntityTick(); + worldserver1.resetUpdateEntityTick(); + this.world.profiler.endSection(); + return entity; + } + else + { + return null; + } + } + + /** + * Returns false if this Entity is a boss, true otherwise. + */ + public boolean isNonBoss() + { + return true; + } + + /** + * Explosion resistance of a block relative to this entity + */ + public float getExplosionResistance(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn) + { + return blockStateIn.getBlock().getExplosionResistance(worldIn, pos, this, explosionIn); + } + + public boolean canExplosionDestroyBlock(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn, float p_174816_5_) + { + return true; + } + + /** + * The maximum height from where the entity is alowed to jump (used in pathfinder) + */ + public int getMaxFallHeight() + { + return 3; + } + + public Vec3d getLastPortalVec() + { + return this.lastPortalVec; + } + + public EnumFacing getTeleportDirection() + { + return this.teleportDirection; + } + + /** + * Return whether this entity should NOT trigger a pressure plate or a tripwire. + */ + public boolean doesEntityNotTriggerPressurePlate() + { + return false; + } + + public void addEntityCrashInfo(CrashReportCategory category) + { + category.addDetail("Entity Type", new ICrashReportDetail() + { + public String call() throws Exception + { + return EntityList.getKey(Entity.this) + " (" + Entity.this.getClass().getCanonicalName() + ")"; + } + }); + category.addCrashSection("Entity ID", Integer.valueOf(this.entityId)); + category.addDetail("Entity Name", new ICrashReportDetail() + { + public String call() throws Exception + { + return Entity.this.getName(); + } + }); + category.addCrashSection("Entity's Exact location", String.format("%.2f, %.2f, %.2f", this.posX, this.posY, this.posZ)); + category.addCrashSection("Entity's Block location", CrashReportCategory.getCoordinateInfo(MathHelper.floor(this.posX), MathHelper.floor(this.posY), MathHelper.floor(this.posZ))); + category.addCrashSection("Entity's Momentum", String.format("%.2f, %.2f, %.2f", this.motionX, this.motionY, this.motionZ)); + category.addDetail("Entity's Passengers", new ICrashReportDetail() + { + public String call() throws Exception + { + return Entity.this.getPassengers().toString(); + } + }); + category.addDetail("Entity's Vehicle", new ICrashReportDetail() + { + public String call() throws Exception + { + return Entity.this.getRidingEntity().toString(); + } + }); + } + + public void setUniqueId(UUID uniqueIdIn) + { + this.entityUniqueID = uniqueIdIn; + this.cachedUniqueIdString = this.entityUniqueID.toString(); + } + + /** + * Return whether this entity should be rendered as on fire. + */ + @SideOnly(Side.CLIENT) + public boolean canRenderOnFire() + { + return this.isBurning(); + } + + /** + * Returns the UUID of this entity. + */ + public UUID getUniqueID() + { + return this.entityUniqueID; + } + + public String getCachedUniqueIdString() + { + return this.cachedUniqueIdString; + } + + public boolean isPushedByWater() + { + return true; + } + + @SideOnly(Side.CLIENT) + public static double getRenderDistanceWeight() + { + return renderDistanceWeight; + } + + @SideOnly(Side.CLIENT) + public static void setRenderDistanceWeight(double renderDistWeight) + { + renderDistanceWeight = renderDistWeight; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + TextComponentString textcomponentstring = new TextComponentString(ScorePlayerTeam.formatPlayerName(this.getTeam(), this.getName())); + textcomponentstring.getStyle().setHoverEvent(this.getHoverEvent()); + textcomponentstring.getStyle().setInsertion(this.getCachedUniqueIdString()); + return textcomponentstring; + } + + /** + * Sets the custom name tag for this entity + */ + public void setCustomNameTag(String name) + { + this.dataManager.set(CUSTOM_NAME, name); + } + + public String getCustomNameTag() + { + return (String)this.dataManager.get(CUSTOM_NAME); + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return !((String)this.dataManager.get(CUSTOM_NAME)).isEmpty(); + } + + public void setAlwaysRenderNameTag(boolean alwaysRenderNameTag) + { + this.dataManager.set(CUSTOM_NAME_VISIBLE, Boolean.valueOf(alwaysRenderNameTag)); + } + + public boolean getAlwaysRenderNameTag() + { + return ((Boolean)this.dataManager.get(CUSTOM_NAME_VISIBLE)).booleanValue(); + } + + /** + * Sets the position of the entity and updates the 'last' variables + */ + public void setPositionAndUpdate(double x, double y, double z) + { + this.isPositionDirty = true; + this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch); + this.world.updateEntityWithOptionalForce(this, false); + } + + public void notifyDataManagerChange(DataParameter key) + { + } + + @SideOnly(Side.CLIENT) + public boolean getAlwaysRenderNameTagForRender() + { + return this.getAlwaysRenderNameTag(); + } + + /** + * Gets the horizontal facing direction of this Entity. + */ + public EnumFacing getHorizontalFacing() + { + return EnumFacing.getHorizontal(MathHelper.floor((double)(this.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3); + } + + /** + * Gets the horizontal facing direction of this Entity, adjusted to take specially-treated entity types into + * account. + */ + public EnumFacing getAdjustedHorizontalFacing() + { + return this.getHorizontalFacing(); + } + + protected HoverEvent getHoverEvent() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + ResourceLocation resourcelocation = EntityList.getKey(this); + nbttagcompound.setString("id", this.getCachedUniqueIdString()); + + if (resourcelocation != null) + { + nbttagcompound.setString("type", resourcelocation.toString()); + } + + nbttagcompound.setString("name", this.getName()); + return new HoverEvent(HoverEvent.Action.SHOW_ENTITY, new TextComponentString(nbttagcompound.toString())); + } + + public boolean isSpectatedByPlayer(EntityPlayerMP player) + { + return true; + } + + public AxisAlignedBB getEntityBoundingBox() + { + return this.boundingBox; + } + + /** + * Gets the bounding box of this Entity, adjusted to take auxiliary entities into account (e.g. the tile contained + * by a minecart, such as a command block). + */ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return this.getEntityBoundingBox(); + } + + public void setEntityBoundingBox(AxisAlignedBB bb) + { + this.boundingBox = bb; + } + + public float getEyeHeight() + { + return this.height * 0.85F; + } + + public boolean isOutsideBorder() + { + return this.isOutsideBorder; + } + + public void setOutsideBorder(boolean outsideBorder) + { + this.isOutsideBorder = outsideBorder; + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + return false; + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return true; + } + + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, return + * the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return new BlockPos(this.posX, this.posY + 0.5D, this.posZ); + } + + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, return 0.0D, + * 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return new Vec3d(this.posX, this.posY, this.posZ); + } + + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, return + * the overworld + */ + public World getEntityWorld() + { + return this.world; + } + + /** + * Returns the entity associated with the command sender. MAY BE NULL! + */ + public Entity getCommandSenderEntity() + { + return this; + } + + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return false; + } + + public void setCommandStat(CommandResultStats.Type type, int amount) + { + if (this.world != null && !this.world.isRemote) + { + this.cmdResultStats.setCommandStatForSender(this.world.getMinecraftServer(), this, type, amount); + } + } + + /** + * Get the Minecraft server instance + */ + @Nullable + public MinecraftServer getServer() + { + return this.world.getMinecraftServer(); + } + + public CommandResultStats getCommandStats() + { + return this.cmdResultStats; + } + + /** + * Set the CommandResultStats from the entity + */ + public void setCommandStats(Entity entityIn) + { + this.cmdResultStats.addAllStats(entityIn.getCommandStats()); + } + + /** + * Applies the given player interaction to this Entity. + */ + public EnumActionResult applyPlayerInteraction(EntityPlayer player, Vec3d vec, EnumHand hand) + { + return EnumActionResult.PASS; + } + + public boolean isImmuneToExplosions() + { + return false; + } + + protected void applyEnchantments(EntityLivingBase entityLivingBaseIn, Entity entityIn) + { + if (entityIn instanceof EntityLivingBase) + { + EnchantmentHelper.applyThornEnchantments((EntityLivingBase)entityIn, entityLivingBaseIn); + } + + EnchantmentHelper.applyArthropodEnchantments(entityLivingBaseIn, entityIn); + } + + /* ================================== Forge Start =====================================*/ + /** + * Returns a NBTTagCompound that can be used to store custom data for this entity. + * It will be written, and read from disc, so it persists over world saves. + * @return A NBTTagCompound + */ + public NBTTagCompound getEntityData() + { + if (customEntityData == null) + { + customEntityData = new NBTTagCompound(); + } + return customEntityData; + } + + /** + * Used in model rendering to determine if the entity riding this entity should be in the 'sitting' position. + * @return false to prevent an entity that is mounted to this entity from displaying the 'sitting' animation. + */ + public boolean shouldRiderSit() + { + return true; + } + + /** + * Called when a user uses the creative pick block button on this entity. + * + * @param target The full target the player is looking at + * @return A ItemStack to add to the player's inventory, empty ItemStack if nothing should be added. + */ + public ItemStack getPickedResult(RayTraceResult target) + { + if (this instanceof net.minecraft.entity.item.EntityPainting) + { + return new ItemStack(net.minecraft.init.Items.PAINTING); + } + else if (this instanceof EntityLeashKnot) + { + return new ItemStack(net.minecraft.init.Items.LEAD); + } + else if (this instanceof net.minecraft.entity.item.EntityItemFrame) + { + ItemStack held = ((net.minecraft.entity.item.EntityItemFrame)this).getDisplayedItem(); + if (held.isEmpty()) + { + return new ItemStack(net.minecraft.init.Items.ITEM_FRAME); + } + else + { + return held.copy(); + } + } + else if (this instanceof net.minecraft.entity.item.EntityMinecart) + { + return ((net.minecraft.entity.item.EntityMinecart)this).getCartItem(); + } + else if (this instanceof net.minecraft.entity.item.EntityBoat) + { + return new ItemStack(((EntityBoat)this).getItemBoat()); + } + else if (this instanceof net.minecraft.entity.item.EntityArmorStand) + { + return new ItemStack(net.minecraft.init.Items.ARMOR_STAND); + } + else if (this instanceof net.minecraft.entity.item.EntityEnderCrystal) + { + return new ItemStack(net.minecraft.init.Items.END_CRYSTAL); + } + else + { + ResourceLocation name = EntityList.getKey(this); + if (name != null && EntityList.ENTITY_EGGS.containsKey(name)) + { + ItemStack stack = new ItemStack(net.minecraft.init.Items.SPAWN_EGG); + net.minecraft.item.ItemMonsterPlacer.applyEntityIdToItemStack(stack, name); + return stack; + } + } + return ItemStack.EMPTY; + } + + public UUID getPersistentID() + { + return entityUniqueID; + } + + /** + * Reset the entity ID to a new value. Not to be used from Mod code + */ + @Deprecated // TODO: remove (1.13?) + public final void resetEntityId() + { + this.entityId = nextEntityID++; + } + + public boolean shouldRenderInPass(int pass) + { + return pass == 0; + } + + /** + * Returns true if the entity is of the @link{EnumCreatureType} provided + * @param type The EnumCreatureType type this entity is evaluating + * @param forSpawnCount If this is being invoked to check spawn count caps. + * @return If the creature is of the type provided + */ + public boolean isCreatureType(EnumCreatureType type, boolean forSpawnCount) + { + if (forSpawnCount && (this instanceof EntityLiving) && ((EntityLiving)this).isNoDespawnRequired()) return false; + return type.getCreatureClass().isAssignableFrom(this.getClass()); + } + + /** + * If a rider of this entity can interact with this entity. Should return true on the + * ridden entity if so. + * + * @return if the entity can be interacted with from a rider + */ + public boolean canRiderInteract() + { + return false; + } + + /** + * If the rider should be dismounted from the entity when the entity goes under water + * + * @param rider The entity that is riding + * @return if the entity should be dismounted when under water + */ + public boolean shouldDismountInWater(Entity rider) + { + return this instanceof EntityLivingBase; + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capabilities != null && capabilities.hasCapability(capability, facing); + } + + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capabilities == null ? null : capabilities.getCapability(capability, facing); + } + + public void deserializeNBT(NBTTagCompound nbt) + { + this.readFromNBT(nbt); + } + + public NBTTagCompound serializeNBT() + { + NBTTagCompound ret = new NBTTagCompound(); + ret.setString("id", this.getEntityString()); + return this.writeToNBT(ret); + } + + /** + * Checks if this {@link Entity} can trample a {@link Block}. + * + * @param world The world in which the block will be trampled + * @param block The block being tested + * @param pos The block pos + * @param fallDistance The fall distance + * @return {@code true} if this entity can trample, {@code false} otherwise + */ + public boolean canTrample(World world, Block block, BlockPos pos, float fallDistance) + { + return world.rand.nextFloat() < fallDistance - 0.5F + && this instanceof EntityLivingBase + && (this instanceof EntityPlayer || net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(world, this)) + && this.width * this.width * this.height > 0.512F; + } + /* ================================== Forge End =====================================*/ + + /** + * Add the given player to the list of players tracking this entity. For instance, a player may track a boss in + * order to view its associated boss bar. + */ + public void addTrackingPlayer(EntityPlayerMP player) + { + } + + /** + * Removes the given player from the list of players tracking this entity. See {@link Entity#addTrackingPlayer} for + * more information on tracking. + */ + public void removeTrackingPlayer(EntityPlayerMP player) + { + } + + /** + * Transforms the entity's current yaw with the given Rotation and returns it. This does not have a side-effect. + */ + public float getRotatedYaw(Rotation transformRotation) + { + float f = MathHelper.wrapDegrees(this.rotationYaw); + + switch (transformRotation) + { + case CLOCKWISE_180: + return f + 180.0F; + case COUNTERCLOCKWISE_90: + return f + 270.0F; + case CLOCKWISE_90: + return f + 90.0F; + default: + return f; + } + } + + /** + * Transforms the entity's current yaw with the given Mirror and returns it. This does not have a side-effect. + */ + public float getMirroredYaw(Mirror transformMirror) + { + float f = MathHelper.wrapDegrees(this.rotationYaw); + + switch (transformMirror) + { + case LEFT_RIGHT: + return -f; + case FRONT_BACK: + return 180.0F - f; + default: + return f; + } + } + + public boolean ignoreItemEntityData() + { + return false; + } + + public boolean setPositionNonDirty() + { + boolean flag = this.isPositionDirty; + this.isPositionDirty = false; + return flag; + } + + /** + * For vehicles, the first passenger is generally considered the controller and "drives" the vehicle. For example, + * Pigs, Horses, and Boats are generally "steered" by the controlling passenger. + */ + @Nullable + public Entity getControllingPassenger() + { + return null; + } + + public List getPassengers() + { + return (List)(this.riddenByEntities.isEmpty() ? Collections.emptyList() : Lists.newArrayList(this.riddenByEntities)); + } + + public boolean isPassenger(Entity entityIn) + { + for (Entity entity : this.getPassengers()) + { + if (entity.equals(entityIn)) + { + return true; + } + } + + return false; + } + + /** + * Recursively collects the passengers of this entity. This differs from getPassengers() in that passengers of + * passengers are recursively collected. + */ + public Collection getRecursivePassengers() + { + Set set = Sets.newHashSet(); + this.getRecursivePassengersByType(Entity.class, set); + return set; + } + + /** + * Recursively collects the passengers of this entity with type denoted by the given class. + */ + public Collection getRecursivePassengersByType(Class entityClass) + { + Set set = Sets.newHashSet(); + this.getRecursivePassengersByType(entityClass, set); + return set; + } + + /** + * Recursively collects the passengers of this entity with the type denoted by the given class into the given Set. + */ + private void getRecursivePassengersByType(Class entityClass, Set theSet) + { + for (Entity entity : this.getPassengers()) + { + if (entityClass.isAssignableFrom(entity.getClass())) + { + theSet.add((T)entity); + } + + entity.getRecursivePassengersByType(entityClass, theSet); + } + } + + public Entity getLowestRidingEntity() + { + Entity entity; + + for (entity = this; entity.isRiding(); entity = entity.getRidingEntity()) + { + ; + } + + return entity; + } + + public boolean isRidingSameEntity(Entity entityIn) + { + return this.getLowestRidingEntity() == entityIn.getLowestRidingEntity(); + } + + public boolean isRidingOrBeingRiddenBy(Entity entityIn) + { + for (Entity entity : this.getPassengers()) + { + if (entity.equals(entityIn)) + { + return true; + } + + if (entity.isRidingOrBeingRiddenBy(entityIn)) + { + return true; + } + } + + return false; + } + + public boolean canPassengerSteer() + { + Entity entity = this.getControllingPassenger(); + + if (entity instanceof EntityPlayer) + { + return ((EntityPlayer)entity).isUser(); + } + else + { + return !this.world.isRemote; + } + } + + /** + * Get entity this is riding + */ + @Nullable + public Entity getRidingEntity() + { + return this.ridingEntity; + } + + public EnumPushReaction getPushReaction() + { + return EnumPushReaction.NORMAL; + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.NEUTRAL; + } + + protected int getFireImmuneTicks() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityAgeable.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityAgeable.java new file mode 100644 index 0000000..d0daa23 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityAgeable.java @@ -0,0 +1,291 @@ +package net.minecraft.entity; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; + +public abstract class EntityAgeable extends EntityCreature +{ + private static final DataParameter BABY = EntityDataManager.createKey(EntityAgeable.class, DataSerializers.BOOLEAN); + protected int growingAge; + protected int forcedAge; + protected int forcedAgeTimer; + private float ageWidth = -1.0F; + private float ageHeight; + + public EntityAgeable(World worldIn) + { + super(worldIn); + } + + @Nullable + public abstract EntityAgeable createChild(EntityAgeable ageable); + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.SPAWN_EGG) + { + if (!this.world.isRemote) + { + Class oclass = EntityList.getClass(ItemMonsterPlacer.getNamedIdFrom(itemstack)); + + if (oclass != null && this.getClass() == oclass) + { + EntityAgeable entityageable = this.createChild(this); + + if (entityageable != null) + { + entityageable.setGrowingAge(-24000); + entityageable.setLocationAndAngles(this.posX, this.posY, this.posZ, 0.0F, 0.0F); + this.world.spawnEntity(entityageable); + + if (itemstack.hasDisplayName()) + { + entityageable.setCustomNameTag(itemstack.getDisplayName()); + } + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + } + } + + return true; + } + else + { + return false; + } + } + + /** + * Checks if the given item is a spawn egg that spawns the given class of entity. + */ + protected boolean holdingSpawnEggOfClass(ItemStack stack, Class entityClass) + { + if (stack.getItem() != Items.SPAWN_EGG) + { + return false; + } + else + { + Class oclass = EntityList.getClass(ItemMonsterPlacer.getNamedIdFrom(stack)); + return oclass != null && entityClass == oclass; + } + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(BABY, Boolean.valueOf(false)); + } + + /** + * The age value may be negative or positive or zero. If it's negative, it get's incremented on each tick, if it's + * positive, it get's decremented each tick. Don't confuse this with EntityLiving.getAge. With a negative value the + * Entity is considered a child. + */ + public int getGrowingAge() + { + if (this.world.isRemote) + { + return ((Boolean)this.dataManager.get(BABY)).booleanValue() ? -1 : 1; + } + else + { + return this.growingAge; + } + } + + /** + * Increases this entity's age, optionally updating {@link #forcedAge}. If the entity is an adult (if the entity's + * age is greater than or equal to 0) then the entity's age will be set to {@link #forcedAge}. + * + * @param growthSeconds Number of seconds to grow this entity by. The entity's age will be increased by 20 times + * this number (i.e. this number converted to ticks). + * @param updateForcedAge If true, updates {@link #forcedAge} and {@link #forcedAgeTimer} + */ + public void ageUp(int growthSeconds, boolean updateForcedAge) + { + int i = this.getGrowingAge(); + int j = i; + i = i + growthSeconds * 20; + + if (i > 0) + { + i = 0; + + if (j < 0) + { + this.onGrowingAdult(); + } + } + + int k = i - j; + this.setGrowingAge(i); + + if (updateForcedAge) + { + this.forcedAge += k; + + if (this.forcedAgeTimer == 0) + { + this.forcedAgeTimer = 40; + } + } + + if (this.getGrowingAge() == 0) + { + this.setGrowingAge(this.forcedAge); + } + } + + /** + * Increases this entity's age. If the entity is an adult (if the entity's age is greater than or equal to 0) then + * the entity's age will be set to {@link #forcedAge}. This method does not update {@link #forcedAge}. + */ + public void addGrowth(int growth) + { + this.ageUp(growth, false); + } + + /** + * The age value may be negative or positive or zero. If it's negative, it get's incremented on each tick, if it's + * positive, it get's decremented each tick. With a negative value the Entity is considered a child. + */ + public void setGrowingAge(int age) + { + this.dataManager.set(BABY, Boolean.valueOf(age < 0)); + this.growingAge = age; + this.setScaleForAge(this.isChild()); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Age", this.getGrowingAge()); + compound.setInteger("ForcedAge", this.forcedAge); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setGrowingAge(compound.getInteger("Age")); + this.forcedAge = compound.getInteger("ForcedAge"); + } + + public void notifyDataManagerChange(DataParameter key) + { + if (BABY.equals(key)) + { + this.setScaleForAge(this.isChild()); + } + + super.notifyDataManagerChange(key); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.world.isRemote) + { + if (this.forcedAgeTimer > 0) + { + if (this.forcedAgeTimer % 4 == 0) + { + this.world.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, 0.0D, 0.0D, 0.0D); + } + + --this.forcedAgeTimer; + } + } + else + { + int i = this.getGrowingAge(); + + if (i < 0) + { + ++i; + this.setGrowingAge(i); + + if (i == 0) + { + this.onGrowingAdult(); + } + } + else if (i > 0) + { + --i; + this.setGrowingAge(i); + } + } + } + + /** + * This is called when Entity's growing age timer reaches 0 (negative values are considered as a child, positive as + * an adult) + */ + protected void onGrowingAdult() + { + } + + /** + * If Animal, checks if the age timer is negative + */ + public boolean isChild() + { + return this.getGrowingAge() < 0; + } + + /** + * "Sets the scale for an ageable entity according to the boolean parameter, which says if it's a child." + */ + public void setScaleForAge(boolean child) + { + this.setScale(child ? 0.5F : 1.0F); + } + + /** + * Sets the width and height of the entity. + */ + protected final void setSize(float width, float height) + { + boolean flag = this.ageWidth > 0.0F; + this.ageWidth = width; + this.ageHeight = height; + + if (!flag) + { + this.setScale(1.0F); + } + } + + protected final void setScale(float scale) + { + super.setSize(this.ageWidth * scale, this.ageHeight * scale); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityAreaEffectCloud.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityAreaEffectCloud.java new file mode 100644 index 0000000..d060625 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityAreaEffectCloud.java @@ -0,0 +1,544 @@ +package net.minecraft.entity; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.init.PotionTypes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class EntityAreaEffectCloud extends Entity +{ + private static final DataParameter RADIUS = EntityDataManager.createKey(EntityAreaEffectCloud.class, DataSerializers.FLOAT); + private static final DataParameter COLOR = EntityDataManager.createKey(EntityAreaEffectCloud.class, DataSerializers.VARINT); + private static final DataParameter IGNORE_RADIUS = EntityDataManager.createKey(EntityAreaEffectCloud.class, DataSerializers.BOOLEAN); + private static final DataParameter PARTICLE = EntityDataManager.createKey(EntityAreaEffectCloud.class, DataSerializers.VARINT); + private static final DataParameter PARTICLE_PARAM_1 = EntityDataManager.createKey(EntityAreaEffectCloud.class, DataSerializers.VARINT); + private static final DataParameter PARTICLE_PARAM_2 = EntityDataManager.createKey(EntityAreaEffectCloud.class, DataSerializers.VARINT); + private PotionType potion; + private final List effects; + private final Map reapplicationDelayMap; + private int duration; + private int waitTime; + private int reapplicationDelay; + private boolean colorSet; + private int durationOnUse; + private float radiusOnUse; + private float radiusPerTick; + private EntityLivingBase owner; + private UUID ownerUniqueId; + + public EntityAreaEffectCloud(World worldIn) + { + super(worldIn); + this.potion = PotionTypes.EMPTY; + this.effects = Lists.newArrayList(); + this.reapplicationDelayMap = Maps.newHashMap(); + this.duration = 600; + this.waitTime = 20; + this.reapplicationDelay = 20; + this.noClip = true; + this.isImmuneToFire = true; + this.setRadius(3.0F); + } + + public EntityAreaEffectCloud(World worldIn, double x, double y, double z) + { + this(worldIn); + this.setPosition(x, y, z); + } + + protected void entityInit() + { + this.getDataManager().register(COLOR, Integer.valueOf(0)); + this.getDataManager().register(RADIUS, Float.valueOf(0.5F)); + this.getDataManager().register(IGNORE_RADIUS, Boolean.valueOf(false)); + this.getDataManager().register(PARTICLE, Integer.valueOf(EnumParticleTypes.SPELL_MOB.getParticleID())); + this.getDataManager().register(PARTICLE_PARAM_1, Integer.valueOf(0)); + this.getDataManager().register(PARTICLE_PARAM_2, Integer.valueOf(0)); + } + + public void setRadius(float radiusIn) + { + double d0 = this.posX; + double d1 = this.posY; + double d2 = this.posZ; + this.setSize(radiusIn * 2.0F, 0.5F); + this.setPosition(d0, d1, d2); + + if (!this.world.isRemote) + { + this.getDataManager().set(RADIUS, Float.valueOf(radiusIn)); + } + } + + public float getRadius() + { + return ((Float)this.getDataManager().get(RADIUS)).floatValue(); + } + + public void setPotion(PotionType potionIn) + { + this.potion = potionIn; + + if (!this.colorSet) + { + this.updateFixedColor(); + } + } + + private void updateFixedColor() + { + if (this.potion == PotionTypes.EMPTY && this.effects.isEmpty()) + { + this.getDataManager().set(COLOR, Integer.valueOf(0)); + } + else + { + this.getDataManager().set(COLOR, Integer.valueOf(PotionUtils.getPotionColorFromEffectList(PotionUtils.mergeEffects(this.potion, this.effects)))); + } + } + + public void addEffect(PotionEffect effect) + { + this.effects.add(effect); + + if (!this.colorSet) + { + this.updateFixedColor(); + } + } + + public int getColor() + { + return ((Integer)this.getDataManager().get(COLOR)).intValue(); + } + + public void setColor(int colorIn) + { + this.colorSet = true; + this.getDataManager().set(COLOR, Integer.valueOf(colorIn)); + } + + public EnumParticleTypes getParticle() + { + return EnumParticleTypes.getParticleFromId(((Integer)this.getDataManager().get(PARTICLE)).intValue()); + } + + public void setParticle(EnumParticleTypes particleIn) + { + this.getDataManager().set(PARTICLE, Integer.valueOf(particleIn.getParticleID())); + } + + public int getParticleParam1() + { + return ((Integer)this.getDataManager().get(PARTICLE_PARAM_1)).intValue(); + } + + public void setParticleParam1(int particleParam) + { + this.getDataManager().set(PARTICLE_PARAM_1, Integer.valueOf(particleParam)); + } + + public int getParticleParam2() + { + return ((Integer)this.getDataManager().get(PARTICLE_PARAM_2)).intValue(); + } + + public void setParticleParam2(int particleParam) + { + this.getDataManager().set(PARTICLE_PARAM_2, Integer.valueOf(particleParam)); + } + + /** + * Sets if the radius should be ignored, and the effect should be shown in a single point instead of an area + */ + protected void setIgnoreRadius(boolean ignoreRadius) + { + this.getDataManager().set(IGNORE_RADIUS, Boolean.valueOf(ignoreRadius)); + } + + /** + * Returns true if the radius should be ignored, and the effect should be shown in a single point instead of an area + */ + public boolean shouldIgnoreRadius() + { + return ((Boolean)this.getDataManager().get(IGNORE_RADIUS)).booleanValue(); + } + + public int getDuration() + { + return this.duration; + } + + public void setDuration(int durationIn) + { + this.duration = durationIn; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + boolean flag = this.shouldIgnoreRadius(); + float f = this.getRadius(); + + if (this.world.isRemote) + { + EnumParticleTypes enumparticletypes = this.getParticle(); + int[] aint = new int[enumparticletypes.getArgumentCount()]; + + if (aint.length > 0) + { + aint[0] = this.getParticleParam1(); + } + + if (aint.length > 1) + { + aint[1] = this.getParticleParam2(); + } + + if (flag) + { + if (this.rand.nextBoolean()) + { + for (int i = 0; i < 2; ++i) + { + float f1 = this.rand.nextFloat() * ((float)Math.PI * 2F); + float f2 = MathHelper.sqrt(this.rand.nextFloat()) * 0.2F; + float f3 = MathHelper.cos(f1) * f2; + float f4 = MathHelper.sin(f1) * f2; + + if (enumparticletypes == EnumParticleTypes.SPELL_MOB) + { + int j = this.rand.nextBoolean() ? 16777215 : this.getColor(); + int k = j >> 16 & 255; + int l = j >> 8 & 255; + int i1 = j & 255; + this.world.spawnAlwaysVisibleParticle(EnumParticleTypes.SPELL_MOB.getParticleID(), this.posX + (double)f3, this.posY, this.posZ + (double)f4, (double)((float)k / 255.0F), (double)((float)l / 255.0F), (double)((float)i1 / 255.0F)); + } + else + { + this.world.spawnAlwaysVisibleParticle(enumparticletypes.getParticleID(), this.posX + (double)f3, this.posY, this.posZ + (double)f4, 0.0D, 0.0D, 0.0D, aint); + } + } + } + } + else + { + float f5 = (float)Math.PI * f * f; + + for (int k1 = 0; (float)k1 < f5; ++k1) + { + float f6 = this.rand.nextFloat() * ((float)Math.PI * 2F); + float f7 = MathHelper.sqrt(this.rand.nextFloat()) * f; + float f8 = MathHelper.cos(f6) * f7; + float f9 = MathHelper.sin(f6) * f7; + + if (enumparticletypes == EnumParticleTypes.SPELL_MOB) + { + int l1 = this.getColor(); + int i2 = l1 >> 16 & 255; + int j2 = l1 >> 8 & 255; + int j1 = l1 & 255; + this.world.spawnAlwaysVisibleParticle(EnumParticleTypes.SPELL_MOB.getParticleID(), this.posX + (double)f8, this.posY, this.posZ + (double)f9, (double)((float)i2 / 255.0F), (double)((float)j2 / 255.0F), (double)((float)j1 / 255.0F)); + } + else + { + this.world.spawnAlwaysVisibleParticle(enumparticletypes.getParticleID(), this.posX + (double)f8, this.posY, this.posZ + (double)f9, (0.5D - this.rand.nextDouble()) * 0.15D, 0.009999999776482582D, (0.5D - this.rand.nextDouble()) * 0.15D, aint); + } + } + } + } + else + { + if (this.ticksExisted >= this.waitTime + this.duration) + { + this.setDead(); + return; + } + + boolean flag1 = this.ticksExisted < this.waitTime; + + if (flag != flag1) + { + this.setIgnoreRadius(flag1); + } + + if (flag1) + { + return; + } + + if (this.radiusPerTick != 0.0F) + { + f += this.radiusPerTick; + + if (f < 0.5F) + { + this.setDead(); + return; + } + + this.setRadius(f); + } + + if (this.ticksExisted % 5 == 0) + { + Iterator> iterator = this.reapplicationDelayMap.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + + if (this.ticksExisted >= ((Integer)entry.getValue()).intValue()) + { + iterator.remove(); + } + } + + List potions = Lists.newArrayList(); + + for (PotionEffect potioneffect1 : this.potion.getEffects()) + { + potions.add(new PotionEffect(potioneffect1.getPotion(), potioneffect1.getDuration() / 4, potioneffect1.getAmplifier(), potioneffect1.getIsAmbient(), potioneffect1.doesShowParticles())); + } + + potions.addAll(this.effects); + + if (potions.isEmpty()) + { + this.reapplicationDelayMap.clear(); + } + else + { + List list = this.world.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox()); + + if (!list.isEmpty()) + { + for (EntityLivingBase entitylivingbase : list) + { + if (!this.reapplicationDelayMap.containsKey(entitylivingbase) && entitylivingbase.canBeHitWithPotion()) + { + double d0 = entitylivingbase.posX - this.posX; + double d1 = entitylivingbase.posZ - this.posZ; + double d2 = d0 * d0 + d1 * d1; + + if (d2 <= (double)(f * f)) + { + this.reapplicationDelayMap.put(entitylivingbase, Integer.valueOf(this.ticksExisted + this.reapplicationDelay)); + + for (PotionEffect potioneffect : potions) + { + if (potioneffect.getPotion().isInstant()) + { + potioneffect.getPotion().affectEntity(this, this.getOwner(), entitylivingbase, potioneffect.getAmplifier(), 0.5D); + } + else + { + entitylivingbase.addPotionEffect(new PotionEffect(potioneffect)); + } + } + + if (this.radiusOnUse != 0.0F) + { + f += this.radiusOnUse; + + if (f < 0.5F) + { + this.setDead(); + return; + } + + this.setRadius(f); + } + + if (this.durationOnUse != 0) + { + this.duration += this.durationOnUse; + + if (this.duration <= 0) + { + this.setDead(); + return; + } + } + } + } + } + } + } + } + } + } + + public void setRadiusOnUse(float radiusOnUseIn) + { + this.radiusOnUse = radiusOnUseIn; + } + + public void setRadiusPerTick(float radiusPerTickIn) + { + this.radiusPerTick = radiusPerTickIn; + } + + public void setWaitTime(int waitTimeIn) + { + this.waitTime = waitTimeIn; + } + + public void setOwner(@Nullable EntityLivingBase ownerIn) + { + this.owner = ownerIn; + this.ownerUniqueId = ownerIn == null ? null : ownerIn.getUniqueID(); + } + + @Nullable + public EntityLivingBase getOwner() + { + if (this.owner == null && this.ownerUniqueId != null && this.world instanceof WorldServer) + { + Entity entity = ((WorldServer)this.world).getEntityFromUuid(this.ownerUniqueId); + + if (entity instanceof EntityLivingBase) + { + this.owner = (EntityLivingBase)entity; + } + } + + return this.owner; + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + this.ticksExisted = compound.getInteger("Age"); + this.duration = compound.getInteger("Duration"); + this.waitTime = compound.getInteger("WaitTime"); + this.reapplicationDelay = compound.getInteger("ReapplicationDelay"); + this.durationOnUse = compound.getInteger("DurationOnUse"); + this.radiusOnUse = compound.getFloat("RadiusOnUse"); + this.radiusPerTick = compound.getFloat("RadiusPerTick"); + this.setRadius(compound.getFloat("Radius")); + this.ownerUniqueId = compound.getUniqueId("OwnerUUID"); + + if (compound.hasKey("Particle", 8)) + { + EnumParticleTypes enumparticletypes = EnumParticleTypes.getByName(compound.getString("Particle")); + + if (enumparticletypes != null) + { + this.setParticle(enumparticletypes); + this.setParticleParam1(compound.getInteger("ParticleParam1")); + this.setParticleParam2(compound.getInteger("ParticleParam2")); + } + } + + if (compound.hasKey("Color", 99)) + { + this.setColor(compound.getInteger("Color")); + } + + if (compound.hasKey("Potion", 8)) + { + this.setPotion(PotionUtils.getPotionTypeFromNBT(compound)); + } + + if (compound.hasKey("Effects", 9)) + { + NBTTagList nbttaglist = compound.getTagList("Effects", 10); + this.effects.clear(); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + PotionEffect potioneffect = PotionEffect.readCustomPotionEffectFromNBT(nbttaglist.getCompoundTagAt(i)); + + if (potioneffect != null) + { + this.addEffect(potioneffect); + } + } + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + compound.setInteger("Age", this.ticksExisted); + compound.setInteger("Duration", this.duration); + compound.setInteger("WaitTime", this.waitTime); + compound.setInteger("ReapplicationDelay", this.reapplicationDelay); + compound.setInteger("DurationOnUse", this.durationOnUse); + compound.setFloat("RadiusOnUse", this.radiusOnUse); + compound.setFloat("RadiusPerTick", this.radiusPerTick); + compound.setFloat("Radius", this.getRadius()); + compound.setString("Particle", this.getParticle().getParticleName()); + compound.setInteger("ParticleParam1", this.getParticleParam1()); + compound.setInteger("ParticleParam2", this.getParticleParam2()); + + if (this.ownerUniqueId != null) + { + compound.setUniqueId("OwnerUUID", this.ownerUniqueId); + } + + if (this.colorSet) + { + compound.setInteger("Color", this.getColor()); + } + + if (this.potion != PotionTypes.EMPTY && this.potion != null) + { + compound.setString("Potion", ((ResourceLocation)PotionType.REGISTRY.getNameForObject(this.potion)).toString()); + } + + if (!this.effects.isEmpty()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (PotionEffect potioneffect : this.effects) + { + nbttaglist.appendTag(potioneffect.writeCustomPotionEffectToNBT(new NBTTagCompound())); + } + + compound.setTag("Effects", nbttaglist); + } + } + + public void notifyDataManagerChange(DataParameter key) + { + if (RADIUS.equals(key)) + { + this.setRadius(this.getRadius()); + } + + super.notifyDataManagerChange(key); + } + + public EnumPushReaction getPushReaction() + { + return EnumPushReaction.IGNORE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityBodyHelper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityBodyHelper.java new file mode 100644 index 0000000..a4164d8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityBodyHelper.java @@ -0,0 +1,80 @@ +package net.minecraft.entity; + +import net.minecraft.util.math.MathHelper; + +public class EntityBodyHelper +{ + /** Instance of EntityLiving. */ + private final EntityLivingBase living; + /** Used to progressively ajust the rotation of the body to the rotation of the head */ + private int rotationTickCounter; + private float prevRenderYawHead; + + public EntityBodyHelper(EntityLivingBase livingIn) + { + this.living = livingIn; + } + + /** + * Update the Head and Body rendenring angles + */ + public void updateRenderAngles() + { + double d0 = this.living.posX - this.living.prevPosX; + double d1 = this.living.posZ - this.living.prevPosZ; + + if (d0 * d0 + d1 * d1 > 2.500000277905201E-7D) + { + this.living.renderYawOffset = this.living.rotationYaw; + this.living.rotationYawHead = this.computeAngleWithBound(this.living.renderYawOffset, this.living.rotationYawHead, 75.0F); + this.prevRenderYawHead = this.living.rotationYawHead; + this.rotationTickCounter = 0; + } + else + { + if (this.living.getPassengers().isEmpty() || !(this.living.getPassengers().get(0) instanceof EntityLiving)) + { + float f = 75.0F; + + if (Math.abs(this.living.rotationYawHead - this.prevRenderYawHead) > 15.0F) + { + this.rotationTickCounter = 0; + this.prevRenderYawHead = this.living.rotationYawHead; + } + else + { + ++this.rotationTickCounter; + int i = 10; + + if (this.rotationTickCounter > 10) + { + f = Math.max(1.0F - (float)(this.rotationTickCounter - 10) / 10.0F, 0.0F) * 75.0F; + } + } + + this.living.renderYawOffset = this.computeAngleWithBound(this.living.rotationYawHead, this.living.renderYawOffset, f); + } + } + } + + /** + * Return the new angle2 such that the difference between angle1 and angle2 is lower than angleMax. Args : angle1, + * angle2, angleMax + */ + private float computeAngleWithBound(float p_75665_1_, float p_75665_2_, float p_75665_3_) + { + float f = MathHelper.wrapDegrees(p_75665_1_ - p_75665_2_); + + if (f < -p_75665_3_) + { + f = -p_75665_3_; + } + + if (f >= p_75665_3_) + { + f = p_75665_3_; + } + + return p_75665_1_ - f; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityCreature.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityCreature.java new file mode 100644 index 0000000..6e8c0a1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityCreature.java @@ -0,0 +1,152 @@ +package net.minecraft.entity; + +import java.util.UUID; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public abstract class EntityCreature extends EntityLiving +{ + public static final UUID FLEEING_SPEED_MODIFIER_UUID = UUID.fromString("E199AD21-BA8A-4C53-8D13-6182D5C69D3A"); + public static final AttributeModifier FLEEING_SPEED_MODIFIER = (new AttributeModifier(FLEEING_SPEED_MODIFIER_UUID, "Fleeing speed bonus", 2.0D, 2)).setSaved(false); + private BlockPos homePosition = BlockPos.ORIGIN; + /** If -1 there is no maximum distance */ + private float maximumHomeDistance = -1.0F; + private final float restoreWaterCost = PathNodeType.WATER.getPriority(); + + public EntityCreature(World worldIn) + { + super(worldIn); + } + + public float getBlockPathWeight(BlockPos pos) + { + return 0.0F; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return super.getCanSpawnHere() && this.getBlockPathWeight(new BlockPos(this.posX, this.getEntityBoundingBox().minY, this.posZ)) >= 0.0F; + } + + /** + * if the entity got a PathEntity it returns true, else false + */ + public boolean hasPath() + { + return !this.navigator.noPath(); + } + + public boolean isWithinHomeDistanceCurrentPosition() + { + return this.isWithinHomeDistanceFromPosition(new BlockPos(this)); + } + + public boolean isWithinHomeDistanceFromPosition(BlockPos pos) + { + if (this.maximumHomeDistance == -1.0F) + { + return true; + } + else + { + return this.homePosition.distanceSq(pos) < (double)(this.maximumHomeDistance * this.maximumHomeDistance); + } + } + + /** + * Sets home position and max distance for it + */ + public void setHomePosAndDistance(BlockPos pos, int distance) + { + this.homePosition = pos; + this.maximumHomeDistance = (float)distance; + } + + public BlockPos getHomePosition() + { + return this.homePosition; + } + + public float getMaximumHomeDistance() + { + return this.maximumHomeDistance; + } + + public void detachHome() + { + this.maximumHomeDistance = -1.0F; + } + + /** + * Returns whether a home area is defined for this entity. + */ + public boolean hasHome() + { + return this.maximumHomeDistance != -1.0F; + } + + /** + * Applies logic related to leashes, for example dragging the entity or breaking the leash. + */ + protected void updateLeashedState() + { + super.updateLeashedState(); + + if (this.getLeashed() && this.getLeashHolder() != null && this.getLeashHolder().world == this.world) + { + Entity entity = this.getLeashHolder(); + this.setHomePosAndDistance(new BlockPos((int)entity.posX, (int)entity.posY, (int)entity.posZ), 5); + float f = this.getDistance(entity); + + if (this instanceof EntityTameable && ((EntityTameable)this).isSitting()) + { + if (f > 10.0F) + { + this.clearLeashed(true, true); + } + + return; + } + + this.onLeashDistance(f); + + if (f > 10.0F) + { + this.clearLeashed(true, true); + this.tasks.disableControlFlag(1); + } + else if (f > 6.0F) + { + double d0 = (entity.posX - this.posX) / (double)f; + double d1 = (entity.posY - this.posY) / (double)f; + double d2 = (entity.posZ - this.posZ) / (double)f; + this.motionX += d0 * Math.abs(d0) * 0.4D; + this.motionY += d1 * Math.abs(d1) * 0.4D; + this.motionZ += d2 * Math.abs(d2) * 0.4D; + } + else + { + this.tasks.enableControlFlag(1); + float f1 = 2.0F; + Vec3d vec3d = (new Vec3d(entity.posX - this.posX, entity.posY - this.posY, entity.posZ - this.posZ)).normalize().scale((double)Math.max(f - 2.0F, 0.0F)); + this.getNavigator().tryMoveToXYZ(this.posX + vec3d.x, this.posY + vec3d.y, this.posZ + vec3d.z, this.followLeashSpeed()); + } + } + } + + protected double followLeashSpeed() + { + return 1.0D; + } + + protected void onLeashDistance(float p_142017_1_) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityFlying.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityFlying.java new file mode 100644 index 0000000..e9c2731 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityFlying.java @@ -0,0 +1,91 @@ +package net.minecraft.entity; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public abstract class EntityFlying extends EntityLiving +{ + public EntityFlying(World worldIn) + { + super(worldIn); + } + + public void fall(float distance, float damageMultiplier) + { + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + } + + public void travel(float strafe, float vertical, float forward) + { + if (this.isInWater()) + { + this.moveRelative(strafe, vertical, forward, 0.02F); + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.800000011920929D; + this.motionY *= 0.800000011920929D; + this.motionZ *= 0.800000011920929D; + } + else if (this.isInLava()) + { + this.moveRelative(strafe, vertical, forward, 0.02F); + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + else + { + float f = 0.91F; + + if (this.onGround) + { + BlockPos underPos = new BlockPos(MathHelper.floor(this.posX), MathHelper.floor(this.getEntityBoundingBox().minY) - 1, MathHelper.floor(this.posZ)); + IBlockState underState = this.world.getBlockState(underPos); + f = underState.getBlock().getSlipperiness(underState, this.world, underPos, this) * 0.91F; + } + + float f1 = 0.16277136F / (f * f * f); + this.moveRelative(strafe, vertical, forward, this.onGround ? 0.1F * f1 : 0.02F); + f = 0.91F; + + if (this.onGround) + { + BlockPos underPos = new BlockPos(MathHelper.floor(this.posX), MathHelper.floor(this.getEntityBoundingBox().minY) - 1, MathHelper.floor(this.posZ)); + IBlockState underState = this.world.getBlockState(underPos); + f = underState.getBlock().getSlipperiness(underState, this.world, underPos, this) * 0.91F; + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)f; + this.motionY *= (double)f; + this.motionZ *= (double)f; + } + + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.posX - this.prevPosX; + double d0 = this.posZ - this.prevPosZ; + float f2 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + this.limbSwingAmount += (f2 - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } + + /** + * Returns true if this entity should move as if it were on a ladder (either because it's actually on a ladder, or + * for AI reasons) + */ + public boolean isOnLadder() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityHanging.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityHanging.java new file mode 100644 index 0000000..0c50b84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityHanging.java @@ -0,0 +1,357 @@ +package net.minecraft.entity; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.BlockRedstoneDiode; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import org.apache.commons.lang3.Validate; + +public abstract class EntityHanging extends Entity +{ + private static final Predicate IS_HANGING_ENTITY = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof EntityHanging; + } + }; + private int tickCounter1; + protected BlockPos hangingPosition; + /** The direction the entity is facing */ + @Nullable + public EnumFacing facingDirection; + + public EntityHanging(World worldIn) + { + super(worldIn); + this.setSize(0.5F, 0.5F); + } + + public EntityHanging(World worldIn, BlockPos hangingPositionIn) + { + this(worldIn); + this.hangingPosition = hangingPositionIn; + } + + protected void entityInit() + { + } + + /** + * Updates facing and bounding box based on it + */ + protected void updateFacingWithBoundingBox(EnumFacing facingDirectionIn) + { + Validate.notNull(facingDirectionIn); + Validate.isTrue(facingDirectionIn.getAxis().isHorizontal()); + this.facingDirection = facingDirectionIn; + this.rotationYaw = (float)(this.facingDirection.getHorizontalIndex() * 90); + this.prevRotationYaw = this.rotationYaw; + this.updateBoundingBox(); + } + + /** + * Updates the entity bounding box based on current facing + */ + protected void updateBoundingBox() + { + if (this.facingDirection != null) + { + double d0 = (double)this.hangingPosition.getX() + 0.5D; + double d1 = (double)this.hangingPosition.getY() + 0.5D; + double d2 = (double)this.hangingPosition.getZ() + 0.5D; + double d3 = 0.46875D; + double d4 = this.offs(this.getWidthPixels()); + double d5 = this.offs(this.getHeightPixels()); + d0 = d0 - (double)this.facingDirection.getFrontOffsetX() * 0.46875D; + d2 = d2 - (double)this.facingDirection.getFrontOffsetZ() * 0.46875D; + d1 = d1 + d5; + EnumFacing enumfacing = this.facingDirection.rotateYCCW(); + d0 = d0 + d4 * (double)enumfacing.getFrontOffsetX(); + d2 = d2 + d4 * (double)enumfacing.getFrontOffsetZ(); + this.posX = d0; + this.posY = d1; + this.posZ = d2; + double d6 = (double)this.getWidthPixels(); + double d7 = (double)this.getHeightPixels(); + double d8 = (double)this.getWidthPixels(); + + if (this.facingDirection.getAxis() == EnumFacing.Axis.Z) + { + d8 = 1.0D; + } + else + { + d6 = 1.0D; + } + + d6 = d6 / 32.0D; + d7 = d7 / 32.0D; + d8 = d8 / 32.0D; + this.setEntityBoundingBox(new AxisAlignedBB(d0 - d6, d1 - d7, d2 - d8, d0 + d6, d1 + d7, d2 + d8)); + } + } + + private double offs(int p_190202_1_) + { + return p_190202_1_ % 32 == 0 ? 0.5D : 0.0D; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.tickCounter1++ == 100 && !this.world.isRemote) + { + this.tickCounter1 = 0; + + if (!this.isDead && !this.onValidSurface()) + { + this.setDead(); + this.onBroken((Entity)null); + } + } + } + + /** + * checks to make sure painting can be placed there + */ + public boolean onValidSurface() + { + if (!this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty()) + { + return false; + } + else + { + int i = Math.max(1, this.getWidthPixels() / 16); + int j = Math.max(1, this.getHeightPixels() / 16); + BlockPos blockpos = this.hangingPosition.offset(this.facingDirection.getOpposite()); + EnumFacing enumfacing = this.facingDirection.rotateYCCW(); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int k = 0; k < i; ++k) + { + for (int l = 0; l < j; ++l) + { + int i1 = (i - 1) / -2; + int j1 = (j - 1) / -2; + blockpos$mutableblockpos.setPos(blockpos).move(enumfacing, k + i1).move(EnumFacing.UP, l + j1); + IBlockState iblockstate = this.world.getBlockState(blockpos$mutableblockpos); + + if (iblockstate.isSideSolid(this.world, blockpos$mutableblockpos, this.facingDirection)) + continue; + + if (!iblockstate.getMaterial().isSolid() && !BlockRedstoneDiode.isDiode(iblockstate)) + { + return false; + } + } + } + + return this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox(), IS_HANGING_ENTITY).isEmpty(); + } + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return true; + } + + /** + * Called when a player attacks an entity. If this returns true the attack will not happen. + */ + public boolean hitByEntity(Entity entityIn) + { + return entityIn instanceof EntityPlayer ? this.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)entityIn), 0.0F) : false; + } + + /** + * Gets the horizontal facing direction of this Entity. + */ + public EnumFacing getHorizontalFacing() + { + return this.facingDirection; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + if (!this.isDead && !this.world.isRemote) + { + this.setDead(); + this.markVelocityChanged(); + this.onBroken(source.getTrueSource()); + } + + return true; + } + } + + /** + * Tries to move the entity towards the specified location. + */ + public void move(MoverType type, double x, double y, double z) + { + if (!this.world.isRemote && !this.isDead && x * x + y * y + z * z > 0.0D) + { + this.setDead(); + this.onBroken((Entity)null); + } + } + + /** + * Adds to the current velocity of the entity, and sets {@link #isAirBorne} to true. + */ + public void addVelocity(double x, double y, double z) + { + if (!this.world.isRemote && !this.isDead && x * x + y * y + z * z > 0.0D) + { + this.setDead(); + this.onBroken((Entity)null); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setByte("Facing", (byte)this.facingDirection.getHorizontalIndex()); + BlockPos blockpos = this.getHangingPosition(); + compound.setInteger("TileX", blockpos.getX()); + compound.setInteger("TileY", blockpos.getY()); + compound.setInteger("TileZ", blockpos.getZ()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.hangingPosition = new BlockPos(compound.getInteger("TileX"), compound.getInteger("TileY"), compound.getInteger("TileZ")); + this.updateFacingWithBoundingBox(EnumFacing.getHorizontal(compound.getByte("Facing"))); + } + + public abstract int getWidthPixels(); + + public abstract int getHeightPixels(); + + /** + * Called when this entity is broken. Entity parameter may be null. + */ + public abstract void onBroken(@Nullable Entity brokenEntity); + + public abstract void playPlaceSound(); + + /** + * Drops an item at the position of the entity. + */ + public EntityItem entityDropItem(ItemStack stack, float offsetY) + { + EntityItem entityitem = new EntityItem(this.world, this.posX + (double)((float)this.facingDirection.getFrontOffsetX() * 0.15F), this.posY + (double)offsetY, this.posZ + (double)((float)this.facingDirection.getFrontOffsetZ() * 0.15F), stack); + entityitem.setDefaultPickupDelay(); + this.world.spawnEntity(entityitem); + return entityitem; + } + + protected boolean shouldSetPosAfterLoading() + { + return false; + } + + /** + * Sets the x,y,z of the entity from the given parameters. Also seems to set up a bounding box. + */ + public void setPosition(double x, double y, double z) + { + this.hangingPosition = new BlockPos(x, y, z); + this.updateBoundingBox(); + this.isAirBorne = true; + } + + public BlockPos getHangingPosition() + { + return this.hangingPosition; + } + + /** + * Transforms the entity's current yaw with the given Rotation and returns it. This does not have a side-effect. + */ + @SuppressWarnings("incomplete-switch") + public float getRotatedYaw(Rotation transformRotation) + { + if (this.facingDirection != null && this.facingDirection.getAxis() != EnumFacing.Axis.Y) + { + switch (transformRotation) + { + case CLOCKWISE_180: + this.facingDirection = this.facingDirection.getOpposite(); + break; + case COUNTERCLOCKWISE_90: + this.facingDirection = this.facingDirection.rotateYCCW(); + break; + case CLOCKWISE_90: + this.facingDirection = this.facingDirection.rotateY(); + } + } + + float f = MathHelper.wrapDegrees(this.rotationYaw); + + switch (transformRotation) + { + case CLOCKWISE_180: + return f + 180.0F; + case COUNTERCLOCKWISE_90: + return f + 90.0F; + case CLOCKWISE_90: + return f + 270.0F; + default: + return f; + } + } + + /** + * Transforms the entity's current yaw with the given Mirror and returns it. This does not have a side-effect. + */ + public float getMirroredYaw(Mirror transformMirror) + { + return this.getRotatedYaw(transformMirror.toRotation(this.facingDirection)); + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLeashKnot.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLeashKnot.java new file mode 100644 index 0000000..523f63e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLeashKnot.java @@ -0,0 +1,196 @@ +package net.minecraft.entity; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.BlockFence; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityLeashKnot extends EntityHanging +{ + public EntityLeashKnot(World worldIn) + { + super(worldIn); + } + + public EntityLeashKnot(World worldIn, BlockPos hangingPositionIn) + { + super(worldIn, hangingPositionIn); + this.setPosition((double)hangingPositionIn.getX() + 0.5D, (double)hangingPositionIn.getY() + 0.5D, (double)hangingPositionIn.getZ() + 0.5D); + float f = 0.125F; + float f1 = 0.1875F; + float f2 = 0.25F; + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.1875D, this.posY - 0.25D + 0.125D, this.posZ - 0.1875D, this.posX + 0.1875D, this.posY + 0.25D + 0.125D, this.posZ + 0.1875D)); + this.forceSpawn = true; + } + + /** + * Sets the x,y,z of the entity from the given parameters. Also seems to set up a bounding box. + */ + public void setPosition(double x, double y, double z) + { + super.setPosition((double)MathHelper.floor(x) + 0.5D, (double)MathHelper.floor(y) + 0.5D, (double)MathHelper.floor(z) + 0.5D); + } + + /** + * Updates the entity bounding box based on current facing + */ + protected void updateBoundingBox() + { + this.posX = (double)this.hangingPosition.getX() + 0.5D; + this.posY = (double)this.hangingPosition.getY() + 0.5D; + this.posZ = (double)this.hangingPosition.getZ() + 0.5D; + } + + /** + * Updates facing and bounding box based on it + */ + public void updateFacingWithBoundingBox(EnumFacing facingDirectionIn) + { + } + + public int getWidthPixels() + { + return 9; + } + + public int getHeightPixels() + { + return 9; + } + + public float getEyeHeight() + { + return -0.0625F; + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 1024.0D; + } + + /** + * Called when this entity is broken. Entity parameter may be null. + */ + public void onBroken(@Nullable Entity brokenEntity) + { + this.playSound(SoundEvents.ENTITY_LEASHKNOT_BREAK, 1.0F, 1.0F); + } + + /** + * Either write this entity to the NBT tag given and return true, or return false without doing anything. If this + * returns false the entity is not saved on disk. Riding entities return false here as they are saved with their + * mount. + */ + public boolean writeToNBTOptional(NBTTagCompound compound) + { + return false; + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.world.isRemote) + { + return true; + } + else + { + boolean flag = false; + double d0 = 7.0D; + List list = this.world.getEntitiesWithinAABB(EntityLiving.class, new AxisAlignedBB(this.posX - 7.0D, this.posY - 7.0D, this.posZ - 7.0D, this.posX + 7.0D, this.posY + 7.0D, this.posZ + 7.0D)); + + for (EntityLiving entityliving : list) + { + if (entityliving.getLeashed() && entityliving.getLeashHolder() == player) + { + entityliving.setLeashHolder(this, true); + flag = true; + } + } + + if (!flag) + { + this.setDead(); + + if (player.capabilities.isCreativeMode) + { + for (EntityLiving entityliving1 : list) + { + if (entityliving1.getLeashed() && entityliving1.getLeashHolder() == this) + { + entityliving1.clearLeashed(true, false); + } + } + } + } + + return true; + } + } + + /** + * checks to make sure painting can be placed there + */ + public boolean onValidSurface() + { + return this.world.getBlockState(this.hangingPosition).getBlock() instanceof BlockFence; + } + + public static EntityLeashKnot createKnot(World worldIn, BlockPos fence) + { + EntityLeashKnot entityleashknot = new EntityLeashKnot(worldIn, fence); + worldIn.spawnEntity(entityleashknot); + entityleashknot.playPlaceSound(); + return entityleashknot; + } + + @Nullable + public static EntityLeashKnot getKnotForPosition(World worldIn, BlockPos pos) + { + int i = pos.getX(); + int j = pos.getY(); + int k = pos.getZ(); + + for (EntityLeashKnot entityleashknot : worldIn.getEntitiesWithinAABB(EntityLeashKnot.class, new AxisAlignedBB((double)i - 1.0D, (double)j - 1.0D, (double)k - 1.0D, (double)i + 1.0D, (double)j + 1.0D, (double)k + 1.0D))) + { + if (entityleashknot.getHangingPosition().equals(pos)) + { + return entityleashknot; + } + } + + return null; + } + + public void playPlaceSound() + { + this.playSound(SoundEvents.ENTITY_LEASHKNOT_PLACE, 1.0F, 1.0F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityList.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityList.java new file mode 100644 index 0000000..036db03 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityList.java @@ -0,0 +1,532 @@ +package net.minecraft.entity; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityMinecartChest; +import net.minecraft.entity.item.EntityMinecartCommandBlock; +import net.minecraft.entity.item.EntityMinecartEmpty; +import net.minecraft.entity.item.EntityMinecartFurnace; +import net.minecraft.entity.item.EntityMinecartHopper; +import net.minecraft.entity.item.EntityMinecartMobSpawner; +import net.minecraft.entity.item.EntityMinecartTNT; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityElderGuardian; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.monster.EntityEvoker; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.EntityGiantZombie; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.entity.monster.EntityHusk; +import net.minecraft.entity.monster.EntityIllusionIllager; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.monster.EntityPolarBear; +import net.minecraft.entity.monster.EntityShulker; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.monster.EntityStray; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.entity.monster.EntityVindicator; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityWitherSkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityDonkey; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.entity.passive.EntityMule; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntitySkeletonHorse; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.passive.EntityZombieHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.entity.projectile.EntityLargeFireball; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityList +{ + public static final ResourceLocation LIGHTNING_BOLT = new ResourceLocation("lightning_bolt"); + private static final ResourceLocation PLAYER = new ResourceLocation("player"); + private static final Logger LOGGER = LogManager.getLogger(); + /** This is a HashMap of the Creative Entity Eggs/Spawners. */ + public static final Map ENTITY_EGGS = Maps.newLinkedHashMap(); + private static final Set EXTRA_NAMES = Sets.newHashSet(); + + /** + * Gets the {@link ResourceLocation} that identifies the given entity's type. + */ + @Nullable + public static ResourceLocation getKey(Entity entityIn) + { + return getKey(entityIn.getClass()); + } + + /** + * Gets the {@link ResourceLocation} that identifies the given entity's type. + * + * @return The resource location, or null if the {@link #REGISTRY} does not contain a mapping for that class. + */ + @Nullable + public static ResourceLocation getKey(Class entityIn) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.EntityRegistry.getEntry(entityIn); + return entry == null ? null : entry.getRegistryName(); + } + + /** + * Gets the original name for the entity, used in versions prior to 1.11. This name is also used for translation + * strings. + * + * @return The entity's original name, or null if the given entity's type is not known. + */ + @Nullable + public static String getEntityString(Entity entityIn) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.EntityRegistry.getEntry(entityIn.getClass()); + return entry == null ? null : entry.getName(); + } + + /** + * Gets the original name for the given entity type, used in versions prior to 1.11. Note that even entities added + * after 1.11 have old names as returned by this method. + *

+ * This name is also used for translation strings; translate "entity.$oldid.name" (with + * $oldid being the result of this method) to get those names. Note that the name is upper-case in most + * situations. + * + * @return The original entity name, or null if there is no known entity for that type. + */ + @Nullable + public static String getTranslationName(@Nullable ResourceLocation entityType) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getValue(entityType); + return entry == null ? null : entry.getName(); + } + + @Nullable + @SideOnly(Side.CLIENT) + public static Class getClassFromID(int entityID) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.registries.GameData.getEntityRegistry().getValue(entityID); + return entry == null ? null : entry.getEntityClass(); + } + + @Nullable + @SideOnly(Side.CLIENT) + public static Class getClassFromName(String p_192839_0_) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getValue(new ResourceLocation(p_192839_0_)); + return entry == null ? null : entry.getEntityClass(); + } + + public static int getID(Class cls) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.EntityRegistry.getEntry(cls); + return entry == null ? -1 : net.minecraftforge.registries.GameData.getEntityRegistry().getID(entry); + } + + @Nullable + public static Class getClass(ResourceLocation key) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getValue(key); + return entry == null ? null : entry.getEntityClass(); + } + + /** + * Creates a new entity of the given type in the given world. + * + * @return The newly created entity, or null if creation failed + */ + @Nullable + public static Entity newEntity(@Nullable Class clazz, World worldIn) + { + if (clazz == null) + { + return null; + } + else + { + try + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.EntityRegistry.getEntry(clazz); + if (entry != null) return entry.newInstance(worldIn); + return clazz.getConstructor(World.class).newInstance(worldIn); + } + catch (Exception exception) + { + exception.printStackTrace(); + return null; + } + } + } + + /** + * Creates a new entity with the given numeric networked entity type ID in the given world. + * + * @return The newly created entity, or null if creation failed + */ + @Nullable + @SideOnly(Side.CLIENT) + public static Entity createEntityByID(int entityID, World worldIn) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.registries.GameData.getEntityRegistry().getValue(entityID); + return entry == null ? null : entry.newInstance(worldIn); + } + + /** + * Creates a new entity of the given type in the given world. + * + * @return The newly created entity, or null if creation failed + */ + @Nullable + public static Entity createEntityByIDFromName(ResourceLocation name, World worldIn) + { + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getValue(name); + return entry == null ? null : entry.newInstance(worldIn); + } + + /** + * Creates a new entity from the given NBT data in the given world. + *

+ * If the entity fails to create, null will be returned and a warning will be logged. + * + * @return The newly created entity, or null + */ + @Nullable + public static Entity createEntityFromNBT(NBTTagCompound nbt, World worldIn) + { + ResourceLocation resourcelocation = new ResourceLocation(nbt.getString("id")); + Entity entity = createEntityByIDFromName(resourcelocation, worldIn); + + if (entity == null) + { + LOGGER.warn("Skipping Entity with id {}", (Object)resourcelocation); + } + else + { + try + { + entity.readFromNBT(nbt); + } + catch (Exception e) + { + net.minecraftforge.fml.common.FMLLog.log.error("An Entity {}({}) has thrown an exception during loading, its state cannot be restored. Report this to the mod author", + nbt.getString("id"), entity.getName(), e); + entity = null; + } + } + + return entity; + } + + /** + * Gets a collection of all known entity types. + * + * @return A collection of all known entity types. Do not modify this collection. + */ + public static Set getEntityNameList() + { + return Sets.union(net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getKeys(), EXTRA_NAMES); + } + + /** + * Checks if the given entity type matches the type of that entity, correctly handling behavior of players and + * lightning bolts. + * + * @return true if the type matches + */ + public static boolean isMatchingName(Entity entityIn, ResourceLocation entityName) + { + ResourceLocation resourcelocation = getKey(entityIn.getClass()); + + if (resourcelocation != null) + { + return resourcelocation.equals(entityName); + } + else if (entityIn instanceof EntityPlayer) + { + return PLAYER.equals(entityName); + } + else + { + return entityIn instanceof EntityLightningBolt ? LIGHTNING_BOLT.equals(entityName) : false; + } + } + + /** + * Checks if the given resource location matches a registered entity type, correctly handling behavior of players + * and lightning bols. + * + * @return true if the type is an entity. + */ + public static boolean isRegistered(ResourceLocation entityName) + { + return PLAYER.equals(entityName) || getEntityNameList().contains(entityName); + } + + public static String getValidTypeNames() + { + StringBuilder stringbuilder = new StringBuilder(); + + for (ResourceLocation resourcelocation : getEntityNameList()) + { + stringbuilder.append((Object)resourcelocation).append(", "); + } + + stringbuilder.append((Object)PLAYER); + return stringbuilder.toString(); + } + + public static void init() + { + register(1, "item", EntityItem.class, "Item"); + register(2, "xp_orb", EntityXPOrb.class, "XPOrb"); + register(3, "area_effect_cloud", EntityAreaEffectCloud.class, "AreaEffectCloud"); + register(4, "elder_guardian", EntityElderGuardian.class, "ElderGuardian"); + register(5, "wither_skeleton", EntityWitherSkeleton.class, "WitherSkeleton"); + register(6, "stray", EntityStray.class, "Stray"); + register(7, "egg", EntityEgg.class, "ThrownEgg"); + register(8, "leash_knot", EntityLeashKnot.class, "LeashKnot"); + register(9, "painting", EntityPainting.class, "Painting"); + register(10, "arrow", EntityTippedArrow.class, "Arrow"); + register(11, "snowball", EntitySnowball.class, "Snowball"); + register(12, "fireball", EntityLargeFireball.class, "Fireball"); + register(13, "small_fireball", EntitySmallFireball.class, "SmallFireball"); + register(14, "ender_pearl", EntityEnderPearl.class, "ThrownEnderpearl"); + register(15, "eye_of_ender_signal", EntityEnderEye.class, "EyeOfEnderSignal"); + register(16, "potion", EntityPotion.class, "ThrownPotion"); + register(17, "xp_bottle", EntityExpBottle.class, "ThrownExpBottle"); + register(18, "item_frame", EntityItemFrame.class, "ItemFrame"); + register(19, "wither_skull", EntityWitherSkull.class, "WitherSkull"); + register(20, "tnt", EntityTNTPrimed.class, "PrimedTnt"); + register(21, "falling_block", EntityFallingBlock.class, "FallingSand"); + register(22, "fireworks_rocket", EntityFireworkRocket.class, "FireworksRocketEntity"); + register(23, "husk", EntityHusk.class, "Husk"); + register(24, "spectral_arrow", EntitySpectralArrow.class, "SpectralArrow"); + register(25, "shulker_bullet", EntityShulkerBullet.class, "ShulkerBullet"); + register(26, "dragon_fireball", EntityDragonFireball.class, "DragonFireball"); + register(27, "zombie_villager", EntityZombieVillager.class, "ZombieVillager"); + register(28, "skeleton_horse", EntitySkeletonHorse.class, "SkeletonHorse"); + register(29, "zombie_horse", EntityZombieHorse.class, "ZombieHorse"); + register(30, "armor_stand", EntityArmorStand.class, "ArmorStand"); + register(31, "donkey", EntityDonkey.class, "Donkey"); + register(32, "mule", EntityMule.class, "Mule"); + register(33, "evocation_fangs", EntityEvokerFangs.class, "EvocationFangs"); + register(34, "evocation_illager", EntityEvoker.class, "EvocationIllager"); + register(35, "vex", EntityVex.class, "Vex"); + register(36, "vindication_illager", EntityVindicator.class, "VindicationIllager"); + register(37, "illusion_illager", EntityIllusionIllager.class, "IllusionIllager"); + register(40, "commandblock_minecart", EntityMinecartCommandBlock.class, EntityMinecart.Type.COMMAND_BLOCK.getName()); + register(41, "boat", EntityBoat.class, "Boat"); + register(42, "minecart", EntityMinecartEmpty.class, EntityMinecart.Type.RIDEABLE.getName()); + register(43, "chest_minecart", EntityMinecartChest.class, EntityMinecart.Type.CHEST.getName()); + register(44, "furnace_minecart", EntityMinecartFurnace.class, EntityMinecart.Type.FURNACE.getName()); + register(45, "tnt_minecart", EntityMinecartTNT.class, EntityMinecart.Type.TNT.getName()); + register(46, "hopper_minecart", EntityMinecartHopper.class, EntityMinecart.Type.HOPPER.getName()); + register(47, "spawner_minecart", EntityMinecartMobSpawner.class, EntityMinecart.Type.SPAWNER.getName()); + register(50, "creeper", EntityCreeper.class, "Creeper"); + register(51, "skeleton", EntitySkeleton.class, "Skeleton"); + register(52, "spider", EntitySpider.class, "Spider"); + register(53, "giant", EntityGiantZombie.class, "Giant"); + register(54, "zombie", EntityZombie.class, "Zombie"); + register(55, "slime", EntitySlime.class, "Slime"); + register(56, "ghast", EntityGhast.class, "Ghast"); + register(57, "zombie_pigman", EntityPigZombie.class, "PigZombie"); + register(58, "enderman", EntityEnderman.class, "Enderman"); + register(59, "cave_spider", EntityCaveSpider.class, "CaveSpider"); + register(60, "silverfish", EntitySilverfish.class, "Silverfish"); + register(61, "blaze", EntityBlaze.class, "Blaze"); + register(62, "magma_cube", EntityMagmaCube.class, "LavaSlime"); + register(63, "ender_dragon", EntityDragon.class, "EnderDragon"); + register(64, "wither", EntityWither.class, "WitherBoss"); + register(65, "bat", EntityBat.class, "Bat"); + register(66, "witch", EntityWitch.class, "Witch"); + register(67, "endermite", EntityEndermite.class, "Endermite"); + register(68, "guardian", EntityGuardian.class, "Guardian"); + register(69, "shulker", EntityShulker.class, "Shulker"); + register(90, "pig", EntityPig.class, "Pig"); + register(91, "sheep", EntitySheep.class, "Sheep"); + register(92, "cow", EntityCow.class, "Cow"); + register(93, "chicken", EntityChicken.class, "Chicken"); + register(94, "squid", EntitySquid.class, "Squid"); + register(95, "wolf", EntityWolf.class, "Wolf"); + register(96, "mooshroom", EntityMooshroom.class, "MushroomCow"); + register(97, "snowman", EntitySnowman.class, "SnowMan"); + register(98, "ocelot", EntityOcelot.class, "Ozelot"); + register(99, "villager_golem", EntityIronGolem.class, "VillagerGolem"); + register(100, "horse", EntityHorse.class, "Horse"); + register(101, "rabbit", EntityRabbit.class, "Rabbit"); + register(102, "polar_bear", EntityPolarBear.class, "PolarBear"); + register(103, "llama", EntityLlama.class, "Llama"); + register(104, "llama_spit", EntityLlamaSpit.class, "LlamaSpit"); + register(105, "parrot", EntityParrot.class, "Parrot"); + register(120, "villager", EntityVillager.class, "Villager"); + register(200, "ender_crystal", EntityEnderCrystal.class, "EnderCrystal"); + addSpawnInfo("bat", 4996656, 986895); + addSpawnInfo("blaze", 16167425, 16775294); + addSpawnInfo("cave_spider", 803406, 11013646); + addSpawnInfo("chicken", 10592673, 16711680); + addSpawnInfo("cow", 4470310, 10592673); + addSpawnInfo("creeper", 894731, 0); + addSpawnInfo("donkey", 5457209, 8811878); + addSpawnInfo("elder_guardian", 13552826, 7632531); + addSpawnInfo("enderman", 1447446, 0); + addSpawnInfo("endermite", 1447446, 7237230); + addSpawnInfo("evocation_illager", 9804699, 1973274); + addSpawnInfo("ghast", 16382457, 12369084); + addSpawnInfo("guardian", 5931634, 15826224); + addSpawnInfo("horse", 12623485, 15656192); + addSpawnInfo("husk", 7958625, 15125652); + addSpawnInfo("llama", 12623485, 10051392); + addSpawnInfo("magma_cube", 3407872, 16579584); + addSpawnInfo("mooshroom", 10489616, 12040119); + addSpawnInfo("mule", 1769984, 5321501); + addSpawnInfo("ocelot", 15720061, 5653556); + addSpawnInfo("parrot", 894731, 16711680); + addSpawnInfo("pig", 15771042, 14377823); + addSpawnInfo("polar_bear", 15921906, 9803152); + addSpawnInfo("rabbit", 10051392, 7555121); + addSpawnInfo("sheep", 15198183, 16758197); + addSpawnInfo("shulker", 9725844, 5060690); + addSpawnInfo("silverfish", 7237230, 3158064); + addSpawnInfo("skeleton", 12698049, 4802889); + addSpawnInfo("skeleton_horse", 6842447, 15066584); + addSpawnInfo("slime", 5349438, 8306542); + addSpawnInfo("spider", 3419431, 11013646); + addSpawnInfo("squid", 2243405, 7375001); + addSpawnInfo("stray", 6387319, 14543594); + addSpawnInfo("vex", 8032420, 15265265); + addSpawnInfo("villager", 5651507, 12422002); + addSpawnInfo("vindication_illager", 9804699, 2580065); + addSpawnInfo("witch", 3407872, 5349438); + addSpawnInfo("wither_skeleton", 1315860, 4672845); + addSpawnInfo("wolf", 14144467, 13545366); + addSpawnInfo("zombie", 44975, 7969893); + addSpawnInfo("zombie_horse", 3232308, 9945732); + addSpawnInfo("zombie_pigman", 15373203, 5009705); + addSpawnInfo("zombie_villager", 5651507, 7969893); + EXTRA_NAMES.add(LIGHTNING_BOLT); + } + + private static void register(int id, String name, Class clazz, String oldName) + { + try + { + clazz.getConstructor(World.class); + } + catch (NoSuchMethodException var5) + { + throw new RuntimeException("Invalid class " + clazz + " no constructor taking " + World.class.getName()); + } + + if ((clazz.getModifiers() & 1024) == 1024) + { + throw new RuntimeException("Invalid abstract class " + clazz); + } + else + { + ResourceLocation resourcelocation = new ResourceLocation(name); + net.minecraftforge.registries.GameData.registerEntity(id, resourcelocation, clazz, oldName); + } + } + + protected static EntityList.EntityEggInfo addSpawnInfo(String id, int primaryColor, int secondaryColor) + { + ResourceLocation resourcelocation = new ResourceLocation(id); + EntityList.EntityEggInfo egg = new EntityList.EntityEggInfo(resourcelocation, primaryColor, secondaryColor); + net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getValue(resourcelocation); + if (entry != null) entry.setEgg(egg); + return (EntityList.EntityEggInfo)ENTITY_EGGS.put(resourcelocation, egg); + } + + public static class EntityEggInfo + { + /** The entityID of the spawned mob */ + public final ResourceLocation spawnedID; + /** Base color of the egg */ + public final int primaryColor; + /** Color of the egg spots */ + public final int secondaryColor; + public final StatBase killEntityStat; + public final StatBase entityKilledByStat; + + public EntityEggInfo(ResourceLocation idIn, int primaryColorIn, int secondaryColorIn) + { + this.spawnedID = idIn; + this.primaryColor = primaryColorIn; + this.secondaryColor = secondaryColorIn; + this.killEntityStat = StatList.getStatKillEntity(this); + this.entityKilledByStat = StatList.getStatEntityKilledBy(this); + } + + // Forge start + public EntityEggInfo(ResourceLocation id, int primaryColor, int secondaryColor, StatBase killEntityStatistic, StatBase entityKilledByStatistic) + { + this.spawnedID = id; + this.primaryColor = primaryColor; + this.secondaryColor = secondaryColor; + this.killEntityStat = killEntityStatistic; + this.entityKilledByStat = entityKilledByStatistic; + } + // Forge end + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLiving.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLiving.java new file mode 100644 index 0000000..1cc98ea --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLiving.java @@ -0,0 +1,1612 @@ +package net.minecraft.entity; + +import com.google.common.collect.Maps; +import java.util.Arrays; +import java.util.Map; +import java.util.Random; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.ai.EntityJumpHelper; +import net.minecraft.entity.ai.EntityLookHelper; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.entity.ai.EntitySenses; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketEntityAttach; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityLiving extends EntityLivingBase +{ + /** First bit used for AI disabling, second bit used for marking entity as left handed */ + private static final DataParameter AI_FLAGS = EntityDataManager.createKey(EntityLiving.class, DataSerializers.BYTE); + /** Number of ticks since this EntityLiving last produced its sound */ + public int livingSoundTime; + /** The experience points the Entity gives. */ + protected int experienceValue; + private final EntityLookHelper lookHelper; + protected EntityMoveHelper moveHelper; + /** Entity jumping helper */ + protected EntityJumpHelper jumpHelper; + private final EntityBodyHelper bodyHelper; + protected PathNavigate navigator; + /** Active AI tasks (moving, looking, attack the target selected by {@link #targetTasks}, etc.) */ + public final EntityAITasks tasks; + /** (Usually one-shot) tasks used to select an attack target */ + public final EntityAITasks targetTasks; + /** The active target the Task system uses for tracking */ + private EntityLivingBase attackTarget; + private final EntitySenses senses; + private final NonNullList inventoryHands = NonNullList.withSize(2, ItemStack.EMPTY); + /** Chances for equipment in hands dropping when this entity dies. */ + protected float[] inventoryHandsDropChances = new float[2]; + private final NonNullList inventoryArmor = NonNullList.withSize(4, ItemStack.EMPTY); + /** Chances for armor dropping when this entity dies. */ + protected float[] inventoryArmorDropChances = new float[4]; + /** Whether this entity can pick up items from the ground. */ + private boolean canPickUpLoot; + /** Whether this entity should NOT despawn. */ + private boolean persistenceRequired; + private final Map mapPathPriority = Maps.newEnumMap(PathNodeType.class); + private ResourceLocation deathLootTable; + private long deathLootTableSeed; + private boolean isLeashed; + private Entity leashHolder; + private NBTTagCompound leashNBTTag; + + public EntityLiving(World worldIn) + { + super(worldIn); + this.tasks = new EntityAITasks(worldIn != null && worldIn.profiler != null ? worldIn.profiler : null); + this.targetTasks = new EntityAITasks(worldIn != null && worldIn.profiler != null ? worldIn.profiler : null); + this.lookHelper = new EntityLookHelper(this); + this.moveHelper = new EntityMoveHelper(this); + this.jumpHelper = new EntityJumpHelper(this); + this.bodyHelper = this.createBodyHelper(); + this.navigator = this.createNavigator(worldIn); + this.senses = new EntitySenses(this); + Arrays.fill(this.inventoryArmorDropChances, 0.085F); + Arrays.fill(this.inventoryHandsDropChances, 0.085F); + + if (worldIn != null && !worldIn.isRemote) + { + this.initEntityAI(); + } + } + + protected void initEntityAI() + { + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16.0D); + } + + /** + * Returns new PathNavigateGround instance + */ + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateGround(this, worldIn); + } + + public float getPathPriority(PathNodeType nodeType) + { + Float f = this.mapPathPriority.get(nodeType); + return f == null ? nodeType.getPriority() : f.floatValue(); + } + + public void setPathPriority(PathNodeType nodeType, float priority) + { + this.mapPathPriority.put(nodeType, Float.valueOf(priority)); + } + + protected EntityBodyHelper createBodyHelper() + { + return new EntityBodyHelper(this); + } + + public EntityLookHelper getLookHelper() + { + return this.lookHelper; + } + + public EntityMoveHelper getMoveHelper() + { + return this.moveHelper; + } + + public EntityJumpHelper getJumpHelper() + { + return this.jumpHelper; + } + + public PathNavigate getNavigator() + { + return this.navigator; + } + + /** + * returns the EntitySenses Object for the EntityLiving + */ + public EntitySenses getEntitySenses() + { + return this.senses; + } + + /** + * Gets the active target the Task system uses for tracking + */ + @Nullable + public EntityLivingBase getAttackTarget() + { + return this.attackTarget; + } + + /** + * Sets the active target the Task system uses for tracking + */ + public void setAttackTarget(@Nullable EntityLivingBase entitylivingbaseIn) + { + this.attackTarget = entitylivingbaseIn; + net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, entitylivingbaseIn); + } + + /** + * Returns true if this entity can attack entities of the specified class. + */ + public boolean canAttackClass(Class cls) + { + return cls != EntityGhast.class; + } + + /** + * This function applies the benefits of growing back wool and faster growing up to the acting entity. (This + * function is used in the AIEatGrass) + */ + public void eatGrassBonus() + { + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(AI_FLAGS, Byte.valueOf((byte)0)); + } + + /** + * Get number of ticks, at least during which the living entity will be silent. + */ + public int getTalkInterval() + { + return 80; + } + + /** + * Plays living's sound at its position + */ + public void playLivingSound() + { + SoundEvent soundevent = this.getAmbientSound(); + + if (soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), this.getSoundPitch()); + } + } + + /** + * Gets called every tick from main Entity class + */ + public void onEntityUpdate() + { + super.onEntityUpdate(); + this.world.profiler.startSection("mobBaseTick"); + + if (this.isEntityAlive() && this.rand.nextInt(1000) < this.livingSoundTime++) + { + this.applyEntityAI(); + this.playLivingSound(); + } + + this.world.profiler.endSection(); + } + + protected void playHurtSound(DamageSource source) + { + this.applyEntityAI(); + super.playHurtSound(source); + } + + private void applyEntityAI() + { + this.livingSoundTime = -this.getTalkInterval(); + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + if (this.experienceValue > 0) + { + int i = this.experienceValue; + + for (int j = 0; j < this.inventoryArmor.size(); ++j) + { + if (!((ItemStack)this.inventoryArmor.get(j)).isEmpty() && this.inventoryArmorDropChances[j] <= 1.0F) + { + i += 1 + this.rand.nextInt(3); + } + } + + for (int k = 0; k < this.inventoryHands.size(); ++k) + { + if (!((ItemStack)this.inventoryHands.get(k)).isEmpty() && this.inventoryHandsDropChances[k] <= 1.0F) + { + i += 1 + this.rand.nextInt(3); + } + } + + return i; + } + else + { + return this.experienceValue; + } + } + + /** + * Spawns an explosion particle around the Entity's location + */ + public void spawnExplosionParticle() + { + if (this.world.isRemote) + { + for (int i = 0; i < 20; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + double d3 = 10.0D; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_NORMAL, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width - d0 * 10.0D, this.posY + (double)(this.rand.nextFloat() * this.height) - d1 * 10.0D, this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width - d2 * 10.0D, d0, d1, d2); + } + } + else + { + this.world.setEntityState(this, (byte)20); + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 20) + { + this.spawnExplosionParticle(); + } + else + { + super.handleStatusUpdate(id); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote) + { + this.updateLeashedState(); + + if (this.ticksExisted % 5 == 0) + { + boolean flag = !(this.getControllingPassenger() instanceof EntityLiving); + boolean flag1 = !(this.getRidingEntity() instanceof EntityBoat); + this.tasks.setControlFlag(1, flag); + this.tasks.setControlFlag(4, flag && flag1); + this.tasks.setControlFlag(2, flag); + } + } + } + + protected float updateDistance(float p_110146_1_, float p_110146_2_) + { + this.bodyHelper.updateRenderAngles(); + return p_110146_2_; + } + + @Nullable + protected SoundEvent getAmbientSound() + { + return null; + } + + @Nullable + protected Item getDropItem() + { + return null; + } + + /** + * Drop 0-2 items of this living's type + */ + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + Item item = this.getDropItem(); + + if (item != null) + { + int i = this.rand.nextInt(3); + + if (lootingModifier > 0) + { + i += this.rand.nextInt(lootingModifier + 1); + } + + for (int j = 0; j < i; ++j) + { + this.dropItem(item, 1); + } + } + } + + public static void registerFixesMob(DataFixer fixer, Class name) + { + fixer.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(name, new String[] {"ArmorItems", "HandItems"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("CanPickUpLoot", this.canPickUpLoot()); + compound.setBoolean("PersistenceRequired", this.persistenceRequired); + NBTTagList nbttaglist = new NBTTagList(); + + for (ItemStack itemstack : this.inventoryArmor) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + if (!itemstack.isEmpty()) + { + itemstack.writeToNBT(nbttagcompound); + } + + nbttaglist.appendTag(nbttagcompound); + } + + compound.setTag("ArmorItems", nbttaglist); + NBTTagList nbttaglist1 = new NBTTagList(); + + for (ItemStack itemstack1 : this.inventoryHands) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + if (!itemstack1.isEmpty()) + { + itemstack1.writeToNBT(nbttagcompound1); + } + + nbttaglist1.appendTag(nbttagcompound1); + } + + compound.setTag("HandItems", nbttaglist1); + NBTTagList nbttaglist2 = new NBTTagList(); + + for (float f : this.inventoryArmorDropChances) + { + nbttaglist2.appendTag(new NBTTagFloat(f)); + } + + compound.setTag("ArmorDropChances", nbttaglist2); + NBTTagList nbttaglist3 = new NBTTagList(); + + for (float f1 : this.inventoryHandsDropChances) + { + nbttaglist3.appendTag(new NBTTagFloat(f1)); + } + + compound.setTag("HandDropChances", nbttaglist3); + compound.setBoolean("Leashed", this.isLeashed); + + if (this.leashHolder != null) + { + NBTTagCompound nbttagcompound2 = new NBTTagCompound(); + + if (this.leashHolder instanceof EntityLivingBase) + { + UUID uuid = this.leashHolder.getUniqueID(); + nbttagcompound2.setUniqueId("UUID", uuid); + } + else if (this.leashHolder instanceof EntityHanging) + { + BlockPos blockpos = ((EntityHanging)this.leashHolder).getHangingPosition(); + nbttagcompound2.setInteger("X", blockpos.getX()); + nbttagcompound2.setInteger("Y", blockpos.getY()); + nbttagcompound2.setInteger("Z", blockpos.getZ()); + } + + compound.setTag("Leash", nbttagcompound2); + } + + compound.setBoolean("LeftHanded", this.isLeftHanded()); + + if (this.deathLootTable != null) + { + compound.setString("DeathLootTable", this.deathLootTable.toString()); + + if (this.deathLootTableSeed != 0L) + { + compound.setLong("DeathLootTableSeed", this.deathLootTableSeed); + } + } + + if (this.isAIDisabled()) + { + compound.setBoolean("NoAI", this.isAIDisabled()); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("CanPickUpLoot", 1)) + { + this.setCanPickUpLoot(compound.getBoolean("CanPickUpLoot")); + } + + this.persistenceRequired = compound.getBoolean("PersistenceRequired"); + + if (compound.hasKey("ArmorItems", 9)) + { + NBTTagList nbttaglist = compound.getTagList("ArmorItems", 10); + + for (int i = 0; i < this.inventoryArmor.size(); ++i) + { + this.inventoryArmor.set(i, new ItemStack(nbttaglist.getCompoundTagAt(i))); + } + } + + if (compound.hasKey("HandItems", 9)) + { + NBTTagList nbttaglist1 = compound.getTagList("HandItems", 10); + + for (int j = 0; j < this.inventoryHands.size(); ++j) + { + this.inventoryHands.set(j, new ItemStack(nbttaglist1.getCompoundTagAt(j))); + } + } + + if (compound.hasKey("ArmorDropChances", 9)) + { + NBTTagList nbttaglist2 = compound.getTagList("ArmorDropChances", 5); + + for (int k = 0; k < nbttaglist2.tagCount(); ++k) + { + this.inventoryArmorDropChances[k] = nbttaglist2.getFloatAt(k); + } + } + + if (compound.hasKey("HandDropChances", 9)) + { + NBTTagList nbttaglist3 = compound.getTagList("HandDropChances", 5); + + for (int l = 0; l < nbttaglist3.tagCount(); ++l) + { + this.inventoryHandsDropChances[l] = nbttaglist3.getFloatAt(l); + } + } + + this.isLeashed = compound.getBoolean("Leashed"); + + if (this.isLeashed && compound.hasKey("Leash", 10)) + { + this.leashNBTTag = compound.getCompoundTag("Leash"); + } + + this.setLeftHanded(compound.getBoolean("LeftHanded")); + + if (compound.hasKey("DeathLootTable", 8)) + { + this.deathLootTable = new ResourceLocation(compound.getString("DeathLootTable")); + this.deathLootTableSeed = compound.getLong("DeathLootTableSeed"); + } + + this.setNoAI(compound.getBoolean("NoAI")); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return null; + } + + /** + * drops the loot of this entity upon death + */ + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + ResourceLocation resourcelocation = this.deathLootTable; + + if (resourcelocation == null) + { + resourcelocation = this.getLootTable(); + } + + if (resourcelocation != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(resourcelocation); + this.deathLootTable = null; + LootContext.Builder lootcontext$builder = (new LootContext.Builder((WorldServer)this.world)).withLootedEntity(this).withDamageSource(source); + + if (wasRecentlyHit && this.attackingPlayer != null) + { + lootcontext$builder = lootcontext$builder.withPlayer(this.attackingPlayer).withLuck(this.attackingPlayer.getLuck()); + } + + for (ItemStack itemstack : loottable.generateLootForPools(this.deathLootTableSeed == 0L ? this.rand : new Random(this.deathLootTableSeed), lootcontext$builder.build())) + { + this.entityDropItem(itemstack, 0.0F); + } + + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + else + { + super.dropLoot(wasRecentlyHit, lootingModifier, source); + } + } + + public void setMoveForward(float amount) + { + this.moveForward = amount; + } + + public void setMoveVertical(float amount) + { + this.moveVertical = amount; + } + + public void setMoveStrafing(float amount) + { + this.moveStrafing = amount; + } + + /** + * set the movespeed used for the new AI system + */ + public void setAIMoveSpeed(float speedIn) + { + super.setAIMoveSpeed(speedIn); + this.setMoveForward(speedIn); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + this.world.profiler.startSection("looting"); + + if (!this.world.isRemote && this.canPickUpLoot() && !this.dead && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this)) + { + for (EntityItem entityitem : this.world.getEntitiesWithinAABB(EntityItem.class, this.getEntityBoundingBox().grow(1.0D, 0.0D, 1.0D))) + { + if (!entityitem.isDead && !entityitem.getItem().isEmpty() && !entityitem.cannotPickup()) + { + this.updateEquipmentIfNeeded(entityitem); + } + } + } + + this.world.profiler.endSection(); + } + + /** + * Tests if this entity should pickup a weapon or an armor. Entity drops current weapon or armor if the new one is + * better. + */ + protected void updateEquipmentIfNeeded(EntityItem itemEntity) + { + ItemStack itemstack = itemEntity.getItem(); + EntityEquipmentSlot entityequipmentslot = getSlotForItemStack(itemstack); + boolean flag = true; + ItemStack itemstack1 = this.getItemStackFromSlot(entityequipmentslot); + + if (!itemstack1.isEmpty()) + { + if (entityequipmentslot.getSlotType() == EntityEquipmentSlot.Type.HAND) + { + if (itemstack.getItem() instanceof ItemSword && !(itemstack1.getItem() instanceof ItemSword)) + { + flag = true; + } + else if (itemstack.getItem() instanceof ItemSword && itemstack1.getItem() instanceof ItemSword) + { + ItemSword itemsword = (ItemSword)itemstack.getItem(); + ItemSword itemsword1 = (ItemSword)itemstack1.getItem(); + + if (itemsword.getAttackDamage() == itemsword1.getAttackDamage()) + { + flag = itemstack.getMetadata() > itemstack1.getMetadata() || itemstack.hasTagCompound() && !itemstack1.hasTagCompound(); + } + else + { + flag = itemsword.getAttackDamage() > itemsword1.getAttackDamage(); + } + } + else if (itemstack.getItem() instanceof ItemBow && itemstack1.getItem() instanceof ItemBow) + { + flag = itemstack.hasTagCompound() && !itemstack1.hasTagCompound(); + } + else + { + flag = false; + } + } + else if (itemstack.getItem() instanceof ItemArmor && !(itemstack1.getItem() instanceof ItemArmor)) + { + flag = true; + } + else if (itemstack.getItem() instanceof ItemArmor && itemstack1.getItem() instanceof ItemArmor && !EnchantmentHelper.hasBindingCurse(itemstack1)) + { + ItemArmor itemarmor = (ItemArmor)itemstack.getItem(); + ItemArmor itemarmor1 = (ItemArmor)itemstack1.getItem(); + + if (itemarmor.damageReduceAmount == itemarmor1.damageReduceAmount) + { + flag = itemstack.getMetadata() > itemstack1.getMetadata() || itemstack.hasTagCompound() && !itemstack1.hasTagCompound(); + } + else + { + flag = itemarmor.damageReduceAmount > itemarmor1.damageReduceAmount; + } + } + else + { + flag = false; + } + } + + if (flag && this.canEquipItem(itemstack)) + { + double d0; + + switch (entityequipmentslot.getSlotType()) + { + case HAND: + d0 = (double)this.inventoryHandsDropChances[entityequipmentslot.getIndex()]; + break; + case ARMOR: + d0 = (double)this.inventoryArmorDropChances[entityequipmentslot.getIndex()]; + break; + default: + d0 = 0.0D; + } + + if (!itemstack1.isEmpty() && (double)(this.rand.nextFloat() - 0.1F) < d0) + { + this.entityDropItem(itemstack1, 0.0F); + } + + this.setItemStackToSlot(entityequipmentslot, itemstack); + + switch (entityequipmentslot.getSlotType()) + { + case HAND: + this.inventoryHandsDropChances[entityequipmentslot.getIndex()] = 2.0F; + break; + case ARMOR: + this.inventoryArmorDropChances[entityequipmentslot.getIndex()] = 2.0F; + } + + this.persistenceRequired = true; + this.onItemPickup(itemEntity, itemstack.getCount()); + itemEntity.setDead(); + } + } + + protected boolean canEquipItem(ItemStack stack) + { + return true; + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return true; + } + + /** + * Makes the entity despawn if requirements are reached + */ + protected void despawnEntity() + { + net.minecraftforge.fml.common.eventhandler.Event.Result result = null; + if (this.persistenceRequired) + { + this.idleTime = 0; + } + else if ((this.idleTime & 0x1F) == 0x1F && (result = net.minecraftforge.event.ForgeEventFactory.canEntityDespawn(this)) != net.minecraftforge.fml.common.eventhandler.Event.Result.DEFAULT) + { + if (result == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + { + this.idleTime = 0; + } + else + { + this.setDead(); + } + } + else + { + Entity entity = this.world.getClosestPlayerToEntity(this, -1.0D); + + if (entity != null) + { + double d0 = entity.posX - this.posX; + double d1 = entity.posY - this.posY; + double d2 = entity.posZ - this.posZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + if (this.canDespawn() && d3 > 16384.0D) + { + this.setDead(); + } + + if (this.idleTime > 600 && this.rand.nextInt(800) == 0 && d3 > 1024.0D && this.canDespawn()) + { + this.setDead(); + } + else if (d3 < 1024.0D) + { + this.idleTime = 0; + } + } + } + } + + protected final void updateEntityActionState() + { + ++this.idleTime; + this.world.profiler.startSection("checkDespawn"); + this.despawnEntity(); + this.world.profiler.endSection(); + this.world.profiler.startSection("sensing"); + this.senses.clearSensingCache(); + this.world.profiler.endSection(); + this.world.profiler.startSection("targetSelector"); + this.targetTasks.onUpdateTasks(); + this.world.profiler.endSection(); + this.world.profiler.startSection("goalSelector"); + this.tasks.onUpdateTasks(); + this.world.profiler.endSection(); + this.world.profiler.startSection("navigation"); + this.navigator.onUpdateNavigation(); + this.world.profiler.endSection(); + this.world.profiler.startSection("mob tick"); + this.updateAITasks(); + this.world.profiler.endSection(); + + if (this.isRiding() && this.getRidingEntity() instanceof EntityLiving) + { + EntityLiving entityliving = (EntityLiving)this.getRidingEntity(); + entityliving.getNavigator().setPath(this.getNavigator().getPath(), 1.5D); + entityliving.getMoveHelper().read(this.getMoveHelper()); + } + + this.world.profiler.startSection("controls"); + this.world.profiler.startSection("move"); + this.moveHelper.onUpdateMoveHelper(); + this.world.profiler.endStartSection("look"); + this.lookHelper.onUpdateLook(); + this.world.profiler.endStartSection("jump"); + this.jumpHelper.doJump(); + this.world.profiler.endSection(); + this.world.profiler.endSection(); + } + + protected void updateAITasks() + { + } + + /** + * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently + * use in wolves. + */ + public int getVerticalFaceSpeed() + { + return 40; + } + + public int getHorizontalFaceSpeed() + { + return 10; + } + + /** + * Changes pitch and yaw so that the entity calling the function is facing the entity provided as an argument. + */ + public void faceEntity(Entity entityIn, float maxYawIncrease, float maxPitchIncrease) + { + double d0 = entityIn.posX - this.posX; + double d2 = entityIn.posZ - this.posZ; + double d1; + + if (entityIn instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)entityIn; + d1 = entitylivingbase.posY + (double)entitylivingbase.getEyeHeight() - (this.posY + (double)this.getEyeHeight()); + } + else + { + d1 = (entityIn.getEntityBoundingBox().minY + entityIn.getEntityBoundingBox().maxY) / 2.0D - (this.posY + (double)this.getEyeHeight()); + } + + double d3 = (double)MathHelper.sqrt(d0 * d0 + d2 * d2); + float f = (float)(MathHelper.atan2(d2, d0) * (180D / Math.PI)) - 90.0F; + float f1 = (float)(-(MathHelper.atan2(d1, d3) * (180D / Math.PI))); + this.rotationPitch = this.updateRotation(this.rotationPitch, f1, maxPitchIncrease); + this.rotationYaw = this.updateRotation(this.rotationYaw, f, maxYawIncrease); + } + + /** + * Arguments: current rotation, intended rotation, max increment. + */ + private float updateRotation(float angle, float targetAngle, float maxIncrease) + { + float f = MathHelper.wrapDegrees(targetAngle - angle); + + if (f > maxIncrease) + { + f = maxIncrease; + } + + if (f < -maxIncrease) + { + f = -maxIncrease; + } + + return angle + f; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + IBlockState iblockstate = this.world.getBlockState((new BlockPos(this)).down()); + return iblockstate.canEntitySpawn(this); + } + + /** + * Checks that the entity is not colliding with any blocks / liquids + */ + public boolean isNotColliding() + { + return !this.world.containsAnyLiquid(this.getEntityBoundingBox()) && this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this); + } + + /** + * Returns render size modifier + */ + public float getRenderSizeModifier() + { + return 1.0F; + } + + /** + * Will return how many at most can spawn in a chunk at once. + */ + public int getMaxSpawnedInChunk() + { + return 4; + } + + /** + * The maximum height from where the entity is alowed to jump (used in pathfinder) + */ + public int getMaxFallHeight() + { + if (this.getAttackTarget() == null) + { + return 3; + } + else + { + int i = (int)(this.getHealth() - this.getMaxHealth() * 0.33F); + i = i - (3 - this.world.getDifficulty().getDifficultyId()) * 4; + + if (i < 0) + { + i = 0; + } + + return i + 3; + } + } + + public Iterable getHeldEquipment() + { + return this.inventoryHands; + } + + public Iterable getArmorInventoryList() + { + return this.inventoryArmor; + } + + public ItemStack getItemStackFromSlot(EntityEquipmentSlot slotIn) + { + switch (slotIn.getSlotType()) + { + case HAND: + return this.inventoryHands.get(slotIn.getIndex()); + case ARMOR: + return this.inventoryArmor.get(slotIn.getIndex()); + default: + return ItemStack.EMPTY; + } + } + + public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) + { + switch (slotIn.getSlotType()) + { + case HAND: + this.inventoryHands.set(slotIn.getIndex(), stack); + break; + case ARMOR: + this.inventoryArmor.set(slotIn.getIndex(), stack); + } + } + + /** + * Drop the equipment for this entity. + */ + protected void dropEquipment(boolean wasRecentlyHit, int lootingModifier) + { + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + ItemStack itemstack = this.getItemStackFromSlot(entityequipmentslot); + double d0; + + switch (entityequipmentslot.getSlotType()) + { + case HAND: + d0 = (double)this.inventoryHandsDropChances[entityequipmentslot.getIndex()]; + break; + case ARMOR: + d0 = (double)this.inventoryArmorDropChances[entityequipmentslot.getIndex()]; + break; + default: + d0 = 0.0D; + } + + boolean flag = d0 > 1.0D; + + if (!itemstack.isEmpty() && !EnchantmentHelper.hasVanishingCurse(itemstack) && (wasRecentlyHit || flag) && (double)(this.rand.nextFloat() - (float)lootingModifier * 0.01F) < d0) + { + if (!flag && itemstack.isItemStackDamageable()) + { + itemstack.setItemDamage(itemstack.getMaxDamage() - this.rand.nextInt(1 + this.rand.nextInt(Math.max(itemstack.getMaxDamage() - 3, 1)))); + } + + this.entityDropItem(itemstack, 0.0F); + } + } + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + if (this.rand.nextFloat() < 0.15F * difficulty.getClampedAdditionalDifficulty()) + { + int i = this.rand.nextInt(2); + float f = this.world.getDifficulty() == EnumDifficulty.HARD ? 0.1F : 0.25F; + + if (this.rand.nextFloat() < 0.095F) + { + ++i; + } + + if (this.rand.nextFloat() < 0.095F) + { + ++i; + } + + if (this.rand.nextFloat() < 0.095F) + { + ++i; + } + + boolean flag = true; + + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + if (entityequipmentslot.getSlotType() == EntityEquipmentSlot.Type.ARMOR) + { + ItemStack itemstack = this.getItemStackFromSlot(entityequipmentslot); + + if (!flag && this.rand.nextFloat() < f) + { + break; + } + + flag = false; + + if (itemstack.isEmpty()) + { + Item item = getArmorByChance(entityequipmentslot, i); + + if (item != null) + { + this.setItemStackToSlot(entityequipmentslot, new ItemStack(item)); + } + } + } + } + } + } + + public static EntityEquipmentSlot getSlotForItemStack(ItemStack stack) + { + final EntityEquipmentSlot slot = stack.getItem().getEquipmentSlot(stack); + if (slot != null) return slot; // FORGE: Allow modders to set a non-default equipment slot for a stack; e.g. a non-armor chestplate-slot item + if (stack.getItem() != Item.getItemFromBlock(Blocks.PUMPKIN) && stack.getItem() != Items.SKULL) + { + if (stack.getItem() instanceof ItemArmor) + { + return ((ItemArmor)stack.getItem()).armorType; + } + else if (stack.getItem() == Items.ELYTRA) + { + return EntityEquipmentSlot.CHEST; + } + else + { + return stack.getItem().isShield(stack, null) ? EntityEquipmentSlot.OFFHAND : EntityEquipmentSlot.MAINHAND; + } + } + else + { + return EntityEquipmentSlot.HEAD; + } + } + + @Nullable + public static Item getArmorByChance(EntityEquipmentSlot slotIn, int chance) + { + switch (slotIn) + { + case HEAD: + + if (chance == 0) + { + return Items.LEATHER_HELMET; + } + else if (chance == 1) + { + return Items.GOLDEN_HELMET; + } + else if (chance == 2) + { + return Items.CHAINMAIL_HELMET; + } + else if (chance == 3) + { + return Items.IRON_HELMET; + } + else if (chance == 4) + { + return Items.DIAMOND_HELMET; + } + + case CHEST: + + if (chance == 0) + { + return Items.LEATHER_CHESTPLATE; + } + else if (chance == 1) + { + return Items.GOLDEN_CHESTPLATE; + } + else if (chance == 2) + { + return Items.CHAINMAIL_CHESTPLATE; + } + else if (chance == 3) + { + return Items.IRON_CHESTPLATE; + } + else if (chance == 4) + { + return Items.DIAMOND_CHESTPLATE; + } + + case LEGS: + + if (chance == 0) + { + return Items.LEATHER_LEGGINGS; + } + else if (chance == 1) + { + return Items.GOLDEN_LEGGINGS; + } + else if (chance == 2) + { + return Items.CHAINMAIL_LEGGINGS; + } + else if (chance == 3) + { + return Items.IRON_LEGGINGS; + } + else if (chance == 4) + { + return Items.DIAMOND_LEGGINGS; + } + + case FEET: + + if (chance == 0) + { + return Items.LEATHER_BOOTS; + } + else if (chance == 1) + { + return Items.GOLDEN_BOOTS; + } + else if (chance == 2) + { + return Items.CHAINMAIL_BOOTS; + } + else if (chance == 3) + { + return Items.IRON_BOOTS; + } + else if (chance == 4) + { + return Items.DIAMOND_BOOTS; + } + + default: + return null; + } + } + + /** + * Enchants Entity's current equipments based on given DifficultyInstance + */ + protected void setEnchantmentBasedOnDifficulty(DifficultyInstance difficulty) + { + float f = difficulty.getClampedAdditionalDifficulty(); + + if (!this.getHeldItemMainhand().isEmpty() && this.rand.nextFloat() < 0.25F * f) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, EnchantmentHelper.addRandomEnchantment(this.rand, this.getHeldItemMainhand(), (int)(5.0F + f * (float)this.rand.nextInt(18)), false)); + } + + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + if (entityequipmentslot.getSlotType() == EntityEquipmentSlot.Type.ARMOR) + { + ItemStack itemstack = this.getItemStackFromSlot(entityequipmentslot); + + if (!itemstack.isEmpty() && this.rand.nextFloat() < 0.5F * f) + { + this.setItemStackToSlot(entityequipmentslot, EnchantmentHelper.addRandomEnchantment(this.rand, itemstack, (int)(5.0F + f * (float)this.rand.nextInt(18)), false)); + } + } + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextGaussian() * 0.05D, 1)); + + if (this.rand.nextFloat() < 0.05F) + { + this.setLeftHanded(true); + } + else + { + this.setLeftHanded(false); + } + + return livingdata; + } + + /** + * returns true if all the conditions for steering the entity are met. For pigs, this is true if it is being ridden + * by a player and the player is holding a carrot-on-a-stick + */ + public boolean canBeSteered() + { + return false; + } + + /** + * Enable the Entity persistence + */ + public void enablePersistence() + { + this.persistenceRequired = true; + } + + public void setDropChance(EntityEquipmentSlot slotIn, float chance) + { + switch (slotIn.getSlotType()) + { + case HAND: + this.inventoryHandsDropChances[slotIn.getIndex()] = chance; + break; + case ARMOR: + this.inventoryArmorDropChances[slotIn.getIndex()] = chance; + } + } + + public boolean canPickUpLoot() + { + return this.canPickUpLoot; + } + + public void setCanPickUpLoot(boolean canPickup) + { + this.canPickUpLoot = canPickup; + } + + /** + * Return the persistenceRequired field (whether this entity is allowed to naturally despawn) + */ + public boolean isNoDespawnRequired() + { + return this.persistenceRequired; + } + + public final boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (this.getLeashed() && this.getLeashHolder() == player) + { + this.clearLeashed(true, !player.capabilities.isCreativeMode); + return true; + } + else + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.LEAD && this.canBeLeashedTo(player)) + { + this.setLeashHolder(player, true); + itemstack.shrink(1); + return true; + } + else + { + return this.processInteract(player, hand) ? true : super.processInitialInteract(player, hand); + } + } + } + + protected boolean processInteract(EntityPlayer player, EnumHand hand) + { + return false; + } + + /** + * Applies logic related to leashes, for example dragging the entity or breaking the leash. + */ + protected void updateLeashedState() + { + if (this.leashNBTTag != null) + { + this.recreateLeash(); + } + + if (this.isLeashed) + { + if (!this.isEntityAlive()) + { + this.clearLeashed(true, true); + } + + if (this.leashHolder == null || this.leashHolder.isDead) + { + this.clearLeashed(true, true); + } + } + } + + /** + * Removes the leash from this entity + */ + public void clearLeashed(boolean sendPacket, boolean dropLead) + { + if (this.isLeashed) + { + this.isLeashed = false; + this.leashHolder = null; + + if (!this.world.isRemote && dropLead) + { + this.dropItem(Items.LEAD, 1); + } + + if (!this.world.isRemote && sendPacket && this.world instanceof WorldServer) + { + ((WorldServer)this.world).getEntityTracker().sendToTracking(this, new SPacketEntityAttach(this, (Entity)null)); + } + } + } + + public boolean canBeLeashedTo(EntityPlayer player) + { + return !this.getLeashed() && !(this instanceof IMob); + } + + public boolean getLeashed() + { + return this.isLeashed; + } + + public Entity getLeashHolder() + { + return this.leashHolder; + } + + /** + * Sets the entity to be leashed to. + */ + public void setLeashHolder(Entity entityIn, boolean sendAttachNotification) + { + this.isLeashed = true; + this.leashHolder = entityIn; + + if (!this.world.isRemote && sendAttachNotification && this.world instanceof WorldServer) + { + ((WorldServer)this.world).getEntityTracker().sendToTracking(this, new SPacketEntityAttach(this, this.leashHolder)); + } + + if (this.isRiding()) + { + this.dismountRidingEntity(); + } + } + + public boolean startRiding(Entity entityIn, boolean force) + { + boolean flag = super.startRiding(entityIn, force); + + if (flag && this.getLeashed()) + { + this.clearLeashed(true, true); + } + + return flag; + } + + private void recreateLeash() + { + if (this.isLeashed && this.leashNBTTag != null) + { + if (this.leashNBTTag.hasUniqueId("UUID")) + { + UUID uuid = this.leashNBTTag.getUniqueId("UUID"); + + for (EntityLivingBase entitylivingbase : this.world.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox().grow(10.0D))) + { + if (entitylivingbase.getUniqueID().equals(uuid)) + { + this.setLeashHolder(entitylivingbase, true); + break; + } + } + } + else if (this.leashNBTTag.hasKey("X", 99) && this.leashNBTTag.hasKey("Y", 99) && this.leashNBTTag.hasKey("Z", 99)) + { + BlockPos blockpos = new BlockPos(this.leashNBTTag.getInteger("X"), this.leashNBTTag.getInteger("Y"), this.leashNBTTag.getInteger("Z")); + EntityLeashKnot entityleashknot = EntityLeashKnot.getKnotForPosition(this.world, blockpos); + + if (entityleashknot == null) + { + entityleashknot = EntityLeashKnot.createKnot(this.world, blockpos); + } + + this.setLeashHolder(entityleashknot, true); + } + else + { + this.clearLeashed(false, true); + } + } + + this.leashNBTTag = null; + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + EntityEquipmentSlot entityequipmentslot; + + if (inventorySlot == 98) + { + entityequipmentslot = EntityEquipmentSlot.MAINHAND; + } + else if (inventorySlot == 99) + { + entityequipmentslot = EntityEquipmentSlot.OFFHAND; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.HEAD.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.HEAD; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.CHEST.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.CHEST; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.LEGS.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.LEGS; + } + else + { + if (inventorySlot != 100 + EntityEquipmentSlot.FEET.getIndex()) + { + return false; + } + + entityequipmentslot = EntityEquipmentSlot.FEET; + } + + if (!itemStackIn.isEmpty() && !isItemStackInSlot(entityequipmentslot, itemStackIn) && entityequipmentslot != EntityEquipmentSlot.HEAD) + { + return false; + } + else + { + this.setItemStackToSlot(entityequipmentslot, itemStackIn); + return true; + } + } + + public boolean canPassengerSteer() + { + return this.canBeSteered() && super.canPassengerSteer(); + } + + public static boolean isItemStackInSlot(EntityEquipmentSlot slotIn, ItemStack stack) + { + EntityEquipmentSlot entityequipmentslot = getSlotForItemStack(stack); + return entityequipmentslot == slotIn || entityequipmentslot == EntityEquipmentSlot.MAINHAND && slotIn == EntityEquipmentSlot.OFFHAND || entityequipmentslot == EntityEquipmentSlot.OFFHAND && slotIn == EntityEquipmentSlot.MAINHAND; + } + + /** + * Returns whether the entity is in a server world + */ + public boolean isServerWorld() + { + return super.isServerWorld() && !this.isAIDisabled(); + } + + /** + * Set whether this Entity's AI is disabled + */ + public void setNoAI(boolean disable) + { + byte b0 = ((Byte)this.dataManager.get(AI_FLAGS)).byteValue(); + this.dataManager.set(AI_FLAGS, Byte.valueOf(disable ? (byte)(b0 | 1) : (byte)(b0 & -2))); + } + + public void setLeftHanded(boolean leftHanded) + { + byte b0 = ((Byte)this.dataManager.get(AI_FLAGS)).byteValue(); + this.dataManager.set(AI_FLAGS, Byte.valueOf(leftHanded ? (byte)(b0 | 2) : (byte)(b0 & -3))); + } + + /** + * Get whether this Entity's AI is disabled + */ + public boolean isAIDisabled() + { + return (((Byte)this.dataManager.get(AI_FLAGS)).byteValue() & 1) != 0; + } + + public boolean isLeftHanded() + { + return (((Byte)this.dataManager.get(AI_FLAGS)).byteValue() & 2) != 0; + } + + public EnumHandSide getPrimaryHand() + { + return this.isLeftHanded() ? EnumHandSide.LEFT : EnumHandSide.RIGHT; + } + + public static enum SpawnPlacementType + { + ON_GROUND, + IN_AIR, + IN_WATER; + + private final java.util.function.BiPredicate spawnPredicate; + + SpawnPlacementType() { this.spawnPredicate = null; } + + SpawnPlacementType(java.util.function.BiPredicate spawnPredicate) + { + this.spawnPredicate = spawnPredicate; + } + + public boolean canSpawnAt(World world, BlockPos pos) + { + return this.spawnPredicate != null ? this.spawnPredicate.test(world, pos) : net.minecraft.world.WorldEntitySpawner.canCreatureTypeSpawnBody(this, world, pos); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLivingBase.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLivingBase.java new file mode 100644 index 0000000..bd4dce0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityLivingBase.java @@ -0,0 +1,3289 @@ +package net.minecraft.entity; + +import com.google.common.base.Objects; +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLadder; +import net.minecraft.block.BlockTrapDoor; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentFrostWalker; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; +import net.minecraft.entity.ai.attributes.AttributeMap; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemElytra; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketAnimation; +import net.minecraft.network.play.server.SPacketCollectItem; +import net.minecraft.network.play.server.SPacketEntityEquipment; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionUtils; +import net.minecraft.stats.StatList; +import net.minecraft.util.CombatRules; +import net.minecraft.util.CombatTracker; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class EntityLivingBase extends Entity +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final UUID SPRINTING_SPEED_BOOST_ID = UUID.fromString("662A6B8D-DA3E-4C1C-8813-96EA6097278D"); + private static final AttributeModifier SPRINTING_SPEED_BOOST = (new AttributeModifier(SPRINTING_SPEED_BOOST_ID, "Sprinting speed boost", 0.30000001192092896D, 2)).setSaved(false); + public static final net.minecraft.entity.ai.attributes.IAttribute SWIM_SPEED = new net.minecraft.entity.ai.attributes.RangedAttribute(null, "forge.swimSpeed", 1.0D, 0.0D, 1024.0D).setShouldWatch(true); + /** + * Hand states, used to trigger blocking/eating/drinking animation. + * + * Note that this is completely unrelated to {@link #isSwingInProgress}/{@link #swingingHand}, which is used for the + * swinging animation. + */ + protected static final DataParameter HAND_STATES = EntityDataManager.createKey(EntityLivingBase.class, DataSerializers.BYTE); + private static final DataParameter HEALTH = EntityDataManager.createKey(EntityLivingBase.class, DataSerializers.FLOAT); + private static final DataParameter POTION_EFFECTS = EntityDataManager.createKey(EntityLivingBase.class, DataSerializers.VARINT); + private static final DataParameter HIDE_PARTICLES = EntityDataManager.createKey(EntityLivingBase.class, DataSerializers.BOOLEAN); + private static final DataParameter ARROW_COUNT_IN_ENTITY = EntityDataManager.createKey(EntityLivingBase.class, DataSerializers.VARINT); + private AbstractAttributeMap attributeMap; + private final CombatTracker _combatTracker = new CombatTracker(this); + private final Map activePotionsMap = Maps.newHashMap(); + private final NonNullList handInventory = NonNullList.withSize(2, ItemStack.EMPTY); + /** The array of item stacks that are used for armor in a living inventory. */ + private final NonNullList armorArray = NonNullList.withSize(4, ItemStack.EMPTY); + /** Whether an arm swing is currently in progress. */ + public boolean isSwingInProgress; + /** The hand that is currently being swung, if {@link #isSwingInProgress} is true. */ + public EnumHand swingingHand; + public int swingProgressInt; + public int arrowHitTimer; + /** The amount of time remaining this entity should act 'hurt'. (Visual appearance of red tint) */ + public int hurtTime; + /** What the hurt time was max set to last. */ + public int maxHurtTime; + /** The yaw at which this entity was last attacked from. */ + public float attackedAtYaw; + /** The amount of time remaining this entity should act 'dead', i.e. have a corpse in the world. */ + public int deathTime; + public float prevSwingProgress; + public float swingProgress; + protected int ticksSinceLastSwing; + public float prevLimbSwingAmount; + public float limbSwingAmount; + public float limbSwing; + public int maxHurtResistantTime = 20; + public float prevCameraPitch; + public float cameraPitch; + /** An unused random value set in the constructor to a random number between 0 and 12398 */ + public float randomUnused2; + /** An unused random value set in the constructor to a random number between .01 and .02 */ + public float randomUnused1; + public float renderYawOffset; + public float prevRenderYawOffset; + /** Entity head rotation yaw */ + public float rotationYawHead; + /** Entity head rotation yaw at previous tick */ + public float prevRotationYawHead; + /** A factor used to determine how far this entity will move each tick if it is jumping or falling. */ + public float jumpMovementFactor = 0.02F; + /** The most recent player that has attacked this entity */ + protected EntityPlayer attackingPlayer; + /** + * Set to 60 when hit by the player or the player's wolf, then decrements. Used to determine whether the entity + * should drop items on death. + */ + protected int recentlyHit; + /** This gets set on entity death, but never used. Looks like a duplicate of isDead */ + protected boolean dead; + /** The age of this EntityLiving (used to determine when it dies) */ + protected int idleTime; + protected float prevOnGroundSpeedFactor; + protected float onGroundSpeedFactor; + protected float movedDistance; + protected float prevMovedDistance; + /** An unused field that is set to 180 in the constructor of EntityPlayer (and otherwise is 0) */ + protected float unused180; + /** The score value of the Mob, the amount of points the mob is worth. */ + protected int scoreValue; + /** Damage taken in the last hit. Mobs are resistant to damage less than this for a short time after taking damage. */ + protected float lastDamage; + /** used to check whether entity is jumping. */ + protected boolean isJumping; + public float moveStrafing; + public float moveVertical; + public float moveForward; + public float randomYawVelocity; + /** The number of updates over which the new position and rotation are to be applied to the entity. */ + protected int newPosRotationIncrements; + /** The X position the entity will be interpolated to. Used for teleporting. */ + protected double interpTargetX; + /** The Y position the entity will be interpolated to. Used for teleporting. */ + protected double interpTargetY; + /** The Z position the entity will be interpolated to. Used for teleporting. */ + protected double interpTargetZ; + /** The yaw rotation the entity will be interpolated to. Used for teleporting. */ + protected double interpTargetYaw; + /** The pitch rotation the entity will be interpolated to. Used for teleporting. */ + protected double interpTargetPitch; + /** Whether the DataWatcher needs to be updated with the active potions */ + private boolean potionsNeedUpdate = true; + /** + * Set immediately after this entity is attacked by another EntityLivingBase, allowing AI tasks to see who the + * attacker was and handle accordingly. Reset to null after 100 ticks have passed. + */ + private EntityLivingBase revengeTarget; + private int revengeTimer; + private EntityLivingBase lastAttackedEntity; + /** Holds the value of ticksExisted when setLastAttacker was last called. */ + private int lastAttackedEntityTime; + /** + * A factor used to determine how far this entity will move each tick if it is walking on land. Adjusted by speed, + * and slipperiness of the current block. + */ + private float landMovementFactor; + /** Number of ticks since last jump */ + private int jumpTicks; + private float absorptionAmount; + protected ItemStack activeItemStack = ItemStack.EMPTY; + protected int activeItemStackUseCount; + protected int ticksElytraFlying; + /** The BlockPos the entity had during the previous tick. */ + private BlockPos prevBlockpos; + private DamageSource lastDamageSource; + private long lastDamageStamp; + + /** + * Called by the /kill command. + */ + public void onKillCommand() + { + this.attackEntityFrom(DamageSource.OUT_OF_WORLD, Float.MAX_VALUE); + } + + public EntityLivingBase(World worldIn) + { + super(worldIn); + this.applyEntityAttributes(); + this.setHealth(this.getMaxHealth()); + this.preventEntitySpawning = true; + this.randomUnused1 = (float)((Math.random() + 1.0D) * 0.009999999776482582D); + this.setPosition(this.posX, this.posY, this.posZ); + this.randomUnused2 = (float)Math.random() * 12398.0F; + this.rotationYaw = (float)(Math.random() * (Math.PI * 2D)); + this.rotationYawHead = this.rotationYaw; + this.stepHeight = 0.6F; + } + + protected void entityInit() + { + this.dataManager.register(HAND_STATES, Byte.valueOf((byte)0)); + this.dataManager.register(POTION_EFFECTS, Integer.valueOf(0)); + this.dataManager.register(HIDE_PARTICLES, Boolean.valueOf(false)); + this.dataManager.register(ARROW_COUNT_IN_ENTITY, Integer.valueOf(0)); + this.dataManager.register(HEALTH, Float.valueOf(1.0F)); + } + + protected void applyEntityAttributes() + { + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.MAX_HEALTH); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ARMOR); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS); + this.getAttributeMap().registerAttribute(SWIM_SPEED); + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + if (!this.isInWater()) + { + this.handleWaterMovement(); + } + + if (!this.world.isRemote && this.fallDistance > 3.0F && onGroundIn) + { + float f = (float)MathHelper.ceil(this.fallDistance - 3.0F); + + if (!state.getBlock().isAir(state, world, pos)) + { + double d0 = Math.min((double)(0.2F + f / 15.0F), 2.5D); + int i = (int)(150.0D * d0); + if (!state.getBlock().addLandingEffects(state, (WorldServer)this.world, pos, state, this, i)) + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.BLOCK_DUST, this.posX, this.posY, this.posZ, i, 0.0D, 0.0D, 0.0D, 0.15000000596046448D, Block.getStateId(state)); + } + } + + super.updateFallState(y, onGroundIn, state, pos); + } + + public boolean canBreatheUnderwater() + { + return false; + } + + /** + * Gets called every tick from main Entity class + */ + public void onEntityUpdate() + { + this.prevSwingProgress = this.swingProgress; + super.onEntityUpdate(); + this.world.profiler.startSection("livingEntityBaseTick"); + boolean flag = this instanceof EntityPlayer; + + if (this.isEntityAlive()) + { + if (this.isEntityInsideOpaqueBlock()) + { + this.attackEntityFrom(DamageSource.IN_WALL, 1.0F); + } + else if (flag && !this.world.getWorldBorder().contains(this.getEntityBoundingBox())) + { + double d0 = this.world.getWorldBorder().getClosestDistance(this) + this.world.getWorldBorder().getDamageBuffer(); + + if (d0 < 0.0D) + { + double d1 = this.world.getWorldBorder().getDamageAmount(); + + if (d1 > 0.0D) + { + this.attackEntityFrom(DamageSource.IN_WALL, (float)Math.max(1, MathHelper.floor(-d0 * d1))); + } + } + } + } + + if (this.isImmuneToFire() || this.world.isRemote) + { + this.extinguish(); + } + + boolean flag1 = flag && ((EntityPlayer)this).capabilities.disableDamage; + + if (this.isEntityAlive()) + { + if (!this.isInsideOfMaterial(Material.WATER)) + { + this.setAir(300); + } + else + { + if (!this.canBreatheUnderwater() && !this.isPotionActive(MobEffects.WATER_BREATHING) && !flag1) + { + this.setAir(this.decreaseAirSupply(this.getAir())); + + if (this.getAir() == -20) + { + this.setAir(0); + + for (int i = 0; i < 8; ++i) + { + float f2 = this.rand.nextFloat() - this.rand.nextFloat(); + float f = this.rand.nextFloat() - this.rand.nextFloat(); + float f1 = this.rand.nextFloat() - this.rand.nextFloat(); + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX + (double)f2, this.posY + (double)f, this.posZ + (double)f1, this.motionX, this.motionY, this.motionZ); + } + + this.attackEntityFrom(DamageSource.DROWN, 2.0F); + } + } + + if (!this.world.isRemote && this.isRiding() && this.getRidingEntity() != null && this.getRidingEntity().shouldDismountInWater(this)) + { + this.dismountRidingEntity(); + } + } + + if (!this.world.isRemote) + { + BlockPos blockpos = new BlockPos(this); + + if (!Objects.equal(this.prevBlockpos, blockpos)) + { + this.prevBlockpos = blockpos; + this.frostWalk(blockpos); + } + } + } + + if (this.isEntityAlive() && this.isWet()) + { + this.extinguish(); + } + + this.prevCameraPitch = this.cameraPitch; + + if (this.hurtTime > 0) + { + --this.hurtTime; + } + + if (this.hurtResistantTime > 0 && !(this instanceof EntityPlayerMP)) + { + --this.hurtResistantTime; + } + + if (this.getHealth() <= 0.0F) + { + this.onDeathUpdate(); + } + + if (this.recentlyHit > 0) + { + --this.recentlyHit; + } + else + { + this.attackingPlayer = null; + } + + if (this.lastAttackedEntity != null && !this.lastAttackedEntity.isEntityAlive()) + { + this.lastAttackedEntity = null; + } + + if (this.revengeTarget != null) + { + if (!this.revengeTarget.isEntityAlive()) + { + this.setRevengeTarget((EntityLivingBase)null); + } + else if (this.ticksExisted - this.revengeTimer > 100) + { + this.setRevengeTarget((EntityLivingBase)null); + } + } + + this.updatePotionEffects(); + this.prevMovedDistance = this.movedDistance; + this.prevRenderYawOffset = this.renderYawOffset; + this.prevRotationYawHead = this.rotationYawHead; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + this.world.profiler.endSection(); + } + + protected void frostWalk(BlockPos pos) + { + int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FROST_WALKER, this); + + if (i > 0) + { + EnchantmentFrostWalker.freezeNearby(this, this.world, pos, i); + } + } + + /** + * If Animal, checks if the age timer is negative + */ + public boolean isChild() + { + return false; + } + + /** + * handles entity death timer, experience orb and particle creation + */ + protected void onDeathUpdate() + { + ++this.deathTime; + + if (this.deathTime == 20) + { + if (!this.world.isRemote && (this.isPlayer() || this.recentlyHit > 0 && this.canDropLoot() && this.world.getGameRules().getBoolean("doMobLoot"))) + { + int i = this.getExperiencePoints(this.attackingPlayer); + i = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.attackingPlayer, i); + while (i > 0) + { + int j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + } + + this.setDead(); + + for (int k = 0; k < 20; ++k) + { + double d2 = this.rand.nextGaussian() * 0.02D; + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_NORMAL, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d2, d0, d1); + } + } + } + + /** + * Entity won't drop items or experience points if this returns false + */ + protected boolean canDropLoot() + { + return !this.isChild(); + } + + /** + * Decrements the entity's air supply when underwater + */ + protected int decreaseAirSupply(int air) + { + int i = EnchantmentHelper.getRespirationModifier(this); + return i > 0 && this.rand.nextInt(i + 1) > 0 ? air : air - 1; + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + return 0; + } + + /** + * Only use is to identify if class is an instance of player for experience dropping + */ + protected boolean isPlayer() + { + return false; + } + + public Random getRNG() + { + return this.rand; + } + + @Nullable + public EntityLivingBase getRevengeTarget() + { + return this.revengeTarget; + } + + public int getRevengeTimer() + { + return this.revengeTimer; + } + + /** + * Hint to AI tasks that we were attacked by the passed EntityLivingBase and should retaliate. Is not guaranteed to + * change our actual active target (for example if we are currently busy attacking someone else) + */ + public void setRevengeTarget(@Nullable EntityLivingBase livingBase) + { + this.revengeTarget = livingBase; + this.revengeTimer = this.ticksExisted; + net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, livingBase); + } + + public EntityLivingBase getLastAttackedEntity() + { + return this.lastAttackedEntity; + } + + public int getLastAttackedEntityTime() + { + return this.lastAttackedEntityTime; + } + + public void setLastAttackedEntity(Entity entityIn) + { + if (entityIn instanceof EntityLivingBase) + { + this.lastAttackedEntity = (EntityLivingBase)entityIn; + } + else + { + this.lastAttackedEntity = null; + } + + this.lastAttackedEntityTime = this.ticksExisted; + } + + public int getIdleTime() + { + return this.idleTime; + } + + protected void playEquipSound(ItemStack stack) + { + if (!stack.isEmpty()) + { + SoundEvent soundevent = SoundEvents.ITEM_ARMOR_EQUIP_GENERIC; + Item item = stack.getItem(); + + if (item instanceof ItemArmor) + { + soundevent = ((ItemArmor)item).getArmorMaterial().getSoundEvent(); + } + else if (item == Items.ELYTRA) + { + soundevent = SoundEvents.ITEM_ARMOR_EQIIP_ELYTRA; + } + + this.playSound(soundevent, 1.0F, 1.0F); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setFloat("Health", this.getHealth()); + compound.setShort("HurtTime", (short)this.hurtTime); + compound.setInteger("HurtByTimestamp", this.revengeTimer); + compound.setShort("DeathTime", (short)this.deathTime); + compound.setFloat("AbsorptionAmount", this.getAbsorptionAmount()); + + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + ItemStack itemstack = this.getItemStackFromSlot(entityequipmentslot); + + if (!itemstack.isEmpty()) + { + this.getAttributeMap().removeAttributeModifiers(itemstack.getAttributeModifiers(entityequipmentslot)); + } + } + + compound.setTag("Attributes", SharedMonsterAttributes.writeBaseAttributeMapToNBT(this.getAttributeMap())); + + for (EntityEquipmentSlot entityequipmentslot1 : EntityEquipmentSlot.values()) + { + ItemStack itemstack1 = this.getItemStackFromSlot(entityequipmentslot1); + + if (!itemstack1.isEmpty()) + { + this.getAttributeMap().applyAttributeModifiers(itemstack1.getAttributeModifiers(entityequipmentslot1)); + } + } + + if (!this.activePotionsMap.isEmpty()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (PotionEffect potioneffect : this.activePotionsMap.values()) + { + nbttaglist.appendTag(potioneffect.writeCustomPotionEffectToNBT(new NBTTagCompound())); + } + + compound.setTag("ActiveEffects", nbttaglist); + } + + compound.setBoolean("FallFlying", this.isElytraFlying()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.setAbsorptionAmount(compound.getFloat("AbsorptionAmount")); + + if (compound.hasKey("Attributes", 9) && this.world != null && !this.world.isRemote) + { + SharedMonsterAttributes.setAttributeModifiers(this.getAttributeMap(), compound.getTagList("Attributes", 10)); + } + + if (compound.hasKey("ActiveEffects", 9)) + { + NBTTagList nbttaglist = compound.getTagList("ActiveEffects", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + PotionEffect potioneffect = PotionEffect.readCustomPotionEffectFromNBT(nbttagcompound); + + if (potioneffect != null) + { + this.activePotionsMap.put(potioneffect.getPotion(), potioneffect); + } + } + } + + if (compound.hasKey("Health", 99)) + { + this.setHealth(compound.getFloat("Health")); + } + + this.hurtTime = compound.getShort("HurtTime"); + this.deathTime = compound.getShort("DeathTime"); + this.revengeTimer = compound.getInteger("HurtByTimestamp"); + + if (compound.hasKey("Team", 8)) + { + String s = compound.getString("Team"); + boolean flag = this.world.getScoreboard().addPlayerToTeam(this.getCachedUniqueIdString(), s); + + if (!flag) + { + LOGGER.warn("Unable to add mob to team \"" + s + "\" (that team probably doesn't exist)"); + } + } + + if (compound.getBoolean("FallFlying")) + { + this.setFlag(7, true); + } + } + + protected void updatePotionEffects() + { + Iterator iterator = this.activePotionsMap.keySet().iterator(); + + try + { + while (iterator.hasNext()) + { + Potion potion = iterator.next(); + PotionEffect potioneffect = this.activePotionsMap.get(potion); + + if (!potioneffect.onUpdate(this)) + { + if (!this.world.isRemote) + { + iterator.remove(); + this.onFinishedPotionEffect(potioneffect); + } + } + else if (potioneffect.getDuration() % 600 == 0) + { + this.onChangedPotionEffect(potioneffect, false); + } + } + } + catch (ConcurrentModificationException var11) + { + ; + } + + if (this.potionsNeedUpdate) + { + if (!this.world.isRemote) + { + this.updatePotionMetadata(); + } + + this.potionsNeedUpdate = false; + } + + int i = ((Integer)this.dataManager.get(POTION_EFFECTS)).intValue(); + boolean flag1 = ((Boolean)this.dataManager.get(HIDE_PARTICLES)).booleanValue(); + + if (i > 0) + { + boolean flag; + + if (this.isInvisible()) + { + flag = this.rand.nextInt(15) == 0; + } + else + { + flag = this.rand.nextBoolean(); + } + + if (flag1) + { + flag &= this.rand.nextInt(5) == 0; + } + + if (flag && i > 0) + { + double d0 = (double)(i >> 16 & 255) / 255.0D; + double d1 = (double)(i >> 8 & 255) / 255.0D; + double d2 = (double)(i >> 0 & 255) / 255.0D; + this.world.spawnParticle(flag1 ? EnumParticleTypes.SPELL_MOB_AMBIENT : EnumParticleTypes.SPELL_MOB, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, d0, d1, d2); + } + } + } + + /** + * Clears potion metadata values if the entity has no potion effects. Otherwise, updates potion effect color, + * ambience, and invisibility metadata values + */ + protected void updatePotionMetadata() + { + if (this.activePotionsMap.isEmpty()) + { + this.resetPotionEffectMetadata(); + this.setInvisible(false); + } + else + { + Collection collection = this.activePotionsMap.values(); + net.minecraftforge.event.entity.living.PotionColorCalculationEvent event = new net.minecraftforge.event.entity.living.PotionColorCalculationEvent(this, PotionUtils.getPotionColorFromEffectList(collection), areAllPotionsAmbient(collection), collection); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); + this.dataManager.set(HIDE_PARTICLES, event.areParticlesHidden()); + this.dataManager.set(POTION_EFFECTS, event.getColor()); + this.setInvisible(this.isPotionActive(MobEffects.INVISIBILITY)); + } + } + + /** + * Returns true if all of the potion effects in the specified collection are ambient. + */ + public static boolean areAllPotionsAmbient(Collection potionEffects) + { + for (PotionEffect potioneffect : potionEffects) + { + if (!potioneffect.getIsAmbient()) + { + return false; + } + } + + return true; + } + + /** + * Resets the potion effect color and ambience metadata values + */ + protected void resetPotionEffectMetadata() + { + this.dataManager.set(HIDE_PARTICLES, Boolean.valueOf(false)); + this.dataManager.set(POTION_EFFECTS, Integer.valueOf(0)); + } + + public void clearActivePotions() + { + if (!this.world.isRemote) + { + Iterator iterator = this.activePotionsMap.values().iterator(); + + while (iterator.hasNext()) + { + this.onFinishedPotionEffect(iterator.next()); + iterator.remove(); + } + } + } + + public Collection getActivePotionEffects() + { + return this.activePotionsMap.values(); + } + + public Map getActivePotionMap() + { + return this.activePotionsMap; + } + + public boolean isPotionActive(Potion potionIn) + { + return this.activePotionsMap.containsKey(potionIn); + } + + /** + * returns the PotionEffect for the supplied Potion if it is active, null otherwise. + */ + @Nullable + public PotionEffect getActivePotionEffect(Potion potionIn) + { + return this.activePotionsMap.get(potionIn); + } + + /** + * adds a PotionEffect to the entity + */ + public void addPotionEffect(PotionEffect potioneffectIn) + { + if (this.isPotionApplicable(potioneffectIn)) + { + PotionEffect potioneffect = this.activePotionsMap.get(potioneffectIn.getPotion()); + + if (potioneffect == null) + { + this.activePotionsMap.put(potioneffectIn.getPotion(), potioneffectIn); + this.onNewPotionEffect(potioneffectIn); + } + else + { + potioneffect.combine(potioneffectIn); + this.onChangedPotionEffect(potioneffect, true); + } + } + } + + public boolean isPotionApplicable(PotionEffect potioneffectIn) + { + if (this.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD) + { + Potion potion = potioneffectIn.getPotion(); + + if (potion == MobEffects.REGENERATION || potion == MobEffects.POISON) + { + return false; + } + } + + return true; + } + + /** + * Returns true if this entity is undead. + */ + public boolean isEntityUndead() + { + return this.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD; + } + + /** + * Removes the given potion effect from the active potion map and returns it. Does not call cleanup callbacks for + * the end of the potion effect. + */ + @Nullable + public PotionEffect removeActivePotionEffect(@Nullable Potion potioneffectin) + { + return this.activePotionsMap.remove(potioneffectin); + } + + /** + * Removes the given potion effect. + */ + public void removePotionEffect(Potion potionIn) + { + PotionEffect potioneffect = this.removeActivePotionEffect(potionIn); + + if (potioneffect != null) + { + this.onFinishedPotionEffect(potioneffect); + } + } + + protected void onNewPotionEffect(PotionEffect id) + { + this.potionsNeedUpdate = true; + + if (!this.world.isRemote) + { + id.getPotion().applyAttributesModifiersToEntity(this, this.getAttributeMap(), id.getAmplifier()); + } + } + + protected void onChangedPotionEffect(PotionEffect id, boolean p_70695_2_) + { + this.potionsNeedUpdate = true; + + if (p_70695_2_ && !this.world.isRemote) + { + Potion potion = id.getPotion(); + potion.removeAttributesModifiersFromEntity(this, this.getAttributeMap(), id.getAmplifier()); + potion.applyAttributesModifiersToEntity(this, this.getAttributeMap(), id.getAmplifier()); + } + } + + protected void onFinishedPotionEffect(PotionEffect effect) + { + this.potionsNeedUpdate = true; + + if (!this.world.isRemote) + { + effect.getPotion().removeAttributesModifiersFromEntity(this, this.getAttributeMap(), effect.getAmplifier()); + } + } + + /** + * Heal living entity (param: amount of half-hearts) + */ + public void heal(float healAmount) + { + healAmount = net.minecraftforge.event.ForgeEventFactory.onLivingHeal(this, healAmount); + if (healAmount <= 0) return; + float f = this.getHealth(); + + if (f > 0.0F) + { + this.setHealth(f + healAmount); + } + } + + public final float getHealth() + { + return ((Float)this.dataManager.get(HEALTH)).floatValue(); + } + + public void setHealth(float health) + { + this.dataManager.set(HEALTH, Float.valueOf(MathHelper.clamp(health, 0.0F, this.getMaxHealth()))); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (!net.minecraftforge.common.ForgeHooks.onLivingAttack(this, source, amount)) return false; + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (this.world.isRemote) + { + return false; + } + else + { + this.idleTime = 0; + + if (this.getHealth() <= 0.0F) + { + return false; + } + else if (source.isFireDamage() && this.isPotionActive(MobEffects.FIRE_RESISTANCE)) + { + return false; + } + else + { + float f = amount; + + if ((source == DamageSource.ANVIL || source == DamageSource.FALLING_BLOCK) && !this.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isEmpty()) + { + this.getItemStackFromSlot(EntityEquipmentSlot.HEAD).damageItem((int)(amount * 4.0F + this.rand.nextFloat() * amount * 2.0F), this); + amount *= 0.75F; + } + + boolean flag = false; + + if (amount > 0.0F && this.canBlockDamageSource(source)) + { + this.damageShield(amount); + amount = 0.0F; + + if (!source.isProjectile()) + { + Entity entity = source.getImmediateSource(); + + if (entity instanceof EntityLivingBase) + { + this.blockUsingShield((EntityLivingBase)entity); + } + } + + flag = true; + } + + this.limbSwingAmount = 1.5F; + boolean flag1 = true; + + if ((float)this.hurtResistantTime > (float)this.maxHurtResistantTime / 2.0F) + { + if (amount <= this.lastDamage) + { + return false; + } + + this.damageEntity(source, amount - this.lastDamage); + this.lastDamage = amount; + flag1 = false; + } + else + { + this.lastDamage = amount; + this.hurtResistantTime = this.maxHurtResistantTime; + this.damageEntity(source, amount); + this.maxHurtTime = 10; + this.hurtTime = this.maxHurtTime; + } + + this.attackedAtYaw = 0.0F; + Entity entity1 = source.getTrueSource(); + + if (entity1 != null) + { + if (entity1 instanceof EntityLivingBase) + { + this.setRevengeTarget((EntityLivingBase)entity1); + } + + if (entity1 instanceof EntityPlayer) + { + this.recentlyHit = 100; + this.attackingPlayer = (EntityPlayer)entity1; + } + else if (entity1 instanceof net.minecraft.entity.passive.EntityTameable) + { + net.minecraft.entity.passive.EntityTameable entitywolf = (net.minecraft.entity.passive.EntityTameable)entity1; + + if (entitywolf.isTamed()) + { + this.recentlyHit = 100; + this.attackingPlayer = null; + } + } + } + + if (flag1) + { + if (flag) + { + this.world.setEntityState(this, (byte)29); + } + else if (source instanceof EntityDamageSource && ((EntityDamageSource)source).getIsThornsDamage()) + { + this.world.setEntityState(this, (byte)33); + } + else + { + byte b0; + + if (source == DamageSource.DROWN) + { + b0 = 36; + } + else if (source.isFireDamage()) + { + b0 = 37; + } + else + { + b0 = 2; + } + + this.world.setEntityState(this, b0); + } + + if (source != DamageSource.DROWN && (!flag || amount > 0.0F)) + { + this.markVelocityChanged(); + } + + if (entity1 != null) + { + double d1 = entity1.posX - this.posX; + double d0; + + for (d0 = entity1.posZ - this.posZ; d1 * d1 + d0 * d0 < 1.0E-4D; d0 = (Math.random() - Math.random()) * 0.01D) + { + d1 = (Math.random() - Math.random()) * 0.01D; + } + + this.attackedAtYaw = (float)(MathHelper.atan2(d0, d1) * (180D / Math.PI) - (double)this.rotationYaw); + this.knockBack(entity1, 0.4F, d1, d0); + } + else + { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + } + + if (this.getHealth() <= 0.0F) + { + if (!this.checkTotemDeathProtection(source)) + { + SoundEvent soundevent = this.getDeathSound(); + + if (flag1 && soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), this.getSoundPitch()); + } + + this.onDeath(source); + } + } + else if (flag1) + { + this.playHurtSound(source); + } + + boolean flag2 = !flag || amount > 0.0F; + + if (flag2) + { + this.lastDamageSource = source; + this.lastDamageStamp = this.world.getTotalWorldTime(); + } + + if (this instanceof EntityPlayerMP) + { + CriteriaTriggers.ENTITY_HURT_PLAYER.trigger((EntityPlayerMP)this, source, f, amount, flag); + } + + if (entity1 instanceof EntityPlayerMP) + { + CriteriaTriggers.PLAYER_HURT_ENTITY.trigger((EntityPlayerMP)entity1, this, source, f, amount, flag); + } + + return flag2; + } + } + } + + protected void blockUsingShield(EntityLivingBase p_190629_1_) + { + p_190629_1_.knockBack(this, 0.5F, this.posX - p_190629_1_.posX, this.posZ - p_190629_1_.posZ); + } + + private boolean checkTotemDeathProtection(DamageSource p_190628_1_) + { + if (p_190628_1_.canHarmInCreative()) + { + return false; + } + else + { + ItemStack itemstack = null; + + for (EnumHand enumhand : EnumHand.values()) + { + ItemStack itemstack1 = this.getHeldItem(enumhand); + + if (itemstack1.getItem() == Items.TOTEM_OF_UNDYING) + { + itemstack = itemstack1.copy(); + itemstack1.shrink(1); + break; + } + } + + if (itemstack != null) + { + if (this instanceof EntityPlayerMP) + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)this; + entityplayermp.addStat(StatList.getObjectUseStats(Items.TOTEM_OF_UNDYING)); + CriteriaTriggers.USED_TOTEM.trigger(entityplayermp, itemstack); + } + + this.setHealth(1.0F); + this.clearActivePotions(); + this.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 900, 1)); + this.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, 100, 1)); + this.world.setEntityState(this, (byte)35); + } + + return itemstack != null; + } + } + + @Nullable + public DamageSource getLastDamageSource() + { + if (this.world.getTotalWorldTime() - this.lastDamageStamp > 40L) + { + this.lastDamageSource = null; + } + + return this.lastDamageSource; + } + + protected void playHurtSound(DamageSource source) + { + SoundEvent soundevent = this.getHurtSound(source); + + if (soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), this.getSoundPitch()); + } + } + + /** + * Determines whether the entity can block the damage source based on the damage source's location, whether the + * damage source is blockable, and whether the entity is blocking. + */ + private boolean canBlockDamageSource(DamageSource damageSourceIn) + { + if (!damageSourceIn.isUnblockable() && this.isActiveItemStackBlocking()) + { + Vec3d vec3d = damageSourceIn.getDamageLocation(); + + if (vec3d != null) + { + Vec3d vec3d1 = this.getLook(1.0F); + Vec3d vec3d2 = vec3d.subtractReverse(new Vec3d(this.posX, this.posY, this.posZ)).normalize(); + vec3d2 = new Vec3d(vec3d2.x, 0.0D, vec3d2.z); + + if (vec3d2.dotProduct(vec3d1) < 0.0D) + { + return true; + } + } + } + + return false; + } + + /** + * Renders broken item particles using the given ItemStack + */ + public void renderBrokenItemStack(ItemStack stack) + { + this.world.playSound(null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_ITEM_BREAK, this.getSoundCategory(), 0.8F, 0.8F + this.world.rand.nextFloat() * 0.4F); //Forge: Fix MC-2518 Items are not damaged on the client so client needs packet as well. + + for (int i = 0; i < 5; ++i) + { + Vec3d vec3d = new Vec3d(((double)this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); + vec3d = vec3d.rotatePitch(-this.rotationPitch * 0.017453292F); + vec3d = vec3d.rotateYaw(-this.rotationYaw * 0.017453292F); + double d0 = (double)(-this.rand.nextFloat()) * 0.6D - 0.3D; + Vec3d vec3d1 = new Vec3d(((double)this.rand.nextFloat() - 0.5D) * 0.3D, d0, 0.6D); + vec3d1 = vec3d1.rotatePitch(-this.rotationPitch * 0.017453292F); + vec3d1 = vec3d1.rotateYaw(-this.rotationYaw * 0.017453292F); + vec3d1 = vec3d1.addVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ); + if (this.world instanceof WorldServer) //Forge: Fix MC-2518 spawnParticle is nooped on server, need to use server specific variant + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, 0, vec3d.x, vec3d.y + 0.05D, vec3d.z, 0.0D, Item.getIdFromItem(stack.getItem()), stack.getMetadata()); + else //Fix the fact that spawning ItemCrack uses TWO arguments. + this.world.spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, Item.getIdFromItem(stack.getItem()), stack.getMetadata()); + + } + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, cause)) return; + if (!this.dead) + { + Entity entity = cause.getTrueSource(); + EntityLivingBase entitylivingbase = this.getAttackingEntity(); + + if (this.scoreValue >= 0 && entitylivingbase != null) + { + entitylivingbase.awardKillScore(this, this.scoreValue, cause); + } + + if (entity != null) + { + entity.onKillEntity(this); + } + + this.dead = true; + this.getCombatTracker().reset(); + + if (!this.world.isRemote) + { + int i = net.minecraftforge.common.ForgeHooks.getLootingLevel(this, entity, cause); + + captureDrops = true; + capturedDrops.clear(); + + if (this.canDropLoot() && this.world.getGameRules().getBoolean("doMobLoot")) + { + boolean flag = this.recentlyHit > 0; + this.dropLoot(flag, i, cause); + } + + captureDrops = false; + + if (!net.minecraftforge.common.ForgeHooks.onLivingDrops(this, cause, capturedDrops, i, recentlyHit > 0)) + { + for (EntityItem item : capturedDrops) + { + world.spawnEntity(item); + } + } + } + + this.world.setEntityState(this, (byte)3); + } + } + + /** + * drops the loot of this entity upon death + */ + protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, DamageSource source) + { + this.dropFewItems(wasRecentlyHit, lootingModifier); + this.dropEquipment(wasRecentlyHit, lootingModifier); + } + + /** + * Drop the equipment for this entity. + */ + protected void dropEquipment(boolean wasRecentlyHit, int lootingModifier) + { + } + + /** + * Constructs a knockback vector from the given direction ratio and magnitude and adds it to the entity's velocity. + * If it is on the ground (i.e. {@code this.onGround}), the Y-velocity is increased as well, clamping it to {@code + * .4}. + * + * The entity's existing horizontal velocity is halved, and if the entity is on the ground the Y-velocity is too. + */ + public void knockBack(Entity entityIn, float strength, double xRatio, double zRatio) + { + net.minecraftforge.event.entity.living.LivingKnockBackEvent event = net.minecraftforge.common.ForgeHooks.onLivingKnockBack(this, entityIn, strength, xRatio, zRatio); + if(event.isCanceled()) return; + strength = event.getStrength(); xRatio = event.getRatioX(); zRatio = event.getRatioZ(); + if (this.rand.nextDouble() >= this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).getAttributeValue()) + { + this.isAirBorne = true; + float f = MathHelper.sqrt(xRatio * xRatio + zRatio * zRatio); + this.motionX /= 2.0D; + this.motionZ /= 2.0D; + this.motionX -= xRatio / (double)f * (double)strength; + this.motionZ -= zRatio / (double)f * (double)strength; + + if (this.onGround) + { + this.motionY /= 2.0D; + this.motionY += (double)strength; + + if (this.motionY > 0.4000000059604645D) + { + this.motionY = 0.4000000059604645D; + } + } + } + } + + @Nullable + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_GENERIC_HURT; + } + + @Nullable + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_GENERIC_DEATH; + } + + protected SoundEvent getFallSound(int heightIn) + { + return heightIn > 4 ? SoundEvents.ENTITY_GENERIC_BIG_FALL : SoundEvents.ENTITY_GENERIC_SMALL_FALL; + } + + /** + * Drop 0-2 items of this living's type + */ + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + } + + /** + * Returns true if this entity should move as if it were on a ladder (either because it's actually on a ladder, or + * for AI reasons) + */ + public boolean isOnLadder() + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.getEntityBoundingBox().minY); + int k = MathHelper.floor(this.posZ); + + if (this instanceof EntityPlayer && ((EntityPlayer)this).isSpectator()) + { + return false; + } + else + { + BlockPos blockpos = new BlockPos(i, j, k); + IBlockState iblockstate = this.world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + return net.minecraftforge.common.ForgeHooks.isLivingOnLadder(iblockstate, world, new BlockPos(i, j, k), this); + } + } + + private boolean canGoThroughtTrapDoorOnLadder(BlockPos pos, IBlockState state) + { + if (((Boolean)state.getValue(BlockTrapDoor.OPEN)).booleanValue()) + { + IBlockState iblockstate = this.world.getBlockState(pos.down()); + + if (iblockstate.getBlock() == Blocks.LADDER && iblockstate.getValue(BlockLadder.FACING) == state.getValue(BlockTrapDoor.FACING)) + { + return true; + } + } + + return false; + } + + /** + * Checks whether target entity is alive. + */ + public boolean isEntityAlive() + { + return !this.isDead && this.getHealth() > 0.0F; + } + + public void fall(float distance, float damageMultiplier) + { + float[] ret = net.minecraftforge.common.ForgeHooks.onLivingFall(this, distance, damageMultiplier); + if (ret == null) return; + distance = ret[0]; damageMultiplier = ret[1]; + super.fall(distance, damageMultiplier); + PotionEffect potioneffect = this.getActivePotionEffect(MobEffects.JUMP_BOOST); + float f = potioneffect == null ? 0.0F : (float)(potioneffect.getAmplifier() + 1); + int i = MathHelper.ceil((distance - 3.0F - f) * damageMultiplier); + + if (i > 0) + { + this.playSound(this.getFallSound(i), 1.0F, 1.0F); + this.attackEntityFrom(DamageSource.FALL, (float)i); + int j = MathHelper.floor(this.posX); + int k = MathHelper.floor(this.posY - 0.20000000298023224D); + int l = MathHelper.floor(this.posZ); + IBlockState iblockstate = this.world.getBlockState(new BlockPos(j, k, l)); + + if (iblockstate.getMaterial() != Material.AIR) + { + SoundType soundtype = iblockstate.getBlock().getSoundType(iblockstate, world, new BlockPos(j, k, l), this); + this.playSound(soundtype.getFallSound(), soundtype.getVolume() * 0.5F, soundtype.getPitch() * 0.75F); + } + } + } + + /** + * Setups the entity to do the hurt animation. Only used by packets in multiplayer. + */ + @SideOnly(Side.CLIENT) + public void performHurtAnimation() + { + this.maxHurtTime = 10; + this.hurtTime = this.maxHurtTime; + this.attackedAtYaw = 0.0F; + } + + /** + * Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue + */ + public int getTotalArmorValue() + { + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.ARMOR); + return MathHelper.floor(iattributeinstance.getAttributeValue()); + } + + protected void damageArmor(float damage) + { + } + + protected void damageShield(float damage) + { + } + + /** + * Reduces damage, depending on armor + */ + protected float applyArmorCalculations(DamageSource source, float damage) + { + if (!source.isUnblockable()) + { + this.damageArmor(damage); + damage = CombatRules.getDamageAfterAbsorb(damage, (float)this.getTotalArmorValue(), (float)this.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getAttributeValue()); + } + + return damage; + } + + /** + * Reduces damage, depending on potions + */ + protected float applyPotionDamageCalculations(DamageSource source, float damage) + { + if (source.isDamageAbsolute()) + { + return damage; + } + else + { + if (this.isPotionActive(MobEffects.RESISTANCE) && source != DamageSource.OUT_OF_WORLD) + { + int i = (this.getActivePotionEffect(MobEffects.RESISTANCE).getAmplifier() + 1) * 5; + int j = 25 - i; + float f = damage * (float)j; + damage = f / 25.0F; + } + + if (damage <= 0.0F) + { + return 0.0F; + } + else + { + int k = EnchantmentHelper.getEnchantmentModifierDamage(this.getArmorInventoryList(), source); + + if (k > 0) + { + damage = CombatRules.getDamageAfterMagicAbsorb(damage, (float)k); + } + + return damage; + } + } + } + + /** + * Deals damage to the entity. This will take the armor of the entity into consideration before damaging the health + * bar. + */ + protected void damageEntity(DamageSource damageSrc, float damageAmount) + { + if (!this.isEntityInvulnerable(damageSrc)) + { + damageAmount = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, damageSrc, damageAmount); + if (damageAmount <= 0) return; + damageAmount = this.applyArmorCalculations(damageSrc, damageAmount); + damageAmount = this.applyPotionDamageCalculations(damageSrc, damageAmount); + float f = damageAmount; + damageAmount = Math.max(damageAmount - this.getAbsorptionAmount(), 0.0F); + this.setAbsorptionAmount(this.getAbsorptionAmount() - (f - damageAmount)); + damageAmount = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, damageSrc, damageAmount); + + if (damageAmount != 0.0F) + { + float f1 = this.getHealth(); + this.getCombatTracker().trackDamage(damageSrc, f1, damageAmount); + this.setHealth(f1 - damageAmount); // Forge: moved to fix MC-121048 + this.setAbsorptionAmount(this.getAbsorptionAmount() - damageAmount); + } + } + } + + /** + * 1.8.9 + */ + public CombatTracker getCombatTracker() + { + return this._combatTracker; + } + + @Nullable + public EntityLivingBase getAttackingEntity() + { + if (this._combatTracker.getBestAttacker() != null) + { + return this._combatTracker.getBestAttacker(); + } + else if (this.attackingPlayer != null) + { + return this.attackingPlayer; + } + else + { + return this.revengeTarget != null ? this.revengeTarget : null; + } + } + + /** + * Returns the maximum health of the entity (what it is able to regenerate up to, what it spawned with, etc) + */ + public final float getMaxHealth() + { + return (float)this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).getAttributeValue(); + } + + /** + * counts the amount of arrows stuck in the entity. getting hit by arrows increases this, used in rendering + */ + public final int getArrowCountInEntity() + { + return ((Integer)this.dataManager.get(ARROW_COUNT_IN_ENTITY)).intValue(); + } + + /** + * sets the amount of arrows stuck in the entity. used for rendering those + */ + public final void setArrowCountInEntity(int count) + { + this.dataManager.set(ARROW_COUNT_IN_ENTITY, Integer.valueOf(count)); + } + + /** + * Returns an integer indicating the end point of the swing animation, used by {@link #swingProgress} to provide a + * progress indicator. Takes dig speed enchantments into account. + */ + private int getArmSwingAnimationEnd() + { + if (this.isPotionActive(MobEffects.HASTE)) + { + return 6 - (1 + this.getActivePotionEffect(MobEffects.HASTE).getAmplifier()); + } + else + { + return this.isPotionActive(MobEffects.MINING_FATIGUE) ? 6 + (1 + this.getActivePotionEffect(MobEffects.MINING_FATIGUE).getAmplifier()) * 2 : 6; + } + } + + public void swingArm(EnumHand hand) + { + ItemStack stack = this.getHeldItem(hand); + if (!stack.isEmpty()) + { + if (stack.getItem().onEntitySwing(this, stack)) return; + } + if (!this.isSwingInProgress || this.swingProgressInt >= this.getArmSwingAnimationEnd() / 2 || this.swingProgressInt < 0) + { + this.swingProgressInt = -1; + this.isSwingInProgress = true; + this.swingingHand = hand; + + if (this.world instanceof WorldServer) + { + ((WorldServer)this.world).getEntityTracker().sendToTracking(this, new SPacketAnimation(this, hand == EnumHand.MAIN_HAND ? 0 : 3)); + } + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + boolean flag = id == 33; + boolean flag1 = id == 36; + boolean flag2 = id == 37; + + if (id != 2 && !flag && !flag1 && !flag2) + { + if (id == 3) + { + SoundEvent soundevent1 = this.getDeathSound(); + + if (soundevent1 != null) + { + this.playSound(soundevent1, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + this.setHealth(0.0F); + this.onDeath(DamageSource.GENERIC); + } + else if (id == 30) + { + this.playSound(SoundEvents.ITEM_SHIELD_BREAK, 0.8F, 0.8F + this.world.rand.nextFloat() * 0.4F); + } + else if (id == 29) + { + this.playSound(SoundEvents.ITEM_SHIELD_BLOCK, 1.0F, 0.8F + this.world.rand.nextFloat() * 0.4F); + } + else + { + super.handleStatusUpdate(id); + } + } + else + { + this.limbSwingAmount = 1.5F; + this.hurtResistantTime = this.maxHurtResistantTime; + this.maxHurtTime = 10; + this.hurtTime = this.maxHurtTime; + this.attackedAtYaw = 0.0F; + + if (flag) + { + this.playSound(SoundEvents.ENCHANT_THORNS_HIT, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + DamageSource damagesource; + + if (flag2) + { + damagesource = DamageSource.ON_FIRE; + } + else if (flag1) + { + damagesource = DamageSource.DROWN; + } + else + { + damagesource = DamageSource.GENERIC; + } + + SoundEvent soundevent = this.getHurtSound(damagesource); + + if (soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + this.attackEntityFrom(DamageSource.GENERIC, 0.0F); + } + } + + /** + * sets the dead flag. Used when you fall off the bottom of the world. + */ + protected void outOfWorld() + { + this.attackEntityFrom(DamageSource.OUT_OF_WORLD, 4.0F); + } + + /** + * Updates the arm swing progress counters and animation progress + */ + protected void updateArmSwingProgress() + { + int i = this.getArmSwingAnimationEnd(); + + if (this.isSwingInProgress) + { + ++this.swingProgressInt; + + if (this.swingProgressInt >= i) + { + this.swingProgressInt = 0; + this.isSwingInProgress = false; + } + } + else + { + this.swingProgressInt = 0; + } + + this.swingProgress = (float)this.swingProgressInt / (float)i; + } + + public IAttributeInstance getEntityAttribute(IAttribute attribute) + { + return this.getAttributeMap().getAttributeInstance(attribute); + } + + /** + * Returns this entity's attribute map (where all its attributes are stored) + */ + public AbstractAttributeMap getAttributeMap() + { + if (this.attributeMap == null) + { + this.attributeMap = new AttributeMap(); + } + + return this.attributeMap; + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEFINED; + } + + public ItemStack getHeldItemMainhand() + { + return this.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); + } + + public ItemStack getHeldItemOffhand() + { + return this.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); + } + + public ItemStack getHeldItem(EnumHand hand) + { + if (hand == EnumHand.MAIN_HAND) + { + return this.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); + } + else if (hand == EnumHand.OFF_HAND) + { + return this.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); + } + else + { + throw new IllegalArgumentException("Invalid hand " + hand); + } + } + + public void setHeldItem(EnumHand hand, ItemStack stack) + { + if (hand == EnumHand.MAIN_HAND) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, stack); + } + else + { + if (hand != EnumHand.OFF_HAND) + { + throw new IllegalArgumentException("Invalid hand " + hand); + } + + this.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, stack); + } + } + + public boolean hasItemInSlot(EntityEquipmentSlot p_190630_1_) + { + return !this.getItemStackFromSlot(p_190630_1_).isEmpty(); + } + + public abstract Iterable getArmorInventoryList(); + + public abstract ItemStack getItemStackFromSlot(EntityEquipmentSlot slotIn); + + public abstract void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack); + + /** + * Set sprinting switch for Entity. + */ + public void setSprinting(boolean sprinting) + { + super.setSprinting(sprinting); + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + + if (iattributeinstance.getModifier(SPRINTING_SPEED_BOOST_ID) != null) + { + iattributeinstance.removeModifier(SPRINTING_SPEED_BOOST); + } + + if (sprinting) + { + iattributeinstance.applyModifier(SPRINTING_SPEED_BOOST); + } + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 1.0F; + } + + /** + * Gets the pitch of living sounds in living entities. + */ + protected float getSoundPitch() + { + return this.isChild() ? (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.5F : (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F; + } + + /** + * Dead and sleeping entities cannot move + */ + protected boolean isMovementBlocked() + { + return this.getHealth() <= 0.0F; + } + + /** + * Moves the entity to a position out of the way of its mount. + */ + public void dismountEntity(Entity entityIn) + { + if (!(entityIn instanceof EntityBoat) && !(entityIn instanceof AbstractHorse)) + { + double d1 = entityIn.posX; + double d13 = entityIn.getEntityBoundingBox().minY + (double)entityIn.height; + double d14 = entityIn.posZ; + EnumFacing enumfacing1 = entityIn.getAdjustedHorizontalFacing(); + + if (enumfacing1 != null) + { + EnumFacing enumfacing = enumfacing1.rotateY(); + int[][] aint1 = new int[][] {{0, 1}, {0, -1}, { -1, 1}, { -1, -1}, {1, 1}, {1, -1}, { -1, 0}, {1, 0}, {0, 1}}; + double d5 = Math.floor(this.posX) + 0.5D; + double d6 = Math.floor(this.posZ) + 0.5D; + double d7 = this.getEntityBoundingBox().maxX - this.getEntityBoundingBox().minX; + double d8 = this.getEntityBoundingBox().maxZ - this.getEntityBoundingBox().minZ; + AxisAlignedBB axisalignedbb = new AxisAlignedBB(d5 - d7 / 2.0D, entityIn.getEntityBoundingBox().minY, d6 - d8 / 2.0D, d5 + d7 / 2.0D, Math.floor(entityIn.getEntityBoundingBox().minY) + (double)this.height, d6 + d8 / 2.0D); + + for (int[] aint : aint1) + { + double d9 = (double)(enumfacing1.getFrontOffsetX() * aint[0] + enumfacing.getFrontOffsetX() * aint[1]); + double d10 = (double)(enumfacing1.getFrontOffsetZ() * aint[0] + enumfacing.getFrontOffsetZ() * aint[1]); + double d11 = d5 + d9; + double d12 = d6 + d10; + AxisAlignedBB axisalignedbb1 = axisalignedbb.offset(d9, 0.0D, d10); + + if (!this.world.collidesWithAnyBlock(axisalignedbb1)) + { + if (this.world.getBlockState(new BlockPos(d11, this.posY, d12)).isSideSolid(world, new BlockPos(d11, this.posY, d12), EnumFacing.UP)) + { + this.setPositionAndUpdate(d11, this.posY + 1.0D, d12); + return; + } + + BlockPos blockpos = new BlockPos(d11, this.posY - 1.0D, d12); + + if (this.world.getBlockState(blockpos).isSideSolid(world, blockpos, EnumFacing.UP) || this.world.getBlockState(blockpos).getMaterial() == Material.WATER) + { + d1 = d11; + d13 = this.posY + 1.0D; + d14 = d12; + } + } + else if (!this.world.collidesWithAnyBlock(axisalignedbb1.offset(0.0D, 1.0D, 0.0D)) && this.world.getBlockState(new BlockPos(d11, this.posY + 1.0D, d12)).isSideSolid(world, new BlockPos(d11, this.posY + 1.0D, d12), EnumFacing.UP)) + { + d1 = d11; + d13 = this.posY + 2.0D; + d14 = d12; + } + } + } + + this.setPositionAndUpdate(d1, d13, d14); + } + else + { + double d0 = (double)(this.width / 2.0F + entityIn.width / 2.0F) + 0.4D; + float f; + + if (entityIn instanceof EntityBoat) + { + f = 0.0F; + } + else + { + f = ((float)Math.PI / 2F) * (float)(this.getPrimaryHand() == EnumHandSide.RIGHT ? -1 : 1); + } + + float f1 = -MathHelper.sin(-this.rotationYaw * 0.017453292F - (float)Math.PI + f); + float f2 = -MathHelper.cos(-this.rotationYaw * 0.017453292F - (float)Math.PI + f); + double d2 = Math.abs(f1) > Math.abs(f2) ? d0 / (double)Math.abs(f1) : d0 / (double)Math.abs(f2); + double d3 = this.posX + (double)f1 * d2; + double d4 = this.posZ + (double)f2 * d2; + this.setPosition(d3, entityIn.posY + (double)entityIn.height + 0.001D, d4); + + if (this.world.collidesWithAnyBlock(this.getEntityBoundingBox())) + { + this.setPosition(d3, entityIn.posY + (double)entityIn.height + 1.001D, d4); + + if (this.world.collidesWithAnyBlock(this.getEntityBoundingBox())) + { + this.setPosition(entityIn.posX, entityIn.posY + (double)this.height + 0.001D, entityIn.posZ); + } + } + } + } + + @SideOnly(Side.CLIENT) + public boolean getAlwaysRenderNameTagForRender() + { + return this.getAlwaysRenderNameTag(); + } + + protected float getJumpUpwardsMotion() + { + return 0.42F; + } + + /** + * Causes this entity to do an upwards motion (jumping). + */ + protected void jump() + { + this.motionY = (double)this.getJumpUpwardsMotion(); + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (double)((float)(this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F); + } + + if (this.isSprinting()) + { + float f = this.rotationYaw * 0.017453292F; + this.motionX -= (double)(MathHelper.sin(f) * 0.2F); + this.motionZ += (double)(MathHelper.cos(f) * 0.2F); + } + + this.isAirBorne = true; + net.minecraftforge.common.ForgeHooks.onLivingJump(this); + } + + /** + * Handles the jump when the entity is in water + */ + protected void handleJumpWater() + { + this.motionY += 0.03999999910593033D * this.getEntityAttribute(SWIM_SPEED).getAttributeValue(); + } + + protected void handleJumpLava() + { + this.motionY += 0.03999999910593033D * this.getEntityAttribute(SWIM_SPEED).getAttributeValue(); + } + + protected float getWaterSlowDown() + { + return 0.8F; + } + + public void travel(float strafe, float vertical, float forward) + { + if (this.isServerWorld() || this.canPassengerSteer()) + { + if (!this.isInWater() || this instanceof EntityPlayer && ((EntityPlayer)this).capabilities.isFlying) + { + if (!this.isInLava() || this instanceof EntityPlayer && ((EntityPlayer)this).capabilities.isFlying) + { + if (this.isElytraFlying()) + { + if (this.motionY > -0.5D) + { + this.fallDistance = 1.0F; + } + + Vec3d vec3d = this.getLookVec(); + float f = this.rotationPitch * 0.017453292F; + double d6 = Math.sqrt(vec3d.x * vec3d.x + vec3d.z * vec3d.z); + double d8 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + double d1 = vec3d.lengthVector(); + float f4 = MathHelper.cos(f); + f4 = (float)((double)f4 * (double)f4 * Math.min(1.0D, d1 / 0.4D)); + this.motionY += -0.08D + (double)f4 * 0.06D; + + if (this.motionY < 0.0D && d6 > 0.0D) + { + double d2 = this.motionY * -0.1D * (double)f4; + this.motionY += d2; + this.motionX += vec3d.x * d2 / d6; + this.motionZ += vec3d.z * d2 / d6; + } + + if (f < 0.0F) + { + double d10 = d8 * (double)(-MathHelper.sin(f)) * 0.04D; + this.motionY += d10 * 3.2D; + this.motionX -= vec3d.x * d10 / d6; + this.motionZ -= vec3d.z * d10 / d6; + } + + if (d6 > 0.0D) + { + this.motionX += (vec3d.x / d6 * d8 - this.motionX) * 0.1D; + this.motionZ += (vec3d.z / d6 * d8 - this.motionZ) * 0.1D; + } + + this.motionX *= 0.9900000095367432D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9900000095367432D; + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (this.collidedHorizontally && !this.world.isRemote) + { + double d11 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + double d3 = d8 - d11; + float f5 = (float)(d3 * 10.0D - 3.0D); + + if (f5 > 0.0F) + { + this.playSound(this.getFallSound((int)f5), 1.0F, 1.0F); + this.attackEntityFrom(DamageSource.FLY_INTO_WALL, f5); + } + } + + if (this.onGround && !this.world.isRemote) + { + this.setFlag(7, false); + } + } + else + { + float f6 = 0.91F; + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(this.posX, this.getEntityBoundingBox().minY - 1.0D, this.posZ); + + if (this.onGround) + { + IBlockState underState = this.world.getBlockState(blockpos$pooledmutableblockpos); + f6 = underState.getBlock().getSlipperiness(underState, this.world, blockpos$pooledmutableblockpos, this) * 0.91F; + } + + float f7 = 0.16277136F / (f6 * f6 * f6); + float f8; + + if (this.onGround) + { + f8 = this.getAIMoveSpeed() * f7; + } + else + { + f8 = this.jumpMovementFactor; + } + + this.moveRelative(strafe, vertical, forward, f8); + f6 = 0.91F; + + if (this.onGround) + { + IBlockState underState = this.world.getBlockState(blockpos$pooledmutableblockpos.setPos(this.posX, this.getEntityBoundingBox().minY - 1.0D, this.posZ)); + f6 = underState.getBlock().getSlipperiness(underState, this.world, blockpos$pooledmutableblockpos, this) * 0.91F; + } + + if (this.isOnLadder()) + { + float f9 = 0.15F; + this.motionX = MathHelper.clamp(this.motionX, -0.15000000596046448D, 0.15000000596046448D); + this.motionZ = MathHelper.clamp(this.motionZ, -0.15000000596046448D, 0.15000000596046448D); + this.fallDistance = 0.0F; + + if (this.motionY < -0.15D) + { + this.motionY = -0.15D; + } + + boolean flag = this.isSneaking() && this instanceof EntityPlayer; + + if (flag && this.motionY < 0.0D) + { + this.motionY = 0.0D; + } + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (this.collidedHorizontally && this.isOnLadder()) + { + this.motionY = 0.2D; + } + + if (this.isPotionActive(MobEffects.LEVITATION)) + { + this.motionY += (0.05D * (double)(this.getActivePotionEffect(MobEffects.LEVITATION).getAmplifier() + 1) - this.motionY) * 0.2D; + } + else + { + blockpos$pooledmutableblockpos.setPos(this.posX, 0.0D, this.posZ); + + if (!this.world.isRemote || this.world.isBlockLoaded(blockpos$pooledmutableblockpos) && this.world.getChunkFromBlockCoords(blockpos$pooledmutableblockpos).isLoaded()) + { + if (!this.hasNoGravity()) + { + this.motionY -= 0.08D; + } + } + else if (this.posY > 0.0D) + { + this.motionY = -0.1D; + } + else + { + this.motionY = 0.0D; + } + } + + this.motionY *= 0.9800000190734863D; + this.motionX *= (double)f6; + this.motionZ *= (double)f6; + blockpos$pooledmutableblockpos.release(); + } + } + else + { + double d4 = this.posY; + this.moveRelative(strafe, vertical, forward, 0.02F); + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.02D; + } + + if (this.collidedHorizontally && this.isOffsetPositionInLiquid(this.motionX, this.motionY + 0.6000000238418579D - this.posY + d4, this.motionZ)) + { + this.motionY = 0.30000001192092896D; + } + } + } + else + { + double d0 = this.posY; + float f1 = this.getWaterSlowDown(); + float f2 = 0.02F; + float f3 = (float)EnchantmentHelper.getDepthStriderModifier(this); + + if (f3 > 3.0F) + { + f3 = 3.0F; + } + + if (!this.onGround) + { + f3 *= 0.5F; + } + + if (f3 > 0.0F) + { + f1 += (0.54600006F - f1) * f3 / 3.0F; + f2 += (this.getAIMoveSpeed() - f2) * f3 / 3.0F; + } + + this.moveRelative(strafe, vertical, forward, f2); + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)f1; + this.motionY *= 0.800000011920929D; + this.motionZ *= (double)f1; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.02D; + } + + if (this.collidedHorizontally && this.isOffsetPositionInLiquid(this.motionX, this.motionY + 0.6000000238418579D - this.posY + d0, this.motionZ)) + { + this.motionY = 0.30000001192092896D; + } + } + } + + this.prevLimbSwingAmount = this.limbSwingAmount; + double d5 = this.posX - this.prevPosX; + double d7 = this.posZ - this.prevPosZ; + double d9 = this instanceof net.minecraft.entity.passive.EntityFlying ? this.posY - this.prevPosY : 0.0D; + float f10 = MathHelper.sqrt(d5 * d5 + d9 * d9 + d7 * d7) * 4.0F; + + if (f10 > 1.0F) + { + f10 = 1.0F; + } + + this.limbSwingAmount += (f10 - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } + + /** + * the movespeed used for the new AI system + */ + public float getAIMoveSpeed() + { + return this.landMovementFactor; + } + + /** + * set the movespeed used for the new AI system + */ + public void setAIMoveSpeed(float speedIn) + { + this.landMovementFactor = speedIn; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + this.setLastAttackedEntity(entityIn); + return false; + } + + /** + * Returns whether player is sleeping or not + */ + public boolean isPlayerSleeping() + { + return false; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (net.minecraftforge.common.ForgeHooks.onLivingUpdate(this)) return; + super.onUpdate(); + this.updateActiveHand(); + + if (!this.world.isRemote) + { + int i = this.getArrowCountInEntity(); + + if (i > 0) + { + if (this.arrowHitTimer <= 0) + { + this.arrowHitTimer = 20 * (30 - i); + } + + --this.arrowHitTimer; + + if (this.arrowHitTimer <= 0) + { + this.setArrowCountInEntity(i - 1); + } + } + + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + ItemStack itemstack; + + switch (entityequipmentslot.getSlotType()) + { + case HAND: + itemstack = this.handInventory.get(entityequipmentslot.getIndex()); + break; + case ARMOR: + itemstack = this.armorArray.get(entityequipmentslot.getIndex()); + break; + default: + continue; + } + + ItemStack itemstack1 = this.getItemStackFromSlot(entityequipmentslot); + + if (!ItemStack.areItemStacksEqual(itemstack1, itemstack)) + { + if (!ItemStack.areItemStacksEqualUsingNBTShareTag(itemstack1, itemstack)) + ((WorldServer)this.world).getEntityTracker().sendToTracking(this, new SPacketEntityEquipment(this.getEntityId(), entityequipmentslot, itemstack1)); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent(this, entityequipmentslot, itemstack, itemstack1)); + + if (!itemstack.isEmpty()) + { + this.getAttributeMap().removeAttributeModifiers(itemstack.getAttributeModifiers(entityequipmentslot)); + } + + if (!itemstack1.isEmpty()) + { + this.getAttributeMap().applyAttributeModifiers(itemstack1.getAttributeModifiers(entityequipmentslot)); + } + + switch (entityequipmentslot.getSlotType()) + { + case HAND: + this.handInventory.set(entityequipmentslot.getIndex(), itemstack1.isEmpty() ? ItemStack.EMPTY : itemstack1.copy()); + break; + case ARMOR: + this.armorArray.set(entityequipmentslot.getIndex(), itemstack1.isEmpty() ? ItemStack.EMPTY : itemstack1.copy()); + } + } + } + + if (this.ticksExisted % 20 == 0) + { + this.getCombatTracker().reset(); + } + + if (!this.glowing) + { + boolean flag = this.isPotionActive(MobEffects.GLOWING); + + if (this.getFlag(6) != flag) + { + this.setFlag(6, flag); + } + } + } + + this.onLivingUpdate(); + double d0 = this.posX - this.prevPosX; + double d1 = this.posZ - this.prevPosZ; + float f3 = (float)(d0 * d0 + d1 * d1); + float f4 = this.renderYawOffset; + float f5 = 0.0F; + this.prevOnGroundSpeedFactor = this.onGroundSpeedFactor; + float f = 0.0F; + + if (f3 > 0.0025000002F) + { + f = 1.0F; + f5 = (float)Math.sqrt((double)f3) * 3.0F; + float f1 = (float)MathHelper.atan2(d1, d0) * (180F / (float)Math.PI) - 90.0F; + float f2 = MathHelper.abs(MathHelper.wrapDegrees(this.rotationYaw) - f1); + + if (95.0F < f2 && f2 < 265.0F) + { + f4 = f1 - 180.0F; + } + else + { + f4 = f1; + } + } + + if (this.swingProgress > 0.0F) + { + f4 = this.rotationYaw; + } + + if (!this.onGround) + { + f = 0.0F; + } + + this.onGroundSpeedFactor += (f - this.onGroundSpeedFactor) * 0.3F; + this.world.profiler.startSection("headTurn"); + f5 = this.updateDistance(f4, f5); + this.world.profiler.endSection(); + this.world.profiler.startSection("rangeChecks"); + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + while (this.renderYawOffset - this.prevRenderYawOffset < -180.0F) + { + this.prevRenderYawOffset -= 360.0F; + } + + while (this.renderYawOffset - this.prevRenderYawOffset >= 180.0F) + { + this.prevRenderYawOffset += 360.0F; + } + + while (this.rotationPitch - this.prevRotationPitch < -180.0F) + { + this.prevRotationPitch -= 360.0F; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYawHead - this.prevRotationYawHead < -180.0F) + { + this.prevRotationYawHead -= 360.0F; + } + + while (this.rotationYawHead - this.prevRotationYawHead >= 180.0F) + { + this.prevRotationYawHead += 360.0F; + } + + this.world.profiler.endSection(); + this.movedDistance += f5; + + if (this.isElytraFlying()) + { + ++this.ticksElytraFlying; + } + else + { + this.ticksElytraFlying = 0; + } + } + + protected float updateDistance(float p_110146_1_, float p_110146_2_) + { + float f = MathHelper.wrapDegrees(p_110146_1_ - this.renderYawOffset); + this.renderYawOffset += f * 0.3F; + float f1 = MathHelper.wrapDegrees(this.rotationYaw - this.renderYawOffset); + boolean flag = f1 < -90.0F || f1 >= 90.0F; + + if (f1 < -75.0F) + { + f1 = -75.0F; + } + + if (f1 >= 75.0F) + { + f1 = 75.0F; + } + + this.renderYawOffset = this.rotationYaw - f1; + + if (f1 * f1 > 2500.0F) + { + this.renderYawOffset += f1 * 0.2F; + } + + if (flag) + { + p_110146_2_ *= -1.0F; + } + + return p_110146_2_; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.jumpTicks > 0) + { + --this.jumpTicks; + } + + if (this.newPosRotationIncrements > 0 && !this.canPassengerSteer()) + { + double d0 = this.posX + (this.interpTargetX - this.posX) / (double)this.newPosRotationIncrements; + double d1 = this.posY + (this.interpTargetY - this.posY) / (double)this.newPosRotationIncrements; + double d2 = this.posZ + (this.interpTargetZ - this.posZ) / (double)this.newPosRotationIncrements; + double d3 = MathHelper.wrapDegrees(this.interpTargetYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.newPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.interpTargetPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements); + --this.newPosRotationIncrements; + this.setPosition(d0, d1, d2); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + else if (!this.isServerWorld()) + { + this.motionX *= 0.98D; + this.motionY *= 0.98D; + this.motionZ *= 0.98D; + } + + if (Math.abs(this.motionX) < 0.003D) + { + this.motionX = 0.0D; + } + + if (Math.abs(this.motionY) < 0.003D) + { + this.motionY = 0.0D; + } + + if (Math.abs(this.motionZ) < 0.003D) + { + this.motionZ = 0.0D; + } + + this.world.profiler.startSection("ai"); + + if (this.isMovementBlocked()) + { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } + else if (this.isServerWorld()) + { + this.world.profiler.startSection("newAi"); + this.updateEntityActionState(); + this.world.profiler.endSection(); + } + + this.world.profiler.endSection(); + this.world.profiler.startSection("jump"); + + if (this.isJumping) + { + if (this.isInWater()) + { + this.handleJumpWater(); + } + else if (this.isInLava()) + { + this.handleJumpLava(); + } + else if (this.onGround && this.jumpTicks == 0) + { + this.jump(); + this.jumpTicks = 10; + } + } + else + { + this.jumpTicks = 0; + } + + this.world.profiler.endSection(); + this.world.profiler.startSection("travel"); + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + this.updateElytra(); + this.travel(this.moveStrafing, this.moveVertical, this.moveForward); + this.world.profiler.endSection(); + this.world.profiler.startSection("push"); + this.collideWithNearbyEntities(); + this.world.profiler.endSection(); + } + + /** + * Called each tick. Updates state for the elytra. + */ + private void updateElytra() + { + boolean flag = this.getFlag(7); + + if (flag && !this.onGround && !this.isRiding()) + { + ItemStack itemstack = this.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + + if (itemstack.getItem() == Items.ELYTRA && ItemElytra.isUsable(itemstack)) + { + flag = true; + + if (!this.world.isRemote && (this.ticksElytraFlying + 1) % 20 == 0) + { + itemstack.damageItem(1, this); + } + } + else + { + flag = false; + } + } + else + { + flag = false; + } + + if (!this.world.isRemote) + { + this.setFlag(7, flag); + } + } + + protected void updateEntityActionState() + { + } + + protected void collideWithNearbyEntities() + { + List list = this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox(), EntitySelectors.getTeamCollisionPredicate(this)); + + if (!list.isEmpty()) + { + int i = this.world.getGameRules().getInt("maxEntityCramming"); + + if (i > 0 && list.size() > i - 1 && this.rand.nextInt(4) == 0) + { + int j = 0; + + for (int k = 0; k < list.size(); ++k) + { + if (!((Entity)list.get(k)).isRiding()) + { + ++j; + } + } + + if (j > i - 1) + { + this.attackEntityFrom(DamageSource.CRAMMING, 6.0F); + } + } + + for (int l = 0; l < list.size(); ++l) + { + Entity entity = list.get(l); + this.collideWithEntity(entity); + } + } + } + + protected void collideWithEntity(Entity entityIn) + { + entityIn.applyEntityCollision(this); + } + + /** + * Dismounts this entity from the entity it is riding. + */ + public void dismountRidingEntity() + { + Entity entity = this.getRidingEntity(); + super.dismountRidingEntity(); + + if (entity != null && entity != this.getRidingEntity() && !this.world.isRemote) + { + this.dismountEntity(entity); + } + } + + /** + * Handles updating while riding another entity + */ + public void updateRidden() + { + super.updateRidden(); + this.prevOnGroundSpeedFactor = this.onGroundSpeedFactor; + this.onGroundSpeedFactor = 0.0F; + this.fallDistance = 0.0F; + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.interpTargetX = x; + this.interpTargetY = y; + this.interpTargetZ = z; + this.interpTargetYaw = (double)yaw; + this.interpTargetPitch = (double)pitch; + this.newPosRotationIncrements = posRotationIncrements; + } + + public void setJumping(boolean jumping) + { + this.isJumping = jumping; + } + + /** + * Called when the entity picks up an item. + */ + public void onItemPickup(Entity entityIn, int quantity) + { + if (!entityIn.isDead && !this.world.isRemote) + { + EntityTracker entitytracker = ((WorldServer)this.world).getEntityTracker(); + + if (entityIn instanceof EntityItem || entityIn instanceof EntityArrow || entityIn instanceof EntityXPOrb) + { + entitytracker.sendToTracking(entityIn, new SPacketCollectItem(entityIn.getEntityId(), this.getEntityId(), quantity)); + } + } + } + + /** + * returns true if the entity provided in the argument can be seen. (Raytrace) + */ + public boolean canEntityBeSeen(Entity entityIn) + { + return this.world.rayTraceBlocks(new Vec3d(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ), new Vec3d(entityIn.posX, entityIn.posY + (double)entityIn.getEyeHeight(), entityIn.posZ), false, true, false) == null; + } + + /** + * interpolated look vector + */ + public Vec3d getLook(float partialTicks) + { + if (partialTicks == 1.0F) + { + return this.getVectorForRotation(this.rotationPitch, this.rotationYawHead); + } + else + { + float f = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * partialTicks; + float f1 = this.prevRotationYawHead + (this.rotationYawHead - this.prevRotationYawHead) * partialTicks; + return this.getVectorForRotation(f, f1); + } + } + + /** + * Gets the progression of the swing animation, ranges from 0.0 to 1.0. + */ + @SideOnly(Side.CLIENT) + public float getSwingProgress(float partialTickTime) + { + float f = this.swingProgress - this.prevSwingProgress; + + if (f < 0.0F) + { + ++f; + } + + return this.prevSwingProgress + f * partialTickTime; + } + + /** + * Returns whether the entity is in a server world + */ + public boolean isServerWorld() + { + return !this.world.isRemote; + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return this.isEntityAlive() && !this.isOnLadder(); + } + + /** + * Marks this entity's velocity as changed, so that it can be re-synced with the client later + */ + protected void markVelocityChanged() + { + this.velocityChanged = this.rand.nextDouble() >= this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).getAttributeValue(); + } + + public float getRotationYawHead() + { + return this.rotationYawHead; + } + + /** + * Sets the head's yaw rotation of the entity. + */ + public void setRotationYawHead(float rotation) + { + this.rotationYawHead = rotation; + } + + /** + * Set the render yaw offset + */ + public void setRenderYawOffset(float offset) + { + this.renderYawOffset = offset; + } + + /** + * Returns the amount of health added by the Absorption effect. + */ + public float getAbsorptionAmount() + { + return this.absorptionAmount; + } + + public void setAbsorptionAmount(float amount) + { + if (amount < 0.0F) + { + amount = 0.0F; + } + + this.absorptionAmount = amount; + } + + /** + * Sends an ENTER_COMBAT packet to the client + */ + public void sendEnterCombat() + { + } + + /** + * Sends an END_COMBAT packet to the client + */ + public void sendEndCombat() + { + } + + protected void markPotionsDirty() + { + this.potionsNeedUpdate = true; + } + + /*** + * Removes all potion effects that have curativeItem as a curative item for its effect + * @param curativeItem The itemstack we are using to cure potion effects + */ + public void curePotionEffects(ItemStack curativeItem) + { + if (world.isRemote) return; + Iterator iterator = this.activePotionsMap.values().iterator(); + + while (iterator.hasNext()) + { + PotionEffect effect = iterator.next(); + + if (effect.isCurativeItem(curativeItem)) + { + onFinishedPotionEffect(effect); + iterator.remove(); + this.potionsNeedUpdate = true; + } + } + } + + /** + * Returns true if the entity's rider (EntityPlayer) should face forward when mounted. + * currently only used in vanilla code by pigs. + * + * @param player The player who is riding the entity. + * @return If the player should orient the same direction as this entity. + */ + public boolean shouldRiderFaceForward(EntityPlayer player) + { + return this instanceof net.minecraft.entity.passive.EntityPig; + } + + public abstract EnumHandSide getPrimaryHand(); + + public boolean isHandActive() + { + return (((Byte)this.dataManager.get(HAND_STATES)).byteValue() & 1) > 0; + } + + public EnumHand getActiveHand() + { + return (((Byte)this.dataManager.get(HAND_STATES)).byteValue() & 2) > 0 ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND; + } + + protected void updateActiveHand() + { + if (this.isHandActive()) + { + ItemStack itemstack = this.getHeldItem(this.getActiveHand()); + + if (itemstack == this.activeItemStack) + { + if (!this.activeItemStack.isEmpty()) + { + activeItemStackUseCount = net.minecraftforge.event.ForgeEventFactory.onItemUseTick(this, activeItemStack, activeItemStackUseCount); + if (activeItemStackUseCount > 0) + activeItemStack.getItem().onUsingTick(activeItemStack, this, activeItemStackUseCount); + } + + if (this.getItemInUseCount() <= 25 && this.getItemInUseCount() % 4 == 0) + { + this.updateItemUse(this.activeItemStack, 5); + } + + if (--this.activeItemStackUseCount <= 0 && !this.world.isRemote) + { + this.onItemUseFinish(); + } + } + else + { + this.resetActiveHand(); + } + } + } + + public void setActiveHand(EnumHand hand) + { + ItemStack itemstack = this.getHeldItem(hand); + + if (!itemstack.isEmpty() && !this.isHandActive()) + { + int duration = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, itemstack, itemstack.getMaxItemUseDuration()); + if (duration <= 0) return; + this.activeItemStack = itemstack; + this.activeItemStackUseCount = duration; + + if (!this.world.isRemote) + { + int i = 1; + + if (hand == EnumHand.OFF_HAND) + { + i |= 2; + } + + this.dataManager.set(HAND_STATES, Byte.valueOf((byte)i)); + } + } + } + + public void notifyDataManagerChange(DataParameter key) + { + super.notifyDataManagerChange(key); + + if (HAND_STATES.equals(key) && this.world.isRemote) + { + if (this.isHandActive() && this.activeItemStack.isEmpty()) + { + this.activeItemStack = this.getHeldItem(this.getActiveHand()); + + if (!this.activeItemStack.isEmpty()) + { + this.activeItemStackUseCount = this.activeItemStack.getMaxItemUseDuration(); + } + } + else if (!this.isHandActive() && !this.activeItemStack.isEmpty()) + { + this.activeItemStack = ItemStack.EMPTY; + this.activeItemStackUseCount = 0; + } + } + } + + /** + * Plays sounds and makes particles for item in use state + */ + protected void updateItemUse(ItemStack stack, int eatingParticleCount) + { + if (!stack.isEmpty() && this.isHandActive()) + { + if (stack.getItemUseAction() == EnumAction.DRINK) + { + this.playSound(SoundEvents.ENTITY_GENERIC_DRINK, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (stack.getItemUseAction() == EnumAction.EAT) + { + for (int i = 0; i < eatingParticleCount; ++i) + { + Vec3d vec3d = new Vec3d(((double)this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); + vec3d = vec3d.rotatePitch(-this.rotationPitch * 0.017453292F); + vec3d = vec3d.rotateYaw(-this.rotationYaw * 0.017453292F); + double d0 = (double)(-this.rand.nextFloat()) * 0.6D - 0.3D; + Vec3d vec3d1 = new Vec3d(((double)this.rand.nextFloat() - 0.5D) * 0.3D, d0, 0.6D); + vec3d1 = vec3d1.rotatePitch(-this.rotationPitch * 0.017453292F); + vec3d1 = vec3d1.rotateYaw(-this.rotationYaw * 0.017453292F); + vec3d1 = vec3d1.addVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ); + + if (stack.getHasSubtypes()) + { + this.world.spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, Item.getIdFromItem(stack.getItem()), stack.getMetadata()); + } + else + { + this.world.spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z, Item.getIdFromItem(stack.getItem())); + } + } + + this.playSound(SoundEvents.ENTITY_GENERIC_EAT, 0.5F + 0.5F * (float)this.rand.nextInt(2), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + } + } + + /** + * Used for when item use count runs out, ie: eating completed + */ + protected void onItemUseFinish() + { + if (!this.activeItemStack.isEmpty() && this.isHandActive()) + { + this.updateItemUse(this.activeItemStack, 16); + ItemStack activeItemStackCopy = this.activeItemStack.copy(); + ItemStack itemstack = this.activeItemStack.onItemUseFinish(this.world, this); + itemstack = net.minecraftforge.event.ForgeEventFactory.onItemUseFinish(this, activeItemStackCopy, getItemInUseCount(), itemstack); + this.setHeldItem(this.getActiveHand(), itemstack); + this.resetActiveHand(); + } + } + + public ItemStack getActiveItemStack() + { + return this.activeItemStack; + } + + public int getItemInUseCount() + { + return this.activeItemStackUseCount; + } + + public int getItemInUseMaxCount() + { + return this.isHandActive() ? this.activeItemStack.getMaxItemUseDuration() - this.getItemInUseCount() : 0; + } + + public void stopActiveHand() + { + if (!this.activeItemStack.isEmpty()) + { + if (!net.minecraftforge.event.ForgeEventFactory.onUseItemStop(this, activeItemStack, this.getItemInUseCount())) + this.activeItemStack.onPlayerStoppedUsing(this.world, this, this.getItemInUseCount()); + } + + this.resetActiveHand(); + } + + public void resetActiveHand() + { + if (!this.world.isRemote) + { + this.dataManager.set(HAND_STATES, Byte.valueOf((byte)0)); + } + + this.activeItemStack = ItemStack.EMPTY; + this.activeItemStackUseCount = 0; + } + + public boolean isActiveItemStackBlocking() + { + if (this.isHandActive() && !this.activeItemStack.isEmpty()) + { + Item item = this.activeItemStack.getItem(); + + if (item.getItemUseAction(this.activeItemStack) != EnumAction.BLOCK) + { + return false; + } + else + { + return item.getMaxItemUseDuration(this.activeItemStack) - this.activeItemStackUseCount >= 5; + } + } + else + { + return false; + } + } + + public boolean isElytraFlying() + { + return this.getFlag(7); + } + + @SideOnly(Side.CLIENT) + public int getTicksElytraFlying() + { + return this.ticksElytraFlying; + } + + /** + * Teleports the entity to the specified location. Used for Enderman and Chorus Fruit teleportation + */ + public boolean attemptTeleport(double x, double y, double z) + { + double d0 = this.posX; + double d1 = this.posY; + double d2 = this.posZ; + this.posX = x; + this.posY = y; + this.posZ = z; + boolean flag = false; + BlockPos blockpos = new BlockPos(this); + World world = this.world; + Random random = this.getRNG(); + + if (world.isBlockLoaded(blockpos)) + { + boolean flag1 = false; + + while (!flag1 && blockpos.getY() > 0) + { + BlockPos blockpos1 = blockpos.down(); + IBlockState iblockstate = world.getBlockState(blockpos1); + + if (iblockstate.getMaterial().blocksMovement()) + { + flag1 = true; + } + else + { + --this.posY; + blockpos = blockpos1; + } + } + + if (flag1) + { + this.setPositionAndUpdate(this.posX, this.posY, this.posZ); + + if (world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && !world.containsAnyLiquid(this.getEntityBoundingBox())) + { + flag = true; + } + } + } + + if (!flag) + { + this.setPositionAndUpdate(d0, d1, d2); + return false; + } + else + { + int i = 128; + + for (int j = 0; j < 128; ++j) + { + double d6 = (double)j / 127.0D; + float f = (random.nextFloat() - 0.5F) * 0.2F; + float f1 = (random.nextFloat() - 0.5F) * 0.2F; + float f2 = (random.nextFloat() - 0.5F) * 0.2F; + double d3 = d0 + (this.posX - d0) * d6 + (random.nextDouble() - 0.5D) * (double)this.width * 2.0D; + double d4 = d1 + (this.posY - d1) * d6 + random.nextDouble() * (double)this.height; + double d5 = d2 + (this.posZ - d2) * d6 + (random.nextDouble() - 0.5D) * (double)this.width * 2.0D; + world.spawnParticle(EnumParticleTypes.PORTAL, d3, d4, d5, (double)f, (double)f1, (double)f2); + } + + if (this instanceof EntityCreature) + { + ((EntityCreature)this).getNavigator().clearPath(); + } + + return true; + } + } + + /** + * Returns false if the entity is an armor stand. Returns true for all other entity living bases. + */ + public boolean canBeHitWithPotion() + { + return true; + } + + // FORGE + private final net.minecraftforge.items.IItemHandlerModifiable handHandler = new net.minecraftforge.items.wrapper.EntityHandsInvWrapper(this); + private final net.minecraftforge.items.IItemHandlerModifiable armorHandler = new net.minecraftforge.items.wrapper.EntityArmorInvWrapper(this); + private final net.minecraftforge.items.IItemHandler joinedHandler = new net.minecraftforge.items.wrapper.CombinedInvWrapper(armorHandler, handHandler); + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + if (capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + if (facing == null) return (T) joinedHandler; + else if (facing.getAxis().isVertical()) return (T) handHandler; + else if (facing.getAxis().isHorizontal()) return (T) armorHandler; + } + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + public boolean attackable() + { + return true; + } + + @SideOnly(Side.CLIENT) + public void setPartying(BlockPos pos, boolean p_191987_2_) + { + } + + @Override + public void moveRelative(float strafe, float up, float forward, float friction) + { + float f = strafe * strafe + up * up + forward * forward; + if (f >= 1.0E-4F) + { + f = MathHelper.sqrt(f); + if (f < 1.0F) f = 1.0F; + f = friction / f; + strafe = strafe * f; + up = up * f; + forward = forward * f; + if(this.isInWater() || this.isInLava()) + { + strafe = strafe * (float)this.getEntityAttribute(SWIM_SPEED).getAttributeValue(); + up = up * (float)this.getEntityAttribute(SWIM_SPEED).getAttributeValue(); + forward = forward * (float)this.getEntityAttribute(SWIM_SPEED).getAttributeValue(); + } + float f1 = MathHelper.sin(this.rotationYaw * 0.017453292F); + float f2 = MathHelper.cos(this.rotationYaw * 0.017453292F); + this.motionX += (double)(strafe * f2 - forward * f1); + this.motionY += (double)up; + this.motionZ += (double)(forward * f2 + strafe * f1); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntitySpawnPlacementRegistry.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntitySpawnPlacementRegistry.java new file mode 100644 index 0000000..d310edf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntitySpawnPlacementRegistry.java @@ -0,0 +1,105 @@ +package net.minecraft.entity; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.EntityGiantZombie; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.entity.monster.EntityHusk; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.monster.EntityStray; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityWitherSkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityDonkey; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.entity.passive.EntityMule; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntitySkeletonHorse; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.passive.EntityZombieHorse; + +public class EntitySpawnPlacementRegistry +{ + private static final Map < Class, EntityLiving.SpawnPlacementType > ENTITY_PLACEMENTS = Maps. < Class, EntityLiving.SpawnPlacementType > newHashMap(); + + public static EntityLiving.SpawnPlacementType getPlacementForEntity(Class entityClass) + { + return ENTITY_PLACEMENTS.getOrDefault(entityClass, EntityLiving.SpawnPlacementType.ON_GROUND); + } + + public static void setPlacementType(Class entityClass, EntityLiving.SpawnPlacementType placementType) + { + ENTITY_PLACEMENTS.putIfAbsent(entityClass, placementType); + } + + static + { + ENTITY_PLACEMENTS.put(EntityBat.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityChicken.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityCow.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityHorse.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySkeletonHorse.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityZombieHorse.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityDonkey.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityMule.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityMooshroom.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityOcelot.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityPig.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityRabbit.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityParrot.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySheep.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySnowman.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySquid.class, EntityLiving.SpawnPlacementType.IN_WATER); + ENTITY_PLACEMENTS.put(EntityIronGolem.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityWolf.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityVillager.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityDragon.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityWither.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityBlaze.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityCaveSpider.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityCreeper.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityEnderman.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityEndermite.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityGhast.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityGiantZombie.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityGuardian.class, EntityLiving.SpawnPlacementType.IN_WATER); + ENTITY_PLACEMENTS.put(EntityMagmaCube.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityPigZombie.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySilverfish.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySkeleton.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityWitherSkeleton.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityStray.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySlime.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntitySpider.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityWitch.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityZombie.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityZombieVillager.class, EntityLiving.SpawnPlacementType.ON_GROUND); + ENTITY_PLACEMENTS.put(EntityHusk.class, EntityLiving.SpawnPlacementType.ON_GROUND); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityTracker.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityTracker.java new file mode 100644 index 0000000..0a2613d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityTracker.java @@ -0,0 +1,441 @@ +package net.minecraft.entity; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.List; +import java.util.Set; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.passive.IAnimals; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.SPacketEntityAttach; +import net.minecraft.network.play.server.SPacketSetPassengers; +import net.minecraft.util.IntHashMap; +import net.minecraft.util.ReportedException; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityTracker +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final WorldServer world; + /** List of tracked entities, used for iteration operations on tracked entities. */ + private final Set entries = Sets.newHashSet(); + /** Used for identity lookup of tracked entities. */ + private final IntHashMap trackedEntityHashTable = new IntHashMap(); + private int maxTrackingDistanceThreshold; + + public EntityTracker(WorldServer theWorldIn) + { + this.world = theWorldIn; + this.maxTrackingDistanceThreshold = theWorldIn.getMinecraftServer().getPlayerList().getEntityViewDistance(); + } + + public static long getPositionLong(double value) + { + return MathHelper.lfloor(value * 4096.0D); + } + + @SideOnly(Side.CLIENT) + public static void updateServerPosition(Entity entityIn, double x, double y, double z) + { + entityIn.serverPosX = getPositionLong(x); + entityIn.serverPosY = getPositionLong(y); + entityIn.serverPosZ = getPositionLong(z); + } + + public void track(Entity entityIn) + { + if (net.minecraftforge.fml.common.registry.EntityRegistry.instance().tryTrackingEntity(this, entityIn)) return; + + if (entityIn instanceof EntityPlayerMP) + { + this.track(entityIn, 512, 2); + EntityPlayerMP entityplayermp = (EntityPlayerMP)entityIn; + + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + if (entitytrackerentry.getTrackedEntity() != entityplayermp) + { + entitytrackerentry.updatePlayerEntity(entityplayermp); + } + } + } + else if (entityIn instanceof EntityFishHook) + { + this.track(entityIn, 64, 5, true); + } + else if (entityIn instanceof EntityArrow) + { + this.track(entityIn, 64, 20, false); + } + else if (entityIn instanceof EntitySmallFireball) + { + this.track(entityIn, 64, 10, false); + } + else if (entityIn instanceof EntityFireball) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntitySnowball) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntityLlamaSpit) + { + this.track(entityIn, 64, 10, false); + } + else if (entityIn instanceof EntityEnderPearl) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntityEnderEye) + { + this.track(entityIn, 64, 4, true); + } + else if (entityIn instanceof EntityEgg) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntityPotion) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntityExpBottle) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntityFireworkRocket) + { + this.track(entityIn, 64, 10, true); + } + else if (entityIn instanceof EntityItem) + { + this.track(entityIn, 64, 20, true); + } + else if (entityIn instanceof EntityMinecart) + { + this.track(entityIn, 80, 3, true); + } + else if (entityIn instanceof EntityBoat) + { + this.track(entityIn, 80, 3, true); + } + else if (entityIn instanceof EntitySquid) + { + this.track(entityIn, 64, 3, true); + } + else if (entityIn instanceof EntityWither) + { + this.track(entityIn, 80, 3, false); + } + else if (entityIn instanceof EntityShulkerBullet) + { + this.track(entityIn, 80, 3, true); + } + else if (entityIn instanceof EntityBat) + { + this.track(entityIn, 80, 3, false); + } + else if (entityIn instanceof EntityDragon) + { + this.track(entityIn, 160, 3, true); + } + else if (entityIn instanceof IAnimals) + { + this.track(entityIn, 80, 3, true); + } + else if (entityIn instanceof EntityTNTPrimed) + { + this.track(entityIn, 160, 10, true); + } + else if (entityIn instanceof EntityFallingBlock) + { + this.track(entityIn, 160, 20, true); + } + else if (entityIn instanceof EntityHanging) + { + this.track(entityIn, 160, Integer.MAX_VALUE, false); + } + else if (entityIn instanceof EntityArmorStand) + { + this.track(entityIn, 160, 3, true); + } + else if (entityIn instanceof EntityXPOrb) + { + this.track(entityIn, 160, 20, true); + } + else if (entityIn instanceof EntityAreaEffectCloud) + { + this.track(entityIn, 160, Integer.MAX_VALUE, true); + } + else if (entityIn instanceof EntityEnderCrystal) + { + this.track(entityIn, 256, Integer.MAX_VALUE, false); + } + else if (entityIn instanceof EntityEvokerFangs) + { + this.track(entityIn, 160, 2, false); + } + } + + public void track(Entity entityIn, int trackingRange, int updateFrequency) + { + this.track(entityIn, trackingRange, updateFrequency, false); + } + + /** + * Args : Entity, trackingRange, updateFrequency, sendVelocityUpdates + */ + public void track(Entity entityIn, int trackingRange, final int updateFrequency, boolean sendVelocityUpdates) + { + try + { + if (this.trackedEntityHashTable.containsItem(entityIn.getEntityId())) + { + throw new IllegalStateException("Entity is already tracked!"); + } + + EntityTrackerEntry entitytrackerentry = new EntityTrackerEntry(entityIn, trackingRange, this.maxTrackingDistanceThreshold, updateFrequency, sendVelocityUpdates); + this.entries.add(entitytrackerentry); + this.trackedEntityHashTable.addKey(entityIn.getEntityId(), entitytrackerentry); + entitytrackerentry.updatePlayerEntities(this.world.playerEntities); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Adding entity to track"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Entity To Track"); + crashreportcategory.addCrashSection("Tracking range", trackingRange + " blocks"); + crashreportcategory.addDetail("Update interval", new ICrashReportDetail() + { + public String call() throws Exception + { + String s = "Once per " + updateFrequency + " ticks"; + + if (updateFrequency == Integer.MAX_VALUE) + { + s = "Maximum (" + s + ")"; + } + + return s; + } + }); + entityIn.addEntityCrashInfo(crashreportcategory); + ((EntityTrackerEntry)this.trackedEntityHashTable.lookup(entityIn.getEntityId())).getTrackedEntity().addEntityCrashInfo(crashreport.makeCategory("Entity That Is Already Tracked")); + + try + { + throw new ReportedException(crashreport); + } + catch (ReportedException reportedexception) + { + LOGGER.error("\"Silently\" catching entity tracking error.", (Throwable)reportedexception); + } + } + } + + public void untrack(Entity entityIn) + { + if (entityIn instanceof EntityPlayerMP) + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)entityIn; + + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + entitytrackerentry.removeFromTrackedPlayers(entityplayermp); + } + } + + EntityTrackerEntry entitytrackerentry1 = this.trackedEntityHashTable.removeObject(entityIn.getEntityId()); + + if (entitytrackerentry1 != null) + { + this.entries.remove(entitytrackerentry1); + entitytrackerentry1.sendDestroyEntityPacketToTrackedPlayers(); + } + } + + public void tick() + { + List list = Lists.newArrayList(); + + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + entitytrackerentry.updatePlayerList(this.world.playerEntities); + + if (entitytrackerentry.playerEntitiesUpdated) + { + Entity entity = entitytrackerentry.getTrackedEntity(); + + if (entity instanceof EntityPlayerMP) + { + list.add((EntityPlayerMP)entity); + } + } + } + + for (int i = 0; i < list.size(); ++i) + { + EntityPlayerMP entityplayermp = list.get(i); + + for (EntityTrackerEntry entitytrackerentry1 : this.entries) + { + if (entitytrackerentry1.getTrackedEntity() != entityplayermp) + { + entitytrackerentry1.updatePlayerEntity(entityplayermp); + } + } + } + } + + public void updateVisibility(EntityPlayerMP player) + { + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + if (entitytrackerentry.getTrackedEntity() == player) + { + entitytrackerentry.updatePlayerEntities(this.world.playerEntities); + } + else + { + entitytrackerentry.updatePlayerEntity(player); + } + } + } + + public void sendToTracking(Entity entityIn, Packet packetIn) + { + EntityTrackerEntry entitytrackerentry = this.trackedEntityHashTable.lookup(entityIn.getEntityId()); + + if (entitytrackerentry != null) + { + entitytrackerentry.sendPacketToTrackedPlayers(packetIn); + } + } + + /* ======================================== FORGE START =====================================*/ + + // don't expose the EntityTrackerEntry directly so mods can't mess with the data in there as easily + /** + * Get all players tracking the given Entity. The Entity must be part of the World that this Tracker belongs to. + * @param entity the Entity + * @return all players tracking the Entity + */ + public Set getTrackingPlayers(Entity entity) + { + EntityTrackerEntry entry = (EntityTrackerEntry) trackedEntityHashTable.lookup(entity.getEntityId()); + if (entry == null) + return java.util.Collections.emptySet(); + else + return java.util.Collections.unmodifiableSet(entry.trackingPlayers); + } + + /* ======================================== FORGE END =====================================*/ + + public void sendToTrackingAndSelf(Entity entityIn, Packet packetIn) + { + EntityTrackerEntry entitytrackerentry = this.trackedEntityHashTable.lookup(entityIn.getEntityId()); + + if (entitytrackerentry != null) + { + entitytrackerentry.sendToTrackingAndSelf(packetIn); + } + } + + public void removePlayerFromTrackers(EntityPlayerMP player) + { + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + entitytrackerentry.removeTrackedPlayerSymmetric(player); + } + } + + /** + * Send packets to player for every tracked entity in this chunk that is either leashed to something or someone, or + * has passengers + */ + public void sendLeashedEntitiesInChunk(EntityPlayerMP player, Chunk chunkIn) + { + List list = Lists.newArrayList(); + List list1 = Lists.newArrayList(); + + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + Entity entity = entitytrackerentry.getTrackedEntity(); + + if (entity != player && entity.chunkCoordX == chunkIn.x && entity.chunkCoordZ == chunkIn.z) + { + entitytrackerentry.updatePlayerEntity(player); + + if (entity instanceof EntityLiving && ((EntityLiving)entity).getLeashHolder() != null) + { + list.add(entity); + } + + if (!entity.getPassengers().isEmpty()) + { + list1.add(entity); + } + } + } + + if (!list.isEmpty()) + { + for (Entity entity1 : list) + { + player.connection.sendPacket(new SPacketEntityAttach(entity1, ((EntityLiving)entity1).getLeashHolder())); + } + } + + if (!list1.isEmpty()) + { + for (Entity entity2 : list1) + { + player.connection.sendPacket(new SPacketSetPassengers(entity2)); + } + } + } + + public void setViewDistance(int p_187252_1_) + { + this.maxTrackingDistanceThreshold = (p_187252_1_ - 1) * 16; + + for (EntityTrackerEntry entitytrackerentry : this.entries) + { + entitytrackerentry.setMaxRange(this.maxTrackingDistanceThreshold); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EntityTrackerEntry.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityTrackerEntry.java new file mode 100644 index 0000000..6babe45 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EntityTrackerEntry.java @@ -0,0 +1,712 @@ +package net.minecraft.entity; + +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.entity.ai.attributes.AttributeMap; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.passive.IAnimals; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketEntity; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketEntityEquipment; +import net.minecraft.network.play.server.SPacketEntityHeadLook; +import net.minecraft.network.play.server.SPacketEntityMetadata; +import net.minecraft.network.play.server.SPacketEntityProperties; +import net.minecraft.network.play.server.SPacketEntityTeleport; +import net.minecraft.network.play.server.SPacketEntityVelocity; +import net.minecraft.network.play.server.SPacketSetPassengers; +import net.minecraft.network.play.server.SPacketSpawnExperienceOrb; +import net.minecraft.network.play.server.SPacketSpawnMob; +import net.minecraft.network.play.server.SPacketSpawnObject; +import net.minecraft.network.play.server.SPacketSpawnPainting; +import net.minecraft.network.play.server.SPacketSpawnPlayer; +import net.minecraft.network.play.server.SPacketUseBed; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.storage.MapData; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityTrackerEntry +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The entity that this EntityTrackerEntry tracks. */ + private final Entity trackedEntity; + private final int range; + private int maxRange; + /** check for sync when ticks % updateFrequency==0 */ + private final int updateFrequency; + /** The encoded entity X position. */ + private long encodedPosX; + /** The encoded entity Y position. */ + private long encodedPosY; + /** The encoded entity Z position. */ + private long encodedPosZ; + /** The encoded entity yaw rotation. */ + private int encodedRotationYaw; + /** The encoded entity pitch rotation. */ + private int encodedRotationPitch; + private int lastHeadMotion; + private double lastTrackedEntityMotionX; + private double lastTrackedEntityMotionY; + private double motionZ; + public int updateCounter; + private double lastTrackedEntityPosX; + private double lastTrackedEntityPosY; + private double lastTrackedEntityPosZ; + private boolean updatedPlayerVisibility; + private final boolean sendVelocityUpdates; + /** + * every 400 ticks a full teleport packet is sent, rather than just a "move me +x" command, so that position + * remains fully synced. + */ + private int ticksSinceLastForcedTeleport; + private List passengers = Collections.emptyList(); + private boolean ridingEntity; + private boolean onGround; + public boolean playerEntitiesUpdated; + /** Holds references to all the players that are currently receiving position updates for this entity. */ + public final Set trackingPlayers = Sets.newHashSet(); + + public EntityTrackerEntry(Entity entityIn, int rangeIn, int maxRangeIn, int updateFrequencyIn, boolean sendVelocityUpdatesIn) + { + this.trackedEntity = entityIn; + this.range = rangeIn; + this.maxRange = maxRangeIn; + this.updateFrequency = updateFrequencyIn; + this.sendVelocityUpdates = sendVelocityUpdatesIn; + this.encodedPosX = EntityTracker.getPositionLong(entityIn.posX); + this.encodedPosY = EntityTracker.getPositionLong(entityIn.posY); + this.encodedPosZ = EntityTracker.getPositionLong(entityIn.posZ); + this.encodedRotationYaw = MathHelper.floor(entityIn.rotationYaw * 256.0F / 360.0F); + this.encodedRotationPitch = MathHelper.floor(entityIn.rotationPitch * 256.0F / 360.0F); + this.lastHeadMotion = MathHelper.floor(entityIn.getRotationYawHead() * 256.0F / 360.0F); + this.onGround = entityIn.onGround; + } + + public boolean equals(Object p_equals_1_) + { + if (p_equals_1_ instanceof EntityTrackerEntry) + { + return ((EntityTrackerEntry)p_equals_1_).trackedEntity.getEntityId() == this.trackedEntity.getEntityId(); + } + else + { + return false; + } + } + + public int hashCode() + { + return this.trackedEntity.getEntityId(); + } + + public void updatePlayerList(List players) + { + this.playerEntitiesUpdated = false; + + if (!this.updatedPlayerVisibility || this.trackedEntity.getDistanceSq(this.lastTrackedEntityPosX, this.lastTrackedEntityPosY, this.lastTrackedEntityPosZ) > 16.0D) + { + this.lastTrackedEntityPosX = this.trackedEntity.posX; + this.lastTrackedEntityPosY = this.trackedEntity.posY; + this.lastTrackedEntityPosZ = this.trackedEntity.posZ; + this.updatedPlayerVisibility = true; + this.playerEntitiesUpdated = true; + this.updatePlayerEntities(players); + } + + List list = this.trackedEntity.getPassengers(); + + if (!list.equals(this.passengers)) + { + this.passengers = list; + this.sendPacketToTrackedPlayers(new SPacketSetPassengers(this.trackedEntity)); + } + + if (this.trackedEntity instanceof EntityItemFrame && this.updateCounter % 10 == 0) + { + EntityItemFrame entityitemframe = (EntityItemFrame)this.trackedEntity; + ItemStack itemstack = entityitemframe.getDisplayedItem(); + + if (itemstack.getItem() instanceof ItemMap) + { + MapData mapdata = ((ItemMap) itemstack.getItem()).getMapData(itemstack, this.trackedEntity.world); + + for (EntityPlayer entityplayer : players) + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)entityplayer; + mapdata.updateVisiblePlayers(entityplayermp, itemstack); + Packet packet = ((ItemMap) itemstack.getItem()).createMapDataPacket(itemstack, this.trackedEntity.world, entityplayermp); + + if (packet != null) + { + entityplayermp.connection.sendPacket(packet); + } + } + } + + this.sendMetadata(); + } + + if (this.updateCounter % this.updateFrequency == 0 || this.trackedEntity.isAirBorne || this.trackedEntity.getDataManager().isDirty()) + { + if (this.trackedEntity.isRiding()) + { + int j1 = MathHelper.floor(this.trackedEntity.rotationYaw * 256.0F / 360.0F); + int l1 = MathHelper.floor(this.trackedEntity.rotationPitch * 256.0F / 360.0F); + boolean flag3 = Math.abs(j1 - this.encodedRotationYaw) >= 1 || Math.abs(l1 - this.encodedRotationPitch) >= 1; + + if (flag3) + { + this.sendPacketToTrackedPlayers(new SPacketEntity.S16PacketEntityLook(this.trackedEntity.getEntityId(), (byte)j1, (byte)l1, this.trackedEntity.onGround)); + this.encodedRotationYaw = j1; + this.encodedRotationPitch = l1; + } + + this.encodedPosX = EntityTracker.getPositionLong(this.trackedEntity.posX); + this.encodedPosY = EntityTracker.getPositionLong(this.trackedEntity.posY); + this.encodedPosZ = EntityTracker.getPositionLong(this.trackedEntity.posZ); + this.sendMetadata(); + this.ridingEntity = true; + } + else + { + ++this.ticksSinceLastForcedTeleport; + long i1 = EntityTracker.getPositionLong(this.trackedEntity.posX); + long i2 = EntityTracker.getPositionLong(this.trackedEntity.posY); + long j2 = EntityTracker.getPositionLong(this.trackedEntity.posZ); + int k2 = MathHelper.floor(this.trackedEntity.rotationYaw * 256.0F / 360.0F); + int i = MathHelper.floor(this.trackedEntity.rotationPitch * 256.0F / 360.0F); + long j = i1 - this.encodedPosX; + long k = i2 - this.encodedPosY; + long l = j2 - this.encodedPosZ; + Packet packet1 = null; + boolean flag = j * j + k * k + l * l >= 128L || this.updateCounter % 60 == 0; + boolean flag1 = Math.abs(k2 - this.encodedRotationYaw) >= 1 || Math.abs(i - this.encodedRotationPitch) >= 1; + + if (this.updateCounter > 0 || this.trackedEntity instanceof EntityArrow) + { + if (j >= -32768L && j < 32768L && k >= -32768L && k < 32768L && l >= -32768L && l < 32768L && this.ticksSinceLastForcedTeleport <= 400 && !this.ridingEntity && this.onGround == this.trackedEntity.onGround) + { + if ((!flag || !flag1) && !(this.trackedEntity instanceof EntityArrow)) + { + if (flag) + { + packet1 = new SPacketEntity.S15PacketEntityRelMove(this.trackedEntity.getEntityId(), j, k, l, this.trackedEntity.onGround); + } + else if (flag1) + { + packet1 = new SPacketEntity.S16PacketEntityLook(this.trackedEntity.getEntityId(), (byte)k2, (byte)i, this.trackedEntity.onGround); + } + } + else + { + packet1 = new SPacketEntity.S17PacketEntityLookMove(this.trackedEntity.getEntityId(), j, k, l, (byte)k2, (byte)i, this.trackedEntity.onGround); + } + } + else + { + this.onGround = this.trackedEntity.onGround; + this.ticksSinceLastForcedTeleport = 0; + this.resetPlayerVisibility(); + packet1 = new SPacketEntityTeleport(this.trackedEntity); + } + } + + boolean flag2 = this.sendVelocityUpdates; + + if (this.trackedEntity instanceof EntityLivingBase && ((EntityLivingBase)this.trackedEntity).isElytraFlying()) + { + flag2 = true; + } + + if (flag2 && this.updateCounter > 0) + { + double d0 = this.trackedEntity.motionX - this.lastTrackedEntityMotionX; + double d1 = this.trackedEntity.motionY - this.lastTrackedEntityMotionY; + double d2 = this.trackedEntity.motionZ - this.motionZ; + double d3 = 0.02D; + double d4 = d0 * d0 + d1 * d1 + d2 * d2; + + if (d4 > 4.0E-4D || d4 > 0.0D && this.trackedEntity.motionX == 0.0D && this.trackedEntity.motionY == 0.0D && this.trackedEntity.motionZ == 0.0D) + { + this.lastTrackedEntityMotionX = this.trackedEntity.motionX; + this.lastTrackedEntityMotionY = this.trackedEntity.motionY; + this.motionZ = this.trackedEntity.motionZ; + this.sendPacketToTrackedPlayers(new SPacketEntityVelocity(this.trackedEntity.getEntityId(), this.lastTrackedEntityMotionX, this.lastTrackedEntityMotionY, this.motionZ)); + } + } + + if (packet1 != null) + { + this.sendPacketToTrackedPlayers(packet1); + } + + this.sendMetadata(); + + if (flag) + { + this.encodedPosX = i1; + this.encodedPosY = i2; + this.encodedPosZ = j2; + } + + if (flag1) + { + this.encodedRotationYaw = k2; + this.encodedRotationPitch = i; + } + + this.ridingEntity = false; + } + + int k1 = MathHelper.floor(this.trackedEntity.getRotationYawHead() * 256.0F / 360.0F); + + if (Math.abs(k1 - this.lastHeadMotion) >= 1) + { + this.sendPacketToTrackedPlayers(new SPacketEntityHeadLook(this.trackedEntity, (byte)k1)); + this.lastHeadMotion = k1; + } + + this.trackedEntity.isAirBorne = false; + } + + ++this.updateCounter; + + if (this.trackedEntity.velocityChanged) + { + this.sendToTrackingAndSelf(new SPacketEntityVelocity(this.trackedEntity)); + this.trackedEntity.velocityChanged = false; + } + } + + /** + * Sends the entity metadata (DataWatcher) and attributes to all players tracking this entity, including the entity + * itself if a player. + */ + private void sendMetadata() + { + EntityDataManager entitydatamanager = this.trackedEntity.getDataManager(); + + if (entitydatamanager.isDirty()) + { + this.sendToTrackingAndSelf(new SPacketEntityMetadata(this.trackedEntity.getEntityId(), entitydatamanager, false)); + } + + if (this.trackedEntity instanceof EntityLivingBase) + { + AttributeMap attributemap = (AttributeMap)((EntityLivingBase)this.trackedEntity).getAttributeMap(); + Set set = attributemap.getDirtyInstances(); + + if (!set.isEmpty()) + { + this.sendToTrackingAndSelf(new SPacketEntityProperties(this.trackedEntity.getEntityId(), set)); + } + + set.clear(); + } + } + + /** + * Send the given packet to all players tracking this entity. + */ + public void sendPacketToTrackedPlayers(Packet packetIn) + { + for (EntityPlayerMP entityplayermp : this.trackingPlayers) + { + entityplayermp.connection.sendPacket(packetIn); + } + } + + public void sendToTrackingAndSelf(Packet packetIn) + { + this.sendPacketToTrackedPlayers(packetIn); + + if (this.trackedEntity instanceof EntityPlayerMP) + { + ((EntityPlayerMP)this.trackedEntity).connection.sendPacket(packetIn); + } + } + + public void sendDestroyEntityPacketToTrackedPlayers() + { + for (EntityPlayerMP entityplayermp : this.trackingPlayers) + { + this.trackedEntity.removeTrackingPlayer(entityplayermp); + entityplayermp.removeEntity(this.trackedEntity); + } + } + + public void removeFromTrackedPlayers(EntityPlayerMP playerMP) + { + if (this.trackingPlayers.contains(playerMP)) + { + this.trackedEntity.removeTrackingPlayer(playerMP); + playerMP.removeEntity(this.trackedEntity); + this.trackingPlayers.remove(playerMP); + } + } + + public void updatePlayerEntity(EntityPlayerMP playerMP) + { + if (playerMP != this.trackedEntity) + { + if (this.isVisibleTo(playerMP)) + { + if (!this.trackingPlayers.contains(playerMP) && (this.isPlayerWatchingThisChunk(playerMP) || this.trackedEntity.forceSpawn)) + { + this.trackingPlayers.add(playerMP); + Packet packet = this.createSpawnPacket(); + playerMP.connection.sendPacket(packet); + + if (!this.trackedEntity.getDataManager().isEmpty()) + { + playerMP.connection.sendPacket(new SPacketEntityMetadata(this.trackedEntity.getEntityId(), this.trackedEntity.getDataManager(), true)); + } + + boolean flag = this.sendVelocityUpdates; + + if (this.trackedEntity instanceof EntityLivingBase) + { + AttributeMap attributemap = (AttributeMap)((EntityLivingBase)this.trackedEntity).getAttributeMap(); + Collection collection = attributemap.getWatchedAttributes(); + + if (!collection.isEmpty()) + { + playerMP.connection.sendPacket(new SPacketEntityProperties(this.trackedEntity.getEntityId(), collection)); + } + + if (((EntityLivingBase)this.trackedEntity).isElytraFlying()) + { + flag = true; + } + } + + this.lastTrackedEntityMotionX = this.trackedEntity.motionX; + this.lastTrackedEntityMotionY = this.trackedEntity.motionY; + this.motionZ = this.trackedEntity.motionZ; + + if (flag && !(packet instanceof SPacketSpawnMob)) + { + playerMP.connection.sendPacket(new SPacketEntityVelocity(this.trackedEntity.getEntityId(), this.trackedEntity.motionX, this.trackedEntity.motionY, this.trackedEntity.motionZ)); + } + + if (this.trackedEntity instanceof EntityLivingBase) + { + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + ItemStack itemstack = ((EntityLivingBase)this.trackedEntity).getItemStackFromSlot(entityequipmentslot); + + if (!itemstack.isEmpty()) + { + playerMP.connection.sendPacket(new SPacketEntityEquipment(this.trackedEntity.getEntityId(), entityequipmentslot, itemstack)); + } + } + } + + if (this.trackedEntity instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)this.trackedEntity; + + if (entityplayer.isPlayerSleeping()) + { + playerMP.connection.sendPacket(new SPacketUseBed(entityplayer, new BlockPos(this.trackedEntity))); + } + } + + if (this.trackedEntity instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)this.trackedEntity; + + for (PotionEffect potioneffect : entitylivingbase.getActivePotionEffects()) + { + playerMP.connection.sendPacket(new SPacketEntityEffect(this.trackedEntity.getEntityId(), potioneffect)); + } + } + + if (!this.trackedEntity.getPassengers().isEmpty()) + { + playerMP.connection.sendPacket(new SPacketSetPassengers(this.trackedEntity)); + } + + if (this.trackedEntity.isRiding()) + { + playerMP.connection.sendPacket(new SPacketSetPassengers(this.trackedEntity.getRidingEntity())); + } + + this.trackedEntity.addTrackingPlayer(playerMP); + playerMP.addEntity(this.trackedEntity); + net.minecraftforge.event.ForgeEventFactory.onStartEntityTracking(trackedEntity, playerMP); + } + } + else if (this.trackingPlayers.contains(playerMP)) + { + this.trackingPlayers.remove(playerMP); + this.trackedEntity.removeTrackingPlayer(playerMP); + playerMP.removeEntity(this.trackedEntity); + net.minecraftforge.event.ForgeEventFactory.onStopEntityTracking(trackedEntity, playerMP); + } + } + } + + public boolean isVisibleTo(EntityPlayerMP playerMP) + { + double d0 = playerMP.posX - (double)this.encodedPosX / 4096.0D; + double d1 = playerMP.posZ - (double)this.encodedPosZ / 4096.0D; + int i = Math.min(this.range, this.maxRange); + return d0 >= (double)(-i) && d0 <= (double)i && d1 >= (double)(-i) && d1 <= (double)i && this.trackedEntity.isSpectatedByPlayer(playerMP); + } + + private boolean isPlayerWatchingThisChunk(EntityPlayerMP playerMP) + { + return playerMP.getServerWorld().getPlayerChunkMap().isPlayerWatchingChunk(playerMP, this.trackedEntity.chunkCoordX, this.trackedEntity.chunkCoordZ); + } + + public void updatePlayerEntities(List players) + { + for (int i = 0; i < players.size(); ++i) + { + this.updatePlayerEntity((EntityPlayerMP)players.get(i)); + } + } + + /** + * Creates a spawn packet for the entity managed by this entry. + */ + private Packet createSpawnPacket() + { + if (this.trackedEntity.isDead) + { + LOGGER.warn("Fetching addPacket for removed entity"); + } + + Packet pkt = net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.getEntitySpawningPacket(this.trackedEntity); + if (pkt != null) return pkt; + + if (this.trackedEntity instanceof EntityPlayerMP) + { + return new SPacketSpawnPlayer((EntityPlayer)this.trackedEntity); + } + else if (this.trackedEntity instanceof IAnimals) + { + this.lastHeadMotion = MathHelper.floor(this.trackedEntity.getRotationYawHead() * 256.0F / 360.0F); + return new SPacketSpawnMob((EntityLivingBase)this.trackedEntity); + } + else if (this.trackedEntity instanceof EntityPainting) + { + return new SPacketSpawnPainting((EntityPainting)this.trackedEntity); + } + else if (this.trackedEntity instanceof EntityItem) + { + return new SPacketSpawnObject(this.trackedEntity, 2, 1); + } + else if (this.trackedEntity instanceof EntityMinecart) + { + EntityMinecart entityminecart = (EntityMinecart)this.trackedEntity; + return new SPacketSpawnObject(this.trackedEntity, 10, entityminecart.getType().getId()); + } + else if (this.trackedEntity instanceof EntityBoat) + { + return new SPacketSpawnObject(this.trackedEntity, 1); + } + else if (this.trackedEntity instanceof EntityXPOrb) + { + return new SPacketSpawnExperienceOrb((EntityXPOrb)this.trackedEntity); + } + else if (this.trackedEntity instanceof EntityFishHook) + { + Entity entity2 = ((EntityFishHook)this.trackedEntity).getAngler(); + return new SPacketSpawnObject(this.trackedEntity, 90, entity2 == null ? this.trackedEntity.getEntityId() : entity2.getEntityId()); + } + else if (this.trackedEntity instanceof EntitySpectralArrow) + { + Entity entity1 = ((EntitySpectralArrow)this.trackedEntity).shootingEntity; + return new SPacketSpawnObject(this.trackedEntity, 91, 1 + (entity1 == null ? this.trackedEntity.getEntityId() : entity1.getEntityId())); + } + else if (this.trackedEntity instanceof EntityTippedArrow) + { + Entity entity = ((EntityArrow)this.trackedEntity).shootingEntity; + return new SPacketSpawnObject(this.trackedEntity, 60, 1 + (entity == null ? this.trackedEntity.getEntityId() : entity.getEntityId())); + } + else if (this.trackedEntity instanceof EntitySnowball) + { + return new SPacketSpawnObject(this.trackedEntity, 61); + } + else if (this.trackedEntity instanceof EntityLlamaSpit) + { + return new SPacketSpawnObject(this.trackedEntity, 68); + } + else if (this.trackedEntity instanceof EntityPotion) + { + return new SPacketSpawnObject(this.trackedEntity, 73); + } + else if (this.trackedEntity instanceof EntityExpBottle) + { + return new SPacketSpawnObject(this.trackedEntity, 75); + } + else if (this.trackedEntity instanceof EntityEnderPearl) + { + return new SPacketSpawnObject(this.trackedEntity, 65); + } + else if (this.trackedEntity instanceof EntityEnderEye) + { + return new SPacketSpawnObject(this.trackedEntity, 72); + } + else if (this.trackedEntity instanceof EntityFireworkRocket) + { + return new SPacketSpawnObject(this.trackedEntity, 76); + } + else if (this.trackedEntity instanceof EntityFireball) + { + EntityFireball entityfireball = (EntityFireball)this.trackedEntity; + SPacketSpawnObject spacketspawnobject = null; + int i = 63; + + if (this.trackedEntity instanceof EntitySmallFireball) + { + i = 64; + } + else if (this.trackedEntity instanceof EntityDragonFireball) + { + i = 93; + } + else if (this.trackedEntity instanceof EntityWitherSkull) + { + i = 66; + } + + if (entityfireball.shootingEntity != null) + { + spacketspawnobject = new SPacketSpawnObject(this.trackedEntity, i, ((EntityFireball)this.trackedEntity).shootingEntity.getEntityId()); + } + else + { + spacketspawnobject = new SPacketSpawnObject(this.trackedEntity, i, 0); + } + + spacketspawnobject.setSpeedX((int)(entityfireball.accelerationX * 8000.0D)); + spacketspawnobject.setSpeedY((int)(entityfireball.accelerationY * 8000.0D)); + spacketspawnobject.setSpeedZ((int)(entityfireball.accelerationZ * 8000.0D)); + return spacketspawnobject; + } + else if (this.trackedEntity instanceof EntityShulkerBullet) + { + SPacketSpawnObject spacketspawnobject1 = new SPacketSpawnObject(this.trackedEntity, 67, 0); + spacketspawnobject1.setSpeedX((int)(this.trackedEntity.motionX * 8000.0D)); + spacketspawnobject1.setSpeedY((int)(this.trackedEntity.motionY * 8000.0D)); + spacketspawnobject1.setSpeedZ((int)(this.trackedEntity.motionZ * 8000.0D)); + return spacketspawnobject1; + } + else if (this.trackedEntity instanceof EntityEgg) + { + return new SPacketSpawnObject(this.trackedEntity, 62); + } + else if (this.trackedEntity instanceof EntityEvokerFangs) + { + return new SPacketSpawnObject(this.trackedEntity, 79); + } + else if (this.trackedEntity instanceof EntityTNTPrimed) + { + return new SPacketSpawnObject(this.trackedEntity, 50); + } + else if (this.trackedEntity instanceof EntityEnderCrystal) + { + return new SPacketSpawnObject(this.trackedEntity, 51); + } + else if (this.trackedEntity instanceof EntityFallingBlock) + { + EntityFallingBlock entityfallingblock = (EntityFallingBlock)this.trackedEntity; + return new SPacketSpawnObject(this.trackedEntity, 70, Block.getStateId(entityfallingblock.getBlock())); + } + else if (this.trackedEntity instanceof EntityArmorStand) + { + return new SPacketSpawnObject(this.trackedEntity, 78); + } + else if (this.trackedEntity instanceof EntityItemFrame) + { + EntityItemFrame entityitemframe = (EntityItemFrame)this.trackedEntity; + return new SPacketSpawnObject(this.trackedEntity, 71, entityitemframe.facingDirection.getHorizontalIndex(), entityitemframe.getHangingPosition()); + } + else if (this.trackedEntity instanceof EntityLeashKnot) + { + EntityLeashKnot entityleashknot = (EntityLeashKnot)this.trackedEntity; + return new SPacketSpawnObject(this.trackedEntity, 77, 0, entityleashknot.getHangingPosition()); + } + else if (this.trackedEntity instanceof EntityAreaEffectCloud) + { + return new SPacketSpawnObject(this.trackedEntity, 3); + } + else + { + throw new IllegalArgumentException("Don't know how to add " + this.trackedEntity.getClass() + "!"); + } + } + + /** + * Remove a tracked player from our list and tell the tracked player to destroy us from their world. + */ + public void removeTrackedPlayerSymmetric(EntityPlayerMP playerMP) + { + if (this.trackingPlayers.contains(playerMP)) + { + this.trackingPlayers.remove(playerMP); + this.trackedEntity.removeTrackingPlayer(playerMP); + playerMP.removeEntity(this.trackedEntity); + } + } + + public Entity getTrackedEntity() + { + return this.trackedEntity; + } + + public void setMaxRange(int maxRangeIn) + { + this.maxRange = maxRangeIn; + } + + public void resetPlayerVisibility() + { + this.updatedPlayerVisibility = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EnumCreatureAttribute.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EnumCreatureAttribute.java new file mode 100644 index 0000000..54fa465 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EnumCreatureAttribute.java @@ -0,0 +1,9 @@ +package net.minecraft.entity; + +public enum EnumCreatureAttribute +{ + UNDEFINED, + UNDEAD, + ARTHROPOD, + ILLAGER; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/EnumCreatureType.java b/build/tmp/recompileMc/sources/net/minecraft/entity/EnumCreatureType.java new file mode 100644 index 0000000..4a8ee90 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/EnumCreatureType.java @@ -0,0 +1,59 @@ +package net.minecraft.entity; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.passive.EntityAmbientCreature; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.passive.EntityWaterMob; +import net.minecraft.entity.passive.IAnimals; + +public enum EnumCreatureType +{ + MONSTER(IMob.class, 70, Material.AIR, false, false), + CREATURE(EntityAnimal.class, 10, Material.AIR, true, true), + AMBIENT(EntityAmbientCreature.class, 15, Material.AIR, true, false), + WATER_CREATURE(EntityWaterMob.class, 5, Material.WATER, true, false); + + private final Class creatureClass; + private final int maxNumberOfCreature; + private final Material creatureMaterial; + /** A flag indicating whether this creature type is peaceful. */ + private final boolean isPeacefulCreature; + /** Whether this creature type is an animal. */ + private final boolean isAnimal; + + private EnumCreatureType(Class creatureClassIn, int maxNumberOfCreatureIn, Material creatureMaterialIn, boolean isPeacefulCreatureIn, boolean isAnimalIn) + { + this.creatureClass = creatureClassIn; + this.maxNumberOfCreature = maxNumberOfCreatureIn; + this.creatureMaterial = creatureMaterialIn; + this.isPeacefulCreature = isPeacefulCreatureIn; + this.isAnimal = isAnimalIn; + } + + public Class getCreatureClass() + { + return this.creatureClass; + } + + public int getMaxNumberOfCreature() + { + return this.maxNumberOfCreature; + } + + /** + * Gets whether or not this creature type is peaceful. + */ + public boolean getPeacefulCreature() + { + return this.isPeacefulCreature; + } + + /** + * Return whether this creature type is an animal. + */ + public boolean getAnimal() + { + return this.isAnimal; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityLivingData.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityLivingData.java new file mode 100644 index 0000000..f111c18 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityLivingData.java @@ -0,0 +1,5 @@ +package net.minecraft.entity; + +public interface IEntityLivingData +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityMultiPart.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityMultiPart.java new file mode 100644 index 0000000..2879f46 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityMultiPart.java @@ -0,0 +1,11 @@ +package net.minecraft.entity; + +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public interface IEntityMultiPart +{ + World getWorld(); + + boolean attackEntityFromPart(MultiPartEntityPart dragonPart, DamageSource source, float damage); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityOwnable.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityOwnable.java new file mode 100644 index 0000000..888094e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IEntityOwnable.java @@ -0,0 +1,13 @@ +package net.minecraft.entity; + +import java.util.UUID; +import javax.annotation.Nullable; + +public interface IEntityOwnable +{ + @Nullable + UUID getOwnerId(); + + @Nullable + Entity getOwner(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IJumpingMount.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IJumpingMount.java new file mode 100644 index 0000000..189fa83 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IJumpingMount.java @@ -0,0 +1,16 @@ +package net.minecraft.entity; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IJumpingMount +{ + @SideOnly(Side.CLIENT) + void setJumpPower(int jumpPowerIn); + + boolean canJump(); + + void handleStartJump(int p_184775_1_); + + void handleStopJump(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IMerchant.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IMerchant.java new file mode 100644 index 0000000..daab0b1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IMerchant.java @@ -0,0 +1,43 @@ +package net.minecraft.entity; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IMerchant +{ + void setCustomer(@Nullable EntityPlayer player); + + @Nullable + EntityPlayer getCustomer(); + + @Nullable + MerchantRecipeList getRecipes(EntityPlayer player); + + @SideOnly(Side.CLIENT) + void setRecipes(@Nullable MerchantRecipeList recipeList); + + void useRecipe(MerchantRecipe recipe); + + /** + * Notifies the merchant of a possible merchantrecipe being fulfilled or not. Usually, this is just a sound byte + * being played depending if the suggested itemstack is not null. + */ + void verifySellingItem(ItemStack stack); + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + ITextComponent getDisplayName(); + + World getWorld(); + + BlockPos getPos(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/INpc.java b/build/tmp/recompileMc/sources/net/minecraft/entity/INpc.java new file mode 100644 index 0000000..2d877be --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/INpc.java @@ -0,0 +1,7 @@ +package net.minecraft.entity; + +import net.minecraft.entity.passive.IAnimals; + +public interface INpc extends IAnimals +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IProjectile.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IProjectile.java new file mode 100644 index 0000000..b5456ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IProjectile.java @@ -0,0 +1,9 @@ +package net.minecraft.entity; + +public interface IProjectile +{ + /** + * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction. + */ + void shoot(double x, double y, double z, float velocity, float inaccuracy); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/IRangedAttackMob.java b/build/tmp/recompileMc/sources/net/minecraft/entity/IRangedAttackMob.java new file mode 100644 index 0000000..0439850 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/IRangedAttackMob.java @@ -0,0 +1,11 @@ +package net.minecraft.entity; + +public interface IRangedAttackMob +{ + /** + * Attack the specified entity using a ranged attack. + */ + void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor); + + void setSwingingArms(boolean swingingArms); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/MoverType.java b/build/tmp/recompileMc/sources/net/minecraft/entity/MoverType.java new file mode 100644 index 0000000..1f5491b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/MoverType.java @@ -0,0 +1,10 @@ +package net.minecraft.entity; + +public enum MoverType +{ + SELF, + PLAYER, + PISTON, + SHULKER_BOX, + SHULKER; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/MultiPartEntityPart.java b/build/tmp/recompileMc/sources/net/minecraft/entity/MultiPartEntityPart.java new file mode 100644 index 0000000..8050e8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/MultiPartEntityPart.java @@ -0,0 +1,61 @@ +package net.minecraft.entity; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; + +public class MultiPartEntityPart extends Entity +{ + /** The dragon entity this dragon part belongs to */ + public final IEntityMultiPart parent; + public final String partName; + + public MultiPartEntityPart(IEntityMultiPart parent, String partName, float width, float height) + { + super(parent.getWorld()); + this.setSize(width, height); + this.parent = parent; + this.partName = partName; + } + + protected void entityInit() + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return true; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + return this.isEntityInvulnerable(source) ? false : this.parent.attackEntityFromPart(this, source, amount); + } + + /** + * Returns true if Entity argument is equal to this Entity + */ + public boolean isEntityEqual(Entity entityIn) + { + return this == entityIn || this.parent == entityIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/NpcMerchant.java b/build/tmp/recompileMc/sources/net/minecraft/entity/NpcMerchant.java new file mode 100644 index 0000000..9fe7238 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/NpcMerchant.java @@ -0,0 +1,85 @@ +package net.minecraft.entity; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryMerchant; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class NpcMerchant implements IMerchant +{ + /** Instance of Merchants Inventory. */ + private final InventoryMerchant merchantInventory; + /** This merchant's current player customer. */ + private final EntityPlayer customer; + /** The MerchantRecipeList instance. */ + private MerchantRecipeList recipeList; + private final ITextComponent name; + + public NpcMerchant(EntityPlayer customerIn, ITextComponent nameIn) + { + this.customer = customerIn; + this.name = nameIn; + this.merchantInventory = new InventoryMerchant(customerIn, this); + } + + @Nullable + public EntityPlayer getCustomer() + { + return this.customer; + } + + public void setCustomer(@Nullable EntityPlayer player) + { + } + + @Nullable + public MerchantRecipeList getRecipes(EntityPlayer player) + { + return this.recipeList; + } + + public void setRecipes(@Nullable MerchantRecipeList recipeList) + { + this.recipeList = recipeList; + } + + public void useRecipe(MerchantRecipe recipe) + { + recipe.incrementToolUses(); + } + + /** + * Notifies the merchant of a possible merchantrecipe being fulfilled or not. Usually, this is just a sound byte + * being played depending if the suggested itemstack is not null. + */ + public void verifySellingItem(ItemStack stack) + { + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.name != null ? this.name : new TextComponentTranslation("entity.Villager.name", new Object[0])); + } + + public World getWorld() + { + return this.customer.world; + } + + public BlockPos getPos() + { + return new BlockPos(this.customer); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/SharedMonsterAttributes.java b/build/tmp/recompileMc/sources/net/minecraft/entity/SharedMonsterAttributes.java new file mode 100644 index 0000000..4556e21 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/SharedMonsterAttributes.java @@ -0,0 +1,150 @@ +package net.minecraft.entity; + +import java.util.Collection; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.ai.attributes.RangedAttribute; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class SharedMonsterAttributes +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final IAttribute MAX_HEALTH = (new RangedAttribute((IAttribute)null, "generic.maxHealth", 20.0D, Float.MIN_VALUE, 1024.0D)).setDescription("Max Health").setShouldWatch(true); // Forge: set smallest max-health value to fix MC-119183. This gets rounded to float so we use the smallest positive float value. + public static final IAttribute FOLLOW_RANGE = (new RangedAttribute((IAttribute)null, "generic.followRange", 32.0D, 0.0D, 2048.0D)).setDescription("Follow Range"); + public static final IAttribute KNOCKBACK_RESISTANCE = (new RangedAttribute((IAttribute)null, "generic.knockbackResistance", 0.0D, 0.0D, 1.0D)).setDescription("Knockback Resistance"); + public static final IAttribute MOVEMENT_SPEED = (new RangedAttribute((IAttribute)null, "generic.movementSpeed", 0.699999988079071D, 0.0D, 1024.0D)).setDescription("Movement Speed").setShouldWatch(true); + public static final IAttribute FLYING_SPEED = (new RangedAttribute((IAttribute)null, "generic.flyingSpeed", 0.4000000059604645D, 0.0D, 1024.0D)).setDescription("Flying Speed").setShouldWatch(true); + public static final IAttribute ATTACK_DAMAGE = new RangedAttribute((IAttribute)null, "generic.attackDamage", 2.0D, 0.0D, 2048.0D); + public static final IAttribute ATTACK_SPEED = (new RangedAttribute((IAttribute)null, "generic.attackSpeed", 4.0D, 0.0D, 1024.0D)).setShouldWatch(true); + public static final IAttribute ARMOR = (new RangedAttribute((IAttribute)null, "generic.armor", 0.0D, 0.0D, 30.0D)).setShouldWatch(true); + public static final IAttribute ARMOR_TOUGHNESS = (new RangedAttribute((IAttribute)null, "generic.armorToughness", 0.0D, 0.0D, 20.0D)).setShouldWatch(true); + public static final IAttribute LUCK = (new RangedAttribute((IAttribute)null, "generic.luck", 0.0D, -1024.0D, 1024.0D)).setShouldWatch(true); + + /** + * Creates an NBTTagList from a BaseAttributeMap, including all its AttributeInstances + */ + public static NBTTagList writeBaseAttributeMapToNBT(AbstractAttributeMap map) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (IAttributeInstance iattributeinstance : map.getAllAttributes()) + { + nbttaglist.appendTag(writeAttributeInstanceToNBT(iattributeinstance)); + } + + return nbttaglist; + } + + /** + * Creates an NBTTagCompound from an AttributeInstance, including its AttributeModifiers + */ + private static NBTTagCompound writeAttributeInstanceToNBT(IAttributeInstance instance) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + IAttribute iattribute = instance.getAttribute(); + nbttagcompound.setString("Name", iattribute.getName()); + nbttagcompound.setDouble("Base", instance.getBaseValue()); + Collection collection = instance.getModifiers(); + + if (collection != null && !collection.isEmpty()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (AttributeModifier attributemodifier : collection) + { + if (attributemodifier.isSaved()) + { + nbttaglist.appendTag(writeAttributeModifierToNBT(attributemodifier)); + } + } + + nbttagcompound.setTag("Modifiers", nbttaglist); + } + + return nbttagcompound; + } + + /** + * Creates an NBTTagCompound from an AttributeModifier + */ + public static NBTTagCompound writeAttributeModifierToNBT(AttributeModifier modifier) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("Name", modifier.getName()); + nbttagcompound.setDouble("Amount", modifier.getAmount()); + nbttagcompound.setInteger("Operation", modifier.getOperation()); + nbttagcompound.setUniqueId("UUID", modifier.getID()); + return nbttagcompound; + } + + public static void setAttributeModifiers(AbstractAttributeMap map, NBTTagList list) + { + for (int i = 0; i < list.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = list.getCompoundTagAt(i); + IAttributeInstance iattributeinstance = map.getAttributeInstanceByName(nbttagcompound.getString("Name")); + + if (iattributeinstance == null) + { + LOGGER.warn("Ignoring unknown attribute '{}'", (Object)nbttagcompound.getString("Name")); + } + else + { + applyModifiersToAttributeInstance(iattributeinstance, nbttagcompound); + } + } + } + + private static void applyModifiersToAttributeInstance(IAttributeInstance instance, NBTTagCompound compound) + { + instance.setBaseValue(compound.getDouble("Base")); + + if (compound.hasKey("Modifiers", 9)) + { + NBTTagList nbttaglist = compound.getTagList("Modifiers", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + AttributeModifier attributemodifier = readAttributeModifierFromNBT(nbttaglist.getCompoundTagAt(i)); + + if (attributemodifier != null) + { + AttributeModifier attributemodifier1 = instance.getModifier(attributemodifier.getID()); + + if (attributemodifier1 != null) + { + instance.removeModifier(attributemodifier1); + } + + instance.applyModifier(attributemodifier); + } + } + } + } + + /** + * Creates an AttributeModifier from an NBTTagCompound + */ + @Nullable + public static AttributeModifier readAttributeModifierFromNBT(NBTTagCompound compound) + { + UUID uuid = compound.getUniqueId("UUID"); + + try + { + return new AttributeModifier(uuid, compound.getString("Name"), compound.getDouble("Amount"), compound.getInteger("Operation")); + } + catch (Exception exception) + { + LOGGER.warn("Unable to create attribute: {}", (Object)exception.getMessage()); + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackMelee.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackMelee.java new file mode 100644 index 0000000..16a9634 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackMelee.java @@ -0,0 +1,205 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.pathfinding.Path; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityAIAttackMelee extends EntityAIBase +{ + World world; + protected EntityCreature attacker; + /** An amount of decrementing ticks that allows the entity to attack once the tick reaches 0. */ + protected int attackTick; + /** The speed with which the mob will approach the target */ + double speedTowardsTarget; + /** When true, the mob will continue chasing its target, even if it can't find a path to them right now. */ + boolean longMemory; + /** The PathEntity of our entity. */ + Path path; + private int delayCounter; + private double targetX; + private double targetY; + private double targetZ; + protected final int attackInterval = 20; + private int failedPathFindingPenalty = 0; + private boolean canPenalize = false; + + public EntityAIAttackMelee(EntityCreature creature, double speedIn, boolean useLongMemory) + { + this.attacker = creature; + this.world = creature.world; + this.speedTowardsTarget = speedIn; + this.longMemory = useLongMemory; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else + { + if (canPenalize) + { + if (--this.delayCounter <= 0) + { + this.path = this.attacker.getNavigator().getPathToEntityLiving(entitylivingbase); + this.delayCounter = 4 + this.attacker.getRNG().nextInt(7); + return this.path != null; + } + else + { + return true; + } + } + this.path = this.attacker.getNavigator().getPathToEntityLiving(entitylivingbase); + + if (this.path != null) + { + return true; + } + else + { + return this.getAttackReachSqr(entitylivingbase) >= this.attacker.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else if (!this.longMemory) + { + return !this.attacker.getNavigator().noPath(); + } + else if (!this.attacker.isWithinHomeDistanceFromPosition(new BlockPos(entitylivingbase))) + { + return false; + } + else + { + return !(entitylivingbase instanceof EntityPlayer) || !((EntityPlayer)entitylivingbase).isSpectator() && !((EntityPlayer)entitylivingbase).isCreative(); + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.attacker.getNavigator().setPath(this.path, this.speedTowardsTarget); + this.delayCounter = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); + + if (entitylivingbase instanceof EntityPlayer && (((EntityPlayer)entitylivingbase).isSpectator() || ((EntityPlayer)entitylivingbase).isCreative())) + { + this.attacker.setAttackTarget((EntityLivingBase)null); + } + + this.attacker.getNavigator().clearPath(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + EntityLivingBase entitylivingbase = this.attacker.getAttackTarget(); + this.attacker.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F); + double d0 = this.attacker.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); + --this.delayCounter; + + if ((this.longMemory || this.attacker.getEntitySenses().canSee(entitylivingbase)) && this.delayCounter <= 0 && (this.targetX == 0.0D && this.targetY == 0.0D && this.targetZ == 0.0D || entitylivingbase.getDistanceSq(this.targetX, this.targetY, this.targetZ) >= 1.0D || this.attacker.getRNG().nextFloat() < 0.05F)) + { + this.targetX = entitylivingbase.posX; + this.targetY = entitylivingbase.getEntityBoundingBox().minY; + this.targetZ = entitylivingbase.posZ; + this.delayCounter = 4 + this.attacker.getRNG().nextInt(7); + + if (this.canPenalize) + { + this.delayCounter += failedPathFindingPenalty; + if (this.attacker.getNavigator().getPath() != null) + { + net.minecraft.pathfinding.PathPoint finalPathPoint = this.attacker.getNavigator().getPath().getFinalPathPoint(); + if (finalPathPoint != null && entitylivingbase.getDistanceSq(finalPathPoint.x, finalPathPoint.y, finalPathPoint.z) < 1) + failedPathFindingPenalty = 0; + else + failedPathFindingPenalty += 10; + } + else + { + failedPathFindingPenalty += 10; + } + } + + if (d0 > 1024.0D) + { + this.delayCounter += 10; + } + else if (d0 > 256.0D) + { + this.delayCounter += 5; + } + + if (!this.attacker.getNavigator().tryMoveToEntityLiving(entitylivingbase, this.speedTowardsTarget)) + { + this.delayCounter += 15; + } + } + + this.attackTick = Math.max(this.attackTick - 1, 0); + this.checkAndPerformAttack(entitylivingbase, d0); + } + + protected void checkAndPerformAttack(EntityLivingBase p_190102_1_, double p_190102_2_) + { + double d0 = this.getAttackReachSqr(p_190102_1_); + + if (p_190102_2_ <= d0 && this.attackTick <= 0) + { + this.attackTick = 20; + this.attacker.swingArm(EnumHand.MAIN_HAND); + this.attacker.attackEntityAsMob(p_190102_1_); + } + } + + protected double getAttackReachSqr(EntityLivingBase attackTarget) + { + return (double)(this.attacker.width * 2.0F * this.attacker.width * 2.0F + attackTarget.width); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackRanged.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackRanged.java new file mode 100644 index 0000000..f5ac1f3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackRanged.java @@ -0,0 +1,136 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.util.math.MathHelper; + +public class EntityAIAttackRanged extends EntityAIBase +{ + /** The entity the AI instance has been applied to */ + private final EntityLiving entityHost; + /** The entity (as a RangedAttackMob) the AI instance has been applied to. */ + private final IRangedAttackMob rangedAttackEntityHost; + private EntityLivingBase attackTarget; + /** + * A decrementing tick that spawns a ranged attack once this value reaches 0. It is then set back to the + * maxRangedAttackTime. + */ + private int rangedAttackTime; + private final double entityMoveSpeed; + private int seeTime; + private final int attackIntervalMin; + /** The maximum time the AI has to wait before peforming another ranged attack. */ + private final int maxRangedAttackTime; + private final float attackRadius; + private final float maxAttackDistance; + + public EntityAIAttackRanged(IRangedAttackMob attacker, double movespeed, int maxAttackTime, float maxAttackDistanceIn) + { + this(attacker, movespeed, maxAttackTime, maxAttackTime, maxAttackDistanceIn); + } + + public EntityAIAttackRanged(IRangedAttackMob attacker, double movespeed, int p_i1650_4_, int maxAttackTime, float maxAttackDistanceIn) + { + this.rangedAttackTime = -1; + + if (!(attacker instanceof EntityLivingBase)) + { + throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); + } + else + { + this.rangedAttackEntityHost = attacker; + this.entityHost = (EntityLiving)attacker; + this.entityMoveSpeed = movespeed; + this.attackIntervalMin = p_i1650_4_; + this.maxRangedAttackTime = maxAttackTime; + this.attackRadius = maxAttackDistanceIn; + this.maxAttackDistance = maxAttackDistanceIn * maxAttackDistanceIn; + this.setMutexBits(3); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.entityHost.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else + { + this.attackTarget = entitylivingbase; + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.shouldExecute() || !this.entityHost.getNavigator().noPath(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.attackTarget = null; + this.seeTime = 0; + this.rangedAttackTime = -1; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + double d0 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.getEntityBoundingBox().minY, this.attackTarget.posZ); + boolean flag = this.entityHost.getEntitySenses().canSee(this.attackTarget); + + if (flag) + { + ++this.seeTime; + } + else + { + this.seeTime = 0; + } + + if (d0 <= (double)this.maxAttackDistance && this.seeTime >= 20) + { + this.entityHost.getNavigator().clearPath(); + } + else + { + this.entityHost.getNavigator().tryMoveToEntityLiving(this.attackTarget, this.entityMoveSpeed); + } + + this.entityHost.getLookHelper().setLookPositionWithEntity(this.attackTarget, 30.0F, 30.0F); + + if (--this.rangedAttackTime == 0) + { + if (!flag) + { + return; + } + + float f = MathHelper.sqrt(d0) / this.attackRadius; + float lvt_5_1_ = MathHelper.clamp(f, 0.1F, 1.0F); + this.rangedAttackEntityHost.attackEntityWithRangedAttack(this.attackTarget, lvt_5_1_); + this.rangedAttackTime = MathHelper.floor(f * (float)(this.maxRangedAttackTime - this.attackIntervalMin) + (float)this.attackIntervalMin); + } + else if (this.rangedAttackTime < 0) + { + float f2 = MathHelper.sqrt(d0) / this.attackRadius; + this.rangedAttackTime = MathHelper.floor(f2 * (float)(this.maxRangedAttackTime - this.attackIntervalMin) + (float)this.attackIntervalMin); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackRangedBow.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackRangedBow.java new file mode 100644 index 0000000..7b1c21b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAttackRangedBow.java @@ -0,0 +1,174 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.init.Items; +import net.minecraft.item.ItemBow; +import net.minecraft.util.EnumHand; + +public class EntityAIAttackRangedBow extends EntityAIBase +{ + private final T entity; + private final double moveSpeedAmp; + private int attackCooldown; + private final float maxAttackDistance; + private int attackTime = -1; + private int seeTime; + private boolean strafingClockwise; + private boolean strafingBackwards; + private int strafingTime = -1; + + public EntityAIAttackRangedBow(T p_i47515_1_, double p_i47515_2_, int p_i47515_4_, float p_i47515_5_) + { + this.entity = p_i47515_1_; + this.moveSpeedAmp = p_i47515_2_; + this.attackCooldown = p_i47515_4_; + this.maxAttackDistance = p_i47515_5_ * p_i47515_5_; + this.setMutexBits(3); + } + + public void setAttackCooldown(int p_189428_1_) + { + this.attackCooldown = p_189428_1_; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.entity.getAttackTarget() == null ? false : this.isBowInMainhand(); + } + + protected boolean isBowInMainhand() + { + return !this.entity.getHeldItemMainhand().isEmpty() && this.entity.getHeldItemMainhand().getItem() == Items.BOW; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return (this.shouldExecute() || !this.entity.getNavigator().noPath()) && this.isBowInMainhand(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + ((IRangedAttackMob)this.entity).setSwingingArms(true); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + ((IRangedAttackMob)this.entity).setSwingingArms(false); + this.seeTime = 0; + this.attackTime = -1; + this.entity.resetActiveHand(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + EntityLivingBase entitylivingbase = this.entity.getAttackTarget(); + + if (entitylivingbase != null) + { + double d0 = this.entity.getDistanceSq(entitylivingbase.posX, entitylivingbase.getEntityBoundingBox().minY, entitylivingbase.posZ); + boolean flag = this.entity.getEntitySenses().canSee(entitylivingbase); + boolean flag1 = this.seeTime > 0; + + if (flag != flag1) + { + this.seeTime = 0; + } + + if (flag) + { + ++this.seeTime; + } + else + { + --this.seeTime; + } + + if (d0 <= (double)this.maxAttackDistance && this.seeTime >= 20) + { + this.entity.getNavigator().clearPath(); + ++this.strafingTime; + } + else + { + this.entity.getNavigator().tryMoveToEntityLiving(entitylivingbase, this.moveSpeedAmp); + this.strafingTime = -1; + } + + if (this.strafingTime >= 20) + { + if ((double)this.entity.getRNG().nextFloat() < 0.3D) + { + this.strafingClockwise = !this.strafingClockwise; + } + + if ((double)this.entity.getRNG().nextFloat() < 0.3D) + { + this.strafingBackwards = !this.strafingBackwards; + } + + this.strafingTime = 0; + } + + if (this.strafingTime > -1) + { + if (d0 > (double)(this.maxAttackDistance * 0.75F)) + { + this.strafingBackwards = false; + } + else if (d0 < (double)(this.maxAttackDistance * 0.25F)) + { + this.strafingBackwards = true; + } + + this.entity.getMoveHelper().strafe(this.strafingBackwards ? -0.5F : 0.5F, this.strafingClockwise ? 0.5F : -0.5F); + this.entity.faceEntity(entitylivingbase, 30.0F, 30.0F); + } + else + { + this.entity.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F); + } + + if (this.entity.isHandActive()) + { + if (!flag && this.seeTime < -60) + { + this.entity.resetActiveHand(); + } + else if (flag) + { + int i = this.entity.getItemInUseMaxCount(); + + if (i >= 20) + { + this.entity.resetActiveHand(); + ((IRangedAttackMob)this.entity).attackEntityWithRangedAttack(entitylivingbase, ItemBow.getArrowVelocity(i)); + this.attackTime = this.attackCooldown; + } + } + } + else if (--this.attackTime <= 0 && this.seeTime >= -60) + { + this.entity.setActiveHand(EnumHand.MAIN_HAND); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAvoidEntity.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAvoidEntity.java new file mode 100644 index 0000000..14e4f56 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIAvoidEntity.java @@ -0,0 +1,125 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.math.Vec3d; + +public class EntityAIAvoidEntity extends EntityAIBase +{ + private final Predicate canBeSeenSelector; + /** The entity we are attached to */ + protected EntityCreature entity; + private final double farSpeed; + private final double nearSpeed; + protected T closestLivingEntity; + private final float avoidDistance; + /** The PathEntity of our entity */ + private Path path; + /** The PathNavigate of our entity */ + private final PathNavigate navigation; + /** Class of entity this behavior seeks to avoid */ + private final Class classToAvoid; + private final Predicate avoidTargetSelector; + + public EntityAIAvoidEntity(EntityCreature entityIn, Class classToAvoidIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn) + { + this(entityIn, classToAvoidIn, Predicates.alwaysTrue(), avoidDistanceIn, farSpeedIn, nearSpeedIn); + } + + public EntityAIAvoidEntity(EntityCreature entityIn, Class classToAvoidIn, Predicate avoidTargetSelectorIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn) + { + this.canBeSeenSelector = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_.isEntityAlive() && EntityAIAvoidEntity.this.entity.getEntitySenses().canSee(p_apply_1_) && !EntityAIAvoidEntity.this.entity.isOnSameTeam(p_apply_1_); + } + }; + this.entity = entityIn; + this.classToAvoid = classToAvoidIn; + this.avoidTargetSelector = avoidTargetSelectorIn; + this.avoidDistance = avoidDistanceIn; + this.farSpeed = farSpeedIn; + this.nearSpeed = nearSpeedIn; + this.navigation = entityIn.getNavigator(); + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + List list = this.entity.world.getEntitiesWithinAABB(this.classToAvoid, this.entity.getEntityBoundingBox().grow((double)this.avoidDistance, 3.0D, (double)this.avoidDistance), Predicates.and(EntitySelectors.CAN_AI_TARGET, this.canBeSeenSelector, this.avoidTargetSelector)); + + if (list.isEmpty()) + { + return false; + } + else + { + this.closestLivingEntity = list.get(0); + Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockAwayFrom(this.entity, 16, 7, new Vec3d(this.closestLivingEntity.posX, this.closestLivingEntity.posY, this.closestLivingEntity.posZ)); + + if (vec3d == null) + { + return false; + } + else if (this.closestLivingEntity.getDistanceSq(vec3d.x, vec3d.y, vec3d.z) < this.closestLivingEntity.getDistanceSq(this.entity)) + { + return false; + } + else + { + this.path = this.navigation.getPathToXYZ(vec3d.x, vec3d.y, vec3d.z); + return this.path != null; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.navigation.noPath(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.navigation.setPath(this.path, this.farSpeed); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.closestLivingEntity = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.entity.getDistanceSq(this.closestLivingEntity) < 49.0D) + { + this.entity.getNavigator().setSpeed(this.nearSpeed); + } + else + { + this.entity.getNavigator().setSpeed(this.farSpeed); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBase.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBase.java new file mode 100644 index 0000000..da01319 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBase.java @@ -0,0 +1,72 @@ +package net.minecraft.entity.ai; + +public abstract class EntityAIBase +{ + /** + * A bitmask telling which other tasks may not run concurrently. The test is a simple bitwise AND - if it yields + * zero, the two tasks may run concurrently, if not - they must run exclusively from each other. + */ + private int mutexBits; + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public abstract boolean shouldExecute(); + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.shouldExecute(); + } + + /** + * Determine if this AI Task is interruptible by a higher (= lower value) priority task. All vanilla AITask have + * this value set to true. + */ + public boolean isInterruptible() + { + return true; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + } + + /** + * Sets the mutex bitflags, see getMutexBits. Flag 1 for motion, flag 2 for look/head movement, flag 4 for + * swimming/misc. Flags can be OR'ed. + */ + public void setMutexBits(int mutexBitsIn) + { + this.mutexBits = mutexBitsIn; + } + + /** + * Get what actions this task will take that may potentially conflict with other tasks. The test is a simple bitwise + * AND - if it yields zero, the two tasks may run concurrently, if not - they must run exclusively from each other. + * See setMutextBits. + */ + public int getMutexBits() + { + return this.mutexBits; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBeg.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBeg.java new file mode 100644 index 0000000..c0e9c5a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBeg.java @@ -0,0 +1,103 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +public class EntityAIBeg extends EntityAIBase +{ + private final EntityWolf wolf; + private EntityPlayer player; + private final World world; + private final float minPlayerDistance; + private int timeoutCounter; + + public EntityAIBeg(EntityWolf wolf, float minDistance) + { + this.wolf = wolf; + this.world = wolf.world; + this.minPlayerDistance = minDistance; + this.setMutexBits(2); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + this.player = this.world.getClosestPlayerToEntity(this.wolf, (double)this.minPlayerDistance); + return this.player == null ? false : this.hasTemptationItemInHand(this.player); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (!this.player.isEntityAlive()) + { + return false; + } + else if (this.wolf.getDistanceSq(this.player) > (double)(this.minPlayerDistance * this.minPlayerDistance)) + { + return false; + } + else + { + return this.timeoutCounter > 0 && this.hasTemptationItemInHand(this.player); + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.wolf.setBegging(true); + this.timeoutCounter = 40 + this.wolf.getRNG().nextInt(40); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.wolf.setBegging(false); + this.player = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.wolf.getLookHelper().setLookPosition(this.player.posX, this.player.posY + (double)this.player.getEyeHeight(), this.player.posZ, 10.0F, (float)this.wolf.getVerticalFaceSpeed()); + --this.timeoutCounter; + } + + /** + * Gets if the Player has the Bone in the hand. + */ + private boolean hasTemptationItemInHand(EntityPlayer player) + { + for (EnumHand enumhand : EnumHand.values()) + { + ItemStack itemstack = player.getHeldItem(enumhand); + + if (this.wolf.isTamed() && itemstack.getItem() == Items.BONE) + { + return true; + } + + if (this.wolf.isBreedingItem(itemstack)) + { + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBreakDoor.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBreakDoor.java new file mode 100644 index 0000000..8ebdd57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIBreakDoor.java @@ -0,0 +1,107 @@ +package net.minecraft.entity.ai; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.entity.EntityLiving; +import net.minecraft.world.EnumDifficulty; + +public class EntityAIBreakDoor extends EntityAIDoorInteract +{ + private int breakingTime; + private int previousBreakProgress = -1; + + public EntityAIBreakDoor(EntityLiving entityIn) + { + super(entityIn); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!super.shouldExecute()) + { + return false; + } + else if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.entity.world, this.entity) || !this.entity.world.getBlockState(this.doorPosition).getBlock().canEntityDestroy(this.entity.world.getBlockState(this.doorPosition), this.entity.world, this.doorPosition, this.entity) || !net.minecraftforge.event.ForgeEventFactory.onEntityDestroyBlock(this.entity, this.doorPosition, this.entity.world.getBlockState(this.doorPosition))) + { + return false; + } + else + { + BlockDoor blockdoor = this.doorBlock; + return !BlockDoor.isOpen(this.entity.world, this.doorPosition); + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + this.breakingTime = 0; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + double d0 = this.entity.getDistanceSq(this.doorPosition); + boolean flag; + + if (this.breakingTime <= 240) + { + BlockDoor blockdoor = this.doorBlock; + + if (!BlockDoor.isOpen(this.entity.world, this.doorPosition) && d0 < 4.0D) + { + flag = true; + return flag; + } + } + + flag = false; + return flag; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + this.entity.world.sendBlockBreakProgress(this.entity.getEntityId(), this.doorPosition, -1); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + + if (this.entity.getRNG().nextInt(20) == 0) + { + this.entity.world.playEvent(1019, this.doorPosition, 0); + } + + ++this.breakingTime; + int i = (int)((float)this.breakingTime / 240.0F * 10.0F); + + if (i != this.previousBreakProgress) + { + this.entity.world.sendBlockBreakProgress(this.entity.getEntityId(), this.doorPosition, i); + this.previousBreakProgress = i; + } + + if (this.breakingTime == 240 && this.entity.world.getDifficulty() == EnumDifficulty.HARD) + { + this.entity.world.setBlockToAir(this.doorPosition); + this.entity.world.playEvent(1021, this.doorPosition, 0); + this.entity.world.playEvent(2001, this.doorPosition, Block.getIdFromBlock(this.doorBlock)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAICreeperSwell.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAICreeperSwell.java new file mode 100644 index 0000000..291c76c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAICreeperSwell.java @@ -0,0 +1,67 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; + +public class EntityAICreeperSwell extends EntityAIBase +{ + /** The creeper that is swelling. */ + EntityCreeper swellingCreeper; + /** The creeper's attack target. This is used for the changing of the creeper's state. */ + EntityLivingBase creeperAttackTarget; + + public EntityAICreeperSwell(EntityCreeper entitycreeperIn) + { + this.swellingCreeper = entitycreeperIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.swellingCreeper.getAttackTarget(); + return this.swellingCreeper.getCreeperState() > 0 || entitylivingbase != null && this.swellingCreeper.getDistanceSq(entitylivingbase) < 9.0D; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.swellingCreeper.getNavigator().clearPath(); + this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.creeperAttackTarget = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.creeperAttackTarget == null) + { + this.swellingCreeper.setCreeperState(-1); + } + else if (this.swellingCreeper.getDistanceSq(this.creeperAttackTarget) > 49.0D) + { + this.swellingCreeper.setCreeperState(-1); + } + else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget)) + { + this.swellingCreeper.setCreeperState(-1); + } + else + { + this.swellingCreeper.setCreeperState(1); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIDefendVillage.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIDefendVillage.java new file mode 100644 index 0000000..452ad9c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIDefendVillage.java @@ -0,0 +1,64 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.village.Village; + +public class EntityAIDefendVillage extends EntityAITarget +{ + EntityIronGolem irongolem; + /** The aggressor of the iron golem's village which is now the golem's attack target. */ + EntityLivingBase villageAgressorTarget; + + public EntityAIDefendVillage(EntityIronGolem ironGolemIn) + { + super(ironGolemIn, false, true); + this.irongolem = ironGolemIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + Village village = this.irongolem.getVillage(); + + if (village == null) + { + return false; + } + else + { + this.villageAgressorTarget = village.findNearestVillageAggressor(this.irongolem); + + if (this.villageAgressorTarget instanceof EntityCreeper) + { + return false; + } + else if (this.isSuitableTarget(this.villageAgressorTarget, false)) + { + return true; + } + else if (this.taskOwner.getRNG().nextInt(20) == 0) + { + this.villageAgressorTarget = village.getNearestTargetPlayer(this.irongolem); + return this.isSuitableTarget(this.villageAgressorTarget, false); + } + else + { + return false; + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.irongolem.setAttackTarget(this.villageAgressorTarget); + super.startExecuting(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIDoorInteract.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIDoorInteract.java new file mode 100644 index 0000000..33753c2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIDoorInteract.java @@ -0,0 +1,116 @@ +package net.minecraft.entity.ai; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.math.BlockPos; + +public abstract class EntityAIDoorInteract extends EntityAIBase +{ + protected EntityLiving entity; + protected BlockPos doorPosition = BlockPos.ORIGIN; + /** The wooden door block */ + protected BlockDoor doorBlock; + /** If is true then the Entity has stopped Door Interaction and compoleted the task. */ + boolean hasStoppedDoorInteraction; + float entityPositionX; + float entityPositionZ; + + public EntityAIDoorInteract(EntityLiving entityIn) + { + this.entity = entityIn; + + if (!(entityIn.getNavigator() instanceof PathNavigateGround)) + { + throw new IllegalArgumentException("Unsupported mob type for DoorInteractGoal"); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.entity.collidedHorizontally) + { + return false; + } + else + { + PathNavigateGround pathnavigateground = (PathNavigateGround)this.entity.getNavigator(); + Path path = pathnavigateground.getPath(); + + if (path != null && !path.isFinished() && pathnavigateground.getEnterDoors()) + { + for (int i = 0; i < Math.min(path.getCurrentPathIndex() + 2, path.getCurrentPathLength()); ++i) + { + PathPoint pathpoint = path.getPathPointFromIndex(i); + this.doorPosition = new BlockPos(pathpoint.x, pathpoint.y + 1, pathpoint.z); + + if (this.entity.getDistanceSq((double)this.doorPosition.getX(), this.entity.posY, (double)this.doorPosition.getZ()) <= 2.25D) + { + this.doorBlock = this.getBlockDoor(this.doorPosition); + + if (this.doorBlock != null) + { + return true; + } + } + } + + this.doorPosition = (new BlockPos(this.entity)).up(); + this.doorBlock = this.getBlockDoor(this.doorPosition); + return this.doorBlock != null; + } + else + { + return false; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.hasStoppedDoorInteraction; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.hasStoppedDoorInteraction = false; + this.entityPositionX = (float)((double)((float)this.doorPosition.getX() + 0.5F) - this.entity.posX); + this.entityPositionZ = (float)((double)((float)this.doorPosition.getZ() + 0.5F) - this.entity.posZ); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + float f = (float)((double)((float)this.doorPosition.getX() + 0.5F) - this.entity.posX); + float f1 = (float)((double)((float)this.doorPosition.getZ() + 0.5F) - this.entity.posZ); + float f2 = this.entityPositionX * f + this.entityPositionZ * f1; + + if (f2 < 0.0F) + { + this.hasStoppedDoorInteraction = true; + } + } + + private BlockDoor getBlockDoor(BlockPos pos) + { + IBlockState iblockstate = this.entity.world.getBlockState(pos); + Block block = iblockstate.getBlock(); + return block instanceof BlockDoor && iblockstate.getMaterial() == Material.WOOD ? (BlockDoor)block : null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIEatGrass.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIEatGrass.java new file mode 100644 index 0000000..dce3fa9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIEatGrass.java @@ -0,0 +1,126 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import net.minecraft.block.Block; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockStateMatcher; +import net.minecraft.entity.EntityLiving; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityAIEatGrass extends EntityAIBase +{ + private static final Predicate IS_TALL_GRASS = BlockStateMatcher.forBlock(Blocks.TALLGRASS).where(BlockTallGrass.TYPE, Predicates.equalTo(BlockTallGrass.EnumType.GRASS)); + /** The entity owner of this AITask */ + private final EntityLiving grassEaterEntity; + /** The world the grass eater entity is eating from */ + private final World entityWorld; + /** Number of ticks since the entity started to eat grass */ + int eatingGrassTimer; + + public EntityAIEatGrass(EntityLiving grassEaterEntityIn) + { + this.grassEaterEntity = grassEaterEntityIn; + this.entityWorld = grassEaterEntityIn.world; + this.setMutexBits(7); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.grassEaterEntity.getRNG().nextInt(this.grassEaterEntity.isChild() ? 50 : 1000) != 0) + { + return false; + } + else + { + BlockPos blockpos = new BlockPos(this.grassEaterEntity.posX, this.grassEaterEntity.posY, this.grassEaterEntity.posZ); + + if (IS_TALL_GRASS.apply(this.entityWorld.getBlockState(blockpos))) + { + return true; + } + else + { + return this.entityWorld.getBlockState(blockpos.down()).getBlock() == Blocks.GRASS; + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.eatingGrassTimer = 40; + this.entityWorld.setEntityState(this.grassEaterEntity, (byte)10); + this.grassEaterEntity.getNavigator().clearPath(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.eatingGrassTimer = 0; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.eatingGrassTimer > 0; + } + + /** + * Number of ticks since the entity started to eat grass + */ + public int getEatingGrassTimer() + { + return this.eatingGrassTimer; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.eatingGrassTimer = Math.max(0, this.eatingGrassTimer - 1); + + if (this.eatingGrassTimer == 4) + { + BlockPos blockpos = new BlockPos(this.grassEaterEntity.posX, this.grassEaterEntity.posY, this.grassEaterEntity.posZ); + + if (IS_TALL_GRASS.apply(this.entityWorld.getBlockState(blockpos))) + { + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.entityWorld, this.grassEaterEntity)) + { + this.entityWorld.destroyBlock(blockpos, false); + } + + this.grassEaterEntity.eatGrassBonus(); + } + else + { + BlockPos blockpos1 = blockpos.down(); + + if (this.entityWorld.getBlockState(blockpos1).getBlock() == Blocks.GRASS) + { + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.entityWorld, this.grassEaterEntity)) + { + this.entityWorld.playEvent(2001, blockpos1, Block.getIdFromBlock(Blocks.GRASS)); + this.entityWorld.setBlockState(blockpos1, Blocks.DIRT.getDefaultState(), 2); + } + + this.grassEaterEntity.eatGrassBonus(); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFindEntityNearest.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFindEntityNearest.java new file mode 100644 index 0000000..e071bce --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFindEntityNearest.java @@ -0,0 +1,132 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicate; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayerMP; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityAIFindEntityNearest extends EntityAIBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final EntityLiving mob; + private final Predicate predicate; + private final EntityAINearestAttackableTarget.Sorter sorter; + private EntityLivingBase target; + private final Class classToCheck; + + public EntityAIFindEntityNearest(EntityLiving mobIn, Class p_i45884_2_) + { + this.mob = mobIn; + this.classToCheck = p_i45884_2_; + + if (mobIn instanceof EntityCreature) + { + LOGGER.warn("Use NearestAttackableTargetGoal.class for PathfinerMob mobs!"); + } + + this.predicate = new Predicate() + { + public boolean apply(@Nullable EntityLivingBase p_apply_1_) + { + double d0 = EntityAIFindEntityNearest.this.getFollowRange(); + + if (p_apply_1_.isSneaking()) + { + d0 *= 0.800000011920929D; + } + + if (p_apply_1_.isInvisible()) + { + return false; + } + else + { + return (double)p_apply_1_.getDistance(EntityAIFindEntityNearest.this.mob) > d0 ? false : EntityAITarget.isSuitableTarget(EntityAIFindEntityNearest.this.mob, p_apply_1_, false, true); + } + } + }; + this.sorter = new EntityAINearestAttackableTarget.Sorter(mobIn); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + double d0 = this.getFollowRange(); + List list = this.mob.world.getEntitiesWithinAABB(this.classToCheck, this.mob.getEntityBoundingBox().grow(d0, 4.0D, d0), this.predicate); + Collections.sort(list, this.sorter); + + if (list.isEmpty()) + { + return false; + } + else + { + this.target = list.get(0); + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + EntityLivingBase entitylivingbase = this.mob.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else + { + double d0 = this.getFollowRange(); + + if (this.mob.getDistanceSq(entitylivingbase) > d0 * d0) + { + return false; + } + else + { + return !(entitylivingbase instanceof EntityPlayerMP) || !((EntityPlayerMP)entitylivingbase).interactionManager.isCreative(); + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.mob.setAttackTarget(this.target); + super.startExecuting(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.mob.setAttackTarget((EntityLivingBase)null); + super.startExecuting(); + } + + protected double getFollowRange() + { + IAttributeInstance iattributeinstance = this.mob.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE); + return iattributeinstance == null ? 16.0D : iattributeinstance.getAttributeValue(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java new file mode 100644 index 0000000..23082fe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFindEntityNearestPlayer.java @@ -0,0 +1,170 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicate; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.scoreboard.Team; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityAIFindEntityNearestPlayer extends EntityAIBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The entity that use this AI */ + private final EntityLiving entityLiving; + /** Use to determine if an entity correspond to specification */ + private final Predicate predicate; + /** Used to compare two entities */ + private final EntityAINearestAttackableTarget.Sorter sorter; + /** The current target */ + private EntityLivingBase entityTarget; + + public EntityAIFindEntityNearestPlayer(EntityLiving entityLivingIn) + { + this.entityLiving = entityLivingIn; + + if (entityLivingIn instanceof EntityCreature) + { + LOGGER.warn("Use NearestAttackableTargetGoal.class for PathfinerMob mobs!"); + } + + this.predicate = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (!(p_apply_1_ instanceof EntityPlayer)) + { + return false; + } + else if (((EntityPlayer)p_apply_1_).capabilities.disableDamage) + { + return false; + } + else + { + double d0 = EntityAIFindEntityNearestPlayer.this.maxTargetRange(); + + if (p_apply_1_.isSneaking()) + { + d0 *= 0.800000011920929D; + } + + if (p_apply_1_.isInvisible()) + { + float f = ((EntityPlayer)p_apply_1_).getArmorVisibility(); + + if (f < 0.1F) + { + f = 0.1F; + } + + d0 *= (double)(0.7F * f); + } + + return (double)p_apply_1_.getDistance(EntityAIFindEntityNearestPlayer.this.entityLiving) > d0 ? false : EntityAITarget.isSuitableTarget(EntityAIFindEntityNearestPlayer.this.entityLiving, (EntityLivingBase)p_apply_1_, false, true); + } + } + }; + this.sorter = new EntityAINearestAttackableTarget.Sorter(entityLivingIn); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + double d0 = this.maxTargetRange(); + List list = this.entityLiving.world.getEntitiesWithinAABB(EntityPlayer.class, this.entityLiving.getEntityBoundingBox().grow(d0, 4.0D, d0), this.predicate); + Collections.sort(list, this.sorter); + + if (list.isEmpty()) + { + return false; + } + else + { + this.entityTarget = list.get(0); + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + EntityLivingBase entitylivingbase = this.entityLiving.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer)entitylivingbase).capabilities.disableDamage) + { + return false; + } + else + { + Team team = this.entityLiving.getTeam(); + Team team1 = entitylivingbase.getTeam(); + + if (team != null && team1 == team) + { + return false; + } + else + { + double d0 = this.maxTargetRange(); + + if (this.entityLiving.getDistanceSq(entitylivingbase) > d0 * d0) + { + return false; + } + else + { + return !(entitylivingbase instanceof EntityPlayerMP) || !((EntityPlayerMP)entitylivingbase).interactionManager.isCreative(); + } + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.entityLiving.setAttackTarget(this.entityTarget); + super.startExecuting(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.entityLiving.setAttackTarget((EntityLivingBase)null); + super.startExecuting(); + } + + /** + * Return the max target range of the entiity (16 by default) + */ + protected double maxTargetRange() + { + IAttributeInstance iattributeinstance = this.entityLiving.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE); + return iattributeinstance == null ? 16.0D : iattributeinstance.getAttributeValue(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFleeSun.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFleeSun.java new file mode 100644 index 0000000..60f7561 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFleeSun.java @@ -0,0 +1,101 @@ +package net.minecraft.entity.ai; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class EntityAIFleeSun extends EntityAIBase +{ + private final EntityCreature creature; + private double shelterX; + private double shelterY; + private double shelterZ; + private final double movementSpeed; + private final World world; + + public EntityAIFleeSun(EntityCreature theCreatureIn, double movementSpeedIn) + { + this.creature = theCreatureIn; + this.movementSpeed = movementSpeedIn; + this.world = theCreatureIn.world; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.world.isDaytime()) + { + return false; + } + else if (!this.creature.isBurning()) + { + return false; + } + else if (!this.world.canSeeSky(new BlockPos(this.creature.posX, this.creature.getEntityBoundingBox().minY, this.creature.posZ))) + { + return false; + } + else if (!this.creature.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isEmpty()) + { + return false; + } + else + { + Vec3d vec3d = this.findPossibleShelter(); + + if (vec3d == null) + { + return false; + } + else + { + this.shelterX = vec3d.x; + this.shelterY = vec3d.y; + this.shelterZ = vec3d.z; + return true; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.creature.getNavigator().noPath(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.creature.getNavigator().tryMoveToXYZ(this.shelterX, this.shelterY, this.shelterZ, this.movementSpeed); + } + + @Nullable + private Vec3d findPossibleShelter() + { + Random random = this.creature.getRNG(); + BlockPos blockpos = new BlockPos(this.creature.posX, this.creature.getEntityBoundingBox().minY, this.creature.posZ); + + for (int i = 0; i < 10; ++i) + { + BlockPos blockpos1 = blockpos.add(random.nextInt(20) - 10, random.nextInt(6) - 3, random.nextInt(20) - 10); + + if (!this.world.canSeeSky(blockpos1) && this.creature.getBlockPathWeight(blockpos1) < 0.0F) + { + return new Vec3d((double)blockpos1.getX(), (double)blockpos1.getY(), (double)blockpos1.getZ()); + } + } + + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollow.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollow.java new file mode 100644 index 0000000..2f68be0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollow.java @@ -0,0 +1,132 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateFlying; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.pathfinding.PathNodeType; + +public class EntityAIFollow extends EntityAIBase +{ + private final EntityLiving entity; + private final Predicate followPredicate; + private EntityLiving followingEntity; + private final double speedModifier; + private final PathNavigate navigation; + private int timeToRecalcPath; + private final float stopDistance; + private float oldWaterCost; + private final float areaSize; + + public EntityAIFollow(final EntityLiving p_i47417_1_, double p_i47417_2_, float p_i47417_4_, float p_i47417_5_) + { + this.entity = p_i47417_1_; + this.followPredicate = new Predicate() + { + public boolean apply(@Nullable EntityLiving p_apply_1_) + { + return p_apply_1_ != null && p_i47417_1_.getClass() != p_apply_1_.getClass(); + } + }; + this.speedModifier = p_i47417_2_; + this.navigation = p_i47417_1_.getNavigator(); + this.stopDistance = p_i47417_4_; + this.areaSize = p_i47417_5_; + this.setMutexBits(3); + + if (!(p_i47417_1_.getNavigator() instanceof PathNavigateGround) && !(p_i47417_1_.getNavigator() instanceof PathNavigateFlying)) + { + throw new IllegalArgumentException("Unsupported mob type for FollowMobGoal"); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + List list = this.entity.world.getEntitiesWithinAABB(EntityLiving.class, this.entity.getEntityBoundingBox().grow((double)this.areaSize), this.followPredicate); + + if (!list.isEmpty()) + { + for (EntityLiving entityliving : list) + { + if (!entityliving.isInvisible()) + { + this.followingEntity = entityliving; + return true; + } + } + } + + return false; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.followingEntity != null && !this.navigation.noPath() && this.entity.getDistanceSq(this.followingEntity) > (double)(this.stopDistance * this.stopDistance); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.timeToRecalcPath = 0; + this.oldWaterCost = this.entity.getPathPriority(PathNodeType.WATER); + this.entity.setPathPriority(PathNodeType.WATER, 0.0F); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.followingEntity = null; + this.navigation.clearPath(); + this.entity.setPathPriority(PathNodeType.WATER, this.oldWaterCost); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.followingEntity != null && !this.entity.getLeashed()) + { + this.entity.getLookHelper().setLookPositionWithEntity(this.followingEntity, 10.0F, (float)this.entity.getVerticalFaceSpeed()); + + if (--this.timeToRecalcPath <= 0) + { + this.timeToRecalcPath = 10; + double d0 = this.entity.posX - this.followingEntity.posX; + double d1 = this.entity.posY - this.followingEntity.posY; + double d2 = this.entity.posZ - this.followingEntity.posZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + if (d3 > (double)(this.stopDistance * this.stopDistance)) + { + this.navigation.tryMoveToEntityLiving(this.followingEntity, this.speedModifier); + } + else + { + this.navigation.clearPath(); + EntityLookHelper entitylookhelper = this.followingEntity.getLookHelper(); + + if (d3 <= (double)this.stopDistance || entitylookhelper.getLookPosX() == this.entity.posX && entitylookhelper.getLookPosY() == this.entity.posY && entitylookhelper.getLookPosZ() == this.entity.posZ) + { + double d4 = this.followingEntity.posX - this.entity.posX; + double d5 = this.followingEntity.posZ - this.entity.posZ; + this.navigation.tryMoveToXYZ(this.entity.posX - d4, this.entity.posY, this.entity.posZ - d5, this.speedModifier); + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowGolem.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowGolem.java new file mode 100644 index 0000000..6050aca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowGolem.java @@ -0,0 +1,103 @@ +package net.minecraft.entity.ai; + +import java.util.List; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.passive.EntityVillager; + +public class EntityAIFollowGolem extends EntityAIBase +{ + private final EntityVillager villager; + private EntityIronGolem ironGolem; + private int takeGolemRoseTick; + private boolean tookGolemRose; + + public EntityAIFollowGolem(EntityVillager villagerIn) + { + this.villager = villagerIn; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.villager.getGrowingAge() >= 0) + { + return false; + } + else if (!this.villager.world.isDaytime()) + { + return false; + } + else + { + List list = this.villager.world.getEntitiesWithinAABB(EntityIronGolem.class, this.villager.getEntityBoundingBox().grow(6.0D, 2.0D, 6.0D)); + + if (list.isEmpty()) + { + return false; + } + else + { + for (EntityIronGolem entityirongolem : list) + { + if (entityirongolem.getHoldRoseTick() > 0) + { + this.ironGolem = entityirongolem; + break; + } + } + + return this.ironGolem != null; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.ironGolem.getHoldRoseTick() > 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.takeGolemRoseTick = this.villager.getRNG().nextInt(320); + this.tookGolemRose = false; + this.ironGolem.getNavigator().clearPath(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.ironGolem = null; + this.villager.getNavigator().clearPath(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.villager.getLookHelper().setLookPositionWithEntity(this.ironGolem, 30.0F, 30.0F); + + if (this.ironGolem.getHoldRoseTick() == this.takeGolemRoseTick) + { + this.villager.getNavigator().tryMoveToEntityLiving(this.ironGolem, 0.5D); + this.tookGolemRose = true; + } + + if (this.tookGolemRose && this.villager.getDistanceSq(this.ironGolem) < 4.0D) + { + this.ironGolem.setHoldingRose(false); + this.villager.getNavigator().clearPath(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowOwner.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowOwner.java new file mode 100644 index 0000000..0a1096e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowOwner.java @@ -0,0 +1,151 @@ +package net.minecraft.entity.ai; + +import net.minecraft.block.state.BlockFaceShape; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateFlying; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class EntityAIFollowOwner extends EntityAIBase +{ + private final EntityTameable tameable; + private EntityLivingBase owner; + World world; + private final double followSpeed; + private final PathNavigate petPathfinder; + private int timeToRecalcPath; + float maxDist; + float minDist; + private float oldWaterCost; + + public EntityAIFollowOwner(EntityTameable tameableIn, double followSpeedIn, float minDistIn, float maxDistIn) + { + this.tameable = tameableIn; + this.world = tameableIn.world; + this.followSpeed = followSpeedIn; + this.petPathfinder = tameableIn.getNavigator(); + this.minDist = minDistIn; + this.maxDist = maxDistIn; + this.setMutexBits(3); + + if (!(tameableIn.getNavigator() instanceof PathNavigateGround) && !(tameableIn.getNavigator() instanceof PathNavigateFlying)) + { + throw new IllegalArgumentException("Unsupported mob type for FollowOwnerGoal"); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.tameable.getOwner(); + + if (entitylivingbase == null) + { + return false; + } + else if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer)entitylivingbase).isSpectator()) + { + return false; + } + else if (this.tameable.isSitting()) + { + return false; + } + else if (this.tameable.getDistanceSq(entitylivingbase) < (double)(this.minDist * this.minDist)) + { + return false; + } + else + { + this.owner = entitylivingbase; + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.petPathfinder.noPath() && this.tameable.getDistanceSq(this.owner) > (double)(this.maxDist * this.maxDist) && !this.tameable.isSitting(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.timeToRecalcPath = 0; + this.oldWaterCost = this.tameable.getPathPriority(PathNodeType.WATER); + this.tameable.setPathPriority(PathNodeType.WATER, 0.0F); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.owner = null; + this.petPathfinder.clearPath(); + this.tameable.setPathPriority(PathNodeType.WATER, this.oldWaterCost); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.tameable.getLookHelper().setLookPositionWithEntity(this.owner, 10.0F, (float)this.tameable.getVerticalFaceSpeed()); + + if (!this.tameable.isSitting()) + { + if (--this.timeToRecalcPath <= 0) + { + this.timeToRecalcPath = 10; + + if (!this.petPathfinder.tryMoveToEntityLiving(this.owner, this.followSpeed)) + { + if (!this.tameable.getLeashed() && !this.tameable.isRiding()) + { + if (this.tameable.getDistanceSq(this.owner) >= 144.0D) + { + int i = MathHelper.floor(this.owner.posX) - 2; + int j = MathHelper.floor(this.owner.posZ) - 2; + int k = MathHelper.floor(this.owner.getEntityBoundingBox().minY); + + for (int l = 0; l <= 4; ++l) + { + for (int i1 = 0; i1 <= 4; ++i1) + { + if ((l < 1 || i1 < 1 || l > 3 || i1 > 3) && this.isTeleportFriendlyBlock(i, j, k, l, i1)) + { + this.tameable.setLocationAndAngles((double)((float)(i + l) + 0.5F), (double)k, (double)((float)(j + i1) + 0.5F), this.tameable.rotationYaw, this.tameable.rotationPitch); + this.petPathfinder.clearPath(); + return; + } + } + } + } + } + } + } + } + } + + protected boolean isTeleportFriendlyBlock(int x, int p_192381_2_, int y, int p_192381_4_, int p_192381_5_) + { + BlockPos blockpos = new BlockPos(x + p_192381_4_, y - 1, p_192381_2_ + p_192381_5_); + IBlockState iblockstate = this.world.getBlockState(blockpos); + return iblockstate.getBlockFaceShape(this.world, blockpos, EnumFacing.DOWN) == BlockFaceShape.SOLID && iblockstate.canEntitySpawn(this.tameable) && this.world.isAirBlock(blockpos.up()) && this.world.isAirBlock(blockpos.up(2)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowOwnerFlying.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowOwnerFlying.java new file mode 100644 index 0000000..7a08bfc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowOwnerFlying.java @@ -0,0 +1,20 @@ +package net.minecraft.entity.ai; + +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.util.math.BlockPos; + +public class EntityAIFollowOwnerFlying extends EntityAIFollowOwner +{ + public EntityAIFollowOwnerFlying(EntityTameable p_i47416_1_, double p_i47416_2_, float p_i47416_4_, float p_i47416_5_) + { + super(p_i47416_1_, p_i47416_2_, p_i47416_4_, p_i47416_5_); + } + + protected boolean isTeleportFriendlyBlock(int x, int p_192381_2_, int y, int p_192381_4_, int p_192381_5_) + { + IBlockState iblockstate = this.world.getBlockState(new BlockPos(x + p_192381_4_, y - 1, p_192381_2_ + p_192381_5_)); + return (iblockstate.isTopSolid() || iblockstate.getMaterial() == Material.LEAVES) && this.world.isAirBlock(new BlockPos(x + p_192381_4_, y, p_192381_2_ + p_192381_5_)) && this.world.isAirBlock(new BlockPos(x + p_192381_4_, y + 1, p_192381_2_ + p_192381_5_)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowParent.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowParent.java new file mode 100644 index 0000000..caf19f6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIFollowParent.java @@ -0,0 +1,112 @@ +package net.minecraft.entity.ai; + +import java.util.List; +import net.minecraft.entity.passive.EntityAnimal; + +public class EntityAIFollowParent extends EntityAIBase +{ + /** The child that is following its parent. */ + EntityAnimal childAnimal; + EntityAnimal parentAnimal; + double moveSpeed; + private int delayCounter; + + public EntityAIFollowParent(EntityAnimal animal, double speed) + { + this.childAnimal = animal; + this.moveSpeed = speed; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.childAnimal.getGrowingAge() >= 0) + { + return false; + } + else + { + List list = this.childAnimal.world.getEntitiesWithinAABB(this.childAnimal.getClass(), this.childAnimal.getEntityBoundingBox().grow(8.0D, 4.0D, 8.0D)); + EntityAnimal entityanimal = null; + double d0 = Double.MAX_VALUE; + + for (EntityAnimal entityanimal1 : list) + { + if (entityanimal1.getGrowingAge() >= 0) + { + double d1 = this.childAnimal.getDistanceSq(entityanimal1); + + if (d1 <= d0) + { + d0 = d1; + entityanimal = entityanimal1; + } + } + } + + if (entityanimal == null) + { + return false; + } + else if (d0 < 9.0D) + { + return false; + } + else + { + this.parentAnimal = entityanimal; + return true; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.childAnimal.getGrowingAge() >= 0) + { + return false; + } + else if (!this.parentAnimal.isEntityAlive()) + { + return false; + } + else + { + double d0 = this.childAnimal.getDistanceSq(this.parentAnimal); + return d0 >= 9.0D && d0 <= 256.0D; + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.delayCounter = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.parentAnimal = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (--this.delayCounter <= 0) + { + this.delayCounter = 10; + this.childAnimal.getNavigator().tryMoveToEntityLiving(this.parentAnimal, this.moveSpeed); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIHarvestFarmland.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIHarvestFarmland.java new file mode 100644 index 0000000..90237d5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIHarvestFarmland.java @@ -0,0 +1,163 @@ +package net.minecraft.entity.ai; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockCrops; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityAIHarvestFarmland extends EntityAIMoveToBlock +{ + /** Villager that is harvesting */ + private final EntityVillager villager; + private boolean hasFarmItem; + private boolean wantsToReapStuff; + /** 0 => harvest, 1 => replant, -1 => none */ + private int currentTask; + + public EntityAIHarvestFarmland(EntityVillager villagerIn, double speedIn) + { + super(villagerIn, speedIn, 16); + this.villager = villagerIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.runDelay <= 0) + { + if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.villager.world, this.villager)) + { + return false; + } + + this.currentTask = -1; + this.hasFarmItem = this.villager.isFarmItemInInventory(); + this.wantsToReapStuff = this.villager.wantsMoreFood(); + } + + return super.shouldExecute(); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.currentTask >= 0 && super.shouldContinueExecuting(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + this.villager.getLookHelper().setLookPosition((double)this.destinationBlock.getX() + 0.5D, (double)(this.destinationBlock.getY() + 1), (double)this.destinationBlock.getZ() + 0.5D, 10.0F, (float)this.villager.getVerticalFaceSpeed()); + + if (this.getIsAboveDestination()) + { + World world = this.villager.world; + BlockPos blockpos = this.destinationBlock.up(); + IBlockState iblockstate = world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + + if (this.currentTask == 0 && block instanceof BlockCrops && ((BlockCrops)block).isMaxAge(iblockstate)) + { + world.destroyBlock(blockpos, true); + } + else if (this.currentTask == 1 && iblockstate.getMaterial() == Material.AIR) + { + InventoryBasic inventorybasic = this.villager.getVillagerInventory(); + + for (int i = 0; i < inventorybasic.getSizeInventory(); ++i) + { + ItemStack itemstack = inventorybasic.getStackInSlot(i); + boolean flag = false; + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == Items.WHEAT_SEEDS) + { + world.setBlockState(blockpos, Blocks.WHEAT.getDefaultState(), 3); + flag = true; + } + else if (itemstack.getItem() == Items.POTATO) + { + world.setBlockState(blockpos, Blocks.POTATOES.getDefaultState(), 3); + flag = true; + } + else if (itemstack.getItem() == Items.CARROT) + { + world.setBlockState(blockpos, Blocks.CARROTS.getDefaultState(), 3); + flag = true; + } + else if (itemstack.getItem() == Items.BEETROOT_SEEDS) + { + world.setBlockState(blockpos, Blocks.BEETROOTS.getDefaultState(), 3); + flag = true; + } + else if (itemstack.getItem() instanceof net.minecraftforge.common.IPlantable) { + if(((net.minecraftforge.common.IPlantable)itemstack.getItem()).getPlantType(world,blockpos) == net.minecraftforge.common.EnumPlantType.Crop) { + world.setBlockState(blockpos, ((net.minecraftforge.common.IPlantable)itemstack.getItem()).getPlant(world,blockpos),3); + flag = true; + } + } + } + + if (flag) + { + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + inventorybasic.setInventorySlotContents(i, ItemStack.EMPTY); + } + + break; + } + } + } + + this.currentTask = -1; + this.runDelay = 10; + } + } + + /** + * Return true to set given position as destination + */ + protected boolean shouldMoveTo(World worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos).getBlock(); + + if (block == Blocks.FARMLAND) + { + pos = pos.up(); + IBlockState iblockstate = worldIn.getBlockState(pos); + block = iblockstate.getBlock(); + + if (block instanceof BlockCrops && ((BlockCrops)block).isMaxAge(iblockstate) && this.wantsToReapStuff && (this.currentTask == 0 || this.currentTask < 0)) + { + this.currentTask = 0; + return true; + } + + if (iblockstate.getMaterial() == Material.AIR && this.hasFarmItem && (this.currentTask == 1 || this.currentTask < 0)) + { + this.currentTask = 1; + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIHurtByTarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIHurtByTarget.java new file mode 100644 index 0000000..b84bd9f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIHurtByTarget.java @@ -0,0 +1,82 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.util.math.AxisAlignedBB; + +public class EntityAIHurtByTarget extends EntityAITarget +{ + private final boolean entityCallsForHelp; + /** Store the previous revengeTimer value */ + private int revengeTimerOld; + private final Class[] excludedReinforcementTypes; + + public EntityAIHurtByTarget(EntityCreature creatureIn, boolean entityCallsForHelpIn, Class... excludedReinforcementTypes) + { + super(creatureIn, true); + this.entityCallsForHelp = entityCallsForHelpIn; + this.excludedReinforcementTypes = excludedReinforcementTypes; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + int i = this.taskOwner.getRevengeTimer(); + EntityLivingBase entitylivingbase = this.taskOwner.getRevengeTarget(); + return i != this.revengeTimerOld && entitylivingbase != null && this.isSuitableTarget(entitylivingbase, false); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.taskOwner.setAttackTarget(this.taskOwner.getRevengeTarget()); + this.target = this.taskOwner.getAttackTarget(); + this.revengeTimerOld = this.taskOwner.getRevengeTimer(); + this.unseenMemoryTicks = 300; + + if (this.entityCallsForHelp) + { + this.alertOthers(); + } + + super.startExecuting(); + } + + protected void alertOthers() + { + double d0 = this.getTargetDistance(); + + for (EntityCreature entitycreature : this.taskOwner.world.getEntitiesWithinAABB(this.taskOwner.getClass(), (new AxisAlignedBB(this.taskOwner.posX, this.taskOwner.posY, this.taskOwner.posZ, this.taskOwner.posX + 1.0D, this.taskOwner.posY + 1.0D, this.taskOwner.posZ + 1.0D)).grow(d0, 10.0D, d0))) + { + if (this.taskOwner != entitycreature && entitycreature.getAttackTarget() == null && (!(this.taskOwner instanceof EntityTameable) || ((EntityTameable)this.taskOwner).getOwner() == ((EntityTameable)entitycreature).getOwner()) && !entitycreature.isOnSameTeam(this.taskOwner.getRevengeTarget())) + { + boolean flag = false; + + for (Class oclass : this.excludedReinforcementTypes) + { + if (entitycreature.getClass() == oclass) + { + flag = true; + break; + } + } + + if (!flag) + { + this.setEntityAttackTarget(entitycreature, this.taskOwner.getRevengeTarget()); + } + } + } + } + + protected void setEntityAttackTarget(EntityCreature creatureIn, EntityLivingBase entityLivingBaseIn) + { + creatureIn.setAttackTarget(entityLivingBaseIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.java new file mode 100644 index 0000000..8236872 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILandOnOwnersShoulder.java @@ -0,0 +1,59 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityShoulderRiding; +import net.minecraft.entity.player.EntityPlayer; + +public class EntityAILandOnOwnersShoulder extends EntityAIBase +{ + private final EntityShoulderRiding entity; + private EntityPlayer owner; + private boolean isSittingOnShoulder; + + public EntityAILandOnOwnersShoulder(EntityShoulderRiding p_i47415_1_) + { + this.entity = p_i47415_1_; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.entity.getOwner(); + boolean flag = entitylivingbase != null && !((EntityPlayer)entitylivingbase).isSpectator() && !((EntityPlayer)entitylivingbase).capabilities.isFlying && !entitylivingbase.isInWater(); + return !this.entity.isSitting() && flag && this.entity.canSitOnShoulder(); + } + + /** + * Determine if this AI Task is interruptible by a higher (= lower value) priority task. All vanilla AITask have + * this value set to true. + */ + public boolean isInterruptible() + { + return !this.isSittingOnShoulder; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.owner = (EntityPlayer)this.entity.getOwner(); + this.isSittingOnShoulder = false; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (!this.isSittingOnShoulder && !this.entity.isSitting() && !this.entity.getLeashed()) + { + if (this.entity.getEntityBoundingBox().intersects(this.owner.getEntityBoundingBox())) + { + this.isSittingOnShoulder = this.entity.setEntityOnShoulder(this.owner); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILeapAtTarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILeapAtTarget.java new file mode 100644 index 0000000..6858da5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILeapAtTarget.java @@ -0,0 +1,81 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.MathHelper; + +public class EntityAILeapAtTarget extends EntityAIBase +{ + /** The entity that is leaping. */ + EntityLiving leaper; + /** The entity that the leaper is leaping towards. */ + EntityLivingBase leapTarget; + /** The entity's motionY after leaping. */ + float leapMotionY; + + public EntityAILeapAtTarget(EntityLiving leapingEntity, float leapMotionYIn) + { + this.leaper = leapingEntity; + this.leapMotionY = leapMotionYIn; + this.setMutexBits(5); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + this.leapTarget = this.leaper.getAttackTarget(); + + if (this.leapTarget == null) + { + return false; + } + else + { + double d0 = this.leaper.getDistanceSq(this.leapTarget); + + if (d0 >= 4.0D && d0 <= 16.0D) + { + if (!this.leaper.onGround) + { + return false; + } + else + { + return this.leaper.getRNG().nextInt(5) == 0; + } + } + else + { + return false; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.leaper.onGround; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + double d0 = this.leapTarget.posX - this.leaper.posX; + double d1 = this.leapTarget.posZ - this.leaper.posZ; + float f = MathHelper.sqrt(d0 * d0 + d1 * d1); + + if ((double)f >= 1.0E-4D) + { + this.leaper.motionX += d0 / (double)f * 0.5D * 0.800000011920929D + this.leaper.motionX * 0.20000000298023224D; + this.leaper.motionZ += d1 / (double)f * 0.5D * 0.800000011920929D + this.leaper.motionZ * 0.20000000298023224D; + } + + this.leaper.motionY = (double)this.leapMotionY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILlamaFollowCaravan.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILlamaFollowCaravan.java new file mode 100644 index 0000000..1c9b8c1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILlamaFollowCaravan.java @@ -0,0 +1,171 @@ +package net.minecraft.entity.ai; + +import java.util.List; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.util.math.Vec3d; + +public class EntityAILlamaFollowCaravan extends EntityAIBase +{ + public EntityLlama llama; + private double speedModifier; + private int distCheckCounter; + + public EntityAILlamaFollowCaravan(EntityLlama llamaIn, double speedModifierIn) + { + this.llama = llamaIn; + this.speedModifier = speedModifierIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.llama.getLeashed() && !this.llama.inCaravan()) + { + List list = this.llama.world.getEntitiesWithinAABB(this.llama.getClass(), this.llama.getEntityBoundingBox().grow(9.0D, 4.0D, 9.0D)); + EntityLlama entityllama = null; + double d0 = Double.MAX_VALUE; + + for (EntityLlama entityllama1 : list) + { + if (entityllama1.inCaravan() && !entityllama1.hasCaravanTrail()) + { + double d1 = this.llama.getDistanceSq(entityllama1); + + if (d1 <= d0) + { + d0 = d1; + entityllama = entityllama1; + } + } + } + + if (entityllama == null) + { + for (EntityLlama entityllama2 : list) + { + if (entityllama2.getLeashed() && !entityllama2.hasCaravanTrail()) + { + double d2 = this.llama.getDistanceSq(entityllama2); + + if (d2 <= d0) + { + d0 = d2; + entityllama = entityllama2; + } + } + } + } + + if (entityllama == null) + { + return false; + } + else if (d0 < 4.0D) + { + return false; + } + else if (!entityllama.getLeashed() && !this.firstIsLeashed(entityllama, 1)) + { + return false; + } + else + { + this.llama.joinCaravan(entityllama); + return true; + } + } + else + { + return false; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.llama.inCaravan() && this.llama.getCaravanHead().isEntityAlive() && this.firstIsLeashed(this.llama, 0)) + { + double d0 = this.llama.getDistanceSq(this.llama.getCaravanHead()); + + if (d0 > 676.0D) + { + if (this.speedModifier <= 3.0D) + { + this.speedModifier *= 1.2D; + this.distCheckCounter = 40; + return true; + } + + if (this.distCheckCounter == 0) + { + return false; + } + } + + if (this.distCheckCounter > 0) + { + --this.distCheckCounter; + } + + return true; + } + else + { + return false; + } + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.llama.leaveCaravan(); + this.speedModifier = 2.1D; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.llama.inCaravan()) + { + EntityLlama entityllama = this.llama.getCaravanHead(); + double d0 = (double)this.llama.getDistance(entityllama); + float f = 2.0F; + Vec3d vec3d = (new Vec3d(entityllama.posX - this.llama.posX, entityllama.posY - this.llama.posY, entityllama.posZ - this.llama.posZ)).normalize().scale(Math.max(d0 - 2.0D, 0.0D)); + this.llama.getNavigator().tryMoveToXYZ(this.llama.posX + vec3d.x, this.llama.posY + vec3d.y, this.llama.posZ + vec3d.z, this.speedModifier); + } + } + + private boolean firstIsLeashed(EntityLlama p_190858_1_, int p_190858_2_) + { + if (p_190858_2_ > 8) + { + return false; + } + else if (p_190858_1_.inCaravan()) + { + if (p_190858_1_.getCaravanHead().getLeashed()) + { + return true; + } + else + { + EntityLlama entityllama = p_190858_1_.getCaravanHead(); + ++p_190858_2_; + return this.firstIsLeashed(entityllama, p_190858_2_); + } + } + else + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java new file mode 100644 index 0000000..6a95703 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookAtTradePlayer.java @@ -0,0 +1,31 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; + +public class EntityAILookAtTradePlayer extends EntityAIWatchClosest +{ + private final EntityVillager villager; + + public EntityAILookAtTradePlayer(EntityVillager villagerIn) + { + super(villagerIn, EntityPlayer.class, 8.0F); + this.villager = villagerIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.villager.isTrading()) + { + this.closestEntity = this.villager.getCustomer(); + return true; + } + else + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookAtVillager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookAtVillager.java new file mode 100644 index 0000000..e4a68c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookAtVillager.java @@ -0,0 +1,72 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.passive.EntityVillager; + +public class EntityAILookAtVillager extends EntityAIBase +{ + private final EntityIronGolem ironGolem; + private EntityVillager villager; + private int lookTime; + + public EntityAILookAtVillager(EntityIronGolem ironGolemIn) + { + this.ironGolem = ironGolemIn; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.ironGolem.world.isDaytime()) + { + return false; + } + else if (this.ironGolem.getRNG().nextInt(8000) != 0) + { + return false; + } + else + { + this.villager = (EntityVillager)this.ironGolem.world.findNearestEntityWithinAABB(EntityVillager.class, this.ironGolem.getEntityBoundingBox().grow(6.0D, 2.0D, 6.0D), this.ironGolem); + return this.villager != null; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.lookTime > 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.lookTime = 400; + this.ironGolem.setHoldingRose(true); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.ironGolem.setHoldingRose(false); + this.villager = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.ironGolem.getLookHelper().setLookPositionWithEntity(this.villager, 30.0F, 30.0F); + --this.lookTime; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookIdle.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookIdle.java new file mode 100644 index 0000000..d6bd411 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAILookIdle.java @@ -0,0 +1,57 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; + +public class EntityAILookIdle extends EntityAIBase +{ + /** The entity that is looking idle. */ + private final EntityLiving idleEntity; + /** X offset to look at */ + private double lookX; + /** Z offset to look at */ + private double lookZ; + /** A decrementing tick that stops the entity from being idle once it reaches 0. */ + private int idleTime; + + public EntityAILookIdle(EntityLiving entitylivingIn) + { + this.idleEntity = entitylivingIn; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.idleEntity.getRNG().nextFloat() < 0.02F; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.idleTime >= 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + double d0 = (Math.PI * 2D) * this.idleEntity.getRNG().nextDouble(); + this.lookX = Math.cos(d0); + this.lookZ = Math.sin(d0); + this.idleTime = 20 + this.idleEntity.getRNG().nextInt(20); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.idleTime; + this.idleEntity.getLookHelper().setLookPosition(this.idleEntity.posX + this.lookX, this.idleEntity.posY + (double)this.idleEntity.getEyeHeight(), this.idleEntity.posZ + this.lookZ, (float)this.idleEntity.getHorizontalFaceSpeed(), (float)this.idleEntity.getVerticalFaceSpeed()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMate.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMate.java new file mode 100644 index 0000000..2b5b04f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMate.java @@ -0,0 +1,169 @@ +package net.minecraft.entity.ai; + +import java.util.List; +import java.util.Random; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.stats.StatList; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; + +public class EntityAIMate extends EntityAIBase +{ + private final EntityAnimal animal; + private final Class mateClass; + World world; + private EntityAnimal targetMate; + /** Delay preventing a baby from spawning immediately when two mate-able animals find each other. */ + int spawnBabyDelay; + /** The speed the creature moves at during mating behavior. */ + double moveSpeed; + + public EntityAIMate(EntityAnimal animal, double speedIn) + { + this(animal, speedIn, animal.getClass()); + } + + public EntityAIMate(EntityAnimal p_i47306_1_, double p_i47306_2_, Class p_i47306_4_) + { + this.animal = p_i47306_1_; + this.world = p_i47306_1_.world; + this.mateClass = p_i47306_4_; + this.moveSpeed = p_i47306_2_; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.animal.isInLove()) + { + return false; + } + else + { + this.targetMate = this.getNearbyMate(); + return this.targetMate != null; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.targetMate.isEntityAlive() && this.targetMate.isInLove() && this.spawnBabyDelay < 60; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.targetMate = null; + this.spawnBabyDelay = 0; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.animal.getLookHelper().setLookPositionWithEntity(this.targetMate, 10.0F, (float)this.animal.getVerticalFaceSpeed()); + this.animal.getNavigator().tryMoveToEntityLiving(this.targetMate, this.moveSpeed); + ++this.spawnBabyDelay; + + if (this.spawnBabyDelay >= 60 && this.animal.getDistanceSq(this.targetMate) < 9.0D) + { + this.spawnBaby(); + } + } + + /** + * Loops through nearby animals and finds another animal of the same type that can be mated with. Returns the first + * valid mate found. + */ + private EntityAnimal getNearbyMate() + { + List list = this.world.getEntitiesWithinAABB(this.mateClass, this.animal.getEntityBoundingBox().grow(8.0D)); + double d0 = Double.MAX_VALUE; + EntityAnimal entityanimal = null; + + for (EntityAnimal entityanimal1 : list) + { + if (this.animal.canMateWith(entityanimal1) && this.animal.getDistanceSq(entityanimal1) < d0) + { + entityanimal = entityanimal1; + d0 = this.animal.getDistanceSq(entityanimal1); + } + } + + return entityanimal; + } + + /** + * Spawns a baby animal of the same type. + */ + private void spawnBaby() + { + EntityAgeable entityageable = this.animal.createChild(this.targetMate); + + final net.minecraftforge.event.entity.living.BabyEntitySpawnEvent event = new net.minecraftforge.event.entity.living.BabyEntitySpawnEvent(animal, targetMate, entityageable); + final boolean cancelled = net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); + entityageable = event.getChild(); + if (cancelled) { + //Reset the "inLove" state for the animals + this.animal.setGrowingAge(6000); + this.targetMate.setGrowingAge(6000); + this.animal.resetInLove(); + this.targetMate.resetInLove(); + return; + } + + if (entityageable != null) + { + EntityPlayerMP entityplayermp = this.animal.getLoveCause(); + + if (entityplayermp == null && this.targetMate.getLoveCause() != null) + { + entityplayermp = this.targetMate.getLoveCause(); + } + + if (entityplayermp != null) + { + entityplayermp.addStat(StatList.ANIMALS_BRED); + CriteriaTriggers.BRED_ANIMALS.trigger(entityplayermp, this.animal, this.targetMate, entityageable); + } + + this.animal.setGrowingAge(6000); + this.targetMate.setGrowingAge(6000); + this.animal.resetInLove(); + this.targetMate.resetInLove(); + entityageable.setGrowingAge(-24000); + entityageable.setLocationAndAngles(this.animal.posX, this.animal.posY, this.animal.posZ, 0.0F, 0.0F); + this.world.spawnEntity(entityageable); + Random random = this.animal.getRNG(); + + for (int i = 0; i < 7; ++i) + { + double d0 = random.nextGaussian() * 0.02D; + double d1 = random.nextGaussian() * 0.02D; + double d2 = random.nextGaussian() * 0.02D; + double d3 = random.nextDouble() * (double)this.animal.width * 2.0D - (double)this.animal.width; + double d4 = 0.5D + random.nextDouble() * (double)this.animal.height; + double d5 = random.nextDouble() * (double)this.animal.width * 2.0D - (double)this.animal.width; + this.world.spawnParticle(EnumParticleTypes.HEART, this.animal.posX + d3, this.animal.posY + d4, this.animal.posZ + d5, d0, d1, d2); + } + + if (this.world.getGameRules().getBoolean("doMobLoot")) + { + this.world.spawnEntity(new EntityXPOrb(this.world, this.animal.posX, this.animal.posY, this.animal.posZ, random.nextInt(7) + 1)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveIndoors.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveIndoors.java new file mode 100644 index 0000000..51e9972 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveIndoors.java @@ -0,0 +1,103 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.village.Village; +import net.minecraft.village.VillageDoorInfo; + +public class EntityAIMoveIndoors extends EntityAIBase +{ + private final EntityCreature entity; + private VillageDoorInfo doorInfo; + private int insidePosX = -1; + private int insidePosZ = -1; + + public EntityAIMoveIndoors(EntityCreature entityIn) + { + this.entity = entityIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + BlockPos blockpos = new BlockPos(this.entity); + + if ((!this.entity.world.isDaytime() || this.entity.world.isRaining() && !this.entity.world.getBiome(blockpos).canRain()) && this.entity.world.provider.hasSkyLight()) + { + if (this.entity.getRNG().nextInt(50) != 0) + { + return false; + } + else if (this.insidePosX != -1 && this.entity.getDistanceSq((double)this.insidePosX, this.entity.posY, (double)this.insidePosZ) < 4.0D) + { + return false; + } + else + { + Village village = this.entity.world.getVillageCollection().getNearestVillage(blockpos, 14); + + if (village == null) + { + return false; + } + else + { + this.doorInfo = village.getDoorInfo(blockpos); + return this.doorInfo != null; + } + } + } + else + { + return false; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.entity.getNavigator().noPath(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.insidePosX = -1; + BlockPos blockpos = this.doorInfo.getInsideBlockPos(); + int i = blockpos.getX(); + int j = blockpos.getY(); + int k = blockpos.getZ(); + + if (this.entity.getDistanceSq(blockpos) > 256.0D) + { + Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockTowards(this.entity, 14, 3, new Vec3d((double)i + 0.5D, (double)j, (double)k + 0.5D)); + + if (vec3d != null) + { + this.entity.getNavigator().tryMoveToXYZ(vec3d.x, vec3d.y, vec3d.z, 1.0D); + } + } + else + { + this.entity.getNavigator().tryMoveToXYZ((double)i + 0.5D, (double)j, (double)k + 0.5D, 1.0D); + } + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.insidePosX = this.doorInfo.getInsideBlockPos().getX(); + this.insidePosZ = this.doorInfo.getInsideBlockPos().getZ(); + this.doorInfo = null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java new file mode 100644 index 0000000..13f06d6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveThroughVillage.java @@ -0,0 +1,171 @@ +package net.minecraft.entity.ai; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.entity.EntityCreature; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.village.Village; +import net.minecraft.village.VillageDoorInfo; + +public class EntityAIMoveThroughVillage extends EntityAIBase +{ + private final EntityCreature entity; + private final double movementSpeed; + /** The PathNavigate of our entity. */ + private Path path; + private VillageDoorInfo doorInfo; + private final boolean isNocturnal; + private final List doorList = Lists.newArrayList(); + + public EntityAIMoveThroughVillage(EntityCreature entityIn, double movementSpeedIn, boolean isNocturnalIn) + { + this.entity = entityIn; + this.movementSpeed = movementSpeedIn; + this.isNocturnal = isNocturnalIn; + this.setMutexBits(1); + + if (!(entityIn.getNavigator() instanceof PathNavigateGround)) + { + throw new IllegalArgumentException("Unsupported mob for MoveThroughVillageGoal"); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + this.resizeDoorList(); + + if (this.isNocturnal && this.entity.world.isDaytime()) + { + return false; + } + else + { + Village village = this.entity.world.getVillageCollection().getNearestVillage(new BlockPos(this.entity), 0); + + if (village == null) + { + return false; + } + else + { + this.doorInfo = this.findNearestDoor(village); + + if (this.doorInfo == null) + { + return false; + } + else + { + PathNavigateGround pathnavigateground = (PathNavigateGround)this.entity.getNavigator(); + boolean flag = pathnavigateground.getEnterDoors(); + pathnavigateground.setBreakDoors(false); + this.path = pathnavigateground.getPathToPos(this.doorInfo.getDoorBlockPos()); + pathnavigateground.setBreakDoors(flag); + + if (this.path != null) + { + return true; + } + else + { + Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockTowards(this.entity, 10, 7, new Vec3d((double)this.doorInfo.getDoorBlockPos().getX(), (double)this.doorInfo.getDoorBlockPos().getY(), (double)this.doorInfo.getDoorBlockPos().getZ())); + + if (vec3d == null) + { + return false; + } + else + { + pathnavigateground.setBreakDoors(false); + this.path = this.entity.getNavigator().getPathToXYZ(vec3d.x, vec3d.y, vec3d.z); + pathnavigateground.setBreakDoors(flag); + return this.path != null; + } + } + } + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.entity.getNavigator().noPath()) + { + return false; + } + else + { + float f = this.entity.width + 4.0F; + return this.entity.getDistanceSq(this.doorInfo.getDoorBlockPos()) > (double)(f * f); + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.entity.getNavigator().setPath(this.path, this.movementSpeed); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + if (this.entity.getNavigator().noPath() || this.entity.getDistanceSq(this.doorInfo.getDoorBlockPos()) < 16.0D) + { + this.doorList.add(this.doorInfo); + } + } + + private VillageDoorInfo findNearestDoor(Village villageIn) + { + VillageDoorInfo villagedoorinfo = null; + int i = Integer.MAX_VALUE; + + for (VillageDoorInfo villagedoorinfo1 : villageIn.getVillageDoorInfoList()) + { + int j = villagedoorinfo1.getDistanceSquared(MathHelper.floor(this.entity.posX), MathHelper.floor(this.entity.posY), MathHelper.floor(this.entity.posZ)); + + if (j < i && !this.doesDoorListContain(villagedoorinfo1)) + { + villagedoorinfo = villagedoorinfo1; + i = j; + } + } + + return villagedoorinfo; + } + + private boolean doesDoorListContain(VillageDoorInfo doorInfoIn) + { + for (VillageDoorInfo villagedoorinfo : this.doorList) + { + if (doorInfoIn.getDoorBlockPos().equals(villagedoorinfo.getDoorBlockPos())) + { + return true; + } + } + + return false; + } + + private void resizeDoorList() + { + if (this.doorList.size() > 15) + { + this.doorList.remove(0); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveToBlock.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveToBlock.java new file mode 100644 index 0000000..0e2db72 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveToBlock.java @@ -0,0 +1,128 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class EntityAIMoveToBlock extends EntityAIBase +{ + private final EntityCreature creature; + private final double movementSpeed; + /** Controls task execution delay */ + protected int runDelay; + private int timeoutCounter; + private int maxStayTicks; + /** Block to move to */ + protected BlockPos destinationBlock = BlockPos.ORIGIN; + private boolean isAboveDestination; + private final int searchLength; + + public EntityAIMoveToBlock(EntityCreature creature, double speedIn, int length) + { + this.creature = creature; + this.movementSpeed = speedIn; + this.searchLength = length; + this.setMutexBits(5); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.runDelay > 0) + { + --this.runDelay; + return false; + } + else + { + this.runDelay = 200 + this.creature.getRNG().nextInt(200); + return this.searchForDestination(); + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.timeoutCounter >= -this.maxStayTicks && this.timeoutCounter <= 1200 && this.shouldMoveTo(this.creature.world, this.destinationBlock); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.creature.getNavigator().tryMoveToXYZ((double)((float)this.destinationBlock.getX()) + 0.5D, (double)(this.destinationBlock.getY() + 1), (double)((float)this.destinationBlock.getZ()) + 0.5D, this.movementSpeed); + this.timeoutCounter = 0; + this.maxStayTicks = this.creature.getRNG().nextInt(this.creature.getRNG().nextInt(1200) + 1200) + 1200; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.creature.getDistanceSqToCenter(this.destinationBlock.up()) > 1.0D) + { + this.isAboveDestination = false; + ++this.timeoutCounter; + + if (this.timeoutCounter % 40 == 0) + { + this.creature.getNavigator().tryMoveToXYZ((double)((float)this.destinationBlock.getX()) + 0.5D, (double)(this.destinationBlock.getY() + 1), (double)((float)this.destinationBlock.getZ()) + 0.5D, this.movementSpeed); + } + } + else + { + this.isAboveDestination = true; + --this.timeoutCounter; + } + } + + protected boolean getIsAboveDestination() + { + return this.isAboveDestination; + } + + /** + * Searches and sets new destination block and returns true if a suitable block (specified in {@link + * net.minecraft.entity.ai.EntityAIMoveToBlock#shouldMoveTo(World, BlockPos) EntityAIMoveToBlock#shouldMoveTo(World, + * BlockPos)}) can be found. + */ + private boolean searchForDestination() + { + int i = this.searchLength; + int j = 1; + BlockPos blockpos = new BlockPos(this.creature); + + for (int k = 0; k <= 1; k = k > 0 ? -k : 1 - k) + { + for (int l = 0; l < i; ++l) + { + for (int i1 = 0; i1 <= l; i1 = i1 > 0 ? -i1 : 1 - i1) + { + for (int j1 = i1 < l && i1 > -l ? l : 0; j1 <= l; j1 = j1 > 0 ? -j1 : 1 - j1) + { + BlockPos blockpos1 = blockpos.add(i1, k - 1, j1); + + if (this.creature.isWithinHomeDistanceFromPosition(blockpos1) && this.shouldMoveTo(this.creature.world, blockpos1)) + { + this.destinationBlock = blockpos1; + return true; + } + } + } + } + } + + return false; + } + + /** + * Return true to set given position as destination + */ + protected abstract boolean shouldMoveTo(World worldIn, BlockPos pos); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java new file mode 100644 index 0000000..28e781e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveTowardsRestriction.java @@ -0,0 +1,65 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class EntityAIMoveTowardsRestriction extends EntityAIBase +{ + private final EntityCreature creature; + private double movePosX; + private double movePosY; + private double movePosZ; + private final double movementSpeed; + + public EntityAIMoveTowardsRestriction(EntityCreature creatureIn, double speedIn) + { + this.creature = creatureIn; + this.movementSpeed = speedIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.creature.isWithinHomeDistanceCurrentPosition()) + { + return false; + } + else + { + BlockPos blockpos = this.creature.getHomePosition(); + Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockTowards(this.creature, 16, 7, new Vec3d((double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ())); + + if (vec3d == null) + { + return false; + } + else + { + this.movePosX = vec3d.x; + this.movePosY = vec3d.y; + this.movePosZ = vec3d.z; + return true; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.creature.getNavigator().noPath(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.creature.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.movementSpeed); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java new file mode 100644 index 0000000..0d1d98d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIMoveTowardsTarget.java @@ -0,0 +1,82 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.Vec3d; + +public class EntityAIMoveTowardsTarget extends EntityAIBase +{ + private final EntityCreature creature; + private EntityLivingBase targetEntity; + private double movePosX; + private double movePosY; + private double movePosZ; + private final double speed; + /** If the distance to the target entity is further than this, this AI task will not run. */ + private final float maxTargetDistance; + + public EntityAIMoveTowardsTarget(EntityCreature creature, double speedIn, float targetMaxDistance) + { + this.creature = creature; + this.speed = speedIn; + this.maxTargetDistance = targetMaxDistance; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + this.targetEntity = this.creature.getAttackTarget(); + + if (this.targetEntity == null) + { + return false; + } + else if (this.targetEntity.getDistanceSq(this.creature) > (double)(this.maxTargetDistance * this.maxTargetDistance)) + { + return false; + } + else + { + Vec3d vec3d = RandomPositionGenerator.findRandomTargetBlockTowards(this.creature, 16, 7, new Vec3d(this.targetEntity.posX, this.targetEntity.posY, this.targetEntity.posZ)); + + if (vec3d == null) + { + return false; + } + else + { + this.movePosX = vec3d.x; + this.movePosY = vec3d.y; + this.movePosZ = vec3d.z; + return true; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.creature.getNavigator().noPath() && this.targetEntity.isEntityAlive() && this.targetEntity.getDistanceSq(this.creature) < (double)(this.maxTargetDistance * this.maxTargetDistance); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.targetEntity = null; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.creature.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.speed); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java new file mode 100644 index 0000000..2870937 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAINearestAttackableTarget.java @@ -0,0 +1,160 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.math.AxisAlignedBB; + +public class EntityAINearestAttackableTarget extends EntityAITarget +{ + protected final Class targetClass; + private final int targetChance; + /** Instance of EntityAINearestAttackableTargetSorter. */ + protected final EntityAINearestAttackableTarget.Sorter sorter; + protected final Predicate targetEntitySelector; + protected T targetEntity; + + public EntityAINearestAttackableTarget(EntityCreature creature, Class classTarget, boolean checkSight) + { + this(creature, classTarget, checkSight, false); + } + + public EntityAINearestAttackableTarget(EntityCreature creature, Class classTarget, boolean checkSight, boolean onlyNearby) + { + this(creature, classTarget, 10, checkSight, onlyNearby, (Predicate)null); + } + + public EntityAINearestAttackableTarget(EntityCreature creature, Class classTarget, int chance, boolean checkSight, boolean onlyNearby, @Nullable final Predicate targetSelector) + { + super(creature, checkSight, onlyNearby); + this.targetClass = classTarget; + this.targetChance = chance; + this.sorter = new EntityAINearestAttackableTarget.Sorter(creature); + this.setMutexBits(1); + this.targetEntitySelector = new Predicate() + { + public boolean apply(@Nullable T p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else if (targetSelector != null && !targetSelector.apply(p_apply_1_)) + { + return false; + } + else + { + return !EntitySelectors.NOT_SPECTATING.apply(p_apply_1_) ? false : EntityAINearestAttackableTarget.this.isSuitableTarget(p_apply_1_, false); + } + } + }; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.targetChance > 0 && this.taskOwner.getRNG().nextInt(this.targetChance) != 0) + { + return false; + } + else if (this.targetClass != EntityPlayer.class && this.targetClass != EntityPlayerMP.class) + { + List list = this.taskOwner.world.getEntitiesWithinAABB(this.targetClass, this.getTargetableArea(this.getTargetDistance()), this.targetEntitySelector); + + if (list.isEmpty()) + { + return false; + } + else + { + Collections.sort(list, this.sorter); + this.targetEntity = list.get(0); + return true; + } + } + else + { + this.targetEntity = (T)this.taskOwner.world.getNearestAttackablePlayer(this.taskOwner.posX, this.taskOwner.posY + (double)this.taskOwner.getEyeHeight(), this.taskOwner.posZ, this.getTargetDistance(), this.getTargetDistance(), new Function() + { + @Nullable + public Double apply(@Nullable EntityPlayer p_apply_1_) + { + ItemStack itemstack = p_apply_1_.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + + if (itemstack.getItem() == Items.SKULL) + { + int i = itemstack.getItemDamage(); + boolean flag = EntityAINearestAttackableTarget.this.taskOwner instanceof EntitySkeleton && i == 0; + boolean flag1 = EntityAINearestAttackableTarget.this.taskOwner instanceof EntityZombie && i == 2; + boolean flag2 = EntityAINearestAttackableTarget.this.taskOwner instanceof EntityCreeper && i == 4; + + if (flag || flag1 || flag2) + { + return 0.5D; + } + } + + return 1.0D; + } + }, (Predicate)this.targetEntitySelector); + return this.targetEntity != null; + } + } + + protected AxisAlignedBB getTargetableArea(double targetDistance) + { + return this.taskOwner.getEntityBoundingBox().grow(targetDistance, 4.0D, targetDistance); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.taskOwner.setAttackTarget(this.targetEntity); + super.startExecuting(); + } + + public static class Sorter implements Comparator + { + private final Entity entity; + + public Sorter(Entity entityIn) + { + this.entity = entityIn; + } + + public int compare(Entity p_compare_1_, Entity p_compare_2_) + { + double d0 = this.entity.getDistanceSq(p_compare_1_); + double d1 = this.entity.getDistanceSq(p_compare_2_); + + if (d0 < d1) + { + return -1; + } + else + { + return d0 > d1 ? 1 : 0; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOcelotAttack.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOcelotAttack.java new file mode 100644 index 0000000..123ed69 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOcelotAttack.java @@ -0,0 +1,98 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; + +public class EntityAIOcelotAttack extends EntityAIBase +{ + World world; + EntityLiving entity; + EntityLivingBase target; + int attackCountdown; + + public EntityAIOcelotAttack(EntityLiving theEntityIn) + { + this.entity = theEntityIn; + this.world = theEntityIn.world; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.entity.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else + { + this.target = entitylivingbase; + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (!this.target.isEntityAlive()) + { + return false; + } + else if (this.entity.getDistanceSq(this.target) > 225.0D) + { + return false; + } + else + { + return !this.entity.getNavigator().noPath() || this.shouldExecute(); + } + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.target = null; + this.entity.getNavigator().clearPath(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.entity.getLookHelper().setLookPositionWithEntity(this.target, 30.0F, 30.0F); + double d0 = (double)(this.entity.width * 2.0F * this.entity.width * 2.0F); + double d1 = this.entity.getDistanceSq(this.target.posX, this.target.getEntityBoundingBox().minY, this.target.posZ); + double d2 = 0.8D; + + if (d1 > d0 && d1 < 16.0D) + { + d2 = 1.33D; + } + else if (d1 < 225.0D) + { + d2 = 0.6D; + } + + this.entity.getNavigator().tryMoveToEntityLiving(this.target, d2); + this.attackCountdown = Math.max(this.attackCountdown - 1, 0); + + if (d1 <= d0) + { + if (this.attackCountdown <= 0) + { + this.attackCountdown = 20; + this.entity.attackEntityAsMob(this.target); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOcelotSit.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOcelotSit.java new file mode 100644 index 0000000..585bf44 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOcelotSit.java @@ -0,0 +1,106 @@ +package net.minecraft.entity.ai; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockBed; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityAIOcelotSit extends EntityAIMoveToBlock +{ + private final EntityOcelot ocelot; + + public EntityAIOcelotSit(EntityOcelot ocelotIn, double p_i45315_2_) + { + super(ocelotIn, p_i45315_2_, 8); + this.ocelot = ocelotIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.ocelot.isTamed() && !this.ocelot.isSitting() && super.shouldExecute(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + this.ocelot.getAISit().setSitting(false); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + this.ocelot.setSitting(false); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + this.ocelot.getAISit().setSitting(false); + + if (!this.getIsAboveDestination()) + { + this.ocelot.setSitting(false); + } + else if (!this.ocelot.isSitting()) + { + this.ocelot.setSitting(true); + } + } + + /** + * Return true to set given position as destination + */ + protected boolean shouldMoveTo(World worldIn, BlockPos pos) + { + if (!worldIn.isAirBlock(pos.up())) + { + return false; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (block == Blocks.CHEST) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityChest && ((TileEntityChest)tileentity).numPlayersUsing < 1) + { + return true; + } + } + else + { + if (block == Blocks.LIT_FURNACE) + { + return true; + } + + if (block == Blocks.BED && iblockstate.getValue(BlockBed.PART) != BlockBed.EnumPartType.HEAD) + { + return true; + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOpenDoor.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOpenDoor.java new file mode 100644 index 0000000..a31a5d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOpenDoor.java @@ -0,0 +1,55 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; + +public class EntityAIOpenDoor extends EntityAIDoorInteract +{ + /** If the entity close the door */ + boolean closeDoor; + /** The temporisation before the entity close the door (in ticks, always 20 = 1 second) */ + int closeDoorTemporisation; + + public EntityAIOpenDoor(EntityLiving entitylivingIn, boolean shouldClose) + { + super(entitylivingIn); + this.entity = entitylivingIn; + this.closeDoor = shouldClose; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.closeDoor && this.closeDoorTemporisation > 0 && super.shouldContinueExecuting(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.closeDoorTemporisation = 20; + this.doorBlock.toggleDoor(this.entity.world, this.doorPosition, true); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + if (this.closeDoor) + { + this.doorBlock.toggleDoor(this.entity.world, this.doorPosition, false); + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.closeDoorTemporisation; + super.updateTask(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java new file mode 100644 index 0000000..7cadb31 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOwnerHurtByTarget.java @@ -0,0 +1,60 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; + +public class EntityAIOwnerHurtByTarget extends EntityAITarget +{ + EntityTameable tameable; + EntityLivingBase attacker; + private int timestamp; + + public EntityAIOwnerHurtByTarget(EntityTameable theDefendingTameableIn) + { + super(theDefendingTameableIn, false); + this.tameable = theDefendingTameableIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.tameable.isTamed()) + { + return false; + } + else + { + EntityLivingBase entitylivingbase = this.tameable.getOwner(); + + if (entitylivingbase == null) + { + return false; + } + else + { + this.attacker = entitylivingbase.getRevengeTarget(); + int i = entitylivingbase.getRevengeTimer(); + return i != this.timestamp && this.isSuitableTarget(this.attacker, false) && this.tameable.shouldAttackEntity(this.attacker, entitylivingbase); + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.taskOwner.setAttackTarget(this.attacker); + EntityLivingBase entitylivingbase = this.tameable.getOwner(); + + if (entitylivingbase != null) + { + this.timestamp = entitylivingbase.getRevengeTimer(); + } + + super.startExecuting(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java new file mode 100644 index 0000000..b1462e4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIOwnerHurtTarget.java @@ -0,0 +1,60 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; + +public class EntityAIOwnerHurtTarget extends EntityAITarget +{ + EntityTameable tameable; + EntityLivingBase attacker; + private int timestamp; + + public EntityAIOwnerHurtTarget(EntityTameable theEntityTameableIn) + { + super(theEntityTameableIn, false); + this.tameable = theEntityTameableIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.tameable.isTamed()) + { + return false; + } + else + { + EntityLivingBase entitylivingbase = this.tameable.getOwner(); + + if (entitylivingbase == null) + { + return false; + } + else + { + this.attacker = entitylivingbase.getLastAttackedEntity(); + int i = entitylivingbase.getLastAttackedEntityTime(); + return i != this.timestamp && this.isSuitableTarget(this.attacker, false) && this.tameable.shouldAttackEntity(this.attacker, entitylivingbase); + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.taskOwner.setAttackTarget(this.attacker); + EntityLivingBase entitylivingbase = this.tameable.getOwner(); + + if (entitylivingbase != null) + { + this.timestamp = entitylivingbase.getLastAttackedEntityTime(); + } + + super.startExecuting(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIPanic.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIPanic.java new file mode 100644 index 0000000..b6edd79 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIPanic.java @@ -0,0 +1,124 @@ +package net.minecraft.entity.ai; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class EntityAIPanic extends EntityAIBase +{ + protected final EntityCreature creature; + protected double speed; + protected double randPosX; + protected double randPosY; + protected double randPosZ; + + public EntityAIPanic(EntityCreature creature, double speedIn) + { + this.creature = creature; + this.speed = speedIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.creature.getRevengeTarget() == null && !this.creature.isBurning()) + { + return false; + } + else + { + if (this.creature.isBurning()) + { + BlockPos blockpos = this.getRandPos(this.creature.world, this.creature, 5, 4); + + if (blockpos != null) + { + this.randPosX = (double)blockpos.getX(); + this.randPosY = (double)blockpos.getY(); + this.randPosZ = (double)blockpos.getZ(); + return true; + } + } + + return this.findRandomPosition(); + } + } + + protected boolean findRandomPosition() + { + Vec3d vec3d = RandomPositionGenerator.findRandomTarget(this.creature, 5, 4); + + if (vec3d == null) + { + return false; + } + else + { + this.randPosX = vec3d.x; + this.randPosY = vec3d.y; + this.randPosZ = vec3d.z; + return true; + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.creature.getNavigator().tryMoveToXYZ(this.randPosX, this.randPosY, this.randPosZ, this.speed); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.creature.getNavigator().noPath(); + } + + @Nullable + private BlockPos getRandPos(World worldIn, Entity entityIn, int horizontalRange, int verticalRange) + { + BlockPos blockpos = new BlockPos(entityIn); + int i = blockpos.getX(); + int j = blockpos.getY(); + int k = blockpos.getZ(); + float f = (float)(horizontalRange * horizontalRange * verticalRange * 2); + BlockPos blockpos1 = null; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int l = i - horizontalRange; l <= i + horizontalRange; ++l) + { + for (int i1 = j - verticalRange; i1 <= j + verticalRange; ++i1) + { + for (int j1 = k - horizontalRange; j1 <= k + horizontalRange; ++j1) + { + blockpos$mutableblockpos.setPos(l, i1, j1); + IBlockState iblockstate = worldIn.getBlockState(blockpos$mutableblockpos); + + if (iblockstate.getMaterial() == Material.WATER) + { + float f1 = (float)((l - i) * (l - i) + (i1 - j) * (i1 - j) + (j1 - k) * (j1 - k)); + + if (f1 < f) + { + f = f1; + blockpos1 = new BlockPos(blockpos$mutableblockpos); + } + } + } + } + } + + return blockpos1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIPlay.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIPlay.java new file mode 100644 index 0000000..66cac90 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIPlay.java @@ -0,0 +1,124 @@ +package net.minecraft.entity.ai; + +import java.util.List; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.util.math.Vec3d; + +public class EntityAIPlay extends EntityAIBase +{ + private final EntityVillager villager; + private EntityLivingBase targetVillager; + private final double speed; + private int playTime; + + public EntityAIPlay(EntityVillager villagerIn, double speedIn) + { + this.villager = villagerIn; + this.speed = speedIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.villager.getGrowingAge() >= 0) + { + return false; + } + else if (this.villager.getRNG().nextInt(400) != 0) + { + return false; + } + else + { + List list = this.villager.world.getEntitiesWithinAABB(EntityVillager.class, this.villager.getEntityBoundingBox().grow(6.0D, 3.0D, 6.0D)); + double d0 = Double.MAX_VALUE; + + for (EntityVillager entityvillager : list) + { + if (entityvillager != this.villager && !entityvillager.isPlaying() && entityvillager.getGrowingAge() < 0) + { + double d1 = entityvillager.getDistanceSq(this.villager); + + if (d1 <= d0) + { + d0 = d1; + this.targetVillager = entityvillager; + } + } + } + + if (this.targetVillager == null) + { + Vec3d vec3d = RandomPositionGenerator.findRandomTarget(this.villager, 16, 3); + + if (vec3d == null) + { + return false; + } + } + + return true; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.playTime > 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + if (this.targetVillager != null) + { + this.villager.setPlaying(true); + } + + this.playTime = 1000; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.villager.setPlaying(false); + this.targetVillager = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.playTime; + + if (this.targetVillager != null) + { + if (this.villager.getDistanceSq(this.targetVillager) > 4.0D) + { + this.villager.getNavigator().tryMoveToEntityLiving(this.targetVillager, this.speed); + } + } + else if (this.villager.getNavigator().noPath()) + { + Vec3d vec3d = RandomPositionGenerator.findRandomTarget(this.villager, 16, 3); + + if (vec3d == null) + { + return; + } + + this.villager.getNavigator().tryMoveToXYZ(vec3d.x, vec3d.y, vec3d.z, this.speed); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java new file mode 100644 index 0000000..e96333d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRestrictOpenDoor.java @@ -0,0 +1,99 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.util.math.BlockPos; +import net.minecraft.village.Village; +import net.minecraft.village.VillageDoorInfo; + +public class EntityAIRestrictOpenDoor extends EntityAIBase +{ + private final EntityCreature entity; + private VillageDoorInfo frontDoor; + + public EntityAIRestrictOpenDoor(EntityCreature creatureIn) + { + this.entity = creatureIn; + + if (!(creatureIn.getNavigator() instanceof PathNavigateGround)) + { + throw new IllegalArgumentException("Unsupported mob type for RestrictOpenDoorGoal"); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.entity.world.isDaytime()) + { + return false; + } + else + { + BlockPos blockpos = new BlockPos(this.entity); + Village village = this.entity.world.getVillageCollection().getNearestVillage(blockpos, 16); + + if (village == null) + { + return false; + } + else + { + this.frontDoor = village.getNearestDoor(blockpos); + + if (this.frontDoor == null) + { + return false; + } + else + { + return (double)this.frontDoor.getDistanceToInsideBlockSq(blockpos) < 2.25D; + } + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.entity.world.isDaytime()) + { + return false; + } + else + { + return !this.frontDoor.getIsDetachedFromVillageFlag() && this.frontDoor.isInsideSide(new BlockPos(this.entity)); + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + ((PathNavigateGround)this.entity.getNavigator()).setBreakDoors(false); + ((PathNavigateGround)this.entity.getNavigator()).setEnterDoors(false); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + ((PathNavigateGround)this.entity.getNavigator()).setBreakDoors(true); + ((PathNavigateGround)this.entity.getNavigator()).setEnterDoors(true); + this.frontDoor = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.frontDoor.incrementDoorOpeningRestrictionCounter(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRestrictSun.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRestrictSun.java new file mode 100644 index 0000000..cc6deb5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRestrictSun.java @@ -0,0 +1,39 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityCreature; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.pathfinding.PathNavigateGround; + +public class EntityAIRestrictSun extends EntityAIBase +{ + private final EntityCreature entity; + + public EntityAIRestrictSun(EntityCreature creature) + { + this.entity = creature; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.entity.world.isDaytime() && this.entity.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isEmpty(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + ((PathNavigateGround)this.entity.getNavigator()).setAvoidSun(true); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + ((PathNavigateGround)this.entity.getNavigator()).setAvoidSun(false); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java new file mode 100644 index 0000000..6f898e2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIRunAroundLikeCrazy.java @@ -0,0 +1,99 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.math.Vec3d; + +public class EntityAIRunAroundLikeCrazy extends EntityAIBase +{ + private final AbstractHorse horseHost; + private final double speed; + private double targetX; + private double targetY; + private double targetZ; + + public EntityAIRunAroundLikeCrazy(AbstractHorse horse, double speedIn) + { + this.horseHost = horse; + this.speed = speedIn; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.horseHost.isTame() && this.horseHost.isBeingRidden()) + { + Vec3d vec3d = RandomPositionGenerator.findRandomTarget(this.horseHost, 5, 4); + + if (vec3d == null) + { + return false; + } + else + { + this.targetX = vec3d.x; + this.targetY = vec3d.y; + this.targetZ = vec3d.z; + return true; + } + } + else + { + return false; + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.horseHost.getNavigator().tryMoveToXYZ(this.targetX, this.targetY, this.targetZ, this.speed); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.horseHost.isTame() && !this.horseHost.getNavigator().noPath() && this.horseHost.isBeingRidden(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (!this.horseHost.isTame() && this.horseHost.getRNG().nextInt(50) == 0) + { + Entity entity = (Entity)this.horseHost.getPassengers().get(0); + + if (entity == null) + { + return; + } + + if (entity instanceof EntityPlayer) + { + int i = this.horseHost.getTemper(); + int j = this.horseHost.getMaxTemper(); + + if (j > 0 && this.horseHost.getRNG().nextInt(j) < i && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(horseHost, (EntityPlayer)entity)) + { + this.horseHost.setTamedBy((EntityPlayer)entity); + return; + } + + this.horseHost.increaseTemper(5); + } + + this.horseHost.removePassengers(); + this.horseHost.makeMad(); + this.horseHost.world.setEntityState(this.horseHost, (byte)6); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISit.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISit.java new file mode 100644 index 0000000..2fb80f0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISit.java @@ -0,0 +1,74 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; + +public class EntityAISit extends EntityAIBase +{ + private final EntityTameable tameable; + /** If the EntityTameable is sitting. */ + private boolean isSitting; + + public EntityAISit(EntityTameable entityIn) + { + this.tameable = entityIn; + this.setMutexBits(5); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.tameable.isTamed()) + { + return false; + } + else if (this.tameable.isInWater()) + { + return false; + } + else if (!this.tameable.onGround) + { + return false; + } + else + { + EntityLivingBase entitylivingbase = this.tameable.getOwner(); + + if (entitylivingbase == null) + { + return true; + } + else + { + return this.tameable.getDistanceSq(entitylivingbase) < 144.0D && entitylivingbase.getRevengeTarget() != null ? false : this.isSitting; + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.tameable.getNavigator().clearPath(); + this.tameable.setSitting(true); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.tameable.setSitting(false); + } + + /** + * Sets the sitting flag. + */ + public void setSitting(boolean sitting) + { + this.isSitting = sitting; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISkeletonRiders.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISkeletonRiders.java new file mode 100644 index 0000000..7c8faac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISkeletonRiders.java @@ -0,0 +1,85 @@ +package net.minecraft.entity.ai; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.passive.EntitySkeletonHorse; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.DifficultyInstance; + +public class EntityAISkeletonRiders extends EntityAIBase +{ + private final EntitySkeletonHorse horse; + + public EntityAISkeletonRiders(EntitySkeletonHorse horseIn) + { + this.horse = horseIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.horse.world.isAnyPlayerWithinRangeAt(this.horse.posX, this.horse.posY, this.horse.posZ, 10.0D); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + DifficultyInstance difficultyinstance = this.horse.world.getDifficultyForLocation(new BlockPos(this.horse)); + this.horse.setTrap(false); + this.horse.setHorseTamed(true); + this.horse.setGrowingAge(0); + this.horse.world.addWeatherEffect(new EntityLightningBolt(this.horse.world, this.horse.posX, this.horse.posY, this.horse.posZ, true)); + EntitySkeleton entityskeleton = this.createSkeleton(difficultyinstance, this.horse); + entityskeleton.startRiding(this.horse); + + for (int i = 0; i < 3; ++i) + { + AbstractHorse abstracthorse = this.createHorse(difficultyinstance); + EntitySkeleton entityskeleton1 = this.createSkeleton(difficultyinstance, abstracthorse); + entityskeleton1.startRiding(abstracthorse); + abstracthorse.addVelocity(this.horse.getRNG().nextGaussian() * 0.5D, 0.0D, this.horse.getRNG().nextGaussian() * 0.5D); + } + } + + private AbstractHorse createHorse(DifficultyInstance p_188515_1_) + { + EntitySkeletonHorse entityskeletonhorse = new EntitySkeletonHorse(this.horse.world); + entityskeletonhorse.onInitialSpawn(p_188515_1_, (IEntityLivingData)null); + entityskeletonhorse.setPosition(this.horse.posX, this.horse.posY, this.horse.posZ); + entityskeletonhorse.hurtResistantTime = 60; + entityskeletonhorse.enablePersistence(); + entityskeletonhorse.setHorseTamed(true); + entityskeletonhorse.setGrowingAge(0); + entityskeletonhorse.world.spawnEntity(entityskeletonhorse); + return entityskeletonhorse; + } + + private EntitySkeleton createSkeleton(DifficultyInstance p_188514_1_, AbstractHorse p_188514_2_) + { + EntitySkeleton entityskeleton = new EntitySkeleton(p_188514_2_.world); + entityskeleton.onInitialSpawn(p_188514_1_, (IEntityLivingData)null); + entityskeleton.setPosition(p_188514_2_.posX, p_188514_2_.posY, p_188514_2_.posZ); + entityskeleton.hurtResistantTime = 60; + entityskeleton.enablePersistence(); + + if (entityskeleton.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isEmpty()) + { + entityskeleton.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(Items.IRON_HELMET)); + } + + entityskeleton.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, EnchantmentHelper.addRandomEnchantment(entityskeleton.getRNG(), entityskeleton.getHeldItemMainhand(), (int)(5.0F + p_188514_1_.getClampedAdditionalDifficulty() * (float)entityskeleton.getRNG().nextInt(18)), false)); + entityskeleton.setItemStackToSlot(EntityEquipmentSlot.HEAD, EnchantmentHelper.addRandomEnchantment(entityskeleton.getRNG(), entityskeleton.getItemStackFromSlot(EntityEquipmentSlot.HEAD), (int)(5.0F + p_188514_1_.getClampedAdditionalDifficulty() * (float)entityskeleton.getRNG().nextInt(18)), false)); + entityskeleton.world.spawnEntity(entityskeleton); + return entityskeleton; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISwimming.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISwimming.java new file mode 100644 index 0000000..b54851d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAISwimming.java @@ -0,0 +1,44 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.pathfinding.PathNavigateFlying; +import net.minecraft.pathfinding.PathNavigateGround; + +public class EntityAISwimming extends EntityAIBase +{ + private final EntityLiving entity; + + public EntityAISwimming(EntityLiving entityIn) + { + this.entity = entityIn; + this.setMutexBits(4); + + if (entityIn.getNavigator() instanceof PathNavigateGround) + { + ((PathNavigateGround)entityIn.getNavigator()).setCanSwim(true); + } + else if (entityIn.getNavigator() instanceof PathNavigateFlying) + { + ((PathNavigateFlying)entityIn.getNavigator()).setCanFloat(true); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.entity.isInWater() || this.entity.isInLava(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.entity.getRNG().nextFloat() < 0.8F) + { + this.entity.getJumpHelper().setJumping(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITarget.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITarget.java new file mode 100644 index 0000000..0e7c408 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITarget.java @@ -0,0 +1,260 @@ +package net.minecraft.entity.ai; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityOwnable; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.scoreboard.Team; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +public abstract class EntityAITarget extends EntityAIBase +{ + /** The entity that this task belongs to */ + protected final EntityCreature taskOwner; + /** If true, EntityAI targets must be able to be seen (cannot be blocked by walls) to be suitable targets. */ + protected boolean shouldCheckSight; + /** When true, only entities that can be reached with minimal effort will be targetted. */ + private final boolean nearbyOnly; + /** When nearbyOnly is true: 0 -> No target, but OK to search; 1 -> Nearby target found; 2 -> Target too far. */ + private int targetSearchStatus; + /** When nearbyOnly is true, this throttles target searching to avoid excessive pathfinding. */ + private int targetSearchDelay; + /** + * If @shouldCheckSight is true, the number of ticks before the interuption of this AITastk when the entity does't + * see the target + */ + private int targetUnseenTicks; + protected EntityLivingBase target; + protected int unseenMemoryTicks; + + public EntityAITarget(EntityCreature creature, boolean checkSight) + { + this(creature, checkSight, false); + } + + public EntityAITarget(EntityCreature creature, boolean checkSight, boolean onlyNearby) + { + this.unseenMemoryTicks = 60; + this.taskOwner = creature; + this.shouldCheckSight = checkSight; + this.nearbyOnly = onlyNearby; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + EntityLivingBase entitylivingbase = this.taskOwner.getAttackTarget(); + + if (entitylivingbase == null) + { + entitylivingbase = this.target; + } + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else + { + Team team = this.taskOwner.getTeam(); + Team team1 = entitylivingbase.getTeam(); + + if (team != null && team1 == team) + { + return false; + } + else + { + double d0 = this.getTargetDistance(); + + if (this.taskOwner.getDistanceSq(entitylivingbase) > d0 * d0) + { + return false; + } + else + { + if (this.shouldCheckSight) + { + if (this.taskOwner.getEntitySenses().canSee(entitylivingbase)) + { + this.targetUnseenTicks = 0; + } + else if (++this.targetUnseenTicks > this.unseenMemoryTicks) + { + return false; + } + } + + if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer)entitylivingbase).capabilities.disableDamage) + { + return false; + } + else + { + this.taskOwner.setAttackTarget(entitylivingbase); + return true; + } + } + } + } + } + + protected double getTargetDistance() + { + IAttributeInstance iattributeinstance = this.taskOwner.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE); + return iattributeinstance == null ? 16.0D : iattributeinstance.getAttributeValue(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.targetSearchStatus = 0; + this.targetSearchDelay = 0; + this.targetUnseenTicks = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.taskOwner.setAttackTarget((EntityLivingBase)null); + this.target = null; + } + + /** + * A static method used to see if an entity is a suitable target through a number of checks. + */ + public static boolean isSuitableTarget(EntityLiving attacker, @Nullable EntityLivingBase target, boolean includeInvincibles, boolean checkSight) + { + if (target == null) + { + return false; + } + else if (target == attacker) + { + return false; + } + else if (!target.isEntityAlive()) + { + return false; + } + else if (!attacker.canAttackClass(target.getClass())) + { + return false; + } + else if (attacker.isOnSameTeam(target)) + { + return false; + } + else + { + if (attacker instanceof IEntityOwnable && ((IEntityOwnable)attacker).getOwnerId() != null) + { + if (target instanceof IEntityOwnable && ((IEntityOwnable)attacker).getOwnerId().equals(((IEntityOwnable)target).getOwnerId())) + { + return false; + } + + if (target == ((IEntityOwnable)attacker).getOwner()) + { + return false; + } + } + else if (target instanceof EntityPlayer && !includeInvincibles && ((EntityPlayer)target).capabilities.disableDamage) + { + return false; + } + + return !checkSight || attacker.getEntitySenses().canSee(target); + } + } + + /** + * A method used to see if an entity is a suitable target through a number of checks. Args : entity, + * canTargetInvinciblePlayer + */ + protected boolean isSuitableTarget(@Nullable EntityLivingBase target, boolean includeInvincibles) + { + if (!isSuitableTarget(this.taskOwner, target, includeInvincibles, this.shouldCheckSight)) + { + return false; + } + else if (!this.taskOwner.isWithinHomeDistanceFromPosition(new BlockPos(target))) + { + return false; + } + else + { + if (this.nearbyOnly) + { + if (--this.targetSearchDelay <= 0) + { + this.targetSearchStatus = 0; + } + + if (this.targetSearchStatus == 0) + { + this.targetSearchStatus = this.canEasilyReach(target) ? 1 : 2; + } + + if (this.targetSearchStatus == 2) + { + return false; + } + } + + return true; + } + } + + /** + * Checks to see if this entity can find a short path to the given target. + */ + private boolean canEasilyReach(EntityLivingBase target) + { + this.targetSearchDelay = 10 + this.taskOwner.getRNG().nextInt(5); + Path path = this.taskOwner.getNavigator().getPathToEntityLiving(target); + + if (path == null) + { + return false; + } + else + { + PathPoint pathpoint = path.getFinalPathPoint(); + + if (pathpoint == null) + { + return false; + } + else + { + int i = pathpoint.x - MathHelper.floor(target.posX); + int j = pathpoint.z - MathHelper.floor(target.posZ); + return (double)(i * i + j * j) <= 2.25D; + } + } + } + + public EntityAITarget setUnseenMemoryTicks(int p_190882_1_) + { + this.unseenMemoryTicks = p_190882_1_; + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITargetNonTamed.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITargetNonTamed.java new file mode 100644 index 0000000..f88851f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITargetNonTamed.java @@ -0,0 +1,24 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicate; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; + +public class EntityAITargetNonTamed extends EntityAINearestAttackableTarget +{ + private final EntityTameable tameable; + + public EntityAITargetNonTamed(EntityTameable entityIn, Class classTarget, boolean checkSight, Predicate targetSelector) + { + super(entityIn, classTarget, 10, checkSight, false, targetSelector); + this.tameable = entityIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return !this.tameable.isTamed() && super.shouldExecute(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITasks.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITasks.java new file mode 100644 index 0000000..69f62e0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITasks.java @@ -0,0 +1,233 @@ +package net.minecraft.entity.ai; + +import com.google.common.collect.Sets; +import java.util.Iterator; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.profiler.Profiler; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityAITasks +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** A list of EntityAITaskEntrys in EntityAITasks. */ + public final Set taskEntries = Sets.newLinkedHashSet(); + /** A list of EntityAITaskEntrys that are currently being executed. */ + private final Set executingTaskEntries = Sets.newLinkedHashSet(); + /** Instance of Profiler. */ + private final Profiler profiler; + private int tickCount; + private int tickRate = 3; + private int disabledControlFlags; + + public EntityAITasks(Profiler profilerIn) + { + this.profiler = profilerIn; + } + + /** + * Add a now AITask. Args : priority, task + */ + public void addTask(int priority, EntityAIBase task) + { + this.taskEntries.add(new EntityAITasks.EntityAITaskEntry(priority, task)); + } + + /** + * removes the indicated task from the entity's AI tasks. + */ + public void removeTask(EntityAIBase task) + { + Iterator iterator = this.taskEntries.iterator(); + + while (iterator.hasNext()) + { + EntityAITasks.EntityAITaskEntry entityaitasks$entityaitaskentry = iterator.next(); + EntityAIBase entityaibase = entityaitasks$entityaitaskentry.action; + + if (entityaibase == task) + { + if (entityaitasks$entityaitaskentry.using) + { + entityaitasks$entityaitaskentry.using = false; + entityaitasks$entityaitaskentry.action.resetTask(); + this.executingTaskEntries.remove(entityaitasks$entityaitaskentry); + } + + iterator.remove(); + return; + } + } + } + + public void onUpdateTasks() + { + this.profiler.startSection("goalSetup"); + + if (this.tickCount++ % this.tickRate == 0) + { + for (EntityAITasks.EntityAITaskEntry entityaitasks$entityaitaskentry : this.taskEntries) + { + if (entityaitasks$entityaitaskentry.using) + { + if (!this.canUse(entityaitasks$entityaitaskentry) || !this.canContinue(entityaitasks$entityaitaskentry)) + { + entityaitasks$entityaitaskentry.using = false; + entityaitasks$entityaitaskentry.action.resetTask(); + this.executingTaskEntries.remove(entityaitasks$entityaitaskentry); + } + } + else if (this.canUse(entityaitasks$entityaitaskentry) && entityaitasks$entityaitaskentry.action.shouldExecute()) + { + entityaitasks$entityaitaskentry.using = true; + entityaitasks$entityaitaskentry.action.startExecuting(); + this.executingTaskEntries.add(entityaitasks$entityaitaskentry); + } + } + } + else + { + Iterator iterator = this.executingTaskEntries.iterator(); + + while (iterator.hasNext()) + { + EntityAITasks.EntityAITaskEntry entityaitasks$entityaitaskentry1 = iterator.next(); + + if (!this.canContinue(entityaitasks$entityaitaskentry1)) + { + entityaitasks$entityaitaskentry1.using = false; + entityaitasks$entityaitaskentry1.action.resetTask(); + iterator.remove(); + } + } + } + + this.profiler.endSection(); + + if (!this.executingTaskEntries.isEmpty()) + { + this.profiler.startSection("goalTick"); + + for (EntityAITasks.EntityAITaskEntry entityaitasks$entityaitaskentry2 : this.executingTaskEntries) + { + entityaitasks$entityaitaskentry2.action.updateTask(); + } + + this.profiler.endSection(); + } + } + + /** + * Determine if a specific AI Task should continue being executed. + */ + private boolean canContinue(EntityAITasks.EntityAITaskEntry taskEntry) + { + return taskEntry.action.shouldContinueExecuting(); + } + + /** + * Determine if a specific AI Task can be executed, which means that all running higher (= lower int value) priority + * tasks are compatible with it or all lower priority tasks can be interrupted. + */ + private boolean canUse(EntityAITasks.EntityAITaskEntry taskEntry) + { + if (this.executingTaskEntries.isEmpty()) + { + return true; + } + else if (this.isControlFlagDisabled(taskEntry.action.getMutexBits())) + { + return false; + } + else + { + for (EntityAITasks.EntityAITaskEntry entityaitasks$entityaitaskentry : this.executingTaskEntries) + { + if (entityaitasks$entityaitaskentry != taskEntry) + { + if (taskEntry.priority >= entityaitasks$entityaitaskentry.priority) + { + if (!this.areTasksCompatible(taskEntry, entityaitasks$entityaitaskentry)) + { + return false; + } + } + else if (!entityaitasks$entityaitaskentry.action.isInterruptible()) + { + return false; + } + } + } + + return true; + } + } + + /** + * Returns whether two EntityAITaskEntries can be executed concurrently + */ + private boolean areTasksCompatible(EntityAITasks.EntityAITaskEntry taskEntry1, EntityAITasks.EntityAITaskEntry taskEntry2) + { + return (taskEntry1.action.getMutexBits() & taskEntry2.action.getMutexBits()) == 0; + } + + public boolean isControlFlagDisabled(int p_188528_1_) + { + return (this.disabledControlFlags & p_188528_1_) > 0; + } + + public void disableControlFlag(int p_188526_1_) + { + this.disabledControlFlags |= p_188526_1_; + } + + public void enableControlFlag(int p_188525_1_) + { + this.disabledControlFlags &= ~p_188525_1_; + } + + public void setControlFlag(int p_188527_1_, boolean p_188527_2_) + { + if (p_188527_2_) + { + this.enableControlFlag(p_188527_1_); + } + else + { + this.disableControlFlag(p_188527_1_); + } + } + + public class EntityAITaskEntry + { + /** The EntityAIBase object. */ + public final EntityAIBase action; + /** Priority of the EntityAIBase */ + public final int priority; + public boolean using; + + public EntityAITaskEntry(int priorityIn, EntityAIBase task) + { + this.priority = priorityIn; + this.action = task; + } + + public boolean equals(@Nullable Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else + { + return p_equals_1_ != null && this.getClass() == p_equals_1_.getClass() ? this.action.equals(((EntityAITasks.EntityAITaskEntry)p_equals_1_).action) : false; + } + } + + public int hashCode() + { + return this.action.hashCode(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITempt.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITempt.java new file mode 100644 index 0000000..ddd5d84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITempt.java @@ -0,0 +1,167 @@ +package net.minecraft.entity.ai; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.pathfinding.PathNavigateGround; + +public class EntityAITempt extends EntityAIBase +{ + /** The entity using this AI that is tempted by the player. */ + private final EntityCreature temptedEntity; + private final double speed; + /** X position of player tempting this mob */ + private double targetX; + /** Y position of player tempting this mob */ + private double targetY; + /** Z position of player tempting this mob */ + private double targetZ; + /** Tempting player's pitch */ + private double pitch; + /** Tempting player's yaw */ + private double yaw; + /** The player that is tempting the entity that is using this AI. */ + private EntityPlayer temptingPlayer; + /** + * A counter that is decremented each time the shouldExecute method is called. The shouldExecute method will always + * return false if delayTemptCounter is greater than 0. + */ + private int delayTemptCounter; + /** True if this EntityAITempt task is running */ + private boolean isRunning; + private final Set temptItem; + /** Whether the entity using this AI will be scared by the tempter's sudden movement. */ + private final boolean scaredByPlayerMovement; + + public EntityAITempt(EntityCreature temptedEntityIn, double speedIn, Item temptItemIn, boolean scaredByPlayerMovementIn) + { + this(temptedEntityIn, speedIn, scaredByPlayerMovementIn, Sets.newHashSet(temptItemIn)); + } + + public EntityAITempt(EntityCreature temptedEntityIn, double speedIn, boolean scaredByPlayerMovementIn, Set temptItemIn) + { + this.temptedEntity = temptedEntityIn; + this.speed = speedIn; + this.temptItem = temptItemIn; + this.scaredByPlayerMovement = scaredByPlayerMovementIn; + this.setMutexBits(3); + + if (!(temptedEntityIn.getNavigator() instanceof PathNavigateGround)) + { + throw new IllegalArgumentException("Unsupported mob type for TemptGoal"); + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.delayTemptCounter > 0) + { + --this.delayTemptCounter; + return false; + } + else + { + this.temptingPlayer = this.temptedEntity.world.getClosestPlayerToEntity(this.temptedEntity, 10.0D); + + if (this.temptingPlayer == null) + { + return false; + } + else + { + return this.isTempting(this.temptingPlayer.getHeldItemMainhand()) || this.isTempting(this.temptingPlayer.getHeldItemOffhand()); + } + } + } + + protected boolean isTempting(ItemStack stack) + { + return this.temptItem.contains(stack.getItem()); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.scaredByPlayerMovement) + { + if (this.temptedEntity.getDistanceSq(this.temptingPlayer) < 36.0D) + { + if (this.temptingPlayer.getDistanceSq(this.targetX, this.targetY, this.targetZ) > 0.010000000000000002D) + { + return false; + } + + if (Math.abs((double)this.temptingPlayer.rotationPitch - this.pitch) > 5.0D || Math.abs((double)this.temptingPlayer.rotationYaw - this.yaw) > 5.0D) + { + return false; + } + } + else + { + this.targetX = this.temptingPlayer.posX; + this.targetY = this.temptingPlayer.posY; + this.targetZ = this.temptingPlayer.posZ; + } + + this.pitch = (double)this.temptingPlayer.rotationPitch; + this.yaw = (double)this.temptingPlayer.rotationYaw; + } + + return this.shouldExecute(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.targetX = this.temptingPlayer.posX; + this.targetY = this.temptingPlayer.posY; + this.targetZ = this.temptingPlayer.posZ; + this.isRunning = true; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.temptingPlayer = null; + this.temptedEntity.getNavigator().clearPath(); + this.delayTemptCounter = 100; + this.isRunning = false; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.temptedEntity.getLookHelper().setLookPositionWithEntity(this.temptingPlayer, (float)(this.temptedEntity.getHorizontalFaceSpeed() + 20), (float)this.temptedEntity.getVerticalFaceSpeed()); + + if (this.temptedEntity.getDistanceSq(this.temptingPlayer) < 6.25D) + { + this.temptedEntity.getNavigator().clearPath(); + } + else + { + this.temptedEntity.getNavigator().tryMoveToEntityLiving(this.temptingPlayer, this.speed); + } + } + + /** + * @see #isRunning + */ + public boolean isRunning() + { + return this.isRunning; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITradePlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITradePlayer.java new file mode 100644 index 0000000..8fcb5f7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAITradePlayer.java @@ -0,0 +1,71 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; + +public class EntityAITradePlayer extends EntityAIBase +{ + private final EntityVillager villager; + + public EntityAITradePlayer(EntityVillager villagerIn) + { + this.villager = villagerIn; + this.setMutexBits(5); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.villager.isEntityAlive()) + { + return false; + } + else if (this.villager.isInWater()) + { + return false; + } + else if (!this.villager.onGround) + { + return false; + } + else if (this.villager.velocityChanged) + { + return false; + } + else + { + EntityPlayer entityplayer = this.villager.getCustomer(); + + if (entityplayer == null) + { + return false; + } + else if (this.villager.getDistanceSq(entityplayer) > 16.0D) + { + return false; + } + else + { + return entityplayer.openContainer != null; + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.villager.getNavigator().clearPath(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.villager.setCustomer((EntityPlayer)null); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIVillagerInteract.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIVillagerInteract.java new file mode 100644 index 0000000..89357ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIVillagerInteract.java @@ -0,0 +1,102 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; + +public class EntityAIVillagerInteract extends EntityAIWatchClosest2 +{ + /** The delay before the villager throws an itemstack (in ticks) */ + private int interactionDelay; + private final EntityVillager villager; + + public EntityAIVillagerInteract(EntityVillager villagerIn) + { + super(villagerIn, EntityVillager.class, 3.0F, 0.02F); + this.villager = villagerIn; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + + if (this.villager.canAbondonItems() && this.closestEntity instanceof EntityVillager && ((EntityVillager)this.closestEntity).wantsMoreFood()) + { + this.interactionDelay = 10; + } + else + { + this.interactionDelay = 0; + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + + if (this.interactionDelay > 0) + { + --this.interactionDelay; + + if (this.interactionDelay == 0) + { + InventoryBasic inventorybasic = this.villager.getVillagerInventory(); + + for (int i = 0; i < inventorybasic.getSizeInventory(); ++i) + { + ItemStack itemstack = inventorybasic.getStackInSlot(i); + ItemStack itemstack1 = ItemStack.EMPTY; + + if (!itemstack.isEmpty()) + { + Item item = itemstack.getItem(); + + if ((item == Items.BREAD || item == Items.POTATO || item == Items.CARROT || item == Items.BEETROOT) && itemstack.getCount() > 3) + { + int l = itemstack.getCount() / 2; + itemstack.shrink(l); + itemstack1 = new ItemStack(item, l, itemstack.getMetadata()); + } + else if (item == Items.WHEAT && itemstack.getCount() > 5) + { + int j = itemstack.getCount() / 2 / 3 * 3; + int k = j / 3; + itemstack.shrink(j); + itemstack1 = new ItemStack(Items.BREAD, k, 0); + } + + if (itemstack.isEmpty()) + { + inventorybasic.setInventorySlotContents(i, ItemStack.EMPTY); + } + } + + if (!itemstack1.isEmpty()) + { + double d0 = this.villager.posY - 0.30000001192092896D + (double)this.villager.getEyeHeight(); + EntityItem entityitem = new EntityItem(this.villager.world, this.villager.posX, d0, this.villager.posZ, itemstack1); + float f = 0.3F; + float f1 = this.villager.rotationYawHead; + float f2 = this.villager.rotationPitch; + entityitem.motionX = (double)(-MathHelper.sin(f1 * 0.017453292F) * MathHelper.cos(f2 * 0.017453292F) * 0.3F); + entityitem.motionZ = (double)(MathHelper.cos(f1 * 0.017453292F) * MathHelper.cos(f2 * 0.017453292F) * 0.3F); + entityitem.motionY = (double)(-MathHelper.sin(f2 * 0.017453292F) * 0.3F + 0.1F); + entityitem.setDefaultPickupDelay(); + this.villager.world.spawnEntity(entityitem); + break; + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIVillagerMate.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIVillagerMate.java new file mode 100644 index 0000000..8f04bd3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIVillagerMate.java @@ -0,0 +1,145 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.village.Village; +import net.minecraft.world.World; + +public class EntityAIVillagerMate extends EntityAIBase +{ + private final EntityVillager villager; + private EntityVillager mate; + private final World world; + private int matingTimeout; + Village village; + + public EntityAIVillagerMate(EntityVillager villagerIn) + { + this.villager = villagerIn; + this.world = villagerIn.world; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.villager.getGrowingAge() != 0) + { + return false; + } + else if (this.villager.getRNG().nextInt(500) != 0) + { + return false; + } + else + { + this.village = this.world.getVillageCollection().getNearestVillage(new BlockPos(this.villager), 0); + + if (this.village == null) + { + return false; + } + else if (this.checkSufficientDoorsPresentForNewVillager() && this.villager.getIsWillingToMate(true)) + { + Entity entity = this.world.findNearestEntityWithinAABB(EntityVillager.class, this.villager.getEntityBoundingBox().grow(8.0D, 3.0D, 8.0D), this.villager); + + if (entity == null) + { + return false; + } + else + { + this.mate = (EntityVillager)entity; + return this.mate.getGrowingAge() == 0 && this.mate.getIsWillingToMate(true); + } + } + else + { + return false; + } + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.matingTimeout = 300; + this.villager.setMating(true); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.village = null; + this.mate = null; + this.villager.setMating(false); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.matingTimeout >= 0 && this.checkSufficientDoorsPresentForNewVillager() && this.villager.getGrowingAge() == 0 && this.villager.getIsWillingToMate(false); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.matingTimeout; + this.villager.getLookHelper().setLookPositionWithEntity(this.mate, 10.0F, 30.0F); + + if (this.villager.getDistanceSq(this.mate) > 2.25D) + { + this.villager.getNavigator().tryMoveToEntityLiving(this.mate, 0.25D); + } + else if (this.matingTimeout == 0 && this.mate.isMating()) + { + this.giveBirth(); + } + + if (this.villager.getRNG().nextInt(35) == 0) + { + this.world.setEntityState(this.villager, (byte)12); + } + } + + private boolean checkSufficientDoorsPresentForNewVillager() + { + if (!this.village.isMatingSeason()) + { + return false; + } + else + { + int i = (int)((double)((float)this.village.getNumVillageDoors()) * 0.35D); + return this.village.getNumVillagers() < i; + } + } + + private void giveBirth() + { + net.minecraft.entity.EntityAgeable entityvillager = this.villager.createChild(this.mate); + this.mate.setGrowingAge(6000); + this.villager.setGrowingAge(6000); + this.mate.setIsWillingToMate(false); + this.villager.setIsWillingToMate(false); + + final net.minecraftforge.event.entity.living.BabyEntitySpawnEvent event = new net.minecraftforge.event.entity.living.BabyEntitySpawnEvent(villager, mate, entityvillager); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event) || event.getChild() == null) { return; } + entityvillager = event.getChild(); + entityvillager.setGrowingAge(-24000); + entityvillager.setLocationAndAngles(this.villager.posX, this.villager.posY, this.villager.posZ, 0.0F, 0.0F); + this.world.spawnEntity(entityvillager); + this.world.setEntityState(entityvillager, (byte)12); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWander.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWander.java new file mode 100644 index 0000000..09b8abc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWander.java @@ -0,0 +1,101 @@ +package net.minecraft.entity.ai; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.util.math.Vec3d; + +public class EntityAIWander extends EntityAIBase +{ + protected final EntityCreature entity; + protected double x; + protected double y; + protected double z; + protected final double speed; + protected int executionChance; + protected boolean mustUpdate; + + public EntityAIWander(EntityCreature creatureIn, double speedIn) + { + this(creatureIn, speedIn, 120); + } + + public EntityAIWander(EntityCreature creatureIn, double speedIn, int chance) + { + this.entity = creatureIn; + this.speed = speedIn; + this.executionChance = chance; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!this.mustUpdate) + { + if (this.entity.getIdleTime() >= 100) + { + return false; + } + + if (this.entity.getRNG().nextInt(this.executionChance) != 0) + { + return false; + } + } + + Vec3d vec3d = this.getPosition(); + + if (vec3d == null) + { + return false; + } + else + { + this.x = vec3d.x; + this.y = vec3d.y; + this.z = vec3d.z; + this.mustUpdate = false; + return true; + } + } + + @Nullable + protected Vec3d getPosition() + { + return RandomPositionGenerator.findRandomTarget(this.entity, 10, 7); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return !this.entity.getNavigator().noPath(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.entity.getNavigator().tryMoveToXYZ(this.x, this.y, this.z, this.speed); + } + + /** + * Makes task to bypass chance + */ + public void makeUpdate() + { + this.mustUpdate = true; + } + + /** + * Changes task random possibility for execution + */ + public void setExecutionChance(int newchance) + { + this.executionChance = newchance; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWanderAvoidWater.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWanderAvoidWater.java new file mode 100644 index 0000000..8d16974 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWanderAvoidWater.java @@ -0,0 +1,35 @@ +package net.minecraft.entity.ai; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.util.math.Vec3d; + +public class EntityAIWanderAvoidWater extends EntityAIWander +{ + protected final float probability; + + public EntityAIWanderAvoidWater(EntityCreature p_i47301_1_, double p_i47301_2_) + { + this(p_i47301_1_, p_i47301_2_, 0.001F); + } + + public EntityAIWanderAvoidWater(EntityCreature p_i47302_1_, double p_i47302_2_, float p_i47302_4_) + { + super(p_i47302_1_, p_i47302_2_); + this.probability = p_i47302_4_; + } + + @Nullable + protected Vec3d getPosition() + { + if (this.entity.isInWater()) + { + Vec3d vec3d = RandomPositionGenerator.getLandPos(this.entity, 15, 7); + return vec3d == null ? super.getPosition() : vec3d; + } + else + { + return this.entity.getRNG().nextFloat() >= this.probability ? RandomPositionGenerator.getLandPos(this.entity, 10, 7) : super.getPosition(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.java new file mode 100644 index 0000000..538032c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWanderAvoidWaterFlying.java @@ -0,0 +1,72 @@ +package net.minecraft.entity.ai; + +import java.util.Iterator; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLeaves; +import net.minecraft.entity.EntityCreature; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class EntityAIWanderAvoidWaterFlying extends EntityAIWanderAvoidWater +{ + public EntityAIWanderAvoidWaterFlying(EntityCreature p_i47413_1_, double p_i47413_2_) + { + super(p_i47413_1_, p_i47413_2_); + } + + @Nullable + protected Vec3d getPosition() + { + Vec3d vec3d = null; + + if (this.entity.isInWater() || this.entity.isOverWater()) + { + vec3d = RandomPositionGenerator.getLandPos(this.entity, 15, 15); + } + + if (this.entity.getRNG().nextFloat() >= this.probability) + { + vec3d = this.getTreePos(); + } + + return vec3d == null ? super.getPosition() : vec3d; + } + + @Nullable + private Vec3d getTreePos() + { + BlockPos blockpos = new BlockPos(this.entity); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + BlockPos.MutableBlockPos blockpos$mutableblockpos1 = new BlockPos.MutableBlockPos(); + Iterable iterable = BlockPos.MutableBlockPos.getAllInBoxMutable(MathHelper.floor(this.entity.posX - 3.0D), MathHelper.floor(this.entity.posY - 6.0D), MathHelper.floor(this.entity.posZ - 3.0D), MathHelper.floor(this.entity.posX + 3.0D), MathHelper.floor(this.entity.posY + 6.0D), MathHelper.floor(this.entity.posZ + 3.0D)); + Iterator iterator = iterable.iterator(); + BlockPos blockpos1; + + while (true) + { + if (!iterator.hasNext()) + { + return null; + } + + blockpos1 = (BlockPos)iterator.next(); + + if (!blockpos.equals(blockpos1)) + { + Block block = this.entity.world.getBlockState(blockpos$mutableblockpos1.setPos(blockpos1).move(EnumFacing.DOWN)).getBlock(); + boolean flag = block instanceof BlockLeaves || block == Blocks.LOG || block == Blocks.LOG2; + + if (flag && this.entity.world.isAirBlock(blockpos1) && this.entity.world.isAirBlock(blockpos$mutableblockpos.setPos(blockpos1).move(EnumFacing.UP))) + { + break; + } + } + } + + return new Vec3d((double)blockpos1.getX(), (double)blockpos1.getY(), (double)blockpos1.getZ()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWatchClosest.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWatchClosest.java new file mode 100644 index 0000000..d1d708e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWatchClosest.java @@ -0,0 +1,110 @@ +package net.minecraft.entity.ai; + +import com.google.common.base.Predicates; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EntitySelectors; + +public class EntityAIWatchClosest extends EntityAIBase +{ + protected EntityLiving entity; + /** The closest entity which is being watched by this one. */ + protected Entity closestEntity; + /** This is the Maximum distance that the AI will look for the Entity */ + protected float maxDistanceForPlayer; + private int lookTime; + private final float chance; + protected Class watchedClass; + + public EntityAIWatchClosest(EntityLiving entityIn, Class watchTargetClass, float maxDistance) + { + this.entity = entityIn; + this.watchedClass = watchTargetClass; + this.maxDistanceForPlayer = maxDistance; + this.chance = 0.02F; + this.setMutexBits(2); + } + + public EntityAIWatchClosest(EntityLiving entityIn, Class watchTargetClass, float maxDistance, float chanceIn) + { + this.entity = entityIn; + this.watchedClass = watchTargetClass; + this.maxDistanceForPlayer = maxDistance; + this.chance = chanceIn; + this.setMutexBits(2); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.entity.getRNG().nextFloat() >= this.chance) + { + return false; + } + else + { + if (this.entity.getAttackTarget() != null) + { + this.closestEntity = this.entity.getAttackTarget(); + } + + if (this.watchedClass == EntityPlayer.class) + { + this.closestEntity = this.entity.world.getClosestPlayer(this.entity.posX, this.entity.posY, this.entity.posZ, (double)this.maxDistanceForPlayer, Predicates.and(EntitySelectors.NOT_SPECTATING, EntitySelectors.notRiding(this.entity))); + } + else + { + this.closestEntity = this.entity.world.findNearestEntityWithinAABB(this.watchedClass, this.entity.getEntityBoundingBox().grow((double)this.maxDistanceForPlayer, 3.0D, (double)this.maxDistanceForPlayer), this.entity); + } + + return this.closestEntity != null; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (!this.closestEntity.isEntityAlive()) + { + return false; + } + else if (this.entity.getDistanceSq(this.closestEntity) > (double)(this.maxDistanceForPlayer * this.maxDistanceForPlayer)) + { + return false; + } + else + { + return this.lookTime > 0; + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.lookTime = 40 + this.entity.getRNG().nextInt(40); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.closestEntity = null; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.entity.getLookHelper().setLookPosition(this.closestEntity.posX, this.closestEntity.posY + (double)this.closestEntity.getEyeHeight(), this.closestEntity.posZ, (float)this.entity.getHorizontalFaceSpeed(), (float)this.entity.getVerticalFaceSpeed()); + --this.lookTime; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWatchClosest2.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWatchClosest2.java new file mode 100644 index 0000000..e67bbd7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIWatchClosest2.java @@ -0,0 +1,13 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; + +public class EntityAIWatchClosest2 extends EntityAIWatchClosest +{ + public EntityAIWatchClosest2(EntityLiving entitylivingIn, Class watchTargetClass, float maxDistance, float chanceIn) + { + super(entitylivingIn, watchTargetClass, maxDistance, chanceIn); + this.setMutexBits(3); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIZombieAttack.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIZombieAttack.java new file mode 100644 index 0000000..c0aabe1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityAIZombieAttack.java @@ -0,0 +1,51 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.monster.EntityZombie; + +public class EntityAIZombieAttack extends EntityAIAttackMelee +{ + private final EntityZombie zombie; + private int raiseArmTicks; + + public EntityAIZombieAttack(EntityZombie zombieIn, double speedIn, boolean longMemoryIn) + { + super(zombieIn, speedIn, longMemoryIn); + this.zombie = zombieIn; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + this.raiseArmTicks = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + this.zombie.setArmsRaised(false); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + ++this.raiseArmTicks; + + if (this.raiseArmTicks >= 5 && this.attackTick < 10) + { + this.zombie.setArmsRaised(true); + } + else + { + this.zombie.setArmsRaised(false); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityFlyHelper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityFlyHelper.java new file mode 100644 index 0000000..159f829 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityFlyHelper.java @@ -0,0 +1,58 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.util.math.MathHelper; + +public class EntityFlyHelper extends EntityMoveHelper +{ + public EntityFlyHelper(EntityLiving p_i47418_1_) + { + super(p_i47418_1_); + } + + public void onUpdateMoveHelper() + { + if (this.action == EntityMoveHelper.Action.MOVE_TO) + { + this.action = EntityMoveHelper.Action.WAIT; + this.entity.setNoGravity(true); + double d0 = this.posX - this.entity.posX; + double d1 = this.posY - this.entity.posY; + double d2 = this.posZ - this.entity.posZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + if (d3 < 2.500000277905201E-7D) + { + this.entity.setMoveVertical(0.0F); + this.entity.setMoveForward(0.0F); + return; + } + + float f = (float)(MathHelper.atan2(d2, d0) * (180D / Math.PI)) - 90.0F; + this.entity.rotationYaw = this.limitAngle(this.entity.rotationYaw, f, 10.0F); + float f1; + + if (this.entity.onGround) + { + f1 = (float)(this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue()); + } + else + { + f1 = (float)(this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.FLYING_SPEED).getAttributeValue()); + } + + this.entity.setAIMoveSpeed(f1); + double d4 = (double)MathHelper.sqrt(d0 * d0 + d2 * d2); + float f2 = (float)(-(MathHelper.atan2(d1, d4) * (180D / Math.PI))); + this.entity.rotationPitch = this.limitAngle(this.entity.rotationPitch, f2, 10.0F); + this.entity.setMoveVertical(d1 > 0.0D ? f1 : -f1); + } + else + { + this.entity.setNoGravity(false); + this.entity.setMoveVertical(0.0F); + this.entity.setMoveForward(0.0F); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityJumpHelper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityJumpHelper.java new file mode 100644 index 0000000..09739e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityJumpHelper.java @@ -0,0 +1,28 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; + +public class EntityJumpHelper +{ + private final EntityLiving entity; + protected boolean isJumping; + + public EntityJumpHelper(EntityLiving entityIn) + { + this.entity = entityIn; + } + + public void setJumping() + { + this.isJumping = true; + } + + /** + * Called to actually make the entity jump if isJumping is true. + */ + public void doJump() + { + this.entity.setJumping(this.isJumping); + this.isJumping = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityLookHelper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityLookHelper.java new file mode 100644 index 0000000..189f080 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityLookHelper.java @@ -0,0 +1,137 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.MathHelper; + +public class EntityLookHelper +{ + private final EntityLiving entity; + /** The amount of change that is made each update for an entity facing a direction. */ + private float deltaLookYaw; + /** The amount of change that is made each update for an entity facing a direction. */ + private float deltaLookPitch; + /** Whether or not the entity is trying to look at something. */ + private boolean isLooking; + private double posX; + private double posY; + private double posZ; + + public EntityLookHelper(EntityLiving entitylivingIn) + { + this.entity = entitylivingIn; + } + + /** + * Sets position to look at using entity + */ + public void setLookPositionWithEntity(Entity entityIn, float deltaYaw, float deltaPitch) + { + this.posX = entityIn.posX; + + if (entityIn instanceof EntityLivingBase) + { + this.posY = entityIn.posY + (double)entityIn.getEyeHeight(); + } + else + { + this.posY = (entityIn.getEntityBoundingBox().minY + entityIn.getEntityBoundingBox().maxY) / 2.0D; + } + + this.posZ = entityIn.posZ; + this.deltaLookYaw = deltaYaw; + this.deltaLookPitch = deltaPitch; + this.isLooking = true; + } + + /** + * Sets position to look at + */ + public void setLookPosition(double x, double y, double z, float deltaYaw, float deltaPitch) + { + this.posX = x; + this.posY = y; + this.posZ = z; + this.deltaLookYaw = deltaYaw; + this.deltaLookPitch = deltaPitch; + this.isLooking = true; + } + + /** + * Updates look + */ + public void onUpdateLook() + { + this.entity.rotationPitch = 0.0F; + + if (this.isLooking) + { + this.isLooking = false; + double d0 = this.posX - this.entity.posX; + double d1 = this.posY - (this.entity.posY + (double)this.entity.getEyeHeight()); + double d2 = this.posZ - this.entity.posZ; + double d3 = (double)MathHelper.sqrt(d0 * d0 + d2 * d2); + float f = (float)(MathHelper.atan2(d2, d0) * (180D / Math.PI)) - 90.0F; + float f1 = (float)(-(MathHelper.atan2(d1, d3) * (180D / Math.PI))); + this.entity.rotationPitch = this.updateRotation(this.entity.rotationPitch, f1, this.deltaLookPitch); + this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, f, this.deltaLookYaw); + } + else + { + this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, this.entity.renderYawOffset, 10.0F); + } + + float f2 = MathHelper.wrapDegrees(this.entity.rotationYawHead - this.entity.renderYawOffset); + + if (!this.entity.getNavigator().noPath()) + { + if (f2 < -75.0F) + { + this.entity.rotationYawHead = this.entity.renderYawOffset - 75.0F; + } + + if (f2 > 75.0F) + { + this.entity.rotationYawHead = this.entity.renderYawOffset + 75.0F; + } + } + } + + private float updateRotation(float p_75652_1_, float p_75652_2_, float p_75652_3_) + { + float f = MathHelper.wrapDegrees(p_75652_2_ - p_75652_1_); + + if (f > p_75652_3_) + { + f = p_75652_3_; + } + + if (f < -p_75652_3_) + { + f = -p_75652_3_; + } + + return p_75652_1_ + f; + } + + public boolean getIsLooking() + { + return this.isLooking; + } + + public double getLookPosX() + { + return this.posX; + } + + public double getLookPosY() + { + return this.posY; + } + + public double getLookPosZ() + { + return this.posZ; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityMoveHelper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityMoveHelper.java new file mode 100644 index 0000000..3450ebd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntityMoveHelper.java @@ -0,0 +1,203 @@ +package net.minecraft.entity.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.pathfinding.NodeProcessor; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.math.MathHelper; + +public class EntityMoveHelper +{ + /** The EntityLiving that is being moved */ + protected final EntityLiving entity; + protected double posX; + protected double posY; + protected double posZ; + /** Multiplier for the entity's speed attribute value */ + protected double speed; + protected float moveForward; + protected float moveStrafe; + public EntityMoveHelper.Action action = EntityMoveHelper.Action.WAIT; + + public EntityMoveHelper(EntityLiving entitylivingIn) + { + this.entity = entitylivingIn; + } + + public boolean isUpdating() + { + return this.action == EntityMoveHelper.Action.MOVE_TO; + } + + public double getSpeed() + { + return this.speed; + } + + /** + * Sets the speed and location to move to + */ + public void setMoveTo(double x, double y, double z, double speedIn) + { + this.posX = x; + this.posY = y; + this.posZ = z; + this.speed = speedIn; + this.action = EntityMoveHelper.Action.MOVE_TO; + } + + public void strafe(float forward, float strafe) + { + this.action = EntityMoveHelper.Action.STRAFE; + this.moveForward = forward; + this.moveStrafe = strafe; + this.speed = 0.25D; + } + + public void read(EntityMoveHelper that) + { + this.action = that.action; + this.posX = that.posX; + this.posY = that.posY; + this.posZ = that.posZ; + this.speed = Math.max(that.speed, 1.0D); + this.moveForward = that.moveForward; + this.moveStrafe = that.moveStrafe; + } + + public void onUpdateMoveHelper() + { + if (this.action == EntityMoveHelper.Action.STRAFE) + { + float f = (float)this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue(); + float f1 = (float)this.speed * f; + float f2 = this.moveForward; + float f3 = this.moveStrafe; + float f4 = MathHelper.sqrt(f2 * f2 + f3 * f3); + + if (f4 < 1.0F) + { + f4 = 1.0F; + } + + f4 = f1 / f4; + f2 = f2 * f4; + f3 = f3 * f4; + float f5 = MathHelper.sin(this.entity.rotationYaw * 0.017453292F); + float f6 = MathHelper.cos(this.entity.rotationYaw * 0.017453292F); + float f7 = f2 * f6 - f3 * f5; + float f8 = f3 * f6 + f2 * f5; + PathNavigate pathnavigate = this.entity.getNavigator(); + + if (pathnavigate != null) + { + NodeProcessor nodeprocessor = pathnavigate.getNodeProcessor(); + + if (nodeprocessor != null && nodeprocessor.getPathNodeType(this.entity.world, MathHelper.floor(this.entity.posX + (double)f7), MathHelper.floor(this.entity.posY), MathHelper.floor(this.entity.posZ + (double)f8)) != PathNodeType.WALKABLE) + { + this.moveForward = 1.0F; + this.moveStrafe = 0.0F; + f1 = f; + } + } + + this.entity.setAIMoveSpeed(f1); + this.entity.setMoveForward(this.moveForward); + this.entity.setMoveStrafing(this.moveStrafe); + this.action = EntityMoveHelper.Action.WAIT; + } + else if (this.action == EntityMoveHelper.Action.MOVE_TO) + { + this.action = EntityMoveHelper.Action.WAIT; + double d0 = this.posX - this.entity.posX; + double d1 = this.posZ - this.entity.posZ; + double d2 = this.posY - this.entity.posY; + double d3 = d0 * d0 + d2 * d2 + d1 * d1; + + if (d3 < 2.500000277905201E-7D) + { + this.entity.setMoveForward(0.0F); + return; + } + + float f9 = (float)(MathHelper.atan2(d1, d0) * (180D / Math.PI)) - 90.0F; + this.entity.rotationYaw = this.limitAngle(this.entity.rotationYaw, f9, 90.0F); + this.entity.setAIMoveSpeed((float)(this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue())); + + if (d2 > (double)this.entity.stepHeight && d0 * d0 + d1 * d1 < (double)Math.max(1.0F, this.entity.width)) + { + this.entity.getJumpHelper().setJumping(); + this.action = EntityMoveHelper.Action.JUMPING; + } + } + else if (this.action == EntityMoveHelper.Action.JUMPING) + { + this.entity.setAIMoveSpeed((float)(this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue())); + + if (this.entity.onGround) + { + this.action = EntityMoveHelper.Action.WAIT; + } + } + else + { + this.entity.setMoveForward(0.0F); + } + } + + /** + * Attempt to rotate the first angle to become the second angle, but only allow overall direction change to at max + * be third parameter + */ + protected float limitAngle(float sourceAngle, float targetAngle, float maximumChange) + { + float f = MathHelper.wrapDegrees(targetAngle - sourceAngle); + + if (f > maximumChange) + { + f = maximumChange; + } + + if (f < -maximumChange) + { + f = -maximumChange; + } + + float f1 = sourceAngle + f; + + if (f1 < 0.0F) + { + f1 += 360.0F; + } + else if (f1 > 360.0F) + { + f1 -= 360.0F; + } + + return f1; + } + + public double getX() + { + return this.posX; + } + + public double getY() + { + return this.posY; + } + + public double getZ() + { + return this.posZ; + } + + public static enum Action + { + WAIT, + MOVE_TO, + STRAFE, + JUMPING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntitySenses.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntitySenses.java new file mode 100644 index 0000000..9b1ce6f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/EntitySenses.java @@ -0,0 +1,61 @@ +package net.minecraft.entity.ai; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; + +public class EntitySenses +{ + EntityLiving entity; + /** Cache of entities which we can see */ + List seenEntities = Lists.newArrayList(); + /** Cache of entities which we cannot see */ + List unseenEntities = Lists.newArrayList(); + + public EntitySenses(EntityLiving entityIn) + { + this.entity = entityIn; + } + + /** + * Clears canSeeCachePositive and canSeeCacheNegative. + */ + public void clearSensingCache() + { + this.seenEntities.clear(); + this.unseenEntities.clear(); + } + + /** + * Checks, whether 'our' entity can see the entity given as argument (true) or not (false), caching the result. + */ + public boolean canSee(Entity entityIn) + { + if (this.seenEntities.contains(entityIn)) + { + return true; + } + else if (this.unseenEntities.contains(entityIn)) + { + return false; + } + else + { + this.entity.world.profiler.startSection("canSee"); + boolean flag = this.entity.canEntityBeSeen(entityIn); + this.entity.world.profiler.endSection(); + + if (flag) + { + this.seenEntities.add(entityIn); + } + else + { + this.unseenEntities.add(entityIn); + } + + return flag; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/RandomPositionGenerator.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/RandomPositionGenerator.java new file mode 100644 index 0000000..41696eb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/RandomPositionGenerator.java @@ -0,0 +1,181 @@ +package net.minecraft.entity.ai; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityCreature; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class RandomPositionGenerator +{ + /** + * used to store a driection when the user passes a point to move towards or away from. WARNING: NEVER THREAD SAFE. + * MULTIPLE findTowards and findAway calls, will share this var + */ + private static Vec3d staticVector = Vec3d.ZERO; + + /** + * finds a random target within par1(x,z) and par2 (y) blocks + */ + @Nullable + public static Vec3d findRandomTarget(EntityCreature entitycreatureIn, int xz, int y) + { + return findRandomTargetBlock(entitycreatureIn, xz, y, (Vec3d)null); + } + + @Nullable + public static Vec3d getLandPos(EntityCreature p_191377_0_, int p_191377_1_, int p_191377_2_) + { + return generateRandomPos(p_191377_0_, p_191377_1_, p_191377_2_, (Vec3d)null, false); + } + + /** + * finds a random target within par1(x,z) and par2 (y) blocks in the direction of the point par3 + */ + @Nullable + public static Vec3d findRandomTargetBlockTowards(EntityCreature entitycreatureIn, int xz, int y, Vec3d targetVec3) + { + staticVector = targetVec3.subtract(entitycreatureIn.posX, entitycreatureIn.posY, entitycreatureIn.posZ); + return findRandomTargetBlock(entitycreatureIn, xz, y, staticVector); + } + + /** + * finds a random target within par1(x,z) and par2 (y) blocks in the reverse direction of the point par3 + */ + @Nullable + public static Vec3d findRandomTargetBlockAwayFrom(EntityCreature entitycreatureIn, int xz, int y, Vec3d targetVec3) + { + staticVector = (new Vec3d(entitycreatureIn.posX, entitycreatureIn.posY, entitycreatureIn.posZ)).subtract(targetVec3); + return findRandomTargetBlock(entitycreatureIn, xz, y, staticVector); + } + + /** + * searches 10 blocks at random in a within par1(x,z) and par2 (y) distance, ignores those not in the direction of + * par3Vec3, then points to the tile for which creature.getBlockPathWeight returns the highest number + */ + @Nullable + private static Vec3d findRandomTargetBlock(EntityCreature entitycreatureIn, int xz, int y, @Nullable Vec3d targetVec3) + { + return generateRandomPos(entitycreatureIn, xz, y, targetVec3, true); + } + + @Nullable + private static Vec3d generateRandomPos(EntityCreature p_191379_0_, int p_191379_1_, int p_191379_2_, @Nullable Vec3d p_191379_3_, boolean p_191379_4_) + { + PathNavigate pathnavigate = p_191379_0_.getNavigator(); + Random random = p_191379_0_.getRNG(); + boolean flag; + + if (p_191379_0_.hasHome()) + { + double d0 = p_191379_0_.getHomePosition().distanceSq((double)MathHelper.floor(p_191379_0_.posX), (double)MathHelper.floor(p_191379_0_.posY), (double)MathHelper.floor(p_191379_0_.posZ)) + 4.0D; + double d1 = (double)(p_191379_0_.getMaximumHomeDistance() + (float)p_191379_1_); + flag = d0 < d1 * d1; + } + else + { + flag = false; + } + + boolean flag1 = false; + float f = -99999.0F; + int k1 = 0; + int i = 0; + int j = 0; + + for (int k = 0; k < 10; ++k) + { + int l = random.nextInt(2 * p_191379_1_ + 1) - p_191379_1_; + int i1 = random.nextInt(2 * p_191379_2_ + 1) - p_191379_2_; + int j1 = random.nextInt(2 * p_191379_1_ + 1) - p_191379_1_; + + if (p_191379_3_ == null || (double)l * p_191379_3_.x + (double)j1 * p_191379_3_.z >= 0.0D) + { + if (p_191379_0_.hasHome() && p_191379_1_ > 1) + { + BlockPos blockpos = p_191379_0_.getHomePosition(); + + if (p_191379_0_.posX > (double)blockpos.getX()) + { + l -= random.nextInt(p_191379_1_ / 2); + } + else + { + l += random.nextInt(p_191379_1_ / 2); + } + + if (p_191379_0_.posZ > (double)blockpos.getZ()) + { + j1 -= random.nextInt(p_191379_1_ / 2); + } + else + { + j1 += random.nextInt(p_191379_1_ / 2); + } + } + + BlockPos blockpos1 = new BlockPos((double)l + p_191379_0_.posX, (double)i1 + p_191379_0_.posY, (double)j1 + p_191379_0_.posZ); + + if ((!flag || p_191379_0_.isWithinHomeDistanceFromPosition(blockpos1)) && pathnavigate.canEntityStandOnPos(blockpos1)) + { + if (!p_191379_4_) + { + blockpos1 = moveAboveSolid(blockpos1, p_191379_0_); + + if (isWaterDestination(blockpos1, p_191379_0_)) + { + continue; + } + } + + float f1 = p_191379_0_.getBlockPathWeight(blockpos1); + + if (f1 > f) + { + f = f1; + k1 = l; + i = i1; + j = j1; + flag1 = true; + } + } + } + } + + if (flag1) + { + return new Vec3d((double)k1 + p_191379_0_.posX, (double)i + p_191379_0_.posY, (double)j + p_191379_0_.posZ); + } + else + { + return null; + } + } + + private static BlockPos moveAboveSolid(BlockPos p_191378_0_, EntityCreature p_191378_1_) + { + if (!p_191378_1_.world.getBlockState(p_191378_0_).getMaterial().isSolid()) + { + return p_191378_0_; + } + else + { + BlockPos blockpos; + + for (blockpos = p_191378_0_.up(); blockpos.getY() < p_191378_1_.world.getHeight() && p_191378_1_.world.getBlockState(blockpos).getMaterial().isSolid(); blockpos = blockpos.up()) + { + ; + } + + return blockpos; + } + } + + private static boolean isWaterDestination(BlockPos p_191380_0_, EntityCreature p_191380_1_) + { + return p_191380_1_.world.getBlockState(p_191380_0_).getMaterial() == Material.WATER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AbstractAttributeMap.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AbstractAttributeMap.java new file mode 100644 index 0000000..177cca3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AbstractAttributeMap.java @@ -0,0 +1,90 @@ +package net.minecraft.entity.ai.attributes; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.util.LowerStringMap; + +public abstract class AbstractAttributeMap +{ + protected final Map attributes = Maps.newHashMap(); + protected final Map attributesByName = new LowerStringMap(); + protected final Multimap descendantsByParent = HashMultimap.create(); + + public IAttributeInstance getAttributeInstance(IAttribute attribute) + { + return this.attributes.get(attribute); + } + + @Nullable + public IAttributeInstance getAttributeInstanceByName(String attributeName) + { + return this.attributesByName.get(attributeName); + } + + /** + * Registers an attribute with this AttributeMap, returns a modifiable AttributeInstance associated with this map + */ + public IAttributeInstance registerAttribute(IAttribute attribute) + { + if (this.attributesByName.containsKey(attribute.getName())) + { + throw new IllegalArgumentException("Attribute is already registered!"); + } + else + { + IAttributeInstance iattributeinstance = this.createInstance(attribute); + this.attributesByName.put(attribute.getName(), iattributeinstance); + this.attributes.put(attribute, iattributeinstance); + + for (IAttribute iattribute = attribute.getParent(); iattribute != null; iattribute = iattribute.getParent()) + { + this.descendantsByParent.put(iattribute, attribute); + } + + return iattributeinstance; + } + } + + protected abstract IAttributeInstance createInstance(IAttribute attribute); + + public Collection getAllAttributes() + { + return this.attributesByName.values(); + } + + public void onAttributeModified(IAttributeInstance instance) + { + } + + public void removeAttributeModifiers(Multimap modifiers) + { + for (Entry entry : modifiers.entries()) + { + IAttributeInstance iattributeinstance = this.getAttributeInstanceByName(entry.getKey()); + + if (iattributeinstance != null) + { + iattributeinstance.removeModifier(entry.getValue()); + } + } + } + + public void applyAttributeModifiers(Multimap modifiers) + { + for (Entry entry : modifiers.entries()) + { + IAttributeInstance iattributeinstance = this.getAttributeInstanceByName(entry.getKey()); + + if (iattributeinstance != null) + { + iattributeinstance.removeModifier(entry.getValue()); + iattributeinstance.applyModifier(entry.getValue()); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AttributeMap.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AttributeMap.java new file mode 100644 index 0000000..d28f2a2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AttributeMap.java @@ -0,0 +1,88 @@ +package net.minecraft.entity.ai.attributes; + +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import net.minecraft.util.LowerStringMap; + +public class AttributeMap extends AbstractAttributeMap +{ + private final Set dirtyInstances = Sets.newHashSet(); + protected final Map instancesByName = new LowerStringMap(); + + public ModifiableAttributeInstance getAttributeInstance(IAttribute attribute) + { + return (ModifiableAttributeInstance)super.getAttributeInstance(attribute); + } + + public ModifiableAttributeInstance getAttributeInstanceByName(String attributeName) + { + IAttributeInstance iattributeinstance = super.getAttributeInstanceByName(attributeName); + + if (iattributeinstance == null) + { + iattributeinstance = this.instancesByName.get(attributeName); + } + + return (ModifiableAttributeInstance)iattributeinstance; + } + + /** + * Registers an attribute with this AttributeMap, returns a modifiable AttributeInstance associated with this map + */ + public IAttributeInstance registerAttribute(IAttribute attribute) + { + IAttributeInstance iattributeinstance = super.registerAttribute(attribute); + + if (attribute instanceof RangedAttribute && ((RangedAttribute)attribute).getDescription() != null) + { + this.instancesByName.put(((RangedAttribute)attribute).getDescription(), iattributeinstance); + } + + return iattributeinstance; + } + + protected IAttributeInstance createInstance(IAttribute attribute) + { + return new ModifiableAttributeInstance(this, attribute); + } + + public void onAttributeModified(IAttributeInstance instance) + { + if (instance.getAttribute().getShouldWatch()) + { + this.dirtyInstances.add(instance); + } + + for (IAttribute iattribute : this.descendantsByParent.get(instance.getAttribute())) + { + ModifiableAttributeInstance modifiableattributeinstance = this.getAttributeInstance(iattribute); + + if (modifiableattributeinstance != null) + { + modifiableattributeinstance.flagForUpdate(); + } + } + } + + public Set getDirtyInstances() + { + return this.dirtyInstances; + } + + public Collection getWatchedAttributes() + { + Set set = Sets.newHashSet(); + + for (IAttributeInstance iattributeinstance : this.getAllAttributes()) + { + if (iattributeinstance.getAttribute().getShouldWatch()) + { + set.add(iattributeinstance); + } + } + + return set; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AttributeModifier.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AttributeModifier.java new file mode 100644 index 0000000..6c495c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/AttributeModifier.java @@ -0,0 +1,109 @@ +package net.minecraft.entity.ai.attributes; + +import io.netty.util.internal.ThreadLocalRandom; +import java.util.UUID; +import net.minecraft.util.math.MathHelper; +import org.apache.commons.lang3.Validate; + +public class AttributeModifier +{ + private final double amount; + private final int operation; + private final String name; + private final UUID id; + /** If false, this modifier is not saved in NBT. Used for "natural" modifiers like speed boost from sprinting */ + private boolean isSaved; + + public AttributeModifier(String nameIn, double amountIn, int operationIn) + { + this(MathHelper.getRandomUUID(ThreadLocalRandom.current()), nameIn, amountIn, operationIn); + } + + public AttributeModifier(UUID idIn, String nameIn, double amountIn, int operationIn) + { + this.isSaved = true; + this.id = idIn; + this.name = nameIn; + this.amount = amountIn; + this.operation = operationIn; + Validate.notEmpty(nameIn, "Modifier name cannot be empty"); + Validate.inclusiveBetween(0L, 2L, (long)operationIn, "Invalid operation"); + } + + public UUID getID() + { + return this.id; + } + + public String getName() + { + return this.name; + } + + public int getOperation() + { + return this.operation; + } + + public double getAmount() + { + return this.amount; + } + + /** + * @see #isSaved + */ + public boolean isSaved() + { + return this.isSaved; + } + + /** + * @see #isSaved + */ + public AttributeModifier setSaved(boolean saved) + { + this.isSaved = saved; + return this; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + AttributeModifier attributemodifier = (AttributeModifier)p_equals_1_; + + if (this.id != null) + { + if (!this.id.equals(attributemodifier.id)) + { + return false; + } + } + else if (attributemodifier.id != null) + { + return false; + } + + return true; + } + else + { + return false; + } + } + + public int hashCode() + { + return this.id != null ? this.id.hashCode() : 0; + } + + public String toString() + { + return "AttributeModifier{amount=" + this.amount + ", operation=" + this.operation + ", name='" + this.name + '\'' + ", id=" + this.id + ", serialize=" + this.isSaved + '}'; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/BaseAttribute.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/BaseAttribute.java new file mode 100644 index 0000000..1155b61 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/BaseAttribute.java @@ -0,0 +1,60 @@ +package net.minecraft.entity.ai.attributes; + +import javax.annotation.Nullable; + +public abstract class BaseAttribute implements IAttribute +{ + private final IAttribute parent; + private final String unlocalizedName; + private final double defaultValue; + private boolean shouldWatch; + + protected BaseAttribute(@Nullable IAttribute parentIn, String unlocalizedNameIn, double defaultValueIn) + { + this.parent = parentIn; + this.unlocalizedName = unlocalizedNameIn; + this.defaultValue = defaultValueIn; + + if (unlocalizedNameIn == null) + { + throw new IllegalArgumentException("Name cannot be null!"); + } + } + + public String getName() + { + return this.unlocalizedName; + } + + public double getDefaultValue() + { + return this.defaultValue; + } + + public boolean getShouldWatch() + { + return this.shouldWatch; + } + + public BaseAttribute setShouldWatch(boolean shouldWatchIn) + { + this.shouldWatch = shouldWatchIn; + return this; + } + + @Nullable + public IAttribute getParent() + { + return this.parent; + } + + public int hashCode() + { + return this.unlocalizedName.hashCode(); + } + + public boolean equals(Object p_equals_1_) + { + return p_equals_1_ instanceof IAttribute && this.unlocalizedName.equals(((IAttribute)p_equals_1_).getName()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/IAttribute.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/IAttribute.java new file mode 100644 index 0000000..2693b63 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/IAttribute.java @@ -0,0 +1,17 @@ +package net.minecraft.entity.ai.attributes; + +import javax.annotation.Nullable; + +public interface IAttribute +{ + String getName(); + + double clampValue(double value); + + double getDefaultValue(); + + boolean getShouldWatch(); + + @Nullable + IAttribute getParent(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/IAttributeInstance.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/IAttributeInstance.java new file mode 100644 index 0000000..a90b43f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/IAttributeInstance.java @@ -0,0 +1,42 @@ +package net.minecraft.entity.ai.attributes; + +import java.util.Collection; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IAttributeInstance +{ + /** + * Get the Attribute this is an instance of + */ + IAttribute getAttribute(); + + double getBaseValue(); + + void setBaseValue(double baseValue); + + Collection getModifiersByOperation(int operation); + + Collection getModifiers(); + + boolean hasModifier(AttributeModifier modifier); + + /** + * Returns attribute modifier, if any, by the given UUID + */ + @Nullable + AttributeModifier getModifier(UUID uuid); + + void applyModifier(AttributeModifier modifier); + + void removeModifier(AttributeModifier modifier); + + void removeModifier(UUID p_188479_1_); + + @SideOnly(Side.CLIENT) + void removeAllModifiers(); + + double getAttributeValue(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java new file mode 100644 index 0000000..ecdf0b2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/ModifiableAttributeInstance.java @@ -0,0 +1,220 @@ +package net.minecraft.entity.ai.attributes; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ModifiableAttributeInstance implements IAttributeInstance +{ + /** The BaseAttributeMap this attributeInstance can be found in */ + private final AbstractAttributeMap attributeMap; + /** The Attribute this is an instance of */ + private final IAttribute genericAttribute; + private final Map> mapByOperation = Maps.>newHashMap(); + private final Map> mapByName = Maps.>newHashMap(); + private final Map mapByUUID = Maps.newHashMap(); + private double baseValue; + private boolean needsUpdate = true; + private double cachedValue; + + public ModifiableAttributeInstance(AbstractAttributeMap attributeMapIn, IAttribute genericAttributeIn) + { + this.attributeMap = attributeMapIn; + this.genericAttribute = genericAttributeIn; + this.baseValue = genericAttributeIn.getDefaultValue(); + + for (int i = 0; i < 3; ++i) + { + this.mapByOperation.put(Integer.valueOf(i), Sets.newHashSet()); + } + } + + /** + * Get the Attribute this is an instance of + */ + public IAttribute getAttribute() + { + return this.genericAttribute; + } + + public double getBaseValue() + { + return this.baseValue; + } + + public void setBaseValue(double baseValue) + { + if (baseValue != this.getBaseValue()) + { + this.baseValue = baseValue; + this.flagForUpdate(); + } + } + + public Collection getModifiersByOperation(int operation) + { + return (Collection)this.mapByOperation.get(Integer.valueOf(operation)); + } + + public Collection getModifiers() + { + Set set = Sets.newHashSet(); + + for (int i = 0; i < 3; ++i) + { + set.addAll(this.getModifiersByOperation(i)); + } + + return set; + } + + /** + * Returns attribute modifier, if any, by the given UUID + */ + @Nullable + public AttributeModifier getModifier(UUID uuid) + { + return this.mapByUUID.get(uuid); + } + + public boolean hasModifier(AttributeModifier modifier) + { + return this.mapByUUID.get(modifier.getID()) != null; + } + + public void applyModifier(AttributeModifier modifier) + { + if (this.getModifier(modifier.getID()) != null) + { + throw new IllegalArgumentException("Modifier is already applied on this attribute!"); + } + else + { + Set set = (Set)this.mapByName.get(modifier.getName()); + + if (set == null) + { + set = Sets.newHashSet(); + this.mapByName.put(modifier.getName(), set); + } + + (this.mapByOperation.get(Integer.valueOf(modifier.getOperation()))).add(modifier); + set.add(modifier); + this.mapByUUID.put(modifier.getID(), modifier); + this.flagForUpdate(); + } + } + + protected void flagForUpdate() + { + this.needsUpdate = true; + this.attributeMap.onAttributeModified(this); + } + + public void removeModifier(AttributeModifier modifier) + { + for (int i = 0; i < 3; ++i) + { + Set set = (Set)this.mapByOperation.get(Integer.valueOf(i)); + set.remove(modifier); + } + + Set set1 = (Set)this.mapByName.get(modifier.getName()); + + if (set1 != null) + { + set1.remove(modifier); + + if (set1.isEmpty()) + { + this.mapByName.remove(modifier.getName()); + } + } + + this.mapByUUID.remove(modifier.getID()); + this.flagForUpdate(); + } + + public void removeModifier(UUID p_188479_1_) + { + AttributeModifier attributemodifier = this.getModifier(p_188479_1_); + + if (attributemodifier != null) + { + this.removeModifier(attributemodifier); + } + } + + @SideOnly(Side.CLIENT) + public void removeAllModifiers() + { + Collection collection = this.getModifiers(); + + if (collection != null) + { + for (AttributeModifier attributemodifier : Lists.newArrayList(collection)) + { + this.removeModifier(attributemodifier); + } + } + } + + public double getAttributeValue() + { + if (this.needsUpdate) + { + this.cachedValue = this.computeValue(); + this.needsUpdate = false; + } + + return this.cachedValue; + } + + private double computeValue() + { + double d0 = this.getBaseValue(); + + for (AttributeModifier attributemodifier : this.getAppliedModifiers(0)) + { + d0 += attributemodifier.getAmount(); + } + + double d1 = d0; + + for (AttributeModifier attributemodifier1 : this.getAppliedModifiers(1)) + { + d1 += d0 * attributemodifier1.getAmount(); + } + + for (AttributeModifier attributemodifier2 : this.getAppliedModifiers(2)) + { + d1 *= 1.0D + attributemodifier2.getAmount(); + } + + return this.genericAttribute.clampValue(d1); + } + + private Collection getAppliedModifiers(int operation) + { + Set set = Sets.newHashSet(this.getModifiersByOperation(operation)); + + for (IAttribute iattribute = this.genericAttribute.getParent(); iattribute != null; iattribute = iattribute.getParent()) + { + IAttributeInstance iattributeinstance = this.attributeMap.getAttributeInstance(iattribute); + + if (iattributeinstance != null) + { + set.addAll(iattributeinstance.getModifiersByOperation(operation)); + } + } + + return set; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/RangedAttribute.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/RangedAttribute.java new file mode 100644 index 0000000..0daf964 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/RangedAttribute.java @@ -0,0 +1,48 @@ +package net.minecraft.entity.ai.attributes; + +import javax.annotation.Nullable; +import net.minecraft.util.math.MathHelper; + +public class RangedAttribute extends BaseAttribute +{ + private final double minimumValue; + private final double maximumValue; + private String description; + + public RangedAttribute(@Nullable IAttribute parentIn, String unlocalizedNameIn, double defaultValue, double minimumValueIn, double maximumValueIn) + { + super(parentIn, unlocalizedNameIn, defaultValue); + this.minimumValue = minimumValueIn; + this.maximumValue = maximumValueIn; + + if (minimumValueIn > maximumValueIn) + { + throw new IllegalArgumentException("Minimum value cannot be bigger than maximum value!"); + } + else if (defaultValue < minimumValueIn) + { + throw new IllegalArgumentException("Default value cannot be lower than minimum value!"); + } + else if (defaultValue > maximumValueIn) + { + throw new IllegalArgumentException("Default value cannot be bigger than maximum value!"); + } + } + + public RangedAttribute setDescription(String descriptionIn) + { + this.description = descriptionIn; + return this; + } + + public String getDescription() + { + return this.description; + } + + public double clampValue(double value) + { + value = MathHelper.clamp(value, this.minimumValue, this.maximumValue); + return value; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/package-info.java new file mode 100644 index 0000000..4036cc0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/attributes/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.ai.attributes; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/ai/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/package-info.java new file mode 100644 index 0000000..2bfd599 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/ai/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.ai; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/EntityDragon.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/EntityDragon.java new file mode 100644 index 0000000..305e8a2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/EntityDragon.java @@ -0,0 +1,1185 @@ +package net.minecraft.entity.boss; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityMultiPart; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.MultiPartEntityPart; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.boss.dragon.phase.IPhase; +import net.minecraft.entity.boss.dragon.phase.PhaseList; +import net.minecraft.entity.boss.dragon.phase.PhaseManager; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathHeap; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.end.DragonFightManager; +import net.minecraft.world.gen.feature.WorldGenEndPodium; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityDragon extends EntityLiving implements IEntityMultiPart, IMob +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final DataParameter PHASE = EntityDataManager.createKey(EntityDragon.class, DataSerializers.VARINT); + /** Ring buffer array for the last 64 Y-positions and yaw rotations. Used to calculate offsets for the animations. */ + public double[][] ringBuffer = new double[64][3]; + /** Index into the ring buffer. Incremented once per tick and restarts at 0 once it reaches the end of the buffer. */ + public int ringBufferIndex = -1; + /** An array containing all body parts of this dragon */ + public MultiPartEntityPart[] dragonPartArray; + /** The head bounding box of a dragon */ + public MultiPartEntityPart dragonPartHead = new MultiPartEntityPart(this, "head", 6.0F, 6.0F); + public MultiPartEntityPart dragonPartNeck = new MultiPartEntityPart(this, "neck", 6.0F, 6.0F); + /** The body bounding box of a dragon */ + public MultiPartEntityPart dragonPartBody = new MultiPartEntityPart(this, "body", 8.0F, 8.0F); + public MultiPartEntityPart dragonPartTail1 = new MultiPartEntityPart(this, "tail", 4.0F, 4.0F); + public MultiPartEntityPart dragonPartTail2 = new MultiPartEntityPart(this, "tail", 4.0F, 4.0F); + public MultiPartEntityPart dragonPartTail3 = new MultiPartEntityPart(this, "tail", 4.0F, 4.0F); + public MultiPartEntityPart dragonPartWing1 = new MultiPartEntityPart(this, "wing", 4.0F, 4.0F); + public MultiPartEntityPart dragonPartWing2 = new MultiPartEntityPart(this, "wing", 4.0F, 4.0F); + /** Animation time at previous tick. */ + public float prevAnimTime; + /** Animation time, used to control the speed of the animation cycles (wings flapping, jaw opening, etc.) */ + public float animTime; + /** Activated if the dragon is flying though obsidian, white stone or bedrock. Slows movement and animation speed. */ + public boolean slowed; + public int deathTicks; + /** The current endercrystal that is healing this dragon */ + public EntityEnderCrystal healingEnderCrystal; + /** The dragon fight manager */ + private final DragonFightManager fightManager; + /** The dragon phase manager */ + private final PhaseManager phaseManager; + private int growlTime = 200; + private int sittingDamageReceived; + /** + * A series of points describing three circles. The first is low to the ground and described by the first 12 points; + * the next 8 points describe a spiral upwards to the next, tighter circle of just 4 points. Generated by + * initPathPoints. + */ + private final PathPoint[] pathPoints = new PathPoint[24]; + /** + * An array of bitmaps indicating, for each member of pathPoints, which other members should be considered + * "neighboring" for the purpose of path-finding. The set bits indicate the indexes into pathPoints that should be + * considered to be candidates for the next step in a path through the circles. Generated by initPathPoints. + */ + private final int[] neighbors = new int[24]; + private final PathHeap pathFindQueue = new PathHeap(); + + public EntityDragon(World worldIn) + { + super(worldIn); + this.dragonPartArray = new MultiPartEntityPart[] {this.dragonPartHead, this.dragonPartNeck, this.dragonPartBody, this.dragonPartTail1, this.dragonPartTail2, this.dragonPartTail3, this.dragonPartWing1, this.dragonPartWing2}; + this.setHealth(this.getMaxHealth()); + this.setSize(16.0F, 8.0F); + this.noClip = true; + this.isImmuneToFire = true; + this.growlTime = 100; + this.ignoreFrustumCheck = true; + + if (!worldIn.isRemote && worldIn.provider instanceof WorldProviderEnd) + { + this.fightManager = ((WorldProviderEnd)worldIn.provider).getDragonFightManager(); + } + else + { + this.fightManager = null; + } + + this.phaseManager = new PhaseManager(this); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(200.0D); + } + + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(PHASE, Integer.valueOf(PhaseList.HOVER.getId())); + } + + /** + * Returns a double[3] array with movement offsets, used to calculate trailing tail/neck positions. [0] = yaw + * offset, [1] = y offset, [2] = unused, always 0. Parameters: buffer index offset, partial ticks. + */ + public double[] getMovementOffsets(int p_70974_1_, float p_70974_2_) + { + if (this.getHealth() <= 0.0F) + { + p_70974_2_ = 0.0F; + } + + p_70974_2_ = 1.0F - p_70974_2_; + int i = this.ringBufferIndex - p_70974_1_ & 63; + int j = this.ringBufferIndex - p_70974_1_ - 1 & 63; + double[] adouble = new double[3]; + double d0 = this.ringBuffer[i][0]; + double d1 = MathHelper.wrapDegrees(this.ringBuffer[j][0] - d0); + adouble[0] = d0 + d1 * (double)p_70974_2_; + d0 = this.ringBuffer[i][1]; + d1 = this.ringBuffer[j][1] - d0; + adouble[1] = d0 + d1 * (double)p_70974_2_; + adouble[2] = this.ringBuffer[i][2] + (this.ringBuffer[j][2] - this.ringBuffer[i][2]) * (double)p_70974_2_; + return adouble; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.world.isRemote) + { + this.setHealth(this.getHealth()); + + if (!this.isSilent()) + { + float f = MathHelper.cos(this.animTime * ((float)Math.PI * 2F)); + float f1 = MathHelper.cos(this.prevAnimTime * ((float)Math.PI * 2F)); + + if (f1 <= -0.3F && f >= -0.3F) + { + this.world.playSound(this.posX, this.posY, this.posZ, SoundEvents.ENTITY_ENDERDRAGON_FLAP, this.getSoundCategory(), 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false); + } + + if (!this.phaseManager.getCurrentPhase().getIsStationary() && --this.growlTime < 0) + { + this.world.playSound(this.posX, this.posY, this.posZ, SoundEvents.ENTITY_ENDERDRAGON_GROWL, this.getSoundCategory(), 2.5F, 0.8F + this.rand.nextFloat() * 0.3F, false); + this.growlTime = 200 + this.rand.nextInt(200); + } + } + } + + this.prevAnimTime = this.animTime; + + if (this.getHealth() <= 0.0F) + { + float f12 = (this.rand.nextFloat() - 0.5F) * 8.0F; + float f13 = (this.rand.nextFloat() - 0.5F) * 4.0F; + float f15 = (this.rand.nextFloat() - 0.5F) * 8.0F; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX + (double)f12, this.posY + 2.0D + (double)f13, this.posZ + (double)f15, 0.0D, 0.0D, 0.0D); + } + else + { + this.updateDragonEnderCrystal(); + float f11 = 0.2F / (MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ) * 10.0F + 1.0F); + f11 = f11 * (float)Math.pow(2.0D, this.motionY); + + if (this.phaseManager.getCurrentPhase().getIsStationary()) + { + this.animTime += 0.1F; + } + else if (this.slowed) + { + this.animTime += f11 * 0.5F; + } + else + { + this.animTime += f11; + } + + this.rotationYaw = MathHelper.wrapDegrees(this.rotationYaw); + + if (this.isAIDisabled()) + { + this.animTime = 0.5F; + } + else + { + if (this.ringBufferIndex < 0) + { + for (int i = 0; i < this.ringBuffer.length; ++i) + { + this.ringBuffer[i][0] = (double)this.rotationYaw; + this.ringBuffer[i][1] = this.posY; + } + } + + if (++this.ringBufferIndex == this.ringBuffer.length) + { + this.ringBufferIndex = 0; + } + + this.ringBuffer[this.ringBufferIndex][0] = (double)this.rotationYaw; + this.ringBuffer[this.ringBufferIndex][1] = this.posY; + + if (this.world.isRemote) + { + if (this.newPosRotationIncrements > 0) + { + double d5 = this.posX + (this.interpTargetX - this.posX) / (double)this.newPosRotationIncrements; + double d0 = this.posY + (this.interpTargetY - this.posY) / (double)this.newPosRotationIncrements; + double d1 = this.posZ + (this.interpTargetZ - this.posZ) / (double)this.newPosRotationIncrements; + double d2 = MathHelper.wrapDegrees(this.interpTargetYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + d2 / (double)this.newPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.interpTargetPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements); + --this.newPosRotationIncrements; + this.setPosition(d5, d0, d1); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + + this.phaseManager.getCurrentPhase().doClientRenderEffects(); + } + else + { + IPhase iphase = this.phaseManager.getCurrentPhase(); + iphase.doLocalUpdate(); + + if (this.phaseManager.getCurrentPhase() != iphase) + { + iphase = this.phaseManager.getCurrentPhase(); + iphase.doLocalUpdate(); + } + + Vec3d vec3d = iphase.getTargetLocation(); + + if (vec3d != null) + { + double d6 = vec3d.x - this.posX; + double d7 = vec3d.y - this.posY; + double d8 = vec3d.z - this.posZ; + double d3 = d6 * d6 + d7 * d7 + d8 * d8; + float f5 = iphase.getMaxRiseOrFall(); + d7 = MathHelper.clamp(d7 / (double)MathHelper.sqrt(d6 * d6 + d8 * d8), (double)(-f5), (double)f5); + this.motionY += d7 * 0.10000000149011612D; + this.rotationYaw = MathHelper.wrapDegrees(this.rotationYaw); + double d4 = MathHelper.clamp(MathHelper.wrapDegrees(180.0D - MathHelper.atan2(d6, d8) * (180D / Math.PI) - (double)this.rotationYaw), -50.0D, 50.0D); + Vec3d vec3d1 = (new Vec3d(vec3d.x - this.posX, vec3d.y - this.posY, vec3d.z - this.posZ)).normalize(); + Vec3d vec3d2 = (new Vec3d((double)MathHelper.sin(this.rotationYaw * 0.017453292F), this.motionY, (double)(-MathHelper.cos(this.rotationYaw * 0.017453292F)))).normalize(); + float f7 = Math.max(((float)vec3d2.dotProduct(vec3d1) + 0.5F) / 1.5F, 0.0F); + this.randomYawVelocity *= 0.8F; + this.randomYawVelocity = (float)((double)this.randomYawVelocity + d4 * (double)iphase.getYawFactor()); + this.rotationYaw += this.randomYawVelocity * 0.1F; + float f8 = (float)(2.0D / (d3 + 1.0D)); + float f9 = 0.06F; + this.moveRelative(0.0F, 0.0F, -1.0F, 0.06F * (f7 * f8 + (1.0F - f8))); + + if (this.slowed) + { + this.move(MoverType.SELF, this.motionX * 0.800000011920929D, this.motionY * 0.800000011920929D, this.motionZ * 0.800000011920929D); + } + else + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + Vec3d vec3d3 = (new Vec3d(this.motionX, this.motionY, this.motionZ)).normalize(); + float f10 = ((float)vec3d3.dotProduct(vec3d2) + 1.0F) / 2.0F; + f10 = 0.8F + 0.15F * f10; + this.motionX *= (double)f10; + this.motionZ *= (double)f10; + this.motionY *= 0.9100000262260437D; + } + } + + this.renderYawOffset = this.rotationYaw; + this.dragonPartHead.width = 1.0F; + this.dragonPartHead.height = 1.0F; + this.dragonPartNeck.width = 3.0F; + this.dragonPartNeck.height = 3.0F; + this.dragonPartTail1.width = 2.0F; + this.dragonPartTail1.height = 2.0F; + this.dragonPartTail2.width = 2.0F; + this.dragonPartTail2.height = 2.0F; + this.dragonPartTail3.width = 2.0F; + this.dragonPartTail3.height = 2.0F; + this.dragonPartBody.height = 3.0F; + this.dragonPartBody.width = 5.0F; + this.dragonPartWing1.height = 2.0F; + this.dragonPartWing1.width = 4.0F; + this.dragonPartWing2.height = 3.0F; + this.dragonPartWing2.width = 4.0F; + Vec3d[] avec3d = new Vec3d[this.dragonPartArray.length]; + + for (int j = 0; j < this.dragonPartArray.length; ++j) + { + avec3d[j] = new Vec3d(this.dragonPartArray[j].posX, this.dragonPartArray[j].posY, this.dragonPartArray[j].posZ); + } + + float f14 = (float)(this.getMovementOffsets(5, 1.0F)[1] - this.getMovementOffsets(10, 1.0F)[1]) * 10.0F * 0.017453292F; + float f16 = MathHelper.cos(f14); + float f2 = MathHelper.sin(f14); + float f17 = this.rotationYaw * 0.017453292F; + float f3 = MathHelper.sin(f17); + float f18 = MathHelper.cos(f17); + this.dragonPartBody.onUpdate(); + this.dragonPartBody.setLocationAndAngles(this.posX + (double)(f3 * 0.5F), this.posY, this.posZ - (double)(f18 * 0.5F), 0.0F, 0.0F); + this.dragonPartWing1.onUpdate(); + this.dragonPartWing1.setLocationAndAngles(this.posX + (double)(f18 * 4.5F), this.posY + 2.0D, this.posZ + (double)(f3 * 4.5F), 0.0F, 0.0F); + this.dragonPartWing2.onUpdate(); + this.dragonPartWing2.setLocationAndAngles(this.posX - (double)(f18 * 4.5F), this.posY + 2.0D, this.posZ - (double)(f3 * 4.5F), 0.0F, 0.0F); + + if (!this.world.isRemote && this.hurtTime == 0) + { + this.collideWithEntities(this.world.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartWing1.getEntityBoundingBox().grow(4.0D, 2.0D, 4.0D).offset(0.0D, -2.0D, 0.0D))); + this.collideWithEntities(this.world.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartWing2.getEntityBoundingBox().grow(4.0D, 2.0D, 4.0D).offset(0.0D, -2.0D, 0.0D))); + this.attackEntitiesInList(this.world.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartHead.getEntityBoundingBox().grow(1.0D))); + this.attackEntitiesInList(this.world.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartNeck.getEntityBoundingBox().grow(1.0D))); + } + + double[] adouble = this.getMovementOffsets(5, 1.0F); + float f19 = MathHelper.sin(this.rotationYaw * 0.017453292F - this.randomYawVelocity * 0.01F); + float f4 = MathHelper.cos(this.rotationYaw * 0.017453292F - this.randomYawVelocity * 0.01F); + this.dragonPartHead.onUpdate(); + this.dragonPartNeck.onUpdate(); + float f20 = this.getHeadYOffset(1.0F); + this.dragonPartHead.setLocationAndAngles(this.posX + (double)(f19 * 6.5F * f16), this.posY + (double)f20 + (double)(f2 * 6.5F), this.posZ - (double)(f4 * 6.5F * f16), 0.0F, 0.0F); + this.dragonPartNeck.setLocationAndAngles(this.posX + (double)(f19 * 5.5F * f16), this.posY + (double)f20 + (double)(f2 * 5.5F), this.posZ - (double)(f4 * 5.5F * f16), 0.0F, 0.0F); + + for (int k = 0; k < 3; ++k) + { + MultiPartEntityPart multipartentitypart = null; + + if (k == 0) + { + multipartentitypart = this.dragonPartTail1; + } + + if (k == 1) + { + multipartentitypart = this.dragonPartTail2; + } + + if (k == 2) + { + multipartentitypart = this.dragonPartTail3; + } + + double[] adouble1 = this.getMovementOffsets(12 + k * 2, 1.0F); + float f21 = this.rotationYaw * 0.017453292F + this.simplifyAngle(adouble1[0] - adouble[0]) * 0.017453292F; + float f6 = MathHelper.sin(f21); + float f22 = MathHelper.cos(f21); + float f23 = 1.5F; + float f24 = (float)(k + 1) * 2.0F; + multipartentitypart.onUpdate(); + multipartentitypart.setLocationAndAngles(this.posX - (double)((f3 * 1.5F + f6 * f24) * f16), this.posY + (adouble1[1] - adouble[1]) - (double)((f24 + 1.5F) * f2) + 1.5D, this.posZ + (double)((f18 * 1.5F + f22 * f24) * f16), 0.0F, 0.0F); + } + + if (!this.world.isRemote) + { + this.slowed = this.destroyBlocksInAABB(this.dragonPartHead.getEntityBoundingBox()) | this.destroyBlocksInAABB(this.dragonPartNeck.getEntityBoundingBox()) | this.destroyBlocksInAABB(this.dragonPartBody.getEntityBoundingBox()); + + if (this.fightManager != null) + { + this.fightManager.dragonUpdate(this); + } + } + + for (int l = 0; l < this.dragonPartArray.length; ++l) + { + this.dragonPartArray[l].prevPosX = avec3d[l].x; + this.dragonPartArray[l].prevPosY = avec3d[l].y; + this.dragonPartArray[l].prevPosZ = avec3d[l].z; + } + } + } + } + + private float getHeadYOffset(float p_184662_1_) + { + double d0; + + if (this.phaseManager.getCurrentPhase().getIsStationary()) + { + d0 = -1.0D; + } + else + { + double[] adouble = this.getMovementOffsets(5, 1.0F); + double[] adouble1 = this.getMovementOffsets(0, 1.0F); + d0 = adouble[1] - adouble1[1]; + } + + return (float)d0; + } + + /** + * Updates the state of the enderdragon's current endercrystal. + */ + private void updateDragonEnderCrystal() + { + if (this.healingEnderCrystal != null) + { + if (this.healingEnderCrystal.isDead) + { + this.healingEnderCrystal = null; + } + else if (this.ticksExisted % 10 == 0 && this.getHealth() < this.getMaxHealth()) + { + this.setHealth(this.getHealth() + 1.0F); + } + } + + if (this.rand.nextInt(10) == 0) + { + List list = this.world.getEntitiesWithinAABB(EntityEnderCrystal.class, this.getEntityBoundingBox().grow(32.0D)); + EntityEnderCrystal entityendercrystal = null; + double d0 = Double.MAX_VALUE; + + for (EntityEnderCrystal entityendercrystal1 : list) + { + double d1 = entityendercrystal1.getDistanceSq(this); + + if (d1 < d0) + { + d0 = d1; + entityendercrystal = entityendercrystal1; + } + } + + this.healingEnderCrystal = entityendercrystal; + } + } + + /** + * Pushes all entities inside the list away from the enderdragon. + */ + private void collideWithEntities(List p_70970_1_) + { + double d0 = (this.dragonPartBody.getEntityBoundingBox().minX + this.dragonPartBody.getEntityBoundingBox().maxX) / 2.0D; + double d1 = (this.dragonPartBody.getEntityBoundingBox().minZ + this.dragonPartBody.getEntityBoundingBox().maxZ) / 2.0D; + + for (Entity entity : p_70970_1_) + { + if (entity instanceof EntityLivingBase) + { + double d2 = entity.posX - d0; + double d3 = entity.posZ - d1; + double d4 = d2 * d2 + d3 * d3; + entity.addVelocity(d2 / d4 * 4.0D, 0.20000000298023224D, d3 / d4 * 4.0D); + + if (!this.phaseManager.getCurrentPhase().getIsStationary() && ((EntityLivingBase)entity).getRevengeTimer() < entity.ticksExisted - 2) + { + entity.attackEntityFrom(DamageSource.causeMobDamage(this), 5.0F); + this.applyEnchantments(this, entity); + } + } + } + } + + /** + * Attacks all entities inside this list, dealing 5 hearts of damage. + */ + private void attackEntitiesInList(List p_70971_1_) + { + for (int i = 0; i < p_70971_1_.size(); ++i) + { + Entity entity = p_70971_1_.get(i); + + if (entity instanceof EntityLivingBase) + { + entity.attackEntityFrom(DamageSource.causeMobDamage(this), 10.0F); + this.applyEnchantments(this, entity); + } + } + } + + /** + * Simplifies the value of a number by adding/subtracting 180 to the point that the number is between -180 and 180. + */ + private float simplifyAngle(double p_70973_1_) + { + return (float)MathHelper.wrapDegrees(p_70973_1_); + } + + /** + * Destroys all blocks that aren't associated with 'The End' inside the given bounding box. + */ + private boolean destroyBlocksInAABB(AxisAlignedBB p_70972_1_) + { + int i = MathHelper.floor(p_70972_1_.minX); + int j = MathHelper.floor(p_70972_1_.minY); + int k = MathHelper.floor(p_70972_1_.minZ); + int l = MathHelper.floor(p_70972_1_.maxX); + int i1 = MathHelper.floor(p_70972_1_.maxY); + int j1 = MathHelper.floor(p_70972_1_.maxZ); + boolean flag = false; + boolean flag1 = false; + + for (int k1 = i; k1 <= l; ++k1) + { + for (int l1 = j; l1 <= i1; ++l1) + { + for (int i2 = k; i2 <= j1; ++i2) + { + BlockPos blockpos = new BlockPos(k1, l1, i2); + IBlockState iblockstate = this.world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + + if (!block.isAir(iblockstate, this.world, blockpos) && iblockstate.getMaterial() != Material.FIRE) + { + if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this)) + { + flag = true; + } + else if (block.canEntityDestroy(iblockstate, this.world, blockpos, this) && net.minecraftforge.event.ForgeEventFactory.onEntityDestroyBlock(this, blockpos, iblockstate)) + { + if (block != Blocks.COMMAND_BLOCK && block != Blocks.REPEATING_COMMAND_BLOCK && block != Blocks.CHAIN_COMMAND_BLOCK && block != Blocks.IRON_BARS && block != Blocks.END_GATEWAY) + { + flag1 = this.world.setBlockToAir(blockpos) || flag1; + } + else + { + flag = true; + } + } + else + { + flag = true; + } + } + } + } + } + + if (flag1) + { + double d0 = p_70972_1_.minX + (p_70972_1_.maxX - p_70972_1_.minX) * (double)this.rand.nextFloat(); + double d1 = p_70972_1_.minY + (p_70972_1_.maxY - p_70972_1_.minY) * (double)this.rand.nextFloat(); + double d2 = p_70972_1_.minZ + (p_70972_1_.maxZ - p_70972_1_.minZ) * (double)this.rand.nextFloat(); + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + return flag; + } + + public boolean attackEntityFromPart(MultiPartEntityPart dragonPart, DamageSource source, float damage) + { + damage = this.phaseManager.getCurrentPhase().getAdjustedDamage(dragonPart, source, damage); + + if (dragonPart != this.dragonPartHead) + { + damage = damage / 4.0F + Math.min(damage, 1.0F); + } + + if (damage < 0.01F) + { + return false; + } + else + { + if (source.getTrueSource() instanceof EntityPlayer || source.isExplosion()) + { + float f = this.getHealth(); + this.attackDragonFrom(source, damage); + + if (this.getHealth() <= 0.0F && !this.phaseManager.getCurrentPhase().getIsStationary()) + { + this.setHealth(1.0F); + this.phaseManager.setPhase(PhaseList.DYING); + } + + if (this.phaseManager.getCurrentPhase().getIsStationary()) + { + this.sittingDamageReceived = (int)((float)this.sittingDamageReceived + (f - this.getHealth())); + + if ((float)this.sittingDamageReceived > 0.25F * this.getMaxHealth()) + { + this.sittingDamageReceived = 0; + this.phaseManager.setPhase(PhaseList.TAKEOFF); + } + } + } + + return true; + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (source instanceof EntityDamageSource && ((EntityDamageSource)source).getIsThornsDamage()) + { + this.attackEntityFromPart(this.dragonPartBody, source, amount); + } + + return false; + } + + /** + * Provides a way to cause damage to an ender dragon. + */ + protected boolean attackDragonFrom(DamageSource source, float amount) + { + return super.attackEntityFrom(source, amount); + } + + /** + * Called by the /kill command. + */ + public void onKillCommand() + { + this.setDead(); + + if (this.fightManager != null) + { + this.fightManager.dragonUpdate(this); + this.fightManager.processDragonDeath(this); + } + } + + /** + * handles entity death timer, experience orb and particle creation + */ + protected void onDeathUpdate() + { + if (this.fightManager != null) + { + this.fightManager.dragonUpdate(this); + } + + ++this.deathTicks; + + if (this.deathTicks >= 180 && this.deathTicks <= 200) + { + float f = (this.rand.nextFloat() - 0.5F) * 8.0F; + float f1 = (this.rand.nextFloat() - 0.5F) * 4.0F; + float f2 = (this.rand.nextFloat() - 0.5F) * 8.0F; + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_HUGE, this.posX + (double)f, this.posY + 2.0D + (double)f1, this.posZ + (double)f2, 0.0D, 0.0D, 0.0D); + } + + boolean flag = this.world.getGameRules().getBoolean("doMobLoot"); + int i = 500; + + if (this.fightManager != null && !this.fightManager.hasPreviouslyKilledDragon()) + { + i = 12000; + } + + if (!this.world.isRemote) + { + if (this.deathTicks > 150 && this.deathTicks % 5 == 0 && flag) + { + this.dropExperience(MathHelper.floor((float)i * 0.08F)); + } + + if (this.deathTicks == 1) + { + this.world.playBroadcastSound(1028, new BlockPos(this), 0); + } + } + + this.move(MoverType.SELF, 0.0D, 0.10000000149011612D, 0.0D); + this.rotationYaw += 20.0F; + this.renderYawOffset = this.rotationYaw; + + if (this.deathTicks == 200 && !this.world.isRemote) + { + if (flag) + { + this.dropExperience(MathHelper.floor((float)i * 0.2F)); + } + + if (this.fightManager != null) + { + this.fightManager.processDragonDeath(this); + } + + this.setDead(); + } + } + + private void dropExperience(int p_184668_1_) + { + while (p_184668_1_ > 0) + { + int i = EntityXPOrb.getXPSplit(p_184668_1_); + p_184668_1_ -= i; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, i)); + } + } + + /** + * Generates values for the fields pathPoints, and neighbors, and then returns the nearest pathPoint to the + * specified position. + */ + public int initPathPoints() + { + if (this.pathPoints[0] == null) + { + for (int i = 0; i < 24; ++i) + { + int j = 5; + int l; + int i1; + + if (i < 12) + { + l = (int)(60.0F * MathHelper.cos(2.0F * (-(float)Math.PI + 0.2617994F * (float)i))); + i1 = (int)(60.0F * MathHelper.sin(2.0F * (-(float)Math.PI + 0.2617994F * (float)i))); + } + else if (i < 20) + { + int lvt_3_1_ = i - 12; + l = (int)(40.0F * MathHelper.cos(2.0F * (-(float)Math.PI + 0.3926991F * (float)lvt_3_1_))); + i1 = (int)(40.0F * MathHelper.sin(2.0F * (-(float)Math.PI + 0.3926991F * (float)lvt_3_1_))); + j += 10; + } + else + { + int k1 = i - 20; + l = (int)(20.0F * MathHelper.cos(2.0F * (-(float)Math.PI + ((float)Math.PI / 4F) * (float)k1))); + i1 = (int)(20.0F * MathHelper.sin(2.0F * (-(float)Math.PI + ((float)Math.PI / 4F) * (float)k1))); + } + + int j1 = Math.max(this.world.getSeaLevel() + 10, this.world.getTopSolidOrLiquidBlock(new BlockPos(l, 0, i1)).getY() + j); + this.pathPoints[i] = new PathPoint(l, j1, i1); + } + + this.neighbors[0] = 6146; + this.neighbors[1] = 8197; + this.neighbors[2] = 8202; + this.neighbors[3] = 16404; + this.neighbors[4] = 32808; + this.neighbors[5] = 32848; + this.neighbors[6] = 65696; + this.neighbors[7] = 131392; + this.neighbors[8] = 131712; + this.neighbors[9] = 263424; + this.neighbors[10] = 526848; + this.neighbors[11] = 525313; + this.neighbors[12] = 1581057; + this.neighbors[13] = 3166214; + this.neighbors[14] = 2138120; + this.neighbors[15] = 6373424; + this.neighbors[16] = 4358208; + this.neighbors[17] = 12910976; + this.neighbors[18] = 9044480; + this.neighbors[19] = 9706496; + this.neighbors[20] = 15216640; + this.neighbors[21] = 13688832; + this.neighbors[22] = 11763712; + this.neighbors[23] = 8257536; + } + + return this.getNearestPpIdx(this.posX, this.posY, this.posZ); + } + + /** + * Returns the index into pathPoints of the nearest PathPoint. + */ + public int getNearestPpIdx(double x, double y, double z) + { + float f = 10000.0F; + int i = 0; + PathPoint pathpoint = new PathPoint(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)); + int j = 0; + + if (this.fightManager == null || this.fightManager.getNumAliveCrystals() == 0) + { + j = 12; + } + + for (int k = j; k < 24; ++k) + { + if (this.pathPoints[k] != null) + { + float f1 = this.pathPoints[k].distanceToSquared(pathpoint); + + if (f1 < f) + { + f = f1; + i = k; + } + } + } + + return i; + } + + /** + * Find and return a path among the circles described by pathPoints, or null if the shortest path would just be + * directly between the start and finish with no intermediate points. + * + * Starting with pathPoint[startIdx], it searches the neighboring points (and their neighboring points, and so on) + * until it reaches pathPoint[finishIdx], at which point it calls makePath to seal the deal. + */ + @Nullable + public Path findPath(int startIdx, int finishIdx, @Nullable PathPoint andThen) + { + for (int i = 0; i < 24; ++i) + { + PathPoint pathpoint = this.pathPoints[i]; + pathpoint.visited = false; + pathpoint.distanceToTarget = 0.0F; + pathpoint.totalPathDistance = 0.0F; + pathpoint.distanceToNext = 0.0F; + pathpoint.previous = null; + pathpoint.index = -1; + } + + PathPoint pathpoint4 = this.pathPoints[startIdx]; + PathPoint pathpoint5 = this.pathPoints[finishIdx]; + pathpoint4.totalPathDistance = 0.0F; + pathpoint4.distanceToNext = pathpoint4.distanceTo(pathpoint5); + pathpoint4.distanceToTarget = pathpoint4.distanceToNext; + this.pathFindQueue.clearPath(); + this.pathFindQueue.addPoint(pathpoint4); + PathPoint pathpoint1 = pathpoint4; + int j = 0; + + if (this.fightManager == null || this.fightManager.getNumAliveCrystals() == 0) + { + j = 12; + } + + while (!this.pathFindQueue.isPathEmpty()) + { + PathPoint pathpoint2 = this.pathFindQueue.dequeue(); + + if (pathpoint2.equals(pathpoint5)) + { + if (andThen != null) + { + andThen.previous = pathpoint5; + pathpoint5 = andThen; + } + + return this.makePath(pathpoint4, pathpoint5); + } + + if (pathpoint2.distanceTo(pathpoint5) < pathpoint1.distanceTo(pathpoint5)) + { + pathpoint1 = pathpoint2; + } + + pathpoint2.visited = true; + int k = 0; + + for (int l = 0; l < 24; ++l) + { + if (this.pathPoints[l] == pathpoint2) + { + k = l; + break; + } + } + + for (int i1 = j; i1 < 24; ++i1) + { + if ((this.neighbors[k] & 1 << i1) > 0) + { + PathPoint pathpoint3 = this.pathPoints[i1]; + + if (!pathpoint3.visited) + { + float f = pathpoint2.totalPathDistance + pathpoint2.distanceTo(pathpoint3); + + if (!pathpoint3.isAssigned() || f < pathpoint3.totalPathDistance) + { + pathpoint3.previous = pathpoint2; + pathpoint3.totalPathDistance = f; + pathpoint3.distanceToNext = pathpoint3.distanceTo(pathpoint5); + + if (pathpoint3.isAssigned()) + { + this.pathFindQueue.changeDistance(pathpoint3, pathpoint3.totalPathDistance + pathpoint3.distanceToNext); + } + else + { + pathpoint3.distanceToTarget = pathpoint3.totalPathDistance + pathpoint3.distanceToNext; + this.pathFindQueue.addPoint(pathpoint3); + } + } + } + } + } + } + + if (pathpoint1 == pathpoint4) + { + return null; + } + else + { + LOGGER.debug("Failed to find path from {} to {}", Integer.valueOf(startIdx), Integer.valueOf(finishIdx)); + + if (andThen != null) + { + andThen.previous = pathpoint1; + pathpoint1 = andThen; + } + + return this.makePath(pathpoint4, pathpoint1); + } + } + + /** + * Create and return a new PathEntity defining a path from the start to the finish, using the connections already + * made by the caller, findPath. + */ + private Path makePath(PathPoint start, PathPoint finish) + { + int i = 1; + + for (PathPoint pathpoint = finish; pathpoint.previous != null; pathpoint = pathpoint.previous) + { + ++i; + } + + PathPoint[] apathpoint = new PathPoint[i]; + PathPoint pathpoint1 = finish; + --i; + + for (apathpoint[i] = finish; pathpoint1.previous != null; apathpoint[i] = pathpoint1) + { + pathpoint1 = pathpoint1.previous; + --i; + } + + return new Path(apathpoint); + } + + public static void registerFixesDragon(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityDragon.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("DragonPhase", this.phaseManager.getCurrentPhase().getType().getId()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("DragonPhase")) + { + this.phaseManager.setPhase(PhaseList.getById(compound.getInteger("DragonPhase"))); + } + } + + /** + * Makes the entity despawn if requirements are reached + */ + protected void despawnEntity() + { + } + + /** + * Return the Entity parts making up this Entity (currently only for dragons) + */ + public Entity[] getParts() + { + return this.dragonPartArray; + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return false; + } + + public World getWorld() + { + return this.world; + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.HOSTILE; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_ENDERDRAGON_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ENDERDRAGON_HURT; + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 5.0F; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ENDER_DRAGON; + } + + @SideOnly(Side.CLIENT) + public float getHeadPartYOffset(int p_184667_1_, double[] p_184667_2_, double[] p_184667_3_) + { + IPhase iphase = this.phaseManager.getCurrentPhase(); + PhaseList phaselist = iphase.getType(); + double d0; + + if (phaselist != PhaseList.LANDING && phaselist != PhaseList.TAKEOFF) + { + if (iphase.getIsStationary()) + { + d0 = (double)p_184667_1_; + } + else if (p_184667_1_ == 6) + { + d0 = 0.0D; + } + else + { + d0 = p_184667_3_[1] - p_184667_2_[1]; + } + } + else + { + BlockPos blockpos = this.world.getTopSolidOrLiquidBlock(WorldGenEndPodium.END_PODIUM_LOCATION); + float f = Math.max(MathHelper.sqrt(this.getDistanceSqToCenter(blockpos)) / 4.0F, 1.0F); + d0 = (double)((float)p_184667_1_ / f); + } + + return (float)d0; + } + + public Vec3d getHeadLookVec(float p_184665_1_) + { + IPhase iphase = this.phaseManager.getCurrentPhase(); + PhaseList phaselist = iphase.getType(); + Vec3d vec3d; + + if (phaselist != PhaseList.LANDING && phaselist != PhaseList.TAKEOFF) + { + if (iphase.getIsStationary()) + { + float f4 = this.rotationPitch; + float f5 = 1.5F; + this.rotationPitch = -45.0F; + vec3d = this.getLook(p_184665_1_); + this.rotationPitch = f4; + } + else + { + vec3d = this.getLook(p_184665_1_); + } + } + else + { + BlockPos blockpos = this.world.getTopSolidOrLiquidBlock(WorldGenEndPodium.END_PODIUM_LOCATION); + float f = Math.max(MathHelper.sqrt(this.getDistanceSqToCenter(blockpos)) / 4.0F, 1.0F); + float f1 = 6.0F / f; + float f2 = this.rotationPitch; + float f3 = 1.5F; + this.rotationPitch = -f1 * 1.5F * 5.0F; + vec3d = this.getLook(p_184665_1_); + this.rotationPitch = f2; + } + + return vec3d; + } + + public void onCrystalDestroyed(EntityEnderCrystal crystal, BlockPos pos, DamageSource dmgSrc) + { + EntityPlayer entityplayer; + + if (dmgSrc.getTrueSource() instanceof EntityPlayer) + { + entityplayer = (EntityPlayer)dmgSrc.getTrueSource(); + } + else + { + entityplayer = this.world.getNearestAttackablePlayer(pos, 64.0D, 64.0D); + } + + if (crystal == this.healingEnderCrystal) + { + this.attackEntityFromPart(this.dragonPartHead, DamageSource.causeExplosionDamage(entityplayer), 10.0F); + } + + this.phaseManager.getCurrentPhase().onCrystalDestroyed(crystal, pos, dmgSrc, entityplayer); + } + + public void notifyDataManagerChange(DataParameter key) + { + if (PHASE.equals(key) && this.world.isRemote) + { + this.phaseManager.setPhase(PhaseList.getById(((Integer)this.getDataManager().get(PHASE)).intValue())); + } + + super.notifyDataManagerChange(key); + } + + public PhaseManager getPhaseManager() + { + return this.phaseManager; + } + + @Nullable + public DragonFightManager getFightManager() + { + return this.fightManager; + } + + /** + * adds a PotionEffect to the entity + */ + public void addPotionEffect(PotionEffect potioneffectIn) + { + } + + protected boolean canBeRidden(Entity entityIn) + { + return false; + } + + /** + * Returns false if this Entity is a boss, true otherwise. + */ + public boolean isNonBoss() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/EntityWither.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/EntityWither.java new file mode 100644 index 0000000..bea68c1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/EntityWither.java @@ -0,0 +1,742 @@ +package net.minecraft.entity.boss; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackRanged; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BossInfo; +import net.minecraft.world.BossInfoServer; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityWither extends EntityMob implements IRangedAttackMob +{ + private static final DataParameter FIRST_HEAD_TARGET = EntityDataManager.createKey(EntityWither.class, DataSerializers.VARINT); + private static final DataParameter SECOND_HEAD_TARGET = EntityDataManager.createKey(EntityWither.class, DataSerializers.VARINT); + private static final DataParameter THIRD_HEAD_TARGET = EntityDataManager.createKey(EntityWither.class, DataSerializers.VARINT); + private static final DataParameter[] HEAD_TARGETS = new DataParameter[] {FIRST_HEAD_TARGET, SECOND_HEAD_TARGET, THIRD_HEAD_TARGET}; + private static final DataParameter INVULNERABILITY_TIME = EntityDataManager.createKey(EntityWither.class, DataSerializers.VARINT); + private final float[] xRotationHeads = new float[2]; + private final float[] yRotationHeads = new float[2]; + private final float[] xRotOHeads = new float[2]; + private final float[] yRotOHeads = new float[2]; + private final int[] nextHeadUpdate = new int[2]; + private final int[] idleHeadUpdates = new int[2]; + /** Time before the Wither tries to break blocks */ + private int blockBreakCounter; + private final BossInfoServer bossInfo = (BossInfoServer)(new BossInfoServer(this.getDisplayName(), BossInfo.Color.PURPLE, BossInfo.Overlay.PROGRESS)).setDarkenSky(true); + /** Selector used to determine the entities a wither boss should attack. */ + private static final Predicate NOT_UNDEAD = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof EntityLivingBase && ((EntityLivingBase)p_apply_1_).getCreatureAttribute() != EnumCreatureAttribute.UNDEAD && ((EntityLivingBase)p_apply_1_).attackable(); + } + }; + + public EntityWither(World worldIn) + { + super(worldIn); + this.setHealth(this.getMaxHealth()); + this.setSize(0.9F, 3.5F); + this.isImmuneToFire = true; + ((PathNavigateGround)this.getNavigator()).setCanSwim(true); + this.experienceValue = 50; + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityWither.AIDoNothing()); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIAttackRanged(this, 1.0D, 40, 20.0F)); + this.tasks.addTask(5, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLiving.class, 0, false, false, NOT_UNDEAD)); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(FIRST_HEAD_TARGET, Integer.valueOf(0)); + this.dataManager.register(SECOND_HEAD_TARGET, Integer.valueOf(0)); + this.dataManager.register(THIRD_HEAD_TARGET, Integer.valueOf(0)); + this.dataManager.register(INVULNERABILITY_TIME, Integer.valueOf(0)); + } + + public static void registerFixesWither(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityWither.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Invul", this.getInvulTime()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setInvulTime(compound.getInteger("Invul")); + + if (this.hasCustomName()) + { + this.bossInfo.setName(this.getDisplayName()); + } + } + + /** + * Sets the custom name tag for this entity + */ + public void setCustomNameTag(String name) + { + super.setCustomNameTag(name); + this.bossInfo.setName(this.getDisplayName()); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_WITHER_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_WITHER_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_WITHER_DEATH; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + this.motionY *= 0.6000000238418579D; + + if (!this.world.isRemote && this.getWatchedTargetId(0) > 0) + { + Entity entity = this.world.getEntityByID(this.getWatchedTargetId(0)); + + if (entity != null) + { + if (this.posY < entity.posY || !this.isArmored() && this.posY < entity.posY + 5.0D) + { + if (this.motionY < 0.0D) + { + this.motionY = 0.0D; + } + + this.motionY += (0.5D - this.motionY) * 0.6000000238418579D; + } + + double d0 = entity.posX - this.posX; + double d1 = entity.posZ - this.posZ; + double d3 = d0 * d0 + d1 * d1; + + if (d3 > 9.0D) + { + double d5 = (double)MathHelper.sqrt(d3); + this.motionX += (d0 / d5 * 0.5D - this.motionX) * 0.6000000238418579D; + this.motionZ += (d1 / d5 * 0.5D - this.motionZ) * 0.6000000238418579D; + } + } + } + + if (this.motionX * this.motionX + this.motionZ * this.motionZ > 0.05000000074505806D) + { + this.rotationYaw = (float)MathHelper.atan2(this.motionZ, this.motionX) * (180F / (float)Math.PI) - 90.0F; + } + + super.onLivingUpdate(); + + for (int i = 0; i < 2; ++i) + { + this.yRotOHeads[i] = this.yRotationHeads[i]; + this.xRotOHeads[i] = this.xRotationHeads[i]; + } + + for (int j = 0; j < 2; ++j) + { + int k = this.getWatchedTargetId(j + 1); + Entity entity1 = null; + + if (k > 0) + { + entity1 = this.world.getEntityByID(k); + } + + if (entity1 != null) + { + double d11 = this.getHeadX(j + 1); + double d12 = this.getHeadY(j + 1); + double d13 = this.getHeadZ(j + 1); + double d6 = entity1.posX - d11; + double d7 = entity1.posY + (double)entity1.getEyeHeight() - d12; + double d8 = entity1.posZ - d13; + double d9 = (double)MathHelper.sqrt(d6 * d6 + d8 * d8); + float f = (float)(MathHelper.atan2(d8, d6) * (180D / Math.PI)) - 90.0F; + float f1 = (float)(-(MathHelper.atan2(d7, d9) * (180D / Math.PI))); + this.xRotationHeads[j] = this.rotlerp(this.xRotationHeads[j], f1, 40.0F); + this.yRotationHeads[j] = this.rotlerp(this.yRotationHeads[j], f, 10.0F); + } + else + { + this.yRotationHeads[j] = this.rotlerp(this.yRotationHeads[j], this.renderYawOffset, 10.0F); + } + } + + boolean flag = this.isArmored(); + + for (int l = 0; l < 3; ++l) + { + double d10 = this.getHeadX(l); + double d2 = this.getHeadY(l); + double d4 = this.getHeadZ(l); + this.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d10 + this.rand.nextGaussian() * 0.30000001192092896D, d2 + this.rand.nextGaussian() * 0.30000001192092896D, d4 + this.rand.nextGaussian() * 0.30000001192092896D, 0.0D, 0.0D, 0.0D); + + if (flag && this.world.rand.nextInt(4) == 0) + { + this.world.spawnParticle(EnumParticleTypes.SPELL_MOB, d10 + this.rand.nextGaussian() * 0.30000001192092896D, d2 + this.rand.nextGaussian() * 0.30000001192092896D, d4 + this.rand.nextGaussian() * 0.30000001192092896D, 0.699999988079071D, 0.699999988079071D, 0.5D); + } + } + + if (this.getInvulTime() > 0) + { + for (int i1 = 0; i1 < 3; ++i1) + { + this.world.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX + this.rand.nextGaussian(), this.posY + (double)(this.rand.nextFloat() * 3.3F), this.posZ + this.rand.nextGaussian(), 0.699999988079071D, 0.699999988079071D, 0.8999999761581421D); + } + } + } + + protected void updateAITasks() + { + if (this.getInvulTime() > 0) + { + int j1 = this.getInvulTime() - 1; + + if (j1 <= 0) + { + this.world.newExplosion(this, this.posX, this.posY + (double)this.getEyeHeight(), this.posZ, 7.0F, false, net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this)); + this.world.playBroadcastSound(1023, new BlockPos(this), 0); + } + + this.setInvulTime(j1); + + if (this.ticksExisted % 10 == 0) + { + this.heal(10.0F); + } + } + else + { + super.updateAITasks(); + + for (int i = 1; i < 3; ++i) + { + if (this.ticksExisted >= this.nextHeadUpdate[i - 1]) + { + this.nextHeadUpdate[i - 1] = this.ticksExisted + 10 + this.rand.nextInt(10); + + if (this.world.getDifficulty() == EnumDifficulty.NORMAL || this.world.getDifficulty() == EnumDifficulty.HARD) + { + int j3 = i - 1; + int k3 = this.idleHeadUpdates[i - 1]; + this.idleHeadUpdates[j3] = this.idleHeadUpdates[i - 1] + 1; + + if (k3 > 15) + { + float f = 10.0F; + float f1 = 5.0F; + double d0 = MathHelper.nextDouble(this.rand, this.posX - 10.0D, this.posX + 10.0D); + double d1 = MathHelper.nextDouble(this.rand, this.posY - 5.0D, this.posY + 5.0D); + double d2 = MathHelper.nextDouble(this.rand, this.posZ - 10.0D, this.posZ + 10.0D); + this.launchWitherSkullToCoords(i + 1, d0, d1, d2, true); + this.idleHeadUpdates[i - 1] = 0; + } + } + + int k1 = this.getWatchedTargetId(i); + + if (k1 > 0) + { + Entity entity = this.world.getEntityByID(k1); + + if (entity != null && entity.isEntityAlive() && this.getDistanceSq(entity) <= 900.0D && this.canEntityBeSeen(entity)) + { + if (entity instanceof EntityPlayer && ((EntityPlayer)entity).capabilities.disableDamage) + { + this.updateWatchedTargetId(i, 0); + } + else + { + this.launchWitherSkullToEntity(i + 1, (EntityLivingBase)entity); + this.nextHeadUpdate[i - 1] = this.ticksExisted + 40 + this.rand.nextInt(20); + this.idleHeadUpdates[i - 1] = 0; + } + } + else + { + this.updateWatchedTargetId(i, 0); + } + } + else + { + List list = this.world.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox().grow(20.0D, 8.0D, 20.0D), Predicates.and(NOT_UNDEAD, EntitySelectors.NOT_SPECTATING)); + + for (int j2 = 0; j2 < 10 && !list.isEmpty(); ++j2) + { + EntityLivingBase entitylivingbase = list.get(this.rand.nextInt(list.size())); + + if (entitylivingbase != this && entitylivingbase.isEntityAlive() && this.canEntityBeSeen(entitylivingbase)) + { + if (entitylivingbase instanceof EntityPlayer) + { + if (!((EntityPlayer)entitylivingbase).capabilities.disableDamage) + { + this.updateWatchedTargetId(i, entitylivingbase.getEntityId()); + } + } + else + { + this.updateWatchedTargetId(i, entitylivingbase.getEntityId()); + } + + break; + } + + list.remove(entitylivingbase); + } + } + } + } + + if (this.getAttackTarget() != null) + { + this.updateWatchedTargetId(0, this.getAttackTarget().getEntityId()); + } + else + { + this.updateWatchedTargetId(0, 0); + } + + if (this.blockBreakCounter > 0) + { + --this.blockBreakCounter; + + if (this.blockBreakCounter == 0 && net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this)) + { + int i1 = MathHelper.floor(this.posY); + int l1 = MathHelper.floor(this.posX); + int i2 = MathHelper.floor(this.posZ); + boolean flag = false; + + for (int k2 = -1; k2 <= 1; ++k2) + { + for (int l2 = -1; l2 <= 1; ++l2) + { + for (int j = 0; j <= 3; ++j) + { + int i3 = l1 + k2; + int k = i1 + j; + int l = i2 + l2; + BlockPos blockpos = new BlockPos(i3, k, l); + IBlockState iblockstate = this.world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + + if (!block.isAir(iblockstate, this.world, blockpos) && block.canEntityDestroy(iblockstate, world, blockpos, this) && net.minecraftforge.event.ForgeEventFactory.onEntityDestroyBlock(this, blockpos, iblockstate)) + { + flag = this.world.destroyBlock(blockpos, true) || flag; + } + } + } + } + + if (flag) + { + this.world.playEvent((EntityPlayer)null, 1022, new BlockPos(this), 0); + } + } + } + + if (this.ticksExisted % 20 == 0) + { + this.heal(1.0F); + } + + this.bossInfo.setPercent(this.getHealth() / this.getMaxHealth()); + } + } + + public static boolean canDestroyBlock(Block blockIn) + { + return blockIn != Blocks.BEDROCK && blockIn != Blocks.END_PORTAL && blockIn != Blocks.END_PORTAL_FRAME && blockIn != Blocks.COMMAND_BLOCK && blockIn != Blocks.REPEATING_COMMAND_BLOCK && blockIn != Blocks.CHAIN_COMMAND_BLOCK && blockIn != Blocks.BARRIER && blockIn != Blocks.STRUCTURE_BLOCK && blockIn != Blocks.STRUCTURE_VOID && blockIn != Blocks.PISTON_EXTENSION && blockIn != Blocks.END_GATEWAY; + } + + /** + * Initializes this Wither's explosion sequence and makes it invulnerable. Called immediately after spawning. + */ + public void ignite() + { + this.setInvulTime(220); + this.setHealth(this.getMaxHealth() / 3.0F); + } + + /** + * Sets the Entity inside a web block. + */ + public void setInWeb() + { + } + + /** + * Add the given player to the list of players tracking this entity. For instance, a player may track a boss in + * order to view its associated boss bar. + */ + public void addTrackingPlayer(EntityPlayerMP player) + { + super.addTrackingPlayer(player); + this.bossInfo.addPlayer(player); + } + + /** + * Removes the given player from the list of players tracking this entity. See {@link Entity#addTrackingPlayer} for + * more information on tracking. + */ + public void removeTrackingPlayer(EntityPlayerMP player) + { + super.removeTrackingPlayer(player); + this.bossInfo.removePlayer(player); + } + + private double getHeadX(int p_82214_1_) + { + if (p_82214_1_ <= 0) + { + return this.posX; + } + else + { + float f = (this.renderYawOffset + (float)(180 * (p_82214_1_ - 1))) * 0.017453292F; + float f1 = MathHelper.cos(f); + return this.posX + (double)f1 * 1.3D; + } + } + + private double getHeadY(int p_82208_1_) + { + return p_82208_1_ <= 0 ? this.posY + 3.0D : this.posY + 2.2D; + } + + private double getHeadZ(int p_82213_1_) + { + if (p_82213_1_ <= 0) + { + return this.posZ; + } + else + { + float f = (this.renderYawOffset + (float)(180 * (p_82213_1_ - 1))) * 0.017453292F; + float f1 = MathHelper.sin(f); + return this.posZ + (double)f1 * 1.3D; + } + } + + private float rotlerp(float p_82204_1_, float p_82204_2_, float p_82204_3_) + { + float f = MathHelper.wrapDegrees(p_82204_2_ - p_82204_1_); + + if (f > p_82204_3_) + { + f = p_82204_3_; + } + + if (f < -p_82204_3_) + { + f = -p_82204_3_; + } + + return p_82204_1_ + f; + } + + private void launchWitherSkullToEntity(int p_82216_1_, EntityLivingBase p_82216_2_) + { + this.launchWitherSkullToCoords(p_82216_1_, p_82216_2_.posX, p_82216_2_.posY + (double)p_82216_2_.getEyeHeight() * 0.5D, p_82216_2_.posZ, p_82216_1_ == 0 && this.rand.nextFloat() < 0.001F); + } + + /** + * Launches a Wither skull toward (par2, par4, par6) + */ + private void launchWitherSkullToCoords(int p_82209_1_, double x, double y, double z, boolean invulnerable) + { + this.world.playEvent((EntityPlayer)null, 1024, new BlockPos(this), 0); + double d0 = this.getHeadX(p_82209_1_); + double d1 = this.getHeadY(p_82209_1_); + double d2 = this.getHeadZ(p_82209_1_); + double d3 = x - d0; + double d4 = y - d1; + double d5 = z - d2; + EntityWitherSkull entitywitherskull = new EntityWitherSkull(this.world, this, d3, d4, d5); + + if (invulnerable) + { + entitywitherskull.setInvulnerable(true); + } + + entitywitherskull.posY = d1; + entitywitherskull.posX = d0; + entitywitherskull.posZ = d2; + this.world.spawnEntity(entitywitherskull); + } + + /** + * Attack the specified entity using a ranged attack. + */ + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) + { + this.launchWitherSkullToEntity(0, target); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (source != DamageSource.DROWN && !(source.getTrueSource() instanceof EntityWither)) + { + if (this.getInvulTime() > 0 && source != DamageSource.OUT_OF_WORLD) + { + return false; + } + else + { + if (this.isArmored()) + { + Entity entity = source.getImmediateSource(); + + if (entity instanceof EntityArrow) + { + return false; + } + } + + Entity entity1 = source.getTrueSource(); + + if (entity1 != null && !(entity1 instanceof EntityPlayer) && entity1 instanceof EntityLivingBase && ((EntityLivingBase)entity1).getCreatureAttribute() == this.getCreatureAttribute()) + { + return false; + } + else + { + if (this.blockBreakCounter <= 0) + { + this.blockBreakCounter = 20; + } + + for (int i = 0; i < this.idleHeadUpdates.length; ++i) + { + this.idleHeadUpdates[i] += 3; + } + + return super.attackEntityFrom(source, amount); + } + } + } + else + { + return false; + } + } + + /** + * Drop 0-2 items of this living's type + */ + protected void dropFewItems(boolean wasRecentlyHit, int lootingModifier) + { + EntityItem entityitem = this.dropItem(Items.NETHER_STAR, 1); + + if (entityitem != null) + { + entityitem.setNoDespawn(); + } + } + + /** + * Makes the entity despawn if requirements are reached + */ + protected void despawnEntity() + { + this.idleTime = 0; + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } + + public void fall(float distance, float damageMultiplier) + { + } + + /** + * adds a PotionEffect to the entity + */ + public void addPotionEffect(PotionEffect potioneffectIn) + { + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(300.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.6000000238418579D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(40.0D); + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(4.0D); + } + + @SideOnly(Side.CLIENT) + public float getHeadYRotation(int p_82207_1_) + { + return this.yRotationHeads[p_82207_1_]; + } + + @SideOnly(Side.CLIENT) + public float getHeadXRotation(int p_82210_1_) + { + return this.xRotationHeads[p_82210_1_]; + } + + public int getInvulTime() + { + return ((Integer)this.dataManager.get(INVULNERABILITY_TIME)).intValue(); + } + + public void setInvulTime(int time) + { + this.dataManager.set(INVULNERABILITY_TIME, Integer.valueOf(time)); + } + + /** + * Returns the target entity ID if present, or -1 if not @param par1 The target offset, should be from 0-2 + */ + public int getWatchedTargetId(int head) + { + return ((Integer)this.dataManager.get(HEAD_TARGETS[head])).intValue(); + } + + /** + * Updates the target entity ID + */ + public void updateWatchedTargetId(int targetOffset, int newId) + { + this.dataManager.set(HEAD_TARGETS[targetOffset], Integer.valueOf(newId)); + } + + /** + * Returns whether the wither is armored with its boss armor or not by checking whether its health is below half of + * its maximum. + */ + public boolean isArmored() + { + return this.getHealth() <= this.getMaxHealth() / 2.0F; + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + protected boolean canBeRidden(Entity entityIn) + { + return false; + } + + /** + * Returns false if this Entity is a boss, true otherwise. + */ + public boolean isNonBoss() + { + return false; + } + + public void setSwingingArms(boolean swingingArms) + { + } + + class AIDoNothing extends EntityAIBase + { + public AIDoNothing() + { + this.setMutexBits(7); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return EntityWither.this.getInvulTime() > 0; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/IPhase.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/IPhase.java new file mode 100644 index 0000000..8bcde9d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/IPhase.java @@ -0,0 +1,56 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.MultiPartEntityPart; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public interface IPhase +{ + boolean getIsStationary(); + + /** + * Generates particle effects appropriate to the phase (or sometimes sounds). + * Called by dragon's onLivingUpdate. Only used when worldObj.isRemote. + */ + void doClientRenderEffects(); + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + void doLocalUpdate(); + + void onCrystalDestroyed(EntityEnderCrystal crystal, BlockPos pos, DamageSource dmgSrc, @Nullable EntityPlayer plyr); + + /** + * Called when this phase is set to active + */ + void initPhase(); + + void removeAreaEffect(); + + /** + * Returns the maximum amount dragon may rise or fall during this phase + */ + float getMaxRiseOrFall(); + + float getYawFactor(); + + PhaseList getType(); + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + Vec3d getTargetLocation(); + + /** + * Normally, just returns damage. If dragon is sitting and src is an arrow, arrow is enflamed and zero damage + * returned. + */ + float getAdjustedDamage(MultiPartEntityPart pt, DamageSource src, float damage); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseBase.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseBase.java new file mode 100644 index 0000000..06f3203 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseBase.java @@ -0,0 +1,90 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.MultiPartEntityPart; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public abstract class PhaseBase implements IPhase +{ + protected final EntityDragon dragon; + + public PhaseBase(EntityDragon dragonIn) + { + this.dragon = dragonIn; + } + + public boolean getIsStationary() + { + return false; + } + + /** + * Generates particle effects appropriate to the phase (or sometimes sounds). + * Called by dragon's onLivingUpdate. Only used when worldObj.isRemote. + */ + public void doClientRenderEffects() + { + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + } + + public void onCrystalDestroyed(EntityEnderCrystal crystal, BlockPos pos, DamageSource dmgSrc, @Nullable EntityPlayer plyr) + { + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + } + + public void removeAreaEffect() + { + } + + /** + * Returns the maximum amount dragon may rise or fall during this phase + */ + public float getMaxRiseOrFall() + { + return 0.6F; + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return null; + } + + /** + * Normally, just returns damage. If dragon is sitting and src is an arrow, arrow is enflamed and zero damage + * returned. + */ + public float getAdjustedDamage(MultiPartEntityPart pt, DamageSource src, float damage) + { + return damage; + } + + public float getYawFactor() + { + float f = MathHelper.sqrt(this.dragon.motionX * this.dragon.motionX + this.dragon.motionZ * this.dragon.motionZ) + 1.0F; + float f1 = Math.min(f, 40.0F); + return 0.7F / f1 / f; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.java new file mode 100644 index 0000000..aac9848 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseChargingPlayer.java @@ -0,0 +1,81 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.math.Vec3d; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PhaseChargingPlayer extends PhaseBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + private Vec3d targetLocation; + private int timeSinceCharge; + + public PhaseChargingPlayer(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + if (this.targetLocation == null) + { + LOGGER.warn("Aborting charge player as no target was set."); + this.dragon.getPhaseManager().setPhase(PhaseList.HOLDING_PATTERN); + } + else if (this.timeSinceCharge > 0 && this.timeSinceCharge++ >= 10) + { + this.dragon.getPhaseManager().setPhase(PhaseList.HOLDING_PATTERN); + } + else + { + double d0 = this.targetLocation.squareDistanceTo(this.dragon.posX, this.dragon.posY, this.dragon.posZ); + + if (d0 < 100.0D || d0 > 22500.0D || this.dragon.collidedHorizontally || this.dragon.collidedVertically) + { + ++this.timeSinceCharge; + } + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.targetLocation = null; + this.timeSinceCharge = 0; + } + + public void setTarget(Vec3d p_188668_1_) + { + this.targetLocation = p_188668_1_; + } + + /** + * Returns the maximum amount dragon may rise or fall during this phase + */ + public float getMaxRiseOrFall() + { + return 3.0F; + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + public PhaseList getType() + { + return PhaseList.CHARGING_PLAYER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseDying.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseDying.java new file mode 100644 index 0000000..8e1a10f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseDying.java @@ -0,0 +1,91 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.gen.feature.WorldGenEndPodium; + +public class PhaseDying extends PhaseBase +{ + private Vec3d targetLocation; + private int time; + + public PhaseDying(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Generates particle effects appropriate to the phase (or sometimes sounds). + * Called by dragon's onLivingUpdate. Only used when worldObj.isRemote. + */ + public void doClientRenderEffects() + { + if (this.time++ % 10 == 0) + { + float f = (this.dragon.getRNG().nextFloat() - 0.5F) * 8.0F; + float f1 = (this.dragon.getRNG().nextFloat() - 0.5F) * 4.0F; + float f2 = (this.dragon.getRNG().nextFloat() - 0.5F) * 8.0F; + this.dragon.world.spawnParticle(EnumParticleTypes.EXPLOSION_HUGE, this.dragon.posX + (double)f, this.dragon.posY + 2.0D + (double)f1, this.dragon.posZ + (double)f2, 0.0D, 0.0D, 0.0D); + } + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + ++this.time; + + if (this.targetLocation == null) + { + BlockPos blockpos = this.dragon.world.getHeight(WorldGenEndPodium.END_PODIUM_LOCATION); + this.targetLocation = new Vec3d((double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ()); + } + + double d0 = this.targetLocation.squareDistanceTo(this.dragon.posX, this.dragon.posY, this.dragon.posZ); + + if (d0 >= 100.0D && d0 <= 22500.0D && !this.dragon.collidedHorizontally && !this.dragon.collidedVertically) + { + this.dragon.setHealth(1.0F); + } + else + { + this.dragon.setHealth(0.0F); + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.targetLocation = null; + this.time = 0; + } + + /** + * Returns the maximum amount dragon may rise or fall during this phase + */ + public float getMaxRiseOrFall() + { + return 3.0F; + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + public PhaseList getType() + { + return PhaseList.DYING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.java new file mode 100644 index 0000000..3ed78ea --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseHoldingPattern.java @@ -0,0 +1,175 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.gen.feature.WorldGenEndPodium; + +public class PhaseHoldingPattern extends PhaseBase +{ + private Path currentPath; + private Vec3d targetLocation; + private boolean clockwise; + + public PhaseHoldingPattern(EntityDragon dragonIn) + { + super(dragonIn); + } + + public PhaseList getType() + { + return PhaseList.HOLDING_PATTERN; + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + double d0 = this.targetLocation == null ? 0.0D : this.targetLocation.squareDistanceTo(this.dragon.posX, this.dragon.posY, this.dragon.posZ); + + if (d0 < 100.0D || d0 > 22500.0D || this.dragon.collidedHorizontally || this.dragon.collidedVertically) + { + this.findNewTarget(); + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.currentPath = null; + this.targetLocation = null; + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + private void findNewTarget() + { + if (this.currentPath != null && this.currentPath.isFinished()) + { + BlockPos blockpos = this.dragon.world.getTopSolidOrLiquidBlock(new BlockPos(WorldGenEndPodium.END_PODIUM_LOCATION)); + int i = this.dragon.getFightManager() == null ? 0 : this.dragon.getFightManager().getNumAliveCrystals(); + + if (this.dragon.getRNG().nextInt(i + 3) == 0) + { + this.dragon.getPhaseManager().setPhase(PhaseList.LANDING_APPROACH); + return; + } + + double d0 = 64.0D; + EntityPlayer entityplayer = this.dragon.world.getNearestAttackablePlayer(blockpos, d0, d0); + + if (entityplayer != null) + { + d0 = entityplayer.getDistanceSqToCenter(blockpos) / 512.0D; + } + + if (entityplayer != null && (this.dragon.getRNG().nextInt(MathHelper.abs((int)d0) + 2) == 0 || this.dragon.getRNG().nextInt(i + 2) == 0)) + { + this.strafePlayer(entityplayer); + return; + } + } + + if (this.currentPath == null || this.currentPath.isFinished()) + { + int j = this.dragon.initPathPoints(); + int k = j; + + if (this.dragon.getRNG().nextInt(8) == 0) + { + this.clockwise = !this.clockwise; + k = j + 6; + } + + if (this.clockwise) + { + ++k; + } + else + { + --k; + } + + if (this.dragon.getFightManager() != null && this.dragon.getFightManager().getNumAliveCrystals() >= 0) + { + k = k % 12; + + if (k < 0) + { + k += 12; + } + } + else + { + k = k - 12; + k = k & 7; + k = k + 12; + } + + this.currentPath = this.dragon.findPath(j, k, (PathPoint)null); + + if (this.currentPath != null) + { + this.currentPath.incrementPathIndex(); + } + } + + this.navigateToNextPathNode(); + } + + private void strafePlayer(EntityPlayer player) + { + this.dragon.getPhaseManager().setPhase(PhaseList.STRAFE_PLAYER); + ((PhaseStrafePlayer)this.dragon.getPhaseManager().getPhase(PhaseList.STRAFE_PLAYER)).setTarget(player); + } + + private void navigateToNextPathNode() + { + if (this.currentPath != null && !this.currentPath.isFinished()) + { + Vec3d vec3d = this.currentPath.getCurrentPos(); + this.currentPath.incrementPathIndex(); + double d0 = vec3d.x; + double d1 = vec3d.z; + double d2; + + while (true) + { + d2 = vec3d.y + (double)(this.dragon.getRNG().nextFloat() * 20.0F); + + if (d2 >= vec3d.y) + { + break; + } + } + + this.targetLocation = new Vec3d(d0, d2, d1); + } + } + + public void onCrystalDestroyed(EntityEnderCrystal crystal, BlockPos pos, DamageSource dmgSrc, @Nullable EntityPlayer plyr) + { + if (plyr != null && !plyr.capabilities.disableDamage) + { + this.strafePlayer(plyr); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseHover.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseHover.java new file mode 100644 index 0000000..ca02cd0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseHover.java @@ -0,0 +1,62 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.math.Vec3d; + +public class PhaseHover extends PhaseBase +{ + private Vec3d targetLocation; + + public PhaseHover(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + if (this.targetLocation == null) + { + this.targetLocation = new Vec3d(this.dragon.posX, this.dragon.posY, this.dragon.posZ); + } + } + + public boolean getIsStationary() + { + return true; + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.targetLocation = null; + } + + /** + * Returns the maximum amount dragon may rise or fall during this phase + */ + public float getMaxRiseOrFall() + { + return 1.0F; + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + public PhaseList getType() + { + return PhaseList.HOVER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseLanding.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseLanding.java new file mode 100644 index 0000000..4f39530 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseLanding.java @@ -0,0 +1,95 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.gen.feature.WorldGenEndPodium; + +public class PhaseLanding extends PhaseBase +{ + private Vec3d targetLocation; + + public PhaseLanding(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Generates particle effects appropriate to the phase (or sometimes sounds). + * Called by dragon's onLivingUpdate. Only used when worldObj.isRemote. + */ + public void doClientRenderEffects() + { + Vec3d vec3d = this.dragon.getHeadLookVec(1.0F).normalize(); + vec3d.rotateYaw(-((float)Math.PI / 4F)); + double d0 = this.dragon.dragonPartHead.posX; + double d1 = this.dragon.dragonPartHead.posY + (double)(this.dragon.dragonPartHead.height / 2.0F); + double d2 = this.dragon.dragonPartHead.posZ; + + for (int i = 0; i < 8; ++i) + { + double d3 = d0 + this.dragon.getRNG().nextGaussian() / 2.0D; + double d4 = d1 + this.dragon.getRNG().nextGaussian() / 2.0D; + double d5 = d2 + this.dragon.getRNG().nextGaussian() / 2.0D; + this.dragon.world.spawnParticle(EnumParticleTypes.DRAGON_BREATH, d3, d4, d5, -vec3d.x * 0.07999999821186066D + this.dragon.motionX, -vec3d.y * 0.30000001192092896D + this.dragon.motionY, -vec3d.z * 0.07999999821186066D + this.dragon.motionZ); + vec3d.rotateYaw(0.19634955F); + } + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + if (this.targetLocation == null) + { + this.targetLocation = new Vec3d(this.dragon.world.getTopSolidOrLiquidBlock(WorldGenEndPodium.END_PODIUM_LOCATION)); + } + + if (this.targetLocation.squareDistanceTo(this.dragon.posX, this.dragon.posY, this.dragon.posZ) < 1.0D) + { + ((PhaseSittingFlaming)this.dragon.getPhaseManager().getPhase(PhaseList.SITTING_FLAMING)).resetFlameCount(); + this.dragon.getPhaseManager().setPhase(PhaseList.SITTING_SCANNING); + } + } + + /** + * Returns the maximum amount dragon may rise or fall during this phase + */ + public float getMaxRiseOrFall() + { + return 1.5F; + } + + public float getYawFactor() + { + float f = MathHelper.sqrt(this.dragon.motionX * this.dragon.motionX + this.dragon.motionZ * this.dragon.motionZ) + 1.0F; + float f1 = Math.min(f, 40.0F); + return f1 / f; + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.targetLocation = null; + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + public PhaseList getType() + { + return PhaseList.LANDING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.java new file mode 100644 index 0000000..30c84fc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseLandingApproach.java @@ -0,0 +1,118 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.gen.feature.WorldGenEndPodium; + +public class PhaseLandingApproach extends PhaseBase +{ + private Path currentPath; + private Vec3d targetLocation; + + public PhaseLandingApproach(EntityDragon dragonIn) + { + super(dragonIn); + } + + public PhaseList getType() + { + return PhaseList.LANDING_APPROACH; + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.currentPath = null; + this.targetLocation = null; + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + double d0 = this.targetLocation == null ? 0.0D : this.targetLocation.squareDistanceTo(this.dragon.posX, this.dragon.posY, this.dragon.posZ); + + if (d0 < 100.0D || d0 > 22500.0D || this.dragon.collidedHorizontally || this.dragon.collidedVertically) + { + this.findNewTarget(); + } + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + private void findNewTarget() + { + if (this.currentPath == null || this.currentPath.isFinished()) + { + int i = this.dragon.initPathPoints(); + BlockPos blockpos = this.dragon.world.getTopSolidOrLiquidBlock(WorldGenEndPodium.END_PODIUM_LOCATION); + EntityPlayer entityplayer = this.dragon.world.getNearestAttackablePlayer(blockpos, 128.0D, 128.0D); + int j; + + if (entityplayer != null) + { + Vec3d vec3d = (new Vec3d(entityplayer.posX, 0.0D, entityplayer.posZ)).normalize(); + j = this.dragon.getNearestPpIdx(-vec3d.x * 40.0D, 105.0D, -vec3d.z * 40.0D); + } + else + { + j = this.dragon.getNearestPpIdx(40.0D, (double)blockpos.getY(), 0.0D); + } + + PathPoint pathpoint = new PathPoint(blockpos.getX(), blockpos.getY(), blockpos.getZ()); + this.currentPath = this.dragon.findPath(i, j, pathpoint); + + if (this.currentPath != null) + { + this.currentPath.incrementPathIndex(); + } + } + + this.navigateToNextPathNode(); + + if (this.currentPath != null && this.currentPath.isFinished()) + { + this.dragon.getPhaseManager().setPhase(PhaseList.LANDING); + } + } + + private void navigateToNextPathNode() + { + if (this.currentPath != null && !this.currentPath.isFinished()) + { + Vec3d vec3d = this.currentPath.getCurrentPos(); + this.currentPath.incrementPathIndex(); + double d0 = vec3d.x; + double d1 = vec3d.z; + double d2; + + while (true) + { + d2 = vec3d.y + (double)(this.dragon.getRNG().nextFloat() * 20.0F); + + if (d2 >= vec3d.y) + { + break; + } + } + + this.targetLocation = new Vec3d(d0, d2, d1); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseList.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseList.java new file mode 100644 index 0000000..80f9828 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseList.java @@ -0,0 +1,81 @@ +package net.minecraft.entity.boss.dragon.phase; + +import java.lang.reflect.Constructor; +import java.util.Arrays; +import net.minecraft.entity.boss.EntityDragon; + +public class PhaseList +{ + private static PhaseList[] phases = new PhaseList[0]; + public static final PhaseList HOLDING_PATTERN = create(PhaseHoldingPattern.class, "HoldingPattern"); + public static final PhaseList STRAFE_PLAYER = create(PhaseStrafePlayer.class, "StrafePlayer"); + public static final PhaseList LANDING_APPROACH = create(PhaseLandingApproach.class, "LandingApproach"); + public static final PhaseList LANDING = create(PhaseLanding.class, "Landing"); + public static final PhaseList TAKEOFF = create(PhaseTakeoff.class, "Takeoff"); + public static final PhaseList SITTING_FLAMING = create(PhaseSittingFlaming.class, "SittingFlaming"); + public static final PhaseList SITTING_SCANNING = create(PhaseSittingScanning.class, "SittingScanning"); + public static final PhaseList SITTING_ATTACKING = create(PhaseSittingAttacking.class, "SittingAttacking"); + public static final PhaseList CHARGING_PLAYER = create(PhaseChargingPlayer.class, "ChargingPlayer"); + public static final PhaseList DYING = create(PhaseDying.class, "Dying"); + public static final PhaseList HOVER = create(PhaseHover.class, "Hover"); + private final Class clazz; + private final int id; + private final String name; + + private PhaseList(int idIn, Class clazzIn, String nameIn) + { + this.id = idIn; + this.clazz = clazzIn; + this.name = nameIn; + } + + public IPhase createPhase(EntityDragon dragon) + { + try + { + Constructor constructor = this.getConstructor(); + return constructor.newInstance(dragon); + } + catch (Exception exception) + { + throw new Error(exception); + } + } + + protected Constructor getConstructor() throws NoSuchMethodException + { + return this.clazz.getConstructor(EntityDragon.class); + } + + public int getId() + { + return this.id; + } + + public String toString() + { + return this.name + " (#" + this.id + ")"; + } + + /** + * Gets a phase by its ID. If the phase is out of bounds (negative or beyond the end of the phase array), returns + * {@link #HOLDING_PATTERN}. + */ + public static PhaseList getById(int idIn) + { + return idIn >= 0 && idIn < phases.length ? phases[idIn] : HOLDING_PATTERN; + } + + public static int getTotalPhases() + { + return phases.length; + } + + private static PhaseList create(Class phaseIn, String nameIn) + { + PhaseList phaselist = new PhaseList(phases.length, phaseIn, nameIn); + phases = (PhaseList[])Arrays.copyOf(phases, phases.length + 1); + phases[phaselist.getId()] = phaselist; + return phaselist; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseManager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseManager.java new file mode 100644 index 0000000..9492dc3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseManager.java @@ -0,0 +1,57 @@ +package net.minecraft.entity.boss.dragon.phase; + +import net.minecraft.entity.boss.EntityDragon; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PhaseManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final EntityDragon dragon; + private final IPhase[] phases = new IPhase[PhaseList.getTotalPhases()]; + private IPhase phase; + + public PhaseManager(EntityDragon dragonIn) + { + this.dragon = dragonIn; + this.setPhase(PhaseList.HOVER); + } + + public void setPhase(PhaseList phaseIn) + { + if (this.phase == null || phaseIn != this.phase.getType()) + { + if (this.phase != null) + { + this.phase.removeAreaEffect(); + } + + this.phase = this.getPhase(phaseIn); + + if (!this.dragon.world.isRemote) + { + this.dragon.getDataManager().set(EntityDragon.PHASE, Integer.valueOf(phaseIn.getId())); + } + + LOGGER.debug("Dragon is now in phase {} on the {}", phaseIn, this.dragon.world.isRemote ? "client" : "server"); + this.phase.initPhase(); + } + } + + public IPhase getCurrentPhase() + { + return this.phase; + } + + public T getPhase(PhaseList phaseIn) + { + int i = phaseIn.getId(); + + if (this.phases[i] == null) + { + this.phases[i] = phaseIn.createPhase(this.dragon); + } + + return (T)this.phases[i]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.java new file mode 100644 index 0000000..c840fd7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingAttacking.java @@ -0,0 +1,48 @@ +package net.minecraft.entity.boss.dragon.phase; + +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.init.SoundEvents; + +public class PhaseSittingAttacking extends PhaseSittingBase +{ + private int attackingTicks; + + public PhaseSittingAttacking(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Generates particle effects appropriate to the phase (or sometimes sounds). + * Called by dragon's onLivingUpdate. Only used when worldObj.isRemote. + */ + public void doClientRenderEffects() + { + this.dragon.world.playSound(this.dragon.posX, this.dragon.posY, this.dragon.posZ, SoundEvents.ENTITY_ENDERDRAGON_GROWL, this.dragon.getSoundCategory(), 2.5F, 0.8F + this.dragon.getRNG().nextFloat() * 0.3F, false); + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + if (this.attackingTicks++ >= 40) + { + this.dragon.getPhaseManager().setPhase(PhaseList.SITTING_FLAMING); + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.attackingTicks = 0; + } + + public PhaseList getType() + { + return PhaseList.SITTING_ATTACKING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.java new file mode 100644 index 0000000..9764637 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingBase.java @@ -0,0 +1,36 @@ +package net.minecraft.entity.boss.dragon.phase; + +import net.minecraft.entity.MultiPartEntityPart; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.util.DamageSource; + +public abstract class PhaseSittingBase extends PhaseBase +{ + public PhaseSittingBase(EntityDragon p_i46794_1_) + { + super(p_i46794_1_); + } + + public boolean getIsStationary() + { + return true; + } + + /** + * Normally, just returns damage. If dragon is sitting and src is an arrow, arrow is enflamed and zero damage + * returned. + */ + public float getAdjustedDamage(MultiPartEntityPart pt, DamageSource src, float damage) + { + if (src.getImmediateSource() instanceof EntityArrow) + { + src.getImmediateSource().setFire(1); + return 0.0F; + } + else + { + return super.getAdjustedDamage(pt, src, damage); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.java new file mode 100644 index 0000000..c486d01 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingFlaming.java @@ -0,0 +1,127 @@ +package net.minecraft.entity.boss.dragon.phase; + +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.init.MobEffects; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class PhaseSittingFlaming extends PhaseSittingBase +{ + private int flameTicks; + private int flameCount; + private EntityAreaEffectCloud areaEffectCloud; + + public PhaseSittingFlaming(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Generates particle effects appropriate to the phase (or sometimes sounds). + * Called by dragon's onLivingUpdate. Only used when worldObj.isRemote. + */ + public void doClientRenderEffects() + { + ++this.flameTicks; + + if (this.flameTicks % 2 == 0 && this.flameTicks < 10) + { + Vec3d vec3d = this.dragon.getHeadLookVec(1.0F).normalize(); + vec3d.rotateYaw(-((float)Math.PI / 4F)); + double d0 = this.dragon.dragonPartHead.posX; + double d1 = this.dragon.dragonPartHead.posY + (double)(this.dragon.dragonPartHead.height / 2.0F); + double d2 = this.dragon.dragonPartHead.posZ; + + for (int i = 0; i < 8; ++i) + { + double d3 = d0 + this.dragon.getRNG().nextGaussian() / 2.0D; + double d4 = d1 + this.dragon.getRNG().nextGaussian() / 2.0D; + double d5 = d2 + this.dragon.getRNG().nextGaussian() / 2.0D; + + for (int j = 0; j < 6; ++j) + { + this.dragon.world.spawnParticle(EnumParticleTypes.DRAGON_BREATH, d3, d4, d5, -vec3d.x * 0.07999999821186066D * (double)j, -vec3d.y * 0.6000000238418579D, -vec3d.z * 0.07999999821186066D * (double)j); + } + + vec3d.rotateYaw(0.19634955F); + } + } + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + ++this.flameTicks; + + if (this.flameTicks >= 200) + { + if (this.flameCount >= 4) + { + this.dragon.getPhaseManager().setPhase(PhaseList.TAKEOFF); + } + else + { + this.dragon.getPhaseManager().setPhase(PhaseList.SITTING_SCANNING); + } + } + else if (this.flameTicks == 10) + { + Vec3d vec3d = (new Vec3d(this.dragon.dragonPartHead.posX - this.dragon.posX, 0.0D, this.dragon.dragonPartHead.posZ - this.dragon.posZ)).normalize(); + float f = 5.0F; + double d0 = this.dragon.dragonPartHead.posX + vec3d.x * 5.0D / 2.0D; + double d1 = this.dragon.dragonPartHead.posZ + vec3d.z * 5.0D / 2.0D; + double d2 = this.dragon.dragonPartHead.posY + (double)(this.dragon.dragonPartHead.height / 2.0F); + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(d0), MathHelper.floor(d2), MathHelper.floor(d1)); + + while (this.dragon.world.isAirBlock(blockpos$mutableblockpos) && d2 >= 0) //Forge: Fix infinite loop if ground is missing. + { + --d2; + blockpos$mutableblockpos.setPos(MathHelper.floor(d0), MathHelper.floor(d2), MathHelper.floor(d1)); + } + + d2 = (double)(MathHelper.floor(d2) + 1); + this.areaEffectCloud = new EntityAreaEffectCloud(this.dragon.world, d0, d2, d1); + this.areaEffectCloud.setOwner(this.dragon); + this.areaEffectCloud.setRadius(5.0F); + this.areaEffectCloud.setDuration(200); + this.areaEffectCloud.setParticle(EnumParticleTypes.DRAGON_BREATH); + this.areaEffectCloud.addEffect(new PotionEffect(MobEffects.INSTANT_DAMAGE)); + this.dragon.world.spawnEntity(this.areaEffectCloud); + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.flameTicks = 0; + ++this.flameCount; + } + + public void removeAreaEffect() + { + if (this.areaEffectCloud != null) + { + this.areaEffectCloud.setDead(); + this.areaEffectCloud = null; + } + } + + public PhaseList getType() + { + return PhaseList.SITTING_FLAMING; + } + + public void resetFlameCount() + { + this.flameCount = 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.java new file mode 100644 index 0000000..c1cbf1b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseSittingScanning.java @@ -0,0 +1,83 @@ +package net.minecraft.entity.boss.dragon.phase; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; + +public class PhaseSittingScanning extends PhaseSittingBase +{ + private int scanningTime; + + public PhaseSittingScanning(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + ++this.scanningTime; + EntityLivingBase entitylivingbase = this.dragon.world.getNearestAttackablePlayer(this.dragon, 20.0D, 10.0D); + + if (entitylivingbase != null) + { + if (this.scanningTime > 25) + { + this.dragon.getPhaseManager().setPhase(PhaseList.SITTING_ATTACKING); + } + else + { + Vec3d vec3d = (new Vec3d(entitylivingbase.posX - this.dragon.posX, 0.0D, entitylivingbase.posZ - this.dragon.posZ)).normalize(); + Vec3d vec3d1 = (new Vec3d((double)MathHelper.sin(this.dragon.rotationYaw * 0.017453292F), 0.0D, (double)(-MathHelper.cos(this.dragon.rotationYaw * 0.017453292F)))).normalize(); + float f = (float)vec3d1.dotProduct(vec3d); + float f1 = (float)(Math.acos((double)f) * (180D / Math.PI)) + 0.5F; + + if (f1 < 0.0F || f1 > 10.0F) + { + double d0 = entitylivingbase.posX - this.dragon.dragonPartHead.posX; + double d1 = entitylivingbase.posZ - this.dragon.dragonPartHead.posZ; + double d2 = MathHelper.clamp(MathHelper.wrapDegrees(180.0D - MathHelper.atan2(d0, d1) * (180D / Math.PI) - (double)this.dragon.rotationYaw), -100.0D, 100.0D); + this.dragon.randomYawVelocity *= 0.8F; + float f2 = MathHelper.sqrt(d0 * d0 + d1 * d1) + 1.0F; + float f3 = f2; + + if (f2 > 40.0F) + { + f2 = 40.0F; + } + + this.dragon.randomYawVelocity = (float)((double)this.dragon.randomYawVelocity + d2 * (double)(0.7F / f2 / f3)); + this.dragon.rotationYaw += this.dragon.randomYawVelocity; + } + } + } + else if (this.scanningTime >= 100) + { + entitylivingbase = this.dragon.world.getNearestAttackablePlayer(this.dragon, 150.0D, 150.0D); + this.dragon.getPhaseManager().setPhase(PhaseList.TAKEOFF); + + if (entitylivingbase != null) + { + this.dragon.getPhaseManager().setPhase(PhaseList.CHARGING_PLAYER); + ((PhaseChargingPlayer)this.dragon.getPhaseManager().getPhase(PhaseList.CHARGING_PLAYER)).setTarget(new Vec3d(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ)); + } + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.scanningTime = 0; + } + + public PhaseList getType() + { + return PhaseList.SITTING_SCANNING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.java new file mode 100644 index 0000000..2bf61bf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseStrafePlayer.java @@ -0,0 +1,232 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PhaseStrafePlayer extends PhaseBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + private int fireballCharge; + private Path currentPath; + private Vec3d targetLocation; + private EntityLivingBase attackTarget; + private boolean holdingPatternClockwise; + + public PhaseStrafePlayer(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + if (this.attackTarget == null) + { + LOGGER.warn("Skipping player strafe phase because no player was found"); + this.dragon.getPhaseManager().setPhase(PhaseList.HOLDING_PATTERN); + } + else + { + if (this.currentPath != null && this.currentPath.isFinished()) + { + double d0 = this.attackTarget.posX; + double d1 = this.attackTarget.posZ; + double d2 = d0 - this.dragon.posX; + double d3 = d1 - this.dragon.posZ; + double d4 = (double)MathHelper.sqrt(d2 * d2 + d3 * d3); + double d5 = Math.min(0.4000000059604645D + d4 / 80.0D - 1.0D, 10.0D); + this.targetLocation = new Vec3d(d0, this.attackTarget.posY + d5, d1); + } + + double d12 = this.targetLocation == null ? 0.0D : this.targetLocation.squareDistanceTo(this.dragon.posX, this.dragon.posY, this.dragon.posZ); + + if (d12 < 100.0D || d12 > 22500.0D) + { + this.findNewTarget(); + } + + double d13 = 64.0D; + + if (this.attackTarget.getDistanceSq(this.dragon) < 4096.0D) + { + if (this.dragon.canEntityBeSeen(this.attackTarget)) + { + ++this.fireballCharge; + Vec3d vec3d1 = (new Vec3d(this.attackTarget.posX - this.dragon.posX, 0.0D, this.attackTarget.posZ - this.dragon.posZ)).normalize(); + Vec3d vec3d = (new Vec3d((double)MathHelper.sin(this.dragon.rotationYaw * 0.017453292F), 0.0D, (double)(-MathHelper.cos(this.dragon.rotationYaw * 0.017453292F)))).normalize(); + float f1 = (float)vec3d.dotProduct(vec3d1); + float f = (float)(Math.acos((double)f1) * (180D / Math.PI)); + f = f + 0.5F; + + if (this.fireballCharge >= 5 && f >= 0.0F && f < 10.0F) + { + double d14 = 1.0D; + Vec3d vec3d2 = this.dragon.getLook(1.0F); + double d6 = this.dragon.dragonPartHead.posX - vec3d2.x * 1.0D; + double d7 = this.dragon.dragonPartHead.posY + (double)(this.dragon.dragonPartHead.height / 2.0F) + 0.5D; + double d8 = this.dragon.dragonPartHead.posZ - vec3d2.z * 1.0D; + double d9 = this.attackTarget.posX - d6; + double d10 = this.attackTarget.posY + (double)(this.attackTarget.height / 2.0F) - (d7 + (double)(this.dragon.dragonPartHead.height / 2.0F)); + double d11 = this.attackTarget.posZ - d8; + this.dragon.world.playEvent((EntityPlayer)null, 1017, new BlockPos(this.dragon), 0); + EntityDragonFireball entitydragonfireball = new EntityDragonFireball(this.dragon.world, this.dragon, d9, d10, d11); + entitydragonfireball.setLocationAndAngles(d6, d7, d8, 0.0F, 0.0F); + this.dragon.world.spawnEntity(entitydragonfireball); + this.fireballCharge = 0; + + if (this.currentPath != null) + { + while (!this.currentPath.isFinished()) + { + this.currentPath.incrementPathIndex(); + } + } + + this.dragon.getPhaseManager().setPhase(PhaseList.HOLDING_PATTERN); + } + } + else if (this.fireballCharge > 0) + { + --this.fireballCharge; + } + } + else if (this.fireballCharge > 0) + { + --this.fireballCharge; + } + } + } + + private void findNewTarget() + { + if (this.currentPath == null || this.currentPath.isFinished()) + { + int i = this.dragon.initPathPoints(); + int j = i; + + if (this.dragon.getRNG().nextInt(8) == 0) + { + this.holdingPatternClockwise = !this.holdingPatternClockwise; + j = i + 6; + } + + if (this.holdingPatternClockwise) + { + ++j; + } + else + { + --j; + } + + if (this.dragon.getFightManager() != null && this.dragon.getFightManager().getNumAliveCrystals() > 0) + { + j = j % 12; + + if (j < 0) + { + j += 12; + } + } + else + { + j = j - 12; + j = j & 7; + j = j + 12; + } + + this.currentPath = this.dragon.findPath(i, j, (PathPoint)null); + + if (this.currentPath != null) + { + this.currentPath.incrementPathIndex(); + } + } + + this.navigateToNextPathNode(); + } + + private void navigateToNextPathNode() + { + if (this.currentPath != null && !this.currentPath.isFinished()) + { + Vec3d vec3d = this.currentPath.getCurrentPos(); + this.currentPath.incrementPathIndex(); + double d0 = vec3d.x; + double d2 = vec3d.z; + double d1; + + while (true) + { + d1 = vec3d.y + (double)(this.dragon.getRNG().nextFloat() * 20.0F); + + if (d1 >= vec3d.y) + { + break; + } + } + + this.targetLocation = new Vec3d(d0, d1, d2); + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.fireballCharge = 0; + this.targetLocation = null; + this.currentPath = null; + this.attackTarget = null; + } + + public void setTarget(EntityLivingBase p_188686_1_) + { + this.attackTarget = p_188686_1_; + int i = this.dragon.initPathPoints(); + int j = this.dragon.getNearestPpIdx(this.attackTarget.posX, this.attackTarget.posY, this.attackTarget.posZ); + int k = MathHelper.floor(this.attackTarget.posX); + int l = MathHelper.floor(this.attackTarget.posZ); + double d0 = (double)k - this.dragon.posX; + double d1 = (double)l - this.dragon.posZ; + double d2 = (double)MathHelper.sqrt(d0 * d0 + d1 * d1); + double d3 = Math.min(0.4000000059604645D + d2 / 80.0D - 1.0D, 10.0D); + int i1 = MathHelper.floor(this.attackTarget.posY + d3); + PathPoint pathpoint = new PathPoint(k, i1, l); + this.currentPath = this.dragon.findPath(i, j, pathpoint); + + if (this.currentPath != null) + { + this.currentPath.incrementPathIndex(); + this.navigateToNextPathNode(); + } + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + public PhaseList getType() + { + return PhaseList.STRAFE_PLAYER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.java new file mode 100644 index 0000000..abbcaff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/PhaseTakeoff.java @@ -0,0 +1,118 @@ +package net.minecraft.entity.boss.dragon.phase; + +import javax.annotation.Nullable; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.pathfinding.Path; +import net.minecraft.pathfinding.PathPoint; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.gen.feature.WorldGenEndPodium; + +public class PhaseTakeoff extends PhaseBase +{ + private boolean firstTick; + private Path currentPath; + private Vec3d targetLocation; + + public PhaseTakeoff(EntityDragon dragonIn) + { + super(dragonIn); + } + + /** + * Gives the phase a chance to update its status. + * Called by dragon's onLivingUpdate. Only used when !worldObj.isRemote. + */ + public void doLocalUpdate() + { + if (!this.firstTick && this.currentPath != null) + { + BlockPos blockpos = this.dragon.world.getTopSolidOrLiquidBlock(WorldGenEndPodium.END_PODIUM_LOCATION); + double d0 = this.dragon.getDistanceSqToCenter(blockpos); + + if (d0 > 100.0D) + { + this.dragon.getPhaseManager().setPhase(PhaseList.HOLDING_PATTERN); + } + } + else + { + this.firstTick = false; + this.findNewTarget(); + } + } + + /** + * Called when this phase is set to active + */ + public void initPhase() + { + this.firstTick = true; + this.currentPath = null; + this.targetLocation = null; + } + + private void findNewTarget() + { + int i = this.dragon.initPathPoints(); + Vec3d vec3d = this.dragon.getHeadLookVec(1.0F); + int j = this.dragon.getNearestPpIdx(-vec3d.x * 40.0D, 105.0D, -vec3d.z * 40.0D); + + if (this.dragon.getFightManager() != null && this.dragon.getFightManager().getNumAliveCrystals() > 0) + { + j = j % 12; + + if (j < 0) + { + j += 12; + } + } + else + { + j = j - 12; + j = j & 7; + j = j + 12; + } + + this.currentPath = this.dragon.findPath(i, j, (PathPoint)null); + + if (this.currentPath != null) + { + this.currentPath.incrementPathIndex(); + this.navigateToNextPathNode(); + } + } + + private void navigateToNextPathNode() + { + Vec3d vec3d = this.currentPath.getCurrentPos(); + this.currentPath.incrementPathIndex(); + double d0; + + while (true) + { + d0 = vec3d.y + (double)(this.dragon.getRNG().nextFloat() * 20.0F); + + if (d0 >= vec3d.y) + { + break; + } + } + + this.targetLocation = new Vec3d(vec3d.x, d0, vec3d.z); + } + + /** + * Returns the location the dragon is flying toward + */ + @Nullable + public Vec3d getTargetLocation() + { + return this.targetLocation; + } + + public PhaseList getType() + { + return PhaseList.TAKEOFF; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/package-info.java new file mode 100644 index 0000000..715c953 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/dragon/phase/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.boss.dragon.phase; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/boss/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/package-info.java new file mode 100644 index 0000000..a1c9dfd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/boss/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.boss; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/effect/EntityLightningBolt.java b/build/tmp/recompileMc/sources/net/minecraft/entity/effect/EntityLightningBolt.java new file mode 100644 index 0000000..818fb0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/effect/EntityLightningBolt.java @@ -0,0 +1,137 @@ +package net.minecraft.entity.effect; + +import java.util.List; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +public class EntityLightningBolt extends EntityWeatherEffect +{ + /** Declares which state the lightning bolt is in. Whether it's in the air, hit the ground, etc. */ + private int lightningState; + /** A random long that is used to change the vertex of the lightning rendered in RenderLightningBolt */ + public long boltVertex; + /** Determines the time before the EntityLightningBolt is destroyed. It is a random integer decremented over time. */ + private int boltLivingTime; + private final boolean effectOnly; + + public EntityLightningBolt(World worldIn, double x, double y, double z, boolean effectOnlyIn) + { + super(worldIn); + this.setLocationAndAngles(x, y, z, 0.0F, 0.0F); + this.lightningState = 2; + this.boltVertex = this.rand.nextLong(); + this.boltLivingTime = this.rand.nextInt(3) + 1; + this.effectOnly = effectOnlyIn; + BlockPos blockpos = new BlockPos(this); + + if (!effectOnlyIn && !worldIn.isRemote && worldIn.getGameRules().getBoolean("doFireTick") && (worldIn.getDifficulty() == EnumDifficulty.NORMAL || worldIn.getDifficulty() == EnumDifficulty.HARD) && worldIn.isAreaLoaded(blockpos, 10)) + { + if (worldIn.getBlockState(blockpos).getMaterial() == Material.AIR && Blocks.FIRE.canPlaceBlockAt(worldIn, blockpos)) + { + worldIn.setBlockState(blockpos, Blocks.FIRE.getDefaultState()); + } + + for (int i = 0; i < 4; ++i) + { + BlockPos blockpos1 = blockpos.add(this.rand.nextInt(3) - 1, this.rand.nextInt(3) - 1, this.rand.nextInt(3) - 1); + + if (worldIn.getBlockState(blockpos1).getMaterial() == Material.AIR && Blocks.FIRE.canPlaceBlockAt(worldIn, blockpos1)) + { + worldIn.setBlockState(blockpos1, Blocks.FIRE.getDefaultState()); + } + } + } + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.WEATHER; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.lightningState == 2) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_LIGHTNING_THUNDER, SoundCategory.WEATHER, 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F); + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_LIGHTNING_IMPACT, SoundCategory.WEATHER, 2.0F, 0.5F + this.rand.nextFloat() * 0.2F); + } + + --this.lightningState; + + if (this.lightningState < 0) + { + if (this.boltLivingTime == 0) + { + this.setDead(); + } + else if (this.lightningState < -this.rand.nextInt(10)) + { + --this.boltLivingTime; + this.lightningState = 1; + + if (!this.effectOnly && !this.world.isRemote) + { + this.boltVertex = this.rand.nextLong(); + BlockPos blockpos = new BlockPos(this); + + if (this.world.getGameRules().getBoolean("doFireTick") && this.world.isAreaLoaded(blockpos, 10) && this.world.getBlockState(blockpos).getMaterial() == Material.AIR && Blocks.FIRE.canPlaceBlockAt(this.world, blockpos)) + { + this.world.setBlockState(blockpos, Blocks.FIRE.getDefaultState()); + } + } + } + } + + if (this.lightningState >= 0) + { + if (this.world.isRemote) + { + this.world.setLastLightningBolt(2); + } + else if (!this.effectOnly) + { + double d0 = 3.0D; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, new AxisAlignedBB(this.posX - 3.0D, this.posY - 3.0D, this.posZ - 3.0D, this.posX + 3.0D, this.posY + 6.0D + 3.0D, this.posZ + 3.0D)); + + for (int i = 0; i < list.size(); ++i) + { + Entity entity = list.get(i); + if (!net.minecraftforge.event.ForgeEventFactory.onEntityStruckByLightning(entity, this)) + entity.onStruckByLightning(this); + } + } + } + } + + protected void entityInit() + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/effect/EntityWeatherEffect.java b/build/tmp/recompileMc/sources/net/minecraft/entity/effect/EntityWeatherEffect.java new file mode 100644 index 0000000..c0967cb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/effect/EntityWeatherEffect.java @@ -0,0 +1,12 @@ +package net.minecraft.entity.effect; + +import net.minecraft.entity.Entity; +import net.minecraft.world.World; + +public abstract class EntityWeatherEffect extends Entity +{ + public EntityWeatherEffect(World worldIn) + { + super(worldIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/effect/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/effect/package-info.java new file mode 100644 index 0000000..fac9aff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/effect/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.effect; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityArmorStand.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityArmorStand.java new file mode 100644 index 0000000..1caed93 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityArmorStand.java @@ -0,0 +1,1052 @@ +package net.minecraft.entity.item; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Rotations; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityArmorStand extends EntityLivingBase +{ + private static final Rotations DEFAULT_HEAD_ROTATION = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_BODY_ROTATION = new Rotations(0.0F, 0.0F, 0.0F); + private static final Rotations DEFAULT_LEFTARM_ROTATION = new Rotations(-10.0F, 0.0F, -10.0F); + private static final Rotations DEFAULT_RIGHTARM_ROTATION = new Rotations(-15.0F, 0.0F, 10.0F); + private static final Rotations DEFAULT_LEFTLEG_ROTATION = new Rotations(-1.0F, 0.0F, -1.0F); + private static final Rotations DEFAULT_RIGHTLEG_ROTATION = new Rotations(1.0F, 0.0F, 1.0F); + public static final DataParameter STATUS = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.BYTE); + public static final DataParameter HEAD_ROTATION = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.ROTATIONS); + public static final DataParameter BODY_ROTATION = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.ROTATIONS); + public static final DataParameter LEFT_ARM_ROTATION = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.ROTATIONS); + public static final DataParameter RIGHT_ARM_ROTATION = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.ROTATIONS); + public static final DataParameter LEFT_LEG_ROTATION = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.ROTATIONS); + public static final DataParameter RIGHT_LEG_ROTATION = EntityDataManager.createKey(EntityArmorStand.class, DataSerializers.ROTATIONS); + private static final Predicate IS_RIDEABLE_MINECART = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof EntityMinecart && ((EntityMinecart)p_apply_1_).canBeRidden(); + } + }; + private final NonNullList handItems; + private final NonNullList armorItems; + private boolean canInteract; + /** After punching the stand, the cooldown before you can punch it again without breaking it. */ + public long punchCooldown; + private int disabledSlots; + private boolean wasMarker; + private Rotations headRotation; + private Rotations bodyRotation; + private Rotations leftArmRotation; + private Rotations rightArmRotation; + private Rotations leftLegRotation; + private Rotations rightLegRotation; + + public EntityArmorStand(World worldIn) + { + super(worldIn); + this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); + this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); + this.headRotation = DEFAULT_HEAD_ROTATION; + this.bodyRotation = DEFAULT_BODY_ROTATION; + this.leftArmRotation = DEFAULT_LEFTARM_ROTATION; + this.rightArmRotation = DEFAULT_RIGHTARM_ROTATION; + this.leftLegRotation = DEFAULT_LEFTLEG_ROTATION; + this.rightLegRotation = DEFAULT_RIGHTLEG_ROTATION; + this.noClip = this.hasNoGravity(); + this.setSize(0.5F, 1.975F); + } + + public EntityArmorStand(World worldIn, double posX, double posY, double posZ) + { + this(worldIn); + this.setPosition(posX, posY, posZ); + } + + /** + * Sets the width and height of the entity. + */ + protected final void setSize(float width, float height) + { + double d0 = this.posX; + double d1 = this.posY; + double d2 = this.posZ; + float f = this.hasMarker() ? 0.0F : (this.isChild() ? 0.5F : 1.0F); + super.setSize(width * f, height * f); + this.setPosition(d0, d1, d2); + } + + /** + * Returns whether the entity is in a server world + */ + public boolean isServerWorld() + { + return super.isServerWorld() && !this.hasNoGravity(); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(STATUS, Byte.valueOf((byte)0)); + this.dataManager.register(HEAD_ROTATION, DEFAULT_HEAD_ROTATION); + this.dataManager.register(BODY_ROTATION, DEFAULT_BODY_ROTATION); + this.dataManager.register(LEFT_ARM_ROTATION, DEFAULT_LEFTARM_ROTATION); + this.dataManager.register(RIGHT_ARM_ROTATION, DEFAULT_RIGHTARM_ROTATION); + this.dataManager.register(LEFT_LEG_ROTATION, DEFAULT_LEFTLEG_ROTATION); + this.dataManager.register(RIGHT_LEG_ROTATION, DEFAULT_RIGHTLEG_ROTATION); + } + + public Iterable getHeldEquipment() + { + return this.handItems; + } + + public Iterable getArmorInventoryList() + { + return this.armorItems; + } + + public ItemStack getItemStackFromSlot(EntityEquipmentSlot slotIn) + { + switch (slotIn.getSlotType()) + { + case HAND: + return this.handItems.get(slotIn.getIndex()); + case ARMOR: + return this.armorItems.get(slotIn.getIndex()); + default: + return ItemStack.EMPTY; + } + } + + public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) + { + switch (slotIn.getSlotType()) + { + case HAND: + this.playEquipSound(stack); + this.handItems.set(slotIn.getIndex(), stack); + break; + case ARMOR: + this.playEquipSound(stack); + this.armorItems.set(slotIn.getIndex(), stack); + } + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + EntityEquipmentSlot entityequipmentslot; + + if (inventorySlot == 98) + { + entityequipmentslot = EntityEquipmentSlot.MAINHAND; + } + else if (inventorySlot == 99) + { + entityequipmentslot = EntityEquipmentSlot.OFFHAND; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.HEAD.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.HEAD; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.CHEST.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.CHEST; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.LEGS.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.LEGS; + } + else + { + if (inventorySlot != 100 + EntityEquipmentSlot.FEET.getIndex()) + { + return false; + } + + entityequipmentslot = EntityEquipmentSlot.FEET; + } + + if (!itemStackIn.isEmpty() && !EntityLiving.isItemStackInSlot(entityequipmentslot, itemStackIn) && entityequipmentslot != EntityEquipmentSlot.HEAD) + { + return false; + } + else + { + this.setItemStackToSlot(entityequipmentslot, itemStackIn); + return true; + } + } + + public static void registerFixesArmorStand(DataFixer fixer) + { + fixer.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(EntityArmorStand.class, new String[] {"ArmorItems", "HandItems"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + NBTTagList nbttaglist = new NBTTagList(); + + for (ItemStack itemstack : this.armorItems) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + if (!itemstack.isEmpty()) + { + itemstack.writeToNBT(nbttagcompound); + } + + nbttaglist.appendTag(nbttagcompound); + } + + compound.setTag("ArmorItems", nbttaglist); + NBTTagList nbttaglist1 = new NBTTagList(); + + for (ItemStack itemstack1 : this.handItems) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + if (!itemstack1.isEmpty()) + { + itemstack1.writeToNBT(nbttagcompound1); + } + + nbttaglist1.appendTag(nbttagcompound1); + } + + compound.setTag("HandItems", nbttaglist1); + compound.setBoolean("Invisible", this.isInvisible()); + compound.setBoolean("Small", this.isSmall()); + compound.setBoolean("ShowArms", this.getShowArms()); + compound.setInteger("DisabledSlots", this.disabledSlots); + compound.setBoolean("NoBasePlate", this.hasNoBasePlate()); + + if (this.hasMarker()) + { + compound.setBoolean("Marker", this.hasMarker()); + } + + compound.setTag("Pose", this.readPoseFromNBT()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("ArmorItems", 9)) + { + NBTTagList nbttaglist = compound.getTagList("ArmorItems", 10); + + for (int i = 0; i < this.armorItems.size(); ++i) + { + this.armorItems.set(i, new ItemStack(nbttaglist.getCompoundTagAt(i))); + } + } + + if (compound.hasKey("HandItems", 9)) + { + NBTTagList nbttaglist1 = compound.getTagList("HandItems", 10); + + for (int j = 0; j < this.handItems.size(); ++j) + { + this.handItems.set(j, new ItemStack(nbttaglist1.getCompoundTagAt(j))); + } + } + + this.setInvisible(compound.getBoolean("Invisible")); + this.setSmall(compound.getBoolean("Small")); + this.setShowArms(compound.getBoolean("ShowArms")); + this.disabledSlots = compound.getInteger("DisabledSlots"); + this.setNoBasePlate(compound.getBoolean("NoBasePlate")); + this.setMarker(compound.getBoolean("Marker")); + this.wasMarker = !this.hasMarker(); + this.noClip = this.hasNoGravity(); + NBTTagCompound nbttagcompound = compound.getCompoundTag("Pose"); + this.writePoseToNBT(nbttagcompound); + } + + /** + * Saves the pose to an NBTTagCompound. + */ + private void writePoseToNBT(NBTTagCompound tagCompound) + { + NBTTagList nbttaglist = tagCompound.getTagList("Head", 5); + this.setHeadRotation(nbttaglist.hasNoTags() ? DEFAULT_HEAD_ROTATION : new Rotations(nbttaglist)); + NBTTagList nbttaglist1 = tagCompound.getTagList("Body", 5); + this.setBodyRotation(nbttaglist1.hasNoTags() ? DEFAULT_BODY_ROTATION : new Rotations(nbttaglist1)); + NBTTagList nbttaglist2 = tagCompound.getTagList("LeftArm", 5); + this.setLeftArmRotation(nbttaglist2.hasNoTags() ? DEFAULT_LEFTARM_ROTATION : new Rotations(nbttaglist2)); + NBTTagList nbttaglist3 = tagCompound.getTagList("RightArm", 5); + this.setRightArmRotation(nbttaglist3.hasNoTags() ? DEFAULT_RIGHTARM_ROTATION : new Rotations(nbttaglist3)); + NBTTagList nbttaglist4 = tagCompound.getTagList("LeftLeg", 5); + this.setLeftLegRotation(nbttaglist4.hasNoTags() ? DEFAULT_LEFTLEG_ROTATION : new Rotations(nbttaglist4)); + NBTTagList nbttaglist5 = tagCompound.getTagList("RightLeg", 5); + this.setRightLegRotation(nbttaglist5.hasNoTags() ? DEFAULT_RIGHTLEG_ROTATION : new Rotations(nbttaglist5)); + } + + private NBTTagCompound readPoseFromNBT() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + if (!DEFAULT_HEAD_ROTATION.equals(this.headRotation)) + { + nbttagcompound.setTag("Head", this.headRotation.writeToNBT()); + } + + if (!DEFAULT_BODY_ROTATION.equals(this.bodyRotation)) + { + nbttagcompound.setTag("Body", this.bodyRotation.writeToNBT()); + } + + if (!DEFAULT_LEFTARM_ROTATION.equals(this.leftArmRotation)) + { + nbttagcompound.setTag("LeftArm", this.leftArmRotation.writeToNBT()); + } + + if (!DEFAULT_RIGHTARM_ROTATION.equals(this.rightArmRotation)) + { + nbttagcompound.setTag("RightArm", this.rightArmRotation.writeToNBT()); + } + + if (!DEFAULT_LEFTLEG_ROTATION.equals(this.leftLegRotation)) + { + nbttagcompound.setTag("LeftLeg", this.leftLegRotation.writeToNBT()); + } + + if (!DEFAULT_RIGHTLEG_ROTATION.equals(this.rightLegRotation)) + { + nbttagcompound.setTag("RightLeg", this.rightLegRotation.writeToNBT()); + } + + return nbttagcompound; + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return false; + } + + protected void collideWithEntity(Entity entityIn) + { + } + + protected void collideWithNearbyEntities() + { + List list = this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox(), IS_RIDEABLE_MINECART); + + for (int i = 0; i < list.size(); ++i) + { + Entity entity = list.get(i); + + if (this.getDistanceSq(entity) <= 0.2D) + { + entity.applyEntityCollision(this); + } + } + } + + /** + * Applies the given player interaction to this Entity. + */ + public EnumActionResult applyPlayerInteraction(EntityPlayer player, Vec3d vec, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!this.hasMarker() && itemstack.getItem() != Items.NAME_TAG) + { + if (!this.world.isRemote && !player.isSpectator()) + { + EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(itemstack); + + if (itemstack.isEmpty()) + { + EntityEquipmentSlot entityequipmentslot1 = this.getClickedSlot(vec); + EntityEquipmentSlot entityequipmentslot2 = this.isDisabled(entityequipmentslot1) ? entityequipmentslot : entityequipmentslot1; + + if (this.hasItemInSlot(entityequipmentslot2)) + { + this.swapItem(player, entityequipmentslot2, itemstack, hand); + } + } + else + { + if (this.isDisabled(entityequipmentslot)) + { + return EnumActionResult.FAIL; + } + + if (entityequipmentslot.getSlotType() == EntityEquipmentSlot.Type.HAND && !this.getShowArms()) + { + return EnumActionResult.FAIL; + } + + this.swapItem(player, entityequipmentslot, itemstack, hand); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.SUCCESS; + } + } + else + { + return EnumActionResult.PASS; + } + } + + protected EntityEquipmentSlot getClickedSlot(Vec3d p_190772_1_) + { + EntityEquipmentSlot entityequipmentslot = EntityEquipmentSlot.MAINHAND; + boolean flag = this.isSmall(); + double d0 = flag ? p_190772_1_.y * 2.0D : p_190772_1_.y; + EntityEquipmentSlot entityequipmentslot1 = EntityEquipmentSlot.FEET; + + if (d0 >= 0.1D && d0 < 0.1D + (flag ? 0.8D : 0.45D) && this.hasItemInSlot(entityequipmentslot1)) + { + entityequipmentslot = EntityEquipmentSlot.FEET; + } + else if (d0 >= 0.9D + (flag ? 0.3D : 0.0D) && d0 < 0.9D + (flag ? 1.0D : 0.7D) && this.hasItemInSlot(EntityEquipmentSlot.CHEST)) + { + entityequipmentslot = EntityEquipmentSlot.CHEST; + } + else if (d0 >= 0.4D && d0 < 0.4D + (flag ? 1.0D : 0.8D) && this.hasItemInSlot(EntityEquipmentSlot.LEGS)) + { + entityequipmentslot = EntityEquipmentSlot.LEGS; + } + else if (d0 >= 1.6D && this.hasItemInSlot(EntityEquipmentSlot.HEAD)) + { + entityequipmentslot = EntityEquipmentSlot.HEAD; + } + + return entityequipmentslot; + } + + private boolean isDisabled(EntityEquipmentSlot slotIn) + { + return (this.disabledSlots & 1 << slotIn.getSlotIndex()) != 0; + } + + private void swapItem(EntityPlayer player, EntityEquipmentSlot p_184795_2_, ItemStack p_184795_3_, EnumHand hand) + { + ItemStack itemstack = this.getItemStackFromSlot(p_184795_2_); + + if (itemstack.isEmpty() || (this.disabledSlots & 1 << p_184795_2_.getSlotIndex() + 8) == 0) + { + if (!itemstack.isEmpty() || (this.disabledSlots & 1 << p_184795_2_.getSlotIndex() + 16) == 0) + { + if (player.capabilities.isCreativeMode && itemstack.isEmpty() && !p_184795_3_.isEmpty()) + { + ItemStack itemstack2 = p_184795_3_.copy(); + itemstack2.setCount(1); + this.setItemStackToSlot(p_184795_2_, itemstack2); + } + else if (!p_184795_3_.isEmpty() && p_184795_3_.getCount() > 1) + { + if (itemstack.isEmpty()) + { + ItemStack itemstack1 = p_184795_3_.copy(); + itemstack1.setCount(1); + this.setItemStackToSlot(p_184795_2_, itemstack1); + p_184795_3_.shrink(1); + } + } + else + { + this.setItemStackToSlot(p_184795_2_, p_184795_3_); + player.setHeldItem(hand, itemstack); + } + } + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (!this.world.isRemote && !this.isDead) + { + if (DamageSource.OUT_OF_WORLD.equals(source)) + { + this.setDead(); + return false; + } + else if (!this.isEntityInvulnerable(source) && !this.canInteract && !this.hasMarker()) + { + if (source.isExplosion()) + { + this.dropContents(); + this.setDead(); + return false; + } + else if (DamageSource.IN_FIRE.equals(source)) + { + if (this.isBurning()) + { + this.damageArmorStand(0.15F); + } + else + { + this.setFire(5); + } + + return false; + } + else if (DamageSource.ON_FIRE.equals(source) && this.getHealth() > 0.5F) + { + this.damageArmorStand(4.0F); + return false; + } + else + { + boolean flag = "arrow".equals(source.getDamageType()); + boolean flag1 = "player".equals(source.getDamageType()); + + if (!flag1 && !flag) + { + return false; + } + else + { + if (source.getImmediateSource() instanceof EntityArrow) + { + source.getImmediateSource().setDead(); + } + + if (source.getTrueSource() instanceof EntityPlayer && !((EntityPlayer)source.getTrueSource()).capabilities.allowEdit) + { + return false; + } + else if (source.isCreativePlayer()) + { + this.playBrokenSound(); + this.playParticles(); + this.setDead(); + return false; + } + else + { + long i = this.world.getTotalWorldTime(); + + if (i - this.punchCooldown > 5L && !flag) + { + this.world.setEntityState(this, (byte)32); + this.punchCooldown = i; + } + else + { + this.dropBlock(); + this.playParticles(); + this.setDead(); + } + + return false; + } + } + } + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 32) + { + if (this.world.isRemote) + { + this.world.playSound(this.posX, this.posY, this.posZ, SoundEvents.ENTITY_ARMORSTAND_HIT, this.getSoundCategory(), 0.3F, 1.0F, false); + this.punchCooldown = this.world.getTotalWorldTime(); + } + } + else + { + super.handleStatusUpdate(id); + } + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; + + if (Double.isNaN(d0) || d0 == 0.0D) + { + d0 = 4.0D; + } + + d0 = d0 * 64.0D; + return distance < d0 * d0; + } + + private void playParticles() + { + if (this.world instanceof WorldServer) + { + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.BLOCK_DUST, this.posX, this.posY + (double)this.height / 1.5D, this.posZ, 10, (double)(this.width / 4.0F), (double)(this.height / 4.0F), (double)(this.width / 4.0F), 0.05D, Block.getStateId(Blocks.PLANKS.getDefaultState())); + } + } + + private void damageArmorStand(float damage) + { + float f = this.getHealth(); + f = f - damage; + + if (f <= 0.5F) + { + this.dropContents(); + this.setDead(); + } + else + { + this.setHealth(f); + } + } + + private void dropBlock() + { + Block.spawnAsEntity(this.world, new BlockPos(this), new ItemStack(Items.ARMOR_STAND)); + this.dropContents(); + } + + private void dropContents() + { + this.playBrokenSound(); + + for (int i = 0; i < this.handItems.size(); ++i) + { + ItemStack itemstack = this.handItems.get(i); + + if (!itemstack.isEmpty()) + { + Block.spawnAsEntity(this.world, (new BlockPos(this)).up(), itemstack); + this.handItems.set(i, ItemStack.EMPTY); + } + } + + for (int j = 0; j < this.armorItems.size(); ++j) + { + ItemStack itemstack1 = this.armorItems.get(j); + + if (!itemstack1.isEmpty()) + { + Block.spawnAsEntity(this.world, (new BlockPos(this)).up(), itemstack1); + this.armorItems.set(j, ItemStack.EMPTY); + } + } + } + + private void playBrokenSound() + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_ARMORSTAND_BREAK, this.getSoundCategory(), 1.0F, 1.0F); + } + + protected float updateDistance(float p_110146_1_, float p_110146_2_) + { + this.prevRenderYawOffset = this.prevRotationYaw; + this.renderYawOffset = this.rotationYaw; + return 0.0F; + } + + public float getEyeHeight() + { + return this.isChild() ? this.height * 0.5F : this.height * 0.9F; + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return this.hasMarker() ? 0.0D : 0.10000000149011612D; + } + + public void travel(float strafe, float vertical, float forward) + { + if (!this.hasNoGravity()) + { + super.travel(strafe, vertical, forward); + } + } + + /** + * Set the render yaw offset + */ + public void setRenderYawOffset(float offset) + { + this.prevRenderYawOffset = this.prevRotationYaw = offset; + this.prevRotationYawHead = this.rotationYawHead = offset; + } + + /** + * Sets the head's yaw rotation of the entity. + */ + public void setRotationYawHead(float rotation) + { + this.prevRenderYawOffset = this.prevRotationYaw = rotation; + this.prevRotationYawHead = this.rotationYawHead = rotation; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + Rotations rotations = (Rotations)this.dataManager.get(HEAD_ROTATION); + + if (!this.headRotation.equals(rotations)) + { + this.setHeadRotation(rotations); + } + + Rotations rotations1 = (Rotations)this.dataManager.get(BODY_ROTATION); + + if (!this.bodyRotation.equals(rotations1)) + { + this.setBodyRotation(rotations1); + } + + Rotations rotations2 = (Rotations)this.dataManager.get(LEFT_ARM_ROTATION); + + if (!this.leftArmRotation.equals(rotations2)) + { + this.setLeftArmRotation(rotations2); + } + + Rotations rotations3 = (Rotations)this.dataManager.get(RIGHT_ARM_ROTATION); + + if (!this.rightArmRotation.equals(rotations3)) + { + this.setRightArmRotation(rotations3); + } + + Rotations rotations4 = (Rotations)this.dataManager.get(LEFT_LEG_ROTATION); + + if (!this.leftLegRotation.equals(rotations4)) + { + this.setLeftLegRotation(rotations4); + } + + Rotations rotations5 = (Rotations)this.dataManager.get(RIGHT_LEG_ROTATION); + + if (!this.rightLegRotation.equals(rotations5)) + { + this.setRightLegRotation(rotations5); + } + + boolean flag = this.hasMarker(); + + if (this.wasMarker != flag) + { + this.updateBoundingBox(flag); + this.preventEntitySpawning = !flag; + this.wasMarker = flag; + } + } + + private void updateBoundingBox(boolean p_181550_1_) + { + if (p_181550_1_) + { + this.setSize(0.0F, 0.0F); + } + else + { + this.setSize(0.5F, 1.975F); + } + } + + /** + * Clears potion metadata values if the entity has no potion effects. Otherwise, updates potion effect color, + * ambience, and invisibility metadata values + */ + protected void updatePotionMetadata() + { + this.setInvisible(this.canInteract); + } + + public void setInvisible(boolean invisible) + { + this.canInteract = invisible; + super.setInvisible(invisible); + } + + /** + * If Animal, checks if the age timer is negative + */ + public boolean isChild() + { + return this.isSmall(); + } + + /** + * Called by the /kill command. + */ + public void onKillCommand() + { + this.setDead(); + } + + public boolean isImmuneToExplosions() + { + return this.isInvisible(); + } + + public EnumPushReaction getPushReaction() + { + return this.hasMarker() ? EnumPushReaction.IGNORE : super.getPushReaction(); + } + + private void setSmall(boolean small) + { + this.dataManager.set(STATUS, Byte.valueOf(this.setBit(((Byte)this.dataManager.get(STATUS)).byteValue(), 1, small))); + this.setSize(0.5F, 1.975F); + } + + public boolean isSmall() + { + return (((Byte)this.dataManager.get(STATUS)).byteValue() & 1) != 0; + } + + private void setShowArms(boolean showArms) + { + this.dataManager.set(STATUS, Byte.valueOf(this.setBit(((Byte)this.dataManager.get(STATUS)).byteValue(), 4, showArms))); + } + + public boolean getShowArms() + { + return (((Byte)this.dataManager.get(STATUS)).byteValue() & 4) != 0; + } + + private void setNoBasePlate(boolean noBasePlate) + { + this.dataManager.set(STATUS, Byte.valueOf(this.setBit(((Byte)this.dataManager.get(STATUS)).byteValue(), 8, noBasePlate))); + } + + public boolean hasNoBasePlate() + { + return (((Byte)this.dataManager.get(STATUS)).byteValue() & 8) != 0; + } + + /** + * Marker defines where if true, the size is 0 and will not be rendered or intractable. + */ + private void setMarker(boolean marker) + { + this.dataManager.set(STATUS, Byte.valueOf(this.setBit(((Byte)this.dataManager.get(STATUS)).byteValue(), 16, marker))); + this.setSize(0.5F, 1.975F); + } + + /** + * Gets whether the armor stand has marker enabled. If true, the armor stand's bounding box is set to zero and + * cannot be interacted with. + */ + public boolean hasMarker() + { + return (((Byte)this.dataManager.get(STATUS)).byteValue() & 16) != 0; + } + + private byte setBit(byte p_184797_1_, int p_184797_2_, boolean p_184797_3_) + { + if (p_184797_3_) + { + p_184797_1_ = (byte)(p_184797_1_ | p_184797_2_); + } + else + { + p_184797_1_ = (byte)(p_184797_1_ & ~p_184797_2_); + } + + return p_184797_1_; + } + + public void setHeadRotation(Rotations vec) + { + this.headRotation = vec; + this.dataManager.set(HEAD_ROTATION, vec); + } + + public void setBodyRotation(Rotations vec) + { + this.bodyRotation = vec; + this.dataManager.set(BODY_ROTATION, vec); + } + + public void setLeftArmRotation(Rotations vec) + { + this.leftArmRotation = vec; + this.dataManager.set(LEFT_ARM_ROTATION, vec); + } + + public void setRightArmRotation(Rotations vec) + { + this.rightArmRotation = vec; + this.dataManager.set(RIGHT_ARM_ROTATION, vec); + } + + public void setLeftLegRotation(Rotations vec) + { + this.leftLegRotation = vec; + this.dataManager.set(LEFT_LEG_ROTATION, vec); + } + + public void setRightLegRotation(Rotations vec) + { + this.rightLegRotation = vec; + this.dataManager.set(RIGHT_LEG_ROTATION, vec); + } + + public Rotations getHeadRotation() + { + return this.headRotation; + } + + public Rotations getBodyRotation() + { + return this.bodyRotation; + } + + @SideOnly(Side.CLIENT) + public Rotations getLeftArmRotation() + { + return this.leftArmRotation; + } + + @SideOnly(Side.CLIENT) + public Rotations getRightArmRotation() + { + return this.rightArmRotation; + } + + @SideOnly(Side.CLIENT) + public Rotations getLeftLegRotation() + { + return this.leftLegRotation; + } + + @SideOnly(Side.CLIENT) + public Rotations getRightLegRotation() + { + return this.rightLegRotation; + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return super.canBeCollidedWith() && !this.hasMarker(); + } + + public EnumHandSide getPrimaryHand() + { + return EnumHandSide.RIGHT; + } + + protected SoundEvent getFallSound(int heightIn) + { + return SoundEvents.ENTITY_ARMORSTAND_FALL; + } + + @Nullable + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ARMORSTAND_HIT; + } + + @Nullable + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ARMORSTAND_BREAK; + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + } + + /** + * Returns false if the entity is an armor stand. Returns true for all other entity living bases. + */ + public boolean canBeHitWithPotion() + { + return false; + } + + public void notifyDataManagerChange(DataParameter key) + { + if (STATUS.equals(key)) + { + this.setSize(0.5F, 1.975F); + } + + super.notifyDataManagerChange(key); + } + + public boolean attackable() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityBoat.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityBoat.java new file mode 100644 index 0000000..ab95568 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityBoat.java @@ -0,0 +1,1097 @@ +package net.minecraft.entity.item; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.passive.EntityWaterMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.client.CPacketSteerBoat; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityBoat extends Entity +{ + private static final DataParameter TIME_SINCE_HIT = EntityDataManager.createKey(EntityBoat.class, DataSerializers.VARINT); + private static final DataParameter FORWARD_DIRECTION = EntityDataManager.createKey(EntityBoat.class, DataSerializers.VARINT); + private static final DataParameter DAMAGE_TAKEN = EntityDataManager.createKey(EntityBoat.class, DataSerializers.FLOAT); + private static final DataParameter BOAT_TYPE = EntityDataManager.createKey(EntityBoat.class, DataSerializers.VARINT); + private static final DataParameter[] DATA_ID_PADDLE = new DataParameter[] {EntityDataManager.createKey(EntityBoat.class, DataSerializers.BOOLEAN), EntityDataManager.createKey(EntityBoat.class, DataSerializers.BOOLEAN)}; + private final float[] paddlePositions; + /** How much of current speed to retain. Value zero to one. */ + private float momentum; + private float outOfControlTicks; + private float deltaRotation; + private int lerpSteps; + private double lerpX; + private double lerpY; + private double lerpZ; + private double lerpYaw; + private double lerpPitch; + private boolean leftInputDown; + private boolean rightInputDown; + private boolean forwardInputDown; + private boolean backInputDown; + private double waterLevel; + /** + * How much the boat should glide given the slippery blocks it's currently gliding over. + * Halved every tick. + */ + private float boatGlide; + private EntityBoat.Status status; + private EntityBoat.Status previousStatus; + private double lastYd; + + public EntityBoat(World worldIn) + { + super(worldIn); + this.paddlePositions = new float[2]; + this.preventEntitySpawning = true; + this.setSize(1.375F, 0.5625F); + } + + public EntityBoat(World worldIn, double x, double y, double z) + { + this(worldIn); + this.setPosition(x, y, z); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = x; + this.prevPosY = y; + this.prevPosZ = z; + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + protected void entityInit() + { + this.dataManager.register(TIME_SINCE_HIT, Integer.valueOf(0)); + this.dataManager.register(FORWARD_DIRECTION, Integer.valueOf(1)); + this.dataManager.register(DAMAGE_TAKEN, Float.valueOf(0.0F)); + this.dataManager.register(BOAT_TYPE, Integer.valueOf(EntityBoat.Type.OAK.ordinal())); + + for (DataParameter dataparameter : DATA_ID_PADDLE) + { + this.dataManager.register(dataparameter, Boolean.valueOf(false)); + } + } + + /** + * Returns a boundingBox used to collide the entity with other entities and blocks. This enables the entity to be + * pushable on contact, like boats or minecarts. + */ + @Nullable + public AxisAlignedBB getCollisionBox(Entity entityIn) + { + return entityIn.canBePushed() ? entityIn.getEntityBoundingBox() : null; + } + + /** + * Returns the solid collision bounding box for this entity. Used to make (e.g.) boats solid. Return null if + * this entity is not solid. + * + * For general purposes, use {@link #width} and {@link #height}. + * + * @see getEntityBoundingBox + */ + @Nullable + public AxisAlignedBB getCollisionBoundingBox() + { + return this.getEntityBoundingBox(); + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return true; + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return -0.1D; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (!this.world.isRemote && !this.isDead) + { + if (source instanceof EntityDamageSourceIndirect && source.getTrueSource() != null && this.isPassenger(source.getTrueSource())) + { + return false; + } + else + { + this.setForwardDirection(-this.getForwardDirection()); + this.setTimeSinceHit(10); + this.setDamageTaken(this.getDamageTaken() + amount * 10.0F); + this.markVelocityChanged(); + boolean flag = source.getTrueSource() instanceof EntityPlayer && ((EntityPlayer)source.getTrueSource()).capabilities.isCreativeMode; + + if (flag || this.getDamageTaken() > 40.0F) + { + if (!flag && this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.dropItemWithOffset(this.getItemBoat(), 1, 0.0F); + } + + this.setDead(); + } + + return true; + } + } + else + { + return true; + } + } + + /** + * Applies a velocity to the entities, to push them away from eachother. + */ + public void applyEntityCollision(Entity entityIn) + { + if (entityIn instanceof EntityBoat) + { + if (entityIn.getEntityBoundingBox().minY < this.getEntityBoundingBox().maxY) + { + super.applyEntityCollision(entityIn); + } + } + else if (entityIn.getEntityBoundingBox().minY <= this.getEntityBoundingBox().minY) + { + super.applyEntityCollision(entityIn); + } + } + + public Item getItemBoat() + { + switch (this.getBoatType()) + { + case OAK: + default: + return Items.BOAT; + case SPRUCE: + return Items.SPRUCE_BOAT; + case BIRCH: + return Items.BIRCH_BOAT; + case JUNGLE: + return Items.JUNGLE_BOAT; + case ACACIA: + return Items.ACACIA_BOAT; + case DARK_OAK: + return Items.DARK_OAK_BOAT; + } + } + + /** + * Setups the entity to do the hurt animation. Only used by packets in multiplayer. + */ + @SideOnly(Side.CLIENT) + public void performHurtAnimation() + { + this.setForwardDirection(-this.getForwardDirection()); + this.setTimeSinceHit(10); + this.setDamageTaken(this.getDamageTaken() * 11.0F); + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.lerpX = x; + this.lerpY = y; + this.lerpZ = z; + this.lerpYaw = (double)yaw; + this.lerpPitch = (double)pitch; + this.lerpSteps = 10; + } + + /** + * Gets the horizontal facing direction of this Entity, adjusted to take specially-treated entity types into + * account. + */ + public EnumFacing getAdjustedHorizontalFacing() + { + return this.getHorizontalFacing().rotateY(); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.previousStatus = this.status; + this.status = this.getBoatStatus(); + + if (this.status != EntityBoat.Status.UNDER_WATER && this.status != EntityBoat.Status.UNDER_FLOWING_WATER) + { + this.outOfControlTicks = 0.0F; + } + else + { + ++this.outOfControlTicks; + } + + if (!this.world.isRemote && this.outOfControlTicks >= 60.0F) + { + this.removePassengers(); + } + + if (this.getTimeSinceHit() > 0) + { + this.setTimeSinceHit(this.getTimeSinceHit() - 1); + } + + if (this.getDamageTaken() > 0.0F) + { + this.setDamageTaken(this.getDamageTaken() - 1.0F); + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + super.onUpdate(); + this.tickLerp(); + + if (this.canPassengerSteer()) + { + if (this.getPassengers().isEmpty() || !(this.getPassengers().get(0) instanceof EntityPlayer)) + { + this.setPaddleState(false, false); + } + + this.updateMotion(); + + if (this.world.isRemote) + { + this.controlBoat(); + this.world.sendPacketToServer(new CPacketSteerBoat(this.getPaddleState(0), this.getPaddleState(1))); + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + else + { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + for (int i = 0; i <= 1; ++i) + { + if (this.getPaddleState(i)) + { + if (!this.isSilent() && (double)(this.paddlePositions[i] % ((float)Math.PI * 2F)) <= (Math.PI / 4D) && ((double)this.paddlePositions[i] + 0.39269909262657166D) % (Math.PI * 2D) >= (Math.PI / 4D)) + { + SoundEvent soundevent = this.getPaddleSound(); + + if (soundevent != null) + { + Vec3d vec3d = this.getLook(1.0F); + double d0 = i == 1 ? -vec3d.z : vec3d.z; + double d1 = i == 1 ? vec3d.x : -vec3d.x; + this.world.playSound((EntityPlayer)null, this.posX + d0, this.posY, this.posZ + d1, soundevent, this.getSoundCategory(), 1.0F, 0.8F + 0.4F * this.rand.nextFloat()); + } + } + + this.paddlePositions[i] = (float)((double)this.paddlePositions[i] + 0.39269909262657166D); + } + else + { + this.paddlePositions[i] = 0.0F; + } + } + + this.doBlockCollisions(); + List list = this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox().grow(0.20000000298023224D, -0.009999999776482582D, 0.20000000298023224D), EntitySelectors.getTeamCollisionPredicate(this)); + + if (!list.isEmpty()) + { + boolean flag = !this.world.isRemote && !(this.getControllingPassenger() instanceof EntityPlayer); + + for (int j = 0; j < list.size(); ++j) + { + Entity entity = list.get(j); + + if (!entity.isPassenger(this)) + { + if (flag && this.getPassengers().size() < 2 && !entity.isRiding() && entity.width < this.width && entity instanceof EntityLivingBase && !(entity instanceof EntityWaterMob) && !(entity instanceof EntityPlayer)) + { + entity.startRiding(this); + } + else + { + this.applyEntityCollision(entity); + } + } + } + } + } + + @Nullable + protected SoundEvent getPaddleSound() + { + switch (this.getBoatStatus()) + { + case IN_WATER: + case UNDER_WATER: + case UNDER_FLOWING_WATER: + return SoundEvents.ENTITY_BOAT_PADDLE_WATER; + case ON_LAND: + return SoundEvents.ENTITY_BOAT_PADDLE_LAND; + case IN_AIR: + default: + return null; + } + } + + private void tickLerp() + { + if (this.lerpSteps > 0 && !this.canPassengerSteer()) + { + double d0 = this.posX + (this.lerpX - this.posX) / (double)this.lerpSteps; + double d1 = this.posY + (this.lerpY - this.posY) / (double)this.lerpSteps; + double d2 = this.posZ + (this.lerpZ - this.posZ) / (double)this.lerpSteps; + double d3 = MathHelper.wrapDegrees(this.lerpYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + d3 / (double)this.lerpSteps); + this.rotationPitch = (float)((double)this.rotationPitch + (this.lerpPitch - (double)this.rotationPitch) / (double)this.lerpSteps); + --this.lerpSteps; + this.setPosition(d0, d1, d2); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + } + + public void setPaddleState(boolean left, boolean right) + { + this.dataManager.set(DATA_ID_PADDLE[0], Boolean.valueOf(left)); + this.dataManager.set(DATA_ID_PADDLE[1], Boolean.valueOf(right)); + } + + @SideOnly(Side.CLIENT) + public float getRowingTime(int side, float limbSwing) + { + return this.getPaddleState(side) ? (float)MathHelper.clampedLerp((double)this.paddlePositions[side] - 0.39269909262657166D, (double)this.paddlePositions[side], (double)limbSwing) : 0.0F; + } + + /** + * Determines whether the boat is in water, gliding on land, or in air + */ + private EntityBoat.Status getBoatStatus() + { + EntityBoat.Status entityboat$status = this.getUnderwaterStatus(); + + if (entityboat$status != null) + { + this.waterLevel = this.getEntityBoundingBox().maxY; + return entityboat$status; + } + else if (this.checkInWater()) + { + return EntityBoat.Status.IN_WATER; + } + else + { + float f = this.getBoatGlide(); + + if (f > 0.0F) + { + this.boatGlide = f; + return EntityBoat.Status.ON_LAND; + } + else + { + return EntityBoat.Status.IN_AIR; + } + } + } + + public float getWaterLevelAbove() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + int i = MathHelper.floor(axisalignedbb.minX); + int j = MathHelper.ceil(axisalignedbb.maxX); + int k = MathHelper.floor(axisalignedbb.maxY); + int l = MathHelper.ceil(axisalignedbb.maxY - this.lastYd); + int i1 = MathHelper.floor(axisalignedbb.minZ); + int j1 = MathHelper.ceil(axisalignedbb.maxZ); + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + try + { + label108: + + for (int k1 = k; k1 < l; ++k1) + { + float f = 0.0F; + int l1 = i; + + while (true) + { + if (l1 >= j) + { + if (f < 1.0F) + { + float f2 = (float)blockpos$pooledmutableblockpos.getY() + f; + return f2; + } + + break; + } + + for (int i2 = i1; i2 < j1; ++i2) + { + blockpos$pooledmutableblockpos.setPos(l1, k1, i2); + IBlockState iblockstate = this.world.getBlockState(blockpos$pooledmutableblockpos); + + if (iblockstate.getMaterial() == Material.WATER) + { + f = Math.max(f, BlockLiquid.getBlockLiquidHeight(iblockstate, this.world, blockpos$pooledmutableblockpos)); + } + + if (f >= 1.0F) + { + continue label108; + } + } + + ++l1; + } + } + + float f1 = (float)(l + 1); + return f1; + } + finally + { + blockpos$pooledmutableblockpos.release(); + } + } + + /** + * Decides how much the boat should be gliding on the land (based on any slippery blocks) + */ + public float getBoatGlide() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + AxisAlignedBB axisalignedbb1 = new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY - 0.001D, axisalignedbb.minZ, axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ); + int i = MathHelper.floor(axisalignedbb1.minX) - 1; + int j = MathHelper.ceil(axisalignedbb1.maxX) + 1; + int k = MathHelper.floor(axisalignedbb1.minY) - 1; + int l = MathHelper.ceil(axisalignedbb1.maxY) + 1; + int i1 = MathHelper.floor(axisalignedbb1.minZ) - 1; + int j1 = MathHelper.ceil(axisalignedbb1.maxZ) + 1; + List list = Lists.newArrayList(); + float f = 0.0F; + int k1 = 0; + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + try + { + for (int l1 = i; l1 < j; ++l1) + { + for (int i2 = i1; i2 < j1; ++i2) + { + int j2 = (l1 != i && l1 != j - 1 ? 0 : 1) + (i2 != i1 && i2 != j1 - 1 ? 0 : 1); + + if (j2 != 2) + { + for (int k2 = k; k2 < l; ++k2) + { + if (j2 <= 0 || k2 != k && k2 != l - 1) + { + blockpos$pooledmutableblockpos.setPos(l1, k2, i2); + IBlockState iblockstate = this.world.getBlockState(blockpos$pooledmutableblockpos); + iblockstate.addCollisionBoxToList(this.world, blockpos$pooledmutableblockpos, axisalignedbb1, list, this, false); + + if (!list.isEmpty()) + { + f += iblockstate.getBlock().getSlipperiness(iblockstate, this.world, blockpos$pooledmutableblockpos, this); + ++k1; + } + + list.clear(); + } + } + } + } + } + } + finally + { + blockpos$pooledmutableblockpos.release(); + } + + return f / (float)k1; + } + + private boolean checkInWater() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + int i = MathHelper.floor(axisalignedbb.minX); + int j = MathHelper.ceil(axisalignedbb.maxX); + int k = MathHelper.floor(axisalignedbb.minY); + int l = MathHelper.ceil(axisalignedbb.minY + 0.001D); + int i1 = MathHelper.floor(axisalignedbb.minZ); + int j1 = MathHelper.ceil(axisalignedbb.maxZ); + boolean flag = false; + this.waterLevel = Double.MIN_VALUE; + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + try + { + for (int k1 = i; k1 < j; ++k1) + { + for (int l1 = k; l1 < l; ++l1) + { + for (int i2 = i1; i2 < j1; ++i2) + { + blockpos$pooledmutableblockpos.setPos(k1, l1, i2); + IBlockState iblockstate = this.world.getBlockState(blockpos$pooledmutableblockpos); + + if (iblockstate.getMaterial() == Material.WATER) + { + float f = BlockLiquid.getLiquidHeight(iblockstate, this.world, blockpos$pooledmutableblockpos); + this.waterLevel = Math.max((double)f, this.waterLevel); + flag |= axisalignedbb.minY < (double)f; + } + } + } + } + } + finally + { + blockpos$pooledmutableblockpos.release(); + } + + return flag; + } + + /** + * Decides whether the boat is currently underwater. + */ + @Nullable + private EntityBoat.Status getUnderwaterStatus() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + double d0 = axisalignedbb.maxY + 0.001D; + int i = MathHelper.floor(axisalignedbb.minX); + int j = MathHelper.ceil(axisalignedbb.maxX); + int k = MathHelper.floor(axisalignedbb.maxY); + int l = MathHelper.ceil(d0); + int i1 = MathHelper.floor(axisalignedbb.minZ); + int j1 = MathHelper.ceil(axisalignedbb.maxZ); + boolean flag = false; + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + try + { + for (int k1 = i; k1 < j; ++k1) + { + for (int l1 = k; l1 < l; ++l1) + { + for (int i2 = i1; i2 < j1; ++i2) + { + blockpos$pooledmutableblockpos.setPos(k1, l1, i2); + IBlockState iblockstate = this.world.getBlockState(blockpos$pooledmutableblockpos); + + if (iblockstate.getMaterial() == Material.WATER && d0 < (double)BlockLiquid.getLiquidHeight(iblockstate, this.world, blockpos$pooledmutableblockpos)) + { + if (((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() != 0) + { + EntityBoat.Status entityboat$status = EntityBoat.Status.UNDER_FLOWING_WATER; + return entityboat$status; + } + + flag = true; + } + } + } + } + } + finally + { + blockpos$pooledmutableblockpos.release(); + } + + return flag ? EntityBoat.Status.UNDER_WATER : null; + } + + /** + * Update the boat's speed, based on momentum. + */ + private void updateMotion() + { + double d0 = -0.03999999910593033D; + double d1 = this.hasNoGravity() ? 0.0D : -0.03999999910593033D; + double d2 = 0.0D; + this.momentum = 0.05F; + + if (this.previousStatus == EntityBoat.Status.IN_AIR && this.status != EntityBoat.Status.IN_AIR && this.status != EntityBoat.Status.ON_LAND) + { + this.waterLevel = this.getEntityBoundingBox().minY + (double)this.height; + this.setPosition(this.posX, (double)(this.getWaterLevelAbove() - this.height) + 0.101D, this.posZ); + this.motionY = 0.0D; + this.lastYd = 0.0D; + this.status = EntityBoat.Status.IN_WATER; + } + else + { + if (this.status == EntityBoat.Status.IN_WATER) + { + d2 = (this.waterLevel - this.getEntityBoundingBox().minY) / (double)this.height; + this.momentum = 0.9F; + } + else if (this.status == EntityBoat.Status.UNDER_FLOWING_WATER) + { + d1 = -7.0E-4D; + this.momentum = 0.9F; + } + else if (this.status == EntityBoat.Status.UNDER_WATER) + { + d2 = 0.009999999776482582D; + this.momentum = 0.45F; + } + else if (this.status == EntityBoat.Status.IN_AIR) + { + this.momentum = 0.9F; + } + else if (this.status == EntityBoat.Status.ON_LAND) + { + this.momentum = this.boatGlide; + + if (this.getControllingPassenger() instanceof EntityPlayer) + { + this.boatGlide /= 2.0F; + } + } + + this.motionX *= (double)this.momentum; + this.motionZ *= (double)this.momentum; + this.deltaRotation *= this.momentum; + this.motionY += d1; + + if (d2 > 0.0D) + { + double d3 = 0.65D; + this.motionY += d2 * 0.06153846016296973D; + double d4 = 0.75D; + this.motionY *= 0.75D; + } + } + } + + private void controlBoat() + { + if (this.isBeingRidden()) + { + float f = 0.0F; + + if (this.leftInputDown) + { + this.deltaRotation += -1.0F; + } + + if (this.rightInputDown) + { + ++this.deltaRotation; + } + + if (this.rightInputDown != this.leftInputDown && !this.forwardInputDown && !this.backInputDown) + { + f += 0.005F; + } + + this.rotationYaw += this.deltaRotation; + + if (this.forwardInputDown) + { + f += 0.04F; + } + + if (this.backInputDown) + { + f -= 0.005F; + } + + this.motionX += (double)(MathHelper.sin(-this.rotationYaw * 0.017453292F) * f); + this.motionZ += (double)(MathHelper.cos(this.rotationYaw * 0.017453292F) * f); + this.setPaddleState(this.rightInputDown && !this.leftInputDown || this.forwardInputDown, this.leftInputDown && !this.rightInputDown || this.forwardInputDown); + } + } + + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + float f = 0.0F; + float f1 = (float)((this.isDead ? 0.009999999776482582D : this.getMountedYOffset()) + passenger.getYOffset()); + + if (this.getPassengers().size() > 1) + { + int i = this.getPassengers().indexOf(passenger); + + if (i == 0) + { + f = 0.2F; + } + else + { + f = -0.6F; + } + + if (passenger instanceof EntityAnimal) + { + f = (float)((double)f + 0.2D); + } + } + + Vec3d vec3d = (new Vec3d((double)f, 0.0D, 0.0D)).rotateYaw(-this.rotationYaw * 0.017453292F - ((float)Math.PI / 2F)); + passenger.setPosition(this.posX + vec3d.x, this.posY + (double)f1, this.posZ + vec3d.z); + passenger.rotationYaw += this.deltaRotation; + passenger.setRotationYawHead(passenger.getRotationYawHead() + this.deltaRotation); + this.applyYawToEntity(passenger); + + if (passenger instanceof EntityAnimal && this.getPassengers().size() > 1) + { + int j = passenger.getEntityId() % 2 == 0 ? 90 : 270; + passenger.setRenderYawOffset(((EntityAnimal)passenger).renderYawOffset + (float)j); + passenger.setRotationYawHead(passenger.getRotationYawHead() + (float)j); + } + } + } + + /** + * Applies this boat's yaw to the given entity. Used to update the orientation of its passenger. + */ + protected void applyYawToEntity(Entity entityToUpdate) + { + entityToUpdate.setRenderYawOffset(this.rotationYaw); + float f = MathHelper.wrapDegrees(entityToUpdate.rotationYaw - this.rotationYaw); + float f1 = MathHelper.clamp(f, -105.0F, 105.0F); + entityToUpdate.prevRotationYaw += f1 - f; + entityToUpdate.rotationYaw += f1 - f; + entityToUpdate.setRotationYawHead(entityToUpdate.rotationYaw); + } + + /** + * Applies this entity's orientation (pitch/yaw) to another entity. Used to update passenger orientation. + */ + @SideOnly(Side.CLIENT) + public void applyOrientationToEntity(Entity entityToUpdate) + { + this.applyYawToEntity(entityToUpdate); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + compound.setString("Type", this.getBoatType().getName()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + if (compound.hasKey("Type", 8)) + { + this.setBoatType(EntityBoat.Type.getTypeFromString(compound.getString("Type"))); + } + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (player.isSneaking()) + { + return false; + } + else + { + if (!this.world.isRemote && this.outOfControlTicks < 60.0F) + { + player.startRiding(this); + } + + return true; + } + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + this.lastYd = this.motionY; + + if (!this.isRiding()) + { + if (onGroundIn) + { + if (this.fallDistance > 3.0F) + { + if (this.status != EntityBoat.Status.ON_LAND) + { + this.fallDistance = 0.0F; + return; + } + + this.fall(this.fallDistance, 1.0F); + + if (!this.world.isRemote && !this.isDead) + { + this.setDead(); + + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + for (int i = 0; i < 3; ++i) + { + this.entityDropItem(new ItemStack(Item.getItemFromBlock(Blocks.PLANKS), 1, this.getBoatType().getMetadata()), 0.0F); + } + + for (int j = 0; j < 2; ++j) + { + this.dropItemWithOffset(Items.STICK, 1, 0.0F); + } + } + } + } + + this.fallDistance = 0.0F; + } + else if (this.world.getBlockState((new BlockPos(this)).down()).getMaterial() != Material.WATER && y < 0.0D) + { + this.fallDistance = (float)((double)this.fallDistance - y); + } + } + } + + public boolean getPaddleState(int side) + { + return ((Boolean)this.dataManager.get(DATA_ID_PADDLE[side])).booleanValue() && this.getControllingPassenger() != null; + } + + /** + * Sets the damage taken from the last hit. + */ + public void setDamageTaken(float damageTaken) + { + this.dataManager.set(DAMAGE_TAKEN, Float.valueOf(damageTaken)); + } + + /** + * Gets the damage taken from the last hit. + */ + public float getDamageTaken() + { + return ((Float)this.dataManager.get(DAMAGE_TAKEN)).floatValue(); + } + + /** + * Sets the time to count down from since the last time entity was hit. + */ + public void setTimeSinceHit(int timeSinceHit) + { + this.dataManager.set(TIME_SINCE_HIT, Integer.valueOf(timeSinceHit)); + } + + /** + * Gets the time since the last hit. + */ + public int getTimeSinceHit() + { + return ((Integer)this.dataManager.get(TIME_SINCE_HIT)).intValue(); + } + + /** + * Sets the forward direction of the entity. + */ + public void setForwardDirection(int forwardDirection) + { + this.dataManager.set(FORWARD_DIRECTION, Integer.valueOf(forwardDirection)); + } + + /** + * Gets the forward direction of the entity. + */ + public int getForwardDirection() + { + return ((Integer)this.dataManager.get(FORWARD_DIRECTION)).intValue(); + } + + public void setBoatType(EntityBoat.Type boatType) + { + this.dataManager.set(BOAT_TYPE, Integer.valueOf(boatType.ordinal())); + } + + public EntityBoat.Type getBoatType() + { + return EntityBoat.Type.byId(((Integer)this.dataManager.get(BOAT_TYPE)).intValue()); + } + + protected boolean canFitPassenger(Entity passenger) + { + return this.getPassengers().size() < 2; + } + + /** + * For vehicles, the first passenger is generally considered the controller and "drives" the vehicle. For example, + * Pigs, Horses, and Boats are generally "steered" by the controlling passenger. + */ + @Nullable + public Entity getControllingPassenger() + { + List list = this.getPassengers(); + return list.isEmpty() ? null : (Entity)list.get(0); + } + + @SideOnly(Side.CLIENT) + public void updateInputs(boolean p_184442_1_, boolean p_184442_2_, boolean p_184442_3_, boolean p_184442_4_) + { + this.leftInputDown = p_184442_1_; + this.rightInputDown = p_184442_2_; + this.forwardInputDown = p_184442_3_; + this.backInputDown = p_184442_4_; + } + + public static enum Status + { + IN_WATER, + UNDER_WATER, + UNDER_FLOWING_WATER, + ON_LAND, + IN_AIR; + } + + public static enum Type + { + OAK(BlockPlanks.EnumType.OAK.getMetadata(), "oak"), + SPRUCE(BlockPlanks.EnumType.SPRUCE.getMetadata(), "spruce"), + BIRCH(BlockPlanks.EnumType.BIRCH.getMetadata(), "birch"), + JUNGLE(BlockPlanks.EnumType.JUNGLE.getMetadata(), "jungle"), + ACACIA(BlockPlanks.EnumType.ACACIA.getMetadata(), "acacia"), + DARK_OAK(BlockPlanks.EnumType.DARK_OAK.getMetadata(), "dark_oak"); + + private final String name; + private final int metadata; + + private Type(int metadataIn, String nameIn) + { + this.name = nameIn; + this.metadata = metadataIn; + } + + public String getName() + { + return this.name; + } + + public int getMetadata() + { + return this.metadata; + } + + public String toString() + { + return this.name; + } + + /** + * Get a boat type by it's enum ordinal + */ + public static EntityBoat.Type byId(int id) + { + if (id < 0 || id >= values().length) + { + id = 0; + } + + return values()[id]; + } + + public static EntityBoat.Type getTypeFromString(String nameIn) + { + for (int i = 0; i < values().length; ++i) + { + if (values()[i].getName().equals(nameIn)) + { + return values()[i]; + } + } + + return values()[0]; + } + } + + // Forge: Fix MC-119811 by instantly completing lerp on board + @Override + protected void addPassenger(Entity passenger) + { + super.addPassenger(passenger); + if(this.canPassengerSteer() && this.lerpSteps > 0) + { + this.lerpSteps = 0; + this.posX = this.lerpX; + this.posY = this.lerpY; + this.posZ = this.lerpZ; + this.rotationYaw = (float)this.lerpYaw; + this.rotationPitch = (float)this.lerpPitch; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderCrystal.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderCrystal.java new file mode 100644 index 0000000..b8ff7c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderCrystal.java @@ -0,0 +1,201 @@ +package net.minecraft.entity.item; + +import com.google.common.base.Optional; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.end.DragonFightManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityEnderCrystal extends Entity +{ + private static final DataParameter> BEAM_TARGET = EntityDataManager.>createKey(EntityEnderCrystal.class, DataSerializers.OPTIONAL_BLOCK_POS); + private static final DataParameter SHOW_BOTTOM = EntityDataManager.createKey(EntityEnderCrystal.class, DataSerializers.BOOLEAN); + /** Used to create the rotation animation when rendering the crystal. */ + public int innerRotation; + + public EntityEnderCrystal(World worldIn) + { + super(worldIn); + this.preventEntitySpawning = true; + this.setSize(2.0F, 2.0F); + this.innerRotation = this.rand.nextInt(100000); + } + + public EntityEnderCrystal(World worldIn, double x, double y, double z) + { + this(worldIn); + this.setPosition(x, y, z); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + protected void entityInit() + { + this.getDataManager().register(BEAM_TARGET, Optional.absent()); + this.getDataManager().register(SHOW_BOTTOM, Boolean.valueOf(true)); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.innerRotation; + + if (!this.world.isRemote) + { + BlockPos blockpos = new BlockPos(this); + + if (this.world.provider instanceof WorldProviderEnd && this.world.getBlockState(blockpos).getBlock() != Blocks.FIRE) + { + this.world.setBlockState(blockpos, Blocks.FIRE.getDefaultState()); + } + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + if (this.getBeamTarget() != null) + { + compound.setTag("BeamTarget", NBTUtil.createPosTag(this.getBeamTarget())); + } + + compound.setBoolean("ShowBottom", this.shouldShowBottom()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + if (compound.hasKey("BeamTarget", 10)) + { + this.setBeamTarget(NBTUtil.getPosFromTag(compound.getCompoundTag("BeamTarget"))); + } + + if (compound.hasKey("ShowBottom", 1)) + { + this.setShowBottom(compound.getBoolean("ShowBottom")); + } + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return true; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (source.getTrueSource() instanceof EntityDragon) + { + return false; + } + else + { + if (!this.isDead && !this.world.isRemote) + { + this.setDead(); + + if (!this.world.isRemote) + { + if (!source.isExplosion()) + { + this.world.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 6.0F, true); + } + + this.onCrystalDestroyed(source); + } + } + + return true; + } + } + + /** + * Called by the /kill command. + */ + public void onKillCommand() + { + this.onCrystalDestroyed(DamageSource.GENERIC); + super.onKillCommand(); + } + + private void onCrystalDestroyed(DamageSource source) + { + if (this.world.provider instanceof WorldProviderEnd) + { + WorldProviderEnd worldproviderend = (WorldProviderEnd)this.world.provider; + DragonFightManager dragonfightmanager = worldproviderend.getDragonFightManager(); + + if (dragonfightmanager != null) + { + dragonfightmanager.onCrystalDestroyed(this, source); + } + } + } + + public void setBeamTarget(@Nullable BlockPos beamTarget) + { + this.getDataManager().set(BEAM_TARGET, Optional.fromNullable(beamTarget)); + } + + @Nullable + public BlockPos getBeamTarget() + { + return (BlockPos)((Optional)this.getDataManager().get(BEAM_TARGET)).orNull(); + } + + public void setShowBottom(boolean showBottom) + { + this.getDataManager().set(SHOW_BOTTOM, Boolean.valueOf(showBottom)); + } + + public boolean shouldShowBottom() + { + return ((Boolean)this.getDataManager().get(SHOW_BOTTOM)).booleanValue(); + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return super.isInRangeToRenderDist(distance) || this.getBeamTarget() != null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderEye.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderEye.java new file mode 100644 index 0000000..6116961 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderEye.java @@ -0,0 +1,243 @@ +package net.minecraft.entity.item; + +import net.minecraft.entity.Entity; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityEnderEye extends Entity +{ + /** 'x' location the eye should float towards. */ + private double targetX; + /** 'y' location the eye should float towards. */ + private double targetY; + /** 'z' location the eye should float towards. */ + private double targetZ; + private int despawnTimer; + private boolean shatterOrDrop; + + public EntityEnderEye(World worldIn) + { + super(worldIn); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() + { + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; + + if (Double.isNaN(d0)) + { + d0 = 4.0D; + } + + d0 = d0 * 64.0D; + return distance < d0 * d0; + } + + public EntityEnderEye(World worldIn, double x, double y, double z) + { + super(worldIn); + this.despawnTimer = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(x, y, z); + } + + public void moveTowards(BlockPos pos) + { + double d0 = (double)pos.getX(); + int i = pos.getY(); + double d1 = (double)pos.getZ(); + double d2 = d0 - this.posX; + double d3 = d1 - this.posZ; + float f = MathHelper.sqrt(d2 * d2 + d3 * d3); + + if (f > 12.0F) + { + this.targetX = this.posX + d2 / (double)f * 12.0D; + this.targetZ = this.posZ + d3 / (double)f * 12.0D; + this.targetY = this.posY + 8.0D; + } + else + { + this.targetX = d0; + this.targetY = (double)i; + this.targetZ = d1; + } + + this.despawnTimer = 0; + this.shatterOrDrop = this.rand.nextInt(5) > 0; + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + super.onUpdate(); + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + + for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + + if (!this.world.isRemote) + { + double d0 = this.targetX - this.posX; + double d1 = this.targetZ - this.posZ; + float f1 = (float)Math.sqrt(d0 * d0 + d1 * d1); + float f2 = (float)MathHelper.atan2(d1, d0); + double d2 = (double)f + (double)(f1 - f) * 0.0025D; + + if (f1 < 1.0F) + { + d2 *= 0.8D; + this.motionY *= 0.8D; + } + + this.motionX = Math.cos((double)f2) * d2; + this.motionZ = Math.sin((double)f2) * d2; + + if (this.posY < this.targetY) + { + this.motionY += (1.0D - this.motionY) * 0.014999999664723873D; + } + else + { + this.motionY += (-1.0D - this.motionY) * 0.014999999664723873D; + } + } + + float f3 = 0.25F; + + if (this.isInWater()) + { + for (int i = 0; i < 4; ++i) + { + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * 0.25D, this.posY - this.motionY * 0.25D, this.posZ - this.motionZ * 0.25D, this.motionX, this.motionY, this.motionZ); + } + } + else + { + this.world.spawnParticle(EnumParticleTypes.PORTAL, this.posX - this.motionX * 0.25D + this.rand.nextDouble() * 0.6D - 0.3D, this.posY - this.motionY * 0.25D - 0.5D, this.posZ - this.motionZ * 0.25D + this.rand.nextDouble() * 0.6D - 0.3D, this.motionX, this.motionY, this.motionZ); + } + + if (!this.world.isRemote) + { + this.setPosition(this.posX, this.posY, this.posZ); + ++this.despawnTimer; + + if (this.despawnTimer > 80 && !this.world.isRemote) + { + this.playSound(SoundEvents.ENTITY_ENDEREYE_DEATH, 1.0F, 1.0F); + this.setDead(); + + if (this.shatterOrDrop) + { + this.world.spawnEntity(new EntityItem(this.world, this.posX, this.posY, this.posZ, new ItemStack(Items.ENDER_EYE))); + } + else + { + this.world.playEvent(2003, new BlockPos(this), 0); + } + } + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + return 1.0F; + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderPearl.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderPearl.java new file mode 100644 index 0000000..0e0a5c8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityEnderPearl.java @@ -0,0 +1,163 @@ +package net.minecraft.entity.item; + +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityEndGateway; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityEnderPearl extends EntityThrowable +{ + private EntityLivingBase perlThrower; + + public EntityEnderPearl(World worldIn) + { + super(worldIn); + } + + public EntityEnderPearl(World worldIn, EntityLivingBase throwerIn) + { + super(worldIn, throwerIn); + this.perlThrower = throwerIn; + } + + @SideOnly(Side.CLIENT) + public EntityEnderPearl(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesEnderPearl(DataFixer fixer) + { + EntityThrowable.registerFixesThrowable(fixer, "ThrownEnderpearl"); + } + + /** + * Called when this EntityThrowable hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + EntityLivingBase entitylivingbase = this.getThrower(); + + if (result.entityHit != null) + { + if (result.entityHit == this.perlThrower) + { + return; + } + + result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, entitylivingbase), 0.0F); + } + + if (result.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = result.getBlockPos(); + TileEntity tileentity = this.world.getTileEntity(blockpos); + + if (tileentity instanceof TileEntityEndGateway) + { + TileEntityEndGateway tileentityendgateway = (TileEntityEndGateway)tileentity; + + if (entitylivingbase != null) + { + if (entitylivingbase instanceof EntityPlayerMP) + { + CriteriaTriggers.ENTER_BLOCK.trigger((EntityPlayerMP)entitylivingbase, this.world.getBlockState(blockpos)); + } + + tileentityendgateway.teleportEntity(entitylivingbase); + this.setDead(); + return; + } + + tileentityendgateway.teleportEntity(this); + return; + } + } + + for (int i = 0; i < 32; ++i) + { + this.world.spawnParticle(EnumParticleTypes.PORTAL, this.posX, this.posY + this.rand.nextDouble() * 2.0D, this.posZ, this.rand.nextGaussian(), 0.0D, this.rand.nextGaussian()); + } + + if (!this.world.isRemote) + { + if (entitylivingbase instanceof EntityPlayerMP) + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)entitylivingbase; + + if (entityplayermp.connection.getNetworkManager().isChannelOpen() && entityplayermp.world == this.world && !entityplayermp.isPlayerSleeping()) + { + net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(entityplayermp, this.posX, this.posY, this.posZ, 5.0F); + if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) + { // Don't indent to lower patch size + if (this.rand.nextFloat() < 0.05F && this.world.getGameRules().getBoolean("doMobSpawning")) + { + EntityEndermite entityendermite = new EntityEndermite(this.world); + entityendermite.setSpawnedByPlayer(true); + entityendermite.setLocationAndAngles(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, entitylivingbase.rotationYaw, entitylivingbase.rotationPitch); + this.world.spawnEntity(entityendermite); + } + + if (entitylivingbase.isRiding()) + { + entitylivingbase.dismountRidingEntity(); + } + + entitylivingbase.setPositionAndUpdate(event.getTargetX(), event.getTargetY(), event.getTargetZ()); + entitylivingbase.fallDistance = 0.0F; + entitylivingbase.attackEntityFrom(DamageSource.FALL, event.getAttackDamage()); + } + } + } + else if (entitylivingbase != null) + { + entitylivingbase.setPositionAndUpdate(this.posX, this.posY, this.posZ); + entitylivingbase.fallDistance = 0.0F; + } + + this.setDead(); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + EntityLivingBase entitylivingbase = this.getThrower(); + + if (entitylivingbase != null && entitylivingbase instanceof EntityPlayer && !entitylivingbase.isEntityAlive()) + { + this.setDead(); + } + else + { + super.onUpdate(); + } + } + + @Nullable + public Entity changeDimension(int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + if (this.thrower.dimension != dimensionIn) + { + this.thrower = null; + } + + return super.changeDimension(dimensionIn, teleporter); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityExpBottle.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityExpBottle.java new file mode 100644 index 0000000..3b9a159 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityExpBottle.java @@ -0,0 +1,62 @@ +package net.minecraft.entity.item; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.init.PotionTypes; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class EntityExpBottle extends EntityThrowable +{ + public EntityExpBottle(World worldIn) + { + super(worldIn); + } + + public EntityExpBottle(World worldIn, EntityLivingBase throwerIn) + { + super(worldIn, throwerIn); + } + + public EntityExpBottle(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesExpBottle(DataFixer fixer) + { + EntityThrowable.registerFixesThrowable(fixer, "ThrowableExpBottle"); + } + + /** + * Gets the amount of gravity to apply to the thrown entity with each tick. + */ + protected float getGravityVelocity() + { + return 0.07F; + } + + /** + * Called when this EntityThrowable hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (!this.world.isRemote) + { + this.world.playEvent(2002, new BlockPos(this), PotionUtils.getPotionColor(PotionTypes.WATER)); + int i = 3 + this.world.rand.nextInt(5) + this.world.rand.nextInt(5); + + while (i > 0) + { + int j = EntityXPOrb.getXPSplit(i); + i -= j; + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY, this.posZ, j)); + } + + this.setDead(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityFallingBlock.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityFallingBlock.java new file mode 100644 index 0000000..85b0f5c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityFallingBlock.java @@ -0,0 +1,402 @@ +package net.minecraft.entity.item; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockAnvil; +import net.minecraft.block.BlockFalling; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityFallingBlock extends Entity +{ + private IBlockState fallTile; + public int fallTime; + public boolean shouldDropItem = true; + private boolean dontSetBlock; + private boolean hurtEntities; + private int fallHurtMax = 40; + private float fallHurtAmount = 2.0F; + public NBTTagCompound tileEntityData; + protected static final DataParameter ORIGIN = EntityDataManager.createKey(EntityFallingBlock.class, DataSerializers.BLOCK_POS); + + public EntityFallingBlock(World worldIn) + { + super(worldIn); + } + + public EntityFallingBlock(World worldIn, double x, double y, double z, IBlockState fallingBlockState) + { + super(worldIn); + this.fallTile = fallingBlockState; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.setPosition(x, y + (double)((1.0F - this.height) / 2.0F), z); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = x; + this.prevPosY = y; + this.prevPosZ = z; + this.setOrigin(new BlockPos(this)); + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return false; + } + + public void setOrigin(BlockPos p_184530_1_) + { + this.dataManager.set(ORIGIN, p_184530_1_); + } + + @SideOnly(Side.CLIENT) + public BlockPos getOrigin() + { + return (BlockPos)this.dataManager.get(ORIGIN); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + protected void entityInit() + { + this.dataManager.register(ORIGIN, BlockPos.ORIGIN); + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + Block block = this.fallTile.getBlock(); + + if (this.fallTile.getMaterial() == Material.AIR) + { + this.setDead(); + } + else + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.fallTime++ == 0) + { + BlockPos blockpos = new BlockPos(this); + + if (this.world.getBlockState(blockpos).getBlock() == block) + { + this.world.setBlockToAir(blockpos); + } + else if (!this.world.isRemote) + { + this.setDead(); + return; + } + } + + if (!this.hasNoGravity()) + { + this.motionY -= 0.03999999910593033D; + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + + if (!this.world.isRemote) + { + BlockPos blockpos1 = new BlockPos(this); + boolean flag = this.fallTile.getBlock() == Blocks.CONCRETE_POWDER; + boolean flag1 = flag && this.world.getBlockState(blockpos1).getMaterial() == Material.WATER; + double d0 = this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ; + + if (flag && d0 > 1.0D) + { + RayTraceResult raytraceresult = this.world.rayTraceBlocks(new Vec3d(this.prevPosX, this.prevPosY, this.prevPosZ), new Vec3d(this.posX, this.posY, this.posZ), true); + + if (raytraceresult != null && this.world.getBlockState(raytraceresult.getBlockPos()).getMaterial() == Material.WATER) + { + blockpos1 = raytraceresult.getBlockPos(); + flag1 = true; + } + } + + if (!this.onGround && !flag1) + { + if (this.fallTime > 100 && !this.world.isRemote && (blockpos1.getY() < 1 || blockpos1.getY() > 256) || this.fallTime > 600) + { + if (this.shouldDropItem && this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.entityDropItem(new ItemStack(block, 1, block.damageDropped(this.fallTile)), 0.0F); + } + + this.setDead(); + } + } + else + { + IBlockState iblockstate = this.world.getBlockState(blockpos1); + + if (this.world.isAirBlock(new BlockPos(this.posX, this.posY - 0.009999999776482582D, this.posZ))) //Forge: Don't indent below. + if (!flag1 && BlockFalling.canFallThrough(this.world.getBlockState(new BlockPos(this.posX, this.posY - 0.009999999776482582D, this.posZ)))) + { + this.onGround = false; + return; + } + + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + this.motionY *= -0.5D; + + if (iblockstate.getBlock() != Blocks.PISTON_EXTENSION) + { + this.setDead(); + + if (!this.dontSetBlock) + { + if (this.world.mayPlace(block, blockpos1, true, EnumFacing.UP, (Entity)null) && (flag1 || !BlockFalling.canFallThrough(this.world.getBlockState(blockpos1.down()))) && this.world.setBlockState(blockpos1, this.fallTile, 3)) + { + if (block instanceof BlockFalling) + { + ((BlockFalling)block).onEndFalling(this.world, blockpos1, this.fallTile, iblockstate); + } + + if (this.tileEntityData != null && block.hasTileEntity(this.fallTile)) + { + TileEntity tileentity = this.world.getTileEntity(blockpos1); + + if (tileentity != null) + { + NBTTagCompound nbttagcompound = tileentity.writeToNBT(new NBTTagCompound()); + + for (String s : this.tileEntityData.getKeySet()) + { + NBTBase nbtbase = this.tileEntityData.getTag(s); + + if (!"x".equals(s) && !"y".equals(s) && !"z".equals(s)) + { + nbttagcompound.setTag(s, nbtbase.copy()); + } + } + + tileentity.readFromNBT(nbttagcompound); + tileentity.markDirty(); + } + } + } + else if (this.shouldDropItem && this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.entityDropItem(new ItemStack(block, 1, block.damageDropped(this.fallTile)), 0.0F); + } + } + else if (block instanceof BlockFalling) + { + ((BlockFalling)block).onBroken(this.world, blockpos1); + } + } + } + } + + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + } + } + + public void fall(float distance, float damageMultiplier) + { + Block block = this.fallTile.getBlock(); + + if (this.hurtEntities) + { + int i = MathHelper.ceil(distance - 1.0F); + + if (i > 0) + { + List list = Lists.newArrayList(this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox())); + boolean flag = block == Blocks.ANVIL; + DamageSource damagesource = flag ? DamageSource.ANVIL : DamageSource.FALLING_BLOCK; + + for (Entity entity : list) + { + entity.attackEntityFrom(damagesource, (float)Math.min(MathHelper.floor((float)i * this.fallHurtAmount), this.fallHurtMax)); + } + + if (flag && (double)this.rand.nextFloat() < 0.05000000074505806D + (double)i * 0.05D) + { + int j = ((Integer)this.fallTile.getValue(BlockAnvil.DAMAGE)).intValue(); + ++j; + + if (j > 2) + { + this.dontSetBlock = true; + } + else + { + this.fallTile = this.fallTile.withProperty(BlockAnvil.DAMAGE, Integer.valueOf(j)); + } + } + } + } + } + + public static void registerFixesFallingBlock(DataFixer fixer) + { + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + Block block = this.fallTile != null ? this.fallTile.getBlock() : Blocks.AIR; + ResourceLocation resourcelocation = Block.REGISTRY.getNameForObject(block); + compound.setString("Block", resourcelocation == null ? "" : resourcelocation.toString()); + compound.setByte("Data", (byte)block.getMetaFromState(this.fallTile)); + compound.setInteger("Time", this.fallTime); + compound.setBoolean("DropItem", this.shouldDropItem); + compound.setBoolean("HurtEntities", this.hurtEntities); + compound.setFloat("FallHurtAmount", this.fallHurtAmount); + compound.setInteger("FallHurtMax", this.fallHurtMax); + + if (this.tileEntityData != null) + { + compound.setTag("TileEntityData", this.tileEntityData); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + int i = compound.getByte("Data") & 255; + + if (compound.hasKey("Block", 8)) + { + this.fallTile = Block.getBlockFromName(compound.getString("Block")).getStateFromMeta(i); + } + else if (compound.hasKey("TileID", 99)) + { + this.fallTile = Block.getBlockById(compound.getInteger("TileID")).getStateFromMeta(i); + } + else + { + this.fallTile = Block.getBlockById(compound.getByte("Tile") & 255).getStateFromMeta(i); + } + + this.fallTime = compound.getInteger("Time"); + Block block = this.fallTile.getBlock(); + + if (compound.hasKey("HurtEntities", 99)) + { + this.hurtEntities = compound.getBoolean("HurtEntities"); + this.fallHurtAmount = compound.getFloat("FallHurtAmount"); + this.fallHurtMax = compound.getInteger("FallHurtMax"); + } + else if (block == Blocks.ANVIL) + { + this.hurtEntities = true; + } + + if (compound.hasKey("DropItem", 99)) + { + this.shouldDropItem = compound.getBoolean("DropItem"); + } + + if (compound.hasKey("TileEntityData", 10)) + { + this.tileEntityData = compound.getCompoundTag("TileEntityData"); + } + + if (block == null || block.getDefaultState().getMaterial() == Material.AIR) + { + this.fallTile = Blocks.SAND.getDefaultState(); + } + } + + public void setHurtEntities(boolean p_145806_1_) + { + this.hurtEntities = p_145806_1_; + } + + public void addEntityCrashInfo(CrashReportCategory category) + { + super.addEntityCrashInfo(category); + + if (this.fallTile != null) + { + Block block = this.fallTile.getBlock(); + category.addCrashSection("Immitating block ID", Integer.valueOf(Block.getIdFromBlock(block))); + category.addCrashSection("Immitating block data", Integer.valueOf(block.getMetaFromState(this.fallTile))); + } + } + + @SideOnly(Side.CLIENT) + public World getWorldObj() + { + return this.world; + } + + /** + * Return whether this entity should be rendered as on fire. + */ + @SideOnly(Side.CLIENT) + public boolean canRenderOnFire() + { + return false; + } + + @Nullable + public IBlockState getBlock() + { + return this.fallTile; + } + + public boolean ignoreItemEntityData() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityFireworkRocket.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityFireworkRocket.java new file mode 100644 index 0000000..7026cd2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityFireworkRocket.java @@ -0,0 +1,324 @@ +package net.minecraft.entity.item; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityFireworkRocket extends Entity +{ + private static final DataParameter FIREWORK_ITEM = EntityDataManager.createKey(EntityFireworkRocket.class, DataSerializers.ITEM_STACK); + private static final DataParameter BOOSTED_ENTITY_ID = EntityDataManager.createKey(EntityFireworkRocket.class, DataSerializers.VARINT); + /** The age of the firework in ticks. */ + private int fireworkAge; + /** The lifetime of the firework in ticks. When the age reaches the lifetime the firework explodes. */ + private int lifetime; + private EntityLivingBase boostedEntity; + + public EntityFireworkRocket(World worldIn) + { + super(worldIn); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() + { + this.dataManager.register(FIREWORK_ITEM, ItemStack.EMPTY); + this.dataManager.register(BOOSTED_ENTITY_ID, Integer.valueOf(0)); + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 4096.0D && !this.isAttachedToEntity(); + } + + @SideOnly(Side.CLIENT) + public boolean isInRangeToRender3d(double x, double y, double z) + { + return super.isInRangeToRender3d(x, y, z) && !this.isAttachedToEntity(); + } + + public EntityFireworkRocket(World worldIn, double x, double y, double z, ItemStack givenItem) + { + super(worldIn); + this.fireworkAge = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(x, y, z); + int i = 1; + + if (!givenItem.isEmpty() && givenItem.hasTagCompound()) + { + this.dataManager.set(FIREWORK_ITEM, givenItem.copy()); + NBTTagCompound nbttagcompound = givenItem.getTagCompound(); + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("Fireworks"); + i += nbttagcompound1.getByte("Flight"); + } + + this.motionX = this.rand.nextGaussian() * 0.001D; + this.motionZ = this.rand.nextGaussian() * 0.001D; + this.motionY = 0.05D; + this.lifetime = 10 * i + this.rand.nextInt(6) + this.rand.nextInt(7); + } + + public EntityFireworkRocket(World p_i47367_1_, ItemStack p_i47367_2_, EntityLivingBase p_i47367_3_) + { + this(p_i47367_1_, p_i47367_3_.posX, p_i47367_3_.posY, p_i47367_3_.posZ, p_i47367_2_); + this.dataManager.set(BOOSTED_ENTITY_ID, Integer.valueOf(p_i47367_3_.getEntityId())); + this.boostedEntity = p_i47367_3_; + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + super.onUpdate(); + + if (this.isAttachedToEntity()) + { + if (this.boostedEntity == null) + { + Entity entity = this.world.getEntityByID(((Integer)this.dataManager.get(BOOSTED_ENTITY_ID)).intValue()); + + if (entity instanceof EntityLivingBase) + { + this.boostedEntity = (EntityLivingBase)entity; + } + } + + if (this.boostedEntity != null) + { + if (this.boostedEntity.isElytraFlying()) + { + Vec3d vec3d = this.boostedEntity.getLookVec(); + double d0 = 1.5D; + double d1 = 0.1D; + this.boostedEntity.motionX += vec3d.x * 0.1D + (vec3d.x * 1.5D - this.boostedEntity.motionX) * 0.5D; + this.boostedEntity.motionY += vec3d.y * 0.1D + (vec3d.y * 1.5D - this.boostedEntity.motionY) * 0.5D; + this.boostedEntity.motionZ += vec3d.z * 0.1D + (vec3d.z * 1.5D - this.boostedEntity.motionZ) * 0.5D; + } + + this.setPosition(this.boostedEntity.posX, this.boostedEntity.posY, this.boostedEntity.posZ); + this.motionX = this.boostedEntity.motionX; + this.motionY = this.boostedEntity.motionY; + this.motionZ = this.boostedEntity.motionZ; + } + } + else + { + this.motionX *= 1.15D; + this.motionZ *= 1.15D; + this.motionY += 0.04D; + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + + for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + + if (this.fireworkAge == 0 && !this.isSilent()) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_FIREWORK_LAUNCH, SoundCategory.AMBIENT, 3.0F, 1.0F); + } + + ++this.fireworkAge; + + if (this.world.isRemote && this.fireworkAge % 2 < 2) + { + this.world.spawnParticle(EnumParticleTypes.FIREWORKS_SPARK, this.posX, this.posY - 0.3D, this.posZ, this.rand.nextGaussian() * 0.05D, -this.motionY * 0.5D, this.rand.nextGaussian() * 0.05D); + } + + if (!this.world.isRemote && this.fireworkAge > this.lifetime) + { + this.world.setEntityState(this, (byte)17); + this.dealExplosionDamage(); + this.setDead(); + } + } + + private void dealExplosionDamage() + { + float f = 0.0F; + ItemStack itemstack = (ItemStack)this.dataManager.get(FIREWORK_ITEM); + NBTTagCompound nbttagcompound = itemstack.isEmpty() ? null : itemstack.getSubCompound("Fireworks"); + NBTTagList nbttaglist = nbttagcompound != null ? nbttagcompound.getTagList("Explosions", 10) : null; + + if (nbttaglist != null && !nbttaglist.hasNoTags()) + { + f = (float)(5 + nbttaglist.tagCount() * 2); + } + + if (f > 0.0F) + { + if (this.boostedEntity != null) + { + this.boostedEntity.attackEntityFrom(DamageSource.FIREWORKS, (float)(5 + nbttaglist.tagCount() * 2)); + } + + double d0 = 5.0D; + Vec3d vec3d = new Vec3d(this.posX, this.posY, this.posZ); + + for (EntityLivingBase entitylivingbase : this.world.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox().grow(5.0D))) + { + if (entitylivingbase != this.boostedEntity && this.getDistanceSq(entitylivingbase) <= 25.0D) + { + boolean flag = false; + + for (int i = 0; i < 2; ++i) + { + RayTraceResult raytraceresult = this.world.rayTraceBlocks(vec3d, new Vec3d(entitylivingbase.posX, entitylivingbase.posY + (double)entitylivingbase.height * 0.5D * (double)i, entitylivingbase.posZ), false, true, false); + + if (raytraceresult == null || raytraceresult.typeOfHit == RayTraceResult.Type.MISS) + { + flag = true; + break; + } + } + + if (flag) + { + float f1 = f * (float)Math.sqrt((5.0D - (double)this.getDistance(entitylivingbase)) / 5.0D); + entitylivingbase.attackEntityFrom(DamageSource.FIREWORKS, f1); + } + } + } + } + } + + public boolean isAttachedToEntity() + { + return ((Integer)this.dataManager.get(BOOSTED_ENTITY_ID)).intValue() > 0; + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 17 && this.world.isRemote) + { + ItemStack itemstack = (ItemStack)this.dataManager.get(FIREWORK_ITEM); + NBTTagCompound nbttagcompound = itemstack.isEmpty() ? null : itemstack.getSubCompound("Fireworks"); + this.world.makeFireworks(this.posX, this.posY, this.posZ, this.motionX, this.motionY, this.motionZ, nbttagcompound); + } + + super.handleStatusUpdate(id); + } + + public static void registerFixesFireworkRocket(DataFixer fixer) + { + fixer.registerWalker(FixTypes.ENTITY, new ItemStackData(EntityFireworkRocket.class, new String[] {"FireworksItem"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setInteger("Life", this.fireworkAge); + compound.setInteger("LifeTime", this.lifetime); + ItemStack itemstack = (ItemStack)this.dataManager.get(FIREWORK_ITEM); + + if (!itemstack.isEmpty()) + { + compound.setTag("FireworksItem", itemstack.writeToNBT(new NBTTagCompound())); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.fireworkAge = compound.getInteger("Life"); + this.lifetime = compound.getInteger("LifeTime"); + NBTTagCompound nbttagcompound = compound.getCompoundTag("FireworksItem"); + + if (nbttagcompound != null) + { + ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + this.dataManager.set(FIREWORK_ITEM, itemstack); + } + } + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityItem.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityItem.java new file mode 100644 index 0000000..4f33d09 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityItem.java @@ -0,0 +1,563 @@ +package net.minecraft.entity.item; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.stats.StatList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityItem extends Entity +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final DataParameter ITEM = EntityDataManager.createKey(EntityItem.class, DataSerializers.ITEM_STACK); + /** The age of this EntityItem (used to animate it up and down as well as expire it) */ + private int age; + private int pickupDelay; + /** The health of this EntityItem. (For example, damage for tools) */ + private int health; + private String thrower; + private String owner; + /** The EntityItem's random initial float height. */ + public float hoverStart; + + /** + * The maximum age of this EntityItem. The item is expired once this is reached. + */ + public int lifespan = 6000; + + public EntityItem(World worldIn, double x, double y, double z) + { + super(worldIn); + this.health = 5; + this.hoverStart = (float)(Math.random() * Math.PI * 2.0D); + this.setSize(0.25F, 0.25F); + this.setPosition(x, y, z); + this.rotationYaw = (float)(Math.random() * 360.0D); + this.motionX = (double)((float)(Math.random() * 0.20000000298023224D - 0.10000000149011612D)); + this.motionY = 0.20000000298023224D; + this.motionZ = (double)((float)(Math.random() * 0.20000000298023224D - 0.10000000149011612D)); + } + + public EntityItem(World worldIn, double x, double y, double z, ItemStack stack) + { + this(worldIn, x, y, z); + this.setItem(stack); + this.lifespan = (stack.getItem() == null ? 6000 : stack.getItem().getEntityLifespan(stack, worldIn)); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + public EntityItem(World worldIn) + { + super(worldIn); + this.health = 5; + this.hoverStart = (float)(Math.random() * Math.PI * 2.0D); + this.setSize(0.25F, 0.25F); + this.setItem(ItemStack.EMPTY); + } + + protected void entityInit() + { + this.getDataManager().register(ITEM, ItemStack.EMPTY); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (getItem().getItem().onEntityItemUpdate(this)) return; + if (this.getItem().isEmpty()) + { + this.setDead(); + } + else + { + super.onUpdate(); + + if (this.pickupDelay > 0 && this.pickupDelay != 32767) + { + --this.pickupDelay; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + double d0 = this.motionX; + double d1 = this.motionY; + double d2 = this.motionZ; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.03999999910593033D; + } + + if (this.world.isRemote) + { + this.noClip = false; + } + else + { + this.noClip = this.pushOutOfBlocks(this.posX, (this.getEntityBoundingBox().minY + this.getEntityBoundingBox().maxY) / 2.0D, this.posZ); + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + boolean flag = (int)this.prevPosX != (int)this.posX || (int)this.prevPosY != (int)this.posY || (int)this.prevPosZ != (int)this.posZ; + + if (flag || this.ticksExisted % 25 == 0) + { + if (this.world.getBlockState(new BlockPos(this)).getMaterial() == Material.LAVA) + { + this.motionY = 0.20000000298023224D; + this.motionX = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.motionZ = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.playSound(SoundEvents.ENTITY_GENERIC_BURN, 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + if (!this.world.isRemote) + { + this.searchForOtherItemsNearby(); + } + } + + float f = 0.98F; + + if (this.onGround) + { + BlockPos underPos = new BlockPos(MathHelper.floor(this.posX), MathHelper.floor(this.getEntityBoundingBox().minY) - 1, MathHelper.floor(this.posZ)); + net.minecraft.block.state.IBlockState underState = this.world.getBlockState(underPos); + f = underState.getBlock().getSlipperiness(underState, this.world, underPos, this) * 0.98F; + } + + this.motionX *= (double)f; + this.motionY *= 0.9800000190734863D; + this.motionZ *= (double)f; + + if (this.onGround) + { + this.motionY *= -0.5D; + } + + if (this.age != -32768) + { + ++this.age; + } + + this.handleWaterMovement(); + + if (!this.world.isRemote) + { + double d3 = this.motionX - d0; + double d4 = this.motionY - d1; + double d5 = this.motionZ - d2; + double d6 = d3 * d3 + d4 * d4 + d5 * d5; + + if (d6 > 0.01D) + { + this.isAirBorne = true; + } + } + + ItemStack item = this.getItem(); + + if (!this.world.isRemote && this.age >= lifespan) + { + int hook = net.minecraftforge.event.ForgeEventFactory.onItemExpire(this, item); + if (hook < 0) this.setDead(); + else this.lifespan += hook; + } + if (item.isEmpty()) + { + this.setDead(); + } + } + } + + /** + * Looks for other itemstacks nearby and tries to stack them together + */ + private void searchForOtherItemsNearby() + { + for (EntityItem entityitem : this.world.getEntitiesWithinAABB(EntityItem.class, this.getEntityBoundingBox().grow(0.5D, 0.0D, 0.5D))) + { + this.combineItems(entityitem); + } + } + + /** + * Tries to merge this item with the item passed as the parameter. Returns true if successful. Either this item or + * the other item will be removed from the world. + */ + private boolean combineItems(EntityItem other) + { + if (other == this) + { + return false; + } + else if (other.isEntityAlive() && this.isEntityAlive()) + { + ItemStack itemstack = this.getItem(); + ItemStack itemstack1 = other.getItem(); + + if (this.pickupDelay != 32767 && other.pickupDelay != 32767) + { + if (this.age != -32768 && other.age != -32768) + { + if (itemstack1.getItem() != itemstack.getItem()) + { + return false; + } + else if (itemstack1.hasTagCompound() ^ itemstack.hasTagCompound()) + { + return false; + } + else if (itemstack1.hasTagCompound() && !itemstack1.getTagCompound().equals(itemstack.getTagCompound())) + { + return false; + } + else if (itemstack1.getItem() == null) + { + return false; + } + else if (itemstack1.getItem().getHasSubtypes() && itemstack1.getMetadata() != itemstack.getMetadata()) + { + return false; + } + else if (itemstack1.getCount() < itemstack.getCount()) + { + return other.combineItems(this); + } + else if (itemstack1.getCount() + itemstack.getCount() > itemstack1.getMaxStackSize()) + { + return false; + } + else if (!itemstack.areCapsCompatible(itemstack1)) + { + return false; + } + else + { + itemstack1.grow(itemstack.getCount()); + other.pickupDelay = Math.max(other.pickupDelay, this.pickupDelay); + other.age = Math.min(other.age, this.age); + other.setItem(itemstack1); + this.setDead(); + return true; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * sets the age of the item so that it'll despawn one minute after it has been dropped (instead of five). Used when + * items are dropped from players in creative mode + */ + public void setAgeToCreativeDespawnTime() + { + this.age = 4800; + } + + /** + * Returns if this entity is in water and will end up adding the waters velocity to the entity + */ + public boolean handleWaterMovement() + { + if (this.world.handleMaterialAcceleration(this.getEntityBoundingBox(), Material.WATER, this)) + { + if (!this.inWater && !this.firstUpdate) + { + this.doWaterSplashEffect(); + } + + this.inWater = true; + } + else + { + this.inWater = false; + } + + return this.inWater; + } + + /** + * Will deal the specified amount of fire damage to the entity if the entity isn't immune to fire damage. + */ + protected void dealFireDamage(int amount) + { + this.attackEntityFrom(DamageSource.IN_FIRE, (float)amount); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.world.isRemote || this.isDead) return false; //Forge: Fixes MC-53850 + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (!this.getItem().isEmpty() && this.getItem().getItem() == Items.NETHER_STAR && source.isExplosion()) + { + return false; + } + else + { + this.markVelocityChanged(); + this.health = (int)((float)this.health - amount); + + if (this.health <= 0) + { + this.setDead(); + } + + return false; + } + } + + public static void registerFixesItem(DataFixer fixer) + { + fixer.registerWalker(FixTypes.ENTITY, new ItemStackData(EntityItem.class, new String[] {"Item"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setShort("Health", (short)this.health); + compound.setShort("Age", (short)this.age); + compound.setShort("PickupDelay", (short)this.pickupDelay); + compound.setInteger("Lifespan", lifespan); + + if (this.getThrower() != null) + { + compound.setString("Thrower", this.thrower); + } + + if (this.getOwner() != null) + { + compound.setString("Owner", this.owner); + } + + if (!this.getItem().isEmpty()) + { + compound.setTag("Item", this.getItem().writeToNBT(new NBTTagCompound())); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.health = compound.getShort("Health"); + this.age = compound.getShort("Age"); + + if (compound.hasKey("PickupDelay")) + { + this.pickupDelay = compound.getShort("PickupDelay"); + } + + if (compound.hasKey("Owner")) + { + this.owner = compound.getString("Owner"); + } + + if (compound.hasKey("Thrower")) + { + this.thrower = compound.getString("Thrower"); + } + + NBTTagCompound nbttagcompound = compound.getCompoundTag("Item"); + this.setItem(new ItemStack(nbttagcompound)); + + if (this.getItem().isEmpty()) + { + this.setDead(); + } + if (compound.hasKey("Lifespan")) lifespan = compound.getInteger("Lifespan"); + } + + /** + * Called by a player entity when they collide with an entity + */ + public void onCollideWithPlayer(EntityPlayer entityIn) + { + if (!this.world.isRemote) + { + if (this.pickupDelay > 0) return; + ItemStack itemstack = this.getItem(); + Item item = itemstack.getItem(); + int i = itemstack.getCount(); + + int hook = net.minecraftforge.event.ForgeEventFactory.onItemPickup(this, entityIn); + if (hook < 0) return; + ItemStack clone = itemstack.copy(); + + if (this.pickupDelay <= 0 && (this.owner == null || lifespan - this.age <= 200 || this.owner.equals(entityIn.getName())) && (hook == 1 || i <= 0 || entityIn.inventory.addItemStackToInventory(itemstack) || clone.getCount() > this.getItem().getCount())) + { + clone.setCount(clone.getCount() - this.getItem().getCount()); + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerItemPickupEvent(entityIn, this, clone); + + if (itemstack.isEmpty()) + { + entityIn.onItemPickup(this, i); + this.setDead(); + itemstack.setCount(i); + } + + entityIn.addStat(StatList.getObjectsPickedUpStats(item), i); + } + } + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.getCustomNameTag() : I18n.translateToLocal("item." + this.getItem().getUnlocalizedName()); + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return false; + } + + @Nullable + public Entity changeDimension(int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + Entity entity = super.changeDimension(dimensionIn, teleporter); + + if (!this.world.isRemote && entity instanceof EntityItem) + { + ((EntityItem)entity).searchForOtherItemsNearby(); + } + + return entity; + } + + /** + * Gets the item that this entity represents. + */ + public ItemStack getItem() + { + return (ItemStack)this.getDataManager().get(ITEM); + } + + /** + * Sets the item that this entity represents. + */ + public void setItem(ItemStack stack) + { + this.getDataManager().set(ITEM, stack); + this.getDataManager().setDirty(ITEM); + } + + public String getOwner() + { + return this.owner; + } + + public void setOwner(String owner) + { + this.owner = owner; + } + + public String getThrower() + { + return this.thrower; + } + + public void setThrower(String thrower) + { + this.thrower = thrower; + } + + @SideOnly(Side.CLIENT) + public int getAge() + { + return this.age; + } + + public void setDefaultPickupDelay() + { + this.pickupDelay = 10; + } + + public void setNoPickupDelay() + { + this.pickupDelay = 0; + } + + public void setInfinitePickupDelay() + { + this.pickupDelay = 32767; + } + + public void setPickupDelay(int ticks) + { + this.pickupDelay = ticks; + } + + public boolean cannotPickup() + { + return this.pickupDelay > 0; + } + + public void setNoDespawn() + { + this.age = -6000; + } + + public void makeFakeItem() + { + this.setInfinitePickupDelay(); + this.age = getItem().getItem().getEntityLifespan(getItem(), world) - 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityItemFrame.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityItemFrame.java new file mode 100644 index 0000000..be193dc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityItemFrame.java @@ -0,0 +1,309 @@ +package net.minecraft.entity.item; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityItemFrame extends EntityHanging +{ + private static final DataParameter ITEM = EntityDataManager.createKey(EntityItemFrame.class, DataSerializers.ITEM_STACK); + private static final DataParameter ROTATION = EntityDataManager.createKey(EntityItemFrame.class, DataSerializers.VARINT); + /** Chance for this item frame's item to drop from the frame. */ + private float itemDropChance = 1.0F; + + public EntityItemFrame(World worldIn) + { + super(worldIn); + } + + public EntityItemFrame(World worldIn, BlockPos p_i45852_2_, EnumFacing p_i45852_3_) + { + super(worldIn, p_i45852_2_); + this.updateFacingWithBoundingBox(p_i45852_3_); + } + + protected void entityInit() + { + this.getDataManager().register(ITEM, ItemStack.EMPTY); + this.getDataManager().register(ROTATION, Integer.valueOf(0)); + } + + public float getCollisionBorderSize() + { + return 0.0F; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (!source.isExplosion() && !this.getDisplayedItem().isEmpty()) + { + if (!this.world.isRemote) + { + this.dropItemOrSelf(source.getTrueSource(), false); + this.playSound(SoundEvents.ENTITY_ITEMFRAME_REMOVE_ITEM, 1.0F, 1.0F); + this.setDisplayedItem(ItemStack.EMPTY); + } + + return true; + } + else + { + return super.attackEntityFrom(source, amount); + } + } + + public int getWidthPixels() + { + return 12; + } + + public int getHeightPixels() + { + return 12; + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = 16.0D; + d0 = d0 * 64.0D * getRenderDistanceWeight(); + return distance < d0 * d0; + } + + /** + * Called when this entity is broken. Entity parameter may be null. + */ + public void onBroken(@Nullable Entity brokenEntity) + { + this.playSound(SoundEvents.ENTITY_ITEMFRAME_BREAK, 1.0F, 1.0F); + this.dropItemOrSelf(brokenEntity, true); + } + + public void playPlaceSound() + { + this.playSound(SoundEvents.ENTITY_ITEMFRAME_PLACE, 1.0F, 1.0F); + } + + public void dropItemOrSelf(@Nullable Entity entityIn, boolean p_146065_2_) + { + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + ItemStack itemstack = this.getDisplayedItem(); + + if (entityIn instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)entityIn; + + if (entityplayer.capabilities.isCreativeMode) + { + this.removeFrameFromMap(itemstack); + return; + } + } + + if (p_146065_2_) + { + this.entityDropItem(new ItemStack(Items.ITEM_FRAME), 0.0F); + } + + if (!itemstack.isEmpty() && this.rand.nextFloat() < this.itemDropChance) + { + itemstack = itemstack.copy(); + this.removeFrameFromMap(itemstack); + this.entityDropItem(itemstack, 0.0F); + } + } + } + + /** + * Removes the dot representing this frame's position from the map when the item frame is broken. + */ + private void removeFrameFromMap(ItemStack stack) + { + if (!stack.isEmpty()) + { + if (stack.getItem() instanceof net.minecraft.item.ItemMap) + { + MapData mapdata = ((ItemMap)stack.getItem()).getMapData(stack, this.world); + mapdata.mapDecorations.remove("frame-" + this.getEntityId()); + } + + stack.setItemFrame((EntityItemFrame)null); + this.setDisplayedItem(ItemStack.EMPTY); //Forge: Fix MC-124833 Pistons duplicating Items. + } + } + + public ItemStack getDisplayedItem() + { + return (ItemStack)this.getDataManager().get(ITEM); + } + + public void setDisplayedItem(ItemStack stack) + { + this.setDisplayedItemWithUpdate(stack, true); + } + + private void setDisplayedItemWithUpdate(ItemStack stack, boolean p_174864_2_) + { + if (!stack.isEmpty()) + { + stack = stack.copy(); + stack.setCount(1); + stack.setItemFrame(this); + } + + this.getDataManager().set(ITEM, stack); + this.getDataManager().setDirty(ITEM); + + if (!stack.isEmpty()) + { + this.playSound(SoundEvents.ENTITY_ITEMFRAME_ADD_ITEM, 1.0F, 1.0F); + } + + if (p_174864_2_ && this.hangingPosition != null) + { + this.world.updateComparatorOutputLevel(this.hangingPosition, Blocks.AIR); + } + } + + public void notifyDataManagerChange(DataParameter key) + { + if (key.equals(ITEM)) + { + ItemStack itemstack = this.getDisplayedItem(); + + if (!itemstack.isEmpty() && itemstack.getItemFrame() != this) + { + itemstack.setItemFrame(this); + } + } + } + + /** + * Return the rotation of the item currently on this frame. + */ + public int getRotation() + { + return ((Integer)this.getDataManager().get(ROTATION)).intValue(); + } + + public void setItemRotation(int rotationIn) + { + this.setRotation(rotationIn, true); + } + + private void setRotation(int rotationIn, boolean p_174865_2_) + { + this.getDataManager().set(ROTATION, Integer.valueOf(rotationIn % 8)); + + if (p_174865_2_ && this.hangingPosition != null) + { + this.world.updateComparatorOutputLevel(this.hangingPosition, Blocks.AIR); + } + } + + public static void registerFixesItemFrame(DataFixer fixer) + { + fixer.registerWalker(FixTypes.ENTITY, new ItemStackData(EntityItemFrame.class, new String[] {"Item"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + if (!this.getDisplayedItem().isEmpty()) + { + compound.setTag("Item", this.getDisplayedItem().writeToNBT(new NBTTagCompound())); + compound.setByte("ItemRotation", (byte)this.getRotation()); + compound.setFloat("ItemDropChance", this.itemDropChance); + } + + super.writeEntityToNBT(compound); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("Item"); + + if (nbttagcompound != null && !nbttagcompound.hasNoTags()) + { + this.setDisplayedItemWithUpdate(new ItemStack(nbttagcompound), false); + this.setRotation(compound.getByte("ItemRotation"), false); + + if (compound.hasKey("ItemDropChance", 99)) + { + this.itemDropChance = compound.getFloat("ItemDropChance"); + } + } + + super.readEntityFromNBT(compound); + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!this.world.isRemote) + { + if (this.getDisplayedItem().isEmpty()) + { + if (!itemstack.isEmpty()) + { + this.setDisplayedItem(itemstack); + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + } + else + { + this.playSound(SoundEvents.ENTITY_ITEMFRAME_ROTATE_ITEM, 1.0F, 1.0F); + this.setItemRotation(this.getRotation() + 1); + } + } + + return true; + } + + public int getAnalogOutput() + { + return this.getDisplayedItem().isEmpty() ? 0 : this.getRotation() % 8 + 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecart.java new file mode 100644 index 0000000..04fe89f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecart.java @@ -0,0 +1,1416 @@ +package net.minecraft.entity.item; + +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.BlockRailPowered; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.IWorldNameable; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityMinecart extends Entity implements IWorldNameable +{ + private static final DataParameter ROLLING_AMPLITUDE = EntityDataManager.createKey(EntityMinecart.class, DataSerializers.VARINT); + private static final DataParameter ROLLING_DIRECTION = EntityDataManager.createKey(EntityMinecart.class, DataSerializers.VARINT); + private static final DataParameter DAMAGE = EntityDataManager.createKey(EntityMinecart.class, DataSerializers.FLOAT); + private static final DataParameter DISPLAY_TILE = EntityDataManager.createKey(EntityMinecart.class, DataSerializers.VARINT); + private static final DataParameter DISPLAY_TILE_OFFSET = EntityDataManager.createKey(EntityMinecart.class, DataSerializers.VARINT); + private static final DataParameter SHOW_BLOCK = EntityDataManager.createKey(EntityMinecart.class, DataSerializers.BOOLEAN); + private boolean isInReverse; + /** Minecart rotational logic matrix */ + private static final int[][][] MATRIX = new int[][][] {{{0, 0, -1}, {0, 0, 1}}, {{ -1, 0, 0}, {1, 0, 0}}, {{ -1, -1, 0}, {1, 0, 0}}, {{ -1, 0, 0}, {1, -1, 0}}, {{0, 0, -1}, {0, -1, 1}}, {{0, -1, -1}, {0, 0, 1}}, {{0, 0, 1}, {1, 0, 0}}, {{0, 0, 1}, { -1, 0, 0}}, {{0, 0, -1}, { -1, 0, 0}}, {{0, 0, -1}, {1, 0, 0}}}; + /** appears to be the progress of the turn */ + private int turnProgress; + private double minecartX; + private double minecartY; + private double minecartZ; + private double minecartYaw; + private double minecartPitch; + @SideOnly(Side.CLIENT) + private double velocityX; + @SideOnly(Side.CLIENT) + private double velocityY; + @SideOnly(Side.CLIENT) + private double velocityZ; + + /* Forge: Minecart Compatibility Layer Integration. */ + public static float defaultMaxSpeedAirLateral = 0.4f; + public static float defaultMaxSpeedAirVertical = -1f; + public static double defaultDragAir = 0.94999998807907104D; + protected boolean canUseRail = true; + protected boolean canBePushed = true; + private static net.minecraftforge.common.IMinecartCollisionHandler collisionHandler = null; + + /* Instance versions of the above physics properties */ + private float currentSpeedRail = getMaxCartSpeedOnRail(); + protected float maxSpeedAirLateral = defaultMaxSpeedAirLateral; + protected float maxSpeedAirVertical = defaultMaxSpeedAirVertical; + protected double dragAir = defaultDragAir; + + public EntityMinecart(World worldIn) + { + super(worldIn); + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.7F); + } + + public static EntityMinecart create(World worldIn, double x, double y, double z, EntityMinecart.Type typeIn) + { + switch (typeIn) + { + case CHEST: + return new EntityMinecartChest(worldIn, x, y, z); + case FURNACE: + return new EntityMinecartFurnace(worldIn, x, y, z); + case TNT: + return new EntityMinecartTNT(worldIn, x, y, z); + case SPAWNER: + return new EntityMinecartMobSpawner(worldIn, x, y, z); + case HOPPER: + return new EntityMinecartHopper(worldIn, x, y, z); + case COMMAND_BLOCK: + return new EntityMinecartCommandBlock(worldIn, x, y, z); + default: + return new EntityMinecartEmpty(worldIn, x, y, z); + } + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + protected void entityInit() + { + this.dataManager.register(ROLLING_AMPLITUDE, Integer.valueOf(0)); + this.dataManager.register(ROLLING_DIRECTION, Integer.valueOf(1)); + this.dataManager.register(DAMAGE, Float.valueOf(0.0F)); + this.dataManager.register(DISPLAY_TILE, Integer.valueOf(0)); + this.dataManager.register(DISPLAY_TILE_OFFSET, Integer.valueOf(6)); + this.dataManager.register(SHOW_BLOCK, Boolean.valueOf(false)); + } + + /** + * Returns a boundingBox used to collide the entity with other entities and blocks. This enables the entity to be + * pushable on contact, like boats or minecarts. + */ + @Nullable + public AxisAlignedBB getCollisionBox(Entity entityIn) + { + if (getCollisionHandler() != null) return getCollisionHandler().getCollisionBox(this, entityIn); + return entityIn.canBePushed() ? entityIn.getEntityBoundingBox() : null; + } + + /** + * Returns the solid collision bounding box for this entity. Used to make (e.g.) boats solid. Return null if + * this entity is not solid. + * + * For general purposes, use {@link #width} and {@link #height}. + * + * @see getEntityBoundingBox + */ + @Nullable + public AxisAlignedBB getCollisionBoundingBox() + { + if (getCollisionHandler() != null) return getCollisionHandler().getBoundingBox(this); + return null; + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return canBePushed; + } + + public EntityMinecart(World worldIn, double x, double y, double z) + { + this(worldIn); + this.setPosition(x, y, z); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = x; + this.prevPosY = y; + this.prevPosZ = z; + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return 0.0D; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (!this.world.isRemote && !this.isDead) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + this.setRollingDirection(-this.getRollingDirection()); + this.setRollingAmplitude(10); + this.markVelocityChanged(); + this.setDamage(this.getDamage() + amount * 10.0F); + boolean flag = source.getTrueSource() instanceof EntityPlayer && ((EntityPlayer)source.getTrueSource()).capabilities.isCreativeMode; + + if (flag || this.getDamage() > 40.0F) + { + this.removePassengers(); + + if (flag && !this.hasCustomName()) + { + this.setDead(); + } + else + { + this.killMinecart(source); + } + } + + return true; + } + } + else + { + return true; + } + } + + public void killMinecart(DamageSource source) + { + this.setDead(); + + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + ItemStack itemstack = new ItemStack(Items.MINECART, 1); + + if (this.hasCustomName()) + { + itemstack.setStackDisplayName(this.getCustomNameTag()); + } + + this.entityDropItem(itemstack, 0.0F); + } + } + + /** + * Setups the entity to do the hurt animation. Only used by packets in multiplayer. + */ + @SideOnly(Side.CLIENT) + public void performHurtAnimation() + { + this.setRollingDirection(-this.getRollingDirection()); + this.setRollingAmplitude(10); + this.setDamage(this.getDamage() + this.getDamage() * 10.0F); + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + /** + * Gets the horizontal facing direction of this Entity, adjusted to take specially-treated entity types into + * account. + */ + public EnumFacing getAdjustedHorizontalFacing() + { + return this.isInReverse ? this.getHorizontalFacing().getOpposite().rotateY() : this.getHorizontalFacing().rotateY(); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (this.getRollingAmplitude() > 0) + { + this.setRollingAmplitude(this.getRollingAmplitude() - 1); + } + + if (this.getDamage() > 0.0F) + { + this.setDamage(this.getDamage() - 1.0F); + } + + if (this.posY < -64.0D) + { + this.outOfWorld(); + } + + if (!this.world.isRemote && this.world instanceof WorldServer) + { + this.world.profiler.startSection("portal"); + MinecraftServer minecraftserver = this.world.getMinecraftServer(); + int i = this.getMaxInPortalTime(); + + if (this.inPortal) + { + if (minecraftserver.getAllowNether()) + { + if (!this.isRiding() && this.portalCounter++ >= i) + { + this.portalCounter = i; + this.timeUntilPortal = this.getPortalCooldown(); + int j; + + if (this.world.provider.getDimensionType().getId() == -1) + { + j = 0; + } + else + { + j = -1; + } + + this.changeDimension(j); + } + + this.inPortal = false; + } + } + else + { + if (this.portalCounter > 0) + { + this.portalCounter -= 4; + } + + if (this.portalCounter < 0) + { + this.portalCounter = 0; + } + } + + if (this.timeUntilPortal > 0) + { + --this.timeUntilPortal; + } + + this.world.profiler.endSection(); + } + + if (this.world.isRemote) + { + if (this.turnProgress > 0) + { + double d4 = this.posX + (this.minecartX - this.posX) / (double)this.turnProgress; + double d5 = this.posY + (this.minecartY - this.posY) / (double)this.turnProgress; + double d6 = this.posZ + (this.minecartZ - this.posZ) / (double)this.turnProgress; + double d1 = MathHelper.wrapDegrees(this.minecartYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + d1 / (double)this.turnProgress); + this.rotationPitch = (float)((double)this.rotationPitch + (this.minecartPitch - (double)this.rotationPitch) / (double)this.turnProgress); + --this.turnProgress; + this.setPosition(d4, d5, d6); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + else + { + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + } + else + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.03999999910593033D; + } + + int k = MathHelper.floor(this.posX); + int l = MathHelper.floor(this.posY); + int i1 = MathHelper.floor(this.posZ); + + if (BlockRailBase.isRailBlock(this.world, new BlockPos(k, l - 1, i1))) + { + --l; + } + + BlockPos blockpos = new BlockPos(k, l, i1); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (canUseRail() && BlockRailBase.isRailBlock(iblockstate)) + { + this.moveAlongTrack(blockpos, iblockstate); + + if (iblockstate.getBlock() == Blocks.ACTIVATOR_RAIL) + { + this.onActivatorRailPass(k, l, i1, ((Boolean)iblockstate.getValue(BlockRailPowered.POWERED)).booleanValue()); + } + } + else + { + this.moveDerailedMinecart(); + } + + this.doBlockCollisions(); + this.rotationPitch = 0.0F; + double d0 = this.prevPosX - this.posX; + double d2 = this.prevPosZ - this.posZ; + + if (d0 * d0 + d2 * d2 > 0.001D) + { + this.rotationYaw = (float)(MathHelper.atan2(d2, d0) * 180.0D / Math.PI); + + if (this.isInReverse) + { + this.rotationYaw += 180.0F; + } + } + + double d3 = (double)MathHelper.wrapDegrees(this.rotationYaw - this.prevRotationYaw); + + if (d3 < -170.0D || d3 >= 170.0D) + { + this.rotationYaw += 180.0F; + this.isInReverse = !this.isInReverse; + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + + AxisAlignedBB box; + if (getCollisionHandler() != null) box = getCollisionHandler().getMinecartCollisionBox(this); + else box = this.getEntityBoundingBox().grow(0.20000000298023224D, 0.0D, 0.20000000298023224D); + + if (canBeRidden() && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D) + { + List list = this.world.getEntitiesInAABBexcluding(this, box, EntitySelectors.getTeamCollisionPredicate(this)); + + if (!list.isEmpty()) + { + for (int j1 = 0; j1 < list.size(); ++j1) + { + Entity entity1 = list.get(j1); + + if (!(entity1 instanceof EntityPlayer) && !(entity1 instanceof EntityIronGolem) && !(entity1 instanceof EntityMinecart) && !this.isBeingRidden() && !entity1.isRiding()) + { + entity1.startRiding(this); + } + else + { + entity1.applyEntityCollision(this); + } + } + } + } + else + { + for (Entity entity : this.world.getEntitiesWithinAABBExcludingEntity(this, box)) + { + if (!this.isPassenger(entity) && entity.canBePushed() && entity instanceof EntityMinecart) + { + entity.applyEntityCollision(this); + } + } + } + + this.handleWaterMovement(); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartUpdateEvent(this, this.getCurrentRailPosition())); + } + } + + /** + * Get's the maximum speed for a minecart + */ + protected double getMaximumSpeed() + { + return 0.4D; + } + + /** + * Called every tick the minecart is on an activator rail. + */ + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower) + { + } + + /** + * Moves a minecart that is not attached to a rail + */ + protected void moveDerailedMinecart() + { + double d0 = onGround ? this.getMaximumSpeed() : getMaxSpeedAirLateral(); + this.motionX = MathHelper.clamp(this.motionX, -d0, d0); + this.motionZ = MathHelper.clamp(this.motionZ, -d0, d0); + + double moveY = motionY; + if(getMaxSpeedAirVertical() > 0 && motionY > getMaxSpeedAirVertical()) + { + moveY = getMaxSpeedAirVertical(); + if(Math.abs(motionX) < 0.3f && Math.abs(motionZ) < 0.3f) + { + moveY = 0.15f; + motionY = moveY; + } + } + + if (this.onGround) + { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.move(MoverType.SELF, this.motionX, moveY, this.motionZ); + + if (!this.onGround) + { + this.motionX *= getDragAir(); + this.motionY *= getDragAir(); + this.motionZ *= getDragAir(); + } + } + + @SuppressWarnings("incomplete-switch") + protected void moveAlongTrack(BlockPos pos, IBlockState state) + { + this.fallDistance = 0.0F; + Vec3d vec3d = this.getPos(this.posX, this.posY, this.posZ); + this.posY = (double)pos.getY(); + boolean flag = false; + boolean flag1 = false; + BlockRailBase blockrailbase = (BlockRailBase)state.getBlock(); + + if (blockrailbase == Blocks.GOLDEN_RAIL) + { + flag = ((Boolean)state.getValue(BlockRailPowered.POWERED)).booleanValue(); + flag1 = !flag; + } + + double slopeAdjustment = getSlopeAdjustment(); + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = blockrailbase.getRailDirection(world, pos, state, this); + + switch (blockrailbase$enumraildirection) + { + case ASCENDING_EAST: + this.motionX -= slopeAdjustment; + ++this.posY; + break; + case ASCENDING_WEST: + this.motionX += slopeAdjustment; + ++this.posY; + break; + case ASCENDING_NORTH: + this.motionZ += slopeAdjustment; + ++this.posY; + break; + case ASCENDING_SOUTH: + this.motionZ -= slopeAdjustment; + ++this.posY; + } + + int[][] aint = MATRIX[blockrailbase$enumraildirection.getMetadata()]; + double d1 = (double)(aint[1][0] - aint[0][0]); + double d2 = (double)(aint[1][2] - aint[0][2]); + double d3 = Math.sqrt(d1 * d1 + d2 * d2); + double d4 = this.motionX * d1 + this.motionZ * d2; + + if (d4 < 0.0D) + { + d1 = -d1; + d2 = -d2; + } + + double d5 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (d5 > 2.0D) + { + d5 = 2.0D; + } + + this.motionX = d5 * d1 / d3; + this.motionZ = d5 * d2 / d3; + Entity entity = this.getPassengers().isEmpty() ? null : (Entity)this.getPassengers().get(0); + + if (entity instanceof EntityLivingBase) + { + double d6 = (double)((EntityLivingBase)entity).moveForward; + + if (d6 > 0.0D) + { + double d7 = -Math.sin((double)(entity.rotationYaw * 0.017453292F)); + double d8 = Math.cos((double)(entity.rotationYaw * 0.017453292F)); + double d9 = this.motionX * this.motionX + this.motionZ * this.motionZ; + + if (d9 < 0.01D) + { + this.motionX += d7 * 0.1D; + this.motionZ += d8 * 0.1D; + flag1 = false; + } + } + } + + if (flag1 && shouldDoRailFunctions()) + { + double d17 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (d17 < 0.03D) + { + this.motionX *= 0.0D; + this.motionY *= 0.0D; + this.motionZ *= 0.0D; + } + else + { + this.motionX *= 0.5D; + this.motionY *= 0.0D; + this.motionZ *= 0.5D; + } + } + + double d18 = (double)pos.getX() + 0.5D + (double)aint[0][0] * 0.5D; + double d19 = (double)pos.getZ() + 0.5D + (double)aint[0][2] * 0.5D; + double d20 = (double)pos.getX() + 0.5D + (double)aint[1][0] * 0.5D; + double d21 = (double)pos.getZ() + 0.5D + (double)aint[1][2] * 0.5D; + d1 = d20 - d18; + d2 = d21 - d19; + double d10; + + if (d1 == 0.0D) + { + this.posX = (double)pos.getX() + 0.5D; + d10 = this.posZ - (double)pos.getZ(); + } + else if (d2 == 0.0D) + { + this.posZ = (double)pos.getZ() + 0.5D; + d10 = this.posX - (double)pos.getX(); + } + else + { + double d11 = this.posX - d18; + double d12 = this.posZ - d19; + d10 = (d11 * d1 + d12 * d2) * 2.0D; + } + + this.posX = d18 + d1 * d10; + this.posZ = d19 + d2 * d10; + this.setPosition(this.posX, this.posY, this.posZ); + this.moveMinecartOnRail(pos); + + if (aint[0][1] != 0 && MathHelper.floor(this.posX) - pos.getX() == aint[0][0] && MathHelper.floor(this.posZ) - pos.getZ() == aint[0][2]) + { + this.setPosition(this.posX, this.posY + (double)aint[0][1], this.posZ); + } + else if (aint[1][1] != 0 && MathHelper.floor(this.posX) - pos.getX() == aint[1][0] && MathHelper.floor(this.posZ) - pos.getZ() == aint[1][2]) + { + this.setPosition(this.posX, this.posY + (double)aint[1][1], this.posZ); + } + + this.applyDrag(); + Vec3d vec3d1 = this.getPos(this.posX, this.posY, this.posZ); + + if (vec3d1 != null && vec3d != null) + { + double d14 = (vec3d.y - vec3d1.y) * 0.05D; + d5 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (d5 > 0.0D) + { + this.motionX = this.motionX / d5 * (d5 + d14); + this.motionZ = this.motionZ / d5 * (d5 + d14); + } + + this.setPosition(this.posX, vec3d1.y, this.posZ); + } + + int j = MathHelper.floor(this.posX); + int i = MathHelper.floor(this.posZ); + + if (j != pos.getX() || i != pos.getZ()) + { + d5 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = d5 * (double)(j - pos.getX()); + this.motionZ = d5 * (double)(i - pos.getZ()); + } + + + if(shouldDoRailFunctions()) + { + ((BlockRailBase)state.getBlock()).onMinecartPass(world, this, pos); + } + + if (flag && shouldDoRailFunctions()) + { + double d15 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (d15 > 0.01D) + { + double d16 = 0.06D; + this.motionX += this.motionX / d15 * 0.06D; + this.motionZ += this.motionZ / d15 * 0.06D; + } + else if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.EAST_WEST) + { + if (this.world.getBlockState(pos.west()).isNormalCube()) + { + this.motionX = 0.02D; + } + else if (this.world.getBlockState(pos.east()).isNormalCube()) + { + this.motionX = -0.02D; + } + } + else if (blockrailbase$enumraildirection == BlockRailBase.EnumRailDirection.NORTH_SOUTH) + { + if (this.world.getBlockState(pos.north()).isNormalCube()) + { + this.motionZ = 0.02D; + } + else if (this.world.getBlockState(pos.south()).isNormalCube()) + { + this.motionZ = -0.02D; + } + } + } + } + + protected void applyDrag() + { + if (this.isBeingRidden()) + { + this.motionX *= 0.996999979019165D; + this.motionY *= 0.0D; + this.motionZ *= 0.996999979019165D; + } + else + { + this.motionX *= 0.9599999785423279D; + this.motionY *= 0.0D; + this.motionZ *= 0.9599999785423279D; + } + } + + /** + * Sets the x,y,z of the entity from the given parameters. Also seems to set up a bounding box. + */ + public void setPosition(double x, double y, double z) + { + this.posX = x; + this.posY = y; + this.posZ = z; + float f = this.width / 2.0F; + float f1 = this.height; + this.setEntityBoundingBox(new AxisAlignedBB(x - (double)f, y, z - (double)f, x + (double)f, y + (double)f1, z + (double)f)); + } + + @Nullable + @SideOnly(Side.CLIENT) + public Vec3d getPosOffset(double x, double y, double z, double offset) + { + int i = MathHelper.floor(x); + int j = MathHelper.floor(y); + int k = MathHelper.floor(z); + + if (BlockRailBase.isRailBlock(this.world, new BlockPos(i, j - 1, k))) + { + --j; + } + + IBlockState iblockstate = this.world.getBlockState(new BlockPos(i, j, k)); + + if (BlockRailBase.isRailBlock(iblockstate)) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = ((BlockRailBase)iblockstate.getBlock()).getRailDirection(world, new BlockPos(i, j, k), iblockstate, this); + y = (double)j; + + if (blockrailbase$enumraildirection.isAscending()) + { + y = (double)(j + 1); + } + + int[][] aint = MATRIX[blockrailbase$enumraildirection.getMetadata()]; + double d0 = (double)(aint[1][0] - aint[0][0]); + double d1 = (double)(aint[1][2] - aint[0][2]); + double d2 = Math.sqrt(d0 * d0 + d1 * d1); + d0 = d0 / d2; + d1 = d1 / d2; + x = x + d0 * offset; + z = z + d1 * offset; + + if (aint[0][1] != 0 && MathHelper.floor(x) - i == aint[0][0] && MathHelper.floor(z) - k == aint[0][2]) + { + y += (double)aint[0][1]; + } + else if (aint[1][1] != 0 && MathHelper.floor(x) - i == aint[1][0] && MathHelper.floor(z) - k == aint[1][2]) + { + y += (double)aint[1][1]; + } + + return this.getPos(x, y, z); + } + else + { + return null; + } + } + + @Nullable + public Vec3d getPos(double p_70489_1_, double p_70489_3_, double p_70489_5_) + { + int i = MathHelper.floor(p_70489_1_); + int j = MathHelper.floor(p_70489_3_); + int k = MathHelper.floor(p_70489_5_); + + if (BlockRailBase.isRailBlock(this.world, new BlockPos(i, j - 1, k))) + { + --j; + } + + IBlockState iblockstate = this.world.getBlockState(new BlockPos(i, j, k)); + + if (BlockRailBase.isRailBlock(iblockstate)) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = ((BlockRailBase)iblockstate.getBlock()).getRailDirection(world, new BlockPos(i, j, k), iblockstate, this); + int[][] aint = MATRIX[blockrailbase$enumraildirection.getMetadata()]; + double d0 = (double)i + 0.5D + (double)aint[0][0] * 0.5D; + double d1 = (double)j + 0.0625D + (double)aint[0][1] * 0.5D; + double d2 = (double)k + 0.5D + (double)aint[0][2] * 0.5D; + double d3 = (double)i + 0.5D + (double)aint[1][0] * 0.5D; + double d4 = (double)j + 0.0625D + (double)aint[1][1] * 0.5D; + double d5 = (double)k + 0.5D + (double)aint[1][2] * 0.5D; + double d6 = d3 - d0; + double d7 = (d4 - d1) * 2.0D; + double d8 = d5 - d2; + double d9; + + if (d6 == 0.0D) + { + d9 = p_70489_5_ - (double)k; + } + else if (d8 == 0.0D) + { + d9 = p_70489_1_ - (double)i; + } + else + { + double d10 = p_70489_1_ - d0; + double d11 = p_70489_5_ - d2; + d9 = (d10 * d6 + d11 * d8) * 2.0D; + } + + p_70489_1_ = d0 + d6 * d9; + p_70489_3_ = d1 + d7 * d9; + p_70489_5_ = d2 + d8 * d9; + + if (d7 < 0.0D) + { + ++p_70489_3_; + } + + if (d7 > 0.0D) + { + p_70489_3_ += 0.5D; + } + + return new Vec3d(p_70489_1_, p_70489_3_, p_70489_5_); + } + else + { + return null; + } + } + + /** + * Gets the bounding box of this Entity, adjusted to take auxiliary entities into account (e.g. the tile contained + * by a minecart, such as a command block). + */ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + return this.hasDisplayTile() ? axisalignedbb.grow((double)Math.abs(this.getDisplayTileOffset()) / 16.0D) : axisalignedbb; + } + + public static void registerFixesMinecart(DataFixer fixer, Class name) + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + if (compound.getBoolean("CustomDisplayTile")) + { + Block block; + + if (compound.hasKey("DisplayTile", 8)) + { + block = Block.getBlockFromName(compound.getString("DisplayTile")); + } + else + { + block = Block.getBlockById(compound.getInteger("DisplayTile")); + } + + int i = compound.getInteger("DisplayData"); + this.setDisplayTile(block == null ? Blocks.AIR.getDefaultState() : block.getStateFromMeta(i)); + this.setDisplayTileOffset(compound.getInteger("DisplayOffset")); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + if (this.hasDisplayTile()) + { + compound.setBoolean("CustomDisplayTile", true); + IBlockState iblockstate = this.getDisplayTile(); + ResourceLocation resourcelocation = Block.REGISTRY.getNameForObject(iblockstate.getBlock()); + compound.setString("DisplayTile", resourcelocation == null ? "" : resourcelocation.toString()); + compound.setInteger("DisplayData", iblockstate.getBlock().getMetaFromState(iblockstate)); + compound.setInteger("DisplayOffset", this.getDisplayTileOffset()); + } + } + + /** + * Applies a velocity to the entities, to push them away from eachother. + */ + public void applyEntityCollision(Entity entityIn) + { + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartCollisionEvent(this, entityIn)); + if (getCollisionHandler() != null) + { + getCollisionHandler().onEntityCollision(this, entityIn); + return; + } + if (!this.world.isRemote) + { + if (!entityIn.noClip && !this.noClip) + { + if (!this.isPassenger(entityIn)) + { + double d0 = entityIn.posX - this.posX; + double d1 = entityIn.posZ - this.posZ; + double d2 = d0 * d0 + d1 * d1; + + if (d2 >= 9.999999747378752E-5D) + { + d2 = (double)MathHelper.sqrt(d2); + d0 = d0 / d2; + d1 = d1 / d2; + double d3 = 1.0D / d2; + + if (d3 > 1.0D) + { + d3 = 1.0D; + } + + d0 = d0 * d3; + d1 = d1 * d3; + d0 = d0 * 0.10000000149011612D; + d1 = d1 * 0.10000000149011612D; + d0 = d0 * (double)(1.0F - this.entityCollisionReduction); + d1 = d1 * (double)(1.0F - this.entityCollisionReduction); + d0 = d0 * 0.5D; + d1 = d1 * 0.5D; + + if (entityIn instanceof EntityMinecart) + { + double d4 = entityIn.posX - this.posX; + double d5 = entityIn.posZ - this.posZ; + Vec3d vec3d = (new Vec3d(d4, 0.0D, d5)).normalize(); + Vec3d vec3d1 = (new Vec3d((double)MathHelper.cos(this.rotationYaw * 0.017453292F), 0.0D, (double)MathHelper.sin(this.rotationYaw * 0.017453292F))).normalize(); + double d6 = Math.abs(vec3d.dotProduct(vec3d1)); + + if (d6 < 0.800000011920929D) + { + return; + } + + double d7 = entityIn.motionX + this.motionX; + double d8 = entityIn.motionZ + this.motionZ; + + if (((EntityMinecart)entityIn).isPoweredCart() && !isPoweredCart()) + { + this.motionX *= 0.20000000298023224D; + this.motionZ *= 0.20000000298023224D; + this.addVelocity(entityIn.motionX - d0, 0.0D, entityIn.motionZ - d1); + entityIn.motionX *= 0.949999988079071D; + entityIn.motionZ *= 0.949999988079071D; + } + else if (!((EntityMinecart)entityIn).isPoweredCart() && isPoweredCart()) + { + entityIn.motionX *= 0.20000000298023224D; + entityIn.motionZ *= 0.20000000298023224D; + entityIn.addVelocity(this.motionX + d0, 0.0D, this.motionZ + d1); + this.motionX *= 0.949999988079071D; + this.motionZ *= 0.949999988079071D; + } + else + { + d7 = d7 / 2.0D; + d8 = d8 / 2.0D; + this.motionX *= 0.20000000298023224D; + this.motionZ *= 0.20000000298023224D; + this.addVelocity(d7 - d0, 0.0D, d8 - d1); + entityIn.motionX *= 0.20000000298023224D; + entityIn.motionZ *= 0.20000000298023224D; + entityIn.addVelocity(d7 + d0, 0.0D, d8 + d1); + } + } + else + { + this.addVelocity(-d0, 0.0D, -d1); + entityIn.addVelocity(d0 / 4.0D, 0.0D, d1 / 4.0D); + } + } + } + } + } + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.minecartX = x; + this.minecartY = y; + this.minecartZ = z; + this.minecartYaw = (double)yaw; + this.minecartPitch = (double)pitch; + this.turnProgress = posRotationIncrements + 2; + this.motionX = this.velocityX; + this.motionY = this.velocityY; + this.motionZ = this.velocityZ; + } + + /** + * Sets the current amount of damage the minecart has taken. Decreases over time. The cart breaks when this is over + * 40. + */ + public void setDamage(float damage) + { + this.dataManager.set(DAMAGE, Float.valueOf(damage)); + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + this.velocityX = this.motionX; + this.velocityY = this.motionY; + this.velocityZ = this.motionZ; + } + + /** + * Gets the current amount of damage the minecart has taken. Decreases over time. The cart breaks when this is over + * 40. + */ + public float getDamage() + { + return ((Float)this.dataManager.get(DAMAGE)).floatValue(); + } + + /** + * Sets the rolling amplitude the cart rolls while being attacked. + */ + public void setRollingAmplitude(int rollingAmplitude) + { + this.dataManager.set(ROLLING_AMPLITUDE, Integer.valueOf(rollingAmplitude)); + } + + /** + * Gets the rolling amplitude the cart rolls while being attacked. + */ + public int getRollingAmplitude() + { + return ((Integer)this.dataManager.get(ROLLING_AMPLITUDE)).intValue(); + } + + /** + * Sets the rolling direction the cart rolls while being attacked. Can be 1 or -1. + */ + public void setRollingDirection(int rollingDirection) + { + this.dataManager.set(ROLLING_DIRECTION, Integer.valueOf(rollingDirection)); + } + + /** + * Gets the rolling direction the cart rolls while being attacked. Can be 1 or -1. + */ + public int getRollingDirection() + { + return ((Integer)this.dataManager.get(ROLLING_DIRECTION)).intValue(); + } + + public abstract EntityMinecart.Type getType(); + + public IBlockState getDisplayTile() + { + return !this.hasDisplayTile() ? this.getDefaultDisplayTile() : Block.getStateById(((Integer)this.getDataManager().get(DISPLAY_TILE)).intValue()); + } + + public IBlockState getDefaultDisplayTile() + { + return Blocks.AIR.getDefaultState(); + } + + public int getDisplayTileOffset() + { + return !this.hasDisplayTile() ? this.getDefaultDisplayTileOffset() : ((Integer)this.getDataManager().get(DISPLAY_TILE_OFFSET)).intValue(); + } + + public int getDefaultDisplayTileOffset() + { + return 6; + } + + public void setDisplayTile(IBlockState displayTile) + { + this.getDataManager().set(DISPLAY_TILE, Integer.valueOf(Block.getStateId(displayTile))); + this.setHasDisplayTile(true); + } + + public void setDisplayTileOffset(int displayTileOffset) + { + this.getDataManager().set(DISPLAY_TILE_OFFSET, Integer.valueOf(displayTileOffset)); + this.setHasDisplayTile(true); + } + + public boolean hasDisplayTile() + { + return ((Boolean)this.getDataManager().get(SHOW_BLOCK)).booleanValue(); + } + + public void setHasDisplayTile(boolean showBlock) + { + this.getDataManager().set(SHOW_BLOCK, Boolean.valueOf(showBlock)); + } + + @Override + public boolean processInitialInteract(EntityPlayer player, net.minecraft.util.EnumHand hand) + { + return net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, player, hand)); + } + + /* =================================== FORGE START ===========================================*/ + private BlockPos getCurrentRailPosition() + { + int x = MathHelper.floor(this.posX); + int y = MathHelper.floor(this.posY); + int z = MathHelper.floor(this.posZ); + + if (BlockRailBase.isRailBlock(this.world, new BlockPos(x, y - 1, z))) y--; + return new BlockPos(x, y, z); + } + + protected double getMaxSpeed() + { + if (!canUseRail()) return getMaximumSpeed(); + BlockPos pos = this.getCurrentRailPosition(); + IBlockState state = this.world.getBlockState(pos); + if (!BlockRailBase.isRailBlock(state)) return getMaximumSpeed(); + + float railMaxSpeed = ((BlockRailBase)state.getBlock()).getRailMaxSpeed(world, this, pos); + return Math.min(railMaxSpeed, getCurrentCartSpeedCapOnRail()); + } + + /** + * Moved to allow overrides. + * This code handles minecart movement and speed capping when on a rail. + */ + public void moveMinecartOnRail(BlockPos pos) + { + double mX = this.motionX; + double mZ = this.motionZ; + + if (this.isBeingRidden()) + { + mX *= 0.75D; + mZ *= 0.75D; + } + + double max = this.getMaxSpeed(); + mX = MathHelper.clamp(mX, -max, max); + mZ = MathHelper.clamp(mZ, -max, max); + this.move(MoverType.SELF, mX, 0.0D, mZ); + } + + /** + * Gets the current global Minecart Collision handler if none + * is registered, returns null + * @return The collision handler or null + */ + @Nullable + public static net.minecraftforge.common.IMinecartCollisionHandler getCollisionHandler() + { + return collisionHandler; + } + + /** + * Sets the global Minecart Collision handler, overwrites any + * that is currently set. + * @param handler The new handler + */ + public static void setCollisionHandler(net.minecraftforge.common.IMinecartCollisionHandler handler) + { + collisionHandler = handler; + } + + /** + * This function returns an ItemStack that represents this cart. + * This should be an ItemStack that can be used by the player to place the cart, + * but is not necessary the item the cart drops when destroyed. + * @return An ItemStack that can be used to place the cart. + */ + public ItemStack getCartItem() + { + if (this instanceof EntityMinecartFurnace) + { + return new ItemStack(Items.FURNACE_MINECART); + } + else if (this instanceof EntityMinecartChest) + { + return new ItemStack(Items.CHEST_MINECART); + } + else if (this instanceof EntityMinecartTNT) + { + return new ItemStack(Items.TNT_MINECART); + } + else if (this instanceof EntityMinecartHopper) + { + return new ItemStack(Items.HOPPER_MINECART); + } + else if (this instanceof EntityMinecartCommandBlock) + { + return new ItemStack(Items.COMMAND_BLOCK_MINECART); + } + return new ItemStack(Items.MINECART); + } + + /** + * Returns true if this cart can currently use rails. + * This function is mainly used to gracefully detach a minecart from a rail. + * @return True if the minecart can use rails. + */ + public boolean canUseRail() + { + return canUseRail; + } + + /** + * Set whether the minecart can use rails. + * This function is mainly used to gracefully detach a minecart from a rail. + * @param use Whether the minecart can currently use rails. + */ + public void setCanUseRail(boolean use) + { + canUseRail = use; + } + + /** + * Return false if this cart should not call onMinecartPass() and should ignore Powered Rails. + * @return True if this cart should call onMinecartPass(). + */ + public boolean shouldDoRailFunctions() + { + return true; + } + + /** + * Returns true if this cart is self propelled. + * @return True if powered. + */ + public boolean isPoweredCart() + { + return getType() == EntityMinecart.Type.FURNACE; + } + + /** + * Returns true if this cart can be ridden by an Entity. + * @return True if this cart can be ridden. + */ + public boolean canBeRidden() + { + return this.getType() == EntityMinecart.Type.RIDEABLE; + } + + /** + * Getters/setters for physics variables + */ + + /** + * Returns the carts max speed when traveling on rails. Carts going faster + * than 1.1 cause issues with chunk loading. Carts cant traverse slopes or + * corners at greater than 0.5 - 0.6. This value is compared with the rails + * max speed and the carts current speed cap to determine the carts current + * max speed. A normal rail's max speed is 0.4. + * + * @return Carts max speed. + */ + public float getMaxCartSpeedOnRail() + { + return 1.2f; + } + + /** + * Returns the current speed cap for the cart when traveling on rails. This + * functions differs from getMaxCartSpeedOnRail() in that it controls + * current movement and cannot be overridden. The value however can never be + * higher than getMaxCartSpeedOnRail(). + * + * @return + */ + public final float getCurrentCartSpeedCapOnRail() + { + return currentSpeedRail; + } + + public final void setCurrentCartSpeedCapOnRail(float value) + { + value = Math.min(value, getMaxCartSpeedOnRail()); + currentSpeedRail = value; + } + + public float getMaxSpeedAirLateral() + { + return maxSpeedAirLateral; + } + + public void setMaxSpeedAirLateral(float value) + { + maxSpeedAirLateral = value; + } + + public float getMaxSpeedAirVertical() + { + return maxSpeedAirVertical; + } + + public void setMaxSpeedAirVertical(float value) + { + maxSpeedAirVertical = value; + } + + public double getDragAir() + { + return dragAir; + } + + public void setDragAir(double value) + { + dragAir = value; + } + + public double getSlopeAdjustment() + { + return 0.0078125D; + } + + /** + * Called from Detector Rails to retrieve a redstone power level for comparators. + */ + public int getComparatorLevel() + { + return -1; + } + + /* =================================== FORGE END ===========================================*/ + + public static enum Type + { + RIDEABLE(0, "MinecartRideable"), + CHEST(1, "MinecartChest"), + FURNACE(2, "MinecartFurnace"), + TNT(3, "MinecartTNT"), + SPAWNER(4, "MinecartSpawner"), + HOPPER(5, "MinecartHopper"), + COMMAND_BLOCK(6, "MinecartCommandBlock"); + + private static final Map BY_ID = Maps.newHashMap(); + private final int id; + private final String name; + + private Type(int idIn, String nameIn) + { + this.id = idIn; + this.name = nameIn; + } + + public int getId() + { + return this.id; + } + + public String getName() + { + return this.name; + } + + @SideOnly(Side.CLIENT) + public static EntityMinecart.Type getById(int idIn) + { + EntityMinecart.Type entityminecart$type = BY_ID.get(Integer.valueOf(idIn)); + return entityminecart$type == null ? RIDEABLE : entityminecart$type; + } + + static + { + for (EntityMinecart.Type entityminecart$type : values()) + { + BY_ID.put(Integer.valueOf(entityminecart$type.getId()), entityminecart$type); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartChest.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartChest.java new file mode 100644 index 0000000..0ca9c1f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartChest.java @@ -0,0 +1,76 @@ +package net.minecraft.entity.item; + +import net.minecraft.block.BlockChest; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.item.Item; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; + +public class EntityMinecartChest extends EntityMinecartContainer +{ + public EntityMinecartChest(World worldIn) + { + super(worldIn); + } + + public EntityMinecartChest(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesMinecartChest(DataFixer fixer) + { + EntityMinecartContainer.addDataFixers(fixer, EntityMinecartChest.class); + } + + public void killMinecart(DamageSource source) + { + super.killMinecart(source); + + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.dropItemWithOffset(Item.getItemFromBlock(Blocks.CHEST), 1, 0.0F); + } + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return 27; + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.CHEST; + } + + public IBlockState getDefaultDisplayTile() + { + return Blocks.CHEST.getDefaultState().withProperty(BlockChest.FACING, EnumFacing.NORTH); + } + + public int getDefaultDisplayTileOffset() + { + return 8; + } + + public String getGuiID() + { + return "minecraft:chest"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + this.addLoot(playerIn); + return new ContainerChest(playerInventory, this, playerIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartCommandBlock.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartCommandBlock.java new file mode 100644 index 0000000..c348ce9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartCommandBlock.java @@ -0,0 +1,215 @@ +package net.minecraft.entity.item; + +import io.netty.buffer.ByteBuf; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityMinecartCommandBlock extends EntityMinecart +{ + private static final DataParameter COMMAND = EntityDataManager.createKey(EntityMinecartCommandBlock.class, DataSerializers.STRING); + private static final DataParameter LAST_OUTPUT = EntityDataManager.createKey(EntityMinecartCommandBlock.class, DataSerializers.TEXT_COMPONENT); + private final CommandBlockBaseLogic commandBlockLogic = new CommandBlockBaseLogic() + { + public void updateCommand() + { + EntityMinecartCommandBlock.this.getDataManager().set(EntityMinecartCommandBlock.COMMAND, this.getCommand()); + EntityMinecartCommandBlock.this.getDataManager().set(EntityMinecartCommandBlock.LAST_OUTPUT, this.getLastOutput()); + } + /** + * Currently this returns 0 for the traditional command block, and 1 for the minecart command block + */ + @SideOnly(Side.CLIENT) + public int getCommandBlockType() + { + return 1; + } + /** + * Fills in information about the command block for the packet. entityId for the minecart version, and X/Y/Z for + * the traditional version + */ + @SideOnly(Side.CLIENT) + public void fillInInfo(ByteBuf buf) + { + buf.writeInt(EntityMinecartCommandBlock.this.getEntityId()); + } + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, + * return the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return new BlockPos(EntityMinecartCommandBlock.this.posX, EntityMinecartCommandBlock.this.posY + 0.5D, EntityMinecartCommandBlock.this.posZ); + } + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, return + * 0.0D, 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return new Vec3d(EntityMinecartCommandBlock.this.posX, EntityMinecartCommandBlock.this.posY, EntityMinecartCommandBlock.this.posZ); + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, + * return the overworld + */ + public World getEntityWorld() + { + return EntityMinecartCommandBlock.this.world; + } + /** + * Returns the entity associated with the command sender. MAY BE NULL! + */ + public Entity getCommandSenderEntity() + { + return EntityMinecartCommandBlock.this; + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return EntityMinecartCommandBlock.this.world.getMinecraftServer(); + } + }; + /** Cooldown before command block logic runs again in ticks */ + private int activatorRailCooldown; + + public EntityMinecartCommandBlock(World worldIn) + { + super(worldIn); + } + + public EntityMinecartCommandBlock(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesMinecartCommand(DataFixer fixer) + { + EntityMinecart.registerFixesMinecart(fixer, EntityMinecartCommandBlock.class); + fixer.registerWalker(FixTypes.ENTITY, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if (TileEntity.getKey(TileEntityCommandBlock.class).equals(new ResourceLocation(compound.getString("id")))) + { + compound.setString("id", "Control"); + fixer.process(FixTypes.BLOCK_ENTITY, compound, versionIn); + compound.setString("id", "MinecartCommandBlock"); + } + + return compound; + } + }); + } + + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(COMMAND, ""); + this.getDataManager().register(LAST_OUTPUT, new TextComponentString("")); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.commandBlockLogic.readDataFromNBT(compound); + this.getDataManager().set(COMMAND, this.getCommandBlockLogic().getCommand()); + this.getDataManager().set(LAST_OUTPUT, this.getCommandBlockLogic().getLastOutput()); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + this.commandBlockLogic.writeToNBT(compound); + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.COMMAND_BLOCK; + } + + public IBlockState getDefaultDisplayTile() + { + return Blocks.COMMAND_BLOCK.getDefaultState(); + } + + public CommandBlockBaseLogic getCommandBlockLogic() + { + return this.commandBlockLogic; + } + + /** + * Called every tick the minecart is on an activator rail. + */ + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower) + { + if (receivingPower && this.ticksExisted - this.activatorRailCooldown >= 4) + { + this.getCommandBlockLogic().trigger(this.world); + this.activatorRailCooldown = this.ticksExisted; + } + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (super.processInitialInteract(player, hand)) return true; + this.commandBlockLogic.tryOpenEditCommandBlock(player); + return false; + } + + public void notifyDataManagerChange(DataParameter key) + { + super.notifyDataManagerChange(key); + + if (LAST_OUTPUT.equals(key)) + { + try + { + this.commandBlockLogic.setLastOutput((ITextComponent)this.getDataManager().get(LAST_OUTPUT)); + } + catch (Throwable var3) + { + ; + } + } + else if (COMMAND.equals(key)) + { + this.commandBlockLogic.setCommand((String)this.getDataManager().get(COMMAND)); + } + } + + public boolean ignoreItemEntityData() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartContainer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartContainer.java new file mode 100644 index 0000000..7b1d099 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartContainer.java @@ -0,0 +1,366 @@ +package net.minecraft.entity.item; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.LockCode; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.ILootContainer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; + +public abstract class EntityMinecartContainer extends EntityMinecart implements ILockableContainer, ILootContainer +{ + private NonNullList minecartContainerItems = NonNullList.withSize(36, ItemStack.EMPTY); + /** + * When set to true, the minecart will drop all items when setDead() is called. When false (such as when travelling + * dimensions) it preserves its contents. + */ + public boolean dropContentsWhenDead = true; + private ResourceLocation lootTable; + private long lootTableSeed; + + public EntityMinecartContainer(World worldIn) + { + super(worldIn); + } + + public EntityMinecartContainer(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public void killMinecart(DamageSource source) + { + super.killMinecart(source); + + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + InventoryHelper.dropInventoryItems(this.world, this, this); + } + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.minecartContainerItems) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + this.addLoot((EntityPlayer)null); + return this.minecartContainerItems.get(index); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + this.addLoot((EntityPlayer)null); + return ItemStackHelper.getAndSplit(this.minecartContainerItems, index, count); + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + this.addLoot((EntityPlayer)null); + ItemStack itemstack = this.minecartContainerItems.get(index); + + if (itemstack.isEmpty()) + { + return ItemStack.EMPTY; + } + else + { + this.minecartContainerItems.set(index, ItemStack.EMPTY); + return itemstack; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + this.addLoot((EntityPlayer)null); + this.minecartContainerItems.set(index, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + if (this.isDead) + { + return false; + } + else + { + return player.getDistanceSq(this) <= 64.0D; + } + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + @Nullable + public Entity changeDimension(int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + this.dropContentsWhenDead = false; + return super.changeDimension(dimensionIn, teleporter); + } + + /** + * Will get destroyed next tick. + */ + public void setDead() + { + if (this.dropContentsWhenDead) + { + InventoryHelper.dropInventoryItems(this.world, this, this); + } + + super.setDead(); + } + + /** + * Sets whether this entity should drop its items when setDead() is called. This applies to container minecarts. + */ + public void setDropItemsWhenDead(boolean dropWhenDead) + { + this.dropContentsWhenDead = dropWhenDead; + } + + public static void addDataFixers(DataFixer p_190574_0_, Class p_190574_1_) + { + EntityMinecart.registerFixesMinecart(p_190574_0_, p_190574_1_); + p_190574_0_.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(p_190574_1_, new String[] {"Items"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (this.lootTable != null) + { + compound.setString("LootTable", this.lootTable.toString()); + + if (this.lootTableSeed != 0L) + { + compound.setLong("LootTableSeed", this.lootTableSeed); + } + } + else + { + ItemStackHelper.saveAllItems(compound, this.minecartContainerItems); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.minecartContainerItems = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + if (compound.hasKey("LootTable", 8)) + { + this.lootTable = new ResourceLocation(compound.getString("LootTable")); + this.lootTableSeed = compound.getLong("LootTableSeed"); + } + else + { + ItemStackHelper.loadAllItems(compound, this.minecartContainerItems); + } + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (super.processInitialInteract(player, hand)) return true; + if (!this.world.isRemote) + { + player.displayGUIChest(this); + } + + return true; + } + + protected void applyDrag() + { + float f = 0.98F; + + if (this.lootTable == null) + { + int i = 15 - Container.calcRedstoneFromInventory(this); + f += (float)i * 0.001F; + } + + this.motionX *= (double)f; + this.motionY *= 0.0D; + this.motionZ *= (double)f; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public boolean isLocked() + { + return false; + } + + public void setLockCode(LockCode code) + { + } + + public LockCode getLockCode() + { + return LockCode.EMPTY_CODE; + } + + /** + * Adds loot to the minecart's contents. + */ + public void addLoot(@Nullable EntityPlayer player) + { + if (this.lootTable != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); + this.lootTable = null; + Random random; + + if (this.lootTableSeed == 0L) + { + random = new Random(); + } + else + { + random = new Random(this.lootTableSeed); + } + + LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer)this.world).withLootedEntity(this); // Forge: add looted entity to LootContext + + if (player != null) + { + lootcontext$builder.withLuck(player.getLuck()).withPlayer(player); // Forge: add player to LootContext + } + + loottable.fillInventory(this, random, lootcontext$builder.build()); + } + } + + public net.minecraftforge.items.IItemHandler itemHandler = new net.minecraftforge.items.wrapper.InvWrapper(this); + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + if (capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + return (T) itemHandler; + } + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + public void clear() + { + this.addLoot((EntityPlayer)null); + this.minecartContainerItems.clear(); + } + + public void setLootTable(ResourceLocation lootTableIn, long lootTableSeedIn) + { + this.lootTable = lootTableIn; + this.lootTableSeed = lootTableSeedIn; + } + + public ResourceLocation getLootTable() + { + return this.lootTable; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartEmpty.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartEmpty.java new file mode 100644 index 0000000..6f58048 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartEmpty.java @@ -0,0 +1,74 @@ +package net.minecraft.entity.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumHand; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; + +public class EntityMinecartEmpty extends EntityMinecart +{ + public EntityMinecartEmpty(World worldIn) + { + super(worldIn); + } + + public EntityMinecartEmpty(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesMinecartEmpty(DataFixer fixer) + { + EntityMinecart.registerFixesMinecart(fixer, EntityMinecartEmpty.class); + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (super.processInitialInteract(player, hand)) return true; + + if (player.isSneaking()) + { + return false; + } + else if (this.isBeingRidden()) + { + return true; + } + else + { + if (!this.world.isRemote) + { + player.startRiding(this); + } + + return true; + } + } + + /** + * Called every tick the minecart is on an activator rail. + */ + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower) + { + if (receivingPower) + { + if (this.isBeingRidden()) + { + this.removePassengers(); + } + + if (this.getRollingAmplitude() == 0) + { + this.setRollingDirection(-this.getRollingDirection()); + this.setRollingAmplitude(10); + this.setDamage(50.0F); + this.markVelocityChanged(); + } + } + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.RIDEABLE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartFurnace.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartFurnace.java new file mode 100644 index 0000000..c372eb9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartFurnace.java @@ -0,0 +1,207 @@ +package net.minecraft.entity.item; + +import net.minecraft.block.BlockFurnace; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class EntityMinecartFurnace extends EntityMinecart +{ + private static final DataParameter POWERED = EntityDataManager.createKey(EntityMinecartFurnace.class, DataSerializers.BOOLEAN); + private int fuel; + public double pushX; + public double pushZ; + + public EntityMinecartFurnace(World worldIn) + { + super(worldIn); + } + + public EntityMinecartFurnace(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesMinecartFurnace(DataFixer fixer) + { + EntityMinecart.registerFixesMinecart(fixer, EntityMinecartFurnace.class); + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.FURNACE; + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(POWERED, Boolean.valueOf(false)); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.fuel > 0) + { + --this.fuel; + } + + if (this.fuel <= 0) + { + this.pushX = 0.0D; + this.pushZ = 0.0D; + } + + this.setMinecartPowered(this.fuel > 0); + + if (this.isMinecartPowered() && this.rand.nextInt(4) == 0) + { + this.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX, this.posY + 0.8D, this.posZ, 0.0D, 0.0D, 0.0D); + } + } + + /** + * Get's the maximum speed for a minecart + */ + protected double getMaximumSpeed() + { + return 0.2D; + } + + public void killMinecart(DamageSource source) + { + super.killMinecart(source); + + if (!source.isExplosion() && this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.entityDropItem(new ItemStack(Blocks.FURNACE, 1), 0.0F); + } + } + + protected void moveAlongTrack(BlockPos pos, IBlockState state) + { + super.moveAlongTrack(pos, state); + double d0 = this.pushX * this.pushX + this.pushZ * this.pushZ; + + if (d0 > 1.0E-4D && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.001D) + { + d0 = (double)MathHelper.sqrt(d0); + this.pushX /= d0; + this.pushZ /= d0; + + if (this.pushX * this.motionX + this.pushZ * this.motionZ < 0.0D) + { + this.pushX = 0.0D; + this.pushZ = 0.0D; + } + else + { + double d1 = d0 / this.getMaximumSpeed(); + this.pushX *= d1; + this.pushZ *= d1; + } + } + } + + protected void applyDrag() + { + double d0 = this.pushX * this.pushX + this.pushZ * this.pushZ; + + if (d0 > 1.0E-4D) + { + d0 = (double)MathHelper.sqrt(d0); + this.pushX /= d0; + this.pushZ /= d0; + double d1 = 1.0D; + this.motionX *= 0.800000011920929D; + this.motionY *= 0.0D; + this.motionZ *= 0.800000011920929D; + this.motionX += this.pushX * 1.0D; + this.motionZ += this.pushZ * 1.0D; + } + else + { + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.0D; + this.motionZ *= 0.9800000190734863D; + } + + super.applyDrag(); + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (super.processInitialInteract(player, hand)) return true; + + if (itemstack.getItem() == Items.COAL && this.fuel + 3600 <= 32000) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + this.fuel += 3600; + } + + this.pushX = this.posX - player.posX; + this.pushZ = this.posZ - player.posZ; + return true; + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setDouble("PushX", this.pushX); + compound.setDouble("PushZ", this.pushZ); + compound.setShort("Fuel", (short)this.fuel); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.pushX = compound.getDouble("PushX"); + this.pushZ = compound.getDouble("PushZ"); + this.fuel = compound.getShort("Fuel"); + } + + protected boolean isMinecartPowered() + { + return ((Boolean)this.dataManager.get(POWERED)).booleanValue(); + } + + protected void setMinecartPowered(boolean p_94107_1_) + { + this.dataManager.set(POWERED, Boolean.valueOf(p_94107_1_)); + } + + public IBlockState getDefaultDisplayTile() + { + return (this.isMinecartPowered() ? Blocks.LIT_FURNACE : Blocks.FURNACE).getDefaultState().withProperty(BlockFurnace.FACING, EnumFacing.NORTH); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartHopper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartHopper.java new file mode 100644 index 0000000..cd5e2aa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartHopper.java @@ -0,0 +1,246 @@ +package net.minecraft.entity.item; + +import java.util.List; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerHopper; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.IHopper; +import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumHand; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityMinecartHopper extends EntityMinecartContainer implements IHopper +{ + /** Whether this hopper minecart is being blocked by an activator rail. */ + private boolean isBlocked = true; + private int transferTicker = -1; + private final BlockPos lastPosition = BlockPos.ORIGIN; + + public EntityMinecartHopper(World worldIn) + { + super(worldIn); + } + + public EntityMinecartHopper(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.HOPPER; + } + + public IBlockState getDefaultDisplayTile() + { + return Blocks.HOPPER.getDefaultState(); + } + + public int getDefaultDisplayTileOffset() + { + return 1; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return 5; + } + + public boolean processInitialInteract(EntityPlayer player, EnumHand hand) + { + if (super.processInitialInteract(player, hand)) return true; + if (!this.world.isRemote) + { + player.displayGUIChest(this); + } + + return true; + } + + /** + * Called every tick the minecart is on an activator rail. + */ + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower) + { + boolean flag = !receivingPower; + + if (flag != this.getBlocked()) + { + this.setBlocked(flag); + } + } + + /** + * Get whether this hopper minecart is being blocked by an activator rail. + */ + public boolean getBlocked() + { + return this.isBlocked; + } + + /** + * Set whether this hopper minecart is being blocked by an activator rail. + */ + public void setBlocked(boolean p_96110_1_) + { + this.isBlocked = p_96110_1_; + } + + /** + * Returns the worldObj for this tileEntity. + */ + public World getWorld() + { + return this.world; + } + + /** + * Gets the world X position for this hopper entity. + */ + public double getXPos() + { + return this.posX; + } + + /** + * Gets the world Y position for this hopper entity. + */ + public double getYPos() + { + return this.posY + 0.5D; + } + + /** + * Gets the world Z position for this hopper entity. + */ + public double getZPos() + { + return this.posZ; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote && this.isEntityAlive() && this.getBlocked()) + { + BlockPos blockpos = new BlockPos(this); + + if (blockpos.equals(this.lastPosition)) + { + --this.transferTicker; + } + else + { + this.setTransferTicker(0); + } + + if (!this.canTransfer()) + { + this.setTransferTicker(0); + + if (this.captureDroppedItems()) + { + this.setTransferTicker(4); + this.markDirty(); + } + } + } + } + + public boolean captureDroppedItems() + { + if (TileEntityHopper.pullItems(this)) + { + return true; + } + else + { + List list = this.world.getEntitiesWithinAABB(EntityItem.class, this.getEntityBoundingBox().grow(0.25D, 0.0D, 0.25D), EntitySelectors.IS_ALIVE); + + if (!list.isEmpty()) + { + TileEntityHopper.putDropInInventoryAllSlots((IInventory)null, this, list.get(0)); + } + + return false; + } + } + + public void killMinecart(DamageSource source) + { + super.killMinecart(source); + + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.dropItemWithOffset(Item.getItemFromBlock(Blocks.HOPPER), 1, 0.0F); + } + } + + public static void registerFixesMinecartHopper(DataFixer fixer) + { + EntityMinecartContainer.addDataFixers(fixer, EntityMinecartHopper.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("TransferCooldown", this.transferTicker); + compound.setBoolean("Enabled", this.isBlocked); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.transferTicker = compound.getInteger("TransferCooldown"); + this.isBlocked = compound.hasKey("Enabled") ? compound.getBoolean("Enabled") : true; + } + + /** + * Sets the transfer ticker, used to determine the delay between transfers. + */ + public void setTransferTicker(int p_98042_1_) + { + this.transferTicker = p_98042_1_; + } + + /** + * Returns whether the hopper cart can currently transfer an item. + */ + public boolean canTransfer() + { + return this.transferTicker > 0; + } + + public String getGuiID() + { + return "minecraft:hopper"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerHopper(playerInventory, this, playerIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartMobSpawner.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartMobSpawner.java new file mode 100644 index 0000000..68c7069 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartMobSpawner.java @@ -0,0 +1,118 @@ +package net.minecraft.entity.item; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityList; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.MobSpawnerBaseLogic; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityMinecartMobSpawner extends EntityMinecart +{ + /** Mob spawner logic for this spawner minecart. */ + private final MobSpawnerBaseLogic mobSpawnerLogic = new MobSpawnerBaseLogic() + { + public void broadcastEvent(int id) + { + EntityMinecartMobSpawner.this.world.setEntityState(EntityMinecartMobSpawner.this, (byte)id); + } + public World getSpawnerWorld() + { + return EntityMinecartMobSpawner.this.world; + } + public BlockPos getSpawnerPosition() + { + return new BlockPos(EntityMinecartMobSpawner.this); + } + public net.minecraft.entity.Entity getSpawnerEntity() { + return EntityMinecartMobSpawner.this; + } + }; + + public EntityMinecartMobSpawner(World worldIn) + { + super(worldIn); + } + + public EntityMinecartMobSpawner(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesMinecartMobSpawner(DataFixer fixer) + { + registerFixesMinecart(fixer, EntityMinecartMobSpawner.class); + fixer.registerWalker(FixTypes.ENTITY, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + String s = compound.getString("id"); + + if (EntityList.getKey(EntityMinecartMobSpawner.class).equals(new ResourceLocation(s))) + { + compound.setString("id", TileEntity.getKey(TileEntityMobSpawner.class).toString()); + fixer.process(FixTypes.BLOCK_ENTITY, compound, versionIn); + compound.setString("id", s); + } + + return compound; + } + }); + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.SPAWNER; + } + + public IBlockState getDefaultDisplayTile() + { + return Blocks.MOB_SPAWNER.getDefaultState(); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.mobSpawnerLogic.readFromNBT(compound); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + this.mobSpawnerLogic.writeToNBT(compound); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + this.mobSpawnerLogic.setDelayToMin(id); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + this.mobSpawnerLogic.updateSpawner(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartTNT.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartTNT.java new file mode 100644 index 0000000..6e604cf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityMinecartTNT.java @@ -0,0 +1,248 @@ +package net.minecraft.entity.item; + +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityMinecartTNT extends EntityMinecart +{ + private int minecartTNTFuse = -1; + + public EntityMinecartTNT(World worldIn) + { + super(worldIn); + } + + public EntityMinecartTNT(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesMinecartTNT(DataFixer fixer) + { + EntityMinecart.registerFixesMinecart(fixer, EntityMinecartTNT.class); + } + + public EntityMinecart.Type getType() + { + return EntityMinecart.Type.TNT; + } + + public IBlockState getDefaultDisplayTile() + { + return Blocks.TNT.getDefaultState(); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.minecartTNTFuse > 0) + { + --this.minecartTNTFuse; + this.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + else if (this.minecartTNTFuse == 0) + { + this.explodeCart(this.motionX * this.motionX + this.motionZ * this.motionZ); + } + + if (this.collidedHorizontally) + { + double d0 = this.motionX * this.motionX + this.motionZ * this.motionZ; + + if (d0 >= 0.009999999776482582D) + { + this.explodeCart(d0); + } + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + Entity entity = source.getImmediateSource(); + + if (entity instanceof EntityArrow) + { + EntityArrow entityarrow = (EntityArrow)entity; + + if (entityarrow.isBurning()) + { + this.explodeCart(entityarrow.motionX * entityarrow.motionX + entityarrow.motionY * entityarrow.motionY + entityarrow.motionZ * entityarrow.motionZ); + } + } + + return super.attackEntityFrom(source, amount); + } + + public void killMinecart(DamageSource source) + { + double d0 = this.motionX * this.motionX + this.motionZ * this.motionZ; + + if (!source.isFireDamage() && !source.isExplosion() && d0 < 0.009999999776482582D) + { + super.killMinecart(source); + + if (!source.isExplosion() && this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.entityDropItem(new ItemStack(Blocks.TNT, 1), 0.0F); + } + } + else + { + if (this.minecartTNTFuse < 0) + { + this.ignite(); + this.minecartTNTFuse = this.rand.nextInt(20) + this.rand.nextInt(20); + } + } + } + + /** + * Makes the minecart explode. + */ + protected void explodeCart(double p_94103_1_) + { + if (!this.world.isRemote) + { + double d0 = Math.sqrt(p_94103_1_); + + if (d0 > 5.0D) + { + d0 = 5.0D; + } + + this.world.createExplosion(this, this.posX, this.posY, this.posZ, (float)(4.0D + this.rand.nextDouble() * 1.5D * d0), true); + this.setDead(); + } + } + + public void fall(float distance, float damageMultiplier) + { + if (distance >= 3.0F) + { + float f = distance / 10.0F; + this.explodeCart((double)(f * f)); + } + + super.fall(distance, damageMultiplier); + } + + /** + * Called every tick the minecart is on an activator rail. + */ + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower) + { + if (receivingPower && this.minecartTNTFuse < 0) + { + this.ignite(); + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 10) + { + this.ignite(); + } + else + { + super.handleStatusUpdate(id); + } + } + + /** + * Ignites this TNT cart. + */ + public void ignite() + { + this.minecartTNTFuse = 80; + + if (!this.world.isRemote) + { + this.world.setEntityState(this, (byte)10); + + if (!this.isSilent()) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + } + } + } + + /** + * Gets the remaining fuse time in ticks. + */ + @SideOnly(Side.CLIENT) + public int getFuseTicks() + { + return this.minecartTNTFuse; + } + + /** + * Returns true if the TNT minecart is ignited. + */ + public boolean isIgnited() + { + return this.minecartTNTFuse > -1; + } + + /** + * Explosion resistance of a block relative to this entity + */ + public float getExplosionResistance(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn) + { + return !this.isIgnited() || !BlockRailBase.isRailBlock(blockStateIn) && !BlockRailBase.isRailBlock(worldIn, pos.up()) ? super.getExplosionResistance(explosionIn, worldIn, pos, blockStateIn) : 0.0F; + } + + public boolean canExplosionDestroyBlock(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn, float p_174816_5_) + { + return !this.isIgnited() || !BlockRailBase.isRailBlock(blockStateIn) && !BlockRailBase.isRailBlock(worldIn, pos.up()) ? super.canExplosionDestroyBlock(explosionIn, worldIn, pos, blockStateIn, p_174816_5_) : false; + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("TNTFuse", 99)) + { + this.minecartTNTFuse = compound.getInteger("TNTFuse"); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("TNTFuse", this.minecartTNTFuse); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityPainting.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityPainting.java new file mode 100644 index 0000000..8fb7e11 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityPainting.java @@ -0,0 +1,223 @@ +package net.minecraft.entity.item; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityPainting extends EntityHanging +{ + public EntityPainting.EnumArt art; + + public EntityPainting(World worldIn) + { + super(worldIn); + } + + public EntityPainting(World worldIn, BlockPos pos, EnumFacing facing) + { + super(worldIn, pos); + List list = Lists.newArrayList(); + int i = 0; + + for (EntityPainting.EnumArt entitypainting$enumart : EntityPainting.EnumArt.values()) + { + this.art = entitypainting$enumart; + this.updateFacingWithBoundingBox(facing); + + if (this.onValidSurface()) + { + list.add(entitypainting$enumart); + int j = entitypainting$enumart.sizeX * entitypainting$enumart.sizeY; + + if (j > i) + { + i = j; + } + } + } + + if (!list.isEmpty()) + { + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + EntityPainting.EnumArt entitypainting$enumart1 = iterator.next(); + + if (entitypainting$enumart1.sizeX * entitypainting$enumart1.sizeY < i) + { + iterator.remove(); + } + } + + this.art = list.get(this.rand.nextInt(list.size())); + } + + this.updateFacingWithBoundingBox(facing); + } + + @SideOnly(Side.CLIENT) + public EntityPainting(World worldIn, BlockPos pos, EnumFacing facing, String title) + { + this(worldIn, pos, facing); + + for (EntityPainting.EnumArt entitypainting$enumart : EntityPainting.EnumArt.values()) + { + if (entitypainting$enumart.title.equals(title)) + { + this.art = entitypainting$enumart; + break; + } + } + + this.updateFacingWithBoundingBox(facing); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setString("Motive", this.art.title); + super.writeEntityToNBT(compound); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + String s = compound.getString("Motive"); + + for (EntityPainting.EnumArt entitypainting$enumart : EntityPainting.EnumArt.values()) + { + if (entitypainting$enumart.title.equals(s)) + { + this.art = entitypainting$enumart; + } + } + + if (this.art == null) + { + this.art = EntityPainting.EnumArt.KEBAB; + } + + super.readEntityFromNBT(compound); + } + + public int getWidthPixels() + { + return this.art.sizeX; + } + + public int getHeightPixels() + { + return this.art.sizeY; + } + + /** + * Called when this entity is broken. Entity parameter may be null. + */ + public void onBroken(@Nullable Entity brokenEntity) + { + if (this.world.getGameRules().getBoolean("doEntityDrops")) + { + this.playSound(SoundEvents.ENTITY_PAINTING_BREAK, 1.0F, 1.0F); + + if (brokenEntity instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)brokenEntity; + + if (entityplayer.capabilities.isCreativeMode) + { + return; + } + } + + this.entityDropItem(new ItemStack(Items.PAINTING), 0.0F); + } + } + + public void playPlaceSound() + { + this.playSound(SoundEvents.ENTITY_PAINTING_PLACE, 1.0F, 1.0F); + } + + /** + * Sets the location and Yaw/Pitch of an entity in the world + */ + public void setLocationAndAngles(double x, double y, double z, float yaw, float pitch) + { + this.setPosition(x, y, z); + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + BlockPos blockpos = this.hangingPosition.add(x - this.posX, y - this.posY, z - this.posZ); + this.setPosition((double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ()); + } + + public static enum EnumArt + { + KEBAB("Kebab", 16, 16, 0, 0), + AZTEC("Aztec", 16, 16, 16, 0), + ALBAN("Alban", 16, 16, 32, 0), + AZTEC_2("Aztec2", 16, 16, 48, 0), + BOMB("Bomb", 16, 16, 64, 0), + PLANT("Plant", 16, 16, 80, 0), + WASTELAND("Wasteland", 16, 16, 96, 0), + POOL("Pool", 32, 16, 0, 32), + COURBET("Courbet", 32, 16, 32, 32), + SEA("Sea", 32, 16, 64, 32), + SUNSET("Sunset", 32, 16, 96, 32), + CREEBET("Creebet", 32, 16, 128, 32), + WANDERER("Wanderer", 16, 32, 0, 64), + GRAHAM("Graham", 16, 32, 16, 64), + MATCH("Match", 32, 32, 0, 128), + BUST("Bust", 32, 32, 32, 128), + STAGE("Stage", 32, 32, 64, 128), + VOID("Void", 32, 32, 96, 128), + SKULL_AND_ROSES("SkullAndRoses", 32, 32, 128, 128), + WITHER("Wither", 32, 32, 160, 128), + FIGHTERS("Fighters", 64, 32, 0, 96), + POINTER("Pointer", 64, 64, 0, 192), + PIGSCENE("Pigscene", 64, 64, 64, 192), + BURNING_SKULL("BurningSkull", 64, 64, 128, 192), + SKELETON("Skeleton", 64, 48, 192, 64), + DONKEY_KONG("DonkeyKong", 64, 48, 192, 112); + + public static final int MAX_NAME_LENGTH = "SkullAndRoses".length(); + /** Painting Title. */ + public final String title; + public final int sizeX; + public final int sizeY; + public final int offsetX; + public final int offsetY; + + private EnumArt(String titleIn, int width, int height, int textureU, int textureV) + { + this.title = titleIn; + this.sizeX = width; + this.sizeY = height; + this.offsetX = textureU; + this.offsetY = textureV; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityTNTPrimed.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityTNTPrimed.java new file mode 100644 index 0000000..09f021a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityTNTPrimed.java @@ -0,0 +1,174 @@ +package net.minecraft.entity.item; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; + +public class EntityTNTPrimed extends Entity +{ + private static final DataParameter FUSE = EntityDataManager.createKey(EntityTNTPrimed.class, DataSerializers.VARINT); + @Nullable + private EntityLivingBase tntPlacedBy; + /** How long the fuse is */ + private int fuse; + + public EntityTNTPrimed(World worldIn) + { + super(worldIn); + this.fuse = 80; + this.preventEntitySpawning = true; + this.isImmuneToFire = true; + this.setSize(0.98F, 0.98F); + } + + public EntityTNTPrimed(World worldIn, double x, double y, double z, EntityLivingBase igniter) + { + this(worldIn); + this.setPosition(x, y, z); + float f = (float)(Math.random() * (Math.PI * 2D)); + this.motionX = (double)(-((float)Math.sin((double)f)) * 0.02F); + this.motionY = 0.20000000298023224D; + this.motionZ = (double)(-((float)Math.cos((double)f)) * 0.02F); + this.setFuse(80); + this.prevPosX = x; + this.prevPosY = y; + this.prevPosZ = z; + this.tntPlacedBy = igniter; + } + + protected void entityInit() + { + this.dataManager.register(FUSE, Integer.valueOf(80)); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return !this.isDead; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.03999999910593033D; + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.9800000190734863D; + this.motionY *= 0.9800000190734863D; + this.motionZ *= 0.9800000190734863D; + + if (this.onGround) + { + this.motionX *= 0.699999988079071D; + this.motionZ *= 0.699999988079071D; + this.motionY *= -0.5D; + } + + --this.fuse; + + if (this.fuse <= 0) + { + this.setDead(); + + if (!this.world.isRemote) + { + this.explode(); + } + } + else + { + this.handleWaterMovement(); + this.world.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + } + + private void explode() + { + float f = 4.0F; + this.world.createExplosion(this, this.posX, this.posY + (double)(this.height / 16.0F), this.posZ, 4.0F, true); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + compound.setShort("Fuse", (short)this.getFuse()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + this.setFuse(compound.getShort("Fuse")); + } + + /** + * returns null or the entityliving it was placed or ignited by + */ + @Nullable + public EntityLivingBase getTntPlacedBy() + { + return this.tntPlacedBy; + } + + public float getEyeHeight() + { + return 0.0F; + } + + public void setFuse(int fuseIn) + { + this.dataManager.set(FUSE, Integer.valueOf(fuseIn)); + this.fuse = fuseIn; + } + + public void notifyDataManagerChange(DataParameter key) + { + if (FUSE.equals(key)) + { + this.fuse = this.getFuseDataManager(); + } + } + + /** + * Gets the fuse from the data manager + */ + public int getFuseDataManager() + { + return ((Integer)this.dataManager.get(FUSE)).intValue(); + } + + public int getFuse() + { + return this.fuse; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityXPOrb.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityXPOrb.java new file mode 100644 index 0000000..36d08a2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/EntityXPOrb.java @@ -0,0 +1,388 @@ +package net.minecraft.entity.item; + +import net.minecraft.block.material.Material; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Enchantments; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityXPOrb extends Entity +{ + /** A constantly increasing value that RenderXPOrb uses to control the colour shifting (Green / yellow) */ + public int xpColor; + /** The age of the XP orb in ticks. */ + public int xpOrbAge; + public int delayBeforeCanPickup; + /** The health of this XP orb. */ + private int xpOrbHealth = 5; + /** This is how much XP this orb has. */ + public int xpValue; + /** The closest EntityPlayer to this orb. */ + private EntityPlayer closestPlayer; + /** Threshold color for tracking players */ + private int xpTargetColor; + + public EntityXPOrb(World worldIn, double x, double y, double z, int expValue) + { + super(worldIn); + this.setSize(0.5F, 0.5F); + this.setPosition(x, y, z); + this.rotationYaw = (float)(Math.random() * 360.0D); + this.motionX = (double)((float)(Math.random() * 0.20000000298023224D - 0.10000000149011612D) * 2.0F); + this.motionY = (double)((float)(Math.random() * 0.2D) * 2.0F); + this.motionZ = (double)((float)(Math.random() * 0.20000000298023224D - 0.10000000149011612D) * 2.0F); + this.xpValue = expValue; + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + public EntityXPOrb(World worldIn) + { + super(worldIn); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() + { + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + float f = 0.5F; + f = MathHelper.clamp(f, 0.0F, 1.0F); + int i = super.getBrightnessForRender(); + int j = i & 255; + int k = i >> 16 & 255; + j = j + (int)(f * 15.0F * 16.0F); + + if (j > 240) + { + j = 240; + } + + return j | k << 16; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.delayBeforeCanPickup > 0) + { + --this.delayBeforeCanPickup; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.029999999329447746D; + } + + if (this.world.getBlockState(new BlockPos(this)).getMaterial() == Material.LAVA) + { + this.motionY = 0.20000000298023224D; + this.motionX = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.motionZ = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.playSound(SoundEvents.ENTITY_GENERIC_BURN, 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + this.pushOutOfBlocks(this.posX, (this.getEntityBoundingBox().minY + this.getEntityBoundingBox().maxY) / 2.0D, this.posZ); + double d0 = 8.0D; + + if (this.xpTargetColor < this.xpColor - 20 + this.getEntityId() % 100) + { + if (this.closestPlayer == null || this.closestPlayer.getDistanceSq(this) > 64.0D) + { + this.closestPlayer = this.world.getClosestPlayerToEntity(this, 8.0D); + } + + this.xpTargetColor = this.xpColor; + } + + if (this.closestPlayer != null && this.closestPlayer.isSpectator()) + { + this.closestPlayer = null; + } + + if (this.closestPlayer != null) + { + double d1 = (this.closestPlayer.posX - this.posX) / 8.0D; + double d2 = (this.closestPlayer.posY + (double)this.closestPlayer.getEyeHeight() / 2.0D - this.posY) / 8.0D; + double d3 = (this.closestPlayer.posZ - this.posZ) / 8.0D; + double d4 = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3); + double d5 = 1.0D - d4; + + if (d5 > 0.0D) + { + d5 = d5 * d5; + this.motionX += d1 / d4 * d5 * 0.1D; + this.motionY += d2 / d4 * d5 * 0.1D; + this.motionZ += d3 / d4 * d5 * 0.1D; + } + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + float f = 0.98F; + + if (this.onGround) + { + BlockPos underPos = new BlockPos(MathHelper.floor(this.posX), MathHelper.floor(this.getEntityBoundingBox().minY) - 1, MathHelper.floor(this.posZ)); + net.minecraft.block.state.IBlockState underState = this.world.getBlockState(underPos); + f = underState.getBlock().getSlipperiness(underState, this.world, underPos, this) * 0.98F; + } + + this.motionX *= (double)f; + this.motionY *= 0.9800000190734863D; + this.motionZ *= (double)f; + + if (this.onGround) + { + this.motionY *= -0.8999999761581421D; + } + + ++this.xpColor; + ++this.xpOrbAge; + + if (this.xpOrbAge >= 6000) + { + this.setDead(); + } + } + + /** + * Returns if this entity is in water and will end up adding the waters velocity to the entity + */ + public boolean handleWaterMovement() + { + return this.world.handleMaterialAcceleration(this.getEntityBoundingBox(), Material.WATER, this); + } + + /** + * Will deal the specified amount of fire damage to the entity if the entity isn't immune to fire damage. + */ + protected void dealFireDamage(int amount) + { + this.attackEntityFrom(DamageSource.IN_FIRE, (float)amount); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.world.isRemote || this.isDead) return false; //Forge: Fixes MC-53850 + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + this.markVelocityChanged(); + this.xpOrbHealth = (int)((float)this.xpOrbHealth - amount); + + if (this.xpOrbHealth <= 0) + { + this.setDead(); + } + + return false; + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setShort("Health", (short)this.xpOrbHealth); + compound.setShort("Age", (short)this.xpOrbAge); + compound.setShort("Value", (short)this.xpValue); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.xpOrbHealth = compound.getShort("Health"); + this.xpOrbAge = compound.getShort("Age"); + this.xpValue = compound.getShort("Value"); + } + + /** + * Called by a player entity when they collide with an entity + */ + public void onCollideWithPlayer(EntityPlayer entityIn) + { + if (!this.world.isRemote) + { + if (this.delayBeforeCanPickup == 0 && entityIn.xpCooldown == 0) + { + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerPickupXpEvent(entityIn, this))) return; + entityIn.xpCooldown = 2; + entityIn.onItemPickup(this, 1); + ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantments.MENDING, entityIn); + + if (!itemstack.isEmpty() && itemstack.isItemDamaged()) + { + int i = Math.min(this.xpToDurability(this.xpValue), itemstack.getItemDamage()); + this.xpValue -= this.durabilityToXp(i); + itemstack.setItemDamage(itemstack.getItemDamage() - i); + } + + if (this.xpValue > 0) + { + entityIn.addExperience(this.xpValue); + } + + this.setDead(); + } + } + } + + private int durabilityToXp(int durability) + { + return durability / 2; + } + + private int xpToDurability(int xp) + { + return xp * 2; + } + + /** + * Returns the XP value of this XP orb. + */ + public int getXpValue() + { + return this.xpValue; + } + + /** + * Returns a number from 1 to 10 based on how much XP this orb is worth. This is used by RenderXPOrb to determine + * what texture to use. + */ + @SideOnly(Side.CLIENT) + public int getTextureByXP() + { + if (this.xpValue >= 2477) + { + return 10; + } + else if (this.xpValue >= 1237) + { + return 9; + } + else if (this.xpValue >= 617) + { + return 8; + } + else if (this.xpValue >= 307) + { + return 7; + } + else if (this.xpValue >= 149) + { + return 6; + } + else if (this.xpValue >= 73) + { + return 5; + } + else if (this.xpValue >= 37) + { + return 4; + } + else if (this.xpValue >= 17) + { + return 3; + } + else if (this.xpValue >= 7) + { + return 2; + } + else + { + return this.xpValue >= 3 ? 1 : 0; + } + } + + /** + * Get a fragment of the maximum experience points value for the supplied value of experience points value. + */ + public static int getXPSplit(int expValue) + { + if (expValue >= 2477) + { + return 2477; + } + else if (expValue >= 1237) + { + return 1237; + } + else if (expValue >= 617) + { + return 617; + } + else if (expValue >= 307) + { + return 307; + } + else if (expValue >= 149) + { + return 149; + } + else if (expValue >= 73) + { + return 73; + } + else if (expValue >= 37) + { + return 37; + } + else if (expValue >= 17) + { + return 17; + } + else if (expValue >= 7) + { + return 7; + } + else + { + return expValue >= 3 ? 3 : 1; + } + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/item/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/item/package-info.java new file mode 100644 index 0000000..ace56e1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/item/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.item; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/AbstractIllager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/AbstractIllager.java new file mode 100644 index 0000000..7e2aace --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/AbstractIllager.java @@ -0,0 +1,71 @@ +package net.minecraft.entity.monster; + +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class AbstractIllager extends EntityMob +{ + protected static final DataParameter AGGRESSIVE = EntityDataManager.createKey(AbstractIllager.class, DataSerializers.BYTE); + + public AbstractIllager(World p_i47509_1_) + { + super(p_i47509_1_); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(AGGRESSIVE, Byte.valueOf((byte)0)); + } + + @SideOnly(Side.CLIENT) + protected boolean isAggressive(int mask) + { + int i = ((Byte)this.dataManager.get(AGGRESSIVE)).byteValue(); + return (i & mask) != 0; + } + + protected void setAggressive(int mask, boolean value) + { + int i = ((Byte)this.dataManager.get(AGGRESSIVE)).byteValue(); + + if (value) + { + i = i | mask; + } + else + { + i = i & ~mask; + } + + this.dataManager.set(AGGRESSIVE, Byte.valueOf((byte)(i & 255))); + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ILLAGER; + } + + @SideOnly(Side.CLIENT) + public AbstractIllager.IllagerArmPose getArmPose() + { + return AbstractIllager.IllagerArmPose.CROSSED; + } + + @SideOnly(Side.CLIENT) + public static enum IllagerArmPose + { + CROSSED, + ATTACKING, + SPELLCASTING, + BOW_AND_ARROW; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/AbstractSkeleton.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/AbstractSkeleton.java new file mode 100644 index 0000000..da7ab0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/AbstractSkeleton.java @@ -0,0 +1,304 @@ +package net.minecraft.entity.monster; + +import java.util.Calendar; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIAttackRangedBow; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIFleeSun; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIRestrictSun; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class AbstractSkeleton extends EntityMob implements IRangedAttackMob +{ + private static final DataParameter SWINGING_ARMS = EntityDataManager.createKey(AbstractSkeleton.class, DataSerializers.BOOLEAN); + private final EntityAIAttackRangedBow aiArrowAttack = new EntityAIAttackRangedBow(this, 1.0D, 20, 15.0F); + private final EntityAIAttackMelee aiAttackOnCollide = new EntityAIAttackMelee(this, 1.2D, false) + { + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + AbstractSkeleton.this.setSwingingArms(false); + } + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + AbstractSkeleton.this.setSwingingArms(true); + } + }; + + public AbstractSkeleton(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.99F); + this.setCombatTask(); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIRestrictSun(this)); + this.tasks.addTask(3, new EntityAIFleeSun(this, 1.0D)); + this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityWolf.class, 6.0F, 1.0D, 1.2D)); + this.tasks.addTask(5, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(SWINGING_ARMS, Boolean.valueOf(false)); + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(this.getStepSound(), 0.15F, 1.0F); + } + + protected abstract SoundEvent getStepSound(); + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.world.isDaytime() && !this.world.isRemote) + { + float f = this.getBrightness(); + BlockPos blockpos = this.getRidingEntity() instanceof EntityBoat ? (new BlockPos(this.posX, (double)Math.round(this.posY), this.posZ)).up() : new BlockPos(this.posX, (double)Math.round(this.posY), this.posZ); + + if (f > 0.5F && this.rand.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.world.canSeeSky(blockpos)) + { + boolean flag = true; + ItemStack itemstack = this.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + + if (!itemstack.isEmpty()) + { + if (itemstack.isItemStackDamageable()) + { + itemstack.setItemDamage(itemstack.getItemDamage() + this.rand.nextInt(2)); + + if (itemstack.getItemDamage() >= itemstack.getMaxDamage()) + { + this.renderBrokenItemStack(itemstack); + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY); + } + } + + flag = false; + } + + if (flag) + { + this.setFire(8); + } + } + } + + super.onLivingUpdate(); + } + + /** + * Handles updating while riding another entity + */ + public void updateRidden() + { + super.updateRidden(); + + if (this.getRidingEntity() instanceof EntityCreature) + { + EntityCreature entitycreature = (EntityCreature)this.getRidingEntity(); + this.renderYawOffset = entitycreature.renderYawOffset; + } + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + super.setEquipmentBasedOnDifficulty(difficulty); + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.BOW)); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + this.setEquipmentBasedOnDifficulty(difficulty); + this.setEnchantmentBasedOnDifficulty(difficulty); + this.setCombatTask(); + this.setCanPickUpLoot(this.rand.nextFloat() < 0.55F * difficulty.getClampedAdditionalDifficulty()); + + if (this.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isEmpty()) + { + Calendar calendar = this.world.getCurrentDate(); + + if (calendar.get(2) + 1 == 10 && calendar.get(5) == 31 && this.rand.nextFloat() < 0.25F) + { + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(this.rand.nextFloat() < 0.1F ? Blocks.LIT_PUMPKIN : Blocks.PUMPKIN)); + this.inventoryArmorDropChances[EntityEquipmentSlot.HEAD.getIndex()] = 0.0F; + } + } + + return livingdata; + } + + /** + * sets this entity's combat AI. + */ + public void setCombatTask() + { + if (this.world != null && !this.world.isRemote) + { + this.tasks.removeTask(this.aiAttackOnCollide); + this.tasks.removeTask(this.aiArrowAttack); + ItemStack itemstack = this.getHeldItemMainhand(); + + if (itemstack.getItem() == Items.BOW) + { + int i = 20; + + if (this.world.getDifficulty() != EnumDifficulty.HARD) + { + i = 40; + } + + this.aiArrowAttack.setAttackCooldown(i); + this.tasks.addTask(4, this.aiArrowAttack); + } + else + { + this.tasks.addTask(4, this.aiAttackOnCollide); + } + } + } + + /** + * Attack the specified entity using a ranged attack. + */ + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) + { + EntityArrow entityarrow = this.getArrow(distanceFactor); + double d0 = target.posX - this.posX; + double d1 = target.getEntityBoundingBox().minY + (double)(target.height / 3.0F) - entityarrow.posY; + double d2 = target.posZ - this.posZ; + double d3 = (double)MathHelper.sqrt(d0 * d0 + d2 * d2); + entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float)(14 - this.world.getDifficulty().getDifficultyId() * 4)); + this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(entityarrow); + } + + protected EntityArrow getArrow(float p_190726_1_) + { + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(this.world, this); + entitytippedarrow.setEnchantmentEffectsFromEntity(this, p_190726_1_); + return entitytippedarrow; + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setCombatTask(); + } + + public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) + { + super.setItemStackToSlot(slotIn, stack); + + if (!this.world.isRemote && slotIn == EntityEquipmentSlot.MAINHAND) + { + this.setCombatTask(); + } + } + + public float getEyeHeight() + { + return 1.74F; + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return -0.6D; + } + + @SideOnly(Side.CLIENT) + public boolean isSwingingArms() + { + return ((Boolean)this.dataManager.get(SWINGING_ARMS)).booleanValue(); + } + + public void setSwingingArms(boolean swingingArms) + { + this.dataManager.set(SWINGING_ARMS, Boolean.valueOf(swingingArms)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityBlaze.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityBlaze.java new file mode 100644 index 0000000..d968471 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityBlaze.java @@ -0,0 +1,325 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.init.SoundEvents; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityBlaze extends EntityMob +{ + /** Random offset used in floating behaviour */ + private float heightOffset = 0.5F; + /** ticks until heightOffset is randomized */ + private int heightOffsetUpdateTime; + private static final DataParameter ON_FIRE = EntityDataManager.createKey(EntityBlaze.class, DataSerializers.BYTE); + + public EntityBlaze(World worldIn) + { + super(worldIn); + this.setPathPriority(PathNodeType.WATER, -1.0F); + this.setPathPriority(PathNodeType.LAVA, 8.0F); + this.setPathPriority(PathNodeType.DANGER_FIRE, 0.0F); + this.setPathPriority(PathNodeType.DAMAGE_FIRE, 0.0F); + this.isImmuneToFire = true; + this.experienceValue = 10; + } + + public static void registerFixesBlaze(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityBlaze.class); + } + + protected void initEntityAI() + { + this.tasks.addTask(4, new EntityBlaze.AIFireballAttack(this)); + this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWanderAvoidWater(this, 1.0D, 0.0F)); + this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23000000417232513D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(48.0D); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(ON_FIRE, Byte.valueOf((byte)0)); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_BLAZE_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_BLAZE_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_BLAZE_DEATH; + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + return 1.0F; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (!this.onGround && this.motionY < 0.0D) + { + this.motionY *= 0.6D; + } + + if (this.world.isRemote) + { + if (this.rand.nextInt(24) == 0 && !this.isSilent()) + { + this.world.playSound(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, SoundEvents.ENTITY_BLAZE_BURN, this.getSoundCategory(), 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F, false); + } + + for (int i = 0; i < 2; ++i) + { + this.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D); + } + } + + super.onLivingUpdate(); + } + + protected void updateAITasks() + { + if (this.isWet()) + { + this.attackEntityFrom(DamageSource.DROWN, 1.0F); + } + + --this.heightOffsetUpdateTime; + + if (this.heightOffsetUpdateTime <= 0) + { + this.heightOffsetUpdateTime = 100; + this.heightOffset = 0.5F + (float)this.rand.nextGaussian() * 3.0F; + } + + EntityLivingBase entitylivingbase = this.getAttackTarget(); + + if (entitylivingbase != null && entitylivingbase.posY + (double)entitylivingbase.getEyeHeight() > this.posY + (double)this.getEyeHeight() + (double)this.heightOffset) + { + this.motionY += (0.30000001192092896D - this.motionY) * 0.30000001192092896D; + this.isAirBorne = true; + } + + super.updateAITasks(); + } + + public void fall(float distance, float damageMultiplier) + { + } + + /** + * Returns true if the entity is on fire. Used by render to add the fire effect on rendering. + */ + public boolean isBurning() + { + return this.isCharged(); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_BLAZE; + } + + public boolean isCharged() + { + return (((Byte)this.dataManager.get(ON_FIRE)).byteValue() & 1) != 0; + } + + public void setOnFire(boolean onFire) + { + byte b0 = ((Byte)this.dataManager.get(ON_FIRE)).byteValue(); + + if (onFire) + { + b0 = (byte)(b0 | 1); + } + else + { + b0 = (byte)(b0 & -2); + } + + this.dataManager.set(ON_FIRE, Byte.valueOf(b0)); + } + + /** + * Checks to make sure the light is not too bright where the mob is spawning + */ + protected boolean isValidLightLevel() + { + return true; + } + + static class AIFireballAttack extends EntityAIBase + { + private final EntityBlaze blaze; + private int attackStep; + private int attackTime; + + public AIFireballAttack(EntityBlaze blazeIn) + { + this.blaze = blazeIn; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.blaze.getAttackTarget(); + return entitylivingbase != null && entitylivingbase.isEntityAlive(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.attackStep = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.blaze.setOnFire(false); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.attackTime; + EntityLivingBase entitylivingbase = this.blaze.getAttackTarget(); + double d0 = this.blaze.getDistanceSq(entitylivingbase); + + if (d0 < 4.0D) + { + if (this.attackTime <= 0) + { + this.attackTime = 20; + this.blaze.attackEntityAsMob(entitylivingbase); + } + + this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, 1.0D); + } + else if (d0 < this.getFollowDistance() * this.getFollowDistance()) + { + double d1 = entitylivingbase.posX - this.blaze.posX; + double d2 = entitylivingbase.getEntityBoundingBox().minY + (double)(entitylivingbase.height / 2.0F) - (this.blaze.posY + (double)(this.blaze.height / 2.0F)); + double d3 = entitylivingbase.posZ - this.blaze.posZ; + + if (this.attackTime <= 0) + { + ++this.attackStep; + + if (this.attackStep == 1) + { + this.attackTime = 60; + this.blaze.setOnFire(true); + } + else if (this.attackStep <= 4) + { + this.attackTime = 6; + } + else + { + this.attackTime = 100; + this.attackStep = 0; + this.blaze.setOnFire(false); + } + + if (this.attackStep > 1) + { + float f = MathHelper.sqrt(MathHelper.sqrt(d0)) * 0.5F; + this.blaze.world.playEvent((EntityPlayer)null, 1018, new BlockPos((int)this.blaze.posX, (int)this.blaze.posY, (int)this.blaze.posZ), 0); + + for (int i = 0; i < 1; ++i) + { + EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.blaze.world, this.blaze, d1 + this.blaze.getRNG().nextGaussian() * (double)f, d2, d3 + this.blaze.getRNG().nextGaussian() * (double)f); + entitysmallfireball.posY = this.blaze.posY + (double)(this.blaze.height / 2.0F) + 0.5D; + this.blaze.world.spawnEntity(entitysmallfireball); + } + } + } + + this.blaze.getLookHelper().setLookPositionWithEntity(entitylivingbase, 10.0F, 10.0F); + } + else + { + this.blaze.getNavigator().clearPath(); + this.blaze.getMoveHelper().setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, 1.0D); + } + + super.updateTask(); + } + + private double getFollowDistance() + { + IAttributeInstance iattributeinstance = this.blaze.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE); + return iattributeinstance == null ? 16.0D : iattributeinstance.getAttributeValue(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityCaveSpider.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityCaveSpider.java new file mode 100644 index 0000000..32ef2af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityCaveSpider.java @@ -0,0 +1,88 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.init.MobEffects; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityCaveSpider extends EntitySpider +{ + public EntityCaveSpider(World worldIn) + { + super(worldIn); + this.setSize(0.7F, 0.5F); + } + + public static void registerFixesCaveSpider(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityCaveSpider.class); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(12.0D); + } + + public boolean attackEntityAsMob(Entity entityIn) + { + if (super.attackEntityAsMob(entityIn)) + { + if (entityIn instanceof EntityLivingBase) + { + int i = 0; + + if (this.world.getDifficulty() == EnumDifficulty.NORMAL) + { + i = 7; + } + else if (this.world.getDifficulty() == EnumDifficulty.HARD) + { + i = 15; + } + + if (i > 0) + { + ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(MobEffects.POISON, i * 20, 0)); + } + } + + return true; + } + else + { + return false; + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + return livingdata; + } + + public float getEyeHeight() + { + return 0.45F; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_CAVE_SPIDER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityCreeper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityCreeper.java new file mode 100644 index 0000000..13efca0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityCreeper.java @@ -0,0 +1,362 @@ +package net.minecraft.entity.monster; + +import java.util.Collection; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAICreeperSwell; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityCreeper extends EntityMob +{ + private static final DataParameter STATE = EntityDataManager.createKey(EntityCreeper.class, DataSerializers.VARINT); + private static final DataParameter POWERED = EntityDataManager.createKey(EntityCreeper.class, DataSerializers.BOOLEAN); + private static final DataParameter IGNITED = EntityDataManager.createKey(EntityCreeper.class, DataSerializers.BOOLEAN); + /** + * Time when this creeper was last in an active state (Messed up code here, probably causes creeper animation to go + * weird) + */ + private int lastActiveTime; + /** The amount of time since the creeper was close enough to the player to ignite */ + private int timeSinceIgnited; + private int fuseTime = 30; + /** Explosion radius for this creeper. */ + private int explosionRadius = 3; + private int droppedSkulls; + + public EntityCreeper(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.7F); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAICreeperSwell(this)); + this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityOcelot.class, 6.0F, 1.0D, 1.2D)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(5, new EntityAIWanderAvoidWater(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + } + + /** + * The maximum height from where the entity is alowed to jump (used in pathfinder) + */ + public int getMaxFallHeight() + { + return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F); + } + + public void fall(float distance, float damageMultiplier) + { + super.fall(distance, damageMultiplier); + this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F); + + if (this.timeSinceIgnited > this.fuseTime - 5) + { + this.timeSinceIgnited = this.fuseTime - 5; + } + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(STATE, Integer.valueOf(-1)); + this.dataManager.register(POWERED, Boolean.valueOf(false)); + this.dataManager.register(IGNITED, Boolean.valueOf(false)); + } + + public static void registerFixesCreeper(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityCreeper.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (((Boolean)this.dataManager.get(POWERED)).booleanValue()) + { + compound.setBoolean("powered", true); + } + + compound.setShort("Fuse", (short)this.fuseTime); + compound.setByte("ExplosionRadius", (byte)this.explosionRadius); + compound.setBoolean("ignited", this.hasIgnited()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.dataManager.set(POWERED, Boolean.valueOf(compound.getBoolean("powered"))); + + if (compound.hasKey("Fuse", 99)) + { + this.fuseTime = compound.getShort("Fuse"); + } + + if (compound.hasKey("ExplosionRadius", 99)) + { + this.explosionRadius = compound.getByte("ExplosionRadius"); + } + + if (compound.getBoolean("ignited")) + { + this.ignite(); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (this.isEntityAlive()) + { + this.lastActiveTime = this.timeSinceIgnited; + + if (this.hasIgnited()) + { + this.setCreeperState(1); + } + + int i = this.getCreeperState(); + + if (i > 0 && this.timeSinceIgnited == 0) + { + this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F); + } + + this.timeSinceIgnited += i; + + if (this.timeSinceIgnited < 0) + { + this.timeSinceIgnited = 0; + } + + if (this.timeSinceIgnited >= this.fuseTime) + { + this.timeSinceIgnited = this.fuseTime; + this.explode(); + } + } + + super.onUpdate(); + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_CREEPER_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_CREEPER_DEATH; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (this.world.getGameRules().getBoolean("doMobLoot")) + { + if (cause.getTrueSource() instanceof EntitySkeleton) + { + int i = Item.getIdFromItem(Items.RECORD_13); + int j = Item.getIdFromItem(Items.RECORD_WAIT); + int k = i + this.rand.nextInt(j - i + 1); + this.dropItem(Item.getItemById(k), 1); + } + else if (cause.getTrueSource() instanceof EntityCreeper && cause.getTrueSource() != this && ((EntityCreeper)cause.getTrueSource()).getPowered() && ((EntityCreeper)cause.getTrueSource()).ableToCauseSkullDrop()) + { + ((EntityCreeper)cause.getTrueSource()).incrementDroppedSkulls(); + this.entityDropItem(new ItemStack(Items.SKULL, 1, 4), 0.0F); + } + } + } + + public boolean attackEntityAsMob(Entity entityIn) + { + return true; + } + + /** + * Returns true if the creeper is powered by a lightning bolt. + */ + public boolean getPowered() + { + return ((Boolean)this.dataManager.get(POWERED)).booleanValue(); + } + + /** + * Params: (Float)Render tick. Returns the intensity of the creeper's flash when it is ignited. + */ + @SideOnly(Side.CLIENT) + public float getCreeperFlashIntensity(float p_70831_1_) + { + return ((float)this.lastActiveTime + (float)(this.timeSinceIgnited - this.lastActiveTime) * p_70831_1_) / (float)(this.fuseTime - 2); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_CREEPER; + } + + /** + * Returns the current state of creeper, -1 is idle, 1 is 'in fuse' + */ + public int getCreeperState() + { + return ((Integer)this.dataManager.get(STATE)).intValue(); + } + + /** + * Sets the state of creeper, -1 to idle and 1 to be 'in fuse' + */ + public void setCreeperState(int state) + { + this.dataManager.set(STATE, Integer.valueOf(state)); + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + super.onStruckByLightning(lightningBolt); + this.dataManager.set(POWERED, Boolean.valueOf(true)); + } + + protected boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.FLINT_AND_STEEL) + { + this.world.playSound(player, this.posX, this.posY, this.posZ, SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F); + player.swingArm(hand); + + if (!this.world.isRemote) + { + this.ignite(); + itemstack.damageItem(1, player); + return true; + } + } + + return super.processInteract(player, hand); + } + + /** + * Creates an explosion as determined by this creeper's power and explosion radius. + */ + private void explode() + { + if (!this.world.isRemote) + { + boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this); + float f = this.getPowered() ? 2.0F : 1.0F; + this.dead = true; + this.world.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius * f, flag); + this.setDead(); + this.spawnLingeringCloud(); + } + } + + private void spawnLingeringCloud() + { + Collection collection = this.getActivePotionEffects(); + + if (!collection.isEmpty()) + { + EntityAreaEffectCloud entityareaeffectcloud = new EntityAreaEffectCloud(this.world, this.posX, this.posY, this.posZ); + entityareaeffectcloud.setRadius(2.5F); + entityareaeffectcloud.setRadiusOnUse(-0.5F); + entityareaeffectcloud.setWaitTime(10); + entityareaeffectcloud.setDuration(entityareaeffectcloud.getDuration() / 2); + entityareaeffectcloud.setRadiusPerTick(-entityareaeffectcloud.getRadius() / (float)entityareaeffectcloud.getDuration()); + + for (PotionEffect potioneffect : collection) + { + entityareaeffectcloud.addEffect(new PotionEffect(potioneffect)); + } + + this.world.spawnEntity(entityareaeffectcloud); + } + } + + public boolean hasIgnited() + { + return ((Boolean)this.dataManager.get(IGNITED)).booleanValue(); + } + + public void ignite() + { + this.dataManager.set(IGNITED, Boolean.valueOf(true)); + } + + /** + * Returns true if an entity is able to drop its skull due to being blown up by this creeper. + * + * Does not test if this creeper is charged; the caller must do that. However, does test the doMobLoot gamerule. + */ + public boolean ableToCauseSkullDrop() + { + return this.droppedSkulls < 1 && this.world.getGameRules().getBoolean("doMobLoot"); + } + + public void incrementDroppedSkulls() + { + ++this.droppedSkulls; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityElderGuardian.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityElderGuardian.java new file mode 100644 index 0000000..1db44a5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityElderGuardian.java @@ -0,0 +1,123 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityElderGuardian extends EntityGuardian +{ + public EntityElderGuardian(World worldIn) + { + super(worldIn); + this.setSize(this.width * 2.35F, this.height * 2.35F); + this.enablePersistence(); + + if (this.wander != null) + { + this.wander.setExecutionChance(400); + } + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(8.0D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(80.0D); + } + + public static void registerFixesElderGuardian(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityElderGuardian.class); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ELDER_GUARDIAN; + } + + public int getAttackDuration() + { + return 60; + } + + @SideOnly(Side.CLIENT) + public void setGhost() + { + this.clientSideSpikesAnimation = 1.0F; + this.clientSideSpikesAnimationO = this.clientSideSpikesAnimation; + } + + protected SoundEvent getAmbientSound() + { + return this.isInWater() ? SoundEvents.ENTITY_ELDER_GUARDIAN_AMBIENT : SoundEvents.ENTITY_ELDERGUARDIAN_AMBIENTLAND; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return this.isInWater() ? SoundEvents.ENTITY_ELDER_GUARDIAN_HURT : SoundEvents.ENTITY_ELDER_GUARDIAN_HURT_LAND; + } + + protected SoundEvent getDeathSound() + { + return this.isInWater() ? SoundEvents.ENTITY_ELDER_GUARDIAN_DEATH : SoundEvents.ENTITY_ELDER_GUARDIAN_DEATH_LAND; + } + + protected SoundEvent getFlopSound() + { + return SoundEvents.ENTITY_ELDER_GUARDIAN_FLOP; + } + + protected void updateAITasks() + { + super.updateAITasks(); + int i = 1200; + + if ((this.ticksExisted + this.getEntityId()) % 1200 == 0) + { + Potion potion = MobEffects.MINING_FATIGUE; + List list = this.world.getPlayers(EntityPlayerMP.class, new Predicate() + { + public boolean apply(@Nullable EntityPlayerMP p_apply_1_) + { + return EntityElderGuardian.this.getDistanceSq(p_apply_1_) < 2500.0D && p_apply_1_.interactionManager.survivalOrAdventure(); + } + }); + int j = 2; + int k = 6000; + int l = 1200; + + for (EntityPlayerMP entityplayermp : list) + { + if (!entityplayermp.isPotionActive(potion) || entityplayermp.getActivePotionEffect(potion).getAmplifier() < 2 || entityplayermp.getActivePotionEffect(potion).getDuration() < 1200) + { + entityplayermp.connection.sendPacket(new SPacketChangeGameState(10, 0.0F)); + entityplayermp.addPotionEffect(new PotionEffect(potion, 6000, 2)); + } + } + } + + if (!this.hasHome()) + { + this.setHomePosAndDistance(new BlockPos(this), 16); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEnderman.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEnderman.java new file mode 100644 index 0000000..5b8fbdd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEnderman.java @@ -0,0 +1,663 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import com.google.common.collect.Sets; +import java.util.Random; +import java.util.Set; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSourceIndirect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityEnderman extends EntityMob +{ + private static final UUID ATTACKING_SPEED_BOOST_ID = UUID.fromString("020E0DFB-87AE-4653-9556-831010E291A0"); + private static final AttributeModifier ATTACKING_SPEED_BOOST = (new AttributeModifier(ATTACKING_SPEED_BOOST_ID, "Attacking speed boost", 0.15000000596046448D, 0)).setSaved(false); + private static final Set CARRIABLE_BLOCKS = Sets.newIdentityHashSet(); + private static final DataParameter> CARRIED_BLOCK = EntityDataManager.>createKey(EntityEnderman.class, DataSerializers.OPTIONAL_BLOCK_STATE); + private static final DataParameter SCREAMING = EntityDataManager.createKey(EntityEnderman.class, DataSerializers.BOOLEAN); + private int lastCreepySound; + private int targetChangeTime; + + public EntityEnderman(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 2.9F); + this.stepHeight = 1.0F; + this.setPathPriority(PathNodeType.WATER, -1.0F); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(7, new EntityAIWanderAvoidWater(this, 1.0D, 0.0F)); + this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.tasks.addTask(10, new EntityEnderman.AIPlaceBlock(this)); + this.tasks.addTask(11, new EntityEnderman.AITakeBlock(this)); + this.targetTasks.addTask(1, new EntityEnderman.AIFindPlayer(this)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityEndermite.class, 10, true, false, new Predicate() + { + public boolean apply(@Nullable EntityEndermite p_apply_1_) + { + return p_apply_1_.isSpawnedByPlayer(); + } + })); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(40.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(7.0D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(64.0D); + } + + /** + * Sets the active target the Task system uses for tracking + */ + public void setAttackTarget(@Nullable EntityLivingBase entitylivingbaseIn) + { + super.setAttackTarget(entitylivingbaseIn); + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + + if (entitylivingbaseIn == null) + { + this.targetChangeTime = 0; + this.dataManager.set(SCREAMING, Boolean.valueOf(false)); + iattributeinstance.removeModifier(ATTACKING_SPEED_BOOST); + } + else + { + this.targetChangeTime = this.ticksExisted; + this.dataManager.set(SCREAMING, Boolean.valueOf(true)); + + if (!iattributeinstance.hasModifier(ATTACKING_SPEED_BOOST)) + { + iattributeinstance.applyModifier(ATTACKING_SPEED_BOOST); + } + } + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(CARRIED_BLOCK, Optional.absent()); + this.dataManager.register(SCREAMING, Boolean.valueOf(false)); + } + + public void playEndermanSound() + { + if (this.ticksExisted >= this.lastCreepySound + 400) + { + this.lastCreepySound = this.ticksExisted; + + if (!this.isSilent()) + { + this.world.playSound(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ, SoundEvents.ENTITY_ENDERMEN_STARE, this.getSoundCategory(), 2.5F, 1.0F, false); + } + } + } + + public void notifyDataManagerChange(DataParameter key) + { + if (SCREAMING.equals(key) && this.isScreaming() && this.world.isRemote) + { + this.playEndermanSound(); + } + + super.notifyDataManagerChange(key); + } + + public static void registerFixesEnderman(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityEnderman.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + IBlockState iblockstate = this.getHeldBlockState(); + + if (iblockstate != null) + { + compound.setShort("carried", (short)Block.getIdFromBlock(iblockstate.getBlock())); + compound.setShort("carriedData", (short)iblockstate.getBlock().getMetaFromState(iblockstate)); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + IBlockState iblockstate; + + if (compound.hasKey("carried", 8)) + { + iblockstate = Block.getBlockFromName(compound.getString("carried")).getStateFromMeta(compound.getShort("carriedData") & 65535); + } + else + { + iblockstate = Block.getBlockById(compound.getShort("carried")).getStateFromMeta(compound.getShort("carriedData") & 65535); + } + + if (iblockstate == null || iblockstate.getBlock() == null || iblockstate.getMaterial() == Material.AIR) + { + iblockstate = null; + } + + this.setHeldBlockState(iblockstate); + } + + /** + * Checks to see if this enderman should be attacking this player + */ + private boolean shouldAttackPlayer(EntityPlayer player) + { + ItemStack itemstack = player.inventory.armorInventory.get(3); + + if (itemstack.getItem() == Item.getItemFromBlock(Blocks.PUMPKIN)) + { + return false; + } + else + { + Vec3d vec3d = player.getLook(1.0F).normalize(); + Vec3d vec3d1 = new Vec3d(this.posX - player.posX, this.getEntityBoundingBox().minY + (double)this.getEyeHeight() - (player.posY + (double)player.getEyeHeight()), this.posZ - player.posZ); + double d0 = vec3d1.lengthVector(); + vec3d1 = vec3d1.normalize(); + double d1 = vec3d.dotProduct(vec3d1); + return d1 > 1.0D - 0.025D / d0 ? player.canEntityBeSeen(this) : false; + } + } + + public float getEyeHeight() + { + return 2.55F; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.world.isRemote) + { + for (int i = 0; i < 2; ++i) + { + this.world.spawnParticle(EnumParticleTypes.PORTAL, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height - 0.25D, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, (this.rand.nextDouble() - 0.5D) * 2.0D, -this.rand.nextDouble(), (this.rand.nextDouble() - 0.5D) * 2.0D); + } + } + + this.isJumping = false; + super.onLivingUpdate(); + } + + protected void updateAITasks() + { + if (this.isWet()) + { + this.attackEntityFrom(DamageSource.DROWN, 1.0F); + } + + if (this.world.isDaytime() && this.ticksExisted >= this.targetChangeTime + 600) + { + float f = this.getBrightness(); + + if (f > 0.5F && this.world.canSeeSky(new BlockPos(this)) && this.rand.nextFloat() * 30.0F < (f - 0.4F) * 2.0F) + { + this.setAttackTarget((EntityLivingBase)null); + this.teleportRandomly(); + } + } + + super.updateAITasks(); + } + + /** + * Teleport the enderman to a random nearby position + */ + protected boolean teleportRandomly() + { + double d0 = this.posX + (this.rand.nextDouble() - 0.5D) * 64.0D; + double d1 = this.posY + (double)(this.rand.nextInt(64) - 32); + double d2 = this.posZ + (this.rand.nextDouble() - 0.5D) * 64.0D; + return this.teleportTo(d0, d1, d2); + } + + /** + * Teleport the enderman to another entity + */ + protected boolean teleportToEntity(Entity p_70816_1_) + { + Vec3d vec3d = new Vec3d(this.posX - p_70816_1_.posX, this.getEntityBoundingBox().minY + (double)(this.height / 2.0F) - p_70816_1_.posY + (double)p_70816_1_.getEyeHeight(), this.posZ - p_70816_1_.posZ); + vec3d = vec3d.normalize(); + double d0 = 16.0D; + double d1 = this.posX + (this.rand.nextDouble() - 0.5D) * 8.0D - vec3d.x * 16.0D; + double d2 = this.posY + (double)(this.rand.nextInt(16) - 8) - vec3d.y * 16.0D; + double d3 = this.posZ + (this.rand.nextDouble() - 0.5D) * 8.0D - vec3d.z * 16.0D; + return this.teleportTo(d1, d2, d3); + } + + /** + * Teleport the enderman + */ + private boolean teleportTo(double x, double y, double z) + { + net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(this, x, y, z, 0); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return false; + boolean flag = this.attemptTeleport(event.getTargetX(), event.getTargetY(), event.getTargetZ()); + + if (flag) + { + this.world.playSound((EntityPlayer)null, this.prevPosX, this.prevPosY, this.prevPosZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, this.getSoundCategory(), 1.0F, 1.0F); + this.playSound(SoundEvents.ENTITY_ENDERMEN_TELEPORT, 1.0F, 1.0F); + } + + return flag; + } + + protected SoundEvent getAmbientSound() + { + return this.isScreaming() ? SoundEvents.ENTITY_ENDERMEN_SCREAM : SoundEvents.ENTITY_ENDERMEN_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ENDERMEN_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ENDERMEN_DEATH; + } + + /** + * Drop the equipment for this entity. + */ + protected void dropEquipment(boolean wasRecentlyHit, int lootingModifier) + { + super.dropEquipment(wasRecentlyHit, lootingModifier); + IBlockState iblockstate = this.getHeldBlockState(); + + if (iblockstate != null) + { + Item item = Item.getItemFromBlock(iblockstate.getBlock()); + int i = item.getHasSubtypes() ? iblockstate.getBlock().getMetaFromState(iblockstate) : 0; + this.entityDropItem(new ItemStack(item, 1, i), 0.0F); + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ENDERMAN; + } + + /** + * Sets this enderman's held block state + */ + public void setHeldBlockState(@Nullable IBlockState state) + { + this.dataManager.set(CARRIED_BLOCK, Optional.fromNullable(state)); + } + + /** + * Gets this enderman's held block state + */ + @Nullable + public IBlockState getHeldBlockState() + { + return (IBlockState)((Optional)this.dataManager.get(CARRIED_BLOCK)).orNull(); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (source instanceof EntityDamageSourceIndirect) + { + for (int i = 0; i < 64; ++i) + { + if (this.teleportRandomly()) + { + return true; + } + } + + return false; + } + else + { + boolean flag = super.attackEntityFrom(source, amount); + + if (source.isUnblockable() && this.rand.nextInt(10) != 0) + { + this.teleportRandomly(); + } + + return flag; + } + } + + /*===================================== Forge Start ==============================*/ + public static void setCarriable(Block block, boolean canCarry) + { + if (canCarry) CARRIABLE_BLOCKS.add(block); + else CARRIABLE_BLOCKS.remove(block); + } + public static boolean getCarriable(Block block) + { + return CARRIABLE_BLOCKS.contains(block); + } + /*===================================== Forge End ==============================*/ + + public boolean isScreaming() + { + return ((Boolean)this.dataManager.get(SCREAMING)).booleanValue(); + } + + static + { + CARRIABLE_BLOCKS.add(Blocks.GRASS); + CARRIABLE_BLOCKS.add(Blocks.DIRT); + CARRIABLE_BLOCKS.add(Blocks.SAND); + CARRIABLE_BLOCKS.add(Blocks.GRAVEL); + CARRIABLE_BLOCKS.add(Blocks.YELLOW_FLOWER); + CARRIABLE_BLOCKS.add(Blocks.RED_FLOWER); + CARRIABLE_BLOCKS.add(Blocks.BROWN_MUSHROOM); + CARRIABLE_BLOCKS.add(Blocks.RED_MUSHROOM); + CARRIABLE_BLOCKS.add(Blocks.TNT); + CARRIABLE_BLOCKS.add(Blocks.CACTUS); + CARRIABLE_BLOCKS.add(Blocks.CLAY); + CARRIABLE_BLOCKS.add(Blocks.PUMPKIN); + CARRIABLE_BLOCKS.add(Blocks.MELON_BLOCK); + CARRIABLE_BLOCKS.add(Blocks.MYCELIUM); + CARRIABLE_BLOCKS.add(Blocks.NETHERRACK); + } + + static class AIFindPlayer extends EntityAINearestAttackableTarget + { + private final EntityEnderman enderman; + /** The player */ + private EntityPlayer player; + private int aggroTime; + private int teleportTime; + + public AIFindPlayer(EntityEnderman p_i45842_1_) + { + super(p_i45842_1_, EntityPlayer.class, false); + this.enderman = p_i45842_1_; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + double d0 = this.getTargetDistance(); + this.player = this.enderman.world.getNearestAttackablePlayer(this.enderman.posX, this.enderman.posY, this.enderman.posZ, d0, d0, (Function)null, new Predicate() + { + public boolean apply(@Nullable EntityPlayer p_apply_1_) + { + return p_apply_1_ != null && AIFindPlayer.this.enderman.shouldAttackPlayer(p_apply_1_); + } + }); + return this.player != null; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.aggroTime = 5; + this.teleportTime = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.player = null; + super.resetTask(); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.player != null) + { + if (!this.enderman.shouldAttackPlayer(this.player)) + { + return false; + } + else + { + this.enderman.faceEntity(this.player, 10.0F, 10.0F); + return true; + } + } + else + { + return this.targetEntity != null && ((EntityPlayer)this.targetEntity).isEntityAlive() ? true : super.shouldContinueExecuting(); + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.player != null) + { + if (--this.aggroTime <= 0) + { + this.targetEntity = this.player; + this.player = null; + super.startExecuting(); + } + } + else + { + if (this.targetEntity != null) + { + if (this.enderman.shouldAttackPlayer((EntityPlayer)this.targetEntity)) + { + if (((EntityPlayer)this.targetEntity).getDistanceSq(this.enderman) < 16.0D) + { + this.enderman.teleportRandomly(); + } + + this.teleportTime = 0; + } + else if (((EntityPlayer)this.targetEntity).getDistanceSq(this.enderman) > 256.0D && this.teleportTime++ >= 30 && this.enderman.teleportToEntity(this.targetEntity)) + { + this.teleportTime = 0; + } + } + + super.updateTask(); + } + } + } + + static class AIPlaceBlock extends EntityAIBase + { + private final EntityEnderman enderman; + + public AIPlaceBlock(EntityEnderman p_i45843_1_) + { + this.enderman = p_i45843_1_; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.enderman.getHeldBlockState() == null) + { + return false; + } + else if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.enderman.world, this.enderman)) + { + return false; + } + else + { + return this.enderman.getRNG().nextInt(2000) == 0; + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + Random random = this.enderman.getRNG(); + World world = this.enderman.world; + int i = MathHelper.floor(this.enderman.posX - 1.0D + random.nextDouble() * 2.0D); + int j = MathHelper.floor(this.enderman.posY + random.nextDouble() * 2.0D); + int k = MathHelper.floor(this.enderman.posZ - 1.0D + random.nextDouble() * 2.0D); + BlockPos blockpos = new BlockPos(i, j, k); + IBlockState iblockstate = world.getBlockState(blockpos); + IBlockState iblockstate1 = world.getBlockState(blockpos.down()); + IBlockState iblockstate2 = this.enderman.getHeldBlockState(); + + if (iblockstate2 != null && this.canPlaceBlock(world, blockpos, iblockstate2.getBlock(), iblockstate, iblockstate1)) + { + world.setBlockState(blockpos, iblockstate2, 3); + this.enderman.setHeldBlockState((IBlockState)null); + } + } + + private boolean canPlaceBlock(World p_188518_1_, BlockPos p_188518_2_, Block p_188518_3_, IBlockState p_188518_4_, IBlockState p_188518_5_) + { + if (!p_188518_3_.canPlaceBlockAt(p_188518_1_, p_188518_2_)) + { + return false; + } + else if (p_188518_4_.getMaterial() != Material.AIR) + { + return false; + } + else if (p_188518_5_.getMaterial() == Material.AIR) + { + return false; + } + else + { + return p_188518_5_.isFullCube(); + } + } + } + + static class AITakeBlock extends EntityAIBase + { + private final EntityEnderman enderman; + + public AITakeBlock(EntityEnderman p_i45841_1_) + { + this.enderman = p_i45841_1_; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.enderman.getHeldBlockState() != null) + { + return false; + } + else if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.enderman.world, this.enderman)) + { + return false; + } + else + { + return this.enderman.getRNG().nextInt(20) == 0; + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + Random random = this.enderman.getRNG(); + World world = this.enderman.world; + int i = MathHelper.floor(this.enderman.posX - 2.0D + random.nextDouble() * 4.0D); + int j = MathHelper.floor(this.enderman.posY + random.nextDouble() * 3.0D); + int k = MathHelper.floor(this.enderman.posZ - 2.0D + random.nextDouble() * 4.0D); + BlockPos blockpos = new BlockPos(i, j, k); + IBlockState iblockstate = world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + RayTraceResult raytraceresult = world.rayTraceBlocks(new Vec3d((double)((float)MathHelper.floor(this.enderman.posX) + 0.5F), (double)((float)j + 0.5F), (double)((float)MathHelper.floor(this.enderman.posZ) + 0.5F)), new Vec3d((double)((float)i + 0.5F), (double)((float)j + 0.5F), (double)((float)k + 0.5F)), false, true, false); + boolean flag = raytraceresult != null && raytraceresult.getBlockPos().equals(blockpos); + + if (EntityEnderman.CARRIABLE_BLOCKS.contains(block) && flag) + { + this.enderman.setHeldBlockState(iblockstate); + world.setBlockToAir(blockpos); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEndermite.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEndermite.java new file mode 100644 index 0000000..53bcd98 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEndermite.java @@ -0,0 +1,222 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityEndermite extends EntityMob +{ + private int lifetime; + private boolean playerSpawned; + + public EntityEndermite(World worldIn) + { + super(worldIn); + this.experienceValue = 3; + this.setSize(0.4F, 0.3F); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(3, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + } + + public float getEyeHeight() + { + return 0.1F; + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(2.0D); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_ENDERMITE_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ENDERMITE_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ENDERMITE_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_ENDERMITE_STEP, 0.15F, 1.0F); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ENDERMITE; + } + + public static void registerFixesEndermite(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityEndermite.class); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.lifetime = compound.getInteger("Lifetime"); + this.playerSpawned = compound.getBoolean("PlayerSpawned"); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Lifetime", this.lifetime); + compound.setBoolean("PlayerSpawned", this.playerSpawned); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.renderYawOffset = this.rotationYaw; + super.onUpdate(); + } + + /** + * Set the render yaw offset + */ + public void setRenderYawOffset(float offset) + { + this.rotationYaw = offset; + super.setRenderYawOffset(offset); + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return 0.1D; + } + + public boolean isSpawnedByPlayer() + { + return this.playerSpawned; + } + + /** + * Sets if this mob was spawned by a player or not. + */ + public void setSpawnedByPlayer(boolean spawnedByPlayer) + { + this.playerSpawned = spawnedByPlayer; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.world.isRemote) + { + for (int i = 0; i < 2; ++i) + { + this.world.spawnParticle(EnumParticleTypes.PORTAL, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, (this.rand.nextDouble() - 0.5D) * 2.0D, -this.rand.nextDouble(), (this.rand.nextDouble() - 0.5D) * 2.0D); + } + } + else + { + if (!this.isNoDespawnRequired()) + { + ++this.lifetime; + } + + if (this.lifetime >= 2400) + { + this.setDead(); + } + } + } + + /** + * Checks to make sure the light is not too bright where the mob is spawning + */ + protected boolean isValidLightLevel() + { + return true; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + if (super.getCanSpawnHere()) + { + EntityPlayer entityplayer = this.world.getClosestPlayerToEntity(this, 5.0D); + return entityplayer == null; + } + else + { + return false; + } + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEvoker.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEvoker.java new file mode 100644 index 0000000..8308d52 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityEvoker.java @@ -0,0 +1,465 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityEvokerFangs; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityEvoker extends EntitySpellcasterIllager +{ + private EntitySheep wololoTarget; + + public EntityEvoker(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.95F); + this.experienceValue = 10; + } + + protected void initEntityAI() + { + super.initEntityAI(); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityEvoker.AICastingSpell()); + this.tasks.addTask(2, new EntityAIAvoidEntity(this, EntityPlayer.class, 8.0F, 0.6D, 1.0D)); + this.tasks.addTask(4, new EntityEvoker.AISummonSpell()); + this.tasks.addTask(5, new EntityEvoker.AIAttackSpell()); + this.tasks.addTask(6, new EntityEvoker.AIWololoSpell()); + this.tasks.addTask(8, new EntityAIWander(this, 0.6D)); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[] {EntityEvoker.class})); + this.targetTasks.addTask(2, (new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)).setUnseenMemoryTicks(300)); + this.targetTasks.addTask(3, (new EntityAINearestAttackableTarget(this, EntityVillager.class, false)).setUnseenMemoryTicks(300)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, false)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(12.0D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(24.0D); + } + + protected void entityInit() + { + super.entityInit(); + } + + public static void registerFixesEvoker(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityEvoker.class); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + } + + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_EVOCATION_ILLAGER; + } + + protected void updateAITasks() + { + super.updateAITasks(); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + } + + /** + * Returns whether this Entity is on the same team as the given Entity. + */ + public boolean isOnSameTeam(Entity entityIn) + { + if (entityIn == null) + { + return false; + } + else if (entityIn == this) + { + return true; + } + else if (super.isOnSameTeam(entityIn)) + { + return true; + } + else if (entityIn instanceof EntityVex) + { + return this.isOnSameTeam(((EntityVex)entityIn).getOwner()); + } + else if (entityIn instanceof EntityLivingBase && ((EntityLivingBase)entityIn).getCreatureAttribute() == EnumCreatureAttribute.ILLAGER) + { + return this.getTeam() == null && entityIn.getTeam() == null; + } + else + { + return false; + } + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_EVOCATION_ILLAGER_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.EVOCATION_ILLAGER_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_EVOCATION_ILLAGER_HURT; + } + + private void setWololoTarget(@Nullable EntitySheep wololoTargetIn) + { + this.wololoTarget = wololoTargetIn; + } + + @Nullable + private EntitySheep getWololoTarget() + { + return this.wololoTarget; + } + + protected SoundEvent getSpellSound() + { + return SoundEvents.EVOCATION_ILLAGER_CAST_SPELL; + } + + class AIAttackSpell extends EntitySpellcasterIllager.AIUseSpell + { + private AIAttackSpell() + { + super(); + } + + protected int getCastingTime() + { + return 40; + } + + protected int getCastingInterval() + { + return 100; + } + + protected void castSpell() + { + EntityLivingBase entitylivingbase = EntityEvoker.this.getAttackTarget(); + double d0 = Math.min(entitylivingbase.posY, EntityEvoker.this.posY); + double d1 = Math.max(entitylivingbase.posY, EntityEvoker.this.posY) + 1.0D; + float f = (float)MathHelper.atan2(entitylivingbase.posZ - EntityEvoker.this.posZ, entitylivingbase.posX - EntityEvoker.this.posX); + + if (EntityEvoker.this.getDistanceSq(entitylivingbase) < 9.0D) + { + for (int i = 0; i < 5; ++i) + { + float f1 = f + (float)i * (float)Math.PI * 0.4F; + this.spawnFangs(EntityEvoker.this.posX + (double)MathHelper.cos(f1) * 1.5D, EntityEvoker.this.posZ + (double)MathHelper.sin(f1) * 1.5D, d0, d1, f1, 0); + } + + for (int k = 0; k < 8; ++k) + { + float f2 = f + (float)k * (float)Math.PI * 2.0F / 8.0F + ((float)Math.PI * 2F / 5F); + this.spawnFangs(EntityEvoker.this.posX + (double)MathHelper.cos(f2) * 2.5D, EntityEvoker.this.posZ + (double)MathHelper.sin(f2) * 2.5D, d0, d1, f2, 3); + } + } + else + { + for (int l = 0; l < 16; ++l) + { + double d2 = 1.25D * (double)(l + 1); + int j = 1 * l; + this.spawnFangs(EntityEvoker.this.posX + (double)MathHelper.cos(f) * d2, EntityEvoker.this.posZ + (double)MathHelper.sin(f) * d2, d0, d1, f, j); + } + } + } + + private void spawnFangs(double p_190876_1_, double p_190876_3_, double p_190876_5_, double p_190876_7_, float p_190876_9_, int p_190876_10_) + { + BlockPos blockpos = new BlockPos(p_190876_1_, p_190876_7_, p_190876_3_); + boolean flag = false; + double d0 = 0.0D; + + while (true) + { + if (!EntityEvoker.this.world.isBlockNormalCube(blockpos, true) && EntityEvoker.this.world.isBlockNormalCube(blockpos.down(), true)) + { + if (!EntityEvoker.this.world.isAirBlock(blockpos)) + { + IBlockState iblockstate = EntityEvoker.this.world.getBlockState(blockpos); + AxisAlignedBB axisalignedbb = iblockstate.getCollisionBoundingBox(EntityEvoker.this.world, blockpos); + + if (axisalignedbb != null) + { + d0 = axisalignedbb.maxY; + } + } + + flag = true; + break; + } + + blockpos = blockpos.down(); + + if (blockpos.getY() < MathHelper.floor(p_190876_5_) - 1) + { + break; + } + } + + if (flag) + { + EntityEvokerFangs entityevokerfangs = new EntityEvokerFangs(EntityEvoker.this.world, p_190876_1_, (double)blockpos.getY() + d0, p_190876_3_, p_190876_9_, p_190876_10_, EntityEvoker.this); + EntityEvoker.this.world.spawnEntity(entityevokerfangs); + } + } + + protected SoundEvent getSpellPrepareSound() + { + return SoundEvents.EVOCATION_ILLAGER_PREPARE_ATTACK; + } + + protected EntitySpellcasterIllager.SpellType getSpellType() + { + return EntitySpellcasterIllager.SpellType.FANGS; + } + } + + class AICastingSpell extends EntitySpellcasterIllager.AICastingApell + { + private AICastingSpell() + { + super(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (EntityEvoker.this.getAttackTarget() != null) + { + EntityEvoker.this.getLookHelper().setLookPositionWithEntity(EntityEvoker.this.getAttackTarget(), (float)EntityEvoker.this.getHorizontalFaceSpeed(), (float)EntityEvoker.this.getVerticalFaceSpeed()); + } + else if (EntityEvoker.this.getWololoTarget() != null) + { + EntityEvoker.this.getLookHelper().setLookPositionWithEntity(EntityEvoker.this.getWololoTarget(), (float)EntityEvoker.this.getHorizontalFaceSpeed(), (float)EntityEvoker.this.getVerticalFaceSpeed()); + } + } + } + + class AISummonSpell extends EntitySpellcasterIllager.AIUseSpell + { + private AISummonSpell() + { + super(); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!super.shouldExecute()) + { + return false; + } + else + { + int i = EntityEvoker.this.world.getEntitiesWithinAABB(EntityVex.class, EntityEvoker.this.getEntityBoundingBox().grow(16.0D)).size(); + return EntityEvoker.this.rand.nextInt(8) + 1 > i; + } + } + + protected int getCastingTime() + { + return 100; + } + + protected int getCastingInterval() + { + return 340; + } + + protected void castSpell() + { + for (int i = 0; i < 3; ++i) + { + BlockPos blockpos = (new BlockPos(EntityEvoker.this)).add(-2 + EntityEvoker.this.rand.nextInt(5), 1, -2 + EntityEvoker.this.rand.nextInt(5)); + EntityVex entityvex = new EntityVex(EntityEvoker.this.world); + entityvex.moveToBlockPosAndAngles(blockpos, 0.0F, 0.0F); + entityvex.onInitialSpawn(EntityEvoker.this.world.getDifficultyForLocation(blockpos), (IEntityLivingData)null); + entityvex.setOwner(EntityEvoker.this); + entityvex.setBoundOrigin(blockpos); + entityvex.setLimitedLife(20 * (30 + EntityEvoker.this.rand.nextInt(90))); + EntityEvoker.this.world.spawnEntity(entityvex); + } + } + + protected SoundEvent getSpellPrepareSound() + { + return SoundEvents.EVOCATION_ILLAGER_PREPARE_SUMMON; + } + + protected EntitySpellcasterIllager.SpellType getSpellType() + { + return EntitySpellcasterIllager.SpellType.SUMMON_VEX; + } + } + + public class AIWololoSpell extends EntitySpellcasterIllager.AIUseSpell + { + final Predicate wololoSelector = new Predicate() + { + public boolean apply(EntitySheep p_apply_1_) + { + return p_apply_1_.getFleeceColor() == EnumDyeColor.BLUE; + } + }; + + public AIWololoSpell() + { + super(); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (EntityEvoker.this.getAttackTarget() != null) + { + return false; + } + else if (EntityEvoker.this.isSpellcasting()) + { + return false; + } + else if (EntityEvoker.this.ticksExisted < this.spellCooldown) + { + return false; + } + else if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(EntityEvoker.this.world, EntityEvoker.this)) + { + return false; + } + else + { + List list = EntityEvoker.this.world.getEntitiesWithinAABB(EntitySheep.class, EntityEvoker.this.getEntityBoundingBox().grow(16.0D, 4.0D, 16.0D), this.wololoSelector); + + if (list.isEmpty()) + { + return false; + } + else + { + EntityEvoker.this.setWololoTarget(list.get(EntityEvoker.this.rand.nextInt(list.size()))); + return true; + } + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return EntityEvoker.this.getWololoTarget() != null && this.spellWarmup > 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + EntityEvoker.this.setWololoTarget((EntitySheep)null); + } + + protected void castSpell() + { + EntitySheep entitysheep = EntityEvoker.this.getWololoTarget(); + + if (entitysheep != null && entitysheep.isEntityAlive()) + { + entitysheep.setFleeceColor(EnumDyeColor.RED); + } + } + + protected int getCastWarmupTime() + { + return 40; + } + + protected int getCastingTime() + { + return 60; + } + + protected int getCastingInterval() + { + return 140; + } + + protected SoundEvent getSpellPrepareSound() + { + return SoundEvents.EVOCATION_ILLAGER_PREPARE_WOLOLO; + } + + protected EntitySpellcasterIllager.SpellType getSpellType() + { + return EntitySpellcasterIllager.SpellType.WOLOLO; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGhast.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGhast.java new file mode 100644 index 0000000..2462c19 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGhast.java @@ -0,0 +1,437 @@ +package net.minecraft.entity.monster; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityFlying; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIFindEntityNearestPlayer; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityLargeFireball; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityGhast extends EntityFlying implements IMob +{ + private static final DataParameter ATTACKING = EntityDataManager.createKey(EntityGhast.class, DataSerializers.BOOLEAN); + /** The explosion radius of spawned fireballs. */ + private int explosionStrength = 1; + + public EntityGhast(World worldIn) + { + super(worldIn); + this.setSize(4.0F, 4.0F); + this.isImmuneToFire = true; + this.experienceValue = 5; + this.moveHelper = new EntityGhast.GhastMoveHelper(this); + } + + protected void initEntityAI() + { + this.tasks.addTask(5, new EntityGhast.AIRandomFly(this)); + this.tasks.addTask(7, new EntityGhast.AILookAround(this)); + this.tasks.addTask(7, new EntityGhast.AIFireballAttack(this)); + this.targetTasks.addTask(1, new EntityAIFindEntityNearestPlayer(this)); + } + + @SideOnly(Side.CLIENT) + public boolean isAttacking() + { + return ((Boolean)this.dataManager.get(ATTACKING)).booleanValue(); + } + + public void setAttacking(boolean attacking) + { + this.dataManager.set(ATTACKING, Boolean.valueOf(attacking)); + } + + public int getFireballStrength() + { + return this.explosionStrength; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote && this.world.getDifficulty() == EnumDifficulty.PEACEFUL) + { + this.setDead(); + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (source.getImmediateSource() instanceof EntityLargeFireball && source.getTrueSource() instanceof EntityPlayer) + { + super.attackEntityFrom(source, 1000.0F); + return true; + } + else + { + return super.attackEntityFrom(source, amount); + } + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(ATTACKING, Boolean.valueOf(false)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(100.0D); + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.HOSTILE; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_GHAST_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_GHAST_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_GHAST_DEATH; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_GHAST; + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 10.0F; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return this.rand.nextInt(20) == 0 && super.getCanSpawnHere() && this.world.getDifficulty() != EnumDifficulty.PEACEFUL; + } + + /** + * Will return how many at most can spawn in a chunk at once. + */ + public int getMaxSpawnedInChunk() + { + return 1; + } + + public static void registerFixesGhast(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityGhast.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("ExplosionPower", this.explosionStrength); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("ExplosionPower", 99)) + { + this.explosionStrength = compound.getInteger("ExplosionPower"); + } + } + + public float getEyeHeight() + { + return 2.6F; + } + + static class AIFireballAttack extends EntityAIBase + { + private final EntityGhast parentEntity; + public int attackTimer; + + public AIFireballAttack(EntityGhast ghast) + { + this.parentEntity = ghast; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.parentEntity.getAttackTarget() != null; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.attackTimer = 0; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.parentEntity.setAttacking(false); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + EntityLivingBase entitylivingbase = this.parentEntity.getAttackTarget(); + double d0 = 64.0D; + + if (entitylivingbase.getDistanceSq(this.parentEntity) < 4096.0D && this.parentEntity.canEntityBeSeen(entitylivingbase)) + { + World world = this.parentEntity.world; + ++this.attackTimer; + + if (this.attackTimer == 10) + { + world.playEvent((EntityPlayer)null, 1015, new BlockPos(this.parentEntity), 0); + } + + if (this.attackTimer == 20) + { + double d1 = 4.0D; + Vec3d vec3d = this.parentEntity.getLook(1.0F); + double d2 = entitylivingbase.posX - (this.parentEntity.posX + vec3d.x * 4.0D); + double d3 = entitylivingbase.getEntityBoundingBox().minY + (double)(entitylivingbase.height / 2.0F) - (0.5D + this.parentEntity.posY + (double)(this.parentEntity.height / 2.0F)); + double d4 = entitylivingbase.posZ - (this.parentEntity.posZ + vec3d.z * 4.0D); + world.playEvent((EntityPlayer)null, 1016, new BlockPos(this.parentEntity), 0); + EntityLargeFireball entitylargefireball = new EntityLargeFireball(world, this.parentEntity, d2, d3, d4); + entitylargefireball.explosionPower = this.parentEntity.getFireballStrength(); + entitylargefireball.posX = this.parentEntity.posX + vec3d.x * 4.0D; + entitylargefireball.posY = this.parentEntity.posY + (double)(this.parentEntity.height / 2.0F) + 0.5D; + entitylargefireball.posZ = this.parentEntity.posZ + vec3d.z * 4.0D; + world.spawnEntity(entitylargefireball); + this.attackTimer = -40; + } + } + else if (this.attackTimer > 0) + { + --this.attackTimer; + } + + this.parentEntity.setAttacking(this.attackTimer > 10); + } + } + + static class AILookAround extends EntityAIBase + { + private final EntityGhast parentEntity; + + public AILookAround(EntityGhast ghast) + { + this.parentEntity = ghast; + this.setMutexBits(2); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return true; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.parentEntity.getAttackTarget() == null) + { + this.parentEntity.rotationYaw = -((float)MathHelper.atan2(this.parentEntity.motionX, this.parentEntity.motionZ)) * (180F / (float)Math.PI); + this.parentEntity.renderYawOffset = this.parentEntity.rotationYaw; + } + else + { + EntityLivingBase entitylivingbase = this.parentEntity.getAttackTarget(); + double d0 = 64.0D; + + if (entitylivingbase.getDistanceSq(this.parentEntity) < 4096.0D) + { + double d1 = entitylivingbase.posX - this.parentEntity.posX; + double d2 = entitylivingbase.posZ - this.parentEntity.posZ; + this.parentEntity.rotationYaw = -((float)MathHelper.atan2(d1, d2)) * (180F / (float)Math.PI); + this.parentEntity.renderYawOffset = this.parentEntity.rotationYaw; + } + } + } + } + + static class AIRandomFly extends EntityAIBase + { + private final EntityGhast parentEntity; + + public AIRandomFly(EntityGhast ghast) + { + this.parentEntity = ghast; + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityMoveHelper entitymovehelper = this.parentEntity.getMoveHelper(); + + if (!entitymovehelper.isUpdating()) + { + return true; + } + else + { + double d0 = entitymovehelper.getX() - this.parentEntity.posX; + double d1 = entitymovehelper.getY() - this.parentEntity.posY; + double d2 = entitymovehelper.getZ() - this.parentEntity.posZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + return d3 < 1.0D || d3 > 3600.0D; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return false; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + Random random = this.parentEntity.getRNG(); + double d0 = this.parentEntity.posX + (double)((random.nextFloat() * 2.0F - 1.0F) * 16.0F); + double d1 = this.parentEntity.posY + (double)((random.nextFloat() * 2.0F - 1.0F) * 16.0F); + double d2 = this.parentEntity.posZ + (double)((random.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.parentEntity.getMoveHelper().setMoveTo(d0, d1, d2, 1.0D); + } + } + + static class GhastMoveHelper extends EntityMoveHelper + { + private final EntityGhast parentEntity; + private int courseChangeCooldown; + + public GhastMoveHelper(EntityGhast ghast) + { + super(ghast); + this.parentEntity = ghast; + } + + public void onUpdateMoveHelper() + { + if (this.action == EntityMoveHelper.Action.MOVE_TO) + { + double d0 = this.posX - this.parentEntity.posX; + double d1 = this.posY - this.parentEntity.posY; + double d2 = this.posZ - this.parentEntity.posZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + if (this.courseChangeCooldown-- <= 0) + { + this.courseChangeCooldown += this.parentEntity.getRNG().nextInt(5) + 2; + d3 = (double)MathHelper.sqrt(d3); + + if (this.isNotColliding(this.posX, this.posY, this.posZ, d3)) + { + this.parentEntity.motionX += d0 / d3 * 0.1D; + this.parentEntity.motionY += d1 / d3 * 0.1D; + this.parentEntity.motionZ += d2 / d3 * 0.1D; + } + else + { + this.action = EntityMoveHelper.Action.WAIT; + } + } + } + } + + /** + * Checks if entity bounding box is not colliding with terrain + */ + private boolean isNotColliding(double x, double y, double z, double p_179926_7_) + { + double d0 = (x - this.parentEntity.posX) / p_179926_7_; + double d1 = (y - this.parentEntity.posY) / p_179926_7_; + double d2 = (z - this.parentEntity.posZ) / p_179926_7_; + AxisAlignedBB axisalignedbb = this.parentEntity.getEntityBoundingBox(); + + for (int i = 1; (double)i < p_179926_7_; ++i) + { + axisalignedbb = axisalignedbb.offset(d0, d1, d2); + + if (!this.parentEntity.world.getCollisionBoxes(this.parentEntity, axisalignedbb).isEmpty()) + { + return false; + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGiantZombie.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGiantZombie.java new file mode 100644 index 0000000..b4a0e2d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGiantZombie.java @@ -0,0 +1,48 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityGiantZombie extends EntityMob +{ + public EntityGiantZombie(World worldIn) + { + super(worldIn); + this.setSize(this.width * 6.0F, this.height * 6.0F); + } + + public static void registerFixesGiantZombie(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityGiantZombie.class); + } + + public float getEyeHeight() + { + return 10.440001F; + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(100.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(50.0D); + } + + public float getBlockPathWeight(BlockPos pos) + { + return this.world.getLightBrightness(pos) - 0.5F; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_GIANT; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGolem.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGolem.java new file mode 100644 index 0000000..4b12ca8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGolem.java @@ -0,0 +1,54 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.passive.IAnimals; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundEvent; +import net.minecraft.world.World; + +public abstract class EntityGolem extends EntityCreature implements IAnimals +{ + public EntityGolem(World worldIn) + { + super(worldIn); + } + + public void fall(float distance, float damageMultiplier) + { + } + + @Nullable + protected SoundEvent getAmbientSound() + { + return null; + } + + @Nullable + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return null; + } + + @Nullable + protected SoundEvent getDeathSound() + { + return null; + } + + /** + * Get number of ticks, at least during which the living entity will be silent. + */ + public int getTalkInterval() + { + return 120; + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGuardian.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGuardian.java new file mode 100644 index 0000000..55fd909 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityGuardian.java @@ -0,0 +1,612 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityLookHelper; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateSwimmer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityGuardian extends EntityMob +{ + private static final DataParameter MOVING = EntityDataManager.createKey(EntityGuardian.class, DataSerializers.BOOLEAN); + private static final DataParameter TARGET_ENTITY = EntityDataManager.createKey(EntityGuardian.class, DataSerializers.VARINT); + protected float clientSideTailAnimation; + protected float clientSideTailAnimationO; + protected float clientSideTailAnimationSpeed; + protected float clientSideSpikesAnimation; + protected float clientSideSpikesAnimationO; + private EntityLivingBase targetedEntity; + private int clientSideAttackTime; + private boolean clientSideTouchedGround; + protected EntityAIWander wander; + + public EntityGuardian(World worldIn) + { + super(worldIn); + this.experienceValue = 10; + this.setSize(0.85F, 0.85F); + this.moveHelper = new EntityGuardian.GuardianMoveHelper(this); + this.clientSideTailAnimation = this.rand.nextFloat(); + this.clientSideTailAnimationO = this.clientSideTailAnimation; + } + + protected void initEntityAI() + { + EntityAIMoveTowardsRestriction entityaimovetowardsrestriction = new EntityAIMoveTowardsRestriction(this, 1.0D); + this.wander = new EntityAIWander(this, 1.0D, 80); + this.tasks.addTask(4, new EntityGuardian.AIGuardianAttack(this)); + this.tasks.addTask(5, entityaimovetowardsrestriction); + this.tasks.addTask(7, this.wander); + this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityGuardian.class, 12.0F, 0.01F)); + this.tasks.addTask(9, new EntityAILookIdle(this)); + this.wander.setMutexBits(3); + entityaimovetowardsrestriction.setMutexBits(3); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityLivingBase.class, 10, true, false, new EntityGuardian.GuardianTargetSelector(this))); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(16.0D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D); + } + + public static void registerFixesGuardian(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityGuardian.class); + } + + /** + * Returns new PathNavigateGround instance + */ + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateSwimmer(this, worldIn); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(MOVING, Boolean.valueOf(false)); + this.dataManager.register(TARGET_ENTITY, Integer.valueOf(0)); + } + + public boolean isMoving() + { + return ((Boolean)this.dataManager.get(MOVING)).booleanValue(); + } + + private void setMoving(boolean moving) + { + this.dataManager.set(MOVING, Boolean.valueOf(moving)); + } + + public int getAttackDuration() + { + return 80; + } + + private void setTargetedEntity(int entityId) + { + this.dataManager.set(TARGET_ENTITY, Integer.valueOf(entityId)); + } + + public boolean hasTargetedEntity() + { + return ((Integer)this.dataManager.get(TARGET_ENTITY)).intValue() != 0; + } + + @Nullable + public EntityLivingBase getTargetedEntity() + { + if (!this.hasTargetedEntity()) + { + return null; + } + else if (this.world.isRemote) + { + if (this.targetedEntity != null) + { + return this.targetedEntity; + } + else + { + Entity entity = this.world.getEntityByID(((Integer)this.dataManager.get(TARGET_ENTITY)).intValue()); + + if (entity instanceof EntityLivingBase) + { + this.targetedEntity = (EntityLivingBase)entity; + return this.targetedEntity; + } + else + { + return null; + } + } + } + else + { + return this.getAttackTarget(); + } + } + + public void notifyDataManagerChange(DataParameter key) + { + super.notifyDataManagerChange(key); + + if (TARGET_ENTITY.equals(key)) + { + this.clientSideAttackTime = 0; + this.targetedEntity = null; + } + } + + /** + * Get number of ticks, at least during which the living entity will be silent. + */ + public int getTalkInterval() + { + return 160; + } + + protected SoundEvent getAmbientSound() + { + return this.isInWater() ? SoundEvents.ENTITY_GUARDIAN_AMBIENT : SoundEvents.ENTITY_GUARDIAN_AMBIENT_LAND; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return this.isInWater() ? SoundEvents.ENTITY_GUARDIAN_HURT : SoundEvents.ENTITY_GUARDIAN_HURT_LAND; + } + + protected SoundEvent getDeathSound() + { + return this.isInWater() ? SoundEvents.ENTITY_GUARDIAN_DEATH : SoundEvents.ENTITY_GUARDIAN_DEATH_LAND; + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + public float getEyeHeight() + { + return this.height * 0.5F; + } + + public float getBlockPathWeight(BlockPos pos) + { + return this.world.getBlockState(pos).getMaterial() == Material.WATER ? 10.0F + this.world.getLightBrightness(pos) - 0.5F : super.getBlockPathWeight(pos); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.world.isRemote) + { + this.clientSideTailAnimationO = this.clientSideTailAnimation; + + if (!this.isInWater()) + { + this.clientSideTailAnimationSpeed = 2.0F; + + if (this.motionY > 0.0D && this.clientSideTouchedGround && !this.isSilent()) + { + this.world.playSound(this.posX, this.posY, this.posZ, this.getFlopSound(), this.getSoundCategory(), 1.0F, 1.0F, false); + } + + this.clientSideTouchedGround = this.motionY < 0.0D && this.world.isBlockNormalCube((new BlockPos(this)).down(), false); + } + else if (this.isMoving()) + { + if (this.clientSideTailAnimationSpeed < 0.5F) + { + this.clientSideTailAnimationSpeed = 4.0F; + } + else + { + this.clientSideTailAnimationSpeed += (0.5F - this.clientSideTailAnimationSpeed) * 0.1F; + } + } + else + { + this.clientSideTailAnimationSpeed += (0.125F - this.clientSideTailAnimationSpeed) * 0.2F; + } + + this.clientSideTailAnimation += this.clientSideTailAnimationSpeed; + this.clientSideSpikesAnimationO = this.clientSideSpikesAnimation; + + if (!this.isInWater()) + { + this.clientSideSpikesAnimation = this.rand.nextFloat(); + } + else if (this.isMoving()) + { + this.clientSideSpikesAnimation += (0.0F - this.clientSideSpikesAnimation) * 0.25F; + } + else + { + this.clientSideSpikesAnimation += (1.0F - this.clientSideSpikesAnimation) * 0.06F; + } + + if (this.isMoving() && this.isInWater()) + { + Vec3d vec3d = this.getLook(0.0F); + + for (int i = 0; i < 2; ++i) + { + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width - vec3d.x * 1.5D, this.posY + this.rand.nextDouble() * (double)this.height - vec3d.y * 1.5D, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width - vec3d.z * 1.5D, 0.0D, 0.0D, 0.0D); + } + } + + if (this.hasTargetedEntity()) + { + if (this.clientSideAttackTime < this.getAttackDuration()) + { + ++this.clientSideAttackTime; + } + + EntityLivingBase entitylivingbase = this.getTargetedEntity(); + + if (entitylivingbase != null) + { + this.getLookHelper().setLookPositionWithEntity(entitylivingbase, 90.0F, 90.0F); + this.getLookHelper().onUpdateLook(); + double d5 = (double)this.getAttackAnimationScale(0.0F); + double d0 = entitylivingbase.posX - this.posX; + double d1 = entitylivingbase.posY + (double)(entitylivingbase.height * 0.5F) - (this.posY + (double)this.getEyeHeight()); + double d2 = entitylivingbase.posZ - this.posZ; + double d3 = Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + d0 = d0 / d3; + d1 = d1 / d3; + d2 = d2 / d3; + double d4 = this.rand.nextDouble(); + + while (d4 < d3) + { + d4 += 1.8D - d5 + this.rand.nextDouble() * (1.7D - d5); + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX + d0 * d4, this.posY + d1 * d4 + (double)this.getEyeHeight(), this.posZ + d2 * d4, 0.0D, 0.0D, 0.0D); + } + } + } + } + + if (this.inWater) + { + this.setAir(300); + } + else if (this.onGround) + { + this.motionY += 0.5D; + this.motionX += (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 0.4F); + this.motionZ += (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 0.4F); + this.rotationYaw = this.rand.nextFloat() * 360.0F; + this.onGround = false; + this.isAirBorne = true; + } + + if (this.hasTargetedEntity()) + { + this.rotationYaw = this.rotationYawHead; + } + + super.onLivingUpdate(); + } + + protected SoundEvent getFlopSound() + { + return SoundEvents.ENTITY_GUARDIAN_FLOP; + } + + @SideOnly(Side.CLIENT) + public float getTailAnimation(float p_175471_1_) + { + return this.clientSideTailAnimationO + (this.clientSideTailAnimation - this.clientSideTailAnimationO) * p_175471_1_; + } + + @SideOnly(Side.CLIENT) + public float getSpikesAnimation(float p_175469_1_) + { + return this.clientSideSpikesAnimationO + (this.clientSideSpikesAnimation - this.clientSideSpikesAnimationO) * p_175469_1_; + } + + public float getAttackAnimationScale(float p_175477_1_) + { + return ((float)this.clientSideAttackTime + p_175477_1_) / (float)this.getAttackDuration(); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_GUARDIAN; + } + + /** + * Checks to make sure the light is not too bright where the mob is spawning + */ + protected boolean isValidLightLevel() + { + return true; + } + + /** + * Checks that the entity is not colliding with any blocks / liquids + */ + public boolean isNotColliding() + { + return this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty(); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return (this.rand.nextInt(20) == 0 || !this.world.canBlockSeeSky(new BlockPos(this))) && super.getCanSpawnHere(); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (!this.isMoving() && !source.isMagicDamage() && source.getImmediateSource() instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)source.getImmediateSource(); + + if (!source.isExplosion()) + { + entitylivingbase.attackEntityFrom(DamageSource.causeThornsDamage(this), 2.0F); + } + } + + if (this.wander != null) + { + this.wander.makeUpdate(); + } + + return super.attackEntityFrom(source, amount); + } + + /** + * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently + * use in wolves. + */ + public int getVerticalFaceSpeed() + { + return 180; + } + + public void travel(float strafe, float vertical, float forward) + { + if (this.isServerWorld() && this.isInWater()) + { + this.moveRelative(strafe, vertical, forward, 0.1F); + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.8999999761581421D; + this.motionY *= 0.8999999761581421D; + this.motionZ *= 0.8999999761581421D; + + if (!this.isMoving() && this.getAttackTarget() == null) + { + this.motionY -= 0.005D; + } + } + else + { + super.travel(strafe, vertical, forward); + } + } + + static class AIGuardianAttack extends EntityAIBase + { + private final EntityGuardian guardian; + private int tickCounter; + private final boolean isElder; + + public AIGuardianAttack(EntityGuardian guardian) + { + this.guardian = guardian; + this.isElder = guardian instanceof EntityElderGuardian; + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.guardian.getAttackTarget(); + return entitylivingbase != null && entitylivingbase.isEntityAlive(); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return super.shouldContinueExecuting() && (this.isElder || this.guardian.getDistanceSq(this.guardian.getAttackTarget()) > 9.0D); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.tickCounter = -10; + this.guardian.getNavigator().clearPath(); + this.guardian.getLookHelper().setLookPositionWithEntity(this.guardian.getAttackTarget(), 90.0F, 90.0F); + this.guardian.isAirBorne = true; + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + this.guardian.setTargetedEntity(0); + this.guardian.setAttackTarget((EntityLivingBase)null); + this.guardian.wander.makeUpdate(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + EntityLivingBase entitylivingbase = this.guardian.getAttackTarget(); + this.guardian.getNavigator().clearPath(); + this.guardian.getLookHelper().setLookPositionWithEntity(entitylivingbase, 90.0F, 90.0F); + + if (!this.guardian.canEntityBeSeen(entitylivingbase)) + { + this.guardian.setAttackTarget((EntityLivingBase)null); + } + else + { + ++this.tickCounter; + + if (this.tickCounter == 0) + { + this.guardian.setTargetedEntity(this.guardian.getAttackTarget().getEntityId()); + this.guardian.world.setEntityState(this.guardian, (byte)21); + } + else if (this.tickCounter >= this.guardian.getAttackDuration()) + { + float f = 1.0F; + + if (this.guardian.world.getDifficulty() == EnumDifficulty.HARD) + { + f += 2.0F; + } + + if (this.isElder) + { + f += 2.0F; + } + + entitylivingbase.attackEntityFrom(DamageSource.causeIndirectMagicDamage(this.guardian, this.guardian), f); + entitylivingbase.attackEntityFrom(DamageSource.causeMobDamage(this.guardian), (float)this.guardian.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue()); + this.guardian.setAttackTarget((EntityLivingBase)null); + } + + super.updateTask(); + } + } + } + + static class GuardianMoveHelper extends EntityMoveHelper + { + private final EntityGuardian entityGuardian; + + public GuardianMoveHelper(EntityGuardian guardian) + { + super(guardian); + this.entityGuardian = guardian; + } + + public void onUpdateMoveHelper() + { + if (this.action == EntityMoveHelper.Action.MOVE_TO && !this.entityGuardian.getNavigator().noPath()) + { + double d0 = this.posX - this.entityGuardian.posX; + double d1 = this.posY - this.entityGuardian.posY; + double d2 = this.posZ - this.entityGuardian.posZ; + double d3 = (double)MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + d1 = d1 / d3; + float f = (float)(MathHelper.atan2(d2, d0) * (180D / Math.PI)) - 90.0F; + this.entityGuardian.rotationYaw = this.limitAngle(this.entityGuardian.rotationYaw, f, 90.0F); + this.entityGuardian.renderYawOffset = this.entityGuardian.rotationYaw; + float f1 = (float)(this.speed * this.entityGuardian.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue()); + this.entityGuardian.setAIMoveSpeed(this.entityGuardian.getAIMoveSpeed() + (f1 - this.entityGuardian.getAIMoveSpeed()) * 0.125F); + double d4 = Math.sin((double)(this.entityGuardian.ticksExisted + this.entityGuardian.getEntityId()) * 0.5D) * 0.05D; + double d5 = Math.cos((double)(this.entityGuardian.rotationYaw * 0.017453292F)); + double d6 = Math.sin((double)(this.entityGuardian.rotationYaw * 0.017453292F)); + this.entityGuardian.motionX += d4 * d5; + this.entityGuardian.motionZ += d4 * d6; + d4 = Math.sin((double)(this.entityGuardian.ticksExisted + this.entityGuardian.getEntityId()) * 0.75D) * 0.05D; + this.entityGuardian.motionY += d4 * (d6 + d5) * 0.25D; + this.entityGuardian.motionY += (double)this.entityGuardian.getAIMoveSpeed() * d1 * 0.1D; + EntityLookHelper entitylookhelper = this.entityGuardian.getLookHelper(); + double d7 = this.entityGuardian.posX + d0 / d3 * 2.0D; + double d8 = (double)this.entityGuardian.getEyeHeight() + this.entityGuardian.posY + d1 / d3; + double d9 = this.entityGuardian.posZ + d2 / d3 * 2.0D; + double d10 = entitylookhelper.getLookPosX(); + double d11 = entitylookhelper.getLookPosY(); + double d12 = entitylookhelper.getLookPosZ(); + + if (!entitylookhelper.getIsLooking()) + { + d10 = d7; + d11 = d8; + d12 = d9; + } + + this.entityGuardian.getLookHelper().setLookPosition(d10 + (d7 - d10) * 0.125D, d11 + (d8 - d11) * 0.125D, d12 + (d9 - d12) * 0.125D, 10.0F, 40.0F); + this.entityGuardian.setMoving(true); + } + else + { + this.entityGuardian.setAIMoveSpeed(0.0F); + this.entityGuardian.setMoving(false); + } + } + } + + static class GuardianTargetSelector implements Predicate + { + private final EntityGuardian parentEntity; + + public GuardianTargetSelector(EntityGuardian guardian) + { + this.parentEntity = guardian; + } + + public boolean apply(@Nullable EntityLivingBase p_apply_1_) + { + return (p_apply_1_ instanceof EntityPlayer || p_apply_1_ instanceof EntitySquid) && p_apply_1_.getDistanceSq(this.parentEntity) > 9.0D; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityHusk.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityHusk.java new file mode 100644 index 0000000..43bd4c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityHusk.java @@ -0,0 +1,87 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityHusk extends EntityZombie +{ + public EntityHusk(World worldIn) + { + super(worldIn); + } + + public static void registerFixesHusk(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityHusk.class); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return super.getCanSpawnHere() && this.world.canSeeSky(new BlockPos(this)); + } + + protected boolean shouldBurnInDay() + { + return false; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_HUSK_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_HUSK_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_HUSK_DEATH; + } + + protected SoundEvent getStepSound() + { + return SoundEvents.ENTITY_HUSK_STEP; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_HUSK; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + boolean flag = super.attackEntityAsMob(entityIn); + + if (flag && this.getHeldItemMainhand().isEmpty() && entityIn instanceof EntityLivingBase) + { + float f = this.world.getDifficultyForLocation(new BlockPos(this)).getAdditionalDifficulty(); + ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(MobEffects.HUNGER, 140 * (int)f)); + } + + return flag; + } + + protected ItemStack getSkullDrop() + { + return ItemStack.EMPTY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityIllusionIllager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityIllusionIllager.java new file mode 100644 index 0000000..1125d3a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityIllusionIllager.java @@ -0,0 +1,390 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackRangedBow; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityIllusionIllager extends EntitySpellcasterIllager implements IRangedAttackMob +{ + private int ghostTime; + private final Vec3d[][] renderLocations; + + public EntityIllusionIllager(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.95F); + this.experienceValue = 5; + this.renderLocations = new Vec3d[2][4]; + + for (int i = 0; i < 4; ++i) + { + this.renderLocations[0][i] = new Vec3d(0.0D, 0.0D, 0.0D); + this.renderLocations[1][i] = new Vec3d(0.0D, 0.0D, 0.0D); + } + } + + protected void initEntityAI() + { + super.initEntityAI(); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntitySpellcasterIllager.AICastingApell()); + this.tasks.addTask(4, new EntityIllusionIllager.AIMirriorSpell()); + this.tasks.addTask(5, new EntityIllusionIllager.AIBlindnessSpell()); + this.tasks.addTask(6, new EntityAIAttackRangedBow(this, 0.5D, 20, 15.0F)); + this.tasks.addTask(8, new EntityAIWander(this, 0.6D)); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[] {EntityIllusionIllager.class})); + this.targetTasks.addTask(2, (new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)).setUnseenMemoryTicks(300)); + this.targetTasks.addTask(3, (new EntityAINearestAttackableTarget(this, EntityVillager.class, false)).setUnseenMemoryTicks(300)); + this.targetTasks.addTask(3, (new EntityAINearestAttackableTarget(this, EntityIronGolem.class, false)).setUnseenMemoryTicks(300)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(18.0D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(32.0D); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.BOW)); + return super.onInitialSpawn(difficulty, livingdata); + } + + protected void entityInit() + { + super.entityInit(); + } + + protected ResourceLocation getLootTable() + { + return LootTableList.EMPTY; + } + + /** + * Gets the bounding box of this Entity, adjusted to take auxiliary entities into account (e.g. the tile contained + * by a minecart, such as a command block). + */ + @SideOnly(Side.CLIENT) + public AxisAlignedBB getRenderBoundingBox() + { + return this.getEntityBoundingBox().grow(3.0D, 0.0D, 3.0D); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.world.isRemote && this.isInvisible()) + { + --this.ghostTime; + + if (this.ghostTime < 0) + { + this.ghostTime = 0; + } + + if (this.hurtTime != 1 && this.ticksExisted % 1200 != 0) + { + if (this.hurtTime == this.maxHurtTime - 1) + { + this.ghostTime = 3; + + for (int k = 0; k < 4; ++k) + { + this.renderLocations[0][k] = this.renderLocations[1][k]; + this.renderLocations[1][k] = new Vec3d(0.0D, 0.0D, 0.0D); + } + } + } + else + { + this.ghostTime = 3; + float f = -6.0F; + int i = 13; + + for (int j = 0; j < 4; ++j) + { + this.renderLocations[0][j] = this.renderLocations[1][j]; + this.renderLocations[1][j] = new Vec3d((double)(-6.0F + (float)this.rand.nextInt(13)) * 0.5D, (double)Math.max(0, this.rand.nextInt(6) - 4), (double)(-6.0F + (float)this.rand.nextInt(13)) * 0.5D); + } + + for (int l = 0; l < 16; ++l) + { + this.world.spawnParticle(EnumParticleTypes.CLOUD, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, 0.0D, 0.0D, 0.0D); + } + + this.world.playSound(this.posX, this.posY, this.posZ, SoundEvents.ENTITY_ILLAGER_MIRROR_MOVE, this.getSoundCategory(), 1.0F, 1.0F, false); + } + } + } + + @SideOnly(Side.CLIENT) + public Vec3d[] getRenderLocations(float p_193098_1_) + { + if (this.ghostTime <= 0) + { + return this.renderLocations[1]; + } + else + { + double d0 = (double)(((float)this.ghostTime - p_193098_1_) / 3.0F); + d0 = Math.pow(d0, 0.25D); + Vec3d[] avec3d = new Vec3d[4]; + + for (int i = 0; i < 4; ++i) + { + avec3d[i] = this.renderLocations[1][i].scale(1.0D - d0).add(this.renderLocations[0][i].scale(d0)); + } + + return avec3d; + } + } + + /** + * Returns whether this Entity is on the same team as the given Entity. + */ + public boolean isOnSameTeam(Entity entityIn) + { + if (super.isOnSameTeam(entityIn)) + { + return true; + } + else if (entityIn instanceof EntityLivingBase && ((EntityLivingBase)entityIn).getCreatureAttribute() == EnumCreatureAttribute.ILLAGER) + { + return this.getTeam() == null && entityIn.getTeam() == null; + } + else + { + return false; + } + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_ILLUSION_ILLAGER_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ILLAGER_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ILLUSION_ILLAGER_HURT; + } + + protected SoundEvent getSpellSound() + { + return SoundEvents.ENTITY_ILLAGER_CAST_SPELL; + } + + /** + * Attack the specified entity using a ranged attack. + */ + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) + { + EntityArrow entityarrow = this.createArrowEntity(distanceFactor); + double d0 = target.posX - this.posX; + double d1 = target.getEntityBoundingBox().minY + (double)(target.height / 3.0F) - entityarrow.posY; + double d2 = target.posZ - this.posZ; + double d3 = (double)MathHelper.sqrt(d0 * d0 + d2 * d2); + entityarrow.shoot(d0, d1 + d3 * 0.20000000298023224D, d2, 1.6F, (float)(14 - this.world.getDifficulty().getDifficultyId() * 4)); + this.playSound(SoundEvents.ENTITY_SKELETON_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(entityarrow); + } + + protected EntityArrow createArrowEntity(float p_193097_1_) + { + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(this.world, this); + entitytippedarrow.setEnchantmentEffectsFromEntity(this, p_193097_1_); + return entitytippedarrow; + } + + @SideOnly(Side.CLIENT) + public boolean isAggressive() + { + return this.isAggressive(1); + } + + public void setSwingingArms(boolean swingingArms) + { + this.setAggressive(1, swingingArms); + } + + @SideOnly(Side.CLIENT) + public AbstractIllager.IllagerArmPose getArmPose() + { + if (this.isSpellcasting()) + { + return AbstractIllager.IllagerArmPose.SPELLCASTING; + } + else + { + return this.isAggressive() ? AbstractIllager.IllagerArmPose.BOW_AND_ARROW : AbstractIllager.IllagerArmPose.CROSSED; + } + } + + class AIBlindnessSpell extends EntitySpellcasterIllager.AIUseSpell + { + private int lastTargetId; + + private AIBlindnessSpell() + { + super(); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!super.shouldExecute()) + { + return false; + } + else if (EntityIllusionIllager.this.getAttackTarget() == null) + { + return false; + } + else if (EntityIllusionIllager.this.getAttackTarget().getEntityId() == this.lastTargetId) + { + return false; + } + else + { + return EntityIllusionIllager.this.world.getDifficultyForLocation(new BlockPos(EntityIllusionIllager.this)).isHarderThan((float)EnumDifficulty.NORMAL.ordinal()); + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + this.lastTargetId = EntityIllusionIllager.this.getAttackTarget().getEntityId(); + } + + protected int getCastingTime() + { + return 20; + } + + protected int getCastingInterval() + { + return 180; + } + + protected void castSpell() + { + EntityIllusionIllager.this.getAttackTarget().addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 400)); + } + + protected SoundEvent getSpellPrepareSound() + { + return SoundEvents.ENTITY_ILLAGER_PREPARE_BLINDNESS; + } + + protected EntitySpellcasterIllager.SpellType getSpellType() + { + return EntitySpellcasterIllager.SpellType.BLINDNESS; + } + } + + class AIMirriorSpell extends EntitySpellcasterIllager.AIUseSpell + { + private AIMirriorSpell() + { + super(); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (!super.shouldExecute()) + { + return false; + } + else + { + return !EntityIllusionIllager.this.isPotionActive(MobEffects.INVISIBILITY); + } + } + + protected int getCastingTime() + { + return 20; + } + + protected int getCastingInterval() + { + return 340; + } + + protected void castSpell() + { + EntityIllusionIllager.this.addPotionEffect(new PotionEffect(MobEffects.INVISIBILITY, 1200)); + } + + @Nullable + protected SoundEvent getSpellPrepareSound() + { + return SoundEvents.ENTITY_ILLAGER_PREPARE_MIRROR; + } + + protected EntitySpellcasterIllager.SpellType getSpellType() + { + return EntitySpellcasterIllager.SpellType.DISAPPEAR; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityIronGolem.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityIronGolem.java new file mode 100644 index 0000000..27cc6c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityIronGolem.java @@ -0,0 +1,325 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIDefendVillage; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookAtVillager; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMoveThroughVillage; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAIMoveTowardsTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.village.Village; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityIronGolem extends EntityGolem +{ + protected static final DataParameter PLAYER_CREATED = EntityDataManager.createKey(EntityIronGolem.class, DataSerializers.BYTE); + /** deincrements, and a distance-to-home check is done at 0 */ + private int homeCheckTimer; + @Nullable + Village village; + private int attackTimer; + private int holdRoseTick; + + public EntityIronGolem(World worldIn) + { + super(worldIn); + this.setSize(1.4F, 2.7F); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAIAttackMelee(this, 1.0D, true)); + this.tasks.addTask(2, new EntityAIMoveTowardsTarget(this, 0.9D, 32.0F)); + this.tasks.addTask(3, new EntityAIMoveThroughVillage(this, 0.6D, true)); + this.tasks.addTask(4, new EntityAIMoveTowardsRestriction(this, 1.0D)); + this.tasks.addTask(5, new EntityAILookAtVillager(this)); + this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 0.6D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIDefendVillage(this)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityLiving.class, 10, false, true, new Predicate() + { + public boolean apply(@Nullable EntityLiving p_apply_1_) + { + return p_apply_1_ != null && IMob.VISIBLE_MOB_SELECTOR.apply(p_apply_1_) && !(p_apply_1_ instanceof EntityCreeper); + } + })); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(PLAYER_CREATED, Byte.valueOf((byte)0)); + } + + protected void updateAITasks() + { + if (--this.homeCheckTimer <= 0) + { + this.homeCheckTimer = 70 + this.rand.nextInt(50); + this.village = this.world.getVillageCollection().getNearestVillage(new BlockPos(this), 32); + + if (this.village == null) + { + this.detachHome(); + } + else + { + BlockPos blockpos = this.village.getCenter(); + this.setHomePosAndDistance(blockpos, (int)((float)this.village.getVillageRadius() * 0.6F)); + } + } + + super.updateAITasks(); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(100.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(1.0D); + } + + /** + * Decrements the entity's air supply when underwater + */ + protected int decreaseAirSupply(int air) + { + return air; + } + + protected void collideWithEntity(Entity entityIn) + { + if (entityIn instanceof IMob && !(entityIn instanceof EntityCreeper) && this.getRNG().nextInt(20) == 0) + { + this.setAttackTarget((EntityLivingBase)entityIn); + } + + super.collideWithEntity(entityIn); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.attackTimer > 0) + { + --this.attackTimer; + } + + if (this.holdRoseTick > 0) + { + --this.holdRoseTick; + } + + if (this.motionX * this.motionX + this.motionZ * this.motionZ > 2.500000277905201E-7D && this.rand.nextInt(5) == 0) + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.posY - 0.20000000298023224D); + int k = MathHelper.floor(this.posZ); + IBlockState iblockstate = this.world.getBlockState(new BlockPos(i, j, k)); + + if (iblockstate.getMaterial() != Material.AIR) + { + this.world.spawnParticle(EnumParticleTypes.BLOCK_CRACK, this.posX + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, this.getEntityBoundingBox().minY + 0.1D, this.posZ + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, 4.0D * ((double)this.rand.nextFloat() - 0.5D), 0.5D, ((double)this.rand.nextFloat() - 0.5D) * 4.0D, Block.getStateId(iblockstate)); + } + } + } + + /** + * Returns true if this entity can attack entities of the specified class. + */ + public boolean canAttackClass(Class cls) + { + if (this.isPlayerCreated() && EntityPlayer.class.isAssignableFrom(cls)) + { + return false; + } + else + { + return cls == EntityCreeper.class ? false : super.canAttackClass(cls); + } + } + + public static void registerFixesIronGolem(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityIronGolem.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("PlayerCreated", this.isPlayerCreated()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setPlayerCreated(compound.getBoolean("PlayerCreated")); + } + + public boolean attackEntityAsMob(Entity entityIn) + { + this.attackTimer = 10; + this.world.setEntityState(this, (byte)4); + boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float)(7 + this.rand.nextInt(15))); + + if (flag) + { + entityIn.motionY += 0.4000000059604645D; + this.applyEnchantments(this, entityIn); + } + + this.playSound(SoundEvents.ENTITY_IRONGOLEM_ATTACK, 1.0F, 1.0F); + return flag; + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 4) + { + this.attackTimer = 10; + this.playSound(SoundEvents.ENTITY_IRONGOLEM_ATTACK, 1.0F, 1.0F); + } + else if (id == 11) + { + this.holdRoseTick = 400; + } + else if (id == 34) + { + this.holdRoseTick = 0; + } + else + { + super.handleStatusUpdate(id); + } + } + + public Village getVillage() + { + return this.village; + } + + @SideOnly(Side.CLIENT) + public int getAttackTimer() + { + return this.attackTimer; + } + + public void setHoldingRose(boolean p_70851_1_) + { + if (p_70851_1_) + { + this.holdRoseTick = 400; + this.world.setEntityState(this, (byte)11); + } + else + { + this.holdRoseTick = 0; + this.world.setEntityState(this, (byte)34); + } + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_IRONGOLEM_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_IRONGOLEM_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_IRONGOLEM_STEP, 1.0F, 1.0F); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_IRON_GOLEM; + } + + public int getHoldRoseTick() + { + return this.holdRoseTick; + } + + public boolean isPlayerCreated() + { + return (((Byte)this.dataManager.get(PLAYER_CREATED)).byteValue() & 1) != 0; + } + + public void setPlayerCreated(boolean playerCreated) + { + byte b0 = ((Byte)this.dataManager.get(PLAYER_CREATED)).byteValue(); + + if (playerCreated) + { + this.dataManager.set(PLAYER_CREATED, Byte.valueOf((byte)(b0 | 1))); + } + else + { + this.dataManager.set(PLAYER_CREATED, Byte.valueOf((byte)(b0 & -2))); + } + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + if (!this.isPlayerCreated() && this.attackingPlayer != null && this.village != null) + { + this.village.modifyPlayerReputation(this.attackingPlayer.getUniqueID(), -5); + } + + super.onDeath(cause); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityMagmaCube.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityMagmaCube.java new file mode 100644 index 0000000..5a55f0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityMagmaCube.java @@ -0,0 +1,165 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityMagmaCube extends EntitySlime +{ + public EntityMagmaCube(World worldIn) + { + super(worldIn); + this.isImmuneToFire = true; + } + + public static void registerFixesMagmaCube(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityMagmaCube.class); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.20000000298023224D); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return this.world.getDifficulty() != EnumDifficulty.PEACEFUL; + } + + /** + * Checks that the entity is not colliding with any blocks / liquids + */ + public boolean isNotColliding() + { + return this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && !this.world.containsAnyLiquid(this.getEntityBoundingBox()); + } + + protected void setSlimeSize(int size, boolean resetHealth) + { + super.setSlimeSize(size, resetHealth); + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue((double)(size * 3)); + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + return 1.0F; + } + + protected EnumParticleTypes getParticleType() + { + return EnumParticleTypes.FLAME; + } + + protected EntitySlime createInstance() + { + return new EntityMagmaCube(this.world); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return this.isSmallSlime() ? LootTableList.EMPTY : LootTableList.ENTITIES_MAGMA_CUBE; + } + + /** + * Returns true if the entity is on fire. Used by render to add the fire effect on rendering. + */ + public boolean isBurning() + { + return false; + } + + /** + * Gets the amount of time the slime needs to wait between jumps. + */ + protected int getJumpDelay() + { + return super.getJumpDelay() * 4; + } + + protected void alterSquishAmount() + { + this.squishAmount *= 0.9F; + } + + /** + * Causes this entity to do an upwards motion (jumping). + */ + protected void jump() + { + this.motionY = (double)(0.42F + (float)this.getSlimeSize() * 0.1F); + this.isAirBorne = true; + net.minecraftforge.common.ForgeHooks.onLivingJump(this); + } + + protected void handleJumpLava() + { + this.motionY = (double)(0.22F + (float)this.getSlimeSize() * 0.05F); + this.isAirBorne = true; + } + + public void fall(float distance, float damageMultiplier) + { + } + + /** + * Indicates weather the slime is able to damage the player (based upon the slime's size) + */ + protected boolean canDamagePlayer() + { + return true; + } + + /** + * Gets the amount of damage dealt to the player when "attacked" by the slime. + */ + protected int getAttackStrength() + { + return super.getAttackStrength() + 2; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_MAGMACUBE_HURT : SoundEvents.ENTITY_MAGMACUBE_HURT; + } + + protected SoundEvent getDeathSound() + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_MAGMACUBE_DEATH : SoundEvents.ENTITY_MAGMACUBE_DEATH; + } + + protected SoundEvent getSquishSound() + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_MAGMACUBE_SQUISH : SoundEvents.ENTITY_MAGMACUBE_SQUISH; + } + + protected SoundEvent getJumpSound() + { + return SoundEvents.ENTITY_MAGMACUBE_JUMP; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityMob.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityMob.java new file mode 100644 index 0000000..5a543f0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityMob.java @@ -0,0 +1,209 @@ +package net.minecraft.entity.monster; + +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemAxe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; + +public abstract class EntityMob extends EntityCreature implements IMob +{ + public EntityMob(World worldIn) + { + super(worldIn); + this.experienceValue = 5; + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.HOSTILE; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + this.updateArmSwingProgress(); + float f = this.getBrightness(); + + if (f > 0.5F) + { + this.idleTime += 2; + } + + super.onLivingUpdate(); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote && this.world.getDifficulty() == EnumDifficulty.PEACEFUL) + { + this.setDead(); + } + } + + protected SoundEvent getSwimSound() + { + return SoundEvents.ENTITY_HOSTILE_SWIM; + } + + protected SoundEvent getSplashSound() + { + return SoundEvents.ENTITY_HOSTILE_SPLASH; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + return this.isEntityInvulnerable(source) ? false : super.attackEntityFrom(source, amount); + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_HOSTILE_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_HOSTILE_DEATH; + } + + protected SoundEvent getFallSound(int heightIn) + { + return heightIn > 4 ? SoundEvents.ENTITY_HOSTILE_BIG_FALL : SoundEvents.ENTITY_HOSTILE_SMALL_FALL; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + float f = (float)this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue(); + int i = 0; + + if (entityIn instanceof EntityLivingBase) + { + f += EnchantmentHelper.getModifierForCreature(this.getHeldItemMainhand(), ((EntityLivingBase)entityIn).getCreatureAttribute()); + i += EnchantmentHelper.getKnockbackModifier(this); + } + + boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), f); + + if (flag) + { + if (i > 0 && entityIn instanceof EntityLivingBase) + { + ((EntityLivingBase)entityIn).knockBack(this, (float)i * 0.5F, (double)MathHelper.sin(this.rotationYaw * 0.017453292F), (double)(-MathHelper.cos(this.rotationYaw * 0.017453292F))); + this.motionX *= 0.6D; + this.motionZ *= 0.6D; + } + + int j = EnchantmentHelper.getFireAspectModifier(this); + + if (j > 0) + { + entityIn.setFire(j * 4); + } + + if (entityIn instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)entityIn; + ItemStack itemstack = this.getHeldItemMainhand(); + ItemStack itemstack1 = entityplayer.isHandActive() ? entityplayer.getActiveItemStack() : ItemStack.EMPTY; + + if (!itemstack.isEmpty() && !itemstack1.isEmpty() && itemstack.getItem().canDisableShield(itemstack, itemstack1, entityplayer, this) && itemstack1.getItem().isShield(itemstack1, entityplayer)) + { + float f1 = 0.25F + (float)EnchantmentHelper.getEfficiencyModifier(this) * 0.05F; + + if (this.rand.nextFloat() < f1) + { + entityplayer.getCooldownTracker().setCooldown(itemstack1.getItem(), 100); + this.world.setEntityState(entityplayer, (byte)30); + } + } + } + + this.applyEnchantments(this, entityIn); + } + + return flag; + } + + public float getBlockPathWeight(BlockPos pos) + { + return 0.5F - this.world.getLightBrightness(pos); + } + + /** + * Checks to make sure the light is not too bright where the mob is spawning + */ + protected boolean isValidLightLevel() + { + BlockPos blockpos = new BlockPos(this.posX, this.getEntityBoundingBox().minY, this.posZ); + + if (this.world.getLightFor(EnumSkyBlock.SKY, blockpos) > this.rand.nextInt(32)) + { + return false; + } + else + { + int i = this.world.getLightFromNeighbors(blockpos); + + if (this.world.isThundering()) + { + int j = this.world.getSkylightSubtracted(); + this.world.setSkylightSubtracted(10); + i = this.world.getLightFromNeighbors(blockpos); + this.world.setSkylightSubtracted(j); + } + + return i <= this.rand.nextInt(8); + } + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return this.world.getDifficulty() != EnumDifficulty.PEACEFUL && this.isValidLightLevel() && super.getCanSpawnHere(); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE); + } + + /** + * Entity won't drop items or experience points if this returns false + */ + protected boolean canDropLoot() + { + return true; + } + + public boolean isPreventingPlayerRest(EntityPlayer playerIn) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityPigZombie.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityPigZombie.java new file mode 100644 index 0000000..539f571 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityPigZombie.java @@ -0,0 +1,288 @@ +package net.minecraft.entity.monster; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityPigZombie extends EntityZombie +{ + private static final UUID ATTACK_SPEED_BOOST_MODIFIER_UUID = UUID.fromString("49455A49-7EC5-45BA-B886-3B90B23A1718"); + private static final AttributeModifier ATTACK_SPEED_BOOST_MODIFIER = (new AttributeModifier(ATTACK_SPEED_BOOST_MODIFIER_UUID, "Attacking speed boost", 0.05D, 0)).setSaved(false); + /** Above zero if this PigZombie is Angry. */ + private int angerLevel; + /** A random delay until this PigZombie next makes a sound. */ + private int randomSoundDelay; + private UUID angerTargetUUID; + + public EntityPigZombie(World worldIn) + { + super(worldIn); + this.isImmuneToFire = true; + } + + /** + * Hint to AI tasks that we were attacked by the passed EntityLivingBase and should retaliate. Is not guaranteed to + * change our actual active target (for example if we are currently busy attacking someone else) + */ + public void setRevengeTarget(@Nullable EntityLivingBase livingBase) + { + super.setRevengeTarget(livingBase); + + if (livingBase != null) + { + this.angerTargetUUID = livingBase.getUniqueID(); + } + } + + protected void applyEntityAI() + { + this.targetTasks.addTask(1, new EntityPigZombie.AIHurtByAggressor(this)); + this.targetTasks.addTask(2, new EntityPigZombie.AITargetAggressor(this)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23000000417232513D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(5.0D); + } + + protected void updateAITasks() + { + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + + if (this.isAngry()) + { + if (!this.isChild() && !iattributeinstance.hasModifier(ATTACK_SPEED_BOOST_MODIFIER)) + { + iattributeinstance.applyModifier(ATTACK_SPEED_BOOST_MODIFIER); + } + + --this.angerLevel; + } + else if (iattributeinstance.hasModifier(ATTACK_SPEED_BOOST_MODIFIER)) + { + iattributeinstance.removeModifier(ATTACK_SPEED_BOOST_MODIFIER); + } + + if (this.randomSoundDelay > 0 && --this.randomSoundDelay == 0) + { + this.playSound(SoundEvents.ENTITY_ZOMBIE_PIG_ANGRY, this.getSoundVolume() * 2.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 1.8F); + } + + if (this.angerLevel > 0 && this.angerTargetUUID != null && this.getRevengeTarget() == null) + { + EntityPlayer entityplayer = this.world.getPlayerEntityByUUID(this.angerTargetUUID); + this.setRevengeTarget(entityplayer); + this.attackingPlayer = entityplayer; + this.recentlyHit = this.getRevengeTimer(); + } + + super.updateAITasks(); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return this.world.getDifficulty() != EnumDifficulty.PEACEFUL; + } + + /** + * Checks that the entity is not colliding with any blocks / liquids + */ + public boolean isNotColliding() + { + return this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && !this.world.containsAnyLiquid(this.getEntityBoundingBox()); + } + + public static void registerFixesPigZombie(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityPigZombie.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setShort("Anger", (short)this.angerLevel); + + if (this.angerTargetUUID != null) + { + compound.setString("HurtBy", this.angerTargetUUID.toString()); + } + else + { + compound.setString("HurtBy", ""); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.angerLevel = compound.getShort("Anger"); + String s = compound.getString("HurtBy"); + + if (!s.isEmpty()) + { + this.angerTargetUUID = UUID.fromString(s); + EntityPlayer entityplayer = this.world.getPlayerEntityByUUID(this.angerTargetUUID); + this.setRevengeTarget(entityplayer); + + if (entityplayer != null) + { + this.attackingPlayer = entityplayer; + this.recentlyHit = this.getRevengeTimer(); + } + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + Entity entity = source.getTrueSource(); + + if (entity instanceof EntityPlayer) + { + this.becomeAngryAt(entity); + } + + return super.attackEntityFrom(source, amount); + } + } + + /** + * Causes this PigZombie to become angry at the supplied Entity (which will be a player). + */ + private void becomeAngryAt(Entity p_70835_1_) + { + this.angerLevel = 400 + this.rand.nextInt(400); + this.randomSoundDelay = this.rand.nextInt(40); + + if (p_70835_1_ instanceof EntityLivingBase) + { + this.setRevengeTarget((EntityLivingBase)p_70835_1_); + } + } + + public boolean isAngry() + { + return this.angerLevel > 0; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_ZOMBIE_PIG_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ZOMBIE_PIG_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ZOMBIE_PIG_DEATH; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ZOMBIE_PIGMAN; + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + return false; + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.GOLDEN_SWORD)); + } + + protected ItemStack getSkullDrop() + { + return ItemStack.EMPTY; + } + + public boolean isPreventingPlayerRest(EntityPlayer playerIn) + { + return this.isAngry(); + } + + static class AIHurtByAggressor extends EntityAIHurtByTarget + { + public AIHurtByAggressor(EntityPigZombie p_i45828_1_) + { + super(p_i45828_1_, true); + } + + protected void setEntityAttackTarget(EntityCreature creatureIn, EntityLivingBase entityLivingBaseIn) + { + super.setEntityAttackTarget(creatureIn, entityLivingBaseIn); + + if (creatureIn instanceof EntityPigZombie) + { + ((EntityPigZombie)creatureIn).becomeAngryAt(entityLivingBaseIn); + } + } + } + + static class AITargetAggressor extends EntityAINearestAttackableTarget + { + public AITargetAggressor(EntityPigZombie p_i45829_1_) + { + super(p_i45829_1_, EntityPlayer.class, true); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return ((EntityPigZombie)this.taskOwner).isAngry() && super.shouldExecute(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityPolarBear.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityPolarBear.java new file mode 100644 index 0000000..ef87165 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityPolarBear.java @@ -0,0 +1,361 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityPolarBear extends EntityAnimal +{ + private static final DataParameter IS_STANDING = EntityDataManager.createKey(EntityPolarBear.class, DataSerializers.BOOLEAN); + private float clientSideStandAnimation0; + private float clientSideStandAnimation; + private int warningSoundTicks; + + public EntityPolarBear(World worldIn) + { + super(worldIn); + this.setSize(1.3F, 1.4F); + } + + public EntityAgeable createChild(EntityAgeable ageable) + { + return new EntityPolarBear(this.world); + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return false; + } + + protected void initEntityAI() + { + super.initEntityAI(); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityPolarBear.AIMeleeAttack()); + this.tasks.addTask(1, new EntityPolarBear.AIPanic()); + this.tasks.addTask(4, new EntityAIFollowParent(this, 1.25D)); + this.tasks.addTask(5, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityPolarBear.AIHurtByTarget()); + this.targetTasks.addTask(2, new EntityPolarBear.AIAttackPlayer()); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(20.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(6.0D); + } + + protected SoundEvent getAmbientSound() + { + return this.isChild() ? SoundEvents.ENTITY_POLAR_BEAR_BABY_AMBIENT : SoundEvents.ENTITY_POLAR_BEAR_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_POLAR_BEAR_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_POLAR_BEAR_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_POLAR_BEAR_STEP, 0.15F, 1.0F); + } + + protected void playWarningSound() + { + if (this.warningSoundTicks <= 0) + { + this.playSound(SoundEvents.ENTITY_POLAR_BEAR_WARNING, 1.0F, 1.0F); + this.warningSoundTicks = 40; + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_POLAR_BEAR; + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(IS_STANDING, Boolean.valueOf(false)); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote) + { + this.clientSideStandAnimation0 = this.clientSideStandAnimation; + + if (this.isStanding()) + { + this.clientSideStandAnimation = MathHelper.clamp(this.clientSideStandAnimation + 1.0F, 0.0F, 6.0F); + } + else + { + this.clientSideStandAnimation = MathHelper.clamp(this.clientSideStandAnimation - 1.0F, 0.0F, 6.0F); + } + } + + if (this.warningSoundTicks > 0) + { + --this.warningSoundTicks; + } + } + + public boolean attackEntityAsMob(Entity entityIn) + { + boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float)((int)this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue())); + + if (flag) + { + this.applyEnchantments(this, entityIn); + } + + return flag; + } + + public boolean isStanding() + { + return ((Boolean)this.dataManager.get(IS_STANDING)).booleanValue(); + } + + public void setStanding(boolean standing) + { + this.dataManager.set(IS_STANDING, Boolean.valueOf(standing)); + } + + @SideOnly(Side.CLIENT) + public float getStandingAnimationScale(float p_189795_1_) + { + return (this.clientSideStandAnimation0 + (this.clientSideStandAnimation - this.clientSideStandAnimation0) * p_189795_1_) / 6.0F; + } + + protected float getWaterSlowDown() + { + return 0.98F; + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, IEntityLivingData livingdata) + { + if (livingdata instanceof EntityPolarBear.GroupData) + { + if (((EntityPolarBear.GroupData)livingdata).madeParent) + { + this.setGrowingAge(-24000); + } + } + else + { + EntityPolarBear.GroupData entitypolarbear$groupdata = new EntityPolarBear.GroupData(); + entitypolarbear$groupdata.madeParent = true; + livingdata = entitypolarbear$groupdata; + } + + return livingdata; + } + + class AIAttackPlayer extends EntityAINearestAttackableTarget + { + public AIAttackPlayer() + { + super(EntityPolarBear.this, EntityPlayer.class, 20, true, true, (Predicate)null); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (EntityPolarBear.this.isChild()) + { + return false; + } + else + { + if (super.shouldExecute()) + { + for (EntityPolarBear entitypolarbear : EntityPolarBear.this.world.getEntitiesWithinAABB(EntityPolarBear.class, EntityPolarBear.this.getEntityBoundingBox().grow(8.0D, 4.0D, 8.0D))) + { + if (entitypolarbear.isChild()) + { + return true; + } + } + } + + EntityPolarBear.this.setAttackTarget((EntityLivingBase)null); + return false; + } + } + + protected double getTargetDistance() + { + return super.getTargetDistance() * 0.5D; + } + } + + class AIHurtByTarget extends EntityAIHurtByTarget + { + public AIHurtByTarget() + { + super(EntityPolarBear.this, false); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + + if (EntityPolarBear.this.isChild()) + { + this.alertOthers(); + this.resetTask(); + } + } + + protected void setEntityAttackTarget(EntityCreature creatureIn, EntityLivingBase entityLivingBaseIn) + { + if (creatureIn instanceof EntityPolarBear && !creatureIn.isChild()) + { + super.setEntityAttackTarget(creatureIn, entityLivingBaseIn); + } + } + } + + class AIMeleeAttack extends EntityAIAttackMelee + { + public AIMeleeAttack() + { + super(EntityPolarBear.this, 1.25D, true); + } + + protected void checkAndPerformAttack(EntityLivingBase p_190102_1_, double p_190102_2_) + { + double d0 = this.getAttackReachSqr(p_190102_1_); + + if (p_190102_2_ <= d0 && this.attackTick <= 0) + { + this.attackTick = 20; + this.attacker.attackEntityAsMob(p_190102_1_); + EntityPolarBear.this.setStanding(false); + } + else if (p_190102_2_ <= d0 * 2.0D) + { + if (this.attackTick <= 0) + { + EntityPolarBear.this.setStanding(false); + this.attackTick = 20; + } + + if (this.attackTick <= 10) + { + EntityPolarBear.this.setStanding(true); + EntityPolarBear.this.playWarningSound(); + } + } + else + { + this.attackTick = 20; + EntityPolarBear.this.setStanding(false); + } + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + EntityPolarBear.this.setStanding(false); + super.resetTask(); + } + + protected double getAttackReachSqr(EntityLivingBase attackTarget) + { + return (double)(4.0F + attackTarget.width); + } + } + + class AIPanic extends EntityAIPanic + { + public AIPanic() + { + super(EntityPolarBear.this, 2.0D); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return !EntityPolarBear.this.isChild() && !EntityPolarBear.this.isBurning() ? false : super.shouldExecute(); + } + } + + static class GroupData implements IEntityLivingData + { + public boolean madeParent; + + private GroupData() + { + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityShulker.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityShulker.java new file mode 100644 index 0000000..94551ed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityShulker.java @@ -0,0 +1,903 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockPistonExtension; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityBodyHelper; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityShulkerBullet; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityShulker extends EntityGolem implements IMob +{ + private static final UUID COVERED_ARMOR_BONUS_ID = UUID.fromString("7E0292F2-9434-48D5-A29F-9583AF7DF27F"); + private static final AttributeModifier COVERED_ARMOR_BONUS_MODIFIER = (new AttributeModifier(COVERED_ARMOR_BONUS_ID, "Covered armor bonus", 20.0D, 0)).setSaved(false); + protected static final DataParameter ATTACHED_FACE = EntityDataManager.createKey(EntityShulker.class, DataSerializers.FACING); + protected static final DataParameter> ATTACHED_BLOCK_POS = EntityDataManager.>createKey(EntityShulker.class, DataSerializers.OPTIONAL_BLOCK_POS); + protected static final DataParameter PEEK_TICK = EntityDataManager.createKey(EntityShulker.class, DataSerializers.BYTE); + protected static final DataParameter COLOR = EntityDataManager.createKey(EntityShulker.class, DataSerializers.BYTE); + public static final EnumDyeColor DEFAULT_COLOR = EnumDyeColor.PURPLE; + private float prevPeekAmount; + private float peekAmount; + private BlockPos currentAttachmentPosition; + private int clientSideTeleportInterpolation; + + public EntityShulker(World worldIn) + { + super(worldIn); + this.setSize(1.0F, 1.0F); + this.prevRenderYawOffset = 180.0F; + this.renderYawOffset = 180.0F; + this.isImmuneToFire = true; + this.currentAttachmentPosition = null; + this.experienceValue = 5; + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + this.renderYawOffset = 180.0F; + this.prevRenderYawOffset = 180.0F; + this.rotationYaw = 180.0F; + this.prevRotationYaw = 180.0F; + this.rotationYawHead = 180.0F; + this.prevRotationYawHead = 180.0F; + return super.onInitialSpawn(difficulty, livingdata); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(4, new EntityShulker.AIAttack()); + this.tasks.addTask(7, new EntityShulker.AIPeek()); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[0])); + this.targetTasks.addTask(2, new EntityShulker.AIAttackNearest(this)); + this.targetTasks.addTask(3, new EntityShulker.AIDefenseAttack(this)); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.HOSTILE; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SHULKER_AMBIENT; + } + + /** + * Plays living's sound at its position + */ + public void playLivingSound() + { + if (!this.isClosed()) + { + super.playLivingSound(); + } + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SHULKER_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return this.isClosed() ? SoundEvents.ENTITY_SHULKER_HURT_CLOSED : SoundEvents.ENTITY_SHULKER_HURT; + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(ATTACHED_FACE, EnumFacing.DOWN); + this.dataManager.register(ATTACHED_BLOCK_POS, Optional.absent()); + this.dataManager.register(PEEK_TICK, Byte.valueOf((byte)0)); + this.dataManager.register(COLOR, Byte.valueOf((byte)DEFAULT_COLOR.getMetadata())); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D); + } + + protected EntityBodyHelper createBodyHelper() + { + return new EntityShulker.BodyHelper(this); + } + + public static void registerFixesShulker(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityShulker.class); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.dataManager.set(ATTACHED_FACE, EnumFacing.getFront(compound.getByte("AttachFace"))); + this.dataManager.set(PEEK_TICK, Byte.valueOf(compound.getByte("Peek"))); + this.dataManager.set(COLOR, Byte.valueOf(compound.getByte("Color"))); + + if (compound.hasKey("APX")) + { + int i = compound.getInteger("APX"); + int j = compound.getInteger("APY"); + int k = compound.getInteger("APZ"); + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(new BlockPos(i, j, k))); + } + else + { + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.absent()); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setByte("AttachFace", (byte)((EnumFacing)this.dataManager.get(ATTACHED_FACE)).getIndex()); + compound.setByte("Peek", ((Byte)this.dataManager.get(PEEK_TICK)).byteValue()); + compound.setByte("Color", ((Byte)this.dataManager.get(COLOR)).byteValue()); + BlockPos blockpos = this.getAttachmentPos(); + + if (blockpos != null) + { + compound.setInteger("APX", blockpos.getX()); + compound.setInteger("APY", blockpos.getY()); + compound.setInteger("APZ", blockpos.getZ()); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + BlockPos blockpos = (BlockPos)((Optional)this.dataManager.get(ATTACHED_BLOCK_POS)).orNull(); + + if (blockpos == null && !this.world.isRemote) + { + blockpos = new BlockPos(this); + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos)); + } + + if (this.isRiding()) + { + blockpos = null; + float f = this.getRidingEntity().rotationYaw; + this.rotationYaw = f; + this.renderYawOffset = f; + this.prevRenderYawOffset = f; + this.clientSideTeleportInterpolation = 0; + } + else if (!this.world.isRemote) + { + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getMaterial() != Material.AIR) + { + if (iblockstate.getBlock() == Blocks.PISTON_EXTENSION) + { + EnumFacing enumfacing = (EnumFacing)iblockstate.getValue(BlockPistonBase.FACING); + + if (this.world.isAirBlock(blockpos.offset(enumfacing))) + { + blockpos = blockpos.offset(enumfacing); + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos)); + } + else + { + this.tryTeleportToNewPosition(); + } + } + else if (iblockstate.getBlock() == Blocks.PISTON_HEAD) + { + EnumFacing enumfacing3 = (EnumFacing)iblockstate.getValue(BlockPistonExtension.FACING); + + if (this.world.isAirBlock(blockpos.offset(enumfacing3))) + { + blockpos = blockpos.offset(enumfacing3); + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos)); + } + else + { + this.tryTeleportToNewPosition(); + } + } + else + { + this.tryTeleportToNewPosition(); + } + } + + BlockPos blockpos1 = blockpos.offset(this.getAttachmentFacing()); + + if (!this.world.isBlockNormalCube(blockpos1, false)) + { + boolean flag = false; + + for (EnumFacing enumfacing1 : EnumFacing.values()) + { + blockpos1 = blockpos.offset(enumfacing1); + + if (this.world.isBlockNormalCube(blockpos1, false)) + { + this.dataManager.set(ATTACHED_FACE, enumfacing1); + flag = true; + break; + } + } + + if (!flag) + { + this.tryTeleportToNewPosition(); + } + } + + BlockPos blockpos2 = blockpos.offset(this.getAttachmentFacing().getOpposite()); + + if (this.world.isBlockNormalCube(blockpos2, false)) + { + this.tryTeleportToNewPosition(); + } + } + + float f1 = (float)this.getPeekTick() * 0.01F; + this.prevPeekAmount = this.peekAmount; + + if (this.peekAmount > f1) + { + this.peekAmount = MathHelper.clamp(this.peekAmount - 0.05F, f1, 1.0F); + } + else if (this.peekAmount < f1) + { + this.peekAmount = MathHelper.clamp(this.peekAmount + 0.05F, 0.0F, f1); + } + + if (blockpos != null) + { + if (this.world.isRemote) + { + if (this.clientSideTeleportInterpolation > 0 && this.currentAttachmentPosition != null) + { + --this.clientSideTeleportInterpolation; + } + else + { + this.currentAttachmentPosition = blockpos; + } + } + + this.posX = (double)blockpos.getX() + 0.5D; + this.posY = (double)blockpos.getY(); + this.posZ = (double)blockpos.getZ() + 0.5D; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + double d3 = 0.5D - (double)MathHelper.sin((0.5F + this.peekAmount) * (float)Math.PI) * 0.5D; + double d4 = 0.5D - (double)MathHelper.sin((0.5F + this.prevPeekAmount) * (float)Math.PI) * 0.5D; + double d5 = d3 - d4; + double d0 = 0.0D; + double d1 = 0.0D; + double d2 = 0.0D; + EnumFacing enumfacing2 = this.getAttachmentFacing(); + + switch (enumfacing2) + { + case DOWN: + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D + d3, this.posZ + 0.5D)); + d1 = d5; + break; + case UP: + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY - d3, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D)); + d1 = -d5; + break; + case NORTH: + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D + d3)); + d2 = d5; + break; + case SOUTH: + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D - d3, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D)); + d2 = -d5; + break; + case WEST: + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D, this.posX + 0.5D + d3, this.posY + 1.0D, this.posZ + 0.5D)); + d0 = d5; + break; + case EAST: + this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D - d3, this.posY, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D)); + d0 = -d5; + } + + if (d5 > 0.0D) + { + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox()); + + if (!list.isEmpty()) + { + for (Entity entity : list) + { + if (!(entity instanceof EntityShulker) && !entity.noClip) + { + entity.move(MoverType.SHULKER, d0, d1, d2); + } + } + } + } + } + } + + /** + * Tries to move the entity towards the specified location. + */ + public void move(MoverType type, double x, double y, double z) + { + if (type == MoverType.SHULKER_BOX) + { + this.tryTeleportToNewPosition(); + } + else + { + super.move(type, x, y, z); + } + } + + /** + * Sets the x,y,z of the entity from the given parameters. Also seems to set up a bounding box. + */ + public void setPosition(double x, double y, double z) + { + super.setPosition(x, y, z); + + if (this.dataManager != null && this.ticksExisted != 0) + { + Optional optional = (Optional)this.dataManager.get(ATTACHED_BLOCK_POS); + Optional optional1 = Optional.of(new BlockPos(x, y, z)); + + if (!optional1.equals(optional)) + { + this.dataManager.set(ATTACHED_BLOCK_POS, optional1); + this.dataManager.set(PEEK_TICK, Byte.valueOf((byte)0)); + this.isAirBorne = true; + } + } + } + + protected boolean tryTeleportToNewPosition() + { + if (!this.isAIDisabled() && this.isEntityAlive()) + { + BlockPos blockpos = new BlockPos(this); + + for (int i = 0; i < 5; ++i) + { + BlockPos blockpos1 = blockpos.add(8 - this.rand.nextInt(17), 8 - this.rand.nextInt(17), 8 - this.rand.nextInt(17)); + + if (blockpos1.getY() > 0 && this.world.isAirBlock(blockpos1) && this.world.isInsideWorldBorder(this) && this.world.getCollisionBoxes(this, new AxisAlignedBB(blockpos1)).isEmpty()) + { + boolean flag = false; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + if (this.world.isBlockNormalCube(blockpos1.offset(enumfacing), false)) + { + this.dataManager.set(ATTACHED_FACE, enumfacing); + flag = true; + break; + } + } + + if (flag) + { + net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(this, blockpos1.getX(), blockpos1.getY(), blockpos1.getZ(), 0); + if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) flag = false; + blockpos1 = new BlockPos(event.getTargetX(), event.getTargetY(), event.getTargetZ()); + } + + if (flag) + { + this.playSound(SoundEvents.ENTITY_SHULKER_TELEPORT, 1.0F, 1.0F); + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos1)); + this.dataManager.set(PEEK_TICK, Byte.valueOf((byte)0)); + this.setAttackTarget((EntityLivingBase)null); + return true; + } + } + } + + return false; + } + else + { + return true; + } + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevRenderYawOffset = 180.0F; + this.renderYawOffset = 180.0F; + this.rotationYaw = 180.0F; + } + + public void notifyDataManagerChange(DataParameter key) + { + if (ATTACHED_BLOCK_POS.equals(key) && this.world.isRemote && !this.isRiding()) + { + BlockPos blockpos = this.getAttachmentPos(); + + if (blockpos != null) + { + if (this.currentAttachmentPosition == null) + { + this.currentAttachmentPosition = blockpos; + } + else + { + this.clientSideTeleportInterpolation = 6; + } + + this.posX = (double)blockpos.getX() + 0.5D; + this.posY = (double)blockpos.getY(); + this.posZ = (double)blockpos.getZ() + 0.5D; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + } + } + + super.notifyDataManagerChange(key); + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.newPosRotationIncrements = 0; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isClosed()) + { + Entity entity = source.getImmediateSource(); + + if (entity instanceof EntityArrow) + { + return false; + } + } + + if (super.attackEntityFrom(source, amount)) + { + if ((double)this.getHealth() < (double)this.getMaxHealth() * 0.5D && this.rand.nextInt(4) == 0) + { + this.tryTeleportToNewPosition(); + } + + return true; + } + else + { + return false; + } + } + + private boolean isClosed() + { + return this.getPeekTick() == 0; + } + + /** + * Returns the solid collision bounding box for this entity. Used to make (e.g.) boats solid. Return null if + * this entity is not solid. + * + * For general purposes, use {@link #width} and {@link #height}. + * + * @see getEntityBoundingBox + */ + @Nullable + public AxisAlignedBB getCollisionBoundingBox() + { + return this.isEntityAlive() ? this.getEntityBoundingBox() : null; + } + + public EnumFacing getAttachmentFacing() + { + return (EnumFacing)this.dataManager.get(ATTACHED_FACE); + } + + @Nullable + public BlockPos getAttachmentPos() + { + return (BlockPos)((Optional)this.dataManager.get(ATTACHED_BLOCK_POS)).orNull(); + } + + public void setAttachmentPos(@Nullable BlockPos pos) + { + this.dataManager.set(ATTACHED_BLOCK_POS, Optional.fromNullable(pos)); + } + + public int getPeekTick() + { + return ((Byte)this.dataManager.get(PEEK_TICK)).byteValue(); + } + + /** + * Applies or removes armor modifier + */ + public void updateArmorModifier(int p_184691_1_) + { + if (!this.world.isRemote) + { + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).removeModifier(COVERED_ARMOR_BONUS_MODIFIER); + + if (p_184691_1_ == 0) + { + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).applyModifier(COVERED_ARMOR_BONUS_MODIFIER); + this.playSound(SoundEvents.ENTITY_SHULKER_CLOSE, 1.0F, 1.0F); + } + else + { + this.playSound(SoundEvents.ENTITY_SHULKER_OPEN, 1.0F, 1.0F); + } + } + + this.dataManager.set(PEEK_TICK, Byte.valueOf((byte)p_184691_1_)); + } + + @SideOnly(Side.CLIENT) + public float getClientPeekAmount(float p_184688_1_) + { + return this.prevPeekAmount + (this.peekAmount - this.prevPeekAmount) * p_184688_1_; + } + + @SideOnly(Side.CLIENT) + public int getClientTeleportInterp() + { + return this.clientSideTeleportInterpolation; + } + + @SideOnly(Side.CLIENT) + public BlockPos getOldAttachPos() + { + return this.currentAttachmentPosition; + } + + public float getEyeHeight() + { + return 0.5F; + } + + /** + * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently + * use in wolves. + */ + public int getVerticalFaceSpeed() + { + return 180; + } + + public int getHorizontalFaceSpeed() + { + return 180; + } + + /** + * Applies a velocity to the entities, to push them away from eachother. + */ + public void applyEntityCollision(Entity entityIn) + { + } + + public float getCollisionBorderSize() + { + return 0.0F; + } + + @SideOnly(Side.CLIENT) + public boolean isAttachedToBlock() + { + return this.currentAttachmentPosition != null && this.getAttachmentPos() != null; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SHULKER; + } + + @SideOnly(Side.CLIENT) + public EnumDyeColor getColor() + { + return EnumDyeColor.byMetadata(((Byte)this.dataManager.get(COLOR)).byteValue()); + } + + class AIAttack extends EntityAIBase + { + private int attackTime; + + public AIAttack() + { + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = EntityShulker.this.getAttackTarget(); + + if (entitylivingbase != null && entitylivingbase.isEntityAlive()) + { + return EntityShulker.this.world.getDifficulty() != EnumDifficulty.PEACEFUL; + } + else + { + return false; + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.attackTime = 20; + EntityShulker.this.updateArmorModifier(100); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + EntityShulker.this.updateArmorModifier(0); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (EntityShulker.this.world.getDifficulty() != EnumDifficulty.PEACEFUL) + { + --this.attackTime; + EntityLivingBase entitylivingbase = EntityShulker.this.getAttackTarget(); + EntityShulker.this.getLookHelper().setLookPositionWithEntity(entitylivingbase, 180.0F, 180.0F); + double d0 = EntityShulker.this.getDistanceSq(entitylivingbase); + + if (d0 < 400.0D) + { + if (this.attackTime <= 0) + { + this.attackTime = 20 + EntityShulker.this.rand.nextInt(10) * 20 / 2; + EntityShulkerBullet entityshulkerbullet = new EntityShulkerBullet(EntityShulker.this.world, EntityShulker.this, entitylivingbase, EntityShulker.this.getAttachmentFacing().getAxis()); + EntityShulker.this.world.spawnEntity(entityshulkerbullet); + EntityShulker.this.playSound(SoundEvents.ENTITY_SHULKER_SHOOT, 2.0F, (EntityShulker.this.rand.nextFloat() - EntityShulker.this.rand.nextFloat()) * 0.2F + 1.0F); + } + } + else + { + EntityShulker.this.setAttackTarget((EntityLivingBase)null); + } + + super.updateTask(); + } + } + } + + class AIAttackNearest extends EntityAINearestAttackableTarget + { + public AIAttackNearest(EntityShulker shulker) + { + super(shulker, EntityPlayer.class, true); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return EntityShulker.this.world.getDifficulty() == EnumDifficulty.PEACEFUL ? false : super.shouldExecute(); + } + + protected AxisAlignedBB getTargetableArea(double targetDistance) + { + EnumFacing enumfacing = ((EntityShulker)this.taskOwner).getAttachmentFacing(); + + if (enumfacing.getAxis() == EnumFacing.Axis.X) + { + return this.taskOwner.getEntityBoundingBox().grow(4.0D, targetDistance, targetDistance); + } + else + { + return enumfacing.getAxis() == EnumFacing.Axis.Z ? this.taskOwner.getEntityBoundingBox().grow(targetDistance, targetDistance, 4.0D) : this.taskOwner.getEntityBoundingBox().grow(targetDistance, 4.0D, targetDistance); + } + } + } + + static class AIDefenseAttack extends EntityAINearestAttackableTarget + { + public AIDefenseAttack(EntityShulker shulker) + { + super(shulker, EntityLivingBase.class, 10, true, false, new Predicate() + { + public boolean apply(@Nullable EntityLivingBase p_apply_1_) + { + return p_apply_1_ instanceof IMob; + } + }); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.taskOwner.getTeam() == null ? false : super.shouldExecute(); + } + + protected AxisAlignedBB getTargetableArea(double targetDistance) + { + EnumFacing enumfacing = ((EntityShulker)this.taskOwner).getAttachmentFacing(); + + if (enumfacing.getAxis() == EnumFacing.Axis.X) + { + return this.taskOwner.getEntityBoundingBox().grow(4.0D, targetDistance, targetDistance); + } + else + { + return enumfacing.getAxis() == EnumFacing.Axis.Z ? this.taskOwner.getEntityBoundingBox().grow(targetDistance, targetDistance, 4.0D) : this.taskOwner.getEntityBoundingBox().grow(targetDistance, 4.0D, targetDistance); + } + } + } + + class AIPeek extends EntityAIBase + { + private int peekTime; + + private AIPeek() + { + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return EntityShulker.this.getAttackTarget() == null && EntityShulker.this.rand.nextInt(40) == 0; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return EntityShulker.this.getAttackTarget() == null && this.peekTime > 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.peekTime = 20 * (1 + EntityShulker.this.rand.nextInt(3)); + EntityShulker.this.updateArmorModifier(30); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + if (EntityShulker.this.getAttackTarget() == null) + { + EntityShulker.this.updateArmorModifier(0); + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.peekTime; + } + } + + class BodyHelper extends EntityBodyHelper + { + public BodyHelper(EntityLivingBase theEntity) + { + super(theEntity); + } + + /** + * Update the Head and Body rendenring angles + */ + public void updateRenderAngles() + { + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySilverfish.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySilverfish.java new file mode 100644 index 0000000..2bb67fa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySilverfish.java @@ -0,0 +1,336 @@ +package net.minecraft.entity.monster; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockSilverfish; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntitySilverfish extends EntityMob +{ + private EntitySilverfish.AISummonSilverfish summonSilverfish; + + public EntitySilverfish(World worldIn) + { + super(worldIn); + this.setSize(0.4F, 0.3F); + } + + public static void registerFixesSilverfish(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySilverfish.class); + } + + protected void initEntityAI() + { + this.summonSilverfish = new EntitySilverfish.AISummonSilverfish(this); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(3, this.summonSilverfish); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(5, new EntitySilverfish.AIHideInStone(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return 0.1D; + } + + public float getEyeHeight() + { + return 0.1F; + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(1.0D); + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SILVERFISH_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SILVERFISH_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SILVERFISH_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SILVERFISH_STEP, 0.15F, 1.0F); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + if ((source instanceof EntityDamageSource || source == DamageSource.MAGIC) && this.summonSilverfish != null) + { + this.summonSilverfish.notifyHurt(); + } + + return super.attackEntityFrom(source, amount); + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SILVERFISH; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.renderYawOffset = this.rotationYaw; + super.onUpdate(); + } + + /** + * Set the render yaw offset + */ + public void setRenderYawOffset(float offset) + { + this.rotationYaw = offset; + super.setRenderYawOffset(offset); + } + + public float getBlockPathWeight(BlockPos pos) + { + return this.world.getBlockState(pos.down()).getBlock() == Blocks.STONE ? 10.0F : super.getBlockPathWeight(pos); + } + + /** + * Checks to make sure the light is not too bright where the mob is spawning + */ + protected boolean isValidLightLevel() + { + return true; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + if (super.getCanSpawnHere()) + { + EntityPlayer entityplayer = this.world.getNearestPlayerNotCreative(this, 5.0D); + return entityplayer == null; + } + else + { + return false; + } + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + static class AIHideInStone extends EntityAIWander + { + private EnumFacing facing; + private boolean doMerge; + + public AIHideInStone(EntitySilverfish silverfishIn) + { + super(silverfishIn, 1.0D, 10); + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.entity.getAttackTarget() != null) + { + return false; + } + else if (!this.entity.getNavigator().noPath()) + { + return false; + } + else + { + Random random = this.entity.getRNG(); + + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.entity.world, this.entity) && random.nextInt(10) == 0) + { + this.facing = EnumFacing.random(random); + BlockPos blockpos = (new BlockPos(this.entity.posX, this.entity.posY + 0.5D, this.entity.posZ)).offset(this.facing); + IBlockState iblockstate = this.entity.world.getBlockState(blockpos); + + if (BlockSilverfish.canContainSilverfish(iblockstate)) + { + this.doMerge = true; + return true; + } + } + + this.doMerge = false; + return super.shouldExecute(); + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.doMerge ? false : super.shouldContinueExecuting(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + if (!this.doMerge) + { + super.startExecuting(); + } + else + { + World world = this.entity.world; + BlockPos blockpos = (new BlockPos(this.entity.posX, this.entity.posY + 0.5D, this.entity.posZ)).offset(this.facing); + IBlockState iblockstate = world.getBlockState(blockpos); + + if (BlockSilverfish.canContainSilverfish(iblockstate)) + { + world.setBlockState(blockpos, Blocks.MONSTER_EGG.getDefaultState().withProperty(BlockSilverfish.VARIANT, BlockSilverfish.EnumType.forModelBlock(iblockstate)), 3); + this.entity.spawnExplosionParticle(); + this.entity.setDead(); + } + } + } + } + + static class AISummonSilverfish extends EntityAIBase + { + private final EntitySilverfish silverfish; + private int lookForFriends; + + public AISummonSilverfish(EntitySilverfish silverfishIn) + { + this.silverfish = silverfishIn; + } + + public void notifyHurt() + { + if (this.lookForFriends == 0) + { + this.lookForFriends = 20; + } + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.lookForFriends > 0; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.lookForFriends; + + if (this.lookForFriends <= 0) + { + World world = this.silverfish.world; + Random random = this.silverfish.getRNG(); + BlockPos blockpos = new BlockPos(this.silverfish); + + for (int i = 0; i <= 5 && i >= -5; i = (i <= 0 ? 1 : 0) - i) + { + for (int j = 0; j <= 10 && j >= -10; j = (j <= 0 ? 1 : 0) - j) + { + for (int k = 0; k <= 10 && k >= -10; k = (k <= 0 ? 1 : 0) - k) + { + BlockPos blockpos1 = blockpos.add(j, i, k); + IBlockState iblockstate = world.getBlockState(blockpos1); + + if (iblockstate.getBlock() == Blocks.MONSTER_EGG) + { + if (net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(world, this.silverfish)) + { + world.destroyBlock(blockpos1, true); + } + else + { + world.setBlockState(blockpos1, ((BlockSilverfish.EnumType)iblockstate.getValue(BlockSilverfish.VARIANT)).getModelBlock(), 3); + } + + if (random.nextBoolean()) + { + return; + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySkeleton.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySkeleton.java new file mode 100644 index 0000000..9a19941 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySkeleton.java @@ -0,0 +1,98 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntitySkeleton extends AbstractSkeleton +{ + public EntitySkeleton(World worldIn) + { + super(worldIn); + } + + public static void registerFixesSkeleton(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySkeleton.class); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SKELETON; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SKELETON_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SKELETON_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SKELETON_DEATH; + } + + protected SoundEvent getStepSound() + { + return SoundEvents.ENTITY_SKELETON_STEP; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (cause.getTrueSource() instanceof EntityCreeper) + { + EntityCreeper entitycreeper = (EntityCreeper)cause.getTrueSource(); + + if (entitycreeper.getPowered() && entitycreeper.ableToCauseSkullDrop()) + { + entitycreeper.incrementDroppedSkulls(); + this.entityDropItem(new ItemStack(Items.SKULL, 1, 0), 0.0F); + } + } + } + + protected EntityArrow getArrow(float p_190726_1_) + { + ItemStack itemstack = this.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND); + + if (itemstack.getItem() == Items.SPECTRAL_ARROW) + { + EntitySpectralArrow entityspectralarrow = new EntitySpectralArrow(this.world, this); + entityspectralarrow.setEnchantmentEffectsFromEntity(this, p_190726_1_); + return entityspectralarrow; + } + else + { + EntityArrow entityarrow = super.getArrow(p_190726_1_); + + if (itemstack.getItem() == Items.TIPPED_ARROW && entityarrow instanceof EntityTippedArrow) + { + ((EntityTippedArrow)entityarrow).setPotionEffect(itemstack); + } + + return entityarrow; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySlime.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySlime.java new file mode 100644 index 0000000..0894117 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySlime.java @@ -0,0 +1,676 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIFindEntityNearest; +import net.minecraft.entity.ai.EntityAIFindEntityNearestPlayer; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Biomes; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.WorldType; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntitySlime extends EntityLiving implements IMob +{ + private static final DataParameter SLIME_SIZE = EntityDataManager.createKey(EntitySlime.class, DataSerializers.VARINT); + public float squishAmount; + public float squishFactor; + public float prevSquishFactor; + private boolean wasOnGround; + + public EntitySlime(World worldIn) + { + super(worldIn); + this.moveHelper = new EntitySlime.SlimeMoveHelper(this); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntitySlime.AISlimeFloat(this)); + this.tasks.addTask(2, new EntitySlime.AISlimeAttack(this)); + this.tasks.addTask(3, new EntitySlime.AISlimeFaceRandom(this)); + this.tasks.addTask(5, new EntitySlime.AISlimeHop(this)); + this.targetTasks.addTask(1, new EntityAIFindEntityNearestPlayer(this)); + this.targetTasks.addTask(3, new EntityAIFindEntityNearest(this, EntityIronGolem.class)); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(SLIME_SIZE, Integer.valueOf(1)); + } + + protected void setSlimeSize(int size, boolean resetHealth) + { + this.dataManager.set(SLIME_SIZE, Integer.valueOf(size)); + this.setSize(0.51000005F * (float)size, 0.51000005F * (float)size); + this.setPosition(this.posX, this.posY, this.posZ); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue((double)(size * size)); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue((double)(0.2F + 0.1F * (float)size)); + + if (resetHealth) + { + this.setHealth(this.getMaxHealth()); + } + + this.experienceValue = size; + } + + /** + * Returns the size of the slime. + */ + public int getSlimeSize() + { + return ((Integer)this.dataManager.get(SLIME_SIZE)).intValue(); + } + + public static void registerFixesSlime(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySlime.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Size", this.getSlimeSize() - 1); + compound.setBoolean("wasOnGround", this.wasOnGround); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + int i = compound.getInteger("Size"); + + if (i < 0) + { + i = 0; + } + + this.setSlimeSize(i + 1, false); + this.wasOnGround = compound.getBoolean("wasOnGround"); + } + + public boolean isSmallSlime() + { + return this.getSlimeSize() <= 1; + } + + protected EnumParticleTypes getParticleType() + { + return EnumParticleTypes.SLIME; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (!this.world.isRemote && this.world.getDifficulty() == EnumDifficulty.PEACEFUL && this.getSlimeSize() > 0) + { + this.isDead = true; + } + + this.squishFactor += (this.squishAmount - this.squishFactor) * 0.5F; + this.prevSquishFactor = this.squishFactor; + super.onUpdate(); + + if (this.onGround && !this.wasOnGround) + { + int i = this.getSlimeSize(); + if (spawnCustomParticles()) { i = 0; } // don't spawn particles if it's handled by the implementation itself + for (int j = 0; j < i * 8; ++j) + { + float f = this.rand.nextFloat() * ((float)Math.PI * 2F); + float f1 = this.rand.nextFloat() * 0.5F + 0.5F; + float f2 = MathHelper.sin(f) * (float)i * 0.5F * f1; + float f3 = MathHelper.cos(f) * (float)i * 0.5F * f1; + World world = this.world; + EnumParticleTypes enumparticletypes = this.getParticleType(); + double d0 = this.posX + (double)f2; + double d1 = this.posZ + (double)f3; + world.spawnParticle(enumparticletypes, d0, this.getEntityBoundingBox().minY, d1, 0.0D, 0.0D, 0.0D); + } + + this.playSound(this.getSquishSound(), this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) / 0.8F); + this.squishAmount = -0.5F; + } + else if (!this.onGround && this.wasOnGround) + { + this.squishAmount = 1.0F; + } + + this.wasOnGround = this.onGround; + this.alterSquishAmount(); + } + + protected void alterSquishAmount() + { + this.squishAmount *= 0.6F; + } + + /** + * Gets the amount of time the slime needs to wait between jumps. + */ + protected int getJumpDelay() + { + return this.rand.nextInt(20) + 10; + } + + protected EntitySlime createInstance() + { + return new EntitySlime(this.world); + } + + public void notifyDataManagerChange(DataParameter key) + { + if (SLIME_SIZE.equals(key)) + { + int i = this.getSlimeSize(); + this.setSize(0.51000005F * (float)i, 0.51000005F * (float)i); + this.rotationYaw = this.rotationYawHead; + this.renderYawOffset = this.rotationYawHead; + + if (this.isInWater() && this.rand.nextInt(20) == 0) + { + this.doWaterSplashEffect(); + } + } + + super.notifyDataManagerChange(key); + } + + /** + * Will get destroyed next tick. + */ + public void setDead() + { + int i = this.getSlimeSize(); + + if (!this.world.isRemote && i > 1 && this.getHealth() <= 0.0F) + { + int j = 2 + this.rand.nextInt(3); + + for (int k = 0; k < j; ++k) + { + float f = ((float)(k % 2) - 0.5F) * (float)i / 4.0F; + float f1 = ((float)(k / 2) - 0.5F) * (float)i / 4.0F; + EntitySlime entityslime = this.createInstance(); + + if (this.hasCustomName()) + { + entityslime.setCustomNameTag(this.getCustomNameTag()); + } + + if (this.isNoDespawnRequired()) + { + entityslime.enablePersistence(); + } + + entityslime.setSlimeSize(i / 2, true); + entityslime.setLocationAndAngles(this.posX + (double)f, this.posY + 0.5D, this.posZ + (double)f1, this.rand.nextFloat() * 360.0F, 0.0F); + this.world.spawnEntity(entityslime); + } + } + + super.setDead(); + } + + /** + * Applies a velocity to the entities, to push them away from eachother. + */ + public void applyEntityCollision(Entity entityIn) + { + super.applyEntityCollision(entityIn); + + if (entityIn instanceof EntityIronGolem && this.canDamagePlayer()) + { + this.dealDamage((EntityLivingBase)entityIn); + } + } + + /** + * Called by a player entity when they collide with an entity + */ + public void onCollideWithPlayer(EntityPlayer entityIn) + { + if (this.canDamagePlayer()) + { + this.dealDamage(entityIn); + } + } + + protected void dealDamage(EntityLivingBase entityIn) + { + int i = this.getSlimeSize(); + + if (this.canEntityBeSeen(entityIn) && this.getDistanceSq(entityIn) < 0.6D * (double)i * 0.6D * (double)i && entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float)this.getAttackStrength())) + { + this.playSound(SoundEvents.ENTITY_SLIME_ATTACK, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.applyEnchantments(this, entityIn); + } + } + + public float getEyeHeight() + { + return 0.625F * this.height; + } + + /** + * Indicates weather the slime is able to damage the player (based upon the slime's size) + */ + protected boolean canDamagePlayer() + { + return !this.isSmallSlime(); + } + + /** + * Gets the amount of damage dealt to the player when "attacked" by the slime. + */ + protected int getAttackStrength() + { + return this.getSlimeSize(); + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_SLIME_HURT : SoundEvents.ENTITY_SLIME_HURT; + } + + protected SoundEvent getDeathSound() + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_SLIME_DEATH : SoundEvents.ENTITY_SLIME_DEATH; + } + + protected SoundEvent getSquishSound() + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_SLIME_SQUISH : SoundEvents.ENTITY_SLIME_SQUISH; + } + + protected Item getDropItem() + { + return this.getSlimeSize() == 1 ? Items.SLIME_BALL : null; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return this.getSlimeSize() == 1 ? LootTableList.ENTITIES_SLIME : LootTableList.EMPTY; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + BlockPos blockpos = new BlockPos(MathHelper.floor(this.posX), 0, MathHelper.floor(this.posZ)); + Chunk chunk = this.world.getChunkFromBlockCoords(blockpos); + + if (this.world.getWorldInfo().getTerrainType().handleSlimeSpawnReduction(rand, world)) + { + return false; + } + else + { + if (this.world.getDifficulty() != EnumDifficulty.PEACEFUL) + { + Biome biome = this.world.getBiome(blockpos); + + if (biome == Biomes.SWAMPLAND && this.posY > 50.0D && this.posY < 70.0D && this.rand.nextFloat() < 0.5F && this.rand.nextFloat() < this.world.getCurrentMoonPhaseFactor() && this.world.getLightFromNeighbors(new BlockPos(this)) <= this.rand.nextInt(8)) + { + return super.getCanSpawnHere(); + } + + if (this.rand.nextInt(10) == 0 && chunk.getRandomWithSeed(987234911L).nextInt(10) == 0 && this.posY < 40.0D) + { + return super.getCanSpawnHere(); + } + } + + return false; + } + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.4F * (float)this.getSlimeSize(); + } + + /** + * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently + * use in wolves. + */ + public int getVerticalFaceSpeed() + { + return 0; + } + + /** + * Returns true if the slime makes a sound when it jumps (based upon the slime's size) + */ + protected boolean makesSoundOnJump() + { + return this.getSlimeSize() > 0; + } + + /** + * Causes this entity to do an upwards motion (jumping). + */ + protected void jump() + { + this.motionY = 0.41999998688697815D; + this.isAirBorne = true; + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + int i = this.rand.nextInt(3); + + if (i < 2 && this.rand.nextFloat() < 0.5F * difficulty.getClampedAdditionalDifficulty()) + { + ++i; + } + + int j = 1 << i; + this.setSlimeSize(j, true); + return super.onInitialSpawn(difficulty, livingdata); + } + + protected SoundEvent getJumpSound() + { + return this.isSmallSlime() ? SoundEvents.ENTITY_SMALL_SLIME_JUMP : SoundEvents.ENTITY_SLIME_JUMP; + } + + /* ======================================== FORGE START =====================================*/ + /** + * Called when the slime spawns particles on landing, see onUpdate. + * Return true to prevent the spawning of the default particles. + */ + protected boolean spawnCustomParticles() { return false; } + /* ======================================== FORGE END =====================================*/ + + static class AISlimeAttack extends EntityAIBase + { + private final EntitySlime slime; + private int growTieredTimer; + + public AISlimeAttack(EntitySlime slimeIn) + { + this.slime = slimeIn; + this.setMutexBits(2); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + EntityLivingBase entitylivingbase = this.slime.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else + { + return !(entitylivingbase instanceof EntityPlayer) || !((EntityPlayer)entitylivingbase).capabilities.disableDamage; + } + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.growTieredTimer = 300; + super.startExecuting(); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + EntityLivingBase entitylivingbase = this.slime.getAttackTarget(); + + if (entitylivingbase == null) + { + return false; + } + else if (!entitylivingbase.isEntityAlive()) + { + return false; + } + else if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer)entitylivingbase).capabilities.disableDamage) + { + return false; + } + else + { + return --this.growTieredTimer > 0; + } + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + this.slime.faceEntity(this.slime.getAttackTarget(), 10.0F, 10.0F); + ((EntitySlime.SlimeMoveHelper)this.slime.getMoveHelper()).setDirection(this.slime.rotationYaw, this.slime.canDamagePlayer()); + } + } + + static class AISlimeFaceRandom extends EntityAIBase + { + private final EntitySlime slime; + private float chosenDegrees; + private int nextRandomizeTime; + + public AISlimeFaceRandom(EntitySlime slimeIn) + { + this.slime = slimeIn; + this.setMutexBits(2); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.slime.getAttackTarget() == null && (this.slime.onGround || this.slime.isInWater() || this.slime.isInLava() || this.slime.isPotionActive(MobEffects.LEVITATION)); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (--this.nextRandomizeTime <= 0) + { + this.nextRandomizeTime = 40 + this.slime.getRNG().nextInt(60); + this.chosenDegrees = (float)this.slime.getRNG().nextInt(360); + } + + ((EntitySlime.SlimeMoveHelper)this.slime.getMoveHelper()).setDirection(this.chosenDegrees, false); + } + } + + static class AISlimeFloat extends EntityAIBase + { + private final EntitySlime slime; + + public AISlimeFloat(EntitySlime slimeIn) + { + this.slime = slimeIn; + this.setMutexBits(5); + ((PathNavigateGround)slimeIn.getNavigator()).setCanSwim(true); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.slime.isInWater() || this.slime.isInLava(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (this.slime.getRNG().nextFloat() < 0.8F) + { + this.slime.getJumpHelper().setJumping(); + } + + ((EntitySlime.SlimeMoveHelper)this.slime.getMoveHelper()).setSpeed(1.2D); + } + } + + static class AISlimeHop extends EntityAIBase + { + private final EntitySlime slime; + + public AISlimeHop(EntitySlime slimeIn) + { + this.slime = slimeIn; + this.setMutexBits(5); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return true; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + ((EntitySlime.SlimeMoveHelper)this.slime.getMoveHelper()).setSpeed(1.0D); + } + } + + static class SlimeMoveHelper extends EntityMoveHelper + { + private float yRot; + private int jumpDelay; + private final EntitySlime slime; + private boolean isAggressive; + + public SlimeMoveHelper(EntitySlime slimeIn) + { + super(slimeIn); + this.slime = slimeIn; + this.yRot = 180.0F * slimeIn.rotationYaw / (float)Math.PI; + } + + public void setDirection(float p_179920_1_, boolean p_179920_2_) + { + this.yRot = p_179920_1_; + this.isAggressive = p_179920_2_; + } + + public void setSpeed(double speedIn) + { + this.speed = speedIn; + this.action = EntityMoveHelper.Action.MOVE_TO; + } + + public void onUpdateMoveHelper() + { + this.entity.rotationYaw = this.limitAngle(this.entity.rotationYaw, this.yRot, 90.0F); + this.entity.rotationYawHead = this.entity.rotationYaw; + this.entity.renderYawOffset = this.entity.rotationYaw; + + if (this.action != EntityMoveHelper.Action.MOVE_TO) + { + this.entity.setMoveForward(0.0F); + } + else + { + this.action = EntityMoveHelper.Action.WAIT; + + if (this.entity.onGround) + { + this.entity.setAIMoveSpeed((float)(this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue())); + + if (this.jumpDelay-- <= 0) + { + this.jumpDelay = this.slime.getJumpDelay(); + + if (this.isAggressive) + { + this.jumpDelay /= 3; + } + + this.slime.getJumpHelper().setJumping(); + + if (this.slime.makesSoundOnJump()) + { + this.slime.playSound(this.slime.getJumpSound(), this.slime.getSoundVolume(), ((this.slime.getRNG().nextFloat() - this.slime.getRNG().nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + } + else + { + this.slime.moveStrafing = 0.0F; + this.slime.moveForward = 0.0F; + this.entity.setAIMoveSpeed(0.0F); + } + } + else + { + this.entity.setAIMoveSpeed((float)(this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue())); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySnowman.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySnowman.java new file mode 100644 index 0000000..7d4e095 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySnowman.java @@ -0,0 +1,225 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackRanged; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntitySnowman extends EntityGolem implements IRangedAttackMob, net.minecraftforge.common.IShearable +{ + private static final DataParameter PUMPKIN_EQUIPPED = EntityDataManager.createKey(EntitySnowman.class, DataSerializers.BYTE); + + public EntitySnowman(World worldIn) + { + super(worldIn); + this.setSize(0.7F, 1.9F); + } + + public static void registerFixesSnowman(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySnowman.class); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAIAttackRanged(this, 1.25D, 20, 10.0F)); + this.tasks.addTask(2, new EntityAIWanderAvoidWater(this, 1.0D, 1.0000001E-5F)); + this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(4, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityLiving.class, 10, true, false, IMob.MOB_SELECTOR)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(4.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.20000000298023224D); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(PUMPKIN_EQUIPPED, Byte.valueOf((byte)16)); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("Pumpkin", this.isPumpkinEquipped()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("Pumpkin")) + { + this.setPumpkinEquipped(compound.getBoolean("Pumpkin")); + } + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (!this.world.isRemote) + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.posY); + int k = MathHelper.floor(this.posZ); + + if (this.isWet()) + { + this.attackEntityFrom(DamageSource.DROWN, 1.0F); + } + + if (this.world.getBiome(new BlockPos(i, 0, k)).getTemperature(new BlockPos(i, j, k)) > 1.0F) + { + this.attackEntityFrom(DamageSource.ON_FIRE, 1.0F); + } + + if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this)) + { + return; + } + + for (int l = 0; l < 4; ++l) + { + i = MathHelper.floor(this.posX + (double)((float)(l % 2 * 2 - 1) * 0.25F)); + j = MathHelper.floor(this.posY); + k = MathHelper.floor(this.posZ + (double)((float)(l / 2 % 2 * 2 - 1) * 0.25F)); + BlockPos blockpos = new BlockPos(i, j, k); + + if (this.world.getBlockState(blockpos).getMaterial() == Material.AIR && this.world.getBiome(blockpos).getTemperature(blockpos) < 0.8F && Blocks.SNOW_LAYER.canPlaceBlockAt(this.world, blockpos)) + { + this.world.setBlockState(blockpos, Blocks.SNOW_LAYER.getDefaultState()); + } + } + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SNOWMAN; + } + + /** + * Attack the specified entity using a ranged attack. + */ + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) + { + EntitySnowball entitysnowball = new EntitySnowball(this.world, this); + double d0 = target.posY + (double)target.getEyeHeight() - 1.100000023841858D; + double d1 = target.posX - this.posX; + double d2 = d0 - entitysnowball.posY; + double d3 = target.posZ - this.posZ; + float f = MathHelper.sqrt(d1 * d1 + d3 * d3) * 0.2F; + entitysnowball.shoot(d1, d2 + (double)f, d3, 1.6F, 12.0F); + this.playSound(SoundEvents.ENTITY_SNOWMAN_SHOOT, 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.world.spawnEntity(entitysnowball); + } + + public float getEyeHeight() + { + return 1.7F; + } + + protected boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (false && itemstack.getItem() == Items.SHEARS && this.isPumpkinEquipped() && !this.world.isRemote) //Forge: Moved to onSheared + { + this.setPumpkinEquipped(false); + itemstack.damageItem(1, player); + } + + return super.processInteract(player, hand); + } + + public boolean isPumpkinEquipped() + { + return (((Byte)this.dataManager.get(PUMPKIN_EQUIPPED)).byteValue() & 16) != 0; + } + + public void setPumpkinEquipped(boolean pumpkinEquipped) + { + byte b0 = ((Byte)this.dataManager.get(PUMPKIN_EQUIPPED)).byteValue(); + + if (pumpkinEquipped) + { + this.dataManager.set(PUMPKIN_EQUIPPED, Byte.valueOf((byte)(b0 | 16))); + } + else + { + this.dataManager.set(PUMPKIN_EQUIPPED, Byte.valueOf((byte)(b0 & -17))); + } + } + + @Nullable + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SNOWMAN_AMBIENT; + } + + @Nullable + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SNOWMAN_HURT; + } + + @Nullable + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SNOWMAN_DEATH; + } + + @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos) { return this.isPumpkinEquipped(); } + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + this.setPumpkinEquipped(false); + return com.google.common.collect.Lists.newArrayList(); + } + + public void setSwingingArms(boolean swingingArms) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySpellcasterIllager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySpellcasterIllager.java new file mode 100644 index 0000000..1d0d8e8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySpellcasterIllager.java @@ -0,0 +1,276 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntitySpellcasterIllager extends AbstractIllager +{ + private static final DataParameter SPELL = EntityDataManager.createKey(EntitySpellcasterIllager.class, DataSerializers.BYTE); + protected int spellTicks; + private EntitySpellcasterIllager.SpellType activeSpell = EntitySpellcasterIllager.SpellType.NONE; + + public EntitySpellcasterIllager(World p_i47506_1_) + { + super(p_i47506_1_); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(SPELL, Byte.valueOf((byte)0)); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.spellTicks = compound.getInteger("SpellTicks"); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("SpellTicks", this.spellTicks); + } + + @SideOnly(Side.CLIENT) + public AbstractIllager.IllagerArmPose getArmPose() + { + return this.isSpellcasting() ? AbstractIllager.IllagerArmPose.SPELLCASTING : AbstractIllager.IllagerArmPose.CROSSED; + } + + public boolean isSpellcasting() + { + if (this.world.isRemote) + { + return ((Byte)this.dataManager.get(SPELL)).byteValue() > 0; + } + else + { + return this.spellTicks > 0; + } + } + + public void setSpellType(EntitySpellcasterIllager.SpellType spellType) + { + this.activeSpell = spellType; + this.dataManager.set(SPELL, Byte.valueOf((byte)spellType.id)); + } + + protected EntitySpellcasterIllager.SpellType getSpellType() + { + return !this.world.isRemote ? this.activeSpell : EntitySpellcasterIllager.SpellType.getFromId(((Byte)this.dataManager.get(SPELL)).byteValue()); + } + + protected void updateAITasks() + { + super.updateAITasks(); + + if (this.spellTicks > 0) + { + --this.spellTicks; + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote && this.isSpellcasting()) + { + EntitySpellcasterIllager.SpellType entityspellcasterillager$spelltype = this.getSpellType(); + double d0 = entityspellcasterillager$spelltype.particleSpeed[0]; + double d1 = entityspellcasterillager$spelltype.particleSpeed[1]; + double d2 = entityspellcasterillager$spelltype.particleSpeed[2]; + float f = this.renderYawOffset * 0.017453292F + MathHelper.cos((float)this.ticksExisted * 0.6662F) * 0.25F; + float f1 = MathHelper.cos(f); + float f2 = MathHelper.sin(f); + this.world.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX + (double)f1 * 0.6D, this.posY + 1.8D, this.posZ + (double)f2 * 0.6D, d0, d1, d2); + this.world.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX - (double)f1 * 0.6D, this.posY + 1.8D, this.posZ - (double)f2 * 0.6D, d0, d1, d2); + } + } + + protected int getSpellTicks() + { + return this.spellTicks; + } + + protected abstract SoundEvent getSpellSound(); + + public class AICastingApell extends EntityAIBase + { + public AICastingApell() + { + this.setMutexBits(3); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return EntitySpellcasterIllager.this.getSpellTicks() > 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + super.startExecuting(); + EntitySpellcasterIllager.this.navigator.clearPath(); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + super.resetTask(); + EntitySpellcasterIllager.this.setSpellType(EntitySpellcasterIllager.SpellType.NONE); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + if (EntitySpellcasterIllager.this.getAttackTarget() != null) + { + EntitySpellcasterIllager.this.getLookHelper().setLookPositionWithEntity(EntitySpellcasterIllager.this.getAttackTarget(), (float)EntitySpellcasterIllager.this.getHorizontalFaceSpeed(), (float)EntitySpellcasterIllager.this.getVerticalFaceSpeed()); + } + } + } + + public abstract class AIUseSpell extends EntityAIBase + { + protected int spellWarmup; + protected int spellCooldown; + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (EntitySpellcasterIllager.this.getAttackTarget() == null) + { + return false; + } + else if (EntitySpellcasterIllager.this.isSpellcasting()) + { + return false; + } + else + { + return EntitySpellcasterIllager.this.ticksExisted >= this.spellCooldown; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return EntitySpellcasterIllager.this.getAttackTarget() != null && this.spellWarmup > 0; + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + this.spellWarmup = this.getCastWarmupTime(); + EntitySpellcasterIllager.this.spellTicks = this.getCastingTime(); + this.spellCooldown = EntitySpellcasterIllager.this.ticksExisted + this.getCastingInterval(); + SoundEvent soundevent = this.getSpellPrepareSound(); + + if (soundevent != null) + { + EntitySpellcasterIllager.this.playSound(soundevent, 1.0F, 1.0F); + } + + EntitySpellcasterIllager.this.setSpellType(this.getSpellType()); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + --this.spellWarmup; + + if (this.spellWarmup == 0) + { + this.castSpell(); + EntitySpellcasterIllager.this.playSound(EntitySpellcasterIllager.this.getSpellSound(), 1.0F, 1.0F); + } + } + + protected abstract void castSpell(); + + protected int getCastWarmupTime() + { + return 20; + } + + protected abstract int getCastingTime(); + + protected abstract int getCastingInterval(); + + @Nullable + protected abstract SoundEvent getSpellPrepareSound(); + + protected abstract EntitySpellcasterIllager.SpellType getSpellType(); + } + + public static enum SpellType + { + NONE(0, 0.0D, 0.0D, 0.0D), + SUMMON_VEX(1, 0.7D, 0.7D, 0.8D), + FANGS(2, 0.4D, 0.3D, 0.35D), + WOLOLO(3, 0.7D, 0.5D, 0.2D), + DISAPPEAR(4, 0.3D, 0.3D, 0.8D), + BLINDNESS(5, 0.1D, 0.1D, 0.2D); + + private final int id; + /** Particle motion speed. An array with 3 values: x, y, and z. */ + private final double[] particleSpeed; + + private SpellType(int idIn, double xParticleSpeed, double yParticleSpeed, double zParticleSpeed) + { + this.id = idIn; + this.particleSpeed = new double[] {xParticleSpeed, yParticleSpeed, zParticleSpeed}; + } + + public static EntitySpellcasterIllager.SpellType getFromId(int idIn) + { + for (EntitySpellcasterIllager.SpellType entityspellcasterillager$spelltype : values()) + { + if (idIn == entityspellcasterillager$spelltype.id) + { + return entityspellcasterillager$spelltype; + } + } + + return NONE; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySpider.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySpider.java new file mode 100644 index 0000000..05d8ca5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntitySpider.java @@ -0,0 +1,313 @@ +package net.minecraft.entity.monster; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILeapAtTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateClimber; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntitySpider extends EntityMob +{ + private static final DataParameter CLIMBING = EntityDataManager.createKey(EntitySpider.class, DataSerializers.BYTE); + + public EntitySpider(World worldIn) + { + super(worldIn); + this.setSize(1.4F, 0.9F); + } + + public static void registerFixesSpider(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySpider.class); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); + this.tasks.addTask(4, new EntitySpider.AISpiderAttack(this)); + this.tasks.addTask(5, new EntityAIWanderAvoidWater(this, 0.8D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(2, new EntitySpider.AISpiderTarget(this, EntityPlayer.class)); + this.targetTasks.addTask(3, new EntitySpider.AISpiderTarget(this, EntityIronGolem.class)); + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return (double)(this.height * 0.5F); + } + + /** + * Returns new PathNavigateGround instance + */ + protected PathNavigate createNavigator(World worldIn) + { + return new PathNavigateClimber(this, worldIn); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(CLIMBING, Byte.valueOf((byte)0)); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (!this.world.isRemote) + { + this.setBesideClimbableBlock(this.collidedHorizontally); + } + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(16.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SPIDER_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SPIDER_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SPIDER_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SPIDER_STEP, 0.15F, 1.0F); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SPIDER; + } + + /** + * Returns true if this entity should move as if it were on a ladder (either because it's actually on a ladder, or + * for AI reasons) + */ + public boolean isOnLadder() + { + return this.isBesideClimbableBlock(); + } + + /** + * Sets the Entity inside a web block. + */ + public void setInWeb() + { + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.ARTHROPOD; + } + + public boolean isPotionApplicable(PotionEffect potioneffectIn) + { + return potioneffectIn.getPotion() == MobEffects.POISON ? false : super.isPotionApplicable(potioneffectIn); + } + + /** + * Returns true if the WatchableObject (Byte) is 0x01 otherwise returns false. The WatchableObject is updated using + * setBesideClimableBlock. + */ + public boolean isBesideClimbableBlock() + { + return (((Byte)this.dataManager.get(CLIMBING)).byteValue() & 1) != 0; + } + + /** + * Updates the WatchableObject (Byte) created in entityInit(), setting it to 0x01 if par1 is true or 0x00 if it is + * false. + */ + public void setBesideClimbableBlock(boolean climbing) + { + byte b0 = ((Byte)this.dataManager.get(CLIMBING)).byteValue(); + + if (climbing) + { + b0 = (byte)(b0 | 1); + } + else + { + b0 = (byte)(b0 & -2); + } + + this.dataManager.set(CLIMBING, Byte.valueOf(b0)); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + + if (this.world.rand.nextInt(100) == 0) + { + EntitySkeleton entityskeleton = new EntitySkeleton(this.world); + entityskeleton.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + entityskeleton.onInitialSpawn(difficulty, (IEntityLivingData)null); + this.world.spawnEntity(entityskeleton); + entityskeleton.startRiding(this); + } + + if (livingdata == null) + { + livingdata = new EntitySpider.GroupData(); + + if (this.world.getDifficulty() == EnumDifficulty.HARD && this.world.rand.nextFloat() < 0.1F * difficulty.getClampedAdditionalDifficulty()) + { + ((EntitySpider.GroupData)livingdata).setRandomEffect(this.world.rand); + } + } + + if (livingdata instanceof EntitySpider.GroupData) + { + Potion potion = ((EntitySpider.GroupData)livingdata).effect; + + if (potion != null) + { + this.addPotionEffect(new PotionEffect(potion, Integer.MAX_VALUE)); + } + } + + return livingdata; + } + + public float getEyeHeight() + { + return 0.65F; + } + + static class AISpiderAttack extends EntityAIAttackMelee + { + public AISpiderAttack(EntitySpider spider) + { + super(spider, 1.0D, true); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + float f = this.attacker.getBrightness(); + + if (f >= 0.5F && this.attacker.getRNG().nextInt(100) == 0) + { + this.attacker.setAttackTarget((EntityLivingBase)null); + return false; + } + else + { + return super.shouldContinueExecuting(); + } + } + + protected double getAttackReachSqr(EntityLivingBase attackTarget) + { + return (double)(4.0F + attackTarget.width); + } + } + + static class AISpiderTarget extends EntityAINearestAttackableTarget + { + public AISpiderTarget(EntitySpider spider, Class classTarget) + { + super(spider, classTarget, true); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + float f = this.taskOwner.getBrightness(); + return f >= 0.5F ? false : super.shouldExecute(); + } + } + + public static class GroupData implements IEntityLivingData + { + public Potion effect; + + public void setRandomEffect(Random rand) + { + int i = rand.nextInt(5); + + if (i <= 1) + { + this.effect = MobEffects.SPEED; + } + else if (i <= 2) + { + this.effect = MobEffects.STRENGTH; + } + else if (i <= 3) + { + this.effect = MobEffects.REGENERATION; + } + else if (i <= 4) + { + this.effect = MobEffects.INVISIBILITY; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityStray.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityStray.java new file mode 100644 index 0000000..b1c17d1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityStray.java @@ -0,0 +1,75 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityStray extends AbstractSkeleton +{ + public EntityStray(World worldIn) + { + super(worldIn); + } + + public static void registerFixesStray(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityStray.class); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return super.getCanSpawnHere() && this.world.canSeeSky(new BlockPos(this)); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_STRAY; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_STRAY_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_STRAY_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_STRAY_DEATH; + } + + protected SoundEvent getStepSound() + { + return SoundEvents.ENTITY_STRAY_STEP; + } + + protected EntityArrow getArrow(float p_190726_1_) + { + EntityArrow entityarrow = super.getArrow(p_190726_1_); + + if (entityarrow instanceof EntityTippedArrow) + { + ((EntityTippedArrow)entityarrow).addEffect(new PotionEffect(MobEffects.SLOWNESS, 600)); + } + + return entityarrow; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityVex.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityVex.java new file mode 100644 index 0000000..e64a055 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityVex.java @@ -0,0 +1,467 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITarget; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityVex extends EntityMob +{ + protected static final DataParameter VEX_FLAGS = EntityDataManager.createKey(EntityVex.class, DataSerializers.BYTE); + private EntityLiving owner; + @Nullable + private BlockPos boundOrigin; + private boolean limitedLifespan; + private int limitedLifeTicks; + + public EntityVex(World worldIn) + { + super(worldIn); + this.isImmuneToFire = true; + this.moveHelper = new EntityVex.AIMoveControl(this); + this.setSize(0.4F, 0.8F); + this.experienceValue = 3; + } + + /** + * Tries to move the entity towards the specified location. + */ + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + this.doBlockCollisions(); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.noClip = true; + super.onUpdate(); + this.noClip = false; + this.setNoGravity(true); + + if (this.limitedLifespan && --this.limitedLifeTicks <= 0) + { + this.limitedLifeTicks = 20; + this.attackEntityFrom(DamageSource.STARVE, 1.0F); + } + } + + protected void initEntityAI() + { + super.initEntityAI(); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(4, new EntityVex.AIChargeAttack()); + this.tasks.addTask(8, new EntityVex.AIMoveRandom()); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[] {EntityVex.class})); + this.targetTasks.addTask(2, new EntityVex.AICopyOwnerTarget(this)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(14.0D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(4.0D); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(VEX_FLAGS, Byte.valueOf((byte)0)); + } + + public static void registerFixesVex(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityVex.class); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("BoundX")) + { + this.boundOrigin = new BlockPos(compound.getInteger("BoundX"), compound.getInteger("BoundY"), compound.getInteger("BoundZ")); + } + + if (compound.hasKey("LifeTicks")) + { + this.setLimitedLife(compound.getInteger("LifeTicks")); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (this.boundOrigin != null) + { + compound.setInteger("BoundX", this.boundOrigin.getX()); + compound.setInteger("BoundY", this.boundOrigin.getY()); + compound.setInteger("BoundZ", this.boundOrigin.getZ()); + } + + if (this.limitedLifespan) + { + compound.setInteger("LifeTicks", this.limitedLifeTicks); + } + } + + public EntityLiving getOwner() + { + return this.owner; + } + + @Nullable + public BlockPos getBoundOrigin() + { + return this.boundOrigin; + } + + public void setBoundOrigin(@Nullable BlockPos boundOriginIn) + { + this.boundOrigin = boundOriginIn; + } + + private boolean getVexFlag(int mask) + { + int i = ((Byte)this.dataManager.get(VEX_FLAGS)).byteValue(); + return (i & mask) != 0; + } + + private void setVexFlag(int mask, boolean value) + { + int i = ((Byte)this.dataManager.get(VEX_FLAGS)).byteValue(); + + if (value) + { + i = i | mask; + } + else + { + i = i & ~mask; + } + + this.dataManager.set(VEX_FLAGS, Byte.valueOf((byte)(i & 255))); + } + + public boolean isCharging() + { + return this.getVexFlag(1); + } + + public void setCharging(boolean charging) + { + this.setVexFlag(1, charging); + } + + public void setOwner(EntityLiving ownerIn) + { + this.owner = ownerIn; + } + + public void setLimitedLife(int limitedLifeTicksIn) + { + this.limitedLifespan = true; + this.limitedLifeTicks = limitedLifeTicksIn; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_VEX_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_VEX_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_VEX_HURT; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_VEX; + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + return 1.0F; + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + this.setEquipmentBasedOnDifficulty(difficulty); + this.setEnchantmentBasedOnDifficulty(difficulty); + return super.onInitialSpawn(difficulty, livingdata); + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.IRON_SWORD)); + this.setDropChance(EntityEquipmentSlot.MAINHAND, 0.0F); + } + + class AIChargeAttack extends EntityAIBase + { + public AIChargeAttack() + { + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (EntityVex.this.getAttackTarget() != null && !EntityVex.this.getMoveHelper().isUpdating() && EntityVex.this.rand.nextInt(7) == 0) + { + return EntityVex.this.getDistanceSq(EntityVex.this.getAttackTarget()) > 4.0D; + } + else + { + return false; + } + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return EntityVex.this.getMoveHelper().isUpdating() && EntityVex.this.isCharging() && EntityVex.this.getAttackTarget() != null && EntityVex.this.getAttackTarget().isEntityAlive(); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + EntityLivingBase entitylivingbase = EntityVex.this.getAttackTarget(); + Vec3d vec3d = entitylivingbase.getPositionEyes(1.0F); + EntityVex.this.moveHelper.setMoveTo(vec3d.x, vec3d.y, vec3d.z, 1.0D); + EntityVex.this.setCharging(true); + EntityVex.this.playSound(SoundEvents.ENTITY_VEX_CHARGE, 1.0F, 1.0F); + } + + /** + * Reset the task's internal state. Called when this task is interrupted by another one + */ + public void resetTask() + { + EntityVex.this.setCharging(false); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + EntityLivingBase entitylivingbase = EntityVex.this.getAttackTarget(); + + if (EntityVex.this.getEntityBoundingBox().intersects(entitylivingbase.getEntityBoundingBox())) + { + EntityVex.this.attackEntityAsMob(entitylivingbase); + EntityVex.this.setCharging(false); + } + else + { + double d0 = EntityVex.this.getDistanceSq(entitylivingbase); + + if (d0 < 9.0D) + { + Vec3d vec3d = entitylivingbase.getPositionEyes(1.0F); + EntityVex.this.moveHelper.setMoveTo(vec3d.x, vec3d.y, vec3d.z, 1.0D); + } + } + } + } + + class AICopyOwnerTarget extends EntityAITarget + { + public AICopyOwnerTarget(EntityCreature creature) + { + super(creature, false); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return EntityVex.this.owner != null && EntityVex.this.owner.getAttackTarget() != null && this.isSuitableTarget(EntityVex.this.owner.getAttackTarget(), false); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + EntityVex.this.setAttackTarget(EntityVex.this.owner.getAttackTarget()); + super.startExecuting(); + } + } + + class AIMoveControl extends EntityMoveHelper + { + public AIMoveControl(EntityVex vex) + { + super(vex); + } + + public void onUpdateMoveHelper() + { + if (this.action == EntityMoveHelper.Action.MOVE_TO) + { + double d0 = this.posX - EntityVex.this.posX; + double d1 = this.posY - EntityVex.this.posY; + double d2 = this.posZ - EntityVex.this.posZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + d3 = (double)MathHelper.sqrt(d3); + + if (d3 < EntityVex.this.getEntityBoundingBox().getAverageEdgeLength()) + { + this.action = EntityMoveHelper.Action.WAIT; + EntityVex.this.motionX *= 0.5D; + EntityVex.this.motionY *= 0.5D; + EntityVex.this.motionZ *= 0.5D; + } + else + { + EntityVex.this.motionX += d0 / d3 * 0.05D * this.speed; + EntityVex.this.motionY += d1 / d3 * 0.05D * this.speed; + EntityVex.this.motionZ += d2 / d3 * 0.05D * this.speed; + + if (EntityVex.this.getAttackTarget() == null) + { + EntityVex.this.rotationYaw = -((float)MathHelper.atan2(EntityVex.this.motionX, EntityVex.this.motionZ)) * (180F / (float)Math.PI); + EntityVex.this.renderYawOffset = EntityVex.this.rotationYaw; + } + else + { + double d4 = EntityVex.this.getAttackTarget().posX - EntityVex.this.posX; + double d5 = EntityVex.this.getAttackTarget().posZ - EntityVex.this.posZ; + EntityVex.this.rotationYaw = -((float)MathHelper.atan2(d4, d5)) * (180F / (float)Math.PI); + EntityVex.this.renderYawOffset = EntityVex.this.rotationYaw; + } + } + } + } + } + + class AIMoveRandom extends EntityAIBase + { + public AIMoveRandom() + { + this.setMutexBits(1); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return !EntityVex.this.getMoveHelper().isUpdating() && EntityVex.this.rand.nextInt(7) == 0; + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return false; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + BlockPos blockpos = EntityVex.this.getBoundOrigin(); + + if (blockpos == null) + { + blockpos = new BlockPos(EntityVex.this); + } + + for (int i = 0; i < 3; ++i) + { + BlockPos blockpos1 = blockpos.add(EntityVex.this.rand.nextInt(15) - 7, EntityVex.this.rand.nextInt(11) - 5, EntityVex.this.rand.nextInt(15) - 7); + + if (EntityVex.this.world.isAirBlock(blockpos1)) + { + EntityVex.this.moveHelper.setMoveTo((double)blockpos1.getX() + 0.5D, (double)blockpos1.getY() + 0.5D, (double)blockpos1.getZ() + 0.5D, 0.25D); + + if (EntityVex.this.getAttackTarget() == null) + { + EntityVex.this.getLookHelper().setLookPosition((double)blockpos1.getX() + 0.5D, (double)blockpos1.getY() + 0.5D, (double)blockpos1.getZ() + 0.5D, 180.0F, 20.0F); + } + + break; + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityVindicator.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityVindicator.java new file mode 100644 index 0000000..be738eb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityVindicator.java @@ -0,0 +1,222 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityVindicator extends AbstractIllager +{ + private boolean johnny; + private static final Predicate JOHNNY_SELECTOR = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof EntityLivingBase && ((EntityLivingBase)p_apply_1_).attackable(); + } + }; + + public EntityVindicator(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.95F); + } + + public static void registerFixesVindicator(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityVindicator.class); + } + + protected void initEntityAI() + { + super.initEntityAI(); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, false)); + this.tasks.addTask(8, new EntityAIWander(this, 0.6D)); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[] {EntityVindicator.class})); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityVillager.class, true)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true)); + this.targetTasks.addTask(4, new EntityVindicator.AIJohnnyAttack(this)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.3499999940395355D); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(12.0D); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(24.0D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(5.0D); + } + + protected void entityInit() + { + super.entityInit(); + } + + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_VINDICATION_ILLAGER; + } + + @SideOnly(Side.CLIENT) + public boolean isAggressive() + { + return this.isAggressive(1); + } + + public void setAggressive(boolean p_190636_1_) + { + this.setAggressive(1, p_190636_1_); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (this.johnny) + { + compound.setBoolean("Johnny", true); + } + } + + @SideOnly(Side.CLIENT) + public AbstractIllager.IllagerArmPose getArmPose() + { + return this.isAggressive() ? AbstractIllager.IllagerArmPose.ATTACKING : AbstractIllager.IllagerArmPose.CROSSED; + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("Johnny", 99)) + { + this.johnny = compound.getBoolean("Johnny"); + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + IEntityLivingData ientitylivingdata = super.onInitialSpawn(difficulty, livingdata); + this.setEquipmentBasedOnDifficulty(difficulty); + this.setEnchantmentBasedOnDifficulty(difficulty); + return ientitylivingdata; + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.IRON_AXE)); + } + + protected void updateAITasks() + { + super.updateAITasks(); + this.setAggressive(this.getAttackTarget() != null); + } + + /** + * Returns whether this Entity is on the same team as the given Entity. + */ + public boolean isOnSameTeam(Entity entityIn) + { + if (super.isOnSameTeam(entityIn)) + { + return true; + } + else if (entityIn instanceof EntityLivingBase && ((EntityLivingBase)entityIn).getCreatureAttribute() == EnumCreatureAttribute.ILLAGER) + { + return this.getTeam() == null && entityIn.getTeam() == null; + } + else + { + return false; + } + } + + /** + * Sets the custom name tag for this entity + */ + public void setCustomNameTag(String name) + { + super.setCustomNameTag(name); + + if (!this.johnny && "Johnny".equals(name)) + { + this.johnny = true; + } + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.VINDICATION_ILLAGER_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.VINDICATION_ILLAGER_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_VINDICATION_ILLAGER_HURT; + } + + static class AIJohnnyAttack extends EntityAINearestAttackableTarget + { + public AIJohnnyAttack(EntityVindicator vindicator) + { + super(vindicator, EntityLivingBase.class, 0, true, true, EntityVindicator.JOHNNY_SELECTOR); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return ((EntityVindicator)this.taskOwner).johnny && super.shouldExecute(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityWitch.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityWitch.java new file mode 100644 index 0000000..371d55c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityWitch.java @@ -0,0 +1,281 @@ +package net.minecraft.entity.monster; + +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackRanged; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.PotionTypes; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityWitch extends EntityMob implements IRangedAttackMob +{ + private static final UUID MODIFIER_UUID = UUID.fromString("5CD17E52-A79A-43D3-A529-90FDE04B181E"); + private static final AttributeModifier MODIFIER = (new AttributeModifier(MODIFIER_UUID, "Drinking speed penalty", -0.25D, 0)).setSaved(false); + private static final DataParameter IS_DRINKING = EntityDataManager.createKey(EntityWitch.class, DataSerializers.BOOLEAN); + /** + * A timer that counts down until a witch finishes drinking a potion, at which time the held item (if it is a + * potion) will have its effects applied. Set to {@link ItemStack#getMaxItemUseDuration()}. + */ + private int potionUseTimer; + + public EntityWitch(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.95F); + } + + public static void registerFixesWitch(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityWitch.class); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIAttackRanged(this, 1.0D, 60, 10.0F)); + this.tasks.addTask(2, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(3, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(3, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + } + + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(IS_DRINKING, Boolean.valueOf(false)); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_WITCH_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_WITCH_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_WITCH_DEATH; + } + + /** + * Set whether this witch is aggressive at an entity. + */ + public void setDrinkingPotion(boolean drinkingPotion) + { + this.getDataManager().set(IS_DRINKING, Boolean.valueOf(drinkingPotion)); + } + + public boolean isDrinkingPotion() + { + return ((Boolean)this.getDataManager().get(IS_DRINKING)).booleanValue(); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(26.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (!this.world.isRemote) + { + if (this.isDrinkingPotion()) + { + if (this.potionUseTimer-- <= 0) + { + this.setDrinkingPotion(false); + ItemStack itemstack = this.getHeldItemMainhand(); + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, ItemStack.EMPTY); + + if (itemstack.getItem() == Items.POTIONITEM) + { + List list = PotionUtils.getEffectsFromStack(itemstack); + + if (list != null) + { + for (PotionEffect potioneffect : list) + { + this.addPotionEffect(new PotionEffect(potioneffect)); + } + } + } + + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).removeModifier(MODIFIER); + } + } + else + { + PotionType potiontype = null; + + if (this.rand.nextFloat() < 0.15F && this.isInsideOfMaterial(Material.WATER) && !this.isPotionActive(MobEffects.WATER_BREATHING)) + { + potiontype = PotionTypes.WATER_BREATHING; + } + else if (this.rand.nextFloat() < 0.15F && (this.isBurning() || this.getLastDamageSource() != null && this.getLastDamageSource().isFireDamage()) && !this.isPotionActive(MobEffects.FIRE_RESISTANCE)) + { + potiontype = PotionTypes.FIRE_RESISTANCE; + } + else if (this.rand.nextFloat() < 0.05F && this.getHealth() < this.getMaxHealth()) + { + potiontype = PotionTypes.HEALING; + } + else if (this.rand.nextFloat() < 0.5F && this.getAttackTarget() != null && !this.isPotionActive(MobEffects.SPEED) && this.getAttackTarget().getDistanceSq(this) > 121.0D) + { + potiontype = PotionTypes.SWIFTNESS; + } + + if (potiontype != null) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), potiontype)); + this.potionUseTimer = this.getHeldItemMainhand().getMaxItemUseDuration(); + this.setDrinkingPotion(true); + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_WITCH_DRINK, this.getSoundCategory(), 1.0F, 0.8F + this.rand.nextFloat() * 0.4F); + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + iattributeinstance.removeModifier(MODIFIER); + iattributeinstance.applyModifier(MODIFIER); + } + } + + if (this.rand.nextFloat() < 7.5E-4F) + { + this.world.setEntityState(this, (byte)15); + } + } + + super.onLivingUpdate(); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 15) + { + for (int i = 0; i < this.rand.nextInt(35) + 10; ++i) + { + this.world.spawnParticle(EnumParticleTypes.SPELL_WITCH, this.posX + this.rand.nextGaussian() * 0.12999999523162842D, this.getEntityBoundingBox().maxY + 0.5D + this.rand.nextGaussian() * 0.12999999523162842D, this.posZ + this.rand.nextGaussian() * 0.12999999523162842D, 0.0D, 0.0D, 0.0D); + } + } + else + { + super.handleStatusUpdate(id); + } + } + + /** + * Reduces damage, depending on potions + */ + protected float applyPotionDamageCalculations(DamageSource source, float damage) + { + damage = super.applyPotionDamageCalculations(source, damage); + + if (source.getTrueSource() == this) + { + damage = 0.0F; + } + + if (source.isMagicDamage()) + { + damage = (float)((double)damage * 0.15D); + } + + return damage; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_WITCH; + } + + /** + * Attack the specified entity using a ranged attack. + */ + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) + { + if (!this.isDrinkingPotion()) + { + double d0 = target.posY + (double)target.getEyeHeight() - 1.100000023841858D; + double d1 = target.posX + target.motionX - this.posX; + double d2 = d0 - this.posY; + double d3 = target.posZ + target.motionZ - this.posZ; + float f = MathHelper.sqrt(d1 * d1 + d3 * d3); + PotionType potiontype = PotionTypes.HARMING; + + if (f >= 8.0F && !target.isPotionActive(MobEffects.SLOWNESS)) + { + potiontype = PotionTypes.SLOWNESS; + } + else if (target.getHealth() >= 8.0F && !target.isPotionActive(MobEffects.POISON)) + { + potiontype = PotionTypes.POISON; + } + else if (f <= 3.0F && !target.isPotionActive(MobEffects.WEAKNESS) && this.rand.nextFloat() < 0.25F) + { + potiontype = PotionTypes.WEAKNESS; + } + + EntityPotion entitypotion = new EntityPotion(this.world, this, PotionUtils.addPotionToItemStack(new ItemStack(Items.SPLASH_POTION), potiontype)); + entitypotion.rotationPitch -= -20.0F; + entitypotion.shoot(d1, d2 + (double)(f * 0.2F), d3, 0.75F, 8.0F); + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_WITCH_THROW, this.getSoundCategory(), 1.0F, 0.8F + this.rand.nextFloat() * 0.4F); + this.world.spawnEntity(entitypotion); + } + } + + public float getEyeHeight() + { + return 1.62F; + } + + public void setSwingingArms(boolean swingingArms) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityWitherSkeleton.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityWitherSkeleton.java new file mode 100644 index 0000000..ef7bb2a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityWitherSkeleton.java @@ -0,0 +1,139 @@ +package net.minecraft.entity.monster; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityWitherSkeleton extends AbstractSkeleton +{ + public EntityWitherSkeleton(World worldIn) + { + super(worldIn); + this.setSize(0.7F, 2.4F); + this.isImmuneToFire = true; + } + + public static void registerFixesWitherSkeleton(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityWitherSkeleton.class); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_WITHER_SKELETON; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_WITHER_SKELETON_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_WITHER_SKELETON_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_WITHER_SKELETON_DEATH; + } + + protected SoundEvent getStepSound() + { + return SoundEvents.ENTITY_WITHER_SKELETON_STEP; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (cause.getTrueSource() instanceof EntityCreeper) + { + EntityCreeper entitycreeper = (EntityCreeper)cause.getTrueSource(); + + if (entitycreeper.getPowered() && entitycreeper.ableToCauseSkullDrop()) + { + entitycreeper.incrementDroppedSkulls(); + this.entityDropItem(new ItemStack(Items.SKULL, 1, 1), 0.0F); + } + } + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.STONE_SWORD)); + } + + /** + * Enchants Entity's current equipments based on given DifficultyInstance + */ + protected void setEnchantmentBasedOnDifficulty(DifficultyInstance difficulty) + { + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + IEntityLivingData ientitylivingdata = super.onInitialSpawn(difficulty, livingdata); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(4.0D); + this.setCombatTask(); + return ientitylivingdata; + } + + public float getEyeHeight() + { + return 2.1F; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + if (!super.attackEntityAsMob(entityIn)) + { + return false; + } + else + { + if (entityIn instanceof EntityLivingBase) + { + ((EntityLivingBase)entityIn).addPotionEffect(new PotionEffect(MobEffects.WITHER, 200)); + } + + return true; + } + } + + protected EntityArrow getArrow(float p_190726_1_) + { + EntityArrow entityarrow = super.getArrow(p_190726_1_); + entityarrow.setFire(100); + return entityarrow; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityZombie.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityZombie.java new file mode 100644 index 0000000..ef10244 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityZombie.java @@ -0,0 +1,639 @@ +package net.minecraft.entity.monster; + +import java.util.Calendar; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBreakDoor; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMoveThroughVillage; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIZombieAttack; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.ai.attributes.RangedAttribute; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityZombie extends EntityMob +{ + /** The attribute which determines the chance that this mob will spawn reinforcements */ + protected static final IAttribute SPAWN_REINFORCEMENTS_CHANCE = (new RangedAttribute((IAttribute)null, "zombie.spawnReinforcements", 0.0D, 0.0D, 1.0D)).setDescription("Spawn Reinforcements Chance"); + private static final UUID BABY_SPEED_BOOST_ID = UUID.fromString("B9766B59-9566-4402-BC1F-2EE2A276D836"); + private static final AttributeModifier BABY_SPEED_BOOST = new AttributeModifier(BABY_SPEED_BOOST_ID, "Baby speed boost", 0.5D, 1); + private static final DataParameter IS_CHILD = EntityDataManager.createKey(EntityZombie.class, DataSerializers.BOOLEAN); + /** + * Was the type of villager for zombie villagers prior to 1.11. Now unused. Use {@link + * EntityZombieVillager#PROFESSION} instead. + */ + private static final DataParameter VILLAGER_TYPE = EntityDataManager.createKey(EntityZombie.class, DataSerializers.VARINT); + private static final DataParameter ARMS_RAISED = EntityDataManager.createKey(EntityZombie.class, DataSerializers.BOOLEAN); + private final EntityAIBreakDoor breakDoor = new EntityAIBreakDoor(this); + private boolean isBreakDoorsTaskSet; + /** The width of the entity */ + private float zombieWidth = -1.0F; + /** The height of the the entity. */ + private float zombieHeight; + + public EntityZombie(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 1.95F); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIZombieAttack(this, 1.0D, false)); + this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.applyEntityAI(); + } + + protected void applyEntityAI() + { + this.tasks.addTask(6, new EntityAIMoveThroughVillage(this, 1.0D, false)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true, new Class[] {EntityPigZombie.class})); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityVillager.class, false)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityIronGolem.class, true)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(35.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23000000417232513D); + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(3.0D); + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(2.0D); + this.getAttributeMap().registerAttribute(SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.rand.nextDouble() * net.minecraftforge.common.ForgeModContainer.zombieSummonBaseChance); + } + + protected void entityInit() + { + super.entityInit(); + this.getDataManager().register(IS_CHILD, Boolean.valueOf(false)); + this.getDataManager().register(VILLAGER_TYPE, Integer.valueOf(0)); + this.getDataManager().register(ARMS_RAISED, Boolean.valueOf(false)); + } + + public void setArmsRaised(boolean armsRaised) + { + this.getDataManager().set(ARMS_RAISED, Boolean.valueOf(armsRaised)); + } + + @SideOnly(Side.CLIENT) + public boolean isArmsRaised() + { + return ((Boolean)this.getDataManager().get(ARMS_RAISED)).booleanValue(); + } + + public boolean isBreakDoorsTaskSet() + { + return this.isBreakDoorsTaskSet; + } + + /** + * Sets or removes EntityAIBreakDoor task + */ + public void setBreakDoorsAItask(boolean enabled) + { + if (this.isBreakDoorsTaskSet != enabled) + { + this.isBreakDoorsTaskSet = enabled; + ((PathNavigateGround)this.getNavigator()).setBreakDoors(enabled); + + if (enabled) + { + this.tasks.addTask(1, this.breakDoor); + } + else + { + this.tasks.removeTask(this.breakDoor); + } + } + } + + /** + * If Animal, checks if the age timer is negative + */ + public boolean isChild() + { + return ((Boolean)this.getDataManager().get(IS_CHILD)).booleanValue(); + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + if (this.isChild()) + { + this.experienceValue = (int)((float)this.experienceValue * 2.5F); + } + + return super.getExperiencePoints(player); + } + + /** + * Set whether this zombie is a child. + */ + public void setChild(boolean childZombie) + { + this.getDataManager().set(IS_CHILD, Boolean.valueOf(childZombie)); + + if (this.world != null && !this.world.isRemote) + { + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + iattributeinstance.removeModifier(BABY_SPEED_BOOST); + + if (childZombie) + { + iattributeinstance.applyModifier(BABY_SPEED_BOOST); + } + } + + this.setChildSize(childZombie); + } + + public void notifyDataManagerChange(DataParameter key) + { + if (IS_CHILD.equals(key)) + { + this.setChildSize(this.isChild()); + } + + super.notifyDataManagerChange(key); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.world.isDaytime() && !this.world.isRemote && !this.isChild() && this.shouldBurnInDay()) + { + float f = this.getBrightness(); + + if (f > 0.5F && this.rand.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.world.canSeeSky(new BlockPos(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ))) + { + boolean flag = true; + ItemStack itemstack = this.getItemStackFromSlot(EntityEquipmentSlot.HEAD); + + if (!itemstack.isEmpty()) + { + if (itemstack.isItemStackDamageable()) + { + itemstack.setItemDamage(itemstack.getItemDamage() + this.rand.nextInt(2)); + + if (itemstack.getItemDamage() >= itemstack.getMaxDamage()) + { + this.renderBrokenItemStack(itemstack); + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, ItemStack.EMPTY); + } + } + + flag = false; + } + + if (flag) + { + this.setFire(8); + } + } + } + + super.onLivingUpdate(); + } + + protected boolean shouldBurnInDay() + { + return true; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (super.attackEntityFrom(source, amount)) + { + EntityLivingBase entitylivingbase = this.getAttackTarget(); + + if (entitylivingbase == null && source.getTrueSource() instanceof EntityLivingBase) + { + entitylivingbase = (EntityLivingBase)source.getTrueSource(); + } + + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.posY); + int k = MathHelper.floor(this.posZ); + net.minecraftforge.event.entity.living.ZombieEvent.SummonAidEvent summonAid = net.minecraftforge.event.ForgeEventFactory.fireZombieSummonAid(this, world, i, j, k, entitylivingbase, this.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).getAttributeValue()); + if (summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) return true; + + if (summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW || + entitylivingbase != null && this.world.getDifficulty() == EnumDifficulty.HARD && (double)this.rand.nextFloat() < this.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).getAttributeValue() && this.world.getGameRules().getBoolean("doMobSpawning")) + { + EntityZombie entityzombie; + if (summonAid.getCustomSummonedAid() != null && summonAid.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) + { + entityzombie = summonAid.getCustomSummonedAid(); + } + else + { + entityzombie = new EntityZombie(this.world); + } + + for (int l = 0; l < 50; ++l) + { + int i1 = i + MathHelper.getInt(this.rand, 7, 40) * MathHelper.getInt(this.rand, -1, 1); + int j1 = j + MathHelper.getInt(this.rand, 7, 40) * MathHelper.getInt(this.rand, -1, 1); + int k1 = k + MathHelper.getInt(this.rand, 7, 40) * MathHelper.getInt(this.rand, -1, 1); + + if (this.world.getBlockState(new BlockPos(i1, j1 - 1, k1)).isSideSolid(this.world, new BlockPos(i1, j1 - 1, k1), net.minecraft.util.EnumFacing.UP) && this.world.getLightFromNeighbors(new BlockPos(i1, j1, k1)) < 10) + { + entityzombie.setPosition((double)i1, (double)j1, (double)k1); + + if (!this.world.isAnyPlayerWithinRangeAt((double)i1, (double)j1, (double)k1, 7.0D) && this.world.checkNoEntityCollision(entityzombie.getEntityBoundingBox(), entityzombie) && this.world.getCollisionBoxes(entityzombie, entityzombie.getEntityBoundingBox()).isEmpty() && !this.world.containsAnyLiquid(entityzombie.getEntityBoundingBox())) + { + this.world.spawnEntity(entityzombie); + if (entitylivingbase != null) entityzombie.setAttackTarget(entitylivingbase); + entityzombie.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entityzombie)), (IEntityLivingData)null); + this.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).applyModifier(new AttributeModifier("Zombie reinforcement caller charge", -0.05000000074505806D, 0)); + entityzombie.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).applyModifier(new AttributeModifier("Zombie reinforcement callee charge", -0.05000000074505806D, 0)); + break; + } + } + } + } + + return true; + } + else + { + return false; + } + } + + public boolean attackEntityAsMob(Entity entityIn) + { + boolean flag = super.attackEntityAsMob(entityIn); + + if (flag) + { + float f = this.world.getDifficultyForLocation(new BlockPos(this)).getAdditionalDifficulty(); + + if (this.getHeldItemMainhand().isEmpty() && this.isBurning() && this.rand.nextFloat() < f * 0.3F) + { + entityIn.setFire(2 * (int)f); + } + } + + return flag; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_ZOMBIE_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ZOMBIE_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ZOMBIE_DEATH; + } + + protected SoundEvent getStepSound() + { + return SoundEvents.ENTITY_ZOMBIE_STEP; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(this.getStepSound(), 0.15F, 1.0F); + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ZOMBIE; + } + + /** + * Gives armor or weapon for entity based on given DifficultyInstance + */ + protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) + { + super.setEquipmentBasedOnDifficulty(difficulty); + + if (this.rand.nextFloat() < (this.world.getDifficulty() == EnumDifficulty.HARD ? 0.05F : 0.01F)) + { + int i = this.rand.nextInt(3); + + if (i == 0) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.IRON_SWORD)); + } + else + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.IRON_SHOVEL)); + } + } + } + + public static void registerFixesZombie(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityZombie.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (this.isChild()) + { + compound.setBoolean("IsBaby", true); + } + + compound.setBoolean("CanBreakDoors", this.isBreakDoorsTaskSet()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.getBoolean("IsBaby")) + { + this.setChild(true); + } + + this.setBreakDoorsAItask(compound.getBoolean("CanBreakDoors")); + } + + /** + * This method gets called when the entity kills another one. + */ + public void onKillEntity(EntityLivingBase entityLivingIn) + { + super.onKillEntity(entityLivingIn); + + if ((this.world.getDifficulty() == EnumDifficulty.NORMAL || this.world.getDifficulty() == EnumDifficulty.HARD) && entityLivingIn instanceof EntityVillager) + { + if (this.world.getDifficulty() != EnumDifficulty.HARD && this.rand.nextBoolean()) + { + return; + } + + EntityVillager entityvillager = (EntityVillager)entityLivingIn; + EntityZombieVillager entityzombievillager = new EntityZombieVillager(this.world); + entityzombievillager.copyLocationAndAnglesFrom(entityvillager); + this.world.removeEntity(entityvillager); + entityzombievillager.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entityzombievillager)), new EntityZombie.GroupData(false)); + entityzombievillager.setProfession(entityvillager.getProfession()); + entityzombievillager.setChild(entityvillager.isChild()); + entityzombievillager.setNoAI(entityvillager.isAIDisabled()); + + if (entityvillager.hasCustomName()) + { + entityzombievillager.setCustomNameTag(entityvillager.getCustomNameTag()); + entityzombievillager.setAlwaysRenderNameTag(entityvillager.getAlwaysRenderNameTag()); + } + + this.world.spawnEntity(entityzombievillager); + this.world.playEvent((EntityPlayer)null, 1026, new BlockPos(this), 0); + } + } + + public float getEyeHeight() + { + float f = 1.74F; + + if (this.isChild()) + { + f = (float)((double)f - 0.81D); + } + + return f; + } + + protected boolean canEquipItem(ItemStack stack) + { + return stack.getItem() == Items.EGG && this.isChild() && this.isRiding() ? false : super.canEquipItem(stack); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + float f = difficulty.getClampedAdditionalDifficulty(); + this.setCanPickUpLoot(this.rand.nextFloat() < 0.55F * f); + + if (livingdata == null) + { + livingdata = new EntityZombie.GroupData(this.world.rand.nextFloat() < net.minecraftforge.common.ForgeModContainer.zombieBabyChance); + } + + if (livingdata instanceof EntityZombie.GroupData) + { + EntityZombie.GroupData entityzombie$groupdata = (EntityZombie.GroupData)livingdata; + + if (entityzombie$groupdata.isChild) + { + this.setChild(true); + + if ((double)this.world.rand.nextFloat() < 0.05D) + { + List list = this.world.getEntitiesWithinAABB(EntityChicken.class, this.getEntityBoundingBox().grow(5.0D, 3.0D, 5.0D), EntitySelectors.IS_STANDALONE); + + if (!list.isEmpty()) + { + EntityChicken entitychicken = list.get(0); + entitychicken.setChickenJockey(true); + this.startRiding(entitychicken); + } + } + else if ((double)this.world.rand.nextFloat() < 0.05D) + { + EntityChicken entitychicken1 = new EntityChicken(this.world); + entitychicken1.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + entitychicken1.onInitialSpawn(difficulty, (IEntityLivingData)null); + entitychicken1.setChickenJockey(true); + this.world.spawnEntity(entitychicken1); + this.startRiding(entitychicken1); + } + } + } + + this.setBreakDoorsAItask(this.rand.nextFloat() < f * 0.1F); + this.setEquipmentBasedOnDifficulty(difficulty); + this.setEnchantmentBasedOnDifficulty(difficulty); + + if (this.getItemStackFromSlot(EntityEquipmentSlot.HEAD).isEmpty()) + { + Calendar calendar = this.world.getCurrentDate(); + + if (calendar.get(2) + 1 == 10 && calendar.get(5) == 31 && this.rand.nextFloat() < 0.25F) + { + this.setItemStackToSlot(EntityEquipmentSlot.HEAD, new ItemStack(this.rand.nextFloat() < 0.1F ? Blocks.LIT_PUMPKIN : Blocks.PUMPKIN)); + this.inventoryArmorDropChances[EntityEquipmentSlot.HEAD.getIndex()] = 0.0F; + } + } + + this.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).applyModifier(new AttributeModifier("Random spawn bonus", this.rand.nextDouble() * 0.05000000074505806D, 0)); + double d0 = this.rand.nextDouble() * 1.5D * (double)f; + + if (d0 > 1.0D) + { + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).applyModifier(new AttributeModifier("Random zombie-spawn bonus", d0, 2)); + } + + if (this.rand.nextFloat() < f * 0.05F) + { + this.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).applyModifier(new AttributeModifier("Leader zombie bonus", this.rand.nextDouble() * 0.25D + 0.5D, 0)); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).applyModifier(new AttributeModifier("Leader zombie bonus", this.rand.nextDouble() * 3.0D + 1.0D, 2)); + this.setBreakDoorsAItask(true); + } + + return livingdata; + } + + /** + * sets the size of the entity to be half of its current size if true. + */ + public void setChildSize(boolean isChild) + { + this.multiplySize(isChild ? 0.5F : 1.0F); + } + + /** + * Sets the width and height of the entity. + */ + protected final void setSize(float width, float height) + { + boolean flag = this.zombieWidth > 0.0F && this.zombieHeight > 0.0F; + this.zombieWidth = width; + this.zombieHeight = height; + + if (!flag) + { + this.multiplySize(1.0F); + } + } + + /** + * Multiplies the height and width by the provided float. + */ + protected final void multiplySize(float size) + { + super.setSize(this.zombieWidth * size, this.zombieHeight * size); + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return this.isChild() ? 0.0D : -0.45D; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (cause.getTrueSource() instanceof EntityCreeper) + { + EntityCreeper entitycreeper = (EntityCreeper)cause.getTrueSource(); + + if (entitycreeper.getPowered() && entitycreeper.ableToCauseSkullDrop()) + { + entitycreeper.incrementDroppedSkulls(); + ItemStack itemstack = this.getSkullDrop(); + + if (!itemstack.isEmpty()) + { + this.entityDropItem(itemstack, 0.0F); + } + } + } + } + + protected ItemStack getSkullDrop() + { + return new ItemStack(Items.SKULL, 1, 2); + } + + class GroupData implements IEntityLivingData + { + public boolean isChild; + + private GroupData(boolean p_i47328_2_) + { + this.isChild = p_i47328_2_; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityZombieVillager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityZombieVillager.java new file mode 100644 index 0000000..d6eacc7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/EntityZombieVillager.java @@ -0,0 +1,360 @@ +package net.minecraft.entity.monster; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityZombieVillager extends EntityZombie +{ + private static final DataParameter CONVERTING = EntityDataManager.createKey(EntityZombieVillager.class, DataSerializers.BOOLEAN); + private static final DataParameter PROFESSION = EntityDataManager.createKey(EntityZombieVillager.class, DataSerializers.VARINT); + /** Ticker used to determine the time remaining for this zombie to convert into a villager when cured. */ + private int conversionTime; + /** + * The entity that started the conversion, used for the {@link CriteriaTriggers#CURED_ZOMBIE_VILLAGER} advancement + * criteria + */ + private UUID converstionStarter; + + public EntityZombieVillager(World worldIn) + { + super(worldIn); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(CONVERTING, Boolean.valueOf(false)); + this.dataManager.register(PROFESSION, Integer.valueOf(0)); + } + + public void setProfession(int profession) + { + this.dataManager.set(PROFESSION, Integer.valueOf(profession)); + net.minecraftforge.fml.common.registry.VillagerRegistry.onSetProfession(this, profession); + } + + //Use Forge Variant below + @Deprecated + public int getProfession() + { + return Math.max(((Integer)this.dataManager.get(PROFESSION)).intValue(), 0); + } + + public static void registerFixesZombieVillager(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityZombieVillager.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Profession", this.getProfession()); + compound.setString("ProfessionName", this.getForgeProfession().getRegistryName().toString()); + compound.setInteger("ConversionTime", this.isConverting() ? this.conversionTime : -1); + + if (this.converstionStarter != null) + { + compound.setUniqueId("ConversionPlayer", this.converstionStarter); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setProfession(compound.getInteger("Profession")); + if (compound.hasKey("ProfessionName")) + { + net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession p = net.minecraftforge.fml.common.registry.ForgeRegistries.VILLAGER_PROFESSIONS.getValue(new net.minecraft.util.ResourceLocation(compound.getString("ProfessionName"))); + if (p == null) p = net.minecraftforge.fml.common.registry.VillagerRegistry.FARMER; + this.setForgeProfession(p); + } + + if (compound.hasKey("ConversionTime", 99) && compound.getInteger("ConversionTime") > -1) + { + this.startConverting(compound.hasUniqueId("ConversionPlayer") ? compound.getUniqueId("ConversionPlayer") : null, compound.getInteger("ConversionTime")); + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + this.setProfession(this.world.rand.nextInt(6)); + return super.onInitialSpawn(difficulty, livingdata); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (!this.world.isRemote && this.isConverting()) + { + int i = this.getConversionProgress(); + this.conversionTime -= i; + + if (this.conversionTime <= 0) + { + this.finishConversion(); + } + } + + super.onUpdate(); + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.GOLDEN_APPLE && itemstack.getMetadata() == 0 && this.isPotionActive(MobEffects.WEAKNESS)) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + if (!this.world.isRemote) + { + this.startConverting(player.getUniqueID(), this.rand.nextInt(2401) + 3600); + } + + return true; + } + else + { + return false; + } + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return !this.isConverting(); + } + + /** + * Returns whether this zombie is in the process of converting to a villager + */ + public boolean isConverting() + { + return ((Boolean)this.getDataManager().get(CONVERTING)).booleanValue(); + } + + /** + * Starts conversion of this zombie villager to a villager + * + * @param conversionStarterIn The entity that started the conversion's UUID + * @param conversionTimeIn The time that it will take to finish conversion + */ + protected void startConverting(@Nullable UUID conversionStarterIn, int conversionTimeIn) + { + this.converstionStarter = conversionStarterIn; + this.conversionTime = conversionTimeIn; + this.getDataManager().set(CONVERTING, Boolean.valueOf(true)); + this.removePotionEffect(MobEffects.WEAKNESS); + this.addPotionEffect(new PotionEffect(MobEffects.STRENGTH, conversionTimeIn, Math.min(this.world.getDifficulty().getDifficultyId() - 1, 0))); + this.world.setEntityState(this, (byte)16); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 16) + { + if (!this.isSilent()) + { + this.world.playSound(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, SoundEvents.ENTITY_ZOMBIE_VILLAGER_CURE, this.getSoundCategory(), 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F, false); + } + } + else + { + super.handleStatusUpdate(id); + } + } + + protected void finishConversion() + { + EntityVillager entityvillager = new EntityVillager(this.world); + entityvillager.copyLocationAndAnglesFrom(this); + entityvillager.setProfession(this.getForgeProfession()); + entityvillager.finalizeMobSpawn(this.world.getDifficultyForLocation(new BlockPos(entityvillager)), (IEntityLivingData)null, false); + entityvillager.setLookingForHome(); + + if (this.isChild()) + { + entityvillager.setGrowingAge(-24000); + } + + this.world.removeEntity(this); + entityvillager.setNoAI(this.isAIDisabled()); + + if (this.hasCustomName()) + { + entityvillager.setCustomNameTag(this.getCustomNameTag()); + entityvillager.setAlwaysRenderNameTag(this.getAlwaysRenderNameTag()); + } + + this.world.spawnEntity(entityvillager); + + if (this.converstionStarter != null) + { + EntityPlayer entityplayer = this.world.getPlayerEntityByUUID(this.converstionStarter); + + if (entityplayer instanceof EntityPlayerMP) + { + CriteriaTriggers.CURED_ZOMBIE_VILLAGER.trigger((EntityPlayerMP)entityplayer, this, entityvillager); + } + } + + entityvillager.addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 200, 0)); + this.world.playEvent((EntityPlayer)null, 1027, new BlockPos((int)this.posX, (int)this.posY, (int)this.posZ), 0); + } + + protected int getConversionProgress() + { + int i = 1; + + if (this.rand.nextFloat() < 0.01F) + { + int j = 0; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int k = (int)this.posX - 4; k < (int)this.posX + 4 && j < 14; ++k) + { + for (int l = (int)this.posY - 4; l < (int)this.posY + 4 && j < 14; ++l) + { + for (int i1 = (int)this.posZ - 4; i1 < (int)this.posZ + 4 && j < 14; ++i1) + { + Block block = this.world.getBlockState(blockpos$mutableblockpos.setPos(k, l, i1)).getBlock(); + + if (block == Blocks.IRON_BARS || block == Blocks.BED) + { + if (this.rand.nextFloat() < 0.3F) + { + ++i; + } + + ++j; + } + } + } + } + } + + return i; + } + + /** + * Gets the pitch of living sounds in living entities. + */ + protected float getSoundPitch() + { + return this.isChild() ? (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 2.0F : (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F; + } + + public SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_ZOMBIE_VILLAGER_AMBIENT; + } + + public SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_ZOMBIE_VILLAGER_HURT; + } + + public SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_ZOMBIE_VILLAGER_DEATH; + } + + public SoundEvent getStepSound() + { + return SoundEvents.ENTITY_ZOMBIE_VILLAGER_STEP; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ZOMBIE_VILLAGER; + } + + protected ItemStack getSkullDrop() + { + return ItemStack.EMPTY; + } + + /* ======================================== FORGE START =====================================*/ + + @Nullable + private net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession prof; + public void setForgeProfession(net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession prof) + { + this.prof = prof; + this.setProfession(net.minecraftforge.fml.common.registry.VillagerRegistry.getId(prof)); + } + + public net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession getForgeProfession() + { + if (this.prof == null) + { + this.prof = net.minecraftforge.fml.common.registry.VillagerRegistry.getById(this.getProfession()); + if (this.prof == null) + return net.minecraftforge.fml.common.registry.VillagerRegistry.FARMER; + } + return this.prof; + } + + @Override + public void notifyDataManagerChange(DataParameter key) + { + super.notifyDataManagerChange(key); + if (key.equals(PROFESSION)) + { + net.minecraftforge.fml.common.registry.VillagerRegistry.onSetProfession(this, this.dataManager.get(PROFESSION)); + } + } + + /* ======================================== FORGE END =====================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/IMob.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/IMob.java new file mode 100644 index 0000000..81b82ef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/IMob.java @@ -0,0 +1,26 @@ +package net.minecraft.entity.monster; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.IAnimals; + +public interface IMob extends IAnimals +{ + /** Entity selector for IMob types. */ + Predicate MOB_SELECTOR = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof IMob; + } + }; + /** Entity selector for IMob types that are not invisible */ + Predicate VISIBLE_MOB_SELECTOR = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof IMob && !p_apply_1_.isInvisible(); + } + }; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/monster/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/package-info.java new file mode 100644 index 0000000..6197b52 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/monster/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.monster; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/package-info.java new file mode 100644 index 0000000..b935367 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/AbstractChestHorse.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/AbstractChestHorse.java new file mode 100644 index 0000000..dfe355b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/AbstractChestHorse.java @@ -0,0 +1,268 @@ +package net.minecraft.entity.passive; + +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.world.World; + +public abstract class AbstractChestHorse extends AbstractHorse +{ + private static final DataParameter DATA_ID_CHEST = EntityDataManager.createKey(AbstractChestHorse.class, DataSerializers.BOOLEAN); + + public AbstractChestHorse(World worldIn) + { + super(worldIn); + this.canGallop = false; + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(DATA_ID_CHEST, Boolean.valueOf(false)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue((double)this.getModifiedMaxHealth()); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.17499999701976776D); + this.getEntityAttribute(JUMP_STRENGTH).setBaseValue(0.5D); + } + + public boolean hasChest() + { + return ((Boolean)this.dataManager.get(DATA_ID_CHEST)).booleanValue(); + } + + public void setChested(boolean chested) + { + this.dataManager.set(DATA_ID_CHEST, Boolean.valueOf(chested)); + } + + protected int getInventorySize() + { + return this.hasChest() ? 17 : super.getInventorySize(); + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return super.getMountedYOffset() - 0.25D; + } + + protected SoundEvent getAngrySound() + { + super.getAngrySound(); + return SoundEvents.ENTITY_DONKEY_ANGRY; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (this.hasChest()) + { + if (!this.world.isRemote) + { + this.dropItem(Item.getItemFromBlock(Blocks.CHEST), 1); + } + + this.setChested(false); + } + } + + public static void registerFixesAbstractChestHorse(DataFixer fixer, Class entityClass) + { + AbstractHorse.registerFixesAbstractHorse(fixer, entityClass); + fixer.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(entityClass, new String[] {"Items"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("ChestedHorse", this.hasChest()); + + if (this.hasChest()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 2; i < this.horseChest.getSizeInventory(); ++i) + { + ItemStack itemstack = this.horseChest.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte)i); + itemstack.writeToNBT(nbttagcompound); + nbttaglist.appendTag(nbttagcompound); + } + } + + compound.setTag("Items", nbttaglist); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setChested(compound.getBoolean("ChestedHorse")); + + if (this.hasChest()) + { + NBTTagList nbttaglist = compound.getTagList("Items", 10); + this.initHorseChest(); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 2 && j < this.horseChest.getSizeInventory()) + { + this.horseChest.setInventorySlotContents(j, new ItemStack(nbttagcompound)); + } + } + } + + this.updateHorseSlots(); + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + if (inventorySlot == 499) + { + if (this.hasChest() && itemStackIn.isEmpty()) + { + this.setChested(false); + this.initHorseChest(); + return true; + } + + if (!this.hasChest() && itemStackIn.getItem() == Item.getItemFromBlock(Blocks.CHEST)) + { + this.setChested(true); + this.initHorseChest(); + return true; + } + } + + return super.replaceItemInInventory(inventorySlot, itemStackIn); + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.SPAWN_EGG) + { + return super.processInteract(player, hand); + } + else + { + if (!this.isChild()) + { + if (this.isTame() && player.isSneaking()) + { + this.openGUI(player); + return true; + } + + if (this.isBeingRidden()) + { + return super.processInteract(player, hand); + } + } + + if (!itemstack.isEmpty()) + { + boolean flag = this.handleEating(player, itemstack); + + if (!flag && !this.isTame()) + { + if (itemstack.interactWithEntity(player, this, hand)) + { + return true; + } + + this.makeMad(); + return true; + } + + if (!flag && !this.hasChest() && itemstack.getItem() == Item.getItemFromBlock(Blocks.CHEST)) + { + this.setChested(true); + this.playChestEquipSound(); + flag = true; + this.initHorseChest(); + } + + if (!flag && !this.isChild() && !this.isHorseSaddled() && itemstack.getItem() == Items.SADDLE) + { + this.openGUI(player); + return true; + } + + if (flag) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return true; + } + } + + if (this.isChild()) + { + return super.processInteract(player, hand); + } + else if (itemstack.interactWithEntity(player, this, hand)) + { + return true; + } + else + { + this.mountTo(player); + return true; + } + } + } + + protected void playChestEquipSound() + { + this.playSound(SoundEvents.ENTITY_DONKEY_CHEST, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + public int getInventoryColumns() + { + return 5; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/AbstractHorse.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/AbstractHorse.java new file mode 100644 index 0000000..90480e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/AbstractHorse.java @@ -0,0 +1,1335 @@ +package net.minecraft.entity.passive; + +import com.google.common.base.Optional; +import com.google.common.base.Predicate; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IJumpingMount; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAIRunAroundLikeCrazy; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.ai.attributes.RangedAttribute; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.ContainerHorseChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.IInventoryChangedListener; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.server.management.PreYggdrasilConverter; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class AbstractHorse extends EntityAnimal implements IInventoryChangedListener, IJumpingMount +{ + private static final Predicate IS_HORSE_BREEDING = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof AbstractHorse && ((AbstractHorse)p_apply_1_).isBreeding(); + } + }; + protected static final IAttribute JUMP_STRENGTH = (new RangedAttribute((IAttribute)null, "horse.jumpStrength", 0.7D, 0.0D, 2.0D)).setDescription("Jump Strength").setShouldWatch(true); + private static final DataParameter STATUS = EntityDataManager.createKey(AbstractHorse.class, DataSerializers.BYTE); + private static final DataParameter> OWNER_UNIQUE_ID = EntityDataManager.>createKey(AbstractHorse.class, DataSerializers.OPTIONAL_UNIQUE_ID); + private int eatingCounter; + private int openMouthCounter; + private int jumpRearingCounter; + public int tailCounter; + public int sprintCounter; + protected boolean horseJumping; + protected ContainerHorseChest horseChest; + /** "The higher this value, the more likely the horse is to be tamed next time a player rides it." */ + protected int temper; + protected float jumpPower; + private boolean allowStandSliding; + private float headLean; + private float prevHeadLean; + private float rearingAmount; + private float prevRearingAmount; + private float mouthOpenness; + private float prevMouthOpenness; + protected boolean canGallop = true; + /** Used to determine the sound that the horse should make when it steps */ + protected int gallopTime; + + public AbstractHorse(World worldIn) + { + super(worldIn); + this.setSize(1.3964844F, 1.6F); + this.stepHeight = 1.0F; + this.initHorseChest(); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 1.2D)); + this.tasks.addTask(1, new EntityAIRunAroundLikeCrazy(this, 1.2D)); + this.tasks.addTask(2, new EntityAIMate(this, 1.0D, AbstractHorse.class)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 0.7D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(STATUS, Byte.valueOf((byte)0)); + this.dataManager.register(OWNER_UNIQUE_ID, Optional.absent()); + } + + protected boolean getHorseWatchableBoolean(int p_110233_1_) + { + return (((Byte)this.dataManager.get(STATUS)).byteValue() & p_110233_1_) != 0; + } + + protected void setHorseWatchableBoolean(int p_110208_1_, boolean p_110208_2_) + { + byte b0 = ((Byte)this.dataManager.get(STATUS)).byteValue(); + + if (p_110208_2_) + { + this.dataManager.set(STATUS, Byte.valueOf((byte)(b0 | p_110208_1_))); + } + else + { + this.dataManager.set(STATUS, Byte.valueOf((byte)(b0 & ~p_110208_1_))); + } + } + + public boolean isTame() + { + return this.getHorseWatchableBoolean(2); + } + + @Nullable + public UUID getOwnerUniqueId() + { + return (UUID)((Optional)this.dataManager.get(OWNER_UNIQUE_ID)).orNull(); + } + + public void setOwnerUniqueId(@Nullable UUID uniqueId) + { + this.dataManager.set(OWNER_UNIQUE_ID, Optional.fromNullable(uniqueId)); + } + + public float getHorseSize() + { + return 0.5F; + } + + /** + * "Sets the scale for an ageable entity according to the boolean parameter, which says if it's a child." + */ + public void setScaleForAge(boolean child) + { + this.setScale(child ? this.getHorseSize() : 1.0F); + } + + public boolean isHorseJumping() + { + return this.horseJumping; + } + + public void setHorseTamed(boolean tamed) + { + this.setHorseWatchableBoolean(2, tamed); + } + + public void setHorseJumping(boolean jumping) + { + this.horseJumping = jumping; + } + + public boolean canBeLeashedTo(EntityPlayer player) + { + return super.canBeLeashedTo(player) && this.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD; + } + + protected void onLeashDistance(float p_142017_1_) + { + if (p_142017_1_ > 6.0F && this.isEatingHaystack()) + { + this.setEatingHaystack(false); + } + } + + public boolean isEatingHaystack() + { + return this.getHorseWatchableBoolean(16); + } + + public boolean isRearing() + { + return this.getHorseWatchableBoolean(32); + } + + public boolean isBreeding() + { + return this.getHorseWatchableBoolean(8); + } + + public void setBreeding(boolean breeding) + { + this.setHorseWatchableBoolean(8, breeding); + } + + public void setHorseSaddled(boolean saddled) + { + this.setHorseWatchableBoolean(4, saddled); + } + + public int getTemper() + { + return this.temper; + } + + public void setTemper(int temperIn) + { + this.temper = temperIn; + } + + public int increaseTemper(int p_110198_1_) + { + int i = MathHelper.clamp(this.getTemper() + p_110198_1_, 0, this.getMaxTemper()); + this.setTemper(i); + return i; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + Entity entity = source.getTrueSource(); + return this.isBeingRidden() && entity != null && this.isRidingOrBeingRiddenBy(entity) ? false : super.attackEntityFrom(source, amount); + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return !this.isBeingRidden(); + } + + private void eatingHorse() + { + this.openHorseMouth(); + + if (!this.isSilent()) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_HORSE_EAT, this.getSoundCategory(), 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + } + } + + public void fall(float distance, float damageMultiplier) + { + if (distance > 1.0F) + { + this.playSound(SoundEvents.ENTITY_HORSE_LAND, 0.4F, 1.0F); + } + + int i = MathHelper.ceil((distance * 0.5F - 3.0F) * damageMultiplier); + + if (i > 0) + { + this.attackEntityFrom(DamageSource.FALL, (float)i); + + if (this.isBeingRidden()) + { + for (Entity entity : this.getRecursivePassengers()) + { + entity.attackEntityFrom(DamageSource.FALL, (float)i); + } + } + + IBlockState iblockstate = this.world.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - (double)this.prevRotationYaw, this.posZ)); + Block block = iblockstate.getBlock(); + + if (iblockstate.getMaterial() != Material.AIR && !this.isSilent()) + { + SoundType soundtype = block.getSoundType(); + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, soundtype.getStepSound(), this.getSoundCategory(), soundtype.getVolume() * 0.5F, soundtype.getPitch() * 0.75F); + } + } + } + + protected int getInventorySize() + { + return 2; + } + + protected void initHorseChest() + { + ContainerHorseChest containerhorsechest = this.horseChest; + this.horseChest = new ContainerHorseChest("HorseChest", this.getInventorySize()); + this.horseChest.setCustomName(this.getName()); + + if (containerhorsechest != null) + { + containerhorsechest.removeInventoryChangeListener(this); + int i = Math.min(containerhorsechest.getSizeInventory(), this.horseChest.getSizeInventory()); + + for (int j = 0; j < i; ++j) + { + ItemStack itemstack = containerhorsechest.getStackInSlot(j); + + if (!itemstack.isEmpty()) + { + this.horseChest.setInventorySlotContents(j, itemstack.copy()); + } + } + } + + this.horseChest.addInventoryChangeListener(this); + this.updateHorseSlots(); + this.itemHandler = new net.minecraftforge.items.wrapper.InvWrapper(this.horseChest); + } + + /** + * Updates the items in the saddle and armor slots of the horse's inventory. + */ + protected void updateHorseSlots() + { + if (!this.world.isRemote) + { + this.setHorseSaddled(!this.horseChest.getStackInSlot(0).isEmpty() && this.canBeSaddled()); + } + } + + /** + * Called by InventoryBasic.onInventoryChanged() on a array that is never filled. + */ + public void onInventoryChanged(IInventory invBasic) + { + boolean flag = this.isHorseSaddled(); + this.updateHorseSlots(); + + if (this.ticksExisted > 20 && !flag && this.isHorseSaddled()) + { + this.playSound(SoundEvents.ENTITY_HORSE_SADDLE, 0.5F, 1.0F); + } + } + + @Nullable + protected AbstractHorse getClosestHorse(Entity entityIn, double distance) + { + double d0 = Double.MAX_VALUE; + Entity entity = null; + + for (Entity entity1 : this.world.getEntitiesInAABBexcluding(entityIn, entityIn.getEntityBoundingBox().expand(distance, distance, distance), IS_HORSE_BREEDING)) + { + double d1 = entity1.getDistanceSq(entityIn.posX, entityIn.posY, entityIn.posZ); + + if (d1 < d0) + { + entity = entity1; + d0 = d1; + } + } + + return (AbstractHorse)entity; + } + + public double getHorseJumpStrength() + { + return this.getEntityAttribute(JUMP_STRENGTH).getAttributeValue(); + } + + @Nullable + protected SoundEvent getDeathSound() + { + this.openHorseMouth(); + return null; + } + + @Nullable + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + this.openHorseMouth(); + + if (this.rand.nextInt(3) == 0) + { + this.makeHorseRear(); + } + + return null; + } + + @Nullable + protected SoundEvent getAmbientSound() + { + this.openHorseMouth(); + + if (this.rand.nextInt(10) == 0 && !this.isMovementBlocked()) + { + this.makeHorseRear(); + } + + return null; + } + + public boolean canBeSaddled() + { + return true; + } + + public boolean isHorseSaddled() + { + return this.getHorseWatchableBoolean(4); + } + + @Nullable + protected SoundEvent getAngrySound() + { + this.openHorseMouth(); + this.makeHorseRear(); + return null; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + if (!blockIn.getDefaultState().getMaterial().isLiquid()) + { + SoundType soundtype = blockIn.getSoundType(); + + if (this.world.getBlockState(pos.up()).getBlock() == Blocks.SNOW_LAYER) + { + soundtype = Blocks.SNOW_LAYER.getSoundType(); + } + + if (this.isBeingRidden() && this.canGallop) + { + ++this.gallopTime; + + if (this.gallopTime > 5 && this.gallopTime % 3 == 0) + { + this.playGallopSound(soundtype); + } + else if (this.gallopTime <= 5) + { + this.playSound(SoundEvents.ENTITY_HORSE_STEP_WOOD, soundtype.getVolume() * 0.15F, soundtype.getPitch()); + } + } + else if (soundtype == SoundType.WOOD) + { + this.playSound(SoundEvents.ENTITY_HORSE_STEP_WOOD, soundtype.getVolume() * 0.15F, soundtype.getPitch()); + } + else + { + this.playSound(SoundEvents.ENTITY_HORSE_STEP, soundtype.getVolume() * 0.15F, soundtype.getPitch()); + } + } + } + + protected void playGallopSound(SoundType p_190680_1_) + { + this.playSound(SoundEvents.ENTITY_HORSE_GALLOP, p_190680_1_.getVolume() * 0.15F, p_190680_1_.getPitch()); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getAttributeMap().registerAttribute(JUMP_STRENGTH); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(53.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.22499999403953552D); + } + + /** + * Will return how many at most can spawn in a chunk at once. + */ + public int getMaxSpawnedInChunk() + { + return 6; + } + + public int getMaxTemper() + { + return 100; + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.8F; + } + + /** + * Get number of ticks, at least during which the living entity will be silent. + */ + public int getTalkInterval() + { + return 400; + } + + public void openGUI(EntityPlayer playerEntity) + { + if (!this.world.isRemote && (!this.isBeingRidden() || this.isPassenger(playerEntity)) && this.isTame()) + { + this.horseChest.setCustomName(this.getName()); + playerEntity.openGuiHorseInventory(this, this.horseChest); + } + } + + protected boolean handleEating(EntityPlayer player, ItemStack stack) + { + boolean flag = false; + float f = 0.0F; + int i = 0; + int j = 0; + Item item = stack.getItem(); + + if (item == Items.WHEAT) + { + f = 2.0F; + i = 20; + j = 3; + } + else if (item == Items.SUGAR) + { + f = 1.0F; + i = 30; + j = 3; + } + else if (item == Item.getItemFromBlock(Blocks.HAY_BLOCK)) + { + f = 20.0F; + i = 180; + } + else if (item == Items.APPLE) + { + f = 3.0F; + i = 60; + j = 3; + } + else if (item == Items.GOLDEN_CARROT) + { + f = 4.0F; + i = 60; + j = 5; + + if (this.isTame() && this.getGrowingAge() == 0 && !this.isInLove()) + { + flag = true; + this.setInLove(player); + } + } + else if (item == Items.GOLDEN_APPLE) + { + f = 10.0F; + i = 240; + j = 10; + + if (this.isTame() && this.getGrowingAge() == 0 && !this.isInLove()) + { + flag = true; + this.setInLove(player); + } + } + + if (this.getHealth() < this.getMaxHealth() && f > 0.0F) + { + this.heal(f); + flag = true; + } + + if (this.isChild() && i > 0) + { + this.world.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, 0.0D, 0.0D, 0.0D); + + if (!this.world.isRemote) + { + this.addGrowth(i); + } + + flag = true; + } + + if (j > 0 && (flag || !this.isTame()) && this.getTemper() < this.getMaxTemper()) + { + flag = true; + + if (!this.world.isRemote) + { + this.increaseTemper(j); + } + } + + if (flag) + { + this.eatingHorse(); + } + + return flag; + } + + protected void mountTo(EntityPlayer player) + { + player.rotationYaw = this.rotationYaw; + player.rotationPitch = this.rotationPitch; + this.setEatingHaystack(false); + this.setRearing(false); + + if (!this.world.isRemote) + { + player.startRiding(this); + } + } + + /** + * Dead and sleeping entities cannot move + */ + protected boolean isMovementBlocked() + { + return super.isMovementBlocked() && this.isBeingRidden() && this.isHorseSaddled() || this.isEatingHaystack() || this.isRearing(); + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return false; + } + + private void moveTail() + { + this.tailCounter = 1; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (!this.world.isRemote && this.horseChest != null) + { + for (int i = 0; i < this.horseChest.getSizeInventory(); ++i) + { + ItemStack itemstack = this.horseChest.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + this.entityDropItem(itemstack, 0.0F); + } + } + } + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.rand.nextInt(200) == 0) + { + this.moveTail(); + } + + super.onLivingUpdate(); + + if (!this.world.isRemote) + { + if (this.rand.nextInt(900) == 0 && this.deathTime == 0) + { + this.heal(1.0F); + } + + if (this.canEatGrass()) + { + if (!this.isEatingHaystack() && !this.isBeingRidden() && this.rand.nextInt(300) == 0 && this.world.getBlockState(new BlockPos(MathHelper.floor(this.posX), MathHelper.floor(this.posY) - 1, MathHelper.floor(this.posZ))).getBlock() == Blocks.GRASS) + { + this.setEatingHaystack(true); + } + + if (this.isEatingHaystack() && ++this.eatingCounter > 50) + { + this.eatingCounter = 0; + this.setEatingHaystack(false); + } + } + + this.followMother(); + } + } + + protected void followMother() + { + if (this.isBreeding() && this.isChild() && !this.isEatingHaystack()) + { + AbstractHorse abstracthorse = this.getClosestHorse(this, 16.0D); + + if (abstracthorse != null && this.getDistanceSq(abstracthorse) > 4.0D) + { + this.navigator.getPathToEntityLiving(abstracthorse); + } + } + } + + public boolean canEatGrass() + { + return true; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.openMouthCounter > 0 && ++this.openMouthCounter > 30) + { + this.openMouthCounter = 0; + this.setHorseWatchableBoolean(64, false); + } + + if (this.canPassengerSteer() && this.jumpRearingCounter > 0 && ++this.jumpRearingCounter > 20) + { + this.jumpRearingCounter = 0; + this.setRearing(false); + } + + if (this.tailCounter > 0 && ++this.tailCounter > 8) + { + this.tailCounter = 0; + } + + if (this.sprintCounter > 0) + { + ++this.sprintCounter; + + if (this.sprintCounter > 300) + { + this.sprintCounter = 0; + } + } + + this.prevHeadLean = this.headLean; + + if (this.isEatingHaystack()) + { + this.headLean += (1.0F - this.headLean) * 0.4F + 0.05F; + + if (this.headLean > 1.0F) + { + this.headLean = 1.0F; + } + } + else + { + this.headLean += (0.0F - this.headLean) * 0.4F - 0.05F; + + if (this.headLean < 0.0F) + { + this.headLean = 0.0F; + } + } + + this.prevRearingAmount = this.rearingAmount; + + if (this.isRearing()) + { + this.headLean = 0.0F; + this.prevHeadLean = this.headLean; + this.rearingAmount += (1.0F - this.rearingAmount) * 0.4F + 0.05F; + + if (this.rearingAmount > 1.0F) + { + this.rearingAmount = 1.0F; + } + } + else + { + this.allowStandSliding = false; + this.rearingAmount += (0.8F * this.rearingAmount * this.rearingAmount * this.rearingAmount - this.rearingAmount) * 0.6F - 0.05F; + + if (this.rearingAmount < 0.0F) + { + this.rearingAmount = 0.0F; + } + } + + this.prevMouthOpenness = this.mouthOpenness; + + if (this.getHorseWatchableBoolean(64)) + { + this.mouthOpenness += (1.0F - this.mouthOpenness) * 0.7F + 0.05F; + + if (this.mouthOpenness > 1.0F) + { + this.mouthOpenness = 1.0F; + } + } + else + { + this.mouthOpenness += (0.0F - this.mouthOpenness) * 0.7F - 0.05F; + + if (this.mouthOpenness < 0.0F) + { + this.mouthOpenness = 0.0F; + } + } + } + + private void openHorseMouth() + { + if (!this.world.isRemote) + { + this.openMouthCounter = 1; + this.setHorseWatchableBoolean(64, true); + } + } + + public void setEatingHaystack(boolean p_110227_1_) + { + this.setHorseWatchableBoolean(16, p_110227_1_); + } + + public void setRearing(boolean rearing) + { + if (rearing) + { + this.setEatingHaystack(false); + } + + this.setHorseWatchableBoolean(32, rearing); + } + + private void makeHorseRear() + { + if (this.canPassengerSteer()) + { + this.jumpRearingCounter = 1; + this.setRearing(true); + } + } + + public void makeMad() + { + this.makeHorseRear(); + SoundEvent soundevent = this.getAngrySound(); + + if (soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), this.getSoundPitch()); + } + } + + public boolean setTamedBy(EntityPlayer player) + { + this.setOwnerUniqueId(player.getUniqueID()); + this.setHorseTamed(true); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.TAME_ANIMAL.trigger((EntityPlayerMP)player, this); + } + + this.world.setEntityState(this, (byte)7); + return true; + } + + public void travel(float strafe, float vertical, float forward) + { + if (this.isBeingRidden() && this.canBeSteered() && this.isHorseSaddled()) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)this.getControllingPassenger(); + this.rotationYaw = entitylivingbase.rotationYaw; + this.prevRotationYaw = this.rotationYaw; + this.rotationPitch = entitylivingbase.rotationPitch * 0.5F; + this.setRotation(this.rotationYaw, this.rotationPitch); + this.renderYawOffset = this.rotationYaw; + this.rotationYawHead = this.renderYawOffset; + strafe = entitylivingbase.moveStrafing * 0.5F; + forward = entitylivingbase.moveForward; + + if (forward <= 0.0F) + { + forward *= 0.25F; + this.gallopTime = 0; + } + + if (this.onGround && this.jumpPower == 0.0F && this.isRearing() && !this.allowStandSliding) + { + strafe = 0.0F; + forward = 0.0F; + } + + if (this.jumpPower > 0.0F && !this.isHorseJumping() && this.onGround) + { + this.motionY = this.getHorseJumpStrength() * (double)this.jumpPower; + + if (this.isPotionActive(MobEffects.JUMP_BOOST)) + { + this.motionY += (double)((float)(this.getActivePotionEffect(MobEffects.JUMP_BOOST).getAmplifier() + 1) * 0.1F); + } + + this.setHorseJumping(true); + this.isAirBorne = true; + + if (forward > 0.0F) + { + float f = MathHelper.sin(this.rotationYaw * 0.017453292F); + float f1 = MathHelper.cos(this.rotationYaw * 0.017453292F); + this.motionX += (double)(-0.4F * f * this.jumpPower); + this.motionZ += (double)(0.4F * f1 * this.jumpPower); + this.playSound(SoundEvents.ENTITY_HORSE_JUMP, 0.4F, 1.0F); + } + + this.jumpPower = 0.0F; + } + + this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F; + + if (this.canPassengerSteer()) + { + this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue()); + super.travel(strafe, vertical, forward); + } + else if (entitylivingbase instanceof EntityPlayer) + { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + if (this.onGround) + { + this.jumpPower = 0.0F; + this.setHorseJumping(false); + } + + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.posX - this.prevPosX; + double d0 = this.posZ - this.prevPosZ; + float f2 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; + + if (f2 > 1.0F) + { + f2 = 1.0F; + } + + this.limbSwingAmount += (f2 - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } + else + { + this.jumpMovementFactor = 0.02F; + super.travel(strafe, vertical, forward); + } + } + + public static void registerFixesAbstractHorse(DataFixer fixer, Class entityClass) + { + EntityLiving.registerFixesMob(fixer, entityClass); + fixer.registerWalker(FixTypes.ENTITY, new ItemStackData(entityClass, new String[] {"SaddleItem"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("EatingHaystack", this.isEatingHaystack()); + compound.setBoolean("Bred", this.isBreeding()); + compound.setInteger("Temper", this.getTemper()); + compound.setBoolean("Tame", this.isTame()); + + if (this.getOwnerUniqueId() != null) + { + compound.setString("OwnerUUID", this.getOwnerUniqueId().toString()); + } + + if (!this.horseChest.getStackInSlot(0).isEmpty()) + { + compound.setTag("SaddleItem", this.horseChest.getStackInSlot(0).writeToNBT(new NBTTagCompound())); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setEatingHaystack(compound.getBoolean("EatingHaystack")); + this.setBreeding(compound.getBoolean("Bred")); + this.setTemper(compound.getInteger("Temper")); + this.setHorseTamed(compound.getBoolean("Tame")); + String s; + + if (compound.hasKey("OwnerUUID", 8)) + { + s = compound.getString("OwnerUUID"); + } + else + { + String s1 = compound.getString("Owner"); + s = PreYggdrasilConverter.convertMobOwnerIfNeeded(this.getServer(), s1); + } + + if (!s.isEmpty()) + { + this.setOwnerUniqueId(UUID.fromString(s)); + } + + IAttributeInstance iattributeinstance = this.getAttributeMap().getAttributeInstanceByName("Speed"); + + if (iattributeinstance != null) + { + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(iattributeinstance.getBaseValue() * 0.25D); + } + + if (compound.hasKey("SaddleItem", 10)) + { + ItemStack itemstack = new ItemStack(compound.getCompoundTag("SaddleItem")); + + if (itemstack.getItem() == Items.SADDLE) + { + this.horseChest.setInventorySlotContents(0, itemstack); + } + } + + this.updateHorseSlots(); + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + return false; + } + + /** + * Return true if the horse entity ready to mate. (no rider, not riding, tame, adult, not steril...) + */ + protected boolean canMate() + { + return !this.isBeingRidden() && !this.isRiding() && this.isTame() && !this.isChild() && this.getHealth() >= this.getMaxHealth() && this.isInLove(); + } + + @Nullable + public EntityAgeable createChild(EntityAgeable ageable) + { + return null; + } + + protected void setOffspringAttributes(EntityAgeable p_190681_1_, AbstractHorse p_190681_2_) + { + double d0 = this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).getBaseValue() + p_190681_1_.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).getBaseValue() + (double)this.getModifiedMaxHealth(); + p_190681_2_.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(d0 / 3.0D); + double d1 = this.getEntityAttribute(JUMP_STRENGTH).getBaseValue() + p_190681_1_.getEntityAttribute(JUMP_STRENGTH).getBaseValue() + this.getModifiedJumpStrength(); + p_190681_2_.getEntityAttribute(JUMP_STRENGTH).setBaseValue(d1 / 3.0D); + double d2 = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getBaseValue() + p_190681_1_.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getBaseValue() + this.getModifiedMovementSpeed(); + p_190681_2_.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(d2 / 3.0D); + } + + /** + * returns true if all the conditions for steering the entity are met. For pigs, this is true if it is being ridden + * by a player and the player is holding a carrot-on-a-stick + */ + public boolean canBeSteered() + { + return this.getControllingPassenger() instanceof EntityLivingBase; + } + + @SideOnly(Side.CLIENT) + public float getGrassEatingAmount(float p_110258_1_) + { + return this.prevHeadLean + (this.headLean - this.prevHeadLean) * p_110258_1_; + } + + @SideOnly(Side.CLIENT) + public float getRearingAmount(float p_110223_1_) + { + return this.prevRearingAmount + (this.rearingAmount - this.prevRearingAmount) * p_110223_1_; + } + + @SideOnly(Side.CLIENT) + public float getMouthOpennessAngle(float p_110201_1_) + { + return this.prevMouthOpenness + (this.mouthOpenness - this.prevMouthOpenness) * p_110201_1_; + } + + @SideOnly(Side.CLIENT) + public void setJumpPower(int jumpPowerIn) + { + if (this.isHorseSaddled()) + { + if (jumpPowerIn < 0) + { + jumpPowerIn = 0; + } + else + { + this.allowStandSliding = true; + this.makeHorseRear(); + } + + if (jumpPowerIn >= 90) + { + this.jumpPower = 1.0F; + } + else + { + this.jumpPower = 0.4F + 0.4F * (float)jumpPowerIn / 90.0F; + } + } + } + + public boolean canJump() + { + return this.isHorseSaddled(); + } + + public void handleStartJump(int p_184775_1_) + { + this.allowStandSliding = true; + this.makeHorseRear(); + } + + public void handleStopJump() + { + } + + /** + * "Spawns particles for the horse entity. par1 tells whether to spawn hearts. If it is false, it spawns smoke." + */ + @SideOnly(Side.CLIENT) + protected void spawnHorseParticles(boolean p_110216_1_) + { + EnumParticleTypes enumparticletypes = p_110216_1_ ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL; + + for (int i = 0; i < 7; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(enumparticletypes, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d0, d1, d2); + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 7) + { + this.spawnHorseParticles(true); + } + else if (id == 6) + { + this.spawnHorseParticles(false); + } + else + { + super.handleStatusUpdate(id); + } + } + + public void updatePassenger(Entity passenger) + { + super.updatePassenger(passenger); + + if (passenger instanceof EntityLiving) + { + EntityLiving entityliving = (EntityLiving)passenger; + this.renderYawOffset = entityliving.renderYawOffset; + } + + if (this.prevRearingAmount > 0.0F) + { + float f3 = MathHelper.sin(this.renderYawOffset * 0.017453292F); + float f = MathHelper.cos(this.renderYawOffset * 0.017453292F); + float f1 = 0.7F * this.prevRearingAmount; + float f2 = 0.15F * this.prevRearingAmount; + passenger.setPosition(this.posX + (double)(f1 * f3), this.posY + this.getMountedYOffset() + passenger.getYOffset() + (double)f2, this.posZ - (double)(f1 * f)); + + if (passenger instanceof EntityLivingBase) + { + ((EntityLivingBase)passenger).renderYawOffset = this.renderYawOffset; + } + } + } + + /** + * Returns randomized max health + */ + protected float getModifiedMaxHealth() + { + return 15.0F + (float)this.rand.nextInt(8) + (float)this.rand.nextInt(9); + } + + /** + * Returns randomized jump strength + */ + protected double getModifiedJumpStrength() + { + return 0.4000000059604645D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D; + } + + /** + * Returns randomized movement speed + */ + protected double getModifiedMovementSpeed() + { + return (0.44999998807907104D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D) * 0.25D; + } + + /** + * Returns true if this entity should move as if it were on a ladder (either because it's actually on a ladder, or + * for AI reasons) + */ + public boolean isOnLadder() + { + return false; + } + + public float getEyeHeight() + { + return this.height; + } + + public boolean wearsArmor() + { + return false; + } + + public boolean isArmor(ItemStack stack) + { + return false; + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + int i = inventorySlot - 400; + + if (i >= 0 && i < 2 && i < this.horseChest.getSizeInventory()) + { + if (i == 0 && itemStackIn.getItem() != Items.SADDLE) + { + return false; + } + else if (i != 1 || this.wearsArmor() && this.isArmor(itemStackIn)) + { + this.horseChest.setInventorySlotContents(i, itemStackIn); + this.updateHorseSlots(); + return true; + } + else + { + return false; + } + } + else + { + int j = inventorySlot - 500 + 2; + + if (j >= 2 && j < this.horseChest.getSizeInventory()) + { + this.horseChest.setInventorySlotContents(j, itemStackIn); + return true; + } + else + { + return false; + } + } + } + + /** + * For vehicles, the first passenger is generally considered the controller and "drives" the vehicle. For example, + * Pigs, Horses, and Boats are generally "steered" by the controlling passenger. + */ + @Nullable + public Entity getControllingPassenger() + { + return this.getPassengers().isEmpty() ? null : (Entity)this.getPassengers().get(0); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + + if (this.rand.nextInt(5) == 0) + { + this.setGrowingAge(-24000); + } + + return livingdata; + } + + // FORGE + private net.minecraftforge.items.IItemHandler itemHandler = null; // Initialized by initHorseChest above. + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + if (capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return (T) itemHandler; + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityAmbientCreature.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityAmbientCreature.java new file mode 100644 index 0000000..05f8b30 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityAmbientCreature.java @@ -0,0 +1,18 @@ +package net.minecraft.entity.passive; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public abstract class EntityAmbientCreature extends EntityLiving implements IAnimals +{ + public EntityAmbientCreature(World worldIn) + { + super(worldIn); + } + + public boolean canBeLeashedTo(EntityPlayer player) + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityAnimal.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityAnimal.java new file mode 100644 index 0000000..4bc2eb8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityAnimal.java @@ -0,0 +1,282 @@ +package net.minecraft.entity.passive; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityAnimal extends EntityAgeable implements IAnimals +{ + protected Block spawnableBlock = Blocks.GRASS; + private int inLove; + private UUID playerInLove; + + public EntityAnimal(World worldIn) + { + super(worldIn); + } + + protected void updateAITasks() + { + if (this.getGrowingAge() != 0) + { + this.inLove = 0; + } + + super.updateAITasks(); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.getGrowingAge() != 0) + { + this.inLove = 0; + } + + if (this.inLove > 0) + { + --this.inLove; + + if (this.inLove % 10 == 0) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(EnumParticleTypes.HEART, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d0, d1, d2); + } + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + this.inLove = 0; + return super.attackEntityFrom(source, amount); + } + } + + public float getBlockPathWeight(BlockPos pos) + { + return this.world.getBlockState(pos.down()).getBlock() == this.spawnableBlock ? 10.0F : this.world.getLightBrightness(pos) - 0.5F; + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("InLove", this.inLove); + + if (this.playerInLove != null) + { + compound.setUniqueId("LoveCause", this.playerInLove); + } + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return 0.14D; + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.inLove = compound.getInteger("InLove"); + this.playerInLove = compound.hasUniqueId("LoveCause") ? compound.getUniqueId("LoveCause") : null; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.getEntityBoundingBox().minY); + int k = MathHelper.floor(this.posZ); + BlockPos blockpos = new BlockPos(i, j, k); + return this.world.getBlockState(blockpos.down()).getBlock() == this.spawnableBlock && this.world.getLight(blockpos) > 8 && super.getCanSpawnHere(); + } + + /** + * Get number of ticks, at least during which the living entity will be silent. + */ + public int getTalkInterval() + { + return 120; + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return false; + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + return 1 + this.world.rand.nextInt(3); + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return stack.getItem() == Items.WHEAT; + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!itemstack.isEmpty()) + { + if (this.isBreedingItem(itemstack) && this.getGrowingAge() == 0 && this.inLove <= 0) + { + this.consumeItemFromStack(player, itemstack); + this.setInLove(player); + return true; + } + + if (this.isChild() && this.isBreedingItem(itemstack)) + { + this.consumeItemFromStack(player, itemstack); + this.ageUp((int)((float)(-this.getGrowingAge() / 20) * 0.1F), true); + return true; + } + } + + return super.processInteract(player, hand); + } + + /** + * Decreases ItemStack size by one + */ + protected void consumeItemFromStack(EntityPlayer player, ItemStack stack) + { + if (!player.capabilities.isCreativeMode) + { + stack.shrink(1); + } + } + + public void setInLove(@Nullable EntityPlayer player) + { + this.inLove = 600; + + if (player != null) + { + this.playerInLove = player.getUniqueID(); + } + + this.world.setEntityState(this, (byte)18); + } + + @Nullable + public EntityPlayerMP getLoveCause() + { + if (this.playerInLove == null) + { + return null; + } + else + { + EntityPlayer entityplayer = this.world.getPlayerEntityByUUID(this.playerInLove); + return entityplayer instanceof EntityPlayerMP ? (EntityPlayerMP)entityplayer : null; + } + } + + /** + * Returns if the entity is currently in 'love mode'. + */ + public boolean isInLove() + { + return this.inLove > 0; + } + + public void resetInLove() + { + this.inLove = 0; + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + if (otherAnimal == this) + { + return false; + } + else if (otherAnimal.getClass() != this.getClass()) + { + return false; + } + else + { + return this.isInLove() && otherAnimal.isInLove(); + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 18) + { + for (int i = 0; i < 7; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(EnumParticleTypes.HEART, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d0, d1, d2); + } + } + else + { + super.handleStatusUpdate(id); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityBat.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityBat.java new file mode 100644 index 0000000..2274a4c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityBat.java @@ -0,0 +1,305 @@ +package net.minecraft.entity.passive; + +import java.util.Calendar; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityBat extends EntityAmbientCreature +{ + private static final DataParameter HANGING = EntityDataManager.createKey(EntityBat.class, DataSerializers.BYTE); + /** Coordinates of where the bat spawned. */ + private BlockPos spawnPosition; + + public EntityBat(World worldIn) + { + super(worldIn); + this.setSize(0.5F, 0.9F); + this.setIsBatHanging(true); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(HANGING, Byte.valueOf((byte)0)); + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.1F; + } + + /** + * Gets the pitch of living sounds in living entities. + */ + protected float getSoundPitch() + { + return super.getSoundPitch() * 0.95F; + } + + @Nullable + public SoundEvent getAmbientSound() + { + return this.getIsBatHanging() && this.rand.nextInt(4) != 0 ? null : SoundEvents.ENTITY_BAT_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_BAT_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_BAT_DEATH; + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return false; + } + + protected void collideWithEntity(Entity entityIn) + { + } + + protected void collideWithNearbyEntities() + { + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(6.0D); + } + + public boolean getIsBatHanging() + { + return (((Byte)this.dataManager.get(HANGING)).byteValue() & 1) != 0; + } + + public void setIsBatHanging(boolean isHanging) + { + byte b0 = ((Byte)this.dataManager.get(HANGING)).byteValue(); + + if (isHanging) + { + this.dataManager.set(HANGING, Byte.valueOf((byte)(b0 | 1))); + } + else + { + this.dataManager.set(HANGING, Byte.valueOf((byte)(b0 & -2))); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.getIsBatHanging()) + { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.posY = (double)MathHelper.floor(this.posY) + 1.0D - (double)this.height; + } + else + { + this.motionY *= 0.6000000238418579D; + } + } + + protected void updateAITasks() + { + super.updateAITasks(); + BlockPos blockpos = new BlockPos(this); + BlockPos blockpos1 = blockpos.up(); + + if (this.getIsBatHanging()) + { + if (this.world.getBlockState(blockpos1).isNormalCube()) + { + if (this.rand.nextInt(200) == 0) + { + this.rotationYawHead = (float)this.rand.nextInt(360); + } + + if (this.world.getNearestPlayerNotCreative(this, 4.0D) != null) + { + this.setIsBatHanging(false); + this.world.playEvent((EntityPlayer)null, 1025, blockpos, 0); + } + } + else + { + this.setIsBatHanging(false); + this.world.playEvent((EntityPlayer)null, 1025, blockpos, 0); + } + } + else + { + if (this.spawnPosition != null && (!this.world.isAirBlock(this.spawnPosition) || this.spawnPosition.getY() < 1)) + { + this.spawnPosition = null; + } + + if (this.spawnPosition == null || this.rand.nextInt(30) == 0 || this.spawnPosition.distanceSq((double)((int)this.posX), (double)((int)this.posY), (double)((int)this.posZ)) < 4.0D) + { + this.spawnPosition = new BlockPos((int)this.posX + this.rand.nextInt(7) - this.rand.nextInt(7), (int)this.posY + this.rand.nextInt(6) - 2, (int)this.posZ + this.rand.nextInt(7) - this.rand.nextInt(7)); + } + + double d0 = (double)this.spawnPosition.getX() + 0.5D - this.posX; + double d1 = (double)this.spawnPosition.getY() + 0.1D - this.posY; + double d2 = (double)this.spawnPosition.getZ() + 0.5D - this.posZ; + this.motionX += (Math.signum(d0) * 0.5D - this.motionX) * 0.10000000149011612D; + this.motionY += (Math.signum(d1) * 0.699999988079071D - this.motionY) * 0.10000000149011612D; + this.motionZ += (Math.signum(d2) * 0.5D - this.motionZ) * 0.10000000149011612D; + float f = (float)(MathHelper.atan2(this.motionZ, this.motionX) * (180D / Math.PI)) - 90.0F; + float f1 = MathHelper.wrapDegrees(f - this.rotationYaw); + this.moveForward = 0.5F; + this.rotationYaw += f1; + + if (this.rand.nextInt(100) == 0 && this.world.getBlockState(blockpos1).isNormalCube()) + { + this.setIsBatHanging(true); + } + } + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + public void fall(float distance, float damageMultiplier) + { + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + } + + /** + * Return whether this entity should NOT trigger a pressure plate or a tripwire. + */ + public boolean doesEntityNotTriggerPressurePlate() + { + return true; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + if (!this.world.isRemote && this.getIsBatHanging()) + { + this.setIsBatHanging(false); + } + + return super.attackEntityFrom(source, amount); + } + } + + public static void registerFixesBat(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityBat.class); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.dataManager.set(HANGING, Byte.valueOf(compound.getByte("BatFlags"))); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setByte("BatFlags", ((Byte)this.dataManager.get(HANGING)).byteValue()); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + BlockPos blockpos = new BlockPos(this.posX, this.getEntityBoundingBox().minY, this.posZ); + + if (blockpos.getY() >= this.world.getSeaLevel()) + { + return false; + } + else + { + int i = this.world.getLightFromNeighbors(blockpos); + int j = 4; + + if (this.isDateAroundHalloween(this.world.getCurrentDate())) + { + j = 7; + } + else if (this.rand.nextBoolean()) + { + return false; + } + + return i > this.rand.nextInt(j) ? false : super.getCanSpawnHere(); + } + } + + private boolean isDateAroundHalloween(Calendar p_175569_1_) + { + return p_175569_1_.get(2) + 1 == 10 && p_175569_1_.get(5) >= 20 || p_175569_1_.get(2) + 1 == 11 && p_175569_1_.get(5) <= 3; + } + + public float getEyeHeight() + { + return this.height / 2.0F; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_BAT; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityChicken.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityChicken.java new file mode 100644 index 0000000..1625d0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityChicken.java @@ -0,0 +1,233 @@ +package net.minecraft.entity.passive; + +import com.google.common.collect.Sets; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITempt; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.pathfinding.PathNodeType; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityChicken extends EntityAnimal +{ + private static final Set TEMPTATION_ITEMS = Sets.newHashSet(Items.WHEAT_SEEDS, Items.MELON_SEEDS, Items.PUMPKIN_SEEDS, Items.BEETROOT_SEEDS); + public float wingRotation; + public float destPos; + public float oFlapSpeed; + public float oFlap; + public float wingRotDelta = 1.0F; + /** The time until the next egg is spawned. */ + public int timeUntilNextEgg; + public boolean chickenJockey; + + public EntityChicken(World worldIn) + { + super(worldIn); + this.setSize(0.4F, 0.7F); + this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000; + this.setPathPriority(PathNodeType.WATER, 0.0F); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 1.4D)); + this.tasks.addTask(2, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(3, new EntityAITempt(this, 1.0D, false, TEMPTATION_ITEMS)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 1.1D)); + this.tasks.addTask(5, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + } + + public float getEyeHeight() + { + return this.height; + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(4.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + this.oFlap = this.wingRotation; + this.oFlapSpeed = this.destPos; + this.destPos = (float)((double)this.destPos + (double)(this.onGround ? -1 : 4) * 0.3D); + this.destPos = MathHelper.clamp(this.destPos, 0.0F, 1.0F); + + if (!this.onGround && this.wingRotDelta < 1.0F) + { + this.wingRotDelta = 1.0F; + } + + this.wingRotDelta = (float)((double)this.wingRotDelta * 0.9D); + + if (!this.onGround && this.motionY < 0.0D) + { + this.motionY *= 0.6D; + } + + this.wingRotation += this.wingRotDelta * 2.0F; + + if (!this.world.isRemote && !this.isChild() && !this.isChickenJockey() && --this.timeUntilNextEgg <= 0) + { + this.playSound(SoundEvents.ENTITY_CHICKEN_EGG, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.dropItem(Items.EGG, 1); + this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000; + } + } + + public void fall(float distance, float damageMultiplier) + { + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_CHICKEN_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_CHICKEN_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_CHICKEN_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_CHICKEN_STEP, 0.15F, 1.0F); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_CHICKEN; + } + + public EntityChicken createChild(EntityAgeable ageable) + { + return new EntityChicken(this.world); + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return TEMPTATION_ITEMS.contains(stack.getItem()); + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + return this.isChickenJockey() ? 10 : super.getExperiencePoints(player); + } + + public static void registerFixesChicken(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityChicken.class); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.chickenJockey = compound.getBoolean("IsChickenJockey"); + + if (compound.hasKey("EggLayTime")) + { + this.timeUntilNextEgg = compound.getInteger("EggLayTime"); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("IsChickenJockey", this.chickenJockey); + compound.setInteger("EggLayTime", this.timeUntilNextEgg); + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return this.isChickenJockey() && !this.isBeingRidden(); + } + + public void updatePassenger(Entity passenger) + { + super.updatePassenger(passenger); + float f = MathHelper.sin(this.renderYawOffset * 0.017453292F); + float f1 = MathHelper.cos(this.renderYawOffset * 0.017453292F); + float f2 = 0.1F; + float f3 = 0.0F; + passenger.setPosition(this.posX + (double)(0.1F * f), this.posY + (double)(this.height * 0.5F) + passenger.getYOffset() + 0.0D, this.posZ - (double)(0.1F * f1)); + + if (passenger instanceof EntityLivingBase) + { + ((EntityLivingBase)passenger).renderYawOffset = this.renderYawOffset; + } + } + + /** + * Determines if this chicken is a jokey with a zombie riding it. + */ + public boolean isChickenJockey() + { + return this.chickenJockey; + } + + /** + * Sets whether this chicken is a jockey or not. + */ + public void setChickenJockey(boolean jockey) + { + this.chickenJockey = jockey; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityCow.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityCow.java new file mode 100644 index 0000000..bf5a680 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityCow.java @@ -0,0 +1,130 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITempt; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityCow extends EntityAnimal +{ + public EntityCow(World worldIn) + { + super(worldIn); + this.setSize(0.9F, 1.4F); + } + + public static void registerFixesCow(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityCow.class); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 2.0D)); + this.tasks.addTask(2, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(3, new EntityAITempt(this, 1.25D, Items.WHEAT, false)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 1.25D)); + this.tasks.addTask(5, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.20000000298023224D); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_COW_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_COW_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_COW_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_COW_STEP, 0.15F, 1.0F); + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.4F; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_COW; + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.BUCKET && !player.capabilities.isCreativeMode && !this.isChild()) + { + player.playSound(SoundEvents.ENTITY_COW_MILK, 1.0F, 1.0F); + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + player.setHeldItem(hand, new ItemStack(Items.MILK_BUCKET)); + } + else if (!player.inventory.addItemStackToInventory(new ItemStack(Items.MILK_BUCKET))) + { + player.dropItem(new ItemStack(Items.MILK_BUCKET), false); + } + + return true; + } + else + { + return super.processInteract(player, hand); + } + } + + public EntityCow createChild(EntityAgeable ageable) + { + return new EntityCow(this.world); + } + + public float getEyeHeight() + { + return this.isChild() ? this.height : 1.3F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityDonkey.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityDonkey.java new file mode 100644 index 0000000..863d1d2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityDonkey.java @@ -0,0 +1,74 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityDonkey extends AbstractChestHorse +{ + public EntityDonkey(World worldIn) + { + super(worldIn); + } + + public static void registerFixesDonkey(DataFixer fixer) + { + AbstractChestHorse.registerFixesAbstractChestHorse(fixer, EntityDonkey.class); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_DONKEY; + } + + protected SoundEvent getAmbientSound() + { + super.getAmbientSound(); + return SoundEvents.ENTITY_DONKEY_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + super.getDeathSound(); + return SoundEvents.ENTITY_DONKEY_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + super.getHurtSound(damageSourceIn); + return SoundEvents.ENTITY_DONKEY_HURT; + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + if (otherAnimal == this) + { + return false; + } + else if (!(otherAnimal instanceof EntityDonkey) && !(otherAnimal instanceof EntityHorse)) + { + return false; + } + else + { + return this.canMate() && ((AbstractHorse)otherAnimal).canMate(); + } + } + + public EntityAgeable createChild(EntityAgeable ageable) + { + AbstractHorse abstracthorse = (AbstractHorse)(ageable instanceof EntityHorse ? new EntityMule(this.world) : new EntityDonkey(this.world)); + this.setOffspringAttributes(ageable, abstracthorse); + return abstracthorse; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityFlying.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityFlying.java new file mode 100644 index 0000000..8b1a388 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityFlying.java @@ -0,0 +1,5 @@ +package net.minecraft.entity.passive; + +public interface EntityFlying +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityHorse.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityHorse.java new file mode 100644 index 0000000..20e79d7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityHorse.java @@ -0,0 +1,449 @@ +package net.minecraft.entity.passive; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.SoundType; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityHorse extends AbstractHorse +{ + private static final UUID ARMOR_MODIFIER_UUID = UUID.fromString("556E1665-8B10-40C8-8F9D-CF9B1667F295"); + private static final DataParameter HORSE_VARIANT = EntityDataManager.createKey(EntityHorse.class, DataSerializers.VARINT); + private static final DataParameter HORSE_ARMOR = EntityDataManager.createKey(EntityHorse.class, DataSerializers.VARINT); + private static final DataParameter HORSE_ARMOR_STACK = EntityDataManager.createKey(EntityHorse.class, DataSerializers.ITEM_STACK); + private static final String[] HORSE_TEXTURES = new String[] {"textures/entity/horse/horse_white.png", "textures/entity/horse/horse_creamy.png", "textures/entity/horse/horse_chestnut.png", "textures/entity/horse/horse_brown.png", "textures/entity/horse/horse_black.png", "textures/entity/horse/horse_gray.png", "textures/entity/horse/horse_darkbrown.png"}; + private static final String[] HORSE_TEXTURES_ABBR = new String[] {"hwh", "hcr", "hch", "hbr", "hbl", "hgr", "hdb"}; + private static final String[] HORSE_MARKING_TEXTURES = new String[] {null, "textures/entity/horse/horse_markings_white.png", "textures/entity/horse/horse_markings_whitefield.png", "textures/entity/horse/horse_markings_whitedots.png", "textures/entity/horse/horse_markings_blackdots.png"}; + private static final String[] HORSE_MARKING_TEXTURES_ABBR = new String[] {"", "wo_", "wmo", "wdo", "bdo"}; + private String texturePrefix; + private final String[] horseTexturesArray = new String[3]; + + public EntityHorse(World worldIn) + { + super(worldIn); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(HORSE_VARIANT, Integer.valueOf(0)); + this.dataManager.register(HORSE_ARMOR, Integer.valueOf(HorseArmorType.NONE.getOrdinal())); + this.dataManager.register(HORSE_ARMOR_STACK, ItemStack.EMPTY); + } + + public static void registerFixesHorse(DataFixer fixer) + { + AbstractHorse.registerFixesAbstractHorse(fixer, EntityHorse.class); + fixer.registerWalker(FixTypes.ENTITY, new ItemStackData(EntityHorse.class, new String[] {"ArmorItem"})); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Variant", this.getHorseVariant()); + + if (!this.horseChest.getStackInSlot(1).isEmpty()) + { + compound.setTag("ArmorItem", this.horseChest.getStackInSlot(1).writeToNBT(new NBTTagCompound())); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setHorseVariant(compound.getInteger("Variant")); + + if (compound.hasKey("ArmorItem", 10)) + { + ItemStack itemstack = new ItemStack(compound.getCompoundTag("ArmorItem")); + + if (!itemstack.isEmpty() && isArmor(itemstack)) + { + this.horseChest.setInventorySlotContents(1, itemstack); + } + } + + this.updateHorseSlots(); + } + + public void setHorseVariant(int variant) + { + this.dataManager.set(HORSE_VARIANT, Integer.valueOf(variant)); + this.resetTexturePrefix(); + } + + public int getHorseVariant() + { + return ((Integer)this.dataManager.get(HORSE_VARIANT)).intValue(); + } + + private void resetTexturePrefix() + { + this.texturePrefix = null; + } + + @SideOnly(Side.CLIENT) + private void setHorseTexturePaths() + { + int i = this.getHorseVariant(); + int j = (i & 255) % 7; + int k = ((i & 65280) >> 8) % 5; + ItemStack armorStack = this.dataManager.get(HORSE_ARMOR_STACK); + String texture = !armorStack.isEmpty() ? armorStack.getItem().getHorseArmorTexture(this, armorStack) : HorseArmorType.getByOrdinal(this.dataManager.get(HORSE_ARMOR)).getTextureName(); //If armorStack is empty, the server is vanilla so the texture should be determined the vanilla way + this.horseTexturesArray[0] = HORSE_TEXTURES[j]; + this.horseTexturesArray[1] = HORSE_MARKING_TEXTURES[k]; + this.horseTexturesArray[2] = texture; + this.texturePrefix = "horse/" + HORSE_TEXTURES_ABBR[j] + HORSE_MARKING_TEXTURES_ABBR[k] + texture; + } + + @SideOnly(Side.CLIENT) + public String getHorseTexture() + { + if (this.texturePrefix == null) + { + this.setHorseTexturePaths(); + } + + return this.texturePrefix; + } + + @SideOnly(Side.CLIENT) + public String[] getVariantTexturePaths() + { + if (this.texturePrefix == null) + { + this.setHorseTexturePaths(); + } + + return this.horseTexturesArray; + } + + /** + * Updates the items in the saddle and armor slots of the horse's inventory. + */ + protected void updateHorseSlots() + { + super.updateHorseSlots(); + this.setHorseArmorStack(this.horseChest.getStackInSlot(1)); + } + + /** + * Set horse armor stack (for example: new ItemStack(Items.iron_horse_armor)) + */ + public void setHorseArmorStack(ItemStack itemStackIn) + { + HorseArmorType horsearmortype = HorseArmorType.getByItemStack(itemStackIn); + this.dataManager.set(HORSE_ARMOR, Integer.valueOf(horsearmortype.getOrdinal())); + this.dataManager.set(HORSE_ARMOR_STACK, itemStackIn); + this.resetTexturePrefix(); + + if (!this.world.isRemote) + { + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).removeModifier(ARMOR_MODIFIER_UUID); + int i = horsearmortype.getProtection(); + + if (i != 0) + { + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).applyModifier((new AttributeModifier(ARMOR_MODIFIER_UUID, "Horse armor bonus", (double)i, 0)).setSaved(false)); + } + } + } + + public HorseArmorType getHorseArmorType() + { + HorseArmorType armor = HorseArmorType.getByItemStack(this.dataManager.get(HORSE_ARMOR_STACK)); //First check the Forge armor DataParameter + if (armor == HorseArmorType.NONE) armor = HorseArmorType.getByOrdinal(this.dataManager.get(HORSE_ARMOR)); //If the Forge armor DataParameter returns NONE, fallback to the vanilla armor DataParameter. This is necessary to prevent issues with Forge clients connected to vanilla servers. + return armor; + } + + /** + * Called by InventoryBasic.onInventoryChanged() on a array that is never filled. + */ + public void onInventoryChanged(IInventory invBasic) + { + HorseArmorType horsearmortype = this.getHorseArmorType(); + super.onInventoryChanged(invBasic); + HorseArmorType horsearmortype1 = this.getHorseArmorType(); + + if (this.ticksExisted > 20 && horsearmortype != horsearmortype1 && horsearmortype1 != HorseArmorType.NONE) + { + this.playSound(SoundEvents.ENTITY_HORSE_ARMOR, 0.5F, 1.0F); + } + } + + protected void playGallopSound(SoundType p_190680_1_) + { + super.playGallopSound(p_190680_1_); + + if (this.rand.nextInt(10) == 0) + { + this.playSound(SoundEvents.ENTITY_HORSE_BREATHE, p_190680_1_.getVolume() * 0.6F, p_190680_1_.getPitch()); + } + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue((double)this.getModifiedMaxHealth()); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(this.getModifiedMovementSpeed()); + this.getEntityAttribute(JUMP_STRENGTH).setBaseValue(this.getModifiedJumpStrength()); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote && this.dataManager.isDirty()) + { + this.dataManager.setClean(); + this.resetTexturePrefix(); + } + ItemStack armor = this.horseChest.getStackInSlot(1); + if (isArmor(armor)) armor.getItem().onHorseArmorTick(world, this, armor); + } + + protected SoundEvent getAmbientSound() + { + super.getAmbientSound(); + return SoundEvents.ENTITY_HORSE_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + super.getDeathSound(); + return SoundEvents.ENTITY_HORSE_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + super.getHurtSound(damageSourceIn); + return SoundEvents.ENTITY_HORSE_HURT; + } + + protected SoundEvent getAngrySound() + { + super.getAngrySound(); + return SoundEvents.ENTITY_HORSE_ANGRY; + } + + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_HORSE; + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + boolean flag = !itemstack.isEmpty(); + + if (flag && itemstack.getItem() == Items.SPAWN_EGG) + { + return super.processInteract(player, hand); + } + else + { + if (!this.isChild()) + { + if (this.isTame() && player.isSneaking()) + { + this.openGUI(player); + return true; + } + + if (this.isBeingRidden()) + { + return super.processInteract(player, hand); + } + } + + if (flag) + { + if (this.handleEating(player, itemstack)) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return true; + } + + if (itemstack.interactWithEntity(player, this, hand)) + { + return true; + } + + if (!this.isTame()) + { + this.makeMad(); + return true; + } + + boolean flag1 = HorseArmorType.getByItemStack(itemstack) != HorseArmorType.NONE; + boolean flag2 = !this.isChild() && !this.isHorseSaddled() && itemstack.getItem() == Items.SADDLE; + + if (flag1 || flag2) + { + this.openGUI(player); + return true; + } + } + + if (this.isChild()) + { + return super.processInteract(player, hand); + } + else + { + this.mountTo(player); + return true; + } + } + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + if (otherAnimal == this) + { + return false; + } + else if (!(otherAnimal instanceof EntityDonkey) && !(otherAnimal instanceof EntityHorse)) + { + return false; + } + else + { + return this.canMate() && ((AbstractHorse)otherAnimal).canMate(); + } + } + + public EntityAgeable createChild(EntityAgeable ageable) + { + AbstractHorse abstracthorse; + + if (ageable instanceof EntityDonkey) + { + abstracthorse = new EntityMule(this.world); + } + else + { + EntityHorse entityhorse = (EntityHorse)ageable; + abstracthorse = new EntityHorse(this.world); + int j = this.rand.nextInt(9); + int i; + + if (j < 4) + { + i = this.getHorseVariant() & 255; + } + else if (j < 8) + { + i = entityhorse.getHorseVariant() & 255; + } + else + { + i = this.rand.nextInt(7); + } + + int k = this.rand.nextInt(5); + + if (k < 2) + { + i = i | this.getHorseVariant() & 65280; + } + else if (k < 4) + { + i = i | entityhorse.getHorseVariant() & 65280; + } + else + { + i = i | this.rand.nextInt(5) << 8 & 65280; + } + + ((EntityHorse)abstracthorse).setHorseVariant(i); + } + + this.setOffspringAttributes(ageable, abstracthorse); + return abstracthorse; + } + + public boolean wearsArmor() + { + return true; + } + + public boolean isArmor(ItemStack stack) + { + return HorseArmorType.isHorseArmor(stack); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + int i; + + if (livingdata instanceof EntityHorse.GroupData) + { + i = ((EntityHorse.GroupData)livingdata).variant; + } + else + { + i = this.rand.nextInt(7); + livingdata = new EntityHorse.GroupData(i); + } + + this.setHorseVariant(i | this.rand.nextInt(5) << 8); + return livingdata; + } + + public static class GroupData implements IEntityLivingData + { + public int variant; + + public GroupData(int variantIn) + { + this.variant = variantIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityLlama.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityLlama.java new file mode 100644 index 0000000..a047c45 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityLlama.java @@ -0,0 +1,614 @@ +package net.minecraft.entity.passive; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IRangedAttackMob; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackRanged; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILlamaFollowCaravan; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAIRunAroundLikeCrazy; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityLlamaSpit; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityLlama extends AbstractChestHorse implements IRangedAttackMob +{ + private static final DataParameter DATA_STRENGTH_ID = EntityDataManager.createKey(EntityLlama.class, DataSerializers.VARINT); + private static final DataParameter DATA_COLOR_ID = EntityDataManager.createKey(EntityLlama.class, DataSerializers.VARINT); + private static final DataParameter DATA_VARIANT_ID = EntityDataManager.createKey(EntityLlama.class, DataSerializers.VARINT); + private boolean didSpit; + @Nullable + private EntityLlama caravanHead; + @Nullable + private EntityLlama caravanTail; + + public EntityLlama(World worldIn) + { + super(worldIn); + this.setSize(0.9F, 1.87F); + } + + private void setStrength(int strengthIn) + { + this.dataManager.set(DATA_STRENGTH_ID, Integer.valueOf(Math.max(1, Math.min(5, strengthIn)))); + } + + private void setRandomStrength() + { + int i = this.rand.nextFloat() < 0.04F ? 5 : 3; + this.setStrength(1 + this.rand.nextInt(i)); + } + + public int getStrength() + { + return ((Integer)this.dataManager.get(DATA_STRENGTH_ID)).intValue(); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Variant", this.getVariant()); + compound.setInteger("Strength", this.getStrength()); + + if (!this.horseChest.getStackInSlot(1).isEmpty()) + { + compound.setTag("DecorItem", this.horseChest.getStackInSlot(1).writeToNBT(new NBTTagCompound())); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.setStrength(compound.getInteger("Strength")); + super.readEntityFromNBT(compound); + this.setVariant(compound.getInteger("Variant")); + + if (compound.hasKey("DecorItem", 10)) + { + this.horseChest.setInventorySlotContents(1, new ItemStack(compound.getCompoundTag("DecorItem"))); + } + + this.updateHorseSlots(); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIRunAroundLikeCrazy(this, 1.2D)); + this.tasks.addTask(2, new EntityAILlamaFollowCaravan(this, 2.0999999046325684D)); + this.tasks.addTask(3, new EntityAIAttackRanged(this, 1.25D, 40, 20.0F)); + this.tasks.addTask(3, new EntityAIPanic(this, 1.2D)); + this.tasks.addTask(4, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(5, new EntityAIFollowParent(this, 1.0D)); + this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 0.7D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityLlama.AIHurtByTarget(this)); + this.targetTasks.addTask(2, new EntityLlama.AIDefendTarget(this)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(40.0D); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(DATA_STRENGTH_ID, Integer.valueOf(0)); + this.dataManager.register(DATA_COLOR_ID, Integer.valueOf(-1)); + this.dataManager.register(DATA_VARIANT_ID, Integer.valueOf(0)); + } + + public int getVariant() + { + return MathHelper.clamp(((Integer)this.dataManager.get(DATA_VARIANT_ID)).intValue(), 0, 3); + } + + public void setVariant(int variantIn) + { + this.dataManager.set(DATA_VARIANT_ID, Integer.valueOf(variantIn)); + } + + protected int getInventorySize() + { + return this.hasChest() ? 2 + 3 * this.getInventoryColumns() : super.getInventorySize(); + } + + public void updatePassenger(Entity passenger) + { + if (this.isPassenger(passenger)) + { + float f = MathHelper.cos(this.renderYawOffset * 0.017453292F); + float f1 = MathHelper.sin(this.renderYawOffset * 0.017453292F); + float f2 = 0.3F; + passenger.setPosition(this.posX + (double)(0.3F * f1), this.posY + this.getMountedYOffset() + passenger.getYOffset(), this.posZ - (double)(0.3F * f)); + } + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return (double)this.height * 0.67D; + } + + /** + * returns true if all the conditions for steering the entity are met. For pigs, this is true if it is being ridden + * by a player and the player is holding a carrot-on-a-stick + */ + public boolean canBeSteered() + { + return false; + } + + protected boolean handleEating(EntityPlayer player, ItemStack stack) + { + int i = 0; + int j = 0; + float f = 0.0F; + boolean flag = false; + Item item = stack.getItem(); + + if (item == Items.WHEAT) + { + i = 10; + j = 3; + f = 2.0F; + } + else if (item == Item.getItemFromBlock(Blocks.HAY_BLOCK)) + { + i = 90; + j = 6; + f = 10.0F; + + if (this.isTame() && this.getGrowingAge() == 0) + { + flag = true; + this.setInLove(player); + } + } + + if (this.getHealth() < this.getMaxHealth() && f > 0.0F) + { + this.heal(f); + flag = true; + } + + if (this.isChild() && i > 0) + { + this.world.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, 0.0D, 0.0D, 0.0D); + + if (!this.world.isRemote) + { + this.addGrowth(i); + } + + flag = true; + } + + if (j > 0 && (flag || !this.isTame()) && this.getTemper() < this.getMaxTemper()) + { + flag = true; + + if (!this.world.isRemote) + { + this.increaseTemper(j); + } + } + + if (flag && !this.isSilent()) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_LLAMA_EAT, this.getSoundCategory(), 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + } + + return flag; + } + + /** + * Dead and sleeping entities cannot move + */ + protected boolean isMovementBlocked() + { + return this.getHealth() <= 0.0F || this.isEatingHaystack(); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + this.setRandomStrength(); + int i; + + if (livingdata instanceof EntityLlama.GroupData) + { + i = ((EntityLlama.GroupData)livingdata).variant; + } + else + { + i = this.rand.nextInt(4); + livingdata = new EntityLlama.GroupData(i); + } + + this.setVariant(i); + return livingdata; + } + + @SideOnly(Side.CLIENT) + public boolean hasColor() + { + return this.getColor() != null; + } + + protected SoundEvent getAngrySound() + { + return SoundEvents.ENTITY_LLAMA_ANGRY; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_LLAMA_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_LLAMA_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_LLAMA_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_LLAMA_STEP, 0.15F, 1.0F); + } + + protected void playChestEquipSound() + { + this.playSound(SoundEvents.ENTITY_LLAMA_CHEST, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + public void makeMad() + { + SoundEvent soundevent = this.getAngrySound(); + + if (soundevent != null) + { + this.playSound(soundevent, this.getSoundVolume(), this.getSoundPitch()); + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_LLAMA; + } + + public int getInventoryColumns() + { + return this.getStrength(); + } + + public boolean wearsArmor() + { + return true; + } + + public boolean isArmor(ItemStack stack) + { + return stack.getItem() == Item.getItemFromBlock(Blocks.CARPET); + } + + public boolean canBeSaddled() + { + return false; + } + + /** + * Called by InventoryBasic.onInventoryChanged() on a array that is never filled. + */ + public void onInventoryChanged(IInventory invBasic) + { + EnumDyeColor enumdyecolor = this.getColor(); + super.onInventoryChanged(invBasic); + EnumDyeColor enumdyecolor1 = this.getColor(); + + if (this.ticksExisted > 20 && enumdyecolor1 != null && enumdyecolor1 != enumdyecolor) + { + this.playSound(SoundEvents.ENTITY_LLAMA_SWAG, 0.5F, 1.0F); + } + } + + /** + * Updates the items in the saddle and armor slots of the horse's inventory. + */ + protected void updateHorseSlots() + { + if (!this.world.isRemote) + { + super.updateHorseSlots(); + this.setColorByItem(this.horseChest.getStackInSlot(1)); + } + } + + private void setColor(@Nullable EnumDyeColor color) + { + this.dataManager.set(DATA_COLOR_ID, Integer.valueOf(color == null ? -1 : color.getMetadata())); + } + + private void setColorByItem(ItemStack stack) + { + if (this.isArmor(stack)) + { + this.setColor(EnumDyeColor.byMetadata(stack.getMetadata())); + } + else + { + this.setColor((EnumDyeColor)null); + } + } + + @Nullable + public EnumDyeColor getColor() + { + int i = ((Integer)this.dataManager.get(DATA_COLOR_ID)).intValue(); + return i == -1 ? null : EnumDyeColor.byMetadata(i); + } + + public int getMaxTemper() + { + return 30; + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + return otherAnimal != this && otherAnimal instanceof EntityLlama && this.canMate() && ((EntityLlama)otherAnimal).canMate(); + } + + public EntityLlama createChild(EntityAgeable ageable) + { + EntityLlama entityllama = new EntityLlama(this.world); + this.setOffspringAttributes(ageable, entityllama); + EntityLlama entityllama1 = (EntityLlama)ageable; + int i = this.rand.nextInt(Math.max(this.getStrength(), entityllama1.getStrength())) + 1; + + if (this.rand.nextFloat() < 0.03F) + { + ++i; + } + + entityllama.setStrength(i); + entityllama.setVariant(this.rand.nextBoolean() ? this.getVariant() : entityllama1.getVariant()); + return entityllama; + } + + private void spit(EntityLivingBase target) + { + EntityLlamaSpit entityllamaspit = new EntityLlamaSpit(this.world, this); + double d0 = target.posX - this.posX; + double d1 = target.getEntityBoundingBox().minY + (double)(target.height / 3.0F) - entityllamaspit.posY; + double d2 = target.posZ - this.posZ; + float f = MathHelper.sqrt(d0 * d0 + d2 * d2) * 0.2F; + entityllamaspit.shoot(d0, d1 + (double)f, d2, 1.5F, 10.0F); + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_LLAMA_SPIT, this.getSoundCategory(), 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.world.spawnEntity(entityllamaspit); + this.didSpit = true; + } + + private void setDidSpit(boolean didSpitIn) + { + this.didSpit = didSpitIn; + } + + public void fall(float distance, float damageMultiplier) + { + int i = MathHelper.ceil((distance * 0.5F - 3.0F) * damageMultiplier); + + if (i > 0) + { + if (distance >= 6.0F) + { + this.attackEntityFrom(DamageSource.FALL, (float)i); + + if (this.isBeingRidden()) + { + for (Entity entity : this.getRecursivePassengers()) + { + entity.attackEntityFrom(DamageSource.FALL, (float)i); + } + } + } + + IBlockState iblockstate = this.world.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - (double)this.prevRotationYaw, this.posZ)); + Block block = iblockstate.getBlock(); + + if (iblockstate.getMaterial() != Material.AIR && !this.isSilent()) + { + SoundType soundtype = block.getSoundType(); + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, soundtype.getStepSound(), this.getSoundCategory(), soundtype.getVolume() * 0.5F, soundtype.getPitch() * 0.75F); + } + } + } + + public void leaveCaravan() + { + if (this.caravanHead != null) + { + this.caravanHead.caravanTail = null; + } + + this.caravanHead = null; + } + + public void joinCaravan(EntityLlama caravanHeadIn) + { + this.caravanHead = caravanHeadIn; + this.caravanHead.caravanTail = this; + } + + public boolean hasCaravanTrail() + { + return this.caravanTail != null; + } + + public boolean inCaravan() + { + return this.caravanHead != null; + } + + @Nullable + public EntityLlama getCaravanHead() + { + return this.caravanHead; + } + + protected double followLeashSpeed() + { + return 2.0D; + } + + protected void followMother() + { + if (!this.inCaravan() && this.isChild()) + { + super.followMother(); + } + } + + public boolean canEatGrass() + { + return false; + } + + /** + * Attack the specified entity using a ranged attack. + */ + public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) + { + this.spit(target); + } + + public void setSwingingArms(boolean swingingArms) + { + } + + static class AIDefendTarget extends EntityAINearestAttackableTarget + { + public AIDefendTarget(EntityLlama llama) + { + super(llama, EntityWolf.class, 16, false, true, (Predicate)null); + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (super.shouldExecute() && this.targetEntity != null && !((EntityWolf)this.targetEntity).isTamed()) + { + return true; + } + else + { + this.taskOwner.setAttackTarget((EntityLivingBase)null); + return false; + } + } + + protected double getTargetDistance() + { + return super.getTargetDistance() * 0.25D; + } + } + + static class AIHurtByTarget extends EntityAIHurtByTarget + { + public AIHurtByTarget(EntityLlama llama) + { + super(llama, false); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + if (this.taskOwner instanceof EntityLlama) + { + EntityLlama entityllama = (EntityLlama)this.taskOwner; + + if (entityllama.didSpit) + { + entityllama.setDidSpit(false); + return false; + } + } + + return super.shouldContinueExecuting(); + } + } + + static class GroupData implements IEntityLivingData + { + public int variant; + + private GroupData(int variantIn) + { + this.variant = variantIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityMooshroom.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityMooshroom.java new file mode 100644 index 0000000..1442b99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityMooshroom.java @@ -0,0 +1,127 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityMooshroom extends EntityCow implements net.minecraftforge.common.IShearable +{ + public EntityMooshroom(World worldIn) + { + super(worldIn); + this.setSize(0.9F, 1.4F); + this.spawnableBlock = Blocks.MYCELIUM; + } + + public static void registerFixesMooshroom(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityMooshroom.class); + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.BOWL && this.getGrowingAge() >= 0 && !player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + player.setHeldItem(hand, new ItemStack(Items.MUSHROOM_STEW)); + } + else if (!player.inventory.addItemStackToInventory(new ItemStack(Items.MUSHROOM_STEW))) + { + player.dropItem(new ItemStack(Items.MUSHROOM_STEW), false); + } + + return true; + } + else if (false && itemstack.getItem() == Items.SHEARS && this.getGrowingAge() >= 0) //Forge Disable, Moved to onSheared + { + this.setDead(); + this.world.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 0.0D, 0.0D, 0.0D); + + if (!this.world.isRemote) + { + EntityCow entitycow = new EntityCow(this.world); + entitycow.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + entitycow.setHealth(this.getHealth()); + entitycow.renderYawOffset = this.renderYawOffset; + + if (this.hasCustomName()) + { + entitycow.setCustomNameTag(this.getCustomNameTag()); + } + + this.world.spawnEntity(entitycow); + + for (int i = 0; i < 5; ++i) + { + this.world.spawnEntity(new EntityItem(this.world, this.posX, this.posY + (double)this.height, this.posZ, new ItemStack(Blocks.RED_MUSHROOM))); + } + + itemstack.damageItem(1, player); + this.playSound(SoundEvents.ENTITY_MOOSHROOM_SHEAR, 1.0F, 1.0F); + } + + return true; + } + else + { + return super.processInteract(player, hand); + } + } + + public EntityMooshroom createChild(EntityAgeable ageable) + { + return new EntityMooshroom(this.world); + } + + @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, net.minecraft.util.math.BlockPos pos){ return getGrowingAge() >= 0; } + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, net.minecraft.util.math.BlockPos pos, int fortune) + { + this.setDead(); + ((net.minecraft.world.WorldServer)this.world).spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, false, this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 1, 0.0D, 0.0D, 0.0D, 0.0D); + + EntityCow entitycow = new EntityCow(this.world); + entitycow.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + entitycow.setHealth(this.getHealth()); + entitycow.renderYawOffset = this.renderYawOffset; + + if (this.hasCustomName()) + { + entitycow.setCustomNameTag(this.getCustomNameTag()); + } + + this.world.spawnEntity(entitycow); + + java.util.List ret = new java.util.ArrayList(); + for (int i = 0; i < 5; ++i) + { + ret.add(new ItemStack(Blocks.RED_MUSHROOM)); + } + + this.playSound(SoundEvents.ENTITY_MOOSHROOM_SHEAR, 1.0F, 1.0F); + return ret; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_MUSHROOM_COW; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityMule.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityMule.java new file mode 100644 index 0000000..76fb479 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityMule.java @@ -0,0 +1,52 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityMule extends AbstractChestHorse +{ + public EntityMule(World worldIn) + { + super(worldIn); + } + + public static void registerFixesMule(DataFixer fixer) + { + AbstractChestHorse.registerFixesAbstractChestHorse(fixer, EntityMule.class); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_MULE; + } + + protected SoundEvent getAmbientSound() + { + super.getAmbientSound(); + return SoundEvents.ENTITY_MULE_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + super.getDeathSound(); + return SoundEvents.ENTITY_MULE_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + super.getHurtSound(damageSourceIn); + return SoundEvents.ENTITY_MULE_HURT; + } + + protected void playChestEquipSound() + { + this.playSound(SoundEvents.ENTITY_MULE_CHEST, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityOcelot.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityOcelot.java new file mode 100644 index 0000000..b1f0f49 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityOcelot.java @@ -0,0 +1,413 @@ +package net.minecraft.entity.passive; + +import com.google.common.base.Predicate; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIFollowOwner; +import net.minecraft.entity.ai.EntityAILeapAtTarget; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIOcelotAttack; +import net.minecraft.entity.ai.EntityAIOcelotSit; +import net.minecraft.entity.ai.EntityAISit; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITargetNonTamed; +import net.minecraft.entity.ai.EntityAITempt; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityOcelot extends EntityTameable +{ + private static final DataParameter OCELOT_VARIANT = EntityDataManager.createKey(EntityOcelot.class, DataSerializers.VARINT); + private EntityAIAvoidEntity avoidEntity; + /** The tempt AI task for this mob, used to prevent taming while it is fleeing. */ + private EntityAITempt aiTempt; + + public EntityOcelot(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 0.7F); + } + + protected void initEntityAI() + { + this.aiSit = new EntityAISit(this); + this.aiTempt = new EntityAITempt(this, 0.6D, Items.FISH, true); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(3, this.aiTempt); + this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 5.0F)); + this.tasks.addTask(6, new EntityAIOcelotSit(this, 0.8D)); + this.tasks.addTask(7, new EntityAILeapAtTarget(this, 0.3F)); + this.tasks.addTask(8, new EntityAIOcelotAttack(this)); + this.tasks.addTask(9, new EntityAIMate(this, 0.8D)); + this.tasks.addTask(10, new EntityAIWanderAvoidWater(this, 0.8D, 1.0000001E-5F)); + this.tasks.addTask(11, new EntityAIWatchClosest(this, EntityPlayer.class, 10.0F)); + this.targetTasks.addTask(1, new EntityAITargetNonTamed(this, EntityChicken.class, false, (Predicate)null)); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(OCELOT_VARIANT, Integer.valueOf(0)); + } + + public void updateAITasks() + { + if (this.getMoveHelper().isUpdating()) + { + double d0 = this.getMoveHelper().getSpeed(); + + if (d0 == 0.6D) + { + this.setSneaking(true); + this.setSprinting(false); + } + else if (d0 == 1.33D) + { + this.setSneaking(false); + this.setSprinting(true); + } + else + { + this.setSneaking(false); + this.setSprinting(false); + } + } + else + { + this.setSneaking(false); + this.setSprinting(false); + } + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return !this.isTamed() && this.ticksExisted > 2400; + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + } + + public void fall(float distance, float damageMultiplier) + { + } + + public static void registerFixesOcelot(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityOcelot.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("CatType", this.getTameSkin()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setTameSkin(compound.getInteger("CatType")); + } + + @Nullable + protected SoundEvent getAmbientSound() + { + if (this.isTamed()) + { + if (this.isInLove()) + { + return SoundEvents.ENTITY_CAT_PURR; + } + else + { + return this.rand.nextInt(4) == 0 ? SoundEvents.ENTITY_CAT_PURREOW : SoundEvents.ENTITY_CAT_AMBIENT; + } + } + else + { + return null; + } + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_CAT_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_CAT_DEATH; + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.4F; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 3.0F); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + if (this.aiSit != null) + { + this.aiSit.setSitting(false); + } + + return super.attackEntityFrom(source, amount); + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_OCELOT; + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (this.isTamed()) + { + if (this.isOwner(player) && !this.world.isRemote && !this.isBreedingItem(itemstack)) + { + this.aiSit.setSitting(!this.isSitting()); + } + } + else if ((this.aiTempt == null || this.aiTempt.isRunning()) && itemstack.getItem() == Items.FISH && player.getDistanceSq(this) < 9.0D) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + if (!this.world.isRemote) + { + if (this.rand.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) + { + this.setTamedBy(player); + this.setTameSkin(1 + this.world.rand.nextInt(3)); + this.playTameEffect(true); + this.aiSit.setSitting(true); + this.world.setEntityState(this, (byte)7); + } + else + { + this.playTameEffect(false); + this.world.setEntityState(this, (byte)6); + } + } + + return true; + } + + return super.processInteract(player, hand); + } + + public EntityOcelot createChild(EntityAgeable ageable) + { + EntityOcelot entityocelot = new EntityOcelot(this.world); + + if (this.isTamed()) + { + entityocelot.setOwnerId(this.getOwnerId()); + entityocelot.setTamed(true); + entityocelot.setTameSkin(this.getTameSkin()); + } + + return entityocelot; + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return stack.getItem() == Items.FISH; + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + if (otherAnimal == this) + { + return false; + } + else if (!this.isTamed()) + { + return false; + } + else if (!(otherAnimal instanceof EntityOcelot)) + { + return false; + } + else + { + EntityOcelot entityocelot = (EntityOcelot)otherAnimal; + + if (!entityocelot.isTamed()) + { + return false; + } + else + { + return this.isInLove() && entityocelot.isInLove(); + } + } + } + + public int getTameSkin() + { + return ((Integer)this.dataManager.get(OCELOT_VARIANT)).intValue(); + } + + public void setTameSkin(int skinId) + { + this.dataManager.set(OCELOT_VARIANT, Integer.valueOf(skinId)); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return this.world.rand.nextInt(3) != 0; + } + + /** + * Checks that the entity is not colliding with any blocks / liquids + */ + public boolean isNotColliding() + { + if (this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && !this.world.containsAnyLiquid(this.getEntityBoundingBox())) + { + BlockPos blockpos = new BlockPos(this.posX, this.getEntityBoundingBox().minY, this.posZ); + + if (blockpos.getY() < this.world.getSeaLevel()) + { + return false; + } + + IBlockState iblockstate = this.world.getBlockState(blockpos.down()); + Block block = iblockstate.getBlock(); + + if (block == Blocks.GRASS || block.isLeaves(iblockstate, this.world, blockpos.down())) + { + return true; + } + } + + return false; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + if (this.hasCustomName()) + { + return this.getCustomNameTag(); + } + else + { + return this.isTamed() ? I18n.translateToLocal("entity.Cat.name") : super.getName(); + } + } + + protected void setupTamedAI() + { + if (this.avoidEntity == null) + { + this.avoidEntity = new EntityAIAvoidEntity(this, EntityPlayer.class, 16.0F, 0.8D, 1.33D); + } + + this.tasks.removeTask(this.avoidEntity); + + if (!this.isTamed()) + { + this.tasks.addTask(4, this.avoidEntity); + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + + if (this.getTameSkin() == 0 && this.world.rand.nextInt(7) == 0) + { + for (int i = 0; i < 2; ++i) + { + EntityOcelot entityocelot = new EntityOcelot(this.world); + entityocelot.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + entityocelot.setGrowingAge(-24000); + this.world.spawnEntity(entityocelot); + } + } + + return livingdata; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityParrot.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityParrot.java new file mode 100644 index 0000000..6462439 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityParrot.java @@ -0,0 +1,542 @@ +package net.minecraft.entity.passive; + +import com.google.common.base.Predicate; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockLog; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIFollow; +import net.minecraft.entity.ai.EntityAIFollowOwnerFlying; +import net.minecraft.entity.ai.EntityAILandOnOwnersShoulder; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISit; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWanderAvoidWaterFlying; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityFlyHelper; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityElderGuardian; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.monster.EntityEvoker; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.EntityHusk; +import net.minecraft.entity.monster.EntityIllusionIllager; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.monster.EntityPolarBear; +import net.minecraft.entity.monster.EntityShulker; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.monster.EntityStray; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.entity.monster.EntityVindicator; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityWitherSkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigate; +import net.minecraft.pathfinding.PathNavigateFlying; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityParrot extends EntityShoulderRiding implements EntityFlying +{ + private static final DataParameter VARIANT = EntityDataManager.createKey(EntityParrot.class, DataSerializers.VARINT); + /** Used to select entities the parrot can mimic the sound of */ + private static final Predicate CAN_MIMIC = new Predicate() + { + public boolean apply(@Nullable EntityLiving p_apply_1_) + { + return p_apply_1_ != null && EntityParrot.MIMIC_SOUNDS.containsKey(p_apply_1_.getClass()); + } + }; + private static final Item DEADLY_ITEM = Items.COOKIE; + private static final Set TAME_ITEMS = Sets.newHashSet(Items.WHEAT_SEEDS, Items.MELON_SEEDS, Items.PUMPKIN_SEEDS, Items.BEETROOT_SEEDS); + private static final java.util.Map, SoundEvent> MIMIC_SOUNDS = Maps.newHashMapWithExpectedSize(32); + public float flap; + public float flapSpeed; + public float oFlapSpeed; + public float oFlap; + public float flapping = 1.0F; + private boolean partyParrot; + private BlockPos jukeboxPosition; + + public EntityParrot(World worldIn) + { + super(worldIn); + this.setSize(0.5F, 0.9F); + this.moveHelper = new EntityFlyHelper(this); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + this.setVariant(this.rand.nextInt(5)); + return super.onInitialSpawn(difficulty, livingdata); + } + + protected void initEntityAI() + { + this.aiSit = new EntityAISit(this); + this.tasks.addTask(0, new EntityAIPanic(this, 1.25D)); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(2, new EntityAIFollowOwnerFlying(this, 1.0D, 5.0F, 1.0F)); + this.tasks.addTask(2, new EntityAIWanderAvoidWaterFlying(this, 1.0D)); + this.tasks.addTask(3, new EntityAILandOnOwnersShoulder(this)); + this.tasks.addTask(3, new EntityAIFollow(this, 1.0D, 3.0F, 7.0F)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.FLYING_SPEED); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(6.0D); + this.getEntityAttribute(SharedMonsterAttributes.FLYING_SPEED).setBaseValue(0.4000000059604645D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.20000000298023224D); + } + + /** + * Returns new PathNavigateGround instance + */ + protected PathNavigate createNavigator(World worldIn) + { + PathNavigateFlying pathnavigateflying = new PathNavigateFlying(this, worldIn); + pathnavigateflying.setCanOpenDoors(false); + pathnavigateflying.setCanFloat(true); + pathnavigateflying.setCanEnterDoors(true); + return pathnavigateflying; + } + + public float getEyeHeight() + { + return this.height * 0.6F; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + playMimicSound(this.world, this); + + if (this.jukeboxPosition == null || this.jukeboxPosition.distanceSq(this.posX, this.posY, this.posZ) > 12.0D || this.world.getBlockState(this.jukeboxPosition).getBlock() != Blocks.JUKEBOX) + { + this.partyParrot = false; + this.jukeboxPosition = null; + } + + super.onLivingUpdate(); + this.calculateFlapping(); + } + + @SideOnly(Side.CLIENT) + public void setPartying(BlockPos pos, boolean p_191987_2_) + { + this.jukeboxPosition = pos; + this.partyParrot = p_191987_2_; + } + + @SideOnly(Side.CLIENT) + public boolean isPartying() + { + return this.partyParrot; + } + + private void calculateFlapping() + { + this.oFlap = this.flap; + this.oFlapSpeed = this.flapSpeed; + this.flapSpeed = (float)((double)this.flapSpeed + (double)(this.onGround ? -1 : 4) * 0.3D); + this.flapSpeed = MathHelper.clamp(this.flapSpeed, 0.0F, 1.0F); + + if (!this.onGround && this.flapping < 1.0F) + { + this.flapping = 1.0F; + } + + this.flapping = (float)((double)this.flapping * 0.9D); + + if (!this.onGround && this.motionY < 0.0D) + { + this.motionY *= 0.6D; + } + + this.flap += this.flapping * 2.0F; + } + + private static boolean playMimicSound(World worldIn, Entity p_192006_1_) + { + if (!p_192006_1_.isSilent() && worldIn.rand.nextInt(50) == 0) + { + List list = worldIn.getEntitiesWithinAABB(EntityLiving.class, p_192006_1_.getEntityBoundingBox().grow(20.0D), CAN_MIMIC); + + if (!list.isEmpty()) + { + EntityLiving entityliving = list.get(worldIn.rand.nextInt(list.size())); + + if (!entityliving.isSilent()) + { + SoundEvent soundevent = MIMIC_SOUNDS.get(entityliving.getClass()); + worldIn.playSound((EntityPlayer)null, p_192006_1_.posX, p_192006_1_.posY, p_192006_1_.posZ, soundevent, p_192006_1_.getSoundCategory(), 0.7F, getPitch(worldIn.rand)); + return true; + } + } + + return false; + } + else + { + return false; + } + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!this.isTamed() && TAME_ITEMS.contains(itemstack.getItem())) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + if (!this.isSilent()) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PARROT_EAT, this.getSoundCategory(), 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + } + + if (!this.world.isRemote) + { + if (this.rand.nextInt(10) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) + { + this.setTamedBy(player); + this.playTameEffect(true); + this.world.setEntityState(this, (byte)7); + } + else + { + this.playTameEffect(false); + this.world.setEntityState(this, (byte)6); + } + } + + return true; + } + else if (itemstack.getItem() == DEADLY_ITEM) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + this.addPotionEffect(new PotionEffect(MobEffects.POISON, 900)); + + if (player.isCreative() || !this.getIsInvulnerable()) + { + this.attackEntityFrom(DamageSource.causePlayerDamage(player), Float.MAX_VALUE); + } + + return true; + } + else + { + if (!this.world.isRemote && !this.isFlying() && this.isTamed() && this.isOwner(player)) + { + this.aiSit.setSitting(!this.isSitting()); + } + + return super.processInteract(player, hand); + } + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return false; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.getEntityBoundingBox().minY); + int k = MathHelper.floor(this.posZ); + BlockPos blockpos = new BlockPos(i, j, k); + Block block = this.world.getBlockState(blockpos.down()).getBlock(); + return block instanceof BlockLeaves || block == Blocks.GRASS || block instanceof BlockLog || block == Blocks.AIR && this.world.getLight(blockpos) > 8 && super.getCanSpawnHere(); + } + + public void fall(float distance, float damageMultiplier) + { + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + return false; + } + + @Nullable + public EntityAgeable createChild(EntityAgeable ageable) + { + return null; + } + + public static void playAmbientSound(World worldIn, Entity p_192005_1_) + { + if (!p_192005_1_.isSilent() && !playMimicSound(worldIn, p_192005_1_) && worldIn.rand.nextInt(200) == 0) + { + worldIn.playSound((EntityPlayer)null, p_192005_1_.posX, p_192005_1_.posY, p_192005_1_.posZ, getAmbientSound(worldIn.rand), p_192005_1_.getSoundCategory(), 1.0F, getPitch(worldIn.rand)); + } + } + + public boolean attackEntityAsMob(Entity entityIn) + { + return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 3.0F); + } + + @Nullable + public SoundEvent getAmbientSound() + { + return getAmbientSound(this.rand); + } + + private static SoundEvent getAmbientSound(Random random) + { + if (random.nextInt(1000) == 0) + { + List list = new ArrayList(MIMIC_SOUNDS.values()); + SoundEvent ret = list.get(random.nextInt(list.size())); + return ret == null ? SoundEvents.ENTITY_PARROT_AMBIENT : ret; + } + else + { + return SoundEvents.ENTITY_PARROT_AMBIENT; + } + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_PARROT_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_PARROT_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_PARROT_STEP, 0.15F, 1.0F); + } + + protected float playFlySound(float p_191954_1_) + { + this.playSound(SoundEvents.ENTITY_PARROT_FLY, 0.15F, 1.0F); + return p_191954_1_ + this.flapSpeed / 2.0F; + } + + protected boolean makeFlySound() + { + return true; + } + + /** + * Gets the pitch of living sounds in living entities. + */ + protected float getSoundPitch() + { + return getPitch(this.rand); + } + + private static float getPitch(Random random) + { + return (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F; + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.NEUTRAL; + } + + /** + * Returns true if this entity should push and be pushed by other entities when colliding. + */ + public boolean canBePushed() + { + return true; + } + + protected void collideWithEntity(Entity entityIn) + { + if (!(entityIn instanceof EntityPlayer)) + { + super.collideWithEntity(entityIn); + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + if (this.aiSit != null) + { + this.aiSit.setSitting(false); + } + + return super.attackEntityFrom(source, amount); + } + } + + public int getVariant() + { + return MathHelper.clamp(((Integer)this.dataManager.get(VARIANT)).intValue(), 0, 4); + } + + public void setVariant(int p_191997_1_) + { + this.dataManager.set(VARIANT, Integer.valueOf(p_191997_1_)); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(VARIANT, Integer.valueOf(0)); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Variant", this.getVariant()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setVariant(compound.getInteger("Variant")); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_PARROT; + } + + public boolean isFlying() + { + return !this.onGround; + } + + static + { + registerMimicSound(EntityBlaze.class, SoundEvents.E_PARROT_IM_BLAZE); + registerMimicSound(EntityCaveSpider.class, SoundEvents.E_PARROT_IM_SPIDER); + registerMimicSound(EntityCreeper.class, SoundEvents.E_PARROT_IM_CREEPER); + registerMimicSound(EntityElderGuardian.class, SoundEvents.E_PARROT_IM_ELDER_GUARDIAN); + registerMimicSound(EntityDragon.class, SoundEvents.E_PARROT_IM_ENDERDRAGON); + registerMimicSound(EntityEnderman.class, SoundEvents.E_PARROT_IM_ENDERMAN); + registerMimicSound(EntityEndermite.class, SoundEvents.E_PARROT_IM_ENDERMITE); + registerMimicSound(EntityEvoker.class, SoundEvents.E_PARROT_IM_EVOCATION_ILLAGER); + registerMimicSound(EntityGhast.class, SoundEvents.E_PARROT_IM_GHAST); + registerMimicSound(EntityHusk.class, SoundEvents.E_PARROT_IM_HUSK); + registerMimicSound(EntityIllusionIllager.class, SoundEvents.E_PARROT_IM_ILLUSION_ILLAGER); + registerMimicSound(EntityMagmaCube.class, SoundEvents.E_PARROT_IM_MAGMACUBE); + registerMimicSound(EntityPigZombie.class, SoundEvents.E_PARROT_IM_ZOMBIE_PIGMAN); + registerMimicSound(EntityPolarBear.class, SoundEvents.E_PARROT_IM_POLAR_BEAR); + registerMimicSound(EntityShulker.class, SoundEvents.E_PARROT_IM_SHULKER); + registerMimicSound(EntitySilverfish.class, SoundEvents.E_PARROT_IM_SILVERFISH); + registerMimicSound(EntitySkeleton.class, SoundEvents.E_PARROT_IM_SKELETON); + registerMimicSound(EntitySlime.class, SoundEvents.E_PARROT_IM_SLIME); + registerMimicSound(EntitySpider.class, SoundEvents.E_PARROT_IM_SPIDER); + registerMimicSound(EntityStray.class, SoundEvents.E_PARROT_IM_STRAY); + registerMimicSound(EntityVex.class, SoundEvents.E_PARROT_IM_VEX); + registerMimicSound(EntityVindicator.class, SoundEvents.E_PARROT_IM_VINDICATION_ILLAGER); + registerMimicSound(EntityWitch.class, SoundEvents.E_PARROT_IM_WITCH); + registerMimicSound(EntityWither.class, SoundEvents.E_PARROT_IM_WITHER); + registerMimicSound(EntityWitherSkeleton.class, SoundEvents.E_PARROT_IM_WITHER_SKELETON); + registerMimicSound(EntityWolf.class, SoundEvents.E_PARROT_IM_WOLF); + registerMimicSound(EntityZombie.class, SoundEvents.E_PARROT_IM_ZOMBIE); + registerMimicSound(EntityZombieVillager.class, SoundEvents.E_PARROT_IM_ZOMBIE_VILLAGER); + } + + public static void registerMimicSound(Class cls, SoundEvent sound) + { + MIMIC_SOUNDS.put(cls, sound); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityPig.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityPig.java new file mode 100644 index 0000000..1bc72e0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityPig.java @@ -0,0 +1,360 @@ +package net.minecraft.entity.passive; + +import com.google.common.collect.Sets; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITempt; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityPig extends EntityAnimal +{ + private static final DataParameter SADDLED = EntityDataManager.createKey(EntityPig.class, DataSerializers.BOOLEAN); + private static final DataParameter BOOST_TIME = EntityDataManager.createKey(EntityPig.class, DataSerializers.VARINT); + private static final Set TEMPTATION_ITEMS = Sets.newHashSet(Items.CARROT, Items.POTATO, Items.BEETROOT); + private boolean boosting; + private int boostTime; + private int totalBoostTime; + + public EntityPig(World worldIn) + { + super(worldIn); + this.setSize(0.9F, 0.9F); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 1.25D)); + this.tasks.addTask(3, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(4, new EntityAITempt(this, 1.2D, Items.CARROT_ON_A_STICK, false)); + this.tasks.addTask(4, new EntityAITempt(this, 1.2D, false, TEMPTATION_ITEMS)); + this.tasks.addTask(5, new EntityAIFollowParent(this, 1.1D)); + this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D); + } + + /** + * For vehicles, the first passenger is generally considered the controller and "drives" the vehicle. For example, + * Pigs, Horses, and Boats are generally "steered" by the controlling passenger. + */ + @Nullable + public Entity getControllingPassenger() + { + return this.getPassengers().isEmpty() ? null : (Entity)this.getPassengers().get(0); + } + + /** + * returns true if all the conditions for steering the entity are met. For pigs, this is true if it is being ridden + * by a player and the player is holding a carrot-on-a-stick + */ + public boolean canBeSteered() + { + Entity entity = this.getControllingPassenger(); + + if (!(entity instanceof EntityPlayer)) + { + return false; + } + else + { + EntityPlayer entityplayer = (EntityPlayer)entity; + return entityplayer.getHeldItemMainhand().getItem() == Items.CARROT_ON_A_STICK || entityplayer.getHeldItemOffhand().getItem() == Items.CARROT_ON_A_STICK; + } + } + + public void notifyDataManagerChange(DataParameter key) + { + if (BOOST_TIME.equals(key) && this.world.isRemote) + { + this.boosting = true; + this.boostTime = 0; + this.totalBoostTime = ((Integer)this.dataManager.get(BOOST_TIME)).intValue(); + } + + super.notifyDataManagerChange(key); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(SADDLED, Boolean.valueOf(false)); + this.dataManager.register(BOOST_TIME, Integer.valueOf(0)); + } + + public static void registerFixesPig(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityPig.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("Saddle", this.getSaddled()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setSaddled(compound.getBoolean("Saddle")); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_PIG_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_PIG_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_PIG_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_PIG_STEP, 0.15F, 1.0F); + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + if (!super.processInteract(player, hand)) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (itemstack.getItem() == Items.NAME_TAG) + { + itemstack.interactWithEntity(player, this, hand); + return true; + } + else if (this.getSaddled() && !this.isBeingRidden()) + { + if (!this.world.isRemote) + { + player.startRiding(this); + } + + return true; + } + else if (itemstack.getItem() == Items.SADDLE) + { + itemstack.interactWithEntity(player, this, hand); + return true; + } + else + { + return false; + } + } + else + { + return true; + } + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + super.onDeath(cause); + + if (!this.world.isRemote) + { + if (this.getSaddled()) + { + this.dropItem(Items.SADDLE, 1); + } + } + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_PIG; + } + + /** + * Returns true if the pig is saddled. + */ + public boolean getSaddled() + { + return ((Boolean)this.dataManager.get(SADDLED)).booleanValue(); + } + + /** + * Set or remove the saddle of the pig. + */ + public void setSaddled(boolean saddled) + { + if (saddled) + { + this.dataManager.set(SADDLED, Boolean.valueOf(true)); + } + else + { + this.dataManager.set(SADDLED, Boolean.valueOf(false)); + } + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + if (!this.world.isRemote && !this.isDead) + { + EntityPigZombie entitypigzombie = new EntityPigZombie(this.world); + entitypigzombie.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.GOLDEN_SWORD)); + entitypigzombie.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + entitypigzombie.setNoAI(this.isAIDisabled()); + + if (this.hasCustomName()) + { + entitypigzombie.setCustomNameTag(this.getCustomNameTag()); + entitypigzombie.setAlwaysRenderNameTag(this.getAlwaysRenderNameTag()); + } + + this.world.spawnEntity(entitypigzombie); + this.setDead(); + } + } + + public void travel(float strafe, float vertical, float forward) + { + Entity entity = this.getPassengers().isEmpty() ? null : (Entity)this.getPassengers().get(0); + + if (this.isBeingRidden() && this.canBeSteered()) + { + this.rotationYaw = entity.rotationYaw; + this.prevRotationYaw = this.rotationYaw; + this.rotationPitch = entity.rotationPitch * 0.5F; + this.setRotation(this.rotationYaw, this.rotationPitch); + this.renderYawOffset = this.rotationYaw; + this.rotationYawHead = this.rotationYaw; + this.stepHeight = 1.0F; + this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F; + + if (this.boosting && this.boostTime++ > this.totalBoostTime) + { + this.boosting = false; + } + + if (this.canPassengerSteer()) + { + float f = (float)this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue() * 0.225F; + + if (this.boosting) + { + f += f * 1.15F * MathHelper.sin((float)this.boostTime / (float)this.totalBoostTime * (float)Math.PI); + } + + this.setAIMoveSpeed(f); + super.travel(0.0F, 0.0F, 1.0F); + } + else + { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + this.prevLimbSwingAmount = this.limbSwingAmount; + double d1 = this.posX - this.prevPosX; + double d0 = this.posZ - this.prevPosZ; + float f1 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F; + + if (f1 > 1.0F) + { + f1 = 1.0F; + } + + this.limbSwingAmount += (f1 - this.limbSwingAmount) * 0.4F; + this.limbSwing += this.limbSwingAmount; + } + else + { + this.stepHeight = 0.5F; + this.jumpMovementFactor = 0.02F; + super.travel(strafe, vertical, forward); + } + } + + public boolean boost() + { + if (this.boosting) + { + return false; + } + else + { + this.boosting = true; + this.boostTime = 0; + this.totalBoostTime = this.getRNG().nextInt(841) + 140; + this.getDataManager().set(BOOST_TIME, Integer.valueOf(this.totalBoostTime)); + return true; + } + } + + public EntityPig createChild(EntityAgeable ageable) + { + return new EntityPig(this.world); + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return TEMPTATION_ITEMS.contains(stack.getItem()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityRabbit.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityRabbit.java new file mode 100644 index 0000000..99b38c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityRabbit.java @@ -0,0 +1,771 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCarrot; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIMoveToBlock; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITempt; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityJumpHelper; +import net.minecraft.entity.ai.EntityMoveHelper; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.Path; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeDesert; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityRabbit extends EntityAnimal +{ + private static final DataParameter RABBIT_TYPE = EntityDataManager.createKey(EntityRabbit.class, DataSerializers.VARINT); + private int jumpTicks; + private int jumpDuration; + private boolean wasOnGround; + private int currentMoveTypeDuration; + private int carrotTicks; + + public EntityRabbit(World worldIn) + { + super(worldIn); + this.setSize(0.4F, 0.5F); + this.jumpHelper = new EntityRabbit.RabbitJumpHelper(this); + this.moveHelper = new EntityRabbit.RabbitMoveHelper(this); + this.setMovementSpeed(0.0D); + } + + protected void initEntityAI() + { + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityRabbit.AIPanic(this, 2.2D)); + this.tasks.addTask(2, new EntityAIMate(this, 0.8D)); + this.tasks.addTask(3, new EntityAITempt(this, 1.0D, Items.CARROT, false)); + this.tasks.addTask(3, new EntityAITempt(this, 1.0D, Items.GOLDEN_CARROT, false)); + this.tasks.addTask(3, new EntityAITempt(this, 1.0D, Item.getItemFromBlock(Blocks.YELLOW_FLOWER), false)); + this.tasks.addTask(4, new EntityRabbit.AIAvoidEntity(this, EntityPlayer.class, 8.0F, 2.2D, 2.2D)); + this.tasks.addTask(4, new EntityRabbit.AIAvoidEntity(this, EntityWolf.class, 10.0F, 2.2D, 2.2D)); + this.tasks.addTask(4, new EntityRabbit.AIAvoidEntity(this, EntityMob.class, 4.0F, 2.2D, 2.2D)); + this.tasks.addTask(5, new EntityRabbit.AIRaidFarm(this)); + this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 0.6D)); + this.tasks.addTask(11, new EntityAIWatchClosest(this, EntityPlayer.class, 10.0F)); + } + + protected float getJumpUpwardsMotion() + { + if (!this.collidedHorizontally && (!this.moveHelper.isUpdating() || this.moveHelper.getY() <= this.posY + 0.5D)) + { + Path path = this.navigator.getPath(); + + if (path != null && path.getCurrentPathIndex() < path.getCurrentPathLength()) + { + Vec3d vec3d = path.getPosition(this); + + if (vec3d.y > this.posY + 0.5D) + { + return 0.5F; + } + } + + return this.moveHelper.getSpeed() <= 0.6D ? 0.2F : 0.3F; + } + else + { + return 0.5F; + } + } + + /** + * Causes this entity to do an upwards motion (jumping). + */ + protected void jump() + { + super.jump(); + double d0 = this.moveHelper.getSpeed(); + + if (d0 > 0.0D) + { + double d1 = this.motionX * this.motionX + this.motionZ * this.motionZ; + + if (d1 < 0.010000000000000002D) + { + this.moveRelative(0.0F, 0.0F, 1.0F, 0.1F); + } + } + + if (!this.world.isRemote) + { + this.world.setEntityState(this, (byte)1); + } + } + + @SideOnly(Side.CLIENT) + public float setJumpCompletion(float p_175521_1_) + { + return this.jumpDuration == 0 ? 0.0F : ((float)this.jumpTicks + p_175521_1_) / (float)this.jumpDuration; + } + + public void setMovementSpeed(double newSpeed) + { + this.getNavigator().setSpeed(newSpeed); + this.moveHelper.setMoveTo(this.moveHelper.getX(), this.moveHelper.getY(), this.moveHelper.getZ(), newSpeed); + } + + public void setJumping(boolean jumping) + { + super.setJumping(jumping); + + if (jumping) + { + this.playSound(this.getJumpSound(), this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + } + + public void startJumping() + { + this.setJumping(true); + this.jumpDuration = 10; + this.jumpTicks = 0; + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(RABBIT_TYPE, Integer.valueOf(0)); + } + + public void updateAITasks() + { + if (this.currentMoveTypeDuration > 0) + { + --this.currentMoveTypeDuration; + } + + if (this.carrotTicks > 0) + { + this.carrotTicks -= this.rand.nextInt(3); + + if (this.carrotTicks < 0) + { + this.carrotTicks = 0; + } + } + + if (this.onGround) + { + if (!this.wasOnGround) + { + this.setJumping(false); + this.checkLandingDelay(); + } + + if (this.getRabbitType() == 99 && this.currentMoveTypeDuration == 0) + { + EntityLivingBase entitylivingbase = this.getAttackTarget(); + + if (entitylivingbase != null && this.getDistanceSq(entitylivingbase) < 16.0D) + { + this.calculateRotationYaw(entitylivingbase.posX, entitylivingbase.posZ); + this.moveHelper.setMoveTo(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, this.moveHelper.getSpeed()); + this.startJumping(); + this.wasOnGround = true; + } + } + + EntityRabbit.RabbitJumpHelper entityrabbit$rabbitjumphelper = (EntityRabbit.RabbitJumpHelper)this.jumpHelper; + + if (!entityrabbit$rabbitjumphelper.getIsJumping()) + { + if (this.moveHelper.isUpdating() && this.currentMoveTypeDuration == 0) + { + Path path = this.navigator.getPath(); + Vec3d vec3d = new Vec3d(this.moveHelper.getX(), this.moveHelper.getY(), this.moveHelper.getZ()); + + if (path != null && path.getCurrentPathIndex() < path.getCurrentPathLength()) + { + vec3d = path.getPosition(this); + } + + this.calculateRotationYaw(vec3d.x, vec3d.z); + this.startJumping(); + } + } + else if (!entityrabbit$rabbitjumphelper.canJump()) + { + this.enableJumpControl(); + } + } + + this.wasOnGround = this.onGround; + } + + /** + * Attempts to create sprinting particles if the entity is sprinting and not in water. + */ + public void spawnRunningParticles() + { + } + + private void calculateRotationYaw(double x, double z) + { + this.rotationYaw = (float)(MathHelper.atan2(z - this.posZ, x - this.posX) * (180D / Math.PI)) - 90.0F; + } + + private void enableJumpControl() + { + ((EntityRabbit.RabbitJumpHelper)this.jumpHelper).setCanJump(true); + } + + private void disableJumpControl() + { + ((EntityRabbit.RabbitJumpHelper)this.jumpHelper).setCanJump(false); + } + + private void updateMoveTypeDuration() + { + if (this.moveHelper.getSpeed() < 2.2D) + { + this.currentMoveTypeDuration = 10; + } + else + { + this.currentMoveTypeDuration = 1; + } + } + + private void checkLandingDelay() + { + this.updateMoveTypeDuration(); + this.disableJumpControl(); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.jumpTicks != this.jumpDuration) + { + ++this.jumpTicks; + } + else if (this.jumpDuration != 0) + { + this.jumpTicks = 0; + this.jumpDuration = 0; + this.setJumping(false); + } + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(3.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + } + + public static void registerFixesRabbit(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityRabbit.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("RabbitType", this.getRabbitType()); + compound.setInteger("MoreCarrotTicks", this.carrotTicks); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setRabbitType(compound.getInteger("RabbitType")); + this.carrotTicks = compound.getInteger("MoreCarrotTicks"); + } + + protected SoundEvent getJumpSound() + { + return SoundEvents.ENTITY_RABBIT_JUMP; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_RABBIT_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_RABBIT_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_RABBIT_DEATH; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + if (this.getRabbitType() == 99) + { + this.playSound(SoundEvents.ENTITY_RABBIT_ATTACK, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 8.0F); + } + else + { + return entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 3.0F); + } + } + + public SoundCategory getSoundCategory() + { + return this.getRabbitType() == 99 ? SoundCategory.HOSTILE : SoundCategory.NEUTRAL; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + return this.isEntityInvulnerable(source) ? false : super.attackEntityFrom(source, amount); + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_RABBIT; + } + + private boolean isRabbitBreedingItem(Item itemIn) + { + return itemIn == Items.CARROT || itemIn == Items.GOLDEN_CARROT || itemIn == Item.getItemFromBlock(Blocks.YELLOW_FLOWER); + } + + public EntityRabbit createChild(EntityAgeable ageable) + { + EntityRabbit entityrabbit = new EntityRabbit(this.world); + int i = this.getRandomRabbitType(); + + if (this.rand.nextInt(20) != 0) + { + if (ageable instanceof EntityRabbit && this.rand.nextBoolean()) + { + i = ((EntityRabbit)ageable).getRabbitType(); + } + else + { + i = this.getRabbitType(); + } + } + + entityrabbit.setRabbitType(i); + return entityrabbit; + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return this.isRabbitBreedingItem(stack.getItem()); + } + + public int getRabbitType() + { + return ((Integer)this.dataManager.get(RABBIT_TYPE)).intValue(); + } + + public void setRabbitType(int rabbitTypeId) + { + if (rabbitTypeId == 99) + { + this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(8.0D); + this.tasks.addTask(4, new EntityRabbit.AIEvilAttack(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false, new Class[0])); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, true)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityWolf.class, true)); + + if (!this.hasCustomName()) + { + this.setCustomNameTag(I18n.translateToLocal("entity.KillerBunny.name")); + } + } + + this.dataManager.set(RABBIT_TYPE, Integer.valueOf(rabbitTypeId)); + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + int i = this.getRandomRabbitType(); + boolean flag = false; + + if (livingdata instanceof EntityRabbit.RabbitTypeData) + { + i = ((EntityRabbit.RabbitTypeData)livingdata).typeData; + flag = true; + } + else + { + livingdata = new EntityRabbit.RabbitTypeData(i); + } + + this.setRabbitType(i); + + if (flag) + { + this.setGrowingAge(-24000); + } + + return livingdata; + } + + private int getRandomRabbitType() + { + Biome biome = this.world.getBiome(new BlockPos(this)); + int i = this.rand.nextInt(100); + + if (biome.isSnowyBiome()) + { + return i < 80 ? 1 : 3; + } + else if (biome instanceof BiomeDesert) + { + return 4; + } + else + { + return i < 50 ? 0 : (i < 90 ? 5 : 2); + } + } + + /** + * Returns true if {@link net.minecraft.entity.passive.EntityRabbit#carrotTicks carrotTicks} has reached zero + */ + private boolean isCarrotEaten() + { + return this.carrotTicks == 0; + } + + protected void createEatingParticles() + { + BlockCarrot blockcarrot = (BlockCarrot)Blocks.CARROTS; + IBlockState iblockstate = blockcarrot.withAge(blockcarrot.getMaxAge()); + this.world.spawnParticle(EnumParticleTypes.BLOCK_DUST, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, 0.0D, 0.0D, 0.0D, Block.getStateId(iblockstate)); + this.carrotTicks = 40; + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 1) + { + this.createRunningParticles(); + this.jumpDuration = 10; + this.jumpTicks = 0; + } + else + { + super.handleStatusUpdate(id); + } + } + + static class AIAvoidEntity extends EntityAIAvoidEntity + { + private final EntityRabbit rabbit; + + public AIAvoidEntity(EntityRabbit rabbit, Class p_i46403_2_, float p_i46403_3_, double p_i46403_4_, double p_i46403_6_) + { + super(rabbit, p_i46403_2_, p_i46403_3_, p_i46403_4_, p_i46403_6_); + this.rabbit = rabbit; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return this.rabbit.getRabbitType() != 99 && super.shouldExecute(); + } + } + + static class AIEvilAttack extends EntityAIAttackMelee + { + public AIEvilAttack(EntityRabbit rabbit) + { + super(rabbit, 1.4D, true); + } + + protected double getAttackReachSqr(EntityLivingBase attackTarget) + { + return (double)(4.0F + attackTarget.width); + } + } + + static class AIPanic extends EntityAIPanic + { + private final EntityRabbit rabbit; + + public AIPanic(EntityRabbit rabbit, double speedIn) + { + super(rabbit, speedIn); + this.rabbit = rabbit; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + this.rabbit.setMovementSpeed(this.speed); + } + } + + static class AIRaidFarm extends EntityAIMoveToBlock + { + private final EntityRabbit rabbit; + private boolean wantsToRaid; + private boolean canRaid; + + public AIRaidFarm(EntityRabbit rabbitIn) + { + super(rabbitIn, 0.699999988079071D, 16); + this.rabbit = rabbitIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (this.runDelay <= 0) + { + if (!net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.rabbit.world, this.rabbit)) + { + return false; + } + + this.canRaid = false; + this.wantsToRaid = this.rabbit.isCarrotEaten(); + this.wantsToRaid = true; + } + + return super.shouldExecute(); + } + + /** + * Returns whether an in-progress EntityAIBase should continue executing + */ + public boolean shouldContinueExecuting() + { + return this.canRaid && super.shouldContinueExecuting(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + super.updateTask(); + this.rabbit.getLookHelper().setLookPosition((double)this.destinationBlock.getX() + 0.5D, (double)(this.destinationBlock.getY() + 1), (double)this.destinationBlock.getZ() + 0.5D, 10.0F, (float)this.rabbit.getVerticalFaceSpeed()); + + if (this.getIsAboveDestination()) + { + World world = this.rabbit.world; + BlockPos blockpos = this.destinationBlock.up(); + IBlockState iblockstate = world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + + if (this.canRaid && block instanceof BlockCarrot) + { + Integer integer = (Integer)iblockstate.getValue(BlockCarrot.AGE); + + if (integer.intValue() == 0) + { + world.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 2); + world.destroyBlock(blockpos, true); + } + else + { + world.setBlockState(blockpos, iblockstate.withProperty(BlockCarrot.AGE, Integer.valueOf(integer.intValue() - 1)), 2); + world.playEvent(2001, blockpos, Block.getStateId(iblockstate)); + } + + this.rabbit.createEatingParticles(); + } + + this.canRaid = false; + this.runDelay = 10; + } + } + + /** + * Return true to set given position as destination + */ + protected boolean shouldMoveTo(World worldIn, BlockPos pos) + { + Block block = worldIn.getBlockState(pos).getBlock(); + + if (block == Blocks.FARMLAND && this.wantsToRaid && !this.canRaid) + { + pos = pos.up(); + IBlockState iblockstate = worldIn.getBlockState(pos); + block = iblockstate.getBlock(); + + if (block instanceof BlockCarrot && ((BlockCarrot)block).isMaxAge(iblockstate)) + { + this.canRaid = true; + return true; + } + } + + return false; + } + } + + public class RabbitJumpHelper extends EntityJumpHelper + { + private final EntityRabbit rabbit; + private boolean canJump; + + public RabbitJumpHelper(EntityRabbit rabbit) + { + super(rabbit); + this.rabbit = rabbit; + } + + public boolean getIsJumping() + { + return this.isJumping; + } + + public boolean canJump() + { + return this.canJump; + } + + public void setCanJump(boolean canJumpIn) + { + this.canJump = canJumpIn; + } + + /** + * Called to actually make the entity jump if isJumping is true. + */ + public void doJump() + { + if (this.isJumping) + { + this.rabbit.startJumping(); + this.isJumping = false; + } + } + } + + static class RabbitMoveHelper extends EntityMoveHelper + { + private final EntityRabbit rabbit; + private double nextJumpSpeed; + + public RabbitMoveHelper(EntityRabbit rabbit) + { + super(rabbit); + this.rabbit = rabbit; + } + + public void onUpdateMoveHelper() + { + if (this.rabbit.onGround && !this.rabbit.isJumping && !((EntityRabbit.RabbitJumpHelper)this.rabbit.jumpHelper).getIsJumping()) + { + this.rabbit.setMovementSpeed(0.0D); + } + else if (this.isUpdating()) + { + this.rabbit.setMovementSpeed(this.nextJumpSpeed); + } + + super.onUpdateMoveHelper(); + } + + /** + * Sets the speed and location to move to + */ + public void setMoveTo(double x, double y, double z, double speedIn) + { + if (this.rabbit.isInWater()) + { + speedIn = 1.5D; + } + + super.setMoveTo(x, y, z, speedIn); + + if (speedIn > 0.0D) + { + this.nextJumpSpeed = speedIn; + } + } + } + + public static class RabbitTypeData implements IEntityLivingData + { + public int typeData; + + public RabbitTypeData(int type) + { + this.typeData = type; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySheep.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySheep.java new file mode 100644 index 0000000..04e0f87 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySheep.java @@ -0,0 +1,468 @@ +package net.minecraft.entity.passive; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIEatGrass; +import net.minecraft.entity.ai.EntityAIFollowParent; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAIPanic; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITempt; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntitySheep extends EntityAnimal implements net.minecraftforge.common.IShearable +{ + private static final DataParameter DYE_COLOR = EntityDataManager.createKey(EntitySheep.class, DataSerializers.BYTE); + /** + * Internal crafting inventory used to check the result of mixing dyes corresponding to the fleece color when + * breeding sheep. + */ + private final InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container() + { + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return false; + } + }, 2, 1); + /** Map from EnumDyeColor to RGB values for passage to GlStateManager.color() */ + private static final Map DYE_TO_RGB = Maps.newEnumMap(EnumDyeColor.class); + /** + * Used to control movement as well as wool regrowth. Set to 40 on handleHealthUpdate and counts down with each + * tick. + */ + private int sheepTimer; + private EntityAIEatGrass entityAIEatGrass; + + private static float[] createSheepColor(EnumDyeColor p_192020_0_) + { + float[] afloat = p_192020_0_.getColorComponentValues(); + float f = 0.75F; + return new float[] {afloat[0] * 0.75F, afloat[1] * 0.75F, afloat[2] * 0.75F}; + } + + @SideOnly(Side.CLIENT) + public static float[] getDyeRgb(EnumDyeColor dyeColor) + { + return DYE_TO_RGB.get(dyeColor); + } + + public EntitySheep(World worldIn) + { + super(worldIn); + this.setSize(0.9F, 1.3F); + this.inventoryCrafting.setInventorySlotContents(0, new ItemStack(Items.DYE)); + this.inventoryCrafting.setInventorySlotContents(1, new ItemStack(Items.DYE)); + } + + protected void initEntityAI() + { + this.entityAIEatGrass = new EntityAIEatGrass(this); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 1.25D)); + this.tasks.addTask(2, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(3, new EntityAITempt(this, 1.1D, Items.WHEAT, false)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 1.1D)); + this.tasks.addTask(5, this.entityAIEatGrass); + this.tasks.addTask(6, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + } + + protected void updateAITasks() + { + this.sheepTimer = this.entityAIEatGrass.getEatingGrassTimer(); + super.updateAITasks(); + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.world.isRemote) + { + this.sheepTimer = Math.max(0, this.sheepTimer - 1); + } + + super.onLivingUpdate(); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23000000417232513D); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(DYE_COLOR, Byte.valueOf((byte)0)); + } + + @Nullable + protected ResourceLocation getLootTable() + { + if (this.getSheared()) + { + return LootTableList.ENTITIES_SHEEP; + } + else + { + switch (this.getFleeceColor()) + { + case WHITE: + default: + return LootTableList.ENTITIES_SHEEP_WHITE; + case ORANGE: + return LootTableList.ENTITIES_SHEEP_ORANGE; + case MAGENTA: + return LootTableList.ENTITIES_SHEEP_MAGENTA; + case LIGHT_BLUE: + return LootTableList.ENTITIES_SHEEP_LIGHT_BLUE; + case YELLOW: + return LootTableList.ENTITIES_SHEEP_YELLOW; + case LIME: + return LootTableList.ENTITIES_SHEEP_LIME; + case PINK: + return LootTableList.ENTITIES_SHEEP_PINK; + case GRAY: + return LootTableList.ENTITIES_SHEEP_GRAY; + case SILVER: + return LootTableList.ENTITIES_SHEEP_SILVER; + case CYAN: + return LootTableList.ENTITIES_SHEEP_CYAN; + case PURPLE: + return LootTableList.ENTITIES_SHEEP_PURPLE; + case BLUE: + return LootTableList.ENTITIES_SHEEP_BLUE; + case BROWN: + return LootTableList.ENTITIES_SHEEP_BROWN; + case GREEN: + return LootTableList.ENTITIES_SHEEP_GREEN; + case RED: + return LootTableList.ENTITIES_SHEEP_RED; + case BLACK: + return LootTableList.ENTITIES_SHEEP_BLACK; + } + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 10) + { + this.sheepTimer = 40; + } + else + { + super.handleStatusUpdate(id); + } + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (false && itemstack.getItem() == Items.SHEARS && !this.getSheared() && !this.isChild()) //Forge: Moved to onSheared + { + if (!this.world.isRemote) + { + this.setSheared(true); + int i = 1 + this.rand.nextInt(3); + + for (int j = 0; j < i; ++j) + { + EntityItem entityitem = this.entityDropItem(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, this.getFleeceColor().getMetadata()), 1.0F); + entityitem.motionY += (double)(this.rand.nextFloat() * 0.05F); + entityitem.motionX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + entityitem.motionZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + } + } + + itemstack.damageItem(1, player); + this.playSound(SoundEvents.ENTITY_SHEEP_SHEAR, 1.0F, 1.0F); + } + + return super.processInteract(player, hand); + } + + public static void registerFixesSheep(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySheep.class); + } + + @SideOnly(Side.CLIENT) + public float getHeadRotationPointY(float p_70894_1_) + { + if (this.sheepTimer <= 0) + { + return 0.0F; + } + else if (this.sheepTimer >= 4 && this.sheepTimer <= 36) + { + return 1.0F; + } + else + { + return this.sheepTimer < 4 ? ((float)this.sheepTimer - p_70894_1_) / 4.0F : -((float)(this.sheepTimer - 40) - p_70894_1_) / 4.0F; + } + } + + @SideOnly(Side.CLIENT) + public float getHeadRotationAngleX(float p_70890_1_) + { + if (this.sheepTimer > 4 && this.sheepTimer <= 36) + { + float f = ((float)(this.sheepTimer - 4) - p_70890_1_) / 32.0F; + return ((float)Math.PI / 5F) + ((float)Math.PI * 7F / 100F) * MathHelper.sin(f * 28.7F); + } + else + { + return this.sheepTimer > 0 ? ((float)Math.PI / 5F) : this.rotationPitch * 0.017453292F; + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("Sheared", this.getSheared()); + compound.setByte("Color", (byte)this.getFleeceColor().getMetadata()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setSheared(compound.getBoolean("Sheared")); + this.setFleeceColor(EnumDyeColor.byMetadata(compound.getByte("Color"))); + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SHEEP_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SHEEP_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SHEEP_DEATH; + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_SHEEP_STEP, 0.15F, 1.0F); + } + + /** + * Gets the wool color of this sheep. + */ + public EnumDyeColor getFleeceColor() + { + return EnumDyeColor.byMetadata(((Byte)this.dataManager.get(DYE_COLOR)).byteValue() & 15); + } + + /** + * Sets the wool color of this sheep + */ + public void setFleeceColor(EnumDyeColor color) + { + byte b0 = ((Byte)this.dataManager.get(DYE_COLOR)).byteValue(); + this.dataManager.set(DYE_COLOR, Byte.valueOf((byte)(b0 & 240 | color.getMetadata() & 15))); + } + + /** + * returns true if a sheeps wool has been sheared + */ + public boolean getSheared() + { + return (((Byte)this.dataManager.get(DYE_COLOR)).byteValue() & 16) != 0; + } + + /** + * make a sheep sheared if set to true + */ + public void setSheared(boolean sheared) + { + byte b0 = ((Byte)this.dataManager.get(DYE_COLOR)).byteValue(); + + if (sheared) + { + this.dataManager.set(DYE_COLOR, Byte.valueOf((byte)(b0 | 16))); + } + else + { + this.dataManager.set(DYE_COLOR, Byte.valueOf((byte)(b0 & -17))); + } + } + + /** + * Chooses a "vanilla" sheep color based on the provided random. + */ + public static EnumDyeColor getRandomSheepColor(Random random) + { + int i = random.nextInt(100); + + if (i < 5) + { + return EnumDyeColor.BLACK; + } + else if (i < 10) + { + return EnumDyeColor.GRAY; + } + else if (i < 15) + { + return EnumDyeColor.SILVER; + } + else if (i < 18) + { + return EnumDyeColor.BROWN; + } + else + { + return random.nextInt(500) == 0 ? EnumDyeColor.PINK : EnumDyeColor.WHITE; + } + } + + public EntitySheep createChild(EntityAgeable ageable) + { + EntitySheep entitysheep = (EntitySheep)ageable; + EntitySheep entitysheep1 = new EntitySheep(this.world); + entitysheep1.setFleeceColor(this.getDyeColorMixFromParents(this, entitysheep)); + return entitysheep1; + } + + /** + * This function applies the benefits of growing back wool and faster growing up to the acting entity. (This + * function is used in the AIEatGrass) + */ + public void eatGrassBonus() + { + this.setSheared(false); + + if (this.isChild()) + { + this.addGrowth(60); + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + livingdata = super.onInitialSpawn(difficulty, livingdata); + this.setFleeceColor(getRandomSheepColor(this.world.rand)); + return livingdata; + } + + @Override public boolean isShearable(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos){ return !this.getSheared() && !this.isChild(); } + @Override + public java.util.List onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune) + { + this.setSheared(true); + int i = 1 + this.rand.nextInt(3); + + java.util.List ret = new java.util.ArrayList(); + for (int j = 0; j < i; ++j) + ret.add(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, this.getFleeceColor().getMetadata())); + + this.playSound(SoundEvents.ENTITY_SHEEP_SHEAR, 1.0F, 1.0F); + return ret; + } + + /** + * Attempts to mix both parent sheep to come up with a mixed dye color. + */ + private EnumDyeColor getDyeColorMixFromParents(EntityAnimal father, EntityAnimal mother) + { + int i = ((EntitySheep)father).getFleeceColor().getDyeDamage(); + int j = ((EntitySheep)mother).getFleeceColor().getDyeDamage(); + this.inventoryCrafting.getStackInSlot(0).setItemDamage(i); + this.inventoryCrafting.getStackInSlot(1).setItemDamage(j); + ItemStack itemstack = CraftingManager.findMatchingResult(this.inventoryCrafting, ((EntitySheep)father).world); + int k; + + if (itemstack.getItem() == Items.DYE) + { + k = itemstack.getMetadata(); + } + else + { + k = this.world.rand.nextBoolean() ? i : j; + } + + return EnumDyeColor.byDyeDamage(k); + } + + public float getEyeHeight() + { + return 0.95F * this.height; + } + + static + { + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + DYE_TO_RGB.put(enumdyecolor, createSheepColor(enumdyecolor)); + } + + DYE_TO_RGB.put(EnumDyeColor.WHITE, new float[] {0.9019608F, 0.9019608F, 0.9019608F}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityShoulderRiding.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityShoulderRiding.java new file mode 100644 index 0000000..cc327bf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityShoulderRiding.java @@ -0,0 +1,46 @@ +package net.minecraft.entity.passive; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public abstract class EntityShoulderRiding extends EntityTameable +{ + private int rideCooldownCounter; + + public EntityShoulderRiding(World p_i47410_1_) + { + super(p_i47410_1_); + } + + public boolean setEntityOnShoulder(EntityPlayer p_191994_1_) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("id", this.getEntityString()); + this.writeToNBT(nbttagcompound); + + if (p_191994_1_.addShoulderEntity(nbttagcompound)) + { + this.world.removeEntity(this); + return true; + } + else + { + return false; + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + ++this.rideCooldownCounter; + super.onUpdate(); + } + + public boolean canSitOnShoulder() + { + return this.rideCooldownCounter > 100; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySkeletonHorse.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySkeletonHorse.java new file mode 100644 index 0000000..644bc6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySkeletonHorse.java @@ -0,0 +1,186 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAISkeletonRiders; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntitySkeletonHorse extends AbstractHorse +{ + private final EntityAISkeletonRiders skeletonTrapAI = new EntityAISkeletonRiders(this); + private boolean skeletonTrap; + private int skeletonTrapTime; + + public EntitySkeletonHorse(World worldIn) + { + super(worldIn); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(15.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.20000000298023224D); + this.getEntityAttribute(JUMP_STRENGTH).setBaseValue(this.getModifiedJumpStrength()); + } + + protected SoundEvent getAmbientSound() + { + super.getAmbientSound(); + return SoundEvents.ENTITY_SKELETON_HORSE_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + super.getDeathSound(); + return SoundEvents.ENTITY_SKELETON_HORSE_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + super.getHurtSound(damageSourceIn); + return SoundEvents.ENTITY_SKELETON_HORSE_HURT; + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + /** + * Returns the Y offset from the entity's position for any entity riding this one. + */ + public double getMountedYOffset() + { + return super.getMountedYOffset() - 0.1875D; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SKELETON_HORSE; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (this.isTrap() && this.skeletonTrapTime++ >= 18000) + { + this.setDead(); + } + } + + public static void registerFixesSkeletonHorse(DataFixer fixer) + { + AbstractHorse.registerFixesAbstractHorse(fixer, EntitySkeletonHorse.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("SkeletonTrap", this.isTrap()); + compound.setInteger("SkeletonTrapTime", this.skeletonTrapTime); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setTrap(compound.getBoolean("SkeletonTrap")); + this.skeletonTrapTime = compound.getInteger("SkeletonTrapTime"); + } + + public boolean isTrap() + { + return this.skeletonTrap; + } + + public void setTrap(boolean trap) + { + if (trap != this.skeletonTrap) + { + this.skeletonTrap = trap; + + if (trap) + { + this.tasks.addTask(1, this.skeletonTrapAI); + } + else + { + this.tasks.removeTask(this.skeletonTrapAI); + } + } + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + boolean flag = !itemstack.isEmpty(); + + if (flag && itemstack.getItem() == Items.SPAWN_EGG) + { + return super.processInteract(player, hand); + } + else if (!this.isTame()) + { + return false; + } + else if (this.isChild()) + { + return super.processInteract(player, hand); + } + else if (player.isSneaking()) + { + this.openGUI(player); + return true; + } + else if (this.isBeingRidden()) + { + return super.processInteract(player, hand); + } + else + { + if (flag) + { + if (itemstack.getItem() == Items.SADDLE && !this.isHorseSaddled()) + { + this.openGUI(player); + return true; + } + + if (itemstack.interactWithEntity(player, this, hand)) + { + return true; + } + } + + this.mountTo(player); + return true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySquid.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySquid.java new file mode 100644 index 0000000..7ee02e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntitySquid.java @@ -0,0 +1,282 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIBase; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntitySquid extends EntityWaterMob +{ + public float squidPitch; + public float prevSquidPitch; + public float squidYaw; + public float prevSquidYaw; + /** appears to be rotation in radians; we already have pitch & yaw, so this completes the triumvirate. */ + public float squidRotation; + /** previous squidRotation in radians */ + public float prevSquidRotation; + /** angle of the tentacles in radians */ + public float tentacleAngle; + /** the last calculated angle of the tentacles in radians */ + public float lastTentacleAngle; + private float randomMotionSpeed; + /** change in squidRotation in radians. */ + private float rotationVelocity; + private float rotateSpeed; + private float randomMotionVecX; + private float randomMotionVecY; + private float randomMotionVecZ; + + public EntitySquid(World worldIn) + { + super(worldIn); + this.setSize(0.8F, 0.8F); + this.rand.setSeed((long)(1 + this.getEntityId())); + this.rotationVelocity = 1.0F / (this.rand.nextFloat() + 1.0F) * 0.2F; + } + + public static void registerFixesSquid(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntitySquid.class); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntitySquid.AIMoveRandom(this)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D); + } + + public float getEyeHeight() + { + return this.height * 0.5F; + } + + protected SoundEvent getAmbientSound() + { + return SoundEvents.ENTITY_SQUID_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_SQUID_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_SQUID_DEATH; + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.4F; + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_SQUID; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + this.prevSquidPitch = this.squidPitch; + this.prevSquidYaw = this.squidYaw; + this.prevSquidRotation = this.squidRotation; + this.lastTentacleAngle = this.tentacleAngle; + this.squidRotation += this.rotationVelocity; + + if ((double)this.squidRotation > (Math.PI * 2D)) + { + if (this.world.isRemote) + { + this.squidRotation = ((float)Math.PI * 2F); + } + else + { + this.squidRotation = (float)((double)this.squidRotation - (Math.PI * 2D)); + + if (this.rand.nextInt(10) == 0) + { + this.rotationVelocity = 1.0F / (this.rand.nextFloat() + 1.0F) * 0.2F; + } + + this.world.setEntityState(this, (byte)19); + } + } + + if (this.inWater) + { + if (this.squidRotation < (float)Math.PI) + { + float f = this.squidRotation / (float)Math.PI; + this.tentacleAngle = MathHelper.sin(f * f * (float)Math.PI) * (float)Math.PI * 0.25F; + + if ((double)f > 0.75D) + { + this.randomMotionSpeed = 1.0F; + this.rotateSpeed = 1.0F; + } + else + { + this.rotateSpeed *= 0.8F; + } + } + else + { + this.tentacleAngle = 0.0F; + this.randomMotionSpeed *= 0.9F; + this.rotateSpeed *= 0.99F; + } + + if (!this.world.isRemote) + { + this.motionX = (double)(this.randomMotionVecX * this.randomMotionSpeed); + this.motionY = (double)(this.randomMotionVecY * this.randomMotionSpeed); + this.motionZ = (double)(this.randomMotionVecZ * this.randomMotionSpeed); + } + + float f1 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.renderYawOffset += (-((float)MathHelper.atan2(this.motionX, this.motionZ)) * (180F / (float)Math.PI) - this.renderYawOffset) * 0.1F; + this.rotationYaw = this.renderYawOffset; + this.squidYaw = (float)((double)this.squidYaw + Math.PI * (double)this.rotateSpeed * 1.5D); + this.squidPitch += (-((float)MathHelper.atan2((double)f1, this.motionY)) * (180F / (float)Math.PI) - this.squidPitch) * 0.1F; + } + else + { + this.tentacleAngle = MathHelper.abs(MathHelper.sin(this.squidRotation)) * (float)Math.PI * 0.25F; + + if (!this.world.isRemote) + { + this.motionX = 0.0D; + this.motionZ = 0.0D; + + if (this.isPotionActive(MobEffects.LEVITATION)) + { + this.motionY += 0.05D * (double)(this.getActivePotionEffect(MobEffects.LEVITATION).getAmplifier() + 1) - this.motionY; + } + else if (!this.hasNoGravity()) + { + this.motionY -= 0.08D; + } + + this.motionY *= 0.9800000190734863D; + } + + this.squidPitch = (float)((double)this.squidPitch + (double)(-90.0F - this.squidPitch) * 0.02D); + } + } + + public void travel(float strafe, float vertical, float forward) + { + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return this.posY > 45.0D && this.posY < (double)this.world.getSeaLevel() && super.getCanSpawnHere(); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 19) + { + this.squidRotation = 0.0F; + } + else + { + super.handleStatusUpdate(id); + } + } + + public void setMovementVector(float randomMotionVecXIn, float randomMotionVecYIn, float randomMotionVecZIn) + { + this.randomMotionVecX = randomMotionVecXIn; + this.randomMotionVecY = randomMotionVecYIn; + this.randomMotionVecZ = randomMotionVecZIn; + } + + public boolean hasMovementVector() + { + return this.randomMotionVecX != 0.0F || this.randomMotionVecY != 0.0F || this.randomMotionVecZ != 0.0F; + } + + static class AIMoveRandom extends EntityAIBase + { + private final EntitySquid squid; + + public AIMoveRandom(EntitySquid p_i45859_1_) + { + this.squid = p_i45859_1_; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + return true; + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + int i = this.squid.getIdleTime(); + + if (i > 100) + { + this.squid.setMovementVector(0.0F, 0.0F, 0.0F); + } + else if (this.squid.getRNG().nextInt(50) == 0 || !this.squid.inWater || !this.squid.hasMovementVector()) + { + float f = this.squid.getRNG().nextFloat() * ((float)Math.PI * 2F); + float f1 = MathHelper.cos(f) * 0.2F; + float f2 = -0.1F + this.squid.getRNG().nextFloat() * 0.2F; + float f3 = MathHelper.sin(f) * 0.2F; + this.squid.setMovementVector(f1, f2, f3); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityTameable.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityTameable.java new file mode 100644 index 0000000..9b61299 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityTameable.java @@ -0,0 +1,296 @@ +package net.minecraft.entity.passive; + +import com.google.common.base.Optional; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityOwnable; +import net.minecraft.entity.ai.EntityAISit; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.scoreboard.Team; +import net.minecraft.server.management.PreYggdrasilConverter; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityTameable extends EntityAnimal implements IEntityOwnable +{ + protected static final DataParameter TAMED = EntityDataManager.createKey(EntityTameable.class, DataSerializers.BYTE); + protected static final DataParameter> OWNER_UNIQUE_ID = EntityDataManager.>createKey(EntityTameable.class, DataSerializers.OPTIONAL_UNIQUE_ID); + protected EntityAISit aiSit; + + public EntityTameable(World worldIn) + { + super(worldIn); + this.setupTamedAI(); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(TAMED, Byte.valueOf((byte)0)); + this.dataManager.register(OWNER_UNIQUE_ID, Optional.absent()); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (this.getOwnerId() == null) + { + compound.setString("OwnerUUID", ""); + } + else + { + compound.setString("OwnerUUID", this.getOwnerId().toString()); + } + + compound.setBoolean("Sitting", this.isSitting()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + String s; + + if (compound.hasKey("OwnerUUID", 8)) + { + s = compound.getString("OwnerUUID"); + } + else + { + String s1 = compound.getString("Owner"); + s = PreYggdrasilConverter.convertMobOwnerIfNeeded(this.getServer(), s1); + } + + if (!s.isEmpty()) + { + try + { + this.setOwnerId(UUID.fromString(s)); + this.setTamed(true); + } + catch (Throwable var4) + { + this.setTamed(false); + } + } + + if (this.aiSit != null) + { + this.aiSit.setSitting(compound.getBoolean("Sitting")); + } + + this.setSitting(compound.getBoolean("Sitting")); + } + + public boolean canBeLeashedTo(EntityPlayer player) + { + return !this.getLeashed(); + } + + /** + * Play the taming effect, will either be hearts or smoke depending on status + */ + protected void playTameEffect(boolean play) + { + EnumParticleTypes enumparticletypes = EnumParticleTypes.HEART; + + if (!play) + { + enumparticletypes = EnumParticleTypes.SMOKE_NORMAL; + } + + for (int i = 0; i < 7; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(enumparticletypes, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d0, d1, d2); + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 7) + { + this.playTameEffect(true); + } + else if (id == 6) + { + this.playTameEffect(false); + } + else + { + super.handleStatusUpdate(id); + } + } + + public boolean isTamed() + { + return (((Byte)this.dataManager.get(TAMED)).byteValue() & 4) != 0; + } + + public void setTamed(boolean tamed) + { + byte b0 = ((Byte)this.dataManager.get(TAMED)).byteValue(); + + if (tamed) + { + this.dataManager.set(TAMED, Byte.valueOf((byte)(b0 | 4))); + } + else + { + this.dataManager.set(TAMED, Byte.valueOf((byte)(b0 & -5))); + } + + this.setupTamedAI(); + } + + protected void setupTamedAI() + { + } + + public boolean isSitting() + { + return (((Byte)this.dataManager.get(TAMED)).byteValue() & 1) != 0; + } + + public void setSitting(boolean sitting) + { + byte b0 = ((Byte)this.dataManager.get(TAMED)).byteValue(); + + if (sitting) + { + this.dataManager.set(TAMED, Byte.valueOf((byte)(b0 | 1))); + } + else + { + this.dataManager.set(TAMED, Byte.valueOf((byte)(b0 & -2))); + } + } + + @Nullable + public UUID getOwnerId() + { + return (UUID)((Optional)this.dataManager.get(OWNER_UNIQUE_ID)).orNull(); + } + + public void setOwnerId(@Nullable UUID p_184754_1_) + { + this.dataManager.set(OWNER_UNIQUE_ID, Optional.fromNullable(p_184754_1_)); + } + + public void setTamedBy(EntityPlayer player) + { + this.setTamed(true); + this.setOwnerId(player.getUniqueID()); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.TAME_ANIMAL.trigger((EntityPlayerMP)player, this); + } + } + + @Nullable + public EntityLivingBase getOwner() + { + try + { + UUID uuid = this.getOwnerId(); + return uuid == null ? null : this.world.getPlayerEntityByUUID(uuid); + } + catch (IllegalArgumentException var2) + { + return null; + } + } + + public boolean isOwner(EntityLivingBase entityIn) + { + return entityIn == this.getOwner(); + } + + /** + * Returns the AITask responsible of the sit logic + */ + public EntityAISit getAISit() + { + return this.aiSit; + } + + public boolean shouldAttackEntity(EntityLivingBase target, EntityLivingBase owner) + { + return true; + } + + public Team getTeam() + { + if (this.isTamed()) + { + EntityLivingBase entitylivingbase = this.getOwner(); + + if (entitylivingbase != null) + { + return entitylivingbase.getTeam(); + } + } + + return super.getTeam(); + } + + /** + * Returns whether this Entity is on the same team as the given Entity. + */ + public boolean isOnSameTeam(Entity entityIn) + { + if (this.isTamed()) + { + EntityLivingBase entitylivingbase = this.getOwner(); + + if (entityIn == entitylivingbase) + { + return true; + } + + if (entitylivingbase != null) + { + return entitylivingbase.isOnSameTeam(entityIn); + } + } + + return super.isOnSameTeam(entityIn); + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + if (!this.world.isRemote && this.world.getGameRules().getBoolean("showDeathMessages") && this.getOwner() instanceof EntityPlayerMP) + { + this.getOwner().sendMessage(this.getCombatTracker().getDeathMessage()); + } + + super.onDeath(cause); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityVillager.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityVillager.java new file mode 100644 index 0000000..5f22a8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityVillager.java @@ -0,0 +1,1287 @@ +package net.minecraft.entity.passive; + +import java.util.Locale; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentData; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.INpc; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIFollowGolem; +import net.minecraft.entity.ai.EntityAIHarvestFarmland; +import net.minecraft.entity.ai.EntityAILookAtTradePlayer; +import net.minecraft.entity.ai.EntityAIMoveIndoors; +import net.minecraft.entity.ai.EntityAIMoveTowardsRestriction; +import net.minecraft.entity.ai.EntityAIOpenDoor; +import net.minecraft.entity.ai.EntityAIPlay; +import net.minecraft.entity.ai.EntityAIRestrictOpenDoor; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITradePlayer; +import net.minecraft.entity.ai.EntityAIVillagerInteract; +import net.minecraft.entity.ai.EntityAIVillagerMate; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityAIWatchClosest2; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntityEvoker; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.entity.monster.EntityVindicator; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.IMob; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemEnchantedBook; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.pathfinding.PathNavigateGround; +import net.minecraft.potion.PotionEffect; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Team; +import net.minecraft.stats.StatList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.Tuple; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.DataFixesManager; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.village.Village; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.World; +import net.minecraft.world.storage.MapData; +import net.minecraft.world.storage.MapDecoration; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityVillager extends EntityAgeable implements INpc, IMerchant +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final DataParameter PROFESSION = EntityDataManager.createKey(EntityVillager.class, DataSerializers.VARINT); + private int randomTickDivider; + private boolean isMating; + private boolean isPlaying; + Village village; + /** This villager's current customer. */ + @Nullable + private EntityPlayer buyingPlayer; + /** Initialises the MerchantRecipeList.java */ + @Nullable + private MerchantRecipeList buyingList; + private int timeUntilReset; + /** addDefaultEquipmentAndRecipies is called if this is true */ + private boolean needsInitilization; + private boolean isWillingToMate; + private int wealth; + /** Last player to trade with this villager, used for aggressivity. */ + private java.util.UUID lastBuyingPlayer; + private int careerId; + /** This is the EntityVillager's career level value */ + private int careerLevel; + private boolean isLookingForHome; + private boolean areAdditionalTasksSet; + private final InventoryBasic villagerInventory; + /** A multi-dimensional array mapping the various professions, careers and career levels that a Villager may offer */ + private static final EntityVillager.ITradeList[][][][] DEFAULT_TRADE_LIST_MAP = new EntityVillager.ITradeList[][][][] {{{{new EntityVillager.EmeraldForItems(Items.WHEAT, new EntityVillager.PriceInfo(18, 22)), new EntityVillager.EmeraldForItems(Items.POTATO, new EntityVillager.PriceInfo(15, 19)), new EntityVillager.EmeraldForItems(Items.CARROT, new EntityVillager.PriceInfo(15, 19)), new EntityVillager.ListItemForEmeralds(Items.BREAD, new EntityVillager.PriceInfo(-4, -2))}, {new EntityVillager.EmeraldForItems(Item.getItemFromBlock(Blocks.PUMPKIN), new EntityVillager.PriceInfo(8, 13)), new EntityVillager.ListItemForEmeralds(Items.PUMPKIN_PIE, new EntityVillager.PriceInfo(-3, -2))}, {new EntityVillager.EmeraldForItems(Item.getItemFromBlock(Blocks.MELON_BLOCK), new EntityVillager.PriceInfo(7, 12)), new EntityVillager.ListItemForEmeralds(Items.APPLE, new EntityVillager.PriceInfo(-7, -5))}, {new EntityVillager.ListItemForEmeralds(Items.COOKIE, new EntityVillager.PriceInfo(-10, -6)), new EntityVillager.ListItemForEmeralds(Items.CAKE, new EntityVillager.PriceInfo(1, 1))}}, {{new EntityVillager.EmeraldForItems(Items.STRING, new EntityVillager.PriceInfo(15, 20)), new EntityVillager.EmeraldForItems(Items.COAL, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ItemAndEmeraldToItem(Items.FISH, new EntityVillager.PriceInfo(6, 6), Items.COOKED_FISH, new EntityVillager.PriceInfo(6, 6))}, {new EntityVillager.ListEnchantedItemForEmeralds(Items.FISHING_ROD, new EntityVillager.PriceInfo(7, 8))}}, {{new EntityVillager.EmeraldForItems(Item.getItemFromBlock(Blocks.WOOL), new EntityVillager.PriceInfo(16, 22)), new EntityVillager.ListItemForEmeralds(Items.SHEARS, new EntityVillager.PriceInfo(3, 4))}, {new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL)), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 1), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 2), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 3), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 4), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 5), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 6), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 7), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 8), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 9), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 10), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 11), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 12), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 13), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 14), new EntityVillager.PriceInfo(1, 2)), new EntityVillager.ListItemForEmeralds(new ItemStack(Item.getItemFromBlock(Blocks.WOOL), 1, 15), new EntityVillager.PriceInfo(1, 2))}}, {{new EntityVillager.EmeraldForItems(Items.STRING, new EntityVillager.PriceInfo(15, 20)), new EntityVillager.ListItemForEmeralds(Items.ARROW, new EntityVillager.PriceInfo(-12, -8))}, {new EntityVillager.ListItemForEmeralds(Items.BOW, new EntityVillager.PriceInfo(2, 3)), new EntityVillager.ItemAndEmeraldToItem(Item.getItemFromBlock(Blocks.GRAVEL), new EntityVillager.PriceInfo(10, 10), Items.FLINT, new EntityVillager.PriceInfo(6, 10))}}}, {{{new EntityVillager.EmeraldForItems(Items.PAPER, new EntityVillager.PriceInfo(24, 36)), new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.EmeraldForItems(Items.BOOK, new EntityVillager.PriceInfo(8, 10)), new EntityVillager.ListItemForEmeralds(Items.COMPASS, new EntityVillager.PriceInfo(10, 12)), new EntityVillager.ListItemForEmeralds(Item.getItemFromBlock(Blocks.BOOKSHELF), new EntityVillager.PriceInfo(3, 4))}, {new EntityVillager.EmeraldForItems(Items.WRITTEN_BOOK, new EntityVillager.PriceInfo(2, 2)), new EntityVillager.ListItemForEmeralds(Items.CLOCK, new EntityVillager.PriceInfo(10, 12)), new EntityVillager.ListItemForEmeralds(Item.getItemFromBlock(Blocks.GLASS), new EntityVillager.PriceInfo(-5, -3))}, {new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.ListEnchantedBookForEmeralds()}, {new EntityVillager.ListItemForEmeralds(Items.NAME_TAG, new EntityVillager.PriceInfo(20, 22))}}, {{new EntityVillager.EmeraldForItems(Items.PAPER, new EntityVillager.PriceInfo(24, 36))}, {new EntityVillager.EmeraldForItems(Items.COMPASS, new EntityVillager.PriceInfo(1, 1))}, {new EntityVillager.ListItemForEmeralds(Items.MAP, new EntityVillager.PriceInfo(7, 11))}, {new EntityVillager.TreasureMapForEmeralds(new EntityVillager.PriceInfo(12, 20), "Monument", MapDecoration.Type.MONUMENT), new EntityVillager.TreasureMapForEmeralds(new EntityVillager.PriceInfo(16, 28), "Mansion", MapDecoration.Type.MANSION)}}}, {{{new EntityVillager.EmeraldForItems(Items.ROTTEN_FLESH, new EntityVillager.PriceInfo(36, 40)), new EntityVillager.EmeraldForItems(Items.GOLD_INGOT, new EntityVillager.PriceInfo(8, 10))}, {new EntityVillager.ListItemForEmeralds(Items.REDSTONE, new EntityVillager.PriceInfo(-4, -1)), new EntityVillager.ListItemForEmeralds(new ItemStack(Items.DYE, 1, EnumDyeColor.BLUE.getDyeDamage()), new EntityVillager.PriceInfo(-2, -1))}, {new EntityVillager.ListItemForEmeralds(Items.ENDER_PEARL, new EntityVillager.PriceInfo(4, 7)), new EntityVillager.ListItemForEmeralds(Item.getItemFromBlock(Blocks.GLOWSTONE), new EntityVillager.PriceInfo(-3, -1))}, {new EntityVillager.ListItemForEmeralds(Items.EXPERIENCE_BOTTLE, new EntityVillager.PriceInfo(3, 11))}}}, {{{new EntityVillager.EmeraldForItems(Items.COAL, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.IRON_HELMET, new EntityVillager.PriceInfo(4, 6))}, {new EntityVillager.EmeraldForItems(Items.IRON_INGOT, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListItemForEmeralds(Items.IRON_CHESTPLATE, new EntityVillager.PriceInfo(10, 14))}, {new EntityVillager.EmeraldForItems(Items.DIAMOND, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.DIAMOND_CHESTPLATE, new EntityVillager.PriceInfo(16, 19))}, {new EntityVillager.ListItemForEmeralds(Items.CHAINMAIL_BOOTS, new EntityVillager.PriceInfo(5, 7)), new EntityVillager.ListItemForEmeralds(Items.CHAINMAIL_LEGGINGS, new EntityVillager.PriceInfo(9, 11)), new EntityVillager.ListItemForEmeralds(Items.CHAINMAIL_HELMET, new EntityVillager.PriceInfo(5, 7)), new EntityVillager.ListItemForEmeralds(Items.CHAINMAIL_CHESTPLATE, new EntityVillager.PriceInfo(11, 15))}}, {{new EntityVillager.EmeraldForItems(Items.COAL, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.IRON_AXE, new EntityVillager.PriceInfo(6, 8))}, {new EntityVillager.EmeraldForItems(Items.IRON_INGOT, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListEnchantedItemForEmeralds(Items.IRON_SWORD, new EntityVillager.PriceInfo(9, 10))}, {new EntityVillager.EmeraldForItems(Items.DIAMOND, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.DIAMOND_SWORD, new EntityVillager.PriceInfo(12, 15)), new EntityVillager.ListEnchantedItemForEmeralds(Items.DIAMOND_AXE, new EntityVillager.PriceInfo(9, 12))}}, {{new EntityVillager.EmeraldForItems(Items.COAL, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListEnchantedItemForEmeralds(Items.IRON_SHOVEL, new EntityVillager.PriceInfo(5, 7))}, {new EntityVillager.EmeraldForItems(Items.IRON_INGOT, new EntityVillager.PriceInfo(7, 9)), new EntityVillager.ListEnchantedItemForEmeralds(Items.IRON_PICKAXE, new EntityVillager.PriceInfo(9, 11))}, {new EntityVillager.EmeraldForItems(Items.DIAMOND, new EntityVillager.PriceInfo(3, 4)), new EntityVillager.ListEnchantedItemForEmeralds(Items.DIAMOND_PICKAXE, new EntityVillager.PriceInfo(12, 15))}}}, {{{new EntityVillager.EmeraldForItems(Items.PORKCHOP, new EntityVillager.PriceInfo(14, 18)), new EntityVillager.EmeraldForItems(Items.CHICKEN, new EntityVillager.PriceInfo(14, 18))}, {new EntityVillager.EmeraldForItems(Items.COAL, new EntityVillager.PriceInfo(16, 24)), new EntityVillager.ListItemForEmeralds(Items.COOKED_PORKCHOP, new EntityVillager.PriceInfo(-7, -5)), new EntityVillager.ListItemForEmeralds(Items.COOKED_CHICKEN, new EntityVillager.PriceInfo(-8, -6))}}, {{new EntityVillager.EmeraldForItems(Items.LEATHER, new EntityVillager.PriceInfo(9, 12)), new EntityVillager.ListItemForEmeralds(Items.LEATHER_LEGGINGS, new EntityVillager.PriceInfo(2, 4))}, {new EntityVillager.ListEnchantedItemForEmeralds(Items.LEATHER_CHESTPLATE, new EntityVillager.PriceInfo(7, 12))}, {new EntityVillager.ListItemForEmeralds(Items.SADDLE, new EntityVillager.PriceInfo(8, 10))}}}, {new EntityVillager.ITradeList[0][]}}; + + public EntityVillager(World worldIn) + { + this(worldIn, 0); + } + + public EntityVillager(World worldIn, int professionId) + { + super(worldIn); + this.villagerInventory = new InventoryBasic("Items", false, 8); + this.setProfession(professionId); + this.setSize(0.6F, 1.95F); + ((PathNavigateGround)this.getNavigator()).setBreakDoors(true); + this.setCanPickUpLoot(true); + } + + protected void initEntityAI() + { + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIAvoidEntity(this, EntityZombie.class, 8.0F, 0.6D, 0.6D)); + this.tasks.addTask(1, new EntityAIAvoidEntity(this, EntityEvoker.class, 12.0F, 0.8D, 0.8D)); + this.tasks.addTask(1, new EntityAIAvoidEntity(this, EntityVindicator.class, 8.0F, 0.8D, 0.8D)); + this.tasks.addTask(1, new EntityAIAvoidEntity(this, EntityVex.class, 8.0F, 0.6D, 0.6D)); + this.tasks.addTask(1, new EntityAITradePlayer(this)); + this.tasks.addTask(1, new EntityAILookAtTradePlayer(this)); + this.tasks.addTask(2, new EntityAIMoveIndoors(this)); + this.tasks.addTask(3, new EntityAIRestrictOpenDoor(this)); + this.tasks.addTask(4, new EntityAIOpenDoor(this, true)); + this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 0.6D)); + this.tasks.addTask(6, new EntityAIVillagerMate(this)); + this.tasks.addTask(7, new EntityAIFollowGolem(this)); + this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(9, new EntityAIVillagerInteract(this)); + this.tasks.addTask(9, new EntityAIWanderAvoidWater(this, 0.6D)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + } + + private void setAdditionalAItasks() + { + if (!this.areAdditionalTasksSet) + { + this.areAdditionalTasksSet = true; + + if (this.isChild()) + { + this.tasks.addTask(8, new EntityAIPlay(this, 0.32D)); + } + else if (this.getProfession() == 0) + { + this.tasks.addTask(6, new EntityAIHarvestFarmland(this, 0.6D)); + } + } + } + + /** + * This is called when Entity's growing age timer reaches 0 (negative values are considered as a child, positive as + * an adult) + */ + protected void onGrowingAdult() + { + if (this.getProfession() == 0) + { + this.tasks.addTask(8, new EntityAIHarvestFarmland(this, 0.6D)); + } + + super.onGrowingAdult(); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D); + } + + protected void updateAITasks() + { + if (--this.randomTickDivider <= 0) + { + BlockPos blockpos = new BlockPos(this); + this.world.getVillageCollection().addToVillagerPositionList(blockpos); + this.randomTickDivider = 70 + this.rand.nextInt(50); + this.village = this.world.getVillageCollection().getNearestVillage(blockpos, 32); + + if (this.village == null) + { + this.detachHome(); + } + else + { + BlockPos blockpos1 = this.village.getCenter(); + this.setHomePosAndDistance(blockpos1, this.village.getVillageRadius()); + + if (this.isLookingForHome) + { + this.isLookingForHome = false; + this.village.setDefaultPlayerReputation(5); + } + } + } + + if (!this.isTrading() && this.timeUntilReset > 0) + { + --this.timeUntilReset; + + if (this.timeUntilReset <= 0) + { + if (this.needsInitilization) + { + for (MerchantRecipe merchantrecipe : this.buyingList) + { + if (merchantrecipe.isRecipeDisabled()) + { + merchantrecipe.increaseMaxTradeUses(this.rand.nextInt(6) + this.rand.nextInt(6) + 2); + } + } + + this.populateBuyingList(); + this.needsInitilization = false; + + if (this.village != null && this.lastBuyingPlayer != null) + { + this.world.setEntityState(this, (byte)14); + this.village.modifyPlayerReputation(this.lastBuyingPlayer, 1); + } + } + + this.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 200, 0)); + } + } + + super.updateAITasks(); + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + boolean flag = itemstack.getItem() == Items.NAME_TAG; + + if (flag) + { + itemstack.interactWithEntity(player, this, hand); + return true; + } + else if (!this.holdingSpawnEggOfClass(itemstack, this.getClass()) && this.isEntityAlive() && !this.isTrading() && !this.isChild() && !player.isSneaking()) + { + if (this.buyingList == null) + { + this.populateBuyingList(); + } + + if (hand == EnumHand.MAIN_HAND) + { + player.addStat(StatList.TALKED_TO_VILLAGER); + } + + if (!this.world.isRemote && !this.buyingList.isEmpty()) + { + this.setCustomer(player); + player.displayVillagerTradeGui(this); + } + else if (this.buyingList.isEmpty()) + { + return super.processInteract(player, hand); + } + + return true; + } + else + { + return super.processInteract(player, hand); + } + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(PROFESSION, Integer.valueOf(0)); + } + + public static void registerFixesVillager(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityVillager.class); + fixer.registerWalker(FixTypes.ENTITY, new ItemStackDataLists(EntityVillager.class, new String[] {"Inventory"})); + fixer.registerWalker(FixTypes.ENTITY, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if (EntityList.getKey(EntityVillager.class).equals(new ResourceLocation(compound.getString("id"))) && compound.hasKey("Offers", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("Offers"); + + if (nbttagcompound.hasKey("Recipes", 9)) + { + NBTTagList nbttaglist = nbttagcompound.getTagList("Recipes", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + DataFixesManager.processItemStack(fixer, nbttagcompound1, versionIn, "buy"); + DataFixesManager.processItemStack(fixer, nbttagcompound1, versionIn, "buyB"); + DataFixesManager.processItemStack(fixer, nbttagcompound1, versionIn, "sell"); + nbttaglist.set(i, nbttagcompound1); + } + } + } + + return compound; + } + }); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Profession", this.getProfession()); + compound.setString("ProfessionName", this.getProfessionForge().getRegistryName().toString()); + compound.setInteger("Riches", this.wealth); + compound.setInteger("Career", this.careerId); + compound.setInteger("CareerLevel", this.careerLevel); + compound.setBoolean("Willing", this.isWillingToMate); + + if (this.buyingList != null) + { + compound.setTag("Offers", this.buyingList.getRecipiesAsTags()); + } + + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + nbttaglist.appendTag(itemstack.writeToNBT(new NBTTagCompound())); + } + } + + compound.setTag("Inventory", nbttaglist); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setProfession(compound.getInteger("Profession")); + if (compound.hasKey("ProfessionName")) + { + net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession p = + net.minecraftforge.fml.common.registry.ForgeRegistries.VILLAGER_PROFESSIONS.getValue(new net.minecraft.util.ResourceLocation(compound.getString("ProfessionName"))); + if (p == null) + p = net.minecraftforge.fml.common.registry.ForgeRegistries.VILLAGER_PROFESSIONS.getValue(new net.minecraft.util.ResourceLocation("minecraft:farmer")); + this.setProfession(p); + } + this.wealth = compound.getInteger("Riches"); + this.careerId = compound.getInteger("Career"); + this.careerLevel = compound.getInteger("CareerLevel"); + this.isWillingToMate = compound.getBoolean("Willing"); + + if (compound.hasKey("Offers", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("Offers"); + this.buyingList = new MerchantRecipeList(nbttagcompound); + } + + NBTTagList nbttaglist = compound.getTagList("Inventory", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + ItemStack itemstack = new ItemStack(nbttaglist.getCompoundTagAt(i)); + + if (!itemstack.isEmpty()) + { + this.villagerInventory.addItem(itemstack); + } + } + + this.setCanPickUpLoot(true); + this.setAdditionalAItasks(); + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return false; + } + + protected SoundEvent getAmbientSound() + { + return this.isTrading() ? SoundEvents.ENTITY_VILLAGER_TRADING : SoundEvents.ENTITY_VILLAGER_AMBIENT; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_VILLAGER_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_VILLAGER_DEATH; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_VILLAGER; + } + + public void setProfession(int professionId) + { + this.dataManager.set(PROFESSION, Integer.valueOf(professionId)); + net.minecraftforge.fml.common.registry.VillagerRegistry.onSetProfession(this, professionId); + } + + @Deprecated //Use Forge Variant below + public int getProfession() + { + return Math.max(((Integer)this.dataManager.get(PROFESSION)).intValue(), 0); + } + + private net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession prof; + public void setProfession(net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession prof) + { + this.prof = prof; + this.setProfession(net.minecraftforge.fml.common.registry.VillagerRegistry.getId(prof)); + } + + public net.minecraftforge.fml.common.registry.VillagerRegistry.VillagerProfession getProfessionForge() + { + if (this.prof == null) + { + this.prof = net.minecraftforge.fml.common.registry.VillagerRegistry.getById(this.getProfession()); + if (this.prof == null) + return net.minecraftforge.fml.common.registry.VillagerRegistry.getById(0); //Farmer + } + return this.prof; + } + + @Override + public void notifyDataManagerChange(DataParameter key) + { + super.notifyDataManagerChange(key); + if (key.equals(PROFESSION)) + { + net.minecraftforge.fml.common.registry.VillagerRegistry.onSetProfession(this, this.dataManager.get(PROFESSION)); + } + } + + public boolean isMating() + { + return this.isMating; + } + + public void setMating(boolean mating) + { + this.isMating = mating; + } + + public void setPlaying(boolean playing) + { + this.isPlaying = playing; + } + + public boolean isPlaying() + { + return this.isPlaying; + } + + /** + * Hint to AI tasks that we were attacked by the passed EntityLivingBase and should retaliate. Is not guaranteed to + * change our actual active target (for example if we are currently busy attacking someone else) + */ + public void setRevengeTarget(@Nullable EntityLivingBase livingBase) + { + super.setRevengeTarget(livingBase); + + if (this.village != null && livingBase != null) + { + this.village.addOrRenewAgressor(livingBase); + + if (livingBase instanceof EntityPlayer) + { + int i = -1; + + if (this.isChild()) + { + i = -3; + } + + this.village.modifyPlayerReputation(livingBase.getUniqueID(), i); + + if (this.isEntityAlive()) + { + this.world.setEntityState(this, (byte)13); + } + } + } + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + if (this.village != null) + { + Entity entity = cause.getTrueSource(); + + if (entity != null) + { + if (entity instanceof EntityPlayer) + { + this.village.modifyPlayerReputation(entity.getUniqueID(), -2); + } + else if (entity instanceof IMob) + { + this.village.endMatingSeason(); + } + } + else + { + EntityPlayer entityplayer = this.world.getClosestPlayerToEntity(this, 16.0D); + + if (entityplayer != null) + { + this.village.endMatingSeason(); + } + } + } + + super.onDeath(cause); + } + + public void setCustomer(@Nullable EntityPlayer player) + { + this.buyingPlayer = player; + } + + @Nullable + public EntityPlayer getCustomer() + { + return this.buyingPlayer; + } + + public boolean isTrading() + { + return this.buyingPlayer != null; + } + + /** + * Returns current or updated value of {@link #isWillingToMate} + */ + public boolean getIsWillingToMate(boolean updateFirst) + { + if (!this.isWillingToMate && updateFirst && this.hasEnoughFoodToBreed()) + { + boolean flag = false; + + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == Items.BREAD && itemstack.getCount() >= 3) + { + flag = true; + this.villagerInventory.decrStackSize(i, 3); + } + else if ((itemstack.getItem() == Items.POTATO || itemstack.getItem() == Items.CARROT) && itemstack.getCount() >= 12) + { + flag = true; + this.villagerInventory.decrStackSize(i, 12); + } + } + + if (flag) + { + this.world.setEntityState(this, (byte)18); + this.isWillingToMate = true; + break; + } + } + } + + return this.isWillingToMate; + } + + public void setIsWillingToMate(boolean isWillingToMate) + { + this.isWillingToMate = isWillingToMate; + } + + public void useRecipe(MerchantRecipe recipe) + { + recipe.incrementToolUses(); + this.livingSoundTime = -this.getTalkInterval(); + this.playSound(SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch()); + int i = 3 + this.rand.nextInt(4); + + if (recipe.getToolUses() == 1 || this.rand.nextInt(5) == 0) + { + this.timeUntilReset = 40; + this.needsInitilization = true; + this.isWillingToMate = true; + + if (this.buyingPlayer != null) + { + this.lastBuyingPlayer = this.buyingPlayer.getUniqueID(); + } + else + { + this.lastBuyingPlayer = null; + } + + i += 5; + } + + if (recipe.getItemToBuy().getItem() == Items.EMERALD) + { + this.wealth += recipe.getItemToBuy().getCount(); + } + + if (recipe.getRewardsExp()) + { + this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY + 0.5D, this.posZ, i)); + } + + if (this.buyingPlayer instanceof EntityPlayerMP) + { + CriteriaTriggers.VILLAGER_TRADE.trigger((EntityPlayerMP)this.buyingPlayer, this, recipe.getItemToSell()); + } + } + + /** + * Notifies the merchant of a possible merchantrecipe being fulfilled or not. Usually, this is just a sound byte + * being played depending if the suggested itemstack is not null. + */ + public void verifySellingItem(ItemStack stack) + { + if (!this.world.isRemote && this.livingSoundTime > -this.getTalkInterval() + 20) + { + this.livingSoundTime = -this.getTalkInterval(); + this.playSound(stack.isEmpty() ? SoundEvents.ENTITY_VILLAGER_NO : SoundEvents.ENTITY_VILLAGER_YES, this.getSoundVolume(), this.getSoundPitch()); + } + } + + @Nullable + public MerchantRecipeList getRecipes(EntityPlayer player) + { + if (this.buyingList == null) + { + this.populateBuyingList(); + } + + return this.buyingList; + } + + private void populateBuyingList() + { + if (this.careerId != 0 && this.careerLevel != 0) + { + ++this.careerLevel; + } + else + { + this.careerId = this.getProfessionForge().getRandomCareer(this.rand) + 1; + this.careerLevel = 1; + } + + if (this.buyingList == null) + { + this.buyingList = new MerchantRecipeList(); + } + + int i = this.careerId - 1; + int j = this.careerLevel - 1; + java.util.List trades = this.getProfessionForge().getCareer(i).getTrades(j); + + if (trades != null) + { + for (EntityVillager.ITradeList entityvillager$itradelist : trades) + { + entityvillager$itradelist.addMerchantRecipe(this, this.buyingList, this.rand); + } + } + } + + @SideOnly(Side.CLIENT) + public void setRecipes(@Nullable MerchantRecipeList recipeList) + { + } + + public World getWorld() + { + return this.world; + } + + public BlockPos getPos() + { + return new BlockPos(this); + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + Team team = this.getTeam(); + String s = this.getCustomNameTag(); + + if (s != null && !s.isEmpty()) + { + TextComponentString textcomponentstring = new TextComponentString(ScorePlayerTeam.formatPlayerName(team, s)); + textcomponentstring.getStyle().setHoverEvent(this.getHoverEvent()); + textcomponentstring.getStyle().setInsertion(this.getCachedUniqueIdString()); + return textcomponentstring; + } + else + { + if (this.buyingList == null) + { + this.populateBuyingList(); + } + + String s1 = null; + + switch (this.getProfession()) + { + case 0: + + if (this.careerId == 1) + { + s1 = "farmer"; + } + else if (this.careerId == 2) + { + s1 = "fisherman"; + } + else if (this.careerId == 3) + { + s1 = "shepherd"; + } + else if (this.careerId == 4) + { + s1 = "fletcher"; + } + + break; + case 1: + + if (this.careerId == 1) + { + s1 = "librarian"; + } + else if (this.careerId == 2) + { + s1 = "cartographer"; + } + + break; + case 2: + s1 = "cleric"; + break; + case 3: + + if (this.careerId == 1) + { + s1 = "armor"; + } + else if (this.careerId == 2) + { + s1 = "weapon"; + } + else if (this.careerId == 3) + { + s1 = "tool"; + } + + break; + case 4: + + if (this.careerId == 1) + { + s1 = "butcher"; + } + else if (this.careerId == 2) + { + s1 = "leather"; + } + + break; + case 5: + s1 = "nitwit"; + } + + s1 = this.getProfessionForge().getCareer(this.careerId-1).getName(); + { + ITextComponent itextcomponent = new TextComponentTranslation("entity.Villager." + s1, new Object[0]); + itextcomponent.getStyle().setHoverEvent(this.getHoverEvent()); + itextcomponent.getStyle().setInsertion(this.getCachedUniqueIdString()); + + if (team != null) + { + itextcomponent.getStyle().setColor(team.getColor()); + } + + return itextcomponent; + } + } + } + + public float getEyeHeight() + { + return this.isChild() ? 0.81F : 1.62F; + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 12) + { + this.spawnParticles(EnumParticleTypes.HEART); + } + else if (id == 13) + { + this.spawnParticles(EnumParticleTypes.VILLAGER_ANGRY); + } + else if (id == 14) + { + this.spawnParticles(EnumParticleTypes.VILLAGER_HAPPY); + } + else + { + super.handleStatusUpdate(id); + } + } + + @SideOnly(Side.CLIENT) + private void spawnParticles(EnumParticleTypes particleType) + { + for (int i = 0; i < 5; ++i) + { + double d0 = this.rand.nextGaussian() * 0.02D; + double d1 = this.rand.nextGaussian() * 0.02D; + double d2 = this.rand.nextGaussian() * 0.02D; + this.world.spawnParticle(particleType, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 1.0D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d0, d1, d2); + } + } + + /** + * Called only once on an entity when first time spawned, via egg, mob spawner, natural spawning etc, but not called + * when entity is reloaded from nbt. Mainly used for initializing attributes and inventory + */ + @Nullable + public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) + { + return this.finalizeMobSpawn(difficulty, livingdata, true); + } + + public IEntityLivingData finalizeMobSpawn(DifficultyInstance p_190672_1_, @Nullable IEntityLivingData p_190672_2_, boolean p_190672_3_) + { + p_190672_2_ = super.onInitialSpawn(p_190672_1_, p_190672_2_); + + if (p_190672_3_) + { + net.minecraftforge.fml.common.registry.VillagerRegistry.setRandomProfession(this, this.world.rand); + } + + this.setAdditionalAItasks(); + this.populateBuyingList(); + return p_190672_2_; + } + + public void setLookingForHome() + { + this.isLookingForHome = true; + } + + public EntityVillager createChild(EntityAgeable ageable) + { + EntityVillager entityvillager = new EntityVillager(this.world); + entityvillager.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entityvillager)), (IEntityLivingData)null); + return entityvillager; + } + + public boolean canBeLeashedTo(EntityPlayer player) + { + return false; + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt lightningBolt) + { + if (!this.world.isRemote && !this.isDead) + { + EntityWitch entitywitch = new EntityWitch(this.world); + entitywitch.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + entitywitch.onInitialSpawn(this.world.getDifficultyForLocation(new BlockPos(entitywitch)), (IEntityLivingData)null); + entitywitch.setNoAI(this.isAIDisabled()); + + if (this.hasCustomName()) + { + entitywitch.setCustomNameTag(this.getCustomNameTag()); + entitywitch.setAlwaysRenderNameTag(this.getAlwaysRenderNameTag()); + } + + this.world.spawnEntity(entitywitch); + this.setDead(); + } + } + + public InventoryBasic getVillagerInventory() + { + return this.villagerInventory; + } + + /** + * Tests if this entity should pickup a weapon or an armor. Entity drops current weapon or armor if the new one is + * better. + */ + protected void updateEquipmentIfNeeded(EntityItem itemEntity) + { + ItemStack itemstack = itemEntity.getItem(); + Item item = itemstack.getItem(); + + if (this.canVillagerPickupItem(item)) + { + ItemStack itemstack1 = this.villagerInventory.addItem(itemstack); + + if (itemstack1.isEmpty()) + { + itemEntity.setDead(); + } + else + { + itemstack.setCount(itemstack1.getCount()); + } + } + } + + private boolean canVillagerPickupItem(Item itemIn) + { + return itemIn == Items.BREAD || itemIn == Items.POTATO || itemIn == Items.CARROT || itemIn == Items.WHEAT || itemIn == Items.WHEAT_SEEDS || itemIn == Items.BEETROOT || itemIn == Items.BEETROOT_SEEDS; + } + + public boolean hasEnoughFoodToBreed() + { + return this.hasEnoughItems(1); + } + + /** + * Used by {@link net.minecraft.entity.ai.EntityAIVillagerInteract EntityAIVillagerInteract} to check if the + * villager can give some items from an inventory to another villager. + */ + public boolean canAbondonItems() + { + return this.hasEnoughItems(2); + } + + public boolean wantsMoreFood() + { + boolean flag = this.getProfession() == 0; + + if (flag) + { + return !this.hasEnoughItems(5); + } + else + { + return !this.hasEnoughItems(1); + } + } + + /** + * Returns true if villager has enough items in inventory + */ + private boolean hasEnoughItems(int multiplier) + { + boolean flag = this.getProfession() == 0; + + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == Items.BREAD && itemstack.getCount() >= 3 * multiplier || itemstack.getItem() == Items.POTATO && itemstack.getCount() >= 12 * multiplier || itemstack.getItem() == Items.CARROT && itemstack.getCount() >= 12 * multiplier || itemstack.getItem() == Items.BEETROOT && itemstack.getCount() >= 12 * multiplier) + { + return true; + } + + if (flag && itemstack.getItem() == Items.WHEAT && itemstack.getCount() >= 9 * multiplier) + { + return true; + } + } + } + + return false; + } + + /** + * Returns true if villager has seeds, potatoes or carrots in inventory + */ + public boolean isFarmItemInInventory() + { + for (int i = 0; i < this.villagerInventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.villagerInventory.getStackInSlot(i); + + if (!itemstack.isEmpty() && (itemstack.getItem() == Items.WHEAT_SEEDS || itemstack.getItem() == Items.POTATO || itemstack.getItem() == Items.CARROT || itemstack.getItem() == Items.BEETROOT_SEEDS)) + { + return true; + } + } + + return false; + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + if (super.replaceItemInInventory(inventorySlot, itemStackIn)) + { + return true; + } + else + { + int i = inventorySlot - 300; + + if (i >= 0 && i < this.villagerInventory.getSizeInventory()) + { + this.villagerInventory.setInventorySlotContents(i, itemStackIn); + return true; + } + else + { + return false; + } + } + } + + public static class EmeraldForItems implements EntityVillager.ITradeList + { + public Item buyingItem; + public EntityVillager.PriceInfo price; + + public EmeraldForItems(Item itemIn, EntityVillager.PriceInfo priceIn) + { + this.buyingItem = itemIn; + this.price = priceIn; + } + + public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.price != null) + { + i = this.price.getPrice(random); + } + + recipeList.add(new MerchantRecipe(new ItemStack(this.buyingItem, i, 0), Items.EMERALD)); + } + } + + public interface ITradeList + { + void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random); + } + + public static class ItemAndEmeraldToItem implements EntityVillager.ITradeList + { + /** + * The itemstack to buy with an emerald. The Item and damage value is used only, any tag data is not + * retained. + */ + public ItemStack buyingItemStack; + /** The price info defining the amount of the buying item required with 1 emerald to match the selling item. */ + public EntityVillager.PriceInfo buyingPriceInfo; + /** The itemstack to sell. The item and damage value are used only, any tag data is not retained. */ + public ItemStack sellingItemstack; + public EntityVillager.PriceInfo sellingPriceInfo; + + public ItemAndEmeraldToItem(Item p_i45813_1_, EntityVillager.PriceInfo p_i45813_2_, Item p_i45813_3_, EntityVillager.PriceInfo p_i45813_4_) + { + this.buyingItemStack = new ItemStack(p_i45813_1_); + this.buyingPriceInfo = p_i45813_2_; + this.sellingItemstack = new ItemStack(p_i45813_3_); + this.sellingPriceInfo = p_i45813_4_; + } + + public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random) + { + int i = this.buyingPriceInfo.getPrice(random); + int j = this.sellingPriceInfo.getPrice(random); + recipeList.add(new MerchantRecipe(new ItemStack(this.buyingItemStack.getItem(), i, this.buyingItemStack.getMetadata()), new ItemStack(Items.EMERALD), new ItemStack(this.sellingItemstack.getItem(), j, this.sellingItemstack.getMetadata()))); + } + } + + public static class ListEnchantedBookForEmeralds implements EntityVillager.ITradeList + { + public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random) + { + Enchantment enchantment = (Enchantment)Enchantment.REGISTRY.getRandomObject(random); + int i = MathHelper.getInt(random, enchantment.getMinLevel(), enchantment.getMaxLevel()); + ItemStack itemstack = ItemEnchantedBook.getEnchantedItemStack(new EnchantmentData(enchantment, i)); + int j = 2 + random.nextInt(5 + i * 10) + 3 * i; + + if (enchantment.isTreasureEnchantment()) + { + j *= 2; + } + + if (j > 64) + { + j = 64; + } + + recipeList.add(new MerchantRecipe(new ItemStack(Items.BOOK), new ItemStack(Items.EMERALD, j), itemstack)); + } + } + + public static class ListEnchantedItemForEmeralds implements EntityVillager.ITradeList + { + /** The enchanted item stack to sell */ + public ItemStack enchantedItemStack; + /** The price info determining the amount of emeralds to trade in for the enchanted item */ + public EntityVillager.PriceInfo priceInfo; + + public ListEnchantedItemForEmeralds(Item p_i45814_1_, EntityVillager.PriceInfo p_i45814_2_) + { + this.enchantedItemStack = new ItemStack(p_i45814_1_); + this.priceInfo = p_i45814_2_; + } + + public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.priceInfo != null) + { + i = this.priceInfo.getPrice(random); + } + + ItemStack itemstack = new ItemStack(Items.EMERALD, i, 0); + ItemStack itemstack1 = EnchantmentHelper.addRandomEnchantment(random, new ItemStack(this.enchantedItemStack.getItem(), 1, this.enchantedItemStack.getMetadata()), 5 + random.nextInt(15), false); + recipeList.add(new MerchantRecipe(itemstack, itemstack1)); + } + } + //MODDERS DO NOT USE OR EDIT THIS IN ANY WAY IT WILL HAVE NO EFFECT, THIS IS JUST IN HERE TO ALLOW FORGE TO ACCESS IT + @Deprecated + public static ITradeList[][][][] GET_TRADES_DONT_USE(){ return DEFAULT_TRADE_LIST_MAP; } + + public static class ListItemForEmeralds implements EntityVillager.ITradeList + { + /** The item that is being bought for emeralds */ + public ItemStack itemToBuy; + /** + * The price info for the amount of emeralds to sell for, or if negative, the amount of the item to buy for + * an emerald. + */ + public EntityVillager.PriceInfo priceInfo; + + public ListItemForEmeralds(Item par1Item, EntityVillager.PriceInfo priceInfo) + { + this.itemToBuy = new ItemStack(par1Item); + this.priceInfo = priceInfo; + } + + public ListItemForEmeralds(ItemStack stack, EntityVillager.PriceInfo priceInfo) + { + this.itemToBuy = stack; + this.priceInfo = priceInfo; + } + + public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random) + { + int i = 1; + + if (this.priceInfo != null) + { + i = this.priceInfo.getPrice(random); + } + + ItemStack itemstack; + ItemStack itemstack1; + + if (i < 0) + { + itemstack = new ItemStack(Items.EMERALD); + itemstack1 = new ItemStack(this.itemToBuy.getItem(), -i, this.itemToBuy.getMetadata()); + } + else + { + itemstack = new ItemStack(Items.EMERALD, i, 0); + itemstack1 = new ItemStack(this.itemToBuy.getItem(), 1, this.itemToBuy.getMetadata()); + } + + recipeList.add(new MerchantRecipe(itemstack, itemstack1)); + } + } + + public static class PriceInfo extends Tuple + { + public PriceInfo(int p_i45810_1_, int p_i45810_2_) + { + super(Integer.valueOf(p_i45810_1_), Integer.valueOf(p_i45810_2_)); + + if (p_i45810_2_ < p_i45810_1_) + { + EntityVillager.LOGGER.warn("PriceRange({}, {}) invalid, {} smaller than {}", Integer.valueOf(p_i45810_1_), Integer.valueOf(p_i45810_2_), Integer.valueOf(p_i45810_2_), Integer.valueOf(p_i45810_1_)); + } + } + + public int getPrice(Random rand) + { + return ((Integer)this.getFirst()).intValue() >= ((Integer)this.getSecond()).intValue() ? ((Integer)this.getFirst()).intValue() : ((Integer)this.getFirst()).intValue() + rand.nextInt(((Integer)this.getSecond()).intValue() - ((Integer)this.getFirst()).intValue() + 1); + } + } + + static class TreasureMapForEmeralds implements EntityVillager.ITradeList + { + public EntityVillager.PriceInfo value; + public String destination; + public MapDecoration.Type destinationType; + + public TreasureMapForEmeralds(EntityVillager.PriceInfo p_i47340_1_, String p_i47340_2_, MapDecoration.Type p_i47340_3_) + { + this.value = p_i47340_1_; + this.destination = p_i47340_2_; + this.destinationType = p_i47340_3_; + } + + public void addMerchantRecipe(IMerchant merchant, MerchantRecipeList recipeList, Random random) + { + int i = this.value.getPrice(random); + World world = merchant.getWorld(); + BlockPos blockpos = world.findNearestStructure(this.destination, merchant.getPos(), true); + + if (blockpos != null) + { + ItemStack itemstack = ItemMap.setupNewMap(world, (double)blockpos.getX(), (double)blockpos.getZ(), (byte)2, true, true); + ItemMap.renderBiomePreviewMap(world, itemstack); + MapData.addTargetDecoration(itemstack, blockpos, "+", this.destinationType); + itemstack.setTranslatableName("filled_map." + this.destination.toLowerCase(Locale.ROOT)); + recipeList.add(new MerchantRecipe(new ItemStack(Items.EMERALD, i), new ItemStack(Items.COMPASS), itemstack)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityWaterMob.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityWaterMob.java new file mode 100644 index 0000000..f26cfb7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityWaterMob.java @@ -0,0 +1,89 @@ +package net.minecraft.entity.passive; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public abstract class EntityWaterMob extends EntityLiving implements IAnimals +{ + public EntityWaterMob(World worldIn) + { + super(worldIn); + } + + public boolean canBreatheUnderwater() + { + return true; + } + + /** + * Checks if the entity's current position is a valid location to spawn this entity. + */ + public boolean getCanSpawnHere() + { + return true; + } + + /** + * Checks that the entity is not colliding with any blocks / liquids + */ + public boolean isNotColliding() + { + return this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this); + } + + /** + * Get number of ticks, at least during which the living entity will be silent. + */ + public int getTalkInterval() + { + return 120; + } + + /** + * Determines if an entity can be despawned, used on idle far away entities + */ + protected boolean canDespawn() + { + return true; + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + return 1 + this.world.rand.nextInt(3); + } + + /** + * Gets called every tick from main Entity class + */ + public void onEntityUpdate() + { + int i = this.getAir(); + super.onEntityUpdate(); + + if (this.isEntityAlive() && !this.isInWater()) + { + --i; + this.setAir(i); + + if (this.getAir() == -20) + { + this.setAir(0); + this.attackEntityFrom(DamageSource.DROWN, 2.0F); + } + } + else + { + this.setAir(300); + } + } + + public boolean isPushedByWater() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityWolf.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityWolf.java new file mode 100644 index 0000000..b98bd48 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityWolf.java @@ -0,0 +1,721 @@ +package net.minecraft.entity.passive; + +import com.google.common.base.Predicate; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIAttackMelee; +import net.minecraft.entity.ai.EntityAIAvoidEntity; +import net.minecraft.entity.ai.EntityAIBeg; +import net.minecraft.entity.ai.EntityAIFollowOwner; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILeapAtTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAIMate; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAIOwnerHurtByTarget; +import net.minecraft.entity.ai.EntityAIOwnerHurtTarget; +import net.minecraft.entity.ai.EntityAISit; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAITargetNonTamed; +import net.minecraft.entity.ai.EntityAIWanderAvoidWater; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.monster.AbstractSkeleton; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityWolf extends EntityTameable +{ + private static final DataParameter DATA_HEALTH_ID = EntityDataManager.createKey(EntityWolf.class, DataSerializers.FLOAT); + private static final DataParameter BEGGING = EntityDataManager.createKey(EntityWolf.class, DataSerializers.BOOLEAN); + private static final DataParameter COLLAR_COLOR = EntityDataManager.createKey(EntityWolf.class, DataSerializers.VARINT); + /** Float used to smooth the rotation of the wolf head */ + private float headRotationCourse; + private float headRotationCourseOld; + /** true is the wolf is wet else false */ + private boolean isWet; + /** True if the wolf is shaking else False */ + private boolean isShaking; + /** This time increases while wolf is shaking and emitting water particles. */ + private float timeWolfIsShaking; + private float prevTimeWolfIsShaking; + + public EntityWolf(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 0.85F); + this.setTamed(false); + } + + protected void initEntityAI() + { + this.aiSit = new EntityAISit(this); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(3, new EntityWolf.AIAvoidEntity(this, EntityLlama.class, 24.0F, 1.5D, 1.5D)); + this.tasks.addTask(4, new EntityAILeapAtTarget(this, 0.4F)); + this.tasks.addTask(5, new EntityAIAttackMelee(this, 1.0D, true)); + this.tasks.addTask(6, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); + this.tasks.addTask(7, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(8, new EntityAIWanderAvoidWater(this, 1.0D)); + this.tasks.addTask(9, new EntityAIBeg(this, 8.0F)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(10, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); + this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); + this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true, new Class[0])); + this.targetTasks.addTask(4, new EntityAITargetNonTamed(this, EntityAnimal.class, false, new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof EntitySheep || p_apply_1_ instanceof EntityRabbit; + } + })); + this.targetTasks.addTask(5, new EntityAINearestAttackableTarget(this, AbstractSkeleton.class, false)); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D); + + if (this.isTamed()) + { + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(20.0D); + } + else + { + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D); + } + + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(2.0D); + } + + /** + * Sets the active target the Task system uses for tracking + */ + public void setAttackTarget(@Nullable EntityLivingBase entitylivingbaseIn) + { + super.setAttackTarget(entitylivingbaseIn); + + if (entitylivingbaseIn == null) + { + this.setAngry(false); + } + else if (!this.isTamed()) + { + this.setAngry(true); + } + } + + protected void updateAITasks() + { + this.dataManager.set(DATA_HEALTH_ID, Float.valueOf(this.getHealth())); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(DATA_HEALTH_ID, Float.valueOf(this.getHealth())); + this.dataManager.register(BEGGING, Boolean.valueOf(false)); + this.dataManager.register(COLLAR_COLOR, Integer.valueOf(EnumDyeColor.RED.getDyeDamage())); + } + + protected void playStepSound(BlockPos pos, Block blockIn) + { + this.playSound(SoundEvents.ENTITY_WOLF_STEP, 0.15F, 1.0F); + } + + public static void registerFixesWolf(DataFixer fixer) + { + EntityLiving.registerFixesMob(fixer, EntityWolf.class); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setBoolean("Angry", this.isAngry()); + compound.setByte("CollarColor", (byte)this.getCollarColor().getDyeDamage()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setAngry(compound.getBoolean("Angry")); + + if (compound.hasKey("CollarColor", 99)) + { + this.setCollarColor(EnumDyeColor.byDyeDamage(compound.getByte("CollarColor"))); + } + } + + protected SoundEvent getAmbientSound() + { + if (this.isAngry()) + { + return SoundEvents.ENTITY_WOLF_GROWL; + } + else if (this.rand.nextInt(3) == 0) + { + return this.isTamed() && ((Float)this.dataManager.get(DATA_HEALTH_ID)).floatValue() < 10.0F ? SoundEvents.ENTITY_WOLF_WHINE : SoundEvents.ENTITY_WOLF_PANT; + } + else + { + return SoundEvents.ENTITY_WOLF_AMBIENT; + } + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + return SoundEvents.ENTITY_WOLF_HURT; + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_WOLF_DEATH; + } + + /** + * Returns the volume for the sounds this mob makes. + */ + protected float getSoundVolume() + { + return 0.4F; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_WOLF; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + super.onLivingUpdate(); + + if (!this.world.isRemote && this.isWet && !this.isShaking && !this.hasPath() && this.onGround) + { + this.isShaking = true; + this.timeWolfIsShaking = 0.0F; + this.prevTimeWolfIsShaking = 0.0F; + this.world.setEntityState(this, (byte)8); + } + + if (!this.world.isRemote && this.getAttackTarget() == null && this.isAngry()) + { + this.setAngry(false); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + this.headRotationCourseOld = this.headRotationCourse; + + if (this.isBegging()) + { + this.headRotationCourse += (1.0F - this.headRotationCourse) * 0.4F; + } + else + { + this.headRotationCourse += (0.0F - this.headRotationCourse) * 0.4F; + } + + if (this.isWet()) + { + this.isWet = true; + this.isShaking = false; + this.timeWolfIsShaking = 0.0F; + this.prevTimeWolfIsShaking = 0.0F; + } + else if ((this.isWet || this.isShaking) && this.isShaking) + { + if (this.timeWolfIsShaking == 0.0F) + { + this.playSound(SoundEvents.ENTITY_WOLF_SHAKE, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + this.prevTimeWolfIsShaking = this.timeWolfIsShaking; + this.timeWolfIsShaking += 0.05F; + + if (this.prevTimeWolfIsShaking >= 2.0F) + { + this.isWet = false; + this.isShaking = false; + this.prevTimeWolfIsShaking = 0.0F; + this.timeWolfIsShaking = 0.0F; + } + + if (this.timeWolfIsShaking > 0.4F) + { + float f = (float)this.getEntityBoundingBox().minY; + int i = (int)(MathHelper.sin((this.timeWolfIsShaking - 0.4F) * (float)Math.PI) * 7.0F); + + for (int j = 0; j < i; ++j) + { + float f1 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; + float f2 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; + this.world.spawnParticle(EnumParticleTypes.WATER_SPLASH, this.posX + (double)f1, (double)(f + 0.8F), this.posZ + (double)f2, this.motionX, this.motionY, this.motionZ); + } + } + } + } + + /** + * True if the wolf is wet + */ + @SideOnly(Side.CLIENT) + public boolean isWolfWet() + { + return this.isWet; + } + + /** + * Used when calculating the amount of shading to apply while the wolf is wet. + */ + @SideOnly(Side.CLIENT) + public float getShadingWhileWet(float p_70915_1_) + { + return 0.75F + (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * p_70915_1_) / 2.0F * 0.25F; + } + + @SideOnly(Side.CLIENT) + public float getShakeAngle(float p_70923_1_, float p_70923_2_) + { + float f = (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * p_70923_1_ + p_70923_2_) / 1.8F; + + if (f < 0.0F) + { + f = 0.0F; + } + else if (f > 1.0F) + { + f = 1.0F; + } + + return MathHelper.sin(f * (float)Math.PI) * MathHelper.sin(f * (float)Math.PI * 11.0F) * 0.15F * (float)Math.PI; + } + + @SideOnly(Side.CLIENT) + public float getInterestedAngle(float p_70917_1_) + { + return (this.headRotationCourseOld + (this.headRotationCourse - this.headRotationCourseOld) * p_70917_1_) * 0.15F * (float)Math.PI; + } + + public float getEyeHeight() + { + return this.height * 0.8F; + } + + /** + * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently + * use in wolves. + */ + public int getVerticalFaceSpeed() + { + return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + Entity entity = source.getTrueSource(); + + if (this.aiSit != null) + { + this.aiSit.setSitting(false); + } + + if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow)) + { + amount = (amount + 1.0F) / 2.0F; + } + + return super.attackEntityFrom(source, amount); + } + } + + public boolean attackEntityAsMob(Entity entityIn) + { + boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float)((int)this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue())); + + if (flag) + { + this.applyEnchantments(this, entityIn); + } + + return flag; + } + + public void setTamed(boolean tamed) + { + super.setTamed(tamed); + + if (tamed) + { + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(20.0D); + } + else + { + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(8.0D); + } + + this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(4.0D); + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (this.isTamed()) + { + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() instanceof ItemFood) + { + ItemFood itemfood = (ItemFood)itemstack.getItem(); + + if (itemfood.isWolfsFavoriteMeat() && ((Float)this.dataManager.get(DATA_HEALTH_ID)).floatValue() < 20.0F) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + this.heal((float)itemfood.getHealAmount(itemstack)); + return true; + } + } + else if (itemstack.getItem() == Items.DYE) + { + EnumDyeColor enumdyecolor = EnumDyeColor.byDyeDamage(itemstack.getMetadata()); + + if (enumdyecolor != this.getCollarColor()) + { + this.setCollarColor(enumdyecolor); + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return true; + } + } + } + + if (this.isOwner(player) && !this.world.isRemote && !this.isBreedingItem(itemstack)) + { + this.aiSit.setSitting(!this.isSitting()); + this.isJumping = false; + this.navigator.clearPath(); + this.setAttackTarget((EntityLivingBase)null); + } + } + else if (itemstack.getItem() == Items.BONE && !this.isAngry()) + { + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + if (!this.world.isRemote) + { + if (this.rand.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, player)) + { + this.setTamedBy(player); + this.navigator.clearPath(); + this.setAttackTarget((EntityLivingBase)null); + this.aiSit.setSitting(true); + this.setHealth(20.0F); + this.playTameEffect(true); + this.world.setEntityState(this, (byte)7); + } + else + { + this.playTameEffect(false); + this.world.setEntityState(this, (byte)6); + } + } + + return true; + } + + return super.processInteract(player, hand); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 8) + { + this.isShaking = true; + this.timeWolfIsShaking = 0.0F; + this.prevTimeWolfIsShaking = 0.0F; + } + else + { + super.handleStatusUpdate(id); + } + } + + @SideOnly(Side.CLIENT) + public float getTailRotation() + { + if (this.isAngry()) + { + return 1.5393804F; + } + else + { + return this.isTamed() ? (0.55F - (this.getMaxHealth() - ((Float)this.dataManager.get(DATA_HEALTH_ID)).floatValue()) * 0.02F) * (float)Math.PI : ((float)Math.PI / 5F); + } + } + + /** + * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on + * the animal type) + */ + public boolean isBreedingItem(ItemStack stack) + { + return stack.getItem() instanceof ItemFood && ((ItemFood)stack.getItem()).isWolfsFavoriteMeat(); + } + + /** + * Will return how many at most can spawn in a chunk at once. + */ + public int getMaxSpawnedInChunk() + { + return 8; + } + + /** + * Determines whether this wolf is angry or not. + */ + public boolean isAngry() + { + return (((Byte)this.dataManager.get(TAMED)).byteValue() & 2) != 0; + } + + /** + * Sets whether this wolf is angry or not. + */ + public void setAngry(boolean angry) + { + byte b0 = ((Byte)this.dataManager.get(TAMED)).byteValue(); + + if (angry) + { + this.dataManager.set(TAMED, Byte.valueOf((byte)(b0 | 2))); + } + else + { + this.dataManager.set(TAMED, Byte.valueOf((byte)(b0 & -3))); + } + } + + public EnumDyeColor getCollarColor() + { + return EnumDyeColor.byDyeDamage(((Integer)this.dataManager.get(COLLAR_COLOR)).intValue() & 15); + } + + public void setCollarColor(EnumDyeColor collarcolor) + { + this.dataManager.set(COLLAR_COLOR, Integer.valueOf(collarcolor.getDyeDamage())); + } + + public EntityWolf createChild(EntityAgeable ageable) + { + EntityWolf entitywolf = new EntityWolf(this.world); + UUID uuid = this.getOwnerId(); + + if (uuid != null) + { + entitywolf.setOwnerId(uuid); + entitywolf.setTamed(true); + } + + return entitywolf; + } + + public void setBegging(boolean beg) + { + this.dataManager.set(BEGGING, Boolean.valueOf(beg)); + } + + /** + * Returns true if the mob is currently able to mate with the specified mob. + */ + public boolean canMateWith(EntityAnimal otherAnimal) + { + if (otherAnimal == this) + { + return false; + } + else if (!this.isTamed()) + { + return false; + } + else if (!(otherAnimal instanceof EntityWolf)) + { + return false; + } + else + { + EntityWolf entitywolf = (EntityWolf)otherAnimal; + + if (!entitywolf.isTamed()) + { + return false; + } + else if (entitywolf.isSitting()) + { + return false; + } + else + { + return this.isInLove() && entitywolf.isInLove(); + } + } + } + + public boolean isBegging() + { + return ((Boolean)this.dataManager.get(BEGGING)).booleanValue(); + } + + public boolean shouldAttackEntity(EntityLivingBase target, EntityLivingBase owner) + { + if (!(target instanceof EntityCreeper) && !(target instanceof EntityGhast)) + { + if (target instanceof EntityWolf) + { + EntityWolf entitywolf = (EntityWolf)target; + + if (entitywolf.isTamed() && entitywolf.getOwner() == owner) + { + return false; + } + } + + if (target instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer)owner).canAttackPlayer((EntityPlayer)target)) + { + return false; + } + else + { + return !(target instanceof AbstractHorse) || !((AbstractHorse)target).isTame(); + } + } + else + { + return false; + } + } + + public boolean canBeLeashedTo(EntityPlayer player) + { + return !this.isAngry() && super.canBeLeashedTo(player); + } + + class AIAvoidEntity extends EntityAIAvoidEntity + { + private final EntityWolf wolf; + + public AIAvoidEntity(EntityWolf wolfIn, Class p_i47251_3_, float p_i47251_4_, double p_i47251_5_, double p_i47251_7_) + { + super(wolfIn, p_i47251_3_, p_i47251_4_, p_i47251_5_, p_i47251_7_); + this.wolf = wolfIn; + } + + /** + * Returns whether the EntityAIBase should begin execution. + */ + public boolean shouldExecute() + { + if (super.shouldExecute() && this.closestLivingEntity instanceof EntityLlama) + { + return !this.wolf.isTamed() && this.avoidLlama((EntityLlama)this.closestLivingEntity); + } + else + { + return false; + } + } + + private boolean avoidLlama(EntityLlama p_190854_1_) + { + return p_190854_1_.getStrength() >= EntityWolf.this.rand.nextInt(5); + } + + /** + * Execute a one shot task or start executing a continuous task + */ + public void startExecuting() + { + EntityWolf.this.setAttackTarget((EntityLivingBase)null); + super.startExecuting(); + } + + /** + * Keep ticking a continuous task that has already been started + */ + public void updateTask() + { + EntityWolf.this.setAttackTarget((EntityLivingBase)null); + super.updateTask(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityZombieHorse.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityZombieHorse.java new file mode 100644 index 0000000..738c4f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/EntityZombieHorse.java @@ -0,0 +1,116 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraft.world.storage.loot.LootTableList; + +public class EntityZombieHorse extends AbstractHorse +{ + public EntityZombieHorse(World worldIn) + { + super(worldIn); + } + + public static void registerFixesZombieHorse(DataFixer fixer) + { + AbstractHorse.registerFixesAbstractHorse(fixer, EntityZombieHorse.class); + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(15.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.20000000298023224D); + this.getEntityAttribute(JUMP_STRENGTH).setBaseValue(this.getModifiedJumpStrength()); + } + + /** + * Get this Entity's EnumCreatureAttribute + */ + public EnumCreatureAttribute getCreatureAttribute() + { + return EnumCreatureAttribute.UNDEAD; + } + + protected SoundEvent getAmbientSound() + { + super.getAmbientSound(); + return SoundEvents.ENTITY_ZOMBIE_HORSE_AMBIENT; + } + + protected SoundEvent getDeathSound() + { + super.getDeathSound(); + return SoundEvents.ENTITY_ZOMBIE_HORSE_DEATH; + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + super.getHurtSound(damageSourceIn); + return SoundEvents.ENTITY_ZOMBIE_HORSE_HURT; + } + + @Nullable + protected ResourceLocation getLootTable() + { + return LootTableList.ENTITIES_ZOMBIE_HORSE; + } + + public boolean processInteract(EntityPlayer player, EnumHand hand) + { + ItemStack itemstack = player.getHeldItem(hand); + boolean flag = !itemstack.isEmpty(); + + if (flag && itemstack.getItem() == Items.SPAWN_EGG) + { + return super.processInteract(player, hand); + } + else if (!this.isTame()) + { + return false; + } + else if (this.isChild()) + { + return super.processInteract(player, hand); + } + else if (player.isSneaking()) + { + this.openGUI(player); + return true; + } + else if (this.isBeingRidden()) + { + return super.processInteract(player, hand); + } + else + { + if (flag) + { + if (!this.isHorseSaddled() && itemstack.getItem() == Items.SADDLE) + { + this.openGUI(player); + return true; + } + + if (itemstack.interactWithEntity(player, this, hand)) + { + return true; + } + } + + this.mountTo(player); + return true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/HorseArmorType.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/HorseArmorType.java new file mode 100644 index 0000000..c8242a1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/HorseArmorType.java @@ -0,0 +1,112 @@ +package net.minecraft.entity.passive; + +import javax.annotation.Nullable; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public enum HorseArmorType +{ + NONE(0), + IRON(5, "iron", "meo"), + GOLD(7, "gold", "goo"), + DIAMOND(11, "diamond", "dio"); + + private final String textureName; + private final String hash; + private final int protection; + + private HorseArmorType(int armorStrengthIn) + { + this.protection = armorStrengthIn; + this.textureName = null; + this.hash = ""; + } + + private HorseArmorType(int armorStrengthIn, String p_i46800_4_, String p_i46800_5_) + { + this.protection = armorStrengthIn; + this.textureName = "textures/entity/horse/armor/horse_armor_" + p_i46800_4_ + ".png"; + this.hash = p_i46800_5_; + } + + public int getOrdinal() + { + return this.ordinal(); + } + + @SideOnly(Side.CLIENT) + public String getHash() + { + return this.hash; + } + + public int getProtection() + { + return this.protection; + } + + @Nullable + @SideOnly(Side.CLIENT) + public String getTextureName() + { + return this.textureName; + } + + @Deprecated /**Forge: Use getByName. Ordinals of mod-added enum constants are dependent on load order, unlike names.**/ + public static HorseArmorType getByOrdinal(int ordinal) + { + return values()[ordinal]; + } + + public static HorseArmorType getByItemStack(ItemStack stack) + { + return stack.getItem().getHorseArmorType(stack); + } + + @Deprecated //Forge: Use getByItemStack + public static HorseArmorType getByItem(Item itemIn) + { + if (itemIn == Items.IRON_HORSE_ARMOR) + { + return IRON; + } + else if (itemIn == Items.GOLDEN_HORSE_ARMOR) + { + return GOLD; + } + else + { + return itemIn == Items.DIAMOND_HORSE_ARMOR ? DIAMOND : NONE; + } + } + + @Deprecated //Forge: Use ItemStack sensitive overload + public static boolean isHorseArmor(Item itemIn) + { + return getByItem(itemIn) != NONE; + } + + /* ======================================== FORGE START ======================================== */ + //Allows for textures located outside the vanilla horse armor folder + private HorseArmorType(String defaultTextureLocation, int armorStrengthIn) + { + this.protection = armorStrengthIn; + this.textureName = defaultTextureLocation; + this.hash = "forge"; + } + + public static HorseArmorType getByName(String name) + { + HorseArmorType type = HorseArmorType.valueOf(name); + return type != null ? type : NONE; + } + + public static boolean isHorseArmor(ItemStack stack) + { + return getByItemStack(stack) != NONE; + } + /* ======================================== FORGE END ======================================== */ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/IAnimals.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/IAnimals.java new file mode 100644 index 0000000..d3d8677 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/IAnimals.java @@ -0,0 +1,5 @@ +package net.minecraft.entity.passive; + +public interface IAnimals +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/passive/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/package-info.java new file mode 100644 index 0000000..4ff8429 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/passive/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.passive; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/player/EntityPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/player/EntityPlayer.java new file mode 100644 index 0000000..590b3cc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/player/EntityPlayer.java @@ -0,0 +1,3025 @@ +package net.minecraft.entity.player; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBed; +import net.minecraft.block.BlockHorizontal; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.IEntityMultiPart; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.MultiPartEntityPart; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.monster.EntityMob; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.passive.EntityParrot; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryEnderChest; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemAxe; +import net.minecraft.item.ItemElytra; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketEntityVelocity; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.scoreboard.Team; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.CooldownTracker; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.FoodStats; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.DataFixesManager; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.IInteractionObject; +import net.minecraft.world.LockCode; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SuppressWarnings("incomplete-switch") +public abstract class EntityPlayer extends EntityLivingBase +{ + public static final String PERSISTED_NBT_TAG = "PlayerPersisted"; + protected java.util.HashMap spawnChunkMap = new java.util.HashMap(); + protected java.util.HashMap spawnForcedMap = new java.util.HashMap(); + public float eyeHeight = this.getDefaultEyeHeight(); + public static final net.minecraft.entity.ai.attributes.IAttribute REACH_DISTANCE = new net.minecraft.entity.ai.attributes.RangedAttribute(null, "generic.reachDistance", 5.0D, 0.0D, 1024.0D).setShouldWatch(true); + + /** The absorption data parameter */ + private static final DataParameter ABSORPTION = EntityDataManager.createKey(EntityPlayer.class, DataSerializers.FLOAT); + private static final DataParameter PLAYER_SCORE = EntityDataManager.createKey(EntityPlayer.class, DataSerializers.VARINT); + protected static final DataParameter PLAYER_MODEL_FLAG = EntityDataManager.createKey(EntityPlayer.class, DataSerializers.BYTE); + protected static final DataParameter MAIN_HAND = EntityDataManager.createKey(EntityPlayer.class, DataSerializers.BYTE); + protected static final DataParameter LEFT_SHOULDER_ENTITY = EntityDataManager.createKey(EntityPlayer.class, DataSerializers.COMPOUND_TAG); + protected static final DataParameter RIGHT_SHOULDER_ENTITY = EntityDataManager.createKey(EntityPlayer.class, DataSerializers.COMPOUND_TAG); + /** Inventory of the player */ + public InventoryPlayer inventory = new InventoryPlayer(this); + protected InventoryEnderChest enderChest = new InventoryEnderChest(); + /** The Container for the player's inventory (which opens when they press E) */ + public Container inventoryContainer; + /** The Container the player has open. */ + public Container openContainer; + /** The food object of the player, the general hunger logic. */ + protected FoodStats foodStats = new FoodStats(); + /** + * Used to tell if the player pressed jump twice. If this is at 0 and it's pressed (And they are allowed to fly, as + * defined in the player's movementInput) it sets this to 7. If it's pressed and it's greater than 0 enable fly. + */ + protected int flyToggleTimer; + public float prevCameraYaw; + public float cameraYaw; + /** Used by EntityPlayer to prevent too many xp orbs from getting absorbed at once. */ + public int xpCooldown; + /** Previous X position of the player's cape */ + public double prevChasingPosX; + /** Previous Y position of the player's cape */ + public double prevChasingPosY; + /** Previous Z position of the player's cape */ + public double prevChasingPosZ; + /** Current X position of the player's cape */ + public double chasingPosX; + /** Current Y position of the player's cape */ + public double chasingPosY; + /** Current Z position of the player's cape */ + public double chasingPosZ; + /** Boolean value indicating weather a player is sleeping or not */ + protected boolean sleeping; + /** The location of the bed the player is sleeping in, or {@code null} if they are not sleeping */ + public BlockPos bedLocation; + private int sleepTimer; + /** Offset in the X axis used for rendering. This field is {@linkplain #setRenderOffsetForSleep() used by beds}. */ + public float renderOffsetX; + /** + * Offset in the Y axis used for rendering. This field is not written to in vanilla (other than being set to 0 each + * tick by {@link net.minecraft.client.entity.EntityOtherPlayerMP#onUpdate()}). + */ + @SideOnly(Side.CLIENT) + public float renderOffsetY; + /** Offset in the Z axis used for rendering. This field is {@linkplain #setRenderOffsetForSleep() used by beds}. */ + public float renderOffsetZ; + /** holds the spawn chunk of the player */ + private BlockPos spawnPos; + /** Whether this player's spawn point is forced, preventing execution of bed checks. */ + private boolean spawnForced; + /** The player's capabilities. (See class PlayerCapabilities) */ + public PlayerCapabilities capabilities = new PlayerCapabilities(); + /** The current experience level the player is on. */ + public int experienceLevel; + /** + * The total amount of experience the player has. This also includes the amount of experience within their + * Experience Bar. + */ + public int experienceTotal; + /** The current amount of experience the player has within their Experience Bar. */ + public float experience; + protected int xpSeed; + protected float speedInAir = 0.02F; + private int lastXPSound; + /** The player's unique game profile */ + private final GameProfile gameProfile; + @SideOnly(Side.CLIENT) + private boolean hasReducedDebug; + private ItemStack itemStackMainHand = ItemStack.EMPTY; + private final CooldownTracker cooldownTracker = this.createCooldownTracker(); + /** An instance of a fishing rod's hook. If this isn't null, the icon image of the fishing rod is slightly different */ + @Nullable + public EntityFishHook fishEntity; + + protected CooldownTracker createCooldownTracker() + { + return new CooldownTracker(); + } + + public EntityPlayer(World worldIn, GameProfile gameProfileIn) + { + super(worldIn); + this.setUniqueId(getUUID(gameProfileIn)); + this.gameProfile = gameProfileIn; + this.inventoryContainer = new ContainerPlayer(this.inventory, !worldIn.isRemote, this); + this.openContainer = this.inventoryContainer; + BlockPos blockpos = worldIn.getSpawnPoint(); + this.setLocationAndAngles((double)blockpos.getX() + 0.5D, (double)(blockpos.getY() + 1), (double)blockpos.getZ() + 0.5D, 0.0F, 0.0F); + this.unused180 = 180.0F; + } + + protected void applyEntityAttributes() + { + super.applyEntityAttributes(); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(1.0D); + this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.10000000149011612D); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_SPEED); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.LUCK); + this.getAttributeMap().registerAttribute(REACH_DISTANCE); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(ABSORPTION, Float.valueOf(0.0F)); + this.dataManager.register(PLAYER_SCORE, Integer.valueOf(0)); + this.dataManager.register(PLAYER_MODEL_FLAG, Byte.valueOf((byte)0)); + this.dataManager.register(MAIN_HAND, Byte.valueOf((byte)1)); + this.dataManager.register(LEFT_SHOULDER_ENTITY, new NBTTagCompound()); + this.dataManager.register(RIGHT_SHOULDER_ENTITY, new NBTTagCompound()); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPlayerPreTick(this); + this.noClip = this.isSpectator(); + + if (this.isSpectator()) + { + this.onGround = false; + } + + if (this.xpCooldown > 0) + { + --this.xpCooldown; + } + + if (this.isPlayerSleeping()) + { + ++this.sleepTimer; + + if (this.sleepTimer > 100) + { + this.sleepTimer = 100; + } + + if (!this.world.isRemote) + { + if (!this.isInBed()) + { + this.wakeUpPlayer(true, true, false); + } + else if (this.world.isDaytime()) + { + this.wakeUpPlayer(false, true, true); + } + } + } + else if (this.sleepTimer > 0) + { + ++this.sleepTimer; + + if (this.sleepTimer >= 110) + { + this.sleepTimer = 0; + } + } + + super.onUpdate(); + + if (!this.world.isRemote && this.openContainer != null && !this.openContainer.canInteractWith(this)) + { + this.closeScreen(); + this.openContainer = this.inventoryContainer; + } + + if (this.isBurning() && this.capabilities.disableDamage) + { + this.extinguish(); + } + + this.updateCape(); + + if (!this.world.isRemote) + { + this.foodStats.onUpdate(this); + this.addStat(StatList.PLAY_ONE_MINUTE); + + if (this.isEntityAlive()) + { + this.addStat(StatList.TIME_SINCE_DEATH); + } + + if (this.isSneaking()) + { + this.addStat(StatList.SNEAK_TIME); + } + } + + int i = 29999999; + double d0 = MathHelper.clamp(this.posX, -2.9999999E7D, 2.9999999E7D); + double d1 = MathHelper.clamp(this.posZ, -2.9999999E7D, 2.9999999E7D); + + if (d0 != this.posX || d1 != this.posZ) + { + this.setPosition(d0, this.posY, d1); + } + + ++this.ticksSinceLastSwing; + ItemStack itemstack = this.getHeldItemMainhand(); + + if (!ItemStack.areItemStacksEqual(this.itemStackMainHand, itemstack)) + { + if (!ItemStack.areItemsEqualIgnoreDurability(this.itemStackMainHand, itemstack)) + { + this.resetCooldown(); + } + + this.itemStackMainHand = itemstack.isEmpty() ? ItemStack.EMPTY : itemstack.copy(); + } + + this.cooldownTracker.tick(); + this.updateSize(); + } + + private void updateCape() + { + this.prevChasingPosX = this.chasingPosX; + this.prevChasingPosY = this.chasingPosY; + this.prevChasingPosZ = this.chasingPosZ; + double d0 = this.posX - this.chasingPosX; + double d1 = this.posY - this.chasingPosY; + double d2 = this.posZ - this.chasingPosZ; + double d3 = 10.0D; + + if (d0 > 10.0D) + { + this.chasingPosX = this.posX; + this.prevChasingPosX = this.chasingPosX; + } + + if (d2 > 10.0D) + { + this.chasingPosZ = this.posZ; + this.prevChasingPosZ = this.chasingPosZ; + } + + if (d1 > 10.0D) + { + this.chasingPosY = this.posY; + this.prevChasingPosY = this.chasingPosY; + } + + if (d0 < -10.0D) + { + this.chasingPosX = this.posX; + this.prevChasingPosX = this.chasingPosX; + } + + if (d2 < -10.0D) + { + this.chasingPosZ = this.posZ; + this.prevChasingPosZ = this.chasingPosZ; + } + + if (d1 < -10.0D) + { + this.chasingPosY = this.posY; + this.prevChasingPosY = this.chasingPosY; + } + + this.chasingPosX += d0 * 0.25D; + this.chasingPosZ += d2 * 0.25D; + this.chasingPosY += d1 * 0.25D; + } + + protected void updateSize() + { + float f; + float f1; + + if (this.isElytraFlying()) + { + f = 0.6F; + f1 = 0.6F; + } + else if (this.isPlayerSleeping()) + { + f = 0.2F; + f1 = 0.2F; + } + else if (this.isSneaking()) + { + f = 0.6F; + f1 = 1.65F; + } + else + { + f = 0.6F; + f1 = 1.8F; + } + + if (f != this.width || f1 != this.height) + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + axisalignedbb = new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, axisalignedbb.minX + (double)f, axisalignedbb.minY + (double)f1, axisalignedbb.minZ + (double)f); + + if (!this.world.collidesWithAnyBlock(axisalignedbb)) + { + this.setSize(f, f1); + } + } + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPlayerPostTick(this); + } + + /** + * Return the amount of time this entity should stay in a portal before being transported. + */ + public int getMaxInPortalTime() + { + return this.capabilities.disableDamage ? 1 : 80; + } + + protected SoundEvent getSwimSound() + { + return SoundEvents.ENTITY_PLAYER_SWIM; + } + + protected SoundEvent getSplashSound() + { + return SoundEvents.ENTITY_PLAYER_SPLASH; + } + + /** + * Return the amount of cooldown before this entity can use a portal again. + */ + public int getPortalCooldown() + { + return 10; + } + + public void playSound(SoundEvent soundIn, float volume, float pitch) + { + this.world.playSound(this, this.posX, this.posY, this.posZ, soundIn, this.getSoundCategory(), volume, pitch); + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.PLAYERS; + } + + protected int getFireImmuneTicks() + { + return 20; + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 9) + { + this.onItemUseFinish(); + } + else if (id == 23) + { + this.hasReducedDebug = false; + } + else if (id == 22) + { + this.hasReducedDebug = true; + } + else + { + super.handleStatusUpdate(id); + } + } + + /** + * Dead and sleeping entities cannot move + */ + protected boolean isMovementBlocked() + { + return this.getHealth() <= 0.0F || this.isPlayerSleeping(); + } + + /** + * set current crafting inventory back to the 2x2 square + */ + public void closeScreen() + { + this.openContainer = this.inventoryContainer; + } + + /** + * Handles updating while riding another entity + */ + public void updateRidden() + { + if (!this.world.isRemote && this.isSneaking() && this.isRiding()) + { + this.dismountRidingEntity(); + this.setSneaking(false); + } + else + { + double d0 = this.posX; + double d1 = this.posY; + double d2 = this.posZ; + float f = this.rotationYaw; + float f1 = this.rotationPitch; + super.updateRidden(); + this.prevCameraYaw = this.cameraYaw; + this.cameraYaw = 0.0F; + this.addMountedMovementStat(this.posX - d0, this.posY - d1, this.posZ - d2); + + if (this.getRidingEntity() instanceof EntityLivingBase && ((EntityLivingBase)this.getRidingEntity()).shouldRiderFaceForward(this)) + { + this.rotationPitch = f1; + this.rotationYaw = f; + this.renderYawOffset = ((EntityLivingBase)this.getRidingEntity()).renderYawOffset; + } + } + } + + /** + * Keeps moving the entity up so it isn't colliding with blocks and other requirements for this entity to be spawned + * (only actually used on players though its also on Entity) + */ + @SideOnly(Side.CLIENT) + public void preparePlayerToSpawn() + { + this.setSize(0.6F, 1.8F); + super.preparePlayerToSpawn(); + this.setHealth(this.getMaxHealth()); + this.deathTime = 0; + } + + protected void updateEntityActionState() + { + super.updateEntityActionState(); + this.updateArmSwingProgress(); + this.rotationYawHead = this.rotationYaw; + } + + /** + * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons + * use this to react to sunlight and start to burn. + */ + public void onLivingUpdate() + { + if (this.flyToggleTimer > 0) + { + --this.flyToggleTimer; + } + + if (this.world.getDifficulty() == EnumDifficulty.PEACEFUL && this.world.getGameRules().getBoolean("naturalRegeneration")) + { + if (this.getHealth() < this.getMaxHealth() && this.ticksExisted % 20 == 0) + { + this.heal(1.0F); + } + + if (this.foodStats.needFood() && this.ticksExisted % 10 == 0) + { + this.foodStats.setFoodLevel(this.foodStats.getFoodLevel() + 1); + } + } + + this.inventory.decrementAnimations(); + this.prevCameraYaw = this.cameraYaw; + super.onLivingUpdate(); + IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); + + if (!this.world.isRemote) + { + iattributeinstance.setBaseValue((double)this.capabilities.getWalkSpeed()); + } + + this.jumpMovementFactor = this.speedInAir; + + if (this.isSprinting()) + { + this.jumpMovementFactor = (float)((double)this.jumpMovementFactor + (double)this.speedInAir * 0.3D); + } + + this.setAIMoveSpeed((float)iattributeinstance.getAttributeValue()); + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + float f1 = (float)(Math.atan(-this.motionY * 0.20000000298023224D) * 15.0D); + + if (f > 0.1F) + { + f = 0.1F; + } + + if (!this.onGround || this.getHealth() <= 0.0F) + { + f = 0.0F; + } + + if (this.onGround || this.getHealth() <= 0.0F) + { + f1 = 0.0F; + } + + this.cameraYaw += (f - this.cameraYaw) * 0.4F; + this.cameraPitch += (f1 - this.cameraPitch) * 0.8F; + + if (this.getHealth() > 0.0F && !this.isSpectator()) + { + AxisAlignedBB axisalignedbb; + + if (this.isRiding() && !this.getRidingEntity().isDead) + { + axisalignedbb = this.getEntityBoundingBox().union(this.getRidingEntity().getEntityBoundingBox()).grow(1.0D, 0.0D, 1.0D); + } + else + { + axisalignedbb = this.getEntityBoundingBox().grow(1.0D, 0.5D, 1.0D); + } + + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, axisalignedbb); + + for (int i = 0; i < list.size(); ++i) + { + Entity entity = list.get(i); + + if (!entity.isDead) + { + this.collideWithPlayer(entity); + } + } + } + + this.playShoulderEntityAmbientSound(this.getLeftShoulderEntity()); + this.playShoulderEntityAmbientSound(this.getRightShoulderEntity()); + + if (!this.world.isRemote && (this.fallDistance > 0.5F || this.isInWater() || this.isRiding()) || this.capabilities.isFlying) + { + this.spawnShoulderEntities(); + } + } + + private void playShoulderEntityAmbientSound(@Nullable NBTTagCompound p_192028_1_) + { + if (p_192028_1_ != null && !p_192028_1_.hasKey("Silent") || !p_192028_1_.getBoolean("Silent")) + { + String s = p_192028_1_.getString("id"); + + if (s.equals(EntityList.getKey(EntityParrot.class).toString())) + { + EntityParrot.playAmbientSound(this.world, this); + } + } + } + + private void collideWithPlayer(Entity entityIn) + { + entityIn.onCollideWithPlayer(this); + } + + public int getScore() + { + return ((Integer)this.dataManager.get(PLAYER_SCORE)).intValue(); + } + + /** + * Set player's score + */ + public void setScore(int scoreIn) + { + this.dataManager.set(PLAYER_SCORE, Integer.valueOf(scoreIn)); + } + + /** + * Add to player's score + */ + public void addScore(int scoreIn) + { + int i = this.getScore(); + this.dataManager.set(PLAYER_SCORE, Integer.valueOf(i + scoreIn)); + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, cause)) return; + super.onDeath(cause); + this.setSize(0.2F, 0.2F); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionY = 0.10000000149011612D; + + captureDrops = true; + capturedDrops.clear(); + + if ("Notch".equals(this.getName())) + { + this.dropItem(new ItemStack(Items.APPLE, 1), true, false); + } + + if (!this.world.getGameRules().getBoolean("keepInventory") && !this.isSpectator()) + { + this.destroyVanishingCursedItems(); + this.inventory.dropAllItems(); + } + + captureDrops = false; + if (!world.isRemote) net.minecraftforge.event.ForgeEventFactory.onPlayerDrops(this, cause, capturedDrops, recentlyHit > 0); + + if (cause != null) + { + this.motionX = (double)(-MathHelper.cos((this.attackedAtYaw + this.rotationYaw) * 0.017453292F) * 0.1F); + this.motionZ = (double)(-MathHelper.sin((this.attackedAtYaw + this.rotationYaw) * 0.017453292F) * 0.1F); + } + else + { + this.motionX = 0.0D; + this.motionZ = 0.0D; + } + + this.addStat(StatList.DEATHS); + this.takeStat(StatList.TIME_SINCE_DEATH); + this.extinguish(); + this.setFlag(0, false); + } + + protected void destroyVanishingCursedItems() + { + for (int i = 0; i < this.inventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.inventory.getStackInSlot(i); + + if (!itemstack.isEmpty() && EnchantmentHelper.hasVanishingCurse(itemstack)) + { + this.inventory.removeStackFromSlot(i); + } + } + } + + protected SoundEvent getHurtSound(DamageSource damageSourceIn) + { + if (damageSourceIn == DamageSource.ON_FIRE) + { + return SoundEvents.ENTITY_PLAYER_HURT_ON_FIRE; + } + else + { + return damageSourceIn == DamageSource.DROWN ? SoundEvents.ENTITY_PLAYER_HURT_DROWN : SoundEvents.ENTITY_PLAYER_HURT; + } + } + + protected SoundEvent getDeathSound() + { + return SoundEvents.ENTITY_PLAYER_DEATH; + } + + /** + * Drop one item out of the currently selected stack if {@code dropAll} is false. If {@code dropItem} is true the + * entire stack is dropped. + */ + @Nullable + public EntityItem dropItem(boolean dropAll) + { + ItemStack stack = inventory.getCurrentItem(); + + if (stack.isEmpty()) + { + return null; + } + if (stack.getItem().onDroppedByPlayer(stack, this)) + { + int count = dropAll ? this.inventory.getCurrentItem().getCount() : 1; + return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, inventory.decrStackSize(inventory.currentItem, count), true); + } + return null; + } + + /** + * Drops an item into the world. + */ + @Nullable + public EntityItem dropItem(ItemStack itemStackIn, boolean unused) + { + return net.minecraftforge.common.ForgeHooks.onPlayerTossEvent(this, itemStackIn, false); + } + + @Nullable + public EntityItem dropItem(ItemStack droppedItem, boolean dropAround, boolean traceItem) + { + if (droppedItem.isEmpty()) + { + return null; + } + else + { + double d0 = this.posY - 0.30000001192092896D + (double)this.getEyeHeight(); + EntityItem entityitem = new EntityItem(this.world, this.posX, d0, this.posZ, droppedItem); + entityitem.setPickupDelay(40); + + if (traceItem) + { + entityitem.setThrower(this.getName()); + } + + if (dropAround) + { + float f = this.rand.nextFloat() * 0.5F; + float f1 = this.rand.nextFloat() * ((float)Math.PI * 2F); + entityitem.motionX = (double)(-MathHelper.sin(f1) * f); + entityitem.motionZ = (double)(MathHelper.cos(f1) * f); + entityitem.motionY = 0.20000000298023224D; + } + else + { + float f2 = 0.3F; + entityitem.motionX = (double)(-MathHelper.sin(this.rotationYaw * 0.017453292F) * MathHelper.cos(this.rotationPitch * 0.017453292F) * f2); + entityitem.motionZ = (double)(MathHelper.cos(this.rotationYaw * 0.017453292F) * MathHelper.cos(this.rotationPitch * 0.017453292F) * f2); + entityitem.motionY = (double)(-MathHelper.sin(this.rotationPitch * 0.017453292F) * f2 + 0.1F); + float f3 = this.rand.nextFloat() * ((float)Math.PI * 2F); + f2 = 0.02F * this.rand.nextFloat(); + entityitem.motionX += Math.cos((double)f3) * (double)f2; + entityitem.motionY += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + entityitem.motionZ += Math.sin((double)f3) * (double)f2; + } + + ItemStack itemstack = this.dropItemAndGetStack(entityitem); + + if (traceItem) + { + if (!itemstack.isEmpty()) + { + this.addStat(StatList.getDroppedObjectStats(itemstack.getItem()), droppedItem.getCount()); + } + + this.addStat(StatList.DROP); + } + + return entityitem; + } + } + + public ItemStack dropItemAndGetStack(EntityItem p_184816_1_) + { + if (captureDrops) capturedDrops.add(p_184816_1_); + else // Forge: Don't indent to keep patch smaller. + this.world.spawnEntity(p_184816_1_); + return p_184816_1_.getItem(); + } + + @Deprecated //Use location sensitive version below + public float getDigSpeed(IBlockState state) + { + return getDigSpeed(state, null); + } + + public float getDigSpeed(IBlockState state, BlockPos pos) + { + float f = this.inventory.getDestroySpeed(state); + + if (f > 1.0F) + { + int i = EnchantmentHelper.getEfficiencyModifier(this); + ItemStack itemstack = this.getHeldItemMainhand(); + + if (i > 0 && !itemstack.isEmpty()) + { + f += (float)(i * i + 1); + } + } + + if (this.isPotionActive(MobEffects.HASTE)) + { + f *= 1.0F + (float)(this.getActivePotionEffect(MobEffects.HASTE).getAmplifier() + 1) * 0.2F; + } + + if (this.isPotionActive(MobEffects.MINING_FATIGUE)) + { + float f1; + + switch (this.getActivePotionEffect(MobEffects.MINING_FATIGUE).getAmplifier()) + { + case 0: + f1 = 0.3F; + break; + case 1: + f1 = 0.09F; + break; + case 2: + f1 = 0.0027F; + break; + case 3: + default: + f1 = 8.1E-4F; + } + + f *= f1; + } + + if (this.isInsideOfMaterial(Material.WATER) && !EnchantmentHelper.getAquaAffinityModifier(this)) + { + f /= 5.0F; + } + + if (!this.onGround) + { + f /= 5.0F; + } + + f = net.minecraftforge.event.ForgeEventFactory.getBreakSpeed(this, state, f, pos); + return (f < 0 ? 0 : f); + } + + public boolean canHarvestBlock(IBlockState state) + { + return net.minecraftforge.event.ForgeEventFactory.doPlayerHarvestCheck(this, state, this.inventory.canHarvestBlock(state)); + } + + public static void registerFixesPlayer(DataFixer fixer) + { + fixer.registerWalker(FixTypes.PLAYER, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + DataFixesManager.processInventory(fixer, compound, versionIn, "Inventory"); + DataFixesManager.processInventory(fixer, compound, versionIn, "EnderItems"); + + if (compound.hasKey("ShoulderEntityLeft", 10)) + { + compound.setTag("ShoulderEntityLeft", fixer.process(FixTypes.ENTITY, compound.getCompoundTag("ShoulderEntityLeft"), versionIn)); + } + + if (compound.hasKey("ShoulderEntityRight", 10)) + { + compound.setTag("ShoulderEntityRight", fixer.process(FixTypes.ENTITY, compound.getCompoundTag("ShoulderEntityRight"), versionIn)); + } + + return compound; + } + }); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + this.setUniqueId(getUUID(this.gameProfile)); + NBTTagList nbttaglist = compound.getTagList("Inventory", 10); + this.inventory.readFromNBT(nbttaglist); + this.inventory.currentItem = compound.getInteger("SelectedItemSlot"); + this.sleeping = compound.getBoolean("Sleeping"); + this.sleepTimer = compound.getShort("SleepTimer"); + this.experience = compound.getFloat("XpP"); + this.experienceLevel = compound.getInteger("XpLevel"); + this.experienceTotal = compound.getInteger("XpTotal"); + this.xpSeed = compound.getInteger("XpSeed"); + + if (this.xpSeed == 0) + { + this.xpSeed = this.rand.nextInt(); + } + + this.setScore(compound.getInteger("Score")); + + if (this.sleeping) + { + this.bedLocation = new BlockPos(this); + this.wakeUpPlayer(true, true, false); + } + + if (compound.hasKey("SpawnX", 99) && compound.hasKey("SpawnY", 99) && compound.hasKey("SpawnZ", 99)) + { + this.spawnPos = new BlockPos(compound.getInteger("SpawnX"), compound.getInteger("SpawnY"), compound.getInteger("SpawnZ")); + this.spawnForced = compound.getBoolean("SpawnForced"); + } + + NBTTagList spawnlist = null; + spawnlist = compound.getTagList("Spawns", 10); + for (int i = 0; i < spawnlist.tagCount(); i++) + { + NBTTagCompound spawndata = (NBTTagCompound)spawnlist.getCompoundTagAt(i); + int spawndim = spawndata.getInteger("Dim"); + this.spawnChunkMap.put(spawndim, new BlockPos(spawndata.getInteger("SpawnX"), spawndata.getInteger("SpawnY"), spawndata.getInteger("SpawnZ"))); + this.spawnForcedMap.put(spawndim, spawndata.getBoolean("SpawnForced")); + } + this.spawnDimension = compound.getBoolean("HasSpawnDimensionSet") ? compound.getInteger("SpawnDimension") : null; + + this.foodStats.readNBT(compound); + this.capabilities.readCapabilitiesFromNBT(compound); + + if (compound.hasKey("EnderItems", 9)) + { + NBTTagList nbttaglist1 = compound.getTagList("EnderItems", 10); + this.enderChest.loadInventoryFromNBT(nbttaglist1); + } + + if (compound.hasKey("ShoulderEntityLeft", 10)) + { + this.setLeftShoulderEntity(compound.getCompoundTag("ShoulderEntityLeft")); + } + + if (compound.hasKey("ShoulderEntityRight", 10)) + { + this.setRightShoulderEntity(compound.getCompoundTag("ShoulderEntityRight")); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("DataVersion", 1343); + compound.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); + compound.setInteger("SelectedItemSlot", this.inventory.currentItem); + compound.setBoolean("Sleeping", this.sleeping); + compound.setShort("SleepTimer", (short)this.sleepTimer); + compound.setFloat("XpP", this.experience); + compound.setInteger("XpLevel", this.experienceLevel); + compound.setInteger("XpTotal", this.experienceTotal); + compound.setInteger("XpSeed", this.xpSeed); + compound.setInteger("Score", this.getScore()); + net.minecraftforge.fml.common.FMLCommonHandler.instance().getDataFixer().writeVersionData(compound); //Moved down so it doesn't keep missing every MC update. + + if (this.spawnPos != null) + { + compound.setInteger("SpawnX", this.spawnPos.getX()); + compound.setInteger("SpawnY", this.spawnPos.getY()); + compound.setInteger("SpawnZ", this.spawnPos.getZ()); + compound.setBoolean("SpawnForced", this.spawnForced); + } + + NBTTagList spawnlist = new NBTTagList(); + for (java.util.Map.Entry entry : this.spawnChunkMap.entrySet()) + { + BlockPos spawn = entry.getValue(); + if (spawn == null) continue; + Boolean forced = spawnForcedMap.get(entry.getKey()); + if (forced == null) forced = false; + NBTTagCompound spawndata = new NBTTagCompound(); + spawndata.setInteger("Dim", entry.getKey()); + spawndata.setInteger("SpawnX", spawn.getX()); + spawndata.setInteger("SpawnY", spawn.getY()); + spawndata.setInteger("SpawnZ", spawn.getZ()); + spawndata.setBoolean("SpawnForced", forced); + spawnlist.appendTag(spawndata); + } + compound.setTag("Spawns", spawnlist); + + compound.setBoolean("HasSpawnDimensionSet", this.hasSpawnDimension()); + if (this.hasSpawnDimension()) + compound.setInteger("SpawnDimension", this.getSpawnDimension()); + + this.foodStats.writeNBT(compound); + this.capabilities.writeCapabilitiesToNBT(compound); + compound.setTag("EnderItems", this.enderChest.saveInventoryToNBT()); + + if (!this.getLeftShoulderEntity().hasNoTags()) + { + compound.setTag("ShoulderEntityLeft", this.getLeftShoulderEntity()); + } + + if (!this.getRightShoulderEntity().hasNoTags()) + { + compound.setTag("ShoulderEntityRight", this.getRightShoulderEntity()); + } + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (!net.minecraftforge.common.ForgeHooks.onPlayerAttack(this, source, amount)) return false; + if (this.isEntityInvulnerable(source)) + { + return false; + } + else if (this.capabilities.disableDamage && !source.canHarmInCreative()) + { + return false; + } + else + { + this.idleTime = 0; + + if (this.getHealth() <= 0.0F) + { + return false; + } + else + { + if (this.isPlayerSleeping() && !this.world.isRemote) + { + this.wakeUpPlayer(true, true, false); + } + + this.spawnShoulderEntities(); + + if (source.isDifficultyScaled()) + { + if (this.world.getDifficulty() == EnumDifficulty.PEACEFUL) + { + amount = 0.0F; + } + + if (this.world.getDifficulty() == EnumDifficulty.EASY) + { + amount = Math.min(amount / 2.0F + 1.0F, amount); + } + + if (this.world.getDifficulty() == EnumDifficulty.HARD) + { + amount = amount * 3.0F / 2.0F; + } + } + + return amount == 0.0F ? false : super.attackEntityFrom(source, amount); + } + } + } + + protected void blockUsingShield(EntityLivingBase p_190629_1_) + { + super.blockUsingShield(p_190629_1_); + + if (p_190629_1_.getHeldItemMainhand().getItem().canDisableShield(p_190629_1_.getHeldItemMainhand(), this.getActiveItemStack(), this, p_190629_1_)) + { + this.disableShield(true); + } + } + + public boolean canAttackPlayer(EntityPlayer other) + { + Team team = this.getTeam(); + Team team1 = other.getTeam(); + + if (team == null) + { + return true; + } + else + { + return !team.isSameTeam(team1) ? true : team.getAllowFriendlyFire(); + } + } + + protected void damageArmor(float damage) + { + this.inventory.damageArmor(damage); + } + + protected void damageShield(float damage) + { + if (damage >= 3.0F && this.activeItemStack.getItem().isShield(this.activeItemStack, this)) + { + ItemStack copyBeforeUse = this.activeItemStack.copy(); + int i = 1 + MathHelper.floor(damage); + this.activeItemStack.damageItem(i, this); + + if (this.activeItemStack.isEmpty()) + { + EnumHand enumhand = this.getActiveHand(); + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, copyBeforeUse, enumhand); + + if (enumhand == EnumHand.MAIN_HAND) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, ItemStack.EMPTY); + } + else + { + this.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, ItemStack.EMPTY); + } + + this.activeItemStack = ItemStack.EMPTY; + this.playSound(SoundEvents.ITEM_SHIELD_BREAK, 0.8F, 0.8F + this.world.rand.nextFloat() * 0.4F); + } + } + } + + /** + * When searching for vulnerable players, if a player is invisible, the return value of this is the chance of seeing + * them anyway. + */ + public float getArmorVisibility() + { + int i = 0; + + for (ItemStack itemstack : this.inventory.armorInventory) + { + if (!itemstack.isEmpty()) + { + ++i; + } + } + + return (float)i / (float)this.inventory.armorInventory.size(); + } + + /** + * Deals damage to the entity. This will take the armor of the entity into consideration before damaging the health + * bar. + */ + protected void damageEntity(DamageSource damageSrc, float damageAmount) + { + if (!this.isEntityInvulnerable(damageSrc)) + { + damageAmount = net.minecraftforge.common.ForgeHooks.onLivingHurt(this, damageSrc, damageAmount); + if (damageAmount <= 0) return; + damageAmount = net.minecraftforge.common.ISpecialArmor.ArmorProperties.applyArmor(this, inventory.armorInventory, damageSrc, damageAmount); + if (damageAmount <= 0) return; + damageAmount = this.applyPotionDamageCalculations(damageSrc, damageAmount); + float f = damageAmount; + damageAmount = Math.max(damageAmount - this.getAbsorptionAmount(), 0.0F); + this.setAbsorptionAmount(this.getAbsorptionAmount() - (f - damageAmount)); + damageAmount = net.minecraftforge.common.ForgeHooks.onLivingDamage(this, damageSrc, damageAmount); + + if (damageAmount != 0.0F) + { + this.addExhaustion(damageSrc.getHungerDamage()); + float f1 = this.getHealth(); + this.setHealth(this.getHealth() - damageAmount); + this.getCombatTracker().trackDamage(damageSrc, f1, damageAmount); + + if (damageAmount < 3.4028235E37F) + { + this.addStat(StatList.DAMAGE_TAKEN, Math.round(damageAmount * 10.0F)); + } + } + } + } + + public void openEditSign(TileEntitySign signTile) + { + } + + public void displayGuiEditCommandCart(CommandBlockBaseLogic commandBlock) + { + } + + public void displayGuiCommandBlock(TileEntityCommandBlock commandBlock) + { + } + + public void openEditStructure(TileEntityStructure structure) + { + } + + public void displayVillagerTradeGui(IMerchant villager) + { + } + + /** + * Displays the GUI for interacting with a chest inventory. + */ + public void displayGUIChest(IInventory chestInventory) + { + } + + public void openGuiHorseInventory(AbstractHorse horse, IInventory inventoryIn) + { + } + + public void displayGui(IInteractionObject guiOwner) + { + } + + public void openBook(ItemStack stack, EnumHand hand) + { + } + + public EnumActionResult interactOn(Entity p_190775_1_, EnumHand p_190775_2_) + { + if (this.isSpectator()) + { + if (p_190775_1_ instanceof IInventory) + { + this.displayGUIChest((IInventory)p_190775_1_); + } + + return EnumActionResult.PASS; + } + else + { + EnumActionResult cancelResult = net.minecraftforge.common.ForgeHooks.onInteractEntity(this, p_190775_1_, p_190775_2_); + if (cancelResult != null) return cancelResult; + ItemStack itemstack = this.getHeldItem(p_190775_2_); + ItemStack itemstack1 = itemstack.isEmpty() ? ItemStack.EMPTY : itemstack.copy(); + + if (p_190775_1_.processInitialInteract(this, p_190775_2_)) + { + if (this.capabilities.isCreativeMode && itemstack == this.getHeldItem(p_190775_2_) && itemstack.getCount() < itemstack1.getCount()) + { + itemstack.setCount(itemstack1.getCount()); + } + if (!this.capabilities.isCreativeMode && itemstack.isEmpty()) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, itemstack1, p_190775_2_); + } + return EnumActionResult.SUCCESS; + } + else + { + if (!itemstack.isEmpty() && p_190775_1_ instanceof EntityLivingBase) + { + if (this.capabilities.isCreativeMode) + { + itemstack = itemstack1; + } + + if (itemstack.interactWithEntity(this, (EntityLivingBase)p_190775_1_, p_190775_2_)) + { + if (itemstack.isEmpty() && !this.capabilities.isCreativeMode) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, itemstack1, p_190775_2_); + this.setHeldItem(p_190775_2_, ItemStack.EMPTY); + } + + return EnumActionResult.SUCCESS; + } + } + + return EnumActionResult.PASS; + } + } + } + + /** + * Returns the Y Offset of this entity. + */ + public double getYOffset() + { + return -0.35D; + } + + /** + * Dismounts this entity from the entity it is riding. + */ + public void dismountRidingEntity() + { + super.dismountRidingEntity(); + this.rideCooldown = 0; + } + + /** + * Attacks for the player the targeted entity with the currently equipped item. The equipped item has hitEntity + * called on it. Args: targetEntity + */ + public void attackTargetEntityWithCurrentItem(Entity targetEntity) + { + if (!net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(this, targetEntity)) return; + if (targetEntity.canBeAttackedWithItem()) + { + if (!targetEntity.hitByEntity(this)) + { + float f = (float)this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getAttributeValue(); + float f1; + + if (targetEntity instanceof EntityLivingBase) + { + f1 = EnchantmentHelper.getModifierForCreature(this.getHeldItemMainhand(), ((EntityLivingBase)targetEntity).getCreatureAttribute()); + } + else + { + f1 = EnchantmentHelper.getModifierForCreature(this.getHeldItemMainhand(), EnumCreatureAttribute.UNDEFINED); + } + + float f2 = this.getCooledAttackStrength(0.5F); + f = f * (0.2F + f2 * f2 * 0.8F); + f1 = f1 * f2; + this.resetCooldown(); + + if (f > 0.0F || f1 > 0.0F) + { + boolean flag = f2 > 0.9F; + boolean flag1 = false; + int i = 0; + i = i + EnchantmentHelper.getKnockbackModifier(this); + + if (this.isSprinting() && flag) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.getSoundCategory(), 1.0F, 1.0F); + ++i; + flag1 = true; + } + + boolean flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.isOnLadder() && !this.isInWater() && !this.isPotionActive(MobEffects.BLINDNESS) && !this.isRiding() && targetEntity instanceof EntityLivingBase; + flag2 = flag2 && !this.isSprinting(); + + net.minecraftforge.event.entity.player.CriticalHitEvent hitResult = net.minecraftforge.common.ForgeHooks.getCriticalHit(this, targetEntity, flag2, flag2 ? 1.5F : 1.0F); + flag2 = hitResult != null; + if (flag2) + { + f *= hitResult.getDamageModifier(); + } + + f = f + f1; + boolean flag3 = false; + double d0 = (double)(this.distanceWalkedModified - this.prevDistanceWalkedModified); + + if (flag && !flag2 && !flag1 && this.onGround && d0 < (double)this.getAIMoveSpeed()) + { + ItemStack itemstack = this.getHeldItem(EnumHand.MAIN_HAND); + + if (itemstack.getItem() instanceof ItemSword) + { + flag3 = true; + } + } + + float f4 = 0.0F; + boolean flag4 = false; + int j = EnchantmentHelper.getFireAspectModifier(this); + + if (targetEntity instanceof EntityLivingBase) + { + f4 = ((EntityLivingBase)targetEntity).getHealth(); + + if (j > 0 && !targetEntity.isBurning()) + { + flag4 = true; + targetEntity.setFire(1); + } + } + + double d1 = targetEntity.motionX; + double d2 = targetEntity.motionY; + double d3 = targetEntity.motionZ; + boolean flag5 = targetEntity.attackEntityFrom(DamageSource.causePlayerDamage(this), f); + + if (flag5) + { + if (i > 0) + { + if (targetEntity instanceof EntityLivingBase) + { + ((EntityLivingBase)targetEntity).knockBack(this, (float)i * 0.5F, (double)MathHelper.sin(this.rotationYaw * 0.017453292F), (double)(-MathHelper.cos(this.rotationYaw * 0.017453292F))); + } + else + { + targetEntity.addVelocity((double)(-MathHelper.sin(this.rotationYaw * 0.017453292F) * (float)i * 0.5F), 0.1D, (double)(MathHelper.cos(this.rotationYaw * 0.017453292F) * (float)i * 0.5F)); + } + + this.motionX *= 0.6D; + this.motionZ *= 0.6D; + this.setSprinting(false); + } + + if (flag3) + { + float f3 = 1.0F + EnchantmentHelper.getSweepingDamageRatio(this) * f; + + for (EntityLivingBase entitylivingbase : this.world.getEntitiesWithinAABB(EntityLivingBase.class, targetEntity.getEntityBoundingBox().grow(1.0D, 0.25D, 1.0D))) + { + if (entitylivingbase != this && entitylivingbase != targetEntity && !this.isOnSameTeam(entitylivingbase) && this.getDistanceSq(entitylivingbase) < 9.0D) + { + entitylivingbase.knockBack(this, 0.4F, (double)MathHelper.sin(this.rotationYaw * 0.017453292F), (double)(-MathHelper.cos(this.rotationYaw * 0.017453292F))); + entitylivingbase.attackEntityFrom(DamageSource.causePlayerDamage(this), f3); + } + } + + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F); + this.spawnSweepParticles(); + } + + if (targetEntity instanceof EntityPlayerMP && targetEntity.velocityChanged) + { + ((EntityPlayerMP)targetEntity).connection.sendPacket(new SPacketEntityVelocity(targetEntity)); + targetEntity.velocityChanged = false; + targetEntity.motionX = d1; + targetEntity.motionY = d2; + targetEntity.motionZ = d3; + } + + if (flag2) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_ATTACK_CRIT, this.getSoundCategory(), 1.0F, 1.0F); + this.onCriticalHit(targetEntity); + } + + if (!flag2 && !flag3) + { + if (flag) + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_ATTACK_STRONG, this.getSoundCategory(), 1.0F, 1.0F); + } + else + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_ATTACK_WEAK, this.getSoundCategory(), 1.0F, 1.0F); + } + } + + if (f1 > 0.0F) + { + this.onEnchantmentCritical(targetEntity); + } + + this.setLastAttackedEntity(targetEntity); + + if (targetEntity instanceof EntityLivingBase) + { + EnchantmentHelper.applyThornEnchantments((EntityLivingBase)targetEntity, this); + } + + EnchantmentHelper.applyArthropodEnchantments(this, targetEntity); + ItemStack itemstack1 = this.getHeldItemMainhand(); + Entity entity = targetEntity; + + if (targetEntity instanceof MultiPartEntityPart) + { + IEntityMultiPart ientitymultipart = ((MultiPartEntityPart)targetEntity).parent; + + if (ientitymultipart instanceof EntityLivingBase) + { + entity = (EntityLivingBase)ientitymultipart; + } + } + + if (!itemstack1.isEmpty() && entity instanceof EntityLivingBase) + { + ItemStack beforeHitCopy = itemstack1.copy(); + itemstack1.hitEntity((EntityLivingBase)entity, this); + + if (itemstack1.isEmpty()) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, beforeHitCopy, EnumHand.MAIN_HAND); + this.setHeldItem(EnumHand.MAIN_HAND, ItemStack.EMPTY); + } + } + + if (targetEntity instanceof EntityLivingBase) + { + float f5 = f4 - ((EntityLivingBase)targetEntity).getHealth(); + this.addStat(StatList.DAMAGE_DEALT, Math.round(f5 * 10.0F)); + + if (j > 0) + { + targetEntity.setFire(j * 4); + } + + if (this.world instanceof WorldServer && f5 > 2.0F) + { + int k = (int)((double)f5 * 0.5D); + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.DAMAGE_INDICATOR, targetEntity.posX, targetEntity.posY + (double)(targetEntity.height * 0.5F), targetEntity.posZ, k, 0.1D, 0.0D, 0.1D, 0.2D); + } + } + + this.addExhaustion(0.1F); + } + else + { + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_ATTACK_NODAMAGE, this.getSoundCategory(), 1.0F, 1.0F); + + if (flag4) + { + targetEntity.extinguish(); + } + } + } + } + } + } + + public void disableShield(boolean p_190777_1_) + { + float f = 0.25F + (float)EnchantmentHelper.getEfficiencyModifier(this) * 0.05F; + + if (p_190777_1_) + { + f += 0.75F; + } + + if (this.rand.nextFloat() < f) + { + this.getCooldownTracker().setCooldown(this.getActiveItemStack().getItem(), 100); + this.resetActiveHand(); + this.world.setEntityState(this, (byte)30); + } + } + + /** + * Called when the entity is dealt a critical hit. + */ + public void onCriticalHit(Entity entityHit) + { + } + + public void onEnchantmentCritical(Entity entityHit) + { + } + + public void spawnSweepParticles() + { + double d0 = (double)(-MathHelper.sin(this.rotationYaw * 0.017453292F)); + double d1 = (double)MathHelper.cos(this.rotationYaw * 0.017453292F); + + if (this.world instanceof WorldServer) + { + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.SWEEP_ATTACK, this.posX + d0, this.posY + (double)this.height * 0.5D, this.posZ + d1, 0, d0, 0.0D, d1, 0.0D); + } + } + + @SideOnly(Side.CLIENT) + public void respawnPlayer() + { + } + + /** + * Will get destroyed next tick. + */ + public void setDead() + { + super.setDead(); + this.inventoryContainer.onContainerClosed(this); + + if (this.openContainer != null) + { + this.openContainer.onContainerClosed(this); + } + } + + /** + * Checks if this entity is inside of an opaque block + */ + public boolean isEntityInsideOpaqueBlock() + { + return !this.sleeping && super.isEntityInsideOpaqueBlock(); + } + + /** + * returns true if this is an EntityPlayerSP, or the logged in player. + */ + public boolean isUser() + { + return false; + } + + /** + * Returns the GameProfile for this player + */ + public GameProfile getGameProfile() + { + return this.gameProfile; + } + + public EntityPlayer.SleepResult trySleep(BlockPos bedLocation) + { + EntityPlayer.SleepResult ret = net.minecraftforge.event.ForgeEventFactory.onPlayerSleepInBed(this, bedLocation); + if (ret != null) return ret; + final IBlockState state = this.world.isBlockLoaded(bedLocation) ? this.world.getBlockState(bedLocation) : null; + final boolean isBed = state != null && state.getBlock().isBed(state, this.world, bedLocation, this); + final EnumFacing enumfacing = isBed && state.getBlock() instanceof BlockHorizontal ? (EnumFacing)state.getValue(BlockHorizontal.FACING) : null; + + if (!this.world.isRemote) + { + if (this.isPlayerSleeping() || !this.isEntityAlive()) + { + return EntityPlayer.SleepResult.OTHER_PROBLEM; + } + + if (!this.world.provider.isSurfaceWorld()) + { + return EntityPlayer.SleepResult.NOT_POSSIBLE_HERE; + } + + if (this.world.isDaytime()) + { + return EntityPlayer.SleepResult.NOT_POSSIBLE_NOW; + } + + if (!this.bedInRange(bedLocation, enumfacing)) + { + return EntityPlayer.SleepResult.TOO_FAR_AWAY; + } + + double d0 = 8.0D; + double d1 = 5.0D; + List list = this.world.getEntitiesWithinAABB(EntityMob.class, new AxisAlignedBB((double)bedLocation.getX() - 8.0D, (double)bedLocation.getY() - 5.0D, (double)bedLocation.getZ() - 8.0D, (double)bedLocation.getX() + 8.0D, (double)bedLocation.getY() + 5.0D, (double)bedLocation.getZ() + 8.0D), new EntityPlayer.SleepEnemyPredicate(this)); + + if (!list.isEmpty()) + { + return EntityPlayer.SleepResult.NOT_SAFE; + } + } + + if (this.isRiding()) + { + this.dismountRidingEntity(); + } + + this.spawnShoulderEntities(); + this.setSize(0.2F, 0.2F); + + if (enumfacing != null) { + float f1 = 0.5F + (float)enumfacing.getFrontOffsetX() * 0.4F; + float f = 0.5F + (float)enumfacing.getFrontOffsetZ() * 0.4F; + this.setRenderOffsetForSleep(enumfacing); + this.setPosition((double)((float)bedLocation.getX() + f1), (double)((float)bedLocation.getY() + 0.6875F), (double)((float)bedLocation.getZ() + f)); + } + else + { + this.setPosition((double)((float)bedLocation.getX() + 0.5F), (double)((float)bedLocation.getY() + 0.6875F), (double)((float)bedLocation.getZ() + 0.5F)); + } + + this.sleeping = true; + this.sleepTimer = 0; + this.bedLocation = bedLocation; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + + if (!this.world.isRemote) + { + this.world.updateAllPlayersSleepingFlag(); + } + + return EntityPlayer.SleepResult.OK; + } + + private boolean bedInRange(BlockPos p_190774_1_, EnumFacing p_190774_2_) + { + if (Math.abs(this.posX - (double)p_190774_1_.getX()) <= 3.0D && Math.abs(this.posY - (double)p_190774_1_.getY()) <= 2.0D && Math.abs(this.posZ - (double)p_190774_1_.getZ()) <= 3.0D) + { + return true; + } + else if (p_190774_2_ == null) return false; + else + { + BlockPos blockpos = p_190774_1_.offset(p_190774_2_.getOpposite()); + return Math.abs(this.posX - (double)blockpos.getX()) <= 3.0D && Math.abs(this.posY - (double)blockpos.getY()) <= 2.0D && Math.abs(this.posZ - (double)blockpos.getZ()) <= 3.0D; + } + } + + private void setRenderOffsetForSleep(EnumFacing bedDirection) + { + this.renderOffsetX = -1.8F * (float)bedDirection.getFrontOffsetX(); + this.renderOffsetZ = -1.8F * (float)bedDirection.getFrontOffsetZ(); + } + + /** + * Wake up the player if they're sleeping. + */ + public void wakeUpPlayer(boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerWakeup(this, immediately, updateWorldFlag, setSpawn); + this.setSize(0.6F, 1.8F); + IBlockState iblockstate = this.bedLocation == null ? null : this.world.getBlockState(this.bedLocation); + + if (this.bedLocation != null && iblockstate.getBlock().isBed(iblockstate, world, bedLocation, this)) + { + iblockstate.getBlock().setBedOccupied(world, bedLocation, this, false); + BlockPos blockpos = iblockstate.getBlock().getBedSpawnPosition(iblockstate, world, bedLocation, this); + + if (blockpos == null) + { + blockpos = this.bedLocation.up(); + } + + this.setPosition((double)((float)blockpos.getX() + 0.5F), (double)((float)blockpos.getY() + 0.1F), (double)((float)blockpos.getZ() + 0.5F)); + } + else + { + setSpawn = false; + } + + this.sleeping = false; + + if (!this.world.isRemote && updateWorldFlag) + { + this.world.updateAllPlayersSleepingFlag(); + } + + this.sleepTimer = immediately ? 0 : 100; + + if (setSpawn) + { + this.setSpawnPoint(this.bedLocation, false); + } + } + + private boolean isInBed() + { + return net.minecraftforge.event.ForgeEventFactory.fireSleepingLocationCheck(this, this.bedLocation); + } + + /** + * Return null if bed is invalid + */ + @Nullable + public static BlockPos getBedSpawnLocation(World worldIn, BlockPos bedLocation, boolean forceSpawn) + { + IBlockState state = worldIn.getBlockState(bedLocation); + Block block = state.getBlock(); + + if (!block.isBed(state, worldIn, bedLocation, null)) + { + if (!forceSpawn) + { + return null; + } + else + { + boolean flag = block.canSpawnInBlock(); + boolean flag1 = worldIn.getBlockState(bedLocation.up()).getBlock().canSpawnInBlock(); + return flag && flag1 ? bedLocation : null; + } + } + else + { + return block.getBedSpawnPosition(state, worldIn, bedLocation, null); + } + } + + /** + * Returns the orientation of the bed in degrees. + */ + @SideOnly(Side.CLIENT) + public float getBedOrientationInDegrees() + { + IBlockState state = this.bedLocation == null ? null : this.world.getBlockState(bedLocation); + if (state != null && state.getBlock().isBed(state, world, bedLocation, this)) + { + EnumFacing enumfacing = state.getBlock().getBedDirection(state, world, bedLocation); + + switch (enumfacing) + { + case SOUTH: + return 90.0F; + case WEST: + return 0.0F; + case NORTH: + return 270.0F; + case EAST: + return 180.0F; + } + } + + return 0.0F; + } + + /** + * Returns whether player is sleeping or not + */ + public boolean isPlayerSleeping() + { + return this.sleeping; + } + + /** + * Returns whether or not the player is asleep and the screen has fully faded. + */ + public boolean isPlayerFullyAsleep() + { + return this.sleeping && this.sleepTimer >= 100; + } + + @SideOnly(Side.CLIENT) + public int getSleepTimer() + { + return this.sleepTimer; + } + + public void sendStatusMessage(ITextComponent chatComponent, boolean actionBar) + { + } + + public BlockPos getBedLocation() + { + return getBedLocation(this.dimension); + } + + @Deprecated // Use dimension-sensitive version. + public boolean isSpawnForced() + { + return isSpawnForced(this.dimension); + } + + public void setSpawnPoint(BlockPos pos, boolean forced) + { + if(net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnSet(this, pos, forced)) return; + if (this.dimension != 0) + { + setSpawnChunk(pos, forced, this.dimension); + return; + } + + if (pos != null) + { + this.spawnPos = pos; + this.spawnForced = forced; + } + else + { + this.spawnPos = null; + this.spawnForced = false; + } + } + + /** + * Add a stat once + */ + public void addStat(StatBase stat) + { + this.addStat(stat, 1); + } + + /** + * Adds a value to a statistic field. + */ + public void addStat(StatBase stat, int amount) + { + } + + public void takeStat(StatBase stat) + { + } + + public void unlockRecipes(List p_192021_1_) + { + } + + public void unlockRecipes(ResourceLocation[] p_193102_1_) + { + } + + public void resetRecipes(List p_192022_1_) + { + } + + /** + * Causes this entity to do an upwards motion (jumping). + */ + public void jump() + { + super.jump(); + this.addStat(StatList.JUMP); + + if (this.isSprinting()) + { + this.addExhaustion(0.2F); + } + else + { + this.addExhaustion(0.05F); + } + } + + public void travel(float strafe, float vertical, float forward) + { + double d0 = this.posX; + double d1 = this.posY; + double d2 = this.posZ; + + if (this.capabilities.isFlying && !this.isRiding()) + { + double d3 = this.motionY; + float f = this.jumpMovementFactor; + this.jumpMovementFactor = this.capabilities.getFlySpeed() * (float)(this.isSprinting() ? 2 : 1); + super.travel(strafe, vertical, forward); + this.motionY = d3 * 0.6D; + this.jumpMovementFactor = f; + this.fallDistance = 0.0F; + this.setFlag(7, false); + } + else + { + super.travel(strafe, vertical, forward); + } + + this.addMovementStat(this.posX - d0, this.posY - d1, this.posZ - d2); + } + + /** + * the movespeed used for the new AI system + */ + public float getAIMoveSpeed() + { + return (float)this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue(); + } + + /** + * Adds a value to a movement statistic field - like run, walk, swin or climb. + */ + public void addMovementStat(double p_71000_1_, double p_71000_3_, double p_71000_5_) + { + if (!this.isRiding()) + { + if (this.isInsideOfMaterial(Material.WATER)) + { + int i = Math.round(MathHelper.sqrt(p_71000_1_ * p_71000_1_ + p_71000_3_ * p_71000_3_ + p_71000_5_ * p_71000_5_) * 100.0F); + + if (i > 0) + { + this.addStat(StatList.DIVE_ONE_CM, i); + this.addExhaustion(0.01F * (float)i * 0.01F); + } + } + else if (this.isInWater()) + { + int j = Math.round(MathHelper.sqrt(p_71000_1_ * p_71000_1_ + p_71000_5_ * p_71000_5_) * 100.0F); + + if (j > 0) + { + this.addStat(StatList.SWIM_ONE_CM, j); + this.addExhaustion(0.01F * (float)j * 0.01F); + } + } + else if (this.isOnLadder()) + { + if (p_71000_3_ > 0.0D) + { + this.addStat(StatList.CLIMB_ONE_CM, (int)Math.round(p_71000_3_ * 100.0D)); + } + } + else if (this.onGround) + { + int k = Math.round(MathHelper.sqrt(p_71000_1_ * p_71000_1_ + p_71000_5_ * p_71000_5_) * 100.0F); + + if (k > 0) + { + if (this.isSprinting()) + { + this.addStat(StatList.SPRINT_ONE_CM, k); + this.addExhaustion(0.1F * (float)k * 0.01F); + } + else if (this.isSneaking()) + { + this.addStat(StatList.CROUCH_ONE_CM, k); + this.addExhaustion(0.0F * (float)k * 0.01F); + } + else + { + this.addStat(StatList.WALK_ONE_CM, k); + this.addExhaustion(0.0F * (float)k * 0.01F); + } + } + } + else if (this.isElytraFlying()) + { + int l = Math.round(MathHelper.sqrt(p_71000_1_ * p_71000_1_ + p_71000_3_ * p_71000_3_ + p_71000_5_ * p_71000_5_) * 100.0F); + this.addStat(StatList.AVIATE_ONE_CM, l); + } + else + { + int i1 = Math.round(MathHelper.sqrt(p_71000_1_ * p_71000_1_ + p_71000_5_ * p_71000_5_) * 100.0F); + + if (i1 > 25) + { + this.addStat(StatList.FLY_ONE_CM, i1); + } + } + } + } + + /** + * Adds a value to a mounted movement statistic field - by minecart, boat, or pig. + */ + private void addMountedMovementStat(double p_71015_1_, double p_71015_3_, double p_71015_5_) + { + if (this.isRiding()) + { + int i = Math.round(MathHelper.sqrt(p_71015_1_ * p_71015_1_ + p_71015_3_ * p_71015_3_ + p_71015_5_ * p_71015_5_) * 100.0F); + + if (i > 0) + { + if (this.getRidingEntity() instanceof EntityMinecart) + { + this.addStat(StatList.MINECART_ONE_CM, i); + } + else if (this.getRidingEntity() instanceof EntityBoat) + { + this.addStat(StatList.BOAT_ONE_CM, i); + } + else if (this.getRidingEntity() instanceof EntityPig) + { + this.addStat(StatList.PIG_ONE_CM, i); + } + else if (this.getRidingEntity() instanceof AbstractHorse) + { + this.addStat(StatList.HORSE_ONE_CM, i); + } + } + } + } + + public void fall(float distance, float damageMultiplier) + { + if (!this.capabilities.allowFlying) + { + if (distance >= 2.0F) + { + this.addStat(StatList.FALL_ONE_CM, (int)Math.round((double)distance * 100.0D)); + } + + super.fall(distance, damageMultiplier); + } + else + { + net.minecraftforge.event.ForgeEventFactory.onPlayerFall(this, distance, damageMultiplier); + } + } + + /** + * Plays the {@link #getSplashSound() splash sound}, and the {@link ParticleType#WATER_BUBBLE} and {@link + * ParticleType#WATER_SPLASH} particles. + */ + protected void doWaterSplashEffect() + { + if (!this.isSpectator()) + { + super.doWaterSplashEffect(); + } + } + + protected SoundEvent getFallSound(int heightIn) + { + return heightIn > 4 ? SoundEvents.ENTITY_PLAYER_BIG_FALL : SoundEvents.ENTITY_PLAYER_SMALL_FALL; + } + + /** + * This method gets called when the entity kills another one. + */ + public void onKillEntity(EntityLivingBase entityLivingIn) + { + EntityList.EntityEggInfo entitylist$entityegginfo = EntityList.ENTITY_EGGS.get(EntityList.getKey(entityLivingIn)); + + if (entitylist$entityegginfo != null) + { + this.addStat(entitylist$entityegginfo.killEntityStat); + } + } + + /** + * Sets the Entity inside a web block. + */ + public void setInWeb() + { + if (!this.capabilities.isFlying) + { + super.setInWeb(); + } + } + + /** + * Add experience points to player. + */ + public void addExperience(int amount) + { + this.addScore(amount); + int i = Integer.MAX_VALUE - this.experienceTotal; + + if (amount > i) + { + amount = i; + } + + this.experience += (float)amount / (float)this.xpBarCap(); + + for (this.experienceTotal += amount; this.experience >= 1.0F; this.experience /= (float)this.xpBarCap()) + { + this.experience = (this.experience - 1.0F) * (float)this.xpBarCap(); + this.addExperienceLevel(1); + } + } + + public int getXPSeed() + { + return this.xpSeed; + } + + public void onEnchant(ItemStack enchantedItem, int cost) + { + this.experienceLevel -= cost; + + if (this.experienceLevel < 0) + { + this.experienceLevel = 0; + this.experience = 0.0F; + this.experienceTotal = 0; + } + + this.xpSeed = this.rand.nextInt(); + } + + /** + * Add experience levels to this player. + */ + public void addExperienceLevel(int levels) + { + this.experienceLevel += levels; + + if (this.experienceLevel < 0) + { + this.experienceLevel = 0; + this.experience = 0.0F; + this.experienceTotal = 0; + } + + if (levels > 0 && this.experienceLevel % 5 == 0 && (float)this.lastXPSound < (float)this.ticksExisted - 100.0F) + { + float f = this.experienceLevel > 30 ? 1.0F : (float)this.experienceLevel / 30.0F; + this.world.playSound((EntityPlayer)null, this.posX, this.posY, this.posZ, SoundEvents.ENTITY_PLAYER_LEVELUP, this.getSoundCategory(), f * 0.75F, 1.0F); + this.lastXPSound = this.ticksExisted; + } + } + + /** + * This method returns the cap amount of experience that the experience bar can hold. With each level, the + * experience cap on the player's experience bar is raised by 10. + */ + public int xpBarCap() + { + if (this.experienceLevel >= 30) + { + return 112 + (this.experienceLevel - 30) * 9; + } + else + { + return this.experienceLevel >= 15 ? 37 + (this.experienceLevel - 15) * 5 : 7 + this.experienceLevel * 2; + } + } + + /** + * increases exhaustion level by supplied amount + */ + public void addExhaustion(float exhaustion) + { + if (!this.capabilities.disableDamage) + { + if (!this.world.isRemote) + { + this.foodStats.addExhaustion(exhaustion); + } + } + } + + /** + * Returns the player's FoodStats object. + */ + public FoodStats getFoodStats() + { + return this.foodStats; + } + + public boolean canEat(boolean ignoreHunger) + { + return (ignoreHunger || this.foodStats.needFood()) && !this.capabilities.disableDamage; + } + + /** + * Checks if the player's health is not full and not zero. + */ + public boolean shouldHeal() + { + return this.getHealth() > 0.0F && this.getHealth() < this.getMaxHealth(); + } + + public boolean isAllowEdit() + { + return this.capabilities.allowEdit; + } + + /** + * Returns whether this player can modify the block at a certain location with the given stack. + *

+ * The position being queried is {@code pos.offset(facing.getOpposite()))}. + * + * @return Whether this player may modify the queried location in the current world + * @see ItemStack#canPlaceOn(Block) + * @see ItemStack#canEditBlocks() + * @see PlayerCapabilities#allowEdit + * + * @param pos a position adjacent to the queried position + * @param facing the direction from the queried location to (that is, pointing away from the location queried) + * {@code pos} + * @param stack the {@code ItemStack} that would be used to edit the world + */ + public boolean canPlayerEdit(BlockPos pos, EnumFacing facing, ItemStack stack) + { + if (this.capabilities.allowEdit) + { + return true; + } + else if (stack.isEmpty()) + { + return false; + } + else + { + BlockPos blockpos = pos.offset(facing.getOpposite()); + Block block = this.world.getBlockState(blockpos).getBlock(); + return stack.canPlaceOn(block) || stack.canEditBlocks(); + } + } + + /** + * Get the experience points the entity currently has. + */ + protected int getExperiencePoints(EntityPlayer player) + { + if (!this.world.getGameRules().getBoolean("keepInventory") && !this.isSpectator()) + { + int i = this.experienceLevel * 7; + return i > 100 ? 100 : i; + } + else + { + return 0; + } + } + + /** + * Only use is to identify if class is an instance of player for experience dropping + */ + protected boolean isPlayer() + { + return true; + } + + @SideOnly(Side.CLIENT) + public boolean getAlwaysRenderNameTagForRender() + { + return true; + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return !this.capabilities.isFlying; + } + + /** + * Sends the player's abilities to the server (if there is one). + */ + public void sendPlayerAbilities() + { + } + + /** + * Sets the player's game mode and sends it to them. + */ + public void setGameType(GameType gameType) + { + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.gameProfile.getName(); + } + + /** + * Returns the InventoryEnderChest of this player. + */ + public InventoryEnderChest getInventoryEnderChest() + { + return this.enderChest; + } + + public ItemStack getItemStackFromSlot(EntityEquipmentSlot slotIn) + { + if (slotIn == EntityEquipmentSlot.MAINHAND) + { + return this.inventory.getCurrentItem(); + } + else if (slotIn == EntityEquipmentSlot.OFFHAND) + { + return this.inventory.offHandInventory.get(0); + } + else + { + return slotIn.getSlotType() == EntityEquipmentSlot.Type.ARMOR ? (ItemStack)this.inventory.armorInventory.get(slotIn.getIndex()) : ItemStack.EMPTY; + } + } + + public void setItemStackToSlot(EntityEquipmentSlot slotIn, ItemStack stack) + { + if (slotIn == EntityEquipmentSlot.MAINHAND) + { + this.playEquipSound(stack); + this.inventory.mainInventory.set(this.inventory.currentItem, stack); + } + else if (slotIn == EntityEquipmentSlot.OFFHAND) + { + this.playEquipSound(stack); + this.inventory.offHandInventory.set(0, stack); + } + else if (slotIn.getSlotType() == EntityEquipmentSlot.Type.ARMOR) + { + this.playEquipSound(stack); + this.inventory.armorInventory.set(slotIn.getIndex(), stack); + } + } + + public boolean addItemStackToInventory(ItemStack p_191521_1_) + { + this.playEquipSound(p_191521_1_); + return this.inventory.addItemStackToInventory(p_191521_1_); + } + + public Iterable getHeldEquipment() + { + return Lists.newArrayList(this.getHeldItemMainhand(), this.getHeldItemOffhand()); + } + + public Iterable getArmorInventoryList() + { + return this.inventory.armorInventory; + } + + public boolean addShoulderEntity(NBTTagCompound p_192027_1_) + { + if (!this.isRiding() && this.onGround && !this.isInWater()) + { + if (this.getLeftShoulderEntity().hasNoTags()) + { + this.setLeftShoulderEntity(p_192027_1_); + return true; + } + else if (this.getRightShoulderEntity().hasNoTags()) + { + this.setRightShoulderEntity(p_192027_1_); + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } + + protected void spawnShoulderEntities() + { + this.spawnShoulderEntity(this.getLeftShoulderEntity()); + this.setLeftShoulderEntity(new NBTTagCompound()); + this.spawnShoulderEntity(this.getRightShoulderEntity()); + this.setRightShoulderEntity(new NBTTagCompound()); + } + + private void spawnShoulderEntity(@Nullable NBTTagCompound p_192026_1_) + { + if (!this.world.isRemote && !p_192026_1_.hasNoTags()) + { + Entity entity = EntityList.createEntityFromNBT(p_192026_1_, this.world); + + if (entity instanceof EntityTameable) + { + ((EntityTameable)entity).setOwnerId(this.entityUniqueID); + } + + entity.setPosition(this.posX, this.posY + 0.699999988079071D, this.posZ); + this.world.spawnEntity(entity); + } + } + + /** + * Only used by renderer in EntityLivingBase subclasses. + * Determines if an entity is visible or not to a specfic player, if the entity is normally invisible. + * For EntityLivingBase subclasses, returning false when invisible will render the entity semitransparent. + */ + @SideOnly(Side.CLIENT) + public boolean isInvisibleToPlayer(EntityPlayer player) + { + if (!this.isInvisible()) + { + return false; + } + else if (player.isSpectator()) + { + return false; + } + else + { + Team team = this.getTeam(); + return team == null || player == null || player.getTeam() != team || !team.getSeeFriendlyInvisiblesEnabled(); + } + } + + /** + * Returns true if the player is in spectator mode. + */ + public abstract boolean isSpectator(); + + public abstract boolean isCreative(); + + public boolean isPushedByWater() + { + return !this.capabilities.isFlying; + } + + public Scoreboard getWorldScoreboard() + { + return this.world.getScoreboard(); + } + + public Team getTeam() + { + return this.getWorldScoreboard().getPlayersTeam(this.getName()); + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + ITextComponent itextcomponent = new TextComponentString(""); + if (!prefixes.isEmpty()) for (ITextComponent prefix : prefixes) itextcomponent.appendSibling(prefix); + itextcomponent.appendSibling(new TextComponentString(ScorePlayerTeam.formatPlayerName(this.getTeam(), this.getDisplayNameString()))); + if (!suffixes.isEmpty()) for (ITextComponent suffix : suffixes) itextcomponent.appendSibling(suffix); + itextcomponent.getStyle().setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + this.getName() + " ")); + itextcomponent.getStyle().setHoverEvent(this.getHoverEvent()); + itextcomponent.getStyle().setInsertion(this.getName()); + return itextcomponent; + } + + public float getEyeHeight() + { + float f = eyeHeight; + + if (this.isPlayerSleeping()) + { + f = 0.2F; + } + else if (!this.isSneaking() && this.height != 1.65F) + { + if (this.isElytraFlying() || this.height == 0.6F) + { + f = 0.4F; + } + } + else + { + f -= 0.08F; + } + + return f; + } + + public void setAbsorptionAmount(float amount) + { + if (amount < 0.0F) + { + amount = 0.0F; + } + + this.getDataManager().set(ABSORPTION, Float.valueOf(amount)); + } + + /** + * Returns the amount of health added by the Absorption effect. + */ + public float getAbsorptionAmount() + { + return ((Float)this.getDataManager().get(ABSORPTION)).floatValue(); + } + + /** + * Gets a players UUID given their GameProfie + */ + public static UUID getUUID(GameProfile profile) + { + UUID uuid = profile.getId(); + + if (uuid == null) + { + uuid = getOfflineUUID(profile.getName()); + } + + return uuid; + } + + public static UUID getOfflineUUID(String username) + { + return UUID.nameUUIDFromBytes(("OfflinePlayer:" + username).getBytes(StandardCharsets.UTF_8)); + } + + /** + * Check whether this player can open an inventory locked with the given LockCode. + */ + public boolean canOpen(LockCode code) + { + if (code.isEmpty()) + { + return true; + } + else + { + ItemStack itemstack = this.getHeldItemMainhand(); + return !itemstack.isEmpty() && itemstack.hasDisplayName() ? itemstack.getDisplayName().equals(code.getLock()) : false; + } + } + + @SideOnly(Side.CLIENT) + public boolean isWearing(EnumPlayerModelParts part) + { + return (((Byte)this.getDataManager().get(PLAYER_MODEL_FLAG)).byteValue() & part.getPartMask()) == part.getPartMask(); + } + + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return this.getServer().worlds[0].getGameRules().getBoolean("sendCommandFeedback"); + } + + public boolean replaceItemInInventory(int inventorySlot, ItemStack itemStackIn) + { + if (inventorySlot >= 0 && inventorySlot < this.inventory.mainInventory.size()) + { + this.inventory.setInventorySlotContents(inventorySlot, itemStackIn); + return true; + } + else + { + EntityEquipmentSlot entityequipmentslot; + + if (inventorySlot == 100 + EntityEquipmentSlot.HEAD.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.HEAD; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.CHEST.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.CHEST; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.LEGS.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.LEGS; + } + else if (inventorySlot == 100 + EntityEquipmentSlot.FEET.getIndex()) + { + entityequipmentslot = EntityEquipmentSlot.FEET; + } + else + { + entityequipmentslot = null; + } + + if (inventorySlot == 98) + { + this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, itemStackIn); + return true; + } + else if (inventorySlot == 99) + { + this.setItemStackToSlot(EntityEquipmentSlot.OFFHAND, itemStackIn); + return true; + } + else if (entityequipmentslot == null) + { + int i = inventorySlot - 200; + + if (i >= 0 && i < this.enderChest.getSizeInventory()) + { + this.enderChest.setInventorySlotContents(i, itemStackIn); + return true; + } + else + { + return false; + } + } + else + { + if (!itemStackIn.isEmpty()) + { + if (!(itemStackIn.getItem() instanceof ItemArmor) && !(itemStackIn.getItem() instanceof ItemElytra)) + { + if (entityequipmentslot != EntityEquipmentSlot.HEAD) + { + return false; + } + } + else if (EntityLiving.getSlotForItemStack(itemStackIn) != entityequipmentslot) + { + return false; + } + } + + this.inventory.setInventorySlotContents(entityequipmentslot.getIndex() + this.inventory.mainInventory.size(), itemStackIn); + return true; + } + } + } + + /** + * Whether the "reducedDebugInfo" option is active for this player. + */ + @SideOnly(Side.CLIENT) + public boolean hasReducedDebug() + { + return this.hasReducedDebug; + } + + @SideOnly(Side.CLIENT) + public void setReducedDebug(boolean reducedDebug) + { + this.hasReducedDebug = reducedDebug; + } + + public EnumHandSide getPrimaryHand() + { + return ((Byte)this.dataManager.get(MAIN_HAND)).byteValue() == 0 ? EnumHandSide.LEFT : EnumHandSide.RIGHT; + } + + public void setPrimaryHand(EnumHandSide hand) + { + this.dataManager.set(MAIN_HAND, Byte.valueOf((byte)(hand == EnumHandSide.LEFT ? 0 : 1))); + } + + public NBTTagCompound getLeftShoulderEntity() + { + return (NBTTagCompound)this.dataManager.get(LEFT_SHOULDER_ENTITY); + } + + protected void setLeftShoulderEntity(NBTTagCompound tag) + { + this.dataManager.set(LEFT_SHOULDER_ENTITY, tag); + } + + public NBTTagCompound getRightShoulderEntity() + { + return (NBTTagCompound)this.dataManager.get(RIGHT_SHOULDER_ENTITY); + } + + protected void setRightShoulderEntity(NBTTagCompound tag) + { + this.dataManager.set(RIGHT_SHOULDER_ENTITY, tag); + } + + public float getCooldownPeriod() + { + return (float)(1.0D / this.getEntityAttribute(SharedMonsterAttributes.ATTACK_SPEED).getAttributeValue() * 20.0D); + } + + /** + * Returns the percentage of attack power available based on the cooldown (zero to one). + */ + public float getCooledAttackStrength(float adjustTicks) + { + return MathHelper.clamp(((float)this.ticksSinceLastSwing + adjustTicks) / this.getCooldownPeriod(), 0.0F, 1.0F); + } + + public void resetCooldown() + { + this.ticksSinceLastSwing = 0; + } + + public CooldownTracker getCooldownTracker() + { + return this.cooldownTracker; + } + + /** + * Applies a velocity to the entities, to push them away from eachother. + */ + public void applyEntityCollision(Entity entityIn) + { + if (!this.isPlayerSleeping()) + { + super.applyEntityCollision(entityIn); + } + } + + public float getLuck() + { + return (float)this.getEntityAttribute(SharedMonsterAttributes.LUCK).getAttributeValue(); + } + + /** + * Can the player use command blocks. It checks if the player is on Creative mode and has permissions (is he OP) + */ + public boolean canUseCommandBlock() + { + return this.capabilities.isCreativeMode && this.canUseCommand(2, ""); + } + + /** + * Opens a GUI with this player, uses FML's IGuiHandler system. + * Allows for extension by modders. + * + * @param mod The mod trying to open a GUI + * @param modGuiId GUI ID + * @param world Current World + * @param x Passed directly to IGuiHandler, data meaningless Typically world X position + * @param y Passed directly to IGuiHandler, data meaningless Typically world Y position + * @param z Passed directly to IGuiHandler, data meaningless Typically world Z position + */ + public void openGui(Object mod, int modGuiId, World world, int x, int y, int z) + { + net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.openGui(this, mod, modGuiId, world, x, y, z); + } + + + /* ======================================== FORGE START =====================================*/ + /** + * A dimension aware version of getBedLocation. + * @param dimension The dimension to get the bed spawn for + * @return The player specific spawn location for the dimension. May be null. + */ + public BlockPos getBedLocation(int dimension) + { + return dimension == 0 ? spawnPos : spawnChunkMap.get(dimension); + } + + /** + * A dimension aware version of isSpawnForced. + * Noramally isSpawnForced is used to determine if the respawn system should check for a bed or not. + * This just extends that to be dimension aware. + * @param dimension The dimension to get whether to check for a bed before spawning for + * @return The player specific spawn location for the dimension. May be null. + */ + public boolean isSpawnForced(int dimension) + { + if (dimension == 0) return this.spawnForced; + Boolean forced = this.spawnForcedMap.get(dimension); + return forced == null ? false : forced; + } + + /** + * A dimension aware version of setSpawnChunk. + * This functions identically, but allows you to specify which dimension to affect, rather than affecting the player's current dimension. + * @param pos The spawn point to set as the player-specific spawn point for the dimension + * @param forced Whether or not the respawn code should check for a bed at this location (true means it won't check for a bed) + * @param dimension Which dimension to apply the player-specific respawn point to + */ + public void setSpawnChunk(BlockPos pos, boolean forced, int dimension) + { + if (dimension == 0) + { + if (pos != null) + { + spawnPos = pos; + spawnForced = forced; + } + else + { + spawnPos = null; + spawnForced = false; + } + return; + } + + if (pos != null) + { + spawnChunkMap.put(dimension, pos); + spawnForcedMap.put(dimension, forced); + } + else + { + spawnChunkMap.remove(dimension); + spawnForcedMap.remove(dimension); + } + } + + private String displayname; + + /** + * Returns the default eye height of the player + * @return player default eye height + */ + public float getDefaultEyeHeight() + { + return 1.62F; + } + + /** + * Get the currently computed display name, cached for efficiency. + * @return the current display name + */ + public String getDisplayNameString() + { + if(this.displayname == null) + { + this.displayname = net.minecraftforge.event.ForgeEventFactory.getPlayerDisplayName(this, this.getName()); + } + return this.displayname; + } + + /** + * Force the displayed name to refresh + */ + public void refreshDisplayName() + { + this.displayname = net.minecraftforge.event.ForgeEventFactory.getPlayerDisplayName(this, this.getName()); + } + + private final java.util.Collection prefixes = new java.util.LinkedList(); + private final java.util.Collection suffixes = new java.util.LinkedList(); + + /** + * Add a prefix to the player's username in chat + * @param prefix The prefix + */ + public void addPrefix(ITextComponent prefix) { prefixes.add(prefix); } + + /** + * Add a suffix to the player's username in chat + * @param suffix The suffix + */ + public void addSuffix(ITextComponent suffix) { suffixes.add(suffix); } + + public java.util.Collection getPrefixes() { return this.prefixes; } + public java.util.Collection getSuffixes() { return this.suffixes; } + + private final net.minecraftforge.items.IItemHandler playerMainHandler = new net.minecraftforge.items.wrapper.PlayerMainInvWrapper(inventory); + private final net.minecraftforge.items.IItemHandler playerEquipmentHandler = new net.minecraftforge.items.wrapper.CombinedInvWrapper( + new net.minecraftforge.items.wrapper.PlayerArmorInvWrapper(inventory), + new net.minecraftforge.items.wrapper.PlayerOffhandInvWrapper(inventory)); + private final net.minecraftforge.items.IItemHandler playerJoinedHandler = new net.minecraftforge.items.wrapper.PlayerInvWrapper(inventory); + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + if (capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + if (facing == null) return (T) playerJoinedHandler; + else if (facing.getAxis().isVertical()) return (T) playerMainHandler; + else if (facing.getAxis().isHorizontal()) return (T) playerEquipmentHandler; + } + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Nullable + private Integer spawnDimension; + public boolean hasSpawnDimension() { return spawnDimension != null; } + public int getSpawnDimension() { return spawnDimension != null ? spawnDimension : 0; } + public void setSpawnDimension(@Nullable Integer dimension) { this.spawnDimension = dimension; } + + /* ======================================== FORGE END =====================================*/ + + public static enum EnumChatVisibility + { + FULL(0, "options.chat.visibility.full"), + SYSTEM(1, "options.chat.visibility.system"), + HIDDEN(2, "options.chat.visibility.hidden"); + + private static final EntityPlayer.EnumChatVisibility[] ID_LOOKUP = new EntityPlayer.EnumChatVisibility[values().length]; + private final int chatVisibility; + private final String resourceKey; + + private EnumChatVisibility(int id, String resourceKey) + { + this.chatVisibility = id; + this.resourceKey = resourceKey; + } + + @SideOnly(Side.CLIENT) + public int getChatVisibility() + { + return this.chatVisibility; + } + + @SideOnly(Side.CLIENT) + public static EntityPlayer.EnumChatVisibility getEnumChatVisibility(int id) + { + return ID_LOOKUP[id % ID_LOOKUP.length]; + } + + @SideOnly(Side.CLIENT) + public String getResourceKey() + { + return this.resourceKey; + } + + static + { + for (EntityPlayer.EnumChatVisibility entityplayer$enumchatvisibility : values()) + { + ID_LOOKUP[entityplayer$enumchatvisibility.chatVisibility] = entityplayer$enumchatvisibility; + } + } + } + + static class SleepEnemyPredicate implements Predicate + { + private final EntityPlayer player; + + private SleepEnemyPredicate(EntityPlayer playerIn) + { + this.player = playerIn; + } + + public boolean apply(@Nullable EntityMob p_apply_1_) + { + return p_apply_1_.isPreventingPlayerRest(this.player); + } + } + + public static enum SleepResult + { + OK, + NOT_POSSIBLE_HERE, + NOT_POSSIBLE_NOW, + TOO_FAR_AWAY, + OTHER_PROBLEM, + NOT_SAFE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/player/EntityPlayerMP.java b/build/tmp/recompileMc/sources/net/minecraft/entity/player/EntityPlayerMP.java new file mode 100644 index 0000000..9edfe99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/player/EntityPlayerMP.java @@ -0,0 +1,1623 @@ +package net.minecraft.entity.player; + +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import io.netty.buffer.Unpooled; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockWall; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.ContainerHorseInventory; +import net.minecraft.inventory.ContainerMerchant; +import net.minecraft.inventory.IContainerListener; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.SlotCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemMapBase; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.client.CPacketClientSettings; +import net.minecraft.network.play.server.SPacketAnimation; +import net.minecraft.network.play.server.SPacketCamera; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.network.play.server.SPacketChat; +import net.minecraft.network.play.server.SPacketCloseWindow; +import net.minecraft.network.play.server.SPacketCombatEvent; +import net.minecraft.network.play.server.SPacketCustomPayload; +import net.minecraft.network.play.server.SPacketDestroyEntities; +import net.minecraft.network.play.server.SPacketEffect; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketEntityStatus; +import net.minecraft.network.play.server.SPacketOpenWindow; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketRemoveEntityEffect; +import net.minecraft.network.play.server.SPacketResourcePackSend; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.network.play.server.SPacketSignEditorOpen; +import net.minecraft.network.play.server.SPacketSoundEffect; +import net.minecraft.network.play.server.SPacketUpdateHealth; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.network.play.server.SPacketUseBed; +import net.minecraft.network.play.server.SPacketWindowItems; +import net.minecraft.network.play.server.SPacketWindowProperty; +import net.minecraft.potion.PotionEffect; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Team; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.PlayerInteractionManager; +import net.minecraft.server.management.UserListOpsEntry; +import net.minecraft.stats.RecipeBookServer; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatList; +import net.minecraft.stats.StatisticsManagerServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.CooldownTracker; +import net.minecraft.util.CooldownTrackerServer; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.village.MerchantRecipeList; +import net.minecraft.world.GameType; +import net.minecraft.world.IInteractionObject; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.ILootContainer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityPlayerMP extends EntityPlayer implements IContainerListener +{ + private static final Logger LOGGER = LogManager.getLogger(); + private String language = "en_US"; + /** The NetServerHandler assigned to this player by the ServerConfigurationManager. */ + public NetHandlerPlayServer connection; + /** Reference to the MinecraftServer object. */ + public final MinecraftServer mcServer; + /** The player interaction manager for this player */ + public final PlayerInteractionManager interactionManager; + /** player X position as seen by PlayerManager */ + public double managedPosX; + /** player Z position as seen by PlayerManager */ + public double managedPosZ; + /** + * This is a queue that contains the entity IDs of entties that need to be removed on the client. Adding an entity + * ID to this queue will cause a SPacketDestroyEntities to be sent to the client. + */ + private final List entityRemoveQueue = Lists.newLinkedList(); + private final PlayerAdvancements advancements; + private final StatisticsManagerServer statsFile; + /** the total health of the player, includes actual health and absorption health. Updated every tick. */ + private float lastHealthScore = Float.MIN_VALUE; + private int lastFoodScore = Integer.MIN_VALUE; + private int lastAirScore = Integer.MIN_VALUE; + private int lastArmorScore = Integer.MIN_VALUE; + private int lastLevelScore = Integer.MIN_VALUE; + private int lastExperienceScore = Integer.MIN_VALUE; + /** amount of health the client was last set to */ + private float lastHealth = -1.0E8F; + /** set to foodStats.GetFoodLevel */ + private int lastFoodLevel = -99999999; + /** set to foodStats.getSaturationLevel() == 0.0F each tick */ + private boolean wasHungry = true; + /** Amount of experience the client was last set to */ + private int lastExperience = -99999999; + private int respawnInvulnerabilityTicks = 60; + private EntityPlayer.EnumChatVisibility chatVisibility; + private boolean chatColours = true; + private long playerLastActiveTime = System.currentTimeMillis(); + /** The entity the player is currently spectating through. */ + private Entity spectatingEntity; + private boolean invulnerableDimensionChange; + private boolean seenCredits; + private final RecipeBookServer recipeBook = new RecipeBookServer(); + /** The position this player started levitating at. */ + private Vec3d levitationStartPos; + /** The value of ticksExisted when this player started levitating. */ + private int levitatingSince; + private boolean disconnected; + private Vec3d enteredNetherPosition; + /** The currently in use window ID. Incremented every time a window is opened. */ + public int currentWindowId; + /** + * set to true when player is moving quantity of items from one inventory to another(crafting) but item in either + * slot is not changed + */ + public boolean isChangingQuantityOnly; + public int ping; + /** True when the player has left the End using an the exit portal, but has not yet been respawned in the overworld */ + public boolean queuedEndExit; + + public EntityPlayerMP(MinecraftServer server, WorldServer worldIn, GameProfile profile, PlayerInteractionManager interactionManagerIn) + { + super(worldIn, profile); + interactionManagerIn.player = this; + this.interactionManager = interactionManagerIn; + BlockPos blockpos = worldIn.provider.getRandomizedSpawnPoint(); + + if (false && worldIn.provider.hasSkyLight() && worldIn.getWorldInfo().getGameType() != GameType.ADVENTURE) + { + int i = Math.max(0, server.getSpawnRadius(worldIn)); + int j = MathHelper.floor(worldIn.getWorldBorder().getClosestDistance((double)blockpos.getX(), (double)blockpos.getZ())); + + if (j < i) + { + i = j; + } + + if (j <= 1) + { + i = 1; + } + + blockpos = worldIn.getTopSolidOrLiquidBlock(blockpos.add(this.rand.nextInt(i * 2 + 1) - i, 0, this.rand.nextInt(i * 2 + 1) - i)); + } + + this.mcServer = server; + this.statsFile = server.getPlayerList().getPlayerStatsFile(this); + this.advancements = server.getPlayerList().getPlayerAdvancements(this); + this.stepHeight = 1.0F; + this.moveToBlockPosAndAngles(blockpos, 0.0F, 0.0F); + + while (!worldIn.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && this.posY < 255.0D) + { + this.setPosition(this.posX, this.posY + 1.0D, this.posZ); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("playerGameType", 99)) + { + if (this.getServer().getForceGamemode()) + { + this.interactionManager.setGameType(this.getServer().getGameType()); + } + else + { + this.interactionManager.setGameType(GameType.getByID(compound.getInteger("playerGameType"))); + } + } + + if (compound.hasKey("enteredNetherPosition", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("enteredNetherPosition"); + this.enteredNetherPosition = new Vec3d(nbttagcompound.getDouble("x"), nbttagcompound.getDouble("y"), nbttagcompound.getDouble("z")); + } + + this.seenCredits = compound.getBoolean("seenCredits"); + + if (compound.hasKey("recipeBook", 10)) + { + this.recipeBook.read(compound.getCompoundTag("recipeBook")); + } + } + + public static void registerFixesPlayerMP(DataFixer p_191522_0_) + { + p_191522_0_.registerWalker(FixTypes.PLAYER, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if (compound.hasKey("RootVehicle", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("RootVehicle"); + + if (nbttagcompound.hasKey("Entity", 10)) + { + nbttagcompound.setTag("Entity", fixer.process(FixTypes.ENTITY, nbttagcompound.getCompoundTag("Entity"), versionIn)); + } + } + + return compound; + } + }); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("playerGameType", this.interactionManager.getGameType().getID()); + compound.setBoolean("seenCredits", this.seenCredits); + + if (this.enteredNetherPosition != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setDouble("x", this.enteredNetherPosition.x); + nbttagcompound.setDouble("y", this.enteredNetherPosition.y); + nbttagcompound.setDouble("z", this.enteredNetherPosition.z); + compound.setTag("enteredNetherPosition", nbttagcompound); + } + + Entity entity1 = this.getLowestRidingEntity(); + Entity entity = this.getRidingEntity(); + + if (entity != null && entity1 != this && entity1.getRecursivePassengersByType(EntityPlayerMP.class).size() == 1) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + NBTTagCompound nbttagcompound2 = new NBTTagCompound(); + entity1.writeToNBTOptional(nbttagcompound2); + nbttagcompound1.setUniqueId("Attach", entity.getUniqueID()); + nbttagcompound1.setTag("Entity", nbttagcompound2); + compound.setTag("RootVehicle", nbttagcompound1); + } + + compound.setTag("recipeBook", this.recipeBook.write()); + } + + /** + * Add experience levels to this player. + */ + public void addExperienceLevel(int levels) + { + super.addExperienceLevel(levels); + this.lastExperience = -1; + } + + public void onEnchant(ItemStack enchantedItem, int cost) + { + super.onEnchant(enchantedItem, cost); + this.lastExperience = -1; + } + + public void addSelfToInternalCraftingInventory() + { + this.openContainer.addListener(this); + } + + /** + * Sends an ENTER_COMBAT packet to the client + */ + public void sendEnterCombat() + { + super.sendEnterCombat(); + this.connection.sendPacket(new SPacketCombatEvent(this.getCombatTracker(), SPacketCombatEvent.Event.ENTER_COMBAT)); + } + + /** + * Sends an END_COMBAT packet to the client + */ + public void sendEndCombat() + { + super.sendEndCombat(); + this.connection.sendPacket(new SPacketCombatEvent(this.getCombatTracker(), SPacketCombatEvent.Event.END_COMBAT)); + } + + protected void onInsideBlock(IBlockState p_191955_1_) + { + CriteriaTriggers.ENTER_BLOCK.trigger(this, p_191955_1_); + } + + protected CooldownTracker createCooldownTracker() + { + return new CooldownTrackerServer(this); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.interactionManager.updateBlockRemoving(); + --this.respawnInvulnerabilityTicks; + + if (this.hurtResistantTime > 0) + { + --this.hurtResistantTime; + } + + this.openContainer.detectAndSendChanges(); + + if (!this.world.isRemote && this.openContainer != null && !this.openContainer.canInteractWith(this)) + { + this.closeScreen(); + this.openContainer = this.inventoryContainer; + } + + while (!this.entityRemoveQueue.isEmpty()) + { + int i = Math.min(this.entityRemoveQueue.size(), Integer.MAX_VALUE); + int[] aint = new int[i]; + Iterator iterator = this.entityRemoveQueue.iterator(); + int j = 0; + + while (iterator.hasNext() && j < i) + { + aint[j++] = ((Integer)iterator.next()).intValue(); + iterator.remove(); + } + + this.connection.sendPacket(new SPacketDestroyEntities(aint)); + } + + Entity entity = this.getSpectatingEntity(); + + if (entity != this) + { + if (entity.isEntityAlive()) + { + this.setPositionAndRotation(entity.posX, entity.posY, entity.posZ, entity.rotationYaw, entity.rotationPitch); + this.mcServer.getPlayerList().serverUpdateMovingPlayer(this); + + if (this.isSneaking()) + { + this.setSpectatingEntity(this); + } + } + else + { + this.setSpectatingEntity(this); + } + } + + CriteriaTriggers.TICK.trigger(this); + + if (this.levitationStartPos != null) + { + CriteriaTriggers.LEVITATION.trigger(this, this.levitationStartPos, this.ticksExisted - this.levitatingSince); + } + + this.advancements.flushDirty(this); + } + + public void onUpdateEntity() + { + try + { + super.onUpdate(); + + for (int i = 0; i < this.inventory.getSizeInventory(); ++i) + { + ItemStack itemstack = this.inventory.getStackInSlot(i); + + if (!itemstack.isEmpty() && itemstack.getItem().isMap()) + { + Packet packet = ((ItemMapBase)itemstack.getItem()).createMapDataPacket(itemstack, this.world, this); + + if (packet != null) + { + this.connection.sendPacket(packet); + } + } + } + + if (this.getHealth() != this.lastHealth || this.lastFoodLevel != this.foodStats.getFoodLevel() || this.foodStats.getSaturationLevel() == 0.0F != this.wasHungry) + { + this.connection.sendPacket(new SPacketUpdateHealth(this.getHealth(), this.foodStats.getFoodLevel(), this.foodStats.getSaturationLevel())); + this.lastHealth = this.getHealth(); + this.lastFoodLevel = this.foodStats.getFoodLevel(); + this.wasHungry = this.foodStats.getSaturationLevel() == 0.0F; + } + + if (this.getHealth() + this.getAbsorptionAmount() != this.lastHealthScore) + { + this.lastHealthScore = this.getHealth() + this.getAbsorptionAmount(); + this.updateScorePoints(IScoreCriteria.HEALTH, MathHelper.ceil(this.lastHealthScore)); + } + + if (this.foodStats.getFoodLevel() != this.lastFoodScore) + { + this.lastFoodScore = this.foodStats.getFoodLevel(); + this.updateScorePoints(IScoreCriteria.FOOD, MathHelper.ceil((float)this.lastFoodScore)); + } + + if (this.getAir() != this.lastAirScore) + { + this.lastAirScore = this.getAir(); + this.updateScorePoints(IScoreCriteria.AIR, MathHelper.ceil((float)this.lastAirScore)); + } + + if (this.getTotalArmorValue() != this.lastArmorScore) + { + this.lastArmorScore = this.getTotalArmorValue(); + this.updateScorePoints(IScoreCriteria.ARMOR, MathHelper.ceil((float)this.lastArmorScore)); + } + + if (this.experienceTotal != this.lastExperienceScore) + { + this.lastExperienceScore = this.experienceTotal; + this.updateScorePoints(IScoreCriteria.XP, MathHelper.ceil((float)this.lastExperienceScore)); + } + + if (this.experienceLevel != this.lastLevelScore) + { + this.lastLevelScore = this.experienceLevel; + this.updateScorePoints(IScoreCriteria.LEVEL, MathHelper.ceil((float)this.lastLevelScore)); + } + + if (this.experienceTotal != this.lastExperience) + { + this.lastExperience = this.experienceTotal; + this.connection.sendPacket(new SPacketSetExperience(this.experience, this.experienceTotal, this.experienceLevel)); + } + + if (this.ticksExisted % 20 == 0) + { + CriteriaTriggers.LOCATION.trigger(this); + } + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Ticking player"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Player being ticked"); + this.addEntityCrashInfo(crashreportcategory); + throw new ReportedException(crashreport); + } + } + + private void updateScorePoints(IScoreCriteria criteria, int points) + { + for (ScoreObjective scoreobjective : this.getWorldScoreboard().getObjectivesFromCriteria(criteria)) + { + Score score = this.getWorldScoreboard().getOrCreateScore(this.getName(), scoreobjective); + score.setScorePoints(points); + } + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource cause) + { + if (net.minecraftforge.common.ForgeHooks.onLivingDeath(this, cause)) return; + boolean flag = this.world.getGameRules().getBoolean("showDeathMessages"); + this.connection.sendPacket(new SPacketCombatEvent(this.getCombatTracker(), SPacketCombatEvent.Event.ENTITY_DIED, flag)); + + if (flag) + { + Team team = this.getTeam(); + + if (team != null && team.getDeathMessageVisibility() != Team.EnumVisible.ALWAYS) + { + if (team.getDeathMessageVisibility() == Team.EnumVisible.HIDE_FOR_OTHER_TEAMS) + { + this.mcServer.getPlayerList().sendMessageToAllTeamMembers(this, this.getCombatTracker().getDeathMessage()); + } + else if (team.getDeathMessageVisibility() == Team.EnumVisible.HIDE_FOR_OWN_TEAM) + { + this.mcServer.getPlayerList().sendMessageToTeamOrAllPlayers(this, this.getCombatTracker().getDeathMessage()); + } + } + else + { + this.mcServer.getPlayerList().sendMessage(this.getCombatTracker().getDeathMessage()); + } + } + + this.spawnShoulderEntities(); + + if (!this.world.getGameRules().getBoolean("keepInventory") && !this.isSpectator()) + { + captureDrops = true; + capturedDrops.clear(); + this.destroyVanishingCursedItems(); + this.inventory.dropAllItems(); + + captureDrops = false; + net.minecraftforge.event.entity.player.PlayerDropsEvent event = new net.minecraftforge.event.entity.player.PlayerDropsEvent(this, cause, capturedDrops, recentlyHit > 0); + if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) + { + for (net.minecraft.entity.item.EntityItem item : capturedDrops) + { + this.world.spawnEntity(item); + } + } + } + + for (ScoreObjective scoreobjective : this.world.getScoreboard().getObjectivesFromCriteria(IScoreCriteria.DEATH_COUNT)) + { + Score score = this.getWorldScoreboard().getOrCreateScore(this.getName(), scoreobjective); + score.incrementScore(); + } + + EntityLivingBase entitylivingbase = this.getAttackingEntity(); + + if (entitylivingbase != null) + { + EntityList.EntityEggInfo entitylist$entityegginfo = EntityList.ENTITY_EGGS.get(EntityList.getKey(entitylivingbase)); + + if (entitylist$entityegginfo != null) + { + this.addStat(entitylist$entityegginfo.entityKilledByStat); + } + + entitylivingbase.awardKillScore(this, this.scoreValue, cause); + } + + this.addStat(StatList.DEATHS); + this.takeStat(StatList.TIME_SINCE_DEATH); + this.extinguish(); + this.setFlag(0, false); + this.getCombatTracker().reset(); + } + + public void awardKillScore(Entity p_191956_1_, int p_191956_2_, DamageSource p_191956_3_) + { + if (p_191956_1_ != this) + { + super.awardKillScore(p_191956_1_, p_191956_2_, p_191956_3_); + this.addScore(p_191956_2_); + Collection collection = this.getWorldScoreboard().getObjectivesFromCriteria(IScoreCriteria.TOTAL_KILL_COUNT); + + if (p_191956_1_ instanceof EntityPlayer) + { + this.addStat(StatList.PLAYER_KILLS); + collection.addAll(this.getWorldScoreboard().getObjectivesFromCriteria(IScoreCriteria.PLAYER_KILL_COUNT)); + } + else + { + this.addStat(StatList.MOB_KILLS); + } + + collection.addAll(this.awardTeamKillScores(p_191956_1_)); + + for (ScoreObjective scoreobjective : collection) + { + this.getWorldScoreboard().getOrCreateScore(this.getName(), scoreobjective).incrementScore(); + } + + CriteriaTriggers.PLAYER_KILLED_ENTITY.trigger(this, p_191956_1_, p_191956_3_); + } + } + + private Collection awardTeamKillScores(Entity p_192038_1_) + { + String s = p_192038_1_ instanceof EntityPlayer ? p_192038_1_.getName() : p_192038_1_.getCachedUniqueIdString(); + ScorePlayerTeam scoreplayerteam = this.getWorldScoreboard().getPlayersTeam(this.getName()); + + if (scoreplayerteam != null) + { + int i = scoreplayerteam.getColor().getColorIndex(); + + if (i >= 0 && i < IScoreCriteria.KILLED_BY_TEAM.length) + { + for (ScoreObjective scoreobjective : this.getWorldScoreboard().getObjectivesFromCriteria(IScoreCriteria.KILLED_BY_TEAM[i])) + { + Score score = this.getWorldScoreboard().getOrCreateScore(s, scoreobjective); + score.incrementScore(); + } + } + } + + ScorePlayerTeam scoreplayerteam1 = this.getWorldScoreboard().getPlayersTeam(s); + + if (scoreplayerteam1 != null) + { + int j = scoreplayerteam1.getColor().getColorIndex(); + + if (j >= 0 && j < IScoreCriteria.TEAM_KILL.length) + { + return this.getWorldScoreboard().getObjectivesFromCriteria(IScoreCriteria.TEAM_KILL[j]); + } + } + + return Lists.newArrayList(); + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + boolean flag = this.mcServer.isDedicatedServer() && this.canPlayersAttack() && "fall".equals(source.damageType); + + if (!flag && this.respawnInvulnerabilityTicks > 0 && source != DamageSource.OUT_OF_WORLD) + { + return false; + } + else + { + if (source instanceof EntityDamageSource) + { + Entity entity = source.getTrueSource(); + + if (entity instanceof EntityPlayer && !this.canAttackPlayer((EntityPlayer)entity)) + { + return false; + } + + if (entity instanceof EntityArrow) + { + EntityArrow entityarrow = (EntityArrow)entity; + + if (entityarrow.shootingEntity instanceof EntityPlayer && !this.canAttackPlayer((EntityPlayer)entityarrow.shootingEntity)) + { + return false; + } + } + } + + return super.attackEntityFrom(source, amount); + } + } + } + + public boolean canAttackPlayer(EntityPlayer other) + { + return !this.canPlayersAttack() ? false : super.canAttackPlayer(other); + } + + /** + * Returns if other players can attack this player + */ + private boolean canPlayersAttack() + { + return this.mcServer.isPVPEnabled(); + } + + @Nullable + public Entity changeDimension(int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + if (!net.minecraftforge.common.ForgeHooks.onTravelToDimension(this, dimensionIn)) return this; + this.invulnerableDimensionChange = true; + + if (this.dimension == 0 && dimensionIn == -1) + { + this.enteredNetherPosition = new Vec3d(this.posX, this.posY, this.posZ); + } + else if (this.dimension != -1 && dimensionIn != 0) + { + this.enteredNetherPosition = null; + } + + if (this.dimension == 1 && dimensionIn == 1 && teleporter.isVanilla()) + { + this.world.removeEntity(this); + + if (!this.queuedEndExit) + { + this.queuedEndExit = true; + this.connection.sendPacket(new SPacketChangeGameState(4, this.seenCredits ? 0.0F : 1.0F)); + this.seenCredits = true; + } + + return this; + } + else + { + if (this.dimension == 0 && dimensionIn == 1) + { + dimensionIn = 1; + } + + this.mcServer.getPlayerList().transferPlayerToDimension(this, dimensionIn, teleporter); + this.connection.sendPacket(new SPacketEffect(1032, BlockPos.ORIGIN, 0, false)); + this.lastExperience = -1; + this.lastHealth = -1.0F; + this.lastFoodLevel = -1; + return this; + } + } + + public boolean isSpectatedByPlayer(EntityPlayerMP player) + { + if (player.isSpectator()) + { + return this.getSpectatingEntity() == this; + } + else + { + return this.isSpectator() ? false : super.isSpectatedByPlayer(player); + } + } + + private void sendTileEntityUpdate(TileEntity p_147097_1_) + { + if (p_147097_1_ != null) + { + SPacketUpdateTileEntity spacketupdatetileentity = p_147097_1_.getUpdatePacket(); + + if (spacketupdatetileentity != null) + { + this.connection.sendPacket(spacketupdatetileentity); + } + } + } + + /** + * Called when the entity picks up an item. + */ + public void onItemPickup(Entity entityIn, int quantity) + { + super.onItemPickup(entityIn, quantity); + this.openContainer.detectAndSendChanges(); + } + + public EntityPlayer.SleepResult trySleep(BlockPos bedLocation) + { + EntityPlayer.SleepResult entityplayer$sleepresult = super.trySleep(bedLocation); + + if (entityplayer$sleepresult == EntityPlayer.SleepResult.OK) + { + this.addStat(StatList.SLEEP_IN_BED); + Packet packet = new SPacketUseBed(this, bedLocation); + this.getServerWorld().getEntityTracker().sendToTracking(this, packet); + this.connection.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.connection.sendPacket(packet); + CriteriaTriggers.SLEPT_IN_BED.trigger(this); + } + + return entityplayer$sleepresult; + } + + /** + * Wake up the player if they're sleeping. + */ + public void wakeUpPlayer(boolean immediately, boolean updateWorldFlag, boolean setSpawn) + { + if (this.isPlayerSleeping()) + { + this.getServerWorld().getEntityTracker().sendToTrackingAndSelf(this, new SPacketAnimation(this, 2)); + } + + super.wakeUpPlayer(immediately, updateWorldFlag, setSpawn); + + if (this.connection != null) + { + this.connection.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + } + + public boolean startRiding(Entity entityIn, boolean force) + { + Entity entity = this.getRidingEntity(); + + if (!super.startRiding(entityIn, force)) + { + return false; + } + else + { + Entity entity1 = this.getRidingEntity(); + + if (entity1 != entity && this.connection != null) + { + this.connection.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + + return true; + } + } + + /** + * Dismounts this entity from the entity it is riding. + */ + public void dismountRidingEntity() + { + Entity entity = this.getRidingEntity(); + super.dismountRidingEntity(); + Entity entity1 = this.getRidingEntity(); + + if (entity1 != entity && this.connection != null) + { + this.connection.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + } + + /** + * Returns whether this Entity is invulnerable to the given DamageSource. + */ + public boolean isEntityInvulnerable(DamageSource source) + { + return super.isEntityInvulnerable(source) || this.isInvulnerableDimensionChange(); + } + + protected void updateFallState(double y, boolean onGroundIn, IBlockState state, BlockPos pos) + { + } + + protected void frostWalk(BlockPos pos) + { + if (!this.isSpectator()) + { + super.frostWalk(pos); + } + } + + /** + * process player falling based on movement packet + */ + public void handleFalling(double y, boolean onGroundIn) + { + int i = MathHelper.floor(this.posX); + int j = MathHelper.floor(this.posY - 0.20000000298023224D); + int k = MathHelper.floor(this.posZ); + BlockPos blockpos = new BlockPos(i, j, k); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getBlock().isAir(iblockstate, this.world, blockpos)) + { + BlockPos blockpos1 = blockpos.down(); + IBlockState iblockstate1 = this.world.getBlockState(blockpos1); + Block block = iblockstate1.getBlock(); + + if (block instanceof BlockFence || block instanceof BlockWall || block instanceof BlockFenceGate) + { + blockpos = blockpos1; + iblockstate = iblockstate1; + } + } + + super.updateFallState(y, onGroundIn, iblockstate, blockpos); + } + + public void openEditSign(TileEntitySign signTile) + { + signTile.setPlayer(this); + this.connection.sendPacket(new SPacketSignEditorOpen(signTile.getPos())); + } + + /** + * get the next window id to use + */ + public void getNextWindowId() + { + this.currentWindowId = this.currentWindowId % 100 + 1; + } + + public void displayGui(IInteractionObject guiOwner) + { + if (guiOwner instanceof ILootContainer && ((ILootContainer)guiOwner).getLootTable() != null && this.isSpectator()) + { + this.sendStatusMessage((new TextComponentTranslation("container.spectatorCantOpen", new Object[0])).setStyle((new Style()).setColor(TextFormatting.RED)), true); + } + else + { + this.getNextWindowId(); + this.connection.sendPacket(new SPacketOpenWindow(this.currentWindowId, guiOwner.getGuiID(), guiOwner.getDisplayName())); + this.openContainer = guiOwner.createContainer(this.inventory, this); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addListener(this); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerContainerEvent.Open(this, this.openContainer)); + } + } + + /** + * Displays the GUI for interacting with a chest inventory. + */ + public void displayGUIChest(IInventory chestInventory) + { + if (chestInventory instanceof ILootContainer && ((ILootContainer)chestInventory).getLootTable() != null && this.isSpectator()) + { + this.sendStatusMessage((new TextComponentTranslation("container.spectatorCantOpen", new Object[0])).setStyle((new Style()).setColor(TextFormatting.RED)), true); + } + else + { + if (this.openContainer != this.inventoryContainer) + { + this.closeScreen(); + } + + if (chestInventory instanceof ILockableContainer) + { + ILockableContainer ilockablecontainer = (ILockableContainer)chestInventory; + + if (ilockablecontainer.isLocked() && !this.canOpen(ilockablecontainer.getLockCode()) && !this.isSpectator()) + { + this.connection.sendPacket(new SPacketChat(new TextComponentTranslation("container.isLocked", new Object[] {chestInventory.getDisplayName()}), ChatType.GAME_INFO)); + this.connection.sendPacket(new SPacketSoundEffect(SoundEvents.BLOCK_CHEST_LOCKED, SoundCategory.BLOCKS, this.posX, this.posY, this.posZ, 1.0F, 1.0F)); + return; + } + } + + this.getNextWindowId(); + + if (chestInventory instanceof IInteractionObject) + { + this.connection.sendPacket(new SPacketOpenWindow(this.currentWindowId, ((IInteractionObject)chestInventory).getGuiID(), chestInventory.getDisplayName(), chestInventory.getSizeInventory())); + this.openContainer = ((IInteractionObject)chestInventory).createContainer(this.inventory, this); + } + else + { + this.connection.sendPacket(new SPacketOpenWindow(this.currentWindowId, "minecraft:container", chestInventory.getDisplayName(), chestInventory.getSizeInventory())); + this.openContainer = new ContainerChest(this.inventory, chestInventory, this); + } + + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addListener(this); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerContainerEvent.Open(this, this.openContainer)); + } + } + + public void displayVillagerTradeGui(IMerchant villager) + { + this.getNextWindowId(); + this.openContainer = new ContainerMerchant(this.inventory, villager, this.world); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addListener(this); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerContainerEvent.Open(this, this.openContainer)); + IInventory iinventory = ((ContainerMerchant)this.openContainer).getMerchantInventory(); + ITextComponent itextcomponent = villager.getDisplayName(); + this.connection.sendPacket(new SPacketOpenWindow(this.currentWindowId, "minecraft:villager", itextcomponent, iinventory.getSizeInventory())); + MerchantRecipeList merchantrecipelist = villager.getRecipes(this); + + if (merchantrecipelist != null) + { + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeInt(this.currentWindowId); + merchantrecipelist.writeToBuf(packetbuffer); + this.connection.sendPacket(new SPacketCustomPayload("MC|TrList", packetbuffer)); + } + } + + public void openGuiHorseInventory(AbstractHorse horse, IInventory inventoryIn) + { + if (this.openContainer != this.inventoryContainer) + { + this.closeScreen(); + } + + this.getNextWindowId(); + this.connection.sendPacket(new SPacketOpenWindow(this.currentWindowId, "EntityHorse", inventoryIn.getDisplayName(), inventoryIn.getSizeInventory(), horse.getEntityId())); + this.openContainer = new ContainerHorseInventory(this.inventory, inventoryIn, horse, this); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addListener(this); + } + + public void openBook(ItemStack stack, EnumHand hand) + { + Item item = stack.getItem(); + + if (item == Items.WRITTEN_BOOK) + { + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.buffer()); + packetbuffer.writeEnumValue(hand); + this.connection.sendPacket(new SPacketCustomPayload("MC|BOpen", packetbuffer)); + } + } + + public void displayGuiCommandBlock(TileEntityCommandBlock commandBlock) + { + commandBlock.setSendToClient(true); + this.sendTileEntityUpdate(commandBlock); + } + + /** + * Sends the contents of an inventory slot to the client-side Container. This doesn't have to match the actual + * contents of that slot. + */ + public void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack) + { + if (!(containerToSend.getSlot(slotInd) instanceof SlotCrafting)) + { + if (containerToSend == this.inventoryContainer) + { + CriteriaTriggers.INVENTORY_CHANGED.trigger(this, this.inventory); + } + + if (!this.isChangingQuantityOnly) + { + this.connection.sendPacket(new SPacketSetSlot(containerToSend.windowId, slotInd, stack)); + } + } + } + + public void sendContainerToPlayer(Container containerIn) + { + this.sendAllContents(containerIn, containerIn.getInventory()); + } + + /** + * update the crafting window inventory with the items in the list + */ + public void sendAllContents(Container containerToSend, NonNullList itemsList) + { + this.connection.sendPacket(new SPacketWindowItems(containerToSend.windowId, itemsList)); + this.connection.sendPacket(new SPacketSetSlot(-1, -1, this.inventory.getItemStack())); + } + + /** + * Sends two ints to the client-side Container. Used for furnace burning time, smelting progress, brewing progress, + * and enchanting level. Normally the first int identifies which variable to update, and the second contains the new + * value. Both are truncated to shorts in non-local SMP. + */ + public void sendWindowProperty(Container containerIn, int varToUpdate, int newValue) + { + this.connection.sendPacket(new SPacketWindowProperty(containerIn.windowId, varToUpdate, newValue)); + } + + public void sendAllWindowProperties(Container containerIn, IInventory inventory) + { + for (int i = 0; i < inventory.getFieldCount(); ++i) + { + this.connection.sendPacket(new SPacketWindowProperty(containerIn.windowId, i, inventory.getField(i))); + } + } + + /** + * set current crafting inventory back to the 2x2 square + */ + public void closeScreen() + { + this.connection.sendPacket(new SPacketCloseWindow(this.openContainer.windowId)); + this.closeContainer(); + } + + /** + * updates item held by mouse + */ + public void updateHeldItem() + { + if (!this.isChangingQuantityOnly) + { + this.connection.sendPacket(new SPacketSetSlot(-1, -1, this.inventory.getItemStack())); + } + } + + /** + * Closes the container the player currently has open. + */ + public void closeContainer() + { + this.openContainer.onContainerClosed(this); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.player.PlayerContainerEvent.Close(this, this.openContainer)); + this.openContainer = this.inventoryContainer; + } + + public void setEntityActionState(float strafe, float forward, boolean jumping, boolean sneaking) + { + if (this.isRiding()) + { + if (strafe >= -1.0F && strafe <= 1.0F) + { + this.moveStrafing = strafe; + } + + if (forward >= -1.0F && forward <= 1.0F) + { + this.moveForward = forward; + } + + this.isJumping = jumping; + this.setSneaking(sneaking); + } + } + + /** + * Adds a value to a statistic field. + */ + public void addStat(StatBase stat, int amount) + { + if (stat != null) + { + this.statsFile.increaseStat(this, stat, amount); + + for (ScoreObjective scoreobjective : this.getWorldScoreboard().getObjectivesFromCriteria(stat.getCriteria())) + { + this.getWorldScoreboard().getOrCreateScore(this.getName(), scoreobjective).increaseScore(amount); + } + } + } + + public void takeStat(StatBase stat) + { + if (stat != null) + { + this.statsFile.unlockAchievement(this, stat, 0); + + for (ScoreObjective scoreobjective : this.getWorldScoreboard().getObjectivesFromCriteria(stat.getCriteria())) + { + this.getWorldScoreboard().getOrCreateScore(this.getName(), scoreobjective).setScorePoints(0); + } + } + } + + public void unlockRecipes(List p_192021_1_) + { + this.recipeBook.add(p_192021_1_, this); + } + + public void unlockRecipes(ResourceLocation[] p_193102_1_) + { + List list = Lists.newArrayList(); + + for (ResourceLocation resourcelocation : p_193102_1_) + { + list.add(CraftingManager.getRecipe(resourcelocation)); + } + + this.unlockRecipes(list); + } + + public void resetRecipes(List p_192022_1_) + { + this.recipeBook.remove(p_192022_1_, this); + } + + public void mountEntityAndWakeUp() + { + this.disconnected = true; + this.removePassengers(); + + if (this.sleeping) + { + this.wakeUpPlayer(true, false, false); + } + } + + public boolean hasDisconnected() + { + return this.disconnected; + } + + /** + * this function is called when a players inventory is sent to him, lastHealth is updated on any dimension + * transitions, then reset. + */ + public void setPlayerHealthUpdated() + { + this.lastHealth = -1.0E8F; + } + + public void sendStatusMessage(ITextComponent chatComponent, boolean actionBar) + { + this.connection.sendPacket(new SPacketChat(chatComponent, actionBar ? ChatType.GAME_INFO : ChatType.CHAT)); + } + + /** + * Used for when item use count runs out, ie: eating completed + */ + protected void onItemUseFinish() + { + if (!this.activeItemStack.isEmpty() && this.isHandActive()) + { + this.connection.sendPacket(new SPacketEntityStatus(this, (byte)9)); + super.onItemUseFinish(); + } + } + + public void copyFrom(EntityPlayerMP that, boolean keepEverything) + { + if (keepEverything) + { + this.inventory.copyInventory(that.inventory); + this.setHealth(that.getHealth()); + this.foodStats = that.foodStats; + this.experienceLevel = that.experienceLevel; + this.experienceTotal = that.experienceTotal; + this.experience = that.experience; + this.setScore(that.getScore()); + this.lastPortalPos = that.lastPortalPos; + this.lastPortalVec = that.lastPortalVec; + this.teleportDirection = that.teleportDirection; + } + else if (this.world.getGameRules().getBoolean("keepInventory") || that.isSpectator()) + { + this.inventory.copyInventory(that.inventory); + this.experienceLevel = that.experienceLevel; + this.experienceTotal = that.experienceTotal; + this.experience = that.experience; + this.setScore(that.getScore()); + } + + this.xpSeed = that.xpSeed; + this.enderChest = that.enderChest; + this.getDataManager().set(PLAYER_MODEL_FLAG, that.getDataManager().get(PLAYER_MODEL_FLAG)); + this.lastExperience = -1; + this.lastHealth = -1.0F; + this.lastFoodLevel = -1; + this.recipeBook.copyFrom(that.recipeBook); + this.entityRemoveQueue.addAll(that.entityRemoveQueue); + this.seenCredits = that.seenCredits; + this.enteredNetherPosition = that.enteredNetherPosition; + this.setLeftShoulderEntity(that.getLeftShoulderEntity()); + this.setRightShoulderEntity(that.getRightShoulderEntity()); + + this.spawnChunkMap = that.spawnChunkMap; + this.spawnForcedMap = that.spawnForcedMap; + + //Copy over a section of the Entity Data from the old player. + //Allows mods to specify data that persists after players respawn. + NBTTagCompound old = that.getEntityData(); + if (old.hasKey(PERSISTED_NBT_TAG)) + { + getEntityData().setTag(PERSISTED_NBT_TAG, old.getCompoundTag(PERSISTED_NBT_TAG)); + } + net.minecraftforge.event.ForgeEventFactory.onPlayerClone(this, that, !keepEverything); + } + + protected void onNewPotionEffect(PotionEffect id) + { + super.onNewPotionEffect(id); + this.connection.sendPacket(new SPacketEntityEffect(this.getEntityId(), id)); + + if (id.getPotion() == MobEffects.LEVITATION) + { + this.levitatingSince = this.ticksExisted; + this.levitationStartPos = new Vec3d(this.posX, this.posY, this.posZ); + } + + CriteriaTriggers.EFFECTS_CHANGED.trigger(this); + } + + protected void onChangedPotionEffect(PotionEffect id, boolean p_70695_2_) + { + super.onChangedPotionEffect(id, p_70695_2_); + this.connection.sendPacket(new SPacketEntityEffect(this.getEntityId(), id)); + CriteriaTriggers.EFFECTS_CHANGED.trigger(this); + } + + protected void onFinishedPotionEffect(PotionEffect effect) + { + super.onFinishedPotionEffect(effect); + this.connection.sendPacket(new SPacketRemoveEntityEffect(this.getEntityId(), effect.getPotion())); + + if (effect.getPotion() == MobEffects.LEVITATION) + { + this.levitationStartPos = null; + } + + CriteriaTriggers.EFFECTS_CHANGED.trigger(this); + } + + /** + * Sets the position of the entity and updates the 'last' variables + */ + public void setPositionAndUpdate(double x, double y, double z) + { + this.connection.setPlayerLocation(x, y, z, this.rotationYaw, this.rotationPitch); + } + + /** + * Called when the entity is dealt a critical hit. + */ + public void onCriticalHit(Entity entityHit) + { + this.getServerWorld().getEntityTracker().sendToTrackingAndSelf(this, new SPacketAnimation(entityHit, 4)); + } + + public void onEnchantmentCritical(Entity entityHit) + { + this.getServerWorld().getEntityTracker().sendToTrackingAndSelf(this, new SPacketAnimation(entityHit, 5)); + } + + /** + * Sends the player's abilities to the server (if there is one). + */ + public void sendPlayerAbilities() + { + if (this.connection != null) + { + this.connection.sendPacket(new SPacketPlayerAbilities(this.capabilities)); + this.updatePotionMetadata(); + } + } + + public WorldServer getServerWorld() + { + return (WorldServer)this.world; + } + + /** + * Sets the player's game mode and sends it to them. + */ + public void setGameType(GameType gameType) + { + this.interactionManager.setGameType(gameType); + this.connection.sendPacket(new SPacketChangeGameState(3, (float)gameType.getID())); + + if (gameType == GameType.SPECTATOR) + { + this.spawnShoulderEntities(); + this.dismountRidingEntity(); + } + else + { + this.setSpectatingEntity(this); + } + + this.sendPlayerAbilities(); + this.markPotionsDirty(); + } + + /** + * Returns true if the player is in spectator mode. + */ + public boolean isSpectator() + { + return this.interactionManager.getGameType() == GameType.SPECTATOR; + } + + public boolean isCreative() + { + return this.interactionManager.getGameType() == GameType.CREATIVE; + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + this.connection.sendPacket(new SPacketChat(component)); + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + if ("seed".equals(commandName) && !this.mcServer.isDedicatedServer()) + { + return true; + } + else if (!"tell".equals(commandName) && !"help".equals(commandName) && !"me".equals(commandName) && !"trigger".equals(commandName)) + { + if (this.mcServer.getPlayerList().canSendCommands(this.getGameProfile())) + { + UserListOpsEntry userlistopsentry = (UserListOpsEntry)this.mcServer.getPlayerList().getOppedPlayers().getEntry(this.getGameProfile()); + + if (userlistopsentry != null) + { + return userlistopsentry.getPermissionLevel() >= permLevel; + } + else + { + return this.mcServer.getOpPermissionLevel() >= permLevel; + } + } + else + { + return false; + } + } + else + { + return true; + } + } + + /** + * Gets the player's IP address. Used in /banip. + */ + public String getPlayerIP() + { + String s = this.connection.netManager.getRemoteAddress().toString(); + s = s.substring(s.indexOf("/") + 1); + s = s.substring(0, s.indexOf(":")); + return s; + } + + public void handleClientSettings(CPacketClientSettings packetIn) + { + this.language = packetIn.getLang(); + this.chatVisibility = packetIn.getChatVisibility(); + this.chatColours = packetIn.isColorsEnabled(); + this.getDataManager().set(PLAYER_MODEL_FLAG, Byte.valueOf((byte)packetIn.getModelPartFlags())); + this.getDataManager().set(MAIN_HAND, Byte.valueOf((byte)(packetIn.getMainHand() == EnumHandSide.LEFT ? 0 : 1))); + } + + public EntityPlayer.EnumChatVisibility getChatVisibility() + { + return this.chatVisibility; + } + + public void loadResourcePack(String url, String hash) + { + this.connection.sendPacket(new SPacketResourcePackSend(url, hash)); + } + + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, return + * the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return new BlockPos(this.posX, this.posY + 0.5D, this.posZ); + } + + public void markPlayerActive() + { + this.playerLastActiveTime = MinecraftServer.getCurrentTimeMillis(); + } + + /** + * Gets the stats file for reading achievements + */ + public StatisticsManagerServer getStatFile() + { + return this.statsFile; + } + + public RecipeBookServer getRecipeBook() + { + return this.recipeBook; + } + + /** + * Sends a packet to the player to remove an entity. + */ + public void removeEntity(Entity entityIn) + { + if (entityIn instanceof EntityPlayer) + { + this.connection.sendPacket(new SPacketDestroyEntities(new int[] {entityIn.getEntityId()})); + } + else + { + this.entityRemoveQueue.add(Integer.valueOf(entityIn.getEntityId())); + } + } + + public void addEntity(Entity entityIn) + { + this.entityRemoveQueue.remove(Integer.valueOf(entityIn.getEntityId())); + } + + /** + * Clears potion metadata values if the entity has no potion effects. Otherwise, updates potion effect color, + * ambience, and invisibility metadata values + */ + protected void updatePotionMetadata() + { + if (this.isSpectator()) + { + this.resetPotionEffectMetadata(); + this.setInvisible(true); + } + else + { + super.updatePotionMetadata(); + } + + this.getServerWorld().getEntityTracker().updateVisibility(this); + } + + public Entity getSpectatingEntity() + { + return (Entity)(this.spectatingEntity == null ? this : this.spectatingEntity); + } + + public void setSpectatingEntity(Entity entityToSpectate) + { + Entity entity = this.getSpectatingEntity(); + this.spectatingEntity = (Entity)(entityToSpectate == null ? this : entityToSpectate); + + if (entity != this.spectatingEntity) + { + this.connection.sendPacket(new SPacketCamera(this.spectatingEntity)); + this.setPositionAndUpdate(this.spectatingEntity.posX, this.spectatingEntity.posY, this.spectatingEntity.posZ); + } + } + + /** + * Decrements the counter for the remaining time until the entity may use a portal again. + */ + protected void decrementTimeUntilPortal() + { + if (this.timeUntilPortal > 0 && !this.invulnerableDimensionChange) + { + --this.timeUntilPortal; + } + } + + /** + * Attacks for the player the targeted entity with the currently equipped item. The equipped item has hitEntity + * called on it. Args: targetEntity + */ + public void attackTargetEntityWithCurrentItem(Entity targetEntity) + { + if (this.interactionManager.getGameType() == GameType.SPECTATOR) + { + this.setSpectatingEntity(targetEntity); + } + else + { + super.attackTargetEntityWithCurrentItem(targetEntity); + } + } + + public long getLastActiveTime() + { + return this.playerLastActiveTime; + } + + /** + * Returns null which indicates the tab list should just display the player's name, return a different value to + * display the specified text instead of the player's name + */ + @Nullable + public ITextComponent getTabListDisplayName() + { + return null; + } + + public void swingArm(EnumHand hand) + { + super.swingArm(hand); + this.resetCooldown(); + } + + public boolean isInvulnerableDimensionChange() + { + return this.invulnerableDimensionChange; + } + + public void clearInvulnerableDimensionChange() + { + this.invulnerableDimensionChange = false; + } + + public void setElytraFlying() + { + this.setFlag(7, true); + } + + public void clearElytraFlying() + { + this.setFlag(7, true); + this.setFlag(7, false); + } + + public PlayerAdvancements getAdvancements() + { + return this.advancements; + } + + @Nullable + public Vec3d getEnteredNetherPosition() + { + return this.enteredNetherPosition; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/player/EnumPlayerModelParts.java b/build/tmp/recompileMc/sources/net/minecraft/entity/player/EnumPlayerModelParts.java new file mode 100644 index 0000000..a6bdae2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/player/EnumPlayerModelParts.java @@ -0,0 +1,51 @@ +package net.minecraft.entity.player; + +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public enum EnumPlayerModelParts +{ + CAPE(0, "cape"), + JACKET(1, "jacket"), + LEFT_SLEEVE(2, "left_sleeve"), + RIGHT_SLEEVE(3, "right_sleeve"), + LEFT_PANTS_LEG(4, "left_pants_leg"), + RIGHT_PANTS_LEG(5, "right_pants_leg"), + HAT(6, "hat"); + + private final int partId; + private final int partMask; + private final String partName; + private final ITextComponent name; + + private EnumPlayerModelParts(int partIdIn, String partNameIn) + { + this.partId = partIdIn; + this.partMask = 1 << partIdIn; + this.partName = partNameIn; + this.name = new TextComponentTranslation("options.modelPart." + partNameIn, new Object[0]); + } + + public int getPartMask() + { + return this.partMask; + } + + public int getPartId() + { + return this.partId; + } + + public String getPartName() + { + return this.partName; + } + + public ITextComponent getName() + { + return this.name; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/player/InventoryPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/entity/player/InventoryPlayer.java new file mode 100644 index 0000000..9f81476 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/player/InventoryPlayer.java @@ -0,0 +1,1017 @@ +package net.minecraft.entity.player; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.RecipeItemHelper; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ReportedException; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class InventoryPlayer implements IInventory +{ + /** An array of 36 item stacks indicating the main player inventory (including the visible bar). */ + public final NonNullList mainInventory = NonNullList.withSize(36, ItemStack.EMPTY); + /** An array of 4 item stacks containing the currently worn armor pieces. */ + public final NonNullList armorInventory = NonNullList.withSize(4, ItemStack.EMPTY); + public final NonNullList offHandInventory = NonNullList.withSize(1, ItemStack.EMPTY); + private final List> allInventories; + /** The index of the currently held item (0-8). */ + public int currentItem; + /** The player whose inventory this is. */ + public EntityPlayer player; + /** The stack currently held by the mouse cursor */ + private ItemStack itemStack; + private int timesChanged; + + public InventoryPlayer(EntityPlayer playerIn) + { + this.allInventories = Arrays.>asList(this.mainInventory, this.armorInventory, this.offHandInventory); + this.itemStack = ItemStack.EMPTY; + this.player = playerIn; + } + + /** + * Returns the item stack currently held by the player. + */ + public ItemStack getCurrentItem() + { + return isHotbar(this.currentItem) ? (ItemStack)this.mainInventory.get(this.currentItem) : ItemStack.EMPTY; + } + + /** + * Get the size of the player hotbar inventory + */ + public static int getHotbarSize() + { + return 9; + } + + private boolean canMergeStacks(ItemStack stack1, ItemStack stack2) + { + return !stack1.isEmpty() && this.stackEqualExact(stack1, stack2) && stack1.isStackable() && stack1.getCount() < stack1.getMaxStackSize() && stack1.getCount() < this.getInventoryStackLimit(); + } + + /** + * Checks item, NBT, and meta if the item is not damageable + */ + private boolean stackEqualExact(ItemStack stack1, ItemStack stack2) + { + return stack1.getItem() == stack2.getItem() && (!stack1.getHasSubtypes() || stack1.getMetadata() == stack2.getMetadata()) && ItemStack.areItemStackTagsEqual(stack1, stack2); + } + + /** + * Returns the first item stack that is empty. + */ + public int getFirstEmptyStack() + { + for (int i = 0; i < this.mainInventory.size(); ++i) + { + if (((ItemStack)this.mainInventory.get(i)).isEmpty()) + { + return i; + } + } + + return -1; + } + + @SideOnly(Side.CLIENT) + public void setPickedItemStack(ItemStack stack) + { + int i = this.getSlotFor(stack); + + if (isHotbar(i)) + { + this.currentItem = i; + } + else + { + if (i == -1) + { + this.currentItem = this.getBestHotbarSlot(); + + if (!((ItemStack)this.mainInventory.get(this.currentItem)).isEmpty()) + { + int j = this.getFirstEmptyStack(); + + if (j != -1) + { + this.mainInventory.set(j, this.mainInventory.get(this.currentItem)); + } + } + + this.mainInventory.set(this.currentItem, stack); + } + else + { + this.pickItem(i); + } + } + } + + public void pickItem(int index) + { + this.currentItem = this.getBestHotbarSlot(); + ItemStack itemstack = this.mainInventory.get(this.currentItem); + this.mainInventory.set(this.currentItem, this.mainInventory.get(index)); + this.mainInventory.set(index, itemstack); + } + + public static boolean isHotbar(int index) + { + return index >= 0 && index < 9; + } + + /** + * Finds the stack or an equivalent one in the main inventory + */ + @SideOnly(Side.CLIENT) + public int getSlotFor(ItemStack stack) + { + for (int i = 0; i < this.mainInventory.size(); ++i) + { + if (!((ItemStack)this.mainInventory.get(i)).isEmpty() && this.stackEqualExact(stack, this.mainInventory.get(i))) + { + return i; + } + } + + return -1; + } + + public int findSlotMatchingUnusedItem(ItemStack p_194014_1_) + { + for (int i = 0; i < this.mainInventory.size(); ++i) + { + ItemStack itemstack = this.mainInventory.get(i); + + if (!((ItemStack)this.mainInventory.get(i)).isEmpty() && this.stackEqualExact(p_194014_1_, this.mainInventory.get(i)) && !((ItemStack)this.mainInventory.get(i)).isItemDamaged() && !itemstack.isItemEnchanted() && !itemstack.hasDisplayName()) + { + return i; + } + } + + return -1; + } + + public int getBestHotbarSlot() + { + for (int i = 0; i < 9; ++i) + { + int j = (this.currentItem + i) % 9; + + if (((ItemStack)this.mainInventory.get(j)).isEmpty()) + { + return j; + } + } + + for (int k = 0; k < 9; ++k) + { + int l = (this.currentItem + k) % 9; + + if (!((ItemStack)this.mainInventory.get(l)).isItemEnchanted()) + { + return l; + } + } + + return this.currentItem; + } + + /** + * Switch the current item to the next one or the previous one + */ + @SideOnly(Side.CLIENT) + public void changeCurrentItem(int direction) + { + if (direction > 0) + { + direction = 1; + } + + if (direction < 0) + { + direction = -1; + } + + for (this.currentItem -= direction; this.currentItem < 0; this.currentItem += 9) + { + ; + } + + while (this.currentItem >= 9) + { + this.currentItem -= 9; + } + } + + /** + * Removes matching items from the inventory. + * @param itemIn The item to match, null ignores. + * @param metadataIn The metadata to match, -1 ignores. + * @param removeCount The number of items to remove. If less than 1, removes all matching items. + * @param itemNBT The NBT data to match, null ignores. + * @return The number of items removed from the inventory. + */ + public int clearMatchingItems(@Nullable Item itemIn, int metadataIn, int removeCount, @Nullable NBTTagCompound itemNBT) + { + int i = 0; + + for (int j = 0; j < this.getSizeInventory(); ++j) + { + ItemStack itemstack = this.getStackInSlot(j); + + if (!itemstack.isEmpty() && (itemIn == null || itemstack.getItem() == itemIn) && (metadataIn <= -1 || itemstack.getMetadata() == metadataIn) && (itemNBT == null || NBTUtil.areNBTEquals(itemNBT, itemstack.getTagCompound(), true))) + { + int k = removeCount <= 0 ? itemstack.getCount() : Math.min(removeCount - i, itemstack.getCount()); + i += k; + + if (removeCount != 0) + { + itemstack.shrink(k); + + if (itemstack.isEmpty()) + { + this.setInventorySlotContents(j, ItemStack.EMPTY); + } + + if (removeCount > 0 && i >= removeCount) + { + return i; + } + } + } + } + + if (!this.itemStack.isEmpty()) + { + if (itemIn != null && this.itemStack.getItem() != itemIn) + { + return i; + } + + if (metadataIn > -1 && this.itemStack.getMetadata() != metadataIn) + { + return i; + } + + if (itemNBT != null && !NBTUtil.areNBTEquals(itemNBT, this.itemStack.getTagCompound(), true)) + { + return i; + } + + int l = removeCount <= 0 ? this.itemStack.getCount() : Math.min(removeCount - i, this.itemStack.getCount()); + i += l; + + if (removeCount != 0) + { + this.itemStack.shrink(l); + + if (this.itemStack.isEmpty()) + { + this.itemStack = ItemStack.EMPTY; + } + + if (removeCount > 0 && i >= removeCount) + { + return i; + } + } + } + + return i; + } + + /** + * This function stores as many items of an ItemStack as possible in a matching slot and returns the quantity of + * left over items. + */ + private int storePartialItemStack(ItemStack itemStackIn) + { + int i = this.storeItemStack(itemStackIn); + + if (i == -1) + { + i = this.getFirstEmptyStack(); + } + + return i == -1 ? itemStackIn.getCount() : this.addResource(i, itemStackIn); + } + + private int addResource(int p_191973_1_, ItemStack p_191973_2_) + { + Item item = p_191973_2_.getItem(); + int i = p_191973_2_.getCount(); + ItemStack itemstack = this.getStackInSlot(p_191973_1_); + + if (itemstack.isEmpty()) + { + itemstack = p_191973_2_.copy(); // Forge: Replace Item clone above to preserve item capabilities when picking the item up. + itemstack.setCount(0); + + if (p_191973_2_.hasTagCompound()) + { + itemstack.setTagCompound(p_191973_2_.getTagCompound().copy()); + } + + this.setInventorySlotContents(p_191973_1_, itemstack); + } + + int j = i; + + if (i > itemstack.getMaxStackSize() - itemstack.getCount()) + { + j = itemstack.getMaxStackSize() - itemstack.getCount(); + } + + if (j > this.getInventoryStackLimit() - itemstack.getCount()) + { + j = this.getInventoryStackLimit() - itemstack.getCount(); + } + + if (j == 0) + { + return i; + } + else + { + i = i - j; + itemstack.grow(j); + itemstack.setAnimationsToGo(5); + return i; + } + } + + /** + * stores an itemstack in the users inventory + */ + public int storeItemStack(ItemStack itemStackIn) + { + if (this.canMergeStacks(this.getStackInSlot(this.currentItem), itemStackIn)) + { + return this.currentItem; + } + else if (this.canMergeStacks(this.getStackInSlot(40), itemStackIn)) + { + return 40; + } + else + { + for (int i = 0; i < this.mainInventory.size(); ++i) + { + if (this.canMergeStacks(this.mainInventory.get(i), itemStackIn)) + { + return i; + } + } + + return -1; + } + } + + /** + * Decrement the number of animations remaining. Only called on client side. This is used to handle the animation of + * receiving a block. + */ + public void decrementAnimations() + { + for (NonNullList nonnulllist : this.allInventories) + { + for (int i = 0; i < nonnulllist.size(); ++i) + { + if (!((ItemStack)nonnulllist.get(i)).isEmpty()) + { + ((ItemStack)nonnulllist.get(i)).updateAnimation(this.player.world, this.player, i, this.currentItem == i); + } + } + } + for (ItemStack is : armorInventory) // FORGE: Tick armor on animation ticks + { + if (!is.isEmpty()) + { + is.getItem().onArmorTick(player.world, player, is); + } + } + } + + /** + * Adds the item stack to the inventory, returns false if it is impossible. + */ + public boolean addItemStackToInventory(ItemStack itemStackIn) + { + return this.add(-1, itemStackIn); + } + + public boolean add(int p_191971_1_, final ItemStack p_191971_2_) + { + if (p_191971_2_.isEmpty()) + { + return false; + } + else + { + try + { + if (p_191971_2_.isItemDamaged()) + { + if (p_191971_1_ == -1) + { + p_191971_1_ = this.getFirstEmptyStack(); + } + + if (p_191971_1_ >= 0) + { + this.mainInventory.set(p_191971_1_, p_191971_2_.copy()); + ((ItemStack)this.mainInventory.get(p_191971_1_)).setAnimationsToGo(5); + p_191971_2_.setCount(0); + return true; + } + else if (this.player.capabilities.isCreativeMode) + { + p_191971_2_.setCount(0); + return true; + } + else + { + return false; + } + } + else + { + int i; + + while (true) + { + i = p_191971_2_.getCount(); + + if (p_191971_1_ == -1) + { + p_191971_2_.setCount(this.storePartialItemStack(p_191971_2_)); + } + else + { + p_191971_2_.setCount(this.addResource(p_191971_1_, p_191971_2_)); + } + + if (p_191971_2_.isEmpty() || p_191971_2_.getCount() >= i) + { + break; + } + } + + if (p_191971_2_.getCount() == i && this.player.capabilities.isCreativeMode) + { + p_191971_2_.setCount(0); + return true; + } + else + { + return p_191971_2_.getCount() < i; + } + } + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Adding item to inventory"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Item being added"); + crashreportcategory.addCrashSection("Item ID", Integer.valueOf(Item.getIdFromItem(p_191971_2_.getItem()))); + crashreportcategory.addCrashSection("Item data", Integer.valueOf(p_191971_2_.getMetadata())); + crashreportcategory.addDetail("Registry Name", () -> String.valueOf(p_191971_2_.getItem().getRegistryName())); + crashreportcategory.addDetail("Item Class", () -> p_191971_2_.getItem().getClass().getName()); + crashreportcategory.addDetail("Item name", new ICrashReportDetail() + { + public String call() throws Exception + { + return p_191971_2_.getDisplayName(); + } + }); + throw new ReportedException(crashreport); + } + } + } + + public void placeItemBackInInventory(World p_191975_1_, ItemStack p_191975_2_) + { + if (!p_191975_1_.isRemote) + { + while (!p_191975_2_.isEmpty()) + { + int i = this.storeItemStack(p_191975_2_); + + if (i == -1) + { + i = this.getFirstEmptyStack(); + } + + if (i == -1) + { + this.player.dropItem(p_191975_2_, false); + break; + } + + int j = p_191975_2_.getMaxStackSize() - this.getStackInSlot(i).getCount(); + + if (this.add(i, p_191975_2_.splitStack(j))) + { + ((EntityPlayerMP)this.player).connection.sendPacket(new SPacketSetSlot(-2, i, this.getStackInSlot(i))); + } + } + } + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + List list = null; + + for (NonNullList nonnulllist : this.allInventories) + { + if (index < nonnulllist.size()) + { + list = nonnulllist; + break; + } + + index -= nonnulllist.size(); + } + + return list != null && !((ItemStack)list.get(index)).isEmpty() ? ItemStackHelper.getAndSplit(list, index, count) : ItemStack.EMPTY; + } + + public void deleteStack(ItemStack stack) + { + for (NonNullList nonnulllist : this.allInventories) + { + for (int i = 0; i < nonnulllist.size(); ++i) + { + if (nonnulllist.get(i) == stack) + { + nonnulllist.set(i, ItemStack.EMPTY); + break; + } + } + } + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + NonNullList nonnulllist = null; + + for (NonNullList nonnulllist1 : this.allInventories) + { + if (index < nonnulllist1.size()) + { + nonnulllist = nonnulllist1; + break; + } + + index -= nonnulllist1.size(); + } + + if (nonnulllist != null && !((ItemStack)nonnulllist.get(index)).isEmpty()) + { + ItemStack itemstack = nonnulllist.get(index); + nonnulllist.set(index, ItemStack.EMPTY); + return itemstack; + } + else + { + return ItemStack.EMPTY; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + NonNullList nonnulllist = null; + + for (NonNullList nonnulllist1 : this.allInventories) + { + if (index < nonnulllist1.size()) + { + nonnulllist = nonnulllist1; + break; + } + + index -= nonnulllist1.size(); + } + + if (nonnulllist != null) + { + nonnulllist.set(index, stack); + } + } + + public float getDestroySpeed(IBlockState state) + { + float f = 1.0F; + + if (!((ItemStack)this.mainInventory.get(this.currentItem)).isEmpty()) + { + f *= ((ItemStack)this.mainInventory.get(this.currentItem)).getDestroySpeed(state); + } + + return f; + } + + /** + * Writes the inventory out as a list of compound tags. This is where the slot indices are used (+100 for armor, +80 + * for crafting). + */ + public NBTTagList writeToNBT(NBTTagList nbtTagListIn) + { + for (int i = 0; i < this.mainInventory.size(); ++i) + { + if (!((ItemStack)this.mainInventory.get(i)).isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte)i); + ((ItemStack)this.mainInventory.get(i)).writeToNBT(nbttagcompound); + nbtTagListIn.appendTag(nbttagcompound); + } + } + + for (int j = 0; j < this.armorInventory.size(); ++j) + { + if (!((ItemStack)this.armorInventory.get(j)).isEmpty()) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setByte("Slot", (byte)(j + 100)); + ((ItemStack)this.armorInventory.get(j)).writeToNBT(nbttagcompound1); + nbtTagListIn.appendTag(nbttagcompound1); + } + } + + for (int k = 0; k < this.offHandInventory.size(); ++k) + { + if (!((ItemStack)this.offHandInventory.get(k)).isEmpty()) + { + NBTTagCompound nbttagcompound2 = new NBTTagCompound(); + nbttagcompound2.setByte("Slot", (byte)(k + 150)); + ((ItemStack)this.offHandInventory.get(k)).writeToNBT(nbttagcompound2); + nbtTagListIn.appendTag(nbttagcompound2); + } + } + + return nbtTagListIn; + } + + /** + * Reads from the given tag list and fills the slots in the inventory with the correct items. + */ + public void readFromNBT(NBTTagList nbtTagListIn) + { + this.mainInventory.clear(); + this.armorInventory.clear(); + this.offHandInventory.clear(); + + for (int i = 0; i < nbtTagListIn.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbtTagListIn.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + ItemStack itemstack = new ItemStack(nbttagcompound); + + if (!itemstack.isEmpty()) + { + if (j >= 0 && j < this.mainInventory.size()) + { + this.mainInventory.set(j, itemstack); + } + else if (j >= 100 && j < this.armorInventory.size() + 100) + { + this.armorInventory.set(j - 100, itemstack); + } + else if (j >= 150 && j < this.offHandInventory.size() + 150) + { + this.offHandInventory.set(j - 150, itemstack); + } + } + } + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.mainInventory.size() + this.armorInventory.size() + this.offHandInventory.size(); + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.mainInventory) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + for (ItemStack itemstack1 : this.armorInventory) + { + if (!itemstack1.isEmpty()) + { + return false; + } + } + + for (ItemStack itemstack2 : this.offHandInventory) + { + if (!itemstack2.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + List list = null; + + for (NonNullList nonnulllist : this.allInventories) + { + if (index < nonnulllist.size()) + { + list = nonnulllist; + break; + } + + index -= nonnulllist.size(); + } + + return list == null ? ItemStack.EMPTY : (ItemStack)list.get(index); + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "container.inventory"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + public boolean canHarvestBlock(IBlockState state) + { + if (state.getMaterial().isToolNotRequired()) + { + return true; + } + else + { + ItemStack itemstack = this.getStackInSlot(this.currentItem); + return !itemstack.isEmpty() ? itemstack.canHarvestBlock(state) : false; + } + } + + /** + * returns a player armor item (as itemstack) contained in specified armor slot. + */ + @SideOnly(Side.CLIENT) + public ItemStack armorItemInSlot(int slotIn) + { + return this.armorInventory.get(slotIn); + } + + /** + * Damages armor in each slot by the specified amount. + */ + public void damageArmor(float damage) + { + damage = damage / 4.0F; + + if (damage < 1.0F) + { + damage = 1.0F; + } + + for (int i = 0; i < this.armorInventory.size(); ++i) + { + ItemStack itemstack = this.armorInventory.get(i); + + if (itemstack.getItem() instanceof ItemArmor) + { + itemstack.damageItem((int)damage, this.player); + } + } + } + + /** + * Drop all armor and main inventory items. + */ + public void dropAllItems() + { + for (List list : this.allInventories) + { + for (int i = 0; i < list.size(); ++i) + { + ItemStack itemstack = list.get(i); + + if (!itemstack.isEmpty()) + { + this.player.dropItem(itemstack, true, false); + list.set(i, ItemStack.EMPTY); + } + } + } + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + ++this.timesChanged; + } + + @SideOnly(Side.CLIENT) + public int getTimesChanged() + { + return this.timesChanged; + } + + /** + * Set the stack helds by mouse, used in GUI/Container + */ + public void setItemStack(ItemStack itemStackIn) + { + this.itemStack = itemStackIn; + } + + /** + * Stack helds by mouse, used in GUI and Containers + */ + public ItemStack getItemStack() + { + return this.itemStack; + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + if (this.player.isDead) + { + return false; + } + else + { + return player.getDistanceSq(this.player) <= 64.0D; + } + } + + /** + * Returns true if the specified ItemStack exists in the inventory. + */ + public boolean hasItemStack(ItemStack itemStackIn) + { + label23: + + for (List list : this.allInventories) + { + Iterator iterator = list.iterator(); + + while (true) + { + if (!iterator.hasNext()) + { + continue label23; + } + + ItemStack itemstack = (ItemStack)iterator.next(); + + if (!itemstack.isEmpty() && itemstack.isItemEqual(itemStackIn)) + { + break; + } + } + + return true; + } + + return false; + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + /** + * Copy the ItemStack contents from another InventoryPlayer instance + */ + public void copyInventory(InventoryPlayer playerInventory) + { + for (int i = 0; i < this.getSizeInventory(); ++i) + { + this.setInventorySlotContents(i, playerInventory.getStackInSlot(i)); + } + + this.currentItem = playerInventory.currentItem; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public void clear() + { + for (List list : this.allInventories) + { + list.clear(); + } + } + + public void fillStackedContents(RecipeItemHelper helper, boolean p_194016_2_) + { + for (ItemStack itemstack : this.mainInventory) + { + helper.accountStack(itemstack); + } + + if (p_194016_2_) + { + helper.accountStack(this.offHandInventory.get(0)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/player/PlayerCapabilities.java b/build/tmp/recompileMc/sources/net/minecraft/entity/player/PlayerCapabilities.java new file mode 100644 index 0000000..2caa8f5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/player/PlayerCapabilities.java @@ -0,0 +1,79 @@ +package net.minecraft.entity.player; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PlayerCapabilities +{ + /** Disables player damage. */ + public boolean disableDamage; + /** Sets/indicates whether the player is flying. */ + public boolean isFlying; + /** whether or not to allow the player to fly when they double jump. */ + public boolean allowFlying; + /** Used to determine if creative mode is enabled, and therefore if items should be depleted on usage */ + public boolean isCreativeMode; + /** Indicates whether the player is allowed to modify the surroundings */ + public boolean allowEdit = true; + private float flySpeed = 0.05F; + private float walkSpeed = 0.1F; + + public void writeCapabilitiesToNBT(NBTTagCompound tagCompound) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setBoolean("invulnerable", this.disableDamage); + nbttagcompound.setBoolean("flying", this.isFlying); + nbttagcompound.setBoolean("mayfly", this.allowFlying); + nbttagcompound.setBoolean("instabuild", this.isCreativeMode); + nbttagcompound.setBoolean("mayBuild", this.allowEdit); + nbttagcompound.setFloat("flySpeed", this.flySpeed); + nbttagcompound.setFloat("walkSpeed", this.walkSpeed); + tagCompound.setTag("abilities", nbttagcompound); + } + + public void readCapabilitiesFromNBT(NBTTagCompound tagCompound) + { + if (tagCompound.hasKey("abilities", 10)) + { + NBTTagCompound nbttagcompound = tagCompound.getCompoundTag("abilities"); + this.disableDamage = nbttagcompound.getBoolean("invulnerable"); + this.isFlying = nbttagcompound.getBoolean("flying"); + this.allowFlying = nbttagcompound.getBoolean("mayfly"); + this.isCreativeMode = nbttagcompound.getBoolean("instabuild"); + + if (nbttagcompound.hasKey("flySpeed", 99)) + { + this.flySpeed = nbttagcompound.getFloat("flySpeed"); + this.walkSpeed = nbttagcompound.getFloat("walkSpeed"); + } + + if (nbttagcompound.hasKey("mayBuild", 1)) + { + this.allowEdit = nbttagcompound.getBoolean("mayBuild"); + } + } + } + + public float getFlySpeed() + { + return this.flySpeed; + } + + @SideOnly(Side.CLIENT) + public void setFlySpeed(float speed) + { + this.flySpeed = speed; + } + + public float getWalkSpeed() + { + return this.walkSpeed; + } + + @SideOnly(Side.CLIENT) + public void setPlayerWalkSpeed(float speed) + { + this.walkSpeed = speed; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/player/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/player/package-info.java new file mode 100644 index 0000000..6c7090d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/player/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.player; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityArrow.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityArrow.java new file mode 100644 index 0000000..0bc68fe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityArrow.java @@ -0,0 +1,728 @@ +package net.minecraft.entity.projectile; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Enchantments; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityArrow extends Entity implements IProjectile +{ + private static final Predicate ARROW_TARGETS = Predicates.and(EntitySelectors.NOT_SPECTATING, EntitySelectors.IS_ALIVE, new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_.canBeCollidedWith(); + } + }); + private static final DataParameter CRITICAL = EntityDataManager.createKey(EntityArrow.class, DataSerializers.BYTE); + private int xTile; + private int yTile; + private int zTile; + private Block inTile; + private int inData; + protected boolean inGround; + protected int timeInGround; + /** 1 if the player can pick up the arrow */ + public EntityArrow.PickupStatus pickupStatus; + /** Seems to be some sort of timer for animating an arrow. */ + public int arrowShake; + /** The owner of this arrow. */ + public Entity shootingEntity; + private int ticksInGround; + private int ticksInAir; + private double damage; + /** The amount of knockback an arrow applies when it hits a mob. */ + private int knockbackStrength; + + public EntityArrow(World worldIn) + { + super(worldIn); + this.xTile = -1; + this.yTile = -1; + this.zTile = -1; + this.pickupStatus = EntityArrow.PickupStatus.DISALLOWED; + this.damage = 2.0D; + this.setSize(0.5F, 0.5F); + } + + public EntityArrow(World worldIn, double x, double y, double z) + { + this(worldIn); + this.setPosition(x, y, z); + } + + public EntityArrow(World worldIn, EntityLivingBase shooter) + { + this(worldIn, shooter.posX, shooter.posY + (double)shooter.getEyeHeight() - 0.10000000149011612D, shooter.posZ); + this.shootingEntity = shooter; + + if (shooter instanceof EntityPlayer) + { + this.pickupStatus = EntityArrow.PickupStatus.ALLOWED; + } + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength() * 10.0D; + + if (Double.isNaN(d0)) + { + d0 = 1.0D; + } + + d0 = d0 * 64.0D * getRenderDistanceWeight(); + return distance < d0 * d0; + } + + protected void entityInit() + { + this.dataManager.register(CRITICAL, Byte.valueOf((byte)0)); + } + + public void shoot(Entity shooter, float pitch, float yaw, float p_184547_4_, float velocity, float inaccuracy) + { + float f = -MathHelper.sin(yaw * 0.017453292F) * MathHelper.cos(pitch * 0.017453292F); + float f1 = -MathHelper.sin(pitch * 0.017453292F); + float f2 = MathHelper.cos(yaw * 0.017453292F) * MathHelper.cos(pitch * 0.017453292F); + this.shoot((double)f, (double)f1, (double)f2, velocity, inaccuracy); + this.motionX += shooter.motionX; + this.motionZ += shooter.motionZ; + + if (!shooter.onGround) + { + this.motionY += shooter.motionY; + } + } + + /** + * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction. + */ + public void shoot(double x, double y, double z, float velocity, float inaccuracy) + { + float f = MathHelper.sqrt(x * x + y * y + z * z); + x = x / (double)f; + y = y / (double)f; + z = z / (double)f; + x = x + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + y = y + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + z = z + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + x = x * (double)velocity; + y = y * (double)velocity; + z = z * (double)velocity; + this.motionX = x; + this.motionY = y; + this.motionZ = z; + float f1 = MathHelper.sqrt(x * x + z * z); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f1) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + this.ticksInGround = 0; + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + this.setPosition(x, y, z); + this.setRotation(yaw, pitch); + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f) * (180D / Math.PI)); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.ticksInGround = 0; + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + BlockPos blockpos = new BlockPos(this.xTile, this.yTile, this.zTile); + IBlockState iblockstate = this.world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + + if (iblockstate.getMaterial() != Material.AIR) + { + AxisAlignedBB axisalignedbb = iblockstate.getCollisionBoundingBox(this.world, blockpos); + + if (axisalignedbb != Block.NULL_AABB && axisalignedbb.offset(blockpos).contains(new Vec3d(this.posX, this.posY, this.posZ))) + { + this.inGround = true; + } + } + + if (this.arrowShake > 0) + { + --this.arrowShake; + } + + if (this.inGround) + { + int j = block.getMetaFromState(iblockstate); + + if ((block != this.inTile || j != this.inData) && !this.world.collidesWithAnyBlock(this.getEntityBoundingBox().grow(0.05D))) + { + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + else + { + ++this.ticksInGround; + + if (this.ticksInGround >= 1200) + { + this.setDead(); + } + } + + ++this.timeInGround; + } + else + { + this.timeInGround = 0; + ++this.ticksInAir; + Vec3d vec3d1 = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3d = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult raytraceresult = this.world.rayTraceBlocks(vec3d1, vec3d, false, true, false); + vec3d1 = new Vec3d(this.posX, this.posY, this.posZ); + vec3d = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (raytraceresult != null) + { + vec3d = new Vec3d(raytraceresult.hitVec.x, raytraceresult.hitVec.y, raytraceresult.hitVec.z); + } + + Entity entity = this.findEntityOnPath(vec3d1, vec3d); + + if (entity != null) + { + raytraceresult = new RayTraceResult(entity); + } + + if (raytraceresult != null && raytraceresult.entityHit instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)raytraceresult.entityHit; + + if (this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).canAttackPlayer(entityplayer)) + { + raytraceresult = null; + } + } + + if (raytraceresult != null && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) + { + this.onHit(raytraceresult); + } + + if (this.getIsCritical()) + { + for (int k = 0; k < 4; ++k) + { + this.world.spawnParticle(EnumParticleTypes.CRIT, this.posX + this.motionX * (double)k / 4.0D, this.posY + this.motionY * (double)k / 4.0D, this.posZ + this.motionZ * (double)k / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ); + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f4 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + + for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f4) * (180D / Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f1 = 0.99F; + float f2 = 0.05F; + + if (this.isInWater()) + { + for (int i = 0; i < 4; ++i) + { + float f3 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * 0.25D, this.posY - this.motionY * 0.25D, this.posZ - this.motionZ * 0.25D, this.motionX, this.motionY, this.motionZ); + } + + f1 = 0.6F; + } + + if (this.isWet()) + { + this.extinguish(); + } + + this.motionX *= (double)f1; + this.motionY *= (double)f1; + this.motionZ *= (double)f1; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.05000000074505806D; + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + } + + /** + * Called when the arrow hits a block or an entity + */ + protected void onHit(RayTraceResult raytraceResultIn) + { + Entity entity = raytraceResultIn.entityHit; + + if (entity != null) + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int i = MathHelper.ceil((double)f * this.damage); + + if (this.getIsCritical()) + { + i += this.rand.nextInt(i / 2 + 2); + } + + DamageSource damagesource; + + if (this.shootingEntity == null) + { + damagesource = DamageSource.causeArrowDamage(this, this); + } + else + { + damagesource = DamageSource.causeArrowDamage(this, this.shootingEntity); + } + + if (this.isBurning() && !(entity instanceof EntityEnderman)) + { + entity.setFire(5); + } + + if (entity.attackEntityFrom(damagesource, (float)i)) + { + if (entity instanceof EntityLivingBase) + { + EntityLivingBase entitylivingbase = (EntityLivingBase)entity; + + if (!this.world.isRemote) + { + entitylivingbase.setArrowCountInEntity(entitylivingbase.getArrowCountInEntity() + 1); + } + + if (this.knockbackStrength > 0) + { + float f1 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + + if (f1 > 0.0F) + { + entitylivingbase.addVelocity(this.motionX * (double)this.knockbackStrength * 0.6000000238418579D / (double)f1, 0.1D, this.motionZ * (double)this.knockbackStrength * 0.6000000238418579D / (double)f1); + } + } + + if (this.shootingEntity instanceof EntityLivingBase) + { + EnchantmentHelper.applyThornEnchantments(entitylivingbase, this.shootingEntity); + EnchantmentHelper.applyArthropodEnchantments((EntityLivingBase)this.shootingEntity, entitylivingbase); + } + + this.arrowHit(entitylivingbase); + + if (this.shootingEntity != null && entitylivingbase != this.shootingEntity && entitylivingbase instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) + { + ((EntityPlayerMP)this.shootingEntity).connection.sendPacket(new SPacketChangeGameState(6, 0.0F)); + } + } + + this.playSound(SoundEvents.ENTITY_ARROW_HIT, 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + + if (!(entity instanceof EntityEnderman)) + { + this.setDead(); + } + } + else + { + this.motionX *= -0.10000000149011612D; + this.motionY *= -0.10000000149011612D; + this.motionZ *= -0.10000000149011612D; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + + if (!this.world.isRemote && this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ < 0.0010000000474974513D) + { + if (this.pickupStatus == EntityArrow.PickupStatus.ALLOWED) + { + this.entityDropItem(this.getArrowStack(), 0.1F); + } + + this.setDead(); + } + } + } + else + { + BlockPos blockpos = raytraceResultIn.getBlockPos(); + this.xTile = blockpos.getX(); + this.yTile = blockpos.getY(); + this.zTile = blockpos.getZ(); + IBlockState iblockstate = this.world.getBlockState(blockpos); + this.inTile = iblockstate.getBlock(); + this.inData = this.inTile.getMetaFromState(iblockstate); + this.motionX = (double)((float)(raytraceResultIn.hitVec.x - this.posX)); + this.motionY = (double)((float)(raytraceResultIn.hitVec.y - this.posY)); + this.motionZ = (double)((float)(raytraceResultIn.hitVec.z - this.posZ)); + float f2 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)f2 * 0.05000000074505806D; + this.posY -= this.motionY / (double)f2 * 0.05000000074505806D; + this.posZ -= this.motionZ / (double)f2 * 0.05000000074505806D; + this.playSound(SoundEvents.ENTITY_ARROW_HIT, 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + this.setIsCritical(false); + + if (iblockstate.getMaterial() != Material.AIR) + { + this.inTile.onEntityCollidedWithBlock(this.world, blockpos, iblockstate, this); + } + } + } + + /** + * Tries to move the entity towards the specified location. + */ + public void move(MoverType type, double x, double y, double z) + { + super.move(type, x, y, z); + + if (this.inGround) + { + this.xTile = MathHelper.floor(this.posX); + this.yTile = MathHelper.floor(this.posY); + this.zTile = MathHelper.floor(this.posZ); + } + } + + protected void arrowHit(EntityLivingBase living) + { + } + + @Nullable + protected Entity findEntityOnPath(Vec3d start, Vec3d end) + { + Entity entity = null; + List list = this.world.getEntitiesInAABBexcluding(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D), ARROW_TARGETS); + double d0 = 0.0D; + + for (int i = 0; i < list.size(); ++i) + { + Entity entity1 = list.get(i); + + if (entity1 != this.shootingEntity || this.ticksInAir >= 5) + { + AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D); + RayTraceResult raytraceresult = axisalignedbb.calculateIntercept(start, end); + + if (raytraceresult != null) + { + double d1 = start.squareDistanceTo(raytraceresult.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + return entity; + } + + public static void registerFixesArrow(DataFixer fixer, String name) + { + } + + public static void registerFixesArrow(DataFixer fixer) + { + registerFixesArrow(fixer, "Arrow"); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setInteger("xTile", this.xTile); + compound.setInteger("yTile", this.yTile); + compound.setInteger("zTile", this.zTile); + compound.setShort("life", (short)this.ticksInGround); + ResourceLocation resourcelocation = Block.REGISTRY.getNameForObject(this.inTile); + compound.setString("inTile", resourcelocation == null ? "" : resourcelocation.toString()); + compound.setByte("inData", (byte)this.inData); + compound.setByte("shake", (byte)this.arrowShake); + compound.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + compound.setByte("pickup", (byte)this.pickupStatus.ordinal()); + compound.setDouble("damage", this.damage); + compound.setBoolean("crit", this.getIsCritical()); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.xTile = compound.getInteger("xTile"); + this.yTile = compound.getInteger("yTile"); + this.zTile = compound.getInteger("zTile"); + this.ticksInGround = compound.getShort("life"); + + if (compound.hasKey("inTile", 8)) + { + this.inTile = Block.getBlockFromName(compound.getString("inTile")); + } + else + { + this.inTile = Block.getBlockById(compound.getByte("inTile") & 255); + } + + this.inData = compound.getByte("inData") & 255; + this.arrowShake = compound.getByte("shake") & 255; + this.inGround = compound.getByte("inGround") == 1; + + if (compound.hasKey("damage", 99)) + { + this.damage = compound.getDouble("damage"); + } + + if (compound.hasKey("pickup", 99)) + { + this.pickupStatus = EntityArrow.PickupStatus.getByOrdinal(compound.getByte("pickup")); + } + else if (compound.hasKey("player", 99)) + { + this.pickupStatus = compound.getBoolean("player") ? EntityArrow.PickupStatus.ALLOWED : EntityArrow.PickupStatus.DISALLOWED; + } + + this.setIsCritical(compound.getBoolean("crit")); + } + + /** + * Called by a player entity when they collide with an entity + */ + public void onCollideWithPlayer(EntityPlayer entityIn) + { + if (!this.world.isRemote && this.inGround && this.arrowShake <= 0) + { + boolean flag = this.pickupStatus == EntityArrow.PickupStatus.ALLOWED || this.pickupStatus == EntityArrow.PickupStatus.CREATIVE_ONLY && entityIn.capabilities.isCreativeMode; + + if (this.pickupStatus == EntityArrow.PickupStatus.ALLOWED && !entityIn.inventory.addItemStackToInventory(this.getArrowStack())) + { + flag = false; + } + + if (flag) + { + entityIn.onItemPickup(this, 1); + this.setDead(); + } + } + } + + protected abstract ItemStack getArrowStack(); + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + public void setDamage(double damageIn) + { + this.damage = damageIn; + } + + public double getDamage() + { + return this.damage; + } + + /** + * Sets the amount of knockback the arrow applies when it hits a mob. + */ + public void setKnockbackStrength(int knockbackStrengthIn) + { + this.knockbackStrength = knockbackStrengthIn; + } + + /** + * Returns true if it's possible to attack this entity with an item. + */ + public boolean canBeAttackedWithItem() + { + return false; + } + + public float getEyeHeight() + { + return 0.0F; + } + + /** + * Whether the arrow has a stream of critical hit particles flying behind it. + */ + public void setIsCritical(boolean critical) + { + byte b0 = ((Byte)this.dataManager.get(CRITICAL)).byteValue(); + + if (critical) + { + this.dataManager.set(CRITICAL, Byte.valueOf((byte)(b0 | 1))); + } + else + { + this.dataManager.set(CRITICAL, Byte.valueOf((byte)(b0 & -2))); + } + } + + /** + * Whether the arrow has a stream of critical hit particles flying behind it. + */ + public boolean getIsCritical() + { + byte b0 = ((Byte)this.dataManager.get(CRITICAL)).byteValue(); + return (b0 & 1) != 0; + } + + public void setEnchantmentEffectsFromEntity(EntityLivingBase p_190547_1_, float p_190547_2_) + { + int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.POWER, p_190547_1_); + int j = EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.PUNCH, p_190547_1_); + this.setDamage((double)(p_190547_2_ * 2.0F) + this.rand.nextGaussian() * 0.25D + (double)((float)this.world.getDifficulty().getDifficultyId() * 0.11F)); + + if (i > 0) + { + this.setDamage(this.getDamage() + (double)i * 0.5D + 0.5D); + } + + if (j > 0) + { + this.setKnockbackStrength(j); + } + + if (EnchantmentHelper.getMaxEnchantmentLevel(Enchantments.FLAME, p_190547_1_) > 0) + { + this.setFire(100); + } + } + + public static enum PickupStatus + { + DISALLOWED, + ALLOWED, + CREATIVE_ONLY; + + public static EntityArrow.PickupStatus getByOrdinal(int ordinal) + { + if (ordinal < 0 || ordinal > values().length) + { + ordinal = 0; + } + + return values()[ordinal]; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityDragonFireball.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityDragonFireball.java new file mode 100644 index 0000000..ec2309e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityDragonFireball.java @@ -0,0 +1,107 @@ +package net.minecraft.entity.projectile; + +import java.util.List; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.MobEffects; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityDragonFireball extends EntityFireball +{ + public EntityDragonFireball(World worldIn) + { + super(worldIn); + this.setSize(1.0F, 1.0F); + } + + @SideOnly(Side.CLIENT) + public EntityDragonFireball(World worldIn, double x, double y, double z, double accelX, double accelY, double accelZ) + { + super(worldIn, x, y, z, accelX, accelY, accelZ); + this.setSize(1.0F, 1.0F); + } + + public EntityDragonFireball(World worldIn, EntityLivingBase shooter, double accelX, double accelY, double accelZ) + { + super(worldIn, shooter, accelX, accelY, accelZ); + this.setSize(1.0F, 1.0F); + } + + public static void registerFixesDragonFireball(DataFixer fixer) + { + EntityFireball.registerFixesFireball(fixer, "DragonFireball"); + } + + /** + * Called when this EntityFireball hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (result.entityHit == null || !result.entityHit.isEntityEqual(this.shootingEntity)) + { + if (!this.world.isRemote) + { + List list = this.world.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox().grow(4.0D, 2.0D, 4.0D)); + EntityAreaEffectCloud entityareaeffectcloud = new EntityAreaEffectCloud(this.world, this.posX, this.posY, this.posZ); + entityareaeffectcloud.setOwner(this.shootingEntity); + entityareaeffectcloud.setParticle(EnumParticleTypes.DRAGON_BREATH); + entityareaeffectcloud.setRadius(3.0F); + entityareaeffectcloud.setDuration(600); + entityareaeffectcloud.setRadiusPerTick((7.0F - entityareaeffectcloud.getRadius()) / (float)entityareaeffectcloud.getDuration()); + entityareaeffectcloud.addEffect(new PotionEffect(MobEffects.INSTANT_DAMAGE, 1, 1)); + + if (!list.isEmpty()) + { + for (EntityLivingBase entitylivingbase : list) + { + double d0 = this.getDistanceSq(entitylivingbase); + + if (d0 < 16.0D) + { + entityareaeffectcloud.setPosition(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ); + break; + } + } + } + + this.world.playEvent(2006, new BlockPos(this.posX, this.posY, this.posZ), 0); + this.world.spawnEntity(entityareaeffectcloud); + this.setDead(); + } + } + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return false; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + return false; + } + + protected EnumParticleTypes getParticleType() + { + return EnumParticleTypes.DRAGON_BREATH; + } + + protected boolean isFireballFiery() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityEgg.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityEgg.java new file mode 100644 index 0000000..9286e6b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityEgg.java @@ -0,0 +1,88 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityEgg extends EntityThrowable +{ + public EntityEgg(World worldIn) + { + super(worldIn); + } + + public EntityEgg(World worldIn, EntityLivingBase throwerIn) + { + super(worldIn, throwerIn); + } + + public EntityEgg(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesEgg(DataFixer fixer) + { + EntityThrowable.registerFixesThrowable(fixer, "ThrownEgg"); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 3) + { + double d0 = 0.08D; + + for (int i = 0; i < 8; ++i) + { + this.world.spawnParticle(EnumParticleTypes.ITEM_CRACK, this.posX, this.posY, this.posZ, ((double)this.rand.nextFloat() - 0.5D) * 0.08D, ((double)this.rand.nextFloat() - 0.5D) * 0.08D, ((double)this.rand.nextFloat() - 0.5D) * 0.08D, Item.getIdFromItem(Items.EGG)); + } + } + } + + /** + * Called when this EntityThrowable hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (result.entityHit != null) + { + result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0.0F); + } + + if (!this.world.isRemote) + { + if (this.rand.nextInt(8) == 0) + { + int i = 1; + + if (this.rand.nextInt(32) == 0) + { + i = 4; + } + + for (int j = 0; j < i; ++j) + { + EntityChicken entitychicken = new EntityChicken(this.world); + entitychicken.setGrowingAge(-24000); + entitychicken.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + this.world.spawnEntity(entitychicken); + } + } + + this.world.setEntityState(this, (byte)3); + this.setDead(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityEvokerFangs.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityEvokerFangs.java new file mode 100644 index 0000000..bb40d6b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityEvokerFangs.java @@ -0,0 +1,194 @@ +package net.minecraft.entity.projectile; + +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityEvokerFangs extends Entity +{ + private int warmupDelayTicks; + private boolean sentSpikeEvent; + private int lifeTicks; + private boolean clientSideAttackStarted; + private EntityLivingBase caster; + private UUID casterUuid; + + public EntityEvokerFangs(World worldIn) + { + super(worldIn); + this.lifeTicks = 22; + this.setSize(0.5F, 0.8F); + } + + public EntityEvokerFangs(World worldIn, double x, double y, double z, float p_i47276_8_, int p_i47276_9_, EntityLivingBase casterIn) + { + this(worldIn); + this.warmupDelayTicks = p_i47276_9_; + this.setCaster(casterIn); + this.rotationYaw = p_i47276_8_ * (180F / (float)Math.PI); + this.setPosition(x, y, z); + } + + protected void entityInit() + { + } + + public void setCaster(@Nullable EntityLivingBase p_190549_1_) + { + this.caster = p_190549_1_; + this.casterUuid = p_190549_1_ == null ? null : p_190549_1_.getUniqueID(); + } + + @Nullable + public EntityLivingBase getCaster() + { + if (this.caster == null && this.casterUuid != null && this.world instanceof WorldServer) + { + Entity entity = ((WorldServer)this.world).getEntityFromUuid(this.casterUuid); + + if (entity instanceof EntityLivingBase) + { + this.caster = (EntityLivingBase)entity; + } + } + + return this.caster; + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + this.warmupDelayTicks = compound.getInteger("Warmup"); + this.casterUuid = compound.getUniqueId("OwnerUUID"); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + compound.setInteger("Warmup", this.warmupDelayTicks); + + if (this.casterUuid != null) + { + compound.setUniqueId("OwnerUUID", this.casterUuid); + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote) + { + if (this.clientSideAttackStarted) + { + --this.lifeTicks; + + if (this.lifeTicks == 14) + { + for (int i = 0; i < 12; ++i) + { + double d0 = this.posX + (this.rand.nextDouble() * 2.0D - 1.0D) * (double)this.width * 0.5D; + double d1 = this.posY + 0.05D + this.rand.nextDouble() * 1.0D; + double d2 = this.posZ + (this.rand.nextDouble() * 2.0D - 1.0D) * (double)this.width * 0.5D; + double d3 = (this.rand.nextDouble() * 2.0D - 1.0D) * 0.3D; + double d4 = 0.3D + this.rand.nextDouble() * 0.3D; + double d5 = (this.rand.nextDouble() * 2.0D - 1.0D) * 0.3D; + this.world.spawnParticle(EnumParticleTypes.CRIT, d0, d1 + 1.0D, d2, d3, d4, d5); + } + } + } + } + else if (--this.warmupDelayTicks < 0) + { + if (this.warmupDelayTicks == -8) + { + for (EntityLivingBase entitylivingbase : this.world.getEntitiesWithinAABB(EntityLivingBase.class, this.getEntityBoundingBox().grow(0.2D, 0.0D, 0.2D))) + { + this.damage(entitylivingbase); + } + } + + if (!this.sentSpikeEvent) + { + this.world.setEntityState(this, (byte)4); + this.sentSpikeEvent = true; + } + + if (--this.lifeTicks < 0) + { + this.setDead(); + } + } + } + + private void damage(EntityLivingBase p_190551_1_) + { + EntityLivingBase entitylivingbase = this.getCaster(); + + if (p_190551_1_.isEntityAlive() && !p_190551_1_.getIsInvulnerable() && p_190551_1_ != entitylivingbase) + { + if (entitylivingbase == null) + { + p_190551_1_.attackEntityFrom(DamageSource.MAGIC, 6.0F); + } + else + { + if (entitylivingbase.isOnSameTeam(p_190551_1_)) + { + return; + } + + p_190551_1_.attackEntityFrom(DamageSource.causeIndirectMagicDamage(this, entitylivingbase), 6.0F); + } + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + super.handleStatusUpdate(id); + + if (id == 4) + { + this.clientSideAttackStarted = true; + + if (!this.isSilent()) + { + this.world.playSound(this.posX, this.posY, this.posZ, SoundEvents.EVOCATION_FANGS_ATTACK, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.2F + 0.85F, false); + } + } + } + + @SideOnly(Side.CLIENT) + public float getAnimationProgress(float partialTicks) + { + if (!this.clientSideAttackStarted) + { + return 0.0F; + } + else + { + int i = this.lifeTicks - 2; + return i <= 0 ? 1.0F : 1.0F - ((float)i - partialTicks) / 20.0F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityFireball.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityFireball.java new file mode 100644 index 0000000..15ad340 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityFireball.java @@ -0,0 +1,275 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityFireball extends Entity +{ + public EntityLivingBase shootingEntity; + private int ticksAlive; + private int ticksInAir; + public double accelerationX; + public double accelerationY; + public double accelerationZ; + + public EntityFireball(World worldIn) + { + super(worldIn); + this.setSize(1.0F, 1.0F); + } + + protected void entityInit() + { + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; + + if (Double.isNaN(d0)) + { + d0 = 4.0D; + } + + d0 = d0 * 64.0D; + return distance < d0 * d0; + } + + public EntityFireball(World worldIn, double x, double y, double z, double accelX, double accelY, double accelZ) + { + super(worldIn); + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch); + this.setPosition(x, y, z); + double d0 = (double)MathHelper.sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ); + this.accelerationX = accelX / d0 * 0.1D; + this.accelerationY = accelY / d0 * 0.1D; + this.accelerationZ = accelZ / d0 * 0.1D; + } + + public EntityFireball(World worldIn, EntityLivingBase shooter, double accelX, double accelY, double accelZ) + { + super(worldIn); + this.shootingEntity = shooter; + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(shooter.posX, shooter.posY, shooter.posZ, shooter.rotationYaw, shooter.rotationPitch); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + accelX = accelX + this.rand.nextGaussian() * 0.4D; + accelY = accelY + this.rand.nextGaussian() * 0.4D; + accelZ = accelZ + this.rand.nextGaussian() * 0.4D; + double d0 = (double)MathHelper.sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ); + this.accelerationX = accelX / d0 * 0.1D; + this.accelerationY = accelY / d0 * 0.1D; + this.accelerationZ = accelZ / d0 * 0.1D; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (this.world.isRemote || (this.shootingEntity == null || !this.shootingEntity.isDead) && this.world.isBlockLoaded(new BlockPos(this))) + { + super.onUpdate(); + + if (this.isFireballFiery()) + { + this.setFire(1); + } + + ++this.ticksInAir; + RayTraceResult raytraceresult = ProjectileHelper.forwardsRaycast(this, true, this.ticksInAir >= 25, this.shootingEntity); + + if (raytraceresult != null && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) + { + this.onImpact(raytraceresult); + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + ProjectileHelper.rotateTowardsMovement(this, 0.2F); + float f = this.getMotionFactor(); + + if (this.isInWater()) + { + for (int i = 0; i < 4; ++i) + { + float f1 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * 0.25D, this.posY - this.motionY * 0.25D, this.posZ - this.motionZ * 0.25D, this.motionX, this.motionY, this.motionZ); + } + + f = 0.8F; + } + + this.motionX += this.accelerationX; + this.motionY += this.accelerationY; + this.motionZ += this.accelerationZ; + this.motionX *= (double)f; + this.motionY *= (double)f; + this.motionZ *= (double)f; + this.world.spawnParticle(this.getParticleType(), this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + this.setPosition(this.posX, this.posY, this.posZ); + } + else + { + this.setDead(); + } + } + + protected boolean isFireballFiery() + { + return true; + } + + protected EnumParticleTypes getParticleType() + { + return EnumParticleTypes.SMOKE_NORMAL; + } + + /** + * Return the motion factor for this projectile. The factor is multiplied by the original motion. + */ + protected float getMotionFactor() + { + return 0.95F; + } + + /** + * Called when this EntityFireball hits a block or entity. + */ + protected abstract void onImpact(RayTraceResult result); + + public static void registerFixesFireball(DataFixer fixer, String name) + { + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setTag("direction", this.newDoubleNBTList(new double[] {this.motionX, this.motionY, this.motionZ})); + compound.setTag("power", this.newDoubleNBTList(new double[] {this.accelerationX, this.accelerationY, this.accelerationZ})); + compound.setInteger("life", this.ticksAlive); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + if (compound.hasKey("power", 9)) + { + NBTTagList nbttaglist = compound.getTagList("power", 6); + + if (nbttaglist.tagCount() == 3) + { + this.accelerationX = nbttaglist.getDoubleAt(0); + this.accelerationY = nbttaglist.getDoubleAt(1); + this.accelerationZ = nbttaglist.getDoubleAt(2); + } + } + + this.ticksAlive = compound.getInteger("life"); + + if (compound.hasKey("direction", 9) && compound.getTagList("direction", 6).tagCount() == 3) + { + NBTTagList nbttaglist1 = compound.getTagList("direction", 6); + this.motionX = nbttaglist1.getDoubleAt(0); + this.motionY = nbttaglist1.getDoubleAt(1); + this.motionZ = nbttaglist1.getDoubleAt(2); + } + else + { + this.setDead(); + } + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return true; + } + + public float getCollisionBorderSize() + { + return 1.0F; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (this.isEntityInvulnerable(source)) + { + return false; + } + else + { + this.markVelocityChanged(); + + if (source.getTrueSource() != null) + { + Vec3d vec3d = source.getTrueSource().getLookVec(); + + if (vec3d != null) + { + this.motionX = vec3d.x; + this.motionY = vec3d.y; + this.motionZ = vec3d.z; + this.accelerationX = this.motionX * 0.1D; + this.accelerationY = this.motionY * 0.1D; + this.accelerationZ = this.motionZ * 0.1D; + } + + if (source.getTrueSource() instanceof EntityLivingBase) + { + this.shootingEntity = (EntityLivingBase)source.getTrueSource(); + } + + return true; + } + else + { + return false; + } + } + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + return 1.0F; + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityFishHook.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityFishHook.java new file mode 100644 index 0000000..da0a4d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityFishHook.java @@ -0,0 +1,643 @@ +package net.minecraft.entity.projectile; + +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.stats.StatList; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityFishHook extends Entity +{ + private static final DataParameter DATA_HOOKED_ENTITY = EntityDataManager.createKey(EntityFishHook.class, DataSerializers.VARINT); + private boolean inGround; + private int ticksInGround; + private EntityPlayer angler; + private int ticksInAir; + private int ticksCatchable; + private int ticksCaughtDelay; + private int ticksCatchableDelay; + private float fishApproachAngle; + public Entity caughtEntity; + private EntityFishHook.State currentState = EntityFishHook.State.FLYING; + private int luck; + private int lureSpeed; + + @SideOnly(Side.CLIENT) + public EntityFishHook(World worldIn, EntityPlayer p_i47290_2_, double x, double y, double z) + { + super(worldIn); + this.init(p_i47290_2_); + this.setPosition(x, y, z); + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + } + + public EntityFishHook(World worldIn, EntityPlayer fishingPlayer) + { + super(worldIn); + this.init(fishingPlayer); + this.shoot(); + } + + private void init(EntityPlayer p_190626_1_) + { + this.setSize(0.25F, 0.25F); + this.ignoreFrustumCheck = true; + this.angler = p_190626_1_; + this.angler.fishEntity = this; + } + + public void setLureSpeed(int p_191516_1_) + { + this.lureSpeed = p_191516_1_; + } + + public void setLuck(int p_191517_1_) + { + this.luck = p_191517_1_; + } + + private void shoot() + { + float f = this.angler.prevRotationPitch + (this.angler.rotationPitch - this.angler.prevRotationPitch); + float f1 = this.angler.prevRotationYaw + (this.angler.rotationYaw - this.angler.prevRotationYaw); + float f2 = MathHelper.cos(-f1 * 0.017453292F - (float)Math.PI); + float f3 = MathHelper.sin(-f1 * 0.017453292F - (float)Math.PI); + float f4 = -MathHelper.cos(-f * 0.017453292F); + float f5 = MathHelper.sin(-f * 0.017453292F); + double d0 = this.angler.prevPosX + (this.angler.posX - this.angler.prevPosX) - (double)f3 * 0.3D; + double d1 = this.angler.prevPosY + (this.angler.posY - this.angler.prevPosY) + (double)this.angler.getEyeHeight(); + double d2 = this.angler.prevPosZ + (this.angler.posZ - this.angler.prevPosZ) - (double)f2 * 0.3D; + this.setLocationAndAngles(d0, d1, d2, f1, f); + this.motionX = (double)(-f3); + this.motionY = (double)MathHelper.clamp(-(f5 / f4), -5.0F, 5.0F); + this.motionZ = (double)(-f2); + float f6 = MathHelper.sqrt(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.motionX *= 0.6D / (double)f6 + 0.5D + this.rand.nextGaussian() * 0.0045D; + this.motionY *= 0.6D / (double)f6 + 0.5D + this.rand.nextGaussian() * 0.0045D; + this.motionZ *= 0.6D / (double)f6 + 0.5D + this.rand.nextGaussian() * 0.0045D; + float f7 = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f7) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + protected void entityInit() + { + this.getDataManager().register(DATA_HOOKED_ENTITY, Integer.valueOf(0)); + } + + public void notifyDataManagerChange(DataParameter key) + { + if (DATA_HOOKED_ENTITY.equals(key)) + { + int i = ((Integer)this.getDataManager().get(DATA_HOOKED_ENTITY)).intValue(); + this.caughtEntity = i > 0 ? this.world.getEntityByID(i - 1) : null; + } + + super.notifyDataManagerChange(key); + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = 64.0D; + return distance < 4096.0D; + } + + /** + * Set the position and rotation values directly without any clamping. + */ + @SideOnly(Side.CLIENT) + public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport) + { + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.angler == null) + { + this.setDead(); + } + else if (this.world.isRemote || !this.shouldStopFishing()) + { + if (this.inGround) + { + ++this.ticksInGround; + + if (this.ticksInGround >= 1200) + { + this.setDead(); + return; + } + } + + float f = 0.0F; + BlockPos blockpos = new BlockPos(this); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getMaterial() == Material.WATER) + { + f = BlockLiquid.getBlockLiquidHeight(iblockstate, this.world, blockpos); + } + + if (this.currentState == EntityFishHook.State.FLYING) + { + if (this.caughtEntity != null) + { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.currentState = EntityFishHook.State.HOOKED_IN_ENTITY; + return; + } + + if (f > 0.0F) + { + this.motionX *= 0.3D; + this.motionY *= 0.2D; + this.motionZ *= 0.3D; + this.currentState = EntityFishHook.State.BOBBING; + return; + } + + if (!this.world.isRemote) + { + this.checkCollision(); + } + + if (!this.inGround && !this.onGround && !this.collidedHorizontally) + { + ++this.ticksInAir; + } + else + { + this.ticksInAir = 0; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + } + else + { + if (this.currentState == EntityFishHook.State.HOOKED_IN_ENTITY) + { + if (this.caughtEntity != null) + { + if (this.caughtEntity.isDead) + { + this.caughtEntity = null; + this.currentState = EntityFishHook.State.FLYING; + } + else + { + this.posX = this.caughtEntity.posX; + double d2 = (double)this.caughtEntity.height; + this.posY = this.caughtEntity.getEntityBoundingBox().minY + d2 * 0.8D; + this.posZ = this.caughtEntity.posZ; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + + return; + } + + if (this.currentState == EntityFishHook.State.BOBBING) + { + this.motionX *= 0.9D; + this.motionZ *= 0.9D; + double d0 = this.posY + this.motionY - (double)blockpos.getY() - (double)f; + + if (Math.abs(d0) < 0.01D) + { + d0 += Math.signum(d0) * 0.1D; + } + + this.motionY -= d0 * (double)this.rand.nextFloat() * 0.2D; + + if (!this.world.isRemote && f > 0.0F) + { + this.catchingFish(blockpos); + } + } + } + + if (iblockstate.getMaterial() != Material.WATER) + { + this.motionY -= 0.03D; + } + + this.move(MoverType.SELF, this.motionX, this.motionY, this.motionZ); + this.updateRotation(); + double d1 = 0.92D; + this.motionX *= 0.92D; + this.motionY *= 0.92D; + this.motionZ *= 0.92D; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + + private boolean shouldStopFishing() + { + ItemStack itemstack = this.angler.getHeldItemMainhand(); + ItemStack itemstack1 = this.angler.getHeldItemOffhand(); + boolean flag = itemstack.getItem() instanceof net.minecraft.item.ItemFishingRod; + boolean flag1 = itemstack1.getItem() instanceof net.minecraft.item.ItemFishingRod; + + if (!this.angler.isDead && this.angler.isEntityAlive() && (flag || flag1) && this.getDistanceSq(this.angler) <= 1024.0D) + { + return false; + } + else + { + this.setDead(); + return true; + } + } + + private void updateRotation() + { + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + + for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + } + + private void checkCollision() + { + Vec3d vec3d = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult raytraceresult = this.world.rayTraceBlocks(vec3d, vec3d1, false, true, false); + vec3d = new Vec3d(this.posX, this.posY, this.posZ); + vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (raytraceresult != null) + { + vec3d1 = new Vec3d(raytraceresult.hitVec.x, raytraceresult.hitVec.y, raytraceresult.hitVec.z); + } + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D)); + double d0 = 0.0D; + + for (Entity entity1 : list) + { + if (this.canBeHooked(entity1) && (entity1 != this.angler || this.ticksInAir >= 5)) + { + AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D); + RayTraceResult raytraceresult1 = axisalignedbb.calculateIntercept(vec3d, vec3d1); + + if (raytraceresult1 != null) + { + double d1 = vec3d.squareDistanceTo(raytraceresult1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + if (entity != null) + { + raytraceresult = new RayTraceResult(entity); + } + + if (raytraceresult != null && raytraceresult.typeOfHit != RayTraceResult.Type.MISS) + { + if (raytraceresult.typeOfHit == RayTraceResult.Type.ENTITY) + { + this.caughtEntity = raytraceresult.entityHit; + this.setHookedEntity(); + } + else + { + this.inGround = true; + } + } + } + + private void setHookedEntity() + { + this.getDataManager().set(DATA_HOOKED_ENTITY, Integer.valueOf(this.caughtEntity.getEntityId() + 1)); + } + + private void catchingFish(BlockPos p_190621_1_) + { + WorldServer worldserver = (WorldServer)this.world; + int i = 1; + BlockPos blockpos = p_190621_1_.up(); + + if (this.rand.nextFloat() < 0.25F && this.world.isRainingAt(blockpos)) + { + ++i; + } + + if (this.rand.nextFloat() < 0.5F && !this.world.canSeeSky(blockpos)) + { + --i; + } + + if (this.ticksCatchable > 0) + { + --this.ticksCatchable; + + if (this.ticksCatchable <= 0) + { + this.ticksCaughtDelay = 0; + this.ticksCatchableDelay = 0; + } + else + { + this.motionY -= 0.2D * (double)this.rand.nextFloat() * (double)this.rand.nextFloat(); + } + } + else if (this.ticksCatchableDelay > 0) + { + this.ticksCatchableDelay -= i; + + if (this.ticksCatchableDelay > 0) + { + this.fishApproachAngle = (float)((double)this.fishApproachAngle + this.rand.nextGaussian() * 4.0D); + float f = this.fishApproachAngle * 0.017453292F; + float f1 = MathHelper.sin(f); + float f2 = MathHelper.cos(f); + double d0 = this.posX + (double)(f1 * (float)this.ticksCatchableDelay * 0.1F); + double d1 = (double)((float)MathHelper.floor(this.getEntityBoundingBox().minY) + 1.0F); + double d2 = this.posZ + (double)(f2 * (float)this.ticksCatchableDelay * 0.1F); + IBlockState state = worldserver.getBlockState(new BlockPos(d0, d1 - 1.0D, d2)); + + if (state.getMaterial() == Material.WATER) + { + if (this.rand.nextFloat() < 0.15F) + { + worldserver.spawnParticle(EnumParticleTypes.WATER_BUBBLE, d0, d1 - 0.10000000149011612D, d2, 1, (double)f1, 0.1D, (double)f2, 0.0D); + } + + float f3 = f1 * 0.04F; + float f4 = f2 * 0.04F; + worldserver.spawnParticle(EnumParticleTypes.WATER_WAKE, d0, d1, d2, 0, (double)f4, 0.01D, (double)(-f3), 1.0D); + worldserver.spawnParticle(EnumParticleTypes.WATER_WAKE, d0, d1, d2, 0, (double)(-f4), 0.01D, (double)f3, 1.0D); + } + } + else + { + this.motionY = (double)(-0.4F * MathHelper.nextFloat(this.rand, 0.6F, 1.0F)); + this.playSound(SoundEvents.ENTITY_BOBBER_SPLASH, 0.25F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + double d3 = this.getEntityBoundingBox().minY + 0.5D; + worldserver.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX, d3, this.posZ, (int)(1.0F + this.width * 20.0F), (double)this.width, 0.0D, (double)this.width, 0.20000000298023224D); + worldserver.spawnParticle(EnumParticleTypes.WATER_WAKE, this.posX, d3, this.posZ, (int)(1.0F + this.width * 20.0F), (double)this.width, 0.0D, (double)this.width, 0.20000000298023224D); + this.ticksCatchable = MathHelper.getInt(this.rand, 20, 40); + } + } + else if (this.ticksCaughtDelay > 0) + { + this.ticksCaughtDelay -= i; + float f5 = 0.15F; + + if (this.ticksCaughtDelay < 20) + { + f5 = (float)((double)f5 + (double)(20 - this.ticksCaughtDelay) * 0.05D); + } + else if (this.ticksCaughtDelay < 40) + { + f5 = (float)((double)f5 + (double)(40 - this.ticksCaughtDelay) * 0.02D); + } + else if (this.ticksCaughtDelay < 60) + { + f5 = (float)((double)f5 + (double)(60 - this.ticksCaughtDelay) * 0.01D); + } + + if (this.rand.nextFloat() < f5) + { + float f6 = MathHelper.nextFloat(this.rand, 0.0F, 360.0F) * 0.017453292F; + float f7 = MathHelper.nextFloat(this.rand, 25.0F, 60.0F); + double d4 = this.posX + (double)(MathHelper.sin(f6) * f7 * 0.1F); + double d5 = (double)((float)MathHelper.floor(this.getEntityBoundingBox().minY) + 1.0F); + double d6 = this.posZ + (double)(MathHelper.cos(f6) * f7 * 0.1F); + IBlockState state = worldserver.getBlockState(new BlockPos((int) d4, (int) d5 - 1, (int) d6)); + + if (state.getMaterial() == Material.WATER) + { + worldserver.spawnParticle(EnumParticleTypes.WATER_SPLASH, d4, d5, d6, 2 + this.rand.nextInt(2), 0.10000000149011612D, 0.0D, 0.10000000149011612D, 0.0D); + } + } + + if (this.ticksCaughtDelay <= 0) + { + this.fishApproachAngle = MathHelper.nextFloat(this.rand, 0.0F, 360.0F); + this.ticksCatchableDelay = MathHelper.getInt(this.rand, 20, 80); + } + } + else + { + this.ticksCaughtDelay = MathHelper.getInt(this.rand, 100, 600); + this.ticksCaughtDelay -= this.lureSpeed * 20 * 5; + } + } + + protected boolean canBeHooked(Entity p_189739_1_) + { + return p_189739_1_.canBeCollidedWith() || p_189739_1_ instanceof EntityItem; + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + } + + public int handleHookRetraction() + { + if (!this.world.isRemote && this.angler != null) + { + int i = 0; + + net.minecraftforge.event.entity.player.ItemFishedEvent event = null; + if (this.caughtEntity != null) + { + this.bringInHookedEntity(); + this.world.setEntityState(this, (byte)31); + i = this.caughtEntity instanceof EntityItem ? 3 : 5; + } + else if (this.ticksCatchable > 0) + { + LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer)this.world); + lootcontext$builder.withLuck((float)this.luck + this.angler.getLuck()).withPlayer(this.angler).withLootedEntity(this); // Forge: add player & looted entity to LootContext + List result = this.world.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING).generateLootForPools(this.rand, lootcontext$builder.build()); + event = new net.minecraftforge.event.entity.player.ItemFishedEvent(result, this.inGround ? 2 : 1, this); + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event); + if (event.isCanceled()) + { + this.setDead(); + return event.getRodDamage(); + } + + for (ItemStack itemstack : result) + { + EntityItem entityitem = new EntityItem(this.world, this.posX, this.posY, this.posZ, itemstack); + double d0 = this.angler.posX - this.posX; + double d1 = this.angler.posY - this.posY; + double d2 = this.angler.posZ - this.posZ; + double d3 = (double)MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + double d4 = 0.1D; + entityitem.motionX = d0 * 0.1D; + entityitem.motionY = d1 * 0.1D + (double)MathHelper.sqrt(d3) * 0.08D; + entityitem.motionZ = d2 * 0.1D; + this.world.spawnEntity(entityitem); + this.angler.world.spawnEntity(new EntityXPOrb(this.angler.world, this.angler.posX, this.angler.posY + 0.5D, this.angler.posZ + 0.5D, this.rand.nextInt(6) + 1)); + Item item = itemstack.getItem(); + + if (item == Items.FISH || item == Items.COOKED_FISH) + { + this.angler.addStat(StatList.FISH_CAUGHT, 1); + } + } + + i = 1; + } + + if (this.inGround) + { + i = 2; + } + + this.setDead(); + return event == null ? i : event.getRodDamage(); + } + else + { + return 0; + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 31 && this.world.isRemote && this.caughtEntity instanceof EntityPlayer && ((EntityPlayer)this.caughtEntity).isUser()) + { + this.bringInHookedEntity(); + } + + super.handleStatusUpdate(id); + } + + protected void bringInHookedEntity() + { + if (this.angler != null) + { + double d0 = this.angler.posX - this.posX; + double d1 = this.angler.posY - this.posY; + double d2 = this.angler.posZ - this.posZ; + double d3 = 0.1D; + this.caughtEntity.motionX += d0 * 0.1D; + this.caughtEntity.motionY += d1 * 0.1D; + this.caughtEntity.motionZ += d2 * 0.1D; + } + } + + /** + * returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to + * prevent them from trampling crops + */ + protected boolean canTriggerWalking() + { + return false; + } + + /** + * Will get destroyed next tick. + */ + public void setDead() + { + super.setDead(); + + if (this.angler != null) + { + this.angler.fishEntity = null; + } + } + + public EntityPlayer getAngler() + { + return this.angler; + } + + static enum State + { + FLYING, + HOOKED_IN_ENTITY, + BOBBING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityLargeFireball.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityLargeFireball.java new file mode 100644 index 0000000..9c6fe43 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityLargeFireball.java @@ -0,0 +1,78 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityLargeFireball extends EntityFireball +{ + public int explosionPower = 1; + + public EntityLargeFireball(World worldIn) + { + super(worldIn); + } + + @SideOnly(Side.CLIENT) + public EntityLargeFireball(World worldIn, double x, double y, double z, double accelX, double accelY, double accelZ) + { + super(worldIn, x, y, z, accelX, accelY, accelZ); + } + + public EntityLargeFireball(World worldIn, EntityLivingBase shooter, double accelX, double accelY, double accelZ) + { + super(worldIn, shooter, accelX, accelY, accelZ); + } + + /** + * Called when this EntityFireball hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (!this.world.isRemote) + { + if (result.entityHit != null) + { + result.entityHit.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 6.0F); + this.applyEnchantments(this.shootingEntity, result.entityHit); + } + + boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.shootingEntity); + this.world.newExplosion((Entity)null, this.posX, this.posY, this.posZ, (float)this.explosionPower, flag, flag); + this.setDead(); + } + } + + public static void registerFixesLargeFireball(DataFixer fixer) + { + EntityFireball.registerFixesFireball(fixer, "Fireball"); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("ExplosionPower", this.explosionPower); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("ExplosionPower", 99)) + { + this.explosionPower = compound.getInteger("ExplosionPower"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityLlamaSpit.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityLlamaSpit.java new file mode 100644 index 0000000..4d028be --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityLlamaSpit.java @@ -0,0 +1,281 @@ +package net.minecraft.entity.projectile; + +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.passive.EntityLlama; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityLlamaSpit extends Entity implements IProjectile +{ + public EntityLlama owner; + private NBTTagCompound ownerNbt; + + public EntityLlamaSpit(World worldIn) + { + super(worldIn); + } + + public EntityLlamaSpit(World worldIn, EntityLlama p_i47273_2_) + { + super(worldIn); + this.owner = p_i47273_2_; + this.setPosition(p_i47273_2_.posX - (double)(p_i47273_2_.width + 1.0F) * 0.5D * (double)MathHelper.sin(p_i47273_2_.renderYawOffset * 0.017453292F), p_i47273_2_.posY + (double)p_i47273_2_.getEyeHeight() - 0.10000000149011612D, p_i47273_2_.posZ + (double)(p_i47273_2_.width + 1.0F) * 0.5D * (double)MathHelper.cos(p_i47273_2_.renderYawOffset * 0.017453292F)); + this.setSize(0.25F, 0.25F); + } + + @SideOnly(Side.CLIENT) + public EntityLlamaSpit(World worldIn, double x, double y, double z, double p_i47274_8_, double p_i47274_10_, double p_i47274_12_) + { + super(worldIn); + this.setPosition(x, y, z); + + for (int i = 0; i < 7; ++i) + { + double d0 = 0.4D + 0.1D * (double)i; + worldIn.spawnParticle(EnumParticleTypes.SPIT, x, y, z, p_i47274_8_ * d0, p_i47274_10_, p_i47274_12_ * d0); + } + + this.motionX = p_i47274_8_; + this.motionY = p_i47274_10_; + this.motionZ = p_i47274_12_; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.ownerNbt != null) + { + this.restoreOwnerFromSave(); + } + + Vec3d vec3d = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult raytraceresult = this.world.rayTraceBlocks(vec3d, vec3d1); + vec3d = new Vec3d(this.posX, this.posY, this.posZ); + vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (raytraceresult != null) + { + vec3d1 = new Vec3d(raytraceresult.hitVec.x, raytraceresult.hitVec.y, raytraceresult.hitVec.z); + } + + Entity entity = this.getHitEntity(vec3d, vec3d1); + + if (entity != null) + { + raytraceresult = new RayTraceResult(entity); + } + + if (raytraceresult != null && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) + { + this.onHit(raytraceresult); + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + + for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f1 = 0.99F; + float f2 = 0.06F; + + if (!this.world.isMaterialInBB(this.getEntityBoundingBox(), Material.AIR)) + { + this.setDead(); + } + else if (this.isInWater()) + { + this.setDead(); + } + else + { + this.motionX *= 0.9900000095367432D; + this.motionY *= 0.9900000095367432D; + this.motionZ *= 0.9900000095367432D; + + if (!this.hasNoGravity()) + { + this.motionY -= 0.05999999865889549D; + } + + this.setPosition(this.posX, this.posY, this.posZ); + } + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f) * (180D / Math.PI)); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + this.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + } + + @Nullable + private Entity getHitEntity(Vec3d p_190538_1_, Vec3d p_190538_2_) + { + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D)); + double d0 = 0.0D; + + for (Entity entity1 : list) + { + if (entity1 != this.owner) + { + AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D); + RayTraceResult raytraceresult = axisalignedbb.calculateIntercept(p_190538_1_, p_190538_2_); + + if (raytraceresult != null) + { + double d1 = p_190538_1_.squareDistanceTo(raytraceresult.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + + return entity; + } + + /** + * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction. + */ + public void shoot(double x, double y, double z, float velocity, float inaccuracy) + { + float f = MathHelper.sqrt(x * x + y * y + z * z); + x = x / (double)f; + y = y / (double)f; + z = z / (double)f; + x = x + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + y = y + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + z = z + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + x = x * (double)velocity; + y = y * (double)velocity; + z = z * (double)velocity; + this.motionX = x; + this.motionY = y; + this.motionZ = z; + float f1 = MathHelper.sqrt(x * x + z * z); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f1) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + public void onHit(RayTraceResult p_190536_1_) + { + if (p_190536_1_.entityHit != null && this.owner != null) + { + p_190536_1_.entityHit.attackEntityFrom(DamageSource.causeIndirectDamage(this, this.owner).setProjectile(), 1.0F); + } + + if (!this.world.isRemote) + { + this.setDead(); + } + } + + protected void entityInit() + { + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + if (compound.hasKey("Owner", 10)) + { + this.ownerNbt = compound.getCompoundTag("Owner"); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + if (this.owner != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + UUID uuid = this.owner.getUniqueID(); + nbttagcompound.setUniqueId("OwnerUUID", uuid); + compound.setTag("Owner", nbttagcompound); + } + } + + private void restoreOwnerFromSave() + { + if (this.ownerNbt != null && this.ownerNbt.hasUniqueId("OwnerUUID")) + { + UUID uuid = this.ownerNbt.getUniqueId("OwnerUUID"); + + for (EntityLlama entityllama : this.world.getEntitiesWithinAABB(EntityLlama.class, this.getEntityBoundingBox().grow(15.0D))) + { + if (entityllama.getUniqueID().equals(uuid)) + { + this.owner = entityllama; + break; + } + } + } + + this.ownerNbt = null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityPotion.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityPotion.java new file mode 100644 index 0000000..03f6449 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityPotion.java @@ -0,0 +1,296 @@ +package net.minecraft.entity.projectile; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackData; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityPotion extends EntityThrowable +{ + private static final DataParameter ITEM = EntityDataManager.createKey(EntityPotion.class, DataSerializers.ITEM_STACK); + private static final Logger LOGGER = LogManager.getLogger(); + public static final Predicate WATER_SENSITIVE = new Predicate() + { + public boolean apply(@Nullable EntityLivingBase p_apply_1_) + { + return EntityPotion.isWaterSensitiveEntity(p_apply_1_); + } + }; + + public EntityPotion(World worldIn) + { + super(worldIn); + } + + public EntityPotion(World worldIn, EntityLivingBase throwerIn, ItemStack potionDamageIn) + { + super(worldIn, throwerIn); + this.setItem(potionDamageIn); + } + + public EntityPotion(World worldIn, double x, double y, double z, ItemStack potionDamageIn) + { + super(worldIn, x, y, z); + + if (!potionDamageIn.isEmpty()) + { + this.setItem(potionDamageIn); + } + } + + protected void entityInit() + { + this.getDataManager().register(ITEM, ItemStack.EMPTY); + } + + public ItemStack getPotion() + { + ItemStack itemstack = (ItemStack)this.getDataManager().get(ITEM); + + if (itemstack.getItem() != Items.SPLASH_POTION && itemstack.getItem() != Items.LINGERING_POTION) + { + if (this.world != null) + { + LOGGER.error("ThrownPotion entity {} has no item?!", (int)this.getEntityId()); + } + + return new ItemStack(Items.SPLASH_POTION); + } + else + { + return itemstack; + } + } + + public void setItem(ItemStack stack) + { + this.getDataManager().set(ITEM, stack); + this.getDataManager().setDirty(ITEM); + } + + /** + * Gets the amount of gravity to apply to the thrown entity with each tick. + */ + protected float getGravityVelocity() + { + return 0.05F; + } + + /** + * Called when this EntityThrowable hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (!this.world.isRemote) + { + ItemStack itemstack = this.getPotion(); + PotionType potiontype = PotionUtils.getPotionFromItem(itemstack); + List list = PotionUtils.getEffectsFromStack(itemstack); + boolean flag = potiontype == PotionTypes.WATER && list.isEmpty(); + + if (result.typeOfHit == RayTraceResult.Type.BLOCK && flag) + { + BlockPos blockpos = result.getBlockPos().offset(result.sideHit); + this.extinguishFires(blockpos, result.sideHit); + + for (EnumFacing enumfacing : EnumFacing.Plane.HORIZONTAL) + { + this.extinguishFires(blockpos.offset(enumfacing), enumfacing); + } + } + + if (flag) + { + this.applyWater(); + } + else if (!list.isEmpty()) + { + if (this.isLingering()) + { + this.makeAreaOfEffectCloud(itemstack, potiontype); + } + else + { + this.applySplash(result, list); + } + } + + int i = potiontype.hasInstantEffect() ? 2007 : 2002; + this.world.playEvent(i, new BlockPos(this), PotionUtils.getColor(itemstack)); + this.setDead(); + } + } + + private void applyWater() + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox().grow(4.0D, 2.0D, 4.0D); + List list = this.world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb, WATER_SENSITIVE); + + if (!list.isEmpty()) + { + for (EntityLivingBase entitylivingbase : list) + { + double d0 = this.getDistanceSq(entitylivingbase); + + if (d0 < 16.0D && isWaterSensitiveEntity(entitylivingbase)) + { + entitylivingbase.attackEntityFrom(DamageSource.DROWN, 1.0F); + } + } + } + } + + private void applySplash(RayTraceResult p_190543_1_, List p_190543_2_) + { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox().grow(4.0D, 2.0D, 4.0D); + List list = this.world.getEntitiesWithinAABB(EntityLivingBase.class, axisalignedbb); + + if (!list.isEmpty()) + { + for (EntityLivingBase entitylivingbase : list) + { + if (entitylivingbase.canBeHitWithPotion()) + { + double d0 = this.getDistanceSq(entitylivingbase); + + if (d0 < 16.0D) + { + double d1 = 1.0D - Math.sqrt(d0) / 4.0D; + + if (entitylivingbase == p_190543_1_.entityHit) + { + d1 = 1.0D; + } + + for (PotionEffect potioneffect : p_190543_2_) + { + Potion potion = potioneffect.getPotion(); + + if (potion.isInstant()) + { + potion.affectEntity(this, this.getThrower(), entitylivingbase, potioneffect.getAmplifier(), d1); + } + else + { + int i = (int)(d1 * (double)potioneffect.getDuration() + 0.5D); + + if (i > 20) + { + entitylivingbase.addPotionEffect(new PotionEffect(potion, i, potioneffect.getAmplifier(), potioneffect.getIsAmbient(), potioneffect.doesShowParticles())); + } + } + } + } + } + } + } + } + + private void makeAreaOfEffectCloud(ItemStack p_190542_1_, PotionType p_190542_2_) + { + EntityAreaEffectCloud entityareaeffectcloud = new EntityAreaEffectCloud(this.world, this.posX, this.posY, this.posZ); + entityareaeffectcloud.setOwner(this.getThrower()); + entityareaeffectcloud.setRadius(3.0F); + entityareaeffectcloud.setRadiusOnUse(-0.5F); + entityareaeffectcloud.setWaitTime(10); + entityareaeffectcloud.setRadiusPerTick(-entityareaeffectcloud.getRadius() / (float)entityareaeffectcloud.getDuration()); + entityareaeffectcloud.setPotion(p_190542_2_); + + for (PotionEffect potioneffect : PotionUtils.getFullEffectsFromItem(p_190542_1_)) + { + entityareaeffectcloud.addEffect(new PotionEffect(potioneffect)); + } + + NBTTagCompound nbttagcompound = p_190542_1_.getTagCompound(); + + if (nbttagcompound != null && nbttagcompound.hasKey("CustomPotionColor", 99)) + { + entityareaeffectcloud.setColor(nbttagcompound.getInteger("CustomPotionColor")); + } + + this.world.spawnEntity(entityareaeffectcloud); + } + + private boolean isLingering() + { + return this.getPotion().getItem() == Items.LINGERING_POTION; + } + + private void extinguishFires(BlockPos pos, EnumFacing p_184542_2_) + { + if (this.world.getBlockState(pos).getBlock() == Blocks.FIRE) + { + this.world.extinguishFire((EntityPlayer)null, pos.offset(p_184542_2_), p_184542_2_.getOpposite()); + } + } + + public static void registerFixesPotion(DataFixer fixer) + { + EntityThrowable.registerFixesThrowable(fixer, "ThrownPotion"); + fixer.registerWalker(FixTypes.ENTITY, new ItemStackData(EntityPotion.class, new String[] {"Potion"})); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + ItemStack itemstack = new ItemStack(compound.getCompoundTag("Potion")); + + if (itemstack.isEmpty()) + { + this.setDead(); + } + else + { + this.setItem(itemstack); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + ItemStack itemstack = this.getPotion(); + + if (!itemstack.isEmpty()) + { + compound.setTag("Potion", itemstack.writeToNBT(new NBTTagCompound())); + } + } + + private static boolean isWaterSensitiveEntity(EntityLivingBase p_190544_0_) + { + return p_190544_0_ instanceof EntityEnderman || p_190544_0_ instanceof EntityBlaze; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityShulkerBullet.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityShulkerBullet.java new file mode 100644 index 0000000..112a74b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityShulkerBullet.java @@ -0,0 +1,448 @@ +package net.minecraft.entity.projectile; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityShulkerBullet extends Entity +{ + private EntityLivingBase owner; + private Entity target; + @Nullable + private EnumFacing direction; + private int steps; + private double targetDeltaX; + private double targetDeltaY; + private double targetDeltaZ; + @Nullable + private UUID ownerUniqueId; + private BlockPos ownerBlockPos; + @Nullable + private UUID targetUniqueId; + private BlockPos targetBlockPos; + + public EntityShulkerBullet(World worldIn) + { + super(worldIn); + this.setSize(0.3125F, 0.3125F); + this.noClip = true; + } + + public SoundCategory getSoundCategory() + { + return SoundCategory.HOSTILE; + } + + @SideOnly(Side.CLIENT) + public EntityShulkerBullet(World worldIn, double x, double y, double z, double motionXIn, double motionYIn, double motionZIn) + { + this(worldIn); + this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch); + this.motionX = motionXIn; + this.motionY = motionYIn; + this.motionZ = motionZIn; + } + + public EntityShulkerBullet(World worldIn, EntityLivingBase ownerIn, Entity targetIn, EnumFacing.Axis p_i46772_4_) + { + this(worldIn); + this.owner = ownerIn; + BlockPos blockpos = new BlockPos(ownerIn); + double d0 = (double)blockpos.getX() + 0.5D; + double d1 = (double)blockpos.getY() + 0.5D; + double d2 = (double)blockpos.getZ() + 0.5D; + this.setLocationAndAngles(d0, d1, d2, this.rotationYaw, this.rotationPitch); + this.target = targetIn; + this.direction = EnumFacing.UP; + this.selectNextMoveDirection(p_i46772_4_); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + protected void writeEntityToNBT(NBTTagCompound compound) + { + if (this.owner != null) + { + BlockPos blockpos = new BlockPos(this.owner); + NBTTagCompound nbttagcompound = NBTUtil.createUUIDTag(this.owner.getUniqueID()); + nbttagcompound.setInteger("X", blockpos.getX()); + nbttagcompound.setInteger("Y", blockpos.getY()); + nbttagcompound.setInteger("Z", blockpos.getZ()); + compound.setTag("Owner", nbttagcompound); + } + + if (this.target != null) + { + BlockPos blockpos1 = new BlockPos(this.target); + NBTTagCompound nbttagcompound1 = NBTUtil.createUUIDTag(this.target.getUniqueID()); + nbttagcompound1.setInteger("X", blockpos1.getX()); + nbttagcompound1.setInteger("Y", blockpos1.getY()); + nbttagcompound1.setInteger("Z", blockpos1.getZ()); + compound.setTag("Target", nbttagcompound1); + } + + if (this.direction != null) + { + compound.setInteger("Dir", this.direction.getIndex()); + } + + compound.setInteger("Steps", this.steps); + compound.setDouble("TXD", this.targetDeltaX); + compound.setDouble("TYD", this.targetDeltaY); + compound.setDouble("TZD", this.targetDeltaZ); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + protected void readEntityFromNBT(NBTTagCompound compound) + { + this.steps = compound.getInteger("Steps"); + this.targetDeltaX = compound.getDouble("TXD"); + this.targetDeltaY = compound.getDouble("TYD"); + this.targetDeltaZ = compound.getDouble("TZD"); + + if (compound.hasKey("Dir", 99)) + { + this.direction = EnumFacing.getFront(compound.getInteger("Dir")); + } + + if (compound.hasKey("Owner", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("Owner"); + this.ownerUniqueId = NBTUtil.getUUIDFromTag(nbttagcompound); + this.ownerBlockPos = new BlockPos(nbttagcompound.getInteger("X"), nbttagcompound.getInteger("Y"), nbttagcompound.getInteger("Z")); + } + + if (compound.hasKey("Target", 10)) + { + NBTTagCompound nbttagcompound1 = compound.getCompoundTag("Target"); + this.targetUniqueId = NBTUtil.getUUIDFromTag(nbttagcompound1); + this.targetBlockPos = new BlockPos(nbttagcompound1.getInteger("X"), nbttagcompound1.getInteger("Y"), nbttagcompound1.getInteger("Z")); + } + } + + protected void entityInit() + { + } + + private void setDirection(@Nullable EnumFacing directionIn) + { + this.direction = directionIn; + } + + private void selectNextMoveDirection(@Nullable EnumFacing.Axis p_184569_1_) + { + double d0 = 0.5D; + BlockPos blockpos; + + if (this.target == null) + { + blockpos = (new BlockPos(this)).down(); + } + else + { + d0 = (double)this.target.height * 0.5D; + blockpos = new BlockPos(this.target.posX, this.target.posY + d0, this.target.posZ); + } + + double d1 = (double)blockpos.getX() + 0.5D; + double d2 = (double)blockpos.getY() + d0; + double d3 = (double)blockpos.getZ() + 0.5D; + EnumFacing enumfacing = null; + + if (blockpos.distanceSqToCenter(this.posX, this.posY, this.posZ) >= 4.0D) + { + BlockPos blockpos1 = new BlockPos(this); + List list = Lists.newArrayList(); + + if (p_184569_1_ != EnumFacing.Axis.X) + { + if (blockpos1.getX() < blockpos.getX() && this.world.isAirBlock(blockpos1.east())) + { + list.add(EnumFacing.EAST); + } + else if (blockpos1.getX() > blockpos.getX() && this.world.isAirBlock(blockpos1.west())) + { + list.add(EnumFacing.WEST); + } + } + + if (p_184569_1_ != EnumFacing.Axis.Y) + { + if (blockpos1.getY() < blockpos.getY() && this.world.isAirBlock(blockpos1.up())) + { + list.add(EnumFacing.UP); + } + else if (blockpos1.getY() > blockpos.getY() && this.world.isAirBlock(blockpos1.down())) + { + list.add(EnumFacing.DOWN); + } + } + + if (p_184569_1_ != EnumFacing.Axis.Z) + { + if (blockpos1.getZ() < blockpos.getZ() && this.world.isAirBlock(blockpos1.south())) + { + list.add(EnumFacing.SOUTH); + } + else if (blockpos1.getZ() > blockpos.getZ() && this.world.isAirBlock(blockpos1.north())) + { + list.add(EnumFacing.NORTH); + } + } + + enumfacing = EnumFacing.random(this.rand); + + if (list.isEmpty()) + { + for (int i = 5; !this.world.isAirBlock(blockpos1.offset(enumfacing)) && i > 0; --i) + { + enumfacing = EnumFacing.random(this.rand); + } + } + else + { + enumfacing = list.get(this.rand.nextInt(list.size())); + } + + d1 = this.posX + (double)enumfacing.getFrontOffsetX(); + d2 = this.posY + (double)enumfacing.getFrontOffsetY(); + d3 = this.posZ + (double)enumfacing.getFrontOffsetZ(); + } + + this.setDirection(enumfacing); + double d6 = d1 - this.posX; + double d7 = d2 - this.posY; + double d4 = d3 - this.posZ; + double d5 = (double)MathHelper.sqrt(d6 * d6 + d7 * d7 + d4 * d4); + + if (d5 == 0.0D) + { + this.targetDeltaX = 0.0D; + this.targetDeltaY = 0.0D; + this.targetDeltaZ = 0.0D; + } + else + { + this.targetDeltaX = d6 / d5 * 0.15D; + this.targetDeltaY = d7 / d5 * 0.15D; + this.targetDeltaZ = d4 / d5 * 0.15D; + } + + this.isAirBorne = true; + this.steps = 10 + this.rand.nextInt(5) * 10; + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (!this.world.isRemote && this.world.getDifficulty() == EnumDifficulty.PEACEFUL) + { + this.setDead(); + } + else + { + super.onUpdate(); + + if (!this.world.isRemote) + { + if (this.target == null && this.targetUniqueId != null) + { + for (EntityLivingBase entitylivingbase : this.world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(this.targetBlockPos.add(-2, -2, -2), this.targetBlockPos.add(2, 2, 2)))) + { + if (entitylivingbase.getUniqueID().equals(this.targetUniqueId)) + { + this.target = entitylivingbase; + break; + } + } + + this.targetUniqueId = null; + } + + if (this.owner == null && this.ownerUniqueId != null) + { + for (EntityLivingBase entitylivingbase1 : this.world.getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(this.ownerBlockPos.add(-2, -2, -2), this.ownerBlockPos.add(2, 2, 2)))) + { + if (entitylivingbase1.getUniqueID().equals(this.ownerUniqueId)) + { + this.owner = entitylivingbase1; + break; + } + } + + this.ownerUniqueId = null; + } + + if (this.target == null || !this.target.isEntityAlive() || this.target instanceof EntityPlayer && ((EntityPlayer)this.target).isSpectator()) + { + if (!this.hasNoGravity()) + { + this.motionY -= 0.04D; + } + } + else + { + this.targetDeltaX = MathHelper.clamp(this.targetDeltaX * 1.025D, -1.0D, 1.0D); + this.targetDeltaY = MathHelper.clamp(this.targetDeltaY * 1.025D, -1.0D, 1.0D); + this.targetDeltaZ = MathHelper.clamp(this.targetDeltaZ * 1.025D, -1.0D, 1.0D); + this.motionX += (this.targetDeltaX - this.motionX) * 0.2D; + this.motionY += (this.targetDeltaY - this.motionY) * 0.2D; + this.motionZ += (this.targetDeltaZ - this.motionZ) * 0.2D; + } + + RayTraceResult raytraceresult = ProjectileHelper.forwardsRaycast(this, true, false, this.owner); + + if (raytraceresult != null && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) + { + this.bulletHit(raytraceresult); + } + } + + this.setPosition(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + ProjectileHelper.rotateTowardsMovement(this, 0.5F); + + if (this.world.isRemote) + { + this.world.spawnParticle(EnumParticleTypes.END_ROD, this.posX - this.motionX, this.posY - this.motionY + 0.15D, this.posZ - this.motionZ, 0.0D, 0.0D, 0.0D); + } + else if (this.target != null && !this.target.isDead) + { + if (this.steps > 0) + { + --this.steps; + + if (this.steps == 0) + { + this.selectNextMoveDirection(this.direction == null ? null : this.direction.getAxis()); + } + } + + if (this.direction != null) + { + BlockPos blockpos = new BlockPos(this); + EnumFacing.Axis enumfacing$axis = this.direction.getAxis(); + + if (this.world.isBlockNormalCube(blockpos.offset(this.direction), false)) + { + this.selectNextMoveDirection(enumfacing$axis); + } + else + { + BlockPos blockpos1 = new BlockPos(this.target); + + if (enumfacing$axis == EnumFacing.Axis.X && blockpos.getX() == blockpos1.getX() || enumfacing$axis == EnumFacing.Axis.Z && blockpos.getZ() == blockpos1.getZ() || enumfacing$axis == EnumFacing.Axis.Y && blockpos.getY() == blockpos1.getY()) + { + this.selectNextMoveDirection(enumfacing$axis); + } + } + } + } + } + } + + /** + * Returns true if the entity is on fire. Used by render to add the fire effect on rendering. + */ + public boolean isBurning() + { + return false; + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 16384.0D; + } + + /** + * Gets how bright this entity is. + */ + public float getBrightness() + { + return 1.0F; + } + + @SideOnly(Side.CLIENT) + public int getBrightnessForRender() + { + return 15728880; + } + + protected void bulletHit(RayTraceResult result) + { + if (result.entityHit == null) + { + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY, this.posZ, 2, 0.2D, 0.2D, 0.2D, 0.0D); + this.playSound(SoundEvents.ENTITY_SHULKER_BULLET_HIT, 1.0F, 1.0F); + } + else + { + boolean flag = result.entityHit.attackEntityFrom(DamageSource.causeIndirectDamage(this, this.owner).setProjectile(), 4.0F); + + if (flag) + { + this.applyEnchantments(this.owner, result.entityHit); + + if (result.entityHit instanceof EntityLivingBase) + { + ((EntityLivingBase)result.entityHit).addPotionEffect(new PotionEffect(MobEffects.LEVITATION, 200)); + } + } + } + + this.setDead(); + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return true; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + if (!this.world.isRemote) + { + this.playSound(SoundEvents.ENTITY_SHULKER_BULLET_HURT, 1.0F, 1.0F); + ((WorldServer)this.world).spawnParticle(EnumParticleTypes.CRIT, this.posX, this.posY, this.posZ, 15, 0.2D, 0.2D, 0.2D, 0.0D); + this.setDead(); + } + + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySmallFireball.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySmallFireball.java new file mode 100644 index 0000000..455947c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySmallFireball.java @@ -0,0 +1,96 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.util.DamageSource; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class EntitySmallFireball extends EntityFireball +{ + public EntitySmallFireball(World worldIn) + { + super(worldIn); + this.setSize(0.3125F, 0.3125F); + } + + public EntitySmallFireball(World worldIn, EntityLivingBase shooter, double accelX, double accelY, double accelZ) + { + super(worldIn, shooter, accelX, accelY, accelZ); + this.setSize(0.3125F, 0.3125F); + } + + public EntitySmallFireball(World worldIn, double x, double y, double z, double accelX, double accelY, double accelZ) + { + super(worldIn, x, y, z, accelX, accelY, accelZ); + this.setSize(0.3125F, 0.3125F); + } + + public static void registerFixesSmallFireball(DataFixer fixer) + { + EntityFireball.registerFixesFireball(fixer, "SmallFireball"); + } + + /** + * Called when this EntityFireball hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (!this.world.isRemote) + { + if (result.entityHit != null) + { + if (!result.entityHit.isImmuneToFire()) + { + boolean flag = result.entityHit.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 5.0F); + + if (flag) + { + this.applyEnchantments(this.shootingEntity, result.entityHit); + result.entityHit.setFire(5); + } + } + } + else + { + boolean flag1 = true; + + if (this.shootingEntity != null && this.shootingEntity instanceof EntityLiving) + { + flag1 = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.shootingEntity); + } + + if (flag1) + { + BlockPos blockpos = result.getBlockPos().offset(result.sideHit); + + if (this.world.isAirBlock(blockpos)) + { + this.world.setBlockState(blockpos, Blocks.FIRE.getDefaultState()); + } + } + } + + this.setDead(); + } + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return false; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySnowball.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySnowball.java new file mode 100644 index 0000000..09d49cf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySnowball.java @@ -0,0 +1,73 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntitySnowball extends EntityThrowable +{ + public EntitySnowball(World worldIn) + { + super(worldIn); + } + + public EntitySnowball(World worldIn, EntityLivingBase throwerIn) + { + super(worldIn, throwerIn); + } + + public EntitySnowball(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public static void registerFixesSnowball(DataFixer fixer) + { + EntityThrowable.registerFixesThrowable(fixer, "Snowball"); + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 3) + { + for (int i = 0; i < 8; ++i) + { + this.world.spawnParticle(EnumParticleTypes.SNOWBALL, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } + } + } + + /** + * Called when this EntityThrowable hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (result.entityHit != null) + { + int i = 0; + + if (result.entityHit instanceof EntityBlaze) + { + i = 3; + } + + result.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), (float)i); + } + + if (!this.world.isRemote) + { + this.world.setEntityState(this, (byte)3); + this.setDead(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySpectralArrow.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySpectralArrow.java new file mode 100644 index 0000000..0c543ca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntitySpectralArrow.java @@ -0,0 +1,83 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; + +public class EntitySpectralArrow extends EntityArrow +{ + private int duration = 200; + + public EntitySpectralArrow(World worldIn) + { + super(worldIn); + } + + public EntitySpectralArrow(World worldIn, EntityLivingBase shooter) + { + super(worldIn, shooter); + } + + public EntitySpectralArrow(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote && !this.inGround) + { + this.world.spawnParticle(EnumParticleTypes.SPELL_INSTANT, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } + } + + protected ItemStack getArrowStack() + { + return new ItemStack(Items.SPECTRAL_ARROW); + } + + protected void arrowHit(EntityLivingBase living) + { + super.arrowHit(living); + PotionEffect potioneffect = new PotionEffect(MobEffects.GLOWING, this.duration, 0); + living.addPotionEffect(potioneffect); + } + + public static void registerFixesSpectralArrow(DataFixer fixer) + { + EntityArrow.registerFixesArrow(fixer, "SpectralArrow"); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("Duration")) + { + this.duration = compound.getInteger("Duration"); + } + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + compound.setInteger("Duration", this.duration); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityThrowable.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityThrowable.java new file mode 100644 index 0000000..3a21873 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityThrowable.java @@ -0,0 +1,419 @@ +package net.minecraft.entity.projectile; + +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class EntityThrowable extends Entity implements IProjectile +{ + private int xTile; + private int yTile; + private int zTile; + private Block inTile; + protected boolean inGround; + public int throwableShake; + /** The entity that threw this throwable item. */ + protected EntityLivingBase thrower; + private String throwerName; + private int ticksInGround; + private int ticksInAir; + public Entity ignoreEntity; + private int ignoreTime; + + public EntityThrowable(World worldIn) + { + super(worldIn); + this.xTile = -1; + this.yTile = -1; + this.zTile = -1; + this.setSize(0.25F, 0.25F); + } + + public EntityThrowable(World worldIn, double x, double y, double z) + { + this(worldIn); + this.setPosition(x, y, z); + } + + public EntityThrowable(World worldIn, EntityLivingBase throwerIn) + { + this(worldIn, throwerIn.posX, throwerIn.posY + (double)throwerIn.getEyeHeight() - 0.10000000149011612D, throwerIn.posZ); + this.thrower = throwerIn; + } + + protected void entityInit() + { + } + + /** + * Checks if the entity is in range to render. + */ + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + double d0 = this.getEntityBoundingBox().getAverageEdgeLength() * 4.0D; + + if (Double.isNaN(d0)) + { + d0 = 4.0D; + } + + d0 = d0 * 64.0D; + return distance < d0 * d0; + } + + /** + * Sets throwable heading based on an entity that's throwing it + */ + public void shoot(Entity entityThrower, float rotationPitchIn, float rotationYawIn, float pitchOffset, float velocity, float inaccuracy) + { + float f = -MathHelper.sin(rotationYawIn * 0.017453292F) * MathHelper.cos(rotationPitchIn * 0.017453292F); + float f1 = -MathHelper.sin((rotationPitchIn + pitchOffset) * 0.017453292F); + float f2 = MathHelper.cos(rotationYawIn * 0.017453292F) * MathHelper.cos(rotationPitchIn * 0.017453292F); + this.shoot((double)f, (double)f1, (double)f2, velocity, inaccuracy); + this.motionX += entityThrower.motionX; + this.motionZ += entityThrower.motionZ; + + if (!entityThrower.onGround) + { + this.motionY += entityThrower.motionY; + } + } + + /** + * Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction. + */ + public void shoot(double x, double y, double z, float velocity, float inaccuracy) + { + float f = MathHelper.sqrt(x * x + y * y + z * z); + x = x / (double)f; + y = y / (double)f; + z = z / (double)f; + x = x + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + y = y + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + z = z + this.rand.nextGaussian() * 0.007499999832361937D * (double)inaccuracy; + x = x * (double)velocity; + y = y * (double)velocity; + z = z * (double)velocity; + this.motionX = x; + this.motionY = y; + this.motionZ = z; + float f1 = MathHelper.sqrt(x * x + z * z); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f1) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + this.ticksInGround = 0; + } + + /** + * Updates the entity motion clientside, called by packets from the server + */ + @SideOnly(Side.CLIENT) + public void setVelocity(double x, double y, double z) + { + this.motionX = x; + this.motionY = y; + this.motionZ = z; + + if (this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) + { + float f = MathHelper.sqrt(x * x + z * z); + this.rotationYaw = (float)(MathHelper.atan2(x, z) * (180D / Math.PI)); + this.rotationPitch = (float)(MathHelper.atan2(y, (double)f) * (180D / Math.PI)); + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + super.onUpdate(); + + if (this.throwableShake > 0) + { + --this.throwableShake; + } + + if (this.inGround) + { + if (this.world.getBlockState(new BlockPos(this.xTile, this.yTile, this.zTile)).getBlock() == this.inTile) + { + ++this.ticksInGround; + + if (this.ticksInGround == 1200) + { + this.setDead(); + } + + return; + } + + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } + else + { + ++this.ticksInAir; + } + + Vec3d vec3d = new Vec3d(this.posX, this.posY, this.posZ); + Vec3d vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + RayTraceResult raytraceresult = this.world.rayTraceBlocks(vec3d, vec3d1); + vec3d = new Vec3d(this.posX, this.posY, this.posZ); + vec3d1 = new Vec3d(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + + if (raytraceresult != null) + { + vec3d1 = new Vec3d(raytraceresult.hitVec.x, raytraceresult.hitVec.y, raytraceresult.hitVec.z); + } + + Entity entity = null; + List list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox().expand(this.motionX, this.motionY, this.motionZ).grow(1.0D)); + double d0 = 0.0D; + boolean flag = false; + + for (int i = 0; i < list.size(); ++i) + { + Entity entity1 = list.get(i); + + if (entity1.canBeCollidedWith()) + { + if (entity1 == this.ignoreEntity) + { + flag = true; + } + else if (this.thrower != null && this.ticksExisted < 2 && this.ignoreEntity == null) + { + this.ignoreEntity = entity1; + flag = true; + } + else + { + flag = false; + AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D); + RayTraceResult raytraceresult1 = axisalignedbb.calculateIntercept(vec3d, vec3d1); + + if (raytraceresult1 != null) + { + double d1 = vec3d.squareDistanceTo(raytraceresult1.hitVec); + + if (d1 < d0 || d0 == 0.0D) + { + entity = entity1; + d0 = d1; + } + } + } + } + } + + if (this.ignoreEntity != null) + { + if (flag) + { + this.ignoreTime = 2; + } + else if (this.ignoreTime-- <= 0) + { + this.ignoreEntity = null; + } + } + + if (entity != null) + { + raytraceresult = new RayTraceResult(entity); + } + + if (raytraceresult != null) + { + if (raytraceresult.typeOfHit == RayTraceResult.Type.BLOCK && this.world.getBlockState(raytraceresult.getBlockPos()).getBlock() == Blocks.PORTAL) + { + this.setPortal(raytraceresult.getBlockPos()); + } + else if (!net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) + { + this.onImpact(raytraceresult); + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float f = MathHelper.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(MathHelper.atan2(this.motionX, this.motionZ) * (180D / Math.PI)); + + for (this.rotationPitch = (float)(MathHelper.atan2(this.motionY, (double)f) * (180D / Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) + { + ; + } + + while (this.rotationPitch - this.prevRotationPitch >= 180.0F) + { + this.prevRotationPitch += 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw < -180.0F) + { + this.prevRotationYaw -= 360.0F; + } + + while (this.rotationYaw - this.prevRotationYaw >= 180.0F) + { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float f1 = 0.99F; + float f2 = this.getGravityVelocity(); + + if (this.isInWater()) + { + for (int j = 0; j < 4; ++j) + { + float f3 = 0.25F; + this.world.spawnParticle(EnumParticleTypes.WATER_BUBBLE, this.posX - this.motionX * 0.25D, this.posY - this.motionY * 0.25D, this.posZ - this.motionZ * 0.25D, this.motionX, this.motionY, this.motionZ); + } + + f1 = 0.8F; + } + + this.motionX *= (double)f1; + this.motionY *= (double)f1; + this.motionZ *= (double)f1; + + if (!this.hasNoGravity()) + { + this.motionY -= (double)f2; + } + + this.setPosition(this.posX, this.posY, this.posZ); + } + + /** + * Gets the amount of gravity to apply to the thrown entity with each tick. + */ + protected float getGravityVelocity() + { + return 0.03F; + } + + /** + * Called when this EntityThrowable hits a block or entity. + */ + protected abstract void onImpact(RayTraceResult result); + + public static void registerFixesThrowable(DataFixer fixer, String name) + { + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + compound.setInteger("xTile", this.xTile); + compound.setInteger("yTile", this.yTile); + compound.setInteger("zTile", this.zTile); + ResourceLocation resourcelocation = Block.REGISTRY.getNameForObject(this.inTile); + compound.setString("inTile", resourcelocation == null ? "" : resourcelocation.toString()); + compound.setByte("shake", (byte)this.throwableShake); + compound.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + + if ((this.throwerName == null || this.throwerName.isEmpty()) && this.thrower instanceof EntityPlayer) + { + this.throwerName = this.thrower.getName(); + } + + compound.setString("ownerName", this.throwerName == null ? "" : this.throwerName); + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + this.xTile = compound.getInteger("xTile"); + this.yTile = compound.getInteger("yTile"); + this.zTile = compound.getInteger("zTile"); + + if (compound.hasKey("inTile", 8)) + { + this.inTile = Block.getBlockFromName(compound.getString("inTile")); + } + else + { + this.inTile = Block.getBlockById(compound.getByte("inTile") & 255); + } + + this.throwableShake = compound.getByte("shake") & 255; + this.inGround = compound.getByte("inGround") == 1; + this.thrower = null; + this.throwerName = compound.getString("ownerName"); + + if (this.throwerName != null && this.throwerName.isEmpty()) + { + this.throwerName = null; + } + + this.thrower = this.getThrower(); + } + + @Nullable + public EntityLivingBase getThrower() + { + if (this.thrower == null && this.throwerName != null && !this.throwerName.isEmpty()) + { + this.thrower = this.world.getPlayerEntityByName(this.throwerName); + + if (this.thrower == null && this.world instanceof WorldServer) + { + try + { + Entity entity = ((WorldServer)this.world).getEntityFromUuid(UUID.fromString(this.throwerName)); + + if (entity instanceof EntityLivingBase) + { + this.thrower = (EntityLivingBase)entity; + } + } + catch (Throwable var2) + { + this.thrower = null; + } + } + } + + return this.thrower; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityTippedArrow.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityTippedArrow.java new file mode 100644 index 0000000..fa2f3d4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityTippedArrow.java @@ -0,0 +1,299 @@ +package net.minecraft.entity.projectile; + +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityTippedArrow extends EntityArrow +{ + private static final DataParameter COLOR = EntityDataManager.createKey(EntityTippedArrow.class, DataSerializers.VARINT); + private PotionType potion = PotionTypes.EMPTY; + private final Set customPotionEffects = Sets.newHashSet(); + private boolean fixedColor; + + public EntityTippedArrow(World worldIn) + { + super(worldIn); + } + + public EntityTippedArrow(World worldIn, double x, double y, double z) + { + super(worldIn, x, y, z); + } + + public EntityTippedArrow(World worldIn, EntityLivingBase shooter) + { + super(worldIn, shooter); + } + + public void setPotionEffect(ItemStack stack) + { + if (stack.getItem() == Items.TIPPED_ARROW) + { + this.potion = PotionUtils.getPotionFromItem(stack); + Collection collection = PotionUtils.getFullEffectsFromItem(stack); + + if (!collection.isEmpty()) + { + for (PotionEffect potioneffect : collection) + { + this.customPotionEffects.add(new PotionEffect(potioneffect)); + } + } + + int i = getCustomColor(stack); + + if (i == -1) + { + this.refreshColor(); + } + else + { + this.setFixedColor(i); + } + } + else if (stack.getItem() == Items.ARROW) + { + this.potion = PotionTypes.EMPTY; + this.customPotionEffects.clear(); + this.dataManager.set(COLOR, Integer.valueOf(-1)); + } + } + + public static int getCustomColor(ItemStack p_191508_0_) + { + NBTTagCompound nbttagcompound = p_191508_0_.getTagCompound(); + return nbttagcompound != null && nbttagcompound.hasKey("CustomPotionColor", 99) ? nbttagcompound.getInteger("CustomPotionColor") : -1; + } + + private void refreshColor() + { + this.fixedColor = false; + this.dataManager.set(COLOR, Integer.valueOf(PotionUtils.getPotionColorFromEffectList(PotionUtils.mergeEffects(this.potion, this.customPotionEffects)))); + } + + public void addEffect(PotionEffect effect) + { + this.customPotionEffects.add(effect); + this.getDataManager().set(COLOR, Integer.valueOf(PotionUtils.getPotionColorFromEffectList(PotionUtils.mergeEffects(this.potion, this.customPotionEffects)))); + } + + protected void entityInit() + { + super.entityInit(); + this.dataManager.register(COLOR, Integer.valueOf(-1)); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + super.onUpdate(); + + if (this.world.isRemote) + { + if (this.inGround) + { + if (this.timeInGround % 5 == 0) + { + this.spawnPotionParticles(1); + } + } + else + { + this.spawnPotionParticles(2); + } + } + else if (this.inGround && this.timeInGround != 0 && !this.customPotionEffects.isEmpty() && this.timeInGround >= 600) + { + this.world.setEntityState(this, (byte)0); + this.potion = PotionTypes.EMPTY; + this.customPotionEffects.clear(); + this.dataManager.set(COLOR, Integer.valueOf(-1)); + } + } + + private void spawnPotionParticles(int particleCount) + { + int i = this.getColor(); + + if (i != -1 && particleCount > 0) + { + double d0 = (double)(i >> 16 & 255) / 255.0D; + double d1 = (double)(i >> 8 & 255) / 255.0D; + double d2 = (double)(i >> 0 & 255) / 255.0D; + + for (int j = 0; j < particleCount; ++j) + { + this.world.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, d0, d1, d2); + } + } + } + + public int getColor() + { + return ((Integer)this.dataManager.get(COLOR)).intValue(); + } + + private void setFixedColor(int p_191507_1_) + { + this.fixedColor = true; + this.dataManager.set(COLOR, Integer.valueOf(p_191507_1_)); + } + + public static void registerFixesTippedArrow(DataFixer fixer) + { + EntityArrow.registerFixesArrow(fixer, "TippedArrow"); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound compound) + { + super.writeEntityToNBT(compound); + + if (this.potion != PotionTypes.EMPTY && this.potion != null) + { + compound.setString("Potion", ((ResourceLocation)PotionType.REGISTRY.getNameForObject(this.potion)).toString()); + } + + if (this.fixedColor) + { + compound.setInteger("Color", this.getColor()); + } + + if (!this.customPotionEffects.isEmpty()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (PotionEffect potioneffect : this.customPotionEffects) + { + nbttaglist.appendTag(potioneffect.writeCustomPotionEffectToNBT(new NBTTagCompound())); + } + + compound.setTag("CustomPotionEffects", nbttaglist); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound compound) + { + super.readEntityFromNBT(compound); + + if (compound.hasKey("Potion", 8)) + { + this.potion = PotionUtils.getPotionTypeFromNBT(compound); + } + + for (PotionEffect potioneffect : PotionUtils.getFullEffectsFromTag(compound)) + { + this.addEffect(potioneffect); + } + + if (compound.hasKey("Color", 99)) + { + this.setFixedColor(compound.getInteger("Color")); + } + else + { + this.refreshColor(); + } + } + + protected void arrowHit(EntityLivingBase living) + { + super.arrowHit(living); + + for (PotionEffect potioneffect : this.potion.getEffects()) + { + living.addPotionEffect(new PotionEffect(potioneffect.getPotion(), Math.max(potioneffect.getDuration() / 8, 1), potioneffect.getAmplifier(), potioneffect.getIsAmbient(), potioneffect.doesShowParticles())); + } + + if (!this.customPotionEffects.isEmpty()) + { + for (PotionEffect potioneffect1 : this.customPotionEffects) + { + living.addPotionEffect(potioneffect1); + } + } + } + + protected ItemStack getArrowStack() + { + if (this.customPotionEffects.isEmpty() && this.potion == PotionTypes.EMPTY) + { + return new ItemStack(Items.ARROW); + } + else + { + ItemStack itemstack = new ItemStack(Items.TIPPED_ARROW); + PotionUtils.addPotionToItemStack(itemstack, this.potion); + PotionUtils.appendEffects(itemstack, this.customPotionEffects); + + if (this.fixedColor) + { + NBTTagCompound nbttagcompound = itemstack.getTagCompound(); + + if (nbttagcompound == null) + { + nbttagcompound = new NBTTagCompound(); + itemstack.setTagCompound(nbttagcompound); + } + + nbttagcompound.setInteger("CustomPotionColor", this.getColor()); + } + + return itemstack; + } + } + + /** + * Handler for {@link World#setEntityState} + */ + @SideOnly(Side.CLIENT) + public void handleStatusUpdate(byte id) + { + if (id == 0) + { + int i = this.getColor(); + + if (i != -1) + { + double d0 = (double)(i >> 16 & 255) / 255.0D; + double d1 = (double)(i >> 8 & 255) / 255.0D; + double d2 = (double)(i >> 0 & 255) / 255.0D; + + for (int j = 0; j < 20; ++j) + { + this.world.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, d0, d1, d2); + } + } + } + else + { + super.handleStatusUpdate(id); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityWitherSkull.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityWitherSkull.java new file mode 100644 index 0000000..28652c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/EntityWitherSkull.java @@ -0,0 +1,176 @@ +package net.minecraft.entity.projectile; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.init.MobEffects; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class EntityWitherSkull extends EntityFireball +{ + private static final DataParameter INVULNERABLE = EntityDataManager.createKey(EntityWitherSkull.class, DataSerializers.BOOLEAN); + + public EntityWitherSkull(World worldIn) + { + super(worldIn); + this.setSize(0.3125F, 0.3125F); + } + + public EntityWitherSkull(World worldIn, EntityLivingBase shooter, double accelX, double accelY, double accelZ) + { + super(worldIn, shooter, accelX, accelY, accelZ); + this.setSize(0.3125F, 0.3125F); + } + + public static void registerFixesWitherSkull(DataFixer fixer) + { + EntityFireball.registerFixesFireball(fixer, "WitherSkull"); + } + + /** + * Return the motion factor for this projectile. The factor is multiplied by the original motion. + */ + protected float getMotionFactor() + { + return this.isInvulnerable() ? 0.73F : super.getMotionFactor(); + } + + @SideOnly(Side.CLIENT) + public EntityWitherSkull(World worldIn, double x, double y, double z, double accelX, double accelY, double accelZ) + { + super(worldIn, x, y, z, accelX, accelY, accelZ); + this.setSize(0.3125F, 0.3125F); + } + + /** + * Returns true if the entity is on fire. Used by render to add the fire effect on rendering. + */ + public boolean isBurning() + { + return false; + } + + /** + * Explosion resistance of a block relative to this entity + */ + public float getExplosionResistance(Explosion explosionIn, World worldIn, BlockPos pos, IBlockState blockStateIn) + { + float f = super.getExplosionResistance(explosionIn, worldIn, pos, blockStateIn); + Block block = blockStateIn.getBlock(); + + if (this.isInvulnerable() && block.canEntityDestroy(blockStateIn, worldIn, pos, this) && net.minecraftforge.event.ForgeEventFactory.onEntityDestroyBlock(this.shootingEntity, pos, blockStateIn)) + { + f = Math.min(0.8F, f); + } + + return f; + } + + /** + * Called when this EntityFireball hits a block or entity. + */ + protected void onImpact(RayTraceResult result) + { + if (!this.world.isRemote) + { + if (result.entityHit != null) + { + if (this.shootingEntity != null) + { + if (result.entityHit.attackEntityFrom(DamageSource.causeMobDamage(this.shootingEntity), 8.0F)) + { + if (result.entityHit.isEntityAlive()) + { + this.applyEnchantments(this.shootingEntity, result.entityHit); + } + else + { + this.shootingEntity.heal(5.0F); + } + } + } + else + { + result.entityHit.attackEntityFrom(DamageSource.MAGIC, 5.0F); + } + + if (result.entityHit instanceof EntityLivingBase) + { + int i = 0; + + if (this.world.getDifficulty() == EnumDifficulty.NORMAL) + { + i = 10; + } + else if (this.world.getDifficulty() == EnumDifficulty.HARD) + { + i = 40; + } + + if (i > 0) + { + ((EntityLivingBase)result.entityHit).addPotionEffect(new PotionEffect(MobEffects.WITHER, 20 * i, 1)); + } + } + } + + this.world.newExplosion(this, this.posX, this.posY, this.posZ, 1.0F, false, net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this.shootingEntity)); + this.setDead(); + } + } + + /** + * Returns true if other Entities should be prevented from moving through this Entity. + */ + public boolean canBeCollidedWith() + { + return false; + } + + /** + * Called when the entity is attacked. + */ + public boolean attackEntityFrom(DamageSource source, float amount) + { + return false; + } + + protected void entityInit() + { + this.dataManager.register(INVULNERABLE, Boolean.valueOf(false)); + } + + /** + * Return whether this skull comes from an invulnerable (aura) wither boss. + */ + public boolean isInvulnerable() + { + return ((Boolean)this.dataManager.get(INVULNERABLE)).booleanValue(); + } + + /** + * Set whether this skull comes from an invulnerable (aura) wither boss. + */ + public void setInvulnerable(boolean invulnerable) + { + this.dataManager.set(INVULNERABLE, Boolean.valueOf(invulnerable)); + } + + protected boolean isFireballFiery() + { + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/ProjectileHelper.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/ProjectileHelper.java new file mode 100644 index 0000000..90fad4f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/ProjectileHelper.java @@ -0,0 +1,99 @@ +package net.minecraft.entity.projectile; + +import java.util.List; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public final class ProjectileHelper +{ + public static RayTraceResult forwardsRaycast(Entity projectile, boolean includeEntities, boolean ignoreExcludedEntity, Entity excludedEntity) + { + double d0 = projectile.posX; + double d1 = projectile.posY; + double d2 = projectile.posZ; + double d3 = projectile.motionX; + double d4 = projectile.motionY; + double d5 = projectile.motionZ; + World world = projectile.world; + Vec3d vec3d = new Vec3d(d0, d1, d2); + Vec3d vec3d1 = new Vec3d(d0 + d3, d1 + d4, d2 + d5); + RayTraceResult raytraceresult = world.rayTraceBlocks(vec3d, vec3d1, false, true, false); + + if (includeEntities) + { + if (raytraceresult != null) + { + vec3d1 = new Vec3d(raytraceresult.hitVec.x, raytraceresult.hitVec.y, raytraceresult.hitVec.z); + } + + Entity entity = null; + List list = world.getEntitiesWithinAABBExcludingEntity(projectile, projectile.getEntityBoundingBox().expand(d3, d4, d5).grow(1.0D)); + double d6 = 0.0D; + + for (int i = 0; i < list.size(); ++i) + { + Entity entity1 = list.get(i); + + if (entity1.canBeCollidedWith() && (ignoreExcludedEntity || !entity1.isEntityEqual(excludedEntity)) && !entity1.noClip) + { + AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D); + RayTraceResult raytraceresult1 = axisalignedbb.calculateIntercept(vec3d, vec3d1); + + if (raytraceresult1 != null) + { + double d7 = vec3d.squareDistanceTo(raytraceresult1.hitVec); + + if (d7 < d6 || d6 == 0.0D) + { + entity = entity1; + d6 = d7; + } + } + } + } + + if (entity != null) + { + raytraceresult = new RayTraceResult(entity); + } + } + + return raytraceresult; + } + + public static final void rotateTowardsMovement(Entity projectile, float rotationSpeed) + { + double d0 = projectile.motionX; + double d1 = projectile.motionY; + double d2 = projectile.motionZ; + float f = MathHelper.sqrt(d0 * d0 + d2 * d2); + projectile.rotationYaw = (float)(MathHelper.atan2(d2, d0) * (180D / Math.PI)) + 90.0F; + + for (projectile.rotationPitch = (float)(MathHelper.atan2((double)f, d1) * (180D / Math.PI)) - 90.0F; projectile.rotationPitch - projectile.prevRotationPitch < -180.0F; projectile.prevRotationPitch -= 360.0F) + { + ; + } + + while (projectile.rotationPitch - projectile.prevRotationPitch >= 180.0F) + { + projectile.prevRotationPitch += 360.0F; + } + + while (projectile.rotationYaw - projectile.prevRotationYaw < -180.0F) + { + projectile.prevRotationYaw -= 360.0F; + } + + while (projectile.rotationYaw - projectile.prevRotationYaw >= 180.0F) + { + projectile.prevRotationYaw += 360.0F; + } + + projectile.rotationPitch = projectile.prevRotationPitch + (projectile.rotationPitch - projectile.prevRotationPitch) * rotationSpeed; + projectile.rotationYaw = projectile.prevRotationYaw + (projectile.rotationYaw - projectile.prevRotationYaw) * rotationSpeed; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/package-info.java new file mode 100644 index 0000000..85dc184 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/entity/projectile/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.entity.projectile; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/Biomes.java b/build/tmp/recompileMc/sources/net/minecraft/init/Biomes.java new file mode 100644 index 0000000..1a14d96 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/Biomes.java @@ -0,0 +1,166 @@ +package net.minecraft.init; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.biome.Biome; + +public abstract class Biomes +{ + public static final Biome OCEAN; + public static final Biome DEFAULT; + public static final Biome PLAINS; + public static final Biome DESERT; + public static final Biome EXTREME_HILLS; + public static final Biome FOREST; + public static final Biome TAIGA; + public static final Biome SWAMPLAND; + public static final Biome RIVER; + public static final Biome HELL; + /** Is the biome used for sky world. */ + public static final Biome SKY; + public static final Biome FROZEN_OCEAN; + public static final Biome FROZEN_RIVER; + public static final Biome ICE_PLAINS; + public static final Biome ICE_MOUNTAINS; + public static final Biome MUSHROOM_ISLAND; + public static final Biome MUSHROOM_ISLAND_SHORE; + /** Beach biome. */ + public static final Biome BEACH; + /** Desert Hills biome. */ + public static final Biome DESERT_HILLS; + /** Forest Hills biome. */ + public static final Biome FOREST_HILLS; + /** Taiga Hills biome. */ + public static final Biome TAIGA_HILLS; + /** Extreme Hills Edge biome. */ + public static final Biome EXTREME_HILLS_EDGE; + /** Jungle biome identifier */ + public static final Biome JUNGLE; + public static final Biome JUNGLE_HILLS; + public static final Biome JUNGLE_EDGE; + public static final Biome DEEP_OCEAN; + public static final Biome STONE_BEACH; + public static final Biome COLD_BEACH; + public static final Biome BIRCH_FOREST; + public static final Biome BIRCH_FOREST_HILLS; + public static final Biome ROOFED_FOREST; + public static final Biome COLD_TAIGA; + public static final Biome COLD_TAIGA_HILLS; + public static final Biome REDWOOD_TAIGA; + public static final Biome REDWOOD_TAIGA_HILLS; + public static final Biome EXTREME_HILLS_WITH_TREES; + public static final Biome SAVANNA; + public static final Biome SAVANNA_PLATEAU; + public static final Biome MESA; + public static final Biome MESA_ROCK; + public static final Biome MESA_CLEAR_ROCK; + public static final Biome VOID; + public static final Biome MUTATED_PLAINS; + public static final Biome MUTATED_DESERT; + public static final Biome MUTATED_EXTREME_HILLS; + public static final Biome MUTATED_FOREST; + public static final Biome MUTATED_TAIGA; + public static final Biome MUTATED_SWAMPLAND; + public static final Biome MUTATED_ICE_FLATS; + public static final Biome MUTATED_JUNGLE; + public static final Biome MUTATED_JUNGLE_EDGE; + public static final Biome MUTATED_BIRCH_FOREST; + public static final Biome MUTATED_BIRCH_FOREST_HILLS; + public static final Biome MUTATED_ROOFED_FOREST; + public static final Biome MUTATED_TAIGA_COLD; + public static final Biome MUTATED_REDWOOD_TAIGA; + public static final Biome MUTATED_REDWOOD_TAIGA_HILLS; + public static final Biome MUTATED_EXTREME_HILLS_WITH_TREES; + public static final Biome MUTATED_SAVANNA; + public static final Biome MUTATED_SAVANNA_ROCK; + public static final Biome MUTATED_MESA; + public static final Biome MUTATED_MESA_ROCK; + public static final Biome MUTATED_MESA_CLEAR_ROCK; + + private static Biome getRegisteredBiome(String id) + { + Biome biome = Biome.REGISTRY.getObject(new ResourceLocation(id)); + + if (biome == null) + { + throw new IllegalStateException("Invalid Biome requested: " + id); + } + else + { + return biome; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed Biomes before Bootstrap!"); + } + else + { + OCEAN = getRegisteredBiome("ocean"); + DEFAULT = OCEAN; + PLAINS = getRegisteredBiome("plains"); + DESERT = getRegisteredBiome("desert"); + EXTREME_HILLS = getRegisteredBiome("extreme_hills"); + FOREST = getRegisteredBiome("forest"); + TAIGA = getRegisteredBiome("taiga"); + SWAMPLAND = getRegisteredBiome("swampland"); + RIVER = getRegisteredBiome("river"); + HELL = getRegisteredBiome("hell"); + SKY = getRegisteredBiome("sky"); + FROZEN_OCEAN = getRegisteredBiome("frozen_ocean"); + FROZEN_RIVER = getRegisteredBiome("frozen_river"); + ICE_PLAINS = getRegisteredBiome("ice_flats"); + ICE_MOUNTAINS = getRegisteredBiome("ice_mountains"); + MUSHROOM_ISLAND = getRegisteredBiome("mushroom_island"); + MUSHROOM_ISLAND_SHORE = getRegisteredBiome("mushroom_island_shore"); + BEACH = getRegisteredBiome("beaches"); + DESERT_HILLS = getRegisteredBiome("desert_hills"); + FOREST_HILLS = getRegisteredBiome("forest_hills"); + TAIGA_HILLS = getRegisteredBiome("taiga_hills"); + EXTREME_HILLS_EDGE = getRegisteredBiome("smaller_extreme_hills"); + JUNGLE = getRegisteredBiome("jungle"); + JUNGLE_HILLS = getRegisteredBiome("jungle_hills"); + JUNGLE_EDGE = getRegisteredBiome("jungle_edge"); + DEEP_OCEAN = getRegisteredBiome("deep_ocean"); + STONE_BEACH = getRegisteredBiome("stone_beach"); + COLD_BEACH = getRegisteredBiome("cold_beach"); + BIRCH_FOREST = getRegisteredBiome("birch_forest"); + BIRCH_FOREST_HILLS = getRegisteredBiome("birch_forest_hills"); + ROOFED_FOREST = getRegisteredBiome("roofed_forest"); + COLD_TAIGA = getRegisteredBiome("taiga_cold"); + COLD_TAIGA_HILLS = getRegisteredBiome("taiga_cold_hills"); + REDWOOD_TAIGA = getRegisteredBiome("redwood_taiga"); + REDWOOD_TAIGA_HILLS = getRegisteredBiome("redwood_taiga_hills"); + EXTREME_HILLS_WITH_TREES = getRegisteredBiome("extreme_hills_with_trees"); + SAVANNA = getRegisteredBiome("savanna"); + SAVANNA_PLATEAU = getRegisteredBiome("savanna_rock"); + MESA = getRegisteredBiome("mesa"); + MESA_ROCK = getRegisteredBiome("mesa_rock"); + MESA_CLEAR_ROCK = getRegisteredBiome("mesa_clear_rock"); + VOID = getRegisteredBiome("void"); + MUTATED_PLAINS = getRegisteredBiome("mutated_plains"); + MUTATED_DESERT = getRegisteredBiome("mutated_desert"); + MUTATED_EXTREME_HILLS = getRegisteredBiome("mutated_extreme_hills"); + MUTATED_FOREST = getRegisteredBiome("mutated_forest"); + MUTATED_TAIGA = getRegisteredBiome("mutated_taiga"); + MUTATED_SWAMPLAND = getRegisteredBiome("mutated_swampland"); + MUTATED_ICE_FLATS = getRegisteredBiome("mutated_ice_flats"); + MUTATED_JUNGLE = getRegisteredBiome("mutated_jungle"); + MUTATED_JUNGLE_EDGE = getRegisteredBiome("mutated_jungle_edge"); + MUTATED_BIRCH_FOREST = getRegisteredBiome("mutated_birch_forest"); + MUTATED_BIRCH_FOREST_HILLS = getRegisteredBiome("mutated_birch_forest_hills"); + MUTATED_ROOFED_FOREST = getRegisteredBiome("mutated_roofed_forest"); + MUTATED_TAIGA_COLD = getRegisteredBiome("mutated_taiga_cold"); + MUTATED_REDWOOD_TAIGA = getRegisteredBiome("mutated_redwood_taiga"); + MUTATED_REDWOOD_TAIGA_HILLS = getRegisteredBiome("mutated_redwood_taiga_hills"); + MUTATED_EXTREME_HILLS_WITH_TREES = getRegisteredBiome("mutated_extreme_hills_with_trees"); + MUTATED_SAVANNA = getRegisteredBiome("mutated_savanna"); + MUTATED_SAVANNA_ROCK = getRegisteredBiome("mutated_savanna_rock"); + MUTATED_MESA = getRegisteredBiome("mutated_mesa"); + MUTATED_MESA_ROCK = getRegisteredBiome("mutated_mesa_rock"); + MUTATED_MESA_CLEAR_ROCK = getRegisteredBiome("mutated_mesa_clear_rock"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/Blocks.java b/build/tmp/recompileMc/sources/net/minecraft/init/Blocks.java new file mode 100644 index 0000000..a312183 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/Blocks.java @@ -0,0 +1,583 @@ +package net.minecraft.init; + +import com.google.common.collect.Sets; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBeacon; +import net.minecraft.block.BlockBush; +import net.minecraft.block.BlockCactus; +import net.minecraft.block.BlockCauldron; +import net.minecraft.block.BlockChest; +import net.minecraft.block.BlockDaylightDetector; +import net.minecraft.block.BlockDeadBush; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockDynamicLiquid; +import net.minecraft.block.BlockFire; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockGrass; +import net.minecraft.block.BlockHopper; +import net.minecraft.block.BlockLeaves; +import net.minecraft.block.BlockMycelium; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockPistonExtension; +import net.minecraft.block.BlockPistonMoving; +import net.minecraft.block.BlockPortal; +import net.minecraft.block.BlockRedstoneComparator; +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.BlockRedstoneWire; +import net.minecraft.block.BlockReed; +import net.minecraft.block.BlockSand; +import net.minecraft.block.BlockSkull; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.BlockStainedGlassPane; +import net.minecraft.block.BlockStaticLiquid; +import net.minecraft.block.BlockTallGrass; +import net.minecraft.block.BlockTripWireHook; +import net.minecraft.util.ResourceLocation; + +public class Blocks +{ + private static final Set CACHE; + public static final Block AIR; + public static final Block STONE; + public static final BlockGrass GRASS; + public static final Block DIRT; + public static final Block COBBLESTONE; + public static final Block PLANKS; + public static final Block SAPLING; + public static final Block BEDROCK; + public static final BlockDynamicLiquid FLOWING_WATER; + public static final BlockStaticLiquid WATER; + public static final BlockDynamicLiquid FLOWING_LAVA; + public static final BlockStaticLiquid LAVA; + public static final BlockSand SAND; + public static final Block GRAVEL; + public static final Block GOLD_ORE; + public static final Block IRON_ORE; + public static final Block COAL_ORE; + public static final Block LOG; + public static final Block LOG2; + public static final BlockLeaves LEAVES; + public static final BlockLeaves LEAVES2; + public static final Block SPONGE; + public static final Block GLASS; + public static final Block LAPIS_ORE; + public static final Block LAPIS_BLOCK; + public static final Block DISPENSER; + public static final Block SANDSTONE; + public static final Block NOTEBLOCK; + public static final Block BED; + public static final Block GOLDEN_RAIL; + public static final Block DETECTOR_RAIL; + public static final BlockPistonBase STICKY_PISTON; + public static final Block WEB; + public static final BlockTallGrass TALLGRASS; + public static final BlockDeadBush DEADBUSH; + public static final BlockPistonBase PISTON; + public static final BlockPistonExtension PISTON_HEAD; + public static final Block WOOL; + public static final BlockPistonMoving PISTON_EXTENSION; + public static final BlockFlower YELLOW_FLOWER; + public static final BlockFlower RED_FLOWER; + public static final BlockBush BROWN_MUSHROOM; + public static final BlockBush RED_MUSHROOM; + public static final Block GOLD_BLOCK; + public static final Block IRON_BLOCK; + public static final BlockSlab DOUBLE_STONE_SLAB; + public static final BlockSlab STONE_SLAB; + public static final Block BRICK_BLOCK; + public static final Block TNT; + public static final Block BOOKSHELF; + public static final Block MOSSY_COBBLESTONE; + public static final Block OBSIDIAN; + public static final Block TORCH; + public static final BlockFire FIRE; + public static final Block MOB_SPAWNER; + public static final Block OAK_STAIRS; + public static final BlockChest CHEST; + public static final BlockRedstoneWire REDSTONE_WIRE; + public static final Block DIAMOND_ORE; + public static final Block DIAMOND_BLOCK; + public static final Block CRAFTING_TABLE; + public static final Block WHEAT; + public static final Block FARMLAND; + public static final Block FURNACE; + public static final Block LIT_FURNACE; + public static final Block STANDING_SIGN; + public static final BlockDoor OAK_DOOR; + public static final BlockDoor SPRUCE_DOOR; + public static final BlockDoor BIRCH_DOOR; + public static final BlockDoor JUNGLE_DOOR; + public static final BlockDoor ACACIA_DOOR; + public static final BlockDoor DARK_OAK_DOOR; + public static final Block LADDER; + public static final Block RAIL; + public static final Block STONE_STAIRS; + public static final Block WALL_SIGN; + public static final Block LEVER; + public static final Block STONE_PRESSURE_PLATE; + public static final BlockDoor IRON_DOOR; + public static final Block WOODEN_PRESSURE_PLATE; + public static final Block REDSTONE_ORE; + public static final Block LIT_REDSTONE_ORE; + public static final Block UNLIT_REDSTONE_TORCH; + public static final Block REDSTONE_TORCH; + public static final Block STONE_BUTTON; + public static final Block SNOW_LAYER; + public static final Block ICE; + public static final Block SNOW; + public static final BlockCactus CACTUS; + public static final Block CLAY; + public static final BlockReed REEDS; + public static final Block JUKEBOX; + public static final Block OAK_FENCE; + public static final Block SPRUCE_FENCE; + public static final Block BIRCH_FENCE; + public static final Block JUNGLE_FENCE; + public static final Block DARK_OAK_FENCE; + public static final Block ACACIA_FENCE; + public static final Block PUMPKIN; + public static final Block NETHERRACK; + public static final Block SOUL_SAND; + public static final Block GLOWSTONE; + public static final BlockPortal PORTAL; + public static final Block LIT_PUMPKIN; + public static final Block CAKE; + public static final BlockRedstoneRepeater UNPOWERED_REPEATER; + public static final BlockRedstoneRepeater POWERED_REPEATER; + public static final Block TRAPDOOR; + public static final Block MONSTER_EGG; + public static final Block STONEBRICK; + public static final Block BROWN_MUSHROOM_BLOCK; + public static final Block RED_MUSHROOM_BLOCK; + public static final Block IRON_BARS; + public static final Block GLASS_PANE; + public static final Block MELON_BLOCK; + public static final Block PUMPKIN_STEM; + public static final Block MELON_STEM; + public static final Block VINE; + public static final Block OAK_FENCE_GATE; + public static final Block SPRUCE_FENCE_GATE; + public static final Block BIRCH_FENCE_GATE; + public static final Block JUNGLE_FENCE_GATE; + public static final Block DARK_OAK_FENCE_GATE; + public static final Block ACACIA_FENCE_GATE; + public static final Block BRICK_STAIRS; + public static final Block STONE_BRICK_STAIRS; + public static final BlockMycelium MYCELIUM; + public static final Block WATERLILY; + public static final Block NETHER_BRICK; + public static final Block NETHER_BRICK_FENCE; + public static final Block NETHER_BRICK_STAIRS; + public static final Block NETHER_WART; + public static final Block ENCHANTING_TABLE; + public static final Block BREWING_STAND; + public static final BlockCauldron CAULDRON; + public static final Block END_PORTAL; + public static final Block END_PORTAL_FRAME; + public static final Block END_STONE; + public static final Block DRAGON_EGG; + public static final Block REDSTONE_LAMP; + public static final Block LIT_REDSTONE_LAMP; + public static final BlockSlab DOUBLE_WOODEN_SLAB; + public static final BlockSlab WOODEN_SLAB; + public static final Block COCOA; + public static final Block SANDSTONE_STAIRS; + public static final Block EMERALD_ORE; + public static final Block ENDER_CHEST; + public static final BlockTripWireHook TRIPWIRE_HOOK; + public static final Block TRIPWIRE; + public static final Block EMERALD_BLOCK; + public static final Block SPRUCE_STAIRS; + public static final Block BIRCH_STAIRS; + public static final Block JUNGLE_STAIRS; + public static final Block COMMAND_BLOCK; + public static final BlockBeacon BEACON; + public static final Block COBBLESTONE_WALL; + public static final Block FLOWER_POT; + public static final Block CARROTS; + public static final Block POTATOES; + public static final Block WOODEN_BUTTON; + public static final BlockSkull SKULL; + public static final Block ANVIL; + public static final Block TRAPPED_CHEST; + public static final Block LIGHT_WEIGHTED_PRESSURE_PLATE; + public static final Block HEAVY_WEIGHTED_PRESSURE_PLATE; + public static final BlockRedstoneComparator UNPOWERED_COMPARATOR; + public static final BlockRedstoneComparator POWERED_COMPARATOR; + public static final BlockDaylightDetector DAYLIGHT_DETECTOR; + public static final BlockDaylightDetector DAYLIGHT_DETECTOR_INVERTED; + public static final Block REDSTONE_BLOCK; + public static final Block QUARTZ_ORE; + public static final BlockHopper HOPPER; + public static final Block QUARTZ_BLOCK; + public static final Block QUARTZ_STAIRS; + public static final Block ACTIVATOR_RAIL; + public static final Block DROPPER; + public static final Block STAINED_HARDENED_CLAY; + public static final Block BARRIER; + public static final Block IRON_TRAPDOOR; + public static final Block HAY_BLOCK; + public static final Block CARPET; + public static final Block HARDENED_CLAY; + public static final Block COAL_BLOCK; + public static final Block PACKED_ICE; + public static final Block ACACIA_STAIRS; + public static final Block DARK_OAK_STAIRS; + public static final Block SLIME_BLOCK; + public static final BlockDoublePlant DOUBLE_PLANT; + public static final BlockStainedGlass STAINED_GLASS; + public static final BlockStainedGlassPane STAINED_GLASS_PANE; + public static final Block PRISMARINE; + public static final Block SEA_LANTERN; + public static final Block STANDING_BANNER; + public static final Block WALL_BANNER; + public static final Block RED_SANDSTONE; + public static final Block RED_SANDSTONE_STAIRS; + public static final BlockSlab DOUBLE_STONE_SLAB2; + public static final BlockSlab STONE_SLAB2; + public static final Block END_ROD; + public static final Block CHORUS_PLANT; + public static final Block CHORUS_FLOWER; + public static final Block PURPUR_BLOCK; + public static final Block PURPUR_PILLAR; + public static final Block PURPUR_STAIRS; + public static final BlockSlab PURPUR_DOUBLE_SLAB; + public static final BlockSlab PURPUR_SLAB; + public static final Block END_BRICKS; + public static final Block BEETROOTS; + public static final Block GRASS_PATH; + public static final Block END_GATEWAY; + public static final Block REPEATING_COMMAND_BLOCK; + public static final Block CHAIN_COMMAND_BLOCK; + public static final Block FROSTED_ICE; + public static final Block MAGMA; + public static final Block NETHER_WART_BLOCK; + public static final Block RED_NETHER_BRICK; + public static final Block BONE_BLOCK; + public static final Block STRUCTURE_VOID; + public static final Block OBSERVER; + public static final Block WHITE_SHULKER_BOX; + public static final Block ORANGE_SHULKER_BOX; + public static final Block MAGENTA_SHULKER_BOX; + public static final Block LIGHT_BLUE_SHULKER_BOX; + public static final Block YELLOW_SHULKER_BOX; + public static final Block LIME_SHULKER_BOX; + public static final Block PINK_SHULKER_BOX; + public static final Block GRAY_SHULKER_BOX; + public static final Block SILVER_SHULKER_BOX; + public static final Block CYAN_SHULKER_BOX; + public static final Block PURPLE_SHULKER_BOX; + public static final Block BLUE_SHULKER_BOX; + public static final Block BROWN_SHULKER_BOX; + public static final Block GREEN_SHULKER_BOX; + public static final Block RED_SHULKER_BOX; + public static final Block BLACK_SHULKER_BOX; + public static final Block WHITE_GLAZED_TERRACOTTA; + public static final Block ORANGE_GLAZED_TERRACOTTA; + public static final Block MAGENTA_GLAZED_TERRACOTTA; + public static final Block LIGHT_BLUE_GLAZED_TERRACOTTA; + public static final Block YELLOW_GLAZED_TERRACOTTA; + public static final Block LIME_GLAZED_TERRACOTTA; + public static final Block PINK_GLAZED_TERRACOTTA; + public static final Block GRAY_GLAZED_TERRACOTTA; + public static final Block SILVER_GLAZED_TERRACOTTA; + public static final Block CYAN_GLAZED_TERRACOTTA; + public static final Block PURPLE_GLAZED_TERRACOTTA; + public static final Block BLUE_GLAZED_TERRACOTTA; + public static final Block BROWN_GLAZED_TERRACOTTA; + public static final Block GREEN_GLAZED_TERRACOTTA; + public static final Block RED_GLAZED_TERRACOTTA; + public static final Block BLACK_GLAZED_TERRACOTTA; + public static final Block CONCRETE; + public static final Block CONCRETE_POWDER; + public static final Block STRUCTURE_BLOCK; + + /** + * Returns the Block in the blockRegistry with the specified name. + */ + @Nullable + private static Block getRegisteredBlock(String blockName) + { + Block block = Block.REGISTRY.getObject(new ResourceLocation(blockName)); + + if (!CACHE.add(block)) + { + throw new IllegalStateException("Invalid Block requested: " + blockName); + } + else + { + return block; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed Blocks before Bootstrap!"); + } + else + { + CACHE = Sets.newHashSet(); + AIR = getRegisteredBlock("air"); + STONE = getRegisteredBlock("stone"); + GRASS = (BlockGrass)getRegisteredBlock("grass"); + DIRT = getRegisteredBlock("dirt"); + COBBLESTONE = getRegisteredBlock("cobblestone"); + PLANKS = getRegisteredBlock("planks"); + SAPLING = getRegisteredBlock("sapling"); + BEDROCK = getRegisteredBlock("bedrock"); + FLOWING_WATER = (BlockDynamicLiquid)getRegisteredBlock("flowing_water"); + WATER = (BlockStaticLiquid)getRegisteredBlock("water"); + FLOWING_LAVA = (BlockDynamicLiquid)getRegisteredBlock("flowing_lava"); + LAVA = (BlockStaticLiquid)getRegisteredBlock("lava"); + SAND = (BlockSand)getRegisteredBlock("sand"); + GRAVEL = getRegisteredBlock("gravel"); + GOLD_ORE = getRegisteredBlock("gold_ore"); + IRON_ORE = getRegisteredBlock("iron_ore"); + COAL_ORE = getRegisteredBlock("coal_ore"); + LOG = getRegisteredBlock("log"); + LOG2 = getRegisteredBlock("log2"); + LEAVES = (BlockLeaves)getRegisteredBlock("leaves"); + LEAVES2 = (BlockLeaves)getRegisteredBlock("leaves2"); + SPONGE = getRegisteredBlock("sponge"); + GLASS = getRegisteredBlock("glass"); + LAPIS_ORE = getRegisteredBlock("lapis_ore"); + LAPIS_BLOCK = getRegisteredBlock("lapis_block"); + DISPENSER = getRegisteredBlock("dispenser"); + SANDSTONE = getRegisteredBlock("sandstone"); + NOTEBLOCK = getRegisteredBlock("noteblock"); + BED = getRegisteredBlock("bed"); + GOLDEN_RAIL = getRegisteredBlock("golden_rail"); + DETECTOR_RAIL = getRegisteredBlock("detector_rail"); + STICKY_PISTON = (BlockPistonBase)getRegisteredBlock("sticky_piston"); + WEB = getRegisteredBlock("web"); + TALLGRASS = (BlockTallGrass)getRegisteredBlock("tallgrass"); + DEADBUSH = (BlockDeadBush)getRegisteredBlock("deadbush"); + PISTON = (BlockPistonBase)getRegisteredBlock("piston"); + PISTON_HEAD = (BlockPistonExtension)getRegisteredBlock("piston_head"); + WOOL = getRegisteredBlock("wool"); + PISTON_EXTENSION = (BlockPistonMoving)getRegisteredBlock("piston_extension"); + YELLOW_FLOWER = (BlockFlower)getRegisteredBlock("yellow_flower"); + RED_FLOWER = (BlockFlower)getRegisteredBlock("red_flower"); + BROWN_MUSHROOM = (BlockBush)getRegisteredBlock("brown_mushroom"); + RED_MUSHROOM = (BlockBush)getRegisteredBlock("red_mushroom"); + GOLD_BLOCK = getRegisteredBlock("gold_block"); + IRON_BLOCK = getRegisteredBlock("iron_block"); + DOUBLE_STONE_SLAB = (BlockSlab)getRegisteredBlock("double_stone_slab"); + STONE_SLAB = (BlockSlab)getRegisteredBlock("stone_slab"); + BRICK_BLOCK = getRegisteredBlock("brick_block"); + TNT = getRegisteredBlock("tnt"); + BOOKSHELF = getRegisteredBlock("bookshelf"); + MOSSY_COBBLESTONE = getRegisteredBlock("mossy_cobblestone"); + OBSIDIAN = getRegisteredBlock("obsidian"); + TORCH = getRegisteredBlock("torch"); + FIRE = (BlockFire)getRegisteredBlock("fire"); + MOB_SPAWNER = getRegisteredBlock("mob_spawner"); + OAK_STAIRS = getRegisteredBlock("oak_stairs"); + CHEST = (BlockChest)getRegisteredBlock("chest"); + REDSTONE_WIRE = (BlockRedstoneWire)getRegisteredBlock("redstone_wire"); + DIAMOND_ORE = getRegisteredBlock("diamond_ore"); + DIAMOND_BLOCK = getRegisteredBlock("diamond_block"); + CRAFTING_TABLE = getRegisteredBlock("crafting_table"); + WHEAT = getRegisteredBlock("wheat"); + FARMLAND = getRegisteredBlock("farmland"); + FURNACE = getRegisteredBlock("furnace"); + LIT_FURNACE = getRegisteredBlock("lit_furnace"); + STANDING_SIGN = getRegisteredBlock("standing_sign"); + OAK_DOOR = (BlockDoor)getRegisteredBlock("wooden_door"); + SPRUCE_DOOR = (BlockDoor)getRegisteredBlock("spruce_door"); + BIRCH_DOOR = (BlockDoor)getRegisteredBlock("birch_door"); + JUNGLE_DOOR = (BlockDoor)getRegisteredBlock("jungle_door"); + ACACIA_DOOR = (BlockDoor)getRegisteredBlock("acacia_door"); + DARK_OAK_DOOR = (BlockDoor)getRegisteredBlock("dark_oak_door"); + LADDER = getRegisteredBlock("ladder"); + RAIL = getRegisteredBlock("rail"); + STONE_STAIRS = getRegisteredBlock("stone_stairs"); + WALL_SIGN = getRegisteredBlock("wall_sign"); + LEVER = getRegisteredBlock("lever"); + STONE_PRESSURE_PLATE = getRegisteredBlock("stone_pressure_plate"); + IRON_DOOR = (BlockDoor)getRegisteredBlock("iron_door"); + WOODEN_PRESSURE_PLATE = getRegisteredBlock("wooden_pressure_plate"); + REDSTONE_ORE = getRegisteredBlock("redstone_ore"); + LIT_REDSTONE_ORE = getRegisteredBlock("lit_redstone_ore"); + UNLIT_REDSTONE_TORCH = getRegisteredBlock("unlit_redstone_torch"); + REDSTONE_TORCH = getRegisteredBlock("redstone_torch"); + STONE_BUTTON = getRegisteredBlock("stone_button"); + SNOW_LAYER = getRegisteredBlock("snow_layer"); + ICE = getRegisteredBlock("ice"); + SNOW = getRegisteredBlock("snow"); + CACTUS = (BlockCactus)getRegisteredBlock("cactus"); + CLAY = getRegisteredBlock("clay"); + REEDS = (BlockReed)getRegisteredBlock("reeds"); + JUKEBOX = getRegisteredBlock("jukebox"); + OAK_FENCE = getRegisteredBlock("fence"); + SPRUCE_FENCE = getRegisteredBlock("spruce_fence"); + BIRCH_FENCE = getRegisteredBlock("birch_fence"); + JUNGLE_FENCE = getRegisteredBlock("jungle_fence"); + DARK_OAK_FENCE = getRegisteredBlock("dark_oak_fence"); + ACACIA_FENCE = getRegisteredBlock("acacia_fence"); + PUMPKIN = getRegisteredBlock("pumpkin"); + NETHERRACK = getRegisteredBlock("netherrack"); + SOUL_SAND = getRegisteredBlock("soul_sand"); + GLOWSTONE = getRegisteredBlock("glowstone"); + PORTAL = (BlockPortal)getRegisteredBlock("portal"); + LIT_PUMPKIN = getRegisteredBlock("lit_pumpkin"); + CAKE = getRegisteredBlock("cake"); + UNPOWERED_REPEATER = (BlockRedstoneRepeater)getRegisteredBlock("unpowered_repeater"); + POWERED_REPEATER = (BlockRedstoneRepeater)getRegisteredBlock("powered_repeater"); + TRAPDOOR = getRegisteredBlock("trapdoor"); + MONSTER_EGG = getRegisteredBlock("monster_egg"); + STONEBRICK = getRegisteredBlock("stonebrick"); + BROWN_MUSHROOM_BLOCK = getRegisteredBlock("brown_mushroom_block"); + RED_MUSHROOM_BLOCK = getRegisteredBlock("red_mushroom_block"); + IRON_BARS = getRegisteredBlock("iron_bars"); + GLASS_PANE = getRegisteredBlock("glass_pane"); + MELON_BLOCK = getRegisteredBlock("melon_block"); + PUMPKIN_STEM = getRegisteredBlock("pumpkin_stem"); + MELON_STEM = getRegisteredBlock("melon_stem"); + VINE = getRegisteredBlock("vine"); + OAK_FENCE_GATE = getRegisteredBlock("fence_gate"); + SPRUCE_FENCE_GATE = getRegisteredBlock("spruce_fence_gate"); + BIRCH_FENCE_GATE = getRegisteredBlock("birch_fence_gate"); + JUNGLE_FENCE_GATE = getRegisteredBlock("jungle_fence_gate"); + DARK_OAK_FENCE_GATE = getRegisteredBlock("dark_oak_fence_gate"); + ACACIA_FENCE_GATE = getRegisteredBlock("acacia_fence_gate"); + BRICK_STAIRS = getRegisteredBlock("brick_stairs"); + STONE_BRICK_STAIRS = getRegisteredBlock("stone_brick_stairs"); + MYCELIUM = (BlockMycelium)getRegisteredBlock("mycelium"); + WATERLILY = getRegisteredBlock("waterlily"); + NETHER_BRICK = getRegisteredBlock("nether_brick"); + NETHER_BRICK_FENCE = getRegisteredBlock("nether_brick_fence"); + NETHER_BRICK_STAIRS = getRegisteredBlock("nether_brick_stairs"); + NETHER_WART = getRegisteredBlock("nether_wart"); + ENCHANTING_TABLE = getRegisteredBlock("enchanting_table"); + BREWING_STAND = getRegisteredBlock("brewing_stand"); + CAULDRON = (BlockCauldron)getRegisteredBlock("cauldron"); + END_PORTAL = getRegisteredBlock("end_portal"); + END_PORTAL_FRAME = getRegisteredBlock("end_portal_frame"); + END_STONE = getRegisteredBlock("end_stone"); + DRAGON_EGG = getRegisteredBlock("dragon_egg"); + REDSTONE_LAMP = getRegisteredBlock("redstone_lamp"); + LIT_REDSTONE_LAMP = getRegisteredBlock("lit_redstone_lamp"); + DOUBLE_WOODEN_SLAB = (BlockSlab)getRegisteredBlock("double_wooden_slab"); + WOODEN_SLAB = (BlockSlab)getRegisteredBlock("wooden_slab"); + COCOA = getRegisteredBlock("cocoa"); + SANDSTONE_STAIRS = getRegisteredBlock("sandstone_stairs"); + EMERALD_ORE = getRegisteredBlock("emerald_ore"); + ENDER_CHEST = getRegisteredBlock("ender_chest"); + TRIPWIRE_HOOK = (BlockTripWireHook)getRegisteredBlock("tripwire_hook"); + TRIPWIRE = getRegisteredBlock("tripwire"); + EMERALD_BLOCK = getRegisteredBlock("emerald_block"); + SPRUCE_STAIRS = getRegisteredBlock("spruce_stairs"); + BIRCH_STAIRS = getRegisteredBlock("birch_stairs"); + JUNGLE_STAIRS = getRegisteredBlock("jungle_stairs"); + COMMAND_BLOCK = getRegisteredBlock("command_block"); + BEACON = (BlockBeacon)getRegisteredBlock("beacon"); + COBBLESTONE_WALL = getRegisteredBlock("cobblestone_wall"); + FLOWER_POT = getRegisteredBlock("flower_pot"); + CARROTS = getRegisteredBlock("carrots"); + POTATOES = getRegisteredBlock("potatoes"); + WOODEN_BUTTON = getRegisteredBlock("wooden_button"); + SKULL = (BlockSkull)getRegisteredBlock("skull"); + ANVIL = getRegisteredBlock("anvil"); + TRAPPED_CHEST = getRegisteredBlock("trapped_chest"); + LIGHT_WEIGHTED_PRESSURE_PLATE = getRegisteredBlock("light_weighted_pressure_plate"); + HEAVY_WEIGHTED_PRESSURE_PLATE = getRegisteredBlock("heavy_weighted_pressure_plate"); + UNPOWERED_COMPARATOR = (BlockRedstoneComparator)getRegisteredBlock("unpowered_comparator"); + POWERED_COMPARATOR = (BlockRedstoneComparator)getRegisteredBlock("powered_comparator"); + DAYLIGHT_DETECTOR = (BlockDaylightDetector)getRegisteredBlock("daylight_detector"); + DAYLIGHT_DETECTOR_INVERTED = (BlockDaylightDetector)getRegisteredBlock("daylight_detector_inverted"); + REDSTONE_BLOCK = getRegisteredBlock("redstone_block"); + QUARTZ_ORE = getRegisteredBlock("quartz_ore"); + HOPPER = (BlockHopper)getRegisteredBlock("hopper"); + QUARTZ_BLOCK = getRegisteredBlock("quartz_block"); + QUARTZ_STAIRS = getRegisteredBlock("quartz_stairs"); + ACTIVATOR_RAIL = getRegisteredBlock("activator_rail"); + DROPPER = getRegisteredBlock("dropper"); + STAINED_HARDENED_CLAY = getRegisteredBlock("stained_hardened_clay"); + BARRIER = getRegisteredBlock("barrier"); + IRON_TRAPDOOR = getRegisteredBlock("iron_trapdoor"); + HAY_BLOCK = getRegisteredBlock("hay_block"); + CARPET = getRegisteredBlock("carpet"); + HARDENED_CLAY = getRegisteredBlock("hardened_clay"); + COAL_BLOCK = getRegisteredBlock("coal_block"); + PACKED_ICE = getRegisteredBlock("packed_ice"); + ACACIA_STAIRS = getRegisteredBlock("acacia_stairs"); + DARK_OAK_STAIRS = getRegisteredBlock("dark_oak_stairs"); + SLIME_BLOCK = getRegisteredBlock("slime"); + DOUBLE_PLANT = (BlockDoublePlant)getRegisteredBlock("double_plant"); + STAINED_GLASS = (BlockStainedGlass)getRegisteredBlock("stained_glass"); + STAINED_GLASS_PANE = (BlockStainedGlassPane)getRegisteredBlock("stained_glass_pane"); + PRISMARINE = getRegisteredBlock("prismarine"); + SEA_LANTERN = getRegisteredBlock("sea_lantern"); + STANDING_BANNER = getRegisteredBlock("standing_banner"); + WALL_BANNER = getRegisteredBlock("wall_banner"); + RED_SANDSTONE = getRegisteredBlock("red_sandstone"); + RED_SANDSTONE_STAIRS = getRegisteredBlock("red_sandstone_stairs"); + DOUBLE_STONE_SLAB2 = (BlockSlab)getRegisteredBlock("double_stone_slab2"); + STONE_SLAB2 = (BlockSlab)getRegisteredBlock("stone_slab2"); + END_ROD = getRegisteredBlock("end_rod"); + CHORUS_PLANT = getRegisteredBlock("chorus_plant"); + CHORUS_FLOWER = getRegisteredBlock("chorus_flower"); + PURPUR_BLOCK = getRegisteredBlock("purpur_block"); + PURPUR_PILLAR = getRegisteredBlock("purpur_pillar"); + PURPUR_STAIRS = getRegisteredBlock("purpur_stairs"); + PURPUR_DOUBLE_SLAB = (BlockSlab)getRegisteredBlock("purpur_double_slab"); + PURPUR_SLAB = (BlockSlab)getRegisteredBlock("purpur_slab"); + END_BRICKS = getRegisteredBlock("end_bricks"); + BEETROOTS = getRegisteredBlock("beetroots"); + GRASS_PATH = getRegisteredBlock("grass_path"); + END_GATEWAY = getRegisteredBlock("end_gateway"); + REPEATING_COMMAND_BLOCK = getRegisteredBlock("repeating_command_block"); + CHAIN_COMMAND_BLOCK = getRegisteredBlock("chain_command_block"); + FROSTED_ICE = getRegisteredBlock("frosted_ice"); + MAGMA = getRegisteredBlock("magma"); + NETHER_WART_BLOCK = getRegisteredBlock("nether_wart_block"); + RED_NETHER_BRICK = getRegisteredBlock("red_nether_brick"); + BONE_BLOCK = getRegisteredBlock("bone_block"); + STRUCTURE_VOID = getRegisteredBlock("structure_void"); + OBSERVER = getRegisteredBlock("observer"); + WHITE_SHULKER_BOX = getRegisteredBlock("white_shulker_box"); + ORANGE_SHULKER_BOX = getRegisteredBlock("orange_shulker_box"); + MAGENTA_SHULKER_BOX = getRegisteredBlock("magenta_shulker_box"); + LIGHT_BLUE_SHULKER_BOX = getRegisteredBlock("light_blue_shulker_box"); + YELLOW_SHULKER_BOX = getRegisteredBlock("yellow_shulker_box"); + LIME_SHULKER_BOX = getRegisteredBlock("lime_shulker_box"); + PINK_SHULKER_BOX = getRegisteredBlock("pink_shulker_box"); + GRAY_SHULKER_BOX = getRegisteredBlock("gray_shulker_box"); + SILVER_SHULKER_BOX = getRegisteredBlock("silver_shulker_box"); + CYAN_SHULKER_BOX = getRegisteredBlock("cyan_shulker_box"); + PURPLE_SHULKER_BOX = getRegisteredBlock("purple_shulker_box"); + BLUE_SHULKER_BOX = getRegisteredBlock("blue_shulker_box"); + BROWN_SHULKER_BOX = getRegisteredBlock("brown_shulker_box"); + GREEN_SHULKER_BOX = getRegisteredBlock("green_shulker_box"); + RED_SHULKER_BOX = getRegisteredBlock("red_shulker_box"); + BLACK_SHULKER_BOX = getRegisteredBlock("black_shulker_box"); + WHITE_GLAZED_TERRACOTTA = getRegisteredBlock("white_glazed_terracotta"); + ORANGE_GLAZED_TERRACOTTA = getRegisteredBlock("orange_glazed_terracotta"); + MAGENTA_GLAZED_TERRACOTTA = getRegisteredBlock("magenta_glazed_terracotta"); + LIGHT_BLUE_GLAZED_TERRACOTTA = getRegisteredBlock("light_blue_glazed_terracotta"); + YELLOW_GLAZED_TERRACOTTA = getRegisteredBlock("yellow_glazed_terracotta"); + LIME_GLAZED_TERRACOTTA = getRegisteredBlock("lime_glazed_terracotta"); + PINK_GLAZED_TERRACOTTA = getRegisteredBlock("pink_glazed_terracotta"); + GRAY_GLAZED_TERRACOTTA = getRegisteredBlock("gray_glazed_terracotta"); + SILVER_GLAZED_TERRACOTTA = getRegisteredBlock("silver_glazed_terracotta"); + CYAN_GLAZED_TERRACOTTA = getRegisteredBlock("cyan_glazed_terracotta"); + PURPLE_GLAZED_TERRACOTTA = getRegisteredBlock("purple_glazed_terracotta"); + BLUE_GLAZED_TERRACOTTA = getRegisteredBlock("blue_glazed_terracotta"); + BROWN_GLAZED_TERRACOTTA = getRegisteredBlock("brown_glazed_terracotta"); + GREEN_GLAZED_TERRACOTTA = getRegisteredBlock("green_glazed_terracotta"); + RED_GLAZED_TERRACOTTA = getRegisteredBlock("red_glazed_terracotta"); + BLACK_GLAZED_TERRACOTTA = getRegisteredBlock("black_glazed_terracotta"); + CONCRETE = getRegisteredBlock("concrete"); + CONCRETE_POWDER = getRegisteredBlock("concrete_powder"); + STRUCTURE_BLOCK = getRegisteredBlock("structure_block"); + CACHE.clear(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/Bootstrap.java b/build/tmp/recompileMc/sources/net/minecraft/init/Bootstrap.java new file mode 100644 index 0000000..e87779b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/Bootstrap.java @@ -0,0 +1,741 @@ +package net.minecraft.init; + +import com.mojang.authlib.GameProfile; +import java.io.File; +import java.io.PrintStream; +import java.util.Random; +import java.util.UUID; +import net.minecraft.advancements.AdvancementManager; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.BlockFire; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.BlockPumpkin; +import net.minecraft.block.BlockShulkerBox; +import net.minecraft.block.BlockSkull; +import net.minecraft.block.BlockTNT; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.BehaviorProjectileDispense; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemBucket; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemMonsterPlacer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionHelper; +import net.minecraft.potion.PotionType; +import net.minecraft.server.DebugLoggingPrintStream; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.LoggingPrintStream; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.storage.loot.LootTableList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Bootstrap +{ + public static final PrintStream SYSOUT = System.out; + /** Whether the blocks, items, etc have already been registered */ + private static boolean alreadyRegistered; + public static boolean hasErrored; + private static final Logger LOGGER = LogManager.getLogger(); + + /** + * Is Bootstrap registration already done? + */ + public static boolean isRegistered() + { + return alreadyRegistered; + } + + static void registerDispenserBehaviors() + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.ARROW, new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(worldIn, position.getX(), position.getY(), position.getZ()); + entitytippedarrow.pickupStatus = EntityArrow.PickupStatus.ALLOWED; + return entitytippedarrow; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.TIPPED_ARROW, new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(worldIn, position.getX(), position.getY(), position.getZ()); + entitytippedarrow.setPotionEffect(stackIn); + entitytippedarrow.pickupStatus = EntityArrow.PickupStatus.ALLOWED; + return entitytippedarrow; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.SPECTRAL_ARROW, new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + EntityArrow entityarrow = new EntitySpectralArrow(worldIn, position.getX(), position.getY(), position.getZ()); + entityarrow.pickupStatus = EntityArrow.PickupStatus.ALLOWED; + return entityarrow; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.EGG, new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + return new EntityEgg(worldIn, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.SNOWBALL, new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + return new EntitySnowball(worldIn, position.getX(), position.getY(), position.getZ()); + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.EXPERIENCE_BOTTLE, new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + return new EntityExpBottle(worldIn, position.getX(), position.getY(), position.getZ()); + } + protected float getProjectileInaccuracy() + { + return super.getProjectileInaccuracy() * 0.5F; + } + protected float getProjectileVelocity() + { + return super.getProjectileVelocity() * 1.25F; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.SPLASH_POTION, new IBehaviorDispenseItem() + { + /** + * Dispenses the specified ItemStack from a dispenser. + */ + public ItemStack dispense(IBlockSource source, final ItemStack stack) + { + return (new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + return new EntityPotion(worldIn, position.getX(), position.getY(), position.getZ(), stack.copy()); + } + protected float getProjectileInaccuracy() + { + return super.getProjectileInaccuracy() * 0.5F; + } + protected float getProjectileVelocity() + { + return super.getProjectileVelocity() * 1.25F; + } + }).dispense(source, stack); + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.LINGERING_POTION, new IBehaviorDispenseItem() + { + /** + * Dispenses the specified ItemStack from a dispenser. + */ + public ItemStack dispense(IBlockSource source, final ItemStack stack) + { + return (new BehaviorProjectileDispense() + { + /** + * Return the projectile entity spawned by this dispense behavior. + */ + protected IProjectile getProjectileEntity(World worldIn, IPosition position, ItemStack stackIn) + { + return new EntityPotion(worldIn, position.getX(), position.getY(), position.getZ(), stack.copy()); + } + protected float getProjectileInaccuracy() + { + return super.getProjectileInaccuracy() * 0.5F; + } + protected float getProjectileVelocity() + { + return super.getProjectileVelocity() * 1.25F; + } + }).dispense(source, stack); + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.SPAWN_EGG, new BehaviorDefaultDispenseItem() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + double d0 = source.getX() + (double)enumfacing.getFrontOffsetX(); + double d1 = (double)((float)(source.getBlockPos().getY() + enumfacing.getFrontOffsetY()) + 0.2F); + double d2 = source.getZ() + (double)enumfacing.getFrontOffsetZ(); + Entity entity = ItemMonsterPlacer.spawnCreature(source.getWorld(), ItemMonsterPlacer.getNamedIdFrom(stack), d0, d1, d2); + + if (entity instanceof EntityLivingBase && stack.hasDisplayName()) + { + entity.setCustomNameTag(stack.getDisplayName()); + } + + ItemMonsterPlacer.applyItemEntityDataToEntity(source.getWorld(), (EntityPlayer)null, stack, entity); + stack.shrink(1); + return stack; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.FIREWORKS, new BehaviorDefaultDispenseItem() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + double d0 = source.getX() + (double)enumfacing.getFrontOffsetX(); + double d1 = (double)((float)source.getBlockPos().getY() + 0.2F); + double d2 = source.getZ() + (double)enumfacing.getFrontOffsetZ(); + EntityFireworkRocket entityfireworkrocket = new EntityFireworkRocket(source.getWorld(), d0, d1, d2, stack); + source.getWorld().spawnEntity(entityfireworkrocket); + stack.shrink(1); + return stack; + } + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(1004, source.getBlockPos(), 0); + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.FIRE_CHARGE, new BehaviorDefaultDispenseItem() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + IPosition iposition = BlockDispenser.getDispensePosition(source); + double d0 = iposition.getX() + (double)((float)enumfacing.getFrontOffsetX() * 0.3F); + double d1 = iposition.getY() + (double)((float)enumfacing.getFrontOffsetY() * 0.3F); + double d2 = iposition.getZ() + (double)((float)enumfacing.getFrontOffsetZ() * 0.3F); + World world = source.getWorld(); + Random random = world.rand; + double d3 = random.nextGaussian() * 0.05D + (double)enumfacing.getFrontOffsetX(); + double d4 = random.nextGaussian() * 0.05D + (double)enumfacing.getFrontOffsetY(); + double d5 = random.nextGaussian() * 0.05D + (double)enumfacing.getFrontOffsetZ(); + world.spawnEntity(new EntitySmallFireball(world, d0, d1, d2, d3, d4, d5)); + stack.shrink(1); + return stack; + } + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(1018, source.getBlockPos(), 0); + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.BOAT, new Bootstrap.BehaviorDispenseBoat(EntityBoat.Type.OAK)); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.SPRUCE_BOAT, new Bootstrap.BehaviorDispenseBoat(EntityBoat.Type.SPRUCE)); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.BIRCH_BOAT, new Bootstrap.BehaviorDispenseBoat(EntityBoat.Type.BIRCH)); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.JUNGLE_BOAT, new Bootstrap.BehaviorDispenseBoat(EntityBoat.Type.JUNGLE)); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.DARK_OAK_BOAT, new Bootstrap.BehaviorDispenseBoat(EntityBoat.Type.DARK_OAK)); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.ACACIA_BOAT, new Bootstrap.BehaviorDispenseBoat(EntityBoat.Type.ACACIA)); + IBehaviorDispenseItem ibehaviordispenseitem = new BehaviorDefaultDispenseItem() + { + private final BehaviorDefaultDispenseItem dispenseBehavior = new BehaviorDefaultDispenseItem(); + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + ItemBucket itembucket = (ItemBucket)stack.getItem(); + BlockPos blockpos = source.getBlockPos().offset((EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + return itembucket.tryPlaceContainedLiquid((EntityPlayer)null, source.getWorld(), blockpos) ? new ItemStack(Items.BUCKET) : this.dispenseBehavior.dispense(source, stack); + } + }; + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.LAVA_BUCKET, ibehaviordispenseitem); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.WATER_BUCKET, ibehaviordispenseitem); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.MILK_BUCKET, net.minecraftforge.fluids.DispenseFluidContainer.getInstance()); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.BUCKET, net.minecraftforge.fluids.DispenseFluidContainer.getInstance()); + if (false) + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.BUCKET, new BehaviorDefaultDispenseItem() + { + private final BehaviorDefaultDispenseItem dispenseBehavior = new BehaviorDefaultDispenseItem(); + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos blockpos = source.getBlockPos().offset((EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + IBlockState iblockstate = world.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + Material material = iblockstate.getMaterial(); + Item item; + + if (Material.WATER.equals(material) && block instanceof BlockLiquid && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0) + { + item = Items.WATER_BUCKET; + } + else + { + if (!Material.LAVA.equals(material) || !(block instanceof BlockLiquid) || ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() != 0) + { + return super.dispenseStack(source, stack); + } + + item = Items.LAVA_BUCKET; + } + + world.setBlockToAir(blockpos); + stack.shrink(1); + + if (stack.isEmpty()) + { + return new ItemStack(item); + } + else + { + if (((TileEntityDispenser)source.getBlockTileEntity()).addItemStack(new ItemStack(item)) < 0) + { + this.dispenseBehavior.dispense(source, new ItemStack(item)); + } + + return stack; + } + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.FLINT_AND_STEEL, new Bootstrap.BehaviorDispenseOptional() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + this.successful = true; + BlockPos blockpos = source.getBlockPos().offset((EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + + if (world.isAirBlock(blockpos)) + { + world.setBlockState(blockpos, Blocks.FIRE.getDefaultState()); + + if (stack.attemptDamageItem(1, world.rand, (EntityPlayerMP)null)) + { + stack.setCount(0); + } + } + else if (world.getBlockState(blockpos).getBlock() == Blocks.TNT) + { + Blocks.TNT.onBlockDestroyedByPlayer(world, blockpos, Blocks.TNT.getDefaultState().withProperty(BlockTNT.EXPLODE, Boolean.valueOf(true))); + world.setBlockToAir(blockpos); + } + else + { + this.successful = false; + } + + return stack; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.DYE, new Bootstrap.BehaviorDispenseOptional() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + this.successful = true; + + if (EnumDyeColor.WHITE == EnumDyeColor.byDyeDamage(stack.getMetadata())) + { + World world = source.getWorld(); + BlockPos blockpos = source.getBlockPos().offset((EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + + if (ItemDye.applyBonemeal(stack, world, blockpos)) + { + if (!world.isRemote) + { + world.playEvent(2005, blockpos, 0); + } + } + else + { + this.successful = false; + } + + return stack; + } + else + { + return super.dispenseStack(source, stack); + } + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Item.getItemFromBlock(Blocks.TNT), new BehaviorDefaultDispenseItem() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos blockpos = source.getBlockPos().offset((EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double)blockpos.getX() + 0.5D, (double)blockpos.getY(), (double)blockpos.getZ() + 0.5D, (EntityLivingBase)null); + world.spawnEntity(entitytntprimed); + world.playSound((EntityPlayer)null, entitytntprimed.posX, entitytntprimed.posY, entitytntprimed.posZ, SoundEvents.ENTITY_TNT_PRIMED, SoundCategory.BLOCKS, 1.0F, 1.0F); + stack.shrink(1); + return stack; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Items.SKULL, new Bootstrap.BehaviorDispenseOptional() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + BlockPos blockpos = source.getBlockPos().offset(enumfacing); + BlockSkull blockskull = Blocks.SKULL; + this.successful = true; + + if (world.isAirBlock(blockpos) && blockskull.canDispenserPlace(world, blockpos, stack)) + { + if (!world.isRemote) + { + world.setBlockState(blockpos, blockskull.getDefaultState().withProperty(BlockSkull.FACING, EnumFacing.UP), 3); + TileEntity tileentity = world.getTileEntity(blockpos); + + if (tileentity instanceof TileEntitySkull) + { + if (stack.getMetadata() == 3) + { + GameProfile gameprofile = null; + + if (stack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound.hasKey("SkullOwner", 10)) + { + gameprofile = NBTUtil.readGameProfileFromNBT(nbttagcompound.getCompoundTag("SkullOwner")); + } + else if (nbttagcompound.hasKey("SkullOwner", 8)) + { + String s = nbttagcompound.getString("SkullOwner"); + + if (!StringUtils.isNullOrEmpty(s)) + { + gameprofile = new GameProfile((UUID)null, s); + } + } + } + + ((TileEntitySkull)tileentity).setPlayerProfile(gameprofile); + } + else + { + ((TileEntitySkull)tileentity).setType(stack.getMetadata()); + } + + ((TileEntitySkull)tileentity).setSkullRotation(enumfacing.getOpposite().getHorizontalIndex() * 4); + Blocks.SKULL.checkWitherSpawn(world, blockpos, (TileEntitySkull)tileentity); + } + + stack.shrink(1); + } + } + else if (ItemArmor.dispenseArmor(source, stack).isEmpty()) + { + this.successful = false; + } + + return stack; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Item.getItemFromBlock(Blocks.PUMPKIN), new Bootstrap.BehaviorDispenseOptional() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + World world = source.getWorld(); + BlockPos blockpos = source.getBlockPos().offset((EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING)); + BlockPumpkin blockpumpkin = (BlockPumpkin)Blocks.PUMPKIN; + this.successful = true; + + if (world.isAirBlock(blockpos) && blockpumpkin.canDispenserPlace(world, blockpos)) + { + if (!world.isRemote) + { + world.setBlockState(blockpos, blockpumpkin.getDefaultState(), 3); + } + + stack.shrink(1); + } + else + { + ItemStack itemstack = ItemArmor.dispenseArmor(source, stack); + + if (itemstack.isEmpty()) + { + this.successful = false; + } + } + + return stack; + } + }); + + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(Item.getItemFromBlock(BlockShulkerBox.getBlockByColor(enumdyecolor)), new Bootstrap.BehaviorDispenseShulkerBox()); + } + } + + /** + * Registers blocks, items, stats, etc. + */ + public static void register() + { + if (!alreadyRegistered) + { + alreadyRegistered = true; + if (false) // skip redirectOutputToLog, Forge already redirects stdout and stderr output to log so that they print with more context + redirectOutputToLog(); + SoundEvent.registerSounds(); + Block.registerBlocks(); + BlockFire.init(); + Potion.registerPotions(); + Enchantment.registerEnchantments(); + Item.registerItems(); + PotionType.registerPotionTypes(); + PotionHelper.init(); + EntityList.init(); + Biome.registerBiomes(); + registerDispenserBehaviors(); + + if (!CraftingManager.init()) + { + hasErrored = true; + LOGGER.error("Errors with built-in recipes!"); + } + + StatList.init(); + + if (LOGGER.isDebugEnabled()) + { + if ((new AdvancementManager((File)null)).hasErrored()) + { + hasErrored = true; + LOGGER.error("Errors with built-in advancements!"); + } + + if (!LootTableList.test()) + { + hasErrored = true; + LOGGER.error("Errors with built-in loot tables"); + } + } + + net.minecraftforge.registries.GameData.vanillaSnapshot(); + } + } + + /** + * redirect standard streams to logger + */ + private static void redirectOutputToLog() + { + if (LOGGER.isDebugEnabled()) + { + System.setErr(new DebugLoggingPrintStream("STDERR", System.err)); + System.setOut(new DebugLoggingPrintStream("STDOUT", SYSOUT)); + } + else + { + System.setErr(new LoggingPrintStream("STDERR", System.err)); + System.setOut(new LoggingPrintStream("STDOUT", SYSOUT)); + } + } + + @SideOnly(Side.CLIENT) + public static void printToSYSOUT(String message) + { + SYSOUT.println(message); + } + + public static class BehaviorDispenseBoat extends BehaviorDefaultDispenseItem + { + private final BehaviorDefaultDispenseItem dispenseBehavior = new BehaviorDefaultDispenseItem(); + private final EntityBoat.Type boatType; + + public BehaviorDispenseBoat(EntityBoat.Type boatTypeIn) + { + this.boatType = boatTypeIn; + } + + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + World world = source.getWorld(); + double d0 = source.getX() + (double)((float)enumfacing.getFrontOffsetX() * 1.125F); + double d1 = source.getY() + (double)((float)enumfacing.getFrontOffsetY() * 1.125F); + double d2 = source.getZ() + (double)((float)enumfacing.getFrontOffsetZ() * 1.125F); + BlockPos blockpos = source.getBlockPos().offset(enumfacing); + Material material = world.getBlockState(blockpos).getMaterial(); + double d3; + + if (Material.WATER.equals(material)) + { + d3 = 1.0D; + } + else + { + if (!Material.AIR.equals(material) || !Material.WATER.equals(world.getBlockState(blockpos.down()).getMaterial())) + { + return this.dispenseBehavior.dispense(source, stack); + } + + d3 = 0.0D; + } + + EntityBoat entityboat = new EntityBoat(world, d0, d1 + d3, d2); + entityboat.setBoatType(this.boatType); + entityboat.rotationYaw = enumfacing.getHorizontalAngle(); + world.spawnEntity(entityboat); + stack.shrink(1); + return stack; + } + + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(1000, source.getBlockPos(), 0); + } + } + + public abstract static class BehaviorDispenseOptional extends BehaviorDefaultDispenseItem + { + protected boolean successful = true; + + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(this.successful ? 1000 : 1001, source.getBlockPos(), 0); + } + } + + static class BehaviorDispenseShulkerBox extends Bootstrap.BehaviorDispenseOptional + { + private BehaviorDispenseShulkerBox() + { + } + + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + Block block = Block.getBlockFromItem(stack.getItem()); + World world = source.getWorld(); + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + BlockPos blockpos = source.getBlockPos().offset(enumfacing); + this.successful = world.mayPlace(block, blockpos, false, EnumFacing.DOWN, (Entity)null); + + if (this.successful) + { + EnumFacing enumfacing1 = world.isAirBlock(blockpos.down()) ? enumfacing : EnumFacing.UP; + IBlockState iblockstate = block.getDefaultState().withProperty(BlockShulkerBox.FACING, enumfacing1); + world.setBlockState(blockpos, iblockstate); + TileEntity tileentity = world.getTileEntity(blockpos); + ItemStack itemstack = stack.splitStack(1); + + if (itemstack.hasTagCompound()) + { + ((TileEntityShulkerBox)tileentity).loadFromNbt(itemstack.getTagCompound().getCompoundTag("BlockEntityTag")); + } + + if (itemstack.hasDisplayName()) + { + ((TileEntityShulkerBox)tileentity).setCustomName(itemstack.getDisplayName()); + } + + world.updateComparatorOutputLevel(blockpos, iblockstate.getBlock()); + } + + return stack; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/Enchantments.java b/build/tmp/recompileMc/sources/net/minecraft/init/Enchantments.java new file mode 100644 index 0000000..744e1ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/Enchantments.java @@ -0,0 +1,64 @@ +package net.minecraft.init; + +import javax.annotation.Nullable; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.util.ResourceLocation; + +public class Enchantments +{ + public static final Enchantment PROTECTION = getRegisteredEnchantment("protection"); + /** Protection against fire */ + public static final Enchantment FIRE_PROTECTION = getRegisteredEnchantment("fire_protection"); + public static final Enchantment FEATHER_FALLING = getRegisteredEnchantment("feather_falling"); + public static final Enchantment BLAST_PROTECTION = getRegisteredEnchantment("blast_protection"); + public static final Enchantment PROJECTILE_PROTECTION = getRegisteredEnchantment("projectile_protection"); + public static final Enchantment RESPIRATION = getRegisteredEnchantment("respiration"); + public static final Enchantment AQUA_AFFINITY = getRegisteredEnchantment("aqua_affinity"); + public static final Enchantment THORNS = getRegisteredEnchantment("thorns"); + public static final Enchantment DEPTH_STRIDER = getRegisteredEnchantment("depth_strider"); + public static final Enchantment FROST_WALKER = getRegisteredEnchantment("frost_walker"); + public static final Enchantment BINDING_CURSE = getRegisteredEnchantment("binding_curse"); + public static final Enchantment SHARPNESS = getRegisteredEnchantment("sharpness"); + public static final Enchantment SMITE = getRegisteredEnchantment("smite"); + public static final Enchantment BANE_OF_ARTHROPODS = getRegisteredEnchantment("bane_of_arthropods"); + public static final Enchantment KNOCKBACK = getRegisteredEnchantment("knockback"); + /** Lights mobs on fire */ + public static final Enchantment FIRE_ASPECT = getRegisteredEnchantment("fire_aspect"); + public static final Enchantment LOOTING = getRegisteredEnchantment("looting"); + public static final Enchantment SWEEPING = getRegisteredEnchantment("sweeping"); + public static final Enchantment EFFICIENCY = getRegisteredEnchantment("efficiency"); + public static final Enchantment SILK_TOUCH = getRegisteredEnchantment("silk_touch"); + public static final Enchantment UNBREAKING = getRegisteredEnchantment("unbreaking"); + public static final Enchantment FORTUNE = getRegisteredEnchantment("fortune"); + public static final Enchantment POWER = getRegisteredEnchantment("power"); + public static final Enchantment PUNCH = getRegisteredEnchantment("punch"); + public static final Enchantment FLAME = getRegisteredEnchantment("flame"); + public static final Enchantment INFINITY = getRegisteredEnchantment("infinity"); + public static final Enchantment LUCK_OF_THE_SEA = getRegisteredEnchantment("luck_of_the_sea"); + public static final Enchantment LURE = getRegisteredEnchantment("lure"); + public static final Enchantment MENDING = getRegisteredEnchantment("mending"); + public static final Enchantment VANISHING_CURSE = getRegisteredEnchantment("vanishing_curse"); + + @Nullable + private static Enchantment getRegisteredEnchantment(String id) + { + Enchantment enchantment = Enchantment.REGISTRY.getObject(new ResourceLocation(id)); + + if (enchantment == null) + { + throw new IllegalStateException("Invalid Enchantment requested: " + id); + } + else + { + return enchantment; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed Enchantments before Bootstrap!"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/Items.java b/build/tmp/recompileMc/sources/net/minecraft/init/Items.java new file mode 100644 index 0000000..3908b93 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/Items.java @@ -0,0 +1,461 @@ +package net.minecraft.init; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemArmorStand; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemEmptyMap; +import net.minecraft.item.ItemFishingRod; +import net.minecraft.item.ItemMap; +import net.minecraft.item.ItemPotion; +import net.minecraft.item.ItemShears; +import net.minecraft.util.ResourceLocation; + +public class Items +{ + public static final Item AIR; + public static final Item IRON_SHOVEL; + public static final Item IRON_PICKAXE; + public static final Item IRON_AXE; + public static final Item FLINT_AND_STEEL; + public static final Item APPLE; + public static final ItemBow BOW; + public static final Item ARROW; + public static final Item SPECTRAL_ARROW; + public static final Item TIPPED_ARROW; + public static final Item COAL; + public static final Item DIAMOND; + public static final Item IRON_INGOT; + public static final Item GOLD_INGOT; + public static final Item IRON_SWORD; + public static final Item WOODEN_SWORD; + public static final Item WOODEN_SHOVEL; + public static final Item WOODEN_PICKAXE; + public static final Item WOODEN_AXE; + public static final Item STONE_SWORD; + public static final Item STONE_SHOVEL; + public static final Item STONE_PICKAXE; + public static final Item STONE_AXE; + public static final Item DIAMOND_SWORD; + public static final Item DIAMOND_SHOVEL; + public static final Item DIAMOND_PICKAXE; + public static final Item DIAMOND_AXE; + public static final Item STICK; + public static final Item BOWL; + public static final Item MUSHROOM_STEW; + public static final Item GOLDEN_SWORD; + public static final Item GOLDEN_SHOVEL; + public static final Item GOLDEN_PICKAXE; + public static final Item GOLDEN_AXE; + public static final Item STRING; + public static final Item FEATHER; + public static final Item GUNPOWDER; + public static final Item WOODEN_HOE; + public static final Item STONE_HOE; + public static final Item IRON_HOE; + public static final Item DIAMOND_HOE; + public static final Item GOLDEN_HOE; + public static final Item WHEAT_SEEDS; + public static final Item WHEAT; + public static final Item BREAD; + public static final ItemArmor LEATHER_HELMET; + public static final ItemArmor LEATHER_CHESTPLATE; + public static final ItemArmor LEATHER_LEGGINGS; + public static final ItemArmor LEATHER_BOOTS; + public static final ItemArmor CHAINMAIL_HELMET; + public static final ItemArmor CHAINMAIL_CHESTPLATE; + public static final ItemArmor CHAINMAIL_LEGGINGS; + public static final ItemArmor CHAINMAIL_BOOTS; + public static final ItemArmor IRON_HELMET; + public static final ItemArmor IRON_CHESTPLATE; + public static final ItemArmor IRON_LEGGINGS; + public static final ItemArmor IRON_BOOTS; + public static final ItemArmor DIAMOND_HELMET; + public static final ItemArmor DIAMOND_CHESTPLATE; + public static final ItemArmor DIAMOND_LEGGINGS; + public static final ItemArmor DIAMOND_BOOTS; + public static final ItemArmor GOLDEN_HELMET; + public static final ItemArmor GOLDEN_CHESTPLATE; + public static final ItemArmor GOLDEN_LEGGINGS; + public static final ItemArmor GOLDEN_BOOTS; + public static final Item FLINT; + public static final Item PORKCHOP; + public static final Item COOKED_PORKCHOP; + public static final Item PAINTING; + public static final Item GOLDEN_APPLE; + public static final Item SIGN; + public static final Item OAK_DOOR; + public static final Item SPRUCE_DOOR; + public static final Item BIRCH_DOOR; + public static final Item JUNGLE_DOOR; + public static final Item ACACIA_DOOR; + public static final Item DARK_OAK_DOOR; + public static final Item BUCKET; + public static final Item WATER_BUCKET; + public static final Item LAVA_BUCKET; + public static final Item MINECART; + public static final Item SADDLE; + public static final Item IRON_DOOR; + public static final Item REDSTONE; + public static final Item SNOWBALL; + public static final Item BOAT; + public static final Item SPRUCE_BOAT; + public static final Item BIRCH_BOAT; + public static final Item JUNGLE_BOAT; + public static final Item ACACIA_BOAT; + public static final Item DARK_OAK_BOAT; + public static final Item LEATHER; + public static final Item MILK_BUCKET; + public static final Item BRICK; + public static final Item CLAY_BALL; + public static final Item REEDS; + public static final Item PAPER; + public static final Item BOOK; + public static final Item SLIME_BALL; + public static final Item CHEST_MINECART; + public static final Item FURNACE_MINECART; + public static final Item EGG; + public static final Item COMPASS; + public static final ItemFishingRod FISHING_ROD; + public static final Item CLOCK; + public static final Item GLOWSTONE_DUST; + public static final Item FISH; + public static final Item COOKED_FISH; + public static final Item DYE; + public static final Item BONE; + public static final Item SUGAR; + public static final Item CAKE; + public static final Item BED; + public static final Item REPEATER; + public static final Item COOKIE; + public static final ItemMap FILLED_MAP; + public static final ItemShears SHEARS; + public static final Item MELON; + public static final Item PUMPKIN_SEEDS; + public static final Item MELON_SEEDS; + public static final Item BEEF; + public static final Item COOKED_BEEF; + public static final Item CHICKEN; + public static final Item COOKED_CHICKEN; + public static final Item MUTTON; + public static final Item COOKED_MUTTON; + public static final Item RABBIT; + public static final Item COOKED_RABBIT; + public static final Item RABBIT_STEW; + public static final Item RABBIT_FOOT; + public static final Item RABBIT_HIDE; + public static final Item ROTTEN_FLESH; + public static final Item ENDER_PEARL; + public static final Item BLAZE_ROD; + public static final Item GHAST_TEAR; + public static final Item GOLD_NUGGET; + public static final Item NETHER_WART; + public static final ItemPotion POTIONITEM; + public static final ItemPotion SPLASH_POTION; + public static final ItemPotion LINGERING_POTION; + public static final Item GLASS_BOTTLE; + public static final Item DRAGON_BREATH; + public static final Item SPIDER_EYE; + public static final Item FERMENTED_SPIDER_EYE; + public static final Item BLAZE_POWDER; + public static final Item MAGMA_CREAM; + public static final Item BREWING_STAND; + public static final Item CAULDRON; + public static final Item ENDER_EYE; + public static final Item SPECKLED_MELON; + public static final Item SPAWN_EGG; + public static final Item EXPERIENCE_BOTTLE; + public static final Item FIRE_CHARGE; + public static final Item WRITABLE_BOOK; + public static final Item WRITTEN_BOOK; + public static final Item EMERALD; + public static final Item ITEM_FRAME; + public static final Item FLOWER_POT; + public static final Item CARROT; + public static final Item POTATO; + public static final Item BAKED_POTATO; + public static final Item POISONOUS_POTATO; + public static final ItemEmptyMap MAP; + public static final Item GOLDEN_CARROT; + public static final Item SKULL; + public static final Item CARROT_ON_A_STICK; + public static final Item NETHER_STAR; + public static final Item PUMPKIN_PIE; + public static final Item FIREWORKS; + public static final Item FIREWORK_CHARGE; + public static final Item ENCHANTED_BOOK; + public static final Item COMPARATOR; + public static final Item NETHERBRICK; + public static final Item QUARTZ; + public static final Item TNT_MINECART; + public static final Item HOPPER_MINECART; + public static final ItemArmorStand ARMOR_STAND; + public static final Item IRON_HORSE_ARMOR; + public static final Item GOLDEN_HORSE_ARMOR; + public static final Item DIAMOND_HORSE_ARMOR; + public static final Item LEAD; + public static final Item NAME_TAG; + public static final Item COMMAND_BLOCK_MINECART; + public static final Item RECORD_13; + public static final Item RECORD_CAT; + public static final Item RECORD_BLOCKS; + public static final Item RECORD_CHIRP; + public static final Item RECORD_FAR; + public static final Item RECORD_MALL; + public static final Item RECORD_MELLOHI; + public static final Item RECORD_STAL; + public static final Item RECORD_STRAD; + public static final Item RECORD_WARD; + public static final Item RECORD_11; + public static final Item RECORD_WAIT; + public static final Item PRISMARINE_SHARD; + public static final Item PRISMARINE_CRYSTALS; + public static final Item BANNER; + public static final Item END_CRYSTAL; + public static final Item SHIELD; + public static final Item ELYTRA; + public static final Item CHORUS_FRUIT; + public static final Item CHORUS_FRUIT_POPPED; + public static final Item BEETROOT_SEEDS; + public static final Item BEETROOT; + public static final Item BEETROOT_SOUP; + public static final Item TOTEM_OF_UNDYING; + public static final Item SHULKER_SHELL; + public static final Item IRON_NUGGET; + public static final Item KNOWLEDGE_BOOK; + + private static Item getRegisteredItem(String name) + { + Item item = Item.REGISTRY.getObject(new ResourceLocation(name)); + + if (item == null) + { + throw new IllegalStateException("Invalid Item requested: " + name); + } + else + { + return item; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed Items before Bootstrap!"); + } + else + { + AIR = getRegisteredItem("air"); + IRON_SHOVEL = getRegisteredItem("iron_shovel"); + IRON_PICKAXE = getRegisteredItem("iron_pickaxe"); + IRON_AXE = getRegisteredItem("iron_axe"); + FLINT_AND_STEEL = getRegisteredItem("flint_and_steel"); + APPLE = getRegisteredItem("apple"); + BOW = (ItemBow)getRegisteredItem("bow"); + ARROW = getRegisteredItem("arrow"); + SPECTRAL_ARROW = getRegisteredItem("spectral_arrow"); + TIPPED_ARROW = getRegisteredItem("tipped_arrow"); + COAL = getRegisteredItem("coal"); + DIAMOND = getRegisteredItem("diamond"); + IRON_INGOT = getRegisteredItem("iron_ingot"); + GOLD_INGOT = getRegisteredItem("gold_ingot"); + IRON_SWORD = getRegisteredItem("iron_sword"); + WOODEN_SWORD = getRegisteredItem("wooden_sword"); + WOODEN_SHOVEL = getRegisteredItem("wooden_shovel"); + WOODEN_PICKAXE = getRegisteredItem("wooden_pickaxe"); + WOODEN_AXE = getRegisteredItem("wooden_axe"); + STONE_SWORD = getRegisteredItem("stone_sword"); + STONE_SHOVEL = getRegisteredItem("stone_shovel"); + STONE_PICKAXE = getRegisteredItem("stone_pickaxe"); + STONE_AXE = getRegisteredItem("stone_axe"); + DIAMOND_SWORD = getRegisteredItem("diamond_sword"); + DIAMOND_SHOVEL = getRegisteredItem("diamond_shovel"); + DIAMOND_PICKAXE = getRegisteredItem("diamond_pickaxe"); + DIAMOND_AXE = getRegisteredItem("diamond_axe"); + STICK = getRegisteredItem("stick"); + BOWL = getRegisteredItem("bowl"); + MUSHROOM_STEW = getRegisteredItem("mushroom_stew"); + GOLDEN_SWORD = getRegisteredItem("golden_sword"); + GOLDEN_SHOVEL = getRegisteredItem("golden_shovel"); + GOLDEN_PICKAXE = getRegisteredItem("golden_pickaxe"); + GOLDEN_AXE = getRegisteredItem("golden_axe"); + STRING = getRegisteredItem("string"); + FEATHER = getRegisteredItem("feather"); + GUNPOWDER = getRegisteredItem("gunpowder"); + WOODEN_HOE = getRegisteredItem("wooden_hoe"); + STONE_HOE = getRegisteredItem("stone_hoe"); + IRON_HOE = getRegisteredItem("iron_hoe"); + DIAMOND_HOE = getRegisteredItem("diamond_hoe"); + GOLDEN_HOE = getRegisteredItem("golden_hoe"); + WHEAT_SEEDS = getRegisteredItem("wheat_seeds"); + WHEAT = getRegisteredItem("wheat"); + BREAD = getRegisteredItem("bread"); + LEATHER_HELMET = (ItemArmor)getRegisteredItem("leather_helmet"); + LEATHER_CHESTPLATE = (ItemArmor)getRegisteredItem("leather_chestplate"); + LEATHER_LEGGINGS = (ItemArmor)getRegisteredItem("leather_leggings"); + LEATHER_BOOTS = (ItemArmor)getRegisteredItem("leather_boots"); + CHAINMAIL_HELMET = (ItemArmor)getRegisteredItem("chainmail_helmet"); + CHAINMAIL_CHESTPLATE = (ItemArmor)getRegisteredItem("chainmail_chestplate"); + CHAINMAIL_LEGGINGS = (ItemArmor)getRegisteredItem("chainmail_leggings"); + CHAINMAIL_BOOTS = (ItemArmor)getRegisteredItem("chainmail_boots"); + IRON_HELMET = (ItemArmor)getRegisteredItem("iron_helmet"); + IRON_CHESTPLATE = (ItemArmor)getRegisteredItem("iron_chestplate"); + IRON_LEGGINGS = (ItemArmor)getRegisteredItem("iron_leggings"); + IRON_BOOTS = (ItemArmor)getRegisteredItem("iron_boots"); + DIAMOND_HELMET = (ItemArmor)getRegisteredItem("diamond_helmet"); + DIAMOND_CHESTPLATE = (ItemArmor)getRegisteredItem("diamond_chestplate"); + DIAMOND_LEGGINGS = (ItemArmor)getRegisteredItem("diamond_leggings"); + DIAMOND_BOOTS = (ItemArmor)getRegisteredItem("diamond_boots"); + GOLDEN_HELMET = (ItemArmor)getRegisteredItem("golden_helmet"); + GOLDEN_CHESTPLATE = (ItemArmor)getRegisteredItem("golden_chestplate"); + GOLDEN_LEGGINGS = (ItemArmor)getRegisteredItem("golden_leggings"); + GOLDEN_BOOTS = (ItemArmor)getRegisteredItem("golden_boots"); + FLINT = getRegisteredItem("flint"); + PORKCHOP = getRegisteredItem("porkchop"); + COOKED_PORKCHOP = getRegisteredItem("cooked_porkchop"); + PAINTING = getRegisteredItem("painting"); + GOLDEN_APPLE = getRegisteredItem("golden_apple"); + SIGN = getRegisteredItem("sign"); + OAK_DOOR = getRegisteredItem("wooden_door"); + SPRUCE_DOOR = getRegisteredItem("spruce_door"); + BIRCH_DOOR = getRegisteredItem("birch_door"); + JUNGLE_DOOR = getRegisteredItem("jungle_door"); + ACACIA_DOOR = getRegisteredItem("acacia_door"); + DARK_OAK_DOOR = getRegisteredItem("dark_oak_door"); + BUCKET = getRegisteredItem("bucket"); + WATER_BUCKET = getRegisteredItem("water_bucket"); + LAVA_BUCKET = getRegisteredItem("lava_bucket"); + MINECART = getRegisteredItem("minecart"); + SADDLE = getRegisteredItem("saddle"); + IRON_DOOR = getRegisteredItem("iron_door"); + REDSTONE = getRegisteredItem("redstone"); + SNOWBALL = getRegisteredItem("snowball"); + BOAT = getRegisteredItem("boat"); + SPRUCE_BOAT = getRegisteredItem("spruce_boat"); + BIRCH_BOAT = getRegisteredItem("birch_boat"); + JUNGLE_BOAT = getRegisteredItem("jungle_boat"); + ACACIA_BOAT = getRegisteredItem("acacia_boat"); + DARK_OAK_BOAT = getRegisteredItem("dark_oak_boat"); + LEATHER = getRegisteredItem("leather"); + MILK_BUCKET = getRegisteredItem("milk_bucket"); + BRICK = getRegisteredItem("brick"); + CLAY_BALL = getRegisteredItem("clay_ball"); + REEDS = getRegisteredItem("reeds"); + PAPER = getRegisteredItem("paper"); + BOOK = getRegisteredItem("book"); + SLIME_BALL = getRegisteredItem("slime_ball"); + CHEST_MINECART = getRegisteredItem("chest_minecart"); + FURNACE_MINECART = getRegisteredItem("furnace_minecart"); + EGG = getRegisteredItem("egg"); + COMPASS = getRegisteredItem("compass"); + FISHING_ROD = (ItemFishingRod)getRegisteredItem("fishing_rod"); + CLOCK = getRegisteredItem("clock"); + GLOWSTONE_DUST = getRegisteredItem("glowstone_dust"); + FISH = getRegisteredItem("fish"); + COOKED_FISH = getRegisteredItem("cooked_fish"); + DYE = getRegisteredItem("dye"); + BONE = getRegisteredItem("bone"); + SUGAR = getRegisteredItem("sugar"); + CAKE = getRegisteredItem("cake"); + BED = getRegisteredItem("bed"); + REPEATER = getRegisteredItem("repeater"); + COOKIE = getRegisteredItem("cookie"); + FILLED_MAP = (ItemMap)getRegisteredItem("filled_map"); + SHEARS = (ItemShears)getRegisteredItem("shears"); + MELON = getRegisteredItem("melon"); + PUMPKIN_SEEDS = getRegisteredItem("pumpkin_seeds"); + MELON_SEEDS = getRegisteredItem("melon_seeds"); + BEEF = getRegisteredItem("beef"); + COOKED_BEEF = getRegisteredItem("cooked_beef"); + CHICKEN = getRegisteredItem("chicken"); + COOKED_CHICKEN = getRegisteredItem("cooked_chicken"); + MUTTON = getRegisteredItem("mutton"); + COOKED_MUTTON = getRegisteredItem("cooked_mutton"); + RABBIT = getRegisteredItem("rabbit"); + COOKED_RABBIT = getRegisteredItem("cooked_rabbit"); + RABBIT_STEW = getRegisteredItem("rabbit_stew"); + RABBIT_FOOT = getRegisteredItem("rabbit_foot"); + RABBIT_HIDE = getRegisteredItem("rabbit_hide"); + ROTTEN_FLESH = getRegisteredItem("rotten_flesh"); + ENDER_PEARL = getRegisteredItem("ender_pearl"); + BLAZE_ROD = getRegisteredItem("blaze_rod"); + GHAST_TEAR = getRegisteredItem("ghast_tear"); + GOLD_NUGGET = getRegisteredItem("gold_nugget"); + NETHER_WART = getRegisteredItem("nether_wart"); + POTIONITEM = (ItemPotion)getRegisteredItem("potion"); + SPLASH_POTION = (ItemPotion)getRegisteredItem("splash_potion"); + LINGERING_POTION = (ItemPotion)getRegisteredItem("lingering_potion"); + GLASS_BOTTLE = getRegisteredItem("glass_bottle"); + DRAGON_BREATH = getRegisteredItem("dragon_breath"); + SPIDER_EYE = getRegisteredItem("spider_eye"); + FERMENTED_SPIDER_EYE = getRegisteredItem("fermented_spider_eye"); + BLAZE_POWDER = getRegisteredItem("blaze_powder"); + MAGMA_CREAM = getRegisteredItem("magma_cream"); + BREWING_STAND = getRegisteredItem("brewing_stand"); + CAULDRON = getRegisteredItem("cauldron"); + ENDER_EYE = getRegisteredItem("ender_eye"); + SPECKLED_MELON = getRegisteredItem("speckled_melon"); + SPAWN_EGG = getRegisteredItem("spawn_egg"); + EXPERIENCE_BOTTLE = getRegisteredItem("experience_bottle"); + FIRE_CHARGE = getRegisteredItem("fire_charge"); + WRITABLE_BOOK = getRegisteredItem("writable_book"); + WRITTEN_BOOK = getRegisteredItem("written_book"); + EMERALD = getRegisteredItem("emerald"); + ITEM_FRAME = getRegisteredItem("item_frame"); + FLOWER_POT = getRegisteredItem("flower_pot"); + CARROT = getRegisteredItem("carrot"); + POTATO = getRegisteredItem("potato"); + BAKED_POTATO = getRegisteredItem("baked_potato"); + POISONOUS_POTATO = getRegisteredItem("poisonous_potato"); + MAP = (ItemEmptyMap)getRegisteredItem("map"); + GOLDEN_CARROT = getRegisteredItem("golden_carrot"); + SKULL = getRegisteredItem("skull"); + CARROT_ON_A_STICK = getRegisteredItem("carrot_on_a_stick"); + NETHER_STAR = getRegisteredItem("nether_star"); + PUMPKIN_PIE = getRegisteredItem("pumpkin_pie"); + FIREWORKS = getRegisteredItem("fireworks"); + FIREWORK_CHARGE = getRegisteredItem("firework_charge"); + ENCHANTED_BOOK = getRegisteredItem("enchanted_book"); + COMPARATOR = getRegisteredItem("comparator"); + NETHERBRICK = getRegisteredItem("netherbrick"); + QUARTZ = getRegisteredItem("quartz"); + TNT_MINECART = getRegisteredItem("tnt_minecart"); + HOPPER_MINECART = getRegisteredItem("hopper_minecart"); + ARMOR_STAND = (ItemArmorStand)getRegisteredItem("armor_stand"); + IRON_HORSE_ARMOR = getRegisteredItem("iron_horse_armor"); + GOLDEN_HORSE_ARMOR = getRegisteredItem("golden_horse_armor"); + DIAMOND_HORSE_ARMOR = getRegisteredItem("diamond_horse_armor"); + LEAD = getRegisteredItem("lead"); + NAME_TAG = getRegisteredItem("name_tag"); + COMMAND_BLOCK_MINECART = getRegisteredItem("command_block_minecart"); + RECORD_13 = getRegisteredItem("record_13"); + RECORD_CAT = getRegisteredItem("record_cat"); + RECORD_BLOCKS = getRegisteredItem("record_blocks"); + RECORD_CHIRP = getRegisteredItem("record_chirp"); + RECORD_FAR = getRegisteredItem("record_far"); + RECORD_MALL = getRegisteredItem("record_mall"); + RECORD_MELLOHI = getRegisteredItem("record_mellohi"); + RECORD_STAL = getRegisteredItem("record_stal"); + RECORD_STRAD = getRegisteredItem("record_strad"); + RECORD_WARD = getRegisteredItem("record_ward"); + RECORD_11 = getRegisteredItem("record_11"); + RECORD_WAIT = getRegisteredItem("record_wait"); + PRISMARINE_SHARD = getRegisteredItem("prismarine_shard"); + PRISMARINE_CRYSTALS = getRegisteredItem("prismarine_crystals"); + BANNER = getRegisteredItem("banner"); + END_CRYSTAL = getRegisteredItem("end_crystal"); + SHIELD = getRegisteredItem("shield"); + ELYTRA = getRegisteredItem("elytra"); + CHORUS_FRUIT = getRegisteredItem("chorus_fruit"); + CHORUS_FRUIT_POPPED = getRegisteredItem("chorus_fruit_popped"); + BEETROOT_SEEDS = getRegisteredItem("beetroot_seeds"); + BEETROOT = getRegisteredItem("beetroot"); + BEETROOT_SOUP = getRegisteredItem("beetroot_soup"); + TOTEM_OF_UNDYING = getRegisteredItem("totem_of_undying"); + SHULKER_SHELL = getRegisteredItem("shulker_shell"); + IRON_NUGGET = getRegisteredItem("iron_nugget"); + KNOWLEDGE_BOOK = getRegisteredItem("knowledge_book"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/MobEffects.java b/build/tmp/recompileMc/sources/net/minecraft/init/MobEffects.java new file mode 100644 index 0000000..2617381 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/MobEffects.java @@ -0,0 +1,102 @@ +package net.minecraft.init; + +import javax.annotation.Nullable; +import net.minecraft.potion.Potion; +import net.minecraft.util.ResourceLocation; + +public class MobEffects +{ + public static final Potion SPEED; + public static final Potion SLOWNESS; + public static final Potion HASTE; + public static final Potion MINING_FATIGUE; + public static final Potion STRENGTH; + public static final Potion INSTANT_HEALTH; + public static final Potion INSTANT_DAMAGE; + public static final Potion JUMP_BOOST; + public static final Potion NAUSEA; + /** The regeneration Potion object. */ + public static final Potion REGENERATION; + public static final Potion RESISTANCE; + /** The fire resistance Potion object. */ + public static final Potion FIRE_RESISTANCE; + /** The water breathing Potion object. */ + public static final Potion WATER_BREATHING; + /** The invisibility Potion object. */ + public static final Potion INVISIBILITY; + /** The blindness Potion object. */ + public static final Potion BLINDNESS; + /** The night vision Potion object. */ + public static final Potion NIGHT_VISION; + /** The hunger Potion object. */ + public static final Potion HUNGER; + /** The weakness Potion object. */ + public static final Potion WEAKNESS; + /** The poison Potion object. */ + public static final Potion POISON; + /** The wither Potion object. */ + public static final Potion WITHER; + /** The health boost Potion object. */ + public static final Potion HEALTH_BOOST; + /** The absorption Potion object. */ + public static final Potion ABSORPTION; + /** The saturation Potion object. */ + public static final Potion SATURATION; + public static final Potion GLOWING; + public static final Potion LEVITATION; + public static final Potion LUCK; + public static final Potion UNLUCK; + + @Nullable + private static Potion getRegisteredMobEffect(String id) + { + Potion potion = Potion.REGISTRY.getObject(new ResourceLocation(id)); + + if (potion == null) + { + throw new IllegalStateException("Invalid MobEffect requested: " + id); + } + else + { + return potion; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed MobEffects before Bootstrap!"); + } + else + { + SPEED = getRegisteredMobEffect("speed"); + SLOWNESS = getRegisteredMobEffect("slowness"); + HASTE = getRegisteredMobEffect("haste"); + MINING_FATIGUE = getRegisteredMobEffect("mining_fatigue"); + STRENGTH = getRegisteredMobEffect("strength"); + INSTANT_HEALTH = getRegisteredMobEffect("instant_health"); + INSTANT_DAMAGE = getRegisteredMobEffect("instant_damage"); + JUMP_BOOST = getRegisteredMobEffect("jump_boost"); + NAUSEA = getRegisteredMobEffect("nausea"); + REGENERATION = getRegisteredMobEffect("regeneration"); + RESISTANCE = getRegisteredMobEffect("resistance"); + FIRE_RESISTANCE = getRegisteredMobEffect("fire_resistance"); + WATER_BREATHING = getRegisteredMobEffect("water_breathing"); + INVISIBILITY = getRegisteredMobEffect("invisibility"); + BLINDNESS = getRegisteredMobEffect("blindness"); + NIGHT_VISION = getRegisteredMobEffect("night_vision"); + HUNGER = getRegisteredMobEffect("hunger"); + WEAKNESS = getRegisteredMobEffect("weakness"); + POISON = getRegisteredMobEffect("poison"); + WITHER = getRegisteredMobEffect("wither"); + HEALTH_BOOST = getRegisteredMobEffect("health_boost"); + ABSORPTION = getRegisteredMobEffect("absorption"); + SATURATION = getRegisteredMobEffect("saturation"); + GLOWING = getRegisteredMobEffect("glowing"); + LEVITATION = getRegisteredMobEffect("levitation"); + LUCK = getRegisteredMobEffect("luck"); + UNLUCK = getRegisteredMobEffect("unluck"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/PotionTypes.java b/build/tmp/recompileMc/sources/net/minecraft/init/PotionTypes.java new file mode 100644 index 0000000..d491ba7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/PotionTypes.java @@ -0,0 +1,110 @@ +package net.minecraft.init; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.potion.PotionType; +import net.minecraft.util.ResourceLocation; + +public class PotionTypes +{ + private static final Set CACHE; + public static final PotionType EMPTY; + public static final PotionType WATER; + public static final PotionType MUNDANE; + public static final PotionType THICK; + public static final PotionType AWKWARD; + public static final PotionType NIGHT_VISION; + public static final PotionType LONG_NIGHT_VISION; + public static final PotionType INVISIBILITY; + public static final PotionType LONG_INVISIBILITY; + public static final PotionType LEAPING; + public static final PotionType LONG_LEAPING; + public static final PotionType STRONG_LEAPING; + public static final PotionType FIRE_RESISTANCE; + public static final PotionType LONG_FIRE_RESISTANCE; + public static final PotionType SWIFTNESS; + public static final PotionType LONG_SWIFTNESS; + public static final PotionType STRONG_SWIFTNESS; + public static final PotionType SLOWNESS; + public static final PotionType LONG_SLOWNESS; + public static final PotionType WATER_BREATHING; + public static final PotionType LONG_WATER_BREATHING; + public static final PotionType HEALING; + public static final PotionType STRONG_HEALING; + public static final PotionType HARMING; + public static final PotionType STRONG_HARMING; + public static final PotionType POISON; + public static final PotionType LONG_POISON; + public static final PotionType STRONG_POISON; + public static final PotionType REGENERATION; + public static final PotionType LONG_REGENERATION; + public static final PotionType STRONG_REGENERATION; + public static final PotionType STRENGTH; + public static final PotionType LONG_STRENGTH; + public static final PotionType STRONG_STRENGTH; + public static final PotionType WEAKNESS; + public static final PotionType LONG_WEAKNESS; + + private static PotionType getRegisteredPotionType(String id) + { + PotionType potiontype = PotionType.REGISTRY.getObject(new ResourceLocation(id)); + + if (!CACHE.add(potiontype)) + { + throw new IllegalStateException("Invalid Potion requested: " + id); + } + else + { + return potiontype; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed Potions before Bootstrap!"); + } + else + { + CACHE = Sets.newHashSet(); + EMPTY = getRegisteredPotionType("empty"); + WATER = getRegisteredPotionType("water"); + MUNDANE = getRegisteredPotionType("mundane"); + THICK = getRegisteredPotionType("thick"); + AWKWARD = getRegisteredPotionType("awkward"); + NIGHT_VISION = getRegisteredPotionType("night_vision"); + LONG_NIGHT_VISION = getRegisteredPotionType("long_night_vision"); + INVISIBILITY = getRegisteredPotionType("invisibility"); + LONG_INVISIBILITY = getRegisteredPotionType("long_invisibility"); + LEAPING = getRegisteredPotionType("leaping"); + LONG_LEAPING = getRegisteredPotionType("long_leaping"); + STRONG_LEAPING = getRegisteredPotionType("strong_leaping"); + FIRE_RESISTANCE = getRegisteredPotionType("fire_resistance"); + LONG_FIRE_RESISTANCE = getRegisteredPotionType("long_fire_resistance"); + SWIFTNESS = getRegisteredPotionType("swiftness"); + LONG_SWIFTNESS = getRegisteredPotionType("long_swiftness"); + STRONG_SWIFTNESS = getRegisteredPotionType("strong_swiftness"); + SLOWNESS = getRegisteredPotionType("slowness"); + LONG_SLOWNESS = getRegisteredPotionType("long_slowness"); + WATER_BREATHING = getRegisteredPotionType("water_breathing"); + LONG_WATER_BREATHING = getRegisteredPotionType("long_water_breathing"); + HEALING = getRegisteredPotionType("healing"); + STRONG_HEALING = getRegisteredPotionType("strong_healing"); + HARMING = getRegisteredPotionType("harming"); + STRONG_HARMING = getRegisteredPotionType("strong_harming"); + POISON = getRegisteredPotionType("poison"); + LONG_POISON = getRegisteredPotionType("long_poison"); + STRONG_POISON = getRegisteredPotionType("strong_poison"); + REGENERATION = getRegisteredPotionType("regeneration"); + LONG_REGENERATION = getRegisteredPotionType("long_regeneration"); + STRONG_REGENERATION = getRegisteredPotionType("strong_regeneration"); + STRENGTH = getRegisteredPotionType("strength"); + LONG_STRENGTH = getRegisteredPotionType("long_strength"); + STRONG_STRENGTH = getRegisteredPotionType("strong_strength"); + WEAKNESS = getRegisteredPotionType("weakness"); + LONG_WEAKNESS = getRegisteredPotionType("long_weakness"); + CACHE.clear(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/SoundEvents.java b/build/tmp/recompileMc/sources/net/minecraft/init/SoundEvents.java new file mode 100644 index 0000000..08c7bbc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/SoundEvents.java @@ -0,0 +1,1131 @@ +package net.minecraft.init; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; + +public class SoundEvents +{ + public static final SoundEvent AMBIENT_CAVE; + public static final SoundEvent BLOCK_ANVIL_BREAK; + public static final SoundEvent BLOCK_ANVIL_DESTROY; + public static final SoundEvent BLOCK_ANVIL_FALL; + public static final SoundEvent BLOCK_ANVIL_HIT; + public static final SoundEvent BLOCK_ANVIL_LAND; + public static final SoundEvent BLOCK_ANVIL_PLACE; + public static final SoundEvent BLOCK_ANVIL_STEP; + public static final SoundEvent BLOCK_ANVIL_USE; + public static final SoundEvent ENTITY_ARMORSTAND_BREAK; + public static final SoundEvent ENTITY_ARMORSTAND_FALL; + public static final SoundEvent ENTITY_ARMORSTAND_HIT; + public static final SoundEvent ENTITY_ARMORSTAND_PLACE; + public static final SoundEvent ITEM_ARMOR_EQUIP_CHAIN; + public static final SoundEvent ITEM_ARMOR_EQUIP_DIAMOND; + public static final SoundEvent ITEM_ARMOR_EQIIP_ELYTRA; + public static final SoundEvent ITEM_ARMOR_EQUIP_GENERIC; + public static final SoundEvent ITEM_ARMOR_EQUIP_GOLD; + public static final SoundEvent ITEM_ARMOR_EQUIP_IRON; + public static final SoundEvent ITEM_ARMOR_EQUIP_LEATHER; + public static final SoundEvent ENTITY_ARROW_HIT; + public static final SoundEvent ENTITY_ARROW_HIT_PLAYER; + public static final SoundEvent ENTITY_ARROW_SHOOT; + public static final SoundEvent ENTITY_BAT_AMBIENT; + public static final SoundEvent ENTITY_BAT_DEATH; + public static final SoundEvent ENTITY_BAT_HURT; + public static final SoundEvent ENTITY_BAT_LOOP; + public static final SoundEvent ENTITY_BAT_TAKEOFF; + public static final SoundEvent ENTITY_BLAZE_AMBIENT; + public static final SoundEvent ENTITY_BLAZE_BURN; + public static final SoundEvent ENTITY_BLAZE_DEATH; + public static final SoundEvent ENTITY_BLAZE_HURT; + public static final SoundEvent ENTITY_BLAZE_SHOOT; + public static final SoundEvent ENTITY_BOAT_PADDLE_LAND; + public static final SoundEvent ENTITY_BOAT_PADDLE_WATER; + public static final SoundEvent ENTITY_BOBBER_RETRIEVE; + public static final SoundEvent ENTITY_BOBBER_SPLASH; + public static final SoundEvent ENTITY_BOBBER_THROW; + public static final SoundEvent ITEM_BOTTLE_EMPTY; + public static final SoundEvent ITEM_BOTTLE_FILL; + public static final SoundEvent ITEM_BOTTLE_FILL_DRAGONBREATH; + public static final SoundEvent BLOCK_BREWING_STAND_BREW; + public static final SoundEvent ITEM_BUCKET_EMPTY; + public static final SoundEvent ITEM_BUCKET_EMPTY_LAVA; + public static final SoundEvent ITEM_BUCKET_FILL; + public static final SoundEvent ITEM_BUCKET_FILL_LAVA; + public static final SoundEvent ENTITY_CAT_AMBIENT; + public static final SoundEvent ENTITY_CAT_DEATH; + public static final SoundEvent ENTITY_CAT_HISS; + public static final SoundEvent ENTITY_CAT_HURT; + public static final SoundEvent ENTITY_CAT_PURR; + public static final SoundEvent ENTITY_CAT_PURREOW; + public static final SoundEvent BLOCK_CHEST_CLOSE; + public static final SoundEvent BLOCK_CHEST_LOCKED; + public static final SoundEvent BLOCK_CHEST_OPEN; + public static final SoundEvent ENTITY_CHICKEN_AMBIENT; + public static final SoundEvent ENTITY_CHICKEN_DEATH; + public static final SoundEvent ENTITY_CHICKEN_EGG; + public static final SoundEvent ENTITY_CHICKEN_HURT; + public static final SoundEvent ENTITY_CHICKEN_STEP; + public static final SoundEvent BLOCK_CHORUS_FLOWER_DEATH; + public static final SoundEvent BLOCK_CHORUS_FLOWER_GROW; + public static final SoundEvent ITEM_CHORUS_FRUIT_TELEPORT; + public static final SoundEvent BLOCK_CLOTH_BREAK; + public static final SoundEvent BLOCK_CLOTH_FALL; + public static final SoundEvent BLOCK_CLOTH_HIT; + public static final SoundEvent BLOCK_CLOTH_PLACE; + public static final SoundEvent BLOCK_CLOTH_STEP; + public static final SoundEvent BLOCK_COMPARATOR_CLICK; + public static final SoundEvent ENTITY_COW_AMBIENT; + public static final SoundEvent ENTITY_COW_DEATH; + public static final SoundEvent ENTITY_COW_HURT; + public static final SoundEvent ENTITY_COW_MILK; + public static final SoundEvent ENTITY_COW_STEP; + public static final SoundEvent ENTITY_CREEPER_DEATH; + public static final SoundEvent ENTITY_CREEPER_HURT; + public static final SoundEvent ENTITY_CREEPER_PRIMED; + public static final SoundEvent BLOCK_DISPENSER_DISPENSE; + public static final SoundEvent BLOCK_DISPENSER_FAIL; + public static final SoundEvent BLOCK_DISPENSER_LAUNCH; + public static final SoundEvent ENTITY_DONKEY_AMBIENT; + public static final SoundEvent ENTITY_DONKEY_ANGRY; + public static final SoundEvent ENTITY_DONKEY_CHEST; + public static final SoundEvent ENTITY_DONKEY_DEATH; + public static final SoundEvent ENTITY_DONKEY_HURT; + public static final SoundEvent ENTITY_EGG_THROW; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_AMBIENT; + public static final SoundEvent ENTITY_ELDERGUARDIAN_AMBIENTLAND; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_CURSE; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_DEATH; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_DEATH_LAND; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_FLOP; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_HURT; + public static final SoundEvent ENTITY_ELDER_GUARDIAN_HURT_LAND; + public static final SoundEvent ITEM_ELYTRA_FLYING; + public static final SoundEvent BLOCK_ENCHANTMENT_TABLE_USE; + public static final SoundEvent BLOCK_ENDERCHEST_CLOSE; + public static final SoundEvent BLOCK_ENDERCHEST_OPEN; + public static final SoundEvent ENTITY_ENDERDRAGON_AMBIENT; + public static final SoundEvent ENTITY_ENDERDRAGON_DEATH; + public static final SoundEvent ENTITY_ENDERDRAGON_FIREBALL_EPLD; + public static final SoundEvent ENTITY_ENDERDRAGON_FLAP; + public static final SoundEvent ENTITY_ENDERDRAGON_GROWL; + public static final SoundEvent ENTITY_ENDERDRAGON_HURT; + public static final SoundEvent ENTITY_ENDERDRAGON_SHOOT; + public static final SoundEvent ENTITY_ENDEREYE_DEATH; + public static final SoundEvent ENTITY_ENDEREYE_LAUNCH; + public static final SoundEvent ENTITY_ENDERMEN_AMBIENT; + public static final SoundEvent ENTITY_ENDERMEN_DEATH; + public static final SoundEvent ENTITY_ENDERMEN_HURT; + public static final SoundEvent ENTITY_ENDERMEN_SCREAM; + public static final SoundEvent ENTITY_ENDERMEN_STARE; + public static final SoundEvent ENTITY_ENDERMEN_TELEPORT; + public static final SoundEvent ENTITY_ENDERMITE_AMBIENT; + public static final SoundEvent ENTITY_ENDERMITE_DEATH; + public static final SoundEvent ENTITY_ENDERMITE_HURT; + public static final SoundEvent ENTITY_ENDERMITE_STEP; + public static final SoundEvent ENTITY_ENDERPEARL_THROW; + public static final SoundEvent BLOCK_END_GATEWAY_SPAWN; + public static final SoundEvent BLOCK_END_PORTAL_FRAME_FILL; + public static final SoundEvent BLOCK_END_PORTAL_SPAWN; + public static final SoundEvent EVOCATION_FANGS_ATTACK; + public static final SoundEvent ENTITY_EVOCATION_ILLAGER_AMBIENT; + public static final SoundEvent EVOCATION_ILLAGER_CAST_SPELL; + public static final SoundEvent EVOCATION_ILLAGER_DEATH; + public static final SoundEvent ENTITY_EVOCATION_ILLAGER_HURT; + public static final SoundEvent EVOCATION_ILLAGER_PREPARE_ATTACK; + public static final SoundEvent EVOCATION_ILLAGER_PREPARE_SUMMON; + public static final SoundEvent EVOCATION_ILLAGER_PREPARE_WOLOLO; + public static final SoundEvent ENTITY_EXPERIENCE_BOTTLE_THROW; + public static final SoundEvent ENTITY_EXPERIENCE_ORB_PICKUP; + public static final SoundEvent BLOCK_FENCE_GATE_CLOSE; + public static final SoundEvent BLOCK_FENCE_GATE_OPEN; + public static final SoundEvent ITEM_FIRECHARGE_USE; + public static final SoundEvent ENTITY_FIREWORK_BLAST; + public static final SoundEvent ENTITY_FIREWORK_BLAST_FAR; + public static final SoundEvent ENTITY_FIREWORK_LARGE_BLAST; + public static final SoundEvent ENTITY_FIREWORK_LARGE_BLAST_FAR; + public static final SoundEvent ENTITY_FIREWORK_LAUNCH; + public static final SoundEvent ENTITY_FIREWORK_SHOOT; + public static final SoundEvent ENTITY_FIREWORK_TWINKLE; + public static final SoundEvent ENTITY_FIREWORK_TWINKLE_FAR; + public static final SoundEvent BLOCK_FIRE_AMBIENT; + public static final SoundEvent BLOCK_FIRE_EXTINGUISH; + public static final SoundEvent ITEM_FLINTANDSTEEL_USE; + public static final SoundEvent BLOCK_FURNACE_FIRE_CRACKLE; + public static final SoundEvent ENTITY_GENERIC_BIG_FALL; + public static final SoundEvent ENTITY_GENERIC_BURN; + public static final SoundEvent ENTITY_GENERIC_DEATH; + public static final SoundEvent ENTITY_GENERIC_DRINK; + public static final SoundEvent ENTITY_GENERIC_EAT; + public static final SoundEvent ENTITY_GENERIC_EXPLODE; + public static final SoundEvent ENTITY_GENERIC_EXTINGUISH_FIRE; + public static final SoundEvent ENTITY_GENERIC_HURT; + public static final SoundEvent ENTITY_GENERIC_SMALL_FALL; + public static final SoundEvent ENTITY_GENERIC_SPLASH; + public static final SoundEvent ENTITY_GENERIC_SWIM; + public static final SoundEvent ENTITY_GHAST_AMBIENT; + public static final SoundEvent ENTITY_GHAST_DEATH; + public static final SoundEvent ENTITY_GHAST_HURT; + public static final SoundEvent ENTITY_GHAST_SCREAM; + public static final SoundEvent ENTITY_GHAST_SHOOT; + public static final SoundEvent ENTITY_GHAST_WARN; + public static final SoundEvent BLOCK_GLASS_BREAK; + public static final SoundEvent BLOCK_GLASS_FALL; + public static final SoundEvent BLOCK_GLASS_HIT; + public static final SoundEvent BLOCK_GLASS_PLACE; + public static final SoundEvent BLOCK_GLASS_STEP; + public static final SoundEvent BLOCK_GRASS_BREAK; + public static final SoundEvent BLOCK_GRASS_FALL; + public static final SoundEvent BLOCK_GRASS_HIT; + public static final SoundEvent BLOCK_GRASS_PLACE; + public static final SoundEvent BLOCK_GRASS_STEP; + public static final SoundEvent BLOCK_GRAVEL_BREAK; + public static final SoundEvent BLOCK_GRAVEL_FALL; + public static final SoundEvent BLOCK_GRAVEL_HIT; + public static final SoundEvent BLOCK_GRAVEL_PLACE; + public static final SoundEvent BLOCK_GRAVEL_STEP; + public static final SoundEvent ENTITY_GUARDIAN_AMBIENT; + public static final SoundEvent ENTITY_GUARDIAN_AMBIENT_LAND; + public static final SoundEvent ENTITY_GUARDIAN_ATTACK; + public static final SoundEvent ENTITY_GUARDIAN_DEATH; + public static final SoundEvent ENTITY_GUARDIAN_DEATH_LAND; + public static final SoundEvent ENTITY_GUARDIAN_FLOP; + public static final SoundEvent ENTITY_GUARDIAN_HURT; + public static final SoundEvent ENTITY_GUARDIAN_HURT_LAND; + public static final SoundEvent ITEM_HOE_TILL; + public static final SoundEvent ENTITY_HORSE_AMBIENT; + public static final SoundEvent ENTITY_HORSE_ANGRY; + public static final SoundEvent ENTITY_HORSE_ARMOR; + public static final SoundEvent ENTITY_HORSE_BREATHE; + public static final SoundEvent ENTITY_HORSE_DEATH; + public static final SoundEvent ENTITY_HORSE_EAT; + public static final SoundEvent ENTITY_HORSE_GALLOP; + public static final SoundEvent ENTITY_HORSE_HURT; + public static final SoundEvent ENTITY_HORSE_JUMP; + public static final SoundEvent ENTITY_HORSE_LAND; + public static final SoundEvent ENTITY_HORSE_SADDLE; + public static final SoundEvent ENTITY_HORSE_STEP; + public static final SoundEvent ENTITY_HORSE_STEP_WOOD; + public static final SoundEvent ENTITY_HOSTILE_BIG_FALL; + public static final SoundEvent ENTITY_HOSTILE_DEATH; + public static final SoundEvent ENTITY_HOSTILE_HURT; + public static final SoundEvent ENTITY_HOSTILE_SMALL_FALL; + public static final SoundEvent ENTITY_HOSTILE_SPLASH; + public static final SoundEvent ENTITY_HOSTILE_SWIM; + public static final SoundEvent ENTITY_HUSK_AMBIENT; + public static final SoundEvent ENTITY_HUSK_DEATH; + public static final SoundEvent ENTITY_HUSK_HURT; + public static final SoundEvent ENTITY_HUSK_STEP; + public static final SoundEvent ENTITY_ILLUSION_ILLAGER_AMBIENT; + public static final SoundEvent ENTITY_ILLAGER_CAST_SPELL; + public static final SoundEvent ENTITY_ILLAGER_DEATH; + public static final SoundEvent ENTITY_ILLUSION_ILLAGER_HURT; + public static final SoundEvent ENTITY_ILLAGER_MIRROR_MOVE; + public static final SoundEvent ENTITY_ILLAGER_PREPARE_BLINDNESS; + public static final SoundEvent ENTITY_ILLAGER_PREPARE_MIRROR; + public static final SoundEvent ENTITY_IRONGOLEM_ATTACK; + public static final SoundEvent ENTITY_IRONGOLEM_DEATH; + public static final SoundEvent ENTITY_IRONGOLEM_HURT; + public static final SoundEvent ENTITY_IRONGOLEM_STEP; + public static final SoundEvent BLOCK_IRON_DOOR_CLOSE; + public static final SoundEvent BLOCK_IRON_DOOR_OPEN; + public static final SoundEvent BLOCK_IRON_TRAPDOOR_CLOSE; + public static final SoundEvent BLOCK_IRON_TRAPDOOR_OPEN; + public static final SoundEvent ENTITY_ITEMFRAME_ADD_ITEM; + public static final SoundEvent ENTITY_ITEMFRAME_BREAK; + public static final SoundEvent ENTITY_ITEMFRAME_PLACE; + public static final SoundEvent ENTITY_ITEMFRAME_REMOVE_ITEM; + public static final SoundEvent ENTITY_ITEMFRAME_ROTATE_ITEM; + public static final SoundEvent ENTITY_ITEM_BREAK; + public static final SoundEvent ENTITY_ITEM_PICKUP; + public static final SoundEvent BLOCK_LADDER_BREAK; + public static final SoundEvent BLOCK_LADDER_FALL; + public static final SoundEvent BLOCK_LADDER_HIT; + public static final SoundEvent BLOCK_LADDER_PLACE; + public static final SoundEvent BLOCK_LADDER_STEP; + public static final SoundEvent BLOCK_LAVA_AMBIENT; + public static final SoundEvent BLOCK_LAVA_EXTINGUISH; + public static final SoundEvent BLOCK_LAVA_POP; + public static final SoundEvent ENTITY_LEASHKNOT_BREAK; + public static final SoundEvent ENTITY_LEASHKNOT_PLACE; + public static final SoundEvent BLOCK_LEVER_CLICK; + public static final SoundEvent ENTITY_LIGHTNING_IMPACT; + public static final SoundEvent ENTITY_LIGHTNING_THUNDER; + public static final SoundEvent ENTITY_LINGERINGPOTION_THROW; + public static final SoundEvent ENTITY_LLAMA_AMBIENT; + public static final SoundEvent ENTITY_LLAMA_ANGRY; + public static final SoundEvent ENTITY_LLAMA_CHEST; + public static final SoundEvent ENTITY_LLAMA_DEATH; + public static final SoundEvent ENTITY_LLAMA_EAT; + public static final SoundEvent ENTITY_LLAMA_HURT; + public static final SoundEvent ENTITY_LLAMA_SPIT; + public static final SoundEvent ENTITY_LLAMA_STEP; + public static final SoundEvent ENTITY_LLAMA_SWAG; + public static final SoundEvent ENTITY_MAGMACUBE_DEATH; + public static final SoundEvent ENTITY_MAGMACUBE_HURT; + public static final SoundEvent ENTITY_MAGMACUBE_JUMP; + public static final SoundEvent ENTITY_MAGMACUBE_SQUISH; + public static final SoundEvent BLOCK_METAL_BREAK; + public static final SoundEvent BLOCK_METAL_FALL; + public static final SoundEvent BLOCK_METAL_HIT; + public static final SoundEvent BLOCK_METAL_PLACE; + public static final SoundEvent BLOCK_METAL_PRESSPLATE_CLICK_OFF; + public static final SoundEvent BLOCK_METAL_PRESSPLATE_CLICK_ON; + public static final SoundEvent BLOCK_METAL_STEP; + public static final SoundEvent ENTITY_MINECART_INSIDE; + public static final SoundEvent ENTITY_MINECART_RIDING; + public static final SoundEvent ENTITY_MOOSHROOM_SHEAR; + public static final SoundEvent ENTITY_MULE_AMBIENT; + public static final SoundEvent ENTITY_MULE_CHEST; + public static final SoundEvent ENTITY_MULE_DEATH; + public static final SoundEvent ENTITY_MULE_HURT; + public static final SoundEvent MUSIC_CREATIVE; + public static final SoundEvent MUSIC_CREDITS; + public static final SoundEvent MUSIC_DRAGON; + public static final SoundEvent MUSIC_END; + public static final SoundEvent MUSIC_GAME; + public static final SoundEvent MUSIC_MENU; + public static final SoundEvent MUSIC_NETHER; + public static final SoundEvent BLOCK_NOTE_BASEDRUM; + public static final SoundEvent BLOCK_NOTE_BASS; + public static final SoundEvent BLOCK_NOTE_BELL; + public static final SoundEvent BLOCK_NOTE_CHIME; + public static final SoundEvent BLOCK_NOTE_FLUTE; + public static final SoundEvent BLOCK_NOTE_GUITAR; + public static final SoundEvent BLOCK_NOTE_HARP; + public static final SoundEvent BLOCK_NOTE_HAT; + public static final SoundEvent BLOCK_NOTE_PLING; + public static final SoundEvent BLOCK_NOTE_SNARE; + public static final SoundEvent BLOCK_NOTE_XYLOPHONE; + public static final SoundEvent ENTITY_PAINTING_BREAK; + public static final SoundEvent ENTITY_PAINTING_PLACE; + public static final SoundEvent ENTITY_PARROT_AMBIENT; + public static final SoundEvent ENTITY_PARROT_DEATH; + public static final SoundEvent ENTITY_PARROT_EAT; + public static final SoundEvent ENTITY_PARROT_FLY; + public static final SoundEvent ENTITY_PARROT_HURT; + public static final SoundEvent E_PARROT_IM_BLAZE; + public static final SoundEvent E_PARROT_IM_CREEPER; + public static final SoundEvent E_PARROT_IM_ELDER_GUARDIAN; + public static final SoundEvent E_PARROT_IM_ENDERDRAGON; + public static final SoundEvent E_PARROT_IM_ENDERMAN; + public static final SoundEvent E_PARROT_IM_ENDERMITE; + public static final SoundEvent E_PARROT_IM_EVOCATION_ILLAGER; + public static final SoundEvent E_PARROT_IM_GHAST; + public static final SoundEvent E_PARROT_IM_HUSK; + public static final SoundEvent E_PARROT_IM_ILLUSION_ILLAGER; + public static final SoundEvent E_PARROT_IM_MAGMACUBE; + public static final SoundEvent E_PARROT_IM_POLAR_BEAR; + public static final SoundEvent E_PARROT_IM_SHULKER; + public static final SoundEvent E_PARROT_IM_SILVERFISH; + public static final SoundEvent E_PARROT_IM_SKELETON; + public static final SoundEvent E_PARROT_IM_SLIME; + public static final SoundEvent E_PARROT_IM_SPIDER; + public static final SoundEvent E_PARROT_IM_STRAY; + public static final SoundEvent E_PARROT_IM_VEX; + public static final SoundEvent E_PARROT_IM_VINDICATION_ILLAGER; + public static final SoundEvent E_PARROT_IM_WITCH; + public static final SoundEvent E_PARROT_IM_WITHER; + public static final SoundEvent E_PARROT_IM_WITHER_SKELETON; + public static final SoundEvent E_PARROT_IM_WOLF; + public static final SoundEvent E_PARROT_IM_ZOMBIE; + public static final SoundEvent E_PARROT_IM_ZOMBIE_PIGMAN; + public static final SoundEvent E_PARROT_IM_ZOMBIE_VILLAGER; + public static final SoundEvent ENTITY_PARROT_STEP; + public static final SoundEvent ENTITY_PIG_AMBIENT; + public static final SoundEvent ENTITY_PIG_DEATH; + public static final SoundEvent ENTITY_PIG_HURT; + public static final SoundEvent ENTITY_PIG_SADDLE; + public static final SoundEvent ENTITY_PIG_STEP; + public static final SoundEvent BLOCK_PISTON_CONTRACT; + public static final SoundEvent BLOCK_PISTON_EXTEND; + public static final SoundEvent ENTITY_PLAYER_ATTACK_CRIT; + public static final SoundEvent ENTITY_PLAYER_ATTACK_KNOCKBACK; + public static final SoundEvent ENTITY_PLAYER_ATTACK_NODAMAGE; + public static final SoundEvent ENTITY_PLAYER_ATTACK_STRONG; + public static final SoundEvent ENTITY_PLAYER_ATTACK_SWEEP; + public static final SoundEvent ENTITY_PLAYER_ATTACK_WEAK; + public static final SoundEvent ENTITY_PLAYER_BIG_FALL; + public static final SoundEvent ENTITY_PLAYER_BREATH; + public static final SoundEvent ENTITY_PLAYER_BURP; + public static final SoundEvent ENTITY_PLAYER_DEATH; + public static final SoundEvent ENTITY_PLAYER_HURT; + public static final SoundEvent ENTITY_PLAYER_HURT_DROWN; + public static final SoundEvent ENTITY_PLAYER_HURT_ON_FIRE; + public static final SoundEvent ENTITY_PLAYER_LEVELUP; + public static final SoundEvent ENTITY_PLAYER_SMALL_FALL; + public static final SoundEvent ENTITY_PLAYER_SPLASH; + public static final SoundEvent ENTITY_PLAYER_SWIM; + public static final SoundEvent ENTITY_POLAR_BEAR_AMBIENT; + public static final SoundEvent ENTITY_POLAR_BEAR_BABY_AMBIENT; + public static final SoundEvent ENTITY_POLAR_BEAR_DEATH; + public static final SoundEvent ENTITY_POLAR_BEAR_HURT; + public static final SoundEvent ENTITY_POLAR_BEAR_STEP; + public static final SoundEvent ENTITY_POLAR_BEAR_WARNING; + public static final SoundEvent BLOCK_PORTAL_AMBIENT; + public static final SoundEvent BLOCK_PORTAL_TRAVEL; + public static final SoundEvent BLOCK_PORTAL_TRIGGER; + public static final SoundEvent ENTITY_RABBIT_AMBIENT; + public static final SoundEvent ENTITY_RABBIT_ATTACK; + public static final SoundEvent ENTITY_RABBIT_DEATH; + public static final SoundEvent ENTITY_RABBIT_HURT; + public static final SoundEvent ENTITY_RABBIT_JUMP; + public static final SoundEvent RECORD_11; + public static final SoundEvent RECORD_13; + public static final SoundEvent RECORD_BLOCKS; + public static final SoundEvent RECORD_CAT; + public static final SoundEvent RECORD_CHIRP; + public static final SoundEvent RECORD_FAR; + public static final SoundEvent RECORD_MALL; + public static final SoundEvent RECORD_MELLOHI; + public static final SoundEvent RECORD_STAL; + public static final SoundEvent RECORD_STRAD; + public static final SoundEvent RECORD_WAIT; + public static final SoundEvent RECORD_WARD; + public static final SoundEvent BLOCK_REDSTONE_TORCH_BURNOUT; + public static final SoundEvent BLOCK_SAND_BREAK; + public static final SoundEvent BLOCK_SAND_FALL; + public static final SoundEvent BLOCK_SAND_HIT; + public static final SoundEvent BLOCK_SAND_PLACE; + public static final SoundEvent BLOCK_SAND_STEP; + public static final SoundEvent ENTITY_SHEEP_AMBIENT; + public static final SoundEvent ENTITY_SHEEP_DEATH; + public static final SoundEvent ENTITY_SHEEP_HURT; + public static final SoundEvent ENTITY_SHEEP_SHEAR; + public static final SoundEvent ENTITY_SHEEP_STEP; + public static final SoundEvent ITEM_SHIELD_BLOCK; + public static final SoundEvent ITEM_SHIELD_BREAK; + public static final SoundEvent ITEM_SHOVEL_FLATTEN; + public static final SoundEvent ENTITY_SHULKER_AMBIENT; + public static final SoundEvent BLOCK_SHULKER_BOX_CLOSE; + public static final SoundEvent BLOCK_SHULKER_BOX_OPEN; + public static final SoundEvent ENTITY_SHULKER_BULLET_HIT; + public static final SoundEvent ENTITY_SHULKER_BULLET_HURT; + public static final SoundEvent ENTITY_SHULKER_CLOSE; + public static final SoundEvent ENTITY_SHULKER_DEATH; + public static final SoundEvent ENTITY_SHULKER_HURT; + public static final SoundEvent ENTITY_SHULKER_HURT_CLOSED; + public static final SoundEvent ENTITY_SHULKER_OPEN; + public static final SoundEvent ENTITY_SHULKER_SHOOT; + public static final SoundEvent ENTITY_SHULKER_TELEPORT; + public static final SoundEvent ENTITY_SILVERFISH_AMBIENT; + public static final SoundEvent ENTITY_SILVERFISH_DEATH; + public static final SoundEvent ENTITY_SILVERFISH_HURT; + public static final SoundEvent ENTITY_SILVERFISH_STEP; + public static final SoundEvent ENTITY_SKELETON_AMBIENT; + public static final SoundEvent ENTITY_SKELETON_DEATH; + public static final SoundEvent ENTITY_SKELETON_HORSE_AMBIENT; + public static final SoundEvent ENTITY_SKELETON_HORSE_DEATH; + public static final SoundEvent ENTITY_SKELETON_HORSE_HURT; + public static final SoundEvent ENTITY_SKELETON_HURT; + public static final SoundEvent ENTITY_SKELETON_SHOOT; + public static final SoundEvent ENTITY_SKELETON_STEP; + public static final SoundEvent ENTITY_SLIME_ATTACK; + public static final SoundEvent BLOCK_SLIME_BREAK; + public static final SoundEvent ENTITY_SLIME_DEATH; + public static final SoundEvent BLOCK_SLIME_FALL; + public static final SoundEvent BLOCK_SLIME_HIT; + public static final SoundEvent ENTITY_SLIME_HURT; + public static final SoundEvent ENTITY_SLIME_JUMP; + public static final SoundEvent BLOCK_SLIME_PLACE; + public static final SoundEvent ENTITY_SLIME_SQUISH; + public static final SoundEvent BLOCK_SLIME_STEP; + public static final SoundEvent ENTITY_SMALL_MAGMACUBE_DEATH; + public static final SoundEvent ENTITY_SMALL_MAGMACUBE_HURT; + public static final SoundEvent ENTITY_SMALL_MAGMACUBE_SQUISH; + public static final SoundEvent ENTITY_SMALL_SLIME_DEATH; + public static final SoundEvent ENTITY_SMALL_SLIME_HURT; + public static final SoundEvent ENTITY_SMALL_SLIME_JUMP; + public static final SoundEvent ENTITY_SMALL_SLIME_SQUISH; + public static final SoundEvent ENTITY_SNOWBALL_THROW; + public static final SoundEvent ENTITY_SNOWMAN_AMBIENT; + public static final SoundEvent ENTITY_SNOWMAN_DEATH; + public static final SoundEvent ENTITY_SNOWMAN_HURT; + public static final SoundEvent ENTITY_SNOWMAN_SHOOT; + public static final SoundEvent BLOCK_SNOW_BREAK; + public static final SoundEvent BLOCK_SNOW_FALL; + public static final SoundEvent BLOCK_SNOW_HIT; + public static final SoundEvent BLOCK_SNOW_PLACE; + public static final SoundEvent BLOCK_SNOW_STEP; + public static final SoundEvent ENTITY_SPIDER_AMBIENT; + public static final SoundEvent ENTITY_SPIDER_DEATH; + public static final SoundEvent ENTITY_SPIDER_HURT; + public static final SoundEvent ENTITY_SPIDER_STEP; + public static final SoundEvent ENTITY_SPLASH_POTION_BREAK; + public static final SoundEvent ENTITY_SPLASH_POTION_THROW; + public static final SoundEvent ENTITY_SQUID_AMBIENT; + public static final SoundEvent ENTITY_SQUID_DEATH; + public static final SoundEvent ENTITY_SQUID_HURT; + public static final SoundEvent BLOCK_STONE_BREAK; + public static final SoundEvent BLOCK_STONE_BUTTON_CLICK_OFF; + public static final SoundEvent BLOCK_STONE_BUTTON_CLICK_ON; + public static final SoundEvent BLOCK_STONE_FALL; + public static final SoundEvent BLOCK_STONE_HIT; + public static final SoundEvent BLOCK_STONE_PLACE; + public static final SoundEvent BLOCK_STONE_PRESSPLATE_CLICK_OFF; + public static final SoundEvent BLOCK_STONE_PRESSPLATE_CLICK_ON; + public static final SoundEvent BLOCK_STONE_STEP; + public static final SoundEvent ENTITY_STRAY_AMBIENT; + public static final SoundEvent ENTITY_STRAY_DEATH; + public static final SoundEvent ENTITY_STRAY_HURT; + public static final SoundEvent ENTITY_STRAY_STEP; + public static final SoundEvent ENCHANT_THORNS_HIT; + public static final SoundEvent ENTITY_TNT_PRIMED; + public static final SoundEvent ITEM_TOTEM_USE; + public static final SoundEvent BLOCK_TRIPWIRE_ATTACH; + public static final SoundEvent BLOCK_TRIPWIRE_CLICK_OFF; + public static final SoundEvent BLOCK_TRIPWIRE_CLICK_ON; + public static final SoundEvent BLOCK_TRIPWIRE_DETACH; + public static final SoundEvent UI_BUTTON_CLICK; + public static final SoundEvent UI_TOAST_IN; + public static final SoundEvent UI_TOAST_OUT; + public static final SoundEvent UI_TOAST_CHALLENGE_COMPLETE; + public static final SoundEvent ENTITY_VEX_AMBIENT; + public static final SoundEvent ENTITY_VEX_CHARGE; + public static final SoundEvent ENTITY_VEX_DEATH; + public static final SoundEvent ENTITY_VEX_HURT; + public static final SoundEvent ENTITY_VILLAGER_AMBIENT; + public static final SoundEvent ENTITY_VILLAGER_DEATH; + public static final SoundEvent ENTITY_VILLAGER_HURT; + public static final SoundEvent ENTITY_VILLAGER_NO; + public static final SoundEvent ENTITY_VILLAGER_TRADING; + public static final SoundEvent ENTITY_VILLAGER_YES; + public static final SoundEvent VINDICATION_ILLAGER_AMBIENT; + public static final SoundEvent VINDICATION_ILLAGER_DEATH; + public static final SoundEvent ENTITY_VINDICATION_ILLAGER_HURT; + public static final SoundEvent BLOCK_WATERLILY_PLACE; + public static final SoundEvent BLOCK_WATER_AMBIENT; + public static final SoundEvent WEATHER_RAIN; + public static final SoundEvent WEATHER_RAIN_ABOVE; + public static final SoundEvent ENTITY_WITCH_AMBIENT; + public static final SoundEvent ENTITY_WITCH_DEATH; + public static final SoundEvent ENTITY_WITCH_DRINK; + public static final SoundEvent ENTITY_WITCH_HURT; + public static final SoundEvent ENTITY_WITCH_THROW; + public static final SoundEvent ENTITY_WITHER_AMBIENT; + public static final SoundEvent ENTITY_WITHER_BREAK_BLOCK; + public static final SoundEvent ENTITY_WITHER_DEATH; + public static final SoundEvent ENTITY_WITHER_HURT; + public static final SoundEvent ENTITY_WITHER_SHOOT; + public static final SoundEvent ENTITY_WITHER_SKELETON_AMBIENT; + public static final SoundEvent ENTITY_WITHER_SKELETON_DEATH; + public static final SoundEvent ENTITY_WITHER_SKELETON_HURT; + public static final SoundEvent ENTITY_WITHER_SKELETON_STEP; + public static final SoundEvent ENTITY_WITHER_SPAWN; + public static final SoundEvent ENTITY_WOLF_AMBIENT; + public static final SoundEvent ENTITY_WOLF_DEATH; + public static final SoundEvent ENTITY_WOLF_GROWL; + public static final SoundEvent ENTITY_WOLF_HOWL; + public static final SoundEvent ENTITY_WOLF_HURT; + public static final SoundEvent ENTITY_WOLF_PANT; + public static final SoundEvent ENTITY_WOLF_SHAKE; + public static final SoundEvent ENTITY_WOLF_STEP; + public static final SoundEvent ENTITY_WOLF_WHINE; + public static final SoundEvent BLOCK_WOODEN_DOOR_CLOSE; + public static final SoundEvent BLOCK_WOODEN_DOOR_OPEN; + public static final SoundEvent BLOCK_WOODEN_TRAPDOOR_CLOSE; + public static final SoundEvent BLOCK_WOODEN_TRAPDOOR_OPEN; + public static final SoundEvent BLOCK_WOOD_BREAK; + public static final SoundEvent BLOCK_WOOD_BUTTON_CLICK_OFF; + public static final SoundEvent BLOCK_WOOD_BUTTON_CLICK_ON; + public static final SoundEvent BLOCK_WOOD_FALL; + public static final SoundEvent BLOCK_WOOD_HIT; + public static final SoundEvent BLOCK_WOOD_PLACE; + public static final SoundEvent BLOCK_WOOD_PRESSPLATE_CLICK_OFF; + public static final SoundEvent BLOCK_WOOD_PRESSPLATE_CLICK_ON; + public static final SoundEvent BLOCK_WOOD_STEP; + public static final SoundEvent ENTITY_ZOMBIE_AMBIENT; + public static final SoundEvent ENTITY_ZOMBIE_ATTACK_DOOR_WOOD; + public static final SoundEvent ENTITY_ZOMBIE_ATTACK_IRON_DOOR; + public static final SoundEvent ENTITY_ZOMBIE_BREAK_DOOR_WOOD; + public static final SoundEvent ENTITY_ZOMBIE_DEATH; + public static final SoundEvent ENTITY_ZOMBIE_HORSE_AMBIENT; + public static final SoundEvent ENTITY_ZOMBIE_HORSE_DEATH; + public static final SoundEvent ENTITY_ZOMBIE_HORSE_HURT; + public static final SoundEvent ENTITY_ZOMBIE_HURT; + public static final SoundEvent ENTITY_ZOMBIE_INFECT; + public static final SoundEvent ENTITY_ZOMBIE_PIG_AMBIENT; + public static final SoundEvent ENTITY_ZOMBIE_PIG_ANGRY; + public static final SoundEvent ENTITY_ZOMBIE_PIG_DEATH; + public static final SoundEvent ENTITY_ZOMBIE_PIG_HURT; + public static final SoundEvent ENTITY_ZOMBIE_STEP; + public static final SoundEvent ENTITY_ZOMBIE_VILLAGER_AMBIENT; + public static final SoundEvent ENTITY_ZOMBIE_VILLAGER_CONVERTED; + public static final SoundEvent ENTITY_ZOMBIE_VILLAGER_CURE; + public static final SoundEvent ENTITY_ZOMBIE_VILLAGER_DEATH; + public static final SoundEvent ENTITY_ZOMBIE_VILLAGER_HURT; + public static final SoundEvent ENTITY_ZOMBIE_VILLAGER_STEP; + + private static SoundEvent getRegisteredSoundEvent(String id) + { + SoundEvent soundevent = SoundEvent.REGISTRY.getObject(new ResourceLocation(id)); + + if (soundevent == null) + { + throw new IllegalStateException("Invalid Sound requested: " + id); + } + else + { + return soundevent; + } + } + + static + { + if (!Bootstrap.isRegistered()) + { + throw new RuntimeException("Accessed Sounds before Bootstrap!"); + } + else + { + AMBIENT_CAVE = getRegisteredSoundEvent("ambient.cave"); + BLOCK_ANVIL_BREAK = getRegisteredSoundEvent("block.anvil.break"); + BLOCK_ANVIL_DESTROY = getRegisteredSoundEvent("block.anvil.destroy"); + BLOCK_ANVIL_FALL = getRegisteredSoundEvent("block.anvil.fall"); + BLOCK_ANVIL_HIT = getRegisteredSoundEvent("block.anvil.hit"); + BLOCK_ANVIL_LAND = getRegisteredSoundEvent("block.anvil.land"); + BLOCK_ANVIL_PLACE = getRegisteredSoundEvent("block.anvil.place"); + BLOCK_ANVIL_STEP = getRegisteredSoundEvent("block.anvil.step"); + BLOCK_ANVIL_USE = getRegisteredSoundEvent("block.anvil.use"); + ENTITY_ARMORSTAND_BREAK = getRegisteredSoundEvent("entity.armorstand.break"); + ENTITY_ARMORSTAND_FALL = getRegisteredSoundEvent("entity.armorstand.fall"); + ENTITY_ARMORSTAND_HIT = getRegisteredSoundEvent("entity.armorstand.hit"); + ENTITY_ARMORSTAND_PLACE = getRegisteredSoundEvent("entity.armorstand.place"); + ITEM_ARMOR_EQUIP_CHAIN = getRegisteredSoundEvent("item.armor.equip_chain"); + ITEM_ARMOR_EQUIP_DIAMOND = getRegisteredSoundEvent("item.armor.equip_diamond"); + ITEM_ARMOR_EQIIP_ELYTRA = getRegisteredSoundEvent("item.armor.equip_elytra"); + ITEM_ARMOR_EQUIP_GENERIC = getRegisteredSoundEvent("item.armor.equip_generic"); + ITEM_ARMOR_EQUIP_GOLD = getRegisteredSoundEvent("item.armor.equip_gold"); + ITEM_ARMOR_EQUIP_IRON = getRegisteredSoundEvent("item.armor.equip_iron"); + ITEM_ARMOR_EQUIP_LEATHER = getRegisteredSoundEvent("item.armor.equip_leather"); + ENTITY_ARROW_HIT = getRegisteredSoundEvent("entity.arrow.hit"); + ENTITY_ARROW_HIT_PLAYER = getRegisteredSoundEvent("entity.arrow.hit_player"); + ENTITY_ARROW_SHOOT = getRegisteredSoundEvent("entity.arrow.shoot"); + ENTITY_BAT_AMBIENT = getRegisteredSoundEvent("entity.bat.ambient"); + ENTITY_BAT_DEATH = getRegisteredSoundEvent("entity.bat.death"); + ENTITY_BAT_HURT = getRegisteredSoundEvent("entity.bat.hurt"); + ENTITY_BAT_LOOP = getRegisteredSoundEvent("entity.bat.loop"); + ENTITY_BAT_TAKEOFF = getRegisteredSoundEvent("entity.bat.takeoff"); + ENTITY_BLAZE_AMBIENT = getRegisteredSoundEvent("entity.blaze.ambient"); + ENTITY_BLAZE_BURN = getRegisteredSoundEvent("entity.blaze.burn"); + ENTITY_BLAZE_DEATH = getRegisteredSoundEvent("entity.blaze.death"); + ENTITY_BLAZE_HURT = getRegisteredSoundEvent("entity.blaze.hurt"); + ENTITY_BLAZE_SHOOT = getRegisteredSoundEvent("entity.blaze.shoot"); + ENTITY_BOAT_PADDLE_LAND = getRegisteredSoundEvent("entity.boat.paddle_land"); + ENTITY_BOAT_PADDLE_WATER = getRegisteredSoundEvent("entity.boat.paddle_water"); + ENTITY_BOBBER_RETRIEVE = getRegisteredSoundEvent("entity.bobber.retrieve"); + ENTITY_BOBBER_SPLASH = getRegisteredSoundEvent("entity.bobber.splash"); + ENTITY_BOBBER_THROW = getRegisteredSoundEvent("entity.bobber.throw"); + ITEM_BOTTLE_EMPTY = getRegisteredSoundEvent("item.bottle.empty"); + ITEM_BOTTLE_FILL = getRegisteredSoundEvent("item.bottle.fill"); + ITEM_BOTTLE_FILL_DRAGONBREATH = getRegisteredSoundEvent("item.bottle.fill_dragonbreath"); + BLOCK_BREWING_STAND_BREW = getRegisteredSoundEvent("block.brewing_stand.brew"); + ITEM_BUCKET_EMPTY = getRegisteredSoundEvent("item.bucket.empty"); + ITEM_BUCKET_EMPTY_LAVA = getRegisteredSoundEvent("item.bucket.empty_lava"); + ITEM_BUCKET_FILL = getRegisteredSoundEvent("item.bucket.fill"); + ITEM_BUCKET_FILL_LAVA = getRegisteredSoundEvent("item.bucket.fill_lava"); + ENTITY_CAT_AMBIENT = getRegisteredSoundEvent("entity.cat.ambient"); + ENTITY_CAT_DEATH = getRegisteredSoundEvent("entity.cat.death"); + ENTITY_CAT_HISS = getRegisteredSoundEvent("entity.cat.hiss"); + ENTITY_CAT_HURT = getRegisteredSoundEvent("entity.cat.hurt"); + ENTITY_CAT_PURR = getRegisteredSoundEvent("entity.cat.purr"); + ENTITY_CAT_PURREOW = getRegisteredSoundEvent("entity.cat.purreow"); + BLOCK_CHEST_CLOSE = getRegisteredSoundEvent("block.chest.close"); + BLOCK_CHEST_LOCKED = getRegisteredSoundEvent("block.chest.locked"); + BLOCK_CHEST_OPEN = getRegisteredSoundEvent("block.chest.open"); + ENTITY_CHICKEN_AMBIENT = getRegisteredSoundEvent("entity.chicken.ambient"); + ENTITY_CHICKEN_DEATH = getRegisteredSoundEvent("entity.chicken.death"); + ENTITY_CHICKEN_EGG = getRegisteredSoundEvent("entity.chicken.egg"); + ENTITY_CHICKEN_HURT = getRegisteredSoundEvent("entity.chicken.hurt"); + ENTITY_CHICKEN_STEP = getRegisteredSoundEvent("entity.chicken.step"); + BLOCK_CHORUS_FLOWER_DEATH = getRegisteredSoundEvent("block.chorus_flower.death"); + BLOCK_CHORUS_FLOWER_GROW = getRegisteredSoundEvent("block.chorus_flower.grow"); + ITEM_CHORUS_FRUIT_TELEPORT = getRegisteredSoundEvent("item.chorus_fruit.teleport"); + BLOCK_CLOTH_BREAK = getRegisteredSoundEvent("block.cloth.break"); + BLOCK_CLOTH_FALL = getRegisteredSoundEvent("block.cloth.fall"); + BLOCK_CLOTH_HIT = getRegisteredSoundEvent("block.cloth.hit"); + BLOCK_CLOTH_PLACE = getRegisteredSoundEvent("block.cloth.place"); + BLOCK_CLOTH_STEP = getRegisteredSoundEvent("block.cloth.step"); + BLOCK_COMPARATOR_CLICK = getRegisteredSoundEvent("block.comparator.click"); + ENTITY_COW_AMBIENT = getRegisteredSoundEvent("entity.cow.ambient"); + ENTITY_COW_DEATH = getRegisteredSoundEvent("entity.cow.death"); + ENTITY_COW_HURT = getRegisteredSoundEvent("entity.cow.hurt"); + ENTITY_COW_MILK = getRegisteredSoundEvent("entity.cow.milk"); + ENTITY_COW_STEP = getRegisteredSoundEvent("entity.cow.step"); + ENTITY_CREEPER_DEATH = getRegisteredSoundEvent("entity.creeper.death"); + ENTITY_CREEPER_HURT = getRegisteredSoundEvent("entity.creeper.hurt"); + ENTITY_CREEPER_PRIMED = getRegisteredSoundEvent("entity.creeper.primed"); + BLOCK_DISPENSER_DISPENSE = getRegisteredSoundEvent("block.dispenser.dispense"); + BLOCK_DISPENSER_FAIL = getRegisteredSoundEvent("block.dispenser.fail"); + BLOCK_DISPENSER_LAUNCH = getRegisteredSoundEvent("block.dispenser.launch"); + ENTITY_DONKEY_AMBIENT = getRegisteredSoundEvent("entity.donkey.ambient"); + ENTITY_DONKEY_ANGRY = getRegisteredSoundEvent("entity.donkey.angry"); + ENTITY_DONKEY_CHEST = getRegisteredSoundEvent("entity.donkey.chest"); + ENTITY_DONKEY_DEATH = getRegisteredSoundEvent("entity.donkey.death"); + ENTITY_DONKEY_HURT = getRegisteredSoundEvent("entity.donkey.hurt"); + ENTITY_EGG_THROW = getRegisteredSoundEvent("entity.egg.throw"); + ENTITY_ELDER_GUARDIAN_AMBIENT = getRegisteredSoundEvent("entity.elder_guardian.ambient"); + ENTITY_ELDERGUARDIAN_AMBIENTLAND = getRegisteredSoundEvent("entity.elder_guardian.ambient_land"); + ENTITY_ELDER_GUARDIAN_CURSE = getRegisteredSoundEvent("entity.elder_guardian.curse"); + ENTITY_ELDER_GUARDIAN_DEATH = getRegisteredSoundEvent("entity.elder_guardian.death"); + ENTITY_ELDER_GUARDIAN_DEATH_LAND = getRegisteredSoundEvent("entity.elder_guardian.death_land"); + ENTITY_ELDER_GUARDIAN_FLOP = getRegisteredSoundEvent("entity.elder_guardian.flop"); + ENTITY_ELDER_GUARDIAN_HURT = getRegisteredSoundEvent("entity.elder_guardian.hurt"); + ENTITY_ELDER_GUARDIAN_HURT_LAND = getRegisteredSoundEvent("entity.elder_guardian.hurt_land"); + ITEM_ELYTRA_FLYING = getRegisteredSoundEvent("item.elytra.flying"); + BLOCK_ENCHANTMENT_TABLE_USE = getRegisteredSoundEvent("block.enchantment_table.use"); + BLOCK_ENDERCHEST_CLOSE = getRegisteredSoundEvent("block.enderchest.close"); + BLOCK_ENDERCHEST_OPEN = getRegisteredSoundEvent("block.enderchest.open"); + ENTITY_ENDERDRAGON_AMBIENT = getRegisteredSoundEvent("entity.enderdragon.ambient"); + ENTITY_ENDERDRAGON_DEATH = getRegisteredSoundEvent("entity.enderdragon.death"); + ENTITY_ENDERDRAGON_FIREBALL_EPLD = getRegisteredSoundEvent("entity.enderdragon_fireball.explode"); + ENTITY_ENDERDRAGON_FLAP = getRegisteredSoundEvent("entity.enderdragon.flap"); + ENTITY_ENDERDRAGON_GROWL = getRegisteredSoundEvent("entity.enderdragon.growl"); + ENTITY_ENDERDRAGON_HURT = getRegisteredSoundEvent("entity.enderdragon.hurt"); + ENTITY_ENDERDRAGON_SHOOT = getRegisteredSoundEvent("entity.enderdragon.shoot"); + ENTITY_ENDEREYE_DEATH = getRegisteredSoundEvent("entity.endereye.death"); + ENTITY_ENDEREYE_LAUNCH = getRegisteredSoundEvent("entity.endereye.launch"); + ENTITY_ENDERMEN_AMBIENT = getRegisteredSoundEvent("entity.endermen.ambient"); + ENTITY_ENDERMEN_DEATH = getRegisteredSoundEvent("entity.endermen.death"); + ENTITY_ENDERMEN_HURT = getRegisteredSoundEvent("entity.endermen.hurt"); + ENTITY_ENDERMEN_SCREAM = getRegisteredSoundEvent("entity.endermen.scream"); + ENTITY_ENDERMEN_STARE = getRegisteredSoundEvent("entity.endermen.stare"); + ENTITY_ENDERMEN_TELEPORT = getRegisteredSoundEvent("entity.endermen.teleport"); + ENTITY_ENDERMITE_AMBIENT = getRegisteredSoundEvent("entity.endermite.ambient"); + ENTITY_ENDERMITE_DEATH = getRegisteredSoundEvent("entity.endermite.death"); + ENTITY_ENDERMITE_HURT = getRegisteredSoundEvent("entity.endermite.hurt"); + ENTITY_ENDERMITE_STEP = getRegisteredSoundEvent("entity.endermite.step"); + ENTITY_ENDERPEARL_THROW = getRegisteredSoundEvent("entity.enderpearl.throw"); + BLOCK_END_GATEWAY_SPAWN = getRegisteredSoundEvent("block.end_gateway.spawn"); + BLOCK_END_PORTAL_FRAME_FILL = getRegisteredSoundEvent("block.end_portal_frame.fill"); + BLOCK_END_PORTAL_SPAWN = getRegisteredSoundEvent("block.end_portal.spawn"); + EVOCATION_FANGS_ATTACK = getRegisteredSoundEvent("entity.evocation_fangs.attack"); + ENTITY_EVOCATION_ILLAGER_AMBIENT = getRegisteredSoundEvent("entity.evocation_illager.ambient"); + EVOCATION_ILLAGER_CAST_SPELL = getRegisteredSoundEvent("entity.evocation_illager.cast_spell"); + EVOCATION_ILLAGER_DEATH = getRegisteredSoundEvent("entity.evocation_illager.death"); + ENTITY_EVOCATION_ILLAGER_HURT = getRegisteredSoundEvent("entity.evocation_illager.hurt"); + EVOCATION_ILLAGER_PREPARE_ATTACK = getRegisteredSoundEvent("entity.evocation_illager.prepare_attack"); + EVOCATION_ILLAGER_PREPARE_SUMMON = getRegisteredSoundEvent("entity.evocation_illager.prepare_summon"); + EVOCATION_ILLAGER_PREPARE_WOLOLO = getRegisteredSoundEvent("entity.evocation_illager.prepare_wololo"); + ENTITY_EXPERIENCE_BOTTLE_THROW = getRegisteredSoundEvent("entity.experience_bottle.throw"); + ENTITY_EXPERIENCE_ORB_PICKUP = getRegisteredSoundEvent("entity.experience_orb.pickup"); + BLOCK_FENCE_GATE_CLOSE = getRegisteredSoundEvent("block.fence_gate.close"); + BLOCK_FENCE_GATE_OPEN = getRegisteredSoundEvent("block.fence_gate.open"); + ITEM_FIRECHARGE_USE = getRegisteredSoundEvent("item.firecharge.use"); + ENTITY_FIREWORK_BLAST = getRegisteredSoundEvent("entity.firework.blast"); + ENTITY_FIREWORK_BLAST_FAR = getRegisteredSoundEvent("entity.firework.blast_far"); + ENTITY_FIREWORK_LARGE_BLAST = getRegisteredSoundEvent("entity.firework.large_blast"); + ENTITY_FIREWORK_LARGE_BLAST_FAR = getRegisteredSoundEvent("entity.firework.large_blast_far"); + ENTITY_FIREWORK_LAUNCH = getRegisteredSoundEvent("entity.firework.launch"); + ENTITY_FIREWORK_SHOOT = getRegisteredSoundEvent("entity.firework.shoot"); + ENTITY_FIREWORK_TWINKLE = getRegisteredSoundEvent("entity.firework.twinkle"); + ENTITY_FIREWORK_TWINKLE_FAR = getRegisteredSoundEvent("entity.firework.twinkle_far"); + BLOCK_FIRE_AMBIENT = getRegisteredSoundEvent("block.fire.ambient"); + BLOCK_FIRE_EXTINGUISH = getRegisteredSoundEvent("block.fire.extinguish"); + ITEM_FLINTANDSTEEL_USE = getRegisteredSoundEvent("item.flintandsteel.use"); + BLOCK_FURNACE_FIRE_CRACKLE = getRegisteredSoundEvent("block.furnace.fire_crackle"); + ENTITY_GENERIC_BIG_FALL = getRegisteredSoundEvent("entity.generic.big_fall"); + ENTITY_GENERIC_BURN = getRegisteredSoundEvent("entity.generic.burn"); + ENTITY_GENERIC_DEATH = getRegisteredSoundEvent("entity.generic.death"); + ENTITY_GENERIC_DRINK = getRegisteredSoundEvent("entity.generic.drink"); + ENTITY_GENERIC_EAT = getRegisteredSoundEvent("entity.generic.eat"); + ENTITY_GENERIC_EXPLODE = getRegisteredSoundEvent("entity.generic.explode"); + ENTITY_GENERIC_EXTINGUISH_FIRE = getRegisteredSoundEvent("entity.generic.extinguish_fire"); + ENTITY_GENERIC_HURT = getRegisteredSoundEvent("entity.generic.hurt"); + ENTITY_GENERIC_SMALL_FALL = getRegisteredSoundEvent("entity.generic.small_fall"); + ENTITY_GENERIC_SPLASH = getRegisteredSoundEvent("entity.generic.splash"); + ENTITY_GENERIC_SWIM = getRegisteredSoundEvent("entity.generic.swim"); + ENTITY_GHAST_AMBIENT = getRegisteredSoundEvent("entity.ghast.ambient"); + ENTITY_GHAST_DEATH = getRegisteredSoundEvent("entity.ghast.death"); + ENTITY_GHAST_HURT = getRegisteredSoundEvent("entity.ghast.hurt"); + ENTITY_GHAST_SCREAM = getRegisteredSoundEvent("entity.ghast.scream"); + ENTITY_GHAST_SHOOT = getRegisteredSoundEvent("entity.ghast.shoot"); + ENTITY_GHAST_WARN = getRegisteredSoundEvent("entity.ghast.warn"); + BLOCK_GLASS_BREAK = getRegisteredSoundEvent("block.glass.break"); + BLOCK_GLASS_FALL = getRegisteredSoundEvent("block.glass.fall"); + BLOCK_GLASS_HIT = getRegisteredSoundEvent("block.glass.hit"); + BLOCK_GLASS_PLACE = getRegisteredSoundEvent("block.glass.place"); + BLOCK_GLASS_STEP = getRegisteredSoundEvent("block.glass.step"); + BLOCK_GRASS_BREAK = getRegisteredSoundEvent("block.grass.break"); + BLOCK_GRASS_FALL = getRegisteredSoundEvent("block.grass.fall"); + BLOCK_GRASS_HIT = getRegisteredSoundEvent("block.grass.hit"); + BLOCK_GRASS_PLACE = getRegisteredSoundEvent("block.grass.place"); + BLOCK_GRASS_STEP = getRegisteredSoundEvent("block.grass.step"); + BLOCK_GRAVEL_BREAK = getRegisteredSoundEvent("block.gravel.break"); + BLOCK_GRAVEL_FALL = getRegisteredSoundEvent("block.gravel.fall"); + BLOCK_GRAVEL_HIT = getRegisteredSoundEvent("block.gravel.hit"); + BLOCK_GRAVEL_PLACE = getRegisteredSoundEvent("block.gravel.place"); + BLOCK_GRAVEL_STEP = getRegisteredSoundEvent("block.gravel.step"); + ENTITY_GUARDIAN_AMBIENT = getRegisteredSoundEvent("entity.guardian.ambient"); + ENTITY_GUARDIAN_AMBIENT_LAND = getRegisteredSoundEvent("entity.guardian.ambient_land"); + ENTITY_GUARDIAN_ATTACK = getRegisteredSoundEvent("entity.guardian.attack"); + ENTITY_GUARDIAN_DEATH = getRegisteredSoundEvent("entity.guardian.death"); + ENTITY_GUARDIAN_DEATH_LAND = getRegisteredSoundEvent("entity.guardian.death_land"); + ENTITY_GUARDIAN_FLOP = getRegisteredSoundEvent("entity.guardian.flop"); + ENTITY_GUARDIAN_HURT = getRegisteredSoundEvent("entity.guardian.hurt"); + ENTITY_GUARDIAN_HURT_LAND = getRegisteredSoundEvent("entity.guardian.hurt_land"); + ITEM_HOE_TILL = getRegisteredSoundEvent("item.hoe.till"); + ENTITY_HORSE_AMBIENT = getRegisteredSoundEvent("entity.horse.ambient"); + ENTITY_HORSE_ANGRY = getRegisteredSoundEvent("entity.horse.angry"); + ENTITY_HORSE_ARMOR = getRegisteredSoundEvent("entity.horse.armor"); + ENTITY_HORSE_BREATHE = getRegisteredSoundEvent("entity.horse.breathe"); + ENTITY_HORSE_DEATH = getRegisteredSoundEvent("entity.horse.death"); + ENTITY_HORSE_EAT = getRegisteredSoundEvent("entity.horse.eat"); + ENTITY_HORSE_GALLOP = getRegisteredSoundEvent("entity.horse.gallop"); + ENTITY_HORSE_HURT = getRegisteredSoundEvent("entity.horse.hurt"); + ENTITY_HORSE_JUMP = getRegisteredSoundEvent("entity.horse.jump"); + ENTITY_HORSE_LAND = getRegisteredSoundEvent("entity.horse.land"); + ENTITY_HORSE_SADDLE = getRegisteredSoundEvent("entity.horse.saddle"); + ENTITY_HORSE_STEP = getRegisteredSoundEvent("entity.horse.step"); + ENTITY_HORSE_STEP_WOOD = getRegisteredSoundEvent("entity.horse.step_wood"); + ENTITY_HOSTILE_BIG_FALL = getRegisteredSoundEvent("entity.hostile.big_fall"); + ENTITY_HOSTILE_DEATH = getRegisteredSoundEvent("entity.hostile.death"); + ENTITY_HOSTILE_HURT = getRegisteredSoundEvent("entity.hostile.hurt"); + ENTITY_HOSTILE_SMALL_FALL = getRegisteredSoundEvent("entity.hostile.small_fall"); + ENTITY_HOSTILE_SPLASH = getRegisteredSoundEvent("entity.hostile.splash"); + ENTITY_HOSTILE_SWIM = getRegisteredSoundEvent("entity.hostile.swim"); + ENTITY_HUSK_AMBIENT = getRegisteredSoundEvent("entity.husk.ambient"); + ENTITY_HUSK_DEATH = getRegisteredSoundEvent("entity.husk.death"); + ENTITY_HUSK_HURT = getRegisteredSoundEvent("entity.husk.hurt"); + ENTITY_HUSK_STEP = getRegisteredSoundEvent("entity.husk.step"); + ENTITY_ILLUSION_ILLAGER_AMBIENT = getRegisteredSoundEvent("entity.illusion_illager.ambient"); + ENTITY_ILLAGER_CAST_SPELL = getRegisteredSoundEvent("entity.illusion_illager.cast_spell"); + ENTITY_ILLAGER_DEATH = getRegisteredSoundEvent("entity.illusion_illager.death"); + ENTITY_ILLUSION_ILLAGER_HURT = getRegisteredSoundEvent("entity.illusion_illager.hurt"); + ENTITY_ILLAGER_MIRROR_MOVE = getRegisteredSoundEvent("entity.illusion_illager.mirror_move"); + ENTITY_ILLAGER_PREPARE_BLINDNESS = getRegisteredSoundEvent("entity.illusion_illager.prepare_blindness"); + ENTITY_ILLAGER_PREPARE_MIRROR = getRegisteredSoundEvent("entity.illusion_illager.prepare_mirror"); + ENTITY_IRONGOLEM_ATTACK = getRegisteredSoundEvent("entity.irongolem.attack"); + ENTITY_IRONGOLEM_DEATH = getRegisteredSoundEvent("entity.irongolem.death"); + ENTITY_IRONGOLEM_HURT = getRegisteredSoundEvent("entity.irongolem.hurt"); + ENTITY_IRONGOLEM_STEP = getRegisteredSoundEvent("entity.irongolem.step"); + BLOCK_IRON_DOOR_CLOSE = getRegisteredSoundEvent("block.iron_door.close"); + BLOCK_IRON_DOOR_OPEN = getRegisteredSoundEvent("block.iron_door.open"); + BLOCK_IRON_TRAPDOOR_CLOSE = getRegisteredSoundEvent("block.iron_trapdoor.close"); + BLOCK_IRON_TRAPDOOR_OPEN = getRegisteredSoundEvent("block.iron_trapdoor.open"); + ENTITY_ITEMFRAME_ADD_ITEM = getRegisteredSoundEvent("entity.itemframe.add_item"); + ENTITY_ITEMFRAME_BREAK = getRegisteredSoundEvent("entity.itemframe.break"); + ENTITY_ITEMFRAME_PLACE = getRegisteredSoundEvent("entity.itemframe.place"); + ENTITY_ITEMFRAME_REMOVE_ITEM = getRegisteredSoundEvent("entity.itemframe.remove_item"); + ENTITY_ITEMFRAME_ROTATE_ITEM = getRegisteredSoundEvent("entity.itemframe.rotate_item"); + ENTITY_ITEM_BREAK = getRegisteredSoundEvent("entity.item.break"); + ENTITY_ITEM_PICKUP = getRegisteredSoundEvent("entity.item.pickup"); + BLOCK_LADDER_BREAK = getRegisteredSoundEvent("block.ladder.break"); + BLOCK_LADDER_FALL = getRegisteredSoundEvent("block.ladder.fall"); + BLOCK_LADDER_HIT = getRegisteredSoundEvent("block.ladder.hit"); + BLOCK_LADDER_PLACE = getRegisteredSoundEvent("block.ladder.place"); + BLOCK_LADDER_STEP = getRegisteredSoundEvent("block.ladder.step"); + BLOCK_LAVA_AMBIENT = getRegisteredSoundEvent("block.lava.ambient"); + BLOCK_LAVA_EXTINGUISH = getRegisteredSoundEvent("block.lava.extinguish"); + BLOCK_LAVA_POP = getRegisteredSoundEvent("block.lava.pop"); + ENTITY_LEASHKNOT_BREAK = getRegisteredSoundEvent("entity.leashknot.break"); + ENTITY_LEASHKNOT_PLACE = getRegisteredSoundEvent("entity.leashknot.place"); + BLOCK_LEVER_CLICK = getRegisteredSoundEvent("block.lever.click"); + ENTITY_LIGHTNING_IMPACT = getRegisteredSoundEvent("entity.lightning.impact"); + ENTITY_LIGHTNING_THUNDER = getRegisteredSoundEvent("entity.lightning.thunder"); + ENTITY_LINGERINGPOTION_THROW = getRegisteredSoundEvent("entity.lingeringpotion.throw"); + ENTITY_LLAMA_AMBIENT = getRegisteredSoundEvent("entity.llama.ambient"); + ENTITY_LLAMA_ANGRY = getRegisteredSoundEvent("entity.llama.angry"); + ENTITY_LLAMA_CHEST = getRegisteredSoundEvent("entity.llama.chest"); + ENTITY_LLAMA_DEATH = getRegisteredSoundEvent("entity.llama.death"); + ENTITY_LLAMA_EAT = getRegisteredSoundEvent("entity.llama.eat"); + ENTITY_LLAMA_HURT = getRegisteredSoundEvent("entity.llama.hurt"); + ENTITY_LLAMA_SPIT = getRegisteredSoundEvent("entity.llama.spit"); + ENTITY_LLAMA_STEP = getRegisteredSoundEvent("entity.llama.step"); + ENTITY_LLAMA_SWAG = getRegisteredSoundEvent("entity.llama.swag"); + ENTITY_MAGMACUBE_DEATH = getRegisteredSoundEvent("entity.magmacube.death"); + ENTITY_MAGMACUBE_HURT = getRegisteredSoundEvent("entity.magmacube.hurt"); + ENTITY_MAGMACUBE_JUMP = getRegisteredSoundEvent("entity.magmacube.jump"); + ENTITY_MAGMACUBE_SQUISH = getRegisteredSoundEvent("entity.magmacube.squish"); + BLOCK_METAL_BREAK = getRegisteredSoundEvent("block.metal.break"); + BLOCK_METAL_FALL = getRegisteredSoundEvent("block.metal.fall"); + BLOCK_METAL_HIT = getRegisteredSoundEvent("block.metal.hit"); + BLOCK_METAL_PLACE = getRegisteredSoundEvent("block.metal.place"); + BLOCK_METAL_PRESSPLATE_CLICK_OFF = getRegisteredSoundEvent("block.metal_pressureplate.click_off"); + BLOCK_METAL_PRESSPLATE_CLICK_ON = getRegisteredSoundEvent("block.metal_pressureplate.click_on"); + BLOCK_METAL_STEP = getRegisteredSoundEvent("block.metal.step"); + ENTITY_MINECART_INSIDE = getRegisteredSoundEvent("entity.minecart.inside"); + ENTITY_MINECART_RIDING = getRegisteredSoundEvent("entity.minecart.riding"); + ENTITY_MOOSHROOM_SHEAR = getRegisteredSoundEvent("entity.mooshroom.shear"); + ENTITY_MULE_AMBIENT = getRegisteredSoundEvent("entity.mule.ambient"); + ENTITY_MULE_CHEST = getRegisteredSoundEvent("entity.mule.chest"); + ENTITY_MULE_DEATH = getRegisteredSoundEvent("entity.mule.death"); + ENTITY_MULE_HURT = getRegisteredSoundEvent("entity.mule.hurt"); + MUSIC_CREATIVE = getRegisteredSoundEvent("music.creative"); + MUSIC_CREDITS = getRegisteredSoundEvent("music.credits"); + MUSIC_DRAGON = getRegisteredSoundEvent("music.dragon"); + MUSIC_END = getRegisteredSoundEvent("music.end"); + MUSIC_GAME = getRegisteredSoundEvent("music.game"); + MUSIC_MENU = getRegisteredSoundEvent("music.menu"); + MUSIC_NETHER = getRegisteredSoundEvent("music.nether"); + BLOCK_NOTE_BASEDRUM = getRegisteredSoundEvent("block.note.basedrum"); + BLOCK_NOTE_BASS = getRegisteredSoundEvent("block.note.bass"); + BLOCK_NOTE_BELL = getRegisteredSoundEvent("block.note.bell"); + BLOCK_NOTE_CHIME = getRegisteredSoundEvent("block.note.chime"); + BLOCK_NOTE_FLUTE = getRegisteredSoundEvent("block.note.flute"); + BLOCK_NOTE_GUITAR = getRegisteredSoundEvent("block.note.guitar"); + BLOCK_NOTE_HARP = getRegisteredSoundEvent("block.note.harp"); + BLOCK_NOTE_HAT = getRegisteredSoundEvent("block.note.hat"); + BLOCK_NOTE_PLING = getRegisteredSoundEvent("block.note.pling"); + BLOCK_NOTE_SNARE = getRegisteredSoundEvent("block.note.snare"); + BLOCK_NOTE_XYLOPHONE = getRegisteredSoundEvent("block.note.xylophone"); + ENTITY_PAINTING_BREAK = getRegisteredSoundEvent("entity.painting.break"); + ENTITY_PAINTING_PLACE = getRegisteredSoundEvent("entity.painting.place"); + ENTITY_PARROT_AMBIENT = getRegisteredSoundEvent("entity.parrot.ambient"); + ENTITY_PARROT_DEATH = getRegisteredSoundEvent("entity.parrot.death"); + ENTITY_PARROT_EAT = getRegisteredSoundEvent("entity.parrot.eat"); + ENTITY_PARROT_FLY = getRegisteredSoundEvent("entity.parrot.fly"); + ENTITY_PARROT_HURT = getRegisteredSoundEvent("entity.parrot.hurt"); + E_PARROT_IM_BLAZE = getRegisteredSoundEvent("entity.parrot.imitate.blaze"); + E_PARROT_IM_CREEPER = getRegisteredSoundEvent("entity.parrot.imitate.creeper"); + E_PARROT_IM_ELDER_GUARDIAN = getRegisteredSoundEvent("entity.parrot.imitate.elder_guardian"); + E_PARROT_IM_ENDERDRAGON = getRegisteredSoundEvent("entity.parrot.imitate.enderdragon"); + E_PARROT_IM_ENDERMAN = getRegisteredSoundEvent("entity.parrot.imitate.enderman"); + E_PARROT_IM_ENDERMITE = getRegisteredSoundEvent("entity.parrot.imitate.endermite"); + E_PARROT_IM_EVOCATION_ILLAGER = getRegisteredSoundEvent("entity.parrot.imitate.evocation_illager"); + E_PARROT_IM_GHAST = getRegisteredSoundEvent("entity.parrot.imitate.ghast"); + E_PARROT_IM_HUSK = getRegisteredSoundEvent("entity.parrot.imitate.husk"); + E_PARROT_IM_ILLUSION_ILLAGER = getRegisteredSoundEvent("entity.parrot.imitate.illusion_illager"); + E_PARROT_IM_MAGMACUBE = getRegisteredSoundEvent("entity.parrot.imitate.magmacube"); + E_PARROT_IM_POLAR_BEAR = getRegisteredSoundEvent("entity.parrot.imitate.polar_bear"); + E_PARROT_IM_SHULKER = getRegisteredSoundEvent("entity.parrot.imitate.shulker"); + E_PARROT_IM_SILVERFISH = getRegisteredSoundEvent("entity.parrot.imitate.silverfish"); + E_PARROT_IM_SKELETON = getRegisteredSoundEvent("entity.parrot.imitate.skeleton"); + E_PARROT_IM_SLIME = getRegisteredSoundEvent("entity.parrot.imitate.slime"); + E_PARROT_IM_SPIDER = getRegisteredSoundEvent("entity.parrot.imitate.spider"); + E_PARROT_IM_STRAY = getRegisteredSoundEvent("entity.parrot.imitate.stray"); + E_PARROT_IM_VEX = getRegisteredSoundEvent("entity.parrot.imitate.vex"); + E_PARROT_IM_VINDICATION_ILLAGER = getRegisteredSoundEvent("entity.parrot.imitate.vindication_illager"); + E_PARROT_IM_WITCH = getRegisteredSoundEvent("entity.parrot.imitate.witch"); + E_PARROT_IM_WITHER = getRegisteredSoundEvent("entity.parrot.imitate.wither"); + E_PARROT_IM_WITHER_SKELETON = getRegisteredSoundEvent("entity.parrot.imitate.wither_skeleton"); + E_PARROT_IM_WOLF = getRegisteredSoundEvent("entity.parrot.imitate.wolf"); + E_PARROT_IM_ZOMBIE = getRegisteredSoundEvent("entity.parrot.imitate.zombie"); + E_PARROT_IM_ZOMBIE_PIGMAN = getRegisteredSoundEvent("entity.parrot.imitate.zombie_pigman"); + E_PARROT_IM_ZOMBIE_VILLAGER = getRegisteredSoundEvent("entity.parrot.imitate.zombie_villager"); + ENTITY_PARROT_STEP = getRegisteredSoundEvent("entity.parrot.step"); + ENTITY_PIG_AMBIENT = getRegisteredSoundEvent("entity.pig.ambient"); + ENTITY_PIG_DEATH = getRegisteredSoundEvent("entity.pig.death"); + ENTITY_PIG_HURT = getRegisteredSoundEvent("entity.pig.hurt"); + ENTITY_PIG_SADDLE = getRegisteredSoundEvent("entity.pig.saddle"); + ENTITY_PIG_STEP = getRegisteredSoundEvent("entity.pig.step"); + BLOCK_PISTON_CONTRACT = getRegisteredSoundEvent("block.piston.contract"); + BLOCK_PISTON_EXTEND = getRegisteredSoundEvent("block.piston.extend"); + ENTITY_PLAYER_ATTACK_CRIT = getRegisteredSoundEvent("entity.player.attack.crit"); + ENTITY_PLAYER_ATTACK_KNOCKBACK = getRegisteredSoundEvent("entity.player.attack.knockback"); + ENTITY_PLAYER_ATTACK_NODAMAGE = getRegisteredSoundEvent("entity.player.attack.nodamage"); + ENTITY_PLAYER_ATTACK_STRONG = getRegisteredSoundEvent("entity.player.attack.strong"); + ENTITY_PLAYER_ATTACK_SWEEP = getRegisteredSoundEvent("entity.player.attack.sweep"); + ENTITY_PLAYER_ATTACK_WEAK = getRegisteredSoundEvent("entity.player.attack.weak"); + ENTITY_PLAYER_BIG_FALL = getRegisteredSoundEvent("entity.player.big_fall"); + ENTITY_PLAYER_BREATH = getRegisteredSoundEvent("entity.player.breath"); + ENTITY_PLAYER_BURP = getRegisteredSoundEvent("entity.player.burp"); + ENTITY_PLAYER_DEATH = getRegisteredSoundEvent("entity.player.death"); + ENTITY_PLAYER_HURT = getRegisteredSoundEvent("entity.player.hurt"); + ENTITY_PLAYER_HURT_DROWN = getRegisteredSoundEvent("entity.player.hurt_drown"); + ENTITY_PLAYER_HURT_ON_FIRE = getRegisteredSoundEvent("entity.player.hurt_on_fire"); + ENTITY_PLAYER_LEVELUP = getRegisteredSoundEvent("entity.player.levelup"); + ENTITY_PLAYER_SMALL_FALL = getRegisteredSoundEvent("entity.player.small_fall"); + ENTITY_PLAYER_SPLASH = getRegisteredSoundEvent("entity.player.splash"); + ENTITY_PLAYER_SWIM = getRegisteredSoundEvent("entity.player.swim"); + ENTITY_POLAR_BEAR_AMBIENT = getRegisteredSoundEvent("entity.polar_bear.ambient"); + ENTITY_POLAR_BEAR_BABY_AMBIENT = getRegisteredSoundEvent("entity.polar_bear.baby_ambient"); + ENTITY_POLAR_BEAR_DEATH = getRegisteredSoundEvent("entity.polar_bear.death"); + ENTITY_POLAR_BEAR_HURT = getRegisteredSoundEvent("entity.polar_bear.hurt"); + ENTITY_POLAR_BEAR_STEP = getRegisteredSoundEvent("entity.polar_bear.step"); + ENTITY_POLAR_BEAR_WARNING = getRegisteredSoundEvent("entity.polar_bear.warning"); + BLOCK_PORTAL_AMBIENT = getRegisteredSoundEvent("block.portal.ambient"); + BLOCK_PORTAL_TRAVEL = getRegisteredSoundEvent("block.portal.travel"); + BLOCK_PORTAL_TRIGGER = getRegisteredSoundEvent("block.portal.trigger"); + ENTITY_RABBIT_AMBIENT = getRegisteredSoundEvent("entity.rabbit.ambient"); + ENTITY_RABBIT_ATTACK = getRegisteredSoundEvent("entity.rabbit.attack"); + ENTITY_RABBIT_DEATH = getRegisteredSoundEvent("entity.rabbit.death"); + ENTITY_RABBIT_HURT = getRegisteredSoundEvent("entity.rabbit.hurt"); + ENTITY_RABBIT_JUMP = getRegisteredSoundEvent("entity.rabbit.jump"); + RECORD_11 = getRegisteredSoundEvent("record.11"); + RECORD_13 = getRegisteredSoundEvent("record.13"); + RECORD_BLOCKS = getRegisteredSoundEvent("record.blocks"); + RECORD_CAT = getRegisteredSoundEvent("record.cat"); + RECORD_CHIRP = getRegisteredSoundEvent("record.chirp"); + RECORD_FAR = getRegisteredSoundEvent("record.far"); + RECORD_MALL = getRegisteredSoundEvent("record.mall"); + RECORD_MELLOHI = getRegisteredSoundEvent("record.mellohi"); + RECORD_STAL = getRegisteredSoundEvent("record.stal"); + RECORD_STRAD = getRegisteredSoundEvent("record.strad"); + RECORD_WAIT = getRegisteredSoundEvent("record.wait"); + RECORD_WARD = getRegisteredSoundEvent("record.ward"); + BLOCK_REDSTONE_TORCH_BURNOUT = getRegisteredSoundEvent("block.redstone_torch.burnout"); + BLOCK_SAND_BREAK = getRegisteredSoundEvent("block.sand.break"); + BLOCK_SAND_FALL = getRegisteredSoundEvent("block.sand.fall"); + BLOCK_SAND_HIT = getRegisteredSoundEvent("block.sand.hit"); + BLOCK_SAND_PLACE = getRegisteredSoundEvent("block.sand.place"); + BLOCK_SAND_STEP = getRegisteredSoundEvent("block.sand.step"); + ENTITY_SHEEP_AMBIENT = getRegisteredSoundEvent("entity.sheep.ambient"); + ENTITY_SHEEP_DEATH = getRegisteredSoundEvent("entity.sheep.death"); + ENTITY_SHEEP_HURT = getRegisteredSoundEvent("entity.sheep.hurt"); + ENTITY_SHEEP_SHEAR = getRegisteredSoundEvent("entity.sheep.shear"); + ENTITY_SHEEP_STEP = getRegisteredSoundEvent("entity.sheep.step"); + ITEM_SHIELD_BLOCK = getRegisteredSoundEvent("item.shield.block"); + ITEM_SHIELD_BREAK = getRegisteredSoundEvent("item.shield.break"); + ITEM_SHOVEL_FLATTEN = getRegisteredSoundEvent("item.shovel.flatten"); + ENTITY_SHULKER_AMBIENT = getRegisteredSoundEvent("entity.shulker.ambient"); + BLOCK_SHULKER_BOX_CLOSE = getRegisteredSoundEvent("block.shulker_box.close"); + BLOCK_SHULKER_BOX_OPEN = getRegisteredSoundEvent("block.shulker_box.open"); + ENTITY_SHULKER_BULLET_HIT = getRegisteredSoundEvent("entity.shulker_bullet.hit"); + ENTITY_SHULKER_BULLET_HURT = getRegisteredSoundEvent("entity.shulker_bullet.hurt"); + ENTITY_SHULKER_CLOSE = getRegisteredSoundEvent("entity.shulker.close"); + ENTITY_SHULKER_DEATH = getRegisteredSoundEvent("entity.shulker.death"); + ENTITY_SHULKER_HURT = getRegisteredSoundEvent("entity.shulker.hurt"); + ENTITY_SHULKER_HURT_CLOSED = getRegisteredSoundEvent("entity.shulker.hurt_closed"); + ENTITY_SHULKER_OPEN = getRegisteredSoundEvent("entity.shulker.open"); + ENTITY_SHULKER_SHOOT = getRegisteredSoundEvent("entity.shulker.shoot"); + ENTITY_SHULKER_TELEPORT = getRegisteredSoundEvent("entity.shulker.teleport"); + ENTITY_SILVERFISH_AMBIENT = getRegisteredSoundEvent("entity.silverfish.ambient"); + ENTITY_SILVERFISH_DEATH = getRegisteredSoundEvent("entity.silverfish.death"); + ENTITY_SILVERFISH_HURT = getRegisteredSoundEvent("entity.silverfish.hurt"); + ENTITY_SILVERFISH_STEP = getRegisteredSoundEvent("entity.silverfish.step"); + ENTITY_SKELETON_AMBIENT = getRegisteredSoundEvent("entity.skeleton.ambient"); + ENTITY_SKELETON_DEATH = getRegisteredSoundEvent("entity.skeleton.death"); + ENTITY_SKELETON_HORSE_AMBIENT = getRegisteredSoundEvent("entity.skeleton_horse.ambient"); + ENTITY_SKELETON_HORSE_DEATH = getRegisteredSoundEvent("entity.skeleton_horse.death"); + ENTITY_SKELETON_HORSE_HURT = getRegisteredSoundEvent("entity.skeleton_horse.hurt"); + ENTITY_SKELETON_HURT = getRegisteredSoundEvent("entity.skeleton.hurt"); + ENTITY_SKELETON_SHOOT = getRegisteredSoundEvent("entity.skeleton.shoot"); + ENTITY_SKELETON_STEP = getRegisteredSoundEvent("entity.skeleton.step"); + ENTITY_SLIME_ATTACK = getRegisteredSoundEvent("entity.slime.attack"); + BLOCK_SLIME_BREAK = getRegisteredSoundEvent("block.slime.break"); + ENTITY_SLIME_DEATH = getRegisteredSoundEvent("entity.slime.death"); + BLOCK_SLIME_FALL = getRegisteredSoundEvent("block.slime.fall"); + BLOCK_SLIME_HIT = getRegisteredSoundEvent("block.slime.hit"); + ENTITY_SLIME_HURT = getRegisteredSoundEvent("entity.slime.hurt"); + ENTITY_SLIME_JUMP = getRegisteredSoundEvent("entity.slime.jump"); + BLOCK_SLIME_PLACE = getRegisteredSoundEvent("block.slime.place"); + ENTITY_SLIME_SQUISH = getRegisteredSoundEvent("entity.slime.squish"); + BLOCK_SLIME_STEP = getRegisteredSoundEvent("block.slime.step"); + ENTITY_SMALL_MAGMACUBE_DEATH = getRegisteredSoundEvent("entity.small_magmacube.death"); + ENTITY_SMALL_MAGMACUBE_HURT = getRegisteredSoundEvent("entity.small_magmacube.hurt"); + ENTITY_SMALL_MAGMACUBE_SQUISH = getRegisteredSoundEvent("entity.small_magmacube.squish"); + ENTITY_SMALL_SLIME_DEATH = getRegisteredSoundEvent("entity.small_slime.death"); + ENTITY_SMALL_SLIME_HURT = getRegisteredSoundEvent("entity.small_slime.hurt"); + ENTITY_SMALL_SLIME_JUMP = getRegisteredSoundEvent("entity.small_slime.jump"); + ENTITY_SMALL_SLIME_SQUISH = getRegisteredSoundEvent("entity.small_slime.squish"); + ENTITY_SNOWBALL_THROW = getRegisteredSoundEvent("entity.snowball.throw"); + ENTITY_SNOWMAN_AMBIENT = getRegisteredSoundEvent("entity.snowman.ambient"); + ENTITY_SNOWMAN_DEATH = getRegisteredSoundEvent("entity.snowman.death"); + ENTITY_SNOWMAN_HURT = getRegisteredSoundEvent("entity.snowman.hurt"); + ENTITY_SNOWMAN_SHOOT = getRegisteredSoundEvent("entity.snowman.shoot"); + BLOCK_SNOW_BREAK = getRegisteredSoundEvent("block.snow.break"); + BLOCK_SNOW_FALL = getRegisteredSoundEvent("block.snow.fall"); + BLOCK_SNOW_HIT = getRegisteredSoundEvent("block.snow.hit"); + BLOCK_SNOW_PLACE = getRegisteredSoundEvent("block.snow.place"); + BLOCK_SNOW_STEP = getRegisteredSoundEvent("block.snow.step"); + ENTITY_SPIDER_AMBIENT = getRegisteredSoundEvent("entity.spider.ambient"); + ENTITY_SPIDER_DEATH = getRegisteredSoundEvent("entity.spider.death"); + ENTITY_SPIDER_HURT = getRegisteredSoundEvent("entity.spider.hurt"); + ENTITY_SPIDER_STEP = getRegisteredSoundEvent("entity.spider.step"); + ENTITY_SPLASH_POTION_BREAK = getRegisteredSoundEvent("entity.splash_potion.break"); + ENTITY_SPLASH_POTION_THROW = getRegisteredSoundEvent("entity.splash_potion.throw"); + ENTITY_SQUID_AMBIENT = getRegisteredSoundEvent("entity.squid.ambient"); + ENTITY_SQUID_DEATH = getRegisteredSoundEvent("entity.squid.death"); + ENTITY_SQUID_HURT = getRegisteredSoundEvent("entity.squid.hurt"); + BLOCK_STONE_BREAK = getRegisteredSoundEvent("block.stone.break"); + BLOCK_STONE_BUTTON_CLICK_OFF = getRegisteredSoundEvent("block.stone_button.click_off"); + BLOCK_STONE_BUTTON_CLICK_ON = getRegisteredSoundEvent("block.stone_button.click_on"); + BLOCK_STONE_FALL = getRegisteredSoundEvent("block.stone.fall"); + BLOCK_STONE_HIT = getRegisteredSoundEvent("block.stone.hit"); + BLOCK_STONE_PLACE = getRegisteredSoundEvent("block.stone.place"); + BLOCK_STONE_PRESSPLATE_CLICK_OFF = getRegisteredSoundEvent("block.stone_pressureplate.click_off"); + BLOCK_STONE_PRESSPLATE_CLICK_ON = getRegisteredSoundEvent("block.stone_pressureplate.click_on"); + BLOCK_STONE_STEP = getRegisteredSoundEvent("block.stone.step"); + ENTITY_STRAY_AMBIENT = getRegisteredSoundEvent("entity.stray.ambient"); + ENTITY_STRAY_DEATH = getRegisteredSoundEvent("entity.stray.death"); + ENTITY_STRAY_HURT = getRegisteredSoundEvent("entity.stray.hurt"); + ENTITY_STRAY_STEP = getRegisteredSoundEvent("entity.stray.step"); + ENCHANT_THORNS_HIT = getRegisteredSoundEvent("enchant.thorns.hit"); + ENTITY_TNT_PRIMED = getRegisteredSoundEvent("entity.tnt.primed"); + ITEM_TOTEM_USE = getRegisteredSoundEvent("item.totem.use"); + BLOCK_TRIPWIRE_ATTACH = getRegisteredSoundEvent("block.tripwire.attach"); + BLOCK_TRIPWIRE_CLICK_OFF = getRegisteredSoundEvent("block.tripwire.click_off"); + BLOCK_TRIPWIRE_CLICK_ON = getRegisteredSoundEvent("block.tripwire.click_on"); + BLOCK_TRIPWIRE_DETACH = getRegisteredSoundEvent("block.tripwire.detach"); + UI_BUTTON_CLICK = getRegisteredSoundEvent("ui.button.click"); + UI_TOAST_IN = getRegisteredSoundEvent("ui.toast.in"); + UI_TOAST_OUT = getRegisteredSoundEvent("ui.toast.out"); + UI_TOAST_CHALLENGE_COMPLETE = getRegisteredSoundEvent("ui.toast.challenge_complete"); + ENTITY_VEX_AMBIENT = getRegisteredSoundEvent("entity.vex.ambient"); + ENTITY_VEX_CHARGE = getRegisteredSoundEvent("entity.vex.charge"); + ENTITY_VEX_DEATH = getRegisteredSoundEvent("entity.vex.death"); + ENTITY_VEX_HURT = getRegisteredSoundEvent("entity.vex.hurt"); + ENTITY_VILLAGER_AMBIENT = getRegisteredSoundEvent("entity.villager.ambient"); + ENTITY_VILLAGER_DEATH = getRegisteredSoundEvent("entity.villager.death"); + ENTITY_VILLAGER_HURT = getRegisteredSoundEvent("entity.villager.hurt"); + ENTITY_VILLAGER_NO = getRegisteredSoundEvent("entity.villager.no"); + ENTITY_VILLAGER_TRADING = getRegisteredSoundEvent("entity.villager.trading"); + ENTITY_VILLAGER_YES = getRegisteredSoundEvent("entity.villager.yes"); + VINDICATION_ILLAGER_AMBIENT = getRegisteredSoundEvent("entity.vindication_illager.ambient"); + VINDICATION_ILLAGER_DEATH = getRegisteredSoundEvent("entity.vindication_illager.death"); + ENTITY_VINDICATION_ILLAGER_HURT = getRegisteredSoundEvent("entity.vindication_illager.hurt"); + BLOCK_WATERLILY_PLACE = getRegisteredSoundEvent("block.waterlily.place"); + BLOCK_WATER_AMBIENT = getRegisteredSoundEvent("block.water.ambient"); + WEATHER_RAIN = getRegisteredSoundEvent("weather.rain"); + WEATHER_RAIN_ABOVE = getRegisteredSoundEvent("weather.rain.above"); + ENTITY_WITCH_AMBIENT = getRegisteredSoundEvent("entity.witch.ambient"); + ENTITY_WITCH_DEATH = getRegisteredSoundEvent("entity.witch.death"); + ENTITY_WITCH_DRINK = getRegisteredSoundEvent("entity.witch.drink"); + ENTITY_WITCH_HURT = getRegisteredSoundEvent("entity.witch.hurt"); + ENTITY_WITCH_THROW = getRegisteredSoundEvent("entity.witch.throw"); + ENTITY_WITHER_AMBIENT = getRegisteredSoundEvent("entity.wither.ambient"); + ENTITY_WITHER_BREAK_BLOCK = getRegisteredSoundEvent("entity.wither.break_block"); + ENTITY_WITHER_DEATH = getRegisteredSoundEvent("entity.wither.death"); + ENTITY_WITHER_HURT = getRegisteredSoundEvent("entity.wither.hurt"); + ENTITY_WITHER_SHOOT = getRegisteredSoundEvent("entity.wither.shoot"); + ENTITY_WITHER_SKELETON_AMBIENT = getRegisteredSoundEvent("entity.wither_skeleton.ambient"); + ENTITY_WITHER_SKELETON_DEATH = getRegisteredSoundEvent("entity.wither_skeleton.death"); + ENTITY_WITHER_SKELETON_HURT = getRegisteredSoundEvent("entity.wither_skeleton.hurt"); + ENTITY_WITHER_SKELETON_STEP = getRegisteredSoundEvent("entity.wither_skeleton.step"); + ENTITY_WITHER_SPAWN = getRegisteredSoundEvent("entity.wither.spawn"); + ENTITY_WOLF_AMBIENT = getRegisteredSoundEvent("entity.wolf.ambient"); + ENTITY_WOLF_DEATH = getRegisteredSoundEvent("entity.wolf.death"); + ENTITY_WOLF_GROWL = getRegisteredSoundEvent("entity.wolf.growl"); + ENTITY_WOLF_HOWL = getRegisteredSoundEvent("entity.wolf.howl"); + ENTITY_WOLF_HURT = getRegisteredSoundEvent("entity.wolf.hurt"); + ENTITY_WOLF_PANT = getRegisteredSoundEvent("entity.wolf.pant"); + ENTITY_WOLF_SHAKE = getRegisteredSoundEvent("entity.wolf.shake"); + ENTITY_WOLF_STEP = getRegisteredSoundEvent("entity.wolf.step"); + ENTITY_WOLF_WHINE = getRegisteredSoundEvent("entity.wolf.whine"); + BLOCK_WOODEN_DOOR_CLOSE = getRegisteredSoundEvent("block.wooden_door.close"); + BLOCK_WOODEN_DOOR_OPEN = getRegisteredSoundEvent("block.wooden_door.open"); + BLOCK_WOODEN_TRAPDOOR_CLOSE = getRegisteredSoundEvent("block.wooden_trapdoor.close"); + BLOCK_WOODEN_TRAPDOOR_OPEN = getRegisteredSoundEvent("block.wooden_trapdoor.open"); + BLOCK_WOOD_BREAK = getRegisteredSoundEvent("block.wood.break"); + BLOCK_WOOD_BUTTON_CLICK_OFF = getRegisteredSoundEvent("block.wood_button.click_off"); + BLOCK_WOOD_BUTTON_CLICK_ON = getRegisteredSoundEvent("block.wood_button.click_on"); + BLOCK_WOOD_FALL = getRegisteredSoundEvent("block.wood.fall"); + BLOCK_WOOD_HIT = getRegisteredSoundEvent("block.wood.hit"); + BLOCK_WOOD_PLACE = getRegisteredSoundEvent("block.wood.place"); + BLOCK_WOOD_PRESSPLATE_CLICK_OFF = getRegisteredSoundEvent("block.wood_pressureplate.click_off"); + BLOCK_WOOD_PRESSPLATE_CLICK_ON = getRegisteredSoundEvent("block.wood_pressureplate.click_on"); + BLOCK_WOOD_STEP = getRegisteredSoundEvent("block.wood.step"); + ENTITY_ZOMBIE_AMBIENT = getRegisteredSoundEvent("entity.zombie.ambient"); + ENTITY_ZOMBIE_ATTACK_DOOR_WOOD = getRegisteredSoundEvent("entity.zombie.attack_door_wood"); + ENTITY_ZOMBIE_ATTACK_IRON_DOOR = getRegisteredSoundEvent("entity.zombie.attack_iron_door"); + ENTITY_ZOMBIE_BREAK_DOOR_WOOD = getRegisteredSoundEvent("entity.zombie.break_door_wood"); + ENTITY_ZOMBIE_DEATH = getRegisteredSoundEvent("entity.zombie.death"); + ENTITY_ZOMBIE_HORSE_AMBIENT = getRegisteredSoundEvent("entity.zombie_horse.ambient"); + ENTITY_ZOMBIE_HORSE_DEATH = getRegisteredSoundEvent("entity.zombie_horse.death"); + ENTITY_ZOMBIE_HORSE_HURT = getRegisteredSoundEvent("entity.zombie_horse.hurt"); + ENTITY_ZOMBIE_HURT = getRegisteredSoundEvent("entity.zombie.hurt"); + ENTITY_ZOMBIE_INFECT = getRegisteredSoundEvent("entity.zombie.infect"); + ENTITY_ZOMBIE_PIG_AMBIENT = getRegisteredSoundEvent("entity.zombie_pig.ambient"); + ENTITY_ZOMBIE_PIG_ANGRY = getRegisteredSoundEvent("entity.zombie_pig.angry"); + ENTITY_ZOMBIE_PIG_DEATH = getRegisteredSoundEvent("entity.zombie_pig.death"); + ENTITY_ZOMBIE_PIG_HURT = getRegisteredSoundEvent("entity.zombie_pig.hurt"); + ENTITY_ZOMBIE_STEP = getRegisteredSoundEvent("entity.zombie.step"); + ENTITY_ZOMBIE_VILLAGER_AMBIENT = getRegisteredSoundEvent("entity.zombie_villager.ambient"); + ENTITY_ZOMBIE_VILLAGER_CONVERTED = getRegisteredSoundEvent("entity.zombie_villager.converted"); + ENTITY_ZOMBIE_VILLAGER_CURE = getRegisteredSoundEvent("entity.zombie_villager.cure"); + ENTITY_ZOMBIE_VILLAGER_DEATH = getRegisteredSoundEvent("entity.zombie_villager.death"); + ENTITY_ZOMBIE_VILLAGER_HURT = getRegisteredSoundEvent("entity.zombie_villager.hurt"); + ENTITY_ZOMBIE_VILLAGER_STEP = getRegisteredSoundEvent("entity.zombie_villager.step"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/init/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/init/package-info.java new file mode 100644 index 0000000..2d1c506 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/init/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.init; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ClickType.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ClickType.java new file mode 100644 index 0000000..8dd0d07 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ClickType.java @@ -0,0 +1,12 @@ +package net.minecraft.inventory; + +public enum ClickType +{ + PICKUP, + QUICK_MOVE, + SWAP, + CLONE, + THROW, + QUICK_CRAFT, + PICKUP_ALL; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/Container.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/Container.java new file mode 100644 index 0000000..6764a84 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/Container.java @@ -0,0 +1,883 @@ +package net.minecraft.inventory; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class Container +{ + /** the list of all items(stacks) for the corresponding slot */ + public NonNullList inventoryItemStacks = NonNullList.create(); + /** The list of {@link Slots} in this {@code Container}. */ + public List inventorySlots = Lists.newArrayList(); + public int windowId; + @SideOnly(Side.CLIENT) + private short transactionID; + /** The current drag mode (0 : evenly split, 1 : one item by slot, 2 : not used ?) */ + private int dragMode = -1; + /** The current drag event (0 : start, 1 : add slot : 2 : end) */ + private int dragEvent; + /** The list of slots where the itemstack holds will be distributed */ + private final Set dragSlots = Sets.newHashSet(); + /** list of all people that need to be notified when this craftinventory changes */ + protected List listeners = Lists.newArrayList(); + private final Set playerList = Sets.newHashSet(); + + /** + * Adds an item slot to this container + */ + protected Slot addSlotToContainer(Slot slotIn) + { + slotIn.slotNumber = this.inventorySlots.size(); + this.inventorySlots.add(slotIn); + this.inventoryItemStacks.add(ItemStack.EMPTY); + return slotIn; + } + + public void addListener(IContainerListener listener) + { + if (this.listeners.contains(listener)) + { + throw new IllegalArgumentException("Listener already listening"); + } + else + { + this.listeners.add(listener); + listener.sendAllContents(this, this.getInventory()); + this.detectAndSendChanges(); + } + } + + /** + * returns a list if itemStacks, for each slot. + */ + public NonNullList getInventory() + { + NonNullList nonnulllist = NonNullList.create(); + + for (int i = 0; i < this.inventorySlots.size(); ++i) + { + nonnulllist.add(((Slot)this.inventorySlots.get(i)).getStack()); + } + + return nonnulllist; + } + + /** + * Remove the given Listener. Method name is for legacy. + */ + @SideOnly(Side.CLIENT) + public void removeListener(IContainerListener listener) + { + this.listeners.remove(listener); + } + + /** + * Looks for changes made in the container, sends them to every listener. + */ + public void detectAndSendChanges() + { + for (int i = 0; i < this.inventorySlots.size(); ++i) + { + ItemStack itemstack = ((Slot)this.inventorySlots.get(i)).getStack(); + ItemStack itemstack1 = this.inventoryItemStacks.get(i); + + if (!ItemStack.areItemStacksEqual(itemstack1, itemstack)) + { + boolean clientStackChanged = !ItemStack.areItemStacksEqualUsingNBTShareTag(itemstack1, itemstack); + itemstack1 = itemstack.isEmpty() ? ItemStack.EMPTY : itemstack.copy(); + this.inventoryItemStacks.set(i, itemstack1); + + if (clientStackChanged) + for (int j = 0; j < this.listeners.size(); ++j) + { + ((IContainerListener)this.listeners.get(j)).sendSlotContents(this, i, itemstack1); + } + } + } + } + + /** + * Handles the given Button-click on the server, currently only used by enchanting. Name is for legacy. + */ + public boolean enchantItem(EntityPlayer playerIn, int id) + { + return false; + } + + @Nullable + public Slot getSlotFromInventory(IInventory inv, int slotIn) + { + for (int i = 0; i < this.inventorySlots.size(); ++i) + { + Slot slot = this.inventorySlots.get(i); + + if (slot.isHere(inv, slotIn)) + { + return slot; + } + } + + return null; + } + + public Slot getSlot(int slotId) + { + return this.inventorySlots.get(slotId); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + Slot slot = this.inventorySlots.get(index); + return slot != null ? slot.getStack() : ItemStack.EMPTY; + } + + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player) + { + ItemStack itemstack = ItemStack.EMPTY; + InventoryPlayer inventoryplayer = player.inventory; + + if (clickTypeIn == ClickType.QUICK_CRAFT) + { + int j1 = this.dragEvent; + this.dragEvent = getDragEvent(dragType); + + if ((j1 != 1 || this.dragEvent != 2) && j1 != this.dragEvent) + { + this.resetDrag(); + } + else if (inventoryplayer.getItemStack().isEmpty()) + { + this.resetDrag(); + } + else if (this.dragEvent == 0) + { + this.dragMode = extractDragMode(dragType); + + if (isValidDragMode(this.dragMode, player)) + { + this.dragEvent = 1; + this.dragSlots.clear(); + } + else + { + this.resetDrag(); + } + } + else if (this.dragEvent == 1) + { + Slot slot7 = this.inventorySlots.get(slotId); + ItemStack itemstack12 = inventoryplayer.getItemStack(); + + if (slot7 != null && canAddItemToSlot(slot7, itemstack12, true) && slot7.isItemValid(itemstack12) && (this.dragMode == 2 || itemstack12.getCount() > this.dragSlots.size()) && this.canDragIntoSlot(slot7)) + { + this.dragSlots.add(slot7); + } + } + else if (this.dragEvent == 2) + { + if (!this.dragSlots.isEmpty()) + { + ItemStack itemstack9 = inventoryplayer.getItemStack().copy(); + int k1 = inventoryplayer.getItemStack().getCount(); + + for (Slot slot8 : this.dragSlots) + { + ItemStack itemstack13 = inventoryplayer.getItemStack(); + + if (slot8 != null && canAddItemToSlot(slot8, itemstack13, true) && slot8.isItemValid(itemstack13) && (this.dragMode == 2 || itemstack13.getCount() >= this.dragSlots.size()) && this.canDragIntoSlot(slot8)) + { + ItemStack itemstack14 = itemstack9.copy(); + int j3 = slot8.getHasStack() ? slot8.getStack().getCount() : 0; + computeStackSize(this.dragSlots, this.dragMode, itemstack14, j3); + int k3 = Math.min(itemstack14.getMaxStackSize(), slot8.getItemStackLimit(itemstack14)); + + if (itemstack14.getCount() > k3) + { + itemstack14.setCount(k3); + } + + k1 -= itemstack14.getCount() - j3; + slot8.putStack(itemstack14); + } + } + + itemstack9.setCount(k1); + inventoryplayer.setItemStack(itemstack9); + } + + this.resetDrag(); + } + else + { + this.resetDrag(); + } + } + else if (this.dragEvent != 0) + { + this.resetDrag(); + } + else if ((clickTypeIn == ClickType.PICKUP || clickTypeIn == ClickType.QUICK_MOVE) && (dragType == 0 || dragType == 1)) + { + if (slotId == -999) + { + if (!inventoryplayer.getItemStack().isEmpty()) + { + if (dragType == 0) + { + player.dropItem(inventoryplayer.getItemStack(), true); + inventoryplayer.setItemStack(ItemStack.EMPTY); + } + + if (dragType == 1) + { + player.dropItem(inventoryplayer.getItemStack().splitStack(1), true); + } + } + } + else if (clickTypeIn == ClickType.QUICK_MOVE) + { + if (slotId < 0) + { + return ItemStack.EMPTY; + } + + Slot slot5 = this.inventorySlots.get(slotId); + + if (slot5 == null || !slot5.canTakeStack(player)) + { + return ItemStack.EMPTY; + } + + for (ItemStack itemstack7 = this.transferStackInSlot(player, slotId); !itemstack7.isEmpty() && ItemStack.areItemsEqual(slot5.getStack(), itemstack7); itemstack7 = this.transferStackInSlot(player, slotId)) + { + itemstack = itemstack7.copy(); + } + } + else + { + if (slotId < 0) + { + return ItemStack.EMPTY; + } + + Slot slot6 = this.inventorySlots.get(slotId); + + if (slot6 != null) + { + ItemStack itemstack8 = slot6.getStack(); + ItemStack itemstack11 = inventoryplayer.getItemStack(); + + if (!itemstack8.isEmpty()) + { + itemstack = itemstack8.copy(); + } + + if (itemstack8.isEmpty()) + { + if (!itemstack11.isEmpty() && slot6.isItemValid(itemstack11)) + { + int i3 = dragType == 0 ? itemstack11.getCount() : 1; + + if (i3 > slot6.getItemStackLimit(itemstack11)) + { + i3 = slot6.getItemStackLimit(itemstack11); + } + + slot6.putStack(itemstack11.splitStack(i3)); + } + } + else if (slot6.canTakeStack(player)) + { + if (itemstack11.isEmpty()) + { + if (itemstack8.isEmpty()) + { + slot6.putStack(ItemStack.EMPTY); + inventoryplayer.setItemStack(ItemStack.EMPTY); + } + else + { + int l2 = dragType == 0 ? itemstack8.getCount() : (itemstack8.getCount() + 1) / 2; + inventoryplayer.setItemStack(slot6.decrStackSize(l2)); + + if (itemstack8.isEmpty()) + { + slot6.putStack(ItemStack.EMPTY); + } + + slot6.onTake(player, inventoryplayer.getItemStack()); + } + } + else if (slot6.isItemValid(itemstack11)) + { + if (itemstack8.getItem() == itemstack11.getItem() && itemstack8.getMetadata() == itemstack11.getMetadata() && ItemStack.areItemStackTagsEqual(itemstack8, itemstack11)) + { + int k2 = dragType == 0 ? itemstack11.getCount() : 1; + + if (k2 > slot6.getItemStackLimit(itemstack11) - itemstack8.getCount()) + { + k2 = slot6.getItemStackLimit(itemstack11) - itemstack8.getCount(); + } + + if (k2 > itemstack11.getMaxStackSize() - itemstack8.getCount()) + { + k2 = itemstack11.getMaxStackSize() - itemstack8.getCount(); + } + + itemstack11.shrink(k2); + itemstack8.grow(k2); + } + else if (itemstack11.getCount() <= slot6.getItemStackLimit(itemstack11)) + { + slot6.putStack(itemstack11); + inventoryplayer.setItemStack(itemstack8); + } + } + else if (itemstack8.getItem() == itemstack11.getItem() && itemstack11.getMaxStackSize() > 1 && (!itemstack8.getHasSubtypes() || itemstack8.getMetadata() == itemstack11.getMetadata()) && ItemStack.areItemStackTagsEqual(itemstack8, itemstack11) && !itemstack8.isEmpty()) + { + int j2 = itemstack8.getCount(); + + if (j2 + itemstack11.getCount() <= itemstack11.getMaxStackSize()) + { + itemstack11.grow(j2); + itemstack8 = slot6.decrStackSize(j2); + + if (itemstack8.isEmpty()) + { + slot6.putStack(ItemStack.EMPTY); + } + + slot6.onTake(player, inventoryplayer.getItemStack()); + } + } + } + + slot6.onSlotChanged(); + } + } + } + else if (clickTypeIn == ClickType.SWAP && dragType >= 0 && dragType < 9) + { + Slot slot4 = this.inventorySlots.get(slotId); + ItemStack itemstack6 = inventoryplayer.getStackInSlot(dragType); + ItemStack itemstack10 = slot4.getStack(); + + if (!itemstack6.isEmpty() || !itemstack10.isEmpty()) + { + if (itemstack6.isEmpty()) + { + if (slot4.canTakeStack(player)) + { + inventoryplayer.setInventorySlotContents(dragType, itemstack10); + slot4.onSwapCraft(itemstack10.getCount()); + slot4.putStack(ItemStack.EMPTY); + slot4.onTake(player, itemstack10); + } + } + else if (itemstack10.isEmpty()) + { + if (slot4.isItemValid(itemstack6)) + { + int l1 = slot4.getItemStackLimit(itemstack6); + + if (itemstack6.getCount() > l1) + { + slot4.putStack(itemstack6.splitStack(l1)); + } + else + { + slot4.putStack(itemstack6); + inventoryplayer.setInventorySlotContents(dragType, ItemStack.EMPTY); + } + } + } + else if (slot4.canTakeStack(player) && slot4.isItemValid(itemstack6)) + { + int i2 = slot4.getItemStackLimit(itemstack6); + + if (itemstack6.getCount() > i2) + { + slot4.putStack(itemstack6.splitStack(i2)); + slot4.onTake(player, itemstack10); + + if (!inventoryplayer.addItemStackToInventory(itemstack10)) + { + player.dropItem(itemstack10, true); + } + } + else + { + slot4.putStack(itemstack6); + inventoryplayer.setInventorySlotContents(dragType, itemstack10); + slot4.onTake(player, itemstack10); + } + } + } + } + else if (clickTypeIn == ClickType.CLONE && player.capabilities.isCreativeMode && inventoryplayer.getItemStack().isEmpty() && slotId >= 0) + { + Slot slot3 = this.inventorySlots.get(slotId); + + if (slot3 != null && slot3.getHasStack()) + { + ItemStack itemstack5 = slot3.getStack().copy(); + itemstack5.setCount(itemstack5.getMaxStackSize()); + inventoryplayer.setItemStack(itemstack5); + } + } + else if (clickTypeIn == ClickType.THROW && inventoryplayer.getItemStack().isEmpty() && slotId >= 0) + { + Slot slot2 = this.inventorySlots.get(slotId); + + if (slot2 != null && slot2.getHasStack() && slot2.canTakeStack(player)) + { + ItemStack itemstack4 = slot2.decrStackSize(dragType == 0 ? 1 : slot2.getStack().getCount()); + slot2.onTake(player, itemstack4); + player.dropItem(itemstack4, true); + } + } + else if (clickTypeIn == ClickType.PICKUP_ALL && slotId >= 0) + { + Slot slot = this.inventorySlots.get(slotId); + ItemStack itemstack1 = inventoryplayer.getItemStack(); + + if (!itemstack1.isEmpty() && (slot == null || !slot.getHasStack() || !slot.canTakeStack(player))) + { + int i = dragType == 0 ? 0 : this.inventorySlots.size() - 1; + int j = dragType == 0 ? 1 : -1; + + for (int k = 0; k < 2; ++k) + { + for (int l = i; l >= 0 && l < this.inventorySlots.size() && itemstack1.getCount() < itemstack1.getMaxStackSize(); l += j) + { + Slot slot1 = this.inventorySlots.get(l); + + if (slot1.getHasStack() && canAddItemToSlot(slot1, itemstack1, true) && slot1.canTakeStack(player) && this.canMergeSlot(itemstack1, slot1)) + { + ItemStack itemstack2 = slot1.getStack(); + + if (k != 0 || itemstack2.getCount() != itemstack2.getMaxStackSize()) + { + int i1 = Math.min(itemstack1.getMaxStackSize() - itemstack1.getCount(), itemstack2.getCount()); + ItemStack itemstack3 = slot1.decrStackSize(i1); + itemstack1.grow(i1); + + if (itemstack3.isEmpty()) + { + slot1.putStack(ItemStack.EMPTY); + } + + slot1.onTake(player, itemstack3); + } + } + } + } + } + + this.detectAndSendChanges(); + } + + return itemstack; + } + + /** + * Called to determine if the current slot is valid for the stack merging (double-click) code. The stack passed in + * is null for the initial slot that was double-clicked. + */ + public boolean canMergeSlot(ItemStack stack, Slot slotIn) + { + return true; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + InventoryPlayer inventoryplayer = playerIn.inventory; + + if (!inventoryplayer.getItemStack().isEmpty()) + { + playerIn.dropItem(inventoryplayer.getItemStack(), false); + inventoryplayer.setItemStack(ItemStack.EMPTY); + } + } + + protected void clearContainer(EntityPlayer playerIn, World worldIn, IInventory inventoryIn) + { + if (!playerIn.isEntityAlive() || playerIn instanceof EntityPlayerMP && ((EntityPlayerMP)playerIn).hasDisconnected()) + { + for (int j = 0; j < inventoryIn.getSizeInventory(); ++j) + { + playerIn.dropItem(inventoryIn.removeStackFromSlot(j), false); + } + } + else + { + for (int i = 0; i < inventoryIn.getSizeInventory(); ++i) + { + playerIn.inventory.placeItemBackInInventory(worldIn, inventoryIn.removeStackFromSlot(i)); + } + } + } + + /** + * Callback for when the crafting matrix is changed. + */ + public void onCraftMatrixChanged(IInventory inventoryIn) + { + this.detectAndSendChanges(); + } + + /** + * Puts an ItemStack in a slot. + */ + public void putStackInSlot(int slotID, ItemStack stack) + { + this.getSlot(slotID).putStack(stack); + } + + @SideOnly(Side.CLIENT) + public void setAll(List p_190896_1_) + { + for (int i = 0; i < p_190896_1_.size(); ++i) + { + this.getSlot(i).putStack(p_190896_1_.get(i)); + } + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int id, int data) + { + } + + /** + * Gets a unique transaction ID. Parameter is unused. + */ + @SideOnly(Side.CLIENT) + public short getNextTransactionID(InventoryPlayer invPlayer) + { + ++this.transactionID; + return this.transactionID; + } + + /** + * gets whether or not the player can craft in this inventory or not + */ + public boolean getCanCraft(EntityPlayer player) + { + return !this.playerList.contains(player); + } + + /** + * sets whether the player can craft in this inventory or not + */ + public void setCanCraft(EntityPlayer player, boolean canCraft) + { + if (canCraft) + { + this.playerList.remove(player); + } + else + { + this.playerList.add(player); + } + } + + /** + * Determines whether supplied player can use this container + */ + public abstract boolean canInteractWith(EntityPlayer playerIn); + + /** + * Merges provided ItemStack with the first avaliable one in the container/player inventor between minIndex + * (included) and maxIndex (excluded). Args : stack, minIndex, maxIndex, negativDirection. /!\ the Container + * implementation do not check if the item is valid for the slot + */ + protected boolean mergeItemStack(ItemStack stack, int startIndex, int endIndex, boolean reverseDirection) + { + boolean flag = false; + int i = startIndex; + + if (reverseDirection) + { + i = endIndex - 1; + } + + if (stack.isStackable()) + { + while (!stack.isEmpty()) + { + if (reverseDirection) + { + if (i < startIndex) + { + break; + } + } + else if (i >= endIndex) + { + break; + } + + Slot slot = this.inventorySlots.get(i); + ItemStack itemstack = slot.getStack(); + + if (!itemstack.isEmpty() && itemstack.getItem() == stack.getItem() && (!stack.getHasSubtypes() || stack.getMetadata() == itemstack.getMetadata()) && ItemStack.areItemStackTagsEqual(stack, itemstack)) + { + int j = itemstack.getCount() + stack.getCount(); + int maxSize = Math.min(slot.getSlotStackLimit(), stack.getMaxStackSize()); + + if (j <= maxSize) + { + stack.setCount(0); + itemstack.setCount(j); + slot.onSlotChanged(); + flag = true; + } + else if (itemstack.getCount() < maxSize) + { + stack.shrink(maxSize - itemstack.getCount()); + itemstack.setCount(maxSize); + slot.onSlotChanged(); + flag = true; + } + } + + if (reverseDirection) + { + --i; + } + else + { + ++i; + } + } + } + + if (!stack.isEmpty()) + { + if (reverseDirection) + { + i = endIndex - 1; + } + else + { + i = startIndex; + } + + while (true) + { + if (reverseDirection) + { + if (i < startIndex) + { + break; + } + } + else if (i >= endIndex) + { + break; + } + + Slot slot1 = this.inventorySlots.get(i); + ItemStack itemstack1 = slot1.getStack(); + + if (itemstack1.isEmpty() && slot1.isItemValid(stack)) + { + if (stack.getCount() > slot1.getSlotStackLimit()) + { + slot1.putStack(stack.splitStack(slot1.getSlotStackLimit())); + } + else + { + slot1.putStack(stack.splitStack(stack.getCount())); + } + + slot1.onSlotChanged(); + flag = true; + break; + } + + if (reverseDirection) + { + --i; + } + else + { + ++i; + } + } + } + + return flag; + } + + /** + * Extracts the drag mode. Args : eventButton. Return (0 : evenly split, 1 : one item by slot, 2 : not used ?) + */ + public static int extractDragMode(int eventButton) + { + return eventButton >> 2 & 3; + } + + /** + * Args : clickedButton, Returns (0 : start drag, 1 : add slot, 2 : end drag) + */ + public static int getDragEvent(int clickedButton) + { + return clickedButton & 3; + } + + @SideOnly(Side.CLIENT) + public static int getQuickcraftMask(int p_94534_0_, int p_94534_1_) + { + return p_94534_0_ & 3 | (p_94534_1_ & 3) << 2; + } + + public static boolean isValidDragMode(int dragModeIn, EntityPlayer player) + { + if (dragModeIn == 0) + { + return true; + } + else if (dragModeIn == 1) + { + return true; + } + else + { + return dragModeIn == 2 && player.capabilities.isCreativeMode; + } + } + + /** + * Reset the drag fields + */ + protected void resetDrag() + { + this.dragEvent = 0; + this.dragSlots.clear(); + } + + /** + * Checks if it's possible to add the given itemstack to the given slot. + */ + public static boolean canAddItemToSlot(@Nullable Slot slotIn, ItemStack stack, boolean stackSizeMatters) + { + boolean flag = slotIn == null || !slotIn.getHasStack(); + + if (!flag && stack.isItemEqual(slotIn.getStack()) && ItemStack.areItemStackTagsEqual(slotIn.getStack(), stack)) + { + return slotIn.getStack().getCount() + (stackSizeMatters ? 0 : stack.getCount()) <= stack.getMaxStackSize(); + } + else + { + return flag; + } + } + + /** + * Compute the new stack size, Returns the stack with the new size. Args : dragSlots, dragMode, dragStack, + * slotStackSize + */ + public static void computeStackSize(Set dragSlotsIn, int dragModeIn, ItemStack stack, int slotStackSize) + { + switch (dragModeIn) + { + case 0: + stack.setCount(MathHelper.floor((float)stack.getCount() / (float)dragSlotsIn.size())); + break; + case 1: + stack.setCount(1); + break; + case 2: + stack.setCount(stack.getMaxStackSize()); + } + + stack.grow(slotStackSize); + } + + /** + * Returns true if the player can "drag-spilt" items into this slot,. returns true by default. Called to check if + * the slot can be added to a list of Slots to split the held ItemStack across. + */ + public boolean canDragIntoSlot(Slot slotIn) + { + return true; + } + + /** + * Like the version that takes an inventory. If the given TileEntity is not an Inventory, 0 is returned instead. + */ + public static int calcRedstone(@Nullable TileEntity te) + { + return te instanceof IInventory ? calcRedstoneFromInventory((IInventory)te) : 0; + } + + public static int calcRedstoneFromInventory(@Nullable IInventory inv) + { + if (inv == null) + { + return 0; + } + else + { + int i = 0; + float f = 0.0F; + + for (int j = 0; j < inv.getSizeInventory(); ++j) + { + ItemStack itemstack = inv.getStackInSlot(j); + + if (!itemstack.isEmpty()) + { + f += (float)itemstack.getCount() / (float)Math.min(inv.getInventoryStackLimit(), itemstack.getMaxStackSize()); + ++i; + } + } + + f = f / (float)inv.getSizeInventory(); + return MathHelper.floor(f * 14.0F) + (i > 0 ? 1 : 0); + } + } + + protected void slotChangedCraftingGrid(World p_192389_1_, EntityPlayer p_192389_2_, InventoryCrafting p_192389_3_, InventoryCraftResult p_192389_4_) + { + if (!p_192389_1_.isRemote) + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)p_192389_2_; + ItemStack itemstack = ItemStack.EMPTY; + IRecipe irecipe = CraftingManager.findMatchingRecipe(p_192389_3_, p_192389_1_); + + if (irecipe != null && (irecipe.isDynamic() || !p_192389_1_.getGameRules().getBoolean("doLimitedCrafting") || entityplayermp.getRecipeBook().isUnlocked(irecipe))) + { + p_192389_4_.setRecipeUsed(irecipe); + itemstack = irecipe.getCraftingResult(p_192389_3_); + } + + p_192389_4_.setInventorySlotContents(0, itemstack); + entityplayermp.connection.sendPacket(new SPacketSetSlot(this.windowId, 0, itemstack)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerBeacon.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerBeacon.java new file mode 100644 index 0000000..74e3b97 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerBeacon.java @@ -0,0 +1,171 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerBeacon extends Container +{ + private final IInventory tileBeacon; + /** This beacon's slot where you put in Emerald, Diamond, Gold or Iron Ingot. */ + private final ContainerBeacon.BeaconSlot beaconSlot; + + public ContainerBeacon(IInventory playerInventory, IInventory tileBeaconIn) + { + this.tileBeacon = tileBeaconIn; + this.beaconSlot = new ContainerBeacon.BeaconSlot(tileBeaconIn, 0, 136, 110); + this.addSlotToContainer(this.beaconSlot); + int i = 36; + int j = 137; + + for (int k = 0; k < 3; ++k) + { + for (int l = 0; l < 9; ++l) + { + this.addSlotToContainer(new Slot(playerInventory, l + k * 9 + 9, 36 + l * 18, 137 + k * 18)); + } + } + + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1, 36 + i1 * 18, 195)); + } + } + + public void addListener(IContainerListener listener) + { + super.addListener(listener); + listener.sendAllWindowProperties(this, this.tileBeacon); + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int id, int data) + { + this.tileBeacon.setField(id, data); + } + + public IInventory getTileEntity() + { + return this.tileBeacon; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + + if (!playerIn.world.isRemote) + { + ItemStack itemstack = this.beaconSlot.decrStackSize(this.beaconSlot.getSlotStackLimit()); + + if (!itemstack.isEmpty()) + { + playerIn.dropItem(itemstack, false); + } + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.tileBeacon.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 0) + { + if (!this.mergeItemStack(itemstack1, 1, 37, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + else if (this.mergeItemStack(itemstack1, 0, 1, false)) //Forge Fix Shift Clicking in beacons with stacks larger then 1. + { + return ItemStack.EMPTY; + } + else if (index >= 1 && index < 28) + { + if (!this.mergeItemStack(itemstack1, 28, 37, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 28 && index < 37) + { + if (!this.mergeItemStack(itemstack1, 1, 28, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 1, 37, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + class BeaconSlot extends Slot + { + public BeaconSlot(IInventory inventoryIn, int index, int xIn, int yIn) + { + super(inventoryIn, index, xIn, yIn); + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return stack.getItem().isBeaconPayment(stack); + } + + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in the + * case of armor slots) + */ + public int getSlotStackLimit() + { + return 1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerBrewingStand.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerBrewingStand.java new file mode 100644 index 0000000..452fe3d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerBrewingStand.java @@ -0,0 +1,285 @@ +package net.minecraft.inventory; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionHelper; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerBrewingStand extends Container +{ + private final IInventory tileBrewingStand; + /** Instance of Slot. */ + private final Slot slot; + /** Used to cache the brewing time to send changes to ICrafting listeners. */ + private int prevBrewTime; + /** Used to cache the fuel remaining in the brewing stand to send changes to ICrafting listeners. */ + private int prevFuel; + + public ContainerBrewingStand(InventoryPlayer playerInventory, IInventory tileBrewingStandIn) + { + this.tileBrewingStand = tileBrewingStandIn; + this.addSlotToContainer(new ContainerBrewingStand.Potion(tileBrewingStandIn, 0, 56, 51)); + this.addSlotToContainer(new ContainerBrewingStand.Potion(tileBrewingStandIn, 1, 79, 58)); + this.addSlotToContainer(new ContainerBrewingStand.Potion(tileBrewingStandIn, 2, 102, 51)); + this.slot = this.addSlotToContainer(new ContainerBrewingStand.Ingredient(tileBrewingStandIn, 3, 79, 17)); + this.addSlotToContainer(new ContainerBrewingStand.Fuel(tileBrewingStandIn, 4, 17, 17)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); + } + } + + public void addListener(IContainerListener listener) + { + super.addListener(listener); + listener.sendAllWindowProperties(this, this.tileBrewingStand); + } + + /** + * Looks for changes made in the container, sends them to every listener. + */ + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + + for (int i = 0; i < this.listeners.size(); ++i) + { + IContainerListener icontainerlistener = this.listeners.get(i); + + if (this.prevBrewTime != this.tileBrewingStand.getField(0)) + { + icontainerlistener.sendWindowProperty(this, 0, this.tileBrewingStand.getField(0)); + } + + if (this.prevFuel != this.tileBrewingStand.getField(1)) + { + icontainerlistener.sendWindowProperty(this, 1, this.tileBrewingStand.getField(1)); + } + } + + this.prevBrewTime = this.tileBrewingStand.getField(0); + this.prevFuel = this.tileBrewingStand.getField(1); + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int id, int data) + { + this.tileBrewingStand.setField(id, data); + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.tileBrewingStand.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if ((index < 0 || index > 2) && index != 3 && index != 4) + { + if (this.slot.isItemValid(itemstack1)) + { + if (!this.mergeItemStack(itemstack1, 3, 4, false)) + { + return ItemStack.EMPTY; + } + } + else if (ContainerBrewingStand.Potion.canHoldPotion(itemstack) && itemstack.getCount() == 1) + { + if (!this.mergeItemStack(itemstack1, 0, 3, false)) + { + return ItemStack.EMPTY; + } + } + else if (ContainerBrewingStand.Fuel.isValidBrewingFuel(itemstack)) + { + if (!this.mergeItemStack(itemstack1, 4, 5, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 5 && index < 32) + { + if (!this.mergeItemStack(itemstack1, 32, 41, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 32 && index < 41) + { + if (!this.mergeItemStack(itemstack1, 5, 32, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 5, 41, false)) + { + return ItemStack.EMPTY; + } + } + else + { + if (!this.mergeItemStack(itemstack1, 5, 41, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + static class Fuel extends Slot + { + public Fuel(IInventory iInventoryIn, int index, int xPosition, int yPosition) + { + super(iInventoryIn, index, xPosition, yPosition); + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return isValidBrewingFuel(stack); + } + + /** + * Returns true if the given ItemStack is usable as a fuel in the brewing stand. + */ + public static boolean isValidBrewingFuel(ItemStack itemStackIn) + { + return itemStackIn.getItem() == Items.BLAZE_POWDER; + } + + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in + * the case of armor slots) + */ + public int getSlotStackLimit() + { + return 64; + } + } + + static class Ingredient extends Slot + { + public Ingredient(IInventory iInventoryIn, int index, int xPosition, int yPosition) + { + super(iInventoryIn, index, xPosition, yPosition); + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidIngredient(stack); + } + + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in + * the case of armor slots) + */ + public int getSlotStackLimit() + { + return 64; + } + } + + static class Potion extends Slot + { + public Potion(IInventory p_i47598_1_, int p_i47598_2_, int p_i47598_3_, int p_i47598_4_) + { + super(p_i47598_1_, p_i47598_2_, p_i47598_3_, p_i47598_4_); + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return canHoldPotion(stack); + } + + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in + * the case of armor slots) + */ + public int getSlotStackLimit() + { + return 1; + } + + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + PotionType potiontype = PotionUtils.getPotionFromItem(stack); + + if (thePlayer instanceof EntityPlayerMP) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerBrewedPotion(thePlayer, stack); + CriteriaTriggers.BREWED_POTION.trigger((EntityPlayerMP)thePlayer, potiontype); + } + + super.onTake(thePlayer, stack); + return stack; + } + + /** + * Returns true if this itemstack can be filled with a potion + */ + public static boolean canHoldPotion(ItemStack stack) + { + return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidInput(stack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerChest.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerChest.java new file mode 100644 index 0000000..b3ff118 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerChest.java @@ -0,0 +1,103 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public class ContainerChest extends Container +{ + private final IInventory lowerChestInventory; + private final int numRows; + + public ContainerChest(IInventory playerInventory, IInventory chestInventory, EntityPlayer player) + { + this.lowerChestInventory = chestInventory; + this.numRows = chestInventory.getSizeInventory() / 9; + chestInventory.openInventory(player); + int i = (this.numRows - 4) * 18; + + for (int j = 0; j < this.numRows; ++j) + { + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(chestInventory, k + j * 9, 8 + k * 18, 18 + j * 18)); + } + } + + for (int l = 0; l < 3; ++l) + { + for (int j1 = 0; j1 < 9; ++j1) + { + this.addSlotToContainer(new Slot(playerInventory, j1 + l * 9 + 9, 8 + j1 * 18, 103 + l * 18 + i)); + } + } + + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 161 + i)); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.lowerChestInventory.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index < this.numRows * 9) + { + if (!this.mergeItemStack(itemstack1, this.numRows * 9, this.inventorySlots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 0, this.numRows * 9, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + } + + return itemstack; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + this.lowerChestInventory.closeInventory(playerIn); + } + + /** + * Return this chest container's lower chest inventory. + */ + public IInventory getLowerChestInventory() + { + return this.lowerChestInventory; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerDispenser.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerDispenser.java new file mode 100644 index 0000000..54b629e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerDispenser.java @@ -0,0 +1,89 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public class ContainerDispenser extends Container +{ + private final IInventory dispenserInventory; + + public ContainerDispenser(IInventory playerInventory, IInventory dispenserInventoryIn) + { + this.dispenserInventory = dispenserInventoryIn; + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + this.addSlotToContainer(new Slot(dispenserInventoryIn, j + i * 3, 62 + j * 18, 17 + i * 18)); + } + } + + for (int k = 0; k < 3; ++k) + { + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1 + k * 9 + 9, 8 + i1 * 18, 84 + k * 18)); + } + } + + for (int l = 0; l < 9; ++l) + { + this.addSlotToContainer(new Slot(playerInventory, l, 8 + l * 18, 142)); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.dispenserInventory.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index < 9) + { + if (!this.mergeItemStack(itemstack1, 9, 45, true)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 0, 9, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerEnchantment.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerEnchantment.java new file mode 100644 index 0000000..b515695 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerEnchantment.java @@ -0,0 +1,454 @@ +package net.minecraft.inventory; + +import java.util.List; +import java.util.Random; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentData; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemEnchantedBook; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerEnchantment extends Container +{ + /** SlotEnchantmentTable object with ItemStack to be enchanted */ + public IInventory tableInventory; + /** current world (for bookshelf counting) */ + private final World worldPointer; + private final BlockPos position; + private final Random rand; + public int xpSeed; + /** 3-member array storing the enchantment levels of each slot */ + public int[] enchantLevels; + public int[] enchantClue; + public int[] worldClue; + + @SideOnly(Side.CLIENT) + public ContainerEnchantment(InventoryPlayer playerInv, World worldIn) + { + this(playerInv, worldIn, BlockPos.ORIGIN); + } + + public ContainerEnchantment(InventoryPlayer playerInv, World worldIn, BlockPos pos) + { + this.tableInventory = new InventoryBasic("Enchant", true, 2) + { + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't + * think it hasn't changed and skip it. + */ + public void markDirty() + { + super.markDirty(); + ContainerEnchantment.this.onCraftMatrixChanged(this); + } + }; + this.rand = new Random(); + this.enchantLevels = new int[3]; + this.enchantClue = new int[] { -1, -1, -1}; + this.worldClue = new int[] { -1, -1, -1}; + this.worldPointer = worldIn; + this.position = pos; + this.xpSeed = playerInv.player.getXPSeed(); + this.addSlotToContainer(new Slot(this.tableInventory, 0, 15, 47) + { + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return true; + } + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in + * the case of armor slots) + */ + public int getSlotStackLimit() + { + return 1; + } + }); + this.addSlotToContainer(new Slot(this.tableInventory, 1, 35, 47) + { + java.util.List ores = net.minecraftforge.oredict.OreDictionary.getOres("gemLapis"); + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + for (ItemStack ore : ores) + if (net.minecraftforge.oredict.OreDictionary.itemMatches(ore, stack, false)) return true; + return false; + } + }); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(playerInv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(playerInv, k, 8 + k * 18, 142)); + } + } + + protected void broadcastData(IContainerListener crafting) + { + crafting.sendWindowProperty(this, 0, this.enchantLevels[0]); + crafting.sendWindowProperty(this, 1, this.enchantLevels[1]); + crafting.sendWindowProperty(this, 2, this.enchantLevels[2]); + crafting.sendWindowProperty(this, 3, this.xpSeed & -16); + crafting.sendWindowProperty(this, 4, this.enchantClue[0]); + crafting.sendWindowProperty(this, 5, this.enchantClue[1]); + crafting.sendWindowProperty(this, 6, this.enchantClue[2]); + crafting.sendWindowProperty(this, 7, this.worldClue[0]); + crafting.sendWindowProperty(this, 8, this.worldClue[1]); + crafting.sendWindowProperty(this, 9, this.worldClue[2]); + } + + public void addListener(IContainerListener listener) + { + super.addListener(listener); + this.broadcastData(listener); + } + + /** + * Looks for changes made in the container, sends them to every listener. + */ + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + + for (int i = 0; i < this.listeners.size(); ++i) + { + IContainerListener icontainerlistener = this.listeners.get(i); + this.broadcastData(icontainerlistener); + } + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int id, int data) + { + if (id >= 0 && id <= 2) + { + this.enchantLevels[id] = data; + } + else if (id == 3) + { + this.xpSeed = data; + } + else if (id >= 4 && id <= 6) + { + this.enchantClue[id - 4] = data; + } + else if (id >= 7 && id <= 9) + { + this.worldClue[id - 7] = data; + } + else + { + super.updateProgressBar(id, data); + } + } + + /** + * Callback for when the crafting matrix is changed. + */ + public void onCraftMatrixChanged(IInventory inventoryIn) + { + if (inventoryIn == this.tableInventory) + { + ItemStack itemstack = inventoryIn.getStackInSlot(0); + + if (!itemstack.isEmpty() && itemstack.isItemEnchantable()) + { + if (!this.worldPointer.isRemote) + { + int l = 0; + float power = 0; + + for (int j = -1; j <= 1; ++j) + { + for (int k = -1; k <= 1; ++k) + { + if ((j != 0 || k != 0) && this.worldPointer.isAirBlock(this.position.add(k, 0, j)) && this.worldPointer.isAirBlock(this.position.add(k, 1, j))) + { + power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 0, j * 2)); + power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 1, j * 2)); + if (k != 0 && j != 0) + { + power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 0, j)); + power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k * 2, 1, j)); + power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k, 0, j * 2)); + power += net.minecraftforge.common.ForgeHooks.getEnchantPower(worldPointer, position.add(k, 1, j * 2)); + } + } + } + } + + this.rand.setSeed((long)this.xpSeed); + + for (int i1 = 0; i1 < 3; ++i1) + { + this.enchantLevels[i1] = EnchantmentHelper.calcItemStackEnchantability(this.rand, i1, (int)power, itemstack); + this.enchantClue[i1] = -1; + this.worldClue[i1] = -1; + + if (this.enchantLevels[i1] < i1 + 1) + { + this.enchantLevels[i1] = 0; + } + this.enchantLevels[i1] = net.minecraftforge.event.ForgeEventFactory.onEnchantmentLevelSet(worldPointer, position, i1, (int)power, itemstack, enchantLevels[i1]); + } + + for (int j1 = 0; j1 < 3; ++j1) + { + if (this.enchantLevels[j1] > 0) + { + List list = this.getEnchantmentList(itemstack, j1, this.enchantLevels[j1]); + + if (list != null && !list.isEmpty()) + { + EnchantmentData enchantmentdata = list.get(this.rand.nextInt(list.size())); + this.enchantClue[j1] = Enchantment.getEnchantmentID(enchantmentdata.enchantment); + this.worldClue[j1] = enchantmentdata.enchantmentLevel; + } + } + } + + this.detectAndSendChanges(); + } + } + else + { + for (int i = 0; i < 3; ++i) + { + this.enchantLevels[i] = 0; + this.enchantClue[i] = -1; + this.worldClue[i] = -1; + } + } + } + } + + /** + * Handles the given Button-click on the server, currently only used by enchanting. Name is for legacy. + */ + public boolean enchantItem(EntityPlayer playerIn, int id) + { + ItemStack itemstack = this.tableInventory.getStackInSlot(0); + ItemStack itemstack1 = this.tableInventory.getStackInSlot(1); + int i = id + 1; + + if ((itemstack1.isEmpty() || itemstack1.getCount() < i) && !playerIn.capabilities.isCreativeMode) + { + return false; + } + else if (this.enchantLevels[id] > 0 && !itemstack.isEmpty() && (playerIn.experienceLevel >= i && playerIn.experienceLevel >= this.enchantLevels[id] || playerIn.capabilities.isCreativeMode)) + { + if (!this.worldPointer.isRemote) + { + List list = this.getEnchantmentList(itemstack, id, this.enchantLevels[id]); + + if (!list.isEmpty()) + { + playerIn.onEnchant(itemstack, i); + boolean flag = itemstack.getItem() == Items.BOOK; + + if (flag) + { + itemstack = new ItemStack(Items.ENCHANTED_BOOK); + this.tableInventory.setInventorySlotContents(0, itemstack); + } + + for (int j = 0; j < list.size(); ++j) + { + EnchantmentData enchantmentdata = list.get(j); + + if (flag) + { + ItemEnchantedBook.addEnchantment(itemstack, enchantmentdata); + } + else + { + itemstack.addEnchantment(enchantmentdata.enchantment, enchantmentdata.enchantmentLevel); + } + } + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack1.shrink(i); + + if (itemstack1.isEmpty()) + { + this.tableInventory.setInventorySlotContents(1, ItemStack.EMPTY); + } + } + + playerIn.addStat(StatList.ITEM_ENCHANTED); + + if (playerIn instanceof EntityPlayerMP) + { + CriteriaTriggers.ENCHANTED_ITEM.trigger((EntityPlayerMP)playerIn, itemstack, i); + } + + this.tableInventory.markDirty(); + this.xpSeed = playerIn.getXPSeed(); + this.onCraftMatrixChanged(this.tableInventory); + this.worldPointer.playSound((EntityPlayer)null, this.position, SoundEvents.BLOCK_ENCHANTMENT_TABLE_USE, SoundCategory.BLOCKS, 1.0F, this.worldPointer.rand.nextFloat() * 0.1F + 0.9F); + } + } + + return true; + } + else + { + return false; + } + } + + private List getEnchantmentList(ItemStack stack, int enchantSlot, int level) + { + this.rand.setSeed((long)(this.xpSeed + enchantSlot)); + List list = EnchantmentHelper.buildEnchantmentList(this.rand, stack, level, false); + + if (stack.getItem() == Items.BOOK && list.size() > 1) + { + list.remove(this.rand.nextInt(list.size())); + } + + return list; + } + + @SideOnly(Side.CLIENT) + public int getLapisAmount() + { + ItemStack itemstack = this.tableInventory.getStackInSlot(1); + return itemstack.isEmpty() ? 0 : itemstack.getCount(); + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + + if (!this.worldPointer.isRemote) + { + this.clearContainer(playerIn, playerIn.world, this.tableInventory); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + if (this.worldPointer.getBlockState(this.position).getBlock() != Blocks.ENCHANTING_TABLE) + { + return false; + } + else + { + return playerIn.getDistanceSq((double)this.position.getX() + 0.5D, (double)this.position.getY() + 0.5D, (double)this.position.getZ() + 0.5D) <= 64.0D; + } + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 0) + { + if (!this.mergeItemStack(itemstack1, 2, 38, true)) + { + return ItemStack.EMPTY; + } + } + else if (index == 1) + { + if (!this.mergeItemStack(itemstack1, 2, 38, true)) + { + return ItemStack.EMPTY; + } + } + else if (itemstack1.getItem() == Items.DYE && EnumDyeColor.byDyeDamage(itemstack1.getMetadata()) == EnumDyeColor.BLUE) + { + if (!this.mergeItemStack(itemstack1, 1, 2, true)) + { + return ItemStack.EMPTY; + } + } + else + { + if (((Slot)this.inventorySlots.get(0)).getHasStack() || !((Slot)this.inventorySlots.get(0)).isItemValid(itemstack1)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.hasTagCompound())// Forge: Fix MC-17431 + { + ((Slot)this.inventorySlots.get(0)).putStack(itemstack1.splitStack(1)); + } + else if (!itemstack1.isEmpty()) + { + ((Slot)this.inventorySlots.get(0)).putStack(new ItemStack(itemstack1.getItem(), 1, itemstack1.getMetadata())); + itemstack1.shrink(1); + } + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerFurnace.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerFurnace.java new file mode 100644 index 0000000..61f5f59 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerFurnace.java @@ -0,0 +1,173 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerFurnace extends Container +{ + private final IInventory tileFurnace; + private int cookTime; + private int totalCookTime; + private int furnaceBurnTime; + private int currentItemBurnTime; + + public ContainerFurnace(InventoryPlayer playerInventory, IInventory furnaceInventory) + { + this.tileFurnace = furnaceInventory; + this.addSlotToContainer(new Slot(furnaceInventory, 0, 56, 17)); + this.addSlotToContainer(new SlotFurnaceFuel(furnaceInventory, 1, 56, 53)); + this.addSlotToContainer(new SlotFurnaceOutput(playerInventory.player, furnaceInventory, 2, 116, 35)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); + } + } + + public void addListener(IContainerListener listener) + { + super.addListener(listener); + listener.sendAllWindowProperties(this, this.tileFurnace); + } + + /** + * Looks for changes made in the container, sends them to every listener. + */ + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + + for (int i = 0; i < this.listeners.size(); ++i) + { + IContainerListener icontainerlistener = this.listeners.get(i); + + if (this.cookTime != this.tileFurnace.getField(2)) + { + icontainerlistener.sendWindowProperty(this, 2, this.tileFurnace.getField(2)); + } + + if (this.furnaceBurnTime != this.tileFurnace.getField(0)) + { + icontainerlistener.sendWindowProperty(this, 0, this.tileFurnace.getField(0)); + } + + if (this.currentItemBurnTime != this.tileFurnace.getField(1)) + { + icontainerlistener.sendWindowProperty(this, 1, this.tileFurnace.getField(1)); + } + + if (this.totalCookTime != this.tileFurnace.getField(3)) + { + icontainerlistener.sendWindowProperty(this, 3, this.tileFurnace.getField(3)); + } + } + + this.cookTime = this.tileFurnace.getField(2); + this.furnaceBurnTime = this.tileFurnace.getField(0); + this.currentItemBurnTime = this.tileFurnace.getField(1); + this.totalCookTime = this.tileFurnace.getField(3); + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int id, int data) + { + this.tileFurnace.setField(id, data); + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.tileFurnace.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 2) + { + if (!this.mergeItemStack(itemstack1, 3, 39, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + else if (index != 1 && index != 0) + { + if (!FurnaceRecipes.instance().getSmeltingResult(itemstack1).isEmpty()) + { + if (!this.mergeItemStack(itemstack1, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } + else if (TileEntityFurnace.isItemFuel(itemstack1)) + { + if (!this.mergeItemStack(itemstack1, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 3 && index < 30) + { + if (!this.mergeItemStack(itemstack1, 30, 39, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 30 && index < 39 && !this.mergeItemStack(itemstack1, 3, 30, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 3, 39, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHopper.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHopper.java new file mode 100644 index 0000000..344eb3a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHopper.java @@ -0,0 +1,91 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; + +public class ContainerHopper extends Container +{ + private final IInventory hopperInventory; + + public ContainerHopper(InventoryPlayer playerInventory, IInventory hopperInventoryIn, EntityPlayer player) + { + this.hopperInventory = hopperInventoryIn; + hopperInventoryIn.openInventory(player); + int i = 51; + + for (int j = 0; j < hopperInventoryIn.getSizeInventory(); ++j) + { + this.addSlotToContainer(new Slot(hopperInventoryIn, j, 44 + j * 18, 20)); + } + + for (int l = 0; l < 3; ++l) + { + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(playerInventory, k + l * 9 + 9, 8 + k * 18, l * 18 + 51)); + } + } + + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 109)); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.hopperInventory.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index < this.hopperInventory.getSizeInventory()) + { + if (!this.mergeItemStack(itemstack1, this.hopperInventory.getSizeInventory(), this.inventorySlots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 0, this.hopperInventory.getSizeInventory(), false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + } + + return itemstack; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + this.hopperInventory.closeInventory(playerIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHorseChest.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHorseChest.java new file mode 100644 index 0000000..5d51a59 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHorseChest.java @@ -0,0 +1,19 @@ +package net.minecraft.inventory; + +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerHorseChest extends InventoryBasic +{ + public ContainerHorseChest(String inventoryTitle, int slotCount) + { + super(inventoryTitle, false, slotCount); + } + + @SideOnly(Side.CLIENT) + public ContainerHorseChest(ITextComponent inventoryTitle, int slotCount) + { + super(inventoryTitle, slotCount); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHorseInventory.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHorseInventory.java new file mode 100644 index 0000000..5d7d9b2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerHorseInventory.java @@ -0,0 +1,164 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.passive.AbstractChestHorse; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerHorseInventory extends Container +{ + private final IInventory horseInventory; + private final AbstractHorse horse; + + public ContainerHorseInventory(IInventory playerInventory, IInventory horseInventoryIn, final AbstractHorse horse, EntityPlayer player) + { + this.horseInventory = horseInventoryIn; + this.horse = horse; + int i = 3; + horseInventoryIn.openInventory(player); + int j = -18; + this.addSlotToContainer(new Slot(horseInventoryIn, 0, 8, 18) + { + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return stack.getItem() == Items.SADDLE && !this.getHasStack() && horse.canBeSaddled(); + } + /** + * Actualy only call when we want to render the white square effect over the slots. Return always True, + * except for the armor slot of the Donkey/Mule (we can't interact with the Undead and Skeleton horses) + */ + @SideOnly(Side.CLIENT) + public boolean isEnabled() + { + return horse.canBeSaddled(); + } + }); + this.addSlotToContainer(new Slot(horseInventoryIn, 1, 8, 36) + { + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return horse.isArmor(stack); + } + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in + * the case of armor slots) + */ + public int getSlotStackLimit() + { + return 1; + } + /** + * Actualy only call when we want to render the white square effect over the slots. Return always True, + * except for the armor slot of the Donkey/Mule (we can't interact with the Undead and Skeleton horses) + */ + @SideOnly(Side.CLIENT) + public boolean isEnabled() + { + return horse.wearsArmor(); + } + }); + + if (horse instanceof AbstractChestHorse && ((AbstractChestHorse)horse).hasChest()) + { + for (int k = 0; k < 3; ++k) + { + for (int l = 0; l < ((AbstractChestHorse)horse).getInventoryColumns(); ++l) + { + this.addSlotToContainer(new Slot(horseInventoryIn, 2 + l + k * ((AbstractChestHorse)horse).getInventoryColumns(), 80 + l * 18, 18 + k * 18)); + } + } + } + + for (int i1 = 0; i1 < 3; ++i1) + { + for (int k1 = 0; k1 < 9; ++k1) + { + this.addSlotToContainer(new Slot(playerInventory, k1 + i1 * 9 + 9, 8 + k1 * 18, 102 + i1 * 18 + -18)); + } + } + + for (int j1 = 0; j1 < 9; ++j1) + { + this.addSlotToContainer(new Slot(playerInventory, j1, 8 + j1 * 18, 142)); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.horseInventory.isUsableByPlayer(playerIn) && this.horse.isEntityAlive() && this.horse.getDistance(playerIn) < 8.0F; + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index < this.horseInventory.getSizeInventory()) + { + if (!this.mergeItemStack(itemstack1, this.horseInventory.getSizeInventory(), this.inventorySlots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else if (this.getSlot(1).isItemValid(itemstack1) && !this.getSlot(1).getHasStack()) + { + if (!this.mergeItemStack(itemstack1, 1, 2, false)) + { + return ItemStack.EMPTY; + } + } + else if (this.getSlot(0).isItemValid(itemstack1)) + { + if (!this.mergeItemStack(itemstack1, 0, 1, false)) + { + return ItemStack.EMPTY; + } + } + else if (this.horseInventory.getSizeInventory() <= 2 || !this.mergeItemStack(itemstack1, 2, this.horseInventory.getSizeInventory(), false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + } + + return itemstack; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + this.horseInventory.closeInventory(playerIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerMerchant.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerMerchant.java new file mode 100644 index 0000000..4b4b249 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerMerchant.java @@ -0,0 +1,155 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ContainerMerchant extends Container +{ + /** Instance of Merchant. */ + private final IMerchant merchant; + private final InventoryMerchant merchantInventory; + /** Instance of World. */ + private final World world; + + public ContainerMerchant(InventoryPlayer playerInventory, IMerchant merchant, World worldIn) + { + this.merchant = merchant; + this.world = worldIn; + this.merchantInventory = new InventoryMerchant(playerInventory.player, merchant); + this.addSlotToContainer(new Slot(this.merchantInventory, 0, 36, 53)); + this.addSlotToContainer(new Slot(this.merchantInventory, 1, 62, 53)); + this.addSlotToContainer(new SlotMerchantResult(playerInventory.player, merchant, this.merchantInventory, 2, 120, 53)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); + } + } + + public InventoryMerchant getMerchantInventory() + { + return this.merchantInventory; + } + + /** + * Callback for when the crafting matrix is changed. + */ + public void onCraftMatrixChanged(IInventory inventoryIn) + { + this.merchantInventory.resetRecipeAndSlots(); + super.onCraftMatrixChanged(inventoryIn); + } + + public void setCurrentRecipeIndex(int currentRecipeIndex) + { + this.merchantInventory.setCurrentRecipeIndex(currentRecipeIndex); + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.merchant.getCustomer() == playerIn; + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 2) + { + if (!this.mergeItemStack(itemstack1, 3, 39, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + else if (index != 0 && index != 1) + { + if (index >= 3 && index < 30) + { + if (!this.mergeItemStack(itemstack1, 30, 39, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 30 && index < 39 && !this.mergeItemStack(itemstack1, 3, 30, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 3, 39, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + this.merchant.setCustomer((EntityPlayer)null); + super.onContainerClosed(playerIn); + + if (!this.world.isRemote) + { + ItemStack itemstack = this.merchantInventory.removeStackFromSlot(0); + + if (!itemstack.isEmpty()) + { + playerIn.dropItem(itemstack, false); + } + + itemstack = this.merchantInventory.removeStackFromSlot(1); + + if (!itemstack.isEmpty()) + { + playerIn.dropItem(itemstack, false); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerPlayer.java new file mode 100644 index 0000000..0c02bb3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerPlayer.java @@ -0,0 +1,235 @@ +package net.minecraft.inventory; + +import javax.annotation.Nullable; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ContainerPlayer extends Container +{ + private static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[] {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + /** The crafting matrix inventory. */ + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 2, 2); + public InventoryCraftResult craftResult = new InventoryCraftResult(); + /** Determines if inventory manipulation should be handled. */ + public boolean isLocalWorld; + private final EntityPlayer player; + + public ContainerPlayer(InventoryPlayer playerInventory, boolean localWorld, EntityPlayer playerIn) + { + this.isLocalWorld = localWorld; + this.player = playerIn; + this.addSlotToContainer(new SlotCrafting(playerInventory.player, this.craftMatrix, this.craftResult, 0, 154, 28)); + + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 2, 98 + j * 18, 18 + i * 18)); + } + } + + for (int k = 0; k < 4; ++k) + { + final EntityEquipmentSlot entityequipmentslot = VALID_EQUIPMENT_SLOTS[k]; + this.addSlotToContainer(new Slot(playerInventory, 36 + (3 - k), 8, 8 + k * 18) + { + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 + * in the case of armor slots) + */ + public int getSlotStackLimit() + { + return 1; + } + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace + * fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return stack.getItem().isValidArmor(stack, entityequipmentslot, player); + } + /** + * Return whether this slot's stack can be taken from this slot. + */ + public boolean canTakeStack(EntityPlayer playerIn) + { + ItemStack itemstack = this.getStack(); + return !itemstack.isEmpty() && !playerIn.isCreative() && EnchantmentHelper.hasBindingCurse(itemstack) ? false : super.canTakeStack(playerIn); + } + @Nullable + @SideOnly(Side.CLIENT) + public String getSlotTexture() + { + return ItemArmor.EMPTY_SLOT_NAMES[entityequipmentslot.getIndex()]; + } + }); + } + + for (int l = 0; l < 3; ++l) + { + for (int j1 = 0; j1 < 9; ++j1) + { + this.addSlotToContainer(new Slot(playerInventory, j1 + (l + 1) * 9, 8 + j1 * 18, 84 + l * 18)); + } + } + + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 142)); + } + + this.addSlotToContainer(new Slot(playerInventory, 40, 77, 62) + { + @Nullable + @SideOnly(Side.CLIENT) + public String getSlotTexture() + { + return "minecraft:items/empty_armor_slot_shield"; + } + }); + } + + /** + * Callback for when the crafting matrix is changed. + */ + public void onCraftMatrixChanged(IInventory inventoryIn) + { + this.slotChangedCraftingGrid(this.player.world, this.player, this.craftMatrix, this.craftResult); + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + this.craftResult.clear(); + + if (!playerIn.world.isRemote) + { + this.clearContainer(playerIn, playerIn.world, this.craftMatrix); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return true; + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(itemstack); + + if (index == 0) + { + if (!this.mergeItemStack(itemstack1, 9, 45, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + else if (index >= 1 && index < 5) + { + if (!this.mergeItemStack(itemstack1, 9, 45, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 5 && index < 9) + { + if (!this.mergeItemStack(itemstack1, 9, 45, false)) + { + return ItemStack.EMPTY; + } + } + else if (entityequipmentslot.getSlotType() == EntityEquipmentSlot.Type.ARMOR && !((Slot)this.inventorySlots.get(8 - entityequipmentslot.getIndex())).getHasStack()) + { + int i = 8 - entityequipmentslot.getIndex(); + + if (!this.mergeItemStack(itemstack1, i, i + 1, false)) + { + return ItemStack.EMPTY; + } + } + else if (entityequipmentslot == EntityEquipmentSlot.OFFHAND && !((Slot)this.inventorySlots.get(45)).getHasStack()) + { + if (!this.mergeItemStack(itemstack1, 45, 46, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 9 && index < 36) + { + if (!this.mergeItemStack(itemstack1, 36, 45, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 36 && index < 45) + { + if (!this.mergeItemStack(itemstack1, 9, 36, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 9, 45, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + ItemStack itemstack2 = slot.onTake(playerIn, itemstack1); + + if (index == 0) + { + playerIn.dropItem(itemstack2, false); + } + } + + return itemstack; + } + + /** + * Called to determine if the current slot is valid for the stack merging (double-click) code. The stack passed in + * is null for the initial slot that was double-clicked. + */ + public boolean canMergeSlot(ItemStack stack, Slot slotIn) + { + return slotIn.inventory != this.craftResult && super.canMergeSlot(stack, slotIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerRepair.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerRepair.java new file mode 100644 index 0000000..200a05d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerRepair.java @@ -0,0 +1,508 @@ +package net.minecraft.inventory; + +import java.util.Map; +import net.minecraft.block.BlockAnvil; +import net.minecraft.block.state.IBlockState; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemEnchantedBook; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ContainerRepair extends Container +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** Here comes out item you merged and/or renamed. */ + private final IInventory outputSlot; + /** The 2slots where you put your items in that you want to merge and/or rename. */ + private final IInventory inputSlots; + private final World world; + private final BlockPos selfPosition; + /** The maximum cost of repairing/renaming in the anvil. */ + public int maximumCost; + /** determined by damage of input item and stackSize of repair materials */ + public int materialCost; + private String repairedItemName; + /** The player that has this container open. */ + private final EntityPlayer player; + + @SideOnly(Side.CLIENT) + public ContainerRepair(InventoryPlayer playerInventory, World worldIn, EntityPlayer player) + { + this(playerInventory, worldIn, BlockPos.ORIGIN, player); + } + + public ContainerRepair(InventoryPlayer playerInventory, final World worldIn, final BlockPos blockPosIn, EntityPlayer player) + { + this.outputSlot = new InventoryCraftResult(); + this.inputSlots = new InventoryBasic("Repair", true, 2) + { + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't + * think it hasn't changed and skip it. + */ + public void markDirty() + { + super.markDirty(); + ContainerRepair.this.onCraftMatrixChanged(this); + } + }; + this.selfPosition = blockPosIn; + this.world = worldIn; + this.player = player; + this.addSlotToContainer(new Slot(this.inputSlots, 0, 27, 47)); + this.addSlotToContainer(new Slot(this.inputSlots, 1, 76, 47)); + this.addSlotToContainer(new Slot(this.outputSlot, 2, 134, 47) + { + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return false; + } + /** + * Return whether this slot's stack can be taken from this slot. + */ + public boolean canTakeStack(EntityPlayer playerIn) + { + return (playerIn.capabilities.isCreativeMode || playerIn.experienceLevel >= ContainerRepair.this.maximumCost) && ContainerRepair.this.maximumCost > 0 && this.getHasStack(); + } + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + if (!thePlayer.capabilities.isCreativeMode) + { + thePlayer.addExperienceLevel(-ContainerRepair.this.maximumCost); + } + + float breakChance = net.minecraftforge.common.ForgeHooks.onAnvilRepair(thePlayer, stack, ContainerRepair.this.inputSlots.getStackInSlot(0), ContainerRepair.this.inputSlots.getStackInSlot(1)); + + ContainerRepair.this.inputSlots.setInventorySlotContents(0, ItemStack.EMPTY); + + if (ContainerRepair.this.materialCost > 0) + { + ItemStack itemstack = ContainerRepair.this.inputSlots.getStackInSlot(1); + + if (!itemstack.isEmpty() && itemstack.getCount() > ContainerRepair.this.materialCost) + { + itemstack.shrink(ContainerRepair.this.materialCost); + ContainerRepair.this.inputSlots.setInventorySlotContents(1, itemstack); + } + else + { + ContainerRepair.this.inputSlots.setInventorySlotContents(1, ItemStack.EMPTY); + } + } + else + { + ContainerRepair.this.inputSlots.setInventorySlotContents(1, ItemStack.EMPTY); + } + + ContainerRepair.this.maximumCost = 0; + IBlockState iblockstate = worldIn.getBlockState(blockPosIn); + + if (!thePlayer.capabilities.isCreativeMode && !worldIn.isRemote && iblockstate.getBlock() == Blocks.ANVIL && thePlayer.getRNG().nextFloat() < breakChance) + { + int l = ((Integer)iblockstate.getValue(BlockAnvil.DAMAGE)).intValue(); + ++l; + + if (l > 2) + { + worldIn.setBlockToAir(blockPosIn); + worldIn.playEvent(1029, blockPosIn, 0); + } + else + { + worldIn.setBlockState(blockPosIn, iblockstate.withProperty(BlockAnvil.DAMAGE, Integer.valueOf(l)), 2); + worldIn.playEvent(1030, blockPosIn, 0); + } + } + else if (!worldIn.isRemote) + { + worldIn.playEvent(1030, blockPosIn, 0); + } + + return stack; + } + }); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for (int k = 0; k < 9; ++k) + { + this.addSlotToContainer(new Slot(playerInventory, k, 8 + k * 18, 142)); + } + } + + /** + * Callback for when the crafting matrix is changed. + */ + public void onCraftMatrixChanged(IInventory inventoryIn) + { + super.onCraftMatrixChanged(inventoryIn); + + if (inventoryIn == this.inputSlots) + { + this.updateRepairOutput(); + } + } + + /** + * called when the Anvil Input Slot changes, calculates the new result and puts it in the output slot + */ + public void updateRepairOutput() + { + ItemStack itemstack = this.inputSlots.getStackInSlot(0); + this.maximumCost = 1; + int i = 0; + int j = 0; + int k = 0; + + if (itemstack.isEmpty()) + { + this.outputSlot.setInventorySlotContents(0, ItemStack.EMPTY); + this.maximumCost = 0; + } + else + { + ItemStack itemstack1 = itemstack.copy(); + ItemStack itemstack2 = this.inputSlots.getStackInSlot(1); + Map map = EnchantmentHelper.getEnchantments(itemstack1); + j = j + itemstack.getRepairCost() + (itemstack2.isEmpty() ? 0 : itemstack2.getRepairCost()); + this.materialCost = 0; + boolean flag = false; + + if (!itemstack2.isEmpty()) + { + if (!net.minecraftforge.common.ForgeHooks.onAnvilChange(this, itemstack, itemstack2, outputSlot, repairedItemName, j)) return; + flag = itemstack2.getItem() == Items.ENCHANTED_BOOK && !ItemEnchantedBook.getEnchantments(itemstack2).hasNoTags(); + + if (itemstack1.isItemStackDamageable() && itemstack1.getItem().getIsRepairable(itemstack, itemstack2)) + { + int l2 = Math.min(itemstack1.getItemDamage(), itemstack1.getMaxDamage() / 4); + + if (l2 <= 0) + { + this.outputSlot.setInventorySlotContents(0, ItemStack.EMPTY); + this.maximumCost = 0; + return; + } + + int i3; + + for (i3 = 0; l2 > 0 && i3 < itemstack2.getCount(); ++i3) + { + int j3 = itemstack1.getItemDamage() - l2; + itemstack1.setItemDamage(j3); + ++i; + l2 = Math.min(itemstack1.getItemDamage(), itemstack1.getMaxDamage() / 4); + } + + this.materialCost = i3; + } + else + { + if (!flag && (itemstack1.getItem() != itemstack2.getItem() || !itemstack1.isItemStackDamageable())) + { + this.outputSlot.setInventorySlotContents(0, ItemStack.EMPTY); + this.maximumCost = 0; + return; + } + + if (itemstack1.isItemStackDamageable() && !flag) + { + int l = itemstack.getMaxDamage() - itemstack.getItemDamage(); + int i1 = itemstack2.getMaxDamage() - itemstack2.getItemDamage(); + int j1 = i1 + itemstack1.getMaxDamage() * 12 / 100; + int k1 = l + j1; + int l1 = itemstack1.getMaxDamage() - k1; + + if (l1 < 0) + { + l1 = 0; + } + + if (l1 < itemstack1.getItemDamage()) // vanilla uses metadata here instead of damage. + { + itemstack1.setItemDamage(l1); + i += 2; + } + } + + Map map1 = EnchantmentHelper.getEnchantments(itemstack2); + boolean flag2 = false; + boolean flag3 = false; + + for (Enchantment enchantment1 : map1.keySet()) + { + if (enchantment1 != null) + { + int i2 = map.containsKey(enchantment1) ? ((Integer)map.get(enchantment1)).intValue() : 0; + int j2 = ((Integer)map1.get(enchantment1)).intValue(); + j2 = i2 == j2 ? j2 + 1 : Math.max(j2, i2); + boolean flag1 = enchantment1.canApply(itemstack); + + if (this.player.capabilities.isCreativeMode || itemstack.getItem() == Items.ENCHANTED_BOOK) + { + flag1 = true; + } + + for (Enchantment enchantment : map.keySet()) + { + if (enchantment != enchantment1 && !enchantment1.isCompatibleWith(enchantment)) + { + flag1 = false; + ++i; + } + } + + if (!flag1) + { + flag3 = true; + } + else + { + flag2 = true; + + if (j2 > enchantment1.getMaxLevel()) + { + j2 = enchantment1.getMaxLevel(); + } + + map.put(enchantment1, Integer.valueOf(j2)); + int k3 = 0; + + switch (enchantment1.getRarity()) + { + case COMMON: + k3 = 1; + break; + case UNCOMMON: + k3 = 2; + break; + case RARE: + k3 = 4; + break; + case VERY_RARE: + k3 = 8; + } + + if (flag) + { + k3 = Math.max(1, k3 / 2); + } + + i += k3 * j2; + + if (itemstack.getCount() > 1) + { + i = 40; + } + } + } + } + + if (flag3 && !flag2) + { + this.outputSlot.setInventorySlotContents(0, ItemStack.EMPTY); + this.maximumCost = 0; + return; + } + } + } + + if (StringUtils.isBlank(this.repairedItemName)) + { + if (itemstack.hasDisplayName()) + { + k = 1; + i += k; + itemstack1.clearCustomName(); + } + } + else if (!this.repairedItemName.equals(itemstack.getDisplayName())) + { + k = 1; + i += k; + itemstack1.setStackDisplayName(this.repairedItemName); + } + if (flag && !itemstack1.getItem().isBookEnchantable(itemstack1, itemstack2)) itemstack1 = ItemStack.EMPTY; + + this.maximumCost = j + i; + + if (i <= 0) + { + itemstack1 = ItemStack.EMPTY; + } + + if (k == i && k > 0 && this.maximumCost >= 40) + { + this.maximumCost = 39; + } + + if (this.maximumCost >= 40 && !this.player.capabilities.isCreativeMode) + { + itemstack1 = ItemStack.EMPTY; + } + + if (!itemstack1.isEmpty()) + { + int k2 = itemstack1.getRepairCost(); + + if (!itemstack2.isEmpty() && k2 < itemstack2.getRepairCost()) + { + k2 = itemstack2.getRepairCost(); + } + + if (k != i || k == 0) + { + k2 = k2 * 2 + 1; + } + + itemstack1.setRepairCost(k2); + EnchantmentHelper.setEnchantments(map, itemstack1); + } + + this.outputSlot.setInventorySlotContents(0, itemstack1); + this.detectAndSendChanges(); + } + } + + public void addListener(IContainerListener listener) + { + super.addListener(listener); + listener.sendWindowProperty(this, 0, this.maximumCost); + } + + @SideOnly(Side.CLIENT) + public void updateProgressBar(int id, int data) + { + if (id == 0) + { + this.maximumCost = data; + } + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + + if (!this.world.isRemote) + { + this.clearContainer(playerIn, this.world, this.inputSlots); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + if (this.world.getBlockState(this.selfPosition).getBlock() != Blocks.ANVIL) + { + return false; + } + else + { + return playerIn.getDistanceSq((double)this.selfPosition.getX() + 0.5D, (double)this.selfPosition.getY() + 0.5D, (double)this.selfPosition.getZ() + 0.5D) <= 64.0D; + } + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 2) + { + if (!this.mergeItemStack(itemstack1, 3, 39, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + else if (index != 0 && index != 1) + { + if (index >= 3 && index < 39 && !this.mergeItemStack(itemstack1, 0, 2, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 3, 39, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + slot.onTake(playerIn, itemstack1); + } + + return itemstack; + } + + /** + * used by the Anvil GUI to update the Item Name being typed by the player + */ + public void updateItemName(String newName) + { + this.repairedItemName = newName; + + if (this.getSlot(2).getHasStack()) + { + ItemStack itemstack = this.getSlot(2).getStack(); + + if (StringUtils.isBlank(newName)) + { + itemstack.clearCustomName(); + } + else + { + itemstack.setStackDisplayName(this.repairedItemName); + } + } + + this.updateRepairOutput(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerShulkerBox.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerShulkerBox.java new file mode 100644 index 0000000..d531341 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerShulkerBox.java @@ -0,0 +1,95 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; + +public class ContainerShulkerBox extends Container +{ + private final IInventory inventory; + + public ContainerShulkerBox(InventoryPlayer p_i47266_1_, IInventory p_i47266_2_, EntityPlayer p_i47266_3_) + { + this.inventory = p_i47266_2_; + p_i47266_2_.openInventory(p_i47266_3_); + int i = 3; + int j = 9; + + for (int k = 0; k < 3; ++k) + { + for (int l = 0; l < 9; ++l) + { + this.addSlotToContainer(new SlotShulkerBox(p_i47266_2_, l + k * 9, 8 + l * 18, 18 + k * 18)); + } + } + + for (int i1 = 0; i1 < 3; ++i1) + { + for (int k1 = 0; k1 < 9; ++k1) + { + this.addSlotToContainer(new Slot(p_i47266_1_, k1 + i1 * 9 + 9, 8 + k1 * 18, 84 + i1 * 18)); + } + } + + for (int j1 = 0; j1 < 9; ++j1) + { + this.addSlotToContainer(new Slot(p_i47266_1_, j1, 8 + j1 * 18, 142)); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + return this.inventory.isUsableByPlayer(playerIn); + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index < this.inventory.getSizeInventory()) + { + if (!this.mergeItemStack(itemstack1, this.inventory.getSizeInventory(), this.inventorySlots.size(), true)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 0, this.inventory.getSizeInventory(), false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + } + + return itemstack; + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + this.inventory.closeInventory(playerIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerWorkbench.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerWorkbench.java new file mode 100644 index 0000000..8ea3d1e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ContainerWorkbench.java @@ -0,0 +1,162 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ContainerWorkbench extends Container +{ + /** The crafting matrix inventory (3x3). */ + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); + public InventoryCraftResult craftResult = new InventoryCraftResult(); + private final World world; + /** Position of the workbench */ + private final BlockPos pos; + private final EntityPlayer player; + + public ContainerWorkbench(InventoryPlayer playerInventory, World worldIn, BlockPos posIn) + { + this.world = worldIn; + this.pos = posIn; + this.player = playerInventory.player; + this.addSlotToContainer(new SlotCrafting(playerInventory.player, this.craftMatrix, this.craftResult, 0, 124, 35)); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 3, 30 + j * 18, 17 + i * 18)); + } + } + + for (int k = 0; k < 3; ++k) + { + for (int i1 = 0; i1 < 9; ++i1) + { + this.addSlotToContainer(new Slot(playerInventory, i1 + k * 9 + 9, 8 + i1 * 18, 84 + k * 18)); + } + } + + for (int l = 0; l < 9; ++l) + { + this.addSlotToContainer(new Slot(playerInventory, l, 8 + l * 18, 142)); + } + } + + /** + * Callback for when the crafting matrix is changed. + */ + public void onCraftMatrixChanged(IInventory inventoryIn) + { + this.slotChangedCraftingGrid(this.world, this.player, this.craftMatrix, this.craftResult); + } + + /** + * Called when the container is closed. + */ + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + + if (!this.world.isRemote) + { + this.clearContainer(playerIn, this.world, this.craftMatrix); + } + } + + /** + * Determines whether supplied player can use this container + */ + public boolean canInteractWith(EntityPlayer playerIn) + { + if (this.world.getBlockState(this.pos).getBlock() != Blocks.CRAFTING_TABLE) + { + return false; + } + else + { + return playerIn.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; + } + } + + /** + * Handle when the stack in slot {@code index} is shift-clicked. Normally this moves the stack between the player + * inventory and the other inventory(s). + */ + public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) + { + ItemStack itemstack = ItemStack.EMPTY; + Slot slot = this.inventorySlots.get(index); + + if (slot != null && slot.getHasStack()) + { + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); + + if (index == 0) + { + itemstack1.getItem().onCreated(itemstack1, this.world, playerIn); + + if (!this.mergeItemStack(itemstack1, 10, 46, true)) + { + return ItemStack.EMPTY; + } + + slot.onSlotChange(itemstack1, itemstack); + } + else if (index >= 10 && index < 37) + { + if (!this.mergeItemStack(itemstack1, 37, 46, false)) + { + return ItemStack.EMPTY; + } + } + else if (index >= 37 && index < 46) + { + if (!this.mergeItemStack(itemstack1, 10, 37, false)) + { + return ItemStack.EMPTY; + } + } + else if (!this.mergeItemStack(itemstack1, 10, 46, false)) + { + return ItemStack.EMPTY; + } + + if (itemstack1.isEmpty()) + { + slot.putStack(ItemStack.EMPTY); + } + else + { + slot.onSlotChanged(); + } + + if (itemstack1.getCount() == itemstack.getCount()) + { + return ItemStack.EMPTY; + } + + ItemStack itemstack2 = slot.onTake(playerIn, itemstack1); + + if (index == 0) + { + playerIn.dropItem(itemstack2, false); + } + } + + return itemstack; + } + + /** + * Called to determine if the current slot is valid for the stack merging (double-click) code. The stack passed in + * is null for the initial slot that was double-clicked. + */ + public boolean canMergeSlot(ItemStack stack, Slot slotIn) + { + return slotIn.inventory != this.craftResult && super.canMergeSlot(stack, slotIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/EntityEquipmentSlot.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/EntityEquipmentSlot.java new file mode 100644 index 0000000..1471738 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/EntityEquipmentSlot.java @@ -0,0 +1,65 @@ +package net.minecraft.inventory; + +public enum EntityEquipmentSlot +{ + MAINHAND(EntityEquipmentSlot.Type.HAND, 0, 0, "mainhand"), + OFFHAND(EntityEquipmentSlot.Type.HAND, 1, 5, "offhand"), + FEET(EntityEquipmentSlot.Type.ARMOR, 0, 1, "feet"), + LEGS(EntityEquipmentSlot.Type.ARMOR, 1, 2, "legs"), + CHEST(EntityEquipmentSlot.Type.ARMOR, 2, 3, "chest"), + HEAD(EntityEquipmentSlot.Type.ARMOR, 3, 4, "head"); + + private final EntityEquipmentSlot.Type slotType; + private final int index; + private final int slotIndex; + private final String name; + + private EntityEquipmentSlot(EntityEquipmentSlot.Type slotTypeIn, int indexIn, int slotIndexIn, String nameIn) + { + this.slotType = slotTypeIn; + this.index = indexIn; + this.slotIndex = slotIndexIn; + this.name = nameIn; + } + + public EntityEquipmentSlot.Type getSlotType() + { + return this.slotType; + } + + public int getIndex() + { + return this.index; + } + + /** + * Gets the actual slot index. + */ + public int getSlotIndex() + { + return this.slotIndex; + } + + public String getName() + { + return this.name; + } + + public static EntityEquipmentSlot fromString(String targetName) + { + for (EntityEquipmentSlot entityequipmentslot : values()) + { + if (entityequipmentslot.getName().equals(targetName)) + { + return entityequipmentslot; + } + } + + throw new IllegalArgumentException("Invalid slot '" + targetName + "'"); + } + + public static enum Type { + HAND, + ARMOR; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/IContainerListener.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/IContainerListener.java new file mode 100644 index 0000000..5635471 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/IContainerListener.java @@ -0,0 +1,27 @@ +package net.minecraft.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +public interface IContainerListener +{ + /** + * update the crafting window inventory with the items in the list + */ + void sendAllContents(Container containerToSend, NonNullList itemsList); + + /** + * Sends the contents of an inventory slot to the client-side Container. This doesn't have to match the actual + * contents of that slot. + */ + void sendSlotContents(Container containerToSend, int slotInd, ItemStack stack); + + /** + * Sends two ints to the client-side Container. Used for furnace burning time, smelting progress, brewing progress, + * and enchanting level. Normally the first int identifies which variable to update, and the second contains the new + * value. Both are truncated to shorts in non-local SMP. + */ + void sendWindowProperty(Container containerIn, int varToUpdate, int newValue); + + void sendAllWindowProperties(Container containerIn, IInventory inventory); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/IInventory.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/IInventory.java new file mode 100644 index 0000000..5b05239 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/IInventory.java @@ -0,0 +1,69 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.IWorldNameable; + +public interface IInventory extends IWorldNameable +{ + /** + * Returns the number of slots in the inventory. + */ + int getSizeInventory(); + + boolean isEmpty(); + + /** + * Returns the stack in the given slot. + */ + ItemStack getStackInSlot(int index); + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + ItemStack decrStackSize(int index, int count); + + /** + * Removes a stack from the given slot and returns it. + */ + ItemStack removeStackFromSlot(int index); + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + void setInventorySlotContents(int index, ItemStack stack); + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + int getInventoryStackLimit(); + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + void markDirty(); + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + boolean isUsableByPlayer(EntityPlayer player); + + void openInventory(EntityPlayer player); + + void closeInventory(EntityPlayer player); + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + boolean isItemValidForSlot(int index, ItemStack stack); + + int getField(int id); + + void setField(int id, int value); + + int getFieldCount(); + + void clear(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/IInventoryChangedListener.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/IInventoryChangedListener.java new file mode 100644 index 0000000..6838d75 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/IInventoryChangedListener.java @@ -0,0 +1,9 @@ +package net.minecraft.inventory; + +public interface IInventoryChangedListener +{ + /** + * Called by InventoryBasic.onInventoryChanged() on a array that is never filled. + */ + void onInventoryChanged(IInventory invBasic); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ISidedInventory.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ISidedInventory.java new file mode 100644 index 0000000..e84f7e8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ISidedInventory.java @@ -0,0 +1,19 @@ +package net.minecraft.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +public interface ISidedInventory extends IInventory +{ + int[] getSlotsForFace(EnumFacing side); + + /** + * Returns true if automation can insert the given item in the given slot from the given side. + */ + boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction); + + /** + * Returns true if automation can extract the given item in the given slot from the given side. + */ + boolean canExtractItem(int index, ItemStack stack, EnumFacing direction); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryBasic.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryBasic.java new file mode 100644 index 0000000..d6ea0fb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryBasic.java @@ -0,0 +1,276 @@ +package net.minecraft.inventory; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class InventoryBasic implements IInventory +{ + private String inventoryTitle; + private final int slotsCount; + private final NonNullList inventoryContents; + /** Listeners notified when any item in this inventory is changed. */ + private List changeListeners; + private boolean hasCustomName; + + public InventoryBasic(String title, boolean customName, int slotCount) + { + this.inventoryTitle = title; + this.hasCustomName = customName; + this.slotsCount = slotCount; + this.inventoryContents = NonNullList.withSize(slotCount, ItemStack.EMPTY); + } + + @SideOnly(Side.CLIENT) + public InventoryBasic(ITextComponent title, int slotCount) + { + this(title.getUnformattedText(), true, slotCount); + } + + /** + * Add a listener that will be notified when any item in this inventory is modified. + */ + public void addInventoryChangeListener(IInventoryChangedListener listener) + { + if (this.changeListeners == null) + { + this.changeListeners = Lists.newArrayList(); + } + + this.changeListeners.add(listener); + } + + /** + * removes the specified IInvBasic from receiving further change notices + */ + public void removeInventoryChangeListener(IInventoryChangedListener listener) + { + this.changeListeners.remove(listener); + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return index >= 0 && index < this.inventoryContents.size() ? (ItemStack)this.inventoryContents.get(index) : ItemStack.EMPTY; + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.inventoryContents, index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + public ItemStack addItem(ItemStack stack) + { + ItemStack itemstack = stack.copy(); + + for (int i = 0; i < this.slotsCount; ++i) + { + ItemStack itemstack1 = this.getStackInSlot(i); + + if (itemstack1.isEmpty()) + { + this.setInventorySlotContents(i, itemstack); + this.markDirty(); + return ItemStack.EMPTY; + } + + if (ItemStack.areItemsEqual(itemstack1, itemstack)) + { + int j = Math.min(this.getInventoryStackLimit(), itemstack1.getMaxStackSize()); + int k = Math.min(itemstack.getCount(), j - itemstack1.getCount()); + + if (k > 0) + { + itemstack1.grow(k); + itemstack.shrink(k); + + if (itemstack.isEmpty()) + { + this.markDirty(); + return ItemStack.EMPTY; + } + } + } + } + + if (itemstack.getCount() != stack.getCount()) + { + this.markDirty(); + } + + return itemstack; + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + ItemStack itemstack = this.inventoryContents.get(index); + + if (itemstack.isEmpty()) + { + return ItemStack.EMPTY; + } + else + { + this.inventoryContents.set(index, ItemStack.EMPTY); + return itemstack; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + this.inventoryContents.set(index, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.slotsCount; + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.inventoryContents) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.inventoryTitle; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.hasCustomName; + } + + /** + * Sets the name of this inventory. This is displayed to the client on opening. + */ + public void setCustomName(String inventoryTitleIn) + { + this.hasCustomName = true; + this.inventoryTitle = inventoryTitleIn; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + if (this.changeListeners != null) + { + for (int i = 0; i < this.changeListeners.size(); ++i) + { + ((IInventoryChangedListener)this.changeListeners.get(i)).onInventoryChanged(this); + } + } + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + return true; + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public void clear() + { + this.inventoryContents.clear(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryCraftResult.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryCraftResult.java new file mode 100644 index 0000000..e440b5b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryCraftResult.java @@ -0,0 +1,165 @@ +package net.minecraft.inventory; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryCraftResult implements IInventory +{ + /** A list of one item containing the result of the crafting formula */ + private final NonNullList stackResult = NonNullList.withSize(1, ItemStack.EMPTY); + private IRecipe recipeUsed; + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return 1; + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.stackResult) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return this.stackResult.get(0); + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "Result"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + return ItemStackHelper.getAndRemove(this.stackResult, 0); + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stackResult, 0); + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stackResult.set(0, stack); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + return true; + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public void clear() + { + this.stackResult.clear(); + } + + public void setRecipeUsed(@Nullable IRecipe p_193056_1_) + { + this.recipeUsed = p_193056_1_; + } + + @Nullable + public IRecipe getRecipeUsed() + { + return this.recipeUsed; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryCrafting.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryCrafting.java new file mode 100644 index 0000000..bb5181b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryCrafting.java @@ -0,0 +1,199 @@ +package net.minecraft.inventory; + +import net.minecraft.client.util.RecipeItemHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; + +public class InventoryCrafting implements IInventory +{ + /** List of the stacks in the crafting matrix. */ + private final NonNullList stackList; + /** the width of the crafting inventory */ + private final int inventoryWidth; + private final int inventoryHeight; + /** Class containing the callbacks for the events on_GUIClosed and on_CraftMaxtrixChanged. */ + public final Container eventHandler; + + public InventoryCrafting(Container eventHandlerIn, int width, int height) + { + this.stackList = NonNullList.withSize(width * height, ItemStack.EMPTY); + this.eventHandler = eventHandlerIn; + this.inventoryWidth = width; + this.inventoryHeight = height; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.stackList.size(); + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.stackList) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return index >= this.getSizeInventory() ? ItemStack.EMPTY : (ItemStack)this.stackList.get(index); + } + + /** + * Gets the ItemStack in the slot specified. + */ + public ItemStack getStackInRowAndColumn(int row, int column) + { + return row >= 0 && row < this.inventoryWidth && column >= 0 && column <= this.inventoryHeight ? this.getStackInSlot(row + column * this.inventoryWidth) : ItemStack.EMPTY; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "container.crafting"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.stackList, index); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = ItemStackHelper.getAndSplit(this.stackList, index, count); + + if (!itemstack.isEmpty()) + { + this.eventHandler.onCraftMatrixChanged(this); + } + + return itemstack; + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + this.stackList.set(index, stack); + this.eventHandler.onCraftMatrixChanged(this); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + return true; + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public void clear() + { + this.stackList.clear(); + } + + public int getHeight() + { + return this.inventoryHeight; + } + + public int getWidth() + { + return this.inventoryWidth; + } + + public void fillStackedContents(RecipeItemHelper helper) + { + for (ItemStack itemstack : this.stackList) + { + helper.accountStack(itemstack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryEnderChest.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryEnderChest.java new file mode 100644 index 0000000..1e66b7f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryEnderChest.java @@ -0,0 +1,90 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntityEnderChest; + +public class InventoryEnderChest extends InventoryBasic +{ + private TileEntityEnderChest associatedChest; + + public InventoryEnderChest() + { + super("container.enderchest", false, 27); + } + + public void setChestTileEntity(TileEntityEnderChest chestTileEntity) + { + this.associatedChest = chestTileEntity; + } + + public void loadInventoryFromNBT(NBTTagList p_70486_1_) + { + for (int i = 0; i < this.getSizeInventory(); ++i) + { + this.setInventorySlotContents(i, ItemStack.EMPTY); + } + + for (int k = 0; k < p_70486_1_.tagCount(); ++k) + { + NBTTagCompound nbttagcompound = p_70486_1_.getCompoundTagAt(k); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < this.getSizeInventory()) + { + this.setInventorySlotContents(j, new ItemStack(nbttagcompound)); + } + } + } + + public NBTTagList saveInventoryToNBT() + { + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < this.getSizeInventory(); ++i) + { + ItemStack itemstack = this.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte)i); + itemstack.writeToNBT(nbttagcompound); + nbttaglist.appendTag(nbttagcompound); + } + } + + return nbttaglist; + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + return this.associatedChest != null && !this.associatedChest.canBeUsed(player) ? false : super.isUsableByPlayer(player); + } + + public void openInventory(EntityPlayer player) + { + if (this.associatedChest != null) + { + this.associatedChest.openChest(); + } + + super.openInventory(player); + } + + public void closeInventory(EntityPlayer player) + { + if (this.associatedChest != null) + { + this.associatedChest.closeChest(); + } + + super.closeInventory(player); + this.associatedChest = null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryHelper.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryHelper.java new file mode 100644 index 0000000..d0354c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryHelper.java @@ -0,0 +1,53 @@ +package net.minecraft.inventory; + +import java.util.Random; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class InventoryHelper +{ + private static final Random RANDOM = new Random(); + + public static void dropInventoryItems(World worldIn, BlockPos pos, IInventory inventory) + { + dropInventoryItems(worldIn, (double)pos.getX(), (double)pos.getY(), (double)pos.getZ(), inventory); + } + + public static void dropInventoryItems(World worldIn, Entity entityAt, IInventory inventory) + { + dropInventoryItems(worldIn, entityAt.posX, entityAt.posY, entityAt.posZ, inventory); + } + + private static void dropInventoryItems(World worldIn, double x, double y, double z, IInventory inventory) + { + for (int i = 0; i < inventory.getSizeInventory(); ++i) + { + ItemStack itemstack = inventory.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + spawnItemStack(worldIn, x, y, z, itemstack); + } + } + } + + public static void spawnItemStack(World worldIn, double x, double y, double z, ItemStack stack) + { + float f = RANDOM.nextFloat() * 0.8F + 0.1F; + float f1 = RANDOM.nextFloat() * 0.8F + 0.1F; + float f2 = RANDOM.nextFloat() * 0.8F + 0.1F; + + while (!stack.isEmpty()) + { + EntityItem entityitem = new EntityItem(worldIn, x + (double)f, y + (double)f1, z + (double)f2, stack.splitStack(RANDOM.nextInt(21) + 10)); + float f3 = 0.05F; + entityitem.motionX = RANDOM.nextGaussian() * 0.05000000074505806D; + entityitem.motionY = RANDOM.nextGaussian() * 0.05000000074505806D + 0.20000000298023224D; + entityitem.motionZ = RANDOM.nextGaussian() * 0.05000000074505806D; + worldIn.spawnEntity(entityitem); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryLargeChest.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryLargeChest.java new file mode 100644 index 0000000..e18340e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryLargeChest.java @@ -0,0 +1,231 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.LockCode; + +public class InventoryLargeChest implements ILockableContainer +{ + /** Name of the chest. */ + private final String name; + /** Inventory object corresponding to double chest upper part */ + private final ILockableContainer upperChest; + /** Inventory object corresponding to double chest lower part */ + private final ILockableContainer lowerChest; + + public InventoryLargeChest(String nameIn, ILockableContainer upperChestIn, ILockableContainer lowerChestIn) + { + this.name = nameIn; + + if (upperChestIn == null) + { + upperChestIn = lowerChestIn; + } + + if (lowerChestIn == null) + { + lowerChestIn = upperChestIn; + } + + this.upperChest = upperChestIn; + this.lowerChest = lowerChestIn; + + if (upperChestIn.isLocked()) + { + lowerChestIn.setLockCode(upperChestIn.getLockCode()); + } + else if (lowerChestIn.isLocked()) + { + upperChestIn.setLockCode(lowerChestIn.getLockCode()); + } + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + public boolean isEmpty() + { + return this.upperChest.isEmpty() && this.lowerChest.isEmpty(); + } + + /** + * Return whether the given inventory is part of this large chest. + */ + public boolean isPartOfLargeChest(IInventory inventoryIn) + { + return this.upperChest == inventoryIn || this.lowerChest == inventoryIn; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + if (this.upperChest.hasCustomName()) + { + return this.upperChest.getName(); + } + else + { + return this.lowerChest.hasCustomName() ? this.lowerChest.getName() : this.name; + } + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.upperChest.hasCustomName() || this.lowerChest.hasCustomName(); + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return index >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(index - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(index); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + return index >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(index - this.upperChest.getSizeInventory(), count) : this.upperChest.decrStackSize(index, count); + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + return index >= this.upperChest.getSizeInventory() ? this.lowerChest.removeStackFromSlot(index - this.upperChest.getSizeInventory()) : this.upperChest.removeStackFromSlot(index); + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + if (index >= this.upperChest.getSizeInventory()) + { + this.lowerChest.setInventorySlotContents(index - this.upperChest.getSizeInventory(), stack); + } + else + { + this.upperChest.setInventorySlotContents(index, stack); + } + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return this.upperChest.getInventoryStackLimit(); + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + this.upperChest.markDirty(); + this.lowerChest.markDirty(); + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + return this.upperChest.isUsableByPlayer(player) && this.lowerChest.isUsableByPlayer(player); + } + + public void openInventory(EntityPlayer player) + { + this.upperChest.openInventory(player); + this.lowerChest.openInventory(player); + } + + public void closeInventory(EntityPlayer player) + { + this.upperChest.closeInventory(player); + this.lowerChest.closeInventory(player); + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public boolean isLocked() + { + return this.upperChest.isLocked() || this.lowerChest.isLocked(); + } + + public void setLockCode(LockCode code) + { + this.upperChest.setLockCode(code); + this.lowerChest.setLockCode(code); + } + + public LockCode getLockCode() + { + return this.upperChest.getLockCode(); + } + + public String getGuiID() + { + return this.upperChest.getGuiID(); + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerChest(playerInventory, this, playerIn); + } + + public void clear() + { + this.upperChest.clear(); + this.lowerChest.clear(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryMerchant.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryMerchant.java new file mode 100644 index 0000000..6f319d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/InventoryMerchant.java @@ -0,0 +1,262 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.village.MerchantRecipe; +import net.minecraft.village.MerchantRecipeList; + +public class InventoryMerchant implements IInventory +{ + private final IMerchant merchant; + private final NonNullList slots = NonNullList.withSize(3, ItemStack.EMPTY); + private final EntityPlayer player; + private MerchantRecipe currentRecipe; + private int currentRecipeIndex; + + public InventoryMerchant(EntityPlayer thePlayerIn, IMerchant theMerchantIn) + { + this.player = thePlayerIn; + this.merchant = theMerchantIn; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.slots.size(); + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.slots) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return this.slots.get(index); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + ItemStack itemstack = this.slots.get(index); + + if (index == 2 && !itemstack.isEmpty()) + { + return ItemStackHelper.getAndSplit(this.slots, index, itemstack.getCount()); + } + else + { + ItemStack itemstack1 = ItemStackHelper.getAndSplit(this.slots, index, count); + + if (!itemstack1.isEmpty() && this.inventoryResetNeededOnSlotChange(index)) + { + this.resetRecipeAndSlots(); + } + + return itemstack1; + } + } + + /** + * if par1 slot has changed, does resetRecipeAndSlots need to be called? + */ + private boolean inventoryResetNeededOnSlotChange(int slotIn) + { + return slotIn == 0 || slotIn == 1; + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.slots, index); + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + this.slots.set(index, stack); + + if (!stack.isEmpty() && stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + if (this.inventoryResetNeededOnSlotChange(index)) + { + this.resetRecipeAndSlots(); + } + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "mob.villager"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + return this.merchant.getCustomer() == player; + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + this.resetRecipeAndSlots(); + } + + public void resetRecipeAndSlots() + { + this.currentRecipe = null; + ItemStack itemstack = this.slots.get(0); + ItemStack itemstack1 = this.slots.get(1); + + if (itemstack.isEmpty()) + { + itemstack = itemstack1; + itemstack1 = ItemStack.EMPTY; + } + + if (itemstack.isEmpty()) + { + this.setInventorySlotContents(2, ItemStack.EMPTY); + } + else + { + MerchantRecipeList merchantrecipelist = this.merchant.getRecipes(this.player); + + if (merchantrecipelist != null) + { + MerchantRecipe merchantrecipe = merchantrecipelist.canRecipeBeUsed(itemstack, itemstack1, this.currentRecipeIndex); + + if (merchantrecipe != null && !merchantrecipe.isRecipeDisabled()) + { + this.currentRecipe = merchantrecipe; + this.setInventorySlotContents(2, merchantrecipe.getItemToSell().copy()); + } + else if (!itemstack1.isEmpty()) + { + merchantrecipe = merchantrecipelist.canRecipeBeUsed(itemstack1, itemstack, this.currentRecipeIndex); + + if (merchantrecipe != null && !merchantrecipe.isRecipeDisabled()) + { + this.currentRecipe = merchantrecipe; + this.setInventorySlotContents(2, merchantrecipe.getItemToSell().copy()); + } + else + { + this.setInventorySlotContents(2, ItemStack.EMPTY); + } + } + else + { + this.setInventorySlotContents(2, ItemStack.EMPTY); + } + } + + this.merchant.verifySellingItem(this.getStackInSlot(2)); + } + } + + public MerchantRecipe getCurrentRecipe() + { + return this.currentRecipe; + } + + public void setCurrentRecipeIndex(int currentRecipeIndexIn) + { + this.currentRecipeIndex = currentRecipeIndexIn; + this.resetRecipeAndSlots(); + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public void clear() + { + this.slots.clear(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/ItemStackHelper.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/ItemStackHelper.java new file mode 100644 index 0000000..2991c03 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/ItemStackHelper.java @@ -0,0 +1,66 @@ +package net.minecraft.inventory; + +import java.util.List; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; + +public class ItemStackHelper +{ + public static ItemStack getAndSplit(List stacks, int index, int amount) + { + return index >= 0 && index < stacks.size() && !((ItemStack)stacks.get(index)).isEmpty() && amount > 0 ? ((ItemStack)stacks.get(index)).splitStack(amount) : ItemStack.EMPTY; + } + + public static ItemStack getAndRemove(List stacks, int index) + { + return index >= 0 && index < stacks.size() ? (ItemStack)stacks.set(index, ItemStack.EMPTY) : ItemStack.EMPTY; + } + + public static NBTTagCompound saveAllItems(NBTTagCompound tag, NonNullList list) + { + return saveAllItems(tag, list, true); + } + + public static NBTTagCompound saveAllItems(NBTTagCompound tag, NonNullList list, boolean saveEmpty) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (int i = 0; i < list.size(); ++i) + { + ItemStack itemstack = list.get(i); + + if (!itemstack.isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte)i); + itemstack.writeToNBT(nbttagcompound); + nbttaglist.appendTag(nbttagcompound); + } + } + + if (!nbttaglist.hasNoTags() || saveEmpty) + { + tag.setTag("Items", nbttaglist); + } + + return tag; + } + + public static void loadAllItems(NBTTagCompound tag, NonNullList list) + { + NBTTagList nbttaglist = tag.getTagList("Items", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getByte("Slot") & 255; + + if (j >= 0 && j < list.size()) + { + list.set(j, new ItemStack(nbttagcompound)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/Slot.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/Slot.java new file mode 100644 index 0000000..b72d301 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/Slot.java @@ -0,0 +1,234 @@ +package net.minecraft.inventory; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Slot +{ + /** The index of the slot in the inventory. */ + private final int slotIndex; + /** The inventory we want to extract a slot from. */ + public final IInventory inventory; + /** the id of the slot(also the index in the inventory arraylist) */ + public int slotNumber; + /** display position of the inventory slot on the screen x axis */ + public int xPos; + /** display position of the inventory slot on the screen y axis */ + public int yPos; + + public Slot(IInventory inventoryIn, int index, int xPosition, int yPosition) + { + this.inventory = inventoryIn; + this.slotIndex = index; + this.xPos = xPosition; + this.yPos = yPosition; + } + + /** + * if par2 has more items than par1, onCrafting(item,countIncrease) is called + */ + public void onSlotChange(ItemStack p_75220_1_, ItemStack p_75220_2_) + { + int i = p_75220_2_.getCount() - p_75220_1_.getCount(); + + if (i > 0) + { + this.onCrafting(p_75220_2_, i); + } + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an + * internal count then calls onCrafting(item). + */ + protected void onCrafting(ItemStack stack, int amount) + { + } + + protected void onSwapCraft(int p_190900_1_) + { + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. + */ + protected void onCrafting(ItemStack stack) + { + } + + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + this.onSlotChanged(); + return stack; + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return true; + } + + /** + * Helper fnct to get the stack in the slot. + */ + public ItemStack getStack() + { + return this.inventory.getStackInSlot(this.slotIndex); + } + + /** + * Returns if this slot contains a stack. + */ + public boolean getHasStack() + { + return !this.getStack().isEmpty(); + } + + /** + * Helper method to put a stack in the slot. + */ + public void putStack(ItemStack stack) + { + this.inventory.setInventorySlotContents(this.slotIndex, stack); + this.onSlotChanged(); + } + + /** + * Called when the stack in a Slot changes + */ + public void onSlotChanged() + { + this.inventory.markDirty(); + } + + /** + * Returns the maximum stack size for a given slot (usually the same as getInventoryStackLimit(), but 1 in the case + * of armor slots) + */ + public int getSlotStackLimit() + { + return this.inventory.getInventoryStackLimit(); + } + + public int getItemStackLimit(ItemStack stack) + { + return this.getSlotStackLimit(); + } + + @Nullable + @SideOnly(Side.CLIENT) + public String getSlotTexture() + { + return backgroundName; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int amount) + { + return this.inventory.decrStackSize(this.slotIndex, amount); + } + + /** + * returns true if the slot exists in the given inventory and location + */ + public boolean isHere(IInventory inv, int slotIn) + { + return inv == this.inventory && slotIn == this.slotIndex; + } + + /** + * Return whether this slot's stack can be taken from this slot. + */ + public boolean canTakeStack(EntityPlayer playerIn) + { + return true; + } + + /** + * Actualy only call when we want to render the white square effect over the slots. Return always True, except for + * the armor slot of the Donkey/Mule (we can't interact with the Undead and Skeleton horses) + */ + @SideOnly(Side.CLIENT) + public boolean isEnabled() + { + return true; + } + + /*========================================= FORGE START =====================================*/ + protected String backgroundName = null; + protected net.minecraft.util.ResourceLocation backgroundLocation = null; + protected Object backgroundMap; + /** + * Gets the path of the texture file to use for the background image of this slot when drawing the GUI. + * @return The resource location for the background image + */ + @SideOnly(Side.CLIENT) + public net.minecraft.util.ResourceLocation getBackgroundLocation() + { + return (backgroundLocation == null ? net.minecraft.client.renderer.texture.TextureMap.LOCATION_BLOCKS_TEXTURE : backgroundLocation); + } + + /** + * Sets the texture file to use for the background image of the slot when it's empty. + * @param texture the resourcelocation for the texture + */ + @SideOnly(Side.CLIENT) + public void setBackgroundLocation(net.minecraft.util.ResourceLocation texture) + { + this.backgroundLocation = texture; + } + + /** + * Sets which icon index to use as the background image of the slot when it's empty. + * @param name The icon to use, null for none + */ + public void setBackgroundName(@Nullable String name) + { + this.backgroundName = name; + } + + @Nullable + @SideOnly(Side.CLIENT) + public net.minecraft.client.renderer.texture.TextureAtlasSprite getBackgroundSprite() + { + String name = getSlotTexture(); + return name == null ? null : getBackgroundMap().getAtlasSprite(name); + } + + @SideOnly(Side.CLIENT) + protected net.minecraft.client.renderer.texture.TextureMap getBackgroundMap() + { + if (backgroundMap == null) backgroundMap = net.minecraft.client.Minecraft.getMinecraft().getTextureMapBlocks(); + return (net.minecraft.client.renderer.texture.TextureMap)backgroundMap; + } + + /** + * Retrieves the index in the inventory for this slot, this value should typically not + * be used, but can be useful for some occasions. + * + * @return Index in associated inventory for this slot. + */ + public int getSlotIndex() + { + return slotIndex; + } + + /** + * Checks if the other slot is in the same inventory, by comparing the inventory reference. + * @param other + * @return true if the other slot is in the same inventory + */ + public boolean isSameInventory(Slot other) + { + return this.inventory == other.inventory; + } + /*========================================= FORGE END =====================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotCrafting.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotCrafting.java new file mode 100644 index 0000000..e4c8425 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotCrafting.java @@ -0,0 +1,123 @@ +package net.minecraft.inventory; + +import com.google.common.collect.Lists; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.NonNullList; + +public class SlotCrafting extends Slot +{ + /** The craft matrix inventory linked to this result slot. */ + private final InventoryCrafting craftMatrix; + /** The player that is using the GUI where this slot resides. */ + public final EntityPlayer player; + /** The number of items that have been crafted so far. Gets passed to ItemStack.onCrafting before being reset. */ + private int amountCrafted; + + public SlotCrafting(EntityPlayer player, InventoryCrafting craftingInventory, IInventory inventoryIn, int slotIndex, int xPosition, int yPosition) + { + super(inventoryIn, slotIndex, xPosition, yPosition); + this.player = player; + this.craftMatrix = craftingInventory; + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return false; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int amount) + { + if (this.getHasStack()) + { + this.amountCrafted += Math.min(amount, this.getStack().getCount()); + } + + return super.decrStackSize(amount); + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an + * internal count then calls onCrafting(item). + */ + protected void onCrafting(ItemStack stack, int amount) + { + this.amountCrafted += amount; + this.onCrafting(stack); + } + + protected void onSwapCraft(int p_190900_1_) + { + this.amountCrafted += p_190900_1_; + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. + */ + protected void onCrafting(ItemStack stack) + { + if (this.amountCrafted > 0) + { + stack.onCrafting(this.player.world, this.player, this.amountCrafted); + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerCraftingEvent(this.player, stack, craftMatrix); + } + + this.amountCrafted = 0; + InventoryCraftResult inventorycraftresult = (InventoryCraftResult)this.inventory; + IRecipe irecipe = inventorycraftresult.getRecipeUsed(); + + if (irecipe != null && !irecipe.isDynamic()) + { + this.player.unlockRecipes(Lists.newArrayList(irecipe)); + inventorycraftresult.setRecipeUsed((IRecipe)null); + } + } + + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + this.onCrafting(stack); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(thePlayer); + NonNullList nonnulllist = CraftingManager.getRemainingItems(this.craftMatrix, thePlayer.world); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = this.craftMatrix.getStackInSlot(i); + ItemStack itemstack1 = nonnulllist.get(i); + + if (!itemstack.isEmpty()) + { + this.craftMatrix.decrStackSize(i, 1); + itemstack = this.craftMatrix.getStackInSlot(i); + } + + if (!itemstack1.isEmpty()) + { + if (itemstack.isEmpty()) + { + this.craftMatrix.setInventorySlotContents(i, itemstack1); + } + else if (ItemStack.areItemsEqual(itemstack, itemstack1) && ItemStack.areItemStackTagsEqual(itemstack, itemstack1)) + { + itemstack1.grow(itemstack.getCount()); + this.craftMatrix.setInventorySlotContents(i, itemstack1); + } + else if (!this.player.inventory.addItemStackToInventory(itemstack1)) + { + this.player.dropItem(itemstack1, false); + } + } + } + + return stack; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotFurnaceFuel.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotFurnaceFuel.java new file mode 100644 index 0000000..4ae52c0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotFurnaceFuel.java @@ -0,0 +1,31 @@ +package net.minecraft.inventory; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityFurnace; + +public class SlotFurnaceFuel extends Slot +{ + public SlotFurnaceFuel(IInventory inventoryIn, int slotIndex, int xPosition, int yPosition) + { + super(inventoryIn, slotIndex, xPosition, yPosition); + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return TileEntityFurnace.isItemFuel(stack) || isBucket(stack); + } + + public int getItemStackLimit(ItemStack stack) + { + return isBucket(stack) ? 1 : super.getItemStackLimit(stack); + } + + public static boolean isBucket(ItemStack stack) + { + return stack.getItem() == Items.BUCKET; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotFurnaceOutput.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotFurnaceOutput.java new file mode 100644 index 0000000..3c13fda --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotFurnaceOutput.java @@ -0,0 +1,99 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.util.math.MathHelper; + +public class SlotFurnaceOutput extends Slot +{ + /** The player that is using the GUI where this slot resides. */ + private final EntityPlayer player; + private int removeCount; + + public SlotFurnaceOutput(EntityPlayer player, IInventory inventoryIn, int slotIndex, int xPosition, int yPosition) + { + super(inventoryIn, slotIndex, xPosition, yPosition); + this.player = player; + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return false; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int amount) + { + if (this.getHasStack()) + { + this.removeCount += Math.min(amount, this.getStack().getCount()); + } + + return super.decrStackSize(amount); + } + + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + this.onCrafting(stack); + super.onTake(thePlayer, stack); + return stack; + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an + * internal count then calls onCrafting(item). + */ + protected void onCrafting(ItemStack stack, int amount) + { + this.removeCount += amount; + this.onCrafting(stack); + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. + */ + protected void onCrafting(ItemStack stack) + { + stack.onCrafting(this.player.world, this.player, this.removeCount); + + if (!this.player.world.isRemote) + { + int i = this.removeCount; + float f = FurnaceRecipes.instance().getSmeltingExperience(stack); + + if (f == 0.0F) + { + i = 0; + } + else if (f < 1.0F) + { + int j = MathHelper.floor((float)i * f); + + if (j < MathHelper.ceil((float)i * f) && Math.random() < (double)((float)i * f - (float)j)) + { + ++j; + } + + i = j; + } + + while (i > 0) + { + int k = EntityXPOrb.getXPSplit(i); + i -= k; + this.player.world.spawnEntity(new EntityXPOrb(this.player.world, this.player.posX, this.player.posY + 0.5D, this.player.posZ + 0.5D, k)); + } + } + + this.removeCount = 0; + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerSmeltedEvent(player, stack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotMerchantResult.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotMerchantResult.java new file mode 100644 index 0000000..be51aaf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotMerchantResult.java @@ -0,0 +1,113 @@ +package net.minecraft.inventory; + +import net.minecraft.entity.IMerchant; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.StatList; +import net.minecraft.village.MerchantRecipe; + +public class SlotMerchantResult extends Slot +{ + /** Merchant's inventory. */ + private final InventoryMerchant merchantInventory; + /** The Player whos trying to buy/sell stuff. */ + private final EntityPlayer player; + private int removeCount; + /** "Instance" of the Merchant. */ + private final IMerchant merchant; + + public SlotMerchantResult(EntityPlayer player, IMerchant merchant, InventoryMerchant merchantInventory, int slotIndex, int xPosition, int yPosition) + { + super(merchantInventory, slotIndex, xPosition, yPosition); + this.player = player; + this.merchant = merchant; + this.merchantInventory = merchantInventory; + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return false; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int amount) + { + if (this.getHasStack()) + { + this.removeCount += Math.min(amount, this.getStack().getCount()); + } + + return super.decrStackSize(amount); + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an + * internal count then calls onCrafting(item). + */ + protected void onCrafting(ItemStack stack, int amount) + { + this.removeCount += amount; + this.onCrafting(stack); + } + + /** + * the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. + */ + protected void onCrafting(ItemStack stack) + { + stack.onCrafting(this.player.world, this.player, this.removeCount); + this.removeCount = 0; + } + + public ItemStack onTake(EntityPlayer thePlayer, ItemStack stack) + { + this.onCrafting(stack); + MerchantRecipe merchantrecipe = this.merchantInventory.getCurrentRecipe(); + + if (merchantrecipe != null) + { + ItemStack itemstack = this.merchantInventory.getStackInSlot(0); + ItemStack itemstack1 = this.merchantInventory.getStackInSlot(1); + + if (this.doTrade(merchantrecipe, itemstack, itemstack1) || this.doTrade(merchantrecipe, itemstack1, itemstack)) + { + this.merchant.useRecipe(merchantrecipe); + thePlayer.addStat(StatList.TRADED_WITH_VILLAGER); + this.merchantInventory.setInventorySlotContents(0, itemstack); + this.merchantInventory.setInventorySlotContents(1, itemstack1); + } + } + + return stack; + } + + private boolean doTrade(MerchantRecipe trade, ItemStack firstItem, ItemStack secondItem) + { + ItemStack itemstack = trade.getItemToBuy(); + ItemStack itemstack1 = trade.getSecondItemToBuy(); + + if (firstItem.getItem() == itemstack.getItem() && firstItem.getCount() >= itemstack.getCount()) + { + if (!itemstack1.isEmpty() && !secondItem.isEmpty() && itemstack1.getItem() == secondItem.getItem() && secondItem.getCount() >= itemstack1.getCount()) + { + firstItem.shrink(itemstack.getCount()); + secondItem.shrink(itemstack1.getCount()); + return true; + } + + if (itemstack1.isEmpty() && secondItem.isEmpty()) + { + firstItem.shrink(itemstack.getCount()); + return true; + } + } + + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotShulkerBox.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotShulkerBox.java new file mode 100644 index 0000000..d5c2d75 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/SlotShulkerBox.java @@ -0,0 +1,21 @@ +package net.minecraft.inventory; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockShulkerBox; +import net.minecraft.item.ItemStack; + +public class SlotShulkerBox extends Slot +{ + public SlotShulkerBox(IInventory p_i47265_1_, int slotIndexIn, int xPosition, int yPosition) + { + super(p_i47265_1_, slotIndexIn, xPosition, yPosition); + } + + /** + * Check if the stack is allowed to be placed in this slot, used for armor slots as well as furnace fuel. + */ + public boolean isItemValid(ItemStack stack) + { + return !(Block.getBlockFromItem(stack.getItem()) instanceof BlockShulkerBox); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/inventory/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/inventory/package-info.java new file mode 100644 index 0000000..f9ef1b8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/inventory/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.inventory; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/EnumAction.java b/build/tmp/recompileMc/sources/net/minecraft/item/EnumAction.java new file mode 100644 index 0000000..f1395cd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/EnumAction.java @@ -0,0 +1,10 @@ +package net.minecraft.item; + +public enum EnumAction +{ + NONE, + EAT, + DRINK, + BLOCK, + BOW; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/EnumDyeColor.java b/build/tmp/recompileMc/sources/net/minecraft/item/EnumDyeColor.java new file mode 100644 index 0000000..a537598 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/EnumDyeColor.java @@ -0,0 +1,133 @@ +package net.minecraft.item; + +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public enum EnumDyeColor implements IStringSerializable +{ + WHITE(0, 15, "white", "white", 16383998, TextFormatting.WHITE), + ORANGE(1, 14, "orange", "orange", 16351261, TextFormatting.GOLD), + MAGENTA(2, 13, "magenta", "magenta", 13061821, TextFormatting.AQUA), + LIGHT_BLUE(3, 12, "light_blue", "lightBlue", 3847130, TextFormatting.BLUE), + YELLOW(4, 11, "yellow", "yellow", 16701501, TextFormatting.YELLOW), + LIME(5, 10, "lime", "lime", 8439583, TextFormatting.GREEN), + PINK(6, 9, "pink", "pink", 15961002, TextFormatting.LIGHT_PURPLE), + GRAY(7, 8, "gray", "gray", 4673362, TextFormatting.DARK_GRAY), + SILVER(8, 7, "silver", "silver", 10329495, TextFormatting.GRAY), + CYAN(9, 6, "cyan", "cyan", 1481884, TextFormatting.DARK_AQUA), + PURPLE(10, 5, "purple", "purple", 8991416, TextFormatting.DARK_PURPLE), + BLUE(11, 4, "blue", "blue", 3949738, TextFormatting.DARK_BLUE), + BROWN(12, 3, "brown", "brown", 8606770, TextFormatting.GOLD), + GREEN(13, 2, "green", "green", 6192150, TextFormatting.DARK_GREEN), + RED(14, 1, "red", "red", 11546150, TextFormatting.DARK_RED), + BLACK(15, 0, "black", "black", 1908001, TextFormatting.BLACK); + + private static final EnumDyeColor[] META_LOOKUP = new EnumDyeColor[values().length]; + private static final EnumDyeColor[] DYE_DMG_LOOKUP = new EnumDyeColor[values().length]; + private final int meta; + private final int dyeDamage; + private final String name; + private final String unlocalizedName; + /** An int containing the corresponding RGB color for this dye color. */ + private final int colorValue; + /** + * An array containing 3 floats ranging from 0.0 to 1.0: the red, green, and blue components of the corresponding + * color. + */ + private final float[] colorComponentValues; + private final TextFormatting chatColor; + + private EnumDyeColor(int metaIn, int dyeDamageIn, String nameIn, String unlocalizedNameIn, int colorValueIn, TextFormatting chatColorIn) + { + this.meta = metaIn; + this.dyeDamage = dyeDamageIn; + this.name = nameIn; + this.unlocalizedName = unlocalizedNameIn; + this.colorValue = colorValueIn; + this.chatColor = chatColorIn; + int i = (colorValueIn & 16711680) >> 16; + int j = (colorValueIn & 65280) >> 8; + int k = (colorValueIn & 255) >> 0; + this.colorComponentValues = new float[] {(float)i / 255.0F, (float)j / 255.0F, (float)k / 255.0F}; + } + + public int getMetadata() + { + return this.meta; + } + + public int getDyeDamage() + { + return this.dyeDamage; + } + + @SideOnly(Side.CLIENT) + public String getDyeColorName() + { + return this.name; + } + + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + /** + * Gets the RGB color corresponding to this dye color. + */ + @SideOnly(Side.CLIENT) + public int getColorValue() + { + return this.colorValue; + } + + /** + * Gets an array containing 3 floats ranging from 0.0 to 1.0: the red, green, and blue components of the + * corresponding color. + */ + public float[] getColorComponentValues() + { + return this.colorComponentValues; + } + + public static EnumDyeColor byDyeDamage(int damage) + { + if (damage < 0 || damage >= DYE_DMG_LOOKUP.length) + { + damage = 0; + } + + return DYE_DMG_LOOKUP[damage]; + } + + public static EnumDyeColor byMetadata(int meta) + { + if (meta < 0 || meta >= META_LOOKUP.length) + { + meta = 0; + } + + return META_LOOKUP[meta]; + } + + public String toString() + { + return this.unlocalizedName; + } + + public String getName() + { + return this.name; + } + + static + { + for (EnumDyeColor enumdyecolor : values()) + { + META_LOOKUP[enumdyecolor.getMetadata()] = enumdyecolor; + DYE_DMG_LOOKUP[enumdyecolor.getDyeDamage()] = enumdyecolor; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/EnumRarity.java b/build/tmp/recompileMc/sources/net/minecraft/item/EnumRarity.java new file mode 100644 index 0000000..cf12cdf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/EnumRarity.java @@ -0,0 +1,25 @@ +package net.minecraft.item; + +import net.minecraft.util.text.TextFormatting; + +public enum EnumRarity +{ + COMMON(TextFormatting.WHITE, "Common"), + UNCOMMON(TextFormatting.YELLOW, "Uncommon"), + RARE(TextFormatting.AQUA, "Rare"), + EPIC(TextFormatting.LIGHT_PURPLE, "Epic"); + + /** + * A decimal representation of the hex color codes of a the color assigned to this rarity type. (13 becomes d as in + * \247d which is light purple) + */ + public final TextFormatting rarityColor; + /** Rarity name. */ + public final String rarityName; + + private EnumRarity(TextFormatting color, String name) + { + this.rarityColor = color; + this.rarityName = name; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/IItemPropertyGetter.java b/build/tmp/recompileMc/sources/net/minecraft/item/IItemPropertyGetter.java new file mode 100644 index 0000000..b83bd71 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/IItemPropertyGetter.java @@ -0,0 +1,13 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IItemPropertyGetter +{ + @SideOnly(Side.CLIENT) + float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/Item.java b/build/tmp/recompileMc/sources/net/minecraft/item/Item.java new file mode 100644 index 0000000..f1bc2ac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/Item.java @@ -0,0 +1,2004 @@ +package net.minecraft.item; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockFlower; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockPrismarine; +import net.minecraft.block.BlockRedSandstone; +import net.minecraft.block.BlockSand; +import net.minecraft.block.BlockSandStone; +import net.minecraft.block.BlockSilverfish; +import net.minecraft.block.BlockStone; +import net.minecraft.block.BlockStoneBrick; +import net.minecraft.block.BlockWall; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.registry.IRegistry; +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraft.util.registry.RegistrySimple; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Item extends net.minecraftforge.registries.IForgeRegistryEntry.Impl +{ + public static final RegistryNamespaced REGISTRY = net.minecraftforge.registries.GameData.getWrapper(Item.class); + private static final Map BLOCK_TO_ITEM = net.minecraftforge.registries.GameData.getBlockItemMap(); + private static final IItemPropertyGetter DAMAGED_GETTER = new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return stack.isItemDamaged() ? 1.0F : 0.0F; + } + }; + private static final IItemPropertyGetter DAMAGE_GETTER = new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return MathHelper.clamp((float)stack.getItemDamage() / (float)stack.getMaxDamage(), 0.0F, 1.0F); + } + }; + private static final IItemPropertyGetter LEFTHANDED_GETTER = new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return entityIn != null && entityIn.getPrimaryHand() != EnumHandSide.RIGHT ? 1.0F : 0.0F; + } + }; + private static final IItemPropertyGetter COOLDOWN_GETTER = new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return entityIn instanceof EntityPlayer ? ((EntityPlayer)entityIn).getCooldownTracker().getCooldown(stack.getItem(), 0.0F) : 0.0F; + } + }; + private final IRegistry properties = new RegistrySimple(); + protected static final UUID ATTACK_DAMAGE_MODIFIER = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); + protected static final UUID ATTACK_SPEED_MODIFIER = UUID.fromString("FA233E1C-4180-4865-B01B-BCCE9785ACA3"); + private CreativeTabs tabToDisplayOn; + /** The RNG used by the Item subclasses. */ + protected static Random itemRand = new Random(); + /** Maximum size of the stack. */ + protected int maxStackSize = 64; + /** Maximum damage an item can handle. */ + private int maxDamage; + /** If true, render the object in full 3D, like weapons and tools. */ + protected boolean bFull3D; + /** Some items (like dyes) have multiple subtypes on same item, this is field define this behavior */ + protected boolean hasSubtypes; + private Item containerItem; + /** The unlocalized name of this item. */ + private String unlocalizedName; + + public static int getIdFromItem(Item itemIn) + { + return itemIn == null ? 0 : REGISTRY.getIDForObject(itemIn); + } + + public static Item getItemById(int id) + { + return REGISTRY.getObjectById(id); + } + + public static Item getItemFromBlock(Block blockIn) + { + Item item = BLOCK_TO_ITEM.get(blockIn); + return item == null ? Items.AIR : item; + } + + /** + * Tries to get an Item by it's name (e.g. minecraft:apple) or a String representation of a numerical ID. If both + * fail, null is returned. + */ + @Nullable + public static Item getByNameOrId(String id) + { + Item item = REGISTRY.getObject(new ResourceLocation(id)); + + if (item == null) + { + try + { + return getItemById(Integer.parseInt(id)); + } + catch (NumberFormatException var3) + { + ; + } + } + + return item; + } + + /** + * Creates a new override param for item models. See usage in clock, compass, elytra, etc. + */ + public final void addPropertyOverride(ResourceLocation key, IItemPropertyGetter getter) + { + this.properties.putObject(key, getter); + } + + @Nullable + @SideOnly(Side.CLIENT) + public IItemPropertyGetter getPropertyGetter(ResourceLocation key) + { + return this.properties.getObject(key); + } + + /** + * Called when an ItemStack with NBT data is read to potentially that ItemStack's NBT data + */ + public boolean updateItemStackNBT(NBTTagCompound nbt) + { + return false; + } + + @SideOnly(Side.CLIENT) + public boolean hasCustomProperties() + { + return !this.properties.getKeys().isEmpty(); + } + + public Item() + { + this.addPropertyOverride(new ResourceLocation("lefthanded"), LEFTHANDED_GETTER); + this.addPropertyOverride(new ResourceLocation("cooldown"), COOLDOWN_GETTER); + } + + public Item setMaxStackSize(int maxStackSize) + { + this.maxStackSize = maxStackSize; + return this; + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + return EnumActionResult.PASS; + } + + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + return 1.0F; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + return new ActionResult(EnumActionResult.PASS, playerIn.getHeldItem(handIn)); + } + + /** + * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using + * the Item before the action is complete. + */ + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + return stack; + } + + /** + * Returns the maximum size of the stack for a specific item. *Isn't this more a Set than a Get?* + */ + @Deprecated // Use ItemStack sensitive version below. + public int getItemStackLimit() + { + return this.maxStackSize; + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return 0; + } + + public boolean getHasSubtypes() + { + return this.hasSubtypes; + } + + public Item setHasSubtypes(boolean hasSubtypes) + { + this.hasSubtypes = hasSubtypes; + return this; + } + + /** + * Returns the maximum damage an item can take. + */ + @Deprecated + public int getMaxDamage() + { + return this.maxDamage; + } + + /** + * set max damage of an Item + */ + public Item setMaxDamage(int maxDamageIn) + { + this.maxDamage = maxDamageIn; + + if (maxDamageIn > 0) + { + this.addPropertyOverride(new ResourceLocation("damaged"), DAMAGED_GETTER); + this.addPropertyOverride(new ResourceLocation("damage"), DAMAGE_GETTER); + } + + return this; + } + + public boolean isDamageable() + { + return this.maxDamage > 0 && (!this.hasSubtypes || this.maxStackSize == 1); + } + + /** + * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise + * the damage on the stack. + */ + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) + { + return false; + } + + /** + * Called when a Block is destroyed using this Item. Return true to trigger the "Use Item" statistic. + */ + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + return false; + } + + /** + * Check whether this Item can harvest the given Block + */ + public boolean canHarvestBlock(IBlockState blockIn) + { + return false; + } + + /** + * Returns true if the item can be used on the given entity, e.g. shears on sheep. + */ + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target, EnumHand hand) + { + return false; + } + + /** + * Sets bFull3D to True and return the object. + */ + public Item setFull3D() + { + this.bFull3D = true; + return this; + } + + /** + * Returns True is the item is renderer in full 3D when hold. + */ + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return this.bFull3D; + } + + /** + * Returns true if this item should be rotated by 180 degrees around the Y axis when being held in an entities + * hands. + */ + @SideOnly(Side.CLIENT) + public boolean shouldRotateAroundWhenRendering() + { + return false; + } + + /** + * Sets the unlocalized name of this item to the string passed as the parameter, prefixed by "item." + */ + public Item setUnlocalizedName(String unlocalizedName) + { + this.unlocalizedName = unlocalizedName; + return this; + } + + /** + * Translates the unlocalized name of this item, but without the .name suffix, so the translation fails and the + * unlocalized name itself is returned. + */ + public String getUnlocalizedNameInefficiently(ItemStack stack) + { + return I18n.translateToLocal(this.getUnlocalizedName(stack)); + } + + /** + * Returns the unlocalized name of this item. + */ + public String getUnlocalizedName() + { + return "item." + this.unlocalizedName; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return "item." + this.unlocalizedName; + } + + public Item setContainerItem(Item containerItem) + { + this.containerItem = containerItem; + return this; + } + + /** + * If this function returns true (or the item is damageable), the ItemStack's NBT tag will be sent to the client. + */ + public boolean getShareTag() + { + return true; + } + + @Nullable + public Item getContainerItem() + { + return this.containerItem; + } + + /** + * True if this Item has a container item (a.k.a. crafting result) + */ + @Deprecated // Use ItemStack sensitive version below. + public boolean hasContainerItem() + { + return this.containerItem != null; + } + + /** + * Called each tick as long the item is on a player inventory. Uses by maps to check if is on a player hand and + * update it's contents. + */ + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + { + } + + /** + * Called when item is crafted/smelted. Used only by maps so far. + */ + public void onCreated(ItemStack stack, World worldIn, EntityPlayer playerIn) + { + } + + /** + * false for all Items except sub-classes of ItemMapBase + */ + public boolean isMap() + { + return false; + } + + /** + * returns the action that specifies what animation to play when the items is being used + */ + public EnumAction getItemUseAction(ItemStack stack) + { + return EnumAction.NONE; + } + + /** + * How long it takes to use or consume an item + */ + public int getMaxItemUseDuration(ItemStack stack) + { + return 0; + } + + /** + * Called when the player stops using an Item (stops holding the right mouse button). + */ + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft) + { + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + } + + public String getItemStackDisplayName(ItemStack stack) + { + return I18n.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name").trim(); + } + + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return stack.isItemEnchanted(); + } + + /** + * Return an item rarity from EnumRarity + */ + public EnumRarity getRarity(ItemStack stack) + { + return stack.isItemEnchanted() ? EnumRarity.RARE : EnumRarity.COMMON; + } + + /** + * Checks isDamagable and if it cannot be stacked + */ + public boolean isEnchantable(ItemStack stack) + { + return this.getItemStackLimit(stack) == 1 && this.isDamageable(); + } + + protected RayTraceResult rayTrace(World worldIn, EntityPlayer playerIn, boolean useLiquids) + { + float f = playerIn.rotationPitch; + float f1 = playerIn.rotationYaw; + double d0 = playerIn.posX; + double d1 = playerIn.posY + (double)playerIn.getEyeHeight(); + double d2 = playerIn.posZ; + Vec3d vec3d = new Vec3d(d0, d1, d2); + float f2 = MathHelper.cos(-f1 * 0.017453292F - (float)Math.PI); + float f3 = MathHelper.sin(-f1 * 0.017453292F - (float)Math.PI); + float f4 = -MathHelper.cos(-f * 0.017453292F); + float f5 = MathHelper.sin(-f * 0.017453292F); + float f6 = f3 * f4; + float f7 = f2 * f4; + double d3 = playerIn.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(); + Vec3d vec3d1 = vec3d.addVector((double)f6 * d3, (double)f5 * d3, (double)f7 * d3); + return worldIn.rayTraceBlocks(vec3d, vec3d1, useLiquids, !useLiquids, false); + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return 0; + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + items.add(new ItemStack(this)); + } + } + + protected boolean isInCreativeTab(CreativeTabs targetTab) + { + for (CreativeTabs tab : this.getCreativeTabs()) + if (tab == targetTab) + return true; + CreativeTabs creativetabs = this.getCreativeTab(); + return creativetabs != null && (targetTab == CreativeTabs.SEARCH || targetTab == creativetabs); + } + + /** + * gets the CreativeTab this item is displayed on + */ + @Nullable + public CreativeTabs getCreativeTab() + { + return this.tabToDisplayOn; + } + + /** + * returns this; + */ + public Item setCreativeTab(CreativeTabs tab) + { + this.tabToDisplayOn = tab; + return this; + } + + /** + * Returns whether this item is always allowed to edit the world. Forces {@link + * net.minecraft.entity.player.EntityPlayer#canPlayerEdit EntityPlayer#canPlayerEdit} to return {@code true}. + * + * @return whether this item ignores other restrictions on how a player can modify the world. + * @see ItemStack#canEditBlocks + */ + public boolean canItemEditBlocks() + { + return false; + } + + /** + * Return whether this item is repairable in an anvil. + * + * @param toRepair the {@code ItemStack} being repaired + * @param repair the {@code ItemStack} being used to perform the repair + */ + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return false; + } + + /** + * Gets a map of item attribute modifiers, used by ItemSword to increase hit damage. + */ + @Deprecated // Use ItemStack sensitive version below. + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + return HashMultimap.create(); + } + + /* ======================================== FORGE START =====================================*/ + /** + * ItemStack sensitive version of getItemAttributeModifiers + */ + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack) + { + return this.getItemAttributeModifiers(slot); + } + + /** + * Called when a player drops the item into the world, + * returning false from this will prevent the item from + * being removed from the players inventory and spawning + * in the world + * + * @param player The player that dropped the item + * @param item The item stack, before the item is removed. + */ + public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player) + { + return true; + } + + /** + * Allow the item one last chance to modify its name used for the + * tool highlight useful for adding something extra that can't be removed + * by a user in the displayed name, such as a mode of operation. + * + * @param item the ItemStack for the item. + * @param displayName the name that will be displayed unless it is changed in this method. + */ + public String getHighlightTip( ItemStack item, String displayName ) + { + return displayName; + } + + /** + * This is called when the item is used, before the block is activated. + * @param stack The Item Stack + * @param player The Player that used the item + * @param world The Current World + * @param pos Target position + * @param side The side of the target hit + * @param hand Which hand the item is being held in. + * @return Return PASS to allow vanilla handling, any other to skip normal code. + */ + public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) + { + return EnumActionResult.PASS; + } + + protected boolean canRepair = true; + /** + * Called by CraftingManager to determine if an item is reparable. + * @return True if reparable + */ + public boolean isRepairable() + { + return canRepair && isDamageable(); + } + + /** + * Call to disable repair recipes. + * @return The current Item instance + */ + public Item setNoRepair() + { + canRepair = false; + return this; + } + + /** + * Override this method to change the NBT data being sent to the client. + * You should ONLY override this when you have no other choice, as this might change behavior client side! + * + * Note that this will sometimes be applied multiple times, the following MUST be supported: + * Item item = stack.getItem(); + * NBTTagCompound nbtShare1 = item.getNBTShareTag(stack); + * stack.setTagCompound(nbtShare1); + * NBTTagCompound nbtShare2 = item.getNBTShareTag(stack); + * assert nbtShare1.equals(nbtShare2); + * + * @param stack The stack to send the NBT tag for + * @return The NBT tag + */ + @Nullable + public NBTTagCompound getNBTShareTag(ItemStack stack) + { + return stack.getTagCompound(); + } + + /** + * Override this method to decide what to do with the NBT data received from getNBTShareTag(). + * + * @param stack The stack that received NBT + * @param nbt Received NBT, can be null + */ + public void readNBTShareTag(ItemStack stack, @Nullable NBTTagCompound nbt) + { + stack.setTagCompound(nbt); + } + + /** + * Called before a block is broken. Return true to prevent default block harvesting. + * + * Note: In SMP, this is called on both client and server sides! + * + * @param itemstack The current ItemStack + * @param pos Block's position in world + * @param player The Player that is wielding the item + * @return True to prevent harvesting, false to continue as normal + */ + public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, EntityPlayer player) + { + return false; + } + + /** + * Called each tick while using an item. + * @param stack The Item being used + * @param player The Player using the item + * @param count The amount of time in tick the item has been used for continuously + */ + public void onUsingTick(ItemStack stack, EntityLivingBase player, int count) + { + } + + /** + * Called when the player Left Clicks (attacks) an entity. + * Processed before damage is done, if return value is true further processing is canceled + * and the entity is not attacked. + * + * @param stack The Item being used + * @param player The player that is attacking + * @param entity The entity being attacked + * @return True to cancel the rest of the interaction. + */ + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) + { + return false; + } + + /** + * ItemStack sensitive version of getContainerItem. + * Returns a full ItemStack instance of the result. + * + * @param itemStack The current ItemStack + * @return The resulting ItemStack + */ + public ItemStack getContainerItem(ItemStack itemStack) + { + if (!hasContainerItem(itemStack)) + { + return ItemStack.EMPTY; + } + return new ItemStack(getContainerItem()); + } + + /** + * ItemStack sensitive version of hasContainerItem + * @param stack The current item stack + * @return True if this item has a 'container' + */ + public boolean hasContainerItem(ItemStack stack) + { + return hasContainerItem(); + } + + /** + * Retrieves the normal 'lifespan' of this item when it is dropped on the ground as a EntityItem. + * This is in ticks, standard result is 6000, or 5 mins. + * + * @param itemStack The current ItemStack + * @param world The world the entity is in + * @return The normal lifespan in ticks. + */ + public int getEntityLifespan(ItemStack itemStack, World world) + { + return 6000; + } + + /** + * Determines if this Item has a special entity for when they are in the world. + * Is called when a EntityItem is spawned in the world, if true and Item#createCustomEntity + * returns non null, the EntityItem will be destroyed and the new Entity will be added to the world. + * + * @param stack The current item stack + * @return True of the item has a custom entity, If true, Item#createCustomEntity will be called + */ + public boolean hasCustomEntity(ItemStack stack) + { + return false; + } + + /** + * This function should return a new entity to replace the dropped item. + * Returning null here will not kill the EntityItem and will leave it to function normally. + * Called when the item it placed in a world. + * + * @param world The world object + * @param location The EntityItem object, useful for getting the position of the entity + * @param itemstack The current item stack + * @return A new Entity object to spawn or null + */ + @Nullable + public Entity createEntity(World world, Entity location, ItemStack itemstack) + { + return null; + } + + /** + * Called by the default implemetation of EntityItem's onUpdate method, allowing for cleaner + * control over the update of the item without having to write a subclass. + * + * @param entityItem The entity Item + * @return Return true to skip any further update code. + */ + public boolean onEntityItemUpdate(net.minecraft.entity.item.EntityItem entityItem) + { + return false; + } + + /** + * Gets a list of tabs that items belonging to this class can display on, + * combined properly with getSubItems allows for a single item to span + * many sub-items across many tabs. + * + * @return A list of all tabs that this item could possibly be one. + */ + public CreativeTabs[] getCreativeTabs() + { + return new CreativeTabs[]{ getCreativeTab() }; + } + + /** + * Determines the base experience for a player when they remove this item from a furnace slot. + * This number must be between 0 and 1 for it to be valid. + * This number will be multiplied by the stack size to get the total experience. + * + * @param item The item stack the player is picking up. + * @return The amount to award for each item. + */ + public float getSmeltingExperience(ItemStack item) + { + return -1; //-1 will default to the old lookups. + } + + /** + * + * Should this item, when held, allow sneak-clicks to pass through to the underlying block? + * + * @param world The world + * @param pos Block position in world + * @param player The Player that is wielding the item + * @return + */ + public boolean doesSneakBypassUse(ItemStack stack, net.minecraft.world.IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return false; + } + + /** + * Called to tick armor in the armor slot. Override to do something + */ + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){} + + /** + * Determines if the specific ItemStack can be placed in the specified armor slot, for the entity. + * + * TODO: Change name to canEquip in 1.13? + * + * @param stack The ItemStack + * @param armorType Armor slot to be verified. + * @param entity The entity trying to equip the armor + * @return True if the given ItemStack can be inserted in the slot + */ + public boolean isValidArmor(ItemStack stack, EntityEquipmentSlot armorType, Entity entity) + { + return net.minecraft.entity.EntityLiving.getSlotForItemStack(stack) == armorType; + } + + /** + * Override this to set a non-default armor slot for an ItemStack, but + * do not use this to get the armor slot of said stack; for that, use + * {@link net.minecraft.entity.EntityLiving#getSlotForItemStack(ItemStack)}. + * + * @param stack the ItemStack + * @return the armor slot of the ItemStack, or {@code null} to let the default + * vanilla logic as per {@code EntityLiving.getSlotForItemStack(stack)} decide + */ + @Nullable + public EntityEquipmentSlot getEquipmentSlot(ItemStack stack) + { + return null; + } + + /** + * Allow or forbid the specific book/item combination as an anvil enchant + * + * @param stack The item + * @param book The book + * @return if the enchantment is allowed + */ + public boolean isBookEnchantable(ItemStack stack, ItemStack book) + { + return true; + } + + /** + * Called by RenderBiped and RenderPlayer to determine the armor texture that + * should be use for the currently equipped item. + * This will only be called on instances of ItemArmor. + * + * Returning null from this function will use the default value. + * + * @param stack ItemStack for the equipped armor + * @param entity The entity wearing the armor + * @param slot The slot the armor is in + * @param type The subtype, can be null or "overlay" + * @return Path of texture to bind, or null to use default + */ + @Nullable + public String getArmorTexture(ItemStack stack, Entity entity, EntityEquipmentSlot slot, String type) + { + return null; + } + + /** + * Returns the font renderer used to render tooltips and overlays for this item. + * Returning null will use the standard font renderer. + * + * @param stack The current item stack + * @return A instance of FontRenderer or null to use default + */ + @SideOnly(Side.CLIENT) + @Nullable + public net.minecraft.client.gui.FontRenderer getFontRenderer(ItemStack stack) + { + return null; + } + + /** + * Override this method to have an item handle its own armor rendering. + * + * @param entityLiving The entity wearing the armor + * @param itemStack The itemStack to render the model of + * @param armorSlot The slot the armor is in + * @param _default Original armor model. Will have attributes set. + * @return A ModelBiped to render instead of the default + */ + @SideOnly(Side.CLIENT) + @Nullable + public net.minecraft.client.model.ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, EntityEquipmentSlot armorSlot, net.minecraft.client.model.ModelBiped _default) + { + return null; + } + + /** + * Called when a entity tries to play the 'swing' animation. + * + * @param entityLiving The entity swinging the item. + * @param stack The Item stack + * @return True to cancel any further processing by EntityLiving + */ + public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack) + { + return false; + } + + /** + * Called when the client starts rendering the HUD, for whatever item the player currently has as a helmet. + * This is where pumpkins would render there overlay. + * + * @param stack The ItemStack that is equipped + * @param player Reference to the current client entity + * @param resolution Resolution information about the current viewport and configured GUI Scale + * @param partialTicks Partial ticks for the renderer, useful for interpolation + */ + @SideOnly(Side.CLIENT) + public void renderHelmetOverlay(ItemStack stack, EntityPlayer player, net.minecraft.client.gui.ScaledResolution resolution, float partialTicks){} + + /** + * Return the itemDamage represented by this ItemStack. Defaults to the itemDamage field on ItemStack, but can be overridden here for other sources such as NBT. + * + * @param stack The itemstack that is damaged + * @return the damage value + */ + public int getDamage(ItemStack stack) + { + return stack.itemDamage; + } + + /** + * This used to be 'display damage' but its really just 'aux' data in the ItemStack, usually shares the same variable as damage. + * @param stack + * @return + */ + public int getMetadata(ItemStack stack) + { + return stack.itemDamage; + } + + /** + * Determines if the durability bar should be rendered for this item. + * Defaults to vanilla stack.isDamaged behavior. + * But modders can use this for any data they wish. + * + * @param stack The current Item Stack + * @return True if it should render the 'durability' bar. + */ + public boolean showDurabilityBar(ItemStack stack) + { + return stack.isItemDamaged(); + } + + /** + * Queries the percentage of the 'Durability' bar that should be drawn. + * + * @param stack The current ItemStack + * @return 0.0 for 100% (no damage / full bar), 1.0 for 0% (fully damaged / empty bar) + */ + public double getDurabilityForDisplay(ItemStack stack) + { + return (double)stack.getItemDamage() / (double)stack.getMaxDamage(); + } + + /** + * Returns the packed int RGB value used to render the durability bar in the GUI. + * Defaults to a value based on the hue scaled based on {@link #getDurabilityForDisplay}, but can be overriden. + * + * @param stack Stack to get durability from + * @return A packed RGB value for the durability colour (0x00RRGGBB) + */ + public int getRGBDurabilityForDisplay(ItemStack stack) + { + return MathHelper.hsvToRGB(Math.max(0.0F, (float) (1.0F - getDurabilityForDisplay(stack))) / 3.0F, 1.0F, 1.0F); + } + /** + * Return the maxDamage for this ItemStack. Defaults to the maxDamage field in this item, + * but can be overridden here for other sources such as NBT. + * + * @param stack The itemstack that is damaged + * @return the damage value + */ + public int getMaxDamage(ItemStack stack) + { + return getMaxDamage(); + } + + /** + * Return if this itemstack is damaged. Note only called if {@link #isDamageable()} is true. + * @param stack the stack + * @return if the stack is damaged + */ + public boolean isDamaged(ItemStack stack) + { + return stack.itemDamage > 0; + } + + /** + * Set the damage for this itemstack. Note, this method is responsible for zero checking. + * @param stack the stack + * @param damage the new damage value + */ + public void setDamage(ItemStack stack, int damage) + { + stack.itemDamage = damage; + + if (stack.itemDamage < 0) + { + stack.itemDamage = 0; + } + } + + /** + * Checked from {@link net.minecraft.client.multiplayer.PlayerControllerMP#onPlayerDestroyBlock(BlockPos pos) PlayerControllerMP.onPlayerDestroyBlock()} + * when a creative player left-clicks a block with this item. + * Also checked from {@link net.minecraftforge.common.ForgeHooks#onBlockBreakEvent(World, GameType, EntityPlayerMP, BlockPos) ForgeHooks.onBlockBreakEvent()} + * to prevent sending an event. + * @return true if the given player can destroy specified block in creative mode with this item + */ + public boolean canDestroyBlockInCreative(World world, BlockPos pos, ItemStack stack, EntityPlayer player) + { + return !(this instanceof ItemSword); + } + + /** + * ItemStack sensitive version of {@link #canHarvestBlock(IBlockState)} + * @param state The block trying to harvest + * @param stack The itemstack used to harvest the block + * @return true if can harvest the block + */ + public boolean canHarvestBlock(IBlockState state, ItemStack stack) + { + return canHarvestBlock(state); + } + + /** + * Gets the maximum number of items that this stack should be able to hold. + * This is a ItemStack (and thus NBT) sensitive version of Item.getItemStackLimit() + * + * @param stack The ItemStack + * @return The maximum number this item can be stacked to + */ + public int getItemStackLimit(ItemStack stack) + { + return this.getItemStackLimit(); + } + + private java.util.Map toolClasses = new java.util.HashMap(); + /** + * Sets or removes the harvest level for the specified tool class. + * + * @param toolClass Class + * @param level Harvest level: + * Wood: 0 + * Stone: 1 + * Iron: 2 + * Diamond: 3 + * Gold: 0 + */ + public void setHarvestLevel(String toolClass, int level) + { + if (level < 0) + toolClasses.remove(toolClass); + else + toolClasses.put(toolClass, level); + } + + public java.util.Set getToolClasses(ItemStack stack) + { + return toolClasses.keySet(); + } + + /** + * Queries the harvest level of this item stack for the specified tool class, + * Returns -1 if this tool is not of the specified type + * + * @param stack This item stack instance + * @param toolClass Tool Class + * @param player The player trying to harvest the given blockstate + * @param blockState The block to harvest + * @return Harvest level, or -1 if not the specified tool type. + */ + public int getHarvestLevel(ItemStack stack, String toolClass, @Nullable EntityPlayer player, @Nullable IBlockState blockState) + { + Integer ret = toolClasses.get(toolClass); + return ret == null ? -1 : ret; + } + + /** + * ItemStack sensitive version of getItemEnchantability + * + * @param stack The ItemStack + * @return the item echantability value + */ + public int getItemEnchantability(ItemStack stack) + { + return getItemEnchantability(); + } + + /** + * Checks whether an item can be enchanted with a certain enchantment. This applies specifically to enchanting an item in the enchanting table and is called when retrieving the list of possible enchantments for an item. + * Enchantments may additionally (or exclusively) be doing their own checks in {@link net.minecraft.enchantment.Enchantment#canApplyAtEnchantingTable(ItemStack)}; check the individual implementation for reference. + * By default this will check if the enchantment type is valid for this item type. + * @param stack the item stack to be enchanted + * @param enchantment the enchantment to be applied + * @return true if the enchantment can be applied to this item + */ + public boolean canApplyAtEnchantingTable(ItemStack stack, net.minecraft.enchantment.Enchantment enchantment) + { + return enchantment.type.canEnchantItem(stack.getItem()); + } + + /** + * Whether this Item can be used as a payment to activate the vanilla beacon. + * @param stack the ItemStack + * @return true if this Item can be used + */ + public boolean isBeaconPayment(ItemStack stack) + { + return this == Items.EMERALD || this == Items.DIAMOND || this == Items.GOLD_INGOT || this == Items.IRON_INGOT; + } + + /** + * Determine if the player switching between these two item stacks + * @param oldStack The old stack that was equipped + * @param newStack The new stack + * @param slotChanged If the current equipped slot was changed, + * Vanilla does not play the animation if you switch between two + * slots that hold the exact same item. + * @return True to play the item change animation + */ + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) + { + return !oldStack.equals(newStack); //!ItemStack.areItemStacksEqual(oldStack, newStack); + } + + /** + * Called when the player is mining a block and the item in his hand changes. + * Allows to not reset blockbreaking if only NBT or similar changes. + * @param oldStack The old stack that was used for mining. Item in players main hand + * @param newStack The new stack + * @return True to reset block break progress + */ + public boolean shouldCauseBlockBreakReset(ItemStack oldStack, ItemStack newStack) + { + return !(newStack.getItem() == oldStack.getItem() && ItemStack.areItemStackTagsEqual(newStack, oldStack) && (newStack.isItemStackDamageable() || newStack.getMetadata() == oldStack.getMetadata())); + } + + /** + * Called to get the Mod ID of the mod that *created* the ItemStack, + * instead of the real Mod ID that *registered* it. + * + * For example the Forge Universal Bucket creates a subitem for each modded fluid, + * and it returns the modded fluid's Mod ID here. + * + * Mods that register subitems for other mods can override this. + * Informational mods can call it to show the mod that created the item. + * + * @param itemStack the ItemStack to check + * @return the Mod ID for the ItemStack, or + * null when there is no specially associated mod and {@link #getRegistryName()} would return null. + */ + @Nullable + public String getCreatorModId(ItemStack itemStack) + { + return net.minecraftforge.common.ForgeHooks.getDefaultCreatorModId(itemStack); + } + + /** + * Called from ItemStack.setItem, will hold extra data for the life of this ItemStack. + * Can be retrieved from stack.getCapabilities() + * The NBT can be null if this is not called from readNBT or if the item the stack is + * changing FROM is different then this item, or the previous item had no capabilities. + * + * This is called BEFORE the stacks item is set so you can use stack.getItem() to see the OLD item. + * Remember that getItem CAN return null. + * + * @param stack The ItemStack + * @param nbt NBT of this item serialized, or null. + * @return A holder instance associated with this ItemStack where you can hold capabilities for the life of this item. + */ + @Nullable + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) + { + return null; + } + + public com.google.common.collect.ImmutableMap getAnimationParameters(final ItemStack stack, final World world, final EntityLivingBase entity) + { + com.google.common.collect.ImmutableMap.Builder builder = com.google.common.collect.ImmutableMap.builder(); + for(ResourceLocation location : properties.getKeys()) + { + final IItemPropertyGetter parameter = properties.getObject(location); + builder.put(location.toString(), new net.minecraftforge.common.animation.ITimeValue() + { + public float apply(float input) + { + return parameter.apply(stack, world, entity); + } + }); + } + return builder.build(); + } + + /** + * Can this Item disable a shield + * @param stack The ItemStack + * @param shield The shield in question + * @param entity The EntityLivingBase holding the shield + * @param attacker The EntityLivingBase holding the ItemStack + * @retrun True if this ItemStack can disable the shield in question. + */ + public boolean canDisableShield(ItemStack stack, ItemStack shield, EntityLivingBase entity, EntityLivingBase attacker) + { + return this instanceof ItemAxe; + } + + /** + * Is this Item a shield + * @param stack The ItemStack + * @param entity The Entity holding the ItemStack + * @return True if the ItemStack is considered a shield + */ + public boolean isShield(ItemStack stack, @Nullable EntityLivingBase entity) + { + return stack.getItem() == Items.SHIELD; + } + + /** + * @return the fuel burn time for this itemStack in a furnace. + * Return 0 to make it not act as a fuel. + * Return -1 to let the default vanilla logic decide. + */ + public int getItemBurnTime(ItemStack itemStack) + { + return -1; + } + + /** + * Returns an enum constant of type {@code HorseArmorType}. + * The returned enum constant will be used to determine the armor value and texture of this item when equipped. + * @param stack the armor stack + * @return an enum constant of type {@code HorseArmorType}. Return HorseArmorType.NONE if this is not horse armor + */ + public net.minecraft.entity.passive.HorseArmorType getHorseArmorType(ItemStack stack) + { + return net.minecraft.entity.passive.HorseArmorType.getByItem(stack.getItem()); + } + + public String getHorseArmorTexture(net.minecraft.entity.EntityLiving wearer, ItemStack stack) + { + return getHorseArmorType(stack).getTextureName(); + } + + /** + * Called every tick from {@link EntityHorse#onUpdate()} on the item in the armor slot. + * @param world the world the horse is in + * @param horse the horse wearing this armor + * @param armor the armor itemstack + */ + public void onHorseArmorTick(World world, net.minecraft.entity.EntityLiving horse, ItemStack armor) {} + + @SideOnly(Side.CLIENT) + @Nullable + private net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer teisr; + + /** + * @return This Item's renderer, or the default instance if it does not have one. + */ + @SideOnly(Side.CLIENT) + public final net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer getTileEntityItemStackRenderer() + { + return teisr != null ? teisr : net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer.instance; + } + + @SideOnly(Side.CLIENT) + public void setTileEntityItemStackRenderer(@Nullable net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer teisr) + { + this.teisr = teisr; + } + + /* ======================================== FORGE END =====================================*/ + + public static void registerItems() + { + registerItemBlock(Blocks.AIR, new ItemAir(Blocks.AIR)); + registerItemBlock(Blocks.STONE, (new ItemMultiTexture(Blocks.STONE, Blocks.STONE, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockStone.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("stone")); + registerItemBlock(Blocks.GRASS, new ItemColored(Blocks.GRASS, false)); + registerItemBlock(Blocks.DIRT, (new ItemMultiTexture(Blocks.DIRT, Blocks.DIRT, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockDirt.DirtType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("dirt")); + registerItemBlock(Blocks.COBBLESTONE); + registerItemBlock(Blocks.PLANKS, (new ItemMultiTexture(Blocks.PLANKS, Blocks.PLANKS, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockPlanks.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("wood")); + registerItemBlock(Blocks.SAPLING, (new ItemMultiTexture(Blocks.SAPLING, Blocks.SAPLING, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockPlanks.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("sapling")); + registerItemBlock(Blocks.BEDROCK); + registerItemBlock(Blocks.SAND, (new ItemMultiTexture(Blocks.SAND, Blocks.SAND, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockSand.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("sand")); + registerItemBlock(Blocks.GRAVEL); + registerItemBlock(Blocks.GOLD_ORE); + registerItemBlock(Blocks.IRON_ORE); + registerItemBlock(Blocks.COAL_ORE); + registerItemBlock(Blocks.LOG, (new ItemMultiTexture(Blocks.LOG, Blocks.LOG, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockPlanks.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("log")); + registerItemBlock(Blocks.LOG2, (new ItemMultiTexture(Blocks.LOG2, Blocks.LOG2, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockPlanks.EnumType.byMetadata(p_apply_1_.getMetadata() + 4).getUnlocalizedName(); + } + })).setUnlocalizedName("log")); + registerItemBlock(Blocks.LEAVES, (new ItemLeaves(Blocks.LEAVES)).setUnlocalizedName("leaves")); + registerItemBlock(Blocks.LEAVES2, (new ItemLeaves(Blocks.LEAVES2)).setUnlocalizedName("leaves")); + registerItemBlock(Blocks.SPONGE, (new ItemMultiTexture(Blocks.SPONGE, Blocks.SPONGE, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return (p_apply_1_.getMetadata() & 1) == 1 ? "wet" : "dry"; + } + })).setUnlocalizedName("sponge")); + registerItemBlock(Blocks.GLASS); + registerItemBlock(Blocks.LAPIS_ORE); + registerItemBlock(Blocks.LAPIS_BLOCK); + registerItemBlock(Blocks.DISPENSER); + registerItemBlock(Blocks.SANDSTONE, (new ItemMultiTexture(Blocks.SANDSTONE, Blocks.SANDSTONE, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockSandStone.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("sandStone")); + registerItemBlock(Blocks.NOTEBLOCK); + registerItemBlock(Blocks.GOLDEN_RAIL); + registerItemBlock(Blocks.DETECTOR_RAIL); + registerItemBlock(Blocks.STICKY_PISTON, new ItemPiston(Blocks.STICKY_PISTON)); + registerItemBlock(Blocks.WEB); + registerItemBlock(Blocks.TALLGRASS, (new ItemColored(Blocks.TALLGRASS, true)).setSubtypeNames(new String[] {"shrub", "grass", "fern"})); + registerItemBlock(Blocks.DEADBUSH); + registerItemBlock(Blocks.PISTON, new ItemPiston(Blocks.PISTON)); + registerItemBlock(Blocks.WOOL, (new ItemCloth(Blocks.WOOL)).setUnlocalizedName("cloth")); + registerItemBlock(Blocks.YELLOW_FLOWER, (new ItemMultiTexture(Blocks.YELLOW_FLOWER, Blocks.YELLOW_FLOWER, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockFlower.EnumFlowerType.getType(BlockFlower.EnumFlowerColor.YELLOW, p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("flower")); + registerItemBlock(Blocks.RED_FLOWER, (new ItemMultiTexture(Blocks.RED_FLOWER, Blocks.RED_FLOWER, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockFlower.EnumFlowerType.getType(BlockFlower.EnumFlowerColor.RED, p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("rose")); + registerItemBlock(Blocks.BROWN_MUSHROOM); + registerItemBlock(Blocks.RED_MUSHROOM); + registerItemBlock(Blocks.GOLD_BLOCK); + registerItemBlock(Blocks.IRON_BLOCK); + registerItemBlock(Blocks.STONE_SLAB, (new ItemSlab(Blocks.STONE_SLAB, Blocks.STONE_SLAB, Blocks.DOUBLE_STONE_SLAB)).setUnlocalizedName("stoneSlab")); + registerItemBlock(Blocks.BRICK_BLOCK); + registerItemBlock(Blocks.TNT); + registerItemBlock(Blocks.BOOKSHELF); + registerItemBlock(Blocks.MOSSY_COBBLESTONE); + registerItemBlock(Blocks.OBSIDIAN); + registerItemBlock(Blocks.TORCH); + registerItemBlock(Blocks.END_ROD); + registerItemBlock(Blocks.CHORUS_PLANT); + registerItemBlock(Blocks.CHORUS_FLOWER); + registerItemBlock(Blocks.PURPUR_BLOCK); + registerItemBlock(Blocks.PURPUR_PILLAR); + registerItemBlock(Blocks.PURPUR_STAIRS); + registerItemBlock(Blocks.PURPUR_SLAB, (new ItemSlab(Blocks.PURPUR_SLAB, Blocks.PURPUR_SLAB, Blocks.PURPUR_DOUBLE_SLAB)).setUnlocalizedName("purpurSlab")); + registerItemBlock(Blocks.MOB_SPAWNER); + registerItemBlock(Blocks.OAK_STAIRS); + registerItemBlock(Blocks.CHEST); + registerItemBlock(Blocks.DIAMOND_ORE); + registerItemBlock(Blocks.DIAMOND_BLOCK); + registerItemBlock(Blocks.CRAFTING_TABLE); + registerItemBlock(Blocks.FARMLAND); + registerItemBlock(Blocks.FURNACE); + registerItemBlock(Blocks.LADDER); + registerItemBlock(Blocks.RAIL); + registerItemBlock(Blocks.STONE_STAIRS); + registerItemBlock(Blocks.LEVER); + registerItemBlock(Blocks.STONE_PRESSURE_PLATE); + registerItemBlock(Blocks.WOODEN_PRESSURE_PLATE); + registerItemBlock(Blocks.REDSTONE_ORE); + registerItemBlock(Blocks.REDSTONE_TORCH); + registerItemBlock(Blocks.STONE_BUTTON); + registerItemBlock(Blocks.SNOW_LAYER, new ItemSnow(Blocks.SNOW_LAYER)); + registerItemBlock(Blocks.ICE); + registerItemBlock(Blocks.SNOW); + registerItemBlock(Blocks.CACTUS); + registerItemBlock(Blocks.CLAY); + registerItemBlock(Blocks.JUKEBOX); + registerItemBlock(Blocks.OAK_FENCE); + registerItemBlock(Blocks.SPRUCE_FENCE); + registerItemBlock(Blocks.BIRCH_FENCE); + registerItemBlock(Blocks.JUNGLE_FENCE); + registerItemBlock(Blocks.DARK_OAK_FENCE); + registerItemBlock(Blocks.ACACIA_FENCE); + registerItemBlock(Blocks.PUMPKIN); + registerItemBlock(Blocks.NETHERRACK); + registerItemBlock(Blocks.SOUL_SAND); + registerItemBlock(Blocks.GLOWSTONE); + registerItemBlock(Blocks.LIT_PUMPKIN); + registerItemBlock(Blocks.TRAPDOOR); + registerItemBlock(Blocks.MONSTER_EGG, (new ItemMultiTexture(Blocks.MONSTER_EGG, Blocks.MONSTER_EGG, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockSilverfish.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("monsterStoneEgg")); + registerItemBlock(Blocks.STONEBRICK, (new ItemMultiTexture(Blocks.STONEBRICK, Blocks.STONEBRICK, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockStoneBrick.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("stonebricksmooth")); + registerItemBlock(Blocks.BROWN_MUSHROOM_BLOCK); + registerItemBlock(Blocks.RED_MUSHROOM_BLOCK); + registerItemBlock(Blocks.IRON_BARS); + registerItemBlock(Blocks.GLASS_PANE); + registerItemBlock(Blocks.MELON_BLOCK); + registerItemBlock(Blocks.VINE, new ItemColored(Blocks.VINE, false)); + registerItemBlock(Blocks.OAK_FENCE_GATE); + registerItemBlock(Blocks.SPRUCE_FENCE_GATE); + registerItemBlock(Blocks.BIRCH_FENCE_GATE); + registerItemBlock(Blocks.JUNGLE_FENCE_GATE); + registerItemBlock(Blocks.DARK_OAK_FENCE_GATE); + registerItemBlock(Blocks.ACACIA_FENCE_GATE); + registerItemBlock(Blocks.BRICK_STAIRS); + registerItemBlock(Blocks.STONE_BRICK_STAIRS); + registerItemBlock(Blocks.MYCELIUM); + registerItemBlock(Blocks.WATERLILY, new ItemLilyPad(Blocks.WATERLILY)); + registerItemBlock(Blocks.NETHER_BRICK); + registerItemBlock(Blocks.NETHER_BRICK_FENCE); + registerItemBlock(Blocks.NETHER_BRICK_STAIRS); + registerItemBlock(Blocks.ENCHANTING_TABLE); + registerItemBlock(Blocks.END_PORTAL_FRAME); + registerItemBlock(Blocks.END_STONE); + registerItemBlock(Blocks.END_BRICKS); + registerItemBlock(Blocks.DRAGON_EGG); + registerItemBlock(Blocks.REDSTONE_LAMP); + registerItemBlock(Blocks.WOODEN_SLAB, (new ItemSlab(Blocks.WOODEN_SLAB, Blocks.WOODEN_SLAB, Blocks.DOUBLE_WOODEN_SLAB)).setUnlocalizedName("woodSlab")); + registerItemBlock(Blocks.SANDSTONE_STAIRS); + registerItemBlock(Blocks.EMERALD_ORE); + registerItemBlock(Blocks.ENDER_CHEST); + registerItemBlock(Blocks.TRIPWIRE_HOOK); + registerItemBlock(Blocks.EMERALD_BLOCK); + registerItemBlock(Blocks.SPRUCE_STAIRS); + registerItemBlock(Blocks.BIRCH_STAIRS); + registerItemBlock(Blocks.JUNGLE_STAIRS); + registerItemBlock(Blocks.COMMAND_BLOCK); + registerItemBlock(Blocks.BEACON); + registerItemBlock(Blocks.COBBLESTONE_WALL, (new ItemMultiTexture(Blocks.COBBLESTONE_WALL, Blocks.COBBLESTONE_WALL, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockWall.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("cobbleWall")); + registerItemBlock(Blocks.WOODEN_BUTTON); + registerItemBlock(Blocks.ANVIL, (new ItemAnvilBlock(Blocks.ANVIL)).setUnlocalizedName("anvil")); + registerItemBlock(Blocks.TRAPPED_CHEST); + registerItemBlock(Blocks.LIGHT_WEIGHTED_PRESSURE_PLATE); + registerItemBlock(Blocks.HEAVY_WEIGHTED_PRESSURE_PLATE); + registerItemBlock(Blocks.DAYLIGHT_DETECTOR); + registerItemBlock(Blocks.REDSTONE_BLOCK); + registerItemBlock(Blocks.QUARTZ_ORE); + registerItemBlock(Blocks.HOPPER); + registerItemBlock(Blocks.QUARTZ_BLOCK, (new ItemMultiTexture(Blocks.QUARTZ_BLOCK, Blocks.QUARTZ_BLOCK, new String[] {"default", "chiseled", "lines"})).setUnlocalizedName("quartzBlock")); + registerItemBlock(Blocks.QUARTZ_STAIRS); + registerItemBlock(Blocks.ACTIVATOR_RAIL); + registerItemBlock(Blocks.DROPPER); + registerItemBlock(Blocks.STAINED_HARDENED_CLAY, (new ItemCloth(Blocks.STAINED_HARDENED_CLAY)).setUnlocalizedName("clayHardenedStained")); + registerItemBlock(Blocks.BARRIER); + registerItemBlock(Blocks.IRON_TRAPDOOR); + registerItemBlock(Blocks.HAY_BLOCK); + registerItemBlock(Blocks.CARPET, (new ItemCloth(Blocks.CARPET)).setUnlocalizedName("woolCarpet")); + registerItemBlock(Blocks.HARDENED_CLAY); + registerItemBlock(Blocks.COAL_BLOCK); + registerItemBlock(Blocks.PACKED_ICE); + registerItemBlock(Blocks.ACACIA_STAIRS); + registerItemBlock(Blocks.DARK_OAK_STAIRS); + registerItemBlock(Blocks.SLIME_BLOCK); + registerItemBlock(Blocks.GRASS_PATH); + registerItemBlock(Blocks.DOUBLE_PLANT, (new ItemMultiTexture(Blocks.DOUBLE_PLANT, Blocks.DOUBLE_PLANT, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockDoublePlant.EnumPlantType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("doublePlant")); + registerItemBlock(Blocks.STAINED_GLASS, (new ItemCloth(Blocks.STAINED_GLASS)).setUnlocalizedName("stainedGlass")); + registerItemBlock(Blocks.STAINED_GLASS_PANE, (new ItemCloth(Blocks.STAINED_GLASS_PANE)).setUnlocalizedName("stainedGlassPane")); + registerItemBlock(Blocks.PRISMARINE, (new ItemMultiTexture(Blocks.PRISMARINE, Blocks.PRISMARINE, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockPrismarine.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("prismarine")); + registerItemBlock(Blocks.SEA_LANTERN); + registerItemBlock(Blocks.RED_SANDSTONE, (new ItemMultiTexture(Blocks.RED_SANDSTONE, Blocks.RED_SANDSTONE, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + return BlockRedSandstone.EnumType.byMetadata(p_apply_1_.getMetadata()).getUnlocalizedName(); + } + })).setUnlocalizedName("redSandStone")); + registerItemBlock(Blocks.RED_SANDSTONE_STAIRS); + registerItemBlock(Blocks.STONE_SLAB2, (new ItemSlab(Blocks.STONE_SLAB2, Blocks.STONE_SLAB2, Blocks.DOUBLE_STONE_SLAB2)).setUnlocalizedName("stoneSlab2")); + registerItemBlock(Blocks.REPEATING_COMMAND_BLOCK); + registerItemBlock(Blocks.CHAIN_COMMAND_BLOCK); + registerItemBlock(Blocks.MAGMA); + registerItemBlock(Blocks.NETHER_WART_BLOCK); + registerItemBlock(Blocks.RED_NETHER_BRICK); + registerItemBlock(Blocks.BONE_BLOCK); + registerItemBlock(Blocks.STRUCTURE_VOID); + registerItemBlock(Blocks.OBSERVER); + registerItemBlock(Blocks.WHITE_SHULKER_BOX, new ItemShulkerBox(Blocks.WHITE_SHULKER_BOX)); + registerItemBlock(Blocks.ORANGE_SHULKER_BOX, new ItemShulkerBox(Blocks.ORANGE_SHULKER_BOX)); + registerItemBlock(Blocks.MAGENTA_SHULKER_BOX, new ItemShulkerBox(Blocks.MAGENTA_SHULKER_BOX)); + registerItemBlock(Blocks.LIGHT_BLUE_SHULKER_BOX, new ItemShulkerBox(Blocks.LIGHT_BLUE_SHULKER_BOX)); + registerItemBlock(Blocks.YELLOW_SHULKER_BOX, new ItemShulkerBox(Blocks.YELLOW_SHULKER_BOX)); + registerItemBlock(Blocks.LIME_SHULKER_BOX, new ItemShulkerBox(Blocks.LIME_SHULKER_BOX)); + registerItemBlock(Blocks.PINK_SHULKER_BOX, new ItemShulkerBox(Blocks.PINK_SHULKER_BOX)); + registerItemBlock(Blocks.GRAY_SHULKER_BOX, new ItemShulkerBox(Blocks.GRAY_SHULKER_BOX)); + registerItemBlock(Blocks.SILVER_SHULKER_BOX, new ItemShulkerBox(Blocks.SILVER_SHULKER_BOX)); + registerItemBlock(Blocks.CYAN_SHULKER_BOX, new ItemShulkerBox(Blocks.CYAN_SHULKER_BOX)); + registerItemBlock(Blocks.PURPLE_SHULKER_BOX, new ItemShulkerBox(Blocks.PURPLE_SHULKER_BOX)); + registerItemBlock(Blocks.BLUE_SHULKER_BOX, new ItemShulkerBox(Blocks.BLUE_SHULKER_BOX)); + registerItemBlock(Blocks.BROWN_SHULKER_BOX, new ItemShulkerBox(Blocks.BROWN_SHULKER_BOX)); + registerItemBlock(Blocks.GREEN_SHULKER_BOX, new ItemShulkerBox(Blocks.GREEN_SHULKER_BOX)); + registerItemBlock(Blocks.RED_SHULKER_BOX, new ItemShulkerBox(Blocks.RED_SHULKER_BOX)); + registerItemBlock(Blocks.BLACK_SHULKER_BOX, new ItemShulkerBox(Blocks.BLACK_SHULKER_BOX)); + registerItemBlock(Blocks.WHITE_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.ORANGE_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.MAGENTA_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.LIGHT_BLUE_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.YELLOW_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.LIME_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.PINK_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.GRAY_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.SILVER_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.CYAN_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.PURPLE_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.BLUE_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.BROWN_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.GREEN_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.RED_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.BLACK_GLAZED_TERRACOTTA); + registerItemBlock(Blocks.CONCRETE, (new ItemCloth(Blocks.CONCRETE)).setUnlocalizedName("concrete")); + registerItemBlock(Blocks.CONCRETE_POWDER, (new ItemCloth(Blocks.CONCRETE_POWDER)).setUnlocalizedName("concrete_powder")); + registerItemBlock(Blocks.STRUCTURE_BLOCK); + registerItem(256, "iron_shovel", (new ItemSpade(Item.ToolMaterial.IRON)).setUnlocalizedName("shovelIron")); + registerItem(257, "iron_pickaxe", (new ItemPickaxe(Item.ToolMaterial.IRON)).setUnlocalizedName("pickaxeIron")); + registerItem(258, "iron_axe", (new ItemAxe(Item.ToolMaterial.IRON)).setUnlocalizedName("hatchetIron")); + registerItem(259, "flint_and_steel", (new ItemFlintAndSteel()).setUnlocalizedName("flintAndSteel")); + registerItem(260, "apple", (new ItemFood(4, 0.3F, false)).setUnlocalizedName("apple")); + registerItem(261, "bow", (new ItemBow()).setUnlocalizedName("bow")); + registerItem(262, "arrow", (new ItemArrow()).setUnlocalizedName("arrow")); + registerItem(263, "coal", (new ItemCoal()).setUnlocalizedName("coal")); + registerItem(264, "diamond", (new Item()).setUnlocalizedName("diamond").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(265, "iron_ingot", (new Item()).setUnlocalizedName("ingotIron").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(266, "gold_ingot", (new Item()).setUnlocalizedName("ingotGold").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(267, "iron_sword", (new ItemSword(Item.ToolMaterial.IRON)).setUnlocalizedName("swordIron")); + registerItem(268, "wooden_sword", (new ItemSword(Item.ToolMaterial.WOOD)).setUnlocalizedName("swordWood")); + registerItem(269, "wooden_shovel", (new ItemSpade(Item.ToolMaterial.WOOD)).setUnlocalizedName("shovelWood")); + registerItem(270, "wooden_pickaxe", (new ItemPickaxe(Item.ToolMaterial.WOOD)).setUnlocalizedName("pickaxeWood")); + registerItem(271, "wooden_axe", (new ItemAxe(Item.ToolMaterial.WOOD)).setUnlocalizedName("hatchetWood")); + registerItem(272, "stone_sword", (new ItemSword(Item.ToolMaterial.STONE)).setUnlocalizedName("swordStone")); + registerItem(273, "stone_shovel", (new ItemSpade(Item.ToolMaterial.STONE)).setUnlocalizedName("shovelStone")); + registerItem(274, "stone_pickaxe", (new ItemPickaxe(Item.ToolMaterial.STONE)).setUnlocalizedName("pickaxeStone")); + registerItem(275, "stone_axe", (new ItemAxe(Item.ToolMaterial.STONE)).setUnlocalizedName("hatchetStone")); + registerItem(276, "diamond_sword", (new ItemSword(Item.ToolMaterial.DIAMOND)).setUnlocalizedName("swordDiamond")); + registerItem(277, "diamond_shovel", (new ItemSpade(Item.ToolMaterial.DIAMOND)).setUnlocalizedName("shovelDiamond")); + registerItem(278, "diamond_pickaxe", (new ItemPickaxe(Item.ToolMaterial.DIAMOND)).setUnlocalizedName("pickaxeDiamond")); + registerItem(279, "diamond_axe", (new ItemAxe(Item.ToolMaterial.DIAMOND)).setUnlocalizedName("hatchetDiamond")); + registerItem(280, "stick", (new Item()).setFull3D().setUnlocalizedName("stick").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(281, "bowl", (new Item()).setUnlocalizedName("bowl").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(282, "mushroom_stew", (new ItemSoup(6)).setUnlocalizedName("mushroomStew")); + registerItem(283, "golden_sword", (new ItemSword(Item.ToolMaterial.GOLD)).setUnlocalizedName("swordGold")); + registerItem(284, "golden_shovel", (new ItemSpade(Item.ToolMaterial.GOLD)).setUnlocalizedName("shovelGold")); + registerItem(285, "golden_pickaxe", (new ItemPickaxe(Item.ToolMaterial.GOLD)).setUnlocalizedName("pickaxeGold")); + registerItem(286, "golden_axe", (new ItemAxe(Item.ToolMaterial.GOLD)).setUnlocalizedName("hatchetGold")); + registerItem(287, "string", (new ItemBlockSpecial(Blocks.TRIPWIRE)).setUnlocalizedName("string").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(288, "feather", (new Item()).setUnlocalizedName("feather").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(289, "gunpowder", (new Item()).setUnlocalizedName("sulphur").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(290, "wooden_hoe", (new ItemHoe(Item.ToolMaterial.WOOD)).setUnlocalizedName("hoeWood")); + registerItem(291, "stone_hoe", (new ItemHoe(Item.ToolMaterial.STONE)).setUnlocalizedName("hoeStone")); + registerItem(292, "iron_hoe", (new ItemHoe(Item.ToolMaterial.IRON)).setUnlocalizedName("hoeIron")); + registerItem(293, "diamond_hoe", (new ItemHoe(Item.ToolMaterial.DIAMOND)).setUnlocalizedName("hoeDiamond")); + registerItem(294, "golden_hoe", (new ItemHoe(Item.ToolMaterial.GOLD)).setUnlocalizedName("hoeGold")); + registerItem(295, "wheat_seeds", (new ItemSeeds(Blocks.WHEAT, Blocks.FARMLAND)).setUnlocalizedName("seeds")); + registerItem(296, "wheat", (new Item()).setUnlocalizedName("wheat").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(297, "bread", (new ItemFood(5, 0.6F, false)).setUnlocalizedName("bread")); + registerItem(298, "leather_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.LEATHER, 0, EntityEquipmentSlot.HEAD)).setUnlocalizedName("helmetCloth")); + registerItem(299, "leather_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.LEATHER, 0, EntityEquipmentSlot.CHEST)).setUnlocalizedName("chestplateCloth")); + registerItem(300, "leather_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.LEATHER, 0, EntityEquipmentSlot.LEGS)).setUnlocalizedName("leggingsCloth")); + registerItem(301, "leather_boots", (new ItemArmor(ItemArmor.ArmorMaterial.LEATHER, 0, EntityEquipmentSlot.FEET)).setUnlocalizedName("bootsCloth")); + registerItem(302, "chainmail_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.CHAIN, 1, EntityEquipmentSlot.HEAD)).setUnlocalizedName("helmetChain")); + registerItem(303, "chainmail_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.CHAIN, 1, EntityEquipmentSlot.CHEST)).setUnlocalizedName("chestplateChain")); + registerItem(304, "chainmail_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.CHAIN, 1, EntityEquipmentSlot.LEGS)).setUnlocalizedName("leggingsChain")); + registerItem(305, "chainmail_boots", (new ItemArmor(ItemArmor.ArmorMaterial.CHAIN, 1, EntityEquipmentSlot.FEET)).setUnlocalizedName("bootsChain")); + registerItem(306, "iron_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.IRON, 2, EntityEquipmentSlot.HEAD)).setUnlocalizedName("helmetIron")); + registerItem(307, "iron_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.IRON, 2, EntityEquipmentSlot.CHEST)).setUnlocalizedName("chestplateIron")); + registerItem(308, "iron_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.IRON, 2, EntityEquipmentSlot.LEGS)).setUnlocalizedName("leggingsIron")); + registerItem(309, "iron_boots", (new ItemArmor(ItemArmor.ArmorMaterial.IRON, 2, EntityEquipmentSlot.FEET)).setUnlocalizedName("bootsIron")); + registerItem(310, "diamond_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.DIAMOND, 3, EntityEquipmentSlot.HEAD)).setUnlocalizedName("helmetDiamond")); + registerItem(311, "diamond_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.DIAMOND, 3, EntityEquipmentSlot.CHEST)).setUnlocalizedName("chestplateDiamond")); + registerItem(312, "diamond_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.DIAMOND, 3, EntityEquipmentSlot.LEGS)).setUnlocalizedName("leggingsDiamond")); + registerItem(313, "diamond_boots", (new ItemArmor(ItemArmor.ArmorMaterial.DIAMOND, 3, EntityEquipmentSlot.FEET)).setUnlocalizedName("bootsDiamond")); + registerItem(314, "golden_helmet", (new ItemArmor(ItemArmor.ArmorMaterial.GOLD, 4, EntityEquipmentSlot.HEAD)).setUnlocalizedName("helmetGold")); + registerItem(315, "golden_chestplate", (new ItemArmor(ItemArmor.ArmorMaterial.GOLD, 4, EntityEquipmentSlot.CHEST)).setUnlocalizedName("chestplateGold")); + registerItem(316, "golden_leggings", (new ItemArmor(ItemArmor.ArmorMaterial.GOLD, 4, EntityEquipmentSlot.LEGS)).setUnlocalizedName("leggingsGold")); + registerItem(317, "golden_boots", (new ItemArmor(ItemArmor.ArmorMaterial.GOLD, 4, EntityEquipmentSlot.FEET)).setUnlocalizedName("bootsGold")); + registerItem(318, "flint", (new Item()).setUnlocalizedName("flint").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(319, "porkchop", (new ItemFood(3, 0.3F, true)).setUnlocalizedName("porkchopRaw")); + registerItem(320, "cooked_porkchop", (new ItemFood(8, 0.8F, true)).setUnlocalizedName("porkchopCooked")); + registerItem(321, "painting", (new ItemHangingEntity(EntityPainting.class)).setUnlocalizedName("painting")); + registerItem(322, "golden_apple", (new ItemAppleGold(4, 1.2F, false)).setAlwaysEdible().setUnlocalizedName("appleGold")); + registerItem(323, "sign", (new ItemSign()).setUnlocalizedName("sign")); + registerItem(324, "wooden_door", (new ItemDoor(Blocks.OAK_DOOR)).setUnlocalizedName("doorOak")); + Item item = (new ItemBucket(Blocks.AIR)).setUnlocalizedName("bucket").setMaxStackSize(16); + registerItem(325, "bucket", item); + registerItem(326, "water_bucket", (new ItemBucket(Blocks.FLOWING_WATER)).setUnlocalizedName("bucketWater").setContainerItem(item)); + registerItem(327, "lava_bucket", (new ItemBucket(Blocks.FLOWING_LAVA)).setUnlocalizedName("bucketLava").setContainerItem(item)); + registerItem(328, "minecart", (new ItemMinecart(EntityMinecart.Type.RIDEABLE)).setUnlocalizedName("minecart")); + registerItem(329, "saddle", (new ItemSaddle()).setUnlocalizedName("saddle")); + registerItem(330, "iron_door", (new ItemDoor(Blocks.IRON_DOOR)).setUnlocalizedName("doorIron")); + registerItem(331, "redstone", (new ItemRedstone()).setUnlocalizedName("redstone")); + registerItem(332, "snowball", (new ItemSnowball()).setUnlocalizedName("snowball")); + registerItem(333, "boat", new ItemBoat(EntityBoat.Type.OAK)); + registerItem(334, "leather", (new Item()).setUnlocalizedName("leather").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(335, "milk_bucket", (new ItemBucketMilk()).setUnlocalizedName("milk").setContainerItem(item)); + registerItem(336, "brick", (new Item()).setUnlocalizedName("brick").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(337, "clay_ball", (new Item()).setUnlocalizedName("clay").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(338, "reeds", (new ItemBlockSpecial(Blocks.REEDS)).setUnlocalizedName("reeds").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(339, "paper", (new Item()).setUnlocalizedName("paper").setCreativeTab(CreativeTabs.MISC)); + registerItem(340, "book", (new ItemBook()).setUnlocalizedName("book").setCreativeTab(CreativeTabs.MISC)); + registerItem(341, "slime_ball", (new Item()).setUnlocalizedName("slimeball").setCreativeTab(CreativeTabs.MISC)); + registerItem(342, "chest_minecart", (new ItemMinecart(EntityMinecart.Type.CHEST)).setUnlocalizedName("minecartChest")); + registerItem(343, "furnace_minecart", (new ItemMinecart(EntityMinecart.Type.FURNACE)).setUnlocalizedName("minecartFurnace")); + registerItem(344, "egg", (new ItemEgg()).setUnlocalizedName("egg")); + registerItem(345, "compass", (new ItemCompass()).setUnlocalizedName("compass").setCreativeTab(CreativeTabs.TOOLS)); + registerItem(346, "fishing_rod", (new ItemFishingRod()).setUnlocalizedName("fishingRod")); + registerItem(347, "clock", (new ItemClock()).setUnlocalizedName("clock").setCreativeTab(CreativeTabs.TOOLS)); + registerItem(348, "glowstone_dust", (new Item()).setUnlocalizedName("yellowDust").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(349, "fish", (new ItemFishFood(false)).setUnlocalizedName("fish").setHasSubtypes(true)); + registerItem(350, "cooked_fish", (new ItemFishFood(true)).setUnlocalizedName("fish").setHasSubtypes(true)); + registerItem(351, "dye", (new ItemDye()).setUnlocalizedName("dyePowder")); + registerItem(352, "bone", (new Item()).setUnlocalizedName("bone").setFull3D().setCreativeTab(CreativeTabs.MISC)); + registerItem(353, "sugar", (new Item()).setUnlocalizedName("sugar").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(354, "cake", (new ItemBlockSpecial(Blocks.CAKE)).setMaxStackSize(1).setUnlocalizedName("cake").setCreativeTab(CreativeTabs.FOOD)); + registerItem(355, "bed", (new ItemBed()).setMaxStackSize(1).setUnlocalizedName("bed")); + registerItem(356, "repeater", (new ItemBlockSpecial(Blocks.UNPOWERED_REPEATER)).setUnlocalizedName("diode").setCreativeTab(CreativeTabs.REDSTONE)); + registerItem(357, "cookie", (new ItemFood(2, 0.1F, false)).setUnlocalizedName("cookie")); + registerItem(358, "filled_map", (new ItemMap()).setUnlocalizedName("map")); + registerItem(359, "shears", (new ItemShears()).setUnlocalizedName("shears")); + registerItem(360, "melon", (new ItemFood(2, 0.3F, false)).setUnlocalizedName("melon")); + registerItem(361, "pumpkin_seeds", (new ItemSeeds(Blocks.PUMPKIN_STEM, Blocks.FARMLAND)).setUnlocalizedName("seeds_pumpkin")); + registerItem(362, "melon_seeds", (new ItemSeeds(Blocks.MELON_STEM, Blocks.FARMLAND)).setUnlocalizedName("seeds_melon")); + registerItem(363, "beef", (new ItemFood(3, 0.3F, true)).setUnlocalizedName("beefRaw")); + registerItem(364, "cooked_beef", (new ItemFood(8, 0.8F, true)).setUnlocalizedName("beefCooked")); + registerItem(365, "chicken", (new ItemFood(2, 0.3F, true)).setPotionEffect(new PotionEffect(MobEffects.HUNGER, 600, 0), 0.3F).setUnlocalizedName("chickenRaw")); + registerItem(366, "cooked_chicken", (new ItemFood(6, 0.6F, true)).setUnlocalizedName("chickenCooked")); + registerItem(367, "rotten_flesh", (new ItemFood(4, 0.1F, true)).setPotionEffect(new PotionEffect(MobEffects.HUNGER, 600, 0), 0.8F).setUnlocalizedName("rottenFlesh")); + registerItem(368, "ender_pearl", (new ItemEnderPearl()).setUnlocalizedName("enderPearl")); + registerItem(369, "blaze_rod", (new Item()).setUnlocalizedName("blazeRod").setCreativeTab(CreativeTabs.MATERIALS).setFull3D()); + registerItem(370, "ghast_tear", (new Item()).setUnlocalizedName("ghastTear").setCreativeTab(CreativeTabs.BREWING)); + registerItem(371, "gold_nugget", (new Item()).setUnlocalizedName("goldNugget").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(372, "nether_wart", (new ItemSeeds(Blocks.NETHER_WART, Blocks.SOUL_SAND)).setUnlocalizedName("netherStalkSeeds")); + registerItem(373, "potion", (new ItemPotion()).setUnlocalizedName("potion")); + Item item1 = (new ItemGlassBottle()).setUnlocalizedName("glassBottle"); + registerItem(374, "glass_bottle", item1); + registerItem(375, "spider_eye", (new ItemFood(2, 0.8F, false)).setPotionEffect(new PotionEffect(MobEffects.POISON, 100, 0), 1.0F).setUnlocalizedName("spiderEye")); + registerItem(376, "fermented_spider_eye", (new Item()).setUnlocalizedName("fermentedSpiderEye").setCreativeTab(CreativeTabs.BREWING)); + registerItem(377, "blaze_powder", (new Item()).setUnlocalizedName("blazePowder").setCreativeTab(CreativeTabs.BREWING)); + registerItem(378, "magma_cream", (new Item()).setUnlocalizedName("magmaCream").setCreativeTab(CreativeTabs.BREWING)); + registerItem(379, "brewing_stand", (new ItemBlockSpecial(Blocks.BREWING_STAND)).setUnlocalizedName("brewingStand").setCreativeTab(CreativeTabs.BREWING)); + registerItem(380, "cauldron", (new ItemBlockSpecial(Blocks.CAULDRON)).setUnlocalizedName("cauldron").setCreativeTab(CreativeTabs.BREWING)); + registerItem(381, "ender_eye", (new ItemEnderEye()).setUnlocalizedName("eyeOfEnder")); + registerItem(382, "speckled_melon", (new Item()).setUnlocalizedName("speckledMelon").setCreativeTab(CreativeTabs.BREWING)); + registerItem(383, "spawn_egg", (new ItemMonsterPlacer()).setUnlocalizedName("monsterPlacer")); + registerItem(384, "experience_bottle", (new ItemExpBottle()).setUnlocalizedName("expBottle")); + registerItem(385, "fire_charge", (new ItemFireball()).setUnlocalizedName("fireball")); + registerItem(386, "writable_book", (new ItemWritableBook()).setUnlocalizedName("writingBook").setCreativeTab(CreativeTabs.MISC)); + registerItem(387, "written_book", (new ItemWrittenBook()).setUnlocalizedName("writtenBook").setMaxStackSize(16)); + registerItem(388, "emerald", (new Item()).setUnlocalizedName("emerald").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(389, "item_frame", (new ItemHangingEntity(EntityItemFrame.class)).setUnlocalizedName("frame")); + registerItem(390, "flower_pot", (new ItemBlockSpecial(Blocks.FLOWER_POT)).setUnlocalizedName("flowerPot").setCreativeTab(CreativeTabs.DECORATIONS)); + registerItem(391, "carrot", (new ItemSeedFood(3, 0.6F, Blocks.CARROTS, Blocks.FARMLAND)).setUnlocalizedName("carrots")); + registerItem(392, "potato", (new ItemSeedFood(1, 0.3F, Blocks.POTATOES, Blocks.FARMLAND)).setUnlocalizedName("potato")); + registerItem(393, "baked_potato", (new ItemFood(5, 0.6F, false)).setUnlocalizedName("potatoBaked")); + registerItem(394, "poisonous_potato", (new ItemFood(2, 0.3F, false)).setPotionEffect(new PotionEffect(MobEffects.POISON, 100, 0), 0.6F).setUnlocalizedName("potatoPoisonous")); + registerItem(395, "map", (new ItemEmptyMap()).setUnlocalizedName("emptyMap")); + registerItem(396, "golden_carrot", (new ItemFood(6, 1.2F, false)).setUnlocalizedName("carrotGolden").setCreativeTab(CreativeTabs.BREWING)); + registerItem(397, "skull", (new ItemSkull()).setUnlocalizedName("skull")); + registerItem(398, "carrot_on_a_stick", (new ItemCarrotOnAStick()).setUnlocalizedName("carrotOnAStick")); + registerItem(399, "nether_star", (new ItemSimpleFoiled()).setUnlocalizedName("netherStar").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(400, "pumpkin_pie", (new ItemFood(8, 0.3F, false)).setUnlocalizedName("pumpkinPie").setCreativeTab(CreativeTabs.FOOD)); + registerItem(401, "fireworks", (new ItemFirework()).setUnlocalizedName("fireworks")); + registerItem(402, "firework_charge", (new ItemFireworkCharge()).setUnlocalizedName("fireworksCharge").setCreativeTab(CreativeTabs.MISC)); + registerItem(403, "enchanted_book", (new ItemEnchantedBook()).setMaxStackSize(1).setUnlocalizedName("enchantedBook")); + registerItem(404, "comparator", (new ItemBlockSpecial(Blocks.UNPOWERED_COMPARATOR)).setUnlocalizedName("comparator").setCreativeTab(CreativeTabs.REDSTONE)); + registerItem(405, "netherbrick", (new Item()).setUnlocalizedName("netherbrick").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(406, "quartz", (new Item()).setUnlocalizedName("netherquartz").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(407, "tnt_minecart", (new ItemMinecart(EntityMinecart.Type.TNT)).setUnlocalizedName("minecartTnt")); + registerItem(408, "hopper_minecart", (new ItemMinecart(EntityMinecart.Type.HOPPER)).setUnlocalizedName("minecartHopper")); + registerItem(409, "prismarine_shard", (new Item()).setUnlocalizedName("prismarineShard").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(410, "prismarine_crystals", (new Item()).setUnlocalizedName("prismarineCrystals").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(411, "rabbit", (new ItemFood(3, 0.3F, true)).setUnlocalizedName("rabbitRaw")); + registerItem(412, "cooked_rabbit", (new ItemFood(5, 0.6F, true)).setUnlocalizedName("rabbitCooked")); + registerItem(413, "rabbit_stew", (new ItemSoup(10)).setUnlocalizedName("rabbitStew")); + registerItem(414, "rabbit_foot", (new Item()).setUnlocalizedName("rabbitFoot").setCreativeTab(CreativeTabs.BREWING)); + registerItem(415, "rabbit_hide", (new Item()).setUnlocalizedName("rabbitHide").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(416, "armor_stand", (new ItemArmorStand()).setUnlocalizedName("armorStand").setMaxStackSize(16)); + registerItem(417, "iron_horse_armor", (new Item()).setUnlocalizedName("horsearmormetal").setMaxStackSize(1).setCreativeTab(CreativeTabs.MISC)); + registerItem(418, "golden_horse_armor", (new Item()).setUnlocalizedName("horsearmorgold").setMaxStackSize(1).setCreativeTab(CreativeTabs.MISC)); + registerItem(419, "diamond_horse_armor", (new Item()).setUnlocalizedName("horsearmordiamond").setMaxStackSize(1).setCreativeTab(CreativeTabs.MISC)); + registerItem(420, "lead", (new ItemLead()).setUnlocalizedName("leash")); + registerItem(421, "name_tag", (new ItemNameTag()).setUnlocalizedName("nameTag")); + registerItem(422, "command_block_minecart", (new ItemMinecart(EntityMinecart.Type.COMMAND_BLOCK)).setUnlocalizedName("minecartCommandBlock").setCreativeTab((CreativeTabs)null)); + registerItem(423, "mutton", (new ItemFood(2, 0.3F, true)).setUnlocalizedName("muttonRaw")); + registerItem(424, "cooked_mutton", (new ItemFood(6, 0.8F, true)).setUnlocalizedName("muttonCooked")); + registerItem(425, "banner", (new ItemBanner()).setUnlocalizedName("banner")); + registerItem(426, "end_crystal", new ItemEndCrystal()); + registerItem(427, "spruce_door", (new ItemDoor(Blocks.SPRUCE_DOOR)).setUnlocalizedName("doorSpruce")); + registerItem(428, "birch_door", (new ItemDoor(Blocks.BIRCH_DOOR)).setUnlocalizedName("doorBirch")); + registerItem(429, "jungle_door", (new ItemDoor(Blocks.JUNGLE_DOOR)).setUnlocalizedName("doorJungle")); + registerItem(430, "acacia_door", (new ItemDoor(Blocks.ACACIA_DOOR)).setUnlocalizedName("doorAcacia")); + registerItem(431, "dark_oak_door", (new ItemDoor(Blocks.DARK_OAK_DOOR)).setUnlocalizedName("doorDarkOak")); + registerItem(432, "chorus_fruit", (new ItemChorusFruit(4, 0.3F)).setAlwaysEdible().setUnlocalizedName("chorusFruit").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(433, "chorus_fruit_popped", (new Item()).setUnlocalizedName("chorusFruitPopped").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(434, "beetroot", (new ItemFood(1, 0.6F, false)).setUnlocalizedName("beetroot")); + registerItem(435, "beetroot_seeds", (new ItemSeeds(Blocks.BEETROOTS, Blocks.FARMLAND)).setUnlocalizedName("beetroot_seeds")); + registerItem(436, "beetroot_soup", (new ItemSoup(6)).setUnlocalizedName("beetroot_soup")); + registerItem(437, "dragon_breath", (new Item()).setCreativeTab(CreativeTabs.BREWING).setUnlocalizedName("dragon_breath").setContainerItem(item1)); + registerItem(438, "splash_potion", (new ItemSplashPotion()).setUnlocalizedName("splash_potion")); + registerItem(439, "spectral_arrow", (new ItemSpectralArrow()).setUnlocalizedName("spectral_arrow")); + registerItem(440, "tipped_arrow", (new ItemTippedArrow()).setUnlocalizedName("tipped_arrow")); + registerItem(441, "lingering_potion", (new ItemLingeringPotion()).setUnlocalizedName("lingering_potion")); + registerItem(442, "shield", (new ItemShield()).setUnlocalizedName("shield")); + registerItem(443, "elytra", (new ItemElytra()).setUnlocalizedName("elytra")); + registerItem(444, "spruce_boat", new ItemBoat(EntityBoat.Type.SPRUCE)); + registerItem(445, "birch_boat", new ItemBoat(EntityBoat.Type.BIRCH)); + registerItem(446, "jungle_boat", new ItemBoat(EntityBoat.Type.JUNGLE)); + registerItem(447, "acacia_boat", new ItemBoat(EntityBoat.Type.ACACIA)); + registerItem(448, "dark_oak_boat", new ItemBoat(EntityBoat.Type.DARK_OAK)); + registerItem(449, "totem_of_undying", (new Item()).setUnlocalizedName("totem").setMaxStackSize(1).setCreativeTab(CreativeTabs.COMBAT)); + registerItem(450, "shulker_shell", (new Item()).setUnlocalizedName("shulkerShell").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(452, "iron_nugget", (new Item()).setUnlocalizedName("ironNugget").setCreativeTab(CreativeTabs.MATERIALS)); + registerItem(453, "knowledge_book", (new ItemKnowledgeBook()).setUnlocalizedName("knowledgeBook")); + registerItem(2256, "record_13", (new ItemRecord("13", SoundEvents.RECORD_13)).setUnlocalizedName("record")); + registerItem(2257, "record_cat", (new ItemRecord("cat", SoundEvents.RECORD_CAT)).setUnlocalizedName("record")); + registerItem(2258, "record_blocks", (new ItemRecord("blocks", SoundEvents.RECORD_BLOCKS)).setUnlocalizedName("record")); + registerItem(2259, "record_chirp", (new ItemRecord("chirp", SoundEvents.RECORD_CHIRP)).setUnlocalizedName("record")); + registerItem(2260, "record_far", (new ItemRecord("far", SoundEvents.RECORD_FAR)).setUnlocalizedName("record")); + registerItem(2261, "record_mall", (new ItemRecord("mall", SoundEvents.RECORD_MALL)).setUnlocalizedName("record")); + registerItem(2262, "record_mellohi", (new ItemRecord("mellohi", SoundEvents.RECORD_MELLOHI)).setUnlocalizedName("record")); + registerItem(2263, "record_stal", (new ItemRecord("stal", SoundEvents.RECORD_STAL)).setUnlocalizedName("record")); + registerItem(2264, "record_strad", (new ItemRecord("strad", SoundEvents.RECORD_STRAD)).setUnlocalizedName("record")); + registerItem(2265, "record_ward", (new ItemRecord("ward", SoundEvents.RECORD_WARD)).setUnlocalizedName("record")); + registerItem(2266, "record_11", (new ItemRecord("11", SoundEvents.RECORD_11)).setUnlocalizedName("record")); + registerItem(2267, "record_wait", (new ItemRecord("wait", SoundEvents.RECORD_WAIT)).setUnlocalizedName("record")); + } + + /** + * Register a default ItemBlock for the given Block. + */ + private static void registerItemBlock(Block blockIn) + { + registerItemBlock(blockIn, new ItemBlock(blockIn)); + } + + /** + * Register the given Item as the ItemBlock for the given Block. + */ + protected static void registerItemBlock(Block blockIn, Item itemIn) + { + registerItem(Block.getIdFromBlock(blockIn), Block.REGISTRY.getNameForObject(blockIn), itemIn); + BLOCK_TO_ITEM.put(blockIn, itemIn); + } + + private static void registerItem(int id, String textualID, Item itemIn) + { + registerItem(id, new ResourceLocation(textualID), itemIn); + } + + private static void registerItem(int id, ResourceLocation textualID, Item itemIn) + { + REGISTRY.register(id, textualID, itemIn); + } + + @SideOnly(Side.CLIENT) + public ItemStack getDefaultInstance() + { + return new ItemStack(this); + } + + public static enum ToolMaterial + { + WOOD(0, 59, 2.0F, 0.0F, 15), + STONE(1, 131, 4.0F, 1.0F, 5), + IRON(2, 250, 6.0F, 2.0F, 14), + DIAMOND(3, 1561, 8.0F, 3.0F, 10), + GOLD(0, 32, 12.0F, 0.0F, 22); + + /** The level of material this tool can harvest (3 = DIAMOND, 2 = IRON, 1 = STONE, 0 = WOOD/GOLD) */ + private final int harvestLevel; + /** The number of uses this material allows. (wood = 59, stone = 131, iron = 250, diamond = 1561, gold = 32) */ + private final int maxUses; + /** The strength of this tool material against blocks which it is effective against. */ + private final float efficiency; + /** Damage versus entities. */ + private final float attackDamage; + /** Defines the natural enchantability factor of the material. */ + private final int enchantability; + //Added by forge for custom Tool materials. + private ItemStack repairMaterial = ItemStack.EMPTY; + + private ToolMaterial(int harvestLevel, int maxUses, float efficiency, float damageVsEntity, int enchantability) + { + this.harvestLevel = harvestLevel; + this.maxUses = maxUses; + this.efficiency = efficiency; + this.attackDamage = damageVsEntity; + this.enchantability = enchantability; + } + + /** + * The number of uses this material allows. (wood = 59, stone = 131, iron = 250, diamond = 1561, gold = 32) + */ + public int getMaxUses() + { + return this.maxUses; + } + + /** + * The strength of this tool material against blocks which it is effective against. + */ + public float getEfficiency() + { + return this.efficiency; + } + + /** + * Returns the damage against a given entity. + */ + public float getAttackDamage() + { + return this.attackDamage; + } + + /** + * The level of material this tool can harvest (3 = DIAMOND, 2 = IRON, 1 = STONE, 0 = IRON/GOLD) + */ + public int getHarvestLevel() + { + return this.harvestLevel; + } + + /** + * Return the natural enchantability factor of the material. + */ + public int getEnchantability() + { + return this.enchantability; + } + + @Deprecated // Use getRepairItemStack below + public Item getRepairItem() + { + if (this == WOOD) + { + return Item.getItemFromBlock(Blocks.PLANKS); + } + else if (this == STONE) + { + return Item.getItemFromBlock(Blocks.COBBLESTONE); + } + else if (this == GOLD) + { + return Items.GOLD_INGOT; + } + else if (this == IRON) + { + return Items.IRON_INGOT; + } + else + { + return this == DIAMOND ? Items.DIAMOND : null; + } + } + + public ToolMaterial setRepairItem(ItemStack stack) + { + if (!this.repairMaterial.isEmpty()) throw new RuntimeException("Repair material has already been set"); + if (this == WOOD || this == STONE || this == GOLD || this == IRON || this == DIAMOND) throw new RuntimeException("Can not change vanilla tool repair materials"); + this.repairMaterial = stack; + return this; + } + + public ItemStack getRepairItemStack() + { + if (!repairMaterial.isEmpty()) return repairMaterial; + Item ret = this.getRepairItem(); + if (ret != null) repairMaterial = new ItemStack(ret, 1, net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE); + return repairMaterial; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemAir.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAir.java new file mode 100644 index 0000000..a239443 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAir.java @@ -0,0 +1,46 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAir extends Item +{ + private final Block block; + + public ItemAir(Block blockIn) + { + this.block = blockIn; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return this.block.getUnlocalizedName(); + } + + /** + * Returns the unlocalized name of this item. + */ + public String getUnlocalizedName() + { + return this.block.getUnlocalizedName(); + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + super.addInformation(stack, worldIn, tooltip, flagIn); + this.block.addInformation(stack, worldIn, tooltip, flagIn); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemAnvilBlock.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAnvilBlock.java new file mode 100644 index 0000000..81c3762 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAnvilBlock.java @@ -0,0 +1,20 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; + +public class ItemAnvilBlock extends ItemMultiTexture +{ + public ItemAnvilBlock(Block block) + { + super(block, block, new String[] {"intact", "slightlyDamaged", "veryDamaged"}); + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage << 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemAppleGold.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAppleGold.java new file mode 100644 index 0000000..6b26233 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAppleGold.java @@ -0,0 +1,72 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemAppleGold extends ItemFood +{ + public ItemAppleGold(int amount, float saturation, boolean isWolfFood) + { + super(amount, saturation, isWolfFood); + this.setHasSubtypes(true); + } + + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return super.hasEffect(stack) || stack.getMetadata() > 0; + } + + /** + * Return an item rarity from EnumRarity + */ + public EnumRarity getRarity(ItemStack stack) + { + return stack.getMetadata() == 0 ? EnumRarity.RARE : EnumRarity.EPIC; + } + + protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player) + { + if (!worldIn.isRemote) + { + if (stack.getMetadata() > 0) + { + player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 400, 1)); + player.addPotionEffect(new PotionEffect(MobEffects.RESISTANCE, 6000, 0)); + player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 6000, 0)); + player.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, 2400, 3)); + } + else + { + player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION, 100, 1)); + player.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION, 2400, 0)); + } + } + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + items.add(new ItemStack(this)); + items.add(new ItemStack(this, 1, 1)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemArmor.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemArmor.java new file mode 100644 index 0000000..1d46ec4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemArmor.java @@ -0,0 +1,404 @@ +package net.minecraft.item; + +import com.google.common.base.Predicates; +import com.google.common.collect.Multimap; +import java.util.List; +import java.util.UUID; +import net.minecraft.block.BlockDispenser; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemArmor extends Item +{ + /** Holds the 'base' maxDamage that each armorType have. */ + private static final int[] MAX_DAMAGE_ARRAY = new int[] {13, 15, 16, 11}; + private static final UUID[] ARMOR_MODIFIERS = new UUID[] {UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150")}; + public static final String[] EMPTY_SLOT_NAMES = new String[] {"minecraft:items/empty_armor_slot_boots", "minecraft:items/empty_armor_slot_leggings", "minecraft:items/empty_armor_slot_chestplate", "minecraft:items/empty_armor_slot_helmet"}; + public static final IBehaviorDispenseItem DISPENSER_BEHAVIOR = new BehaviorDefaultDispenseItem() + { + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + ItemStack itemstack = ItemArmor.dispenseArmor(source, stack); + return itemstack.isEmpty() ? super.dispenseStack(source, stack) : itemstack; + } + }; + /** Stores the armor type: 0 is helmet, 1 is plate, 2 is legs and 3 is boots */ + public final EntityEquipmentSlot armorType; + /** Holds the amount of damage that the armor reduces at full durability. */ + public final int damageReduceAmount; + public final float toughness; + /** + * Used on RenderPlayer to select the correspondent armor to be rendered on the player: 0 is cloth, 1 is chain, 2 is + * iron, 3 is diamond and 4 is gold. + */ + public final int renderIndex; + /** The EnumArmorMaterial used for this ItemArmor */ + private final ItemArmor.ArmorMaterial material; + + public static ItemStack dispenseArmor(IBlockSource blockSource, ItemStack stack) + { + BlockPos blockpos = blockSource.getBlockPos().offset((EnumFacing)blockSource.getBlockState().getValue(BlockDispenser.FACING)); + List list = blockSource.getWorld().getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(blockpos), Predicates.and(EntitySelectors.NOT_SPECTATING, new EntitySelectors.ArmoredMob(stack))); + + if (list.isEmpty()) + { + return ItemStack.EMPTY; + } + else + { + EntityLivingBase entitylivingbase = list.get(0); + EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(stack); + ItemStack itemstack = stack.splitStack(1); + entitylivingbase.setItemStackToSlot(entityequipmentslot, itemstack); + + if (entitylivingbase instanceof EntityLiving) + { + ((EntityLiving)entitylivingbase).setDropChance(entityequipmentslot, 2.0F); + } + + return stack; + } + } + + public ItemArmor(ItemArmor.ArmorMaterial materialIn, int renderIndexIn, EntityEquipmentSlot equipmentSlotIn) + { + this.material = materialIn; + this.armorType = equipmentSlotIn; + this.renderIndex = renderIndexIn; + this.damageReduceAmount = materialIn.getDamageReductionAmount(equipmentSlotIn); + this.setMaxDamage(materialIn.getDurability(equipmentSlotIn)); + this.toughness = materialIn.getToughness(); + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.COMBAT); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, DISPENSER_BEHAVIOR); + } + + /** + * Gets the equipment slot of this armor piece (formerly known as armor type) + */ + @SideOnly(Side.CLIENT) + public EntityEquipmentSlot getEquipmentSlot() + { + return this.armorType; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return this.material.getEnchantability(); + } + + /** + * Return the armor material for this armor item. + */ + public ItemArmor.ArmorMaterial getArmorMaterial() + { + return this.material; + } + + /** + * Return whether the specified armor ItemStack has a color. + */ + public boolean hasColor(ItemStack stack) + { + if (this.material != ItemArmor.ArmorMaterial.LEATHER) + { + return false; + } + else + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + return nbttagcompound != null && nbttagcompound.hasKey("display", 10) ? nbttagcompound.getCompoundTag("display").hasKey("color", 3) : false; + } + } + + /** + * Return the color for the specified armor ItemStack. + */ + public int getColor(ItemStack stack) + { + if (this.material != ItemArmor.ArmorMaterial.LEATHER) + { + return 16777215; + } + else + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound != null) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); + + if (nbttagcompound1 != null && nbttagcompound1.hasKey("color", 3)) + { + return nbttagcompound1.getInteger("color"); + } + } + + return 10511680; + } + } + + /** + * Remove the color from the specified armor ItemStack. + */ + public void removeColor(ItemStack stack) + { + if (this.material == ItemArmor.ArmorMaterial.LEATHER) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound != null) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); + + if (nbttagcompound1.hasKey("color")) + { + nbttagcompound1.removeTag("color"); + } + } + } + } + + /** + * Sets the color of the specified armor ItemStack + */ + public void setColor(ItemStack stack, int color) + { + if (this.material != ItemArmor.ArmorMaterial.LEATHER) + { + throw new UnsupportedOperationException("Can't dye non-leather!"); + } + else + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound == null) + { + nbttagcompound = new NBTTagCompound(); + stack.setTagCompound(nbttagcompound); + } + + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("display"); + + if (!nbttagcompound.hasKey("display", 10)) + { + nbttagcompound.setTag("display", nbttagcompound1); + } + + nbttagcompound1.setInteger("color", color); + } + } + + /** + * Return whether this item is repairable in an anvil. + * + * @param toRepair the {@code ItemStack} being repaired + * @param repair the {@code ItemStack} being used to perform the repair + */ + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + ItemStack mat = this.material.getRepairItemStack(); + if (!mat.isEmpty() && net.minecraftforge.oredict.OreDictionary.itemMatches(mat,repair,false)) return true; + return super.getIsRepairable(toRepair, repair); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(itemstack); + ItemStack itemstack1 = playerIn.getItemStackFromSlot(entityequipmentslot); + + if (itemstack1.isEmpty()) + { + playerIn.setItemStackToSlot(entityequipmentslot, itemstack.copy()); + itemstack.setCount(0); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + else + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } + + /** + * Gets a map of item attribute modifiers, used by ItemSword to increase hit damage. + */ + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); + + if (equipmentSlot == this.armorType) + { + multimap.put(SharedMonsterAttributes.ARMOR.getName(), new AttributeModifier(ARMOR_MODIFIERS[equipmentSlot.getIndex()], "Armor modifier", (double)this.damageReduceAmount, 0)); + multimap.put(SharedMonsterAttributes.ARMOR_TOUGHNESS.getName(), new AttributeModifier(ARMOR_MODIFIERS[equipmentSlot.getIndex()], "Armor toughness", (double)this.toughness, 0)); + } + + return multimap; + } + + /** + * Determines if this armor will be rendered with the secondary 'overlay' texture. + * If this is true, the first texture will be rendered using a tint of the color + * specified by getColor(ItemStack) + * + * @param stack The stack + * @return true/false + */ + public boolean hasOverlay(ItemStack stack) + { + return this.material == ItemArmor.ArmorMaterial.LEATHER || getColor(stack) != 0x00FFFFFF; + } + + public static enum ArmorMaterial + { + LEATHER("leather", 5, new int[]{1, 2, 3, 1}, 15, SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, 0.0F), + CHAIN("chainmail", 15, new int[]{1, 4, 5, 2}, 12, SoundEvents.ITEM_ARMOR_EQUIP_CHAIN, 0.0F), + IRON("iron", 15, new int[]{2, 5, 6, 2}, 9, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 0.0F), + GOLD("gold", 7, new int[]{1, 3, 5, 2}, 25, SoundEvents.ITEM_ARMOR_EQUIP_GOLD, 0.0F), + DIAMOND("diamond", 33, new int[]{3, 6, 8, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 2.0F); + + private final String name; + /** + * Holds the maximum damage factor (each piece multiply this by it's own value) of the material, this is the + * item damage (how much can absorb before breaks) + */ + private final int maxDamageFactor; + /** + * Holds the damage reduction (each 1 points is half a shield on gui) of each piece of armor (helmet, plate, + * legs and boots) + */ + private final int[] damageReductionAmountArray; + /** Return the enchantability factor of the material */ + private final int enchantability; + private final SoundEvent soundEvent; + private final float toughness; + //Added by forge for custom Armor materials. + public ItemStack repairMaterial = ItemStack.EMPTY; + + private ArmorMaterial(String nameIn, int maxDamageFactorIn, int[] damageReductionAmountArrayIn, int enchantabilityIn, SoundEvent soundEventIn, float toughnessIn) + { + this.name = nameIn; + this.maxDamageFactor = maxDamageFactorIn; + this.damageReductionAmountArray = damageReductionAmountArrayIn; + this.enchantability = enchantabilityIn; + this.soundEvent = soundEventIn; + this.toughness = toughnessIn; + } + + /** + * Returns the durability for a armor slot of for this type. + */ + public int getDurability(EntityEquipmentSlot armorType) + { + return ItemArmor.MAX_DAMAGE_ARRAY[armorType.getIndex()] * this.maxDamageFactor; + } + + /** + * Return the damage reduction (each 1 point is a half a shield on gui) of the piece index passed (0 = helmet, 1 + * = plate, 2 = legs and 3 = boots) + */ + public int getDamageReductionAmount(EntityEquipmentSlot armorType) + { + return this.damageReductionAmountArray[armorType.getIndex()]; + } + + /** + * Return the enchantability factor of the material. + */ + public int getEnchantability() + { + return this.enchantability; + } + + public SoundEvent getSoundEvent() + { + return this.soundEvent; + } + + /** + * Get a main crafting component of this Armor Material (example is Items.iron_ingot) + */ + @Deprecated // Use getRepairItemStack below + public Item getRepairItem() + { + if (this == LEATHER) + { + return Items.LEATHER; + } + else if (this == CHAIN) + { + return Items.IRON_INGOT; + } + else if (this == GOLD) + { + return Items.GOLD_INGOT; + } + else if (this == IRON) + { + return Items.IRON_INGOT; + } + else + { + return this == DIAMOND ? Items.DIAMOND : null; + } + } + + @SideOnly(Side.CLIENT) + public String getName() + { + return this.name; + } + + public float getToughness() + { + return this.toughness; + } + + public ArmorMaterial setRepairItem(ItemStack stack) + { + if (!this.repairMaterial.isEmpty()) throw new RuntimeException("Repair material has already been set"); + if (this == LEATHER || this == CHAIN || this == GOLD || this == IRON || this == DIAMOND) throw new RuntimeException("Can not change vanilla armor repair materials"); + this.repairMaterial = stack; + return this; + } + + public ItemStack getRepairItemStack() + { + if (!repairMaterial.isEmpty()) return repairMaterial; + Item ret = this.getRepairItem(); + if (ret != null) repairMaterial = new ItemStack(ret,1,net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE); + return repairMaterial; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemArmorStand.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemArmorStand.java new file mode 100644 index 0000000..8d18490 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemArmorStand.java @@ -0,0 +1,102 @@ +package net.minecraft.item; + +import java.util.List; +import java.util.Random; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Rotations; +import net.minecraft.world.World; + +public class ItemArmorStand extends Item +{ + public ItemArmorStand() + { + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (facing == EnumFacing.DOWN) + { + return EnumActionResult.FAIL; + } + else + { + boolean flag = worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + BlockPos blockpos = flag ? pos : pos.offset(facing); + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(blockpos, facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + BlockPos blockpos1 = blockpos.up(); + boolean flag1 = !worldIn.isAirBlock(blockpos) && !worldIn.getBlockState(blockpos).getBlock().isReplaceable(worldIn, blockpos); + flag1 = flag1 | (!worldIn.isAirBlock(blockpos1) && !worldIn.getBlockState(blockpos1).getBlock().isReplaceable(worldIn, blockpos1)); + + if (flag1) + { + return EnumActionResult.FAIL; + } + else + { + double d0 = (double)blockpos.getX(); + double d1 = (double)blockpos.getY(); + double d2 = (double)blockpos.getZ(); + List list = worldIn.getEntitiesWithinAABBExcludingEntity((Entity)null, new AxisAlignedBB(d0, d1, d2, d0 + 1.0D, d1 + 2.0D, d2 + 1.0D)); + + if (!list.isEmpty()) + { + return EnumActionResult.FAIL; + } + else + { + if (!worldIn.isRemote) + { + worldIn.setBlockToAir(blockpos); + worldIn.setBlockToAir(blockpos1); + EntityArmorStand entityarmorstand = new EntityArmorStand(worldIn, d0 + 0.5D, d1, d2 + 0.5D); + float f = (float)MathHelper.floor((MathHelper.wrapDegrees(player.rotationYaw - 180.0F) + 22.5F) / 45.0F) * 45.0F; + entityarmorstand.setLocationAndAngles(d0 + 0.5D, d1, d2 + 0.5D, f, 0.0F); + this.applyRandomRotations(entityarmorstand, worldIn.rand); + ItemMonsterPlacer.applyItemEntityDataToEntity(worldIn, player, itemstack, entityarmorstand); + worldIn.spawnEntity(entityarmorstand); + worldIn.playSound((EntityPlayer)null, entityarmorstand.posX, entityarmorstand.posY, entityarmorstand.posZ, SoundEvents.ENTITY_ARMORSTAND_PLACE, SoundCategory.BLOCKS, 0.75F, 0.8F); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + } + } + } + + private void applyRandomRotations(EntityArmorStand armorStand, Random rand) + { + Rotations rotations = armorStand.getHeadRotation(); + float f = rand.nextFloat() * 5.0F; + float f1 = rand.nextFloat() * 20.0F - 10.0F; + Rotations rotations1 = new Rotations(rotations.getX() + f, rotations.getY() + f1, rotations.getZ()); + armorStand.setHeadRotation(rotations1); + rotations = armorStand.getBodyRotation(); + f = rand.nextFloat() * 10.0F - 5.0F; + rotations1 = new Rotations(rotations.getX(), rotations.getY() + f, rotations.getZ()); + armorStand.setBodyRotation(rotations1); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemArrow.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemArrow.java new file mode 100644 index 0000000..1423eb3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemArrow.java @@ -0,0 +1,28 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.world.World; + +public class ItemArrow extends Item +{ + public ItemArrow() + { + this.setCreativeTab(CreativeTabs.COMBAT); + } + + public EntityArrow createArrow(World worldIn, ItemStack stack, EntityLivingBase shooter) + { + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(worldIn, shooter); + entitytippedarrow.setPotionEffect(stack); + return entitytippedarrow; + } + + public boolean isInfinite(ItemStack stack, ItemStack bow, net.minecraft.entity.player.EntityPlayer player) + { + int enchant = net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.init.Enchantments.INFINITY, bow); + return enchant <= 0 ? false : this.getClass() == ItemArrow.class; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemAxe.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAxe.java new file mode 100644 index 0000000..a98e0f5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemAxe.java @@ -0,0 +1,35 @@ +package net.minecraft.item; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; + +public class ItemAxe extends ItemTool +{ + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, Blocks.WOODEN_PRESSURE_PLATE); + private static final float[] ATTACK_DAMAGES = new float[] {6.0F, 8.0F, 8.0F, 8.0F, 6.0F}; + private static final float[] ATTACK_SPEEDS = new float[] { -3.2F, -3.2F, -3.1F, -3.0F, -3.0F}; + + protected ItemAxe(Item.ToolMaterial material) + { + super(material, EFFECTIVE_ON); + this.attackDamage = ATTACK_DAMAGES[material.ordinal()]; + this.attackSpeed = ATTACK_SPEEDS[material.ordinal()]; + } + + protected ItemAxe(Item.ToolMaterial material, float damage, float speed) + { + super(material, EFFECTIVE_ON); + this.attackDamage = damage; + this.attackSpeed = speed; + } + + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBanner.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBanner.java new file mode 100644 index 0000000..3af4fb4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBanner.java @@ -0,0 +1,180 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.BlockStandingSign; +import net.minecraft.block.BlockWallSign; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.BannerPattern; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBanner extends ItemBlock +{ + public ItemBanner() + { + super(Blocks.STANDING_BANNER); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setHasSubtypes(true); + this.setMaxDamage(0); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + boolean flag = iblockstate.getBlock().isReplaceable(worldIn, pos); + + if (facing != EnumFacing.DOWN && (iblockstate.getMaterial().isSolid() || flag) && (!flag || facing == EnumFacing.UP)) + { + pos = pos.offset(facing); + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(pos, facing, itemstack) && Blocks.STANDING_BANNER.canPlaceBlockAt(worldIn, pos)) + { + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else + { + pos = flag ? pos.down() : pos; + + if (facing == EnumFacing.UP) + { + int i = MathHelper.floor((double)((player.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; + worldIn.setBlockState(pos, Blocks.STANDING_BANNER.getDefaultState().withProperty(BlockStandingSign.ROTATION, Integer.valueOf(i)), 3); + } + else + { + worldIn.setBlockState(pos, Blocks.WALL_BANNER.getDefaultState().withProperty(BlockWallSign.FACING, facing), 3); + } + + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityBanner) + { + ((TileEntityBanner)tileentity).setItemValues(itemstack, false); + } + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + else + { + return EnumActionResult.FAIL; + } + } + else + { + return EnumActionResult.FAIL; + } + } + + public String getItemStackDisplayName(ItemStack stack) + { + String s = "item.banner."; + EnumDyeColor enumdyecolor = getBaseColor(stack); + s = s + enumdyecolor.getUnlocalizedName() + ".name"; + return I18n.translateToLocal(s); + } + + @SideOnly(Side.CLIENT) + public static void appendHoverTextFromTileEntityTag(ItemStack stack, List p_185054_1_) + { + NBTTagCompound nbttagcompound = stack.getSubCompound("BlockEntityTag"); + + if (nbttagcompound != null && nbttagcompound.hasKey("Patterns")) + { + NBTTagList nbttaglist = nbttagcompound.getTagList("Patterns", 10); + + for (int i = 0; i < nbttaglist.tagCount() && i < 6; ++i) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + EnumDyeColor enumdyecolor = EnumDyeColor.byDyeDamage(nbttagcompound1.getInteger("Color")); + BannerPattern bannerpattern = BannerPattern.byHash(nbttagcompound1.getString("Pattern")); + + if (bannerpattern != null) + { + p_185054_1_.add(I18n.translateToLocal("item.banner." + bannerpattern.getFileName() + "." + enumdyecolor.getUnlocalizedName())); + } + } + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + appendHoverTextFromTileEntityTag(stack, tooltip); + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) + { + items.add(makeBanner(enumdyecolor, (NBTTagList)null)); + } + } + } + + public static ItemStack makeBanner(EnumDyeColor p_190910_0_, @Nullable NBTTagList p_190910_1_) + { + ItemStack itemstack = new ItemStack(Items.BANNER, 1, p_190910_0_.getDyeDamage()); + + if (p_190910_1_ != null && !p_190910_1_.hasNoTags()) + { + itemstack.getOrCreateSubCompound("BlockEntityTag").setTag("Patterns", p_190910_1_.copy()); + } + + return itemstack; + } + + /** + * gets the CreativeTab this item is displayed on + */ + public CreativeTabs getCreativeTab() + { + return CreativeTabs.DECORATIONS; + } + + public static EnumDyeColor getBaseColor(ItemStack stack) + { + return EnumDyeColor.byDyeDamage(stack.getMetadata() & 15); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBed.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBed.java new file mode 100644 index 0000000..b8b4ab3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBed.java @@ -0,0 +1,134 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockBed; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBed; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class ItemBed extends Item +{ + public ItemBed() + { + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else if (facing != EnumFacing.UP) + { + return EnumActionResult.FAIL; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + boolean flag = block.isReplaceable(worldIn, pos); + + if (!flag) + { + pos = pos.up(); + } + + int i = MathHelper.floor((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + EnumFacing enumfacing = EnumFacing.getHorizontal(i); + BlockPos blockpos = pos.offset(enumfacing); + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(pos, facing, itemstack) && player.canPlayerEdit(blockpos, facing, itemstack)) + { + IBlockState iblockstate1 = worldIn.getBlockState(blockpos); + boolean flag1 = iblockstate1.getBlock().isReplaceable(worldIn, blockpos); + boolean flag2 = flag || worldIn.isAirBlock(pos); + boolean flag3 = flag1 || worldIn.isAirBlock(blockpos); + + if (flag2 && flag3 && worldIn.getBlockState(pos.down()).isTopSolid() && worldIn.getBlockState(blockpos.down()).isTopSolid()) + { + IBlockState iblockstate2 = Blocks.BED.getDefaultState().withProperty(BlockBed.OCCUPIED, Boolean.valueOf(false)).withProperty(BlockBed.FACING, enumfacing).withProperty(BlockBed.PART, BlockBed.EnumPartType.FOOT); + worldIn.setBlockState(pos, iblockstate2, 10); + worldIn.setBlockState(blockpos, iblockstate2.withProperty(BlockBed.PART, BlockBed.EnumPartType.HEAD), 10); + SoundType soundtype = iblockstate2.getBlock().getSoundType(iblockstate2, worldIn, pos, player); + worldIn.playSound((EntityPlayer)null, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + TileEntity tileentity = worldIn.getTileEntity(blockpos); + + if (tileentity instanceof TileEntityBed) + { + ((TileEntityBed)tileentity).setItemValues(itemstack); + } + + TileEntity tileentity1 = worldIn.getTileEntity(pos); + + if (tileentity1 instanceof TileEntityBed) + { + ((TileEntityBed)tileentity1).setItemValues(itemstack); + } + + worldIn.notifyNeighborsRespectDebug(pos, block, false); + worldIn.notifyNeighborsRespectDebug(blockpos, iblockstate1.getBlock(), false); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + else + { + return EnumActionResult.FAIL; + } + } + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName() + "." + EnumDyeColor.byMetadata(stack.getMetadata()).getUnlocalizedName(); + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (int i = 0; i < 16; ++i) + { + items.add(new ItemStack(this, 1, i)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBlock.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBlock.java new file mode 100644 index 0000000..7bc57c1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBlock.java @@ -0,0 +1,213 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBlock extends Item +{ + protected final Block block; + + public ItemBlock(Block block) + { + this.block = block; + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (!block.isReplaceable(worldIn, pos)) + { + pos = pos.offset(facing); + } + + ItemStack itemstack = player.getHeldItem(hand); + + if (!itemstack.isEmpty() && player.canPlayerEdit(pos, facing, itemstack) && worldIn.mayPlace(this.block, pos, false, facing, (Entity)null)) + { + int i = this.getMetadata(itemstack.getMetadata()); + IBlockState iblockstate1 = this.block.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, i, player, hand); + + if (placeBlockAt(itemstack, player, worldIn, pos, facing, hitX, hitY, hitZ, iblockstate1)) + { + iblockstate1 = worldIn.getBlockState(pos); + SoundType soundtype = iblockstate1.getBlock().getSoundType(iblockstate1, worldIn, pos, player); + worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + itemstack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + + public static boolean setTileEntityNBT(World worldIn, @Nullable EntityPlayer player, BlockPos pos, ItemStack stackIn) + { + MinecraftServer minecraftserver = worldIn.getMinecraftServer(); + + if (minecraftserver == null) + { + return false; + } + else + { + NBTTagCompound nbttagcompound = stackIn.getSubCompound("BlockEntityTag"); + + if (nbttagcompound != null) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity != null) + { + if (!worldIn.isRemote && tileentity.onlyOpsCanSetNbt() && (player == null || !player.canUseCommandBlock())) + { + return false; + } + + NBTTagCompound nbttagcompound1 = tileentity.writeToNBT(new NBTTagCompound()); + NBTTagCompound nbttagcompound2 = nbttagcompound1.copy(); + nbttagcompound1.merge(nbttagcompound); + nbttagcompound1.setInteger("x", pos.getX()); + nbttagcompound1.setInteger("y", pos.getY()); + nbttagcompound1.setInteger("z", pos.getZ()); + + if (!nbttagcompound1.equals(nbttagcompound2)) + { + tileentity.readFromNBT(nbttagcompound1); + tileentity.markDirty(); + return true; + } + } + } + + return false; + } + } + + @SideOnly(Side.CLIENT) + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) + { + Block block = worldIn.getBlockState(pos).getBlock(); + + if (block == Blocks.SNOW_LAYER && block.isReplaceable(worldIn, pos)) + { + side = EnumFacing.UP; + } + else if (!block.isReplaceable(worldIn, pos)) + { + pos = pos.offset(side); + } + + return worldIn.mayPlace(this.block, pos, false, side, (Entity)null); + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return this.block.getUnlocalizedName(); + } + + /** + * Returns the unlocalized name of this item. + */ + public String getUnlocalizedName() + { + return this.block.getUnlocalizedName(); + } + + /** + * gets the CreativeTab this item is displayed on + */ + public CreativeTabs getCreativeTab() + { + return this.block.getCreativeTabToDisplayOn(); + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + this.block.getSubBlocks(tab, items); + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + super.addInformation(stack, worldIn, tooltip, flagIn); + this.block.addInformation(stack, worldIn, tooltip, flagIn); + } + + public Block getBlock() + { + return this.getBlockRaw() == null ? null : this.getBlockRaw().delegate.get(); + } + + private Block getBlockRaw() + { + return this.block; + } + + /** + * Called to actually place the block, after the location is determined + * and all permission checks have been made. + * + * @param stack The item stack that was used to place the block. This can be changed inside the method. + * @param player The player who is placing the block. Can be null if the block is not being placed by a player. + * @param side The side the player (or machine) right-clicked on. + */ + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) + { + if (!world.setBlockState(pos, newState, 11)) return false; + + IBlockState state = world.getBlockState(pos); + if (state.getBlock() == this.block) + { + setTileEntityNBT(world, player, pos, stack); + this.block.onBlockPlacedBy(world, pos, state, player, stack); + + if (player instanceof EntityPlayerMP) + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, stack); + } + + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBlockSpecial.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBlockSpecial.java new file mode 100644 index 0000000..5ca7246 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBlockSpecial.java @@ -0,0 +1,91 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockSnow; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemBlockSpecial extends Item +{ + private final Block block; + + public ItemBlockSpecial(Block block) + { + this.block = block; + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (block == Blocks.SNOW_LAYER && ((Integer)iblockstate.getValue(BlockSnow.LAYERS)).intValue() < 1) + { + facing = EnumFacing.UP; + } + else if (!block.isReplaceable(worldIn, pos)) + { + pos = pos.offset(facing); + } + + ItemStack itemstack = player.getHeldItem(hand); + + if (!itemstack.isEmpty() && player.canPlayerEdit(pos, facing, itemstack) && worldIn.mayPlace(this.block, pos, false, facing, (Entity)null)) + { + IBlockState iblockstate1 = this.block.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, 0, player, hand); + + if (!worldIn.setBlockState(pos, iblockstate1, 11)) + { + return EnumActionResult.FAIL; + } + else + { + iblockstate1 = worldIn.getBlockState(pos); + + if (iblockstate1.getBlock() == this.block) + { + ItemBlock.setTileEntityNBT(worldIn, player, pos, itemstack); + iblockstate1.getBlock().onBlockPlacedBy(worldIn, pos, iblockstate1, player, itemstack); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + } + + SoundType soundtype = iblockstate1.getBlock().getSoundType(iblockstate1, worldIn, pos, player); + worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + else + { + return EnumActionResult.FAIL; + } + } + + public Block getBlock() + { + return this.getBlockRaw() == null ? null : this.getBlockRaw().delegate.get(); + } + + private Block getBlockRaw() + { + return this.block; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBoat.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBoat.java new file mode 100644 index 0000000..6da4f01 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBoat.java @@ -0,0 +1,118 @@ +package net.minecraft.item; + +import java.util.List; +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class ItemBoat extends Item +{ + private final EntityBoat.Type type; + + public ItemBoat(EntityBoat.Type typeIn) + { + this.type = typeIn; + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.TRANSPORTATION); + this.setUnlocalizedName("boat." + typeIn.getName()); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + float f = 1.0F; + float f1 = playerIn.prevRotationPitch + (playerIn.rotationPitch - playerIn.prevRotationPitch) * 1.0F; + float f2 = playerIn.prevRotationYaw + (playerIn.rotationYaw - playerIn.prevRotationYaw) * 1.0F; + double d0 = playerIn.prevPosX + (playerIn.posX - playerIn.prevPosX) * 1.0D; + double d1 = playerIn.prevPosY + (playerIn.posY - playerIn.prevPosY) * 1.0D + (double)playerIn.getEyeHeight(); + double d2 = playerIn.prevPosZ + (playerIn.posZ - playerIn.prevPosZ) * 1.0D; + Vec3d vec3d = new Vec3d(d0, d1, d2); + float f3 = MathHelper.cos(-f2 * 0.017453292F - (float)Math.PI); + float f4 = MathHelper.sin(-f2 * 0.017453292F - (float)Math.PI); + float f5 = -MathHelper.cos(-f1 * 0.017453292F); + float f6 = MathHelper.sin(-f1 * 0.017453292F); + float f7 = f4 * f5; + float f8 = f3 * f5; + double d3 = 5.0D; + Vec3d vec3d1 = vec3d.addVector((double)f7 * 5.0D, (double)f6 * 5.0D, (double)f8 * 5.0D); + RayTraceResult raytraceresult = worldIn.rayTraceBlocks(vec3d, vec3d1, true); + + if (raytraceresult == null) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + Vec3d vec3d2 = playerIn.getLook(1.0F); + boolean flag = false; + List list = worldIn.getEntitiesWithinAABBExcludingEntity(playerIn, playerIn.getEntityBoundingBox().expand(vec3d2.x * 5.0D, vec3d2.y * 5.0D, vec3d2.z * 5.0D).grow(1.0D)); + + for (int i = 0; i < list.size(); ++i) + { + Entity entity = list.get(i); + + if (entity.canBeCollidedWith()) + { + AxisAlignedBB axisalignedbb = entity.getEntityBoundingBox().grow((double)entity.getCollisionBorderSize()); + + if (axisalignedbb.contains(vec3d)) + { + flag = true; + } + } + } + + if (flag) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else if (raytraceresult.typeOfHit != RayTraceResult.Type.BLOCK) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + Block block = worldIn.getBlockState(raytraceresult.getBlockPos()).getBlock(); + boolean flag1 = block == Blocks.WATER || block == Blocks.FLOWING_WATER; + EntityBoat entityboat = new EntityBoat(worldIn, raytraceresult.hitVec.x, flag1 ? raytraceresult.hitVec.y - 0.12D : raytraceresult.hitVec.y, raytraceresult.hitVec.z); + entityboat.setBoatType(this.type); + entityboat.rotationYaw = playerIn.rotationYaw; + + if (!worldIn.getCollisionBoxes(entityboat, entityboat.getEntityBoundingBox().grow(-0.1D)).isEmpty()) + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + else + { + if (!worldIn.isRemote) + { + worldIn.spawnEntity(entityboat); + } + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBook.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBook.java new file mode 100644 index 0000000..8182f2c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBook.java @@ -0,0 +1,20 @@ +package net.minecraft.item; + +public class ItemBook extends Item +{ + /** + * Checks isDamagable and if it cannot be stacked + */ + public boolean isEnchantable(ItemStack stack) + { + return stack.getCount() == 1; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBow.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBow.java new file mode 100644 index 0000000..b19f528 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBow.java @@ -0,0 +1,232 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemBow extends Item +{ + public ItemBow() + { + this.maxStackSize = 1; + this.setMaxDamage(384); + this.setCreativeTab(CreativeTabs.COMBAT); + this.addPropertyOverride(new ResourceLocation("pull"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + if (entityIn == null) + { + return 0.0F; + } + else + { + return entityIn.getActiveItemStack().getItem() != Items.BOW ? 0.0F : (float)(stack.getMaxItemUseDuration() - entityIn.getItemInUseCount()) / 20.0F; + } + } + }); + this.addPropertyOverride(new ResourceLocation("pulling"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return entityIn != null && entityIn.isHandActive() && entityIn.getActiveItemStack() == stack ? 1.0F : 0.0F; + } + }); + } + + private ItemStack findAmmo(EntityPlayer player) + { + if (this.isArrow(player.getHeldItem(EnumHand.OFF_HAND))) + { + return player.getHeldItem(EnumHand.OFF_HAND); + } + else if (this.isArrow(player.getHeldItem(EnumHand.MAIN_HAND))) + { + return player.getHeldItem(EnumHand.MAIN_HAND); + } + else + { + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) + { + ItemStack itemstack = player.inventory.getStackInSlot(i); + + if (this.isArrow(itemstack)) + { + return itemstack; + } + } + + return ItemStack.EMPTY; + } + } + + protected boolean isArrow(ItemStack stack) + { + return stack.getItem() instanceof ItemArrow; + } + + /** + * Called when the player stops using an Item (stops holding the right mouse button). + */ + public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityLivingBase entityLiving, int timeLeft) + { + if (entityLiving instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)entityLiving; + boolean flag = entityplayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack) > 0; + ItemStack itemstack = this.findAmmo(entityplayer); + + int i = this.getMaxItemUseDuration(stack) - timeLeft; + i = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(stack, worldIn, entityplayer, i, !itemstack.isEmpty() || flag); + if (i < 0) return; + + if (!itemstack.isEmpty() || flag) + { + if (itemstack.isEmpty()) + { + itemstack = new ItemStack(Items.ARROW); + } + + float f = getArrowVelocity(i); + + if ((double)f >= 0.1D) + { + boolean flag1 = entityplayer.capabilities.isCreativeMode || (itemstack.getItem() instanceof ItemArrow && ((ItemArrow) itemstack.getItem()).isInfinite(itemstack, stack, entityplayer)); + + if (!worldIn.isRemote) + { + ItemArrow itemarrow = (ItemArrow)(itemstack.getItem() instanceof ItemArrow ? itemstack.getItem() : Items.ARROW); + EntityArrow entityarrow = itemarrow.createArrow(worldIn, itemstack, entityplayer); + entityarrow.shoot(entityplayer, entityplayer.rotationPitch, entityplayer.rotationYaw, 0.0F, f * 3.0F, 1.0F); + + if (f == 1.0F) + { + entityarrow.setIsCritical(true); + } + + int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); + + if (j > 0) + { + entityarrow.setDamage(entityarrow.getDamage() + (double)j * 0.5D + 0.5D); + } + + int k = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); + + if (k > 0) + { + entityarrow.setKnockbackStrength(k); + } + + if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0) + { + entityarrow.setFire(100); + } + + stack.damageItem(1, entityplayer); + + if (flag1 || entityplayer.capabilities.isCreativeMode && (itemstack.getItem() == Items.SPECTRAL_ARROW || itemstack.getItem() == Items.TIPPED_ARROW)) + { + entityarrow.pickupStatus = EntityArrow.PickupStatus.CREATIVE_ONLY; + } + + worldIn.spawnEntity(entityarrow); + } + + worldIn.playSound((EntityPlayer)null, entityplayer.posX, entityplayer.posY, entityplayer.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); + + if (!flag1 && !entityplayer.capabilities.isCreativeMode) + { + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + entityplayer.inventory.deleteStack(itemstack); + } + } + + entityplayer.addStat(StatList.getObjectUseStats(this)); + } + } + } + } + + /** + * Gets the velocity of the arrow entity from the bow's charge + */ + public static float getArrowVelocity(int charge) + { + float f = (float)charge / 20.0F; + f = (f * f + f * 2.0F) / 3.0F; + + if (f > 1.0F) + { + f = 1.0F; + } + + return f; + } + + /** + * How long it takes to use or consume an item + */ + public int getMaxItemUseDuration(ItemStack stack) + { + return 72000; + } + + /** + * returns the action that specifies what animation to play when the items is being used + */ + public EnumAction getItemUseAction(ItemStack stack) + { + return EnumAction.BOW; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + boolean flag = !this.findAmmo(playerIn).isEmpty(); + + ActionResult ret = net.minecraftforge.event.ForgeEventFactory.onArrowNock(itemstack, worldIn, playerIn, handIn, flag); + if (ret != null) return ret; + + if (!playerIn.capabilities.isCreativeMode && !flag) + { + return flag ? new ActionResult(EnumActionResult.PASS, itemstack) : new ActionResult(EnumActionResult.FAIL, itemstack); + } + else + { + playerIn.setActiveHand(handIn); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBucket.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBucket.java new file mode 100644 index 0000000..8aa9654 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBucket.java @@ -0,0 +1,209 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class ItemBucket extends Item +{ + /** field for checking if the bucket has been filled. */ + private final Block containedBlock; + + public ItemBucket(Block containedBlockIn) + { + this.maxStackSize = 1; + this.containedBlock = containedBlockIn; + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + boolean flag = this.containedBlock == Blocks.AIR; + ItemStack itemstack = playerIn.getHeldItem(handIn); + RayTraceResult raytraceresult = this.rayTrace(worldIn, playerIn, flag); + ActionResult ret = net.minecraftforge.event.ForgeEventFactory.onBucketUse(playerIn, worldIn, itemstack, raytraceresult); + if (ret != null) return ret; + + if (raytraceresult == null) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else if (raytraceresult.typeOfHit != RayTraceResult.Type.BLOCK) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + BlockPos blockpos = raytraceresult.getBlockPos(); + + if (!worldIn.isBlockModifiable(playerIn, blockpos)) + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + else if (flag) + { + if (!playerIn.canPlayerEdit(blockpos.offset(raytraceresult.sideHit), raytraceresult.sideHit, itemstack)) + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + else + { + IBlockState iblockstate = worldIn.getBlockState(blockpos); + Material material = iblockstate.getMaterial(); + + if (material == Material.WATER && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0) + { + worldIn.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 11); + playerIn.addStat(StatList.getObjectUseStats(this)); + playerIn.playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); + return new ActionResult(EnumActionResult.SUCCESS, this.fillBucket(itemstack, playerIn, Items.WATER_BUCKET)); + } + else if (material == Material.LAVA && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0) + { + playerIn.playSound(SoundEvents.ITEM_BUCKET_FILL_LAVA, 1.0F, 1.0F); + worldIn.setBlockState(blockpos, Blocks.AIR.getDefaultState(), 11); + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, this.fillBucket(itemstack, playerIn, Items.LAVA_BUCKET)); + } + else + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } + } + else + { + boolean flag1 = worldIn.getBlockState(blockpos).getBlock().isReplaceable(worldIn, blockpos); + BlockPos blockpos1 = flag1 && raytraceresult.sideHit == EnumFacing.UP ? blockpos : blockpos.offset(raytraceresult.sideHit); + + if (!playerIn.canPlayerEdit(blockpos1, raytraceresult.sideHit, itemstack)) + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + else if (this.tryPlaceContainedLiquid(playerIn, worldIn, blockpos1)) + { + if (playerIn instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)playerIn, blockpos1, itemstack); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return !playerIn.capabilities.isCreativeMode ? new ActionResult(EnumActionResult.SUCCESS, new ItemStack(Items.BUCKET)) : new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + else + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } + } + } + + private ItemStack fillBucket(ItemStack emptyBuckets, EntityPlayer player, Item fullBucket) + { + if (player.capabilities.isCreativeMode) + { + return emptyBuckets; + } + else + { + emptyBuckets.shrink(1); + + if (emptyBuckets.isEmpty()) + { + return new ItemStack(fullBucket); + } + else + { + if (!player.inventory.addItemStackToInventory(new ItemStack(fullBucket))) + { + player.dropItem(new ItemStack(fullBucket), false); + } + + return emptyBuckets; + } + } + } + + public boolean tryPlaceContainedLiquid(@Nullable EntityPlayer player, World worldIn, BlockPos posIn) + { + if (this.containedBlock == Blocks.AIR) + { + return false; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(posIn); + Material material = iblockstate.getMaterial(); + boolean flag = !material.isSolid(); + boolean flag1 = iblockstate.getBlock().isReplaceable(worldIn, posIn); + + if (!worldIn.isAirBlock(posIn) && !flag && !flag1) + { + return false; + } + else + { + if (worldIn.provider.doesWaterVaporize() && this.containedBlock == Blocks.FLOWING_WATER) + { + int l = posIn.getX(); + int i = posIn.getY(); + int j = posIn.getZ(); + worldIn.playSound(player, posIn, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (worldIn.rand.nextFloat() - worldIn.rand.nextFloat()) * 0.8F); + + for (int k = 0; k < 8; ++k) + { + worldIn.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double)l + Math.random(), (double)i + Math.random(), (double)j + Math.random(), 0.0D, 0.0D, 0.0D); + } + } + else + { + if (!worldIn.isRemote && (flag || flag1) && !material.isLiquid()) + { + worldIn.destroyBlock(posIn, true); + } + + SoundEvent soundevent = this.containedBlock == Blocks.FLOWING_LAVA ? SoundEvents.ITEM_BUCKET_EMPTY_LAVA : SoundEvents.ITEM_BUCKET_EMPTY; + worldIn.playSound(player, posIn, soundevent, SoundCategory.BLOCKS, 1.0F, 1.0F); + worldIn.setBlockState(posIn, this.containedBlock.getDefaultState(), 11); + } + + return true; + } + } + } + + @Override + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, @Nullable net.minecraft.nbt.NBTTagCompound nbt) { + if (this.getClass() == ItemBucket.class) + { + return new net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper(stack); + } + else + { + return super.initCapabilities(stack, nbt); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemBucketMilk.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBucketMilk.java new file mode 100644 index 0000000..4709a25 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemBucketMilk.java @@ -0,0 +1,74 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +public class ItemBucketMilk extends Item +{ + public ItemBucketMilk() + { + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using + * the Item before the action is complete. + */ + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + if (!worldIn.isRemote) entityLiving.curePotionEffects(stack); // FORGE - move up so stack.shrink does not turn stack into air + if (entityLiving instanceof EntityPlayerMP) + { + EntityPlayerMP entityplayermp = (EntityPlayerMP)entityLiving; + CriteriaTriggers.CONSUME_ITEM.trigger(entityplayermp, stack); + entityplayermp.addStat(StatList.getObjectUseStats(this)); + } + + if (entityLiving instanceof EntityPlayer && !((EntityPlayer)entityLiving).capabilities.isCreativeMode) + { + stack.shrink(1); + } + + return stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack; + } + + /** + * How long it takes to use or consume an item + */ + public int getMaxItemUseDuration(ItemStack stack) + { + return 32; + } + + /** + * returns the action that specifies what animation to play when the items is being used + */ + public EnumAction getItemUseAction(ItemStack stack) + { + return EnumAction.DRINK; + } + + @Override + public net.minecraftforge.common.capabilities.ICapabilityProvider initCapabilities(ItemStack stack, net.minecraft.nbt.NBTTagCompound nbt) { + return new net.minecraftforge.fluids.capability.wrappers.FluidBucketWrapper(stack); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + playerIn.setActiveHand(handIn); + return new ActionResult(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemCarrotOnAStick.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCarrotOnAStick.java new file mode 100644 index 0000000..2cb5af4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCarrotOnAStick.java @@ -0,0 +1,79 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCarrotOnAStick extends Item +{ + public ItemCarrotOnAStick() + { + this.setCreativeTab(CreativeTabs.TRANSPORTATION); + this.setMaxStackSize(1); + this.setMaxDamage(25); + } + + /** + * Returns True is the item is renderer in full 3D when hold. + */ + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return true; + } + + /** + * Returns true if this item should be rotated by 180 degrees around the Y axis when being held in an entities + * hands. + */ + @SideOnly(Side.CLIENT) + public boolean shouldRotateAroundWhenRendering() + { + return true; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (worldIn.isRemote) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + if (playerIn.isRiding() && playerIn.getRidingEntity() instanceof EntityPig) + { + EntityPig entitypig = (EntityPig)playerIn.getRidingEntity(); + + if (itemstack.getMaxDamage() - itemstack.getMetadata() >= 7 && entitypig.boost()) + { + itemstack.damageItem(7, playerIn); + + if (itemstack.isEmpty()) + { + ItemStack itemstack1 = new ItemStack(Items.FISHING_ROD); + itemstack1.setTagCompound(itemstack.getTagCompound()); + return new ActionResult(EnumActionResult.SUCCESS, itemstack1); + } + + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.PASS, itemstack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemChorusFruit.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemChorusFruit.java new file mode 100644 index 0000000..694179a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemChorusFruit.java @@ -0,0 +1,58 @@ +package net.minecraft.item; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class ItemChorusFruit extends ItemFood +{ + public ItemChorusFruit(int amount, float saturation) + { + super(amount, saturation, false); + } + + /** + * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using + * the Item before the action is complete. + */ + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + ItemStack itemstack = super.onItemUseFinish(stack, worldIn, entityLiving); + + if (!worldIn.isRemote) + { + double d0 = entityLiving.posX; + double d1 = entityLiving.posY; + double d2 = entityLiving.posZ; + + for (int i = 0; i < 16; ++i) + { + double d3 = entityLiving.posX + (entityLiving.getRNG().nextDouble() - 0.5D) * 16.0D; + double d4 = MathHelper.clamp(entityLiving.posY + (double)(entityLiving.getRNG().nextInt(16) - 8), 0.0D, (double)(worldIn.getActualHeight() - 1)); + double d5 = entityLiving.posZ + (entityLiving.getRNG().nextDouble() - 0.5D) * 16.0D; + + if (entityLiving.isRiding()) + { + entityLiving.dismountRidingEntity(); + } + + if (entityLiving.attemptTeleport(d3, d4, d5)) + { + worldIn.playSound((EntityPlayer)null, d0, d1, d2, SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F); + entityLiving.playSound(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT, 1.0F, 1.0F); + break; + } + } + + if (entityLiving instanceof EntityPlayer) + { + ((EntityPlayer)entityLiving).getCooldownTracker().setCooldown(this, 20); + } + } + + return itemstack; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemClock.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemClock.java new file mode 100644 index 0000000..c897ce5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemClock.java @@ -0,0 +1,73 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemClock extends Item +{ + public ItemClock() + { + this.addPropertyOverride(new ResourceLocation("time"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + double rotation; + @SideOnly(Side.CLIENT) + double rota; + @SideOnly(Side.CLIENT) + long lastUpdateTick; + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + boolean flag = entityIn != null; + Entity entity = (Entity)(flag ? entityIn : stack.getItemFrame()); + + if (worldIn == null && entity != null) + { + worldIn = entity.world; + } + + if (worldIn == null) + { + return 0.0F; + } + else + { + double d0; + + if (worldIn.provider.isSurfaceWorld()) + { + d0 = (double)worldIn.getCelestialAngle(1.0F); + } + else + { + d0 = Math.random(); + } + + d0 = this.wobble(worldIn, d0); + return (float)d0; + } + } + @SideOnly(Side.CLIENT) + private double wobble(World p_185087_1_, double p_185087_2_) + { + if (p_185087_1_.getTotalWorldTime() != this.lastUpdateTick) + { + this.lastUpdateTick = p_185087_1_.getTotalWorldTime(); + double d0 = p_185087_2_ - this.rotation; + d0 = MathHelper.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D; + this.rota += d0 * 0.1D; + this.rota *= 0.9D; + this.rotation = MathHelper.positiveModulo(this.rotation + this.rota, 1.0D); + } + + return this.rotation; + } + }); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemCloth.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCloth.java new file mode 100644 index 0000000..b597d92 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCloth.java @@ -0,0 +1,31 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; + +public class ItemCloth extends ItemBlock +{ + public ItemCloth(Block block) + { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName() + "." + EnumDyeColor.byMetadata(stack.getMetadata()).getUnlocalizedName(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemCoal.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCoal.java new file mode 100644 index 0000000..59dae2d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCoal.java @@ -0,0 +1,35 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.NonNullList; + +public class ItemCoal extends Item +{ + public ItemCoal() + { + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setCreativeTab(CreativeTabs.MATERIALS); + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return stack.getMetadata() == 1 ? "item.charcoal" : "item.coal"; + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + items.add(new ItemStack(this, 1, 0)); + items.add(new ItemStack(this, 1, 1)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemColored.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemColored.java new file mode 100644 index 0000000..03bd311 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemColored.java @@ -0,0 +1,51 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; + +public class ItemColored extends ItemBlock +{ + private String[] subtypeNames; + + public ItemColored(Block block, boolean hasSubtypes) + { + super(block); + + if (hasSubtypes) + { + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage; + } + + public ItemColored setSubtypeNames(String[] names) + { + this.subtypeNames = names; + return this; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + if (this.subtypeNames == null) + { + return super.getUnlocalizedName(stack); + } + else + { + int i = stack.getMetadata(); + return i >= 0 && i < this.subtypeNames.length ? super.getUnlocalizedName(stack) + "." + this.subtypeNames[i] : super.getUnlocalizedName(stack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemCompass.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCompass.java new file mode 100644 index 0000000..0f7fe39 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemCompass.java @@ -0,0 +1,93 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemCompass extends Item +{ + public ItemCompass() + { + this.addPropertyOverride(new ResourceLocation("angle"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + double rotation; + @SideOnly(Side.CLIENT) + double rota; + @SideOnly(Side.CLIENT) + long lastUpdateTick; + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + if (entityIn == null && !stack.isOnItemFrame()) + { + return 0.0F; + } + else + { + boolean flag = entityIn != null; + Entity entity = (Entity)(flag ? entityIn : stack.getItemFrame()); + + if (worldIn == null) + { + worldIn = entity.world; + } + + double d0; + + if (worldIn.provider.isSurfaceWorld()) + { + double d1 = flag ? (double)entity.rotationYaw : this.getFrameRotation((EntityItemFrame)entity); + d1 = MathHelper.positiveModulo(d1 / 360.0D, 1.0D); + double d2 = this.getSpawnToAngle(worldIn, entity) / (Math.PI * 2D); + d0 = 0.5D - (d1 - 0.25D - d2); + } + else + { + d0 = Math.random(); + } + + if (flag) + { + d0 = this.wobble(worldIn, d0); + } + + return MathHelper.positiveModulo((float)d0, 1.0F); + } + } + @SideOnly(Side.CLIENT) + private double wobble(World worldIn, double p_185093_2_) + { + if (worldIn.getTotalWorldTime() != this.lastUpdateTick) + { + this.lastUpdateTick = worldIn.getTotalWorldTime(); + double d0 = p_185093_2_ - this.rotation; + d0 = MathHelper.positiveModulo(d0 + 0.5D, 1.0D) - 0.5D; + this.rota += d0 * 0.1D; + this.rota *= 0.8D; + this.rotation = MathHelper.positiveModulo(this.rotation + this.rota, 1.0D); + } + + return this.rotation; + } + @SideOnly(Side.CLIENT) + private double getFrameRotation(EntityItemFrame p_185094_1_) + { + return (double)MathHelper.wrapDegrees(180 + p_185094_1_.facingDirection.getHorizontalIndex() * 90); + } + @SideOnly(Side.CLIENT) + private double getSpawnToAngle(World p_185092_1_, Entity p_185092_2_) + { + BlockPos blockpos = p_185092_1_.getSpawnPoint(); + return Math.atan2((double)blockpos.getZ() - p_185092_2_.posZ, (double)blockpos.getX() - p_185092_2_.posX); + } + }); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemDoor.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemDoor.java new file mode 100644 index 0000000..21fa538 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemDoor.java @@ -0,0 +1,95 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemDoor extends Item +{ + private final Block block; + + public ItemDoor(Block block) + { + this.block = block; + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (facing != EnumFacing.UP) + { + return EnumActionResult.FAIL; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (!block.isReplaceable(worldIn, pos)) + { + pos = pos.offset(facing); + } + + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(pos, facing, itemstack) && this.block.canPlaceBlockAt(worldIn, pos)) + { + EnumFacing enumfacing = EnumFacing.fromAngle((double)player.rotationYaw); + int i = enumfacing.getFrontOffsetX(); + int j = enumfacing.getFrontOffsetZ(); + boolean flag = i < 0 && hitZ < 0.5F || i > 0 && hitZ > 0.5F || j < 0 && hitX > 0.5F || j > 0 && hitX < 0.5F; + placeDoor(worldIn, pos, enumfacing, this.block, flag); + SoundType soundtype = worldIn.getBlockState(pos).getBlock().getSoundType(worldIn.getBlockState(pos), worldIn, pos, player); + worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + } + + public static void placeDoor(World worldIn, BlockPos pos, EnumFacing facing, Block door, boolean isRightHinge) + { + BlockPos blockpos = pos.offset(facing.rotateY()); + BlockPos blockpos1 = pos.offset(facing.rotateYCCW()); + int i = (worldIn.getBlockState(blockpos1).isNormalCube() ? 1 : 0) + (worldIn.getBlockState(blockpos1.up()).isNormalCube() ? 1 : 0); + int j = (worldIn.getBlockState(blockpos).isNormalCube() ? 1 : 0) + (worldIn.getBlockState(blockpos.up()).isNormalCube() ? 1 : 0); + boolean flag = worldIn.getBlockState(blockpos1).getBlock() == door || worldIn.getBlockState(blockpos1.up()).getBlock() == door; + boolean flag1 = worldIn.getBlockState(blockpos).getBlock() == door || worldIn.getBlockState(blockpos.up()).getBlock() == door; + + if ((!flag || flag1) && j <= i) + { + if (flag1 && !flag || j < i) + { + isRightHinge = false; + } + } + else + { + isRightHinge = true; + } + + BlockPos blockpos2 = pos.up(); + boolean flag2 = worldIn.isBlockPowered(pos) || worldIn.isBlockPowered(blockpos2); + IBlockState iblockstate = door.getDefaultState().withProperty(BlockDoor.FACING, facing).withProperty(BlockDoor.HINGE, isRightHinge ? BlockDoor.EnumHingePosition.RIGHT : BlockDoor.EnumHingePosition.LEFT).withProperty(BlockDoor.POWERED, Boolean.valueOf(flag2)).withProperty(BlockDoor.OPEN, Boolean.valueOf(flag2)); + worldIn.setBlockState(pos, iblockstate.withProperty(BlockDoor.HALF, BlockDoor.EnumDoorHalf.LOWER), 2); + worldIn.setBlockState(blockpos2, iblockstate.withProperty(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER), 2); + worldIn.notifyNeighborsOfStateChange(pos, door, false); + worldIn.notifyNeighborsOfStateChange(blockpos2, door, false); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemDye.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemDye.java new file mode 100644 index 0000000..403adfc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemDye.java @@ -0,0 +1,213 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockOldLog; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.IGrowable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemDye extends Item +{ + public static final int[] DYE_COLORS = new int[] {1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, 11250603, 4408131, 14188952, 4312372, 14602026, 6719955, 12801229, 15435844, 15790320}; + + public ItemDye() + { + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setCreativeTab(CreativeTabs.MATERIALS); + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + int i = stack.getMetadata(); + return super.getUnlocalizedName() + "." + EnumDyeColor.byDyeDamage(i).getUnlocalizedName(); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(pos.offset(facing), facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + EnumDyeColor enumdyecolor = EnumDyeColor.byDyeDamage(itemstack.getMetadata()); + + if (enumdyecolor == EnumDyeColor.WHITE) + { + if (applyBonemeal(itemstack, worldIn, pos, player, hand)) + { + if (!worldIn.isRemote) + { + worldIn.playEvent(2005, pos, 0); + } + + return EnumActionResult.SUCCESS; + } + } + else if (enumdyecolor == EnumDyeColor.BROWN) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (block == Blocks.LOG && iblockstate.getValue(BlockOldLog.VARIANT) == BlockPlanks.EnumType.JUNGLE) + { + if (facing == EnumFacing.DOWN || facing == EnumFacing.UP) + { + return EnumActionResult.FAIL; + } + + pos = pos.offset(facing); + + if (worldIn.isAirBlock(pos)) + { + IBlockState iblockstate1 = Blocks.COCOA.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, 0, player, hand); + worldIn.setBlockState(pos, iblockstate1, 10); + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + } + + return EnumActionResult.FAIL; + } + + return EnumActionResult.PASS; + } + } + + public static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target) + { + if (worldIn instanceof net.minecraft.world.WorldServer) + return applyBonemeal(stack, worldIn, target, net.minecraftforge.common.util.FakePlayerFactory.getMinecraft((net.minecraft.world.WorldServer)worldIn), null); + return false; + } + + public static boolean applyBonemeal(ItemStack stack, World worldIn, BlockPos target, EntityPlayer player, @javax.annotation.Nullable EnumHand hand) + { + IBlockState iblockstate = worldIn.getBlockState(target); + + int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, worldIn, target, iblockstate, stack, hand); + if (hook != 0) return hook > 0; + + if (iblockstate.getBlock() instanceof IGrowable) + { + IGrowable igrowable = (IGrowable)iblockstate.getBlock(); + + if (igrowable.canGrow(worldIn, target, iblockstate, worldIn.isRemote)) + { + if (!worldIn.isRemote) + { + if (igrowable.canUseBonemeal(worldIn, worldIn.rand, target, iblockstate)) + { + igrowable.grow(worldIn, worldIn.rand, target, iblockstate); + } + + stack.shrink(1); + } + + return true; + } + } + + return false; + } + + @SideOnly(Side.CLIENT) + public static void spawnBonemealParticles(World worldIn, BlockPos pos, int amount) + { + if (amount == 0) + { + amount = 15; + } + + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getMaterial() != Material.AIR) + { + for (int i = 0; i < amount; ++i) + { + double d0 = itemRand.nextGaussian() * 0.02D; + double d1 = itemRand.nextGaussian() * 0.02D; + double d2 = itemRand.nextGaussian() * 0.02D; + worldIn.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, (double)((float)pos.getX() + itemRand.nextFloat()), (double)pos.getY() + (double)itemRand.nextFloat() * iblockstate.getBoundingBox(worldIn, pos).maxY, (double)((float)pos.getZ() + itemRand.nextFloat()), d0, d1, d2); + } + } + else + { + for (int i1 = 0; i1 < amount; ++i1) + { + double d0 = itemRand.nextGaussian() * 0.02D; + double d1 = itemRand.nextGaussian() * 0.02D; + double d2 = itemRand.nextGaussian() * 0.02D; + worldIn.spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, (double)((float)pos.getX() + itemRand.nextFloat()), (double)pos.getY() + (double)itemRand.nextFloat() * 1.0f, (double)((float)pos.getZ() + itemRand.nextFloat()), d0, d1, d2, new int[0]); + } + } + } + + /** + * Returns true if the item can be used on the given entity, e.g. shears on sheep. + */ + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target, EnumHand hand) + { + if (target instanceof EntitySheep) + { + EntitySheep entitysheep = (EntitySheep)target; + EnumDyeColor enumdyecolor = EnumDyeColor.byDyeDamage(stack.getMetadata()); + + if (!entitysheep.getSheared() && entitysheep.getFleeceColor() != enumdyecolor) + { + entitysheep.setFleeceColor(enumdyecolor); + stack.shrink(1); + } + + return true; + } + else + { + return false; + } + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (int i = 0; i < 16; ++i) + { + items.add(new ItemStack(this, 1, i)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemEgg.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEgg.java new file mode 100644 index 0000000..62ea939 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEgg.java @@ -0,0 +1,46 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +public class ItemEgg extends Item +{ + public ItemEgg() + { + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.MATERIALS); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { + EntityEgg entityegg = new EntityEgg(worldIn, playerIn); + entityegg.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + worldIn.spawnEntity(entityegg); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemElytra.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemElytra.java new file mode 100644 index 0000000..6104314 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemElytra.java @@ -0,0 +1,73 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.block.BlockDispenser; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemElytra extends Item +{ + public ItemElytra() + { + this.maxStackSize = 1; + this.setMaxDamage(432); + this.setCreativeTab(CreativeTabs.TRANSPORTATION); + this.addPropertyOverride(new ResourceLocation("broken"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return ItemElytra.isUsable(stack) ? 0.0F : 1.0F; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, ItemArmor.DISPENSER_BEHAVIOR); + } + + public static boolean isUsable(ItemStack stack) + { + return stack.getItemDamage() < stack.getMaxDamage() - 1; + } + + /** + * Return whether this item is repairable in an anvil. + * + * @param toRepair the {@code ItemStack} being repaired + * @param repair the {@code ItemStack} being used to perform the repair + */ + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == Items.LEATHER; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(itemstack); + ItemStack itemstack1 = playerIn.getItemStackFromSlot(entityequipmentslot); + + if (itemstack1.isEmpty()) + { + playerIn.setItemStackToSlot(entityequipmentslot, itemstack.copy()); + itemstack.setCount(0); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + else + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemEmptyMap.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEmptyMap.java new file mode 100644 index 0000000..6e0841a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEmptyMap.java @@ -0,0 +1,42 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +public class ItemEmptyMap extends ItemMapBase +{ + protected ItemEmptyMap() + { + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = ItemMap.setupNewMap(worldIn, playerIn.posX, playerIn.posZ, (byte)0, true, false); + ItemStack itemstack1 = playerIn.getHeldItem(handIn); + itemstack1.shrink(1); + + if (itemstack1.isEmpty()) + { + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + else + { + if (!playerIn.inventory.addItemStackToInventory(itemstack.copy())) + { + playerIn.dropItem(itemstack, false); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack1); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnchantedBook.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnchantedBook.java new file mode 100644 index 0000000..dfe5fe7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnchantedBook.java @@ -0,0 +1,156 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentData; +import net.minecraft.init.Items; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemEnchantedBook extends Item +{ + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return true; + } + + /** + * Checks isDamagable and if it cannot be stacked + */ + public boolean isEnchantable(ItemStack stack) + { + return false; + } + + /** + * Return an item rarity from EnumRarity + */ + public EnumRarity getRarity(ItemStack stack) + { + return getEnchantments(stack).hasNoTags() ? super.getRarity(stack) : EnumRarity.UNCOMMON; + } + + public static NBTTagList getEnchantments(ItemStack p_92110_0_) + { + NBTTagCompound nbttagcompound = p_92110_0_.getTagCompound(); + return nbttagcompound != null ? nbttagcompound.getTagList("StoredEnchantments", 10) : new NBTTagList(); + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + super.addInformation(stack, worldIn, tooltip, flagIn); + NBTTagList nbttaglist = getEnchantments(stack); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + int j = nbttagcompound.getShort("id"); + Enchantment enchantment = Enchantment.getEnchantmentByID(j); + + if (enchantment != null) + { + tooltip.add(enchantment.getTranslatedName(nbttagcompound.getShort("lvl"))); + } + } + } + + /** + * Adds an stored enchantment to an enchanted book ItemStack + */ + public static void addEnchantment(ItemStack p_92115_0_, EnchantmentData stack) + { + NBTTagList nbttaglist = getEnchantments(p_92115_0_); + boolean flag = true; + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + + if (Enchantment.getEnchantmentByID(nbttagcompound.getShort("id")) == stack.enchantment) + { + if (nbttagcompound.getShort("lvl") < stack.enchantmentLevel) + { + nbttagcompound.setShort("lvl", (short)stack.enchantmentLevel); + } + + flag = false; + break; + } + } + + if (flag) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setShort("id", (short)Enchantment.getEnchantmentID(stack.enchantment)); + nbttagcompound1.setShort("lvl", (short)stack.enchantmentLevel); + nbttaglist.appendTag(nbttagcompound1); + } + + if (!p_92115_0_.hasTagCompound()) + { + p_92115_0_.setTagCompound(new NBTTagCompound()); + } + + p_92115_0_.getTagCompound().setTag("StoredEnchantments", nbttaglist); + } + + /** + * Returns the ItemStack of an enchanted version of this item. + */ + public static ItemStack getEnchantedItemStack(EnchantmentData p_92111_0_) + { + ItemStack itemstack = new ItemStack(Items.ENCHANTED_BOOK); + addEnchantment(itemstack, p_92111_0_); + return itemstack; + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (tab == CreativeTabs.SEARCH) + { + for (Enchantment enchantment : Enchantment.REGISTRY) + { + if (enchantment.type != null) + { + for (int i = enchantment.getMinLevel(); i <= enchantment.getMaxLevel(); ++i) + { + items.add(getEnchantedItemStack(new EnchantmentData(enchantment, i))); + } + } + } + } + else if (tab.getRelevantEnchantmentTypes().length != 0) + { + for (Enchantment enchantment1 : Enchantment.REGISTRY) + { + if (tab.hasRelevantEnchantmentType(enchantment1.type)) + { + items.add(getEnchantedItemStack(new EnchantmentData(enchantment1, enchantment1.getMaxLevel()))); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemEndCrystal.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEndCrystal.java new file mode 100644 index 0000000..eb12fdd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEndCrystal.java @@ -0,0 +1,106 @@ +package net.minecraft.item; + +import java.util.List; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.end.DragonFightManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemEndCrystal extends Item +{ + public ItemEndCrystal() + { + this.setUnlocalizedName("end_crystal"); + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() != Blocks.OBSIDIAN && iblockstate.getBlock() != Blocks.BEDROCK) + { + return EnumActionResult.FAIL; + } + else + { + BlockPos blockpos = pos.up(); + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(blockpos, facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + BlockPos blockpos1 = blockpos.up(); + boolean flag = !worldIn.isAirBlock(blockpos) && !worldIn.getBlockState(blockpos).getBlock().isReplaceable(worldIn, blockpos); + flag = flag | (!worldIn.isAirBlock(blockpos1) && !worldIn.getBlockState(blockpos1).getBlock().isReplaceable(worldIn, blockpos1)); + + if (flag) + { + return EnumActionResult.FAIL; + } + else + { + double d0 = (double)blockpos.getX(); + double d1 = (double)blockpos.getY(); + double d2 = (double)blockpos.getZ(); + List list = worldIn.getEntitiesWithinAABBExcludingEntity((Entity)null, new AxisAlignedBB(d0, d1, d2, d0 + 1.0D, d1 + 2.0D, d2 + 1.0D)); + + if (!list.isEmpty()) + { + return EnumActionResult.FAIL; + } + else + { + if (!worldIn.isRemote) + { + EntityEnderCrystal entityendercrystal = new EntityEnderCrystal(worldIn, (double)((float)pos.getX() + 0.5F), (double)(pos.getY() + 1), (double)((float)pos.getZ() + 0.5F)); + entityendercrystal.setShowBottom(false); + worldIn.spawnEntity(entityendercrystal); + + if (worldIn.provider instanceof WorldProviderEnd) + { + DragonFightManager dragonfightmanager = ((WorldProviderEnd)worldIn.provider).getDragonFightManager(); + dragonfightmanager.respawnDragon(); + } + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + } + } + } + + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnderEye.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnderEye.java new file mode 100644 index 0000000..0b8f806 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnderEye.java @@ -0,0 +1,137 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.BlockEndPortalFrame; +import net.minecraft.block.state.IBlockState; +import net.minecraft.block.state.pattern.BlockPattern; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class ItemEnderEye extends Item +{ + public ItemEnderEye() + { + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(pos.offset(facing), facing, itemstack) && iblockstate.getBlock() == Blocks.END_PORTAL_FRAME && !((Boolean)iblockstate.getValue(BlockEndPortalFrame.EYE)).booleanValue()) + { + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else + { + worldIn.setBlockState(pos, iblockstate.withProperty(BlockEndPortalFrame.EYE, Boolean.valueOf(true)), 2); + worldIn.updateComparatorOutputLevel(pos, Blocks.END_PORTAL_FRAME); + itemstack.shrink(1); + + for (int i = 0; i < 16; ++i) + { + double d0 = (double)((float)pos.getX() + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F); + double d1 = (double)((float)pos.getY() + 0.8125F); + double d2 = (double)((float)pos.getZ() + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F); + double d3 = 0.0D; + double d4 = 0.0D; + double d5 = 0.0D; + worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D); + } + + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.BLOCK_END_PORTAL_FRAME_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F); + BlockPattern.PatternHelper blockpattern$patternhelper = BlockEndPortalFrame.getOrCreatePortalShape().match(worldIn, pos); + + if (blockpattern$patternhelper != null) + { + BlockPos blockpos = blockpattern$patternhelper.getFrontTopLeft().add(-3, 0, -3); + + for (int j = 0; j < 3; ++j) + { + for (int k = 0; k < 3; ++k) + { + worldIn.setBlockState(blockpos.add(j, 0, k), Blocks.END_PORTAL.getDefaultState(), 2); + } + } + + worldIn.playBroadcastSound(1038, blockpos.add(1, 0, 1), 0); + } + + return EnumActionResult.SUCCESS; + } + } + else + { + return EnumActionResult.FAIL; + } + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + RayTraceResult raytraceresult = this.rayTrace(worldIn, playerIn, false); + + if (raytraceresult != null && raytraceresult.typeOfHit == RayTraceResult.Type.BLOCK && worldIn.getBlockState(raytraceresult.getBlockPos()).getBlock() == Blocks.END_PORTAL_FRAME) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + playerIn.setActiveHand(handIn); + + if (!worldIn.isRemote) + { + BlockPos blockpos = ((WorldServer)worldIn).getChunkProvider().getNearestStructurePos(worldIn, "Stronghold", new BlockPos(playerIn), false); + + if (blockpos != null) + { + EntityEnderEye entityendereye = new EntityEnderEye(worldIn, playerIn.posX, playerIn.posY + (double)(playerIn.height / 2.0F), playerIn.posZ); + entityendereye.moveTowards(blockpos); + worldIn.spawnEntity(entityendereye); + + if (playerIn instanceof EntityPlayerMP) + { + CriteriaTriggers.USED_ENDER_EYE.trigger((EntityPlayerMP)playerIn, blockpos); + } + + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_ENDEREYE_LAUNCH, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + worldIn.playEvent((EntityPlayer)null, 1003, new BlockPos(playerIn), 0); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } + + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnderPearl.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnderPearl.java new file mode 100644 index 0000000..cc03024 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemEnderPearl.java @@ -0,0 +1,47 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +public class ItemEnderPearl extends Item +{ + public ItemEnderPearl() + { + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_ENDERPEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + playerIn.getCooldownTracker().setCooldown(this, 20); + + if (!worldIn.isRemote) + { + EntityEnderPearl entityenderpearl = new EntityEnderPearl(worldIn, playerIn); + entityenderpearl.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + worldIn.spawnEntity(entityenderpearl); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemExpBottle.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemExpBottle.java new file mode 100644 index 0000000..15d8996 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemExpBottle.java @@ -0,0 +1,61 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemExpBottle extends Item +{ + public ItemExpBottle() + { + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return true; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_EXPERIENCE_BOTTLE_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { + EntityExpBottle entityexpbottle = new EntityExpBottle(worldIn, playerIn); + entityexpbottle.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, -20.0F, 0.7F, 1.0F); + worldIn.spawnEntity(entityexpbottle); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFireball.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFireball.java new file mode 100644 index 0000000..3e0cad7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFireball.java @@ -0,0 +1,57 @@ +package net.minecraft.item; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemFireball extends Item +{ + public ItemFireball() + { + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else + { + pos = pos.offset(facing); + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(pos, facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + if (worldIn.getBlockState(pos).getMaterial() == Material.AIR) + { + worldIn.playSound((EntityPlayer)null, pos, SoundEvents.ITEM_FIRECHARGE_USE, SoundCategory.BLOCKS, 1.0F, (itemRand.nextFloat() - itemRand.nextFloat()) * 0.2F + 1.0F); + worldIn.setBlockState(pos, Blocks.FIRE.getDefaultState()); + } + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFirework.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFirework.java new file mode 100644 index 0000000..3311bf2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFirework.java @@ -0,0 +1,109 @@ +package net.minecraft.item; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemFirework extends Item +{ + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (!worldIn.isRemote) + { + ItemStack itemstack = player.getHeldItem(hand); + EntityFireworkRocket entityfireworkrocket = new EntityFireworkRocket(worldIn, (double)((float)pos.getX() + hitX), (double)((float)pos.getY() + hitY), (double)((float)pos.getZ() + hitZ), itemstack); + worldIn.spawnEntity(entityfireworkrocket); + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + + return EnumActionResult.SUCCESS; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + if (playerIn.isElytraFlying()) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!worldIn.isRemote) + { + EntityFireworkRocket entityfireworkrocket = new EntityFireworkRocket(worldIn, itemstack, playerIn); + worldIn.spawnEntity(entityfireworkrocket); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + + return new ActionResult(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn)); + } + else + { + return new ActionResult(EnumActionResult.PASS, playerIn.getHeldItem(handIn)); + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + NBTTagCompound nbttagcompound = stack.getSubCompound("Fireworks"); + + if (nbttagcompound != null) + { + if (nbttagcompound.hasKey("Flight", 99)) + { + tooltip.add(I18n.translateToLocal("item.fireworks.flight") + " " + nbttagcompound.getByte("Flight")); + } + + NBTTagList nbttaglist = nbttagcompound.getTagList("Explosions", 10); + + if (!nbttaglist.hasNoTags()) + { + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + List list = Lists.newArrayList(); + ItemFireworkCharge.addExplosionInfo(nbttagcompound1, list); + + if (!list.isEmpty()) + { + for (int j = 1; j < list.size(); ++j) + { + list.set(j, " " + (String)list.get(j)); + } + + tooltip.addAll(list); + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFireworkCharge.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFireworkCharge.java new file mode 100644 index 0000000..acf26f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFireworkCharge.java @@ -0,0 +1,148 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemFireworkCharge extends Item +{ + @SideOnly(Side.CLIENT) + public static NBTBase getExplosionTag(ItemStack stack, String key) + { + if (stack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = stack.getTagCompound().getCompoundTag("Explosion"); + + if (nbttagcompound != null) + { + return nbttagcompound.getTag(key); + } + } + + return null; + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (stack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = stack.getTagCompound().getCompoundTag("Explosion"); + + if (nbttagcompound != null) + { + addExplosionInfo(nbttagcompound, tooltip); + } + } + } + + @SideOnly(Side.CLIENT) + public static void addExplosionInfo(NBTTagCompound nbt, List tooltip) + { + byte b0 = nbt.getByte("Type"); + + if (b0 >= 0 && b0 <= 4) + { + tooltip.add(I18n.translateToLocal("item.fireworksCharge.type." + b0).trim()); + } + else + { + tooltip.add(I18n.translateToLocal("item.fireworksCharge.type").trim()); + } + + int[] aint = nbt.getIntArray("Colors"); + + if (aint.length > 0) + { + boolean flag = true; + String s = ""; + + for (int i : aint) + { + if (!flag) + { + s = s + ", "; + } + + flag = false; + boolean flag1 = false; + + for (int j = 0; j < ItemDye.DYE_COLORS.length; ++j) + { + if (i == ItemDye.DYE_COLORS[j]) + { + flag1 = true; + s = s + I18n.translateToLocal("item.fireworksCharge." + EnumDyeColor.byDyeDamage(j).getUnlocalizedName()); + break; + } + } + + if (!flag1) + { + s = s + I18n.translateToLocal("item.fireworksCharge.customColor"); + } + } + + tooltip.add(s); + } + + int[] aint1 = nbt.getIntArray("FadeColors"); + + if (aint1.length > 0) + { + boolean flag2 = true; + String s1 = I18n.translateToLocal("item.fireworksCharge.fadeTo") + " "; + + for (int l : aint1) + { + if (!flag2) + { + s1 = s1 + ", "; + } + + flag2 = false; + boolean flag5 = false; + + for (int k = 0; k < 16; ++k) + { + if (l == ItemDye.DYE_COLORS[k]) + { + flag5 = true; + s1 = s1 + I18n.translateToLocal("item.fireworksCharge." + EnumDyeColor.byDyeDamage(k).getUnlocalizedName()); + break; + } + } + + if (!flag5) + { + s1 = s1 + I18n.translateToLocal("item.fireworksCharge.customColor"); + } + } + + tooltip.add(s1); + } + + boolean flag3 = nbt.getBoolean("Trail"); + + if (flag3) + { + tooltip.add(I18n.translateToLocal("item.fireworksCharge.trail")); + } + + boolean flag4 = nbt.getBoolean("Flicker"); + + if (flag4) + { + tooltip.add(I18n.translateToLocal("item.fireworksCharge.flicker")); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFishFood.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFishFood.java new file mode 100644 index 0000000..c81fbab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFishFood.java @@ -0,0 +1,211 @@ +package net.minecraft.item; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ItemFishFood extends ItemFood +{ + /** Indicates whether this fish is "cooked" or not. */ + private final boolean cooked; + + public ItemFishFood(boolean cooked) + { + super(0, 0.0F, false); + this.cooked = cooked; + } + + public int getHealAmount(ItemStack stack) + { + ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); + return this.cooked && itemfishfood$fishtype.canCook() ? itemfishfood$fishtype.getCookedHealAmount() : itemfishfood$fishtype.getUncookedHealAmount(); + } + + public float getSaturationModifier(ItemStack stack) + { + ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); + return this.cooked && itemfishfood$fishtype.canCook() ? itemfishfood$fishtype.getCookedSaturationModifier() : itemfishfood$fishtype.getUncookedSaturationModifier(); + } + + protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player) + { + ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); + + if (itemfishfood$fishtype == ItemFishFood.FishType.PUFFERFISH) + { + player.addPotionEffect(new PotionEffect(MobEffects.POISON, 1200, 3)); + player.addPotionEffect(new PotionEffect(MobEffects.HUNGER, 300, 2)); + player.addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 300, 1)); + } + + super.onFoodEaten(stack, worldIn, player); + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (ItemFishFood.FishType itemfishfood$fishtype : ItemFishFood.FishType.values()) + { + if (!this.cooked || itemfishfood$fishtype.canCook()) + { + items.add(new ItemStack(this, 1, itemfishfood$fishtype.getMetadata())); + } + } + } + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + ItemFishFood.FishType itemfishfood$fishtype = ItemFishFood.FishType.byItemStack(stack); + return this.getUnlocalizedName() + "." + itemfishfood$fishtype.getUnlocalizedName() + "." + (this.cooked && itemfishfood$fishtype.canCook() ? "cooked" : "raw"); + } + + public static enum FishType + { + COD(0, "cod", 2, 0.1F, 5, 0.6F), + SALMON(1, "salmon", 2, 0.1F, 6, 0.8F), + CLOWNFISH(2, "clownfish", 1, 0.1F), + PUFFERFISH(3, "pufferfish", 1, 0.1F); + + /** Maps an item damage value for an ItemStack to the corresponding FishType value. */ + private static final Map META_LOOKUP = Maps.newHashMap(); + /** The item damage value on an ItemStack that represents this fish type */ + private final int meta; + /** + * The value that this fish type uses to replace "XYZ" in: "fish.XYZ.raw" / "fish.XYZ.cooked" for the + * unlocalized name and "fish_XYZ_raw" / "fish_XYZ_cooked" for the icon string. + */ + private final String unlocalizedName; + /** The amount that eating the uncooked version of this fish should heal the player. */ + private final int uncookedHealAmount; + /** The saturation modifier to apply to the heal amount when the player eats the uncooked version of this fish. */ + private final float uncookedSaturationModifier; + /** The amount that eating the cooked version of this fish should heal the player. */ + private final int cookedHealAmount; + /** The saturation modifier to apply to the heal amount when the player eats the cooked version of this fish. */ + private final float cookedSaturationModifier; + /** Indicates whether this type of fish has "raw" and "cooked" variants */ + private final boolean cookable; + + private FishType(int meta, String unlocalizedName, int uncookedHeal, float uncookedSaturation, int cookedHeal, float cookedSaturation) + { + this.meta = meta; + this.unlocalizedName = unlocalizedName; + this.uncookedHealAmount = uncookedHeal; + this.uncookedSaturationModifier = uncookedSaturation; + this.cookedHealAmount = cookedHeal; + this.cookedSaturationModifier = cookedSaturation; + this.cookable = true; + } + + private FishType(int meta, String unlocalizedName, int uncookedHeal, float uncookedSaturation) + { + this.meta = meta; + this.unlocalizedName = unlocalizedName; + this.uncookedHealAmount = uncookedHeal; + this.uncookedSaturationModifier = uncookedSaturation; + this.cookedHealAmount = 0; + this.cookedSaturationModifier = 0.0F; + this.cookable = false; + } + + /** + * Gets the item damage value on an ItemStack that represents this fish type + */ + public int getMetadata() + { + return this.meta; + } + + /** + * Gets the value that this fish type uses to replace "XYZ" in: "fish.XYZ.raw" / "fish.XYZ.cooked" for the + * unlocalized name and "fish_XYZ_raw" / "fish_XYZ_cooked" for the icon string. + */ + public String getUnlocalizedName() + { + return this.unlocalizedName; + } + + /** + * Gets the amount that eating the uncooked version of this fish should heal the player. + */ + public int getUncookedHealAmount() + { + return this.uncookedHealAmount; + } + + /** + * Gets the saturation modifier to apply to the heal amount when the player eats the uncooked version of this + * fish. + */ + public float getUncookedSaturationModifier() + { + return this.uncookedSaturationModifier; + } + + /** + * Gets the amount that eating the cooked version of this fish should heal the player. + */ + public int getCookedHealAmount() + { + return this.cookedHealAmount; + } + + /** + * Gets the saturation modifier to apply to the heal amount when the player eats the cooked version of this + * fish. + */ + public float getCookedSaturationModifier() + { + return this.cookedSaturationModifier; + } + + /** + * Gets a value indicating whether this type of fish has "raw" and "cooked" variants. + */ + public boolean canCook() + { + return this.cookable; + } + + /** + * Gets the corresponding FishType value for the given item damage value of an ItemStack, defaulting to COD for + * unrecognized damage values. + */ + public static ItemFishFood.FishType byMetadata(int meta) + { + ItemFishFood.FishType itemfishfood$fishtype = META_LOOKUP.get(Integer.valueOf(meta)); + return itemfishfood$fishtype == null ? COD : itemfishfood$fishtype; + } + + /** + * Gets the FishType that corresponds to the given ItemStack, defaulting to COD if the given ItemStack does not + * actually contain a fish. + */ + public static ItemFishFood.FishType byItemStack(ItemStack stack) + { + return stack.getItem() instanceof ItemFishFood ? byMetadata(stack.getMetadata()) : COD; + } + + static + { + for (ItemFishFood.FishType itemfishfood$fishtype : values()) + { + META_LOOKUP.put(Integer.valueOf(itemfishfood$fishtype.getMetadata()), itemfishfood$fishtype); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFishingRod.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFishingRod.java new file mode 100644 index 0000000..3406e50 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFishingRod.java @@ -0,0 +1,123 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemFishingRod extends Item +{ + public ItemFishingRod() + { + this.setMaxDamage(64); + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.TOOLS); + this.addPropertyOverride(new ResourceLocation("cast"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + if (entityIn == null) + { + return 0.0F; + } + else + { + boolean flag = entityIn.getHeldItemMainhand() == stack; + boolean flag1 = entityIn.getHeldItemOffhand() == stack; + + if (entityIn.getHeldItemMainhand().getItem() instanceof ItemFishingRod) + { + flag1 = false; + } + + return (flag || flag1) && entityIn instanceof EntityPlayer && ((EntityPlayer)entityIn).fishEntity != null ? 1.0F : 0.0F; + } + } + }); + } + + /** + * Returns True is the item is renderer in full 3D when hold. + */ + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return true; + } + + /** + * Returns true if this item should be rotated by 180 degrees around the Y axis when being held in an entities + * hands. + */ + @SideOnly(Side.CLIENT) + public boolean shouldRotateAroundWhenRendering() + { + return true; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (playerIn.fishEntity != null) + { + int i = playerIn.fishEntity.handleHookRetraction(); + itemstack.damageItem(i, playerIn); + playerIn.swingArm(handIn); + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_BOBBER_RETRIEVE, SoundCategory.NEUTRAL, 1.0F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + } + else + { + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_BOBBER_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { + EntityFishHook entityfishhook = new EntityFishHook(worldIn, playerIn); + int j = EnchantmentHelper.getFishingSpeedBonus(itemstack); + + if (j > 0) + { + entityfishhook.setLureSpeed(j); + } + + int k = EnchantmentHelper.getFishingLuckBonus(itemstack); + + if (k > 0) + { + entityfishhook.setLuck(k); + } + + worldIn.spawnEntity(entityfishhook); + } + + playerIn.swingArm(handIn); + playerIn.addStat(StatList.getObjectUseStats(this)); + } + + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFlintAndSteel.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFlintAndSteel.java new file mode 100644 index 0000000..203e6fa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFlintAndSteel.java @@ -0,0 +1,55 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemFlintAndSteel extends Item +{ + public ItemFlintAndSteel() + { + this.maxStackSize = 1; + this.setMaxDamage(64); + this.setCreativeTab(CreativeTabs.TOOLS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + pos = pos.offset(facing); + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(pos, facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + if (worldIn.isAirBlock(pos)) + { + worldIn.playSound(player, pos, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 1.0F, itemRand.nextFloat() * 0.4F + 0.8F); + worldIn.setBlockState(pos, Blocks.FIRE.getDefaultState(), 11); + } + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + + itemstack.damageItem(1, player); + return EnumActionResult.SUCCESS; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemFood.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFood.java new file mode 100644 index 0000000..a3f3ffc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemFood.java @@ -0,0 +1,146 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; +import net.minecraft.potion.PotionEffect; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +public class ItemFood extends Item +{ + /** Number of ticks to run while 'EnumAction'ing until result. */ + public final int itemUseDuration; + /** The amount this food item heals the player. */ + private final int healAmount; + private final float saturationModifier; + /** Whether wolves like this food (true for raw and cooked porkchop). */ + private final boolean isWolfsFavoriteMeat; + /** If this field is true, the food can be consumed even if the player don't need to eat. */ + private boolean alwaysEdible; + /** represents the potion effect that will occurr upon eating this food. Set by setPotionEffect */ + private PotionEffect potionId; + /** probably of the set potion effect occurring */ + private float potionEffectProbability; + + public ItemFood(int amount, float saturation, boolean isWolfFood) + { + this.itemUseDuration = 32; + this.healAmount = amount; + this.isWolfsFavoriteMeat = isWolfFood; + this.saturationModifier = saturation; + this.setCreativeTab(CreativeTabs.FOOD); + } + + public ItemFood(int amount, boolean isWolfFood) + { + this(amount, 0.6F, isWolfFood); + } + + /** + * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using + * the Item before the action is complete. + */ + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + if (entityLiving instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)entityLiving; + entityplayer.getFoodStats().addStats(this, stack); + worldIn.playSound((EntityPlayer)null, entityplayer.posX, entityplayer.posY, entityplayer.posZ, SoundEvents.ENTITY_PLAYER_BURP, SoundCategory.PLAYERS, 0.5F, worldIn.rand.nextFloat() * 0.1F + 0.9F); + this.onFoodEaten(stack, worldIn, entityplayer); + entityplayer.addStat(StatList.getObjectUseStats(this)); + + if (entityplayer instanceof EntityPlayerMP) + { + CriteriaTriggers.CONSUME_ITEM.trigger((EntityPlayerMP)entityplayer, stack); + } + } + + stack.shrink(1); + return stack; + } + + protected void onFoodEaten(ItemStack stack, World worldIn, EntityPlayer player) + { + if (!worldIn.isRemote && this.potionId != null && worldIn.rand.nextFloat() < this.potionEffectProbability) + { + player.addPotionEffect(new PotionEffect(this.potionId)); + } + } + + /** + * How long it takes to use or consume an item + */ + public int getMaxItemUseDuration(ItemStack stack) + { + return 32; + } + + /** + * returns the action that specifies what animation to play when the items is being used + */ + public EnumAction getItemUseAction(ItemStack stack) + { + return EnumAction.EAT; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (playerIn.canEat(this.alwaysEdible)) + { + playerIn.setActiveHand(handIn); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + else + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } + + public int getHealAmount(ItemStack stack) + { + return this.healAmount; + } + + public float getSaturationModifier(ItemStack stack) + { + return this.saturationModifier; + } + + /** + * Whether wolves like this food (true for raw and cooked porkchop). + */ + public boolean isWolfsFavoriteMeat() + { + return this.isWolfsFavoriteMeat; + } + + public ItemFood setPotionEffect(PotionEffect effect, float probability) + { + this.potionId = effect; + this.potionEffectProbability = probability; + return this; + } + + /** + * Set the field 'alwaysEdible' to true, and make the food edible even if the player don't need to eat. + */ + public ItemFood setAlwaysEdible() + { + this.alwaysEdible = true; + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemGlassBottle.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemGlassBottle.java new file mode 100644 index 0000000..c8830d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemGlassBottle.java @@ -0,0 +1,102 @@ +package net.minecraft.item; + +import com.google.common.base.Predicate; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityAreaEffectCloud; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.init.SoundEvents; +import net.minecraft.potion.PotionUtils; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class ItemGlassBottle extends Item +{ + public ItemGlassBottle() + { + this.setCreativeTab(CreativeTabs.BREWING); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + List list = worldIn.getEntitiesWithinAABB(EntityAreaEffectCloud.class, playerIn.getEntityBoundingBox().grow(2.0D), new Predicate() + { + public boolean apply(@Nullable EntityAreaEffectCloud p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.isEntityAlive() && p_apply_1_.getOwner() instanceof EntityDragon; + } + }); + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!list.isEmpty()) + { + EntityAreaEffectCloud entityareaeffectcloud = list.get(0); + entityareaeffectcloud.setRadius(entityareaeffectcloud.getRadius() - 0.5F); + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ITEM_BOTTLE_FILL_DRAGONBREATH, SoundCategory.NEUTRAL, 1.0F, 1.0F); + return new ActionResult(EnumActionResult.SUCCESS, this.turnBottleIntoItem(itemstack, playerIn, new ItemStack(Items.DRAGON_BREATH))); + } + else + { + RayTraceResult raytraceresult = this.rayTrace(worldIn, playerIn, true); + + if (raytraceresult == null) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + if (raytraceresult.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = raytraceresult.getBlockPos(); + + if (!worldIn.isBlockModifiable(playerIn, blockpos) || !playerIn.canPlayerEdit(blockpos.offset(raytraceresult.sideHit), raytraceresult.sideHit, itemstack)) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + + if (worldIn.getBlockState(blockpos).getMaterial() == Material.WATER) + { + worldIn.playSound(playerIn, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.NEUTRAL, 1.0F, 1.0F); + return new ActionResult(EnumActionResult.SUCCESS, this.turnBottleIntoItem(itemstack, playerIn, PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER))); + } + } + + return new ActionResult(EnumActionResult.PASS, itemstack); + } + } + } + + protected ItemStack turnBottleIntoItem(ItemStack p_185061_1_, EntityPlayer player, ItemStack stack) + { + p_185061_1_.shrink(1); + player.addStat(StatList.getObjectUseStats(this)); + + if (p_185061_1_.isEmpty()) + { + return stack; + } + else + { + if (!player.inventory.addItemStackToInventory(stack)) + { + player.dropItem(stack, false); + } + + return p_185061_1_; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemHangingEntity.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemHangingEntity.java new file mode 100644 index 0000000..f5dfa80 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemHangingEntity.java @@ -0,0 +1,68 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemHangingEntity extends Item +{ + private final Class hangingEntityClass; + + public ItemHangingEntity(Class entityClass) + { + this.hangingEntityClass = entityClass; + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + BlockPos blockpos = pos.offset(facing); + + if (facing != EnumFacing.DOWN && facing != EnumFacing.UP && player.canPlayerEdit(blockpos, facing, itemstack)) + { + EntityHanging entityhanging = this.createEntity(worldIn, blockpos, facing); + + if (entityhanging != null && entityhanging.onValidSurface()) + { + if (!worldIn.isRemote) + { + entityhanging.playPlaceSound(); + worldIn.spawnEntity(entityhanging); + } + + itemstack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + + @Nullable + private EntityHanging createEntity(World worldIn, BlockPos pos, EnumFacing clickedSide) + { + if (this.hangingEntityClass == EntityPainting.class) + { + return new EntityPainting(worldIn, pos, clickedSide); + } + else + { + return this.hangingEntityClass == EntityItemFrame.class ? new EntityItemFrame(worldIn, pos, clickedSide) : null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemHoe.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemHoe.java new file mode 100644 index 0000000..ee31cbe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemHoe.java @@ -0,0 +1,139 @@ +package net.minecraft.item; + +import com.google.common.collect.Multimap; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemHoe extends Item +{ + private final float speed; + protected Item.ToolMaterial toolMaterial; + + public ItemHoe(Item.ToolMaterial material) + { + this.toolMaterial = material; + this.maxStackSize = 1; + this.setMaxDamage(material.getMaxUses()); + this.setCreativeTab(CreativeTabs.TOOLS); + this.speed = material.getAttackDamage() + 1.0F; + } + + /** + * Called when a Block is right-clicked with this Item + */ + @SuppressWarnings("incomplete-switch") + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(pos.offset(facing), facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + int hook = net.minecraftforge.event.ForgeEventFactory.onHoeUse(itemstack, player, worldIn, pos); + if (hook != 0) return hook > 0 ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; + + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (facing != EnumFacing.DOWN && worldIn.isAirBlock(pos.up())) + { + if (block == Blocks.GRASS || block == Blocks.GRASS_PATH) + { + this.setBlock(itemstack, player, worldIn, pos, Blocks.FARMLAND.getDefaultState()); + return EnumActionResult.SUCCESS; + } + + if (block == Blocks.DIRT) + { + switch ((BlockDirt.DirtType)iblockstate.getValue(BlockDirt.VARIANT)) + { + case DIRT: + this.setBlock(itemstack, player, worldIn, pos, Blocks.FARMLAND.getDefaultState()); + return EnumActionResult.SUCCESS; + case COARSE_DIRT: + this.setBlock(itemstack, player, worldIn, pos, Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT)); + return EnumActionResult.SUCCESS; + } + } + } + + return EnumActionResult.PASS; + } + } + + /** + * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise + * the damage on the stack. + */ + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) + { + stack.damageItem(1, attacker); + return true; + } + + protected void setBlock(ItemStack stack, EntityPlayer player, World worldIn, BlockPos pos, IBlockState state) + { + worldIn.playSound(player, pos, SoundEvents.ITEM_HOE_TILL, SoundCategory.BLOCKS, 1.0F, 1.0F); + + if (!worldIn.isRemote) + { + worldIn.setBlockState(pos, state, 11); + stack.damageItem(1, player); + } + } + + /** + * Returns True is the item is renderer in full 3D when hold. + */ + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return true; + } + + /** + * Returns the name of the material this tool is made from as it is declared in EnumToolMaterial (meaning diamond + * would return "EMERALD") + */ + public String getMaterialName() + { + return this.toolMaterial.toString(); + } + + /** + * Gets a map of item attribute modifiers, used by ItemSword to increase hit damage. + */ + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); + + if (equipmentSlot == EntityEquipmentSlot.MAINHAND) + { + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", 0.0D, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", (double)(this.speed - 4.0F), 0)); + } + + return multimap; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemKnowledgeBook.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemKnowledgeBook.java new file mode 100644 index 0000000..b654e0a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemKnowledgeBook.java @@ -0,0 +1,74 @@ +package net.minecraft.item; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ItemKnowledgeBook extends Item +{ + private static final Logger LOGGER = LogManager.getLogger(); + + public ItemKnowledgeBook() + { + this.setMaxStackSize(1); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + NBTTagCompound nbttagcompound = itemstack.getTagCompound(); + + if (!playerIn.capabilities.isCreativeMode) + { + playerIn.setHeldItem(handIn, ItemStack.EMPTY); + } + + if (nbttagcompound != null && nbttagcompound.hasKey("Recipes", 9)) + { + if (!worldIn.isRemote) + { + NBTTagList nbttaglist = nbttagcompound.getTagList("Recipes", 8); + List list = Lists.newArrayList(); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + String s = nbttaglist.getStringTagAt(i); + IRecipe irecipe = CraftingManager.getRecipe(new ResourceLocation(s)); + + if (irecipe == null) + { + LOGGER.error("Invalid recipe: " + s); + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + + list.add(irecipe); + } + + playerIn.unlockRecipes(list); + playerIn.addStat(StatList.getObjectUseStats(this)); + } + + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + else + { + LOGGER.error("Tag not valid: " + nbttagcompound); + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemLead.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLead.java new file mode 100644 index 0000000..e23f8be --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLead.java @@ -0,0 +1,70 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFence; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLeashKnot; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemLead extends Item +{ + public ItemLead() + { + this.setCreativeTab(CreativeTabs.TOOLS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + Block block = worldIn.getBlockState(pos).getBlock(); + + if (!(block instanceof BlockFence)) + { + return EnumActionResult.PASS; + } + else + { + if (!worldIn.isRemote) + { + attachToFence(player, worldIn, pos); + } + + return EnumActionResult.SUCCESS; + } + } + + public static boolean attachToFence(EntityPlayer player, World worldIn, BlockPos fence) + { + EntityLeashKnot entityleashknot = EntityLeashKnot.getKnotForPosition(worldIn, fence); + boolean flag = false; + double d0 = 7.0D; + int i = fence.getX(); + int j = fence.getY(); + int k = fence.getZ(); + + for (EntityLiving entityliving : worldIn.getEntitiesWithinAABB(EntityLiving.class, new AxisAlignedBB((double)i - 7.0D, (double)j - 7.0D, (double)k - 7.0D, (double)i + 7.0D, (double)j + 7.0D, (double)k + 7.0D))) + { + if (entityliving.getLeashed() && entityliving.getLeashHolder() == player) + { + if (entityleashknot == null) + { + entityleashknot = EntityLeashKnot.createKnot(worldIn, fence); + } + + entityliving.setLeashHolder(entityleashknot, true); + flag = true; + } + } + + return flag; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemLeaves.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLeaves.java new file mode 100644 index 0000000..4c7c533 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLeaves.java @@ -0,0 +1,34 @@ +package net.minecraft.item; + +import net.minecraft.block.BlockLeaves; + +public class ItemLeaves extends ItemBlock +{ + private final BlockLeaves leaves; + + public ItemLeaves(BlockLeaves block) + { + super(block); + this.leaves = block; + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage | 4; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName() + "." + this.leaves.getWoodType(stack.getMetadata()).getUnlocalizedName(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemLilyPad.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLilyPad.java new file mode 100644 index 0000000..68e39ed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLilyPad.java @@ -0,0 +1,86 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +public class ItemLilyPad extends ItemColored +{ + public ItemLilyPad(Block block) + { + super(block, false); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + RayTraceResult raytraceresult = this.rayTrace(worldIn, playerIn, true); + + if (raytraceresult == null) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + if (raytraceresult.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = raytraceresult.getBlockPos(); + + if (!worldIn.isBlockModifiable(playerIn, blockpos) || !playerIn.canPlayerEdit(blockpos.offset(raytraceresult.sideHit), raytraceresult.sideHit, itemstack)) + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + + BlockPos blockpos1 = blockpos.up(); + IBlockState iblockstate = worldIn.getBlockState(blockpos); + + if (iblockstate.getMaterial() == Material.WATER && ((Integer)iblockstate.getValue(BlockLiquid.LEVEL)).intValue() == 0 && worldIn.isAirBlock(blockpos1)) + { + // special case for handling block placement with water lilies + net.minecraftforge.common.util.BlockSnapshot blocksnapshot = net.minecraftforge.common.util.BlockSnapshot.getBlockSnapshot(worldIn, blockpos1); + worldIn.setBlockState(blockpos1, Blocks.WATERLILY.getDefaultState()); + if (net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(playerIn, blocksnapshot, net.minecraft.util.EnumFacing.UP, handIn).isCanceled()) + { + blocksnapshot.restore(true, false); + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + + worldIn.setBlockState(blockpos1, Blocks.WATERLILY.getDefaultState(), 11); + + if (playerIn instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)playerIn, blockpos1, itemstack); + } + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + worldIn.playSound(playerIn, blockpos, SoundEvents.BLOCK_WATERLILY_PLACE, SoundCategory.BLOCKS, 1.0F, 1.0F); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } + + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemLingeringPotion.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLingeringPotion.java new file mode 100644 index 0000000..9d3215b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemLingeringPotion.java @@ -0,0 +1,55 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.init.SoundEvents; +import net.minecraft.potion.PotionUtils; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemLingeringPotion extends ItemPotion +{ + public String getItemStackDisplayName(ItemStack stack) + { + return I18n.translateToLocal(PotionUtils.getPotionFromItem(stack).getNamePrefixed("lingering_potion.effect.")); + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + PotionUtils.addPotionTooltip(stack, tooltip, 0.25F); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + ItemStack itemstack1 = playerIn.capabilities.isCreativeMode ? itemstack.copy() : itemstack.splitStack(1); + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_LINGERINGPOTION_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { + EntityPotion entitypotion = new EntityPotion(worldIn, playerIn, itemstack1); + entitypotion.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, -20.0F, 0.5F, 1.0F); + worldIn.spawnEntity(entitypotion); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemMap.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMap.java new file mode 100644 index 0000000..1623040 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMap.java @@ -0,0 +1,507 @@ +package net.minecraft.item; + +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Iterables; +import com.google.common.collect.Multiset; +import com.google.common.collect.Multisets; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.BlockDirt; +import net.minecraft.block.BlockStone; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemMap extends ItemMapBase +{ + protected ItemMap() + { + this.setHasSubtypes(true); + } + + public static ItemStack setupNewMap(World worldIn, double worldX, double worldZ, byte scale, boolean trackingPosition, boolean unlimitedTracking) + { + ItemStack itemstack = new ItemStack(Items.FILLED_MAP, 1, worldIn.getUniqueDataId("map")); + String s = "map_" + itemstack.getMetadata(); + MapData mapdata = new MapData(s); + worldIn.setData(s, mapdata); + mapdata.scale = scale; + mapdata.calculateMapCenter(worldX, worldZ, mapdata.scale); + mapdata.dimension = worldIn.provider.getDimension(); + mapdata.trackingPosition = trackingPosition; + mapdata.unlimitedTracking = unlimitedTracking; + mapdata.markDirty(); + return itemstack; + } + + @Nullable + @SideOnly(Side.CLIENT) + public static MapData loadMapData(int mapId, World worldIn) + { + String s = "map_" + mapId; + return (MapData)worldIn.loadData(MapData.class, s); + } + + @Nullable + public MapData getMapData(ItemStack stack, World worldIn) + { + String s = "map_" + stack.getMetadata(); + MapData mapdata = (MapData)worldIn.loadData(MapData.class, s); + + if (mapdata == null && !worldIn.isRemote) + { + stack.setItemDamage(worldIn.getUniqueDataId("map")); + s = "map_" + stack.getMetadata(); + mapdata = new MapData(s); + mapdata.scale = 3; + mapdata.calculateMapCenter((double)worldIn.getWorldInfo().getSpawnX(), (double)worldIn.getWorldInfo().getSpawnZ(), mapdata.scale); + mapdata.dimension = worldIn.provider.getDimension(); + mapdata.markDirty(); + worldIn.setData(s, mapdata); + } + + return mapdata; + } + + public void updateMapData(World worldIn, Entity viewer, MapData data) + { + if (worldIn.provider.getDimension() == data.dimension && viewer instanceof EntityPlayer) + { + int i = 1 << data.scale; + int j = data.xCenter; + int k = data.zCenter; + int l = MathHelper.floor(viewer.posX - (double)j) / i + 64; + int i1 = MathHelper.floor(viewer.posZ - (double)k) / i + 64; + int j1 = 128 / i; + + if (worldIn.provider.isNether()) + { + j1 /= 2; + } + + MapData.MapInfo mapdata$mapinfo = data.getMapInfo((EntityPlayer)viewer); + ++mapdata$mapinfo.step; + boolean flag = false; + + for (int k1 = l - j1 + 1; k1 < l + j1; ++k1) + { + if ((k1 & 15) == (mapdata$mapinfo.step & 15) || flag) + { + flag = false; + double d0 = 0.0D; + + for (int l1 = i1 - j1 - 1; l1 < i1 + j1; ++l1) + { + if (k1 >= 0 && l1 >= -1 && k1 < 128 && l1 < 128) + { + int i2 = k1 - l; + int j2 = l1 - i1; + boolean flag1 = i2 * i2 + j2 * j2 > (j1 - 2) * (j1 - 2); + int k2 = (j / i + k1 - 64) * i; + int l2 = (k / i + l1 - 64) * i; + Multiset multiset = HashMultiset.create(); + Chunk chunk = worldIn.getChunkFromBlockCoords(new BlockPos(k2, 0, l2)); + + if (!chunk.isEmpty()) + { + int i3 = k2 & 15; + int j3 = l2 & 15; + int k3 = 0; + double d1 = 0.0D; + + if (worldIn.provider.isNether()) + { + int l3 = k2 + l2 * 231871; + l3 = l3 * l3 * 31287121 + l3 * 11; + + if ((l3 >> 20 & 1) == 0) + { + multiset.add(Blocks.DIRT.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT).getMapColor(worldIn, BlockPos.ORIGIN), 10); + } + else + { + multiset.add(Blocks.STONE.getDefaultState().withProperty(BlockStone.VARIANT, BlockStone.EnumType.STONE).getMapColor(worldIn, BlockPos.ORIGIN), 100); + } + + d1 = 100.0D; + } + else + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int i4 = 0; i4 < i; ++i4) + { + for (int j4 = 0; j4 < i; ++j4) + { + int k4 = chunk.getHeightValue(i4 + i3, j4 + j3) + 1; + IBlockState iblockstate = Blocks.AIR.getDefaultState(); + + if (k4 <= 1) + { + iblockstate = Blocks.BEDROCK.getDefaultState(); + } + else + { + label175: + { + while (true) + { + --k4; + iblockstate = chunk.getBlockState(i4 + i3, k4, j4 + j3); + blockpos$mutableblockpos.setPos((chunk.x << 4) + i4 + i3, k4, (chunk.z << 4) + j4 + j3); + + if (iblockstate.getMapColor(worldIn, blockpos$mutableblockpos) != MapColor.AIR || k4 <= 0) + { + break; + } + } + + if (k4 > 0 && iblockstate.getMaterial().isLiquid()) + { + int l4 = k4 - 1; + + while (true) + { + IBlockState iblockstate1 = chunk.getBlockState(i4 + i3, l4--, j4 + j3); + ++k3; + + if (l4 <= 0 || !iblockstate1.getMaterial().isLiquid()) + { + break label175; + } + } + } + } + } + + d1 += (double)k4 / (double)(i * i); + multiset.add(iblockstate.getMapColor(worldIn, blockpos$mutableblockpos)); + } + } + } + + k3 = k3 / (i * i); + double d2 = (d1 - d0) * 4.0D / (double)(i + 4) + ((double)(k1 + l1 & 1) - 0.5D) * 0.4D; + int i5 = 1; + + if (d2 > 0.6D) + { + i5 = 2; + } + + if (d2 < -0.6D) + { + i5 = 0; + } + + MapColor mapcolor = (MapColor)Iterables.getFirst(Multisets.copyHighestCountFirst(multiset), MapColor.AIR); + + if (mapcolor == MapColor.WATER) + { + d2 = (double)k3 * 0.1D + (double)(k1 + l1 & 1) * 0.2D; + i5 = 1; + + if (d2 < 0.5D) + { + i5 = 2; + } + + if (d2 > 0.9D) + { + i5 = 0; + } + } + + d0 = d1; + + if (l1 >= 0 && i2 * i2 + j2 * j2 < j1 * j1 && (!flag1 || (k1 + l1 & 1) != 0)) + { + byte b0 = data.colors[k1 + l1 * 128]; + byte b1 = (byte)(mapcolor.colorIndex * 4 + i5); + + if (b0 != b1) + { + data.colors[k1 + l1 * 128] = b1; + data.updateMapData(k1, l1); + flag = true; + } + } + } + } + } + } + } + } + } + + /** + * Draws ambiguous landmasses representing unexplored terrain onto a treasure map + */ + public static void renderBiomePreviewMap(World worldIn, ItemStack map) + { + if (map.getItem() instanceof ItemMap) + { + MapData mapdata = ((ItemMap) map.getItem()).getMapData(map, worldIn); + + if (mapdata != null) + { + if (worldIn.provider.getDimension() == mapdata.dimension) + { + int i = 1 << mapdata.scale; + int j = mapdata.xCenter; + int k = mapdata.zCenter; + Biome[] abiome = worldIn.getBiomeProvider().getBiomes((Biome[])null, (j / i - 64) * i, (k / i - 64) * i, 128 * i, 128 * i, false); + + for (int l = 0; l < 128; ++l) + { + for (int i1 = 0; i1 < 128; ++i1) + { + int j1 = l * i; + int k1 = i1 * i; + Biome biome = abiome[j1 + k1 * 128 * i]; + MapColor mapcolor = MapColor.AIR; + int l1 = 3; + int i2 = 8; + + if (l > 0 && i1 > 0 && l < 127 && i1 < 127) + { + if (abiome[(l - 1) * i + (i1 - 1) * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[(l - 1) * i + (i1 + 1) * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[(l - 1) * i + i1 * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[(l + 1) * i + (i1 - 1) * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[(l + 1) * i + (i1 + 1) * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[(l + 1) * i + i1 * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[l * i + (i1 - 1) * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (abiome[l * i + (i1 + 1) * i * 128 * i].getBaseHeight() >= 0.0F) + { + --i2; + } + + if (biome.getBaseHeight() < 0.0F) + { + mapcolor = MapColor.ADOBE; + + if (i2 > 7 && i1 % 2 == 0) + { + l1 = (l + (int)(MathHelper.sin((float)i1 + 0.0F) * 7.0F)) / 8 % 5; + + if (l1 == 3) + { + l1 = 1; + } + else if (l1 == 4) + { + l1 = 0; + } + } + else if (i2 > 7) + { + mapcolor = MapColor.AIR; + } + else if (i2 > 5) + { + l1 = 1; + } + else if (i2 > 3) + { + l1 = 0; + } + else if (i2 > 1) + { + l1 = 0; + } + } + else if (i2 > 0) + { + mapcolor = MapColor.BROWN; + + if (i2 > 3) + { + l1 = 1; + } + else + { + l1 = 3; + } + } + } + + if (mapcolor != MapColor.AIR) + { + mapdata.colors[l + i1 * 128] = (byte)(mapcolor.colorIndex * 4 + l1); + mapdata.updateMapData(l, i1); + } + } + } + } + } + } + } + + /** + * Called each tick as long the item is on a player inventory. Uses by maps to check if is on a player hand and + * update it's contents. + */ + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) + { + if (!worldIn.isRemote) + { + MapData mapdata = this.getMapData(stack, worldIn); + + if (entityIn instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)entityIn; + mapdata.updateVisiblePlayers(entityplayer, stack); + } + + if (isSelected || entityIn instanceof EntityPlayer && ((EntityPlayer)entityIn).getHeldItemOffhand() == stack) + { + this.updateMapData(worldIn, entityIn, mapdata); + } + } + } + + @Nullable + public Packet createMapDataPacket(ItemStack stack, World worldIn, EntityPlayer player) + { + return this.getMapData(stack, worldIn).getMapPacket(stack, worldIn, player); + } + + /** + * Called when item is crafted/smelted. Used only by maps so far. + */ + public void onCreated(ItemStack stack, World worldIn, EntityPlayer playerIn) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound != null) + { + if (nbttagcompound.hasKey("map_scale_direction", 99)) + { + scaleMap(stack, worldIn, nbttagcompound.getInteger("map_scale_direction")); + nbttagcompound.removeTag("map_scale_direction"); + } + else if (nbttagcompound.getBoolean("map_tracking_position")) + { + enableMapTracking(stack, worldIn); + nbttagcompound.removeTag("map_tracking_position"); + } + } + } + + protected static void scaleMap(ItemStack p_185063_0_, World p_185063_1_, int p_185063_2_) + { + MapData mapdata = Items.FILLED_MAP.getMapData(p_185063_0_, p_185063_1_); + p_185063_0_.setItemDamage(p_185063_1_.getUniqueDataId("map")); + MapData mapdata1 = new MapData("map_" + p_185063_0_.getMetadata()); + + if (mapdata != null) + { + mapdata1.scale = (byte)MathHelper.clamp(mapdata.scale + p_185063_2_, 0, 4); + mapdata1.trackingPosition = mapdata.trackingPosition; + mapdata1.calculateMapCenter((double)mapdata.xCenter, (double)mapdata.zCenter, mapdata1.scale); + mapdata1.dimension = mapdata.dimension; + mapdata1.markDirty(); + p_185063_1_.setData("map_" + p_185063_0_.getMetadata(), mapdata1); + } + } + + protected static void enableMapTracking(ItemStack p_185064_0_, World p_185064_1_) + { + MapData mapdata = Items.FILLED_MAP.getMapData(p_185064_0_, p_185064_1_); + p_185064_0_.setItemDamage(p_185064_1_.getUniqueDataId("map")); + MapData mapdata1 = new MapData("map_" + p_185064_0_.getMetadata()); + mapdata1.trackingPosition = true; + + if (mapdata != null) + { + mapdata1.xCenter = mapdata.xCenter; + mapdata1.zCenter = mapdata.zCenter; + mapdata1.scale = mapdata.scale; + mapdata1.dimension = mapdata.dimension; + mapdata1.markDirty(); + p_185064_1_.setData("map_" + p_185064_0_.getMetadata(), mapdata1); + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (flagIn.isAdvanced()) + { + MapData mapdata = worldIn == null ? null : this.getMapData(stack, worldIn); + + if (mapdata != null) + { + tooltip.add(I18n.translateToLocalFormatted("filled_map.scale", 1 << mapdata.scale)); + tooltip.add(I18n.translateToLocalFormatted("filled_map.level", mapdata.scale, Integer.valueOf(4))); + } + else + { + tooltip.add(I18n.translateToLocal("filled_map.unknown")); + } + } + } + + @SideOnly(Side.CLIENT) + public static int getColor(ItemStack p_190907_0_) + { + NBTTagCompound nbttagcompound = p_190907_0_.getSubCompound("display"); + + if (nbttagcompound != null && nbttagcompound.hasKey("MapColor", 99)) + { + int i = nbttagcompound.getInteger("MapColor"); + return -16777216 | i & 16777215; + } + else + { + return -12173266; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemMapBase.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMapBase.java new file mode 100644 index 0000000..f5ea414 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMapBase.java @@ -0,0 +1,23 @@ +package net.minecraft.item; + +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.Packet; +import net.minecraft.world.World; + +public class ItemMapBase extends Item +{ + /** + * false for all Items except sub-classes of ItemMapBase + */ + public boolean isMap() + { + return true; + } + + @Nullable + public Packet createMapDataPacket(ItemStack stack, World worldIn, EntityPlayer player) + { + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemMinecart.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMinecart.java new file mode 100644 index 0000000..2bfdade --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMinecart.java @@ -0,0 +1,138 @@ +package net.minecraft.item; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemMinecart extends Item +{ + private static final IBehaviorDispenseItem MINECART_DISPENSER_BEHAVIOR = new BehaviorDefaultDispenseItem() + { + private final BehaviorDefaultDispenseItem behaviourDefaultDispenseItem = new BehaviorDefaultDispenseItem(); + /** + * Dispense the specified stack, play the dispense sound and spawn particles. + */ + public ItemStack dispenseStack(IBlockSource source, ItemStack stack) + { + EnumFacing enumfacing = (EnumFacing)source.getBlockState().getValue(BlockDispenser.FACING); + World world = source.getWorld(); + double d0 = source.getX() + (double)enumfacing.getFrontOffsetX() * 1.125D; + double d1 = Math.floor(source.getY()) + (double)enumfacing.getFrontOffsetY(); + double d2 = source.getZ() + (double)enumfacing.getFrontOffsetZ() * 1.125D; + BlockPos blockpos = source.getBlockPos().offset(enumfacing); + IBlockState iblockstate = world.getBlockState(blockpos); + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = iblockstate.getBlock() instanceof BlockRailBase ? ((BlockRailBase)iblockstate.getBlock()).getRailDirection(world, blockpos, iblockstate, null) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + double d3; + + if (BlockRailBase.isRailBlock(iblockstate)) + { + if (blockrailbase$enumraildirection.isAscending()) + { + d3 = 0.6D; + } + else + { + d3 = 0.1D; + } + } + else + { + if (iblockstate.getMaterial() != Material.AIR || !BlockRailBase.isRailBlock(world.getBlockState(blockpos.down()))) + { + return this.behaviourDefaultDispenseItem.dispense(source, stack); + } + + IBlockState iblockstate1 = world.getBlockState(blockpos.down()); + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection1 = iblockstate1.getBlock() instanceof BlockRailBase ? ((BlockRailBase)iblockstate1.getBlock()).getRailDirection(world, blockpos.down(), iblockstate1, null) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + + if (enumfacing != EnumFacing.DOWN && blockrailbase$enumraildirection1.isAscending()) + { + d3 = -0.4D; + } + else + { + d3 = -0.9D; + } + } + + EntityMinecart entityminecart = EntityMinecart.create(world, d0, d1 + d3, d2, ((ItemMinecart)stack.getItem()).minecartType); + + if (stack.hasDisplayName()) + { + entityminecart.setCustomNameTag(stack.getDisplayName()); + } + + world.spawnEntity(entityminecart); + stack.shrink(1); + return stack; + } + /** + * Play the dispense sound from the specified block. + */ + protected void playDispenseSound(IBlockSource source) + { + source.getWorld().playEvent(1000, source.getBlockPos(), 0); + } + }; + private final EntityMinecart.Type minecartType; + + public ItemMinecart(EntityMinecart.Type typeIn) + { + this.maxStackSize = 1; + this.minecartType = typeIn; + this.setCreativeTab(CreativeTabs.TRANSPORTATION); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, MINECART_DISPENSER_BEHAVIOR); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (!BlockRailBase.isRailBlock(iblockstate)) + { + return EnumActionResult.FAIL; + } + else + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!worldIn.isRemote) + { + BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = iblockstate.getBlock() instanceof BlockRailBase ? ((BlockRailBase)iblockstate.getBlock()).getRailDirection(worldIn, pos, iblockstate, null) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + double d0 = 0.0D; + + if (blockrailbase$enumraildirection.isAscending()) + { + d0 = 0.5D; + } + + EntityMinecart entityminecart = EntityMinecart.create(worldIn, (double)pos.getX() + 0.5D, (double)pos.getY() + 0.0625D + d0, (double)pos.getZ() + 0.5D, this.minecartType); + + if (itemstack.hasDisplayName()) + { + entityminecart.setCustomNameTag(itemstack.getDisplayName()); + } + + worldIn.spawnEntity(entityminecart); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemMonsterPlacer.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMonsterPlacer.java new file mode 100644 index 0000000..275cf8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMonsterPlacer.java @@ -0,0 +1,332 @@ +package net.minecraft.item; + +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.stats.StatList; +import net.minecraft.tileentity.MobSpawnerBaseLogic; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; + +public class ItemMonsterPlacer extends Item +{ + public ItemMonsterPlacer() + { + this.setCreativeTab(CreativeTabs.MISC); + } + + public String getItemStackDisplayName(ItemStack stack) + { + String s = ("" + I18n.translateToLocal(this.getUnlocalizedName() + ".name")).trim(); + String s1 = EntityList.getTranslationName(getNamedIdFrom(stack)); + + if (s1 != null) + { + s = s + " " + I18n.translateToLocal("entity." + s1 + ".name"); + } + + return s; + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else if (!player.canPlayerEdit(pos.offset(facing), facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (block == Blocks.MOB_SPAWNER) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntityMobSpawner) + { + MobSpawnerBaseLogic mobspawnerbaselogic = ((TileEntityMobSpawner)tileentity).getSpawnerBaseLogic(); + mobspawnerbaselogic.setEntityId(getNamedIdFrom(itemstack)); + tileentity.markDirty(); + worldIn.notifyBlockUpdate(pos, iblockstate, iblockstate, 3); + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + return EnumActionResult.SUCCESS; + } + } + + BlockPos blockpos = pos.offset(facing); + double d0 = this.getYOffset(worldIn, blockpos); + Entity entity = spawnCreature(worldIn, getNamedIdFrom(itemstack), (double)blockpos.getX() + 0.5D, (double)blockpos.getY() + d0, (double)blockpos.getZ() + 0.5D); + + if (entity != null) + { + if (entity instanceof EntityLivingBase && itemstack.hasDisplayName()) + { + entity.setCustomNameTag(itemstack.getDisplayName()); + } + + applyItemEntityDataToEntity(worldIn, player, itemstack, entity); + + if (!player.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + } + + return EnumActionResult.SUCCESS; + } + } + + protected double getYOffset(World p_190909_1_, BlockPos p_190909_2_) + { + AxisAlignedBB axisalignedbb = (new AxisAlignedBB(p_190909_2_)).expand(0.0D, -1.0D, 0.0D); + List list = p_190909_1_.getCollisionBoxes((Entity)null, axisalignedbb); + + if (list.isEmpty()) + { + return 0.0D; + } + else + { + double d0 = axisalignedbb.minY; + + for (AxisAlignedBB axisalignedbb1 : list) + { + d0 = Math.max(axisalignedbb1.maxY, d0); + } + + return d0 - (double)p_190909_2_.getY(); + } + } + + /** + * Applies the data in the EntityTag tag of the given ItemStack to the given Entity. + */ + public static void applyItemEntityDataToEntity(World entityWorld, @Nullable EntityPlayer player, ItemStack stack, @Nullable Entity targetEntity) + { + MinecraftServer minecraftserver = entityWorld.getMinecraftServer(); + + if (minecraftserver != null && targetEntity != null) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound != null && nbttagcompound.hasKey("EntityTag", 10)) + { + if (!entityWorld.isRemote && targetEntity.ignoreItemEntityData() && (player == null || !minecraftserver.getPlayerList().canSendCommands(player.getGameProfile()))) + { + return; + } + + NBTTagCompound nbttagcompound1 = targetEntity.writeToNBT(new NBTTagCompound()); + UUID uuid = targetEntity.getUniqueID(); + nbttagcompound1.merge(nbttagcompound.getCompoundTag("EntityTag")); + targetEntity.setUniqueId(uuid); + targetEntity.readFromNBT(nbttagcompound1); + } + } + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (worldIn.isRemote) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + RayTraceResult raytraceresult = this.rayTrace(worldIn, playerIn, true); + + if (raytraceresult != null && raytraceresult.typeOfHit == RayTraceResult.Type.BLOCK) + { + BlockPos blockpos = raytraceresult.getBlockPos(); + + if (!(worldIn.getBlockState(blockpos).getBlock() instanceof BlockLiquid)) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else if (worldIn.isBlockModifiable(playerIn, blockpos) && playerIn.canPlayerEdit(blockpos, raytraceresult.sideHit, itemstack)) + { + Entity entity = spawnCreature(worldIn, getNamedIdFrom(itemstack), (double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D); + + if (entity == null) + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + else + { + if (entity instanceof EntityLivingBase && itemstack.hasDisplayName()) + { + entity.setCustomNameTag(itemstack.getDisplayName()); + } + + applyItemEntityDataToEntity(worldIn, playerIn, itemstack, entity); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + } + else + { + return new ActionResult(EnumActionResult.FAIL, itemstack); + } + } + else + { + return new ActionResult(EnumActionResult.PASS, itemstack); + } + } + } + + /** + * Spawns the creature specified by the egg's type in the location specified by the last three parameters. + * Parameters: world, entityID, x, y, z. + */ + @Nullable + public static Entity spawnCreature(World worldIn, @Nullable ResourceLocation entityID, double x, double y, double z) + { + if (entityID != null && EntityList.ENTITY_EGGS.containsKey(entityID)) + { + Entity entity = null; + + for (int i = 0; i < 1; ++i) + { + entity = EntityList.createEntityByIDFromName(entityID, worldIn); + + if (entity instanceof EntityLiving) + { + EntityLiving entityliving = (EntityLiving)entity; + entity.setLocationAndAngles(x, y, z, MathHelper.wrapDegrees(worldIn.rand.nextFloat() * 360.0F), 0.0F); + entityliving.rotationYawHead = entityliving.rotationYaw; + entityliving.renderYawOffset = entityliving.rotationYaw; + entityliving.onInitialSpawn(worldIn.getDifficultyForLocation(new BlockPos(entityliving)), (IEntityLivingData)null); + worldIn.spawnEntity(entity); + entityliving.playLivingSound(); + } + } + + return entity; + } + else + { + return null; + } + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (EntityList.EntityEggInfo entitylist$entityegginfo : EntityList.ENTITY_EGGS.values()) + { + ItemStack itemstack = new ItemStack(this, 1); + applyEntityIdToItemStack(itemstack, entitylist$entityegginfo.spawnedID); + items.add(itemstack); + } + } + } + + /** + * APplies the given entity ID to the given ItemStack's NBT data. + */ + public static void applyEntityIdToItemStack(ItemStack stack, ResourceLocation entityId) + { + NBTTagCompound nbttagcompound = stack.hasTagCompound() ? stack.getTagCompound() : new NBTTagCompound(); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setString("id", entityId.toString()); + nbttagcompound.setTag("EntityTag", nbttagcompound1); + stack.setTagCompound(nbttagcompound); + } + + /** + * Gets the entity type ID from the given itemstack. + * + * @return The type ID, or {@code null} if there is no valid tag on the item. + */ + @Nullable + public static ResourceLocation getNamedIdFrom(ItemStack stack) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (nbttagcompound == null) + { + return null; + } + else if (!nbttagcompound.hasKey("EntityTag", 10)) + { + return null; + } + else + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("EntityTag"); + + if (!nbttagcompound1.hasKey("id", 8)) + { + return null; + } + else + { + String s = nbttagcompound1.getString("id"); + ResourceLocation resourcelocation = new ResourceLocation(s); + + if (!s.contains(":")) + { + nbttagcompound1.setString("id", resourcelocation.toString()); + } + + return resourcelocation; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemMultiTexture.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMultiTexture.java new file mode 100644 index 0000000..3f31443 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemMultiTexture.java @@ -0,0 +1,59 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; + +public class ItemMultiTexture extends ItemBlock +{ + protected final Block unused; + protected final ItemMultiTexture.Mapper nameFunction; + + public ItemMultiTexture(Block p_i47262_1_, Block p_i47262_2_, ItemMultiTexture.Mapper p_i47262_3_) + { + super(p_i47262_1_); + this.unused = p_i47262_2_; + this.nameFunction = p_i47262_3_; + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public ItemMultiTexture(Block block, Block block2, final String[] namesByMeta) + { + this(block, block2, new ItemMultiTexture.Mapper() + { + public String apply(ItemStack p_apply_1_) + { + int i = p_apply_1_.getMetadata(); + + if (i < 0 || i >= namesByMeta.length) + { + i = 0; + } + + return namesByMeta[i]; + } + }); + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName() + "." + this.nameFunction.apply(stack); + } + + public interface Mapper + { + String apply(ItemStack var1); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemNameTag.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemNameTag.java new file mode 100644 index 0000000..4aa1978 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemNameTag.java @@ -0,0 +1,38 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumHand; + +public class ItemNameTag extends Item +{ + public ItemNameTag() + { + this.setCreativeTab(CreativeTabs.TOOLS); + } + + /** + * Returns true if the item can be used on the given entity, e.g. shears on sheep. + */ + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target, EnumHand hand) + { + if (stack.hasDisplayName() && !(target instanceof EntityPlayer)) + { + target.setCustomNameTag(stack.getDisplayName()); + + if (target instanceof EntityLiving) + { + ((EntityLiving)target).enablePersistence(); + } + + stack.shrink(1); + return true; + } + else + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemPickaxe.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemPickaxe.java new file mode 100644 index 0000000..df6d8ec --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemPickaxe.java @@ -0,0 +1,93 @@ +package net.minecraft.item; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; + +public class ItemPickaxe extends ItemTool +{ + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.ACTIVATOR_RAIL, Blocks.COAL_ORE, Blocks.COBBLESTONE, Blocks.DETECTOR_RAIL, Blocks.DIAMOND_BLOCK, Blocks.DIAMOND_ORE, Blocks.DOUBLE_STONE_SLAB, Blocks.GOLDEN_RAIL, Blocks.GOLD_BLOCK, Blocks.GOLD_ORE, Blocks.ICE, Blocks.IRON_BLOCK, Blocks.IRON_ORE, Blocks.LAPIS_BLOCK, Blocks.LAPIS_ORE, Blocks.LIT_REDSTONE_ORE, Blocks.MOSSY_COBBLESTONE, Blocks.NETHERRACK, Blocks.PACKED_ICE, Blocks.RAIL, Blocks.REDSTONE_ORE, Blocks.SANDSTONE, Blocks.RED_SANDSTONE, Blocks.STONE, Blocks.STONE_SLAB, Blocks.STONE_BUTTON, Blocks.STONE_PRESSURE_PLATE); + + protected ItemPickaxe(Item.ToolMaterial material) + { + super(1.0F, -2.8F, material, EFFECTIVE_ON); + } + + /** + * Check whether this Item can harvest the given Block + */ + public boolean canHarvestBlock(IBlockState blockIn) + { + Block block = blockIn.getBlock(); + + if (block == Blocks.OBSIDIAN) + { + return this.toolMaterial.getHarvestLevel() == 3; + } + else if (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE) + { + if (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK) + { + if (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE) + { + if (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE) + { + if (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE) + { + if (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE) + { + Material material = blockIn.getMaterial(); + + if (material == Material.ROCK) + { + return true; + } + else if (material == Material.IRON) + { + return true; + } + else + { + return material == Material.ANVIL; + } + } + else + { + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + else + { + return this.toolMaterial.getHarvestLevel() >= 1; + } + } + else + { + return this.toolMaterial.getHarvestLevel() >= 1; + } + } + else + { + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + else + { + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + else + { + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Material material = state.getMaterial(); + return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getDestroySpeed(stack, state) : this.efficiency; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemPiston.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemPiston.java new file mode 100644 index 0000000..382cf2b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemPiston.java @@ -0,0 +1,20 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; + +public class ItemPiston extends ItemBlock +{ + public ItemPiston(Block block) + { + super(block); + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return 7; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemPotion.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemPotion.java new file mode 100644 index 0000000..e2abdc7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemPotion.java @@ -0,0 +1,163 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemPotion extends Item +{ + public ItemPotion() + { + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.BREWING); + } + + @SideOnly(Side.CLIENT) + public ItemStack getDefaultInstance() + { + return PotionUtils.addPotionToItemStack(super.getDefaultInstance(), PotionTypes.WATER); + } + + /** + * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using + * the Item before the action is complete. + */ + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + EntityPlayer entityplayer = entityLiving instanceof EntityPlayer ? (EntityPlayer)entityLiving : null; + + if (entityplayer == null || !entityplayer.capabilities.isCreativeMode) + { + stack.shrink(1); + } + + if (entityplayer instanceof EntityPlayerMP) + { + CriteriaTriggers.CONSUME_ITEM.trigger((EntityPlayerMP)entityplayer, stack); + } + + if (!worldIn.isRemote) + { + for (PotionEffect potioneffect : PotionUtils.getEffectsFromStack(stack)) + { + if (potioneffect.getPotion().isInstant()) + { + potioneffect.getPotion().affectEntity(entityplayer, entityplayer, entityLiving, potioneffect.getAmplifier(), 1.0D); + } + else + { + entityLiving.addPotionEffect(new PotionEffect(potioneffect)); + } + } + } + + if (entityplayer != null) + { + entityplayer.addStat(StatList.getObjectUseStats(this)); + } + + if (entityplayer == null || !entityplayer.capabilities.isCreativeMode) + { + if (stack.isEmpty()) + { + return new ItemStack(Items.GLASS_BOTTLE); + } + + if (entityplayer != null) + { + entityplayer.inventory.addItemStackToInventory(new ItemStack(Items.GLASS_BOTTLE)); + } + } + + return stack; + } + + /** + * How long it takes to use or consume an item + */ + public int getMaxItemUseDuration(ItemStack stack) + { + return 32; + } + + /** + * returns the action that specifies what animation to play when the items is being used + */ + public EnumAction getItemUseAction(ItemStack stack) + { + return EnumAction.DRINK; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + playerIn.setActiveHand(handIn); + return new ActionResult(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn)); + } + + public String getItemStackDisplayName(ItemStack stack) + { + return I18n.translateToLocal(PotionUtils.getPotionFromItem(stack).getNamePrefixed("potion.effect.")); + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + PotionUtils.addPotionTooltip(stack, tooltip, 1.0F); + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (PotionType potiontype : PotionType.REGISTRY) + { + if (potiontype != PotionTypes.EMPTY) + { + items.add(PotionUtils.addPotionToItemStack(new ItemStack(this), potiontype)); + } + } + } + } + + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return super.hasEffect(stack) || !PotionUtils.getEffectsFromStack(stack).isEmpty(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemRecord.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemRecord.java new file mode 100644 index 0000000..f86e1c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemRecord.java @@ -0,0 +1,100 @@ +package net.minecraft.item; + +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.block.BlockJukebox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.stats.StatList; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemRecord extends Item +{ + private static final Map RECORDS = Maps.newHashMap(); + private final SoundEvent sound; + private final String displayName; + + protected ItemRecord(String p_i46742_1_, SoundEvent soundIn) + { + this.displayName = "item.record." + p_i46742_1_ + ".desc"; + this.sound = soundIn; + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.MISC); + RECORDS.put(this.sound, this); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() == Blocks.JUKEBOX && !((Boolean)iblockstate.getValue(BlockJukebox.HAS_RECORD)).booleanValue()) + { + if (!worldIn.isRemote) + { + ItemStack itemstack = player.getHeldItem(hand); + ((BlockJukebox)Blocks.JUKEBOX).insertRecord(worldIn, pos, iblockstate, itemstack); + worldIn.playEvent((EntityPlayer)null, 1010, pos, Item.getIdFromItem(this)); + itemstack.shrink(1); + player.addStat(StatList.RECORD_PLAYED); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.PASS; + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + tooltip.add(this.getRecordNameLocal()); + } + + @SideOnly(Side.CLIENT) + public String getRecordNameLocal() + { + return I18n.translateToLocal(this.displayName); + } + + /** + * Return an item rarity from EnumRarity + */ + public EnumRarity getRarity(ItemStack stack) + { + return EnumRarity.RARE; + } + + @Nullable + @SideOnly(Side.CLIENT) + public static ItemRecord getBySound(SoundEvent soundIn) + { + return RECORDS.get(soundIn); + } + + @SideOnly(Side.CLIENT) + public SoundEvent getSound() + { + return this.sound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemRedstone.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemRedstone.java new file mode 100644 index 0000000..1f65f33 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemRedstone.java @@ -0,0 +1,48 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemRedstone extends Item +{ + public ItemRedstone() + { + this.setCreativeTab(CreativeTabs.REDSTONE); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + boolean flag = worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos); + BlockPos blockpos = flag ? pos : pos.offset(facing); + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(blockpos, facing, itemstack) && worldIn.mayPlace(worldIn.getBlockState(blockpos).getBlock(), blockpos, false, facing, (Entity)null) && Blocks.REDSTONE_WIRE.canPlaceBlockAt(worldIn, blockpos)) + { + worldIn.setBlockState(blockpos, Blocks.REDSTONE_WIRE.getDefaultState()); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, blockpos, itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSaddle.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSaddle.java new file mode 100644 index 0000000..61a97de --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSaddle.java @@ -0,0 +1,42 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; + +public class ItemSaddle extends Item +{ + public ItemSaddle() + { + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.TRANSPORTATION); + } + + /** + * Returns true if the item can be used on the given entity, e.g. shears on sheep. + */ + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target, EnumHand hand) + { + if (target instanceof EntityPig) + { + EntityPig entitypig = (EntityPig)target; + + if (!entitypig.getSaddled() && !entitypig.isChild()) + { + entitypig.setSaddled(true); + entitypig.world.playSound(playerIn, entitypig.posX, entitypig.posY, entitypig.posZ, SoundEvents.ENTITY_PIG_SADDLE, SoundCategory.NEUTRAL, 0.5F, 1.0F); + stack.shrink(1); + } + + return true; + } + else + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSeedFood.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSeedFood.java new file mode 100644 index 0000000..3b16a06 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSeedFood.java @@ -0,0 +1,54 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemSeedFood extends ItemFood implements net.minecraftforge.common.IPlantable +{ + private final Block crops; + /** Block ID of the soil this seed food should be planted on. */ + private final Block soilId; + + public ItemSeedFood(int healAmount, float saturation, Block crops, Block soil) + { + super(healAmount, saturation, false); + this.crops = crops; + this.soilId = soil; + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + net.minecraft.block.state.IBlockState state = worldIn.getBlockState(pos); + if (facing == EnumFacing.UP && player.canPlayerEdit(pos.offset(facing), facing, itemstack) && state.getBlock().canSustainPlant(state, worldIn, pos, EnumFacing.UP, this) && worldIn.isAirBlock(pos.up())) + { + worldIn.setBlockState(pos.up(), this.crops.getDefaultState(), 11); + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + + @Override + public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + return net.minecraftforge.common.EnumPlantType.Crop; + } + + @Override + public net.minecraft.block.state.IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + return this.crops.getDefaultState(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSeeds.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSeeds.java new file mode 100644 index 0000000..f1c7546 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSeeds.java @@ -0,0 +1,63 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemSeeds extends Item implements net.minecraftforge.common.IPlantable +{ + private final Block crops; + /** BlockID of the block the seeds can be planted on. */ + private final Block soilBlockID; + + public ItemSeeds(Block crops, Block soil) + { + this.crops = crops; + this.soilBlockID = soil; + this.setCreativeTab(CreativeTabs.MATERIALS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + net.minecraft.block.state.IBlockState state = worldIn.getBlockState(pos); + if (facing == EnumFacing.UP && player.canPlayerEdit(pos.offset(facing), facing, itemstack) && state.getBlock().canSustainPlant(state, worldIn, pos, EnumFacing.UP, this) && worldIn.isAirBlock(pos.up())) + { + worldIn.setBlockState(pos.up(), this.crops.getDefaultState()); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos.up(), itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.FAIL; + } + } + + @Override + public net.minecraftforge.common.EnumPlantType getPlantType(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + return this.crops == net.minecraft.init.Blocks.NETHER_WART ? net.minecraftforge.common.EnumPlantType.Nether : net.minecraftforge.common.EnumPlantType.Crop; + } + + @Override + public net.minecraft.block.state.IBlockState getPlant(net.minecraft.world.IBlockAccess world, BlockPos pos) + { + return this.crops.getDefaultState(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemShears.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemShears.java new file mode 100644 index 0000000..a531605 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemShears.java @@ -0,0 +1,130 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemShears extends Item +{ + public ItemShears() + { + this.setMaxStackSize(1); + this.setMaxDamage(238); + this.setCreativeTab(CreativeTabs.TOOLS); + } + + /** + * Called when a Block is destroyed using this Item. Return true to trigger the "Use Item" statistic. + */ + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + if (!worldIn.isRemote) + { + stack.damageItem(1, entityLiving); + } + + Block block = state.getBlock(); + if (block instanceof net.minecraftforge.common.IShearable) return true; + return state.getMaterial() != Material.LEAVES && block != Blocks.WEB && block != Blocks.TALLGRASS && block != Blocks.VINE && block != Blocks.TRIPWIRE && block != Blocks.WOOL ? super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving) : true; + } + + /** + * Check whether this Item can harvest the given Block + */ + public boolean canHarvestBlock(IBlockState blockIn) + { + Block block = blockIn.getBlock(); + return block == Blocks.WEB || block == Blocks.REDSTONE_WIRE || block == Blocks.TRIPWIRE; + } + + + /** + * Returns true if the item can be used on the given entity, e.g. shears on sheep. + */ + @Override + public boolean itemInteractionForEntity(ItemStack itemstack, net.minecraft.entity.player.EntityPlayer player, EntityLivingBase entity, net.minecraft.util.EnumHand hand) + { + if (entity.world.isRemote) + { + return false; + } + if (entity instanceof net.minecraftforge.common.IShearable) + { + net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)entity; + BlockPos pos = new BlockPos(entity.posX, entity.posY, entity.posZ); + if (target.isShearable(itemstack, entity.world, pos)) + { + java.util.List drops = target.onSheared(itemstack, entity.world, pos, + net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.init.Enchantments.FORTUNE, itemstack)); + + java.util.Random rand = new java.util.Random(); + for(ItemStack stack : drops) + { + net.minecraft.entity.item.EntityItem ent = entity.entityDropItem(stack, 1.0F); + ent.motionY += rand.nextFloat() * 0.05F; + ent.motionX += (rand.nextFloat() - rand.nextFloat()) * 0.1F; + ent.motionZ += (rand.nextFloat() - rand.nextFloat()) * 0.1F; + } + itemstack.damageItem(1, entity); + } + return true; + } + return false; + } + + @Override + public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, net.minecraft.entity.player.EntityPlayer player) + { + if (player.world.isRemote || player.capabilities.isCreativeMode) + { + return false; + } + Block block = player.world.getBlockState(pos).getBlock(); + if (block instanceof net.minecraftforge.common.IShearable) + { + net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)block; + if (target.isShearable(itemstack, player.world, pos)) + { + java.util.List drops = target.onSheared(itemstack, player.world, pos, + net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.init.Enchantments.FORTUNE, itemstack)); + java.util.Random rand = new java.util.Random(); + + for (ItemStack stack : drops) + { + float f = 0.7F; + double d = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; + double d1 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; + double d2 = (double)(rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D; + net.minecraft.entity.item.EntityItem entityitem = new net.minecraft.entity.item.EntityItem(player.world, (double)pos.getX() + d, (double)pos.getY() + d1, (double)pos.getZ() + d2, stack); + entityitem.setDefaultPickupDelay(); + player.world.spawnEntity(entityitem); + } + + itemstack.damageItem(1, player); + player.addStat(net.minecraft.stats.StatList.getBlockStats(block)); + player.world.setBlockState(pos, Blocks.AIR.getDefaultState(), 11); //TODO: Move to IShearable implementors in 1.12+ + return true; + } + } + return false; + } + + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Block block = state.getBlock(); + + if (block != Blocks.WEB && state.getMaterial() != Material.LEAVES) + { + return block == Blocks.WOOL ? 5.0F : super.getDestroySpeed(stack, state); + } + else + { + return 15.0F; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemShield.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemShield.java new file mode 100644 index 0000000..62950db --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemShield.java @@ -0,0 +1,97 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.BlockDispenser; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemShield extends Item +{ + public ItemShield() + { + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.COMBAT); + this.setMaxDamage(336); + this.addPropertyOverride(new ResourceLocation("blocking"), new IItemPropertyGetter() + { + @SideOnly(Side.CLIENT) + public float apply(ItemStack stack, @Nullable World worldIn, @Nullable EntityLivingBase entityIn) + { + return entityIn != null && entityIn.isHandActive() && entityIn.getActiveItemStack() == stack ? 1.0F : 0.0F; + } + }); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, ItemArmor.DISPENSER_BEHAVIOR); + } + + public String getItemStackDisplayName(ItemStack stack) + { + if (stack.getSubCompound("BlockEntityTag") != null) + { + EnumDyeColor enumdyecolor = TileEntityBanner.getColor(stack); + return I18n.translateToLocal("item.shield." + enumdyecolor.getUnlocalizedName() + ".name"); + } + else + { + return I18n.translateToLocal("item.shield.name"); + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + ItemBanner.appendHoverTextFromTileEntityTag(stack, tooltip); + } + + /** + * returns the action that specifies what animation to play when the items is being used + */ + public EnumAction getItemUseAction(ItemStack stack) + { + return EnumAction.BLOCK; + } + + /** + * How long it takes to use or consume an item + */ + public int getMaxItemUseDuration(ItemStack stack) + { + return 72000; + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + playerIn.setActiveHand(handIn); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + + /** + * Return whether this item is repairable in an anvil. + * + * @param toRepair the {@code ItemStack} being repaired + * @param repair the {@code ItemStack} being used to perform the repair + */ + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + return repair.getItem() == Item.getItemFromBlock(Blocks.PLANKS) ? true : super.getIsRepairable(toRepair, repair); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemShulkerBox.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemShulkerBox.java new file mode 100644 index 0000000..6c78b30 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemShulkerBox.java @@ -0,0 +1,12 @@ +package net.minecraft.item; + +import net.minecraft.block.Block; + +public class ItemShulkerBox extends ItemBlock +{ + public ItemShulkerBox(Block blockInstance) + { + super(blockInstance); + this.setMaxStackSize(1); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSign.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSign.java new file mode 100644 index 0000000..d038a0b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSign.java @@ -0,0 +1,87 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.BlockStandingSign; +import net.minecraft.block.BlockWallSign; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class ItemSign extends Item +{ + public ItemSign() + { + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.DECORATIONS); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + boolean flag = iblockstate.getBlock().isReplaceable(worldIn, pos); + + if (facing != EnumFacing.DOWN && (iblockstate.getMaterial().isSolid() || flag) && (!flag || facing == EnumFacing.UP)) + { + pos = pos.offset(facing); + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(pos, facing, itemstack) && Blocks.STANDING_SIGN.canPlaceBlockAt(worldIn, pos)) + { + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else + { + pos = flag ? pos.down() : pos; + + if (facing == EnumFacing.UP) + { + int i = MathHelper.floor((double)((player.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; + worldIn.setBlockState(pos, Blocks.STANDING_SIGN.getDefaultState().withProperty(BlockStandingSign.ROTATION, Integer.valueOf(i)), 11); + } + else + { + worldIn.setBlockState(pos, Blocks.WALL_SIGN.getDefaultState().withProperty(BlockWallSign.FACING, facing), 11); + } + + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntitySign && !ItemBlock.setTileEntityNBT(worldIn, player, pos, itemstack)) + { + player.openEditSign((TileEntitySign)tileentity); + } + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + else + { + return EnumActionResult.FAIL; + } + } + else + { + return EnumActionResult.FAIL; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSimpleFoiled.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSimpleFoiled.java new file mode 100644 index 0000000..9b53bf6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSimpleFoiled.java @@ -0,0 +1,21 @@ +package net.minecraft.item; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSimpleFoiled extends Item +{ + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSkull.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSkull.java new file mode 100644 index 0000000..9cb8a9a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSkull.java @@ -0,0 +1,218 @@ +package net.minecraft.item; + +import com.mojang.authlib.GameProfile; +import java.util.UUID; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockSkull; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import org.apache.commons.lang3.StringUtils; + +public class ItemSkull extends Item +{ + private static final String[] SKULL_TYPES = new String[] {"skeleton", "wither", "zombie", "char", "creeper", "dragon"}; + + public ItemSkull() + { + this.setCreativeTab(CreativeTabs.DECORATIONS); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (facing == EnumFacing.DOWN) + { + return EnumActionResult.FAIL; + } + else + { + if (worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos)) + { + facing = EnumFacing.UP; + pos = pos.down(); + } + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + boolean flag = block.isReplaceable(worldIn, pos); + + if (!flag) + { + if (!worldIn.getBlockState(pos).getMaterial().isSolid() && !worldIn.isSideSolid(pos, facing, true)) + { + return EnumActionResult.FAIL; + } + + pos = pos.offset(facing); + } + + ItemStack itemstack = player.getHeldItem(hand); + + if (player.canPlayerEdit(pos, facing, itemstack) && Blocks.SKULL.canPlaceBlockAt(worldIn, pos)) + { + if (worldIn.isRemote) + { + return EnumActionResult.SUCCESS; + } + else + { + worldIn.setBlockState(pos, Blocks.SKULL.getDefaultState().withProperty(BlockSkull.FACING, facing), 11); + int i = 0; + + if (facing == EnumFacing.UP) + { + i = MathHelper.floor((double)(player.rotationYaw * 16.0F / 360.0F) + 0.5D) & 15; + } + + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof TileEntitySkull) + { + TileEntitySkull tileentityskull = (TileEntitySkull)tileentity; + + if (itemstack.getMetadata() == 3) + { + GameProfile gameprofile = null; + + if (itemstack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = itemstack.getTagCompound(); + + if (nbttagcompound.hasKey("SkullOwner", 10)) + { + gameprofile = NBTUtil.readGameProfileFromNBT(nbttagcompound.getCompoundTag("SkullOwner")); + } + else if (nbttagcompound.hasKey("SkullOwner", 8) && !StringUtils.isBlank(nbttagcompound.getString("SkullOwner"))) + { + gameprofile = new GameProfile((UUID)null, nbttagcompound.getString("SkullOwner")); + } + } + + tileentityskull.setPlayerProfile(gameprofile); + } + else + { + tileentityskull.setType(itemstack.getMetadata()); + } + + tileentityskull.setSkullRotation(i); + Blocks.SKULL.checkWitherSpawn(worldIn, pos, tileentityskull); + } + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + else + { + return EnumActionResult.FAIL; + } + } + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (int i = 0; i < SKULL_TYPES.length; ++i) + { + items.add(new ItemStack(this, 1, i)); + } + } + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + int i = stack.getMetadata(); + + if (i < 0 || i >= SKULL_TYPES.length) + { + i = 0; + } + + return super.getUnlocalizedName() + "." + SKULL_TYPES[i]; + } + + public String getItemStackDisplayName(ItemStack stack) + { + if (stack.getMetadata() == 3 && stack.hasTagCompound()) + { + if (stack.getTagCompound().hasKey("SkullOwner", 8)) + { + return I18n.translateToLocalFormatted("item.skull.player.name", stack.getTagCompound().getString("SkullOwner")); + } + + if (stack.getTagCompound().hasKey("SkullOwner", 10)) + { + NBTTagCompound nbttagcompound = stack.getTagCompound().getCompoundTag("SkullOwner"); + + if (nbttagcompound.hasKey("Name", 8)) + { + return I18n.translateToLocalFormatted("item.skull.player.name", nbttagcompound.getString("Name")); + } + } + } + + return super.getItemStackDisplayName(stack); + } + + /** + * Called when an ItemStack with NBT data is read to potentially that ItemStack's NBT data + */ + public boolean updateItemStackNBT(NBTTagCompound nbt) + { + super.updateItemStackNBT(nbt); + + if (nbt.hasKey("SkullOwner", 8) && !StringUtils.isBlank(nbt.getString("SkullOwner"))) + { + GameProfile gameprofile = new GameProfile((UUID)null, nbt.getString("SkullOwner")); + gameprofile = TileEntitySkull.updateGameprofile(gameprofile); + nbt.setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), gameprofile)); + return true; + } + else + { + return false; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSlab.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSlab.java new file mode 100644 index 0000000..9bbf066 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSlab.java @@ -0,0 +1,154 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.SoundType; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSlab extends ItemBlock +{ + private final BlockSlab singleSlab; + private final BlockSlab doubleSlab; + + public ItemSlab(Block block, BlockSlab singleSlab, BlockSlab doubleSlab) + { + super(block); + this.singleSlab = singleSlab; + this.doubleSlab = doubleSlab; + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage; + } + + /** + * Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have + * different names based on their damage or NBT. + */ + public String getUnlocalizedName(ItemStack stack) + { + return this.singleSlab.getUnlocalizedName(stack.getMetadata()); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!itemstack.isEmpty() && player.canPlayerEdit(pos.offset(facing), facing, itemstack)) + { + Comparable comparable = this.singleSlab.getTypeForItem(itemstack); + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() == this.singleSlab) + { + IProperty iproperty = this.singleSlab.getVariantProperty(); + Comparable comparable1 = iblockstate.getValue(iproperty); + BlockSlab.EnumBlockHalf blockslab$enumblockhalf = (BlockSlab.EnumBlockHalf)iblockstate.getValue(BlockSlab.HALF); + + if ((facing == EnumFacing.UP && blockslab$enumblockhalf == BlockSlab.EnumBlockHalf.BOTTOM || facing == EnumFacing.DOWN && blockslab$enumblockhalf == BlockSlab.EnumBlockHalf.TOP) && comparable1 == comparable) + { + IBlockState iblockstate1 = this.makeState(iproperty, comparable1); + AxisAlignedBB axisalignedbb = iblockstate1.getCollisionBoundingBox(worldIn, pos); + + if (axisalignedbb != Block.NULL_AABB && worldIn.checkNoEntityCollision(axisalignedbb.offset(pos)) && worldIn.setBlockState(pos, iblockstate1, 11)) + { + SoundType soundtype = this.doubleSlab.getSoundType(iblockstate1, worldIn, pos, player); + worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + itemstack.shrink(1); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + } + + return EnumActionResult.SUCCESS; + } + } + + return this.tryPlace(player, itemstack, worldIn, pos.offset(facing), comparable) ? EnumActionResult.SUCCESS : super.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); + } + else + { + return EnumActionResult.FAIL; + } + } + + @SideOnly(Side.CLIENT) + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) + { + BlockPos blockpos = pos; + IProperty iproperty = this.singleSlab.getVariantProperty(); + Comparable comparable = this.singleSlab.getTypeForItem(stack); + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() == this.singleSlab) + { + boolean flag = iblockstate.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP; + + if ((side == EnumFacing.UP && !flag || side == EnumFacing.DOWN && flag) && comparable == iblockstate.getValue(iproperty)) + { + return true; + } + } + + pos = pos.offset(side); + IBlockState iblockstate1 = worldIn.getBlockState(pos); + return iblockstate1.getBlock() == this.singleSlab && comparable == iblockstate1.getValue(iproperty) ? true : super.canPlaceBlockOnSide(worldIn, blockpos, side, player, stack); + } + + private boolean tryPlace(EntityPlayer player, ItemStack stack, World worldIn, BlockPos pos, Object itemSlabType) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + + if (iblockstate.getBlock() == this.singleSlab) + { + Comparable comparable = iblockstate.getValue(this.singleSlab.getVariantProperty()); + + if (comparable == itemSlabType) + { + IBlockState iblockstate1 = this.makeState(this.singleSlab.getVariantProperty(), comparable); + AxisAlignedBB axisalignedbb = iblockstate1.getCollisionBoundingBox(worldIn, pos); + + if (axisalignedbb != Block.NULL_AABB && worldIn.checkNoEntityCollision(axisalignedbb.offset(pos)) && worldIn.setBlockState(pos, iblockstate1, 11)) + { + SoundType soundtype = this.doubleSlab.getSoundType(iblockstate1, worldIn, pos, player); + worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + stack.shrink(1); + } + + return true; + } + } + + return false; + } + + protected > IBlockState makeState(IProperty p_185055_1_, Comparable p_185055_2_) + { + return this.doubleSlab.getDefaultState().withProperty(p_185055_1_, (T)p_185055_2_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSnow.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSnow.java new file mode 100644 index 0000000..9edb764 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSnow.java @@ -0,0 +1,93 @@ +package net.minecraft.item; + +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockSnow; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemSnow extends ItemBlock +{ + public ItemSnow(Block block) + { + super(block); + this.setMaxDamage(0); + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!itemstack.isEmpty() && player.canPlayerEdit(pos, facing, itemstack)) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + BlockPos blockpos = pos; + + if ((facing != EnumFacing.UP || block != this.block) && !block.isReplaceable(worldIn, pos)) + { + blockpos = pos.offset(facing); + iblockstate = worldIn.getBlockState(blockpos); + block = iblockstate.getBlock(); + } + + if (block == this.block) + { + int i = ((Integer)iblockstate.getValue(BlockSnow.LAYERS)).intValue(); + + if (i < 8) + { + IBlockState iblockstate1 = iblockstate.withProperty(BlockSnow.LAYERS, Integer.valueOf(i + 1)); + AxisAlignedBB axisalignedbb = iblockstate1.getCollisionBoundingBox(worldIn, blockpos); + + if (axisalignedbb != Block.NULL_AABB && worldIn.checkNoEntityCollision(axisalignedbb.offset(blockpos)) && worldIn.setBlockState(blockpos, iblockstate1, 10)) + { + SoundType soundtype = this.block.getSoundType(iblockstate1, worldIn, pos, player); + worldIn.playSound(player, blockpos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); + + if (player instanceof EntityPlayerMP) + { + CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); + } + + itemstack.shrink(1); + return EnumActionResult.SUCCESS; + } + } + } + + return super.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); + } + else + { + return EnumActionResult.FAIL; + } + } + + /** + * Converts the given ItemStack damage value into a metadata value to be placed in the world when this Item is + * placed as a Block (mostly used with ItemBlocks). + */ + public int getMetadata(int damage) + { + return damage; + } + + public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) + { + IBlockState state = world.getBlockState(pos); + return (state.getBlock() != net.minecraft.init.Blocks.SNOW_LAYER || ((Integer)state.getValue(BlockSnow.LAYERS)) > 7) ? super.canPlaceBlockOnSide(world, pos, side, player, stack) : true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSnowball.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSnowball.java new file mode 100644 index 0000000..1e5655d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSnowball.java @@ -0,0 +1,46 @@ +package net.minecraft.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.init.SoundEvents; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.world.World; + +public class ItemSnowball extends Item +{ + public ItemSnowball() + { + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.MISC); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!playerIn.capabilities.isCreativeMode) + { + itemstack.shrink(1); + } + + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { + EntitySnowball entitysnowball = new EntitySnowball(worldIn, playerIn); + entitysnowball.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + worldIn.spawnEntity(entitysnowball); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSoup.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSoup.java new file mode 100644 index 0000000..403411e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSoup.java @@ -0,0 +1,24 @@ +package net.minecraft.item; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Items; +import net.minecraft.world.World; + +public class ItemSoup extends ItemFood +{ + public ItemSoup(int healAmount) + { + super(healAmount, false); + this.setMaxStackSize(1); + } + + /** + * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using + * the Item before the action is complete. + */ + public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityLivingBase entityLiving) + { + super.onItemUseFinish(stack, worldIn, entityLiving); + return new ItemStack(Items.BOWL); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSpade.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSpade.java new file mode 100644 index 0000000..717c2b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSpade.java @@ -0,0 +1,79 @@ +package net.minecraft.item; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class ItemSpade extends ItemTool +{ + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.CLAY, Blocks.DIRT, Blocks.FARMLAND, Blocks.GRASS, Blocks.GRAVEL, Blocks.MYCELIUM, Blocks.SAND, Blocks.SNOW, Blocks.SNOW_LAYER, Blocks.SOUL_SAND, Blocks.GRASS_PATH, Blocks.CONCRETE_POWDER); + + public ItemSpade(Item.ToolMaterial material) + { + super(1.5F, -3.0F, material, EFFECTIVE_ON); + } + + /** + * Check whether this Item can harvest the given Block + */ + public boolean canHarvestBlock(IBlockState blockIn) + { + Block block = blockIn.getBlock(); + + if (block == Blocks.SNOW_LAYER) + { + return true; + } + else + { + return block == Blocks.SNOW; + } + } + + /** + * Called when a Block is right-clicked with this Item + */ + public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) + { + ItemStack itemstack = player.getHeldItem(hand); + + if (!player.canPlayerEdit(pos.offset(facing), facing, itemstack)) + { + return EnumActionResult.FAIL; + } + else + { + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (facing != EnumFacing.DOWN && worldIn.getBlockState(pos.up()).getMaterial() == Material.AIR && block == Blocks.GRASS) + { + IBlockState iblockstate1 = Blocks.GRASS_PATH.getDefaultState(); + worldIn.playSound(player, pos, SoundEvents.ITEM_SHOVEL_FLATTEN, SoundCategory.BLOCKS, 1.0F, 1.0F); + + if (!worldIn.isRemote) + { + worldIn.setBlockState(pos, iblockstate1, 11); + itemstack.damageItem(1, player); + } + + return EnumActionResult.SUCCESS; + } + else + { + return EnumActionResult.PASS; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSpectralArrow.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSpectralArrow.java new file mode 100644 index 0000000..26e7764 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSpectralArrow.java @@ -0,0 +1,14 @@ +package net.minecraft.item; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.world.World; + +public class ItemSpectralArrow extends ItemArrow +{ + public EntityArrow createArrow(World worldIn, ItemStack stack, EntityLivingBase shooter) + { + return new EntitySpectralArrow(worldIn, shooter); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSplashPotion.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSplashPotion.java new file mode 100644 index 0000000..b0e8431 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSplashPotion.java @@ -0,0 +1,41 @@ +package net.minecraft.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.init.SoundEvents; +import net.minecraft.potion.PotionUtils; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; + +public class ItemSplashPotion extends ItemPotion +{ + public String getItemStackDisplayName(ItemStack stack) + { + return I18n.translateToLocal(PotionUtils.getPotionFromItem(stack).getNamePrefixed("splash_potion.effect.")); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + ItemStack itemstack1 = playerIn.capabilities.isCreativeMode ? itemstack.copy() : itemstack.splitStack(1); + worldIn.playSound((EntityPlayer)null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_SPLASH_POTION_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + + if (!worldIn.isRemote) + { + EntityPotion entitypotion = new EntityPotion(worldIn, playerIn, itemstack1); + entitypotion.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, -20.0F, 0.5F, 1.0F); + worldIn.spawnEntity(entitypotion); + } + + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemStack.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemStack.java new file mode 100644 index 0000000..db0ad99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemStack.java @@ -0,0 +1,1432 @@ +package net.minecraft.item; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; +import java.text.DecimalFormat; +import java.util.List; +import java.util.Random; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentDurability; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.BlockEntityTag; +import net.minecraft.util.datafix.walkers.EntityTag; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.event.HoverEvent; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public final class ItemStack implements net.minecraftforge.common.capabilities.ICapabilitySerializable +{ + public static final ItemStack EMPTY = new ItemStack((Item)null); + public static final DecimalFormat DECIMALFORMAT = new DecimalFormat("#.##"); + /** Size of the stack. */ + private int stackSize; + /** Number of animation frames to go when receiving an item (by walking into it, for example). */ + private int animationsToGo; + private final Item item; + /** An NBTTagCompound containing data about an ItemStack. */ + private NBTTagCompound stackTagCompound; + private boolean isEmpty; + int itemDamage; + /** Item frame this stack is on, or null if not on an item frame. */ + private EntityItemFrame itemFrame; + private Block canDestroyCacheBlock; + private boolean canDestroyCacheResult; + private Block canPlaceOnCacheBlock; + private boolean canPlaceOnCacheResult; + + private net.minecraftforge.registries.IRegistryDelegate delegate; + private net.minecraftforge.common.capabilities.CapabilityDispatcher capabilities; + private NBTTagCompound capNBT; + + public ItemStack(Block blockIn) + { + this(blockIn, 1); + } + + public ItemStack(Block blockIn, int amount) + { + this(blockIn, amount, 0); + } + + public ItemStack(Block blockIn, int amount, int meta) + { + this(Item.getItemFromBlock(blockIn), amount, meta); + } + + public ItemStack(Item itemIn) + { + this(itemIn, 1); + } + + public ItemStack(Item itemIn, int amount) + { + this(itemIn, amount, 0); + } + + public ItemStack(Item itemIn, int amount, int meta){ this(itemIn, amount, meta, null); } + public ItemStack(Item itemIn, int amount, int meta, @Nullable NBTTagCompound capNBT) + { + this.capNBT = capNBT; + this.item = itemIn; + this.itemDamage = meta; + this.stackSize = amount; + + if (this.itemDamage < 0) + { + this.itemDamage = 0; + } + + this.updateEmptyState(); + this.forgeInit(); + } + + private void updateEmptyState() + { + this.isEmpty = this.isEmpty(); + } + + public ItemStack(NBTTagCompound compound) + { + this.capNBT = compound.hasKey("ForgeCaps") ? compound.getCompoundTag("ForgeCaps") : null; + this.item = compound.hasKey("id", 8) ? Item.getByNameOrId(compound.getString("id")) : Items.AIR; //Forge fix tons of NumberFormatExceptions that are caused by deserializing EMPTY ItemStacks. + this.stackSize = compound.getByte("Count"); + this.itemDamage = Math.max(0, compound.getShort("Damage")); + + if (compound.hasKey("tag", 10)) + { + this.stackTagCompound = compound.getCompoundTag("tag"); + + if (this.item != null) + { + this.item.updateItemStackNBT(compound); + } + } + + this.updateEmptyState(); + this.forgeInit(); + } + + public boolean isEmpty() + { + if (this == EMPTY) + { + return true; + } + else if (this.getItemRaw() != null && this.getItemRaw() != Items.AIR) + { + if (this.stackSize <= 0) + { + return true; + } + else + { + return this.itemDamage < -32768 || this.itemDamage > 65535; + } + } + else + { + return true; + } + } + + public static void registerFixes(DataFixer fixer) + { + fixer.registerWalker(FixTypes.ITEM_INSTANCE, new BlockEntityTag()); + fixer.registerWalker(FixTypes.ITEM_INSTANCE, new EntityTag()); + } + + /** + * Splits off a stack of the given amount of this stack and reduces this stack by the amount. + */ + public ItemStack splitStack(int amount) + { + int i = Math.min(amount, this.stackSize); + ItemStack itemstack = this.copy(); + itemstack.setCount(i); + this.shrink(i); + return itemstack; + } + + /** + * Returns the object corresponding to the stack. + */ + public Item getItem() + { + return this.isEmpty || this.delegate == null ? Items.AIR : this.delegate.get(); + } + + /** + * Called when the player uses this ItemStack on a Block (right-click). Places blocks, etc. (Legacy name: + * tryPlaceItemIntoWorld) + */ + public EnumActionResult onItemUse(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + if (!worldIn.isRemote) return net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(this, playerIn, worldIn, pos, side, hitX, hitY, hitZ, hand); + EnumActionResult enumactionresult = this.getItem().onItemUse(playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); + + if (enumactionresult == EnumActionResult.SUCCESS) + { + playerIn.addStat(StatList.getObjectUseStats(this.item)); + } + + return enumactionresult; + } + + public EnumActionResult onItemUseFirst(EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) + { + // copy of onitemuse but for onitemusefirst + EnumActionResult enumactionresult = this.getItem().onItemUseFirst(playerIn, worldIn, pos, side, hitX, hitY, hitZ, hand); + + if (enumactionresult == EnumActionResult.SUCCESS) + { + playerIn.addStat(StatList.getObjectUseStats(this.item)); + } + + return enumactionresult; + } + + public float getDestroySpeed(IBlockState blockIn) + { + return this.getItem().getDestroySpeed(this, blockIn); + } + + /** + * Called whenr the item stack is equipped and right clicked. Replaces the item stack with the return value. + */ + public ActionResult useItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand hand) + { + return this.getItem().onItemRightClick(worldIn, playerIn, hand); + } + + /** + * Called when the item in use count reach 0, e.g. item food eaten. Return the new ItemStack. Args : world, entity + */ + public ItemStack onItemUseFinish(World worldIn, EntityLivingBase entityLiving) + { + return this.getItem().onItemUseFinish(this, worldIn, entityLiving); + } + + /** + * Write the stack fields to a NBT object. Return the new NBT object. + */ + public NBTTagCompound writeToNBT(NBTTagCompound nbt) + { + ResourceLocation resourcelocation = Item.REGISTRY.getNameForObject(this.item); + nbt.setString("id", resourcelocation == null ? "minecraft:air" : resourcelocation.toString()); + nbt.setByte("Count", (byte)this.stackSize); + nbt.setShort("Damage", (short)this.itemDamage); + + if (this.stackTagCompound != null) + { + nbt.setTag("tag", this.stackTagCompound); + } + + if (this.capabilities != null) + { + NBTTagCompound cnbt = this.capabilities.serializeNBT(); + if (!cnbt.hasNoTags()) nbt.setTag("ForgeCaps", cnbt); + } + + return nbt; + } + + /** + * Returns maximum size of the stack. + */ + public int getMaxStackSize() + { + return this.getItem().getItemStackLimit(this); + } + + /** + * Returns true if the ItemStack can hold 2 or more units of the item. + */ + public boolean isStackable() + { + return this.getMaxStackSize() > 1 && (!this.isItemStackDamageable() || !this.isItemDamaged()); + } + + /** + * true if this itemStack is damageable + */ + public boolean isItemStackDamageable() + { + if (this.isEmpty) + { + return false; + } + else if (this.item.getMaxDamage(this) <= 0) + { + return false; + } + else + { + return !this.hasTagCompound() || !this.getTagCompound().getBoolean("Unbreakable"); + } + } + + public boolean getHasSubtypes() + { + return this.getItem().getHasSubtypes(); + } + + /** + * returns true when a damageable item is damaged + */ + public boolean isItemDamaged() + { + return this.isItemStackDamageable() && getItem().isDamaged(this); + } + + public int getItemDamage() + { + return getItem().getDamage(this); + } + + public int getMetadata() + { + return getItem().getMetadata(this); + } + + public void setItemDamage(int meta) + { + getItem().setDamage(this, meta); + } + + /** + * Returns the max damage an item in the stack can take. + */ + public int getMaxDamage() + { + return this.getItem().getMaxDamage(this); + } + + /** + * Attempts to damage the ItemStack with par1 amount of damage, If the ItemStack has the Unbreaking enchantment + * there is a chance for each point of damage to be negated. Returns true if it takes more damage than + * getMaxDamage(). Returns false otherwise or if the ItemStack can't be damaged or if all points of damage are + * negated. + */ + public boolean attemptDamageItem(int amount, Random rand, @Nullable EntityPlayerMP damager) + { + if (!this.isItemStackDamageable()) + { + return false; + } + else + { + if (amount > 0) + { + int i = EnchantmentHelper.getEnchantmentLevel(Enchantments.UNBREAKING, this); + int j = 0; + + for (int k = 0; i > 0 && k < amount; ++k) + { + if (EnchantmentDurability.negateDamage(this, i, rand)) + { + ++j; + } + } + + amount -= j; + + if (amount <= 0) + { + return false; + } + } + + if (damager != null && amount != 0) + { + CriteriaTriggers.ITEM_DURABILITY_CHANGED.trigger(damager, this, this.itemDamage + amount); + } + + setItemDamage(getItemDamage() + amount); //Redirect through Item's callback if applicable. + return getItemDamage() > getMaxDamage(); + } + } + + /** + * Damages the item in the ItemStack + */ + public void damageItem(int amount, EntityLivingBase entityIn) + { + if (!(entityIn instanceof EntityPlayer) || !((EntityPlayer)entityIn).capabilities.isCreativeMode) + { + if (this.isItemStackDamageable()) + { + if (this.attemptDamageItem(amount, entityIn.getRNG(), entityIn instanceof EntityPlayerMP ? (EntityPlayerMP)entityIn : null)) + { + entityIn.renderBrokenItemStack(this); + this.shrink(1); + + if (entityIn instanceof EntityPlayer) + { + EntityPlayer entityplayer = (EntityPlayer)entityIn; + entityplayer.addStat(StatList.getObjectBreakStats(this.item)); + } + + this.itemDamage = 0; + } + } + } + } + + /** + * Calls the delegated method to the Item to damage the incoming Entity, and if necessary, triggers a stats + * increase. + */ + public void hitEntity(EntityLivingBase entityIn, EntityPlayer playerIn) + { + boolean flag = this.item.hitEntity(this, entityIn, playerIn); + + if (flag) + { + playerIn.addStat(StatList.getObjectUseStats(this.item)); + } + } + + /** + * Called when a Block is destroyed using this ItemStack + */ + public void onBlockDestroyed(World worldIn, IBlockState blockIn, BlockPos pos, EntityPlayer playerIn) + { + boolean flag = this.getItem().onBlockDestroyed(this, worldIn, blockIn, pos, playerIn); + + if (flag) + { + playerIn.addStat(StatList.getObjectUseStats(this.item)); + } + } + + /** + * Check whether the given Block can be harvested using this ItemStack. + */ + public boolean canHarvestBlock(IBlockState blockIn) + { + return this.getItem().canHarvestBlock(blockIn, this); + } + + public boolean interactWithEntity(EntityPlayer playerIn, EntityLivingBase entityIn, EnumHand hand) + { + return this.getItem().itemInteractionForEntity(this, playerIn, entityIn, hand); + } + + /** + * Returns a new stack with the same properties. + */ + public ItemStack copy() + { + ItemStack itemstack = new ItemStack(this.item, this.stackSize, this.itemDamage, this.capabilities != null ? this.capabilities.serializeNBT() : null); + itemstack.setAnimationsToGo(this.getAnimationsToGo()); + + if (this.stackTagCompound != null) + { + itemstack.stackTagCompound = this.stackTagCompound.copy(); + } + + return itemstack; + } + + public static boolean areItemStackTagsEqual(ItemStack stackA, ItemStack stackB) + { + if (stackA.isEmpty() && stackB.isEmpty()) + { + return true; + } + else if (!stackA.isEmpty() && !stackB.isEmpty()) + { + if (stackA.stackTagCompound == null && stackB.stackTagCompound != null) + { + return false; + } + else + { + return (stackA.stackTagCompound == null || stackA.stackTagCompound.equals(stackB.stackTagCompound)) && stackA.areCapsCompatible(stackB); + } + } + else + { + return false; + } + } + + /** + * compares ItemStack argument1 with ItemStack argument2; returns true if both ItemStacks are equal + */ + public static boolean areItemStacksEqual(ItemStack stackA, ItemStack stackB) + { + if (stackA.isEmpty() && stackB.isEmpty()) + { + return true; + } + else + { + return !stackA.isEmpty() && !stackB.isEmpty() ? stackA.isItemStackEqual(stackB) : false; + } + } + + /** + * compares ItemStack argument to the instance ItemStack; returns true if both ItemStacks are equal + */ + private boolean isItemStackEqual(ItemStack other) + { + if (this.stackSize != other.stackSize) + { + return false; + } + else if (this.getItem() != other.getItem()) + { + return false; + } + else if (this.itemDamage != other.itemDamage) + { + return false; + } + else if (this.stackTagCompound == null && other.stackTagCompound != null) + { + return false; + } + else + { + return (this.stackTagCompound == null || this.stackTagCompound.equals(other.stackTagCompound)) && this.areCapsCompatible(other); + } + } + + /** + * Compares Item and damage value of the two stacks + */ + public static boolean areItemsEqual(ItemStack stackA, ItemStack stackB) + { + if (stackA == stackB) + { + return true; + } + else + { + return !stackA.isEmpty() && !stackB.isEmpty() ? stackA.isItemEqual(stackB) : false; + } + } + + public static boolean areItemsEqualIgnoreDurability(ItemStack stackA, ItemStack stackB) + { + if (stackA == stackB) + { + return true; + } + else + { + return !stackA.isEmpty() && !stackB.isEmpty() ? stackA.isItemEqualIgnoreDurability(stackB) : false; + } + } + + /** + * compares ItemStack argument to the instance ItemStack; returns true if the Items contained in both ItemStacks are + * equal + */ + public boolean isItemEqual(ItemStack other) + { + return !other.isEmpty() && this.item == other.item && this.itemDamage == other.itemDamage; + } + + public boolean isItemEqualIgnoreDurability(ItemStack stack) + { + if (!this.isItemStackDamageable()) + { + return this.isItemEqual(stack); + } + else + { + return !stack.isEmpty() && this.item == stack.item; + } + } + + public String getUnlocalizedName() + { + return this.getItem().getUnlocalizedName(this); + } + + public String toString() + { + return this.stackSize + "x" + this.getItem().getUnlocalizedName() + "@" + this.itemDamage; + } + + /** + * Called each tick as long the ItemStack in on player inventory. Used to progress the pickup animation and update + * maps. + */ + public void updateAnimation(World worldIn, Entity entityIn, int inventorySlot, boolean isCurrentItem) + { + if (this.animationsToGo > 0) + { + --this.animationsToGo; + } + + if (this.item != null) + { + this.item.onUpdate(this, worldIn, entityIn, inventorySlot, isCurrentItem); + } + } + + public void onCrafting(World worldIn, EntityPlayer playerIn, int amount) + { + playerIn.addStat(StatList.getCraftStats(this.item), amount); + this.getItem().onCreated(this, worldIn, playerIn); + } + + public int getMaxItemUseDuration() + { + return this.getItem().getMaxItemUseDuration(this); + } + + public EnumAction getItemUseAction() + { + return this.getItem().getItemUseAction(this); + } + + /** + * Called when the player releases the use item button. + */ + public void onPlayerStoppedUsing(World worldIn, EntityLivingBase entityLiving, int timeLeft) + { + this.getItem().onPlayerStoppedUsing(this, worldIn, entityLiving, timeLeft); + } + + /** + * Returns true if the ItemStack has an NBTTagCompound. Currently used to store enchantments. + */ + public boolean hasTagCompound() + { + return !this.isEmpty && this.stackTagCompound != null; + } + + /** + * Returns the NBTTagCompound of the ItemStack. + */ + @Nullable + public NBTTagCompound getTagCompound() + { + return this.stackTagCompound; + } + + public NBTTagCompound getOrCreateSubCompound(String key) + { + if (this.stackTagCompound != null && this.stackTagCompound.hasKey(key, 10)) + { + return this.stackTagCompound.getCompoundTag(key); + } + else + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + this.setTagInfo(key, nbttagcompound); + return nbttagcompound; + } + } + + /** + * Get an NBTTagCompound from this stack's NBT data. + */ + @Nullable + public NBTTagCompound getSubCompound(String key) + { + return this.stackTagCompound != null && this.stackTagCompound.hasKey(key, 10) ? this.stackTagCompound.getCompoundTag(key) : null; + } + + public void removeSubCompound(String key) + { + if (this.stackTagCompound != null && this.stackTagCompound.hasKey(key, 10)) + { + this.stackTagCompound.removeTag(key); + } + } + + public NBTTagList getEnchantmentTagList() + { + return this.stackTagCompound != null ? this.stackTagCompound.getTagList("ench", 10) : new NBTTagList(); + } + + /** + * Assigns a NBTTagCompound to the ItemStack, minecraft validates that only non-stackable items can have it. + */ + public void setTagCompound(@Nullable NBTTagCompound nbt) + { + this.stackTagCompound = nbt; + } + + /** + * returns the display name of the itemstack + */ + public String getDisplayName() + { + NBTTagCompound nbttagcompound = this.getSubCompound("display"); + + if (nbttagcompound != null) + { + if (nbttagcompound.hasKey("Name", 8)) + { + return nbttagcompound.getString("Name"); + } + + if (nbttagcompound.hasKey("LocName", 8)) + { + return I18n.translateToLocal(nbttagcompound.getString("LocName")); + } + } + + return this.getItem().getItemStackDisplayName(this); + } + + public ItemStack setTranslatableName(String p_190924_1_) + { + this.getOrCreateSubCompound("display").setString("LocName", p_190924_1_); + return this; + } + + public ItemStack setStackDisplayName(String displayName) + { + this.getOrCreateSubCompound("display").setString("Name", displayName); + return this; + } + + /** + * Clear any custom name set for this ItemStack + */ + public void clearCustomName() + { + NBTTagCompound nbttagcompound = this.getSubCompound("display"); + + if (nbttagcompound != null) + { + nbttagcompound.removeTag("Name"); + + if (nbttagcompound.hasNoTags()) + { + this.removeSubCompound("display"); + } + } + + if (this.stackTagCompound != null && this.stackTagCompound.hasNoTags()) + { + this.stackTagCompound = null; + } + } + + /** + * Returns true if the itemstack has a display name + */ + public boolean hasDisplayName() + { + NBTTagCompound nbttagcompound = this.getSubCompound("display"); + return nbttagcompound != null && nbttagcompound.hasKey("Name", 8); + } + + /** + * Return a list of strings containing information about the item + */ + @SideOnly(Side.CLIENT) + public List getTooltip(@Nullable EntityPlayer playerIn, ITooltipFlag advanced) + { + List list = Lists.newArrayList(); + String s = this.getDisplayName(); + + if (this.hasDisplayName()) + { + s = TextFormatting.ITALIC + s; + } + + s = s + TextFormatting.RESET; + + if (advanced.isAdvanced()) + { + String s1 = ""; + + if (!s.isEmpty()) + { + s = s + " ("; + s1 = ")"; + } + + int i = Item.getIdFromItem(this.item); + + if (this.getHasSubtypes()) + { + s = s + String.format("#%04d/%d%s", i, this.itemDamage, s1); + } + else + { + s = s + String.format("#%04d%s", i, s1); + } + } + else if (!this.hasDisplayName() && this.item == Items.FILLED_MAP) + { + s = s + " #" + this.itemDamage; + } + + list.add(s); + int i1 = 0; + + if (this.hasTagCompound() && this.stackTagCompound.hasKey("HideFlags", 99)) + { + i1 = this.stackTagCompound.getInteger("HideFlags"); + } + + if ((i1 & 32) == 0) + { + this.getItem().addInformation(this, playerIn == null ? null : playerIn.world, list, advanced); + } + + if (this.hasTagCompound()) + { + if ((i1 & 1) == 0) + { + NBTTagList nbttaglist = this.getEnchantmentTagList(); + + for (int j = 0; j < nbttaglist.tagCount(); ++j) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(j); + int k = nbttagcompound.getShort("id"); + int l = nbttagcompound.getShort("lvl"); + Enchantment enchantment = Enchantment.getEnchantmentByID(k); + + if (enchantment != null) + { + list.add(enchantment.getTranslatedName(l)); + } + } + } + + if (this.stackTagCompound.hasKey("display", 10)) + { + NBTTagCompound nbttagcompound1 = this.stackTagCompound.getCompoundTag("display"); + + if (nbttagcompound1.hasKey("color", 3)) + { + if (advanced.isAdvanced()) + { + list.add(I18n.translateToLocalFormatted("item.color", String.format("#%06X", nbttagcompound1.getInteger("color")))); + } + else + { + list.add(TextFormatting.ITALIC + I18n.translateToLocal("item.dyed")); + } + } + + if (nbttagcompound1.getTagId("Lore") == 9) + { + NBTTagList nbttaglist3 = nbttagcompound1.getTagList("Lore", 8); + + if (!nbttaglist3.hasNoTags()) + { + for (int l1 = 0; l1 < nbttaglist3.tagCount(); ++l1) + { + list.add(TextFormatting.DARK_PURPLE + "" + TextFormatting.ITALIC + nbttaglist3.getStringTagAt(l1)); + } + } + } + } + } + + for (EntityEquipmentSlot entityequipmentslot : EntityEquipmentSlot.values()) + { + Multimap multimap = this.getAttributeModifiers(entityequipmentslot); + + if (!multimap.isEmpty() && (i1 & 2) == 0) + { + list.add(""); + list.add(I18n.translateToLocal("item.modifiers." + entityequipmentslot.getName())); + + for (Entry entry : multimap.entries()) + { + AttributeModifier attributemodifier = entry.getValue(); + double d0 = attributemodifier.getAmount(); + boolean flag = false; + + if (playerIn != null) + { + if (attributemodifier.getID() == Item.ATTACK_DAMAGE_MODIFIER) + { + d0 = d0 + playerIn.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).getBaseValue(); + d0 = d0 + (double)EnchantmentHelper.getModifierForCreature(this, EnumCreatureAttribute.UNDEFINED); + flag = true; + } + else if (attributemodifier.getID() == Item.ATTACK_SPEED_MODIFIER) + { + d0 += playerIn.getEntityAttribute(SharedMonsterAttributes.ATTACK_SPEED).getBaseValue(); + flag = true; + } + } + + double d1; + + if (attributemodifier.getOperation() != 1 && attributemodifier.getOperation() != 2) + { + d1 = d0; + } + else + { + d1 = d0 * 100.0D; + } + + if (flag) + { + list.add(" " + I18n.translateToLocalFormatted("attribute.modifier.equals." + attributemodifier.getOperation(), DECIMALFORMAT.format(d1), I18n.translateToLocal("attribute.name." + (String)entry.getKey()))); + } + else if (d0 > 0.0D) + { + list.add(TextFormatting.BLUE + " " + I18n.translateToLocalFormatted("attribute.modifier.plus." + attributemodifier.getOperation(), DECIMALFORMAT.format(d1), I18n.translateToLocal("attribute.name." + (String)entry.getKey()))); + } + else if (d0 < 0.0D) + { + d1 = d1 * -1.0D; + list.add(TextFormatting.RED + " " + I18n.translateToLocalFormatted("attribute.modifier.take." + attributemodifier.getOperation(), DECIMALFORMAT.format(d1), I18n.translateToLocal("attribute.name." + (String)entry.getKey()))); + } + } + } + } + + if (this.hasTagCompound() && this.getTagCompound().getBoolean("Unbreakable") && (i1 & 4) == 0) + { + list.add(TextFormatting.BLUE + I18n.translateToLocal("item.unbreakable")); + } + + if (this.hasTagCompound() && this.stackTagCompound.hasKey("CanDestroy", 9) && (i1 & 8) == 0) + { + NBTTagList nbttaglist1 = this.stackTagCompound.getTagList("CanDestroy", 8); + + if (!nbttaglist1.hasNoTags()) + { + list.add(""); + list.add(TextFormatting.GRAY + I18n.translateToLocal("item.canBreak")); + + for (int j1 = 0; j1 < nbttaglist1.tagCount(); ++j1) + { + Block block = Block.getBlockFromName(nbttaglist1.getStringTagAt(j1)); + + if (block != null) + { + list.add(TextFormatting.DARK_GRAY + block.getLocalizedName()); + } + else + { + list.add(TextFormatting.DARK_GRAY + "missingno"); + } + } + } + } + + if (this.hasTagCompound() && this.stackTagCompound.hasKey("CanPlaceOn", 9) && (i1 & 16) == 0) + { + NBTTagList nbttaglist2 = this.stackTagCompound.getTagList("CanPlaceOn", 8); + + if (!nbttaglist2.hasNoTags()) + { + list.add(""); + list.add(TextFormatting.GRAY + I18n.translateToLocal("item.canPlace")); + + for (int k1 = 0; k1 < nbttaglist2.tagCount(); ++k1) + { + Block block1 = Block.getBlockFromName(nbttaglist2.getStringTagAt(k1)); + + if (block1 != null) + { + list.add(TextFormatting.DARK_GRAY + block1.getLocalizedName()); + } + else + { + list.add(TextFormatting.DARK_GRAY + "missingno"); + } + } + } + } + + if (advanced.isAdvanced()) + { + if (this.isItemDamaged()) + { + list.add(I18n.translateToLocalFormatted("item.durability", this.getMaxDamage() - this.getItemDamage(), this.getMaxDamage())); + } + + list.add(TextFormatting.DARK_GRAY + ((ResourceLocation)Item.REGISTRY.getNameForObject(this.item)).toString()); + + if (this.hasTagCompound()) + { + list.add(TextFormatting.DARK_GRAY + I18n.translateToLocalFormatted("item.nbt_tags", this.getTagCompound().getKeySet().size())); + } + } + + net.minecraftforge.event.ForgeEventFactory.onItemTooltip(this, playerIn, list, advanced); + return list; + } + + @SideOnly(Side.CLIENT) + public boolean hasEffect() + { + return this.getItem().hasEffect(this); + } + + public EnumRarity getRarity() + { + return this.getItem().getRarity(this); + } + + /** + * True if it is a tool and has no enchantments to begin with + */ + public boolean isItemEnchantable() + { + if (!this.getItem().isEnchantable(this)) + { + return false; + } + else + { + return !this.isItemEnchanted(); + } + } + + /** + * Adds an enchantment with a desired level on the ItemStack. + */ + public void addEnchantment(Enchantment ench, int level) + { + if (this.stackTagCompound == null) + { + this.setTagCompound(new NBTTagCompound()); + } + + if (!this.stackTagCompound.hasKey("ench", 9)) + { + this.stackTagCompound.setTag("ench", new NBTTagList()); + } + + NBTTagList nbttaglist = this.stackTagCompound.getTagList("ench", 10); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setShort("id", (short)Enchantment.getEnchantmentID(ench)); + nbttagcompound.setShort("lvl", (short)((byte)level)); + nbttaglist.appendTag(nbttagcompound); + } + + /** + * True if the item has enchantment data + */ + public boolean isItemEnchanted() + { + if (this.stackTagCompound != null && this.stackTagCompound.hasKey("ench", 9)) + { + return !this.stackTagCompound.getTagList("ench", 10).hasNoTags(); + } + else + { + return false; + } + } + + public void setTagInfo(String key, NBTBase value) + { + if (this.stackTagCompound == null) + { + this.setTagCompound(new NBTTagCompound()); + } + + this.stackTagCompound.setTag(key, value); + } + + /** + * Returns whether this stack is always allowed to edit the world. Forces {@link + * net.minecraft.entity.player.EntityPlayer#canPlayerEdit EntityPlayer#canPlayerEdit} to return {@code true}. + * + * @return whether this stack ignores other restrictions on how a player can modify the world. + * @see Item#canItemEditBlocks + */ + public boolean canEditBlocks() + { + return this.getItem().canItemEditBlocks(); + } + + /** + * Return whether this stack is on an item frame. + */ + public boolean isOnItemFrame() + { + return this.itemFrame != null; + } + + /** + * Set the item frame this stack is on. + */ + public void setItemFrame(EntityItemFrame frame) + { + this.itemFrame = frame; + } + + /** + * Return the item frame this stack is on. Returns null if not on an item frame. + */ + @Nullable + public EntityItemFrame getItemFrame() + { + return this.isEmpty ? null : this.itemFrame; + } + + /** + * Get this stack's repair cost, or 0 if no repair cost is defined. + */ + public int getRepairCost() + { + return this.hasTagCompound() && this.stackTagCompound.hasKey("RepairCost", 3) ? this.stackTagCompound.getInteger("RepairCost") : 0; + } + + /** + * Set this stack's repair cost. + */ + public void setRepairCost(int cost) + { + if (!this.hasTagCompound()) + { + this.stackTagCompound = new NBTTagCompound(); + } + + this.stackTagCompound.setInteger("RepairCost", cost); + } + + /** + * Gets the attribute modifiers for this ItemStack. + * Will check for an NBT tag list containing modifiers for the stack. + */ + public Multimap getAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap; + + if (this.hasTagCompound() && this.stackTagCompound.hasKey("AttributeModifiers", 9)) + { + multimap = HashMultimap.create(); + NBTTagList nbttaglist = this.stackTagCompound.getTagList("AttributeModifiers", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + AttributeModifier attributemodifier = SharedMonsterAttributes.readAttributeModifierFromNBT(nbttagcompound); + + if (attributemodifier != null && (!nbttagcompound.hasKey("Slot", 8) || nbttagcompound.getString("Slot").equals(equipmentSlot.getName())) && attributemodifier.getID().getLeastSignificantBits() != 0L && attributemodifier.getID().getMostSignificantBits() != 0L) + { + multimap.put(nbttagcompound.getString("AttributeName"), attributemodifier); + } + } + } + else + { + multimap = this.getItem().getAttributeModifiers(equipmentSlot, this); + } + + return multimap; + } + + public void addAttributeModifier(String attributeName, AttributeModifier modifier, @Nullable EntityEquipmentSlot equipmentSlot) + { + if (this.stackTagCompound == null) + { + this.stackTagCompound = new NBTTagCompound(); + } + + if (!this.stackTagCompound.hasKey("AttributeModifiers", 9)) + { + this.stackTagCompound.setTag("AttributeModifiers", new NBTTagList()); + } + + NBTTagList nbttaglist = this.stackTagCompound.getTagList("AttributeModifiers", 10); + NBTTagCompound nbttagcompound = SharedMonsterAttributes.writeAttributeModifierToNBT(modifier); + nbttagcompound.setString("AttributeName", attributeName); + + if (equipmentSlot != null) + { + nbttagcompound.setString("Slot", equipmentSlot.getName()); + } + + nbttaglist.appendTag(nbttagcompound); + } + + /** + * Get a ChatComponent for this Item's display name that shows this Item on hover + */ + public ITextComponent getTextComponent() + { + TextComponentString textcomponentstring = new TextComponentString(this.getDisplayName()); + + if (this.hasDisplayName()) + { + textcomponentstring.getStyle().setItalic(Boolean.valueOf(true)); + } + + ITextComponent itextcomponent = (new TextComponentString("[")).appendSibling(textcomponentstring).appendText("]"); + + if (!this.isEmpty) + { + NBTTagCompound nbttagcompound = this.writeToNBT(new NBTTagCompound()); + itextcomponent.getStyle().setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new TextComponentString(nbttagcompound.toString()))); + itextcomponent.getStyle().setColor(this.getRarity().rarityColor); + } + + return itextcomponent; + } + + public boolean canDestroy(Block blockIn) + { + if (blockIn == this.canDestroyCacheBlock) + { + return this.canDestroyCacheResult; + } + else + { + this.canDestroyCacheBlock = blockIn; + + if (this.hasTagCompound() && this.stackTagCompound.hasKey("CanDestroy", 9)) + { + NBTTagList nbttaglist = this.stackTagCompound.getTagList("CanDestroy", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + Block block = Block.getBlockFromName(nbttaglist.getStringTagAt(i)); + + if (block == blockIn) + { + this.canDestroyCacheResult = true; + return true; + } + } + } + + this.canDestroyCacheResult = false; + return false; + } + } + + /** + * Returns whether this stack is explicitly allowed to be used on the given block via the {@code "CanPlaceOn"} NBT + * tag. + * + * @return whether the {@code "CanPlaceOn"} tag contains the given block. + * + * @param blockIn the block the NBT is being tested for + */ + public boolean canPlaceOn(Block blockIn) + { + if (blockIn == this.canPlaceOnCacheBlock) + { + return this.canPlaceOnCacheResult; + } + else + { + this.canPlaceOnCacheBlock = blockIn; + + if (this.hasTagCompound() && this.stackTagCompound.hasKey("CanPlaceOn", 9)) + { + NBTTagList nbttaglist = this.stackTagCompound.getTagList("CanPlaceOn", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + Block block = Block.getBlockFromName(nbttaglist.getStringTagAt(i)); + + if (block == blockIn) + { + this.canPlaceOnCacheResult = true; + return true; + } + } + } + + this.canPlaceOnCacheResult = false; + return false; + } + } + + public int getAnimationsToGo() + { + return this.animationsToGo; + } + + public void setAnimationsToGo(int animations) + { + this.animationsToGo = animations; + } + + public int getCount() + { + return this.isEmpty ? 0 : this.stackSize; + } + + public void setCount(int size) + { + this.stackSize = size; + this.updateEmptyState(); + } + + public void grow(int quantity) + { + this.setCount(this.stackSize + quantity); + } + + public void shrink(int quantity) + { + this.grow(-quantity); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return this.isEmpty || this.capabilities == null ? false : this.capabilities.hasCapability(capability, facing); + } + + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return this.isEmpty || this.capabilities == null ? null : this.capabilities.getCapability(capability, facing); + } + + public void deserializeNBT(NBTTagCompound nbt) + { + // TODO do this better while respecting new rules + final ItemStack itemStack = new ItemStack(nbt); + this.stackTagCompound = itemStack.stackTagCompound; + this.capNBT = itemStack.capNBT; + } + + public NBTTagCompound serializeNBT() + { + NBTTagCompound ret = new NBTTagCompound(); + this.writeToNBT(ret); + return ret; + } + + public boolean areCapsCompatible(ItemStack other) + { + if (this.capabilities == null) + { + if (other.capabilities == null) + { + return true; + } + else + { + return other.capabilities.areCompatible(null); + } + } + else + { + return this.capabilities.areCompatible(other.capabilities); + } + } + + /** + * Set up forge's ItemStack additions. + */ + private void forgeInit() + { + Item item = getItemRaw(); + if (item != null) + { + this.delegate = item.delegate; + net.minecraftforge.common.capabilities.ICapabilityProvider provider = item.initCapabilities(this, this.capNBT); + this.capabilities = net.minecraftforge.event.ForgeEventFactory.gatherCapabilities(this, provider); + if (this.capNBT != null && this.capabilities != null) this.capabilities.deserializeNBT(this.capNBT); + } + } + + /** + * Internal call to get the actual item, not the delegate. + * In all other methods, FML replaces calls to this.item with the item delegate. + */ + @Nullable + private Item getItemRaw() + { + return this.item; + } + + /** + * Modeled after ItemStack.areItemStacksEqual + * Uses Item.getNBTShareTag for comparison instead of NBT and capabilities. + * Only used for comparing itemStacks that were transferred from server to client using Item.getNBTShareTag. + */ + public static boolean areItemStacksEqualUsingNBTShareTag(ItemStack stackA, ItemStack stackB) + { + if (stackA.isEmpty()) + return stackB.isEmpty(); + else + return !stackB.isEmpty() && stackA.isItemStackEqualUsingNBTShareTag(stackB); + } + + /** + * Modeled after ItemStack.isItemStackEqual + * Uses Item.getNBTShareTag for comparison instead of NBT and capabilities. + * Only used for comparing itemStacks that were transferred from server to client using Item.getNBTShareTag. + */ + private boolean isItemStackEqualUsingNBTShareTag(ItemStack other) + { + return this.stackSize == other.stackSize && this.getItem() == other.getItem() && this.itemDamage == other.itemDamage && areItemStackShareTagsEqual(this, other); + } + + /** + * Modeled after ItemStack.areItemStackTagsEqual + * Uses Item.getNBTShareTag for comparison instead of NBT and capabilities. + * Only used for comparing itemStacks that were transferred from server to client using Item.getNBTShareTag. + */ + public static boolean areItemStackShareTagsEqual(ItemStack stackA, ItemStack stackB) + { + NBTTagCompound shareTagA = stackA.getItem().getNBTShareTag(stackA); + NBTTagCompound shareTagB = stackB.getItem().getNBTShareTag(stackB); + if (shareTagA == null) + return shareTagB == null; + else + return shareTagB != null && shareTagA.equals(shareTagB); + } + + /** + * + * Should this item, when held, allow sneak-clicks to pass through to the underlying block? + * + * @param world The world + * @param pos Block position in world + * @param player The Player that is wielding the item + * @return + */ + public boolean doesSneakBypassUse(net.minecraft.world.IBlockAccess world, BlockPos pos, EntityPlayer player) + { + return this.isEmpty() || this.getItem().doesSneakBypassUse(this, world, pos, player); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemSword.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSword.java new file mode 100644 index 0000000..f08828a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemSword.java @@ -0,0 +1,139 @@ +package net.minecraft.item; + +import com.google.common.collect.Multimap; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemSword extends Item +{ + private final float attackDamage; + private final Item.ToolMaterial material; + + public ItemSword(Item.ToolMaterial material) + { + this.material = material; + this.maxStackSize = 1; + this.setMaxDamage(material.getMaxUses()); + this.setCreativeTab(CreativeTabs.COMBAT); + this.attackDamage = 3.0F + material.getAttackDamage(); + } + + /** + * Returns the amount of damage this item will deal. One heart of damage is equal to 2 damage points. + */ + public float getAttackDamage() + { + return this.material.getAttackDamage(); + } + + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + Block block = state.getBlock(); + + if (block == Blocks.WEB) + { + return 15.0F; + } + else + { + Material material = state.getMaterial(); + return material != Material.PLANTS && material != Material.VINE && material != Material.CORAL && material != Material.LEAVES && material != Material.GOURD ? 1.0F : 1.5F; + } + } + + /** + * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise + * the damage on the stack. + */ + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) + { + stack.damageItem(1, attacker); + return true; + } + + /** + * Called when a Block is destroyed using this Item. Return true to trigger the "Use Item" statistic. + */ + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + if ((double)state.getBlockHardness(worldIn, pos) != 0.0D) + { + stack.damageItem(2, entityLiving); + } + + return true; + } + + /** + * Check whether this Item can harvest the given Block + */ + public boolean canHarvestBlock(IBlockState blockIn) + { + return blockIn.getBlock() == Blocks.WEB; + } + + /** + * Returns True is the item is renderer in full 3D when hold. + */ + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return true; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return this.material.getEnchantability(); + } + + /** + * Return the name for this tool's material. + */ + public String getToolMaterialName() + { + return this.material.toString(); + } + + /** + * Return whether this item is repairable in an anvil. + * + * @param toRepair the {@code ItemStack} being repaired + * @param repair the {@code ItemStack} being used to perform the repair + */ + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + ItemStack mat = this.material.getRepairItemStack(); + if (!mat.isEmpty() && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, repair, false)) return true; + return super.getIsRepairable(toRepair, repair); + } + + /** + * Gets a map of item attribute modifiers, used by ItemSword to increase hit damage. + */ + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); + + if (equipmentSlot == EntityEquipmentSlot.MAINHAND) + { + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Weapon modifier", (double)this.attackDamage, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Weapon modifier", -2.4000000953674316D, 0)); + } + + return multimap; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemTippedArrow.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemTippedArrow.java new file mode 100644 index 0000000..5e1a528 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemTippedArrow.java @@ -0,0 +1,64 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.init.PotionTypes; +import net.minecraft.potion.PotionType; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemTippedArrow extends ItemArrow +{ + @SideOnly(Side.CLIENT) + public ItemStack getDefaultInstance() + { + return PotionUtils.addPotionToItemStack(super.getDefaultInstance(), PotionTypes.POISON); + } + + public EntityArrow createArrow(World worldIn, ItemStack stack, EntityLivingBase shooter) + { + EntityTippedArrow entitytippedarrow = new EntityTippedArrow(worldIn, shooter); + entitytippedarrow.setPotionEffect(stack); + return entitytippedarrow; + } + + /** + * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) + */ + public void getSubItems(CreativeTabs tab, NonNullList items) + { + if (this.isInCreativeTab(tab)) + { + for (PotionType potiontype : PotionType.REGISTRY) + { + if (!potiontype.getEffects().isEmpty()) + { + items.add(PotionUtils.addPotionToItemStack(new ItemStack(this), potiontype)); + } + } + } + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + PotionUtils.addPotionTooltip(stack, tooltip, 0.125F); + } + + public String getItemStackDisplayName(ItemStack stack) + { + return I18n.translateToLocal(PotionUtils.getPotionFromItem(stack).getNamePrefixed("tipped_arrow.effect.")); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemTool.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemTool.java new file mode 100644 index 0000000..ca6e6af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemTool.java @@ -0,0 +1,167 @@ +package net.minecraft.item; + +import com.google.common.collect.Multimap; +import java.util.Set; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemTool extends Item +{ + private final Set effectiveBlocks; + protected float efficiency; + /** Damage versus entities. */ + protected float attackDamage; + protected float attackSpeed; + /** The material this tool is made from. */ + protected Item.ToolMaterial toolMaterial; + + protected ItemTool(float attackDamageIn, float attackSpeedIn, Item.ToolMaterial materialIn, Set effectiveBlocksIn) + { + this.efficiency = 4.0F; + this.toolMaterial = materialIn; + this.effectiveBlocks = effectiveBlocksIn; + this.maxStackSize = 1; + this.setMaxDamage(materialIn.getMaxUses()); + this.efficiency = materialIn.getEfficiency(); + this.attackDamage = attackDamageIn + materialIn.getAttackDamage(); + this.attackSpeed = attackSpeedIn; + this.setCreativeTab(CreativeTabs.TOOLS); + if (this instanceof ItemPickaxe) + { + toolClass = "pickaxe"; + } + else if (this instanceof ItemAxe) + { + toolClass = "axe"; + } + else if (this instanceof ItemSpade) + { + toolClass = "shovel"; + } + } + + protected ItemTool(Item.ToolMaterial materialIn, Set effectiveBlocksIn) + { + this(0.0F, 0.0F, materialIn, effectiveBlocksIn); + } + + public float getDestroySpeed(ItemStack stack, IBlockState state) + { + for (String type : getToolClasses(stack)) + { + if (state.getBlock().isToolEffective(type, state)) + return efficiency; + } + return this.effectiveBlocks.contains(state.getBlock()) ? this.efficiency : 1.0F; + } + + /** + * Current implementations of this method in child classes do not use the entry argument beside ev. They just raise + * the damage on the stack. + */ + public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) + { + stack.damageItem(2, attacker); + return true; + } + + /** + * Called when a Block is destroyed using this Item. Return true to trigger the "Use Item" statistic. + */ + public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving) + { + if (!worldIn.isRemote && (double)state.getBlockHardness(worldIn, pos) != 0.0D) + { + stack.damageItem(1, entityLiving); + } + + return true; + } + + /** + * Returns True is the item is renderer in full 3D when hold. + */ + @SideOnly(Side.CLIENT) + public boolean isFull3D() + { + return true; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + public int getItemEnchantability() + { + return this.toolMaterial.getEnchantability(); + } + + /** + * Return the name for this tool's material. + */ + public String getToolMaterialName() + { + return this.toolMaterial.toString(); + } + + /** + * Return whether this item is repairable in an anvil. + * + * @param toRepair the {@code ItemStack} being repaired + * @param repair the {@code ItemStack} being used to perform the repair + */ + public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) + { + ItemStack mat = this.toolMaterial.getRepairItemStack(); + if (!mat.isEmpty() && net.minecraftforge.oredict.OreDictionary.itemMatches(mat, repair, false)) return true; + return super.getIsRepairable(toRepair, repair); + } + + /** + * Gets a map of item attribute modifiers, used by ItemSword to increase hit damage. + */ + public Multimap getItemAttributeModifiers(EntityEquipmentSlot equipmentSlot) + { + Multimap multimap = super.getItemAttributeModifiers(equipmentSlot); + + if (equipmentSlot == EntityEquipmentSlot.MAINHAND) + { + multimap.put(SharedMonsterAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Tool modifier", (double)this.attackDamage, 0)); + multimap.put(SharedMonsterAttributes.ATTACK_SPEED.getName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool modifier", (double)this.attackSpeed, 0)); + } + + return multimap; + } + + /*===================================== FORGE START =================================*/ + @javax.annotation.Nullable + private String toolClass; + @Override + public int getHarvestLevel(ItemStack stack, String toolClass, @javax.annotation.Nullable net.minecraft.entity.player.EntityPlayer player, @javax.annotation.Nullable IBlockState blockState) + { + int level = super.getHarvestLevel(stack, toolClass, player, blockState); + if (level == -1 && toolClass.equals(this.toolClass)) + { + return this.toolMaterial.getHarvestLevel(); + } + else + { + return level; + } + } + + @Override + public Set getToolClasses(ItemStack stack) + { + return toolClass != null ? com.google.common.collect.ImmutableSet.of(toolClass) : super.getToolClasses(stack); + } + /*===================================== FORGE END =================================*/ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemWritableBook.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemWritableBook.java new file mode 100644 index 0000000..66a2ee7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemWritableBook.java @@ -0,0 +1,60 @@ +package net.minecraft.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +public class ItemWritableBook extends Item +{ + public ItemWritableBook() + { + this.setMaxStackSize(1); + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + playerIn.openBook(itemstack, handIn); + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + + /** + * this method returns true if the book's NBT Tag List "pages" is valid + */ + public static boolean isNBTValid(NBTTagCompound nbt) + { + if (nbt == null) + { + return false; + } + else if (!nbt.hasKey("pages", 9)) + { + return false; + } + else + { + NBTTagList nbttaglist = nbt.getTagList("pages", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + String s = nbttaglist.getStringTagAt(i); + + if (s.length() > 32767) + { + return false; + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/ItemWrittenBook.java b/build/tmp/recompileMc/sources/net/minecraft/item/ItemWrittenBook.java new file mode 100644 index 0000000..6e7a256 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/ItemWrittenBook.java @@ -0,0 +1,169 @@ +package net.minecraft.item; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Slot; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.stats.StatList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.StringUtils; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentUtils; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemWrittenBook extends Item +{ + public ItemWrittenBook() + { + this.setMaxStackSize(1); + } + + public static boolean validBookTagContents(NBTTagCompound nbt) + { + if (!ItemWritableBook.isNBTValid(nbt)) + { + return false; + } + else if (!nbt.hasKey("title", 8)) + { + return false; + } + else + { + String s = nbt.getString("title"); + return s != null && s.length() <= 32 ? nbt.hasKey("author", 8) : false; + } + } + + /** + * Gets the generation of the book (how many times it has been cloned) + */ + public static int getGeneration(ItemStack book) + { + return book.getTagCompound().getInteger("generation"); + } + + public String getItemStackDisplayName(ItemStack stack) + { + if (stack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + String s = nbttagcompound.getString("title"); + + if (!StringUtils.isNullOrEmpty(s)) + { + return s; + } + } + + return super.getItemStackDisplayName(stack); + } + + /** + * allows items to add custom lines of information to the mouseover description + */ + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) + { + if (stack.hasTagCompound()) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + String s = nbttagcompound.getString("author"); + + if (!StringUtils.isNullOrEmpty(s)) + { + tooltip.add(TextFormatting.GRAY + I18n.translateToLocalFormatted("book.byAuthor", s)); + } + + tooltip.add(TextFormatting.GRAY + I18n.translateToLocal("book.generation." + nbttagcompound.getInteger("generation"))); + } + } + + /** + * Called when the equipped item is right clicked. + */ + public ActionResult onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) + { + ItemStack itemstack = playerIn.getHeldItem(handIn); + + if (!worldIn.isRemote) + { + this.resolveContents(itemstack, playerIn); + } + + playerIn.openBook(itemstack, handIn); + playerIn.addStat(StatList.getObjectUseStats(this)); + return new ActionResult(EnumActionResult.SUCCESS, itemstack); + } + + private void resolveContents(ItemStack stack, EntityPlayer player) + { + if (stack.getTagCompound() != null) + { + NBTTagCompound nbttagcompound = stack.getTagCompound(); + + if (!nbttagcompound.getBoolean("resolved")) + { + nbttagcompound.setBoolean("resolved", true); + + if (validBookTagContents(nbttagcompound)) + { + NBTTagList nbttaglist = nbttagcompound.getTagList("pages", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + String s = nbttaglist.getStringTagAt(i); + ITextComponent itextcomponent; + + try + { + itextcomponent = ITextComponent.Serializer.fromJsonLenient(s); + itextcomponent = TextComponentUtils.processComponent(player, itextcomponent, player); + } + catch (Exception var9) + { + itextcomponent = new TextComponentString(s); + } + + nbttaglist.set(i, new NBTTagString(ITextComponent.Serializer.componentToJson(itextcomponent))); + } + + nbttagcompound.setTag("pages", nbttaglist); + + if (player instanceof EntityPlayerMP && player.getHeldItemMainhand() == stack) + { + Slot slot = player.openContainer.getSlotFromInventory(player.inventory, player.inventory.currentItem); + ((EntityPlayerMP)player).connection.sendPacket(new SPacketSetSlot(0, slot.slotNumber, stack)); + } + } + } + } + } + + /** + * Returns true if this item has an enchantment glint. By default, this returns + * stack.isItemEnchanted(), but other items can override it (for instance, written books always return + * true). + * + * Note that if you override this method, you generally want to also call the super version (on {@link Item}) to get + * the glint for enchanted items. Of course, that is unnecessary if the overwritten version always returns true. + */ + @SideOnly(Side.CLIENT) + public boolean hasEffect(ItemStack stack) + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/CraftingManager.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/CraftingManager.java new file mode 100644 index 0000000..de7ad15 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/CraftingManager.java @@ -0,0 +1,263 @@ +package net.minecraft.item.crafting; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.Reader; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; +import java.util.Iterator; +import javax.annotation.Nullable; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraft.world.World; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CraftingManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static int nextAvailableId; + public static final RegistryNamespaced REGISTRY = net.minecraftforge.registries.GameData.getWrapper(IRecipe.class); + + public static boolean init() + { + try + { + register("armordye", new RecipesArmorDyes()); + register("bookcloning", new RecipeBookCloning()); + register("mapcloning", new RecipesMapCloning()); + register("mapextending", new RecipesMapExtending()); + register("fireworks", new RecipeFireworks()); + register("repairitem", new RecipeRepairItem()); + register("tippedarrow", new RecipeTippedArrow()); + register("bannerduplicate", new RecipesBanners.RecipeDuplicatePattern()); + register("banneraddpattern", new RecipesBanners.RecipeAddPattern()); + register("shielddecoration", new ShieldRecipes.Decoration()); + register("shulkerboxcoloring", new ShulkerBoxRecipes.ShulkerBoxColoring()); + return parseJsonRecipes(); + } + catch (Throwable var1) + { + return false; + } + } + + private static boolean parseJsonRecipes() + { + FileSystem filesystem = null; + Gson gson = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create(); + boolean flag1; + + try + { + URL url = CraftingManager.class.getResource("/assets/.mcassetsroot"); + + if (url != null) + { + URI uri = url.toURI(); + Path path; + + if ("file".equals(uri.getScheme())) + { + path = Paths.get(CraftingManager.class.getResource("/assets/minecraft/recipes").toURI()); + } + else + { + if (!"jar".equals(uri.getScheme())) + { + LOGGER.error("Unsupported scheme " + uri + " trying to list all recipes"); + boolean flag2 = false; + return flag2; + } + + filesystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); + path = filesystem.getPath("/assets/minecraft/recipes"); + } + + Iterator iterator = Files.walk(path).iterator(); + + while (iterator.hasNext()) + { + Path path1 = iterator.next(); + + if ("json".equals(FilenameUtils.getExtension(path1.toString()))) + { + Path path2 = path.relativize(path1); + String s = FilenameUtils.removeExtension(path2.toString()).replaceAll("\\\\", "/"); + ResourceLocation resourcelocation = new ResourceLocation(s); + BufferedReader bufferedreader = null; + + try + { + boolean flag; + + try + { + bufferedreader = Files.newBufferedReader(path1); + register(s, parseRecipeJson((JsonObject)JsonUtils.fromJson(gson, bufferedreader, JsonObject.class))); + } + catch (JsonParseException jsonparseexception) + { + LOGGER.error("Parsing error loading recipe " + resourcelocation, (Throwable)jsonparseexception); + flag = false; + return flag; + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't read recipe " + resourcelocation + " from " + path1, (Throwable)ioexception); + flag = false; + return flag; + } + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + } + } + + return true; + } + + LOGGER.error("Couldn't find .mcassetsroot"); + flag1 = false; + } + catch (IOException | URISyntaxException urisyntaxexception) + { + LOGGER.error("Couldn't get a list of all recipe files", (Throwable)urisyntaxexception); + flag1 = false; + return flag1; + } + finally + { + IOUtils.closeQuietly((Closeable)filesystem); + } + + return flag1; + } + + private static IRecipe parseRecipeJson(JsonObject p_193376_0_) + { + String s = JsonUtils.getString(p_193376_0_, "type"); + + if ("crafting_shaped".equals(s)) + { + return ShapedRecipes.deserialize(p_193376_0_); + } + else if ("crafting_shapeless".equals(s)) + { + return ShapelessRecipes.deserialize(p_193376_0_); + } + else + { + throw new JsonSyntaxException("Invalid or unsupported recipe type '" + s + "'"); + } + } + + //Forge: Made private use GameData/Registry events! + private static void register(String name, IRecipe recipe) + { + register(new ResourceLocation(name), recipe); + } + + //Forge: Made private use GameData/Registry events! + private static void register(ResourceLocation name, IRecipe recipe) + { + if (REGISTRY.containsKey(name)) + { + throw new IllegalStateException("Duplicate recipe ignored with ID " + name); + } + else + { + REGISTRY.register(nextAvailableId++, name, recipe); + } + } + + /** + * Retrieves an ItemStack that has multiple recipes for it. + */ + public static ItemStack findMatchingResult(InventoryCrafting craftMatrix, World worldIn) + { + for (IRecipe irecipe : REGISTRY) + { + if (irecipe.matches(craftMatrix, worldIn)) + { + return irecipe.getCraftingResult(craftMatrix); + } + } + + return ItemStack.EMPTY; + } + + @Nullable + public static IRecipe findMatchingRecipe(InventoryCrafting craftMatrix, World worldIn) + { + for (IRecipe irecipe : REGISTRY) + { + if (irecipe.matches(craftMatrix, worldIn)) + { + return irecipe; + } + } + + return null; + } + + public static NonNullList getRemainingItems(InventoryCrafting craftMatrix, World worldIn) + { + for (IRecipe irecipe : REGISTRY) + { + if (irecipe.matches(craftMatrix, worldIn)) + { + return irecipe.getRemainingItems(craftMatrix); + } + } + + NonNullList nonnulllist = NonNullList.withSize(craftMatrix.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + nonnulllist.set(i, craftMatrix.getStackInSlot(i)); + } + + return nonnulllist; + } + + @Nullable + public static IRecipe getRecipe(ResourceLocation name) + { + return REGISTRY.getObject(name); + } + + @Deprecated //DO NOT USE THIS + public static int getIDForRecipe(IRecipe recipe) + { + return REGISTRY.getIDForObject(recipe); + } + + @Deprecated //DO NOT USE THIS + @Nullable + public static IRecipe getRecipeById(int id) + { + return REGISTRY.getObjectById(id); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/FurnaceRecipes.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/FurnaceRecipes.java new file mode 100644 index 0000000..b3cf8c2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/FurnaceRecipes.java @@ -0,0 +1,179 @@ +package net.minecraft.item.crafting; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.block.Block; +import net.minecraft.block.BlockStoneBrick; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.Item; +import net.minecraft.item.ItemFishFood; +import net.minecraft.item.ItemStack; + +public class FurnaceRecipes +{ + private static final FurnaceRecipes SMELTING_BASE = new FurnaceRecipes(); + /** The list of smelting results. */ + private final Map smeltingList = Maps.newHashMap(); + /** A list which contains how many experience points each recipe output will give. */ + private final Map experienceList = Maps.newHashMap(); + + /** + * Returns an instance of FurnaceRecipes. + */ + public static FurnaceRecipes instance() + { + return SMELTING_BASE; + } + + private FurnaceRecipes() + { + this.addSmeltingRecipeForBlock(Blocks.IRON_ORE, new ItemStack(Items.IRON_INGOT), 0.7F); + this.addSmeltingRecipeForBlock(Blocks.GOLD_ORE, new ItemStack(Items.GOLD_INGOT), 1.0F); + this.addSmeltingRecipeForBlock(Blocks.DIAMOND_ORE, new ItemStack(Items.DIAMOND), 1.0F); + this.addSmeltingRecipeForBlock(Blocks.SAND, new ItemStack(Blocks.GLASS), 0.1F); + this.addSmelting(Items.PORKCHOP, new ItemStack(Items.COOKED_PORKCHOP), 0.35F); + this.addSmelting(Items.BEEF, new ItemStack(Items.COOKED_BEEF), 0.35F); + this.addSmelting(Items.CHICKEN, new ItemStack(Items.COOKED_CHICKEN), 0.35F); + this.addSmelting(Items.RABBIT, new ItemStack(Items.COOKED_RABBIT), 0.35F); + this.addSmelting(Items.MUTTON, new ItemStack(Items.COOKED_MUTTON), 0.35F); + this.addSmeltingRecipeForBlock(Blocks.COBBLESTONE, new ItemStack(Blocks.STONE), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STONEBRICK, 1, BlockStoneBrick.DEFAULT_META), new ItemStack(Blocks.STONEBRICK, 1, BlockStoneBrick.CRACKED_META), 0.1F); + this.addSmelting(Items.CLAY_BALL, new ItemStack(Items.BRICK), 0.3F); + this.addSmeltingRecipeForBlock(Blocks.CLAY, new ItemStack(Blocks.HARDENED_CLAY), 0.35F); + this.addSmeltingRecipeForBlock(Blocks.CACTUS, new ItemStack(Items.DYE, 1, EnumDyeColor.GREEN.getDyeDamage()), 0.2F); + this.addSmeltingRecipeForBlock(Blocks.LOG, new ItemStack(Items.COAL, 1, 1), 0.15F); + this.addSmeltingRecipeForBlock(Blocks.LOG2, new ItemStack(Items.COAL, 1, 1), 0.15F); + this.addSmeltingRecipeForBlock(Blocks.EMERALD_ORE, new ItemStack(Items.EMERALD), 1.0F); + this.addSmelting(Items.POTATO, new ItemStack(Items.BAKED_POTATO), 0.35F); + this.addSmeltingRecipeForBlock(Blocks.NETHERRACK, new ItemStack(Items.NETHERBRICK), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.SPONGE, 1, 1), new ItemStack(Blocks.SPONGE, 1, 0), 0.15F); + this.addSmelting(Items.CHORUS_FRUIT, new ItemStack(Items.CHORUS_FRUIT_POPPED), 0.1F); + + for (ItemFishFood.FishType itemfishfood$fishtype : ItemFishFood.FishType.values()) + { + if (itemfishfood$fishtype.canCook()) + { + this.addSmeltingRecipe(new ItemStack(Items.FISH, 1, itemfishfood$fishtype.getMetadata()), new ItemStack(Items.COOKED_FISH, 1, itemfishfood$fishtype.getMetadata()), 0.35F); + } + } + + this.addSmeltingRecipeForBlock(Blocks.COAL_ORE, new ItemStack(Items.COAL), 0.1F); + this.addSmeltingRecipeForBlock(Blocks.REDSTONE_ORE, new ItemStack(Items.REDSTONE), 0.7F); + this.addSmeltingRecipeForBlock(Blocks.LAPIS_ORE, new ItemStack(Items.DYE, 1, EnumDyeColor.BLUE.getDyeDamage()), 0.2F); + this.addSmeltingRecipeForBlock(Blocks.QUARTZ_ORE, new ItemStack(Items.QUARTZ), 0.2F); + this.addSmelting(Items.CHAINMAIL_HELMET, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.CHAINMAIL_CHESTPLATE, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.CHAINMAIL_LEGGINGS, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.CHAINMAIL_BOOTS, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_PICKAXE, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_SHOVEL, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_AXE, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_HOE, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_SWORD, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_HELMET, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_CHESTPLATE, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_LEGGINGS, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_BOOTS, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.IRON_HORSE_ARMOR, new ItemStack(Items.IRON_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_PICKAXE, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_SHOVEL, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_AXE, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_HOE, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_SWORD, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_HELMET, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_CHESTPLATE, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_LEGGINGS, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_BOOTS, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmelting(Items.GOLDEN_HORSE_ARMOR, new ItemStack(Items.GOLD_NUGGET), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.WHITE.getMetadata()), new ItemStack(Blocks.WHITE_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.ORANGE.getMetadata()), new ItemStack(Blocks.ORANGE_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.MAGENTA.getMetadata()), new ItemStack(Blocks.MAGENTA_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.LIGHT_BLUE.getMetadata()), new ItemStack(Blocks.LIGHT_BLUE_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.YELLOW.getMetadata()), new ItemStack(Blocks.YELLOW_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.LIME.getMetadata()), new ItemStack(Blocks.LIME_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.PINK.getMetadata()), new ItemStack(Blocks.PINK_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.GRAY.getMetadata()), new ItemStack(Blocks.GRAY_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.SILVER.getMetadata()), new ItemStack(Blocks.SILVER_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.CYAN.getMetadata()), new ItemStack(Blocks.CYAN_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.PURPLE.getMetadata()), new ItemStack(Blocks.PURPLE_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.BLUE.getMetadata()), new ItemStack(Blocks.BLUE_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.BROWN.getMetadata()), new ItemStack(Blocks.BROWN_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.GREEN.getMetadata()), new ItemStack(Blocks.GREEN_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.RED.getMetadata()), new ItemStack(Blocks.RED_GLAZED_TERRACOTTA), 0.1F); + this.addSmeltingRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 1, EnumDyeColor.BLACK.getMetadata()), new ItemStack(Blocks.BLACK_GLAZED_TERRACOTTA), 0.1F); + } + + /** + * Adds a smelting recipe, where the input item is an instance of Block. + */ + public void addSmeltingRecipeForBlock(Block input, ItemStack stack, float experience) + { + this.addSmelting(Item.getItemFromBlock(input), stack, experience); + } + + /** + * Adds a smelting recipe using an Item as the input item. + */ + public void addSmelting(Item input, ItemStack stack, float experience) + { + this.addSmeltingRecipe(new ItemStack(input, 1, 32767), stack, experience); + } + + /** + * Adds a smelting recipe using an ItemStack as the input for the recipe. + */ + public void addSmeltingRecipe(ItemStack input, ItemStack stack, float experience) + { + if (getSmeltingResult(input) != ItemStack.EMPTY) { net.minecraftforge.fml.common.FMLLog.log.info("Ignored smelting recipe with conflicting input: {} = {}", input, stack); return; } + this.smeltingList.put(input, stack); + this.experienceList.put(stack, Float.valueOf(experience)); + } + + /** + * Returns the smelting result of an item. + */ + public ItemStack getSmeltingResult(ItemStack stack) + { + for (Entry entry : this.smeltingList.entrySet()) + { + if (this.compareItemStacks(stack, entry.getKey())) + { + return entry.getValue(); + } + } + + return ItemStack.EMPTY; + } + + /** + * Compares two itemstacks to ensure that they are the same. This checks both the item and the metadata of the item. + */ + private boolean compareItemStacks(ItemStack stack1, ItemStack stack2) + { + return stack2.getItem() == stack1.getItem() && (stack2.getMetadata() == 32767 || stack2.getMetadata() == stack1.getMetadata()); + } + + public Map getSmeltingList() + { + return this.smeltingList; + } + + public float getSmeltingExperience(ItemStack stack) + { + float ret = stack.getItem().getSmeltingExperience(stack); + if (ret != -1) return ret; + + for (Entry entry : this.experienceList.entrySet()) + { + if (this.compareItemStacks(stack, entry.getKey())) + { + return ((Float)entry.getValue()).floatValue(); + } + } + + return 0.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/IRecipe.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/IRecipe.java new file mode 100644 index 0000000..ce1ef99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/IRecipe.java @@ -0,0 +1,46 @@ +package net.minecraft.item.crafting; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public interface IRecipe extends net.minecraftforge.registries.IForgeRegistryEntry +{ + /** + * Used to check if a recipe matches current crafting inventory + */ + boolean matches(InventoryCrafting inv, World worldIn); + + /** + * Returns an Item that is the result of this recipe + */ + ItemStack getCraftingResult(InventoryCrafting inv); + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + boolean canFit(int width, int height); + + ItemStack getRecipeOutput(); + + default NonNullList getRemainingItems(InventoryCrafting inv) + { + return net.minecraftforge.common.ForgeHooks.defaultRecipeGetRemainingItems(inv); + } + +default NonNullList getIngredients() + { + return NonNullList.create(); + } + +default boolean isDynamic() + { + return false; + } + +default String getGroup() + { + return ""; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/Ingredient.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/Ingredient.java new file mode 100644 index 0000000..5855dc1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/Ingredient.java @@ -0,0 +1,163 @@ +package net.minecraft.item.crafting; + +import com.google.common.base.Predicate; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntComparators; +import it.unimi.dsi.fastutil.ints.IntList; +import javax.annotation.Nullable; +import net.minecraft.client.util.RecipeItemHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class Ingredient implements Predicate +{ + //Because Mojang caches things... we need to invalidate them.. so... here we go.. + private static final java.util.Set INSTANCES = java.util.Collections.newSetFromMap(new java.util.WeakHashMap()); + public static final Ingredient EMPTY = new Ingredient(new ItemStack[0]) + { + public boolean apply(@Nullable ItemStack p_apply_1_) + { + return p_apply_1_.isEmpty(); + } + }; + public final ItemStack[] matchingStacks; + private final ItemStack[] matchingStacksExploded; + private IntList matchingStacksPacked; + private final boolean isSimple; + + protected Ingredient(int size) + { + this(new ItemStack[size]); + } + + protected Ingredient(ItemStack... p_i47503_1_) + { + boolean simple = true; + this.matchingStacks = p_i47503_1_; + net.minecraft.util.NonNullList lst = net.minecraft.util.NonNullList.create(); + for (ItemStack s : p_i47503_1_) + { + if (s.isEmpty()) + continue; + if (s.getItem().isDamageable()) + simple = false; + if (s.getMetadata() == net.minecraftforge.oredict.OreDictionary.WILDCARD_VALUE) + s.getItem().getSubItems(net.minecraft.creativetab.CreativeTabs.SEARCH, lst); + else + lst.add(s); + } + this.matchingStacksExploded = lst.toArray(new ItemStack[lst.size()]); + this.isSimple = simple && this.matchingStacksExploded.length > 0; + Ingredient.INSTANCES.add(this); + } + + public ItemStack[] getMatchingStacks() + { + return this.matchingStacksExploded; + } + + public boolean apply(@Nullable ItemStack p_apply_1_) + { + if (p_apply_1_ == null) + { + return false; + } + else + { + for (ItemStack itemstack : this.matchingStacks) + { + if (itemstack.getItem() == p_apply_1_.getItem()) + { + int i = itemstack.getMetadata(); + + if (i == 32767 || i == p_apply_1_.getMetadata()) + { + return true; + } + } + } + + return false; + } + } + + public IntList getValidItemStacksPacked() + { + if (this.matchingStacksPacked == null) + { + this.matchingStacksPacked = new IntArrayList(this.matchingStacksExploded.length); + + for (ItemStack itemstack : this.matchingStacksExploded) + { + this.matchingStacksPacked.add(RecipeItemHelper.pack(itemstack)); + } + + this.matchingStacksPacked.sort(IntComparators.NATURAL_COMPARATOR); + } + + return this.matchingStacksPacked; + } + + public static void invalidateAll() + { + for (Ingredient ing : INSTANCES) + if (ing != null) + ing.invalidate(); + } + + protected void invalidate() + { + this.matchingStacksPacked = null; + } + + public static Ingredient fromItem(Item p_193367_0_) + { + return fromStacks(new ItemStack(p_193367_0_, 1, 32767)); + } + + public static Ingredient fromItems(Item... items) + { + ItemStack[] aitemstack = new ItemStack[items.length]; + + for (int i = 0; i < items.length; ++i) + { + aitemstack[i] = new ItemStack(items[i]); + } + + return fromStacks(aitemstack); + } + + public static Ingredient fromStacks(ItemStack... stacks) + { + if (stacks.length > 0) + { + for (ItemStack itemstack : stacks) + { + if (!itemstack.isEmpty()) + { + return new Ingredient(stacks); + } + } + } + + return EMPTY; + } + + // Merges several vanilla Ingredients together. As a qwerk of how the json is structured, we can't tell if its a single Ingredient type or multiple so we split per item and remerge here. + //Only public for internal use, so we can access a private field in here. + public static Ingredient merge(java.util.Collection parts) + { + net.minecraft.util.NonNullList lst = net.minecraft.util.NonNullList.create(); + for (Ingredient part : parts) + { + for (ItemStack stack : part.matchingStacks) + lst.add(stack); + } + return new Ingredient(lst.toArray(new ItemStack[lst.size()])); + } + + public boolean isSimple() + { + return isSimple || this == EMPTY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeBookCloning.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeBookCloning.java new file mode 100644 index 0000000..9876669 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeBookCloning.java @@ -0,0 +1,141 @@ +package net.minecraft.item.crafting; + +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemWrittenBook; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipeBookCloning extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + int i = 0; + ItemStack itemstack = ItemStack.EMPTY; + + for (int j = 0; j < inv.getSizeInventory(); ++j) + { + ItemStack itemstack1 = inv.getStackInSlot(j); + + if (!itemstack1.isEmpty()) + { + if (itemstack1.getItem() == Items.WRITTEN_BOOK) + { + if (!itemstack.isEmpty()) + { + return false; + } + + itemstack = itemstack1; + } + else + { + if (itemstack1.getItem() != Items.WRITABLE_BOOK) + { + return false; + } + + ++i; + } + } + } + + return !itemstack.isEmpty() && itemstack.hasTagCompound() && i > 0; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + int i = 0; + ItemStack itemstack = ItemStack.EMPTY; + + for (int j = 0; j < inv.getSizeInventory(); ++j) + { + ItemStack itemstack1 = inv.getStackInSlot(j); + + if (!itemstack1.isEmpty()) + { + if (itemstack1.getItem() == Items.WRITTEN_BOOK) + { + if (!itemstack.isEmpty()) + { + return ItemStack.EMPTY; + } + + itemstack = itemstack1; + } + else + { + if (itemstack1.getItem() != Items.WRITABLE_BOOK) + { + return ItemStack.EMPTY; + } + + ++i; + } + } + } + + if (!itemstack.isEmpty() && itemstack.hasTagCompound() && i >= 1 && ItemWrittenBook.getGeneration(itemstack) < 2) + { + ItemStack itemstack2 = new ItemStack(Items.WRITTEN_BOOK, i); + itemstack2.setTagCompound(itemstack.getTagCompound().copy()); + itemstack2.getTagCompound().setInteger("generation", ItemWrittenBook.getGeneration(itemstack) + 1); + + if (itemstack.hasDisplayName()) + { + itemstack2.setStackDisplayName(itemstack.getDisplayName()); + } + + return itemstack2; + } + else + { + return ItemStack.EMPTY; + } + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (itemstack.getItem() instanceof ItemWrittenBook) + { + ItemStack itemstack1 = itemstack.copy(); + itemstack1.setCount(1); + nonnulllist.set(i, itemstack1); + break; + } + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width >= 3 && height >= 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeFireworks.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeFireworks.java new file mode 100644 index 0000000..d4f0c32 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeFireworks.java @@ -0,0 +1,273 @@ +package net.minecraft.item.crafting; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipeFireworks extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + private ItemStack resultItem = ItemStack.EMPTY; + + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + this.resultItem = ItemStack.EMPTY; + int i = 0; + int j = 0; + int k = 0; + int l = 0; + int i1 = 0; + int j1 = 0; + + for (int k1 = 0; k1 < inv.getSizeInventory(); ++k1) + { + ItemStack itemstack = inv.getStackInSlot(k1); + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem() == Items.GUNPOWDER) + { + ++j; + } + else if (itemstack.getItem() == Items.FIREWORK_CHARGE) + { + ++l; + } + else if (net.minecraftforge.oredict.DyeUtils.isDye(itemstack)) + { + ++k; + } + else if (itemstack.getItem() == Items.PAPER) + { + ++i; + } + else if (itemstack.getItem() == Items.GLOWSTONE_DUST) + { + ++i1; + } + else if (itemstack.getItem() == Items.DIAMOND) + { + ++i1; + } + else if (itemstack.getItem() == Items.FIRE_CHARGE) + { + ++j1; + } + else if (itemstack.getItem() == Items.FEATHER) + { + ++j1; + } + else if (itemstack.getItem() == Items.GOLD_NUGGET) + { + ++j1; + } + else + { + if (itemstack.getItem() != Items.SKULL) + { + return false; + } + + ++j1; + } + } + } + + i1 = i1 + k + j1; + + if (j <= 3 && i <= 1) + { + if (j >= 1 && i == 1 && i1 == 0) + { + this.resultItem = new ItemStack(Items.FIREWORKS, 3); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + if (l > 0) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (int k2 = 0; k2 < inv.getSizeInventory(); ++k2) + { + ItemStack itemstack3 = inv.getStackInSlot(k2); + + if (itemstack3.getItem() == Items.FIREWORK_CHARGE && itemstack3.hasTagCompound() && itemstack3.getTagCompound().hasKey("Explosion", 10)) + { + nbttaglist.appendTag(itemstack3.getTagCompound().getCompoundTag("Explosion")); + } + } + + nbttagcompound1.setTag("Explosions", nbttaglist); + } + + nbttagcompound1.setByte("Flight", (byte)j); + NBTTagCompound nbttagcompound3 = new NBTTagCompound(); + nbttagcompound3.setTag("Fireworks", nbttagcompound1); + this.resultItem.setTagCompound(nbttagcompound3); + return true; + } + else if (j == 1 && i == 0 && l == 0 && k > 0 && j1 <= 1) + { + this.resultItem = new ItemStack(Items.FIREWORK_CHARGE); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + NBTTagCompound nbttagcompound2 = new NBTTagCompound(); + byte b0 = 0; + List list = Lists.newArrayList(); + + for (int l1 = 0; l1 < inv.getSizeInventory(); ++l1) + { + ItemStack itemstack2 = inv.getStackInSlot(l1); + + if (!itemstack2.isEmpty()) + { + if (net.minecraftforge.oredict.DyeUtils.isDye(itemstack2)) + { + list.add(Integer.valueOf(ItemDye.DYE_COLORS[net.minecraftforge.oredict.DyeUtils.rawDyeDamageFromStack(itemstack2) & 15])); + } + else if (itemstack2.getItem() == Items.GLOWSTONE_DUST) + { + nbttagcompound2.setBoolean("Flicker", true); + } + else if (itemstack2.getItem() == Items.DIAMOND) + { + nbttagcompound2.setBoolean("Trail", true); + } + else if (itemstack2.getItem() == Items.FIRE_CHARGE) + { + b0 = 1; + } + else if (itemstack2.getItem() == Items.FEATHER) + { + b0 = 4; + } + else if (itemstack2.getItem() == Items.GOLD_NUGGET) + { + b0 = 2; + } + else if (itemstack2.getItem() == Items.SKULL) + { + b0 = 3; + } + } + } + + int[] aint1 = new int[list.size()]; + + for (int l2 = 0; l2 < aint1.length; ++l2) + { + aint1[l2] = ((Integer)list.get(l2)).intValue(); + } + + nbttagcompound2.setIntArray("Colors", aint1); + nbttagcompound2.setByte("Type", b0); + nbttagcompound.setTag("Explosion", nbttagcompound2); + this.resultItem.setTagCompound(nbttagcompound); + return true; + } + else if (j == 0 && i == 0 && l == 1 && k > 0 && k == i1) + { + List list1 = Lists.newArrayList(); + + for (int i2 = 0; i2 < inv.getSizeInventory(); ++i2) + { + ItemStack itemstack1 = inv.getStackInSlot(i2); + + if (!itemstack1.isEmpty()) + { + if (net.minecraftforge.oredict.DyeUtils.isDye(itemstack1)) + { + list1.add(Integer.valueOf(ItemDye.DYE_COLORS[net.minecraftforge.oredict.DyeUtils.rawDyeDamageFromStack(itemstack1) & 15])); + } + else if (itemstack1.getItem() == Items.FIREWORK_CHARGE) + { + this.resultItem = itemstack1.copy(); + this.resultItem.setCount(1); + } + } + } + + int[] aint = new int[list1.size()]; + + for (int j2 = 0; j2 < aint.length; ++j2) + { + aint[j2] = ((Integer)list1.get(j2)).intValue(); + } + + if (!this.resultItem.isEmpty() && this.resultItem.hasTagCompound()) + { + NBTTagCompound nbttagcompound4 = this.resultItem.getTagCompound().getCompoundTag("Explosion"); + + if (nbttagcompound4 == null) + { + return false; + } + else + { + nbttagcompound4.setIntArray("FadeColors", aint); + return true; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.resultItem.copy(); + } + + public ItemStack getRecipeOutput() + { + return this.resultItem; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeRepairItem.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeRepairItem.java new file mode 100644 index 0000000..c184be8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeRepairItem.java @@ -0,0 +1,125 @@ +package net.minecraft.item.crafting; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipeRepairItem extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + List list = Lists.newArrayList(); + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + list.add(itemstack); + + if (list.size() > 1) + { + ItemStack itemstack1 = list.get(0); + + if (itemstack.getItem() != itemstack1.getItem() || itemstack1.getCount() != 1 || itemstack.getCount() != 1 || !itemstack1.getItem().isRepairable()) + { + return false; + } + } + } + } + + return list.size() == 2; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + List list = Lists.newArrayList(); + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + list.add(itemstack); + + if (list.size() > 1) + { + ItemStack itemstack1 = list.get(0); + + if (itemstack.getItem() != itemstack1.getItem() || itemstack1.getCount() != 1 || itemstack.getCount() != 1 || !itemstack1.getItem().isRepairable()) + { + return ItemStack.EMPTY; + } + } + } + } + + if (list.size() == 2) + { + ItemStack itemstack2 = list.get(0); + ItemStack itemstack3 = list.get(1); + + if (itemstack2.getItem() == itemstack3.getItem() && itemstack2.getCount() == 1 && itemstack3.getCount() == 1 && itemstack2.getItem().isRepairable()) + { + // FORGE: Make itemstack sensitive // Item item = itemstack2.getItem(); + int j = itemstack2.getMaxDamage() - itemstack2.getItemDamage(); + int k = itemstack2.getMaxDamage() - itemstack3.getItemDamage(); + int l = j + k + itemstack2.getMaxDamage() * 5 / 100; + int i1 = itemstack2.getMaxDamage() - l; + + if (i1 < 0) + { + i1 = 0; + } + + return new ItemStack(itemstack2.getItem(), 1, i1); + } + } + + return ItemStack.EMPTY; + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeTippedArrow.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeTippedArrow.java new file mode 100644 index 0000000..76dc7c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipeTippedArrow.java @@ -0,0 +1,97 @@ +package net.minecraft.item.crafting; + +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipeTippedArrow extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + if (inv.getWidth() == 3 && inv.getHeight() == 3) + { + for (int i = 0; i < inv.getWidth(); ++i) + { + for (int j = 0; j < inv.getHeight(); ++j) + { + ItemStack itemstack = inv.getStackInRowAndColumn(i, j); + + if (itemstack.isEmpty()) + { + return false; + } + + Item item = itemstack.getItem(); + + if (i == 1 && j == 1) + { + if (item != Items.LINGERING_POTION) + { + return false; + } + } + else if (item != Items.ARROW) + { + return false; + } + } + } + + return true; + } + else + { + return false; + } + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemstack = inv.getStackInRowAndColumn(1, 1); + + if (itemstack.getItem() != Items.LINGERING_POTION) + { + return ItemStack.EMPTY; + } + else + { + ItemStack itemstack1 = new ItemStack(Items.TIPPED_ARROW, 8); + PotionUtils.addPotionToItemStack(itemstack1, PotionUtils.getPotionFromItem(itemstack)); + PotionUtils.appendEffects(itemstack1, PotionUtils.getFullEffectsFromItem(itemstack)); + return itemstack1; + } + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + return NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width >= 2 && height >= 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesArmorDyes.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesArmorDyes.java new file mode 100644 index 0000000..190a52a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesArmorDyes.java @@ -0,0 +1,168 @@ +package net.minecraft.item.crafting; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipesArmorDyes extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + ItemStack itemstack = ItemStack.EMPTY; + List list = Lists.newArrayList(); + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack1 = inv.getStackInSlot(i); + + if (!itemstack1.isEmpty()) + { + if (itemstack1.getItem() instanceof ItemArmor) + { + ItemArmor itemarmor = (ItemArmor)itemstack1.getItem(); + + if (itemarmor.getArmorMaterial() != ItemArmor.ArmorMaterial.LEATHER || !itemstack.isEmpty()) + { + return false; + } + + itemstack = itemstack1; + } + else + { + if (!net.minecraftforge.oredict.DyeUtils.isDye(itemstack1)) + { + return false; + } + + list.add(itemstack1); + } + } + } + + return !itemstack.isEmpty() && !list.isEmpty(); + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemstack = ItemStack.EMPTY; + int[] aint = new int[3]; + int i = 0; + int j = 0; + ItemArmor itemarmor = null; + + for (int k = 0; k < inv.getSizeInventory(); ++k) + { + ItemStack itemstack1 = inv.getStackInSlot(k); + + if (!itemstack1.isEmpty()) + { + if (itemstack1.getItem() instanceof ItemArmor) + { + itemarmor = (ItemArmor)itemstack1.getItem(); + + if (itemarmor.getArmorMaterial() != ItemArmor.ArmorMaterial.LEATHER || !itemstack.isEmpty()) + { + return ItemStack.EMPTY; + } + + itemstack = itemstack1.copy(); + itemstack.setCount(1); + + if (itemarmor.hasColor(itemstack1)) + { + int l = itemarmor.getColor(itemstack); + float f = (float)(l >> 16 & 255) / 255.0F; + float f1 = (float)(l >> 8 & 255) / 255.0F; + float f2 = (float)(l & 255) / 255.0F; + i = (int)((float)i + Math.max(f, Math.max(f1, f2)) * 255.0F); + aint[0] = (int)((float)aint[0] + f * 255.0F); + aint[1] = (int)((float)aint[1] + f1 * 255.0F); + aint[2] = (int)((float)aint[2] + f2 * 255.0F); + ++j; + } + } + else + { + if (!net.minecraftforge.oredict.DyeUtils.isDye(itemstack1)) + { + return ItemStack.EMPTY; + } + + float[] afloat = net.minecraftforge.oredict.DyeUtils.colorFromStack(itemstack1).get().getColorComponentValues(); + int l1 = (int)(afloat[0] * 255.0F); + int i2 = (int)(afloat[1] * 255.0F); + int j2 = (int)(afloat[2] * 255.0F); + i += Math.max(l1, Math.max(i2, j2)); + aint[0] += l1; + aint[1] += i2; + aint[2] += j2; + ++j; + } + } + } + + if (itemarmor == null) + { + return ItemStack.EMPTY; + } + else + { + int i1 = aint[0] / j; + int j1 = aint[1] / j; + int k1 = aint[2] / j; + float f3 = (float)i / (float)j; + float f4 = (float)Math.max(i1, Math.max(j1, k1)); + i1 = (int)((float)i1 * f3 / f4); + j1 = (int)((float)j1 * f3 / f4); + k1 = (int)((float)k1 * f3 / f4); + int k2 = (i1 << 8) + j1; + k2 = (k2 << 8) + k1; + itemarmor.setColor(itemstack, k2); + return itemstack; + } + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= 2; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesBanners.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesBanners.java new file mode 100644 index 0000000..efa4c26 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesBanners.java @@ -0,0 +1,385 @@ +package net.minecraft.item.crafting; + +import javax.annotation.Nullable; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemBanner; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.BannerPattern; +import net.minecraft.tileentity.TileEntityBanner; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipesBanners +{ + public static class RecipeAddPattern extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe + { + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + boolean flag = false; + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (itemstack.getItem() == Items.BANNER) + { + if (flag) + { + return false; + } + + if (TileEntityBanner.getPatterns(itemstack) >= 6) + { + return false; + } + + flag = true; + } + } + + if (!flag) + { + return false; + } + else + { + return this.matchPatterns(inv) != null; + } + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemstack = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack1 = inv.getStackInSlot(i); + + if (!itemstack1.isEmpty() && itemstack1.getItem() == Items.BANNER) + { + itemstack = itemstack1.copy(); + itemstack.setCount(1); + break; + } + } + + BannerPattern bannerpattern = this.matchPatterns(inv); + + if (bannerpattern != null) + { + int k = 0; + + for (int j = 0; j < inv.getSizeInventory(); ++j) + { + ItemStack itemstack2 = inv.getStackInSlot(j); + + int color = net.minecraftforge.oredict.DyeUtils.rawDyeDamageFromStack(itemstack2); + if (color != -1) + { + k = color; + break; + } + } + + NBTTagCompound nbttagcompound1 = itemstack.getOrCreateSubCompound("BlockEntityTag"); + NBTTagList nbttaglist; + + if (nbttagcompound1.hasKey("Patterns", 9)) + { + nbttaglist = nbttagcompound1.getTagList("Patterns", 10); + } + else + { + nbttaglist = new NBTTagList(); + nbttagcompound1.setTag("Patterns", nbttaglist); + } + + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("Pattern", bannerpattern.getHashname()); + nbttagcompound.setInteger("Color", k); + nbttaglist.appendTag(nbttagcompound); + } + + return itemstack; + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + @Nullable + private BannerPattern matchPatterns(InventoryCrafting p_190933_1_) + { + for (BannerPattern bannerpattern : BannerPattern.values()) + { + if (bannerpattern.hasPattern()) + { + boolean flag = true; + + if (bannerpattern.hasPatternItem()) + { + boolean flag1 = false; + boolean flag2 = false; + + for (int i = 0; i < p_190933_1_.getSizeInventory() && flag; ++i) + { + ItemStack itemstack = p_190933_1_.getStackInSlot(i); + + if (!itemstack.isEmpty() && itemstack.getItem() != Items.BANNER) + { + if (net.minecraftforge.oredict.DyeUtils.isDye(itemstack)) + { + if (flag2) + { + flag = false; + break; + } + + flag2 = true; + } + else + { + if (flag1 || !itemstack.isItemEqual(bannerpattern.getPatternItem())) + { + flag = false; + break; + } + + flag1 = true; + } + } + } + + if (!flag1 || !flag2) + { + flag = false; + } + } + else if (p_190933_1_.getSizeInventory() == bannerpattern.getPatterns().length * bannerpattern.getPatterns()[0].length()) + { + int j = -1; + + for (int k = 0; k < p_190933_1_.getSizeInventory() && flag; ++k) + { + int l = k / 3; + int i1 = k % 3; + ItemStack itemstack1 = p_190933_1_.getStackInSlot(k); + + if (!itemstack1.isEmpty() && itemstack1.getItem() != Items.BANNER) + { + if (!net.minecraftforge.oredict.DyeUtils.isDye(itemstack1)) + { + flag = false; + break; + } + + if (j != -1 && j != itemstack1.getMetadata()) + { + flag = false; + break; + } + + if (bannerpattern.getPatterns()[l].charAt(i1) == ' ') + { + flag = false; + break; + } + + j = itemstack1.getMetadata(); + } + else if (bannerpattern.getPatterns()[l].charAt(i1) != ' ') + { + flag = false; + break; + } + } + } + else + { + flag = false; + } + + if (flag) + { + return bannerpattern; + } + } + } + + return null; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width >= 3 && height >= 3; + } + } + + public static class RecipeDuplicatePattern extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe + { + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + ItemStack itemstack = ItemStack.EMPTY; + ItemStack itemstack1 = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack2 = inv.getStackInSlot(i); + + if (!itemstack2.isEmpty()) + { + if (itemstack2.getItem() != Items.BANNER) + { + return false; + } + + if (!itemstack.isEmpty() && !itemstack1.isEmpty()) + { + return false; + } + + EnumDyeColor enumdyecolor = ItemBanner.getBaseColor(itemstack2); + boolean flag = TileEntityBanner.getPatterns(itemstack2) > 0; + + if (!itemstack.isEmpty()) + { + if (flag) + { + return false; + } + + if (enumdyecolor != ItemBanner.getBaseColor(itemstack)) + { + return false; + } + + itemstack1 = itemstack2; + } + else if (!itemstack1.isEmpty()) + { + if (!flag) + { + return false; + } + + if (enumdyecolor != ItemBanner.getBaseColor(itemstack1)) + { + return false; + } + + itemstack = itemstack2; + } + else if (flag) + { + itemstack = itemstack2; + } + else + { + itemstack1 = itemstack2; + } + } + } + + return !itemstack.isEmpty() && !itemstack1.isEmpty(); + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (!itemstack.isEmpty() && TileEntityBanner.getPatterns(itemstack) > 0) + { + ItemStack itemstack1 = itemstack.copy(); + itemstack1.setCount(1); + return itemstack1; + } + } + + return ItemStack.EMPTY; + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + if (itemstack.getItem().hasContainerItem(itemstack)) + { + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + else if (itemstack.hasTagCompound() && TileEntityBanner.getPatterns(itemstack) > 0) + { + ItemStack itemstack1 = itemstack.copy(); + itemstack1.setCount(1); + nonnulllist.set(i, itemstack1); + } + } + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= 2; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesMapCloning.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesMapCloning.java new file mode 100644 index 0000000..da0ac95 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesMapCloning.java @@ -0,0 +1,136 @@ +package net.minecraft.item.crafting; + +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class RecipesMapCloning extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + int i = 0; + ItemStack itemstack = ItemStack.EMPTY; + + for (int j = 0; j < inv.getSizeInventory(); ++j) + { + ItemStack itemstack1 = inv.getStackInSlot(j); + + if (!itemstack1.isEmpty()) + { + if (itemstack1.getItem() == Items.FILLED_MAP) + { + if (!itemstack.isEmpty()) + { + return false; + } + + itemstack = itemstack1; + } + else + { + if (itemstack1.getItem() != Items.MAP) + { + return false; + } + + ++i; + } + } + } + + return !itemstack.isEmpty() && i > 0; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + int i = 0; + ItemStack itemstack = ItemStack.EMPTY; + + for (int j = 0; j < inv.getSizeInventory(); ++j) + { + ItemStack itemstack1 = inv.getStackInSlot(j); + + if (!itemstack1.isEmpty()) + { + if (itemstack1.getItem() == Items.FILLED_MAP) + { + if (!itemstack.isEmpty()) + { + return ItemStack.EMPTY; + } + + itemstack = itemstack1; + } + else + { + if (itemstack1.getItem() != Items.MAP) + { + return ItemStack.EMPTY; + } + + ++i; + } + } + } + + if (!itemstack.isEmpty() && i >= 1) + { + ItemStack itemstack2 = new ItemStack(Items.FILLED_MAP, i + 1, itemstack.getMetadata()); + + if (itemstack.hasDisplayName()) + { + itemstack2.setStackDisplayName(itemstack.getDisplayName()); + } + + if (itemstack.hasTagCompound()) + { + itemstack2.setTagCompound(itemstack.getTagCompound()); + } + + return itemstack2; + } + else + { + return ItemStack.EMPTY; + } + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width >= 3 && height >= 3; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesMapExtending.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesMapExtending.java new file mode 100644 index 0000000..5c67f9f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/RecipesMapExtending.java @@ -0,0 +1,115 @@ +package net.minecraft.item.crafting; + +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraft.world.storage.MapData; +import net.minecraft.world.storage.MapDecoration; + +public class RecipesMapExtending extends ShapedRecipes +{ + public RecipesMapExtending() + { + super("", 3, 3, NonNullList.from(Ingredient.EMPTY, Ingredient.fromItems(Items.PAPER), Ingredient.fromItems(Items.PAPER), Ingredient.fromItems(Items.PAPER), Ingredient.fromItems(Items.PAPER), Ingredient.fromItem(Items.FILLED_MAP), Ingredient.fromItems(Items.PAPER), Ingredient.fromItems(Items.PAPER), Ingredient.fromItems(Items.PAPER), Ingredient.fromItems(Items.PAPER)), new ItemStack(Items.MAP)); + } + + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + if (!super.matches(inv, worldIn)) + { + return false; + } + else + { + ItemStack itemstack = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory() && itemstack.isEmpty(); ++i) + { + ItemStack itemstack1 = inv.getStackInSlot(i); + + if (itemstack1.getItem() == Items.FILLED_MAP) + { + itemstack = itemstack1; + } + } + + if (itemstack.isEmpty()) + { + return false; + } + else + { + MapData mapdata = Items.FILLED_MAP.getMapData(itemstack, worldIn); + + if (mapdata == null) + { + return false; + } + else if (this.isExplorationMap(mapdata)) + { + return false; + } + else + { + return mapdata.scale < 4; + } + } + } + } + + private boolean isExplorationMap(MapData p_190934_1_) + { + if (p_190934_1_.mapDecorations != null) + { + for (MapDecoration mapdecoration : p_190934_1_.mapDecorations.values()) + { + if (mapdecoration.getType() == MapDecoration.Type.MANSION || mapdecoration.getType() == MapDecoration.Type.MONUMENT) + { + return true; + } + } + } + + return false; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemstack = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory() && itemstack.isEmpty(); ++i) + { + ItemStack itemstack1 = inv.getStackInSlot(i); + + if (itemstack1.getItem() == Items.FILLED_MAP) + { + itemstack = itemstack1; + } + } + + itemstack = itemstack.copy(); + itemstack.setCount(1); + + if (itemstack.getTagCompound() == null) + { + itemstack.setTagCompound(new NBTTagCompound()); + } + + itemstack.getTagCompound().setInteger("map_scale_direction", 1); + return itemstack; + } + + public boolean isDynamic() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShapedRecipes.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShapedRecipes.java new file mode 100644 index 0000000..0d99103 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShapedRecipes.java @@ -0,0 +1,403 @@ +package net.minecraft.item.crafting; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSyntaxException; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class ShapedRecipes extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements net.minecraftforge.common.crafting.IShapedRecipe +{ + /** How many horizontal slots this recipe is wide. */ + public final int recipeWidth; + /** How many vertical slots this recipe uses. */ + public final int recipeHeight; + /** Is a array of ItemStack that composes the recipe. */ + public final NonNullList recipeItems; + /** Is the ItemStack that you get when craft the recipe. */ + private final ItemStack recipeOutput; + private final String group; + + public ShapedRecipes(String group, int width, int height, NonNullList ingredients, ItemStack result) + { + this.group = group; + this.recipeWidth = width; + this.recipeHeight = height; + this.recipeItems = ingredients; + this.recipeOutput = result; + } + + public String getGroup() + { + return this.group; + } + + public ItemStack getRecipeOutput() + { + return this.recipeOutput; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + public NonNullList getIngredients() + { + return this.recipeItems; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width >= this.recipeWidth && height >= this.recipeHeight; + } + + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + for (int i = 0; i <= inv.getWidth() - this.recipeWidth; ++i) + { + for (int j = 0; j <= inv.getHeight() - this.recipeHeight; ++j) + { + if (this.checkMatch(inv, i, j, true)) + { + return true; + } + + if (this.checkMatch(inv, i, j, false)) + { + return true; + } + } + } + + return false; + } + + /** + * Checks if the region of a crafting inventory is match for the recipe. + */ + private boolean checkMatch(InventoryCrafting p_77573_1_, int p_77573_2_, int p_77573_3_, boolean p_77573_4_) + { + for (int i = 0; i < p_77573_1_.getWidth(); ++i) + { + for (int j = 0; j < p_77573_1_.getHeight(); ++j) + { + int k = i - p_77573_2_; + int l = j - p_77573_3_; + Ingredient ingredient = Ingredient.EMPTY; + + if (k >= 0 && l >= 0 && k < this.recipeWidth && l < this.recipeHeight) + { + if (p_77573_4_) + { + ingredient = this.recipeItems.get(this.recipeWidth - k - 1 + l * this.recipeWidth); + } + else + { + ingredient = this.recipeItems.get(k + l * this.recipeWidth); + } + } + + if (!ingredient.apply(p_77573_1_.getStackInRowAndColumn(i, j))) + { + return false; + } + } + } + + return true; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.getRecipeOutput().copy(); + } + + public int getWidth() + { + return this.recipeWidth; + } + + public int getHeight() + { + return this.recipeHeight; + } + + public static ShapedRecipes deserialize(JsonObject p_193362_0_) + { + String s = JsonUtils.getString(p_193362_0_, "group", ""); + Map map = deserializeKey(JsonUtils.getJsonObject(p_193362_0_, "key")); + String[] astring = shrink(patternFromJson(JsonUtils.getJsonArray(p_193362_0_, "pattern"))); + int i = astring[0].length(); + int j = astring.length; + NonNullList nonnulllist = deserializeIngredients(astring, map, i, j); + ItemStack itemstack = deserializeItem(JsonUtils.getJsonObject(p_193362_0_, "result"), true); + return new ShapedRecipes(s, i, j, nonnulllist, itemstack); + } + + private static NonNullList deserializeIngredients(String[] p_192402_0_, Map p_192402_1_, int p_192402_2_, int p_192402_3_) + { + NonNullList nonnulllist = NonNullList.withSize(p_192402_2_ * p_192402_3_, Ingredient.EMPTY); + Set set = Sets.newHashSet(p_192402_1_.keySet()); + set.remove(" "); + + for (int i = 0; i < p_192402_0_.length; ++i) + { + for (int j = 0; j < p_192402_0_[i].length(); ++j) + { + String s = p_192402_0_[i].substring(j, j + 1); + Ingredient ingredient = p_192402_1_.get(s); + + if (ingredient == null) + { + throw new JsonSyntaxException("Pattern references symbol '" + s + "' but it's not defined in the key"); + } + + set.remove(s); + nonnulllist.set(j + p_192402_2_ * i, ingredient); + } + } + + if (!set.isEmpty()) + { + throw new JsonSyntaxException("Key defines symbols that aren't used in pattern: " + set); + } + else + { + return nonnulllist; + } + } + + @VisibleForTesting + static String[] shrink(String... p_194134_0_) + { + int i = Integer.MAX_VALUE; + int j = 0; + int k = 0; + int l = 0; + + for (int i1 = 0; i1 < p_194134_0_.length; ++i1) + { + String s = p_194134_0_[i1]; + i = Math.min(i, firstNonSpace(s)); + int j1 = lastNonSpace(s); + j = Math.max(j, j1); + + if (j1 < 0) + { + if (k == i1) + { + ++k; + } + + ++l; + } + else + { + l = 0; + } + } + + if (p_194134_0_.length == l) + { + return new String[0]; + } + else + { + String[] astring = new String[p_194134_0_.length - l - k]; + + for (int k1 = 0; k1 < astring.length; ++k1) + { + astring[k1] = p_194134_0_[k1 + k].substring(i, j + 1); + } + + return astring; + } + } + + private static int firstNonSpace(String str) + { + int i; + + for (i = 0; i < str.length() && str.charAt(i) == ' '; ++i) + { + ; + } + + return i; + } + + private static int lastNonSpace(String str) + { + int i; + + for (i = str.length() - 1; i >= 0 && str.charAt(i) == ' '; --i) + { + ; + } + + return i; + } + + private static String[] patternFromJson(JsonArray p_192407_0_) + { + String[] astring = new String[p_192407_0_.size()]; + + if (astring.length > 3) + { + throw new JsonSyntaxException("Invalid pattern: too many rows, 3 is maximum"); + } + else if (astring.length == 0) + { + throw new JsonSyntaxException("Invalid pattern: empty pattern not allowed"); + } + else + { + for (int i = 0; i < astring.length; ++i) + { + String s = JsonUtils.getString(p_192407_0_.get(i), "pattern[" + i + "]"); + + if (s.length() > 3) + { + throw new JsonSyntaxException("Invalid pattern: too many columns, 3 is maximum"); + } + + if (i > 0 && astring[0].length() != s.length()) + { + throw new JsonSyntaxException("Invalid pattern: each row must be the same width"); + } + + astring[i] = s; + } + + return astring; + } + } + + private static Map deserializeKey(JsonObject p_192408_0_) + { + Map map = Maps.newHashMap(); + + for (Entry entry : p_192408_0_.entrySet()) + { + if (((String)entry.getKey()).length() != 1) + { + throw new JsonSyntaxException("Invalid key entry: '" + (String)entry.getKey() + "' is an invalid symbol (must be 1 character only)."); + } + + if (" ".equals(entry.getKey())) + { + throw new JsonSyntaxException("Invalid key entry: ' ' is a reserved symbol."); + } + + map.put(entry.getKey(), deserializeIngredient(entry.getValue())); + } + + map.put(" ", Ingredient.EMPTY); + return map; + } + + public static Ingredient deserializeIngredient(@Nullable JsonElement p_193361_0_) + { + if (p_193361_0_ != null && !p_193361_0_.isJsonNull()) + { + if (p_193361_0_.isJsonObject()) + { + return Ingredient.fromStacks(deserializeItem(p_193361_0_.getAsJsonObject(), false)); + } + else if (!p_193361_0_.isJsonArray()) + { + throw new JsonSyntaxException("Expected item to be object or array of objects"); + } + else + { + JsonArray jsonarray = p_193361_0_.getAsJsonArray(); + + if (jsonarray.size() == 0) + { + throw new JsonSyntaxException("Item array cannot be empty, at least one item must be defined"); + } + else + { + ItemStack[] aitemstack = new ItemStack[jsonarray.size()]; + + for (int i = 0; i < jsonarray.size(); ++i) + { + aitemstack[i] = deserializeItem(JsonUtils.getJsonObject(jsonarray.get(i), "item"), false); + } + + return Ingredient.fromStacks(aitemstack); + } + } + } + else + { + throw new JsonSyntaxException("Item cannot be null"); + } + } + + public static ItemStack deserializeItem(JsonObject p_192405_0_, boolean useCount) + { + String s = JsonUtils.getString(p_192405_0_, "item"); + Item item = Item.REGISTRY.getObject(new ResourceLocation(s)); + + if (item == null) + { + throw new JsonSyntaxException("Unknown item '" + s + "'"); + } + else if (item.getHasSubtypes() && !p_192405_0_.has("data")) + { + throw new JsonParseException("Missing data for item '" + s + "'"); + } + else + { + int i = JsonUtils.getInt(p_192405_0_, "data", 0); + int j = useCount ? JsonUtils.getInt(p_192405_0_, "count", 1) : 1; + return new ItemStack(item, j, i); + } + } + + //================================================ FORGE START ================================================ + @Override + public int getRecipeWidth() + { + return this.getWidth(); + } + @Override + public int getRecipeHeight() + { + return this.getHeight(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShapelessRecipes.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShapelessRecipes.java new file mode 100644 index 0000000..4042bf9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShapelessRecipes.java @@ -0,0 +1,150 @@ +package net.minecraft.item.crafting; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import java.util.List; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ShapelessRecipes extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe +{ + /** Is the ItemStack that you get when craft the recipe. */ + private final ItemStack recipeOutput; + /** Is a List of ItemStack that composes the recipe. */ + public final NonNullList recipeItems; + private final String group; + private final boolean isSimple; + + public ShapelessRecipes(String group, ItemStack output, NonNullList ingredients) + { + this.group = group; + this.recipeOutput = output; + this.recipeItems = ingredients; + boolean simple = true; + for (Ingredient i : ingredients) + simple &= i.isSimple(); + this.isSimple = simple; + } + + public String getGroup() + { + return this.group; + } + + public ItemStack getRecipeOutput() + { + return this.recipeOutput; + } + + public NonNullList getIngredients() + { + return this.recipeItems; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + nonnulllist.set(i, net.minecraftforge.common.ForgeHooks.getContainerItem(itemstack)); + } + + return nonnulllist; + } + + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + int ingredientCount = 0; + net.minecraft.client.util.RecipeItemHelper recipeItemHelper = new net.minecraft.client.util.RecipeItemHelper(); + List inputs = Lists.newArrayList(); + + for (int i = 0; i < inv.getHeight(); ++i) + { + for (int j = 0; j < inv.getWidth(); ++j) + { + ItemStack itemstack = inv.getStackInRowAndColumn(j, i); + + if (!itemstack.isEmpty()) + { + ++ingredientCount; + if (this.isSimple) + recipeItemHelper.accountStack(itemstack, 1); + else + inputs.add(itemstack); + } + } + } + + if (ingredientCount != this.recipeItems.size()) + return false; + + if (this.isSimple) + return recipeItemHelper.canCraft(this, null); + + return net.minecraftforge.common.util.RecipeMatcher.findMatches(inputs, this.recipeItems) != null; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + return this.recipeOutput.copy(); + } + + public static ShapelessRecipes deserialize(JsonObject json) + { + String s = JsonUtils.getString(json, "group", ""); + NonNullList nonnulllist = deserializeIngredients(JsonUtils.getJsonArray(json, "ingredients")); + + if (nonnulllist.isEmpty()) + { + throw new JsonParseException("No ingredients for shapeless recipe"); + } + else if (nonnulllist.size() > 9) + { + throw new JsonParseException("Too many ingredients for shapeless recipe"); + } + else + { + ItemStack itemstack = ShapedRecipes.deserializeItem(JsonUtils.getJsonObject(json, "result"), true); + return new ShapelessRecipes(s, itemstack, nonnulllist); + } + } + + private static NonNullList deserializeIngredients(JsonArray array) + { + NonNullList nonnulllist = NonNullList.create(); + + for (int i = 0; i < array.size(); ++i) + { + Ingredient ingredient = ShapedRecipes.deserializeIngredient(array.get(i)); + + if (ingredient != Ingredient.EMPTY) + { + nonnulllist.add(ingredient); + } + } + + return nonnulllist; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= this.recipeItems.size(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShieldRecipes.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShieldRecipes.java new file mode 100644 index 0000000..90bfc1e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShieldRecipes.java @@ -0,0 +1,143 @@ +package net.minecraft.item.crafting; + +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ShieldRecipes +{ + public static class Decoration extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe + { + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + ItemStack itemstack = ItemStack.EMPTY; + ItemStack itemstack1 = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack2 = inv.getStackInSlot(i); + + if (!itemstack2.isEmpty()) + { + if (itemstack2.getItem() == Items.BANNER) + { + if (!itemstack1.isEmpty()) + { + return false; + } + + itemstack1 = itemstack2; + } + else + { + if (itemstack2.getItem() != Items.SHIELD) + { + return false; + } + + if (!itemstack.isEmpty()) + { + return false; + } + + if (itemstack2.getSubCompound("BlockEntityTag") != null) + { + return false; + } + + itemstack = itemstack2; + } + } + } + + if (!itemstack.isEmpty() && !itemstack1.isEmpty()) + { + return true; + } + else + { + return false; + } + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemstack = ItemStack.EMPTY; + ItemStack itemstack1 = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack2 = inv.getStackInSlot(i); + + if (!itemstack2.isEmpty()) + { + if (itemstack2.getItem() == Items.BANNER) + { + itemstack = itemstack2; + } + else if (itemstack2.getItem() == Items.SHIELD) + { + itemstack1 = itemstack2.copy(); + } + } + } + + if (itemstack1.isEmpty()) + { + return itemstack1; + } + else + { + NBTTagCompound nbttagcompound = itemstack.getSubCompound("BlockEntityTag"); + NBTTagCompound nbttagcompound1 = nbttagcompound == null ? new NBTTagCompound() : nbttagcompound.copy(); + nbttagcompound1.setInteger("Base", itemstack.getMetadata() & 15); + itemstack1.setTagInfo("BlockEntityTag", nbttagcompound1); + return itemstack1; + } + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (itemstack.getItem().hasContainerItem()) + { + nonnulllist.set(i, new ItemStack(itemstack.getItem().getContainerItem())); + } + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= 2; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShulkerBoxRecipes.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShulkerBoxRecipes.java new file mode 100644 index 0000000..943ebbc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/ShulkerBoxRecipes.java @@ -0,0 +1,124 @@ +package net.minecraft.item.crafting; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockShulkerBox; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; + +public class ShulkerBoxRecipes +{ + public static class ShulkerBoxColoring extends net.minecraftforge.registries.IForgeRegistryEntry.Impl implements IRecipe + { + /** + * Used to check if a recipe matches current crafting inventory + */ + public boolean matches(InventoryCrafting inv, World worldIn) + { + int i = 0; + int j = 0; + + for (int k = 0; k < inv.getSizeInventory(); ++k) + { + ItemStack itemstack = inv.getStackInSlot(k); + + if (!itemstack.isEmpty()) + { + if (Block.getBlockFromItem(itemstack.getItem()) instanceof BlockShulkerBox) + { + ++i; + } + else + { + if (!net.minecraftforge.oredict.DyeUtils.isDye(itemstack)) + { + return false; + } + + ++j; + } + + if (j > 1 || i > 1) + { + return false; + } + } + } + + return i == 1 && j == 1; + } + + /** + * Returns an Item that is the result of this recipe + */ + public ItemStack getCraftingResult(InventoryCrafting inv) + { + ItemStack itemstack = ItemStack.EMPTY; + ItemStack itemstack1 = ItemStack.EMPTY; + + for (int i = 0; i < inv.getSizeInventory(); ++i) + { + ItemStack itemstack2 = inv.getStackInSlot(i); + + if (!itemstack2.isEmpty()) + { + if (Block.getBlockFromItem(itemstack2.getItem()) instanceof BlockShulkerBox) + { + itemstack = itemstack2; + } + else if (net.minecraftforge.oredict.DyeUtils.isDye(itemstack2)) + { + itemstack1 = itemstack2; + } + } + } + + ItemStack itemstack3 = BlockShulkerBox.getColoredItemStack(net.minecraftforge.oredict.DyeUtils.colorFromStack(itemstack1).get()); + + if (itemstack.hasTagCompound()) + { + itemstack3.setTagCompound(itemstack.getTagCompound().copy()); + } + + return itemstack3; + } + + public ItemStack getRecipeOutput() + { + return ItemStack.EMPTY; + } + + public NonNullList getRemainingItems(InventoryCrafting inv) + { + NonNullList nonnulllist = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); + + for (int i = 0; i < nonnulllist.size(); ++i) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if (itemstack.getItem().hasContainerItem()) + { + nonnulllist.set(i, new ItemStack(itemstack.getItem().getContainerItem())); + } + } + + return nonnulllist; + } + + public boolean isDynamic() + { + return true; + } + + /** + * Used to determine if this recipe can fit in a grid of the given width/height + */ + public boolean canFit(int width, int height) + { + return width * height >= 2; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/crafting/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/package-info.java new file mode 100644 index 0000000..cbe371f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/crafting/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.item.crafting; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/item/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/item/package-info.java new file mode 100644 index 0000000..5f99583 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/item/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.item; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/CompressedStreamTools.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/CompressedStreamTools.java new file mode 100644 index 0000000..9c46ba4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/CompressedStreamTools.java @@ -0,0 +1,196 @@ +package net.minecraft.nbt; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; +import javax.annotation.Nullable; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.util.ReportedException; + +public class CompressedStreamTools +{ + /** + * Load the gzipped compound from the inputstream. + */ + public static NBTTagCompound readCompressed(InputStream is) throws IOException + { + DataInputStream datainputstream = new DataInputStream(new BufferedInputStream(new GZIPInputStream(is))); + NBTTagCompound nbttagcompound; + + try + { + nbttagcompound = read(datainputstream, NBTSizeTracker.INFINITE); + } + finally + { + datainputstream.close(); + } + + return nbttagcompound; + } + + /** + * Write the compound, gzipped, to the outputstream. + */ + public static void writeCompressed(NBTTagCompound compound, OutputStream outputStream) throws IOException + { + DataOutputStream dataoutputstream = new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(outputStream))); + + try + { + write(compound, dataoutputstream); + } + finally + { + dataoutputstream.close(); + } + } + + public static void safeWrite(NBTTagCompound compound, File fileIn) throws IOException + { + File file1 = new File(fileIn.getAbsolutePath() + "_tmp"); + + if (file1.exists()) + { + file1.delete(); + } + + write(compound, file1); + + if (fileIn.exists()) + { + fileIn.delete(); + } + + if (fileIn.exists()) + { + throw new IOException("Failed to delete " + fileIn); + } + else + { + file1.renameTo(fileIn); + } + } + + /** + * Reads from a CompressedStream. + */ + public static NBTTagCompound read(DataInputStream inputStream) throws IOException + { + return read(inputStream, NBTSizeTracker.INFINITE); + } + + /** + * Reads the given DataInput, constructs, and returns an NBTTagCompound with the data from the DataInput + */ + public static NBTTagCompound read(DataInput input, NBTSizeTracker accounter) throws IOException + { + NBTBase nbtbase = read(input, 0, accounter); + + if (nbtbase instanceof NBTTagCompound) + { + return (NBTTagCompound)nbtbase; + } + else + { + throw new IOException("Root tag must be a named compound tag"); + } + } + + public static void write(NBTTagCompound compound, DataOutput output) throws IOException + { + writeTag(compound, output); + } + + private static void writeTag(NBTBase tag, DataOutput output) throws IOException + { + output.writeByte(tag.getId()); + + if (tag.getId() != 0) + { + output.writeUTF(""); + tag.write(output); + } + } + + private static NBTBase read(DataInput input, int depth, NBTSizeTracker accounter) throws IOException + { + byte b0 = input.readByte(); + accounter.read(8); // Forge: Count everything! + + if (b0 == 0) + { + return new NBTTagEnd(); + } + else + { + NBTSizeTracker.readUTF(accounter, input.readUTF()); //Forge: Count this string. + accounter.read(32); //Forge: 4 extra bytes for the object allocation. + NBTBase nbtbase = NBTBase.createNewByType(b0); + + try + { + nbtbase.read(input, depth, accounter); + return nbtbase; + } + catch (IOException ioexception) + { + CrashReport crashreport = CrashReport.makeCrashReport(ioexception, "Loading NBT data"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("NBT Tag"); + crashreportcategory.addCrashSection("Tag type", Byte.valueOf(b0)); + throw new ReportedException(crashreport); + } + } + } + + public static void write(NBTTagCompound compound, File fileIn) throws IOException + { + DataOutputStream dataoutputstream = new DataOutputStream(new FileOutputStream(fileIn)); + + try + { + write(compound, dataoutputstream); + } + finally + { + dataoutputstream.close(); + } + } + + @Nullable + public static NBTTagCompound read(File fileIn) throws IOException + { + if (!fileIn.exists()) + { + return null; + } + else + { + DataInputStream datainputstream = new DataInputStream(new FileInputStream(fileIn)); + NBTTagCompound nbttagcompound; + + try + { + nbttagcompound = read(datainputstream, NBTSizeTracker.INFINITE); + } + finally + { + datainputstream.close(); + } + + return nbttagcompound; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/JsonToNBT.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/JsonToNBT.java new file mode 100644 index 0000000..5542778 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/JsonToNBT.java @@ -0,0 +1,456 @@ +package net.minecraft.nbt; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; +import java.util.List; +import java.util.regex.Pattern; + +public class JsonToNBT +{ + private static final Pattern DOUBLE_PATTERN_NOSUFFIX = Pattern.compile("[-+]?(?:[0-9]+[.]|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?", 2); + private static final Pattern DOUBLE_PATTERN = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2); + private static final Pattern FLOAT_PATTERN = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?f", 2); + private static final Pattern BYTE_PATTERN = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)b", 2); + private static final Pattern LONG_PATTERN = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)l", 2); + private static final Pattern SHORT_PATTERN = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)s", 2); + private static final Pattern INT_PATTERN = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)"); + private final String string; + private int cursor; + + public static NBTTagCompound getTagFromJson(String jsonString) throws NBTException + { + return (new JsonToNBT(jsonString)).readSingleStruct(); + } + + @VisibleForTesting + NBTTagCompound readSingleStruct() throws NBTException + { + NBTTagCompound nbttagcompound = this.readStruct(); + this.skipWhitespace(); + + if (this.canRead()) + { + ++this.cursor; + throw this.exception("Trailing data found"); + } + else + { + return nbttagcompound; + } + } + + @VisibleForTesting + JsonToNBT(String stringIn) + { + this.string = stringIn; + } + + protected String readKey() throws NBTException + { + this.skipWhitespace(); + + if (!this.canRead()) + { + throw this.exception("Expected key"); + } + else + { + return this.peek() == '"' ? this.readQuotedString() : this.readString(); + } + } + + private NBTException exception(String message) + { + return new NBTException(message, this.string, this.cursor); + } + + protected NBTBase readTypedValue() throws NBTException + { + this.skipWhitespace(); + + if (this.peek() == '"') + { + return new NBTTagString(this.readQuotedString()); + } + else + { + String s = this.readString(); + + if (s.isEmpty()) + { + throw this.exception("Expected value"); + } + else + { + return this.type(s); + } + } + } + + private NBTBase type(String stringIn) + { + try + { + if (FLOAT_PATTERN.matcher(stringIn).matches()) + { + return new NBTTagFloat(Float.parseFloat(stringIn.substring(0, stringIn.length() - 1))); + } + + if (BYTE_PATTERN.matcher(stringIn).matches()) + { + return new NBTTagByte(Byte.parseByte(stringIn.substring(0, stringIn.length() - 1))); + } + + if (LONG_PATTERN.matcher(stringIn).matches()) + { + return new NBTTagLong(Long.parseLong(stringIn.substring(0, stringIn.length() - 1))); + } + + if (SHORT_PATTERN.matcher(stringIn).matches()) + { + return new NBTTagShort(Short.parseShort(stringIn.substring(0, stringIn.length() - 1))); + } + + if (INT_PATTERN.matcher(stringIn).matches()) + { + return new NBTTagInt(Integer.parseInt(stringIn)); + } + + if (DOUBLE_PATTERN.matcher(stringIn).matches()) + { + return new NBTTagDouble(Double.parseDouble(stringIn.substring(0, stringIn.length() - 1))); + } + + if (DOUBLE_PATTERN_NOSUFFIX.matcher(stringIn).matches()) + { + return new NBTTagDouble(Double.parseDouble(stringIn)); + } + + if ("true".equalsIgnoreCase(stringIn)) + { + return new NBTTagByte((byte)1); + } + + if ("false".equalsIgnoreCase(stringIn)) + { + return new NBTTagByte((byte)0); + } + } + catch (NumberFormatException var3) + { + ; + } + + return new NBTTagString(stringIn); + } + + private String readQuotedString() throws NBTException + { + int i = ++this.cursor; + StringBuilder stringbuilder = null; + boolean flag = false; + + while (this.canRead()) + { + char c0 = this.pop(); + + if (flag) + { + if (c0 != '\\' && c0 != '"') + { + throw this.exception("Invalid escape of '" + c0 + "'"); + } + + flag = false; + } + else + { + if (c0 == '\\') + { + flag = true; + + if (stringbuilder == null) + { + stringbuilder = new StringBuilder(this.string.substring(i, this.cursor - 1)); + } + + continue; + } + + if (c0 == '"') + { + return stringbuilder == null ? this.string.substring(i, this.cursor - 1) : stringbuilder.toString(); + } + } + + if (stringbuilder != null) + { + stringbuilder.append(c0); + } + } + + throw this.exception("Missing termination quote"); + } + + private String readString() + { + int i; + + for (i = this.cursor; this.canRead() && this.isAllowedInKey(this.peek()); ++this.cursor) + { + ; + } + + return this.string.substring(i, this.cursor); + } + + protected NBTBase readValue() throws NBTException + { + this.skipWhitespace(); + + if (!this.canRead()) + { + throw this.exception("Expected value"); + } + else + { + char c0 = this.peek(); + + if (c0 == '{') + { + return this.readStruct(); + } + else + { + return c0 == '[' ? this.readList() : this.readTypedValue(); + } + } + } + + protected NBTBase readList() throws NBTException + { + return this.canRead(2) && this.peek(1) != '"' && this.peek(2) == ';' ? this.readArrayTag() : this.readListTag(); + } + + protected NBTTagCompound readStruct() throws NBTException + { + this.expect('{'); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + this.skipWhitespace(); + + while (this.canRead() && this.peek() != '}') + { + String s = this.readKey(); + + if (s.isEmpty()) + { + throw this.exception("Expected non-empty key"); + } + + this.expect(':'); + nbttagcompound.setTag(s, this.readValue()); + + if (!this.hasElementSeparator()) + { + break; + } + + if (!this.canRead()) + { + throw this.exception("Expected key"); + } + } + + this.expect('}'); + return nbttagcompound; + } + + private NBTBase readListTag() throws NBTException + { + this.expect('['); + this.skipWhitespace(); + + if (!this.canRead()) + { + throw this.exception("Expected value"); + } + else + { + NBTTagList nbttaglist = new NBTTagList(); + int i = -1; + + while (this.peek() != ']') + { + NBTBase nbtbase = this.readValue(); + int j = nbtbase.getId(); + + if (i < 0) + { + i = j; + } + else if (j != i) + { + throw this.exception("Unable to insert " + NBTBase.getTagTypeName(j) + " into ListTag of type " + NBTBase.getTagTypeName(i)); + } + + nbttaglist.appendTag(nbtbase); + + if (!this.hasElementSeparator()) + { + break; + } + + if (!this.canRead()) + { + throw this.exception("Expected value"); + } + } + + this.expect(']'); + return nbttaglist; + } + } + + private NBTBase readArrayTag() throws NBTException + { + this.expect('['); + char c0 = this.pop(); + this.pop(); + this.skipWhitespace(); + + if (!this.canRead()) + { + throw this.exception("Expected value"); + } + else if (c0 == 'B') + { + return new NBTTagByteArray(this.readArray((byte)7, (byte)1)); + } + else if (c0 == 'L') + { + return new NBTTagLongArray(this.readArray((byte)12, (byte)4)); + } + else if (c0 == 'I') + { + return new NBTTagIntArray(this.readArray((byte)11, (byte)3)); + } + else + { + throw this.exception("Invalid array type '" + c0 + "' found"); + } + } + + private List readArray(byte p_193603_1_, byte p_193603_2_) throws NBTException + { + List list = Lists.newArrayList(); + + while (true) + { + if (this.peek() != ']') + { + NBTBase nbtbase = this.readValue(); + int i = nbtbase.getId(); + + if (i != p_193603_2_) + { + throw this.exception("Unable to insert " + NBTBase.getTagTypeName(i) + " into " + NBTBase.getTagTypeName(p_193603_1_)); + } + + if (p_193603_2_ == 1) + { + list.add((T)Byte.valueOf(((NBTPrimitive)nbtbase).getByte())); + } + else if (p_193603_2_ == 4) + { + list.add((T)Long.valueOf(((NBTPrimitive)nbtbase).getLong())); + } + else + { + list.add((T)Integer.valueOf(((NBTPrimitive)nbtbase).getInt())); + } + + if (this.hasElementSeparator()) + { + if (!this.canRead()) + { + throw this.exception("Expected value"); + } + + continue; + } + } + + this.expect(']'); + return list; + } + } + + private void skipWhitespace() + { + while (this.canRead() && Character.isWhitespace(this.peek())) + { + ++this.cursor; + } + } + + private boolean hasElementSeparator() + { + this.skipWhitespace(); + + if (this.canRead() && this.peek() == ',') + { + ++this.cursor; + this.skipWhitespace(); + return true; + } + else + { + return false; + } + } + + private void expect(char expected) throws NBTException + { + this.skipWhitespace(); + boolean flag = this.canRead(); + + if (flag && this.peek() == expected) + { + ++this.cursor; + } + else + { + throw new NBTException("Expected '" + expected + "' but got '" + (flag ? this.peek() : "") + "'", this.string, this.cursor + 1); + } + } + + protected boolean isAllowedInKey(char charIn) + { + return charIn >= '0' && charIn <= '9' || charIn >= 'A' && charIn <= 'Z' || charIn >= 'a' && charIn <= 'z' || charIn == '_' || charIn == '-' || charIn == '.' || charIn == '+'; + } + + private boolean canRead(int p_193608_1_) + { + return this.cursor + p_193608_1_ < this.string.length(); + } + + boolean canRead() + { + return this.canRead(0); + } + + private char peek(int p_193597_1_) + { + return this.string.charAt(this.cursor + p_193597_1_); + } + + private char peek() + { + return this.peek(0); + } + + private char pop() + { + return this.string.charAt(this.cursor++); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTBase.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTBase.java new file mode 100644 index 0000000..90ec8f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTBase.java @@ -0,0 +1,127 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public abstract class NBTBase +{ + public static final String[] NBT_TYPES = new String[] {"END", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "BYTE[]", "STRING", "LIST", "COMPOUND", "INT[]", "LONG[]"}; + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + abstract void write(DataOutput output) throws IOException; + + abstract void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException; + + public abstract String toString(); + + /** + * Gets the type byte for the tag. + */ + public abstract byte getId(); + + /** + * Creates a new NBTBase object that corresponds with the passed in id. + */ + protected static NBTBase createNewByType(byte id) + { + switch (id) + { + case 0: + return new NBTTagEnd(); + case 1: + return new NBTTagByte(); + case 2: + return new NBTTagShort(); + case 3: + return new NBTTagInt(); + case 4: + return new NBTTagLong(); + case 5: + return new NBTTagFloat(); + case 6: + return new NBTTagDouble(); + case 7: + return new NBTTagByteArray(); + case 8: + return new NBTTagString(); + case 9: + return new NBTTagList(); + case 10: + return new NBTTagCompound(); + case 11: + return new NBTTagIntArray(); + case 12: + return new NBTTagLongArray(); + default: + return null; + } + } + + public static String getTagTypeName(int p_193581_0_) + { + switch (p_193581_0_) + { + case 0: + return "TAG_End"; + case 1: + return "TAG_Byte"; + case 2: + return "TAG_Short"; + case 3: + return "TAG_Int"; + case 4: + return "TAG_Long"; + case 5: + return "TAG_Float"; + case 6: + return "TAG_Double"; + case 7: + return "TAG_Byte_Array"; + case 8: + return "TAG_String"; + case 9: + return "TAG_List"; + case 10: + return "TAG_Compound"; + case 11: + return "TAG_Int_Array"; + case 12: + return "TAG_Long_Array"; + case 99: + return "Any Numeric Tag"; + default: + return "UNKNOWN"; + } + } + + /** + * Creates a clone of the tag. + */ + public abstract NBTBase copy(); + + /** + * Return whether this compound has no tags. + */ + public boolean hasNoTags() + { + return false; + } + + public boolean equals(Object p_equals_1_) + { + return p_equals_1_ instanceof NBTBase && this.getId() == ((NBTBase)p_equals_1_).getId(); + } + + public int hashCode() + { + return this.getId(); + } + + protected String getString() + { + return this.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTException.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTException.java new file mode 100644 index 0000000..6a156c2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTException.java @@ -0,0 +1,24 @@ +package net.minecraft.nbt; + +public class NBTException extends Exception +{ + public NBTException(String message, String json, int p_i47523_3_) + { + super(message + " at: " + slice(json, p_i47523_3_)); + } + + private static String slice(String json, int p_193592_1_) + { + StringBuilder stringbuilder = new StringBuilder(); + int i = Math.min(json.length(), p_193592_1_); + + if (i > 35) + { + stringbuilder.append("..."); + } + + stringbuilder.append(json.substring(Math.max(0, i - 35), i)); + stringbuilder.append("<--[HERE]"); + return stringbuilder.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTPrimitive.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTPrimitive.java new file mode 100644 index 0000000..787e7a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTPrimitive.java @@ -0,0 +1,16 @@ +package net.minecraft.nbt; + +public abstract class NBTPrimitive extends NBTBase +{ + public abstract long getLong(); + + public abstract int getInt(); + + public abstract short getShort(); + + public abstract byte getByte(); + + public abstract double getDouble(); + + public abstract float getFloat(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTSizeTracker.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTSizeTracker.java new file mode 100644 index 0000000..80453b4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTSizeTracker.java @@ -0,0 +1,64 @@ +package net.minecraft.nbt; + +public class NBTSizeTracker +{ + public static final NBTSizeTracker INFINITE = new NBTSizeTracker(0L) + { + /** + * Tracks the reading of the given amount of bits(!) + */ + public void read(long bits) + { + } + }; + private final long max; + private long read; + + public NBTSizeTracker(long max) + { + this.max = max; + } + + /** + * Tracks the reading of the given amount of bits(!) + */ + public void read(long bits) + { + this.read += bits / 8L; + + if (this.read > this.max) + { + throw new RuntimeException("Tried to read NBT tag that was too big; tried to allocate: " + this.read + "bytes where max allowed: " + this.max); + } + } + + /* + * UTF8 is not a simple encoding system, each character can be either + * 1, 2, or 3 bytes. Depending on where it's numerical value falls. + * We have to count up each character individually to see the true + * length of the data. + * + * Basic concept is that it uses the MSB of each byte as a 'read more' signal. + * So it has to shift each 7-bit segment. + * + * This will accurately count the correct byte length to encode this string, plus the 2 bytes for it's length prefix. + */ + public static void readUTF(NBTSizeTracker tracker, String data) + { + tracker.read(16); //Header length + if (data == null) + return; + + int len = data.length(); + int utflen = 0; + + for (int i = 0; i < len; i++) + { + int c = data.charAt(i); + if ((c >= 0x0001) && (c <= 0x007F)) utflen += 1; + else if (c > 0x07FF) utflen += 3; + else utflen += 2; + } + tracker.read(8 * utflen); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagByte.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagByte.java new file mode 100644 index 0000000..cdcd0f2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagByte.java @@ -0,0 +1,95 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByte extends NBTPrimitive +{ + /** The byte value for the tag. */ + private byte data; + + NBTTagByte() + { + } + + public NBTTagByte(byte data) + { + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeByte(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(72L); + this.data = input.readByte(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 1; + } + + public String toString() + { + return this.data + "b"; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagByte copy() + { + return new NBTTagByte(this.data); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && this.data == ((NBTTagByte)p_equals_1_).data; + } + + public int hashCode() + { + return super.hashCode() ^ this.data; + } + + public long getLong() + { + return (long)this.data; + } + + public int getInt() + { + return this.data; + } + + public short getShort() + { + return (short)this.data; + } + + public byte getByte() + { + return this.data; + } + + public double getDouble() + { + return (double)this.data; + } + + public float getFloat() + { + return (float)this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagByteArray.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagByteArray.java new file mode 100644 index 0000000..157c525 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagByteArray.java @@ -0,0 +1,108 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class NBTTagByteArray extends NBTBase +{ + /** The byte array stored in the tag. */ + private byte[] data; + + NBTTagByteArray() + { + } + + public NBTTagByteArray(byte[] data) + { + this.data = data; + } + + public NBTTagByteArray(List p_i47529_1_) + { + this(toArray(p_i47529_1_)); + } + + private static byte[] toArray(List p_193589_0_) + { + byte[] abyte = new byte[p_193589_0_.size()]; + + for (int i = 0; i < p_193589_0_.size(); ++i) + { + Byte obyte = p_193589_0_.get(i); + abyte[i] = obyte == null ? 0 : obyte.byteValue(); + } + + return abyte; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeInt(this.data.length); + output.write(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(192L); + int i = input.readInt(); + sizeTracker.read((long)(8 * i)); + this.data = new byte[i]; + input.readFully(this.data); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 7; + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder("[B;"); + + for (int i = 0; i < this.data.length; ++i) + { + if (i != 0) + { + stringbuilder.append(','); + } + + stringbuilder.append((int)this.data[i]).append('B'); + } + + return stringbuilder.append(']').toString(); + } + + /** + * Creates a clone of the tag. + */ + public NBTBase copy() + { + byte[] abyte = new byte[this.data.length]; + System.arraycopy(this.data, 0, abyte, 0, this.data.length); + return new NBTTagByteArray(abyte); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && Arrays.equals(this.data, ((NBTTagByteArray)p_equals_1_).data); + } + + public int hashCode() + { + return super.hashCode() ^ Arrays.hashCode(this.data); + } + + public byte[] getByteArray() + { + return this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagCompound.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagCompound.java new file mode 100644 index 0000000..d91ce0b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagCompound.java @@ -0,0 +1,648 @@ +package net.minecraft.nbt; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.util.ReportedException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class NBTTagCompound extends NBTBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Pattern SIMPLE_VALUE = Pattern.compile("[A-Za-z0-9._+-]+"); + /** The key-value pairs for the tag. Each key is a UTF string, each value is a tag. */ + private final Map tagMap = Maps.newHashMap(); + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + for (String s : this.tagMap.keySet()) + { + NBTBase nbtbase = this.tagMap.get(s); + writeEntry(s, nbtbase, output); + } + + output.writeByte(0); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(384L); + + if (depth > 512) + { + throw new RuntimeException("Tried to read NBT tag with too high complexity, depth > 512"); + } + else + { + this.tagMap.clear(); + byte b0; + + while ((b0 = readType(input, sizeTracker)) != 0) + { + String s = readKey(input, sizeTracker); + sizeTracker.read((long)(224 + 16 * s.length())); + NBTBase nbtbase = readNBT(b0, s, input, depth + 1, sizeTracker); + + if (this.tagMap.put(s, nbtbase) != null) + { + sizeTracker.read(288L); + } + } + } + } + + /** + * Gets a set with the names of the keys in the tag compound. + */ + public Set getKeySet() + { + return this.tagMap.keySet(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 10; + } + + public int getSize() + { + return this.tagMap.size(); + } + + /** + * Stores the given tag into the map with the given string key. This is mostly used to store tag lists. + */ + public void setTag(String key, NBTBase value) + { + this.tagMap.put(key, value); + } + + /** + * Stores a new NBTTagByte with the given byte value into the map with the given string key. + */ + public void setByte(String key, byte value) + { + this.tagMap.put(key, new NBTTagByte(value)); + } + + /** + * Stores a new NBTTagShort with the given short value into the map with the given string key. + */ + public void setShort(String key, short value) + { + this.tagMap.put(key, new NBTTagShort(value)); + } + + /** + * Stores a new NBTTagInt with the given integer value into the map with the given string key. + */ + public void setInteger(String key, int value) + { + this.tagMap.put(key, new NBTTagInt(value)); + } + + /** + * Stores a new NBTTagLong with the given long value into the map with the given string key. + */ + public void setLong(String key, long value) + { + this.tagMap.put(key, new NBTTagLong(value)); + } + + public void setUniqueId(String key, UUID value) + { + this.setLong(key + "Most", value.getMostSignificantBits()); + this.setLong(key + "Least", value.getLeastSignificantBits()); + } + + @Nullable + public UUID getUniqueId(String key) + { + return new UUID(this.getLong(key + "Most"), this.getLong(key + "Least")); + } + + public boolean hasUniqueId(String key) + { + return this.hasKey(key + "Most", 99) && this.hasKey(key + "Least", 99); + } + + /** + * Stores a new NBTTagFloat with the given float value into the map with the given string key. + */ + public void setFloat(String key, float value) + { + this.tagMap.put(key, new NBTTagFloat(value)); + } + + /** + * Stores a new NBTTagDouble with the given double value into the map with the given string key. + */ + public void setDouble(String key, double value) + { + this.tagMap.put(key, new NBTTagDouble(value)); + } + + /** + * Stores a new NBTTagString with the given string value into the map with the given string key. + */ + public void setString(String key, String value) + { + this.tagMap.put(key, new NBTTagString(value)); + } + + /** + * Stores a new NBTTagByteArray with the given array as data into the map with the given string key. + */ + public void setByteArray(String key, byte[] value) + { + this.tagMap.put(key, new NBTTagByteArray(value)); + } + + /** + * Stores a new NBTTagIntArray with the given array as data into the map with the given string key. + */ + public void setIntArray(String key, int[] value) + { + this.tagMap.put(key, new NBTTagIntArray(value)); + } + + /** + * Stores the given boolean value as a NBTTagByte, storing 1 for true and 0 for false, using the given string key. + */ + public void setBoolean(String key, boolean value) + { + this.setByte(key, (byte)(value ? 1 : 0)); + } + + /** + * gets a generic tag with the specified name + */ + public NBTBase getTag(String key) + { + return this.tagMap.get(key); + } + + /** + * Gets the ID byte for the given tag key + */ + public byte getTagId(String key) + { + NBTBase nbtbase = this.tagMap.get(key); + return nbtbase == null ? 0 : nbtbase.getId(); + } + + /** + * Returns whether the given string has been previously stored as a key in the map. + */ + public boolean hasKey(String key) + { + return this.tagMap.containsKey(key); + } + + /** + * Returns whether the given string has been previously stored as a key in this tag compound as a particular type, + * denoted by a parameter in the form of an ordinal. If the provided ordinal is 99, this method will match tag types + * representing numbers. + */ + public boolean hasKey(String key, int type) + { + int i = this.getTagId(key); + + if (i == type) + { + return true; + } + else if (type != 99) + { + return false; + } + else + { + return i == 1 || i == 2 || i == 3 || i == 4 || i == 5 || i == 6; + } + } + + /** + * Retrieves a byte value using the specified key, or 0 if no such key was stored. + */ + public byte getByte(String key) + { + try + { + if (this.hasKey(key, 99)) + { + return ((NBTPrimitive)this.tagMap.get(key)).getByte(); + } + } + catch (ClassCastException var3) + { + ; + } + + return 0; + } + + /** + * Retrieves a short value using the specified key, or 0 if no such key was stored. + */ + public short getShort(String key) + { + try + { + if (this.hasKey(key, 99)) + { + return ((NBTPrimitive)this.tagMap.get(key)).getShort(); + } + } + catch (ClassCastException var3) + { + ; + } + + return 0; + } + + /** + * Retrieves an integer value using the specified key, or 0 if no such key was stored. + */ + public int getInteger(String key) + { + try + { + if (this.hasKey(key, 99)) + { + return ((NBTPrimitive)this.tagMap.get(key)).getInt(); + } + } + catch (ClassCastException var3) + { + ; + } + + return 0; + } + + /** + * Retrieves a long value using the specified key, or 0 if no such key was stored. + */ + public long getLong(String key) + { + try + { + if (this.hasKey(key, 99)) + { + return ((NBTPrimitive)this.tagMap.get(key)).getLong(); + } + } + catch (ClassCastException var3) + { + ; + } + + return 0L; + } + + /** + * Retrieves a float value using the specified key, or 0 if no such key was stored. + */ + public float getFloat(String key) + { + try + { + if (this.hasKey(key, 99)) + { + return ((NBTPrimitive)this.tagMap.get(key)).getFloat(); + } + } + catch (ClassCastException var3) + { + ; + } + + return 0.0F; + } + + /** + * Retrieves a double value using the specified key, or 0 if no such key was stored. + */ + public double getDouble(String key) + { + try + { + if (this.hasKey(key, 99)) + { + return ((NBTPrimitive)this.tagMap.get(key)).getDouble(); + } + } + catch (ClassCastException var3) + { + ; + } + + return 0.0D; + } + + /** + * Retrieves a string value using the specified key, or an empty string if no such key was stored. + */ + public String getString(String key) + { + try + { + if (this.hasKey(key, 8)) + { + return ((NBTBase)this.tagMap.get(key)).getString(); + } + } + catch (ClassCastException var3) + { + ; + } + + return ""; + } + + /** + * Retrieves a byte array using the specified key, or a zero-length array if no such key was stored. + */ + public byte[] getByteArray(String key) + { + try + { + if (this.hasKey(key, 7)) + { + return ((NBTTagByteArray)this.tagMap.get(key)).getByteArray(); + } + } + catch (ClassCastException classcastexception) + { + throw new ReportedException(this.createCrashReport(key, 7, classcastexception)); + } + + return new byte[0]; + } + + /** + * Retrieves an int array using the specified key, or a zero-length array if no such key was stored. + */ + public int[] getIntArray(String key) + { + try + { + if (this.hasKey(key, 11)) + { + return ((NBTTagIntArray)this.tagMap.get(key)).getIntArray(); + } + } + catch (ClassCastException classcastexception) + { + throw new ReportedException(this.createCrashReport(key, 11, classcastexception)); + } + + return new int[0]; + } + + /** + * Retrieves a NBTTagCompound subtag matching the specified key, or a new empty NBTTagCompound if no such key was + * stored. + */ + public NBTTagCompound getCompoundTag(String key) + { + try + { + if (this.hasKey(key, 10)) + { + return (NBTTagCompound)this.tagMap.get(key); + } + } + catch (ClassCastException classcastexception) + { + throw new ReportedException(this.createCrashReport(key, 10, classcastexception)); + } + + return new NBTTagCompound(); + } + + /** + * Gets the NBTTagList object with the given name. + */ + public NBTTagList getTagList(String key, int type) + { + try + { + if (this.getTagId(key) == 9) + { + NBTTagList nbttaglist = (NBTTagList)this.tagMap.get(key); + + if (!nbttaglist.hasNoTags() && nbttaglist.getTagType() != type) + { + return new NBTTagList(); + } + + return nbttaglist; + } + } + catch (ClassCastException classcastexception) + { + throw new ReportedException(this.createCrashReport(key, 9, classcastexception)); + } + + return new NBTTagList(); + } + + /** + * Retrieves a boolean value using the specified key, or false if no such key was stored. This uses the getByte + * method. + */ + public boolean getBoolean(String key) + { + return this.getByte(key) != 0; + } + + /** + * Remove the specified tag. + */ + public void removeTag(String key) + { + this.tagMap.remove(key); + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder("{"); + Collection collection = this.tagMap.keySet(); + + if (LOGGER.isDebugEnabled()) + { + List list = Lists.newArrayList(this.tagMap.keySet()); + Collections.sort(list); + collection = list; + } + + for (String s : collection) + { + if (stringbuilder.length() != 1) + { + stringbuilder.append(','); + } + + stringbuilder.append(handleEscape(s)).append(':').append(this.tagMap.get(s)); + } + + return stringbuilder.append('}').toString(); + } + + /** + * Return whether this compound has no tags. + */ + public boolean hasNoTags() + { + return this.tagMap.isEmpty(); + } + + /** + * Create a crash report which indicates a NBT read error. + */ + private CrashReport createCrashReport(final String key, final int expectedType, ClassCastException ex) + { + CrashReport crashreport = CrashReport.makeCrashReport(ex, "Reading NBT data"); + CrashReportCategory crashreportcategory = crashreport.makeCategoryDepth("Corrupt NBT tag", 1); + crashreportcategory.addDetail("Tag type found", new ICrashReportDetail() + { + public String call() throws Exception + { + return NBTBase.NBT_TYPES[((NBTBase)NBTTagCompound.this.tagMap.get(key)).getId()]; + } + }); + crashreportcategory.addDetail("Tag type expected", new ICrashReportDetail() + { + public String call() throws Exception + { + return NBTBase.NBT_TYPES[expectedType]; + } + }); + crashreportcategory.addCrashSection("Tag name", key); + return crashreport; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagCompound copy() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + for (String s : this.tagMap.keySet()) + { + nbttagcompound.setTag(s, ((NBTBase)this.tagMap.get(s)).copy()); + } + + return nbttagcompound; + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && Objects.equals(this.tagMap.entrySet(), ((NBTTagCompound)p_equals_1_).tagMap.entrySet()); + } + + public int hashCode() + { + return super.hashCode() ^ this.tagMap.hashCode(); + } + + private static void writeEntry(String name, NBTBase data, DataOutput output) throws IOException + { + output.writeByte(data.getId()); + + if (data.getId() != 0) + { + output.writeUTF(name); + data.write(output); + } + } + + private static byte readType(DataInput input, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(8); + return input.readByte(); + } + + private static String readKey(DataInput input, NBTSizeTracker sizeTracker) throws IOException + { + return input.readUTF(); + } + + static NBTBase readNBT(byte id, String key, DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(32); //Forge: 4 extra bytes for the object allocation. + NBTBase nbtbase = NBTBase.createNewByType(id); + + try + { + nbtbase.read(input, depth, sizeTracker); + return nbtbase; + } + catch (IOException ioexception) + { + CrashReport crashreport = CrashReport.makeCrashReport(ioexception, "Loading NBT data"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("NBT Tag"); + crashreportcategory.addCrashSection("Tag name", key); + crashreportcategory.addCrashSection("Tag type", Byte.valueOf(id)); + throw new ReportedException(crashreport); + } + } + + /** + * Merges copies of data contained in {@code other} into this compound tag. + */ + public void merge(NBTTagCompound other) + { + for (String s : other.tagMap.keySet()) + { + NBTBase nbtbase = other.tagMap.get(s); + + if (nbtbase.getId() == 10) + { + if (this.hasKey(s, 10)) + { + NBTTagCompound nbttagcompound = this.getCompoundTag(s); + nbttagcompound.merge((NBTTagCompound)nbtbase); + } + else + { + this.setTag(s, nbtbase.copy()); + } + } + else + { + this.setTag(s, nbtbase.copy()); + } + } + } + + protected static String handleEscape(String p_193582_0_) + { + return SIMPLE_VALUE.matcher(p_193582_0_).matches() ? p_193582_0_ : NBTTagString.quoteAndEscape(p_193582_0_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagDouble.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagDouble.java new file mode 100644 index 0000000..e83ecc4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagDouble.java @@ -0,0 +1,97 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import net.minecraft.util.math.MathHelper; + +public class NBTTagDouble extends NBTPrimitive +{ + /** The double value for the tag. */ + private double data; + + NBTTagDouble() + { + } + + public NBTTagDouble(double data) + { + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeDouble(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(128L); + this.data = input.readDouble(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 6; + } + + public String toString() + { + return this.data + "d"; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagDouble copy() + { + return new NBTTagDouble(this.data); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && this.data == ((NBTTagDouble)p_equals_1_).data; + } + + public int hashCode() + { + long i = Double.doubleToLongBits(this.data); + return super.hashCode() ^ (int)(i ^ i >>> 32); + } + + public long getLong() + { + return (long)Math.floor(this.data); + } + + public int getInt() + { + return MathHelper.floor(this.data); + } + + public short getShort() + { + return (short)(MathHelper.floor(this.data) & 65535); + } + + public byte getByte() + { + return (byte)(MathHelper.floor(this.data) & 255); + } + + public double getDouble() + { + return this.data; + } + + public float getFloat() + { + return (float)this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagEnd.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagEnd.java new file mode 100644 index 0000000..2900953 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagEnd.java @@ -0,0 +1,41 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagEnd extends NBTBase +{ + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(64L); + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 0; + } + + public String toString() + { + return "END"; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagEnd copy() + { + return new NBTTagEnd(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagFloat.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagFloat.java new file mode 100644 index 0000000..a931c6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagFloat.java @@ -0,0 +1,96 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import net.minecraft.util.math.MathHelper; + +public class NBTTagFloat extends NBTPrimitive +{ + /** The float value for the tag. */ + private float data; + + NBTTagFloat() + { + } + + public NBTTagFloat(float data) + { + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeFloat(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(96L); + this.data = input.readFloat(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 5; + } + + public String toString() + { + return this.data + "f"; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagFloat copy() + { + return new NBTTagFloat(this.data); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && this.data == ((NBTTagFloat)p_equals_1_).data; + } + + public int hashCode() + { + return super.hashCode() ^ Float.floatToIntBits(this.data); + } + + public long getLong() + { + return (long)this.data; + } + + public int getInt() + { + return MathHelper.floor(this.data); + } + + public short getShort() + { + return (short)(MathHelper.floor(this.data) & 65535); + } + + public byte getByte() + { + return (byte)(MathHelper.floor(this.data) & 255); + } + + public double getDouble() + { + return (double)this.data; + } + + public float getFloat() + { + return this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagInt.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagInt.java new file mode 100644 index 0000000..bc093a5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagInt.java @@ -0,0 +1,95 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagInt extends NBTPrimitive +{ + /** The integer value for the tag. */ + private int data; + + NBTTagInt() + { + } + + public NBTTagInt(int data) + { + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeInt(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(96L); + this.data = input.readInt(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 3; + } + + public String toString() + { + return String.valueOf(this.data); + } + + /** + * Creates a clone of the tag. + */ + public NBTTagInt copy() + { + return new NBTTagInt(this.data); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && this.data == ((NBTTagInt)p_equals_1_).data; + } + + public int hashCode() + { + return super.hashCode() ^ this.data; + } + + public long getLong() + { + return (long)this.data; + } + + public int getInt() + { + return this.data; + } + + public short getShort() + { + return (short)(this.data & 65535); + } + + public byte getByte() + { + return (byte)(this.data & 255); + } + + public double getDouble() + { + return (double)this.data; + } + + public float getFloat() + { + return (float)this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagIntArray.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagIntArray.java new file mode 100644 index 0000000..ee39249 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagIntArray.java @@ -0,0 +1,116 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class NBTTagIntArray extends NBTBase +{ + /** The array of saved integers */ + private int[] intArray; + + NBTTagIntArray() + { + } + + public NBTTagIntArray(int[] p_i45132_1_) + { + this.intArray = p_i45132_1_; + } + + public NBTTagIntArray(List p_i47528_1_) + { + this(toArray(p_i47528_1_)); + } + + private static int[] toArray(List p_193584_0_) + { + int[] aint = new int[p_193584_0_.size()]; + + for (int i = 0; i < p_193584_0_.size(); ++i) + { + Integer integer = p_193584_0_.get(i); + aint[i] = integer == null ? 0 : integer.intValue(); + } + + return aint; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeInt(this.intArray.length); + + for (int i : this.intArray) + { + output.writeInt(i); + } + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(192L); + int i = input.readInt(); + sizeTracker.read((long)(32 * i)); + this.intArray = new int[i]; + + for (int j = 0; j < i; ++j) + { + this.intArray[j] = input.readInt(); + } + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 11; + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder("[I;"); + + for (int i = 0; i < this.intArray.length; ++i) + { + if (i != 0) + { + stringbuilder.append(','); + } + + stringbuilder.append(this.intArray[i]); + } + + return stringbuilder.append(']').toString(); + } + + /** + * Creates a clone of the tag. + */ + public NBTTagIntArray copy() + { + int[] aint = new int[this.intArray.length]; + System.arraycopy(this.intArray, 0, aint, 0, this.intArray.length); + return new NBTTagIntArray(aint); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && Arrays.equals(this.intArray, ((NBTTagIntArray)p_equals_1_).intArray); + } + + public int hashCode() + { + return super.hashCode() ^ Arrays.hashCode(this.intArray); + } + + public int[] getIntArray() + { + return this.intArray; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagList.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagList.java new file mode 100644 index 0000000..bb088b4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagList.java @@ -0,0 +1,321 @@ +package net.minecraft.nbt; + +import com.google.common.collect.Lists; +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.List; +import java.util.Objects; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class NBTTagList extends NBTBase implements java.lang.Iterable +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The array list containing the tags encapsulated in this list. */ + public List tagList = Lists.newArrayList(); + /** The type byte for the tags in the list - they must all be of the same type. */ + private byte tagType = 0; + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + if (this.tagList.isEmpty()) + { + this.tagType = 0; + } + else + { + this.tagType = ((NBTBase)this.tagList.get(0)).getId(); + } + + output.writeByte(this.tagType); + output.writeInt(this.tagList.size()); + + for (int i = 0; i < this.tagList.size(); ++i) + { + ((NBTBase)this.tagList.get(i)).write(output); + } + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(296L); + + if (depth > 512) + { + throw new RuntimeException("Tried to read NBT tag with too high complexity, depth > 512"); + } + else + { + this.tagType = input.readByte(); + int i = input.readInt(); + + if (this.tagType == 0 && i > 0) + { + throw new RuntimeException("Missing type on ListTag"); + } + else + { + sizeTracker.read(32L * (long)i); + this.tagList = Lists.newArrayListWithCapacity(i); + + for (int j = 0; j < i; ++j) + { + NBTBase nbtbase = NBTBase.createNewByType(this.tagType); + nbtbase.read(input, depth + 1, sizeTracker); + this.tagList.add(nbtbase); + } + } + } + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 9; + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder("["); + + for (int i = 0; i < this.tagList.size(); ++i) + { + if (i != 0) + { + stringbuilder.append(','); + } + + stringbuilder.append(this.tagList.get(i)); + } + + return stringbuilder.append(']').toString(); + } + + /** + * Adds the provided tag to the end of the list. There is no check to verify this tag is of the same type as any + * previous tag. + */ + public void appendTag(NBTBase nbt) + { + if (nbt.getId() == 0) + { + LOGGER.warn("Invalid TagEnd added to ListTag"); + } + else + { + if (this.tagType == 0) + { + this.tagType = nbt.getId(); + } + else if (this.tagType != nbt.getId()) + { + LOGGER.warn("Adding mismatching tag types to tag list"); + return; + } + + this.tagList.add(nbt); + } + } + + /** + * Set the given index to the given tag + */ + public void set(int idx, NBTBase nbt) + { + if (nbt.getId() == 0) + { + LOGGER.warn("Invalid TagEnd added to ListTag"); + } + else if (idx >= 0 && idx < this.tagList.size()) + { + if (this.tagType == 0) + { + this.tagType = nbt.getId(); + } + else if (this.tagType != nbt.getId()) + { + LOGGER.warn("Adding mismatching tag types to tag list"); + return; + } + + this.tagList.set(idx, nbt); + } + else + { + LOGGER.warn("index out of bounds to set tag in tag list"); + } + } + + /** + * Removes a tag at the given index. + */ + public NBTBase removeTag(int i) + { + return this.tagList.remove(i); + } + + /** + * Return whether this compound has no tags. + */ + public boolean hasNoTags() + { + return this.tagList.isEmpty(); + } + + /** + * Retrieves the NBTTagCompound at the specified index in the list + */ + public NBTTagCompound getCompoundTagAt(int i) + { + if (i >= 0 && i < this.tagList.size()) + { + NBTBase nbtbase = this.tagList.get(i); + + if (nbtbase.getId() == 10) + { + return (NBTTagCompound)nbtbase; + } + } + + return new NBTTagCompound(); + } + + public int getIntAt(int p_186858_1_) + { + if (p_186858_1_ >= 0 && p_186858_1_ < this.tagList.size()) + { + NBTBase nbtbase = this.tagList.get(p_186858_1_); + + if (nbtbase.getId() == 3) + { + return ((NBTTagInt)nbtbase).getInt(); + } + } + + return 0; + } + + public int[] getIntArrayAt(int i) + { + if (i >= 0 && i < this.tagList.size()) + { + NBTBase nbtbase = this.tagList.get(i); + + if (nbtbase.getId() == 11) + { + return ((NBTTagIntArray)nbtbase).getIntArray(); + } + } + + return new int[0]; + } + + public double getDoubleAt(int i) + { + if (i >= 0 && i < this.tagList.size()) + { + NBTBase nbtbase = this.tagList.get(i); + + if (nbtbase.getId() == 6) + { + return ((NBTTagDouble)nbtbase).getDouble(); + } + } + + return 0.0D; + } + + public float getFloatAt(int i) + { + if (i >= 0 && i < this.tagList.size()) + { + NBTBase nbtbase = this.tagList.get(i); + + if (nbtbase.getId() == 5) + { + return ((NBTTagFloat)nbtbase).getFloat(); + } + } + + return 0.0F; + } + + /** + * Retrieves the tag String value at the specified index in the list + */ + public String getStringTagAt(int i) + { + if (i >= 0 && i < this.tagList.size()) + { + NBTBase nbtbase = this.tagList.get(i); + return nbtbase.getId() == 8 ? nbtbase.getString() : nbtbase.toString(); + } + else + { + return ""; + } + } + + /** + * Get the tag at the given position + */ + public NBTBase get(int idx) + { + return (NBTBase)(idx >= 0 && idx < this.tagList.size() ? (NBTBase)this.tagList.get(idx) : new NBTTagEnd()); + } + + /** + * Returns the number of tags in the list. + */ + public int tagCount() + { + return this.tagList.size(); + } + + /** + * Creates a clone of the tag. + */ + public NBTTagList copy() + { + NBTTagList nbttaglist = new NBTTagList(); + nbttaglist.tagType = this.tagType; + + for (NBTBase nbtbase : this.tagList) + { + NBTBase nbtbase1 = nbtbase.copy(); + nbttaglist.tagList.add(nbtbase1); + } + + return nbttaglist; + } + + public boolean equals(Object p_equals_1_) + { + if (!super.equals(p_equals_1_)) + { + return false; + } + else + { + NBTTagList nbttaglist = (NBTTagList)p_equals_1_; + return this.tagType == nbttaglist.tagType && Objects.equals(this.tagList, nbttaglist.tagList); + } + } + + public int hashCode() + { + return super.hashCode() ^ this.tagList.hashCode(); + } + + public int getTagType() + { + return this.tagType; + } + @Override public java.util.Iterator iterator() {return tagList.iterator();} +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagLong.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagLong.java new file mode 100644 index 0000000..8e374e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagLong.java @@ -0,0 +1,95 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagLong extends NBTPrimitive +{ + /** The long value for the tag. */ + private long data; + + NBTTagLong() + { + } + + public NBTTagLong(long data) + { + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeLong(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(128L); + this.data = input.readLong(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 4; + } + + public String toString() + { + return this.data + "L"; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagLong copy() + { + return new NBTTagLong(this.data); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && this.data == ((NBTTagLong)p_equals_1_).data; + } + + public int hashCode() + { + return super.hashCode() ^ (int)(this.data ^ this.data >>> 32); + } + + public long getLong() + { + return this.data; + } + + public int getInt() + { + return (int)(this.data & -1L); + } + + public short getShort() + { + return (short)((int)(this.data & 65535L)); + } + + public byte getByte() + { + return (byte)((int)(this.data & 255L)); + } + + public double getDouble() + { + return (double)this.data; + } + + public float getFloat() + { + return (float)this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagLongArray.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagLongArray.java new file mode 100644 index 0000000..79bd71d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagLongArray.java @@ -0,0 +1,110 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class NBTTagLongArray extends NBTBase +{ + private long[] data; + + NBTTagLongArray() + { + } + + public NBTTagLongArray(long[] p_i47524_1_) + { + this.data = p_i47524_1_; + } + + public NBTTagLongArray(List p_i47525_1_) + { + this(toArray(p_i47525_1_)); + } + + private static long[] toArray(List p_193586_0_) + { + long[] along = new long[p_193586_0_.size()]; + + for (int i = 0; i < p_193586_0_.size(); ++i) + { + Long olong = p_193586_0_.get(i); + along[i] = olong == null ? 0L : olong.longValue(); + } + + return along; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeInt(this.data.length); + + for (long i : this.data) + { + output.writeLong(i); + } + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(192L); + int i = input.readInt(); + sizeTracker.read((long)(64 * i)); + this.data = new long[i]; + + for (int j = 0; j < i; ++j) + { + this.data[j] = input.readLong(); + } + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 12; + } + + public String toString() + { + StringBuilder stringbuilder = new StringBuilder("[L;"); + + for (int i = 0; i < this.data.length; ++i) + { + if (i != 0) + { + stringbuilder.append(','); + } + + stringbuilder.append(this.data[i]).append('L'); + } + + return stringbuilder.append(']').toString(); + } + + /** + * Creates a clone of the tag. + */ + public NBTTagLongArray copy() + { + long[] along = new long[this.data.length]; + System.arraycopy(this.data, 0, along, 0, this.data.length); + return new NBTTagLongArray(along); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && Arrays.equals(this.data, ((NBTTagLongArray)p_equals_1_).data); + } + + public int hashCode() + { + return super.hashCode() ^ Arrays.hashCode(this.data); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagShort.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagShort.java new file mode 100644 index 0000000..7b1c747 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagShort.java @@ -0,0 +1,95 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagShort extends NBTPrimitive +{ + /** The short value for the tag. */ + private short data; + + public NBTTagShort() + { + } + + public NBTTagShort(short data) + { + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeShort(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(80L); + this.data = input.readShort(); + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 2; + } + + public String toString() + { + return this.data + "s"; + } + + /** + * Creates a clone of the tag. + */ + public NBTTagShort copy() + { + return new NBTTagShort(this.data); + } + + public boolean equals(Object p_equals_1_) + { + return super.equals(p_equals_1_) && this.data == ((NBTTagShort)p_equals_1_).data; + } + + public int hashCode() + { + return super.hashCode() ^ this.data; + } + + public long getLong() + { + return (long)this.data; + } + + public int getInt() + { + return this.data; + } + + public short getShort() + { + return this.data; + } + + public byte getByte() + { + return (byte)(this.data & 255); + } + + public double getDouble() + { + return (double)this.data; + } + + public float getFloat() + { + return (float)this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagString.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagString.java new file mode 100644 index 0000000..14d22ac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTTagString.java @@ -0,0 +1,109 @@ +package net.minecraft.nbt; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Objects; + +public class NBTTagString extends NBTBase +{ + /** The string value for the tag (cannot be empty). */ + private String data; + + public NBTTagString() + { + this(""); + } + + public NBTTagString(String data) + { + Objects.requireNonNull(data, "Null string not allowed"); + this.data = data; + } + + /** + * Write the actual data contents of the tag, implemented in NBT extension classes + */ + void write(DataOutput output) throws IOException + { + output.writeUTF(this.data); + } + + void read(DataInput input, int depth, NBTSizeTracker sizeTracker) throws IOException + { + sizeTracker.read(288L); + this.data = input.readUTF(); + NBTSizeTracker.readUTF(sizeTracker, data); // Forge: Correctly read String length including header. + } + + /** + * Gets the type byte for the tag. + */ + public byte getId() + { + return 8; + } + + public String toString() + { + return quoteAndEscape(this.data); + } + + /** + * Creates a clone of the tag. + */ + public NBTTagString copy() + { + return new NBTTagString(this.data); + } + + /** + * Return whether this compound has no tags. + */ + public boolean hasNoTags() + { + return this.data.isEmpty(); + } + + public boolean equals(Object p_equals_1_) + { + if (!super.equals(p_equals_1_)) + { + return false; + } + else + { + NBTTagString nbttagstring = (NBTTagString)p_equals_1_; + return this.data == null && nbttagstring.data == null || Objects.equals(this.data, nbttagstring.data); + } + } + + public int hashCode() + { + return super.hashCode() ^ this.data.hashCode(); + } + + public String getString() + { + return this.data; + } + + public static String quoteAndEscape(String p_193588_0_) + { + StringBuilder stringbuilder = new StringBuilder("\""); + + for (int i = 0; i < p_193588_0_.length(); ++i) + { + char c0 = p_193588_0_.charAt(i); + + if (c0 == '\\' || c0 == '"') + { + stringbuilder.append('\\'); + } + + stringbuilder.append(c0); + } + + return stringbuilder.append('"').toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTUtil.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTUtil.java new file mode 100644 index 0000000..3002a0e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/NBTUtil.java @@ -0,0 +1,332 @@ +package net.minecraft.nbt; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Optional; +import com.google.common.collect.UnmodifiableIterator; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import java.util.UUID; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.BlockPos; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public final class NBTUtil +{ + private static final Logger LOGGER = LogManager.getLogger(); + + /** + * Reads and returns a GameProfile that has been saved to the passed in NBTTagCompound + */ + @Nullable + public static GameProfile readGameProfileFromNBT(NBTTagCompound compound) + { + String s = null; + String s1 = null; + + if (compound.hasKey("Name", 8)) + { + s = compound.getString("Name"); + } + + if (compound.hasKey("Id", 8)) + { + s1 = compound.getString("Id"); + } + + try + { + UUID uuid; + + try + { + uuid = UUID.fromString(s1); + } + catch (Throwable var12) + { + uuid = null; + } + + GameProfile gameprofile = new GameProfile(uuid, s); + + if (compound.hasKey("Properties", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("Properties"); + + for (String s2 : nbttagcompound.getKeySet()) + { + NBTTagList nbttaglist = nbttagcompound.getTagList(s2, 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + String s3 = nbttagcompound1.getString("Value"); + + if (nbttagcompound1.hasKey("Signature", 8)) + { + gameprofile.getProperties().put(s2, new Property(s2, s3, nbttagcompound1.getString("Signature"))); + } + else + { + gameprofile.getProperties().put(s2, new Property(s2, s3)); + } + } + } + } + + return gameprofile; + } + catch (Throwable var13) + { + return null; + } + } + + /** + * Writes a GameProfile to an NBTTagCompound. + */ + public static NBTTagCompound writeGameProfile(NBTTagCompound tagCompound, GameProfile profile) + { + if (!StringUtils.isNullOrEmpty(profile.getName())) + { + tagCompound.setString("Name", profile.getName()); + } + + if (profile.getId() != null) + { + tagCompound.setString("Id", profile.getId().toString()); + } + + if (!profile.getProperties().isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + for (String s : profile.getProperties().keySet()) + { + NBTTagList nbttaglist = new NBTTagList(); + + for (Property property : profile.getProperties().get(s)) + { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + nbttagcompound1.setString("Value", property.getValue()); + + if (property.hasSignature()) + { + nbttagcompound1.setString("Signature", property.getSignature()); + } + + nbttaglist.appendTag(nbttagcompound1); + } + + nbttagcompound.setTag(s, nbttaglist); + } + + tagCompound.setTag("Properties", nbttagcompound); + } + + return tagCompound; + } + + @VisibleForTesting + public static boolean areNBTEquals(NBTBase nbt1, NBTBase nbt2, boolean compareTagList) + { + if (nbt1 == nbt2) + { + return true; + } + else if (nbt1 == null) + { + return true; + } + else if (nbt2 == null) + { + return false; + } + else if (!nbt1.getClass().equals(nbt2.getClass())) + { + return false; + } + else if (nbt1 instanceof NBTTagCompound) + { + NBTTagCompound nbttagcompound = (NBTTagCompound)nbt1; + NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbt2; + + for (String s : nbttagcompound.getKeySet()) + { + NBTBase nbtbase1 = nbttagcompound.getTag(s); + + if (!areNBTEquals(nbtbase1, nbttagcompound1.getTag(s), compareTagList)) + { + return false; + } + } + + return true; + } + else if (nbt1 instanceof NBTTagList && compareTagList) + { + NBTTagList nbttaglist = (NBTTagList)nbt1; + NBTTagList nbttaglist1 = (NBTTagList)nbt2; + + if (nbttaglist.hasNoTags()) + { + return nbttaglist1.hasNoTags(); + } + else + { + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTBase nbtbase = nbttaglist.get(i); + boolean flag = false; + + for (int j = 0; j < nbttaglist1.tagCount(); ++j) + { + if (areNBTEquals(nbtbase, nbttaglist1.get(j), compareTagList)) + { + flag = true; + break; + } + } + + if (!flag) + { + return false; + } + } + + return true; + } + } + else + { + return nbt1.equals(nbt2); + } + } + + /** + * Creates a new NBTTagCompound which stores a UUID. + */ + public static NBTTagCompound createUUIDTag(UUID uuid) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setLong("M", uuid.getMostSignificantBits()); + nbttagcompound.setLong("L", uuid.getLeastSignificantBits()); + return nbttagcompound; + } + + /** + * Reads a UUID from the passed NBTTagCompound. + */ + public static UUID getUUIDFromTag(NBTTagCompound tag) + { + return new UUID(tag.getLong("M"), tag.getLong("L")); + } + + /** + * Creates a BlockPos object from the data stored in the passed NBTTagCompound. + */ + public static BlockPos getPosFromTag(NBTTagCompound tag) + { + return new BlockPos(tag.getInteger("X"), tag.getInteger("Y"), tag.getInteger("Z")); + } + + /** + * Creates a new NBTTagCompound from a BlockPos. + */ + public static NBTTagCompound createPosTag(BlockPos pos) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setInteger("X", pos.getX()); + nbttagcompound.setInteger("Y", pos.getY()); + nbttagcompound.setInteger("Z", pos.getZ()); + return nbttagcompound; + } + + /** + * Reads a blockstate from the given tag. + */ + public static IBlockState readBlockState(NBTTagCompound tag) + { + if (!tag.hasKey("Name", 8)) + { + return Blocks.AIR.getDefaultState(); + } + else + { + Block block = Block.REGISTRY.getObject(new ResourceLocation(tag.getString("Name"))); + IBlockState iblockstate = block.getDefaultState(); + + if (tag.hasKey("Properties", 10)) + { + NBTTagCompound nbttagcompound = tag.getCompoundTag("Properties"); + BlockStateContainer blockstatecontainer = block.getBlockState(); + + for (String s : nbttagcompound.getKeySet()) + { + IProperty iproperty = blockstatecontainer.getProperty(s); + + if (iproperty != null) + { + iblockstate = setValueHelper(iblockstate, iproperty, s, nbttagcompound, tag); + } + } + } + + return iblockstate; + } + } + + private static > IBlockState setValueHelper(IBlockState p_193590_0_, IProperty p_193590_1_, String p_193590_2_, NBTTagCompound p_193590_3_, NBTTagCompound p_193590_4_) + { + Optional optional = p_193590_1_.parseValue(p_193590_3_.getString(p_193590_2_)); + + if (optional.isPresent()) + { + return p_193590_0_.withProperty(p_193590_1_, optional.get()); + } + else + { + LOGGER.warn("Unable to read property: {} with value: {} for blockstate: {}", p_193590_2_, p_193590_3_.getString(p_193590_2_), p_193590_4_.toString()); + return p_193590_0_; + } + } + + /** + * Writes the given blockstate to the given tag. + */ + public static NBTTagCompound writeBlockState(NBTTagCompound tag, IBlockState state) + { + tag.setString("Name", ((ResourceLocation)Block.REGISTRY.getNameForObject(state.getBlock())).toString()); + + if (!state.getProperties().isEmpty()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + UnmodifiableIterator unmodifiableiterator = state.getProperties().entrySet().iterator(); + + while (unmodifiableiterator.hasNext()) + { + Entry < IProperty, Comparable> entry = (Entry)unmodifiableiterator.next(); + IProperty iproperty = (IProperty)entry.getKey(); + nbttagcompound.setString(iproperty.getName(), getName(iproperty, entry.getValue())); + } + + tag.setTag("Properties", nbttagcompound); + } + + return tag; + } + + @SuppressWarnings("unchecked") + private static > String getName(IProperty p_190010_0_, Comparable p_190010_1_) + { + return p_190010_0_.getName((T)p_190010_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/nbt/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/nbt/package-info.java new file mode 100644 index 0000000..4f1ed79 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/nbt/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.nbt; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/EnumConnectionState.java b/build/tmp/recompileMc/sources/net/minecraft/network/EnumConnectionState.java new file mode 100644 index 0000000..3789fed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/EnumConnectionState.java @@ -0,0 +1,371 @@ +package net.minecraft.network; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.login.client.CPacketEncryptionResponse; +import net.minecraft.network.login.client.CPacketLoginStart; +import net.minecraft.network.login.server.SPacketEnableCompression; +import net.minecraft.network.login.server.SPacketEncryptionRequest; +import net.minecraft.network.login.server.SPacketLoginSuccess; +import net.minecraft.network.play.client.CPacketAnimation; +import net.minecraft.network.play.client.CPacketChatMessage; +import net.minecraft.network.play.client.CPacketClickWindow; +import net.minecraft.network.play.client.CPacketClientSettings; +import net.minecraft.network.play.client.CPacketClientStatus; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.network.play.client.CPacketConfirmTeleport; +import net.minecraft.network.play.client.CPacketConfirmTransaction; +import net.minecraft.network.play.client.CPacketCreativeInventoryAction; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.network.play.client.CPacketEnchantItem; +import net.minecraft.network.play.client.CPacketEntityAction; +import net.minecraft.network.play.client.CPacketHeldItemChange; +import net.minecraft.network.play.client.CPacketInput; +import net.minecraft.network.play.client.CPacketKeepAlive; +import net.minecraft.network.play.client.CPacketPlaceRecipe; +import net.minecraft.network.play.client.CPacketPlayer; +import net.minecraft.network.play.client.CPacketPlayerAbilities; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.network.play.client.CPacketPlayerTryUseItem; +import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; +import net.minecraft.network.play.client.CPacketRecipeInfo; +import net.minecraft.network.play.client.CPacketResourcePackStatus; +import net.minecraft.network.play.client.CPacketSeenAdvancements; +import net.minecraft.network.play.client.CPacketSpectate; +import net.minecraft.network.play.client.CPacketSteerBoat; +import net.minecraft.network.play.client.CPacketTabComplete; +import net.minecraft.network.play.client.CPacketUpdateSign; +import net.minecraft.network.play.client.CPacketUseEntity; +import net.minecraft.network.play.client.CPacketVehicleMove; +import net.minecraft.network.play.server.SPacketAdvancementInfo; +import net.minecraft.network.play.server.SPacketAnimation; +import net.minecraft.network.play.server.SPacketBlockAction; +import net.minecraft.network.play.server.SPacketBlockBreakAnim; +import net.minecraft.network.play.server.SPacketBlockChange; +import net.minecraft.network.play.server.SPacketCamera; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.network.play.server.SPacketChat; +import net.minecraft.network.play.server.SPacketChunkData; +import net.minecraft.network.play.server.SPacketCloseWindow; +import net.minecraft.network.play.server.SPacketCollectItem; +import net.minecraft.network.play.server.SPacketCombatEvent; +import net.minecraft.network.play.server.SPacketConfirmTransaction; +import net.minecraft.network.play.server.SPacketCooldown; +import net.minecraft.network.play.server.SPacketCustomPayload; +import net.minecraft.network.play.server.SPacketCustomSound; +import net.minecraft.network.play.server.SPacketDestroyEntities; +import net.minecraft.network.play.server.SPacketDisconnect; +import net.minecraft.network.play.server.SPacketDisplayObjective; +import net.minecraft.network.play.server.SPacketEffect; +import net.minecraft.network.play.server.SPacketEntity; +import net.minecraft.network.play.server.SPacketEntityAttach; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketEntityEquipment; +import net.minecraft.network.play.server.SPacketEntityHeadLook; +import net.minecraft.network.play.server.SPacketEntityMetadata; +import net.minecraft.network.play.server.SPacketEntityProperties; +import net.minecraft.network.play.server.SPacketEntityStatus; +import net.minecraft.network.play.server.SPacketEntityTeleport; +import net.minecraft.network.play.server.SPacketEntityVelocity; +import net.minecraft.network.play.server.SPacketExplosion; +import net.minecraft.network.play.server.SPacketHeldItemChange; +import net.minecraft.network.play.server.SPacketJoinGame; +import net.minecraft.network.play.server.SPacketKeepAlive; +import net.minecraft.network.play.server.SPacketMaps; +import net.minecraft.network.play.server.SPacketMoveVehicle; +import net.minecraft.network.play.server.SPacketMultiBlockChange; +import net.minecraft.network.play.server.SPacketOpenWindow; +import net.minecraft.network.play.server.SPacketParticles; +import net.minecraft.network.play.server.SPacketPlaceGhostRecipe; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketPlayerListHeaderFooter; +import net.minecraft.network.play.server.SPacketPlayerListItem; +import net.minecraft.network.play.server.SPacketPlayerPosLook; +import net.minecraft.network.play.server.SPacketRecipeBook; +import net.minecraft.network.play.server.SPacketRemoveEntityEffect; +import net.minecraft.network.play.server.SPacketResourcePackSend; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketScoreboardObjective; +import net.minecraft.network.play.server.SPacketSelectAdvancementsTab; +import net.minecraft.network.play.server.SPacketServerDifficulty; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.network.play.server.SPacketSetPassengers; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.network.play.server.SPacketSignEditorOpen; +import net.minecraft.network.play.server.SPacketSoundEffect; +import net.minecraft.network.play.server.SPacketSpawnExperienceOrb; +import net.minecraft.network.play.server.SPacketSpawnGlobalEntity; +import net.minecraft.network.play.server.SPacketSpawnMob; +import net.minecraft.network.play.server.SPacketSpawnObject; +import net.minecraft.network.play.server.SPacketSpawnPainting; +import net.minecraft.network.play.server.SPacketSpawnPlayer; +import net.minecraft.network.play.server.SPacketSpawnPosition; +import net.minecraft.network.play.server.SPacketStatistics; +import net.minecraft.network.play.server.SPacketTabComplete; +import net.minecraft.network.play.server.SPacketTeams; +import net.minecraft.network.play.server.SPacketTimeUpdate; +import net.minecraft.network.play.server.SPacketTitle; +import net.minecraft.network.play.server.SPacketUnloadChunk; +import net.minecraft.network.play.server.SPacketUpdateBossInfo; +import net.minecraft.network.play.server.SPacketUpdateHealth; +import net.minecraft.network.play.server.SPacketUpdateScore; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.network.play.server.SPacketUseBed; +import net.minecraft.network.play.server.SPacketWindowItems; +import net.minecraft.network.play.server.SPacketWindowProperty; +import net.minecraft.network.play.server.SPacketWorldBorder; +import net.minecraft.network.status.client.CPacketPing; +import net.minecraft.network.status.client.CPacketServerQuery; +import net.minecraft.network.status.server.SPacketPong; +import net.minecraft.network.status.server.SPacketServerInfo; +import org.apache.logging.log4j.LogManager; + +public enum EnumConnectionState +{ + HANDSHAKING(-1) + { + { + this.registerPacket(EnumPacketDirection.SERVERBOUND, C00Handshake.class); + } + }, + PLAY(0) + { + { + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnObject.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnExperienceOrb.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnGlobalEntity.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnMob.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnPainting.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnPlayer.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketAnimation.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketStatistics.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketBlockBreakAnim.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketUpdateTileEntity.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketBlockAction.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketBlockChange.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketUpdateBossInfo.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketServerDifficulty.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketTabComplete.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketChat.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketMultiBlockChange.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketConfirmTransaction.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCloseWindow.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketOpenWindow.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketWindowItems.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketWindowProperty.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSetSlot.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCooldown.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCustomPayload.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCustomSound.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketDisconnect.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityStatus.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketExplosion.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketUnloadChunk.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketChangeGameState.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketKeepAlive.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketChunkData.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEffect.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketParticles.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketJoinGame.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketMaps.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntity.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntity.S15PacketEntityRelMove.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntity.S17PacketEntityLookMove.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntity.S16PacketEntityLook.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketMoveVehicle.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSignEditorOpen.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketPlaceGhostRecipe.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketPlayerAbilities.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCombatEvent.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketPlayerListItem.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketPlayerPosLook.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketUseBed.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketRecipeBook.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketDestroyEntities.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketRemoveEntityEffect.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketResourcePackSend.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketRespawn.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityHeadLook.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSelectAdvancementsTab.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketWorldBorder.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCamera.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketHeldItemChange.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketDisplayObjective.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityMetadata.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityAttach.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityVelocity.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityEquipment.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSetExperience.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketUpdateHealth.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketScoreboardObjective.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSetPassengers.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketTeams.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketUpdateScore.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSpawnPosition.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketTimeUpdate.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketTitle.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketSoundEffect.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketPlayerListHeaderFooter.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketCollectItem.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityTeleport.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketAdvancementInfo.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityProperties.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEntityEffect.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketConfirmTeleport.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketTabComplete.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketChatMessage.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketClientStatus.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketClientSettings.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketConfirmTransaction.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketEnchantItem.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketClickWindow.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketCloseWindow.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketCustomPayload.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketUseEntity.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketKeepAlive.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayer.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayer.Position.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayer.PositionRotation.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayer.Rotation.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketVehicleMove.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketSteerBoat.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlaceRecipe.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayerAbilities.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayerDigging.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketEntityAction.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketInput.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketRecipeInfo.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketResourcePackStatus.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketSeenAdvancements.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketHeldItemChange.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketCreativeInventoryAction.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketUpdateSign.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketAnimation.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketSpectate.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayerTryUseItemOnBlock.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPlayerTryUseItem.class); + } + }, + STATUS(1) + { + { + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketServerQuery.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketServerInfo.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketPing.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketPong.class); + } + }, + LOGIN(2) + { + { + this.registerPacket(EnumPacketDirection.CLIENTBOUND, net.minecraft.network.login.server.SPacketDisconnect.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEncryptionRequest.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketLoginSuccess.class); + this.registerPacket(EnumPacketDirection.CLIENTBOUND, SPacketEnableCompression.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketLoginStart.class); + this.registerPacket(EnumPacketDirection.SERVERBOUND, CPacketEncryptionResponse.class); + } + }; + + private static final EnumConnectionState[] STATES_BY_ID = new EnumConnectionState[4]; + private static final Map < Class > , EnumConnectionState > STATES_BY_CLASS = Maps. < Class > , EnumConnectionState > newHashMap(); + private final int id; + private final Map < EnumPacketDirection, BiMap < Integer, Class >> > directionMaps; + + private EnumConnectionState(int protocolId) + { + this.directionMaps = Maps.newEnumMap(EnumPacketDirection.class); + this.id = protocolId; + } + + protected EnumConnectionState registerPacket(EnumPacketDirection direction, Class > packetClass) + { + BiMap < Integer, Class >> bimap = (BiMap)this.directionMaps.get(direction); + + if (bimap == null) + { + bimap = HashBiMap. < Integer, Class >> create(); + this.directionMaps.put(direction, bimap); + } + + if (bimap.containsValue(packetClass)) + { + String s = direction + " packet " + packetClass + " is already known to ID " + bimap.inverse().get(packetClass); + LogManager.getLogger().fatal(s); + throw new IllegalArgumentException(s); + } + else + { + bimap.put(Integer.valueOf(bimap.size()), packetClass); + return this; + } + } + + public Integer getPacketId(EnumPacketDirection direction, Packet packetIn) throws Exception + { + return (Integer)((BiMap)this.directionMaps.get(direction)).inverse().get(packetIn.getClass()); + } + + @Nullable + public Packet getPacket(EnumPacketDirection direction, int packetId) throws InstantiationException, IllegalAccessException + { + Class > oclass = (Class)((BiMap)this.directionMaps.get(direction)).get(Integer.valueOf(packetId)); + return oclass == null ? null : (Packet)oclass.newInstance(); + } + + public int getId() + { + return this.id; + } + + public static EnumConnectionState getById(int stateId) + { + return stateId >= -1 && stateId <= 2 ? STATES_BY_ID[stateId - -1] : null; + } + + public static EnumConnectionState getFromPacket(Packet packetIn) + { + return STATES_BY_CLASS.get(packetIn.getClass()); + } + + static + { + for (EnumConnectionState enumconnectionstate : values()) + { + int i = enumconnectionstate.getId(); + + if (i < -1 || i > 2) + { + throw new Error("Invalid protocol ID " + Integer.toString(i)); + } + + STATES_BY_ID[i - -1] = enumconnectionstate; + + for (EnumPacketDirection enumpacketdirection : enumconnectionstate.directionMaps.keySet()) + { + for (Class > oclass : enumconnectionstate.directionMaps.get(enumpacketdirection).values()) + { + if (STATES_BY_CLASS.containsKey(oclass) && STATES_BY_CLASS.get(oclass) != enumconnectionstate) + { + throw new Error("Packet " + oclass + " is already assigned to protocol " + STATES_BY_CLASS.get(oclass) + " - can't reassign to " + enumconnectionstate); + } + + try + { + oclass.newInstance(); + } + catch (Throwable var10) + { + throw new Error("Packet " + oclass + " fails instantiation checks! " + oclass); + } + + STATES_BY_CLASS.put(oclass, enumconnectionstate); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/EnumPacketDirection.java b/build/tmp/recompileMc/sources/net/minecraft/network/EnumPacketDirection.java new file mode 100644 index 0000000..e7fab76 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/EnumPacketDirection.java @@ -0,0 +1,7 @@ +package net.minecraft.network; + +public enum EnumPacketDirection +{ + SERVERBOUND, + CLIENTBOUND; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/INetHandler.java b/build/tmp/recompileMc/sources/net/minecraft/network/INetHandler.java new file mode 100644 index 0000000..c181099 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/INetHandler.java @@ -0,0 +1,11 @@ +package net.minecraft.network; + +import net.minecraft.util.text.ITextComponent; + +public interface INetHandler +{ + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + void onDisconnect(ITextComponent reason); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/LegacyPingHandler.java b/build/tmp/recompileMc/sources/net/minecraft/network/LegacyPingHandler.java new file mode 100644 index 0000000..5cf8290 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/LegacyPingHandler.java @@ -0,0 +1,124 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import net.minecraft.server.MinecraftServer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class LegacyPingHandler extends ChannelInboundHandlerAdapter +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final NetworkSystem networkSystem; + + public LegacyPingHandler(NetworkSystem networkSystemIn) + { + this.networkSystem = networkSystemIn; + } + + public void channelRead(ChannelHandlerContext p_channelRead_1_, Object p_channelRead_2_) throws Exception + { + ByteBuf bytebuf = (ByteBuf)p_channelRead_2_; + bytebuf.markReaderIndex(); + boolean flag = true; + + try + { + if (bytebuf.readUnsignedByte() == 254) + { + InetSocketAddress inetsocketaddress = (InetSocketAddress)p_channelRead_1_.channel().remoteAddress(); + MinecraftServer minecraftserver = this.networkSystem.getServer(); + int i = bytebuf.readableBytes(); + + switch (i) + { + case 0: + LOGGER.debug("Ping: (<1.3.x) from {}:{}", inetsocketaddress.getAddress(), Integer.valueOf(inetsocketaddress.getPort())); + String s2 = String.format("%s\u00a7%d\u00a7%d", minecraftserver.getMOTD(), minecraftserver.getCurrentPlayerCount(), minecraftserver.getMaxPlayers()); + this.writeAndFlush(p_channelRead_1_, this.getStringBuffer(s2)); + break; + case 1: + + if (bytebuf.readUnsignedByte() != 1) + { + return; + } + + LOGGER.debug("Ping: (1.4-1.5.x) from {}:{}", inetsocketaddress.getAddress(), Integer.valueOf(inetsocketaddress.getPort())); + String s = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", Integer.valueOf(127), minecraftserver.getMinecraftVersion(), minecraftserver.getMOTD(), minecraftserver.getCurrentPlayerCount(), minecraftserver.getMaxPlayers()); + this.writeAndFlush(p_channelRead_1_, this.getStringBuffer(s)); + break; + default: + boolean flag1 = bytebuf.readUnsignedByte() == 1; + flag1 = flag1 & bytebuf.readUnsignedByte() == 250; + flag1 = flag1 & "MC|PingHost".equals(new String(bytebuf.readBytes(bytebuf.readShort() * 2).array(), StandardCharsets.UTF_16BE)); + int j = bytebuf.readUnsignedShort(); + flag1 = flag1 & bytebuf.readUnsignedByte() >= 73; + flag1 = flag1 & 3 + bytebuf.readBytes(bytebuf.readShort() * 2).array().length + 4 == j; + flag1 = flag1 & bytebuf.readInt() <= 65535; + flag1 = flag1 & bytebuf.readableBytes() == 0; + + if (!flag1) + { + return; + } + + LOGGER.debug("Ping: (1.6) from {}:{}", inetsocketaddress.getAddress(), Integer.valueOf(inetsocketaddress.getPort())); + String s1 = String.format("\u00a71\u0000%d\u0000%s\u0000%s\u0000%d\u0000%d", Integer.valueOf(127), minecraftserver.getMinecraftVersion(), minecraftserver.getMOTD(), minecraftserver.getCurrentPlayerCount(), minecraftserver.getMaxPlayers()); + ByteBuf bytebuf1 = this.getStringBuffer(s1); + + try + { + this.writeAndFlush(p_channelRead_1_, bytebuf1); + } + finally + { + bytebuf1.release(); + } + } + + bytebuf.release(); + flag = false; + return; + } + } + catch (RuntimeException var21) + { + return; + } + finally + { + if (flag) + { + bytebuf.resetReaderIndex(); + p_channelRead_1_.channel().pipeline().remove("legacy_query"); + p_channelRead_1_.fireChannelRead(p_channelRead_2_); + } + } + } + + private void writeAndFlush(ChannelHandlerContext ctx, ByteBuf data) + { + ctx.pipeline().firstContext().writeAndFlush(data).addListener(ChannelFutureListener.CLOSE); + } + + private ByteBuf getStringBuffer(String string) + { + ByteBuf bytebuf = Unpooled.buffer(); + bytebuf.writeByte(255); + char[] achar = string.toCharArray(); + bytebuf.writeShort(achar.length); + + for (char c0 : achar) + { + bytebuf.writeChar(c0); + } + + return bytebuf; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NetHandlerPlayServer.java b/build/tmp/recompileMc/sources/net/minecraft/network/NetHandlerPlayServer.java new file mode 100644 index 0000000..029e122 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NetHandlerPlayServer.java @@ -0,0 +1,1852 @@ +package net.minecraft.network; + +import com.google.common.collect.Lists; +import com.google.common.primitives.Doubles; +import com.google.common.primitives.Floats; +import com.google.common.util.concurrent.Futures; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.BlockCommandBlock; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.Entity; +import net.minecraft.entity.IJumpingMount; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecartCommandBlock; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.passive.AbstractHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerBeacon; +import net.minecraft.inventory.ContainerMerchant; +import net.minecraft.inventory.ContainerRepair; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemElytra; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemWritableBook; +import net.minecraft.item.ItemWrittenBook; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.network.play.client.CPacketAnimation; +import net.minecraft.network.play.client.CPacketChatMessage; +import net.minecraft.network.play.client.CPacketClickWindow; +import net.minecraft.network.play.client.CPacketClientSettings; +import net.minecraft.network.play.client.CPacketClientStatus; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.network.play.client.CPacketConfirmTeleport; +import net.minecraft.network.play.client.CPacketConfirmTransaction; +import net.minecraft.network.play.client.CPacketCreativeInventoryAction; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.network.play.client.CPacketEnchantItem; +import net.minecraft.network.play.client.CPacketEntityAction; +import net.minecraft.network.play.client.CPacketHeldItemChange; +import net.minecraft.network.play.client.CPacketInput; +import net.minecraft.network.play.client.CPacketKeepAlive; +import net.minecraft.network.play.client.CPacketPlaceRecipe; +import net.minecraft.network.play.client.CPacketPlayer; +import net.minecraft.network.play.client.CPacketPlayerAbilities; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.network.play.client.CPacketPlayerTryUseItem; +import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; +import net.minecraft.network.play.client.CPacketRecipeInfo; +import net.minecraft.network.play.client.CPacketResourcePackStatus; +import net.minecraft.network.play.client.CPacketSeenAdvancements; +import net.minecraft.network.play.client.CPacketSpectate; +import net.minecraft.network.play.client.CPacketSteerBoat; +import net.minecraft.network.play.client.CPacketTabComplete; +import net.minecraft.network.play.client.CPacketUpdateSign; +import net.minecraft.network.play.client.CPacketUseEntity; +import net.minecraft.network.play.client.CPacketVehicleMove; +import net.minecraft.network.play.server.SPacketBlockChange; +import net.minecraft.network.play.server.SPacketChat; +import net.minecraft.network.play.server.SPacketConfirmTransaction; +import net.minecraft.network.play.server.SPacketDisconnect; +import net.minecraft.network.play.server.SPacketHeldItemChange; +import net.minecraft.network.play.server.SPacketKeepAlive; +import net.minecraft.network.play.server.SPacketMoveVehicle; +import net.minecraft.network.play.server.SPacketPlayerPosLook; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.network.play.server.SPacketTabComplete; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.CommandBlockBaseLogic; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityCommandBlock; +import net.minecraft.tileentity.TileEntitySign; +import net.minecraft.tileentity.TileEntityStructure; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.ITickable; +import net.minecraft.util.IntHashMap; +import net.minecraft.util.Mirror; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ReportedException; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.ServerRecipeBookHelper; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.DimensionType; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldServer; +import org.apache.commons.lang3.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class NetHandlerPlayServer implements INetHandlerPlayServer, ITickable +{ + private static final Logger LOGGER = LogManager.getLogger(); + public final NetworkManager netManager; + private final MinecraftServer serverController; + public EntityPlayerMP player; + private int networkTickCount; + private long field_194402_f; + private boolean field_194403_g; + private long field_194404_h; + /** + * Incremented by 20 each time a user sends a chat message, decreased by one every tick. Non-ops kicked when over + * 200 + */ + private int chatSpamThresholdCount; + private int itemDropThreshold; + private final IntHashMap pendingTransactions = new IntHashMap(); + private double firstGoodX; + private double firstGoodY; + private double firstGoodZ; + private double lastGoodX; + private double lastGoodY; + private double lastGoodZ; + private Entity lowestRiddenEnt; + private double lowestRiddenX; + private double lowestRiddenY; + private double lowestRiddenZ; + private double lowestRiddenX1; + private double lowestRiddenY1; + private double lowestRiddenZ1; + private Vec3d targetPos; + private int teleportId; + private int lastPositionUpdate; + private boolean floating; + /** + * Used to keep track of how the player is floating while gamerules should prevent that. Surpassing 80 ticks means + * kick + */ + private int floatingTickCount; + private boolean vehicleFloating; + /** Used to keep track of how long the player is floating in a vehicle. Surpassing 80 means a kick */ + private int vehicleFloatingTickCount; + private int movePacketCounter; + private int lastMovePacketCounter; + private ServerRecipeBookHelper field_194309_H = new ServerRecipeBookHelper(); + + public NetHandlerPlayServer(MinecraftServer server, NetworkManager networkManagerIn, EntityPlayerMP playerIn) + { + this.serverController = server; + this.netManager = networkManagerIn; + networkManagerIn.setNetHandler(this); + this.player = playerIn; + playerIn.connection = this; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.captureCurrentPosition(); + this.player.onUpdateEntity(); + this.player.setPositionAndRotation(this.firstGoodX, this.firstGoodY, this.firstGoodZ, this.player.rotationYaw, this.player.rotationPitch); + ++this.networkTickCount; + this.lastMovePacketCounter = this.movePacketCounter; + + if (this.floating) + { + if (++this.floatingTickCount > 80) + { + LOGGER.warn("{} was kicked for floating too long!", (Object)this.player.getName()); + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.flying", new Object[0])); + return; + } + } + else + { + this.floating = false; + this.floatingTickCount = 0; + } + + this.lowestRiddenEnt = this.player.getLowestRidingEntity(); + + if (this.lowestRiddenEnt != this.player && this.lowestRiddenEnt.getControllingPassenger() == this.player) + { + this.lowestRiddenX = this.lowestRiddenEnt.posX; + this.lowestRiddenY = this.lowestRiddenEnt.posY; + this.lowestRiddenZ = this.lowestRiddenEnt.posZ; + this.lowestRiddenX1 = this.lowestRiddenEnt.posX; + this.lowestRiddenY1 = this.lowestRiddenEnt.posY; + this.lowestRiddenZ1 = this.lowestRiddenEnt.posZ; + + if (this.vehicleFloating && this.player.getLowestRidingEntity().getControllingPassenger() == this.player) + { + if (++this.vehicleFloatingTickCount > 80) + { + LOGGER.warn("{} was kicked for floating a vehicle too long!", (Object)this.player.getName()); + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.flying", new Object[0])); + return; + } + } + else + { + this.vehicleFloating = false; + this.vehicleFloatingTickCount = 0; + } + } + else + { + this.lowestRiddenEnt = null; + this.vehicleFloating = false; + this.vehicleFloatingTickCount = 0; + } + + this.serverController.profiler.startSection("keepAlive"); + long i = this.currentTimeMillis(); + + if (i - this.field_194402_f >= 15000L) + { + if (this.field_194403_g) + { + this.disconnect(new TextComponentTranslation("disconnect.timeout", new Object[0])); + } + else + { + this.field_194403_g = true; + this.field_194402_f = i; + this.field_194404_h = i; + this.sendPacket(new SPacketKeepAlive(this.field_194404_h)); + } + } + + this.serverController.profiler.endSection(); + + if (this.chatSpamThresholdCount > 0) + { + --this.chatSpamThresholdCount; + } + + if (this.itemDropThreshold > 0) + { + --this.itemDropThreshold; + } + + if (this.player.getLastActiveTime() > 0L && this.serverController.getMaxPlayerIdleMinutes() > 0 && MinecraftServer.getCurrentTimeMillis() - this.player.getLastActiveTime() > (long)(this.serverController.getMaxPlayerIdleMinutes() * 1000 * 60)) + { + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.idling", new Object[0])); + } + } + + private void captureCurrentPosition() + { + this.firstGoodX = this.player.posX; + this.firstGoodY = this.player.posY; + this.firstGoodZ = this.player.posZ; + this.lastGoodX = this.player.posX; + this.lastGoodY = this.player.posY; + this.lastGoodZ = this.player.posZ; + } + + public NetworkManager getNetworkManager() + { + return this.netManager; + } + + /** + * Disconnect the player with a specified reason + */ + public void disconnect(final ITextComponent textComponent) + { + this.netManager.sendPacket(new SPacketDisconnect(textComponent), new GenericFutureListener < Future > () + { + public void operationComplete(Future p_operationComplete_1_) throws Exception + { + NetHandlerPlayServer.this.netManager.closeChannel(textComponent); + } + }); + this.netManager.disableAutoRead(); + Futures.getUnchecked(this.serverController.addScheduledTask(new Runnable() + { + public void run() + { + NetHandlerPlayServer.this.netManager.checkDisconnected(); + } + })); + } + + /** + * Processes player movement input. Includes walking, strafing, jumping, sneaking; excludes riding and toggling + * flying/sprinting + */ + public void processInput(CPacketInput packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.setEntityActionState(packetIn.getStrafeSpeed(), packetIn.getForwardSpeed(), packetIn.isJumping(), packetIn.isSneaking()); + } + + private static boolean isMovePlayerPacketInvalid(CPacketPlayer packetIn) + { + if (Doubles.isFinite(packetIn.getX(0.0D)) && Doubles.isFinite(packetIn.getY(0.0D)) && Doubles.isFinite(packetIn.getZ(0.0D)) && Floats.isFinite(packetIn.getPitch(0.0F)) && Floats.isFinite(packetIn.getYaw(0.0F))) + { + return Math.abs(packetIn.getX(0.0D)) > 3.0E7D || Math.abs(packetIn.getY(0.0D)) > 3.0E7D || Math.abs(packetIn.getZ(0.0D)) > 3.0E7D; + } + else + { + return true; + } + } + + private static boolean isMoveVehiclePacketInvalid(CPacketVehicleMove packetIn) + { + return !Doubles.isFinite(packetIn.getX()) || !Doubles.isFinite(packetIn.getY()) || !Doubles.isFinite(packetIn.getZ()) || !Floats.isFinite(packetIn.getPitch()) || !Floats.isFinite(packetIn.getYaw()); + } + + public void processVehicleMove(CPacketVehicleMove packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (isMoveVehiclePacketInvalid(packetIn)) + { + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.invalid_vehicle_movement", new Object[0])); + } + else + { + Entity entity = this.player.getLowestRidingEntity(); + + if (entity != this.player && entity.getControllingPassenger() == this.player && entity == this.lowestRiddenEnt) + { + WorldServer worldserver = this.player.getServerWorld(); + double d0 = entity.posX; + double d1 = entity.posY; + double d2 = entity.posZ; + double d3 = packetIn.getX(); + double d4 = packetIn.getY(); + double d5 = packetIn.getZ(); + float f = packetIn.getYaw(); + float f1 = packetIn.getPitch(); + double d6 = d3 - this.lowestRiddenX; + double d7 = d4 - this.lowestRiddenY; + double d8 = d5 - this.lowestRiddenZ; + double d9 = entity.motionX * entity.motionX + entity.motionY * entity.motionY + entity.motionZ * entity.motionZ; + double d10 = d6 * d6 + d7 * d7 + d8 * d8; + + if (d10 - d9 > 100.0D && (!this.serverController.isSinglePlayer() || !this.serverController.getServerOwner().equals(entity.getName()))) + { + LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", entity.getName(), this.player.getName(), Double.valueOf(d6), Double.valueOf(d7), Double.valueOf(d8)); + this.netManager.sendPacket(new SPacketMoveVehicle(entity)); + return; + } + + boolean flag = worldserver.getCollisionBoxes(entity, entity.getEntityBoundingBox().shrink(0.0625D)).isEmpty(); + d6 = d3 - this.lowestRiddenX1; + d7 = d4 - this.lowestRiddenY1 - 1.0E-6D; + d8 = d5 - this.lowestRiddenZ1; + entity.move(MoverType.PLAYER, d6, d7, d8); + double d11 = d7; + d6 = d3 - entity.posX; + d7 = d4 - entity.posY; + + if (d7 > -0.5D || d7 < 0.5D) + { + d7 = 0.0D; + } + + d8 = d5 - entity.posZ; + d10 = d6 * d6 + d7 * d7 + d8 * d8; + boolean flag1 = false; + + if (d10 > 0.0625D) + { + flag1 = true; + LOGGER.warn("{} moved wrongly!", (Object)entity.getName()); + } + + entity.setPositionAndRotation(d3, d4, d5, f, f1); + boolean flag2 = worldserver.getCollisionBoxes(entity, entity.getEntityBoundingBox().shrink(0.0625D)).isEmpty(); + + if (flag && (flag1 || !flag2)) + { + entity.setPositionAndRotation(d0, d1, d2, f, f1); + this.netManager.sendPacket(new SPacketMoveVehicle(entity)); + return; + } + + this.serverController.getPlayerList().serverUpdateMovingPlayer(this.player); + this.player.addMovementStat(this.player.posX - d0, this.player.posY - d1, this.player.posZ - d2); + this.vehicleFloating = d11 >= -0.03125D && !this.serverController.isFlightAllowed() && !worldserver.checkBlockCollision(entity.getEntityBoundingBox().grow(0.0625D).expand(0.0D, -0.55D, 0.0D)); + this.lowestRiddenX1 = entity.posX; + this.lowestRiddenY1 = entity.posY; + this.lowestRiddenZ1 = entity.posZ; + } + } + } + + public void processConfirmTeleport(CPacketConfirmTeleport packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (packetIn.getTeleportId() == this.teleportId) + { + this.player.setPositionAndRotation(this.targetPos.x, this.targetPos.y, this.targetPos.z, this.player.rotationYaw, this.player.rotationPitch); + + if (this.player.isInvulnerableDimensionChange()) + { + this.lastGoodX = this.targetPos.x; + this.lastGoodY = this.targetPos.y; + this.lastGoodZ = this.targetPos.z; + this.player.clearInvulnerableDimensionChange(); + } + + this.targetPos = null; + } + } + + public void handleRecipeBookUpdate(CPacketRecipeInfo p_191984_1_) + { + PacketThreadUtil.checkThreadAndEnqueue(p_191984_1_, this, this.player.getServerWorld()); + + if (p_191984_1_.getPurpose() == CPacketRecipeInfo.Purpose.SHOWN) + { + this.player.getRecipeBook().markSeen(p_191984_1_.getRecipe()); + } + else if (p_191984_1_.getPurpose() == CPacketRecipeInfo.Purpose.SETTINGS) + { + this.player.getRecipeBook().setGuiOpen(p_191984_1_.isGuiOpen()); + this.player.getRecipeBook().setFilteringCraftable(p_191984_1_.isFilteringCraftable()); + } + } + + public void handleSeenAdvancements(CPacketSeenAdvancements p_194027_1_) + { + PacketThreadUtil.checkThreadAndEnqueue(p_194027_1_, this, this.player.getServerWorld()); + + if (p_194027_1_.getAction() == CPacketSeenAdvancements.Action.OPENED_TAB) + { + ResourceLocation resourcelocation = p_194027_1_.getTab(); + Advancement advancement = this.serverController.getAdvancementManager().getAdvancement(resourcelocation); + + if (advancement != null) + { + this.player.getAdvancements().setSelectedTab(advancement); + } + } + } + + /** + * Processes clients perspective on player positioning and/or orientation + */ + public void processPlayer(CPacketPlayer packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (isMovePlayerPacketInvalid(packetIn)) + { + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.invalid_player_movement", new Object[0])); + } + else + { + WorldServer worldserver = this.serverController.getWorld(this.player.dimension); + + if (!this.player.queuedEndExit) + { + if (this.networkTickCount == 0) + { + this.captureCurrentPosition(); + } + + if (this.targetPos != null) + { + if (this.networkTickCount - this.lastPositionUpdate > 20) + { + this.lastPositionUpdate = this.networkTickCount; + this.setPlayerLocation(this.targetPos.x, this.targetPos.y, this.targetPos.z, this.player.rotationYaw, this.player.rotationPitch); + } + } + else + { + this.lastPositionUpdate = this.networkTickCount; + + if (this.player.isRiding()) + { + this.player.setPositionAndRotation(this.player.posX, this.player.posY, this.player.posZ, packetIn.getYaw(this.player.rotationYaw), packetIn.getPitch(this.player.rotationPitch)); + this.serverController.getPlayerList().serverUpdateMovingPlayer(this.player); + } + else + { + double d0 = this.player.posX; + double d1 = this.player.posY; + double d2 = this.player.posZ; + double d3 = this.player.posY; + double d4 = packetIn.getX(this.player.posX); + double d5 = packetIn.getY(this.player.posY); + double d6 = packetIn.getZ(this.player.posZ); + float f = packetIn.getYaw(this.player.rotationYaw); + float f1 = packetIn.getPitch(this.player.rotationPitch); + double d7 = d4 - this.firstGoodX; + double d8 = d5 - this.firstGoodY; + double d9 = d6 - this.firstGoodZ; + double d10 = this.player.motionX * this.player.motionX + this.player.motionY * this.player.motionY + this.player.motionZ * this.player.motionZ; + double d11 = d7 * d7 + d8 * d8 + d9 * d9; + + if (this.player.isPlayerSleeping()) + { + if (d11 > 1.0D) + { + this.setPlayerLocation(this.player.posX, this.player.posY, this.player.posZ, packetIn.getYaw(this.player.rotationYaw), packetIn.getPitch(this.player.rotationPitch)); + } + } + else + { + ++this.movePacketCounter; + int i = this.movePacketCounter - this.lastMovePacketCounter; + + if (i > 5) + { + LOGGER.debug("{} is sending move packets too frequently ({} packets since last tick)", this.player.getName(), Integer.valueOf(i)); + i = 1; + } + + if (!this.player.isInvulnerableDimensionChange() && (!this.player.getServerWorld().getGameRules().getBoolean("disableElytraMovementCheck") || !this.player.isElytraFlying())) + { + float f2 = this.player.isElytraFlying() ? 300.0F : 100.0F; + + if (d11 - d10 > (double)(f2 * (float)i) && (!this.serverController.isSinglePlayer() || !this.serverController.getServerOwner().equals(this.player.getName()))) + { + LOGGER.warn("{} moved too quickly! {},{},{}", this.player.getName(), Double.valueOf(d7), Double.valueOf(d8), Double.valueOf(d9)); + this.setPlayerLocation(this.player.posX, this.player.posY, this.player.posZ, this.player.rotationYaw, this.player.rotationPitch); + return; + } + } + + boolean flag2 = worldserver.getCollisionBoxes(this.player, this.player.getEntityBoundingBox().shrink(0.0625D)).isEmpty(); + d7 = d4 - this.lastGoodX; + d8 = d5 - this.lastGoodY; + d9 = d6 - this.lastGoodZ; + + if (this.player.onGround && !packetIn.isOnGround() && d8 > 0.0D) + { + this.player.jump(); + } + + this.player.move(MoverType.PLAYER, d7, d8, d9); + this.player.onGround = packetIn.isOnGround(); + double d12 = d8; + d7 = d4 - this.player.posX; + d8 = d5 - this.player.posY; + + if (d8 > -0.5D || d8 < 0.5D) + { + d8 = 0.0D; + } + + d9 = d6 - this.player.posZ; + d11 = d7 * d7 + d8 * d8 + d9 * d9; + boolean flag = false; + + if (!this.player.isInvulnerableDimensionChange() && d11 > 0.0625D && !this.player.isPlayerSleeping() && !this.player.interactionManager.isCreative() && this.player.interactionManager.getGameType() != GameType.SPECTATOR) + { + flag = true; + LOGGER.warn("{} moved wrongly!", (Object)this.player.getName()); + } + + this.player.setPositionAndRotation(d4, d5, d6, f, f1); + this.player.addMovementStat(this.player.posX - d0, this.player.posY - d1, this.player.posZ - d2); + + if (!this.player.noClip && !this.player.isPlayerSleeping()) + { + boolean flag1 = worldserver.getCollisionBoxes(this.player, this.player.getEntityBoundingBox().shrink(0.0625D)).isEmpty(); + + if (flag2 && (flag || !flag1)) + { + this.setPlayerLocation(d0, d1, d2, f, f1); + return; + } + } + + this.floating = d12 >= -0.03125D; + this.floating &= !this.serverController.isFlightAllowed() && !this.player.capabilities.allowFlying; + this.floating &= !this.player.isPotionActive(MobEffects.LEVITATION) && !this.player.isElytraFlying() && !worldserver.checkBlockCollision(this.player.getEntityBoundingBox().grow(0.0625D).expand(0.0D, -0.55D, 0.0D)); + this.player.onGround = packetIn.isOnGround(); + this.serverController.getPlayerList().serverUpdateMovingPlayer(this.player); + this.player.handleFalling(this.player.posY - d3, packetIn.isOnGround()); + this.lastGoodX = this.player.posX; + this.lastGoodY = this.player.posY; + this.lastGoodZ = this.player.posZ; + } + } + } + } + } + } + + public void setPlayerLocation(double x, double y, double z, float yaw, float pitch) + { + this.setPlayerLocation(x, y, z, yaw, pitch, Collections.emptySet()); + } + + /** + * Teleports the player position to the (relative) values specified, and syncs to the client + */ + public void setPlayerLocation(double x, double y, double z, float yaw, float pitch, Set relativeSet) + { + double d0 = relativeSet.contains(SPacketPlayerPosLook.EnumFlags.X) ? this.player.posX : 0.0D; + double d1 = relativeSet.contains(SPacketPlayerPosLook.EnumFlags.Y) ? this.player.posY : 0.0D; + double d2 = relativeSet.contains(SPacketPlayerPosLook.EnumFlags.Z) ? this.player.posZ : 0.0D; + this.targetPos = new Vec3d(x + d0, y + d1, z + d2); + float f = yaw; + float f1 = pitch; + + if (relativeSet.contains(SPacketPlayerPosLook.EnumFlags.Y_ROT)) + { + f = yaw + this.player.rotationYaw; + } + + if (relativeSet.contains(SPacketPlayerPosLook.EnumFlags.X_ROT)) + { + f1 = pitch + this.player.rotationPitch; + } + + if (++this.teleportId == Integer.MAX_VALUE) + { + this.teleportId = 0; + } + + this.lastPositionUpdate = this.networkTickCount; + this.player.setPositionAndRotation(this.targetPos.x, this.targetPos.y, this.targetPos.z, f, f1); + this.player.connection.sendPacket(new SPacketPlayerPosLook(x, y, z, yaw, pitch, relativeSet, this.teleportId)); + } + + /** + * Processes the player initiating/stopping digging on a particular spot, as well as a player dropping items + */ + public void processPlayerDigging(CPacketPlayerDigging packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + WorldServer worldserver = this.serverController.getWorld(this.player.dimension); + BlockPos blockpos = packetIn.getPosition(); + this.player.markPlayerActive(); + + switch (packetIn.getAction()) + { + case SWAP_HELD_ITEMS: + + if (!this.player.isSpectator()) + { + ItemStack itemstack = this.player.getHeldItem(EnumHand.OFF_HAND); + this.player.setHeldItem(EnumHand.OFF_HAND, this.player.getHeldItem(EnumHand.MAIN_HAND)); + this.player.setHeldItem(EnumHand.MAIN_HAND, itemstack); + } + + return; + case DROP_ITEM: + + if (!this.player.isSpectator()) + { + this.player.dropItem(false); + } + + return; + case DROP_ALL_ITEMS: + + if (!this.player.isSpectator()) + { + this.player.dropItem(true); + } + + return; + case RELEASE_USE_ITEM: + this.player.stopActiveHand(); + return; + case START_DESTROY_BLOCK: + case ABORT_DESTROY_BLOCK: + case STOP_DESTROY_BLOCK: + double d0 = this.player.posX - ((double)blockpos.getX() + 0.5D); + double d1 = this.player.posY - ((double)blockpos.getY() + 0.5D) + 1.5D; + double d2 = this.player.posZ - ((double)blockpos.getZ() + 0.5D); + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + double dist = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue() + 1; + dist *= dist; + + if (d3 > dist) + { + return; + } + else if (blockpos.getY() >= this.serverController.getBuildLimit()) + { + return; + } + else + { + if (packetIn.getAction() == CPacketPlayerDigging.Action.START_DESTROY_BLOCK) + { + if (!this.serverController.isBlockProtected(worldserver, blockpos, this.player) && worldserver.getWorldBorder().contains(blockpos)) + { + this.player.interactionManager.onBlockClicked(blockpos, packetIn.getFacing()); + } + else + { + this.player.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos)); + } + } + else + { + if (packetIn.getAction() == CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK) + { + this.player.interactionManager.blockRemoving(blockpos); + } + else if (packetIn.getAction() == CPacketPlayerDigging.Action.ABORT_DESTROY_BLOCK) + { + this.player.interactionManager.cancelDestroyingBlock(); + } + + if (worldserver.getBlockState(blockpos).getMaterial() != Material.AIR) + { + this.player.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos)); + } + } + + return; + } + + default: + throw new IllegalArgumentException("Invalid player action"); + } + } + + public void processTryUseItemOnBlock(CPacketPlayerTryUseItemOnBlock packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + WorldServer worldserver = this.serverController.getWorld(this.player.dimension); + EnumHand enumhand = packetIn.getHand(); + ItemStack itemstack = this.player.getHeldItem(enumhand); + BlockPos blockpos = packetIn.getPos(); + EnumFacing enumfacing = packetIn.getDirection(); + this.player.markPlayerActive(); + + if (blockpos.getY() < this.serverController.getBuildLimit() - 1 || enumfacing != EnumFacing.UP && blockpos.getY() < this.serverController.getBuildLimit()) + { + double dist = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue() + 3; + dist *= dist; + if (this.targetPos == null && this.player.getDistanceSq((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D) < dist && !this.serverController.isBlockProtected(worldserver, blockpos, this.player) && worldserver.getWorldBorder().contains(blockpos)) + { + this.player.interactionManager.processRightClickBlock(this.player, worldserver, itemstack, enumhand, blockpos, enumfacing, packetIn.getFacingX(), packetIn.getFacingY(), packetIn.getFacingZ()); + } + } + else + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("build.tooHigh", new Object[] {this.serverController.getBuildLimit()}); + textcomponenttranslation.getStyle().setColor(TextFormatting.RED); + this.player.connection.sendPacket(new SPacketChat(textcomponenttranslation, ChatType.GAME_INFO)); + } + + this.player.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos)); + this.player.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos.offset(enumfacing))); + } + + /** + * Called when a client is using an item while not pointing at a block, but simply using an item + */ + public void processTryUseItem(CPacketPlayerTryUseItem packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + WorldServer worldserver = this.serverController.getWorld(this.player.dimension); + EnumHand enumhand = packetIn.getHand(); + ItemStack itemstack = this.player.getHeldItem(enumhand); + this.player.markPlayerActive(); + + if (!itemstack.isEmpty()) + { + this.player.interactionManager.processRightClick(this.player, worldserver, itemstack, enumhand); + } + } + + public void handleSpectate(CPacketSpectate packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (this.player.isSpectator()) + { + Entity entity = null; + + for (WorldServer worldserver : this.serverController.worlds) + { + if (worldserver != null) + { + entity = packetIn.getEntity(worldserver); + + if (entity != null) + { + break; + } + } + } + + if (entity != null) + { + this.player.setSpectatingEntity(this.player); + this.player.dismountRidingEntity(); + + if (entity.world == this.player.world) + { + this.player.setPositionAndUpdate(entity.posX, entity.posY, entity.posZ); + } + else + { + WorldServer worldserver1 = this.player.getServerWorld(); + WorldServer worldserver2 = (WorldServer)entity.world; + this.player.dimension = entity.dimension; + this.sendPacket(new SPacketRespawn(this.player.dimension, worldserver1.getDifficulty(), worldserver1.getWorldInfo().getTerrainType(), this.player.interactionManager.getGameType())); + this.serverController.getPlayerList().updatePermissionLevel(this.player); + worldserver1.removeEntityDangerously(this.player); + this.player.isDead = false; + this.player.setLocationAndAngles(entity.posX, entity.posY, entity.posZ, entity.rotationYaw, entity.rotationPitch); + + if (this.player.isEntityAlive()) + { + worldserver1.updateEntityWithOptionalForce(this.player, false); + worldserver2.spawnEntity(this.player); + worldserver2.updateEntityWithOptionalForce(this.player, false); + } + + this.player.setWorld(worldserver2); + this.serverController.getPlayerList().preparePlayer(this.player, worldserver1); + this.player.setPositionAndUpdate(entity.posX, entity.posY, entity.posZ); + this.player.interactionManager.setWorld(worldserver2); + this.serverController.getPlayerList().updateTimeAndWeatherForPlayer(this.player, worldserver2); + this.serverController.getPlayerList().syncPlayerInventory(this.player); + } + } + } + } + + public void handleResourcePackStatus(CPacketResourcePackStatus packetIn) + { + } + + public void processSteerBoat(CPacketSteerBoat packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + Entity entity = this.player.getRidingEntity(); + + if (entity instanceof EntityBoat) + { + ((EntityBoat)entity).setPaddleState(packetIn.getLeft(), packetIn.getRight()); + } + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + LOGGER.info("{} lost connection: {}", this.player.getName(), reason.getUnformattedText()); + this.serverController.refreshStatusNextTick(); + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("multiplayer.player.left", new Object[] {this.player.getDisplayName()}); + textcomponenttranslation.getStyle().setColor(TextFormatting.YELLOW); + this.serverController.getPlayerList().sendMessage(textcomponenttranslation); + this.player.mountEntityAndWakeUp(); + this.serverController.getPlayerList().playerLoggedOut(this.player); + + if (this.serverController.isSinglePlayer() && this.player.getName().equals(this.serverController.getServerOwner())) + { + LOGGER.info("Stopping singleplayer server as player logged out"); + this.serverController.initiateShutdown(); + } + } + + public void sendPacket(final Packet packetIn) + { + if (packetIn instanceof SPacketChat) + { + SPacketChat spacketchat = (SPacketChat)packetIn; + EntityPlayer.EnumChatVisibility entityplayer$enumchatvisibility = this.player.getChatVisibility(); + + if (entityplayer$enumchatvisibility == EntityPlayer.EnumChatVisibility.HIDDEN && spacketchat.getType() != ChatType.GAME_INFO) + { + return; + } + + if (entityplayer$enumchatvisibility == EntityPlayer.EnumChatVisibility.SYSTEM && !spacketchat.isSystem()) + { + return; + } + } + + try + { + this.netManager.sendPacket(packetIn); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Sending packet"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Packet being sent"); + crashreportcategory.addDetail("Packet class", new ICrashReportDetail() + { + public String call() throws Exception + { + return packetIn.getClass().getCanonicalName(); + } + }); + throw new ReportedException(crashreport); + } + } + + /** + * Updates which quickbar slot is selected + */ + public void processHeldItemChange(CPacketHeldItemChange packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (packetIn.getSlotId() >= 0 && packetIn.getSlotId() < InventoryPlayer.getHotbarSize()) + { + this.player.inventory.currentItem = packetIn.getSlotId(); + this.player.markPlayerActive(); + } + else + { + LOGGER.warn("{} tried to set an invalid carried item", (Object)this.player.getName()); + } + } + + /** + * Process chat messages (broadcast back to clients) and commands (executes) + */ + public void processChatMessage(CPacketChatMessage packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (this.player.getChatVisibility() == EntityPlayer.EnumChatVisibility.HIDDEN) + { + TextComponentTranslation textcomponenttranslation = new TextComponentTranslation("chat.cannotSend", new Object[0]); + textcomponenttranslation.getStyle().setColor(TextFormatting.RED); + this.sendPacket(new SPacketChat(textcomponenttranslation)); + } + else + { + this.player.markPlayerActive(); + String s = packetIn.getMessage(); + s = StringUtils.normalizeSpace(s); + + for (int i = 0; i < s.length(); ++i) + { + if (!ChatAllowedCharacters.isAllowedCharacter(s.charAt(i))) + { + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.illegal_characters", new Object[0])); + return; + } + } + + if (s.startsWith("/")) + { + this.handleSlashCommand(s); + } + else + { + ITextComponent itextcomponent = new TextComponentTranslation("chat.type.text", this.player.getDisplayName(), net.minecraftforge.common.ForgeHooks.newChatWithLinks(s)); + itextcomponent = net.minecraftforge.common.ForgeHooks.onServerChatEvent(this, s, itextcomponent); + if (itextcomponent == null) return; + this.serverController.getPlayerList().sendMessage(itextcomponent, false); + } + + this.chatSpamThresholdCount += 20; + + if (this.chatSpamThresholdCount > 200 && !this.serverController.getPlayerList().canSendCommands(this.player.getGameProfile())) + { + this.disconnect(new TextComponentTranslation("disconnect.spam", new Object[0])); + } + } + } + + /** + * Handle commands that start with a / + */ + private void handleSlashCommand(String command) + { + this.serverController.getCommandManager().executeCommand(this.player, command); + } + + public void handleAnimation(CPacketAnimation packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + this.player.swingArm(packetIn.getHand()); + } + + /** + * Processes a range of action-types: sneaking, sprinting, waking from sleep, opening the inventory or setting jump + * height of the horse the player is riding + */ + public void processEntityAction(CPacketEntityAction packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + + switch (packetIn.getAction()) + { + case START_SNEAKING: + this.player.setSneaking(true); + break; + case STOP_SNEAKING: + this.player.setSneaking(false); + break; + case START_SPRINTING: + this.player.setSprinting(true); + break; + case STOP_SPRINTING: + this.player.setSprinting(false); + break; + case STOP_SLEEPING: + + if (this.player.isPlayerSleeping()) + { + this.player.wakeUpPlayer(false, true, true); + this.targetPos = new Vec3d(this.player.posX, this.player.posY, this.player.posZ); + } + + break; + case START_RIDING_JUMP: + + if (this.player.getRidingEntity() instanceof IJumpingMount) + { + IJumpingMount ijumpingmount1 = (IJumpingMount)this.player.getRidingEntity(); + int i = packetIn.getAuxData(); + + if (ijumpingmount1.canJump() && i > 0) + { + ijumpingmount1.handleStartJump(i); + } + } + + break; + case STOP_RIDING_JUMP: + + if (this.player.getRidingEntity() instanceof IJumpingMount) + { + IJumpingMount ijumpingmount = (IJumpingMount)this.player.getRidingEntity(); + ijumpingmount.handleStopJump(); + } + + break; + case OPEN_INVENTORY: + + if (this.player.getRidingEntity() instanceof AbstractHorse) + { + ((AbstractHorse)this.player.getRidingEntity()).openGUI(this.player); + } + + break; + case START_FALL_FLYING: + + if (!this.player.onGround && this.player.motionY < 0.0D && !this.player.isElytraFlying() && !this.player.isInWater()) + { + ItemStack itemstack = this.player.getItemStackFromSlot(EntityEquipmentSlot.CHEST); + + if (itemstack.getItem() == Items.ELYTRA && ItemElytra.isUsable(itemstack)) + { + this.player.setElytraFlying(); + } + } + else + { + this.player.clearElytraFlying(); + } + + break; + default: + throw new IllegalArgumentException("Invalid client command!"); + } + } + + /** + * Processes left and right clicks on entities + */ + public void processUseEntity(CPacketUseEntity packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + WorldServer worldserver = this.serverController.getWorld(this.player.dimension); + Entity entity = packetIn.getEntityFromWorld(worldserver); + this.player.markPlayerActive(); + + if (entity != null) + { + boolean flag = this.player.canEntityBeSeen(entity); + double d0 = 36.0D; + + if (!flag) + { + d0 = 9.0D; + } + + if (this.player.getDistanceSq(entity) < d0) + { + if (packetIn.getAction() == CPacketUseEntity.Action.INTERACT) + { + EnumHand enumhand = packetIn.getHand(); + this.player.interactOn(entity, enumhand); + } + else if (packetIn.getAction() == CPacketUseEntity.Action.INTERACT_AT) + { + EnumHand enumhand1 = packetIn.getHand(); + if(net.minecraftforge.common.ForgeHooks.onInteractEntityAt(player, entity, packetIn.getHitVec(), enumhand1) != null) return; + entity.applyPlayerInteraction(this.player, packetIn.getHitVec(), enumhand1); + } + else if (packetIn.getAction() == CPacketUseEntity.Action.ATTACK) + { + if (entity instanceof EntityItem || entity instanceof EntityXPOrb || entity instanceof EntityArrow || entity == this.player) + { + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.invalid_entity_attacked", new Object[0])); + this.serverController.logWarning("Player " + this.player.getName() + " tried to attack an invalid entity"); + return; + } + + this.player.attackTargetEntityWithCurrentItem(entity); + } + } + } + } + + /** + * Processes the client status updates: respawn attempt from player, opening statistics or achievements, or + * acquiring 'open inventory' achievement + */ + public void processClientStatus(CPacketClientStatus packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + CPacketClientStatus.State cpacketclientstatus$state = packetIn.getStatus(); + + switch (cpacketclientstatus$state) + { + case PERFORM_RESPAWN: + + if (this.player.queuedEndExit) + { + this.player.queuedEndExit = false; + this.player = this.serverController.getPlayerList().recreatePlayerEntity(this.player, 0, true); + CriteriaTriggers.CHANGED_DIMENSION.trigger(this.player, DimensionType.THE_END, DimensionType.OVERWORLD); + } + else + { + if (this.player.getHealth() > 0.0F) + { + return; + } + + this.player = this.serverController.getPlayerList().recreatePlayerEntity(this.player, player.dimension, false); + + if (this.serverController.isHardcore()) + { + this.player.setGameType(GameType.SPECTATOR); + this.player.getServerWorld().getGameRules().setOrCreateGameRule("spectatorsGenerateChunks", "false"); + } + } + + break; + case REQUEST_STATS: + this.player.getStatFile().sendStats(this.player); + } + } + + /** + * Processes the client closing windows (container) + */ + public void processCloseWindow(CPacketCloseWindow packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.closeContainer(); + } + + /** + * Executes a container/inventory slot manipulation as indicated by the packet. Sends the serverside result if they + * didn't match the indicated result and prevents further manipulation by the player until he confirms that it has + * the same open container/inventory + */ + public void processClickWindow(CPacketClickWindow packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + + if (this.player.openContainer.windowId == packetIn.getWindowId() && this.player.openContainer.getCanCraft(this.player)) + { + if (this.player.isSpectator()) + { + NonNullList nonnulllist = NonNullList.create(); + + for (int i = 0; i < this.player.openContainer.inventorySlots.size(); ++i) + { + nonnulllist.add(((Slot)this.player.openContainer.inventorySlots.get(i)).getStack()); + } + + this.player.sendAllContents(this.player.openContainer, nonnulllist); + } + else + { + ItemStack itemstack2 = this.player.openContainer.slotClick(packetIn.getSlotId(), packetIn.getUsedButton(), packetIn.getClickType(), this.player); + + if (ItemStack.areItemStacksEqualUsingNBTShareTag(packetIn.getClickedItem(), itemstack2)) + { + this.player.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true)); + this.player.isChangingQuantityOnly = true; + this.player.openContainer.detectAndSendChanges(); + this.player.updateHeldItem(); + this.player.isChangingQuantityOnly = false; + } + else + { + this.pendingTransactions.addKey(this.player.openContainer.windowId, Short.valueOf(packetIn.getActionNumber())); + this.player.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), false)); + this.player.openContainer.setCanCraft(this.player, false); + NonNullList nonnulllist1 = NonNullList.create(); + + for (int j = 0; j < this.player.openContainer.inventorySlots.size(); ++j) + { + ItemStack itemstack = ((Slot)this.player.openContainer.inventorySlots.get(j)).getStack(); + ItemStack itemstack1 = itemstack.isEmpty() ? ItemStack.EMPTY : itemstack; + nonnulllist1.add(itemstack1); + } + + this.player.sendAllContents(this.player.openContainer, nonnulllist1); + } + } + } + } + + public void func_194308_a(CPacketPlaceRecipe p_194308_1_) + { + PacketThreadUtil.checkThreadAndEnqueue(p_194308_1_, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + + if (!this.player.isSpectator() && this.player.openContainer.windowId == p_194308_1_.func_194318_a() && this.player.openContainer.getCanCraft(this.player)) + { + this.field_194309_H.func_194327_a(this.player, p_194308_1_.func_194317_b(), p_194308_1_.func_194319_c()); + } + } + + /** + * Enchants the item identified by the packet given some convoluted conditions (matching window, which + * should/shouldn't be in use?) + */ + public void processEnchantItem(CPacketEnchantItem packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + + if (this.player.openContainer.windowId == packetIn.getWindowId() && this.player.openContainer.getCanCraft(this.player) && !this.player.isSpectator()) + { + this.player.openContainer.enchantItem(this.player, packetIn.getButton()); + this.player.openContainer.detectAndSendChanges(); + } + } + + /** + * Update the server with an ItemStack in a slot. + */ + public void processCreativeInventoryAction(CPacketCreativeInventoryAction packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + + if (this.player.interactionManager.isCreative()) + { + boolean flag = packetIn.getSlotId() < 0; + ItemStack itemstack = packetIn.getStack(); + + if (!itemstack.isEmpty() && itemstack.hasTagCompound() && itemstack.getTagCompound().hasKey("BlockEntityTag", 10)) + { + NBTTagCompound nbttagcompound = itemstack.getTagCompound().getCompoundTag("BlockEntityTag"); + + if (nbttagcompound.hasKey("x") && nbttagcompound.hasKey("y") && nbttagcompound.hasKey("z")) + { + BlockPos blockpos = new BlockPos(nbttagcompound.getInteger("x"), nbttagcompound.getInteger("y"), nbttagcompound.getInteger("z")); + TileEntity tileentity = this.player.world.getTileEntity(blockpos); + + if (tileentity != null) + { + NBTTagCompound nbttagcompound1 = tileentity.writeToNBT(new NBTTagCompound()); + nbttagcompound1.removeTag("x"); + nbttagcompound1.removeTag("y"); + nbttagcompound1.removeTag("z"); + itemstack.setTagInfo("BlockEntityTag", nbttagcompound1); + } + } + } + + boolean flag1 = packetIn.getSlotId() >= 1 && packetIn.getSlotId() <= 45; + boolean flag2 = itemstack.isEmpty() || itemstack.getMetadata() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty(); + + if (flag1 && flag2) + { + if (itemstack.isEmpty()) + { + this.player.inventoryContainer.putStackInSlot(packetIn.getSlotId(), ItemStack.EMPTY); + } + else + { + this.player.inventoryContainer.putStackInSlot(packetIn.getSlotId(), itemstack); + } + + this.player.inventoryContainer.setCanCraft(this.player, true); + } + else if (flag && flag2 && this.itemDropThreshold < 200) + { + this.itemDropThreshold += 20; + EntityItem entityitem = this.player.dropItem(itemstack, true); + + if (entityitem != null) + { + entityitem.setAgeToCreativeDespawnTime(); + } + } + } + } + + /** + * Received in response to the server requesting to confirm that the client-side open container matches the servers' + * after a mismatched container-slot manipulation. It will unlock the player's ability to manipulate the container + * contents + */ + public void processConfirmTransaction(CPacketConfirmTransaction packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + Short oshort = this.pendingTransactions.lookup(this.player.openContainer.windowId); + + if (oshort != null && packetIn.getUid() == oshort.shortValue() && this.player.openContainer.windowId == packetIn.getWindowId() && !this.player.openContainer.getCanCraft(this.player) && !this.player.isSpectator()) + { + this.player.openContainer.setCanCraft(this.player, true); + } + } + + public void processUpdateSign(CPacketUpdateSign packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.markPlayerActive(); + WorldServer worldserver = this.serverController.getWorld(this.player.dimension); + BlockPos blockpos = packetIn.getPosition(); + + if (worldserver.isBlockLoaded(blockpos)) + { + IBlockState iblockstate = worldserver.getBlockState(blockpos); + TileEntity tileentity = worldserver.getTileEntity(blockpos); + + if (!(tileentity instanceof TileEntitySign)) + { + return; + } + + TileEntitySign tileentitysign = (TileEntitySign)tileentity; + + if (!tileentitysign.getIsEditable() || tileentitysign.getPlayer() != this.player) + { + this.serverController.logWarning("Player " + this.player.getName() + " just tried to change non-editable sign"); + return; + } + + String[] astring = packetIn.getLines(); + + for (int i = 0; i < astring.length; ++i) + { + tileentitysign.signText[i] = new TextComponentString(TextFormatting.getTextWithoutFormattingCodes(astring[i])); + } + + tileentitysign.markDirty(); + worldserver.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 3); + } + } + + /** + * Updates a players' ping statistics + */ + public void processKeepAlive(CPacketKeepAlive packetIn) + { + if (this.field_194403_g && packetIn.getKey() == this.field_194404_h) + { + int i = (int)(this.currentTimeMillis() - this.field_194402_f); + this.player.ping = (this.player.ping * 3 + i) / 4; + this.field_194403_g = false; + } + else if (!this.player.getName().equals(this.serverController.getServerOwner())) + { + this.disconnect(new TextComponentTranslation("disconnect.timeout", new Object[0])); + } + } + + private long currentTimeMillis() + { + return System.nanoTime() / 1000000L; + } + + /** + * Processes a player starting/stopping flying + */ + public void processPlayerAbilities(CPacketPlayerAbilities packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.capabilities.isFlying = packetIn.isFlying() && this.player.capabilities.allowFlying; + } + + /** + * Retrieves possible tab completions for the requested command string and sends them to the client + */ + public void processTabComplete(CPacketTabComplete packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + List list = Lists.newArrayList(); + + for (String s : this.serverController.getTabCompletions(this.player, packetIn.getMessage(), packetIn.getTargetBlock(), packetIn.hasTargetBlock())) + { + list.add(s); + } + + this.player.connection.sendPacket(new SPacketTabComplete((String[])list.toArray(new String[list.size()]))); + } + + /** + * Updates serverside copy of client settings: language, render distance, chat visibility, chat colours, difficulty, + * and whether to show the cape + */ + public void processClientSettings(CPacketClientSettings packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + this.player.handleClientSettings(packetIn); + } + + /** + * Synchronizes serverside and clientside book contents and signing + */ + public void processCustomPayload(CPacketCustomPayload packetIn) + { + PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.player.getServerWorld()); + String s = packetIn.getChannelName(); + + if ("MC|BEdit".equals(s)) + { + PacketBuffer packetbuffer = packetIn.getBufferData(); + + try + { + ItemStack itemstack = packetbuffer.readItemStack(); + + if (itemstack.isEmpty()) + { + return; + } + + if (!ItemWritableBook.isNBTValid(itemstack.getTagCompound())) + { + throw new IOException("Invalid book tag!"); + } + + ItemStack itemstack1 = this.player.getHeldItemMainhand(); + + if (itemstack1.isEmpty()) + { + return; + } + + if (itemstack.getItem() == Items.WRITABLE_BOOK && itemstack.getItem() == itemstack1.getItem()) + { + itemstack1.setTagInfo("pages", itemstack.getTagCompound().getTagList("pages", 8)); + } + } + catch (Exception exception6) + { + LOGGER.error("Couldn't handle book info", (Throwable)exception6); + } + } + else if ("MC|BSign".equals(s)) + { + PacketBuffer packetbuffer1 = packetIn.getBufferData(); + + try + { + ItemStack itemstack3 = packetbuffer1.readItemStack(); + + if (itemstack3.isEmpty()) + { + return; + } + + if (!ItemWrittenBook.validBookTagContents(itemstack3.getTagCompound())) + { + throw new IOException("Invalid book tag!"); + } + + ItemStack itemstack4 = this.player.getHeldItemMainhand(); + + if (itemstack4.isEmpty()) + { + return; + } + + if (itemstack3.getItem() == Items.WRITABLE_BOOK && itemstack4.getItem() == Items.WRITABLE_BOOK) + { + ItemStack itemstack2 = new ItemStack(Items.WRITTEN_BOOK); + itemstack2.setTagInfo("author", new NBTTagString(this.player.getName())); + itemstack2.setTagInfo("title", new NBTTagString(itemstack3.getTagCompound().getString("title"))); + NBTTagList nbttaglist = itemstack3.getTagCompound().getTagList("pages", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + String s1 = nbttaglist.getStringTagAt(i); + ITextComponent itextcomponent = new TextComponentString(s1); + s1 = ITextComponent.Serializer.componentToJson(itextcomponent); + nbttaglist.set(i, new NBTTagString(s1)); + } + + itemstack2.setTagInfo("pages", nbttaglist); + this.player.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, itemstack2); + } + } + catch (Exception exception7) + { + LOGGER.error("Couldn't sign book", (Throwable)exception7); + } + } + else if ("MC|TrSel".equals(s)) + { + try + { + int k = packetIn.getBufferData().readInt(); + Container container = this.player.openContainer; + + if (container instanceof ContainerMerchant) + { + ((ContainerMerchant)container).setCurrentRecipeIndex(k); + } + } + catch (Exception exception5) + { + LOGGER.error("Couldn't select trade", (Throwable)exception5); + } + } + else if ("MC|AdvCmd".equals(s)) + { + if (!this.serverController.isCommandBlockEnabled()) + { + this.player.sendMessage(new TextComponentTranslation("advMode.notEnabled", new Object[0])); + return; + } + + if (!this.player.canUseCommandBlock()) + { + this.player.sendMessage(new TextComponentTranslation("advMode.notAllowed", new Object[0])); + return; + } + + PacketBuffer packetbuffer2 = packetIn.getBufferData(); + + try + { + int l = packetbuffer2.readByte(); + CommandBlockBaseLogic commandblockbaselogic1 = null; + + if (l == 0) + { + TileEntity tileentity = this.player.world.getTileEntity(new BlockPos(packetbuffer2.readInt(), packetbuffer2.readInt(), packetbuffer2.readInt())); + + if (tileentity instanceof TileEntityCommandBlock) + { + commandblockbaselogic1 = ((TileEntityCommandBlock)tileentity).getCommandBlockLogic(); + } + } + else if (l == 1) + { + Entity entity = this.player.world.getEntityByID(packetbuffer2.readInt()); + + if (entity instanceof EntityMinecartCommandBlock) + { + commandblockbaselogic1 = ((EntityMinecartCommandBlock)entity).getCommandBlockLogic(); + } + } + + String s6 = packetbuffer2.readString(packetbuffer2.readableBytes()); + boolean flag2 = packetbuffer2.readBoolean(); + + if (commandblockbaselogic1 != null) + { + commandblockbaselogic1.setCommand(s6); + commandblockbaselogic1.setTrackOutput(flag2); + + if (!flag2) + { + commandblockbaselogic1.setLastOutput((ITextComponent)null); + } + + commandblockbaselogic1.updateCommand(); + this.player.sendMessage(new TextComponentTranslation("advMode.setCommand.success", new Object[] {s6})); + } + } + catch (Exception exception4) + { + LOGGER.error("Couldn't set command block", (Throwable)exception4); + } + } + else if ("MC|AutoCmd".equals(s)) + { + if (!this.serverController.isCommandBlockEnabled()) + { + this.player.sendMessage(new TextComponentTranslation("advMode.notEnabled", new Object[0])); + return; + } + + if (!this.player.canUseCommandBlock()) + { + this.player.sendMessage(new TextComponentTranslation("advMode.notAllowed", new Object[0])); + return; + } + + PacketBuffer packetbuffer3 = packetIn.getBufferData(); + + try + { + CommandBlockBaseLogic commandblockbaselogic = null; + TileEntityCommandBlock tileentitycommandblock = null; + BlockPos blockpos1 = new BlockPos(packetbuffer3.readInt(), packetbuffer3.readInt(), packetbuffer3.readInt()); + TileEntity tileentity2 = this.player.world.getTileEntity(blockpos1); + + if (tileentity2 instanceof TileEntityCommandBlock) + { + tileentitycommandblock = (TileEntityCommandBlock)tileentity2; + commandblockbaselogic = tileentitycommandblock.getCommandBlockLogic(); + } + + String s7 = packetbuffer3.readString(packetbuffer3.readableBytes()); + boolean flag3 = packetbuffer3.readBoolean(); + TileEntityCommandBlock.Mode tileentitycommandblock$mode = TileEntityCommandBlock.Mode.valueOf(packetbuffer3.readString(16)); + boolean flag = packetbuffer3.readBoolean(); + boolean flag1 = packetbuffer3.readBoolean(); + + if (commandblockbaselogic != null) + { + EnumFacing enumfacing = (EnumFacing)this.player.world.getBlockState(blockpos1).getValue(BlockCommandBlock.FACING); + + switch (tileentitycommandblock$mode) + { + case SEQUENCE: + IBlockState iblockstate3 = Blocks.CHAIN_COMMAND_BLOCK.getDefaultState(); + this.player.world.setBlockState(blockpos1, iblockstate3.withProperty(BlockCommandBlock.FACING, enumfacing).withProperty(BlockCommandBlock.CONDITIONAL, Boolean.valueOf(flag)), 2); + break; + case AUTO: + IBlockState iblockstate2 = Blocks.REPEATING_COMMAND_BLOCK.getDefaultState(); + this.player.world.setBlockState(blockpos1, iblockstate2.withProperty(BlockCommandBlock.FACING, enumfacing).withProperty(BlockCommandBlock.CONDITIONAL, Boolean.valueOf(flag)), 2); + break; + case REDSTONE: + IBlockState iblockstate = Blocks.COMMAND_BLOCK.getDefaultState(); + this.player.world.setBlockState(blockpos1, iblockstate.withProperty(BlockCommandBlock.FACING, enumfacing).withProperty(BlockCommandBlock.CONDITIONAL, Boolean.valueOf(flag)), 2); + } + + tileentity2.validate(); + this.player.world.setTileEntity(blockpos1, tileentity2); + commandblockbaselogic.setCommand(s7); + commandblockbaselogic.setTrackOutput(flag3); + + if (!flag3) + { + commandblockbaselogic.setLastOutput((ITextComponent)null); + } + + tileentitycommandblock.setAuto(flag1); + commandblockbaselogic.updateCommand(); + + if (!net.minecraft.util.StringUtils.isNullOrEmpty(s7)) + { + this.player.sendMessage(new TextComponentTranslation("advMode.setCommand.success", new Object[] {s7})); + } + } + } + catch (Exception exception3) + { + LOGGER.error("Couldn't set command block", (Throwable)exception3); + } + } + else if ("MC|Beacon".equals(s)) + { + if (this.player.openContainer instanceof ContainerBeacon) + { + try + { + PacketBuffer packetbuffer4 = packetIn.getBufferData(); + int i1 = packetbuffer4.readInt(); + int k1 = packetbuffer4.readInt(); + ContainerBeacon containerbeacon = (ContainerBeacon)this.player.openContainer; + Slot slot = containerbeacon.getSlot(0); + + if (slot.getHasStack()) + { + slot.decrStackSize(1); + IInventory iinventory = containerbeacon.getTileEntity(); + iinventory.setField(1, i1); + iinventory.setField(2, k1); + iinventory.markDirty(); + } + } + catch (Exception exception2) + { + LOGGER.error("Couldn't set beacon", (Throwable)exception2); + } + } + } + else if ("MC|ItemName".equals(s)) + { + if (this.player.openContainer instanceof ContainerRepair) + { + ContainerRepair containerrepair = (ContainerRepair)this.player.openContainer; + + if (packetIn.getBufferData() != null && packetIn.getBufferData().readableBytes() >= 1) + { + String s5 = ChatAllowedCharacters.filterAllowedCharacters(packetIn.getBufferData().readString(32767)); + + if (s5.length() <= 35) + { + containerrepair.updateItemName(s5); + } + } + else + { + containerrepair.updateItemName(""); + } + } + } + else if ("MC|Struct".equals(s)) + { + if (!this.player.canUseCommandBlock()) + { + return; + } + + PacketBuffer packetbuffer5 = packetIn.getBufferData(); + + try + { + BlockPos blockpos = new BlockPos(packetbuffer5.readInt(), packetbuffer5.readInt(), packetbuffer5.readInt()); + IBlockState iblockstate1 = this.player.world.getBlockState(blockpos); + TileEntity tileentity1 = this.player.world.getTileEntity(blockpos); + + if (tileentity1 instanceof TileEntityStructure) + { + TileEntityStructure tileentitystructure = (TileEntityStructure)tileentity1; + int l1 = packetbuffer5.readByte(); + String s8 = packetbuffer5.readString(32); + tileentitystructure.setMode(TileEntityStructure.Mode.valueOf(s8)); + tileentitystructure.setName(packetbuffer5.readString(64)); + int i2 = MathHelper.clamp(packetbuffer5.readInt(), -32, 32); + int j2 = MathHelper.clamp(packetbuffer5.readInt(), -32, 32); + int k2 = MathHelper.clamp(packetbuffer5.readInt(), -32, 32); + tileentitystructure.setPosition(new BlockPos(i2, j2, k2)); + int l2 = MathHelper.clamp(packetbuffer5.readInt(), 0, 32); + int i3 = MathHelper.clamp(packetbuffer5.readInt(), 0, 32); + int j = MathHelper.clamp(packetbuffer5.readInt(), 0, 32); + tileentitystructure.setSize(new BlockPos(l2, i3, j)); + String s2 = packetbuffer5.readString(32); + tileentitystructure.setMirror(Mirror.valueOf(s2)); + String s3 = packetbuffer5.readString(32); + tileentitystructure.setRotation(Rotation.valueOf(s3)); + tileentitystructure.setMetadata(packetbuffer5.readString(128)); + tileentitystructure.setIgnoresEntities(packetbuffer5.readBoolean()); + tileentitystructure.setShowAir(packetbuffer5.readBoolean()); + tileentitystructure.setShowBoundingBox(packetbuffer5.readBoolean()); + tileentitystructure.setIntegrity(MathHelper.clamp(packetbuffer5.readFloat(), 0.0F, 1.0F)); + tileentitystructure.setSeed(packetbuffer5.readVarLong()); + String s4 = tileentitystructure.getName(); + + if (l1 == 2) + { + if (tileentitystructure.save()) + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.save_success", new Object[] {s4}), false); + } + else + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.save_failure", new Object[] {s4}), false); + } + } + else if (l1 == 3) + { + if (!tileentitystructure.isStructureLoadable()) + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.load_not_found", new Object[] {s4}), false); + } + else if (tileentitystructure.load()) + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.load_success", new Object[] {s4}), false); + } + else + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.load_prepare", new Object[] {s4}), false); + } + } + else if (l1 == 4) + { + if (tileentitystructure.detectSize()) + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.size_success", new Object[] {s4}), false); + } + else + { + this.player.sendStatusMessage(new TextComponentTranslation("structure_block.size_failure", new Object[0]), false); + } + } + + tileentitystructure.markDirty(); + this.player.world.notifyBlockUpdate(blockpos, iblockstate1, iblockstate1, 3); + } + } + catch (Exception exception1) + { + LOGGER.error("Couldn't set structure block", (Throwable)exception1); + } + } + else if ("MC|PickItem".equals(s)) + { + PacketBuffer packetbuffer6 = packetIn.getBufferData(); + + try + { + int j1 = packetbuffer6.readVarInt(); + this.player.inventory.pickItem(j1); + this.player.connection.sendPacket(new SPacketSetSlot(-2, this.player.inventory.currentItem, this.player.inventory.getStackInSlot(this.player.inventory.currentItem))); + this.player.connection.sendPacket(new SPacketSetSlot(-2, j1, this.player.inventory.getStackInSlot(j1))); + this.player.connection.sendPacket(new SPacketHeldItemChange(this.player.inventory.currentItem)); + } + catch (Exception exception) + { + LOGGER.error("Couldn't pick item", (Throwable)exception); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyCompressionDecoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyCompressionDecoder.java new file mode 100644 index 0000000..5f07c1a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyCompressionDecoder.java @@ -0,0 +1,61 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.DecoderException; +import java.util.List; +import java.util.zip.DataFormatException; +import java.util.zip.Inflater; + +public class NettyCompressionDecoder extends ByteToMessageDecoder +{ + private final Inflater inflater; + private int threshold; + + public NettyCompressionDecoder(int thresholdIn) + { + this.threshold = thresholdIn; + this.inflater = new Inflater(); + } + + protected void decode(ChannelHandlerContext p_decode_1_, ByteBuf p_decode_2_, List p_decode_3_) throws DataFormatException, Exception + { + if (p_decode_2_.readableBytes() != 0) + { + PacketBuffer packetbuffer = new PacketBuffer(p_decode_2_); + int i = packetbuffer.readVarInt(); + + if (i == 0) + { + p_decode_3_.add(packetbuffer.readBytes(packetbuffer.readableBytes())); + } + else + { + if (i < this.threshold) + { + throw new DecoderException("Badly compressed packet - size of " + i + " is below server threshold of " + this.threshold); + } + + if (i > 2097152) + { + throw new DecoderException("Badly compressed packet - size of " + i + " is larger than protocol maximum of " + 2097152); + } + + byte[] abyte = new byte[packetbuffer.readableBytes()]; + packetbuffer.readBytes(abyte); + this.inflater.setInput(abyte); + byte[] abyte1 = new byte[i]; + this.inflater.inflate(abyte1); + p_decode_3_.add(Unpooled.wrappedBuffer(abyte1)); + this.inflater.reset(); + } + } + } + + public void setCompressionThreshold(int thresholdIn) + { + this.threshold = thresholdIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyCompressionEncoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyCompressionEncoder.java new file mode 100644 index 0000000..8ee44a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyCompressionEncoder.java @@ -0,0 +1,52 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import java.util.zip.Deflater; + +public class NettyCompressionEncoder extends MessageToByteEncoder +{ + private final byte[] buffer = new byte[8192]; + private final Deflater deflater; + private int threshold; + + public NettyCompressionEncoder(int thresholdIn) + { + this.threshold = thresholdIn; + this.deflater = new Deflater(); + } + + protected void encode(ChannelHandlerContext p_encode_1_, ByteBuf p_encode_2_, ByteBuf p_encode_3_) throws Exception + { + int i = p_encode_2_.readableBytes(); + PacketBuffer packetbuffer = new PacketBuffer(p_encode_3_); + + if (i < this.threshold) + { + packetbuffer.writeVarInt(0); + packetbuffer.writeBytes(p_encode_2_); + } + else + { + byte[] abyte = new byte[i]; + p_encode_2_.readBytes(abyte); + packetbuffer.writeVarInt(abyte.length); + this.deflater.setInput(abyte, 0, i); + this.deflater.finish(); + + while (!this.deflater.finished()) + { + int j = this.deflater.deflate(this.buffer); + packetbuffer.writeBytes(this.buffer, 0, j); + } + + this.deflater.reset(); + } + } + + public void setCompressionThreshold(int thresholdIn) + { + this.threshold = thresholdIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptingDecoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptingDecoder.java new file mode 100644 index 0000000..fa7f011 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptingDecoder.java @@ -0,0 +1,23 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageDecoder; +import java.util.List; +import javax.crypto.Cipher; +import javax.crypto.ShortBufferException; + +public class NettyEncryptingDecoder extends MessageToMessageDecoder +{ + private final NettyEncryptionTranslator decryptionCodec; + + public NettyEncryptingDecoder(Cipher cipher) + { + this.decryptionCodec = new NettyEncryptionTranslator(cipher); + } + + protected void decode(ChannelHandlerContext p_decode_1_, ByteBuf p_decode_2_, List p_decode_3_) throws ShortBufferException, Exception + { + p_decode_3_.add(this.decryptionCodec.decipher(p_decode_1_, p_decode_2_)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptingEncoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptingEncoder.java new file mode 100644 index 0000000..f335979 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptingEncoder.java @@ -0,0 +1,22 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import javax.crypto.Cipher; +import javax.crypto.ShortBufferException; + +public class NettyEncryptingEncoder extends MessageToByteEncoder +{ + private final NettyEncryptionTranslator encryptionCodec; + + public NettyEncryptingEncoder(Cipher cipher) + { + this.encryptionCodec = new NettyEncryptionTranslator(cipher); + } + + protected void encode(ChannelHandlerContext p_encode_1_, ByteBuf p_encode_2_, ByteBuf p_encode_3_) throws ShortBufferException, Exception + { + this.encryptionCodec.cipher(p_encode_2_, p_encode_3_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptionTranslator.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptionTranslator.java new file mode 100644 index 0000000..d2d249e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyEncryptionTranslator.java @@ -0,0 +1,54 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import javax.crypto.Cipher; +import javax.crypto.ShortBufferException; + +public class NettyEncryptionTranslator +{ + private final Cipher cipher; + private byte[] inputBuffer = new byte[0]; + private byte[] outputBuffer = new byte[0]; + + protected NettyEncryptionTranslator(Cipher cipherIn) + { + this.cipher = cipherIn; + } + + private byte[] bufToBytes(ByteBuf buf) + { + int i = buf.readableBytes(); + + if (this.inputBuffer.length < i) + { + this.inputBuffer = new byte[i]; + } + + buf.readBytes(this.inputBuffer, 0, i); + return this.inputBuffer; + } + + protected ByteBuf decipher(ChannelHandlerContext ctx, ByteBuf buffer) throws ShortBufferException + { + int i = buffer.readableBytes(); + byte[] abyte = this.bufToBytes(buffer); + ByteBuf bytebuf = ctx.alloc().heapBuffer(this.cipher.getOutputSize(i)); + bytebuf.writerIndex(this.cipher.update(abyte, 0, i, bytebuf.array(), bytebuf.arrayOffset())); + return bytebuf; + } + + protected void cipher(ByteBuf in, ByteBuf out) throws ShortBufferException + { + int i = in.readableBytes(); + byte[] abyte = this.bufToBytes(in); + int j = this.cipher.getOutputSize(i); + + if (this.outputBuffer.length < j) + { + this.outputBuffer = new byte[j]; + } + + out.writeBytes(this.outputBuffer, 0, this.cipher.update(abyte, 0, i, this.outputBuffer)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyPacketDecoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyPacketDecoder.java new file mode 100644 index 0000000..01bc22c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyPacketDecoder.java @@ -0,0 +1,56 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import java.io.IOException; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +public class NettyPacketDecoder extends ByteToMessageDecoder +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Marker RECEIVED_PACKET_MARKER = MarkerManager.getMarker("PACKET_RECEIVED", NetworkManager.NETWORK_PACKETS_MARKER); + private final EnumPacketDirection direction; + + public NettyPacketDecoder(EnumPacketDirection direction) + { + this.direction = direction; + } + + protected void decode(ChannelHandlerContext p_decode_1_, ByteBuf p_decode_2_, List p_decode_3_) throws IOException, InstantiationException, IllegalAccessException, Exception + { + if (p_decode_2_.readableBytes() != 0) + { + PacketBuffer packetbuffer = new PacketBuffer(p_decode_2_); + int i = packetbuffer.readVarInt(); + Packet packet = ((EnumConnectionState)p_decode_1_.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).get()).getPacket(this.direction, i); + + if (packet == null) + { + throw new IOException("Bad packet id " + i); + } + else + { + packet.readPacketData(packetbuffer); + + if (packetbuffer.readableBytes() > 0) + { + throw new IOException("Packet " + ((EnumConnectionState)p_decode_1_.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).get()).getId() + "/" + i + " (" + packet.getClass().getSimpleName() + ") was larger than I expected, found " + packetbuffer.readableBytes() + " bytes extra whilst reading packet " + i); + } + else + { + p_decode_3_.add(packet); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug(RECEIVED_PACKET_MARKER, " IN: [{}:{}] {}", p_decode_1_.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).get(), Integer.valueOf(i), packet.getClass().getName()); + } + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyPacketEncoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyPacketEncoder.java new file mode 100644 index 0000000..dcad4d8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyPacketEncoder.java @@ -0,0 +1,60 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import java.io.IOException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +public class NettyPacketEncoder extends MessageToByteEncoder < Packet> +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Marker RECEIVED_PACKET_MARKER = MarkerManager.getMarker("PACKET_SENT", NetworkManager.NETWORK_PACKETS_MARKER); + private final EnumPacketDirection direction; + + public NettyPacketEncoder(EnumPacketDirection direction) + { + this.direction = direction; + } + + protected void encode(ChannelHandlerContext p_encode_1_, Packet p_encode_2_, ByteBuf p_encode_3_) throws IOException, Exception + { + EnumConnectionState enumconnectionstate = (EnumConnectionState)p_encode_1_.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).get(); + + if (enumconnectionstate == null) + { + throw new RuntimeException("ConnectionProtocol unknown: " + p_encode_2_.toString()); + } + else + { + Integer integer = enumconnectionstate.getPacketId(this.direction, p_encode_2_); + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug(RECEIVED_PACKET_MARKER, "OUT: [{}:{}] {}", p_encode_1_.channel().attr(NetworkManager.PROTOCOL_ATTRIBUTE_KEY).get(), integer, p_encode_2_.getClass().getName()); + } + + if (integer == null) + { + throw new IOException("Can't serialize unregistered packet"); + } + else + { + PacketBuffer packetbuffer = new PacketBuffer(p_encode_3_); + packetbuffer.writeVarInt(integer.intValue()); + + try + { + p_encode_2_.writePacketData(packetbuffer); + } + catch (Throwable throwable) + { + throw throwable; // Forge: throw this instead of logging it, to prevent corrupt packets from being sent to the client where they are much harder to debug. + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyVarint21FrameDecoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyVarint21FrameDecoder.java new file mode 100644 index 0000000..02e0ff9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyVarint21FrameDecoder.java @@ -0,0 +1,54 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.CorruptedFrameException; +import java.util.List; + +public class NettyVarint21FrameDecoder extends ByteToMessageDecoder +{ + protected void decode(ChannelHandlerContext p_decode_1_, ByteBuf p_decode_2_, List p_decode_3_) throws Exception + { + p_decode_2_.markReaderIndex(); + byte[] abyte = new byte[3]; + + for (int i = 0; i < abyte.length; ++i) + { + if (!p_decode_2_.isReadable()) + { + p_decode_2_.resetReaderIndex(); + return; + } + + abyte[i] = p_decode_2_.readByte(); + + if (abyte[i] >= 0) + { + PacketBuffer packetbuffer = new PacketBuffer(Unpooled.wrappedBuffer(abyte)); + + try + { + int j = packetbuffer.readVarInt(); + + if (p_decode_2_.readableBytes() >= j) + { + p_decode_3_.add(p_decode_2_.readBytes(j)); + return; + } + + p_decode_2_.resetReaderIndex(); + } + finally + { + packetbuffer.release(); + } + + return; + } + } + + throw new CorruptedFrameException("length wider than 21-bit"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NettyVarint21FrameEncoder.java b/build/tmp/recompileMc/sources/net/minecraft/network/NettyVarint21FrameEncoder.java new file mode 100644 index 0000000..fb5834c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NettyVarint21FrameEncoder.java @@ -0,0 +1,28 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.handler.codec.MessageToByteEncoder; + +@Sharable +public class NettyVarint21FrameEncoder extends MessageToByteEncoder +{ + protected void encode(ChannelHandlerContext p_encode_1_, ByteBuf p_encode_2_, ByteBuf p_encode_3_) throws Exception + { + int i = p_encode_2_.readableBytes(); + int j = PacketBuffer.getVarIntSize(i); + + if (j > 3) + { + throw new IllegalArgumentException("unable to fit " + i + " into " + 3); + } + else + { + PacketBuffer packetbuffer = new PacketBuffer(p_encode_3_); + packetbuffer.ensureWritable(j + i); + packetbuffer.writeVarInt(i); + packetbuffer.writeBytes(p_encode_2_, p_encode_2_.readerIndex(), i); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NetworkManager.java b/build/tmp/recompileMc/sources/net/minecraft/network/NetworkManager.java new file mode 100644 index 0000000..bb1f5b9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NetworkManager.java @@ -0,0 +1,533 @@ +package net.minecraft.network; + +import com.google.common.collect.Queues; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.channel.epoll.Epoll; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.epoll.EpollSocketChannel; +import io.netty.channel.local.LocalChannel; +import io.netty.channel.local.LocalEventLoopGroup; +import io.netty.channel.local.LocalServerChannel; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.timeout.TimeoutException; +import io.netty.util.AttributeKey; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; +import java.net.InetAddress; +import java.net.SocketAddress; +import java.util.Queue; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import javax.annotation.Nullable; +import javax.crypto.SecretKey; +import net.minecraft.util.CryptManager; +import net.minecraft.util.ITickable; +import net.minecraft.util.LazyLoadBase; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +public class NetworkManager extends SimpleChannelInboundHandler < Packet> +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final Marker NETWORK_MARKER = MarkerManager.getMarker("NETWORK"); + public static final Marker NETWORK_PACKETS_MARKER = MarkerManager.getMarker("NETWORK_PACKETS", NETWORK_MARKER); + public static final AttributeKey PROTOCOL_ATTRIBUTE_KEY = AttributeKey.valueOf("protocol"); + public static final LazyLoadBase CLIENT_NIO_EVENTLOOP = new LazyLoadBase() + { + protected NioEventLoopGroup load() + { + return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Client IO #%d").setDaemon(true).build()); + } + }; + public static final LazyLoadBase CLIENT_EPOLL_EVENTLOOP = new LazyLoadBase() + { + protected EpollEventLoopGroup load() + { + return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Client IO #%d").setDaemon(true).build()); + } + }; + public static final LazyLoadBase CLIENT_LOCAL_EVENTLOOP = new LazyLoadBase() + { + protected LocalEventLoopGroup load() + { + return new LocalEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Local Client IO #%d").setDaemon(true).build()); + } + }; + private final EnumPacketDirection direction; + /** The queue for packets that require transmission */ + private final Queue outboundPacketsQueue = Queues.newConcurrentLinkedQueue(); + private final ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); + /** The active channel */ + private Channel channel; + /** The address of the remote party */ + private SocketAddress socketAddress; + /** The INetHandler instance responsible for processing received packets */ + private INetHandler packetListener; + /** A String indicating why the network has shutdown. */ + private ITextComponent terminationReason; + private boolean isEncrypted; + private boolean disconnected; + + public NetworkManager(EnumPacketDirection packetDirection) + { + this.direction = packetDirection; + } + + public EnumPacketDirection getDirection() + { + return this.direction; + } + + public void channelActive(ChannelHandlerContext p_channelActive_1_) throws Exception + { + super.channelActive(p_channelActive_1_); + this.channel = p_channelActive_1_.channel(); + this.socketAddress = this.channel.remoteAddress(); + + try + { + this.setConnectionState(EnumConnectionState.HANDSHAKING); + } + catch (Throwable throwable) + { + LOGGER.fatal(throwable); + } + } + + /** + * Sets the new connection state and registers which packets this channel may send and receive + */ + public void setConnectionState(EnumConnectionState newState) + { + this.channel.attr(PROTOCOL_ATTRIBUTE_KEY).set(newState); + this.channel.config().setAutoRead(true); + LOGGER.debug("Enabled auto read"); + } + + public void channelInactive(ChannelHandlerContext p_channelInactive_1_) throws Exception + { + this.closeChannel(new TextComponentTranslation("disconnect.endOfStream", new Object[0])); + } + + public void exceptionCaught(ChannelHandlerContext p_exceptionCaught_1_, Throwable p_exceptionCaught_2_) throws Exception + { + TextComponentTranslation textcomponenttranslation; + + if (p_exceptionCaught_2_ instanceof TimeoutException) + { + textcomponenttranslation = new TextComponentTranslation("disconnect.timeout", new Object[0]); + } + else + { + textcomponenttranslation = new TextComponentTranslation("disconnect.genericReason", new Object[] {"Internal Exception: " + p_exceptionCaught_2_}); + } + + LOGGER.debug(textcomponenttranslation.getUnformattedText(), p_exceptionCaught_2_); + this.closeChannel(textcomponenttranslation); + } + + protected void channelRead0(ChannelHandlerContext p_channelRead0_1_, Packet p_channelRead0_2_) throws Exception + { + if (this.channel.isOpen()) + { + try + { + ((Packet)p_channelRead0_2_).processPacket(this.packetListener); + } + catch (ThreadQuickExitException var4) + { + ; + } + } + } + + /** + * Sets the NetHandler for this NetworkManager, no checks are made if this handler is suitable for the particular + * connection state (protocol) + */ + public void setNetHandler(INetHandler handler) + { + Validate.notNull(handler, "packetListener"); + LOGGER.debug("Set listener of {} to {}", this, handler); + this.packetListener = handler; + } + + public void sendPacket(Packet packetIn) + { + if (this.isChannelOpen()) + { + this.flushOutboundQueue(); + this.dispatchPacket(packetIn, (GenericFutureListener[])null); + } + else + { + this.readWriteLock.writeLock().lock(); + + try + { + this.outboundPacketsQueue.add(new NetworkManager.InboundHandlerTuplePacketListener(packetIn, new GenericFutureListener[0])); + } + finally + { + this.readWriteLock.writeLock().unlock(); + } + } + } + + public void sendPacket(Packet packetIn, GenericFutureListener > listener, GenericFutureListener > ... listeners) + { + if (this.isChannelOpen()) + { + this.flushOutboundQueue(); + this.dispatchPacket(packetIn, (GenericFutureListener[])ArrayUtils.add(listeners, 0, listener)); + } + else + { + this.readWriteLock.writeLock().lock(); + + try + { + this.outboundPacketsQueue.add(new NetworkManager.InboundHandlerTuplePacketListener(packetIn, (GenericFutureListener[])ArrayUtils.add(listeners, 0, listener))); + } + finally + { + this.readWriteLock.writeLock().unlock(); + } + } + } + + /** + * Will commit the packet to the channel. If the current thread 'owns' the channel it will write and flush the + * packet, otherwise it will add a task for the channel eventloop thread to do that. + */ + private void dispatchPacket(final Packet inPacket, @Nullable final GenericFutureListener > [] futureListeners) + { + final EnumConnectionState enumconnectionstate = EnumConnectionState.getFromPacket(inPacket); + final EnumConnectionState enumconnectionstate1 = (EnumConnectionState)this.channel.attr(PROTOCOL_ATTRIBUTE_KEY).get(); + + if (enumconnectionstate1 != enumconnectionstate && !( inPacket instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) + { + LOGGER.debug("Disabled auto read"); + this.channel.config().setAutoRead(false); + } + + if (this.channel.eventLoop().inEventLoop()) + { + if (enumconnectionstate != enumconnectionstate1 && !( inPacket instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) + { + this.setConnectionState(enumconnectionstate); + } + + ChannelFuture channelfuture = this.channel.writeAndFlush(inPacket); + + if (futureListeners != null) + { + channelfuture.addListeners(futureListeners); + } + + channelfuture.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); + } + else + { + this.channel.eventLoop().execute(new Runnable() + { + public void run() + { + if (enumconnectionstate != enumconnectionstate1 && !( inPacket instanceof net.minecraftforge.fml.common.network.internal.FMLProxyPacket)) + { + NetworkManager.this.setConnectionState(enumconnectionstate); + } + + ChannelFuture channelfuture1 = NetworkManager.this.channel.writeAndFlush(inPacket); + + if (futureListeners != null) + { + channelfuture1.addListeners(futureListeners); + } + + channelfuture1.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); + } + }); + } + } + + /** + * Will iterate through the outboundPacketQueue and dispatch all Packets + */ + private void flushOutboundQueue() + { + if (this.channel != null && this.channel.isOpen()) + { + this.readWriteLock.readLock().lock(); + + try + { + while (!this.outboundPacketsQueue.isEmpty()) + { + NetworkManager.InboundHandlerTuplePacketListener networkmanager$inboundhandlertuplepacketlistener = this.outboundPacketsQueue.poll(); + this.dispatchPacket(networkmanager$inboundhandlertuplepacketlistener.packet, networkmanager$inboundhandlertuplepacketlistener.futureListeners); + } + } + finally + { + this.readWriteLock.readLock().unlock(); + } + } + } + + /** + * Checks timeouts and processes all packets received + */ + public void processReceivedPackets() + { + this.flushOutboundQueue(); + + if (this.packetListener instanceof ITickable) + { + ((ITickable)this.packetListener).update(); + } + + if (this.channel != null) + { + this.channel.flush(); + } + } + + /** + * Returns the socket address of the remote side. Server-only. + */ + public SocketAddress getRemoteAddress() + { + return this.socketAddress; + } + + /** + * Closes the channel, the parameter can be used for an exit message (not certain how it gets sent) + */ + public void closeChannel(ITextComponent message) + { + if (this.channel.isOpen()) + { + this.channel.close().awaitUninterruptibly(); + this.terminationReason = message; + } + } + + /** + * True if this NetworkManager uses a memory connection (single player game). False may imply both an active TCP + * connection or simply no active connection at all + */ + public boolean isLocalChannel() + { + return this.channel instanceof LocalChannel || this.channel instanceof LocalServerChannel; + } + + /** + * Create a new NetworkManager from the server host and connect it to the server + */ + @SideOnly(Side.CLIENT) + public static NetworkManager createNetworkManagerAndConnect(InetAddress address, int serverPort, boolean useNativeTransport) + { + if (address instanceof java.net.Inet6Address) System.setProperty("java.net.preferIPv4Stack", "false"); + final NetworkManager networkmanager = new NetworkManager(EnumPacketDirection.CLIENTBOUND); + Class oclass; + LazyLoadBase lazyloadbase; + + if (Epoll.isAvailable() && useNativeTransport) + { + oclass = EpollSocketChannel.class; + lazyloadbase = CLIENT_EPOLL_EVENTLOOP; + } + else + { + oclass = NioSocketChannel.class; + lazyloadbase = CLIENT_NIO_EVENTLOOP; + } + + ((Bootstrap)((Bootstrap)((Bootstrap)(new Bootstrap()).group(lazyloadbase.getValue())).handler(new ChannelInitializer() + { + protected void initChannel(Channel p_initChannel_1_) throws Exception + { + try + { + p_initChannel_1_.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(true)); + } + catch (ChannelException var3) + { + ; + } + + p_initChannel_1_.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("splitter", new NettyVarint21FrameDecoder()).addLast("decoder", new NettyPacketDecoder(EnumPacketDirection.CLIENTBOUND)).addLast("prepender", new NettyVarint21FrameEncoder()).addLast("encoder", new NettyPacketEncoder(EnumPacketDirection.SERVERBOUND)).addLast("packet_handler", networkmanager); + } + })).channel(oclass)).connect(address, serverPort).syncUninterruptibly(); + return networkmanager; + } + + /** + * Prepares a clientside NetworkManager: establishes a connection to the socket supplied and configures the channel + * pipeline. Returns the newly created instance. + */ + @SideOnly(Side.CLIENT) + public static NetworkManager provideLocalClient(SocketAddress address) + { + final NetworkManager networkmanager = new NetworkManager(EnumPacketDirection.CLIENTBOUND); + ((Bootstrap)((Bootstrap)((Bootstrap)(new Bootstrap()).group(CLIENT_LOCAL_EVENTLOOP.getValue())).handler(new ChannelInitializer() + { + protected void initChannel(Channel p_initChannel_1_) throws Exception + { + p_initChannel_1_.pipeline().addLast("packet_handler", networkmanager); + } + })).channel(LocalChannel.class)).connect(address).syncUninterruptibly(); + return networkmanager; + } + + /** + * Adds an encoder+decoder to the channel pipeline. The parameter is the secret key used for encrypted communication + */ + public void enableEncryption(SecretKey key) + { + this.isEncrypted = true; + this.channel.pipeline().addBefore("splitter", "decrypt", new NettyEncryptingDecoder(CryptManager.createNetCipherInstance(2, key))); + this.channel.pipeline().addBefore("prepender", "encrypt", new NettyEncryptingEncoder(CryptManager.createNetCipherInstance(1, key))); + } + + @SideOnly(Side.CLIENT) + public boolean isEncrypted() + { + return this.isEncrypted; + } + + /** + * Returns true if this NetworkManager has an active channel, false otherwise + */ + public boolean isChannelOpen() + { + return this.channel != null && this.channel.isOpen(); + } + + public boolean hasNoChannel() + { + return this.channel == null; + } + + /** + * Gets the current handler for processing packets + */ + public INetHandler getNetHandler() + { + return this.packetListener; + } + + /** + * If this channel is closed, returns the exit message, null otherwise. + */ + public ITextComponent getExitMessage() + { + return this.terminationReason; + } + + /** + * Switches the channel to manual reading modus + */ + public void disableAutoRead() + { + this.channel.config().setAutoRead(false); + } + + public void setCompressionThreshold(int threshold) + { + if (threshold >= 0) + { + if (this.channel.pipeline().get("decompress") instanceof NettyCompressionDecoder) + { + ((NettyCompressionDecoder)this.channel.pipeline().get("decompress")).setCompressionThreshold(threshold); + } + else + { + this.channel.pipeline().addBefore("decoder", "decompress", new NettyCompressionDecoder(threshold)); + } + + if (this.channel.pipeline().get("compress") instanceof NettyCompressionEncoder) + { + ((NettyCompressionEncoder)this.channel.pipeline().get("compress")).setCompressionThreshold(threshold); + } + else + { + this.channel.pipeline().addBefore("encoder", "compress", new NettyCompressionEncoder(threshold)); + } + } + else + { + if (this.channel.pipeline().get("decompress") instanceof NettyCompressionDecoder) + { + this.channel.pipeline().remove("decompress"); + } + + if (this.channel.pipeline().get("compress") instanceof NettyCompressionEncoder) + { + this.channel.pipeline().remove("compress"); + } + } + } + + public void checkDisconnected() + { + if (this.channel != null && !this.channel.isOpen()) + { + if (this.disconnected) + { + LOGGER.warn("handleDisconnection() called twice"); + } + else + { + this.disconnected = true; + + if (this.getExitMessage() != null) + { + this.getNetHandler().onDisconnect(this.getExitMessage()); + } + else if (this.getNetHandler() != null) + { + this.getNetHandler().onDisconnect(new TextComponentTranslation("multiplayer.disconnect.generic", new Object[0])); + } + } + } + } + + public Channel channel() + { + return channel; + } + + static class InboundHandlerTuplePacketListener + { + private final Packet packet; + private final GenericFutureListener > [] futureListeners; + + public InboundHandlerTuplePacketListener(Packet inPacket, GenericFutureListener > ... inFutureListeners) + { + this.packet = inPacket; + this.futureListeners = inFutureListeners; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/NetworkSystem.java b/build/tmp/recompileMc/sources/net/minecraft/network/NetworkSystem.java new file mode 100644 index 0000000..2370eb0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/NetworkSystem.java @@ -0,0 +1,241 @@ +package net.minecraft.network; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.epoll.Epoll; +import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.epoll.EpollServerSocketChannel; +import io.netty.channel.local.LocalAddress; +import io.netty.channel.local.LocalEventLoopGroup; +import io.netty.channel.local.LocalServerChannel; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.ServerSocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; +import java.io.IOException; +import java.net.InetAddress; +import java.net.SocketAddress; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.network.NetHandlerHandshakeMemory; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.network.play.server.SPacketDisconnect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.NetHandlerHandshakeTCP; +import net.minecraft.util.LazyLoadBase; +import net.minecraft.util.ReportedException; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class NetworkSystem +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final LazyLoadBase SERVER_NIO_EVENTLOOP = new LazyLoadBase() + { + protected NioEventLoopGroup load() + { + return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Server IO #%d").setDaemon(true).setThreadFactory(net.minecraftforge.fml.common.thread.SidedThreadGroups.SERVER).build()); + } + }; + public static final LazyLoadBase SERVER_EPOLL_EVENTLOOP = new LazyLoadBase() + { + protected EpollEventLoopGroup load() + { + return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Server IO #%d").setDaemon(true).setThreadFactory(net.minecraftforge.fml.common.thread.SidedThreadGroups.SERVER).build()); + } + }; + public static final LazyLoadBase SERVER_LOCAL_EVENTLOOP = new LazyLoadBase() + { + protected LocalEventLoopGroup load() + { + return new LocalEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Local Server IO #%d").setDaemon(true).setThreadFactory(net.minecraftforge.fml.common.thread.SidedThreadGroups.CLIENT).build()); + } + }; + /** Reference to the MinecraftServer object. */ + private final MinecraftServer mcServer; + /** True if this NetworkSystem has never had his endpoints terminated */ + public volatile boolean isAlive; + /** Contains all endpoints added to this NetworkSystem */ + private final List endpoints = Collections.synchronizedList(Lists.newArrayList()); + /** A list containing all NetworkManager instances of all endpoints */ + private final List networkManagers = Collections.synchronizedList(Lists.newArrayList()); + + public NetworkSystem(MinecraftServer server) + { + this.mcServer = server; + this.isAlive = true; + } + + /** + * Adds a channel that listens on publicly accessible network ports + */ + public void addLanEndpoint(InetAddress address, int port) throws IOException + { + if (address instanceof java.net.Inet6Address) System.setProperty("java.net.preferIPv4Stack", "false"); + synchronized (this.endpoints) + { + Class oclass; + LazyLoadBase lazyloadbase; + + if (Epoll.isAvailable() && this.mcServer.shouldUseNativeTransport()) + { + oclass = EpollServerSocketChannel.class; + lazyloadbase = SERVER_EPOLL_EVENTLOOP; + LOGGER.info("Using epoll channel type"); + } + else + { + oclass = NioServerSocketChannel.class; + lazyloadbase = SERVER_NIO_EVENTLOOP; + LOGGER.info("Using default channel type"); + } + + this.endpoints.add(((ServerBootstrap)((ServerBootstrap)(new ServerBootstrap()).channel(oclass)).childHandler(new ChannelInitializer() + { + protected void initChannel(Channel p_initChannel_1_) throws Exception + { + try + { + p_initChannel_1_.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(true)); + } + catch (ChannelException var3) + { + ; + } + + p_initChannel_1_.pipeline().addLast("timeout", new ReadTimeoutHandler(net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.READ_TIMEOUT)).addLast("legacy_query", new LegacyPingHandler(NetworkSystem.this)).addLast("splitter", new NettyVarint21FrameDecoder()).addLast("decoder", new NettyPacketDecoder(EnumPacketDirection.SERVERBOUND)).addLast("prepender", new NettyVarint21FrameEncoder()).addLast("encoder", new NettyPacketEncoder(EnumPacketDirection.CLIENTBOUND)); + NetworkManager networkmanager = new NetworkManager(EnumPacketDirection.SERVERBOUND); + NetworkSystem.this.networkManagers.add(networkmanager); + p_initChannel_1_.pipeline().addLast("packet_handler", networkmanager); + networkmanager.setNetHandler(new NetHandlerHandshakeTCP(NetworkSystem.this.mcServer, networkmanager)); + } + }).group(lazyloadbase.getValue()).localAddress(address, port)).bind().syncUninterruptibly()); + } + } + + /** + * Adds a channel that listens locally + */ + @SideOnly(Side.CLIENT) + public SocketAddress addLocalEndpoint() + { + ChannelFuture channelfuture; + + synchronized (this.endpoints) + { + channelfuture = ((ServerBootstrap)((ServerBootstrap)(new ServerBootstrap()).channel(LocalServerChannel.class)).childHandler(new ChannelInitializer() + { + protected void initChannel(Channel p_initChannel_1_) throws Exception + { + NetworkManager networkmanager = new NetworkManager(EnumPacketDirection.SERVERBOUND); + networkmanager.setNetHandler(new NetHandlerHandshakeMemory(NetworkSystem.this.mcServer, networkmanager)); + NetworkSystem.this.networkManagers.add(networkmanager); + p_initChannel_1_.pipeline().addLast("packet_handler", networkmanager); + } + }).group(SERVER_NIO_EVENTLOOP.getValue()).localAddress(LocalAddress.ANY)).bind().syncUninterruptibly(); + this.endpoints.add(channelfuture); + } + + return channelfuture.channel().localAddress(); + } + + /** + * Shuts down all open endpoints (with immediate effect?) + */ + public void terminateEndpoints() + { + this.isAlive = false; + + for (ChannelFuture channelfuture : this.endpoints) + { + try + { + channelfuture.channel().close().sync(); + } + catch (InterruptedException var4) + { + LOGGER.error("Interrupted whilst closing channel"); + } + } + } + + /** + * Will try to process the packets received by each NetworkManager, gracefully manage processing failures and cleans + * up dead connections + */ + public void networkTick() + { + synchronized (this.networkManagers) + { + Iterator iterator = this.networkManagers.iterator(); + + while (iterator.hasNext()) + { + final NetworkManager networkmanager = iterator.next(); + + if (!networkmanager.hasNoChannel()) + { + if (networkmanager.isChannelOpen()) + { + try + { + networkmanager.processReceivedPackets(); + } + catch (Exception exception) + { + if (networkmanager.isLocalChannel()) + { + CrashReport crashreport = CrashReport.makeCrashReport(exception, "Ticking memory connection"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Ticking connection"); + crashreportcategory.addDetail("Connection", new ICrashReportDetail() + { + public String call() throws Exception + { + return networkmanager.toString(); + } + }); + throw new ReportedException(crashreport); + } + + LOGGER.warn("Failed to handle packet for {}", networkmanager.getRemoteAddress(), exception); + final TextComponentString textcomponentstring = new TextComponentString("Internal server error"); + networkmanager.sendPacket(new SPacketDisconnect(textcomponentstring), new GenericFutureListener < Future > () + { + public void operationComplete(Future p_operationComplete_1_) throws Exception + { + networkmanager.closeChannel(textcomponentstring); + } + }); + networkmanager.disableAutoRead(); + } + } + else + { + iterator.remove(); + networkmanager.checkDisconnected(); + } + } + } + } + } + + public MinecraftServer getServer() + { + return this.mcServer; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/Packet.java b/build/tmp/recompileMc/sources/net/minecraft/network/Packet.java new file mode 100644 index 0000000..2d6204c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/Packet.java @@ -0,0 +1,21 @@ +package net.minecraft.network; + +import java.io.IOException; + +public interface Packet +{ + /** + * Reads the raw packet data from the data stream. + */ + void readPacketData(PacketBuffer buf) throws IOException; + + /** + * Writes the raw packet data to the data stream. + */ + void writePacketData(PacketBuffer buf) throws IOException; + + /** + * Passes this Packet on to the NetHandler for processing. + */ + void processPacket(T handler); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/PacketBuffer.java b/build/tmp/recompileMc/sources/net/minecraft/network/PacketBuffer.java new file mode 100644 index 0000000..4ac6297 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/PacketBuffer.java @@ -0,0 +1,1385 @@ +package net.minecraft.network; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufInputStream; +import io.netty.buffer.ByteBufOutputStream; +import io.netty.handler.codec.DecoderException; +import io.netty.handler.codec.EncoderException; +import io.netty.util.ByteProcessor; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.FileChannel; +import java.nio.channels.GatheringByteChannel; +import java.nio.channels.ScatteringByteChannel; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTSizeTracker; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketBuffer extends ByteBuf +{ + private final ByteBuf buf; + + public PacketBuffer(ByteBuf wrapped) + { + this.buf = wrapped; + } + + /** + * Calculates the number of bytes required to fit the supplied int (0-5) if it were to be read/written using + * readVarIntFromBuffer or writeVarIntToBuffer + */ + public static int getVarIntSize(int input) + { + for (int i = 1; i < 5; ++i) + { + if ((input & -1 << i * 7) == 0) + { + return i; + } + } + + return 5; + } + + public PacketBuffer writeByteArray(byte[] array) + { + this.writeVarInt(array.length); + this.writeBytes(array); + return this; + } + + public byte[] readByteArray() + { + return this.readByteArray(this.readableBytes()); + } + + public byte[] readByteArray(int maxLength) + { + int i = this.readVarInt(); + + if (i > maxLength) + { + throw new DecoderException("ByteArray with size " + i + " is bigger than allowed " + maxLength); + } + else + { + byte[] abyte = new byte[i]; + this.readBytes(abyte); + return abyte; + } + } + + /** + * Writes an array of VarInts to the buffer, prefixed by the length of the array (as a VarInt). + */ + public PacketBuffer writeVarIntArray(int[] array) + { + this.writeVarInt(array.length); + + for (int i : array) + { + this.writeVarInt(i); + } + + return this; + } + + public int[] readVarIntArray() + { + return this.readVarIntArray(this.readableBytes()); + } + + public int[] readVarIntArray(int maxLength) + { + int i = this.readVarInt(); + + if (i > maxLength) + { + throw new DecoderException("VarIntArray with size " + i + " is bigger than allowed " + maxLength); + } + else + { + int[] aint = new int[i]; + + for (int j = 0; j < aint.length; ++j) + { + aint[j] = this.readVarInt(); + } + + return aint; + } + } + + /** + * Writes an array of longs to the buffer, prefixed by the length of the array (as a VarInt). + */ + public PacketBuffer writeLongArray(long[] array) + { + this.writeVarInt(array.length); + + for (long i : array) + { + this.writeLong(i); + } + + return this; + } + + /** + * Reads a length-prefixed array of longs from the buffer. + */ + @SideOnly(Side.CLIENT) + public long[] readLongArray(@Nullable long[] array) + { + return this.readLongArray(array, this.readableBytes() / 8); + } + + @SideOnly(Side.CLIENT) + public long[] readLongArray(@Nullable long[] array, int maxLength) + { + int i = this.readVarInt(); + + if (array == null || array.length != i) + { + if (i > maxLength) + { + throw new DecoderException("LongArray with size " + i + " is bigger than allowed " + maxLength); + } + + array = new long[i]; + } + + for (int j = 0; j < array.length; ++j) + { + array[j] = this.readLong(); + } + + return array; + } + + public BlockPos readBlockPos() + { + return BlockPos.fromLong(this.readLong()); + } + + public PacketBuffer writeBlockPos(BlockPos pos) + { + this.writeLong(pos.toLong()); + return this; + } + + public ITextComponent readTextComponent() throws IOException + { + return ITextComponent.Serializer.jsonToComponent(this.readString(32767)); + } + + public PacketBuffer writeTextComponent(ITextComponent component) + { + return this.writeString(ITextComponent.Serializer.componentToJson(component)); + } + + public > T readEnumValue(Class enumClass) + { + return (T)((Enum[])enumClass.getEnumConstants())[this.readVarInt()]; + } + + public PacketBuffer writeEnumValue(Enum value) + { + return this.writeVarInt(value.ordinal()); + } + + /** + * Reads a compressed int from the buffer. To do so it maximally reads 5 byte-sized chunks whose most significant + * bit dictates whether another byte should be read. + */ + public int readVarInt() + { + int i = 0; + int j = 0; + + while (true) + { + byte b0 = this.readByte(); + i |= (b0 & 127) << j++ * 7; + + if (j > 5) + { + throw new RuntimeException("VarInt too big"); + } + + if ((b0 & 128) != 128) + { + break; + } + } + + return i; + } + + public long readVarLong() + { + long i = 0L; + int j = 0; + + while (true) + { + byte b0 = this.readByte(); + i |= (long)(b0 & 127) << j++ * 7; + + if (j > 10) + { + throw new RuntimeException("VarLong too big"); + } + + if ((b0 & 128) != 128) + { + break; + } + } + + return i; + } + + public PacketBuffer writeUniqueId(UUID uuid) + { + this.writeLong(uuid.getMostSignificantBits()); + this.writeLong(uuid.getLeastSignificantBits()); + return this; + } + + public UUID readUniqueId() + { + return new UUID(this.readLong(), this.readLong()); + } + + /** + * Writes a compressed int to the buffer. The smallest number of bytes to fit the passed int will be written. Of + * each such byte only 7 bits will be used to describe the actual value since its most significant bit dictates + * whether the next byte is part of that same int. Micro-optimization for int values that are expected to have + * values below 128. + */ + public PacketBuffer writeVarInt(int input) + { + while ((input & -128) != 0) + { + this.writeByte(input & 127 | 128); + input >>>= 7; + } + + this.writeByte(input); + return this; + } + + public PacketBuffer writeVarLong(long value) + { + while ((value & -128L) != 0L) + { + this.writeByte((int)(value & 127L) | 128); + value >>>= 7; + } + + this.writeByte((int)value); + return this; + } + + /** + * Writes a compressed NBTTagCompound to this buffer + */ + public PacketBuffer writeCompoundTag(@Nullable NBTTagCompound nbt) + { + if (nbt == null) + { + this.writeByte(0); + } + else + { + try + { + CompressedStreamTools.write(nbt, new ByteBufOutputStream(this)); + } + catch (IOException ioexception) + { + throw new EncoderException(ioexception); + } + } + + return this; + } + + /** + * Reads a compressed NBTTagCompound from this buffer + */ + @Nullable + public NBTTagCompound readCompoundTag() throws IOException + { + int i = this.readerIndex(); + byte b0 = this.readByte(); + + if (b0 == 0) + { + return null; + } + else + { + this.readerIndex(i); + + try + { + return CompressedStreamTools.read(new ByteBufInputStream(this), new NBTSizeTracker(2097152L)); + } + catch (IOException ioexception) + { + throw new EncoderException(ioexception); + } + } + } + + /** + * Writes the ItemStack's ID (short), then size (byte), then damage. (short) + */ + public PacketBuffer writeItemStack(ItemStack stack) + { + if (stack.isEmpty()) + { + this.writeShort(-1); + } + else + { + this.writeShort(Item.getIdFromItem(stack.getItem())); + this.writeByte(stack.getCount()); + this.writeShort(stack.getMetadata()); + NBTTagCompound nbttagcompound = null; + + if (stack.getItem().isDamageable() || stack.getItem().getShareTag()) + { + nbttagcompound = stack.getItem().getNBTShareTag(stack); + } + + this.writeCompoundTag(nbttagcompound); + } + + return this; + } + + /** + * Reads an ItemStack from this buffer + */ + public ItemStack readItemStack() throws IOException + { + int i = this.readShort(); + + if (i < 0) + { + return ItemStack.EMPTY; + } + else + { + int j = this.readByte(); + int k = this.readShort(); + ItemStack itemstack = new ItemStack(Item.getItemById(i), j, k); + itemstack.getItem().readNBTShareTag(itemstack, this.readCompoundTag()); + return itemstack; + } + } + + /** + * Reads a string from this buffer. Expected parameter is maximum allowed string length. Will throw IOException if + * string length exceeds this value! + */ + public String readString(int maxLength) + { + int i = this.readVarInt(); + + if (i > maxLength * 4) + { + throw new DecoderException("The received encoded string buffer length is longer than maximum allowed (" + i + " > " + maxLength * 4 + ")"); + } + else if (i < 0) + { + throw new DecoderException("The received encoded string buffer length is less than zero! Weird string!"); + } + else + { + String s = this.toString(this.readerIndex(), i, StandardCharsets.UTF_8); + this.readerIndex(this.readerIndex() + i); + + if (s.length() > maxLength) + { + throw new DecoderException("The received string length is longer than maximum allowed (" + i + " > " + maxLength + ")"); + } + else + { + return s; + } + } + } + + public PacketBuffer writeString(String string) + { + byte[] abyte = string.getBytes(StandardCharsets.UTF_8); + + if (abyte.length > 32767) + { + throw new EncoderException("String too big (was " + abyte.length + " bytes encoded, max " + 32767 + ")"); + } + else + { + this.writeVarInt(abyte.length); + this.writeBytes(abyte); + return this; + } + } + + public ResourceLocation readResourceLocation() + { + return new ResourceLocation(this.readString(32767)); + } + + public PacketBuffer writeResourceLocation(ResourceLocation resourceLocationIn) + { + this.writeString(resourceLocationIn.toString()); + return this; + } + + public Date readTime() + { + return new Date(this.readLong()); + } + + public PacketBuffer writeTime(Date time) + { + this.writeLong(time.getTime()); + return this; + } + + public int capacity() + { + return this.buf.capacity(); + } + + public ByteBuf capacity(int p_capacity_1_) + { + return this.buf.capacity(p_capacity_1_); + } + + public int maxCapacity() + { + return this.buf.maxCapacity(); + } + + public ByteBufAllocator alloc() + { + return this.buf.alloc(); + } + + public ByteOrder order() + { + return this.buf.order(); + } + + public ByteBuf order(ByteOrder p_order_1_) + { + return this.buf.order(p_order_1_); + } + + public ByteBuf unwrap() + { + return this.buf.unwrap(); + } + + public boolean isDirect() + { + return this.buf.isDirect(); + } + + public boolean isReadOnly() + { + return this.buf.isReadOnly(); + } + + public ByteBuf asReadOnly() + { + return this.buf.asReadOnly(); + } + + public int readerIndex() + { + return this.buf.readerIndex(); + } + + public ByteBuf readerIndex(int p_readerIndex_1_) + { + return this.buf.readerIndex(p_readerIndex_1_); + } + + public int writerIndex() + { + return this.buf.writerIndex(); + } + + public ByteBuf writerIndex(int p_writerIndex_1_) + { + return this.buf.writerIndex(p_writerIndex_1_); + } + + public ByteBuf setIndex(int p_setIndex_1_, int p_setIndex_2_) + { + return this.buf.setIndex(p_setIndex_1_, p_setIndex_2_); + } + + public int readableBytes() + { + return this.buf.readableBytes(); + } + + public int writableBytes() + { + return this.buf.writableBytes(); + } + + public int maxWritableBytes() + { + return this.buf.maxWritableBytes(); + } + + public boolean isReadable() + { + return this.buf.isReadable(); + } + + public boolean isReadable(int p_isReadable_1_) + { + return this.buf.isReadable(p_isReadable_1_); + } + + public boolean isWritable() + { + return this.buf.isWritable(); + } + + public boolean isWritable(int p_isWritable_1_) + { + return this.buf.isWritable(p_isWritable_1_); + } + + public ByteBuf clear() + { + return this.buf.clear(); + } + + public ByteBuf markReaderIndex() + { + return this.buf.markReaderIndex(); + } + + public ByteBuf resetReaderIndex() + { + return this.buf.resetReaderIndex(); + } + + public ByteBuf markWriterIndex() + { + return this.buf.markWriterIndex(); + } + + public ByteBuf resetWriterIndex() + { + return this.buf.resetWriterIndex(); + } + + public ByteBuf discardReadBytes() + { + return this.buf.discardReadBytes(); + } + + public ByteBuf discardSomeReadBytes() + { + return this.buf.discardSomeReadBytes(); + } + + public ByteBuf ensureWritable(int p_ensureWritable_1_) + { + return this.buf.ensureWritable(p_ensureWritable_1_); + } + + public int ensureWritable(int p_ensureWritable_1_, boolean p_ensureWritable_2_) + { + return this.buf.ensureWritable(p_ensureWritable_1_, p_ensureWritable_2_); + } + + public boolean getBoolean(int p_getBoolean_1_) + { + return this.buf.getBoolean(p_getBoolean_1_); + } + + public byte getByte(int p_getByte_1_) + { + return this.buf.getByte(p_getByte_1_); + } + + public short getUnsignedByte(int p_getUnsignedByte_1_) + { + return this.buf.getUnsignedByte(p_getUnsignedByte_1_); + } + + public short getShort(int p_getShort_1_) + { + return this.buf.getShort(p_getShort_1_); + } + + public short getShortLE(int p_getShortLE_1_) + { + return this.buf.getShortLE(p_getShortLE_1_); + } + + public int getUnsignedShort(int p_getUnsignedShort_1_) + { + return this.buf.getUnsignedShort(p_getUnsignedShort_1_); + } + + public int getUnsignedShortLE(int p_getUnsignedShortLE_1_) + { + return this.buf.getUnsignedShortLE(p_getUnsignedShortLE_1_); + } + + public int getMedium(int p_getMedium_1_) + { + return this.buf.getMedium(p_getMedium_1_); + } + + public int getMediumLE(int p_getMediumLE_1_) + { + return this.buf.getMediumLE(p_getMediumLE_1_); + } + + public int getUnsignedMedium(int p_getUnsignedMedium_1_) + { + return this.buf.getUnsignedMedium(p_getUnsignedMedium_1_); + } + + public int getUnsignedMediumLE(int p_getUnsignedMediumLE_1_) + { + return this.buf.getUnsignedMediumLE(p_getUnsignedMediumLE_1_); + } + + public int getInt(int p_getInt_1_) + { + return this.buf.getInt(p_getInt_1_); + } + + public int getIntLE(int p_getIntLE_1_) + { + return this.buf.getIntLE(p_getIntLE_1_); + } + + public long getUnsignedInt(int p_getUnsignedInt_1_) + { + return this.buf.getUnsignedInt(p_getUnsignedInt_1_); + } + + public long getUnsignedIntLE(int p_getUnsignedIntLE_1_) + { + return this.buf.getUnsignedIntLE(p_getUnsignedIntLE_1_); + } + + public long getLong(int p_getLong_1_) + { + return this.buf.getLong(p_getLong_1_); + } + + public long getLongLE(int p_getLongLE_1_) + { + return this.buf.getLongLE(p_getLongLE_1_); + } + + public char getChar(int p_getChar_1_) + { + return this.buf.getChar(p_getChar_1_); + } + + public float getFloat(int p_getFloat_1_) + { + return this.buf.getFloat(p_getFloat_1_); + } + + public double getDouble(int p_getDouble_1_) + { + return this.buf.getDouble(p_getDouble_1_); + } + + public ByteBuf getBytes(int p_getBytes_1_, ByteBuf p_getBytes_2_) + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_); + } + + public ByteBuf getBytes(int p_getBytes_1_, ByteBuf p_getBytes_2_, int p_getBytes_3_) + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_, p_getBytes_3_); + } + + public ByteBuf getBytes(int p_getBytes_1_, ByteBuf p_getBytes_2_, int p_getBytes_3_, int p_getBytes_4_) + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_, p_getBytes_3_, p_getBytes_4_); + } + + public ByteBuf getBytes(int p_getBytes_1_, byte[] p_getBytes_2_) + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_); + } + + public ByteBuf getBytes(int p_getBytes_1_, byte[] p_getBytes_2_, int p_getBytes_3_, int p_getBytes_4_) + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_, p_getBytes_3_, p_getBytes_4_); + } + + public ByteBuf getBytes(int p_getBytes_1_, ByteBuffer p_getBytes_2_) + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_); + } + + public ByteBuf getBytes(int p_getBytes_1_, OutputStream p_getBytes_2_, int p_getBytes_3_) throws IOException + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_, p_getBytes_3_); + } + + public int getBytes(int p_getBytes_1_, GatheringByteChannel p_getBytes_2_, int p_getBytes_3_) throws IOException + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_, p_getBytes_3_); + } + + public int getBytes(int p_getBytes_1_, FileChannel p_getBytes_2_, long p_getBytes_3_, int p_getBytes_5_) throws IOException + { + return this.buf.getBytes(p_getBytes_1_, p_getBytes_2_, p_getBytes_3_, p_getBytes_5_); + } + + public CharSequence getCharSequence(int p_getCharSequence_1_, int p_getCharSequence_2_, Charset p_getCharSequence_3_) + { + return this.buf.getCharSequence(p_getCharSequence_1_, p_getCharSequence_2_, p_getCharSequence_3_); + } + + public ByteBuf setBoolean(int p_setBoolean_1_, boolean p_setBoolean_2_) + { + return this.buf.setBoolean(p_setBoolean_1_, p_setBoolean_2_); + } + + public ByteBuf setByte(int p_setByte_1_, int p_setByte_2_) + { + return this.buf.setByte(p_setByte_1_, p_setByte_2_); + } + + public ByteBuf setShort(int p_setShort_1_, int p_setShort_2_) + { + return this.buf.setShort(p_setShort_1_, p_setShort_2_); + } + + public ByteBuf setShortLE(int p_setShortLE_1_, int p_setShortLE_2_) + { + return this.buf.setShortLE(p_setShortLE_1_, p_setShortLE_2_); + } + + public ByteBuf setMedium(int p_setMedium_1_, int p_setMedium_2_) + { + return this.buf.setMedium(p_setMedium_1_, p_setMedium_2_); + } + + public ByteBuf setMediumLE(int p_setMediumLE_1_, int p_setMediumLE_2_) + { + return this.buf.setMediumLE(p_setMediumLE_1_, p_setMediumLE_2_); + } + + public ByteBuf setInt(int p_setInt_1_, int p_setInt_2_) + { + return this.buf.setInt(p_setInt_1_, p_setInt_2_); + } + + public ByteBuf setIntLE(int p_setIntLE_1_, int p_setIntLE_2_) + { + return this.buf.setIntLE(p_setIntLE_1_, p_setIntLE_2_); + } + + public ByteBuf setLong(int p_setLong_1_, long p_setLong_2_) + { + return this.buf.setLong(p_setLong_1_, p_setLong_2_); + } + + public ByteBuf setLongLE(int p_setLongLE_1_, long p_setLongLE_2_) + { + return this.buf.setLongLE(p_setLongLE_1_, p_setLongLE_2_); + } + + public ByteBuf setChar(int p_setChar_1_, int p_setChar_2_) + { + return this.buf.setChar(p_setChar_1_, p_setChar_2_); + } + + public ByteBuf setFloat(int p_setFloat_1_, float p_setFloat_2_) + { + return this.buf.setFloat(p_setFloat_1_, p_setFloat_2_); + } + + public ByteBuf setDouble(int p_setDouble_1_, double p_setDouble_2_) + { + return this.buf.setDouble(p_setDouble_1_, p_setDouble_2_); + } + + public ByteBuf setBytes(int p_setBytes_1_, ByteBuf p_setBytes_2_) + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_); + } + + public ByteBuf setBytes(int p_setBytes_1_, ByteBuf p_setBytes_2_, int p_setBytes_3_) + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_, p_setBytes_3_); + } + + public ByteBuf setBytes(int p_setBytes_1_, ByteBuf p_setBytes_2_, int p_setBytes_3_, int p_setBytes_4_) + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_, p_setBytes_3_, p_setBytes_4_); + } + + public ByteBuf setBytes(int p_setBytes_1_, byte[] p_setBytes_2_) + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_); + } + + public ByteBuf setBytes(int p_setBytes_1_, byte[] p_setBytes_2_, int p_setBytes_3_, int p_setBytes_4_) + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_, p_setBytes_3_, p_setBytes_4_); + } + + public ByteBuf setBytes(int p_setBytes_1_, ByteBuffer p_setBytes_2_) + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_); + } + + public int setBytes(int p_setBytes_1_, InputStream p_setBytes_2_, int p_setBytes_3_) throws IOException + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_, p_setBytes_3_); + } + + public int setBytes(int p_setBytes_1_, ScatteringByteChannel p_setBytes_2_, int p_setBytes_3_) throws IOException + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_, p_setBytes_3_); + } + + public int setBytes(int p_setBytes_1_, FileChannel p_setBytes_2_, long p_setBytes_3_, int p_setBytes_5_) throws IOException + { + return this.buf.setBytes(p_setBytes_1_, p_setBytes_2_, p_setBytes_3_, p_setBytes_5_); + } + + public ByteBuf setZero(int p_setZero_1_, int p_setZero_2_) + { + return this.buf.setZero(p_setZero_1_, p_setZero_2_); + } + + public int setCharSequence(int p_setCharSequence_1_, CharSequence p_setCharSequence_2_, Charset p_setCharSequence_3_) + { + return this.buf.setCharSequence(p_setCharSequence_1_, p_setCharSequence_2_, p_setCharSequence_3_); + } + + public boolean readBoolean() + { + return this.buf.readBoolean(); + } + + public byte readByte() + { + return this.buf.readByte(); + } + + public short readUnsignedByte() + { + return this.buf.readUnsignedByte(); + } + + public short readShort() + { + return this.buf.readShort(); + } + + public short readShortLE() + { + return this.buf.readShortLE(); + } + + public int readUnsignedShort() + { + return this.buf.readUnsignedShort(); + } + + public int readUnsignedShortLE() + { + return this.buf.readUnsignedShortLE(); + } + + public int readMedium() + { + return this.buf.readMedium(); + } + + public int readMediumLE() + { + return this.buf.readMediumLE(); + } + + public int readUnsignedMedium() + { + return this.buf.readUnsignedMedium(); + } + + public int readUnsignedMediumLE() + { + return this.buf.readUnsignedMediumLE(); + } + + public int readInt() + { + return this.buf.readInt(); + } + + public int readIntLE() + { + return this.buf.readIntLE(); + } + + public long readUnsignedInt() + { + return this.buf.readUnsignedInt(); + } + + public long readUnsignedIntLE() + { + return this.buf.readUnsignedIntLE(); + } + + public long readLong() + { + return this.buf.readLong(); + } + + public long readLongLE() + { + return this.buf.readLongLE(); + } + + public char readChar() + { + return this.buf.readChar(); + } + + public float readFloat() + { + return this.buf.readFloat(); + } + + public double readDouble() + { + return this.buf.readDouble(); + } + + public ByteBuf readBytes(int p_readBytes_1_) + { + return this.buf.readBytes(p_readBytes_1_); + } + + public ByteBuf readSlice(int p_readSlice_1_) + { + return this.buf.readSlice(p_readSlice_1_); + } + + public ByteBuf readRetainedSlice(int p_readRetainedSlice_1_) + { + return this.buf.readRetainedSlice(p_readRetainedSlice_1_); + } + + public ByteBuf readBytes(ByteBuf p_readBytes_1_) + { + return this.buf.readBytes(p_readBytes_1_); + } + + public ByteBuf readBytes(ByteBuf p_readBytes_1_, int p_readBytes_2_) + { + return this.buf.readBytes(p_readBytes_1_, p_readBytes_2_); + } + + public ByteBuf readBytes(ByteBuf p_readBytes_1_, int p_readBytes_2_, int p_readBytes_3_) + { + return this.buf.readBytes(p_readBytes_1_, p_readBytes_2_, p_readBytes_3_); + } + + public ByteBuf readBytes(byte[] p_readBytes_1_) + { + return this.buf.readBytes(p_readBytes_1_); + } + + public ByteBuf readBytes(byte[] p_readBytes_1_, int p_readBytes_2_, int p_readBytes_3_) + { + return this.buf.readBytes(p_readBytes_1_, p_readBytes_2_, p_readBytes_3_); + } + + public ByteBuf readBytes(ByteBuffer p_readBytes_1_) + { + return this.buf.readBytes(p_readBytes_1_); + } + + public ByteBuf readBytes(OutputStream p_readBytes_1_, int p_readBytes_2_) throws IOException + { + return this.buf.readBytes(p_readBytes_1_, p_readBytes_2_); + } + + public int readBytes(GatheringByteChannel p_readBytes_1_, int p_readBytes_2_) throws IOException + { + return this.buf.readBytes(p_readBytes_1_, p_readBytes_2_); + } + + public CharSequence readCharSequence(int p_readCharSequence_1_, Charset p_readCharSequence_2_) + { + return this.buf.readCharSequence(p_readCharSequence_1_, p_readCharSequence_2_); + } + + public int readBytes(FileChannel p_readBytes_1_, long p_readBytes_2_, int p_readBytes_4_) throws IOException + { + return this.buf.readBytes(p_readBytes_1_, p_readBytes_2_, p_readBytes_4_); + } + + public ByteBuf skipBytes(int p_skipBytes_1_) + { + return this.buf.skipBytes(p_skipBytes_1_); + } + + public ByteBuf writeBoolean(boolean p_writeBoolean_1_) + { + return this.buf.writeBoolean(p_writeBoolean_1_); + } + + public ByteBuf writeByte(int p_writeByte_1_) + { + return this.buf.writeByte(p_writeByte_1_); + } + + public ByteBuf writeShort(int p_writeShort_1_) + { + return this.buf.writeShort(p_writeShort_1_); + } + + public ByteBuf writeShortLE(int p_writeShortLE_1_) + { + return this.buf.writeShortLE(p_writeShortLE_1_); + } + + public ByteBuf writeMedium(int p_writeMedium_1_) + { + return this.buf.writeMedium(p_writeMedium_1_); + } + + public ByteBuf writeMediumLE(int p_writeMediumLE_1_) + { + return this.buf.writeMediumLE(p_writeMediumLE_1_); + } + + public ByteBuf writeInt(int p_writeInt_1_) + { + return this.buf.writeInt(p_writeInt_1_); + } + + public ByteBuf writeIntLE(int p_writeIntLE_1_) + { + return this.buf.writeIntLE(p_writeIntLE_1_); + } + + public ByteBuf writeLong(long p_writeLong_1_) + { + return this.buf.writeLong(p_writeLong_1_); + } + + public ByteBuf writeLongLE(long p_writeLongLE_1_) + { + return this.buf.writeLongLE(p_writeLongLE_1_); + } + + public ByteBuf writeChar(int p_writeChar_1_) + { + return this.buf.writeChar(p_writeChar_1_); + } + + public ByteBuf writeFloat(float p_writeFloat_1_) + { + return this.buf.writeFloat(p_writeFloat_1_); + } + + public ByteBuf writeDouble(double p_writeDouble_1_) + { + return this.buf.writeDouble(p_writeDouble_1_); + } + + public ByteBuf writeBytes(ByteBuf p_writeBytes_1_) + { + return this.buf.writeBytes(p_writeBytes_1_); + } + + public ByteBuf writeBytes(ByteBuf p_writeBytes_1_, int p_writeBytes_2_) + { + return this.buf.writeBytes(p_writeBytes_1_, p_writeBytes_2_); + } + + public ByteBuf writeBytes(ByteBuf p_writeBytes_1_, int p_writeBytes_2_, int p_writeBytes_3_) + { + return this.buf.writeBytes(p_writeBytes_1_, p_writeBytes_2_, p_writeBytes_3_); + } + + public ByteBuf writeBytes(byte[] p_writeBytes_1_) + { + return this.buf.writeBytes(p_writeBytes_1_); + } + + public ByteBuf writeBytes(byte[] p_writeBytes_1_, int p_writeBytes_2_, int p_writeBytes_3_) + { + return this.buf.writeBytes(p_writeBytes_1_, p_writeBytes_2_, p_writeBytes_3_); + } + + public ByteBuf writeBytes(ByteBuffer p_writeBytes_1_) + { + return this.buf.writeBytes(p_writeBytes_1_); + } + + public int writeBytes(InputStream p_writeBytes_1_, int p_writeBytes_2_) throws IOException + { + return this.buf.writeBytes(p_writeBytes_1_, p_writeBytes_2_); + } + + public int writeBytes(ScatteringByteChannel p_writeBytes_1_, int p_writeBytes_2_) throws IOException + { + return this.buf.writeBytes(p_writeBytes_1_, p_writeBytes_2_); + } + + public int writeBytes(FileChannel p_writeBytes_1_, long p_writeBytes_2_, int p_writeBytes_4_) throws IOException + { + return this.buf.writeBytes(p_writeBytes_1_, p_writeBytes_2_, p_writeBytes_4_); + } + + public ByteBuf writeZero(int p_writeZero_1_) + { + return this.buf.writeZero(p_writeZero_1_); + } + + public int writeCharSequence(CharSequence p_writeCharSequence_1_, Charset p_writeCharSequence_2_) + { + return this.buf.writeCharSequence(p_writeCharSequence_1_, p_writeCharSequence_2_); + } + + public int indexOf(int p_indexOf_1_, int p_indexOf_2_, byte p_indexOf_3_) + { + return this.buf.indexOf(p_indexOf_1_, p_indexOf_2_, p_indexOf_3_); + } + + public int bytesBefore(byte p_bytesBefore_1_) + { + return this.buf.bytesBefore(p_bytesBefore_1_); + } + + public int bytesBefore(int p_bytesBefore_1_, byte p_bytesBefore_2_) + { + return this.buf.bytesBefore(p_bytesBefore_1_, p_bytesBefore_2_); + } + + public int bytesBefore(int p_bytesBefore_1_, int p_bytesBefore_2_, byte p_bytesBefore_3_) + { + return this.buf.bytesBefore(p_bytesBefore_1_, p_bytesBefore_2_, p_bytesBefore_3_); + } + + public int forEachByte(ByteProcessor p_forEachByte_1_) + { + return this.buf.forEachByte(p_forEachByte_1_); + } + + public int forEachByte(int p_forEachByte_1_, int p_forEachByte_2_, ByteProcessor p_forEachByte_3_) + { + return this.buf.forEachByte(p_forEachByte_1_, p_forEachByte_2_, p_forEachByte_3_); + } + + public int forEachByteDesc(ByteProcessor p_forEachByteDesc_1_) + { + return this.buf.forEachByteDesc(p_forEachByteDesc_1_); + } + + public int forEachByteDesc(int p_forEachByteDesc_1_, int p_forEachByteDesc_2_, ByteProcessor p_forEachByteDesc_3_) + { + return this.buf.forEachByteDesc(p_forEachByteDesc_1_, p_forEachByteDesc_2_, p_forEachByteDesc_3_); + } + + public ByteBuf copy() + { + return this.buf.copy(); + } + + public ByteBuf copy(int p_copy_1_, int p_copy_2_) + { + return this.buf.copy(p_copy_1_, p_copy_2_); + } + + public ByteBuf slice() + { + return this.buf.slice(); + } + + public ByteBuf retainedSlice() + { + return this.buf.retainedSlice(); + } + + public ByteBuf slice(int p_slice_1_, int p_slice_2_) + { + return this.buf.slice(p_slice_1_, p_slice_2_); + } + + public ByteBuf retainedSlice(int p_retainedSlice_1_, int p_retainedSlice_2_) + { + return this.buf.retainedSlice(p_retainedSlice_1_, p_retainedSlice_2_); + } + + public ByteBuf duplicate() + { + return this.buf.duplicate(); + } + + public ByteBuf retainedDuplicate() + { + return this.buf.retainedDuplicate(); + } + + public int nioBufferCount() + { + return this.buf.nioBufferCount(); + } + + public ByteBuffer nioBuffer() + { + return this.buf.nioBuffer(); + } + + public ByteBuffer nioBuffer(int p_nioBuffer_1_, int p_nioBuffer_2_) + { + return this.buf.nioBuffer(p_nioBuffer_1_, p_nioBuffer_2_); + } + + public ByteBuffer internalNioBuffer(int p_internalNioBuffer_1_, int p_internalNioBuffer_2_) + { + return this.buf.internalNioBuffer(p_internalNioBuffer_1_, p_internalNioBuffer_2_); + } + + public ByteBuffer[] nioBuffers() + { + return this.buf.nioBuffers(); + } + + public ByteBuffer[] nioBuffers(int p_nioBuffers_1_, int p_nioBuffers_2_) + { + return this.buf.nioBuffers(p_nioBuffers_1_, p_nioBuffers_2_); + } + + public boolean hasArray() + { + return this.buf.hasArray(); + } + + public byte[] array() + { + return this.buf.array(); + } + + public int arrayOffset() + { + return this.buf.arrayOffset(); + } + + public boolean hasMemoryAddress() + { + return this.buf.hasMemoryAddress(); + } + + public long memoryAddress() + { + return this.buf.memoryAddress(); + } + + public String toString(Charset p_toString_1_) + { + return this.buf.toString(p_toString_1_); + } + + public String toString(int p_toString_1_, int p_toString_2_, Charset p_toString_3_) + { + return this.buf.toString(p_toString_1_, p_toString_2_, p_toString_3_); + } + + public int hashCode() + { + return this.buf.hashCode(); + } + + public boolean equals(Object p_equals_1_) + { + return this.buf.equals(p_equals_1_); + } + + public int compareTo(ByteBuf p_compareTo_1_) + { + return this.buf.compareTo(p_compareTo_1_); + } + + public String toString() + { + return this.buf.toString(); + } + + public ByteBuf retain(int p_retain_1_) + { + return this.buf.retain(p_retain_1_); + } + + public ByteBuf retain() + { + return this.buf.retain(); + } + + public ByteBuf touch() + { + return this.buf.touch(); + } + + public ByteBuf touch(Object p_touch_1_) + { + return this.buf.touch(p_touch_1_); + } + + public int refCnt() + { + return this.buf.refCnt(); + } + + public boolean release() + { + return this.buf.release(); + } + + public boolean release(int p_release_1_) + { + return this.buf.release(p_release_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/PacketThreadUtil.java b/build/tmp/recompileMc/sources/net/minecraft/network/PacketThreadUtil.java new file mode 100644 index 0000000..416c27f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/PacketThreadUtil.java @@ -0,0 +1,27 @@ +package net.minecraft.network; + +import net.minecraft.util.IThreadListener; + +public class PacketThreadUtil +{ + /** + * Handles pumping inbound packets across threads by checking whether the current thread is actually the main thread + * for the side in question. If not, then the packet is pumped into the handler queue in the main thread so that it + * can be handled synchronously by the recipient, it then throws an exception to terminate the current packet + * handler thread. + */ + public static void checkThreadAndEnqueue(final Packet packetIn, final T processor, IThreadListener scheduler) throws ThreadQuickExitException + { + if (!scheduler.isCallingFromMinecraftThread()) + { + scheduler.addScheduledTask(new Runnable() + { + public void run() + { + packetIn.processPacket(processor); + } + }); + throw ThreadQuickExitException.INSTANCE; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/ServerStatusResponse.java b/build/tmp/recompileMc/sources/net/minecraft/network/ServerStatusResponse.java new file mode 100644 index 0000000..a08c8d8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/ServerStatusResponse.java @@ -0,0 +1,293 @@ +package net.minecraft.network; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.mojang.authlib.GameProfile; +import java.lang.reflect.Type; +import java.util.UUID; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.text.ITextComponent; + +public class ServerStatusResponse +{ + private ITextComponent description; + private ServerStatusResponse.Players players; + private ServerStatusResponse.Version version; + private String favicon; + + public ITextComponent getServerDescription() + { + return this.description; + } + + public void setServerDescription(ITextComponent descriptionIn) + { + this.description = descriptionIn; + invalidateJson(); + } + + public ServerStatusResponse.Players getPlayers() + { + return this.players; + } + + public void setPlayers(ServerStatusResponse.Players playersIn) + { + this.players = playersIn; + invalidateJson(); + } + + public ServerStatusResponse.Version getVersion() + { + return this.version; + } + + public void setVersion(ServerStatusResponse.Version versionIn) + { + this.version = versionIn; + invalidateJson(); + } + + public void setFavicon(String faviconBlob) + { + this.favicon = faviconBlob; + invalidateJson(); + } + + public String getFavicon() + { + return this.favicon; + } + + public static class Players + { + private final int maxPlayers; + private final int onlinePlayerCount; + private GameProfile[] players; + + public Players(int maxOnlinePlayers, int onlinePlayers) + { + this.maxPlayers = maxOnlinePlayers; + this.onlinePlayerCount = onlinePlayers; + } + + public int getMaxPlayers() + { + return this.maxPlayers; + } + + public int getOnlinePlayerCount() + { + return this.onlinePlayerCount; + } + + public GameProfile[] getPlayers() + { + return this.players; + } + + public void setPlayers(GameProfile[] playersIn) + { + this.players = playersIn; + } + + public static class Serializer implements JsonDeserializer, JsonSerializer + { + public ServerStatusResponse.Players deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "players"); + ServerStatusResponse.Players serverstatusresponse$players = new ServerStatusResponse.Players(JsonUtils.getInt(jsonobject, "max"), JsonUtils.getInt(jsonobject, "online")); + + if (JsonUtils.isJsonArray(jsonobject, "sample")) + { + JsonArray jsonarray = JsonUtils.getJsonArray(jsonobject, "sample"); + + if (jsonarray.size() > 0) + { + GameProfile[] agameprofile = new GameProfile[jsonarray.size()]; + + for (int i = 0; i < agameprofile.length; ++i) + { + JsonObject jsonobject1 = JsonUtils.getJsonObject(jsonarray.get(i), "player[" + i + "]"); + String s = JsonUtils.getString(jsonobject1, "id"); + agameprofile[i] = new GameProfile(UUID.fromString(s), JsonUtils.getString(jsonobject1, "name")); + } + + serverstatusresponse$players.setPlayers(agameprofile); + } + } + + return serverstatusresponse$players; + } + + public JsonElement serialize(ServerStatusResponse.Players p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + jsonobject.addProperty("max", Integer.valueOf(p_serialize_1_.getMaxPlayers())); + jsonobject.addProperty("online", Integer.valueOf(p_serialize_1_.getOnlinePlayerCount())); + + if (p_serialize_1_.getPlayers() != null && p_serialize_1_.getPlayers().length > 0) + { + JsonArray jsonarray = new JsonArray(); + + for (int i = 0; i < p_serialize_1_.getPlayers().length; ++i) + { + JsonObject jsonobject1 = new JsonObject(); + UUID uuid = p_serialize_1_.getPlayers()[i].getId(); + jsonobject1.addProperty("id", uuid == null ? "" : uuid.toString()); + jsonobject1.addProperty("name", p_serialize_1_.getPlayers()[i].getName()); + jsonarray.add(jsonobject1); + } + + jsonobject.add("sample", jsonarray); + } + + return jsonobject; + } + } + } + + public static class Serializer implements JsonDeserializer, JsonSerializer + { + public ServerStatusResponse deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "status"); + ServerStatusResponse serverstatusresponse = new ServerStatusResponse(); + + if (jsonobject.has("description")) + { + serverstatusresponse.setServerDescription((ITextComponent)p_deserialize_3_.deserialize(jsonobject.get("description"), ITextComponent.class)); + } + + if (jsonobject.has("players")) + { + serverstatusresponse.setPlayers((ServerStatusResponse.Players)p_deserialize_3_.deserialize(jsonobject.get("players"), ServerStatusResponse.Players.class)); + } + + if (jsonobject.has("version")) + { + serverstatusresponse.setVersion((ServerStatusResponse.Version)p_deserialize_3_.deserialize(jsonobject.get("version"), ServerStatusResponse.Version.class)); + } + + if (jsonobject.has("favicon")) + { + serverstatusresponse.setFavicon(JsonUtils.getString(jsonobject, "favicon")); + } + + net.minecraftforge.fml.client.FMLClientHandler.instance().captureAdditionalData(serverstatusresponse, jsonobject); + return serverstatusresponse; + } + + public JsonElement serialize(ServerStatusResponse p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + + if (p_serialize_1_.getServerDescription() != null) + { + jsonobject.add("description", p_serialize_3_.serialize(p_serialize_1_.getServerDescription())); + } + + if (p_serialize_1_.getPlayers() != null) + { + jsonobject.add("players", p_serialize_3_.serialize(p_serialize_1_.getPlayers())); + } + + if (p_serialize_1_.getVersion() != null) + { + jsonobject.add("version", p_serialize_3_.serialize(p_serialize_1_.getVersion())); + } + + if (p_serialize_1_.getFavicon() != null) + { + jsonobject.addProperty("favicon", p_serialize_1_.getFavicon()); + } + + net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.enhanceStatusQuery(jsonobject); + return jsonobject; + } + } + + private java.util.concurrent.Semaphore mutex = new java.util.concurrent.Semaphore(1); + private String json = null; + /** + * Returns this object as a Json string. + * Converting to JSON if a cached version is not available. + * + * Also to prevent potentially large memory allocations on the server + * this is moved from the S00PacketServerInfo writePacket function + * + * As this method is called from the network threads thread safety is important! + * + * @return + */ + public String getJson() + { + String ret = this.json; + if (ret == null) + { + mutex.acquireUninterruptibly(); + ret = this.json; + if (ret == null) + { + ret = net.minecraft.network.status.server.SPacketServerInfo.GSON.toJson(this); + this.json = ret; + } + mutex.release(); + } + return ret; + } + + /** + * Invalidates the cached json, causing the next call to getJson to rebuild it. + * This is needed externally because PlayerCountData.setPlayer's is public. + */ + public void invalidateJson() + { + this.json = null; + } + + public static class Version + { + private final String name; + private final int protocol; + + public Version(String nameIn, int protocolIn) + { + this.name = nameIn; + this.protocol = protocolIn; + } + + public String getName() + { + return this.name; + } + + public int getProtocol() + { + return this.protocol; + } + + public static class Serializer implements JsonDeserializer, JsonSerializer + { + public ServerStatusResponse.Version deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + JsonObject jsonobject = JsonUtils.getJsonObject(p_deserialize_1_, "version"); + return new ServerStatusResponse.Version(JsonUtils.getString(jsonobject, "name"), JsonUtils.getInt(jsonobject, "protocol")); + } + + public JsonElement serialize(ServerStatusResponse.Version p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + jsonobject.addProperty("name", p_serialize_1_.getName()); + jsonobject.addProperty("protocol", Integer.valueOf(p_serialize_1_.getProtocol())); + return jsonobject; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/ThreadQuickExitException.java b/build/tmp/recompileMc/sources/net/minecraft/network/ThreadQuickExitException.java new file mode 100644 index 0000000..094eae1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/ThreadQuickExitException.java @@ -0,0 +1,17 @@ +package net.minecraft.network; + +public final class ThreadQuickExitException extends RuntimeException +{ + public static final ThreadQuickExitException INSTANCE = new ThreadQuickExitException(); + + private ThreadQuickExitException() + { + this.setStackTrace(new StackTraceElement[0]); + } + + public synchronized Throwable fillInStackTrace() + { + this.setStackTrace(new StackTraceElement[0]); + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataParameter.java b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataParameter.java new file mode 100644 index 0000000..b4b0893 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataParameter.java @@ -0,0 +1,45 @@ +package net.minecraft.network.datasync; + +public class DataParameter +{ + private final int id; + private final DataSerializer serializer; + + public DataParameter(int idIn, DataSerializer serializerIn) + { + this.id = idIn; + this.serializer = serializerIn; + } + + public int getId() + { + return this.id; + } + + public DataSerializer getSerializer() + { + return this.serializer; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + DataParameter dataparameter = (DataParameter)p_equals_1_; + return this.id == dataparameter.id; + } + else + { + return false; + } + } + + public int hashCode() + { + return this.id; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataSerializer.java b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataSerializer.java new file mode 100644 index 0000000..c94b8b7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataSerializer.java @@ -0,0 +1,15 @@ +package net.minecraft.network.datasync; + +import java.io.IOException; +import net.minecraft.network.PacketBuffer; + +public interface DataSerializer +{ + void write(PacketBuffer buf, T value); + + T read(PacketBuffer buf) throws IOException; + + DataParameter createKey(int id); + + T copyValue(T value); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataSerializers.java b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataSerializers.java new file mode 100644 index 0000000..8f9a27f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/DataSerializers.java @@ -0,0 +1,341 @@ +package net.minecraft.network.datasync; + +import com.google.common.base.Optional; +import java.io.IOException; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IntIdentityHashBiMap; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Rotations; +import net.minecraft.util.text.ITextComponent; + +public class DataSerializers +{ + private static final IntIdentityHashBiMap < DataSerializer> REGISTRY = new IntIdentityHashBiMap < DataSerializer> (16); + public static final DataSerializer BYTE = new DataSerializer() + { + public void write(PacketBuffer buf, Byte value) + { + buf.writeByte(value.byteValue()); + } + public Byte read(PacketBuffer buf) throws IOException + { + return buf.readByte(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public Byte copyValue(Byte value) + { + return value; + } + }; + public static final DataSerializer VARINT = new DataSerializer() + { + public void write(PacketBuffer buf, Integer value) + { + buf.writeVarInt(value.intValue()); + } + public Integer read(PacketBuffer buf) throws IOException + { + return buf.readVarInt(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public Integer copyValue(Integer value) + { + return value; + } + }; + public static final DataSerializer FLOAT = new DataSerializer() + { + public void write(PacketBuffer buf, Float value) + { + buf.writeFloat(value.floatValue()); + } + public Float read(PacketBuffer buf) throws IOException + { + return buf.readFloat(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public Float copyValue(Float value) + { + return value; + } + }; + public static final DataSerializer STRING = new DataSerializer() + { + public void write(PacketBuffer buf, String value) + { + buf.writeString(value); + } + public String read(PacketBuffer buf) throws IOException + { + return buf.readString(32767); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public String copyValue(String value) + { + return value; + } + }; + public static final DataSerializer TEXT_COMPONENT = new DataSerializer() + { + public void write(PacketBuffer buf, ITextComponent value) + { + buf.writeTextComponent(value); + } + public ITextComponent read(PacketBuffer buf) throws IOException + { + return buf.readTextComponent(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public ITextComponent copyValue(ITextComponent value) + { + return value.createCopy(); + } + }; + public static final DataSerializer ITEM_STACK = new DataSerializer() + { + public void write(PacketBuffer buf, ItemStack value) + { + buf.writeItemStack(value); + } + public ItemStack read(PacketBuffer buf) throws IOException + { + return buf.readItemStack(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public ItemStack copyValue(ItemStack value) + { + return value.copy(); + } + }; + public static final DataSerializer> OPTIONAL_BLOCK_STATE = new DataSerializer>() + { + public void write(PacketBuffer buf, Optional value) + { + if (value.isPresent()) + { + buf.writeVarInt(Block.getStateId(value.get())); + } + else + { + buf.writeVarInt(0); + } + } + public Optional read(PacketBuffer buf) throws IOException + { + int i = buf.readVarInt(); + return i == 0 ? Optional.absent() : Optional.of(Block.getStateById(i)); + } + public DataParameter> createKey(int id) + { + return new DataParameter>(id, this); + } + public Optional copyValue(Optional value) + { + return value; + } + }; + public static final DataSerializer BOOLEAN = new DataSerializer() + { + public void write(PacketBuffer buf, Boolean value) + { + buf.writeBoolean(value.booleanValue()); + } + public Boolean read(PacketBuffer buf) throws IOException + { + return buf.readBoolean(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public Boolean copyValue(Boolean value) + { + return value; + } + }; + public static final DataSerializer ROTATIONS = new DataSerializer() + { + public void write(PacketBuffer buf, Rotations value) + { + buf.writeFloat(value.getX()); + buf.writeFloat(value.getY()); + buf.writeFloat(value.getZ()); + } + public Rotations read(PacketBuffer buf) throws IOException + { + return new Rotations(buf.readFloat(), buf.readFloat(), buf.readFloat()); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public Rotations copyValue(Rotations value) + { + return value; + } + }; + public static final DataSerializer BLOCK_POS = new DataSerializer() + { + public void write(PacketBuffer buf, BlockPos value) + { + buf.writeBlockPos(value); + } + public BlockPos read(PacketBuffer buf) throws IOException + { + return buf.readBlockPos(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public BlockPos copyValue(BlockPos value) + { + return value; + } + }; + public static final DataSerializer> OPTIONAL_BLOCK_POS = new DataSerializer>() + { + public void write(PacketBuffer buf, Optional value) + { + buf.writeBoolean(value.isPresent()); + + if (value.isPresent()) + { + buf.writeBlockPos(value.get()); + } + } + public Optional read(PacketBuffer buf) throws IOException + { + return !buf.readBoolean() ? Optional.absent() : Optional.of(buf.readBlockPos()); + } + public DataParameter> createKey(int id) + { + return new DataParameter>(id, this); + } + public Optional copyValue(Optional value) + { + return value; + } + }; + public static final DataSerializer FACING = new DataSerializer() + { + public void write(PacketBuffer buf, EnumFacing value) + { + buf.writeEnumValue(value); + } + public EnumFacing read(PacketBuffer buf) throws IOException + { + return (EnumFacing)buf.readEnumValue(EnumFacing.class); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public EnumFacing copyValue(EnumFacing value) + { + return value; + } + }; + public static final DataSerializer> OPTIONAL_UNIQUE_ID = new DataSerializer>() + { + public void write(PacketBuffer buf, Optional value) + { + buf.writeBoolean(value.isPresent()); + + if (value.isPresent()) + { + buf.writeUniqueId(value.get()); + } + } + public Optional read(PacketBuffer buf) throws IOException + { + return !buf.readBoolean() ? Optional.absent() : Optional.of(buf.readUniqueId()); + } + public DataParameter> createKey(int id) + { + return new DataParameter>(id, this); + } + public Optional copyValue(Optional value) + { + return value; + } + }; + public static final DataSerializer COMPOUND_TAG = new DataSerializer() + { + public void write(PacketBuffer buf, NBTTagCompound value) + { + buf.writeCompoundTag(value); + } + public NBTTagCompound read(PacketBuffer buf) throws IOException + { + return buf.readCompoundTag(); + } + public DataParameter createKey(int id) + { + return new DataParameter(id, this); + } + public NBTTagCompound copyValue(NBTTagCompound value) + { + return value.copy(); + } + }; + + public static void registerSerializer(DataSerializer serializer) + { + REGISTRY.add(serializer); + } + + @Nullable + public static DataSerializer getSerializer(int id) + { + return (DataSerializer)REGISTRY.get(id); + } + + public static int getSerializerId(DataSerializer serializer) + { + return REGISTRY.getId(serializer); + } + + static + { + registerSerializer(BYTE); + registerSerializer(VARINT); + registerSerializer(FLOAT); + registerSerializer(STRING); + registerSerializer(TEXT_COMPONENT); + registerSerializer(ITEM_STACK); + registerSerializer(BOOLEAN); + registerSerializer(ROTATIONS); + registerSerializer(BLOCK_POS); + registerSerializer(OPTIONAL_BLOCK_POS); + registerSerializer(FACING); + registerSerializer(OPTIONAL_UNIQUE_ID); + registerSerializer(OPTIONAL_BLOCK_STATE); + registerSerializer(COMPOUND_TAG); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/datasync/EntityDataManager.java b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/EntityDataManager.java new file mode 100644 index 0000000..b8431a9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/EntityDataManager.java @@ -0,0 +1,387 @@ +package net.minecraft.network.datasync; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import io.netty.handler.codec.DecoderException; +import io.netty.handler.codec.EncoderException; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import javax.annotation.Nullable; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.entity.Entity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ReportedException; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityDataManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Map < Class , Integer > NEXT_ID_MAP = Maps. < Class , Integer > newHashMap(); + /** The entity that this data manager is for. */ + private final Entity entity; + private final Map < Integer, EntityDataManager.DataEntry> entries = Maps. < Integer, EntityDataManager.DataEntry> newHashMap(); + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + private boolean empty = true; + private boolean dirty; + + public EntityDataManager(Entity entityIn) + { + this.entity = entityIn; + } + + public static DataParameter createKey(Class clazz, DataSerializer serializer) + { + if (LOGGER.isDebugEnabled()) + { + try + { + Class oclass = Class.forName(Thread.currentThread().getStackTrace()[2].getClassName()); + + if (!oclass.equals(clazz)) + { + LOGGER.debug("defineId called for: {} from {}", clazz, oclass, new RuntimeException()); + } + } + catch (ClassNotFoundException var5) + { + ; + } + } + + int j; + + if (NEXT_ID_MAP.containsKey(clazz)) + { + j = ((Integer)NEXT_ID_MAP.get(clazz)).intValue() + 1; + } + else + { + int i = 0; + Class oclass1 = clazz; + + while (oclass1 != Entity.class) + { + oclass1 = oclass1.getSuperclass(); + + if (NEXT_ID_MAP.containsKey(oclass1)) + { + i = ((Integer)NEXT_ID_MAP.get(oclass1)).intValue() + 1; + break; + } + } + + j = i; + } + + if (j > 254) + { + throw new IllegalArgumentException("Data value id is too big with " + j + "! (Max is " + 254 + ")"); + } + else + { + NEXT_ID_MAP.put(clazz, Integer.valueOf(j)); + return serializer.createKey(j); + } + } + + public void register(DataParameter key, T value) + { + int i = key.getId(); + + if (i > 254) + { + throw new IllegalArgumentException("Data value id is too big with " + i + "! (Max is " + 254 + ")"); + } + else if (this.entries.containsKey(Integer.valueOf(i))) + { + throw new IllegalArgumentException("Duplicate id value for " + i + "!"); + } + else if (DataSerializers.getSerializerId(key.getSerializer()) < 0) + { + throw new IllegalArgumentException("Unregistered serializer " + key.getSerializer() + " for " + i + "!"); + } + else + { + this.setEntry(key, value); + } + } + + private void setEntry(DataParameter key, T value) + { + EntityDataManager.DataEntry dataentry = new EntityDataManager.DataEntry(key, value); + this.lock.writeLock().lock(); + this.entries.put(Integer.valueOf(key.getId()), dataentry); + this.empty = false; + this.lock.writeLock().unlock(); + } + + private EntityDataManager.DataEntry getEntry(DataParameter key) + { + this.lock.readLock().lock(); + EntityDataManager.DataEntry dataentry; + + try + { + dataentry = (EntityDataManager.DataEntry)this.entries.get(Integer.valueOf(key.getId())); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Getting synched entity data"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Synched entity data"); + crashreportcategory.addCrashSection("Data ID", key); + throw new ReportedException(crashreport); + } + + this.lock.readLock().unlock(); + return dataentry; + } + + public T get(DataParameter key) + { + return (T)this.getEntry(key).getValue(); + } + + public void set(DataParameter key, T value) + { + EntityDataManager.DataEntry dataentry = this.getEntry(key); + + if (ObjectUtils.notEqual(value, dataentry.getValue())) + { + dataentry.setValue(value); + this.entity.notifyDataManagerChange(key); + dataentry.setDirty(true); + this.dirty = true; + } + } + + public void setDirty(DataParameter key) + { + this.getEntry(key).dirty = true; + this.dirty = true; + } + + public boolean isDirty() + { + return this.dirty; + } + + public static void writeEntries(List < EntityDataManager.DataEntry> entriesIn, PacketBuffer buf) throws IOException + { + if (entriesIn != null) + { + int i = 0; + + for (int j = entriesIn.size(); i < j; ++i) + { + EntityDataManager.DataEntry dataentry = (EntityDataManager.DataEntry)entriesIn.get(i); + writeEntry(buf, dataentry); + } + } + + buf.writeByte(255); + } + + @Nullable + public List < EntityDataManager.DataEntry> getDirty() + { + List < EntityDataManager.DataEntry> list = null; + + if (this.dirty) + { + this.lock.readLock().lock(); + + for (EntityDataManager.DataEntry dataentry : this.entries.values()) + { + if (dataentry.isDirty()) + { + dataentry.setDirty(false); + + if (list == null) + { + list = Lists. < EntityDataManager.DataEntry> newArrayList(); + } + + list.add(dataentry.copy()); + } + } + + this.lock.readLock().unlock(); + } + + this.dirty = false; + return list; + } + + public void writeEntries(PacketBuffer buf) throws IOException + { + this.lock.readLock().lock(); + + for (EntityDataManager.DataEntry dataentry : this.entries.values()) + { + writeEntry(buf, dataentry); + } + + this.lock.readLock().unlock(); + buf.writeByte(255); + } + + @Nullable + public List < EntityDataManager.DataEntry> getAll() + { + List < EntityDataManager.DataEntry> list = null; + this.lock.readLock().lock(); + + for (EntityDataManager.DataEntry dataentry : this.entries.values()) + { + if (list == null) + { + list = Lists. < EntityDataManager.DataEntry> newArrayList(); + } + + list.add(dataentry.copy()); + } + + this.lock.readLock().unlock(); + return list; + } + + private static void writeEntry(PacketBuffer buf, EntityDataManager.DataEntry entry) throws IOException + { + DataParameter dataparameter = entry.getKey(); + int i = DataSerializers.getSerializerId(dataparameter.getSerializer()); + + if (i < 0) + { + throw new EncoderException("Unknown serializer type " + dataparameter.getSerializer()); + } + else + { + buf.writeByte(dataparameter.getId()); + buf.writeVarInt(i); + dataparameter.getSerializer().write(buf, entry.getValue()); + } + } + + @Nullable + public static List < EntityDataManager.DataEntry> readEntries(PacketBuffer buf) throws IOException + { + List < EntityDataManager.DataEntry> list = null; + int i; + + while ((i = buf.readUnsignedByte()) != 255) + { + if (list == null) + { + list = Lists. < EntityDataManager.DataEntry> newArrayList(); + } + + int j = buf.readVarInt(); + DataSerializer dataserializer = DataSerializers.getSerializer(j); + + if (dataserializer == null) + { + throw new DecoderException("Unknown serializer type " + j); + } + + list.add(new EntityDataManager.DataEntry(dataserializer.createKey(i), dataserializer.read(buf))); + } + + return list; + } + + @SideOnly(Side.CLIENT) + public void setEntryValues(List < EntityDataManager.DataEntry> entriesIn) + { + this.lock.writeLock().lock(); + + for (EntityDataManager.DataEntry dataentry : entriesIn) + { + EntityDataManager.DataEntry dataentry1 = (EntityDataManager.DataEntry)this.entries.get(Integer.valueOf(dataentry.getKey().getId())); + + if (dataentry1 != null) + { + this.setEntryValue(dataentry1, dataentry); + this.entity.notifyDataManagerChange(dataentry.getKey()); + } + } + + this.lock.writeLock().unlock(); + this.dirty = true; + } + + @SideOnly(Side.CLIENT) + protected void setEntryValue(EntityDataManager.DataEntry target, EntityDataManager.DataEntry source) + { + target.setValue((T)source.getValue()); + } + + public boolean isEmpty() + { + return this.empty; + } + + public void setClean() + { + this.dirty = false; + this.lock.readLock().lock(); + + for (EntityDataManager.DataEntry dataentry : this.entries.values()) + { + dataentry.setDirty(false); + } + + this.lock.readLock().unlock(); + } + + public static class DataEntry + { + private final DataParameter key; + private T value; + private boolean dirty; + + public DataEntry(DataParameter keyIn, T valueIn) + { + this.key = keyIn; + this.value = valueIn; + this.dirty = true; + } + + public DataParameter getKey() + { + return this.key; + } + + public void setValue(T valueIn) + { + this.value = valueIn; + } + + public T getValue() + { + return this.value; + } + + public boolean isDirty() + { + return this.dirty; + } + + public void setDirty(boolean dirtyIn) + { + this.dirty = dirtyIn; + } + + public EntityDataManager.DataEntry copy() + { + return new EntityDataManager.DataEntry(this.key, this.key.getSerializer().copyValue(this.value)); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/datasync/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/package-info.java new file mode 100644 index 0000000..91a64e3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/datasync/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.datasync; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/handshake/INetHandlerHandshakeServer.java b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/INetHandlerHandshakeServer.java new file mode 100644 index 0000000..5cf645f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/INetHandlerHandshakeServer.java @@ -0,0 +1,14 @@ +package net.minecraft.network.handshake; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.handshake.client.C00Handshake; + +public interface INetHandlerHandshakeServer extends INetHandler +{ + /** + * There are two recognized intentions for initiating a handshake: logging in and acquiring server status. The + * NetworkManager's protocol will be reconfigured according to the specified intention, although a login-intention + * must pass a versioncheck or receive a disconnect otherwise + */ + void processHandshake(C00Handshake packetIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/handshake/client/C00Handshake.java b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/client/C00Handshake.java new file mode 100644 index 0000000..6d42b1c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/client/C00Handshake.java @@ -0,0 +1,84 @@ +package net.minecraft.network.handshake.client; + +import java.io.IOException; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.handshake.INetHandlerHandshakeServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class C00Handshake implements Packet +{ + private int protocolVersion; + private String ip; + private int port; + private EnumConnectionState requestedState; + private boolean hasFMLMarker = false; + + public C00Handshake() + { + } + + @SideOnly(Side.CLIENT) + public C00Handshake(String p_i47613_1_, int p_i47613_2_, EnumConnectionState p_i47613_3_) + { + this.protocolVersion = 340; + this.ip = p_i47613_1_; + this.port = p_i47613_2_; + this.requestedState = p_i47613_3_; + } + + public C00Handshake(String address, int port, EnumConnectionState state, boolean addFMLMarker) + { + this(address, port, state); + this.hasFMLMarker = addFMLMarker; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.protocolVersion = buf.readVarInt(); + this.ip = buf.readString(255); + this.port = buf.readUnsignedShort(); + this.requestedState = EnumConnectionState.getById(buf.readVarInt()); + this.hasFMLMarker = this.ip.contains("\0FML\0"); + this.ip = this.ip.split("\0")[0]; + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.protocolVersion); + buf.writeString(this.ip + "\0FML\0"); + buf.writeShort(this.port); + buf.writeVarInt(this.requestedState.getId()); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerHandshakeServer handler) + { + handler.processHandshake(this); + } + + public EnumConnectionState getRequestedState() + { + return this.requestedState; + } + + public int getProtocolVersion() + { + return this.protocolVersion; + } + + public boolean hasFMLMarker() + { + return this.hasFMLMarker; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/handshake/client/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/client/package-info.java new file mode 100644 index 0000000..83c9770 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/client/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.handshake.client; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/handshake/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/package-info.java new file mode 100644 index 0000000..4e1d30f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/handshake/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.handshake; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/INetHandlerLoginClient.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/INetHandlerLoginClient.java new file mode 100644 index 0000000..be28e4c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/INetHandlerLoginClient.java @@ -0,0 +1,18 @@ +package net.minecraft.network.login; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.login.server.SPacketDisconnect; +import net.minecraft.network.login.server.SPacketEnableCompression; +import net.minecraft.network.login.server.SPacketEncryptionRequest; +import net.minecraft.network.login.server.SPacketLoginSuccess; + +public interface INetHandlerLoginClient extends INetHandler +{ + void handleEncryptionRequest(SPacketEncryptionRequest packetIn); + + void handleLoginSuccess(SPacketLoginSuccess packetIn); + + void handleDisconnect(SPacketDisconnect packetIn); + + void handleEnableCompression(SPacketEnableCompression packetIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/INetHandlerLoginServer.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/INetHandlerLoginServer.java new file mode 100644 index 0000000..c506adc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/INetHandlerLoginServer.java @@ -0,0 +1,12 @@ +package net.minecraft.network.login; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.login.client.CPacketEncryptionResponse; +import net.minecraft.network.login.client.CPacketLoginStart; + +public interface INetHandlerLoginServer extends INetHandler +{ + void processLoginStart(CPacketLoginStart packetIn); + + void processEncryptionResponse(CPacketEncryptionResponse packetIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/client/CPacketEncryptionResponse.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/client/CPacketEncryptionResponse.java new file mode 100644 index 0000000..bd6ada6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/client/CPacketEncryptionResponse.java @@ -0,0 +1,65 @@ +package net.minecraft.network.login.client; + +import java.io.IOException; +import java.security.PrivateKey; +import java.security.PublicKey; +import javax.crypto.SecretKey; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.login.INetHandlerLoginServer; +import net.minecraft.util.CryptManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketEncryptionResponse implements Packet +{ + private byte[] secretKeyEncrypted = new byte[0]; + private byte[] verifyTokenEncrypted = new byte[0]; + + public CPacketEncryptionResponse() + { + } + + @SideOnly(Side.CLIENT) + public CPacketEncryptionResponse(SecretKey secret, PublicKey key, byte[] verifyToken) + { + this.secretKeyEncrypted = CryptManager.encryptData(key, secret.getEncoded()); + this.verifyTokenEncrypted = CryptManager.encryptData(key, verifyToken); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.secretKeyEncrypted = buf.readByteArray(); + this.verifyTokenEncrypted = buf.readByteArray(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByteArray(this.secretKeyEncrypted); + buf.writeByteArray(this.verifyTokenEncrypted); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerLoginServer handler) + { + handler.processEncryptionResponse(this); + } + + public SecretKey getSecretKey(PrivateKey key) + { + return CryptManager.decryptSharedKey(key, this.secretKeyEncrypted); + } + + public byte[] getVerifyToken(PrivateKey key) + { + return key == null ? this.verifyTokenEncrypted : CryptManager.decryptData(key, this.verifyTokenEncrypted); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/client/CPacketLoginStart.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/client/CPacketLoginStart.java new file mode 100644 index 0000000..d5a2ec7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/client/CPacketLoginStart.java @@ -0,0 +1,51 @@ +package net.minecraft.network.login.client; + +import com.mojang.authlib.GameProfile; +import java.io.IOException; +import java.util.UUID; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.login.INetHandlerLoginServer; + +public class CPacketLoginStart implements Packet +{ + private GameProfile profile; + + public CPacketLoginStart() + { + } + + public CPacketLoginStart(GameProfile profileIn) + { + this.profile = profileIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.profile = new GameProfile((UUID)null, buf.readString(16)); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.profile.getName()); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerLoginServer handler) + { + handler.processLoginStart(this); + } + + public GameProfile getProfile() + { + return this.profile; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/client/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/client/package-info.java new file mode 100644 index 0000000..e047e58 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/client/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.login.client; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/package-info.java new file mode 100644 index 0000000..fbf9393 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.login; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketDisconnect.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketDisconnect.java new file mode 100644 index 0000000..2b19eb5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketDisconnect.java @@ -0,0 +1,53 @@ +package net.minecraft.network.login.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.login.INetHandlerLoginClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketDisconnect implements Packet +{ + private ITextComponent reason; + + public SPacketDisconnect() + { + } + + public SPacketDisconnect(ITextComponent p_i46853_1_) + { + this.reason = p_i46853_1_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.reason = ITextComponent.Serializer.fromJsonLenient(buf.readString(32767)); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeTextComponent(this.reason); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerLoginClient handler) + { + handler.handleDisconnect(this); + } + + @SideOnly(Side.CLIENT) + public ITextComponent getReason() + { + return this.reason; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketEnableCompression.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketEnableCompression.java new file mode 100644 index 0000000..d20c279 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketEnableCompression.java @@ -0,0 +1,52 @@ +package net.minecraft.network.login.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.login.INetHandlerLoginClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEnableCompression implements Packet +{ + private int compressionThreshold; + + public SPacketEnableCompression() + { + } + + public SPacketEnableCompression(int thresholdIn) + { + this.compressionThreshold = thresholdIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.compressionThreshold = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.compressionThreshold); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerLoginClient handler) + { + handler.handleEnableCompression(this); + } + + @SideOnly(Side.CLIENT) + public int getCompressionThreshold() + { + return this.compressionThreshold; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketEncryptionRequest.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketEncryptionRequest.java new file mode 100644 index 0000000..3d9b155 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketEncryptionRequest.java @@ -0,0 +1,74 @@ +package net.minecraft.network.login.server; + +import java.io.IOException; +import java.security.PublicKey; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.login.INetHandlerLoginClient; +import net.minecraft.util.CryptManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEncryptionRequest implements Packet +{ + private String hashedServerId; + private PublicKey publicKey; + private byte[] verifyToken; + + public SPacketEncryptionRequest() + { + } + + public SPacketEncryptionRequest(String serverIdIn, PublicKey publicKeyIn, byte[] verifyTokenIn) + { + this.hashedServerId = serverIdIn; + this.publicKey = publicKeyIn; + this.verifyToken = verifyTokenIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.hashedServerId = buf.readString(20); + this.publicKey = CryptManager.decodePublicKey(buf.readByteArray()); + this.verifyToken = buf.readByteArray(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.hashedServerId); + buf.writeByteArray(this.publicKey.getEncoded()); + buf.writeByteArray(this.verifyToken); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerLoginClient handler) + { + handler.handleEncryptionRequest(this); + } + + @SideOnly(Side.CLIENT) + public String getServerId() + { + return this.hashedServerId; + } + + @SideOnly(Side.CLIENT) + public PublicKey getPublicKey() + { + return this.publicKey; + } + + @SideOnly(Side.CLIENT) + public byte[] getVerifyToken() + { + return this.verifyToken; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketLoginSuccess.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketLoginSuccess.java new file mode 100644 index 0000000..5aefdc1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/SPacketLoginSuccess.java @@ -0,0 +1,59 @@ +package net.minecraft.network.login.server; + +import com.mojang.authlib.GameProfile; +import java.io.IOException; +import java.util.UUID; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.login.INetHandlerLoginClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketLoginSuccess implements Packet +{ + private GameProfile profile; + + public SPacketLoginSuccess() + { + } + + public SPacketLoginSuccess(GameProfile profileIn) + { + this.profile = profileIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + String s = buf.readString(36); + String s1 = buf.readString(16); + UUID uuid = s.length() > 0 ? UUID.fromString(s) : null; + this.profile = new GameProfile(uuid, s1); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + UUID uuid = this.profile.getId(); + buf.writeString(uuid == null ? "" : uuid.toString()); + buf.writeString(this.profile.getName()); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerLoginClient handler) + { + handler.handleLoginSuccess(this); + } + + @SideOnly(Side.CLIENT) + public GameProfile getProfile() + { + return this.profile; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/login/server/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/package-info.java new file mode 100644 index 0000000..7d45d65 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/login/server/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.login.server; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/package-info.java new file mode 100644 index 0000000..3a7e625 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/INetHandlerPlayClient.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/INetHandlerPlayClient.java new file mode 100644 index 0000000..df36488 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/INetHandlerPlayClient.java @@ -0,0 +1,395 @@ +package net.minecraft.network.play; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.play.server.SPacketAdvancementInfo; +import net.minecraft.network.play.server.SPacketAnimation; +import net.minecraft.network.play.server.SPacketBlockAction; +import net.minecraft.network.play.server.SPacketBlockBreakAnim; +import net.minecraft.network.play.server.SPacketBlockChange; +import net.minecraft.network.play.server.SPacketCamera; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.network.play.server.SPacketChat; +import net.minecraft.network.play.server.SPacketChunkData; +import net.minecraft.network.play.server.SPacketCloseWindow; +import net.minecraft.network.play.server.SPacketCollectItem; +import net.minecraft.network.play.server.SPacketCombatEvent; +import net.minecraft.network.play.server.SPacketConfirmTransaction; +import net.minecraft.network.play.server.SPacketCooldown; +import net.minecraft.network.play.server.SPacketCustomPayload; +import net.minecraft.network.play.server.SPacketCustomSound; +import net.minecraft.network.play.server.SPacketDestroyEntities; +import net.minecraft.network.play.server.SPacketDisconnect; +import net.minecraft.network.play.server.SPacketDisplayObjective; +import net.minecraft.network.play.server.SPacketEffect; +import net.minecraft.network.play.server.SPacketEntity; +import net.minecraft.network.play.server.SPacketEntityAttach; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketEntityEquipment; +import net.minecraft.network.play.server.SPacketEntityHeadLook; +import net.minecraft.network.play.server.SPacketEntityMetadata; +import net.minecraft.network.play.server.SPacketEntityProperties; +import net.minecraft.network.play.server.SPacketEntityStatus; +import net.minecraft.network.play.server.SPacketEntityTeleport; +import net.minecraft.network.play.server.SPacketEntityVelocity; +import net.minecraft.network.play.server.SPacketExplosion; +import net.minecraft.network.play.server.SPacketHeldItemChange; +import net.minecraft.network.play.server.SPacketJoinGame; +import net.minecraft.network.play.server.SPacketKeepAlive; +import net.minecraft.network.play.server.SPacketMaps; +import net.minecraft.network.play.server.SPacketMoveVehicle; +import net.minecraft.network.play.server.SPacketMultiBlockChange; +import net.minecraft.network.play.server.SPacketOpenWindow; +import net.minecraft.network.play.server.SPacketParticles; +import net.minecraft.network.play.server.SPacketPlaceGhostRecipe; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketPlayerListHeaderFooter; +import net.minecraft.network.play.server.SPacketPlayerListItem; +import net.minecraft.network.play.server.SPacketPlayerPosLook; +import net.minecraft.network.play.server.SPacketRecipeBook; +import net.minecraft.network.play.server.SPacketRemoveEntityEffect; +import net.minecraft.network.play.server.SPacketResourcePackSend; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketScoreboardObjective; +import net.minecraft.network.play.server.SPacketSelectAdvancementsTab; +import net.minecraft.network.play.server.SPacketServerDifficulty; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.network.play.server.SPacketSetPassengers; +import net.minecraft.network.play.server.SPacketSetSlot; +import net.minecraft.network.play.server.SPacketSignEditorOpen; +import net.minecraft.network.play.server.SPacketSoundEffect; +import net.minecraft.network.play.server.SPacketSpawnExperienceOrb; +import net.minecraft.network.play.server.SPacketSpawnGlobalEntity; +import net.minecraft.network.play.server.SPacketSpawnMob; +import net.minecraft.network.play.server.SPacketSpawnObject; +import net.minecraft.network.play.server.SPacketSpawnPainting; +import net.minecraft.network.play.server.SPacketSpawnPlayer; +import net.minecraft.network.play.server.SPacketSpawnPosition; +import net.minecraft.network.play.server.SPacketStatistics; +import net.minecraft.network.play.server.SPacketTabComplete; +import net.minecraft.network.play.server.SPacketTeams; +import net.minecraft.network.play.server.SPacketTimeUpdate; +import net.minecraft.network.play.server.SPacketTitle; +import net.minecraft.network.play.server.SPacketUnloadChunk; +import net.minecraft.network.play.server.SPacketUpdateBossInfo; +import net.minecraft.network.play.server.SPacketUpdateHealth; +import net.minecraft.network.play.server.SPacketUpdateScore; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.network.play.server.SPacketUseBed; +import net.minecraft.network.play.server.SPacketWindowItems; +import net.minecraft.network.play.server.SPacketWindowProperty; +import net.minecraft.network.play.server.SPacketWorldBorder; + +public interface INetHandlerPlayClient extends INetHandler +{ + /** + * Spawns an instance of the objecttype indicated by the packet and sets its position and momentum + */ + void handleSpawnObject(SPacketSpawnObject packetIn); + + /** + * Spawns an experience orb and sets its value (amount of XP) + */ + void handleSpawnExperienceOrb(SPacketSpawnExperienceOrb packetIn); + + /** + * Handles globally visible entities. Used in vanilla for lightning bolts + */ + void handleSpawnGlobalEntity(SPacketSpawnGlobalEntity packetIn); + + /** + * Spawns the mob entity at the specified location, with the specified rotation, momentum and type. Updates the + * entities Datawatchers with the entity metadata specified in the packet + */ + void handleSpawnMob(SPacketSpawnMob packetIn); + + /** + * May create a scoreboard objective, remove an objective from the scoreboard or update an objectives' displayname + */ + void handleScoreboardObjective(SPacketScoreboardObjective packetIn); + + /** + * Handles the spawning of a painting object + */ + void handleSpawnPainting(SPacketSpawnPainting packetIn); + + /** + * Handles the creation of a nearby player entity, sets the position and held item + */ + void handleSpawnPlayer(SPacketSpawnPlayer packetIn); + + /** + * Renders a specified animation: Waking up a player, a living entity swinging its currently held item, being hurt + * or receiving a critical hit by normal or magical means + */ + void handleAnimation(SPacketAnimation packetIn); + + /** + * Updates the players statistics or achievements + */ + void handleStatistics(SPacketStatistics packetIn); + + void handleRecipeBook(SPacketRecipeBook packetIn); + + /** + * Updates all registered IWorldAccess instances with destroyBlockInWorldPartially + */ + void handleBlockBreakAnim(SPacketBlockBreakAnim packetIn); + + /** + * Creates a sign in the specified location if it didn't exist and opens the GUI to edit its text + */ + void handleSignEditorOpen(SPacketSignEditorOpen packetIn); + + /** + * Updates the NBTTagCompound metadata of instances of the following entitytypes: Mob spawners, command blocks, + * beacons, skulls, flowerpot + */ + void handleUpdateTileEntity(SPacketUpdateTileEntity packetIn); + + /** + * Triggers Block.onBlockEventReceived, which is implemented in BlockPistonBase for extension/retraction, BlockNote + * for setting the instrument (including audiovisual feedback) and in BlockContainer to set the number of players + * accessing a (Ender)Chest + */ + void handleBlockAction(SPacketBlockAction packetIn); + + /** + * Updates the block and metadata and generates a blockupdate (and notify the clients) + */ + void handleBlockChange(SPacketBlockChange packetIn); + + /** + * Prints a chatmessage in the chat GUI + */ + void handleChat(SPacketChat packetIn); + + /** + * Displays the available command-completion options the server knows of + */ + void handleTabComplete(SPacketTabComplete packetIn); + + /** + * Received from the servers PlayerManager if between 1 and 64 blocks in a chunk are changed. If only one block + * requires an update, the server sends S23PacketBlockChange and if 64 or more blocks are changed, the server sends + * S21PacketChunkData + */ + void handleMultiBlockChange(SPacketMultiBlockChange packetIn); + + /** + * Updates the worlds MapStorage with the specified MapData for the specified map-identifier and invokes a + * MapItemRenderer for it + */ + void handleMaps(SPacketMaps packetIn); + + /** + * Verifies that the server and client are synchronized with respect to the inventory/container opened by the player + * and confirms if it is the case. + */ + void handleConfirmTransaction(SPacketConfirmTransaction packetIn); + + /** + * Resets the ItemStack held in hand and closes the window that is opened + */ + void handleCloseWindow(SPacketCloseWindow packetIn); + + /** + * Handles the placement of a specified ItemStack in a specified container/inventory slot + */ + void handleWindowItems(SPacketWindowItems packetIn); + + /** + * Displays a GUI by ID. In order starting from id 0: Chest, Workbench, Furnace, Dispenser, Enchanting table, + * Brewing stand, Villager merchant, Beacon, Anvil, Hopper, Dropper, Horse + */ + void handleOpenWindow(SPacketOpenWindow packetIn); + + /** + * Sets the progressbar of the opened window to the specified value + */ + void handleWindowProperty(SPacketWindowProperty packetIn); + + /** + * Handles pickin up an ItemStack or dropping one in your inventory or an open (non-creative) container + */ + void handleSetSlot(SPacketSetSlot packetIn); + + /** + * Handles packets that have room for a channel specification. Vanilla implemented channels are "MC|TrList" to + * acquire a MerchantRecipeList trades for a villager merchant, "MC|Brand" which sets the server brand? on the + * player instance and finally "MC|RPack" which the server uses to communicate the identifier of the default server + * resourcepack for the client to load. + */ + void handleCustomPayload(SPacketCustomPayload packetIn); + + /** + * Closes the network channel + */ + void handleDisconnect(SPacketDisconnect packetIn); + + /** + * Retrieves the player identified by the packet, puts him to sleep if possible (and flags whether all players are + * asleep) + */ + void handleUseBed(SPacketUseBed packetIn); + + /** + * Invokes the entities' handleUpdateHealth method which is implemented in LivingBase (hurt/death), + * MinecartMobSpawner (spawn delay), FireworkRocket & MinecartTNT (explosion), IronGolem (throwing,...), Witch + * (spawn particles), Zombie (villager transformation), Animal (breeding mode particles), Horse (breeding/smoke + * particles), Sheep (...), Tameable (...), Villager (particles for breeding mode, angry and happy), Wolf (...) + */ + void handleEntityStatus(SPacketEntityStatus packetIn); + + void handleEntityAttach(SPacketEntityAttach packetIn); + + void handleSetPassengers(SPacketSetPassengers packetIn); + + /** + * Initiates a new explosion (sound, particles, drop spawn) for the affected blocks indicated by the packet. + */ + void handleExplosion(SPacketExplosion packetIn); + + void handleChangeGameState(SPacketChangeGameState packetIn); + + void handleKeepAlive(SPacketKeepAlive packetIn); + + /** + * Updates the specified chunk with the supplied data, marks it for re-rendering and lighting recalculation + */ + void handleChunkData(SPacketChunkData packetIn); + + void processChunkUnload(SPacketUnloadChunk packetIn); + + void handleEffect(SPacketEffect packetIn); + + /** + * Registers some server properties (gametype,hardcore-mode,terraintype,difficulty,player limit), creates a new + * WorldClient and sets the player initial dimension + */ + void handleJoinGame(SPacketJoinGame packetIn); + + /** + * Updates the specified entity's position by the specified relative moment and absolute rotation. Note that + * subclassing of the packet allows for the specification of a subset of this data (e.g. only rel. position, abs. + * rotation or both). + */ + void handleEntityMovement(SPacketEntity packetIn); + + void handlePlayerPosLook(SPacketPlayerPosLook packetIn); + + /** + * Spawns a specified number of particles at the specified location with a randomized displacement according to + * specified bounds + */ + void handleParticles(SPacketParticles packetIn); + + void handlePlayerAbilities(SPacketPlayerAbilities packetIn); + + void handlePlayerListItem(SPacketPlayerListItem packetIn); + + /** + * Locally eliminates the entities. Invoked by the server when the items are in fact destroyed, or the player is no + * longer registered as required to monitor them. The latter happens when distance between the player and item + * increases beyond a certain treshold (typically the viewing distance) + */ + void handleDestroyEntities(SPacketDestroyEntities packetIn); + + void handleRemoveEntityEffect(SPacketRemoveEntityEffect packetIn); + + void handleRespawn(SPacketRespawn packetIn); + + /** + * Updates the direction in which the specified entity is looking, normally this head rotation is independent of the + * rotation of the entity itself + */ + void handleEntityHeadLook(SPacketEntityHeadLook packetIn); + + /** + * Updates which hotbar slot of the player is currently selected + */ + void handleHeldItemChange(SPacketHeldItemChange packetIn); + + /** + * Removes or sets the ScoreObjective to be displayed at a particular scoreboard position (list, sidebar, below + * name) + */ + void handleDisplayObjective(SPacketDisplayObjective packetIn); + + /** + * Invoked when the server registers new proximate objects in your watchlist or when objects in your watchlist have + * changed -> Registers any changes locally + */ + void handleEntityMetadata(SPacketEntityMetadata packetIn); + + /** + * Sets the velocity of the specified entity to the specified value + */ + void handleEntityVelocity(SPacketEntityVelocity packetIn); + + void handleEntityEquipment(SPacketEntityEquipment packetIn); + + void handleSetExperience(SPacketSetExperience packetIn); + + void handleUpdateHealth(SPacketUpdateHealth packetIn); + + /** + * Updates a team managed by the scoreboard: Create/Remove the team registration, Register/Remove the player-team- + * memberships, Set team displayname/prefix/suffix and/or whether friendly fire is enabled + */ + void handleTeams(SPacketTeams packetIn); + + /** + * Either updates the score with a specified value or removes the score for an objective + */ + void handleUpdateScore(SPacketUpdateScore packetIn); + + void handleSpawnPosition(SPacketSpawnPosition packetIn); + + void handleTimeUpdate(SPacketTimeUpdate packetIn); + + void handleSoundEffect(SPacketSoundEffect packetIn); + + void handleCustomSound(SPacketCustomSound packetIn); + + void handleCollectItem(SPacketCollectItem packetIn); + + /** + * Updates an entity's position and rotation as specified by the packet + */ + void handleEntityTeleport(SPacketEntityTeleport packetIn); + + /** + * Updates en entity's attributes and their respective modifiers, which are used for speed bonusses (player + * sprinting, animals fleeing, baby speed), weapon/tool attackDamage, hostiles followRange randomization, zombie + * maxHealth and knockback resistance as well as reinforcement spawning chance. + */ + void handleEntityProperties(SPacketEntityProperties packetIn); + + void handleEntityEffect(SPacketEntityEffect packetIn); + + void handleCombatEvent(SPacketCombatEvent packetIn); + + void handleServerDifficulty(SPacketServerDifficulty packetIn); + + void handleCamera(SPacketCamera packetIn); + + void handleWorldBorder(SPacketWorldBorder packetIn); + + void handleTitle(SPacketTitle packetIn); + + void handlePlayerListHeaderFooter(SPacketPlayerListHeaderFooter packetIn); + + void handleResourcePack(SPacketResourcePackSend packetIn); + + void handleUpdateBossInfo(SPacketUpdateBossInfo packetIn); + + void handleCooldown(SPacketCooldown packetIn); + + void handleMoveVehicle(SPacketMoveVehicle packetIn); + + void handleAdvancementInfo(SPacketAdvancementInfo packetIn); + + void handleSelectAdvancementsTab(SPacketSelectAdvancementsTab packetIn); + + void func_194307_a(SPacketPlaceGhostRecipe p_194307_1_); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/INetHandlerPlayServer.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/INetHandlerPlayServer.java new file mode 100644 index 0000000..4f61520 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/INetHandlerPlayServer.java @@ -0,0 +1,162 @@ +package net.minecraft.network.play; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.play.client.CPacketAnimation; +import net.minecraft.network.play.client.CPacketChatMessage; +import net.minecraft.network.play.client.CPacketClickWindow; +import net.minecraft.network.play.client.CPacketClientSettings; +import net.minecraft.network.play.client.CPacketClientStatus; +import net.minecraft.network.play.client.CPacketCloseWindow; +import net.minecraft.network.play.client.CPacketConfirmTeleport; +import net.minecraft.network.play.client.CPacketConfirmTransaction; +import net.minecraft.network.play.client.CPacketCreativeInventoryAction; +import net.minecraft.network.play.client.CPacketCustomPayload; +import net.minecraft.network.play.client.CPacketEnchantItem; +import net.minecraft.network.play.client.CPacketEntityAction; +import net.minecraft.network.play.client.CPacketHeldItemChange; +import net.minecraft.network.play.client.CPacketInput; +import net.minecraft.network.play.client.CPacketKeepAlive; +import net.minecraft.network.play.client.CPacketPlaceRecipe; +import net.minecraft.network.play.client.CPacketPlayer; +import net.minecraft.network.play.client.CPacketPlayerAbilities; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.network.play.client.CPacketPlayerTryUseItem; +import net.minecraft.network.play.client.CPacketPlayerTryUseItemOnBlock; +import net.minecraft.network.play.client.CPacketRecipeInfo; +import net.minecraft.network.play.client.CPacketResourcePackStatus; +import net.minecraft.network.play.client.CPacketSeenAdvancements; +import net.minecraft.network.play.client.CPacketSpectate; +import net.minecraft.network.play.client.CPacketSteerBoat; +import net.minecraft.network.play.client.CPacketTabComplete; +import net.minecraft.network.play.client.CPacketUpdateSign; +import net.minecraft.network.play.client.CPacketUseEntity; +import net.minecraft.network.play.client.CPacketVehicleMove; + +public interface INetHandlerPlayServer extends INetHandler +{ + void handleAnimation(CPacketAnimation packetIn); + + /** + * Process chat messages (broadcast back to clients) and commands (executes) + */ + void processChatMessage(CPacketChatMessage packetIn); + + /** + * Retrieves possible tab completions for the requested command string and sends them to the client + */ + void processTabComplete(CPacketTabComplete packetIn); + + /** + * Processes the client status updates: respawn attempt from player, opening statistics or achievements, or + * acquiring 'open inventory' achievement + */ + void processClientStatus(CPacketClientStatus packetIn); + + /** + * Updates serverside copy of client settings: language, render distance, chat visibility, chat colours, difficulty, + * and whether to show the cape + */ + void processClientSettings(CPacketClientSettings packetIn); + + /** + * Received in response to the server requesting to confirm that the client-side open container matches the servers' + * after a mismatched container-slot manipulation. It will unlock the player's ability to manipulate the container + * contents + */ + void processConfirmTransaction(CPacketConfirmTransaction packetIn); + + /** + * Enchants the item identified by the packet given some convoluted conditions (matching window, which + * should/shouldn't be in use?) + */ + void processEnchantItem(CPacketEnchantItem packetIn); + + /** + * Executes a container/inventory slot manipulation as indicated by the packet. Sends the serverside result if they + * didn't match the indicated result and prevents further manipulation by the player until he confirms that it has + * the same open container/inventory + */ + void processClickWindow(CPacketClickWindow packetIn); + + void func_194308_a(CPacketPlaceRecipe p_194308_1_); + + /** + * Processes the client closing windows (container) + */ + void processCloseWindow(CPacketCloseWindow packetIn); + + /** + * Synchronizes serverside and clientside book contents and signing + */ + void processCustomPayload(CPacketCustomPayload packetIn); + + /** + * Processes left and right clicks on entities + */ + void processUseEntity(CPacketUseEntity packetIn); + + /** + * Updates a players' ping statistics + */ + void processKeepAlive(CPacketKeepAlive packetIn); + + /** + * Processes clients perspective on player positioning and/or orientation + */ + void processPlayer(CPacketPlayer packetIn); + + /** + * Processes a player starting/stopping flying + */ + void processPlayerAbilities(CPacketPlayerAbilities packetIn); + + /** + * Processes the player initiating/stopping digging on a particular spot, as well as a player dropping items + */ + void processPlayerDigging(CPacketPlayerDigging packetIn); + + /** + * Processes a range of action-types: sneaking, sprinting, waking from sleep, opening the inventory or setting jump + * height of the horse the player is riding + */ + void processEntityAction(CPacketEntityAction packetIn); + + /** + * Processes player movement input. Includes walking, strafing, jumping, sneaking; excludes riding and toggling + * flying/sprinting + */ + void processInput(CPacketInput packetIn); + + /** + * Updates which quickbar slot is selected + */ + void processHeldItemChange(CPacketHeldItemChange packetIn); + + /** + * Update the server with an ItemStack in a slot. + */ + void processCreativeInventoryAction(CPacketCreativeInventoryAction packetIn); + + void processUpdateSign(CPacketUpdateSign packetIn); + + void processTryUseItemOnBlock(CPacketPlayerTryUseItemOnBlock packetIn); + + /** + * Called when a client is using an item while not pointing at a block, but simply using an item + */ + void processTryUseItem(CPacketPlayerTryUseItem packetIn); + + void handleSpectate(CPacketSpectate packetIn); + + void handleResourcePackStatus(CPacketResourcePackStatus packetIn); + + void processSteerBoat(CPacketSteerBoat packetIn); + + void processVehicleMove(CPacketVehicleMove packetIn); + + void processConfirmTeleport(CPacketConfirmTeleport packetIn); + + void handleRecipeBookUpdate(CPacketRecipeInfo p_191984_1_); + + void handleSeenAdvancements(CPacketSeenAdvancements p_194027_1_); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketAnimation.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketAnimation.java new file mode 100644 index 0000000..bc64df9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketAnimation.java @@ -0,0 +1,50 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.EnumHand; + +public class CPacketAnimation implements Packet +{ + private EnumHand hand; + + public CPacketAnimation() + { + } + + public CPacketAnimation(EnumHand handIn) + { + this.hand = handIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.hand = (EnumHand)buf.readEnumValue(EnumHand.class); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.hand); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.handleAnimation(this); + } + + public EnumHand getHand() + { + return this.hand; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketChatMessage.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketChatMessage.java new file mode 100644 index 0000000..6bdf366 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketChatMessage.java @@ -0,0 +1,54 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; + +public class CPacketChatMessage implements Packet +{ + private String message; + + public CPacketChatMessage() + { + } + + public CPacketChatMessage(String messageIn) + { + if (messageIn.length() > 256) + { + messageIn = messageIn.substring(0, 256); + } + + this.message = messageIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.message = buf.readString(256); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.message); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processChatMessage(this); + } + + public String getMessage() + { + return this.message; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClickWindow.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClickWindow.java new file mode 100644 index 0000000..a867814 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClickWindow.java @@ -0,0 +1,105 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.inventory.ClickType; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketClickWindow implements Packet +{ + /** The id of the window which was clicked. 0 for player inventory. */ + private int windowId; + /** Id of the clicked slot */ + private int slotId; + /** Button used */ + private int packedClickData; + /** A unique number for the action, used for transaction handling */ + private short actionNumber; + /** The item stack present in the slot */ + private ItemStack clickedItem = ItemStack.EMPTY; + /** Inventory operation mode */ + private ClickType mode; + + public CPacketClickWindow() + { + } + + @SideOnly(Side.CLIENT) + public CPacketClickWindow(int windowIdIn, int slotIdIn, int usedButtonIn, ClickType modeIn, ItemStack clickedItemIn, short actionNumberIn) + { + this.windowId = windowIdIn; + this.slotId = slotIdIn; + this.packedClickData = usedButtonIn; + this.clickedItem = clickedItemIn.copy(); + this.actionNumber = actionNumberIn; + this.mode = modeIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processClickWindow(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readByte(); + this.slotId = buf.readShort(); + this.packedClickData = buf.readByte(); + this.actionNumber = buf.readShort(); + this.mode = (ClickType)buf.readEnumValue(ClickType.class); + this.clickedItem = buf.readItemStack(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeShort(this.slotId); + buf.writeByte(this.packedClickData); + buf.writeShort(this.actionNumber); + buf.writeEnumValue(this.mode); + net.minecraftforge.common.util.PacketUtil.writeItemStackFromClientToServer(buf, this.clickedItem); + } + + public int getWindowId() + { + return this.windowId; + } + + public int getSlotId() + { + return this.slotId; + } + + public int getUsedButton() + { + return this.packedClickData; + } + + public short getActionNumber() + { + return this.actionNumber; + } + + public ItemStack getClickedItem() + { + return this.clickedItem; + } + + public ClickType getClickType() + { + return this.mode; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClientSettings.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClientSettings.java new file mode 100644 index 0000000..a8e6582 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClientSettings.java @@ -0,0 +1,94 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.EnumHandSide; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketClientSettings implements Packet +{ + private String lang; + private int view; + private EntityPlayer.EnumChatVisibility chatVisibility; + private boolean enableColors; + private int modelPartFlags; + private EnumHandSide mainHand; + + public CPacketClientSettings() + { + } + + @SideOnly(Side.CLIENT) + public CPacketClientSettings(String langIn, int renderDistanceIn, EntityPlayer.EnumChatVisibility chatVisibilityIn, boolean chatColorsIn, int modelPartsIn, EnumHandSide mainHandIn) + { + this.lang = langIn; + this.view = renderDistanceIn; + this.chatVisibility = chatVisibilityIn; + this.enableColors = chatColorsIn; + this.modelPartFlags = modelPartsIn; + this.mainHand = mainHandIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.lang = buf.readString(16); + this.view = buf.readByte(); + this.chatVisibility = (EntityPlayer.EnumChatVisibility)buf.readEnumValue(EntityPlayer.EnumChatVisibility.class); + this.enableColors = buf.readBoolean(); + this.modelPartFlags = buf.readUnsignedByte(); + this.mainHand = (EnumHandSide)buf.readEnumValue(EnumHandSide.class); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.lang); + buf.writeByte(this.view); + buf.writeEnumValue(this.chatVisibility); + buf.writeBoolean(this.enableColors); + buf.writeByte(this.modelPartFlags); + buf.writeEnumValue(this.mainHand); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processClientSettings(this); + } + + public String getLang() + { + return this.lang; + } + + public EntityPlayer.EnumChatVisibility getChatVisibility() + { + return this.chatVisibility; + } + + public boolean isColorsEnabled() + { + return this.enableColors; + } + + public int getModelPartFlags() + { + return this.modelPartFlags; + } + + public EnumHandSide getMainHand() + { + return this.mainHand; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClientStatus.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClientStatus.java new file mode 100644 index 0000000..438263d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketClientStatus.java @@ -0,0 +1,55 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; + +public class CPacketClientStatus implements Packet +{ + private CPacketClientStatus.State status; + + public CPacketClientStatus() + { + } + + public CPacketClientStatus(CPacketClientStatus.State p_i46886_1_) + { + this.status = p_i46886_1_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.status = (CPacketClientStatus.State)buf.readEnumValue(CPacketClientStatus.State.class); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.status); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processClientStatus(this); + } + + public CPacketClientStatus.State getStatus() + { + return this.status; + } + + public static enum State + { + PERFORM_RESPAWN, + REQUEST_STATS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCloseWindow.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCloseWindow.java new file mode 100644 index 0000000..d1c2fca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCloseWindow.java @@ -0,0 +1,47 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketCloseWindow implements Packet +{ + private int windowId; + + public CPacketCloseWindow() + { + } + + @SideOnly(Side.CLIENT) + public CPacketCloseWindow(int windowIdIn) + { + this.windowId = windowIdIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processCloseWindow(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketConfirmTeleport.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketConfirmTeleport.java new file mode 100644 index 0000000..c38fc10 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketConfirmTeleport.java @@ -0,0 +1,52 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketConfirmTeleport implements Packet +{ + private int telportId; + + public CPacketConfirmTeleport() + { + } + + @SideOnly(Side.CLIENT) + public CPacketConfirmTeleport(int teleportIdIn) + { + this.telportId = teleportIdIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.telportId = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.telportId); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processConfirmTeleport(this); + } + + public int getTeleportId() + { + return this.telportId; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketConfirmTransaction.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketConfirmTransaction.java new file mode 100644 index 0000000..aa22249 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketConfirmTransaction.java @@ -0,0 +1,65 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketConfirmTransaction implements Packet +{ + private int windowId; + private short uid; + private boolean accepted; + + public CPacketConfirmTransaction() + { + } + + @SideOnly(Side.CLIENT) + public CPacketConfirmTransaction(int windowIdIn, short uidIn, boolean acceptedIn) + { + this.windowId = windowIdIn; + this.uid = uidIn; + this.accepted = acceptedIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processConfirmTransaction(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readByte(); + this.uid = buf.readShort(); + this.accepted = buf.readByte() != 0; + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeShort(this.uid); + buf.writeByte(this.accepted ? 1 : 0); + } + + public int getWindowId() + { + return this.windowId; + } + + public short getUid() + { + return this.uid; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCreativeInventoryAction.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCreativeInventoryAction.java new file mode 100644 index 0000000..e77851f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCreativeInventoryAction.java @@ -0,0 +1,62 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketCreativeInventoryAction implements Packet +{ + private int slotId; + private ItemStack stack = ItemStack.EMPTY; + + public CPacketCreativeInventoryAction() + { + } + + @SideOnly(Side.CLIENT) + public CPacketCreativeInventoryAction(int slotIdIn, ItemStack stackIn) + { + this.slotId = slotIdIn; + this.stack = stackIn.copy(); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processCreativeInventoryAction(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.slotId = buf.readShort(); + this.stack = buf.readItemStack(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeShort(this.slotId); + net.minecraftforge.common.util.PacketUtil.writeItemStackFromClientToServer(buf, this.stack); + } + + public int getSlotId() + { + return this.slotId; + } + + public ItemStack getStack() + { + return this.stack; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCustomPayload.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCustomPayload.java new file mode 100644 index 0000000..839118c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketCustomPayload.java @@ -0,0 +1,85 @@ +package net.minecraft.network.play.client; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketCustomPayload implements Packet +{ + private String channel; + private PacketBuffer data; + + public CPacketCustomPayload() + { + } + + @SideOnly(Side.CLIENT) + public CPacketCustomPayload(String channelIn, PacketBuffer bufIn) + { + this.channel = channelIn; + this.data = bufIn; + + if (bufIn.writerIndex() > 32767) + { + throw new IllegalArgumentException("Payload may not be larger than 32767 bytes"); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.channel = buf.readString(20); + int i = buf.readableBytes(); + + if (i >= 0 && i <= 32767) + { + this.data = new PacketBuffer(buf.readBytes(i)); + } + else + { + throw new IOException("Payload may not be larger than 32767 bytes"); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.channel); + synchronized(this.data) { //This may be access multiple times, from multiple threads, lets be safe. + this.data.markReaderIndex(); + buf.writeBytes((ByteBuf)this.data); + this.data.resetReaderIndex(); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processCustomPayload(this); + + if (this.data != null) + { + this.data.release(); + } + } + + public String getChannelName() + { + return this.channel; + } + + public PacketBuffer getBufferData() + { + return this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketEnchantItem.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketEnchantItem.java new file mode 100644 index 0000000..2855889 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketEnchantItem.java @@ -0,0 +1,61 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketEnchantItem implements Packet +{ + private int windowId; + private int button; + + public CPacketEnchantItem() + { + } + + @SideOnly(Side.CLIENT) + public CPacketEnchantItem(int windowIdIn, int buttonIn) + { + this.windowId = windowIdIn; + this.button = buttonIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processEnchantItem(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readByte(); + this.button = buf.readByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeByte(this.button); + } + + public int getWindowId() + { + return this.windowId; + } + + public int getButton() + { + return this.button; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketEntityAction.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketEntityAction.java new file mode 100644 index 0000000..fb73461 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketEntityAction.java @@ -0,0 +1,85 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketEntityAction implements Packet +{ + private int entityID; + private CPacketEntityAction.Action action; + private int auxData; + + public CPacketEntityAction() + { + } + + @SideOnly(Side.CLIENT) + public CPacketEntityAction(Entity entityIn, CPacketEntityAction.Action actionIn) + { + this(entityIn, actionIn, 0); + } + + @SideOnly(Side.CLIENT) + public CPacketEntityAction(Entity entityIn, CPacketEntityAction.Action actionIn, int auxDataIn) + { + this.entityID = entityIn.getEntityId(); + this.action = actionIn; + this.auxData = auxDataIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityID = buf.readVarInt(); + this.action = (CPacketEntityAction.Action)buf.readEnumValue(CPacketEntityAction.Action.class); + this.auxData = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityID); + buf.writeEnumValue(this.action); + buf.writeVarInt(this.auxData); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processEntityAction(this); + } + + public CPacketEntityAction.Action getAction() + { + return this.action; + } + + public int getAuxData() + { + return this.auxData; + } + + public static enum Action + { + START_SNEAKING, + STOP_SNEAKING, + STOP_SLEEPING, + START_SPRINTING, + STOP_SPRINTING, + START_RIDING_JUMP, + STOP_RIDING_JUMP, + OPEN_INVENTORY, + START_FALL_FLYING; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketHeldItemChange.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketHeldItemChange.java new file mode 100644 index 0000000..e4b6534 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketHeldItemChange.java @@ -0,0 +1,52 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketHeldItemChange implements Packet +{ + private int slotId; + + public CPacketHeldItemChange() + { + } + + @SideOnly(Side.CLIENT) + public CPacketHeldItemChange(int slotIdIn) + { + this.slotId = slotIdIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.slotId = buf.readShort(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeShort(this.slotId); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processHeldItemChange(this); + } + + public int getSlotId() + { + return this.slotId; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketInput.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketInput.java new file mode 100644 index 0000000..1f64c09 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketInput.java @@ -0,0 +1,92 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketInput implements Packet +{ + /** Positive for left strafe, negative for right */ + private float strafeSpeed; + private float forwardSpeed; + private boolean jumping; + private boolean sneaking; + + public CPacketInput() + { + } + + @SideOnly(Side.CLIENT) + public CPacketInput(float strafeSpeedIn, float forwardSpeedIn, boolean jumpingIn, boolean sneakingIn) + { + this.strafeSpeed = strafeSpeedIn; + this.forwardSpeed = forwardSpeedIn; + this.jumping = jumpingIn; + this.sneaking = sneakingIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.strafeSpeed = buf.readFloat(); + this.forwardSpeed = buf.readFloat(); + byte b0 = buf.readByte(); + this.jumping = (b0 & 1) > 0; + this.sneaking = (b0 & 2) > 0; + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeFloat(this.strafeSpeed); + buf.writeFloat(this.forwardSpeed); + byte b0 = 0; + + if (this.jumping) + { + b0 = (byte)(b0 | 1); + } + + if (this.sneaking) + { + b0 = (byte)(b0 | 2); + } + + buf.writeByte(b0); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processInput(this); + } + + public float getStrafeSpeed() + { + return this.strafeSpeed; + } + + public float getForwardSpeed() + { + return this.forwardSpeed; + } + + public boolean isJumping() + { + return this.jumping; + } + + public boolean isSneaking() + { + return this.sneaking; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketKeepAlive.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketKeepAlive.java new file mode 100644 index 0000000..4fc06ca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketKeepAlive.java @@ -0,0 +1,52 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketKeepAlive implements Packet +{ + private long key; + + public CPacketKeepAlive() + { + } + + @SideOnly(Side.CLIENT) + public CPacketKeepAlive(long idIn) + { + this.key = idIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processKeepAlive(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.key = buf.readLong(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeLong(this.key); + } + + public long getKey() + { + return this.key; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlaceRecipe.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlaceRecipe.java new file mode 100644 index 0000000..a0b6134 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlaceRecipe.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketPlaceRecipe implements Packet +{ + private int field_194320_a; + private IRecipe field_194321_b; + private boolean field_194322_c; + + public CPacketPlaceRecipe() + { + } + + @SideOnly(Side.CLIENT) + public CPacketPlaceRecipe(int p_i47614_1_, IRecipe p_i47614_2_, boolean p_i47614_3_) + { + this.field_194320_a = p_i47614_1_; + this.field_194321_b = p_i47614_2_; + this.field_194322_c = p_i47614_3_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.field_194320_a = buf.readByte(); + this.field_194321_b = CraftingManager.getRecipeById(buf.readVarInt()); + this.field_194322_c = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.field_194320_a); + buf.writeVarInt(CraftingManager.getIDForRecipe(this.field_194321_b)); + buf.writeBoolean(this.field_194322_c); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.func_194308_a(this); + } + + public int func_194318_a() + { + return this.field_194320_a; + } + + public IRecipe func_194317_b() + { + return this.field_194321_b; + } + + public boolean func_194319_c() + { + return this.field_194322_c; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayer.java new file mode 100644 index 0000000..fa3040f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayer.java @@ -0,0 +1,209 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketPlayer implements Packet +{ + protected double x; + protected double y; + protected double z; + protected float yaw; + protected float pitch; + protected boolean onGround; + protected boolean moving; + protected boolean rotating; + + public CPacketPlayer() + { + } + + @SideOnly(Side.CLIENT) + public CPacketPlayer(boolean onGroundIn) + { + this.onGround = onGroundIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processPlayer(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.onGround = buf.readUnsignedByte() != 0; + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.onGround ? 1 : 0); + } + + public double getX(double defaultValue) + { + return this.moving ? this.x : defaultValue; + } + + public double getY(double defaultValue) + { + return this.moving ? this.y : defaultValue; + } + + public double getZ(double defaultValue) + { + return this.moving ? this.z : defaultValue; + } + + public float getYaw(float defaultValue) + { + return this.rotating ? this.yaw : defaultValue; + } + + public float getPitch(float defaultValue) + { + return this.rotating ? this.pitch : defaultValue; + } + + public boolean isOnGround() + { + return this.onGround; + } + + public static class Position extends CPacketPlayer + { + public Position() + { + this.moving = true; + } + + @SideOnly(Side.CLIENT) + public Position(double xIn, double yIn, double zIn, boolean onGroundIn) + { + this.x = xIn; + this.y = yIn; + this.z = zIn; + this.onGround = onGroundIn; + this.moving = true; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + super.readPacketData(buf); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + super.writePacketData(buf); + } + } + + public static class PositionRotation extends CPacketPlayer + { + public PositionRotation() + { + this.moving = true; + this.rotating = true; + } + + @SideOnly(Side.CLIENT) + public PositionRotation(double xIn, double yIn, double zIn, float yawIn, float pitchIn, boolean onGroundIn) + { + this.x = xIn; + this.y = yIn; + this.z = zIn; + this.yaw = yawIn; + this.pitch = pitchIn; + this.onGround = onGroundIn; + this.rotating = true; + this.moving = true; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.yaw = buf.readFloat(); + this.pitch = buf.readFloat(); + super.readPacketData(buf); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeFloat(this.yaw); + buf.writeFloat(this.pitch); + super.writePacketData(buf); + } + } + + public static class Rotation extends CPacketPlayer + { + public Rotation() + { + this.rotating = true; + } + + @SideOnly(Side.CLIENT) + public Rotation(float yawIn, float pitchIn, boolean onGroundIn) + { + this.yaw = yawIn; + this.pitch = pitchIn; + this.onGround = onGroundIn; + this.rotating = true; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.yaw = buf.readFloat(); + this.pitch = buf.readFloat(); + super.readPacketData(buf); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeFloat(this.yaw); + buf.writeFloat(this.pitch); + super.writePacketData(buf); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerAbilities.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerAbilities.java new file mode 100644 index 0000000..9262bca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerAbilities.java @@ -0,0 +1,135 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.entity.player.PlayerCapabilities; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; + +public class CPacketPlayerAbilities implements Packet +{ + private boolean invulnerable; + private boolean flying; + private boolean allowFlying; + private boolean creativeMode; + private float flySpeed; + private float walkSpeed; + + public CPacketPlayerAbilities() + { + } + + public CPacketPlayerAbilities(PlayerCapabilities capabilities) + { + this.setInvulnerable(capabilities.disableDamage); + this.setFlying(capabilities.isFlying); + this.setAllowFlying(capabilities.allowFlying); + this.setCreativeMode(capabilities.isCreativeMode); + this.setFlySpeed(capabilities.getFlySpeed()); + this.setWalkSpeed(capabilities.getWalkSpeed()); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + byte b0 = buf.readByte(); + this.setInvulnerable((b0 & 1) > 0); + this.setFlying((b0 & 2) > 0); + this.setAllowFlying((b0 & 4) > 0); + this.setCreativeMode((b0 & 8) > 0); + this.setFlySpeed(buf.readFloat()); + this.setWalkSpeed(buf.readFloat()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + byte b0 = 0; + + if (this.isInvulnerable()) + { + b0 = (byte)(b0 | 1); + } + + if (this.isFlying()) + { + b0 = (byte)(b0 | 2); + } + + if (this.isAllowFlying()) + { + b0 = (byte)(b0 | 4); + } + + if (this.isCreativeMode()) + { + b0 = (byte)(b0 | 8); + } + + buf.writeByte(b0); + buf.writeFloat(this.flySpeed); + buf.writeFloat(this.walkSpeed); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processPlayerAbilities(this); + } + + public boolean isInvulnerable() + { + return this.invulnerable; + } + + public void setInvulnerable(boolean isInvulnerable) + { + this.invulnerable = isInvulnerable; + } + + public boolean isFlying() + { + return this.flying; + } + + public void setFlying(boolean isFlying) + { + this.flying = isFlying; + } + + public boolean isAllowFlying() + { + return this.allowFlying; + } + + public void setAllowFlying(boolean isAllowFlying) + { + this.allowFlying = isAllowFlying; + } + + public boolean isCreativeMode() + { + return this.creativeMode; + } + + public void setCreativeMode(boolean isCreativeMode) + { + this.creativeMode = isCreativeMode; + } + + public void setFlySpeed(float flySpeedIn) + { + this.flySpeed = flySpeedIn; + } + + public void setWalkSpeed(float walkSpeedIn) + { + this.walkSpeed = walkSpeedIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerDigging.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerDigging.java new file mode 100644 index 0000000..d46fc1d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerDigging.java @@ -0,0 +1,84 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketPlayerDigging implements Packet +{ + private BlockPos position; + private EnumFacing facing; + /** Status of the digging (started, ongoing, broken). */ + private CPacketPlayerDigging.Action action; + + public CPacketPlayerDigging() + { + } + + @SideOnly(Side.CLIENT) + public CPacketPlayerDigging(CPacketPlayerDigging.Action actionIn, BlockPos posIn, EnumFacing facingIn) + { + this.action = actionIn; + this.position = posIn; + this.facing = facingIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.action = (CPacketPlayerDigging.Action)buf.readEnumValue(CPacketPlayerDigging.Action.class); + this.position = buf.readBlockPos(); + this.facing = EnumFacing.getFront(buf.readUnsignedByte()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.action); + buf.writeBlockPos(this.position); + buf.writeByte(this.facing.getIndex()); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processPlayerDigging(this); + } + + public BlockPos getPosition() + { + return this.position; + } + + public EnumFacing getFacing() + { + return this.facing; + } + + public CPacketPlayerDigging.Action getAction() + { + return this.action; + } + + public static enum Action + { + START_DESTROY_BLOCK, + ABORT_DESTROY_BLOCK, + STOP_DESTROY_BLOCK, + DROP_ALL_ITEMS, + DROP_ITEM, + RELEASE_USE_ITEM, + SWAP_HELD_ITEMS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerTryUseItem.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerTryUseItem.java new file mode 100644 index 0000000..c1f9bc7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerTryUseItem.java @@ -0,0 +1,50 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.EnumHand; + +public class CPacketPlayerTryUseItem implements Packet +{ + private EnumHand hand; + + public CPacketPlayerTryUseItem() + { + } + + public CPacketPlayerTryUseItem(EnumHand handIn) + { + this.hand = handIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.hand = (EnumHand)buf.readEnumValue(EnumHand.class); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.hand); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processTryUseItem(this); + } + + public EnumHand getHand() + { + return this.hand; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.java new file mode 100644 index 0000000..e6b3ea6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock.java @@ -0,0 +1,100 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketPlayerTryUseItemOnBlock implements Packet +{ + private BlockPos position; + private EnumFacing placedBlockDirection; + private EnumHand hand; + private float facingX; + private float facingY; + private float facingZ; + + public CPacketPlayerTryUseItemOnBlock() + { + } + + @SideOnly(Side.CLIENT) + public CPacketPlayerTryUseItemOnBlock(BlockPos posIn, EnumFacing placedBlockDirectionIn, EnumHand handIn, float facingXIn, float facingYIn, float facingZIn) + { + this.position = posIn; + this.placedBlockDirection = placedBlockDirectionIn; + this.hand = handIn; + this.facingX = facingXIn; + this.facingY = facingYIn; + this.facingZ = facingZIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.position = buf.readBlockPos(); + this.placedBlockDirection = (EnumFacing)buf.readEnumValue(EnumFacing.class); + this.hand = (EnumHand)buf.readEnumValue(EnumHand.class); + this.facingX = buf.readFloat(); + this.facingY = buf.readFloat(); + this.facingZ = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.position); + buf.writeEnumValue(this.placedBlockDirection); + buf.writeEnumValue(this.hand); + buf.writeFloat(this.facingX); + buf.writeFloat(this.facingY); + buf.writeFloat(this.facingZ); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processTryUseItemOnBlock(this); + } + + public BlockPos getPos() + { + return this.position; + } + + public EnumFacing getDirection() + { + return this.placedBlockDirection; + } + + public EnumHand getHand() + { + return this.hand; + } + + public float getFacingX() + { + return this.facingX; + } + + public float getFacingY() + { + return this.facingY; + } + + public float getFacingZ() + { + return this.facingZ; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketRecipeInfo.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketRecipeInfo.java new file mode 100644 index 0000000..e5154af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketRecipeInfo.java @@ -0,0 +1,106 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketRecipeInfo implements Packet +{ + private CPacketRecipeInfo.Purpose purpose; + private IRecipe recipe; + private boolean isGuiOpen; + private boolean filteringCraftable; + + public CPacketRecipeInfo() + { + } + + public CPacketRecipeInfo(IRecipe p_i47518_1_) + { + this.purpose = CPacketRecipeInfo.Purpose.SHOWN; + this.recipe = p_i47518_1_; + } + + @SideOnly(Side.CLIENT) + public CPacketRecipeInfo(boolean p_i47424_1_, boolean p_i47424_2_) + { + this.purpose = CPacketRecipeInfo.Purpose.SETTINGS; + this.isGuiOpen = p_i47424_1_; + this.filteringCraftable = p_i47424_2_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.purpose = (CPacketRecipeInfo.Purpose)buf.readEnumValue(CPacketRecipeInfo.Purpose.class); + + if (this.purpose == CPacketRecipeInfo.Purpose.SHOWN) + { + this.recipe = CraftingManager.getRecipeById(buf.readInt()); + } + else if (this.purpose == CPacketRecipeInfo.Purpose.SETTINGS) + { + this.isGuiOpen = buf.readBoolean(); + this.filteringCraftable = buf.readBoolean(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.purpose); + + if (this.purpose == CPacketRecipeInfo.Purpose.SHOWN) + { + buf.writeInt(CraftingManager.getIDForRecipe(this.recipe)); + } + else if (this.purpose == CPacketRecipeInfo.Purpose.SETTINGS) + { + buf.writeBoolean(this.isGuiOpen); + buf.writeBoolean(this.filteringCraftable); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.handleRecipeBookUpdate(this); + } + + public CPacketRecipeInfo.Purpose getPurpose() + { + return this.purpose; + } + + public IRecipe getRecipe() + { + return this.recipe; + } + + public boolean isGuiOpen() + { + return this.isGuiOpen; + } + + public boolean isFilteringCraftable() + { + return this.filteringCraftable; + } + + public static enum Purpose + { + SHOWN, + SETTINGS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketResourcePackStatus.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketResourcePackStatus.java new file mode 100644 index 0000000..0eedc90 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketResourcePackStatus.java @@ -0,0 +1,52 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; + +public class CPacketResourcePackStatus implements Packet +{ + private CPacketResourcePackStatus.Action action; + + public CPacketResourcePackStatus() + { + } + + public CPacketResourcePackStatus(CPacketResourcePackStatus.Action p_i47156_1_) + { + this.action = p_i47156_1_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.action = (CPacketResourcePackStatus.Action)buf.readEnumValue(CPacketResourcePackStatus.Action.class); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.action); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.handleResourcePackStatus(this); + } + + public static enum Action + { + SUCCESSFULLY_LOADED, + DECLINED, + FAILED_DOWNLOAD, + ACCEPTED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSeenAdvancements.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSeenAdvancements.java new file mode 100644 index 0000000..852559d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSeenAdvancements.java @@ -0,0 +1,90 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.advancements.Advancement; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketSeenAdvancements implements Packet +{ + private CPacketSeenAdvancements.Action action; + private ResourceLocation tab; + + public CPacketSeenAdvancements() + { + } + + @SideOnly(Side.CLIENT) + public CPacketSeenAdvancements(CPacketSeenAdvancements.Action p_i47595_1_, @Nullable ResourceLocation p_i47595_2_) + { + this.action = p_i47595_1_; + this.tab = p_i47595_2_; + } + + @SideOnly(Side.CLIENT) + public static CPacketSeenAdvancements openedTab(Advancement p_194163_0_) + { + return new CPacketSeenAdvancements(CPacketSeenAdvancements.Action.OPENED_TAB, p_194163_0_.getId()); + } + + @SideOnly(Side.CLIENT) + public static CPacketSeenAdvancements closedScreen() + { + return new CPacketSeenAdvancements(CPacketSeenAdvancements.Action.CLOSED_SCREEN, (ResourceLocation)null); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.action = (CPacketSeenAdvancements.Action)buf.readEnumValue(CPacketSeenAdvancements.Action.class); + + if (this.action == CPacketSeenAdvancements.Action.OPENED_TAB) + { + this.tab = buf.readResourceLocation(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.action); + + if (this.action == CPacketSeenAdvancements.Action.OPENED_TAB) + { + buf.writeResourceLocation(this.tab); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.handleSeenAdvancements(this); + } + + public CPacketSeenAdvancements.Action getAction() + { + return this.action; + } + + public ResourceLocation getTab() + { + return this.tab; + } + + public static enum Action + { + OPENED_TAB, + CLOSED_SCREEN; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSpectate.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSpectate.java new file mode 100644 index 0000000..425eeab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSpectate.java @@ -0,0 +1,54 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.world.WorldServer; + +public class CPacketSpectate implements Packet +{ + private UUID id; + + public CPacketSpectate() + { + } + + public CPacketSpectate(UUID uniqueIdIn) + { + this.id = uniqueIdIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.id = buf.readUniqueId(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeUniqueId(this.id); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.handleSpectate(this); + } + + @Nullable + public Entity getEntity(WorldServer worldIn) + { + return worldIn.getEntityFromUuid(this.id); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSteerBoat.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSteerBoat.java new file mode 100644 index 0000000..ae84870 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketSteerBoat.java @@ -0,0 +1,58 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; + +public class CPacketSteerBoat implements Packet +{ + private boolean left; + private boolean right; + + public CPacketSteerBoat() + { + } + + public CPacketSteerBoat(boolean p_i46873_1_, boolean p_i46873_2_) + { + this.left = p_i46873_1_; + this.right = p_i46873_2_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.left = buf.readBoolean(); + this.right = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBoolean(this.left); + buf.writeBoolean(this.right); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processSteerBoat(this); + } + + public boolean getLeft() + { + return this.left; + } + + public boolean getRight() + { + return this.right; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketTabComplete.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketTabComplete.java new file mode 100644 index 0000000..ec4f1fc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketTabComplete.java @@ -0,0 +1,86 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; + +public class CPacketTabComplete implements Packet +{ + private String message; + private boolean hasTargetBlock; + @Nullable + private BlockPos targetBlock; + + public CPacketTabComplete() + { + } + + @SideOnly(Side.CLIENT) + public CPacketTabComplete(String messageIn, @Nullable BlockPos targetBlockIn, boolean hasTargetBlockIn) + { + this.message = messageIn; + this.targetBlock = targetBlockIn; + this.hasTargetBlock = hasTargetBlockIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.message = buf.readString(32767); + this.hasTargetBlock = buf.readBoolean(); + boolean flag = buf.readBoolean(); + + if (flag) + { + this.targetBlock = buf.readBlockPos(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(StringUtils.substring(this.message, 0, 32767)); + buf.writeBoolean(this.hasTargetBlock); + boolean flag = this.targetBlock != null; + buf.writeBoolean(flag); + + if (flag) + { + buf.writeBlockPos(this.targetBlock); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processTabComplete(this); + } + + public String getMessage() + { + return this.message; + } + + @Nullable + public BlockPos getTargetBlock() + { + return this.targetBlock; + } + + public boolean hasTargetBlock() + { + return this.hasTargetBlock; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketUpdateSign.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketUpdateSign.java new file mode 100644 index 0000000..e3f97bb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketUpdateSign.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketUpdateSign implements Packet +{ + private BlockPos pos; + private String[] lines; + + public CPacketUpdateSign() + { + } + + @SideOnly(Side.CLIENT) + public CPacketUpdateSign(BlockPos posIn, ITextComponent[] linesIn) + { + this.pos = posIn; + this.lines = new String[] {linesIn[0].getUnformattedText(), linesIn[1].getUnformattedText(), linesIn[2].getUnformattedText(), linesIn[3].getUnformattedText()}; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.pos = buf.readBlockPos(); + this.lines = new String[4]; + + for (int i = 0; i < 4; ++i) + { + this.lines[i] = buf.readString(384); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.pos); + + for (int i = 0; i < 4; ++i) + { + buf.writeString(this.lines[i]); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processUpdateSign(this); + } + + public BlockPos getPosition() + { + return this.pos; + } + + public String[] getLines() + { + return this.lines; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketUseEntity.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketUseEntity.java new file mode 100644 index 0000000..1f4e476 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketUseEntity.java @@ -0,0 +1,124 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketUseEntity implements Packet +{ + private int entityId; + private CPacketUseEntity.Action action; + private Vec3d hitVec; + private EnumHand hand; + + public CPacketUseEntity() + { + } + + public CPacketUseEntity(Entity entityIn) + { + this.entityId = entityIn.getEntityId(); + this.action = CPacketUseEntity.Action.ATTACK; + } + + @SideOnly(Side.CLIENT) + public CPacketUseEntity(Entity entityIn, EnumHand handIn) + { + this.entityId = entityIn.getEntityId(); + this.action = CPacketUseEntity.Action.INTERACT; + this.hand = handIn; + } + + @SideOnly(Side.CLIENT) + public CPacketUseEntity(Entity entityIn, EnumHand handIn, Vec3d hitVecIn) + { + this.entityId = entityIn.getEntityId(); + this.action = CPacketUseEntity.Action.INTERACT_AT; + this.hand = handIn; + this.hitVec = hitVecIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.action = (CPacketUseEntity.Action)buf.readEnumValue(CPacketUseEntity.Action.class); + + if (this.action == CPacketUseEntity.Action.INTERACT_AT) + { + this.hitVec = new Vec3d((double)buf.readFloat(), (double)buf.readFloat(), (double)buf.readFloat()); + } + + if (this.action == CPacketUseEntity.Action.INTERACT || this.action == CPacketUseEntity.Action.INTERACT_AT) + { + this.hand = (EnumHand)buf.readEnumValue(EnumHand.class); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeEnumValue(this.action); + + if (this.action == CPacketUseEntity.Action.INTERACT_AT) + { + buf.writeFloat((float)this.hitVec.x); + buf.writeFloat((float)this.hitVec.y); + buf.writeFloat((float)this.hitVec.z); + } + + if (this.action == CPacketUseEntity.Action.INTERACT || this.action == CPacketUseEntity.Action.INTERACT_AT) + { + buf.writeEnumValue(this.hand); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processUseEntity(this); + } + + @Nullable + public Entity getEntityFromWorld(World worldIn) + { + return worldIn.getEntityByID(this.entityId); + } + + public CPacketUseEntity.Action getAction() + { + return this.action; + } + + public EnumHand getHand() + { + return this.hand; + } + + public Vec3d getHitVec() + { + return this.hitVec; + } + + public static enum Action + { + INTERACT, + ATTACK, + INTERACT_AT; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketVehicleMove.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketVehicleMove.java new file mode 100644 index 0000000..3ee356c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/CPacketVehicleMove.java @@ -0,0 +1,86 @@ +package net.minecraft.network.play.client; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayServer; + +public class CPacketVehicleMove implements Packet +{ + private double x; + private double y; + private double z; + private float yaw; + private float pitch; + + public CPacketVehicleMove() + { + } + + public CPacketVehicleMove(Entity entityIn) + { + this.x = entityIn.posX; + this.y = entityIn.posY; + this.z = entityIn.posZ; + this.yaw = entityIn.rotationYaw; + this.pitch = entityIn.rotationPitch; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.yaw = buf.readFloat(); + this.pitch = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeFloat(this.yaw); + buf.writeFloat(this.pitch); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayServer handler) + { + handler.processVehicleMove(this); + } + + public double getX() + { + return this.x; + } + + public double getY() + { + return this.y; + } + + public double getZ() + { + return this.z; + } + + public float getYaw() + { + return this.yaw; + } + + public float getPitch() + { + return this.pitch; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/client/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/package-info.java new file mode 100644 index 0000000..e0d85d0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/client/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.play.client; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/package-info.java new file mode 100644 index 0000000..9a788d9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.play; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketAdvancementInfo.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketAdvancementInfo.java new file mode 100644 index 0000000..17837f0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketAdvancementInfo.java @@ -0,0 +1,142 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.io.IOException; +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementProgress; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketAdvancementInfo implements Packet +{ + private boolean firstSync; + private Map advancementsToAdd; + private Set advancementsToRemove; + private Map progressUpdates; + + public SPacketAdvancementInfo() + { + } + + public SPacketAdvancementInfo(boolean p_i47519_1_, Collection p_i47519_2_, Set p_i47519_3_, Map p_i47519_4_) + { + this.firstSync = p_i47519_1_; + this.advancementsToAdd = Maps.newHashMap(); + + for (Advancement advancement : p_i47519_2_) + { + this.advancementsToAdd.put(advancement.getId(), advancement.copy()); + } + + this.advancementsToRemove = p_i47519_3_; + this.progressUpdates = Maps.newHashMap(p_i47519_4_); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleAdvancementInfo(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.firstSync = buf.readBoolean(); + this.advancementsToAdd = Maps.newHashMap(); + this.advancementsToRemove = Sets.newLinkedHashSet(); + this.progressUpdates = Maps.newHashMap(); + int i = buf.readVarInt(); + + for (int j = 0; j < i; ++j) + { + ResourceLocation resourcelocation = buf.readResourceLocation(); + Advancement.Builder advancement$builder = Advancement.Builder.readFrom(buf); + this.advancementsToAdd.put(resourcelocation, advancement$builder); + } + + i = buf.readVarInt(); + + for (int k = 0; k < i; ++k) + { + ResourceLocation resourcelocation1 = buf.readResourceLocation(); + this.advancementsToRemove.add(resourcelocation1); + } + + i = buf.readVarInt(); + + for (int l = 0; l < i; ++l) + { + ResourceLocation resourcelocation2 = buf.readResourceLocation(); + this.progressUpdates.put(resourcelocation2, AdvancementProgress.fromNetwork(buf)); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBoolean(this.firstSync); + buf.writeVarInt(this.advancementsToAdd.size()); + + for (Entry entry : this.advancementsToAdd.entrySet()) + { + ResourceLocation resourcelocation = entry.getKey(); + Advancement.Builder advancement$builder = entry.getValue(); + buf.writeResourceLocation(resourcelocation); + advancement$builder.writeTo(buf); + } + + buf.writeVarInt(this.advancementsToRemove.size()); + + for (ResourceLocation resourcelocation1 : this.advancementsToRemove) + { + buf.writeResourceLocation(resourcelocation1); + } + + buf.writeVarInt(this.progressUpdates.size()); + + for (Entry entry1 : this.progressUpdates.entrySet()) + { + buf.writeResourceLocation(entry1.getKey()); + ((AdvancementProgress)entry1.getValue()).serializeToNetwork(buf); + } + } + + @SideOnly(Side.CLIENT) + public Map getAdvancementsToAdd() + { + return this.advancementsToAdd; + } + + @SideOnly(Side.CLIENT) + public Set getAdvancementsToRemove() + { + return this.advancementsToRemove; + } + + @SideOnly(Side.CLIENT) + public Map getProgressUpdates() + { + return this.progressUpdates; + } + + @SideOnly(Side.CLIENT) + public boolean isFirstSync() + { + return this.firstSync; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketAnimation.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketAnimation.java new file mode 100644 index 0000000..195c9f8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketAnimation.java @@ -0,0 +1,63 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketAnimation implements Packet +{ + private int entityId; + private int type; + + public SPacketAnimation() + { + } + + public SPacketAnimation(Entity entityIn, int typeIn) + { + this.entityId = entityIn.getEntityId(); + this.type = typeIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.type = buf.readUnsignedByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeByte(this.type); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleAnimation(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public int getAnimationType() + { + return this.type; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockAction.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockAction.java new file mode 100644 index 0000000..108b4e3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockAction.java @@ -0,0 +1,90 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.block.Block; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketBlockAction implements Packet +{ + private BlockPos blockPosition; + private int instrument; + private int pitch; + private Block block; + + public SPacketBlockAction() + { + } + + public SPacketBlockAction(BlockPos pos, Block blockIn, int instrumentIn, int pitchIn) + { + this.blockPosition = pos; + this.instrument = instrumentIn; + this.pitch = pitchIn; + this.block = blockIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.blockPosition = buf.readBlockPos(); + this.instrument = buf.readUnsignedByte(); + this.pitch = buf.readUnsignedByte(); + this.block = Block.getBlockById(buf.readVarInt() & 4095); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.blockPosition); + buf.writeByte(this.instrument); + buf.writeByte(this.pitch); + buf.writeVarInt(Block.getIdFromBlock(this.block) & 4095); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleBlockAction(this); + } + + @SideOnly(Side.CLIENT) + public BlockPos getBlockPosition() + { + return this.blockPosition; + } + + /** + * instrument data for noteblocks + */ + @SideOnly(Side.CLIENT) + public int getData1() + { + return this.instrument; + } + + /** + * pitch data for noteblocks + */ + @SideOnly(Side.CLIENT) + public int getData2() + { + return this.pitch; + } + + @SideOnly(Side.CLIENT) + public Block getBlockType() + { + return this.block; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockBreakAnim.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockBreakAnim.java new file mode 100644 index 0000000..10d6593 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockBreakAnim.java @@ -0,0 +1,73 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketBlockBreakAnim implements Packet +{ + private int breakerId; + private BlockPos position; + private int progress; + + public SPacketBlockBreakAnim() + { + } + + public SPacketBlockBreakAnim(int breakerIdIn, BlockPos positionIn, int progressIn) + { + this.breakerId = breakerIdIn; + this.position = positionIn; + this.progress = progressIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.breakerId = buf.readVarInt(); + this.position = buf.readBlockPos(); + this.progress = buf.readUnsignedByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.breakerId); + buf.writeBlockPos(this.position); + buf.writeByte(this.progress); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleBlockBreakAnim(this); + } + + @SideOnly(Side.CLIENT) + public int getBreakerId() + { + return this.breakerId; + } + + @SideOnly(Side.CLIENT) + public BlockPos getPosition() + { + return this.position; + } + + @SideOnly(Side.CLIENT) + public int getProgress() + { + return this.progress; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockChange.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockChange.java new file mode 100644 index 0000000..bd662fa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketBlockChange.java @@ -0,0 +1,66 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketBlockChange implements Packet +{ + private BlockPos blockPosition; + public IBlockState blockState; + + public SPacketBlockChange() + { + } + + public SPacketBlockChange(World worldIn, BlockPos posIn) + { + this.blockPosition = posIn; + this.blockState = worldIn.getBlockState(posIn); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.blockPosition = buf.readBlockPos(); + this.blockState = Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.blockPosition); + buf.writeVarInt(Block.BLOCK_STATE_IDS.get(this.blockState)); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleBlockChange(this); + } + + @SideOnly(Side.CLIENT) + public IBlockState getBlockState() + { + return this.blockState; + } + + @SideOnly(Side.CLIENT) + public BlockPos getBlockPosition() + { + return this.blockPosition; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCamera.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCamera.java new file mode 100644 index 0000000..026c650 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCamera.java @@ -0,0 +1,56 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketCamera implements Packet +{ + public int entityId; + + public SPacketCamera() + { + } + + public SPacketCamera(Entity entityIn) + { + this.entityId = entityIn.getEntityId(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCamera(this); + } + + @Nullable + @SideOnly(Side.CLIENT) + public Entity getEntity(World worldIn) + { + return worldIn.getEntityByID(this.entityId); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChangeGameState.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChangeGameState.java new file mode 100644 index 0000000..6387ae7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChangeGameState.java @@ -0,0 +1,63 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketChangeGameState implements Packet +{ + public static final String[] MESSAGE_NAMES = new String[] {"tile.bed.notValid"}; + private int state; + private float value; + + public SPacketChangeGameState() + { + } + + public SPacketChangeGameState(int stateIn, float valueIn) + { + this.state = stateIn; + this.value = valueIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.state = buf.readUnsignedByte(); + this.value = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.state); + buf.writeFloat(this.value); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleChangeGameState(this); + } + + @SideOnly(Side.CLIENT) + public int getGameState() + { + return this.state; + } + + @SideOnly(Side.CLIENT) + public float getValue() + { + return this.value; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChat.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChat.java new file mode 100644 index 0000000..eae4592 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChat.java @@ -0,0 +1,76 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketChat implements Packet +{ + private ITextComponent chatComponent; + private ChatType type; + + public SPacketChat() + { + } + + public SPacketChat(ITextComponent componentIn) + { + this(componentIn, ChatType.SYSTEM); + } + + public SPacketChat(ITextComponent message, ChatType type) + { + this.chatComponent = message; + this.type = type; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.chatComponent = buf.readTextComponent(); + this.type = ChatType.byId(buf.readByte()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeTextComponent(this.chatComponent); + buf.writeByte(this.type.getId()); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleChat(this); + } + + @SideOnly(Side.CLIENT) + public ITextComponent getChatComponent() + { + return this.chatComponent; + } + + /** + * This method returns true if the type is SYSTEM or ABOVE_HOTBAR, and false if CHAT + */ + public boolean isSystem() + { + return this.type == ChatType.SYSTEM || this.type == ChatType.GAME_INFO; + } + + public ChatType getType() + { + return this.type; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChunkData.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChunkData.java new file mode 100644 index 0000000..52a6fcf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketChunkData.java @@ -0,0 +1,215 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Lists; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import java.io.IOException; +import java.util.List; +import java.util.Map.Entry; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.storage.ExtendedBlockStorage; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketChunkData implements Packet +{ + private int chunkX; + private int chunkZ; + private int availableSections; + private byte[] buffer; + private List tileEntityTags; + private boolean fullChunk; + + public SPacketChunkData() + { + } + + public SPacketChunkData(Chunk chunkIn, int changedSectionFilter) + { + this.chunkX = chunkIn.x; + this.chunkZ = chunkIn.z; + this.fullChunk = changedSectionFilter == 65535; + boolean flag = chunkIn.getWorld().provider.hasSkyLight(); + this.buffer = new byte[this.calculateChunkSize(chunkIn, flag, changedSectionFilter)]; + this.availableSections = this.extractChunkData(new PacketBuffer(this.getWriteBuffer()), chunkIn, flag, changedSectionFilter); + this.tileEntityTags = Lists.newArrayList(); + + for (Entry entry : chunkIn.getTileEntityMap().entrySet()) + { + BlockPos blockpos = entry.getKey(); + TileEntity tileentity = entry.getValue(); + int i = blockpos.getY() >> 4; + + if (this.isFullChunk() || (changedSectionFilter & 1 << i) != 0) + { + NBTTagCompound nbttagcompound = tileentity.getUpdateTag(); + this.tileEntityTags.add(nbttagcompound); + } + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.chunkX = buf.readInt(); + this.chunkZ = buf.readInt(); + this.fullChunk = buf.readBoolean(); + this.availableSections = buf.readVarInt(); + int i = buf.readVarInt(); + + if (i > 2097152) + { + throw new RuntimeException("Chunk Packet trying to allocate too much memory on read."); + } + else + { + this.buffer = new byte[i]; + buf.readBytes(this.buffer); + int j = buf.readVarInt(); + this.tileEntityTags = Lists.newArrayList(); + + for (int k = 0; k < j; ++k) + { + this.tileEntityTags.add(buf.readCompoundTag()); + } + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.chunkX); + buf.writeInt(this.chunkZ); + buf.writeBoolean(this.fullChunk); + buf.writeVarInt(this.availableSections); + buf.writeVarInt(this.buffer.length); + buf.writeBytes(this.buffer); + buf.writeVarInt(this.tileEntityTags.size()); + + for (NBTTagCompound nbttagcompound : this.tileEntityTags) + { + buf.writeCompoundTag(nbttagcompound); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleChunkData(this); + } + + @SideOnly(Side.CLIENT) + public PacketBuffer getReadBuffer() + { + return new PacketBuffer(Unpooled.wrappedBuffer(this.buffer)); + } + + private ByteBuf getWriteBuffer() + { + ByteBuf bytebuf = Unpooled.wrappedBuffer(this.buffer); + bytebuf.writerIndex(0); + return bytebuf; + } + + public int extractChunkData(PacketBuffer buf, Chunk chunkIn, boolean writeSkylight, int changedSectionFilter) + { + int i = 0; + ExtendedBlockStorage[] aextendedblockstorage = chunkIn.getBlockStorageArray(); + int j = 0; + + for (int k = aextendedblockstorage.length; j < k; ++j) + { + ExtendedBlockStorage extendedblockstorage = aextendedblockstorage[j]; + + if (extendedblockstorage != Chunk.NULL_BLOCK_STORAGE && (!this.isFullChunk() || !extendedblockstorage.isEmpty()) && (changedSectionFilter & 1 << j) != 0) + { + i |= 1 << j; + extendedblockstorage.getData().write(buf); + buf.writeBytes(extendedblockstorage.getBlockLight().getData()); + + if (writeSkylight) + { + buf.writeBytes(extendedblockstorage.getSkyLight().getData()); + } + } + } + + if (this.isFullChunk()) + { + buf.writeBytes(chunkIn.getBiomeArray()); + } + + return i; + } + + protected int calculateChunkSize(Chunk chunkIn, boolean p_189556_2_, int p_189556_3_) + { + int i = 0; + ExtendedBlockStorage[] aextendedblockstorage = chunkIn.getBlockStorageArray(); + int j = 0; + + for (int k = aextendedblockstorage.length; j < k; ++j) + { + ExtendedBlockStorage extendedblockstorage = aextendedblockstorage[j]; + + if (extendedblockstorage != Chunk.NULL_BLOCK_STORAGE && (!this.isFullChunk() || !extendedblockstorage.isEmpty()) && (p_189556_3_ & 1 << j) != 0) + { + i = i + extendedblockstorage.getData().getSerializedSize(); + i = i + extendedblockstorage.getBlockLight().getData().length; + + if (p_189556_2_) + { + i += extendedblockstorage.getSkyLight().getData().length; + } + } + } + + if (this.isFullChunk()) + { + i += chunkIn.getBiomeArray().length; + } + + return i; + } + + @SideOnly(Side.CLIENT) + public int getChunkX() + { + return this.chunkX; + } + + @SideOnly(Side.CLIENT) + public int getChunkZ() + { + return this.chunkZ; + } + + @SideOnly(Side.CLIENT) + public int getExtractedSize() + { + return this.availableSections; + } + + public boolean isFullChunk() + { + return this.fullChunk; + } + + @SideOnly(Side.CLIENT) + public List getTileEntityTags() + { + return this.tileEntityTags; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCloseWindow.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCloseWindow.java new file mode 100644 index 0000000..7bbda08 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCloseWindow.java @@ -0,0 +1,44 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; + +public class SPacketCloseWindow implements Packet +{ + private int windowId; + + public SPacketCloseWindow() + { + } + + public SPacketCloseWindow(int windowIdIn) + { + this.windowId = windowIdIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCloseWindow(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readUnsignedByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCollectItem.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCollectItem.java new file mode 100644 index 0000000..a2f86e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCollectItem.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketCollectItem implements Packet +{ + private int collectedItemEntityId; + private int entityId; + private int collectedQuantity; + + public SPacketCollectItem() + { + } + + public SPacketCollectItem(int p_i47316_1_, int p_i47316_2_, int p_i47316_3_) + { + this.collectedItemEntityId = p_i47316_1_; + this.entityId = p_i47316_2_; + this.collectedQuantity = p_i47316_3_; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.collectedItemEntityId = buf.readVarInt(); + this.entityId = buf.readVarInt(); + this.collectedQuantity = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.collectedItemEntityId); + buf.writeVarInt(this.entityId); + buf.writeVarInt(this.collectedQuantity); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCollectItem(this); + } + + @SideOnly(Side.CLIENT) + public int getCollectedItemEntityID() + { + return this.collectedItemEntityId; + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public int getAmount() + { + return this.collectedQuantity; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCombatEvent.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCombatEvent.java new file mode 100644 index 0000000..b36ad8f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCombatEvent.java @@ -0,0 +1,110 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.CombatTracker; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; + +public class SPacketCombatEvent implements Packet +{ + public SPacketCombatEvent.Event eventType; + public int playerId; + public int entityId; + public int duration; + public ITextComponent deathMessage; + + public SPacketCombatEvent() + { + } + + public SPacketCombatEvent(CombatTracker tracker, SPacketCombatEvent.Event eventIn) + { + this(tracker, eventIn, true); + } + + @SuppressWarnings("incomplete-switch") + public SPacketCombatEvent(CombatTracker tracker, SPacketCombatEvent.Event eventIn, boolean showDeathMessage) + { + this.eventType = eventIn; + EntityLivingBase entitylivingbase = tracker.getBestAttacker(); + + switch (eventIn) + { + case END_COMBAT: + this.duration = tracker.getCombatDuration(); + this.entityId = entitylivingbase == null ? -1 : entitylivingbase.getEntityId(); + break; + case ENTITY_DIED: + this.playerId = tracker.getFighter().getEntityId(); + this.entityId = entitylivingbase == null ? -1 : entitylivingbase.getEntityId(); + + if (showDeathMessage) + { + this.deathMessage = tracker.getDeathMessage(); + } + else + { + this.deathMessage = new TextComponentString(""); + } + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.eventType = (SPacketCombatEvent.Event)buf.readEnumValue(SPacketCombatEvent.Event.class); + + if (this.eventType == SPacketCombatEvent.Event.END_COMBAT) + { + this.duration = buf.readVarInt(); + this.entityId = buf.readInt(); + } + else if (this.eventType == SPacketCombatEvent.Event.ENTITY_DIED) + { + this.playerId = buf.readVarInt(); + this.entityId = buf.readInt(); + this.deathMessage = buf.readTextComponent(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.eventType); + + if (this.eventType == SPacketCombatEvent.Event.END_COMBAT) + { + buf.writeVarInt(this.duration); + buf.writeInt(this.entityId); + } + else if (this.eventType == SPacketCombatEvent.Event.ENTITY_DIED) + { + buf.writeVarInt(this.playerId); + buf.writeInt(this.entityId); + buf.writeTextComponent(this.deathMessage); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCombatEvent(this); + } + + public static enum Event + { + ENTER_COMBAT, + END_COMBAT, + ENTITY_DIED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketConfirmTransaction.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketConfirmTransaction.java new file mode 100644 index 0000000..6108eda --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketConfirmTransaction.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketConfirmTransaction implements Packet +{ + private int windowId; + private short actionNumber; + private boolean accepted; + + public SPacketConfirmTransaction() + { + } + + public SPacketConfirmTransaction(int windowIdIn, short actionNumberIn, boolean acceptedIn) + { + this.windowId = windowIdIn; + this.actionNumber = actionNumberIn; + this.accepted = acceptedIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleConfirmTransaction(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readUnsignedByte(); + this.actionNumber = buf.readShort(); + this.accepted = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeShort(this.actionNumber); + buf.writeBoolean(this.accepted); + } + + @SideOnly(Side.CLIENT) + public int getWindowId() + { + return this.windowId; + } + + @SideOnly(Side.CLIENT) + public short getActionNumber() + { + return this.actionNumber; + } + + @SideOnly(Side.CLIENT) + public boolean wasAccepted() + { + return this.accepted; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCooldown.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCooldown.java new file mode 100644 index 0000000..4096ead --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCooldown.java @@ -0,0 +1,63 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.item.Item; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketCooldown implements Packet +{ + private Item item; + private int ticks; + + public SPacketCooldown() + { + } + + public SPacketCooldown(Item itemIn, int ticksIn) + { + this.item = itemIn; + this.ticks = ticksIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.item = Item.getItemById(buf.readVarInt()); + this.ticks = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(Item.getIdFromItem(this.item)); + buf.writeVarInt(this.ticks); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCooldown(this); + } + + @SideOnly(Side.CLIENT) + public Item getItem() + { + return this.item; + } + + @SideOnly(Side.CLIENT) + public int getTicks() + { + return this.ticks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCustomPayload.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCustomPayload.java new file mode 100644 index 0000000..53b9c77 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCustomPayload.java @@ -0,0 +1,83 @@ +package net.minecraft.network.play.server; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketCustomPayload implements Packet +{ + private String channel; + private PacketBuffer data; + + public SPacketCustomPayload() + { + } + + public SPacketCustomPayload(String channelIn, PacketBuffer bufIn) + { + this.channel = channelIn; + this.data = bufIn; + + if (bufIn.writerIndex() > 1048576) + { + throw new IllegalArgumentException("Payload may not be larger than 1048576 bytes"); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.channel = buf.readString(20); + int i = buf.readableBytes(); + + if (i >= 0 && i <= 1048576) + { + this.data = new PacketBuffer(buf.readBytes(i)); + } + else + { + throw new IOException("Payload may not be larger than 1048576 bytes"); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.channel); + synchronized(this.data) { //This may be access multiple times, from multiple threads, lets be safe. + this.data.markReaderIndex(); + buf.writeBytes((ByteBuf)this.data); + this.data.resetReaderIndex(); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCustomPayload(this); + // Forge: fix network buffer leaks (MC-121884) + if (this.data != null) this.data.release(); + } + + @SideOnly(Side.CLIENT) + public String getChannelName() + { + return this.channel; + } + + @SideOnly(Side.CLIENT) + public PacketBuffer getBufferData() + { + return this.data; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCustomSound.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCustomSound.java new file mode 100644 index 0000000..49bb514 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketCustomSound.java @@ -0,0 +1,115 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.SoundCategory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; + +public class SPacketCustomSound implements Packet +{ + private String soundName; + private SoundCategory category; + private int x; + private int y = Integer.MAX_VALUE; + private int z; + private float volume; + private float pitch; + + public SPacketCustomSound() + { + } + + public SPacketCustomSound(String soundNameIn, SoundCategory categoryIn, double xIn, double yIn, double zIn, float volumeIn, float pitchIn) + { + Validate.notNull(soundNameIn, "name"); + this.soundName = soundNameIn; + this.category = categoryIn; + this.x = (int)(xIn * 8.0D); + this.y = (int)(yIn * 8.0D); + this.z = (int)(zIn * 8.0D); + this.volume = volumeIn; + this.pitch = pitchIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.soundName = buf.readString(256); + this.category = (SoundCategory)buf.readEnumValue(SoundCategory.class); + this.x = buf.readInt(); + this.y = buf.readInt(); + this.z = buf.readInt(); + this.volume = buf.readFloat(); + this.pitch = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.soundName); + buf.writeEnumValue(this.category); + buf.writeInt(this.x); + buf.writeInt(this.y); + buf.writeInt(this.z); + buf.writeFloat(this.volume); + buf.writeFloat(this.pitch); + } + + @SideOnly(Side.CLIENT) + public String getSoundName() + { + return this.soundName; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleCustomSound(this); + } + + @SideOnly(Side.CLIENT) + public SoundCategory getCategory() + { + return this.category; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return (double)((float)this.x / 8.0F); + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return (double)((float)this.y / 8.0F); + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return (double)((float)this.z / 8.0F); + } + + @SideOnly(Side.CLIENT) + public float getVolume() + { + return this.volume; + } + + @SideOnly(Side.CLIENT) + public float getPitch() + { + return this.pitch; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDestroyEntities.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDestroyEntities.java new file mode 100644 index 0000000..1679c81 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDestroyEntities.java @@ -0,0 +1,62 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketDestroyEntities implements Packet +{ + private int[] entityIDs; + + public SPacketDestroyEntities() + { + } + + public SPacketDestroyEntities(int... entityIdsIn) + { + this.entityIDs = entityIdsIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityIDs = new int[buf.readVarInt()]; + + for (int i = 0; i < this.entityIDs.length; ++i) + { + this.entityIDs[i] = buf.readVarInt(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityIDs.length); + + for (int i : this.entityIDs) + { + buf.writeVarInt(i); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleDestroyEntities(this); + } + + @SideOnly(Side.CLIENT) + public int[] getEntityIDs() + { + return this.entityIDs; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDisconnect.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDisconnect.java new file mode 100644 index 0000000..87e0168 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDisconnect.java @@ -0,0 +1,53 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketDisconnect implements Packet +{ + private ITextComponent reason; + + public SPacketDisconnect() + { + } + + public SPacketDisconnect(ITextComponent messageIn) + { + this.reason = messageIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.reason = buf.readTextComponent(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeTextComponent(this.reason); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleDisconnect(this); + } + + @SideOnly(Side.CLIENT) + public ITextComponent getReason() + { + return this.reason; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDisplayObjective.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDisplayObjective.java new file mode 100644 index 0000000..afc53c5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketDisplayObjective.java @@ -0,0 +1,71 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketDisplayObjective implements Packet +{ + private int position; + private String scoreName; + + public SPacketDisplayObjective() + { + } + + public SPacketDisplayObjective(int positionIn, ScoreObjective objective) + { + this.position = positionIn; + + if (objective == null) + { + this.scoreName = ""; + } + else + { + this.scoreName = objective.getName(); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.position = buf.readByte(); + this.scoreName = buf.readString(16); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.position); + buf.writeString(this.scoreName); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleDisplayObjective(this); + } + + @SideOnly(Side.CLIENT) + public int getPosition() + { + return this.position; + } + + @SideOnly(Side.CLIENT) + public String getName() + { + return this.scoreName; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEffect.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEffect.java new file mode 100644 index 0000000..3219d02 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEffect.java @@ -0,0 +1,85 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEffect implements Packet +{ + private int soundType; + private BlockPos soundPos; + /** can be a block/item id or other depending on the soundtype */ + private int soundData; + /** If true the sound is played across the server */ + private boolean serverWide; + + public SPacketEffect() + { + } + + public SPacketEffect(int soundTypeIn, BlockPos soundPosIn, int soundDataIn, boolean serverWideIn) + { + this.soundType = soundTypeIn; + this.soundPos = soundPosIn; + this.soundData = soundDataIn; + this.serverWide = serverWideIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.soundType = buf.readInt(); + this.soundPos = buf.readBlockPos(); + this.soundData = buf.readInt(); + this.serverWide = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.soundType); + buf.writeBlockPos(this.soundPos); + buf.writeInt(this.soundData); + buf.writeBoolean(this.serverWide); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEffect(this); + } + + @SideOnly(Side.CLIENT) + public boolean isSoundServerwide() + { + return this.serverWide; + } + + @SideOnly(Side.CLIENT) + public int getSoundType() + { + return this.soundType; + } + + @SideOnly(Side.CLIENT) + public int getSoundData() + { + return this.soundData; + } + + @SideOnly(Side.CLIENT) + public BlockPos getSoundPos() + { + return this.soundPos; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntity.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntity.java new file mode 100644 index 0000000..fb74bae --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntity.java @@ -0,0 +1,235 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntity implements Packet +{ + protected int entityId; + protected int posX; + protected int posY; + protected int posZ; + protected byte yaw; + protected byte pitch; + protected boolean onGround; + protected boolean rotating; + + public SPacketEntity() + { + } + + public SPacketEntity(int entityIdIn) + { + this.entityId = entityIdIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityMovement(this); + } + + public String toString() + { + return "Entity_" + super.toString(); + } + + @SideOnly(Side.CLIENT) + public Entity getEntity(World worldIn) + { + return worldIn.getEntityByID(this.entityId); + } + + @SideOnly(Side.CLIENT) + public int getX() + { + return this.posX; + } + + @SideOnly(Side.CLIENT) + public int getY() + { + return this.posY; + } + + @SideOnly(Side.CLIENT) + public int getZ() + { + return this.posZ; + } + + @SideOnly(Side.CLIENT) + public byte getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public byte getPitch() + { + return this.pitch; + } + + @SideOnly(Side.CLIENT) + public boolean isRotating() + { + return this.rotating; + } + + @SideOnly(Side.CLIENT) + public boolean getOnGround() + { + return this.onGround; + } + + public static class S15PacketEntityRelMove extends SPacketEntity + { + public S15PacketEntityRelMove() + { + } + + public S15PacketEntityRelMove(int entityIdIn, long xIn, long yIn, long zIn, boolean onGroundIn) + { + super(entityIdIn); + this.posX = (int)xIn; + this.posY = (int)yIn; + this.posZ = (int)zIn; + this.onGround = onGroundIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + super.readPacketData(buf); + this.posX = buf.readShort(); + this.posY = buf.readShort(); + this.posZ = buf.readShort(); + this.onGround = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + super.writePacketData(buf); + buf.writeShort(this.posX); + buf.writeShort(this.posY); + buf.writeShort(this.posZ); + buf.writeBoolean(this.onGround); + } + } + + public static class S16PacketEntityLook extends SPacketEntity + { + public S16PacketEntityLook() + { + this.rotating = true; + } + + public S16PacketEntityLook(int entityIdIn, byte yawIn, byte pitchIn, boolean onGroundIn) + { + super(entityIdIn); + this.yaw = yawIn; + this.pitch = pitchIn; + this.rotating = true; + this.onGround = onGroundIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + super.readPacketData(buf); + this.yaw = buf.readByte(); + this.pitch = buf.readByte(); + this.onGround = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + super.writePacketData(buf); + buf.writeByte(this.yaw); + buf.writeByte(this.pitch); + buf.writeBoolean(this.onGround); + } + } + + public static class S17PacketEntityLookMove extends SPacketEntity + { + public S17PacketEntityLookMove() + { + this.rotating = true; + } + + public S17PacketEntityLookMove(int entityIdIn, long xIn, long yIn, long zIn, byte yawIn, byte pitchIn, boolean onGroundIn) + { + super(entityIdIn); + this.posX = (int)xIn; + this.posY = (int)yIn; + this.posZ = (int)zIn; + this.yaw = yawIn; + this.pitch = pitchIn; + this.onGround = onGroundIn; + this.rotating = true; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + super.readPacketData(buf); + this.posX = buf.readShort(); + this.posY = buf.readShort(); + this.posZ = buf.readShort(); + this.yaw = buf.readByte(); + this.pitch = buf.readByte(); + this.onGround = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + super.writePacketData(buf); + buf.writeShort(this.posX); + buf.writeShort(this.posY); + buf.writeShort(this.posZ); + buf.writeByte(this.yaw); + buf.writeByte(this.pitch); + buf.writeBoolean(this.onGround); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityAttach.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityAttach.java new file mode 100644 index 0000000..4a03ae5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityAttach.java @@ -0,0 +1,64 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityAttach implements Packet +{ + private int entityId; + private int vehicleEntityId; + + public SPacketEntityAttach() + { + } + + public SPacketEntityAttach(Entity entityIn, @Nullable Entity vehicleIn) + { + this.entityId = entityIn.getEntityId(); + this.vehicleEntityId = vehicleIn != null ? vehicleIn.getEntityId() : -1; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readInt(); + this.vehicleEntityId = buf.readInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.entityId); + buf.writeInt(this.vehicleEntityId); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityAttach(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public int getVehicleEntityId() + { + return this.vehicleEntityId; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityEffect.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityEffect.java new file mode 100644 index 0000000..8101c8b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityEffect.java @@ -0,0 +1,125 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityEffect implements Packet +{ + private int entityId; + private byte effectId; + private byte amplifier; + private int duration; + private byte flags; + + public SPacketEntityEffect() + { + } + + public SPacketEntityEffect(int entityIdIn, PotionEffect effect) + { + this.entityId = entityIdIn; + this.effectId = (byte)(Potion.getIdFromPotion(effect.getPotion()) & 255); + this.amplifier = (byte)(effect.getAmplifier() & 255); + + if (effect.getDuration() > 32767) + { + this.duration = 32767; + } + else + { + this.duration = effect.getDuration(); + } + + this.flags = 0; + + if (effect.getIsAmbient()) + { + this.flags = (byte)(this.flags | 1); + } + + if (effect.doesShowParticles()) + { + this.flags = (byte)(this.flags | 2); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.effectId = buf.readByte(); + this.amplifier = buf.readByte(); + this.duration = buf.readVarInt(); + this.flags = buf.readByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeByte(this.effectId); + buf.writeByte(this.amplifier); + buf.writeVarInt(this.duration); + buf.writeByte(this.flags); + } + + @SideOnly(Side.CLIENT) + public boolean isMaxDuration() + { + return this.duration == 32767; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityEffect(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public byte getEffectId() + { + return this.effectId; + } + + @SideOnly(Side.CLIENT) + public byte getAmplifier() + { + return this.amplifier; + } + + @SideOnly(Side.CLIENT) + public int getDuration() + { + return this.duration; + } + + @SideOnly(Side.CLIENT) + public boolean doesShowParticles() + { + return (this.flags & 2) == 2; + } + + @SideOnly(Side.CLIENT) + public boolean getIsAmbient() + { + return (this.flags & 1) == 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityEquipment.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityEquipment.java new file mode 100644 index 0000000..ef17b4c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityEquipment.java @@ -0,0 +1,74 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityEquipment implements Packet +{ + private int entityID; + private EntityEquipmentSlot equipmentSlot; + private ItemStack itemStack = ItemStack.EMPTY; + + public SPacketEntityEquipment() + { + } + + public SPacketEntityEquipment(int entityIdIn, EntityEquipmentSlot equipmentSlotIn, ItemStack itemStackIn) + { + this.entityID = entityIdIn; + this.equipmentSlot = equipmentSlotIn; + this.itemStack = itemStackIn.copy(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityID = buf.readVarInt(); + this.equipmentSlot = (EntityEquipmentSlot)buf.readEnumValue(EntityEquipmentSlot.class); + this.itemStack = buf.readItemStack(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityID); + buf.writeEnumValue(this.equipmentSlot); + buf.writeItemStack(this.itemStack); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityEquipment(this); + } + + @SideOnly(Side.CLIENT) + public ItemStack getItemStack() + { + return this.itemStack; + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityID; + } + + @SideOnly(Side.CLIENT) + public EntityEquipmentSlot getEquipmentSlot() + { + return this.equipmentSlot; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityHeadLook.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityHeadLook.java new file mode 100644 index 0000000..c88515e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityHeadLook.java @@ -0,0 +1,64 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityHeadLook implements Packet +{ + private int entityId; + private byte yaw; + + public SPacketEntityHeadLook() + { + } + + public SPacketEntityHeadLook(Entity entityIn, byte yawIn) + { + this.entityId = entityIn.getEntityId(); + this.yaw = yawIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.yaw = buf.readByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeByte(this.yaw); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityHeadLook(this); + } + + @SideOnly(Side.CLIENT) + public Entity getEntity(World worldIn) + { + return worldIn.getEntityByID(this.entityId); + } + + @SideOnly(Side.CLIENT) + public byte getYaw() + { + return this.yaw; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityMetadata.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityMetadata.java new file mode 100644 index 0000000..9e1ffbe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityMetadata.java @@ -0,0 +1,73 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.List; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityMetadata implements Packet +{ + private int entityId; + private List < EntityDataManager.DataEntry> dataManagerEntries; + + public SPacketEntityMetadata() + { + } + + public SPacketEntityMetadata(int entityIdIn, EntityDataManager dataManagerIn, boolean sendAll) + { + this.entityId = entityIdIn; + + if (sendAll) + { + this.dataManagerEntries = dataManagerIn.getAll(); + dataManagerIn.setClean(); + } + else + { + this.dataManagerEntries = dataManagerIn.getDirty(); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.dataManagerEntries = EntityDataManager.readEntries(buf); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + EntityDataManager.writeEntries(this.dataManagerEntries, buf); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityMetadata(this); + } + + @SideOnly(Side.CLIENT) + public List < EntityDataManager.DataEntry> getDataManagerEntries() + { + return this.dataManagerEntries; + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityProperties.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityProperties.java new file mode 100644 index 0000000..938d1dc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityProperties.java @@ -0,0 +1,131 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.UUID; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityProperties implements Packet +{ + private int entityId; + private final List snapshots = Lists.newArrayList(); + + public SPacketEntityProperties() + { + } + + public SPacketEntityProperties(int entityIdIn, Collection instances) + { + this.entityId = entityIdIn; + + for (IAttributeInstance iattributeinstance : instances) + { + this.snapshots.add(new SPacketEntityProperties.Snapshot(iattributeinstance.getAttribute().getName(), iattributeinstance.getBaseValue(), iattributeinstance.getModifiers())); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + int i = buf.readInt(); + + for (int j = 0; j < i; ++j) + { + String s = buf.readString(64); + double d0 = buf.readDouble(); + List list = Lists.newArrayList(); + int k = buf.readVarInt(); + + for (int l = 0; l < k; ++l) + { + UUID uuid = buf.readUniqueId(); + list.add(new AttributeModifier(uuid, "Unknown synced attribute modifier", buf.readDouble(), buf.readByte())); + } + + this.snapshots.add(new SPacketEntityProperties.Snapshot(s, d0, list)); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeInt(this.snapshots.size()); + + for (SPacketEntityProperties.Snapshot spacketentityproperties$snapshot : this.snapshots) + { + buf.writeString(spacketentityproperties$snapshot.getName()); + buf.writeDouble(spacketentityproperties$snapshot.getBaseValue()); + buf.writeVarInt(spacketentityproperties$snapshot.getModifiers().size()); + + for (AttributeModifier attributemodifier : spacketentityproperties$snapshot.getModifiers()) + { + buf.writeUniqueId(attributemodifier.getID()); + buf.writeDouble(attributemodifier.getAmount()); + buf.writeByte(attributemodifier.getOperation()); + } + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityProperties(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public List getSnapshots() + { + return this.snapshots; + } + + public class Snapshot + { + private final String name; + private final double baseValue; + private final Collection modifiers; + + public Snapshot(String nameIn, double baseValueIn, Collection modifiersIn) + { + this.name = nameIn; + this.baseValue = baseValueIn; + this.modifiers = modifiersIn; + } + + public String getName() + { + return this.name; + } + + public double getBaseValue() + { + return this.baseValue; + } + + public Collection getModifiers() + { + return this.modifiers; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityStatus.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityStatus.java new file mode 100644 index 0000000..d009802 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityStatus.java @@ -0,0 +1,64 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityStatus implements Packet +{ + private int entityId; + private byte logicOpcode; + + public SPacketEntityStatus() + { + } + + public SPacketEntityStatus(Entity entityIn, byte opcodeIn) + { + this.entityId = entityIn.getEntityId(); + this.logicOpcode = opcodeIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readInt(); + this.logicOpcode = buf.readByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.entityId); + buf.writeByte(this.logicOpcode); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityStatus(this); + } + + @SideOnly(Side.CLIENT) + public Entity getEntity(World worldIn) + { + return worldIn.getEntityByID(this.entityId); + } + + @SideOnly(Side.CLIENT) + public byte getOpCode() + { + return this.logicOpcode; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityTeleport.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityTeleport.java new file mode 100644 index 0000000..d3d47d3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityTeleport.java @@ -0,0 +1,113 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityTeleport implements Packet +{ + private int entityId; + private double posX; + private double posY; + private double posZ; + private byte yaw; + private byte pitch; + private boolean onGround; + + public SPacketEntityTeleport() + { + } + + public SPacketEntityTeleport(Entity entityIn) + { + this.entityId = entityIn.getEntityId(); + this.posX = entityIn.posX; + this.posY = entityIn.posY; + this.posZ = entityIn.posZ; + this.yaw = (byte)((int)(entityIn.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(entityIn.rotationPitch * 256.0F / 360.0F)); + this.onGround = entityIn.onGround; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.posX = buf.readDouble(); + this.posY = buf.readDouble(); + this.posZ = buf.readDouble(); + this.yaw = buf.readByte(); + this.pitch = buf.readByte(); + this.onGround = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeDouble(this.posX); + buf.writeDouble(this.posY); + buf.writeDouble(this.posZ); + buf.writeByte(this.yaw); + buf.writeByte(this.pitch); + buf.writeBoolean(this.onGround); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityTeleport(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.posX; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.posY; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.posZ; + } + + @SideOnly(Side.CLIENT) + public byte getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public byte getPitch() + { + return this.pitch; + } + + @SideOnly(Side.CLIENT) + public boolean getOnGround() + { + return this.onGround; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityVelocity.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityVelocity.java new file mode 100644 index 0000000..d8cba55 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketEntityVelocity.java @@ -0,0 +1,120 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketEntityVelocity implements Packet +{ + private int entityID; + private int motionX; + private int motionY; + private int motionZ; + + public SPacketEntityVelocity() + { + } + + public SPacketEntityVelocity(Entity entityIn) + { + this(entityIn.getEntityId(), entityIn.motionX, entityIn.motionY, entityIn.motionZ); + } + + public SPacketEntityVelocity(int entityIdIn, double motionXIn, double motionYIn, double motionZIn) + { + this.entityID = entityIdIn; + double d0 = 3.9D; + + if (motionXIn < -3.9D) + { + motionXIn = -3.9D; + } + + if (motionYIn < -3.9D) + { + motionYIn = -3.9D; + } + + if (motionZIn < -3.9D) + { + motionZIn = -3.9D; + } + + if (motionXIn > 3.9D) + { + motionXIn = 3.9D; + } + + if (motionYIn > 3.9D) + { + motionYIn = 3.9D; + } + + if (motionZIn > 3.9D) + { + motionZIn = 3.9D; + } + + this.motionX = (int)(motionXIn * 8000.0D); + this.motionY = (int)(motionYIn * 8000.0D); + this.motionZ = (int)(motionZIn * 8000.0D); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityID = buf.readVarInt(); + this.motionX = buf.readShort(); + this.motionY = buf.readShort(); + this.motionZ = buf.readShort(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityID); + buf.writeShort(this.motionX); + buf.writeShort(this.motionY); + buf.writeShort(this.motionZ); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleEntityVelocity(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityID; + } + + @SideOnly(Side.CLIENT) + public int getMotionX() + { + return this.motionX; + } + + @SideOnly(Side.CLIENT) + public int getMotionY() + { + return this.motionY; + } + + @SideOnly(Side.CLIENT) + public int getMotionZ() + { + return this.motionZ; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketExplosion.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketExplosion.java new file mode 100644 index 0000000..b8b21e7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketExplosion.java @@ -0,0 +1,157 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketExplosion implements Packet +{ + private double posX; + private double posY; + private double posZ; + private float strength; + private List affectedBlockPositions; + private float motionX; + private float motionY; + private float motionZ; + + public SPacketExplosion() + { + } + + public SPacketExplosion(double xIn, double yIn, double zIn, float strengthIn, List affectedBlockPositionsIn, Vec3d motion) + { + this.posX = xIn; + this.posY = yIn; + this.posZ = zIn; + this.strength = strengthIn; + this.affectedBlockPositions = Lists.newArrayList(affectedBlockPositionsIn); + + if (motion != null) + { + this.motionX = (float)motion.x; + this.motionY = (float)motion.y; + this.motionZ = (float)motion.z; + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.posX = (double)buf.readFloat(); + this.posY = (double)buf.readFloat(); + this.posZ = (double)buf.readFloat(); + this.strength = buf.readFloat(); + int i = buf.readInt(); + this.affectedBlockPositions = Lists.newArrayListWithCapacity(i); + int j = (int)this.posX; + int k = (int)this.posY; + int l = (int)this.posZ; + + for (int i1 = 0; i1 < i; ++i1) + { + int j1 = buf.readByte() + j; + int k1 = buf.readByte() + k; + int l1 = buf.readByte() + l; + this.affectedBlockPositions.add(new BlockPos(j1, k1, l1)); + } + + this.motionX = buf.readFloat(); + this.motionY = buf.readFloat(); + this.motionZ = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeFloat((float)this.posX); + buf.writeFloat((float)this.posY); + buf.writeFloat((float)this.posZ); + buf.writeFloat(this.strength); + buf.writeInt(this.affectedBlockPositions.size()); + int i = (int)this.posX; + int j = (int)this.posY; + int k = (int)this.posZ; + + for (BlockPos blockpos : this.affectedBlockPositions) + { + int l = blockpos.getX() - i; + int i1 = blockpos.getY() - j; + int j1 = blockpos.getZ() - k; + buf.writeByte(l); + buf.writeByte(i1); + buf.writeByte(j1); + } + + buf.writeFloat(this.motionX); + buf.writeFloat(this.motionY); + buf.writeFloat(this.motionZ); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleExplosion(this); + } + + @SideOnly(Side.CLIENT) + public float getMotionX() + { + return this.motionX; + } + + @SideOnly(Side.CLIENT) + public float getMotionY() + { + return this.motionY; + } + + @SideOnly(Side.CLIENT) + public float getMotionZ() + { + return this.motionZ; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.posX; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.posY; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.posZ; + } + + @SideOnly(Side.CLIENT) + public float getStrength() + { + return this.strength; + } + + @SideOnly(Side.CLIENT) + public List getAffectedBlockPositions() + { + return this.affectedBlockPositions; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketHeldItemChange.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketHeldItemChange.java new file mode 100644 index 0000000..208b558 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketHeldItemChange.java @@ -0,0 +1,52 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketHeldItemChange implements Packet +{ + private int heldItemHotbarIndex; + + public SPacketHeldItemChange() + { + } + + public SPacketHeldItemChange(int hotbarIndexIn) + { + this.heldItemHotbarIndex = hotbarIndexIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.heldItemHotbarIndex = buf.readByte(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.heldItemHotbarIndex); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleHeldItemChange(this); + } + + @SideOnly(Side.CLIENT) + public int getHeldItemHotbarIndex() + { + return this.heldItemHotbarIndex; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketJoinGame.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketJoinGame.java new file mode 100644 index 0000000..cc47019 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketJoinGame.java @@ -0,0 +1,139 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketJoinGame implements Packet +{ + private int playerId; + private boolean hardcoreMode; + private GameType gameType; + private int dimension; + private EnumDifficulty difficulty; + private int maxPlayers; + private WorldType worldType; + private boolean reducedDebugInfo; + + public SPacketJoinGame() + { + } + + public SPacketJoinGame(int playerIdIn, GameType gameTypeIn, boolean hardcoreModeIn, int dimensionIn, EnumDifficulty difficultyIn, int maxPlayersIn, WorldType worldTypeIn, boolean reducedDebugInfoIn) + { + this.playerId = playerIdIn; + this.dimension = dimensionIn; + this.difficulty = difficultyIn; + this.gameType = gameTypeIn; + this.maxPlayers = maxPlayersIn; + this.hardcoreMode = hardcoreModeIn; + this.worldType = worldTypeIn; + this.reducedDebugInfo = reducedDebugInfoIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.playerId = buf.readInt(); + int i = buf.readUnsignedByte(); + this.hardcoreMode = (i & 8) == 8; + i = i & -9; + this.gameType = GameType.getByID(i); + this.dimension = buf.readInt(); + this.difficulty = EnumDifficulty.getDifficultyEnum(buf.readUnsignedByte()); + this.maxPlayers = buf.readUnsignedByte(); + this.worldType = WorldType.parseWorldType(buf.readString(16)); + + if (this.worldType == null) + { + this.worldType = WorldType.DEFAULT; + } + + this.reducedDebugInfo = buf.readBoolean(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.playerId); + int i = this.gameType.getID(); + + if (this.hardcoreMode) + { + i |= 8; + } + + buf.writeByte(i); + buf.writeInt(this.dimension); + buf.writeByte(this.difficulty.getDifficultyId()); + buf.writeByte(this.maxPlayers); + buf.writeString(this.worldType.getName()); + buf.writeBoolean(this.reducedDebugInfo); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleJoinGame(this); + } + + @SideOnly(Side.CLIENT) + public int getPlayerId() + { + return this.playerId; + } + + @SideOnly(Side.CLIENT) + public boolean isHardcoreMode() + { + return this.hardcoreMode; + } + + @SideOnly(Side.CLIENT) + public GameType getGameType() + { + return this.gameType; + } + + @SideOnly(Side.CLIENT) + public int getDimension() + { + return this.dimension; + } + + @SideOnly(Side.CLIENT) + public EnumDifficulty getDifficulty() + { + return this.difficulty; + } + + @SideOnly(Side.CLIENT) + public int getMaxPlayers() + { + return this.maxPlayers; + } + + @SideOnly(Side.CLIENT) + public WorldType getWorldType() + { + return this.worldType; + } + + @SideOnly(Side.CLIENT) + public boolean isReducedDebugInfo() + { + return this.reducedDebugInfo; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketKeepAlive.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketKeepAlive.java new file mode 100644 index 0000000..1430392 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketKeepAlive.java @@ -0,0 +1,52 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketKeepAlive implements Packet +{ + private long id; + + public SPacketKeepAlive() + { + } + + public SPacketKeepAlive(long idIn) + { + this.id = idIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleKeepAlive(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.id = buf.readLong(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeLong(this.id); + } + + @SideOnly(Side.CLIENT) + public long getId() + { + return this.id; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMaps.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMaps.java new file mode 100644 index 0000000..95f0c57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMaps.java @@ -0,0 +1,143 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.Collection; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.storage.MapData; +import net.minecraft.world.storage.MapDecoration; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketMaps implements Packet +{ + private int mapId; + private byte mapScale; + private boolean trackingPosition; + private MapDecoration[] icons; + private int minX; + private int minZ; + private int columns; + private int rows; + private byte[] mapDataBytes; + + public SPacketMaps() + { + } + + public SPacketMaps(int mapIdIn, byte mapScaleIn, boolean trackingPositionIn, Collection iconsIn, byte[] p_i46937_5_, int minXIn, int minZIn, int columnsIn, int rowsIn) + { + this.mapId = mapIdIn; + this.mapScale = mapScaleIn; + this.trackingPosition = trackingPositionIn; + this.icons = (MapDecoration[])iconsIn.toArray(new MapDecoration[iconsIn.size()]); + this.minX = minXIn; + this.minZ = minZIn; + this.columns = columnsIn; + this.rows = rowsIn; + this.mapDataBytes = new byte[columnsIn * rowsIn]; + + for (int i = 0; i < columnsIn; ++i) + { + for (int j = 0; j < rowsIn; ++j) + { + this.mapDataBytes[i + j * columnsIn] = p_i46937_5_[minXIn + i + (minZIn + j) * 128]; + } + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.mapId = buf.readVarInt(); + this.mapScale = buf.readByte(); + this.trackingPosition = buf.readBoolean(); + this.icons = new MapDecoration[buf.readVarInt()]; + + for (int i = 0; i < this.icons.length; ++i) + { + short short1 = (short)buf.readByte(); + this.icons[i] = new MapDecoration(MapDecoration.Type.byIcon((byte)(short1 >> 4 & 15)), buf.readByte(), buf.readByte(), (byte)(short1 & 15)); + } + + this.columns = buf.readUnsignedByte(); + + if (this.columns > 0) + { + this.rows = buf.readUnsignedByte(); + this.minX = buf.readUnsignedByte(); + this.minZ = buf.readUnsignedByte(); + this.mapDataBytes = buf.readByteArray(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.mapId); + buf.writeByte(this.mapScale); + buf.writeBoolean(this.trackingPosition); + buf.writeVarInt(this.icons.length); + + for (MapDecoration mapdecoration : this.icons) + { + buf.writeByte((mapdecoration.getImage() & 15) << 4 | mapdecoration.getRotation() & 15); + buf.writeByte(mapdecoration.getX()); + buf.writeByte(mapdecoration.getY()); + } + + buf.writeByte(this.columns); + + if (this.columns > 0) + { + buf.writeByte(this.rows); + buf.writeByte(this.minX); + buf.writeByte(this.minZ); + buf.writeByteArray(this.mapDataBytes); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleMaps(this); + } + + @SideOnly(Side.CLIENT) + public int getMapId() + { + return this.mapId; + } + + /** + * Sets new MapData from the packet to given MapData param + */ + @SideOnly(Side.CLIENT) + public void setMapdataTo(MapData mapdataIn) + { + mapdataIn.scale = this.mapScale; + mapdataIn.trackingPosition = this.trackingPosition; + mapdataIn.mapDecorations.clear(); + + for (int i = 0; i < this.icons.length; ++i) + { + MapDecoration mapdecoration = this.icons[i]; + mapdataIn.mapDecorations.put("icon-" + i, mapdecoration); + } + + for (int j = 0; j < this.columns; ++j) + { + for (int k = 0; k < this.rows; ++k) + { + mapdataIn.colors[this.minX + j + (this.minZ + k) * 128] = this.mapDataBytes[j + k * this.columns]; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMoveVehicle.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMoveVehicle.java new file mode 100644 index 0000000..b3f6a9f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMoveVehicle.java @@ -0,0 +1,93 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketMoveVehicle implements Packet +{ + private double x; + private double y; + private double z; + private float yaw; + private float pitch; + + public SPacketMoveVehicle() + { + } + + public SPacketMoveVehicle(Entity entityIn) + { + this.x = entityIn.posX; + this.y = entityIn.posY; + this.z = entityIn.posZ; + this.yaw = entityIn.rotationYaw; + this.pitch = entityIn.rotationPitch; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.yaw = buf.readFloat(); + this.pitch = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeFloat(this.yaw); + buf.writeFloat(this.pitch); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleMoveVehicle(this); + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.z; + } + + @SideOnly(Side.CLIENT) + public float getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public float getPitch() + { + return this.pitch; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMultiBlockChange.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMultiBlockChange.java new file mode 100644 index 0000000..2dd659c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketMultiBlockChange.java @@ -0,0 +1,112 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketMultiBlockChange implements Packet +{ + private ChunkPos chunkPos; + private SPacketMultiBlockChange.BlockUpdateData[] changedBlocks; + + public SPacketMultiBlockChange() + { + } + + public SPacketMultiBlockChange(int p_i46959_1_, short[] p_i46959_2_, Chunk p_i46959_3_) + { + this.chunkPos = new ChunkPos(p_i46959_3_.x, p_i46959_3_.z); + this.changedBlocks = new SPacketMultiBlockChange.BlockUpdateData[p_i46959_1_]; + + for (int i = 0; i < this.changedBlocks.length; ++i) + { + this.changedBlocks[i] = new SPacketMultiBlockChange.BlockUpdateData(p_i46959_2_[i], p_i46959_3_); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.chunkPos = new ChunkPos(buf.readInt(), buf.readInt()); + this.changedBlocks = new SPacketMultiBlockChange.BlockUpdateData[buf.readVarInt()]; + + for (int i = 0; i < this.changedBlocks.length; ++i) + { + this.changedBlocks[i] = new SPacketMultiBlockChange.BlockUpdateData(buf.readShort(), Block.BLOCK_STATE_IDS.getByValue(buf.readVarInt())); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.chunkPos.x); + buf.writeInt(this.chunkPos.z); + buf.writeVarInt(this.changedBlocks.length); + + for (SPacketMultiBlockChange.BlockUpdateData spacketmultiblockchange$blockupdatedata : this.changedBlocks) + { + buf.writeShort(spacketmultiblockchange$blockupdatedata.getOffset()); + buf.writeVarInt(Block.BLOCK_STATE_IDS.get(spacketmultiblockchange$blockupdatedata.getBlockState())); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleMultiBlockChange(this); + } + + @SideOnly(Side.CLIENT) + public SPacketMultiBlockChange.BlockUpdateData[] getChangedBlocks() + { + return this.changedBlocks; + } + + public class BlockUpdateData + { + /** contains the bitshifted location of the block in the chunk */ + private final short offset; + private final IBlockState blockState; + + public BlockUpdateData(short p_i46544_2_, IBlockState p_i46544_3_) + { + this.offset = p_i46544_2_; + this.blockState = p_i46544_3_; + } + + public BlockUpdateData(short p_i46545_2_, Chunk p_i46545_3_) + { + this.offset = p_i46545_2_; + this.blockState = p_i46545_3_.getBlockState(this.getPos()); + } + + public BlockPos getPos() + { + return new BlockPos(SPacketMultiBlockChange.this.chunkPos.getBlock(this.offset >> 12 & 15, this.offset & 255, this.offset >> 8 & 15)); + } + + public short getOffset() + { + return this.offset; + } + + public IBlockState getBlockState() + { + return this.blockState; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketOpenWindow.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketOpenWindow.java new file mode 100644 index 0000000..51d46a5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketOpenWindow.java @@ -0,0 +1,117 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketOpenWindow implements Packet +{ + private int windowId; + private String inventoryType; + private ITextComponent windowTitle; + private int slotCount; + private int entityId; + + public SPacketOpenWindow() + { + } + + public SPacketOpenWindow(int windowIdIn, String inventoryTypeIn, ITextComponent windowTitleIn) + { + this(windowIdIn, inventoryTypeIn, windowTitleIn, 0); + } + + public SPacketOpenWindow(int windowIdIn, String inventoryTypeIn, ITextComponent windowTitleIn, int slotCountIn) + { + this.windowId = windowIdIn; + this.inventoryType = inventoryTypeIn; + this.windowTitle = windowTitleIn; + this.slotCount = slotCountIn; + } + + public SPacketOpenWindow(int windowIdIn, String inventoryTypeIn, ITextComponent windowTitleIn, int slotCountIn, int entityIdIn) + { + this(windowIdIn, inventoryTypeIn, windowTitleIn, slotCountIn); + this.entityId = entityIdIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleOpenWindow(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readUnsignedByte(); + this.inventoryType = buf.readString(32); + this.windowTitle = buf.readTextComponent(); + this.slotCount = buf.readUnsignedByte(); + + if (this.inventoryType.equals("EntityHorse")) + { + this.entityId = buf.readInt(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeString(this.inventoryType); + buf.writeTextComponent(this.windowTitle); + buf.writeByte(this.slotCount); + + if (this.inventoryType.equals("EntityHorse")) + { + buf.writeInt(this.entityId); + } + } + + @SideOnly(Side.CLIENT) + public int getWindowId() + { + return this.windowId; + } + + @SideOnly(Side.CLIENT) + public String getGuiId() + { + return this.inventoryType; + } + + @SideOnly(Side.CLIENT) + public ITextComponent getWindowTitle() + { + return this.windowTitle; + } + + @SideOnly(Side.CLIENT) + public int getSlotCount() + { + return this.slotCount; + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public boolean hasSlots() + { + return this.slotCount > 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketParticles.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketParticles.java new file mode 100644 index 0000000..681fb49 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketParticles.java @@ -0,0 +1,199 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.EnumParticleTypes; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketParticles implements Packet +{ + private EnumParticleTypes particleType; + private float xCoord; + private float yCoord; + private float zCoord; + private float xOffset; + private float yOffset; + private float zOffset; + private float particleSpeed; + private int particleCount; + private boolean longDistance; + /** These are the block/item ids and possibly metaData ids that are used to color or texture the particle. */ + private int[] particleArguments; + + public SPacketParticles() + { + } + + public SPacketParticles(EnumParticleTypes particleIn, boolean longDistanceIn, float xIn, float yIn, float zIn, float xOffsetIn, float yOffsetIn, float zOffsetIn, float speedIn, int countIn, int... argumentsIn) + { + this.particleType = particleIn; + this.longDistance = longDistanceIn; + this.xCoord = xIn; + this.yCoord = yIn; + this.zCoord = zIn; + this.xOffset = xOffsetIn; + this.yOffset = yOffsetIn; + this.zOffset = zOffsetIn; + this.particleSpeed = speedIn; + this.particleCount = countIn; + this.particleArguments = argumentsIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.particleType = EnumParticleTypes.getParticleFromId(buf.readInt()); + + if (this.particleType == null) + { + this.particleType = EnumParticleTypes.BARRIER; + } + + this.longDistance = buf.readBoolean(); + this.xCoord = buf.readFloat(); + this.yCoord = buf.readFloat(); + this.zCoord = buf.readFloat(); + this.xOffset = buf.readFloat(); + this.yOffset = buf.readFloat(); + this.zOffset = buf.readFloat(); + this.particleSpeed = buf.readFloat(); + this.particleCount = buf.readInt(); + int i = this.particleType.getArgumentCount(); + this.particleArguments = new int[i]; + + for (int j = 0; j < i; ++j) + { + this.particleArguments[j] = buf.readVarInt(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.particleType.getParticleID()); + buf.writeBoolean(this.longDistance); + buf.writeFloat(this.xCoord); + buf.writeFloat(this.yCoord); + buf.writeFloat(this.zCoord); + buf.writeFloat(this.xOffset); + buf.writeFloat(this.yOffset); + buf.writeFloat(this.zOffset); + buf.writeFloat(this.particleSpeed); + buf.writeInt(this.particleCount); + int i = this.particleType.getArgumentCount(); + + for (int j = 0; j < i; ++j) + { + buf.writeVarInt(this.particleArguments[j]); + } + } + + @SideOnly(Side.CLIENT) + public EnumParticleTypes getParticleType() + { + return this.particleType; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleParticles(this); + } + + @SideOnly(Side.CLIENT) + public boolean isLongDistance() + { + return this.longDistance; + } + + /** + * Gets the x coordinate to spawn the particle. + */ + @SideOnly(Side.CLIENT) + public double getXCoordinate() + { + return (double)this.xCoord; + } + + /** + * Gets the y coordinate to spawn the particle. + */ + @SideOnly(Side.CLIENT) + public double getYCoordinate() + { + return (double)this.yCoord; + } + + /** + * Gets the z coordinate to spawn the particle. + */ + @SideOnly(Side.CLIENT) + public double getZCoordinate() + { + return (double)this.zCoord; + } + + /** + * Gets the x coordinate offset for the particle. The particle may use the offset for particle spread. + */ + @SideOnly(Side.CLIENT) + public float getXOffset() + { + return this.xOffset; + } + + /** + * Gets the y coordinate offset for the particle. The particle may use the offset for particle spread. + */ + @SideOnly(Side.CLIENT) + public float getYOffset() + { + return this.yOffset; + } + + /** + * Gets the z coordinate offset for the particle. The particle may use the offset for particle spread. + */ + @SideOnly(Side.CLIENT) + public float getZOffset() + { + return this.zOffset; + } + + /** + * Gets the speed of the particle animation (used in client side rendering). + */ + @SideOnly(Side.CLIENT) + public float getParticleSpeed() + { + return this.particleSpeed; + } + + /** + * Gets the amount of particles to spawn + */ + @SideOnly(Side.CLIENT) + public int getParticleCount() + { + return this.particleCount; + } + + /** + * Gets the particle arguments. Some particles rely on block and/or item ids and sometimes metadata ids to color or + * texture the particle. + */ + @SideOnly(Side.CLIENT) + public int[] getParticleArgs() + { + return this.particleArguments; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlaceGhostRecipe.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlaceGhostRecipe.java new file mode 100644 index 0000000..dee8bf3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlaceGhostRecipe.java @@ -0,0 +1,64 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketPlaceGhostRecipe implements Packet +{ + private int field_194314_a; + private IRecipe field_194315_b; + + public SPacketPlaceGhostRecipe() + { + } + + public SPacketPlaceGhostRecipe(int p_i47615_1_, IRecipe p_i47615_2_) + { + this.field_194314_a = p_i47615_1_; + this.field_194315_b = p_i47615_2_; + } + + @SideOnly(Side.CLIENT) + public IRecipe func_194311_a() + { + return this.field_194315_b; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.field_194314_a = buf.readByte(); + this.field_194315_b = CraftingManager.getRecipeById(buf.readVarInt()); + } + + @SideOnly(Side.CLIENT) + public int func_194313_b() + { + return this.field_194314_a; + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.field_194314_a); + buf.writeVarInt(CraftingManager.getIDForRecipe(this.field_194315_b)); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.func_194307_a(this); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerAbilities.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerAbilities.java new file mode 100644 index 0000000..10787cd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerAbilities.java @@ -0,0 +1,149 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.player.PlayerCapabilities; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketPlayerAbilities implements Packet +{ + private boolean invulnerable; + private boolean flying; + private boolean allowFlying; + private boolean creativeMode; + private float flySpeed; + private float walkSpeed; + + public SPacketPlayerAbilities() + { + } + + public SPacketPlayerAbilities(PlayerCapabilities capabilities) + { + this.setInvulnerable(capabilities.disableDamage); + this.setFlying(capabilities.isFlying); + this.setAllowFlying(capabilities.allowFlying); + this.setCreativeMode(capabilities.isCreativeMode); + this.setFlySpeed(capabilities.getFlySpeed()); + this.setWalkSpeed(capabilities.getWalkSpeed()); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + byte b0 = buf.readByte(); + this.setInvulnerable((b0 & 1) > 0); + this.setFlying((b0 & 2) > 0); + this.setAllowFlying((b0 & 4) > 0); + this.setCreativeMode((b0 & 8) > 0); + this.setFlySpeed(buf.readFloat()); + this.setWalkSpeed(buf.readFloat()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + byte b0 = 0; + + if (this.isInvulnerable()) + { + b0 = (byte)(b0 | 1); + } + + if (this.isFlying()) + { + b0 = (byte)(b0 | 2); + } + + if (this.isAllowFlying()) + { + b0 = (byte)(b0 | 4); + } + + if (this.isCreativeMode()) + { + b0 = (byte)(b0 | 8); + } + + buf.writeByte(b0); + buf.writeFloat(this.flySpeed); + buf.writeFloat(this.walkSpeed); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handlePlayerAbilities(this); + } + + public boolean isInvulnerable() + { + return this.invulnerable; + } + + public void setInvulnerable(boolean isInvulnerable) + { + this.invulnerable = isInvulnerable; + } + + public boolean isFlying() + { + return this.flying; + } + + public void setFlying(boolean isFlying) + { + this.flying = isFlying; + } + + public boolean isAllowFlying() + { + return this.allowFlying; + } + + public void setAllowFlying(boolean isAllowFlying) + { + this.allowFlying = isAllowFlying; + } + + public boolean isCreativeMode() + { + return this.creativeMode; + } + + public void setCreativeMode(boolean isCreativeMode) + { + this.creativeMode = isCreativeMode; + } + + @SideOnly(Side.CLIENT) + public float getFlySpeed() + { + return this.flySpeed; + } + + public void setFlySpeed(float flySpeedIn) + { + this.flySpeed = flySpeedIn; + } + + @SideOnly(Side.CLIENT) + public float getWalkSpeed() + { + return this.walkSpeed; + } + + public void setWalkSpeed(float walkSpeedIn) + { + this.walkSpeed = walkSpeedIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.java new file mode 100644 index 0000000..c213197 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerListHeaderFooter.java @@ -0,0 +1,53 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketPlayerListHeaderFooter implements Packet +{ + private ITextComponent header; + private ITextComponent footer; + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.header = buf.readTextComponent(); + this.footer = buf.readTextComponent(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeTextComponent(this.header); + buf.writeTextComponent(this.footer); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handlePlayerListHeaderFooter(this); + } + + @SideOnly(Side.CLIENT) + public ITextComponent getHeader() + { + return this.header; + } + + @SideOnly(Side.CLIENT) + public ITextComponent getFooter() + { + return this.footer; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerListItem.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerListItem.java new file mode 100644 index 0000000..fcc53e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerListItem.java @@ -0,0 +1,269 @@ +package net.minecraft.network.play.server; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import java.io.IOException; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketPlayerListItem implements Packet +{ + private SPacketPlayerListItem.Action action; + private final List players = Lists.newArrayList(); + + public SPacketPlayerListItem() + { + } + + public SPacketPlayerListItem(SPacketPlayerListItem.Action actionIn, EntityPlayerMP... playersIn) + { + this.action = actionIn; + + for (EntityPlayerMP entityplayermp : playersIn) + { + this.players.add(new SPacketPlayerListItem.AddPlayerData(entityplayermp.getGameProfile(), entityplayermp.ping, entityplayermp.interactionManager.getGameType(), entityplayermp.getTabListDisplayName())); + } + } + + public SPacketPlayerListItem(SPacketPlayerListItem.Action actionIn, Iterable playersIn) + { + this.action = actionIn; + + for (EntityPlayerMP entityplayermp : playersIn) + { + this.players.add(new SPacketPlayerListItem.AddPlayerData(entityplayermp.getGameProfile(), entityplayermp.ping, entityplayermp.interactionManager.getGameType(), entityplayermp.getTabListDisplayName())); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.action = (SPacketPlayerListItem.Action)buf.readEnumValue(SPacketPlayerListItem.Action.class); + int i = buf.readVarInt(); + + for (int j = 0; j < i; ++j) + { + GameProfile gameprofile = null; + int k = 0; + GameType gametype = null; + ITextComponent itextcomponent = null; + + switch (this.action) + { + case ADD_PLAYER: + gameprofile = new GameProfile(buf.readUniqueId(), buf.readString(16)); + int l = buf.readVarInt(); + int i1 = 0; + + for (; i1 < l; ++i1) + { + String s = buf.readString(32767); + String s1 = buf.readString(32767); + + if (buf.readBoolean()) + { + gameprofile.getProperties().put(s, new Property(s, s1, buf.readString(32767))); + } + else + { + gameprofile.getProperties().put(s, new Property(s, s1)); + } + } + + gametype = GameType.getByID(buf.readVarInt()); + k = buf.readVarInt(); + + if (buf.readBoolean()) + { + itextcomponent = buf.readTextComponent(); + } + + break; + case UPDATE_GAME_MODE: + gameprofile = new GameProfile(buf.readUniqueId(), (String)null); + gametype = GameType.getByID(buf.readVarInt()); + break; + case UPDATE_LATENCY: + gameprofile = new GameProfile(buf.readUniqueId(), (String)null); + k = buf.readVarInt(); + break; + case UPDATE_DISPLAY_NAME: + gameprofile = new GameProfile(buf.readUniqueId(), (String)null); + + if (buf.readBoolean()) + { + itextcomponent = buf.readTextComponent(); + } + + break; + case REMOVE_PLAYER: + gameprofile = new GameProfile(buf.readUniqueId(), (String)null); + } + + this.players.add(new SPacketPlayerListItem.AddPlayerData(gameprofile, k, gametype, itextcomponent)); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.action); + buf.writeVarInt(this.players.size()); + + for (SPacketPlayerListItem.AddPlayerData spacketplayerlistitem$addplayerdata : this.players) + { + switch (this.action) + { + case ADD_PLAYER: + buf.writeUniqueId(spacketplayerlistitem$addplayerdata.getProfile().getId()); + buf.writeString(spacketplayerlistitem$addplayerdata.getProfile().getName()); + buf.writeVarInt(spacketplayerlistitem$addplayerdata.getProfile().getProperties().size()); + + for (Property property : spacketplayerlistitem$addplayerdata.getProfile().getProperties().values()) + { + buf.writeString(property.getName()); + buf.writeString(property.getValue()); + + if (property.hasSignature()) + { + buf.writeBoolean(true); + buf.writeString(property.getSignature()); + } + else + { + buf.writeBoolean(false); + } + } + + buf.writeVarInt(spacketplayerlistitem$addplayerdata.getGameMode().getID()); + buf.writeVarInt(spacketplayerlistitem$addplayerdata.getPing()); + + if (spacketplayerlistitem$addplayerdata.getDisplayName() == null) + { + buf.writeBoolean(false); + } + else + { + buf.writeBoolean(true); + buf.writeTextComponent(spacketplayerlistitem$addplayerdata.getDisplayName()); + } + + break; + case UPDATE_GAME_MODE: + buf.writeUniqueId(spacketplayerlistitem$addplayerdata.getProfile().getId()); + buf.writeVarInt(spacketplayerlistitem$addplayerdata.getGameMode().getID()); + break; + case UPDATE_LATENCY: + buf.writeUniqueId(spacketplayerlistitem$addplayerdata.getProfile().getId()); + buf.writeVarInt(spacketplayerlistitem$addplayerdata.getPing()); + break; + case UPDATE_DISPLAY_NAME: + buf.writeUniqueId(spacketplayerlistitem$addplayerdata.getProfile().getId()); + + if (spacketplayerlistitem$addplayerdata.getDisplayName() == null) + { + buf.writeBoolean(false); + } + else + { + buf.writeBoolean(true); + buf.writeTextComponent(spacketplayerlistitem$addplayerdata.getDisplayName()); + } + + break; + case REMOVE_PLAYER: + buf.writeUniqueId(spacketplayerlistitem$addplayerdata.getProfile().getId()); + } + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handlePlayerListItem(this); + } + + @SideOnly(Side.CLIENT) + public List getEntries() + { + return this.players; + } + + @SideOnly(Side.CLIENT) + public SPacketPlayerListItem.Action getAction() + { + return this.action; + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("action", this.action).add("entries", this.players).toString(); + } + + public static enum Action + { + ADD_PLAYER, + UPDATE_GAME_MODE, + UPDATE_LATENCY, + UPDATE_DISPLAY_NAME, + REMOVE_PLAYER; + } + + public class AddPlayerData + { + private final int ping; + private final GameType gamemode; + private final GameProfile profile; + private final ITextComponent displayName; + + public AddPlayerData(GameProfile profileIn, int latencyIn, GameType gameModeIn, @Nullable ITextComponent displayNameIn) + { + this.profile = profileIn; + this.ping = latencyIn; + this.gamemode = gameModeIn; + this.displayName = displayNameIn; + } + + public GameProfile getProfile() + { + return this.profile; + } + + public int getPing() + { + return this.ping; + } + + public GameType getGameMode() + { + return this.gamemode; + } + + @Nullable + public ITextComponent getDisplayName() + { + return this.displayName; + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("latency", this.ping).add("gameMode", this.gamemode).add("profile", this.profile).add("displayName", this.displayName == null ? null : ITextComponent.Serializer.componentToJson(this.displayName)).toString(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerPosLook.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerPosLook.java new file mode 100644 index 0000000..1472af0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketPlayerPosLook.java @@ -0,0 +1,174 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.EnumSet; +import java.util.Set; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketPlayerPosLook implements Packet +{ + private double x; + private double y; + private double z; + private float yaw; + private float pitch; + private Set flags; + private int teleportId; + + public SPacketPlayerPosLook() + { + } + + public SPacketPlayerPosLook(double xIn, double yIn, double zIn, float yawIn, float pitchIn, Set flagsIn, int teleportIdIn) + { + this.x = xIn; + this.y = yIn; + this.z = zIn; + this.yaw = yawIn; + this.pitch = pitchIn; + this.flags = flagsIn; + this.teleportId = teleportIdIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.yaw = buf.readFloat(); + this.pitch = buf.readFloat(); + this.flags = SPacketPlayerPosLook.EnumFlags.unpack(buf.readUnsignedByte()); + this.teleportId = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeFloat(this.yaw); + buf.writeFloat(this.pitch); + buf.writeByte(SPacketPlayerPosLook.EnumFlags.pack(this.flags)); + buf.writeVarInt(this.teleportId); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handlePlayerPosLook(this); + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.z; + } + + @SideOnly(Side.CLIENT) + public float getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public float getPitch() + { + return this.pitch; + } + + @SideOnly(Side.CLIENT) + public int getTeleportId() + { + return this.teleportId; + } + + /** + * Returns a set of which fields are relative. Items in this set indicate that the value is a relative change + * applied to the player's position, rather than an exact value. + */ + @SideOnly(Side.CLIENT) + public Set getFlags() + { + return this.flags; + } + + public static enum EnumFlags + { + X(0), + Y(1), + Z(2), + Y_ROT(3), + X_ROT(4); + + private final int bit; + + private EnumFlags(int bitIn) + { + this.bit = bitIn; + } + + private int getMask() + { + return 1 << this.bit; + } + + /** + * Checks if this flag is set within the given set of flags. + */ + private boolean isSet(int flags) + { + return (flags & this.getMask()) == this.getMask(); + } + + public static Set unpack(int flags) + { + Set set = EnumSet.noneOf(SPacketPlayerPosLook.EnumFlags.class); + + for (SPacketPlayerPosLook.EnumFlags spacketplayerposlook$enumflags : values()) + { + if (spacketplayerposlook$enumflags.isSet(flags)) + { + set.add(spacketplayerposlook$enumflags); + } + } + + return set; + } + + public static int pack(Set flags) + { + int i = 0; + + for (SPacketPlayerPosLook.EnumFlags spacketplayerposlook$enumflags : flags) + { + i |= spacketplayerposlook$enumflags.getMask(); + } + + return i; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRecipeBook.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRecipeBook.java new file mode 100644 index 0000000..05643a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRecipeBook.java @@ -0,0 +1,133 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketRecipeBook implements Packet +{ + private SPacketRecipeBook.State state; + private List recipes; + private List displayedRecipes; + private boolean guiOpen; + private boolean filteringCraftable; + + public SPacketRecipeBook() + { + } + + public SPacketRecipeBook(SPacketRecipeBook.State stateIn, List recipesIn, List displayedRecipesIn, boolean isGuiOpen, boolean p_i47597_5_) + { + this.state = stateIn; + this.recipes = recipesIn; + this.displayedRecipes = displayedRecipesIn; + this.guiOpen = isGuiOpen; + this.filteringCraftable = p_i47597_5_; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleRecipeBook(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.state = (SPacketRecipeBook.State)buf.readEnumValue(SPacketRecipeBook.State.class); + this.guiOpen = buf.readBoolean(); + this.filteringCraftable = buf.readBoolean(); + int i = buf.readVarInt(); + this.recipes = Lists.newArrayList(); + + for (int j = 0; j < i; ++j) + { + this.recipes.add(CraftingManager.getRecipeById(buf.readVarInt())); + } + + if (this.state == SPacketRecipeBook.State.INIT) + { + i = buf.readVarInt(); + this.displayedRecipes = Lists.newArrayList(); + + for (int k = 0; k < i; ++k) + { + this.displayedRecipes.add(CraftingManager.getRecipeById(buf.readVarInt())); + } + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.state); + buf.writeBoolean(this.guiOpen); + buf.writeBoolean(this.filteringCraftable); + buf.writeVarInt(this.recipes.size()); + + for (IRecipe irecipe : this.recipes) + { + buf.writeVarInt(CraftingManager.getIDForRecipe(irecipe)); + } + + if (this.state == SPacketRecipeBook.State.INIT) + { + buf.writeVarInt(this.displayedRecipes.size()); + + for (IRecipe irecipe1 : this.displayedRecipes) + { + buf.writeVarInt(CraftingManager.getIDForRecipe(irecipe1)); + } + } + } + + @SideOnly(Side.CLIENT) + public List getRecipes() + { + return this.recipes; + } + + @SideOnly(Side.CLIENT) + public List getDisplayedRecipes() + { + return this.displayedRecipes; + } + + @SideOnly(Side.CLIENT) + public boolean isGuiOpen() + { + return this.guiOpen; + } + + @SideOnly(Side.CLIENT) + public boolean isFilteringCraftable() + { + return this.filteringCraftable; + } + + @SideOnly(Side.CLIENT) + public SPacketRecipeBook.State getState() + { + return this.state; + } + + public static enum State + { + INIT, + ADD, + REMOVE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRemoveEntityEffect.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRemoveEntityEffect.java new file mode 100644 index 0000000..f65888f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRemoveEntityEffect.java @@ -0,0 +1,68 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.potion.Potion; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketRemoveEntityEffect implements Packet +{ + private int entityId; + private Potion effectId; + + public SPacketRemoveEntityEffect() + { + } + + public SPacketRemoveEntityEffect(int entityIdIn, Potion potionIn) + { + this.entityId = entityIdIn; + this.effectId = potionIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.effectId = Potion.getPotionById(buf.readUnsignedByte()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeByte(Potion.getIdFromPotion(this.effectId)); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleRemoveEntityEffect(this); + } + + @Nullable + @SideOnly(Side.CLIENT) + public Entity getEntity(World worldIn) + { + return worldIn.getEntityByID(this.entityId); + } + + @Nullable + @SideOnly(Side.CLIENT) + public Potion getPotion() + { + return this.effectId; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketResourcePackSend.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketResourcePackSend.java new file mode 100644 index 0000000..b001a7a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketResourcePackSend.java @@ -0,0 +1,67 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketResourcePackSend implements Packet +{ + private String url; + private String hash; + + public SPacketResourcePackSend() + { + } + + public SPacketResourcePackSend(String urlIn, String hashIn) + { + this.url = urlIn; + this.hash = hashIn; + + if (hashIn.length() > 40) + { + throw new IllegalArgumentException("Hash is too long (max 40, was " + hashIn.length() + ")"); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.url = buf.readString(32767); + this.hash = buf.readString(40); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.url); + buf.writeString(this.hash); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleResourcePack(this); + } + + @SideOnly(Side.CLIENT) + public String getURL() + { + return this.url; + } + + @SideOnly(Side.CLIENT) + public String getHash() + { + return this.hash; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRespawn.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRespawn.java new file mode 100644 index 0000000..9a1f414 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketRespawn.java @@ -0,0 +1,90 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.WorldType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketRespawn implements Packet +{ + private int dimensionID; + private EnumDifficulty difficulty; + private GameType gameType; + private WorldType worldType; + + public SPacketRespawn() + { + } + + public SPacketRespawn(int dimensionIdIn, EnumDifficulty difficultyIn, WorldType worldTypeIn, GameType gameModeIn) + { + this.dimensionID = dimensionIdIn; + this.difficulty = difficultyIn; + this.gameType = gameModeIn; + this.worldType = worldTypeIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleRespawn(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.dimensionID = buf.readInt(); + this.difficulty = EnumDifficulty.getDifficultyEnum(buf.readUnsignedByte()); + this.gameType = GameType.getByID(buf.readUnsignedByte()); + this.worldType = WorldType.parseWorldType(buf.readString(16)); + + if (this.worldType == null) + { + this.worldType = WorldType.DEFAULT; + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.dimensionID); + buf.writeByte(this.difficulty.getDifficultyId()); + buf.writeByte(this.gameType.getID()); + buf.writeString(this.worldType.getName()); + } + + @SideOnly(Side.CLIENT) + public int getDimensionID() + { + return this.dimensionID; + } + + @SideOnly(Side.CLIENT) + public EnumDifficulty getDifficulty() + { + return this.difficulty; + } + + @SideOnly(Side.CLIENT) + public GameType getGameType() + { + return this.gameType; + } + + @SideOnly(Side.CLIENT) + public WorldType getWorldType() + { + return this.worldType; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketScoreboardObjective.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketScoreboardObjective.java new file mode 100644 index 0000000..7142d9c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketScoreboardObjective.java @@ -0,0 +1,92 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketScoreboardObjective implements Packet +{ + private String objectiveName; + private String objectiveValue; + private IScoreCriteria.EnumRenderType type; + private int action; + + public SPacketScoreboardObjective() + { + } + + public SPacketScoreboardObjective(ScoreObjective objective, int actionIn) + { + this.objectiveName = objective.getName(); + this.objectiveValue = objective.getDisplayName(); + this.type = objective.getCriteria().getRenderType(); + this.action = actionIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.objectiveName = buf.readString(16); + this.action = buf.readByte(); + + if (this.action == 0 || this.action == 2) + { + this.objectiveValue = buf.readString(32); + this.type = IScoreCriteria.EnumRenderType.getByName(buf.readString(16)); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.objectiveName); + buf.writeByte(this.action); + + if (this.action == 0 || this.action == 2) + { + buf.writeString(this.objectiveValue); + buf.writeString(this.type.getRenderType()); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleScoreboardObjective(this); + } + + @SideOnly(Side.CLIENT) + public String getObjectiveName() + { + return this.objectiveName; + } + + @SideOnly(Side.CLIENT) + public String getObjectiveValue() + { + return this.objectiveValue; + } + + @SideOnly(Side.CLIENT) + public int getAction() + { + return this.action; + } + + @SideOnly(Side.CLIENT) + public IScoreCriteria.EnumRenderType getRenderType() + { + return this.type; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSelectAdvancementsTab.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSelectAdvancementsTab.java new file mode 100644 index 0000000..738282f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSelectAdvancementsTab.java @@ -0,0 +1,64 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import javax.annotation.Nullable; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSelectAdvancementsTab implements Packet +{ + @Nullable + private ResourceLocation tab; + + public SPacketSelectAdvancementsTab() + { + } + + public SPacketSelectAdvancementsTab(@Nullable ResourceLocation p_i47596_1_) + { + this.tab = p_i47596_1_; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSelectAdvancementsTab(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + if (buf.readBoolean()) + { + this.tab = buf.readResourceLocation(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBoolean(this.tab != null); + + if (this.tab != null) + { + buf.writeResourceLocation(this.tab); + } + } + + @Nullable + @SideOnly(Side.CLIENT) + public ResourceLocation getTab() + { + return this.tab; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketServerDifficulty.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketServerDifficulty.java new file mode 100644 index 0000000..7d63f7a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketServerDifficulty.java @@ -0,0 +1,61 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.EnumDifficulty; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketServerDifficulty implements Packet +{ + private EnumDifficulty difficulty; + private boolean difficultyLocked; + + public SPacketServerDifficulty() + { + } + + public SPacketServerDifficulty(EnumDifficulty difficultyIn, boolean difficultyLockedIn) + { + this.difficulty = difficultyIn; + this.difficultyLocked = difficultyLockedIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleServerDifficulty(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.difficulty = EnumDifficulty.getDifficultyEnum(buf.readUnsignedByte()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.difficulty.getDifficultyId()); + } + + @SideOnly(Side.CLIENT) + public boolean isDifficultyLocked() + { + return this.difficultyLocked; + } + + @SideOnly(Side.CLIENT) + public EnumDifficulty getDifficulty() + { + return this.difficulty; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetExperience.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetExperience.java new file mode 100644 index 0000000..2b6698d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetExperience.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSetExperience implements Packet +{ + private float experienceBar; + private int totalExperience; + private int level; + + public SPacketSetExperience() + { + } + + public SPacketSetExperience(float experienceBarIn, int totalExperienceIn, int levelIn) + { + this.experienceBar = experienceBarIn; + this.totalExperience = totalExperienceIn; + this.level = levelIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.experienceBar = buf.readFloat(); + this.level = buf.readVarInt(); + this.totalExperience = buf.readVarInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeFloat(this.experienceBar); + buf.writeVarInt(this.level); + buf.writeVarInt(this.totalExperience); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSetExperience(this); + } + + @SideOnly(Side.CLIENT) + public float getExperienceBar() + { + return this.experienceBar; + } + + @SideOnly(Side.CLIENT) + public int getTotalExperience() + { + return this.totalExperience; + } + + @SideOnly(Side.CLIENT) + public int getLevel() + { + return this.level; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetPassengers.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetPassengers.java new file mode 100644 index 0000000..4e0277a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetPassengers.java @@ -0,0 +1,70 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.List; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSetPassengers implements Packet +{ + private int entityId; + private int[] passengerIds; + + public SPacketSetPassengers() + { + } + + public SPacketSetPassengers(Entity entityIn) + { + this.entityId = entityIn.getEntityId(); + List list = entityIn.getPassengers(); + this.passengerIds = new int[list.size()]; + + for (int i = 0; i < list.size(); ++i) + { + this.passengerIds[i] = ((Entity)list.get(i)).getEntityId(); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.passengerIds = buf.readVarIntArray(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeVarIntArray(this.passengerIds); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSetPassengers(this); + } + + @SideOnly(Side.CLIENT) + public int[] getPassengerIds() + { + return this.passengerIds; + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetSlot.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetSlot.java new file mode 100644 index 0000000..b20f78e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSetSlot.java @@ -0,0 +1,73 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSetSlot implements Packet +{ + private int windowId; + private int slot; + private ItemStack item = ItemStack.EMPTY; + + public SPacketSetSlot() + { + } + + public SPacketSetSlot(int windowIdIn, int slotIn, ItemStack itemIn) + { + this.windowId = windowIdIn; + this.slot = slotIn; + this.item = itemIn.copy(); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSetSlot(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readByte(); + this.slot = buf.readShort(); + this.item = buf.readItemStack(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeShort(this.slot); + buf.writeItemStack(this.item); + } + + @SideOnly(Side.CLIENT) + public int getWindowId() + { + return this.windowId; + } + + @SideOnly(Side.CLIENT) + public int getSlot() + { + return this.slot; + } + + @SideOnly(Side.CLIENT) + public ItemStack getStack() + { + return this.item; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSignEditorOpen.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSignEditorOpen.java new file mode 100644 index 0000000..550221d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSignEditorOpen.java @@ -0,0 +1,53 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSignEditorOpen implements Packet +{ + private BlockPos signPosition; + + public SPacketSignEditorOpen() + { + } + + public SPacketSignEditorOpen(BlockPos posIn) + { + this.signPosition = posIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSignEditorOpen(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.signPosition = buf.readBlockPos(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.signPosition); + } + + @SideOnly(Side.CLIENT) + public BlockPos getSignPosition() + { + return this.signPosition; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSoundEffect.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSoundEffect.java new file mode 100644 index 0000000..cb2dc9d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSoundEffect.java @@ -0,0 +1,116 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; + +public class SPacketSoundEffect implements Packet +{ + private SoundEvent sound; + private SoundCategory category; + private int posX; + private int posY; + private int posZ; + private float soundVolume; + private float soundPitch; + + public SPacketSoundEffect() + { + } + + public SPacketSoundEffect(SoundEvent soundIn, SoundCategory categoryIn, double xIn, double yIn, double zIn, float volumeIn, float pitchIn) + { + Validate.notNull(soundIn, "sound"); + this.sound = soundIn; + this.category = categoryIn; + this.posX = (int)(xIn * 8.0D); + this.posY = (int)(yIn * 8.0D); + this.posZ = (int)(zIn * 8.0D); + this.soundVolume = volumeIn; + this.soundPitch = pitchIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.sound = SoundEvent.REGISTRY.getObjectById(buf.readVarInt()); + this.category = (SoundCategory)buf.readEnumValue(SoundCategory.class); + this.posX = buf.readInt(); + this.posY = buf.readInt(); + this.posZ = buf.readInt(); + this.soundVolume = buf.readFloat(); + this.soundPitch = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(SoundEvent.REGISTRY.getIDForObject(this.sound)); + buf.writeEnumValue(this.category); + buf.writeInt(this.posX); + buf.writeInt(this.posY); + buf.writeInt(this.posZ); + buf.writeFloat(this.soundVolume); + buf.writeFloat(this.soundPitch); + } + + @SideOnly(Side.CLIENT) + public SoundEvent getSound() + { + return this.sound; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSoundEffect(this); + } + + @SideOnly(Side.CLIENT) + public SoundCategory getCategory() + { + return this.category; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return (double)((float)this.posX / 8.0F); + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return (double)((float)this.posY / 8.0F); + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return (double)((float)this.posZ / 8.0F); + } + + @SideOnly(Side.CLIENT) + public float getVolume() + { + return this.soundVolume; + } + + @SideOnly(Side.CLIENT) + public float getPitch() + { + return this.soundPitch; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnExperienceOrb.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnExperienceOrb.java new file mode 100644 index 0000000..bc6d4af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnExperienceOrb.java @@ -0,0 +1,93 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnExperienceOrb implements Packet +{ + private int entityID; + private double posX; + private double posY; + private double posZ; + private int xpValue; + + public SPacketSpawnExperienceOrb() + { + } + + public SPacketSpawnExperienceOrb(EntityXPOrb orb) + { + this.entityID = orb.getEntityId(); + this.posX = orb.posX; + this.posY = orb.posY; + this.posZ = orb.posZ; + this.xpValue = orb.getXpValue(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityID = buf.readVarInt(); + this.posX = buf.readDouble(); + this.posY = buf.readDouble(); + this.posZ = buf.readDouble(); + this.xpValue = buf.readShort(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityID); + buf.writeDouble(this.posX); + buf.writeDouble(this.posY); + buf.writeDouble(this.posZ); + buf.writeShort(this.xpValue); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnExperienceOrb(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityID; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.posX; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.posY; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.posZ; + } + + @SideOnly(Side.CLIENT) + public int getXPValue() + { + return this.xpValue; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnGlobalEntity.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnGlobalEntity.java new file mode 100644 index 0000000..4994e01 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnGlobalEntity.java @@ -0,0 +1,98 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.Entity; +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnGlobalEntity implements Packet +{ + private int entityId; + private double x; + private double y; + private double z; + private int type; + + public SPacketSpawnGlobalEntity() + { + } + + public SPacketSpawnGlobalEntity(Entity entityIn) + { + this.entityId = entityIn.getEntityId(); + this.x = entityIn.posX; + this.y = entityIn.posY; + this.z = entityIn.posZ; + + if (entityIn instanceof EntityLightningBolt) + { + this.type = 1; + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.type = buf.readByte(); + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeByte(this.type); + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnGlobalEntity(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityId() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.z; + } + + @SideOnly(Side.CLIENT) + public int getType() + { + return this.type; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnMob.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnMob.java new file mode 100644 index 0000000..575acef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnMob.java @@ -0,0 +1,215 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnMob implements Packet +{ + private int entityId; + private UUID uniqueId; + private int type; + private double x; + private double y; + private double z; + private int velocityX; + private int velocityY; + private int velocityZ; + private byte yaw; + private byte pitch; + private byte headPitch; + private EntityDataManager dataManager; + private List < EntityDataManager.DataEntry> dataManagerEntries; + + public SPacketSpawnMob() + { + } + + public SPacketSpawnMob(EntityLivingBase entityIn) + { + this.entityId = entityIn.getEntityId(); + this.uniqueId = entityIn.getUniqueID(); + this.type = EntityList.getID(entityIn.getClass()); + this.x = entityIn.posX; + this.y = entityIn.posY; + this.z = entityIn.posZ; + this.yaw = (byte)((int)(entityIn.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(entityIn.rotationPitch * 256.0F / 360.0F)); + this.headPitch = (byte)((int)(entityIn.rotationYawHead * 256.0F / 360.0F)); + double d0 = 3.9D; + double d1 = entityIn.motionX; + double d2 = entityIn.motionY; + double d3 = entityIn.motionZ; + + if (d1 < -3.9D) + { + d1 = -3.9D; + } + + if (d2 < -3.9D) + { + d2 = -3.9D; + } + + if (d3 < -3.9D) + { + d3 = -3.9D; + } + + if (d1 > 3.9D) + { + d1 = 3.9D; + } + + if (d2 > 3.9D) + { + d2 = 3.9D; + } + + if (d3 > 3.9D) + { + d3 = 3.9D; + } + + this.velocityX = (int)(d1 * 8000.0D); + this.velocityY = (int)(d2 * 8000.0D); + this.velocityZ = (int)(d3 * 8000.0D); + this.dataManager = entityIn.getDataManager(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.uniqueId = buf.readUniqueId(); + this.type = buf.readVarInt(); + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.yaw = buf.readByte(); + this.pitch = buf.readByte(); + this.headPitch = buf.readByte(); + this.velocityX = buf.readShort(); + this.velocityY = buf.readShort(); + this.velocityZ = buf.readShort(); + this.dataManagerEntries = EntityDataManager.readEntries(buf); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeUniqueId(this.uniqueId); + buf.writeVarInt(this.type); + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeByte(this.yaw); + buf.writeByte(this.pitch); + buf.writeByte(this.headPitch); + buf.writeShort(this.velocityX); + buf.writeShort(this.velocityY); + buf.writeShort(this.velocityZ); + this.dataManager.writeEntries(buf); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnMob(this); + } + + @Nullable + @SideOnly(Side.CLIENT) + public List < EntityDataManager.DataEntry> getDataManagerEntries() + { + return this.dataManagerEntries; + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public UUID getUniqueId() + { + return this.uniqueId; + } + + @SideOnly(Side.CLIENT) + public int getEntityType() + { + return this.type; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.z; + } + + @SideOnly(Side.CLIENT) + public int getVelocityX() + { + return this.velocityX; + } + + @SideOnly(Side.CLIENT) + public int getVelocityY() + { + return this.velocityY; + } + + @SideOnly(Side.CLIENT) + public int getVelocityZ() + { + return this.velocityZ; + } + + @SideOnly(Side.CLIENT) + public byte getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public byte getPitch() + { + return this.pitch; + } + + @SideOnly(Side.CLIENT) + public byte getHeadPitch() + { + return this.headPitch; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnObject.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnObject.java new file mode 100644 index 0000000..92f3cf4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnObject.java @@ -0,0 +1,201 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.UUID; +import net.minecraft.entity.Entity; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnObject implements Packet +{ + private int entityId; + private UUID uniqueId; + private double x; + private double y; + private double z; + private int speedX; + private int speedY; + private int speedZ; + private int pitch; + private int yaw; + private int type; + private int data; + + public SPacketSpawnObject() + { + } + + public SPacketSpawnObject(Entity entityIn, int typeIn) + { + this(entityIn, typeIn, 0); + } + + public SPacketSpawnObject(Entity entityIn, int typeIn, int dataIn) + { + this.entityId = entityIn.getEntityId(); + this.uniqueId = entityIn.getUniqueID(); + this.x = entityIn.posX; + this.y = entityIn.posY; + this.z = entityIn.posZ; + this.pitch = MathHelper.floor(entityIn.rotationPitch * 256.0F / 360.0F); + this.yaw = MathHelper.floor(entityIn.rotationYaw * 256.0F / 360.0F); + this.type = typeIn; + this.data = dataIn; + double d0 = 3.9D; + this.speedX = (int)(MathHelper.clamp(entityIn.motionX, -3.9D, 3.9D) * 8000.0D); + this.speedY = (int)(MathHelper.clamp(entityIn.motionY, -3.9D, 3.9D) * 8000.0D); + this.speedZ = (int)(MathHelper.clamp(entityIn.motionZ, -3.9D, 3.9D) * 8000.0D); + } + + public SPacketSpawnObject(Entity entityIn, int typeIn, int dataIn, BlockPos pos) + { + this(entityIn, typeIn, dataIn); + this.x = (double)pos.getX(); + this.y = (double)pos.getY(); + this.z = (double)pos.getZ(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.uniqueId = buf.readUniqueId(); + this.type = buf.readByte(); + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.pitch = buf.readByte(); + this.yaw = buf.readByte(); + this.data = buf.readInt(); + this.speedX = buf.readShort(); + this.speedY = buf.readShort(); + this.speedZ = buf.readShort(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeUniqueId(this.uniqueId); + buf.writeByte(this.type); + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeByte(this.pitch); + buf.writeByte(this.yaw); + buf.writeInt(this.data); + buf.writeShort(this.speedX); + buf.writeShort(this.speedY); + buf.writeShort(this.speedZ); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnObject(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityId; + } + + public void setSpeedX(int newSpeedX) + { + this.speedX = newSpeedX; + } + + @SideOnly(Side.CLIENT) + public UUID getUniqueId() + { + return this.uniqueId; + } + + public void setSpeedY(int newSpeedY) + { + this.speedY = newSpeedY; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.x; + } + + public void setSpeedZ(int newSpeedZ) + { + this.speedZ = newSpeedZ; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.z; + } + + @SideOnly(Side.CLIENT) + public int getSpeedX() + { + return this.speedX; + } + + @SideOnly(Side.CLIENT) + public int getSpeedY() + { + return this.speedY; + } + + @SideOnly(Side.CLIENT) + public int getSpeedZ() + { + return this.speedZ; + } + + @SideOnly(Side.CLIENT) + public int getPitch() + { + return this.pitch; + } + + @SideOnly(Side.CLIENT) + public int getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public int getType() + { + return this.type; + } + + @SideOnly(Side.CLIENT) + public int getData() + { + return this.data; + } + + @SideOnly(Side.CLIENT) + public void setData(int dataIn) + { + this.data = dataIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPainting.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPainting.java new file mode 100644 index 0000000..aa2ff2e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPainting.java @@ -0,0 +1,96 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.UUID; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnPainting implements Packet +{ + private int entityID; + private UUID uniqueId; + private BlockPos position; + private EnumFacing facing; + private String title; + + public SPacketSpawnPainting() + { + } + + public SPacketSpawnPainting(EntityPainting painting) + { + this.entityID = painting.getEntityId(); + this.uniqueId = painting.getUniqueID(); + this.position = painting.getHangingPosition(); + this.facing = painting.facingDirection; + this.title = painting.art.title; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityID = buf.readVarInt(); + this.uniqueId = buf.readUniqueId(); + this.title = buf.readString(EntityPainting.EnumArt.MAX_NAME_LENGTH); + this.position = buf.readBlockPos(); + this.facing = EnumFacing.getHorizontal(buf.readUnsignedByte()); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityID); + buf.writeUniqueId(this.uniqueId); + buf.writeString(this.title); + buf.writeBlockPos(this.position); + buf.writeByte(this.facing.getHorizontalIndex()); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnPainting(this); + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityID; + } + + @SideOnly(Side.CLIENT) + public UUID getUniqueId() + { + return this.uniqueId; + } + + @SideOnly(Side.CLIENT) + public BlockPos getPosition() + { + return this.position; + } + + @SideOnly(Side.CLIENT) + public EnumFacing getFacing() + { + return this.facing; + } + + @SideOnly(Side.CLIENT) + public String getTitle() + { + return this.title; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPlayer.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPlayer.java new file mode 100644 index 0000000..7e9accf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPlayer.java @@ -0,0 +1,129 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnPlayer implements Packet +{ + private int entityId; + private UUID uniqueId; + private double x; + private double y; + private double z; + private byte yaw; + private byte pitch; + private EntityDataManager watcher; + private List < EntityDataManager.DataEntry> dataManagerEntries; + + public SPacketSpawnPlayer() + { + } + + public SPacketSpawnPlayer(EntityPlayer player) + { + this.entityId = player.getEntityId(); + this.uniqueId = player.getGameProfile().getId(); + this.x = player.posX; + this.y = player.posY; + this.z = player.posZ; + this.yaw = (byte)((int)(player.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(player.rotationPitch * 256.0F / 360.0F)); + this.watcher = player.getDataManager(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.entityId = buf.readVarInt(); + this.uniqueId = buf.readUniqueId(); + this.x = buf.readDouble(); + this.y = buf.readDouble(); + this.z = buf.readDouble(); + this.yaw = buf.readByte(); + this.pitch = buf.readByte(); + this.dataManagerEntries = EntityDataManager.readEntries(buf); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.entityId); + buf.writeUniqueId(this.uniqueId); + buf.writeDouble(this.x); + buf.writeDouble(this.y); + buf.writeDouble(this.z); + buf.writeByte(this.yaw); + buf.writeByte(this.pitch); + this.watcher.writeEntries(buf); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnPlayer(this); + } + + @Nullable + @SideOnly(Side.CLIENT) + public List < EntityDataManager.DataEntry> getDataManagerEntries() + { + return this.dataManagerEntries; + } + + @SideOnly(Side.CLIENT) + public int getEntityID() + { + return this.entityId; + } + + @SideOnly(Side.CLIENT) + public UUID getUniqueId() + { + return this.uniqueId; + } + + @SideOnly(Side.CLIENT) + public double getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public double getY() + { + return this.y; + } + + @SideOnly(Side.CLIENT) + public double getZ() + { + return this.z; + } + + @SideOnly(Side.CLIENT) + public byte getYaw() + { + return this.yaw; + } + + @SideOnly(Side.CLIENT) + public byte getPitch() + { + return this.pitch; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPosition.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPosition.java new file mode 100644 index 0000000..d1ebb83 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketSpawnPosition.java @@ -0,0 +1,53 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketSpawnPosition implements Packet +{ + private BlockPos spawnBlockPos; + + public SPacketSpawnPosition() + { + } + + public SPacketSpawnPosition(BlockPos posIn) + { + this.spawnBlockPos = posIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.spawnBlockPos = buf.readBlockPos(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.spawnBlockPos); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleSpawnPosition(this); + } + + @SideOnly(Side.CLIENT) + public BlockPos getSpawnPos() + { + return this.spawnBlockPos; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketStatistics.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketStatistics.java new file mode 100644 index 0000000..917f731 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketStatistics.java @@ -0,0 +1,75 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.stats.StatBase; +import net.minecraft.stats.StatList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketStatistics implements Packet +{ + private Map statisticMap; + + public SPacketStatistics() + { + } + + public SPacketStatistics(Map statisticMapIn) + { + this.statisticMap = statisticMapIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleStatistics(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + int i = buf.readVarInt(); + this.statisticMap = Maps.newHashMap(); + + for (int j = 0; j < i; ++j) + { + StatBase statbase = StatList.getOneShotStat(buf.readString(32767)); + int k = buf.readVarInt(); + + if (statbase != null) + { + this.statisticMap.put(statbase, Integer.valueOf(k)); + } + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.statisticMap.size()); + + for (Entry entry : this.statisticMap.entrySet()) + { + buf.writeString((entry.getKey()).statId); + buf.writeVarInt(((Integer)entry.getValue()).intValue()); + } + } + + @SideOnly(Side.CLIENT) + public Map getStatisticMap() + { + return this.statisticMap; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTabComplete.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTabComplete.java new file mode 100644 index 0000000..5297ed8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTabComplete.java @@ -0,0 +1,62 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketTabComplete implements Packet +{ + private String[] matches; + + public SPacketTabComplete() + { + } + + public SPacketTabComplete(String[] matchesIn) + { + this.matches = matchesIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.matches = new String[buf.readVarInt()]; + + for (int i = 0; i < this.matches.length; ++i) + { + this.matches[i] = buf.readString(32767); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.matches.length); + + for (String s : this.matches) + { + buf.writeString(s); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleTabComplete(this); + } + + @SideOnly(Side.CLIENT) + public String[] getMatches() + { + return this.matches; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTeams.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTeams.java new file mode 100644 index 0000000..40ec4a0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTeams.java @@ -0,0 +1,211 @@ +package net.minecraft.network.play.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Collection; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Team; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketTeams implements Packet +{ + private String name = ""; + private String displayName = ""; + private String prefix = ""; + private String suffix = ""; + private String nameTagVisibility; + private String collisionRule; + private int color; + private final Collection players; + private int action; + private int friendlyFlags; + + public SPacketTeams() + { + this.nameTagVisibility = Team.EnumVisible.ALWAYS.internalName; + this.collisionRule = Team.CollisionRule.ALWAYS.name; + this.color = -1; + this.players = Lists.newArrayList(); + } + + public SPacketTeams(ScorePlayerTeam teamIn, int actionIn) + { + this.nameTagVisibility = Team.EnumVisible.ALWAYS.internalName; + this.collisionRule = Team.CollisionRule.ALWAYS.name; + this.color = -1; + this.players = Lists.newArrayList(); + this.name = teamIn.getName(); + this.action = actionIn; + + if (actionIn == 0 || actionIn == 2) + { + this.displayName = teamIn.getDisplayName(); + this.prefix = teamIn.getPrefix(); + this.suffix = teamIn.getSuffix(); + this.friendlyFlags = teamIn.getFriendlyFlags(); + this.nameTagVisibility = teamIn.getNameTagVisibility().internalName; + this.collisionRule = teamIn.getCollisionRule().name; + this.color = teamIn.getColor().getColorIndex(); + } + + if (actionIn == 0) + { + this.players.addAll(teamIn.getMembershipCollection()); + } + } + + public SPacketTeams(ScorePlayerTeam teamIn, Collection playersIn, int actionIn) + { + this.nameTagVisibility = Team.EnumVisible.ALWAYS.internalName; + this.collisionRule = Team.CollisionRule.ALWAYS.name; + this.color = -1; + this.players = Lists.newArrayList(); + + if (actionIn != 3 && actionIn != 4) + { + throw new IllegalArgumentException("Method must be join or leave for player constructor"); + } + else if (playersIn != null && !playersIn.isEmpty()) + { + this.action = actionIn; + this.name = teamIn.getName(); + this.players.addAll(playersIn); + } + else + { + throw new IllegalArgumentException("Players cannot be null/empty"); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.name = buf.readString(16); + this.action = buf.readByte(); + + if (this.action == 0 || this.action == 2) + { + this.displayName = buf.readString(32); + this.prefix = buf.readString(16); + this.suffix = buf.readString(16); + this.friendlyFlags = buf.readByte(); + this.nameTagVisibility = buf.readString(32); + this.collisionRule = buf.readString(32); + this.color = buf.readByte(); + } + + if (this.action == 0 || this.action == 3 || this.action == 4) + { + int i = buf.readVarInt(); + + for (int j = 0; j < i; ++j) + { + this.players.add(buf.readString(40)); + } + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.name); + buf.writeByte(this.action); + + if (this.action == 0 || this.action == 2) + { + buf.writeString(this.displayName); + buf.writeString(this.prefix); + buf.writeString(this.suffix); + buf.writeByte(this.friendlyFlags); + buf.writeString(this.nameTagVisibility); + buf.writeString(this.collisionRule); + buf.writeByte(this.color); + } + + if (this.action == 0 || this.action == 3 || this.action == 4) + { + buf.writeVarInt(this.players.size()); + + for (String s : this.players) + { + buf.writeString(s); + } + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleTeams(this); + } + + @SideOnly(Side.CLIENT) + public String getName() + { + return this.name; + } + + @SideOnly(Side.CLIENT) + public String getDisplayName() + { + return this.displayName; + } + + @SideOnly(Side.CLIENT) + public String getPrefix() + { + return this.prefix; + } + + @SideOnly(Side.CLIENT) + public String getSuffix() + { + return this.suffix; + } + + @SideOnly(Side.CLIENT) + public Collection getPlayers() + { + return this.players; + } + + @SideOnly(Side.CLIENT) + public int getAction() + { + return this.action; + } + + @SideOnly(Side.CLIENT) + public int getFriendlyFlags() + { + return this.friendlyFlags; + } + + @SideOnly(Side.CLIENT) + public int getColor() + { + return this.color; + } + + @SideOnly(Side.CLIENT) + public String getNameTagVisibility() + { + return this.nameTagVisibility; + } + + @SideOnly(Side.CLIENT) + public String getCollisionRule() + { + return this.collisionRule; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTimeUpdate.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTimeUpdate.java new file mode 100644 index 0000000..03d6a08 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTimeUpdate.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketTimeUpdate implements Packet +{ + private long totalWorldTime; + private long worldTime; + + public SPacketTimeUpdate() + { + } + + public SPacketTimeUpdate(long totalWorldTimeIn, long worldTimeIn, boolean doDaylightCycle) + { + this.totalWorldTime = totalWorldTimeIn; + this.worldTime = worldTimeIn; + + if (!doDaylightCycle) + { + this.worldTime = -this.worldTime; + + if (this.worldTime == 0L) + { + this.worldTime = -1L; + } + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.totalWorldTime = buf.readLong(); + this.worldTime = buf.readLong(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeLong(this.totalWorldTime); + buf.writeLong(this.worldTime); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleTimeUpdate(this); + } + + @SideOnly(Side.CLIENT) + public long getTotalWorldTime() + { + return this.totalWorldTime; + } + + @SideOnly(Side.CLIENT) + public long getWorldTime() + { + return this.worldTime; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTitle.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTitle.java new file mode 100644 index 0000000..cb7ef9e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketTitle.java @@ -0,0 +1,157 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.Locale; +import javax.annotation.Nullable; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketTitle implements Packet +{ + private SPacketTitle.Type type; + private ITextComponent message; + private int fadeInTime; + private int displayTime; + private int fadeOutTime; + + public SPacketTitle() + { + } + + public SPacketTitle(SPacketTitle.Type typeIn, ITextComponent messageIn) + { + this(typeIn, messageIn, -1, -1, -1); + } + + public SPacketTitle(int fadeInTimeIn, int displayTimeIn, int fadeOutTimeIn) + { + this(SPacketTitle.Type.TIMES, (ITextComponent)null, fadeInTimeIn, displayTimeIn, fadeOutTimeIn); + } + + public SPacketTitle(SPacketTitle.Type typeIn, @Nullable ITextComponent messageIn, int fadeInTimeIn, int displayTimeIn, int fadeOutTimeIn) + { + this.type = typeIn; + this.message = messageIn; + this.fadeInTime = fadeInTimeIn; + this.displayTime = displayTimeIn; + this.fadeOutTime = fadeOutTimeIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.type = (SPacketTitle.Type)buf.readEnumValue(SPacketTitle.Type.class); + + if (this.type == SPacketTitle.Type.TITLE || this.type == SPacketTitle.Type.SUBTITLE || this.type == SPacketTitle.Type.ACTIONBAR) + { + this.message = buf.readTextComponent(); + } + + if (this.type == SPacketTitle.Type.TIMES) + { + this.fadeInTime = buf.readInt(); + this.displayTime = buf.readInt(); + this.fadeOutTime = buf.readInt(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.type); + + if (this.type == SPacketTitle.Type.TITLE || this.type == SPacketTitle.Type.SUBTITLE || this.type == SPacketTitle.Type.ACTIONBAR) + { + buf.writeTextComponent(this.message); + } + + if (this.type == SPacketTitle.Type.TIMES) + { + buf.writeInt(this.fadeInTime); + buf.writeInt(this.displayTime); + buf.writeInt(this.fadeOutTime); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleTitle(this); + } + + @SideOnly(Side.CLIENT) + public SPacketTitle.Type getType() + { + return this.type; + } + + @SideOnly(Side.CLIENT) + public ITextComponent getMessage() + { + return this.message; + } + + @SideOnly(Side.CLIENT) + public int getFadeInTime() + { + return this.fadeInTime; + } + + @SideOnly(Side.CLIENT) + public int getDisplayTime() + { + return this.displayTime; + } + + @SideOnly(Side.CLIENT) + public int getFadeOutTime() + { + return this.fadeOutTime; + } + + public static enum Type + { + TITLE, + SUBTITLE, + ACTIONBAR, + TIMES, + CLEAR, + RESET; + + public static SPacketTitle.Type byName(String name) + { + for (SPacketTitle.Type spackettitle$type : values()) + { + if (spackettitle$type.name().equalsIgnoreCase(name)) + { + return spackettitle$type; + } + } + + return TITLE; + } + + public static String[] getNames() + { + String[] astring = new String[values().length]; + int i = 0; + + for (SPacketTitle.Type spackettitle$type : values()) + { + astring[i++] = spackettitle$type.name().toLowerCase(Locale.ROOT); + } + + return astring; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUnloadChunk.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUnloadChunk.java new file mode 100644 index 0000000..2ac0aca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUnloadChunk.java @@ -0,0 +1,62 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketUnloadChunk implements Packet +{ + private int x; + private int z; + + public SPacketUnloadChunk() + { + } + + public SPacketUnloadChunk(int xIn, int zIn) + { + this.x = xIn; + this.z = zIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.x = buf.readInt(); + this.z = buf.readInt(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeInt(this.x); + buf.writeInt(this.z); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.processChunkUnload(this); + } + + @SideOnly(Side.CLIENT) + public int getX() + { + return this.x; + } + + @SideOnly(Side.CLIENT) + public int getZ() + { + return this.z; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateBossInfo.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateBossInfo.java new file mode 100644 index 0000000..d22f5cc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateBossInfo.java @@ -0,0 +1,210 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.UUID; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.BossInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketUpdateBossInfo implements Packet +{ + private UUID uniqueId; + private SPacketUpdateBossInfo.Operation operation; + private ITextComponent name; + private float percent; + private BossInfo.Color color; + private BossInfo.Overlay overlay; + private boolean darkenSky; + private boolean playEndBossMusic; + private boolean createFog; + + public SPacketUpdateBossInfo() + { + } + + public SPacketUpdateBossInfo(SPacketUpdateBossInfo.Operation operationIn, BossInfo data) + { + this.operation = operationIn; + this.uniqueId = data.getUniqueId(); + this.name = data.getName(); + this.percent = data.getPercent(); + this.color = data.getColor(); + this.overlay = data.getOverlay(); + this.darkenSky = data.shouldDarkenSky(); + this.playEndBossMusic = data.shouldPlayEndBossMusic(); + this.createFog = data.shouldCreateFog(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.uniqueId = buf.readUniqueId(); + this.operation = (SPacketUpdateBossInfo.Operation)buf.readEnumValue(SPacketUpdateBossInfo.Operation.class); + + switch (this.operation) + { + case ADD: + this.name = buf.readTextComponent(); + this.percent = buf.readFloat(); + this.color = (BossInfo.Color)buf.readEnumValue(BossInfo.Color.class); + this.overlay = (BossInfo.Overlay)buf.readEnumValue(BossInfo.Overlay.class); + this.setFlags(buf.readUnsignedByte()); + case REMOVE: + default: + break; + case UPDATE_PCT: + this.percent = buf.readFloat(); + break; + case UPDATE_NAME: + this.name = buf.readTextComponent(); + break; + case UPDATE_STYLE: + this.color = (BossInfo.Color)buf.readEnumValue(BossInfo.Color.class); + this.overlay = (BossInfo.Overlay)buf.readEnumValue(BossInfo.Overlay.class); + break; + case UPDATE_PROPERTIES: + this.setFlags(buf.readUnsignedByte()); + } + } + + private void setFlags(int flags) + { + this.darkenSky = (flags & 1) > 0; + this.playEndBossMusic = (flags & 2) > 0; + this.createFog = (flags & 2) > 0; + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeUniqueId(this.uniqueId); + buf.writeEnumValue(this.operation); + + switch (this.operation) + { + case ADD: + buf.writeTextComponent(this.name); + buf.writeFloat(this.percent); + buf.writeEnumValue(this.color); + buf.writeEnumValue(this.overlay); + buf.writeByte(this.getFlags()); + case REMOVE: + default: + break; + case UPDATE_PCT: + buf.writeFloat(this.percent); + break; + case UPDATE_NAME: + buf.writeTextComponent(this.name); + break; + case UPDATE_STYLE: + buf.writeEnumValue(this.color); + buf.writeEnumValue(this.overlay); + break; + case UPDATE_PROPERTIES: + buf.writeByte(this.getFlags()); + } + } + + private int getFlags() + { + int i = 0; + + if (this.darkenSky) + { + i |= 1; + } + + if (this.playEndBossMusic) + { + i |= 2; + } + + if (this.createFog) + { + i |= 2; + } + + return i; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleUpdateBossInfo(this); + } + + @SideOnly(Side.CLIENT) + public UUID getUniqueId() + { + return this.uniqueId; + } + + @SideOnly(Side.CLIENT) + public SPacketUpdateBossInfo.Operation getOperation() + { + return this.operation; + } + + @SideOnly(Side.CLIENT) + public ITextComponent getName() + { + return this.name; + } + + @SideOnly(Side.CLIENT) + public float getPercent() + { + return this.percent; + } + + @SideOnly(Side.CLIENT) + public BossInfo.Color getColor() + { + return this.color; + } + + @SideOnly(Side.CLIENT) + public BossInfo.Overlay getOverlay() + { + return this.overlay; + } + + @SideOnly(Side.CLIENT) + public boolean shouldDarkenSky() + { + return this.darkenSky; + } + + @SideOnly(Side.CLIENT) + public boolean shouldPlayEndBossMusic() + { + return this.playEndBossMusic; + } + + @SideOnly(Side.CLIENT) + public boolean shouldCreateFog() + { + return this.createFog; + } + + public static enum Operation + { + ADD, + REMOVE, + UPDATE_PCT, + UPDATE_NAME, + UPDATE_STYLE, + UPDATE_PROPERTIES; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateHealth.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateHealth.java new file mode 100644 index 0000000..23e7b55 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateHealth.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketUpdateHealth implements Packet +{ + private float health; + private int foodLevel; + private float saturationLevel; + + public SPacketUpdateHealth() + { + } + + public SPacketUpdateHealth(float healthIn, int foodLevelIn, float saturationLevelIn) + { + this.health = healthIn; + this.foodLevel = foodLevelIn; + this.saturationLevel = saturationLevelIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.health = buf.readFloat(); + this.foodLevel = buf.readVarInt(); + this.saturationLevel = buf.readFloat(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeFloat(this.health); + buf.writeVarInt(this.foodLevel); + buf.writeFloat(this.saturationLevel); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleUpdateHealth(this); + } + + @SideOnly(Side.CLIENT) + public float getHealth() + { + return this.health; + } + + @SideOnly(Side.CLIENT) + public int getFoodLevel() + { + return this.foodLevel; + } + + @SideOnly(Side.CLIENT) + public float getSaturationLevel() + { + return this.saturationLevel; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateScore.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateScore.java new file mode 100644 index 0000000..4d8ba8d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateScore.java @@ -0,0 +1,114 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketUpdateScore implements Packet +{ + private String name = ""; + private String objective = ""; + private int value; + private SPacketUpdateScore.Action action; + + public SPacketUpdateScore() + { + } + + public SPacketUpdateScore(Score scoreIn) + { + this.name = scoreIn.getPlayerName(); + this.objective = scoreIn.getObjective().getName(); + this.value = scoreIn.getScorePoints(); + this.action = SPacketUpdateScore.Action.CHANGE; + } + + public SPacketUpdateScore(String nameIn) + { + this.name = nameIn; + this.objective = ""; + this.value = 0; + this.action = SPacketUpdateScore.Action.REMOVE; + } + + public SPacketUpdateScore(String nameIn, ScoreObjective objectiveIn) + { + this.name = nameIn; + this.objective = objectiveIn.getName(); + this.value = 0; + this.action = SPacketUpdateScore.Action.REMOVE; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.name = buf.readString(40); + this.action = (SPacketUpdateScore.Action)buf.readEnumValue(SPacketUpdateScore.Action.class); + this.objective = buf.readString(16); + + if (this.action != SPacketUpdateScore.Action.REMOVE) + { + this.value = buf.readVarInt(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(this.name); + buf.writeEnumValue(this.action); + buf.writeString(this.objective); + + if (this.action != SPacketUpdateScore.Action.REMOVE) + { + buf.writeVarInt(this.value); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleUpdateScore(this); + } + + @SideOnly(Side.CLIENT) + public String getPlayerName() + { + return this.name; + } + + @SideOnly(Side.CLIENT) + public String getObjectiveName() + { + return this.objective; + } + + @SideOnly(Side.CLIENT) + public int getScoreValue() + { + return this.value; + } + + @SideOnly(Side.CLIENT) + public SPacketUpdateScore.Action getScoreAction() + { + return this.action; + } + + public static enum Action + { + CHANGE, + REMOVE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateTileEntity.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateTileEntity.java new file mode 100644 index 0000000..8319aaf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUpdateTileEntity.java @@ -0,0 +1,75 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketUpdateTileEntity implements Packet +{ + private BlockPos blockPos; + /** Used only for vanilla tile entities */ + private int tileEntityType; + private NBTTagCompound nbt; + + public SPacketUpdateTileEntity() + { + } + + public SPacketUpdateTileEntity(BlockPos blockPosIn, int tileEntityTypeIn, NBTTagCompound compoundIn) + { + this.blockPos = blockPosIn; + this.tileEntityType = tileEntityTypeIn; + this.nbt = compoundIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.blockPos = buf.readBlockPos(); + this.tileEntityType = buf.readUnsignedByte(); + this.nbt = buf.readCompoundTag(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeBlockPos(this.blockPos); + buf.writeByte((byte)this.tileEntityType); + buf.writeCompoundTag(this.nbt); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleUpdateTileEntity(this); + } + + @SideOnly(Side.CLIENT) + public BlockPos getPos() + { + return this.blockPos; + } + + @SideOnly(Side.CLIENT) + public int getTileEntityType() + { + return this.tileEntityType; + } + + @SideOnly(Side.CLIENT) + public NBTTagCompound getNbtCompound() + { + return this.nbt; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUseBed.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUseBed.java new file mode 100644 index 0000000..e89f3c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketUseBed.java @@ -0,0 +1,66 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketUseBed implements Packet +{ + private int playerID; + /** Block location of the head part of the bed */ + private BlockPos bedPos; + + public SPacketUseBed() + { + } + + public SPacketUseBed(EntityPlayer player, BlockPos posIn) + { + this.playerID = player.getEntityId(); + this.bedPos = posIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.playerID = buf.readVarInt(); + this.bedPos = buf.readBlockPos(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeVarInt(this.playerID); + buf.writeBlockPos(this.bedPos); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleUseBed(this); + } + + @SideOnly(Side.CLIENT) + public EntityPlayer getPlayer(World worldIn) + { + return (EntityPlayer)worldIn.getEntityByID(this.playerID); + } + + @SideOnly(Side.CLIENT) + public BlockPos getBedPosition() + { + return this.bedPos; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWindowItems.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWindowItems.java new file mode 100644 index 0000000..2151661 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWindowItems.java @@ -0,0 +1,82 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import java.util.List; +import net.minecraft.item.ItemStack; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketWindowItems implements Packet +{ + private int windowId; + private List itemStacks; + + public SPacketWindowItems() + { + } + + public SPacketWindowItems(int p_i47317_1_, NonNullList p_i47317_2_) + { + this.windowId = p_i47317_1_; + this.itemStacks = NonNullList.withSize(p_i47317_2_.size(), ItemStack.EMPTY); + + for (int i = 0; i < this.itemStacks.size(); ++i) + { + ItemStack itemstack = p_i47317_2_.get(i); + this.itemStacks.set(i, itemstack.copy()); + } + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readUnsignedByte(); + int i = buf.readShort(); + this.itemStacks = NonNullList.withSize(i, ItemStack.EMPTY); + + for (int j = 0; j < i; ++j) + { + this.itemStacks.set(j, buf.readItemStack()); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeShort(this.itemStacks.size()); + + for (ItemStack itemstack : this.itemStacks) + { + buf.writeItemStack(itemstack); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleWindowItems(this); + } + + @SideOnly(Side.CLIENT) + public int getWindowId() + { + return this.windowId; + } + + @SideOnly(Side.CLIENT) + public List getItemStacks() + { + return this.itemStacks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWindowProperty.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWindowProperty.java new file mode 100644 index 0000000..91d5d42 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWindowProperty.java @@ -0,0 +1,72 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketWindowProperty implements Packet +{ + private int windowId; + private int property; + private int value; + + public SPacketWindowProperty() + { + } + + public SPacketWindowProperty(int windowIdIn, int propertyIn, int valueIn) + { + this.windowId = windowIdIn; + this.property = propertyIn; + this.value = valueIn; + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleWindowProperty(this); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.windowId = buf.readUnsignedByte(); + this.property = buf.readShort(); + this.value = buf.readShort(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeByte(this.windowId); + buf.writeShort(this.property); + buf.writeShort(this.value); + } + + @SideOnly(Side.CLIENT) + public int getWindowId() + { + return this.windowId; + } + + @SideOnly(Side.CLIENT) + public int getProperty() + { + return this.property; + } + + @SideOnly(Side.CLIENT) + public int getValue() + { + return this.value; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWorldBorder.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWorldBorder.java new file mode 100644 index 0000000..6b163e1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/SPacketWorldBorder.java @@ -0,0 +1,173 @@ +package net.minecraft.network.play.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.INetHandlerPlayClient; +import net.minecraft.world.border.WorldBorder; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketWorldBorder implements Packet +{ + private SPacketWorldBorder.Action action; + private int size; + private double centerX; + private double centerZ; + private double targetSize; + private double diameter; + private long timeUntilTarget; + private int warningTime; + private int warningDistance; + + public SPacketWorldBorder() + { + } + + public SPacketWorldBorder(WorldBorder border, SPacketWorldBorder.Action actionIn) + { + this.action = actionIn; + this.centerX = border.getCenterX(); + this.centerZ = border.getCenterZ(); + this.diameter = border.getDiameter(); + this.targetSize = border.getTargetSize(); + this.timeUntilTarget = border.getTimeUntilTarget(); + this.size = border.getSize(); + this.warningDistance = border.getWarningDistance(); + this.warningTime = border.getWarningTime(); + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.action = (SPacketWorldBorder.Action)buf.readEnumValue(SPacketWorldBorder.Action.class); + + switch (this.action) + { + case SET_SIZE: + this.targetSize = buf.readDouble(); + break; + case LERP_SIZE: + this.diameter = buf.readDouble(); + this.targetSize = buf.readDouble(); + this.timeUntilTarget = buf.readVarLong(); + break; + case SET_CENTER: + this.centerX = buf.readDouble(); + this.centerZ = buf.readDouble(); + break; + case SET_WARNING_BLOCKS: + this.warningDistance = buf.readVarInt(); + break; + case SET_WARNING_TIME: + this.warningTime = buf.readVarInt(); + break; + case INITIALIZE: + this.centerX = buf.readDouble(); + this.centerZ = buf.readDouble(); + this.diameter = buf.readDouble(); + this.targetSize = buf.readDouble(); + this.timeUntilTarget = buf.readVarLong(); + this.size = buf.readVarInt(); + this.warningDistance = buf.readVarInt(); + this.warningTime = buf.readVarInt(); + } + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeEnumValue(this.action); + + switch (this.action) + { + case SET_SIZE: + buf.writeDouble(this.targetSize); + break; + case LERP_SIZE: + buf.writeDouble(this.diameter); + buf.writeDouble(this.targetSize); + buf.writeVarLong(this.timeUntilTarget); + break; + case SET_CENTER: + buf.writeDouble(this.centerX); + buf.writeDouble(this.centerZ); + break; + case SET_WARNING_BLOCKS: + buf.writeVarInt(this.warningDistance); + break; + case SET_WARNING_TIME: + buf.writeVarInt(this.warningTime); + break; + case INITIALIZE: + buf.writeDouble(this.centerX); + buf.writeDouble(this.centerZ); + buf.writeDouble(this.diameter); + buf.writeDouble(this.targetSize); + buf.writeVarLong(this.timeUntilTarget); + buf.writeVarInt(this.size); + buf.writeVarInt(this.warningDistance); + buf.writeVarInt(this.warningTime); + } + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerPlayClient handler) + { + handler.handleWorldBorder(this); + } + + @SideOnly(Side.CLIENT) + public void apply(WorldBorder border) + { + switch (this.action) + { + case SET_SIZE: + border.setTransition(this.targetSize); + break; + case LERP_SIZE: + border.setTransition(this.diameter, this.targetSize, this.timeUntilTarget); + break; + case SET_CENTER: + border.setCenter(this.centerX, this.centerZ); + break; + case SET_WARNING_BLOCKS: + border.setWarningDistance(this.warningDistance); + break; + case SET_WARNING_TIME: + border.setWarningTime(this.warningTime); + break; + case INITIALIZE: + border.setCenter(this.centerX, this.centerZ); + + if (this.timeUntilTarget > 0L) + { + border.setTransition(this.diameter, this.targetSize, this.timeUntilTarget); + } + else + { + border.setTransition(this.targetSize); + } + + border.setSize(this.size); + border.setWarningDistance(this.warningDistance); + border.setWarningTime(this.warningTime); + } + } + + public static enum Action + { + SET_SIZE, + LERP_SIZE, + SET_CENTER, + INITIALIZE, + SET_WARNING_TIME, + SET_WARNING_BLOCKS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/play/server/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/package-info.java new file mode 100644 index 0000000..8368d4e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/play/server/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.play.server; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/IServer.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/IServer.java new file mode 100644 index 0000000..2b49126 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/IServer.java @@ -0,0 +1,105 @@ +package net.minecraft.network.rcon; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public interface IServer +{ + /** + * Gets an integer property. If it does not exist, set it to the specified value. + */ + int getIntProperty(String key, int defaultValue); + + /** + * Gets a string property. If it does not exist, set it to the specified value. + */ + String getStringProperty(String key, String defaultValue); + + /** + * Saves an Object with the given property name. + */ + void setProperty(String key, Object value); + + /** + * Saves all of the server properties to the properties file. + */ + void saveProperties(); + + /** + * Returns the filename where server properties are stored + */ + String getSettingsFilename(); + + /** + * Returns the server's hostname. + */ + String getHostname(); + + /** + * Never used, but "getServerPort" is already taken. + */ + int getPort(); + + /** + * Returns the server message of the day + */ + String getMotd(); + + /** + * Returns the server's Minecraft version as string. + */ + String getMinecraftVersion(); + + /** + * Returns the number of players currently on the server. + */ + int getCurrentPlayerCount(); + + /** + * Returns the maximum number of players allowed on the server. + */ + int getMaxPlayers(); + + /** + * Returns an array of the usernames of all the connected players. + */ + String[] getOnlinePlayerNames(); + + String getFolderName(); + + /** + * Used by RCon's Query in the form of "MajorServerMod 1.2.3: MyPlugin 1.3; AnotherPlugin 2.1; AndSoForth 1.0". + */ + String getPlugins(); + + /** + * Handle a command received by an RCon instance + */ + String handleRConCommand(String command); + + /** + * Returns true if debugging is enabled, false otherwise. + */ + boolean isDebuggingEnabled(); + + /** + * Logs the message with a level of INFO. + */ + void logInfo(String msg); + + /** + * Logs the message with a level of WARN. + */ + void logWarning(String msg); + + /** + * Logs the error message with a level of SEVERE. + */ + void logSevere(String msg); + + /** + * If isDebuggingEnabled(), logs the message with a level of INFO. + */ + void logDebug(String msg); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConConsoleSource.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConConsoleSource.java new file mode 100644 index 0000000..b101528 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConConsoleSource.java @@ -0,0 +1,87 @@ +package net.minecraft.network.rcon; + +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class RConConsoleSource implements ICommandSender +{ + /** RCon string buffer for log. */ + private final StringBuffer buffer = new StringBuffer(); + private final MinecraftServer server; + + public RConConsoleSource(MinecraftServer serverIn) + { + this.server = serverIn; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "Rcon"; + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + this.buffer.append(component.getUnformattedText()); + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return true; + } + + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, return + * the overworld + */ + public World getEntityWorld() + { + return this.server.getEntityWorld(); + } + + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return true; + } + + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return this.server; + } + + /** + * Clears the RCon log + */ + @SideOnly(Side.SERVER) + public void resetLog() + { + this.buffer.setLength(0); + } + + /** + * Gets the contents of the RCon log + */ + @SideOnly(Side.SERVER) + public String getLogContents() + { + return this.buffer.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConOutputStream.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConOutputStream.java new file mode 100644 index 0000000..71fecd6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConOutputStream.java @@ -0,0 +1,71 @@ +package net.minecraft.network.rcon; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class RConOutputStream +{ + /** Output stream */ + private final ByteArrayOutputStream byteArrayOutput; + /** ByteArrayOutputStream wrapper */ + private final DataOutputStream output; + + public RConOutputStream(int size) + { + this.byteArrayOutput = new ByteArrayOutputStream(size); + this.output = new DataOutputStream(this.byteArrayOutput); + } + + /** + * Writes the given byte array to the output stream + */ + public void writeByteArray(byte[] data) throws IOException + { + this.output.write(data, 0, data.length); + } + + /** + * Writes the given String to the output stream + */ + public void writeString(String data) throws IOException + { + this.output.writeBytes(data); + this.output.write(0); + } + + /** + * Writes the given int to the output stream + */ + public void writeInt(int data) throws IOException + { + this.output.write(data); + } + + /** + * Writes the given short to the output stream + */ + public void writeShort(short data) throws IOException + { + this.output.writeShort(Short.reverseBytes(data)); + } + + /** + * Returns the contents of the output stream as a byte array + */ + public byte[] toByteArray() + { + return this.byteArrayOutput.toByteArray(); + } + + /** + * Resets the byte array output. + */ + public void reset() + { + this.byteArrayOutput.reset(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadBase.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadBase.java new file mode 100644 index 0000000..cda26ba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadBase.java @@ -0,0 +1,222 @@ +package net.minecraft.network.rcon; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.ServerSocket; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public abstract class RConThreadBase implements Runnable +{ + private static final AtomicInteger THREAD_ID = new AtomicInteger(0); + /** True if the Thread is running, false otherwise */ + protected boolean running; + /** Reference to the IServer object. */ + protected IServer server; + protected final String threadName; + /** Thread for this runnable class */ + protected Thread rconThread; + protected int maxStopWait = 5; + /** A list of registered DatagramSockets */ + protected List socketList = Lists.newArrayList(); + /** A list of registered ServerSockets */ + protected List serverSocketList = Lists.newArrayList(); + + protected RConThreadBase(IServer serverIn, String threadName) + { + this.server = serverIn; + this.threadName = threadName; + + if (this.server.isDebuggingEnabled()) + { + this.logWarning("Debugging is enabled, performance maybe reduced!"); + } + } + + /** + * Creates a new Thread object from this class and starts running + */ + public synchronized void startThread() + { + this.rconThread = new Thread(this, this.threadName + " #" + THREAD_ID.incrementAndGet()); + this.rconThread.start(); + this.running = true; + } + + /** + * Returns true if the Thread is running, false otherwise + */ + public boolean isRunning() + { + return this.running; + } + + /** + * Log debug message + */ + protected void logDebug(String msg) + { + this.server.logDebug(msg); + } + + /** + * Log information message + */ + protected void logInfo(String msg) + { + this.server.logInfo(msg); + } + + /** + * Log warning message + */ + protected void logWarning(String msg) + { + this.server.logWarning(msg); + } + + /** + * Log severe error message + */ + protected void logSevere(String msg) + { + this.server.logSevere(msg); + } + + /** + * Returns the number of players on the server + */ + protected int getNumberOfPlayers() + { + return this.server.getCurrentPlayerCount(); + } + + /** + * Registers a DatagramSocket with this thread + */ + protected void registerSocket(DatagramSocket socket) + { + this.logDebug("registerSocket: " + socket); + this.socketList.add(socket); + } + + /** + * Closes the specified DatagramSocket + */ + protected boolean closeSocket(DatagramSocket socket, boolean removeFromList) + { + this.logDebug("closeSocket: " + socket); + + if (null == socket) + { + return false; + } + else + { + boolean flag = false; + + if (!socket.isClosed()) + { + socket.close(); + flag = true; + } + + if (removeFromList) + { + this.socketList.remove(socket); + } + + return flag; + } + } + + /** + * Closes the specified ServerSocket + */ + protected boolean closeServerSocket(ServerSocket socket) + { + return this.closeServerSocket_do(socket, true); + } + + /** + * Closes the specified ServerSocket + */ + protected boolean closeServerSocket_do(ServerSocket socket, boolean removeFromList) + { + this.logDebug("closeSocket: " + socket); + + if (null == socket) + { + return false; + } + else + { + boolean flag = false; + + try + { + if (!socket.isClosed()) + { + socket.close(); + flag = true; + } + } + catch (IOException ioexception) + { + this.logWarning("IO: " + ioexception.getMessage()); + } + + if (removeFromList) + { + this.serverSocketList.remove(socket); + } + + return flag; + } + } + + /** + * Closes all of the opened sockets + */ + protected void closeAllSockets() + { + this.closeAllSockets_do(false); + } + + /** + * Closes all of the opened sockets + */ + protected void closeAllSockets_do(boolean logWarning) + { + int i = 0; + + for (DatagramSocket datagramsocket : this.socketList) + { + if (this.closeSocket(datagramsocket, false)) + { + ++i; + } + } + + this.socketList.clear(); + + for (ServerSocket serversocket : this.serverSocketList) + { + if (this.closeServerSocket_do(serversocket, false)) + { + ++i; + } + } + + this.serverSocketList.clear(); + + if (logWarning && 0 < i) + { + this.logWarning("Force closed " + i + " sockets"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadClient.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadClient.java new file mode 100644 index 0000000..e341124 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadClient.java @@ -0,0 +1,204 @@ +package net.minecraft.network.rcon; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketTimeoutException; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class RConThreadClient extends RConThreadBase +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** True if the client has succefssfully logged into the RCon, otherwise false */ + private boolean loggedIn; + /** The client's Socket connection */ + private Socket clientSocket; + /** A buffer for incoming Socket data */ + private final byte[] buffer = new byte[1460]; + /** The RCon password */ + private final String rconPassword; + + RConThreadClient(IServer p_i1537_1_, Socket socket) + { + super(p_i1537_1_, "RCON Client"); + this.clientSocket = socket; + + try + { + this.clientSocket.setSoTimeout(0); + } + catch (Exception var4) + { + this.running = false; + } + + this.rconPassword = p_i1537_1_.getStringProperty("rcon.password", ""); + this.logInfo("Rcon connection from: " + socket.getInetAddress()); + } + + public void run() + { + while (true) + { + try + { + if (!this.running) + { + return; + } + + BufferedInputStream bufferedinputstream = new BufferedInputStream(this.clientSocket.getInputStream()); + int i = bufferedinputstream.read(this.buffer, 0, 1460); + + if (10 <= i) + { + int j = 0; + int k = RConUtils.getBytesAsLEInt(this.buffer, 0, i); + + if (k != i - 4) + { + return; + } + + j = j + 4; + int l = RConUtils.getBytesAsLEInt(this.buffer, j, i); + j = j + 4; + int i1 = RConUtils.getRemainingBytesAsLEInt(this.buffer, j); + j = j + 4; + + switch (i1) + { + case 2: + + if (this.loggedIn) + { + String s1 = RConUtils.getBytesAsString(this.buffer, j, i); + + try + { + this.sendMultipacketResponse(l, this.server.handleRConCommand(s1)); + } + catch (Exception exception) + { + this.sendMultipacketResponse(l, "Error executing: " + s1 + " (" + exception.getMessage() + ")"); + } + + continue; + } + + this.sendLoginFailedResponse(); + continue; + case 3: + String s = RConUtils.getBytesAsString(this.buffer, j, i); + int j1 = j + s.length(); + + if (!s.isEmpty() && s.equals(this.rconPassword)) + { + this.loggedIn = true; + this.sendResponse(l, 2, ""); + continue; + } + + this.loggedIn = false; + this.sendLoginFailedResponse(); + continue; + default: + this.sendMultipacketResponse(l, String.format("Unknown request %s", Integer.toHexString(i1))); + continue; + } + } + } + catch (SocketTimeoutException var17) + { + return; + } + catch (IOException var18) + { + return; + } + catch (Exception exception1) + { + LOGGER.error("Exception whilst parsing RCON input", (Throwable)exception1); + return; + } + finally + { + this.closeSocket(); + } + + return; + } + } + + /** + * Sends the given response message to the client + */ + private void sendResponse(int p_72654_1_, int p_72654_2_, String message) throws IOException + { + ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(1248); + DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream); + byte[] abyte = message.getBytes("UTF-8"); + dataoutputstream.writeInt(Integer.reverseBytes(abyte.length + 10)); + dataoutputstream.writeInt(Integer.reverseBytes(p_72654_1_)); + dataoutputstream.writeInt(Integer.reverseBytes(p_72654_2_)); + dataoutputstream.write(abyte); + dataoutputstream.write(0); + dataoutputstream.write(0); + this.clientSocket.getOutputStream().write(bytearrayoutputstream.toByteArray()); + } + + /** + * Sends the standard RCon 'authorization failed' response packet + */ + private void sendLoginFailedResponse() throws IOException + { + this.sendResponse(-1, 2, ""); + } + + /** + * Splits the response message into individual packets and sends each one + */ + private void sendMultipacketResponse(int p_72655_1_, String p_72655_2_) throws IOException + { + int i = p_72655_2_.length(); + + while (true) + { + int j = 4096 <= i ? 4096 : i; + this.sendResponse(p_72655_1_, 0, p_72655_2_.substring(0, j)); + p_72655_2_ = p_72655_2_.substring(j); + i = p_72655_2_.length(); + + if (0 == i) + { + break; + } + } + } + + /** + * Closes the client socket + */ + private void closeSocket() + { + if (null != this.clientSocket) + { + try + { + this.clientSocket.close(); + } + catch (IOException ioexception) + { + this.logWarning("IO: " + ioexception.getMessage()); + } + + this.clientSocket = null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadMain.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadMain.java new file mode 100644 index 0000000..9d71a97 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadMain.java @@ -0,0 +1,152 @@ +package net.minecraft.network.rcon; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketTimeoutException; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class RConThreadMain extends RConThreadBase +{ + /** Port RCon is running on */ + private int rconPort; + /** Port the server is running on */ + private final int serverPort; + /** Hostname RCon is running on */ + private String hostname; + /** The RCon ServerSocket. */ + private ServerSocket serverSocket; + /** The RCon password */ + private final String rconPassword; + /** A map of client addresses to their running Threads */ + private Map clientThreads; + + public RConThreadMain(IServer p_i1538_1_) + { + super(p_i1538_1_, "RCON Listener"); + this.rconPort = p_i1538_1_.getIntProperty("rcon.port", 0); + this.rconPassword = p_i1538_1_.getStringProperty("rcon.password", ""); + this.hostname = p_i1538_1_.getHostname(); + this.serverPort = p_i1538_1_.getPort(); + + if (0 == this.rconPort) + { + this.rconPort = this.serverPort + 10; + this.logInfo("Setting default rcon port to " + this.rconPort); + p_i1538_1_.setProperty("rcon.port", Integer.valueOf(this.rconPort)); + + if (this.rconPassword.isEmpty()) + { + p_i1538_1_.setProperty("rcon.password", ""); + } + + p_i1538_1_.saveProperties(); + } + + if (this.hostname.isEmpty()) + { + this.hostname = "0.0.0.0"; + } + + this.initClientThreadList(); + this.serverSocket = null; + } + + private void initClientThreadList() + { + this.clientThreads = Maps.newHashMap(); + } + + /** + * Cleans up the clientThreads map by removing client Threads that are not running + */ + private void cleanClientThreadsMap() + { + Iterator> iterator = this.clientThreads.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + + if (!((RConThreadClient)entry.getValue()).isRunning()) + { + iterator.remove(); + } + } + } + + public void run() + { + this.logInfo("RCON running on " + this.hostname + ":" + this.rconPort); + + try + { + while (this.running) + { + try + { + Socket socket = this.serverSocket.accept(); + socket.setSoTimeout(500); + RConThreadClient rconthreadclient = new RConThreadClient(this.server, socket); + rconthreadclient.startThread(); + this.clientThreads.put(socket.getRemoteSocketAddress(), rconthreadclient); + this.cleanClientThreadsMap(); + } + catch (SocketTimeoutException var7) + { + this.cleanClientThreadsMap(); + } + catch (IOException ioexception) + { + if (this.running) + { + this.logInfo("IO: " + ioexception.getMessage()); + } + } + } + } + finally + { + this.closeServerSocket(this.serverSocket); + } + } + + /** + * Creates a new Thread object from this class and starts running + */ + public void startThread() + { + if (this.rconPassword.isEmpty()) + { + this.logWarning("No rcon password set in '" + this.server.getSettingsFilename() + "', rcon disabled!"); + } + else if (0 < this.rconPort && 65535 >= this.rconPort) + { + if (!this.running) + { + try + { + this.serverSocket = new ServerSocket(this.rconPort, 0, InetAddress.getByName(this.hostname)); + this.serverSocket.setSoTimeout(500); + super.startThread(); + } + catch (IOException ioexception) + { + this.logWarning("Unable to initialise rcon on " + this.hostname + ":" + this.rconPort + " : " + ioexception.getMessage()); + } + } + } + else + { + this.logWarning("Invalid rcon port " + this.rconPort + " found in '" + this.server.getSettingsFilename() + "', rcon disabled!"); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadQuery.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadQuery.java new file mode 100644 index 0000000..d00df66 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConThreadQuery.java @@ -0,0 +1,457 @@ +package net.minecraft.network.rcon; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.PortUnreachableException; +import java.net.SocketAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; +import net.minecraft.server.MinecraftServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class RConThreadQuery extends RConThreadBase +{ + /** The time of the last client auth check */ + private long lastAuthCheckTime; + /** The RCon query port */ + private int queryPort; + /** Port the server is running on */ + private final int serverPort; + /** The maximum number of players allowed on the server */ + private final int maxPlayers; + /** The current server message of the day */ + private final String serverMotd; + /** The name of the currently loaded world */ + private final String worldName; + /** The remote socket querying the server */ + private DatagramSocket querySocket; + /** A buffer for incoming DatagramPackets */ + private final byte[] buffer = new byte[1460]; + /** Storage for incoming DatagramPackets */ + private DatagramPacket incomingPacket; + private final Map idents; + /** The hostname of this query server */ + private String queryHostname; + /** The hostname of the running server */ + private String serverHostname; + /** A map of SocketAddress objects to RConThreadQueryAuth objects */ + private final Map queryClients; + /** The time that this RConThreadQuery was constructed, from (new Date()).getTime() */ + private final long time; + /** The RConQuery output stream */ + private final RConOutputStream output; + /** The time of the last query response sent */ + private long lastQueryResponseTime; + + public RConThreadQuery(IServer p_i1536_1_) + { + super(p_i1536_1_, "Query Listener"); + this.queryPort = p_i1536_1_.getIntProperty("query.port", 0); + this.serverHostname = p_i1536_1_.getHostname(); + this.serverPort = p_i1536_1_.getPort(); + this.serverMotd = p_i1536_1_.getMotd(); + this.maxPlayers = p_i1536_1_.getMaxPlayers(); + this.worldName = p_i1536_1_.getFolderName(); + this.lastQueryResponseTime = 0L; + this.queryHostname = "0.0.0.0"; + + if (!this.serverHostname.isEmpty() && !this.queryHostname.equals(this.serverHostname)) + { + this.queryHostname = this.serverHostname; + } + else + { + this.serverHostname = "0.0.0.0"; + + try + { + InetAddress inetaddress = InetAddress.getLocalHost(); + this.queryHostname = inetaddress.getHostAddress(); + } + catch (UnknownHostException unknownhostexception) + { + this.logWarning("Unable to determine local host IP, please set server-ip in '" + p_i1536_1_.getSettingsFilename() + "' : " + unknownhostexception.getMessage()); + } + } + + if (0 == this.queryPort) + { + this.queryPort = this.serverPort; + this.logInfo("Setting default query port to " + this.queryPort); + p_i1536_1_.setProperty("query.port", Integer.valueOf(this.queryPort)); + p_i1536_1_.setProperty("debug", Boolean.valueOf(false)); + p_i1536_1_.saveProperties(); + } + + this.idents = Maps.newHashMap(); + this.output = new RConOutputStream(1460); + this.queryClients = Maps.newHashMap(); + this.time = (new Date()).getTime(); + } + + /** + * Sends a byte array as a DatagramPacket response to the client who sent the given DatagramPacket + */ + private void sendResponsePacket(byte[] data, DatagramPacket requestPacket) throws IOException + { + this.querySocket.send(new DatagramPacket(data, data.length, requestPacket.getSocketAddress())); + } + + /** + * Parses an incoming DatagramPacket, returning true if the packet was valid + */ + private boolean parseIncomingPacket(DatagramPacket requestPacket) throws IOException + { + byte[] abyte = requestPacket.getData(); + int i = requestPacket.getLength(); + SocketAddress socketaddress = requestPacket.getSocketAddress(); + this.logDebug("Packet len " + i + " [" + socketaddress + "]"); + + if (3 <= i && -2 == abyte[0] && -3 == abyte[1]) + { + this.logDebug("Packet '" + RConUtils.getByteAsHexString(abyte[2]) + "' [" + socketaddress + "]"); + + switch (abyte[2]) + { + case 0: + + if (!this.verifyClientAuth(requestPacket).booleanValue()) + { + this.logDebug("Invalid challenge [" + socketaddress + "]"); + return false; + } + else if (15 == i) + { + this.sendResponsePacket(this.createQueryResponse(requestPacket), requestPacket); + this.logDebug("Rules [" + socketaddress + "]"); + } + else + { + RConOutputStream rconoutputstream = new RConOutputStream(1460); + rconoutputstream.writeInt(0); + rconoutputstream.writeByteArray(this.getRequestID(requestPacket.getSocketAddress())); + rconoutputstream.writeString(this.serverMotd); + rconoutputstream.writeString("SMP"); + rconoutputstream.writeString(this.worldName); + rconoutputstream.writeString(Integer.toString(this.getNumberOfPlayers())); + rconoutputstream.writeString(Integer.toString(this.maxPlayers)); + rconoutputstream.writeShort((short)this.serverPort); + rconoutputstream.writeString(this.queryHostname); + this.sendResponsePacket(rconoutputstream.toByteArray(), requestPacket); + this.logDebug("Status [" + socketaddress + "]"); + } + + default: + return true; + case 9: + this.sendAuthChallenge(requestPacket); + this.logDebug("Challenge [" + socketaddress + "]"); + return true; + } + } + else + { + this.logDebug("Invalid packet [" + socketaddress + "]"); + return false; + } + } + + /** + * Creates a query response as a byte array for the specified query DatagramPacket + */ + private byte[] createQueryResponse(DatagramPacket requestPacket) throws IOException + { + long i = MinecraftServer.getCurrentTimeMillis(); + + if (i < this.lastQueryResponseTime + 5000L) + { + byte[] abyte = this.output.toByteArray(); + byte[] abyte1 = this.getRequestID(requestPacket.getSocketAddress()); + abyte[1] = abyte1[0]; + abyte[2] = abyte1[1]; + abyte[3] = abyte1[2]; + abyte[4] = abyte1[3]; + return abyte; + } + else + { + this.lastQueryResponseTime = i; + this.output.reset(); + this.output.writeInt(0); + this.output.writeByteArray(this.getRequestID(requestPacket.getSocketAddress())); + this.output.writeString("splitnum"); + this.output.writeInt(128); + this.output.writeInt(0); + this.output.writeString("hostname"); + this.output.writeString(this.serverMotd); + this.output.writeString("gametype"); + this.output.writeString("SMP"); + this.output.writeString("game_id"); + this.output.writeString("MINECRAFT"); + this.output.writeString("version"); + this.output.writeString(this.server.getMinecraftVersion()); + this.output.writeString("plugins"); + this.output.writeString(this.server.getPlugins()); + this.output.writeString("map"); + this.output.writeString(this.worldName); + this.output.writeString("numplayers"); + this.output.writeString("" + this.getNumberOfPlayers()); + this.output.writeString("maxplayers"); + this.output.writeString("" + this.maxPlayers); + this.output.writeString("hostport"); + this.output.writeString("" + this.serverPort); + this.output.writeString("hostip"); + this.output.writeString(this.queryHostname); + this.output.writeInt(0); + this.output.writeInt(1); + this.output.writeString("player_"); + this.output.writeInt(0); + String[] astring = this.server.getOnlinePlayerNames(); + + for (String s : astring) + { + this.output.writeString(s); + } + + this.output.writeInt(0); + return this.output.toByteArray(); + } + } + + /** + * Returns the request ID provided by the authorized client + */ + private byte[] getRequestID(SocketAddress address) + { + return ((RConThreadQuery.Auth)this.queryClients.get(address)).getRequestId(); + } + + /** + * Returns true if the client has a valid auth, otherwise false + */ + private Boolean verifyClientAuth(DatagramPacket requestPacket) + { + SocketAddress socketaddress = requestPacket.getSocketAddress(); + + if (!this.queryClients.containsKey(socketaddress)) + { + return false; + } + else + { + byte[] abyte = requestPacket.getData(); + return ((RConThreadQuery.Auth)this.queryClients.get(socketaddress)).getRandomChallenge() != RConUtils.getBytesAsBEint(abyte, 7, requestPacket.getLength()) ? false : true; + } + } + + /** + * Sends an auth challenge DatagramPacket to the client and adds the client to the queryClients map + */ + private void sendAuthChallenge(DatagramPacket requestPacket) throws IOException + { + RConThreadQuery.Auth rconthreadquery$auth = new RConThreadQuery.Auth(requestPacket); + this.queryClients.put(requestPacket.getSocketAddress(), rconthreadquery$auth); + this.sendResponsePacket(rconthreadquery$auth.getChallengeValue(), requestPacket); + } + + /** + * Removes all clients whose auth is no longer valid + */ + private void cleanQueryClientsMap() + { + if (this.running) + { + long i = MinecraftServer.getCurrentTimeMillis(); + + if (i >= this.lastAuthCheckTime + 30000L) + { + this.lastAuthCheckTime = i; + Iterator> iterator = this.queryClients.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + + if (((RConThreadQuery.Auth)entry.getValue()).hasExpired(i).booleanValue()) + { + iterator.remove(); + } + } + } + } + } + + public void run() + { + this.logInfo("Query running on " + this.serverHostname + ":" + this.queryPort); + this.lastAuthCheckTime = MinecraftServer.getCurrentTimeMillis(); + this.incomingPacket = new DatagramPacket(this.buffer, this.buffer.length); + + try + { + while (this.running) + { + try + { + this.querySocket.receive(this.incomingPacket); + this.cleanQueryClientsMap(); + this.parseIncomingPacket(this.incomingPacket); + } + catch (SocketTimeoutException var7) + { + this.cleanQueryClientsMap(); + } + catch (PortUnreachableException var8) + { + ; + } + catch (IOException ioexception) + { + this.stopWithException(ioexception); + } + } + } + finally + { + this.closeAllSockets(); + } + } + + /** + * Creates a new Thread object from this class and starts running + */ + public void startThread() + { + if (!this.running) + { + if (0 < this.queryPort && 65535 >= this.queryPort) + { + if (this.initQuerySystem()) + { + super.startThread(); + } + } + else + { + this.logWarning("Invalid query port " + this.queryPort + " found in '" + this.server.getSettingsFilename() + "' (queries disabled)"); + } + } + } + + /** + * Stops the query server and reports the given Exception + */ + private void stopWithException(Exception exception) + { + if (this.running) + { + this.logWarning("Unexpected exception, buggy JRE? (" + exception + ")"); + + if (!this.initQuerySystem()) + { + this.logSevere("Failed to recover from buggy JRE, shutting down!"); + this.running = false; + } + } + } + + /** + * Initializes the query system by binding it to a port + */ + private boolean initQuerySystem() + { + try + { + this.querySocket = new DatagramSocket(this.queryPort, InetAddress.getByName(this.serverHostname)); + this.registerSocket(this.querySocket); + this.querySocket.setSoTimeout(500); + return true; + } + catch (SocketException socketexception) + { + this.logWarning("Unable to initialise query system on " + this.serverHostname + ":" + this.queryPort + " (Socket): " + socketexception.getMessage()); + } + catch (UnknownHostException unknownhostexception) + { + this.logWarning("Unable to initialise query system on " + this.serverHostname + ":" + this.queryPort + " (Unknown Host): " + unknownhostexception.getMessage()); + } + catch (Exception exception) + { + this.logWarning("Unable to initialise query system on " + this.serverHostname + ":" + this.queryPort + " (E): " + exception.getMessage()); + } + + return false; + } + + @SideOnly(Side.SERVER) + class Auth + { + /** The creation timestamp for this auth */ + private final long timestamp = (new Date()).getTime(); + /** A random integer value to be used for client response authentication */ + private final int randomChallenge; + /** A client-provided request ID associated with this query. */ + private final byte[] requestId; + /** A unique string of bytes used to verify client auth */ + private final byte[] challengeValue; + /** The request ID stored as a String */ + private final String requestIdAsString; + + public Auth(DatagramPacket requestPacket) + { + byte[] abyte = requestPacket.getData(); + this.requestId = new byte[4]; + this.requestId[0] = abyte[3]; + this.requestId[1] = abyte[4]; + this.requestId[2] = abyte[5]; + this.requestId[3] = abyte[6]; + this.requestIdAsString = new String(this.requestId, StandardCharsets.UTF_8); + this.randomChallenge = (new Random()).nextInt(16777216); + this.challengeValue = String.format("\t%s%d\u0000", this.requestIdAsString, this.randomChallenge).getBytes(StandardCharsets.UTF_8); + } + + /** + * Returns true if the auth's creation timestamp is less than the given time, otherwise false + */ + public Boolean hasExpired(long currentTime) + { + return this.timestamp < currentTime; + } + + /** + * Returns the random challenge number assigned to this auth + */ + public int getRandomChallenge() + { + return this.randomChallenge; + } + + /** + * Returns the auth challenge value + */ + public byte[] getChallengeValue() + { + return this.challengeValue; + } + + /** + * Returns the request ID provided by the client. + */ + public byte[] getRequestId() + { + return this.requestId; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConUtils.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConUtils.java new file mode 100644 index 0000000..9fdfcf4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/RConUtils.java @@ -0,0 +1,60 @@ +package net.minecraft.network.rcon; + +import java.nio.charset.StandardCharsets; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class RConUtils +{ + /** Translation array of decimal to hex digits */ + public static final char[] HEX_DIGITS = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + /** + * Read a null-terminated string from the given byte array + */ + public static String getBytesAsString(byte[] p_72661_0_, int p_72661_1_, int p_72661_2_) + { + int i = p_72661_2_ - 1; + int j; + + for (j = p_72661_1_ > i ? i : p_72661_1_; 0 != p_72661_0_[j] && j < i; ++j) + { + ; + } + + return new String(p_72661_0_, p_72661_1_, j - p_72661_1_, StandardCharsets.UTF_8); + } + + /** + * Read 4 bytes from the + */ + public static int getRemainingBytesAsLEInt(byte[] p_72662_0_, int p_72662_1_) + { + return getBytesAsLEInt(p_72662_0_, p_72662_1_, p_72662_0_.length); + } + + /** + * Read 4 bytes from the given array in little-endian format and return them as an int + */ + public static int getBytesAsLEInt(byte[] p_72665_0_, int p_72665_1_, int p_72665_2_) + { + return 0 > p_72665_2_ - p_72665_1_ - 4 ? 0 : p_72665_0_[p_72665_1_ + 3] << 24 | (p_72665_0_[p_72665_1_ + 2] & 255) << 16 | (p_72665_0_[p_72665_1_ + 1] & 255) << 8 | p_72665_0_[p_72665_1_] & 255; + } + + /** + * Read 4 bytes from the given array in big-endian format and return them as an int + */ + public static int getBytesAsBEint(byte[] p_72664_0_, int p_72664_1_, int p_72664_2_) + { + return 0 > p_72664_2_ - p_72664_1_ - 4 ? 0 : p_72664_0_[p_72664_1_] << 24 | (p_72664_0_[p_72664_1_ + 1] & 255) << 16 | (p_72664_0_[p_72664_1_ + 2] & 255) << 8 | p_72664_0_[p_72664_1_ + 3] & 255; + } + + /** + * Returns a String representation of the byte in hexadecimal format + */ + public static String getByteAsHexString(byte input) + { + return "" + HEX_DIGITS[(input & 240) >>> 4] + HEX_DIGITS[input & 15]; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/rcon/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/package-info.java new file mode 100644 index 0000000..d89436a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/rcon/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.rcon; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/INetHandlerStatusClient.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/INetHandlerStatusClient.java new file mode 100644 index 0000000..6bcebf1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/INetHandlerStatusClient.java @@ -0,0 +1,12 @@ +package net.minecraft.network.status; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.status.server.SPacketPong; +import net.minecraft.network.status.server.SPacketServerInfo; + +public interface INetHandlerStatusClient extends INetHandler +{ + void handleServerInfo(SPacketServerInfo packetIn); + + void handlePong(SPacketPong packetIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/INetHandlerStatusServer.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/INetHandlerStatusServer.java new file mode 100644 index 0000000..ef90b7d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/INetHandlerStatusServer.java @@ -0,0 +1,12 @@ +package net.minecraft.network.status; + +import net.minecraft.network.INetHandler; +import net.minecraft.network.status.client.CPacketPing; +import net.minecraft.network.status.client.CPacketServerQuery; + +public interface INetHandlerStatusServer extends INetHandler +{ + void processPing(CPacketPing packetIn); + + void processServerQuery(CPacketServerQuery packetIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/client/CPacketPing.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/client/CPacketPing.java new file mode 100644 index 0000000..db64f27 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/client/CPacketPing.java @@ -0,0 +1,52 @@ +package net.minecraft.network.status.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.status.INetHandlerStatusServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CPacketPing implements Packet +{ + private long clientTime; + + public CPacketPing() + { + } + + @SideOnly(Side.CLIENT) + public CPacketPing(long clientTimeIn) + { + this.clientTime = clientTimeIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.clientTime = buf.readLong(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeLong(this.clientTime); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerStatusServer handler) + { + handler.processPing(this); + } + + public long getClientTime() + { + return this.clientTime; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/client/CPacketServerQuery.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/client/CPacketServerQuery.java new file mode 100644 index 0000000..a2af9c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/client/CPacketServerQuery.java @@ -0,0 +1,31 @@ +package net.minecraft.network.status.client; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.status.INetHandlerStatusServer; + +public class CPacketServerQuery implements Packet +{ + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerStatusServer handler) + { + handler.processServerQuery(this); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/client/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/client/package-info.java new file mode 100644 index 0000000..7aa1a8f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/client/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.status.client; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/package-info.java new file mode 100644 index 0000000..dbd81d5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.status; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/server/SPacketPong.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/server/SPacketPong.java new file mode 100644 index 0000000..d04a696 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/server/SPacketPong.java @@ -0,0 +1,44 @@ +package net.minecraft.network.status.server; + +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.status.INetHandlerStatusClient; + +public class SPacketPong implements Packet +{ + private long clientTime; + + public SPacketPong() + { + } + + public SPacketPong(long clientTimeIn) + { + this.clientTime = clientTimeIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.clientTime = buf.readLong(); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeLong(this.clientTime); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerStatusClient handler) + { + handler.handlePong(this); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/server/SPacketServerInfo.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/server/SPacketServerInfo.java new file mode 100644 index 0000000..5f145b9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/server/SPacketServerInfo.java @@ -0,0 +1,60 @@ +package net.minecraft.network.status.server; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.IOException; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.ServerStatusResponse; +import net.minecraft.network.status.INetHandlerStatusClient; +import net.minecraft.util.EnumTypeAdapterFactory; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SPacketServerInfo implements Packet +{ + public static final Gson GSON = (new GsonBuilder()).registerTypeAdapter(ServerStatusResponse.Version.class, new ServerStatusResponse.Version.Serializer()).registerTypeAdapter(ServerStatusResponse.Players.class, new ServerStatusResponse.Players.Serializer()).registerTypeAdapter(ServerStatusResponse.class, new ServerStatusResponse.Serializer()).registerTypeHierarchyAdapter(ITextComponent.class, new ITextComponent.Serializer()).registerTypeHierarchyAdapter(Style.class, new Style.Serializer()).registerTypeAdapterFactory(new EnumTypeAdapterFactory()).create(); + private ServerStatusResponse response; + + public SPacketServerInfo() + { + } + + public SPacketServerInfo(ServerStatusResponse responseIn) + { + this.response = responseIn; + } + + /** + * Reads the raw packet data from the data stream. + */ + public void readPacketData(PacketBuffer buf) throws IOException + { + this.response = (ServerStatusResponse)JsonUtils.gsonDeserialize(GSON, buf.readString(32767), ServerStatusResponse.class); + } + + /** + * Writes the raw packet data to the data stream. + */ + public void writePacketData(PacketBuffer buf) throws IOException + { + buf.writeString(GSON.toJson(this.response)); + } + + /** + * Passes this Packet on to the NetHandler for processing. + */ + public void processPacket(INetHandlerStatusClient handler) + { + handler.handleServerInfo(this); + } + + @SideOnly(Side.CLIENT) + public ServerStatusResponse getResponse() + { + return this.response; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/network/status/server/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/network/status/server/package-info.java new file mode 100644 index 0000000..04ec4c0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/network/status/server/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.network.status.server; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/FlyingNodeProcessor.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/FlyingNodeProcessor.java new file mode 100644 index 0000000..aafec48 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/FlyingNodeProcessor.java @@ -0,0 +1,359 @@ +package net.minecraft.pathfinding; + +import com.google.common.collect.Sets; +import java.util.EnumSet; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLiving; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class FlyingNodeProcessor extends WalkNodeProcessor +{ + public void init(IBlockAccess sourceIn, EntityLiving mob) + { + super.init(sourceIn, mob); + this.avoidsWater = mob.getPathPriority(PathNodeType.WATER); + } + + /** + * This method is called when all nodes have been processed and PathEntity is created. + * {@link net.minecraft.world.pathfinder.WalkNodeProcessor WalkNodeProcessor} uses this to change its field {@link + * net.minecraft.world.pathfinder.WalkNodeProcessor#avoidsWater avoidsWater} + */ + public void postProcess() + { + this.entity.setPathPriority(PathNodeType.WATER, this.avoidsWater); + super.postProcess(); + } + + public PathPoint getStart() + { + int i; + + if (this.getCanSwim() && this.entity.isInWater()) + { + i = (int)this.entity.getEntityBoundingBox().minY; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + + for (Block block = this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock(); block == Blocks.FLOWING_WATER || block == Blocks.WATER; block = this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock()) + { + ++i; + blockpos$mutableblockpos.setPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + } + } + else + { + i = MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D); + } + + BlockPos blockpos1 = new BlockPos(this.entity); + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, blockpos1.getX(), i, blockpos1.getZ()); + + if (this.entity.getPathPriority(pathnodetype1) < 0.0F) + { + Set set = Sets.newHashSet(); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double)i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double)i, this.entity.getEntityBoundingBox().maxZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double)i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double)i, this.entity.getEntityBoundingBox().maxZ)); + + for (BlockPos blockpos : set) + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, blockpos); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + return super.openPoint(blockpos.getX(), blockpos.getY(), blockpos.getZ()); + } + } + } + + return super.openPoint(blockpos1.getX(), i, blockpos1.getZ()); + } + + /** + * Returns PathPoint for given coordinates + */ + public PathPoint getPathPointToCoords(double x, double y, double z) + { + return super.openPoint(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)); + } + + public int findPathOptions(PathPoint[] pathOptions, PathPoint currentPoint, PathPoint targetPoint, float maxDistance) + { + int i = 0; + PathPoint pathpoint = this.openPoint(currentPoint.x, currentPoint.y, currentPoint.z + 1); + PathPoint pathpoint1 = this.openPoint(currentPoint.x - 1, currentPoint.y, currentPoint.z); + PathPoint pathpoint2 = this.openPoint(currentPoint.x + 1, currentPoint.y, currentPoint.z); + PathPoint pathpoint3 = this.openPoint(currentPoint.x, currentPoint.y, currentPoint.z - 1); + PathPoint pathpoint4 = this.openPoint(currentPoint.x, currentPoint.y + 1, currentPoint.z); + PathPoint pathpoint5 = this.openPoint(currentPoint.x, currentPoint.y - 1, currentPoint.z); + + if (pathpoint != null && !pathpoint.visited && pathpoint.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint; + } + + if (pathpoint1 != null && !pathpoint1.visited && pathpoint1.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint1; + } + + if (pathpoint2 != null && !pathpoint2.visited && pathpoint2.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint2; + } + + if (pathpoint3 != null && !pathpoint3.visited && pathpoint3.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint3; + } + + if (pathpoint4 != null && !pathpoint4.visited && pathpoint4.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint4; + } + + if (pathpoint5 != null && !pathpoint5.visited && pathpoint5.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint5; + } + + boolean flag = pathpoint3 == null || pathpoint3.costMalus != 0.0F; + boolean flag1 = pathpoint == null || pathpoint.costMalus != 0.0F; + boolean flag2 = pathpoint2 == null || pathpoint2.costMalus != 0.0F; + boolean flag3 = pathpoint1 == null || pathpoint1.costMalus != 0.0F; + boolean flag4 = pathpoint4 == null || pathpoint4.costMalus != 0.0F; + boolean flag5 = pathpoint5 == null || pathpoint5.costMalus != 0.0F; + + if (flag && flag3) + { + PathPoint pathpoint6 = this.openPoint(currentPoint.x - 1, currentPoint.y, currentPoint.z - 1); + + if (pathpoint6 != null && !pathpoint6.visited && pathpoint6.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint6; + } + } + + if (flag && flag2) + { + PathPoint pathpoint7 = this.openPoint(currentPoint.x + 1, currentPoint.y, currentPoint.z - 1); + + if (pathpoint7 != null && !pathpoint7.visited && pathpoint7.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint7; + } + } + + if (flag1 && flag3) + { + PathPoint pathpoint8 = this.openPoint(currentPoint.x - 1, currentPoint.y, currentPoint.z + 1); + + if (pathpoint8 != null && !pathpoint8.visited && pathpoint8.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint8; + } + } + + if (flag1 && flag2) + { + PathPoint pathpoint9 = this.openPoint(currentPoint.x + 1, currentPoint.y, currentPoint.z + 1); + + if (pathpoint9 != null && !pathpoint9.visited && pathpoint9.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint9; + } + } + + if (flag && flag4) + { + PathPoint pathpoint10 = this.openPoint(currentPoint.x, currentPoint.y + 1, currentPoint.z - 1); + + if (pathpoint10 != null && !pathpoint10.visited && pathpoint10.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint10; + } + } + + if (flag1 && flag4) + { + PathPoint pathpoint11 = this.openPoint(currentPoint.x, currentPoint.y + 1, currentPoint.z + 1); + + if (pathpoint11 != null && !pathpoint11.visited && pathpoint11.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint11; + } + } + + if (flag2 && flag4) + { + PathPoint pathpoint12 = this.openPoint(currentPoint.x + 1, currentPoint.y + 1, currentPoint.z); + + if (pathpoint12 != null && !pathpoint12.visited && pathpoint12.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint12; + } + } + + if (flag3 && flag4) + { + PathPoint pathpoint13 = this.openPoint(currentPoint.x - 1, currentPoint.y + 1, currentPoint.z); + + if (pathpoint13 != null && !pathpoint13.visited && pathpoint13.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint13; + } + } + + if (flag && flag5) + { + PathPoint pathpoint14 = this.openPoint(currentPoint.x, currentPoint.y - 1, currentPoint.z - 1); + + if (pathpoint14 != null && !pathpoint14.visited && pathpoint14.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint14; + } + } + + if (flag1 && flag5) + { + PathPoint pathpoint15 = this.openPoint(currentPoint.x, currentPoint.y - 1, currentPoint.z + 1); + + if (pathpoint15 != null && !pathpoint15.visited && pathpoint15.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint15; + } + } + + if (flag2 && flag5) + { + PathPoint pathpoint16 = this.openPoint(currentPoint.x + 1, currentPoint.y - 1, currentPoint.z); + + if (pathpoint16 != null && !pathpoint16.visited && pathpoint16.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint16; + } + } + + if (flag3 && flag5) + { + PathPoint pathpoint17 = this.openPoint(currentPoint.x - 1, currentPoint.y - 1, currentPoint.z); + + if (pathpoint17 != null && !pathpoint17.visited && pathpoint17.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint17; + } + } + + return i; + } + + /** + * Returns a mapped point or creates and adds one + */ + @Nullable + protected PathPoint openPoint(int x, int y, int z) + { + PathPoint pathpoint = null; + PathNodeType pathnodetype = this.getPathNodeType(this.entity, x, y, z); + float f = this.entity.getPathPriority(pathnodetype); + + if (f >= 0.0F) + { + pathpoint = super.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + + if (pathnodetype == PathNodeType.WALKABLE) + { + ++pathpoint.costMalus; + } + } + + return pathnodetype != PathNodeType.OPEN && pathnodetype != PathNodeType.WALKABLE ? pathpoint : pathpoint; + } + + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z, EntityLiving entitylivingIn, int xSize, int ySize, int zSize, boolean canBreakDoorsIn, boolean canEnterDoorsIn) + { + EnumSet enumset = EnumSet.noneOf(PathNodeType.class); + PathNodeType pathnodetype = PathNodeType.BLOCKED; + BlockPos blockpos = new BlockPos(entitylivingIn); + pathnodetype = this.getPathNodeType(blockaccessIn, x, y, z, xSize, ySize, zSize, canBreakDoorsIn, canEnterDoorsIn, enumset, pathnodetype, blockpos); + + if (enumset.contains(PathNodeType.FENCE)) + { + return PathNodeType.FENCE; + } + else + { + PathNodeType pathnodetype1 = PathNodeType.BLOCKED; + + for (PathNodeType pathnodetype2 : enumset) + { + if (entitylivingIn.getPathPriority(pathnodetype2) < 0.0F) + { + return pathnodetype2; + } + + if (entitylivingIn.getPathPriority(pathnodetype2) >= entitylivingIn.getPathPriority(pathnodetype1)) + { + pathnodetype1 = pathnodetype2; + } + } + + if (pathnodetype == PathNodeType.OPEN && entitylivingIn.getPathPriority(pathnodetype1) == 0.0F) + { + return PathNodeType.OPEN; + } + else + { + return pathnodetype1; + } + } + } + + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z) + { + PathNodeType pathnodetype = this.getPathNodeTypeRaw(blockaccessIn, x, y, z); + + if (pathnodetype == PathNodeType.OPEN && y >= 1) + { + Block block = blockaccessIn.getBlockState(new BlockPos(x, y - 1, z)).getBlock(); + PathNodeType pathnodetype1 = this.getPathNodeTypeRaw(blockaccessIn, x, y - 1, z); + + if (pathnodetype1 != PathNodeType.DAMAGE_FIRE && block != Blocks.MAGMA && pathnodetype1 != PathNodeType.LAVA) + { + if (pathnodetype1 == PathNodeType.DAMAGE_CACTUS) + { + pathnodetype = PathNodeType.DAMAGE_CACTUS; + } + else + { + pathnodetype = pathnodetype1 != PathNodeType.WALKABLE && pathnodetype1 != PathNodeType.OPEN && pathnodetype1 != PathNodeType.WATER ? PathNodeType.WALKABLE : PathNodeType.OPEN; + } + } + else + { + pathnodetype = PathNodeType.DAMAGE_FIRE; + } + } + + pathnodetype = this.checkNeighborBlocks(blockaccessIn, x, y, z, pathnodetype); + return pathnodetype; + } + + private PathNodeType getPathNodeType(EntityLiving p_192559_1_, BlockPos p_192559_2_) + { + return this.getPathNodeType(p_192559_1_, p_192559_2_.getX(), p_192559_2_.getY(), p_192559_2_.getZ()); + } + + private PathNodeType getPathNodeType(EntityLiving p_192558_1_, int p_192558_2_, int p_192558_3_, int p_192558_4_) + { + return this.getPathNodeType(this.blockaccess, p_192558_2_, p_192558_3_, p_192558_4_, p_192558_1_, this.entitySizeX, this.entitySizeY, this.entitySizeZ, this.getCanOpenDoors(), this.getCanEnterDoors()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/NodeProcessor.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/NodeProcessor.java new file mode 100644 index 0000000..a866efa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/NodeProcessor.java @@ -0,0 +1,100 @@ +package net.minecraft.pathfinding; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.IntHashMap; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public abstract class NodeProcessor +{ + protected IBlockAccess blockaccess; + protected EntityLiving entity; + protected final IntHashMap pointMap = new IntHashMap(); + protected int entitySizeX; + protected int entitySizeY; + protected int entitySizeZ; + protected boolean canEnterDoors; + protected boolean canOpenDoors; + protected boolean canSwim; + + public void init(IBlockAccess sourceIn, EntityLiving mob) + { + this.blockaccess = sourceIn; + this.entity = mob; + this.pointMap.clearMap(); + this.entitySizeX = MathHelper.floor(mob.width + 1.0F); + this.entitySizeY = MathHelper.floor(mob.height + 1.0F); + this.entitySizeZ = MathHelper.floor(mob.width + 1.0F); + } + + /** + * This method is called when all nodes have been processed and PathEntity is created. + * {@link net.minecraft.world.pathfinder.WalkNodeProcessor WalkNodeProcessor} uses this to change its field {@link + * net.minecraft.world.pathfinder.WalkNodeProcessor#avoidsWater avoidsWater} + */ + public void postProcess() + { + this.blockaccess = null; + this.entity = null; + } + + /** + * Returns a mapped point or creates and adds one + */ + protected PathPoint openPoint(int x, int y, int z) + { + int i = PathPoint.makeHash(x, y, z); + PathPoint pathpoint = this.pointMap.lookup(i); + + if (pathpoint == null) + { + pathpoint = new PathPoint(x, y, z); + this.pointMap.addKey(i, pathpoint); + } + + return pathpoint; + } + + public abstract PathPoint getStart(); + + /** + * Returns PathPoint for given coordinates + */ + public abstract PathPoint getPathPointToCoords(double x, double y, double z); + + public abstract int findPathOptions(PathPoint[] pathOptions, PathPoint currentPoint, PathPoint targetPoint, float maxDistance); + + public abstract PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z, EntityLiving entitylivingIn, int xSize, int ySize, int zSize, boolean canBreakDoorsIn, boolean canEnterDoorsIn); + + public abstract PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z); + + public void setCanEnterDoors(boolean canEnterDoorsIn) + { + this.canEnterDoors = canEnterDoorsIn; + } + + public void setCanOpenDoors(boolean canOpenDoorsIn) + { + this.canOpenDoors = canOpenDoorsIn; + } + + public void setCanSwim(boolean canSwimIn) + { + this.canSwim = canSwimIn; + } + + public boolean getCanEnterDoors() + { + return this.canEnterDoors; + } + + public boolean getCanOpenDoors() + { + return this.canOpenDoors; + } + + public boolean getCanSwim() + { + return this.canSwim; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/Path.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/Path.java new file mode 100644 index 0000000..8748806 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/Path.java @@ -0,0 +1,190 @@ +package net.minecraft.pathfinding; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Path +{ + /** The actual points in the path */ + private final PathPoint[] points; + private PathPoint[] openSet = new PathPoint[0]; + private PathPoint[] closedSet = new PathPoint[0]; + @SideOnly(Side.CLIENT) + private PathPoint target; + /** PathEntity Array Index the Entity is currently targeting */ + private int currentPathIndex; + /** The total length of the path */ + private int pathLength; + + public Path(PathPoint[] pathpoints) + { + this.points = pathpoints; + this.pathLength = pathpoints.length; + } + + /** + * Directs this path to the next point in its array + */ + public void incrementPathIndex() + { + ++this.currentPathIndex; + } + + /** + * Returns true if this path has reached the end + */ + public boolean isFinished() + { + return this.currentPathIndex >= this.pathLength; + } + + /** + * returns the last PathPoint of the Array + */ + @Nullable + public PathPoint getFinalPathPoint() + { + return this.pathLength > 0 ? this.points[this.pathLength - 1] : null; + } + + /** + * return the PathPoint located at the specified PathIndex, usually the current one + */ + public PathPoint getPathPointFromIndex(int index) + { + return this.points[index]; + } + + public void setPoint(int index, PathPoint point) + { + this.points[index] = point; + } + + public int getCurrentPathLength() + { + return this.pathLength; + } + + public void setCurrentPathLength(int length) + { + this.pathLength = length; + } + + public int getCurrentPathIndex() + { + return this.currentPathIndex; + } + + public void setCurrentPathIndex(int currentPathIndexIn) + { + this.currentPathIndex = currentPathIndexIn; + } + + /** + * Gets the vector of the PathPoint associated with the given index. + */ + public Vec3d getVectorFromIndex(Entity entityIn, int index) + { + double d0 = (double)this.points[index].x + (double)((int)(entityIn.width + 1.0F)) * 0.5D; + double d1 = (double)this.points[index].y; + double d2 = (double)this.points[index].z + (double)((int)(entityIn.width + 1.0F)) * 0.5D; + return new Vec3d(d0, d1, d2); + } + + /** + * returns the current PathEntity target node as Vec3D + */ + public Vec3d getPosition(Entity entityIn) + { + return this.getVectorFromIndex(entityIn, this.currentPathIndex); + } + + public Vec3d getCurrentPos() + { + PathPoint pathpoint = this.points[this.currentPathIndex]; + return new Vec3d((double)pathpoint.x, (double)pathpoint.y, (double)pathpoint.z); + } + + /** + * Returns true if the EntityPath are the same. Non instance related equals. + */ + public boolean isSamePath(Path pathentityIn) + { + if (pathentityIn == null) + { + return false; + } + else if (pathentityIn.points.length != this.points.length) + { + return false; + } + else + { + for (int i = 0; i < this.points.length; ++i) + { + if (this.points[i].x != pathentityIn.points[i].x || this.points[i].y != pathentityIn.points[i].y || this.points[i].z != pathentityIn.points[i].z) + { + return false; + } + } + + return true; + } + } + + @SideOnly(Side.CLIENT) + public PathPoint[] getOpenSet() + { + return this.openSet; + } + + @SideOnly(Side.CLIENT) + public PathPoint[] getClosedSet() + { + return this.closedSet; + } + + @SideOnly(Side.CLIENT) + public PathPoint getTarget() + { + return this.target; + } + + @SideOnly(Side.CLIENT) + public static Path read(PacketBuffer buf) + { + int i = buf.readInt(); + PathPoint pathpoint = PathPoint.createFromBuffer(buf); + PathPoint[] apathpoint = new PathPoint[buf.readInt()]; + + for (int j = 0; j < apathpoint.length; ++j) + { + apathpoint[j] = PathPoint.createFromBuffer(buf); + } + + PathPoint[] apathpoint1 = new PathPoint[buf.readInt()]; + + for (int k = 0; k < apathpoint1.length; ++k) + { + apathpoint1[k] = PathPoint.createFromBuffer(buf); + } + + PathPoint[] apathpoint2 = new PathPoint[buf.readInt()]; + + for (int l = 0; l < apathpoint2.length; ++l) + { + apathpoint2[l] = PathPoint.createFromBuffer(buf); + } + + Path path = new Path(apathpoint); + path.openSet = apathpoint1; + path.closedSet = apathpoint2; + path.target = pathpoint; + path.currentPathIndex = i; + return path; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathFinder.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathFinder.java new file mode 100644 index 0000000..796a89e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathFinder.java @@ -0,0 +1,148 @@ +package net.minecraft.pathfinding; + +import com.google.common.collect.Sets; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; + +public class PathFinder +{ + /** The path being generated */ + private final PathHeap path = new PathHeap(); + private final Set closedSet = Sets.newHashSet(); + /** Selection of path points to add to the path */ + private final PathPoint[] pathOptions = new PathPoint[32]; + private final NodeProcessor nodeProcessor; + + public PathFinder(NodeProcessor processor) + { + this.nodeProcessor = processor; + } + + @Nullable + public Path findPath(IBlockAccess worldIn, EntityLiving entitylivingIn, Entity targetEntity, float maxDistance) + { + return this.findPath(worldIn, entitylivingIn, targetEntity.posX, targetEntity.getEntityBoundingBox().minY, targetEntity.posZ, maxDistance); + } + + @Nullable + public Path findPath(IBlockAccess worldIn, EntityLiving entitylivingIn, BlockPos targetPos, float maxDistance) + { + return this.findPath(worldIn, entitylivingIn, (double)((float)targetPos.getX() + 0.5F), (double)((float)targetPos.getY() + 0.5F), (double)((float)targetPos.getZ() + 0.5F), maxDistance); + } + + @Nullable + private Path findPath(IBlockAccess worldIn, EntityLiving entitylivingIn, double x, double y, double z, float maxDistance) + { + this.path.clearPath(); + this.nodeProcessor.init(worldIn, entitylivingIn); + PathPoint pathpoint = this.nodeProcessor.getStart(); + PathPoint pathpoint1 = this.nodeProcessor.getPathPointToCoords(x, y, z); + Path path = this.findPath(pathpoint, pathpoint1, maxDistance); + this.nodeProcessor.postProcess(); + return path; + } + + @Nullable + private Path findPath(PathPoint pathFrom, PathPoint pathTo, float maxDistance) + { + pathFrom.totalPathDistance = 0.0F; + pathFrom.distanceToNext = pathFrom.distanceManhattan(pathTo); + pathFrom.distanceToTarget = pathFrom.distanceToNext; + this.path.clearPath(); + this.closedSet.clear(); + this.path.addPoint(pathFrom); + PathPoint pathpoint = pathFrom; + int i = 0; + + while (!this.path.isPathEmpty()) + { + ++i; + + if (i >= 200) + { + break; + } + + PathPoint pathpoint1 = this.path.dequeue(); + + if (pathpoint1.equals(pathTo)) + { + pathpoint = pathTo; + break; + } + + if (pathpoint1.distanceManhattan(pathTo) < pathpoint.distanceManhattan(pathTo)) + { + pathpoint = pathpoint1; + } + + pathpoint1.visited = true; + int j = this.nodeProcessor.findPathOptions(this.pathOptions, pathpoint1, pathTo, maxDistance); + + for (int k = 0; k < j; ++k) + { + PathPoint pathpoint2 = this.pathOptions[k]; + float f = pathpoint1.distanceManhattan(pathpoint2); + pathpoint2.distanceFromOrigin = pathpoint1.distanceFromOrigin + f; + pathpoint2.cost = f + pathpoint2.costMalus; + float f1 = pathpoint1.totalPathDistance + pathpoint2.cost; + + if (pathpoint2.distanceFromOrigin < maxDistance && (!pathpoint2.isAssigned() || f1 < pathpoint2.totalPathDistance)) + { + pathpoint2.previous = pathpoint1; + pathpoint2.totalPathDistance = f1; + pathpoint2.distanceToNext = pathpoint2.distanceManhattan(pathTo) + pathpoint2.costMalus; + + if (pathpoint2.isAssigned()) + { + this.path.changeDistance(pathpoint2, pathpoint2.totalPathDistance + pathpoint2.distanceToNext); + } + else + { + pathpoint2.distanceToTarget = pathpoint2.totalPathDistance + pathpoint2.distanceToNext; + this.path.addPoint(pathpoint2); + } + } + } + } + + if (pathpoint == pathFrom) + { + return null; + } + else + { + Path path = this.createPath(pathFrom, pathpoint); + return path; + } + } + + /** + * Returns a new PathEntity for a given start and end point + */ + private Path createPath(PathPoint start, PathPoint end) + { + int i = 1; + + for (PathPoint pathpoint = end; pathpoint.previous != null; pathpoint = pathpoint.previous) + { + ++i; + } + + PathPoint[] apathpoint = new PathPoint[i]; + PathPoint pathpoint1 = end; + --i; + + for (apathpoint[i] = end; pathpoint1.previous != null; apathpoint[i] = pathpoint1) + { + pathpoint1 = pathpoint1.previous; + --i; + } + + return new Path(apathpoint); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathHeap.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathHeap.java new file mode 100644 index 0000000..bd2bee2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathHeap.java @@ -0,0 +1,174 @@ +package net.minecraft.pathfinding; + +public class PathHeap +{ + /** Contains the points in this path */ + private PathPoint[] pathPoints = new PathPoint[128]; + /** The number of points in this path */ + private int count; + + /** + * Adds a point to the path + */ + public PathPoint addPoint(PathPoint point) + { + if (point.index >= 0) + { + throw new IllegalStateException("OW KNOWS!"); + } + else + { + if (this.count == this.pathPoints.length) + { + PathPoint[] apathpoint = new PathPoint[this.count << 1]; + System.arraycopy(this.pathPoints, 0, apathpoint, 0, this.count); + this.pathPoints = apathpoint; + } + + this.pathPoints[this.count] = point; + point.index = this.count; + this.sortBack(this.count++); + return point; + } + } + + /** + * Clears the path + */ + public void clearPath() + { + this.count = 0; + } + + /** + * Returns and removes the first point in the path + */ + public PathPoint dequeue() + { + PathPoint pathpoint = this.pathPoints[0]; + this.pathPoints[0] = this.pathPoints[--this.count]; + this.pathPoints[this.count] = null; + + if (this.count > 0) + { + this.sortForward(0); + } + + pathpoint.index = -1; + return pathpoint; + } + + /** + * Changes the provided point's distance to target + */ + public void changeDistance(PathPoint point, float distance) + { + float f = point.distanceToTarget; + point.distanceToTarget = distance; + + if (distance < f) + { + this.sortBack(point.index); + } + else + { + this.sortForward(point.index); + } + } + + /** + * Sorts a point to the left + */ + private void sortBack(int index) + { + PathPoint pathpoint = this.pathPoints[index]; + int i; + + for (float f = pathpoint.distanceToTarget; index > 0; index = i) + { + i = index - 1 >> 1; + PathPoint pathpoint1 = this.pathPoints[i]; + + if (f >= pathpoint1.distanceToTarget) + { + break; + } + + this.pathPoints[index] = pathpoint1; + pathpoint1.index = index; + } + + this.pathPoints[index] = pathpoint; + pathpoint.index = index; + } + + /** + * Sorts a point to the right + */ + private void sortForward(int index) + { + PathPoint pathpoint = this.pathPoints[index]; + float f = pathpoint.distanceToTarget; + + while (true) + { + int i = 1 + (index << 1); + int j = i + 1; + + if (i >= this.count) + { + break; + } + + PathPoint pathpoint1 = this.pathPoints[i]; + float f1 = pathpoint1.distanceToTarget; + PathPoint pathpoint2; + float f2; + + if (j >= this.count) + { + pathpoint2 = null; + f2 = Float.POSITIVE_INFINITY; + } + else + { + pathpoint2 = this.pathPoints[j]; + f2 = pathpoint2.distanceToTarget; + } + + if (f1 < f2) + { + if (f1 >= f) + { + break; + } + + this.pathPoints[index] = pathpoint1; + pathpoint1.index = index; + index = i; + } + else + { + if (f2 >= f) + { + break; + } + + this.pathPoints[index] = pathpoint2; + pathpoint2.index = index; + index = j; + } + } + + this.pathPoints[index] = pathpoint; + pathpoint.index = index; + } + + /** + * Returns true if this path contains no points + */ + public boolean isPathEmpty() + { + return this.count == 0; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigate.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigate.java new file mode 100644 index 0000000..3aebf63 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigate.java @@ -0,0 +1,426 @@ +package net.minecraft.pathfinding; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.ChunkCache; +import net.minecraft.world.World; + +public abstract class PathNavigate +{ + protected EntityLiving entity; + protected World world; + /** The PathEntity being followed. */ + @Nullable + protected Path currentPath; + protected double speed; + /** The number of blocks (extra) +/- in each axis that get pulled out as cache for the pathfinder's search space */ + private final IAttributeInstance pathSearchRange; + /** Time, in number of ticks, following the current path */ + protected int totalTicks; + /** The time when the last position check was done (to detect successful movement) */ + private int ticksAtLastPos; + /** Coordinates of the entity's position last time a check was done (part of monitoring getting 'stuck') */ + private Vec3d lastPosCheck = Vec3d.ZERO; + private Vec3d timeoutCachedNode = Vec3d.ZERO; + private long timeoutTimer; + private long lastTimeoutCheck; + private double timeoutLimit; + protected float maxDistanceToWaypoint = 0.5F; + protected boolean tryUpdatePath; + private long lastTimeUpdated; + protected NodeProcessor nodeProcessor; + private BlockPos targetPos; + private final PathFinder pathFinder; + + public PathNavigate(EntityLiving entityIn, World worldIn) + { + this.entity = entityIn; + this.world = worldIn; + this.pathSearchRange = entityIn.getEntityAttribute(SharedMonsterAttributes.FOLLOW_RANGE); + this.pathFinder = this.getPathFinder(); + } + + protected abstract PathFinder getPathFinder(); + + /** + * Sets the speed + */ + public void setSpeed(double speedIn) + { + this.speed = speedIn; + } + + /** + * Gets the maximum distance that the path finding will search in. + */ + public float getPathSearchRange() + { + return (float)this.pathSearchRange.getAttributeValue(); + } + + /** + * Returns true if path can be changed by {@link net.minecraft.pathfinding.PathNavigate#onUpdateNavigation() + * onUpdateNavigation()} + */ + public boolean canUpdatePathOnTimeout() + { + return this.tryUpdatePath; + } + + public void updatePath() + { + if (this.world.getTotalWorldTime() - this.lastTimeUpdated > 20L) + { + if (this.targetPos != null) + { + this.currentPath = null; + this.currentPath = this.getPathToPos(this.targetPos); + this.lastTimeUpdated = this.world.getTotalWorldTime(); + this.tryUpdatePath = false; + } + } + else + { + this.tryUpdatePath = true; + } + } + + /** + * Returns the path to the given coordinates. Args : x, y, z + */ + @Nullable + public final Path getPathToXYZ(double x, double y, double z) + { + return this.getPathToPos(new BlockPos(x, y, z)); + } + + /** + * Returns path to given BlockPos + */ + @Nullable + public Path getPathToPos(BlockPos pos) + { + if (!this.canNavigate()) + { + return null; + } + else if (this.currentPath != null && !this.currentPath.isFinished() && pos.equals(this.targetPos)) + { + return this.currentPath; + } + else + { + this.targetPos = pos; + float f = this.getPathSearchRange(); + this.world.profiler.startSection("pathfind"); + BlockPos blockpos = new BlockPos(this.entity); + int i = (int)(f + 8.0F); + ChunkCache chunkcache = new ChunkCache(this.world, blockpos.add(-i, -i, -i), blockpos.add(i, i, i), 0); + Path path = this.pathFinder.findPath(chunkcache, this.entity, this.targetPos, f); + this.world.profiler.endSection(); + return path; + } + } + + /** + * Returns the path to the given EntityLiving. Args : entity + */ + @Nullable + public Path getPathToEntityLiving(Entity entityIn) + { + if (!this.canNavigate()) + { + return null; + } + else + { + BlockPos blockpos = new BlockPos(entityIn); + + if (this.currentPath != null && !this.currentPath.isFinished() && blockpos.equals(this.targetPos)) + { + return this.currentPath; + } + else + { + this.targetPos = blockpos; + float f = this.getPathSearchRange(); + this.world.profiler.startSection("pathfind"); + BlockPos blockpos1 = (new BlockPos(this.entity)).up(); + int i = (int)(f + 16.0F); + ChunkCache chunkcache = new ChunkCache(this.world, blockpos1.add(-i, -i, -i), blockpos1.add(i, i, i), 0); + Path path = this.pathFinder.findPath(chunkcache, this.entity, entityIn, f); + this.world.profiler.endSection(); + return path; + } + } + } + + /** + * Try to find and set a path to XYZ. Returns true if successful. Args : x, y, z, speed + */ + public boolean tryMoveToXYZ(double x, double y, double z, double speedIn) + { + return this.setPath(this.getPathToXYZ(x, y, z), speedIn); + } + + /** + * Try to find and set a path to EntityLiving. Returns true if successful. Args : entity, speed + */ + public boolean tryMoveToEntityLiving(Entity entityIn, double speedIn) + { + Path path = this.getPathToEntityLiving(entityIn); + return path != null && this.setPath(path, speedIn); + } + + /** + * Sets a new path. If it's diferent from the old path. Checks to adjust path for sun avoiding, and stores start + * coords. Args : path, speed + */ + public boolean setPath(@Nullable Path pathentityIn, double speedIn) + { + if (pathentityIn == null) + { + this.currentPath = null; + return false; + } + else + { + if (!pathentityIn.isSamePath(this.currentPath)) + { + this.currentPath = pathentityIn; + } + + this.removeSunnyPath(); + + if (this.currentPath.getCurrentPathLength() <= 0) + { + return false; + } + else + { + this.speed = speedIn; + Vec3d vec3d = this.getEntityPosition(); + this.ticksAtLastPos = this.totalTicks; + this.lastPosCheck = vec3d; + return true; + } + } + } + + /** + * gets the actively used PathEntity + */ + @Nullable + public Path getPath() + { + return this.currentPath; + } + + public void onUpdateNavigation() + { + ++this.totalTicks; + + if (this.tryUpdatePath) + { + this.updatePath(); + } + + if (!this.noPath()) + { + if (this.canNavigate()) + { + this.pathFollow(); + } + else if (this.currentPath != null && this.currentPath.getCurrentPathIndex() < this.currentPath.getCurrentPathLength()) + { + Vec3d vec3d = this.getEntityPosition(); + Vec3d vec3d1 = this.currentPath.getVectorFromIndex(this.entity, this.currentPath.getCurrentPathIndex()); + + if (vec3d.y > vec3d1.y && !this.entity.onGround && MathHelper.floor(vec3d.x) == MathHelper.floor(vec3d1.x) && MathHelper.floor(vec3d.z) == MathHelper.floor(vec3d1.z)) + { + this.currentPath.setCurrentPathIndex(this.currentPath.getCurrentPathIndex() + 1); + } + } + + this.debugPathFinding(); + + if (!this.noPath()) + { + Vec3d vec3d2 = this.currentPath.getPosition(this.entity); + BlockPos blockpos = (new BlockPos(vec3d2)).down(); + AxisAlignedBB axisalignedbb = this.world.getBlockState(blockpos).getBoundingBox(this.world, blockpos); + vec3d2 = vec3d2.subtract(0.0D, 1.0D - axisalignedbb.maxY, 0.0D); + this.entity.getMoveHelper().setMoveTo(vec3d2.x, vec3d2.y, vec3d2.z, this.speed); + } + } + } + + protected void debugPathFinding() + { + } + + protected void pathFollow() + { + Vec3d vec3d = this.getEntityPosition(); + int i = this.currentPath.getCurrentPathLength(); + + for (int j = this.currentPath.getCurrentPathIndex(); j < this.currentPath.getCurrentPathLength(); ++j) + { + if ((double)this.currentPath.getPathPointFromIndex(j).y != Math.floor(vec3d.y)) + { + i = j; + break; + } + } + + this.maxDistanceToWaypoint = this.entity.width > 0.75F ? this.entity.width / 2.0F : 0.75F - this.entity.width / 2.0F; + Vec3d vec3d1 = this.currentPath.getCurrentPos(); + + if (MathHelper.abs((float)(this.entity.posX - (vec3d1.x + 0.5D))) < this.maxDistanceToWaypoint && MathHelper.abs((float)(this.entity.posZ - (vec3d1.z + 0.5D))) < this.maxDistanceToWaypoint && Math.abs(this.entity.posY - vec3d1.y) < 1.0D) + { + this.currentPath.setCurrentPathIndex(this.currentPath.getCurrentPathIndex() + 1); + } + + int k = MathHelper.ceil(this.entity.width); + int l = MathHelper.ceil(this.entity.height); + int i1 = k; + + for (int j1 = i - 1; j1 >= this.currentPath.getCurrentPathIndex(); --j1) + { + if (this.isDirectPathBetweenPoints(vec3d, this.currentPath.getVectorFromIndex(this.entity, j1), k, l, i1)) + { + this.currentPath.setCurrentPathIndex(j1); + break; + } + } + + this.checkForStuck(vec3d); + } + + /** + * Checks if entity haven't been moved when last checked and if so, clears current {@link + * net.minecraft.pathfinding.PathEntity} + */ + protected void checkForStuck(Vec3d positionVec3) + { + if (this.totalTicks - this.ticksAtLastPos > 100) + { + if (positionVec3.squareDistanceTo(this.lastPosCheck) < 2.25D) + { + this.clearPath(); + } + + this.ticksAtLastPos = this.totalTicks; + this.lastPosCheck = positionVec3; + } + + if (this.currentPath != null && !this.currentPath.isFinished()) + { + Vec3d vec3d = this.currentPath.getCurrentPos(); + + if (vec3d.equals(this.timeoutCachedNode)) + { + this.timeoutTimer += System.currentTimeMillis() - this.lastTimeoutCheck; + } + else + { + this.timeoutCachedNode = vec3d; + double d0 = positionVec3.distanceTo(this.timeoutCachedNode); + this.timeoutLimit = this.entity.getAIMoveSpeed() > 0.0F ? d0 / (double)this.entity.getAIMoveSpeed() * 1000.0D : 0.0D; + } + + if (this.timeoutLimit > 0.0D && (double)this.timeoutTimer > this.timeoutLimit * 3.0D) + { + this.timeoutCachedNode = Vec3d.ZERO; + this.timeoutTimer = 0L; + this.timeoutLimit = 0.0D; + this.clearPath(); + } + + this.lastTimeoutCheck = System.currentTimeMillis(); + } + } + + /** + * If null path or reached the end + */ + public boolean noPath() + { + return this.currentPath == null || this.currentPath.isFinished(); + } + + /** + * sets active PathEntity to null + */ + public void clearPath() + { + this.currentPath = null; + } + + protected abstract Vec3d getEntityPosition(); + + /** + * If on ground or swimming and can swim + */ + protected abstract boolean canNavigate(); + + /** + * Returns true if the entity is in water or lava, false otherwise + */ + protected boolean isInLiquid() + { + return this.entity.isInWater() || this.entity.isInLava(); + } + + /** + * Trims path data from the end to the first sun covered block + */ + protected void removeSunnyPath() + { + if (this.currentPath != null) + { + for (int i = 0; i < this.currentPath.getCurrentPathLength(); ++i) + { + PathPoint pathpoint = this.currentPath.getPathPointFromIndex(i); + PathPoint pathpoint1 = i + 1 < this.currentPath.getCurrentPathLength() ? this.currentPath.getPathPointFromIndex(i + 1) : null; + IBlockState iblockstate = this.world.getBlockState(new BlockPos(pathpoint.x, pathpoint.y, pathpoint.z)); + Block block = iblockstate.getBlock(); + + if (block == Blocks.CAULDRON) + { + this.currentPath.setPoint(i, pathpoint.cloneMove(pathpoint.x, pathpoint.y + 1, pathpoint.z)); + + if (pathpoint1 != null && pathpoint.y >= pathpoint1.y) + { + this.currentPath.setPoint(i + 1, pathpoint1.cloneMove(pathpoint1.x, pathpoint.y + 1, pathpoint1.z)); + } + } + } + } + } + + /** + * Checks if the specified entity can safely walk to the specified location. + */ + protected abstract boolean isDirectPathBetweenPoints(Vec3d posVec31, Vec3d posVec32, int sizeX, int sizeY, int sizeZ); + + public boolean canEntityStandOnPos(BlockPos pos) + { + return this.world.getBlockState(pos.down()).isFullBlock(); + } + + public NodeProcessor getNodeProcessor() + { + return this.nodeProcessor; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateClimber.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateClimber.java new file mode 100644 index 0000000..9f0726b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateClimber.java @@ -0,0 +1,79 @@ +package net.minecraft.pathfinding; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class PathNavigateClimber extends PathNavigateGround +{ + /** Current path navigation target */ + private BlockPos targetPosition; + + public PathNavigateClimber(EntityLiving entityLivingIn, World worldIn) + { + super(entityLivingIn, worldIn); + } + + /** + * Returns path to given BlockPos + */ + public Path getPathToPos(BlockPos pos) + { + this.targetPosition = pos; + return super.getPathToPos(pos); + } + + /** + * Returns the path to the given EntityLiving. Args : entity + */ + public Path getPathToEntityLiving(Entity entityIn) + { + this.targetPosition = new BlockPos(entityIn); + return super.getPathToEntityLiving(entityIn); + } + + /** + * Try to find and set a path to EntityLiving. Returns true if successful. Args : entity, speed + */ + public boolean tryMoveToEntityLiving(Entity entityIn, double speedIn) + { + Path path = this.getPathToEntityLiving(entityIn); + + if (path != null) + { + return this.setPath(path, speedIn); + } + else + { + this.targetPosition = new BlockPos(entityIn); + this.speed = speedIn; + return true; + } + } + + public void onUpdateNavigation() + { + if (!this.noPath()) + { + super.onUpdateNavigation(); + } + else + { + if (this.targetPosition != null) + { + double d0 = (double)(this.entity.width * this.entity.width); + + if (this.entity.getDistanceSqToCenter(this.targetPosition) >= d0 && (this.entity.posY <= (double)this.targetPosition.getY() || this.entity.getDistanceSqToCenter(new BlockPos(this.targetPosition.getX(), MathHelper.floor(this.entity.posY), this.targetPosition.getZ())) >= d0)) + { + this.entity.getMoveHelper().setMoveTo((double)this.targetPosition.getX(), (double)this.targetPosition.getY(), (double)this.targetPosition.getZ(), this.speed); + } + else + { + this.targetPosition = null; + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateFlying.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateFlying.java new file mode 100644 index 0000000..af87984 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateFlying.java @@ -0,0 +1,188 @@ +package net.minecraft.pathfinding; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class PathNavigateFlying extends PathNavigate +{ + public PathNavigateFlying(EntityLiving p_i47412_1_, World p_i47412_2_) + { + super(p_i47412_1_, p_i47412_2_); + } + + protected PathFinder getPathFinder() + { + this.nodeProcessor = new FlyingNodeProcessor(); + this.nodeProcessor.setCanEnterDoors(true); + return new PathFinder(this.nodeProcessor); + } + + /** + * If on ground or swimming and can swim + */ + protected boolean canNavigate() + { + return this.canFloat() && this.isInLiquid() || !this.entity.isRiding(); + } + + protected Vec3d getEntityPosition() + { + return new Vec3d(this.entity.posX, this.entity.posY, this.entity.posZ); + } + + /** + * Returns the path to the given EntityLiving. Args : entity + */ + public Path getPathToEntityLiving(Entity entityIn) + { + return this.getPathToPos(new BlockPos(entityIn)); + } + + public void onUpdateNavigation() + { + ++this.totalTicks; + + if (this.tryUpdatePath) + { + this.updatePath(); + } + + if (!this.noPath()) + { + if (this.canNavigate()) + { + this.pathFollow(); + } + else if (this.currentPath != null && this.currentPath.getCurrentPathIndex() < this.currentPath.getCurrentPathLength()) + { + Vec3d vec3d = this.currentPath.getVectorFromIndex(this.entity, this.currentPath.getCurrentPathIndex()); + + if (MathHelper.floor(this.entity.posX) == MathHelper.floor(vec3d.x) && MathHelper.floor(this.entity.posY) == MathHelper.floor(vec3d.y) && MathHelper.floor(this.entity.posZ) == MathHelper.floor(vec3d.z)) + { + this.currentPath.setCurrentPathIndex(this.currentPath.getCurrentPathIndex() + 1); + } + } + + this.debugPathFinding(); + + if (!this.noPath()) + { + Vec3d vec3d1 = this.currentPath.getPosition(this.entity); + this.entity.getMoveHelper().setMoveTo(vec3d1.x, vec3d1.y, vec3d1.z, this.speed); + } + } + } + + /** + * Checks if the specified entity can safely walk to the specified location. + */ + protected boolean isDirectPathBetweenPoints(Vec3d posVec31, Vec3d posVec32, int sizeX, int sizeY, int sizeZ) + { + int i = MathHelper.floor(posVec31.x); + int j = MathHelper.floor(posVec31.y); + int k = MathHelper.floor(posVec31.z); + double d0 = posVec32.x - posVec31.x; + double d1 = posVec32.y - posVec31.y; + double d2 = posVec32.z - posVec31.z; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + if (d3 < 1.0E-8D) + { + return false; + } + else + { + double d4 = 1.0D / Math.sqrt(d3); + d0 = d0 * d4; + d1 = d1 * d4; + d2 = d2 * d4; + double d5 = 1.0D / Math.abs(d0); + double d6 = 1.0D / Math.abs(d1); + double d7 = 1.0D / Math.abs(d2); + double d8 = (double)i - posVec31.x; + double d9 = (double)j - posVec31.y; + double d10 = (double)k - posVec31.z; + + if (d0 >= 0.0D) + { + ++d8; + } + + if (d1 >= 0.0D) + { + ++d9; + } + + if (d2 >= 0.0D) + { + ++d10; + } + + d8 = d8 / d0; + d9 = d9 / d1; + d10 = d10 / d2; + int l = d0 < 0.0D ? -1 : 1; + int i1 = d1 < 0.0D ? -1 : 1; + int j1 = d2 < 0.0D ? -1 : 1; + int k1 = MathHelper.floor(posVec32.x); + int l1 = MathHelper.floor(posVec32.y); + int i2 = MathHelper.floor(posVec32.z); + int j2 = k1 - i; + int k2 = l1 - j; + int l2 = i2 - k; + + while (j2 * l > 0 || k2 * i1 > 0 || l2 * j1 > 0) + { + if (d8 < d10 && d8 <= d9) + { + d8 += d5; + i += l; + j2 = k1 - i; + } + else if (d9 < d8 && d9 <= d10) + { + d9 += d6; + j += i1; + k2 = l1 - j; + } + else + { + d10 += d7; + k += j1; + l2 = i2 - k; + } + } + + return true; + } + } + + public void setCanOpenDoors(boolean p_192879_1_) + { + this.nodeProcessor.setCanOpenDoors(p_192879_1_); + } + + public void setCanEnterDoors(boolean p_192878_1_) + { + this.nodeProcessor.setCanEnterDoors(p_192878_1_); + } + + public void setCanFloat(boolean p_192877_1_) + { + this.nodeProcessor.setCanSwim(p_192877_1_); + } + + public boolean canFloat() + { + return this.nodeProcessor.getCanSwim(); + } + + public boolean canEntityStandOnPos(BlockPos pos) + { + return this.world.getBlockState(pos).isTopSolid(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateGround.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateGround.java new file mode 100644 index 0000000..338b03b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateGround.java @@ -0,0 +1,346 @@ +package net.minecraft.pathfinding; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class PathNavigateGround extends PathNavigate +{ + private boolean shouldAvoidSun; + + public PathNavigateGround(EntityLiving entitylivingIn, World worldIn) + { + super(entitylivingIn, worldIn); + } + + protected PathFinder getPathFinder() + { + this.nodeProcessor = new WalkNodeProcessor(); + this.nodeProcessor.setCanEnterDoors(true); + return new PathFinder(this.nodeProcessor); + } + + /** + * If on ground or swimming and can swim + */ + protected boolean canNavigate() + { + return this.entity.onGround || this.getCanSwim() && this.isInLiquid() || this.entity.isRiding(); + } + + protected Vec3d getEntityPosition() + { + return new Vec3d(this.entity.posX, (double)this.getPathablePosY(), this.entity.posZ); + } + + /** + * Returns path to given BlockPos + */ + public Path getPathToPos(BlockPos pos) + { + if (this.world.getBlockState(pos).getMaterial() == Material.AIR) + { + BlockPos blockpos; + + for (blockpos = pos.down(); blockpos.getY() > 0 && this.world.getBlockState(blockpos).getMaterial() == Material.AIR; blockpos = blockpos.down()) + { + ; + } + + if (blockpos.getY() > 0) + { + return super.getPathToPos(blockpos.up()); + } + + while (blockpos.getY() < this.world.getHeight() && this.world.getBlockState(blockpos).getMaterial() == Material.AIR) + { + blockpos = blockpos.up(); + } + + pos = blockpos; + } + + if (!this.world.getBlockState(pos).getMaterial().isSolid()) + { + return super.getPathToPos(pos); + } + else + { + BlockPos blockpos1; + + for (blockpos1 = pos.up(); blockpos1.getY() < this.world.getHeight() && this.world.getBlockState(blockpos1).getMaterial().isSolid(); blockpos1 = blockpos1.up()) + { + ; + } + + return super.getPathToPos(blockpos1); + } + } + + /** + * Returns the path to the given EntityLiving. Args : entity + */ + public Path getPathToEntityLiving(Entity entityIn) + { + return this.getPathToPos(new BlockPos(entityIn)); + } + + /** + * Gets the safe pathing Y position for the entity depending on if it can path swim or not + */ + private int getPathablePosY() + { + if (this.entity.isInWater() && this.getCanSwim()) + { + int i = (int)this.entity.getEntityBoundingBox().minY; + Block block = this.world.getBlockState(new BlockPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ))).getBlock(); + int j = 0; + + while (block == Blocks.FLOWING_WATER || block == Blocks.WATER) + { + ++i; + block = this.world.getBlockState(new BlockPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ))).getBlock(); + ++j; + + if (j > 16) + { + return (int)this.entity.getEntityBoundingBox().minY; + } + } + + return i; + } + else + { + return (int)(this.entity.getEntityBoundingBox().minY + 0.5D); + } + } + + /** + * Trims path data from the end to the first sun covered block + */ + protected void removeSunnyPath() + { + super.removeSunnyPath(); + + if (this.shouldAvoidSun) + { + if (this.world.canSeeSky(new BlockPos(MathHelper.floor(this.entity.posX), (int)(this.entity.getEntityBoundingBox().minY + 0.5D), MathHelper.floor(this.entity.posZ)))) + { + return; + } + + for (int i = 0; i < this.currentPath.getCurrentPathLength(); ++i) + { + PathPoint pathpoint = this.currentPath.getPathPointFromIndex(i); + + if (this.world.canSeeSky(new BlockPos(pathpoint.x, pathpoint.y, pathpoint.z))) + { + this.currentPath.setCurrentPathLength(i - 1); + return; + } + } + } + } + + /** + * Checks if the specified entity can safely walk to the specified location. + */ + protected boolean isDirectPathBetweenPoints(Vec3d posVec31, Vec3d posVec32, int sizeX, int sizeY, int sizeZ) + { + int i = MathHelper.floor(posVec31.x); + int j = MathHelper.floor(posVec31.z); + double d0 = posVec32.x - posVec31.x; + double d1 = posVec32.z - posVec31.z; + double d2 = d0 * d0 + d1 * d1; + + if (d2 < 1.0E-8D) + { + return false; + } + else + { + double d3 = 1.0D / Math.sqrt(d2); + d0 = d0 * d3; + d1 = d1 * d3; + sizeX = sizeX + 2; + sizeZ = sizeZ + 2; + + if (!this.isSafeToStandAt(i, (int)posVec31.y, j, sizeX, sizeY, sizeZ, posVec31, d0, d1)) + { + return false; + } + else + { + sizeX = sizeX - 2; + sizeZ = sizeZ - 2; + double d4 = 1.0D / Math.abs(d0); + double d5 = 1.0D / Math.abs(d1); + double d6 = (double)i - posVec31.x; + double d7 = (double)j - posVec31.z; + + if (d0 >= 0.0D) + { + ++d6; + } + + if (d1 >= 0.0D) + { + ++d7; + } + + d6 = d6 / d0; + d7 = d7 / d1; + int k = d0 < 0.0D ? -1 : 1; + int l = d1 < 0.0D ? -1 : 1; + int i1 = MathHelper.floor(posVec32.x); + int j1 = MathHelper.floor(posVec32.z); + int k1 = i1 - i; + int l1 = j1 - j; + + while (k1 * k > 0 || l1 * l > 0) + { + if (d6 < d7) + { + d6 += d4; + i += k; + k1 = i1 - i; + } + else + { + d7 += d5; + j += l; + l1 = j1 - j; + } + + if (!this.isSafeToStandAt(i, (int)posVec31.y, j, sizeX, sizeY, sizeZ, posVec31, d0, d1)) + { + return false; + } + } + + return true; + } + } + } + + /** + * Returns true when an entity could stand at a position, including solid blocks under the entire entity. + */ + private boolean isSafeToStandAt(int x, int y, int z, int sizeX, int sizeY, int sizeZ, Vec3d vec31, double p_179683_8_, double p_179683_10_) + { + int i = x - sizeX / 2; + int j = z - sizeZ / 2; + + if (!this.isPositionClear(i, y, j, sizeX, sizeY, sizeZ, vec31, p_179683_8_, p_179683_10_)) + { + return false; + } + else + { + for (int k = i; k < i + sizeX; ++k) + { + for (int l = j; l < j + sizeZ; ++l) + { + double d0 = (double)k + 0.5D - vec31.x; + double d1 = (double)l + 0.5D - vec31.z; + + if (d0 * p_179683_8_ + d1 * p_179683_10_ >= 0.0D) + { + PathNodeType pathnodetype = this.nodeProcessor.getPathNodeType(this.world, k, y - 1, l, this.entity, sizeX, sizeY, sizeZ, true, true); + + if (pathnodetype == PathNodeType.WATER) + { + return false; + } + + if (pathnodetype == PathNodeType.LAVA) + { + return false; + } + + if (pathnodetype == PathNodeType.OPEN) + { + return false; + } + + pathnodetype = this.nodeProcessor.getPathNodeType(this.world, k, y, l, this.entity, sizeX, sizeY, sizeZ, true, true); + float f = this.entity.getPathPriority(pathnodetype); + + if (f < 0.0F || f >= 8.0F) + { + return false; + } + + if (pathnodetype == PathNodeType.DAMAGE_FIRE || pathnodetype == PathNodeType.DANGER_FIRE || pathnodetype == PathNodeType.DAMAGE_OTHER) + { + return false; + } + } + } + } + + return true; + } + } + + /** + * Returns true if an entity does not collide with any solid blocks at the position. + */ + private boolean isPositionClear(int x, int y, int z, int sizeX, int sizeY, int sizeZ, Vec3d p_179692_7_, double p_179692_8_, double p_179692_10_) + { + for (BlockPos blockpos : BlockPos.getAllInBox(new BlockPos(x, y, z), new BlockPos(x + sizeX - 1, y + sizeY - 1, z + sizeZ - 1))) + { + double d0 = (double)blockpos.getX() + 0.5D - p_179692_7_.x; + double d1 = (double)blockpos.getZ() + 0.5D - p_179692_7_.z; + + if (d0 * p_179692_8_ + d1 * p_179692_10_ >= 0.0D) + { + Block block = this.world.getBlockState(blockpos).getBlock(); + + if (!block.isPassable(this.world, blockpos)) + { + return false; + } + } + } + + return true; + } + + public void setBreakDoors(boolean canBreakDoors) + { + this.nodeProcessor.setCanOpenDoors(canBreakDoors); + } + + public void setEnterDoors(boolean enterDoors) + { + this.nodeProcessor.setCanEnterDoors(enterDoors); + } + + public boolean getEnterDoors() + { + return this.nodeProcessor.getCanEnterDoors(); + } + + public void setCanSwim(boolean canSwim) + { + this.nodeProcessor.setCanSwim(canSwim); + } + + public boolean getCanSwim() + { + return this.nodeProcessor.getCanSwim(); + } + + public void setAvoidSun(boolean avoidSun) + { + this.shouldAvoidSun = avoidSun; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateSwimmer.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateSwimmer.java new file mode 100644 index 0000000..056d336 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateSwimmer.java @@ -0,0 +1,72 @@ +package net.minecraft.pathfinding; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +public class PathNavigateSwimmer extends PathNavigate +{ + public PathNavigateSwimmer(EntityLiving entitylivingIn, World worldIn) + { + super(entitylivingIn, worldIn); + } + + protected PathFinder getPathFinder() + { + return new PathFinder(new SwimNodeProcessor()); + } + + /** + * If on ground or swimming and can swim + */ + protected boolean canNavigate() + { + return this.isInLiquid(); + } + + protected Vec3d getEntityPosition() + { + return new Vec3d(this.entity.posX, this.entity.posY + (double)this.entity.height * 0.5D, this.entity.posZ); + } + + protected void pathFollow() + { + Vec3d vec3d = this.getEntityPosition(); + float f = this.entity.width * this.entity.width; + int i = 6; + + if (vec3d.squareDistanceTo(this.currentPath.getVectorFromIndex(this.entity, this.currentPath.getCurrentPathIndex())) < (double)f) + { + this.currentPath.incrementPathIndex(); + } + + for (int j = Math.min(this.currentPath.getCurrentPathIndex() + 6, this.currentPath.getCurrentPathLength() - 1); j > this.currentPath.getCurrentPathIndex(); --j) + { + Vec3d vec3d1 = this.currentPath.getVectorFromIndex(this.entity, j); + + if (vec3d1.squareDistanceTo(vec3d) <= 36.0D && this.isDirectPathBetweenPoints(vec3d, vec3d1, 0, 0, 0)) + { + this.currentPath.setCurrentPathIndex(j); + break; + } + } + + this.checkForStuck(vec3d); + } + + /** + * Checks if the specified entity can safely walk to the specified location. + */ + protected boolean isDirectPathBetweenPoints(Vec3d posVec31, Vec3d posVec32, int sizeX, int sizeY, int sizeZ) + { + RayTraceResult raytraceresult = this.world.rayTraceBlocks(posVec31, new Vec3d(posVec32.x, posVec32.y + (double)this.entity.height * 0.5D, posVec32.z), false, true, false); + return raytraceresult == null || raytraceresult.typeOfHit == RayTraceResult.Type.MISS; + } + + public boolean canEntityStandOnPos(BlockPos pos) + { + return !this.world.getBlockState(pos).isFullBlock(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNodeType.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNodeType.java new file mode 100644 index 0000000..f2f7c9f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNodeType.java @@ -0,0 +1,34 @@ +package net.minecraft.pathfinding; + +public enum PathNodeType +{ + BLOCKED(-1.0F), + OPEN(0.0F), + WALKABLE(0.0F), + TRAPDOOR(0.0F), + FENCE(-1.0F), + LAVA(-1.0F), + WATER(8.0F), + RAIL(0.0F), + DANGER_FIRE(8.0F), + DAMAGE_FIRE(16.0F), + DANGER_CACTUS(8.0F), + DAMAGE_CACTUS(-1.0F), + DANGER_OTHER(8.0F), + DAMAGE_OTHER(-1.0F), + DOOR_OPEN(0.0F), + DOOR_WOOD_CLOSED(-1.0F), + DOOR_IRON_CLOSED(-1.0F); + + private final float priority; + + private PathNodeType(float priorityIn) + { + this.priority = priorityIn; + } + + public float getPriority() + { + return this.priority; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathPoint.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathPoint.java new file mode 100644 index 0000000..26eefdd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathPoint.java @@ -0,0 +1,137 @@ +package net.minecraft.pathfinding; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PathPoint +{ + /** The x coordinate of this point */ + public final int x; + /** The y coordinate of this point */ + public final int y; + /** The z coordinate of this point */ + public final int z; + /** A hash of the coordinates used to identify this point */ + private final int hash; + /** The index of this point in its assigned path */ + public int index = -1; + /** The distance along the path to this point */ + public float totalPathDistance; + /** The linear distance to the next point */ + public float distanceToNext; + /** The distance to the target */ + public float distanceToTarget; + /** The point preceding this in its assigned path */ + public PathPoint previous; + /** True if the pathfinder has already visited this point */ + public boolean visited; + public float distanceFromOrigin; + public float cost; + public float costMalus; + public PathNodeType nodeType = PathNodeType.BLOCKED; + + public PathPoint(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + this.hash = makeHash(x, y, z); + } + + public PathPoint cloneMove(int x, int y, int z) + { + PathPoint pathpoint = new PathPoint(x, y, z); + pathpoint.index = this.index; + pathpoint.totalPathDistance = this.totalPathDistance; + pathpoint.distanceToNext = this.distanceToNext; + pathpoint.distanceToTarget = this.distanceToTarget; + pathpoint.previous = this.previous; + pathpoint.visited = this.visited; + pathpoint.distanceFromOrigin = this.distanceFromOrigin; + pathpoint.cost = this.cost; + pathpoint.costMalus = this.costMalus; + pathpoint.nodeType = this.nodeType; + return pathpoint; + } + + public static int makeHash(int x, int y, int z) + { + return y & 255 | (x & 32767) << 8 | (z & 32767) << 24 | (x < 0 ? Integer.MIN_VALUE : 0) | (z < 0 ? 32768 : 0); + } + + /** + * Returns the linear distance to another path point + */ + public float distanceTo(PathPoint pathpointIn) + { + float f = (float)(pathpointIn.x - this.x); + float f1 = (float)(pathpointIn.y - this.y); + float f2 = (float)(pathpointIn.z - this.z); + return MathHelper.sqrt(f * f + f1 * f1 + f2 * f2); + } + + /** + * Returns the squared distance to another path point + */ + public float distanceToSquared(PathPoint pathpointIn) + { + float f = (float)(pathpointIn.x - this.x); + float f1 = (float)(pathpointIn.y - this.y); + float f2 = (float)(pathpointIn.z - this.z); + return f * f + f1 * f1 + f2 * f2; + } + + public float distanceManhattan(PathPoint p_186281_1_) + { + float f = (float)Math.abs(p_186281_1_.x - this.x); + float f1 = (float)Math.abs(p_186281_1_.y - this.y); + float f2 = (float)Math.abs(p_186281_1_.z - this.z); + return f + f1 + f2; + } + + public boolean equals(Object p_equals_1_) + { + if (!(p_equals_1_ instanceof PathPoint)) + { + return false; + } + else + { + PathPoint pathpoint = (PathPoint)p_equals_1_; + return this.hash == pathpoint.hash && this.x == pathpoint.x && this.y == pathpoint.y && this.z == pathpoint.z; + } + } + + public int hashCode() + { + return this.hash; + } + + /** + * Returns true if this point has already been assigned to a path + */ + public boolean isAssigned() + { + return this.index >= 0; + } + + public String toString() + { + return this.x + ", " + this.y + ", " + this.z; + } + + @SideOnly(Side.CLIENT) + public static PathPoint createFromBuffer(PacketBuffer buf) + { + PathPoint pathpoint = new PathPoint(buf.readInt(), buf.readInt(), buf.readInt()); + pathpoint.distanceFromOrigin = buf.readFloat(); + pathpoint.cost = buf.readFloat(); + pathpoint.costMalus = buf.readFloat(); + pathpoint.visited = buf.readBoolean(); + pathpoint.nodeType = PathNodeType.values()[buf.readInt()]; + pathpoint.distanceToTarget = buf.readFloat(); + return pathpoint; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathWorldListener.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathWorldListener.java new file mode 100644 index 0000000..5c3215a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathWorldListener.java @@ -0,0 +1,120 @@ +package net.minecraft.pathfinding; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorldEventListener; +import net.minecraft.world.World; + +public class PathWorldListener implements IWorldEventListener +{ + private final List navigations = Lists.newArrayList(); + + public void notifyBlockUpdate(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState, int flags) + { + if (this.didBlockChange(worldIn, pos, oldState, newState)) + { + int i = 0; + + for (int j = this.navigations.size(); i < j; ++i) + { + PathNavigate pathnavigate = this.navigations.get(i); + + if (pathnavigate != null && !pathnavigate.canUpdatePathOnTimeout()) + { + Path path = pathnavigate.getPath(); + + if (path != null && !path.isFinished() && path.getCurrentPathLength() != 0) + { + PathPoint pathpoint = pathnavigate.currentPath.getFinalPathPoint(); + double d0 = pos.distanceSq(((double)pathpoint.x + pathnavigate.entity.posX) / 2.0D, ((double)pathpoint.y + pathnavigate.entity.posY) / 2.0D, ((double)pathpoint.z + pathnavigate.entity.posZ) / 2.0D); + int k = (path.getCurrentPathLength() - path.getCurrentPathIndex()) * (path.getCurrentPathLength() - path.getCurrentPathIndex()); + + if (d0 < (double)k) + { + pathnavigate.updatePath(); + } + } + } + } + } + } + + protected boolean didBlockChange(World worldIn, BlockPos pos, IBlockState oldState, IBlockState newState) + { + AxisAlignedBB axisalignedbb = oldState.getCollisionBoundingBox(worldIn, pos); + AxisAlignedBB axisalignedbb1 = newState.getCollisionBoundingBox(worldIn, pos); + return axisalignedbb != axisalignedbb1 && (axisalignedbb == null || !axisalignedbb.equals(axisalignedbb1)); + } + + public void notifyLightSet(BlockPos pos) + { + } + + /** + * On the client, re-renders all blocks in this range, inclusive. On the server, does nothing. + */ + public void markBlockRangeForRenderUpdate(int x1, int y1, int z1, int x2, int y2, int z2) + { + } + + public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) + { + } + + public void spawnParticle(int particleID, boolean ignoreRange, double xCoord, double yCoord, double zCoord, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + } + + public void spawnParticle(int id, boolean ignoreRange, boolean p_190570_3_, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed, int... parameters) + { + } + + /** + * Called on all IWorldAccesses when an entity is created or loaded. On client worlds, starts downloading any + * necessary textures. On server worlds, adds the entity to the entity tracker. + */ + public void onEntityAdded(Entity entityIn) + { + if (entityIn instanceof EntityLiving) + { + this.navigations.add(((EntityLiving)entityIn).getNavigator()); + } + } + + /** + * Called on all IWorldAccesses when an entity is unloaded or destroyed. On client worlds, releases any downloaded + * textures. On server worlds, removes the entity from the entity tracker. + */ + public void onEntityRemoved(Entity entityIn) + { + if (entityIn instanceof EntityLiving) + { + this.navigations.remove(((EntityLiving)entityIn).getNavigator()); + } + } + + public void playRecord(SoundEvent soundIn, BlockPos pos) + { + } + + public void broadcastSound(int soundID, BlockPos pos, int data) + { + } + + public void playEvent(EntityPlayer player, int type, BlockPos blockPosIn, int data) + { + } + + public void sendBlockBreakProgress(int breakerId, BlockPos pos, int progress) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/SwimNodeProcessor.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/SwimNodeProcessor.java new file mode 100644 index 0000000..fa8a6b1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/SwimNodeProcessor.java @@ -0,0 +1,83 @@ +package net.minecraft.pathfinding; + +import javax.annotation.Nullable; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class SwimNodeProcessor extends NodeProcessor +{ + public PathPoint getStart() + { + return this.openPoint(MathHelper.floor(this.entity.getEntityBoundingBox().minX), MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D), MathHelper.floor(this.entity.getEntityBoundingBox().minZ)); + } + + /** + * Returns PathPoint for given coordinates + */ + public PathPoint getPathPointToCoords(double x, double y, double z) + { + return this.openPoint(MathHelper.floor(x - (double)(this.entity.width / 2.0F)), MathHelper.floor(y + 0.5D), MathHelper.floor(z - (double)(this.entity.width / 2.0F))); + } + + public int findPathOptions(PathPoint[] pathOptions, PathPoint currentPoint, PathPoint targetPoint, float maxDistance) + { + int i = 0; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + PathPoint pathpoint = this.getWaterNode(currentPoint.x + enumfacing.getFrontOffsetX(), currentPoint.y + enumfacing.getFrontOffsetY(), currentPoint.z + enumfacing.getFrontOffsetZ()); + + if (pathpoint != null && !pathpoint.visited && pathpoint.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint; + } + } + + return i; + } + + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z, EntityLiving entitylivingIn, int xSize, int ySize, int zSize, boolean canBreakDoorsIn, boolean canEnterDoorsIn) + { + return PathNodeType.WATER; + } + + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z) + { + return PathNodeType.WATER; + } + + @Nullable + private PathPoint getWaterNode(int p_186328_1_, int p_186328_2_, int p_186328_3_) + { + PathNodeType pathnodetype = this.isFree(p_186328_1_, p_186328_2_, p_186328_3_); + return pathnodetype == PathNodeType.WATER ? this.openPoint(p_186328_1_, p_186328_2_, p_186328_3_) : null; + } + + private PathNodeType isFree(int p_186327_1_, int p_186327_2_, int p_186327_3_) + { + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int i = p_186327_1_; i < p_186327_1_ + this.entitySizeX; ++i) + { + for (int j = p_186327_2_; j < p_186327_2_ + this.entitySizeY; ++j) + { + for (int k = p_186327_3_; k < p_186327_3_ + this.entitySizeZ; ++k) + { + IBlockState iblockstate = this.blockaccess.getBlockState(blockpos$mutableblockpos.setPos(i, j, k)); + + if (iblockstate.getMaterial() != Material.WATER) + { + return PathNodeType.BLOCKED; + } + } + } + } + + return PathNodeType.WATER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/WalkNodeProcessor.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/WalkNodeProcessor.java new file mode 100644 index 0000000..5a5bffa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/WalkNodeProcessor.java @@ -0,0 +1,516 @@ +package net.minecraft.pathfinding; + +import com.google.common.collect.Sets; +import java.util.EnumSet; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoor; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.BlockWall; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLiving; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; + +public class WalkNodeProcessor extends NodeProcessor +{ + protected float avoidsWater; + + public void init(IBlockAccess sourceIn, EntityLiving mob) + { + super.init(sourceIn, mob); + this.avoidsWater = mob.getPathPriority(PathNodeType.WATER); + } + + /** + * This method is called when all nodes have been processed and PathEntity is created. + * {@link net.minecraft.world.pathfinder.WalkNodeProcessor WalkNodeProcessor} uses this to change its field {@link + * net.minecraft.world.pathfinder.WalkNodeProcessor#avoidsWater avoidsWater} + */ + public void postProcess() + { + this.entity.setPathPriority(PathNodeType.WATER, this.avoidsWater); + super.postProcess(); + } + + public PathPoint getStart() + { + int i; + + if (this.getCanSwim() && this.entity.isInWater()) + { + i = (int)this.entity.getEntityBoundingBox().minY; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + + for (Block block = this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock(); block == Blocks.FLOWING_WATER || block == Blocks.WATER; block = this.blockaccess.getBlockState(blockpos$mutableblockpos).getBlock()) + { + ++i; + blockpos$mutableblockpos.setPos(MathHelper.floor(this.entity.posX), i, MathHelper.floor(this.entity.posZ)); + } + } + else if (this.entity.onGround) + { + i = MathHelper.floor(this.entity.getEntityBoundingBox().minY + 0.5D); + } + else + { + BlockPos blockpos; + + for (blockpos = new BlockPos(this.entity); (this.blockaccess.getBlockState(blockpos).getMaterial() == Material.AIR || this.blockaccess.getBlockState(blockpos).getBlock().isPassable(this.blockaccess, blockpos)) && blockpos.getY() > 0; blockpos = blockpos.down()) + { + ; + } + + i = blockpos.up().getY(); + } + + BlockPos blockpos2 = new BlockPos(this.entity); + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, blockpos2.getX(), i, blockpos2.getZ()); + + if (this.entity.getPathPriority(pathnodetype1) < 0.0F) + { + Set set = Sets.newHashSet(); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double)i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().minX, (double)i, this.entity.getEntityBoundingBox().maxZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double)i, this.entity.getEntityBoundingBox().minZ)); + set.add(new BlockPos(this.entity.getEntityBoundingBox().maxX, (double)i, this.entity.getEntityBoundingBox().maxZ)); + + for (BlockPos blockpos1 : set) + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, blockpos1); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + return this.openPoint(blockpos1.getX(), blockpos1.getY(), blockpos1.getZ()); + } + } + } + + return this.openPoint(blockpos2.getX(), i, blockpos2.getZ()); + } + + /** + * Returns PathPoint for given coordinates + */ + public PathPoint getPathPointToCoords(double x, double y, double z) + { + return this.openPoint(MathHelper.floor(x), MathHelper.floor(y), MathHelper.floor(z)); + } + + public int findPathOptions(PathPoint[] pathOptions, PathPoint currentPoint, PathPoint targetPoint, float maxDistance) + { + int i = 0; + int j = 0; + PathNodeType pathnodetype = this.getPathNodeType(this.entity, currentPoint.x, currentPoint.y + 1, currentPoint.z); + + if (this.entity.getPathPriority(pathnodetype) >= 0.0F) + { + j = MathHelper.floor(Math.max(1.0F, this.entity.stepHeight)); + } + + BlockPos blockpos = (new BlockPos(currentPoint.x, currentPoint.y, currentPoint.z)).down(); + double d0 = (double)currentPoint.y - (1.0D - this.blockaccess.getBlockState(blockpos).getBoundingBox(this.blockaccess, blockpos).maxY); + PathPoint pathpoint = this.getSafePoint(currentPoint.x, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + PathPoint pathpoint1 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z, j, d0, EnumFacing.WEST); + PathPoint pathpoint2 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z, j, d0, EnumFacing.EAST); + PathPoint pathpoint3 = this.getSafePoint(currentPoint.x, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint != null && !pathpoint.visited && pathpoint.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint; + } + + if (pathpoint1 != null && !pathpoint1.visited && pathpoint1.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint1; + } + + if (pathpoint2 != null && !pathpoint2.visited && pathpoint2.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint2; + } + + if (pathpoint3 != null && !pathpoint3.visited && pathpoint3.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint3; + } + + boolean flag = pathpoint3 == null || pathpoint3.nodeType == PathNodeType.OPEN || pathpoint3.costMalus != 0.0F; + boolean flag1 = pathpoint == null || pathpoint.nodeType == PathNodeType.OPEN || pathpoint.costMalus != 0.0F; + boolean flag2 = pathpoint2 == null || pathpoint2.nodeType == PathNodeType.OPEN || pathpoint2.costMalus != 0.0F; + boolean flag3 = pathpoint1 == null || pathpoint1.nodeType == PathNodeType.OPEN || pathpoint1.costMalus != 0.0F; + + if (flag && flag3) + { + PathPoint pathpoint4 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint4 != null && !pathpoint4.visited && pathpoint4.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint4; + } + } + + if (flag && flag2) + { + PathPoint pathpoint5 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z - 1, j, d0, EnumFacing.NORTH); + + if (pathpoint5 != null && !pathpoint5.visited && pathpoint5.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint5; + } + } + + if (flag1 && flag3) + { + PathPoint pathpoint6 = this.getSafePoint(currentPoint.x - 1, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + + if (pathpoint6 != null && !pathpoint6.visited && pathpoint6.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint6; + } + } + + if (flag1 && flag2) + { + PathPoint pathpoint7 = this.getSafePoint(currentPoint.x + 1, currentPoint.y, currentPoint.z + 1, j, d0, EnumFacing.SOUTH); + + if (pathpoint7 != null && !pathpoint7.visited && pathpoint7.distanceTo(targetPoint) < maxDistance) + { + pathOptions[i++] = pathpoint7; + } + } + + return i; + } + + /** + * Returns a point that the entity can safely move to + */ + @Nullable + private PathPoint getSafePoint(int x, int y, int z, int p_186332_4_, double p_186332_5_, EnumFacing facing) + { + PathPoint pathpoint = null; + BlockPos blockpos = new BlockPos(x, y, z); + BlockPos blockpos1 = blockpos.down(); + double d0 = (double)y - (1.0D - this.blockaccess.getBlockState(blockpos1).getBoundingBox(this.blockaccess, blockpos1).maxY); + + if (d0 - p_186332_5_ > 1.125D) + { + return null; + } + else + { + PathNodeType pathnodetype = this.getPathNodeType(this.entity, x, y, z); + float f = this.entity.getPathPriority(pathnodetype); + double d1 = (double)this.entity.width / 2.0D; + + if (f >= 0.0F) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + } + + if (pathnodetype == PathNodeType.WALKABLE) + { + return pathpoint; + } + else + { + if (pathpoint == null && p_186332_4_ > 0 && pathnodetype != PathNodeType.FENCE && pathnodetype != PathNodeType.TRAPDOOR) + { + pathpoint = this.getSafePoint(x, y + 1, z, p_186332_4_ - 1, p_186332_5_, facing); + + if (pathpoint != null && (pathpoint.nodeType == PathNodeType.OPEN || pathpoint.nodeType == PathNodeType.WALKABLE) && this.entity.width < 1.0F) + { + double d2 = (double)(x - facing.getFrontOffsetX()) + 0.5D; + double d3 = (double)(z - facing.getFrontOffsetZ()) + 0.5D; + AxisAlignedBB axisalignedbb = new AxisAlignedBB(d2 - d1, (double)y + 0.001D, d3 - d1, d2 + d1, (double)((float)y + this.entity.height), d3 + d1); + AxisAlignedBB axisalignedbb1 = this.blockaccess.getBlockState(blockpos).getBoundingBox(this.blockaccess, blockpos); + AxisAlignedBB axisalignedbb2 = axisalignedbb.expand(0.0D, axisalignedbb1.maxY - 0.002D, 0.0D); + + if (this.entity.world.collidesWithAnyBlock(axisalignedbb2)) + { + pathpoint = null; + } + } + } + + if (pathnodetype == PathNodeType.OPEN) + { + AxisAlignedBB axisalignedbb3 = new AxisAlignedBB((double)x - d1 + 0.5D, (double)y + 0.001D, (double)z - d1 + 0.5D, (double)x + d1 + 0.5D, (double)((float)y + this.entity.height), (double)z + d1 + 0.5D); + + if (this.entity.world.collidesWithAnyBlock(axisalignedbb3)) + { + return null; + } + + if (this.entity.width >= 1.0F) + { + PathNodeType pathnodetype1 = this.getPathNodeType(this.entity, x, y - 1, z); + + if (pathnodetype1 == PathNodeType.BLOCKED) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = PathNodeType.WALKABLE; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + return pathpoint; + } + } + + int i = 0; + + while (y > 0 && pathnodetype == PathNodeType.OPEN) + { + --y; + + if (i++ >= this.entity.getMaxFallHeight()) + { + return null; + } + + pathnodetype = this.getPathNodeType(this.entity, x, y, z); + f = this.entity.getPathPriority(pathnodetype); + + if (pathnodetype != PathNodeType.OPEN && f >= 0.0F) + { + pathpoint = this.openPoint(x, y, z); + pathpoint.nodeType = pathnodetype; + pathpoint.costMalus = Math.max(pathpoint.costMalus, f); + break; + } + + if (f < 0.0F) + { + return null; + } + } + } + + return pathpoint; + } + } + } + + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z, EntityLiving entitylivingIn, int xSize, int ySize, int zSize, boolean canBreakDoorsIn, boolean canEnterDoorsIn) + { + EnumSet enumset = EnumSet.noneOf(PathNodeType.class); + PathNodeType pathnodetype = PathNodeType.BLOCKED; + double d0 = (double)entitylivingIn.width / 2.0D; + BlockPos blockpos = new BlockPos(entitylivingIn); + pathnodetype = this.getPathNodeType(blockaccessIn, x, y, z, xSize, ySize, zSize, canBreakDoorsIn, canEnterDoorsIn, enumset, pathnodetype, blockpos); + + if (enumset.contains(PathNodeType.FENCE)) + { + return PathNodeType.FENCE; + } + else + { + PathNodeType pathnodetype1 = PathNodeType.BLOCKED; + + for (PathNodeType pathnodetype2 : enumset) + { + if (entitylivingIn.getPathPriority(pathnodetype2) < 0.0F) + { + return pathnodetype2; + } + + if (entitylivingIn.getPathPriority(pathnodetype2) >= entitylivingIn.getPathPriority(pathnodetype1)) + { + pathnodetype1 = pathnodetype2; + } + } + + if (pathnodetype == PathNodeType.OPEN && entitylivingIn.getPathPriority(pathnodetype1) == 0.0F) + { + return PathNodeType.OPEN; + } + else + { + return pathnodetype1; + } + } + } + + public PathNodeType getPathNodeType(IBlockAccess p_193577_1_, int x, int y, int z, int xSize, int ySize, int zSize, boolean canOpenDoorsIn, boolean canEnterDoorsIn, EnumSet p_193577_10_, PathNodeType p_193577_11_, BlockPos p_193577_12_) + { + for (int i = 0; i < xSize; ++i) + { + for (int j = 0; j < ySize; ++j) + { + for (int k = 0; k < zSize; ++k) + { + int l = i + x; + int i1 = j + y; + int j1 = k + z; + PathNodeType pathnodetype = this.getPathNodeType(p_193577_1_, l, i1, j1); + + if (pathnodetype == PathNodeType.DOOR_WOOD_CLOSED && canOpenDoorsIn && canEnterDoorsIn) + { + pathnodetype = PathNodeType.WALKABLE; + } + + if (pathnodetype == PathNodeType.DOOR_OPEN && !canEnterDoorsIn) + { + pathnodetype = PathNodeType.BLOCKED; + } + + if (pathnodetype == PathNodeType.RAIL && !(p_193577_1_.getBlockState(p_193577_12_).getBlock() instanceof BlockRailBase) && !(p_193577_1_.getBlockState(p_193577_12_.down()).getBlock() instanceof BlockRailBase)) + { + pathnodetype = PathNodeType.FENCE; + } + + if (i == 0 && j == 0 && k == 0) + { + p_193577_11_ = pathnodetype; + } + + p_193577_10_.add(pathnodetype); + } + } + } + + return p_193577_11_; + } + + private PathNodeType getPathNodeType(EntityLiving entitylivingIn, BlockPos pos) + { + return this.getPathNodeType(entitylivingIn, pos.getX(), pos.getY(), pos.getZ()); + } + + private PathNodeType getPathNodeType(EntityLiving entitylivingIn, int x, int y, int z) + { + return this.getPathNodeType(this.blockaccess, x, y, z, entitylivingIn, this.entitySizeX, this.entitySizeY, this.entitySizeZ, this.getCanOpenDoors(), this.getCanEnterDoors()); + } + + public PathNodeType getPathNodeType(IBlockAccess blockaccessIn, int x, int y, int z) + { + PathNodeType pathnodetype = this.getPathNodeTypeRaw(blockaccessIn, x, y, z); + + if (pathnodetype == PathNodeType.OPEN && y >= 1) + { + Block block = blockaccessIn.getBlockState(new BlockPos(x, y - 1, z)).getBlock(); + PathNodeType pathnodetype1 = this.getPathNodeTypeRaw(blockaccessIn, x, y - 1, z); + pathnodetype = pathnodetype1 != PathNodeType.WALKABLE && pathnodetype1 != PathNodeType.OPEN && pathnodetype1 != PathNodeType.WATER && pathnodetype1 != PathNodeType.LAVA ? PathNodeType.WALKABLE : PathNodeType.OPEN; + + if (pathnodetype1 == PathNodeType.DAMAGE_FIRE || block == Blocks.MAGMA) + { + pathnodetype = PathNodeType.DAMAGE_FIRE; + } + + if (pathnodetype1 == PathNodeType.DAMAGE_CACTUS) + { + pathnodetype = PathNodeType.DAMAGE_CACTUS; + } + } + + pathnodetype = this.checkNeighborBlocks(blockaccessIn, x, y, z, pathnodetype); + return pathnodetype; + } + + public PathNodeType checkNeighborBlocks(IBlockAccess p_193578_1_, int p_193578_2_, int p_193578_3_, int p_193578_4_, PathNodeType p_193578_5_) + { + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.retain(); + + if (p_193578_5_ == PathNodeType.WALKABLE) + { + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1; ++j) + { + if (i != 0 || j != 0) + { + Block block = p_193578_1_.getBlockState(blockpos$pooledmutableblockpos.setPos(i + p_193578_2_, p_193578_3_, j + p_193578_4_)).getBlock(); + + if (block == Blocks.CACTUS) + { + p_193578_5_ = PathNodeType.DANGER_CACTUS; + } + else if (block == Blocks.FIRE) + { + p_193578_5_ = PathNodeType.DANGER_FIRE; + } + else if(block.isBurning(p_193578_1_,blockpos$pooledmutableblockpos)) p_193578_5_ = PathNodeType.DAMAGE_FIRE; + } + } + } + } + + blockpos$pooledmutableblockpos.release(); + return p_193578_5_; + } + + protected PathNodeType getPathNodeTypeRaw(IBlockAccess p_189553_1_, int p_189553_2_, int p_189553_3_, int p_189553_4_) + { + BlockPos blockpos = new BlockPos(p_189553_2_, p_189553_3_, p_189553_4_); + IBlockState iblockstate = p_189553_1_.getBlockState(blockpos); + Block block = iblockstate.getBlock(); + Material material = iblockstate.getMaterial(); + + PathNodeType type = block.getAiPathNodeType(iblockstate, p_189553_1_, blockpos); + if (type != null) return type; + + if (material == Material.AIR) + { + return PathNodeType.OPEN; + } + else if (block != Blocks.TRAPDOOR && block != Blocks.IRON_TRAPDOOR && block != Blocks.WATERLILY) + { + if (block == Blocks.FIRE) + { + return PathNodeType.DAMAGE_FIRE; + } + else if (block == Blocks.CACTUS) + { + return PathNodeType.DAMAGE_CACTUS; + } + else if (block instanceof BlockDoor && material == Material.WOOD && !((Boolean)iblockstate.getValue(BlockDoor.OPEN)).booleanValue()) + { + return PathNodeType.DOOR_WOOD_CLOSED; + } + else if (block instanceof BlockDoor && material == Material.IRON && !((Boolean)iblockstate.getValue(BlockDoor.OPEN)).booleanValue()) + { + return PathNodeType.DOOR_IRON_CLOSED; + } + else if (block instanceof BlockDoor && ((Boolean)iblockstate.getValue(BlockDoor.OPEN)).booleanValue()) + { + return PathNodeType.DOOR_OPEN; + } + else if (block instanceof BlockRailBase) + { + return PathNodeType.RAIL; + } + else if (!(block instanceof BlockFence) && !(block instanceof BlockWall) && (!(block instanceof BlockFenceGate) || ((Boolean)iblockstate.getValue(BlockFenceGate.OPEN)).booleanValue())) + { + if (material == Material.WATER) + { + return PathNodeType.WATER; + } + else if (material == Material.LAVA) + { + return PathNodeType.LAVA; + } + else + { + return block.isPassable(p_189553_1_, blockpos) ? PathNodeType.OPEN : PathNodeType.BLOCKED; + } + } + else + { + return PathNodeType.FENCE; + } + } + else + { + return PathNodeType.TRAPDOOR; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/pathfinding/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/package-info.java new file mode 100644 index 0000000..1b2b7dd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/pathfinding/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.pathfinding; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/Potion.java b/build/tmp/recompileMc/sources/net/minecraft/potion/Potion.java new file mode 100644 index 0000000..fb011bf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/Potion.java @@ -0,0 +1,462 @@ +package net.minecraft.potion; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.entity.ai.attributes.IAttributeInstance; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.util.DamageSource; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Potion extends net.minecraftforge.registries.IForgeRegistryEntry.Impl +{ + public static final RegistryNamespaced REGISTRY = net.minecraftforge.registries.GameData.getWrapper(Potion.class); + /** Contains a Map of the AttributeModifiers registered by potions */ + private final Map attributeModifierMap = Maps.newHashMap(); + /** This field indicated if the effect is 'bad' - negative - for the entity. */ + private final boolean isBadEffect; + /** Is the color of the liquid for this potion. */ + private final int liquidColor; + /** The name of the Potion. */ + private String name = ""; + /** The index for the icon displayed when the potion effect is active. */ + private int statusIconIndex = -1; + private double effectiveness; + private boolean beneficial; + + /** + * Gets a Potion from the potion registry using a numeric Id. + */ + @Nullable + public static Potion getPotionById(int potionID) + { + return REGISTRY.getObjectById(potionID); + } + + /** + * Gets the numeric Id associated with a potion. + */ + public static int getIdFromPotion(Potion potionIn) + { + return REGISTRY.getIDForObject(potionIn); + } + + @Nullable + public static Potion getPotionFromResourceLocation(String location) + { + return REGISTRY.getObject(new ResourceLocation(location)); + } + + protected Potion(boolean isBadEffectIn, int liquidColorIn) + { + this.isBadEffect = isBadEffectIn; + + if (isBadEffectIn) + { + this.effectiveness = 0.5D; + } + else + { + this.effectiveness = 1.0D; + } + + this.liquidColor = liquidColorIn; + } + + /** + * Sets the index for the icon displayed in the player's inventory when the status is active. + */ + protected Potion setIconIndex(int p_76399_1_, int p_76399_2_) + { + this.statusIconIndex = p_76399_1_ + p_76399_2_ * 8; + return this; + } + + public void performEffect(EntityLivingBase entityLivingBaseIn, int amplifier) + { + if (this == MobEffects.REGENERATION) + { + if (entityLivingBaseIn.getHealth() < entityLivingBaseIn.getMaxHealth()) + { + entityLivingBaseIn.heal(1.0F); + } + } + else if (this == MobEffects.POISON) + { + if (entityLivingBaseIn.getHealth() > 1.0F) + { + entityLivingBaseIn.attackEntityFrom(DamageSource.MAGIC, 1.0F); + } + } + else if (this == MobEffects.WITHER) + { + entityLivingBaseIn.attackEntityFrom(DamageSource.WITHER, 1.0F); + } + else if (this == MobEffects.HUNGER && entityLivingBaseIn instanceof EntityPlayer) + { + ((EntityPlayer)entityLivingBaseIn).addExhaustion(0.005F * (float)(amplifier + 1)); + } + else if (this == MobEffects.SATURATION && entityLivingBaseIn instanceof EntityPlayer) + { + if (!entityLivingBaseIn.world.isRemote) + { + ((EntityPlayer)entityLivingBaseIn).getFoodStats().addStats(amplifier + 1, 1.0F); + } + } + else if ((this != MobEffects.INSTANT_HEALTH || entityLivingBaseIn.isEntityUndead()) && (this != MobEffects.INSTANT_DAMAGE || !entityLivingBaseIn.isEntityUndead())) + { + if (this == MobEffects.INSTANT_DAMAGE && !entityLivingBaseIn.isEntityUndead() || this == MobEffects.INSTANT_HEALTH && entityLivingBaseIn.isEntityUndead()) + { + entityLivingBaseIn.attackEntityFrom(DamageSource.MAGIC, (float)(6 << amplifier)); + } + } + else + { + entityLivingBaseIn.heal((float)Math.max(4 << amplifier, 0)); + } + } + + public void affectEntity(@Nullable Entity source, @Nullable Entity indirectSource, EntityLivingBase entityLivingBaseIn, int amplifier, double health) + { + if ((this != MobEffects.INSTANT_HEALTH || entityLivingBaseIn.isEntityUndead()) && (this != MobEffects.INSTANT_DAMAGE || !entityLivingBaseIn.isEntityUndead())) + { + if (this == MobEffects.INSTANT_DAMAGE && !entityLivingBaseIn.isEntityUndead() || this == MobEffects.INSTANT_HEALTH && entityLivingBaseIn.isEntityUndead()) + { + int j = (int)(health * (double)(6 << amplifier) + 0.5D); + + if (source == null) + { + entityLivingBaseIn.attackEntityFrom(DamageSource.MAGIC, (float)j); + } + else + { + entityLivingBaseIn.attackEntityFrom(DamageSource.causeIndirectMagicDamage(source, indirectSource), (float)j); + } + } + } + else + { + int i = (int)(health * (double)(4 << amplifier) + 0.5D); + entityLivingBaseIn.heal((float)i); + } + } + + /** + * checks if Potion effect is ready to be applied this tick. + */ + public boolean isReady(int duration, int amplifier) + { + if (this == MobEffects.REGENERATION) + { + int k = 50 >> amplifier; + + if (k > 0) + { + return duration % k == 0; + } + else + { + return true; + } + } + else if (this == MobEffects.POISON) + { + int j = 25 >> amplifier; + + if (j > 0) + { + return duration % j == 0; + } + else + { + return true; + } + } + else if (this == MobEffects.WITHER) + { + int i = 40 >> amplifier; + + if (i > 0) + { + return duration % i == 0; + } + else + { + return true; + } + } + else + { + return this == MobEffects.HUNGER; + } + } + + /** + * Returns true if the potion has an instant effect instead of a continuous one (eg Harming) + */ + public boolean isInstant() + { + return false; + } + + /** + * Set the potion name. + */ + public Potion setPotionName(String nameIn) + { + this.name = nameIn; + return this; + } + + /** + * returns the name of the potion + */ + public String getName() + { + return this.name; + } + + protected Potion setEffectiveness(double effectivenessIn) + { + this.effectiveness = effectivenessIn; + return this; + } + + /** + * Returns true if the potion has a associated status icon to display in then inventory when active. + */ + @SideOnly(Side.CLIENT) + public boolean hasStatusIcon() + { + return this.statusIconIndex >= 0; + } + + /** + * Returns the index for the icon to display when the potion is active. + */ + @SideOnly(Side.CLIENT) + public int getStatusIconIndex() + { + return this.statusIconIndex; + } + + /** + * This method returns true if the potion effect is bad - negative - for the entity. + */ + public boolean isBadEffect() + { + return this.isBadEffect; + } + + @SideOnly(Side.CLIENT) + public static String getPotionDurationString(PotionEffect effect, float durationFactor) + { + if (effect.getIsPotionDurationMax()) + { + return "**:**"; + } + else + { + int i = MathHelper.floor((float)effect.getDuration() * durationFactor); + return StringUtils.ticksToElapsedTime(i); + } + } + + /** + * Returns the color of the potion liquid. + */ + public int getLiquidColor() + { + return this.liquidColor; + } + + /** + * Used by potions to register the attribute they modify. + */ + public Potion registerPotionAttributeModifier(IAttribute attribute, String uniqueId, double ammount, int operation) + { + AttributeModifier attributemodifier = new AttributeModifier(UUID.fromString(uniqueId), this.getName(), ammount, operation); + this.attributeModifierMap.put(attribute, attributemodifier); + return this; + } + + public void removeAttributesModifiersFromEntity(EntityLivingBase entityLivingBaseIn, AbstractAttributeMap attributeMapIn, int amplifier) + { + for (Entry entry : this.attributeModifierMap.entrySet()) + { + IAttributeInstance iattributeinstance = attributeMapIn.getAttributeInstance(entry.getKey()); + + if (iattributeinstance != null) + { + iattributeinstance.removeModifier(entry.getValue()); + } + } + } + + @SideOnly(Side.CLIENT) + public Map getAttributeModifierMap() + { + return this.attributeModifierMap; + } + + public void applyAttributesModifiersToEntity(EntityLivingBase entityLivingBaseIn, AbstractAttributeMap attributeMapIn, int amplifier) + { + for (Entry entry : this.attributeModifierMap.entrySet()) + { + IAttributeInstance iattributeinstance = attributeMapIn.getAttributeInstance(entry.getKey()); + + if (iattributeinstance != null) + { + AttributeModifier attributemodifier = entry.getValue(); + iattributeinstance.removeModifier(attributemodifier); + iattributeinstance.applyModifier(new AttributeModifier(attributemodifier.getID(), this.getName() + " " + amplifier, this.getAttributeModifierAmount(amplifier, attributemodifier), attributemodifier.getOperation())); + } + } + } + + public double getAttributeModifierAmount(int amplifier, AttributeModifier modifier) + { + return modifier.getAmount() * (double)(amplifier + 1); + } + + /* ======================================== FORGE START =====================================*/ + + /** + * If the Potion effect should be displayed in the players inventory + * @param effect the active PotionEffect + * @return true to display it (default), false to hide it. + */ + public boolean shouldRender(PotionEffect effect) { return true; } + + /** + * If the standard PotionEffect text (name and duration) should be drawn when this potion is active. + * @param effect the active PotionEffect + * @return true to draw the standard text + */ + public boolean shouldRenderInvText(PotionEffect effect) + { + return true; + } + + /** + * If the Potion effect should be displayed in the player's ingame HUD + * @param effect the active PotionEffect + * @return true to display it (default), false to hide it. + */ + public boolean shouldRenderHUD(PotionEffect effect) + { + return true; + } + + /** + * Called to draw the this Potion onto the player's inventory when it's active. + * This can be used to e.g. render Potion icons from your own texture. + * @param x the x coordinate + * @param y the y coordinate + * @param effect the active PotionEffect + * @param mc the Minecraft instance, for convenience + */ + @SideOnly(Side.CLIENT) + public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc) { } + + /** + * Called to draw the this Potion onto the player's ingame HUD when it's active. + * This can be used to e.g. render Potion icons from your own texture. + * @param x the x coordinate + * @param y the y coordinate + * @param effect the active PotionEffect + * @param mc the Minecraft instance, for convenience + * @param alpha the alpha value, blinks when the potion is about to run out + */ + @SideOnly(Side.CLIENT) + public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha) { } + + /** + * Get a fresh list of items that can cure this Potion. + * All new PotionEffects created from this Potion will call this to initialize the default curative items + * @see PotionEffect#getCurativeItems + * @return A list of items that can cure this Potion + */ + public java.util.List getCurativeItems() + { + java.util.ArrayList ret = new java.util.ArrayList(); + ret.add(new net.minecraft.item.ItemStack(net.minecraft.init.Items.MILK_BUCKET)); + return ret; + } + + /** + * Used for determining {@code PotionEffect} sort order in GUIs. + * Defaults to the {@code PotionEffect}'s liquid color. + * @param potionEffect the {@code PotionEffect} instance containing the potion + * @return a value used to sort {@code PotionEffect}s in GUIs + */ + public int getGuiSortColor(PotionEffect potionEffect) + { + return this.getLiquidColor(); + } + + /* ======================================== FORGE END =====================================*/ + + /** + * Get if the potion is beneficial to the player. Beneficial potions are shown on the first row of the HUD + */ + @SideOnly(Side.CLIENT) + public boolean isBeneficial() + { + return this.beneficial; + } + + /** + * Set that the potion is beneficial to the player. Beneficial potions are shown on the first row of the HUD + */ + public Potion setBeneficial() + { + this.beneficial = true; + return this; + } + + public static void registerPotions() + { + REGISTRY.register(1, new ResourceLocation("speed"), (new Potion(false, 8171462)).setPotionName("effect.moveSpeed").setIconIndex(0, 0).registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED, "91AEAA56-376B-4498-935B-2F7F68070635", 0.20000000298023224D, 2).setBeneficial()); + REGISTRY.register(2, new ResourceLocation("slowness"), (new Potion(true, 5926017)).setPotionName("effect.moveSlowdown").setIconIndex(1, 0).registerPotionAttributeModifier(SharedMonsterAttributes.MOVEMENT_SPEED, "7107DE5E-7CE8-4030-940E-514C1F160890", -0.15000000596046448D, 2)); + REGISTRY.register(3, new ResourceLocation("haste"), (new Potion(false, 14270531)).setPotionName("effect.digSpeed").setIconIndex(2, 0).setEffectiveness(1.5D).setBeneficial().registerPotionAttributeModifier(SharedMonsterAttributes.ATTACK_SPEED, "AF8B6E3F-3328-4C0A-AA36-5BA2BB9DBEF3", 0.10000000149011612D, 2)); + REGISTRY.register(4, new ResourceLocation("mining_fatigue"), (new Potion(true, 4866583)).setPotionName("effect.digSlowDown").setIconIndex(3, 0).registerPotionAttributeModifier(SharedMonsterAttributes.ATTACK_SPEED, "55FCED67-E92A-486E-9800-B47F202C4386", -0.10000000149011612D, 2)); + REGISTRY.register(5, new ResourceLocation("strength"), (new PotionAttackDamage(false, 9643043, 3.0D)).setPotionName("effect.damageBoost").setIconIndex(4, 0).registerPotionAttributeModifier(SharedMonsterAttributes.ATTACK_DAMAGE, "648D7064-6A60-4F59-8ABE-C2C23A6DD7A9", 0.0D, 0).setBeneficial()); + REGISTRY.register(6, new ResourceLocation("instant_health"), (new PotionHealth(false, 16262179)).setPotionName("effect.heal").setBeneficial()); + REGISTRY.register(7, new ResourceLocation("instant_damage"), (new PotionHealth(true, 4393481)).setPotionName("effect.harm").setBeneficial()); + REGISTRY.register(8, new ResourceLocation("jump_boost"), (new Potion(false, 2293580)).setPotionName("effect.jump").setIconIndex(2, 1).setBeneficial()); + REGISTRY.register(9, new ResourceLocation("nausea"), (new Potion(true, 5578058)).setPotionName("effect.confusion").setIconIndex(3, 1).setEffectiveness(0.25D)); + REGISTRY.register(10, new ResourceLocation("regeneration"), (new Potion(false, 13458603)).setPotionName("effect.regeneration").setIconIndex(7, 0).setEffectiveness(0.25D).setBeneficial()); + REGISTRY.register(11, new ResourceLocation("resistance"), (new Potion(false, 10044730)).setPotionName("effect.resistance").setIconIndex(6, 1).setBeneficial()); + REGISTRY.register(12, new ResourceLocation("fire_resistance"), (new Potion(false, 14981690)).setPotionName("effect.fireResistance").setIconIndex(7, 1).setBeneficial()); + REGISTRY.register(13, new ResourceLocation("water_breathing"), (new Potion(false, 3035801)).setPotionName("effect.waterBreathing").setIconIndex(0, 2).setBeneficial()); + REGISTRY.register(14, new ResourceLocation("invisibility"), (new Potion(false, 8356754)).setPotionName("effect.invisibility").setIconIndex(0, 1).setBeneficial()); + REGISTRY.register(15, new ResourceLocation("blindness"), (new Potion(true, 2039587)).setPotionName("effect.blindness").setIconIndex(5, 1).setEffectiveness(0.25D)); + REGISTRY.register(16, new ResourceLocation("night_vision"), (new Potion(false, 2039713)).setPotionName("effect.nightVision").setIconIndex(4, 1).setBeneficial()); + REGISTRY.register(17, new ResourceLocation("hunger"), (new Potion(true, 5797459)).setPotionName("effect.hunger").setIconIndex(1, 1)); + REGISTRY.register(18, new ResourceLocation("weakness"), (new PotionAttackDamage(true, 4738376, -4.0D)).setPotionName("effect.weakness").setIconIndex(5, 0).registerPotionAttributeModifier(SharedMonsterAttributes.ATTACK_DAMAGE, "22653B89-116E-49DC-9B6B-9971489B5BE5", 0.0D, 0)); + REGISTRY.register(19, new ResourceLocation("poison"), (new Potion(true, 5149489)).setPotionName("effect.poison").setIconIndex(6, 0).setEffectiveness(0.25D)); + REGISTRY.register(20, new ResourceLocation("wither"), (new Potion(true, 3484199)).setPotionName("effect.wither").setIconIndex(1, 2).setEffectiveness(0.25D)); + REGISTRY.register(21, new ResourceLocation("health_boost"), (new PotionHealthBoost(false, 16284963)).setPotionName("effect.healthBoost").setIconIndex(7, 2).registerPotionAttributeModifier(SharedMonsterAttributes.MAX_HEALTH, "5D6F0BA2-1186-46AC-B896-C61C5CEE99CC", 4.0D, 0).setBeneficial()); + REGISTRY.register(22, new ResourceLocation("absorption"), (new PotionAbsorption(false, 2445989)).setPotionName("effect.absorption").setIconIndex(2, 2).setBeneficial()); + REGISTRY.register(23, new ResourceLocation("saturation"), (new PotionHealth(false, 16262179)).setPotionName("effect.saturation").setBeneficial()); + REGISTRY.register(24, new ResourceLocation("glowing"), (new Potion(false, 9740385)).setPotionName("effect.glowing").setIconIndex(4, 2)); + REGISTRY.register(25, new ResourceLocation("levitation"), (new Potion(true, 13565951)).setPotionName("effect.levitation").setIconIndex(3, 2)); + REGISTRY.register(26, new ResourceLocation("luck"), (new Potion(false, 3381504)).setPotionName("effect.luck").setIconIndex(5, 2).setBeneficial().registerPotionAttributeModifier(SharedMonsterAttributes.LUCK, "03C3C89D-7037-4B42-869F-B146BCB64D2E", 1.0D, 0)); + REGISTRY.register(27, new ResourceLocation("unluck"), (new Potion(true, 12624973)).setPotionName("effect.unluck").setIconIndex(6, 2).registerPotionAttributeModifier(SharedMonsterAttributes.LUCK, "CC5AF142-2BD2-4215-B636-2605AED11727", -1.0D, 0)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionAbsorption.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionAbsorption.java new file mode 100644 index 0000000..ea56d42 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionAbsorption.java @@ -0,0 +1,24 @@ +package net.minecraft.potion; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; + +public class PotionAbsorption extends Potion +{ + protected PotionAbsorption(boolean isBadEffectIn, int liquidColorIn) + { + super(isBadEffectIn, liquidColorIn); + } + + public void removeAttributesModifiersFromEntity(EntityLivingBase entityLivingBaseIn, AbstractAttributeMap attributeMapIn, int amplifier) + { + entityLivingBaseIn.setAbsorptionAmount(entityLivingBaseIn.getAbsorptionAmount() - (float)(4 * (amplifier + 1))); + super.removeAttributesModifiersFromEntity(entityLivingBaseIn, attributeMapIn, amplifier); + } + + public void applyAttributesModifiersToEntity(EntityLivingBase entityLivingBaseIn, AbstractAttributeMap attributeMapIn, int amplifier) + { + entityLivingBaseIn.setAbsorptionAmount(entityLivingBaseIn.getAbsorptionAmount() + (float)(4 * (amplifier + 1))); + super.applyAttributesModifiersToEntity(entityLivingBaseIn, attributeMapIn, amplifier); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionAttackDamage.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionAttackDamage.java new file mode 100644 index 0000000..2f93f33 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionAttackDamage.java @@ -0,0 +1,19 @@ +package net.minecraft.potion; + +import net.minecraft.entity.ai.attributes.AttributeModifier; + +public class PotionAttackDamage extends Potion +{ + protected final double bonusPerLevel; + + protected PotionAttackDamage(boolean isBadEffectIn, int liquidColorIn, double bonusPerLevelIn) + { + super(isBadEffectIn, liquidColorIn); + this.bonusPerLevel = bonusPerLevelIn; + } + + public double getAttributeModifierAmount(int amplifier, AttributeModifier modifier) + { + return this.bonusPerLevel * (double)(amplifier + 1); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionEffect.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionEffect.java new file mode 100644 index 0000000..0318223 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionEffect.java @@ -0,0 +1,355 @@ +package net.minecraft.potion; + +import com.google.common.collect.ComparisonChain; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PotionEffect implements Comparable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Potion potion; + /** The duration of the potion effect */ + private int duration; + /** The amplifier of the potion effect */ + private int amplifier; + /** Whether the potion is a splash potion */ + private boolean isSplashPotion; + /** Whether the potion effect came from a beacon */ + private boolean isAmbient; + /** True if potion effect duration is at maximum, false otherwise. */ + @SideOnly(Side.CLIENT) + private boolean isPotionDurationMax; + private boolean showParticles; + /** List of ItemStack that can cure the potion effect **/ + private java.util.List curativeItems; + + public PotionEffect(Potion potionIn) + { + this(potionIn, 0, 0); + } + + public PotionEffect(Potion potionIn, int durationIn) + { + this(potionIn, durationIn, 0); + } + + public PotionEffect(Potion potionIn, int durationIn, int amplifierIn) + { + this(potionIn, durationIn, amplifierIn, false, true); + } + + public PotionEffect(Potion potionIn, int durationIn, int amplifierIn, boolean ambientIn, boolean showParticlesIn) + { + this.potion = potionIn; + this.duration = durationIn; + this.amplifier = amplifierIn; + this.isAmbient = ambientIn; + this.showParticles = showParticlesIn; + } + + public PotionEffect(PotionEffect other) + { + this.potion = other.potion; + this.duration = other.duration; + this.amplifier = other.amplifier; + this.isAmbient = other.isAmbient; + this.showParticles = other.showParticles; + this.curativeItems = other.curativeItems == null ? null : new java.util.ArrayList(other.curativeItems); + } + + /** + * merges the input PotionEffect into this one if this.amplifier <= tomerge.amplifier. The duration in the supplied + * potion effect is assumed to be greater. + */ + public void combine(PotionEffect other) + { + if (this.potion != other.potion) + { + LOGGER.warn("This method should only be called for matching effects!"); + } + + if (other.amplifier > this.amplifier) + { + this.amplifier = other.amplifier; + this.duration = other.duration; + } + else if (other.amplifier == this.amplifier && this.duration < other.duration) + { + this.duration = other.duration; + } + else if (!other.isAmbient && this.isAmbient) + { + this.isAmbient = other.isAmbient; + } + + this.showParticles = other.showParticles; + } + + public Potion getPotion() + { + return this.potion; + } + + public int getDuration() + { + return this.duration; + } + + public int getAmplifier() + { + return this.amplifier; + } + + /** + * Gets whether this potion effect originated from a beacon + */ + public boolean getIsAmbient() + { + return this.isAmbient; + } + + /** + * Gets whether this potion effect will show ambient particles or not. + */ + public boolean doesShowParticles() + { + return this.showParticles; + } + + public boolean onUpdate(EntityLivingBase entityIn) + { + if (this.duration > 0) + { + if (this.potion.isReady(this.duration, this.amplifier)) + { + this.performEffect(entityIn); + } + + this.deincrementDuration(); + } + + return this.duration > 0; + } + + private int deincrementDuration() + { + return --this.duration; + } + + public void performEffect(EntityLivingBase entityIn) + { + if (this.duration > 0) + { + this.potion.performEffect(entityIn, this.amplifier); + } + } + + public String getEffectName() + { + return this.potion.getName(); + } + + public String toString() + { + String s; + + if (this.amplifier > 0) + { + s = this.getEffectName() + " x " + (this.amplifier + 1) + ", Duration: " + this.duration; + } + else + { + s = this.getEffectName() + ", Duration: " + this.duration; + } + + if (this.isSplashPotion) + { + s = s + ", Splash: true"; + } + + if (!this.showParticles) + { + s = s + ", Particles: false"; + } + + return s; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof PotionEffect)) + { + return false; + } + else + { + PotionEffect potioneffect = (PotionEffect)p_equals_1_; + return this.duration == potioneffect.duration && this.amplifier == potioneffect.amplifier && this.isSplashPotion == potioneffect.isSplashPotion && this.isAmbient == potioneffect.isAmbient && this.potion.equals(potioneffect.potion); + } + } + + public int hashCode() + { + int i = this.potion.hashCode(); + i = 31 * i + this.duration; + i = 31 * i + this.amplifier; + i = 31 * i + (this.isSplashPotion ? 1 : 0); + i = 31 * i + (this.isAmbient ? 1 : 0); + return i; + } + + /** + * Write a custom potion effect to a potion item's NBT data. + */ + public NBTTagCompound writeCustomPotionEffectToNBT(NBTTagCompound nbt) + { + nbt.setByte("Id", (byte)Potion.getIdFromPotion(this.getPotion())); + nbt.setByte("Amplifier", (byte)this.getAmplifier()); + nbt.setInteger("Duration", this.getDuration()); + nbt.setBoolean("Ambient", this.getIsAmbient()); + nbt.setBoolean("ShowParticles", this.doesShowParticles()); + writeCurativeItems(nbt); + return nbt; + } + + /** + * Read a custom potion effect from a potion item's NBT data. + */ + public static PotionEffect readCustomPotionEffectFromNBT(NBTTagCompound nbt) + { + int i = nbt.getByte("Id") & 0xFF; + Potion potion = Potion.getPotionById(i); + + if (potion == null) + { + return null; + } + else + { + int j = nbt.getByte("Amplifier"); + int k = nbt.getInteger("Duration"); + boolean flag = nbt.getBoolean("Ambient"); + boolean flag1 = true; + + if (nbt.hasKey("ShowParticles", 1)) + { + flag1 = nbt.getBoolean("ShowParticles"); + } + + return readCurativeItems(new PotionEffect(potion, k, j < 0 ? 0 : j, flag, flag1), nbt); + } + } + + /** + * Toggle the isPotionDurationMax field. + */ + @SideOnly(Side.CLIENT) + public void setPotionDurationMax(boolean maxDuration) + { + this.isPotionDurationMax = maxDuration; + } + + public int compareTo(PotionEffect p_compareTo_1_) + { + int i = 32147; + return (this.getDuration() <= 32147 || p_compareTo_1_.getDuration() <= 32147) && (!this.getIsAmbient() || !p_compareTo_1_.getIsAmbient()) ? ComparisonChain.start().compare(Boolean.valueOf(this.getIsAmbient()), Boolean.valueOf(p_compareTo_1_.getIsAmbient())).compare(this.getDuration(), p_compareTo_1_.getDuration()).compare(this.getPotion().getGuiSortColor(this), p_compareTo_1_.getPotion().getGuiSortColor(p_compareTo_1_)).result() : ComparisonChain.start().compare(Boolean.valueOf(this.getIsAmbient()), Boolean.valueOf(p_compareTo_1_.getIsAmbient())).compare(this.getPotion().getGuiSortColor(this), p_compareTo_1_.getPotion().getGuiSortColor(p_compareTo_1_)).result(); + } + + /** + * Get the value of the isPotionDurationMax field. + */ + @SideOnly(Side.CLIENT) + public boolean getIsPotionDurationMax() + { + return this.isPotionDurationMax; + } + + /* ======================================== FORGE START =====================================*/ + /*** + * Returns a list of curative items for the potion effect + * By default, this list is initialized using {@link Potion#getCurativeItems} + * + * @return The list (ItemStack) of curative items for the potion effect + */ + public java.util.List getCurativeItems() + { + if (this.curativeItems == null) //Lazy load this so that we don't create a circular dep on Items. + { + this.curativeItems = getPotion().getCurativeItems(); + } + return this.curativeItems; + } + + /*** + * Checks the given ItemStack to see if it is in the list of curative items for the potion effect + * @param stack The ItemStack being checked against the list of curative items for this PotionEffect + * @return true if the given ItemStack is in the list of curative items for this PotionEffect, false otherwise + */ + public boolean isCurativeItem(net.minecraft.item.ItemStack stack) + { + for (net.minecraft.item.ItemStack curativeItem : this.getCurativeItems()) + { + if (curativeItem.isItemEqual(stack)) + { + return true; + } + } + + return false; + } + + /*** + * Sets the list of curative items for this potion effect, overwriting any already present + * @param curativeItems The list of ItemStacks being set to the potion effect + */ + public void setCurativeItems(java.util.List curativeItems) + { + this.curativeItems = curativeItems; + } + + /*** + * Adds the given stack to the list of curative items for this PotionEffect + * @param stack The ItemStack being added to the curative item list + */ + public void addCurativeItem(net.minecraft.item.ItemStack stack) + { + if (!this.isCurativeItem(stack)) + { + this.getCurativeItems().add(stack); + } + } + + private void writeCurativeItems(NBTTagCompound nbt) + { + net.minecraft.nbt.NBTTagList list = new net.minecraft.nbt.NBTTagList(); + for (net.minecraft.item.ItemStack stack : getCurativeItems()) + { + list.appendTag(stack.writeToNBT(new NBTTagCompound())); + } + nbt.setTag("CurativeItems", list); + } + + private static PotionEffect readCurativeItems(PotionEffect effect, NBTTagCompound nbt) + { + if (nbt.hasKey("CurativeItems", net.minecraftforge.common.util.Constants.NBT.TAG_LIST)) + { + java.util.List items = new java.util.ArrayList(); + net.minecraft.nbt.NBTTagList list = nbt.getTagList("CurativeItems", net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < list.tagCount(); i++) + { + items.add(new net.minecraft.item.ItemStack(list.getCompoundTagAt(i))); + } + effect.setCurativeItems(items); + } + + return effect; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHealth.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHealth.java new file mode 100644 index 0000000..95897b8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHealth.java @@ -0,0 +1,25 @@ +package net.minecraft.potion; + +public class PotionHealth extends Potion +{ + public PotionHealth(boolean isBadEffectIn, int liquidColorIn) + { + super(isBadEffectIn, liquidColorIn); + } + + /** + * Returns true if the potion has an instant effect instead of a continuous one (eg Harming) + */ + public boolean isInstant() + { + return true; + } + + /** + * checks if Potion effect is ready to be applied this tick. + */ + public boolean isReady(int duration, int amplifier) + { + return duration >= 1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHealthBoost.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHealthBoost.java new file mode 100644 index 0000000..16bb00f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHealthBoost.java @@ -0,0 +1,22 @@ +package net.minecraft.potion; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.ai.attributes.AbstractAttributeMap; + +public class PotionHealthBoost extends Potion +{ + public PotionHealthBoost(boolean isBadEffectIn, int liquidColorIn) + { + super(isBadEffectIn, liquidColorIn); + } + + public void removeAttributesModifiersFromEntity(EntityLivingBase entityLivingBaseIn, AbstractAttributeMap attributeMapIn, int amplifier) + { + super.removeAttributesModifiersFromEntity(entityLivingBaseIn, attributeMapIn, amplifier); + + if (entityLivingBaseIn.getHealth() > entityLivingBaseIn.getMaxHealth()) + { + entityLivingBaseIn.setHealth(entityLivingBaseIn.getMaxHealth()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHelper.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHelper.java new file mode 100644 index 0000000..33941a9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionHelper.java @@ -0,0 +1,243 @@ +package net.minecraft.potion; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.init.Items; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.Item; +import net.minecraft.item.ItemFishFood; +import net.minecraft.item.ItemPotion; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; + +public class PotionHelper +{ + private static final List> POTION_TYPE_CONVERSIONS = Lists.>newArrayList(); + private static final List> POTION_ITEM_CONVERSIONS = Lists.>newArrayList(); + private static final List POTION_ITEMS = Lists.newArrayList(); + private static final Predicate IS_POTION_ITEM = new Predicate() + { + public boolean apply(ItemStack p_apply_1_) + { + for (Ingredient ingredient : PotionHelper.POTION_ITEMS) + { + if (ingredient.apply(p_apply_1_)) + { + return true; + } + } + + return false; + } + }; + + public static boolean isReagent(ItemStack stack) + { + return isItemConversionReagent(stack) || isTypeConversionReagent(stack); + } + + protected static boolean isItemConversionReagent(ItemStack stack) + { + int i = 0; + + for (int j = POTION_ITEM_CONVERSIONS.size(); i < j; ++i) + { + if ((POTION_ITEM_CONVERSIONS.get(i)).reagent.apply(stack)) + { + return true; + } + } + + return false; + } + + protected static boolean isTypeConversionReagent(ItemStack stack) + { + int i = 0; + + for (int j = POTION_TYPE_CONVERSIONS.size(); i < j; ++i) + { + if ((POTION_TYPE_CONVERSIONS.get(i)).reagent.apply(stack)) + { + return true; + } + } + + return false; + } + + public static boolean hasConversions(ItemStack input, ItemStack reagent) + { + if (!IS_POTION_ITEM.apply(input)) + { + return false; + } + else + { + return hasItemConversions(input, reagent) || hasTypeConversions(input, reagent); + } + } + + protected static boolean hasItemConversions(ItemStack input, ItemStack reagent) + { + Item item = input.getItem(); + int i = 0; + + for (int j = POTION_ITEM_CONVERSIONS.size(); i < j; ++i) + { + PotionHelper.MixPredicate mixpredicate = (PotionHelper.MixPredicate)POTION_ITEM_CONVERSIONS.get(i); + + if (mixpredicate.input == item && mixpredicate.reagent.apply(reagent)) + { + return true; + } + } + + return false; + } + + protected static boolean hasTypeConversions(ItemStack input, ItemStack reagent) + { + PotionType potiontype = PotionUtils.getPotionFromItem(input); + int i = 0; + + for (int j = POTION_TYPE_CONVERSIONS.size(); i < j; ++i) + { + PotionHelper.MixPredicate mixpredicate = (PotionHelper.MixPredicate)POTION_TYPE_CONVERSIONS.get(i); + + if (mixpredicate.input == potiontype && mixpredicate.reagent.apply(reagent)) + { + return true; + } + } + + return false; + } + + public static ItemStack doReaction(ItemStack reagent, ItemStack potionIn) + { + if (!potionIn.isEmpty()) + { + PotionType potiontype = PotionUtils.getPotionFromItem(potionIn); + Item item = potionIn.getItem(); + int i = 0; + + for (int j = POTION_ITEM_CONVERSIONS.size(); i < j; ++i) + { + PotionHelper.MixPredicate mixpredicate = (PotionHelper.MixPredicate)POTION_ITEM_CONVERSIONS.get(i); + + if (mixpredicate.input == item && mixpredicate.reagent.apply(reagent)) + { + return PotionUtils.addPotionToItemStack(new ItemStack((Item)mixpredicate.output), potiontype); + } + } + + i = 0; + + for (int k = POTION_TYPE_CONVERSIONS.size(); i < k; ++i) + { + PotionHelper.MixPredicate mixpredicate1 = (PotionHelper.MixPredicate)POTION_TYPE_CONVERSIONS.get(i); + + if (mixpredicate1.input == potiontype && mixpredicate1.reagent.apply(reagent)) + { + return PotionUtils.addPotionToItemStack(new ItemStack(item), (PotionType)mixpredicate1.output); + } + } + } + + return potionIn; + } + + public static void init() + { + addContainer(Items.POTIONITEM); + addContainer(Items.SPLASH_POTION); + addContainer(Items.LINGERING_POTION); + addContainerRecipe(Items.POTIONITEM, Items.GUNPOWDER, Items.SPLASH_POTION); + addContainerRecipe(Items.SPLASH_POTION, Items.DRAGON_BREATH, Items.LINGERING_POTION); + addMix(PotionTypes.WATER, Items.SPECKLED_MELON, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.GHAST_TEAR, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.RABBIT_FOOT, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.BLAZE_POWDER, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.SPIDER_EYE, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.SUGAR, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.MAGMA_CREAM, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.GLOWSTONE_DUST, PotionTypes.THICK); + addMix(PotionTypes.WATER, Items.REDSTONE, PotionTypes.MUNDANE); + addMix(PotionTypes.WATER, Items.NETHER_WART, PotionTypes.AWKWARD); + addMix(PotionTypes.AWKWARD, Items.GOLDEN_CARROT, PotionTypes.NIGHT_VISION); + addMix(PotionTypes.NIGHT_VISION, Items.REDSTONE, PotionTypes.LONG_NIGHT_VISION); + addMix(PotionTypes.NIGHT_VISION, Items.FERMENTED_SPIDER_EYE, PotionTypes.INVISIBILITY); + addMix(PotionTypes.LONG_NIGHT_VISION, Items.FERMENTED_SPIDER_EYE, PotionTypes.LONG_INVISIBILITY); + addMix(PotionTypes.INVISIBILITY, Items.REDSTONE, PotionTypes.LONG_INVISIBILITY); + addMix(PotionTypes.AWKWARD, Items.MAGMA_CREAM, PotionTypes.FIRE_RESISTANCE); + addMix(PotionTypes.FIRE_RESISTANCE, Items.REDSTONE, PotionTypes.LONG_FIRE_RESISTANCE); + addMix(PotionTypes.AWKWARD, Items.RABBIT_FOOT, PotionTypes.LEAPING); + addMix(PotionTypes.LEAPING, Items.REDSTONE, PotionTypes.LONG_LEAPING); + addMix(PotionTypes.LEAPING, Items.GLOWSTONE_DUST, PotionTypes.STRONG_LEAPING); + addMix(PotionTypes.LEAPING, Items.FERMENTED_SPIDER_EYE, PotionTypes.SLOWNESS); + addMix(PotionTypes.LONG_LEAPING, Items.FERMENTED_SPIDER_EYE, PotionTypes.LONG_SLOWNESS); + addMix(PotionTypes.SLOWNESS, Items.REDSTONE, PotionTypes.LONG_SLOWNESS); + addMix(PotionTypes.SWIFTNESS, Items.FERMENTED_SPIDER_EYE, PotionTypes.SLOWNESS); + addMix(PotionTypes.LONG_SWIFTNESS, Items.FERMENTED_SPIDER_EYE, PotionTypes.LONG_SLOWNESS); + addMix(PotionTypes.AWKWARD, Items.SUGAR, PotionTypes.SWIFTNESS); + addMix(PotionTypes.SWIFTNESS, Items.REDSTONE, PotionTypes.LONG_SWIFTNESS); + addMix(PotionTypes.SWIFTNESS, Items.GLOWSTONE_DUST, PotionTypes.STRONG_SWIFTNESS); + addMix(PotionTypes.AWKWARD, Ingredient.fromStacks(new ItemStack(Items.FISH, 1, ItemFishFood.FishType.PUFFERFISH.getMetadata())), PotionTypes.WATER_BREATHING); + addMix(PotionTypes.WATER_BREATHING, Items.REDSTONE, PotionTypes.LONG_WATER_BREATHING); + addMix(PotionTypes.AWKWARD, Items.SPECKLED_MELON, PotionTypes.HEALING); + addMix(PotionTypes.HEALING, Items.GLOWSTONE_DUST, PotionTypes.STRONG_HEALING); + addMix(PotionTypes.HEALING, Items.FERMENTED_SPIDER_EYE, PotionTypes.HARMING); + addMix(PotionTypes.STRONG_HEALING, Items.FERMENTED_SPIDER_EYE, PotionTypes.STRONG_HARMING); + addMix(PotionTypes.HARMING, Items.GLOWSTONE_DUST, PotionTypes.STRONG_HARMING); + addMix(PotionTypes.POISON, Items.FERMENTED_SPIDER_EYE, PotionTypes.HARMING); + addMix(PotionTypes.LONG_POISON, Items.FERMENTED_SPIDER_EYE, PotionTypes.HARMING); + addMix(PotionTypes.STRONG_POISON, Items.FERMENTED_SPIDER_EYE, PotionTypes.STRONG_HARMING); + addMix(PotionTypes.AWKWARD, Items.SPIDER_EYE, PotionTypes.POISON); + addMix(PotionTypes.POISON, Items.REDSTONE, PotionTypes.LONG_POISON); + addMix(PotionTypes.POISON, Items.GLOWSTONE_DUST, PotionTypes.STRONG_POISON); + addMix(PotionTypes.AWKWARD, Items.GHAST_TEAR, PotionTypes.REGENERATION); + addMix(PotionTypes.REGENERATION, Items.REDSTONE, PotionTypes.LONG_REGENERATION); + addMix(PotionTypes.REGENERATION, Items.GLOWSTONE_DUST, PotionTypes.STRONG_REGENERATION); + addMix(PotionTypes.AWKWARD, Items.BLAZE_POWDER, PotionTypes.STRENGTH); + addMix(PotionTypes.STRENGTH, Items.REDSTONE, PotionTypes.LONG_STRENGTH); + addMix(PotionTypes.STRENGTH, Items.GLOWSTONE_DUST, PotionTypes.STRONG_STRENGTH); + addMix(PotionTypes.WATER, Items.FERMENTED_SPIDER_EYE, PotionTypes.WEAKNESS); + addMix(PotionTypes.WEAKNESS, Items.REDSTONE, PotionTypes.LONG_WEAKNESS); + } + + public static void addContainerRecipe(ItemPotion p_193355_0_, Item p_193355_1_, ItemPotion p_193355_2_) + { + POTION_ITEM_CONVERSIONS.add(new PotionHelper.MixPredicate(p_193355_0_, Ingredient.fromItems(p_193355_1_), p_193355_2_)); + } + + public static void addContainer(ItemPotion p_193354_0_) + { + POTION_ITEMS.add(Ingredient.fromItems(p_193354_0_)); + } + + public static void addMix(PotionType p_193357_0_, Item p_193357_1_, PotionType p_193357_2_) + { + addMix(p_193357_0_, Ingredient.fromItems(p_193357_1_), p_193357_2_); + } + + public static void addMix(PotionType p_193356_0_, Ingredient p_193356_1_, PotionType p_193356_2_) + { + POTION_TYPE_CONVERSIONS.add(new PotionHelper.MixPredicate(p_193356_0_, p_193356_1_, p_193356_2_)); + } + + public static class MixPredicate + { + final T input; + final Ingredient reagent; + final T output; + + public MixPredicate(T p_i47570_1_, Ingredient p_i47570_2_, T p_i47570_3_) + { + this.input = p_i47570_1_; + this.reagent = p_i47570_2_; + this.output = p_i47570_3_; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionType.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionType.java new file mode 100644 index 0000000..073cf20 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionType.java @@ -0,0 +1,117 @@ +package net.minecraft.potion; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.UnmodifiableIterator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.init.MobEffects; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.registry.RegistryNamespacedDefaultedByKey; + +public class PotionType extends net.minecraftforge.registries.IForgeRegistryEntry.Impl +{ + @Deprecated // unused + private static final ResourceLocation EMPTY = new ResourceLocation("empty"); + public static final RegistryNamespacedDefaultedByKey REGISTRY = net.minecraftforge.registries.GameData.getWrapperDefaulted(PotionType.class); + private static int nextPotionTypeId; + /** The unlocalized name of this PotionType. If null, the registry name is used. */ + private final String baseName; + private final ImmutableList effects; + + @Nullable + public static PotionType getPotionTypeForName(String p_185168_0_) + { + return REGISTRY.getObject(new ResourceLocation(p_185168_0_)); + } + + public PotionType(PotionEffect... p_i46739_1_) + { + this((String)null, p_i46739_1_); + } + + public PotionType(@Nullable String p_i46740_1_, PotionEffect... p_i46740_2_) + { + this.baseName = p_i46740_1_; + this.effects = ImmutableList.copyOf(p_i46740_2_); + } + + /** + * Gets the name of this PotionType with a prefix (such as "Splash" or "Lingering") prepended + */ + public String getNamePrefixed(String p_185174_1_) + { + return this.baseName == null ? p_185174_1_ + ((ResourceLocation)REGISTRY.getNameForObject(this)).getResourcePath() : p_185174_1_ + this.baseName; + } + + public List getEffects() + { + return this.effects; + } + + public static void registerPotionTypes() + { + registerPotionType("empty", new PotionType(new PotionEffect[0])); + registerPotionType("water", new PotionType(new PotionEffect[0])); + registerPotionType("mundane", new PotionType(new PotionEffect[0])); + registerPotionType("thick", new PotionType(new PotionEffect[0])); + registerPotionType("awkward", new PotionType(new PotionEffect[0])); + registerPotionType("night_vision", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.NIGHT_VISION, 3600)})); + registerPotionType("long_night_vision", new PotionType("night_vision", new PotionEffect[] {new PotionEffect(MobEffects.NIGHT_VISION, 9600)})); + registerPotionType("invisibility", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.INVISIBILITY, 3600)})); + registerPotionType("long_invisibility", new PotionType("invisibility", new PotionEffect[] {new PotionEffect(MobEffects.INVISIBILITY, 9600)})); + registerPotionType("leaping", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.JUMP_BOOST, 3600)})); + registerPotionType("long_leaping", new PotionType("leaping", new PotionEffect[] {new PotionEffect(MobEffects.JUMP_BOOST, 9600)})); + registerPotionType("strong_leaping", new PotionType("leaping", new PotionEffect[] {new PotionEffect(MobEffects.JUMP_BOOST, 1800, 1)})); + registerPotionType("fire_resistance", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.FIRE_RESISTANCE, 3600)})); + registerPotionType("long_fire_resistance", new PotionType("fire_resistance", new PotionEffect[] {new PotionEffect(MobEffects.FIRE_RESISTANCE, 9600)})); + registerPotionType("swiftness", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.SPEED, 3600)})); + registerPotionType("long_swiftness", new PotionType("swiftness", new PotionEffect[] {new PotionEffect(MobEffects.SPEED, 9600)})); + registerPotionType("strong_swiftness", new PotionType("swiftness", new PotionEffect[] {new PotionEffect(MobEffects.SPEED, 1800, 1)})); + registerPotionType("slowness", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.SLOWNESS, 1800)})); + registerPotionType("long_slowness", new PotionType("slowness", new PotionEffect[] {new PotionEffect(MobEffects.SLOWNESS, 4800)})); + registerPotionType("water_breathing", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.WATER_BREATHING, 3600)})); + registerPotionType("long_water_breathing", new PotionType("water_breathing", new PotionEffect[] {new PotionEffect(MobEffects.WATER_BREATHING, 9600)})); + registerPotionType("healing", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.INSTANT_HEALTH, 1)})); + registerPotionType("strong_healing", new PotionType("healing", new PotionEffect[] {new PotionEffect(MobEffects.INSTANT_HEALTH, 1, 1)})); + registerPotionType("harming", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.INSTANT_DAMAGE, 1)})); + registerPotionType("strong_harming", new PotionType("harming", new PotionEffect[] {new PotionEffect(MobEffects.INSTANT_DAMAGE, 1, 1)})); + registerPotionType("poison", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.POISON, 900)})); + registerPotionType("long_poison", new PotionType("poison", new PotionEffect[] {new PotionEffect(MobEffects.POISON, 1800)})); + registerPotionType("strong_poison", new PotionType("poison", new PotionEffect[] {new PotionEffect(MobEffects.POISON, 432, 1)})); + registerPotionType("regeneration", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.REGENERATION, 900)})); + registerPotionType("long_regeneration", new PotionType("regeneration", new PotionEffect[] {new PotionEffect(MobEffects.REGENERATION, 1800)})); + registerPotionType("strong_regeneration", new PotionType("regeneration", new PotionEffect[] {new PotionEffect(MobEffects.REGENERATION, 450, 1)})); + registerPotionType("strength", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.STRENGTH, 3600)})); + registerPotionType("long_strength", new PotionType("strength", new PotionEffect[] {new PotionEffect(MobEffects.STRENGTH, 9600)})); + registerPotionType("strong_strength", new PotionType("strength", new PotionEffect[] {new PotionEffect(MobEffects.STRENGTH, 1800, 1)})); + registerPotionType("weakness", new PotionType(new PotionEffect[] {new PotionEffect(MobEffects.WEAKNESS, 1800)})); + registerPotionType("long_weakness", new PotionType("weakness", new PotionEffect[] {new PotionEffect(MobEffects.WEAKNESS, 4800)})); + registerPotionType("luck", new PotionType("luck", new PotionEffect[] {new PotionEffect(MobEffects.LUCK, 6000)})); + REGISTRY.validateKey(); + } + + protected static void registerPotionType(String p_185173_0_, PotionType p_185173_1_) + { + REGISTRY.register(nextPotionTypeId++, new ResourceLocation(p_185173_0_), p_185173_1_); + } + + public boolean hasInstantEffect() + { + if (!this.effects.isEmpty()) + { + UnmodifiableIterator unmodifiableiterator = this.effects.iterator(); + + while (unmodifiableiterator.hasNext()) + { + PotionEffect potioneffect = (PotionEffect)unmodifiableiterator.next(); + + if (potioneffect.getPotion().isInstant()) + { + return true; + } + } + } + + return false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/PotionUtils.java b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionUtils.java new file mode 100644 index 0000000..912e6fb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/PotionUtils.java @@ -0,0 +1,288 @@ +package net.minecraft.potion; + +import com.google.common.base.MoreObjects; +import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.ai.attributes.IAttribute; +import net.minecraft.init.PotionTypes; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Tuple; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.translation.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PotionUtils +{ + /** + * Creates a List of PotionEffect from data on the passed ItemStack's NBTTagCompound. + */ + public static List getEffectsFromStack(ItemStack stack) + { + return getEffectsFromTag(stack.getTagCompound()); + } + + public static List mergeEffects(PotionType potionIn, Collection effects) + { + List list = Lists.newArrayList(); + list.addAll(potionIn.getEffects()); + list.addAll(effects); + return list; + } + + /** + * Creates a list of PotionEffect from data on a NBTTagCompound. + */ + public static List getEffectsFromTag(@Nullable NBTTagCompound tag) + { + List list = Lists.newArrayList(); + list.addAll(getPotionTypeFromNBT(tag).getEffects()); + addCustomPotionEffectToList(tag, list); + return list; + } + + public static List getFullEffectsFromItem(ItemStack itemIn) + { + return getFullEffectsFromTag(itemIn.getTagCompound()); + } + + public static List getFullEffectsFromTag(@Nullable NBTTagCompound tag) + { + List list = Lists.newArrayList(); + addCustomPotionEffectToList(tag, list); + return list; + } + + public static void addCustomPotionEffectToList(@Nullable NBTTagCompound tag, List effectList) + { + if (tag != null && tag.hasKey("CustomPotionEffects", 9)) + { + NBTTagList nbttaglist = tag.getTagList("CustomPotionEffects", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + PotionEffect potioneffect = PotionEffect.readCustomPotionEffectFromNBT(nbttagcompound); + + if (potioneffect != null) + { + effectList.add(potioneffect); + } + } + } + } + + public static int getColor(ItemStack p_190932_0_) + { + NBTTagCompound nbttagcompound = p_190932_0_.getTagCompound(); + + if (nbttagcompound != null && nbttagcompound.hasKey("CustomPotionColor", 99)) + { + return nbttagcompound.getInteger("CustomPotionColor"); + } + else + { + return getPotionFromItem(p_190932_0_) == PotionTypes.EMPTY ? 16253176 : getPotionColorFromEffectList(getEffectsFromStack(p_190932_0_)); + } + } + + public static int getPotionColor(PotionType potionIn) + { + return potionIn == PotionTypes.EMPTY ? 16253176 : getPotionColorFromEffectList(potionIn.getEffects()); + } + + public static int getPotionColorFromEffectList(Collection effects) + { + int i = 3694022; + + if (effects.isEmpty()) + { + return 3694022; + } + else + { + float f = 0.0F; + float f1 = 0.0F; + float f2 = 0.0F; + int j = 0; + + for (PotionEffect potioneffect : effects) + { + if (potioneffect.doesShowParticles()) + { + int k = potioneffect.getPotion().getLiquidColor(); + int l = potioneffect.getAmplifier() + 1; + f += (float)(l * (k >> 16 & 255)) / 255.0F; + f1 += (float)(l * (k >> 8 & 255)) / 255.0F; + f2 += (float)(l * (k >> 0 & 255)) / 255.0F; + j += l; + } + } + + if (j == 0) + { + return 0; + } + else + { + f = f / (float)j * 255.0F; + f1 = f1 / (float)j * 255.0F; + f2 = f2 / (float)j * 255.0F; + return (int)f << 16 | (int)f1 << 8 | (int)f2; + } + } + } + + public static PotionType getPotionFromItem(ItemStack itemIn) + { + return getPotionTypeFromNBT(itemIn.getTagCompound()); + } + + /** + * If no correct potion is found, returns the default one : PotionTypes.water + */ + public static PotionType getPotionTypeFromNBT(@Nullable NBTTagCompound tag) + { + return tag == null ? PotionTypes.EMPTY : PotionType.getPotionTypeForName(tag.getString("Potion")); + } + + public static ItemStack addPotionToItemStack(ItemStack itemIn, PotionType potionIn) + { + ResourceLocation resourcelocation = PotionType.REGISTRY.getNameForObject(potionIn); + + if (potionIn == PotionTypes.EMPTY) + { + if (itemIn.hasTagCompound()) + { + NBTTagCompound nbttagcompound = itemIn.getTagCompound(); + nbttagcompound.removeTag("Potion"); + + if (nbttagcompound.hasNoTags()) + { + itemIn.setTagCompound((NBTTagCompound)null); + } + } + } + else + { + NBTTagCompound nbttagcompound1 = itemIn.hasTagCompound() ? itemIn.getTagCompound() : new NBTTagCompound(); + nbttagcompound1.setString("Potion", resourcelocation.toString()); + itemIn.setTagCompound(nbttagcompound1); + } + + return itemIn; + } + + public static ItemStack appendEffects(ItemStack itemIn, Collection effects) + { + if (effects.isEmpty()) + { + return itemIn; + } + else + { + NBTTagCompound nbttagcompound = (NBTTagCompound)MoreObjects.firstNonNull(itemIn.getTagCompound(), new NBTTagCompound()); + NBTTagList nbttaglist = nbttagcompound.getTagList("CustomPotionEffects", 9); + + for (PotionEffect potioneffect : effects) + { + nbttaglist.appendTag(potioneffect.writeCustomPotionEffectToNBT(new NBTTagCompound())); + } + + nbttagcompound.setTag("CustomPotionEffects", nbttaglist); + itemIn.setTagCompound(nbttagcompound); + return itemIn; + } + } + + @SideOnly(Side.CLIENT) + public static void addPotionTooltip(ItemStack itemIn, List lores, float durationFactor) + { + List list = getEffectsFromStack(itemIn); + List> list1 = Lists.>newArrayList(); + + if (list.isEmpty()) + { + String s = I18n.translateToLocal("effect.none").trim(); + lores.add(TextFormatting.GRAY + s); + } + else + { + for (PotionEffect potioneffect : list) + { + String s1 = I18n.translateToLocal(potioneffect.getEffectName()).trim(); + Potion potion = potioneffect.getPotion(); + Map map = potion.getAttributeModifierMap(); + + if (!map.isEmpty()) + { + for (Entry entry : map.entrySet()) + { + AttributeModifier attributemodifier = entry.getValue(); + AttributeModifier attributemodifier1 = new AttributeModifier(attributemodifier.getName(), potion.getAttributeModifierAmount(potioneffect.getAmplifier(), attributemodifier), attributemodifier.getOperation()); + list1.add(new Tuple(((IAttribute)entry.getKey()).getName(), attributemodifier1)); + } + } + + if (potioneffect.getAmplifier() > 0) + { + s1 = s1 + " " + I18n.translateToLocal("potion.potency." + potioneffect.getAmplifier()).trim(); + } + + if (potioneffect.getDuration() > 20) + { + s1 = s1 + " (" + Potion.getPotionDurationString(potioneffect, durationFactor) + ")"; + } + + if (potion.isBadEffect()) + { + lores.add(TextFormatting.RED + s1); + } + else + { + lores.add(TextFormatting.BLUE + s1); + } + } + } + + if (!list1.isEmpty()) + { + lores.add(""); + lores.add(TextFormatting.DARK_PURPLE + I18n.translateToLocal("potion.whenDrank")); + + for (Tuple tuple : list1) + { + AttributeModifier attributemodifier2 = tuple.getSecond(); + double d0 = attributemodifier2.getAmount(); + double d1; + + if (attributemodifier2.getOperation() != 1 && attributemodifier2.getOperation() != 2) + { + d1 = attributemodifier2.getAmount(); + } + else + { + d1 = attributemodifier2.getAmount() * 100.0D; + } + + if (d0 > 0.0D) + { + lores.add(TextFormatting.BLUE + I18n.translateToLocalFormatted("attribute.modifier.plus." + attributemodifier2.getOperation(), ItemStack.DECIMALFORMAT.format(d1), I18n.translateToLocal("attribute.name." + (String)tuple.getFirst()))); + } + else if (d0 < 0.0D) + { + d1 = d1 * -1.0D; + lores.add(TextFormatting.RED + I18n.translateToLocalFormatted("attribute.modifier.take." + attributemodifier2.getOperation(), ItemStack.DECIMALFORMAT.format(d1), I18n.translateToLocal("attribute.name." + (String)tuple.getFirst()))); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/potion/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/potion/package-info.java new file mode 100644 index 0000000..f41e16b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/potion/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.potion; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/profiler/ISnooperInfo.java b/build/tmp/recompileMc/sources/net/minecraft/profiler/ISnooperInfo.java new file mode 100644 index 0000000..7ac0ce6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/profiler/ISnooperInfo.java @@ -0,0 +1,13 @@ +package net.minecraft.profiler; + +public interface ISnooperInfo +{ + void addServerStatsToSnooper(Snooper playerSnooper); + + void addServerTypeToSnooper(Snooper playerSnooper); + + /** + * Returns whether snooping is enabled or not. + */ + boolean isSnooperEnabled(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/profiler/Profiler.java b/build/tmp/recompileMc/sources/net/minecraft/profiler/Profiler.java new file mode 100644 index 0000000..5619c4b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/profiler/Profiler.java @@ -0,0 +1,231 @@ +package net.minecraft.profiler; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Profiler +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** List of parent sections */ + private final List sectionList = Lists.newArrayList(); + /** List of timestamps (System.nanoTime) */ + private final List timestampList = Lists.newArrayList(); + /** Flag profiling enabled */ + public boolean profilingEnabled; + /** Current profiling section */ + private String profilingSection = ""; + /** Profiling map */ + private final Map profilingMap = Maps.newHashMap(); + + /** + * Clear profiling. + */ + public void clearProfiling() + { + this.profilingMap.clear(); + this.profilingSection = ""; + this.sectionList.clear(); + } + + /** + * Start section + */ + public void startSection(String name) + { + if (this.profilingEnabled) + { + if (!this.profilingSection.isEmpty()) + { + this.profilingSection = this.profilingSection + "."; + } + + this.profilingSection = this.profilingSection + name; + this.sectionList.add(this.profilingSection); + this.timestampList.add(Long.valueOf(System.nanoTime())); + } + } + + public void func_194340_a(Supplier p_194340_1_) + { + if (this.profilingEnabled) + { + this.startSection(p_194340_1_.get()); + } + } + + /** + * End section + */ + public void endSection() + { + if (this.profilingEnabled) + { + long i = System.nanoTime(); + long j = ((Long)this.timestampList.remove(this.timestampList.size() - 1)).longValue(); + this.sectionList.remove(this.sectionList.size() - 1); + long k = i - j; + + if (this.profilingMap.containsKey(this.profilingSection)) + { + this.profilingMap.put(this.profilingSection, Long.valueOf(((Long)this.profilingMap.get(this.profilingSection)).longValue() + k)); + } + else + { + this.profilingMap.put(this.profilingSection, Long.valueOf(k)); + } + + if (k > 100000000L) + { + LOGGER.warn("Something's taking too long! '{}' took aprox {} ms", this.profilingSection, Double.valueOf((double)k / 1000000.0D)); + } + + this.profilingSection = this.sectionList.isEmpty() ? "" : (String)this.sectionList.get(this.sectionList.size() - 1); + } + } + + /** + * Get profiling data + */ + public List getProfilingData(String profilerName) + { + if (!this.profilingEnabled) + { + return Collections.emptyList(); + } + else + { + long i = this.profilingMap.containsKey("root") ? ((Long)this.profilingMap.get("root")).longValue() : 0L; + long j = this.profilingMap.containsKey(profilerName) ? ((Long)this.profilingMap.get(profilerName)).longValue() : -1L; + List list = Lists.newArrayList(); + + if (!profilerName.isEmpty()) + { + profilerName = profilerName + "."; + } + + long k = 0L; + + for (String s : this.profilingMap.keySet()) + { + if (s.length() > profilerName.length() && s.startsWith(profilerName) && s.indexOf(".", profilerName.length() + 1) < 0) + { + k += ((Long)this.profilingMap.get(s)).longValue(); + } + } + + float f = (float)k; + + if (k < j) + { + k = j; + } + + if (i < k) + { + i = k; + } + + for (String s1 : this.profilingMap.keySet()) + { + if (s1.length() > profilerName.length() && s1.startsWith(profilerName) && s1.indexOf(".", profilerName.length() + 1) < 0) + { + long l = ((Long)this.profilingMap.get(s1)).longValue(); + double d0 = (double)l * 100.0D / (double)k; + double d1 = (double)l * 100.0D / (double)i; + String s2 = s1.substring(profilerName.length()); + list.add(new Profiler.Result(s2, d0, d1)); + } + } + + for (String s3 : this.profilingMap.keySet()) + { + this.profilingMap.put(s3, Long.valueOf(((Long)this.profilingMap.get(s3)).longValue() * 999L / 1000L)); + } + + if ((float)k > f) + { + list.add(new Profiler.Result("unspecified", (double)((float)k - f) * 100.0D / (double)k, (double)((float)k - f) * 100.0D / (double)i)); + } + + Collections.sort(list); + list.add(0, new Profiler.Result(profilerName, 100.0D, (double)k * 100.0D / (double)i)); + return list; + } + } + + /** + * End current section and start a new section + */ + public void endStartSection(String name) + { + this.endSection(); + this.startSection(name); + } + + public String getNameOfLastSection() + { + return this.sectionList.isEmpty() ? "[UNKNOWN]" : (String)this.sectionList.get(this.sectionList.size() - 1); + } + + @SideOnly(Side.CLIENT) + public void func_194339_b(Supplier p_194339_1_) + { + this.endSection(); + this.func_194340_a(p_194339_1_); + } + + public static final class Result implements Comparable + { + public double usePercentage; + public double totalUsePercentage; + public String profilerName; + + public Result(String profilerName, double usePercentage, double totalUsePercentage) + { + this.profilerName = profilerName; + this.usePercentage = usePercentage; + this.totalUsePercentage = totalUsePercentage; + } + + public int compareTo(Profiler.Result p_compareTo_1_) + { + if (p_compareTo_1_.usePercentage < this.usePercentage) + { + return -1; + } + else + { + return p_compareTo_1_.usePercentage > this.usePercentage ? 1 : p_compareTo_1_.profilerName.compareTo(this.profilerName); + } + } + + /** + * Return a color to display the profiler, generated from the hash code of the profiler's name + */ + @SideOnly(Side.CLIENT) + public int getColor() + { + return (this.profilerName.hashCode() & 11184810) + 4473924; + } + } + + /** + * Forge: Fix for MC-117087, World.updateEntities is wasting time calling Class.getSimpleName() when the profiler is not active + */ + @Deprecated // TODO: remove (1.13) + public void startSection(Class profiledClass) + { + if (this.profilingEnabled) + { + startSection(profiledClass.getSimpleName()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/profiler/Snooper.java b/build/tmp/recompileMc/sources/net/minecraft/profiler/Snooper.java new file mode 100644 index 0000000..cb78d0e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/profiler/Snooper.java @@ -0,0 +1,194 @@ +package net.minecraft.profiler; + +import com.google.common.collect.Maps; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; +import java.util.Map.Entry; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.HttpUtil; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Snooper +{ + /** The snooper Map of stats */ + private final Map snooperStats = Maps.newHashMap(); + /** The client Map of stats */ + private final Map clientStats = Maps.newHashMap(); + private final String uniqueID = UUID.randomUUID().toString(); + /** URL of the server to send the report to */ + private final URL serverUrl; + private final ISnooperInfo playerStatsCollector; + /** set to fire the snooperThread every 15 mins */ + private final Timer threadTrigger = new Timer("Snooper Timer", true); + private final Object syncLock = new Object(); + private final long minecraftStartTimeMilis; + private boolean isRunning; + /** incremented on every getSelfCounterFor */ + private int selfCounter; + + public Snooper(String side, ISnooperInfo playerStatCollector, long startTime) + { + try + { + this.serverUrl = new URL("http://snoop.minecraft.net/" + side + "?version=" + 2); + } + catch (MalformedURLException var6) + { + throw new IllegalArgumentException(); + } + + this.playerStatsCollector = playerStatCollector; + this.minecraftStartTimeMilis = startTime; + } + + /** + * Note issuing start multiple times is not an error. + */ + public void startSnooper() + { + if (!this.isRunning) + { + this.isRunning = true; + this.addOSData(); + this.threadTrigger.schedule(new TimerTask() + { + public void run() + { + if (Snooper.this.playerStatsCollector.isSnooperEnabled()) + { + Map map; + + synchronized (Snooper.this.syncLock) + { + map = Maps.newHashMap(Snooper.this.clientStats); + + if (Snooper.this.selfCounter == 0) + { + map.putAll(Snooper.this.snooperStats); + } + + map.put("snooper_count", Integer.valueOf(Snooper.this.selfCounter++)); + map.put("snooper_token", Snooper.this.uniqueID); + } + + MinecraftServer minecraftserver = Snooper.this.playerStatsCollector instanceof MinecraftServer ? (MinecraftServer)Snooper.this.playerStatsCollector : null; + HttpUtil.postMap(Snooper.this.serverUrl, map, true, minecraftserver == null ? null : minecraftserver.getServerProxy()); + } + } + }, 0L, 900000L); + } + } + + /** + * Add OS data into the snooper + */ + private void addOSData() + { + this.addJvmArgsToSnooper(); + this.addClientStat("snooper_token", this.uniqueID); + this.addStatToSnooper("snooper_token", this.uniqueID); + this.addStatToSnooper("os_name", System.getProperty("os.name")); + this.addStatToSnooper("os_version", System.getProperty("os.version")); + this.addStatToSnooper("os_architecture", System.getProperty("os.arch")); + this.addStatToSnooper("java_version", System.getProperty("java.version")); + this.addClientStat("version", "1.12.2"); + this.playerStatsCollector.addServerTypeToSnooper(this); + } + + private void addJvmArgsToSnooper() + { + RuntimeMXBean runtimemxbean = ManagementFactory.getRuntimeMXBean(); + List list = runtimemxbean.getInputArguments(); + int i = 0; + + for (String s : list) + { + if (s.startsWith("-X")) + { + this.addClientStat("jvm_arg[" + i++ + "]", s); + } + } + + this.addClientStat("jvm_args", Integer.valueOf(i)); + } + + public void addMemoryStatsToSnooper() + { + this.addStatToSnooper("memory_total", Long.valueOf(Runtime.getRuntime().totalMemory())); + this.addStatToSnooper("memory_max", Long.valueOf(Runtime.getRuntime().maxMemory())); + this.addStatToSnooper("memory_free", Long.valueOf(Runtime.getRuntime().freeMemory())); + this.addStatToSnooper("cpu_cores", Integer.valueOf(Runtime.getRuntime().availableProcessors())); + this.playerStatsCollector.addServerStatsToSnooper(this); + } + + public void addClientStat(String statName, Object statValue) + { + synchronized (this.syncLock) + { + this.clientStats.put(statName, statValue); + } + } + + public void addStatToSnooper(String statName, Object statValue) + { + synchronized (this.syncLock) + { + this.snooperStats.put(statName, statValue); + } + } + + @SideOnly(Side.CLIENT) + public Map getCurrentStats() + { + Map map = Maps.newLinkedHashMap(); + + synchronized (this.syncLock) + { + this.addMemoryStatsToSnooper(); + + for (Entry entry : this.snooperStats.entrySet()) + { + map.put(entry.getKey(), entry.getValue().toString()); + } + + for (Entry entry1 : this.clientStats.entrySet()) + { + map.put(entry1.getKey(), entry1.getValue().toString()); + } + + return map; + } + } + + public boolean isSnooperRunning() + { + return this.isRunning; + } + + public void stopSnooper() + { + this.threadTrigger.cancel(); + } + + @SideOnly(Side.CLIENT) + public String getUniqueID() + { + return this.uniqueID; + } + + /** + * Returns the saved value of System#currentTimeMillis when the game started + */ + public long getMinecraftStartTimeMillis() + { + return this.minecraftStartTimeMilis; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/profiler/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/profiler/package-info.java new file mode 100644 index 0000000..dc4e255 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/profiler/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.profiler; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/DisconnectedRealmsScreen.java b/build/tmp/recompileMc/sources/net/minecraft/realms/DisconnectedRealmsScreen.java new file mode 100644 index 0000000..1614647 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/DisconnectedRealmsScreen.java @@ -0,0 +1,67 @@ +package net.minecraft.realms; + +import java.util.List; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class DisconnectedRealmsScreen extends RealmsScreen +{ + private final String title; + private final ITextComponent reason; + private List lines; + private final RealmsScreen parent; + private int textHeight; + + public DisconnectedRealmsScreen(RealmsScreen parentIn, String unlocalizedTitle, ITextComponent reasonIn) + { + this.parent = parentIn; + this.title = getLocalizedString(unlocalizedTitle); + this.reason = reasonIn; + } + + public void init() + { + Realms.setConnectedToRealms(false); + Realms.clearResourcePack(); + this.buttonsClear(); + this.lines = this.fontSplit(this.reason.getFormattedText(), this.width() - 50); + this.textHeight = this.lines.size() * this.fontLineHeight(); + this.buttonsAdd(newButton(0, this.width() / 2 - 100, this.height() / 2 + this.textHeight / 2 + this.fontLineHeight(), getLocalizedString("gui.back"))); + } + + public void keyPressed(char p_keyPressed_1_, int p_keyPressed_2_) + { + if (p_keyPressed_2_ == 1) + { + Realms.setScreen(this.parent); + } + } + + public void buttonClicked(RealmsButton p_buttonClicked_1_) + { + if (p_buttonClicked_1_.id() == 0) + { + Realms.setScreen(this.parent); + } + } + + public void render(int p_render_1_, int p_render_2_, float p_render_3_) + { + this.renderBackground(); + this.drawCenteredString(this.title, this.width() / 2, this.height() / 2 - this.textHeight / 2 - this.fontLineHeight() * 2, 11184810); + int i = this.height() / 2 - this.textHeight / 2; + + if (this.lines != null) + { + for (String s : this.lines) + { + this.drawCenteredString(s, this.width() / 2, i, 16777215); + i += this.fontLineHeight(); + } + } + + super.render(p_render_1_, p_render_2_, p_render_3_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/Realms.java b/build/tmp/recompileMc/sources/net/minecraft/realms/Realms.java new file mode 100644 index 0000000..522d9c2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/Realms.java @@ -0,0 +1,142 @@ +package net.minecraft.realms; + +import com.google.common.util.concurrent.ListenableFuture; +import com.mojang.authlib.GameProfile; +import com.mojang.util.UUIDTypeAdapter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.net.Proxy; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiMainMenu; +import net.minecraft.client.settings.GameSettings; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Session; +import net.minecraft.world.GameType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Realms +{ + public static boolean isTouchScreen() + { + return Minecraft.getMinecraft().gameSettings.touchscreen; + } + + public static Proxy getProxy() + { + return Minecraft.getMinecraft().getProxy(); + } + + public static String sessionId() + { + Session session = Minecraft.getMinecraft().getSession(); + return session == null ? null : session.getSessionID(); + } + + public static String userName() + { + Session session = Minecraft.getMinecraft().getSession(); + return session == null ? null : session.getUsername(); + } + + public static long currentTimeMillis() + { + return Minecraft.getSystemTime(); + } + + public static String getSessionId() + { + return Minecraft.getMinecraft().getSession().getSessionID(); + } + + public static String getUUID() + { + return Minecraft.getMinecraft().getSession().getPlayerID(); + } + + public static String getName() + { + return Minecraft.getMinecraft().getSession().getUsername(); + } + + public static String uuidToName(String p_uuidToName_0_) + { + return Minecraft.getMinecraft().getSessionService().fillProfileProperties(new GameProfile(UUIDTypeAdapter.fromString(p_uuidToName_0_), (String)null), false).getName(); + } + + public static void setScreen(RealmsScreen p_setScreen_0_) + { + Minecraft.getMinecraft().displayGuiScreen(p_setScreen_0_.getProxy()); + } + + public static String getGameDirectoryPath() + { + return Minecraft.getMinecraft().mcDataDir.getAbsolutePath(); + } + + public static int survivalId() + { + return GameType.SURVIVAL.getID(); + } + + public static int creativeId() + { + return GameType.CREATIVE.getID(); + } + + public static int adventureId() + { + return GameType.ADVENTURE.getID(); + } + + public static int spectatorId() + { + return GameType.SPECTATOR.getID(); + } + + public static void setConnectedToRealms(boolean p_setConnectedToRealms_0_) + { + Minecraft.getMinecraft().setConnectedToRealms(p_setConnectedToRealms_0_); + } + + public static ListenableFuture downloadResourcePack(String p_downloadResourcePack_0_, String p_downloadResourcePack_1_) + { + return Minecraft.getMinecraft().getResourcePackRepository().downloadResourcePack(p_downloadResourcePack_0_, p_downloadResourcePack_1_); + } + + public static void clearResourcePack() + { + Minecraft.getMinecraft().getResourcePackRepository().clearResourcePack(); + } + + public static boolean getRealmsNotificationsEnabled() + { + return Minecraft.getMinecraft().gameSettings.getOptionOrdinalValue(GameSettings.Options.REALMS_NOTIFICATIONS); + } + + public static boolean inTitleScreen() + { + return Minecraft.getMinecraft().currentScreen != null && Minecraft.getMinecraft().currentScreen instanceof GuiMainMenu; + } + + public static void deletePlayerTag(File p_deletePlayerTag_0_) + { + if (p_deletePlayerTag_0_.exists()) + { + try + { + NBTTagCompound nbttagcompound = CompressedStreamTools.readCompressed(new FileInputStream(p_deletePlayerTag_0_)); + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("Data"); + nbttagcompound1.removeTag("Player"); + CompressedStreamTools.writeCompressed(nbttagcompound, new FileOutputStream(p_deletePlayerTag_0_)); + } + catch (Exception exception) + { + exception.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsAnvilLevelStorageSource.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsAnvilLevelStorageSource.java new file mode 100644 index 0000000..8c18871 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsAnvilLevelStorageSource.java @@ -0,0 +1,78 @@ +package net.minecraft.realms; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.AnvilConverterException; +import net.minecraft.util.IProgressUpdate; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.WorldSummary; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsAnvilLevelStorageSource +{ + private final ISaveFormat levelStorageSource; + + public RealmsAnvilLevelStorageSource(ISaveFormat levelStorageSourceIn) + { + this.levelStorageSource = levelStorageSourceIn; + } + + public String getName() + { + return this.levelStorageSource.getName(); + } + + public boolean levelExists(String p_levelExists_1_) + { + return this.levelStorageSource.canLoadWorld(p_levelExists_1_); + } + + public boolean convertLevel(String p_convertLevel_1_, IProgressUpdate p_convertLevel_2_) + { + return this.levelStorageSource.convertMapFormat(p_convertLevel_1_, p_convertLevel_2_); + } + + public boolean requiresConversion(String p_requiresConversion_1_) + { + return this.levelStorageSource.isOldMapFormat(p_requiresConversion_1_); + } + + public boolean isNewLevelIdAcceptable(String p_isNewLevelIdAcceptable_1_) + { + return this.levelStorageSource.isNewLevelIdAcceptable(p_isNewLevelIdAcceptable_1_); + } + + public boolean deleteLevel(String p_deleteLevel_1_) + { + return this.levelStorageSource.deleteWorldDirectory(p_deleteLevel_1_); + } + + public boolean isConvertible(String p_isConvertible_1_) + { + return this.levelStorageSource.isConvertible(p_isConvertible_1_); + } + + public void renameLevel(String p_renameLevel_1_, String p_renameLevel_2_) + { + this.levelStorageSource.renameWorld(p_renameLevel_1_, p_renameLevel_2_); + } + + public void clearAll() + { + this.levelStorageSource.flushCache(); + } + + public List getLevelList() throws AnvilConverterException + { + List list = Lists.newArrayList(); + + for (WorldSummary worldsummary : this.levelStorageSource.getSaveList()) + { + list.add(new RealmsLevelSummary(worldsummary)); + } + + return list; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsBridge.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsBridge.java new file mode 100644 index 0000000..e427436 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsBridge.java @@ -0,0 +1,67 @@ +package net.minecraft.realms; + +import java.lang.reflect.Constructor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiScreenRealmsProxy; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class RealmsBridge extends RealmsScreen +{ + private static final Logger LOGGER = LogManager.getLogger(); + private GuiScreen previousScreen; + + public void switchToRealms(GuiScreen p_switchToRealms_1_) + { + this.previousScreen = p_switchToRealms_1_; + + try + { + Class oclass = Class.forName("com.mojang.realmsclient.RealmsMainScreen"); + Constructor constructor = oclass.getDeclaredConstructor(RealmsScreen.class); + constructor.setAccessible(true); + Object object = constructor.newInstance(this); + Minecraft.getMinecraft().displayGuiScreen(((RealmsScreen)object).getProxy()); + } + catch (ClassNotFoundException var5) + { + LOGGER.error("Realms module missing"); + } + catch (Exception exception) + { + LOGGER.error("Failed to load Realms module", (Throwable)exception); + } + } + + public GuiScreenRealmsProxy getNotificationScreen(GuiScreen p_getNotificationScreen_1_) + { + try + { + this.previousScreen = p_getNotificationScreen_1_; + Class oclass = Class.forName("com.mojang.realmsclient.gui.screens.RealmsNotificationsScreen"); + Constructor constructor = oclass.getDeclaredConstructor(RealmsScreen.class); + constructor.setAccessible(true); + Object object = constructor.newInstance(this); + return ((RealmsScreen)object).getProxy(); + } + catch (ClassNotFoundException var5) + { + LOGGER.error("Realms module missing"); + } + catch (Exception exception) + { + LOGGER.error("Failed to load Realms module", (Throwable)exception); + } + + return null; + } + + public void init() + { + Minecraft.getMinecraft().displayGuiScreen(this.previousScreen); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsBufferBuilder.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsBufferBuilder.java new file mode 100644 index 0000000..3582bbd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsBufferBuilder.java @@ -0,0 +1,154 @@ +package net.minecraft.realms; + +import java.nio.ByteBuffer; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsBufferBuilder +{ + private BufferBuilder b; + + public RealmsBufferBuilder(BufferBuilder p_i46442_1_) + { + this.b = p_i46442_1_; + } + + public RealmsBufferBuilder from(BufferBuilder p_from_1_) + { + this.b = p_from_1_; + return this; + } + + public void sortQuads(float p_sortQuads_1_, float p_sortQuads_2_, float p_sortQuads_3_) + { + this.b.sortVertexData(p_sortQuads_1_, p_sortQuads_2_, p_sortQuads_3_); + } + + public void fixupQuadColor(int p_fixupQuadColor_1_) + { + this.b.putColor4(p_fixupQuadColor_1_); + } + + public ByteBuffer getBuffer() + { + return this.b.getByteBuffer(); + } + + public void postNormal(float p_postNormal_1_, float p_postNormal_2_, float p_postNormal_3_) + { + this.b.putNormal(p_postNormal_1_, p_postNormal_2_, p_postNormal_3_); + } + + public int getDrawMode() + { + return this.b.getDrawMode(); + } + + public void offset(double p_offset_1_, double p_offset_3_, double p_offset_5_) + { + this.b.setTranslation(p_offset_1_, p_offset_3_, p_offset_5_); + } + + public void restoreState(BufferBuilder.State p_restoreState_1_) + { + this.b.setVertexState(p_restoreState_1_); + } + + public void endVertex() + { + this.b.endVertex(); + } + + public RealmsBufferBuilder normal(float p_normal_1_, float p_normal_2_, float p_normal_3_) + { + return this.from(this.b.normal(p_normal_1_, p_normal_2_, p_normal_3_)); + } + + public void end() + { + this.b.finishDrawing(); + } + + public void begin(int p_begin_1_, VertexFormat p_begin_2_) + { + this.b.begin(p_begin_1_, p_begin_2_); + } + + public RealmsBufferBuilder color(int p_color_1_, int p_color_2_, int p_color_3_, int p_color_4_) + { + return this.from(this.b.color(p_color_1_, p_color_2_, p_color_3_, p_color_4_)); + } + + public void faceTex2(int p_faceTex2_1_, int p_faceTex2_2_, int p_faceTex2_3_, int p_faceTex2_4_) + { + this.b.putBrightness4(p_faceTex2_1_, p_faceTex2_2_, p_faceTex2_3_, p_faceTex2_4_); + } + + public void postProcessFacePosition(double p_postProcessFacePosition_1_, double p_postProcessFacePosition_3_, double p_postProcessFacePosition_5_) + { + this.b.putPosition(p_postProcessFacePosition_1_, p_postProcessFacePosition_3_, p_postProcessFacePosition_5_); + } + + public void fixupVertexColor(float p_fixupVertexColor_1_, float p_fixupVertexColor_2_, float p_fixupVertexColor_3_, int p_fixupVertexColor_4_) + { + this.b.putColorRGB_F(p_fixupVertexColor_1_, p_fixupVertexColor_2_, p_fixupVertexColor_3_, p_fixupVertexColor_4_); + } + + public RealmsBufferBuilder color(float p_color_1_, float p_color_2_, float p_color_3_, float p_color_4_) + { + return this.from(this.b.color(p_color_1_, p_color_2_, p_color_3_, p_color_4_)); + } + + public RealmsVertexFormat getVertexFormat() + { + return new RealmsVertexFormat(this.b.getVertexFormat()); + } + + public void faceTint(float p_faceTint_1_, float p_faceTint_2_, float p_faceTint_3_, int p_faceTint_4_) + { + this.b.putColorMultiplier(p_faceTint_1_, p_faceTint_2_, p_faceTint_3_, p_faceTint_4_); + } + + public RealmsBufferBuilder tex2(int p_tex2_1_, int p_tex2_2_) + { + return this.from(this.b.lightmap(p_tex2_1_, p_tex2_2_)); + } + + public void putBulkData(int[] p_putBulkData_1_) + { + this.b.addVertexData(p_putBulkData_1_); + } + + public RealmsBufferBuilder tex(double p_tex_1_, double p_tex_3_) + { + return this.from(this.b.tex(p_tex_1_, p_tex_3_)); + } + + public int getVertexCount() + { + return this.b.getVertexCount(); + } + + public void clear() + { + this.b.reset(); + } + + public RealmsBufferBuilder vertex(double p_vertex_1_, double p_vertex_3_, double p_vertex_5_) + { + return this.from(this.b.pos(p_vertex_1_, p_vertex_3_, p_vertex_5_)); + } + + public void fixupQuadColor(float p_fixupQuadColor_1_, float p_fixupQuadColor_2_, float p_fixupQuadColor_3_) + { + this.b.putColorRGB_F4(p_fixupQuadColor_1_, p_fixupQuadColor_2_, p_fixupQuadColor_3_); + } + + public void noColor() + { + this.b.noColor(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsButton.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsButton.java new file mode 100644 index 0000000..c4cc5ab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsButton.java @@ -0,0 +1,92 @@ +package net.minecraft.realms; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiButtonRealmsProxy; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsButton +{ + protected static final ResourceLocation WIDGETS_LOCATION = new ResourceLocation("textures/gui/widgets.png"); + private final GuiButtonRealmsProxy proxy; + + public RealmsButton(int buttonId, int x, int y, String text) + { + this.proxy = new GuiButtonRealmsProxy(this, buttonId, x, y, text); + } + + public RealmsButton(int buttonId, int x, int y, int widthIn, int heightIn, String text) + { + this.proxy = new GuiButtonRealmsProxy(this, buttonId, x, y, text, widthIn, heightIn); + } + + public GuiButton getProxy() + { + return this.proxy; + } + + public int id() + { + return this.proxy.getId(); + } + + public boolean active() + { + return this.proxy.getEnabled(); + } + + public void active(boolean p_active_1_) + { + this.proxy.setEnabled(p_active_1_); + } + + public void msg(String p_msg_1_) + { + this.proxy.setText(p_msg_1_); + } + + public int getWidth() + { + return this.proxy.getButtonWidth(); + } + + public int getHeight() + { + return this.proxy.getHeight(); + } + + public int y() + { + return this.proxy.getPositionY(); + } + + public void render(int p_render_1_, int p_render_2_, float p_render_3_) + { + this.proxy.drawButton(Minecraft.getMinecraft(), p_render_1_, p_render_2_, p_render_3_); + } + + public void clicked(int p_clicked_1_, int p_clicked_2_) + { + } + + public void released(int p_released_1_, int p_released_2_) + { + } + + public void blit(int p_blit_1_, int p_blit_2_, int p_blit_3_, int p_blit_4_, int p_blit_5_, int p_blit_6_) + { + this.proxy.drawTexturedModalRect(p_blit_1_, p_blit_2_, p_blit_3_, p_blit_4_, p_blit_5_, p_blit_6_); + } + + public void renderBg(int p_renderBg_1_, int p_renderBg_2_) + { + } + + public int getYImage(boolean p_getYImage_1_) + { + return this.proxy.getYImage(p_getYImage_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsClickableScrolledSelectionList.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsClickableScrolledSelectionList.java new file mode 100644 index 0000000..c37d1a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsClickableScrolledSelectionList.java @@ -0,0 +1,109 @@ +package net.minecraft.realms; + +import net.minecraft.client.gui.GuiClickableScrolledSelectionListProxy; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsClickableScrolledSelectionList +{ + private final GuiClickableScrolledSelectionListProxy proxy; + + public RealmsClickableScrolledSelectionList(int p_i46052_1_, int p_i46052_2_, int p_i46052_3_, int p_i46052_4_, int p_i46052_5_) + { + this.proxy = new GuiClickableScrolledSelectionListProxy(this, p_i46052_1_, p_i46052_2_, p_i46052_3_, p_i46052_4_, p_i46052_5_); + } + + public void render(int p_render_1_, int p_render_2_, float p_render_3_) + { + this.proxy.drawScreen(p_render_1_, p_render_2_, p_render_3_); + } + + public int width() + { + return this.proxy.width(); + } + + public int ym() + { + return this.proxy.mouseY(); + } + + public int xm() + { + return this.proxy.mouseX(); + } + + protected void renderItem(int p_renderItem_1_, int p_renderItem_2_, int p_renderItem_3_, int p_renderItem_4_, Tezzelator p_renderItem_5_, int p_renderItem_6_, int p_renderItem_7_) + { + } + + public void renderItem(int p_renderItem_1_, int p_renderItem_2_, int p_renderItem_3_, int p_renderItem_4_, int p_renderItem_5_, int p_renderItem_6_) + { + this.renderItem(p_renderItem_1_, p_renderItem_2_, p_renderItem_3_, p_renderItem_4_, Tezzelator.instance, p_renderItem_5_, p_renderItem_6_); + } + + public int getItemCount() + { + return 0; + } + + public void selectItem(int p_selectItem_1_, boolean p_selectItem_2_, int p_selectItem_3_, int p_selectItem_4_) + { + } + + public boolean isSelectedItem(int p_isSelectedItem_1_) + { + return false; + } + + public void renderBackground() + { + } + + public int getMaxPosition() + { + return 0; + } + + public int getScrollbarPosition() + { + return this.proxy.width() / 2 + 124; + } + + public void mouseEvent() + { + this.proxy.handleMouseInput(); + } + + public void customMouseEvent(int p_customMouseEvent_1_, int p_customMouseEvent_2_, int p_customMouseEvent_3_, float p_customMouseEvent_4_, int p_customMouseEvent_5_) + { + } + + public void scroll(int p_scroll_1_) + { + this.proxy.scrollBy(p_scroll_1_); + } + + public int getScroll() + { + return this.proxy.getAmountScrolled(); + } + + protected void renderList(int p_renderList_1_, int p_renderList_2_, int p_renderList_3_, int p_renderList_4_) + { + } + + public void itemClicked(int p_itemClicked_1_, int p_itemClicked_2_, int p_itemClicked_3_, int p_itemClicked_4_, int p_itemClicked_5_) + { + } + + public void renderSelected(int p_renderSelected_1_, int p_renderSelected_2_, int p_renderSelected_3_, Tezzelator p_renderSelected_4_) + { + } + + public void setLeftPos(int p_setLeftPos_1_) + { + this.proxy.setSlotXBoundsFromLeft(p_setLeftPos_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsConnect.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsConnect.java new file mode 100644 index 0000000..2d44a77 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsConnect.java @@ -0,0 +1,133 @@ +package net.minecraft.realms; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.NetHandlerLoginClient; +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.login.client.CPacketLoginStart; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class RealmsConnect +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final RealmsScreen onlineScreen; + private volatile boolean aborted; + private NetworkManager connection; + + public RealmsConnect(RealmsScreen onlineScreenIn) + { + this.onlineScreen = onlineScreenIn; + } + + public void connect(final String p_connect_1_, final int p_connect_2_) + { + Realms.setConnectedToRealms(true); + (new Thread("Realms-connect-task") + { + public void run() + { + InetAddress inetaddress = null; + + try + { + net.minecraftforge.fml.client.FMLClientHandler.instance().connectToRealmsServer(p_connect_1_, p_connect_2_); + inetaddress = InetAddress.getByName(p_connect_1_); + + if (RealmsConnect.this.aborted) + { + return; + } + + RealmsConnect.this.connection = NetworkManager.createNetworkManagerAndConnect(inetaddress, p_connect_2_, Minecraft.getMinecraft().gameSettings.isUsingNativeTransport()); + + if (RealmsConnect.this.aborted) + { + return; + } + + RealmsConnect.this.connection.setNetHandler(new NetHandlerLoginClient(RealmsConnect.this.connection, Minecraft.getMinecraft(), RealmsConnect.this.onlineScreen.getProxy())); + + if (RealmsConnect.this.aborted) + { + return; + } + + RealmsConnect.this.connection.sendPacket(new C00Handshake(p_connect_1_, p_connect_2_, EnumConnectionState.LOGIN, true)); + + if (RealmsConnect.this.aborted) + { + return; + } + + RealmsConnect.this.connection.sendPacket(new CPacketLoginStart(Minecraft.getMinecraft().getSession().getProfile())); + } + catch (UnknownHostException unknownhostexception) + { + Realms.clearResourcePack(); + + if (RealmsConnect.this.aborted) + { + return; + } + + RealmsConnect.LOGGER.error("Couldn't connect to world", (Throwable)unknownhostexception); + Realms.setScreen(new DisconnectedRealmsScreen(RealmsConnect.this.onlineScreen, "connect.failed", new TextComponentTranslation("disconnect.genericReason", new Object[] {"Unknown host '" + p_connect_1_ + "'"}))); + } + catch (Exception exception) + { + Realms.clearResourcePack(); + + if (RealmsConnect.this.aborted) + { + return; + } + + RealmsConnect.LOGGER.error("Couldn't connect to world", (Throwable)exception); + String s = exception.toString(); + + if (inetaddress != null) + { + String s1 = inetaddress + ":" + p_connect_2_; + s = s.replaceAll(s1, ""); + } + + Realms.setScreen(new DisconnectedRealmsScreen(RealmsConnect.this.onlineScreen, "connect.failed", new TextComponentTranslation("disconnect.genericReason", new Object[] {s}))); + } + } + }).start(); + } + + public void abort() + { + this.aborted = true; + + if (this.connection != null && this.connection.isChannelOpen()) + { + this.connection.closeChannel(new TextComponentTranslation("disconnect.genericReason", new Object[0])); + this.connection.checkDisconnected(); + } + } + + public void tick() + { + if (this.connection != null) + { + if (this.connection.isChannelOpen()) + { + this.connection.processReceivedPackets(); + } + else + { + this.connection.checkDisconnected(); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsDefaultVertexFormat.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsDefaultVertexFormat.java new file mode 100644 index 0000000..695ffc8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsDefaultVertexFormat.java @@ -0,0 +1,74 @@ +package net.minecraft.realms; + +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsDefaultVertexFormat +{ + public static final RealmsVertexFormat BLOCK = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat BLOCK_NORMALS = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat ENTITY = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat PARTICLE = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_COLOR = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_TEX = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_NORMAL = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_TEX_COLOR = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_TEX_NORMAL = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_TEX2_COLOR = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormat POSITION_TEX_COLOR_NORMAL = new RealmsVertexFormat(new VertexFormat()); + public static final RealmsVertexFormatElement ELEMENT_POSITION = new RealmsVertexFormatElement(new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.POSITION, 3)); + public static final RealmsVertexFormatElement ELEMENT_COLOR = new RealmsVertexFormatElement(new VertexFormatElement(0, VertexFormatElement.EnumType.UBYTE, VertexFormatElement.EnumUsage.COLOR, 4)); + public static final RealmsVertexFormatElement ELEMENT_UV0 = new RealmsVertexFormatElement(new VertexFormatElement(0, VertexFormatElement.EnumType.FLOAT, VertexFormatElement.EnumUsage.UV, 2)); + public static final RealmsVertexFormatElement ELEMENT_UV1 = new RealmsVertexFormatElement(new VertexFormatElement(1, VertexFormatElement.EnumType.SHORT, VertexFormatElement.EnumUsage.UV, 2)); + public static final RealmsVertexFormatElement ELEMENT_NORMAL = new RealmsVertexFormatElement(new VertexFormatElement(0, VertexFormatElement.EnumType.BYTE, VertexFormatElement.EnumUsage.NORMAL, 3)); + public static final RealmsVertexFormatElement ELEMENT_PADDING = new RealmsVertexFormatElement(new VertexFormatElement(0, VertexFormatElement.EnumType.BYTE, VertexFormatElement.EnumUsage.PADDING, 1)); + + static + { + BLOCK.addElement(ELEMENT_POSITION); + BLOCK.addElement(ELEMENT_COLOR); + BLOCK.addElement(ELEMENT_UV0); + BLOCK.addElement(ELEMENT_UV1); + BLOCK_NORMALS.addElement(ELEMENT_POSITION); + BLOCK_NORMALS.addElement(ELEMENT_COLOR); + BLOCK_NORMALS.addElement(ELEMENT_UV0); + BLOCK_NORMALS.addElement(ELEMENT_NORMAL); + BLOCK_NORMALS.addElement(ELEMENT_PADDING); + ENTITY.addElement(ELEMENT_POSITION); + ENTITY.addElement(ELEMENT_UV0); + ENTITY.addElement(ELEMENT_NORMAL); + ENTITY.addElement(ELEMENT_PADDING); + PARTICLE.addElement(ELEMENT_POSITION); + PARTICLE.addElement(ELEMENT_UV0); + PARTICLE.addElement(ELEMENT_COLOR); + PARTICLE.addElement(ELEMENT_UV1); + POSITION.addElement(ELEMENT_POSITION); + POSITION_COLOR.addElement(ELEMENT_POSITION); + POSITION_COLOR.addElement(ELEMENT_COLOR); + POSITION_TEX.addElement(ELEMENT_POSITION); + POSITION_TEX.addElement(ELEMENT_UV0); + POSITION_NORMAL.addElement(ELEMENT_POSITION); + POSITION_NORMAL.addElement(ELEMENT_NORMAL); + POSITION_NORMAL.addElement(ELEMENT_PADDING); + POSITION_TEX_COLOR.addElement(ELEMENT_POSITION); + POSITION_TEX_COLOR.addElement(ELEMENT_UV0); + POSITION_TEX_COLOR.addElement(ELEMENT_COLOR); + POSITION_TEX_NORMAL.addElement(ELEMENT_POSITION); + POSITION_TEX_NORMAL.addElement(ELEMENT_UV0); + POSITION_TEX_NORMAL.addElement(ELEMENT_NORMAL); + POSITION_TEX_NORMAL.addElement(ELEMENT_PADDING); + POSITION_TEX2_COLOR.addElement(ELEMENT_POSITION); + POSITION_TEX2_COLOR.addElement(ELEMENT_UV0); + POSITION_TEX2_COLOR.addElement(ELEMENT_UV1); + POSITION_TEX2_COLOR.addElement(ELEMENT_COLOR); + POSITION_TEX_COLOR_NORMAL.addElement(ELEMENT_POSITION); + POSITION_TEX_COLOR_NORMAL.addElement(ELEMENT_UV0); + POSITION_TEX_COLOR_NORMAL.addElement(ELEMENT_COLOR); + POSITION_TEX_COLOR_NORMAL.addElement(ELEMENT_NORMAL); + POSITION_TEX_COLOR_NORMAL.addElement(ELEMENT_PADDING); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsEditBox.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsEditBox.java new file mode 100644 index 0000000..c7e2261 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsEditBox.java @@ -0,0 +1,67 @@ +package net.minecraft.realms; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiTextField; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsEditBox +{ + private final GuiTextField editBox; + + public RealmsEditBox(int id, int x, int y, int width, int height) + { + this.editBox = new GuiTextField(id, Minecraft.getMinecraft().fontRenderer, x, y, width, height); + } + + public String getValue() + { + return this.editBox.getText(); + } + + public void tick() + { + this.editBox.updateCursorCounter(); + } + + public void setFocus(boolean p_setFocus_1_) + { + this.editBox.setFocused(p_setFocus_1_); + } + + public void setValue(String p_setValue_1_) + { + this.editBox.setText(p_setValue_1_); + } + + public void keyPressed(char p_keyPressed_1_, int p_keyPressed_2_) + { + this.editBox.textboxKeyTyped(p_keyPressed_1_, p_keyPressed_2_); + } + + public boolean isFocused() + { + return this.editBox.isFocused(); + } + + public void mouseClicked(int p_mouseClicked_1_, int p_mouseClicked_2_, int p_mouseClicked_3_) + { + this.editBox.mouseClicked(p_mouseClicked_1_, p_mouseClicked_2_, p_mouseClicked_3_); + } + + public void render() + { + this.editBox.drawTextBox(); + } + + public void setMaxLength(int p_setMaxLength_1_) + { + this.editBox.setMaxStringLength(p_setMaxLength_1_); + } + + public void setIsEditable(boolean p_setIsEditable_1_) + { + this.editBox.setEnabled(p_setIsEditable_1_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsLevelSummary.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsLevelSummary.java new file mode 100644 index 0000000..81a0de2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsLevelSummary.java @@ -0,0 +1,73 @@ +package net.minecraft.realms; + +import net.minecraft.world.storage.WorldSummary; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsLevelSummary implements Comparable +{ + private final WorldSummary levelSummary; + + public RealmsLevelSummary(WorldSummary levelSummaryIn) + { + this.levelSummary = levelSummaryIn; + } + + public int getGameMode() + { + return this.levelSummary.getEnumGameType().getID(); + } + + public String getLevelId() + { + return this.levelSummary.getFileName(); + } + + public boolean hasCheats() + { + return this.levelSummary.getCheatsEnabled(); + } + + public boolean isHardcore() + { + return this.levelSummary.isHardcoreModeEnabled(); + } + + public boolean isRequiresConversion() + { + return this.levelSummary.requiresConversion(); + } + + public String getLevelName() + { + return this.levelSummary.getDisplayName(); + } + + public long getLastPlayed() + { + return this.levelSummary.getLastTimePlayed(); + } + + public int compareTo(WorldSummary p_compareTo_1_) + { + return this.levelSummary.compareTo(p_compareTo_1_); + } + + public long getSizeOnDisk() + { + return this.levelSummary.getSizeOnDisk(); + } + + public int compareTo(RealmsLevelSummary p_compareTo_1_) + { + if (this.levelSummary.getLastTimePlayed() < p_compareTo_1_.getLastPlayed()) + { + return 1; + } + else + { + return this.levelSummary.getLastTimePlayed() > p_compareTo_1_.getLastPlayed() ? -1 : this.levelSummary.getFileName().compareTo(p_compareTo_1_.getLevelId()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsMth.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsMth.java new file mode 100644 index 0000000..b79ac6c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsMth.java @@ -0,0 +1,176 @@ +package net.minecraft.realms; + +import java.util.Random; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.StringUtils; + +@SideOnly(Side.CLIENT) +public class RealmsMth +{ + public static float sin(float p_sin_0_) + { + return MathHelper.sin(p_sin_0_); + } + + public static double nextDouble(Random p_nextDouble_0_, double p_nextDouble_1_, double p_nextDouble_3_) + { + return MathHelper.nextDouble(p_nextDouble_0_, p_nextDouble_1_, p_nextDouble_3_); + } + + public static int ceil(float p_ceil_0_) + { + return MathHelper.ceil(p_ceil_0_); + } + + public static int floor(double p_floor_0_) + { + return MathHelper.floor(p_floor_0_); + } + + public static int intFloorDiv(int p_intFloorDiv_0_, int p_intFloorDiv_1_) + { + return MathHelper.intFloorDiv(p_intFloorDiv_0_, p_intFloorDiv_1_); + } + + public static float abs(float p_abs_0_) + { + return MathHelper.abs(p_abs_0_); + } + + public static int clamp(int p_clamp_0_, int p_clamp_1_, int p_clamp_2_) + { + return MathHelper.clamp(p_clamp_0_, p_clamp_1_, p_clamp_2_); + } + + public static double clampedLerp(double p_clampedLerp_0_, double p_clampedLerp_2_, double p_clampedLerp_4_) + { + return MathHelper.clampedLerp(p_clampedLerp_0_, p_clampedLerp_2_, p_clampedLerp_4_); + } + + public static int ceil(double p_ceil_0_) + { + return MathHelper.ceil(p_ceil_0_); + } + + public static boolean isEmpty(String p_isEmpty_0_) + { + return StringUtils.isEmpty(p_isEmpty_0_); + } + + public static long lfloor(double p_lfloor_0_) + { + return MathHelper.lfloor(p_lfloor_0_); + } + + public static float sqrt(double p_sqrt_0_) + { + return MathHelper.sqrt(p_sqrt_0_); + } + + public static double clamp(double p_clamp_0_, double p_clamp_2_, double p_clamp_4_) + { + return MathHelper.clamp(p_clamp_0_, p_clamp_2_, p_clamp_4_); + } + + public static int getInt(String p_getInt_0_, int p_getInt_1_) + { + return MathHelper.getInt(p_getInt_0_, p_getInt_1_); + } + + public static double getDouble(String p_getDouble_0_, double p_getDouble_1_) + { + return MathHelper.getDouble(p_getDouble_0_, p_getDouble_1_); + } + + public static int log2(int p_log2_0_) + { + return MathHelper.log2(p_log2_0_); + } + + public static int absFloor(double p_absFloor_0_) + { + return MathHelper.absFloor(p_absFloor_0_); + } + + public static int smallestEncompassingPowerOfTwo(int p_smallestEncompassingPowerOfTwo_0_) + { + return MathHelper.smallestEncompassingPowerOfTwo(p_smallestEncompassingPowerOfTwo_0_); + } + + public static float sqrt(float p_sqrt_0_) + { + return MathHelper.sqrt(p_sqrt_0_); + } + + public static float cos(float p_cos_0_) + { + return MathHelper.cos(p_cos_0_); + } + + public static int getInt(String p_getInt_0_, int p_getInt_1_, int p_getInt_2_) + { + return MathHelper.getInt(p_getInt_0_, p_getInt_1_, p_getInt_2_); + } + + public static int fastFloor(double p_fastFloor_0_) + { + return MathHelper.fastFloor(p_fastFloor_0_); + } + + public static double absMax(double p_absMax_0_, double p_absMax_2_) + { + return MathHelper.absMax(p_absMax_0_, p_absMax_2_); + } + + public static float nextFloat(Random p_nextFloat_0_, float p_nextFloat_1_, float p_nextFloat_2_) + { + return MathHelper.nextFloat(p_nextFloat_0_, p_nextFloat_1_, p_nextFloat_2_); + } + + public static double wrapDegrees(double p_wrapDegrees_0_) + { + return MathHelper.wrapDegrees(p_wrapDegrees_0_); + } + + public static float wrapDegrees(float p_wrapDegrees_0_) + { + return MathHelper.wrapDegrees(p_wrapDegrees_0_); + } + + public static float clamp(float p_clamp_0_, float p_clamp_1_, float p_clamp_2_) + { + return MathHelper.clamp(p_clamp_0_, p_clamp_1_, p_clamp_2_); + } + + public static double getDouble(String p_getDouble_0_, double p_getDouble_1_, double p_getDouble_3_) + { + return MathHelper.getDouble(p_getDouble_0_, p_getDouble_1_, p_getDouble_3_); + } + + public static int roundUp(int p_roundUp_0_, int p_roundUp_1_) + { + return MathHelper.roundUp(p_roundUp_0_, p_roundUp_1_); + } + + public static double average(long[] p_average_0_) + { + return MathHelper.average(p_average_0_); + } + + public static int floor(float p_floor_0_) + { + return MathHelper.floor(p_floor_0_); + } + + public static int abs(int p_abs_0_) + { + return MathHelper.abs(p_abs_0_); + } + + public static int nextInt(Random p_nextInt_0_, int p_nextInt_1_, int p_nextInt_2_) + { + return MathHelper.getInt(p_nextInt_0_, p_nextInt_1_, p_nextInt_2_); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsScreen.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsScreen.java new file mode 100644 index 0000000..92e6f38 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsScreen.java @@ -0,0 +1,258 @@ +package net.minecraft.realms; + +import com.mojang.util.UUIDTypeAdapter; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreenRealmsProxy; +import net.minecraft.client.resources.DefaultPlayerSkin; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsScreen +{ + public static final int SKIN_HEAD_U = 8; + public static final int SKIN_HEAD_V = 8; + public static final int SKIN_HEAD_WIDTH = 8; + public static final int SKIN_HEAD_HEIGHT = 8; + public static final int SKIN_HAT_U = 40; + public static final int SKIN_HAT_V = 8; + public static final int SKIN_HAT_WIDTH = 8; + public static final int SKIN_HAT_HEIGHT = 8; + public static final int SKIN_TEX_WIDTH = 64; + public static final int SKIN_TEX_HEIGHT = 64; + protected Minecraft minecraft; + public int width; + public int height; + private final GuiScreenRealmsProxy proxy = new GuiScreenRealmsProxy(this); + + public GuiScreenRealmsProxy getProxy() + { + return this.proxy; + } + + public void init() + { + } + + public void init(Minecraft p_init_1_, int p_init_2_, int p_init_3_) + { + } + + public void drawCenteredString(String p_drawCenteredString_1_, int p_drawCenteredString_2_, int p_drawCenteredString_3_, int p_drawCenteredString_4_) + { + this.proxy.drawCenteredString(p_drawCenteredString_1_, p_drawCenteredString_2_, p_drawCenteredString_3_, p_drawCenteredString_4_); + } + + public void drawString(String p_drawString_1_, int p_drawString_2_, int p_drawString_3_, int p_drawString_4_) + { + this.drawString(p_drawString_1_, p_drawString_2_, p_drawString_3_, p_drawString_4_, true); + } + + public void drawString(String p_drawString_1_, int p_drawString_2_, int p_drawString_3_, int p_drawString_4_, boolean p_drawString_5_) + { + this.proxy.drawString(p_drawString_1_, p_drawString_2_, p_drawString_3_, p_drawString_4_, false); + } + + public void blit(int p_blit_1_, int p_blit_2_, int p_blit_3_, int p_blit_4_, int p_blit_5_, int p_blit_6_) + { + this.proxy.drawTexturedModalRect(p_blit_1_, p_blit_2_, p_blit_3_, p_blit_4_, p_blit_5_, p_blit_6_); + } + + public static void blit(int p_blit_0_, int p_blit_1_, float p_blit_2_, float p_blit_3_, int p_blit_4_, int p_blit_5_, int p_blit_6_, int p_blit_7_, float p_blit_8_, float p_blit_9_) + { + Gui.drawScaledCustomSizeModalRect(p_blit_0_, p_blit_1_, p_blit_2_, p_blit_3_, p_blit_4_, p_blit_5_, p_blit_6_, p_blit_7_, p_blit_8_, p_blit_9_); + } + + public static void blit(int p_blit_0_, int p_blit_1_, float p_blit_2_, float p_blit_3_, int p_blit_4_, int p_blit_5_, float p_blit_6_, float p_blit_7_) + { + Gui.drawModalRectWithCustomSizedTexture(p_blit_0_, p_blit_1_, p_blit_2_, p_blit_3_, p_blit_4_, p_blit_5_, p_blit_6_, p_blit_7_); + } + + public void fillGradient(int p_fillGradient_1_, int p_fillGradient_2_, int p_fillGradient_3_, int p_fillGradient_4_, int p_fillGradient_5_, int p_fillGradient_6_) + { + this.proxy.drawGradientRect(p_fillGradient_1_, p_fillGradient_2_, p_fillGradient_3_, p_fillGradient_4_, p_fillGradient_5_, p_fillGradient_6_); + } + + public void renderBackground() + { + this.proxy.drawDefaultBackground(); + } + + public boolean isPauseScreen() + { + return this.proxy.doesGuiPauseGame(); + } + + public void renderBackground(int p_renderBackground_1_) + { + this.proxy.drawWorldBackground(p_renderBackground_1_); + } + + public void render(int p_render_1_, int p_render_2_, float p_render_3_) + { + for (int i = 0; i < this.proxy.buttons().size(); ++i) + { + ((RealmsButton)this.proxy.buttons().get(i)).render(p_render_1_, p_render_2_, p_render_3_); + } + } + + public void renderTooltip(ItemStack p_renderTooltip_1_, int p_renderTooltip_2_, int p_renderTooltip_3_) + { + this.proxy.renderToolTip(p_renderTooltip_1_, p_renderTooltip_2_, p_renderTooltip_3_); + } + + public void renderTooltip(String p_renderTooltip_1_, int p_renderTooltip_2_, int p_renderTooltip_3_) + { + this.proxy.drawHoveringText(p_renderTooltip_1_, p_renderTooltip_2_, p_renderTooltip_3_); + } + + public void renderTooltip(List p_renderTooltip_1_, int p_renderTooltip_2_, int p_renderTooltip_3_) + { + this.proxy.drawHoveringText(p_renderTooltip_1_, p_renderTooltip_2_, p_renderTooltip_3_); + } + + public static void bindFace(String p_bindFace_0_, String p_bindFace_1_) + { + ResourceLocation resourcelocation = AbstractClientPlayer.getLocationSkin(p_bindFace_1_); + + if (resourcelocation == null) + { + resourcelocation = DefaultPlayerSkin.getDefaultSkin(UUIDTypeAdapter.fromString(p_bindFace_0_)); + } + + AbstractClientPlayer.getDownloadImageSkin(resourcelocation, p_bindFace_1_); + Minecraft.getMinecraft().getTextureManager().bindTexture(resourcelocation); + } + + public static void bind(String p_bind_0_) + { + ResourceLocation resourcelocation = new ResourceLocation(p_bind_0_); + Minecraft.getMinecraft().getTextureManager().bindTexture(resourcelocation); + } + + public void tick() + { + } + + public int width() + { + return this.proxy.width; + } + + public int height() + { + return this.proxy.height; + } + + public int fontLineHeight() + { + return this.proxy.getFontHeight(); + } + + public int fontWidth(String p_fontWidth_1_) + { + return this.proxy.getStringWidth(p_fontWidth_1_); + } + + public void fontDrawShadow(String p_fontDrawShadow_1_, int p_fontDrawShadow_2_, int p_fontDrawShadow_3_, int p_fontDrawShadow_4_) + { + this.proxy.fontDrawShadow(p_fontDrawShadow_1_, p_fontDrawShadow_2_, p_fontDrawShadow_3_, p_fontDrawShadow_4_); + } + + public List fontSplit(String p_fontSplit_1_, int p_fontSplit_2_) + { + return this.proxy.fontSplit(p_fontSplit_1_, p_fontSplit_2_); + } + + public void buttonClicked(RealmsButton p_buttonClicked_1_) + { + } + + public static RealmsButton newButton(int p_newButton_0_, int p_newButton_1_, int p_newButton_2_, String p_newButton_3_) + { + return new RealmsButton(p_newButton_0_, p_newButton_1_, p_newButton_2_, p_newButton_3_); + } + + public static RealmsButton newButton(int p_newButton_0_, int p_newButton_1_, int p_newButton_2_, int p_newButton_3_, int p_newButton_4_, String p_newButton_5_) + { + return new RealmsButton(p_newButton_0_, p_newButton_1_, p_newButton_2_, p_newButton_3_, p_newButton_4_, p_newButton_5_); + } + + public void buttonsClear() + { + this.proxy.buttonsClear(); + } + + public void buttonsAdd(RealmsButton p_buttonsAdd_1_) + { + this.proxy.buttonsAdd(p_buttonsAdd_1_); + } + + public List buttons() + { + return this.proxy.buttons(); + } + + public void buttonsRemove(RealmsButton p_buttonsRemove_1_) + { + this.proxy.buttonsRemove(p_buttonsRemove_1_); + } + + public RealmsEditBox newEditBox(int p_newEditBox_1_, int p_newEditBox_2_, int p_newEditBox_3_, int p_newEditBox_4_, int p_newEditBox_5_) + { + return new RealmsEditBox(p_newEditBox_1_, p_newEditBox_2_, p_newEditBox_3_, p_newEditBox_4_, p_newEditBox_5_); + } + + public void mouseClicked(int p_mouseClicked_1_, int p_mouseClicked_2_, int p_mouseClicked_3_) + { + } + + public void mouseEvent() + { + } + + public void keyboardEvent() + { + } + + public void mouseReleased(int p_mouseReleased_1_, int p_mouseReleased_2_, int p_mouseReleased_3_) + { + } + + public void mouseDragged(int p_mouseDragged_1_, int p_mouseDragged_2_, int p_mouseDragged_3_, long p_mouseDragged_4_) + { + } + + public void keyPressed(char p_keyPressed_1_, int p_keyPressed_2_) + { + } + + public void confirmResult(boolean p_confirmResult_1_, int p_confirmResult_2_) + { + } + + public static String getLocalizedString(String p_getLocalizedString_0_) + { + return I18n.format(p_getLocalizedString_0_); + } + + public static String getLocalizedString(String p_getLocalizedString_0_, Object... p_getLocalizedString_1_) + { + return I18n.format(p_getLocalizedString_0_, p_getLocalizedString_1_); + } + + public RealmsAnvilLevelStorageSource getLevelStorageSource() + { + return new RealmsAnvilLevelStorageSource(Minecraft.getMinecraft().getSaveLoader()); + } + + public void removed() + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsScrolledSelectionList.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsScrolledSelectionList.java new file mode 100644 index 0000000..e534949 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsScrolledSelectionList.java @@ -0,0 +1,92 @@ +package net.minecraft.realms; + +import net.minecraft.client.gui.GuiSlotRealmsProxy; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsScrolledSelectionList +{ + private final GuiSlotRealmsProxy proxy; + + public RealmsScrolledSelectionList(int width, int height, int top, int bottom, int slotHeight) + { + this.proxy = new GuiSlotRealmsProxy(this, width, height, top, bottom, slotHeight); + } + + public void render(int p_render_1_, int p_render_2_, float p_render_3_) + { + this.proxy.drawScreen(p_render_1_, p_render_2_, p_render_3_); + } + + public int width() + { + return this.proxy.getWidth(); + } + + public int ym() + { + return this.proxy.getMouseY(); + } + + public int xm() + { + return this.proxy.getMouseX(); + } + + protected void renderItem(int p_renderItem_1_, int p_renderItem_2_, int p_renderItem_3_, int p_renderItem_4_, Tezzelator p_renderItem_5_, int p_renderItem_6_, int p_renderItem_7_) + { + } + + public void renderItem(int p_renderItem_1_, int p_renderItem_2_, int p_renderItem_3_, int p_renderItem_4_, int p_renderItem_5_, int p_renderItem_6_) + { + this.renderItem(p_renderItem_1_, p_renderItem_2_, p_renderItem_3_, p_renderItem_4_, Tezzelator.instance, p_renderItem_5_, p_renderItem_6_); + } + + public int getItemCount() + { + return 0; + } + + public void selectItem(int p_selectItem_1_, boolean p_selectItem_2_, int p_selectItem_3_, int p_selectItem_4_) + { + } + + public boolean isSelectedItem(int p_isSelectedItem_1_) + { + return false; + } + + public void renderBackground() + { + } + + public int getMaxPosition() + { + return 0; + } + + public int getScrollbarPosition() + { + return this.proxy.getWidth() / 2 + 124; + } + + public void mouseEvent() + { + this.proxy.handleMouseInput(); + } + + public void scroll(int p_scroll_1_) + { + this.proxy.scrollBy(p_scroll_1_); + } + + public int getScroll() + { + return this.proxy.getAmountScrolled(); + } + + protected void renderList(int p_renderList_1_, int p_renderList_2_, int p_renderList_3_, int p_renderList_4_) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsServerAddress.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsServerAddress.java new file mode 100644 index 0000000..2cfb8ff --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsServerAddress.java @@ -0,0 +1,34 @@ +package net.minecraft.realms; + +import net.minecraft.client.multiplayer.ServerAddress; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsServerAddress +{ + private final String host; + private final int port; + + protected RealmsServerAddress(String hostIn, int portIn) + { + this.host = hostIn; + this.port = portIn; + } + + public String getHost() + { + return this.host; + } + + public int getPort() + { + return this.port; + } + + public static RealmsServerAddress parseString(String p_parseString_0_) + { + ServerAddress serveraddress = ServerAddress.fromString(p_parseString_0_); + return new RealmsServerAddress(serveraddress.getIP(), serveraddress.getPort()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSharedConstants.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSharedConstants.java new file mode 100644 index 0000000..baed7e5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSharedConstants.java @@ -0,0 +1,14 @@ +package net.minecraft.realms; + +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsSharedConstants +{ + public static int NETWORK_PROTOCOL_VERSION = 340; + public static int TICKS_PER_SECOND = 20; + public static String VERSION_STRING = "1.12.2"; + public static char[] ILLEGAL_FILE_CHARACTERS = ChatAllowedCharacters.ILLEGAL_FILE_CHARACTERS; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSimpleScrolledSelectionList.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSimpleScrolledSelectionList.java new file mode 100644 index 0000000..39be4a6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSimpleScrolledSelectionList.java @@ -0,0 +1,92 @@ +package net.minecraft.realms; + +import net.minecraft.client.gui.GuiSimpleScrolledSelectionListProxy; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsSimpleScrolledSelectionList +{ + private final GuiSimpleScrolledSelectionListProxy proxy; + + public RealmsSimpleScrolledSelectionList(int width, int height, int top, int bottom, int slotHeight) + { + this.proxy = new GuiSimpleScrolledSelectionListProxy(this, width, height, top, bottom, slotHeight); + } + + public void render(int p_render_1_, int p_render_2_, float p_render_3_) + { + this.proxy.drawScreen(p_render_1_, p_render_2_, p_render_3_); + } + + public int width() + { + return this.proxy.getWidth(); + } + + public int ym() + { + return this.proxy.getMouseY(); + } + + public int xm() + { + return this.proxy.getMouseX(); + } + + protected void renderItem(int p_renderItem_1_, int p_renderItem_2_, int p_renderItem_3_, int p_renderItem_4_, Tezzelator p_renderItem_5_, int p_renderItem_6_, int p_renderItem_7_) + { + } + + public void renderItem(int p_renderItem_1_, int p_renderItem_2_, int p_renderItem_3_, int p_renderItem_4_, int p_renderItem_5_, int p_renderItem_6_) + { + this.renderItem(p_renderItem_1_, p_renderItem_2_, p_renderItem_3_, p_renderItem_4_, Tezzelator.instance, p_renderItem_5_, p_renderItem_6_); + } + + public int getItemCount() + { + return 0; + } + + public void selectItem(int p_selectItem_1_, boolean p_selectItem_2_, int p_selectItem_3_, int p_selectItem_4_) + { + } + + public boolean isSelectedItem(int p_isSelectedItem_1_) + { + return false; + } + + public void renderBackground() + { + } + + public int getMaxPosition() + { + return 0; + } + + public int getScrollbarPosition() + { + return this.proxy.getWidth() / 2 + 124; + } + + public void mouseEvent() + { + this.proxy.handleMouseInput(); + } + + public void scroll(int p_scroll_1_) + { + this.proxy.scrollBy(p_scroll_1_); + } + + public int getScroll() + { + return this.proxy.getAmountScrolled(); + } + + protected void renderList(int p_renderList_1_, int p_renderList_2_, int p_renderList_3_, int p_renderList_4_) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSliderButton.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSliderButton.java new file mode 100644 index 0000000..8b8d5ac --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsSliderButton.java @@ -0,0 +1,107 @@ +package net.minecraft.realms; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsSliderButton extends RealmsButton +{ + public float value; + public boolean sliding; + private final float minValue; + private final float maxValue; + private int steps; + + public RealmsSliderButton(int buttonId, int x, int y, int width, int maxValueIn, int p_i1056_6_) + { + this(buttonId, x, y, width, p_i1056_6_, 0, 1.0F, (float)maxValueIn); + } + + public RealmsSliderButton(int buttonId, int x, int y, int width, int p_i1057_5_, int valueIn, float minValueIn, float maxValueIn) + { + super(buttonId, x, y, width, 20, ""); + this.value = 1.0F; + this.minValue = minValueIn; + this.maxValue = maxValueIn; + this.value = this.toPct((float)valueIn); + this.getProxy().displayString = this.getMessage(); + } + + public String getMessage() + { + return ""; + } + + public float toPct(float p_toPct_1_) + { + return MathHelper.clamp((this.clamp(p_toPct_1_) - this.minValue) / (this.maxValue - this.minValue), 0.0F, 1.0F); + } + + public float toValue(float p_toValue_1_) + { + return this.clamp(this.minValue + (this.maxValue - this.minValue) * MathHelper.clamp(p_toValue_1_, 0.0F, 1.0F)); + } + + public float clamp(float p_clamp_1_) + { + p_clamp_1_ = this.clampSteps(p_clamp_1_); + return MathHelper.clamp(p_clamp_1_, this.minValue, this.maxValue); + } + + protected float clampSteps(float p_clampSteps_1_) + { + if (this.steps > 0) + { + p_clampSteps_1_ = (float)(this.steps * Math.round(p_clampSteps_1_ / (float)this.steps)); + } + + return p_clampSteps_1_; + } + + public int getYImage(boolean p_getYImage_1_) + { + return 0; + } + + public void renderBg(int p_renderBg_1_, int p_renderBg_2_) + { + if (this.getProxy().visible) + { + if (this.sliding) + { + this.value = (float)(p_renderBg_1_ - (this.getProxy().x + 4)) / (float)(this.getProxy().getButtonWidth() - 8); + this.value = MathHelper.clamp(this.value, 0.0F, 1.0F); + float f = this.toValue(this.value); + this.clicked(f); + this.value = this.toPct(f); + this.getProxy().displayString = this.getMessage(); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(WIDGETS_LOCATION); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.blit(this.getProxy().x + (int)(this.value * (float)(this.getProxy().getButtonWidth() - 8)), this.getProxy().y, 0, 66, 4, 20); + this.blit(this.getProxy().x + (int)(this.value * (float)(this.getProxy().getButtonWidth() - 8)) + 4, this.getProxy().y, 196, 66, 4, 20); + } + } + + public void clicked(int p_clicked_1_, int p_clicked_2_) + { + this.value = (float)(p_clicked_1_ - (this.getProxy().x + 4)) / (float)(this.getProxy().getButtonWidth() - 8); + this.value = MathHelper.clamp(this.value, 0.0F, 1.0F); + this.clicked(this.toValue(this.value)); + this.getProxy().displayString = this.getMessage(); + this.sliding = true; + } + + public void clicked(float p_clicked_1_) + { + } + + public void released(int p_released_1_, int p_released_2_) + { + this.sliding = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsVertexFormat.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsVertexFormat.java new file mode 100644 index 0000000..29befe4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsVertexFormat.java @@ -0,0 +1,122 @@ +package net.minecraft.realms; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsVertexFormat +{ + private VertexFormat v; + + public RealmsVertexFormat(VertexFormat vIn) + { + this.v = vIn; + } + + public RealmsVertexFormat from(VertexFormat p_from_1_) + { + this.v = p_from_1_; + return this; + } + + public VertexFormat getVertexFormat() + { + return this.v; + } + + public void clear() + { + this.v.clear(); + } + + public int getUvOffset(int p_getUvOffset_1_) + { + return this.v.getUvOffsetById(p_getUvOffset_1_); + } + + public int getElementCount() + { + return this.v.getElementCount(); + } + + public boolean hasColor() + { + return this.v.hasColor(); + } + + public boolean hasUv(int p_hasUv_1_) + { + return this.v.hasUvOffset(p_hasUv_1_); + } + + public RealmsVertexFormatElement getElement(int p_getElement_1_) + { + return new RealmsVertexFormatElement(this.v.getElement(p_getElement_1_)); + } + + public RealmsVertexFormat addElement(RealmsVertexFormatElement p_addElement_1_) + { + return this.from(this.v.addElement(p_addElement_1_.getVertexFormatElement())); + } + + public int getColorOffset() + { + return this.v.getColorOffset(); + } + + public List getElements() + { + List list = Lists.newArrayList(); + + for (VertexFormatElement vertexformatelement : this.v.getElements()) + { + list.add(new RealmsVertexFormatElement(vertexformatelement)); + } + + return list; + } + + public boolean hasNormal() + { + return this.v.hasNormal(); + } + + public int getVertexSize() + { + return this.v.getNextOffset(); + } + + public int getOffset(int p_getOffset_1_) + { + return this.v.getOffset(p_getOffset_1_); + } + + public int getNormalOffset() + { + return this.v.getNormalOffset(); + } + + public int getIntegerSize() + { + return this.v.getIntegerSize(); + } + + public boolean equals(Object p_equals_1_) + { + return this.v.equals(p_equals_1_); + } + + public int hashCode() + { + return this.v.hashCode(); + } + + public String toString() + { + return this.v.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsVertexFormatElement.java b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsVertexFormatElement.java new file mode 100644 index 0000000..d41deca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/RealmsVertexFormatElement.java @@ -0,0 +1,56 @@ +package net.minecraft.realms; + +import net.minecraft.client.renderer.vertex.VertexFormatElement; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class RealmsVertexFormatElement +{ + private final VertexFormatElement v; + + public RealmsVertexFormatElement(VertexFormatElement vIn) + { + this.v = vIn; + } + + public VertexFormatElement getVertexFormatElement() + { + return this.v; + } + + public boolean isPosition() + { + return this.v.isPositionElement(); + } + + public int getIndex() + { + return this.v.getIndex(); + } + + public int getByteSize() + { + return this.v.getSize(); + } + + public int getCount() + { + return this.v.getElementCount(); + } + + public int hashCode() + { + return this.v.hashCode(); + } + + public boolean equals(Object p_equals_1_) + { + return this.v.equals(p_equals_1_); + } + + public String toString() + { + return this.v.toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/Tezzelator.java b/build/tmp/recompileMc/sources/net/minecraft/realms/Tezzelator.java new file mode 100644 index 0000000..1e5aa58 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/Tezzelator.java @@ -0,0 +1,64 @@ +package net.minecraft.realms; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Tezzelator +{ + public static Tessellator t = Tessellator.getInstance(); + public static final Tezzelator instance = new Tezzelator(); + + public void end() + { + t.draw(); + } + + public Tezzelator vertex(double p_vertex_1_, double p_vertex_3_, double p_vertex_5_) + { + t.getBuffer().pos(p_vertex_1_, p_vertex_3_, p_vertex_5_); + return this; + } + + public void color(float p_color_1_, float p_color_2_, float p_color_3_, float p_color_4_) + { + t.getBuffer().color(p_color_1_, p_color_2_, p_color_3_, p_color_4_); + } + + public void tex2(short p_tex2_1_, short p_tex2_2_) + { + t.getBuffer().lightmap(p_tex2_1_, p_tex2_2_); + } + + public void normal(float p_normal_1_, float p_normal_2_, float p_normal_3_) + { + t.getBuffer().normal(p_normal_1_, p_normal_2_, p_normal_3_); + } + + public void begin(int p_begin_1_, RealmsVertexFormat p_begin_2_) + { + t.getBuffer().begin(p_begin_1_, p_begin_2_.getVertexFormat()); + } + + public void endVertex() + { + t.getBuffer().endVertex(); + } + + public void offset(double p_offset_1_, double p_offset_3_, double p_offset_5_) + { + t.getBuffer().setTranslation(p_offset_1_, p_offset_3_, p_offset_5_); + } + + public RealmsBufferBuilder color(int p_color_1_, int p_color_2_, int p_color_3_, int p_color_4_) + { + return new RealmsBufferBuilder(t.getBuffer().color(p_color_1_, p_color_2_, p_color_3_, p_color_4_)); + } + + public Tezzelator tex(double p_tex_1_, double p_tex_3_) + { + t.getBuffer().tex(p_tex_1_, p_tex_3_); + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/realms/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/realms/package-info.java new file mode 100644 index 0000000..1de2294 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/realms/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.realms; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/IScoreCriteria.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/IScoreCriteria.java new file mode 100644 index 0000000..80dce2c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/IScoreCriteria.java @@ -0,0 +1,62 @@ +package net.minecraft.scoreboard; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.util.text.TextFormatting; + +public interface IScoreCriteria +{ + Map INSTANCES = Maps.newHashMap(); + IScoreCriteria DUMMY = new ScoreCriteria("dummy"); + IScoreCriteria TRIGGER = new ScoreCriteria("trigger"); + IScoreCriteria DEATH_COUNT = new ScoreCriteria("deathCount"); + IScoreCriteria PLAYER_KILL_COUNT = new ScoreCriteria("playerKillCount"); + IScoreCriteria TOTAL_KILL_COUNT = new ScoreCriteria("totalKillCount"); + IScoreCriteria HEALTH = new ScoreCriteriaHealth("health"); + IScoreCriteria FOOD = new ScoreCriteriaReadOnly("food"); + IScoreCriteria AIR = new ScoreCriteriaReadOnly("air"); + IScoreCriteria ARMOR = new ScoreCriteriaReadOnly("armor"); + IScoreCriteria XP = new ScoreCriteriaReadOnly("xp"); + IScoreCriteria LEVEL = new ScoreCriteriaReadOnly("level"); + IScoreCriteria[] TEAM_KILL = new IScoreCriteria[] {new ScoreCriteriaColored("teamkill.", TextFormatting.BLACK), new ScoreCriteriaColored("teamkill.", TextFormatting.DARK_BLUE), new ScoreCriteriaColored("teamkill.", TextFormatting.DARK_GREEN), new ScoreCriteriaColored("teamkill.", TextFormatting.DARK_AQUA), new ScoreCriteriaColored("teamkill.", TextFormatting.DARK_RED), new ScoreCriteriaColored("teamkill.", TextFormatting.DARK_PURPLE), new ScoreCriteriaColored("teamkill.", TextFormatting.GOLD), new ScoreCriteriaColored("teamkill.", TextFormatting.GRAY), new ScoreCriteriaColored("teamkill.", TextFormatting.DARK_GRAY), new ScoreCriteriaColored("teamkill.", TextFormatting.BLUE), new ScoreCriteriaColored("teamkill.", TextFormatting.GREEN), new ScoreCriteriaColored("teamkill.", TextFormatting.AQUA), new ScoreCriteriaColored("teamkill.", TextFormatting.RED), new ScoreCriteriaColored("teamkill.", TextFormatting.LIGHT_PURPLE), new ScoreCriteriaColored("teamkill.", TextFormatting.YELLOW), new ScoreCriteriaColored("teamkill.", TextFormatting.WHITE)}; + IScoreCriteria[] KILLED_BY_TEAM = new IScoreCriteria[] {new ScoreCriteriaColored("killedByTeam.", TextFormatting.BLACK), new ScoreCriteriaColored("killedByTeam.", TextFormatting.DARK_BLUE), new ScoreCriteriaColored("killedByTeam.", TextFormatting.DARK_GREEN), new ScoreCriteriaColored("killedByTeam.", TextFormatting.DARK_AQUA), new ScoreCriteriaColored("killedByTeam.", TextFormatting.DARK_RED), new ScoreCriteriaColored("killedByTeam.", TextFormatting.DARK_PURPLE), new ScoreCriteriaColored("killedByTeam.", TextFormatting.GOLD), new ScoreCriteriaColored("killedByTeam.", TextFormatting.GRAY), new ScoreCriteriaColored("killedByTeam.", TextFormatting.DARK_GRAY), new ScoreCriteriaColored("killedByTeam.", TextFormatting.BLUE), new ScoreCriteriaColored("killedByTeam.", TextFormatting.GREEN), new ScoreCriteriaColored("killedByTeam.", TextFormatting.AQUA), new ScoreCriteriaColored("killedByTeam.", TextFormatting.RED), new ScoreCriteriaColored("killedByTeam.", TextFormatting.LIGHT_PURPLE), new ScoreCriteriaColored("killedByTeam.", TextFormatting.YELLOW), new ScoreCriteriaColored("killedByTeam.", TextFormatting.WHITE)}; + + String getName(); + + boolean isReadOnly(); + + IScoreCriteria.EnumRenderType getRenderType(); + + public static enum EnumRenderType + { + INTEGER("integer"), + HEARTS("hearts"); + + private static final Map BY_NAME = Maps.newHashMap(); + private final String renderType; + + private EnumRenderType(String renderTypeIn) + { + this.renderType = renderTypeIn; + } + + public String getRenderType() + { + return this.renderType; + } + + public static IScoreCriteria.EnumRenderType getByName(String name) + { + IScoreCriteria.EnumRenderType iscorecriteria$enumrendertype = BY_NAME.get(name); + return iscorecriteria$enumrendertype == null ? INTEGER : iscorecriteria$enumrendertype; + } + + static + { + for (IScoreCriteria.EnumRenderType iscorecriteria$enumrendertype : values()) + { + BY_NAME.put(iscorecriteria$enumrendertype.getRenderType(), iscorecriteria$enumrendertype); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Score.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Score.java new file mode 100644 index 0000000..25622ba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Score.java @@ -0,0 +1,117 @@ +package net.minecraft.scoreboard; + +import java.util.Comparator; + +public class Score +{ + /** Used for sorting score by points */ + public static final Comparator SCORE_COMPARATOR = new Comparator() + { + public int compare(Score p_compare_1_, Score p_compare_2_) + { + if (p_compare_1_.getScorePoints() > p_compare_2_.getScorePoints()) + { + return 1; + } + else + { + return p_compare_1_.getScorePoints() < p_compare_2_.getScorePoints() ? -1 : p_compare_2_.getPlayerName().compareToIgnoreCase(p_compare_1_.getPlayerName()); + } + } + }; + private final Scoreboard scoreboard; + private final ScoreObjective objective; + private final String scorePlayerName; + private int scorePoints; + private boolean locked; + private boolean forceUpdate; + + public Score(Scoreboard scoreboard, ScoreObjective objective, String playerName) + { + this.scoreboard = scoreboard; + this.objective = objective; + this.scorePlayerName = playerName; + this.forceUpdate = true; + } + + public void increaseScore(int amount) + { + if (this.objective.getCriteria().isReadOnly()) + { + throw new IllegalStateException("Cannot modify read-only score"); + } + else + { + this.setScorePoints(this.getScorePoints() + amount); + } + } + + public void decreaseScore(int amount) + { + if (this.objective.getCriteria().isReadOnly()) + { + throw new IllegalStateException("Cannot modify read-only score"); + } + else + { + this.setScorePoints(this.getScorePoints() - amount); + } + } + + public void incrementScore() + { + if (this.objective.getCriteria().isReadOnly()) + { + throw new IllegalStateException("Cannot modify read-only score"); + } + else + { + this.increaseScore(1); + } + } + + public int getScorePoints() + { + return this.scorePoints; + } + + public void setScorePoints(int points) + { + int i = this.scorePoints; + this.scorePoints = points; + + if (i != points || this.forceUpdate) + { + this.forceUpdate = false; + this.getScoreScoreboard().onScoreUpdated(this); + } + } + + public ScoreObjective getObjective() + { + return this.objective; + } + + /** + * Returns the name of the player this score belongs to + */ + public String getPlayerName() + { + return this.scorePlayerName; + } + + public Scoreboard getScoreScoreboard() + { + return this.scoreboard; + } + + public boolean isLocked() + { + return this.locked; + } + + public void setLocked(boolean locked) + { + this.locked = locked; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteria.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteria.java new file mode 100644 index 0000000..ddf59c6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteria.java @@ -0,0 +1,27 @@ +package net.minecraft.scoreboard; + +public class ScoreCriteria implements IScoreCriteria +{ + private final String dummyName; + + public ScoreCriteria(String name) + { + this.dummyName = name; + IScoreCriteria.INSTANCES.put(name, this); + } + + public String getName() + { + return this.dummyName; + } + + public boolean isReadOnly() + { + return false; + } + + public IScoreCriteria.EnumRenderType getRenderType() + { + return IScoreCriteria.EnumRenderType.INTEGER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaColored.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaColored.java new file mode 100644 index 0000000..0b37b98 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaColored.java @@ -0,0 +1,29 @@ +package net.minecraft.scoreboard; + +import net.minecraft.util.text.TextFormatting; + +public class ScoreCriteriaColored implements IScoreCriteria +{ + private final String goalName; + + public ScoreCriteriaColored(String name, TextFormatting format) + { + this.goalName = name + format.getFriendlyName(); + IScoreCriteria.INSTANCES.put(this.goalName, this); + } + + public String getName() + { + return this.goalName; + } + + public boolean isReadOnly() + { + return false; + } + + public IScoreCriteria.EnumRenderType getRenderType() + { + return IScoreCriteria.EnumRenderType.INTEGER; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaHealth.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaHealth.java new file mode 100644 index 0000000..30e81d6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaHealth.java @@ -0,0 +1,19 @@ +package net.minecraft.scoreboard; + +public class ScoreCriteriaHealth extends ScoreCriteria +{ + public ScoreCriteriaHealth(String name) + { + super(name); + } + + public boolean isReadOnly() + { + return true; + } + + public IScoreCriteria.EnumRenderType getRenderType() + { + return IScoreCriteria.EnumRenderType.HEARTS; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaReadOnly.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaReadOnly.java new file mode 100644 index 0000000..7e3ed7c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaReadOnly.java @@ -0,0 +1,14 @@ +package net.minecraft.scoreboard; + +public class ScoreCriteriaReadOnly extends ScoreCriteria +{ + public ScoreCriteriaReadOnly(String name) + { + super(name); + } + + public boolean isReadOnly() + { + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaStat.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaStat.java new file mode 100644 index 0000000..5bf71e0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreCriteriaStat.java @@ -0,0 +1,14 @@ +package net.minecraft.scoreboard; + +import net.minecraft.stats.StatBase; + +public class ScoreCriteriaStat extends ScoreCriteria +{ + private final StatBase stat; + + public ScoreCriteriaStat(StatBase statIn) + { + super(statIn.statId); + this.stat = statIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreObjective.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreObjective.java new file mode 100644 index 0000000..1cff493 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreObjective.java @@ -0,0 +1,61 @@ +package net.minecraft.scoreboard; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ScoreObjective +{ + private final Scoreboard scoreboard; + private final String name; + /** The ScoreObjectiveCriteria for this objetive */ + private final IScoreCriteria objectiveCriteria; + private IScoreCriteria.EnumRenderType renderType; + private String displayName; + + public ScoreObjective(Scoreboard scoreboard, String nameIn, IScoreCriteria objectiveCriteriaIn) + { + this.scoreboard = scoreboard; + this.name = nameIn; + this.objectiveCriteria = objectiveCriteriaIn; + this.displayName = nameIn; + this.renderType = objectiveCriteriaIn.getRenderType(); + } + + @SideOnly(Side.CLIENT) + public Scoreboard getScoreboard() + { + return this.scoreboard; + } + + public String getName() + { + return this.name; + } + + public IScoreCriteria getCriteria() + { + return this.objectiveCriteria; + } + + public String getDisplayName() + { + return this.displayName; + } + + public void setDisplayName(String nameIn) + { + this.displayName = nameIn; + this.scoreboard.onObjectiveDisplayNameChanged(this); + } + + public IScoreCriteria.EnumRenderType getRenderType() + { + return this.renderType; + } + + public void setRenderType(IScoreCriteria.EnumRenderType type) + { + this.renderType = type; + this.scoreboard.onObjectiveDisplayNameChanged(this); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScorePlayerTeam.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScorePlayerTeam.java new file mode 100644 index 0000000..c399901 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScorePlayerTeam.java @@ -0,0 +1,268 @@ +package net.minecraft.scoreboard; + +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ScorePlayerTeam extends Team +{ + private final Scoreboard scoreboard; + private final String name; + /** A set of all team member usernames. */ + private final Set membershipSet = Sets.newHashSet(); + private String displayName; + private String prefix = ""; + private String suffix = ""; + private boolean allowFriendlyFire = true; + private boolean canSeeFriendlyInvisibles = true; + private Team.EnumVisible nameTagVisibility = Team.EnumVisible.ALWAYS; + private Team.EnumVisible deathMessageVisibility = Team.EnumVisible.ALWAYS; + private TextFormatting color = TextFormatting.RESET; + private Team.CollisionRule collisionRule = Team.CollisionRule.ALWAYS; + + public ScorePlayerTeam(Scoreboard scoreboardIn, String name) + { + this.scoreboard = scoreboardIn; + this.name = name; + this.displayName = name; + } + + /** + * Retrieve the name by which this team is registered in the scoreboard + */ + public String getName() + { + return this.name; + } + + /** + * Gets the display name for this team. + */ + public String getDisplayName() + { + return this.displayName; + } + + /** + * Sets the display name for this team. + */ + public void setDisplayName(String name) + { + if (name == null) + { + throw new IllegalArgumentException("Name cannot be null"); + } + else + { + this.displayName = name; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + } + + /** + * Gets a collection of all members of this team. + */ + public Collection getMembershipCollection() + { + return this.membershipSet; + } + + /** + * Gets the prefix applied before the names of members of this team. Usually a single format code, but may be any + * text. + * + * Note that the prefix is also used to determine the color for the "glowing" effect - see {@link + * net.minecraft.client.renderer.entity.Renderer#getTeamColor Renderer.getTeamColor}. + */ + public String getPrefix() + { + return this.prefix; + } + + /** + * Sets the prefix applied before the names of members of this team. + */ + public void setPrefix(String prefix) + { + if (prefix == null) + { + throw new IllegalArgumentException("Prefix cannot be null"); + } + else + { + this.prefix = prefix; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + } + + /** + * Gets the suffix applied after the names of members of this team. Usually a single reset format code, but may be + * any text. + */ + public String getSuffix() + { + return this.suffix; + } + + /** + * Sets the suffix applied after the names of members of this team. + */ + public void setSuffix(String suffix) + { + this.suffix = suffix; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + + /** + * Formats the given text as a member of this team, using the prefix and suffix. + */ + public String formatString(String input) + { + return this.getPrefix() + input + this.getSuffix(); + } + + /** + * Formats the given text as a member of the given team, using the team's prefix and suffix. + */ + public static String formatPlayerName(@Nullable Team teamIn, String string) + { + return teamIn == null ? string : teamIn.formatString(string); + } + + /** + * Checks whether friendly fire (PVP between members of the team) is allowed. + */ + public boolean getAllowFriendlyFire() + { + return this.allowFriendlyFire; + } + + /** + * Sets whether friendly fire (PVP between members of the team) is allowed. + */ + public void setAllowFriendlyFire(boolean friendlyFire) + { + this.allowFriendlyFire = friendlyFire; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + + /** + * Checks whether members of this team can see other members that are invisible. + */ + public boolean getSeeFriendlyInvisiblesEnabled() + { + return this.canSeeFriendlyInvisibles; + } + + /** + * Sets whether members of this team can see other members that are invisible. + */ + public void setSeeFriendlyInvisiblesEnabled(boolean friendlyInvisibles) + { + this.canSeeFriendlyInvisibles = friendlyInvisibles; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + + /** + * Gets the visibility flags for player name tags. + */ + public Team.EnumVisible getNameTagVisibility() + { + return this.nameTagVisibility; + } + + /** + * Gets the visibility flags for player death messages. + */ + public Team.EnumVisible getDeathMessageVisibility() + { + return this.deathMessageVisibility; + } + + /** + * Sets the visibility flags for player name tags. + */ + public void setNameTagVisibility(Team.EnumVisible visibility) + { + this.nameTagVisibility = visibility; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + + /** + * Sets the visibility flags for player death messages. + */ + public void setDeathMessageVisibility(Team.EnumVisible visibility) + { + this.deathMessageVisibility = visibility; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + + /** + * Gets the rule to be used for handling collisions with members of this team. + */ + public Team.CollisionRule getCollisionRule() + { + return this.collisionRule; + } + + /** + * Sets the rule to be used for handling collisions with members of this team. + */ + public void setCollisionRule(Team.CollisionRule rule) + { + this.collisionRule = rule; + this.scoreboard.broadcastTeamInfoUpdate(this); + } + + /** + * Gets a bitmask containing the friendly fire and invisibles flags. + */ + public int getFriendlyFlags() + { + int i = 0; + + if (this.getAllowFriendlyFire()) + { + i |= 1; + } + + if (this.getSeeFriendlyInvisiblesEnabled()) + { + i |= 2; + } + + return i; + } + + /** + * Sets friendly fire and invisibles flags based off of the given bitmask. + */ + @SideOnly(Side.CLIENT) + public void setFriendlyFlags(int flags) + { + this.setAllowFriendlyFire((flags & 1) > 0); + this.setSeeFriendlyInvisiblesEnabled((flags & 2) > 0); + } + + /** + * Sets the color for this team. The team color is used mainly for team kill objectives and team-specific setDisplay + * usage; it does _not_ affect all situations (for instance, the prefix is used for the glowing effect). + */ + public void setColor(TextFormatting color) + { + this.color = color; + } + + /** + * Gets the color for this team. The team color is used mainly for team kill objectives and team-specific setDisplay + * usage; it does _not_ affect all situations (for instance, the prefix is used for the glowing effect). + */ + public TextFormatting getColor() + { + return this.color; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Scoreboard.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Scoreboard.java new file mode 100644 index 0000000..cc51e57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Scoreboard.java @@ -0,0 +1,539 @@ +package net.minecraft.scoreboard; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.text.TextFormatting; + +public class Scoreboard +{ + /** Map of objective names to ScoreObjective objects. */ + private final Map scoreObjectives = Maps.newHashMap(); + /** Map of IScoreObjectiveCriteria objects to ScoreObjective objects. */ + private final Map> scoreObjectiveCriterias = Maps.>newHashMap(); + /** Map of entities name to ScoreObjective objects. */ + private final Map> entitiesScoreObjectives = Maps.>newHashMap(); + /** Index 0 is tab menu, 1 is sidebar, and 2 is below name */ + private final ScoreObjective[] objectiveDisplaySlots = new ScoreObjective[19]; + /** Map of teamnames to ScorePlayerTeam instances */ + private final Map teams = Maps.newHashMap(); + /** Map of usernames to ScorePlayerTeam objects. */ + private final Map teamMemberships = Maps.newHashMap(); + private static String[] displaySlots; + + /** + * Returns a ScoreObjective for the objective name + */ + @Nullable + public ScoreObjective getObjective(String name) + { + return this.scoreObjectives.get(name); + } + + /** + * Create and returns the score objective for the given name and ScoreCriteria + */ + public ScoreObjective addScoreObjective(String name, IScoreCriteria criteria) + { + if (name.length() > 16) + { + throw new IllegalArgumentException("The objective name '" + name + "' is too long!"); + } + else + { + ScoreObjective scoreobjective = this.getObjective(name); + + if (scoreobjective != null) + { + throw new IllegalArgumentException("An objective with the name '" + name + "' already exists!"); + } + else + { + scoreobjective = new ScoreObjective(this, name, criteria); + List list = (List)this.scoreObjectiveCriterias.get(criteria); + + if (list == null) + { + list = Lists.newArrayList(); + this.scoreObjectiveCriterias.put(criteria, list); + } + + list.add(scoreobjective); + this.scoreObjectives.put(name, scoreobjective); + this.onScoreObjectiveAdded(scoreobjective); + return scoreobjective; + } + } + } + + /** + * Returns all the objectives for the given criteria + */ + public Collection getObjectivesFromCriteria(IScoreCriteria criteria) + { + Collection collection = (Collection)this.scoreObjectiveCriterias.get(criteria); + return collection == null ? Lists.newArrayList() : Lists.newArrayList(collection); + } + + /** + * Returns if the entity has the given ScoreObjective + */ + public boolean entityHasObjective(String name, ScoreObjective objective) + { + Map map = (Map)this.entitiesScoreObjectives.get(name); + + if (map == null) + { + return false; + } + else + { + Score score = map.get(objective); + return score != null; + } + } + + /** + * Get a player's score or create it if it does not exist + */ + public Score getOrCreateScore(String username, ScoreObjective objective) + { + if (username.length() > 40) + { + throw new IllegalArgumentException("The player name '" + username + "' is too long!"); + } + else + { + Map map = (Map)this.entitiesScoreObjectives.get(username); + + if (map == null) + { + map = Maps.newHashMap(); + this.entitiesScoreObjectives.put(username, map); + } + + Score score = map.get(objective); + + if (score == null) + { + score = new Score(this, objective, username); + map.put(objective, score); + } + + return score; + } + } + + /** + * Returns an array of Score objects, sorting by Score.getScorePoints() + */ + public Collection getSortedScores(ScoreObjective objective) + { + List list = Lists.newArrayList(); + + for (Map map : this.entitiesScoreObjectives.values()) + { + Score score = map.get(objective); + + if (score != null) + { + list.add(score); + } + } + + Collections.sort(list, Score.SCORE_COMPARATOR); + return list; + } + + public Collection getScoreObjectives() + { + return this.scoreObjectives.values(); + } + + public Collection getObjectiveNames() + { + return this.entitiesScoreObjectives.keySet(); + } + + /** + * Remove the given ScoreObjective for the given Entity name. + */ + public void removeObjectiveFromEntity(String name, ScoreObjective objective) + { + if (objective == null) + { + Map map = (Map)this.entitiesScoreObjectives.remove(name); + + if (map != null) + { + this.broadcastScoreUpdate(name); + } + } + else + { + Map map2 = (Map)this.entitiesScoreObjectives.get(name); + + if (map2 != null) + { + Score score = map2.remove(objective); + + if (map2.size() < 1) + { + Map map1 = (Map)this.entitiesScoreObjectives.remove(name); + + if (map1 != null) + { + this.broadcastScoreUpdate(name); + } + } + else if (score != null) + { + this.broadcastScoreUpdate(name, objective); + } + } + } + } + + public Collection getScores() + { + Collection> collection = this.entitiesScoreObjectives.values(); + List list = Lists.newArrayList(); + + for (Map map : collection) + { + list.addAll(map.values()); + } + + return list; + } + + /** + * Returns all the objectives for the given entity + */ + public Map getObjectivesForEntity(String name) + { + Map map = (Map)this.entitiesScoreObjectives.get(name); + + if (map == null) + { + map = Maps.newHashMap(); + } + + return map; + } + + public void removeObjective(ScoreObjective objective) + { + this.scoreObjectives.remove(objective.getName()); + + for (int i = 0; i < 19; ++i) + { + if (this.getObjectiveInDisplaySlot(i) == objective) + { + this.setObjectiveInDisplaySlot(i, (ScoreObjective)null); + } + } + + List list = (List)this.scoreObjectiveCriterias.get(objective.getCriteria()); + + if (list != null) + { + list.remove(objective); + } + + for (Map map : this.entitiesScoreObjectives.values()) + { + map.remove(objective); + } + + this.onScoreObjectiveRemoved(objective); + } + + /** + * 0 is tab menu, 1 is sidebar, 2 is below name + */ + public void setObjectiveInDisplaySlot(int objectiveSlot, ScoreObjective objective) + { + this.objectiveDisplaySlots[objectiveSlot] = objective; + } + + /** + * 0 is tab menu, 1 is sidebar, 2 is below name + */ + @Nullable + public ScoreObjective getObjectiveInDisplaySlot(int slotIn) + { + return this.objectiveDisplaySlots[slotIn]; + } + + /** + * Retrieve the ScorePlayerTeam instance identified by the passed team name + */ + public ScorePlayerTeam getTeam(String teamName) + { + return this.teams.get(teamName); + } + + public ScorePlayerTeam createTeam(String name) + { + if (name.length() > 16) + { + throw new IllegalArgumentException("The team name '" + name + "' is too long!"); + } + else + { + ScorePlayerTeam scoreplayerteam = this.getTeam(name); + + if (scoreplayerteam != null) + { + throw new IllegalArgumentException("A team with the name '" + name + "' already exists!"); + } + else + { + scoreplayerteam = new ScorePlayerTeam(this, name); + this.teams.put(name, scoreplayerteam); + this.broadcastTeamCreated(scoreplayerteam); + return scoreplayerteam; + } + } + } + + /** + * Removes the team from the scoreboard, updates all player memberships and broadcasts the deletion to all players + */ + public void removeTeam(ScorePlayerTeam playerTeam) + { + this.teams.remove(playerTeam.getName()); + + for (String s : playerTeam.getMembershipCollection()) + { + this.teamMemberships.remove(s); + } + + this.broadcastTeamRemove(playerTeam); + } + + /** + * Adds a player to the given team + */ + public boolean addPlayerToTeam(String player, String newTeam) + { + if (player.length() > 40) + { + throw new IllegalArgumentException("The player name '" + player + "' is too long!"); + } + else if (!this.teams.containsKey(newTeam)) + { + return false; + } + else + { + ScorePlayerTeam scoreplayerteam = this.getTeam(newTeam); + + if (this.getPlayersTeam(player) != null) + { + this.removePlayerFromTeams(player); + } + + this.teamMemberships.put(player, scoreplayerteam); + scoreplayerteam.getMembershipCollection().add(player); + return true; + } + } + + public boolean removePlayerFromTeams(String playerName) + { + ScorePlayerTeam scoreplayerteam = this.getPlayersTeam(playerName); + + if (scoreplayerteam != null) + { + this.removePlayerFromTeam(playerName, scoreplayerteam); + return true; + } + else + { + return false; + } + } + + /** + * Removes the given username from the given ScorePlayerTeam. If the player is not on the team then an + * IllegalStateException is thrown. + */ + public void removePlayerFromTeam(String username, ScorePlayerTeam playerTeam) + { + if (this.getPlayersTeam(username) != playerTeam) + { + throw new IllegalStateException("Player is either on another team or not on any team. Cannot remove from team '" + playerTeam.getName() + "'."); + } + else + { + this.teamMemberships.remove(username); + playerTeam.getMembershipCollection().remove(username); + } + } + + /** + * Retrieve all registered ScorePlayerTeam names + */ + public Collection getTeamNames() + { + return this.teams.keySet(); + } + + /** + * Retrieve all registered ScorePlayerTeam instances + */ + public Collection getTeams() + { + return this.teams.values(); + } + + /** + * Gets the ScorePlayerTeam object for the given username. + */ + @Nullable + public ScorePlayerTeam getPlayersTeam(String username) + { + return this.teamMemberships.get(username); + } + + /** + * Called when a score objective is added + */ + public void onScoreObjectiveAdded(ScoreObjective scoreObjectiveIn) + { + } + + public void onObjectiveDisplayNameChanged(ScoreObjective objective) + { + } + + public void onScoreObjectiveRemoved(ScoreObjective objective) + { + } + + public void onScoreUpdated(Score scoreIn) + { + } + + public void broadcastScoreUpdate(String scoreName) + { + } + + public void broadcastScoreUpdate(String scoreName, ScoreObjective objective) + { + } + + /** + * This packet will notify the players that this team is created, and that will register it on the client + */ + public void broadcastTeamCreated(ScorePlayerTeam playerTeam) + { + } + + /** + * This packet will notify the players that this team is updated + */ + public void broadcastTeamInfoUpdate(ScorePlayerTeam playerTeam) + { + } + + public void broadcastTeamRemove(ScorePlayerTeam playerTeam) + { + } + + /** + * Returns 'list' for 0, 'sidebar' for 1, 'belowName for 2, otherwise null. + */ + public static String getObjectiveDisplaySlot(int id) + { + switch (id) + { + case 0: + return "list"; + case 1: + return "sidebar"; + case 2: + return "belowName"; + default: + + if (id >= 3 && id <= 18) + { + TextFormatting textformatting = TextFormatting.fromColorIndex(id - 3); + + if (textformatting != null && textformatting != TextFormatting.RESET) + { + return "sidebar.team." + textformatting.getFriendlyName(); + } + } + + return null; + } + } + + /** + * Returns 0 for (case-insensitive) 'list', 1 for 'sidebar', 2 for 'belowName', otherwise -1. + */ + public static int getObjectiveDisplaySlotNumber(String name) + { + if ("list".equalsIgnoreCase(name)) + { + return 0; + } + else if ("sidebar".equalsIgnoreCase(name)) + { + return 1; + } + else if ("belowName".equalsIgnoreCase(name)) + { + return 2; + } + else + { + if (name.startsWith("sidebar.team.")) + { + String s = name.substring("sidebar.team.".length()); + TextFormatting textformatting = TextFormatting.getValueByName(s); + + if (textformatting != null && textformatting.getColorIndex() >= 0) + { + return textformatting.getColorIndex() + 3; + } + } + + return -1; + } + } + + public static String[] getDisplaySlotStrings() + { + if (displaySlots == null) + { + displaySlots = new String[19]; + + for (int i = 0; i < 19; ++i) + { + displaySlots[i] = getObjectiveDisplaySlot(i); + } + } + + return displaySlots; + } + + public void removeEntity(Entity entityIn) + { + if (entityIn != null && !(entityIn instanceof EntityPlayer) && !entityIn.isEntityAlive()) + { + String s = entityIn.getCachedUniqueIdString(); + this.removeObjectiveFromEntity(s, (ScoreObjective)null); + this.removePlayerFromTeams(s); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreboardSaveData.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreboardSaveData.java new file mode 100644 index 0000000..fd32134 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ScoreboardSaveData.java @@ -0,0 +1,318 @@ +package net.minecraft.scoreboard; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.storage.WorldSavedData; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ScoreboardSaveData extends WorldSavedData +{ + private static final Logger LOGGER = LogManager.getLogger(); + private Scoreboard scoreboard; + private NBTTagCompound delayedInitNbt; + + public ScoreboardSaveData() + { + this("scoreboard"); + } + + public ScoreboardSaveData(String name) + { + super(name); + } + + public void setScoreboard(Scoreboard scoreboardIn) + { + this.scoreboard = scoreboardIn; + + if (this.delayedInitNbt != null) + { + this.readFromNBT(this.delayedInitNbt); + } + } + + /** + * reads in data from the NBTTagCompound into this MapDataBase + */ + public void readFromNBT(NBTTagCompound nbt) + { + if (this.scoreboard == null) + { + this.delayedInitNbt = nbt; + } + else + { + this.readObjectives(nbt.getTagList("Objectives", 10)); + this.readScores(nbt.getTagList("PlayerScores", 10)); + + if (nbt.hasKey("DisplaySlots", 10)) + { + this.readDisplayConfig(nbt.getCompoundTag("DisplaySlots")); + } + + if (nbt.hasKey("Teams", 9)) + { + this.readTeams(nbt.getTagList("Teams", 10)); + } + } + } + + protected void readTeams(NBTTagList tagList) + { + for (int i = 0; i < tagList.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = tagList.getCompoundTagAt(i); + String s = nbttagcompound.getString("Name"); + + if (s.length() > 16) + { + s = s.substring(0, 16); + } + + ScorePlayerTeam scoreplayerteam = this.scoreboard.createTeam(s); + String s1 = nbttagcompound.getString("DisplayName"); + + if (s1.length() > 32) + { + s1 = s1.substring(0, 32); + } + + scoreplayerteam.setDisplayName(s1); + + if (nbttagcompound.hasKey("TeamColor", 8)) + { + scoreplayerteam.setColor(TextFormatting.getValueByName(nbttagcompound.getString("TeamColor"))); + } + + scoreplayerteam.setPrefix(nbttagcompound.getString("Prefix")); + scoreplayerteam.setSuffix(nbttagcompound.getString("Suffix")); + + if (nbttagcompound.hasKey("AllowFriendlyFire", 99)) + { + scoreplayerteam.setAllowFriendlyFire(nbttagcompound.getBoolean("AllowFriendlyFire")); + } + + if (nbttagcompound.hasKey("SeeFriendlyInvisibles", 99)) + { + scoreplayerteam.setSeeFriendlyInvisiblesEnabled(nbttagcompound.getBoolean("SeeFriendlyInvisibles")); + } + + if (nbttagcompound.hasKey("NameTagVisibility", 8)) + { + Team.EnumVisible team$enumvisible = Team.EnumVisible.getByName(nbttagcompound.getString("NameTagVisibility")); + + if (team$enumvisible != null) + { + scoreplayerteam.setNameTagVisibility(team$enumvisible); + } + } + + if (nbttagcompound.hasKey("DeathMessageVisibility", 8)) + { + Team.EnumVisible team$enumvisible1 = Team.EnumVisible.getByName(nbttagcompound.getString("DeathMessageVisibility")); + + if (team$enumvisible1 != null) + { + scoreplayerteam.setDeathMessageVisibility(team$enumvisible1); + } + } + + if (nbttagcompound.hasKey("CollisionRule", 8)) + { + Team.CollisionRule team$collisionrule = Team.CollisionRule.getByName(nbttagcompound.getString("CollisionRule")); + + if (team$collisionrule != null) + { + scoreplayerteam.setCollisionRule(team$collisionrule); + } + } + + this.loadTeamPlayers(scoreplayerteam, nbttagcompound.getTagList("Players", 8)); + } + } + + protected void loadTeamPlayers(ScorePlayerTeam playerTeam, NBTTagList tagList) + { + for (int i = 0; i < tagList.tagCount(); ++i) + { + this.scoreboard.addPlayerToTeam(tagList.getStringTagAt(i), playerTeam.getName()); + } + } + + protected void readDisplayConfig(NBTTagCompound compound) + { + for (int i = 0; i < 19; ++i) + { + if (compound.hasKey("slot_" + i, 8)) + { + String s = compound.getString("slot_" + i); + ScoreObjective scoreobjective = this.scoreboard.getObjective(s); + this.scoreboard.setObjectiveInDisplaySlot(i, scoreobjective); + } + } + } + + protected void readObjectives(NBTTagList nbt) + { + for (int i = 0; i < nbt.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbt.getCompoundTagAt(i); + IScoreCriteria iscorecriteria = IScoreCriteria.INSTANCES.get(nbttagcompound.getString("CriteriaName")); + + if (iscorecriteria != null) + { + String s = nbttagcompound.getString("Name"); + + if (s.length() > 16) + { + s = s.substring(0, 16); + } + + ScoreObjective scoreobjective = this.scoreboard.addScoreObjective(s, iscorecriteria); + scoreobjective.setDisplayName(nbttagcompound.getString("DisplayName")); + scoreobjective.setRenderType(IScoreCriteria.EnumRenderType.getByName(nbttagcompound.getString("RenderType"))); + } + } + } + + protected void readScores(NBTTagList nbt) + { + for (int i = 0; i < nbt.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbt.getCompoundTagAt(i); + ScoreObjective scoreobjective = this.scoreboard.getObjective(nbttagcompound.getString("Objective")); + String s = nbttagcompound.getString("Name"); + + if (s.length() > 40) + { + s = s.substring(0, 40); + } + + Score score = this.scoreboard.getOrCreateScore(s, scoreobjective); + score.setScorePoints(nbttagcompound.getInteger("Score")); + + if (nbttagcompound.hasKey("Locked")) + { + score.setLocked(nbttagcompound.getBoolean("Locked")); + } + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + if (this.scoreboard == null) + { + LOGGER.warn("Tried to save scoreboard without having a scoreboard..."); + return compound; + } + else + { + compound.setTag("Objectives", this.objectivesToNbt()); + compound.setTag("PlayerScores", this.scoresToNbt()); + compound.setTag("Teams", this.teamsToNbt()); + this.fillInDisplaySlots(compound); + return compound; + } + } + + protected NBTTagList teamsToNbt() + { + NBTTagList nbttaglist = new NBTTagList(); + + for (ScorePlayerTeam scoreplayerteam : this.scoreboard.getTeams()) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("Name", scoreplayerteam.getName()); + nbttagcompound.setString("DisplayName", scoreplayerteam.getDisplayName()); + + if (scoreplayerteam.getColor().getColorIndex() >= 0) + { + nbttagcompound.setString("TeamColor", scoreplayerteam.getColor().getFriendlyName()); + } + + nbttagcompound.setString("Prefix", scoreplayerteam.getPrefix()); + nbttagcompound.setString("Suffix", scoreplayerteam.getSuffix()); + nbttagcompound.setBoolean("AllowFriendlyFire", scoreplayerteam.getAllowFriendlyFire()); + nbttagcompound.setBoolean("SeeFriendlyInvisibles", scoreplayerteam.getSeeFriendlyInvisiblesEnabled()); + nbttagcompound.setString("NameTagVisibility", scoreplayerteam.getNameTagVisibility().internalName); + nbttagcompound.setString("DeathMessageVisibility", scoreplayerteam.getDeathMessageVisibility().internalName); + nbttagcompound.setString("CollisionRule", scoreplayerteam.getCollisionRule().name); + NBTTagList nbttaglist1 = new NBTTagList(); + + for (String s : scoreplayerteam.getMembershipCollection()) + { + nbttaglist1.appendTag(new NBTTagString(s)); + } + + nbttagcompound.setTag("Players", nbttaglist1); + nbttaglist.appendTag(nbttagcompound); + } + + return nbttaglist; + } + + protected void fillInDisplaySlots(NBTTagCompound compound) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + for (int i = 0; i < 19; ++i) + { + ScoreObjective scoreobjective = this.scoreboard.getObjectiveInDisplaySlot(i); + + if (scoreobjective != null) + { + nbttagcompound.setString("slot_" + i, scoreobjective.getName()); + flag = true; + } + } + + if (flag) + { + compound.setTag("DisplaySlots", nbttagcompound); + } + } + + protected NBTTagList objectivesToNbt() + { + NBTTagList nbttaglist = new NBTTagList(); + + for (ScoreObjective scoreobjective : this.scoreboard.getScoreObjectives()) + { + if (scoreobjective.getCriteria() != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("Name", scoreobjective.getName()); + nbttagcompound.setString("CriteriaName", scoreobjective.getCriteria().getName()); + nbttagcompound.setString("DisplayName", scoreobjective.getDisplayName()); + nbttagcompound.setString("RenderType", scoreobjective.getRenderType().getRenderType()); + nbttaglist.appendTag(nbttagcompound); + } + } + + return nbttaglist; + } + + protected NBTTagList scoresToNbt() + { + NBTTagList nbttaglist = new NBTTagList(); + + for (Score score : this.scoreboard.getScores()) + { + if (score.getObjective() != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("Name", score.getPlayerName()); + nbttagcompound.setString("Objective", score.getObjective().getName()); + nbttagcompound.setInteger("Score", score.getScorePoints()); + nbttagcompound.setBoolean("Locked", score.isLocked()); + nbttaglist.appendTag(nbttagcompound); + } + } + + return nbttaglist; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ServerScoreboard.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ServerScoreboard.java new file mode 100644 index 0000000..978cfdd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/ServerScoreboard.java @@ -0,0 +1,272 @@ +package net.minecraft.scoreboard; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.SPacketDisplayObjective; +import net.minecraft.network.play.server.SPacketScoreboardObjective; +import net.minecraft.network.play.server.SPacketTeams; +import net.minecraft.network.play.server.SPacketUpdateScore; +import net.minecraft.server.MinecraftServer; + +public class ServerScoreboard extends Scoreboard +{ + private final MinecraftServer scoreboardMCServer; + private final Set addedObjectives = Sets.newHashSet(); + private Runnable[] dirtyRunnables = new Runnable[0]; + + public ServerScoreboard(MinecraftServer mcServer) + { + this.scoreboardMCServer = mcServer; + } + + public void onScoreUpdated(Score scoreIn) + { + super.onScoreUpdated(scoreIn); + + if (this.addedObjectives.contains(scoreIn.getObjective())) + { + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketUpdateScore(scoreIn)); + } + + this.markSaveDataDirty(); + } + + public void broadcastScoreUpdate(String scoreName) + { + super.broadcastScoreUpdate(scoreName); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketUpdateScore(scoreName)); + this.markSaveDataDirty(); + } + + public void broadcastScoreUpdate(String scoreName, ScoreObjective objective) + { + super.broadcastScoreUpdate(scoreName, objective); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketUpdateScore(scoreName, objective)); + this.markSaveDataDirty(); + } + + /** + * 0 is tab menu, 1 is sidebar, 2 is below name + */ + public void setObjectiveInDisplaySlot(int objectiveSlot, ScoreObjective objective) + { + ScoreObjective scoreobjective = this.getObjectiveInDisplaySlot(objectiveSlot); + super.setObjectiveInDisplaySlot(objectiveSlot, objective); + + if (scoreobjective != objective && scoreobjective != null) + { + if (this.getObjectiveDisplaySlotCount(scoreobjective) > 0) + { + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketDisplayObjective(objectiveSlot, objective)); + } + else + { + this.sendDisplaySlotRemovalPackets(scoreobjective); + } + } + + if (objective != null) + { + if (this.addedObjectives.contains(objective)) + { + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketDisplayObjective(objectiveSlot, objective)); + } + else + { + this.addObjective(objective); + } + } + + this.markSaveDataDirty(); + } + + /** + * Adds a player to the given team + */ + public boolean addPlayerToTeam(String player, String newTeam) + { + if (super.addPlayerToTeam(player, newTeam)) + { + ScorePlayerTeam scoreplayerteam = this.getTeam(newTeam); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketTeams(scoreplayerteam, Arrays.asList(player), 3)); + this.markSaveDataDirty(); + return true; + } + else + { + return false; + } + } + + /** + * Removes the given username from the given ScorePlayerTeam. If the player is not on the team then an + * IllegalStateException is thrown. + */ + public void removePlayerFromTeam(String username, ScorePlayerTeam playerTeam) + { + super.removePlayerFromTeam(username, playerTeam); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketTeams(playerTeam, Arrays.asList(username), 4)); + this.markSaveDataDirty(); + } + + /** + * Called when a score objective is added + */ + public void onScoreObjectiveAdded(ScoreObjective scoreObjectiveIn) + { + super.onScoreObjectiveAdded(scoreObjectiveIn); + this.markSaveDataDirty(); + } + + public void onObjectiveDisplayNameChanged(ScoreObjective objective) + { + super.onObjectiveDisplayNameChanged(objective); + + if (this.addedObjectives.contains(objective)) + { + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketScoreboardObjective(objective, 2)); + } + + this.markSaveDataDirty(); + } + + public void onScoreObjectiveRemoved(ScoreObjective objective) + { + super.onScoreObjectiveRemoved(objective); + + if (this.addedObjectives.contains(objective)) + { + this.sendDisplaySlotRemovalPackets(objective); + } + + this.markSaveDataDirty(); + } + + /** + * This packet will notify the players that this team is created, and that will register it on the client + */ + public void broadcastTeamCreated(ScorePlayerTeam playerTeam) + { + super.broadcastTeamCreated(playerTeam); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketTeams(playerTeam, 0)); + this.markSaveDataDirty(); + } + + /** + * This packet will notify the players that this team is updated + */ + public void broadcastTeamInfoUpdate(ScorePlayerTeam playerTeam) + { + super.broadcastTeamInfoUpdate(playerTeam); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketTeams(playerTeam, 2)); + this.markSaveDataDirty(); + } + + public void broadcastTeamRemove(ScorePlayerTeam playerTeam) + { + super.broadcastTeamRemove(playerTeam); + this.scoreboardMCServer.getPlayerList().sendPacketToAllPlayers(new SPacketTeams(playerTeam, 1)); + this.markSaveDataDirty(); + } + + public void addDirtyRunnable(Runnable runnable) + { + this.dirtyRunnables = (Runnable[])Arrays.copyOf(this.dirtyRunnables, this.dirtyRunnables.length + 1); + this.dirtyRunnables[this.dirtyRunnables.length - 1] = runnable; + } + + protected void markSaveDataDirty() + { + for (Runnable runnable : this.dirtyRunnables) + { + runnable.run(); + } + } + + public List < Packet> getCreatePackets(ScoreObjective objective) + { + List < Packet> list = Lists. < Packet> newArrayList(); + list.add(new SPacketScoreboardObjective(objective, 0)); + + for (int i = 0; i < 19; ++i) + { + if (this.getObjectiveInDisplaySlot(i) == objective) + { + list.add(new SPacketDisplayObjective(i, objective)); + } + } + + for (Score score : this.getSortedScores(objective)) + { + list.add(new SPacketUpdateScore(score)); + } + + return list; + } + + public void addObjective(ScoreObjective objective) + { + List < Packet> list = this.getCreatePackets(objective); + + for (EntityPlayerMP entityplayermp : this.scoreboardMCServer.getPlayerList().getPlayers()) + { + for (Packet packet : list) + { + entityplayermp.connection.sendPacket(packet); + } + } + + this.addedObjectives.add(objective); + } + + public List < Packet> getDestroyPackets(ScoreObjective p_96548_1_) + { + List < Packet> list = Lists. < Packet> newArrayList(); + list.add(new SPacketScoreboardObjective(p_96548_1_, 1)); + + for (int i = 0; i < 19; ++i) + { + if (this.getObjectiveInDisplaySlot(i) == p_96548_1_) + { + list.add(new SPacketDisplayObjective(i, p_96548_1_)); + } + } + + return list; + } + + public void sendDisplaySlotRemovalPackets(ScoreObjective p_96546_1_) + { + List < Packet> list = this.getDestroyPackets(p_96546_1_); + + for (EntityPlayerMP entityplayermp : this.scoreboardMCServer.getPlayerList().getPlayers()) + { + for (Packet packet : list) + { + entityplayermp.connection.sendPacket(packet); + } + } + + this.addedObjectives.remove(p_96546_1_); + } + + public int getObjectiveDisplaySlotCount(ScoreObjective p_96552_1_) + { + int i = 0; + + for (int j = 0; j < 19; ++j) + { + if (this.getObjectiveInDisplaySlot(j) == p_96552_1_) + { + ++i; + } + } + + return i; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Team.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Team.java new file mode 100644 index 0000000..07d15d0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/Team.java @@ -0,0 +1,149 @@ +package net.minecraft.scoreboard; + +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class Team +{ + /** + * Same as == + */ + public boolean isSameTeam(@Nullable Team other) + { + if (other == null) + { + return false; + } + else + { + return this == other; + } + } + + /** + * Retrieve the name by which this team is registered in the scoreboard + */ + public abstract String getName(); + + /** + * Formats the given text as a member of this team, using the prefix and suffix. + */ + public abstract String formatString(String input); + + /** + * Checks whether members of this team can see other members that are invisible. + */ + @SideOnly(Side.CLIENT) + public abstract boolean getSeeFriendlyInvisiblesEnabled(); + + /** + * Checks whether friendly fire (PVP between members of the team) is allowed. + */ + public abstract boolean getAllowFriendlyFire(); + + /** + * Gets the visibility flags for player name tags. + */ + @SideOnly(Side.CLIENT) + public abstract Team.EnumVisible getNameTagVisibility(); + + /** + * Gets the color for this team. The team color is used mainly for team kill objectives and team-specific setDisplay + * usage; it does _not_ affect all situations (for instance, the prefix is used for the glowing effect). + */ + public abstract TextFormatting getColor(); + + /** + * Gets a collection of all members of this team. + */ + public abstract Collection getMembershipCollection(); + + /** + * Gets the visibility flags for player death messages. + */ + public abstract Team.EnumVisible getDeathMessageVisibility(); + + /** + * Gets the rule to be used for handling collisions with members of this team. + */ + public abstract Team.CollisionRule getCollisionRule(); + + public static enum CollisionRule + { + ALWAYS("always", 0), + NEVER("never", 1), + HIDE_FOR_OTHER_TEAMS("pushOtherTeams", 2), + HIDE_FOR_OWN_TEAM("pushOwnTeam", 3); + + private static final Map nameMap = Maps.newHashMap(); + public final String name; + public final int id; + + public static String[] getNames() + { + return (String[])nameMap.keySet().toArray(new String[nameMap.size()]); + } + + @Nullable + public static Team.CollisionRule getByName(String nameIn) + { + return nameMap.get(nameIn); + } + + private CollisionRule(String nameIn, int idIn) + { + this.name = nameIn; + this.id = idIn; + } + + static + { + for (Team.CollisionRule team$collisionrule : values()) + { + nameMap.put(team$collisionrule.name, team$collisionrule); + } + } + } + + public static enum EnumVisible + { + ALWAYS("always", 0), + NEVER("never", 1), + HIDE_FOR_OTHER_TEAMS("hideForOtherTeams", 2), + HIDE_FOR_OWN_TEAM("hideForOwnTeam", 3); + + private static final Map nameMap = Maps.newHashMap(); + public final String internalName; + public final int id; + + public static String[] getNames() + { + return (String[])nameMap.keySet().toArray(new String[nameMap.size()]); + } + + @Nullable + public static Team.EnumVisible getByName(String nameIn) + { + return nameMap.get(nameIn); + } + + private EnumVisible(String nameIn, int idIn) + { + this.internalName = nameIn; + this.id = idIn; + } + + static + { + for (Team.EnumVisible team$enumvisible : values()) + { + nameMap.put(team$enumvisible.internalName, team$enumvisible); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/scoreboard/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/package-info.java new file mode 100644 index 0000000..d3774c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/scoreboard/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.scoreboard; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/DebugLoggingPrintStream.java b/build/tmp/recompileMc/sources/net/minecraft/server/DebugLoggingPrintStream.java new file mode 100644 index 0000000..4471c25 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/DebugLoggingPrintStream.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import java.io.OutputStream; +import net.minecraft.util.LoggingPrintStream; + +public class DebugLoggingPrintStream extends LoggingPrintStream +{ + public DebugLoggingPrintStream(String domainIn, OutputStream outStream) + { + super(domainIn, outStream); + } + + protected void logString(String string) + { + StackTraceElement[] astacktraceelement = Thread.currentThread().getStackTrace(); + StackTraceElement stacktraceelement = astacktraceelement[Math.min(3, astacktraceelement.length)]; + LOGGER.info("[{}]@.({}:{}): {}", this.domain, stacktraceelement.getFileName(), Integer.valueOf(stacktraceelement.getLineNumber()), string); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/MinecraftServer.java b/build/tmp/recompileMc/sources/net/minecraft/server/MinecraftServer.java new file mode 100644 index 0000000..fddd808 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/MinecraftServer.java @@ -0,0 +1,1844 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Queues; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListenableFutureTask; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufOutputStream; +import io.netty.buffer.Unpooled; +import io.netty.handler.codec.base64.Base64; +import java.awt.GraphicsEnvironment; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.Proxy; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.KeyPair; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Queue; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.FutureTask; +import java.util.function.Supplier; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.minecraft.advancements.AdvancementManager; +import net.minecraft.advancements.FunctionManager; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandManager; +import net.minecraft.command.ICommandSender; +import net.minecraft.command.ServerCommandManager; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Bootstrap; +import net.minecraft.network.NetworkSystem; +import net.minecraft.network.ServerStatusResponse; +import net.minecraft.network.play.server.SPacketTimeUpdate; +import net.minecraft.profiler.ISnooperInfo; +import net.minecraft.profiler.Profiler; +import net.minecraft.profiler.Snooper; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.management.PlayerList; +import net.minecraft.server.management.PlayerProfileCache; +import net.minecraft.util.IProgressUpdate; +import net.minecraft.util.IThreadListener; +import net.minecraft.util.ITickable; +import net.minecraft.util.ReportedException; +import net.minecraft.util.Util; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.DataFixesManager; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.MinecraftException; +import net.minecraft.world.ServerWorldEventHandler; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldServerDemo; +import net.minecraft.world.WorldServerMulti; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; +import net.minecraft.world.chunk.storage.AnvilSaveConverter; +import net.minecraft.world.storage.ISaveFormat; +import net.minecraft.world.storage.ISaveHandler; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class MinecraftServer implements ICommandSender, Runnable, IThreadListener, ISnooperInfo +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final File USER_CACHE_FILE = new File("usercache.json"); + private final ISaveFormat anvilConverterForAnvilFile; + /** The PlayerUsageSnooper instance. */ + private final Snooper usageSnooper = new Snooper("server", this, getCurrentTimeMillis()); + public final File anvilFile; + /** List of names of players who are online. */ + private final List tickables = Lists.newArrayList(); + public final ICommandManager commandManager; + public final Profiler profiler = new Profiler(); + private final NetworkSystem networkSystem; + private final ServerStatusResponse statusResponse = new ServerStatusResponse(); + private final Random random = new Random(); + private final DataFixer dataFixer; + /** The server's hostname. */ + @SideOnly(Side.SERVER) + private String hostname; + /** The server's port. */ + private int serverPort = -1; + /** The server world instances. */ + public WorldServer[] worlds = new WorldServer[0]; + /** The player list for this server */ + private PlayerList playerList; + /** Indicates whether the server is running or not. Set to false to initiate a shutdown. */ + private boolean serverRunning = true; + /** Indicates to other classes that the server is safely stopped. */ + private boolean serverStopped; + /** Incremented every tick. */ + private int tickCounter; + protected final Proxy serverProxy; + /** The task the server is currently working on(and will output on outputPercentRemaining). */ + public String currentTask; + /** The percentage of the current task finished so far. */ + public int percentDone; + /** True if the server is in online mode. */ + private boolean onlineMode; + private boolean preventProxyConnections; + /** True if the server has animals turned on. */ + private boolean canSpawnAnimals; + private boolean canSpawnNPCs; + /** Indicates whether PvP is active on the server or not. */ + private boolean pvpEnabled; + /** Determines if flight is allowed or not. */ + private boolean allowFlight; + /** The server MOTD string. */ + private String motd; + /** Maximum build height. */ + private int buildLimit; + private int maxPlayerIdleMinutes; + public final long[] tickTimeArray = new long[100]; + //public long[][] timeOfLastDimensionTick; + public java.util.Hashtable worldTickTimes = new java.util.Hashtable(); + private KeyPair serverKeyPair; + /** Username of the server owner (for integrated servers) */ + private String serverOwner; + private String folderName; + @SideOnly(Side.CLIENT) + private String worldName; + private boolean isDemo; + private boolean enableBonusChest; + /** The texture pack for the server */ + private String resourcePackUrl = ""; + private String resourcePackHash = ""; + private boolean serverIsRunning; + /** Set when warned for "Can't keep up", which triggers again after 15 seconds. */ + private long timeOfLastWarning; + private String userMessage; + private boolean startProfiling; + private boolean isGamemodeForced; + private final YggdrasilAuthenticationService authService; + private final MinecraftSessionService sessionService; + private final GameProfileRepository profileRepo; + private final PlayerProfileCache profileCache; + private long nanoTimeSinceStatusRefresh; + public final Queue < FutureTask> futureTaskQueue = Queues. < FutureTask> newArrayDeque(); + private Thread serverThread; + private long currentTime = getCurrentTimeMillis(); + @SideOnly(Side.CLIENT) + private boolean worldIconSet; + + public MinecraftServer(File anvilFileIn, Proxy proxyIn, DataFixer dataFixerIn, YggdrasilAuthenticationService authServiceIn, MinecraftSessionService sessionServiceIn, GameProfileRepository profileRepoIn, PlayerProfileCache profileCacheIn) + { + this.serverProxy = proxyIn; + this.authService = authServiceIn; + this.sessionService = sessionServiceIn; + this.profileRepo = profileRepoIn; + this.profileCache = profileCacheIn; + this.anvilFile = anvilFileIn; + this.networkSystem = new NetworkSystem(this); + this.commandManager = this.createCommandManager(); + this.anvilConverterForAnvilFile = new AnvilSaveConverter(anvilFileIn, dataFixerIn); + this.dataFixer = dataFixerIn; + } + + public ServerCommandManager createCommandManager() + { + return new ServerCommandManager(this); + } + + /** + * Initialises the server and starts it. + */ + public abstract boolean init() throws IOException; + + public void convertMapIfNeeded(String worldNameIn) + { + if (this.getActiveAnvilConverter().isOldMapFormat(worldNameIn)) + { + LOGGER.info("Converting map!"); + this.setUserMessage("menu.convertingLevel"); + this.getActiveAnvilConverter().convertMapFormat(worldNameIn, new IProgressUpdate() + { + private long startTime = System.currentTimeMillis(); + /** + * Shows the 'Saving level' string. + */ + public void displaySavingString(String message) + { + } + /** + * Updates the progress bar on the loading screen to the specified amount. + */ + public void setLoadingProgress(int progress) + { + if (System.currentTimeMillis() - this.startTime >= 1000L) + { + this.startTime = System.currentTimeMillis(); + MinecraftServer.LOGGER.info("Converting... {}%", (int)progress); + } + } + /** + * this string, followed by "working..." and then the "% complete" are the 3 lines shown. This resets + * progress to 0, and the WorkingString to "working...". + */ + @SideOnly(Side.CLIENT) + public void resetProgressAndMessage(String message) + { + } + @SideOnly(Side.CLIENT) + public void setDoneWorking() + { + } + /** + * Displays a string on the loading screen supposed to indicate what is being done currently. + */ + public void displayLoadingString(String message) + { + } + }); + } + } + + /** + * Typically "menu.convertingLevel", "menu.loadingLevel" or others. + */ + protected synchronized void setUserMessage(String message) + { + this.userMessage = message; + } + + @Nullable + @SideOnly(Side.CLIENT) + + public synchronized String getUserMessage() + { + return this.userMessage; + } + + public void loadAllWorlds(String saveName, String worldNameIn, long seed, WorldType type, String generatorOptions) + { + this.convertMapIfNeeded(saveName); + this.setUserMessage("menu.loadingLevel"); + ISaveHandler isavehandler = this.anvilConverterForAnvilFile.getSaveLoader(saveName, true); + this.setResourcePackFromWorld(this.getFolderName(), isavehandler); + WorldInfo worldinfo = isavehandler.loadWorldInfo(); + WorldSettings worldsettings; + + if (worldinfo == null) + { + if (this.isDemo()) + { + worldsettings = WorldServerDemo.DEMO_WORLD_SETTINGS; + } + else + { + worldsettings = new WorldSettings(seed, this.getGameType(), this.canStructuresSpawn(), this.isHardcore(), type); + worldsettings.setGeneratorOptions(generatorOptions); + + if (this.enableBonusChest) + { + worldsettings.enableBonusChest(); + } + } + + worldinfo = new WorldInfo(worldsettings, worldNameIn); + } + else + { + worldinfo.setWorldName(worldNameIn); + worldsettings = new WorldSettings(worldinfo); + } + + if (false) { //Forge Dead code, reimplemented below + for (int i = 0; i < this.worlds.length; ++i) + { + int j = 0; + + if (i == 1) + { + j = -1; + } + + if (i == 2) + { + j = 1; + } + + if (i == 0) + { + if (this.isDemo()) + { + this.worlds[i] = (WorldServer)(new WorldServerDemo(this, isavehandler, worldinfo, j, this.profiler)).init(); + } + else + { + this.worlds[i] = (WorldServer)(new WorldServer(this, isavehandler, worldinfo, j, this.profiler)).init(); + } + + this.worlds[i].initialize(worldsettings); + } + else + { + this.worlds[i] = (WorldServer)(new WorldServerMulti(this, isavehandler, j, this.worlds[0], this.profiler)).init(); + } + + this.worlds[i].addEventListener(new ServerWorldEventHandler(this, this.worlds[i])); + + if (!this.isSinglePlayer()) + { + this.worlds[i].getWorldInfo().setGameType(this.getGameType()); + } + } + } //Forge: End dead code + + WorldServer overWorld = (WorldServer)(isDemo() ? new WorldServerDemo(this, isavehandler, worldinfo, 0, profiler).init() : new WorldServer(this, isavehandler, worldinfo, 0, profiler).init()); + overWorld.initialize(worldsettings); + for (int dim : net.minecraftforge.common.DimensionManager.getStaticDimensionIDs()) + { + WorldServer world = (dim == 0 ? overWorld : (WorldServer)new WorldServerMulti(this, isavehandler, dim, overWorld, profiler).init()); + world.addEventListener(new ServerWorldEventHandler(this, world)); + + if (!this.isSinglePlayer()) + { + world.getWorldInfo().setGameType(this.getGameType()); + } + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(world)); + } + + this.playerList.setPlayerManager(new WorldServer[]{ overWorld }); + this.setDifficultyForAllWorlds(this.getDifficulty()); + this.initialWorldChunkLoad(); + } + + public void initialWorldChunkLoad() + { + int i = 16; + int j = 4; + int k = 192; + int l = 625; + int i1 = 0; + this.setUserMessage("menu.generatingTerrain"); + int j1 = 0; + LOGGER.info("Preparing start region for level 0"); + WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(j1); + BlockPos blockpos = worldserver.getSpawnPoint(); + long k1 = getCurrentTimeMillis(); + + for (int l1 = -192; l1 <= 192 && this.isServerRunning(); l1 += 16) + { + for (int i2 = -192; i2 <= 192 && this.isServerRunning(); i2 += 16) + { + long j2 = getCurrentTimeMillis(); + + if (j2 - k1 > 1000L) + { + this.outputPercentRemaining("Preparing spawn area", i1 * 100 / 625); + k1 = j2; + } + + ++i1; + worldserver.getChunkProvider().provideChunk(blockpos.getX() + l1 >> 4, blockpos.getZ() + i2 >> 4); + } + } + + this.clearCurrentTask(); + } + + public void setResourcePackFromWorld(String worldNameIn, ISaveHandler saveHandlerIn) + { + File file1 = new File(saveHandlerIn.getWorldDirectory(), "resources.zip"); + + if (file1.isFile()) + { + try + { + this.setResourcePack("level://" + URLEncoder.encode(worldNameIn, StandardCharsets.UTF_8.toString()) + "/" + "resources.zip", ""); + } + catch (UnsupportedEncodingException var5) + { + LOGGER.warn("Something went wrong url encoding {}", (Object)worldNameIn); + } + } + } + + public abstract boolean canStructuresSpawn(); + + public abstract GameType getGameType(); + + /** + * Get the server's difficulty + */ + public abstract EnumDifficulty getDifficulty(); + + /** + * Defaults to false. + */ + public abstract boolean isHardcore(); + + public abstract int getOpPermissionLevel(); + + /** + * Get if RCON command events should be broadcast to ops + */ + public abstract boolean shouldBroadcastRconToOps(); + + /** + * Get if console command events should be broadcast to ops + */ + public abstract boolean shouldBroadcastConsoleToOps(); + + /** + * Used to display a percent remaining given text and the percentage. + */ + protected void outputPercentRemaining(String message, int percent) + { + this.currentTask = message; + this.percentDone = percent; + LOGGER.info("{}: {}%", message, Integer.valueOf(percent)); + } + + /** + * Set current task to null and set its percentage to 0. + */ + protected void clearCurrentTask() + { + this.currentTask = null; + this.percentDone = 0; + } + + /** + * par1 indicates if a log message should be output. + */ + public void saveAllWorlds(boolean isSilent) + { + for (WorldServer worldserver : this.worlds) + { + if (worldserver != null) + { + if (!isSilent) + { + LOGGER.info("Saving chunks for level '{}'/{}", worldserver.getWorldInfo().getWorldName(), worldserver.provider.getDimensionType().getName()); + } + + try + { + worldserver.saveAllChunks(true, (IProgressUpdate)null); + } + catch (MinecraftException minecraftexception) + { + LOGGER.warn(minecraftexception.getMessage()); + } + } + } + } + + /** + * Saves all necessary data as preparation for stopping the server. + */ + public void stopServer() + { + LOGGER.info("Stopping server"); + + if (this.getNetworkSystem() != null) + { + this.getNetworkSystem().terminateEndpoints(); + } + + if (this.playerList != null) + { + LOGGER.info("Saving players"); + this.playerList.saveAllPlayerData(); + this.playerList.removeAllPlayers(); + } + + if (this.worlds != null) + { + LOGGER.info("Saving worlds"); + + for (WorldServer worldserver : this.worlds) + { + if (worldserver != null) + { + worldserver.disableLevelSaving = false; + } + } + + this.saveAllWorlds(false); + + for (WorldServer worldserver1 : this.worlds) + { + if (worldserver1 != null) + { + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Unload(worldserver1)); + worldserver1.flush(); + } + } + + WorldServer[] tmp = worlds; + for (WorldServer world : tmp) + { + net.minecraftforge.common.DimensionManager.setWorld(world.provider.getDimension(), null, this); + } + } + + if (this.usageSnooper.isSnooperRunning()) + { + this.usageSnooper.stopSnooper(); + } + + CommandBase.setCommandListener(null); // Forge: fix MC-128561 + } + + public boolean isServerRunning() + { + return this.serverRunning; + } + + /** + * Sets the serverRunning variable to false, in order to get the server to shut down. + */ + public void initiateShutdown() + { + this.serverRunning = false; + } + + public void run() + { + try + { + if (this.init()) + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarted(); + this.currentTime = getCurrentTimeMillis(); + long i = 0L; + this.statusResponse.setServerDescription(new TextComponentString(this.motd)); + this.statusResponse.setVersion(new ServerStatusResponse.Version("1.12.2", 340)); + this.applyServerIconToResponse(this.statusResponse); + + while (this.serverRunning) + { + long k = getCurrentTimeMillis(); + long j = k - this.currentTime; + + if (j > 2000L && this.currentTime - this.timeOfLastWarning >= 15000L) + { + LOGGER.warn("Can't keep up! Did the system time change, or is the server overloaded? Running {}ms behind, skipping {} tick(s)", Long.valueOf(j), Long.valueOf(j / 50L)); + j = 2000L; + this.timeOfLastWarning = this.currentTime; + } + + if (j < 0L) + { + LOGGER.warn("Time ran backwards! Did the system time change?"); + j = 0L; + } + + i += j; + this.currentTime = k; + + if (this.worlds[0].areAllPlayersAsleep()) + { + this.tick(); + i = 0L; + } + else + { + while (i > 50L) + { + i -= 50L; + this.tick(); + } + } + + Thread.sleep(Math.max(1L, 50L - i)); + this.serverIsRunning = true; + } + net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStopping(); + net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + } + else + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + this.finalTick((CrashReport)null); + } + } + catch (net.minecraftforge.fml.common.StartupQuery.AbortedException e) + { + // ignore silently + net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + } + catch (Throwable throwable1) + { + LOGGER.error("Encountered an unexpected exception", throwable1); + CrashReport crashreport = null; + + if (throwable1 instanceof ReportedException) + { + crashreport = this.addServerInfoToCrashReport(((ReportedException)throwable1).getCrashReport()); + } + else + { + crashreport = this.addServerInfoToCrashReport(new CrashReport("Exception in server tick loop", throwable1)); + } + + File file1 = new File(new File(this.getDataDirectory(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-server.txt"); + + if (crashreport.saveToFile(file1)) + { + LOGGER.error("This crash report has been saved to: {}", (Object)file1.getAbsolutePath()); + } + else + { + LOGGER.error("We were unable to save this crash report to disk."); + } + + net.minecraftforge.fml.common.FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions + this.finalTick(crashreport); + } + finally + { + try + { + this.stopServer(); + } + catch (Throwable throwable) + { + LOGGER.error("Exception stopping the server", throwable); + } + finally + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStopped(); + this.serverStopped = true; + this.systemExitNow(); + } + } + } + + public void applyServerIconToResponse(ServerStatusResponse response) + { + File file1 = this.getFile("server-icon.png"); + + if (!file1.exists()) + { + file1 = this.getActiveAnvilConverter().getFile(this.getFolderName(), "icon.png"); + } + + if (file1.isFile()) + { + ByteBuf bytebuf = Unpooled.buffer(); + + try + { + BufferedImage bufferedimage = ImageIO.read(file1); + Validate.validState(bufferedimage.getWidth() == 64, "Must be 64 pixels wide"); + Validate.validState(bufferedimage.getHeight() == 64, "Must be 64 pixels high"); + ImageIO.write(bufferedimage, "PNG", new ByteBufOutputStream(bytebuf)); + ByteBuf bytebuf1 = Base64.encode(bytebuf); + response.setFavicon("data:image/png;base64," + bytebuf1.toString(StandardCharsets.UTF_8)); + bytebuf1.release(); // Forge: fix MC-122085 + } + catch (Exception exception) + { + LOGGER.error("Couldn't load server icon", (Throwable)exception); + } + finally + { + bytebuf.release(); + } + } + } + + @SideOnly(Side.CLIENT) + public boolean isWorldIconSet() + { + this.worldIconSet = this.worldIconSet || this.getWorldIconFile().isFile(); + return this.worldIconSet; + } + + @SideOnly(Side.CLIENT) + public File getWorldIconFile() + { + return this.getActiveAnvilConverter().getFile(this.getFolderName(), "icon.png"); + } + + public File getDataDirectory() + { + return new File("."); + } + + /** + * Called on exit from the main run() loop. + */ + public void finalTick(CrashReport report) + { + } + + /** + * Directly calls System.exit(0), instantly killing the program. + */ + public void systemExitNow() + { + } + + /** + * Main function called by run() every loop. + */ + public void tick() + { + long i = System.nanoTime(); + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreServerTick(); + ++this.tickCounter; + + if (this.startProfiling) + { + this.startProfiling = false; + this.profiler.profilingEnabled = true; + this.profiler.clearProfiling(); + } + + this.profiler.startSection("root"); + this.updateTimeLightAndEntities(); + + if (i - this.nanoTimeSinceStatusRefresh >= 5000000000L) + { + this.nanoTimeSinceStatusRefresh = i; + this.statusResponse.setPlayers(new ServerStatusResponse.Players(this.getMaxPlayers(), this.getCurrentPlayerCount())); + GameProfile[] agameprofile = new GameProfile[Math.min(this.getCurrentPlayerCount(), 12)]; + int j = MathHelper.getInt(this.random, 0, this.getCurrentPlayerCount() - agameprofile.length); + + for (int k = 0; k < agameprofile.length; ++k) + { + agameprofile[k] = ((EntityPlayerMP)this.playerList.getPlayers().get(j + k)).getGameProfile(); + } + + Collections.shuffle(Arrays.asList(agameprofile)); + this.statusResponse.getPlayers().setPlayers(agameprofile); + this.statusResponse.invalidateJson(); + } + + if (this.tickCounter % 900 == 0) + { + this.profiler.startSection("save"); + this.playerList.saveAllPlayerData(); + this.saveAllWorlds(true); + this.profiler.endSection(); + } + + this.profiler.startSection("tallying"); + this.tickTimeArray[this.tickCounter % 100] = System.nanoTime() - i; + this.profiler.endSection(); + this.profiler.startSection("snooper"); + + if (!this.usageSnooper.isSnooperRunning() && this.tickCounter > 100) + { + this.usageSnooper.startSnooper(); + } + + if (this.tickCounter % 6000 == 0) + { + this.usageSnooper.addMemoryStatsToSnooper(); + } + + this.profiler.endSection(); + this.profiler.endSection(); + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostServerTick(); + } + + public void updateTimeLightAndEntities() + { + this.profiler.startSection("jobs"); + + synchronized (this.futureTaskQueue) + { + while (!this.futureTaskQueue.isEmpty()) + { + Util.runTask(this.futureTaskQueue.poll(), LOGGER); + } + } + + this.profiler.endStartSection("levels"); + net.minecraftforge.common.chunkio.ChunkIOExecutor.tick(); + + Integer[] ids = net.minecraftforge.common.DimensionManager.getIDs(this.tickCounter % 200 == 0); + for (int x = 0; x < ids.length; x++) + { + int id = ids[x]; + long i = System.nanoTime(); + + if (id == 0 || this.getAllowNether()) + { + WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(id); + this.profiler.func_194340_a(() -> + { + return worldserver.getWorldInfo().getWorldName(); + }); + + if (this.tickCounter % 20 == 0) + { + this.profiler.startSection("timeSync"); + this.playerList.sendPacketToAllPlayersInDimension(new SPacketTimeUpdate(worldserver.getTotalWorldTime(), worldserver.getWorldTime(), worldserver.getGameRules().getBoolean("doDaylightCycle")), worldserver.provider.getDimension()); + this.profiler.endSection(); + } + + this.profiler.startSection("tick"); + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPreWorldTick(worldserver); + + try + { + worldserver.tick(); + } + catch (Throwable throwable1) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable1, "Exception ticking world"); + worldserver.addWorldInfoToCrashReport(crashreport); + throw new ReportedException(crashreport); + } + + try + { + worldserver.updateEntities(); + } + catch (Throwable throwable) + { + CrashReport crashreport1 = CrashReport.makeCrashReport(throwable, "Exception ticking world entities"); + worldserver.addWorldInfoToCrashReport(crashreport1); + throw new ReportedException(crashreport1); + } + + net.minecraftforge.fml.common.FMLCommonHandler.instance().onPostWorldTick(worldserver); + this.profiler.endSection(); + this.profiler.startSection("tracker"); + worldserver.getEntityTracker().tick(); + this.profiler.endSection(); + this.profiler.endSection(); + } + + worldTickTimes.get(id)[this.tickCounter % 100] = System.nanoTime() - i; + } + + this.profiler.endStartSection("dim_unloading"); + net.minecraftforge.common.DimensionManager.unloadWorlds(worldTickTimes); + this.profiler.endStartSection("connection"); + this.getNetworkSystem().networkTick(); + this.profiler.endStartSection("players"); + this.playerList.onTick(); + this.profiler.endStartSection("commandFunctions"); + this.getFunctionManager().update(); + this.profiler.endStartSection("tickables"); + + for (int k = 0; k < this.tickables.size(); ++k) + { + ((ITickable)this.tickables.get(k)).update(); + } + + this.profiler.endSection(); + } + + public boolean getAllowNether() + { + return true; + } + + public void startServerThread() + { + net.minecraftforge.fml.common.StartupQuery.reset(); + this.serverThread = new Thread(net.minecraftforge.fml.common.thread.SidedThreadGroups.SERVER, this, "Server thread"); + this.serverThread.start(); + } + + /** + * Returns a File object from the specified string. + */ + public File getFile(String fileName) + { + return new File(this.getDataDirectory(), fileName); + } + + /** + * Logs the message with a level of WARN. + */ + public void logWarning(String msg) + { + LOGGER.warn(msg); + } + + /** + * Gets the worldServer by the given dimension. + */ + public WorldServer getWorld(int dimension) + { + WorldServer ret = net.minecraftforge.common.DimensionManager.getWorld(dimension, true); + if (ret == null) + { + net.minecraftforge.common.DimensionManager.initDimension(dimension); + ret = net.minecraftforge.common.DimensionManager.getWorld(dimension); + } + return ret; + } + + /** + * Returns the server's Minecraft version as string. + */ + public String getMinecraftVersion() + { + return "1.12.2"; + } + + /** + * Returns the number of players currently on the server. + */ + public int getCurrentPlayerCount() + { + return this.playerList.getCurrentPlayerCount(); + } + + /** + * Returns the maximum number of players allowed on the server. + */ + public int getMaxPlayers() + { + return this.playerList.getMaxPlayers(); + } + + /** + * Returns an array of the usernames of all the connected players. + */ + public String[] getOnlinePlayerNames() + { + return this.playerList.getOnlinePlayerNames(); + } + + /** + * Returns an array of the GameProfiles of all the connected players + */ + public GameProfile[] getOnlinePlayerProfiles() + { + return this.playerList.getOnlinePlayerProfiles(); + } + + public String getServerModName() + { + return net.minecraftforge.fml.common.FMLCommonHandler.instance().getModName(); + } + + /** + * Adds the server info, including from theWorldServer, to the crash report. + */ + public CrashReport addServerInfoToCrashReport(CrashReport report) + { + report.getCategory().addDetail("Profiler Position", new ICrashReportDetail() + { + public String call() throws Exception + { + return MinecraftServer.this.profiler.profilingEnabled ? MinecraftServer.this.profiler.getNameOfLastSection() : "N/A (disabled)"; + } + }); + + if (this.playerList != null) + { + report.getCategory().addDetail("Player Count", new ICrashReportDetail() + { + public String call() + { + return MinecraftServer.this.playerList.getCurrentPlayerCount() + " / " + MinecraftServer.this.playerList.getMaxPlayers() + "; " + MinecraftServer.this.playerList.getPlayers(); + } + }); + } + + return report; + } + + public List getTabCompletions(ICommandSender sender, String input, @Nullable BlockPos pos, boolean hasTargetBlock) + { + List list = Lists.newArrayList(); + boolean flag = input.startsWith("/"); + + if (flag) + { + input = input.substring(1); + } + + if (!flag && !hasTargetBlock) + { + String[] astring = input.split(" ", -1); + String s2 = astring[astring.length - 1]; + + for (String s1 : this.playerList.getOnlinePlayerNames()) + { + if (CommandBase.doesStringStartWith(s2, s1)) + { + list.add(s1); + } + } + + return list; + } + else + { + boolean flag1 = !input.contains(" "); + List list1 = this.commandManager.getTabCompletions(sender, input, pos); + + if (!list1.isEmpty()) + { + for (String s : list1) + { + if (flag1 && !hasTargetBlock) + { + list.add("/" + s); + } + else + { + list.add(s); + } + } + } + + return list; + } + } + + public boolean isAnvilFileSet() + { + return this.anvilFile != null; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "Server"; + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + LOGGER.info(component.getUnformattedText()); + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return true; + } + + public ICommandManager getCommandManager() + { + return this.commandManager; + } + + /** + * Gets KeyPair instanced in MinecraftServer. + */ + public KeyPair getKeyPair() + { + return this.serverKeyPair; + } + + /** + * Returns the username of the server owner (for integrated servers) + */ + public String getServerOwner() + { + return this.serverOwner; + } + + /** + * Sets the username of the owner of this server (in the case of an integrated server) + */ + public void setServerOwner(String owner) + { + this.serverOwner = owner; + } + + public boolean isSinglePlayer() + { + return this.serverOwner != null; + } + + public String getFolderName() + { + return this.folderName; + } + + public void setFolderName(String name) + { + this.folderName = name; + } + + @SideOnly(Side.CLIENT) + public void setWorldName(String worldNameIn) + { + this.worldName = worldNameIn; + } + + @SideOnly(Side.CLIENT) + public String getWorldName() + { + return this.worldName; + } + + public void setKeyPair(KeyPair keyPair) + { + this.serverKeyPair = keyPair; + } + + public void setDifficultyForAllWorlds(EnumDifficulty difficulty) + { + for (WorldServer worldserver1 : this.worlds) + { + if (worldserver1 != null) + { + if (worldserver1.getWorldInfo().isHardcoreModeEnabled()) + { + worldserver1.getWorldInfo().setDifficulty(EnumDifficulty.HARD); + worldserver1.setAllowedSpawnTypes(true, true); + } + else if (this.isSinglePlayer()) + { + worldserver1.getWorldInfo().setDifficulty(difficulty); + worldserver1.setAllowedSpawnTypes(worldserver1.getDifficulty() != EnumDifficulty.PEACEFUL, true); + } + else + { + worldserver1.getWorldInfo().setDifficulty(difficulty); + worldserver1.setAllowedSpawnTypes(this.allowSpawnMonsters(), this.canSpawnAnimals); + } + } + } + } + + public boolean allowSpawnMonsters() + { + return true; + } + + /** + * Gets whether this is a demo or not. + */ + public boolean isDemo() + { + return this.isDemo; + } + + /** + * Sets whether this is a demo or not. + */ + public void setDemo(boolean demo) + { + this.isDemo = demo; + } + + public void canCreateBonusChest(boolean enable) + { + this.enableBonusChest = enable; + } + + public ISaveFormat getActiveAnvilConverter() + { + return this.anvilConverterForAnvilFile; + } + + public String getResourcePackUrl() + { + return this.resourcePackUrl; + } + + public String getResourcePackHash() + { + return this.resourcePackHash; + } + + public void setResourcePack(String url, String hash) + { + this.resourcePackUrl = url; + this.resourcePackHash = hash; + } + + public void addServerStatsToSnooper(Snooper playerSnooper) + { + playerSnooper.addClientStat("whitelist_enabled", Boolean.valueOf(false)); + playerSnooper.addClientStat("whitelist_count", Integer.valueOf(0)); + + if (this.playerList != null) + { + playerSnooper.addClientStat("players_current", Integer.valueOf(this.getCurrentPlayerCount())); + playerSnooper.addClientStat("players_max", Integer.valueOf(this.getMaxPlayers())); + playerSnooper.addClientStat("players_seen", Integer.valueOf(this.playerList.getAvailablePlayerDat().length)); + } + + playerSnooper.addClientStat("uses_auth", Boolean.valueOf(this.onlineMode)); + playerSnooper.addClientStat("gui_state", this.getGuiEnabled() ? "enabled" : "disabled"); + playerSnooper.addClientStat("run_time", Long.valueOf((getCurrentTimeMillis() - playerSnooper.getMinecraftStartTimeMillis()) / 60L * 1000L)); + playerSnooper.addClientStat("avg_tick_ms", Integer.valueOf((int)(MathHelper.average(this.tickTimeArray) * 1.0E-6D))); + int l = 0; + + if (this.worlds != null) + { + for (WorldServer worldserver1 : this.worlds) + { + if (worldserver1 != null) + { + WorldInfo worldinfo = worldserver1.getWorldInfo(); + playerSnooper.addClientStat("world[" + l + "][dimension]", Integer.valueOf(worldserver1.provider.getDimensionType().getId())); + playerSnooper.addClientStat("world[" + l + "][mode]", worldinfo.getGameType()); + playerSnooper.addClientStat("world[" + l + "][difficulty]", worldserver1.getDifficulty()); + playerSnooper.addClientStat("world[" + l + "][hardcore]", Boolean.valueOf(worldinfo.isHardcoreModeEnabled())); + playerSnooper.addClientStat("world[" + l + "][generator_name]", worldinfo.getTerrainType().getName()); + playerSnooper.addClientStat("world[" + l + "][generator_version]", Integer.valueOf(worldinfo.getTerrainType().getVersion())); + playerSnooper.addClientStat("world[" + l + "][height]", Integer.valueOf(this.buildLimit)); + playerSnooper.addClientStat("world[" + l + "][chunks_loaded]", Integer.valueOf(worldserver1.getChunkProvider().getLoadedChunkCount())); + ++l; + } + } + } + + playerSnooper.addClientStat("worlds", Integer.valueOf(l)); + } + + public void addServerTypeToSnooper(Snooper playerSnooper) + { + playerSnooper.addStatToSnooper("singleplayer", Boolean.valueOf(this.isSinglePlayer())); + playerSnooper.addStatToSnooper("server_brand", this.getServerModName()); + playerSnooper.addStatToSnooper("gui_supported", GraphicsEnvironment.isHeadless() ? "headless" : "supported"); + playerSnooper.addStatToSnooper("dedicated", Boolean.valueOf(this.isDedicatedServer())); + } + + /** + * Returns whether snooping is enabled or not. + */ + public boolean isSnooperEnabled() + { + return true; + } + + public abstract boolean isDedicatedServer(); + + public boolean isServerInOnlineMode() + { + return this.onlineMode; + } + + public void setOnlineMode(boolean online) + { + this.onlineMode = online; + } + + public boolean getPreventProxyConnections() + { + return this.preventProxyConnections; + } + + public boolean getCanSpawnAnimals() + { + return this.canSpawnAnimals; + } + + public void setCanSpawnAnimals(boolean spawnAnimals) + { + this.canSpawnAnimals = spawnAnimals; + } + + public boolean getCanSpawnNPCs() + { + return this.canSpawnNPCs; + } + + /** + * Get if native transport should be used. Native transport means linux server performance improvements and + * optimized packet sending/receiving on linux + */ + public abstract boolean shouldUseNativeTransport(); + + public void setCanSpawnNPCs(boolean spawnNpcs) + { + this.canSpawnNPCs = spawnNpcs; + } + + public boolean isPVPEnabled() + { + return this.pvpEnabled; + } + + public void setAllowPvp(boolean allowPvp) + { + this.pvpEnabled = allowPvp; + } + + public boolean isFlightAllowed() + { + return this.allowFlight; + } + + public void setAllowFlight(boolean allow) + { + this.allowFlight = allow; + } + + /** + * Return whether command blocks are enabled. + */ + public abstract boolean isCommandBlockEnabled(); + + public String getMOTD() + { + return this.motd; + } + + public void setMOTD(String motdIn) + { + this.motd = motdIn; + } + + public int getBuildLimit() + { + return this.buildLimit; + } + + public void setBuildLimit(int maxBuildHeight) + { + this.buildLimit = maxBuildHeight; + } + + public boolean isServerStopped() + { + return this.serverStopped; + } + + public PlayerList getPlayerList() + { + return this.playerList; + } + + public void setPlayerList(PlayerList list) + { + this.playerList = list; + } + + /** + * Sets the game type for all worlds. + */ + public void setGameType(GameType gameMode) + { + for (WorldServer worldserver1 : this.worlds) + { + worldserver1.getWorldInfo().setGameType(gameMode); + } + } + + public NetworkSystem getNetworkSystem() + { + return this.networkSystem; + } + + @SideOnly(Side.CLIENT) + public boolean serverIsInRunLoop() + { + return this.serverIsRunning; + } + + public boolean getGuiEnabled() + { + return false; + } + + /** + * On dedicated does nothing. On integrated, sets commandsAllowedForAll, gameType and allows external connections. + */ + public abstract String shareToLAN(GameType type, boolean allowCheats); + + public int getTickCounter() + { + return this.tickCounter; + } + + public void enableProfiling() + { + this.startProfiling = true; + } + + @SideOnly(Side.CLIENT) + public Snooper getPlayerUsageSnooper() + { + return this.usageSnooper; + } + + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, return + * the overworld + */ + public World getEntityWorld() + { + return this.worlds[0]; + } + + public boolean isBlockProtected(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + return false; + } + + /** + * Get the forceGamemode field (whether joining players will be put in their old gamemode or the default one) + */ + public boolean getForceGamemode() + { + return this.isGamemodeForced; + } + + public Proxy getServerProxy() + { + return this.serverProxy; + } + + public static long getCurrentTimeMillis() + { + return System.currentTimeMillis(); + } + + public int getMaxPlayerIdleMinutes() + { + return this.maxPlayerIdleMinutes; + } + + public void setPlayerIdleTimeout(int idleTimeout) + { + this.maxPlayerIdleMinutes = idleTimeout; + } + + public MinecraftSessionService getMinecraftSessionService() + { + return this.sessionService; + } + + public GameProfileRepository getGameProfileRepository() + { + return this.profileRepo; + } + + public PlayerProfileCache getPlayerProfileCache() + { + return this.profileCache; + } + + public ServerStatusResponse getServerStatusResponse() + { + return this.statusResponse; + } + + public void refreshStatusNextTick() + { + this.nanoTimeSinceStatusRefresh = 0L; + } + + @Nullable + public Entity getEntityFromUuid(UUID uuid) + { + for (WorldServer worldserver1 : this.worlds) + { + if (worldserver1 != null) + { + Entity entity = worldserver1.getEntityFromUuid(uuid); + + if (entity != null) + { + return entity; + } + } + } + + return null; + } + + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return this.worlds[0].getGameRules().getBoolean("sendCommandFeedback"); + } + + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return this; + } + + public int getMaxWorldSize() + { + return 29999984; + } + + public ListenableFuture callFromMainThread(Callable callable) + { + Validate.notNull(callable); + + if (!this.isCallingFromMinecraftThread() && !this.isServerStopped()) + { + ListenableFutureTask listenablefuturetask = ListenableFutureTask.create(callable); + + synchronized (this.futureTaskQueue) + { + this.futureTaskQueue.add(listenablefuturetask); + return listenablefuturetask; + } + } + else + { + try + { + return Futures.immediateFuture(callable.call()); + } + catch (Exception exception) + { + return Futures.immediateFailedCheckedFuture(exception); + } + } + } + + public ListenableFuture addScheduledTask(Runnable runnableToSchedule) + { + Validate.notNull(runnableToSchedule); + return this.callFromMainThread(Executors.callable(runnableToSchedule)); + } + + public boolean isCallingFromMinecraftThread() + { + return Thread.currentThread() == this.serverThread; + } + + /** + * The compression treshold. If the packet is larger than the specified amount of bytes, it will be compressed + */ + public int getNetworkCompressionThreshold() + { + return 256; + } + + public int getSpawnRadius(@Nullable WorldServer worldIn) + { + return worldIn != null ? worldIn.getGameRules().getInt("spawnRadius") : 10; + } + + public AdvancementManager getAdvancementManager() + { + return this.worlds[0].getAdvancementManager(); + } + + public FunctionManager getFunctionManager() + { + return this.worlds[0].getFunctionManager(); + } + + public void reload() + { + if (this.isCallingFromMinecraftThread()) + { + this.getPlayerList().saveAllPlayerData(); + this.worlds[0].getLootTableManager().reloadLootTables(); + this.getAdvancementManager().reload(); + this.getFunctionManager().reload(); + this.getPlayerList().reloadResources(); + } + else + { + this.addScheduledTask(this::reload); + } + } + + /** + * "getHostname" is already taken, but both return the hostname. + */ + @SideOnly(Side.SERVER) + public String getServerHostname() + { + return this.hostname; + } + + @SideOnly(Side.SERVER) + public void setHostname(String host) + { + this.hostname = host; + } + + @SideOnly(Side.SERVER) + public void registerTickable(ITickable tickable) + { + this.tickables.add(tickable); + } + + @SideOnly(Side.SERVER) + public static void main(String[] p_main_0_) + { + //Forge: Copied from DedicatedServer.init as to run as early as possible, Old code left in place intentionally. + //Done in good faith with permission: https://github.com/MinecraftForge/MinecraftForge/issues/3659#issuecomment-390467028 + ServerEula eula = new ServerEula(new File("eula.txt")); + if (!eula.hasAcceptedEULA()) + { + LOGGER.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); + eula.createEULAFile(); + return; + } + + Bootstrap.register(); + + try + { + boolean flag = true; + String s = null; + String s1 = "."; + String s2 = null; + boolean flag1 = false; + boolean flag2 = false; + int l = -1; + + for (int i1 = 0; i1 < p_main_0_.length; ++i1) + { + String s3 = p_main_0_[i1]; + String s4 = i1 == p_main_0_.length - 1 ? null : p_main_0_[i1 + 1]; + boolean flag3 = false; + + if (!"nogui".equals(s3) && !"--nogui".equals(s3)) + { + if ("--port".equals(s3) && s4 != null) + { + flag3 = true; + + try + { + l = Integer.parseInt(s4); + } + catch (NumberFormatException var13) + { + ; + } + } + else if ("--singleplayer".equals(s3) && s4 != null) + { + flag3 = true; + s = s4; + } + else if ("--universe".equals(s3) && s4 != null) + { + flag3 = true; + s1 = s4; + } + else if ("--world".equals(s3) && s4 != null) + { + flag3 = true; + s2 = s4; + } + else if ("--demo".equals(s3)) + { + flag1 = true; + } + else if ("--bonusChest".equals(s3)) + { + flag2 = true; + } + } + else + { + flag = false; + } + + if (flag3) + { + ++i1; + } + } + + YggdrasilAuthenticationService yggdrasilauthenticationservice = new YggdrasilAuthenticationService(Proxy.NO_PROXY, UUID.randomUUID().toString()); + MinecraftSessionService minecraftsessionservice = yggdrasilauthenticationservice.createMinecraftSessionService(); + GameProfileRepository gameprofilerepository = yggdrasilauthenticationservice.createProfileRepository(); + PlayerProfileCache playerprofilecache = new PlayerProfileCache(gameprofilerepository, new File(s1, USER_CACHE_FILE.getName())); + final DedicatedServer dedicatedserver = new DedicatedServer(new File(s1), DataFixesManager.createFixer(), yggdrasilauthenticationservice, minecraftsessionservice, gameprofilerepository, playerprofilecache); + + if (s != null) + { + dedicatedserver.setServerOwner(s); + } + + if (s2 != null) + { + dedicatedserver.setFolderName(s2); + } + + if (l >= 0) + { + dedicatedserver.setServerPort(l); + } + + if (flag1) + { + dedicatedserver.setDemo(true); + } + + if (flag2) + { + dedicatedserver.canCreateBonusChest(true); + } + + if (flag && !GraphicsEnvironment.isHeadless()) + { + dedicatedserver.setGuiEnabled(); + } + + dedicatedserver.startServerThread(); + Runtime.getRuntime().addShutdownHook(new Thread("Server Shutdown Thread") + { + public void run() + { + dedicatedserver.stopServer(); + } + }); + } + catch (Exception exception) + { + LOGGER.fatal("Failed to start the minecraft server", (Throwable)exception); + } + } + + /** + * Logs the message with a level of INFO. + */ + @SideOnly(Side.SERVER) + public void logInfo(String msg) + { + LOGGER.info(msg); + } + + /** + * Returns true if debugging is enabled, false otherwise. + */ + @SideOnly(Side.SERVER) + public boolean isDebuggingEnabled() + { + return false; + } + + /** + * Logs the error message with a level of SEVERE. + */ + @SideOnly(Side.SERVER) + public void logSevere(String msg) + { + LOGGER.error(msg); + } + + /** + * If isDebuggingEnabled(), logs the message with a level of INFO. + */ + @SideOnly(Side.SERVER) + public void logDebug(String msg) + { + if (this.isDebuggingEnabled()) + { + LOGGER.info(msg); + } + } + + /** + * Gets serverPort. + */ + @SideOnly(Side.SERVER) + public int getServerPort() + { + return this.serverPort; + } + + @SideOnly(Side.SERVER) + public void setServerPort(int port) + { + this.serverPort = port; + } + + @SideOnly(Side.SERVER) + public void setPreventProxyConnections(boolean p_190517_1_) + { + this.preventProxyConnections = p_190517_1_; + } + + /** + * Return the spawn protection area's size. + */ + @SideOnly(Side.SERVER) + public int getSpawnProtectionSize() + { + return 16; + } + + /** + * Set the forceGamemode field (whether joining players will be put in their old gamemode or the default one) + */ + @SideOnly(Side.SERVER) + public void setForceGamemode(boolean force) + { + this.isGamemodeForced = force; + } + + @SideOnly(Side.SERVER) + public long getCurrentTime() + { + return this.currentTime; + } + + @SideOnly(Side.SERVER) + public Thread getServerThread() + { + return this.serverThread; + } + + public DataFixer getDataFixer() + { + return this.dataFixer; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/ServerEula.java b/build/tmp/recompileMc/sources/net/minecraft/server/ServerEula.java new file mode 100644 index 0000000..0c3a89d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/ServerEula.java @@ -0,0 +1,78 @@ +package net.minecraft.server; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Properties; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class ServerEula +{ + private static final Logger LOG = LogManager.getLogger(); + private final File eulaFile; + private final boolean acceptedEULA; + + public ServerEula(File eulaFile) + { + this.eulaFile = eulaFile; + this.acceptedEULA = this.loadEULAFile(eulaFile); + } + + private boolean loadEULAFile(File inFile) + { + FileInputStream fileinputstream = null; + boolean flag = false; + + try + { + Properties properties = new Properties(); + fileinputstream = new FileInputStream(inFile); + properties.load(fileinputstream); + flag = Boolean.parseBoolean(properties.getProperty("eula", "false")); + } + catch (Exception var8) + { + LOG.warn("Failed to load {}", (Object)inFile); + this.createEULAFile(); + } + finally + { + IOUtils.closeQuietly((InputStream)fileinputstream); + } + + return flag; + } + + public boolean hasAcceptedEULA() + { + return this.acceptedEULA; + } + + public void createEULAFile() + { + FileOutputStream fileoutputstream = null; + + try + { + Properties properties = new Properties(); + fileoutputstream = new FileOutputStream(this.eulaFile); + properties.setProperty("eula", "false"); + properties.store(fileoutputstream, "By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula)."); + } + catch (Exception exception) + { + LOG.warn("Failed to save {}", this.eulaFile, exception); + } + finally + { + IOUtils.closeQuietly((OutputStream)fileoutputstream); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/DedicatedPlayerList.java b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/DedicatedPlayerList.java new file mode 100644 index 0000000..bfb4801 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/DedicatedPlayerList.java @@ -0,0 +1,189 @@ +package net.minecraft.server.dedicated; + +import com.mojang.authlib.GameProfile; +import java.io.IOException; +import net.minecraft.server.management.PlayerList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class DedicatedPlayerList extends PlayerList +{ + private static final Logger LOGGER = LogManager.getLogger(); + + public DedicatedPlayerList(DedicatedServer server) + { + super(server); + this.setViewDistance(server.getIntProperty("view-distance", 10)); + this.maxPlayers = server.getIntProperty("max-players", 20); + this.setWhiteListEnabled(server.getBooleanProperty("white-list", false)); + + if (!server.isSinglePlayer()) + { + this.getBannedPlayers().setLanServer(true); + this.getBannedIPs().setLanServer(true); + } + + this.loadPlayerBanList(); + this.savePlayerBanList(); + this.loadIPBanList(); + this.saveIPBanList(); + this.loadOpsList(); + this.readWhiteList(); + this.saveOpsList(); + + if (!this.getWhitelistedPlayers().getSaveFile().exists()) + { + this.saveWhiteList(); + } + } + + public void setWhiteListEnabled(boolean whitelistEnabled) + { + super.setWhiteListEnabled(whitelistEnabled); + this.getServerInstance().setProperty("white-list", Boolean.valueOf(whitelistEnabled)); + this.getServerInstance().saveProperties(); + } + + public void addOp(GameProfile profile) + { + super.addOp(profile); + this.saveOpsList(); + } + + public void removeOp(GameProfile profile) + { + super.removeOp(profile); + this.saveOpsList(); + } + + public void removePlayerFromWhitelist(GameProfile profile) + { + super.removePlayerFromWhitelist(profile); + this.saveWhiteList(); + } + + public void addWhitelistedPlayer(GameProfile profile) + { + super.addWhitelistedPlayer(profile); + this.saveWhiteList(); + } + + public void reloadWhitelist() + { + this.readWhiteList(); + } + + private void saveIPBanList() + { + try + { + this.getBannedIPs().writeChanges(); + } + catch (IOException ioexception) + { + LOGGER.warn("Failed to save ip banlist: ", (Throwable)ioexception); + } + } + + private void savePlayerBanList() + { + try + { + this.getBannedPlayers().writeChanges(); + } + catch (IOException ioexception) + { + LOGGER.warn("Failed to save user banlist: ", (Throwable)ioexception); + } + } + + private void loadIPBanList() + { + try + { + this.getBannedIPs().readSavedFile(); + } + catch (IOException ioexception) + { + LOGGER.warn("Failed to load ip banlist: ", (Throwable)ioexception); + } + } + + private void loadPlayerBanList() + { + try + { + this.getBannedPlayers().readSavedFile(); + } + catch (IOException ioexception) + { + LOGGER.warn("Failed to load user banlist: ", (Throwable)ioexception); + } + } + + private void loadOpsList() + { + try + { + this.getOppedPlayers().readSavedFile(); + } + catch (Exception exception) + { + LOGGER.warn("Failed to load operators list: ", (Throwable)exception); + } + } + + private void saveOpsList() + { + try + { + this.getOppedPlayers().writeChanges(); + } + catch (Exception exception) + { + LOGGER.warn("Failed to save operators list: ", (Throwable)exception); + } + } + + private void readWhiteList() + { + try + { + this.getWhitelistedPlayers().readSavedFile(); + } + catch (Exception exception) + { + LOGGER.warn("Failed to load white-list: ", (Throwable)exception); + } + } + + private void saveWhiteList() + { + try + { + this.getWhitelistedPlayers().writeChanges(); + } + catch (Exception exception) + { + LOGGER.warn("Failed to save white-list: ", (Throwable)exception); + } + } + + public boolean canJoin(GameProfile profile) + { + return !this.isWhiteListEnabled() || this.canSendCommands(profile) || this.getWhitelistedPlayers().isWhitelisted(profile); + } + + public DedicatedServer getServerInstance() + { + return (DedicatedServer)super.getServerInstance(); + } + + public boolean bypassesPlayerLimit(GameProfile profile) + { + return this.getOppedPlayers().bypassesPlayerLimit(profile); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/DedicatedServer.java b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/DedicatedServer.java new file mode 100644 index 0000000..52164e3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/DedicatedServer.java @@ -0,0 +1,771 @@ +package net.minecraft.server.dedicated; + +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.Proxy; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; +import net.minecraft.command.ICommandSender; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.network.rcon.IServer; +import net.minecraft.network.rcon.RConConsoleSource; +import net.minecraft.network.rcon.RConThreadMain; +import net.minecraft.network.rcon.RConThreadQuery; +import net.minecraft.profiler.Snooper; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.ServerEula; +import net.minecraft.server.gui.MinecraftServerGui; +import net.minecraft.server.management.PlayerProfileCache; +import net.minecraft.server.management.PreYggdrasilConverter; +import net.minecraft.tileentity.TileEntitySkull; +import net.minecraft.util.CryptManager; +import net.minecraft.util.NonNullList; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class DedicatedServer extends MinecraftServer implements IServer +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Pattern RESOURCE_PACK_SHA1_PATTERN = Pattern.compile("^[a-fA-F0-9]{40}$"); + public final List pendingCommandList = Collections.synchronizedList(Lists.newArrayList()); + private RConThreadQuery rconQueryThread; + private final RConConsoleSource rconConsoleSource = new RConConsoleSource(this); + private RConThreadMain rconThread; + private PropertyManager settings; + private ServerEula eula; + private boolean canSpawnStructures; + private GameType gameType; + private boolean guiIsEnabled; + public static boolean allowPlayerLogins = false; + + public DedicatedServer(File anvilFileIn, DataFixer dataFixerIn, YggdrasilAuthenticationService authServiceIn, MinecraftSessionService sessionServiceIn, GameProfileRepository profileRepoIn, PlayerProfileCache profileCacheIn) + { + super(anvilFileIn, Proxy.NO_PROXY, dataFixerIn, authServiceIn, sessionServiceIn, profileRepoIn, profileCacheIn); + Thread thread = new Thread("Server Infinisleeper") + { + { + this.setDaemon(true); + this.start(); + } + public void run() + { + while (true) + { + try + { + Thread.sleep(2147483647L); + } + catch (InterruptedException var2) + { + ; + } + } + } + }; + } + + /** + * Initialises the server and starts it. + */ + public boolean init() throws IOException + { + Thread thread = new Thread("Server console handler") + { + public void run() + { + if (net.minecraftforge.server.console.TerminalHandler.handleCommands(DedicatedServer.this)) return; + BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); + String s4; + + try + { + while (!DedicatedServer.this.isServerStopped() && DedicatedServer.this.isServerRunning() && (s4 = bufferedreader.readLine()) != null) + { + DedicatedServer.this.addPendingCommand(s4, DedicatedServer.this); + } + } + catch (IOException ioexception1) + { + DedicatedServer.LOGGER.error("Exception handling console input", (Throwable)ioexception1); + } + } + }; + thread.setDaemon(true); + thread.start(); + LOGGER.info("Starting minecraft server version 1.12.2"); + + if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) + { + LOGGER.warn("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); + } + + net.minecraftforge.fml.common.FMLCommonHandler.instance().onServerStart(this); + + LOGGER.info("Loading properties"); + this.settings = new PropertyManager(new File("server.properties")); + this.eula = new ServerEula(new File("eula.txt")); + + if (!this.eula.hasAcceptedEULA()) + { + LOGGER.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); + this.eula.createEULAFile(); + return false; + } + else + { + if (this.isSinglePlayer()) + { + this.setHostname("127.0.0.1"); + } + else + { + this.setOnlineMode(this.settings.getBooleanProperty("online-mode", true)); + this.setPreventProxyConnections(this.settings.getBooleanProperty("prevent-proxy-connections", false)); + this.setHostname(this.settings.getStringProperty("server-ip", "")); + } + + this.setCanSpawnAnimals(this.settings.getBooleanProperty("spawn-animals", true)); + this.setCanSpawnNPCs(this.settings.getBooleanProperty("spawn-npcs", true)); + this.setAllowPvp(this.settings.getBooleanProperty("pvp", true)); + this.setAllowFlight(this.settings.getBooleanProperty("allow-flight", false)); + this.setResourcePack(this.settings.getStringProperty("resource-pack", ""), this.loadResourcePackSHA()); + this.setMOTD(this.settings.getStringProperty("motd", "A Minecraft Server")); + this.setForceGamemode(this.settings.getBooleanProperty("force-gamemode", false)); + this.setPlayerIdleTimeout(this.settings.getIntProperty("player-idle-timeout", 0)); + + if (this.settings.getIntProperty("difficulty", 1) < 0) + { + this.settings.setProperty("difficulty", Integer.valueOf(0)); + } + else if (this.settings.getIntProperty("difficulty", 1) > 3) + { + this.settings.setProperty("difficulty", Integer.valueOf(3)); + } + + this.canSpawnStructures = this.settings.getBooleanProperty("generate-structures", true); + int i = this.settings.getIntProperty("gamemode", GameType.SURVIVAL.getID()); + this.gameType = WorldSettings.getGameTypeById(i); + LOGGER.info("Default game type: {}", (Object)this.gameType); + InetAddress inetaddress = null; + + if (!this.getServerHostname().isEmpty()) + { + inetaddress = InetAddress.getByName(this.getServerHostname()); + } + + if (this.getServerPort() < 0) + { + this.setServerPort(this.settings.getIntProperty("server-port", 25565)); + } + + LOGGER.info("Generating keypair"); + this.setKeyPair(CryptManager.generateKeyPair()); + LOGGER.info("Starting Minecraft server on {}:{}", this.getServerHostname().isEmpty() ? "*" : this.getServerHostname(), Integer.valueOf(this.getServerPort())); + + try + { + this.getNetworkSystem().addLanEndpoint(inetaddress, this.getServerPort()); + } + catch (IOException ioexception) + { + LOGGER.warn("**** FAILED TO BIND TO PORT!"); + LOGGER.warn("The exception was: {}", (Object)ioexception.toString()); + LOGGER.warn("Perhaps a server is already running on that port?"); + return false; + } + + if (!this.isServerInOnlineMode()) + { + LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); + LOGGER.warn("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose."); + LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); + } + + if (this.convertFiles()) + { + this.getPlayerProfileCache().save(); + } + + if (!PreYggdrasilConverter.tryConvert(this.settings)) + { + return false; + } + else + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().onServerStarted(); + this.setPlayerList(new DedicatedPlayerList(this)); + long j = System.nanoTime(); + + if (this.getFolderName() == null) + { + this.setFolderName(this.settings.getStringProperty("level-name", "world")); + } + + String s = this.settings.getStringProperty("level-seed", ""); + String s1 = this.settings.getStringProperty("level-type", "DEFAULT"); + String s2 = this.settings.getStringProperty("generator-settings", ""); + long k = (new Random()).nextLong(); + + if (!s.isEmpty()) + { + try + { + long l = Long.parseLong(s); + + if (l != 0L) + { + k = l; + } + } + catch (NumberFormatException var16) + { + k = (long)s.hashCode(); + } + } + + WorldType worldtype = WorldType.parseWorldType(s1); + + if (worldtype == null) + { + worldtype = WorldType.DEFAULT; + } + + this.isCommandBlockEnabled(); + this.getOpPermissionLevel(); + this.isSnooperEnabled(); + this.getNetworkCompressionThreshold(); + this.setBuildLimit(this.settings.getIntProperty("max-build-height", 256)); + this.setBuildLimit((this.getBuildLimit() + 8) / 16 * 16); + this.setBuildLimit(MathHelper.clamp(this.getBuildLimit(), 64, 256)); + this.settings.setProperty("max-build-height", Integer.valueOf(this.getBuildLimit())); + TileEntitySkull.setProfileCache(this.getPlayerProfileCache()); + TileEntitySkull.setSessionService(this.getMinecraftSessionService()); + PlayerProfileCache.setOnlineMode(this.isServerInOnlineMode()); + if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerAboutToStart(this)) return false; + LOGGER.info("Preparing level \"{}\"", (Object)this.getFolderName()); + this.loadAllWorlds(this.getFolderName(), this.getFolderName(), k, worldtype, s2); + long i1 = System.nanoTime() - j; + String s3 = String.format("%.3fs", (double)i1 / 1.0E9D); + LOGGER.info("Done ({})! For help, type \"help\" or \"?\"", (Object)s3); + + if (this.settings.hasProperty("announce-player-achievements")) + { + this.worlds[0].getGameRules().setOrCreateGameRule("announceAdvancements", this.settings.getBooleanProperty("announce-player-achievements", true) ? "true" : "false"); + this.settings.removeProperty("announce-player-achievements"); + this.settings.saveProperties(); + } + + if (this.settings.getBooleanProperty("enable-query", false)) + { + LOGGER.info("Starting GS4 status listener"); + this.rconQueryThread = new RConThreadQuery(this); + this.rconQueryThread.startThread(); + } + + if (this.settings.getBooleanProperty("enable-rcon", false)) + { + LOGGER.info("Starting remote control listener"); + this.rconThread = new RConThreadMain(this); + this.rconThread.startThread(); + } + + if (this.getMaxTickTime() > 0L) + { + Thread thread1 = new Thread(new ServerHangWatchdog(this)); + thread1.setName("Server Watchdog"); + thread1.setDaemon(true); + thread1.start(); + } + + Items.AIR.getSubItems(CreativeTabs.SEARCH, NonNullList.create()); + // <3 you Grum for this, saves us ~30 patch files! --^ + return net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarting(this); + } + } + } + + public String loadResourcePackSHA() + { + if (this.settings.hasProperty("resource-pack-hash")) + { + if (this.settings.hasProperty("resource-pack-sha1")) + { + LOGGER.warn("resource-pack-hash is deprecated and found along side resource-pack-sha1. resource-pack-hash will be ignored."); + } + else + { + LOGGER.warn("resource-pack-hash is deprecated. Please use resource-pack-sha1 instead."); + this.settings.getStringProperty("resource-pack-sha1", this.settings.getStringProperty("resource-pack-hash", "")); + this.settings.removeProperty("resource-pack-hash"); + } + } + + String s = this.settings.getStringProperty("resource-pack-sha1", ""); + + if (!s.isEmpty() && !RESOURCE_PACK_SHA1_PATTERN.matcher(s).matches()) + { + LOGGER.warn("Invalid sha1 for ressource-pack-sha1"); + } + + if (!this.settings.getStringProperty("resource-pack", "").isEmpty() && s.isEmpty()) + { + LOGGER.warn("You specified a resource pack without providing a sha1 hash. Pack will be updated on the client only if you change the name of the pack."); + } + + return s; + } + + /** + * Sets the game type for all worlds. + */ + public void setGameType(GameType gameMode) + { + super.setGameType(gameMode); + this.gameType = gameMode; + } + + public boolean canStructuresSpawn() + { + return this.canSpawnStructures; + } + + public GameType getGameType() + { + return this.gameType; + } + + /** + * Get the server's difficulty + */ + public EnumDifficulty getDifficulty() + { + return EnumDifficulty.getDifficultyEnum(this.settings.getIntProperty("difficulty", EnumDifficulty.NORMAL.getDifficultyId())); + } + + /** + * Defaults to false. + */ + public boolean isHardcore() + { + return this.settings.getBooleanProperty("hardcore", false); + } + + /** + * Adds the server info, including from theWorldServer, to the crash report. + */ + public CrashReport addServerInfoToCrashReport(CrashReport report) + { + report = super.addServerInfoToCrashReport(report); + report.getCategory().addDetail("Is Modded", new ICrashReportDetail() + { + public String call() throws Exception + { + String s = DedicatedServer.this.getServerModName(); + return !"vanilla".equals(s) ? "Definitely; Server brand changed to '" + s + "'" : "Unknown (can't tell)"; + } + }); + report.getCategory().addDetail("Type", new ICrashReportDetail() + { + public String call() throws Exception + { + return "Dedicated Server (map_server.txt)"; + } + }); + return report; + } + + /** + * Directly calls System.exit(0), instantly killing the program. + */ + public void systemExitNow() + { + System.exit(0); + } + + public void updateTimeLightAndEntities() + { + super.updateTimeLightAndEntities(); + this.executePendingCommands(); + } + + public boolean getAllowNether() + { + return this.settings.getBooleanProperty("allow-nether", true); + } + + public boolean allowSpawnMonsters() + { + return this.settings.getBooleanProperty("spawn-monsters", true); + } + + public void addServerStatsToSnooper(Snooper playerSnooper) + { + playerSnooper.addClientStat("whitelist_enabled", Boolean.valueOf(this.getPlayerList().isWhiteListEnabled())); + playerSnooper.addClientStat("whitelist_count", Integer.valueOf(this.getPlayerList().getWhitelistedPlayerNames().length)); + super.addServerStatsToSnooper(playerSnooper); + } + + /** + * Returns whether snooping is enabled or not. + */ + public boolean isSnooperEnabled() + { + return this.settings.getBooleanProperty("snooper-enabled", true); + } + + public void addPendingCommand(String input, ICommandSender sender) + { + this.pendingCommandList.add(new PendingCommand(input, sender)); + } + + public void executePendingCommands() + { + while (!this.pendingCommandList.isEmpty()) + { + PendingCommand pendingcommand = this.pendingCommandList.remove(0); + this.getCommandManager().executeCommand(pendingcommand.sender, pendingcommand.command); + } + } + + public boolean isDedicatedServer() + { + return true; + } + + /** + * Get if native transport should be used. Native transport means linux server performance improvements and + * optimized packet sending/receiving on linux + */ + public boolean shouldUseNativeTransport() + { + return this.settings.getBooleanProperty("use-native-transport", true); + } + + public DedicatedPlayerList getPlayerList() + { + return (DedicatedPlayerList)super.getPlayerList(); + } + + /** + * Gets an integer property. If it does not exist, set it to the specified value. + */ + public int getIntProperty(String key, int defaultValue) + { + return this.settings.getIntProperty(key, defaultValue); + } + + /** + * Gets a string property. If it does not exist, set it to the specified value. + */ + public String getStringProperty(String key, String defaultValue) + { + return this.settings.getStringProperty(key, defaultValue); + } + + /** + * Gets a boolean property. If it does not exist, set it to the specified value. + */ + public boolean getBooleanProperty(String key, boolean defaultValue) + { + return this.settings.getBooleanProperty(key, defaultValue); + } + + /** + * Saves an Object with the given property name. + */ + public void setProperty(String key, Object value) + { + this.settings.setProperty(key, value); + } + + /** + * Saves all of the server properties to the properties file. + */ + public void saveProperties() + { + this.settings.saveProperties(); + } + + /** + * Returns the filename where server properties are stored + */ + public String getSettingsFilename() + { + File file1 = this.settings.getPropertiesFile(); + return file1 != null ? file1.getAbsolutePath() : "No settings file"; + } + + /** + * Returns the server's hostname. + */ + public String getHostname() + { + return this.getServerHostname(); + } + + /** + * Never used, but "getServerPort" is already taken. + */ + public int getPort() + { + return this.getServerPort(); + } + + /** + * Returns the server message of the day + */ + public String getMotd() + { + return this.getMOTD(); + } + + public void setGuiEnabled() + { + MinecraftServerGui.createServerGui(this); + this.guiIsEnabled = true; + } + + public boolean getGuiEnabled() + { + return this.guiIsEnabled; + } + + /** + * On dedicated does nothing. On integrated, sets commandsAllowedForAll, gameType and allows external connections. + */ + public String shareToLAN(GameType type, boolean allowCheats) + { + return ""; + } + + /** + * Return whether command blocks are enabled. + */ + public boolean isCommandBlockEnabled() + { + return this.settings.getBooleanProperty("enable-command-block", false); + } + + /** + * Return the spawn protection area's size. + */ + public int getSpawnProtectionSize() + { + return this.settings.getIntProperty("spawn-protection", super.getSpawnProtectionSize()); + } + + public boolean isBlockProtected(World worldIn, BlockPos pos, EntityPlayer playerIn) + { + if (worldIn.provider.getDimension() != 0) + { + return false; + } + else if (this.getPlayerList().getOppedPlayers().isEmpty()) + { + return false; + } + else if (this.getPlayerList().canSendCommands(playerIn.getGameProfile())) + { + return false; + } + else if (this.getSpawnProtectionSize() <= 0) + { + return false; + } + else + { + BlockPos blockpos = worldIn.getSpawnPoint(); + int i = MathHelper.abs(pos.getX() - blockpos.getX()); + int j = MathHelper.abs(pos.getZ() - blockpos.getZ()); + int k = Math.max(i, j); + return k <= this.getSpawnProtectionSize(); + } + } + + public int getOpPermissionLevel() + { + return this.settings.getIntProperty("op-permission-level", 4); + } + + public void setPlayerIdleTimeout(int idleTimeout) + { + super.setPlayerIdleTimeout(idleTimeout); + this.settings.setProperty("player-idle-timeout", Integer.valueOf(idleTimeout)); + this.saveProperties(); + } + + /** + * Get if RCON command events should be broadcast to ops + */ + public boolean shouldBroadcastRconToOps() + { + return this.settings.getBooleanProperty("broadcast-rcon-to-ops", true); + } + + /** + * Get if console command events should be broadcast to ops + */ + public boolean shouldBroadcastConsoleToOps() + { + return this.settings.getBooleanProperty("broadcast-console-to-ops", true); + } + + public int getMaxWorldSize() + { + int i = this.settings.getIntProperty("max-world-size", super.getMaxWorldSize()); + + if (i < 1) + { + i = 1; + } + else if (i > super.getMaxWorldSize()) + { + i = super.getMaxWorldSize(); + } + + return i; + } + + /** + * The compression treshold. If the packet is larger than the specified amount of bytes, it will be compressed + */ + public int getNetworkCompressionThreshold() + { + return this.settings.getIntProperty("network-compression-threshold", super.getNetworkCompressionThreshold()); + } + + //Forge: Enable formated text for colors in console. + @Override public void sendMessage(net.minecraft.util.text.ITextComponent message) { LOGGER.info(message.getFormattedText()); } + + protected boolean convertFiles() throws IOException + { + boolean flag = false; + + for (int i = 0; !flag && i <= 2; ++i) + { + if (i > 0) + { + LOGGER.warn("Encountered a problem while converting the user banlist, retrying in a few seconds"); + this.sleepFiveSeconds(); + } + + flag = PreYggdrasilConverter.convertUserBanlist(this); + } + + boolean flag1 = false; + + for (int j = 0; !flag1 && j <= 2; ++j) + { + if (j > 0) + { + LOGGER.warn("Encountered a problem while converting the ip banlist, retrying in a few seconds"); + this.sleepFiveSeconds(); + } + + flag1 = PreYggdrasilConverter.convertIpBanlist(this); + } + + boolean flag2 = false; + + for (int k = 0; !flag2 && k <= 2; ++k) + { + if (k > 0) + { + LOGGER.warn("Encountered a problem while converting the op list, retrying in a few seconds"); + this.sleepFiveSeconds(); + } + + flag2 = PreYggdrasilConverter.convertOplist(this); + } + + boolean flag3 = false; + + for (int l = 0; !flag3 && l <= 2; ++l) + { + if (l > 0) + { + LOGGER.warn("Encountered a problem while converting the whitelist, retrying in a few seconds"); + this.sleepFiveSeconds(); + } + + flag3 = PreYggdrasilConverter.convertWhitelist(this); + } + + boolean flag4 = false; + + for (int i1 = 0; !flag4 && i1 <= 2; ++i1) + { + if (i1 > 0) + { + LOGGER.warn("Encountered a problem while converting the player save files, retrying in a few seconds"); + this.sleepFiveSeconds(); + } + + flag4 = PreYggdrasilConverter.convertSaveFiles(this, this.settings); + } + + return flag || flag1 || flag2 || flag3 || flag4; + } + + private void sleepFiveSeconds() + { + try + { + Thread.sleep(5000L); + } + catch (InterruptedException var2) + { + ; + } + } + + public long getMaxTickTime() + { + return this.settings.getLongProperty("max-tick-time", TimeUnit.MINUTES.toMillis(1L)); + } + + /** + * Used by RCon's Query in the form of "MajorServerMod 1.2.3: MyPlugin 1.3; AnotherPlugin 2.1; AndSoForth 1.0". + */ + public String getPlugins() + { + return ""; + } + + /** + * Handle a command received by an RCon instance + */ + public String handleRConCommand(String command) + { + this.rconConsoleSource.resetLog(); + this.commandManager.executeCommand(this.rconConsoleSource, command); + return this.rconConsoleSource.getLogContents(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/PendingCommand.java b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/PendingCommand.java new file mode 100644 index 0000000..5c6a2ae --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/PendingCommand.java @@ -0,0 +1,19 @@ +package net.minecraft.server.dedicated; + +import net.minecraft.command.ICommandSender; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class PendingCommand +{ + /** The command string. */ + public final String command; + public final ICommandSender sender; + + public PendingCommand(String input, ICommandSender sender) + { + this.command = input; + this.sender = sender; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/PropertyManager.java b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/PropertyManager.java new file mode 100644 index 0000000..0feb0b0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/PropertyManager.java @@ -0,0 +1,192 @@ +package net.minecraft.server.dedicated; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Properties; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class PropertyManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The server properties object. */ + private final Properties serverProperties = new Properties(); + /** The server properties file. */ + private final File serverPropertiesFile; + + public PropertyManager(File propertiesFile) + { + this.serverPropertiesFile = propertiesFile; + + if (propertiesFile.exists()) + { + FileInputStream fileinputstream = null; + + try + { + fileinputstream = new FileInputStream(propertiesFile); + this.serverProperties.load(fileinputstream); + } + catch (Exception exception) + { + LOGGER.warn("Failed to load {}", propertiesFile, exception); + this.generateNewProperties(); + } + finally + { + if (fileinputstream != null) + { + try + { + fileinputstream.close(); + } + catch (IOException var11) + { + ; + } + } + } + } + else + { + LOGGER.warn("{} does not exist", (Object)propertiesFile); + this.generateNewProperties(); + } + } + + /** + * Generates a new properties file. + */ + public void generateNewProperties() + { + LOGGER.info("Generating new properties file"); + this.saveProperties(); + } + + /** + * Writes the properties to the properties file. + */ + public void saveProperties() + { + FileOutputStream fileoutputstream = null; + + try + { + fileoutputstream = new FileOutputStream(this.serverPropertiesFile); + this.serverProperties.store(fileoutputstream, "Minecraft server properties"); + } + catch (Exception exception) + { + LOGGER.warn("Failed to save {}", this.serverPropertiesFile, exception); + this.generateNewProperties(); + } + finally + { + if (fileoutputstream != null) + { + try + { + fileoutputstream.close(); + } + catch (IOException var10) + { + ; + } + } + } + } + + /** + * Returns this PropertyManager's file object used for property saving. + */ + public File getPropertiesFile() + { + return this.serverPropertiesFile; + } + + /** + * Returns a string property. If the property doesn't exist the default is returned. + */ + public String getStringProperty(String key, String defaultValue) + { + if (!this.serverProperties.containsKey(key)) + { + this.serverProperties.setProperty(key, defaultValue); + this.saveProperties(); + this.saveProperties(); + } + + return this.serverProperties.getProperty(key, defaultValue); + } + + /** + * Gets an integer property. If it does not exist, set it to the specified value. + */ + public int getIntProperty(String key, int defaultValue) + { + try + { + return Integer.parseInt(this.getStringProperty(key, "" + defaultValue)); + } + catch (Exception var4) + { + this.serverProperties.setProperty(key, "" + defaultValue); + this.saveProperties(); + return defaultValue; + } + } + + public long getLongProperty(String key, long defaultValue) + { + try + { + return Long.parseLong(this.getStringProperty(key, "" + defaultValue)); + } + catch (Exception var5) + { + this.serverProperties.setProperty(key, "" + defaultValue); + this.saveProperties(); + return defaultValue; + } + } + + /** + * Gets a boolean property. If it does not exist, set it to the specified value. + */ + public boolean getBooleanProperty(String key, boolean defaultValue) + { + try + { + return Boolean.parseBoolean(this.getStringProperty(key, "" + defaultValue)); + } + catch (Exception var4) + { + this.serverProperties.setProperty(key, "" + defaultValue); + this.saveProperties(); + return defaultValue; + } + } + + /** + * Saves an Object with the given property name. + */ + public void setProperty(String key, Object value) + { + this.serverProperties.setProperty(key, "" + value); + } + + public boolean hasProperty(String key) + { + return this.serverProperties.containsKey(key); + } + + public void removeProperty(String key) + { + this.serverProperties.remove(key); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/ServerHangWatchdog.java b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/ServerHangWatchdog.java new file mode 100644 index 0000000..c53b361 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/ServerHangWatchdog.java @@ -0,0 +1,111 @@ +package net.minecraft.server.dedicated; + +import java.io.File; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.server.MinecraftServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class ServerHangWatchdog implements Runnable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final DedicatedServer server; + private final long maxTickTime; + private boolean firstRun = true; + + public ServerHangWatchdog(DedicatedServer server) + { + this.server = server; + this.maxTickTime = server.getMaxTickTime(); + } + + public void run() + { + while (this.server.isServerRunning()) + { + long i = this.server.getCurrentTime(); + long j = MinecraftServer.getCurrentTimeMillis(); + long k = j - i; + + if (k > this.maxTickTime && !this.firstRun) + { + LOGGER.fatal("A single server tick took {} seconds (should be max {})", String.format("%.2f", (float)k / 1000.0F), String.format("%.2f", 0.05F)); + LOGGER.fatal("Considering it to be crashed, server will forcibly shutdown."); + ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean(); + ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true); + StringBuilder stringbuilder = new StringBuilder(); + Error error = new Error(String.format("ServerHangWatchdog detected that a single server tick took %.2f seconds (should be max 0.05)", k / 1000F)); // Forge: don't just make a crash report with a seemingly-inexplicable Error + + for (ThreadInfo threadinfo : athreadinfo) + { + if (threadinfo.getThreadId() == this.server.getServerThread().getId()) + { + error.setStackTrace(threadinfo.getStackTrace()); + } + + stringbuilder.append((Object)threadinfo); + stringbuilder.append("\n"); + } + + CrashReport crashreport = new CrashReport("Watching Server", error); + this.server.addServerInfoToCrashReport(crashreport); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Thread Dump"); + crashreportcategory.addCrashSection("Threads", stringbuilder); + File file1 = new File(new File(this.server.getDataDirectory(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-server.txt"); + + if (crashreport.saveToFile(file1)) + { + LOGGER.error("This crash report has been saved to: {}", (Object)file1.getAbsolutePath()); + } + else + { + LOGGER.error("We were unable to save this crash report to disk."); + } + + this.scheduleHalt(); + } + + this.firstRun = false; + + try + { + Thread.sleep(i + this.maxTickTime - j); + } + catch (InterruptedException var15) + { + ; + } + } + } + + private void scheduleHalt() + { + try + { + Timer timer = new Timer(); + timer.schedule(new TimerTask() + { + public void run() + { + Runtime.getRuntime().halt(1); + } + }, 10000L); + System.exit(1); + } + catch (Throwable var2) + { + Runtime.getRuntime().halt(1); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/package-info.java new file mode 100644 index 0000000..6a2b37a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/dedicated/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.server.dedicated; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/gui/MinecraftServerGui.java b/build/tmp/recompileMc/sources/net/minecraft/server/gui/MinecraftServerGui.java new file mode 100644 index 0000000..7223fd9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/gui/MinecraftServerGui.java @@ -0,0 +1,217 @@ +package net.minecraft.server.gui; + +import com.mojang.util.QueueLogAppender; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollBar; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.SERVER) +public class MinecraftServerGui extends JComponent +{ + private static final Font SERVER_GUI_FONT = new Font("Monospaced", 0, 12); + private static final Logger LOGGER = LogManager.getLogger(); + private final DedicatedServer server; + + /** + * Creates the server GUI and sets it visible for the user. + */ + public static void createServerGui(final DedicatedServer serverIn) + { + try + { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } + catch (Exception var3) + { + ; + } + + MinecraftServerGui minecraftservergui = new MinecraftServerGui(serverIn); + JFrame jframe = new JFrame("Minecraft server"); + jframe.add(minecraftservergui); + jframe.pack(); + jframe.setLocationRelativeTo((Component)null); + jframe.setVisible(true); + jframe.addWindowListener(new WindowAdapter() + { + public void windowClosing(WindowEvent p_windowClosing_1_) + { + serverIn.initiateShutdown(); + + while (!serverIn.isServerStopped()) + { + try + { + Thread.sleep(100L); + } + catch (InterruptedException interruptedexception) + { + interruptedexception.printStackTrace(); + } + } + + System.exit(0); + } + }); + minecraftservergui.latch.countDown(); + } + + public MinecraftServerGui(DedicatedServer serverIn) + { + this.server = serverIn; + this.setPreferredSize(new Dimension(854, 480)); + this.setLayout(new BorderLayout()); + + try + { + this.add(this.getLogComponent(), "Center"); + this.add(this.getStatsComponent(), "West"); + } + catch (Exception exception) + { + LOGGER.error("Couldn't build server GUI", (Throwable)exception); + } + } + + /** + * Generates new StatsComponent and returns it. + */ + private JComponent getStatsComponent() throws Exception + { + JPanel jpanel = new JPanel(new BorderLayout()); + jpanel.add(new StatsComponent(this.server), "North"); + jpanel.add(this.getPlayerListComponent(), "Center"); + jpanel.setBorder(new TitledBorder(new EtchedBorder(), "Stats")); + return jpanel; + } + + /** + * Generates new PlayerListComponent and returns it. + */ + private JComponent getPlayerListComponent() throws Exception + { + JList jlist = new PlayerListComponent(this.server); + JScrollPane jscrollpane = new JScrollPane(jlist, 22, 30); + jscrollpane.setBorder(new TitledBorder(new EtchedBorder(), "Players")); + return jscrollpane; + } + + private JComponent getLogComponent() throws Exception + { + JPanel jpanel = new JPanel(new BorderLayout()); + final JTextArea jtextarea = new JTextArea(); + final JScrollPane jscrollpane = new JScrollPane(jtextarea, 22, 30); + jtextarea.setEditable(false); + jtextarea.setFont(SERVER_GUI_FONT); + final JTextField jtextfield = new JTextField(); + jtextfield.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent p_actionPerformed_1_) + { + String s = jtextfield.getText().trim(); + + if (!s.isEmpty()) + { + MinecraftServerGui.this.server.addPendingCommand(s, MinecraftServerGui.this.server); + } + + jtextfield.setText(""); + } + }); + jtextarea.addFocusListener(new FocusAdapter() + { + public void focusGained(FocusEvent p_focusGained_1_) + { + } + }); + jpanel.add(jscrollpane, "Center"); + jpanel.add(jtextfield, "South"); + jpanel.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat")); + Thread thread = new Thread(new Runnable() + { + public void run() + { + String s; + + while ((s = QueueLogAppender.getNextLogEvent("ServerGuiConsole")) != null) + { + MinecraftServerGui.this.appendLine(jtextarea, jscrollpane, s); + } + } + }); + thread.setDaemon(true); + thread.start(); + return jpanel; + } + + private java.util.concurrent.CountDownLatch latch = new java.util.concurrent.CountDownLatch(1); + public void appendLine(final JTextArea textArea, final JScrollPane scrollPane, final String line) + { + try + { + latch.await(); + } catch (InterruptedException e){} //Prevent logging until after constructor has ended. + if (!SwingUtilities.isEventDispatchThread()) + { + SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + MinecraftServerGui.this.appendLine(textArea, scrollPane, line); + } + }); + } + else + { + Document document = textArea.getDocument(); + JScrollBar jscrollbar = scrollPane.getVerticalScrollBar(); + boolean flag = false; + + if (scrollPane.getViewport().getView() == textArea) + { + flag = (double)jscrollbar.getValue() + jscrollbar.getSize().getHeight() + (double)(SERVER_GUI_FONT.getSize() * 4) > (double)jscrollbar.getMaximum(); + } + + try + { + document.insertString(document.getLength(), line, (AttributeSet)null); + } + catch (BadLocationException var8) + { + ; + } + + if (flag) + { + jscrollbar.setValue(Integer.MAX_VALUE); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/gui/PlayerListComponent.java b/build/tmp/recompileMc/sources/net/minecraft/server/gui/PlayerListComponent.java new file mode 100644 index 0000000..e7586c9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/gui/PlayerListComponent.java @@ -0,0 +1,40 @@ +package net.minecraft.server.gui; + +import java.util.Vector; +import javax.swing.JList; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ITickable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class PlayerListComponent extends JList implements ITickable +{ + private final MinecraftServer server; + private int ticks; + + public PlayerListComponent(MinecraftServer server) + { + this.server = server; + server.registerTickable(this); + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.ticks++ % 20 == 0) + { + Vector vector = new Vector(); + + for (int i = 0; i < this.server.getPlayerList().getPlayers().size(); ++i) + { + vector.add(((EntityPlayerMP)this.server.getPlayerList().getPlayers().get(i)).getName()); + } + + this.setListData(vector); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/gui/StatsComponent.java b/build/tmp/recompileMc/sources/net/minecraft/server/gui/StatsComponent.java new file mode 100644 index 0000000..4c566e8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/gui/StatsComponent.java @@ -0,0 +1,86 @@ +package net.minecraft.server.gui; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.DecimalFormat; +import javax.swing.JComponent; +import javax.swing.Timer; +import net.minecraft.server.MinecraftServer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.SERVER) +public class StatsComponent extends JComponent +{ + private static final DecimalFormat FORMATTER = new DecimalFormat("########0.000"); + private final int[] values = new int[256]; + private int vp; + private final String[] msgs = new String[11]; + private final MinecraftServer server; + + public StatsComponent(MinecraftServer serverIn) + { + this.server = serverIn; + this.setPreferredSize(new Dimension(456, 246)); + this.setMinimumSize(new Dimension(456, 246)); + this.setMaximumSize(new Dimension(456, 246)); + (new Timer(500, new ActionListener() + { + public void actionPerformed(ActionEvent p_actionPerformed_1_) + { + StatsComponent.this.tick(); + } + })).start(); + this.setBackground(Color.BLACK); + } + + private void tick() + { + long i = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.gc(); + this.msgs[0] = "Memory use: " + i / 1024L / 1024L + " mb (" + Runtime.getRuntime().freeMemory() * 100L / Runtime.getRuntime().maxMemory() + "% free)"; + this.msgs[1] = "Avg tick: " + FORMATTER.format(this.mean(this.server.tickTimeArray) * 1.0E-6D) + " ms"; + this.values[this.vp++ & 255] = (int)(i * 100L / Runtime.getRuntime().maxMemory()); + this.repaint(); + } + + private double mean(long[] values) + { + long i = 0L; + + for (long j : values) + { + i += j; + } + + return (double)i / (double)values.length; + } + + public void paint(Graphics p_paint_1_) + { + p_paint_1_.setColor(new Color(16777215)); + p_paint_1_.fillRect(0, 0, 456, 246); + + for (int i = 0; i < 256; ++i) + { + int j = this.values[i + this.vp & 255]; + p_paint_1_.setColor(new Color(j + 28 << 16)); + p_paint_1_.fillRect(i, 100 - j, 1, j); + } + + p_paint_1_.setColor(Color.BLACK); + + for (int k = 0; k < this.msgs.length; ++k) + { + String s = this.msgs[k]; + + if (s != null) + { + p_paint_1_.drawString(s, 32, 116 + k * 16); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/gui/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/server/gui/package-info.java new file mode 100644 index 0000000..c83e664 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/gui/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.server.gui; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedPlayerList.java b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedPlayerList.java new file mode 100644 index 0000000..e494d57 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedPlayerList.java @@ -0,0 +1,56 @@ +package net.minecraft.server.integrated; + +import com.mojang.authlib.GameProfile; +import java.net.SocketAddress; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.management.PlayerList; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class IntegratedPlayerList extends PlayerList +{ + /** Holds the NBT data for the host player's save file, so this can be written to level.dat. */ + private NBTTagCompound hostPlayerData; + + public IntegratedPlayerList(IntegratedServer server) + { + super(server); + this.setViewDistance(10); + } + + /** + * also stores the NBTTags if this is an intergratedPlayerList + */ + protected void writePlayerData(EntityPlayerMP playerIn) + { + if (playerIn.getName().equals(this.getServerInstance().getServerOwner())) + { + this.hostPlayerData = playerIn.writeToNBT(new NBTTagCompound()); + } + + super.writePlayerData(playerIn); + } + + /** + * checks ban-lists, then white-lists, then space for the server. Returns null on success, or an error message + */ + public String allowUserToConnect(SocketAddress address, GameProfile profile) + { + return profile.getName().equalsIgnoreCase(this.getServerInstance().getServerOwner()) && this.getPlayerByUsername(profile.getName()) != null ? "That name is already taken." : super.allowUserToConnect(address, profile); + } + + public IntegratedServer getServerInstance() + { + return (IntegratedServer)super.getServerInstance(); + } + + /** + * On integrated servers, returns the host's player data to be written to level.dat. + */ + public NBTTagCompound getHostPlayerData() + { + return this.hostPlayerData; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedServer.java b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedServer.java new file mode 100644 index 0000000..cdd9b4a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedServer.java @@ -0,0 +1,479 @@ +package net.minecraft.server.integrated; + +import com.google.common.collect.Lists; +import com.google.common.util.concurrent.Futures; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; +import net.minecraft.client.ClientBrandRetriever; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ThreadLanServerPing; +import net.minecraft.command.ServerCommandManager; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.profiler.Snooper; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.management.PlayerProfileCache; +import net.minecraft.util.CryptManager; +import net.minecraft.util.HttpUtil; +import net.minecraft.util.Util; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.GameType; +import net.minecraft.world.ServerWorldEventHandler; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldServerDemo; +import net.minecraft.world.WorldServerMulti; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.WorldType; +import net.minecraft.world.storage.ISaveHandler; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@SideOnly(Side.CLIENT) +public class IntegratedServer extends MinecraftServer +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** The Minecraft instance. */ + private final Minecraft mc; + private final WorldSettings worldSettings; + private boolean isGamePaused; + private boolean isPublic; + private ThreadLanServerPing lanServerPing; + + public IntegratedServer(Minecraft clientIn, String folderNameIn, String worldNameIn, WorldSettings worldSettingsIn, YggdrasilAuthenticationService authServiceIn, MinecraftSessionService sessionServiceIn, GameProfileRepository profileRepoIn, PlayerProfileCache profileCacheIn) + { + super(new File(clientIn.mcDataDir, "saves"), clientIn.getProxy(), clientIn.getDataFixer(), authServiceIn, sessionServiceIn, profileRepoIn, profileCacheIn); + this.setServerOwner(clientIn.getSession().getUsername()); + this.setFolderName(folderNameIn); + this.setWorldName(worldNameIn); + this.setDemo(clientIn.isDemo()); + this.canCreateBonusChest(worldSettingsIn.isBonusChestEnabled()); + this.setBuildLimit(256); + this.setPlayerList(new IntegratedPlayerList(this)); + this.mc = clientIn; + this.worldSettings = this.isDemo() ? WorldServerDemo.DEMO_WORLD_SETTINGS : worldSettingsIn; + } + + public ServerCommandManager createCommandManager() + { + return new IntegratedServerCommandManager(this); + } + + public void loadAllWorlds(String saveName, String worldNameIn, long seed, WorldType type, String generatorOptions) + { + this.convertMapIfNeeded(saveName); + ISaveHandler isavehandler = this.getActiveAnvilConverter().getSaveLoader(saveName, true); + this.setResourcePackFromWorld(this.getFolderName(), isavehandler); + WorldInfo worldinfo = isavehandler.loadWorldInfo(); + + if (worldinfo == null) + { + worldinfo = new WorldInfo(this.worldSettings, worldNameIn); + } + else + { + worldinfo.setWorldName(worldNameIn); + } + + if (false) { //Forge: Dead Code, implement below. + for (int i = 0; i < this.worlds.length; ++i) + { + int j = 0; + + if (i == 1) + { + j = -1; + } + + if (i == 2) + { + j = 1; + } + + if (i == 0) + { + if (this.isDemo()) + { + this.worlds[i] = (WorldServer)(new WorldServerDemo(this, isavehandler, worldinfo, j, this.profiler)).init(); + } + else + { + this.worlds[i] = (WorldServer)(new WorldServer(this, isavehandler, worldinfo, j, this.profiler)).init(); + } + + this.worlds[i].initialize(this.worldSettings); + } + else + { + this.worlds[i] = (WorldServer)(new WorldServerMulti(this, isavehandler, j, this.worlds[0], this.profiler)).init(); + } + + this.worlds[i].addEventListener(new ServerWorldEventHandler(this, this.worlds[i])); + } + }// Forge: End Dead Code + + WorldServer overWorld = (isDemo() ? (WorldServer)(new WorldServerDemo(this, isavehandler, worldinfo, 0, this.profiler)).init() : + (WorldServer)(new WorldServer(this, isavehandler, worldinfo, 0, this.profiler)).init()); + overWorld.initialize(this.worldSettings); + for (int dim : net.minecraftforge.common.DimensionManager.getStaticDimensionIDs()) + { + WorldServer world = (dim == 0 ? overWorld : (WorldServer)(new WorldServerMulti(this, isavehandler, dim, overWorld, this.profiler)).init()); + world.addEventListener(new ServerWorldEventHandler(this, world)); + if (!this.isSinglePlayer()) + { + world.getWorldInfo().setGameType(getGameType()); + } + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.WorldEvent.Load(world)); + } + + this.getPlayerList().setPlayerManager(new WorldServer[]{ overWorld }); + + if (overWorld.getWorldInfo().getDifficulty() == null) + { + this.setDifficultyForAllWorlds(this.mc.gameSettings.difficulty); + } + + this.initialWorldChunkLoad(); + } + + /** + * Initialises the server and starts it. + */ + public boolean init() throws IOException + { + LOGGER.info("Starting integrated minecraft server version 1.12.2"); + this.setOnlineMode(true); + this.setCanSpawnAnimals(true); + this.setCanSpawnNPCs(true); + this.setAllowPvp(true); + this.setAllowFlight(true); + LOGGER.info("Generating keypair"); + this.setKeyPair(CryptManager.generateKeyPair()); + if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerAboutToStart(this)) return false; + this.loadAllWorlds(this.getFolderName(), this.getWorldName(), this.worldSettings.getSeed(), this.worldSettings.getTerrainType(), this.worldSettings.getGeneratorOptions()); + this.setMOTD(this.getServerOwner() + " - " + this.worlds[0].getWorldInfo().getWorldName()); + return net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerStarting(this); + } + + /** + * Main function called by run() every loop. + */ + public void tick() + { + boolean flag = this.isGamePaused; + this.isGamePaused = Minecraft.getMinecraft().getConnection() != null && Minecraft.getMinecraft().isGamePaused(); + + if (!flag && this.isGamePaused) + { + LOGGER.info("Saving and pausing game..."); + this.getPlayerList().saveAllPlayerData(); + this.saveAllWorlds(false); + } + + if (this.isGamePaused) + { + synchronized (this.futureTaskQueue) + { + while (!this.futureTaskQueue.isEmpty()) + { + Util.runTask(this.futureTaskQueue.poll(), LOGGER); + } + } + } + else + { + super.tick(); + + if (this.mc.gameSettings.renderDistanceChunks != this.getPlayerList().getViewDistance()) + { + LOGGER.info("Changing view distance to {}, from {}", Integer.valueOf(this.mc.gameSettings.renderDistanceChunks), Integer.valueOf(this.getPlayerList().getViewDistance())); + this.getPlayerList().setViewDistance(this.mc.gameSettings.renderDistanceChunks); + } + + if (this.mc.world != null) + { + WorldInfo worldinfo1 = this.worlds[0].getWorldInfo(); + WorldInfo worldinfo = this.mc.world.getWorldInfo(); + + if (!worldinfo1.isDifficultyLocked() && worldinfo.getDifficulty() != worldinfo1.getDifficulty()) + { + LOGGER.info("Changing difficulty to {}, from {}", worldinfo.getDifficulty(), worldinfo1.getDifficulty()); + this.setDifficultyForAllWorlds(worldinfo.getDifficulty()); + } + else if (worldinfo.isDifficultyLocked() && !worldinfo1.isDifficultyLocked()) + { + LOGGER.info("Locking difficulty to {}", (Object)worldinfo.getDifficulty()); + + for (WorldServer worldserver : this.worlds) + { + if (worldserver != null) + { + worldserver.getWorldInfo().setDifficultyLocked(true); + } + } + } + } + } + } + + public boolean canStructuresSpawn() + { + return false; + } + + public GameType getGameType() + { + return this.worldSettings.getGameType(); + } + + /** + * Get the server's difficulty + */ + public EnumDifficulty getDifficulty() + { + if (this.mc.world == null) return this.mc.gameSettings.difficulty; // Fix NPE just in case. + return this.mc.world.getWorldInfo().getDifficulty(); + } + + /** + * Defaults to false. + */ + public boolean isHardcore() + { + return this.worldSettings.getHardcoreEnabled(); + } + + /** + * Get if RCON command events should be broadcast to ops + */ + public boolean shouldBroadcastRconToOps() + { + return true; + } + + /** + * Get if console command events should be broadcast to ops + */ + public boolean shouldBroadcastConsoleToOps() + { + return true; + } + + /** + * par1 indicates if a log message should be output. + */ + public void saveAllWorlds(boolean isSilent) + { + super.saveAllWorlds(isSilent); + } + + public File getDataDirectory() + { + return this.mc.mcDataDir; + } + + public boolean isDedicatedServer() + { + return false; + } + + /** + * Get if native transport should be used. Native transport means linux server performance improvements and + * optimized packet sending/receiving on linux + */ + public boolean shouldUseNativeTransport() + { + return false; + } + + /** + * Called on exit from the main run() loop. + */ + public void finalTick(CrashReport report) + { + this.mc.crashed(report); + } + + /** + * Adds the server info, including from theWorldServer, to the crash report. + */ + public CrashReport addServerInfoToCrashReport(CrashReport report) + { + report = super.addServerInfoToCrashReport(report); + report.getCategory().addDetail("Type", new ICrashReportDetail() + { + public String call() throws Exception + { + return "Integrated Server (map_client.txt)"; + } + }); + report.getCategory().addDetail("Is Modded", new ICrashReportDetail() + { + public String call() throws Exception + { + String s = ClientBrandRetriever.getClientModName(); + + if (!s.equals("vanilla")) + { + return "Definitely; Client brand changed to '" + s + "'"; + } + else + { + s = IntegratedServer.this.getServerModName(); + + if (!"vanilla".equals(s)) + { + return "Definitely; Server brand changed to '" + s + "'"; + } + else + { + return Minecraft.class.getSigners() == null ? "Very likely; Jar signature invalidated" : "Probably not. Jar signature remains and both client + server brands are untouched."; + } + } + } + }); + return report; + } + + public void setDifficultyForAllWorlds(EnumDifficulty difficulty) + { + super.setDifficultyForAllWorlds(difficulty); + + if (this.mc.world != null) + { + this.mc.world.getWorldInfo().setDifficulty(difficulty); + } + } + + public void addServerStatsToSnooper(Snooper playerSnooper) + { + super.addServerStatsToSnooper(playerSnooper); + playerSnooper.addClientStat("snooper_partner", this.mc.getPlayerUsageSnooper().getUniqueID()); + } + + /** + * Returns whether snooping is enabled or not. + */ + public boolean isSnooperEnabled() + { + return Minecraft.getMinecraft().isSnooperEnabled(); + } + + /** + * On dedicated does nothing. On integrated, sets commandsAllowedForAll, gameType and allows external connections. + */ + public String shareToLAN(GameType type, boolean allowCheats) + { + try + { + int i = -1; + + try + { + i = HttpUtil.getSuitableLanPort(); + } + catch (IOException var5) + { + ; + } + + if (i <= 0) + { + i = 25564; + } + + this.getNetworkSystem().addLanEndpoint((InetAddress)null, i); + LOGGER.info("Started on {}", (int)i); + this.isPublic = true; + this.lanServerPing = new ThreadLanServerPing(this.getMOTD(), i + ""); + this.lanServerPing.start(); + this.getPlayerList().setGameType(type); + this.getPlayerList().setCommandsAllowedForAll(allowCheats); + this.mc.player.setPermissionLevel(allowCheats ? 4 : 0); + return i + ""; + } + catch (IOException var6) + { + return null; + } + } + + /** + * Saves all necessary data as preparation for stopping the server. + */ + public void stopServer() + { + super.stopServer(); + + if (this.lanServerPing != null) + { + this.lanServerPing.interrupt(); + this.lanServerPing = null; + } + } + + /** + * Sets the serverRunning variable to false, in order to get the server to shut down. + */ + public void initiateShutdown() + { + if (isServerRunning()) + Futures.getUnchecked(this.addScheduledTask(new Runnable() + { + public void run() + { + for (EntityPlayerMP entityplayermp : Lists.newArrayList(IntegratedServer.this.getPlayerList().getPlayers())) + { + if (!entityplayermp.getUniqueID().equals(IntegratedServer.this.mc.player.getUniqueID())) + { + IntegratedServer.this.getPlayerList().playerLoggedOut(entityplayermp); + } + } + } + })); + super.initiateShutdown(); + + if (this.lanServerPing != null) + { + this.lanServerPing.interrupt(); + this.lanServerPing = null; + } + } + + /** + * Returns true if this integrated server is open to LAN + */ + public boolean getPublic() + { + return this.isPublic; + } + + /** + * Sets the game type for all worlds. + */ + public void setGameType(GameType gameMode) + { + super.setGameType(gameMode); + this.getPlayerList().setGameType(gameMode); + } + + /** + * Return whether command blocks are enabled. + */ + public boolean isCommandBlockEnabled() + { + return true; + } + + public int getOpPermissionLevel() + { + return 4; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedServerCommandManager.java b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedServerCommandManager.java new file mode 100644 index 0000000..e7c8c61 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/IntegratedServerCommandManager.java @@ -0,0 +1,14 @@ +package net.minecraft.server.integrated; + +import net.minecraft.command.ServerCommandManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class IntegratedServerCommandManager extends ServerCommandManager +{ + public IntegratedServerCommandManager(IntegratedServer server) + { + super(server); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/integrated/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/package-info.java new file mode 100644 index 0000000..e531e1e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/integrated/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.server.integrated; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/DemoPlayerInteractionManager.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/DemoPlayerInteractionManager.java new file mode 100644 index 0000000..b9300f7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/DemoPlayerInteractionManager.java @@ -0,0 +1,142 @@ +package net.minecraft.server.management; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +public class DemoPlayerInteractionManager extends PlayerInteractionManager +{ + private boolean displayedIntro; + private boolean demoTimeExpired; + private int demoEndedReminder; + private int gameModeTicks; + + public DemoPlayerInteractionManager(World worldIn) + { + super(worldIn); + } + + public void updateBlockRemoving() + { + super.updateBlockRemoving(); + ++this.gameModeTicks; + long i = this.world.getTotalWorldTime(); + long j = i / 24000L + 1L; + + if (!this.displayedIntro && this.gameModeTicks > 20) + { + this.displayedIntro = true; + this.player.connection.sendPacket(new SPacketChangeGameState(5, 0.0F)); + } + + this.demoTimeExpired = i > 120500L; + + if (this.demoTimeExpired) + { + ++this.demoEndedReminder; + } + + if (i % 24000L == 500L) + { + if (j <= 6L) + { + this.player.sendMessage(new TextComponentTranslation("demo.day." + j, new Object[0])); + } + } + else if (j == 1L) + { + if (i == 100L) + { + this.player.connection.sendPacket(new SPacketChangeGameState(5, 101.0F)); + } + else if (i == 175L) + { + this.player.connection.sendPacket(new SPacketChangeGameState(5, 102.0F)); + } + else if (i == 250L) + { + this.player.connection.sendPacket(new SPacketChangeGameState(5, 103.0F)); + } + } + else if (j == 5L && i % 24000L == 22000L) + { + this.player.sendMessage(new TextComponentTranslation("demo.day.warning", new Object[0])); + } + } + + /** + * Sends a message to the player reminding them that this is the demo version + */ + private void sendDemoReminder() + { + if (this.demoEndedReminder > 100) + { + this.player.sendMessage(new TextComponentTranslation("demo.reminder", new Object[0])); + this.demoEndedReminder = 0; + } + } + + /** + * If not creative, it calls sendBlockBreakProgress until the block is broken first. tryHarvestBlock can also be the + * result of this call. + */ + public void onBlockClicked(BlockPos pos, EnumFacing side) + { + if (this.demoTimeExpired) + { + this.sendDemoReminder(); + } + else + { + super.onBlockClicked(pos, side); + } + } + + public void blockRemoving(BlockPos pos) + { + if (!this.demoTimeExpired) + { + super.blockRemoving(pos); + } + } + + /** + * Attempts to harvest a block + */ + public boolean tryHarvestBlock(BlockPos pos) + { + return this.demoTimeExpired ? false : super.tryHarvestBlock(pos); + } + + public EnumActionResult processRightClick(EntityPlayer player, World worldIn, ItemStack stack, EnumHand hand) + { + if (this.demoTimeExpired) + { + this.sendDemoReminder(); + return EnumActionResult.PASS; + } + else + { + return super.processRightClick(player, worldIn, stack, hand); + } + } + + public EnumActionResult processRightClickBlock(EntityPlayer player, World worldIn, ItemStack stack, EnumHand hand, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (this.demoTimeExpired) + { + this.sendDemoReminder(); + return EnumActionResult.PASS; + } + else + { + return super.processRightClickBlock(player, worldIn, stack, hand, pos, facing, hitX, hitY, hitZ); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerChunkMap.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerChunkMap.java new file mode 100644 index 0000000..a812c19 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerChunkMap.java @@ -0,0 +1,498 @@ +package net.minecraft.server.management; + +import com.google.common.base.Predicate; +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; + +public class PlayerChunkMap +{ + private static final Predicate NOT_SPECTATOR = new Predicate() + { + public boolean apply(@Nullable EntityPlayerMP p_apply_1_) + { + return p_apply_1_ != null && !p_apply_1_.isSpectator(); + } + }; + private static final Predicate CAN_GENERATE_CHUNKS = new Predicate() + { + public boolean apply(@Nullable EntityPlayerMP p_apply_1_) + { + return p_apply_1_ != null && (!p_apply_1_.isSpectator() || p_apply_1_.getServerWorld().getGameRules().getBoolean("spectatorsGenerateChunks")); + } + }; + private final WorldServer world; + /** players in the current instance */ + private final List players = Lists.newArrayList(); + /** the hash of all playerInstances created */ + private final Long2ObjectMap entryMap = new Long2ObjectOpenHashMap(4096); + /** the playerInstances(chunks) that need to be updated */ + private final Set dirtyEntries = Sets.newHashSet(); + private final List pendingSendToPlayers = Lists.newLinkedList(); + /** List of player instances whose chunk field is unassigned, and need the chunk at their pos to be loaded. */ + private final List entriesWithoutChunks = Lists.newLinkedList(); + /** This field is using when chunk should be processed (every 8000 ticks) */ + private final List entries = Lists.newArrayList(); + /** Number of chunks the server sends to the client. Valid 3<=x<=15. In server.properties. */ + private int playerViewRadius; + /** time what is using to check if InhabitedTime should be calculated */ + private long previousTotalWorldTime; + private boolean sortMissingChunks = true; + private boolean sortSendToPlayers = true; + + public PlayerChunkMap(WorldServer serverWorld) + { + this.world = serverWorld; + this.setPlayerViewRadius(serverWorld.getMinecraftServer().getPlayerList().getViewDistance()); + } + + /** + * Returns the WorldServer associated with this PlayerManager + */ + public WorldServer getWorldServer() + { + return this.world; + } + + public Iterator getChunkIterator() + { + final Iterator iterator = this.entries.iterator(); + return new AbstractIterator() + { + protected Chunk computeNext() + { + while (true) + { + if (iterator.hasNext()) + { + PlayerChunkMapEntry playerchunkmapentry = iterator.next(); + Chunk chunk = playerchunkmapentry.getChunk(); + + if (chunk == null) + { + continue; + } + + if (!chunk.isLightPopulated() && chunk.isTerrainPopulated()) + { + return chunk; + } + + if (!chunk.wasTicked()) + { + return chunk; + } + + if (!playerchunkmapentry.hasPlayerMatchingInRange(128.0D, PlayerChunkMap.NOT_SPECTATOR)) + { + continue; + } + + return chunk; + } + + return (Chunk)this.endOfData(); + } + } + }; + } + + /** + * updates all the player instances that need to be updated + */ + public void tick() + { + long i = this.world.getTotalWorldTime(); + + if (i - this.previousTotalWorldTime > 8000L) + { + this.previousTotalWorldTime = i; + + for (int j = 0; j < this.entries.size(); ++j) + { + PlayerChunkMapEntry playerchunkmapentry = this.entries.get(j); + playerchunkmapentry.update(); + playerchunkmapentry.updateChunkInhabitedTime(); + } + } + + if (!this.dirtyEntries.isEmpty()) + { + for (PlayerChunkMapEntry playerchunkmapentry2 : this.dirtyEntries) + { + playerchunkmapentry2.update(); + } + + this.dirtyEntries.clear(); + } + + if (this.sortMissingChunks && i % 4L == 0L) + { + this.sortMissingChunks = false; + Collections.sort(this.entriesWithoutChunks, new Comparator() + { + public int compare(PlayerChunkMapEntry p_compare_1_, PlayerChunkMapEntry p_compare_2_) + { + return ComparisonChain.start().compare(p_compare_1_.getClosestPlayerDistance(), p_compare_2_.getClosestPlayerDistance()).result(); + } + }); + } + + if (this.sortSendToPlayers && i % 4L == 2L) + { + this.sortSendToPlayers = false; + Collections.sort(this.pendingSendToPlayers, new Comparator() + { + public int compare(PlayerChunkMapEntry p_compare_1_, PlayerChunkMapEntry p_compare_2_) + { + return ComparisonChain.start().compare(p_compare_1_.getClosestPlayerDistance(), p_compare_2_.getClosestPlayerDistance()).result(); + } + }); + } + + if (!this.entriesWithoutChunks.isEmpty()) + { + long l = System.nanoTime() + 50000000L; + int k = 49; + Iterator iterator = this.entriesWithoutChunks.iterator(); + + while (iterator.hasNext()) + { + PlayerChunkMapEntry playerchunkmapentry1 = iterator.next(); + + if (playerchunkmapentry1.getChunk() == null) + { + boolean flag = playerchunkmapentry1.hasPlayerMatching(CAN_GENERATE_CHUNKS); + + if (playerchunkmapentry1.providePlayerChunk(flag)) + { + iterator.remove(); + + if (playerchunkmapentry1.sendToPlayers()) + { + this.pendingSendToPlayers.remove(playerchunkmapentry1); + } + + --k; + + if (k < 0 || System.nanoTime() > l) + { + break; + } + } + } + } + } + + if (!this.pendingSendToPlayers.isEmpty()) + { + int i1 = 81; + Iterator iterator1 = this.pendingSendToPlayers.iterator(); + + while (iterator1.hasNext()) + { + PlayerChunkMapEntry playerchunkmapentry3 = iterator1.next(); + + if (playerchunkmapentry3.sendToPlayers()) + { + iterator1.remove(); + --i1; + + if (i1 < 0) + { + break; + } + } + } + } + + if (this.players.isEmpty()) + { + WorldProvider worldprovider = this.world.provider; + + if (!worldprovider.canRespawnHere()) + { + this.world.getChunkProvider().queueUnloadAll(); + } + } + } + + public boolean contains(int chunkX, int chunkZ) + { + long i = getIndex(chunkX, chunkZ); + return this.entryMap.get(i) != null; + } + + @Nullable + public PlayerChunkMapEntry getEntry(int x, int z) + { + return (PlayerChunkMapEntry)this.entryMap.get(getIndex(x, z)); + } + + private PlayerChunkMapEntry getOrCreateEntry(int chunkX, int chunkZ) + { + long i = getIndex(chunkX, chunkZ); + PlayerChunkMapEntry playerchunkmapentry = (PlayerChunkMapEntry)this.entryMap.get(i); + + if (playerchunkmapentry == null) + { + playerchunkmapentry = new PlayerChunkMapEntry(this, chunkX, chunkZ); + this.entryMap.put(i, playerchunkmapentry); + this.entries.add(playerchunkmapentry); + + if (playerchunkmapentry.getChunk() == null) + { + this.entriesWithoutChunks.add(playerchunkmapentry); + } + + if (!playerchunkmapentry.sendToPlayers()) + { + this.pendingSendToPlayers.add(playerchunkmapentry); + } + } + + return playerchunkmapentry; + } + + public void markBlockForUpdate(BlockPos pos) + { + int i = pos.getX() >> 4; + int j = pos.getZ() >> 4; + PlayerChunkMapEntry playerchunkmapentry = this.getEntry(i, j); + + if (playerchunkmapentry != null) + { + playerchunkmapentry.blockChanged(pos.getX() & 15, pos.getY(), pos.getZ() & 15); + } + } + + /** + * Adds an EntityPlayerMP to the PlayerManager and to all player instances within player visibility + */ + public void addPlayer(EntityPlayerMP player) + { + int i = (int)player.posX >> 4; + int j = (int)player.posZ >> 4; + player.managedPosX = player.posX; + player.managedPosZ = player.posZ; + + for (int k = i - this.playerViewRadius; k <= i + this.playerViewRadius; ++k) + { + for (int l = j - this.playerViewRadius; l <= j + this.playerViewRadius; ++l) + { + this.getOrCreateEntry(k, l).addPlayer(player); + } + } + + this.players.add(player); + this.markSortPending(); + } + + /** + * Removes an EntityPlayerMP from the PlayerManager. + */ + public void removePlayer(EntityPlayerMP player) + { + int i = (int)player.managedPosX >> 4; + int j = (int)player.managedPosZ >> 4; + + for (int k = i - this.playerViewRadius; k <= i + this.playerViewRadius; ++k) + { + for (int l = j - this.playerViewRadius; l <= j + this.playerViewRadius; ++l) + { + PlayerChunkMapEntry playerchunkmapentry = this.getEntry(k, l); + + if (playerchunkmapentry != null) + { + playerchunkmapentry.removePlayer(player); + } + } + } + + this.players.remove(player); + this.markSortPending(); + } + + /** + * Determine if two rectangles centered at the given points overlap for the provided radius. Arguments: x1, z1, x2, + * z2, radius. + */ + private boolean overlaps(int x1, int z1, int x2, int z2, int radius) + { + int i = x1 - x2; + int j = z1 - z2; + + if (i >= -radius && i <= radius) + { + return j >= -radius && j <= radius; + } + else + { + return false; + } + } + + /** + * Update chunks around a player that moved + */ + public void updateMovingPlayer(EntityPlayerMP player) + { + int i = (int)player.posX >> 4; + int j = (int)player.posZ >> 4; + double d0 = player.managedPosX - player.posX; + double d1 = player.managedPosZ - player.posZ; + double d2 = d0 * d0 + d1 * d1; + + if (d2 >= 64.0D) + { + int k = (int)player.managedPosX >> 4; + int l = (int)player.managedPosZ >> 4; + int i1 = this.playerViewRadius; + int j1 = i - k; + int k1 = j - l; + + if (j1 != 0 || k1 != 0) + { + for (int l1 = i - i1; l1 <= i + i1; ++l1) + { + for (int i2 = j - i1; i2 <= j + i1; ++i2) + { + if (!this.overlaps(l1, i2, k, l, i1)) + { + this.getOrCreateEntry(l1, i2).addPlayer(player); + } + + if (!this.overlaps(l1 - j1, i2 - k1, i, j, i1)) + { + PlayerChunkMapEntry playerchunkmapentry = this.getEntry(l1 - j1, i2 - k1); + + if (playerchunkmapentry != null) + { + playerchunkmapentry.removePlayer(player); + } + } + } + } + + player.managedPosX = player.posX; + player.managedPosZ = player.posZ; + this.markSortPending(); + } + } + } + + public boolean isPlayerWatchingChunk(EntityPlayerMP player, int chunkX, int chunkZ) + { + PlayerChunkMapEntry playerchunkmapentry = this.getEntry(chunkX, chunkZ); + return playerchunkmapentry != null && playerchunkmapentry.containsPlayer(player) && playerchunkmapentry.isSentToPlayers(); + } + + public void setPlayerViewRadius(int radius) + { + radius = MathHelper.clamp(radius, 3, 32); + + if (radius != this.playerViewRadius) + { + int i = radius - this.playerViewRadius; + + for (EntityPlayerMP entityplayermp : Lists.newArrayList(this.players)) + { + int j = (int)entityplayermp.posX >> 4; + int k = (int)entityplayermp.posZ >> 4; + + if (i > 0) + { + for (int j1 = j - radius; j1 <= j + radius; ++j1) + { + for (int k1 = k - radius; k1 <= k + radius; ++k1) + { + PlayerChunkMapEntry playerchunkmapentry = this.getOrCreateEntry(j1, k1); + + if (!playerchunkmapentry.containsPlayer(entityplayermp)) + { + playerchunkmapentry.addPlayer(entityplayermp); + } + } + } + } + else + { + for (int l = j - this.playerViewRadius; l <= j + this.playerViewRadius; ++l) + { + for (int i1 = k - this.playerViewRadius; i1 <= k + this.playerViewRadius; ++i1) + { + if (!this.overlaps(l, i1, j, k, radius)) + { + this.getOrCreateEntry(l, i1).removePlayer(entityplayermp); + } + } + } + } + } + + this.playerViewRadius = radius; + this.markSortPending(); + } + } + + private void markSortPending() + { + this.sortMissingChunks = true; + this.sortSendToPlayers = true; + } + + /** + * Get the furthest viewable block given player's view distance + */ + public static int getFurthestViewableBlock(int distance) + { + return distance * 16 - 16; + } + + private static long getIndex(int p_187307_0_, int p_187307_1_) + { + return (long)p_187307_0_ + 2147483647L | (long)p_187307_1_ + 2147483647L << 32; + } + + /** + * Marks an entry as dirty + */ + public void entryChanged(PlayerChunkMapEntry entry) + { + this.dirtyEntries.add(entry); + } + + public void removeEntry(PlayerChunkMapEntry entry) + { + ChunkPos chunkpos = entry.getPos(); + long i = getIndex(chunkpos.x, chunkpos.z); + entry.updateChunkInhabitedTime(); + this.entryMap.remove(i); + this.entries.remove(entry); + this.dirtyEntries.remove(entry); + this.pendingSendToPlayers.remove(entry); + this.entriesWithoutChunks.remove(entry); + Chunk chunk = entry.getChunk(); + + if (chunk != null) + { + this.getWorldServer().getChunkProvider().queueUnload(chunk); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerChunkMapEntry.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerChunkMapEntry.java new file mode 100644 index 0000000..0bc307a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerChunkMapEntry.java @@ -0,0 +1,364 @@ +package net.minecraft.server.management; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.SPacketBlockChange; +import net.minecraft.network.play.server.SPacketChunkData; +import net.minecraft.network.play.server.SPacketMultiBlockChange; +import net.minecraft.network.play.server.SPacketUnloadChunk; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.chunk.Chunk; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PlayerChunkMapEntry +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final PlayerChunkMap playerChunkMap; + private final List players = Lists.newArrayList(); + private final ChunkPos pos; + private short[] changedBlocks = new short[64]; + @Nullable + private Chunk chunk; + private int changes; + private int changedSectionFilter; + private long lastUpdateInhabitedTime; + private boolean sentToPlayers; + private Runnable loadedRunnable = new Runnable() + { + public void run() + { + PlayerChunkMapEntry.this.chunk = PlayerChunkMapEntry.this.playerChunkMap.getWorldServer().getChunkProvider().loadChunk(PlayerChunkMapEntry.this.pos.x, PlayerChunkMapEntry.this.pos.z); + PlayerChunkMapEntry.this.loading = false; + } + }; + private boolean loading = true; + + public PlayerChunkMapEntry(PlayerChunkMap mapIn, int chunkX, int chunkZ) + { + this.playerChunkMap = mapIn; + this.pos = new ChunkPos(chunkX, chunkZ); + mapIn.getWorldServer().getChunkProvider().loadChunk(chunkX, chunkZ, this.loadedRunnable); + } + + public ChunkPos getPos() + { + return this.pos; + } + + public void addPlayer(EntityPlayerMP player) + { + if (this.players.contains(player)) + { + LOGGER.debug("Failed to add player. {} already is in chunk {}, {}", player, Integer.valueOf(this.pos.x), Integer.valueOf(this.pos.z)); + } + else + { + if (this.players.isEmpty()) + { + this.lastUpdateInhabitedTime = this.playerChunkMap.getWorldServer().getTotalWorldTime(); + } + + this.players.add(player); + + if (this.sentToPlayers) + { + this.sendToPlayer(player); + // chunk watch event - the chunk is ready + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(this.chunk, player)); + } + } + } + + public void removePlayer(EntityPlayerMP player) + { + if (this.players.contains(player)) + { + // If we haven't loaded yet don't load the chunk just so we can clean it up + if (this.chunk == null) + { + this.players.remove(player); + + if (this.players.isEmpty()) + { + if (this.loading) net.minecraftforge.common.chunkio.ChunkIOExecutor.dropQueuedChunkLoad(this.playerChunkMap.getWorldServer(), this.pos.x, this.pos.z, this.loadedRunnable); + this.playerChunkMap.removeEntry(this); + } + + return; + } + + if (this.sentToPlayers) + { + player.connection.sendPacket(new SPacketUnloadChunk(this.pos.x, this.pos.z)); + } + + this.players.remove(player); + + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.UnWatch(this.chunk, player)); + + if (this.players.isEmpty()) + { + this.playerChunkMap.removeEntry(this); + } + } + } + + /** + * Provide the chunk at the player's location. Can fail, returning false, if the player is a spectator floating + * outside of any pre-existing chunks, and the server is not configured to allow chunk generation for spectators. + */ + public boolean providePlayerChunk(boolean canGenerate) + { + if (this.loading) return false; + if (this.chunk != null) + { + return true; + } + else + { + if (canGenerate) + { + this.chunk = this.playerChunkMap.getWorldServer().getChunkProvider().provideChunk(this.pos.x, this.pos.z); + } + else + { + this.chunk = this.playerChunkMap.getWorldServer().getChunkProvider().loadChunk(this.pos.x, this.pos.z); + } + + return this.chunk != null; + } + } + + public boolean sendToPlayers() + { + if (this.sentToPlayers) + { + return true; + } + else if (this.chunk == null) + { + return false; + } + else if (!this.chunk.isPopulated()) + { + return false; + } + else + { + this.changes = 0; + this.changedSectionFilter = 0; + this.sentToPlayers = true; + if (this.players.isEmpty()) return true; // Forge: fix MC-120780 + Packet packet = new SPacketChunkData(this.chunk, 65535); + + for (EntityPlayerMP entityplayermp : this.players) + { + entityplayermp.connection.sendPacket(packet); + this.playerChunkMap.getWorldServer().getEntityTracker().sendLeashedEntitiesInChunk(entityplayermp, this.chunk); + // chunk watch event - delayed to here as the chunk wasn't ready in addPlayer + net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(this.chunk, entityplayermp)); + } + + return true; + } + } + + /** + * Fully resyncs this chunk's blocks, tile entities, and entity attachments (passengers and leashes) to all tracking + * players + */ + public void sendToPlayer(EntityPlayerMP player) + { + if (this.sentToPlayers) + { + player.connection.sendPacket(new SPacketChunkData(this.chunk, 65535)); + this.playerChunkMap.getWorldServer().getEntityTracker().sendLeashedEntitiesInChunk(player, this.chunk); + } + } + + public void updateChunkInhabitedTime() + { + long i = this.playerChunkMap.getWorldServer().getTotalWorldTime(); + + if (this.chunk != null) + { + this.chunk.setInhabitedTime(this.chunk.getInhabitedTime() + i - this.lastUpdateInhabitedTime); + } + + this.lastUpdateInhabitedTime = i; + } + + public void blockChanged(int x, int y, int z) + { + if (this.sentToPlayers) + { + if (this.changes == 0) + { + this.playerChunkMap.entryChanged(this); + } + + this.changedSectionFilter |= 1 << (y >> 4); + + //Forge; Cache everything, so always run + { + short short1 = (short)(x << 12 | z << 8 | y); + + for (int i = 0; i < this.changes; ++i) + { + if (this.changedBlocks[i] == short1) + { + return; + } + } + if (this.changes == this.changedBlocks.length) + this.changedBlocks = java.util.Arrays.copyOf(this.changedBlocks, this.changedBlocks.length << 1); + this.changedBlocks[this.changes++] = short1; + } + } + } + + public void sendPacket(Packet packetIn) + { + if (this.sentToPlayers) + { + for (int i = 0; i < this.players.size(); ++i) + { + (this.players.get(i)).connection.sendPacket(packetIn); + } + } + } + + @SuppressWarnings("unused") + public void update() + { + if (this.sentToPlayers && this.chunk != null) + { + if (this.changes != 0) + { + if (this.changes == 1) + { + int i = (this.changedBlocks[0] >> 12 & 15) + this.pos.x * 16; + int j = this.changedBlocks[0] & 255; + int k = (this.changedBlocks[0] >> 8 & 15) + this.pos.z * 16; + BlockPos blockpos = new BlockPos(i, j, k); + this.sendPacket(new SPacketBlockChange(this.playerChunkMap.getWorldServer(), blockpos)); + net.minecraft.block.state.IBlockState state = this.playerChunkMap.getWorldServer().getBlockState(blockpos); + + if (state.getBlock().hasTileEntity(state)) + { + this.sendBlockEntity(this.playerChunkMap.getWorldServer().getTileEntity(blockpos)); + } + } + else if (this.changes >= net.minecraftforge.common.ForgeModContainer.clumpingThreshold) + { + this.sendPacket(new SPacketChunkData(this.chunk, this.changedSectionFilter)); + //TODO: FDix Mojang's fuckup to modded by combining all TE data into the chunk data packet... seriously... packet size explosion! + } + else + { + this.sendPacket(new SPacketMultiBlockChange(this.changes, this.changedBlocks, this.chunk)); + //} Keep this in the else until we figure out a fix for mojang's derpitude on the data packet so we don't double send crap. + //{// Forge: Send only the tile entities that are updated, Adding this brace lets us keep the indent and the patch small + for (int l = 0; l < this.changes; ++l) + { + int i1 = (this.changedBlocks[l] >> 12 & 15) + this.pos.x * 16; + int j1 = this.changedBlocks[l] & 255; + int k1 = (this.changedBlocks[l] >> 8 & 15) + this.pos.z * 16; + BlockPos blockpos1 = new BlockPos(i1, j1, k1); + net.minecraft.block.state.IBlockState state = this.playerChunkMap.getWorldServer().getBlockState(blockpos1); + + if (state.getBlock().hasTileEntity(state)) + { + this.sendBlockEntity(this.playerChunkMap.getWorldServer().getTileEntity(blockpos1)); + } + } + } + + this.changes = 0; + this.changedSectionFilter = 0; + } + } + } + + private void sendBlockEntity(@Nullable TileEntity be) + { + if (be != null) + { + SPacketUpdateTileEntity spacketupdatetileentity = be.getUpdatePacket(); + + if (spacketupdatetileentity != null) + { + this.sendPacket(spacketupdatetileentity); + } + } + } + + public boolean containsPlayer(EntityPlayerMP player) + { + return this.players.contains(player); + } + + public boolean hasPlayerMatching(Predicate predicate) + { + return Iterables.tryFind(this.players, predicate).isPresent(); + } + + public boolean hasPlayerMatchingInRange(double range, Predicate predicate) + { + int i = 0; + + for (int j = this.players.size(); i < j; ++i) + { + EntityPlayerMP entityplayermp = this.players.get(i); + + if (predicate.apply(entityplayermp) && this.pos.getDistanceSq(entityplayermp) < range * range) + { + return true; + } + } + + return false; + } + + public boolean isSentToPlayers() + { + return this.sentToPlayers; + } + + @Nullable + public Chunk getChunk() + { + return this.chunk; + } + + public double getClosestPlayerDistance() + { + double d0 = Double.MAX_VALUE; + + for (EntityPlayerMP entityplayermp : this.players) + { + double d1 = this.pos.getDistanceSq(entityplayermp); + + if (d1 < d0) + { + d0 = d1; + } + } + + return d0; + } + + public List getWatchingPlayers() + { + return isSentToPlayers() ? java.util.Collections.unmodifiableList(players) : java.util.Collections.emptyList(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerInteractionManager.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerInteractionManager.java new file mode 100644 index 0000000..b107318 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerInteractionManager.java @@ -0,0 +1,545 @@ +package net.minecraft.server.management; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.block.BlockCommandBlock; +import net.minecraft.block.BlockStructure; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.network.play.server.SPacketBlockChange; +import net.minecraft.network.play.server.SPacketPlayerListItem; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.GameType; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +public class PlayerInteractionManager +{ + /** The world object that this object is connected to. */ + public World world; + /** The EntityPlayerMP object that this object is connected to. */ + public EntityPlayerMP player; + private GameType gameType = GameType.NOT_SET; + /** True if the player is destroying a block */ + private boolean isDestroyingBlock; + private int initialDamage; + private BlockPos destroyPos = BlockPos.ORIGIN; + private int curblockDamage; + /** + * Set to true when the "finished destroying block" packet is received but the block wasn't fully damaged yet. The + * block will not be destroyed while this is false. + */ + private boolean receivedFinishDiggingPacket; + private BlockPos delayedDestroyPos = BlockPos.ORIGIN; + private int initialBlockDamage; + private int durabilityRemainingOnBlock = -1; + + public PlayerInteractionManager(World worldIn) + { + this.world = worldIn; + } + + public void setGameType(GameType type) + { + this.gameType = type; + type.configurePlayerCapabilities(this.player.capabilities); + this.player.sendPlayerAbilities(); + this.player.mcServer.getPlayerList().sendPacketToAllPlayers(new SPacketPlayerListItem(SPacketPlayerListItem.Action.UPDATE_GAME_MODE, new EntityPlayerMP[] {this.player})); + this.world.updateAllPlayersSleepingFlag(); + } + + public GameType getGameType() + { + return this.gameType; + } + + public boolean survivalOrAdventure() + { + return this.gameType.isSurvivalOrAdventure(); + } + + /** + * Get if we are in creative game mode. + */ + public boolean isCreative() + { + return this.gameType.isCreative(); + } + + /** + * if the gameType is currently NOT_SET then change it to par1 + */ + public void initializeGameType(GameType type) + { + if (this.gameType == GameType.NOT_SET) + { + this.gameType = type; + } + + this.setGameType(this.gameType); + } + + public void updateBlockRemoving() + { + ++this.curblockDamage; + + if (this.receivedFinishDiggingPacket) + { + int i = this.curblockDamage - this.initialBlockDamage; + IBlockState iblockstate = this.world.getBlockState(this.delayedDestroyPos); + + if (iblockstate.getBlock().isAir(iblockstate, world, delayedDestroyPos)) + { + this.receivedFinishDiggingPacket = false; + } + else + { + float f = iblockstate.getPlayerRelativeBlockHardness(this.player, this.player.world, this.delayedDestroyPos) * (float)(i + 1); + int j = (int)(f * 10.0F); + + if (j != this.durabilityRemainingOnBlock) + { + this.world.sendBlockBreakProgress(this.player.getEntityId(), this.delayedDestroyPos, j); + this.durabilityRemainingOnBlock = j; + } + + if (f >= 1.0F) + { + this.receivedFinishDiggingPacket = false; + this.tryHarvestBlock(this.delayedDestroyPos); + } + } + } + else if (this.isDestroyingBlock) + { + IBlockState iblockstate1 = this.world.getBlockState(this.destroyPos); + + if (iblockstate1.getBlock().isAir(iblockstate1, world, destroyPos)) + { + this.world.sendBlockBreakProgress(this.player.getEntityId(), this.destroyPos, -1); + this.durabilityRemainingOnBlock = -1; + this.isDestroyingBlock = false; + } + else + { + int k = this.curblockDamage - this.initialDamage; + float f1 = iblockstate1.getPlayerRelativeBlockHardness(this.player, this.player.world, this.destroyPos) * (float)(k + 1); // Forge: Fix network break progress using wrong position + int l = (int)(f1 * 10.0F); + + if (l != this.durabilityRemainingOnBlock) + { + this.world.sendBlockBreakProgress(this.player.getEntityId(), this.destroyPos, l); + this.durabilityRemainingOnBlock = l; + } + } + } + } + + /** + * If not creative, it calls sendBlockBreakProgress until the block is broken first. tryHarvestBlock can also be the + * result of this call. + */ + public void onBlockClicked(BlockPos pos, EnumFacing side) + { + double reachDist = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(); + net.minecraftforge.event.entity.player.PlayerInteractEvent.LeftClickBlock event = net.minecraftforge.common.ForgeHooks.onLeftClickBlock(player, pos, side, net.minecraftforge.common.ForgeHooks.rayTraceEyeHitVec(player, reachDist + 1)); + if (event.isCanceled()) + { + // Restore block and te data + player.connection.sendPacket(new SPacketBlockChange(world, pos)); + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + return; + } + + if (this.isCreative()) + { + if (!this.world.extinguishFire((EntityPlayer)null, pos, side)) + { + this.tryHarvestBlock(pos); + } + } + else + { + IBlockState iblockstate = this.world.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if (this.gameType.hasLimitedInteractions()) + { + if (this.gameType == GameType.SPECTATOR) + { + return; + } + + if (!this.player.isAllowEdit()) + { + ItemStack itemstack = this.player.getHeldItemMainhand(); + + if (itemstack.isEmpty()) + { + return; + } + + if (!itemstack.canDestroy(block)) + { + return; + } + } + } + + this.initialDamage = this.curblockDamage; + float f = 1.0F; + + if (!iblockstate.getBlock().isAir(iblockstate, world, pos)) + { + if (event.getUseBlock() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + { + block.onBlockClicked(this.world, pos, this.player); + this.world.extinguishFire((EntityPlayer)null, pos, side); + } + else + { + // Restore block and te data + player.connection.sendPacket(new SPacketBlockChange(world, pos)); + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + } + f = iblockstate.getPlayerRelativeBlockHardness(this.player, this.player.world, pos); + } + if (event.getUseItem() == net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + { + if (f >= 1.0F) + { + // Restore block and te data + player.connection.sendPacket(new SPacketBlockChange(world, pos)); + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + } + return; + } + + if (!iblockstate.getBlock().isAir(iblockstate, world, pos) && f >= 1.0F) + { + this.tryHarvestBlock(pos); + } + else + { + this.isDestroyingBlock = true; + this.destroyPos = pos; + int i = (int)(f * 10.0F); + this.world.sendBlockBreakProgress(this.player.getEntityId(), pos, i); + this.durabilityRemainingOnBlock = i; + } + } + } + + public void blockRemoving(BlockPos pos) + { + if (pos.equals(this.destroyPos)) + { + int i = this.curblockDamage - this.initialDamage; + IBlockState iblockstate = this.world.getBlockState(pos); + + if (!iblockstate.getBlock().isAir(iblockstate, world, pos)) + { + float f = iblockstate.getPlayerRelativeBlockHardness(this.player, this.player.world, pos) * (float)(i + 1); + + if (f >= 0.7F) + { + this.isDestroyingBlock = false; + this.world.sendBlockBreakProgress(this.player.getEntityId(), pos, -1); + this.tryHarvestBlock(pos); + } + else if (!this.receivedFinishDiggingPacket) + { + this.isDestroyingBlock = false; + this.receivedFinishDiggingPacket = true; + this.delayedDestroyPos = pos; + this.initialBlockDamage = this.initialDamage; + } + } + } + } + + /** + * Stops the block breaking process + */ + public void cancelDestroyingBlock() + { + this.isDestroyingBlock = false; + this.world.sendBlockBreakProgress(this.player.getEntityId(), this.destroyPos, -1); + } + + /** + * Removes a block and triggers the appropriate events + */ + private boolean removeBlock(BlockPos pos) + { + return removeBlock(pos, false); + } + + private boolean removeBlock(BlockPos pos, boolean canHarvest) + { + IBlockState iblockstate = this.world.getBlockState(pos); + boolean flag = iblockstate.getBlock().removedByPlayer(iblockstate, world, pos, player, canHarvest); + + if (flag) + { + iblockstate.getBlock().onBlockDestroyedByPlayer(this.world, pos, iblockstate); + } + + return flag; + } + + /** + * Attempts to harvest a block + */ + public boolean tryHarvestBlock(BlockPos pos) + { + int exp = net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(world, gameType, player, pos); + if (exp == -1) + { + return false; + } + else + { + IBlockState iblockstate = this.world.getBlockState(pos); + TileEntity tileentity = this.world.getTileEntity(pos); + Block block = iblockstate.getBlock(); + + if ((block instanceof BlockCommandBlock || block instanceof BlockStructure) && !this.player.canUseCommandBlock()) + { + this.world.notifyBlockUpdate(pos, iblockstate, iblockstate, 3); + return false; + } + else + { + ItemStack stack = player.getHeldItemMainhand(); + if (!stack.isEmpty() && stack.getItem().onBlockStartBreak(stack, pos, player)) return false; + + this.world.playEvent(this.player, 2001, pos, Block.getStateId(iblockstate)); + boolean flag1 = false; + + if (this.isCreative()) + { + flag1 = this.removeBlock(pos); + this.player.connection.sendPacket(new SPacketBlockChange(this.world, pos)); + } + else + { + ItemStack itemstack1 = this.player.getHeldItemMainhand(); + ItemStack itemstack2 = itemstack1.isEmpty() ? ItemStack.EMPTY : itemstack1.copy(); + boolean flag = iblockstate.getBlock().canHarvestBlock(world, pos, player); + + if (!itemstack1.isEmpty()) + { + itemstack1.onBlockDestroyed(this.world, iblockstate, pos, this.player); + if (itemstack1.isEmpty()) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this.player, itemstack2, EnumHand.MAIN_HAND); + } + + flag1 = this.removeBlock(pos, flag); + if (flag1 && flag) + { + iblockstate.getBlock().harvestBlock(this.world, this.player, pos, iblockstate, tileentity, itemstack2); + } + } + + // Drop experience + if (!this.isCreative() && flag1 && exp > 0) + { + iblockstate.getBlock().dropXpOnBlockBreak(world, pos, exp); + } + return flag1; + } + } + } + + public EnumActionResult processRightClick(EntityPlayer player, World worldIn, ItemStack stack, EnumHand hand) + { + if (this.gameType == GameType.SPECTATOR) + { + return EnumActionResult.PASS; + } + else if (player.getCooldownTracker().hasCooldown(stack.getItem())) + { + return EnumActionResult.PASS; + } + else + { + EnumActionResult cancelResult = net.minecraftforge.common.ForgeHooks.onItemRightClick(player, hand); + if (cancelResult != null) return cancelResult; + int i = stack.getCount(); + int j = stack.getMetadata(); + ItemStack copyBeforeUse = stack.copy(); + ActionResult actionresult = stack.useItemRightClick(worldIn, player, hand); + ItemStack itemstack = actionresult.getResult(); + + if (itemstack == stack && itemstack.getCount() == i && itemstack.getMaxItemUseDuration() <= 0 && itemstack.getMetadata() == j) + { + return actionresult.getType(); + } + else if (actionresult.getType() == EnumActionResult.FAIL && itemstack.getMaxItemUseDuration() > 0 && !player.isHandActive()) + { + return actionresult.getType(); + } + else + { + player.setHeldItem(hand, itemstack); + + if (this.isCreative()) + { + itemstack.setCount(i); + + if (itemstack.isItemStackDamageable()) + { + itemstack.setItemDamage(j); + } + } + + if (itemstack.isEmpty()) + { + net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, copyBeforeUse, hand); + player.setHeldItem(hand, ItemStack.EMPTY); + } + + if (!player.isHandActive()) + { + ((EntityPlayerMP)player).sendContainerToPlayer(player.inventoryContainer); + } + + return actionresult.getType(); + } + } + } + + public EnumActionResult processRightClickBlock(EntityPlayer player, World worldIn, ItemStack stack, EnumHand hand, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ) + { + if (this.gameType == GameType.SPECTATOR) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + + if (tileentity instanceof ILockableContainer) + { + Block block1 = worldIn.getBlockState(pos).getBlock(); + ILockableContainer ilockablecontainer = (ILockableContainer)tileentity; + + if (ilockablecontainer instanceof TileEntityChest && block1 instanceof BlockChest) + { + ilockablecontainer = ((BlockChest)block1).getLockableContainer(worldIn, pos); + } + + if (ilockablecontainer != null) + { + player.displayGUIChest(ilockablecontainer); + return EnumActionResult.SUCCESS; + } + } + else if (tileentity instanceof IInventory) + { + player.displayGUIChest((IInventory)tileentity); + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.PASS; + } + else + { + double reachDist = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(); + net.minecraftforge.event.entity.player.PlayerInteractEvent.RightClickBlock event = net.minecraftforge.common.ForgeHooks + .onRightClickBlock(player, hand, pos, facing, net.minecraftforge.common.ForgeHooks.rayTraceEyeHitVec(player, reachDist + 1)); + if (event.isCanceled()) return event.getCancellationResult(); + + EnumActionResult result = EnumActionResult.PASS; + if (event.getUseItem() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + { + result = stack.onItemUseFirst(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); + if (result != EnumActionResult.PASS) return result ; + } + + boolean bypass = player.getHeldItemMainhand().doesSneakBypassUse(worldIn, pos, player) && player.getHeldItemOffhand().doesSneakBypassUse(worldIn, pos, player); + + if (!player.isSneaking() || bypass || event.getUseBlock() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) + { + IBlockState iblockstate = worldIn.getBlockState(pos); + if(event.getUseBlock() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY) + if (iblockstate.getBlock().onBlockActivated(worldIn, pos, iblockstate, player, hand, facing, hitX, hitY, hitZ)) + { + result = EnumActionResult.SUCCESS; + } + } + + if (stack.isEmpty()) + { + return EnumActionResult.PASS; + } + else if (player.getCooldownTracker().hasCooldown(stack.getItem())) + { + return EnumActionResult.PASS; + } + else + { + if (stack.getItem() instanceof ItemBlock && !player.canUseCommandBlock()) + { + Block block = ((ItemBlock)stack.getItem()).getBlock(); + + if (block instanceof BlockCommandBlock || block instanceof BlockStructure) + { + return EnumActionResult.FAIL; + } + } + + if (this.isCreative()) + { + int j = stack.getMetadata(); + int i = stack.getCount(); + if (result != EnumActionResult.SUCCESS && event.getUseItem() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY + || result == EnumActionResult.SUCCESS && event.getUseItem() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) { + EnumActionResult enumactionresult = stack.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); + stack.setItemDamage(j); + stack.setCount(i); + return enumactionresult; + } else return result; + } + else + { + if (result != EnumActionResult.SUCCESS && event.getUseItem() != net.minecraftforge.fml.common.eventhandler.Event.Result.DENY + || result == EnumActionResult.SUCCESS && event.getUseItem() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW) { + ItemStack copyBeforeUse = stack.copy(); + result = stack.onItemUse(player, worldIn, pos, hand, facing, hitX, hitY, hitZ); + if (stack.isEmpty()) net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, copyBeforeUse, hand); + } return result; + } + } + } + } + + /** + * Sets the world instance. + */ + public void setWorld(WorldServer serverWorld) + { + this.world = serverWorld; + } + + @Deprecated // use the attribute directly + public double getBlockReachDistance() + { + return player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(); + } + + @Deprecated // use an attribute modifier + public void setBlockReachDistance(double distance) + { + player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).setBaseValue(distance); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerList.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerList.java new file mode 100644 index 0000000..214ca97 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerList.java @@ -0,0 +1,1279 @@ +package net.minecraft.server.management; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.mojang.authlib.GameProfile; +import io.netty.buffer.Unpooled; +import java.io.File; +import java.net.SocketAddress; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.PlayerAdvancements; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.play.server.SPacketChangeGameState; +import net.minecraft.network.play.server.SPacketChat; +import net.minecraft.network.play.server.SPacketCustomPayload; +import net.minecraft.network.play.server.SPacketEntityEffect; +import net.minecraft.network.play.server.SPacketEntityStatus; +import net.minecraft.network.play.server.SPacketHeldItemChange; +import net.minecraft.network.play.server.SPacketJoinGame; +import net.minecraft.network.play.server.SPacketPlayerAbilities; +import net.minecraft.network.play.server.SPacketPlayerListItem; +import net.minecraft.network.play.server.SPacketRespawn; +import net.minecraft.network.play.server.SPacketServerDifficulty; +import net.minecraft.network.play.server.SPacketSetExperience; +import net.minecraft.network.play.server.SPacketSpawnPosition; +import net.minecraft.network.play.server.SPacketTeams; +import net.minecraft.network.play.server.SPacketTimeUpdate; +import net.minecraft.network.play.server.SPacketWorldBorder; +import net.minecraft.potion.PotionEffect; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.ServerScoreboard; +import net.minecraft.scoreboard.Team; +import net.minecraft.server.MinecraftServer; +import net.minecraft.stats.StatList; +import net.minecraft.stats.StatisticsManagerServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ChatType; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.DimensionType; +import net.minecraft.world.GameType; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.border.IBorderListener; +import net.minecraft.world.border.WorldBorder; +import net.minecraft.world.chunk.storage.AnvilChunkLoader; +import net.minecraft.world.storage.IPlayerFileData; +import net.minecraft.world.storage.WorldInfo; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class PlayerList +{ + public static final File FILE_PLAYERBANS = new File("banned-players.json"); + public static final File FILE_IPBANS = new File("banned-ips.json"); + public static final File FILE_OPS = new File("ops.json"); + public static final File FILE_WHITELIST = new File("whitelist.json"); + private static final Logger LOGGER = LogManager.getLogger(); + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); + /** Reference to the MinecraftServer object. */ + private final MinecraftServer mcServer; + /** A list of player entities that exist on this server. */ + private final List playerEntityList = Lists.newArrayList(); + /** A map containing the key-value pairs for UUIDs and their EntityPlayerMP objects. */ + private final Map uuidToPlayerMap = Maps.newHashMap(); + private final UserListBans bannedPlayers; + private final UserListIPBans bannedIPs; + /** A set containing the OPs. */ + private final UserListOps ops; + /** The Set of all whitelisted players. */ + private final UserListWhitelist whiteListedPlayers; + private final Map playerStatFiles; + private final Map advancements; + /** Reference to the PlayerNBTManager object. */ + private IPlayerFileData playerDataManager; + /** Server setting to only allow OPs and whitelisted players to join the server. */ + private boolean whiteListEnforced; + /** The maximum number of players that can be connected at a time. */ + protected int maxPlayers; + private int viewDistance; + private GameType gameType; + /** True if all players are allowed to use commands (cheats). */ + private boolean commandsAllowedForAll; + /** index into playerEntities of player to ping, updated every tick; currently hardcoded to max at 200 players */ + private int playerPingIndex; + + public PlayerList(MinecraftServer server) + { + this.bannedPlayers = new UserListBans(FILE_PLAYERBANS); + this.bannedIPs = new UserListIPBans(FILE_IPBANS); + this.ops = new UserListOps(FILE_OPS); + this.whiteListedPlayers = new UserListWhitelist(FILE_WHITELIST); + this.playerStatFiles = Maps.newHashMap(); + this.advancements = Maps.newHashMap(); + this.mcServer = server; + this.bannedPlayers.setLanServer(false); + this.bannedIPs.setLanServer(false); + this.maxPlayers = 8; + } + + public void initializeConnectionToPlayer(NetworkManager netManager, EntityPlayerMP playerIn, NetHandlerPlayServer nethandlerplayserver) + { + GameProfile gameprofile = playerIn.getGameProfile(); + PlayerProfileCache playerprofilecache = this.mcServer.getPlayerProfileCache(); + GameProfile gameprofile1 = playerprofilecache.getProfileByUUID(gameprofile.getId()); + String s = gameprofile1 == null ? gameprofile.getName() : gameprofile1.getName(); + playerprofilecache.addEntry(gameprofile); + NBTTagCompound nbttagcompound = this.readPlayerDataFromFile(playerIn); + playerIn.setWorld(this.mcServer.getWorld(playerIn.dimension)); + + World playerWorld = this.mcServer.getWorld(playerIn.dimension); + if (playerWorld == null) + { + playerIn.dimension = 0; + playerWorld = this.mcServer.getWorld(0); + BlockPos spawnPoint = playerWorld.provider.getRandomizedSpawnPoint(); + playerIn.setPosition(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ()); + } + + playerIn.setWorld(playerWorld); + playerIn.interactionManager.setWorld((WorldServer)playerIn.world); + String s1 = "local"; + + if (netManager.getRemoteAddress() != null) + { + s1 = netManager.getRemoteAddress().toString(); + } + + LOGGER.info("{}[{}] logged in with entity id {} at ({}, {}, {})", playerIn.getName(), s1, Integer.valueOf(playerIn.getEntityId()), Double.valueOf(playerIn.posX), Double.valueOf(playerIn.posY), Double.valueOf(playerIn.posZ)); + WorldServer worldserver = this.mcServer.getWorld(playerIn.dimension); + WorldInfo worldinfo = worldserver.getWorldInfo(); + this.setPlayerGameTypeBasedOnOther(playerIn, (EntityPlayerMP)null, worldserver); + playerIn.connection = nethandlerplayserver; + nethandlerplayserver.sendPacket(new SPacketJoinGame(playerIn.getEntityId(), playerIn.interactionManager.getGameType(), worldinfo.isHardcoreModeEnabled(), worldserver.provider.getDimension(), worldserver.getDifficulty(), this.getMaxPlayers(), worldinfo.getTerrainType(), worldserver.getGameRules().getBoolean("reducedDebugInfo"))); + nethandlerplayserver.sendPacket(new SPacketCustomPayload("MC|Brand", (new PacketBuffer(Unpooled.buffer())).writeString(this.getServerInstance().getServerModName()))); + nethandlerplayserver.sendPacket(new SPacketServerDifficulty(worldinfo.getDifficulty(), worldinfo.isDifficultyLocked())); + nethandlerplayserver.sendPacket(new SPacketPlayerAbilities(playerIn.capabilities)); + nethandlerplayserver.sendPacket(new SPacketHeldItemChange(playerIn.inventory.currentItem)); + this.updatePermissionLevel(playerIn); + playerIn.getStatFile().markAllDirty(); + playerIn.getRecipeBook().init(playerIn); + this.sendScoreboard((ServerScoreboard)worldserver.getScoreboard(), playerIn); + this.mcServer.refreshStatusNextTick(); + TextComponentTranslation textcomponenttranslation; + + if (playerIn.getName().equalsIgnoreCase(s)) + { + textcomponenttranslation = new TextComponentTranslation("multiplayer.player.joined", new Object[] {playerIn.getDisplayName()}); + } + else + { + textcomponenttranslation = new TextComponentTranslation("multiplayer.player.joined.renamed", new Object[] {playerIn.getDisplayName(), s}); + } + + textcomponenttranslation.getStyle().setColor(TextFormatting.YELLOW); + this.sendMessage(textcomponenttranslation); + this.playerLoggedIn(playerIn); + nethandlerplayserver.setPlayerLocation(playerIn.posX, playerIn.posY, playerIn.posZ, playerIn.rotationYaw, playerIn.rotationPitch); + this.updateTimeAndWeatherForPlayer(playerIn, worldserver); + + if (!this.mcServer.getResourcePackUrl().isEmpty()) + { + playerIn.loadResourcePack(this.mcServer.getResourcePackUrl(), this.mcServer.getResourcePackHash()); + } + + for (PotionEffect potioneffect : playerIn.getActivePotionEffects()) + { + nethandlerplayserver.sendPacket(new SPacketEntityEffect(playerIn.getEntityId(), potioneffect)); + } + + if (nbttagcompound != null && nbttagcompound.hasKey("RootVehicle", 10)) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("RootVehicle"); + Entity entity1 = AnvilChunkLoader.readWorldEntity(nbttagcompound1.getCompoundTag("Entity"), worldserver, true); + + if (entity1 != null) + { + UUID uuid = nbttagcompound1.getUniqueId("Attach"); + + if (entity1.getUniqueID().equals(uuid)) + { + playerIn.startRiding(entity1, true); + } + else + { + for (Entity entity : entity1.getRecursivePassengers()) + { + if (entity.getUniqueID().equals(uuid)) + { + playerIn.startRiding(entity, true); + break; + } + } + } + + if (!playerIn.isRiding()) + { + LOGGER.warn("Couldn't reattach entity to player"); + worldserver.removeEntityDangerously(entity1); + + for (Entity entity2 : entity1.getRecursivePassengers()) + { + worldserver.removeEntityDangerously(entity2); + } + } + } + } + + playerIn.addSelfToInternalCraftingInventory(); + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedIn(playerIn); + } + + protected void sendScoreboard(ServerScoreboard scoreboardIn, EntityPlayerMP playerIn) + { + Set set = Sets.newHashSet(); + + for (ScorePlayerTeam scoreplayerteam : scoreboardIn.getTeams()) + { + playerIn.connection.sendPacket(new SPacketTeams(scoreplayerteam, 0)); + } + + for (int i = 0; i < 19; ++i) + { + ScoreObjective scoreobjective = scoreboardIn.getObjectiveInDisplaySlot(i); + + if (scoreobjective != null && !set.contains(scoreobjective)) + { + for (Packet packet : scoreboardIn.getCreatePackets(scoreobjective)) + { + playerIn.connection.sendPacket(packet); + } + + set.add(scoreobjective); + } + } + } + + /** + * Sets the NBT manager to the one for the WorldServer given. + */ + public void setPlayerManager(WorldServer[] worldServers) + { + this.playerDataManager = worldServers[0].getSaveHandler().getPlayerNBTManager(); + worldServers[0].getWorldBorder().addListener(new IBorderListener() + { + public void onSizeChanged(WorldBorder border, double newSize) + { + PlayerList.this.sendPacketToAllPlayers(new SPacketWorldBorder(border, SPacketWorldBorder.Action.SET_SIZE)); + } + public void onTransitionStarted(WorldBorder border, double oldSize, double newSize, long time) + { + PlayerList.this.sendPacketToAllPlayers(new SPacketWorldBorder(border, SPacketWorldBorder.Action.LERP_SIZE)); + } + public void onCenterChanged(WorldBorder border, double x, double z) + { + PlayerList.this.sendPacketToAllPlayers(new SPacketWorldBorder(border, SPacketWorldBorder.Action.SET_CENTER)); + } + public void onWarningTimeChanged(WorldBorder border, int newTime) + { + PlayerList.this.sendPacketToAllPlayers(new SPacketWorldBorder(border, SPacketWorldBorder.Action.SET_WARNING_TIME)); + } + public void onWarningDistanceChanged(WorldBorder border, int newDistance) + { + PlayerList.this.sendPacketToAllPlayers(new SPacketWorldBorder(border, SPacketWorldBorder.Action.SET_WARNING_BLOCKS)); + } + public void onDamageAmountChanged(WorldBorder border, double newAmount) + { + } + public void onDamageBufferChanged(WorldBorder border, double newSize) + { + } + }); + } + + public void preparePlayer(EntityPlayerMP playerIn, @Nullable WorldServer worldIn) + { + WorldServer worldserver = playerIn.getServerWorld(); + + if (worldIn != null) + { + worldIn.getPlayerChunkMap().removePlayer(playerIn); + } + + worldserver.getPlayerChunkMap().addPlayer(playerIn); + worldserver.getChunkProvider().provideChunk((int)playerIn.posX >> 4, (int)playerIn.posZ >> 4); + + if (worldIn != null) + { + CriteriaTriggers.CHANGED_DIMENSION.trigger(playerIn, worldIn.provider.getDimensionType(), worldserver.provider.getDimensionType()); + + if (worldIn.provider.getDimensionType() == DimensionType.NETHER && playerIn.world.provider.getDimensionType() == DimensionType.OVERWORLD && playerIn.getEnteredNetherPosition() != null) + { + CriteriaTriggers.NETHER_TRAVEL.trigger(playerIn, playerIn.getEnteredNetherPosition()); + } + } + } + + public int getEntityViewDistance() + { + return PlayerChunkMap.getFurthestViewableBlock(this.getViewDistance()); + } + + /** + * called during player login. reads the player information from disk. + */ + @Nullable + public NBTTagCompound readPlayerDataFromFile(EntityPlayerMP playerIn) + { + NBTTagCompound nbttagcompound = this.mcServer.worlds[0].getWorldInfo().getPlayerNBTTagCompound(); + NBTTagCompound nbttagcompound1; + + if (playerIn.getName().equals(this.mcServer.getServerOwner()) && nbttagcompound != null) + { + nbttagcompound1 = nbttagcompound; + playerIn.readFromNBT(nbttagcompound); + LOGGER.debug("loading single player"); + net.minecraftforge.event.ForgeEventFactory.firePlayerLoadingEvent(playerIn, this.playerDataManager, playerIn.getUniqueID().toString()); + } + else + { + nbttagcompound1 = this.playerDataManager.readPlayerData(playerIn); + } + + return nbttagcompound1; + } + + public NBTTagCompound getPlayerNBT(EntityPlayerMP player) + { + // Hacky method to allow loading the NBT for a player prior to login + NBTTagCompound nbttagcompound = this.mcServer.worlds[0].getWorldInfo().getPlayerNBTTagCompound(); + if (player.getName().equals(this.mcServer.getServerOwner()) && nbttagcompound != null) + { + return nbttagcompound; + } + else + { + return ((net.minecraft.world.storage.SaveHandler)this.playerDataManager).getPlayerNBT(player); + } + } + + /** + * also stores the NBTTags if this is an intergratedPlayerList + */ + protected void writePlayerData(EntityPlayerMP playerIn) + { + if (playerIn.connection == null) return; + + this.playerDataManager.writePlayerData(playerIn); + StatisticsManagerServer statisticsmanagerserver = this.playerStatFiles.get(playerIn.getUniqueID()); + + if (statisticsmanagerserver != null) + { + statisticsmanagerserver.saveStatFile(); + } + + PlayerAdvancements playeradvancements = this.advancements.get(playerIn.getUniqueID()); + + if (playeradvancements != null) + { + playeradvancements.save(); + } + } + + /** + * Called when a player successfully logs in. Reads player data from disk and inserts the player into the world. + */ + public void playerLoggedIn(EntityPlayerMP playerIn) + { + this.playerEntityList.add(playerIn); + this.uuidToPlayerMap.put(playerIn.getUniqueID(), playerIn); + this.sendPacketToAllPlayers(new SPacketPlayerListItem(SPacketPlayerListItem.Action.ADD_PLAYER, new EntityPlayerMP[] {playerIn})); + WorldServer worldserver = this.mcServer.getWorld(playerIn.dimension); + + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + playerIn.connection.sendPacket(new SPacketPlayerListItem(SPacketPlayerListItem.Action.ADD_PLAYER, new EntityPlayerMP[] {this.playerEntityList.get(i)})); + } + + net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount()); + worldserver.spawnEntity(playerIn); + this.preparePlayer(playerIn, (WorldServer)null); + } + + /** + * Using player's dimension, update the chunks around them + */ + public void serverUpdateMovingPlayer(EntityPlayerMP playerIn) + { + playerIn.getServerWorld().getPlayerChunkMap().updateMovingPlayer(playerIn); + } + + /** + * Called when a player disconnects from the game. Writes player data to disk and removes them from the world. + */ + public void playerLoggedOut(EntityPlayerMP playerIn) + { + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerLoggedOut(playerIn); + WorldServer worldserver = playerIn.getServerWorld(); + playerIn.addStat(StatList.LEAVE_GAME); + this.writePlayerData(playerIn); + + if (playerIn.isRiding()) + { + Entity entity = playerIn.getLowestRidingEntity(); + + if (entity.getRecursivePassengersByType(EntityPlayerMP.class).size() == 1) + { + LOGGER.debug("Removing player mount"); + playerIn.dismountRidingEntity(); + worldserver.removeEntityDangerously(entity); + + for (Entity entity1 : entity.getRecursivePassengers()) + { + worldserver.removeEntityDangerously(entity1); + } + + worldserver.getChunkFromChunkCoords(playerIn.chunkCoordX, playerIn.chunkCoordZ).markDirty(); + } + } + net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount()); + + worldserver.removeEntity(playerIn); + worldserver.getPlayerChunkMap().removePlayer(playerIn); + playerIn.getAdvancements().dispose(); + this.playerEntityList.remove(playerIn); + UUID uuid = playerIn.getUniqueID(); + EntityPlayerMP entityplayermp = this.uuidToPlayerMap.get(uuid); + + if (entityplayermp == playerIn) + { + this.uuidToPlayerMap.remove(uuid); + this.playerStatFiles.remove(uuid); + this.advancements.remove(uuid); + } + + this.sendPacketToAllPlayers(new SPacketPlayerListItem(SPacketPlayerListItem.Action.REMOVE_PLAYER, new EntityPlayerMP[] {playerIn})); + } + + /** + * checks ban-lists, then white-lists, then space for the server. Returns null on success, or an error message + */ + public String allowUserToConnect(SocketAddress address, GameProfile profile) + { + if (this.bannedPlayers.isBanned(profile)) + { + UserListBansEntry userlistbansentry = (UserListBansEntry)this.bannedPlayers.getEntry(profile); + String s1 = "You are banned from this server!\nReason: " + userlistbansentry.getBanReason(); + + if (userlistbansentry.getBanEndDate() != null) + { + s1 = s1 + "\nYour ban will be removed on " + DATE_FORMAT.format(userlistbansentry.getBanEndDate()); + } + + return s1; + } + else if (!this.canJoin(profile)) + { + return "You are not white-listed on this server!"; + } + else if (this.bannedIPs.isBanned(address)) + { + UserListIPBansEntry userlistipbansentry = this.bannedIPs.getBanEntry(address); + String s = "Your IP address is banned from this server!\nReason: " + userlistipbansentry.getBanReason(); + + if (userlistipbansentry.getBanEndDate() != null) + { + s = s + "\nYour ban will be removed on " + DATE_FORMAT.format(userlistipbansentry.getBanEndDate()); + } + + return s; + } + else + { + return this.playerEntityList.size() >= this.maxPlayers && !this.bypassesPlayerLimit(profile) ? "The server is full!" : null; + } + } + + /** + * also checks for multiple logins across servers + */ + public EntityPlayerMP createPlayerForUser(GameProfile profile) + { + UUID uuid = EntityPlayer.getUUID(profile); + List list = Lists.newArrayList(); + + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + EntityPlayerMP entityplayermp = this.playerEntityList.get(i); + + if (entityplayermp.getUniqueID().equals(uuid)) + { + list.add(entityplayermp); + } + } + + EntityPlayerMP entityplayermp2 = this.uuidToPlayerMap.get(profile.getId()); + + if (entityplayermp2 != null && !list.contains(entityplayermp2)) + { + list.add(entityplayermp2); + } + + for (EntityPlayerMP entityplayermp1 : list) + { + entityplayermp1.connection.disconnect(new TextComponentTranslation("multiplayer.disconnect.duplicate_login", new Object[0])); + } + + PlayerInteractionManager playerinteractionmanager; + + if (this.mcServer.isDemo()) + { + playerinteractionmanager = new DemoPlayerInteractionManager(this.mcServer.getWorld(0)); + } + else + { + playerinteractionmanager = new PlayerInteractionManager(this.mcServer.getWorld(0)); + } + + return new EntityPlayerMP(this.mcServer, this.mcServer.getWorld(0), profile, playerinteractionmanager); + } + + /** + * Destroys the given player entity and recreates another in the given dimension. Used when respawning after death + * or returning from the End + */ + public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP playerIn, int dimension, boolean conqueredEnd) + { + World world = mcServer.getWorld(dimension); + if (world == null) + { + dimension = playerIn.getSpawnDimension(); + } + else if (!world.provider.canRespawnHere()) + { + dimension = world.provider.getRespawnDimension(playerIn); + } + if (mcServer.getWorld(dimension) == null) dimension = 0; + + playerIn.getServerWorld().getEntityTracker().removePlayerFromTrackers(playerIn); + playerIn.getServerWorld().getEntityTracker().untrack(playerIn); + playerIn.getServerWorld().getPlayerChunkMap().removePlayer(playerIn); + this.playerEntityList.remove(playerIn); + this.mcServer.getWorld(playerIn.dimension).removeEntityDangerously(playerIn); + BlockPos blockpos = playerIn.getBedLocation(dimension); + boolean flag = playerIn.isSpawnForced(dimension); + playerIn.dimension = dimension; + PlayerInteractionManager playerinteractionmanager; + + if (this.mcServer.isDemo()) + { + playerinteractionmanager = new DemoPlayerInteractionManager(this.mcServer.getWorld(playerIn.dimension)); + } + else + { + playerinteractionmanager = new PlayerInteractionManager(this.mcServer.getWorld(playerIn.dimension)); + } + + EntityPlayerMP entityplayermp = new EntityPlayerMP(this.mcServer, this.mcServer.getWorld(playerIn.dimension), playerIn.getGameProfile(), playerinteractionmanager); + entityplayermp.connection = playerIn.connection; + entityplayermp.copyFrom(playerIn, conqueredEnd); + entityplayermp.dimension = dimension; + entityplayermp.setEntityId(playerIn.getEntityId()); + entityplayermp.setCommandStats(playerIn); + entityplayermp.setPrimaryHand(playerIn.getPrimaryHand()); + + for (String s : playerIn.getTags()) + { + entityplayermp.addTag(s); + } + + WorldServer worldserver = this.mcServer.getWorld(playerIn.dimension); + this.setPlayerGameTypeBasedOnOther(entityplayermp, playerIn, worldserver); + + if (blockpos != null) + { + BlockPos blockpos1 = EntityPlayer.getBedSpawnLocation(this.mcServer.getWorld(playerIn.dimension), blockpos, flag); + + if (blockpos1 != null) + { + entityplayermp.setLocationAndAngles((double)((float)blockpos1.getX() + 0.5F), (double)((float)blockpos1.getY() + 0.1F), (double)((float)blockpos1.getZ() + 0.5F), 0.0F, 0.0F); + entityplayermp.setSpawnPoint(blockpos, flag); + } + else + { + entityplayermp.connection.sendPacket(new SPacketChangeGameState(0, 0.0F)); + } + } + + worldserver.getChunkProvider().provideChunk((int)entityplayermp.posX >> 4, (int)entityplayermp.posZ >> 4); + + while (!worldserver.getCollisionBoxes(entityplayermp, entityplayermp.getEntityBoundingBox()).isEmpty() && entityplayermp.posY < 256.0D) + { + entityplayermp.setPosition(entityplayermp.posX, entityplayermp.posY + 1.0D, entityplayermp.posZ); + } + + entityplayermp.connection.sendPacket(new SPacketRespawn(entityplayermp.dimension, entityplayermp.world.getDifficulty(), entityplayermp.world.getWorldInfo().getTerrainType(), entityplayermp.interactionManager.getGameType())); + BlockPos blockpos2 = worldserver.getSpawnPoint(); + entityplayermp.connection.setPlayerLocation(entityplayermp.posX, entityplayermp.posY, entityplayermp.posZ, entityplayermp.rotationYaw, entityplayermp.rotationPitch); + entityplayermp.connection.sendPacket(new SPacketSpawnPosition(blockpos2)); + entityplayermp.connection.sendPacket(new SPacketSetExperience(entityplayermp.experience, entityplayermp.experienceTotal, entityplayermp.experienceLevel)); + this.updateTimeAndWeatherForPlayer(entityplayermp, worldserver); + this.updatePermissionLevel(entityplayermp); + worldserver.getPlayerChunkMap().addPlayer(entityplayermp); + worldserver.spawnEntity(entityplayermp); + this.playerEntityList.add(entityplayermp); + this.uuidToPlayerMap.put(entityplayermp.getUniqueID(), entityplayermp); + entityplayermp.addSelfToInternalCraftingInventory(); + entityplayermp.setHealth(entityplayermp.getHealth()); + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerRespawnEvent(entityplayermp, conqueredEnd); + return entityplayermp; + } + + public void updatePermissionLevel(EntityPlayerMP player) + { + GameProfile gameprofile = player.getGameProfile(); + int i = this.canSendCommands(gameprofile) ? this.ops.getPermissionLevel(gameprofile) : 0; + i = this.mcServer.isSinglePlayer() && this.mcServer.worlds[0].getWorldInfo().areCommandsAllowed() ? 4 : i; + i = this.commandsAllowedForAll ? 4 : i; + this.sendPlayerPermissionLevel(player, i); + } + + public void changePlayerDimension(EntityPlayerMP player, int dimensionIn) + { + transferPlayerToDimension(player, dimensionIn, mcServer.getWorld(dimensionIn).getDefaultTeleporter()); + } + + // TODO: Remove (1.13) + public void transferPlayerToDimension(EntityPlayerMP player, int dimensionIn, net.minecraft.world.Teleporter teleporter) + { + transferPlayerToDimension(player, dimensionIn, (net.minecraftforge.common.util.ITeleporter) teleporter); + } + + public void transferPlayerToDimension(EntityPlayerMP player, int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + int i = player.dimension; + WorldServer worldserver = this.mcServer.getWorld(player.dimension); + player.dimension = dimensionIn; + WorldServer worldserver1 = this.mcServer.getWorld(player.dimension); + player.connection.sendPacket(new SPacketRespawn(player.dimension, worldserver1.getDifficulty(), worldserver1.getWorldInfo().getTerrainType(), player.interactionManager.getGameType())); + this.updatePermissionLevel(player); + worldserver.removeEntityDangerously(player); + player.isDead = false; + this.transferEntityToWorld(player, i, worldserver, worldserver1, teleporter); + this.preparePlayer(player, worldserver); + player.connection.setPlayerLocation(player.posX, player.posY, player.posZ, player.rotationYaw, player.rotationPitch); + player.interactionManager.setWorld(worldserver1); + player.connection.sendPacket(new SPacketPlayerAbilities(player.capabilities)); + this.updateTimeAndWeatherForPlayer(player, worldserver1); + this.syncPlayerInventory(player); + + for (PotionEffect potioneffect : player.getActivePotionEffects()) + { + player.connection.sendPacket(new SPacketEntityEffect(player.getEntityId(), potioneffect)); + } + // Fix MC-88179: on non-death SPacketRespawn, also resend attributes + net.minecraft.entity.ai.attributes.AttributeMap attributemap = (net.minecraft.entity.ai.attributes.AttributeMap) player.getAttributeMap(); + java.util.Collection watchedAttribs = attributemap.getWatchedAttributes(); + if (!watchedAttribs.isEmpty()) player.connection.sendPacket(new net.minecraft.network.play.server.SPacketEntityProperties(player.getEntityId(), watchedAttribs)); + net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerChangedDimensionEvent(player, i, dimensionIn); + } + + /** + * Transfers an entity from a world to another world. + */ + public void transferEntityToWorld(Entity entityIn, int lastDimension, WorldServer oldWorldIn, WorldServer toWorldIn) + { + transferEntityToWorld(entityIn, lastDimension, oldWorldIn, toWorldIn, toWorldIn.getDefaultTeleporter()); + } + + // TODO: Remove (1.13) + public void transferEntityToWorld(Entity entityIn, int lastDimension, WorldServer oldWorldIn, WorldServer toWorldIn, net.minecraft.world.Teleporter teleporter) + { + transferEntityToWorld(entityIn, lastDimension, oldWorldIn, toWorldIn, (net.minecraftforge.common.util.ITeleporter) teleporter); + } + + public void transferEntityToWorld(Entity entityIn, int lastDimension, WorldServer oldWorldIn, WorldServer toWorldIn, net.minecraftforge.common.util.ITeleporter teleporter) + { + double moveFactor = oldWorldIn.provider.getMovementFactor() / toWorldIn.provider.getMovementFactor(); + double d0 = MathHelper.clamp(entityIn.posX * moveFactor, toWorldIn.getWorldBorder().minX() + 16.0D, toWorldIn.getWorldBorder().maxX() - 16.0D); + double d1 = MathHelper.clamp(entityIn.posZ * moveFactor, toWorldIn.getWorldBorder().minZ() + 16.0D, toWorldIn.getWorldBorder().maxZ() - 16.0D); + double d2 = 8.0D; + float f = entityIn.rotationYaw; + oldWorldIn.profiler.startSection("moving"); + + if (false && entityIn.dimension == -1) + { + d0 = MathHelper.clamp(d0 / 8.0D, toWorldIn.getWorldBorder().minX() + 16.0D, toWorldIn.getWorldBorder().maxX() - 16.0D); + d1 = MathHelper.clamp(d1 / 8.0D, toWorldIn.getWorldBorder().minZ() + 16.0D, toWorldIn.getWorldBorder().maxZ() - 16.0D); + entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch); + + if (entityIn.isEntityAlive()) + { + oldWorldIn.updateEntityWithOptionalForce(entityIn, false); + } + } + else if (false && entityIn.dimension == 0) + { + d0 = MathHelper.clamp(d0 * 8.0D, toWorldIn.getWorldBorder().minX() + 16.0D, toWorldIn.getWorldBorder().maxX() - 16.0D); + d1 = MathHelper.clamp(d1 * 8.0D, toWorldIn.getWorldBorder().minZ() + 16.0D, toWorldIn.getWorldBorder().maxZ() - 16.0D); + entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch); + + if (entityIn.isEntityAlive()) + { + oldWorldIn.updateEntityWithOptionalForce(entityIn, false); + } + } + if (entityIn.dimension == 1 && teleporter.isVanilla()) + { + BlockPos blockpos; + + if (lastDimension == 1) + { + blockpos = toWorldIn.getSpawnPoint(); + } + else + { + blockpos = toWorldIn.getSpawnCoordinate(); + } + + d0 = (double)blockpos.getX(); + entityIn.posY = (double)blockpos.getY(); + d1 = (double)blockpos.getZ(); + entityIn.setLocationAndAngles(d0, entityIn.posY, d1, 90.0F, 0.0F); + + if (entityIn.isEntityAlive()) + { + oldWorldIn.updateEntityWithOptionalForce(entityIn, false); + } + } + + oldWorldIn.profiler.endSection(); + + if (lastDimension != 1 || !teleporter.isVanilla()) + { + oldWorldIn.profiler.startSection("placing"); + d0 = (double)MathHelper.clamp((int)d0, -29999872, 29999872); + d1 = (double)MathHelper.clamp((int)d1, -29999872, 29999872); + + if (entityIn.isEntityAlive()) + { + entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch); + oldWorldIn.updateEntityWithOptionalForce(entityIn, false); + teleporter.placeEntity(toWorldIn, entityIn, f); + toWorldIn.spawnEntity(entityIn); + toWorldIn.updateEntityWithOptionalForce(entityIn, false); + } + + oldWorldIn.profiler.endSection(); + } + + entityIn.setWorld(toWorldIn); + } + + /** + * self explanitory + */ + public void onTick() + { + if (++this.playerPingIndex > 600) + { + this.sendPacketToAllPlayers(new SPacketPlayerListItem(SPacketPlayerListItem.Action.UPDATE_LATENCY, this.playerEntityList)); + this.playerPingIndex = 0; + } + } + + public void sendPacketToAllPlayers(Packet packetIn) + { + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + (this.playerEntityList.get(i)).connection.sendPacket(packetIn); + } + } + + public void sendPacketToAllPlayersInDimension(Packet packetIn, int dimension) + { + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + EntityPlayerMP entityplayermp = this.playerEntityList.get(i); + + if (entityplayermp.dimension == dimension) + { + entityplayermp.connection.sendPacket(packetIn); + } + } + } + + public void sendMessageToAllTeamMembers(EntityPlayer player, ITextComponent message) + { + Team team = player.getTeam(); + + if (team != null) + { + for (String s : team.getMembershipCollection()) + { + EntityPlayerMP entityplayermp = this.getPlayerByUsername(s); + + if (entityplayermp != null && entityplayermp != player) + { + entityplayermp.sendMessage(message); + } + } + } + } + + public void sendMessageToTeamOrAllPlayers(EntityPlayer player, ITextComponent message) + { + Team team = player.getTeam(); + + if (team == null) + { + this.sendMessage(message); + } + else + { + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + EntityPlayerMP entityplayermp = this.playerEntityList.get(i); + + if (entityplayermp.getTeam() != team) + { + entityplayermp.sendMessage(message); + } + } + } + } + + /** + * Get a comma separated list of online players. + */ + public String getFormattedListOfPlayers(boolean includeUUIDs) + { + String s = ""; + List list = Lists.newArrayList(this.playerEntityList); + + for (int i = 0; i < list.size(); ++i) + { + if (i > 0) + { + s = s + ", "; + } + + s = s + ((EntityPlayerMP)list.get(i)).getName(); + + if (includeUUIDs) + { + s = s + " (" + ((EntityPlayerMP)list.get(i)).getCachedUniqueIdString() + ")"; + } + } + + return s; + } + + /** + * Returns an array of the usernames of all the connected players. + */ + public String[] getOnlinePlayerNames() + { + String[] astring = new String[this.playerEntityList.size()]; + + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + astring[i] = ((EntityPlayerMP)this.playerEntityList.get(i)).getName(); + } + + return astring; + } + + public GameProfile[] getOnlinePlayerProfiles() + { + GameProfile[] agameprofile = new GameProfile[this.playerEntityList.size()]; + + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + agameprofile[i] = ((EntityPlayerMP)this.playerEntityList.get(i)).getGameProfile(); + } + + return agameprofile; + } + + public UserListBans getBannedPlayers() + { + return this.bannedPlayers; + } + + public UserListIPBans getBannedIPs() + { + return this.bannedIPs; + } + + public void addOp(GameProfile profile) + { + int i = this.mcServer.getOpPermissionLevel(); + this.ops.addEntry(new UserListOpsEntry(profile, this.mcServer.getOpPermissionLevel(), this.ops.bypassesPlayerLimit(profile))); + this.sendPlayerPermissionLevel(this.getPlayerByUUID(profile.getId()), i); + } + + public void removeOp(GameProfile profile) + { + this.ops.removeEntry(profile); + this.sendPlayerPermissionLevel(this.getPlayerByUUID(profile.getId()), 0); + } + + private void sendPlayerPermissionLevel(EntityPlayerMP player, int permLevel) + { + if (player != null && player.connection != null) + { + byte b0; + + if (permLevel <= 0) + { + b0 = 24; + } + else if (permLevel >= 4) + { + b0 = 28; + } + else + { + b0 = (byte)(24 + permLevel); + } + + player.connection.sendPacket(new SPacketEntityStatus(player, b0)); + } + } + + public boolean canJoin(GameProfile profile) + { + return !this.whiteListEnforced || this.ops.hasEntry(profile) || this.whiteListedPlayers.hasEntry(profile); + } + + public boolean canSendCommands(GameProfile profile) + { + return this.ops.hasEntry(profile) || this.mcServer.isSinglePlayer() && this.mcServer.worlds[0].getWorldInfo().areCommandsAllowed() && this.mcServer.getServerOwner().equalsIgnoreCase(profile.getName()) || this.commandsAllowedForAll; + } + + @Nullable + public EntityPlayerMP getPlayerByUsername(String username) + { + for (EntityPlayerMP entityplayermp : this.playerEntityList) + { + if (entityplayermp.getName().equalsIgnoreCase(username)) + { + return entityplayermp; + } + } + + return null; + } + + /** + * params: srcPlayer,x,y,z,r,dimension. The packet is not sent to the srcPlayer, but all other players within the + * search radius + */ + public void sendToAllNearExcept(@Nullable EntityPlayer except, double x, double y, double z, double radius, int dimension, Packet packetIn) + { + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + EntityPlayerMP entityplayermp = this.playerEntityList.get(i); + + if (entityplayermp != except && entityplayermp.dimension == dimension) + { + double d0 = x - entityplayermp.posX; + double d1 = y - entityplayermp.posY; + double d2 = z - entityplayermp.posZ; + + if (d0 * d0 + d1 * d1 + d2 * d2 < radius * radius) + { + entityplayermp.connection.sendPacket(packetIn); + } + } + } + } + + /** + * Saves all of the players' current states. + */ + public void saveAllPlayerData() + { + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + this.writePlayerData(this.playerEntityList.get(i)); + } + } + + public void addWhitelistedPlayer(GameProfile profile) + { + this.whiteListedPlayers.addEntry(new UserListWhitelistEntry(profile)); + } + + public void removePlayerFromWhitelist(GameProfile profile) + { + this.whiteListedPlayers.removeEntry(profile); + } + + public UserListWhitelist getWhitelistedPlayers() + { + return this.whiteListedPlayers; + } + + public String[] getWhitelistedPlayerNames() + { + return this.whiteListedPlayers.getKeys(); + } + + public UserListOps getOppedPlayers() + { + return this.ops; + } + + public String[] getOppedPlayerNames() + { + return this.ops.getKeys(); + } + + public void reloadWhitelist() + { + } + + /** + * Updates the time and weather for the given player to those of the given world + */ + public void updateTimeAndWeatherForPlayer(EntityPlayerMP playerIn, WorldServer worldIn) + { + WorldBorder worldborder = this.mcServer.worlds[0].getWorldBorder(); + playerIn.connection.sendPacket(new SPacketWorldBorder(worldborder, SPacketWorldBorder.Action.INITIALIZE)); + playerIn.connection.sendPacket(new SPacketTimeUpdate(worldIn.getTotalWorldTime(), worldIn.getWorldTime(), worldIn.getGameRules().getBoolean("doDaylightCycle"))); + BlockPos blockpos = worldIn.getSpawnPoint(); + playerIn.connection.sendPacket(new SPacketSpawnPosition(blockpos)); + + if (worldIn.isRaining()) + { + playerIn.connection.sendPacket(new SPacketChangeGameState(1, 0.0F)); + playerIn.connection.sendPacket(new SPacketChangeGameState(7, worldIn.getRainStrength(1.0F))); + playerIn.connection.sendPacket(new SPacketChangeGameState(8, worldIn.getThunderStrength(1.0F))); + } + } + + /** + * sends the players inventory to himself + */ + public void syncPlayerInventory(EntityPlayerMP playerIn) + { + playerIn.sendContainerToPlayer(playerIn.inventoryContainer); + playerIn.setPlayerHealthUpdated(); + playerIn.connection.sendPacket(new SPacketHeldItemChange(playerIn.inventory.currentItem)); + } + + /** + * Returns the number of players currently on the server. + */ + public int getCurrentPlayerCount() + { + return this.playerEntityList.size(); + } + + /** + * Returns the maximum number of players allowed on the server. + */ + public int getMaxPlayers() + { + return this.maxPlayers; + } + + /** + * Returns an array of usernames for which player.dat exists for. + */ + public String[] getAvailablePlayerDat() + { + return this.mcServer.worlds[0].getSaveHandler().getPlayerNBTManager().getAvailablePlayerDat(); + } + + public void setWhiteListEnabled(boolean whitelistEnabled) + { + this.whiteListEnforced = whitelistEnabled; + } + + public List getPlayersMatchingAddress(String address) + { + List list = Lists.newArrayList(); + + for (EntityPlayerMP entityplayermp : this.playerEntityList) + { + if (entityplayermp.getPlayerIP().equals(address)) + { + list.add(entityplayermp); + } + } + + return list; + } + + /** + * Gets the View Distance. + */ + public int getViewDistance() + { + return this.viewDistance; + } + + public MinecraftServer getServerInstance() + { + return this.mcServer; + } + + /** + * On integrated servers, returns the host's player data to be written to level.dat. + */ + public NBTTagCompound getHostPlayerData() + { + return null; + } + + @SideOnly(Side.CLIENT) + public void setGameType(GameType gameModeIn) + { + this.gameType = gameModeIn; + } + + private void setPlayerGameTypeBasedOnOther(EntityPlayerMP target, EntityPlayerMP source, World worldIn) + { + if (source != null) + { + target.interactionManager.setGameType(source.interactionManager.getGameType()); + } + else if (this.gameType != null) + { + target.interactionManager.setGameType(this.gameType); + } + + target.interactionManager.initializeGameType(worldIn.getWorldInfo().getGameType()); + } + + /** + * Sets whether all players are allowed to use commands (cheats) on the server. + */ + @SideOnly(Side.CLIENT) + public void setCommandsAllowedForAll(boolean p_72387_1_) + { + this.commandsAllowedForAll = p_72387_1_; + } + + /** + * Kicks everyone with "Server closed" as reason. + */ + public void removeAllPlayers() + { + for (int i = 0; i < this.playerEntityList.size(); ++i) + { + (this.playerEntityList.get(i)).connection.disconnect(new TextComponentTranslation("multiplayer.disconnect.server_shutdown", new Object[0])); + } + } + + public void sendMessage(ITextComponent component, boolean isSystem) + { + this.mcServer.sendMessage(component); + ChatType chattype = isSystem ? ChatType.SYSTEM : ChatType.CHAT; + this.sendPacketToAllPlayers(new SPacketChat(component, chattype)); + } + + /** + * Sends the given string to every player as chat message. + */ + public void sendMessage(ITextComponent component) + { + this.sendMessage(component, true); + } + + public StatisticsManagerServer getPlayerStatsFile(EntityPlayer playerIn) + { + UUID uuid = playerIn.getUniqueID(); + StatisticsManagerServer statisticsmanagerserver = uuid == null ? null : (StatisticsManagerServer)this.playerStatFiles.get(uuid); + + if (statisticsmanagerserver == null) + { + File file1 = new File(this.mcServer.getWorld(0).getSaveHandler().getWorldDirectory(), "stats"); + File file2 = new File(file1, uuid + ".json"); + + if (!file2.exists()) + { + File file3 = new File(file1, playerIn.getName() + ".json"); + + if (file3.exists() && file3.isFile()) + { + file3.renameTo(file2); + } + } + + statisticsmanagerserver = new StatisticsManagerServer(this.mcServer, file2); + statisticsmanagerserver.readStatFile(); + this.playerStatFiles.put(uuid, statisticsmanagerserver); + } + + return statisticsmanagerserver; + } + + public PlayerAdvancements getPlayerAdvancements(EntityPlayerMP p_192054_1_) + { + UUID uuid = p_192054_1_.getUniqueID(); + PlayerAdvancements playeradvancements = this.advancements.get(uuid); + + if (playeradvancements == null) + { + File file1 = new File(this.mcServer.getWorld(0).getSaveHandler().getWorldDirectory(), "advancements"); + File file2 = new File(file1, uuid + ".json"); + playeradvancements = new PlayerAdvancements(this.mcServer, file2, p_192054_1_); + this.advancements.put(uuid, playeradvancements); + } + + playeradvancements.setPlayer(p_192054_1_); + return playeradvancements; + } + + public void setViewDistance(int distance) + { + this.viewDistance = distance; + + if (this.mcServer.worlds != null) + { + for (WorldServer worldserver : this.mcServer.worlds) + { + if (worldserver != null) + { + worldserver.getPlayerChunkMap().setPlayerViewRadius(distance); + worldserver.getEntityTracker().setViewDistance(distance); + } + } + } + } + + public List getPlayers() + { + return this.playerEntityList; + } + + /** + * Get's the EntityPlayerMP object representing the player with the UUID. + */ + public EntityPlayerMP getPlayerByUUID(UUID playerUUID) + { + return this.uuidToPlayerMap.get(playerUUID); + } + + public boolean bypassesPlayerLimit(GameProfile profile) + { + return false; + } + + public void reloadResources() + { + for (PlayerAdvancements playeradvancements : this.advancements.values()) + { + playeradvancements.reload(); + } + } + + @SideOnly(Side.SERVER) + public boolean isWhiteListEnabled() + { + return this.whiteListEnforced; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerProfileCache.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerProfileCache.java new file mode 100644 index 0000000..739fd2f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/PlayerProfileCache.java @@ -0,0 +1,425 @@ +package net.minecraft.server.management; + +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.mojang.authlib.Agent; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.ProfileLookupCallback; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Deque; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.JsonUtils; +import org.apache.commons.io.IOUtils; + +public class PlayerProfileCache +{ + public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); + private static boolean onlineMode; + /** A map between player usernames and {@link ProfileEntry profile entries} */ + private final Map usernameToProfileEntryMap = Maps.newHashMap(); + /** A map between {@link UUID UUID's} and {@link ProfileEntry ProfileEntries} */ + private final Map uuidToProfileEntryMap = Maps.newHashMap(); + /** A list of all the cached {@link GameProfile GameProfiles} */ + private final Deque gameProfiles = Lists.newLinkedList(); + private final GameProfileRepository profileRepo; + protected final Gson gson; + private final File usercacheFile; + private static final ParameterizedType TYPE = new ParameterizedType() + { + public Type[] getActualTypeArguments() + { + return new Type[] {PlayerProfileCache.ProfileEntry.class}; + } + public Type getRawType() + { + return List.class; + } + public Type getOwnerType() + { + return null; + } + }; + + public PlayerProfileCache(GameProfileRepository profileRepoIn, File usercacheFileIn) + { + this.profileRepo = profileRepoIn; + this.usercacheFile = usercacheFileIn; + GsonBuilder gsonbuilder = new GsonBuilder(); + gsonbuilder.registerTypeHierarchyAdapter(PlayerProfileCache.ProfileEntry.class, new PlayerProfileCache.Serializer()); + this.gson = gsonbuilder.create(); + this.load(); + } + + private static GameProfile lookupProfile(GameProfileRepository profileRepoIn, String name) + { + final GameProfile[] agameprofile = new GameProfile[1]; + ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() + { + public void onProfileLookupSucceeded(GameProfile p_onProfileLookupSucceeded_1_) + { + agameprofile[0] = p_onProfileLookupSucceeded_1_; + } + public void onProfileLookupFailed(GameProfile p_onProfileLookupFailed_1_, Exception p_onProfileLookupFailed_2_) + { + agameprofile[0] = null; + } + }; + profileRepoIn.findProfilesByNames(new String[] {name}, Agent.MINECRAFT, profilelookupcallback); + + if (!isOnlineMode() && agameprofile[0] == null) + { + UUID uuid = EntityPlayer.getUUID(new GameProfile((UUID)null, name)); + GameProfile gameprofile = new GameProfile(uuid, name); + profilelookupcallback.onProfileLookupSucceeded(gameprofile); + } + + return agameprofile[0]; + } + + public static void setOnlineMode(boolean onlineModeIn) + { + onlineMode = onlineModeIn; + } + + private static boolean isOnlineMode() + { + return onlineMode; + } + + /** + * Add an entry to this cache + */ + public void addEntry(GameProfile gameProfile) + { + this.addEntry(gameProfile, (Date)null); + } + + /** + * Add an entry to this cache + */ + private void addEntry(GameProfile gameProfile, Date expirationDate) + { + UUID uuid = gameProfile.getId(); + + if (expirationDate == null) + { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(2, 1); + expirationDate = calendar.getTime(); + } + + String s = gameProfile.getName().toLowerCase(Locale.ROOT); + PlayerProfileCache.ProfileEntry playerprofilecache$profileentry = new PlayerProfileCache.ProfileEntry(gameProfile, expirationDate); + + if (this.uuidToProfileEntryMap.containsKey(uuid)) + { + PlayerProfileCache.ProfileEntry playerprofilecache$profileentry1 = this.uuidToProfileEntryMap.get(uuid); + this.usernameToProfileEntryMap.remove(playerprofilecache$profileentry1.getGameProfile().getName().toLowerCase(Locale.ROOT)); + this.gameProfiles.remove(gameProfile); + } + + this.usernameToProfileEntryMap.put(gameProfile.getName().toLowerCase(Locale.ROOT), playerprofilecache$profileentry); + this.uuidToProfileEntryMap.put(uuid, playerprofilecache$profileentry); + this.gameProfiles.addFirst(gameProfile); + this.save(); + } + + /** + * Get a player's GameProfile given their username. Mojang's server's will be contacted if the entry is not cached + * locally. + */ + @Nullable + public GameProfile getGameProfileForUsername(String username) + { + String s = username.toLowerCase(Locale.ROOT); + PlayerProfileCache.ProfileEntry playerprofilecache$profileentry = this.usernameToProfileEntryMap.get(s); + + if (playerprofilecache$profileentry != null && (new Date()).getTime() >= playerprofilecache$profileentry.expirationDate.getTime()) + { + this.uuidToProfileEntryMap.remove(playerprofilecache$profileentry.getGameProfile().getId()); + this.usernameToProfileEntryMap.remove(playerprofilecache$profileentry.getGameProfile().getName().toLowerCase(Locale.ROOT)); + this.gameProfiles.remove(playerprofilecache$profileentry.getGameProfile()); + playerprofilecache$profileentry = null; + } + + if (playerprofilecache$profileentry != null) + { + GameProfile gameprofile = playerprofilecache$profileentry.getGameProfile(); + this.gameProfiles.remove(gameprofile); + this.gameProfiles.addFirst(gameprofile); + } + else + { + GameProfile gameprofile1 = lookupProfile(this.profileRepo, s); + + if (gameprofile1 != null) + { + this.addEntry(gameprofile1); + playerprofilecache$profileentry = this.usernameToProfileEntryMap.get(s); + } + } + + this.save(); + return playerprofilecache$profileentry == null ? null : playerprofilecache$profileentry.getGameProfile(); + } + + /** + * Get an array of the usernames that are cached in this cache + */ + public String[] getUsernames() + { + List list = Lists.newArrayList(this.usernameToProfileEntryMap.keySet()); + return (String[])list.toArray(new String[list.size()]); + } + + /** + * Get a player's {@link GameProfile} given their UUID + */ + @Nullable + public GameProfile getProfileByUUID(UUID uuid) + { + PlayerProfileCache.ProfileEntry playerprofilecache$profileentry = this.uuidToProfileEntryMap.get(uuid); + return playerprofilecache$profileentry == null ? null : playerprofilecache$profileentry.getGameProfile(); + } + + /** + * Get a {@link ProfileEntry} by UUID + */ + private PlayerProfileCache.ProfileEntry getByUUID(UUID uuid) + { + PlayerProfileCache.ProfileEntry playerprofilecache$profileentry = this.uuidToProfileEntryMap.get(uuid); + + if (playerprofilecache$profileentry != null) + { + GameProfile gameprofile = playerprofilecache$profileentry.getGameProfile(); + this.gameProfiles.remove(gameprofile); + this.gameProfiles.addFirst(gameprofile); + } + + return playerprofilecache$profileentry; + } + + /** + * Load the cached profiles from disk + */ + public void load() + { + BufferedReader bufferedreader = null; + + try + { + bufferedreader = Files.newReader(this.usercacheFile, StandardCharsets.UTF_8); + List list = (List)JsonUtils.fromJson(this.gson, bufferedreader, TYPE); + this.usernameToProfileEntryMap.clear(); + this.uuidToProfileEntryMap.clear(); + this.gameProfiles.clear(); + + if (list != null) + { + for (PlayerProfileCache.ProfileEntry playerprofilecache$profileentry : Lists.reverse(list)) + { + if (playerprofilecache$profileentry != null) + { + this.addEntry(playerprofilecache$profileentry.getGameProfile(), playerprofilecache$profileentry.getExpirationDate()); + } + } + } + } + catch (FileNotFoundException var9) + { + ; + } + catch (JsonParseException var10) + { + ; + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + } + + /** + * Save the cached profiles to disk + */ + public void save() + { + String s = this.gson.toJson(this.getEntriesWithLimit(1000)); + BufferedWriter bufferedwriter = null; + + try + { + bufferedwriter = Files.newWriter(this.usercacheFile, StandardCharsets.UTF_8); + bufferedwriter.write(s); + return; + } + catch (FileNotFoundException var8) + { + ; + } + catch (IOException var9) + { + return; + } + finally + { + IOUtils.closeQuietly((Writer)bufferedwriter); + } + } + + /** + * Get the {@link PlayerProfileCache.ProfileEntry entries} of this cache with a given limit + */ + private List getEntriesWithLimit(int limitSize) + { + List list = Lists.newArrayList(); + + for (GameProfile gameprofile : Lists.newArrayList(Iterators.limit(this.gameProfiles.iterator(), limitSize))) + { + PlayerProfileCache.ProfileEntry playerprofilecache$profileentry = this.getByUUID(gameprofile.getId()); + + if (playerprofilecache$profileentry != null) + { + list.add(playerprofilecache$profileentry); + } + } + + return list; + } + + class ProfileEntry + { + /** The player's GameProfile */ + private final GameProfile gameProfile; + /** The date that this entry will expire */ + private final Date expirationDate; + + private ProfileEntry(GameProfile gameProfileIn, Date expirationDateIn) + { + this.gameProfile = gameProfileIn; + this.expirationDate = expirationDateIn; + } + + /** + * Get the player's GameProfile + */ + public GameProfile getGameProfile() + { + return this.gameProfile; + } + + /** + * Get the date that this entry will expire + */ + public Date getExpirationDate() + { + return this.expirationDate; + } + } + + class Serializer implements JsonDeserializer, JsonSerializer + { + private Serializer() + { + } + + public JsonElement serialize(PlayerProfileCache.ProfileEntry p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + jsonobject.addProperty("name", p_serialize_1_.getGameProfile().getName()); + UUID uuid = p_serialize_1_.getGameProfile().getId(); + jsonobject.addProperty("uuid", uuid == null ? "" : uuid.toString()); + jsonobject.addProperty("expiresOn", PlayerProfileCache.DATE_FORMAT.format(p_serialize_1_.getExpirationDate())); + return jsonobject; + } + + public PlayerProfileCache.ProfileEntry deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + if (p_deserialize_1_.isJsonObject()) + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + JsonElement jsonelement = jsonobject.get("name"); + JsonElement jsonelement1 = jsonobject.get("uuid"); + JsonElement jsonelement2 = jsonobject.get("expiresOn"); + + if (jsonelement != null && jsonelement1 != null) + { + String s = jsonelement1.getAsString(); + String s1 = jsonelement.getAsString(); + Date date = null; + + if (jsonelement2 != null) + { + try + { + date = PlayerProfileCache.DATE_FORMAT.parse(jsonelement2.getAsString()); + } + catch (ParseException var14) + { + date = null; + } + } + + if (s1 != null && s != null) + { + UUID uuid; + + try + { + uuid = UUID.fromString(s); + } + catch (Throwable var13) + { + return null; + } + + return PlayerProfileCache.this.new ProfileEntry(new GameProfile(uuid, s1), date); + } + else + { + return null; + } + } + else + { + return null; + } + } + else + { + return null; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/PreYggdrasilConverter.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/PreYggdrasilConverter.java new file mode 100644 index 0000000..7ecd444 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/PreYggdrasilConverter.java @@ -0,0 +1,633 @@ +package net.minecraft.server.management; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import com.mojang.authlib.Agent; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.ProfileLookupCallback; +import com.mojang.authlib.yggdrasil.ProfileNotFoundException; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.text.ParseException; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.dedicated.PropertyManager; +import net.minecraft.util.StringUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PreYggdrasilConverter +{ + private static final Logger LOGGER = LogManager.getLogger(); + public static final File OLD_IPBAN_FILE = new File("banned-ips.txt"); + public static final File OLD_PLAYERBAN_FILE = new File("banned-players.txt"); + public static final File OLD_OPS_FILE = new File("ops.txt"); + public static final File OLD_WHITELIST_FILE = new File("white-list.txt"); + + private static void lookupNames(MinecraftServer server, Collection names, ProfileLookupCallback callback) + { + String[] astring = (String[])Iterators.toArray(Iterators.filter(names.iterator(), new Predicate() + { + public boolean apply(@Nullable String p_apply_1_) + { + return !StringUtils.isNullOrEmpty(p_apply_1_); + } + }), String.class); + + if (server.isServerInOnlineMode()) + { + server.getGameProfileRepository().findProfilesByNames(astring, Agent.MINECRAFT, callback); + } + else + { + for (String s : astring) + { + UUID uuid = EntityPlayer.getUUID(new GameProfile((UUID)null, s)); + GameProfile gameprofile = new GameProfile(uuid, s); + callback.onProfileLookupSucceeded(gameprofile); + } + } + } + + public static String convertMobOwnerIfNeeded(final MinecraftServer server, String username) + { + if (!StringUtils.isNullOrEmpty(username) && username.length() <= 16) + { + GameProfile gameprofile = server.getPlayerProfileCache().getGameProfileForUsername(username); + + if (gameprofile != null && gameprofile.getId() != null) + { + return gameprofile.getId().toString(); + } + else if (!server.isSinglePlayer() && server.isServerInOnlineMode()) + { + final List list = Lists.newArrayList(); + ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() + { + public void onProfileLookupSucceeded(GameProfile p_onProfileLookupSucceeded_1_) + { + server.getPlayerProfileCache().addEntry(p_onProfileLookupSucceeded_1_); + list.add(p_onProfileLookupSucceeded_1_); + } + public void onProfileLookupFailed(GameProfile p_onProfileLookupFailed_1_, Exception p_onProfileLookupFailed_2_) + { + PreYggdrasilConverter.LOGGER.warn("Could not lookup user whitelist entry for {}", p_onProfileLookupFailed_1_.getName(), p_onProfileLookupFailed_2_); + } + }; + lookupNames(server, Lists.newArrayList(username), profilelookupcallback); + return !list.isEmpty() && ((GameProfile)list.get(0)).getId() != null ? ((GameProfile)list.get(0)).getId().toString() : ""; + } + else + { + return EntityPlayer.getUUID(new GameProfile((UUID)null, username)).toString(); + } + } + else + { + return username; + } + } + + @SideOnly(Side.SERVER) + static List readFile(File inFile, Map read) throws IOException + { + List list = Files.readLines(inFile, StandardCharsets.UTF_8); + + for (String s : list) + { + s = s.trim(); + + if (!s.startsWith("#") && s.length() >= 1) + { + String[] astring = s.split("\\|"); + read.put(astring[0].toLowerCase(Locale.ROOT), astring); + } + } + + return list; + } + + @SideOnly(Side.SERVER) + public static boolean convertUserBanlist(final MinecraftServer server) throws IOException + { + final UserListBans userlistbans = new UserListBans(PlayerList.FILE_PLAYERBANS); + + if (OLD_PLAYERBAN_FILE.exists() && OLD_PLAYERBAN_FILE.isFile()) + { + if (userlistbans.getSaveFile().exists()) + { + try + { + userlistbans.readSavedFile(); + } + catch (FileNotFoundException filenotfoundexception) + { + LOGGER.warn("Could not load existing file {}", userlistbans.getSaveFile().getName(), filenotfoundexception); + } + } + + try + { + final Map map = Maps.newHashMap(); + readFile(OLD_PLAYERBAN_FILE, map); + ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() + { + public void onProfileLookupSucceeded(GameProfile p_onProfileLookupSucceeded_1_) + { + server.getPlayerProfileCache().addEntry(p_onProfileLookupSucceeded_1_); + String[] astring = map.get(p_onProfileLookupSucceeded_1_.getName().toLowerCase(Locale.ROOT)); + + if (astring == null) + { + PreYggdrasilConverter.LOGGER.warn("Could not convert user banlist entry for {}", (Object)p_onProfileLookupSucceeded_1_.getName()); + throw new PreYggdrasilConverter.ConversionError("Profile not in the conversionlist"); + } + else + { + Date date = astring.length > 1 ? PreYggdrasilConverter.parseDate(astring[1], (Date)null) : null; + String s = astring.length > 2 ? astring[2] : null; + Date date1 = astring.length > 3 ? PreYggdrasilConverter.parseDate(astring[3], (Date)null) : null; + String s1 = astring.length > 4 ? astring[4] : null; + userlistbans.addEntry(new UserListBansEntry(p_onProfileLookupSucceeded_1_, date, s, date1, s1)); + } + } + public void onProfileLookupFailed(GameProfile p_onProfileLookupFailed_1_, Exception p_onProfileLookupFailed_2_) + { + PreYggdrasilConverter.LOGGER.warn("Could not lookup user banlist entry for {}", p_onProfileLookupFailed_1_.getName(), p_onProfileLookupFailed_2_); + + if (!(p_onProfileLookupFailed_2_ instanceof ProfileNotFoundException)) + { + throw new PreYggdrasilConverter.ConversionError("Could not request user " + p_onProfileLookupFailed_1_.getName() + " from backend systems", p_onProfileLookupFailed_2_); + } + } + }; + lookupNames(server, map.keySet(), profilelookupcallback); + userlistbans.writeChanges(); + backupConverted(OLD_PLAYERBAN_FILE); + return true; + } + catch (IOException ioexception) + { + LOGGER.warn("Could not read old user banlist to convert it!", (Throwable)ioexception); + return false; + } + catch (PreYggdrasilConverter.ConversionError preyggdrasilconverter$conversionerror) + { + LOGGER.error("Conversion failed, please try again later", (Throwable)preyggdrasilconverter$conversionerror); + return false; + } + } + else + { + return true; + } + } + + @SideOnly(Side.SERVER) + public static boolean convertIpBanlist(MinecraftServer server) throws IOException + { + UserListIPBans userlistipbans = new UserListIPBans(PlayerList.FILE_IPBANS); + + if (OLD_IPBAN_FILE.exists() && OLD_IPBAN_FILE.isFile()) + { + if (userlistipbans.getSaveFile().exists()) + { + try + { + userlistipbans.readSavedFile(); + } + catch (FileNotFoundException filenotfoundexception) + { + LOGGER.warn("Could not load existing file {}", userlistipbans.getSaveFile().getName(), filenotfoundexception); + } + } + + try + { + Map map = Maps.newHashMap(); + readFile(OLD_IPBAN_FILE, map); + + for (String s : map.keySet()) + { + String[] astring = map.get(s); + Date date = astring.length > 1 ? parseDate(astring[1], (Date)null) : null; + String s1 = astring.length > 2 ? astring[2] : null; + Date date1 = astring.length > 3 ? parseDate(astring[3], (Date)null) : null; + String s2 = astring.length > 4 ? astring[4] : null; + userlistipbans.addEntry(new UserListIPBansEntry(s, date, s1, date1, s2)); + } + + userlistipbans.writeChanges(); + backupConverted(OLD_IPBAN_FILE); + return true; + } + catch (IOException ioexception) + { + LOGGER.warn("Could not parse old ip banlist to convert it!", (Throwable)ioexception); + return false; + } + } + else + { + return true; + } + } + + @SideOnly(Side.SERVER) + public static boolean convertOplist(final MinecraftServer server) throws IOException + { + final UserListOps userlistops = new UserListOps(PlayerList.FILE_OPS); + + if (OLD_OPS_FILE.exists() && OLD_OPS_FILE.isFile()) + { + if (userlistops.getSaveFile().exists()) + { + try + { + userlistops.readSavedFile(); + } + catch (FileNotFoundException filenotfoundexception) + { + LOGGER.warn("Could not load existing file {}", userlistops.getSaveFile().getName(), filenotfoundexception); + } + } + + try + { + List list = Files.readLines(OLD_OPS_FILE, StandardCharsets.UTF_8); + ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() + { + public void onProfileLookupSucceeded(GameProfile p_onProfileLookupSucceeded_1_) + { + server.getPlayerProfileCache().addEntry(p_onProfileLookupSucceeded_1_); + userlistops.addEntry(new UserListOpsEntry(p_onProfileLookupSucceeded_1_, server.getOpPermissionLevel(), false)); + } + public void onProfileLookupFailed(GameProfile p_onProfileLookupFailed_1_, Exception p_onProfileLookupFailed_2_) + { + PreYggdrasilConverter.LOGGER.warn("Could not lookup oplist entry for {}", p_onProfileLookupFailed_1_.getName(), p_onProfileLookupFailed_2_); + + if (!(p_onProfileLookupFailed_2_ instanceof ProfileNotFoundException)) + { + throw new PreYggdrasilConverter.ConversionError("Could not request user " + p_onProfileLookupFailed_1_.getName() + " from backend systems", p_onProfileLookupFailed_2_); + } + } + }; + lookupNames(server, list, profilelookupcallback); + userlistops.writeChanges(); + backupConverted(OLD_OPS_FILE); + return true; + } + catch (IOException ioexception) + { + LOGGER.warn("Could not read old oplist to convert it!", (Throwable)ioexception); + return false; + } + catch (PreYggdrasilConverter.ConversionError preyggdrasilconverter$conversionerror) + { + LOGGER.error("Conversion failed, please try again later", (Throwable)preyggdrasilconverter$conversionerror); + return false; + } + } + else + { + return true; + } + } + + @SideOnly(Side.SERVER) + public static boolean convertWhitelist(final MinecraftServer server) throws IOException + { + final UserListWhitelist userlistwhitelist = new UserListWhitelist(PlayerList.FILE_WHITELIST); + + if (OLD_WHITELIST_FILE.exists() && OLD_WHITELIST_FILE.isFile()) + { + if (userlistwhitelist.getSaveFile().exists()) + { + try + { + userlistwhitelist.readSavedFile(); + } + catch (FileNotFoundException filenotfoundexception) + { + LOGGER.warn("Could not load existing file {}", userlistwhitelist.getSaveFile().getName(), filenotfoundexception); + } + } + + try + { + List list = Files.readLines(OLD_WHITELIST_FILE, StandardCharsets.UTF_8); + ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() + { + public void onProfileLookupSucceeded(GameProfile p_onProfileLookupSucceeded_1_) + { + server.getPlayerProfileCache().addEntry(p_onProfileLookupSucceeded_1_); + userlistwhitelist.addEntry(new UserListWhitelistEntry(p_onProfileLookupSucceeded_1_)); + } + public void onProfileLookupFailed(GameProfile p_onProfileLookupFailed_1_, Exception p_onProfileLookupFailed_2_) + { + PreYggdrasilConverter.LOGGER.warn("Could not lookup user whitelist entry for {}", p_onProfileLookupFailed_1_.getName(), p_onProfileLookupFailed_2_); + + if (!(p_onProfileLookupFailed_2_ instanceof ProfileNotFoundException)) + { + throw new PreYggdrasilConverter.ConversionError("Could not request user " + p_onProfileLookupFailed_1_.getName() + " from backend systems", p_onProfileLookupFailed_2_); + } + } + }; + lookupNames(server, list, profilelookupcallback); + userlistwhitelist.writeChanges(); + backupConverted(OLD_WHITELIST_FILE); + return true; + } + catch (IOException ioexception) + { + LOGGER.warn("Could not read old whitelist to convert it!", (Throwable)ioexception); + return false; + } + catch (PreYggdrasilConverter.ConversionError preyggdrasilconverter$conversionerror) + { + LOGGER.error("Conversion failed, please try again later", (Throwable)preyggdrasilconverter$conversionerror); + return false; + } + } + else + { + return true; + } + } + + @SideOnly(Side.SERVER) + public static boolean convertSaveFiles(final DedicatedServer server, PropertyManager p_152723_1_) + { + final File file1 = getPlayersDirectory(p_152723_1_); + final File file2 = new File(file1.getParentFile(), "playerdata"); + final File file3 = new File(file1.getParentFile(), "unknownplayers"); + + if (file1.exists() && file1.isDirectory()) + { + File[] afile = file1.listFiles(); + List list = Lists.newArrayList(); + + for (File file4 : afile) + { + String s = file4.getName(); + + if (s.toLowerCase(Locale.ROOT).endsWith(".dat")) + { + String s1 = s.substring(0, s.length() - ".dat".length()); + + if (!s1.isEmpty()) + { + list.add(s1); + } + } + } + + try + { + final String[] astring = (String[])list.toArray(new String[list.size()]); + ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() + { + public void onProfileLookupSucceeded(GameProfile p_onProfileLookupSucceeded_1_) + { + server.getPlayerProfileCache().addEntry(p_onProfileLookupSucceeded_1_); + UUID uuid = p_onProfileLookupSucceeded_1_.getId(); + + if (uuid == null) + { + throw new PreYggdrasilConverter.ConversionError("Missing UUID for user profile " + p_onProfileLookupSucceeded_1_.getName()); + } + else + { + this.renamePlayerFile(file2, this.getFileNameForProfile(p_onProfileLookupSucceeded_1_), uuid.toString()); + } + } + public void onProfileLookupFailed(GameProfile p_onProfileLookupFailed_1_, Exception p_onProfileLookupFailed_2_) + { + PreYggdrasilConverter.LOGGER.warn("Could not lookup user uuid for {}", p_onProfileLookupFailed_1_.getName(), p_onProfileLookupFailed_2_); + + if (p_onProfileLookupFailed_2_ instanceof ProfileNotFoundException) + { + String s2 = this.getFileNameForProfile(p_onProfileLookupFailed_1_); + this.renamePlayerFile(file3, s2, s2); + } + else + { + throw new PreYggdrasilConverter.ConversionError("Could not request user " + p_onProfileLookupFailed_1_.getName() + " from backend systems", p_onProfileLookupFailed_2_); + } + } + private void renamePlayerFile(File p_152743_1_, String p_152743_2_, String p_152743_3_) + { + File file5 = new File(file1, p_152743_2_ + ".dat"); + File file6 = new File(p_152743_1_, p_152743_3_ + ".dat"); + PreYggdrasilConverter.mkdir(p_152743_1_); + + if (!file5.renameTo(file6)) + { + throw new PreYggdrasilConverter.ConversionError("Could not convert file for " + p_152743_2_); + } + } + private String getFileNameForProfile(GameProfile p_152744_1_) + { + String s2 = null; + + for (String s3 : astring) + { + if (s3 != null && s3.equalsIgnoreCase(p_152744_1_.getName())) + { + s2 = s3; + break; + } + } + + if (s2 == null) + { + throw new PreYggdrasilConverter.ConversionError("Could not find the filename for " + p_152744_1_.getName() + " anymore"); + } + else + { + return s2; + } + } + }; + lookupNames(server, Lists.newArrayList(astring), profilelookupcallback); + return true; + } + catch (PreYggdrasilConverter.ConversionError preyggdrasilconverter$conversionerror) + { + LOGGER.error("Conversion failed, please try again later", (Throwable)preyggdrasilconverter$conversionerror); + return false; + } + } + else + { + return true; + } + } + + @SideOnly(Side.SERVER) + private static void mkdir(File dir) + { + if (dir.exists()) + { + if (!dir.isDirectory()) + { + throw new PreYggdrasilConverter.ConversionError("Can't create directory " + dir.getName() + " in world save directory."); + } + } + else if (!dir.mkdirs()) + { + throw new PreYggdrasilConverter.ConversionError("Can't create directory " + dir.getName() + " in world save directory."); + } + } + + @SideOnly(Side.SERVER) + public static boolean tryConvert(PropertyManager properties) + { + boolean flag = hasUnconvertableFiles(properties); + flag = flag && hasUnconvertablePlayerFiles(properties); + return flag; + } + + @SideOnly(Side.SERVER) + private static boolean hasUnconvertableFiles(PropertyManager properties) + { + boolean flag = false; + + if (OLD_PLAYERBAN_FILE.exists() && OLD_PLAYERBAN_FILE.isFile()) + { + flag = true; + } + + boolean flag1 = false; + + if (OLD_IPBAN_FILE.exists() && OLD_IPBAN_FILE.isFile()) + { + flag1 = true; + } + + boolean flag2 = false; + + if (OLD_OPS_FILE.exists() && OLD_OPS_FILE.isFile()) + { + flag2 = true; + } + + boolean flag3 = false; + + if (OLD_WHITELIST_FILE.exists() && OLD_WHITELIST_FILE.isFile()) + { + flag3 = true; + } + + if (!flag && !flag1 && !flag2 && !flag3) + { + return true; + } + else + { + LOGGER.warn("**** FAILED TO START THE SERVER AFTER ACCOUNT CONVERSION!"); + LOGGER.warn("** please remove the following files and restart the server:"); + + if (flag) + { + LOGGER.warn("* {}", (Object)OLD_PLAYERBAN_FILE.getName()); + } + + if (flag1) + { + LOGGER.warn("* {}", (Object)OLD_IPBAN_FILE.getName()); + } + + if (flag2) + { + LOGGER.warn("* {}", (Object)OLD_OPS_FILE.getName()); + } + + if (flag3) + { + LOGGER.warn("* {}", (Object)OLD_WHITELIST_FILE.getName()); + } + + return false; + } + } + + @SideOnly(Side.SERVER) + private static boolean hasUnconvertablePlayerFiles(PropertyManager properties) + { + File file1 = getPlayersDirectory(properties); + + if (!file1.exists() || !file1.isDirectory() || file1.list().length <= 0 && file1.delete()) + { + return true; + } + else + { + LOGGER.warn("**** DETECTED OLD PLAYER DIRECTORY IN THE WORLD SAVE"); + LOGGER.warn("**** THIS USUALLY HAPPENS WHEN THE AUTOMATIC CONVERSION FAILED IN SOME WAY"); + LOGGER.warn("** please restart the server and if the problem persists, remove the directory '{}'", (Object)file1.getPath()); + return false; + } + } + + @SideOnly(Side.SERVER) + private static File getPlayersDirectory(PropertyManager properties) + { + String s = properties.getStringProperty("level-name", "world"); + File file1 = new File(s); + return new File(file1, "players"); + } + + @SideOnly(Side.SERVER) + private static void backupConverted(File convertedFile) + { + File file1 = new File(convertedFile.getName() + ".converted"); + convertedFile.renameTo(file1); + } + + @SideOnly(Side.SERVER) + private static Date parseDate(String input, Date defaultValue) + { + Date date; + + try + { + date = UserListEntryBan.DATE_FORMAT.parse(input); + } + catch (ParseException var4) + { + date = defaultValue; + } + + return date; + } + + @SideOnly(Side.SERVER) + static class ConversionError extends RuntimeException + { + private ConversionError(String message, Throwable cause) + { + super(message, cause); + } + + private ConversionError(String message) + { + super(message); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserList.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserList.java new file mode 100644 index 0000000..638db50 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserList.java @@ -0,0 +1,250 @@ +package net.minecraft.server.management; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.nio.charset.StandardCharsets; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class UserList> +{ + protected static final Logger LOGGER = LogManager.getLogger(); + protected final Gson gson; + private final File saveFile; + private final Map values = Maps.newHashMap(); + private boolean lanServer = true; + private static final ParameterizedType USER_LIST_ENTRY_TYPE = new ParameterizedType() + { + public Type[] getActualTypeArguments() + { + return new Type[] {UserListEntry.class}; + } + public Type getRawType() + { + return List.class; + } + public Type getOwnerType() + { + return null; + } + }; + + public UserList(File saveFile) + { + this.saveFile = saveFile; + GsonBuilder gsonbuilder = (new GsonBuilder()).setPrettyPrinting(); + gsonbuilder.registerTypeHierarchyAdapter(UserListEntry.class, new UserList.Serializer()); + this.gson = gsonbuilder.create(); + } + + public boolean isLanServer() + { + return this.lanServer; + } + + public void setLanServer(boolean state) + { + this.lanServer = state; + } + + /** + * Adds an entry to the list + */ + public void addEntry(V entry) + { + this.values.put(this.getObjectKey(entry.getValue()), entry); + + try + { + this.writeChanges(); + } + catch (IOException ioexception) + { + LOGGER.warn("Could not save the list after adding a user.", (Throwable)ioexception); + } + } + + public V getEntry(K obj) + { + this.removeExpired(); + return (V)(this.values.get(this.getObjectKey(obj))); + } + + public void removeEntry(K entry) + { + this.values.remove(this.getObjectKey(entry)); + + try + { + this.writeChanges(); + } + catch (IOException ioexception) + { + LOGGER.warn("Could not save the list after removing a user.", (Throwable)ioexception); + } + } + + @SideOnly(Side.SERVER) + public File getSaveFile() + { + return this.saveFile; + } + + public String[] getKeys() + { + return (String[])this.values.keySet().toArray(new String[this.values.size()]); + } + + /** + * Gets the key value for the given object + */ + protected String getObjectKey(K obj) + { + return obj.toString(); + } + + protected boolean hasEntry(K entry) + { + return this.values.containsKey(this.getObjectKey(entry)); + } + + /** + * Removes expired bans from the list. See {@link BanEntry#hasBanExpired} + */ + private void removeExpired() + { + List list = Lists.newArrayList(); + + for (V v : this.values.values()) + { + if (v.hasBanExpired()) + { + list.add(v.getValue()); + } + } + + for (K k : list) + { + this.values.remove(k); + } + } + + protected UserListEntry createEntry(JsonObject entryData) + { + return new UserListEntry(null, entryData); + } + + protected Map getValues() + { + return this.values; + } + + public void writeChanges() throws IOException + { + Collection collection = this.values.values(); + String s = this.gson.toJson(collection); + BufferedWriter bufferedwriter = null; + + try + { + bufferedwriter = Files.newWriter(this.saveFile, StandardCharsets.UTF_8); + bufferedwriter.write(s); + } + finally + { + IOUtils.closeQuietly((Writer)bufferedwriter); + } + } + + @SideOnly(Side.SERVER) + public boolean isEmpty() + { + return this.values.size() < 1; + } + + @SideOnly(Side.SERVER) + public void readSavedFile() throws IOException, FileNotFoundException + { + if (this.saveFile.exists()) + { + Collection> collection = null; + BufferedReader bufferedreader = null; + + try + { + bufferedreader = Files.newReader(this.saveFile, StandardCharsets.UTF_8); + collection = (Collection)JsonUtils.fromJson(this.gson, bufferedreader, USER_LIST_ENTRY_TYPE); + } + finally + { + IOUtils.closeQuietly((Reader)bufferedreader); + } + + if (collection != null) + { + this.values.clear(); + + for (UserListEntry userlistentry : collection) + { + if (userlistentry.getValue() != null) + { + this.values.put(this.getObjectKey(userlistentry.getValue()), (V)userlistentry); + } + } + } + } + } + + class Serializer implements JsonDeserializer>, JsonSerializer> + { + private Serializer() + { + } + + public JsonElement serialize(UserListEntry p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + p_serialize_1_.onSerialization(jsonobject); + return jsonobject; + } + + public UserListEntry deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + if (p_deserialize_1_.isJsonObject()) + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + return UserList.this.createEntry(jsonobject); + } + else + { + return null; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListBans.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListBans.java new file mode 100644 index 0000000..81f9bba --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListBans.java @@ -0,0 +1,61 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.io.File; + +public class UserListBans extends UserList +{ + public UserListBans(File bansFile) + { + super(bansFile); + } + + protected UserListEntry createEntry(JsonObject entryData) + { + return new UserListBansEntry(entryData); + } + + public boolean isBanned(GameProfile profile) + { + return this.hasEntry(profile); + } + + public String[] getKeys() + { + String[] astring = new String[this.getValues().size()]; + int i = 0; + + for (UserListBansEntry userlistbansentry : this.getValues().values()) + { + astring[i++] = ((GameProfile)userlistbansentry.getValue()).getName(); + } + + return astring; + } + + /** + * Gets the key value for the given object + */ + protected String getObjectKey(GameProfile obj) + { + return obj.getId().toString(); + } + + /** + * Get a {@link GameProfile} that is a member of this list by its user name. Returns {@code null} if no entry was + * found. + */ + public GameProfile getBannedProfile(String username) + { + for (UserListBansEntry userlistbansentry : this.getValues().values()) + { + if (username.equalsIgnoreCase(((GameProfile)userlistbansentry.getValue()).getName())) + { + return (GameProfile)userlistbansentry.getValue(); + } + } + + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListBansEntry.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListBansEntry.java new file mode 100644 index 0000000..7195a73 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListBansEntry.java @@ -0,0 +1,62 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.util.Date; +import java.util.UUID; + +public class UserListBansEntry extends UserListEntryBan +{ + public UserListBansEntry(GameProfile profile) + { + this(profile, (Date)null, (String)null, (Date)null, (String)null); + } + + public UserListBansEntry(GameProfile profile, Date startDate, String banner, Date endDate, String banReason) + { + super(profile, endDate, banner, endDate, banReason); + } + + public UserListBansEntry(JsonObject json) + { + super(toGameProfile(json), json); + } + + protected void onSerialization(JsonObject data) + { + if (this.getValue() != null) + { + data.addProperty("uuid", ((GameProfile)this.getValue()).getId() == null ? "" : ((GameProfile)this.getValue()).getId().toString()); + data.addProperty("name", ((GameProfile)this.getValue()).getName()); + super.onSerialization(data); + } + } + + /** + * Convert a {@linkplain com.google.gson.JsonObject JsonObject} into a {@linkplain com.mojang.authlib.GameProfile}. + * The json object must have {@code uuid} and {@code name} attributes or {@code null} will be returned. + */ + private static GameProfile toGameProfile(JsonObject json) + { + if (json.has("uuid") && json.has("name")) + { + String s = json.get("uuid").getAsString(); + UUID uuid; + + try + { + uuid = UUID.fromString(s); + } + catch (Throwable var4) + { + return null; + } + + return new GameProfile(uuid, json.get("name").getAsString()); + } + else + { + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListEntry.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListEntry.java new file mode 100644 index 0000000..e824dbb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListEntry.java @@ -0,0 +1,32 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; + +public class UserListEntry +{ + private final T value; + + public UserListEntry(T valueIn) + { + this.value = valueIn; + } + + protected UserListEntry(T valueIn, JsonObject json) + { + this.value = valueIn; + } + + T getValue() + { + return this.value; + } + + boolean hasBanExpired() + { + return false; + } + + protected void onSerialization(JsonObject data) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListEntryBan.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListEntryBan.java new file mode 100644 index 0000000..1f73637 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListEntryBan.java @@ -0,0 +1,78 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public abstract class UserListEntryBan extends UserListEntry +{ + public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); + protected final Date banStartDate; + protected final String bannedBy; + protected final Date banEndDate; + protected final String reason; + + public UserListEntryBan(T valueIn, Date startDate, String banner, Date endDate, String banReason) + { + super(valueIn); + this.banStartDate = startDate == null ? new Date() : startDate; + this.bannedBy = banner == null ? "(Unknown)" : banner; + this.banEndDate = endDate; + this.reason = banReason == null ? "Banned by an operator." : banReason; + } + + protected UserListEntryBan(T valueIn, JsonObject json) + { + super(valueIn, json); + Date date; + + try + { + date = json.has("created") ? DATE_FORMAT.parse(json.get("created").getAsString()) : new Date(); + } + catch (ParseException var7) + { + date = new Date(); + } + + this.banStartDate = date; + this.bannedBy = json.has("source") ? json.get("source").getAsString() : "(Unknown)"; + Date date1; + + try + { + date1 = json.has("expires") ? DATE_FORMAT.parse(json.get("expires").getAsString()) : null; + } + catch (ParseException var6) + { + date1 = null; + } + + this.banEndDate = date1; + this.reason = json.has("reason") ? json.get("reason").getAsString() : "Banned by an operator."; + } + + public Date getBanEndDate() + { + return this.banEndDate; + } + + public String getBanReason() + { + return this.reason; + } + + boolean hasBanExpired() + { + return this.banEndDate == null ? false : this.banEndDate.before(new Date()); + } + + protected void onSerialization(JsonObject data) + { + data.addProperty("created", DATE_FORMAT.format(this.banStartDate)); + data.addProperty("source", this.bannedBy); + data.addProperty("expires", this.banEndDate == null ? "forever" : DATE_FORMAT.format(this.banEndDate)); + data.addProperty("reason", this.reason); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListIPBans.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListIPBans.java new file mode 100644 index 0000000..fe6f477 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListIPBans.java @@ -0,0 +1,47 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import java.io.File; +import java.net.SocketAddress; + +public class UserListIPBans extends UserList +{ + public UserListIPBans(File bansFile) + { + super(bansFile); + } + + protected UserListEntry createEntry(JsonObject entryData) + { + return new UserListIPBansEntry(entryData); + } + + public boolean isBanned(SocketAddress address) + { + String s = this.addressToString(address); + return this.hasEntry(s); + } + + public UserListIPBansEntry getBanEntry(SocketAddress address) + { + String s = this.addressToString(address); + return (UserListIPBansEntry)this.getEntry(s); + } + + private String addressToString(SocketAddress address) + { + String s = address.toString(); + + if (s.contains("/")) + { + s = s.substring(s.indexOf(47) + 1); + } + + if (s.contains(":")) + { + s = s.substring(0, s.indexOf(58)); + } + + return s; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListIPBansEntry.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListIPBansEntry.java new file mode 100644 index 0000000..741b929 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListIPBansEntry.java @@ -0,0 +1,36 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import java.util.Date; + +public class UserListIPBansEntry extends UserListEntryBan +{ + public UserListIPBansEntry(String valueIn) + { + this(valueIn, (Date)null, (String)null, (Date)null, (String)null); + } + + public UserListIPBansEntry(String valueIn, Date startDate, String banner, Date endDate, String banReason) + { + super(valueIn, startDate, banner, endDate, banReason); + } + + public UserListIPBansEntry(JsonObject json) + { + super(getIPFromJson(json), json); + } + + private static String getIPFromJson(JsonObject json) + { + return json.has("ip") ? json.get("ip").getAsString() : null; + } + + protected void onSerialization(JsonObject data) + { + if (this.getValue() != null) + { + data.addProperty("ip", (String)this.getValue()); + super.onSerialization(data); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListOps.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListOps.java new file mode 100644 index 0000000..fdc72bd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListOps.java @@ -0,0 +1,70 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.io.File; + +public class UserListOps extends UserList +{ + public UserListOps(File saveFile) + { + super(saveFile); + } + + protected UserListEntry createEntry(JsonObject entryData) + { + return new UserListOpsEntry(entryData); + } + + public String[] getKeys() + { + String[] astring = new String[this.getValues().size()]; + int i = 0; + + for (UserListOpsEntry userlistopsentry : this.getValues().values()) + { + astring[i++] = ((GameProfile)userlistopsentry.getValue()).getName(); + } + + return astring; + } + + /** + * Get the OP permission level this player has + */ + public int getPermissionLevel(GameProfile profile) + { + UserListOpsEntry userlistopsentry = (UserListOpsEntry)this.getEntry(profile); + return userlistopsentry != null ? userlistopsentry.getPermissionLevel() : 0; + } + + public boolean bypassesPlayerLimit(GameProfile profile) + { + UserListOpsEntry userlistopsentry = (UserListOpsEntry)this.getEntry(profile); + return userlistopsentry != null ? userlistopsentry.bypassesPlayerLimit() : false; + } + + /** + * Gets the key value for the given object + */ + protected String getObjectKey(GameProfile obj) + { + return obj.getId().toString(); + } + + /** + * Gets the GameProfile of based on the provided username. + */ + public GameProfile getGameProfileFromName(String username) + { + for (UserListOpsEntry userlistopsentry : this.getValues().values()) + { + if (username.equalsIgnoreCase(((GameProfile)userlistopsentry.getValue()).getName())) + { + return (GameProfile)userlistopsentry.getValue(); + } + } + + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListOpsEntry.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListOpsEntry.java new file mode 100644 index 0000000..84b1801 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListOpsEntry.java @@ -0,0 +1,74 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.util.UUID; + +public class UserListOpsEntry extends UserListEntry +{ + private final int permissionLevel; + private final boolean bypassesPlayerLimit; + + public UserListOpsEntry(GameProfile player, int permissionLevelIn, boolean bypassesPlayerLimitIn) + { + super(player); + this.permissionLevel = permissionLevelIn; + this.bypassesPlayerLimit = bypassesPlayerLimitIn; + } + + public UserListOpsEntry(JsonObject p_i1150_1_) + { + super(constructProfile(p_i1150_1_), p_i1150_1_); + this.permissionLevel = p_i1150_1_.has("level") ? p_i1150_1_.get("level").getAsInt() : 0; + this.bypassesPlayerLimit = p_i1150_1_.has("bypassesPlayerLimit") && p_i1150_1_.get("bypassesPlayerLimit").getAsBoolean(); + } + + /** + * Gets the permission level of the user, as defined in the "level" attribute of the ops.json file + */ + public int getPermissionLevel() + { + return this.permissionLevel; + } + + public boolean bypassesPlayerLimit() + { + return this.bypassesPlayerLimit; + } + + protected void onSerialization(JsonObject data) + { + if (this.getValue() != null) + { + data.addProperty("uuid", ((GameProfile)this.getValue()).getId() == null ? "" : ((GameProfile)this.getValue()).getId().toString()); + data.addProperty("name", ((GameProfile)this.getValue()).getName()); + super.onSerialization(data); + data.addProperty("level", Integer.valueOf(this.permissionLevel)); + data.addProperty("bypassesPlayerLimit", Boolean.valueOf(this.bypassesPlayerLimit)); + } + } + + private static GameProfile constructProfile(JsonObject p_152643_0_) + { + if (p_152643_0_.has("uuid") && p_152643_0_.has("name")) + { + String s = p_152643_0_.get("uuid").getAsString(); + UUID uuid; + + try + { + uuid = UUID.fromString(s); + } + catch (Throwable var4) + { + return null; + } + + return new GameProfile(uuid, p_152643_0_.get("name").getAsString()); + } + else + { + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListWhitelist.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListWhitelist.java new file mode 100644 index 0000000..3af75ee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListWhitelist.java @@ -0,0 +1,66 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.io.File; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class UserListWhitelist extends UserList +{ + public UserListWhitelist(File p_i1132_1_) + { + super(p_i1132_1_); + } + + protected UserListEntry createEntry(JsonObject entryData) + { + return new UserListWhitelistEntry(entryData); + } + + public String[] getKeys() + { + String[] astring = new String[this.getValues().size()]; + int i = 0; + + for (UserListWhitelistEntry userlistwhitelistentry : this.getValues().values()) + { + astring[i++] = ((GameProfile)userlistwhitelistentry.getValue()).getName(); + } + + return astring; + } + + /** + * Returns true if the profile is in the whitelist. + */ + @SideOnly(Side.SERVER) + public boolean isWhitelisted(GameProfile profile) + { + return this.hasEntry(profile); + } + + /** + * Gets the key value for the given object + */ + protected String getObjectKey(GameProfile obj) + { + return obj.getId().toString(); + } + + /** + * Get a GameProfile entry by its name + */ + public GameProfile getByName(String profileName) + { + for (UserListWhitelistEntry userlistwhitelistentry : this.getValues().values()) + { + if (profileName.equalsIgnoreCase(((GameProfile)userlistwhitelistentry.getValue()).getName())) + { + return (GameProfile)userlistwhitelistentry.getValue(); + } + } + + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListWhitelistEntry.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListWhitelistEntry.java new file mode 100644 index 0000000..c4d75f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/UserListWhitelistEntry.java @@ -0,0 +1,52 @@ +package net.minecraft.server.management; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.util.UUID; + +public class UserListWhitelistEntry extends UserListEntry +{ + public UserListWhitelistEntry(GameProfile profile) + { + super(profile); + } + + public UserListWhitelistEntry(JsonObject json) + { + super(gameProfileFromJsonObject(json), json); + } + + protected void onSerialization(JsonObject data) + { + if (this.getValue() != null) + { + data.addProperty("uuid", ((GameProfile)this.getValue()).getId() == null ? "" : ((GameProfile)this.getValue()).getId().toString()); + data.addProperty("name", ((GameProfile)this.getValue()).getName()); + super.onSerialization(data); + } + } + + private static GameProfile gameProfileFromJsonObject(JsonObject json) + { + if (json.has("uuid") && json.has("name")) + { + String s = json.get("uuid").getAsString(); + UUID uuid; + + try + { + uuid = UUID.fromString(s); + } + catch (Throwable var4) + { + return null; + } + + return new GameProfile(uuid, json.get("name").getAsString()); + } + else + { + return null; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/management/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/server/management/package-info.java new file mode 100644 index 0000000..516a1bc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/management/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.server.management; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerHandshakeTCP.java b/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerHandshakeTCP.java new file mode 100644 index 0000000..e7ff963 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerHandshakeTCP.java @@ -0,0 +1,70 @@ +package net.minecraft.server.network; + +import net.minecraft.network.EnumConnectionState; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.handshake.INetHandlerHandshakeServer; +import net.minecraft.network.handshake.client.C00Handshake; +import net.minecraft.network.login.server.SPacketDisconnect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + +public class NetHandlerHandshakeTCP implements INetHandlerHandshakeServer +{ + private final MinecraftServer server; + private final NetworkManager networkManager; + + public NetHandlerHandshakeTCP(MinecraftServer serverIn, NetworkManager netManager) + { + this.server = serverIn; + this.networkManager = netManager; + } + + /** + * There are two recognized intentions for initiating a handshake: logging in and acquiring server status. The + * NetworkManager's protocol will be reconfigured according to the specified intention, although a login-intention + * must pass a versioncheck or receive a disconnect otherwise + */ + public void processHandshake(C00Handshake packetIn) + { + if (!net.minecraftforge.fml.common.FMLCommonHandler.instance().handleServerHandshake(packetIn, this.networkManager)) return; + + switch (packetIn.getRequestedState()) + { + case LOGIN: + this.networkManager.setConnectionState(EnumConnectionState.LOGIN); + + if (packetIn.getProtocolVersion() > 340) + { + ITextComponent itextcomponent = new TextComponentTranslation("multiplayer.disconnect.outdated_server", new Object[] {"1.12.2"}); + this.networkManager.sendPacket(new SPacketDisconnect(itextcomponent)); + this.networkManager.closeChannel(itextcomponent); + } + else if (packetIn.getProtocolVersion() < 340) + { + ITextComponent itextcomponent1 = new TextComponentTranslation("multiplayer.disconnect.outdated_client", new Object[] {"1.12.2"}); + this.networkManager.sendPacket(new SPacketDisconnect(itextcomponent1)); + this.networkManager.closeChannel(itextcomponent1); + } + else + { + this.networkManager.setNetHandler(new NetHandlerLoginServer(this.server, this.networkManager)); + } + + break; + case STATUS: + this.networkManager.setConnectionState(EnumConnectionState.STATUS); + this.networkManager.setNetHandler(new NetHandlerStatusServer(this.server, this.networkManager)); + break; + default: + throw new UnsupportedOperationException("Invalid intention " + packetIn.getRequestedState()); + } + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerLoginServer.java b/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerLoginServer.java new file mode 100644 index 0000000..0d368b9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerLoginServer.java @@ -0,0 +1,255 @@ +package net.minecraft.server.network; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.exceptions.AuthenticationUnavailableException; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.charset.StandardCharsets; +import java.security.PrivateKey; +import java.util.Arrays; +import java.util.Random; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicInteger; +import javax.annotation.Nullable; +import javax.crypto.SecretKey; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.login.INetHandlerLoginServer; +import net.minecraft.network.login.client.CPacketEncryptionResponse; +import net.minecraft.network.login.client.CPacketLoginStart; +import net.minecraft.network.login.server.SPacketDisconnect; +import net.minecraft.network.login.server.SPacketEnableCompression; +import net.minecraft.network.login.server.SPacketEncryptionRequest; +import net.minecraft.network.login.server.SPacketLoginSuccess; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.CryptManager; +import net.minecraft.util.ITickable; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class NetHandlerLoginServer implements INetHandlerLoginServer, ITickable +{ + private static final AtomicInteger AUTHENTICATOR_THREAD_ID = new AtomicInteger(0); + private static final Logger LOGGER = LogManager.getLogger(); + private static final Random RANDOM = new Random(); + private final byte[] verifyToken = new byte[4]; + private final MinecraftServer server; + public final NetworkManager networkManager; + private NetHandlerLoginServer.LoginState currentLoginState = NetHandlerLoginServer.LoginState.HELLO; + /** How long has player been trying to login into the server. */ + private int connectionTimer; + private GameProfile loginGameProfile; + private final String serverId = ""; + private SecretKey secretKey; + private EntityPlayerMP player; + + public NetHandlerLoginServer(MinecraftServer serverIn, NetworkManager networkManagerIn) + { + this.server = serverIn; + this.networkManager = networkManagerIn; + RANDOM.nextBytes(this.verifyToken); + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.currentLoginState == NetHandlerLoginServer.LoginState.READY_TO_ACCEPT) + { + this.tryAcceptPlayer(); + } + else if (this.currentLoginState == NetHandlerLoginServer.LoginState.DELAY_ACCEPT) + { + EntityPlayerMP entityplayermp = this.server.getPlayerList().getPlayerByUUID(this.loginGameProfile.getId()); + + if (entityplayermp == null) + { + this.currentLoginState = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT; + net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlServerHandshake(this.server.getPlayerList(), this.networkManager, this.player); + this.player = null; + } + } + + if (this.connectionTimer++ == 600) + { + this.disconnect(new TextComponentTranslation("multiplayer.disconnect.slow_login", new Object[0])); + } + } + + public void disconnect(ITextComponent reason) + { + try + { + LOGGER.info("Disconnecting {}: {}", this.getConnectionInfo(), reason.getUnformattedText()); + this.networkManager.sendPacket(new SPacketDisconnect(reason)); + this.networkManager.closeChannel(reason); + } + catch (Exception exception) + { + LOGGER.error("Error whilst disconnecting player", (Throwable)exception); + } + } + + public void tryAcceptPlayer() + { + if (!this.loginGameProfile.isComplete()) + { + this.loginGameProfile = this.getOfflineProfile(this.loginGameProfile); + } + + String s = this.server.getPlayerList().allowUserToConnect(this.networkManager.getRemoteAddress(), this.loginGameProfile); + + if (s != null) + { + this.disconnect(new TextComponentTranslation(s, new Object[0])); + } + else + { + this.currentLoginState = NetHandlerLoginServer.LoginState.ACCEPTED; + + if (this.server.getNetworkCompressionThreshold() >= 0 && !this.networkManager.isLocalChannel()) + { + this.networkManager.sendPacket(new SPacketEnableCompression(this.server.getNetworkCompressionThreshold()), new ChannelFutureListener() + { + public void operationComplete(ChannelFuture p_operationComplete_1_) throws Exception + { + NetHandlerLoginServer.this.networkManager.setCompressionThreshold(NetHandlerLoginServer.this.server.getNetworkCompressionThreshold()); + } + }); + } + + this.networkManager.sendPacket(new SPacketLoginSuccess(this.loginGameProfile)); + EntityPlayerMP entityplayermp = this.server.getPlayerList().getPlayerByUUID(this.loginGameProfile.getId()); + + if (entityplayermp != null) + { + this.currentLoginState = NetHandlerLoginServer.LoginState.DELAY_ACCEPT; + this.player = this.server.getPlayerList().createPlayerForUser(this.loginGameProfile); + } + else + { + net.minecraftforge.fml.common.network.internal.FMLNetworkHandler.fmlServerHandshake(this.server.getPlayerList(), this.networkManager, this.server.getPlayerList().createPlayerForUser(this.loginGameProfile)); + } + } + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + LOGGER.info("{} lost connection: {}", this.getConnectionInfo(), reason.getUnformattedText()); + } + + public String getConnectionInfo() + { + return this.loginGameProfile != null ? this.loginGameProfile + " (" + this.networkManager.getRemoteAddress() + ")" : String.valueOf((Object)this.networkManager.getRemoteAddress()); + } + + public void processLoginStart(CPacketLoginStart packetIn) + { + Validate.validState(this.currentLoginState == NetHandlerLoginServer.LoginState.HELLO, "Unexpected hello packet"); + this.loginGameProfile = packetIn.getProfile(); + + if (this.server.isServerInOnlineMode() && !this.networkManager.isLocalChannel()) + { + this.currentLoginState = NetHandlerLoginServer.LoginState.KEY; + this.networkManager.sendPacket(new SPacketEncryptionRequest("", this.server.getKeyPair().getPublic(), this.verifyToken)); + } + else + { + this.currentLoginState = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT; + } + } + + public void processEncryptionResponse(CPacketEncryptionResponse packetIn) + { + Validate.validState(this.currentLoginState == NetHandlerLoginServer.LoginState.KEY, "Unexpected key packet"); + PrivateKey privatekey = this.server.getKeyPair().getPrivate(); + + if (!Arrays.equals(this.verifyToken, packetIn.getVerifyToken(privatekey))) + { + throw new IllegalStateException("Invalid nonce!"); + } + else + { + this.secretKey = packetIn.getSecretKey(privatekey); + this.currentLoginState = NetHandlerLoginServer.LoginState.AUTHENTICATING; + this.networkManager.enableEncryption(this.secretKey); + (new Thread(net.minecraftforge.fml.common.thread.SidedThreadGroups.SERVER, "User Authenticator #" + AUTHENTICATOR_THREAD_ID.incrementAndGet()) + { + public void run() + { + GameProfile gameprofile = NetHandlerLoginServer.this.loginGameProfile; + + try + { + String s = (new BigInteger(CryptManager.getServerIdHash("", NetHandlerLoginServer.this.server.getKeyPair().getPublic(), NetHandlerLoginServer.this.secretKey))).toString(16); + NetHandlerLoginServer.this.loginGameProfile = NetHandlerLoginServer.this.server.getMinecraftSessionService().hasJoinedServer(new GameProfile((UUID)null, gameprofile.getName()), s, this.getAddress()); + + if (NetHandlerLoginServer.this.loginGameProfile != null) + { + NetHandlerLoginServer.LOGGER.info("UUID of player {} is {}", NetHandlerLoginServer.this.loginGameProfile.getName(), NetHandlerLoginServer.this.loginGameProfile.getId()); + NetHandlerLoginServer.this.currentLoginState = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT; + } + else if (NetHandlerLoginServer.this.server.isSinglePlayer()) + { + NetHandlerLoginServer.LOGGER.warn("Failed to verify username but will let them in anyway!"); + NetHandlerLoginServer.this.loginGameProfile = NetHandlerLoginServer.this.getOfflineProfile(gameprofile); + NetHandlerLoginServer.this.currentLoginState = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT; + } + else + { + NetHandlerLoginServer.this.disconnect(new TextComponentTranslation("multiplayer.disconnect.unverified_username", new Object[0])); + NetHandlerLoginServer.LOGGER.error("Username '{}' tried to join with an invalid session", (Object)gameprofile.getName()); + } + } + catch (AuthenticationUnavailableException var3) + { + if (NetHandlerLoginServer.this.server.isSinglePlayer()) + { + NetHandlerLoginServer.LOGGER.warn("Authentication servers are down but will let them in anyway!"); + NetHandlerLoginServer.this.loginGameProfile = NetHandlerLoginServer.this.getOfflineProfile(gameprofile); + NetHandlerLoginServer.this.currentLoginState = NetHandlerLoginServer.LoginState.READY_TO_ACCEPT; + } + else + { + NetHandlerLoginServer.this.disconnect(new TextComponentTranslation("multiplayer.disconnect.authservers_down", new Object[0])); + NetHandlerLoginServer.LOGGER.error("Couldn't verify username because servers are unavailable"); + } + } + } + @Nullable + private InetAddress getAddress() + { + SocketAddress socketaddress = NetHandlerLoginServer.this.networkManager.getRemoteAddress(); + return NetHandlerLoginServer.this.server.getPreventProxyConnections() && socketaddress instanceof InetSocketAddress ? ((InetSocketAddress)socketaddress).getAddress() : null; + } + }).start(); + } + } + + protected GameProfile getOfflineProfile(GameProfile original) + { + UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + original.getName()).getBytes(StandardCharsets.UTF_8)); + return new GameProfile(uuid, original.getName()); + } + + static enum LoginState + { + HELLO, + KEY, + AUTHENTICATING, + READY_TO_ACCEPT, + DELAY_ACCEPT, + ACCEPTED; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerStatusServer.java b/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerStatusServer.java new file mode 100644 index 0000000..a8946eb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/network/NetHandlerStatusServer.java @@ -0,0 +1,51 @@ +package net.minecraft.server.network; + +import net.minecraft.network.NetworkManager; +import net.minecraft.network.status.INetHandlerStatusServer; +import net.minecraft.network.status.client.CPacketPing; +import net.minecraft.network.status.client.CPacketServerQuery; +import net.minecraft.network.status.server.SPacketPong; +import net.minecraft.network.status.server.SPacketServerInfo; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; + +public class NetHandlerStatusServer implements INetHandlerStatusServer +{ + private static final ITextComponent EXIT_MESSAGE = new TextComponentString("Status request has been handled."); + private final MinecraftServer server; + private final NetworkManager networkManager; + private boolean handled; + + public NetHandlerStatusServer(MinecraftServer serverIn, NetworkManager netManager) + { + this.server = serverIn; + this.networkManager = netManager; + } + + /** + * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination + */ + public void onDisconnect(ITextComponent reason) + { + } + + public void processServerQuery(CPacketServerQuery packetIn) + { + if (this.handled) + { + this.networkManager.closeChannel(EXIT_MESSAGE); + } + else + { + this.handled = true; + this.networkManager.sendPacket(new SPacketServerInfo(this.server.getServerStatusResponse())); + } + } + + public void processPing(CPacketPing packetIn) + { + this.networkManager.sendPacket(new SPacketPong(packetIn.getClientTime())); + this.networkManager.closeChannel(EXIT_MESSAGE); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/network/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/server/network/package-info.java new file mode 100644 index 0000000..475dfb2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/network/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.server.network; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/server/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/server/package-info.java new file mode 100644 index 0000000..7974c62 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/server/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.server; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/IStatType.java b/build/tmp/recompileMc/sources/net/minecraft/stats/IStatType.java new file mode 100644 index 0000000..6728ced --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/IStatType.java @@ -0,0 +1,13 @@ +package net.minecraft.stats; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IStatType +{ + /** + * Formats a given stat for human consumption. + */ + @SideOnly(Side.CLIENT) + String format(int number); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/RecipeBook.java b/build/tmp/recompileMc/sources/net/minecraft/stats/RecipeBook.java new file mode 100644 index 0000000..1f963f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/RecipeBook.java @@ -0,0 +1,96 @@ +package net.minecraft.stats; + +import java.util.BitSet; +import javax.annotation.Nullable; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class RecipeBook +{ + protected final BitSet recipes = new BitSet(); + /** Recipes the player has not yet seen, so the GUI can play an animation */ + protected final BitSet newRecipes = new BitSet(); + protected boolean isGuiOpen; + protected boolean isFilteringCraftable; + + public void copyFrom(RecipeBook that) + { + this.recipes.clear(); + this.newRecipes.clear(); + this.recipes.or(that.recipes); + this.newRecipes.or(that.newRecipes); + } + + public void unlock(IRecipe recipe) + { + if (!recipe.isDynamic()) + { + this.recipes.set(getRecipeId(recipe)); + } + } + + public boolean isUnlocked(@Nullable IRecipe recipe) + { + return this.recipes.get(getRecipeId(recipe)); + } + + public void lock(IRecipe recipe) + { + int i = getRecipeId(recipe); + this.recipes.clear(i); + this.newRecipes.clear(i); + } + + @Deprecated //DO NOT USE + protected static int getRecipeId(@Nullable IRecipe recipe) + { + int ret = CraftingManager.REGISTRY.getIDForObject(recipe); + if (ret == -1) + { + ret = ((net.minecraftforge.registries.ForgeRegistry)net.minecraftforge.fml.common.registry.ForgeRegistries.RECIPES).getID(recipe.getRegistryName()); + if (ret == -1) + throw new IllegalArgumentException(String.format("Attempted to get the ID for a unknown recipe: %s Name: %s", recipe, recipe.getRegistryName())); + } + return ret; + } + + @SideOnly(Side.CLIENT) + public boolean isNew(IRecipe recipe) + { + return this.newRecipes.get(getRecipeId(recipe)); + } + + public void markSeen(IRecipe recipe) + { + this.newRecipes.clear(getRecipeId(recipe)); + } + + public void markNew(IRecipe recipe) + { + this.newRecipes.set(getRecipeId(recipe)); + } + + @SideOnly(Side.CLIENT) + public boolean isGuiOpen() + { + return this.isGuiOpen; + } + + public void setGuiOpen(boolean open) + { + this.isGuiOpen = open; + } + + @SideOnly(Side.CLIENT) + public boolean isFilteringCraftable() + { + return this.isFilteringCraftable; + } + + public void setFilteringCraftable(boolean shouldFilter) + { + this.isFilteringCraftable = shouldFilter; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/RecipeBookServer.java b/build/tmp/recompileMc/sources/net/minecraft/stats/RecipeBookServer.java new file mode 100644 index 0000000..171244e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/RecipeBookServer.java @@ -0,0 +1,152 @@ +package net.minecraft.stats; + +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.List; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.play.server.SPacketRecipeBook; +import net.minecraft.util.ResourceLocation; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RecipeBookServer extends RecipeBook +{ + private static final Logger LOGGER = LogManager.getLogger(); + + public void add(List recipesIn, EntityPlayerMP player) + { + List list = Lists.newArrayList(); + + for (IRecipe irecipe : recipesIn) + { + if (!this.recipes.get(getRecipeId(irecipe)) && !irecipe.isDynamic()) + { + this.unlock(irecipe); + this.markNew(irecipe); + list.add(irecipe); + CriteriaTriggers.RECIPE_UNLOCKED.trigger(player, irecipe); + } + } + + this.sendPacket(SPacketRecipeBook.State.ADD, player, list); + } + + public void remove(List recipesIn, EntityPlayerMP player) + { + List list = Lists.newArrayList(); + + for (IRecipe irecipe : recipesIn) + { + if (this.recipes.get(getRecipeId(irecipe))) + { + this.lock(irecipe); + list.add(irecipe); + } + } + + this.sendPacket(SPacketRecipeBook.State.REMOVE, player, list); + } + + private void sendPacket(SPacketRecipeBook.State state, EntityPlayerMP player, List recipesIn) + { + net.minecraftforge.common.ForgeHooks.sendRecipeBook(player.connection, state, recipesIn, Collections.emptyList(), this.isGuiOpen, this.isFilteringCraftable); + } + + public NBTTagCompound write() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setBoolean("isGuiOpen", this.isGuiOpen); + nbttagcompound.setBoolean("isFilteringCraftable", this.isFilteringCraftable); + NBTTagList nbttaglist = new NBTTagList(); + + for (IRecipe irecipe : this.getRecipes()) + { + nbttaglist.appendTag(new NBTTagString(((ResourceLocation)CraftingManager.REGISTRY.getNameForObject(irecipe)).toString())); + } + + nbttagcompound.setTag("recipes", nbttaglist); + NBTTagList nbttaglist1 = new NBTTagList(); + + for (IRecipe irecipe1 : this.getDisplayedRecipes()) + { + nbttaglist1.appendTag(new NBTTagString(((ResourceLocation)CraftingManager.REGISTRY.getNameForObject(irecipe1)).toString())); + } + + nbttagcompound.setTag("toBeDisplayed", nbttaglist1); + return nbttagcompound; + } + + public void read(NBTTagCompound tag) + { + this.isGuiOpen = tag.getBoolean("isGuiOpen"); + this.isFilteringCraftable = tag.getBoolean("isFilteringCraftable"); + NBTTagList nbttaglist = tag.getTagList("recipes", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + ResourceLocation resourcelocation = new ResourceLocation(nbttaglist.getStringTagAt(i)); + IRecipe irecipe = CraftingManager.getRecipe(resourcelocation); + + if (irecipe == null) + { + LOGGER.info("Tried to load unrecognized recipe: {} removed now.", (Object)resourcelocation); + } + else + { + this.unlock(irecipe); + } + } + + NBTTagList nbttaglist1 = tag.getTagList("toBeDisplayed", 8); + + for (int j = 0; j < nbttaglist1.tagCount(); ++j) + { + ResourceLocation resourcelocation1 = new ResourceLocation(nbttaglist1.getStringTagAt(j)); + IRecipe irecipe1 = CraftingManager.getRecipe(resourcelocation1); + + if (irecipe1 == null) + { + LOGGER.info("Tried to load unrecognized recipe: {} removed now.", (Object)resourcelocation1); + } + else + { + this.markNew(irecipe1); + } + } + } + + private List getRecipes() + { + List list = Lists.newArrayList(); + + for (int i = this.recipes.nextSetBit(0); i >= 0; i = this.recipes.nextSetBit(i + 1)) + { + list.add(CraftingManager.REGISTRY.getObjectById(i)); + } + + return list; + } + + private List getDisplayedRecipes() + { + List list = Lists.newArrayList(); + + for (int i = this.newRecipes.nextSetBit(0); i >= 0; i = this.newRecipes.nextSetBit(i + 1)) + { + list.add(CraftingManager.REGISTRY.getObjectById(i)); + } + + return list; + } + + public void init(EntityPlayerMP player) + { + net.minecraftforge.common.ForgeHooks.sendRecipeBook(player.connection, SPacketRecipeBook.State.INIT, this.getRecipes(), this.getDisplayedRecipes(), this.isGuiOpen, this.isFilteringCraftable); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/StatBase.java b/build/tmp/recompileMc/sources/net/minecraft/stats/StatBase.java new file mode 100644 index 0000000..81cc209 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/StatBase.java @@ -0,0 +1,195 @@ +package net.minecraft.stats; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Locale; +import net.minecraft.scoreboard.IScoreCriteria; +import net.minecraft.scoreboard.ScoreCriteriaStat; +import net.minecraft.util.IJsonSerializable; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class StatBase +{ + /** The Stat ID */ + public final String statId; + /** The Stat name */ + private final ITextComponent statName; + public boolean isIndependent; + private final IStatType formatter; + private final IScoreCriteria objectiveCriteria; + private Class serializableClazz; + private static final NumberFormat numberFormat = NumberFormat.getIntegerInstance(Locale.US); + public static IStatType simpleStatType = new IStatType() + { + /** + * Formats a given stat for human consumption. + */ + @SideOnly(Side.CLIENT) + public String format(int number) + { + return StatBase.numberFormat.format((long)number); + } + }; + private static final DecimalFormat decimalFormat = new DecimalFormat("########0.00"); + public static IStatType timeStatType = new IStatType() + { + /** + * Formats a given stat for human consumption. + */ + @SideOnly(Side.CLIENT) + public String format(int number) + { + double d0 = (double)number / 20.0D; + double d1 = d0 / 60.0D; + double d2 = d1 / 60.0D; + double d3 = d2 / 24.0D; + double d4 = d3 / 365.0D; + + if (d4 > 0.5D) + { + return StatBase.decimalFormat.format(d4) + " y"; + } + else if (d3 > 0.5D) + { + return StatBase.decimalFormat.format(d3) + " d"; + } + else if (d2 > 0.5D) + { + return StatBase.decimalFormat.format(d2) + " h"; + } + else + { + return d1 > 0.5D ? StatBase.decimalFormat.format(d1) + " m" : d0 + " s"; + } + } + }; + public static IStatType distanceStatType = new IStatType() + { + /** + * Formats a given stat for human consumption. + */ + @SideOnly(Side.CLIENT) + public String format(int number) + { + double d0 = (double)number / 100.0D; + double d1 = d0 / 1000.0D; + + if (d1 > 0.5D) + { + return StatBase.decimalFormat.format(d1) + " km"; + } + else + { + return d0 > 0.5D ? StatBase.decimalFormat.format(d0) + " m" : number + " cm"; + } + } + }; + public static IStatType divideByTen = new IStatType() + { + /** + * Formats a given stat for human consumption. + */ + @SideOnly(Side.CLIENT) + public String format(int number) + { + return StatBase.decimalFormat.format((double)number * 0.1D); + } + }; + + public StatBase(String statIdIn, ITextComponent statNameIn, IStatType formatterIn) + { + this.statId = statIdIn; + this.statName = statNameIn; + this.formatter = formatterIn; + this.objectiveCriteria = new ScoreCriteriaStat(this); + IScoreCriteria.INSTANCES.put(this.objectiveCriteria.getName(), this.objectiveCriteria); + } + + public StatBase(String statIdIn, ITextComponent statNameIn) + { + this(statIdIn, statNameIn, simpleStatType); + } + + /** + * Initializes the current stat as independent (i.e., lacking prerequisites for being updated) and returns the + * current instance. + */ + public StatBase initIndependentStat() + { + this.isIndependent = true; + return this; + } + + /** + * Register the stat into StatList. + */ + public StatBase registerStat() + { + if (StatList.ID_TO_STAT_MAP.containsKey(this.statId)) + { + throw new RuntimeException("Duplicate stat id: \"" + (StatList.ID_TO_STAT_MAP.get(this.statId)).statName + "\" and \"" + this.statName + "\" at id " + this.statId); + } + else + { + StatList.ALL_STATS.add(this); + StatList.ID_TO_STAT_MAP.put(this.statId, this); + return this; + } + } + + @SideOnly(Side.CLIENT) + public String format(int number) + { + return this.formatter.format(number); + } + + public ITextComponent getStatName() + { + ITextComponent itextcomponent = this.statName.createCopy(); + itextcomponent.getStyle().setColor(TextFormatting.GRAY); + return itextcomponent; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (p_equals_1_ != null && this.getClass() == p_equals_1_.getClass()) + { + StatBase statbase = (StatBase)p_equals_1_; + return this.statId.equals(statbase.statId); + } + else + { + return false; + } + } + + public int hashCode() + { + return this.statId.hashCode(); + } + + public String toString() + { + return "Stat{id=" + this.statId + ", nameId=" + this.statName + ", awardLocallyOnly=" + this.isIndependent + ", formatter=" + this.formatter + ", objectiveCriteria=" + this.objectiveCriteria + '}'; + } + + /** + * 1.8.9 + */ + public IScoreCriteria getCriteria() + { + return this.objectiveCriteria; + } + + public Class getSerializableClazz() + { + return this.serializableClazz; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/StatBasic.java b/build/tmp/recompileMc/sources/net/minecraft/stats/StatBasic.java new file mode 100644 index 0000000..d23bedb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/StatBasic.java @@ -0,0 +1,26 @@ +package net.minecraft.stats; + +import net.minecraft.util.text.ITextComponent; + +public class StatBasic extends StatBase +{ + public StatBasic(String statIdIn, ITextComponent statNameIn, IStatType typeIn) + { + super(statIdIn, statNameIn, typeIn); + } + + public StatBasic(String statIdIn, ITextComponent statNameIn) + { + super(statIdIn, statNameIn); + } + + /** + * Register the stat into StatList. + */ + public StatBase registerStat() + { + super.registerStat(); + StatList.BASIC_STATS.add(this); + return this; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/StatCrafting.java b/build/tmp/recompileMc/sources/net/minecraft/stats/StatCrafting.java new file mode 100644 index 0000000..393ccd9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/StatCrafting.java @@ -0,0 +1,23 @@ +package net.minecraft.stats; + +import net.minecraft.item.Item; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class StatCrafting extends StatBase +{ + private final Item item; + + public StatCrafting(String p_i45910_1_, String p_i45910_2_, ITextComponent statNameIn, Item p_i45910_4_) + { + super(p_i45910_1_ + p_i45910_2_, statNameIn); + this.item = p_i45910_4_; + } + + @SideOnly(Side.CLIENT) + public Item getItem() + { + return this.item; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/StatList.java b/build/tmp/recompileMc/sources/net/minecraft/stats/StatList.java new file mode 100644 index 0000000..cc29d63 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/StatList.java @@ -0,0 +1,364 @@ +package net.minecraft.stats; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityList; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextComponentTranslation; + +public class StatList +{ + protected static final Map ID_TO_STAT_MAP = Maps.newHashMap(); + public static final List ALL_STATS = Lists.newArrayList(); + public static final List BASIC_STATS = Lists.newArrayList(); + public static final List USE_ITEM_STATS = Lists.newArrayList(); + public static final List MINE_BLOCK_STATS = Lists.newArrayList(); + /** number of times you've left a game */ + public static final StatBase LEAVE_GAME = (new StatBasic("stat.leaveGame", new TextComponentTranslation("stat.leaveGame", new Object[0]))).initIndependentStat().registerStat(); + public static final StatBase PLAY_ONE_MINUTE = (new StatBasic("stat.playOneMinute", new TextComponentTranslation("stat.playOneMinute", new Object[0]), StatBase.timeStatType)).initIndependentStat().registerStat(); + public static final StatBase TIME_SINCE_DEATH = (new StatBasic("stat.timeSinceDeath", new TextComponentTranslation("stat.timeSinceDeath", new Object[0]), StatBase.timeStatType)).initIndependentStat().registerStat(); + public static final StatBase SNEAK_TIME = (new StatBasic("stat.sneakTime", new TextComponentTranslation("stat.sneakTime", new Object[0]), StatBase.timeStatType)).initIndependentStat().registerStat(); + public static final StatBase WALK_ONE_CM = (new StatBasic("stat.walkOneCm", new TextComponentTranslation("stat.walkOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase CROUCH_ONE_CM = (new StatBasic("stat.crouchOneCm", new TextComponentTranslation("stat.crouchOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase SPRINT_ONE_CM = (new StatBasic("stat.sprintOneCm", new TextComponentTranslation("stat.sprintOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + /** distance you have swam */ + public static final StatBase SWIM_ONE_CM = (new StatBasic("stat.swimOneCm", new TextComponentTranslation("stat.swimOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + /** the distance you have fallen */ + public static final StatBase FALL_ONE_CM = (new StatBasic("stat.fallOneCm", new TextComponentTranslation("stat.fallOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase CLIMB_ONE_CM = (new StatBasic("stat.climbOneCm", new TextComponentTranslation("stat.climbOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase FLY_ONE_CM = (new StatBasic("stat.flyOneCm", new TextComponentTranslation("stat.flyOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase DIVE_ONE_CM = (new StatBasic("stat.diveOneCm", new TextComponentTranslation("stat.diveOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase MINECART_ONE_CM = (new StatBasic("stat.minecartOneCm", new TextComponentTranslation("stat.minecartOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase BOAT_ONE_CM = (new StatBasic("stat.boatOneCm", new TextComponentTranslation("stat.boatOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase PIG_ONE_CM = (new StatBasic("stat.pigOneCm", new TextComponentTranslation("stat.pigOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase HORSE_ONE_CM = (new StatBasic("stat.horseOneCm", new TextComponentTranslation("stat.horseOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static final StatBase AVIATE_ONE_CM = (new StatBasic("stat.aviateOneCm", new TextComponentTranslation("stat.aviateOneCm", new Object[0]), StatBase.distanceStatType)).initIndependentStat().registerStat(); + /** the times you've jumped */ + public static final StatBase JUMP = (new StatBasic("stat.jump", new TextComponentTranslation("stat.jump", new Object[0]))).initIndependentStat().registerStat(); + /** the distance you've dropped (or times you've fallen?) */ + public static final StatBase DROP = (new StatBasic("stat.drop", new TextComponentTranslation("stat.drop", new Object[0]))).initIndependentStat().registerStat(); + public static final StatBase DAMAGE_DEALT = (new StatBasic("stat.damageDealt", new TextComponentTranslation("stat.damageDealt", new Object[0]), StatBase.divideByTen)).registerStat(); + public static final StatBase DAMAGE_TAKEN = (new StatBasic("stat.damageTaken", new TextComponentTranslation("stat.damageTaken", new Object[0]), StatBase.divideByTen)).registerStat(); + public static final StatBase DEATHS = (new StatBasic("stat.deaths", new TextComponentTranslation("stat.deaths", new Object[0]))).registerStat(); + public static final StatBase MOB_KILLS = (new StatBasic("stat.mobKills", new TextComponentTranslation("stat.mobKills", new Object[0]))).registerStat(); + /** the number of animals you have bred */ + public static final StatBase ANIMALS_BRED = (new StatBasic("stat.animalsBred", new TextComponentTranslation("stat.animalsBred", new Object[0]))).registerStat(); + /** counts the number of times you've killed a player */ + public static final StatBase PLAYER_KILLS = (new StatBasic("stat.playerKills", new TextComponentTranslation("stat.playerKills", new Object[0]))).registerStat(); + public static final StatBase FISH_CAUGHT = (new StatBasic("stat.fishCaught", new TextComponentTranslation("stat.fishCaught", new Object[0]))).registerStat(); + public static final StatBase TALKED_TO_VILLAGER = (new StatBasic("stat.talkedToVillager", new TextComponentTranslation("stat.talkedToVillager", new Object[0]))).registerStat(); + public static final StatBase TRADED_WITH_VILLAGER = (new StatBasic("stat.tradedWithVillager", new TextComponentTranslation("stat.tradedWithVillager", new Object[0]))).registerStat(); + public static final StatBase CAKE_SLICES_EATEN = (new StatBasic("stat.cakeSlicesEaten", new TextComponentTranslation("stat.cakeSlicesEaten", new Object[0]))).registerStat(); + public static final StatBase CAULDRON_FILLED = (new StatBasic("stat.cauldronFilled", new TextComponentTranslation("stat.cauldronFilled", new Object[0]))).registerStat(); + public static final StatBase CAULDRON_USED = (new StatBasic("stat.cauldronUsed", new TextComponentTranslation("stat.cauldronUsed", new Object[0]))).registerStat(); + public static final StatBase ARMOR_CLEANED = (new StatBasic("stat.armorCleaned", new TextComponentTranslation("stat.armorCleaned", new Object[0]))).registerStat(); + public static final StatBase BANNER_CLEANED = (new StatBasic("stat.bannerCleaned", new TextComponentTranslation("stat.bannerCleaned", new Object[0]))).registerStat(); + public static final StatBase BREWINGSTAND_INTERACTION = (new StatBasic("stat.brewingstandInteraction", new TextComponentTranslation("stat.brewingstandInteraction", new Object[0]))).registerStat(); + public static final StatBase BEACON_INTERACTION = (new StatBasic("stat.beaconInteraction", new TextComponentTranslation("stat.beaconInteraction", new Object[0]))).registerStat(); + public static final StatBase DROPPER_INSPECTED = (new StatBasic("stat.dropperInspected", new TextComponentTranslation("stat.dropperInspected", new Object[0]))).registerStat(); + public static final StatBase HOPPER_INSPECTED = (new StatBasic("stat.hopperInspected", new TextComponentTranslation("stat.hopperInspected", new Object[0]))).registerStat(); + public static final StatBase DISPENSER_INSPECTED = (new StatBasic("stat.dispenserInspected", new TextComponentTranslation("stat.dispenserInspected", new Object[0]))).registerStat(); + public static final StatBase NOTEBLOCK_PLAYED = (new StatBasic("stat.noteblockPlayed", new TextComponentTranslation("stat.noteblockPlayed", new Object[0]))).registerStat(); + public static final StatBase NOTEBLOCK_TUNED = (new StatBasic("stat.noteblockTuned", new TextComponentTranslation("stat.noteblockTuned", new Object[0]))).registerStat(); + public static final StatBase FLOWER_POTTED = (new StatBasic("stat.flowerPotted", new TextComponentTranslation("stat.flowerPotted", new Object[0]))).registerStat(); + public static final StatBase TRAPPED_CHEST_TRIGGERED = (new StatBasic("stat.trappedChestTriggered", new TextComponentTranslation("stat.trappedChestTriggered", new Object[0]))).registerStat(); + public static final StatBase ENDERCHEST_OPENED = (new StatBasic("stat.enderchestOpened", new TextComponentTranslation("stat.enderchestOpened", new Object[0]))).registerStat(); + public static final StatBase ITEM_ENCHANTED = (new StatBasic("stat.itemEnchanted", new TextComponentTranslation("stat.itemEnchanted", new Object[0]))).registerStat(); + public static final StatBase RECORD_PLAYED = (new StatBasic("stat.recordPlayed", new TextComponentTranslation("stat.recordPlayed", new Object[0]))).registerStat(); + public static final StatBase FURNACE_INTERACTION = (new StatBasic("stat.furnaceInteraction", new TextComponentTranslation("stat.furnaceInteraction", new Object[0]))).registerStat(); + public static final StatBase CRAFTING_TABLE_INTERACTION = (new StatBasic("stat.craftingTableInteraction", new TextComponentTranslation("stat.workbenchInteraction", new Object[0]))).registerStat(); + public static final StatBase CHEST_OPENED = (new StatBasic("stat.chestOpened", new TextComponentTranslation("stat.chestOpened", new Object[0]))).registerStat(); + public static final StatBase SLEEP_IN_BED = (new StatBasic("stat.sleepInBed", new TextComponentTranslation("stat.sleepInBed", new Object[0]))).registerStat(); + public static final StatBase OPEN_SHULKER_BOX = (new StatBasic("stat.shulkerBoxOpened", new TextComponentTranslation("stat.shulkerBoxOpened", new Object[0]))).registerStat(); + private static final StatBase[] BLOCKS_STATS = new StatBase[4096]; + private static final StatBase[] CRAFTS_STATS = new StatBase[32000]; + /** Tracks the number of times a given block or item has been used. */ + private static final StatBase[] OBJECT_USE_STATS = new StatBase[32000]; + /** Tracks the number of times a given block or item has been broken. */ + private static final StatBase[] OBJECT_BREAK_STATS = new StatBase[32000]; + private static final StatBase[] OBJECTS_PICKED_UP_STATS = new StatBase[32000]; + private static final StatBase[] OBJECTS_DROPPED_STATS = new StatBase[32000]; + + @Nullable + public static StatBase getBlockStats(Block blockIn) + { + return BLOCKS_STATS[Block.getIdFromBlock(blockIn)]; + } + + @Nullable + public static StatBase getCraftStats(Item itemIn) + { + return CRAFTS_STATS[Item.getIdFromItem(itemIn)]; + } + + @Nullable + public static StatBase getObjectUseStats(Item itemIn) + { + return OBJECT_USE_STATS[Item.getIdFromItem(itemIn)]; + } + + @Nullable + public static StatBase getObjectBreakStats(Item itemIn) + { + return OBJECT_BREAK_STATS[Item.getIdFromItem(itemIn)]; + } + + @Nullable + public static StatBase getObjectsPickedUpStats(Item itemIn) + { + return OBJECTS_PICKED_UP_STATS[Item.getIdFromItem(itemIn)]; + } + + @Nullable + public static StatBase getDroppedObjectStats(Item itemIn) + { + return OBJECTS_DROPPED_STATS[Item.getIdFromItem(itemIn)]; + } + + public static void init() + { + initMiningStats(); + initStats(); + initItemDepleteStats(); + initCraftableStats(); + initPickedUpAndDroppedStats(); + } + + /** + * Initializes statistics related to craftable items. Is only called after both block and item stats have been + * initialized. + */ + private static void initCraftableStats() + { + Set set = Sets.newHashSet(); + + for (IRecipe irecipe : CraftingManager.REGISTRY) + { + ItemStack itemstack = irecipe.getRecipeOutput(); + + if (!itemstack.isEmpty()) + { + set.add(irecipe.getRecipeOutput().getItem()); + } + } + + for (ItemStack itemstack1 : FurnaceRecipes.instance().getSmeltingList().values()) + { + set.add(itemstack1.getItem()); + } + + for (Item item : set) + { + if (item != null) + { + int i = Item.getIdFromItem(item); + String s = getItemName(item); + + if (s != null) + { + CRAFTS_STATS[i] = (new StatCrafting("stat.craftItem.", s, new TextComponentTranslation("stat.craftItem", new Object[] {(new ItemStack(item)).getTextComponent()}), item)).registerStat(); + } + } + } + + replaceAllSimilarBlocks(CRAFTS_STATS, true); + } + + private static void initMiningStats() + { + for (Block block : Block.REGISTRY) + { + Item item = Item.getItemFromBlock(block); + + if (item != Items.AIR) + { + int i = Block.getIdFromBlock(block); + String s = getItemName(item); + + if (s != null && block.getEnableStats()) + { + BLOCKS_STATS[i] = (new StatCrafting("stat.mineBlock.", s, new TextComponentTranslation("stat.mineBlock", new Object[] {(new ItemStack(block)).getTextComponent()}), item)).registerStat(); + MINE_BLOCK_STATS.add((StatCrafting)BLOCKS_STATS[i]); + } + } + } + + replaceAllSimilarBlocks(BLOCKS_STATS, false); + } + + private static void initStats() + { + for (Item item : Item.REGISTRY) + { + if (item != null) + { + int i = Item.getIdFromItem(item); + String s = getItemName(item); + + if (s != null) + { + OBJECT_USE_STATS[i] = (new StatCrafting("stat.useItem.", s, new TextComponentTranslation("stat.useItem", new Object[] {(new ItemStack(item)).getTextComponent()}), item)).registerStat(); + + if (!(item instanceof ItemBlock)) + { + USE_ITEM_STATS.add((StatCrafting)OBJECT_USE_STATS[i]); + } + } + } + } + + replaceAllSimilarBlocks(OBJECT_USE_STATS, true); + } + + private static void initItemDepleteStats() + { + for (Item item : Item.REGISTRY) + { + if (item != null) + { + int i = Item.getIdFromItem(item); + String s = getItemName(item); + + if (s != null && item.isDamageable()) + { + OBJECT_BREAK_STATS[i] = (new StatCrafting("stat.breakItem.", s, new TextComponentTranslation("stat.breakItem", new Object[] {(new ItemStack(item)).getTextComponent()}), item)).registerStat(); + } + } + } + + replaceAllSimilarBlocks(OBJECT_BREAK_STATS, true); + } + + private static void initPickedUpAndDroppedStats() + { + for (Item item : Item.REGISTRY) + { + if (item != null) + { + int i = Item.getIdFromItem(item); + String s = getItemName(item); + + if (s != null) + { + OBJECTS_PICKED_UP_STATS[i] = (new StatCrafting("stat.pickup.", s, new TextComponentTranslation("stat.pickup", new Object[] {(new ItemStack(item)).getTextComponent()}), item)).registerStat(); + OBJECTS_DROPPED_STATS[i] = (new StatCrafting("stat.drop.", s, new TextComponentTranslation("stat.drop", new Object[] {(new ItemStack(item)).getTextComponent()}), item)).registerStat(); + } + } + } + + replaceAllSimilarBlocks(OBJECT_BREAK_STATS, true); + } + + private static String getItemName(Item itemIn) + { + ResourceLocation resourcelocation = Item.REGISTRY.getNameForObject(itemIn); + return resourcelocation != null ? resourcelocation.toString().replace(':', '.') : null; + } + + private static void replaceAllSimilarBlocks(StatBase[] stat, boolean useItemIds) + { + mergeStatBases(stat, Blocks.WATER, Blocks.FLOWING_WATER, useItemIds); + mergeStatBases(stat, Blocks.LAVA, Blocks.FLOWING_LAVA, useItemIds); + mergeStatBases(stat, Blocks.LIT_PUMPKIN, Blocks.PUMPKIN, useItemIds); + mergeStatBases(stat, Blocks.LIT_FURNACE, Blocks.FURNACE, useItemIds); + mergeStatBases(stat, Blocks.LIT_REDSTONE_ORE, Blocks.REDSTONE_ORE, useItemIds); + mergeStatBases(stat, Blocks.POWERED_REPEATER, Blocks.UNPOWERED_REPEATER, useItemIds); + mergeStatBases(stat, Blocks.POWERED_COMPARATOR, Blocks.UNPOWERED_COMPARATOR, useItemIds); + mergeStatBases(stat, Blocks.REDSTONE_TORCH, Blocks.UNLIT_REDSTONE_TORCH, useItemIds); + mergeStatBases(stat, Blocks.LIT_REDSTONE_LAMP, Blocks.REDSTONE_LAMP, useItemIds); + mergeStatBases(stat, Blocks.DOUBLE_STONE_SLAB, Blocks.STONE_SLAB, useItemIds); + mergeStatBases(stat, Blocks.DOUBLE_WOODEN_SLAB, Blocks.WOODEN_SLAB, useItemIds); + mergeStatBases(stat, Blocks.DOUBLE_STONE_SLAB2, Blocks.STONE_SLAB2, useItemIds); + mergeStatBases(stat, Blocks.GRASS, Blocks.DIRT, useItemIds); + mergeStatBases(stat, Blocks.FARMLAND, Blocks.DIRT, useItemIds); + } + + private static void mergeStatBases(StatBase[] statBaseIn, Block block1, Block block2, boolean useItemIds) + { + int i; + int j; + if (useItemIds) { + i = Item.getIdFromItem(Item.getItemFromBlock(block1)); + j = Item.getIdFromItem(Item.getItemFromBlock(block2)); + } else { + i = Block.getIdFromBlock(block1); + j = Block.getIdFromBlock(block2); + } + + if (statBaseIn[i] != null && statBaseIn[j] == null) + { + statBaseIn[j] = statBaseIn[i]; + } + else + { + ALL_STATS.remove(statBaseIn[i]); + MINE_BLOCK_STATS.remove(statBaseIn[i]); + BASIC_STATS.remove(statBaseIn[i]); + statBaseIn[i] = statBaseIn[j]; + } + } + + public static StatBase getStatKillEntity(EntityList.EntityEggInfo eggInfo) + { + String s = EntityList.getTranslationName(eggInfo.spawnedID); + return s == null ? null : (new StatBase("stat.killEntity." + s, new TextComponentTranslation("stat.entityKill", new Object[] {new TextComponentTranslation("entity." + s + ".name", new Object[0])}))).registerStat(); + } + + public static StatBase getStatEntityKilledBy(EntityList.EntityEggInfo eggInfo) + { + String s = EntityList.getTranslationName(eggInfo.spawnedID); + return s == null ? null : (new StatBase("stat.entityKilledBy." + s, new TextComponentTranslation("stat.entityKilledBy", new Object[] {new TextComponentTranslation("entity." + s + ".name", new Object[0])}))).registerStat(); + } + + @Nullable + public static StatBase getOneShotStat(String statName) + { + return ID_TO_STAT_MAP.get(statName); + } + + @Deprecated //MODDER DO NOT CALL THIS ITS JUST A EVENT CALLBACK FOR FORGE + public static void reinit() + { + ID_TO_STAT_MAP.clear(); + BASIC_STATS.clear(); + USE_ITEM_STATS.clear(); + MINE_BLOCK_STATS.clear(); + + for (StatBase[] sb : new StatBase[][]{BLOCKS_STATS, CRAFTS_STATS, OBJECT_USE_STATS, OBJECT_BREAK_STATS, OBJECTS_PICKED_UP_STATS, OBJECTS_DROPPED_STATS}) + { + for (int x = 0; x < sb.length; x++) + { + if (sb[x] != null) + { + ALL_STATS.remove(sb[x]); + sb[x] = null; + } + } + } + List unknown = Lists.newArrayList(ALL_STATS); + ALL_STATS.clear(); + + for (StatBase b : unknown) + b.registerStat(); + + initMiningStats(); + initStats(); + initItemDepleteStats(); + initCraftableStats(); + initPickedUpAndDroppedStats(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/StatisticsManager.java b/build/tmp/recompileMc/sources/net/minecraft/stats/StatisticsManager.java new file mode 100644 index 0000000..f39e614 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/StatisticsManager.java @@ -0,0 +1,41 @@ +package net.minecraft.stats; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.TupleIntJsonSerializable; + +public class StatisticsManager +{ + protected final Map statsData = Maps.newConcurrentMap(); + + public void increaseStat(EntityPlayer player, StatBase stat, int amount) + { + this.unlockAchievement(player, stat, this.readStat(stat) + amount); + } + + /** + * Triggers the logging of an achievement and attempts to announce to server + */ + public void unlockAchievement(EntityPlayer playerIn, StatBase statIn, int p_150873_3_) + { + TupleIntJsonSerializable tupleintjsonserializable = this.statsData.get(statIn); + + if (tupleintjsonserializable == null) + { + tupleintjsonserializable = new TupleIntJsonSerializable(); + this.statsData.put(statIn, tupleintjsonserializable); + } + + tupleintjsonserializable.setIntegerValue(p_150873_3_); + } + + /** + * Reads the given stat and returns its value as an int. + */ + public int readStat(StatBase stat) + { + TupleIntJsonSerializable tupleintjsonserializable = this.statsData.get(stat); + return tupleintjsonserializable == null ? 0 : tupleintjsonserializable.getIntegerValue(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/StatisticsManagerServer.java b/build/tmp/recompileMc/sources/net/minecraft/stats/StatisticsManagerServer.java new file mode 100644 index 0000000..666f2a2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/StatisticsManagerServer.java @@ -0,0 +1,202 @@ +package net.minecraft.stats; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonParser; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.play.server.SPacketStatistics; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.IJsonSerializable; +import net.minecraft.util.TupleIntJsonSerializable; +import org.apache.commons.io.FileUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class StatisticsManagerServer extends StatisticsManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final MinecraftServer mcServer; + private final File statsFile; + private final Set dirty = Sets.newHashSet(); + private int lastStatRequest = -300; + + public StatisticsManagerServer(MinecraftServer serverIn, File statsFileIn) + { + this.mcServer = serverIn; + this.statsFile = statsFileIn; + } + + public void readStatFile() + { + if (this.statsFile.isFile()) + { + try + { + this.statsData.clear(); + this.statsData.putAll(this.parseJson(FileUtils.readFileToString(this.statsFile))); + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't read statistics file {}", this.statsFile, ioexception); + } + catch (JsonParseException jsonparseexception) + { + LOGGER.error("Couldn't parse statistics file {}", this.statsFile, jsonparseexception); + } + } + } + + public void saveStatFile() + { + try + { + FileUtils.writeStringToFile(this.statsFile, dumpJson(this.statsData)); + } + catch (IOException ioexception) + { + LOGGER.error("Couldn't save stats", (Throwable)ioexception); + } + } + + /** + * Triggers the logging of an achievement and attempts to announce to server + */ + public void unlockAchievement(EntityPlayer playerIn, StatBase statIn, int p_150873_3_) + { + super.unlockAchievement(playerIn, statIn, p_150873_3_); + this.dirty.add(statIn); + } + + private Set getDirty() + { + Set set = Sets.newHashSet(this.dirty); + this.dirty.clear(); + return set; + } + + public Map parseJson(String p_150881_1_) + { + JsonElement jsonelement = (new JsonParser()).parse(p_150881_1_); + + if (!jsonelement.isJsonObject()) + { + return Maps.newHashMap(); + } + else + { + JsonObject jsonobject = jsonelement.getAsJsonObject(); + Map map = Maps.newHashMap(); + + for (Entry entry : jsonobject.entrySet()) + { + StatBase statbase = StatList.getOneShotStat(entry.getKey()); + + if (statbase != null) + { + TupleIntJsonSerializable tupleintjsonserializable = new TupleIntJsonSerializable(); + + if (((JsonElement)entry.getValue()).isJsonPrimitive() && ((JsonElement)entry.getValue()).getAsJsonPrimitive().isNumber()) + { + tupleintjsonserializable.setIntegerValue(((JsonElement)entry.getValue()).getAsInt()); + } + else if (((JsonElement)entry.getValue()).isJsonObject()) + { + JsonObject jsonobject1 = ((JsonElement)entry.getValue()).getAsJsonObject(); + + if (jsonobject1.has("value") && jsonobject1.get("value").isJsonPrimitive() && jsonobject1.get("value").getAsJsonPrimitive().isNumber()) + { + tupleintjsonserializable.setIntegerValue(jsonobject1.getAsJsonPrimitive("value").getAsInt()); + } + + if (jsonobject1.has("progress") && statbase.getSerializableClazz() != null) + { + try + { + Constructor constructor = statbase.getSerializableClazz().getConstructor(); + IJsonSerializable ijsonserializable = constructor.newInstance(); + ijsonserializable.fromJson(jsonobject1.get("progress")); + tupleintjsonserializable.setJsonSerializableValue(ijsonserializable); + } + catch (Throwable throwable) + { + LOGGER.warn("Invalid statistic progress in {}", this.statsFile, throwable); + } + } + } + + map.put(statbase, tupleintjsonserializable); + } + else + { + LOGGER.warn("Invalid statistic in {}: Don't know what {} is", this.statsFile, entry.getKey()); + } + } + + return map; + } + } + + public static String dumpJson(Map p_150880_0_) + { + JsonObject jsonobject = new JsonObject(); + + for (Entry entry : p_150880_0_.entrySet()) + { + if (((TupleIntJsonSerializable)entry.getValue()).getJsonSerializableValue() != null) + { + JsonObject jsonobject1 = new JsonObject(); + jsonobject1.addProperty("value", Integer.valueOf(((TupleIntJsonSerializable)entry.getValue()).getIntegerValue())); + + try + { + jsonobject1.add("progress", ((TupleIntJsonSerializable)entry.getValue()).getJsonSerializableValue().getSerializableElement()); + } + catch (Throwable throwable) + { + LOGGER.warn("Couldn't save statistic {}: error serializing progress", ((StatBase)entry.getKey()).getStatName(), throwable); + } + + jsonobject.add((entry.getKey()).statId, jsonobject1); + } + else + { + jsonobject.addProperty((entry.getKey()).statId, Integer.valueOf(((TupleIntJsonSerializable)entry.getValue()).getIntegerValue())); + } + } + + return jsonobject.toString(); + } + + public void markAllDirty() + { + this.dirty.addAll(this.statsData.keySet()); + } + + public void sendStats(EntityPlayerMP player) + { + int i = this.mcServer.getTickCounter(); + Map map = Maps.newHashMap(); + + if (i - this.lastStatRequest > 300) + { + this.lastStatRequest = i; + + for (StatBase statbase : this.getDirty()) + { + map.put(statbase, Integer.valueOf(this.readStat(statbase))); + } + } + + player.connection.sendPacket(new SPacketStatistics(map)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/stats/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/stats/package-info.java new file mode 100644 index 0000000..31a19b8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/stats/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.stats; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/BannerPattern.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/BannerPattern.java new file mode 100644 index 0000000..e441b0c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/BannerPattern.java @@ -0,0 +1,125 @@ +package net.minecraft.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.block.BlockFlower; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public enum BannerPattern +{ + BASE("base", "b"), + SQUARE_BOTTOM_LEFT("square_bottom_left", "bl", " ", " ", "# "), + SQUARE_BOTTOM_RIGHT("square_bottom_right", "br", " ", " ", " #"), + SQUARE_TOP_LEFT("square_top_left", "tl", "# ", " ", " "), + SQUARE_TOP_RIGHT("square_top_right", "tr", " #", " ", " "), + STRIPE_BOTTOM("stripe_bottom", "bs", " ", " ", "###"), + STRIPE_TOP("stripe_top", "ts", "###", " ", " "), + STRIPE_LEFT("stripe_left", "ls", "# ", "# ", "# "), + STRIPE_RIGHT("stripe_right", "rs", " #", " #", " #"), + STRIPE_CENTER("stripe_center", "cs", " # ", " # ", " # "), + STRIPE_MIDDLE("stripe_middle", "ms", " ", "###", " "), + STRIPE_DOWNRIGHT("stripe_downright", "drs", "# ", " # ", " #"), + STRIPE_DOWNLEFT("stripe_downleft", "dls", " #", " # ", "# "), + STRIPE_SMALL("small_stripes", "ss", "# #", "# #", " "), + CROSS("cross", "cr", "# #", " # ", "# #"), + STRAIGHT_CROSS("straight_cross", "sc", " # ", "###", " # "), + TRIANGLE_BOTTOM("triangle_bottom", "bt", " ", " # ", "# #"), + TRIANGLE_TOP("triangle_top", "tt", "# #", " # ", " "), + TRIANGLES_BOTTOM("triangles_bottom", "bts", " ", "# #", " # "), + TRIANGLES_TOP("triangles_top", "tts", " # ", "# #", " "), + DIAGONAL_LEFT("diagonal_left", "ld", "## ", "# ", " "), + DIAGONAL_RIGHT("diagonal_up_right", "rd", " ", " #", " ##"), + DIAGONAL_LEFT_MIRROR("diagonal_up_left", "lud", " ", "# ", "## "), + DIAGONAL_RIGHT_MIRROR("diagonal_right", "rud", " ##", " #", " "), + CIRCLE_MIDDLE("circle", "mc", " ", " # ", " "), + RHOMBUS_MIDDLE("rhombus", "mr", " # ", "# #", " # "), + HALF_VERTICAL("half_vertical", "vh", "## ", "## ", "## "), + HALF_HORIZONTAL("half_horizontal", "hh", "###", "###", " "), + HALF_VERTICAL_MIRROR("half_vertical_right", "vhr", " ##", " ##", " ##"), + HALF_HORIZONTAL_MIRROR("half_horizontal_bottom", "hhb", " ", "###", "###"), + BORDER("border", "bo", "###", "# #", "###"), + CURLY_BORDER("curly_border", "cbo", new ItemStack(Blocks.VINE)), + CREEPER("creeper", "cre", new ItemStack(Items.SKULL, 1, 4)), + GRADIENT("gradient", "gra", "# #", " # ", " # "), + GRADIENT_UP("gradient_up", "gru", " # ", " # ", "# #"), + BRICKS("bricks", "bri", new ItemStack(Blocks.BRICK_BLOCK)), + SKULL("skull", "sku", new ItemStack(Items.SKULL, 1, 1)), + FLOWER("flower", "flo", new ItemStack(Blocks.RED_FLOWER, 1, BlockFlower.EnumFlowerType.OXEYE_DAISY.getMeta())), + MOJANG("mojang", "moj", new ItemStack(Items.GOLDEN_APPLE, 1, 1)); + + private final String fileName; + private final String hashname; + private final String[] patterns; + private ItemStack patternItem; + + private BannerPattern(String p_i47245_3_, String p_i47245_4_) + { + this.patterns = new String[3]; + this.patternItem = ItemStack.EMPTY; + this.fileName = p_i47245_3_; + this.hashname = p_i47245_4_; + } + + private BannerPattern(String p_i47246_3_, String p_i47246_4_, ItemStack p_i47246_5_) + { + this(p_i47246_3_, p_i47246_4_); + this.patternItem = p_i47246_5_; + } + + private BannerPattern(String p_i47247_3_, String p_i47247_4_, String p_i47247_5_, String p_i47247_6_, String p_i47247_7_) + { + this(p_i47247_3_, p_i47247_4_); + this.patterns[0] = p_i47247_5_; + this.patterns[1] = p_i47247_6_; + this.patterns[2] = p_i47247_7_; + } + + @SideOnly(Side.CLIENT) + public String getFileName() + { + return this.fileName; + } + + public String getHashname() + { + return this.hashname; + } + + public String[] getPatterns() + { + return this.patterns; + } + + public boolean hasPattern() + { + return !this.patternItem.isEmpty() || this.patterns[0] != null; + } + + public boolean hasPatternItem() + { + return !this.patternItem.isEmpty(); + } + + public ItemStack getPatternItem() + { + return this.patternItem; + } + + @Nullable + @SideOnly(Side.CLIENT) + public static BannerPattern byHash(String hash) + { + for (BannerPattern bannerpattern : values()) + { + if (bannerpattern.hashname.equals(hash)) + { + return bannerpattern; + } + } + + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/CommandBlockBaseLogic.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/CommandBlockBaseLogic.java new file mode 100644 index 0000000..9ee0efb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/CommandBlockBaseLogic.java @@ -0,0 +1,314 @@ +package net.minecraft.tileentity; + +import io.netty.buffer.ByteBuf; +import java.text.SimpleDateFormat; +import java.util.Date; +import javax.annotation.Nullable; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.ICommandSender; +import net.minecraft.crash.CrashReport; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ReportedException; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class CommandBlockBaseLogic implements ICommandSender +{ + /** The formatting for the timestamp on commands run. */ + private static final SimpleDateFormat TIMESTAMP_FORMAT = new SimpleDateFormat("HH:mm:ss"); + private long lastExecution = -1L; + private boolean updateLastExecution = true; + /** The number of successful commands run. (used for redstone output) */ + private int successCount; + private boolean trackOutput = true; + /** The previously run command. */ + private ITextComponent lastOutput; + /** The command stored in the command block. */ + private String commandStored = ""; + /** The custom name of the command block. (defaults to "@") */ + private String customName = "@"; + private final CommandResultStats resultStats = new CommandResultStats(); + + /** + * returns the successCount int. + */ + public int getSuccessCount() + { + return this.successCount; + } + + public void setSuccessCount(int successCountIn) + { + this.successCount = successCountIn; + } + + /** + * Returns the lastOutput. + */ + public ITextComponent getLastOutput() + { + return (ITextComponent)(this.lastOutput == null ? new TextComponentString("") : this.lastOutput); + } + + public NBTTagCompound writeToNBT(NBTTagCompound p_189510_1_) + { + p_189510_1_.setString("Command", this.commandStored); + p_189510_1_.setInteger("SuccessCount", this.successCount); + p_189510_1_.setString("CustomName", this.customName); + p_189510_1_.setBoolean("TrackOutput", this.trackOutput); + + if (this.lastOutput != null && this.trackOutput) + { + p_189510_1_.setString("LastOutput", ITextComponent.Serializer.componentToJson(this.lastOutput)); + } + + p_189510_1_.setBoolean("UpdateLastExecution", this.updateLastExecution); + + if (this.updateLastExecution && this.lastExecution > 0L) + { + p_189510_1_.setLong("LastExecution", this.lastExecution); + } + + this.resultStats.writeStatsToNBT(p_189510_1_); + return p_189510_1_; + } + + /** + * Reads NBT formatting and stored data into variables. + */ + public void readDataFromNBT(NBTTagCompound nbt) + { + this.commandStored = nbt.getString("Command"); + this.successCount = nbt.getInteger("SuccessCount"); + + if (nbt.hasKey("CustomName", 8)) + { + this.customName = nbt.getString("CustomName"); + } + + if (nbt.hasKey("TrackOutput", 1)) + { + this.trackOutput = nbt.getBoolean("TrackOutput"); + } + + if (nbt.hasKey("LastOutput", 8) && this.trackOutput) + { + try + { + this.lastOutput = ITextComponent.Serializer.jsonToComponent(nbt.getString("LastOutput")); + } + catch (Throwable throwable) + { + this.lastOutput = new TextComponentString(throwable.getMessage()); + } + } + else + { + this.lastOutput = null; + } + + if (nbt.hasKey("UpdateLastExecution")) + { + this.updateLastExecution = nbt.getBoolean("UpdateLastExecution"); + } + + if (this.updateLastExecution && nbt.hasKey("LastExecution")) + { + this.lastExecution = nbt.getLong("LastExecution"); + } + else + { + this.lastExecution = -1L; + } + + this.resultStats.readStatsFromNBT(nbt); + } + + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return permLevel <= 2; + } + + /** + * Sets the command. + */ + public void setCommand(String command) + { + this.commandStored = command; + this.successCount = 0; + } + + /** + * Returns the command of the command block. + */ + public String getCommand() + { + return this.commandStored; + } + + public boolean trigger(World worldIn) + { + if (!worldIn.isRemote && worldIn.getTotalWorldTime() != this.lastExecution) + { + if ("Searge".equalsIgnoreCase(this.commandStored)) + { + this.lastOutput = new TextComponentString("#itzlipofutzli"); + this.successCount = 1; + return true; + } + else + { + MinecraftServer minecraftserver = this.getServer(); + + if (minecraftserver != null && minecraftserver.isAnvilFileSet() && minecraftserver.isCommandBlockEnabled()) + { + try + { + this.lastOutput = null; + this.successCount = minecraftserver.getCommandManager().executeCommand(this, this.commandStored); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.makeCrashReport(throwable, "Executing command block"); + CrashReportCategory crashreportcategory = crashreport.makeCategory("Command to be executed"); + crashreportcategory.addDetail("Command", new ICrashReportDetail() + { + public String call() throws Exception + { + return CommandBlockBaseLogic.this.getCommand(); + } + }); + crashreportcategory.addDetail("Name", new ICrashReportDetail() + { + public String call() throws Exception + { + return CommandBlockBaseLogic.this.getName(); + } + }); + throw new ReportedException(crashreport); + } + } + else + { + this.successCount = 0; + } + + if (this.updateLastExecution) + { + this.lastExecution = worldIn.getTotalWorldTime(); + } + else + { + this.lastExecution = -1L; + } + + return true; + } + } + else + { + return false; + } + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.customName; + } + + public void setName(String name) + { + this.customName = name; + } + + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + if (this.trackOutput && this.getEntityWorld() != null && !this.getEntityWorld().isRemote) + { + this.lastOutput = (new TextComponentString("[" + TIMESTAMP_FORMAT.format(new Date()) + "] ")).appendSibling(component); + this.updateCommand(); + } + } + + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + MinecraftServer minecraftserver = this.getServer(); + return minecraftserver == null || !minecraftserver.isAnvilFileSet() || minecraftserver.worlds[0].getGameRules().getBoolean("commandBlockOutput"); + } + + public void setCommandStat(CommandResultStats.Type type, int amount) + { + this.resultStats.setCommandStatForSender(this.getServer(), this, type, amount); + } + + public abstract void updateCommand(); + + /** + * Currently this returns 0 for the traditional command block, and 1 for the minecart command block + */ + @SideOnly(Side.CLIENT) + public abstract int getCommandBlockType(); + + /** + * Fills in information about the command block for the packet. entityId for the minecart version, and X/Y/Z for the + * traditional version + */ + @SideOnly(Side.CLIENT) + public abstract void fillInInfo(ByteBuf buf); + + public void setLastOutput(@Nullable ITextComponent lastOutputMessage) + { + this.lastOutput = lastOutputMessage; + } + + public void setTrackOutput(boolean shouldTrackOutput) + { + this.trackOutput = shouldTrackOutput; + } + + public boolean shouldTrackOutput() + { + return this.trackOutput; + } + + public boolean tryOpenEditCommandBlock(EntityPlayer playerIn) + { + if (!playerIn.canUseCommandBlock()) + { + return false; + } + else + { + if (playerIn.getEntityWorld().isRemote) + { + playerIn.displayGuiEditCommandCart(this); + } + + return true; + } + } + + public CommandResultStats getCommandResultStats() + { + return this.resultStats; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/IHopper.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/IHopper.java new file mode 100644 index 0000000..5be5ae5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/IHopper.java @@ -0,0 +1,27 @@ +package net.minecraft.tileentity; + +import net.minecraft.inventory.IInventory; +import net.minecraft.world.World; + +public interface IHopper extends IInventory +{ + /** + * Returns the worldObj for this tileEntity. + */ + World getWorld(); + + /** + * Gets the world X position for this hopper entity. + */ + double getXPos(); + + /** + * Gets the world Y position for this hopper entity. + */ + double getYPos(); + + /** + * Gets the world Z position for this hopper entity. + */ + double getZPos(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/MobSpawnerBaseLogic.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/MobSpawnerBaseLogic.java new file mode 100644 index 0000000..c5c963b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/MobSpawnerBaseLogic.java @@ -0,0 +1,327 @@ +package net.minecraft.tileentity; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.WeightedRandom; +import net.minecraft.util.WeightedSpawnerEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.chunk.storage.AnvilChunkLoader; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public abstract class MobSpawnerBaseLogic +{ + /** The delay to spawn. */ + private int spawnDelay = 20; + /** List of potential entities to spawn */ + private final List potentialSpawns = Lists.newArrayList(); + private WeightedSpawnerEntity spawnData = new WeightedSpawnerEntity(); + /** The rotation of the mob inside the mob spawner */ + private double mobRotation; + /** the previous rotation of the mob inside the mob spawner */ + private double prevMobRotation; + private int minSpawnDelay = 200; + private int maxSpawnDelay = 800; + private int spawnCount = 4; + /** Cached instance of the entity to render inside the spawner. */ + private Entity cachedEntity; + private int maxNearbyEntities = 6; + /** The distance from which a player activates the spawner. */ + private int activatingRangeFromPlayer = 16; + /** The range coefficient for spawning entities around. */ + private int spawnRange = 4; + + @Nullable + private ResourceLocation getEntityId() + { + String s = this.spawnData.getNbt().getString("id"); + return StringUtils.isNullOrEmpty(s) ? null : new ResourceLocation(s); + } + + public void setEntityId(@Nullable ResourceLocation id) + { + if (id != null) + { + this.spawnData.getNbt().setString("id", id.toString()); + } + } + + /** + * Returns true if there's a player close enough to this mob spawner to activate it. + */ + private boolean isActivated() + { + BlockPos blockpos = this.getSpawnerPosition(); + return this.getSpawnerWorld().isAnyPlayerWithinRangeAt((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D, (double)this.activatingRangeFromPlayer); + } + + public void updateSpawner() + { + if (!this.isActivated()) + { + this.prevMobRotation = this.mobRotation; + } + else + { + BlockPos blockpos = this.getSpawnerPosition(); + + if (this.getSpawnerWorld().isRemote) + { + double d3 = (double)((float)blockpos.getX() + this.getSpawnerWorld().rand.nextFloat()); + double d4 = (double)((float)blockpos.getY() + this.getSpawnerWorld().rand.nextFloat()); + double d5 = (double)((float)blockpos.getZ() + this.getSpawnerWorld().rand.nextFloat()); + this.getSpawnerWorld().spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d3, d4, d5, 0.0D, 0.0D, 0.0D); + this.getSpawnerWorld().spawnParticle(EnumParticleTypes.FLAME, d3, d4, d5, 0.0D, 0.0D, 0.0D); + + if (this.spawnDelay > 0) + { + --this.spawnDelay; + } + + this.prevMobRotation = this.mobRotation; + this.mobRotation = (this.mobRotation + (double)(1000.0F / ((float)this.spawnDelay + 200.0F))) % 360.0D; + } + else + { + if (this.spawnDelay == -1) + { + this.resetTimer(); + } + + if (this.spawnDelay > 0) + { + --this.spawnDelay; + return; + } + + boolean flag = false; + + for (int i = 0; i < this.spawnCount; ++i) + { + NBTTagCompound nbttagcompound = this.spawnData.getNbt(); + NBTTagList nbttaglist = nbttagcompound.getTagList("Pos", 6); + World world = this.getSpawnerWorld(); + int j = nbttaglist.tagCount(); + double d0 = j >= 1 ? nbttaglist.getDoubleAt(0) : (double)blockpos.getX() + (world.rand.nextDouble() - world.rand.nextDouble()) * (double)this.spawnRange + 0.5D; + double d1 = j >= 2 ? nbttaglist.getDoubleAt(1) : (double)(blockpos.getY() + world.rand.nextInt(3) - 1); + double d2 = j >= 3 ? nbttaglist.getDoubleAt(2) : (double)blockpos.getZ() + (world.rand.nextDouble() - world.rand.nextDouble()) * (double)this.spawnRange + 0.5D; + Entity entity = AnvilChunkLoader.readWorldEntityPos(nbttagcompound, world, d0, d1, d2, false); + + if (entity == null) + { + return; + } + + int k = world.getEntitiesWithinAABB(entity.getClass(), (new AxisAlignedBB((double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ(), (double)(blockpos.getX() + 1), (double)(blockpos.getY() + 1), (double)(blockpos.getZ() + 1))).grow((double)this.spawnRange)).size(); + + if (k >= this.maxNearbyEntities) + { + this.resetTimer(); + return; + } + + EntityLiving entityliving = entity instanceof EntityLiving ? (EntityLiving)entity : null; + entity.setLocationAndAngles(entity.posX, entity.posY, entity.posZ, world.rand.nextFloat() * 360.0F, 0.0F); + + if (entityliving == null || net.minecraftforge.event.ForgeEventFactory.canEntitySpawnSpawner(entityliving, getSpawnerWorld(), (float)entity.posX, (float)entity.posY, (float)entity.posZ, this)) + { + if (this.spawnData.getNbt().getSize() == 1 && this.spawnData.getNbt().hasKey("id", 8) && entity instanceof EntityLiving) + { + if (!net.minecraftforge.event.ForgeEventFactory.doSpecialSpawn(entityliving, this.getSpawnerWorld(), (float)entity.posX, (float)entity.posY, (float)entity.posZ, this)) + ((EntityLiving)entity).onInitialSpawn(world.getDifficultyForLocation(new BlockPos(entity)), (IEntityLivingData)null); + } + + AnvilChunkLoader.spawnEntity(entity, world); + world.playEvent(2004, blockpos, 0); + + if (entityliving != null) + { + entityliving.spawnExplosionParticle(); + } + + flag = true; + } + } + + if (flag) + { + this.resetTimer(); + } + } + } + } + + private void resetTimer() + { + if (this.maxSpawnDelay <= this.minSpawnDelay) + { + this.spawnDelay = this.minSpawnDelay; + } + else + { + int i = this.maxSpawnDelay - this.minSpawnDelay; + this.spawnDelay = this.minSpawnDelay + this.getSpawnerWorld().rand.nextInt(i); + } + + if (!this.potentialSpawns.isEmpty()) + { + this.setNextSpawnData((WeightedSpawnerEntity)WeightedRandom.getRandomItem(this.getSpawnerWorld().rand, this.potentialSpawns)); + } + + this.broadcastEvent(1); + } + + public void readFromNBT(NBTTagCompound nbt) + { + this.spawnDelay = nbt.getShort("Delay"); + this.potentialSpawns.clear(); + + if (nbt.hasKey("SpawnPotentials", 9)) + { + NBTTagList nbttaglist = nbt.getTagList("SpawnPotentials", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + this.potentialSpawns.add(new WeightedSpawnerEntity(nbttaglist.getCompoundTagAt(i))); + } + } + + if (nbt.hasKey("SpawnData", 10)) + { + this.setNextSpawnData(new WeightedSpawnerEntity(1, nbt.getCompoundTag("SpawnData"))); + } + else if (!this.potentialSpawns.isEmpty()) + { + this.setNextSpawnData((WeightedSpawnerEntity)WeightedRandom.getRandomItem(this.getSpawnerWorld().rand, this.potentialSpawns)); + } + + if (nbt.hasKey("MinSpawnDelay", 99)) + { + this.minSpawnDelay = nbt.getShort("MinSpawnDelay"); + this.maxSpawnDelay = nbt.getShort("MaxSpawnDelay"); + this.spawnCount = nbt.getShort("SpawnCount"); + } + + if (nbt.hasKey("MaxNearbyEntities", 99)) + { + this.maxNearbyEntities = nbt.getShort("MaxNearbyEntities"); + this.activatingRangeFromPlayer = nbt.getShort("RequiredPlayerRange"); + } + + if (nbt.hasKey("SpawnRange", 99)) + { + this.spawnRange = nbt.getShort("SpawnRange"); + } + + if (this.getSpawnerWorld() != null) + { + this.cachedEntity = null; + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound p_189530_1_) + { + ResourceLocation resourcelocation = this.getEntityId(); + + if (resourcelocation == null) + { + return p_189530_1_; + } + else + { + p_189530_1_.setShort("Delay", (short)this.spawnDelay); + p_189530_1_.setShort("MinSpawnDelay", (short)this.minSpawnDelay); + p_189530_1_.setShort("MaxSpawnDelay", (short)this.maxSpawnDelay); + p_189530_1_.setShort("SpawnCount", (short)this.spawnCount); + p_189530_1_.setShort("MaxNearbyEntities", (short)this.maxNearbyEntities); + p_189530_1_.setShort("RequiredPlayerRange", (short)this.activatingRangeFromPlayer); + p_189530_1_.setShort("SpawnRange", (short)this.spawnRange); + p_189530_1_.setTag("SpawnData", this.spawnData.getNbt().copy()); + NBTTagList nbttaglist = new NBTTagList(); + + if (this.potentialSpawns.isEmpty()) + { + nbttaglist.appendTag(this.spawnData.toCompoundTag()); + } + else + { + for (WeightedSpawnerEntity weightedspawnerentity : this.potentialSpawns) + { + nbttaglist.appendTag(weightedspawnerentity.toCompoundTag()); + } + } + + p_189530_1_.setTag("SpawnPotentials", nbttaglist); + return p_189530_1_; + } + } + + /** + * Sets the delay to minDelay if parameter given is 1, else return false. + */ + public boolean setDelayToMin(int delay) + { + if (delay == 1 && this.getSpawnerWorld().isRemote) + { + this.spawnDelay = this.minSpawnDelay; + return true; + } + else + { + return false; + } + } + + @SideOnly(Side.CLIENT) + public Entity getCachedEntity() + { + if (this.cachedEntity == null) + { + this.cachedEntity = AnvilChunkLoader.readWorldEntity(this.spawnData.getNbt(), this.getSpawnerWorld(), false); + + if (this.spawnData.getNbt().getSize() == 1 && this.spawnData.getNbt().hasKey("id", 8) && this.cachedEntity instanceof EntityLiving) + { + ((EntityLiving)this.cachedEntity).onInitialSpawn(this.getSpawnerWorld().getDifficultyForLocation(new BlockPos(this.cachedEntity)), (IEntityLivingData)null); + } + } + + return this.cachedEntity; + } + + public void setNextSpawnData(WeightedSpawnerEntity p_184993_1_) + { + this.spawnData = p_184993_1_; + } + + public abstract void broadcastEvent(int id); + + public abstract World getSpawnerWorld(); + + public abstract BlockPos getSpawnerPosition(); + + @SideOnly(Side.CLIENT) + public double getMobRotation() + { + return this.mobRotation; + } + + @SideOnly(Side.CLIENT) + public double getPrevMobRotation() + { + return this.prevMobRotation; + } + + /* ======================================== FORGE START =====================================*/ + @Nullable public Entity getSpawnerEntity() { return null; } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntity.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntity.java new file mode 100644 index 0000000..cc60bc6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntity.java @@ -0,0 +1,564 @@ +package net.minecraft.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockJukebox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.crash.CrashReportCategory; +import net.minecraft.crash.ICrashReportDetail; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class TileEntity implements net.minecraftforge.common.capabilities.ICapabilitySerializable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final RegistryNamespaced < ResourceLocation, Class > REGISTRY = new RegistryNamespaced < ResourceLocation, Class > (); + /** the instance of the world the tile entity is in. */ + protected World world; + protected BlockPos pos = BlockPos.ORIGIN; + protected boolean tileEntityInvalid; + private int blockMetadata = -1; + /** the Block type that this TileEntity is contained within */ + protected Block blockType; + + public static void register(String id, Class clazz) + { + REGISTRY.putObject(new ResourceLocation(id), clazz); + } + + @Nullable + public static ResourceLocation getKey(Class clazz) + { + return REGISTRY.getNameForObject(clazz); + } + + /** + * Returns the worldObj for this tileEntity. + */ + public World getWorld() + { + return this.world; + } + + /** + * Sets the worldObj for this tileEntity. + */ + public void setWorld(World worldIn) + { + this.world = worldIn; + } + + /** + * Returns true if the worldObj isn't null. + */ + public boolean hasWorld() + { + return this.world != null; + } + + public void readFromNBT(NBTTagCompound compound) + { + this.pos = new BlockPos(compound.getInteger("x"), compound.getInteger("y"), compound.getInteger("z")); + if (compound.hasKey("ForgeData")) this.customTileData = compound.getCompoundTag("ForgeData"); + if (this.capabilities != null && compound.hasKey("ForgeCaps")) this.capabilities.deserializeNBT(compound.getCompoundTag("ForgeCaps")); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + return this.writeInternal(compound); + } + + private NBTTagCompound writeInternal(NBTTagCompound compound) + { + ResourceLocation resourcelocation = REGISTRY.getNameForObject(this.getClass()); + + if (resourcelocation == null) + { + throw new RuntimeException(this.getClass() + " is missing a mapping! This is a bug!"); + } + else + { + compound.setString("id", resourcelocation.toString()); + compound.setInteger("x", this.pos.getX()); + compound.setInteger("y", this.pos.getY()); + compound.setInteger("z", this.pos.getZ()); + if (this.customTileData != null) compound.setTag("ForgeData", this.customTileData); + if (this.capabilities != null) compound.setTag("ForgeCaps", this.capabilities.serializeNBT()); + return compound; + } + } + + @Nullable + public static TileEntity create(World worldIn, NBTTagCompound compound) + { + TileEntity tileentity = null; + String s = compound.getString("id"); + Class oclass = null; + + try + { + oclass = (Class)REGISTRY.getObject(new ResourceLocation(s)); + + if (oclass != null) + { + tileentity = oclass.newInstance(); + } + } + catch (Throwable throwable1) + { + LOGGER.error("Failed to create block entity {}", s, throwable1); + net.minecraftforge.fml.common.FMLLog.log.error("A TileEntity {}({}) has thrown an exception during loading, its state cannot be restored. Report this to the mod author", + s, oclass == null ? null : oclass.getName(), throwable1); + } + + if (tileentity != null) + { + try + { + tileentity.setWorldCreate(worldIn); + tileentity.readFromNBT(compound); + } + catch (Throwable throwable) + { + LOGGER.error("Failed to load data for block entity {}", s, throwable); + net.minecraftforge.fml.common.FMLLog.log.error("A TileEntity {}({}) has thrown an exception during loading, its state cannot be restored. Report this to the mod author", + s, oclass.getName(), throwable); + tileentity = null; + } + } + else + { + LOGGER.warn("Skipping BlockEntity with id {}", (Object)s); + } + + return tileentity; + } + + protected void setWorldCreate(World worldIn) + { + } + + public int getBlockMetadata() + { + if (this.blockMetadata == -1) + { + IBlockState iblockstate = this.world.getBlockState(this.pos); + this.blockMetadata = iblockstate.getBlock().getMetaFromState(iblockstate); + } + + return this.blockMetadata; + } + + /** + * For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it + * hasn't changed and skip it. + */ + public void markDirty() + { + if (this.world != null) + { + IBlockState iblockstate = this.world.getBlockState(this.pos); + this.blockMetadata = iblockstate.getBlock().getMetaFromState(iblockstate); + this.world.markChunkDirty(this.pos, this); + + if (this.getBlockType() != Blocks.AIR) + { + this.world.updateComparatorOutputLevel(this.pos, this.getBlockType()); + } + } + } + + /** + * Returns the square of the distance between this entity and the passed in coordinates. + */ + public double getDistanceSq(double x, double y, double z) + { + double d0 = (double)this.pos.getX() + 0.5D - x; + double d1 = (double)this.pos.getY() + 0.5D - y; + double d2 = (double)this.pos.getZ() + 0.5D - z; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 4096.0D; + } + + public BlockPos getPos() + { + return this.pos; + } + + /** + * Gets the block type at the location of this entity (client-only). + */ + public Block getBlockType() + { + if (this.blockType == null && this.world != null) + { + this.blockType = this.world.getBlockState(this.pos).getBlock(); + } + + return this.blockType; + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return null; + } + + public NBTTagCompound getUpdateTag() + { + return this.writeInternal(new NBTTagCompound()); + } + + public boolean isInvalid() + { + return this.tileEntityInvalid; + } + + /** + * invalidates a tile entity + */ + public void invalidate() + { + this.tileEntityInvalid = true; + } + + /** + * validates a tile entity + */ + public void validate() + { + this.tileEntityInvalid = false; + } + + public boolean receiveClientEvent(int id, int type) + { + return false; + } + + public void updateContainingBlockInfo() + { + this.blockType = null; + this.blockMetadata = -1; + } + + public void addInfoToCrashReport(CrashReportCategory reportCategory) + { + reportCategory.addDetail("Name", new ICrashReportDetail() + { + public String call() throws Exception + { + return TileEntity.REGISTRY.getNameForObject(TileEntity.this.getClass()) + " // " + TileEntity.this.getClass().getCanonicalName(); + } + }); + + if (this.world != null) + { + CrashReportCategory.addBlockInfo(reportCategory, this.pos, this.getBlockType(), this.getBlockMetadata()); + reportCategory.addDetail("Actual block type", new ICrashReportDetail() + { + public String call() throws Exception + { + int i = Block.getIdFromBlock(TileEntity.this.world.getBlockState(TileEntity.this.pos).getBlock()); + + try + { + return String.format("ID #%d (%s // %s // %s)", i, Block.getBlockById(i).getUnlocalizedName(), Block.getBlockById(i).getClass().getName(), Block.getBlockById(i).getRegistryName()); + } + catch (Throwable var3) + { + return "ID #" + i; + } + } + }); + reportCategory.addDetail("Actual block data value", new ICrashReportDetail() + { + public String call() throws Exception + { + IBlockState iblockstate = TileEntity.this.world.getBlockState(TileEntity.this.pos); + int i = iblockstate.getBlock().getMetaFromState(iblockstate); + + if (i < 0) + { + return "Unknown? (Got " + i + ")"; + } + else + { + String s = String.format("%4s", Integer.toBinaryString(i)).replace(" ", "0"); + return String.format("%1$d / 0x%1$X / 0b%2$s", i, s); + } + } + }); + } + } + + public void setPos(BlockPos posIn) + { + this.pos = posIn.toImmutable(); + } + + public boolean onlyOpsCanSetNbt() + { + return false; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + @Nullable + public ITextComponent getDisplayName() + { + return null; + } + + public void rotate(Rotation rotationIn) + { + } + + public void mirror(Mirror mirrorIn) + { + } + + // -- BEGIN FORGE PATCHES -- + /** + * Called when you receive a TileEntityData packet for the location this + * TileEntity is currently in. On the client, the NetworkManager will always + * be the remote server. On the server, it will be whomever is responsible for + * sending the packet. + * + * @param net The NetworkManager the packet originated from + * @param pkt The data packet + */ + public void onDataPacket(net.minecraft.network.NetworkManager net, net.minecraft.network.play.server.SPacketUpdateTileEntity pkt) + { + } + + /** + * Called when the chunk's TE update tag, gotten from {@link #getUpdateTag()}, is received on the client. + *

+ * Used to handle this tag in a special way. By default this simply calls {@link #readFromNBT(NBTTagCompound)}. + * + * @param tag The {@link NBTTagCompound} sent from {@link #getUpdateTag()} + */ + public void handleUpdateTag(NBTTagCompound tag) + { + this.readFromNBT(tag); + } + + /** + * Called when the chunk this TileEntity is on is Unloaded. + */ + public void onChunkUnload() + { + } + + private boolean isVanilla = getClass().getName().startsWith("net.minecraft."); + /** + * Called from Chunk.setBlockIDWithMetadata and Chunk.fillChunk, determines if this tile entity should be re-created when the ID, or Metadata changes. + * Use with caution as this will leave straggler TileEntities, or create conflicts with other TileEntities if not used properly. + * + * @param world Current world + * @param pos Tile's world position + * @param oldState The old ID of the block + * @param newState The new ID of the block (May be the same) + * @return true forcing the invalidation of the existing TE, false not to invalidate the existing TE + */ + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newSate) + { + return isVanilla ? (oldState.getBlock() != newSate.getBlock()) : oldState != newSate; + } + + public boolean shouldRenderInPass(int pass) + { + return pass == 0; + } + + /** + * Sometimes default render bounding box: infinite in scope. Used to control rendering on {@link TileEntitySpecialRenderer}. + */ + public static final net.minecraft.util.math.AxisAlignedBB INFINITE_EXTENT_AABB = new net.minecraft.util.math.AxisAlignedBB(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); + /** + * Return an {@link AxisAlignedBB} that controls the visible scope of a {@link TileEntitySpecialRenderer} associated with this {@link TileEntity} + * Defaults to the collision bounding box {@link Block#getCollisionBoundingBoxFromPool(World, int, int, int)} associated with the block + * at this location. + * + * @return an appropriately size {@link AxisAlignedBB} for the {@link TileEntity} + */ + @SideOnly(Side.CLIENT) + public net.minecraft.util.math.AxisAlignedBB getRenderBoundingBox() + { + net.minecraft.util.math.AxisAlignedBB bb = INFINITE_EXTENT_AABB; + Block type = getBlockType(); + BlockPos pos = getPos(); + if (type == Blocks.ENCHANTING_TABLE) + { + bb = new net.minecraft.util.math.AxisAlignedBB(pos, pos.add(1, 1, 1)); + } + else if (type == Blocks.CHEST || type == Blocks.TRAPPED_CHEST) + { + bb = new net.minecraft.util.math.AxisAlignedBB(pos.add(-1, 0, -1), pos.add(2, 2, 2)); + } + else if (type == Blocks.STRUCTURE_BLOCK) + { + bb = INFINITE_EXTENT_AABB; + } + else if (type != null && type != Blocks.BEACON) + { + net.minecraft.util.math.AxisAlignedBB cbb = null; + try + { + cbb = world.getBlockState(getPos()).getCollisionBoundingBox(world, pos).offset(pos); + } + catch (Exception e) + { + // We have to capture any exceptions that may occur here because BUKKIT servers like to send + // the tile entity data BEFORE the chunk data, you know, the OPPOSITE of what vanilla does! + // So we can not GARENTEE that the world state is the real state for the block... + // So, once again in the long line of US having to accommodate BUKKIT breaking things, + // here it is, assume that the TE is only 1 cubic block. Problem with this is that it may + // cause the TileEntity renderer to error further down the line! But alas, nothing we can do. + cbb = new net.minecraft.util.math.AxisAlignedBB(getPos().add(-1, 0, -1), getPos().add(1, 1, 1)); + } + if (cbb != null) bb = cbb; + } + return bb; + } + + /** + * Checks if this tile entity knows how to render its 'breaking' overlay effect. + * If this returns true, The TileEntitySpecialRenderer will be called again with break progress set. + * @return True to re-render tile with breaking effect. + */ + public boolean canRenderBreaking() + { + Block block = this.getBlockType(); + return (block instanceof net.minecraft.block.BlockChest || + block instanceof net.minecraft.block.BlockEnderChest || + block instanceof net.minecraft.block.BlockSign || + block instanceof net.minecraft.block.BlockSkull); + } + + private NBTTagCompound customTileData; + + /** + * Gets a {@link NBTTagCompound} that can be used to store custom data for this tile entity. + * It will be written, and read from disc, so it persists over world saves. + * + * @return A compound tag for custom data + */ + public NBTTagCompound getTileData() + { + if (this.customTileData == null) + { + this.customTileData = new NBTTagCompound(); + } + return this.customTileData; + } + + /** + * Determines if the player can overwrite the NBT data of this tile entity while they place it using a ItemStack. + * Added as a fix for MC-75630 - Exploit with signs and command blocks + * @return True to prevent NBT copy, false to allow. + */ + public boolean restrictNBTCopy() + { + return this instanceof TileEntityCommandBlock || + this instanceof TileEntityMobSpawner || + this instanceof TileEntitySign; + } + + + /** + * Called when this is first added to the world (by {@link World#addTileEntity(TileEntity)}). + * Override instead of adding {@code if (firstTick)} stuff in update. + */ + public void onLoad() + { + // NOOP + } + + /** + * If the TileEntitySpecialRenderer associated with this TileEntity can be batched in with another renderers, and won't access the GL state. + * If TileEntity returns true, then TESR should have the same functionality as (and probably extend) the FastTESR class. + */ + public boolean hasFastRenderer() + { + return false; + } + + private net.minecraftforge.common.capabilities.CapabilityDispatcher capabilities; + public TileEntity() + { + capabilities = net.minecraftforge.event.ForgeEventFactory.gatherCapabilities(this); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capabilities == null ? false : capabilities.hasCapability(capability, facing); + } + + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + return capabilities == null ? null : capabilities.getCapability(capability, facing); + } + + public void deserializeNBT(NBTTagCompound nbt) + { + this.readFromNBT(nbt); + } + + public NBTTagCompound serializeNBT() + { + NBTTagCompound ret = new NBTTagCompound(); + this.writeToNBT(ret); + return ret; + } + + static + { + register("furnace", TileEntityFurnace.class); + register("chest", TileEntityChest.class); + register("ender_chest", TileEntityEnderChest.class); + register("jukebox", BlockJukebox.TileEntityJukebox.class); + register("dispenser", TileEntityDispenser.class); + register("dropper", TileEntityDropper.class); + register("sign", TileEntitySign.class); + register("mob_spawner", TileEntityMobSpawner.class); + register("noteblock", TileEntityNote.class); + register("piston", TileEntityPiston.class); + register("brewing_stand", TileEntityBrewingStand.class); + register("enchanting_table", TileEntityEnchantmentTable.class); + register("end_portal", TileEntityEndPortal.class); + register("beacon", TileEntityBeacon.class); + register("skull", TileEntitySkull.class); + register("daylight_detector", TileEntityDaylightDetector.class); + register("hopper", TileEntityHopper.class); + register("comparator", TileEntityComparator.class); + register("flower_pot", TileEntityFlowerPot.class); + register("banner", TileEntityBanner.class); + register("structure_block", TileEntityStructure.class); + register("end_gateway", TileEntityEndGateway.class); + register("command_block", TileEntityCommandBlock.class); + register("shulker_box", TileEntityShulkerBox.class); + register("bed", TileEntityBed.class); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBanner.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBanner.java new file mode 100644 index 0000000..7651672 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBanner.java @@ -0,0 +1,245 @@ +package net.minecraft.tileentity; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemBanner; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.IWorldNameable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBanner extends TileEntity implements IWorldNameable +{ + private String name; + private EnumDyeColor baseColor = EnumDyeColor.BLACK; + /** A list of all the banner patterns. */ + private NBTTagList patterns; + private boolean patternDataSet; + /** A list of all patterns stored on this banner. */ + private List patternList; + /** A list of all the color values stored on this banner. */ + private List colorList; + /** This is a String representation of this banners pattern and color lists, used for texture caching. */ + private String patternResourceLocation; + + public void setItemValues(ItemStack stack, boolean p_175112_2_) + { + this.patterns = null; + NBTTagCompound nbttagcompound = stack.getSubCompound("BlockEntityTag"); + + if (nbttagcompound != null && nbttagcompound.hasKey("Patterns", 9)) + { + this.patterns = nbttagcompound.getTagList("Patterns", 10).copy(); + } + + this.baseColor = p_175112_2_ ? getColor(stack) : ItemBanner.getBaseColor(stack); + this.patternList = null; + this.colorList = null; + this.patternResourceLocation = ""; + this.patternDataSet = true; + this.name = stack.hasDisplayName() ? stack.getDisplayName() : null; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.name : "banner"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.name != null && !this.name.isEmpty(); + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setInteger("Base", this.baseColor.getDyeDamage()); + + if (this.patterns != null) + { + compound.setTag("Patterns", this.patterns); + } + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.name); + } + + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + + if (compound.hasKey("CustomName", 8)) + { + this.name = compound.getString("CustomName"); + } + + this.baseColor = EnumDyeColor.byDyeDamage(compound.getInteger("Base")); + this.patterns = compound.getTagList("Patterns", 10); + this.patternList = null; + this.colorList = null; + this.patternResourceLocation = null; + this.patternDataSet = true; + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 6, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + /** + * Retrieves the amount of patterns stored on an ItemStack. If the tag does not exist this value will be 0. + */ + public static int getPatterns(ItemStack stack) + { + NBTTagCompound nbttagcompound = stack.getSubCompound("BlockEntityTag"); + return nbttagcompound != null && nbttagcompound.hasKey("Patterns") ? nbttagcompound.getTagList("Patterns", 10).tagCount() : 0; + } + + /** + * Retrieves the list of patterns for this tile entity. The banner data will be initialized/refreshed before this + * happens. + */ + @SideOnly(Side.CLIENT) + public List getPatternList() + { + this.initializeBannerData(); + return this.patternList; + } + + /** + * Retrieves the list of colors for this tile entity. The banner data will be initialized/refreshed before this + * happens. + */ + @SideOnly(Side.CLIENT) + public List getColorList() + { + this.initializeBannerData(); + return this.colorList; + } + + @SideOnly(Side.CLIENT) + public String getPatternResourceLocation() + { + this.initializeBannerData(); + return this.patternResourceLocation; + } + + /** + * Establishes all of the basic properties for the banner. This will also apply the data from the tile entities nbt + * tag compounds. + */ + @SideOnly(Side.CLIENT) + private void initializeBannerData() + { + if (this.patternList == null || this.colorList == null || this.patternResourceLocation == null) + { + if (!this.patternDataSet) + { + this.patternResourceLocation = ""; + } + else + { + this.patternList = Lists.newArrayList(); + this.colorList = Lists.newArrayList(); + this.patternList.add(BannerPattern.BASE); + this.colorList.add(this.baseColor); + this.patternResourceLocation = "b" + this.baseColor.getDyeDamage(); + + if (this.patterns != null) + { + for (int i = 0; i < this.patterns.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = this.patterns.getCompoundTagAt(i); + BannerPattern bannerpattern = BannerPattern.byHash(nbttagcompound.getString("Pattern")); + + if (bannerpattern != null) + { + this.patternList.add(bannerpattern); + int j = nbttagcompound.getInteger("Color"); + this.colorList.add(EnumDyeColor.byDyeDamage(j)); + this.patternResourceLocation = this.patternResourceLocation + bannerpattern.getHashname() + j; + } + } + } + } + } + } + + /** + * Removes all the banner related data from a provided instance of ItemStack. + */ + public static void removeBannerData(ItemStack stack) + { + NBTTagCompound nbttagcompound = stack.getSubCompound("BlockEntityTag"); + + if (nbttagcompound != null && nbttagcompound.hasKey("Patterns", 9)) + { + NBTTagList nbttaglist = nbttagcompound.getTagList("Patterns", 10); + + if (!nbttaglist.hasNoTags()) + { + nbttaglist.removeTag(nbttaglist.tagCount() - 1); + + if (nbttaglist.hasNoTags()) + { + stack.getTagCompound().removeTag("BlockEntityTag"); + + if (stack.getTagCompound().hasNoTags()) + { + stack.setTagCompound((NBTTagCompound)null); + } + } + } + } + } + + public ItemStack getItem() + { + ItemStack itemstack = ItemBanner.makeBanner(this.baseColor, this.patterns); + + if (this.hasCustomName()) + { + itemstack.setStackDisplayName(this.getName()); + } + + return itemstack; + } + + public static EnumDyeColor getColor(ItemStack p_190616_0_) + { + NBTTagCompound nbttagcompound = p_190616_0_.getSubCompound("BlockEntityTag"); + return nbttagcompound != null && nbttagcompound.hasKey("Base") ? EnumDyeColor.byDyeDamage(nbttagcompound.getInteger("Base")) : EnumDyeColor.BLACK; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBeacon.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBeacon.java new file mode 100644 index 0000000..df6022a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBeacon.java @@ -0,0 +1,568 @@ +package net.minecraft.tileentity; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.block.Block; +import net.minecraft.block.BlockStainedGlass; +import net.minecraft.block.BlockStainedGlassPane; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerBeacon; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBeacon extends TileEntityLockable implements ITickable, ISidedInventory +{ + /** List of effects that Beacon can apply */ + public static final Potion[][] EFFECTS_LIST = new Potion[][] {{MobEffects.SPEED, MobEffects.HASTE}, {MobEffects.RESISTANCE, MobEffects.JUMP_BOOST}, {MobEffects.STRENGTH}, {MobEffects.REGENERATION}}; + private static final Set VALID_EFFECTS = Sets.newHashSet(); + /** A list of beam segments for this beacon */ + private final List beamSegments = Lists.newArrayList(); + @SideOnly(Side.CLIENT) + private long beamRenderCounter; + @SideOnly(Side.CLIENT) + private float beamRenderScale; + private boolean isComplete; + /** Level of this beacon's pyramid. */ + private int levels = -1; + /** Primary potion effect given by this beacon. */ + @Nullable + private Potion primaryEffect; + /** Secondary potion effect given by this beacon. */ + @Nullable + private Potion secondaryEffect; + /** Item given to this beacon as payment. */ + private ItemStack payment = ItemStack.EMPTY; + private String customName; + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.world.getTotalWorldTime() % 80L == 0L) + { + this.updateBeacon(); + } + } + + public void updateBeacon() + { + if (this.world != null) + { + this.updateSegmentColors(); + this.addEffectsToPlayers(); + } + } + + private void addEffectsToPlayers() + { + if (this.isComplete && this.levels > 0 && !this.world.isRemote && this.primaryEffect != null) + { + double d0 = (double)(this.levels * 10 + 10); + int i = 0; + + if (this.levels >= 4 && this.primaryEffect == this.secondaryEffect) + { + i = 1; + } + + int j = (9 + this.levels * 2) * 20; + int k = this.pos.getX(); + int l = this.pos.getY(); + int i1 = this.pos.getZ(); + AxisAlignedBB axisalignedbb = (new AxisAlignedBB((double)k, (double)l, (double)i1, (double)(k + 1), (double)(l + 1), (double)(i1 + 1))).grow(d0).expand(0.0D, (double)this.world.getHeight(), 0.0D); + List list = this.world.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb); + + for (EntityPlayer entityplayer : list) + { + entityplayer.addPotionEffect(new PotionEffect(this.primaryEffect, j, i, true, true)); + } + + if (this.levels >= 4 && this.primaryEffect != this.secondaryEffect && this.secondaryEffect != null) + { + for (EntityPlayer entityplayer1 : list) + { + entityplayer1.addPotionEffect(new PotionEffect(this.secondaryEffect, j, 0, true, true)); + } + } + } + } + + private void updateSegmentColors() + { + int i = this.pos.getX(); + int j = this.pos.getY(); + int k = this.pos.getZ(); + int l = this.levels; + this.levels = 0; + this.beamSegments.clear(); + this.isComplete = true; + TileEntityBeacon.BeamSegment tileentitybeacon$beamsegment = new TileEntityBeacon.BeamSegment(EnumDyeColor.WHITE.getColorComponentValues()); + this.beamSegments.add(tileentitybeacon$beamsegment); + boolean flag = true; + BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); + + for (int i1 = j + 1; i1 < 256; ++i1) + { + IBlockState iblockstate = this.world.getBlockState(blockpos$mutableblockpos.setPos(i, i1, k)); + float[] afloat; + + if (iblockstate.getBlock() == Blocks.STAINED_GLASS) + { + afloat = ((EnumDyeColor)iblockstate.getValue(BlockStainedGlass.COLOR)).getColorComponentValues(); + } + else + { + if (iblockstate.getBlock() != Blocks.STAINED_GLASS_PANE) + { + if (iblockstate.getLightOpacity(world, blockpos$mutableblockpos) >= 15 && iblockstate.getBlock() != Blocks.BEDROCK) + { + this.isComplete = false; + this.beamSegments.clear(); + break; + } + float[] customColor = iblockstate.getBlock().getBeaconColorMultiplier(iblockstate, this.world, blockpos$mutableblockpos, getPos()); + if (customColor != null) + afloat = customColor; + else { + tileentitybeacon$beamsegment.incrementHeight(); + continue; + } + } + else + afloat = ((EnumDyeColor)iblockstate.getValue(BlockStainedGlassPane.COLOR)).getColorComponentValues(); + } + + if (!flag) + { + afloat = new float[] {(tileentitybeacon$beamsegment.getColors()[0] + afloat[0]) / 2.0F, (tileentitybeacon$beamsegment.getColors()[1] + afloat[1]) / 2.0F, (tileentitybeacon$beamsegment.getColors()[2] + afloat[2]) / 2.0F}; + } + + if (Arrays.equals(afloat, tileentitybeacon$beamsegment.getColors())) + { + tileentitybeacon$beamsegment.incrementHeight(); + } + else + { + tileentitybeacon$beamsegment = new TileEntityBeacon.BeamSegment(afloat); + this.beamSegments.add(tileentitybeacon$beamsegment); + } + + flag = false; + } + + if (this.isComplete) + { + for (int l1 = 1; l1 <= 4; this.levels = l1++) + { + int i2 = j - l1; + + if (i2 < 0) + { + break; + } + + boolean flag1 = true; + + for (int j1 = i - l1; j1 <= i + l1 && flag1; ++j1) + { + for (int k1 = k - l1; k1 <= k + l1; ++k1) + { + Block block = this.world.getBlockState(new BlockPos(j1, i2, k1)).getBlock(); + + if (!block.isBeaconBase(this.world, new BlockPos(j1, i2, k1), getPos())) + { + flag1 = false; + break; + } + } + } + + if (!flag1) + { + break; + } + } + + if (this.levels == 0) + { + this.isComplete = false; + } + } + + if (!this.world.isRemote && l < this.levels) + { + for (EntityPlayerMP entityplayermp : this.world.getEntitiesWithinAABB(EntityPlayerMP.class, (new AxisAlignedBB((double)i, (double)j, (double)k, (double)i, (double)(j - 4), (double)k)).grow(10.0D, 5.0D, 10.0D))) + { + CriteriaTriggers.CONSTRUCT_BEACON.trigger(entityplayermp, this); + } + } + } + + @SideOnly(Side.CLIENT) + public List getBeamSegments() + { + return this.beamSegments; + } + + @SideOnly(Side.CLIENT) + public float shouldBeamRender() + { + if (!this.isComplete) + { + return 0.0F; + } + else + { + int i = (int)(this.world.getTotalWorldTime() - this.beamRenderCounter); + this.beamRenderCounter = this.world.getTotalWorldTime(); + + if (i > 1) + { + this.beamRenderScale -= (float)i / 40.0F; + + if (this.beamRenderScale < 0.0F) + { + this.beamRenderScale = 0.0F; + } + } + + this.beamRenderScale += 0.025F; + + if (this.beamRenderScale > 1.0F) + { + this.beamRenderScale = 1.0F; + } + + return this.beamRenderScale; + } + } + + public int getLevels() + { + return this.levels; + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 3, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } + + @Nullable + private static Potion isBeaconEffect(int p_184279_0_) + { + Potion potion = Potion.getPotionById(p_184279_0_); + return VALID_EFFECTS.contains(potion) ? potion : null; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.primaryEffect = isBeaconEffect(compound.getInteger("Primary")); + this.secondaryEffect = isBeaconEffect(compound.getInteger("Secondary")); + this.levels = compound.getInteger("Levels"); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setInteger("Primary", Potion.getIdFromPotion(this.primaryEffect)); + compound.setInteger("Secondary", Potion.getIdFromPotion(this.secondaryEffect)); + compound.setInteger("Levels", this.levels); + return compound; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return 1; + } + + public boolean isEmpty() + { + return this.payment.isEmpty(); + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return index == 0 ? this.payment : ItemStack.EMPTY; + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + if (index == 0 && !this.payment.isEmpty()) + { + if (count >= this.payment.getCount()) + { + ItemStack itemstack = this.payment; + this.payment = ItemStack.EMPTY; + return itemstack; + } + else + { + return this.payment.splitStack(count); + } + } + else + { + return ItemStack.EMPTY; + } + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + if (index == 0) + { + ItemStack itemstack = this.payment; + this.payment = ItemStack.EMPTY; + return itemstack; + } + else + { + return ItemStack.EMPTY; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + if (index == 0) + { + this.payment = stack; + } + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.beacon"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.customName != null && !this.customName.isEmpty(); + } + + public void setName(String name) + { + this.customName = name; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 1; + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + if (this.world.getTileEntity(this.pos) != this) + { + return false; + } + else + { + return player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; + } + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return stack.getItem() != null && stack.getItem().isBeaconPayment(stack); + } + + public String getGuiID() + { + return "minecraft:beacon"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerBeacon(playerInventory, this); + } + + public int getField(int id) + { + switch (id) + { + case 0: + return this.levels; + case 1: + return Potion.getIdFromPotion(this.primaryEffect); + case 2: + return Potion.getIdFromPotion(this.secondaryEffect); + default: + return 0; + } + } + + public void setField(int id, int value) + { + switch (id) + { + case 0: + this.levels = value; + break; + case 1: + this.primaryEffect = isBeaconEffect(value); + break; + case 2: + this.secondaryEffect = isBeaconEffect(value); + } + } + + public int getFieldCount() + { + return 3; + } + + public void clear() + { + this.payment = ItemStack.EMPTY; + } + + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.updateBeacon(); + return true; + } + else + { + return super.receiveClientEvent(id, type); + } + } + + public int[] getSlotsForFace(EnumFacing side) + { + return new int[0]; + } + + /** + * Returns true if automation can insert the given item in the given slot from the given side. + */ + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return false; + } + + /** + * Returns true if automation can extract the given item in the given slot from the given side. + */ + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return false; + } + + static + { + for (Potion[] apotion : EFFECTS_LIST) + { + Collections.addAll(VALID_EFFECTS, apotion); + } + } + + public static class BeamSegment + { + /** RGB (0 to 1.0) colors of this beam segment */ + private final float[] colors; + private int height; + + public BeamSegment(float[] colorsIn) + { + this.colors = colorsIn; + this.height = 1; + } + + protected void incrementHeight() + { + ++this.height; + } + + /** + * Returns RGB (0 to 1.0) colors of this beam segment + */ + public float[] getColors() + { + return this.colors; + } + + @SideOnly(Side.CLIENT) + public int getHeight() + { + return this.height; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBed.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBed.java new file mode 100644 index 0000000..641cd06 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBed.java @@ -0,0 +1,69 @@ +package net.minecraft.tileentity; + +import net.minecraft.block.BlockBed; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityBed extends TileEntity +{ + private EnumDyeColor color = EnumDyeColor.RED; + + public void setItemValues(ItemStack p_193051_1_) + { + this.setColor(EnumDyeColor.byMetadata(p_193051_1_.getMetadata())); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + + if (compound.hasKey("color")) + { + this.color = EnumDyeColor.byMetadata(compound.getInteger("color")); + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setInteger("color", this.color.getMetadata()); + return compound; + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 11, this.getUpdateTag()); + } + + public EnumDyeColor getColor() + { + return this.color; + } + + public void setColor(EnumDyeColor color) + { + this.color = color; + this.markDirty(); + } + + @SideOnly(Side.CLIENT) + public boolean isHeadPiece() + { + return BlockBed.isHeadPiece(this.getBlockMetadata()); + } + + public ItemStack getItemStack() + { + return new ItemStack(Items.BED, 1, this.color.getMetadata()); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBrewingStand.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBrewingStand.java new file mode 100644 index 0000000..c89edfe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityBrewingStand.java @@ -0,0 +1,459 @@ +package net.minecraft.tileentity; + +import java.util.Arrays; +import net.minecraft.block.BlockBrewingStand; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerBrewingStand; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionHelper; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.BlockPos; + +public class TileEntityBrewingStand extends TileEntityLockable implements ITickable, ISidedInventory +{ + /** an array of the input slot indices */ + private static final int[] SLOTS_FOR_UP = new int[] {3}; + private static final int[] SLOTS_FOR_DOWN = new int[] {0, 1, 2, 3}; + /** an array of the output slot indices */ + private static final int[] OUTPUT_SLOTS = new int[] {0, 1, 2, 4}; + /** The ItemStacks currently placed in the slots of the brewing stand */ + private NonNullList brewingItemStacks = NonNullList.withSize(5, ItemStack.EMPTY); + private int brewTime; + /** an integer with each bit specifying whether that slot of the stand contains a potion */ + private boolean[] filledSlots; + /** used to check if the current ingredient has been removed from the brewing stand during brewing */ + private Item ingredientID; + private String customName; + private int fuel; + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.brewing"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.customName != null && !this.customName.isEmpty(); + } + + public void setName(String name) + { + this.customName = name; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.brewingItemStacks.size(); + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.brewingItemStacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + ItemStack itemstack = this.brewingItemStacks.get(4); + + if (this.fuel <= 0 && itemstack.getItem() == Items.BLAZE_POWDER) + { + this.fuel = 20; + itemstack.shrink(1); + this.markDirty(); + } + + boolean flag = this.canBrew(); + boolean flag1 = this.brewTime > 0; + ItemStack itemstack1 = this.brewingItemStacks.get(3); + + if (flag1) + { + --this.brewTime; + boolean flag2 = this.brewTime == 0; + + if (flag2 && flag) + { + this.brewPotions(); + this.markDirty(); + } + else if (!flag) + { + this.brewTime = 0; + this.markDirty(); + } + else if (this.ingredientID != itemstack1.getItem()) + { + this.brewTime = 0; + this.markDirty(); + } + } + else if (flag && this.fuel > 0) + { + --this.fuel; + this.brewTime = 400; + this.ingredientID = itemstack1.getItem(); + this.markDirty(); + } + + if (!this.world.isRemote) + { + boolean[] aboolean = this.createFilledSlotsArray(); + + if (!Arrays.equals(aboolean, this.filledSlots)) + { + this.filledSlots = aboolean; + IBlockState iblockstate = this.world.getBlockState(this.getPos()); + + if (!(iblockstate.getBlock() instanceof BlockBrewingStand)) + { + return; + } + + for (int i = 0; i < BlockBrewingStand.HAS_BOTTLE.length; ++i) + { + iblockstate = iblockstate.withProperty(BlockBrewingStand.HAS_BOTTLE[i], Boolean.valueOf(aboolean[i])); + } + + this.world.setBlockState(this.pos, iblockstate, 2); + } + } + } + + /** + * Creates an array of boolean values, each value represents a potion input slot, value is true if the slot is not + * null. + */ + public boolean[] createFilledSlotsArray() + { + boolean[] aboolean = new boolean[3]; + + for (int i = 0; i < 3; ++i) + { + if (!((ItemStack)this.brewingItemStacks.get(i)).isEmpty()) + { + aboolean[i] = true; + } + } + + return aboolean; + } + + private boolean canBrew() + { + if (1 == 1) return net.minecraftforge.common.brewing.BrewingRecipeRegistry.canBrew(brewingItemStacks, brewingItemStacks.get(3), OUTPUT_SLOTS); // divert to VanillaBrewingRegistry + ItemStack itemstack = this.brewingItemStacks.get(3); + + if (itemstack.isEmpty()) + { + return false; + } + else if (!PotionHelper.isReagent(itemstack)) + { + return false; + } + else + { + for (int i = 0; i < 3; ++i) + { + ItemStack itemstack1 = this.brewingItemStacks.get(i); + + if (!itemstack1.isEmpty() && PotionHelper.hasConversions(itemstack1, itemstack)) + { + return true; + } + } + + return false; + } + } + + private void brewPotions() + { + if (net.minecraftforge.event.ForgeEventFactory.onPotionAttemptBrew(brewingItemStacks)) return; + ItemStack itemstack = this.brewingItemStacks.get(3); + + net.minecraftforge.common.brewing.BrewingRecipeRegistry.brewPotions(brewingItemStacks, brewingItemStacks.get(3), OUTPUT_SLOTS); + + itemstack.shrink(1); + BlockPos blockpos = this.getPos(); + + if (itemstack.getItem().hasContainerItem(itemstack)) + { + ItemStack itemstack1 = itemstack.getItem().getContainerItem(itemstack); + + if (itemstack.isEmpty()) + { + itemstack = itemstack1; + } + else + { + InventoryHelper.spawnItemStack(this.world, (double)blockpos.getX(), (double)blockpos.getY(), (double)blockpos.getZ(), itemstack1); + } + } + + this.brewingItemStacks.set(3, itemstack); + this.world.playEvent(1035, blockpos, 0); + net.minecraftforge.event.ForgeEventFactory.onPotionBrewed(brewingItemStacks); + } + + public static void registerFixesBrewingStand(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityBrewingStand.class, new String[] {"Items"})); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.brewingItemStacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(compound, this.brewingItemStacks); + this.brewTime = compound.getShort("BrewTime"); + + if (compound.hasKey("CustomName", 8)) + { + this.customName = compound.getString("CustomName"); + } + + this.fuel = compound.getByte("Fuel"); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setShort("BrewTime", (short)this.brewTime); + ItemStackHelper.saveAllItems(compound, this.brewingItemStacks); + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.customName); + } + + compound.setByte("Fuel", (byte)this.fuel); + return compound; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return index >= 0 && index < this.brewingItemStacks.size() ? (ItemStack)this.brewingItemStacks.get(index) : ItemStack.EMPTY; + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + return ItemStackHelper.getAndSplit(this.brewingItemStacks, index, count); + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.brewingItemStacks, index); + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + if (index >= 0 && index < this.brewingItemStacks.size()) + { + this.brewingItemStacks.set(index, stack); + } + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + if (this.world.getTileEntity(this.pos) != this) + { + return false; + } + else + { + return player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; + } + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + if (index == 3) + { + return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidIngredient(stack); + } + else + { + Item item = stack.getItem(); + + if (index == 4) + { + return item == Items.BLAZE_POWDER; + } + else + { + return net.minecraftforge.common.brewing.BrewingRecipeRegistry.isValidInput(stack) && this.getStackInSlot(index).isEmpty(); + } + } + } + + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.UP) + { + return SLOTS_FOR_UP; + } + else + { + return side == EnumFacing.DOWN ? SLOTS_FOR_DOWN : OUTPUT_SLOTS; + } + } + + /** + * Returns true if automation can insert the given item in the given slot from the given side. + */ + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return this.isItemValidForSlot(index, itemStackIn); + } + + /** + * Returns true if automation can extract the given item in the given slot from the given side. + */ + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + if (index == 3) + { + return stack.getItem() == Items.GLASS_BOTTLE; + } + else + { + return true; + } + } + + public String getGuiID() + { + return "minecraft:brewing_stand"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerBrewingStand(playerInventory, this); + } + + public int getField(int id) + { + switch (id) + { + case 0: + return this.brewTime; + case 1: + return this.fuel; + default: + return 0; + } + } + + public void setField(int id, int value) + { + switch (id) + { + case 0: + this.brewTime = value; + break; + case 1: + this.fuel = value; + } + } + + net.minecraftforge.items.IItemHandler handlerInput = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.UP); + net.minecraftforge.items.IItemHandler handlerOutput = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.DOWN); + net.minecraftforge.items.IItemHandler handlerSides = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.NORTH); + + @SuppressWarnings("unchecked") + @Override + @javax.annotation.Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @javax.annotation.Nullable net.minecraft.util.EnumFacing facing) + { + if (facing != null && capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + if (facing == EnumFacing.UP) + return (T) handlerInput; + else if (facing == EnumFacing.DOWN) + return (T) handlerOutput; + else + return (T) handlerSides; + } + return super.getCapability(capability, facing); + } + + public int getFieldCount() + { + return 2; + } + + public void clear() + { + this.brewingItemStacks.clear(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityChest.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityChest.java new file mode 100644 index 0000000..ccb1412 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityChest.java @@ -0,0 +1,441 @@ +package net.minecraft.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerChest; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryLargeChest; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +public class TileEntityChest extends TileEntityLockableLoot implements ITickable +{ + private NonNullList chestContents = NonNullList.withSize(27, ItemStack.EMPTY); + /** Determines if the check for adjacent chests has taken place. */ + public boolean adjacentChestChecked; + /** Contains the chest tile located adjacent to this one (if any) */ + public TileEntityChest adjacentChestZNeg; + /** Contains the chest tile located adjacent to this one (if any) */ + public TileEntityChest adjacentChestXPos; + /** Contains the chest tile located adjacent to this one (if any) */ + public TileEntityChest adjacentChestXNeg; + /** Contains the chest tile located adjacent to this one (if any) */ + public TileEntityChest adjacentChestZPos; + /** The current angle of the lid (between 0 and 1) */ + public float lidAngle; + /** The angle of the lid last tick */ + public float prevLidAngle; + /** The number of players currently using this chest */ + public int numPlayersUsing; + /** Server sync counter (once per 20 ticks) */ + private int ticksSinceSync; + private BlockChest.Type cachedChestType; + + public TileEntityChest() + { + } + + public TileEntityChest(BlockChest.Type typeIn) + { + this.cachedChestType = typeIn; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return 27; + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.chestContents) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.chest"; + } + + public static void registerFixesChest(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityChest.class, new String[] {"Items"})); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.chestContents = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + if (!this.checkLootAndRead(compound)) + { + ItemStackHelper.loadAllItems(compound, this.chestContents); + } + + if (compound.hasKey("CustomName", 8)) + { + this.customName = compound.getString("CustomName"); + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + if (!this.checkLootAndWrite(compound)) + { + ItemStackHelper.saveAllItems(compound, this.chestContents); + } + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.customName); + } + + return compound; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + public void updateContainingBlockInfo() + { + super.updateContainingBlockInfo(); + this.adjacentChestChecked = false; + doubleChestHandler = null; + } + + @SuppressWarnings("incomplete-switch") + private void setNeighbor(TileEntityChest chestTe, EnumFacing side) + { + if (chestTe.isInvalid()) + { + this.adjacentChestChecked = false; + } + else if (this.adjacentChestChecked) + { + switch (side) + { + case NORTH: + + if (this.adjacentChestZNeg != chestTe) + { + this.adjacentChestChecked = false; + } + + break; + case SOUTH: + + if (this.adjacentChestZPos != chestTe) + { + this.adjacentChestChecked = false; + } + + break; + case EAST: + + if (this.adjacentChestXPos != chestTe) + { + this.adjacentChestChecked = false; + } + + break; + case WEST: + + if (this.adjacentChestXNeg != chestTe) + { + this.adjacentChestChecked = false; + } + } + } + } + + /** + * Performs the check for adjacent chests to determine if this chest is double or not. + */ + public void checkForAdjacentChests() + { + if (!this.adjacentChestChecked) + { + if (this.world == null || !this.world.isAreaLoaded(this.pos, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbors + this.adjacentChestChecked = true; + this.adjacentChestXNeg = this.getAdjacentChest(EnumFacing.WEST); + this.adjacentChestXPos = this.getAdjacentChest(EnumFacing.EAST); + this.adjacentChestZNeg = this.getAdjacentChest(EnumFacing.NORTH); + this.adjacentChestZPos = this.getAdjacentChest(EnumFacing.SOUTH); + } + } + + @Nullable + protected TileEntityChest getAdjacentChest(EnumFacing side) + { + BlockPos blockpos = this.pos.offset(side); + + if (this.isChestAt(blockpos)) + { + TileEntity tileentity = this.world.getTileEntity(blockpos); + + if (tileentity instanceof TileEntityChest) + { + TileEntityChest tileentitychest = (TileEntityChest)tileentity; + tileentitychest.setNeighbor(this, side.getOpposite()); + return tileentitychest; + } + } + + return null; + } + + private boolean isChestAt(BlockPos posIn) + { + if (this.world == null) + { + return false; + } + else + { + Block block = this.world.getBlockState(posIn).getBlock(); + return block instanceof BlockChest && ((BlockChest)block).chestType == this.getChestType(); + } + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.checkForAdjacentChests(); + int i = this.pos.getX(); + int j = this.pos.getY(); + int k = this.pos.getZ(); + ++this.ticksSinceSync; + + if (!this.world.isRemote && this.numPlayersUsing != 0 && (this.ticksSinceSync + i + j + k) % 200 == 0) + { + this.numPlayersUsing = 0; + float f = 5.0F; + + for (EntityPlayer entityplayer : this.world.getEntitiesWithinAABB(EntityPlayer.class, new AxisAlignedBB((double)((float)i - 5.0F), (double)((float)j - 5.0F), (double)((float)k - 5.0F), (double)((float)(i + 1) + 5.0F), (double)((float)(j + 1) + 5.0F), (double)((float)(k + 1) + 5.0F)))) + { + if (entityplayer.openContainer instanceof ContainerChest) + { + IInventory iinventory = ((ContainerChest)entityplayer.openContainer).getLowerChestInventory(); + + if (iinventory == this || iinventory instanceof InventoryLargeChest && ((InventoryLargeChest)iinventory).isPartOfLargeChest(this)) + { + ++this.numPlayersUsing; + } + } + } + } + + this.prevLidAngle = this.lidAngle; + float f1 = 0.1F; + + if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F && this.adjacentChestZNeg == null && this.adjacentChestXNeg == null) + { + double d1 = (double)i + 0.5D; + double d2 = (double)k + 0.5D; + + if (this.adjacentChestZPos != null) + { + d2 += 0.5D; + } + + if (this.adjacentChestXPos != null) + { + d1 += 0.5D; + } + + this.world.playSound((EntityPlayer)null, d1, (double)j + 0.5D, d2, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) + { + float f2 = this.lidAngle; + + if (this.numPlayersUsing > 0) + { + this.lidAngle += 0.1F; + } + else + { + this.lidAngle -= 0.1F; + } + + if (this.lidAngle > 1.0F) + { + this.lidAngle = 1.0F; + } + + float f3 = 0.5F; + + if (this.lidAngle < 0.5F && f2 >= 0.5F && this.adjacentChestZNeg == null && this.adjacentChestXNeg == null) + { + double d3 = (double)i + 0.5D; + double d0 = (double)k + 0.5D; + + if (this.adjacentChestZPos != null) + { + d0 += 0.5D; + } + + if (this.adjacentChestXPos != null) + { + d3 += 0.5D; + } + + this.world.playSound((EntityPlayer)null, d3, (double)j + 0.5D, d0, SoundEvents.BLOCK_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.lidAngle < 0.0F) + { + this.lidAngle = 0.0F; + } + } + } + + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.numPlayersUsing = type; + return true; + } + else + { + return super.receiveClientEvent(id, type); + } + } + + public void openInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + if (this.numPlayersUsing < 0) + { + this.numPlayersUsing = 0; + } + + ++this.numPlayersUsing; + this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.numPlayersUsing); + this.world.notifyNeighborsOfStateChange(this.pos, this.getBlockType(), false); + + if (this.getChestType() == BlockChest.Type.TRAP) + { + this.world.notifyNeighborsOfStateChange(this.pos.down(), this.getBlockType(), false); + } + } + } + + public void closeInventory(EntityPlayer player) + { + if (!player.isSpectator() && this.getBlockType() instanceof BlockChest) + { + --this.numPlayersUsing; + this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.numPlayersUsing); + this.world.notifyNeighborsOfStateChange(this.pos, this.getBlockType(), false); + + if (this.getChestType() == BlockChest.Type.TRAP) + { + this.world.notifyNeighborsOfStateChange(this.pos.down(), this.getBlockType(), false); + } + } + } + + public net.minecraftforge.items.VanillaDoubleChestItemHandler doubleChestHandler; + + @SuppressWarnings("unchecked") + @Override + @Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @Nullable net.minecraft.util.EnumFacing facing) + { + if (capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + if(doubleChestHandler == null || doubleChestHandler.needsRefresh()) + doubleChestHandler = net.minecraftforge.items.VanillaDoubleChestItemHandler.get(this); + if (doubleChestHandler != null && doubleChestHandler != net.minecraftforge.items.VanillaDoubleChestItemHandler.NO_ADJACENT_CHESTS_INSTANCE) + return (T) doubleChestHandler; + } + return super.getCapability(capability, facing); + } + + public net.minecraftforge.items.IItemHandler getSingleChestHandler() + { + return super.getCapability(net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null); + } + + + /** + * invalidates a tile entity + */ + public void invalidate() + { + super.invalidate(); + this.updateContainingBlockInfo(); + this.checkForAdjacentChests(); + } + + public BlockChest.Type getChestType() + { + if (this.cachedChestType == null) + { + if (this.world == null || !(this.getBlockType() instanceof BlockChest)) + { + return BlockChest.Type.BASIC; + } + + this.cachedChestType = ((BlockChest)this.getBlockType()).chestType; + } + + return this.cachedChestType; + } + + public String getGuiID() + { + return "minecraft:chest"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + this.fillWithLoot(playerIn); + return new ContainerChest(playerInventory, this, playerIn); + } + + protected NonNullList getItems() + { + return this.chestContents; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityCommandBlock.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityCommandBlock.java new file mode 100644 index 0000000..674f0ca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityCommandBlock.java @@ -0,0 +1,250 @@ +package net.minecraft.tileentity; + +import io.netty.buffer.ByteBuf; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockCommandBlock; +import net.minecraft.block.state.IBlockState; +import net.minecraft.command.CommandResultStats; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityCommandBlock extends TileEntity +{ + private boolean powered; + private boolean auto; + private boolean conditionMet; + private boolean sendToClient; + private final CommandBlockBaseLogic commandBlockLogic = new CommandBlockBaseLogic() + { + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, + * return the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return TileEntityCommandBlock.this.pos; + } + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, return + * 0.0D, 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return new Vec3d((double)TileEntityCommandBlock.this.pos.getX() + 0.5D, (double)TileEntityCommandBlock.this.pos.getY() + 0.5D, (double)TileEntityCommandBlock.this.pos.getZ() + 0.5D); + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, + * return the overworld + */ + public World getEntityWorld() + { + return TileEntityCommandBlock.this.getWorld(); + } + /** + * Sets the command. + */ + public void setCommand(String command) + { + super.setCommand(command); + TileEntityCommandBlock.this.markDirty(); + } + public void updateCommand() + { + IBlockState iblockstate = TileEntityCommandBlock.this.world.getBlockState(TileEntityCommandBlock.this.pos); + TileEntityCommandBlock.this.getWorld().notifyBlockUpdate(TileEntityCommandBlock.this.pos, iblockstate, iblockstate, 3); + } + /** + * Currently this returns 0 for the traditional command block, and 1 for the minecart command block + */ + @SideOnly(Side.CLIENT) + public int getCommandBlockType() + { + return 0; + } + /** + * Fills in information about the command block for the packet. entityId for the minecart version, and X/Y/Z for + * the traditional version + */ + @SideOnly(Side.CLIENT) + public void fillInInfo(ByteBuf buf) + { + buf.writeInt(TileEntityCommandBlock.this.pos.getX()); + buf.writeInt(TileEntityCommandBlock.this.pos.getY()); + buf.writeInt(TileEntityCommandBlock.this.pos.getZ()); + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return TileEntityCommandBlock.this.world.getMinecraftServer(); + } + }; + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + this.commandBlockLogic.writeToNBT(compound); + compound.setBoolean("powered", this.isPowered()); + compound.setBoolean("conditionMet", this.isConditionMet()); + compound.setBoolean("auto", this.isAuto()); + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.commandBlockLogic.readDataFromNBT(compound); + this.powered = compound.getBoolean("powered"); + this.conditionMet = compound.getBoolean("conditionMet"); + this.setAuto(compound.getBoolean("auto")); + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + if (this.isSendToClient()) + { + this.setSendToClient(false); + NBTTagCompound nbttagcompound = this.writeToNBT(new NBTTagCompound()); + return new SPacketUpdateTileEntity(this.pos, 2, nbttagcompound); + } + else + { + return null; + } + } + + public boolean onlyOpsCanSetNbt() + { + return true; + } + + public CommandBlockBaseLogic getCommandBlockLogic() + { + return this.commandBlockLogic; + } + + public CommandResultStats getCommandResultStats() + { + return this.commandBlockLogic.getCommandResultStats(); + } + + public void setPowered(boolean poweredIn) + { + this.powered = poweredIn; + } + + public boolean isPowered() + { + return this.powered; + } + + public boolean isAuto() + { + return this.auto; + } + + public void setAuto(boolean autoIn) + { + boolean flag = this.auto; + this.auto = autoIn; + + if (!flag && autoIn && !this.powered && this.world != null && this.getMode() != TileEntityCommandBlock.Mode.SEQUENCE) + { + Block block = this.getBlockType(); + + if (block instanceof BlockCommandBlock) + { + this.setConditionMet(); + this.world.scheduleUpdate(this.pos, block, block.tickRate(this.world)); + } + } + } + + public boolean isConditionMet() + { + return this.conditionMet; + } + + public boolean setConditionMet() + { + this.conditionMet = true; + + if (this.isConditional()) + { + BlockPos blockpos = this.pos.offset(((EnumFacing)this.world.getBlockState(this.pos).getValue(BlockCommandBlock.FACING)).getOpposite()); + + if (this.world.getBlockState(blockpos).getBlock() instanceof BlockCommandBlock) + { + TileEntity tileentity = this.world.getTileEntity(blockpos); + this.conditionMet = tileentity instanceof TileEntityCommandBlock && ((TileEntityCommandBlock)tileentity).getCommandBlockLogic().getSuccessCount() > 0; + } + else + { + this.conditionMet = false; + } + } + + return this.conditionMet; + } + + public boolean isSendToClient() + { + return this.sendToClient; + } + + public void setSendToClient(boolean p_184252_1_) + { + this.sendToClient = p_184252_1_; + } + + public TileEntityCommandBlock.Mode getMode() + { + Block block = this.getBlockType(); + + if (block == Blocks.COMMAND_BLOCK) + { + return TileEntityCommandBlock.Mode.REDSTONE; + } + else if (block == Blocks.REPEATING_COMMAND_BLOCK) + { + return TileEntityCommandBlock.Mode.AUTO; + } + else + { + return block == Blocks.CHAIN_COMMAND_BLOCK ? TileEntityCommandBlock.Mode.SEQUENCE : TileEntityCommandBlock.Mode.REDSTONE; + } + } + + public boolean isConditional() + { + IBlockState iblockstate = this.world.getBlockState(this.getPos()); + return iblockstate.getBlock() instanceof BlockCommandBlock ? ((Boolean)iblockstate.getValue(BlockCommandBlock.CONDITIONAL)).booleanValue() : false; + } + + /** + * validates a tile entity + */ + public void validate() + { + this.blockType = null; + super.validate(); + } + + public static enum Mode + { + SEQUENCE, + AUTO, + REDSTONE; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityComparator.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityComparator.java new file mode 100644 index 0000000..67242f9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityComparator.java @@ -0,0 +1,31 @@ +package net.minecraft.tileentity; + +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityComparator extends TileEntity +{ + private int outputSignal; + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setInteger("OutputSignal", this.outputSignal); + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.outputSignal = compound.getInteger("OutputSignal"); + } + + public int getOutputSignal() + { + return this.outputSignal; + } + + public void setOutputSignal(int outputSignalIn) + { + this.outputSignal = outputSignalIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDaylightDetector.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDaylightDetector.java new file mode 100644 index 0000000..5f6be6d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDaylightDetector.java @@ -0,0 +1,23 @@ +package net.minecraft.tileentity; + +import net.minecraft.block.BlockDaylightDetector; +import net.minecraft.util.ITickable; + +public class TileEntityDaylightDetector extends TileEntity implements ITickable +{ + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.world != null && !this.world.isRemote && this.world.getTotalWorldTime() % 20L == 0L) + { + this.blockType = this.getBlockType(); + + if (this.blockType instanceof BlockDaylightDetector) + { + ((BlockDaylightDetector)this.blockType).updatePower(this.world, this.pos); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDispenser.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDispenser.java new file mode 100644 index 0000000..9d243c1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDispenser.java @@ -0,0 +1,146 @@ +package net.minecraft.tileentity; + +import java.util.Random; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerDispenser; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; + +public class TileEntityDispenser extends TileEntityLockableLoot +{ + private static final Random RNG = new Random(); + private NonNullList stacks = NonNullList.withSize(9, ItemStack.EMPTY); + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return 9; + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.stacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public int getDispenseSlot() + { + this.fillWithLoot((EntityPlayer)null); + int i = -1; + int j = 1; + + for (int k = 0; k < this.stacks.size(); ++k) + { + if (!((ItemStack)this.stacks.get(k)).isEmpty() && RNG.nextInt(j++) == 0) + { + i = k; + } + } + + return i; + } + + /** + * Add the given ItemStack to this Dispenser. Return the Slot the Item was placed in or -1 if no free slot is + * available. + */ + public int addItemStack(ItemStack stack) + { + for (int i = 0; i < this.stacks.size(); ++i) + { + if (((ItemStack)this.stacks.get(i)).isEmpty()) + { + this.setInventorySlotContents(i, stack); + return i; + } + } + + return -1; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.dispenser"; + } + + public static void registerFixes(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityDispenser.class, new String[] {"Items"})); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.stacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + if (!this.checkLootAndRead(compound)) + { + ItemStackHelper.loadAllItems(compound, this.stacks); + } + + if (compound.hasKey("CustomName", 8)) + { + this.customName = compound.getString("CustomName"); + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + if (!this.checkLootAndWrite(compound)) + { + ItemStackHelper.saveAllItems(compound, this.stacks); + } + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.customName); + } + + return compound; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + public String getGuiID() + { + return "minecraft:dispenser"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + this.fillWithLoot(playerIn); + return new ContainerDispenser(playerInventory, this); + } + + protected NonNullList getItems() + { + return this.stacks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDropper.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDropper.java new file mode 100644 index 0000000..3765f5f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDropper.java @@ -0,0 +1,26 @@ +package net.minecraft.tileentity; + +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; + +public class TileEntityDropper extends TileEntityDispenser +{ + public static void registerFixesDropper(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityDropper.class, new String[] {"Items"})); + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.dropper"; + } + + public String getGuiID() + { + return "minecraft:dropper"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEnchantmentTable.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEnchantmentTable.java new file mode 100644 index 0000000..81d3b69 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEnchantmentTable.java @@ -0,0 +1,171 @@ +package net.minecraft.tileentity; + +import java.util.Random; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerEnchantment; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.IInteractionObject; + +public class TileEntityEnchantmentTable extends TileEntity implements ITickable, IInteractionObject +{ + public int tickCount; + public float pageFlip; + public float pageFlipPrev; + public float flipT; + public float flipA; + public float bookSpread; + public float bookSpreadPrev; + public float bookRotation; + public float bookRotationPrev; + public float tRot; + private static final Random rand = new Random(); + private String customName; + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.customName); + } + + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + + if (compound.hasKey("CustomName", 8)) + { + this.customName = compound.getString("CustomName"); + } + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.bookSpreadPrev = this.bookSpread; + this.bookRotationPrev = this.bookRotation; + EntityPlayer entityplayer = this.world.getClosestPlayer((double)((float)this.pos.getX() + 0.5F), (double)((float)this.pos.getY() + 0.5F), (double)((float)this.pos.getZ() + 0.5F), 3.0D, false); + + if (entityplayer != null) + { + double d0 = entityplayer.posX - (double)((float)this.pos.getX() + 0.5F); + double d1 = entityplayer.posZ - (double)((float)this.pos.getZ() + 0.5F); + this.tRot = (float)MathHelper.atan2(d1, d0); + this.bookSpread += 0.1F; + + if (this.bookSpread < 0.5F || rand.nextInt(40) == 0) + { + float f1 = this.flipT; + + while (true) + { + this.flipT += (float)(rand.nextInt(4) - rand.nextInt(4)); + + if (f1 != this.flipT) + { + break; + } + } + } + } + else + { + this.tRot += 0.02F; + this.bookSpread -= 0.1F; + } + + while (this.bookRotation >= (float)Math.PI) + { + this.bookRotation -= ((float)Math.PI * 2F); + } + + while (this.bookRotation < -(float)Math.PI) + { + this.bookRotation += ((float)Math.PI * 2F); + } + + while (this.tRot >= (float)Math.PI) + { + this.tRot -= ((float)Math.PI * 2F); + } + + while (this.tRot < -(float)Math.PI) + { + this.tRot += ((float)Math.PI * 2F); + } + + float f2; + + for (f2 = this.tRot - this.bookRotation; f2 >= (float)Math.PI; f2 -= ((float)Math.PI * 2F)) + { + ; + } + + while (f2 < -(float)Math.PI) + { + f2 += ((float)Math.PI * 2F); + } + + this.bookRotation += f2 * 0.4F; + this.bookSpread = MathHelper.clamp(this.bookSpread, 0.0F, 1.0F); + ++this.tickCount; + this.pageFlipPrev = this.pageFlip; + float f = (this.flipT - this.pageFlip) * 0.4F; + float f3 = 0.2F; + f = MathHelper.clamp(f, -0.2F, 0.2F); + this.flipA += (f - this.flipA) * 0.9F; + this.pageFlip += this.flipA; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.enchant"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.customName != null && !this.customName.isEmpty(); + } + + public void setCustomName(String customNameIn) + { + this.customName = customNameIn; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerEnchantment(playerInventory, this.world, this.pos); + } + + public String getGuiID() + { + return "minecraft:enchanting_table"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEndGateway.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEndGateway.java new file mode 100644 index 0000000..e06caaa --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEndGateway.java @@ -0,0 +1,330 @@ +package net.minecraft.tileentity; + +import java.util.List; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.feature.WorldGenEndGateway; +import net.minecraft.world.gen.feature.WorldGenEndIsland; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class TileEntityEndGateway extends TileEntityEndPortal implements ITickable +{ + private static final Logger LOGGER = LogManager.getLogger(); + private long age; + private int teleportCooldown; + private BlockPos exitPortal; + private boolean exactTeleport; + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setLong("Age", this.age); + + if (this.exitPortal != null) + { + compound.setTag("ExitPortal", NBTUtil.createPosTag(this.exitPortal)); + } + + if (this.exactTeleport) + { + compound.setBoolean("ExactTeleport", this.exactTeleport); + } + + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.age = compound.getLong("Age"); + + if (compound.hasKey("ExitPortal", 10)) + { + this.exitPortal = NBTUtil.getPosFromTag(compound.getCompoundTag("ExitPortal")); + } + + this.exactTeleport = compound.getBoolean("ExactTeleport"); + } + + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + boolean flag = this.isSpawning(); + boolean flag1 = this.isCoolingDown(); + ++this.age; + + if (flag1) + { + --this.teleportCooldown; + } + else if (!this.world.isRemote) + { + List list = this.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(this.getPos())); + + if (!list.isEmpty()) + { + this.teleportEntity(list.get(0)); + } + + if (this.age % 2400L == 0L) + { + this.triggerCooldown(); + } + } + + if (flag != this.isSpawning() || flag1 != this.isCoolingDown()) + { + this.markDirty(); + } + } + + public boolean isSpawning() + { + return this.age < 200L; + } + + public boolean isCoolingDown() + { + return this.teleportCooldown > 0; + } + + @SideOnly(Side.CLIENT) + public float getSpawnPercent(float p_184302_1_) + { + return MathHelper.clamp(((float)this.age + p_184302_1_) / 200.0F, 0.0F, 1.0F); + } + + @SideOnly(Side.CLIENT) + public float getCooldownPercent(float p_184305_1_) + { + return 1.0F - MathHelper.clamp(((float)this.teleportCooldown - p_184305_1_) / 40.0F, 0.0F, 1.0F); + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 8, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public void triggerCooldown() + { + if (!this.world.isRemote) + { + this.teleportCooldown = 40; + this.world.addBlockEvent(this.getPos(), this.getBlockType(), 1, 0); + this.markDirty(); + } + } + + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.teleportCooldown = 40; + return true; + } + else + { + return super.receiveClientEvent(id, type); + } + } + + public void teleportEntity(Entity entityIn) + { + if (!this.world.isRemote && !this.isCoolingDown()) + { + this.teleportCooldown = 100; + + if (this.exitPortal == null && this.world.provider instanceof WorldProviderEnd) + { + this.findExitPortal(); + } + + if (this.exitPortal != null) + { + BlockPos blockpos = this.exactTeleport ? this.exitPortal : this.findExitPosition(); + entityIn.setPositionAndUpdate((double)blockpos.getX() + 0.5D, (double)blockpos.getY() + 0.5D, (double)blockpos.getZ() + 0.5D); + } + + this.triggerCooldown(); + } + } + + private BlockPos findExitPosition() + { + BlockPos blockpos = findHighestBlock(this.world, this.exitPortal, 5, false); + LOGGER.debug("Best exit position for portal at {} is {}", this.exitPortal, blockpos); + return blockpos.up(); + } + + private void findExitPortal() + { + Vec3d vec3d = (new Vec3d((double)this.getPos().getX(), 0.0D, (double)this.getPos().getZ())).normalize(); + Vec3d vec3d1 = vec3d.scale(1024.0D); + + for (int i = 16; getChunk(this.world, vec3d1).getTopFilledSegment() > 0 && i-- > 0; vec3d1 = vec3d1.add(vec3d.scale(-16.0D))) + { + LOGGER.debug("Skipping backwards past nonempty chunk at {}", (Object)vec3d1); + } + + for (int j = 16; getChunk(this.world, vec3d1).getTopFilledSegment() == 0 && j-- > 0; vec3d1 = vec3d1.add(vec3d.scale(16.0D))) + { + LOGGER.debug("Skipping forward past empty chunk at {}", (Object)vec3d1); + } + + LOGGER.debug("Found chunk at {}", (Object)vec3d1); + Chunk chunk = getChunk(this.world, vec3d1); + this.exitPortal = findSpawnpointInChunk(chunk); + + if (this.exitPortal == null) + { + this.exitPortal = new BlockPos(vec3d1.x + 0.5D, 75.0D, vec3d1.z + 0.5D); + LOGGER.debug("Failed to find suitable block, settling on {}", (Object)this.exitPortal); + (new WorldGenEndIsland()).generate(this.world, new Random(this.exitPortal.toLong()), this.exitPortal); + } + else + { + LOGGER.debug("Found block at {}", (Object)this.exitPortal); + } + + this.exitPortal = findHighestBlock(this.world, this.exitPortal, 16, true); + LOGGER.debug("Creating portal at {}", (Object)this.exitPortal); + this.exitPortal = this.exitPortal.up(10); + this.createExitPortal(this.exitPortal); + this.markDirty(); + } + + private static BlockPos findHighestBlock(World p_184308_0_, BlockPos p_184308_1_, int p_184308_2_, boolean p_184308_3_) + { + BlockPos blockpos = null; + + for (int i = -p_184308_2_; i <= p_184308_2_; ++i) + { + for (int j = -p_184308_2_; j <= p_184308_2_; ++j) + { + if (i != 0 || j != 0 || p_184308_3_) + { + for (int k = 255; k > (blockpos == null ? 0 : blockpos.getY()); --k) + { + BlockPos blockpos1 = new BlockPos(p_184308_1_.getX() + i, k, p_184308_1_.getZ() + j); + IBlockState iblockstate = p_184308_0_.getBlockState(blockpos1); + + if (iblockstate.isBlockNormalCube() && (p_184308_3_ || iblockstate.getBlock() != Blocks.BEDROCK)) + { + blockpos = blockpos1; + break; + } + } + } + } + } + + return blockpos == null ? p_184308_1_ : blockpos; + } + + private static Chunk getChunk(World worldIn, Vec3d vec3) + { + return worldIn.getChunkFromChunkCoords(MathHelper.floor(vec3.x / 16.0D), MathHelper.floor(vec3.z / 16.0D)); + } + + @Nullable + private static BlockPos findSpawnpointInChunk(Chunk chunkIn) + { + BlockPos blockpos = new BlockPos(chunkIn.x * 16, 30, chunkIn.z * 16); + int i = chunkIn.getTopFilledSegment() + 16 - 1; + BlockPos blockpos1 = new BlockPos(chunkIn.x * 16 + 16 - 1, i, chunkIn.z * 16 + 16 - 1); + BlockPos blockpos2 = null; + double d0 = 0.0D; + + for (BlockPos blockpos3 : BlockPos.getAllInBox(blockpos, blockpos1)) + { + IBlockState iblockstate = chunkIn.getBlockState(blockpos3); + + if (iblockstate.getBlock() == Blocks.END_STONE && !chunkIn.getBlockState(blockpos3.up(1)).isBlockNormalCube() && !chunkIn.getBlockState(blockpos3.up(2)).isBlockNormalCube()) + { + double d1 = blockpos3.distanceSqToCenter(0.0D, 0.0D, 0.0D); + + if (blockpos2 == null || d1 < d0) + { + blockpos2 = blockpos3; + d0 = d1; + } + } + } + + return blockpos2; + } + + private void createExitPortal(BlockPos posIn) + { + (new WorldGenEndGateway()).generate(this.world, new Random(), posIn); + TileEntity tileentity = this.world.getTileEntity(posIn); + + if (tileentity instanceof TileEntityEndGateway) + { + TileEntityEndGateway tileentityendgateway = (TileEntityEndGateway)tileentity; + tileentityendgateway.exitPortal = new BlockPos(this.getPos()); + tileentityendgateway.markDirty(); + } + else + { + LOGGER.warn("Couldn't save exit portal at {}", (Object)posIn); + } + } + + @SideOnly(Side.CLIENT) + public boolean shouldRenderFace(EnumFacing p_184313_1_) + { + return this.getBlockType().getDefaultState().shouldSideBeRendered(this.world, this.getPos(), p_184313_1_); + } + + @SideOnly(Side.CLIENT) + public int getParticleAmount() + { + int i = 0; + + for (EnumFacing enumfacing : EnumFacing.values()) + { + i += this.shouldRenderFace(enumfacing) ? 1 : 0; + } + + return i; + } + + public void setExactPosition(BlockPos p_190603_1_) + { + this.exactTeleport = true; + this.exitPortal = p_190603_1_; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEndPortal.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEndPortal.java new file mode 100644 index 0000000..8de2e99 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEndPortal.java @@ -0,0 +1,14 @@ +package net.minecraft.tileentity; + +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityEndPortal extends TileEntity +{ + @SideOnly(Side.CLIENT) + public boolean shouldRenderFace(EnumFacing p_184313_1_) + { + return p_184313_1_ == EnumFacing.UP; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEnderChest.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEnderChest.java new file mode 100644 index 0000000..2c34777 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityEnderChest.java @@ -0,0 +1,119 @@ +package net.minecraft.tileentity; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.util.ITickable; +import net.minecraft.util.SoundCategory; + +public class TileEntityEnderChest extends TileEntity implements ITickable +{ + public float lidAngle; + /** The angle of the ender chest lid last tick */ + public float prevLidAngle; + public int numPlayersUsing; + private int ticksSinceSync; + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (++this.ticksSinceSync % 20 * 4 == 0) + { + this.world.addBlockEvent(this.pos, Blocks.ENDER_CHEST, 1, this.numPlayersUsing); + } + + this.prevLidAngle = this.lidAngle; + int i = this.pos.getX(); + int j = this.pos.getY(); + int k = this.pos.getZ(); + float f = 0.1F; + + if (this.numPlayersUsing > 0 && this.lidAngle == 0.0F) + { + double d0 = (double)i + 0.5D; + double d1 = (double)k + 0.5D; + this.world.playSound((EntityPlayer)null, d0, (double)j + 0.5D, d1, SoundEvents.BLOCK_ENDERCHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.numPlayersUsing == 0 && this.lidAngle > 0.0F || this.numPlayersUsing > 0 && this.lidAngle < 1.0F) + { + float f2 = this.lidAngle; + + if (this.numPlayersUsing > 0) + { + this.lidAngle += 0.1F; + } + else + { + this.lidAngle -= 0.1F; + } + + if (this.lidAngle > 1.0F) + { + this.lidAngle = 1.0F; + } + + float f1 = 0.5F; + + if (this.lidAngle < 0.5F && f2 >= 0.5F) + { + double d3 = (double)i + 0.5D; + double d2 = (double)k + 0.5D; + this.world.playSound((EntityPlayer)null, d3, (double)j + 0.5D, d2, SoundEvents.BLOCK_ENDERCHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + + if (this.lidAngle < 0.0F) + { + this.lidAngle = 0.0F; + } + } + } + + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.numPlayersUsing = type; + return true; + } + else + { + return super.receiveClientEvent(id, type); + } + } + + /** + * invalidates a tile entity + */ + public void invalidate() + { + this.updateContainingBlockInfo(); + super.invalidate(); + } + + public void openChest() + { + ++this.numPlayersUsing; + this.world.addBlockEvent(this.pos, Blocks.ENDER_CHEST, 1, this.numPlayersUsing); + } + + public void closeChest() + { + --this.numPlayersUsing; + this.world.addBlockEvent(this.pos, Blocks.ENDER_CHEST, 1, this.numPlayersUsing); + } + + public boolean canBeUsed(EntityPlayer player) + { + if (this.world.getTileEntity(this.pos) != this) + { + return false; + } + else + { + return player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityFlowerPot.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityFlowerPot.java new file mode 100644 index 0000000..f81841d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityFlowerPot.java @@ -0,0 +1,87 @@ +package net.minecraft.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.DataFixer; + +public class TileEntityFlowerPot extends TileEntity +{ + private Item flowerPotItem; + private int flowerPotData; + + public TileEntityFlowerPot() + { + } + + public TileEntityFlowerPot(Item potItem, int potData) + { + this.flowerPotItem = potItem; + this.flowerPotData = potData; + } + + public static void registerFixesFlowerPot(DataFixer fixer) + { + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + ResourceLocation resourcelocation = Item.REGISTRY.getNameForObject(this.flowerPotItem); + compound.setString("Item", resourcelocation == null ? "" : resourcelocation.toString()); + compound.setInteger("Data", this.flowerPotData); + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + + if (compound.hasKey("Item", 8)) + { + this.flowerPotItem = Item.getByNameOrId(compound.getString("Item")); + } + else + { + this.flowerPotItem = Item.getItemById(compound.getInteger("Item")); + } + + this.flowerPotData = compound.getInteger("Data"); + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 5, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public void setItemStack(ItemStack stack) + { + this.flowerPotItem = stack.getItem(); + this.flowerPotData = stack.getMetadata(); + } + + public ItemStack getFlowerItemStack() + { + return this.flowerPotItem == null ? ItemStack.EMPTY : new ItemStack(this.flowerPotItem, 1, this.flowerPotData); + } + + @Nullable + public Item getFlowerPotItem() + { + return this.flowerPotItem; + } + + public int getFlowerPotData() + { + return this.flowerPotData; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityFurnace.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityFurnace.java new file mode 100644 index 0000000..e937556 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityFurnace.java @@ -0,0 +1,610 @@ +package net.minecraft.tileentity; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFurnace; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerFurnace; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.inventory.SlotFurnaceFuel; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBoat; +import net.minecraft.item.ItemDoor; +import net.minecraft.item.ItemHoe; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; +import net.minecraft.item.ItemTool; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityFurnace extends TileEntityLockable implements ITickable, ISidedInventory +{ + private static final int[] SLOTS_TOP = new int[] {0}; + private static final int[] SLOTS_BOTTOM = new int[] {2, 1}; + private static final int[] SLOTS_SIDES = new int[] {1}; + /** The ItemStacks that hold the items currently being used in the furnace */ + private NonNullList furnaceItemStacks = NonNullList.withSize(3, ItemStack.EMPTY); + /** The number of ticks that the furnace will keep burning */ + private int furnaceBurnTime; + /** The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for */ + private int currentItemBurnTime; + private int cookTime; + private int totalCookTime; + private String furnaceCustomName; + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.furnaceItemStacks.size(); + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.furnaceItemStacks) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + return this.furnaceItemStacks.get(index); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + return ItemStackHelper.getAndSplit(this.furnaceItemStacks, index, count); + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + return ItemStackHelper.getAndRemove(this.furnaceItemStacks, index); + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + ItemStack itemstack = this.furnaceItemStacks.get(index); + boolean flag = !stack.isEmpty() && stack.isItemEqual(itemstack) && ItemStack.areItemStackTagsEqual(stack, itemstack); + this.furnaceItemStacks.set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + if (index == 0 && !flag) + { + this.totalCookTime = this.getCookTime(stack); + this.cookTime = 0; + this.markDirty(); + } + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.furnaceCustomName : "container.furnace"; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.furnaceCustomName != null && !this.furnaceCustomName.isEmpty(); + } + + public void setCustomInventoryName(String p_145951_1_) + { + this.furnaceCustomName = p_145951_1_; + } + + public static void registerFixesFurnace(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityFurnace.class, new String[] {"Items"})); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.furnaceItemStacks = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + ItemStackHelper.loadAllItems(compound, this.furnaceItemStacks); + this.furnaceBurnTime = compound.getInteger("BurnTime"); + this.cookTime = compound.getInteger("CookTime"); + this.totalCookTime = compound.getInteger("CookTimeTotal"); + this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks.get(1)); + + if (compound.hasKey("CustomName", 8)) + { + this.furnaceCustomName = compound.getString("CustomName"); + } + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setInteger("BurnTime", (short)this.furnaceBurnTime); + compound.setInteger("CookTime", (short)this.cookTime); + compound.setInteger("CookTimeTotal", (short)this.totalCookTime); + ItemStackHelper.saveAllItems(compound, this.furnaceItemStacks); + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.furnaceCustomName); + } + + return compound; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Furnace isBurning + */ + public boolean isBurning() + { + return this.furnaceBurnTime > 0; + } + + @SideOnly(Side.CLIENT) + public static boolean isBurning(IInventory inventory) + { + return inventory.getField(0) > 0; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + boolean flag = this.isBurning(); + boolean flag1 = false; + + if (this.isBurning()) + { + --this.furnaceBurnTime; + } + + if (!this.world.isRemote) + { + ItemStack itemstack = this.furnaceItemStacks.get(1); + + if (this.isBurning() || !itemstack.isEmpty() && !((ItemStack)this.furnaceItemStacks.get(0)).isEmpty()) + { + if (!this.isBurning() && this.canSmelt()) + { + this.furnaceBurnTime = getItemBurnTime(itemstack); + this.currentItemBurnTime = this.furnaceBurnTime; + + if (this.isBurning()) + { + flag1 = true; + + if (!itemstack.isEmpty()) + { + Item item = itemstack.getItem(); + itemstack.shrink(1); + + if (itemstack.isEmpty()) + { + ItemStack item1 = item.getContainerItem(itemstack); + this.furnaceItemStacks.set(1, item1); + } + } + } + } + + if (this.isBurning() && this.canSmelt()) + { + ++this.cookTime; + + if (this.cookTime == this.totalCookTime) + { + this.cookTime = 0; + this.totalCookTime = this.getCookTime(this.furnaceItemStacks.get(0)); + this.smeltItem(); + flag1 = true; + } + } + else + { + this.cookTime = 0; + } + } + else if (!this.isBurning() && this.cookTime > 0) + { + this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.totalCookTime); + } + + if (flag != this.isBurning()) + { + flag1 = true; + BlockFurnace.setState(this.isBurning(), this.world, this.pos); + } + } + + if (flag1) + { + this.markDirty(); + } + } + + public int getCookTime(ItemStack stack) + { + return 200; + } + + /** + * Returns true if the furnace can smelt an item, i.e. has a source item, destination stack isn't full, etc. + */ + private boolean canSmelt() + { + if (((ItemStack)this.furnaceItemStacks.get(0)).isEmpty()) + { + return false; + } + else + { + ItemStack itemstack = FurnaceRecipes.instance().getSmeltingResult(this.furnaceItemStacks.get(0)); + + if (itemstack.isEmpty()) + { + return false; + } + else + { + ItemStack itemstack1 = this.furnaceItemStacks.get(2); + + if (itemstack1.isEmpty()) + { + return true; + } + else if (!itemstack1.isItemEqual(itemstack)) + { + return false; + } + else if (itemstack1.getCount() + itemstack.getCount() <= this.getInventoryStackLimit() && itemstack1.getCount() + itemstack.getCount() <= itemstack1.getMaxStackSize()) // Forge fix: make furnace respect stack sizes in furnace recipes + { + return true; + } + else + { + return itemstack1.getCount() + itemstack.getCount() <= itemstack.getMaxStackSize(); // Forge fix: make furnace respect stack sizes in furnace recipes + } + } + } + } + + /** + * Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack + */ + public void smeltItem() + { + if (this.canSmelt()) + { + ItemStack itemstack = this.furnaceItemStacks.get(0); + ItemStack itemstack1 = FurnaceRecipes.instance().getSmeltingResult(itemstack); + ItemStack itemstack2 = this.furnaceItemStacks.get(2); + + if (itemstack2.isEmpty()) + { + this.furnaceItemStacks.set(2, itemstack1.copy()); + } + else if (itemstack2.getItem() == itemstack1.getItem()) + { + itemstack2.grow(itemstack1.getCount()); + } + + if (itemstack.getItem() == Item.getItemFromBlock(Blocks.SPONGE) && itemstack.getMetadata() == 1 && !((ItemStack)this.furnaceItemStacks.get(1)).isEmpty() && ((ItemStack)this.furnaceItemStacks.get(1)).getItem() == Items.BUCKET) + { + this.furnaceItemStacks.set(1, new ItemStack(Items.WATER_BUCKET)); + } + + itemstack.shrink(1); + } + } + + /** + * Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't + * fuel + */ + public static int getItemBurnTime(ItemStack stack) + { + if (stack.isEmpty()) + { + return 0; + } + else + { + int burnTime = net.minecraftforge.event.ForgeEventFactory.getItemBurnTime(stack); + if (burnTime >= 0) return burnTime; + Item item = stack.getItem(); + + if (item == Item.getItemFromBlock(Blocks.WOODEN_SLAB)) + { + return 150; + } + else if (item == Item.getItemFromBlock(Blocks.WOOL)) + { + return 100; + } + else if (item == Item.getItemFromBlock(Blocks.CARPET)) + { + return 67; + } + else if (item == Item.getItemFromBlock(Blocks.LADDER)) + { + return 300; + } + else if (item == Item.getItemFromBlock(Blocks.WOODEN_BUTTON)) + { + return 100; + } + else if (Block.getBlockFromItem(item).getDefaultState().getMaterial() == Material.WOOD) + { + return 300; + } + else if (item == Item.getItemFromBlock(Blocks.COAL_BLOCK)) + { + return 16000; + } + else if (item instanceof ItemTool && "WOOD".equals(((ItemTool)item).getToolMaterialName())) + { + return 200; + } + else if (item instanceof ItemSword && "WOOD".equals(((ItemSword)item).getToolMaterialName())) + { + return 200; + } + else if (item instanceof ItemHoe && "WOOD".equals(((ItemHoe)item).getMaterialName())) + { + return 200; + } + else if (item == Items.STICK) + { + return 100; + } + else if (item != Items.BOW && item != Items.FISHING_ROD) + { + if (item == Items.SIGN) + { + return 200; + } + else if (item == Items.COAL) + { + return 1600; + } + else if (item == Items.LAVA_BUCKET) + { + return 20000; + } + else if (item != Item.getItemFromBlock(Blocks.SAPLING) && item != Items.BOWL) + { + if (item == Items.BLAZE_ROD) + { + return 2400; + } + else if (item instanceof ItemDoor && item != Items.IRON_DOOR) + { + return 200; + } + else + { + return item instanceof ItemBoat ? 400 : 0; + } + } + else + { + return 100; + } + } + else + { + return 300; + } + } + } + + public static boolean isItemFuel(ItemStack stack) + { + return getItemBurnTime(stack) > 0; + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + if (this.world.getTileEntity(this.pos) != this) + { + return false; + } + else + { + return player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; + } + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + if (index == 2) + { + return false; + } + else if (index != 1) + { + return true; + } + else + { + ItemStack itemstack = this.furnaceItemStacks.get(1); + return isItemFuel(stack) || SlotFurnaceFuel.isBucket(stack) && itemstack.getItem() != Items.BUCKET; + } + } + + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return SLOTS_BOTTOM; + } + else + { + return side == EnumFacing.UP ? SLOTS_TOP : SLOTS_SIDES; + } + } + + /** + * Returns true if automation can insert the given item in the given slot from the given side. + */ + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return this.isItemValidForSlot(index, itemStackIn); + } + + /** + * Returns true if automation can extract the given item in the given slot from the given side. + */ + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + if (direction == EnumFacing.DOWN && index == 1) + { + Item item = stack.getItem(); + + if (item != Items.WATER_BUCKET && item != Items.BUCKET) + { + return false; + } + } + + return true; + } + + public String getGuiID() + { + return "minecraft:furnace"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerFurnace(playerInventory, this); + } + + public int getField(int id) + { + switch (id) + { + case 0: + return this.furnaceBurnTime; + case 1: + return this.currentItemBurnTime; + case 2: + return this.cookTime; + case 3: + return this.totalCookTime; + default: + return 0; + } + } + + public void setField(int id, int value) + { + switch (id) + { + case 0: + this.furnaceBurnTime = value; + break; + case 1: + this.currentItemBurnTime = value; + break; + case 2: + this.cookTime = value; + break; + case 3: + this.totalCookTime = value; + } + } + + public int getFieldCount() + { + return 4; + } + + public void clear() + { + this.furnaceItemStacks.clear(); + } + + net.minecraftforge.items.IItemHandler handlerTop = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.UP); + net.minecraftforge.items.IItemHandler handlerBottom = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.DOWN); + net.minecraftforge.items.IItemHandler handlerSide = new net.minecraftforge.items.wrapper.SidedInvWrapper(this, net.minecraft.util.EnumFacing.WEST); + + @SuppressWarnings("unchecked") + @Override + @javax.annotation.Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @javax.annotation.Nullable net.minecraft.util.EnumFacing facing) + { + if (facing != null && capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + if (facing == EnumFacing.DOWN) + return (T) handlerBottom; + else if (facing == EnumFacing.UP) + return (T) handlerTop; + else + return (T) handlerSide; + return super.getCapability(capability, facing); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityHopper.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityHopper.java new file mode 100644 index 0000000..6b4d85a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityHopper.java @@ -0,0 +1,695 @@ +package net.minecraft.tileentity; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockChest; +import net.minecraft.block.BlockHopper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerHopper; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EntitySelectors; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class TileEntityHopper extends TileEntityLockableLoot implements IHopper, ITickable +{ + private NonNullList inventory = NonNullList.withSize(5, ItemStack.EMPTY); + private int transferCooldown = -1; + private long tickedGameTime; + + public static void registerFixesHopper(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityHopper.class, new String[] {"Items"})); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.inventory = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + if (!this.checkLootAndRead(compound)) + { + ItemStackHelper.loadAllItems(compound, this.inventory); + } + + if (compound.hasKey("CustomName", 8)) + { + this.customName = compound.getString("CustomName"); + } + + this.transferCooldown = compound.getInteger("TransferCooldown"); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + if (!this.checkLootAndWrite(compound)) + { + ItemStackHelper.saveAllItems(compound, this.inventory); + } + + compound.setInteger("TransferCooldown", this.transferCooldown); + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.customName); + } + + return compound; + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.inventory.size(); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + this.fillWithLoot((EntityPlayer)null); + ItemStack itemstack = ItemStackHelper.getAndSplit(this.getItems(), index, count); + return itemstack; + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, ItemStack stack) + { + this.fillWithLoot((EntityPlayer)null); + this.getItems().set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.hopper"; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.world != null && !this.world.isRemote) + { + --this.transferCooldown; + this.tickedGameTime = this.world.getTotalWorldTime(); + + if (!this.isOnTransferCooldown()) + { + this.setTransferCooldown(0); + this.updateHopper(); + } + } + } + + protected boolean updateHopper() + { + if (this.world != null && !this.world.isRemote) + { + if (!this.isOnTransferCooldown() && BlockHopper.isEnabled(this.getBlockMetadata())) + { + boolean flag = false; + + if (!this.isInventoryEmpty()) + { + flag = this.transferItemsOut(); + } + + if (!this.isFull()) + { + flag = pullItems(this) || flag; + } + + if (flag) + { + this.setTransferCooldown(8); + this.markDirty(); + return true; + } + } + + return false; + } + else + { + return false; + } + } + + private boolean isInventoryEmpty() + { + for (ItemStack itemstack : this.inventory) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public boolean isEmpty() + { + return this.isInventoryEmpty(); + } + + private boolean isFull() + { + for (ItemStack itemstack : this.inventory) + { + if (itemstack.isEmpty() || itemstack.getCount() != itemstack.getMaxStackSize()) + { + return false; + } + } + + return true; + } + + private boolean transferItemsOut() + { + if (net.minecraftforge.items.VanillaInventoryCodeHooks.insertHook(this)) { return true; } + IInventory iinventory = this.getInventoryForHopperTransfer(); + + if (iinventory == null) + { + return false; + } + else + { + EnumFacing enumfacing = BlockHopper.getFacing(this.getBlockMetadata()).getOpposite(); + + if (this.isInventoryFull(iinventory, enumfacing)) + { + return false; + } + else + { + for (int i = 0; i < this.getSizeInventory(); ++i) + { + if (!this.getStackInSlot(i).isEmpty()) + { + ItemStack itemstack = this.getStackInSlot(i).copy(); + ItemStack itemstack1 = putStackInInventoryAllSlots(this, iinventory, this.decrStackSize(i, 1), enumfacing); + + if (itemstack1.isEmpty()) + { + iinventory.markDirty(); + return true; + } + + this.setInventorySlotContents(i, itemstack); + } + } + + return false; + } + } + } + + /** + * Returns false if the inventory has any room to place items in + */ + private boolean isInventoryFull(IInventory inventoryIn, EnumFacing side) + { + if (inventoryIn instanceof ISidedInventory) + { + ISidedInventory isidedinventory = (ISidedInventory)inventoryIn; + int[] aint = isidedinventory.getSlotsForFace(side); + + for (int k : aint) + { + ItemStack itemstack1 = isidedinventory.getStackInSlot(k); + + if (itemstack1.isEmpty() || itemstack1.getCount() != itemstack1.getMaxStackSize()) + { + return false; + } + } + } + else + { + int i = inventoryIn.getSizeInventory(); + + for (int j = 0; j < i; ++j) + { + ItemStack itemstack = inventoryIn.getStackInSlot(j); + + if (itemstack.isEmpty() || itemstack.getCount() != itemstack.getMaxStackSize()) + { + return false; + } + } + } + + return true; + } + + /** + * Returns false if the specified IInventory contains any items + */ + private static boolean isInventoryEmpty(IInventory inventoryIn, EnumFacing side) + { + if (inventoryIn instanceof ISidedInventory) + { + ISidedInventory isidedinventory = (ISidedInventory)inventoryIn; + int[] aint = isidedinventory.getSlotsForFace(side); + + for (int i : aint) + { + if (!isidedinventory.getStackInSlot(i).isEmpty()) + { + return false; + } + } + } + else + { + int j = inventoryIn.getSizeInventory(); + + for (int k = 0; k < j; ++k) + { + if (!inventoryIn.getStackInSlot(k).isEmpty()) + { + return false; + } + } + } + + return true; + } + + /** + * Pull dropped {@link net.minecraft.entity.item.EntityItem EntityItem}s from the world above the hopper and items + * from any inventory attached to this hopper into the hopper's inventory. + * + * @param hopper the hopper in question + * @return whether any items were successfully added to the hopper + */ + public static boolean pullItems(IHopper hopper) + { + Boolean ret = net.minecraftforge.items.VanillaInventoryCodeHooks.extractHook(hopper); + if (ret != null) return ret; + IInventory iinventory = getSourceInventory(hopper); + + if (iinventory != null) + { + EnumFacing enumfacing = EnumFacing.DOWN; + + if (isInventoryEmpty(iinventory, enumfacing)) + { + return false; + } + + if (iinventory instanceof ISidedInventory) + { + ISidedInventory isidedinventory = (ISidedInventory)iinventory; + int[] aint = isidedinventory.getSlotsForFace(enumfacing); + + for (int i : aint) + { + if (pullItemFromSlot(hopper, iinventory, i, enumfacing)) + { + return true; + } + } + } + else + { + int j = iinventory.getSizeInventory(); + + for (int k = 0; k < j; ++k) + { + if (pullItemFromSlot(hopper, iinventory, k, enumfacing)) + { + return true; + } + } + } + } + else + { + for (EntityItem entityitem : getCaptureItems(hopper.getWorld(), hopper.getXPos(), hopper.getYPos(), hopper.getZPos())) + { + if (putDropInInventoryAllSlots((IInventory)null, hopper, entityitem)) + { + return true; + } + } + } + + return false; + } + + /** + * Pulls from the specified slot in the inventory and places in any available slot in the hopper. Returns true if + * the entire stack was moved + */ + private static boolean pullItemFromSlot(IHopper hopper, IInventory inventoryIn, int index, EnumFacing direction) + { + ItemStack itemstack = inventoryIn.getStackInSlot(index); + + if (!itemstack.isEmpty() && canExtractItemFromSlot(inventoryIn, itemstack, index, direction)) + { + ItemStack itemstack1 = itemstack.copy(); + ItemStack itemstack2 = putStackInInventoryAllSlots(inventoryIn, hopper, inventoryIn.decrStackSize(index, 1), (EnumFacing)null); + + if (itemstack2.isEmpty()) + { + inventoryIn.markDirty(); + return true; + } + + inventoryIn.setInventorySlotContents(index, itemstack1); + } + + return false; + } + + /** + * Attempts to place the passed EntityItem's stack into the inventory using as many slots as possible. Returns false + * if the stackSize of the drop was not depleted. + */ + public static boolean putDropInInventoryAllSlots(IInventory source, IInventory destination, EntityItem entity) + { + boolean flag = false; + + if (entity == null) + { + return false; + } + else + { + ItemStack itemstack = entity.getItem().copy(); + ItemStack itemstack1 = putStackInInventoryAllSlots(source, destination, itemstack, (EnumFacing)null); + + if (itemstack1.isEmpty()) + { + flag = true; + entity.setDead(); + } + else + { + entity.setItem(itemstack1); + } + + return flag; + } + } + + + protected net.minecraftforge.items.IItemHandler createUnSidedHandler() + { + return new net.minecraftforge.items.VanillaHopperItemHandler(this); + } + + /** + * Attempts to place the passed stack in the inventory, using as many slots as required. Returns leftover items + */ + public static ItemStack putStackInInventoryAllSlots(IInventory source, IInventory destination, ItemStack stack, @Nullable EnumFacing direction) + { + if (destination instanceof ISidedInventory && direction != null) + { + ISidedInventory isidedinventory = (ISidedInventory)destination; + int[] aint = isidedinventory.getSlotsForFace(direction); + + for (int k = 0; k < aint.length && !stack.isEmpty(); ++k) + { + stack = insertStack(source, destination, stack, aint[k], direction); + } + } + else + { + int i = destination.getSizeInventory(); + + for (int j = 0; j < i && !stack.isEmpty(); ++j) + { + stack = insertStack(source, destination, stack, j, direction); + } + } + + return stack; + } + + /** + * Can this hopper insert the specified item from the specified slot on the specified side? + */ + private static boolean canInsertItemInSlot(IInventory inventoryIn, ItemStack stack, int index, EnumFacing side) + { + if (!inventoryIn.isItemValidForSlot(index, stack)) + { + return false; + } + else + { + return !(inventoryIn instanceof ISidedInventory) || ((ISidedInventory)inventoryIn).canInsertItem(index, stack, side); + } + } + + /** + * Can this hopper extract the specified item from the specified slot on the specified side? + */ + private static boolean canExtractItemFromSlot(IInventory inventoryIn, ItemStack stack, int index, EnumFacing side) + { + return !(inventoryIn instanceof ISidedInventory) || ((ISidedInventory)inventoryIn).canExtractItem(index, stack, side); + } + + /** + * Insert the specified stack to the specified inventory and return any leftover items + */ + private static ItemStack insertStack(IInventory source, IInventory destination, ItemStack stack, int index, EnumFacing direction) + { + ItemStack itemstack = destination.getStackInSlot(index); + + if (canInsertItemInSlot(destination, stack, index, direction)) + { + boolean flag = false; + boolean flag1 = destination.isEmpty(); + + if (itemstack.isEmpty()) + { + destination.setInventorySlotContents(index, stack); + stack = ItemStack.EMPTY; + flag = true; + } + else if (canCombine(itemstack, stack)) + { + int i = stack.getMaxStackSize() - itemstack.getCount(); + int j = Math.min(stack.getCount(), i); + stack.shrink(j); + itemstack.grow(j); + flag = j > 0; + } + + if (flag) + { + if (flag1 && destination instanceof TileEntityHopper) + { + TileEntityHopper tileentityhopper1 = (TileEntityHopper)destination; + + if (!tileentityhopper1.mayTransfer()) + { + int k = 0; + + if (source != null && source instanceof TileEntityHopper) + { + TileEntityHopper tileentityhopper = (TileEntityHopper)source; + + if (tileentityhopper1.tickedGameTime >= tileentityhopper.tickedGameTime) + { + k = 1; + } + } + + tileentityhopper1.setTransferCooldown(8 - k); + } + } + + destination.markDirty(); + } + } + + return stack; + } + + /** + * Returns the IInventory that this hopper is pointing into + */ + private IInventory getInventoryForHopperTransfer() + { + EnumFacing enumfacing = BlockHopper.getFacing(this.getBlockMetadata()); + return getInventoryAtPosition(this.getWorld(), this.getXPos() + (double)enumfacing.getFrontOffsetX(), this.getYPos() + (double)enumfacing.getFrontOffsetY(), this.getZPos() + (double)enumfacing.getFrontOffsetZ()); + } + + /** + * Gets the inventory that the provided hopper will transfer items from. + */ + public static IInventory getSourceInventory(IHopper hopper) + { + return getInventoryAtPosition(hopper.getWorld(), hopper.getXPos(), hopper.getYPos() + 1.0D, hopper.getZPos()); + } + + public static List getCaptureItems(World worldIn, double p_184292_1_, double p_184292_3_, double p_184292_5_) + { + return worldIn.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(p_184292_1_ - 0.5D, p_184292_3_, p_184292_5_ - 0.5D, p_184292_1_ + 0.5D, p_184292_3_ + 1.5D, p_184292_5_ + 0.5D), EntitySelectors.IS_ALIVE); + } + + /** + * Returns the IInventory (if applicable) of the TileEntity at the specified position + */ + public static IInventory getInventoryAtPosition(World worldIn, double x, double y, double z) + { + IInventory iinventory = null; + int i = MathHelper.floor(x); + int j = MathHelper.floor(y); + int k = MathHelper.floor(z); + BlockPos blockpos = new BlockPos(i, j, k); + net.minecraft.block.state.IBlockState state = worldIn.getBlockState(blockpos); + Block block = state.getBlock(); + + if (block.hasTileEntity(state)) + { + TileEntity tileentity = worldIn.getTileEntity(blockpos); + + if (tileentity instanceof IInventory) + { + iinventory = (IInventory)tileentity; + + if (iinventory instanceof TileEntityChest && block instanceof BlockChest) + { + iinventory = ((BlockChest)block).getContainer(worldIn, blockpos, true); + } + } + } + + if (iinventory == null) + { + List list = worldIn.getEntitiesInAABBexcluding((Entity)null, new AxisAlignedBB(x - 0.5D, y - 0.5D, z - 0.5D, x + 0.5D, y + 0.5D, z + 0.5D), EntitySelectors.HAS_INVENTORY); + + if (!list.isEmpty()) + { + iinventory = (IInventory)list.get(worldIn.rand.nextInt(list.size())); + } + } + + return iinventory; + } + + private static boolean canCombine(ItemStack stack1, ItemStack stack2) + { + if (stack1.getItem() != stack2.getItem()) + { + return false; + } + else if (stack1.getMetadata() != stack2.getMetadata()) + { + return false; + } + else if (stack1.getCount() > stack1.getMaxStackSize()) + { + return false; + } + else + { + return ItemStack.areItemStackTagsEqual(stack1, stack2); + } + } + + /** + * Gets the world X position for this hopper entity. + */ + public double getXPos() + { + return (double)this.pos.getX() + 0.5D; + } + + /** + * Gets the world Y position for this hopper entity. + */ + public double getYPos() + { + return (double)this.pos.getY() + 0.5D; + } + + /** + * Gets the world Z position for this hopper entity. + */ + public double getZPos() + { + return (double)this.pos.getZ() + 0.5D; + } + + public void setTransferCooldown(int ticks) + { + this.transferCooldown = ticks; + } + + private boolean isOnTransferCooldown() + { + return this.transferCooldown > 0; + } + + public boolean mayTransfer() + { + return this.transferCooldown > 8; + } + + public String getGuiID() + { + return "minecraft:hopper"; + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + this.fillWithLoot(playerIn); + return new ContainerHopper(playerInventory, this, playerIn); + } + + protected NonNullList getItems() + { + return this.inventory; + } + + public long getLastUpdateTime() { return tickedGameTime; } // Forge +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityLockable.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityLockable.java new file mode 100644 index 0000000..71de7ad --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityLockable.java @@ -0,0 +1,77 @@ +package net.minecraft.tileentity; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.ILockableContainer; +import net.minecraft.world.LockCode; + +public abstract class TileEntityLockable extends TileEntity implements ILockableContainer +{ + private LockCode code = LockCode.EMPTY_CODE; + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.code = LockCode.fromNBT(compound); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + if (this.code != null) + { + this.code.toNBT(compound); + } + + return compound; + } + + public boolean isLocked() + { + return this.code != null && !this.code.isEmpty(); + } + + public LockCode getLockCode() + { + return this.code; + } + + public void setLockCode(LockCode code) + { + this.code = code; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return (ITextComponent)(this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName(), new Object[0])); + } + + private net.minecraftforge.items.IItemHandler itemHandler; + + protected net.minecraftforge.items.IItemHandler createUnSidedHandler() + { + return new net.minecraftforge.items.wrapper.InvWrapper(this); + } + + @SuppressWarnings("unchecked") + @Override + @javax.annotation.Nullable + public T getCapability(net.minecraftforge.common.capabilities.Capability capability, @javax.annotation.Nullable net.minecraft.util.EnumFacing facing) + { + if (capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + return (T) (itemHandler == null ? (itemHandler = createUnSidedHandler()) : itemHandler); + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, @javax.annotation.Nullable net.minecraft.util.EnumFacing facing) + { + return capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityLockableLoot.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityLockableLoot.java new file mode 100644 index 0000000..abd01ef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityLockableLoot.java @@ -0,0 +1,210 @@ +package net.minecraft.tileentity; + +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.ILootContainer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTable; + +public abstract class TileEntityLockableLoot extends TileEntityLockable implements ILootContainer +{ + protected ResourceLocation lootTable; + protected long lootTableSeed; + protected String customName; + + protected boolean checkLootAndRead(NBTTagCompound compound) + { + if (compound.hasKey("LootTable", 8)) + { + this.lootTable = new ResourceLocation(compound.getString("LootTable")); + this.lootTableSeed = compound.getLong("LootTableSeed"); + return true; + } + else + { + return false; + } + } + + protected boolean checkLootAndWrite(NBTTagCompound compound) + { + if (this.lootTable != null) + { + compound.setString("LootTable", this.lootTable.toString()); + + if (this.lootTableSeed != 0L) + { + compound.setLong("LootTableSeed", this.lootTableSeed); + } + + return true; + } + else + { + return false; + } + } + + public void fillWithLoot(@Nullable EntityPlayer player) + { + if (this.lootTable != null) + { + LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); + this.lootTable = null; + Random random; + + if (this.lootTableSeed == 0L) + { + random = new Random(); + } + else + { + random = new Random(this.lootTableSeed); + } + + LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer)this.world); + + if (player != null) + { + lootcontext$builder.withLuck(player.getLuck()).withPlayer(player); // Forge: add player to LootContext + } + + loottable.fillInventory(this, random, lootcontext$builder.build()); + } + } + + public ResourceLocation getLootTable() + { + return this.lootTable; + } + + public void setLootTable(ResourceLocation p_189404_1_, long p_189404_2_) + { + this.lootTable = p_189404_1_; + this.lootTableSeed = p_189404_2_; + } + + /** + * Returns true if this thing is named + */ + public boolean hasCustomName() + { + return this.customName != null && !this.customName.isEmpty(); + } + + public void setCustomName(String p_190575_1_) + { + this.customName = p_190575_1_; + } + + /** + * Returns the stack in the given slot. + */ + public ItemStack getStackInSlot(int index) + { + this.fillWithLoot((EntityPlayer)null); + return (ItemStack)this.getItems().get(index); + } + + /** + * Removes up to a specified number of items from an inventory slot and returns them in a new stack. + */ + public ItemStack decrStackSize(int index, int count) + { + this.fillWithLoot((EntityPlayer)null); + ItemStack itemstack = ItemStackHelper.getAndSplit(this.getItems(), index, count); + + if (!itemstack.isEmpty()) + { + this.markDirty(); + } + + return itemstack; + } + + /** + * Removes a stack from the given slot and returns it. + */ + public ItemStack removeStackFromSlot(int index) + { + this.fillWithLoot((EntityPlayer)null); + return ItemStackHelper.getAndRemove(this.getItems(), index); + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int index, @Nullable ItemStack stack) + { + this.fillWithLoot((EntityPlayer)null); + this.getItems().set(index, stack); + + if (stack.getCount() > this.getInventoryStackLimit()) + { + stack.setCount(this.getInventoryStackLimit()); + } + + this.markDirty(); + } + + /** + * Don't rename this method to canInteractWith due to conflicts with Container + */ + public boolean isUsableByPlayer(EntityPlayer player) + { + if (this.world.getTileEntity(this.pos) != this) + { + return false; + } + else + { + return player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D; + } + } + + public void openInventory(EntityPlayer player) + { + } + + public void closeInventory(EntityPlayer player) + { + } + + /** + * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot. For + * guis use Slot.isItemValid + */ + public boolean isItemValidForSlot(int index, ItemStack stack) + { + return true; + } + + public int getField(int id) + { + return 0; + } + + public void setField(int id, int value) + { + } + + public int getFieldCount() + { + return 0; + } + + public void clear() + { + this.fillWithLoot((EntityPlayer)null); + this.getItems().clear(); + } + + protected abstract NonNullList getItems(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityMobSpawner.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityMobSpawner.java new file mode 100644 index 0000000..5198cb5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityMobSpawner.java @@ -0,0 +1,122 @@ +package net.minecraft.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.ITickable; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.WeightedSpawnerEntity; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class TileEntityMobSpawner extends TileEntity implements ITickable +{ + private final MobSpawnerBaseLogic spawnerLogic = new MobSpawnerBaseLogic() + { + public void broadcastEvent(int id) + { + TileEntityMobSpawner.this.world.addBlockEvent(TileEntityMobSpawner.this.pos, Blocks.MOB_SPAWNER, id, 0); + } + public World getSpawnerWorld() + { + return TileEntityMobSpawner.this.world; + } + public BlockPos getSpawnerPosition() + { + return TileEntityMobSpawner.this.pos; + } + public void setNextSpawnData(WeightedSpawnerEntity p_184993_1_) + { + super.setNextSpawnData(p_184993_1_); + + if (this.getSpawnerWorld() != null) + { + IBlockState iblockstate = this.getSpawnerWorld().getBlockState(this.getSpawnerPosition()); + this.getSpawnerWorld().notifyBlockUpdate(TileEntityMobSpawner.this.pos, iblockstate, iblockstate, 4); + } + } + }; + + public static void registerFixesMobSpawner(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new IDataWalker() + { + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if (TileEntity.getKey(TileEntityMobSpawner.class).equals(new ResourceLocation(compound.getString("id")))) + { + if (compound.hasKey("SpawnPotentials", 9)) + { + NBTTagList nbttaglist = compound.getTagList("SpawnPotentials", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound = nbttaglist.getCompoundTagAt(i); + nbttagcompound.setTag("Entity", fixer.process(FixTypes.ENTITY, nbttagcompound.getCompoundTag("Entity"), versionIn)); + } + } + + compound.setTag("SpawnData", fixer.process(FixTypes.ENTITY, compound.getCompoundTag("SpawnData"), versionIn)); + } + + return compound; + } + }); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.spawnerLogic.readFromNBT(compound); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + this.spawnerLogic.writeToNBT(compound); + return compound; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.spawnerLogic.updateSpawner(); + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 1, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + NBTTagCompound nbttagcompound = this.writeToNBT(new NBTTagCompound()); + nbttagcompound.removeTag("SpawnPotentials"); + return nbttagcompound; + } + + public boolean receiveClientEvent(int id, int type) + { + return this.spawnerLogic.setDelayToMin(id) ? true : super.receiveClientEvent(id, type); + } + + public boolean onlyOpsCanSetNbt() + { + return true; + } + + public MobSpawnerBaseLogic getSpawnerBaseLogic() + { + return this.spawnerLogic; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityNote.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityNote.java new file mode 100644 index 0000000..2aa5945 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityNote.java @@ -0,0 +1,104 @@ +package net.minecraft.tileentity; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; + +public class TileEntityNote extends TileEntity +{ + /** Note to play */ + public byte note; + /** stores the latest redstone state */ + public boolean previousRedstoneState; + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setByte("note", this.note); + compound.setBoolean("powered", this.previousRedstoneState); + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.note = compound.getByte("note"); + this.note = (byte)MathHelper.clamp(this.note, 0, 24); + this.previousRedstoneState = compound.getBoolean("powered"); + } + + /** + * change pitch by -> (currentPitch + 1) % 25 + */ + public void changePitch() + { + byte old = note; + this.note = (byte)((this.note + 1) % 25); + if (!net.minecraftforge.common.ForgeHooks.onNoteChange(this, old)) return; + this.markDirty(); + } + + public void triggerNote(World worldIn, BlockPos posIn) + { + if (worldIn.getBlockState(posIn.up()).getMaterial() == Material.AIR) + { + IBlockState iblockstate = worldIn.getBlockState(posIn.down()); + Material material = iblockstate.getMaterial(); + int i = 0; + + if (material == Material.ROCK) + { + i = 1; + } + + if (material == Material.SAND) + { + i = 2; + } + + if (material == Material.GLASS) + { + i = 3; + } + + if (material == Material.WOOD) + { + i = 4; + } + + Block block = iblockstate.getBlock(); + + if (block == Blocks.CLAY) + { + i = 5; + } + + if (block == Blocks.GOLD_BLOCK) + { + i = 6; + } + + if (block == Blocks.WOOL) + { + i = 7; + } + + if (block == Blocks.PACKED_ICE) + { + i = 8; + } + + if (block == Blocks.BONE_BLOCK) + { + i = 9; + } + + worldIn.addBlockEvent(posIn, Blocks.NOTEBLOCK, i, this.note); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityPiston.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityPiston.java new file mode 100644 index 0000000..e1f2ffb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityPiston.java @@ -0,0 +1,431 @@ +package net.minecraft.tileentity; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.BlockPistonExtension; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityPiston extends TileEntity implements ITickable +{ + private IBlockState pistonState; + private EnumFacing pistonFacing; + /** if this piston is extending or not */ + private boolean extending; + private boolean shouldHeadBeRendered; + private static final ThreadLocal MOVING_ENTITY = new ThreadLocal() + { + protected EnumFacing initialValue() + { + return null; + } + }; + private float progress; + /** the progress in (de)extending */ + private float lastProgress; + + public TileEntityPiston() + { + } + + public TileEntityPiston(IBlockState pistonStateIn, EnumFacing pistonFacingIn, boolean extendingIn, boolean shouldHeadBeRenderedIn) + { + this.pistonState = pistonStateIn; + this.pistonFacing = pistonFacingIn; + this.extending = extendingIn; + this.shouldHeadBeRendered = shouldHeadBeRenderedIn; + } + + public IBlockState getPistonState() + { + return this.pistonState; + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public int getBlockMetadata() + { + return 0; + } + + /** + * Returns true if a piston is extending + */ + public boolean isExtending() + { + return this.extending; + } + + public EnumFacing getFacing() + { + return this.pistonFacing; + } + + public boolean shouldPistonHeadBeRendered() + { + return this.shouldHeadBeRendered; + } + + /** + * Get interpolated progress value (between lastProgress and progress) given the fractional time between ticks as an + * argument + */ + @SideOnly(Side.CLIENT) + public float getProgress(float ticks) + { + if (ticks > 1.0F) + { + ticks = 1.0F; + } + + return this.lastProgress + (this.progress - this.lastProgress) * ticks; + } + + @SideOnly(Side.CLIENT) + public float getOffsetX(float ticks) + { + return (float)this.pistonFacing.getFrontOffsetX() * this.getExtendedProgress(this.getProgress(ticks)); + } + + @SideOnly(Side.CLIENT) + public float getOffsetY(float ticks) + { + return (float)this.pistonFacing.getFrontOffsetY() * this.getExtendedProgress(this.getProgress(ticks)); + } + + @SideOnly(Side.CLIENT) + public float getOffsetZ(float ticks) + { + return (float)this.pistonFacing.getFrontOffsetZ() * this.getExtendedProgress(this.getProgress(ticks)); + } + + private float getExtendedProgress(float p_184320_1_) + { + return this.extending ? p_184320_1_ - 1.0F : 1.0F - p_184320_1_; + } + + public AxisAlignedBB getAABB(IBlockAccess p_184321_1_, BlockPos p_184321_2_) + { + return this.getAABB(p_184321_1_, p_184321_2_, this.progress).union(this.getAABB(p_184321_1_, p_184321_2_, this.lastProgress)); + } + + public AxisAlignedBB getAABB(IBlockAccess p_184319_1_, BlockPos p_184319_2_, float p_184319_3_) + { + p_184319_3_ = this.getExtendedProgress(p_184319_3_); + IBlockState iblockstate = this.getCollisionRelatedBlockState(); + return iblockstate.getBoundingBox(p_184319_1_, p_184319_2_).offset((double)(p_184319_3_ * (float)this.pistonFacing.getFrontOffsetX()), (double)(p_184319_3_ * (float)this.pistonFacing.getFrontOffsetY()), (double)(p_184319_3_ * (float)this.pistonFacing.getFrontOffsetZ())); + } + + private IBlockState getCollisionRelatedBlockState() + { + return !this.isExtending() && this.shouldPistonHeadBeRendered() ? Blocks.PISTON_HEAD.getDefaultState().withProperty(BlockPistonExtension.TYPE, this.pistonState.getBlock() == Blocks.STICKY_PISTON ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT).withProperty(BlockPistonExtension.FACING, this.pistonState.getValue(BlockPistonBase.FACING)) : this.pistonState; + } + + private void moveCollidedEntities(float p_184322_1_) + { + EnumFacing enumfacing = this.extending ? this.pistonFacing : this.pistonFacing.getOpposite(); + double d0 = (double)(p_184322_1_ - this.progress); + List list = Lists.newArrayList(); + this.getCollisionRelatedBlockState().addCollisionBoxToList(this.world, BlockPos.ORIGIN, new AxisAlignedBB(BlockPos.ORIGIN), list, (Entity)null, true); + + if (!list.isEmpty()) + { + AxisAlignedBB axisalignedbb = this.moveByPositionAndProgress(this.getMinMaxPiecesAABB(list)); + List list1 = this.world.getEntitiesWithinAABBExcludingEntity((Entity)null, this.getMovementArea(axisalignedbb, enumfacing, d0).union(axisalignedbb)); + + if (!list1.isEmpty()) + { + boolean flag = this.pistonState.getBlock().isStickyBlock(this.pistonState); + + for (int i = 0; i < list1.size(); ++i) + { + Entity entity = list1.get(i); + + if (entity.getPushReaction() != EnumPushReaction.IGNORE) + { + if (flag) + { + switch (enumfacing.getAxis()) + { + case X: + entity.motionX = (double)enumfacing.getFrontOffsetX(); + break; + case Y: + entity.motionY = (double)enumfacing.getFrontOffsetY(); + break; + case Z: + entity.motionZ = (double)enumfacing.getFrontOffsetZ(); + } + } + + double d1 = 0.0D; + + for (int j = 0; j < list.size(); ++j) + { + AxisAlignedBB axisalignedbb1 = this.getMovementArea(this.moveByPositionAndProgress(list.get(j)), enumfacing, d0); + AxisAlignedBB axisalignedbb2 = entity.getEntityBoundingBox(); + + if (axisalignedbb1.intersects(axisalignedbb2)) + { + d1 = Math.max(d1, this.getMovement(axisalignedbb1, enumfacing, axisalignedbb2)); + + if (d1 >= d0) + { + break; + } + } + } + + if (d1 > 0.0D) + { + d1 = Math.min(d1, d0) + 0.01D; + MOVING_ENTITY.set(enumfacing); + entity.move(MoverType.PISTON, d1 * (double)enumfacing.getFrontOffsetX(), d1 * (double)enumfacing.getFrontOffsetY(), d1 * (double)enumfacing.getFrontOffsetZ()); + MOVING_ENTITY.set(null); + + if (!this.extending && this.shouldHeadBeRendered) + { + this.fixEntityWithinPistonBase(entity, enumfacing, d0); + } + } + } + } + } + } + } + + private AxisAlignedBB getMinMaxPiecesAABB(List p_191515_1_) + { + double d0 = 0.0D; + double d1 = 0.0D; + double d2 = 0.0D; + double d3 = 1.0D; + double d4 = 1.0D; + double d5 = 1.0D; + + for (AxisAlignedBB axisalignedbb : p_191515_1_) + { + d0 = Math.min(axisalignedbb.minX, d0); + d1 = Math.min(axisalignedbb.minY, d1); + d2 = Math.min(axisalignedbb.minZ, d2); + d3 = Math.max(axisalignedbb.maxX, d3); + d4 = Math.max(axisalignedbb.maxY, d4); + d5 = Math.max(axisalignedbb.maxZ, d5); + } + + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + private double getMovement(AxisAlignedBB p_190612_1_, EnumFacing facing, AxisAlignedBB p_190612_3_) + { + switch (facing.getAxis()) + { + case X: + return getDeltaX(p_190612_1_, facing, p_190612_3_); + case Y: + default: + return getDeltaY(p_190612_1_, facing, p_190612_3_); + case Z: + return getDeltaZ(p_190612_1_, facing, p_190612_3_); + } + } + + private AxisAlignedBB moveByPositionAndProgress(AxisAlignedBB p_190607_1_) + { + double d0 = (double)this.getExtendedProgress(this.progress); + return p_190607_1_.offset((double)this.pos.getX() + d0 * (double)this.pistonFacing.getFrontOffsetX(), (double)this.pos.getY() + d0 * (double)this.pistonFacing.getFrontOffsetY(), (double)this.pos.getZ() + d0 * (double)this.pistonFacing.getFrontOffsetZ()); + } + + private AxisAlignedBB getMovementArea(AxisAlignedBB p_190610_1_, EnumFacing p_190610_2_, double p_190610_3_) + { + double d0 = p_190610_3_ * (double)p_190610_2_.getAxisDirection().getOffset(); + double d1 = Math.min(d0, 0.0D); + double d2 = Math.max(d0, 0.0D); + + switch (p_190610_2_) + { + case WEST: + return new AxisAlignedBB(p_190610_1_.minX + d1, p_190610_1_.minY, p_190610_1_.minZ, p_190610_1_.minX + d2, p_190610_1_.maxY, p_190610_1_.maxZ); + case EAST: + return new AxisAlignedBB(p_190610_1_.maxX + d1, p_190610_1_.minY, p_190610_1_.minZ, p_190610_1_.maxX + d2, p_190610_1_.maxY, p_190610_1_.maxZ); + case DOWN: + return new AxisAlignedBB(p_190610_1_.minX, p_190610_1_.minY + d1, p_190610_1_.minZ, p_190610_1_.maxX, p_190610_1_.minY + d2, p_190610_1_.maxZ); + case UP: + default: + return new AxisAlignedBB(p_190610_1_.minX, p_190610_1_.maxY + d1, p_190610_1_.minZ, p_190610_1_.maxX, p_190610_1_.maxY + d2, p_190610_1_.maxZ); + case NORTH: + return new AxisAlignedBB(p_190610_1_.minX, p_190610_1_.minY, p_190610_1_.minZ + d1, p_190610_1_.maxX, p_190610_1_.maxY, p_190610_1_.minZ + d2); + case SOUTH: + return new AxisAlignedBB(p_190610_1_.minX, p_190610_1_.minY, p_190610_1_.maxZ + d1, p_190610_1_.maxX, p_190610_1_.maxY, p_190610_1_.maxZ + d2); + } + } + + private void fixEntityWithinPistonBase(Entity p_190605_1_, EnumFacing p_190605_2_, double p_190605_3_) + { + AxisAlignedBB axisalignedbb = p_190605_1_.getEntityBoundingBox(); + AxisAlignedBB axisalignedbb1 = Block.FULL_BLOCK_AABB.offset(this.pos); + + if (axisalignedbb.intersects(axisalignedbb1)) + { + EnumFacing enumfacing = p_190605_2_.getOpposite(); + double d0 = this.getMovement(axisalignedbb1, enumfacing, axisalignedbb) + 0.01D; + double d1 = this.getMovement(axisalignedbb1, enumfacing, axisalignedbb.intersect(axisalignedbb1)) + 0.01D; + + if (Math.abs(d0 - d1) < 0.01D) + { + d0 = Math.min(d0, p_190605_3_) + 0.01D; + MOVING_ENTITY.set(p_190605_2_); + p_190605_1_.move(MoverType.PISTON, d0 * (double)enumfacing.getFrontOffsetX(), d0 * (double)enumfacing.getFrontOffsetY(), d0 * (double)enumfacing.getFrontOffsetZ()); + MOVING_ENTITY.set(null); + } + } + } + + private static double getDeltaX(AxisAlignedBB p_190611_0_, EnumFacing facing, AxisAlignedBB p_190611_2_) + { + return facing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE ? p_190611_0_.maxX - p_190611_2_.minX : p_190611_2_.maxX - p_190611_0_.minX; + } + + private static double getDeltaY(AxisAlignedBB p_190608_0_, EnumFacing facing, AxisAlignedBB p_190608_2_) + { + return facing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE ? p_190608_0_.maxY - p_190608_2_.minY : p_190608_2_.maxY - p_190608_0_.minY; + } + + private static double getDeltaZ(AxisAlignedBB p_190604_0_, EnumFacing facing, AxisAlignedBB p_190604_2_) + { + return facing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE ? p_190604_0_.maxZ - p_190604_2_.minZ : p_190604_2_.maxZ - p_190604_0_.minZ; + } + + /** + * removes a piston's tile entity (and if the piston is moving, stops it) + */ + public void clearPistonTileEntity() + { + if (this.lastProgress < 1.0F && this.world != null) + { + this.progress = 1.0F; + this.lastProgress = this.progress; + this.world.removeTileEntity(this.pos); + this.invalidate(); + + if (this.world.getBlockState(this.pos).getBlock() == Blocks.PISTON_EXTENSION) + { + this.world.setBlockState(this.pos, this.pistonState, 3); + this.world.neighborChanged(this.pos, this.pistonState.getBlock(), this.pos); + } + } + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.lastProgress = this.progress; + + if (this.lastProgress >= 1.0F) + { + this.world.removeTileEntity(this.pos); + this.invalidate(); + + if (this.world.getBlockState(this.pos).getBlock() == Blocks.PISTON_EXTENSION) + { + this.world.setBlockState(this.pos, this.pistonState, 3); + this.world.neighborChanged(this.pos, this.pistonState.getBlock(), this.pos); + } + } + else + { + float f = this.progress + 0.5F; + this.moveCollidedEntities(f); + this.progress = f; + + if (this.progress >= 1.0F) + { + this.progress = 1.0F; + } + } + } + + public static void registerFixesPiston(DataFixer fixer) + { + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.pistonState = Block.getBlockById(compound.getInteger("blockId")).getStateFromMeta(compound.getInteger("blockData")); + this.pistonFacing = EnumFacing.getFront(compound.getInteger("facing")); + this.progress = compound.getFloat("progress"); + this.lastProgress = this.progress; + this.extending = compound.getBoolean("extending"); + this.shouldHeadBeRendered = compound.getBoolean("source"); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setInteger("blockId", Block.getIdFromBlock(this.pistonState.getBlock())); + compound.setInteger("blockData", this.pistonState.getBlock().getMetaFromState(this.pistonState)); + compound.setInteger("facing", this.pistonFacing.getIndex()); + compound.setFloat("progress", this.lastProgress); + compound.setBoolean("extending", this.extending); + compound.setBoolean("source", this.shouldHeadBeRendered); + return compound; + } + + public void addCollissionAABBs(World p_190609_1_, BlockPos p_190609_2_, AxisAlignedBB p_190609_3_, List p_190609_4_, @Nullable Entity p_190609_5_) + { + if (!this.extending && this.shouldHeadBeRendered) + { + this.pistonState.withProperty(BlockPistonBase.EXTENDED, Boolean.valueOf(true)).addCollisionBoxToList(p_190609_1_, p_190609_2_, p_190609_3_, p_190609_4_, p_190609_5_, false); + } + + EnumFacing enumfacing = MOVING_ENTITY.get(); + + if ((double)this.progress >= 1.0D || enumfacing != (this.extending ? this.pistonFacing : this.pistonFacing.getOpposite())) + { + int i = p_190609_4_.size(); + IBlockState iblockstate; + + if (this.shouldPistonHeadBeRendered()) + { + iblockstate = Blocks.PISTON_HEAD.getDefaultState().withProperty(BlockPistonExtension.FACING, this.pistonFacing).withProperty(BlockPistonExtension.SHORT, Boolean.valueOf(this.extending != 1.0F - this.progress < 0.25F)); + } + else + { + iblockstate = this.pistonState; + } + + float f = this.getExtendedProgress(this.progress); + double d0 = (double)((float)this.pistonFacing.getFrontOffsetX() * f); + double d1 = (double)((float)this.pistonFacing.getFrontOffsetY() * f); + double d2 = (double)((float)this.pistonFacing.getFrontOffsetZ() * f); + iblockstate.addCollisionBoxToList(p_190609_1_, p_190609_2_, p_190609_3_.offset(-d0, -d1, -d2), p_190609_4_, p_190609_5_, true); + + for (int j = i; j < p_190609_4_.size(); ++j) + { + p_190609_4_.set(j, ((AxisAlignedBB)p_190609_4_.get(j)).offset(d0, d1, d2)); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityShulkerBox.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityShulkerBox.java new file mode 100644 index 0000000..67081ef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityShulkerBox.java @@ -0,0 +1,448 @@ +package net.minecraft.tileentity; + +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockShulkerBox; +import net.minecraft.block.material.EnumPushReaction; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerShulkerBox; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.ItemStackHelper; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.NonNullList; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.walkers.ItemStackDataLists; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityShulkerBox extends TileEntityLockableLoot implements ITickable, ISidedInventory +{ + private static final int[] SLOTS = new int[27]; + private NonNullList items; + private boolean hasBeenCleared; + private int openCount; + private TileEntityShulkerBox.AnimationStatus animationStatus; + private float progress; + private float progressOld; + private EnumDyeColor color; + private boolean destroyedByCreativePlayer; + + public TileEntityShulkerBox() + { + this((EnumDyeColor)null); + } + + public TileEntityShulkerBox(@Nullable EnumDyeColor colorIn) + { + this.items = NonNullList.withSize(27, ItemStack.EMPTY); + this.animationStatus = TileEntityShulkerBox.AnimationStatus.CLOSED; + this.color = colorIn; + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + this.updateAnimation(); + + if (this.animationStatus == TileEntityShulkerBox.AnimationStatus.OPENING || this.animationStatus == TileEntityShulkerBox.AnimationStatus.CLOSING) + { + this.moveCollidedEntities(); + } + } + + protected void updateAnimation() + { + this.progressOld = this.progress; + + switch (this.animationStatus) + { + case CLOSED: + this.progress = 0.0F; + break; + case OPENING: + this.progress += 0.1F; + + if (this.progress >= 1.0F) + { + this.moveCollidedEntities(); + this.animationStatus = TileEntityShulkerBox.AnimationStatus.OPENED; + this.progress = 1.0F; + } + + break; + case CLOSING: + this.progress -= 0.1F; + + if (this.progress <= 0.0F) + { + this.animationStatus = TileEntityShulkerBox.AnimationStatus.CLOSED; + this.progress = 0.0F; + } + + break; + case OPENED: + this.progress = 1.0F; + } + } + + public TileEntityShulkerBox.AnimationStatus getAnimationStatus() + { + return this.animationStatus; + } + + public AxisAlignedBB getBoundingBox(IBlockState p_190584_1_) + { + return this.getBoundingBox((EnumFacing)p_190584_1_.getValue(BlockShulkerBox.FACING)); + } + + public AxisAlignedBB getBoundingBox(EnumFacing p_190587_1_) + { + return Block.FULL_BLOCK_AABB.expand((double)(0.5F * this.getProgress(1.0F) * (float)p_190587_1_.getFrontOffsetX()), (double)(0.5F * this.getProgress(1.0F) * (float)p_190587_1_.getFrontOffsetY()), (double)(0.5F * this.getProgress(1.0F) * (float)p_190587_1_.getFrontOffsetZ())); + } + + private AxisAlignedBB getTopBoundingBox(EnumFacing p_190588_1_) + { + EnumFacing enumfacing = p_190588_1_.getOpposite(); + return this.getBoundingBox(p_190588_1_).contract((double)enumfacing.getFrontOffsetX(), (double)enumfacing.getFrontOffsetY(), (double)enumfacing.getFrontOffsetZ()); + } + + private void moveCollidedEntities() + { + IBlockState iblockstate = this.world.getBlockState(this.getPos()); + + if (iblockstate.getBlock() instanceof BlockShulkerBox) + { + EnumFacing enumfacing = (EnumFacing)iblockstate.getValue(BlockShulkerBox.FACING); + AxisAlignedBB axisalignedbb = this.getTopBoundingBox(enumfacing).offset(this.pos); + List list = this.world.getEntitiesWithinAABBExcludingEntity((Entity)null, axisalignedbb); + + if (!list.isEmpty()) + { + for (int i = 0; i < list.size(); ++i) + { + Entity entity = list.get(i); + + if (entity.getPushReaction() != EnumPushReaction.IGNORE) + { + double d0 = 0.0D; + double d1 = 0.0D; + double d2 = 0.0D; + AxisAlignedBB axisalignedbb1 = entity.getEntityBoundingBox(); + + switch (enumfacing.getAxis()) + { + case X: + + if (enumfacing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE) + { + d0 = axisalignedbb.maxX - axisalignedbb1.minX; + } + else + { + d0 = axisalignedbb1.maxX - axisalignedbb.minX; + } + + d0 = d0 + 0.01D; + break; + case Y: + + if (enumfacing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE) + { + d1 = axisalignedbb.maxY - axisalignedbb1.minY; + } + else + { + d1 = axisalignedbb1.maxY - axisalignedbb.minY; + } + + d1 = d1 + 0.01D; + break; + case Z: + + if (enumfacing.getAxisDirection() == EnumFacing.AxisDirection.POSITIVE) + { + d2 = axisalignedbb.maxZ - axisalignedbb1.minZ; + } + else + { + d2 = axisalignedbb1.maxZ - axisalignedbb.minZ; + } + + d2 = d2 + 0.01D; + } + + entity.move(MoverType.SHULKER_BOX, d0 * (double)enumfacing.getFrontOffsetX(), d1 * (double)enumfacing.getFrontOffsetY(), d2 * (double)enumfacing.getFrontOffsetZ()); + } + } + } + } + } + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.items.size(); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. + */ + public int getInventoryStackLimit() + { + return 64; + } + + public boolean receiveClientEvent(int id, int type) + { + if (id == 1) + { + this.openCount = type; + + if (type == 0) + { + this.animationStatus = TileEntityShulkerBox.AnimationStatus.CLOSING; + } + + if (type == 1) + { + this.animationStatus = TileEntityShulkerBox.AnimationStatus.OPENING; + } + + return true; + } + else + { + return super.receiveClientEvent(id, type); + } + } + + public void openInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + if (this.openCount < 0) + { + this.openCount = 0; + } + + ++this.openCount; + this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.openCount); + + if (this.openCount == 1) + { + this.world.playSound((EntityPlayer)null, this.pos, SoundEvents.BLOCK_SHULKER_BOX_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + } + } + + public void closeInventory(EntityPlayer player) + { + if (!player.isSpectator()) + { + --this.openCount; + this.world.addBlockEvent(this.pos, this.getBlockType(), 1, this.openCount); + + if (this.openCount <= 0) + { + this.world.playSound((EntityPlayer)null, this.pos, SoundEvents.BLOCK_SHULKER_BOX_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.rand.nextFloat() * 0.1F + 0.9F); + } + } + } + + public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn) + { + return new ContainerShulkerBox(playerInventory, this, playerIn); + } + + public String getGuiID() + { + return "minecraft:shulker_box"; + } + + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return this.hasCustomName() ? this.customName : "container.shulkerBox"; + } + + public static void registerFixesShulkerBox(DataFixer fixer) + { + fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityShulkerBox.class, new String[] {"Items"})); + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.loadFromNbt(compound); + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + return this.saveToNbt(compound); + } + + public void loadFromNbt(NBTTagCompound compound) + { + this.items = NonNullList.withSize(this.getSizeInventory(), ItemStack.EMPTY); + + if (!this.checkLootAndRead(compound) && compound.hasKey("Items", 9)) + { + ItemStackHelper.loadAllItems(compound, this.items); + } + + if (compound.hasKey("CustomName", 8)) + { + this.customName = compound.getString("CustomName"); + } + } + + public NBTTagCompound saveToNbt(NBTTagCompound compound) + { + if (!this.checkLootAndWrite(compound)) + { + ItemStackHelper.saveAllItems(compound, this.items, false); + } + + if (this.hasCustomName()) + { + compound.setString("CustomName", this.customName); + } + + if (!compound.hasKey("Lock") && this.isLocked()) + { + this.getLockCode().toNBT(compound); + } + + return compound; + } + + protected NonNullList getItems() + { + return this.items; + } + + public boolean isEmpty() + { + for (ItemStack itemstack : this.items) + { + if (!itemstack.isEmpty()) + { + return false; + } + } + + return true; + } + + public int[] getSlotsForFace(EnumFacing side) + { + return SLOTS; + } + + /** + * Returns true if automation can insert the given item in the given slot from the given side. + */ + public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction) + { + return !(Block.getBlockFromItem(itemStackIn.getItem()) instanceof BlockShulkerBox); + } + + /** + * Returns true if automation can extract the given item in the given slot from the given side. + */ + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction) + { + return true; + } + + public void clear() + { + this.hasBeenCleared = true; + super.clear(); + } + + public boolean isCleared() + { + return this.hasBeenCleared; + } + + public float getProgress(float p_190585_1_) + { + return this.progressOld + (this.progress - this.progressOld) * p_190585_1_; + } + + @SideOnly(Side.CLIENT) + public EnumDyeColor getColor() + { + if (this.color == null) + { + this.color = BlockShulkerBox.getColorFromBlock(this.getBlockType()); + } + + return this.color; + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 10, this.getUpdateTag()); + } + + public boolean isDestroyedByCreativePlayer() + { + return this.destroyedByCreativePlayer; + } + + public void setDestroyedByCreativePlayer(boolean p_190579_1_) + { + this.destroyedByCreativePlayer = p_190579_1_; + } + + public boolean shouldDrop() + { + return !this.isDestroyedByCreativePlayer() || !this.isEmpty() || this.hasCustomName() || this.lootTable != null; + } + + static + { + for (int i = 0; i < SLOTS.length; SLOTS[i] = i++) + { + ; + } + } + + public static enum AnimationStatus + { + CLOSED, + OPENING, + OPENED, + CLOSING; + } + + protected net.minecraftforge.items.IItemHandler createUnSidedHandler() + { + return new net.minecraftforge.items.wrapper.SidedInvWrapper(this, EnumFacing.UP); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntitySign.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntitySign.java new file mode 100644 index 0000000..4857212 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntitySign.java @@ -0,0 +1,277 @@ +package net.minecraft.tileentity; + +import javax.annotation.Nullable; +import net.minecraft.command.CommandException; +import net.minecraft.command.CommandResultStats; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentUtils; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntitySign extends TileEntity +{ + public final ITextComponent[] signText = new ITextComponent[] {new TextComponentString(""), new TextComponentString(""), new TextComponentString(""), new TextComponentString("")}; + /** + * The index of the line currently being edited. Only used on client side, but defined on both. Note this is only + * really used when the > < are going to be visible. + */ + public int lineBeingEdited = -1; + private boolean isEditable = true; + private EntityPlayer player; + private final CommandResultStats stats = new CommandResultStats(); + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + + for (int i = 0; i < 4; ++i) + { + String s = ITextComponent.Serializer.componentToJson(this.signText[i]); + compound.setString("Text" + (i + 1), s); + } + + this.stats.writeStatsToNBT(compound); + return compound; + } + + protected void setWorldCreate(World worldIn) + { + this.setWorld(worldIn); + } + + public void readFromNBT(NBTTagCompound compound) + { + this.isEditable = false; + super.readFromNBT(compound); + ICommandSender icommandsender = new ICommandSender() + { + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return "Sign"; + } + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return permLevel <= 2; //Forge: Fixes MC-75630 - Exploit with signs and command blocks + } + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, + * return the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return TileEntitySign.this.pos; + } + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, + * return 0.0D, 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return new Vec3d((double)TileEntitySign.this.pos.getX() + 0.5D, (double)TileEntitySign.this.pos.getY() + 0.5D, (double)TileEntitySign.this.pos.getZ() + 0.5D); + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, + * return the overworld + */ + public World getEntityWorld() + { + return TileEntitySign.this.world; + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return TileEntitySign.this.world.getMinecraftServer(); + } + }; + + for (int i = 0; i < 4; ++i) + { + String s = compound.getString("Text" + (i + 1)); + ITextComponent itextcomponent = ITextComponent.Serializer.jsonToComponent(s); + + try + { + this.signText[i] = TextComponentUtils.processComponent(icommandsender, itextcomponent, (Entity)null); + } + catch (CommandException var7) + { + this.signText[i] = itextcomponent; + } + } + + this.stats.readStatsFromNBT(compound); + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 9, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public boolean onlyOpsCanSetNbt() + { + return true; + } + + public boolean getIsEditable() + { + return this.isEditable; + } + + /** + * Sets the sign's isEditable flag to the specified parameter. + */ + @SideOnly(Side.CLIENT) + public void setEditable(boolean isEditableIn) + { + this.isEditable = isEditableIn; + + if (!isEditableIn) + { + this.player = null; + } + } + + public void setPlayer(EntityPlayer playerIn) + { + this.player = playerIn; + } + + public EntityPlayer getPlayer() + { + return this.player; + } + + public boolean executeCommand(final EntityPlayer playerIn) + { + ICommandSender icommandsender = new ICommandSender() + { + /** + * Get the name of this object. For players this returns their username + */ + public String getName() + { + return playerIn.getName(); + } + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + public ITextComponent getDisplayName() + { + return playerIn.getDisplayName(); + } + /** + * Send a chat message to the CommandSender + */ + public void sendMessage(ITextComponent component) + { + } + /** + * Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not + */ + public boolean canUseCommand(int permLevel, String commandName) + { + return permLevel <= 2; + } + /** + * Get the position in the world. {@code null} is not allowed! If you are not an entity in the world, + * return the coordinates 0, 0, 0 + */ + public BlockPos getPosition() + { + return TileEntitySign.this.pos; + } + /** + * Get the position vector. {@code null} is not allowed! If you are not an entity in the world, + * return 0.0D, 0.0D, 0.0D + */ + public Vec3d getPositionVector() + { + return new Vec3d((double)TileEntitySign.this.pos.getX() + 0.5D, (double)TileEntitySign.this.pos.getY() + 0.5D, (double)TileEntitySign.this.pos.getZ() + 0.5D); + } + /** + * Get the world, if available. {@code null} is not allowed! If you are not an entity in the world, + * return the overworld + */ + public World getEntityWorld() + { + return playerIn.getEntityWorld(); + } + /** + * Returns the entity associated with the command sender. MAY BE NULL! + */ + public Entity getCommandSenderEntity() + { + return playerIn; + } + /** + * Returns true if the command sender should be sent feedback about executed commands + */ + public boolean sendCommandFeedback() + { + return false; + } + public void setCommandStat(CommandResultStats.Type type, int amount) + { + if (TileEntitySign.this.world != null && !TileEntitySign.this.world.isRemote) + { + TileEntitySign.this.stats.setCommandStatForSender(TileEntitySign.this.world.getMinecraftServer(), this, type, amount); + } + } + /** + * Get the Minecraft server instance + */ + public MinecraftServer getServer() + { + return playerIn.getServer(); + } + }; + + for (ITextComponent itextcomponent : this.signText) + { + Style style = itextcomponent == null ? null : itextcomponent.getStyle(); + + if (style != null && style.getClickEvent() != null) + { + ClickEvent clickevent = style.getClickEvent(); + + if (clickevent.getAction() == ClickEvent.Action.RUN_COMMAND) + { + playerIn.getServer().getCommandManager().executeCommand(icommandsender, clickevent.getValue()); + } + } + } + + return true; + } + + public CommandResultStats getStats() + { + return this.stats; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntitySkull.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntitySkull.java new file mode 100644 index 0000000..0d6eb6a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntitySkull.java @@ -0,0 +1,214 @@ +package net.minecraft.tileentity; + +import com.google.common.collect.Iterables; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.authlib.properties.Property; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraft.block.BlockSkull; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.server.management.PlayerProfileCache; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.ITickable; +import net.minecraft.util.Mirror; +import net.minecraft.util.Rotation; +import net.minecraft.util.StringUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntitySkull extends TileEntity implements ITickable +{ + private int skullType; + private int skullRotation; + private GameProfile playerProfile; + private int dragonAnimatedTicks; + private boolean dragonAnimated; + private static PlayerProfileCache profileCache; + private static MinecraftSessionService sessionService; + + public static void setProfileCache(PlayerProfileCache profileCacheIn) + { + profileCache = profileCacheIn; + } + + public static void setSessionService(MinecraftSessionService sessionServiceIn) + { + sessionService = sessionServiceIn; + } + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setByte("SkullType", (byte)(this.skullType & 255)); + compound.setByte("Rot", (byte)(this.skullRotation & 255)); + + if (this.playerProfile != null) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + NBTUtil.writeGameProfile(nbttagcompound, this.playerProfile); + compound.setTag("Owner", nbttagcompound); + } + + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.skullType = compound.getByte("SkullType"); + this.skullRotation = compound.getByte("Rot"); + + if (this.skullType == 3) + { + if (compound.hasKey("Owner", 10)) + { + this.playerProfile = NBTUtil.readGameProfileFromNBT(compound.getCompoundTag("Owner")); + } + else if (compound.hasKey("ExtraType", 8)) + { + String s = compound.getString("ExtraType"); + + if (!StringUtils.isNullOrEmpty(s)) + { + this.playerProfile = new GameProfile((UUID)null, s); + this.updatePlayerProfile(); + } + } + } + } + + /** + * Like the old updateEntity(), except more generic. + */ + public void update() + { + if (this.skullType == 5) + { + if (this.world.isBlockPowered(this.pos)) + { + this.dragonAnimated = true; + ++this.dragonAnimatedTicks; + } + else + { + this.dragonAnimated = false; + } + } + } + + @SideOnly(Side.CLIENT) + public float getAnimationProgress(float p_184295_1_) + { + return this.dragonAnimated ? (float)this.dragonAnimatedTicks + p_184295_1_ : (float)this.dragonAnimatedTicks; + } + + @Nullable + public GameProfile getPlayerProfile() + { + return this.playerProfile; + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 4, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public void setType(int type) + { + this.skullType = type; + this.playerProfile = null; + } + + public void setPlayerProfile(@Nullable GameProfile playerProfile) + { + this.skullType = 3; + this.playerProfile = playerProfile; + this.updatePlayerProfile(); + } + + private void updatePlayerProfile() + { + this.playerProfile = updateGameprofile(this.playerProfile); + this.markDirty(); + } + + public static GameProfile updateGameprofile(GameProfile input) + { + if (input != null && !StringUtils.isNullOrEmpty(input.getName())) + { + if (input.isComplete() && input.getProperties().containsKey("textures")) + { + return input; + } + else if (profileCache != null && sessionService != null) + { + GameProfile gameprofile = profileCache.getGameProfileForUsername(input.getName()); + + if (gameprofile == null) + { + return input; + } + else + { + Property property = (Property)Iterables.getFirst(gameprofile.getProperties().get("textures"), (Object)null); + + if (property == null) + { + gameprofile = sessionService.fillProfileProperties(gameprofile, true); + } + + return gameprofile; + } + } + else + { + return input; + } + } + else + { + return input; + } + } + + public int getSkullType() + { + return this.skullType; + } + + @SideOnly(Side.CLIENT) + public int getSkullRotation() + { + return this.skullRotation; + } + + public void setSkullRotation(int rotation) + { + this.skullRotation = rotation; + } + + public void mirror(Mirror mirrorIn) + { + if (this.world != null && this.world.getBlockState(this.getPos()).getValue(BlockSkull.FACING) == EnumFacing.UP) + { + this.skullRotation = mirrorIn.mirrorRotation(this.skullRotation, 16); + } + } + + public void rotate(Rotation rotationIn) + { + if (this.world != null && this.world.getBlockState(this.getPos()).getValue(BlockSkull.FACING) == EnumFacing.UP) + { + this.skullRotation = rotationIn.rotate(this.skullRotation, 16); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityStructure.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityStructure.java new file mode 100644 index 0000000..217eb49 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityStructure.java @@ -0,0 +1,677 @@ +package net.minecraft.tileentity; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import io.netty.buffer.ByteBuf; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.block.BlockStructure; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ChatAllowedCharacters; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.Mirror; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Rotation; +import net.minecraft.util.StringUtils; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.WorldServer; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.template.PlacementSettings; +import net.minecraft.world.gen.structure.template.Template; +import net.minecraft.world.gen.structure.template.TemplateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TileEntityStructure extends TileEntity +{ + private String name = ""; + private String author = ""; + private String metadata = ""; + private BlockPos position = new BlockPos(0, 1, 0); + private BlockPos size = BlockPos.ORIGIN; + private Mirror mirror = Mirror.NONE; + private Rotation rotation = Rotation.NONE; + private TileEntityStructure.Mode mode = TileEntityStructure.Mode.DATA; + private boolean ignoreEntities = true; + private boolean powered; + private boolean showAir; + private boolean showBoundingBox = true; + private float integrity = 1.0F; + private long seed; + + public NBTTagCompound writeToNBT(NBTTagCompound compound) + { + super.writeToNBT(compound); + compound.setString("name", this.name); + compound.setString("author", this.author); + compound.setString("metadata", this.metadata); + compound.setInteger("posX", this.position.getX()); + compound.setInteger("posY", this.position.getY()); + compound.setInteger("posZ", this.position.getZ()); + compound.setInteger("sizeX", this.size.getX()); + compound.setInteger("sizeY", this.size.getY()); + compound.setInteger("sizeZ", this.size.getZ()); + compound.setString("rotation", this.rotation.toString()); + compound.setString("mirror", this.mirror.toString()); + compound.setString("mode", this.mode.toString()); + compound.setBoolean("ignoreEntities", this.ignoreEntities); + compound.setBoolean("powered", this.powered); + compound.setBoolean("showair", this.showAir); + compound.setBoolean("showboundingbox", this.showBoundingBox); + compound.setFloat("integrity", this.integrity); + compound.setLong("seed", this.seed); + return compound; + } + + public void readFromNBT(NBTTagCompound compound) + { + super.readFromNBT(compound); + this.setName(compound.getString("name")); + this.author = compound.getString("author"); + this.metadata = compound.getString("metadata"); + int i = MathHelper.clamp(compound.getInteger("posX"), -32, 32); + int j = MathHelper.clamp(compound.getInteger("posY"), -32, 32); + int k = MathHelper.clamp(compound.getInteger("posZ"), -32, 32); + this.position = new BlockPos(i, j, k); + int l = MathHelper.clamp(compound.getInteger("sizeX"), 0, 32); + int i1 = MathHelper.clamp(compound.getInteger("sizeY"), 0, 32); + int j1 = MathHelper.clamp(compound.getInteger("sizeZ"), 0, 32); + this.size = new BlockPos(l, i1, j1); + + try + { + this.rotation = Rotation.valueOf(compound.getString("rotation")); + } + catch (IllegalArgumentException var11) + { + this.rotation = Rotation.NONE; + } + + try + { + this.mirror = Mirror.valueOf(compound.getString("mirror")); + } + catch (IllegalArgumentException var10) + { + this.mirror = Mirror.NONE; + } + + try + { + this.mode = TileEntityStructure.Mode.valueOf(compound.getString("mode")); + } + catch (IllegalArgumentException var9) + { + this.mode = TileEntityStructure.Mode.DATA; + } + + this.ignoreEntities = compound.getBoolean("ignoreEntities"); + this.powered = compound.getBoolean("powered"); + this.showAir = compound.getBoolean("showair"); + this.showBoundingBox = compound.getBoolean("showboundingbox"); + + if (compound.hasKey("integrity")) + { + this.integrity = compound.getFloat("integrity"); + } + else + { + this.integrity = 1.0F; + } + + this.seed = compound.getLong("seed"); + this.updateBlockState(); + } + + private void updateBlockState() + { + if (this.world != null) + { + BlockPos blockpos = this.getPos(); + IBlockState iblockstate = this.world.getBlockState(blockpos); + + if (iblockstate.getBlock() == Blocks.STRUCTURE_BLOCK) + { + this.world.setBlockState(blockpos, iblockstate.withProperty(BlockStructure.MODE, this.mode), 2); + } + } + } + + @Nullable + public SPacketUpdateTileEntity getUpdatePacket() + { + return new SPacketUpdateTileEntity(this.pos, 7, this.getUpdateTag()); + } + + public NBTTagCompound getUpdateTag() + { + return this.writeToNBT(new NBTTagCompound()); + } + + public boolean usedBy(EntityPlayer player) + { + if (!player.canUseCommandBlock()) + { + return false; + } + else + { + if (player.getEntityWorld().isRemote) + { + player.openEditStructure(this); + } + + return true; + } + } + + public String getName() + { + return this.name; + } + + public void setName(String nameIn) + { + String s = nameIn; + + for (char c0 : ChatAllowedCharacters.ILLEGAL_STRUCTURE_CHARACTERS) + { + s = s.replace(c0, '_'); + } + + this.name = s; + } + + public void createdBy(EntityLivingBase p_189720_1_) + { + if (!StringUtils.isNullOrEmpty(p_189720_1_.getName())) + { + this.author = p_189720_1_.getName(); + } + } + + @SideOnly(Side.CLIENT) + public BlockPos getPosition() + { + return this.position; + } + + public void setPosition(BlockPos posIn) + { + this.position = posIn; + } + + @SideOnly(Side.CLIENT) + public BlockPos getStructureSize() + { + return this.size; + } + + public void setSize(BlockPos sizeIn) + { + this.size = sizeIn; + } + + @SideOnly(Side.CLIENT) + public Mirror getMirror() + { + return this.mirror; + } + + public void setMirror(Mirror mirrorIn) + { + this.mirror = mirrorIn; + } + + public void setRotation(Rotation rotationIn) + { + this.rotation = rotationIn; + } + + public void setMetadata(String metadataIn) + { + this.metadata = metadataIn; + } + + @SideOnly(Side.CLIENT) + public Rotation getRotation() + { + return this.rotation; + } + + @SideOnly(Side.CLIENT) + public String getMetadata() + { + return this.metadata; + } + + public TileEntityStructure.Mode getMode() + { + return this.mode; + } + + public void setMode(TileEntityStructure.Mode modeIn) + { + this.mode = modeIn; + IBlockState iblockstate = this.world.getBlockState(this.getPos()); + + if (iblockstate.getBlock() == Blocks.STRUCTURE_BLOCK) + { + this.world.setBlockState(this.getPos(), iblockstate.withProperty(BlockStructure.MODE, modeIn), 2); + } + } + + public void setIgnoresEntities(boolean ignoreEntitiesIn) + { + this.ignoreEntities = ignoreEntitiesIn; + } + + public void setIntegrity(float integrityIn) + { + this.integrity = integrityIn; + } + + public void setSeed(long seedIn) + { + this.seed = seedIn; + } + + @SideOnly(Side.CLIENT) + public void nextMode() + { + switch (this.getMode()) + { + case SAVE: + this.setMode(TileEntityStructure.Mode.LOAD); + break; + case LOAD: + this.setMode(TileEntityStructure.Mode.CORNER); + break; + case CORNER: + this.setMode(TileEntityStructure.Mode.DATA); + break; + case DATA: + this.setMode(TileEntityStructure.Mode.SAVE); + } + } + + @SideOnly(Side.CLIENT) + public boolean ignoresEntities() + { + return this.ignoreEntities; + } + + @SideOnly(Side.CLIENT) + public float getIntegrity() + { + return this.integrity; + } + + @SideOnly(Side.CLIENT) + public long getSeed() + { + return this.seed; + } + + public boolean detectSize() + { + if (this.mode != TileEntityStructure.Mode.SAVE) + { + return false; + } + else + { + BlockPos blockpos = this.getPos(); + int i = 80; + BlockPos blockpos1 = new BlockPos(blockpos.getX() - 80, 0, blockpos.getZ() - 80); + BlockPos blockpos2 = new BlockPos(blockpos.getX() + 80, 255, blockpos.getZ() + 80); + List list = this.getNearbyCornerBlocks(blockpos1, blockpos2); + List list1 = this.filterRelatedCornerBlocks(list); + + if (list1.size() < 1) + { + return false; + } + else + { + StructureBoundingBox structureboundingbox = this.calculateEnclosingBoundingBox(blockpos, list1); + + if (structureboundingbox.maxX - structureboundingbox.minX > 1 && structureboundingbox.maxY - structureboundingbox.minY > 1 && structureboundingbox.maxZ - structureboundingbox.minZ > 1) + { + this.position = new BlockPos(structureboundingbox.minX - blockpos.getX() + 1, structureboundingbox.minY - blockpos.getY() + 1, structureboundingbox.minZ - blockpos.getZ() + 1); + this.size = new BlockPos(structureboundingbox.maxX - structureboundingbox.minX - 1, structureboundingbox.maxY - structureboundingbox.minY - 1, structureboundingbox.maxZ - structureboundingbox.minZ - 1); + this.markDirty(); + IBlockState iblockstate = this.world.getBlockState(blockpos); + this.world.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 3); + return true; + } + else + { + return false; + } + } + } + } + + private List filterRelatedCornerBlocks(List p_184415_1_) + { + Iterable iterable = Iterables.filter(p_184415_1_, new Predicate() + { + public boolean apply(@Nullable TileEntityStructure p_apply_1_) + { + return p_apply_1_.mode == TileEntityStructure.Mode.CORNER && TileEntityStructure.this.name.equals(p_apply_1_.name); + } + }); + return Lists.newArrayList(iterable); + } + + private List getNearbyCornerBlocks(BlockPos p_184418_1_, BlockPos p_184418_2_) + { + List list = Lists.newArrayList(); + + for (BlockPos.MutableBlockPos blockpos$mutableblockpos : BlockPos.getAllInBoxMutable(p_184418_1_, p_184418_2_)) + { + IBlockState iblockstate = this.world.getBlockState(blockpos$mutableblockpos); + + if (iblockstate.getBlock() == Blocks.STRUCTURE_BLOCK) + { + TileEntity tileentity = this.world.getTileEntity(blockpos$mutableblockpos); + + if (tileentity != null && tileentity instanceof TileEntityStructure) + { + list.add((TileEntityStructure)tileentity); + } + } + } + + return list; + } + + private StructureBoundingBox calculateEnclosingBoundingBox(BlockPos p_184416_1_, List p_184416_2_) + { + StructureBoundingBox structureboundingbox; + + if (p_184416_2_.size() > 1) + { + BlockPos blockpos = ((TileEntityStructure)p_184416_2_.get(0)).getPos(); + structureboundingbox = new StructureBoundingBox(blockpos, blockpos); + } + else + { + structureboundingbox = new StructureBoundingBox(p_184416_1_, p_184416_1_); + } + + for (TileEntityStructure tileentitystructure : p_184416_2_) + { + BlockPos blockpos1 = tileentitystructure.getPos(); + + if (blockpos1.getX() < structureboundingbox.minX) + { + structureboundingbox.minX = blockpos1.getX(); + } + else if (blockpos1.getX() > structureboundingbox.maxX) + { + structureboundingbox.maxX = blockpos1.getX(); + } + + if (blockpos1.getY() < structureboundingbox.minY) + { + structureboundingbox.minY = blockpos1.getY(); + } + else if (blockpos1.getY() > structureboundingbox.maxY) + { + structureboundingbox.maxY = blockpos1.getY(); + } + + if (blockpos1.getZ() < structureboundingbox.minZ) + { + structureboundingbox.minZ = blockpos1.getZ(); + } + else if (blockpos1.getZ() > structureboundingbox.maxZ) + { + structureboundingbox.maxZ = blockpos1.getZ(); + } + } + + return structureboundingbox; + } + + @SideOnly(Side.CLIENT) + public void writeCoordinates(ByteBuf buf) + { + buf.writeInt(this.pos.getX()); + buf.writeInt(this.pos.getY()); + buf.writeInt(this.pos.getZ()); + } + + /** + * Saves the template, writing it to disk. + * + * @return true if the template was successfully saved. + */ + public boolean save() + { + return this.save(true); + } + + /** + * Saves the template, either updating the local version or writing it to disk. + * + * @return true if the template was successfully saved. + * + * @param writeToDisk If true, {@link TemplateManager#writeTemplate} will be called with the template, and its + * return value will dictate the return value of this method. If false, the template will be updated but not written + * to disk. + */ + public boolean save(boolean writeToDisk) + { + if (this.mode == TileEntityStructure.Mode.SAVE && !this.world.isRemote && !StringUtils.isNullOrEmpty(this.name)) + { + BlockPos blockpos = this.getPos().add(this.position); + WorldServer worldserver = (WorldServer)this.world; + MinecraftServer minecraftserver = this.world.getMinecraftServer(); + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + Template template = templatemanager.getTemplate(minecraftserver, new ResourceLocation(this.name)); + template.takeBlocksFromWorld(this.world, blockpos, this.size, !this.ignoreEntities, Blocks.STRUCTURE_VOID); + template.setAuthor(this.author); + return !writeToDisk || templatemanager.writeTemplate(minecraftserver, new ResourceLocation(this.name)); + } + else + { + return false; + } + } + + /** + * Loads the given template, both into this structure block and into the world, aborting if the size of the template + * does not match the size in this structure block. + * + * @return true if the template was successfully added to the world. + */ + public boolean load() + { + return this.load(true); + } + + /** + * Loads the given template, both into this structure block and into the world. + * + * @return true if the template was successfully added to the world. + * + * @param requireMatchingSize If true, and the size of the loaded template does not match the size in this structure + * block, the structure will not be loaded into the world and false will be returned. Regardless of the value of + * this parameter, the size in the structure block will be updated after calling this method. + */ + public boolean load(boolean requireMatchingSize) + { + if (this.mode == TileEntityStructure.Mode.LOAD && !this.world.isRemote && !StringUtils.isNullOrEmpty(this.name)) + { + BlockPos blockpos = this.getPos(); + BlockPos blockpos1 = blockpos.add(this.position); + WorldServer worldserver = (WorldServer)this.world; + MinecraftServer minecraftserver = this.world.getMinecraftServer(); + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + Template template = templatemanager.get(minecraftserver, new ResourceLocation(this.name)); + + if (template == null) + { + return false; + } + else + { + if (!StringUtils.isNullOrEmpty(template.getAuthor())) + { + this.author = template.getAuthor(); + } + + BlockPos blockpos2 = template.getSize(); + boolean flag = this.size.equals(blockpos2); + + if (!flag) + { + this.size = blockpos2; + this.markDirty(); + IBlockState iblockstate = this.world.getBlockState(blockpos); + this.world.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 3); + } + + if (requireMatchingSize && !flag) + { + return false; + } + else + { + PlacementSettings placementsettings = (new PlacementSettings()).setMirror(this.mirror).setRotation(this.rotation).setIgnoreEntities(this.ignoreEntities).setChunk((ChunkPos)null).setReplacedBlock((Block)null).setIgnoreStructureBlock(false); + + if (this.integrity < 1.0F) + { + placementsettings.setIntegrity(MathHelper.clamp(this.integrity, 0.0F, 1.0F)).setSeed(Long.valueOf(this.seed)); + } + + template.addBlocksToWorldChunk(this.world, blockpos1, placementsettings); + return true; + } + } + } + else + { + return false; + } + } + + public void unloadStructure() + { + WorldServer worldserver = (WorldServer)this.world; + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + templatemanager.remove(new ResourceLocation(this.name)); + } + + public boolean isStructureLoadable() + { + if (this.mode == TileEntityStructure.Mode.LOAD && !this.world.isRemote) + { + WorldServer worldserver = (WorldServer)this.world; + MinecraftServer minecraftserver = this.world.getMinecraftServer(); + TemplateManager templatemanager = worldserver.getStructureTemplateManager(); + return templatemanager.get(minecraftserver, new ResourceLocation(this.name)) != null; + } + else + { + return false; + } + } + + public boolean isPowered() + { + return this.powered; + } + + public void setPowered(boolean poweredIn) + { + this.powered = poweredIn; + } + + @SideOnly(Side.CLIENT) + public boolean showsAir() + { + return this.showAir; + } + + public void setShowAir(boolean showAirIn) + { + this.showAir = showAirIn; + } + + @SideOnly(Side.CLIENT) + public boolean showsBoundingBox() + { + return this.showBoundingBox; + } + + public void setShowBoundingBox(boolean showBoundingBoxIn) + { + this.showBoundingBox = showBoundingBoxIn; + } + + /** + * Get the formatted ChatComponent that will be used for the sender's username in chat + */ + @Nullable + public ITextComponent getDisplayName() + { + return new TextComponentTranslation("structure_block.hover." + this.mode.modeName, new Object[] {this.mode == TileEntityStructure.Mode.DATA ? this.metadata : this.name}); + } + + public static enum Mode implements IStringSerializable + { + SAVE("save", 0), + LOAD("load", 1), + CORNER("corner", 2), + DATA("data", 3); + + private static final TileEntityStructure.Mode[] MODES = new TileEntityStructure.Mode[values().length]; + private final String modeName; + private final int modeId; + + private Mode(String modeNameIn, int modeIdIn) + { + this.modeName = modeNameIn; + this.modeId = modeIdIn; + } + + public String getName() + { + return this.modeName; + } + + public int getModeId() + { + return this.modeId; + } + + public static TileEntityStructure.Mode getById(int id) + { + return id >= 0 && id < MODES.length ? MODES[id] : MODES[0]; + } + + static + { + for (TileEntityStructure.Mode tileentitystructure$mode : values()) + { + MODES[tileentitystructure$mode.getModeId()] = tileentitystructure$mode; + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/tileentity/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/tileentity/package-info.java new file mode 100644 index 0000000..e7c61b1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/tileentity/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.tileentity; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ActionResult.java b/build/tmp/recompileMc/sources/net/minecraft/util/ActionResult.java new file mode 100644 index 0000000..9bd03c9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ActionResult.java @@ -0,0 +1,29 @@ +package net.minecraft.util; + +public class ActionResult +{ + private final EnumActionResult type; + private final T result; + + public ActionResult(EnumActionResult typeIn, T resultIn) + { + this.type = typeIn; + this.result = resultIn; + } + + public EnumActionResult getType() + { + return this.type; + } + + public T getResult() + { + return this.result; + } + + //Just a generic helper function to make typecasing easier... + public static ActionResult newResult(EnumActionResult result, T value) + { + return new ActionResult(result, value); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/BitArray.java b/build/tmp/recompileMc/sources/net/minecraft/util/BitArray.java new file mode 100644 index 0000000..34dfb1d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/BitArray.java @@ -0,0 +1,84 @@ +package net.minecraft.util; + +import net.minecraft.util.math.MathHelper; +import org.apache.commons.lang3.Validate; + +public class BitArray +{ + /** The long array that is used to store the data for this BitArray. */ + private final long[] longArray; + /** Number of bits a single entry takes up */ + private final int bitsPerEntry; + /** + * The maximum value for a single entry. This also asks as a bitmask for a single entry. + * For instance, if bitsPerEntry were 5, this value would be 31 (ie, {@code 0b00011111}). + */ + private final long maxEntryValue; + /** Number of entries in this array (not the length of the long array that internally backs this array) */ + private final int arraySize; + + public BitArray(int bitsPerEntryIn, int arraySizeIn) + { + Validate.inclusiveBetween(1L, 32L, (long)bitsPerEntryIn); + this.arraySize = arraySizeIn; + this.bitsPerEntry = bitsPerEntryIn; + this.maxEntryValue = (1L << bitsPerEntryIn) - 1L; + this.longArray = new long[MathHelper.roundUp(arraySizeIn * bitsPerEntryIn, 64) / 64]; + } + + /** + * Sets the entry at the given location to the given value + */ + public void setAt(int index, int value) + { + Validate.inclusiveBetween(0L, (long)(this.arraySize - 1), (long)index); + Validate.inclusiveBetween(0L, this.maxEntryValue, (long)value); + int i = index * this.bitsPerEntry; + int j = i / 64; + int k = ((index + 1) * this.bitsPerEntry - 1) / 64; + int l = i % 64; + this.longArray[j] = this.longArray[j] & ~(this.maxEntryValue << l) | ((long)value & this.maxEntryValue) << l; + + if (j != k) + { + int i1 = 64 - l; + int j1 = this.bitsPerEntry - i1; + this.longArray[k] = this.longArray[k] >>> j1 << j1 | ((long)value & this.maxEntryValue) >> i1; + } + } + + /** + * Gets the entry at the given index + */ + public int getAt(int index) + { + Validate.inclusiveBetween(0L, (long)(this.arraySize - 1), (long)index); + int i = index * this.bitsPerEntry; + int j = i / 64; + int k = ((index + 1) * this.bitsPerEntry - 1) / 64; + int l = i % 64; + + if (j == k) + { + return (int)(this.longArray[j] >>> l & this.maxEntryValue); + } + else + { + int i1 = 64 - l; + return (int)((this.longArray[j] >>> l | this.longArray[k] << i1) & this.maxEntryValue); + } + } + + /** + * Gets the long array that is used to store the data in this BitArray. This is useful for sending packet data. + */ + public long[] getBackingLongArray() + { + return this.longArray; + } + + public int size() + { + return this.arraySize; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/BlockRenderLayer.java b/build/tmp/recompileMc/sources/net/minecraft/util/BlockRenderLayer.java new file mode 100644 index 0000000..005c9ee --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/BlockRenderLayer.java @@ -0,0 +1,21 @@ +package net.minecraft.util; + +public enum BlockRenderLayer +{ + SOLID("Solid"), + CUTOUT_MIPPED("Mipped Cutout"), + CUTOUT("Cutout"), + TRANSLUCENT("Translucent"); + + private final String layerName; + + private BlockRenderLayer(String layerNameIn) + { + this.layerName = layerNameIn; + } + + public String toString() + { + return this.layerName; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ChatAllowedCharacters.java b/build/tmp/recompileMc/sources/net/minecraft/util/ChatAllowedCharacters.java new file mode 100644 index 0000000..d62981d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ChatAllowedCharacters.java @@ -0,0 +1,46 @@ +package net.minecraft.util; + +import io.netty.util.ResourceLeakDetector; +import io.netty.util.ResourceLeakDetector.Level; + +public class ChatAllowedCharacters +{ + public static final Level NETTY_LEAK_DETECTION = Level.DISABLED; + public static final char[] ILLEGAL_STRUCTURE_CHARACTERS = new char[] {'.', '\n', '\r', '\t', '\u0000', '\f', '`', '?', '*', '\\', '<', '>', '|', '"'}; + /** Array of the special characters that are allowed in any text drawing of Minecraft. */ + public static final char[] ILLEGAL_FILE_CHARACTERS = new char[] {'/', '\n', '\r', '\t', '\u0000', '\f', '`', '?', '*', '\\', '<', '>', '|', '"', ':'}; + + /** + * Checks if the given character is allowed to be put into chat. + */ + public static boolean isAllowedCharacter(char character) + { + return character != 167 && character >= ' ' && character != 127; + } + + /** + * Filter a string, keeping only characters for which {@link #isAllowedCharacter(char)} returns true. + * + * Note that this method strips line breaks, as {@link #isAllowedCharacter(char)} returns false for those. + * @return A filtered version of the input string + */ + public static String filterAllowedCharacters(String input) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (char c0 : input.toCharArray()) + { + if (isAllowedCharacter(c0)) + { + stringbuilder.append(c0); + } + } + + return stringbuilder.toString(); + } + + static + { + ResourceLeakDetector.setLevel(NETTY_LEAK_DETECTION); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ClassInheritanceMultiMap.java b/build/tmp/recompileMc/sources/net/minecraft/util/ClassInheritanceMultiMap.java new file mode 100644 index 0000000..b442de0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ClassInheritanceMultiMap.java @@ -0,0 +1,150 @@ +package net.minecraft.util; + +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.AbstractSet; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class ClassInheritanceMultiMap extends AbstractSet +{ + // Forge: Use concurrent collection to allow creating chunks from multiple threads safely + private static final Set < Class> ALL_KNOWN = java.util.Collections.newSetFromMap(new java.util.concurrent.ConcurrentHashMap, Boolean>()); + private final Map < Class, List> map = Maps. < Class, List> newHashMap(); + private final Set < Class> knownKeys = Sets. < Class> newIdentityHashSet(); + private final Class baseClass; + private final List values = Lists.newArrayList(); + + public ClassInheritanceMultiMap(Class baseClassIn) + { + this.baseClass = baseClassIn; + this.knownKeys.add(baseClassIn); + this.map.put(baseClassIn, this.values); + + for (Class oclass : ALL_KNOWN) + { + this.createLookup(oclass); + } + } + + protected void createLookup(Class clazz) + { + ALL_KNOWN.add(clazz); + + for (T t : this.values) + { + if (clazz.isAssignableFrom(t.getClass())) + { + this.addForClass(t, clazz); + } + } + + this.knownKeys.add(clazz); + } + + protected Class initializeClassLookup(Class clazz) + { + if (this.baseClass.isAssignableFrom(clazz)) + { + if (!this.knownKeys.contains(clazz)) + { + this.createLookup(clazz); + } + + return clazz; + } + else + { + throw new IllegalArgumentException("Don't know how to search for " + clazz); + } + } + + public boolean add(T p_add_1_) + { + for (Class oclass : this.knownKeys) + { + if (oclass.isAssignableFrom(p_add_1_.getClass())) + { + this.addForClass(p_add_1_, oclass); + } + } + + return true; + } + + private void addForClass(T value, Class parentClass) + { + List list = (List)this.map.get(parentClass); + + if (list == null) + { + this.map.put(parentClass, Lists.newArrayList(value)); + } + else + { + list.add(value); + } + } + + public boolean remove(Object p_remove_1_) + { + T t = (T)p_remove_1_; + boolean flag = false; + + for (Class oclass : this.knownKeys) + { + if (oclass.isAssignableFrom(t.getClass())) + { + List list = (List)this.map.get(oclass); + + if (list != null && list.remove(t)) + { + flag = true; + } + } + } + + return flag; + } + + public boolean contains(Object p_contains_1_) + { + return Iterators.contains(this.getByClass(p_contains_1_.getClass()).iterator(), p_contains_1_); + } + + public Iterable getByClass(final Class clazz) + { + return new Iterable() + { + public Iterator iterator() + { + List list = (List)ClassInheritanceMultiMap.this.map.get(ClassInheritanceMultiMap.this.initializeClassLookup(clazz)); + + if (list == null) + { + return Collections.emptyIterator(); + } + else + { + Iterator iterator = list.iterator(); + return Iterators.filter(iterator, clazz); + } + } + }; + } + + public Iterator iterator() + { + return (Iterator)(this.values.isEmpty() ? Collections.emptyIterator() : Iterators.unmodifiableIterator(this.values.iterator())); + } + + public int size() + { + return this.values.size(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/CombatEntry.java b/build/tmp/recompileMc/sources/net/minecraft/util/CombatEntry.java new file mode 100644 index 0000000..6fbc9b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/CombatEntry.java @@ -0,0 +1,63 @@ +package net.minecraft.util; + +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.text.ITextComponent; + +public class CombatEntry +{ + private final DamageSource damageSrc; + private final int time; + private final float damage; + private final float health; + private final String fallSuffix; + private final float fallDistance; + + public CombatEntry(DamageSource damageSrcIn, int timeIn, float healthAmount, float damageAmount, String fallSuffixIn, float fallDistanceIn) + { + this.damageSrc = damageSrcIn; + this.time = timeIn; + this.damage = damageAmount; + this.health = healthAmount; + this.fallSuffix = fallSuffixIn; + this.fallDistance = fallDistanceIn; + } + + /** + * Get the DamageSource of the CombatEntry instance. + */ + public DamageSource getDamageSrc() + { + return this.damageSrc; + } + + public float getDamage() + { + return this.damage; + } + + /** + * Returns true if {@link net.minecraft.util.DamageSource#getEntity() damage source} is a living entity + */ + public boolean isLivingDamageSrc() + { + return this.damageSrc.getTrueSource() instanceof EntityLivingBase; + } + + @Nullable + public String getFallSuffix() + { + return this.fallSuffix; + } + + @Nullable + public ITextComponent getDamageSrcDisplayName() + { + return this.getDamageSrc().getTrueSource() == null ? null : this.getDamageSrc().getTrueSource().getDisplayName(); + } + + public float getDamageAmount() + { + return this.damageSrc == DamageSource.OUT_OF_WORLD ? Float.MAX_VALUE : this.fallDistance; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/CombatRules.java b/build/tmp/recompileMc/sources/net/minecraft/util/CombatRules.java new file mode 100644 index 0000000..b12c0bb --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/CombatRules.java @@ -0,0 +1,19 @@ +package net.minecraft.util; + +import net.minecraft.util.math.MathHelper; + +public class CombatRules +{ + public static float getDamageAfterAbsorb(float damage, float totalArmor, float toughnessAttribute) + { + float f = 2.0F + toughnessAttribute / 4.0F; + float f1 = MathHelper.clamp(totalArmor - damage / f, totalArmor * 0.2F, 20.0F); + return damage * (1.0F - f1 / 25.0F); + } + + public static float getDamageAfterMagicAbsorb(float damage, float enchantModifiers) + { + float f = MathHelper.clamp(enchantModifiers, 0.0F, 20.0F); + return damage * (1.0F - f / 25.0F); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/CombatTracker.java b/build/tmp/recompileMc/sources/net/minecraft/util/CombatTracker.java new file mode 100644 index 0000000..20046b6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/CombatTracker.java @@ -0,0 +1,270 @@ +package net.minecraft.util; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + +public class CombatTracker +{ + /** The CombatEntry objects that we've tracked so far. */ + private final List combatEntries = Lists.newArrayList(); + /** The entity tracked. */ + private final EntityLivingBase fighter; + private int lastDamageTime; + private int combatStartTime; + private int combatEndTime; + private boolean inCombat; + private boolean takingDamage; + private String fallSuffix; + + public CombatTracker(EntityLivingBase fighterIn) + { + this.fighter = fighterIn; + } + + public void calculateFallSuffix() + { + this.resetFallSuffix(); + + if (this.fighter.isOnLadder()) + { + Block block = this.fighter.world.getBlockState(new BlockPos(this.fighter.posX, this.fighter.getEntityBoundingBox().minY, this.fighter.posZ)).getBlock(); + + if (block == Blocks.LADDER) + { + this.fallSuffix = "ladder"; + } + else if (block == Blocks.VINE) + { + this.fallSuffix = "vines"; + } + } + else if (this.fighter.isInWater()) + { + this.fallSuffix = "water"; + } + } + + /** + * Adds an entry for the combat tracker + */ + public void trackDamage(DamageSource damageSrc, float healthIn, float damageAmount) + { + this.reset(); + this.calculateFallSuffix(); + CombatEntry combatentry = new CombatEntry(damageSrc, this.fighter.ticksExisted, healthIn, damageAmount, this.fallSuffix, this.fighter.fallDistance); + this.combatEntries.add(combatentry); + this.lastDamageTime = this.fighter.ticksExisted; + this.takingDamage = true; + + if (combatentry.isLivingDamageSrc() && !this.inCombat && this.fighter.isEntityAlive()) + { + this.inCombat = true; + this.combatStartTime = this.fighter.ticksExisted; + this.combatEndTime = this.combatStartTime; + this.fighter.sendEnterCombat(); + } + } + + public ITextComponent getDeathMessage() + { + if (this.combatEntries.isEmpty()) + { + return new TextComponentTranslation("death.attack.generic", new Object[] {this.fighter.getDisplayName()}); + } + else + { + CombatEntry combatentry = this.getBestCombatEntry(); + CombatEntry combatentry1 = this.combatEntries.get(this.combatEntries.size() - 1); + ITextComponent itextcomponent1 = combatentry1.getDamageSrcDisplayName(); + Entity entity = combatentry1.getDamageSrc().getTrueSource(); + ITextComponent itextcomponent; + + if (combatentry != null && combatentry1.getDamageSrc() == DamageSource.FALL) + { + ITextComponent itextcomponent2 = combatentry.getDamageSrcDisplayName(); + + if (combatentry.getDamageSrc() != DamageSource.FALL && combatentry.getDamageSrc() != DamageSource.OUT_OF_WORLD) + { + if (itextcomponent2 != null && (itextcomponent1 == null || !itextcomponent2.equals(itextcomponent1))) + { + Entity entity1 = combatentry.getDamageSrc().getTrueSource(); + ItemStack itemstack1 = entity1 instanceof EntityLivingBase ? ((EntityLivingBase)entity1).getHeldItemMainhand() : ItemStack.EMPTY; + + if (!itemstack1.isEmpty() && itemstack1.hasDisplayName()) + { + itextcomponent = new TextComponentTranslation("death.fell.assist.item", new Object[] {this.fighter.getDisplayName(), itextcomponent2, itemstack1.getTextComponent()}); + } + else + { + itextcomponent = new TextComponentTranslation("death.fell.assist", new Object[] {this.fighter.getDisplayName(), itextcomponent2}); + } + } + else if (itextcomponent1 != null) + { + ItemStack itemstack = entity instanceof EntityLivingBase ? ((EntityLivingBase)entity).getHeldItemMainhand() : ItemStack.EMPTY; + + if (!itemstack.isEmpty() && itemstack.hasDisplayName()) + { + itextcomponent = new TextComponentTranslation("death.fell.finish.item", new Object[] {this.fighter.getDisplayName(), itextcomponent1, itemstack.getTextComponent()}); + } + else + { + itextcomponent = new TextComponentTranslation("death.fell.finish", new Object[] {this.fighter.getDisplayName(), itextcomponent1}); + } + } + else + { + itextcomponent = new TextComponentTranslation("death.fell.killer", new Object[] {this.fighter.getDisplayName()}); + } + } + else + { + itextcomponent = new TextComponentTranslation("death.fell.accident." + this.getFallSuffix(combatentry), new Object[] {this.fighter.getDisplayName()}); + } + } + else + { + itextcomponent = combatentry1.getDamageSrc().getDeathMessage(this.fighter); + } + + return itextcomponent; + } + } + + @Nullable + public EntityLivingBase getBestAttacker() + { + EntityLivingBase entitylivingbase = null; + EntityPlayer entityplayer = null; + float f = 0.0F; + float f1 = 0.0F; + + for (CombatEntry combatentry : this.combatEntries) + { + if (combatentry.getDamageSrc().getTrueSource() instanceof EntityPlayer && (entityplayer == null || combatentry.getDamage() > f1)) + { + f1 = combatentry.getDamage(); + entityplayer = (EntityPlayer)combatentry.getDamageSrc().getTrueSource(); + } + + if (combatentry.getDamageSrc().getTrueSource() instanceof EntityLivingBase && (entitylivingbase == null || combatentry.getDamage() > f)) + { + f = combatentry.getDamage(); + entitylivingbase = (EntityLivingBase)combatentry.getDamageSrc().getTrueSource(); + } + } + + if (entityplayer != null && f1 >= f / 3.0F) + { + return entityplayer; + } + else + { + return entitylivingbase; + } + } + + @Nullable + private CombatEntry getBestCombatEntry() + { + CombatEntry combatentry = null; + CombatEntry combatentry1 = null; + float f = 0.0F; + float f1 = 0.0F; + + for (int i = 0; i < this.combatEntries.size(); ++i) + { + CombatEntry combatentry2 = this.combatEntries.get(i); + CombatEntry combatentry3 = i > 0 ? (CombatEntry)this.combatEntries.get(i - 1) : null; + + if ((combatentry2.getDamageSrc() == DamageSource.FALL || combatentry2.getDamageSrc() == DamageSource.OUT_OF_WORLD) && combatentry2.getDamageAmount() > 0.0F && (combatentry == null || combatentry2.getDamageAmount() > f1)) + { + if (i > 0) + { + combatentry = combatentry3; + } + else + { + combatentry = combatentry2; + } + + f1 = combatentry2.getDamageAmount(); + } + + if (combatentry2.getFallSuffix() != null && (combatentry1 == null || combatentry2.getDamage() > f)) + { + combatentry1 = combatentry2; + f = combatentry2.getDamage(); + } + } + + if (f1 > 5.0F && combatentry != null) + { + return combatentry; + } + else if (f > 5.0F && combatentry1 != null) + { + return combatentry1; + } + else + { + return null; + } + } + + private String getFallSuffix(CombatEntry entry) + { + return entry.getFallSuffix() == null ? "generic" : entry.getFallSuffix(); + } + + public int getCombatDuration() + { + return this.inCombat ? this.fighter.ticksExisted - this.combatStartTime : this.combatEndTime - this.combatStartTime; + } + + private void resetFallSuffix() + { + this.fallSuffix = null; + } + + /** + * Resets this trackers list of combat entries + */ + public void reset() + { + int i = this.inCombat ? 300 : 100; + + if (this.takingDamage && (!this.fighter.isEntityAlive() || this.fighter.ticksExisted - this.lastDamageTime > i)) + { + boolean flag = this.inCombat; + this.takingDamage = false; + this.inCombat = false; + this.combatEndTime = this.fighter.ticksExisted; + + if (flag) + { + this.fighter.sendEndCombat(); + } + + this.combatEntries.clear(); + } + } + + /** + * Returns EntityLivingBase assigned for this CombatTracker + */ + public EntityLivingBase getFighter() + { + return this.fighter; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/CooldownTracker.java b/build/tmp/recompileMc/sources/net/minecraft/util/CooldownTracker.java new file mode 100644 index 0000000..1d8a7ad --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/CooldownTracker.java @@ -0,0 +1,91 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import net.minecraft.item.Item; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class CooldownTracker +{ + private final Map cooldowns = Maps.newHashMap(); + private int ticks; + + public boolean hasCooldown(Item itemIn) + { + return this.getCooldown(itemIn, 0.0F) > 0.0F; + } + + public float getCooldown(Item itemIn, float partialTicks) + { + CooldownTracker.Cooldown cooldowntracker$cooldown = this.cooldowns.get(itemIn); + + if (cooldowntracker$cooldown != null) + { + float f = (float)(cooldowntracker$cooldown.expireTicks - cooldowntracker$cooldown.createTicks); + float f1 = (float)cooldowntracker$cooldown.expireTicks - ((float)this.ticks + partialTicks); + return MathHelper.clamp(f1 / f, 0.0F, 1.0F); + } + else + { + return 0.0F; + } + } + + public void tick() + { + ++this.ticks; + + if (!this.cooldowns.isEmpty()) + { + Iterator> iterator = this.cooldowns.entrySet().iterator(); + + while (iterator.hasNext()) + { + Entry entry = (Entry)iterator.next(); + + if ((entry.getValue()).expireTicks <= this.ticks) + { + iterator.remove(); + this.notifyOnRemove(entry.getKey()); + } + } + } + } + + public void setCooldown(Item itemIn, int ticksIn) + { + this.cooldowns.put(itemIn, new CooldownTracker.Cooldown(this.ticks, this.ticks + ticksIn)); + this.notifyOnSet(itemIn, ticksIn); + } + + @SideOnly(Side.CLIENT) + public void removeCooldown(Item itemIn) + { + this.cooldowns.remove(itemIn); + this.notifyOnRemove(itemIn); + } + + protected void notifyOnSet(Item itemIn, int ticksIn) + { + } + + protected void notifyOnRemove(Item itemIn) + { + } + + class Cooldown + { + final int createTicks; + final int expireTicks; + + private Cooldown(int createTicksIn, int expireTicksIn) + { + this.createTicks = createTicksIn; + this.expireTicks = expireTicksIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/CooldownTrackerServer.java b/build/tmp/recompileMc/sources/net/minecraft/util/CooldownTrackerServer.java new file mode 100644 index 0000000..08b65e6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/CooldownTrackerServer.java @@ -0,0 +1,27 @@ +package net.minecraft.util; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.network.play.server.SPacketCooldown; + +public class CooldownTrackerServer extends CooldownTracker +{ + private final EntityPlayerMP player; + + public CooldownTrackerServer(EntityPlayerMP playerIn) + { + this.player = playerIn; + } + + protected void notifyOnSet(Item itemIn, int ticksIn) + { + super.notifyOnSet(itemIn, ticksIn); + this.player.connection.sendPacket(new SPacketCooldown(itemIn, ticksIn)); + } + + protected void notifyOnRemove(Item itemIn) + { + super.notifyOnRemove(itemIn); + this.player.connection.sendPacket(new SPacketCooldown(itemIn, 0)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/CryptManager.java b/build/tmp/recompileMc/sources/net/minecraft/util/CryptManager.java new file mode 100644 index 0000000..18b2b47 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/CryptManager.java @@ -0,0 +1,225 @@ +package net.minecraft.util; + +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.EncodedKeySpec; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.KeyGenerator; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CryptManager +{ + private static final Logger LOGGER = LogManager.getLogger(); + + /** + * Generate a new shared secret AES key from a secure random source + */ + @SideOnly(Side.CLIENT) + public static SecretKey createNewSharedKey() + { + try + { + KeyGenerator keygenerator = KeyGenerator.getInstance("AES"); + keygenerator.init(128); + return keygenerator.generateKey(); + } + catch (NoSuchAlgorithmException nosuchalgorithmexception) + { + throw new Error(nosuchalgorithmexception); + } + } + + /** + * Generates RSA KeyPair + */ + public static KeyPair generateKeyPair() + { + try + { + KeyPairGenerator keypairgenerator = KeyPairGenerator.getInstance("RSA"); + keypairgenerator.initialize(1024); + return keypairgenerator.generateKeyPair(); + } + catch (NoSuchAlgorithmException nosuchalgorithmexception) + { + nosuchalgorithmexception.printStackTrace(); + LOGGER.error("Key pair generation failed!"); + return null; + } + } + + /** + * Compute a serverId hash for use by sendSessionRequest() + */ + public static byte[] getServerIdHash(String serverId, PublicKey publicKey, SecretKey secretKey) + { + try + { + return digestOperation("SHA-1", serverId.getBytes("ISO_8859_1"), secretKey.getEncoded(), publicKey.getEncoded()); + } + catch (UnsupportedEncodingException unsupportedencodingexception) + { + unsupportedencodingexception.printStackTrace(); + return null; + } + } + + /** + * Compute a message digest on arbitrary byte[] data + */ + private static byte[] digestOperation(String algorithm, byte[]... data) + { + try + { + MessageDigest messagedigest = MessageDigest.getInstance(algorithm); + + for (byte[] abyte : data) + { + messagedigest.update(abyte); + } + + return messagedigest.digest(); + } + catch (NoSuchAlgorithmException nosuchalgorithmexception) + { + nosuchalgorithmexception.printStackTrace(); + return null; + } + } + + /** + * Create a new PublicKey from encoded X.509 data + */ + public static PublicKey decodePublicKey(byte[] encodedKey) + { + try + { + EncodedKeySpec encodedkeyspec = new X509EncodedKeySpec(encodedKey); + KeyFactory keyfactory = KeyFactory.getInstance("RSA"); + return keyfactory.generatePublic(encodedkeyspec); + } + catch (NoSuchAlgorithmException var3) + { + ; + } + catch (InvalidKeySpecException var4) + { + ; + } + + LOGGER.error("Public key reconstitute failed!"); + return null; + } + + /** + * Decrypt shared secret AES key using RSA private key + */ + public static SecretKey decryptSharedKey(PrivateKey key, byte[] secretKeyEncrypted) + { + return new SecretKeySpec(decryptData(key, secretKeyEncrypted), "AES"); + } + + /** + * Encrypt byte[] data with RSA public key + */ + @SideOnly(Side.CLIENT) + public static byte[] encryptData(Key key, byte[] data) + { + return cipherOperation(1, key, data); + } + + /** + * Decrypt byte[] data with RSA private key + */ + public static byte[] decryptData(Key key, byte[] data) + { + return cipherOperation(2, key, data); + } + + /** + * Encrypt or decrypt byte[] data using the specified key + */ + private static byte[] cipherOperation(int opMode, Key key, byte[] data) + { + try + { + return createTheCipherInstance(opMode, key.getAlgorithm(), key).doFinal(data); + } + catch (IllegalBlockSizeException illegalblocksizeexception) + { + illegalblocksizeexception.printStackTrace(); + } + catch (BadPaddingException badpaddingexception) + { + badpaddingexception.printStackTrace(); + } + + LOGGER.error("Cipher data failed!"); + return null; + } + + /** + * Creates the Cipher Instance. + */ + private static Cipher createTheCipherInstance(int opMode, String transformation, Key key) + { + try + { + Cipher cipher = Cipher.getInstance(transformation); + cipher.init(opMode, key); + return cipher; + } + catch (InvalidKeyException invalidkeyexception) + { + invalidkeyexception.printStackTrace(); + } + catch (NoSuchAlgorithmException nosuchalgorithmexception) + { + nosuchalgorithmexception.printStackTrace(); + } + catch (NoSuchPaddingException nosuchpaddingexception) + { + nosuchpaddingexception.printStackTrace(); + } + + LOGGER.error("Cipher creation failed!"); + return null; + } + + /** + * Creates an Cipher instance using the AES/CFB8/NoPadding algorithm. Used for protocol encryption. + */ + public static Cipher createNetCipherInstance(int opMode, Key key) + { + try + { + Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding"); + cipher.init(opMode, key, new IvParameterSpec(key.getEncoded())); + return cipher; + } + catch (GeneralSecurityException generalsecurityexception) + { + throw new RuntimeException(generalsecurityexception); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/DamageSource.java b/build/tmp/recompileMc/sources/net/minecraft/util/DamageSource.java new file mode 100644 index 0000000..399b7f6 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/DamageSource.java @@ -0,0 +1,302 @@ +package net.minecraft.util; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.translation.I18n; +import net.minecraft.world.Explosion; + +public class DamageSource +{ + public static final DamageSource IN_FIRE = (new DamageSource("inFire")).setFireDamage(); + public static final DamageSource LIGHTNING_BOLT = new DamageSource("lightningBolt"); + public static final DamageSource ON_FIRE = (new DamageSource("onFire")).setDamageBypassesArmor().setFireDamage(); + public static final DamageSource LAVA = (new DamageSource("lava")).setFireDamage(); + public static final DamageSource HOT_FLOOR = (new DamageSource("hotFloor")).setFireDamage(); + public static final DamageSource IN_WALL = (new DamageSource("inWall")).setDamageBypassesArmor(); + public static final DamageSource CRAMMING = (new DamageSource("cramming")).setDamageBypassesArmor(); + public static final DamageSource DROWN = (new DamageSource("drown")).setDamageBypassesArmor(); + public static final DamageSource STARVE = (new DamageSource("starve")).setDamageBypassesArmor().setDamageIsAbsolute(); + public static final DamageSource CACTUS = new DamageSource("cactus"); + public static final DamageSource FALL = (new DamageSource("fall")).setDamageBypassesArmor(); + public static final DamageSource FLY_INTO_WALL = (new DamageSource("flyIntoWall")).setDamageBypassesArmor(); + public static final DamageSource OUT_OF_WORLD = (new DamageSource("outOfWorld")).setDamageBypassesArmor().setDamageAllowedInCreativeMode(); + public static final DamageSource GENERIC = (new DamageSource("generic")).setDamageBypassesArmor(); + public static final DamageSource MAGIC = (new DamageSource("magic")).setDamageBypassesArmor().setMagicDamage(); + public static final DamageSource WITHER = (new DamageSource("wither")).setDamageBypassesArmor(); + public static final DamageSource ANVIL = new DamageSource("anvil"); + public static final DamageSource FALLING_BLOCK = new DamageSource("fallingBlock"); + public static final DamageSource DRAGON_BREATH = (new DamageSource("dragonBreath")).setDamageBypassesArmor(); + public static final DamageSource FIREWORKS = (new DamageSource("fireworks")).setExplosion(); + /** This kind of damage can be blocked or not. */ + private boolean isUnblockable; + private boolean isDamageAllowedInCreativeMode; + /** Whether or not the damage ignores modification by potion effects or enchantments. */ + private boolean damageIsAbsolute; + private float hungerDamage = 0.1F; + /** This kind of damage is based on fire or not. */ + private boolean fireDamage; + /** This kind of damage is based on a projectile or not. */ + private boolean projectile; + /** Whether this damage source will have its damage amount scaled based on the current difficulty. */ + private boolean difficultyScaled; + /** Whether the damage is magic based. */ + private boolean magicDamage; + private boolean explosion; + public String damageType; + + public static DamageSource causeMobDamage(EntityLivingBase mob) + { + return new EntityDamageSource("mob", mob); + } + + public static DamageSource causeIndirectDamage(Entity source, EntityLivingBase indirectEntityIn) + { + return new EntityDamageSourceIndirect("mob", source, indirectEntityIn); + } + + /** + * returns an EntityDamageSource of type player + */ + public static DamageSource causePlayerDamage(EntityPlayer player) + { + return new EntityDamageSource("player", player); + } + + /** + * returns EntityDamageSourceIndirect of an arrow + */ + public static DamageSource causeArrowDamage(EntityArrow arrow, @Nullable Entity indirectEntityIn) + { + return (new EntityDamageSourceIndirect("arrow", arrow, indirectEntityIn)).setProjectile(); + } + + /** + * returns EntityDamageSourceIndirect of a fireball + */ + public static DamageSource causeFireballDamage(EntityFireball fireball, @Nullable Entity indirectEntityIn) + { + return indirectEntityIn == null ? (new EntityDamageSourceIndirect("onFire", fireball, fireball)).setFireDamage().setProjectile() : (new EntityDamageSourceIndirect("fireball", fireball, indirectEntityIn)).setFireDamage().setProjectile(); + } + + public static DamageSource causeThrownDamage(Entity source, @Nullable Entity indirectEntityIn) + { + return (new EntityDamageSourceIndirect("thrown", source, indirectEntityIn)).setProjectile(); + } + + public static DamageSource causeIndirectMagicDamage(Entity source, @Nullable Entity indirectEntityIn) + { + return (new EntityDamageSourceIndirect("indirectMagic", source, indirectEntityIn)).setDamageBypassesArmor().setMagicDamage(); + } + + /** + * Returns the EntityDamageSource of the Thorns enchantment + */ + public static DamageSource causeThornsDamage(Entity source) + { + return (new EntityDamageSource("thorns", source)).setIsThornsDamage().setMagicDamage(); + } + + public static DamageSource causeExplosionDamage(@Nullable Explosion explosionIn) + { + return explosionIn != null && explosionIn.getExplosivePlacedBy() != null ? (new EntityDamageSource("explosion.player", explosionIn.getExplosivePlacedBy())).setDifficultyScaled().setExplosion() : (new DamageSource("explosion")).setDifficultyScaled().setExplosion(); + } + + public static DamageSource causeExplosionDamage(@Nullable EntityLivingBase entityLivingBaseIn) + { + return entityLivingBaseIn != null ? (new EntityDamageSource("explosion.player", entityLivingBaseIn)).setDifficultyScaled().setExplosion() : (new DamageSource("explosion")).setDifficultyScaled().setExplosion(); + } + + /** + * Returns true if the damage is projectile based. + */ + public boolean isProjectile() + { + return this.projectile; + } + + /** + * Define the damage type as projectile based. + */ + public DamageSource setProjectile() + { + this.projectile = true; + return this; + } + + public boolean isExplosion() + { + return this.explosion; + } + + public DamageSource setExplosion() + { + this.explosion = true; + return this; + } + + public boolean isUnblockable() + { + return this.isUnblockable; + } + + /** + * How much satiate(food) is consumed by this DamageSource + */ + public float getHungerDamage() + { + return this.hungerDamage; + } + + public boolean canHarmInCreative() + { + return this.isDamageAllowedInCreativeMode; + } + + /** + * Whether or not the damage ignores modification by potion effects or enchantments. + */ + public boolean isDamageAbsolute() + { + return this.damageIsAbsolute; + } + + public DamageSource(String damageTypeIn) + { + this.damageType = damageTypeIn; + } + + /** + * Retrieves the immediate causer of the damage, e.g. the arrow entity, not its shooter + */ + @Nullable + public Entity getImmediateSource() + { + return this.getTrueSource(); + } + + /** + * Retrieves the true causer of the damage, e.g. the player who fired an arrow, the shulker who fired the bullet, + * etc. + */ + @Nullable + public Entity getTrueSource() + { + return null; + } + + public DamageSource setDamageBypassesArmor() + { + this.isUnblockable = true; + this.hungerDamage = 0.0F; + return this; + } + + public DamageSource setDamageAllowedInCreativeMode() + { + this.isDamageAllowedInCreativeMode = true; + return this; + } + + /** + * Sets a value indicating whether the damage is absolute (ignores modification by potion effects or enchantments), + * and also clears out hunger damage. + */ + public DamageSource setDamageIsAbsolute() + { + this.damageIsAbsolute = true; + this.hungerDamage = 0.0F; + return this; + } + + /** + * Define the damage type as fire based. + */ + public DamageSource setFireDamage() + { + this.fireDamage = true; + return this; + } + + /** + * Gets the death message that is displayed when the player dies + */ + public ITextComponent getDeathMessage(EntityLivingBase entityLivingBaseIn) + { + EntityLivingBase entitylivingbase = entityLivingBaseIn.getAttackingEntity(); + String s = "death.attack." + this.damageType; + String s1 = s + ".player"; + return entitylivingbase != null && I18n.canTranslate(s1) ? new TextComponentTranslation(s1, new Object[] {entityLivingBaseIn.getDisplayName(), entitylivingbase.getDisplayName()}) : new TextComponentTranslation(s, new Object[] {entityLivingBaseIn.getDisplayName()}); + } + + /** + * Returns true if the damage is fire based. + */ + public boolean isFireDamage() + { + return this.fireDamage; + } + + /** + * Return the name of damage type. + */ + public String getDamageType() + { + return this.damageType; + } + + /** + * Set whether this damage source will have its damage amount scaled based on the current difficulty. + */ + public DamageSource setDifficultyScaled() + { + this.difficultyScaled = true; + return this; + } + + /** + * Return whether this damage source will have its damage amount scaled based on the current difficulty. + */ + public boolean isDifficultyScaled() + { + return this.difficultyScaled; + } + + /** + * Returns true if the damage is magic based. + */ + public boolean isMagicDamage() + { + return this.magicDamage; + } + + /** + * Define the damage type as magic based. + */ + public DamageSource setMagicDamage() + { + this.magicDamage = true; + return this; + } + + public boolean isCreativePlayer() + { + Entity entity = this.getTrueSource(); + return entity instanceof EntityPlayer && ((EntityPlayer)entity).capabilities.isCreativeMode; + } + + /** + * Gets the location from which the damage originates. + */ + @Nullable + public Vec3d getDamageLocation() + { + return null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnchantmentNameParts.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnchantmentNameParts.java new file mode 100644 index 0000000..7fae01c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnchantmentNameParts.java @@ -0,0 +1,50 @@ +package net.minecraft.util; + +import java.util.List; +import java.util.Random; +import net.minecraft.client.gui.FontRenderer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class EnchantmentNameParts +{ + private static final EnchantmentNameParts INSTANCE = new EnchantmentNameParts(); + private final Random rand = new Random(); + private final String[] namePartsArray = "the elder scrolls klaatu berata niktu xyzzy bless curse light darkness fire air earth water hot dry cold wet ignite snuff embiggen twist shorten stretch fiddle destroy imbue galvanize enchant free limited range of towards inside sphere cube self other ball mental physical grow shrink demon elemental spirit animal creature beast humanoid undead fresh stale phnglui mglwnafh cthulhu rlyeh wgahnagl fhtagnbaguette".split(" "); + + public static EnchantmentNameParts getInstance() + { + return INSTANCE; + } + + /** + * Randomly generates a new name built up of 3 or 4 randomly selected words. + */ + public String generateNewRandomName(FontRenderer fontRendererIn, int length) + { + int i = this.rand.nextInt(2) + 3; + String s = ""; + + for (int j = 0; j < i; ++j) + { + if (j > 0) + { + s = s + " "; + } + + s = s + this.namePartsArray[this.rand.nextInt(this.namePartsArray.length)]; + } + + List list = fontRendererIn.listFormattedStringToWidth(s, length); + return org.apache.commons.lang3.StringUtils.join((Iterable)(list.size() >= 2 ? list.subList(0, 2) : list), " "); + } + + /** + * Resets the underlying random number generator using a given seed. + */ + public void reseedRandomGenerator(long seed) + { + this.rand.setSeed(seed); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EntityDamageSource.java b/build/tmp/recompileMc/sources/net/minecraft/util/EntityDamageSource.java new file mode 100644 index 0000000..122a0c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EntityDamageSource.java @@ -0,0 +1,77 @@ +package net.minecraft.util; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.translation.I18n; + +public class EntityDamageSource extends DamageSource +{ + @Nullable + protected Entity damageSourceEntity; + /** Whether this EntityDamageSource is from an entity wearing Thorns-enchanted armor. */ + private boolean isThornsDamage; + + public EntityDamageSource(String damageTypeIn, @Nullable Entity damageSourceEntityIn) + { + super(damageTypeIn); + this.damageSourceEntity = damageSourceEntityIn; + } + + /** + * Sets this EntityDamageSource as originating from Thorns armor + */ + public EntityDamageSource setIsThornsDamage() + { + this.isThornsDamage = true; + return this; + } + + public boolean getIsThornsDamage() + { + return this.isThornsDamage; + } + + /** + * Retrieves the true causer of the damage, e.g. the player who fired an arrow, the shulker who fired the bullet, + * etc. + */ + @Nullable + public Entity getTrueSource() + { + return this.damageSourceEntity; + } + + /** + * Gets the death message that is displayed when the player dies + */ + public ITextComponent getDeathMessage(EntityLivingBase entityLivingBaseIn) + { + ItemStack itemstack = this.damageSourceEntity instanceof EntityLivingBase ? ((EntityLivingBase)this.damageSourceEntity).getHeldItemMainhand() : ItemStack.EMPTY; + String s = "death.attack." + this.damageType; + String s1 = s + ".item"; + return !itemstack.isEmpty() && itemstack.hasDisplayName() && I18n.canTranslate(s1) ? new TextComponentTranslation(s1, new Object[] {entityLivingBaseIn.getDisplayName(), this.damageSourceEntity.getDisplayName(), itemstack.getTextComponent()}) : new TextComponentTranslation(s, new Object[] {entityLivingBaseIn.getDisplayName(), this.damageSourceEntity.getDisplayName()}); + } + + /** + * Return whether this damage source will have its damage amount scaled based on the current difficulty. + */ + public boolean isDifficultyScaled() + { + return this.damageSourceEntity != null && this.damageSourceEntity instanceof EntityLivingBase && !(this.damageSourceEntity instanceof EntityPlayer); + } + + /** + * Gets the location from which the damage originates. + */ + @Nullable + public Vec3d getDamageLocation() + { + return new Vec3d(this.damageSourceEntity.posX, this.damageSourceEntity.posY, this.damageSourceEntity.posZ); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EntityDamageSourceIndirect.java b/build/tmp/recompileMc/sources/net/minecraft/util/EntityDamageSourceIndirect.java new file mode 100644 index 0000000..d5fe9b0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EntityDamageSourceIndirect.java @@ -0,0 +1,52 @@ +package net.minecraft.util; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.translation.I18n; + +public class EntityDamageSourceIndirect extends EntityDamageSource +{ + /** The entity who created the direct source, e.g. the shooter of an arrow */ + private final Entity indirectEntity; + + public EntityDamageSourceIndirect(String damageTypeIn, Entity source, @Nullable Entity indirectEntityIn) + { + super(damageTypeIn, source); + this.indirectEntity = indirectEntityIn; + } + + /** + * Retrieves the immediate causer of the damage, e.g. the arrow entity, not its shooter + */ + @Nullable + public Entity getImmediateSource() + { + return this.damageSourceEntity; + } + + /** + * Retrieves the true causer of the damage, e.g. the player who fired an arrow, the shulker who fired the bullet, + * etc. + */ + @Nullable + public Entity getTrueSource() + { + return this.indirectEntity; + } + + /** + * Gets the death message that is displayed when the player dies + */ + public ITextComponent getDeathMessage(EntityLivingBase entityLivingBaseIn) + { + ITextComponent itextcomponent = this.indirectEntity == null ? this.damageSourceEntity.getDisplayName() : this.indirectEntity.getDisplayName(); + ItemStack itemstack = this.indirectEntity instanceof EntityLivingBase ? ((EntityLivingBase)this.indirectEntity).getHeldItemMainhand() : ItemStack.EMPTY; + String s = "death.attack." + this.damageType; + String s1 = s + ".item"; + return !itemstack.isEmpty() && itemstack.hasDisplayName() && I18n.canTranslate(s1) ? new TextComponentTranslation(s1, new Object[] {entityLivingBaseIn.getDisplayName(), itextcomponent, itemstack.getTextComponent()}) : new TextComponentTranslation(s, new Object[] {entityLivingBaseIn.getDisplayName(), itextcomponent}); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EntitySelectors.java b/build/tmp/recompileMc/sources/net/minecraft/util/EntitySelectors.java new file mode 100644 index 0000000..b9af758 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EntitySelectors.java @@ -0,0 +1,179 @@ +package net.minecraft.util; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.scoreboard.Team; + +public final class EntitySelectors +{ + public static final Predicate IS_ALIVE = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_.isEntityAlive(); + } + }; + /** Selects only entities which are neither ridden by anything nor ride on anything */ + public static final Predicate IS_STANDALONE = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_.isEntityAlive() && !p_apply_1_.isBeingRidden() && !p_apply_1_.isRiding(); + } + }; + public static final Predicate HAS_INVENTORY = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return p_apply_1_ instanceof IInventory && p_apply_1_.isEntityAlive(); + } + }; + public static final Predicate CAN_AI_TARGET = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return !(p_apply_1_ instanceof EntityPlayer) || !((EntityPlayer)p_apply_1_).isSpectator() && !((EntityPlayer)p_apply_1_).isCreative(); + } + }; + /** Selects entities which are either not players or players that are not spectating */ + public static final Predicate NOT_SPECTATING = new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + return !(p_apply_1_ instanceof EntityPlayer) || !((EntityPlayer)p_apply_1_).isSpectator(); + } + }; + + public static Predicate withinRange(final double x, final double y, final double z, double range) + { + final double d0 = range * range; + return new Predicate() + { + public boolean apply(@Nullable T p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getDistanceSq(x, y, z) <= d0; + } + }; + } + + public static Predicate getTeamCollisionPredicate(final Entity entityIn) + { + final Team team = entityIn.getTeam(); + final Team.CollisionRule team$collisionrule = team == null ? Team.CollisionRule.ALWAYS : team.getCollisionRule(); + Predicate ret = team$collisionrule == Team.CollisionRule.NEVER ? Predicates.alwaysFalse() : Predicates.and(NOT_SPECTATING, new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + if (!p_apply_1_.canBePushed()) + { + return false; + } + else if (!entityIn.world.isRemote || p_apply_1_ instanceof EntityPlayer && ((EntityPlayer)p_apply_1_).isUser()) + { + Team team1 = p_apply_1_.getTeam(); + Team.CollisionRule team$collisionrule1 = team1 == null ? Team.CollisionRule.ALWAYS : team1.getCollisionRule(); + + if (team$collisionrule1 == Team.CollisionRule.NEVER) + { + return false; + } + else + { + boolean flag = team != null && team.isSameTeam(team1); + + if ((team$collisionrule == Team.CollisionRule.HIDE_FOR_OWN_TEAM || team$collisionrule1 == Team.CollisionRule.HIDE_FOR_OWN_TEAM) && flag) + { + return false; + } + else + { + return team$collisionrule != Team.CollisionRule.HIDE_FOR_OTHER_TEAMS && team$collisionrule1 != Team.CollisionRule.HIDE_FOR_OTHER_TEAMS || flag; + } + } + } + else + { + return false; + } + } + }); + return (Predicate)ret; + } + + public static Predicate notRiding(final Entity p_191324_0_) + { + return new Predicate() + { + public boolean apply(@Nullable Entity p_apply_1_) + { + while (true) + { + if (p_apply_1_.isRiding()) + { + p_apply_1_ = p_apply_1_.getRidingEntity(); + + if (p_apply_1_ != p_191324_0_) + { + continue; + } + + return false; + } + + return true; + } + } + }; + } + + public static class ArmoredMob implements Predicate + { + private final ItemStack armor; + + public ArmoredMob(ItemStack armor) + { + this.armor = armor; + } + + public boolean apply(@Nullable Entity p_apply_1_) + { + if (!p_apply_1_.isEntityAlive()) + { + return false; + } + else if (!(p_apply_1_ instanceof EntityLivingBase)) + { + return false; + } + else + { + EntityLivingBase entitylivingbase = (EntityLivingBase)p_apply_1_; + + if (!entitylivingbase.getItemStackFromSlot(EntityLiving.getSlotForItemStack(this.armor)).isEmpty()) + { + return false; + } + else if (entitylivingbase instanceof EntityLiving) + { + return ((EntityLiving)entitylivingbase).canPickUpLoot(); + } + else if (entitylivingbase instanceof EntityArmorStand) + { + return true; + } + else + { + return entitylivingbase instanceof EntityPlayer; + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumActionResult.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumActionResult.java new file mode 100644 index 0000000..da56261 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumActionResult.java @@ -0,0 +1,8 @@ +package net.minecraft.util; + +public enum EnumActionResult +{ + SUCCESS, + PASS, + FAIL; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumBlockRenderType.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumBlockRenderType.java new file mode 100644 index 0000000..7364dcf --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumBlockRenderType.java @@ -0,0 +1,9 @@ +package net.minecraft.util; + +public enum EnumBlockRenderType +{ + INVISIBLE, + LIQUID, + ENTITYBLOCK_ANIMATED, + MODEL; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumFacing.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumFacing.java new file mode 100644 index 0000000..d63d3f4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumFacing.java @@ -0,0 +1,516 @@ +package net.minecraft.util; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Locale; +import java.util.Map; +import java.util.Random; +import javax.annotation.Nullable; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3i; + +public enum EnumFacing implements IStringSerializable +{ + DOWN(0, 1, -1, "down", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.Y, new Vec3i(0, -1, 0)), + UP(1, 0, -1, "up", EnumFacing.AxisDirection.POSITIVE, EnumFacing.Axis.Y, new Vec3i(0, 1, 0)), + NORTH(2, 3, 2, "north", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.Z, new Vec3i(0, 0, -1)), + SOUTH(3, 2, 0, "south", EnumFacing.AxisDirection.POSITIVE, EnumFacing.Axis.Z, new Vec3i(0, 0, 1)), + WEST(4, 5, 1, "west", EnumFacing.AxisDirection.NEGATIVE, EnumFacing.Axis.X, new Vec3i(-1, 0, 0)), + EAST(5, 4, 3, "east", EnumFacing.AxisDirection.POSITIVE, EnumFacing.Axis.X, new Vec3i(1, 0, 0)); + + /** Ordering index for D-U-N-S-W-E */ + private final int index; + /** Index of the opposite Facing in the VALUES array */ + private final int opposite; + /** Ordering index for the HORIZONTALS field (S-W-N-E) */ + private final int horizontalIndex; + private final String name; + private final EnumFacing.Axis axis; + private final EnumFacing.AxisDirection axisDirection; + /** Normalized Vector that points in the direction of this Facing */ + private final Vec3i directionVec; + /** All facings in D-U-N-S-W-E order */ + public static final EnumFacing[] VALUES = new EnumFacing[6]; + /** All Facings with horizontal axis in order S-W-N-E */ + public static final EnumFacing[] HORIZONTALS = new EnumFacing[4]; + private static final Map NAME_LOOKUP = Maps.newHashMap(); + + private EnumFacing(int indexIn, int oppositeIn, int horizontalIndexIn, String nameIn, EnumFacing.AxisDirection axisDirectionIn, EnumFacing.Axis axisIn, Vec3i directionVecIn) + { + this.index = indexIn; + this.horizontalIndex = horizontalIndexIn; + this.opposite = oppositeIn; + this.name = nameIn; + this.axis = axisIn; + this.axisDirection = axisDirectionIn; + this.directionVec = directionVecIn; + } + + /** + * Get the Index of this Facing (0-5). The order is D-U-N-S-W-E + */ + public int getIndex() + { + return this.index; + } + + /** + * Get the index of this horizontal facing (0-3). The order is S-W-N-E + */ + public int getHorizontalIndex() + { + return this.horizontalIndex; + } + + /** + * Get the AxisDirection of this Facing. + */ + public EnumFacing.AxisDirection getAxisDirection() + { + return this.axisDirection; + } + + /** + * Get the opposite Facing (e.g. DOWN => UP) + */ + public EnumFacing getOpposite() + { + return getFront(this.opposite); + } + + /** + * Rotate this Facing around the given axis clockwise. If this facing cannot be rotated around the given axis, + * returns this facing without rotating. + */ + public EnumFacing rotateAround(EnumFacing.Axis axis) + { + switch (axis) + { + case X: + + if (this != WEST && this != EAST) + { + return this.rotateX(); + } + + return this; + case Y: + + if (this != UP && this != DOWN) + { + return this.rotateY(); + } + + return this; + case Z: + + if (this != NORTH && this != SOUTH) + { + return this.rotateZ(); + } + + return this; + default: + throw new IllegalStateException("Unable to get CW facing for axis " + axis); + } + } + + /** + * Rotate this Facing around the Y axis clockwise (NORTH => EAST => SOUTH => WEST => NORTH) + */ + public EnumFacing rotateY() + { + switch (this) + { + case NORTH: + return EAST; + case EAST: + return SOUTH; + case SOUTH: + return WEST; + case WEST: + return NORTH; + default: + throw new IllegalStateException("Unable to get Y-rotated facing of " + this); + } + } + + /** + * Rotate this Facing around the X axis (NORTH => DOWN => SOUTH => UP => NORTH) + */ + private EnumFacing rotateX() + { + switch (this) + { + case NORTH: + return DOWN; + case EAST: + case WEST: + default: + throw new IllegalStateException("Unable to get X-rotated facing of " + this); + case SOUTH: + return UP; + case UP: + return NORTH; + case DOWN: + return SOUTH; + } + } + + /** + * Rotate this Facing around the Z axis (EAST => DOWN => WEST => UP => EAST) + */ + private EnumFacing rotateZ() + { + switch (this) + { + case EAST: + return DOWN; + case SOUTH: + default: + throw new IllegalStateException("Unable to get Z-rotated facing of " + this); + case WEST: + return UP; + case UP: + return EAST; + case DOWN: + return WEST; + } + } + + /** + * Rotate this Facing around the Y axis counter-clockwise (NORTH => WEST => SOUTH => EAST => NORTH) + */ + public EnumFacing rotateYCCW() + { + switch (this) + { + case NORTH: + return WEST; + case EAST: + return NORTH; + case SOUTH: + return EAST; + case WEST: + return SOUTH; + default: + throw new IllegalStateException("Unable to get CCW facing of " + this); + } + } + + /** + * Returns a offset that addresses the block in front of this facing. + */ + public int getFrontOffsetX() + { + return this.axis == EnumFacing.Axis.X ? this.axisDirection.getOffset() : 0; + } + + public int getFrontOffsetY() + { + return this.axis == EnumFacing.Axis.Y ? this.axisDirection.getOffset() : 0; + } + + /** + * Returns a offset that addresses the block in front of this facing. + */ + public int getFrontOffsetZ() + { + return this.axis == EnumFacing.Axis.Z ? this.axisDirection.getOffset() : 0; + } + + /** + * Same as getName, but does not override the method from Enum. + */ + public String getName2() + { + return this.name; + } + + public EnumFacing.Axis getAxis() + { + return this.axis; + } + + /** + * Get the facing specified by the given name + */ + @Nullable + public static EnumFacing byName(String name) + { + return name == null ? null : (EnumFacing)NAME_LOOKUP.get(name.toLowerCase(Locale.ROOT)); + } + + /** + * Get a Facing by it's index (0-5). The order is D-U-N-S-W-E. Named getFront for legacy reasons. + */ + public static EnumFacing getFront(int index) + { + return VALUES[MathHelper.abs(index % VALUES.length)]; + } + + /** + * Get a Facing by it's horizontal index (0-3). The order is S-W-N-E. + */ + public static EnumFacing getHorizontal(int horizontalIndexIn) + { + return HORIZONTALS[MathHelper.abs(horizontalIndexIn % HORIZONTALS.length)]; + } + + /** + * Get the Facing corresponding to the given angle (0-360). An angle of 0 is SOUTH, an angle of 90 would be WEST. + */ + public static EnumFacing fromAngle(double angle) + { + return getHorizontal(MathHelper.floor(angle / 90.0D + 0.5D) & 3); + } + + public float getHorizontalAngle() + { + return (float)((this.horizontalIndex & 3) * 90); + } + + /** + * Choose a random Facing using the given Random + */ + public static EnumFacing random(Random rand) + { + return values()[rand.nextInt(values().length)]; + } + + public static EnumFacing getFacingFromVector(float x, float y, float z) + { + EnumFacing enumfacing = NORTH; + float f = Float.MIN_VALUE; + + for (EnumFacing enumfacing1 : values()) + { + float f1 = x * (float)enumfacing1.directionVec.getX() + y * (float)enumfacing1.directionVec.getY() + z * (float)enumfacing1.directionVec.getZ(); + + if (f1 > f) + { + f = f1; + enumfacing = enumfacing1; + } + } + + return enumfacing; + } + + public String toString() + { + return this.name; + } + + public String getName() + { + return this.name; + } + + public static EnumFacing getFacingFromAxis(EnumFacing.AxisDirection axisDirectionIn, EnumFacing.Axis axisIn) + { + for (EnumFacing enumfacing : values()) + { + if (enumfacing.getAxisDirection() == axisDirectionIn && enumfacing.getAxis() == axisIn) + { + return enumfacing; + } + } + + throw new IllegalArgumentException("No such direction: " + axisDirectionIn + " " + axisIn); + } + + public static EnumFacing getDirectionFromEntityLiving(BlockPos pos, EntityLivingBase placer) + { + if (Math.abs(placer.posX - (double)((float)pos.getX() + 0.5F)) < 2.0D && Math.abs(placer.posZ - (double)((float)pos.getZ() + 0.5F)) < 2.0D) + { + double d0 = placer.posY + (double)placer.getEyeHeight(); + + if (d0 - (double)pos.getY() > 2.0D) + { + return UP; + } + + if ((double)pos.getY() - d0 > 0.0D) + { + return DOWN; + } + } + + return placer.getHorizontalFacing().getOpposite(); + } + + /** + * Get a normalized Vector that points in the direction of this Facing. + */ + public Vec3i getDirectionVec() + { + return this.directionVec; + } + + static + { + for (EnumFacing enumfacing : values()) + { + VALUES[enumfacing.index] = enumfacing; + + if (enumfacing.getAxis().isHorizontal()) + { + HORIZONTALS[enumfacing.horizontalIndex] = enumfacing; + } + + NAME_LOOKUP.put(enumfacing.getName2().toLowerCase(Locale.ROOT), enumfacing); + } + } + + public static enum Axis implements Predicate, IStringSerializable { + X("x", EnumFacing.Plane.HORIZONTAL), + Y("y", EnumFacing.Plane.VERTICAL), + Z("z", EnumFacing.Plane.HORIZONTAL); + + private static final Map NAME_LOOKUP = Maps.newHashMap(); + private final String name; + private final EnumFacing.Plane plane; + + private Axis(String name, EnumFacing.Plane plane) + { + this.name = name; + this.plane = plane; + } + + /** + * Get the axis specified by the given name + */ + @Nullable + public static EnumFacing.Axis byName(String name) + { + return name == null ? null : (EnumFacing.Axis)NAME_LOOKUP.get(name.toLowerCase(Locale.ROOT)); + } + + /** + * Like getName but doesn't override the method from Enum. + */ + public String getName2() + { + return this.name; + } + + /** + * If this Axis is on the vertical plane (Only true for Y) + */ + public boolean isVertical() + { + return this.plane == EnumFacing.Plane.VERTICAL; + } + + /** + * If this Axis is on the horizontal plane (true for X and Z) + */ + public boolean isHorizontal() + { + return this.plane == EnumFacing.Plane.HORIZONTAL; + } + + public String toString() + { + return this.name; + } + + public boolean apply(@Nullable EnumFacing p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getAxis() == this; + } + + /** + * Get this Axis' Plane (VERTICAL for Y, HORIZONTAL for X and Z) + */ + public EnumFacing.Plane getPlane() + { + return this.plane; + } + + public String getName() + { + return this.name; + } + + static + { + for (EnumFacing.Axis enumfacing$axis : values()) + { + NAME_LOOKUP.put(enumfacing$axis.getName2().toLowerCase(Locale.ROOT), enumfacing$axis); + } + } + } + + public static enum AxisDirection { + POSITIVE(1, "Towards positive"), + NEGATIVE(-1, "Towards negative"); + + private final int offset; + private final String description; + + private AxisDirection(int offset, String description) + { + this.offset = offset; + this.description = description; + } + + /** + * Get the offset for this AxisDirection. 1 for POSITIVE, -1 for NEGATIVE + */ + public int getOffset() + { + return this.offset; + } + + public String toString() + { + return this.description; + } + } + + public static enum Plane implements Predicate, Iterable { + HORIZONTAL, + VERTICAL; + + /** + * All EnumFacing values for this Plane + */ + public EnumFacing[] facings() + { + switch (this) + { + case HORIZONTAL: + return new EnumFacing[] {EnumFacing.NORTH, EnumFacing.EAST, EnumFacing.SOUTH, EnumFacing.WEST}; + case VERTICAL: + return new EnumFacing[] {EnumFacing.UP, EnumFacing.DOWN}; + default: + throw new Error("Someone's been tampering with the universe!"); + } + } + + /** + * Choose a random Facing from this Plane using the given Random + */ + public EnumFacing random(Random rand) + { + EnumFacing[] aenumfacing = this.facings(); + return aenumfacing[rand.nextInt(aenumfacing.length)]; + } + + public boolean apply(@Nullable EnumFacing p_apply_1_) + { + return p_apply_1_ != null && p_apply_1_.getAxis().getPlane() == this; + } + + public Iterator iterator() + { + return Iterators.forArray(this.facings()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumHand.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumHand.java new file mode 100644 index 0000000..1c15c80 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumHand.java @@ -0,0 +1,7 @@ +package net.minecraft.util; + +public enum EnumHand +{ + MAIN_HAND, + OFF_HAND; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumHandSide.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumHandSide.java new file mode 100644 index 0000000..fea4dcc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumHandSide.java @@ -0,0 +1,30 @@ +package net.minecraft.util; + +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public enum EnumHandSide +{ + LEFT(new TextComponentTranslation("options.mainHand.left", new Object[0])), + RIGHT(new TextComponentTranslation("options.mainHand.right", new Object[0])); + + private final ITextComponent handName; + + private EnumHandSide(ITextComponent nameIn) + { + this.handName = nameIn; + } + + @SideOnly(Side.CLIENT) + public EnumHandSide opposite() + { + return this == LEFT ? RIGHT : LEFT; + } + + public String toString() + { + return this.handName.getUnformattedText(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumParticleTypes.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumParticleTypes.java new file mode 100644 index 0000000..f258b3f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumParticleTypes.java @@ -0,0 +1,128 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +public enum EnumParticleTypes +{ + EXPLOSION_NORMAL("explode", 0, true), + EXPLOSION_LARGE("largeexplode", 1, true), + EXPLOSION_HUGE("hugeexplosion", 2, true), + FIREWORKS_SPARK("fireworksSpark", 3, false), + WATER_BUBBLE("bubble", 4, false), + WATER_SPLASH("splash", 5, false), + WATER_WAKE("wake", 6, false), + SUSPENDED("suspended", 7, false), + SUSPENDED_DEPTH("depthsuspend", 8, false), + CRIT("crit", 9, false), + CRIT_MAGIC("magicCrit", 10, false), + SMOKE_NORMAL("smoke", 11, false), + SMOKE_LARGE("largesmoke", 12, false), + SPELL("spell", 13, false), + SPELL_INSTANT("instantSpell", 14, false), + SPELL_MOB("mobSpell", 15, false), + SPELL_MOB_AMBIENT("mobSpellAmbient", 16, false), + SPELL_WITCH("witchMagic", 17, false), + DRIP_WATER("dripWater", 18, false), + DRIP_LAVA("dripLava", 19, false), + VILLAGER_ANGRY("angryVillager", 20, false), + VILLAGER_HAPPY("happyVillager", 21, false), + TOWN_AURA("townaura", 22, false), + NOTE("note", 23, false), + PORTAL("portal", 24, false), + ENCHANTMENT_TABLE("enchantmenttable", 25, false), + FLAME("flame", 26, false), + LAVA("lava", 27, false), + FOOTSTEP("footstep", 28, false), + CLOUD("cloud", 29, false), + REDSTONE("reddust", 30, false), + SNOWBALL("snowballpoof", 31, false), + SNOW_SHOVEL("snowshovel", 32, false), + SLIME("slime", 33, false), + HEART("heart", 34, false), + BARRIER("barrier", 35, false), + ITEM_CRACK("iconcrack", 36, false, 2), + BLOCK_CRACK("blockcrack", 37, false, 1), + BLOCK_DUST("blockdust", 38, false, 1), + WATER_DROP("droplet", 39, false), + ITEM_TAKE("take", 40, false), + MOB_APPEARANCE("mobappearance", 41, true), + DRAGON_BREATH("dragonbreath", 42, false), + END_ROD("endRod", 43, false), + DAMAGE_INDICATOR("damageIndicator", 44, true), + SWEEP_ATTACK("sweepAttack", 45, true), + FALLING_DUST("fallingdust", 46, false, 1), + TOTEM("totem", 47, false), + SPIT("spit", 48, true); + + private final String particleName; + private final int particleID; + private final boolean shouldIgnoreRange; + private final int argumentCount; + private static final Map PARTICLES = Maps.newHashMap(); + private static final Map BY_NAME = Maps.newHashMap(); + + private EnumParticleTypes(String particleNameIn, int particleIDIn, boolean shouldIgnoreRangeIn, int argumentCountIn) + { + this.particleName = particleNameIn; + this.particleID = particleIDIn; + this.shouldIgnoreRange = shouldIgnoreRangeIn; + this.argumentCount = argumentCountIn; + } + + private EnumParticleTypes(String particleNameIn, int particleIDIn, boolean shouldIgnoreRangeIn) + { + this(particleNameIn, particleIDIn, shouldIgnoreRangeIn, 0); + } + + public static Set getParticleNames() + { + return BY_NAME.keySet(); + } + + public String getParticleName() + { + return this.particleName; + } + + public int getParticleID() + { + return this.particleID; + } + + public int getArgumentCount() + { + return this.argumentCount; + } + + public boolean getShouldIgnoreRange() + { + return this.shouldIgnoreRange; + } + + /** + * Gets the relative EnumParticleTypes by id. + */ + @Nullable + public static EnumParticleTypes getParticleFromId(int particleId) + { + return PARTICLES.get(Integer.valueOf(particleId)); + } + + @Nullable + public static EnumParticleTypes getByName(String nameIn) + { + return BY_NAME.get(nameIn); + } + + static + { + for (EnumParticleTypes enumparticletypes : values()) + { + PARTICLES.put(Integer.valueOf(enumparticletypes.getParticleID()), enumparticletypes); + BY_NAME.put(enumparticletypes.getParticleName(), enumparticletypes); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/EnumTypeAdapterFactory.java b/build/tmp/recompileMc/sources/net/minecraft/util/EnumTypeAdapterFactory.java new file mode 100644 index 0000000..a0ef565 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/EnumTypeAdapterFactory.java @@ -0,0 +1,70 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.Locale; +import java.util.Map; +import javax.annotation.Nullable; + +public class EnumTypeAdapterFactory implements TypeAdapterFactory +{ + @Nullable + public TypeAdapter create(Gson p_create_1_, TypeToken p_create_2_) + { + Class oclass = (Class)p_create_2_.getRawType(); + + if (!oclass.isEnum()) + { + return null; + } + else + { + final Map map = Maps.newHashMap(); + + for (T t : oclass.getEnumConstants()) + { + map.put(this.getName(t), t); + } + + return new TypeAdapter() + { + public void write(JsonWriter p_write_1_, T p_write_2_) throws IOException + { + if (p_write_2_ == null) + { + p_write_1_.nullValue(); + } + else + { + p_write_1_.value(EnumTypeAdapterFactory.this.getName(p_write_2_)); + } + } + @Nullable + public T read(JsonReader p_read_1_) throws IOException + { + if (p_read_1_.peek() == JsonToken.NULL) + { + p_read_1_.nextNull(); + return (T)null; + } + else + { + return map.get(p_read_1_.nextString()); + } + } + }; + } + } + + private String getName(Object objectIn) + { + return objectIn instanceof Enum ? ((Enum)objectIn).name().toLowerCase(Locale.ROOT) : objectIn.toString().toLowerCase(Locale.ROOT); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/FoodStats.java b/build/tmp/recompileMc/sources/net/minecraft/util/FoodStats.java new file mode 100644 index 0000000..8fbc61d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/FoodStats.java @@ -0,0 +1,171 @@ +package net.minecraft.util; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.EnumDifficulty; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class FoodStats +{ + /** The player's food level. */ + private int foodLevel = 20; + /** The player's food saturation. */ + private float foodSaturationLevel = 5.0F; + /** The player's food exhaustion. */ + private float foodExhaustionLevel; + /** The player's food timer value. */ + private int foodTimer; + private int prevFoodLevel = 20; + + /** + * Add food stats. + */ + public void addStats(int foodLevelIn, float foodSaturationModifier) + { + this.foodLevel = Math.min(foodLevelIn + this.foodLevel, 20); + this.foodSaturationLevel = Math.min(this.foodSaturationLevel + (float)foodLevelIn * foodSaturationModifier * 2.0F, (float)this.foodLevel); + } + + public void addStats(ItemFood foodItem, ItemStack stack) + { + this.addStats(foodItem.getHealAmount(stack), foodItem.getSaturationModifier(stack)); + } + + /** + * Handles the food game logic. + */ + public void onUpdate(EntityPlayer player) + { + EnumDifficulty enumdifficulty = player.world.getDifficulty(); + this.prevFoodLevel = this.foodLevel; + + if (this.foodExhaustionLevel > 4.0F) + { + this.foodExhaustionLevel -= 4.0F; + + if (this.foodSaturationLevel > 0.0F) + { + this.foodSaturationLevel = Math.max(this.foodSaturationLevel - 1.0F, 0.0F); + } + else if (enumdifficulty != EnumDifficulty.PEACEFUL) + { + this.foodLevel = Math.max(this.foodLevel - 1, 0); + } + } + + boolean flag = player.world.getGameRules().getBoolean("naturalRegeneration"); + + if (flag && this.foodSaturationLevel > 0.0F && player.shouldHeal() && this.foodLevel >= 20) + { + ++this.foodTimer; + + if (this.foodTimer >= 10) + { + float f = Math.min(this.foodSaturationLevel, 6.0F); + player.heal(f / 6.0F); + this.addExhaustion(f); + this.foodTimer = 0; + } + } + else if (flag && this.foodLevel >= 18 && player.shouldHeal()) + { + ++this.foodTimer; + + if (this.foodTimer >= 80) + { + player.heal(1.0F); + this.addExhaustion(6.0F); + this.foodTimer = 0; + } + } + else if (this.foodLevel <= 0) + { + ++this.foodTimer; + + if (this.foodTimer >= 80) + { + if (player.getHealth() > 10.0F || enumdifficulty == EnumDifficulty.HARD || player.getHealth() > 1.0F && enumdifficulty == EnumDifficulty.NORMAL) + { + player.attackEntityFrom(DamageSource.STARVE, 1.0F); + } + + this.foodTimer = 0; + } + } + else + { + this.foodTimer = 0; + } + } + + /** + * Reads the food data for the player. + */ + public void readNBT(NBTTagCompound compound) + { + if (compound.hasKey("foodLevel", 99)) + { + this.foodLevel = compound.getInteger("foodLevel"); + this.foodTimer = compound.getInteger("foodTickTimer"); + this.foodSaturationLevel = compound.getFloat("foodSaturationLevel"); + this.foodExhaustionLevel = compound.getFloat("foodExhaustionLevel"); + } + } + + /** + * Writes the food data for the player. + */ + public void writeNBT(NBTTagCompound compound) + { + compound.setInteger("foodLevel", this.foodLevel); + compound.setInteger("foodTickTimer", this.foodTimer); + compound.setFloat("foodSaturationLevel", this.foodSaturationLevel); + compound.setFloat("foodExhaustionLevel", this.foodExhaustionLevel); + } + + /** + * Get the player's food level. + */ + public int getFoodLevel() + { + return this.foodLevel; + } + + /** + * Get whether the player must eat food. + */ + public boolean needFood() + { + return this.foodLevel < 20; + } + + /** + * adds input to foodExhaustionLevel to a max of 40 + */ + public void addExhaustion(float exhaustion) + { + this.foodExhaustionLevel = Math.min(this.foodExhaustionLevel + exhaustion, 40.0F); + } + + /** + * Get the player's food saturation level. + */ + public float getSaturationLevel() + { + return this.foodSaturationLevel; + } + + public void setFoodLevel(int foodLevelIn) + { + this.foodLevel = foodLevelIn; + } + + @SideOnly(Side.CLIENT) + public void setFoodSaturationLevel(float foodSaturationLevelIn) + { + this.foodSaturationLevel = foodSaturationLevelIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/FrameTimer.java b/build/tmp/recompileMc/sources/net/minecraft/util/FrameTimer.java new file mode 100644 index 0000000..19f9112 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/FrameTimer.java @@ -0,0 +1,82 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class FrameTimer +{ + /** An array with the last 240 frames */ + private final long[] frames = new long[240]; + /** The last index used when 240 frames have been set */ + private int lastIndex; + /** A counter */ + private int counter; + /** The next index to use in the array */ + private int index; + + /** + * Add a frame at the next index in the array frames + */ + public void addFrame(long runningTime) + { + this.frames[this.index] = runningTime; + ++this.index; + + if (this.index == 240) + { + this.index = 0; + } + + if (this.counter < 240) + { + this.lastIndex = 0; + ++this.counter; + } + else + { + this.lastIndex = this.parseIndex(this.index + 1); + } + } + + /** + * Return a value from time and multiplier to display the lagometer + */ + public int getLagometerValue(long time, int multiplier) + { + double d0 = (double)time / 1.6666666E7D; + return (int)(d0 * (double)multiplier); + } + + /** + * Return the last index used when 240 frames have been set + */ + public int getLastIndex() + { + return this.lastIndex; + } + + /** + * Return the index of the next frame in the array + */ + public int getIndex() + { + return this.index; + } + + /** + * Change 240 to 0 + */ + public int parseIndex(int rawIndex) + { + return rawIndex % 240; + } + + /** + * Return the array of frames + */ + public long[] getFrames() + { + return this.frames; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/HttpUtil.java b/build/tmp/recompileMc/sources/net/minecraft/util/HttpUtil.java new file mode 100644 index 0000000..f52d773 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/HttpUtil.java @@ -0,0 +1,324 @@ +package net.minecraft.util; + +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.Proxy; +import java.net.ServerSocket; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; +import javax.annotation.Nullable; +import net.minecraft.util.text.translation.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class HttpUtil +{ + public static final ListeningExecutorService DOWNLOADER_EXECUTOR = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool((new ThreadFactoryBuilder()).setDaemon(true).setNameFormat("Downloader %d").build())); + /** The number of download threads that we have started so far. */ + private static final AtomicInteger DOWNLOAD_THREADS_STARTED = new AtomicInteger(0); + private static final Logger LOGGER = LogManager.getLogger(); + + /** + * Builds an encoded HTTP POST content string from a string map + */ + public static String buildPostString(Map data) + { + StringBuilder stringbuilder = new StringBuilder(); + + for (Entry entry : data.entrySet()) + { + if (stringbuilder.length() > 0) + { + stringbuilder.append('&'); + } + + try + { + stringbuilder.append(URLEncoder.encode(entry.getKey(), "UTF-8")); + } + catch (UnsupportedEncodingException unsupportedencodingexception1) + { + unsupportedencodingexception1.printStackTrace(); + } + + if (entry.getValue() != null) + { + stringbuilder.append('='); + + try + { + stringbuilder.append(URLEncoder.encode(entry.getValue().toString(), "UTF-8")); + } + catch (UnsupportedEncodingException unsupportedencodingexception) + { + unsupportedencodingexception.printStackTrace(); + } + } + } + + return stringbuilder.toString(); + } + + /** + * Sends a POST to the given URL using the map as the POST args + */ + public static String postMap(URL url, Map data, boolean skipLoggingErrors, @Nullable Proxy proxyIn) + { + return post(url, buildPostString(data), skipLoggingErrors, proxyIn); + } + + /** + * Sends a POST to the given URL + */ + private static String post(URL url, String content, boolean skipLoggingErrors, @Nullable Proxy p_151225_3_) + { + try + { + if (p_151225_3_ == null) + { + p_151225_3_ = Proxy.NO_PROXY; + } + + HttpURLConnection httpurlconnection = (HttpURLConnection)url.openConnection(p_151225_3_); + httpurlconnection.setRequestMethod("POST"); + httpurlconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + httpurlconnection.setRequestProperty("Content-Length", "" + content.getBytes().length); + httpurlconnection.setRequestProperty("Content-Language", "en-US"); + httpurlconnection.setUseCaches(false); + httpurlconnection.setDoInput(true); + httpurlconnection.setDoOutput(true); + DataOutputStream dataoutputstream = new DataOutputStream(httpurlconnection.getOutputStream()); + dataoutputstream.writeBytes(content); + dataoutputstream.flush(); + dataoutputstream.close(); + BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(httpurlconnection.getInputStream())); + StringBuffer stringbuffer = new StringBuffer(); + String s; + + while ((s = bufferedreader.readLine()) != null) + { + stringbuffer.append(s); + stringbuffer.append('\r'); + } + + bufferedreader.close(); + return stringbuffer.toString(); + } + catch (Exception exception) + { + if (!skipLoggingErrors) + { + LOGGER.error("Could not post to {}", url, exception); + } + + return ""; + } + } + + @SideOnly(Side.CLIENT) + public static ListenableFuture downloadResourcePack(final File saveFile, final String packUrl, final Map p_180192_2_, final int maxSize, @Nullable final IProgressUpdate p_180192_4_, final Proxy p_180192_5_) + { + ListenableFuture listenablefuture = DOWNLOADER_EXECUTOR.submit(new Runnable() + { + public void run() + { + HttpURLConnection httpurlconnection = null; + InputStream inputstream = null; + OutputStream outputstream = null; + + if (p_180192_4_ != null) + { + p_180192_4_.resetProgressAndMessage(I18n.translateToLocal("resourcepack.downloading")); + p_180192_4_.displayLoadingString(I18n.translateToLocal("resourcepack.requesting")); + } + + try + { + try + { + byte[] abyte = new byte[4096]; + URL url = new URL(packUrl); + httpurlconnection = (HttpURLConnection)url.openConnection(p_180192_5_); + httpurlconnection.setInstanceFollowRedirects(true); + float f = 0.0F; + float f1 = (float)p_180192_2_.entrySet().size(); + + for (Entry entry : p_180192_2_.entrySet()) + { + httpurlconnection.setRequestProperty(entry.getKey(), entry.getValue()); + + if (p_180192_4_ != null) + { + p_180192_4_.setLoadingProgress((int)(++f / f1 * 100.0F)); + } + } + + inputstream = httpurlconnection.getInputStream(); + f1 = (float)httpurlconnection.getContentLength(); + int i = httpurlconnection.getContentLength(); + + if (p_180192_4_ != null) + { + p_180192_4_.displayLoadingString(I18n.translateToLocalFormatted("resourcepack.progress", String.format("%.2f", f1 / 1000.0F / 1000.0F))); + } + + if (saveFile.exists()) + { + long j = saveFile.length(); + + if (j == (long)i) + { + if (p_180192_4_ != null) + { + p_180192_4_.setDoneWorking(); + } + + return; + } + + HttpUtil.LOGGER.warn("Deleting {} as it does not match what we currently have ({} vs our {}).", saveFile, Integer.valueOf(i), Long.valueOf(j)); + FileUtils.deleteQuietly(saveFile); + } + else if (saveFile.getParentFile() != null) + { + saveFile.getParentFile().mkdirs(); + } + + outputstream = new DataOutputStream(new FileOutputStream(saveFile)); + + if (maxSize > 0 && f1 > (float)maxSize) + { + if (p_180192_4_ != null) + { + p_180192_4_.setDoneWorking(); + } + + throw new IOException("Filesize is bigger than maximum allowed (file is " + f + ", limit is " + maxSize + ")"); + } + + int k; + + while ((k = inputstream.read(abyte)) >= 0) + { + f += (float)k; + + if (p_180192_4_ != null) + { + p_180192_4_.setLoadingProgress((int)(f / f1 * 100.0F)); + } + + if (maxSize > 0 && f > (float)maxSize) + { + if (p_180192_4_ != null) + { + p_180192_4_.setDoneWorking(); + } + + throw new IOException("Filesize was bigger than maximum allowed (got >= " + f + ", limit was " + maxSize + ")"); + } + + if (Thread.interrupted()) + { + HttpUtil.LOGGER.error("INTERRUPTED"); + + if (p_180192_4_ != null) + { + p_180192_4_.setDoneWorking(); + } + + return; + } + + outputstream.write(abyte, 0, k); + } + + if (p_180192_4_ != null) + { + p_180192_4_.setDoneWorking(); + return; + } + } + catch (Throwable throwable) + { + throwable.printStackTrace(); + + if (httpurlconnection != null) + { + InputStream inputstream1 = httpurlconnection.getErrorStream(); + + try + { + HttpUtil.LOGGER.error(IOUtils.toString(inputstream1)); + } + catch (IOException ioexception) + { + ioexception.printStackTrace(); + } + } + + if (p_180192_4_ != null) + { + p_180192_4_.setDoneWorking(); + return; + } + } + } + finally + { + IOUtils.closeQuietly(inputstream); + IOUtils.closeQuietly(outputstream); + } + } + }); + return (ListenableFuture) listenablefuture; + } + + @SideOnly(Side.CLIENT) + public static int getSuitableLanPort() throws IOException + { + ServerSocket serversocket = null; + int i = -1; + + try + { + serversocket = new ServerSocket(0); + i = serversocket.getLocalPort(); + } + finally + { + try + { + if (serversocket != null) + { + serversocket.close(); + } + } + catch (IOException var8) + { + ; + } + } + + return i; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IJsonSerializable.java b/build/tmp/recompileMc/sources/net/minecraft/util/IJsonSerializable.java new file mode 100644 index 0000000..dd74eb1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IJsonSerializable.java @@ -0,0 +1,13 @@ +package net.minecraft.util; + +import com.google.gson.JsonElement; + +public interface IJsonSerializable +{ + void fromJson(JsonElement json); + + /** + * Gets the JsonElement that can be serialized. + */ + JsonElement getSerializableElement(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IObjectIntIterable.java b/build/tmp/recompileMc/sources/net/minecraft/util/IObjectIntIterable.java new file mode 100644 index 0000000..bf0d6a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IObjectIntIterable.java @@ -0,0 +1,5 @@ +package net.minecraft.util; + +public interface IObjectIntIterable extends Iterable +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IProgressUpdate.java b/build/tmp/recompileMc/sources/net/minecraft/util/IProgressUpdate.java new file mode 100644 index 0000000..55c4883 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IProgressUpdate.java @@ -0,0 +1,32 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IProgressUpdate +{ + /** + * Shows the 'Saving level' string. + */ + void displaySavingString(String message); + + /** + * this string, followed by "working..." and then the "% complete" are the 3 lines shown. This resets progress to 0, + * and the WorkingString to "working...". + */ + @SideOnly(Side.CLIENT) + void resetProgressAndMessage(String message); + + /** + * Displays a string on the loading screen supposed to indicate what is being done currently. + */ + void displayLoadingString(String message); + + /** + * Updates the progress bar on the loading screen to the specified amount. + */ + void setLoadingProgress(int progress); + + @SideOnly(Side.CLIENT) + void setDoneWorking(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IStringSerializable.java b/build/tmp/recompileMc/sources/net/minecraft/util/IStringSerializable.java new file mode 100644 index 0000000..f9a31ef --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IStringSerializable.java @@ -0,0 +1,6 @@ +package net.minecraft.util; + +public interface IStringSerializable +{ + String getName(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ITabCompleter.java b/build/tmp/recompileMc/sources/net/minecraft/util/ITabCompleter.java new file mode 100644 index 0000000..e7a9c87 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ITabCompleter.java @@ -0,0 +1,13 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public interface ITabCompleter +{ + /** + * Sets the list of tab completions, as long as they were previously requested. + */ + void setCompletions(String... newCompletions); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IThreadListener.java b/build/tmp/recompileMc/sources/net/minecraft/util/IThreadListener.java new file mode 100644 index 0000000..d95c3a4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IThreadListener.java @@ -0,0 +1,10 @@ +package net.minecraft.util; + +import com.google.common.util.concurrent.ListenableFuture; + +public interface IThreadListener +{ + ListenableFuture addScheduledTask(Runnable runnableToSchedule); + + boolean isCallingFromMinecraftThread(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ITickable.java b/build/tmp/recompileMc/sources/net/minecraft/util/ITickable.java new file mode 100644 index 0000000..26b3a35 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ITickable.java @@ -0,0 +1,9 @@ +package net.minecraft.util; + +public interface ITickable +{ + /** + * Like the old updateEntity(), except more generic. + */ + void update(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IntHashMap.java b/build/tmp/recompileMc/sources/net/minecraft/util/IntHashMap.java new file mode 100644 index 0000000..07634de --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IntHashMap.java @@ -0,0 +1,300 @@ +package net.minecraft.util; + +import javax.annotation.Nullable; + +public class IntHashMap +{ + /** An array of HashEntries representing the heads of hash slot lists */ + private transient IntHashMap.Entry[] slots = new IntHashMap.Entry[16]; + /** The number of items stored in this map */ + private transient int count; + /** The grow threshold */ + private int threshold = 12; + /** The scale factor used to determine when to grow the table */ + private final float growFactor = 0.75F; + + /** + * Makes the passed in integer suitable for hashing by a number of shifts + */ + private static int computeHash(int integer) + { + integer = integer ^ integer >>> 20 ^ integer >>> 12; + return integer ^ integer >>> 7 ^ integer >>> 4; + } + + /** + * Computes the index of the slot for the hash and slot count passed in. + */ + private static int getSlotIndex(int hash, int slotCount) + { + return hash & slotCount - 1; + } + + /** + * Returns the object associated to a key + */ + @Nullable + public V lookup(int hashEntry) + { + int i = computeHash(hashEntry); + + for (IntHashMap.Entry entry = this.slots[getSlotIndex(i, this.slots.length)]; entry != null; entry = entry.nextEntry) + { + if (entry.hashEntry == hashEntry) + { + return entry.valueEntry; + } + } + + return (V)null; + } + + /** + * Returns true if this hash table contains the specified item. + */ + public boolean containsItem(int hashEntry) + { + return this.lookupEntry(hashEntry) != null; + } + + /** + * Returns the internal entry for a key + */ + @Nullable + final IntHashMap.Entry lookupEntry(int hashEntry) + { + int i = computeHash(hashEntry); + + for (IntHashMap.Entry entry = this.slots[getSlotIndex(i, this.slots.length)]; entry != null; entry = entry.nextEntry) + { + if (entry.hashEntry == hashEntry) + { + return entry; + } + } + + return null; + } + + /** + * Adds a key and associated value to this map + */ + public void addKey(int hashEntry, V valueEntry) + { + int i = computeHash(hashEntry); + int j = getSlotIndex(i, this.slots.length); + + for (IntHashMap.Entry entry = this.slots[j]; entry != null; entry = entry.nextEntry) + { + if (entry.hashEntry == hashEntry) + { + entry.valueEntry = valueEntry; + return; + } + } + + this.insert(i, hashEntry, valueEntry, j); + } + + /** + * Increases the number of hash slots + */ + private void grow(int p_76047_1_) + { + IntHashMap.Entry[] entry = this.slots; + int i = entry.length; + + if (i == 1073741824) + { + this.threshold = Integer.MAX_VALUE; + } + else + { + IntHashMap.Entry[] entry1 = new IntHashMap.Entry[p_76047_1_]; + this.copyTo(entry1); + this.slots = entry1; + this.threshold = (int)((float)p_76047_1_ * this.growFactor); + } + } + + /** + * Copies the hash slots to a new array + */ + private void copyTo(IntHashMap.Entry[] p_76048_1_) + { + IntHashMap.Entry[] entry = this.slots; + int i = p_76048_1_.length; + + for (int j = 0; j < entry.length; ++j) + { + IntHashMap.Entry entry1 = entry[j]; + + if (entry1 != null) + { + entry[j] = null; + + while (true) + { + IntHashMap.Entry entry2 = entry1.nextEntry; + int k = getSlotIndex(entry1.slotHash, i); + entry1.nextEntry = p_76048_1_[k]; + p_76048_1_[k] = entry1; + entry1 = entry2; + + if (entry2 == null) + { + break; + } + } + } + } + } + + /** + * Removes the specified object from the map and returns it + */ + @Nullable + public V removeObject(int o) + { + IntHashMap.Entry entry = this.removeEntry(o); + return (V)(entry == null ? null : entry.valueEntry); + } + + /** + * Removes the specified entry from the map and returns it + */ + @Nullable + final IntHashMap.Entry removeEntry(int p_76036_1_) + { + int i = computeHash(p_76036_1_); + int j = getSlotIndex(i, this.slots.length); + IntHashMap.Entry entry = this.slots[j]; + IntHashMap.Entry entry1; + IntHashMap.Entry entry2; + + for (entry1 = entry; entry1 != null; entry1 = entry2) + { + entry2 = entry1.nextEntry; + + if (entry1.hashEntry == p_76036_1_) + { + --this.count; + + if (entry == entry1) + { + this.slots[j] = entry2; + } + else + { + entry.nextEntry = entry2; + } + + return entry1; + } + + entry = entry1; + } + + return entry1; + } + + /** + * Removes all entries from the map + */ + public void clearMap() + { + IntHashMap.Entry[] entry = this.slots; + + for (int i = 0; i < entry.length; ++i) + { + entry[i] = null; + } + + this.count = 0; + } + + /** + * Adds an object to a slot + */ + private void insert(int p_76040_1_, int p_76040_2_, V p_76040_3_, int p_76040_4_) + { + IntHashMap.Entry entry = this.slots[p_76040_4_]; + this.slots[p_76040_4_] = new IntHashMap.Entry(p_76040_1_, p_76040_2_, p_76040_3_, entry); + + if (this.count++ >= this.threshold) + { + this.grow(2 * this.slots.length); + } + } + + static class Entry + { + /** The hash code of this entry */ + final int hashEntry; + /** The object stored in this entry */ + V valueEntry; + /** The next entry in this slot */ + IntHashMap.Entry nextEntry; + /** The id of the hash slot computed from the hash */ + final int slotHash; + + Entry(int p_i1552_1_, int p_i1552_2_, V p_i1552_3_, IntHashMap.Entry p_i1552_4_) + { + this.valueEntry = p_i1552_3_; + this.nextEntry = p_i1552_4_; + this.hashEntry = p_i1552_2_; + this.slotHash = p_i1552_1_; + } + + /** + * Returns the hash code for this entry + */ + public final int getHash() + { + return this.hashEntry; + } + + /** + * Returns the object stored in this entry + */ + public final V getValue() + { + return this.valueEntry; + } + + public final boolean equals(Object p_equals_1_) + { + if (!(p_equals_1_ instanceof IntHashMap.Entry)) + { + return false; + } + else + { + IntHashMap.Entry entry = (IntHashMap.Entry)p_equals_1_; + + if (this.hashEntry == entry.hashEntry) + { + Object object = this.getValue(); + Object object1 = entry.getValue(); + + if (object == object1 || object != null && object.equals(object1)) + { + return true; + } + } + + return false; + } + } + + public final int hashCode() + { + return IntHashMap.computeHash(this.hashEntry); + } + + public final String toString() + { + return this.getHash() + "=" + this.getValue(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IntIdentityHashBiMap.java b/build/tmp/recompileMc/sources/net/minecraft/util/IntIdentityHashBiMap.java new file mode 100644 index 0000000..89d201a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IntIdentityHashBiMap.java @@ -0,0 +1,192 @@ +package net.minecraft.util; + +import com.google.common.base.Predicates; +import com.google.common.collect.Iterators; +import java.util.Arrays; +import java.util.Iterator; +import javax.annotation.Nullable; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class IntIdentityHashBiMap implements IObjectIntIterable +{ + private static final Object EMPTY = null; + private K[] values; + private int[] intKeys; + private K[] byId; + private int nextFreeIndex; + private int mapSize; + + public IntIdentityHashBiMap(int initialCapacity) + { + initialCapacity = (int)((float)initialCapacity / 0.8F); + this.values = (K[])(new Object[initialCapacity]); + this.intKeys = new int[initialCapacity]; + this.byId = (K[])(new Object[initialCapacity]); + } + + public int getId(@Nullable K p_186815_1_) + { + return this.getValue(this.getIndex(p_186815_1_, this.hashObject(p_186815_1_))); + } + + @Nullable + public K get(int idIn) + { + return (K)(idIn >= 0 && idIn < this.byId.length ? this.byId[idIn] : null); + } + + private int getValue(int p_186805_1_) + { + return p_186805_1_ == -1 ? -1 : this.intKeys[p_186805_1_]; + } + + /** + * Adds the given object while expanding this map + */ + public int add(K objectIn) + { + int i = this.nextId(); + this.put(objectIn, i); + return i; + } + + private int nextId() + { + while (this.nextFreeIndex < this.byId.length && this.byId[this.nextFreeIndex] != null) + { + ++this.nextFreeIndex; + } + + return this.nextFreeIndex; + } + + /** + * Rehashes the map to the new capacity + */ + private void grow(int capacity) + { + K[] ak = this.values; + int[] aint = this.intKeys; + this.values = (K[])(new Object[capacity]); + this.intKeys = new int[capacity]; + this.byId = (K[])(new Object[capacity]); + this.nextFreeIndex = 0; + this.mapSize = 0; + + for (int i = 0; i < ak.length; ++i) + { + if (ak[i] != null) + { + this.put(ak[i], aint[i]); + } + } + } + + /** + * Puts the provided object value with the integer key. + */ + public void put(K objectIn, int intKey) + { + int i = Math.max(intKey, this.mapSize + 1); + + if ((float)i >= (float)this.values.length * 0.8F) + { + int j; + + for (j = this.values.length << 1; j < intKey; j <<= 1) + { + ; + } + + this.grow(j); + } + + int k = this.findEmpty(this.hashObject(objectIn)); + this.values[k] = objectIn; + this.intKeys[k] = intKey; + this.byId[intKey] = objectIn; + ++this.mapSize; + + if (intKey == this.nextFreeIndex) + { + ++this.nextFreeIndex; + } + } + + private int hashObject(@Nullable K obectIn) + { + return (MathHelper.hash(System.identityHashCode(obectIn)) & Integer.MAX_VALUE) % this.values.length; + } + + private int getIndex(@Nullable K objectIn, int p_186816_2_) + { + for (int i = p_186816_2_; i < this.values.length; ++i) + { + if (this.values[i] == objectIn) + { + return i; + } + + if (this.values[i] == EMPTY) + { + return -1; + } + } + + for (int j = 0; j < p_186816_2_; ++j) + { + if (this.values[j] == objectIn) + { + return j; + } + + if (this.values[j] == EMPTY) + { + return -1; + } + } + + return -1; + } + + private int findEmpty(int p_186806_1_) + { + for (int i = p_186806_1_; i < this.values.length; ++i) + { + if (this.values[i] == EMPTY) + { + return i; + } + } + + for (int j = 0; j < p_186806_1_; ++j) + { + if (this.values[j] == EMPTY) + { + return j; + } + } + + throw new RuntimeException("Overflowed :("); + } + + public Iterator iterator() + { + return Iterators.filter(Iterators.forArray(this.byId), Predicates.notNull()); + } + + public void clear() + { + Arrays.fill(this.values, (Object)null); + Arrays.fill(this.byId, (Object)null); + this.nextFreeIndex = 0; + this.mapSize = 0; + } + + public int size() + { + return this.mapSize; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/IntegerCache.java b/build/tmp/recompileMc/sources/net/minecraft/util/IntegerCache.java new file mode 100644 index 0000000..57fa7c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/IntegerCache.java @@ -0,0 +1,28 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class IntegerCache +{ + private static final Integer[] CACHE = new Integer[65535]; + + /** + * Get an Integer from the cache if it exists, otherwise return {@code Integer.valueOf()} + */ + public static Integer getInteger(int value) + { + return value > 0 && value < CACHE.length ? CACHE[value] : value; + } + + static + { + int i = 0; + + for (int j = CACHE.length; i < j; ++i) + { + CACHE[i] = i; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/JsonUtils.java b/build/tmp/recompileMc/sources/net/minecraft/util/JsonUtils.java new file mode 100644 index 0000000..5204565 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/JsonUtils.java @@ -0,0 +1,493 @@ +package net.minecraft.util; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.lang.reflect.Type; +import javax.annotation.Nullable; +import net.minecraft.item.Item; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class JsonUtils +{ + /** + * Does the given JsonObject contain a string field with the given name? + */ + public static boolean isString(JsonObject json, String memberName) + { + return !isJsonPrimitive(json, memberName) ? false : json.getAsJsonPrimitive(memberName).isString(); + } + + /** + * Is the given JsonElement a string? + */ + @SideOnly(Side.CLIENT) + public static boolean isString(JsonElement json) + { + return !json.isJsonPrimitive() ? false : json.getAsJsonPrimitive().isString(); + } + + public static boolean isNumber(JsonElement json) + { + return !json.isJsonPrimitive() ? false : json.getAsJsonPrimitive().isNumber(); + } + + @SideOnly(Side.CLIENT) + public static boolean isBoolean(JsonObject json, String memberName) + { + return !isJsonPrimitive(json, memberName) ? false : json.getAsJsonPrimitive(memberName).isBoolean(); + } + + /** + * Does the given JsonObject contain an array field with the given name? + */ + public static boolean isJsonArray(JsonObject json, String memberName) + { + return !hasField(json, memberName) ? false : json.get(memberName).isJsonArray(); + } + + /** + * Does the given JsonObject contain a field with the given name whose type is primitive (String, Java primitive, or + * Java primitive wrapper)? + */ + public static boolean isJsonPrimitive(JsonObject json, String memberName) + { + return !hasField(json, memberName) ? false : json.get(memberName).isJsonPrimitive(); + } + + /** + * Does the given JsonObject contain a field with the given name? + */ + public static boolean hasField(JsonObject json, String memberName) + { + if (json == null) + { + return false; + } + else + { + return json.get(memberName) != null; + } + } + + /** + * Gets the string value of the given JsonElement. Expects the second parameter to be the name of the element's + * field if an error message needs to be thrown. + */ + public static String getString(JsonElement json, String memberName) + { + if (json.isJsonPrimitive()) + { + return json.getAsString(); + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be a string, was " + toString(json)); + } + } + + /** + * Gets the string value of the field on the JsonObject with the given name. + */ + public static String getString(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getString(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find a string"); + } + } + + /** + * Gets the string value of the field on the JsonObject with the given name, or the given default value if the field + * is missing. + */ + public static String getString(JsonObject json, String memberName, String fallback) + { + return json.has(memberName) ? getString(json.get(memberName), memberName) : fallback; + } + + public static Item getItem(JsonElement json, String memberName) + { + if (json.isJsonPrimitive()) + { + String s = json.getAsString(); + Item item = Item.getByNameOrId(s); + + if (item == null) + { + throw new JsonSyntaxException("Expected " + memberName + " to be an item, was unknown string '" + s + "'"); + } + else + { + return item; + } + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be an item, was " + toString(json)); + } + } + + public static Item getItem(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getItem(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find an item"); + } + } + + /** + * Gets the boolean value of the given JsonElement. Expects the second parameter to be the name of the element's + * field if an error message needs to be thrown. + */ + public static boolean getBoolean(JsonElement json, String memberName) + { + if (json.isJsonPrimitive()) + { + return json.getAsBoolean(); + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be a Boolean, was " + toString(json)); + } + } + + /** + * Gets the boolean value of the field on the JsonObject with the given name. + */ + public static boolean getBoolean(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getBoolean(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find a Boolean"); + } + } + + /** + * Gets the boolean value of the field on the JsonObject with the given name, or the given default value if the + * field is missing. + */ + public static boolean getBoolean(JsonObject json, String memberName, boolean fallback) + { + return json.has(memberName) ? getBoolean(json.get(memberName), memberName) : fallback; + } + + /** + * Gets the float value of the given JsonElement. Expects the second parameter to be the name of the element's + * field if an error message needs to be thrown. + */ + public static float getFloat(JsonElement json, String memberName) + { + if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isNumber()) + { + return json.getAsFloat(); + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be a Float, was " + toString(json)); + } + } + + /** + * Gets the float value of the field on the JsonObject with the given name. + */ + public static float getFloat(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getFloat(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find a Float"); + } + } + + /** + * Gets the float value of the field on the JsonObject with the given name, or the given default value if the field + * is missing. + */ + public static float getFloat(JsonObject json, String memberName, float fallback) + { + return json.has(memberName) ? getFloat(json.get(memberName), memberName) : fallback; + } + + /** + * Gets the integer value of the given JsonElement. Expects the second parameter to be the name of the element's + * field if an error message needs to be thrown. + */ + public static int getInt(JsonElement json, String memberName) + { + if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isNumber()) + { + return json.getAsInt(); + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be a Int, was " + toString(json)); + } + } + + /** + * Gets the integer value of the field on the JsonObject with the given name. + */ + public static int getInt(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getInt(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find a Int"); + } + } + + /** + * Gets the integer value of the field on the JsonObject with the given name, or the given default value if the + * field is missing. + */ + public static int getInt(JsonObject json, String memberName, int fallback) + { + return json.has(memberName) ? getInt(json.get(memberName), memberName) : fallback; + } + + /** + * Gets the given JsonElement as a JsonObject. Expects the second parameter to be the name of the element's field + * if an error message needs to be thrown. + */ + public static JsonObject getJsonObject(JsonElement json, String memberName) + { + if (json.isJsonObject()) + { + return json.getAsJsonObject(); + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be a JsonObject, was " + toString(json)); + } + } + + public static JsonObject getJsonObject(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getJsonObject(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find a JsonObject"); + } + } + + /** + * Gets the JsonObject field on the JsonObject with the given name, or the given default value if the field is + * missing. + */ + public static JsonObject getJsonObject(JsonObject json, String memberName, JsonObject fallback) + { + return json.has(memberName) ? getJsonObject(json.get(memberName), memberName) : fallback; + } + + /** + * Gets the given JsonElement as a JsonArray. Expects the second parameter to be the name of the element's field if + * an error message needs to be thrown. + */ + public static JsonArray getJsonArray(JsonElement json, String memberName) + { + if (json.isJsonArray()) + { + return json.getAsJsonArray(); + } + else + { + throw new JsonSyntaxException("Expected " + memberName + " to be a JsonArray, was " + toString(json)); + } + } + + /** + * Gets the JsonArray field on the JsonObject with the given name. + */ + public static JsonArray getJsonArray(JsonObject json, String memberName) + { + if (json.has(memberName)) + { + return getJsonArray(json.get(memberName), memberName); + } + else + { + throw new JsonSyntaxException("Missing " + memberName + ", expected to find a JsonArray"); + } + } + + /** + * Gets the JsonArray field on the JsonObject with the given name, or the given default value if the field is + * missing. + */ + public static JsonArray getJsonArray(JsonObject json, String memberName, @Nullable JsonArray fallback) + { + return json.has(memberName) ? getJsonArray(json.get(memberName), memberName) : fallback; + } + + public static T deserializeClass(@Nullable JsonElement json, String memberName, JsonDeserializationContext context, Class adapter) + { + if (json != null) + { + return (T)context.deserialize(json, adapter); + } + else + { + throw new JsonSyntaxException("Missing " + memberName); + } + } + + public static T deserializeClass(JsonObject json, String memberName, JsonDeserializationContext context, Class adapter) + { + if (json.has(memberName)) + { + return (T)deserializeClass(json.get(memberName), memberName, context, adapter); + } + else + { + throw new JsonSyntaxException("Missing " + memberName); + } + } + + public static T deserializeClass(JsonObject json, String memberName, T fallback, JsonDeserializationContext context, Class adapter) + { + return (T)(json.has(memberName) ? deserializeClass(json.get(memberName), memberName, context, adapter) : fallback); + } + + /** + * Gets a human-readable description of the given JsonElement's type. For example: "a number (4)" + */ + public static String toString(JsonElement json) + { + String s = org.apache.commons.lang3.StringUtils.abbreviateMiddle(String.valueOf((Object)json), "...", 10); + + if (json == null) + { + return "null (missing)"; + } + else if (json.isJsonNull()) + { + return "null (json)"; + } + else if (json.isJsonArray()) + { + return "an array (" + s + ")"; + } + else if (json.isJsonObject()) + { + return "an object (" + s + ")"; + } + else + { + if (json.isJsonPrimitive()) + { + JsonPrimitive jsonprimitive = json.getAsJsonPrimitive(); + + if (jsonprimitive.isNumber()) + { + return "a number (" + s + ")"; + } + + if (jsonprimitive.isBoolean()) + { + return "a boolean (" + s + ")"; + } + } + + return s; + } + } + + @Nullable + public static T gsonDeserialize(Gson gsonIn, Reader readerIn, Class adapter, boolean lenient) + { + try + { + JsonReader jsonreader = new JsonReader(readerIn); + jsonreader.setLenient(lenient); + return (T)gsonIn.getAdapter(adapter).read(jsonreader); + } + catch (IOException ioexception) + { + throw new JsonParseException(ioexception); + } + } + + @Nullable + public static T fromJson(Gson p_193838_0_, Reader p_193838_1_, Type p_193838_2_, boolean p_193838_3_) + { + try + { + JsonReader jsonreader = new JsonReader(p_193838_1_); + jsonreader.setLenient(p_193838_3_); + return (T)p_193838_0_.getAdapter(TypeToken.get(p_193838_2_)).read(jsonreader); + } + catch (IOException ioexception) + { + throw new JsonParseException(ioexception); + } + } + + @Nullable + public static T fromJson(Gson p_193837_0_, String p_193837_1_, Type p_193837_2_, boolean p_193837_3_) + { + return (T)fromJson(p_193837_0_, new StringReader(p_193837_1_), p_193837_2_, p_193837_3_); + } + + @Nullable + public static T gsonDeserialize(Gson gsonIn, String json, Class adapter, boolean lenient) + { + return (T)gsonDeserialize(gsonIn, new StringReader(json), adapter, lenient); + } + + @Nullable + public static T fromJson(Gson p_193841_0_, Reader p_193841_1_, Type p_193841_2_) + { + return (T)fromJson(p_193841_0_, p_193841_1_, p_193841_2_, false); + } + + @Nullable + public static T gsonDeserialize(Gson p_193840_0_, String p_193840_1_, Type p_193840_2_) + { + return (T)fromJson(p_193840_0_, p_193840_1_, p_193840_2_, false); + } + + @Nullable + public static T fromJson(Gson p_193839_0_, Reader p_193839_1_, Class p_193839_2_) + { + return (T)gsonDeserialize(p_193839_0_, p_193839_1_, p_193839_2_, false); + } + + @Nullable + public static T gsonDeserialize(Gson gsonIn, String json, Class adapter) + { + return (T)gsonDeserialize(gsonIn, json, adapter, false); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/LazyLoadBase.java b/build/tmp/recompileMc/sources/net/minecraft/util/LazyLoadBase.java new file mode 100644 index 0000000..4226a60 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/LazyLoadBase.java @@ -0,0 +1,20 @@ +package net.minecraft.util; + +public abstract class LazyLoadBase +{ + private T value; + private boolean isLoaded; + + public T getValue() + { + if (!this.isLoaded) + { + this.isLoaded = true; + this.value = (T)this.load(); + } + + return this.value; + } + + protected abstract T load(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/LoggingPrintStream.java b/build/tmp/recompileMc/sources/net/minecraft/util/LoggingPrintStream.java new file mode 100644 index 0000000..cf62a12 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/LoggingPrintStream.java @@ -0,0 +1,33 @@ +package net.minecraft.util; + +import java.io.OutputStream; +import java.io.PrintStream; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class LoggingPrintStream extends PrintStream +{ + protected static final Logger LOGGER = LogManager.getLogger(); + protected final String domain; + + public LoggingPrintStream(String domainIn, OutputStream outStream) + { + super(outStream); + this.domain = domainIn; + } + + public void println(String p_println_1_) + { + this.logString(p_println_1_); + } + + public void println(Object p_println_1_) + { + this.logString(String.valueOf(p_println_1_)); + } + + protected void logString(String string) + { + LOGGER.info("[{}]: {}", this.domain, string); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/LowerStringMap.java b/build/tmp/recompileMc/sources/net/minecraft/util/LowerStringMap.java new file mode 100644 index 0000000..fff2122 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/LowerStringMap.java @@ -0,0 +1,76 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +public class LowerStringMap implements Map +{ + private final Map internalMap = Maps.newLinkedHashMap(); + + public int size() + { + return this.internalMap.size(); + } + + public boolean isEmpty() + { + return this.internalMap.isEmpty(); + } + + public boolean containsKey(Object p_containsKey_1_) + { + return this.internalMap.containsKey(p_containsKey_1_.toString().toLowerCase(Locale.ROOT)); + } + + public boolean containsValue(Object p_containsValue_1_) + { + return this.internalMap.containsKey(p_containsValue_1_); + } + + public V get(Object p_get_1_) + { + return this.internalMap.get(p_get_1_.toString().toLowerCase(Locale.ROOT)); + } + + public V put(String p_put_1_, V p_put_2_) + { + return this.internalMap.put(p_put_1_.toLowerCase(Locale.ROOT), p_put_2_); + } + + public V remove(Object p_remove_1_) + { + return this.internalMap.remove(p_remove_1_.toString().toLowerCase(Locale.ROOT)); + } + + public void putAll(Map p_putAll_1_) + { + for (Entry entry : p_putAll_1_.entrySet()) + { + this.put(entry.getKey(), entry.getValue()); + } + } + + public void clear() + { + this.internalMap.clear(); + } + + public Set keySet() + { + return this.internalMap.keySet(); + } + + public Collection values() + { + return this.internalMap.values(); + } + + public Set> entrySet() + { + return this.internalMap.entrySet(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/MapPopulator.java b/build/tmp/recompileMc/sources/net/minecraft/util/MapPopulator.java new file mode 100644 index 0000000..1e66120 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/MapPopulator.java @@ -0,0 +1,39 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; + +public class MapPopulator +{ + /** + * Create a Map from the given keys and values. This method creates a LinkedHashMap. + */ + public static Map createMap(Iterable keys, Iterable values) + { + return populateMap(keys, values, Maps.newLinkedHashMap()); + } + + /** + * Populate the given Map with the given keys and values. + */ + public static Map populateMap(Iterable keys, Iterable values, Map map) + { + Iterator iterator = values.iterator(); + + for (K k : keys) + { + map.put(k, iterator.next()); + } + + if (iterator.hasNext()) + { + throw new NoSuchElementException(); + } + else + { + return map; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/MinecraftError.java b/build/tmp/recompileMc/sources/net/minecraft/util/MinecraftError.java new file mode 100644 index 0000000..dfe0bd7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/MinecraftError.java @@ -0,0 +1,9 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MinecraftError extends Error +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/Mirror.java b/build/tmp/recompileMc/sources/net/minecraft/util/Mirror.java new file mode 100644 index 0000000..4a0d72c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/Mirror.java @@ -0,0 +1,99 @@ +package net.minecraft.util; + +public enum Mirror +{ + NONE("no_mirror"), + LEFT_RIGHT("mirror_left_right"), + FRONT_BACK("mirror_front_back"); + + private final String name; + private static final String[] mirrorNames = new String[values().length]; + + private Mirror(String nameIn) + { + this.name = nameIn; + } + + /** + * Mirrors the given rotation like specified by this mirror. rotations start at 0 and go up to rotationCount-1. 0 is + * front, rotationCount/2 is back. + */ + public int mirrorRotation(int rotationIn, int rotationCount) + { + int i = rotationCount / 2; + int j = rotationIn > i ? rotationIn - rotationCount : rotationIn; + + switch (this) + { + case FRONT_BACK: + return (rotationCount - j) % rotationCount; + case LEFT_RIGHT: + return (i - j + rotationCount) % rotationCount; + default: + return rotationIn; + } + } + + /** + * Determines the rotation that is equivalent to this mirror if the rotating object faces in the given direction + */ + public Rotation toRotation(EnumFacing facing) + { + EnumFacing.Axis enumfacing$axis = facing.getAxis(); + return (this != LEFT_RIGHT || enumfacing$axis != EnumFacing.Axis.Z) && (this != FRONT_BACK || enumfacing$axis != EnumFacing.Axis.X) ? Rotation.NONE : Rotation.CLOCKWISE_180; + } + + /** + * Mirror the given facing according to this mirror + */ + public EnumFacing mirror(EnumFacing facing) + { + switch (this) + { + case FRONT_BACK: + + if (facing == EnumFacing.WEST) + { + return EnumFacing.EAST; + } + else + { + if (facing == EnumFacing.EAST) + { + return EnumFacing.WEST; + } + + return facing; + } + + case LEFT_RIGHT: + + if (facing == EnumFacing.NORTH) + { + return EnumFacing.SOUTH; + } + else + { + if (facing == EnumFacing.SOUTH) + { + return EnumFacing.NORTH; + } + + return facing; + } + + default: + return facing; + } + } + + static + { + int i = 0; + + for (Mirror mirror : values()) + { + mirrorNames[i++] = mirror.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/MouseFilter.java b/build/tmp/recompileMc/sources/net/minecraft/util/MouseFilter.java new file mode 100644 index 0000000..a2cc355 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/MouseFilter.java @@ -0,0 +1,37 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MouseFilter +{ + private float targetValue; + private float remainingValue; + private float lastAmount; + + /** + * Smooths mouse input + */ + public float smooth(float p_76333_1_, float p_76333_2_) + { + this.targetValue += p_76333_1_; + p_76333_1_ = (this.targetValue - this.remainingValue) * p_76333_2_; + this.lastAmount += (p_76333_1_ - this.lastAmount) * 0.5F; + + if (p_76333_1_ > 0.0F && p_76333_1_ > this.lastAmount || p_76333_1_ < 0.0F && p_76333_1_ < this.lastAmount) + { + p_76333_1_ = this.lastAmount; + } + + this.remainingValue += p_76333_1_; + return p_76333_1_; + } + + public void reset() + { + this.targetValue = 0.0F; + this.remainingValue = 0.0F; + this.lastAmount = 0.0F; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/MouseHelper.java b/build/tmp/recompileMc/sources/net/minecraft/util/MouseHelper.java new file mode 100644 index 0000000..d601153 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/MouseHelper.java @@ -0,0 +1,41 @@ +package net.minecraft.util; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; + +@SideOnly(Side.CLIENT) +public class MouseHelper +{ + /** Mouse delta X this frame */ + public int deltaX; + /** Mouse delta Y this frame */ + public int deltaY; + + /** + * Grabs the mouse cursor it doesn't move and isn't seen. + */ + public void grabMouseCursor() + { + if (Boolean.parseBoolean(System.getProperty("fml.noGrab","false"))) return; + Mouse.setGrabbed(true); + this.deltaX = 0; + this.deltaY = 0; + } + + /** + * Ungrabs the mouse cursor so it can be moved and set it to the center of the screen + */ + public void ungrabMouseCursor() + { + Mouse.setCursorPosition(Display.getWidth() / 2, Display.getHeight() / 2); + Mouse.setGrabbed(false); + } + + public void mouseXYChange() + { + this.deltaX = Mouse.getDX(); + this.deltaY = Mouse.getDY(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/MovementInput.java b/build/tmp/recompileMc/sources/net/minecraft/util/MovementInput.java new file mode 100644 index 0000000..e2cc046 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/MovementInput.java @@ -0,0 +1,28 @@ +package net.minecraft.util; + +import net.minecraft.util.math.Vec2f; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MovementInput +{ + /** The speed at which the player is strafing. Postive numbers to the left and negative to the right. */ + public float moveStrafe; + public float moveForward; + public boolean forwardKeyDown; + public boolean backKeyDown; + public boolean leftKeyDown; + public boolean rightKeyDown; + public boolean jump; + public boolean sneak; + + public void updatePlayerMoveState() + { + } + + public Vec2f getMoveVector() + { + return new Vec2f(this.moveStrafe, this.moveForward); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/MovementInputFromOptions.java b/build/tmp/recompileMc/sources/net/minecraft/util/MovementInputFromOptions.java new file mode 100644 index 0000000..5c23627 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/MovementInputFromOptions.java @@ -0,0 +1,71 @@ +package net.minecraft.util; + +import net.minecraft.client.settings.GameSettings; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MovementInputFromOptions extends MovementInput +{ + private final GameSettings gameSettings; + + public MovementInputFromOptions(GameSettings gameSettingsIn) + { + this.gameSettings = gameSettingsIn; + } + + public void updatePlayerMoveState() + { + this.moveStrafe = 0.0F; + this.moveForward = 0.0F; + + if (this.gameSettings.keyBindForward.isKeyDown()) + { + ++this.moveForward; + this.forwardKeyDown = true; + } + else + { + this.forwardKeyDown = false; + } + + if (this.gameSettings.keyBindBack.isKeyDown()) + { + --this.moveForward; + this.backKeyDown = true; + } + else + { + this.backKeyDown = false; + } + + if (this.gameSettings.keyBindLeft.isKeyDown()) + { + ++this.moveStrafe; + this.leftKeyDown = true; + } + else + { + this.leftKeyDown = false; + } + + if (this.gameSettings.keyBindRight.isKeyDown()) + { + --this.moveStrafe; + this.rightKeyDown = true; + } + else + { + this.rightKeyDown = false; + } + + this.jump = this.gameSettings.keyBindJump.isKeyDown(); + this.sneak = this.gameSettings.keyBindSneak.isKeyDown(); + + if (this.sneak) + { + this.moveStrafe = (float)((double)this.moveStrafe * 0.3D); + this.moveForward = (float)((double)this.moveForward * 0.3D); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/NonNullList.java b/build/tmp/recompileMc/sources/net/minecraft/util/NonNullList.java new file mode 100644 index 0000000..0dc82c4 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/NonNullList.java @@ -0,0 +1,90 @@ +package net.minecraft.util; + +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.apache.commons.lang3.Validate; + +public class NonNullList extends AbstractList +{ + private final List delegate; + private final E defaultElement; + + public static NonNullList create() + { + return new NonNullList(); + } + + /** + * Creates a new NonNullList with fixed size, and filled with the object passed. + */ + public static NonNullList withSize(int size, E fill) + { + Validate.notNull(fill); + Object[] aobject = new Object[size]; + Arrays.fill(aobject, fill); + return new NonNullList(Arrays.asList((E[])aobject), fill); + } + + public static NonNullList from(E defaultElementIn, E... elements) + { + return new NonNullList(Arrays.asList(elements), defaultElementIn); + } + + protected NonNullList() + { + this(new ArrayList(), null); + } + + protected NonNullList(List delegateIn, @Nullable E listType) + { + this.delegate = delegateIn; + this.defaultElement = listType; + } + + @Nonnull + public E get(int p_get_1_) + { + return this.delegate.get(p_get_1_); + } + + public E set(int p_set_1_, E p_set_2_) + { + Validate.notNull(p_set_2_); + return this.delegate.set(p_set_1_, p_set_2_); + } + + public void add(int p_add_1_, E p_add_2_) + { + Validate.notNull(p_add_2_); + this.delegate.add(p_add_1_, p_add_2_); + } + + public E remove(int p_remove_1_) + { + return this.delegate.remove(p_remove_1_); + } + + public int size() + { + return this.delegate.size(); + } + + public void clear() + { + if (this.defaultElement == null) + { + super.clear(); + } + else + { + for (int i = 0; i < this.size(); ++i) + { + this.set(i, this.defaultElement); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ObjectIntIdentityMap.java b/build/tmp/recompileMc/sources/net/minecraft/util/ObjectIntIdentityMap.java new file mode 100644 index 0000000..3eb23af --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ObjectIntIdentityMap.java @@ -0,0 +1,60 @@ +package net.minecraft.util; + +import com.google.common.base.Predicates; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; + +public class ObjectIntIdentityMap implements IObjectIntIterable +{ + protected final IdentityHashMap identityMap; + protected final List objectList; + + public ObjectIntIdentityMap() + { + this(512); + } + + public ObjectIntIdentityMap(int expectedSize) + { + this.objectList = Lists.newArrayListWithExpectedSize(expectedSize); + this.identityMap = new IdentityHashMap(expectedSize); + } + + public void put(T key, int value) + { + this.identityMap.put(key, Integer.valueOf(value)); + + while (this.objectList.size() <= value) + { + this.objectList.add(null); + } + + this.objectList.set(value, key); + } + + public int get(T key) + { + Integer integer = this.identityMap.get(key); + return integer == null ? -1 : integer.intValue(); + } + + @Nullable + public final T getByValue(int value) + { + return (T)(value >= 0 && value < this.objectList.size() ? this.objectList.get(value) : null); + } + + public Iterator iterator() + { + return Iterators.filter(this.objectList.iterator(), Predicates.notNull()); + } + + public int size() + { + return this.identityMap.size(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ReportedException.java b/build/tmp/recompileMc/sources/net/minecraft/util/ReportedException.java new file mode 100644 index 0000000..1e63920 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ReportedException.java @@ -0,0 +1,32 @@ +package net.minecraft.util; + +import net.minecraft.crash.CrashReport; + +public class ReportedException extends RuntimeException +{ + /** The crash report associated with this exception */ + private final CrashReport crashReport; + + public ReportedException(CrashReport report) + { + this.crashReport = report; + } + + /** + * Gets the CrashReport wrapped by this exception. + */ + public CrashReport getCrashReport() + { + return this.crashReport; + } + + public Throwable getCause() + { + return this.crashReport.getCrashCause(); + } + + public String getMessage() + { + return this.crashReport.getDescription(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ResourceLocation.java b/build/tmp/recompileMc/sources/net/minecraft/util/ResourceLocation.java new file mode 100644 index 0000000..d0d528a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ResourceLocation.java @@ -0,0 +1,119 @@ +package net.minecraft.util; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import java.util.Locale; +import org.apache.commons.lang3.Validate; + +public class ResourceLocation implements Comparable +{ + protected final String resourceDomain; + protected final String resourcePath; + + protected ResourceLocation(int unused, String... resourceName) + { + this.resourceDomain = org.apache.commons.lang3.StringUtils.isEmpty(resourceName[0]) ? "minecraft" : resourceName[0].toLowerCase(Locale.ROOT); + this.resourcePath = resourceName[1].toLowerCase(Locale.ROOT); + Validate.notNull(this.resourcePath); + } + + public ResourceLocation(String resourceName) + { + this(0, splitObjectName(resourceName)); + } + + public ResourceLocation(String resourceDomainIn, String resourcePathIn) + { + this(0, resourceDomainIn, resourcePathIn); + } + + /** + * Splits an object name (such as minecraft:apple) into the domain and path parts and returns these as an array of + * length 2. If no colon is present in the passed value the returned array will contain {null, toSplit}. + */ + public static String[] splitObjectName(String toSplit) + { + String[] astring = new String[] {"minecraft", toSplit}; + int i = toSplit.indexOf(58); + + if (i >= 0) + { + astring[1] = toSplit.substring(i + 1, toSplit.length()); + + if (i > 1) + { + astring[0] = toSplit.substring(0, i); + } + } + + return astring; + } + + public String getResourcePath() + { + return this.resourcePath; + } + + public String getResourceDomain() + { + return this.resourceDomain; + } + + public String toString() + { + return this.resourceDomain + ':' + this.resourcePath; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof ResourceLocation)) + { + return false; + } + else + { + ResourceLocation resourcelocation = (ResourceLocation)p_equals_1_; + return this.resourceDomain.equals(resourcelocation.resourceDomain) && this.resourcePath.equals(resourcelocation.resourcePath); + } + } + + public int hashCode() + { + return 31 * this.resourceDomain.hashCode() + this.resourcePath.hashCode(); + } + + public int compareTo(ResourceLocation p_compareTo_1_) + { + int i = this.resourceDomain.compareTo(p_compareTo_1_.resourceDomain); + + if (i == 0) + { + i = this.resourcePath.compareTo(p_compareTo_1_.resourcePath); + } + + return i; + } + + public static class Serializer implements JsonDeserializer, JsonSerializer + { + public ResourceLocation deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + return new ResourceLocation(JsonUtils.getString(p_deserialize_1_, "location")); + } + + public JsonElement serialize(ResourceLocation p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + return new JsonPrimitive(p_serialize_1_.toString()); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/Rotation.java b/build/tmp/recompileMc/sources/net/minecraft/util/Rotation.java new file mode 100644 index 0000000..a48dfc9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/Rotation.java @@ -0,0 +1,115 @@ +package net.minecraft.util; + +public enum Rotation +{ + NONE("rotate_0"), + CLOCKWISE_90("rotate_90"), + CLOCKWISE_180("rotate_180"), + COUNTERCLOCKWISE_90("rotate_270"); + + private final String name; + private static final String[] rotationNames = new String[values().length]; + + private Rotation(String nameIn) + { + this.name = nameIn; + } + + public Rotation add(Rotation rotation) + { + switch (rotation) + { + case CLOCKWISE_180: + + switch (this) + { + case NONE: + return CLOCKWISE_180; + case CLOCKWISE_90: + return COUNTERCLOCKWISE_90; + case CLOCKWISE_180: + return NONE; + case COUNTERCLOCKWISE_90: + return CLOCKWISE_90; + } + + case COUNTERCLOCKWISE_90: + + switch (this) + { + case NONE: + return COUNTERCLOCKWISE_90; + case CLOCKWISE_90: + return NONE; + case CLOCKWISE_180: + return CLOCKWISE_90; + case COUNTERCLOCKWISE_90: + return CLOCKWISE_180; + } + + case CLOCKWISE_90: + + switch (this) + { + case NONE: + return CLOCKWISE_90; + case CLOCKWISE_90: + return CLOCKWISE_180; + case CLOCKWISE_180: + return COUNTERCLOCKWISE_90; + case COUNTERCLOCKWISE_90: + return NONE; + } + + default: + return this; + } + } + + public EnumFacing rotate(EnumFacing facing) + { + if (facing.getAxis() == EnumFacing.Axis.Y) + { + return facing; + } + else + { + switch (this) + { + case CLOCKWISE_90: + return facing.rotateY(); + case CLOCKWISE_180: + return facing.getOpposite(); + case COUNTERCLOCKWISE_90: + return facing.rotateYCCW(); + default: + return facing; + } + } + } + + public int rotate(int p_185833_1_, int p_185833_2_) + { + switch (this) + { + case CLOCKWISE_90: + return (p_185833_1_ + p_185833_2_ / 4) % p_185833_2_; + case CLOCKWISE_180: + return (p_185833_1_ + p_185833_2_ / 2) % p_185833_2_; + case COUNTERCLOCKWISE_90: + return (p_185833_1_ + p_185833_2_ * 3 / 4) % p_185833_2_; + default: + return p_185833_1_; + } + } + + static + { + int i = 0; + + for (Rotation rotation : values()) + { + rotationNames[i++] = rotation.name; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ScreenShotHelper.java b/build/tmp/recompileMc/sources/net/minecraft/util/ScreenShotHelper.java new file mode 100644 index 0000000..9998aca --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ScreenShotHelper.java @@ -0,0 +1,143 @@ +package net.minecraft.util; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.nio.IntBuffer; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.shader.Framebuffer; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.lwjgl.BufferUtils; + +@SideOnly(Side.CLIENT) +public class ScreenShotHelper +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); + /** A buffer to hold pixel values returned by OpenGL. */ + private static IntBuffer pixelBuffer; + /** The built-up array that contains all the pixel values returned by OpenGL. */ + private static int[] pixelValues; + + /** + * Saves a screenshot in the game directory with a time-stamped filename. + * Returns an ITextComponent indicating the success/failure of the saving. + */ + public static ITextComponent saveScreenshot(File gameDirectory, int width, int height, Framebuffer buffer) + { + return saveScreenshot(gameDirectory, (String)null, width, height, buffer); + } + + /** + * Saves a screenshot in the game directory with the given file name (or null to generate a time-stamped name). + * Returns an ITextComponent indicating the success/failure of the saving. + */ + public static ITextComponent saveScreenshot(File gameDirectory, @Nullable String screenshotName, int width, int height, Framebuffer buffer) + { + try + { + File file1 = new File(gameDirectory, "screenshots"); + file1.mkdir(); + BufferedImage bufferedimage = createScreenshot(width, height, buffer); + File file2; + + if (screenshotName == null) + { + file2 = getTimestampedPNGFileForDirectory(file1); + } + else + { + file2 = new File(file1, screenshotName); + } + + file2 = file2.getCanonicalFile(); // FORGE: Fix errors on Windows with paths that include \.\ + net.minecraftforge.client.event.ScreenshotEvent event = net.minecraftforge.client.ForgeHooksClient.onScreenshot(bufferedimage, file2); + if (event.isCanceled()) return event.getCancelMessage(); else file2 = event.getScreenshotFile(); + ImageIO.write(bufferedimage, "png", file2); + ITextComponent itextcomponent = new TextComponentString(file2.getName()); + itextcomponent.getStyle().setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_FILE, file2.getAbsolutePath())); + itextcomponent.getStyle().setUnderlined(Boolean.valueOf(true)); + if (event.getResultMessage() != null) return event.getResultMessage(); + return new TextComponentTranslation("screenshot.success", new Object[] {itextcomponent}); + } + catch (Exception exception) + { + LOGGER.warn("Couldn't save screenshot", (Throwable)exception); + return new TextComponentTranslation("screenshot.failure", new Object[] {exception.getMessage()}); + } + } + + public static BufferedImage createScreenshot(int width, int height, Framebuffer framebufferIn) + { + if (OpenGlHelper.isFramebufferEnabled()) + { + width = framebufferIn.framebufferTextureWidth; + height = framebufferIn.framebufferTextureHeight; + } + + int i = width * height; + + if (pixelBuffer == null || pixelBuffer.capacity() < i) + { + pixelBuffer = BufferUtils.createIntBuffer(i); + pixelValues = new int[i]; + } + + GlStateManager.glPixelStorei(3333, 1); + GlStateManager.glPixelStorei(3317, 1); + pixelBuffer.clear(); + + if (OpenGlHelper.isFramebufferEnabled()) + { + GlStateManager.bindTexture(framebufferIn.framebufferTexture); + GlStateManager.glGetTexImage(3553, 0, 32993, 33639, pixelBuffer); + } + else + { + GlStateManager.glReadPixels(0, 0, width, height, 32993, 33639, pixelBuffer); + } + + pixelBuffer.get(pixelValues); + TextureUtil.processPixelValues(pixelValues, width, height); + BufferedImage bufferedimage = new BufferedImage(width, height, 1); + bufferedimage.setRGB(0, 0, width, height, pixelValues, 0, width); + return bufferedimage; + } + + /** + * Creates a unique PNG file in the given directory named by a timestamp. Handles cases where the timestamp alone + * is not enough to create a uniquely named file, though it still might suffer from an unlikely race condition where + * the filename was unique when this method was called, but another process or thread created a file at the same + * path immediately after this method returned. + */ + private static File getTimestampedPNGFileForDirectory(File gameDirectory) + { + String s = DATE_FORMAT.format(new Date()).toString(); + int i = 1; + + while (true) + { + File file1 = new File(gameDirectory, s + (i == 1 ? "" : "_" + i) + ".png"); + + if (!file1.exists()) + { + return file1; + } + + ++i; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/ServerRecipeBookHelper.java b/build/tmp/recompileMc/sources/net/minecraft/util/ServerRecipeBookHelper.java new file mode 100644 index 0000000..ce214f1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/ServerRecipeBookHelper.java @@ -0,0 +1,312 @@ +package net.minecraft.util; + +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; +import it.unimi.dsi.fastutil.ints.IntListIterator; +import java.util.Iterator; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.util.RecipeItemHelper; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ContainerPlayer; +import net.minecraft.inventory.ContainerWorkbench; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.network.play.server.SPacketPlaceGhostRecipe; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ServerRecipeBookHelper +{ + private final Logger field_194330_a = LogManager.getLogger(); + private final RecipeItemHelper field_194331_b = new RecipeItemHelper(); + private EntityPlayerMP field_194332_c; + private IRecipe field_194333_d; + private boolean field_194334_e; + private InventoryCraftResult field_194335_f; + private InventoryCrafting field_194336_g; + private List field_194337_h; + + public void func_194327_a(EntityPlayerMP p_194327_1_, @Nullable IRecipe p_194327_2_, boolean p_194327_3_) + { + if (p_194327_2_ != null && p_194327_1_.getRecipeBook().isUnlocked(p_194327_2_)) + { + this.field_194332_c = p_194327_1_; + this.field_194333_d = p_194327_2_; + this.field_194334_e = p_194327_3_; + this.field_194337_h = p_194327_1_.openContainer.inventorySlots; + Container container = p_194327_1_.openContainer; + this.field_194335_f = null; + this.field_194336_g = null; + + if (container instanceof ContainerWorkbench) + { + this.field_194335_f = ((ContainerWorkbench)container).craftResult; + this.field_194336_g = ((ContainerWorkbench)container).craftMatrix; + } + else if (container instanceof ContainerPlayer) + { + this.field_194335_f = ((ContainerPlayer)container).craftResult; + this.field_194336_g = ((ContainerPlayer)container).craftMatrix; + } + else if (container instanceof net.minecraftforge.common.crafting.IRecipeContainer) + { + this.field_194335_f = ((net.minecraftforge.common.crafting.IRecipeContainer)container).getCraftResult(); + this.field_194336_g = ((net.minecraftforge.common.crafting.IRecipeContainer)container).getCraftMatrix(); + } + + if (this.field_194335_f != null && this.field_194336_g != null) + { + if (this.func_194328_c() || p_194327_1_.isCreative()) + { + this.field_194331_b.clear(); + p_194327_1_.inventory.fillStackedContents(this.field_194331_b, false); + this.field_194336_g.fillStackedContents(this.field_194331_b); + + if (this.field_194331_b.canCraft(p_194327_2_, (IntList)null)) + { + this.func_194329_b(); + } + else + { + this.func_194326_a(); + p_194327_1_.connection.sendPacket(new SPacketPlaceGhostRecipe(p_194327_1_.openContainer.windowId, p_194327_2_)); + } + + p_194327_1_.inventory.markDirty(); + } + } + } + } + + private void func_194326_a() + { + InventoryPlayer inventoryplayer = this.field_194332_c.inventory; + + for (int i = 0; i < this.field_194336_g.getSizeInventory(); ++i) + { + ItemStack itemstack = this.field_194336_g.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + while (itemstack.getCount() > 0) + { + int j = inventoryplayer.storeItemStack(itemstack); + + if (j == -1) + { + j = inventoryplayer.getFirstEmptyStack(); + } + + ItemStack itemstack1 = itemstack.copy(); + itemstack1.setCount(1); + inventoryplayer.add(j, itemstack1); + this.field_194336_g.decrStackSize(i, 1); + } + } + } + + this.field_194336_g.clear(); + this.field_194335_f.clear(); + } + + private void func_194329_b() + { + boolean flag = this.field_194333_d.matches(this.field_194336_g, this.field_194332_c.world); + int i = this.field_194331_b.getBiggestCraftableStack(this.field_194333_d, (IntList)null); + + if (flag) + { + boolean flag1 = true; + + for (int j = 0; j < this.field_194336_g.getSizeInventory(); ++j) + { + ItemStack itemstack = this.field_194336_g.getStackInSlot(j); + + if (!itemstack.isEmpty() && Math.min(i, itemstack.getMaxStackSize()) > itemstack.getCount()) + { + flag1 = false; + } + } + + if (flag1) + { + return; + } + } + + int i1 = this.func_194324_a(i, flag); + IntList intlist = new IntArrayList(); + + if (this.field_194331_b.canCraft(this.field_194333_d, intlist, i1)) + { + int j1 = i1; + IntListIterator intlistiterator = intlist.iterator(); + + while (intlistiterator.hasNext()) + { + int k = ((Integer)intlistiterator.next()).intValue(); + int l = RecipeItemHelper.unpack(k).getMaxStackSize(); + + if (l < j1) + { + j1 = l; + } + } + + if (this.field_194331_b.canCraft(this.field_194333_d, intlist, j1)) + { + this.func_194326_a(); + this.func_194323_a(j1, intlist); + } + } + } + + private int func_194324_a(int p_194324_1_, boolean p_194324_2_) + { + int i = 1; + + if (this.field_194334_e) + { + i = p_194324_1_; + } + else if (p_194324_2_) + { + i = 64; + + for (int j = 0; j < this.field_194336_g.getSizeInventory(); ++j) + { + ItemStack itemstack = this.field_194336_g.getStackInSlot(j); + + if (!itemstack.isEmpty() && i > itemstack.getCount()) + { + i = itemstack.getCount(); + } + } + + if (i < 64) + { + ++i; + } + } + + return i; + } + + private void func_194323_a(int p_194323_1_, IntList p_194323_2_) + { + int i = this.field_194336_g.getWidth(); + int j = this.field_194336_g.getHeight(); + + if (this.field_194333_d instanceof net.minecraftforge.common.crafting.IShapedRecipe) + { + net.minecraftforge.common.crafting.IShapedRecipe shapedrecipes = (net.minecraftforge.common.crafting.IShapedRecipe)this.field_194333_d; + i = shapedrecipes.getRecipeWidth(); + j = shapedrecipes.getRecipeHeight(); + } + + int j1 = 1; + Iterator iterator = p_194323_2_.iterator(); + + for (int k = 0; k < this.field_194336_g.getWidth() && j != k; ++k) + { + for (int l = 0; l < this.field_194336_g.getHeight(); ++l) + { + if (i == l || !iterator.hasNext()) + { + j1 += this.field_194336_g.getWidth() - l; + break; + } + + Slot slot = this.field_194337_h.get(j1); + ItemStack itemstack = RecipeItemHelper.unpack(((Integer)iterator.next()).intValue()); + + if (itemstack.isEmpty()) + { + ++j1; + } + else + { + for (int i1 = 0; i1 < p_194323_1_; ++i1) + { + this.func_194325_a(slot, itemstack); + } + + ++j1; + } + } + + if (!iterator.hasNext()) + { + break; + } + } + } + + private void func_194325_a(Slot p_194325_1_, ItemStack p_194325_2_) + { + InventoryPlayer inventoryplayer = this.field_194332_c.inventory; + int i = inventoryplayer.findSlotMatchingUnusedItem(p_194325_2_); + + if (i != -1) + { + ItemStack itemstack = inventoryplayer.getStackInSlot(i).copy(); + + if (!itemstack.isEmpty()) + { + if (itemstack.getCount() > 1) + { + inventoryplayer.decrStackSize(i, 1); + } + else + { + inventoryplayer.removeStackFromSlot(i); + } + + itemstack.setCount(1); + + if (p_194325_1_.getStack().isEmpty()) + { + p_194325_1_.putStack(itemstack); + } + else + { + p_194325_1_.getStack().grow(1); + } + } + } + } + + private boolean func_194328_c() + { + InventoryPlayer inventoryplayer = this.field_194332_c.inventory; + + for (int i = 0; i < this.field_194336_g.getSizeInventory(); ++i) + { + ItemStack itemstack = this.field_194336_g.getStackInSlot(i); + + if (!itemstack.isEmpty()) + { + int j = inventoryplayer.storeItemStack(itemstack); + + if (j == -1) + { + j = inventoryplayer.getFirstEmptyStack(); + } + + if (j == -1) + { + return false; + } + } + } + + return true; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/Session.java b/build/tmp/recompileMc/sources/net/minecraft/util/Session.java new file mode 100644 index 0000000..12b0766 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/Session.java @@ -0,0 +1,121 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import com.mojang.authlib.GameProfile; +import com.mojang.util.UUIDTypeAdapter; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Session +{ + private final String username; + private final String playerID; + private final String token; + private final Session.Type sessionType; + /** Forge: Cache of the local session's GameProfile properties. */ + private com.mojang.authlib.properties.PropertyMap properties; + + public Session(String usernameIn, String playerIDIn, String tokenIn, String sessionTypeIn) + { + if (usernameIn == null || usernameIn.isEmpty()) + { + usernameIn = "MissingName"; + playerIDIn = tokenIn = "NotValid"; + org.apache.logging.log4j.Logger logger = net.minecraftforge.fml.common.FMLLog.log; + logger.log(org.apache.logging.log4j.Level.WARN, "========================================================="); + logger.log(org.apache.logging.log4j.Level.WARN, "WARNING!! the username was not set for this session, typically"); + logger.log(org.apache.logging.log4j.Level.WARN, "this means you installed Forge incorrectly. We have set your"); + logger.log(org.apache.logging.log4j.Level.WARN, "name to \"MissingName\" and your session to nothing. Please"); + logger.log(org.apache.logging.log4j.Level.WARN, "check your installation and post a console log from the launcher"); + logger.log(org.apache.logging.log4j.Level.WARN, "when asking for help!"); + logger.log(org.apache.logging.log4j.Level.WARN, "========================================================="); + } + + this.username = usernameIn; + this.playerID = playerIDIn; + this.token = tokenIn; + this.sessionType = Session.Type.setSessionType(sessionTypeIn); + } + + public String getSessionID() + { + return "token:" + this.token + ":" + this.playerID; + } + + public String getPlayerID() + { + return this.playerID; + } + + public String getUsername() + { + return this.username; + } + + public String getToken() + { + return this.token; + } + + public GameProfile getProfile() + { + try + { + UUID uuid = UUIDTypeAdapter.fromString(this.getPlayerID()); + GameProfile ret = new GameProfile(uuid, this.getUsername()); //Forge: Adds cached GameProfile properties to returned GameProfile. + if (properties != null) ret.getProperties().putAll(properties); // Helps to cut down on calls to the session service, + return ret; // which helps to fix MC-52974. + } + catch (IllegalArgumentException var2) + { + return new GameProfile(net.minecraft.entity.player.EntityPlayer.getUUID(new GameProfile((UUID)null, this.getUsername())), this.getUsername()); + } + } + + /* ======================================== FORGE START ===================================== */ + //For internal use only. Modders should never need to use this. + public void setProperties(com.mojang.authlib.properties.PropertyMap properties) + { + if(this.properties == null) this.properties = properties; + } + + public boolean hasCachedProperties() + { + return properties != null; + } + /* ========================================= FORGE END ====================================== */ + + @SideOnly(Side.CLIENT) + public static enum Type + { + LEGACY("legacy"), + MOJANG("mojang"); + + private static final Map SESSION_TYPES = Maps.newHashMap(); + private final String sessionType; + + private Type(String sessionTypeIn) + { + this.sessionType = sessionTypeIn; + } + + @Nullable + public static Session.Type setSessionType(String sessionTypeIn) + { + return SESSION_TYPES.get(sessionTypeIn.toLowerCase(Locale.ROOT)); + } + + static + { + for (Session.Type session$type : values()) + { + SESSION_TYPES.put(session$type.sessionType, session$type); + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/SoundCategory.java b/build/tmp/recompileMc/sources/net/minecraft/util/SoundCategory.java new file mode 100644 index 0000000..56c117d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/SoundCategory.java @@ -0,0 +1,55 @@ +package net.minecraft.util; + +import com.google.common.collect.Maps; +import java.util.Map; +import java.util.Set; + +public enum SoundCategory +{ + MASTER("master"), + MUSIC("music"), + RECORDS("record"), + WEATHER("weather"), + BLOCKS("block"), + HOSTILE("hostile"), + NEUTRAL("neutral"), + PLAYERS("player"), + AMBIENT("ambient"), + VOICE("voice"); + + private static final Map SOUND_CATEGORIES = Maps.newHashMap(); + private final String name; + + private SoundCategory(String nameIn) + { + this.name = nameIn; + } + + public String getName() + { + return this.name; + } + + public static SoundCategory getByName(String categoryName) + { + return SOUND_CATEGORIES.get(categoryName); + } + + public static Set getSoundCategoryNames() + { + return SOUND_CATEGORIES.keySet(); + } + + static + { + for (SoundCategory soundcategory : values()) + { + if (SOUND_CATEGORIES.containsKey(soundcategory.getName())) + { + throw new Error("Clash in Sound Category name pools! Cannot insert " + soundcategory); + } + + SOUND_CATEGORIES.put(soundcategory.getName(), soundcategory); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/SoundEvent.java b/build/tmp/recompileMc/sources/net/minecraft/util/SoundEvent.java new file mode 100644 index 0000000..13288fd --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/SoundEvent.java @@ -0,0 +1,582 @@ +package net.minecraft.util; + +import net.minecraft.util.registry.RegistryNamespaced; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class SoundEvent extends net.minecraftforge.registries.IForgeRegistryEntry.Impl +{ + public static final RegistryNamespaced REGISTRY = net.minecraftforge.registries.GameData.getWrapper(SoundEvent.class); + private final ResourceLocation soundName; + private static int soundEventId; + + public SoundEvent(ResourceLocation soundNameIn) + { + this.soundName = soundNameIn; + } + + @SideOnly(Side.CLIENT) + public ResourceLocation getSoundName() + { + return this.soundName; + } + + public static void registerSounds() + { + registerSound("ambient.cave"); + registerSound("block.anvil.break"); + registerSound("block.anvil.destroy"); + registerSound("block.anvil.fall"); + registerSound("block.anvil.hit"); + registerSound("block.anvil.land"); + registerSound("block.anvil.place"); + registerSound("block.anvil.step"); + registerSound("block.anvil.use"); + registerSound("block.brewing_stand.brew"); + registerSound("block.chest.close"); + registerSound("block.chest.locked"); + registerSound("block.chest.open"); + registerSound("block.chorus_flower.death"); + registerSound("block.chorus_flower.grow"); + registerSound("block.cloth.break"); + registerSound("block.cloth.fall"); + registerSound("block.cloth.hit"); + registerSound("block.cloth.place"); + registerSound("block.cloth.step"); + registerSound("block.comparator.click"); + registerSound("block.dispenser.dispense"); + registerSound("block.dispenser.fail"); + registerSound("block.dispenser.launch"); + registerSound("block.enchantment_table.use"); + registerSound("block.end_gateway.spawn"); + registerSound("block.end_portal.spawn"); + registerSound("block.end_portal_frame.fill"); + registerSound("block.enderchest.close"); + registerSound("block.enderchest.open"); + registerSound("block.fence_gate.close"); + registerSound("block.fence_gate.open"); + registerSound("block.fire.ambient"); + registerSound("block.fire.extinguish"); + registerSound("block.furnace.fire_crackle"); + registerSound("block.glass.break"); + registerSound("block.glass.fall"); + registerSound("block.glass.hit"); + registerSound("block.glass.place"); + registerSound("block.glass.step"); + registerSound("block.grass.break"); + registerSound("block.grass.fall"); + registerSound("block.grass.hit"); + registerSound("block.grass.place"); + registerSound("block.grass.step"); + registerSound("block.gravel.break"); + registerSound("block.gravel.fall"); + registerSound("block.gravel.hit"); + registerSound("block.gravel.place"); + registerSound("block.gravel.step"); + registerSound("block.iron_door.close"); + registerSound("block.iron_door.open"); + registerSound("block.iron_trapdoor.close"); + registerSound("block.iron_trapdoor.open"); + registerSound("block.ladder.break"); + registerSound("block.ladder.fall"); + registerSound("block.ladder.hit"); + registerSound("block.ladder.place"); + registerSound("block.ladder.step"); + registerSound("block.lava.ambient"); + registerSound("block.lava.extinguish"); + registerSound("block.lava.pop"); + registerSound("block.lever.click"); + registerSound("block.metal.break"); + registerSound("block.metal.fall"); + registerSound("block.metal.hit"); + registerSound("block.metal.place"); + registerSound("block.metal.step"); + registerSound("block.metal_pressureplate.click_off"); + registerSound("block.metal_pressureplate.click_on"); + registerSound("block.note.basedrum"); + registerSound("block.note.bass"); + registerSound("block.note.bell"); + registerSound("block.note.chime"); + registerSound("block.note.flute"); + registerSound("block.note.guitar"); + registerSound("block.note.harp"); + registerSound("block.note.hat"); + registerSound("block.note.pling"); + registerSound("block.note.snare"); + registerSound("block.note.xylophone"); + registerSound("block.piston.contract"); + registerSound("block.piston.extend"); + registerSound("block.portal.ambient"); + registerSound("block.portal.travel"); + registerSound("block.portal.trigger"); + registerSound("block.redstone_torch.burnout"); + registerSound("block.sand.break"); + registerSound("block.sand.fall"); + registerSound("block.sand.hit"); + registerSound("block.sand.place"); + registerSound("block.sand.step"); + registerSound("block.shulker_box.close"); + registerSound("block.shulker_box.open"); + registerSound("block.slime.break"); + registerSound("block.slime.fall"); + registerSound("block.slime.hit"); + registerSound("block.slime.place"); + registerSound("block.slime.step"); + registerSound("block.snow.break"); + registerSound("block.snow.fall"); + registerSound("block.snow.hit"); + registerSound("block.snow.place"); + registerSound("block.snow.step"); + registerSound("block.stone.break"); + registerSound("block.stone.fall"); + registerSound("block.stone.hit"); + registerSound("block.stone.place"); + registerSound("block.stone.step"); + registerSound("block.stone_button.click_off"); + registerSound("block.stone_button.click_on"); + registerSound("block.stone_pressureplate.click_off"); + registerSound("block.stone_pressureplate.click_on"); + registerSound("block.tripwire.attach"); + registerSound("block.tripwire.click_off"); + registerSound("block.tripwire.click_on"); + registerSound("block.tripwire.detach"); + registerSound("block.water.ambient"); + registerSound("block.waterlily.place"); + registerSound("block.wood.break"); + registerSound("block.wood.fall"); + registerSound("block.wood.hit"); + registerSound("block.wood.place"); + registerSound("block.wood.step"); + registerSound("block.wood_button.click_off"); + registerSound("block.wood_button.click_on"); + registerSound("block.wood_pressureplate.click_off"); + registerSound("block.wood_pressureplate.click_on"); + registerSound("block.wooden_door.close"); + registerSound("block.wooden_door.open"); + registerSound("block.wooden_trapdoor.close"); + registerSound("block.wooden_trapdoor.open"); + registerSound("enchant.thorns.hit"); + registerSound("entity.armorstand.break"); + registerSound("entity.armorstand.fall"); + registerSound("entity.armorstand.hit"); + registerSound("entity.armorstand.place"); + registerSound("entity.arrow.hit"); + registerSound("entity.arrow.hit_player"); + registerSound("entity.arrow.shoot"); + registerSound("entity.bat.ambient"); + registerSound("entity.bat.death"); + registerSound("entity.bat.hurt"); + registerSound("entity.bat.loop"); + registerSound("entity.bat.takeoff"); + registerSound("entity.blaze.ambient"); + registerSound("entity.blaze.burn"); + registerSound("entity.blaze.death"); + registerSound("entity.blaze.hurt"); + registerSound("entity.blaze.shoot"); + registerSound("entity.boat.paddle_land"); + registerSound("entity.boat.paddle_water"); + registerSound("entity.bobber.retrieve"); + registerSound("entity.bobber.splash"); + registerSound("entity.bobber.throw"); + registerSound("entity.cat.ambient"); + registerSound("entity.cat.death"); + registerSound("entity.cat.hiss"); + registerSound("entity.cat.hurt"); + registerSound("entity.cat.purr"); + registerSound("entity.cat.purreow"); + registerSound("entity.chicken.ambient"); + registerSound("entity.chicken.death"); + registerSound("entity.chicken.egg"); + registerSound("entity.chicken.hurt"); + registerSound("entity.chicken.step"); + registerSound("entity.cow.ambient"); + registerSound("entity.cow.death"); + registerSound("entity.cow.hurt"); + registerSound("entity.cow.milk"); + registerSound("entity.cow.step"); + registerSound("entity.creeper.death"); + registerSound("entity.creeper.hurt"); + registerSound("entity.creeper.primed"); + registerSound("entity.donkey.ambient"); + registerSound("entity.donkey.angry"); + registerSound("entity.donkey.chest"); + registerSound("entity.donkey.death"); + registerSound("entity.donkey.hurt"); + registerSound("entity.egg.throw"); + registerSound("entity.elder_guardian.ambient"); + registerSound("entity.elder_guardian.ambient_land"); + registerSound("entity.elder_guardian.curse"); + registerSound("entity.elder_guardian.death"); + registerSound("entity.elder_guardian.death_land"); + registerSound("entity.elder_guardian.flop"); + registerSound("entity.elder_guardian.hurt"); + registerSound("entity.elder_guardian.hurt_land"); + registerSound("entity.enderdragon.ambient"); + registerSound("entity.enderdragon.death"); + registerSound("entity.enderdragon.flap"); + registerSound("entity.enderdragon.growl"); + registerSound("entity.enderdragon.hurt"); + registerSound("entity.enderdragon.shoot"); + registerSound("entity.enderdragon_fireball.explode"); + registerSound("entity.endereye.death"); + registerSound("entity.endereye.launch"); + registerSound("entity.endermen.ambient"); + registerSound("entity.endermen.death"); + registerSound("entity.endermen.hurt"); + registerSound("entity.endermen.scream"); + registerSound("entity.endermen.stare"); + registerSound("entity.endermen.teleport"); + registerSound("entity.endermite.ambient"); + registerSound("entity.endermite.death"); + registerSound("entity.endermite.hurt"); + registerSound("entity.endermite.step"); + registerSound("entity.enderpearl.throw"); + registerSound("entity.evocation_fangs.attack"); + registerSound("entity.evocation_illager.ambient"); + registerSound("entity.evocation_illager.cast_spell"); + registerSound("entity.evocation_illager.death"); + registerSound("entity.evocation_illager.hurt"); + registerSound("entity.evocation_illager.prepare_attack"); + registerSound("entity.evocation_illager.prepare_summon"); + registerSound("entity.evocation_illager.prepare_wololo"); + registerSound("entity.experience_bottle.throw"); + registerSound("entity.experience_orb.pickup"); + registerSound("entity.firework.blast"); + registerSound("entity.firework.blast_far"); + registerSound("entity.firework.large_blast"); + registerSound("entity.firework.large_blast_far"); + registerSound("entity.firework.launch"); + registerSound("entity.firework.shoot"); + registerSound("entity.firework.twinkle"); + registerSound("entity.firework.twinkle_far"); + registerSound("entity.generic.big_fall"); + registerSound("entity.generic.burn"); + registerSound("entity.generic.death"); + registerSound("entity.generic.drink"); + registerSound("entity.generic.eat"); + registerSound("entity.generic.explode"); + registerSound("entity.generic.extinguish_fire"); + registerSound("entity.generic.hurt"); + registerSound("entity.generic.small_fall"); + registerSound("entity.generic.splash"); + registerSound("entity.generic.swim"); + registerSound("entity.ghast.ambient"); + registerSound("entity.ghast.death"); + registerSound("entity.ghast.hurt"); + registerSound("entity.ghast.scream"); + registerSound("entity.ghast.shoot"); + registerSound("entity.ghast.warn"); + registerSound("entity.guardian.ambient"); + registerSound("entity.guardian.ambient_land"); + registerSound("entity.guardian.attack"); + registerSound("entity.guardian.death"); + registerSound("entity.guardian.death_land"); + registerSound("entity.guardian.flop"); + registerSound("entity.guardian.hurt"); + registerSound("entity.guardian.hurt_land"); + registerSound("entity.horse.ambient"); + registerSound("entity.horse.angry"); + registerSound("entity.horse.armor"); + registerSound("entity.horse.breathe"); + registerSound("entity.horse.death"); + registerSound("entity.horse.eat"); + registerSound("entity.horse.gallop"); + registerSound("entity.horse.hurt"); + registerSound("entity.horse.jump"); + registerSound("entity.horse.land"); + registerSound("entity.horse.saddle"); + registerSound("entity.horse.step"); + registerSound("entity.horse.step_wood"); + registerSound("entity.hostile.big_fall"); + registerSound("entity.hostile.death"); + registerSound("entity.hostile.hurt"); + registerSound("entity.hostile.small_fall"); + registerSound("entity.hostile.splash"); + registerSound("entity.hostile.swim"); + registerSound("entity.husk.ambient"); + registerSound("entity.husk.death"); + registerSound("entity.husk.hurt"); + registerSound("entity.husk.step"); + registerSound("entity.illusion_illager.ambient"); + registerSound("entity.illusion_illager.cast_spell"); + registerSound("entity.illusion_illager.death"); + registerSound("entity.illusion_illager.hurt"); + registerSound("entity.illusion_illager.mirror_move"); + registerSound("entity.illusion_illager.prepare_blindness"); + registerSound("entity.illusion_illager.prepare_mirror"); + registerSound("entity.irongolem.attack"); + registerSound("entity.irongolem.death"); + registerSound("entity.irongolem.hurt"); + registerSound("entity.irongolem.step"); + registerSound("entity.item.break"); + registerSound("entity.item.pickup"); + registerSound("entity.itemframe.add_item"); + registerSound("entity.itemframe.break"); + registerSound("entity.itemframe.place"); + registerSound("entity.itemframe.remove_item"); + registerSound("entity.itemframe.rotate_item"); + registerSound("entity.leashknot.break"); + registerSound("entity.leashknot.place"); + registerSound("entity.lightning.impact"); + registerSound("entity.lightning.thunder"); + registerSound("entity.lingeringpotion.throw"); + registerSound("entity.llama.ambient"); + registerSound("entity.llama.angry"); + registerSound("entity.llama.chest"); + registerSound("entity.llama.death"); + registerSound("entity.llama.eat"); + registerSound("entity.llama.hurt"); + registerSound("entity.llama.spit"); + registerSound("entity.llama.step"); + registerSound("entity.llama.swag"); + registerSound("entity.magmacube.death"); + registerSound("entity.magmacube.hurt"); + registerSound("entity.magmacube.jump"); + registerSound("entity.magmacube.squish"); + registerSound("entity.minecart.inside"); + registerSound("entity.minecart.riding"); + registerSound("entity.mooshroom.shear"); + registerSound("entity.mule.ambient"); + registerSound("entity.mule.chest"); + registerSound("entity.mule.death"); + registerSound("entity.mule.hurt"); + registerSound("entity.painting.break"); + registerSound("entity.painting.place"); + registerSound("entity.parrot.ambient"); + registerSound("entity.parrot.death"); + registerSound("entity.parrot.eat"); + registerSound("entity.parrot.fly"); + registerSound("entity.parrot.hurt"); + registerSound("entity.parrot.imitate.blaze"); + registerSound("entity.parrot.imitate.creeper"); + registerSound("entity.parrot.imitate.elder_guardian"); + registerSound("entity.parrot.imitate.enderdragon"); + registerSound("entity.parrot.imitate.enderman"); + registerSound("entity.parrot.imitate.endermite"); + registerSound("entity.parrot.imitate.evocation_illager"); + registerSound("entity.parrot.imitate.ghast"); + registerSound("entity.parrot.imitate.husk"); + registerSound("entity.parrot.imitate.illusion_illager"); + registerSound("entity.parrot.imitate.magmacube"); + registerSound("entity.parrot.imitate.polar_bear"); + registerSound("entity.parrot.imitate.shulker"); + registerSound("entity.parrot.imitate.silverfish"); + registerSound("entity.parrot.imitate.skeleton"); + registerSound("entity.parrot.imitate.slime"); + registerSound("entity.parrot.imitate.spider"); + registerSound("entity.parrot.imitate.stray"); + registerSound("entity.parrot.imitate.vex"); + registerSound("entity.parrot.imitate.vindication_illager"); + registerSound("entity.parrot.imitate.witch"); + registerSound("entity.parrot.imitate.wither"); + registerSound("entity.parrot.imitate.wither_skeleton"); + registerSound("entity.parrot.imitate.wolf"); + registerSound("entity.parrot.imitate.zombie"); + registerSound("entity.parrot.imitate.zombie_pigman"); + registerSound("entity.parrot.imitate.zombie_villager"); + registerSound("entity.parrot.step"); + registerSound("entity.pig.ambient"); + registerSound("entity.pig.death"); + registerSound("entity.pig.hurt"); + registerSound("entity.pig.saddle"); + registerSound("entity.pig.step"); + registerSound("entity.player.attack.crit"); + registerSound("entity.player.attack.knockback"); + registerSound("entity.player.attack.nodamage"); + registerSound("entity.player.attack.strong"); + registerSound("entity.player.attack.sweep"); + registerSound("entity.player.attack.weak"); + registerSound("entity.player.big_fall"); + registerSound("entity.player.breath"); + registerSound("entity.player.burp"); + registerSound("entity.player.death"); + registerSound("entity.player.hurt"); + registerSound("entity.player.hurt_drown"); + registerSound("entity.player.hurt_on_fire"); + registerSound("entity.player.levelup"); + registerSound("entity.player.small_fall"); + registerSound("entity.player.splash"); + registerSound("entity.player.swim"); + registerSound("entity.polar_bear.ambient"); + registerSound("entity.polar_bear.baby_ambient"); + registerSound("entity.polar_bear.death"); + registerSound("entity.polar_bear.hurt"); + registerSound("entity.polar_bear.step"); + registerSound("entity.polar_bear.warning"); + registerSound("entity.rabbit.ambient"); + registerSound("entity.rabbit.attack"); + registerSound("entity.rabbit.death"); + registerSound("entity.rabbit.hurt"); + registerSound("entity.rabbit.jump"); + registerSound("entity.sheep.ambient"); + registerSound("entity.sheep.death"); + registerSound("entity.sheep.hurt"); + registerSound("entity.sheep.shear"); + registerSound("entity.sheep.step"); + registerSound("entity.shulker.ambient"); + registerSound("entity.shulker.close"); + registerSound("entity.shulker.death"); + registerSound("entity.shulker.hurt"); + registerSound("entity.shulker.hurt_closed"); + registerSound("entity.shulker.open"); + registerSound("entity.shulker.shoot"); + registerSound("entity.shulker.teleport"); + registerSound("entity.shulker_bullet.hit"); + registerSound("entity.shulker_bullet.hurt"); + registerSound("entity.silverfish.ambient"); + registerSound("entity.silverfish.death"); + registerSound("entity.silverfish.hurt"); + registerSound("entity.silverfish.step"); + registerSound("entity.skeleton.ambient"); + registerSound("entity.skeleton.death"); + registerSound("entity.skeleton.hurt"); + registerSound("entity.skeleton.shoot"); + registerSound("entity.skeleton.step"); + registerSound("entity.skeleton_horse.ambient"); + registerSound("entity.skeleton_horse.death"); + registerSound("entity.skeleton_horse.hurt"); + registerSound("entity.slime.attack"); + registerSound("entity.slime.death"); + registerSound("entity.slime.hurt"); + registerSound("entity.slime.jump"); + registerSound("entity.slime.squish"); + registerSound("entity.small_magmacube.death"); + registerSound("entity.small_magmacube.hurt"); + registerSound("entity.small_magmacube.squish"); + registerSound("entity.small_slime.death"); + registerSound("entity.small_slime.hurt"); + registerSound("entity.small_slime.jump"); + registerSound("entity.small_slime.squish"); + registerSound("entity.snowball.throw"); + registerSound("entity.snowman.ambient"); + registerSound("entity.snowman.death"); + registerSound("entity.snowman.hurt"); + registerSound("entity.snowman.shoot"); + registerSound("entity.spider.ambient"); + registerSound("entity.spider.death"); + registerSound("entity.spider.hurt"); + registerSound("entity.spider.step"); + registerSound("entity.splash_potion.break"); + registerSound("entity.splash_potion.throw"); + registerSound("entity.squid.ambient"); + registerSound("entity.squid.death"); + registerSound("entity.squid.hurt"); + registerSound("entity.stray.ambient"); + registerSound("entity.stray.death"); + registerSound("entity.stray.hurt"); + registerSound("entity.stray.step"); + registerSound("entity.tnt.primed"); + registerSound("entity.vex.ambient"); + registerSound("entity.vex.charge"); + registerSound("entity.vex.death"); + registerSound("entity.vex.hurt"); + registerSound("entity.villager.ambient"); + registerSound("entity.villager.death"); + registerSound("entity.villager.hurt"); + registerSound("entity.villager.no"); + registerSound("entity.villager.trading"); + registerSound("entity.villager.yes"); + registerSound("entity.vindication_illager.ambient"); + registerSound("entity.vindication_illager.death"); + registerSound("entity.vindication_illager.hurt"); + registerSound("entity.witch.ambient"); + registerSound("entity.witch.death"); + registerSound("entity.witch.drink"); + registerSound("entity.witch.hurt"); + registerSound("entity.witch.throw"); + registerSound("entity.wither.ambient"); + registerSound("entity.wither.break_block"); + registerSound("entity.wither.death"); + registerSound("entity.wither.hurt"); + registerSound("entity.wither.shoot"); + registerSound("entity.wither.spawn"); + registerSound("entity.wither_skeleton.ambient"); + registerSound("entity.wither_skeleton.death"); + registerSound("entity.wither_skeleton.hurt"); + registerSound("entity.wither_skeleton.step"); + registerSound("entity.wolf.ambient"); + registerSound("entity.wolf.death"); + registerSound("entity.wolf.growl"); + registerSound("entity.wolf.howl"); + registerSound("entity.wolf.hurt"); + registerSound("entity.wolf.pant"); + registerSound("entity.wolf.shake"); + registerSound("entity.wolf.step"); + registerSound("entity.wolf.whine"); + registerSound("entity.zombie.ambient"); + registerSound("entity.zombie.attack_door_wood"); + registerSound("entity.zombie.attack_iron_door"); + registerSound("entity.zombie.break_door_wood"); + registerSound("entity.zombie.death"); + registerSound("entity.zombie.hurt"); + registerSound("entity.zombie.infect"); + registerSound("entity.zombie.step"); + registerSound("entity.zombie_horse.ambient"); + registerSound("entity.zombie_horse.death"); + registerSound("entity.zombie_horse.hurt"); + registerSound("entity.zombie_pig.ambient"); + registerSound("entity.zombie_pig.angry"); + registerSound("entity.zombie_pig.death"); + registerSound("entity.zombie_pig.hurt"); + registerSound("entity.zombie_villager.ambient"); + registerSound("entity.zombie_villager.converted"); + registerSound("entity.zombie_villager.cure"); + registerSound("entity.zombie_villager.death"); + registerSound("entity.zombie_villager.hurt"); + registerSound("entity.zombie_villager.step"); + registerSound("item.armor.equip_chain"); + registerSound("item.armor.equip_diamond"); + registerSound("item.armor.equip_elytra"); + registerSound("item.armor.equip_generic"); + registerSound("item.armor.equip_gold"); + registerSound("item.armor.equip_iron"); + registerSound("item.armor.equip_leather"); + registerSound("item.bottle.empty"); + registerSound("item.bottle.fill"); + registerSound("item.bottle.fill_dragonbreath"); + registerSound("item.bucket.empty"); + registerSound("item.bucket.empty_lava"); + registerSound("item.bucket.fill"); + registerSound("item.bucket.fill_lava"); + registerSound("item.chorus_fruit.teleport"); + registerSound("item.elytra.flying"); + registerSound("item.firecharge.use"); + registerSound("item.flintandsteel.use"); + registerSound("item.hoe.till"); + registerSound("item.shield.block"); + registerSound("item.shield.break"); + registerSound("item.shovel.flatten"); + registerSound("item.totem.use"); + registerSound("music.creative"); + registerSound("music.credits"); + registerSound("music.dragon"); + registerSound("music.end"); + registerSound("music.game"); + registerSound("music.menu"); + registerSound("music.nether"); + registerSound("record.11"); + registerSound("record.13"); + registerSound("record.blocks"); + registerSound("record.cat"); + registerSound("record.chirp"); + registerSound("record.far"); + registerSound("record.mall"); + registerSound("record.mellohi"); + registerSound("record.stal"); + registerSound("record.strad"); + registerSound("record.wait"); + registerSound("record.ward"); + registerSound("ui.button.click"); + registerSound("ui.toast.in"); + registerSound("ui.toast.out"); + registerSound("ui.toast.challenge_complete"); + registerSound("weather.rain"); + registerSound("weather.rain.above"); + } + + private static void registerSound(String soundNameIn) + { + ResourceLocation resourcelocation = new ResourceLocation(soundNameIn); + REGISTRY.register(soundEventId++, resourcelocation, new SoundEvent(resourcelocation)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/StringUtils.java b/build/tmp/recompileMc/sources/net/minecraft/util/StringUtils.java new file mode 100644 index 0000000..d94cd04 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/StringUtils.java @@ -0,0 +1,37 @@ +package net.minecraft.util; + +import java.util.regex.Pattern; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class StringUtils +{ + private static final Pattern PATTERN_CONTROL_CODE = Pattern.compile("(?i)\\u00A7[0-9A-FK-OR]"); + + /** + * Returns the time elapsed for the given number of ticks, in "mm:ss" format. + */ + @SideOnly(Side.CLIENT) + public static String ticksToElapsedTime(int ticks) + { + int i = ticks / 20; + int j = i / 60; + i = i % 60; + return i < 10 ? j + ":0" + i : j + ":" + i; + } + + @SideOnly(Side.CLIENT) + public static String stripControlCodes(String text) + { + return PATTERN_CONTROL_CODE.matcher(text).replaceAll(""); + } + + /** + * Returns a value indicating whether the given string is null or empty. + */ + public static boolean isNullOrEmpty(@Nullable String string) + { + return org.apache.commons.lang3.StringUtils.isEmpty(string); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/TabCompleter.java b/build/tmp/recompileMc/sources/net/minecraft/util/TabCompleter.java new file mode 100644 index 0000000..c61064e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/TabCompleter.java @@ -0,0 +1,133 @@ +package net.minecraft.util; + +import com.google.common.collect.Lists; +import java.util.List; +import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiTextField; +import net.minecraft.network.play.client.CPacketTabComplete; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public abstract class TabCompleter +{ + /** The {@link GuiTextField} that is backing this {@link TabCompleter} */ + protected final GuiTextField textField; + protected final boolean hasTargetBlock; + protected boolean didComplete; + protected boolean requestedCompletions; + protected int completionIdx; + protected List completions = Lists.newArrayList(); + + public TabCompleter(GuiTextField textFieldIn, boolean hasTargetBlockIn) + { + this.textField = textFieldIn; + this.hasTargetBlock = hasTargetBlockIn; + } + + /** + * Called when tab key pressed. If it's the first time we tried to complete this string, we ask the server for + * completions. When the server responds, this method gets called again (via setCompletions). + */ + public void complete() + { + if (this.didComplete) + { + this.textField.deleteFromCursor(0); + this.textField.deleteFromCursor(this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false) - this.textField.getCursorPosition()); + + if (this.completionIdx >= this.completions.size()) + { + this.completionIdx = 0; + } + } + else + { + int i = this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false); + this.completions.clear(); + this.completionIdx = 0; + String s = this.textField.getText().substring(0, this.textField.getCursorPosition()); + this.requestCompletions(s); + + if (this.completions.isEmpty()) + { + return; + } + + this.didComplete = true; + this.textField.deleteFromCursor(i - this.textField.getCursorPosition()); + } + + this.textField.writeText(net.minecraft.util.text.TextFormatting.getTextWithoutFormattingCodes(this.completions.get(this.completionIdx++))); + } + + private void requestCompletions(String prefix) + { + if (prefix.length() >= 1) + { + net.minecraftforge.client.ClientCommandHandler.instance.autoComplete(prefix); + Minecraft.getMinecraft().player.connection.sendPacket(new CPacketTabComplete(prefix, this.getTargetBlockPos(), this.hasTargetBlock)); + this.requestedCompletions = true; + } + } + + @Nullable + public abstract BlockPos getTargetBlockPos(); + + /** + * Only actually sets completions if they were requested (via requestCompletions) + */ + public void setCompletions(String... newCompl) + { + if (this.requestedCompletions) + { + this.didComplete = false; + this.completions.clear(); + + String[] complete = net.minecraftforge.client.ClientCommandHandler.instance.latestAutoComplete; + if (complete != null) + { + newCompl = com.google.common.collect.ObjectArrays.concat(complete, newCompl, String.class); + } + + for (String s : newCompl) + { + if (!s.isEmpty()) + { + this.completions.add(s); + } + } + + String s1 = this.textField.getText().substring(this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false)); + String s2 = org.apache.commons.lang3.StringUtils.getCommonPrefix(newCompl); + s2 = net.minecraft.util.text.TextFormatting.getTextWithoutFormattingCodes(s2); + + if (!s2.isEmpty() && !s1.equalsIgnoreCase(s2)) + { + this.textField.deleteFromCursor(0); + this.textField.deleteFromCursor(this.textField.getNthWordFromPosWS(-1, this.textField.getCursorPosition(), false) - this.textField.getCursorPosition()); + this.textField.writeText(s2); + } + else if (!this.completions.isEmpty()) + { + this.didComplete = true; + this.complete(); + } + } + } + + /** + * Called when new text is entered, or backspace pressed + */ + public void resetDidComplete() + { + this.didComplete = false; + } + + public void resetRequested() + { + this.requestedCompletions = false; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/Timer.java b/build/tmp/recompileMc/sources/net/minecraft/util/Timer.java new file mode 100644 index 0000000..06f2b36 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/Timer.java @@ -0,0 +1,42 @@ +package net.minecraft.util; + +import net.minecraft.client.Minecraft; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Timer +{ + /** How many full ticks have turned over since the last call to updateTimer(), capped at 10. */ + public int elapsedTicks; + /** + * How much time has elapsed since the last tick, in ticks, for use by display rendering routines (range: 0.0 - + * 1.0). + */ + public float renderPartialTicks; + /** How much time has elapsed since the last tick, in ticks (range: 0.0 - 1.0). */ + public float elapsedPartialTicks; + /** The time reported by the system clock at the last sync, in milliseconds */ + private long lastSyncSysClock; + /** The Length of a single tick in milliseconds. Calculated as 1000/tps. At a default 20 TPS, tickLength is 50 ms */ + private float tickLength; + + public Timer(float tps) + { + this.tickLength = 1000.0F / tps; + this.lastSyncSysClock = Minecraft.getSystemTime(); + } + + /** + * Updates all fields of the Timer using the current time + */ + public void updateTimer() + { + long i = Minecraft.getSystemTime(); + this.elapsedPartialTicks = (float)(i - this.lastSyncSysClock) / this.tickLength; + this.lastSyncSysClock = i; + this.renderPartialTicks += this.elapsedPartialTicks; + this.elapsedTicks = (int)this.renderPartialTicks; + this.renderPartialTicks -= (float)this.elapsedTicks; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/Tuple.java b/build/tmp/recompileMc/sources/net/minecraft/util/Tuple.java new file mode 100644 index 0000000..d31a5ed --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/Tuple.java @@ -0,0 +1,29 @@ +package net.minecraft.util; + +public class Tuple +{ + private A a; + private B b; + + public Tuple(A aIn, B bIn) + { + this.a = aIn; + this.b = bIn; + } + + /** + * Get the first Object in the Tuple + */ + public A getFirst() + { + return this.a; + } + + /** + * Get the second Object in the Tuple + */ + public B getSecond() + { + return this.b; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/TupleIntJsonSerializable.java b/build/tmp/recompileMc/sources/net/minecraft/util/TupleIntJsonSerializable.java new file mode 100644 index 0000000..a3ec806 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/TupleIntJsonSerializable.java @@ -0,0 +1,39 @@ +package net.minecraft.util; + +public class TupleIntJsonSerializable +{ + private int integerValue; + private IJsonSerializable jsonSerializableValue; + + /** + * Gets the integer value stored in this tuple. + */ + public int getIntegerValue() + { + return this.integerValue; + } + + /** + * Sets this tuple's integer value to the given value. + */ + public void setIntegerValue(int integerValueIn) + { + this.integerValue = integerValueIn; + } + + /** + * Gets the JsonSerializable value stored in this tuple. + */ + public T getJsonSerializableValue() + { + return (T)this.jsonSerializableValue; + } + + /** + * Sets this tuple's JsonSerializable value to the given value. + */ + public void setJsonSerializableValue(IJsonSerializable jsonSerializableValueIn) + { + this.jsonSerializableValue = jsonSerializableValueIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/Util.java b/build/tmp/recompileMc/sources/net/minecraft/util/Util.java new file mode 100644 index 0000000..a98fb4e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/Util.java @@ -0,0 +1,82 @@ +package net.minecraft.util; + +import java.util.List; +import java.util.Locale; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.Logger; + +public class Util +{ + @SideOnly(Side.CLIENT) + public static Util.EnumOS getOSType() + { + String s = System.getProperty("os.name").toLowerCase(Locale.ROOT); + + if (s.contains("win")) + { + return Util.EnumOS.WINDOWS; + } + else if (s.contains("mac")) + { + return Util.EnumOS.OSX; + } + else if (s.contains("solaris")) + { + return Util.EnumOS.SOLARIS; + } + else if (s.contains("sunos")) + { + return Util.EnumOS.SOLARIS; + } + else if (s.contains("linux")) + { + return Util.EnumOS.LINUX; + } + else + { + return s.contains("unix") ? Util.EnumOS.LINUX : Util.EnumOS.UNKNOWN; + } + } + + /** + * Run a task and return the result, catching any execution exceptions and logging them to the specified logger + */ + @Nullable + public static V runTask(FutureTask task, Logger logger) + { + try + { + task.run(); + return task.get(); + } + catch (ExecutionException executionexception) + { + logger.fatal("Error executing task", (Throwable)executionexception); + } + catch (InterruptedException interruptedexception) + { + logger.fatal("Error executing task", (Throwable)interruptedexception); + } + + return (V)null; + } + + public static T getLastElement(List list) + { + return list.get(list.size() - 1); + } + + @SideOnly(Side.CLIENT) + public static enum EnumOS + { + LINUX, + SOLARIS, + WINDOWS, + OSX, + UNKNOWN; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/WeightedRandom.java b/build/tmp/recompileMc/sources/net/minecraft/util/WeightedRandom.java new file mode 100644 index 0000000..c2cc08e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/WeightedRandom.java @@ -0,0 +1,77 @@ +package net.minecraft.util; + +import java.util.List; +import java.util.Random; + +public class WeightedRandom +{ + /** + * Returns the total weight of all items in a collection. + */ + public static int getTotalWeight(List collection) + { + int i = 0; + int j = 0; + + for (int k = collection.size(); j < k; ++j) + { + WeightedRandom.Item weightedrandom$item = collection.get(j); + i += weightedrandom$item.itemWeight; + } + + return i; + } + + /** + * Returns a random choice from the input items, with a total weight value. + */ + public static T getRandomItem(Random random, List collection, int totalWeight) + { + if (totalWeight <= 0) + { + throw new IllegalArgumentException(); + } + else + { + int i = random.nextInt(totalWeight); + return (T)getRandomItem(collection, i); + } + } + + public static T getRandomItem(List collection, int weight) + { + int i = 0; + + for (int j = collection.size(); i < j; ++i) + { + T t = collection.get(i); + weight -= t.itemWeight; + + if (weight < 0) + { + return t; + } + } + + return (T)null; + } + + /** + * Returns a random choice from the input items. + */ + public static T getRandomItem(Random random, List collection) + { + return (T)getRandomItem(random, collection, getTotalWeight(collection)); + } + + public static class Item + { + /** The Weight is how often the item is chosen(higher number is higher chance(lower is lower)) */ + public int itemWeight; + + public Item(int itemWeightIn) + { + this.itemWeight = itemWeightIn; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/WeightedSpawnerEntity.java b/build/tmp/recompileMc/sources/net/minecraft/util/WeightedSpawnerEntity.java new file mode 100644 index 0000000..a83365a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/WeightedSpawnerEntity.java @@ -0,0 +1,49 @@ +package net.minecraft.util; + +import net.minecraft.nbt.NBTTagCompound; + +public class WeightedSpawnerEntity extends WeightedRandom.Item +{ + private final NBTTagCompound nbt; + + public WeightedSpawnerEntity() + { + super(1); + this.nbt = new NBTTagCompound(); + this.nbt.setString("id", "minecraft:pig"); + } + + public WeightedSpawnerEntity(NBTTagCompound nbtIn) + { + this(nbtIn.hasKey("Weight", 99) ? nbtIn.getInteger("Weight") : 1, nbtIn.getCompoundTag("Entity")); + } + + public WeightedSpawnerEntity(int itemWeightIn, NBTTagCompound nbtIn) + { + super(itemWeightIn); + this.nbt = nbtIn; + } + + public NBTTagCompound toCompoundTag() + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + if (!this.nbt.hasKey("id", 8)) + { + this.nbt.setString("id", "minecraft:pig"); + } + else if (!this.nbt.getString("id").contains(":")) + { + this.nbt.setString("id", (new ResourceLocation(this.nbt.getString("id"))).toString()); + } + + nbttagcompound.setTag("Entity", this.nbt); + nbttagcompound.setInteger("Weight", this.itemWeight); + return nbttagcompound; + } + + public NBTTagCompound getNbt() + { + return this.nbt; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/DataFixer.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/DataFixer.java new file mode 100644 index 0000000..8ab0f1f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/DataFixer.java @@ -0,0 +1,130 @@ +package net.minecraft.util.datafix; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Util; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class DataFixer implements IDataFixer +{ + private static final Logger LOGGER = LogManager.getLogger(); + private final Map> walkerMap = Maps.>newHashMap(); + private final Map> fixMap = Maps.>newHashMap(); + public final int version; + + public DataFixer(int versionIn) + { + this.version = versionIn; + } + + public NBTTagCompound process(IFixType type, NBTTagCompound compound) + { + int i = compound.hasKey("DataVersion", 99) ? compound.getInteger("DataVersion") : -1; + return i >= 1343 ? compound : this.process(type, compound, i); + } + + public NBTTagCompound process(IFixType type, NBTTagCompound compound, int versionIn) + { + if (versionIn < this.version) + { + compound = this.processFixes(type, compound, versionIn); + compound = this.processWalkers(type, compound, versionIn); + } + + return compound; + } + + private NBTTagCompound processFixes(IFixType type, NBTTagCompound compound, int versionIn) + { + List list = (List)this.fixMap.get(type); + + if (list != null) + { + for (int i = 0; i < list.size(); ++i) + { + IFixableData ifixabledata = list.get(i); + + if (ifixabledata.getFixVersion() > versionIn) + { + compound = ifixabledata.fixTagCompound(compound); + } + } + } + + return compound; + } + + private NBTTagCompound processWalkers(IFixType type, NBTTagCompound compound, int versionIn) + { + List list = (List)this.walkerMap.get(type); + + if (list != null) + { + for (int i = 0; i < list.size(); ++i) + { + compound = ((IDataWalker)list.get(i)).process(this, compound, versionIn); + } + } + + return compound; + } + + public void registerWalker(FixTypes type, IDataWalker walker) + { + this.registerVanillaWalker(type, walker); + } + + /** + * Do not invoke this method, use registerWalker instead. It is expected to be removed in future versions. + */ + public void registerVanillaWalker(IFixType type, IDataWalker walker) + { + this.getTypeList(this.walkerMap, type).add(walker); + } + + public void registerFix(IFixType type, IFixableData fixable) + { + List list = this.getTypeList(this.fixMap, type); + int i = fixable.getFixVersion(); + + if (i > this.version) + { + LOGGER.warn("Ignored fix registered for version: {} as the DataVersion of the game is: {}", Integer.valueOf(i), Integer.valueOf(this.version)); + } + else + { + if (!list.isEmpty() && ((IFixableData)Util.getLastElement(list)).getFixVersion() > i) + { + for (int j = 0; j < list.size(); ++j) + { + if (((IFixableData)list.get(j)).getFixVersion() > i) + { + list.add(j, fixable); + break; + } + } + } + else + { + list.add(fixable); + } + } + } + + private List getTypeList(Map> map, IFixType type) + { + List list = (List)map.get(type); + + if (list == null) + { + list = Lists.newArrayList(); + map.put(type, list); + } + + return list; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/DataFixesManager.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/DataFixesManager.java new file mode 100644 index 0000000..0d3dd5d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/DataFixesManager.java @@ -0,0 +1,284 @@ +package net.minecraft.util.datafix; + +import net.minecraft.block.BlockJukebox; +import net.minecraft.entity.Entity; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecartChest; +import net.minecraft.entity.item.EntityMinecartCommandBlock; +import net.minecraft.entity.item.EntityMinecartEmpty; +import net.minecraft.entity.item.EntityMinecartFurnace; +import net.minecraft.entity.item.EntityMinecartHopper; +import net.minecraft.entity.item.EntityMinecartMobSpawner; +import net.minecraft.entity.item.EntityMinecartTNT; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntityElderGuardian; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityEndermite; +import net.minecraft.entity.monster.EntityEvoker; +import net.minecraft.entity.monster.EntityGhast; +import net.minecraft.entity.monster.EntityGiantZombie; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.entity.monster.EntityHusk; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.monster.EntityMagmaCube; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.monster.EntityShulker; +import net.minecraft.entity.monster.EntitySilverfish; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.monster.EntityStray; +import net.minecraft.entity.monster.EntityVex; +import net.minecraft.entity.monster.EntityVindicator; +import net.minecraft.entity.monster.EntityWitch; +import net.minecraft.entity.monster.EntityWitherSkeleton; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.entity.monster.EntityZombieVillager; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityDonkey; +import net.minecraft.entity.passive.EntityHorse; +import net.minecraft.entity.passive.EntityMooshroom; +import net.minecraft.entity.passive.EntityMule; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.passive.EntityRabbit; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.passive.EntitySkeletonHorse; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.entity.passive.EntityVillager; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.passive.EntityZombieHorse; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityDragonFireball; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityLargeFireball; +import net.minecraft.entity.projectile.EntityPotion; +import net.minecraft.entity.projectile.EntitySmallFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.entity.projectile.EntitySpectralArrow; +import net.minecraft.entity.projectile.EntityTippedArrow; +import net.minecraft.entity.projectile.EntityWitherSkull; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntityBrewingStand; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.tileentity.TileEntityDropper; +import net.minecraft.tileentity.TileEntityFlowerPot; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.tileentity.TileEntityPiston; +import net.minecraft.tileentity.TileEntityShulkerBox; +import net.minecraft.util.datafix.fixes.AddBedTileEntity; +import net.minecraft.util.datafix.fixes.ArmorStandSilent; +import net.minecraft.util.datafix.fixes.BannerItemColor; +import net.minecraft.util.datafix.fixes.BedItemColor; +import net.minecraft.util.datafix.fixes.BookPagesStrictJSON; +import net.minecraft.util.datafix.fixes.CookedFishIDTypo; +import net.minecraft.util.datafix.fixes.ElderGuardianSplit; +import net.minecraft.util.datafix.fixes.EntityArmorAndHeld; +import net.minecraft.util.datafix.fixes.EntityHealth; +import net.minecraft.util.datafix.fixes.EntityId; +import net.minecraft.util.datafix.fixes.ForceVBOOn; +import net.minecraft.util.datafix.fixes.HorseSaddle; +import net.minecraft.util.datafix.fixes.HorseSplit; +import net.minecraft.util.datafix.fixes.ItemIntIDToString; +import net.minecraft.util.datafix.fixes.MinecartEntityTypes; +import net.minecraft.util.datafix.fixes.OptionsLowerCaseLanguage; +import net.minecraft.util.datafix.fixes.PaintingDirection; +import net.minecraft.util.datafix.fixes.PotionItems; +import net.minecraft.util.datafix.fixes.PotionWater; +import net.minecraft.util.datafix.fixes.RedundantChanceTags; +import net.minecraft.util.datafix.fixes.RidingToPassengers; +import net.minecraft.util.datafix.fixes.ShulkerBoxEntityColor; +import net.minecraft.util.datafix.fixes.ShulkerBoxItemColor; +import net.minecraft.util.datafix.fixes.ShulkerBoxTileColor; +import net.minecraft.util.datafix.fixes.SignStrictJSON; +import net.minecraft.util.datafix.fixes.SkeletonSplit; +import net.minecraft.util.datafix.fixes.SpawnEggNames; +import net.minecraft.util.datafix.fixes.SpawnerEntityTypes; +import net.minecraft.util.datafix.fixes.StringToUUID; +import net.minecraft.util.datafix.fixes.TileEntityId; +import net.minecraft.util.datafix.fixes.TotemItemRename; +import net.minecraft.util.datafix.fixes.ZombieProfToType; +import net.minecraft.util.datafix.fixes.ZombieSplit; +import net.minecraft.world.chunk.storage.AnvilChunkLoader; +import net.minecraft.world.gen.structure.template.Template; +import net.minecraft.world.storage.WorldInfo; + +public class DataFixesManager +{ + private static void registerFixes(DataFixer fixer) + { + fixer.registerFix(FixTypes.ENTITY, new EntityArmorAndHeld()); + fixer.registerFix(FixTypes.BLOCK_ENTITY, new SignStrictJSON()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new ItemIntIDToString()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new PotionItems()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new SpawnEggNames()); + fixer.registerFix(FixTypes.ENTITY, new MinecartEntityTypes()); + fixer.registerFix(FixTypes.BLOCK_ENTITY, new SpawnerEntityTypes()); + fixer.registerFix(FixTypes.ENTITY, new StringToUUID()); + fixer.registerFix(FixTypes.ENTITY, new EntityHealth()); + fixer.registerFix(FixTypes.ENTITY, new HorseSaddle()); + fixer.registerFix(FixTypes.ENTITY, new PaintingDirection()); + fixer.registerFix(FixTypes.ENTITY, new RedundantChanceTags()); + fixer.registerFix(FixTypes.ENTITY, new RidingToPassengers()); + fixer.registerFix(FixTypes.ENTITY, new ArmorStandSilent()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new BookPagesStrictJSON()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new CookedFishIDTypo()); + fixer.registerFix(FixTypes.ENTITY, new ZombieProfToType()); + fixer.registerFix(FixTypes.OPTIONS, new ForceVBOOn()); + fixer.registerFix(FixTypes.ENTITY, new ElderGuardianSplit()); + fixer.registerFix(FixTypes.ENTITY, new SkeletonSplit()); + fixer.registerFix(FixTypes.ENTITY, new ZombieSplit()); + fixer.registerFix(FixTypes.ENTITY, new HorseSplit()); + fixer.registerFix(FixTypes.BLOCK_ENTITY, new TileEntityId()); + fixer.registerFix(FixTypes.ENTITY, new EntityId()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new BannerItemColor()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new PotionWater()); + fixer.registerFix(FixTypes.ENTITY, new ShulkerBoxEntityColor()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new ShulkerBoxItemColor()); + fixer.registerFix(FixTypes.BLOCK_ENTITY, new ShulkerBoxTileColor()); + fixer.registerFix(FixTypes.OPTIONS, new OptionsLowerCaseLanguage()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new TotemItemRename()); + fixer.registerFix(FixTypes.CHUNK, new AddBedTileEntity()); + fixer.registerFix(FixTypes.ITEM_INSTANCE, new BedItemColor()); + } + + public static DataFixer createFixer() + { + DataFixer datafixer = new DataFixer(1343); + datafixer = new net.minecraftforge.common.util.CompoundDataFixer(datafixer); + WorldInfo.registerFixes(datafixer); + EntityPlayerMP.registerFixesPlayerMP(datafixer); + EntityPlayer.registerFixesPlayer(datafixer); + AnvilChunkLoader.registerFixes(datafixer); + ItemStack.registerFixes(datafixer); + Template.registerFixes(datafixer); + Entity.registerFixes(datafixer); + EntityArmorStand.registerFixesArmorStand(datafixer); + EntityArrow.registerFixesArrow(datafixer); + EntityBat.registerFixesBat(datafixer); + EntityBlaze.registerFixesBlaze(datafixer); + EntityCaveSpider.registerFixesCaveSpider(datafixer); + EntityChicken.registerFixesChicken(datafixer); + EntityCow.registerFixesCow(datafixer); + EntityCreeper.registerFixesCreeper(datafixer); + EntityDonkey.registerFixesDonkey(datafixer); + EntityDragonFireball.registerFixesDragonFireball(datafixer); + EntityElderGuardian.registerFixesElderGuardian(datafixer); + EntityDragon.registerFixesDragon(datafixer); + EntityEnderman.registerFixesEnderman(datafixer); + EntityEndermite.registerFixesEndermite(datafixer); + EntityEvoker.registerFixesEvoker(datafixer); + EntityFallingBlock.registerFixesFallingBlock(datafixer); + EntityFireworkRocket.registerFixesFireworkRocket(datafixer); + EntityGhast.registerFixesGhast(datafixer); + EntityGiantZombie.registerFixesGiantZombie(datafixer); + EntityGuardian.registerFixesGuardian(datafixer); + EntityHorse.registerFixesHorse(datafixer); + EntityHusk.registerFixesHusk(datafixer); + EntityItem.registerFixesItem(datafixer); + EntityItemFrame.registerFixesItemFrame(datafixer); + EntityLargeFireball.registerFixesLargeFireball(datafixer); + EntityMagmaCube.registerFixesMagmaCube(datafixer); + EntityMinecartChest.registerFixesMinecartChest(datafixer); + EntityMinecartCommandBlock.registerFixesMinecartCommand(datafixer); + EntityMinecartFurnace.registerFixesMinecartFurnace(datafixer); + EntityMinecartHopper.registerFixesMinecartHopper(datafixer); + EntityMinecartEmpty.registerFixesMinecartEmpty(datafixer); + EntityMinecartMobSpawner.registerFixesMinecartMobSpawner(datafixer); + EntityMinecartTNT.registerFixesMinecartTNT(datafixer); + EntityMule.registerFixesMule(datafixer); + EntityMooshroom.registerFixesMooshroom(datafixer); + EntityOcelot.registerFixesOcelot(datafixer); + EntityPig.registerFixesPig(datafixer); + EntityPigZombie.registerFixesPigZombie(datafixer); + EntityRabbit.registerFixesRabbit(datafixer); + EntitySheep.registerFixesSheep(datafixer); + EntityShulker.registerFixesShulker(datafixer); + EntitySilverfish.registerFixesSilverfish(datafixer); + EntitySkeleton.registerFixesSkeleton(datafixer); + EntitySkeletonHorse.registerFixesSkeletonHorse(datafixer); + EntitySlime.registerFixesSlime(datafixer); + EntitySmallFireball.registerFixesSmallFireball(datafixer); + EntitySnowman.registerFixesSnowman(datafixer); + EntitySnowball.registerFixesSnowball(datafixer); + EntitySpectralArrow.registerFixesSpectralArrow(datafixer); + EntitySpider.registerFixesSpider(datafixer); + EntitySquid.registerFixesSquid(datafixer); + EntityStray.registerFixesStray(datafixer); + EntityEgg.registerFixesEgg(datafixer); + EntityEnderPearl.registerFixesEnderPearl(datafixer); + EntityExpBottle.registerFixesExpBottle(datafixer); + EntityPotion.registerFixesPotion(datafixer); + EntityTippedArrow.registerFixesTippedArrow(datafixer); + EntityVex.registerFixesVex(datafixer); + EntityVillager.registerFixesVillager(datafixer); + EntityIronGolem.registerFixesIronGolem(datafixer); + EntityVindicator.registerFixesVindicator(datafixer); + EntityWitch.registerFixesWitch(datafixer); + EntityWither.registerFixesWither(datafixer); + EntityWitherSkeleton.registerFixesWitherSkeleton(datafixer); + EntityWitherSkull.registerFixesWitherSkull(datafixer); + EntityWolf.registerFixesWolf(datafixer); + EntityZombie.registerFixesZombie(datafixer); + EntityZombieHorse.registerFixesZombieHorse(datafixer); + EntityZombieVillager.registerFixesZombieVillager(datafixer); + TileEntityPiston.registerFixesPiston(datafixer); + TileEntityFlowerPot.registerFixesFlowerPot(datafixer); + TileEntityFurnace.registerFixesFurnace(datafixer); + TileEntityChest.registerFixesChest(datafixer); + TileEntityDispenser.registerFixes(datafixer); + TileEntityDropper.registerFixesDropper(datafixer); + TileEntityBrewingStand.registerFixesBrewingStand(datafixer); + TileEntityHopper.registerFixesHopper(datafixer); + BlockJukebox.registerFixesJukebox(datafixer); + TileEntityMobSpawner.registerFixesMobSpawner(datafixer); + TileEntityShulkerBox.registerFixesShulkerBox(datafixer); + registerFixes(datafixer); + return datafixer; + } + + public static NBTTagCompound processItemStack(IDataFixer fixer, NBTTagCompound compound, int version, String key) + { + if (compound.hasKey(key, 10)) + { + compound.setTag(key, fixer.process(FixTypes.ITEM_INSTANCE, compound.getCompoundTag(key), version)); + } + + return compound; + } + + public static NBTTagCompound processInventory(IDataFixer fixer, NBTTagCompound compound, int version, String key) + { + if (compound.hasKey(key, 9)) + { + NBTTagList nbttaglist = compound.getTagList(key, 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + nbttaglist.set(i, fixer.process(FixTypes.ITEM_INSTANCE, nbttaglist.getCompoundTagAt(i), version)); + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/FixTypes.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/FixTypes.java new file mode 100644 index 0000000..f4f493b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/FixTypes.java @@ -0,0 +1,13 @@ +package net.minecraft.util.datafix; + +public enum FixTypes implements IFixType +{ + LEVEL, + PLAYER, + CHUNK, + BLOCK_ENTITY, + ENTITY, + ITEM_INSTANCE, + OPTIONS, + STRUCTURE; +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IDataFixer.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IDataFixer.java new file mode 100644 index 0000000..88b419b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IDataFixer.java @@ -0,0 +1,8 @@ +package net.minecraft.util.datafix; + +import net.minecraft.nbt.NBTTagCompound; + +public interface IDataFixer +{ + NBTTagCompound process(IFixType type, NBTTagCompound compound, int versionIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IDataWalker.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IDataWalker.java new file mode 100644 index 0000000..7559524 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IDataWalker.java @@ -0,0 +1,8 @@ +package net.minecraft.util.datafix; + +import net.minecraft.nbt.NBTTagCompound; + +public interface IDataWalker +{ + NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IFixType.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IFixType.java new file mode 100644 index 0000000..6f38263 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IFixType.java @@ -0,0 +1,5 @@ +package net.minecraft.util.datafix; + +public interface IFixType +{ +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IFixableData.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IFixableData.java new file mode 100644 index 0000000..76f561f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/IFixableData.java @@ -0,0 +1,10 @@ +package net.minecraft.util.datafix; + +import net.minecraft.nbt.NBTTagCompound; + +public interface IFixableData +{ + int getFixVersion(); + + NBTTagCompound fixTagCompound(NBTTagCompound compound); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/AddBedTileEntity.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/AddBedTileEntity.java new file mode 100644 index 0000000..386843e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/AddBedTileEntity.java @@ -0,0 +1,60 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class AddBedTileEntity implements IFixableData +{ + private static final Logger LOGGER = LogManager.getLogger(); + + public int getFixVersion() + { + return 1125; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + int i = 416; + + try + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("Level"); + int j = nbttagcompound.getInteger("xPos"); + int k = nbttagcompound.getInteger("zPos"); + NBTTagList nbttaglist = nbttagcompound.getTagList("TileEntities", 10); + NBTTagList nbttaglist1 = nbttagcompound.getTagList("Sections", 10); + + for (int l = 0; l < nbttaglist1.tagCount(); ++l) + { + NBTTagCompound nbttagcompound1 = nbttaglist1.getCompoundTagAt(l); + int i1 = nbttagcompound1.getByte("Y"); + byte[] abyte = nbttagcompound1.getByteArray("Blocks"); + + for (int j1 = 0; j1 < abyte.length; ++j1) + { + if (416 == (abyte[j1] & 255) << 4) + { + int k1 = j1 & 15; + int l1 = j1 >> 8 & 15; + int i2 = j1 >> 4 & 15; + NBTTagCompound nbttagcompound2 = new NBTTagCompound(); + nbttagcompound2.setString("id", "bed"); + nbttagcompound2.setInteger("x", k1 + (j << 4)); + nbttagcompound2.setInteger("y", l1 + (i1 << 4)); + nbttagcompound2.setInteger("z", i2 + (k << 4)); + nbttaglist.appendTag(nbttagcompound2); + } + } + } + } + catch (Exception var17) + { + LOGGER.warn("Unable to datafix Bed blocks, level format may be missing tags."); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ArmorStandSilent.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ArmorStandSilent.java new file mode 100644 index 0000000..b284c2e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ArmorStandSilent.java @@ -0,0 +1,22 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ArmorStandSilent implements IFixableData +{ + public int getFixVersion() + { + return 147; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("ArmorStand".equals(compound.getString("id")) && compound.getBoolean("Silent") && !compound.getBoolean("Marker")) + { + compound.removeTag("Silent"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BannerItemColor.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BannerItemColor.java new file mode 100644 index 0000000..9555644 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BannerItemColor.java @@ -0,0 +1,60 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; + +public class BannerItemColor implements IFixableData +{ + public int getFixVersion() + { + return 804; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:banner".equals(compound.getString("id")) && compound.hasKey("tag", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + + if (nbttagcompound.hasKey("BlockEntityTag", 10)) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("BlockEntityTag"); + + if (nbttagcompound1.hasKey("Base", 99)) + { + compound.setShort("Damage", (short)(nbttagcompound1.getShort("Base") & 15)); + + if (nbttagcompound.hasKey("display", 10)) + { + NBTTagCompound nbttagcompound2 = nbttagcompound.getCompoundTag("display"); + + if (nbttagcompound2.hasKey("Lore", 9)) + { + NBTTagList nbttaglist = nbttagcompound2.getTagList("Lore", 8); + + if (nbttaglist.tagCount() == 1 && "(+NBT)".equals(nbttaglist.getStringTagAt(0))) + { + return compound; + } + } + } + + nbttagcompound1.removeTag("Base"); + + if (nbttagcompound1.hasNoTags()) + { + nbttagcompound.removeTag("BlockEntityTag"); + } + + if (nbttagcompound.hasNoTags()) + { + compound.removeTag("tag"); + } + } + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BedItemColor.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BedItemColor.java new file mode 100644 index 0000000..23f3cf5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BedItemColor.java @@ -0,0 +1,23 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.item.EnumDyeColor; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class BedItemColor implements IFixableData +{ + public int getFixVersion() + { + return 1125; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:bed".equals(compound.getString("id")) && compound.getShort("Damage") == 0) + { + compound.setShort("Damage", (short)EnumDyeColor.RED.getMetadata()); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BookPagesStrictJSON.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BookPagesStrictJSON.java new file mode 100644 index 0000000..d378274 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/BookPagesStrictJSON.java @@ -0,0 +1,101 @@ +package net.minecraft.util.datafix.fixes; + +import com.google.gson.JsonParseException; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.StringUtils; +import net.minecraft.util.datafix.IFixableData; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; + +public class BookPagesStrictJSON implements IFixableData +{ + public int getFixVersion() + { + return 165; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:written_book".equals(compound.getString("id"))) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + + if (nbttagcompound.hasKey("pages", 9)) + { + NBTTagList nbttaglist = nbttagcompound.getTagList("pages", 8); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + String s = nbttaglist.getStringTagAt(i); + ITextComponent itextcomponent = null; + + if (!"null".equals(s) && !StringUtils.isNullOrEmpty(s)) + { + if (s.charAt(0) == '"' && s.charAt(s.length() - 1) == '"' || s.charAt(0) == '{' && s.charAt(s.length() - 1) == '}') + { + try + { + itextcomponent = (ITextComponent)JsonUtils.gsonDeserialize(SignStrictJSON.GSON_INSTANCE, s, ITextComponent.class, true); + + if (itextcomponent == null) + { + itextcomponent = new TextComponentString(""); + } + } + catch (JsonParseException var10) + { + ; + } + + if (itextcomponent == null) + { + try + { + itextcomponent = ITextComponent.Serializer.jsonToComponent(s); + } + catch (JsonParseException var9) + { + ; + } + } + + if (itextcomponent == null) + { + try + { + itextcomponent = ITextComponent.Serializer.fromJsonLenient(s); + } + catch (JsonParseException var8) + { + ; + } + } + + if (itextcomponent == null) + { + itextcomponent = new TextComponentString(s); + } + } + else + { + itextcomponent = new TextComponentString(s); + } + } + else + { + itextcomponent = new TextComponentString(""); + } + + nbttaglist.set(i, new NBTTagString(ITextComponent.Serializer.componentToJson(itextcomponent))); + } + + nbttagcompound.setTag("pages", nbttaglist); + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/CookedFishIDTypo.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/CookedFishIDTypo.java new file mode 100644 index 0000000..ba19ba8 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/CookedFishIDTypo.java @@ -0,0 +1,25 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.IFixableData; + +public class CookedFishIDTypo implements IFixableData +{ + private static final ResourceLocation WRONG = new ResourceLocation("cooked_fished"); + + public int getFixVersion() + { + return 502; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (compound.hasKey("id", 8) && WRONG.equals(new ResourceLocation(compound.getString("id")))) + { + compound.setString("id", "minecraft:cooked_fish"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ElderGuardianSplit.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ElderGuardianSplit.java new file mode 100644 index 0000000..6b69d87 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ElderGuardianSplit.java @@ -0,0 +1,27 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ElderGuardianSplit implements IFixableData +{ + public int getFixVersion() + { + return 700; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("Guardian".equals(compound.getString("id"))) + { + if (compound.getBoolean("Elder")) + { + compound.setString("id", "ElderGuardian"); + } + + compound.removeTag("Elder"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityArmorAndHeld.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityArmorAndHeld.java new file mode 100644 index 0000000..2912bb2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityArmorAndHeld.java @@ -0,0 +1,66 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; + +public class EntityArmorAndHeld implements IFixableData +{ + public int getFixVersion() + { + return 100; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + NBTTagList nbttaglist = compound.getTagList("Equipment", 10); + + if (!nbttaglist.hasNoTags() && !compound.hasKey("HandItems", 10)) + { + NBTTagList nbttaglist1 = new NBTTagList(); + nbttaglist1.appendTag(nbttaglist.get(0)); + nbttaglist1.appendTag(new NBTTagCompound()); + compound.setTag("HandItems", nbttaglist1); + } + + if (nbttaglist.tagCount() > 1 && !compound.hasKey("ArmorItem", 10)) + { + NBTTagList nbttaglist3 = new NBTTagList(); + nbttaglist3.appendTag(nbttaglist.getCompoundTagAt(1)); + nbttaglist3.appendTag(nbttaglist.getCompoundTagAt(2)); + nbttaglist3.appendTag(nbttaglist.getCompoundTagAt(3)); + nbttaglist3.appendTag(nbttaglist.getCompoundTagAt(4)); + compound.setTag("ArmorItems", nbttaglist3); + } + + compound.removeTag("Equipment"); + + if (compound.hasKey("DropChances", 9)) + { + NBTTagList nbttaglist4 = compound.getTagList("DropChances", 5); + + if (!compound.hasKey("HandDropChances", 10)) + { + NBTTagList nbttaglist2 = new NBTTagList(); + nbttaglist2.appendTag(new NBTTagFloat(nbttaglist4.getFloatAt(0))); + nbttaglist2.appendTag(new NBTTagFloat(0.0F)); + compound.setTag("HandDropChances", nbttaglist2); + } + + if (!compound.hasKey("ArmorDropChances", 10)) + { + NBTTagList nbttaglist5 = new NBTTagList(); + nbttaglist5.appendTag(new NBTTagFloat(nbttaglist4.getFloatAt(1))); + nbttaglist5.appendTag(new NBTTagFloat(nbttaglist4.getFloatAt(2))); + nbttaglist5.appendTag(new NBTTagFloat(nbttaglist4.getFloatAt(3))); + nbttaglist5.appendTag(new NBTTagFloat(nbttaglist4.getFloatAt(4))); + compound.setTag("ArmorDropChances", nbttaglist5); + } + + compound.removeTag("DropChances"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityHealth.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityHealth.java new file mode 100644 index 0000000..6b3ddfc --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityHealth.java @@ -0,0 +1,43 @@ +package net.minecraft.util.datafix.fixes; + +import com.google.common.collect.Sets; +import java.util.Set; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class EntityHealth implements IFixableData +{ + private static final Set ENTITY_LIST = Sets.newHashSet("ArmorStand", "Bat", "Blaze", "CaveSpider", "Chicken", "Cow", "Creeper", "EnderDragon", "Enderman", "Endermite", "EntityHorse", "Ghast", "Giant", "Guardian", "LavaSlime", "MushroomCow", "Ozelot", "Pig", "PigZombie", "Rabbit", "Sheep", "Shulker", "Silverfish", "Skeleton", "Slime", "SnowMan", "Spider", "Squid", "Villager", "VillagerGolem", "Witch", "WitherBoss", "Wolf", "Zombie"); + + public int getFixVersion() + { + return 109; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (ENTITY_LIST.contains(compound.getString("id"))) + { + float f; + + if (compound.hasKey("HealF", 99)) + { + f = compound.getFloat("HealF"); + compound.removeTag("HealF"); + } + else + { + if (!compound.hasKey("Health", 99)) + { + return compound; + } + + f = compound.getFloat("Health"); + } + + compound.setFloat("Health", f); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityId.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityId.java new file mode 100644 index 0000000..a6debb9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/EntityId.java @@ -0,0 +1,107 @@ +package net.minecraft.util.datafix.fixes; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class EntityId implements IFixableData +{ + private static final Map OLD_TO_NEW_ID_MAP = Maps.newHashMap(); + + public int getFixVersion() + { + return 704; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + String s = OLD_TO_NEW_ID_MAP.get(compound.getString("id")); + + if (s != null) + { + compound.setString("id", s); + } + + return compound; + } + + static + { + OLD_TO_NEW_ID_MAP.put("AreaEffectCloud", "minecraft:area_effect_cloud"); + OLD_TO_NEW_ID_MAP.put("ArmorStand", "minecraft:armor_stand"); + OLD_TO_NEW_ID_MAP.put("Arrow", "minecraft:arrow"); + OLD_TO_NEW_ID_MAP.put("Bat", "minecraft:bat"); + OLD_TO_NEW_ID_MAP.put("Blaze", "minecraft:blaze"); + OLD_TO_NEW_ID_MAP.put("Boat", "minecraft:boat"); + OLD_TO_NEW_ID_MAP.put("CaveSpider", "minecraft:cave_spider"); + OLD_TO_NEW_ID_MAP.put("Chicken", "minecraft:chicken"); + OLD_TO_NEW_ID_MAP.put("Cow", "minecraft:cow"); + OLD_TO_NEW_ID_MAP.put("Creeper", "minecraft:creeper"); + OLD_TO_NEW_ID_MAP.put("Donkey", "minecraft:donkey"); + OLD_TO_NEW_ID_MAP.put("DragonFireball", "minecraft:dragon_fireball"); + OLD_TO_NEW_ID_MAP.put("ElderGuardian", "minecraft:elder_guardian"); + OLD_TO_NEW_ID_MAP.put("EnderCrystal", "minecraft:ender_crystal"); + OLD_TO_NEW_ID_MAP.put("EnderDragon", "minecraft:ender_dragon"); + OLD_TO_NEW_ID_MAP.put("Enderman", "minecraft:enderman"); + OLD_TO_NEW_ID_MAP.put("Endermite", "minecraft:endermite"); + OLD_TO_NEW_ID_MAP.put("EyeOfEnderSignal", "minecraft:eye_of_ender_signal"); + OLD_TO_NEW_ID_MAP.put("FallingSand", "minecraft:falling_block"); + OLD_TO_NEW_ID_MAP.put("Fireball", "minecraft:fireball"); + OLD_TO_NEW_ID_MAP.put("FireworksRocketEntity", "minecraft:fireworks_rocket"); + OLD_TO_NEW_ID_MAP.put("Ghast", "minecraft:ghast"); + OLD_TO_NEW_ID_MAP.put("Giant", "minecraft:giant"); + OLD_TO_NEW_ID_MAP.put("Guardian", "minecraft:guardian"); + OLD_TO_NEW_ID_MAP.put("Horse", "minecraft:horse"); + OLD_TO_NEW_ID_MAP.put("Husk", "minecraft:husk"); + OLD_TO_NEW_ID_MAP.put("Item", "minecraft:item"); + OLD_TO_NEW_ID_MAP.put("ItemFrame", "minecraft:item_frame"); + OLD_TO_NEW_ID_MAP.put("LavaSlime", "minecraft:magma_cube"); + OLD_TO_NEW_ID_MAP.put("LeashKnot", "minecraft:leash_knot"); + OLD_TO_NEW_ID_MAP.put("MinecartChest", "minecraft:chest_minecart"); + OLD_TO_NEW_ID_MAP.put("MinecartCommandBlock", "minecraft:commandblock_minecart"); + OLD_TO_NEW_ID_MAP.put("MinecartFurnace", "minecraft:furnace_minecart"); + OLD_TO_NEW_ID_MAP.put("MinecartHopper", "minecraft:hopper_minecart"); + OLD_TO_NEW_ID_MAP.put("MinecartRideable", "minecraft:minecart"); + OLD_TO_NEW_ID_MAP.put("MinecartSpawner", "minecraft:spawner_minecart"); + OLD_TO_NEW_ID_MAP.put("MinecartTNT", "minecraft:tnt_minecart"); + OLD_TO_NEW_ID_MAP.put("Mule", "minecraft:mule"); + OLD_TO_NEW_ID_MAP.put("MushroomCow", "minecraft:mooshroom"); + OLD_TO_NEW_ID_MAP.put("Ozelot", "minecraft:ocelot"); + OLD_TO_NEW_ID_MAP.put("Painting", "minecraft:painting"); + OLD_TO_NEW_ID_MAP.put("Pig", "minecraft:pig"); + OLD_TO_NEW_ID_MAP.put("PigZombie", "minecraft:zombie_pigman"); + OLD_TO_NEW_ID_MAP.put("PolarBear", "minecraft:polar_bear"); + OLD_TO_NEW_ID_MAP.put("PrimedTnt", "minecraft:tnt"); + OLD_TO_NEW_ID_MAP.put("Rabbit", "minecraft:rabbit"); + OLD_TO_NEW_ID_MAP.put("Sheep", "minecraft:sheep"); + OLD_TO_NEW_ID_MAP.put("Shulker", "minecraft:shulker"); + OLD_TO_NEW_ID_MAP.put("ShulkerBullet", "minecraft:shulker_bullet"); + OLD_TO_NEW_ID_MAP.put("Silverfish", "minecraft:silverfish"); + OLD_TO_NEW_ID_MAP.put("Skeleton", "minecraft:skeleton"); + OLD_TO_NEW_ID_MAP.put("SkeletonHorse", "minecraft:skeleton_horse"); + OLD_TO_NEW_ID_MAP.put("Slime", "minecraft:slime"); + OLD_TO_NEW_ID_MAP.put("SmallFireball", "minecraft:small_fireball"); + OLD_TO_NEW_ID_MAP.put("SnowMan", "minecraft:snowman"); + OLD_TO_NEW_ID_MAP.put("Snowball", "minecraft:snowball"); + OLD_TO_NEW_ID_MAP.put("SpectralArrow", "minecraft:spectral_arrow"); + OLD_TO_NEW_ID_MAP.put("Spider", "minecraft:spider"); + OLD_TO_NEW_ID_MAP.put("Squid", "minecraft:squid"); + OLD_TO_NEW_ID_MAP.put("Stray", "minecraft:stray"); + OLD_TO_NEW_ID_MAP.put("ThrownEgg", "minecraft:egg"); + OLD_TO_NEW_ID_MAP.put("ThrownEnderpearl", "minecraft:ender_pearl"); + OLD_TO_NEW_ID_MAP.put("ThrownExpBottle", "minecraft:xp_bottle"); + OLD_TO_NEW_ID_MAP.put("ThrownPotion", "minecraft:potion"); + OLD_TO_NEW_ID_MAP.put("Villager", "minecraft:villager"); + OLD_TO_NEW_ID_MAP.put("VillagerGolem", "minecraft:villager_golem"); + OLD_TO_NEW_ID_MAP.put("Witch", "minecraft:witch"); + OLD_TO_NEW_ID_MAP.put("WitherBoss", "minecraft:wither"); + OLD_TO_NEW_ID_MAP.put("WitherSkeleton", "minecraft:wither_skeleton"); + OLD_TO_NEW_ID_MAP.put("WitherSkull", "minecraft:wither_skull"); + OLD_TO_NEW_ID_MAP.put("Wolf", "minecraft:wolf"); + OLD_TO_NEW_ID_MAP.put("XPOrb", "minecraft:xp_orb"); + OLD_TO_NEW_ID_MAP.put("Zombie", "minecraft:zombie"); + OLD_TO_NEW_ID_MAP.put("ZombieHorse", "minecraft:zombie_horse"); + OLD_TO_NEW_ID_MAP.put("ZombieVillager", "minecraft:zombie_villager"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ForceVBOOn.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ForceVBOOn.java new file mode 100644 index 0000000..05de466 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ForceVBOOn.java @@ -0,0 +1,18 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ForceVBOOn implements IFixableData +{ + public int getFixVersion() + { + return 505; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + compound.setString("useVbo", "true"); + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/HorseSaddle.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/HorseSaddle.java new file mode 100644 index 0000000..225aefe --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/HorseSaddle.java @@ -0,0 +1,27 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class HorseSaddle implements IFixableData +{ + public int getFixVersion() + { + return 110; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("EntityHorse".equals(compound.getString("id")) && !compound.hasKey("SaddleItem", 10) && compound.getBoolean("Saddle")) + { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + nbttagcompound.setString("id", "minecraft:saddle"); + nbttagcompound.setByte("Count", (byte)1); + nbttagcompound.setShort("Damage", (short)0); + compound.setTag("SaddleItem", nbttagcompound); + compound.removeTag("Saddle"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/HorseSplit.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/HorseSplit.java new file mode 100644 index 0000000..9ec311d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/HorseSplit.java @@ -0,0 +1,43 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class HorseSplit implements IFixableData +{ + public int getFixVersion() + { + return 703; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("EntityHorse".equals(compound.getString("id"))) + { + int i = compound.getInteger("Type"); + + switch (i) + { + case 0: + default: + compound.setString("id", "Horse"); + break; + case 1: + compound.setString("id", "Donkey"); + break; + case 2: + compound.setString("id", "Mule"); + break; + case 3: + compound.setString("id", "ZombieHorse"); + break; + case 4: + compound.setString("id", "SkeletonHorse"); + } + + compound.removeTag("Type"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ItemIntIDToString.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ItemIntIDToString.java new file mode 100644 index 0000000..49df7e2 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ItemIntIDToString.java @@ -0,0 +1,348 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ItemIntIDToString implements IFixableData +{ + private static final String[] ID_MAP = new String[2268]; + + public int getFixVersion() + { + return 102; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (compound.hasKey("id", 99)) + { + short short1 = compound.getShort("id"); + + if (short1 > 0 && short1 < ID_MAP.length && ID_MAP[short1] != null) + { + compound.setString("id", ID_MAP[short1]); + } + } + + return compound; + } + + static + { + ID_MAP[1] = "minecraft:stone"; + ID_MAP[2] = "minecraft:grass"; + ID_MAP[3] = "minecraft:dirt"; + ID_MAP[4] = "minecraft:cobblestone"; + ID_MAP[5] = "minecraft:planks"; + ID_MAP[6] = "minecraft:sapling"; + ID_MAP[7] = "minecraft:bedrock"; + ID_MAP[8] = "minecraft:flowing_water"; + ID_MAP[9] = "minecraft:water"; + ID_MAP[10] = "minecraft:flowing_lava"; + ID_MAP[11] = "minecraft:lava"; + ID_MAP[12] = "minecraft:sand"; + ID_MAP[13] = "minecraft:gravel"; + ID_MAP[14] = "minecraft:gold_ore"; + ID_MAP[15] = "minecraft:iron_ore"; + ID_MAP[16] = "minecraft:coal_ore"; + ID_MAP[17] = "minecraft:log"; + ID_MAP[18] = "minecraft:leaves"; + ID_MAP[19] = "minecraft:sponge"; + ID_MAP[20] = "minecraft:glass"; + ID_MAP[21] = "minecraft:lapis_ore"; + ID_MAP[22] = "minecraft:lapis_block"; + ID_MAP[23] = "minecraft:dispenser"; + ID_MAP[24] = "minecraft:sandstone"; + ID_MAP[25] = "minecraft:noteblock"; + ID_MAP[27] = "minecraft:golden_rail"; + ID_MAP[28] = "minecraft:detector_rail"; + ID_MAP[29] = "minecraft:sticky_piston"; + ID_MAP[30] = "minecraft:web"; + ID_MAP[31] = "minecraft:tallgrass"; + ID_MAP[32] = "minecraft:deadbush"; + ID_MAP[33] = "minecraft:piston"; + ID_MAP[35] = "minecraft:wool"; + ID_MAP[37] = "minecraft:yellow_flower"; + ID_MAP[38] = "minecraft:red_flower"; + ID_MAP[39] = "minecraft:brown_mushroom"; + ID_MAP[40] = "minecraft:red_mushroom"; + ID_MAP[41] = "minecraft:gold_block"; + ID_MAP[42] = "minecraft:iron_block"; + ID_MAP[43] = "minecraft:double_stone_slab"; + ID_MAP[44] = "minecraft:stone_slab"; + ID_MAP[45] = "minecraft:brick_block"; + ID_MAP[46] = "minecraft:tnt"; + ID_MAP[47] = "minecraft:bookshelf"; + ID_MAP[48] = "minecraft:mossy_cobblestone"; + ID_MAP[49] = "minecraft:obsidian"; + ID_MAP[50] = "minecraft:torch"; + ID_MAP[51] = "minecraft:fire"; + ID_MAP[52] = "minecraft:mob_spawner"; + ID_MAP[53] = "minecraft:oak_stairs"; + ID_MAP[54] = "minecraft:chest"; + ID_MAP[56] = "minecraft:diamond_ore"; + ID_MAP[57] = "minecraft:diamond_block"; + ID_MAP[58] = "minecraft:crafting_table"; + ID_MAP[60] = "minecraft:farmland"; + ID_MAP[61] = "minecraft:furnace"; + ID_MAP[62] = "minecraft:lit_furnace"; + ID_MAP[65] = "minecraft:ladder"; + ID_MAP[66] = "minecraft:rail"; + ID_MAP[67] = "minecraft:stone_stairs"; + ID_MAP[69] = "minecraft:lever"; + ID_MAP[70] = "minecraft:stone_pressure_plate"; + ID_MAP[72] = "minecraft:wooden_pressure_plate"; + ID_MAP[73] = "minecraft:redstone_ore"; + ID_MAP[76] = "minecraft:redstone_torch"; + ID_MAP[77] = "minecraft:stone_button"; + ID_MAP[78] = "minecraft:snow_layer"; + ID_MAP[79] = "minecraft:ice"; + ID_MAP[80] = "minecraft:snow"; + ID_MAP[81] = "minecraft:cactus"; + ID_MAP[82] = "minecraft:clay"; + ID_MAP[84] = "minecraft:jukebox"; + ID_MAP[85] = "minecraft:fence"; + ID_MAP[86] = "minecraft:pumpkin"; + ID_MAP[87] = "minecraft:netherrack"; + ID_MAP[88] = "minecraft:soul_sand"; + ID_MAP[89] = "minecraft:glowstone"; + ID_MAP[90] = "minecraft:portal"; + ID_MAP[91] = "minecraft:lit_pumpkin"; + ID_MAP[95] = "minecraft:stained_glass"; + ID_MAP[96] = "minecraft:trapdoor"; + ID_MAP[97] = "minecraft:monster_egg"; + ID_MAP[98] = "minecraft:stonebrick"; + ID_MAP[99] = "minecraft:brown_mushroom_block"; + ID_MAP[100] = "minecraft:red_mushroom_block"; + ID_MAP[101] = "minecraft:iron_bars"; + ID_MAP[102] = "minecraft:glass_pane"; + ID_MAP[103] = "minecraft:melon_block"; + ID_MAP[106] = "minecraft:vine"; + ID_MAP[107] = "minecraft:fence_gate"; + ID_MAP[108] = "minecraft:brick_stairs"; + ID_MAP[109] = "minecraft:stone_brick_stairs"; + ID_MAP[110] = "minecraft:mycelium"; + ID_MAP[111] = "minecraft:waterlily"; + ID_MAP[112] = "minecraft:nether_brick"; + ID_MAP[113] = "minecraft:nether_brick_fence"; + ID_MAP[114] = "minecraft:nether_brick_stairs"; + ID_MAP[116] = "minecraft:enchanting_table"; + ID_MAP[119] = "minecraft:end_portal"; + ID_MAP[120] = "minecraft:end_portal_frame"; + ID_MAP[121] = "minecraft:end_stone"; + ID_MAP[122] = "minecraft:dragon_egg"; + ID_MAP[123] = "minecraft:redstone_lamp"; + ID_MAP[125] = "minecraft:double_wooden_slab"; + ID_MAP[126] = "minecraft:wooden_slab"; + ID_MAP[127] = "minecraft:cocoa"; + ID_MAP[128] = "minecraft:sandstone_stairs"; + ID_MAP[129] = "minecraft:emerald_ore"; + ID_MAP[130] = "minecraft:ender_chest"; + ID_MAP[131] = "minecraft:tripwire_hook"; + ID_MAP[133] = "minecraft:emerald_block"; + ID_MAP[134] = "minecraft:spruce_stairs"; + ID_MAP[135] = "minecraft:birch_stairs"; + ID_MAP[136] = "minecraft:jungle_stairs"; + ID_MAP[137] = "minecraft:command_block"; + ID_MAP[138] = "minecraft:beacon"; + ID_MAP[139] = "minecraft:cobblestone_wall"; + ID_MAP[141] = "minecraft:carrots"; + ID_MAP[142] = "minecraft:potatoes"; + ID_MAP[143] = "minecraft:wooden_button"; + ID_MAP[145] = "minecraft:anvil"; + ID_MAP[146] = "minecraft:trapped_chest"; + ID_MAP[147] = "minecraft:light_weighted_pressure_plate"; + ID_MAP[148] = "minecraft:heavy_weighted_pressure_plate"; + ID_MAP[151] = "minecraft:daylight_detector"; + ID_MAP[152] = "minecraft:redstone_block"; + ID_MAP[153] = "minecraft:quartz_ore"; + ID_MAP[154] = "minecraft:hopper"; + ID_MAP[155] = "minecraft:quartz_block"; + ID_MAP[156] = "minecraft:quartz_stairs"; + ID_MAP[157] = "minecraft:activator_rail"; + ID_MAP[158] = "minecraft:dropper"; + ID_MAP[159] = "minecraft:stained_hardened_clay"; + ID_MAP[160] = "minecraft:stained_glass_pane"; + ID_MAP[161] = "minecraft:leaves2"; + ID_MAP[162] = "minecraft:log2"; + ID_MAP[163] = "minecraft:acacia_stairs"; + ID_MAP[164] = "minecraft:dark_oak_stairs"; + ID_MAP[170] = "minecraft:hay_block"; + ID_MAP[171] = "minecraft:carpet"; + ID_MAP[172] = "minecraft:hardened_clay"; + ID_MAP[173] = "minecraft:coal_block"; + ID_MAP[174] = "minecraft:packed_ice"; + ID_MAP[175] = "minecraft:double_plant"; + ID_MAP[256] = "minecraft:iron_shovel"; + ID_MAP[257] = "minecraft:iron_pickaxe"; + ID_MAP[258] = "minecraft:iron_axe"; + ID_MAP[259] = "minecraft:flint_and_steel"; + ID_MAP[260] = "minecraft:apple"; + ID_MAP[261] = "minecraft:bow"; + ID_MAP[262] = "minecraft:arrow"; + ID_MAP[263] = "minecraft:coal"; + ID_MAP[264] = "minecraft:diamond"; + ID_MAP[265] = "minecraft:iron_ingot"; + ID_MAP[266] = "minecraft:gold_ingot"; + ID_MAP[267] = "minecraft:iron_sword"; + ID_MAP[268] = "minecraft:wooden_sword"; + ID_MAP[269] = "minecraft:wooden_shovel"; + ID_MAP[270] = "minecraft:wooden_pickaxe"; + ID_MAP[271] = "minecraft:wooden_axe"; + ID_MAP[272] = "minecraft:stone_sword"; + ID_MAP[273] = "minecraft:stone_shovel"; + ID_MAP[274] = "minecraft:stone_pickaxe"; + ID_MAP[275] = "minecraft:stone_axe"; + ID_MAP[276] = "minecraft:diamond_sword"; + ID_MAP[277] = "minecraft:diamond_shovel"; + ID_MAP[278] = "minecraft:diamond_pickaxe"; + ID_MAP[279] = "minecraft:diamond_axe"; + ID_MAP[280] = "minecraft:stick"; + ID_MAP[281] = "minecraft:bowl"; + ID_MAP[282] = "minecraft:mushroom_stew"; + ID_MAP[283] = "minecraft:golden_sword"; + ID_MAP[284] = "minecraft:golden_shovel"; + ID_MAP[285] = "minecraft:golden_pickaxe"; + ID_MAP[286] = "minecraft:golden_axe"; + ID_MAP[287] = "minecraft:string"; + ID_MAP[288] = "minecraft:feather"; + ID_MAP[289] = "minecraft:gunpowder"; + ID_MAP[290] = "minecraft:wooden_hoe"; + ID_MAP[291] = "minecraft:stone_hoe"; + ID_MAP[292] = "minecraft:iron_hoe"; + ID_MAP[293] = "minecraft:diamond_hoe"; + ID_MAP[294] = "minecraft:golden_hoe"; + ID_MAP[295] = "minecraft:wheat_seeds"; + ID_MAP[296] = "minecraft:wheat"; + ID_MAP[297] = "minecraft:bread"; + ID_MAP[298] = "minecraft:leather_helmet"; + ID_MAP[299] = "minecraft:leather_chestplate"; + ID_MAP[300] = "minecraft:leather_leggings"; + ID_MAP[301] = "minecraft:leather_boots"; + ID_MAP[302] = "minecraft:chainmail_helmet"; + ID_MAP[303] = "minecraft:chainmail_chestplate"; + ID_MAP[304] = "minecraft:chainmail_leggings"; + ID_MAP[305] = "minecraft:chainmail_boots"; + ID_MAP[306] = "minecraft:iron_helmet"; + ID_MAP[307] = "minecraft:iron_chestplate"; + ID_MAP[308] = "minecraft:iron_leggings"; + ID_MAP[309] = "minecraft:iron_boots"; + ID_MAP[310] = "minecraft:diamond_helmet"; + ID_MAP[311] = "minecraft:diamond_chestplate"; + ID_MAP[312] = "minecraft:diamond_leggings"; + ID_MAP[313] = "minecraft:diamond_boots"; + ID_MAP[314] = "minecraft:golden_helmet"; + ID_MAP[315] = "minecraft:golden_chestplate"; + ID_MAP[316] = "minecraft:golden_leggings"; + ID_MAP[317] = "minecraft:golden_boots"; + ID_MAP[318] = "minecraft:flint"; + ID_MAP[319] = "minecraft:porkchop"; + ID_MAP[320] = "minecraft:cooked_porkchop"; + ID_MAP[321] = "minecraft:painting"; + ID_MAP[322] = "minecraft:golden_apple"; + ID_MAP[323] = "minecraft:sign"; + ID_MAP[324] = "minecraft:wooden_door"; + ID_MAP[325] = "minecraft:bucket"; + ID_MAP[326] = "minecraft:water_bucket"; + ID_MAP[327] = "minecraft:lava_bucket"; + ID_MAP[328] = "minecraft:minecart"; + ID_MAP[329] = "minecraft:saddle"; + ID_MAP[330] = "minecraft:iron_door"; + ID_MAP[331] = "minecraft:redstone"; + ID_MAP[332] = "minecraft:snowball"; + ID_MAP[333] = "minecraft:boat"; + ID_MAP[334] = "minecraft:leather"; + ID_MAP[335] = "minecraft:milk_bucket"; + ID_MAP[336] = "minecraft:brick"; + ID_MAP[337] = "minecraft:clay_ball"; + ID_MAP[338] = "minecraft:reeds"; + ID_MAP[339] = "minecraft:paper"; + ID_MAP[340] = "minecraft:book"; + ID_MAP[341] = "minecraft:slime_ball"; + ID_MAP[342] = "minecraft:chest_minecart"; + ID_MAP[343] = "minecraft:furnace_minecart"; + ID_MAP[344] = "minecraft:egg"; + ID_MAP[345] = "minecraft:compass"; + ID_MAP[346] = "minecraft:fishing_rod"; + ID_MAP[347] = "minecraft:clock"; + ID_MAP[348] = "minecraft:glowstone_dust"; + ID_MAP[349] = "minecraft:fish"; + ID_MAP[350] = "minecraft:cooked_fished"; + ID_MAP[351] = "minecraft:dye"; + ID_MAP[352] = "minecraft:bone"; + ID_MAP[353] = "minecraft:sugar"; + ID_MAP[354] = "minecraft:cake"; + ID_MAP[355] = "minecraft:bed"; + ID_MAP[356] = "minecraft:repeater"; + ID_MAP[357] = "minecraft:cookie"; + ID_MAP[358] = "minecraft:filled_map"; + ID_MAP[359] = "minecraft:shears"; + ID_MAP[360] = "minecraft:melon"; + ID_MAP[361] = "minecraft:pumpkin_seeds"; + ID_MAP[362] = "minecraft:melon_seeds"; + ID_MAP[363] = "minecraft:beef"; + ID_MAP[364] = "minecraft:cooked_beef"; + ID_MAP[365] = "minecraft:chicken"; + ID_MAP[366] = "minecraft:cooked_chicken"; + ID_MAP[367] = "minecraft:rotten_flesh"; + ID_MAP[368] = "minecraft:ender_pearl"; + ID_MAP[369] = "minecraft:blaze_rod"; + ID_MAP[370] = "minecraft:ghast_tear"; + ID_MAP[371] = "minecraft:gold_nugget"; + ID_MAP[372] = "minecraft:nether_wart"; + ID_MAP[373] = "minecraft:potion"; + ID_MAP[374] = "minecraft:glass_bottle"; + ID_MAP[375] = "minecraft:spider_eye"; + ID_MAP[376] = "minecraft:fermented_spider_eye"; + ID_MAP[377] = "minecraft:blaze_powder"; + ID_MAP[378] = "minecraft:magma_cream"; + ID_MAP[379] = "minecraft:brewing_stand"; + ID_MAP[380] = "minecraft:cauldron"; + ID_MAP[381] = "minecraft:ender_eye"; + ID_MAP[382] = "minecraft:speckled_melon"; + ID_MAP[383] = "minecraft:spawn_egg"; + ID_MAP[384] = "minecraft:experience_bottle"; + ID_MAP[385] = "minecraft:fire_charge"; + ID_MAP[386] = "minecraft:writable_book"; + ID_MAP[387] = "minecraft:written_book"; + ID_MAP[388] = "minecraft:emerald"; + ID_MAP[389] = "minecraft:item_frame"; + ID_MAP[390] = "minecraft:flower_pot"; + ID_MAP[391] = "minecraft:carrot"; + ID_MAP[392] = "minecraft:potato"; + ID_MAP[393] = "minecraft:baked_potato"; + ID_MAP[394] = "minecraft:poisonous_potato"; + ID_MAP[395] = "minecraft:map"; + ID_MAP[396] = "minecraft:golden_carrot"; + ID_MAP[397] = "minecraft:skull"; + ID_MAP[398] = "minecraft:carrot_on_a_stick"; + ID_MAP[399] = "minecraft:nether_star"; + ID_MAP[400] = "minecraft:pumpkin_pie"; + ID_MAP[401] = "minecraft:fireworks"; + ID_MAP[402] = "minecraft:firework_charge"; + ID_MAP[403] = "minecraft:enchanted_book"; + ID_MAP[404] = "minecraft:comparator"; + ID_MAP[405] = "minecraft:netherbrick"; + ID_MAP[406] = "minecraft:quartz"; + ID_MAP[407] = "minecraft:tnt_minecart"; + ID_MAP[408] = "minecraft:hopper_minecart"; + ID_MAP[417] = "minecraft:iron_horse_armor"; + ID_MAP[418] = "minecraft:golden_horse_armor"; + ID_MAP[419] = "minecraft:diamond_horse_armor"; + ID_MAP[420] = "minecraft:lead"; + ID_MAP[421] = "minecraft:name_tag"; + ID_MAP[422] = "minecraft:command_block_minecart"; + ID_MAP[2256] = "minecraft:record_13"; + ID_MAP[2257] = "minecraft:record_cat"; + ID_MAP[2258] = "minecraft:record_blocks"; + ID_MAP[2259] = "minecraft:record_chirp"; + ID_MAP[2260] = "minecraft:record_far"; + ID_MAP[2261] = "minecraft:record_mall"; + ID_MAP[2262] = "minecraft:record_mellohi"; + ID_MAP[2263] = "minecraft:record_stal"; + ID_MAP[2264] = "minecraft:record_strad"; + ID_MAP[2265] = "minecraft:record_ward"; + ID_MAP[2266] = "minecraft:record_11"; + ID_MAP[2267] = "minecraft:record_wait"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/MinecartEntityTypes.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/MinecartEntityTypes.java new file mode 100644 index 0000000..fa0e05a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/MinecartEntityTypes.java @@ -0,0 +1,35 @@ +package net.minecraft.util.datafix.fixes; + +import com.google.common.collect.Lists; +import java.util.List; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class MinecartEntityTypes implements IFixableData +{ + private static final List MINECART_TYPE_LIST = Lists.newArrayList("MinecartRideable", "MinecartChest", "MinecartFurnace", "MinecartTNT", "MinecartSpawner", "MinecartHopper", "MinecartCommandBlock"); + + public int getFixVersion() + { + return 106; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("Minecart".equals(compound.getString("id"))) + { + String s = "MinecartRideable"; + int i = compound.getInteger("Type"); + + if (i > 0 && i < MINECART_TYPE_LIST.size()) + { + s = MINECART_TYPE_LIST.get(i); + } + + compound.setString("id", s); + compound.removeTag("Type"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.java new file mode 100644 index 0000000..723ca98 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/OptionsLowerCaseLanguage.java @@ -0,0 +1,23 @@ +package net.minecraft.util.datafix.fixes; + +import java.util.Locale; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class OptionsLowerCaseLanguage implements IFixableData +{ + public int getFixVersion() + { + return 816; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (compound.hasKey("lang", 8)) + { + compound.setString("lang", compound.getString("lang").toLowerCase(Locale.ROOT)); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PaintingDirection.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PaintingDirection.java new file mode 100644 index 0000000..955076d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PaintingDirection.java @@ -0,0 +1,48 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.datafix.IFixableData; + +public class PaintingDirection implements IFixableData +{ + public int getFixVersion() + { + return 111; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + String s = compound.getString("id"); + boolean flag = "Painting".equals(s); + boolean flag1 = "ItemFrame".equals(s); + + if ((flag || flag1) && !compound.hasKey("Facing", 99)) + { + EnumFacing enumfacing; + + if (compound.hasKey("Direction", 99)) + { + enumfacing = EnumFacing.getHorizontal(compound.getByte("Direction")); + compound.setInteger("TileX", compound.getInteger("TileX") + enumfacing.getFrontOffsetX()); + compound.setInteger("TileY", compound.getInteger("TileY") + enumfacing.getFrontOffsetY()); + compound.setInteger("TileZ", compound.getInteger("TileZ") + enumfacing.getFrontOffsetZ()); + compound.removeTag("Direction"); + + if (flag1 && compound.hasKey("ItemRotation", 99)) + { + compound.setByte("ItemRotation", (byte)(compound.getByte("ItemRotation") * 2)); + } + } + else + { + enumfacing = EnumFacing.getHorizontal(compound.getByte("Dir")); + compound.removeTag("Dir"); + } + + compound.setByte("Facing", (byte)enumfacing.getHorizontalIndex()); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PotionItems.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PotionItems.java new file mode 100644 index 0000000..5abee12 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PotionItems.java @@ -0,0 +1,174 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class PotionItems implements IFixableData +{ + private static final String[] POTION_IDS = new String[128]; + + public int getFixVersion() + { + return 102; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:potion".equals(compound.getString("id"))) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + short short1 = compound.getShort("Damage"); + + if (!nbttagcompound.hasKey("Potion", 8)) + { + String s = POTION_IDS[short1 & 127]; + nbttagcompound.setString("Potion", s == null ? "minecraft:water" : s); + compound.setTag("tag", nbttagcompound); + + if ((short1 & 16384) == 16384) + { + compound.setString("id", "minecraft:splash_potion"); + } + } + + if (short1 != 0) + { + compound.setShort("Damage", (short)0); + } + } + + return compound; + } + + static + { + POTION_IDS[0] = "minecraft:water"; + POTION_IDS[1] = "minecraft:regeneration"; + POTION_IDS[2] = "minecraft:swiftness"; + POTION_IDS[3] = "minecraft:fire_resistance"; + POTION_IDS[4] = "minecraft:poison"; + POTION_IDS[5] = "minecraft:healing"; + POTION_IDS[6] = "minecraft:night_vision"; + POTION_IDS[7] = null; + POTION_IDS[8] = "minecraft:weakness"; + POTION_IDS[9] = "minecraft:strength"; + POTION_IDS[10] = "minecraft:slowness"; + POTION_IDS[11] = "minecraft:leaping"; + POTION_IDS[12] = "minecraft:harming"; + POTION_IDS[13] = "minecraft:water_breathing"; + POTION_IDS[14] = "minecraft:invisibility"; + POTION_IDS[15] = null; + POTION_IDS[16] = "minecraft:awkward"; + POTION_IDS[17] = "minecraft:regeneration"; + POTION_IDS[18] = "minecraft:swiftness"; + POTION_IDS[19] = "minecraft:fire_resistance"; + POTION_IDS[20] = "minecraft:poison"; + POTION_IDS[21] = "minecraft:healing"; + POTION_IDS[22] = "minecraft:night_vision"; + POTION_IDS[23] = null; + POTION_IDS[24] = "minecraft:weakness"; + POTION_IDS[25] = "minecraft:strength"; + POTION_IDS[26] = "minecraft:slowness"; + POTION_IDS[27] = "minecraft:leaping"; + POTION_IDS[28] = "minecraft:harming"; + POTION_IDS[29] = "minecraft:water_breathing"; + POTION_IDS[30] = "minecraft:invisibility"; + POTION_IDS[31] = null; + POTION_IDS[32] = "minecraft:thick"; + POTION_IDS[33] = "minecraft:strong_regeneration"; + POTION_IDS[34] = "minecraft:strong_swiftness"; + POTION_IDS[35] = "minecraft:fire_resistance"; + POTION_IDS[36] = "minecraft:strong_poison"; + POTION_IDS[37] = "minecraft:strong_healing"; + POTION_IDS[38] = "minecraft:night_vision"; + POTION_IDS[39] = null; + POTION_IDS[40] = "minecraft:weakness"; + POTION_IDS[41] = "minecraft:strong_strength"; + POTION_IDS[42] = "minecraft:slowness"; + POTION_IDS[43] = "minecraft:strong_leaping"; + POTION_IDS[44] = "minecraft:strong_harming"; + POTION_IDS[45] = "minecraft:water_breathing"; + POTION_IDS[46] = "minecraft:invisibility"; + POTION_IDS[47] = null; + POTION_IDS[48] = null; + POTION_IDS[49] = "minecraft:strong_regeneration"; + POTION_IDS[50] = "minecraft:strong_swiftness"; + POTION_IDS[51] = "minecraft:fire_resistance"; + POTION_IDS[52] = "minecraft:strong_poison"; + POTION_IDS[53] = "minecraft:strong_healing"; + POTION_IDS[54] = "minecraft:night_vision"; + POTION_IDS[55] = null; + POTION_IDS[56] = "minecraft:weakness"; + POTION_IDS[57] = "minecraft:strong_strength"; + POTION_IDS[58] = "minecraft:slowness"; + POTION_IDS[59] = "minecraft:strong_leaping"; + POTION_IDS[60] = "minecraft:strong_harming"; + POTION_IDS[61] = "minecraft:water_breathing"; + POTION_IDS[62] = "minecraft:invisibility"; + POTION_IDS[63] = null; + POTION_IDS[64] = "minecraft:mundane"; + POTION_IDS[65] = "minecraft:long_regeneration"; + POTION_IDS[66] = "minecraft:long_swiftness"; + POTION_IDS[67] = "minecraft:long_fire_resistance"; + POTION_IDS[68] = "minecraft:long_poison"; + POTION_IDS[69] = "minecraft:healing"; + POTION_IDS[70] = "minecraft:long_night_vision"; + POTION_IDS[71] = null; + POTION_IDS[72] = "minecraft:long_weakness"; + POTION_IDS[73] = "minecraft:long_strength"; + POTION_IDS[74] = "minecraft:long_slowness"; + POTION_IDS[75] = "minecraft:long_leaping"; + POTION_IDS[76] = "minecraft:harming"; + POTION_IDS[77] = "minecraft:long_water_breathing"; + POTION_IDS[78] = "minecraft:long_invisibility"; + POTION_IDS[79] = null; + POTION_IDS[80] = "minecraft:awkward"; + POTION_IDS[81] = "minecraft:long_regeneration"; + POTION_IDS[82] = "minecraft:long_swiftness"; + POTION_IDS[83] = "minecraft:long_fire_resistance"; + POTION_IDS[84] = "minecraft:long_poison"; + POTION_IDS[85] = "minecraft:healing"; + POTION_IDS[86] = "minecraft:long_night_vision"; + POTION_IDS[87] = null; + POTION_IDS[88] = "minecraft:long_weakness"; + POTION_IDS[89] = "minecraft:long_strength"; + POTION_IDS[90] = "minecraft:long_slowness"; + POTION_IDS[91] = "minecraft:long_leaping"; + POTION_IDS[92] = "minecraft:harming"; + POTION_IDS[93] = "minecraft:long_water_breathing"; + POTION_IDS[94] = "minecraft:long_invisibility"; + POTION_IDS[95] = null; + POTION_IDS[96] = "minecraft:thick"; + POTION_IDS[97] = "minecraft:regeneration"; + POTION_IDS[98] = "minecraft:swiftness"; + POTION_IDS[99] = "minecraft:long_fire_resistance"; + POTION_IDS[100] = "minecraft:poison"; + POTION_IDS[101] = "minecraft:strong_healing"; + POTION_IDS[102] = "minecraft:long_night_vision"; + POTION_IDS[103] = null; + POTION_IDS[104] = "minecraft:long_weakness"; + POTION_IDS[105] = "minecraft:strength"; + POTION_IDS[106] = "minecraft:long_slowness"; + POTION_IDS[107] = "minecraft:leaping"; + POTION_IDS[108] = "minecraft:strong_harming"; + POTION_IDS[109] = "minecraft:long_water_breathing"; + POTION_IDS[110] = "minecraft:long_invisibility"; + POTION_IDS[111] = null; + POTION_IDS[112] = null; + POTION_IDS[113] = "minecraft:regeneration"; + POTION_IDS[114] = "minecraft:swiftness"; + POTION_IDS[115] = "minecraft:long_fire_resistance"; + POTION_IDS[116] = "minecraft:poison"; + POTION_IDS[117] = "minecraft:strong_healing"; + POTION_IDS[118] = "minecraft:long_night_vision"; + POTION_IDS[119] = null; + POTION_IDS[120] = "minecraft:long_weakness"; + POTION_IDS[121] = "minecraft:strength"; + POTION_IDS[122] = "minecraft:long_slowness"; + POTION_IDS[123] = "minecraft:leaping"; + POTION_IDS[124] = "minecraft:strong_harming"; + POTION_IDS[125] = "minecraft:long_water_breathing"; + POTION_IDS[126] = "minecraft:long_invisibility"; + POTION_IDS[127] = null; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PotionWater.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PotionWater.java new file mode 100644 index 0000000..6460920 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/PotionWater.java @@ -0,0 +1,34 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class PotionWater implements IFixableData +{ + public int getFixVersion() + { + return 806; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + String s = compound.getString("id"); + + if ("minecraft:potion".equals(s) || "minecraft:splash_potion".equals(s) || "minecraft:lingering_potion".equals(s) || "minecraft:tipped_arrow".equals(s)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + + if (!nbttagcompound.hasKey("Potion", 8)) + { + nbttagcompound.setString("Potion", "minecraft:water"); + } + + if (!compound.hasKey("tag", 10)) + { + compound.setTag("tag", nbttagcompound); + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/RedundantChanceTags.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/RedundantChanceTags.java new file mode 100644 index 0000000..9944d47 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/RedundantChanceTags.java @@ -0,0 +1,38 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; + +public class RedundantChanceTags implements IFixableData +{ + public int getFixVersion() + { + return 113; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (compound.hasKey("HandDropChances", 9)) + { + NBTTagList nbttaglist = compound.getTagList("HandDropChances", 5); + + if (nbttaglist.tagCount() == 2 && nbttaglist.getFloatAt(0) == 0.0F && nbttaglist.getFloatAt(1) == 0.0F) + { + compound.removeTag("HandDropChances"); + } + } + + if (compound.hasKey("ArmorDropChances", 9)) + { + NBTTagList nbttaglist1 = compound.getTagList("ArmorDropChances", 5); + + if (nbttaglist1.tagCount() == 4 && nbttaglist1.getFloatAt(0) == 0.0F && nbttaglist1.getFloatAt(1) == 0.0F && nbttaglist1.getFloatAt(2) == 0.0F && nbttaglist1.getFloatAt(3) == 0.0F) + { + compound.removeTag("ArmorDropChances"); + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/RidingToPassengers.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/RidingToPassengers.java new file mode 100644 index 0000000..331ca62 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/RidingToPassengers.java @@ -0,0 +1,39 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; + +public class RidingToPassengers implements IFixableData +{ + public int getFixVersion() + { + return 135; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + while (compound.hasKey("Riding", 10)) + { + NBTTagCompound nbttagcompound = this.extractVehicle(compound); + this.addPassengerToVehicle(compound, nbttagcompound); + compound = nbttagcompound; + } + + return compound; + } + + protected void addPassengerToVehicle(NBTTagCompound p_188219_1_, NBTTagCompound p_188219_2_) + { + NBTTagList nbttaglist = new NBTTagList(); + nbttaglist.appendTag(p_188219_1_); + p_188219_2_.setTag("Passengers", nbttaglist); + } + + protected NBTTagCompound extractVehicle(NBTTagCompound p_188220_1_) + { + NBTTagCompound nbttagcompound = p_188220_1_.getCompoundTag("Riding"); + p_188220_1_.removeTag("Riding"); + return nbttagcompound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.java new file mode 100644 index 0000000..6d26506 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxEntityColor.java @@ -0,0 +1,22 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ShulkerBoxEntityColor implements IFixableData +{ + public int getFixVersion() + { + return 808; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:shulker".equals(compound.getString("id")) && !compound.hasKey("Color", 99)) + { + compound.setByte("Color", (byte)10); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.java new file mode 100644 index 0000000..21300a0 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxItemColor.java @@ -0,0 +1,49 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ShulkerBoxItemColor implements IFixableData +{ + public static final String[] NAMES_BY_COLOR = new String[] {"minecraft:white_shulker_box", "minecraft:orange_shulker_box", "minecraft:magenta_shulker_box", "minecraft:light_blue_shulker_box", "minecraft:yellow_shulker_box", "minecraft:lime_shulker_box", "minecraft:pink_shulker_box", "minecraft:gray_shulker_box", "minecraft:silver_shulker_box", "minecraft:cyan_shulker_box", "minecraft:purple_shulker_box", "minecraft:blue_shulker_box", "minecraft:brown_shulker_box", "minecraft:green_shulker_box", "minecraft:red_shulker_box", "minecraft:black_shulker_box"}; + + public int getFixVersion() + { + return 813; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:shulker_box".equals(compound.getString("id")) && compound.hasKey("tag", 10)) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + + if (nbttagcompound.hasKey("BlockEntityTag", 10)) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("BlockEntityTag"); + + if (nbttagcompound1.getTagList("Items", 10).hasNoTags()) + { + nbttagcompound1.removeTag("Items"); + } + + int i = nbttagcompound1.getInteger("Color"); + nbttagcompound1.removeTag("Color"); + + if (nbttagcompound1.hasNoTags()) + { + nbttagcompound.removeTag("BlockEntityTag"); + } + + if (nbttagcompound.hasNoTags()) + { + compound.removeTag("tag"); + } + + compound.setString("id", NAMES_BY_COLOR[i % 16]); + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.java new file mode 100644 index 0000000..1655c94 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ShulkerBoxTileColor.java @@ -0,0 +1,22 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ShulkerBoxTileColor implements IFixableData +{ + public int getFixVersion() + { + return 813; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:shulker".equals(compound.getString("id"))) + { + compound.removeTag("Color"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SignStrictJSON.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SignStrictJSON.java new file mode 100644 index 0000000..0f61549 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SignStrictJSON.java @@ -0,0 +1,138 @@ +package net.minecraft.util.datafix.fixes; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import java.lang.reflect.Type; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.JsonUtils; +import net.minecraft.util.StringUtils; +import net.minecraft.util.datafix.IFixableData; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; + +public class SignStrictJSON implements IFixableData +{ + public static final Gson GSON_INSTANCE = (new GsonBuilder()).registerTypeAdapter(ITextComponent.class, new JsonDeserializer() + { + public ITextComponent deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + if (p_deserialize_1_.isJsonPrimitive()) + { + return new TextComponentString(p_deserialize_1_.getAsString()); + } + else if (p_deserialize_1_.isJsonArray()) + { + JsonArray jsonarray = p_deserialize_1_.getAsJsonArray(); + ITextComponent itextcomponent = null; + + for (JsonElement jsonelement : jsonarray) + { + ITextComponent itextcomponent1 = this.deserialize(jsonelement, jsonelement.getClass(), p_deserialize_3_); + + if (itextcomponent == null) + { + itextcomponent = itextcomponent1; + } + else + { + itextcomponent.appendSibling(itextcomponent1); + } + } + + return itextcomponent; + } + else + { + throw new JsonParseException("Don't know how to turn " + p_deserialize_1_ + " into a Component"); + } + } + }).create(); + + public int getFixVersion() + { + return 101; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("Sign".equals(compound.getString("id"))) + { + this.updateLine(compound, "Text1"); + this.updateLine(compound, "Text2"); + this.updateLine(compound, "Text3"); + this.updateLine(compound, "Text4"); + } + + return compound; + } + + private void updateLine(NBTTagCompound compound, String key) + { + String s = compound.getString(key); + ITextComponent itextcomponent = null; + + if (!"null".equals(s) && !StringUtils.isNullOrEmpty(s)) + { + if (s.charAt(0) == '"' && s.charAt(s.length() - 1) == '"' || s.charAt(0) == '{' && s.charAt(s.length() - 1) == '}') + { + try + { + itextcomponent = (ITextComponent)JsonUtils.gsonDeserialize(GSON_INSTANCE, s, ITextComponent.class, true); + + if (itextcomponent == null) + { + itextcomponent = new TextComponentString(""); + } + } + catch (JsonParseException var8) + { + ; + } + + if (itextcomponent == null) + { + try + { + itextcomponent = ITextComponent.Serializer.jsonToComponent(s); + } + catch (JsonParseException var7) + { + ; + } + } + + if (itextcomponent == null) + { + try + { + itextcomponent = ITextComponent.Serializer.fromJsonLenient(s); + } + catch (JsonParseException var6) + { + ; + } + } + + if (itextcomponent == null) + { + itextcomponent = new TextComponentString(s); + } + } + else + { + itextcomponent = new TextComponentString(s); + } + } + else + { + itextcomponent = new TextComponentString(""); + } + + compound.setString(key, ITextComponent.Serializer.componentToJson(itextcomponent)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SkeletonSplit.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SkeletonSplit.java new file mode 100644 index 0000000..f97783e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SkeletonSplit.java @@ -0,0 +1,35 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class SkeletonSplit implements IFixableData +{ + public int getFixVersion() + { + return 701; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + String s = compound.getString("id"); + + if ("Skeleton".equals(s)) + { + int i = compound.getInteger("SkeletonType"); + + if (i == 1) + { + compound.setString("id", "WitherSkeleton"); + } + else if (i == 2) + { + compound.setString("id", "Stray"); + } + + compound.removeTag("SkeletonType"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SpawnEggNames.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SpawnEggNames.java new file mode 100644 index 0000000..d2eccab --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SpawnEggNames.java @@ -0,0 +1,115 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class SpawnEggNames implements IFixableData +{ + private static final String[] ENTITY_IDS = new String[256]; + + public int getFixVersion() + { + return 105; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:spawn_egg".equals(compound.getString("id"))) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("EntityTag"); + short short1 = compound.getShort("Damage"); + + if (!nbttagcompound1.hasKey("id", 8)) + { + String s = ENTITY_IDS[short1 & 255]; + + if (s != null) + { + nbttagcompound1.setString("id", s); + nbttagcompound.setTag("EntityTag", nbttagcompound1); + compound.setTag("tag", nbttagcompound); + } + } + + if (short1 != 0) + { + compound.setShort("Damage", (short)0); + } + } + + return compound; + } + + static + { + String[] astring = ENTITY_IDS; + astring[1] = "Item"; + astring[2] = "XPOrb"; + astring[7] = "ThrownEgg"; + astring[8] = "LeashKnot"; + astring[9] = "Painting"; + astring[10] = "Arrow"; + astring[11] = "Snowball"; + astring[12] = "Fireball"; + astring[13] = "SmallFireball"; + astring[14] = "ThrownEnderpearl"; + astring[15] = "EyeOfEnderSignal"; + astring[16] = "ThrownPotion"; + astring[17] = "ThrownExpBottle"; + astring[18] = "ItemFrame"; + astring[19] = "WitherSkull"; + astring[20] = "PrimedTnt"; + astring[21] = "FallingSand"; + astring[22] = "FireworksRocketEntity"; + astring[23] = "TippedArrow"; + astring[24] = "SpectralArrow"; + astring[25] = "ShulkerBullet"; + astring[26] = "DragonFireball"; + astring[30] = "ArmorStand"; + astring[41] = "Boat"; + astring[42] = "MinecartRideable"; + astring[43] = "MinecartChest"; + astring[44] = "MinecartFurnace"; + astring[45] = "MinecartTNT"; + astring[46] = "MinecartHopper"; + astring[47] = "MinecartSpawner"; + astring[40] = "MinecartCommandBlock"; + astring[48] = "Mob"; + astring[49] = "Monster"; + astring[50] = "Creeper"; + astring[51] = "Skeleton"; + astring[52] = "Spider"; + astring[53] = "Giant"; + astring[54] = "Zombie"; + astring[55] = "Slime"; + astring[56] = "Ghast"; + astring[57] = "PigZombie"; + astring[58] = "Enderman"; + astring[59] = "CaveSpider"; + astring[60] = "Silverfish"; + astring[61] = "Blaze"; + astring[62] = "LavaSlime"; + astring[63] = "EnderDragon"; + astring[64] = "WitherBoss"; + astring[65] = "Bat"; + astring[66] = "Witch"; + astring[67] = "Endermite"; + astring[68] = "Guardian"; + astring[69] = "Shulker"; + astring[90] = "Pig"; + astring[91] = "Sheep"; + astring[92] = "Cow"; + astring[93] = "Chicken"; + astring[94] = "Squid"; + astring[95] = "Wolf"; + astring[96] = "MushroomCow"; + astring[97] = "SnowMan"; + astring[98] = "Ozelot"; + astring[99] = "VillagerGolem"; + astring[100] = "EntityHorse"; + astring[101] = "Rabbit"; + astring[120] = "Villager"; + astring[200] = "EnderCrystal"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SpawnerEntityTypes.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SpawnerEntityTypes.java new file mode 100644 index 0000000..d2a58c7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/SpawnerEntityTypes.java @@ -0,0 +1,53 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; + +public class SpawnerEntityTypes implements IFixableData +{ + public int getFixVersion() + { + return 107; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (!"MobSpawner".equals(compound.getString("id"))) + { + return compound; + } + else + { + if (compound.hasKey("EntityId", 8)) + { + String s = compound.getString("EntityId"); + NBTTagCompound nbttagcompound = compound.getCompoundTag("SpawnData"); + nbttagcompound.setString("id", s.isEmpty() ? "Pig" : s); + compound.setTag("SpawnData", nbttagcompound); + compound.removeTag("EntityId"); + } + + if (compound.hasKey("SpawnPotentials", 9)) + { + NBTTagList nbttaglist = compound.getTagList("SpawnPotentials", 10); + + for (int i = 0; i < nbttaglist.tagCount(); ++i) + { + NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); + + if (nbttagcompound1.hasKey("Type", 8)) + { + NBTTagCompound nbttagcompound2 = nbttagcompound1.getCompoundTag("Properties"); + nbttagcompound2.setString("id", nbttagcompound1.getString("Type")); + nbttagcompound1.setTag("Entity", nbttagcompound2); + nbttagcompound1.removeTag("Type"); + nbttagcompound1.removeTag("Properties"); + } + } + } + + return compound; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/StringToUUID.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/StringToUUID.java new file mode 100644 index 0000000..6524d66 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/StringToUUID.java @@ -0,0 +1,23 @@ +package net.minecraft.util.datafix.fixes; + +import java.util.UUID; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class StringToUUID implements IFixableData +{ + public int getFixVersion() + { + return 108; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if (compound.hasKey("UUID", 8)) + { + compound.setUniqueId("UUID", UUID.fromString(compound.getString("UUID"))); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/TileEntityId.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/TileEntityId.java new file mode 100644 index 0000000..19bd116 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/TileEntityId.java @@ -0,0 +1,55 @@ +package net.minecraft.util.datafix.fixes; + +import com.google.common.collect.Maps; +import java.util.Map; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class TileEntityId implements IFixableData +{ + private static final Map OLD_TO_NEW_ID_MAP = Maps.newHashMap(); + + public int getFixVersion() + { + return 704; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + String s = OLD_TO_NEW_ID_MAP.get(compound.getString("id")); + + if (s != null) + { + compound.setString("id", s); + } + + return compound; + } + + static + { + OLD_TO_NEW_ID_MAP.put("Airportal", "minecraft:end_portal"); + OLD_TO_NEW_ID_MAP.put("Banner", "minecraft:banner"); + OLD_TO_NEW_ID_MAP.put("Beacon", "minecraft:beacon"); + OLD_TO_NEW_ID_MAP.put("Cauldron", "minecraft:brewing_stand"); + OLD_TO_NEW_ID_MAP.put("Chest", "minecraft:chest"); + OLD_TO_NEW_ID_MAP.put("Comparator", "minecraft:comparator"); + OLD_TO_NEW_ID_MAP.put("Control", "minecraft:command_block"); + OLD_TO_NEW_ID_MAP.put("DLDetector", "minecraft:daylight_detector"); + OLD_TO_NEW_ID_MAP.put("Dropper", "minecraft:dropper"); + OLD_TO_NEW_ID_MAP.put("EnchantTable", "minecraft:enchanting_table"); + OLD_TO_NEW_ID_MAP.put("EndGateway", "minecraft:end_gateway"); + OLD_TO_NEW_ID_MAP.put("EnderChest", "minecraft:ender_chest"); + OLD_TO_NEW_ID_MAP.put("FlowerPot", "minecraft:flower_pot"); + OLD_TO_NEW_ID_MAP.put("Furnace", "minecraft:furnace"); + OLD_TO_NEW_ID_MAP.put("Hopper", "minecraft:hopper"); + OLD_TO_NEW_ID_MAP.put("MobSpawner", "minecraft:mob_spawner"); + OLD_TO_NEW_ID_MAP.put("Music", "minecraft:noteblock"); + OLD_TO_NEW_ID_MAP.put("Piston", "minecraft:piston"); + OLD_TO_NEW_ID_MAP.put("RecordPlayer", "minecraft:jukebox"); + OLD_TO_NEW_ID_MAP.put("Sign", "minecraft:sign"); + OLD_TO_NEW_ID_MAP.put("Skull", "minecraft:skull"); + OLD_TO_NEW_ID_MAP.put("Structure", "minecraft:structure_block"); + OLD_TO_NEW_ID_MAP.put("Trap", "minecraft:dispenser"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/TotemItemRename.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/TotemItemRename.java new file mode 100644 index 0000000..569e596 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/TotemItemRename.java @@ -0,0 +1,22 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class TotemItemRename implements IFixableData +{ + public int getFixVersion() + { + return 820; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("minecraft:totem".equals(compound.getString("id"))) + { + compound.setString("id", "minecraft:totem_of_undying"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ZombieProfToType.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ZombieProfToType.java new file mode 100644 index 0000000..9a2ce1e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ZombieProfToType.java @@ -0,0 +1,54 @@ +package net.minecraft.util.datafix.fixes; + +import java.util.Random; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ZombieProfToType implements IFixableData +{ + private static final Random RANDOM = new Random(); + + public int getFixVersion() + { + return 502; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("Zombie".equals(compound.getString("id")) && compound.getBoolean("IsVillager")) + { + if (!compound.hasKey("ZombieType", 99)) + { + int i = -1; + + if (compound.hasKey("VillagerProfession", 99)) + { + try + { + i = this.getVillagerProfession(compound.getInteger("VillagerProfession")); + } + catch (RuntimeException var4) + { + ; + } + } + + if (i == -1) + { + i = this.getVillagerProfession(RANDOM.nextInt(6)); + } + + compound.setInteger("ZombieType", i); + } + + compound.removeTag("IsVillager"); + } + + return compound; + } + + private int getVillagerProfession(int p_191277_1_) + { + return p_191277_1_ >= 0 && p_191277_1_ < 6 ? p_191277_1_ : -1; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ZombieSplit.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ZombieSplit.java new file mode 100644 index 0000000..1caeb39 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/ZombieSplit.java @@ -0,0 +1,41 @@ +package net.minecraft.util.datafix.fixes; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.IFixableData; + +public class ZombieSplit implements IFixableData +{ + public int getFixVersion() + { + return 702; + } + + public NBTTagCompound fixTagCompound(NBTTagCompound compound) + { + if ("Zombie".equals(compound.getString("id"))) + { + int i = compound.getInteger("ZombieType"); + + switch (i) + { + case 0: + default: + break; + case 1: + case 2: + case 3: + case 4: + case 5: + compound.setString("id", "ZombieVillager"); + compound.setInteger("Profession", i - 1); + break; + case 6: + compound.setString("id", "Husk"); + } + + compound.removeTag("ZombieType"); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/package-info.java new file mode 100644 index 0000000..59686b7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/fixes/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.util.datafix.fixes; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/package-info.java new file mode 100644 index 0000000..d2af60f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.util.datafix; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/BlockEntityTag.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/BlockEntityTag.java new file mode 100644 index 0000000..353b58e --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/BlockEntityTag.java @@ -0,0 +1,157 @@ +package net.minecraft.util.datafix.walkers; + +import com.google.common.collect.Maps; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class BlockEntityTag implements IDataWalker +{ + private static final Logger LOGGER = LogManager.getLogger(); + private static final Map NEW_TO_OLD_ID_MAP = Maps.newHashMap(); + private static final Map ITEM_ID_TO_BLOCK_ENTITY_ID = Maps.newHashMap(); + + @Nullable + private static String getBlockEntityID(int blockID, String p_188267_1_) + { + return blockID < 515 ? (String)NEW_TO_OLD_ID_MAP.get((new ResourceLocation(p_188267_1_)).toString()) : (String)ITEM_ID_TO_BLOCK_ENTITY_ID.get((new ResourceLocation(p_188267_1_)).toString()); + } + + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if (!compound.hasKey("tag", 10)) + { + return compound; + } + else + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + + if (nbttagcompound.hasKey("BlockEntityTag", 10)) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("BlockEntityTag"); + String s = compound.getString("id"); + String s1 = getBlockEntityID(versionIn, s); + boolean flag; + + if (s1 == null) + { + LOGGER.warn("Unable to resolve BlockEntity for ItemInstance: {}", (Object)s); + flag = false; + } + else + { + flag = !nbttagcompound1.hasKey("id"); + nbttagcompound1.setString("id", s1); + } + + fixer.process(FixTypes.BLOCK_ENTITY, nbttagcompound1, versionIn); + + if (flag) + { + nbttagcompound1.removeTag("id"); + } + } + + return compound; + } + } + + static + { + Map map = NEW_TO_OLD_ID_MAP; + map.put("minecraft:furnace", "Furnace"); + map.put("minecraft:lit_furnace", "Furnace"); + map.put("minecraft:chest", "Chest"); + map.put("minecraft:trapped_chest", "Chest"); + map.put("minecraft:ender_chest", "EnderChest"); + map.put("minecraft:jukebox", "RecordPlayer"); + map.put("minecraft:dispenser", "Trap"); + map.put("minecraft:dropper", "Dropper"); + map.put("minecraft:sign", "Sign"); + map.put("minecraft:mob_spawner", "MobSpawner"); + map.put("minecraft:noteblock", "Music"); + map.put("minecraft:brewing_stand", "Cauldron"); + map.put("minecraft:enhanting_table", "EnchantTable"); + map.put("minecraft:command_block", "CommandBlock"); + map.put("minecraft:beacon", "Beacon"); + map.put("minecraft:skull", "Skull"); + map.put("minecraft:daylight_detector", "DLDetector"); + map.put("minecraft:hopper", "Hopper"); + map.put("minecraft:banner", "Banner"); + map.put("minecraft:flower_pot", "FlowerPot"); + map.put("minecraft:repeating_command_block", "CommandBlock"); + map.put("minecraft:chain_command_block", "CommandBlock"); + map.put("minecraft:standing_sign", "Sign"); + map.put("minecraft:wall_sign", "Sign"); + map.put("minecraft:piston_head", "Piston"); + map.put("minecraft:daylight_detector_inverted", "DLDetector"); + map.put("minecraft:unpowered_comparator", "Comparator"); + map.put("minecraft:powered_comparator", "Comparator"); + map.put("minecraft:wall_banner", "Banner"); + map.put("minecraft:standing_banner", "Banner"); + map.put("minecraft:structure_block", "Structure"); + map.put("minecraft:end_portal", "Airportal"); + map.put("minecraft:end_gateway", "EndGateway"); + map.put("minecraft:shield", "Shield"); + map = ITEM_ID_TO_BLOCK_ENTITY_ID; + map.put("minecraft:furnace", "minecraft:furnace"); + map.put("minecraft:lit_furnace", "minecraft:furnace"); + map.put("minecraft:chest", "minecraft:chest"); + map.put("minecraft:trapped_chest", "minecraft:chest"); + map.put("minecraft:ender_chest", "minecraft:enderchest"); + map.put("minecraft:jukebox", "minecraft:jukebox"); + map.put("minecraft:dispenser", "minecraft:dispenser"); + map.put("minecraft:dropper", "minecraft:dropper"); + map.put("minecraft:sign", "minecraft:sign"); + map.put("minecraft:mob_spawner", "minecraft:mob_spawner"); + map.put("minecraft:noteblock", "minecraft:noteblock"); + map.put("minecraft:brewing_stand", "minecraft:brewing_stand"); + map.put("minecraft:enhanting_table", "minecraft:enchanting_table"); + map.put("minecraft:command_block", "minecraft:command_block"); + map.put("minecraft:beacon", "minecraft:beacon"); + map.put("minecraft:skull", "minecraft:skull"); + map.put("minecraft:daylight_detector", "minecraft:daylight_detector"); + map.put("minecraft:hopper", "minecraft:hopper"); + map.put("minecraft:banner", "minecraft:banner"); + map.put("minecraft:flower_pot", "minecraft:flower_pot"); + map.put("minecraft:repeating_command_block", "minecraft:command_block"); + map.put("minecraft:chain_command_block", "minecraft:command_block"); + map.put("minecraft:shulker_box", "minecraft:shulker_box"); + map.put("minecraft:white_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:orange_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:magenta_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:light_blue_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:yellow_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:lime_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:pink_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:gray_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:silver_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:cyan_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:purple_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:blue_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:brown_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:green_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:red_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:black_shulker_box", "minecraft:shulker_box"); + map.put("minecraft:bed", "minecraft:bed"); + map.put("minecraft:standing_sign", "minecraft:sign"); + map.put("minecraft:wall_sign", "minecraft:sign"); + map.put("minecraft:piston_head", "minecraft:piston"); + map.put("minecraft:daylight_detector_inverted", "minecraft:daylight_detector"); + map.put("minecraft:unpowered_comparator", "minecraft:comparator"); + map.put("minecraft:powered_comparator", "minecraft:comparator"); + map.put("minecraft:wall_banner", "minecraft:banner"); + map.put("minecraft:standing_banner", "minecraft:banner"); + map.put("minecraft:structure_block", "minecraft:structure_block"); + map.put("minecraft:end_portal", "minecraft:end_portal"); + map.put("minecraft:end_gateway", "minecraft:end_gateway"); + map.put("minecraft:shield", "minecraft:shield"); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/EntityTag.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/EntityTag.java new file mode 100644 index 0000000..f24085a --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/EntityTag.java @@ -0,0 +1,61 @@ +package net.minecraft.util.datafix.walkers; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityTag implements IDataWalker +{ + private static final Logger LOGGER = LogManager.getLogger(); + + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + NBTTagCompound nbttagcompound = compound.getCompoundTag("tag"); + + if (nbttagcompound.hasKey("EntityTag", 10)) + { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompoundTag("EntityTag"); + String s = compound.getString("id"); + String s1; + + if ("minecraft:armor_stand".equals(s)) + { + s1 = versionIn < 515 ? "ArmorStand" : "minecraft:armor_stand"; + } + else + { + if (!"minecraft:spawn_egg".equals(s)) + { + return compound; + } + + s1 = nbttagcompound1.getString("id"); + } + + boolean flag; + + if (s1 == null) + { + LOGGER.warn("Unable to resolve Entity for ItemInstance: {}", (Object)s); + flag = false; + } + else + { + flag = !nbttagcompound1.hasKey("id", 8); + nbttagcompound1.setString("id", s1); + } + + fixer.process(FixTypes.ENTITY, nbttagcompound1, versionIn); + + if (flag) + { + nbttagcompound1.removeTag("id"); + } + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/Filtered.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/Filtered.java new file mode 100644 index 0000000..bb878a7 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/Filtered.java @@ -0,0 +1,42 @@ +package net.minecraft.util.datafix.walkers; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.datafix.IDataFixer; +import net.minecraft.util.datafix.IDataWalker; + +public abstract class Filtered implements IDataWalker +{ + private final ResourceLocation key; + + public Filtered(Class p_i47309_1_) + { + if (Entity.class.isAssignableFrom(p_i47309_1_)) + { + this.key = EntityList.getKey((Class)p_i47309_1_); + } + else if (TileEntity.class.isAssignableFrom(p_i47309_1_)) + { + this.key = TileEntity.getKey((Class)p_i47309_1_); + } + else + { + this.key = null; + } + } + + public NBTTagCompound process(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + if ((new ResourceLocation(compound.getString("id"))).equals(this.key)) + { + compound = this.filteredProcess(fixer, compound, versionIn); + } + + return compound; + } + + abstract NBTTagCompound filteredProcess(IDataFixer fixer, NBTTagCompound compound, int versionIn); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/ItemStackData.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/ItemStackData.java new file mode 100644 index 0000000..656d1b9 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/ItemStackData.java @@ -0,0 +1,26 @@ +package net.minecraft.util.datafix.walkers; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.DataFixesManager; +import net.minecraft.util.datafix.IDataFixer; + +public class ItemStackData extends Filtered +{ + private final String[] matchingTags; + + public ItemStackData(Class p_i47311_1_, String... matchingTagsIn) + { + super(p_i47311_1_); + this.matchingTags = matchingTagsIn; + } + + NBTTagCompound filteredProcess(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + for (String s : this.matchingTags) + { + compound = DataFixesManager.processItemStack(fixer, compound, versionIn, s); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/ItemStackDataLists.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/ItemStackDataLists.java new file mode 100644 index 0000000..928518f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/ItemStackDataLists.java @@ -0,0 +1,26 @@ +package net.minecraft.util.datafix.walkers; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.DataFixesManager; +import net.minecraft.util.datafix.IDataFixer; + +public class ItemStackDataLists extends Filtered +{ + private final String[] matchingTags; + + public ItemStackDataLists(Class p_i47310_1_, String... matchingTagsIn) + { + super(p_i47310_1_); + this.matchingTags = matchingTagsIn; + } + + NBTTagCompound filteredProcess(IDataFixer fixer, NBTTagCompound compound, int versionIn) + { + for (String s : this.matchingTags) + { + compound = DataFixesManager.processInventory(fixer, compound, versionIn, s); + } + + return compound; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/package-info.java new file mode 100644 index 0000000..9d6a337 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/datafix/walkers/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.util.datafix.walkers; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/AxisAlignedBB.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/AxisAlignedBB.java new file mode 100644 index 0000000..2882103 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/AxisAlignedBB.java @@ -0,0 +1,636 @@ +package net.minecraft.util.math; + +import com.google.common.annotations.VisibleForTesting; +import javax.annotation.Nullable; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class AxisAlignedBB +{ + /** The minimum X coordinate of this bounding box. Guaranteed to always be less than or equal to {@link #maxX}. */ + public final double minX; + /** The minimum Y coordinate of this bounding box. Guaranteed to always be less than or equal to {@link #maxY}. */ + public final double minY; + /** The minimum Y coordinate of this bounding box. Guaranteed to always be less than or equal to {@link #maxZ}. */ + public final double minZ; + /** The maximum X coordinate of this bounding box. Guaranteed to always be greater than or equal to {@link #minX}. */ + public final double maxX; + /** The maximum Y coordinate of this bounding box. Guaranteed to always be greater than or equal to {@link #minY}. */ + public final double maxY; + /** The maximum Z coordinate of this bounding box. Guaranteed to always be greater than or equal to {@link #minZ}. */ + public final double maxZ; + + public AxisAlignedBB(double x1, double y1, double z1, double x2, double y2, double z2) + { + this.minX = Math.min(x1, x2); + this.minY = Math.min(y1, y2); + this.minZ = Math.min(z1, z2); + this.maxX = Math.max(x1, x2); + this.maxY = Math.max(y1, y2); + this.maxZ = Math.max(z1, z2); + } + + public AxisAlignedBB(BlockPos pos) + { + this((double)pos.getX(), (double)pos.getY(), (double)pos.getZ(), (double)(pos.getX() + 1), (double)(pos.getY() + 1), (double)(pos.getZ() + 1)); + } + + public AxisAlignedBB(BlockPos pos1, BlockPos pos2) + { + this((double)pos1.getX(), (double)pos1.getY(), (double)pos1.getZ(), (double)pos2.getX(), (double)pos2.getY(), (double)pos2.getZ()); + } + + @SideOnly(Side.CLIENT) + public AxisAlignedBB(Vec3d min, Vec3d max) + { + this(min.x, min.y, min.z, max.x, max.y, max.z); + } + + /** + * Helper method that returns a new {@link AxisAlignedBB} with the given value for {@link #maxY} and all other + * values taken from this bounding box. + */ + public AxisAlignedBB setMaxY(double y2) + { + return new AxisAlignedBB(this.minX, this.minY, this.minZ, this.maxX, y2, this.maxZ); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof AxisAlignedBB)) + { + return false; + } + else + { + AxisAlignedBB axisalignedbb = (AxisAlignedBB)p_equals_1_; + + if (Double.compare(axisalignedbb.minX, this.minX) != 0) + { + return false; + } + else if (Double.compare(axisalignedbb.minY, this.minY) != 0) + { + return false; + } + else if (Double.compare(axisalignedbb.minZ, this.minZ) != 0) + { + return false; + } + else if (Double.compare(axisalignedbb.maxX, this.maxX) != 0) + { + return false; + } + else if (Double.compare(axisalignedbb.maxY, this.maxY) != 0) + { + return false; + } + else + { + return Double.compare(axisalignedbb.maxZ, this.maxZ) == 0; + } + } + } + + public int hashCode() + { + long i = Double.doubleToLongBits(this.minX); + int j = (int)(i ^ i >>> 32); + i = Double.doubleToLongBits(this.minY); + j = 31 * j + (int)(i ^ i >>> 32); + i = Double.doubleToLongBits(this.minZ); + j = 31 * j + (int)(i ^ i >>> 32); + i = Double.doubleToLongBits(this.maxX); + j = 31 * j + (int)(i ^ i >>> 32); + i = Double.doubleToLongBits(this.maxY); + j = 31 * j + (int)(i ^ i >>> 32); + i = Double.doubleToLongBits(this.maxZ); + j = 31 * j + (int)(i ^ i >>> 32); + return j; + } + + /** + * Creates a new {@link AxisAlignedBB} that has been contracted by the given amount, with positive changes + * decreasing max values and negative changes increasing min values. + *
+ * If the amount to contract by is larger than the length of a side, then the side will wrap (still creating a valid + * AABB - see last sample). + * + *

Samples:

+ * + * + * + * + * + * + *
InputResult
new AxisAlignedBB(0, 0, 0, 4, 4, 4).contract(2, 2, 2)
box[0.0,
+     * 0.0, 0.0 -> 2.0, 2.0, 2.0]
new AxisAlignedBB(0, 0, 0, 4, 4, 4).contract(-2, -2, -
+     * 2)
box[2.0, 2.0, 2.0 -> 4.0, 4.0, 4.0]
new AxisAlignedBB(5, 5, 5, 7, 7, 7).contract(0, 1, -
+     * 1)
box[5.0, 5.0, 6.0 -> 7.0, 6.0, 7.0]
new AxisAlignedBB(-2, -2, -2, 2, 2, 2).contract(4, -4,
+     * 0)
box[-8.0, 2.0, -2.0 -> -2.0, 8.0, 2.0]
+ * + *

See Also:

+ *
    + *
  • {@link #expand(double, double, double)} - like this, except for expanding.
  • + *
  • {@link #grow(double, double, double)} and {@link #grow(double)} - expands in all directions.
  • + *
  • {@link #shrink(double)} - contracts in all directions (like {@link #grow(double)})
  • + *
+ * + * @return A new modified bounding box. + */ + public AxisAlignedBB contract(double x, double y, double z) + { + double d0 = this.minX; + double d1 = this.minY; + double d2 = this.minZ; + double d3 = this.maxX; + double d4 = this.maxY; + double d5 = this.maxZ; + + if (x < 0.0D) + { + d0 -= x; + } + else if (x > 0.0D) + { + d3 -= x; + } + + if (y < 0.0D) + { + d1 -= y; + } + else if (y > 0.0D) + { + d4 -= y; + } + + if (z < 0.0D) + { + d2 -= z; + } + else if (z > 0.0D) + { + d5 -= z; + } + + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + /** + * Creates a new {@link AxisAlignedBB} that has been expanded by the given amount, with positive changes increasing + * max values and negative changes decreasing min values. + * + *

Samples:

+ * + * + *
InputResult
new AxisAlignedBB(0, 0, 0, 1, 1, 1).expand(2, 2, 2)
box[0, 0,
+     * 0 -> 3, 3, 3]
+ *
new AxisAlignedBB(0, 0, 0, 1, 1, 1).expand(-2, -2, -2)
box[-2,
+     * -2, -2 -> 1, 1, 1]
+ *
new AxisAlignedBB(5, 5, 5, 7, 7, 7).expand(0, 1, -1)
box[5, 5,
+     * 4, 7, 8, 7]
+ *
+ * + *

See Also:

+ *
    + *
  • {@link #contract(double, double, double)} - like this, except for shrinking.
  • + *
  • {@link #grow(double, double, double)} and {@link #grow(double)} - expands in all directions.
  • + *
  • {@link #shrink(double)} - contracts in all directions (like {@link #grow(double)})
  • + *
+ * + * @return A modified bounding box that will always be equal or greater in volume to this bounding box. + */ + public AxisAlignedBB expand(double x, double y, double z) + { + double d0 = this.minX; + double d1 = this.minY; + double d2 = this.minZ; + double d3 = this.maxX; + double d4 = this.maxY; + double d5 = this.maxZ; + + if (x < 0.0D) + { + d0 += x; + } + else if (x > 0.0D) + { + d3 += x; + } + + if (y < 0.0D) + { + d1 += y; + } + else if (y > 0.0D) + { + d4 += y; + } + + if (z < 0.0D) + { + d2 += z; + } + else if (z > 0.0D) + { + d5 += z; + } + + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + /** + * Creates a new {@link AxisAlignedBB} that has been contracted by the given amount in both directions. Negative + * values will shrink the AABB instead of expanding it. + *
+ * Side lengths will be increased by 2 times the value of the parameters, since both min and max are changed. + *
+ * If contracting and the amount to contract by is larger than the length of a side, then the side will wrap (still + * creating a valid AABB - see last ample). + * + *

Samples:

+ * + * + * + * + * + * + *
InputResult
new AxisAlignedBB(0, 0, 0, 1, 1, 1).grow(2, 2, 2)
box[-2.0, -
+     * 2.0, -2.0 -> 3.0, 3.0, 3.0]
new AxisAlignedBB(0, 0, 0, 6, 6, 6).grow(-2, -2, -2)
box[2.0,
+     * 2.0, 2.0 -> 4.0, 4.0, 4.0]
new AxisAlignedBB(5, 5, 5, 7, 7, 7).grow(0, 1, -1)
box[5.0,
+     * 4.0, 6.0 -> 7.0, 8.0, 6.0]
new AxisAlignedBB(1, 1, 1, 3, 3, 3).grow(-4, -2, -3)
box[-1.0,
+     * 1.0, 0.0 -> 5.0, 3.0, 4.0]
+ * + *

See Also:

+ *
    + *
  • {@link #expand(double, double, double)} - expands in only one direction.
  • + *
  • {@link #contract(double, double, double)} - contracts in only one direction.
  • + * {@link #grow(double)} - version of this that expands in all directions from one parameter. + *
  • {@link #shrink(double)} - contracts in all directions
  • + *
+ * + * @return A modified bounding box. + */ + public AxisAlignedBB grow(double x, double y, double z) + { + double d0 = this.minX - x; + double d1 = this.minY - y; + double d2 = this.minZ - z; + double d3 = this.maxX + x; + double d4 = this.maxY + y; + double d5 = this.maxZ + z; + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + /** + * Creates a new {@link AxisAlignedBB} that is expanded by the given value in all directions. Equivalent to {@link + * #grow(double, double, double)} with the given value for all 3 params. Negative values will shrink the AABB. + *
+ * Side lengths will be increased by 2 times the value of the parameter, since both min and max are changed. + *
+ * If contracting and the amount to contract by is larger than the length of a side, then the side will wrap (still + * creating a valid AABB - see samples on {@link #grow(double, double, double)}). + * + * @return A modified AABB. + */ + public AxisAlignedBB grow(double value) + { + return this.grow(value, value, value); + } + + public AxisAlignedBB intersect(AxisAlignedBB other) + { + double d0 = Math.max(this.minX, other.minX); + double d1 = Math.max(this.minY, other.minY); + double d2 = Math.max(this.minZ, other.minZ); + double d3 = Math.min(this.maxX, other.maxX); + double d4 = Math.min(this.maxY, other.maxY); + double d5 = Math.min(this.maxZ, other.maxZ); + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + public AxisAlignedBB union(AxisAlignedBB other) + { + double d0 = Math.min(this.minX, other.minX); + double d1 = Math.min(this.minY, other.minY); + double d2 = Math.min(this.minZ, other.minZ); + double d3 = Math.max(this.maxX, other.maxX); + double d4 = Math.max(this.maxY, other.maxY); + double d5 = Math.max(this.maxZ, other.maxZ); + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + /** + * Offsets the current bounding box by the specified amount. + */ + public AxisAlignedBB offset(double x, double y, double z) + { + return new AxisAlignedBB(this.minX + x, this.minY + y, this.minZ + z, this.maxX + x, this.maxY + y, this.maxZ + z); + } + + public AxisAlignedBB offset(BlockPos pos) + { + return new AxisAlignedBB(this.minX + (double)pos.getX(), this.minY + (double)pos.getY(), this.minZ + (double)pos.getZ(), this.maxX + (double)pos.getX(), this.maxY + (double)pos.getY(), this.maxZ + (double)pos.getZ()); + } + + public AxisAlignedBB offset(Vec3d vec) + { + return this.offset(vec.x, vec.y, vec.z); + } + + /** + * if instance and the argument bounding boxes overlap in the Y and Z dimensions, calculate the offset between them + * in the X dimension. return var2 if the bounding boxes do not overlap or if var2 is closer to 0 then the + * calculated offset. Otherwise return the calculated offset. + */ + public double calculateXOffset(AxisAlignedBB other, double offsetX) + { + if (other.maxY > this.minY && other.minY < this.maxY && other.maxZ > this.minZ && other.minZ < this.maxZ) + { + if (offsetX > 0.0D && other.maxX <= this.minX) + { + double d1 = this.minX - other.maxX; + + if (d1 < offsetX) + { + offsetX = d1; + } + } + else if (offsetX < 0.0D && other.minX >= this.maxX) + { + double d0 = this.maxX - other.minX; + + if (d0 > offsetX) + { + offsetX = d0; + } + } + + return offsetX; + } + else + { + return offsetX; + } + } + + /** + * if instance and the argument bounding boxes overlap in the X and Z dimensions, calculate the offset between them + * in the Y dimension. return var2 if the bounding boxes do not overlap or if var2 is closer to 0 then the + * calculated offset. Otherwise return the calculated offset. + */ + public double calculateYOffset(AxisAlignedBB other, double offsetY) + { + if (other.maxX > this.minX && other.minX < this.maxX && other.maxZ > this.minZ && other.minZ < this.maxZ) + { + if (offsetY > 0.0D && other.maxY <= this.minY) + { + double d1 = this.minY - other.maxY; + + if (d1 < offsetY) + { + offsetY = d1; + } + } + else if (offsetY < 0.0D && other.minY >= this.maxY) + { + double d0 = this.maxY - other.minY; + + if (d0 > offsetY) + { + offsetY = d0; + } + } + + return offsetY; + } + else + { + return offsetY; + } + } + + /** + * if instance and the argument bounding boxes overlap in the Y and X dimensions, calculate the offset between them + * in the Z dimension. return var2 if the bounding boxes do not overlap or if var2 is closer to 0 then the + * calculated offset. Otherwise return the calculated offset. + */ + public double calculateZOffset(AxisAlignedBB other, double offsetZ) + { + if (other.maxX > this.minX && other.minX < this.maxX && other.maxY > this.minY && other.minY < this.maxY) + { + if (offsetZ > 0.0D && other.maxZ <= this.minZ) + { + double d1 = this.minZ - other.maxZ; + + if (d1 < offsetZ) + { + offsetZ = d1; + } + } + else if (offsetZ < 0.0D && other.minZ >= this.maxZ) + { + double d0 = this.maxZ - other.minZ; + + if (d0 > offsetZ) + { + offsetZ = d0; + } + } + + return offsetZ; + } + else + { + return offsetZ; + } + } + + /** + * Checks if the bounding box intersects with another. + */ + public boolean intersects(AxisAlignedBB other) + { + return this.intersects(other.minX, other.minY, other.minZ, other.maxX, other.maxY, other.maxZ); + } + + public boolean intersects(double x1, double y1, double z1, double x2, double y2, double z2) + { + return this.minX < x2 && this.maxX > x1 && this.minY < y2 && this.maxY > y1 && this.minZ < z2 && this.maxZ > z1; + } + + @SideOnly(Side.CLIENT) + public boolean intersects(Vec3d min, Vec3d max) + { + return this.intersects(Math.min(min.x, max.x), Math.min(min.y, max.y), Math.min(min.z, max.z), Math.max(min.x, max.x), Math.max(min.y, max.y), Math.max(min.z, max.z)); + } + + /** + * Returns if the supplied Vec3D is completely inside the bounding box + */ + public boolean contains(Vec3d vec) + { + if (vec.x > this.minX && vec.x < this.maxX) + { + if (vec.y > this.minY && vec.y < this.maxY) + { + return vec.z > this.minZ && vec.z < this.maxZ; + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * Returns the average length of the edges of the bounding box. + */ + public double getAverageEdgeLength() + { + double d0 = this.maxX - this.minX; + double d1 = this.maxY - this.minY; + double d2 = this.maxZ - this.minZ; + return (d0 + d1 + d2) / 3.0D; + } + + /** + * Creates a new {@link AxisAlignedBB} that is expanded by the given value in all directions. Equivalent to {@link + * #grow(double)} with value set to the negative of the value provided here. Passing a negative value to this method + * values will grow the AABB. + *
+ * Side lengths will be decreased by 2 times the value of the parameter, since both min and max are changed. + *
+ * If contracting and the amount to contract by is larger than the length of a side, then the side will wrap (still + * creating a valid AABB - see samples on {@link #grow(double, double, double)}). + * + * @return A modified AABB. + */ + public AxisAlignedBB shrink(double value) + { + return this.grow(-value); + } + + @Nullable + public RayTraceResult calculateIntercept(Vec3d vecA, Vec3d vecB) + { + Vec3d vec3d = this.collideWithXPlane(this.minX, vecA, vecB); + EnumFacing enumfacing = EnumFacing.WEST; + Vec3d vec3d1 = this.collideWithXPlane(this.maxX, vecA, vecB); + + if (vec3d1 != null && this.isClosest(vecA, vec3d, vec3d1)) + { + vec3d = vec3d1; + enumfacing = EnumFacing.EAST; + } + + vec3d1 = this.collideWithYPlane(this.minY, vecA, vecB); + + if (vec3d1 != null && this.isClosest(vecA, vec3d, vec3d1)) + { + vec3d = vec3d1; + enumfacing = EnumFacing.DOWN; + } + + vec3d1 = this.collideWithYPlane(this.maxY, vecA, vecB); + + if (vec3d1 != null && this.isClosest(vecA, vec3d, vec3d1)) + { + vec3d = vec3d1; + enumfacing = EnumFacing.UP; + } + + vec3d1 = this.collideWithZPlane(this.minZ, vecA, vecB); + + if (vec3d1 != null && this.isClosest(vecA, vec3d, vec3d1)) + { + vec3d = vec3d1; + enumfacing = EnumFacing.NORTH; + } + + vec3d1 = this.collideWithZPlane(this.maxZ, vecA, vecB); + + if (vec3d1 != null && this.isClosest(vecA, vec3d, vec3d1)) + { + vec3d = vec3d1; + enumfacing = EnumFacing.SOUTH; + } + + return vec3d == null ? null : new RayTraceResult(vec3d, enumfacing); + } + + @VisibleForTesting + boolean isClosest(Vec3d p_186661_1_, @Nullable Vec3d p_186661_2_, Vec3d p_186661_3_) + { + return p_186661_2_ == null || p_186661_1_.squareDistanceTo(p_186661_3_) < p_186661_1_.squareDistanceTo(p_186661_2_); + } + + @Nullable + @VisibleForTesting + Vec3d collideWithXPlane(double p_186671_1_, Vec3d p_186671_3_, Vec3d p_186671_4_) + { + Vec3d vec3d = p_186671_3_.getIntermediateWithXValue(p_186671_4_, p_186671_1_); + return vec3d != null && this.intersectsWithYZ(vec3d) ? vec3d : null; + } + + @Nullable + @VisibleForTesting + Vec3d collideWithYPlane(double p_186663_1_, Vec3d p_186663_3_, Vec3d p_186663_4_) + { + Vec3d vec3d = p_186663_3_.getIntermediateWithYValue(p_186663_4_, p_186663_1_); + return vec3d != null && this.intersectsWithXZ(vec3d) ? vec3d : null; + } + + @Nullable + @VisibleForTesting + Vec3d collideWithZPlane(double p_186665_1_, Vec3d p_186665_3_, Vec3d p_186665_4_) + { + Vec3d vec3d = p_186665_3_.getIntermediateWithZValue(p_186665_4_, p_186665_1_); + return vec3d != null && this.intersectsWithXY(vec3d) ? vec3d : null; + } + + @VisibleForTesting + public boolean intersectsWithYZ(Vec3d vec) + { + return vec.y >= this.minY && vec.y <= this.maxY && vec.z >= this.minZ && vec.z <= this.maxZ; + } + + @VisibleForTesting + public boolean intersectsWithXZ(Vec3d vec) + { + return vec.x >= this.minX && vec.x <= this.maxX && vec.z >= this.minZ && vec.z <= this.maxZ; + } + + @VisibleForTesting + public boolean intersectsWithXY(Vec3d vec) + { + return vec.x >= this.minX && vec.x <= this.maxX && vec.y >= this.minY && vec.y <= this.maxY; + } + + public String toString() + { + return "box[" + this.minX + ", " + this.minY + ", " + this.minZ + " -> " + this.maxX + ", " + this.maxY + ", " + this.maxZ + "]"; + } + + @SideOnly(Side.CLIENT) + public boolean hasNaN() + { + return Double.isNaN(this.minX) || Double.isNaN(this.minY) || Double.isNaN(this.minZ) || Double.isNaN(this.maxX) || Double.isNaN(this.maxY) || Double.isNaN(this.maxZ); + } + + @SideOnly(Side.CLIENT) + public Vec3d getCenter() + { + return new Vec3d(this.minX + (this.maxX - this.minX) * 0.5D, this.minY + (this.maxY - this.minY) * 0.5D, this.minZ + (this.maxZ - this.minZ) * 0.5D); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/BlockPos.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/BlockPos.java new file mode 100644 index 0000000..7ea411f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/BlockPos.java @@ -0,0 +1,664 @@ +package net.minecraft.util.math; + +import com.google.common.collect.AbstractIterator; +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import javax.annotation.concurrent.Immutable; +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Rotation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +@Immutable +public class BlockPos extends Vec3i +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** An immutable block pos with zero as all coordinates. */ + public static final BlockPos ORIGIN = new BlockPos(0, 0, 0); + private static final int NUM_X_BITS = 1 + MathHelper.log2(MathHelper.smallestEncompassingPowerOfTwo(30000000)); + private static final int NUM_Z_BITS = NUM_X_BITS; + private static final int NUM_Y_BITS = 64 - NUM_X_BITS - NUM_Z_BITS; + private static final int Y_SHIFT = 0 + NUM_Z_BITS; + private static final int X_SHIFT = Y_SHIFT + NUM_Y_BITS; + private static final long X_MASK = (1L << NUM_X_BITS) - 1L; + private static final long Y_MASK = (1L << NUM_Y_BITS) - 1L; + private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L; + + public BlockPos(int x, int y, int z) + { + super(x, y, z); + } + + public BlockPos(double x, double y, double z) + { + super(x, y, z); + } + + public BlockPos(Entity source) + { + this(source.posX, source.posY, source.posZ); + } + + public BlockPos(Vec3d vec) + { + this(vec.x, vec.y, vec.z); + } + + public BlockPos(Vec3i source) + { + this(source.getX(), source.getY(), source.getZ()); + } + + /** + * Add the given coordinates to the coordinates of this BlockPos + */ + public BlockPos add(double x, double y, double z) + { + return x == 0.0D && y == 0.0D && z == 0.0D ? this : new BlockPos((double)this.getX() + x, (double)this.getY() + y, (double)this.getZ() + z); + } + + /** + * Add the given coordinates to the coordinates of this BlockPos + */ + public BlockPos add(int x, int y, int z) + { + return x == 0 && y == 0 && z == 0 ? this : new BlockPos(this.getX() + x, this.getY() + y, this.getZ() + z); + } + + /** + * Add the given Vector to this BlockPos + */ + public BlockPos add(Vec3i vec) + { + return this.add(vec.getX(), vec.getY(), vec.getZ()); + } + + /** + * Subtract the given Vector from this BlockPos + */ + public BlockPos subtract(Vec3i vec) + { + return this.add(-vec.getX(), -vec.getY(), -vec.getZ()); + } + + /** + * Offset this BlockPos 1 block up + */ + public BlockPos up() + { + return this.up(1); + } + + /** + * Offset this BlockPos n blocks up + */ + public BlockPos up(int n) + { + return this.offset(EnumFacing.UP, n); + } + + /** + * Offset this BlockPos 1 block down + */ + public BlockPos down() + { + return this.down(1); + } + + /** + * Offset this BlockPos n blocks down + */ + public BlockPos down(int n) + { + return this.offset(EnumFacing.DOWN, n); + } + + /** + * Offset this BlockPos 1 block in northern direction + */ + public BlockPos north() + { + return this.north(1); + } + + /** + * Offset this BlockPos n blocks in northern direction + */ + public BlockPos north(int n) + { + return this.offset(EnumFacing.NORTH, n); + } + + /** + * Offset this BlockPos 1 block in southern direction + */ + public BlockPos south() + { + return this.south(1); + } + + /** + * Offset this BlockPos n blocks in southern direction + */ + public BlockPos south(int n) + { + return this.offset(EnumFacing.SOUTH, n); + } + + /** + * Offset this BlockPos 1 block in western direction + */ + public BlockPos west() + { + return this.west(1); + } + + /** + * Offset this BlockPos n blocks in western direction + */ + public BlockPos west(int n) + { + return this.offset(EnumFacing.WEST, n); + } + + /** + * Offset this BlockPos 1 block in eastern direction + */ + public BlockPos east() + { + return this.east(1); + } + + /** + * Offset this BlockPos n blocks in eastern direction + */ + public BlockPos east(int n) + { + return this.offset(EnumFacing.EAST, n); + } + + /** + * Offset this BlockPos 1 block in the given direction + */ + public BlockPos offset(EnumFacing facing) + { + return this.offset(facing, 1); + } + + /** + * Offsets this BlockPos n blocks in the given direction + */ + public BlockPos offset(EnumFacing facing, int n) + { + return n == 0 ? this : new BlockPos(this.getX() + facing.getFrontOffsetX() * n, this.getY() + facing.getFrontOffsetY() * n, this.getZ() + facing.getFrontOffsetZ() * n); + } + + public BlockPos rotate(Rotation rotationIn) + { + switch (rotationIn) + { + case NONE: + default: + return this; + case CLOCKWISE_90: + return new BlockPos(-this.getZ(), this.getY(), this.getX()); + case CLOCKWISE_180: + return new BlockPos(-this.getX(), this.getY(), -this.getZ()); + case COUNTERCLOCKWISE_90: + return new BlockPos(this.getZ(), this.getY(), -this.getX()); + } + } + + /** + * Calculate the cross product of this and the given Vector + */ + public BlockPos crossProduct(Vec3i vec) + { + return new BlockPos(this.getY() * vec.getZ() - this.getZ() * vec.getY(), this.getZ() * vec.getX() - this.getX() * vec.getZ(), this.getX() * vec.getY() - this.getY() * vec.getX()); + } + + /** + * Serialize this BlockPos into a long value + */ + public long toLong() + { + return ((long)this.getX() & X_MASK) << X_SHIFT | ((long)this.getY() & Y_MASK) << Y_SHIFT | ((long)this.getZ() & Z_MASK) << 0; + } + + /** + * Create a BlockPos from a serialized long value (created by toLong) + */ + public static BlockPos fromLong(long serialized) + { + int i = (int)(serialized << 64 - X_SHIFT - NUM_X_BITS >> 64 - NUM_X_BITS); + int j = (int)(serialized << 64 - Y_SHIFT - NUM_Y_BITS >> 64 - NUM_Y_BITS); + int k = (int)(serialized << 64 - NUM_Z_BITS >> 64 - NUM_Z_BITS); + return new BlockPos(i, j, k); + } + + /** + * Create an Iterable that returns all positions in the box specified by the given corners. There is no requirement + * that one corner is greater than the other; individual coordinates will be swapped as needed. + * + * In situations where it is usable, prefer {@link #getAllInBoxMutable(BlockPos, BlockPos}) instead as it has better + * performance (fewer allocations) + * + * @see #getAllInBox(int, int, int, int, int, int) + * @see #getAllInBoxMutable(BlockPos, BlockPos) + * @see #mutablesBetween(int, int, int, int, int, int) + * + * @param from One corner of the box + * @param to Another corner of the box + */ + public static Iterable getAllInBox(BlockPos from, BlockPos to) + { + return getAllInBox(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), Math.min(from.getZ(), to.getZ()), Math.max(from.getX(), to.getX()), Math.max(from.getY(), to.getY()), Math.max(from.getZ(), to.getZ())); + } + + /** + * Create an Iterable that returns all positions in the box specified by the coordinates. Coordinates must + * be in order; e.g. x1 <= x2. + * + * In situations where it is usable, prefer {@link #getAllInBoxMutable(BlockPos, BlockPos}) instead as it has better + * performance (fewer allocations) + * + * @see #getAllInBox(BlockPos, BlockPos) + * @see #getAllInBoxMutable(BlockPos, BlockPos) + * @see #mutablesBetween(int, int, int, int, int, int) + * + * @param x1 The lower x coordinate + * @param y1 The lower y coordinate + * @param z1 The lower z coordinate + * @param x2 The upper x coordinate + * @param y2 The upper y coordinate + * @param z2 The upper z coordinate + */ + public static Iterable getAllInBox(final int x1, final int y1, final int z1, final int x2, final int y2, final int z2) + { + return new Iterable() + { + public Iterator iterator() + { + return new AbstractIterator() + { + private boolean first = true; + private int lastPosX; + private int lastPosY; + private int lastPosZ; + protected BlockPos computeNext() + { + if (this.first) + { + this.first = false; + this.lastPosX = x1; + this.lastPosY = y1; + this.lastPosZ = z1; + return new BlockPos(x1, y1, z1); + } + else if (this.lastPosX == x2 && this.lastPosY == y2 && this.lastPosZ == z2) + { + return (BlockPos)this.endOfData(); + } + else + { + if (this.lastPosX < x2) + { + ++this.lastPosX; + } + else if (this.lastPosY < y2) + { + this.lastPosX = x1; + ++this.lastPosY; + } + else if (this.lastPosZ < z2) + { + this.lastPosX = x1; + this.lastPosY = y1; + ++this.lastPosZ; + } + + return new BlockPos(this.lastPosX, this.lastPosY, this.lastPosZ); + } + } + }; + } + }; + } + + /** + * Returns a version of this BlockPos that is guaranteed to be immutable. + * + *

When storing a BlockPos given to you for an extended period of time, make sure you + * use this in case the value is changed internally.

+ */ + public BlockPos toImmutable() + { + return this; + } + + /** + * Creates an Iterable that returns all positions in the box specified by the given corners. There is no requirement + * that one corner is greater than the other; individual coordinates will be swapped as needed. + * + * This method uses {@link BlockPos.MutableBlockPos MutableBlockPos} instead of regular BlockPos, which grants + * better performance. However, the resulting BlockPos instances can only be used inside the iteration loop (as + * otherwise the value will change), unless {@link #toImmutable()} is called. This method is ideal for searching + * large areas and only storing a few locations. + * + * @see #getAllInBox(BlockPos, BlockPos) + * @see #getAllInBox(int, int, int, int, int, int) + * @see #getAllInBoxMutable(BlockPos, BlockPos) + * @see #mutablesBetween(int, int, int, int, int, int) + * + * @param from One corner of the box + * @param to Another corner of the box + */ + public static Iterable getAllInBoxMutable(BlockPos from, BlockPos to) + { + return getAllInBoxMutable(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), Math.min(from.getZ(), to.getZ()), Math.max(from.getX(), to.getX()), Math.max(from.getY(), to.getY()), Math.max(from.getZ(), to.getZ())); + } + + /** + * Creates an Iterable that returns all positions in the box specified by the given corners. Coordinates + * must be in order; e.g. x1 <= x2. + * + * This method uses {@link BlockPos.MutableBlockPos MutableBlockPos} instead of regular BlockPos, which grants + * better performance. However, the resulting BlockPos instances can only be used inside the iteration loop (as + * otherwise the value will change), unless {@link #toImmutable()} is called. This method is ideal for searching + * large areas and only storing a few locations. + * + * @see #getAllInBox(BlockPos, BlockPos) + * @see #getAllInBox(int, int, int, int, int, int) + * @see #getAllInBoxMutable(BlockPos, BlockPos) + * + * @param x1 The lower x coordinate + * @param y1 The lower y coordinate + * @param z1 The lower z coordinate + * @param x2 The upper x coordinate + * @param y2 The upper y coordinate + * @param z2 The upper z coordinate + */ + public static Iterable getAllInBoxMutable(final int x1, final int y1, final int z1, final int x2, final int y2, final int z2) + { + return new Iterable() + { + public Iterator iterator() + { + return new AbstractIterator() + { + private BlockPos.MutableBlockPos pos; + protected BlockPos.MutableBlockPos computeNext() + { + if (this.pos == null) + { + this.pos = new BlockPos.MutableBlockPos(x1, y1, z1); + return this.pos; + } + else if (this.pos.x == x2 && this.pos.y == y2 && this.pos.z == z2) + { + return (BlockPos.MutableBlockPos)this.endOfData(); + } + else + { + if (this.pos.x < x2) + { + ++this.pos.x; + } + else if (this.pos.y < y2) + { + this.pos.x = x1; + ++this.pos.y; + } + else if (this.pos.z < z2) + { + this.pos.x = x1; + this.pos.y = y1; + ++this.pos.z; + } + + return this.pos; + } + } + }; + } + }; + } + + public static class MutableBlockPos extends BlockPos + { + /** Mutable X Coordinate */ + protected int x; + /** Mutable Y Coordinate */ + protected int y; + /** Mutable Z Coordinate */ + protected int z; + + public MutableBlockPos() + { + this(0, 0, 0); + } + + public MutableBlockPos(BlockPos pos) + { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public MutableBlockPos(int x_, int y_, int z_) + { + super(0, 0, 0); + this.x = x_; + this.y = y_; + this.z = z_; + } + + /** + * Add the given coordinates to the coordinates of this BlockPos + */ + public BlockPos add(double x, double y, double z) + { + return super.add(x, y, z).toImmutable(); + } + + /** + * Add the given coordinates to the coordinates of this BlockPos + */ + public BlockPos add(int x, int y, int z) + { + return super.add(x, y, z).toImmutable(); + } + + /** + * Offsets this BlockPos n blocks in the given direction + */ + public BlockPos offset(EnumFacing facing, int n) + { + return super.offset(facing, n).toImmutable(); + } + + public BlockPos rotate(Rotation rotationIn) + { + return super.rotate(rotationIn).toImmutable(); + } + + /** + * Gets the X coordinate. + */ + public int getX() + { + return this.x; + } + + /** + * Gets the Y coordinate. + */ + public int getY() + { + return this.y; + } + + /** + * Gets the Z coordinate. + */ + public int getZ() + { + return this.z; + } + + /** + * None + */ + public BlockPos.MutableBlockPos setPos(int xIn, int yIn, int zIn) + { + this.x = xIn; + this.y = yIn; + this.z = zIn; + return this; + } + + public BlockPos.MutableBlockPos setPos(double xIn, double yIn, double zIn) + { + return this.setPos(MathHelper.floor(xIn), MathHelper.floor(yIn), MathHelper.floor(zIn)); + } + + @SideOnly(Side.CLIENT) + public BlockPos.MutableBlockPos setPos(Entity entityIn) + { + return this.setPos(entityIn.posX, entityIn.posY, entityIn.posZ); + } + + public BlockPos.MutableBlockPos setPos(Vec3i vec) + { + return this.setPos(vec.getX(), vec.getY(), vec.getZ()); + } + + public BlockPos.MutableBlockPos move(EnumFacing facing) + { + return this.move(facing, 1); + } + + public BlockPos.MutableBlockPos move(EnumFacing facing, int n) + { + return this.setPos(this.x + facing.getFrontOffsetX() * n, this.y + facing.getFrontOffsetY() * n, this.z + facing.getFrontOffsetZ() * n); + } + + public void setY(int yIn) + { + this.y = yIn; + } + + /** + * Returns a version of this BlockPos that is guaranteed to be immutable. + * + *

When storing a BlockPos given to you for an extended period of time, make sure you + * use this in case the value is changed internally.

+ */ + public BlockPos toImmutable() + { + return new BlockPos(this); + } + } + + public static final class PooledMutableBlockPos extends BlockPos.MutableBlockPos + { + private boolean released; + private static final List POOL = Lists.newArrayList(); + + private PooledMutableBlockPos(int xIn, int yIn, int zIn) + { + super(xIn, yIn, zIn); + } + + public static BlockPos.PooledMutableBlockPos retain() + { + return retain(0, 0, 0); + } + + public static BlockPos.PooledMutableBlockPos retain(double xIn, double yIn, double zIn) + { + return retain(MathHelper.floor(xIn), MathHelper.floor(yIn), MathHelper.floor(zIn)); + } + + @SideOnly(Side.CLIENT) + public static BlockPos.PooledMutableBlockPos retain(Vec3i vec) + { + return retain(vec.getX(), vec.getY(), vec.getZ()); + } + + public static BlockPos.PooledMutableBlockPos retain(int xIn, int yIn, int zIn) + { + synchronized (POOL) + { + if (!POOL.isEmpty()) + { + BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = POOL.remove(POOL.size() - 1); + + if (blockpos$pooledmutableblockpos != null && blockpos$pooledmutableblockpos.released) + { + blockpos$pooledmutableblockpos.released = false; + blockpos$pooledmutableblockpos.setPos(xIn, yIn, zIn); + return blockpos$pooledmutableblockpos; + } + } + } + + return new BlockPos.PooledMutableBlockPos(xIn, yIn, zIn); + } + + public void release() + { + synchronized (POOL) + { + if (POOL.size() < 100) + { + POOL.add(this); + } + + this.released = true; + } + } + + /** + * None + */ + public BlockPos.PooledMutableBlockPos setPos(int xIn, int yIn, int zIn) + { + if (this.released) + { + BlockPos.LOGGER.error("PooledMutableBlockPosition modified after it was released.", new Throwable()); + this.released = false; + } + + return (BlockPos.PooledMutableBlockPos)super.setPos(xIn, yIn, zIn); + } + + @SideOnly(Side.CLIENT) + public BlockPos.PooledMutableBlockPos setPos(Entity entityIn) + { + return (BlockPos.PooledMutableBlockPos)super.setPos(entityIn); + } + + public BlockPos.PooledMutableBlockPos setPos(double xIn, double yIn, double zIn) + { + return (BlockPos.PooledMutableBlockPos)super.setPos(xIn, yIn, zIn); + } + + public BlockPos.PooledMutableBlockPos setPos(Vec3i vec) + { + return (BlockPos.PooledMutableBlockPos)super.setPos(vec); + } + + public BlockPos.PooledMutableBlockPos move(EnumFacing facing) + { + return (BlockPos.PooledMutableBlockPos)super.move(facing); + } + + public BlockPos.PooledMutableBlockPos move(EnumFacing facing, int n) + { + return (BlockPos.PooledMutableBlockPos)super.move(facing, n); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/Cartesian.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/Cartesian.java new file mode 100644 index 0000000..9355bb1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/Cartesian.java @@ -0,0 +1,191 @@ +package net.minecraft.util.math; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.UnmodifiableIterator; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; +import javax.annotation.Nullable; + +public class Cartesian +{ + /** + * Create the cartesian product. This method returns an Iterable of arrays of type clazz. + */ + public static Iterable cartesianProduct(Class clazz, Iterable > sets) + { + return new Cartesian.Product(clazz, (Iterable[])toArray(Iterable.class, sets)); + } + + /** + * Like cartesianProduct(Class, Iterable) but returns an Iterable of Lists instead. + */ + public static Iterable> cartesianProduct(Iterable > sets) + { + return arraysAsLists(cartesianProduct(Object.class, sets)); + } + + /** + * Convert an Iterable of Arrays (Object[]) to an Iterable of Lists + */ + private static Iterable> arraysAsLists(Iterable arrays) + { + return Iterables.transform(arrays, new Cartesian.GetList()); + } + + /** + * Create a new Array of type clazz with the contents of the given Iterable + */ + private static T[] toArray(Class clazz, Iterable it) + { + List list = Lists.newArrayList(); + + for (T t : it) + { + list.add(t); + } + + return (T[])(list.toArray(createArray(clazz, list.size()))); + } + + private static T[] createArray(Class elementType, int length) + { + return (T[])((Object[])Array.newInstance(elementType, length)); + } + + static class GetList implements Function> + { + private GetList() + { + } + + public List apply(@Nullable Object[] p_apply_1_) + { + return Arrays.asList((T[])p_apply_1_); + } + } + + static class Product implements Iterable + { + private final Class clazz; + private final Iterable [] iterables; + + private Product(Class clazz, Iterable [] iterables) + { + this.clazz = clazz; + this.iterables = iterables; + } + + public Iterator iterator() + { + return (Iterator)(this.iterables.length <= 0 ? Collections.singletonList(Cartesian.createArray(this.clazz, 0)).iterator() : new Cartesian.Product.ProductIterator(this.clazz, this.iterables)); + } + + static class ProductIterator extends UnmodifiableIterator + { + private int index; + private final Iterable [] iterables; + private final Iterator [] iterators; + /** Array used as the result of next() */ + private final T[] results; + + private ProductIterator(Class clazz, Iterable [] iterables) + { + this.index = -2; + this.iterables = iterables; + this.iterators = (Iterator[])Cartesian.createArray(Iterator.class, this.iterables.length); + + for (int i = 0; i < this.iterables.length; ++i) + { + this.iterators[i] = iterables[i].iterator(); + } + + this.results = (T[])Cartesian.createArray(clazz, this.iterators.length); + } + + /** + * Called when no more data is available in this Iterator. + */ + private void endOfData() + { + this.index = -1; + Arrays.fill(this.iterators, (Object)null); + Arrays.fill(this.results, (Object)null); + } + + public boolean hasNext() + { + if (this.index == -2) + { + this.index = 0; + + for (Iterator iterator1 : this.iterators) + { + if (!iterator1.hasNext()) + { + this.endOfData(); + break; + } + } + + return true; + } + else + { + if (this.index >= this.iterators.length) + { + for (this.index = this.iterators.length - 1; this.index >= 0; --this.index) + { + Iterator iterator = this.iterators[this.index]; + + if (iterator.hasNext()) + { + break; + } + + if (this.index == 0) + { + this.endOfData(); + break; + } + + iterator = this.iterables[this.index].iterator(); + this.iterators[this.index] = iterator; + + if (!iterator.hasNext()) + { + this.endOfData(); + break; + } + } + } + + return this.index >= 0; + } + } + + public T[] next() + { + if (!this.hasNext()) + { + throw new NoSuchElementException(); + } + else + { + while (this.index < this.iterators.length) + { + this.results[this.index] = this.iterators[this.index].next(); + ++this.index; + } + + return (T[])((Object[])this.results.clone()); + } + } + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/ChunkPos.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/ChunkPos.java new file mode 100644 index 0000000..21f3c6c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/ChunkPos.java @@ -0,0 +1,109 @@ +package net.minecraft.util.math; + +import net.minecraft.entity.Entity; + +public class ChunkPos +{ + /** The X position of this Chunk Coordinate Pair */ + public final int x; + /** The Z position of this Chunk Coordinate Pair */ + public final int z; + + public ChunkPos(int x, int z) + { + this.x = x; + this.z = z; + } + + public ChunkPos(BlockPos pos) + { + this.x = pos.getX() >> 4; + this.z = pos.getZ() >> 4; + } + + /** + * Converts the chunk coordinate pair to a long + */ + public static long asLong(int x, int z) + { + return (long)x & 4294967295L | ((long)z & 4294967295L) << 32; + } + + public int hashCode() + { + int i = 1664525 * this.x + 1013904223; + int j = 1664525 * (this.z ^ -559038737) + 1013904223; + return i ^ j; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof ChunkPos)) + { + return false; + } + else + { + ChunkPos chunkpos = (ChunkPos)p_equals_1_; + return this.x == chunkpos.x && this.z == chunkpos.z; + } + } + + public double getDistanceSq(Entity entityIn) + { + double d0 = (double)(this.x * 16 + 8); + double d1 = (double)(this.z * 16 + 8); + double d2 = d0 - entityIn.posX; + double d3 = d1 - entityIn.posZ; + return d2 * d2 + d3 * d3; + } + + /** + * Get the first world X coordinate that belongs to this Chunk + */ + public int getXStart() + { + return this.x << 4; + } + + /** + * Get the first world Z coordinate that belongs to this Chunk + */ + public int getZStart() + { + return this.z << 4; + } + + /** + * Get the last world X coordinate that belongs to this Chunk + */ + public int getXEnd() + { + return (this.x << 4) + 15; + } + + /** + * Get the last world Z coordinate that belongs to this Chunk + */ + public int getZEnd() + { + return (this.z << 4) + 15; + } + + /** + * Get the World coordinates of the Block with the given Chunk coordinates relative to this chunk + */ + public BlockPos getBlock(int x, int y, int z) + { + return new BlockPos((this.x << 4) + x, y, (this.z << 4) + z); + } + + public String toString() + { + return "[" + this.x + ", " + this.z + "]"; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/MathHelper.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/MathHelper.java new file mode 100644 index 0000000..b3188b5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/MathHelper.java @@ -0,0 +1,665 @@ +package net.minecraft.util.math; + +import java.util.Random; +import java.util.UUID; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class MathHelper +{ + public static final float SQRT_2 = sqrt(2.0F); + /** A table of sin values computed from 0 (inclusive) to 2*pi (exclusive), with steps of 2*PI / 65536. */ + private static final float[] SIN_TABLE = new float[65536]; + private static final Random RANDOM = new Random(); + /** + * Though it looks like an array, this is really more like a mapping. Key (index of this array) is the upper 5 bits + * of the result of multiplying a 32-bit unsigned integer by the B(2, 5) De Bruijn sequence 0x077CB531. Value + * (value stored in the array) is the unique index (from the right) of the leftmost one-bit in a 32-bit unsigned + * integer that can cause the upper 5 bits to get that value. Used for highly optimized "find the log-base-2 of + * this number" calculations. + */ + private static final int[] MULTIPLY_DE_BRUIJN_BIT_POSITION; + private static final double FRAC_BIAS; + private static final double[] ASINE_TAB; + private static final double[] COS_TAB; + + /** + * sin looked up in a table + */ + public static float sin(float value) + { + return SIN_TABLE[(int)(value * 10430.378F) & 65535]; + } + + /** + * cos looked up in the sin table with the appropriate offset + */ + public static float cos(float value) + { + return SIN_TABLE[(int)(value * 10430.378F + 16384.0F) & 65535]; + } + + public static float sqrt(float value) + { + return (float)Math.sqrt((double)value); + } + + public static float sqrt(double value) + { + return (float)Math.sqrt(value); + } + + /** + * Returns the greatest integer less than or equal to the float argument + */ + public static int floor(float value) + { + int i = (int)value; + return value < (float)i ? i - 1 : i; + } + + /** + * returns par0 cast as an int, and no greater than Integer.MAX_VALUE-1024 + */ + @SideOnly(Side.CLIENT) + public static int fastFloor(double value) + { + return (int)(value + 1024.0D) - 1024; + } + + /** + * Returns the greatest integer less than or equal to the double argument + */ + public static int floor(double value) + { + int i = (int)value; + return value < (double)i ? i - 1 : i; + } + + /** + * Long version of floor() + */ + public static long lfloor(double value) + { + long i = (long)value; + return value < (double)i ? i - 1L : i; + } + + @SideOnly(Side.CLIENT) + public static int absFloor(double value) + { + return (int)(value >= 0.0D ? value : -value + 1.0D); + } + + public static float abs(float value) + { + return value >= 0.0F ? value : -value; + } + + /** + * Returns the unsigned value of an int. + */ + public static int abs(int value) + { + return value >= 0 ? value : -value; + } + + public static int ceil(float value) + { + int i = (int)value; + return value > (float)i ? i + 1 : i; + } + + public static int ceil(double value) + { + int i = (int)value; + return value > (double)i ? i + 1 : i; + } + + /** + * Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and + * third parameters. + */ + public static int clamp(int num, int min, int max) + { + if (num < min) + { + return min; + } + else + { + return num > max ? max : num; + } + } + + /** + * Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and + * third parameters + */ + public static float clamp(float num, float min, float max) + { + if (num < min) + { + return min; + } + else + { + return num > max ? max : num; + } + } + + public static double clamp(double num, double min, double max) + { + if (num < min) + { + return min; + } + else + { + return num > max ? max : num; + } + } + + public static double clampedLerp(double lowerBnd, double upperBnd, double slide) + { + if (slide < 0.0D) + { + return lowerBnd; + } + else + { + return slide > 1.0D ? upperBnd : lowerBnd + (upperBnd - lowerBnd) * slide; + } + } + + /** + * Maximum of the absolute value of two numbers. + */ + public static double absMax(double p_76132_0_, double p_76132_2_) + { + if (p_76132_0_ < 0.0D) + { + p_76132_0_ = -p_76132_0_; + } + + if (p_76132_2_ < 0.0D) + { + p_76132_2_ = -p_76132_2_; + } + + return p_76132_0_ > p_76132_2_ ? p_76132_0_ : p_76132_2_; + } + + /** + * Buckets an integer with specifed bucket sizes. + */ + @SideOnly(Side.CLIENT) + public static int intFloorDiv(int p_76137_0_, int p_76137_1_) + { + return p_76137_0_ < 0 ? -((-p_76137_0_ - 1) / p_76137_1_) - 1 : p_76137_0_ / p_76137_1_; + } + + public static int getInt(Random random, int minimum, int maximum) + { + return minimum >= maximum ? minimum : random.nextInt(maximum - minimum + 1) + minimum; + } + + public static float nextFloat(Random random, float minimum, float maximum) + { + return minimum >= maximum ? minimum : random.nextFloat() * (maximum - minimum) + minimum; + } + + public static double nextDouble(Random random, double minimum, double maximum) + { + return minimum >= maximum ? minimum : random.nextDouble() * (maximum - minimum) + minimum; + } + + public static double average(long[] values) + { + long i = 0L; + + for (long j : values) + { + i += j; + } + + return (double)i / (double)values.length; + } + + @SideOnly(Side.CLIENT) + public static boolean epsilonEquals(float p_180185_0_, float p_180185_1_) + { + return abs(p_180185_1_ - p_180185_0_) < 1.0E-5F; + } + + @SideOnly(Side.CLIENT) + public static int normalizeAngle(int p_180184_0_, int p_180184_1_) + { + return (p_180184_0_ % p_180184_1_ + p_180184_1_) % p_180184_1_; + } + + @SideOnly(Side.CLIENT) + public static float positiveModulo(float numerator, float denominator) + { + return (numerator % denominator + denominator) % denominator; + } + + @SideOnly(Side.CLIENT) + public static double positiveModulo(double numerator, double denominator) + { + return (numerator % denominator + denominator) % denominator; + } + + /** + * the angle is reduced to an angle between -180 and +180 by mod, and a 360 check + */ + public static float wrapDegrees(float value) + { + value = value % 360.0F; + + if (value >= 180.0F) + { + value -= 360.0F; + } + + if (value < -180.0F) + { + value += 360.0F; + } + + return value; + } + + /** + * the angle is reduced to an angle between -180 and +180 by mod, and a 360 check + */ + public static double wrapDegrees(double value) + { + value = value % 360.0D; + + if (value >= 180.0D) + { + value -= 360.0D; + } + + if (value < -180.0D) + { + value += 360.0D; + } + + return value; + } + + /** + * Adjust the angle so that his value is in range [-180;180[ + */ + public static int wrapDegrees(int angle) + { + angle = angle % 360; + + if (angle >= 180) + { + angle -= 360; + } + + if (angle < -180) + { + angle += 360; + } + + return angle; + } + + /** + * parses the string as integer or returns the second parameter if it fails + */ + public static int getInt(String value, int defaultValue) + { + try + { + return Integer.parseInt(value); + } + catch (Throwable var3) + { + return defaultValue; + } + } + + /** + * parses the string as integer or returns the second parameter if it fails. this value is capped to par2 + */ + public static int getInt(String value, int defaultValue, int max) + { + return Math.max(max, getInt(value, defaultValue)); + } + + /** + * parses the string as double or returns the second parameter if it fails. + */ + public static double getDouble(String value, double defaultValue) + { + try + { + return Double.parseDouble(value); + } + catch (Throwable var4) + { + return defaultValue; + } + } + + public static double getDouble(String value, double defaultValue, double max) + { + return Math.max(max, getDouble(value, defaultValue)); + } + + /** + * Returns the input value rounded up to the next highest power of two. + */ + public static int smallestEncompassingPowerOfTwo(int value) + { + int i = value - 1; + i = i | i >> 1; + i = i | i >> 2; + i = i | i >> 4; + i = i | i >> 8; + i = i | i >> 16; + return i + 1; + } + + /** + * Is the given value a power of two? (1, 2, 4, 8, 16, ...) + */ + private static boolean isPowerOfTwo(int value) + { + return value != 0 && (value & value - 1) == 0; + } + + /** + * Uses a B(2, 5) De Bruijn sequence and a lookup table to efficiently calculate the log-base-two of the given + * value. Optimized for cases where the input value is a power-of-two. If the input value is not a power-of-two, + * then subtract 1 from the return value. + */ + public static int log2DeBruijn(int value) + { + value = isPowerOfTwo(value) ? value : smallestEncompassingPowerOfTwo(value); + return MULTIPLY_DE_BRUIJN_BIT_POSITION[(int)((long)value * 125613361L >> 27) & 31]; + } + + /** + * Efficiently calculates the floor of the base-2 log of an integer value. This is effectively the index of the + * highest bit that is set. For example, if the number in binary is 0...100101, this will return 5. + */ + public static int log2(int value) + { + return log2DeBruijn(value) - (isPowerOfTwo(value) ? 0 : 1); + } + + /** + * Rounds the first parameter up to the next interval of the second parameter. + * + * For instance, {@code roundUp(1, 4)} returns 4; {@code roundUp(0, 4)} returns 0; and {@code roundUp(4, 4)} returns + * 4. + */ + public static int roundUp(int number, int interval) + { + if (interval == 0) + { + return 0; + } + else if (number == 0) + { + return interval; + } + else + { + if (number < 0) + { + interval *= -1; + } + + int i = number % interval; + return i == 0 ? number : number + interval - i; + } + } + + public static long getCoordinateRandom(int x, int y, int z) + { + long i = (long)(x * 3129871) ^ (long)z * 116129781L ^ (long)y; + i = i * i * 42317861L + i * 11L; + return i; + } + + /** + * Makes an integer color from the given red, green, and blue float values + */ + @SideOnly(Side.CLIENT) + public static int rgb(float rIn, float gIn, float bIn) + { + return rgb(floor(rIn * 255.0F), floor(gIn * 255.0F), floor(bIn * 255.0F)); + } + + /** + * Makes a single int color with the given red, green, and blue values. + */ + @SideOnly(Side.CLIENT) + public static int rgb(int rIn, int gIn, int bIn) + { + int lvt_3_1_ = (rIn << 8) + gIn; + lvt_3_1_ = (lvt_3_1_ << 8) + bIn; + return lvt_3_1_; + } + + @SideOnly(Side.CLIENT) + public static int multiplyColor(int p_180188_0_, int p_180188_1_) + { + int i = (p_180188_0_ & 16711680) >> 16; + int j = (p_180188_1_ & 16711680) >> 16; + int k = (p_180188_0_ & 65280) >> 8; + int l = (p_180188_1_ & 65280) >> 8; + int i1 = (p_180188_0_ & 255) >> 0; + int j1 = (p_180188_1_ & 255) >> 0; + int k1 = (int)((float)i * (float)j / 255.0F); + int l1 = (int)((float)k * (float)l / 255.0F); + int i2 = (int)((float)i1 * (float)j1 / 255.0F); + return p_180188_0_ & -16777216 | k1 << 16 | l1 << 8 | i2; + } + + /** + * Gets the decimal portion of the given double. For instance, {@code frac(5.5)} returns {@code .5}. + */ + @SideOnly(Side.CLIENT) + public static double frac(double number) + { + return number - Math.floor(number); + } + + @SideOnly(Side.CLIENT) + public static long getPositionRandom(Vec3i pos) + { + return getCoordinateRandom(pos.getX(), pos.getY(), pos.getZ()); + } + + public static UUID getRandomUUID(Random rand) + { + long i = rand.nextLong() & -61441L | 16384L; + long j = rand.nextLong() & 4611686018427387903L | Long.MIN_VALUE; + return new UUID(i, j); + } + + /** + * Generates a random UUID using the shared random + */ + public static UUID getRandomUUID() + { + return getRandomUUID(RANDOM); + } + + public static double pct(double p_181160_0_, double p_181160_2_, double p_181160_4_) + { + return (p_181160_0_ - p_181160_2_) / (p_181160_4_ - p_181160_2_); + } + + public static double atan2(double p_181159_0_, double p_181159_2_) + { + double d0 = p_181159_2_ * p_181159_2_ + p_181159_0_ * p_181159_0_; + + if (Double.isNaN(d0)) + { + return Double.NaN; + } + else + { + boolean flag = p_181159_0_ < 0.0D; + + if (flag) + { + p_181159_0_ = -p_181159_0_; + } + + boolean flag1 = p_181159_2_ < 0.0D; + + if (flag1) + { + p_181159_2_ = -p_181159_2_; + } + + boolean flag2 = p_181159_0_ > p_181159_2_; + + if (flag2) + { + double d1 = p_181159_2_; + p_181159_2_ = p_181159_0_; + p_181159_0_ = d1; + } + + double d9 = fastInvSqrt(d0); + p_181159_2_ = p_181159_2_ * d9; + p_181159_0_ = p_181159_0_ * d9; + double d2 = FRAC_BIAS + p_181159_0_; + int i = (int)Double.doubleToRawLongBits(d2); + double d3 = ASINE_TAB[i]; + double d4 = COS_TAB[i]; + double d5 = d2 - FRAC_BIAS; + double d6 = p_181159_0_ * d4 - p_181159_2_ * d5; + double d7 = (6.0D + d6 * d6) * d6 * 0.16666666666666666D; + double d8 = d3 + d7; + + if (flag2) + { + d8 = (Math.PI / 2D) - d8; + } + + if (flag1) + { + d8 = Math.PI - d8; + } + + if (flag) + { + d8 = -d8; + } + + return d8; + } + } + + /** + * Computes 1/sqrt(n) using the fast inverse square + * root with a constant of 0x5FE6EB50C7B537AA. + */ + public static double fastInvSqrt(double p_181161_0_) + { + double d0 = 0.5D * p_181161_0_; + long i = Double.doubleToRawLongBits(p_181161_0_); + i = 6910469410427058090L - (i >> 1); + p_181161_0_ = Double.longBitsToDouble(i); + p_181161_0_ = p_181161_0_ * (1.5D - d0 * p_181161_0_ * p_181161_0_); + return p_181161_0_; + } + + @SideOnly(Side.CLIENT) + public static int hsvToRGB(float hue, float saturation, float value) + { + int i = (int)(hue * 6.0F) % 6; + float f = hue * 6.0F - (float)i; + float f1 = value * (1.0F - saturation); + float f2 = value * (1.0F - f * saturation); + float f3 = value * (1.0F - (1.0F - f) * saturation); + float f4; + float f5; + float f6; + + switch (i) + { + case 0: + f4 = value; + f5 = f3; + f6 = f1; + break; + case 1: + f4 = f2; + f5 = value; + f6 = f1; + break; + case 2: + f4 = f1; + f5 = value; + f6 = f3; + break; + case 3: + f4 = f1; + f5 = f2; + f6 = value; + break; + case 4: + f4 = f3; + f5 = f1; + f6 = value; + break; + case 5: + f4 = value; + f5 = f1; + f6 = f2; + break; + default: + throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + hue + ", " + saturation + ", " + value); + } + + int j = clamp((int)(f4 * 255.0F), 0, 255); + int k = clamp((int)(f5 * 255.0F), 0, 255); + int l = clamp((int)(f6 * 255.0F), 0, 255); + return j << 16 | k << 8 | l; + } + + public static int hash(int p_188208_0_) + { + p_188208_0_ = p_188208_0_ ^ p_188208_0_ >>> 16; + p_188208_0_ = p_188208_0_ * -2048144789; + p_188208_0_ = p_188208_0_ ^ p_188208_0_ >>> 13; + p_188208_0_ = p_188208_0_ * -1028477387; + p_188208_0_ = p_188208_0_ ^ p_188208_0_ >>> 16; + return p_188208_0_; + } + + static + { + for (int i = 0; i < 65536; ++i) + { + SIN_TABLE[i] = (float)Math.sin((double)i * Math.PI * 2.0D / 65536.0D); + } + + MULTIPLY_DE_BRUIJN_BIT_POSITION = new int[] {0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9}; + FRAC_BIAS = Double.longBitsToDouble(4805340802404319232L); + ASINE_TAB = new double[257]; + COS_TAB = new double[257]; + + for (int j = 0; j < 257; ++j) + { + double d0 = (double)j / 256.0D; + double d1 = Math.asin(d0); + COS_TAB[j] = Math.cos(d1); + ASINE_TAB[j] = d1; + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/RayTraceResult.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/RayTraceResult.java new file mode 100644 index 0000000..2b8b0a1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/RayTraceResult.java @@ -0,0 +1,69 @@ +package net.minecraft.util.math; + +import net.minecraft.entity.Entity; +import net.minecraft.util.EnumFacing; + +public class RayTraceResult +{ + /** Used to determine what sub-segment is hit */ + public int subHit = -1; + + /** Used to add extra hit info */ + public Object hitInfo = null; + + private BlockPos blockPos; + /** The type of hit that occured, see {@link RayTraceResult#Type} for possibilities. */ + public RayTraceResult.Type typeOfHit; + public EnumFacing sideHit; + /** The vector position of the hit */ + public Vec3d hitVec; + /** The hit entity */ + public Entity entityHit; + + public RayTraceResult(Vec3d hitVecIn, EnumFacing sideHitIn, BlockPos blockPosIn) + { + this(RayTraceResult.Type.BLOCK, hitVecIn, sideHitIn, blockPosIn); + } + + public RayTraceResult(Vec3d hitVecIn, EnumFacing sideHitIn) + { + this(RayTraceResult.Type.BLOCK, hitVecIn, sideHitIn, BlockPos.ORIGIN); + } + + public RayTraceResult(Entity entityIn) + { + this(entityIn, new Vec3d(entityIn.posX, entityIn.posY, entityIn.posZ)); + } + + public RayTraceResult(RayTraceResult.Type typeIn, Vec3d hitVecIn, EnumFacing sideHitIn, BlockPos blockPosIn) + { + this.typeOfHit = typeIn; + this.blockPos = blockPosIn; + this.sideHit = sideHitIn; + this.hitVec = new Vec3d(hitVecIn.x, hitVecIn.y, hitVecIn.z); + } + + public RayTraceResult(Entity entityHitIn, Vec3d hitVecIn) + { + this.typeOfHit = RayTraceResult.Type.ENTITY; + this.entityHit = entityHitIn; + this.hitVec = hitVecIn; + } + + public BlockPos getBlockPos() + { + return this.blockPos; + } + + public String toString() + { + return "HitResult{type=" + this.typeOfHit + ", blockpos=" + this.blockPos + ", f=" + this.sideHit + ", pos=" + this.hitVec + ", entity=" + this.entityHit + '}'; + } + + public static enum Type + { + MISS, + BLOCK, + ENTITY; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/Rotations.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/Rotations.java new file mode 100644 index 0000000..20b33c3 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/Rotations.java @@ -0,0 +1,72 @@ +package net.minecraft.util.math; + +import net.minecraft.nbt.NBTTagFloat; +import net.minecraft.nbt.NBTTagList; + +public class Rotations +{ + /** Rotation on the X axis */ + protected final float x; + /** Rotation on the Y axis */ + protected final float y; + /** Rotation on the Z axis */ + protected final float z; + + public Rotations(float x, float y, float z) + { + this.x = !Float.isInfinite(x) && !Float.isNaN(x) ? x % 360.0F : 0.0F; + this.y = !Float.isInfinite(y) && !Float.isNaN(y) ? y % 360.0F : 0.0F; + this.z = !Float.isInfinite(z) && !Float.isNaN(z) ? z % 360.0F : 0.0F; + } + + public Rotations(NBTTagList nbt) + { + this(nbt.getFloatAt(0), nbt.getFloatAt(1), nbt.getFloatAt(2)); + } + + public NBTTagList writeToNBT() + { + NBTTagList nbttaglist = new NBTTagList(); + nbttaglist.appendTag(new NBTTagFloat(this.x)); + nbttaglist.appendTag(new NBTTagFloat(this.y)); + nbttaglist.appendTag(new NBTTagFloat(this.z)); + return nbttaglist; + } + + public boolean equals(Object p_equals_1_) + { + if (!(p_equals_1_ instanceof Rotations)) + { + return false; + } + else + { + Rotations rotations = (Rotations)p_equals_1_; + return this.x == rotations.x && this.y == rotations.y && this.z == rotations.z; + } + } + + /** + * Gets the X axis rotation + */ + public float getX() + { + return this.x; + } + + /** + * Gets the Y axis rotation + */ + public float getY() + { + return this.y; + } + + /** + * Gets the Z axis rotation + */ + public float getZ() + { + return this.z; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec2f.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec2f.java new file mode 100644 index 0000000..4ee5727 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec2f.java @@ -0,0 +1,35 @@ +package net.minecraft.util.math; + +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Vec2f +{ + /** An immutable vector with {@code 0.0F} as the x and y components. */ + public static final Vec2f ZERO = new Vec2f(0.0F, 0.0F); + /** An immutable vector with {@code 1.0F} as the x and y components. */ + public static final Vec2f ONE = new Vec2f(1.0F, 1.0F); + /** An immutable vector with {@code 1.0F} as the x component. */ + public static final Vec2f UNIT_X = new Vec2f(1.0F, 0.0F); + /** An immutable vector with {@code -1.0F} as the x component. */ + public static final Vec2f NEGATIVE_UNIT_X = new Vec2f(-1.0F, 0.0F); + /** An immutable vector with {@code 1.0F} as the y component. */ + public static final Vec2f UNIT_Y = new Vec2f(0.0F, 1.0F); + /** An immutable vector with {@code -1.0F} as the y component. */ + public static final Vec2f NEGATIVE_UNIT_Y = new Vec2f(0.0F, -1.0F); + /** An immutable vector with {@link Float#MAX_VALUE} as the x and y components. */ + public static final Vec2f MAX = new Vec2f(Float.MAX_VALUE, Float.MAX_VALUE); + /** An immutable vector with {@link Float#MIN_VALUE} as the x and y components. */ + public static final Vec2f MIN = new Vec2f(Float.MIN_VALUE, Float.MIN_VALUE); + /** The x component of this vector. */ + public final float x; + /** The y component of this vector. */ + public final float y; + + public Vec2f(float xIn, float yIn) + { + this.x = xIn; + this.y = yIn; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec3d.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec3d.java new file mode 100644 index 0000000..de62976 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec3d.java @@ -0,0 +1,293 @@ +package net.minecraft.util.math; + +import javax.annotation.Nullable; +public class Vec3d +{ + public static final Vec3d ZERO = new Vec3d(0.0D, 0.0D, 0.0D); + /** X coordinate of Vec3D */ + public final double x; + /** Y coordinate of Vec3D */ + public final double y; + /** Z coordinate of Vec3D */ + public final double z; + + public Vec3d(double xIn, double yIn, double zIn) + { + if (xIn == -0.0D) + { + xIn = 0.0D; + } + + if (yIn == -0.0D) + { + yIn = 0.0D; + } + + if (zIn == -0.0D) + { + zIn = 0.0D; + } + + this.x = xIn; + this.y = yIn; + this.z = zIn; + } + + public Vec3d(Vec3i vector) + { + this((double)vector.getX(), (double)vector.getY(), (double)vector.getZ()); + } + + /** + * Returns a new vector with the result of the specified vector minus this. + */ + public Vec3d subtractReverse(Vec3d vec) + { + return new Vec3d(vec.x - this.x, vec.y - this.y, vec.z - this.z); + } + + /** + * Normalizes the vector to a length of 1 (except if it is the zero vector) + */ + public Vec3d normalize() + { + double d0 = (double)MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + return d0 < 1.0E-4D ? ZERO : new Vec3d(this.x / d0, this.y / d0, this.z / d0); + } + + public double dotProduct(Vec3d vec) + { + return this.x * vec.x + this.y * vec.y + this.z * vec.z; + } + + /** + * Returns a new vector with the result of this vector x the specified vector. + */ + public Vec3d crossProduct(Vec3d vec) + { + return new Vec3d(this.y * vec.z - this.z * vec.y, this.z * vec.x - this.x * vec.z, this.x * vec.y - this.y * vec.x); + } + + public Vec3d subtract(Vec3d vec) + { + return this.subtract(vec.x, vec.y, vec.z); + } + + public Vec3d subtract(double x, double y, double z) + { + return this.addVector(-x, -y, -z); + } + + public Vec3d add(Vec3d vec) + { + return this.addVector(vec.x, vec.y, vec.z); + } + + /** + * Adds the specified x,y,z vector components to this vector and returns the resulting vector. Does not change this + * vector. + */ + public Vec3d addVector(double x, double y, double z) + { + return new Vec3d(this.x + x, this.y + y, this.z + z); + } + + /** + * Euclidean distance between this and the specified vector, returned as double. + */ + public double distanceTo(Vec3d vec) + { + double d0 = vec.x - this.x; + double d1 = vec.y - this.y; + double d2 = vec.z - this.z; + return (double)MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + } + + /** + * The square of the Euclidean distance between this and the specified vector. + */ + public double squareDistanceTo(Vec3d vec) + { + double d0 = vec.x - this.x; + double d1 = vec.y - this.y; + double d2 = vec.z - this.z; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + public double squareDistanceTo(double xIn, double yIn, double zIn) + { + double d0 = xIn - this.x; + double d1 = yIn - this.y; + double d2 = zIn - this.z; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + public Vec3d scale(double factor) + { + return new Vec3d(this.x * factor, this.y * factor, this.z * factor); + } + + /** + * Returns the length of the vector. + */ + public double lengthVector() + { + return (double)MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + + public double lengthSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + /** + * Returns a new vector with x value equal to the second parameter, along the line between this vector and the + * passed in vector, or null if not possible. + */ + @Nullable + public Vec3d getIntermediateWithXValue(Vec3d vec, double x) + { + double d0 = vec.x - this.x; + double d1 = vec.y - this.y; + double d2 = vec.z - this.z; + + if (d0 * d0 < 1.0000000116860974E-7D) + { + return null; + } + else + { + double d3 = (x - this.x) / d0; + return d3 >= 0.0D && d3 <= 1.0D ? new Vec3d(this.x + d0 * d3, this.y + d1 * d3, this.z + d2 * d3) : null; + } + } + + /** + * Returns a new vector with y value equal to the second parameter, along the line between this vector and the + * passed in vector, or null if not possible. + */ + @Nullable + public Vec3d getIntermediateWithYValue(Vec3d vec, double y) + { + double d0 = vec.x - this.x; + double d1 = vec.y - this.y; + double d2 = vec.z - this.z; + + if (d1 * d1 < 1.0000000116860974E-7D) + { + return null; + } + else + { + double d3 = (y - this.y) / d1; + return d3 >= 0.0D && d3 <= 1.0D ? new Vec3d(this.x + d0 * d3, this.y + d1 * d3, this.z + d2 * d3) : null; + } + } + + /** + * Returns a new vector with z value equal to the second parameter, along the line between this vector and the + * passed in vector, or null if not possible. + */ + @Nullable + public Vec3d getIntermediateWithZValue(Vec3d vec, double z) + { + double d0 = vec.x - this.x; + double d1 = vec.y - this.y; + double d2 = vec.z - this.z; + + if (d2 * d2 < 1.0000000116860974E-7D) + { + return null; + } + else + { + double d3 = (z - this.z) / d2; + return d3 >= 0.0D && d3 <= 1.0D ? new Vec3d(this.x + d0 * d3, this.y + d1 * d3, this.z + d2 * d3) : null; + } + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof Vec3d)) + { + return false; + } + else + { + Vec3d vec3d = (Vec3d)p_equals_1_; + + if (Double.compare(vec3d.x, this.x) != 0) + { + return false; + } + else if (Double.compare(vec3d.y, this.y) != 0) + { + return false; + } + else + { + return Double.compare(vec3d.z, this.z) == 0; + } + } + } + + public int hashCode() + { + long j = Double.doubleToLongBits(this.x); + int i = (int)(j ^ j >>> 32); + j = Double.doubleToLongBits(this.y); + i = 31 * i + (int)(j ^ j >>> 32); + j = Double.doubleToLongBits(this.z); + i = 31 * i + (int)(j ^ j >>> 32); + return i; + } + + public String toString() + { + return "(" + this.x + ", " + this.y + ", " + this.z + ")"; + } + + public Vec3d rotatePitch(float pitch) + { + float f = MathHelper.cos(pitch); + float f1 = MathHelper.sin(pitch); + double d0 = this.x; + double d1 = this.y * (double)f + this.z * (double)f1; + double d2 = this.z * (double)f - this.y * (double)f1; + return new Vec3d(d0, d1, d2); + } + + public Vec3d rotateYaw(float yaw) + { + float f = MathHelper.cos(yaw); + float f1 = MathHelper.sin(yaw); + double d0 = this.x * (double)f + this.z * (double)f1; + double d1 = this.y; + double d2 = this.z * (double)f - this.x * (double)f1; + return new Vec3d(d0, d1, d2); + } + + /** + * returns a Vec3d from given pitch and yaw degrees as Vec2f + */ + public static Vec3d fromPitchYawVector(Vec2f p_189984_0_) + { + return fromPitchYaw(p_189984_0_.x, p_189984_0_.y); + } + + /** + * returns a Vec3d from given pitch and yaw degrees + */ + public static Vec3d fromPitchYaw(float p_189986_0_, float p_189986_1_) + { + float f = MathHelper.cos(-p_189986_1_ * 0.017453292F - (float)Math.PI); + float f1 = MathHelper.sin(-p_189986_1_ * 0.017453292F - (float)Math.PI); + float f2 = -MathHelper.cos(-p_189986_0_ * 0.017453292F); + float f3 = MathHelper.sin(-p_189986_0_ * 0.017453292F); + return new Vec3d((double)(f1 * f2), (double)f3, (double)(f * f2)); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec3i.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec3i.java new file mode 100644 index 0000000..ecd775d --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/Vec3i.java @@ -0,0 +1,150 @@ +package net.minecraft.util.math; + +import com.google.common.base.MoreObjects; +import javax.annotation.concurrent.Immutable; + +@Immutable +public class Vec3i implements Comparable +{ + /** An immutable vector with zero as all coordinates. */ + public static final Vec3i NULL_VECTOR = new Vec3i(0, 0, 0); + /** X coordinate */ + private final int x; + /** Y coordinate */ + private final int y; + /** Z coordinate */ + private final int z; + + public Vec3i(int xIn, int yIn, int zIn) + { + this.x = xIn; + this.y = yIn; + this.z = zIn; + } + + public Vec3i(double xIn, double yIn, double zIn) + { + this(MathHelper.floor(xIn), MathHelper.floor(yIn), MathHelper.floor(zIn)); + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof Vec3i)) + { + return false; + } + else + { + Vec3i vec3i = (Vec3i)p_equals_1_; + + if (this.getX() != vec3i.getX()) + { + return false; + } + else if (this.getY() != vec3i.getY()) + { + return false; + } + else + { + return this.getZ() == vec3i.getZ(); + } + } + } + + public int hashCode() + { + return (this.getY() + this.getZ() * 31) * 31 + this.getX(); + } + + public int compareTo(Vec3i p_compareTo_1_) + { + if (this.getY() == p_compareTo_1_.getY()) + { + return this.getZ() == p_compareTo_1_.getZ() ? this.getX() - p_compareTo_1_.getX() : this.getZ() - p_compareTo_1_.getZ(); + } + else + { + return this.getY() - p_compareTo_1_.getY(); + } + } + + /** + * Gets the X coordinate. + */ + public int getX() + { + return this.x; + } + + /** + * Gets the Y coordinate. + */ + public int getY() + { + return this.y; + } + + /** + * Gets the Z coordinate. + */ + public int getZ() + { + return this.z; + } + + /** + * Calculate the cross product of this and the given Vector + */ + public Vec3i crossProduct(Vec3i vec) + { + return new Vec3i(this.getY() * vec.getZ() - this.getZ() * vec.getY(), this.getZ() * vec.getX() - this.getX() * vec.getZ(), this.getX() * vec.getY() - this.getY() * vec.getX()); + } + + public double getDistance(int xIn, int yIn, int zIn) + { + double d0 = (double)(this.getX() - xIn); + double d1 = (double)(this.getY() - yIn); + double d2 = (double)(this.getZ() - zIn); + return Math.sqrt(d0 * d0 + d1 * d1 + d2 * d2); + } + + /** + * Calculate squared distance to the given coordinates + */ + public double distanceSq(double toX, double toY, double toZ) + { + double d0 = (double)this.getX() - toX; + double d1 = (double)this.getY() - toY; + double d2 = (double)this.getZ() - toZ; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + /** + * Compute square of distance from point x, y, z to center of this Block + */ + public double distanceSqToCenter(double xIn, double yIn, double zIn) + { + double d0 = (double)this.getX() + 0.5D - xIn; + double d1 = (double)this.getY() + 0.5D - yIn; + double d2 = (double)this.getZ() + 0.5D - zIn; + return d0 * d0 + d1 * d1 + d2 * d2; + } + + /** + * Calculate squared distance to the given Vector + */ + public double distanceSq(Vec3i to) + { + return this.distanceSq((double)to.getX(), (double)to.getY(), (double)to.getZ()); + } + + public String toString() + { + return MoreObjects.toStringHelper(this).add("x", this.getX()).add("y", this.getY()).add("z", this.getZ()).toString(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/math/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/util/math/package-info.java new file mode 100644 index 0000000..605d43c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/math/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.util.math; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/util/package-info.java new file mode 100644 index 0000000..f645f5b --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.util; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/registry/IRegistry.java b/build/tmp/recompileMc/sources/net/minecraft/util/registry/IRegistry.java new file mode 100644 index 0000000..87bca23 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/registry/IRegistry.java @@ -0,0 +1,24 @@ +package net.minecraft.util.registry; + +import java.util.Set; +import javax.annotation.Nullable; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IRegistry extends Iterable +{ + @Nullable + @SideOnly(Side.CLIENT) + V getObject(K name); + + /** + * Register an object on this registry. + */ + void putObject(K key, V value); + + /** + * Gets all the keys recognized by this registry. + */ + @SideOnly(Side.CLIENT) + Set getKeys(); +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryDefaulted.java b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryDefaulted.java new file mode 100644 index 0000000..7b1e675 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryDefaulted.java @@ -0,0 +1,22 @@ +package net.minecraft.util.registry; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class RegistryDefaulted extends RegistrySimple +{ + /** Default object for this registry, returned when an object is not found. */ + private final V defaultObject; + + public RegistryDefaulted(V defaultObjectIn) + { + this.defaultObject = defaultObjectIn; + } + + @Nonnull + public V getObject(@Nullable K name) + { + V v = (V)super.getObject(name); + return (V)(v == null ? this.defaultObject : v); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryNamespaced.java b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryNamespaced.java new file mode 100644 index 0000000..7327484 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryNamespaced.java @@ -0,0 +1,81 @@ +package net.minecraft.util.registry; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import java.util.Iterator; +import java.util.Map; +import javax.annotation.Nullable; +import net.minecraft.util.IObjectIntIterable; +import net.minecraft.util.IntIdentityHashBiMap; + +public class RegistryNamespaced extends RegistrySimple implements IObjectIntIterable +{ + /** The backing store that maps Integers to objects. */ + protected final IntIdentityHashBiMap underlyingIntegerMap = new IntIdentityHashBiMap(256); + /** A BiMap of objects (key) to their names (value). */ + protected final Map inverseObjectRegistry; + + public RegistryNamespaced() + { + this.inverseObjectRegistry = ((BiMap)this.registryObjects).inverse(); + } + + public void register(int id, K key, V value) + { + this.underlyingIntegerMap.put(value, id); + this.putObject(key, value); + } + + /** + * Creates the Map we will use to map keys to their registered values. + */ + protected Map createUnderlyingMap() + { + return HashBiMap.create(); + } + + @Nullable + public V getObject(@Nullable K name) + { + return (V)super.getObject(name); + } + + /** + * Gets the name we use to identify the given object. + */ + @Nullable + public K getNameForObject(V value) + { + return this.inverseObjectRegistry.get(value); + } + + /** + * Does this registry contain an entry for the given key? + */ + public boolean containsKey(K key) + { + return super.containsKey(key); + } + + /** + * Gets the integer ID we use to identify the given object. + */ + public int getIDForObject(@Nullable V value) + { + return this.underlyingIntegerMap.getId(value); + } + + /** + * Gets the object identified by the given ID. + */ + @Nullable + public V getObjectById(int id) + { + return this.underlyingIntegerMap.get(id); + } + + public Iterator iterator() + { + return this.underlyingIntegerMap.iterator(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.java b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.java new file mode 100644 index 0000000..b7d6dd1 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistryNamespacedDefaultedByKey.java @@ -0,0 +1,80 @@ +package net.minecraft.util.registry; + +import java.util.Random; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import org.apache.commons.lang3.Validate; + +public class RegistryNamespacedDefaultedByKey extends RegistryNamespaced +{ + /** The key of the default value. */ + private final K defaultValueKey; + /** The default value for this registry, retrurned in the place of a null value. */ + private V defaultValue; + + public RegistryNamespacedDefaultedByKey(K defaultValueKeyIn) + { + this.defaultValueKey = defaultValueKeyIn; + } + + public void register(int id, K key, V value) + { + if (this.defaultValueKey.equals(key)) + { + this.defaultValue = value; + } + + super.register(id, key, value); + } + + /** + * validates that this registry's key is non-null + */ + public void validateKey() + { + Validate.notNull(this.defaultValue, "Missing default of DefaultedMappedRegistry: " + this.defaultValueKey); + } + + /** + * Gets the integer ID we use to identify the given object. + */ + public int getIDForObject(V value) + { + int i = super.getIDForObject(value); + return i == -1 ? super.getIDForObject(this.defaultValue) : i; + } + + /** + * Gets the name we use to identify the given object. + */ + @Nonnull + public K getNameForObject(V value) + { + K k = (K)super.getNameForObject(value); + return (K)(k == null ? this.defaultValueKey : k); + } + + @Nonnull + public V getObject(@Nullable K name) + { + V v = (V)super.getObject(name); + return (V)(v == null ? this.defaultValue : v); + } + + /** + * Gets the object identified by the given ID. + */ + @Nonnull + public V getObjectById(int id) + { + V v = (V)super.getObjectById(id); + return (V)(v == null ? this.defaultValue : v); + } + + @Nonnull + public V getRandomObject(Random random) + { + V v = (V)super.getRandomObject(random); + return (V)(v == null ? this.defaultValue : v); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistrySimple.java b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistrySimple.java new file mode 100644 index 0000000..7fa6294 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/registry/RegistrySimple.java @@ -0,0 +1,91 @@ +package net.minecraft.util.registry; + +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import javax.annotation.Nullable; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RegistrySimple implements IRegistry +{ + private static final Logger LOGGER = LogManager.getLogger(); + /** Objects registered on this registry. */ + protected final Map registryObjects = this.createUnderlyingMap(); + private Object[] values; + + /** + * Creates the Map we will use to map keys to their registered values. + */ + protected Map createUnderlyingMap() + { + return Maps.newHashMap(); + } + + @Nullable + public V getObject(@Nullable K name) + { + return this.registryObjects.get(name); + } + + /** + * Register an object on this registry. + */ + public void putObject(K key, V value) + { + Validate.notNull(key); + Validate.notNull(value); + this.values = null; + + if (this.registryObjects.containsKey(key)) + { + LOGGER.debug("Adding duplicate key '{}' to registry", key); + } + + this.registryObjects.put(key, value); + } + + /** + * Gets all the keys recognized by this registry. + */ + public Set getKeys() + { + return Collections.unmodifiableSet(this.registryObjects.keySet()); + } + + @Nullable + public V getRandomObject(Random random) + { + if (this.values == null) + { + Collection collection = this.registryObjects.values(); + + if (collection.isEmpty()) + { + return (V)null; + } + + this.values = collection.toArray(new Object[collection.size()]); + } + + return (V)this.values[random.nextInt(this.values.length)]; + } + + /** + * Does this registry contain an entry for the given key? + */ + public boolean containsKey(K key) + { + return this.registryObjects.containsKey(key); + } + + public Iterator iterator() + { + return this.registryObjects.values().iterator(); + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/registry/package-info.java b/build/tmp/recompileMc/sources/net/minecraft/util/registry/package-info.java new file mode 100644 index 0000000..db16f4f --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/registry/package-info.java @@ -0,0 +1,7 @@ +// Auto generated package-info by MCP +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package net.minecraft.util.registry; + +import mcp.MethodsReturnNonnullByDefault; +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/text/ChatType.java b/build/tmp/recompileMc/sources/net/minecraft/util/text/ChatType.java new file mode 100644 index 0000000..745dc6c --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/text/ChatType.java @@ -0,0 +1,33 @@ +package net.minecraft.util.text; + +public enum ChatType +{ + CHAT((byte)0), + SYSTEM((byte)1), + GAME_INFO((byte)2); + + private final byte id; + + private ChatType(byte id) + { + this.id = id; + } + + public byte getId() + { + return this.id; + } + + public static ChatType byId(byte idIn) + { + for (ChatType chattype : values()) + { + if (idIn == chattype.id) + { + return chattype; + } + } + + return CHAT; + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/text/ITextComponent.java b/build/tmp/recompileMc/sources/net/minecraft/util/text/ITextComponent.java new file mode 100644 index 0000000..3e4af76 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/text/ITextComponent.java @@ -0,0 +1,346 @@ +package net.minecraft.util.text; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Map.Entry; +import javax.annotation.Nullable; +import net.minecraft.util.EnumTypeAdapterFactory; +import net.minecraft.util.JsonUtils; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface ITextComponent extends Iterable +{ + /** + * Sets the style of this component and updates the parent style of all of the sibling components. + */ + ITextComponent setStyle(Style style); + + /** + * Gets the style of this component. Returns a direct reference; changes to this style will modify the style of this + * component (IE, there is no need to call {@link #setStyle(Style)} again after modifying it). + * + * If this component's style is currently null, it will be initialized to the default style, and the + * parent style of all sibling components will be set to that style. (IE, changes to this style will also be + * reflected in sibling components.) + * + * This method never returns null. + */ + Style getStyle(); + + /** + * Adds a new component to the end of the sibling list, with the specified text. Same as calling {@link + * #appendSibling(ITextComponent)} with a new {@link TextComponentString}. + * + * @return This component, for chaining (and not the newly added component) + */ + ITextComponent appendText(String text); + + /** + * Adds a new component to the end of the sibling list, setting that component's style's parent style to this + * component's style. + * + * @return This component, for chaining (and not the newly added component) + */ + ITextComponent appendSibling(ITextComponent component); + + /** + * Gets the raw content of this component (but not its sibling components), without any formatting codes. For + * example, this is the raw text in a {@link TextComponentString}, but it's the translated text for a {@link + * TextComponentTranslation} and it's the score value for a {@link TextComponentScore}. + */ + String getUnformattedComponentText(); + + /** + * Gets the text of this component and all sibling components, without any formatting codes. + */ + String getUnformattedText(); + + /** + * Gets the text of this component and all sibling components, with formatting codes added for rendering. + */ + String getFormattedText(); + + /** + * Gets the sibling components of this one. + */ + List getSiblings(); + + /** + * Creates a copy of this component. Almost a deep copy, except the style is shallow-copied. + */ + ITextComponent createCopy(); + + public static class Serializer implements JsonDeserializer, JsonSerializer + { + private static final Gson GSON; + + public ITextComponent deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) throws JsonParseException + { + if (p_deserialize_1_.isJsonPrimitive()) + { + return new TextComponentString(p_deserialize_1_.getAsString()); + } + else if (!p_deserialize_1_.isJsonObject()) + { + if (p_deserialize_1_.isJsonArray()) + { + JsonArray jsonarray1 = p_deserialize_1_.getAsJsonArray(); + ITextComponent itextcomponent1 = null; + + for (JsonElement jsonelement : jsonarray1) + { + ITextComponent itextcomponent2 = this.deserialize(jsonelement, jsonelement.getClass(), p_deserialize_3_); + + if (itextcomponent1 == null) + { + itextcomponent1 = itextcomponent2; + } + else + { + itextcomponent1.appendSibling(itextcomponent2); + } + } + + return itextcomponent1; + } + else + { + throw new JsonParseException("Don't know how to turn " + p_deserialize_1_ + " into a Component"); + } + } + else + { + JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); + ITextComponent itextcomponent; + + if (jsonobject.has("text")) + { + itextcomponent = new TextComponentString(jsonobject.get("text").getAsString()); + } + else if (jsonobject.has("translate")) + { + String s = jsonobject.get("translate").getAsString(); + + if (jsonobject.has("with")) + { + JsonArray jsonarray = jsonobject.getAsJsonArray("with"); + Object[] aobject = new Object[jsonarray.size()]; + + for (int i = 0; i < aobject.length; ++i) + { + aobject[i] = this.deserialize(jsonarray.get(i), p_deserialize_2_, p_deserialize_3_); + + if (aobject[i] instanceof TextComponentString) + { + TextComponentString textcomponentstring = (TextComponentString)aobject[i]; + + if (textcomponentstring.getStyle().isEmpty() && textcomponentstring.getSiblings().isEmpty()) + { + aobject[i] = textcomponentstring.getText(); + } + } + } + + itextcomponent = new TextComponentTranslation(s, aobject); + } + else + { + itextcomponent = new TextComponentTranslation(s, new Object[0]); + } + } + else if (jsonobject.has("score")) + { + JsonObject jsonobject1 = jsonobject.getAsJsonObject("score"); + + if (!jsonobject1.has("name") || !jsonobject1.has("objective")) + { + throw new JsonParseException("A score component needs a least a name and an objective"); + } + + itextcomponent = new TextComponentScore(JsonUtils.getString(jsonobject1, "name"), JsonUtils.getString(jsonobject1, "objective")); + + if (jsonobject1.has("value")) + { + ((TextComponentScore)itextcomponent).setValue(JsonUtils.getString(jsonobject1, "value")); + } + } + else if (jsonobject.has("selector")) + { + itextcomponent = new TextComponentSelector(JsonUtils.getString(jsonobject, "selector")); + } + else + { + if (!jsonobject.has("keybind")) + { + throw new JsonParseException("Don't know how to turn " + p_deserialize_1_ + " into a Component"); + } + + itextcomponent = new TextComponentKeybind(JsonUtils.getString(jsonobject, "keybind")); + } + + if (jsonobject.has("extra")) + { + JsonArray jsonarray2 = jsonobject.getAsJsonArray("extra"); + + if (jsonarray2.size() <= 0) + { + throw new JsonParseException("Unexpected empty array of components"); + } + + for (int j = 0; j < jsonarray2.size(); ++j) + { + itextcomponent.appendSibling(this.deserialize(jsonarray2.get(j), p_deserialize_2_, p_deserialize_3_)); + } + } + + itextcomponent.setStyle((Style)p_deserialize_3_.deserialize(p_deserialize_1_, Style.class)); + return itextcomponent; + } + } + + private void serializeChatStyle(Style style, JsonObject object, JsonSerializationContext ctx) + { + JsonElement jsonelement = ctx.serialize(style); + + if (jsonelement.isJsonObject()) + { + JsonObject jsonobject = (JsonObject)jsonelement; + + for (Entry entry : jsonobject.entrySet()) + { + object.add(entry.getKey(), entry.getValue()); + } + } + } + + public JsonElement serialize(ITextComponent p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) + { + JsonObject jsonobject = new JsonObject(); + + if (!p_serialize_1_.getStyle().isEmpty()) + { + this.serializeChatStyle(p_serialize_1_.getStyle(), jsonobject, p_serialize_3_); + } + + if (!p_serialize_1_.getSiblings().isEmpty()) + { + JsonArray jsonarray = new JsonArray(); + + for (ITextComponent itextcomponent : p_serialize_1_.getSiblings()) + { + jsonarray.add(this.serialize(itextcomponent, itextcomponent.getClass(), p_serialize_3_)); + } + + jsonobject.add("extra", jsonarray); + } + + if (p_serialize_1_ instanceof TextComponentString) + { + jsonobject.addProperty("text", ((TextComponentString)p_serialize_1_).getText()); + } + else if (p_serialize_1_ instanceof TextComponentTranslation) + { + TextComponentTranslation textcomponenttranslation = (TextComponentTranslation)p_serialize_1_; + jsonobject.addProperty("translate", textcomponenttranslation.getKey()); + + if (textcomponenttranslation.getFormatArgs() != null && textcomponenttranslation.getFormatArgs().length > 0) + { + JsonArray jsonarray1 = new JsonArray(); + + for (Object object : textcomponenttranslation.getFormatArgs()) + { + if (object instanceof ITextComponent) + { + jsonarray1.add(this.serialize((ITextComponent)object, object.getClass(), p_serialize_3_)); + } + else + { + jsonarray1.add(new JsonPrimitive(String.valueOf(object))); + } + } + + jsonobject.add("with", jsonarray1); + } + } + else if (p_serialize_1_ instanceof TextComponentScore) + { + TextComponentScore textcomponentscore = (TextComponentScore)p_serialize_1_; + JsonObject jsonobject1 = new JsonObject(); + jsonobject1.addProperty("name", textcomponentscore.getName()); + jsonobject1.addProperty("objective", textcomponentscore.getObjective()); + jsonobject1.addProperty("value", textcomponentscore.getUnformattedComponentText()); + jsonobject.add("score", jsonobject1); + } + else if (p_serialize_1_ instanceof TextComponentSelector) + { + TextComponentSelector textcomponentselector = (TextComponentSelector)p_serialize_1_; + jsonobject.addProperty("selector", textcomponentselector.getSelector()); + } + else + { + if (!(p_serialize_1_ instanceof TextComponentKeybind)) + { + throw new IllegalArgumentException("Don't know how to serialize " + p_serialize_1_ + " as a Component"); + } + + TextComponentKeybind textcomponentkeybind = (TextComponentKeybind)p_serialize_1_; + jsonobject.addProperty("keybind", textcomponentkeybind.getKeybind()); + } + + return jsonobject; + } + + /** + * Serializes a component into JSON. + */ + public static String componentToJson(ITextComponent component) + { + return GSON.toJson(component); + } + + /** + * Parses a JSON string into a {@link ITextComponent}, with strict parsing. + * + * @see #fromJsonLenient(String) + * @see {@link com.google.gson.stream.JsonReader#setLenient(boolean)} + */ + @Nullable + public static ITextComponent jsonToComponent(String json) + { + return (ITextComponent)JsonUtils.gsonDeserialize(GSON, json, ITextComponent.class, false); + } + + /** + * Parses a JSON string into a {@link ITextComponent}, being lenient upon parse errors. + * + * @see #jsonToComponent(String) + * @see {@link com.google.gson.stream.JsonReader#setLenient(boolean)} + */ + @Nullable + public static ITextComponent fromJsonLenient(String json) + { + return (ITextComponent)JsonUtils.gsonDeserialize(GSON, json, ITextComponent.class, true); + } + + static + { + GsonBuilder gsonbuilder = new GsonBuilder(); + gsonbuilder.registerTypeHierarchyAdapter(ITextComponent.class, new ITextComponent.Serializer()); + gsonbuilder.registerTypeHierarchyAdapter(Style.class, new Style.Serializer()); + gsonbuilder.registerTypeAdapterFactory(new EnumTypeAdapterFactory()); + GSON = gsonbuilder.create(); + } + } +} \ No newline at end of file diff --git a/build/tmp/recompileMc/sources/net/minecraft/util/text/Style.java b/build/tmp/recompileMc/sources/net/minecraft/util/text/Style.java new file mode 100644 index 0000000..40961d5 --- /dev/null +++ b/build/tmp/recompileMc/sources/net/minecraft/util/text/Style.java @@ -0,0 +1,729 @@ +package net.minecraft.util.text; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; +import javax.annotation.Nullable; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class Style +{ + /** The parent of this ChatStyle. Used for looking up values that this instance does not override. */ + private Style parentStyle; + private TextFormatting color; + private Boolean bold; + private Boolean italic; + private Boolean underlined; + private Boolean strikethrough; + private Boolean obfuscated; + private ClickEvent clickEvent; + private HoverEvent hoverEvent; + private String insertion; + /** The base of the ChatStyle hierarchy. All ChatStyle instances are implicitly children of this. */ + private static final Style ROOT = new Style() + { + /** + * Gets the effective color of this ChatStyle. + */ + @Nullable + public TextFormatting getColor() + { + return null; + } + /** + * Whether or not text of this ChatStyle should be in bold. + */ + public boolean getBold() + { + return false; + } + /** + * Whether or not text of this ChatStyle should be italicized. + */ + public boolean getItalic() + { + return false; + } + /** + * Whether or not to format text of this ChatStyle using strikethrough. + */ + public boolean getStrikethrough() + { + return false; + } + /** + * Whether or not text of this ChatStyle should be underlined. + */ + public boolean getUnderlined() + { + return false; + } + /** + * Whether or not text of this ChatStyle should be obfuscated. + */ + public boolean getObfuscated() + { + return false; + } + /** + * The effective chat click event. + */ + @Nullable + public ClickEvent getClickEvent() + { + return null; + } + /** + * The effective chat hover event. + */ + @Nullable + public HoverEvent getHoverEvent() + { + return null; + } + /** + * Get the text to be inserted into Chat when the component is shift-clicked + */ + @Nullable + public String getInsertion() + { + return null; + } + /** + * Sets the color for this ChatStyle to the given value. Only use color values for this; set other values using + * the specific methods. + */ + public Style setColor(TextFormatting color) + { + throw new UnsupportedOperationException(); + } + /** + * Sets whether or not text of this ChatStyle should be in bold. Set to false if, e.g., the parent style is + * bold and you want text of this style to be unbolded. + */ + public Style setBold(Boolean boldIn) + { + throw new UnsupportedOperationException(); + } + /** + * Sets whether or not text of this ChatStyle should be italicized. Set to false if, e.g., the parent style is + * italicized and you want to override that for this style. + */ + public Style setItalic(Boolean italic) + { + throw new UnsupportedOperationException(); + } + /** + * Sets whether or not to format text of this ChatStyle using strikethrough. Set to false if, e.g., the parent + * style uses strikethrough and you want to override that for this style. + */ + public Style setStrikethrough(Boolean strikethrough) + { + throw new UnsupportedOperationException(); + } + /** + * Sets whether or not text of this ChatStyle should be underlined. Set to false if, e.g., the parent style is + * underlined and you want to override that for this style. + */ + public Style setUnderlined(Boolean underlined) + { + throw new UnsupportedOperationException(); + } + /** + * Sets whether or not text of this ChatStyle should be obfuscated. Set to false if, e.g., the parent style is + * obfuscated and you want to override that for this style. + */ + public Style setObfuscated(Boolean obfuscated) + { + throw new UnsupportedOperationException(); + } + /** + * Sets the event that should be run when text of this ChatStyle is clicked on. + */ + public Style setClickEvent(ClickEvent event) + { + throw new UnsupportedOperationException(); + } + /** + * Sets the event that should be run when text of this ChatStyle is hovered over. + */ + public Style setHoverEvent(HoverEvent event) + { + throw new UnsupportedOperationException(); + } + /** + * Sets the fallback ChatStyle to use if this ChatStyle does not override some value. Without a parent, obvious + * defaults are used (bold: false, underlined: false, etc). + */ + public Style setParentStyle(Style parent) + { + throw new UnsupportedOperationException(); + } + public String toString() + { + return "Style.ROOT"; + } + /** + * Creates a shallow copy of this style. Changes to this instance's values will not be reflected in the copy, + * but changes to the parent style's values WILL be reflected in both this instance and the copy, wherever + * either does not override a value. + */ + public Style createShallowCopy() + { + return this; + } + /** + * Creates a deep copy of this style. No changes to this instance or its parent style will be reflected in the + * copy. + */ + public Style createDeepCopy() + { + return this; + } + /** + * Gets the equivilent text formatting code(s) for this style, including all needed section sign characters. + * + * @return A formatted string that can be combined with text to produce this style. + */ + @SideOnly(Side.CLIENT) + public String getFormattingCode() + { + return ""; + } + }; + + /** + * Gets the effective color of this ChatStyle. + */ + @Nullable + public TextFormatting getColor() + { + return this.color == null ? this.getParent().getColor() : this.color; + } + + /** + * Whether or not text of this ChatStyle should be in bold. + */ + public boolean getBold() + { + return this.bold == null ? this.getParent().getBold() : this.bold.booleanValue(); + } + + /** + * Whether or not text of this ChatStyle should be italicized. + */ + public boolean getItalic() + { + return this.italic == null ? this.getParent().getItalic() : this.italic.booleanValue(); + } + + /** + * Whether or not to format text of this ChatStyle using strikethrough. + */ + public boolean getStrikethrough() + { + return this.strikethrough == null ? this.getParent().getStrikethrough() : this.strikethrough.booleanValue(); + } + + /** + * Whether or not text of this ChatStyle should be underlined. + */ + public boolean getUnderlined() + { + return this.underlined == null ? this.getParent().getUnderlined() : this.underlined.booleanValue(); + } + + /** + * Whether or not text of this ChatStyle should be obfuscated. + */ + public boolean getObfuscated() + { + return this.obfuscated == null ? this.getParent().getObfuscated() : this.obfuscated.booleanValue(); + } + + /** + * Whether or not this style is empty (inherits everything from the parent). + */ + public boolean isEmpty() + { + return this.bold == null && this.italic == null && this.strikethrough == null && this.underlined == null && this.obfuscated == null && this.color == null && this.clickEvent == null && this.hoverEvent == null && this.insertion == null; + } + + /** + * The effective chat click event. + */ + @Nullable + public ClickEvent getClickEvent() + { + return this.clickEvent == null ? this.getParent().getClickEvent() : this.clickEvent; + } + + /** + * The effective chat hover event. + */ + @Nullable + public HoverEvent getHoverEvent() + { + return this.hoverEvent == null ? this.getParent().getHoverEvent() : this.hoverEvent; + } + + /** + * Get the text to be inserted into Chat when the component is shift-clicked + */ + @Nullable + public String getInsertion() + { + return this.insertion == null ? this.getParent().getInsertion() : this.insertion; + } + + /** + * Sets the color for this ChatStyle to the given value. Only use color values for this; set other values using the + * specific methods. + */ + public Style setColor(TextFormatting color) + { + this.color = color; + return this; + } + + /** + * Sets whether or not text of this ChatStyle should be in bold. Set to false if, e.g., the parent style is bold + * and you want text of this style to be unbolded. + */ + public Style setBold(Boolean boldIn) + { + this.bold = boldIn; + return this; + } + + /** + * Sets whether or not text of this ChatStyle should be italicized. Set to false if, e.g., the parent style is + * italicized and you want to override that for this style. + */ + public Style setItalic(Boolean italic) + { + this.italic = italic; + return this; + } + + /** + * Sets whether or not to format text of this ChatStyle using strikethrough. Set to false if, e.g., the parent + * style uses strikethrough and you want to override that for this style. + */ + public Style setStrikethrough(Boolean strikethrough) + { + this.strikethrough = strikethrough; + return this; + } + + /** + * Sets whether or not text of this ChatStyle should be underlined. Set to false if, e.g., the parent style is + * underlined and you want to override that for this style. + */ + public Style setUnderlined(Boolean underlined) + { + this.underlined = underlined; + return this; + } + + /** + * Sets whether or not text of this ChatStyle should be obfuscated. Set to false if, e.g., the parent style is + * obfuscated and you want to override that for this style. + */ + public Style setObfuscated(Boolean obfuscated) + { + this.obfuscated = obfuscated; + return this; + } + + /** + * Sets the event that should be run when text of this ChatStyle is clicked on. + */ + public Style setClickEvent(ClickEvent event) + { + this.clickEvent = event; + return this; + } + + /** + * Sets the event that should be run when text of this ChatStyle is hovered over. + */ + public Style setHoverEvent(HoverEvent event) + { + this.hoverEvent = event; + return this; + } + + /** + * Set a text to be inserted into Chat when the component is shift-clicked + */ + public Style setInsertion(String insertion) + { + this.insertion = insertion; + return this; + } + + /** + * Sets the fallback ChatStyle to use if this ChatStyle does not override some value. Without a parent, obvious + * defaults are used (bold: false, underlined: false, etc). + */ + public Style setParentStyle(Style parent) + { + this.parentStyle = parent; + return this; + } + + /** + * Gets the equivilent text formatting code(s) for this style, including all needed section sign characters. + * + * @return A formatted string that can be combined with text to produce this style. + */ + public String getFormattingCode() + { + if (this.isEmpty()) + { + return this.parentStyle != null ? this.parentStyle.getFormattingCode() : ""; + } + else + { + StringBuilder stringbuilder = new StringBuilder(); + + if (this.getColor() != null) + { + stringbuilder.append((Object)this.getColor()); + } + + if (this.getBold()) + { + stringbuilder.append((Object)TextFormatting.BOLD); + } + + if (this.getItalic()) + { + stringbuilder.append((Object)TextFormatting.ITALIC); + } + + if (this.getUnderlined()) + { + stringbuilder.append((Object)TextFormatting.UNDERLINE); + } + + if (this.getObfuscated()) + { + stringbuilder.append((Object)TextFormatting.OBFUSCATED); + } + + if (this.getStrikethrough()) + { + stringbuilder.append((Object)TextFormatting.STRIKETHROUGH); + } + + return stringbuilder.toString(); + } + } + + /** + * Gets the immediate parent of this ChatStyle. + */ + private Style getParent() + { + return this.parentStyle == null ? ROOT : this.parentStyle; + } + + public String toString() + { + return "Style{hasParent=" + (this.parentStyle != null) + ", color=" + this.color + ", bold=" + this.bold + ", italic=" + this.italic + ", underlined=" + this.underlined + ", obfuscated=" + this.obfuscated + ", clickEvent=" + this.getClickEvent() + ", hoverEvent=" + this.getHoverEvent() + ", insertion=" + this.getInsertion() + '}'; + } + + public boolean equals(Object p_equals_1_) + { + if (this == p_equals_1_) + { + return true; + } + else if (!(p_equals_1_ instanceof Style)) + { + return false; + } + else + { + boolean flag; + label77: + { + Style style = (Style)p_equals_1_; + + if (this.getBold() == style.getBold() && this.getColor() == style.getColor() && this.getItalic() == style.getItalic() && this.getObfuscated() == style.getObfuscated() && this.getStrikethrough() == style.getStrikethrough() && this.getUnderlined() == style.getUnderlined()) + { + label71: + { + if (this.getClickEvent() != null) + { + if (!this.getClickEvent().equals(style.getClickEvent())) + { + break label71; + } + } + else if (style.getClickEvent() != null) + { + break label71; + } + + if (this.getHoverEvent() != null) + { + if (!this.getHoverEvent().equals(style.getHoverEvent())) + { + break label71; + } + } + else if (style.getHoverEvent() != null) + { + break label71; + } + + if (this.getInsertion() != null) + { + if (this.getInsertion().equals(style.getInsertion())) + { + break label77; + } + } + else if (style.getInsertion() == null) + { + break label77; + } + } + } + + flag = false; + return flag; + } + flag = true; + return flag; + } + } + + public int hashCode() + { + int i = this.color.hashCode(); + i = 31 * i + this.bold.hashCode(); + i = 31 * i + this.italic.hashCode(); + i = 31 * i + this.underlined.hashCode(); + i = 31 * i + this.strikethrough.hashCode(); + i = 31 * i + this.obfuscated.hashCode(); + i = 31 * i + this.clickEvent.hashCode(); + i = 31 * i + this.hoverEvent.hashCode(); + i = 31 * i + this.insertion.hashCode(); + return i; + } + + /** + * Creates a shallow copy of this style. Changes to this instance's values will not be reflected in the copy, but + * changes to the parent style's values WILL be reflected in both this instance and the copy, wherever either does + * not override a value. + */ + public Style createShallowCopy() + { + Style style = new Style(); + style.bold = this.bold; + style.italic = this.italic; + style.strikethrough = this.strikethrough; + style.underlined = this.underlined; + style.obfuscated = this.obfuscated; + style.color = this.color; + style.clickEvent = this.clickEvent; + style.hoverEvent = this.hoverEvent; + style.parentStyle = this.parentStyle; + style.insertion = this.insertion; + return style; + } + + /** + * Creates a deep copy of this style. No changes to this instance or its parent style will be reflected in the + * copy. + */ + public Style createDeepCopy() + { + Style style = new Style(); + style.setBold(Boolean.valueOf(this.getBold())); + style.setItalic(Boolean.valueOf(this.getItalic())); + style.setStrikethrough(Boolean.valueOf(this.getStrikethrough())); + style.setUnderlined(Boolean.valueOf(this.getUnderlined())); + style.setObfuscated(Boolean.valueOf(this.getObfuscated())); + style.setColor(this.getColor()); + style.setClickEvent(this.getClickEvent()); + style.setHoverEvent(this.getHoverEvent()); + style.setInsertion(this.getInsertion()); + return style; + } + + public static class Serializer implements JsonDeserializer